Raspbian Package Auto-Building

Build log for git (1:2.39.0-1) on armhf

git1:2.39.0-1armhf → 2022-12-28 08:37:15

sbuild (Debian sbuild) 0.71.0 (24 Aug 2016) on testwandboard

+==============================================================================+
| git 1:2.39.0-1 (armhf)                       Wed, 28 Dec 2022 07:03:29 +0000 |
+==============================================================================+

Package: git
Version: 1:2.39.0-1
Source Version: 1:2.39.0-1
Distribution: bookworm-staging
Machine Architecture: armhf
Host Architecture: armhf
Build Architecture: armhf

I: NOTICE: Log filtering will replace 'var/lib/schroot/mount/bookworm-staging-armhf-sbuild-16965604-877c-4d1f-b369-0179449f7e0e' with '<<CHROOT>>'

+------------------------------------------------------------------------------+
| Update chroot                                                                |
+------------------------------------------------------------------------------+

Get:1 http://172.17.4.1/private bookworm-staging InRelease [11.3 kB]
Get:2 http://172.17.4.1/private bookworm-staging/main Sources [13.5 MB]
Get:3 http://172.17.4.1/private bookworm-staging/main armhf Packages [14.3 MB]
Fetched 27.8 MB in 31s (888 kB/s)
Reading package lists...
W: No sandbox user '_apt' on the system, can not drop privileges
W: http://172.17.4.1/private/dists/bookworm-staging/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

+------------------------------------------------------------------------------+
| Fetch source files                                                           |
+------------------------------------------------------------------------------+


Check APT
---------

Checking available source versions...

Download source files with APT
------------------------------

Reading package lists...
NOTICE: 'git' packaging is maintained in the 'Git' version control system at:
https://repo.or.cz/r/git/debian.git/
Please use:
git clone https://repo.or.cz/r/git/debian.git/
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 7900 kB of source archives.
Get:1 http://172.17.4.1/private bookworm-staging/main git 1:2.39.0-1 (dsc) [2825 B]
Get:2 http://172.17.4.1/private bookworm-staging/main git 1:2.39.0-1 (tar) [7158 kB]
Get:3 http://172.17.4.1/private bookworm-staging/main git 1:2.39.0-1 (diff) [739 kB]
Fetched 7900 kB in 2s (4530 kB/s)
Download complete and in download only mode
I: NOTICE: Log filtering will replace 'build/git-Eyg2tD/git-2.39.0' with '<<PKGBUILDDIR>>'
I: NOTICE: Log filtering will replace 'build/git-Eyg2tD' with '<<BUILDDIR>>'

+------------------------------------------------------------------------------+
| Install build-essential                                                      |
+------------------------------------------------------------------------------+


Setup apt archive
-----------------

Merged Build-Depends: build-essential, fakeroot
Filtered Build-Depends: build-essential, fakeroot
dpkg-deb: building package 'sbuild-build-depends-core-dummy' in '/<<BUILDDIR>>/resolver-07Lf8A/apt_archive/sbuild-build-depends-core-dummy.deb'.
dpkg-scanpackages: warning: Packages in archive but missing from override file:
dpkg-scanpackages: warning:   sbuild-build-depends-core-dummy
dpkg-scanpackages: info: Wrote 1 entries to output Packages file.
gpg: keybox '/<<BUILDDIR>>/resolver-07Lf8A/gpg/pubring.kbx' created
gpg: /<<BUILDDIR>>/resolver-07Lf8A/gpg/trustdb.gpg: trustdb created
gpg: key 35506D9A48F77B2E: public key "Sbuild Signer (Sbuild Build Dependency Archive Key) <buildd-tools-devel@lists.alioth.debian.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: key 35506D9A48F77B2E: "Sbuild Signer (Sbuild Build Dependency Archive Key) <buildd-tools-devel@lists.alioth.debian.org>" not changed
gpg: key 35506D9A48F77B2E: secret key imported
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
gpg: using "Sbuild Signer" as default secret key for signing
Ign:1 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ InRelease
Get:2 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Release [957 B]
Get:3 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Release.gpg [370 B]
Get:4 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Sources [349 B]
Get:5 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Packages [431 B]
Fetched 2107 B in 1s (2830 B/s)
Reading package lists...
W: No sandbox user '_apt' on the system, can not drop privileges
Reading package lists...

Install core build dependencies (apt-based resolver)
----------------------------------------------------

Installing build dependencies
Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
  krb5-locales libpam-cap netbase sensible-utils
Use 'apt autoremove' to remove them.
The following NEW packages will be installed:
  sbuild-build-depends-core-dummy
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 852 B of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ sbuild-build-depends-core-dummy 0.invalid.0 [852 B]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 852 B in 0s (22.9 kB/s)
Selecting previously unselected package sbuild-build-depends-core-dummy.
(Reading database ... 12958 files and directories currently installed.)
Preparing to unpack .../sbuild-build-depends-core-dummy_0.invalid.0_armhf.deb ...
Unpacking sbuild-build-depends-core-dummy (0.invalid.0) ...
Setting up sbuild-build-depends-core-dummy (0.invalid.0) ...
W: No sandbox user '_apt' on the system, can not drop privileges

+------------------------------------------------------------------------------+
| Check architectures                                                          |
+------------------------------------------------------------------------------+

Arch check ok (armhf included in any all)

+------------------------------------------------------------------------------+
| Install package build dependencies                                           |
+------------------------------------------------------------------------------+


Setup apt archive
-----------------

Merged Build-Depends: libz-dev, gettext, libpcre2-dev | libpcre3-dev, libcurl4-gnutls-dev, libexpat1-dev, subversion, libsvn-perl, libyaml-perl, tcl, python3, libhttp-date-perl | libtime-parsedate-perl, libcgi-pm-perl, liberror-perl, libmailtools-perl, cvs, cvsps, libdbd-sqlite3-perl, unzip, libio-pty-perl, debhelper-compat (= 10), dh-exec (>= 0.7), dh-apache2, dpkg-dev (>= 1.16.2~)
Filtered Build-Depends: libz-dev, gettext, libpcre2-dev, libcurl4-gnutls-dev, libexpat1-dev, subversion, libsvn-perl, libyaml-perl, tcl, python3, libhttp-date-perl, libcgi-pm-perl, liberror-perl, libmailtools-perl, cvs, cvsps, libdbd-sqlite3-perl, unzip, libio-pty-perl, debhelper-compat (= 10), dh-exec (>= 0.7), dh-apache2, dpkg-dev (>= 1.16.2~)
dpkg-deb: building package 'sbuild-build-depends-git-dummy' in '/<<BUILDDIR>>/resolver-07Lf8A/apt_archive/sbuild-build-depends-git-dummy.deb'.
dpkg-scanpackages: warning: Packages in archive but missing from override file:
dpkg-scanpackages: warning:   sbuild-build-depends-core-dummy sbuild-build-depends-git-dummy
dpkg-scanpackages: info: Wrote 2 entries to output Packages file.
gpg: using "Sbuild Signer" as default secret key for signing
Ign:1 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ InRelease
Get:2 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Release [963 B]
Get:3 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Release.gpg [370 B]
Get:4 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Sources [661 B]
Get:5 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ Packages [725 B]
Fetched 2719 B in 1s (3750 B/s)
Reading package lists...
W: No sandbox user '_apt' on the system, can not drop privileges
Reading package lists...

Install git build dependencies (apt-based resolver)
---------------------------------------------------

Installing build dependencies
Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
  krb5-locales libpam-cap
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  apache2-dev autoconf automake autopoint autotools-dev bsdextrautils cvs
  cvsps debhelper dh-autoreconf dh-exec dh-strip-nondeterminism dwz file
  gettext gettext-base groff-base intltool-debian libapr1 libapr1-dev
  libaprutil1 libaprutil1-dev libarchive-zip-perl libbrotli1 libbsd0
  libcgi-pm-perl libcurl3-gnutls libcurl4-gnutls-dev libdbd-sqlite3-perl
  libdbi-perl libdebhelper-perl libelf1 liberror-perl libexpat1 libexpat1-dev
  libfile-stripnondeterminism-perl libhtml-parser-perl libhtml-tagset-perl
  libhttp-date-perl libicu72 libio-pty-perl libio-socket-ssl-perl libldap-dev
  libldap2-dev libmagic-mgc libmagic1 libmailtools-perl libmd0 libmpdec3
  libnet-smtp-ssl-perl libnet-ssleay-perl libnghttp2-14 libpcre2-16-0
  libpcre2-32-0 libpcre2-dev libpcre2-posix3 libpipeline1 libpsl5
  libpython3-stdlib libpython3.10-minimal libpython3.10-stdlib
  libregexp-ipv6-perl librtmp1 libsctp-dev libsctp1 libserf-1-1 libssh2-1
  libsub-override-perl libsvn-perl libsvn1 libtcl8.6 libtimedate-perl libtool
  libuchardet0 liburi-perl libutf8proc2 libxml2 libyaml-perl m4 man-db
  media-types openssl perl-openssl-defaults po-debconf python3 python3-minimal
  python3.10 python3.10-minimal subversion tcl tcl8.6 unzip uuid-dev
  zlib1g-dev
Suggested packages:
  autoconf-archive gnu-standards autoconf-doc mksh rcs dh-make gettext-doc
  libasprintf-dev libgettextpo-dev groff libcurl4-doc libgnutls28-dev
  libidn11-dev libkrb5-dev librtmp-dev libssh2-1-dev pkg-config libclone-perl
  libmldbm-perl libnet-daemon-perl libsql-statement-perl libdata-dump-perl
  ca-certificates lksctp-tools libtool-doc gfortran | fortran95-compiler
  gcj-jdk libbusiness-isbn-perl libwww-perl libyaml-shell-perl m4-doc apparmor
  less www-browser libmail-box-perl python3-doc python3-tk python3-venv
  python3.10-venv python3.10-doc binfmt-support db5.3-util libapache2-mod-svn
  subversion-tools tcl-tclreadline zip
Recommended packages:
  openssh-client curl | wget | lynx libcgi-fast-perl ca-certificates
  libarchive-cpio-perl libhttp-message-perl libauthen-sasl-perl publicsuffix
  libltdl-dev libyaml-libyaml-perl | libyaml-syck-perl libmail-sendmail-perl
The following NEW packages will be installed:
  apache2-dev autoconf automake autopoint autotools-dev bsdextrautils cvs
  cvsps debhelper dh-autoreconf dh-exec dh-strip-nondeterminism dwz file
  gettext gettext-base groff-base intltool-debian libapr1 libapr1-dev
  libaprutil1 libaprutil1-dev libarchive-zip-perl libbrotli1 libbsd0
  libcgi-pm-perl libcurl3-gnutls libcurl4-gnutls-dev libdbd-sqlite3-perl
  libdbi-perl libdebhelper-perl libelf1 liberror-perl libexpat1 libexpat1-dev
  libfile-stripnondeterminism-perl libhtml-parser-perl libhtml-tagset-perl
  libhttp-date-perl libicu72 libio-pty-perl libio-socket-ssl-perl libldap-dev
  libldap2-dev libmagic-mgc libmagic1 libmailtools-perl libmd0 libmpdec3
  libnet-smtp-ssl-perl libnet-ssleay-perl libnghttp2-14 libpcre2-16-0
  libpcre2-32-0 libpcre2-dev libpcre2-posix3 libpipeline1 libpsl5
  libpython3-stdlib libpython3.10-minimal libpython3.10-stdlib
  libregexp-ipv6-perl librtmp1 libsctp-dev libsctp1 libserf-1-1 libssh2-1
  libsub-override-perl libsvn-perl libsvn1 libtcl8.6 libtimedate-perl libtool
  libuchardet0 liburi-perl libutf8proc2 libxml2 libyaml-perl m4 man-db
  media-types openssl perl-openssl-defaults po-debconf python3 python3-minimal
  python3.10 python3.10-minimal sbuild-build-depends-git-dummy subversion tcl
  tcl8.6 unzip uuid-dev zlib1g-dev
0 upgraded, 95 newly installed, 0 to remove and 13 not upgraded.
Need to get 38.7 MB of archives.
After this operation, 152 MB of additional disk space will be used.
Get:1 copy:/<<BUILDDIR>>/resolver-07Lf8A/apt_archive ./ sbuild-build-depends-git-dummy 0.invalid.0 [1012 B]
Get:2 http://172.17.4.1/private bookworm-staging/main armhf libpython3.10-minimal armhf 3.10.9-1 [769 kB]
Get:3 http://172.17.4.1/private bookworm-staging/main armhf libexpat1 armhf 2.5.0-1 [77.2 kB]
Get:4 http://172.17.4.1/private bookworm-staging/main armhf python3.10-minimal armhf 3.10.9-1 [1477 kB]
Get:5 http://172.17.4.1/private bookworm-staging/main armhf python3-minimal armhf 3.10.6-3 [25.5 kB]
Get:6 http://172.17.4.1/private bookworm-staging/main armhf media-types all 8.0.0 [33.4 kB]
Get:7 http://172.17.4.1/private bookworm-staging/main armhf libmpdec3 armhf 2.5.1-2+rpi1 [73.5 kB]
Get:8 http://172.17.4.1/private bookworm-staging/main armhf libpython3.10-stdlib armhf 3.10.9-1 [1597 kB]
Get:9 http://172.17.4.1/private bookworm-staging/main armhf python3.10 armhf 3.10.9-1 [509 kB]
Get:10 http://172.17.4.1/private bookworm-staging/main armhf libpython3-stdlib armhf 3.10.6-3 [8588 B]
Get:11 http://172.17.4.1/private bookworm-staging/main armhf python3 armhf 3.10.6-3 [25.2 kB]
Get:12 http://172.17.4.1/private bookworm-staging/main armhf libuchardet0 armhf 0.0.7-1 [65.0 kB]
Get:13 http://172.17.4.1/private bookworm-staging/main armhf groff-base armhf 1.22.4-9 [774 kB]
Get:14 http://172.17.4.1/private bookworm-staging/main armhf bsdextrautils armhf 2.38.1-4 [78.8 kB]
Get:15 http://172.17.4.1/private bookworm-staging/main armhf libpipeline1 armhf 1.5.7-1 [33.4 kB]
Get:16 http://172.17.4.1/private bookworm-staging/main armhf man-db armhf 2.11.1-1 [1341 kB]
Get:17 http://172.17.4.1/private bookworm-staging/main armhf libmagic-mgc armhf 1:5.41-4 [295 kB]
Get:18 http://172.17.4.1/private bookworm-staging/main armhf libmagic1 armhf 1:5.41-4 [120 kB]
Get:19 http://172.17.4.1/private bookworm-staging/main armhf file armhf 1:5.41-4 [65.8 kB]
Get:20 http://172.17.4.1/private bookworm-staging/main armhf gettext-base armhf 0.21-10 [156 kB]
Get:21 http://172.17.4.1/private bookworm-staging/main armhf autotools-dev all 20220109.1 [51.6 kB]
Get:22 http://172.17.4.1/private bookworm-staging/main armhf m4 armhf 1.4.19-1 [260 kB]
Get:23 http://172.17.4.1/private bookworm-staging/main armhf autoconf all 2.71-2 [343 kB]
Get:24 http://172.17.4.1/private bookworm-staging/main armhf automake all 1:1.16.5-1.3 [823 kB]
Get:25 http://172.17.4.1/private bookworm-staging/main armhf autopoint all 0.21-10 [495 kB]
Get:26 http://172.17.4.1/private bookworm-staging/main armhf libdebhelper-perl all 13.11.3 [81.1 kB]
Get:27 http://172.17.4.1/private bookworm-staging/main armhf libtool all 2.4.7-5 [517 kB]
Get:28 http://172.17.4.1/private bookworm-staging/main armhf dh-autoreconf all 20 [17.1 kB]
Get:29 http://172.17.4.1/private bookworm-staging/main armhf libarchive-zip-perl all 1.68-1 [104 kB]
Get:30 http://172.17.4.1/private bookworm-staging/main armhf libsub-override-perl all 0.09-4 [9304 B]
Get:31 http://172.17.4.1/private bookworm-staging/main armhf libfile-stripnondeterminism-perl all 1.13.0-2 [19.4 kB]
Get:32 http://172.17.4.1/private bookworm-staging/main armhf dh-strip-nondeterminism all 1.13.0-2 [8556 B]
Get:33 http://172.17.4.1/private bookworm-staging/main armhf libelf1 armhf 0.187-2+rpi2 [177 kB]
Get:34 http://172.17.4.1/private bookworm-staging/main armhf dwz armhf 0.14+20220924-2 [93.1 kB]
Get:35 http://172.17.4.1/private bookworm-staging/main armhf libicu72 armhf 72.1-3 [9009 kB]
Get:36 http://172.17.4.1/private bookworm-staging/main armhf libxml2 armhf 2.9.14+dfsg-1.1 [570 kB]
Get:37 http://172.17.4.1/private bookworm-staging/main armhf gettext armhf 0.21-10 [1203 kB]
Get:38 http://172.17.4.1/private bookworm-staging/main armhf intltool-debian all 0.35.0+20060710.6 [22.9 kB]
Get:39 http://172.17.4.1/private bookworm-staging/main armhf po-debconf all 1.0.21+nmu1 [248 kB]
Get:40 http://172.17.4.1/private bookworm-staging/main armhf debhelper all 13.11.3 [942 kB]
Get:41 http://172.17.4.1/private bookworm-staging/main armhf libapr1 armhf 1.7.0-8 [87.2 kB]
Get:42 http://172.17.4.1/private bookworm-staging/main armhf uuid-dev armhf 2.38.1-4 [37.7 kB]
Get:43 http://172.17.4.1/private bookworm-staging/main armhf libsctp1 armhf 1.0.19+dfsg-2 [29.1 kB]
Get:44 http://172.17.4.1/private bookworm-staging/main armhf libsctp-dev armhf 1.0.19+dfsg-2 [71.5 kB]
Get:45 http://172.17.4.1/private bookworm-staging/main armhf libapr1-dev armhf 1.7.0-8 [727 kB]
Get:46 http://172.17.4.1/private bookworm-staging/main armhf libaprutil1 armhf 1.6.1-5+b2 [81.3 kB]
Get:47 http://172.17.4.1/private bookworm-staging/main armhf libldap-dev armhf 2.5.13+dfsg-2+rpi1+b1 [259 kB]
Get:48 http://172.17.4.1/private bookworm-staging/main armhf libldap2-dev all 2.5.13+dfsg-2+rpi1 [70.1 kB]
Get:49 http://172.17.4.1/private bookworm-staging/main armhf libexpat1-dev armhf 2.5.0-1 [130 kB]
Get:50 http://172.17.4.1/private bookworm-staging/main armhf libaprutil1-dev armhf 1.6.1-5+b2 [398 kB]
Get:51 http://172.17.4.1/private bookworm-staging/main armhf libpcre2-16-0 armhf 10.40-3 [209 kB]
Get:52 http://172.17.4.1/private bookworm-staging/main armhf libpcre2-32-0 armhf 10.40-3 [199 kB]
Get:53 http://172.17.4.1/private bookworm-staging/main armhf libpcre2-posix3 armhf 10.40-3 [53.2 kB]
Get:54 http://172.17.4.1/private bookworm-staging/main armhf libpcre2-dev armhf 10.40-3 [644 kB]
Get:55 http://172.17.4.1/private bookworm-staging/main armhf openssl armhf 3.0.7-1 [1349 kB]
Get:56 http://172.17.4.1/private bookworm-staging/main armhf apache2-dev armhf 2.4.54-5 [300 kB]
Get:57 http://172.17.4.1/private bookworm-staging/main armhf libmd0 armhf 1.0.4-2 [28.6 kB]
Get:58 http://172.17.4.1/private bookworm-staging/main armhf libbsd0 armhf 0.11.7-1 [112 kB]
Get:59 http://172.17.4.1/private bookworm-staging/main armhf cvs armhf 2:1.12.13+real-28 [2745 kB]
Get:60 http://172.17.4.1/private bookworm-staging/main armhf cvsps armhf 2.1-8 [43.3 kB]
Get:61 http://172.17.4.1/private bookworm-staging/main armhf dh-exec armhf 0.27+b1 [23.4 kB]
Get:62 http://172.17.4.1/private bookworm-staging/main armhf libbrotli1 armhf 1.0.9-2+b2 [260 kB]
Get:63 http://172.17.4.1/private bookworm-staging/main armhf libhtml-tagset-perl all 3.20-6 [11.7 kB]
Get:64 http://172.17.4.1/private bookworm-staging/main armhf libregexp-ipv6-perl all 0.03-3 [5212 B]
Get:65 http://172.17.4.1/private bookworm-staging/main armhf liburi-perl all 5.17-1 [90.4 kB]
Get:66 http://172.17.4.1/private bookworm-staging/main armhf libhtml-parser-perl armhf 3.80-1 [97.2 kB]
Get:67 http://172.17.4.1/private bookworm-staging/main armhf libcgi-pm-perl all 4.54-1 [224 kB]
Get:68 http://172.17.4.1/private bookworm-staging/main armhf libnghttp2-14 armhf 1.51.0-1 [60.5 kB]
Get:69 http://172.17.4.1/private bookworm-staging/main armhf libpsl5 armhf 0.21.0-1.2 [56.2 kB]
Get:70 http://172.17.4.1/private bookworm-staging/main armhf librtmp1 armhf 2.4+20151223.gitfa8646d.1-2+b2 [54.2 kB]
Get:71 http://172.17.4.1/private bookworm-staging/main armhf libssh2-1 armhf 1.10.0-3+b1 [161 kB]
Get:72 http://172.17.4.1/private bookworm-staging/main armhf libcurl3-gnutls armhf 7.86.0-2 [318 kB]
Get:73 http://172.17.4.1/private bookworm-staging/main armhf libcurl4-gnutls-dev armhf 7.86.0-2 [394 kB]
Get:74 http://172.17.4.1/private bookworm-staging/main armhf libdbi-perl armhf 1.643-4 [763 kB]
Get:75 http://172.17.4.1/private bookworm-staging/main armhf libdbd-sqlite3-perl armhf 1.72-1 [171 kB]
Get:76 http://172.17.4.1/private bookworm-staging/main armhf liberror-perl all 0.17029-2 [29.0 kB]
Get:77 http://172.17.4.1/private bookworm-staging/main armhf libtimedate-perl all 2.3300-2 [39.3 kB]
Get:78 http://172.17.4.1/private bookworm-staging/main armhf libhttp-date-perl all 6.05-2 [10.5 kB]
Get:79 http://172.17.4.1/private bookworm-staging/main armhf libio-pty-perl armhf 1:1.15-2+b2 [34.5 kB]
Get:80 http://172.17.4.1/private bookworm-staging/main armhf perl-openssl-defaults armhf 7+b1 [7916 B]
Get:81 http://172.17.4.1/private bookworm-staging/main armhf libnet-ssleay-perl armhf 1.92-2+b2 [297 kB]
Get:82 http://172.17.4.1/private bookworm-staging/main armhf libio-socket-ssl-perl all 2.077-1 [217 kB]
Get:83 http://172.17.4.1/private bookworm-staging/main armhf libnet-smtp-ssl-perl all 1.04-2 [6548 B]
Get:84 http://172.17.4.1/private bookworm-staging/main armhf libmailtools-perl all 2.21-2 [95.6 kB]
Get:85 http://172.17.4.1/private bookworm-staging/main armhf libserf-1-1 armhf 1.3.9-11+b1 [47.2 kB]
Get:86 http://172.17.4.1/private bookworm-staging/main armhf libutf8proc2 armhf 2.8.0-1+rpi1 [59.1 kB]
Get:87 http://172.17.4.1/private bookworm-staging/main armhf libsvn1 armhf 1.14.2-4 [1181 kB]
Get:88 http://172.17.4.1/private bookworm-staging/main armhf libsvn-perl armhf 1.14.2-4 [857 kB]
Get:89 http://172.17.4.1/private bookworm-staging/main armhf libtcl8.6 armhf 8.6.13+dfsg-1 [906 kB]
Get:90 http://172.17.4.1/private bookworm-staging/main armhf libyaml-perl all 1.30-2 [63.4 kB]
Get:91 http://172.17.4.1/private bookworm-staging/main armhf subversion armhf 1.14.2-4 [935 kB]
Get:92 http://172.17.4.1/private bookworm-staging/main armhf tcl8.6 armhf 8.6.13+dfsg-1 [120 kB]
Get:93 http://172.17.4.1/private bookworm-staging/main armhf tcl armhf 8.6.11+1+b2 [6072 B]
Get:94 http://172.17.4.1/private bookworm-staging/main armhf unzip armhf 6.0-27 [152 kB]
Get:95 http://172.17.4.1/private bookworm-staging/main armhf zlib1g-dev armhf 1:1.2.13.dfsg-1 [901 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 38.7 MB in 8s (4782 kB/s)
Selecting previously unselected package libpython3.10-minimal:armhf.
(Reading database ... 12958 files and directories currently installed.)
Preparing to unpack .../libpython3.10-minimal_3.10.9-1_armhf.deb ...
Unpacking libpython3.10-minimal:armhf (3.10.9-1) ...
Selecting previously unselected package libexpat1:armhf.
Preparing to unpack .../libexpat1_2.5.0-1_armhf.deb ...
Unpacking libexpat1:armhf (2.5.0-1) ...
Selecting previously unselected package python3.10-minimal.
Preparing to unpack .../python3.10-minimal_3.10.9-1_armhf.deb ...
Unpacking python3.10-minimal (3.10.9-1) ...
Setting up libpython3.10-minimal:armhf (3.10.9-1) ...
Setting up libexpat1:armhf (2.5.0-1) ...
Setting up python3.10-minimal (3.10.9-1) ...
Selecting previously unselected package python3-minimal.
(Reading database ... 13263 files and directories currently installed.)
Preparing to unpack .../0-python3-minimal_3.10.6-3_armhf.deb ...
Unpacking python3-minimal (3.10.6-3) ...
Selecting previously unselected package media-types.
Preparing to unpack .../1-media-types_8.0.0_all.deb ...
Unpacking media-types (8.0.0) ...
Selecting previously unselected package libmpdec3:armhf.
Preparing to unpack .../2-libmpdec3_2.5.1-2+rpi1_armhf.deb ...
Unpacking libmpdec3:armhf (2.5.1-2+rpi1) ...
Selecting previously unselected package libpython3.10-stdlib:armhf.
Preparing to unpack .../3-libpython3.10-stdlib_3.10.9-1_armhf.deb ...
Unpacking libpython3.10-stdlib:armhf (3.10.9-1) ...
Selecting previously unselected package python3.10.
Preparing to unpack .../4-python3.10_3.10.9-1_armhf.deb ...
Unpacking python3.10 (3.10.9-1) ...
Selecting previously unselected package libpython3-stdlib:armhf.
Preparing to unpack .../5-libpython3-stdlib_3.10.6-3_armhf.deb ...
Unpacking libpython3-stdlib:armhf (3.10.6-3) ...
Setting up python3-minimal (3.10.6-3) ...
Selecting previously unselected package python3.
(Reading database ... 13665 files and directories currently installed.)
Preparing to unpack .../00-python3_3.10.6-3_armhf.deb ...
Unpacking python3 (3.10.6-3) ...
Selecting previously unselected package libuchardet0:armhf.
Preparing to unpack .../01-libuchardet0_0.0.7-1_armhf.deb ...
Unpacking libuchardet0:armhf (0.0.7-1) ...
Selecting previously unselected package groff-base.
Preparing to unpack .../02-groff-base_1.22.4-9_armhf.deb ...
Unpacking groff-base (1.22.4-9) ...
Selecting previously unselected package bsdextrautils.
Preparing to unpack .../03-bsdextrautils_2.38.1-4_armhf.deb ...
Unpacking bsdextrautils (2.38.1-4) ...
Selecting previously unselected package libpipeline1:armhf.
Preparing to unpack .../04-libpipeline1_1.5.7-1_armhf.deb ...
Unpacking libpipeline1:armhf (1.5.7-1) ...
Selecting previously unselected package man-db.
Preparing to unpack .../05-man-db_2.11.1-1_armhf.deb ...
Unpacking man-db (2.11.1-1) ...
Selecting previously unselected package libmagic-mgc.
Preparing to unpack .../06-libmagic-mgc_1%3a5.41-4_armhf.deb ...
Unpacking libmagic-mgc (1:5.41-4) ...
Selecting previously unselected package libmagic1:armhf.
Preparing to unpack .../07-libmagic1_1%3a5.41-4_armhf.deb ...
Unpacking libmagic1:armhf (1:5.41-4) ...
Selecting previously unselected package file.
Preparing to unpack .../08-file_1%3a5.41-4_armhf.deb ...
Unpacking file (1:5.41-4) ...
Selecting previously unselected package gettext-base.
Preparing to unpack .../09-gettext-base_0.21-10_armhf.deb ...
Unpacking gettext-base (0.21-10) ...
Selecting previously unselected package autotools-dev.
Preparing to unpack .../10-autotools-dev_20220109.1_all.deb ...
Unpacking autotools-dev (20220109.1) ...
Selecting previously unselected package m4.
Preparing to unpack .../11-m4_1.4.19-1_armhf.deb ...
Unpacking m4 (1.4.19-1) ...
Selecting previously unselected package autoconf.
Preparing to unpack .../12-autoconf_2.71-2_all.deb ...
Unpacking autoconf (2.71-2) ...
Selecting previously unselected package automake.
Preparing to unpack .../13-automake_1%3a1.16.5-1.3_all.deb ...
Unpacking automake (1:1.16.5-1.3) ...
Selecting previously unselected package autopoint.
Preparing to unpack .../14-autopoint_0.21-10_all.deb ...
Unpacking autopoint (0.21-10) ...
Selecting previously unselected package libdebhelper-perl.
Preparing to unpack .../15-libdebhelper-perl_13.11.3_all.deb ...
Unpacking libdebhelper-perl (13.11.3) ...
Selecting previously unselected package libtool.
Preparing to unpack .../16-libtool_2.4.7-5_all.deb ...
Unpacking libtool (2.4.7-5) ...
Selecting previously unselected package dh-autoreconf.
Preparing to unpack .../17-dh-autoreconf_20_all.deb ...
Unpacking dh-autoreconf (20) ...
Selecting previously unselected package libarchive-zip-perl.
Preparing to unpack .../18-libarchive-zip-perl_1.68-1_all.deb ...
Unpacking libarchive-zip-perl (1.68-1) ...
Selecting previously unselected package libsub-override-perl.
Preparing to unpack .../19-libsub-override-perl_0.09-4_all.deb ...
Unpacking libsub-override-perl (0.09-4) ...
Selecting previously unselected package libfile-stripnondeterminism-perl.
Preparing to unpack .../20-libfile-stripnondeterminism-perl_1.13.0-2_all.deb ...
Unpacking libfile-stripnondeterminism-perl (1.13.0-2) ...
Selecting previously unselected package dh-strip-nondeterminism.
Preparing to unpack .../21-dh-strip-nondeterminism_1.13.0-2_all.deb ...
Unpacking dh-strip-nondeterminism (1.13.0-2) ...
Selecting previously unselected package libelf1:armhf.
Preparing to unpack .../22-libelf1_0.187-2+rpi2_armhf.deb ...
Unpacking libelf1:armhf (0.187-2+rpi2) ...
Selecting previously unselected package dwz.
Preparing to unpack .../23-dwz_0.14+20220924-2_armhf.deb ...
Unpacking dwz (0.14+20220924-2) ...
Selecting previously unselected package libicu72:armhf.
Preparing to unpack .../24-libicu72_72.1-3_armhf.deb ...
Unpacking libicu72:armhf (72.1-3) ...
Selecting previously unselected package libxml2:armhf.
Preparing to unpack .../25-libxml2_2.9.14+dfsg-1.1_armhf.deb ...
Unpacking libxml2:armhf (2.9.14+dfsg-1.1) ...
Selecting previously unselected package gettext.
Preparing to unpack .../26-gettext_0.21-10_armhf.deb ...
Unpacking gettext (0.21-10) ...
Selecting previously unselected package intltool-debian.
Preparing to unpack .../27-intltool-debian_0.35.0+20060710.6_all.deb ...
Unpacking intltool-debian (0.35.0+20060710.6) ...
Selecting previously unselected package po-debconf.
Preparing to unpack .../28-po-debconf_1.0.21+nmu1_all.deb ...
Unpacking po-debconf (1.0.21+nmu1) ...
Selecting previously unselected package debhelper.
Preparing to unpack .../29-debhelper_13.11.3_all.deb ...
Unpacking debhelper (13.11.3) ...
Selecting previously unselected package libapr1:armhf.
Preparing to unpack .../30-libapr1_1.7.0-8_armhf.deb ...
Unpacking libapr1:armhf (1.7.0-8) ...
Selecting previously unselected package uuid-dev:armhf.
Preparing to unpack .../31-uuid-dev_2.38.1-4_armhf.deb ...
Unpacking uuid-dev:armhf (2.38.1-4) ...
Selecting previously unselected package libsctp1:armhf.
Preparing to unpack .../32-libsctp1_1.0.19+dfsg-2_armhf.deb ...
Unpacking libsctp1:armhf (1.0.19+dfsg-2) ...
Selecting previously unselected package libsctp-dev:armhf.
Preparing to unpack .../33-libsctp-dev_1.0.19+dfsg-2_armhf.deb ...
Unpacking libsctp-dev:armhf (1.0.19+dfsg-2) ...
Selecting previously unselected package libapr1-dev.
Preparing to unpack .../34-libapr1-dev_1.7.0-8_armhf.deb ...
Unpacking libapr1-dev (1.7.0-8) ...
Selecting previously unselected package libaprutil1:armhf.
Preparing to unpack .../35-libaprutil1_1.6.1-5+b2_armhf.deb ...
Unpacking libaprutil1:armhf (1.6.1-5+b2) ...
Selecting previously unselected package libldap-dev:armhf.
Preparing to unpack .../36-libldap-dev_2.5.13+dfsg-2+rpi1+b1_armhf.deb ...
Unpacking libldap-dev:armhf (2.5.13+dfsg-2+rpi1+b1) ...
Selecting previously unselected package libldap2-dev.
Preparing to unpack .../37-libldap2-dev_2.5.13+dfsg-2+rpi1_all.deb ...
Unpacking libldap2-dev (2.5.13+dfsg-2+rpi1) ...
Selecting previously unselected package libexpat1-dev:armhf.
Preparing to unpack .../38-libexpat1-dev_2.5.0-1_armhf.deb ...
Unpacking libexpat1-dev:armhf (2.5.0-1) ...
Selecting previously unselected package libaprutil1-dev.
Preparing to unpack .../39-libaprutil1-dev_1.6.1-5+b2_armhf.deb ...
Unpacking libaprutil1-dev (1.6.1-5+b2) ...
Selecting previously unselected package libpcre2-16-0:armhf.
Preparing to unpack .../40-libpcre2-16-0_10.40-3_armhf.deb ...
Unpacking libpcre2-16-0:armhf (10.40-3) ...
Selecting previously unselected package libpcre2-32-0:armhf.
Preparing to unpack .../41-libpcre2-32-0_10.40-3_armhf.deb ...
Unpacking libpcre2-32-0:armhf (10.40-3) ...
Selecting previously unselected package libpcre2-posix3:armhf.
Preparing to unpack .../42-libpcre2-posix3_10.40-3_armhf.deb ...
Unpacking libpcre2-posix3:armhf (10.40-3) ...
Selecting previously unselected package libpcre2-dev:armhf.
Preparing to unpack .../43-libpcre2-dev_10.40-3_armhf.deb ...
Unpacking libpcre2-dev:armhf (10.40-3) ...
Selecting previously unselected package openssl.
Preparing to unpack .../44-openssl_3.0.7-1_armhf.deb ...
Unpacking openssl (3.0.7-1) ...
Selecting previously unselected package apache2-dev.
Preparing to unpack .../45-apache2-dev_2.4.54-5_armhf.deb ...
Unpacking apache2-dev (2.4.54-5) ...
Selecting previously unselected package libmd0:armhf.
Preparing to unpack .../46-libmd0_1.0.4-2_armhf.deb ...
Unpacking libmd0:armhf (1.0.4-2) ...
Selecting previously unselected package libbsd0:armhf.
Preparing to unpack .../47-libbsd0_0.11.7-1_armhf.deb ...
Unpacking libbsd0:armhf (0.11.7-1) ...
Selecting previously unselected package cvs.
Preparing to unpack .../48-cvs_2%3a1.12.13+real-28_armhf.deb ...
Unpacking cvs (2:1.12.13+real-28) ...
Selecting previously unselected package cvsps.
Preparing to unpack .../49-cvsps_2.1-8_armhf.deb ...
Unpacking cvsps (2.1-8) ...
Selecting previously unselected package dh-exec.
Preparing to unpack .../50-dh-exec_0.27+b1_armhf.deb ...
Unpacking dh-exec (0.27+b1) ...
Selecting previously unselected package libbrotli1:armhf.
Preparing to unpack .../51-libbrotli1_1.0.9-2+b2_armhf.deb ...
Unpacking libbrotli1:armhf (1.0.9-2+b2) ...
Selecting previously unselected package libhtml-tagset-perl.
Preparing to unpack .../52-libhtml-tagset-perl_3.20-6_all.deb ...
Unpacking libhtml-tagset-perl (3.20-6) ...
Selecting previously unselected package libregexp-ipv6-perl.
Preparing to unpack .../53-libregexp-ipv6-perl_0.03-3_all.deb ...
Unpacking libregexp-ipv6-perl (0.03-3) ...
Selecting previously unselected package liburi-perl.
Preparing to unpack .../54-liburi-perl_5.17-1_all.deb ...
Unpacking liburi-perl (5.17-1) ...
Selecting previously unselected package libhtml-parser-perl:armhf.
Preparing to unpack .../55-libhtml-parser-perl_3.80-1_armhf.deb ...
Unpacking libhtml-parser-perl:armhf (3.80-1) ...
Selecting previously unselected package libcgi-pm-perl.
Preparing to unpack .../56-libcgi-pm-perl_4.54-1_all.deb ...
Unpacking libcgi-pm-perl (4.54-1) ...
Selecting previously unselected package libnghttp2-14:armhf.
Preparing to unpack .../57-libnghttp2-14_1.51.0-1_armhf.deb ...
Unpacking libnghttp2-14:armhf (1.51.0-1) ...
Selecting previously unselected package libpsl5:armhf.
Preparing to unpack .../58-libpsl5_0.21.0-1.2_armhf.deb ...
Unpacking libpsl5:armhf (0.21.0-1.2) ...
Selecting previously unselected package librtmp1:armhf.
Preparing to unpack .../59-librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb ...
Unpacking librtmp1:armhf (2.4+20151223.gitfa8646d.1-2+b2) ...
Selecting previously unselected package libssh2-1:armhf.
Preparing to unpack .../60-libssh2-1_1.10.0-3+b1_armhf.deb ...
Unpacking libssh2-1:armhf (1.10.0-3+b1) ...
Selecting previously unselected package libcurl3-gnutls:armhf.
Preparing to unpack .../61-libcurl3-gnutls_7.86.0-2_armhf.deb ...
Unpacking libcurl3-gnutls:armhf (7.86.0-2) ...
Selecting previously unselected package libcurl4-gnutls-dev.
Preparing to unpack .../62-libcurl4-gnutls-dev_7.86.0-2_armhf.deb ...
Unpacking libcurl4-gnutls-dev (7.86.0-2) ...
Selecting previously unselected package libdbi-perl:armhf.
Preparing to unpack .../63-libdbi-perl_1.643-4_armhf.deb ...
Unpacking libdbi-perl:armhf (1.643-4) ...
Selecting previously unselected package libdbd-sqlite3-perl:armhf.
Preparing to unpack .../64-libdbd-sqlite3-perl_1.72-1_armhf.deb ...
Unpacking libdbd-sqlite3-perl:armhf (1.72-1) ...
Selecting previously unselected package liberror-perl.
Preparing to unpack .../65-liberror-perl_0.17029-2_all.deb ...
Unpacking liberror-perl (0.17029-2) ...
Selecting previously unselected package libtimedate-perl.
Preparing to unpack .../66-libtimedate-perl_2.3300-2_all.deb ...
Unpacking libtimedate-perl (2.3300-2) ...
Selecting previously unselected package libhttp-date-perl.
Preparing to unpack .../67-libhttp-date-perl_6.05-2_all.deb ...
Unpacking libhttp-date-perl (6.05-2) ...
Selecting previously unselected package libio-pty-perl.
Preparing to unpack .../68-libio-pty-perl_1%3a1.15-2+b2_armhf.deb ...
Unpacking libio-pty-perl (1:1.15-2+b2) ...
Selecting previously unselected package perl-openssl-defaults:armhf.
Preparing to unpack .../69-perl-openssl-defaults_7+b1_armhf.deb ...
Unpacking perl-openssl-defaults:armhf (7+b1) ...
Selecting previously unselected package libnet-ssleay-perl:armhf.
Preparing to unpack .../70-libnet-ssleay-perl_1.92-2+b2_armhf.deb ...
Unpacking libnet-ssleay-perl:armhf (1.92-2+b2) ...
Selecting previously unselected package libio-socket-ssl-perl.
Preparing to unpack .../71-libio-socket-ssl-perl_2.077-1_all.deb ...
Unpacking libio-socket-ssl-perl (2.077-1) ...
Selecting previously unselected package libnet-smtp-ssl-perl.
Preparing to unpack .../72-libnet-smtp-ssl-perl_1.04-2_all.deb ...
Unpacking libnet-smtp-ssl-perl (1.04-2) ...
Selecting previously unselected package libmailtools-perl.
Preparing to unpack .../73-libmailtools-perl_2.21-2_all.deb ...
Unpacking libmailtools-perl (2.21-2) ...
Selecting previously unselected package libserf-1-1:armhf.
Preparing to unpack .../74-libserf-1-1_1.3.9-11+b1_armhf.deb ...
Unpacking libserf-1-1:armhf (1.3.9-11+b1) ...
Selecting previously unselected package libutf8proc2:armhf.
Preparing to unpack .../75-libutf8proc2_2.8.0-1+rpi1_armhf.deb ...
Unpacking libutf8proc2:armhf (2.8.0-1+rpi1) ...
Selecting previously unselected package libsvn1:armhf.
Preparing to unpack .../76-libsvn1_1.14.2-4_armhf.deb ...
Unpacking libsvn1:armhf (1.14.2-4) ...
Selecting previously unselected package libsvn-perl:armhf.
Preparing to unpack .../77-libsvn-perl_1.14.2-4_armhf.deb ...
Unpacking libsvn-perl:armhf (1.14.2-4) ...
Selecting previously unselected package libtcl8.6:armhf.
Preparing to unpack .../78-libtcl8.6_8.6.13+dfsg-1_armhf.deb ...
Unpacking libtcl8.6:armhf (8.6.13+dfsg-1) ...
Selecting previously unselected package libyaml-perl.
Preparing to unpack .../79-libyaml-perl_1.30-2_all.deb ...
Unpacking libyaml-perl (1.30-2) ...
Selecting previously unselected package subversion.
Preparing to unpack .../80-subversion_1.14.2-4_armhf.deb ...
Unpacking subversion (1.14.2-4) ...
Selecting previously unselected package tcl8.6.
Preparing to unpack .../81-tcl8.6_8.6.13+dfsg-1_armhf.deb ...
Unpacking tcl8.6 (8.6.13+dfsg-1) ...
Selecting previously unselected package tcl.
Preparing to unpack .../82-tcl_8.6.11+1+b2_armhf.deb ...
Unpacking tcl (8.6.11+1+b2) ...
Selecting previously unselected package unzip.
Preparing to unpack .../83-unzip_6.0-27_armhf.deb ...
Unpacking unzip (6.0-27) ...
Selecting previously unselected package zlib1g-dev:armhf.
Preparing to unpack .../84-zlib1g-dev_1%3a1.2.13.dfsg-1_armhf.deb ...
Unpacking zlib1g-dev:armhf (1:1.2.13.dfsg-1) ...
Selecting previously unselected package sbuild-build-depends-git-dummy.
Preparing to unpack .../85-sbuild-build-depends-git-dummy_0.invalid.0_armhf.deb ...
Unpacking sbuild-build-depends-git-dummy (0.invalid.0) ...
Setting up media-types (8.0.0) ...
Setting up libpipeline1:armhf (1.5.7-1) ...
Setting up libpsl5:armhf (0.21.0-1.2) ...
Setting up libicu72:armhf (72.1-3) ...
Setting up bsdextrautils (2.38.1-4) ...
Setting up libio-pty-perl (1:1.15-2+b2) ...
Setting up libmagic-mgc (1:5.41-4) ...
Setting up libarchive-zip-perl (1.68-1) ...
Setting up libhtml-tagset-perl (3.20-6) ...
Setting up unzip (6.0-27) ...
Setting up libutf8proc2:armhf (2.8.0-1+rpi1) ...
Setting up libdebhelper-perl (13.11.3) ...
Setting up libbrotli1:armhf (1.0.9-2+b2) ...
Setting up libnghttp2-14:armhf (1.51.0-1) ...
Setting up libmagic1:armhf (1:5.41-4) ...
Setting up libapr1:armhf (1.7.0-8) ...
Setting up perl-openssl-defaults:armhf (7+b1) ...
Setting up gettext-base (0.21-10) ...
Setting up m4 (1.4.19-1) ...
Setting up file (1:5.41-4) ...
Setting up libyaml-perl (1.30-2) ...
Setting up libpcre2-16-0:armhf (10.40-3) ...
Setting up liberror-perl (0.17029-2) ...
Setting up autotools-dev (20220109.1) ...
Setting up libpcre2-32-0:armhf (10.40-3) ...
Setting up libexpat1-dev:armhf (2.5.0-1) ...
Setting up librtmp1:armhf (2.4+20151223.gitfa8646d.1-2+b2) ...
Setting up libldap-dev:armhf (2.5.13+dfsg-2+rpi1+b1) ...
Setting up uuid-dev:armhf (2.38.1-4) ...
Setting up libtcl8.6:armhf (8.6.13+dfsg-1) ...
Setting up autopoint (0.21-10) ...
Setting up autoconf (2.71-2) ...
Setting up libtimedate-perl (2.3300-2) ...
Setting up libregexp-ipv6-perl (0.03-3) ...
Setting up zlib1g-dev:armhf (1:1.2.13.dfsg-1) ...
Setting up libpcre2-posix3:armhf (10.40-3) ...
Setting up libmd0:armhf (1.0.4-2) ...
Setting up libsctp1:armhf (1.0.19+dfsg-2) ...
Setting up libuchardet0:armhf (0.0.7-1) ...
Setting up libmpdec3:armhf (2.5.1-2+rpi1) ...
Setting up libsub-override-perl (0.09-4) ...
Setting up libssh2-1:armhf (1.10.0-3+b1) ...
Setting up openssl (3.0.7-1) ...
Setting up libbsd0:armhf (0.11.7-1) ...
Setting up libelf1:armhf (0.187-2+rpi2) ...
Setting up libxml2:armhf (2.9.14+dfsg-1.1) ...
Setting up liburi-perl (5.17-1) ...
Setting up libdbi-perl:armhf (1.643-4) ...
Setting up libaprutil1:armhf (1.6.1-5+b2) ...
Setting up libnet-ssleay-perl:armhf (1.92-2+b2) ...
Setting up automake (1:1.16.5-1.3) ...
update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode
Setting up libfile-stripnondeterminism-perl (1.13.0-2) ...
Setting up libhttp-date-perl (6.05-2) ...
Setting up tcl8.6 (8.6.13+dfsg-1) ...
Setting up gettext (0.21-10) ...
Setting up libpcre2-dev:armhf (10.40-3) ...
Setting up libtool (2.4.7-5) ...
Setting up cvs (2:1.12.13+real-28) ...
Allowing use of questionable username.
Adding group `_cvsadmin' (GID 114) ...
Done.
Setting up libserf-1-1:armhf (1.3.9-11+b1) ...
Setting up libcurl3-gnutls:armhf (7.86.0-2) ...
Setting up libcurl4-gnutls-dev (7.86.0-2) ...
Setting up intltool-debian (0.35.0+20060710.6) ...
Setting up libldap2-dev (2.5.13+dfsg-2+rpi1) ...
Setting up libpython3.10-stdlib:armhf (3.10.9-1) ...
Setting up dh-autoreconf (20) ...
Setting up libsctp-dev:armhf (1.0.19+dfsg-2) ...
Setting up dh-strip-nondeterminism (1.13.0-2) ...
Setting up dwz (0.14+20220924-2) ...
Setting up groff-base (1.22.4-9) ...
Setting up libhtml-parser-perl:armhf (3.80-1) ...
Setting up tcl (8.6.11+1+b2) ...
Setting up libdbd-sqlite3-perl:armhf (1.72-1) ...
Setting up cvsps (2.1-8) ...
Setting up libsvn1:armhf (1.14.2-4) ...
Setting up libio-socket-ssl-perl (2.077-1) ...
Setting up libpython3-stdlib:armhf (3.10.6-3) ...
Setting up libsvn-perl:armhf (1.14.2-4) ...
Setting up python3.10 (3.10.9-1) ...
Setting up po-debconf (1.0.21+nmu1) ...
Setting up libcgi-pm-perl (4.54-1) ...
Setting up subversion (1.14.2-4) ...
Setting up python3 (3.10.6-3) ...
Setting up man-db (2.11.1-1) ...
Not building database; man-db/auto-update is not 'true'.
Setting up libnet-smtp-ssl-perl (1.04-2) ...
Setting up libmailtools-perl (2.21-2) ...
Setting up libapr1-dev (1.7.0-8) ...
Setting up libaprutil1-dev (1.6.1-5+b2) ...
Setting up debhelper (13.11.3) ...
Setting up dh-exec (0.27+b1) ...
Setting up apache2-dev (2.4.54-5) ...
Setting up sbuild-build-depends-git-dummy (0.invalid.0) ...
Processing triggers for libc-bin (2.36-6+rpi1) ...
W: No sandbox user '_apt' on the system, can not drop privileges

+------------------------------------------------------------------------------+
| Build environment                                                            |
+------------------------------------------------------------------------------+

Kernel: Linux 4.9.0-0.bpo.6-armmp armhf (armv7l)
Toolchain package versions: binutils_2.39.50.20221208-5+rpi1 dpkg-dev_1.21.9+rpi1 g++-12_12.2.0-10+rpi1 gcc-12_12.2.0-10+rpi1 libc6-dev_2.36-6+rpi1 libstdc++-12-dev_12.2.0-10+rpi1 libstdc++6_12.2.0-10+rpi1 linux-libc-dev_6.0.12-1+rpi1
Package versions: adduser_3.129 apache2-dev_2.4.54-5 apt_2.5.4 autoconf_2.71-2 automake_1:1.16.5-1.3 autopoint_0.21-10 autotools-dev_20220109.1 base-files_12.3+rpi1 base-passwd_3.6.1 bash_5.2-2 binutils_2.39.50.20221208-5+rpi1 binutils-arm-linux-gnueabihf_2.39.50.20221208-5+rpi1 binutils-common_2.39.50.20221208-5+rpi1 bsdextrautils_2.38.1-4 bsdutils_1:2.38.1-4 build-essential_12.9 bzip2_1.0.8-5+b2 coreutils_9.1-1 cpp_4:12.2.0-1+rpi1 cpp-12_12.2.0-10+rpi1 cvs_2:1.12.13+real-28 cvsps_2.1-8 dash_0.5.11+git20210903+057cd650a4ed-9 debconf_1.5.80 debhelper_13.11.3 debianutils_5.7-0.4 dh-autoreconf_20 dh-exec_0.27+b1 dh-strip-nondeterminism_1.13.0-2 diffutils_1:3.8-1 dirmngr_2.2.40-1 dpkg_1.21.9+rpi1 dpkg-dev_1.21.9+rpi1 dwz_0.14+20220924-2 e2fsprogs_1.46.6~rc1-1 fakeroot_1.29-1 file_1:5.41-4 findutils_4.9.0-3 g++_4:12.2.0-1+rpi1 g++-12_12.2.0-10+rpi1 gcc_4:12.2.0-1+rpi1 gcc-12_12.2.0-10+rpi1 gcc-12-base_12.2.0-10+rpi1 gcc-7-base_7.5.0-6+rpi1+b2 gcc-8-base_8.4.0-7+rpi1 gcc-9-base_9.4.0-2+rpi1 gettext_0.21-10 gettext-base_0.21-10 gnupg_2.2.40-1 gnupg-l10n_2.2.40-1 gnupg-utils_2.2.40-1 gpg_2.2.40-1 gpg-agent_2.2.40-1 gpg-wks-client_2.2.40-1 gpg-wks-server_2.2.40-1 gpgconf_2.2.40-1 gpgsm_2.2.40-1 gpgv_2.2.40-1 grep_3.8-3 groff-base_1.22.4-9 gzip_1.12-1 hostname_3.23 init-system-helpers_1.64 intltool-debian_0.35.0+20060710.6 iputils-ping_3:20221126-1 krb5-locales_1.20.1-1 libacl1_2.3.1-2 libapr1_1.7.0-8 libapr1-dev_1.7.0-8 libaprutil1_1.6.1-5+b2 libaprutil1-dev_1.6.1-5+b2 libapt-pkg6.0_2.5.4 libarchive-zip-perl_1.68-1 libasan8_12.2.0-10+rpi1 libassuan0_2.5.5-5 libatomic1_12.2.0-10+rpi1 libattr1_1:2.5.1-3 libaudit-common_1:3.0.7-1.1 libaudit1_1:3.0.7-1.1 libbinutils_2.39.50.20221208-5+rpi1 libblkid1_2.38.1-4 libbrotli1_1.0.9-2+b2 libbsd0_0.11.7-1 libbz2-1.0_1.0.8-5+b2 libc-bin_2.36-6+rpi1 libc-dev-bin_2.36-6+rpi1 libc6_2.36-6+rpi1 libc6-dev_2.36-6+rpi1 libcap-ng0_0.8.3-1 libcap2_1:2.44-1 libcap2-bin_1:2.44-1 libcc1-0_12.2.0-10+rpi1 libcgi-pm-perl_4.54-1 libcom-err2_1.46.6~rc1-1 libcrypt-dev_1:4.4.33-1 libcrypt1_1:4.4.33-1 libctf-nobfd0_2.39.50.20221208-5+rpi1 libctf0_2.39.50.20221208-5+rpi1 libcurl3-gnutls_7.86.0-2 libcurl4-gnutls-dev_7.86.0-2 libdb5.3_5.3.28+dfsg1-0.10 libdbd-sqlite3-perl_1.72-1 libdbi-perl_1.643-4 libdebconfclient0_0.265 libdebhelper-perl_13.11.3 libdpkg-perl_1.21.9+rpi1 libelf1_0.187-2+rpi2 liberror-perl_0.17029-2 libexpat1_2.5.0-1 libexpat1-dev_2.5.0-1 libext2fs2_1.46.6~rc1-1 libfakeroot_1.29-1 libffi8_3.4.4-1 libfile-stripnondeterminism-perl_1.13.0-2 libgcc-12-dev_12.2.0-10+rpi1 libgcc-s1_12.2.0-10+rpi1 libgcrypt20_1.10.1-3 libgdbm-compat4_1.23-3 libgdbm6_1.23-3 libgmp10_2:6.2.1+dfsg1-1.1 libgnutls30_3.7.8-4 libgomp1_12.2.0-10+rpi1 libgpg-error0_1.46-1 libgssapi-krb5-2_1.20.1-1 libhogweed6_3.8.1-2 libhtml-parser-perl_3.80-1 libhtml-tagset-perl_3.20-6 libhttp-date-perl_6.05-2 libicu72_72.1-3 libidn2-0_2.3.3-1 libio-pty-perl_1:1.15-2+b2 libio-socket-ssl-perl_2.077-1 libisl23_0.25-1 libjansson4_2.14-2 libk5crypto3_1.20.1-1 libkeyutils1_1.6.3-1 libkrb5-3_1.20.1-1 libkrb5support0_1.20.1-1 libksba8_1.6.2-4 libldap-2.5-0_2.5.13+dfsg-2+rpi1+b1 libldap-dev_2.5.13+dfsg-2+rpi1+b1 libldap2-dev_2.5.13+dfsg-2+rpi1 liblz4-1_1.9.4-1+rpi1 liblzma5_5.4.0-0.1 libmagic-mgc_1:5.41-4 libmagic1_1:5.41-4 libmailtools-perl_2.21-2 libmd0_1.0.4-2 libmount1_2.38.1-4 libmpc3_1.2.1-2 libmpdec3_2.5.1-2+rpi1 libmpfr6_4.1.0-3 libncursesw6_6.3+20220423-2 libnet-smtp-ssl-perl_1.04-2 libnet-ssleay-perl_1.92-2+b2 libnettle8_3.8.1-2 libnghttp2-14_1.51.0-1 libnpth0_1.6-3 libnsl-dev_1.3.0-2 libnsl2_1.3.0-2 libp11-kit0_0.24.1-1 libpam-cap_1:2.44-1 libpam-modules_1.5.2-5 libpam-modules-bin_1.5.2-5 libpam-runtime_1.5.2-5 libpam0g_1.5.2-5 libpcre2-16-0_10.40-3 libpcre2-32-0_10.40-3 libpcre2-8-0_10.40-3 libpcre2-dev_10.40-3 libpcre2-posix3_10.40-3 libpcre3_2:8.39-14 libperl5.36_5.36.0-6 libpipeline1_1.5.7-1 libpsl5_0.21.0-1.2 libpython3-stdlib_3.10.6-3 libpython3.10-minimal_3.10.9-1 libpython3.10-stdlib_3.10.9-1 libreadline8_8.2-1.2 libregexp-ipv6-perl_0.03-3 librtmp1_2.4+20151223.gitfa8646d.1-2+b2 libsasl2-2_2.1.28+dfsg-10 libsasl2-modules-db_2.1.28+dfsg-10 libsctp-dev_1.0.19+dfsg-2 libsctp1_1.0.19+dfsg-2 libseccomp2_2.5.4-1+rpi1 libselinux1_3.4-1 libsemanage-common_3.4-1 libsemanage2_3.4-1 libsepol1_3.1-1 libsepol2_3.4-2 libserf-1-1_1.3.9-11+b1 libsmartcols1_2.38.1-4 libsqlite3-0_3.40.0-1 libss2_1.46.6~rc1-1 libssh2-1_1.10.0-3+b1 libssl1.1_1.1.1o-1 libssl3_3.0.7-1 libstdc++-12-dev_12.2.0-10+rpi1 libstdc++6_12.2.0-10+rpi1 libsub-override-perl_0.09-4 libsvn-perl_1.14.2-4 libsvn1_1.14.2-4 libsystemd0_252.2-1+rpi1 libtasn1-6_4.19.0-2 libtcl8.6_8.6.13+dfsg-1 libtimedate-perl_2.3300-2 libtinfo6_6.3+20220423-2 libtirpc-common_1.3.3+ds-1 libtirpc-dev_1.3.3+ds-1 libtirpc3_1.3.3+ds-1 libtool_2.4.7-5 libubsan1_12.2.0-10+rpi1 libuchardet0_0.0.7-1 libudev1_252.2-1+rpi1 libunistring2_1.0-2 liburi-perl_5.17-1 libutf8proc2_2.8.0-1+rpi1 libuuid1_2.38.1-4 libxml2_2.9.14+dfsg-1.1 libxxhash0_0.8.1-1 libyaml-perl_1.30-2 libzstd1_1.5.2+dfsg-1 linux-libc-dev_6.0.12-1+rpi1 login_1:4.13+dfsg1-1 logsave_1.46.6~rc1-1 lsb-base_11.4+rpi1 m4_1.4.19-1 make_4.3-4.1 man-db_2.11.1-1 mawk_1.3.4.20200120-3.1 media-types_8.0.0 mount_2.38.1-4 nano_7.1-1 ncurses-base_6.3+20220423-2 ncurses-bin_6.3+20220423-2 netbase_6.4 openssl_3.0.7-1 passwd_1:4.13+dfsg1-1 patch_2.7.6-7 perl_5.36.0-6 perl-base_5.36.0-6 perl-modules-5.36_5.36.0-6 perl-openssl-defaults_7+b1 pinentry-curses_1.2.1-1 po-debconf_1.0.21+nmu1 python3_3.10.6-3 python3-minimal_3.10.6-3 python3.10_3.10.9-1 python3.10-minimal_3.10.9-1 raspbian-archive-keyring_20120528.2 readline-common_8.2-1.2 rpcsvc-proto_1.4.3-1 sbuild-build-depends-core-dummy_0.invalid.0 sbuild-build-depends-git-dummy_0.invalid.0 sed_4.8-1 sensible-utils_0.0.17 sgml-base_1.31 subversion_1.14.2-4 sysvinit-utils_3.05-7 tar_1.34+dfsg-1 tcl_8.6.11+1+b2 tcl8.6_8.6.13+dfsg-1 tzdata_2022f-1 unzip_6.0-27 util-linux_2.38.1-4 util-linux-extra_2.38.1-4 uuid-dev_2.38.1-4 xz-utils_5.4.0-0.1 zlib1g_1:1.2.13.dfsg-1 zlib1g-dev_1:1.2.13.dfsg-1

+------------------------------------------------------------------------------+
| Build                                                                        |
+------------------------------------------------------------------------------+


Unpack source
-------------

gpgv: unknown type of key resource 'trustedkeys.kbx'
gpgv: keyblock resource '/tmp/dpkg-verify-sig.GXSq8uvb/trustedkeys.kbx': General error
gpgv: Signature made Mon Dec 12 21:12:22 2022 UTC
gpgv:                using RSA key 521E58F17E96D712AA0FF102DFC671EEB333FA25
gpgv:                issuer "jrnieder@gmail.com"
gpgv: Can't check signature: No public key
dpkg-source: warning: cannot verify signature ./git_2.39.0-1.dsc
dpkg-source: info: extracting git in /<<PKGBUILDDIR>>
dpkg-source: info: unpacking git_2.39.0.orig.tar.xz
dpkg-source: info: unpacking git_2.39.0-1.debian.tar.xz

Check disc space
----------------

Sufficient free space for build

User Environment
----------------

APT_CONFIG=/var/lib/sbuild/apt.conf
DEB_BUILD_OPTIONS=parallel=4
HOME=/sbuild-nonexistent
LC_ALL=POSIX
LOGNAME=buildd
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SCHROOT_ALIAS_NAME=bookworm-staging-armhf-sbuild
SCHROOT_CHROOT_NAME=bookworm-staging-armhf-sbuild
SCHROOT_COMMAND=env
SCHROOT_GID=109
SCHROOT_GROUP=buildd
SCHROOT_SESSION_ID=bookworm-staging-armhf-sbuild-16965604-877c-4d1f-b369-0179449f7e0e
SCHROOT_UID=104
SCHROOT_USER=buildd
SHELL=/bin/sh
TERM=linux
USER=buildd

dpkg-buildpackage
-----------------

dpkg-buildpackage: info: source package git
dpkg-buildpackage: info: source version 1:2.39.0-1
dpkg-buildpackage: info: source distribution unstable
 dpkg-source --before-build .
dpkg-buildpackage: info: host architecture armhf
 fakeroot debian/rules clean
dh clean --with apache2 --without autoreconf
   debian/rules override_dh_auto_clean
/usr/bin/make -C contrib/mw-to-git clean NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
/usr/bin/make -C ../.. SCRIPT_PERL="contrib/mw-to-git//git-remote-mediawiki.perl contrib/mw-to-git//git-mw.perl" \
                clean-perl-script
make[3]: Entering directory '/<<PKGBUILDDIR>>'
GIT_VERSION = 2.39.0
make[3]: Leaving directory '/<<PKGBUILDDIR>>'
make[3]: Entering directory '/<<PKGBUILDDIR>>'
rm -f contrib/mw-to-git//git-remote-mediawiki contrib/mw-to-git//git-mw
make[3]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C contrib/subtree clean NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
/usr/bin/make -C ../../ GIT-VERSION-FILE
make[3]: 'GIT-VERSION-FILE' is up to date.
make[2]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree'
rm -f git-subtree
rm -f *.xml *.html *.1
make[2]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree'
/usr/bin/make clean NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f gitweb/gitweb.cgi gitweb/static/gitweb.js gitweb/static/gitweb.min.js gitweb/static/gitweb.min.css gitweb/GITWEB-BUILD-OPTIONS
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f GIT-SPATCH-DEFINES
rm -f -r .build/contrib/coccinelle
rm -f contrib/coccinelle/*.cocci.patch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f /<<PKGBUILDDIR>>/./*.gcda /<<PKGBUILDDIR>>/builtin/*.gcda /<<PKGBUILDDIR>>/compat/*.gcda /<<PKGBUILDDIR>>/compat/linux/*.gcda /<<PKGBUILDDIR>>/compat/simple-ipc/*.gcda /<<PKGBUILDDIR>>/ewah/*.gcda /<<PKGBUILDDIR>>/negotiator/*.gcda /<<PKGBUILDDIR>>/oss-fuzz/*.gcda /<<PKGBUILDDIR>>/refs/*.gcda /<<PKGBUILDDIR>>/reftable/*.gcda /<<PKGBUILDDIR>>/sha1dc/*.gcda /<<PKGBUILDDIR>>/sha256/block/*.gcda /<<PKGBUILDDIR>>/t/helper/*.gcda /<<PKGBUILDDIR>>/trace2/*.gcda /<<PKGBUILDDIR>>/xdiff/*.gcda
rm -f /<<PKGBUILDDIR>>/./*.gcno /<<PKGBUILDDIR>>/builtin/*.gcno /<<PKGBUILDDIR>>/compat/*.gcno /<<PKGBUILDDIR>>/compat/linux/*.gcno /<<PKGBUILDDIR>>/compat/simple-ipc/*.gcno /<<PKGBUILDDIR>>/ewah/*.gcno /<<PKGBUILDDIR>>/negotiator/*.gcno /<<PKGBUILDDIR>>/oss-fuzz/*.gcno /<<PKGBUILDDIR>>/refs/*.gcno /<<PKGBUILDDIR>>/reftable/*.gcno /<<PKGBUILDDIR>>/sha1dc/*.gcno /<<PKGBUILDDIR>>/sha256/block/*.gcno /<<PKGBUILDDIR>>/t/helper/*.gcno /<<PKGBUILDDIR>>/trace2/*.gcno /<<PKGBUILDDIR>>/xdiff/*.gcno
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f ./*.gcov builtin/*.gcov compat/*.gcov compat/linux/*.gcov compat/simple-ipc/*.gcov ewah/*.gcov negotiator/*.gcov oss-fuzz/*.gcov refs/*.gcov reftable/*.gcov sha1dc/*.gcov sha256/block/*.gcov t/helper/*.gcov trace2/*.gcov xdiff/*.gcov
rm -f ./*.gcda builtin/*.gcda compat/*.gcda compat/linux/*.gcda compat/simple-ipc/*.gcda ewah/*.gcda negotiator/*.gcda oss-fuzz/*.gcda refs/*.gcda reftable/*.gcda sha1dc/*.gcda sha256/block/*.gcda t/helper/*.gcda trace2/*.gcda xdiff/*.gcda
rm -f coverage-untested-functions
rm -f -r cover_db/
rm -f -r cover_db_html/
rm -f coverage-test.made
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f ./*.gcno builtin/*.gcno compat/*.gcno compat/linux/*.gcno compat/simple-ipc/*.gcno ewah/*.gcno negotiator/*.gcno oss-fuzz/*.gcno refs/*.gcno reftable/*.gcno sha1dc/*.gcno sha256/block/*.gcno t/helper/*.gcno trace2/*.gcno xdiff/*.gcno
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f -r .build
rm -f po/git.pot po/git-core.pot
rm -f git.res
rm -f abspath.o add-interactive.o add-patch.o advice.o alias.o alloc.o apply.o archive-tar.o archive-zip.o archive.o attr.o base85.o bisect.o blame.o blob.o bloom.o branch.o bulk-checkin.o bundle-uri.o bundle.o cache-tree.o cbtree.o chdir-notify.o checkout.o chunk-format.o color.o column.o combine-diff.o commit-graph.o commit-reach.o commit.o compat/nonblock.o compat/obstack.o compat/terminal.o compat/zlib-uncompress2.o config.o connect.o connected.o convert.o copy.o credential.o csum-file.o ctype.o date.o decorate.o delta-islands.o diagnose.o diff-delta.o diff-merges.o diff-lib.o diff-no-index.o diff.o diffcore-break.o diffcore-delta.o diffcore-order.o diffcore-pickaxe.o diffcore-rename.o diffcore-rotate.o dir-iterator.o dir.o editor.o entry.o environment.o ewah/bitmap.o ewah/ewah_bitmap.o ewah/ewah_io.o ewah/ewah_rlw.o exec-cmd.o fetch-negotiator.o fetch-pack.o fmt-merge-msg.o fsck.o fsmonitor.o fsmonitor-ipc.o fsmonitor-settings.o gettext.o gpg-interface.o graph.o grep.o hash-lookup.o hashmap.o help.o hex.o hook.o ident.o json-writer.o kwset.o levenshtein.o line-log.o line-range.o linear-assignment.o list-objects-filter-options.o list-objects-filter.o list-objects.o ll-merge.o lockfile.o log-tree.o ls-refs.o mailinfo.o mailmap.o match-trees.o mem-pool.o merge-blobs.o merge-ort.o merge-ort-wrappers.o merge-recursive.o merge.o midx.o name-hash.o negotiator/default.o negotiator/noop.o negotiator/skipping.o notes-cache.o notes-merge.o notes-utils.o notes.o object-file.o object-name.o object.o oid-array.o oidmap.o oidset.o oidtree.o pack-bitmap-write.o pack-bitmap.o pack-check.o pack-mtimes.o pack-objects.o pack-revindex.o pack-write.o packfile.o pager.o parallel-checkout.o parse-options-cb.o parse-options.o patch-delta.o patch-ids.o path.o pathspec.o pkt-line.o preload-index.o pretty.o prio-queue.o progress.o promisor-remote.o prompt.o protocol.o protocol-caps.o prune-packed.o quote.o range-diff.o reachable.o read-cache.o rebase-interactive.o rebase.o ref-filter.o reflog-walk.o reflog.o refs.o refs/debug.o refs/files-backend.o refs/iterator.o refs/packed-backend.o refs/ref-cache.o refspec.o remote.o replace-object.o repo-settings.o repository.o rerere.o reset.o resolve-undo.o revision.o run-command.o send-pack.o sequencer.o serve.o server-info.o setup.o shallow.o sideband.o sigchain.o sparse-index.o split-index.o stable-qsort.o strbuf.o streaming.o string-list.o strmap.o strvec.o sub-process.o submodule-config.o submodule.o symlinks.o tag.o tempfile.o thread-utils.o tmp-objdir.o trace.o trace2.o trace2/tr2_cfg.o trace2/tr2_cmd_name.o trace2/tr2_ctr.o trace2/tr2_dst.o trace2/tr2_sid.o trace2/tr2_sysenv.o trace2/tr2_tbuf.o trace2/tr2_tgt_event.o trace2/tr2_tgt_normal.o trace2/tr2_tgt_perf.o trace2/tr2_tls.o trace2/tr2_tmr.o trailer.o transport-helper.o transport.o tree-diff.o tree-walk.o tree.o unpack-trees.o upload-pack.o url.o urlmatch.o usage.o userdiff.o utf8.o varint.o version.o versioncmp.o walker.o wildmatch.o worktree.o wrapper.o write-or-die.o ws.o wt-status.o xdiff-interface.o zlib.o unix-socket.o unix-stream-server.o compat/simple-ipc/ipc-shared.o compat/simple-ipc/ipc-unix-socket.o sha1dc_git.o sha1dc/sha1.o sha1dc/ubc_check.o sha256/block/sha256.o compat/linux/procinfo.o compat/fopen.o compat/strlcpy.o compat/qsort_s.o builtin/add.o builtin/am.o builtin/annotate.o builtin/apply.o builtin/archive.o builtin/bisect--helper.o builtin/blame.o builtin/branch.o builtin/bugreport.o builtin/bundle.o builtin/cat-file.o builtin/check-attr.o builtin/check-ignore.o builtin/check-mailmap.o builtin/check-ref-format.o builtin/checkout--worker.o builtin/checkout-index.o builtin/checkout.o builtin/clean.o builtin/clone.o builtin/column.o builtin/commit-graph.o builtin/commit-tree.o builtin/commit.o builtin/config.o builtin/count-objects.o builtin/credential-cache--daemon.o builtin/credential-cache.o builtin/credential-store.o builtin/credential.o builtin/describe.o builtin/diagnose.o builtin/diff-files.o builtin/diff-index.o builtin/diff-tree.o builtin/diff.o builtin/difftool.o builtin/env--helper.o builtin/fast-export.o builtin/fast-import.o builtin/fetch-pack.o builtin/fetch.o builtin/fmt-merge-msg.o builtin/for-each-ref.o builtin/for-each-repo.o builtin/fsck.o builtin/fsmonitor--daemon.o builtin/gc.o builtin/get-tar-commit-id.o builtin/grep.o builtin/hash-object.o builtin/help.o builtin/hook.o builtin/index-pack.o builtin/init-db.o builtin/interpret-trailers.o builtin/log.o builtin/ls-files.o builtin/ls-remote.o builtin/ls-tree.o builtin/mailinfo.o builtin/mailsplit.o builtin/merge-base.o builtin/merge-file.o builtin/merge-index.o builtin/merge-ours.o builtin/merge-recursive.o builtin/merge-tree.o builtin/merge.o builtin/mktag.o builtin/mktree.o builtin/multi-pack-index.o builtin/mv.o builtin/name-rev.o builtin/notes.o builtin/pack-objects.o builtin/pack-redundant.o builtin/pack-refs.o builtin/patch-id.o builtin/prune-packed.o builtin/prune.o builtin/pull.o builtin/push.o builtin/range-diff.o builtin/read-tree.o builtin/rebase.o builtin/receive-pack.o builtin/reflog.o builtin/remote-ext.o builtin/remote-fd.o builtin/remote.o builtin/repack.o builtin/replace.o builtin/rerere.o builtin/reset.o builtin/rev-list.o builtin/rev-parse.o builtin/revert.o builtin/rm.o builtin/send-pack.o builtin/shortlog.o builtin/show-branch.o builtin/show-index.o builtin/show-ref.o builtin/sparse-checkout.o builtin/stash.o builtin/stripspace.o builtin/submodule--helper.o builtin/symbolic-ref.o builtin/tag.o builtin/unpack-file.o builtin/unpack-objects.o builtin/update-index.o builtin/update-ref.o builtin/update-server-info.o builtin/upload-archive.o builtin/upload-pack.o builtin/var.o builtin/verify-commit.o builtin/verify-pack.o builtin/verify-tag.o builtin/worktree.o builtin/write-tree.o common-main.o git.o scalar.o daemon.o http-backend.o imap-send.o sh-i18n--envsubst.o shell.o http-fetch.o http-push.o t/helper/test-fake-ssh.o t/helper/test-tool.o t/helper/test-advise.o t/helper/test-bitmap.o t/helper/test-bloom.o t/helper/test-bundle-uri.o t/helper/test-cache-tree.o t/helper/test-chmtime.o t/helper/test-config.o t/helper/test-crontab.o t/helper/test-csprng.o t/helper/test-ctype.o t/helper/test-date.o t/helper/test-delta.o t/helper/test-dir-iterator.o t/helper/test-drop-caches.o t/helper/test-dump-cache-tree.o t/helper/test-dump-fsmonitor.o t/helper/test-dump-split-index.o t/helper/test-dump-untracked-cache.o t/helper/test-example-decorate.o t/helper/test-fast-rebase.o t/helper/test-fsmonitor-client.o t/helper/test-genrandom.o t/helper/test-genzeros.o t/helper/test-getcwd.o t/helper/test-hash-speed.o t/helper/test-hash.o t/helper/test-hashmap.o t/helper/test-hexdump.o t/helper/test-index-version.o t/helper/test-json-writer.o t/helper/test-lazy-init-name-hash.o t/helper/test-match-trees.o t/helper/test-mergesort.o t/helper/test-mktemp.o t/helper/test-oid-array.o t/helper/test-oidmap.o t/helper/test-oidtree.o t/helper/test-online-cpus.o t/helper/test-pack-mtimes.o t/helper/test-parse-options.o t/helper/test-parse-pathspec-file.o t/helper/test-partial-clone.o t/helper/test-path-utils.o t/helper/test-pcre2-config.o t/helper/test-pkt-line.o t/helper/test-prio-queue.o t/helper/test-proc-receive.o t/helper/test-progress.o t/helper/test-reach.o t/helper/test-read-cache.o t/helper/test-read-graph.o t/helper/test-read-midx.o t/helper/test-ref-store.o t/helper/test-reftable.o t/helper/test-regex.o t/helper/test-rot13-filter.o t/helper/test-repository.o t/helper/test-revision-walking.o t/helper/test-run-command.o t/helper/test-scrap-cache-tree.o t/helper/test-serve-v2.o t/helper/test-sha1.o t/helper/test-sha256.o t/helper/test-sigchain.o t/helper/test-simple-ipc.o t/helper/test-strcmp-offset.o t/helper/test-string-list.o t/helper/test-submodule-config.o t/helper/test-submodule-nested-repo-config.o t/helper/test-submodule.o t/helper/test-subprocess.o t/helper/test-trace2.o t/helper/test-urlmatch-normalization.o t/helper/test-userdiff.o t/helper/test-wildmatch.o t/helper/test-windows-named-pipe.o t/helper/test-write-cache.o t/helper/test-xml-encode.o xdiff/xdiffi.o xdiff/xemit.o xdiff/xhistogram.o xdiff/xmerge.o xdiff/xpatience.o xdiff/xprepare.o xdiff/xutils.o oss-fuzz/fuzz-commit-graph.o oss-fuzz/fuzz-pack-headers.o oss-fuzz/fuzz-pack-idx.o reftable/basics.o reftable/error.o reftable/block.o reftable/blocksource.o reftable/iter.o reftable/publicbasics.o reftable/merged.o reftable/pq.o reftable/reader.o reftable/record.o reftable/refname.o reftable/generic.o reftable/stack.o reftable/tree.o reftable/writer.o reftable/basics_test.o reftable/block_test.o reftable/dump.o reftable/merged_test.o reftable/pq_test.o reftable/record_test.o reftable/readwrite_test.o reftable/refname_test.o reftable/stack_test.o reftable/test_framework.o reftable/tree_test.o http.o http-walker.o remote-curl.o
rm -f libgit.a xdiff/lib.a reftable/libreftable.a reftable/libreftable_test.a
rm -f  git-daemon git-http-backend git-imap-send git-sh-i18n--envsubst git-shell git-http-fetch git-http-push git-remote-http git-remote-https git-remote-ftp git-remote-ftps git-bisect git-difftool--helper git-filter-branch git-merge-octopus git-merge-one-file git-merge-resolve git-mergetool git-quiltimport git-request-pull git-submodule git-web--browse git-add--interactive git-archimport git-cvsexportcommit git-cvsimport git-cvsserver git-send-email git-svn git-p4 git-instaweb git-mergetool--lib git-sh-i18n git-sh-setup git-add git-am git-annotate git-apply git-archive git-bisect--helper git-blame git-branch git-bugreport git-bundle git-cat-file git-check-attr git-check-ignore git-check-mailmap git-check-ref-format git-checkout--worker git-checkout-index git-checkout git-clean git-clone git-column git-commit-graph git-commit-tree git-commit git-config git-count-objects git-credential-cache--daemon git-credential-cache git-credential-store git-credential git-describe git-diagnose git-diff-files git-diff-index git-diff-tree git-diff git-difftool git-env--helper git-fast-export git-fast-import git-fetch-pack git-fetch git-fmt-merge-msg git-for-each-ref git-for-each-repo git-fsck git-fsmonitor--daemon git-gc git-get-tar-commit-id git-grep git-hash-object git-help git-hook git-index-pack git-init-db git-interpret-trailers git-log git-ls-files git-ls-remote git-ls-tree git-mailinfo git-mailsplit git-merge-base git-merge-file git-merge-index git-merge-ours git-merge-recursive git-merge-tree git-merge git-mktag git-mktree git-multi-pack-index git-mv git-name-rev git-notes git-pack-objects git-pack-redundant git-pack-refs git-patch-id git-prune-packed git-prune git-pull git-push git-range-diff git-read-tree git-rebase git-receive-pack git-reflog git-remote-ext git-remote-fd git-remote git-repack git-replace git-rerere git-reset git-rev-list git-rev-parse git-revert git-rm git-send-pack git-shortlog git-show-branch git-show-index git-show-ref git-sparse-checkout git-stash git-stripspace git-submodule--helper git-symbolic-ref git-tag git-unpack-file git-unpack-objects git-update-index git-update-ref git-update-server-info git-upload-archive git-upload-pack git-var git-verify-commit git-verify-pack git-verify-tag git-worktree git-write-tree git-cherry git-cherry-pick git-format-patch git-fsck-objects git-init git-maintenance git-merge-subtree git-restore git-show git-stage git-status git-switch git-version git-whatchanged git scalar
rm -f t/helper/test-fake-ssh t/helper/test-tool
rm -f oss-fuzz/fuzz-commit-graph oss-fuzz/fuzz-pack-headers oss-fuzz/fuzz-pack-idx
rm -f abspath.sp add-interactive.sp add-patch.sp advice.sp alias.sp alloc.sp apply.sp archive-tar.sp archive-zip.sp archive.sp attr.sp base85.sp bisect.sp blame.sp blob.sp bloom.sp branch.sp bulk-checkin.sp bundle-uri.sp bundle.sp cache-tree.sp cbtree.sp chdir-notify.sp checkout.sp chunk-format.sp color.sp column.sp combine-diff.sp commit-graph.sp commit-reach.sp commit.sp compat/nonblock.sp compat/obstack.sp compat/terminal.sp compat/zlib-uncompress2.sp config.sp connect.sp connected.sp convert.sp copy.sp credential.sp csum-file.sp ctype.sp date.sp decorate.sp delta-islands.sp diagnose.sp diff-delta.sp diff-merges.sp diff-lib.sp diff-no-index.sp diff.sp diffcore-break.sp diffcore-delta.sp diffcore-order.sp diffcore-pickaxe.sp diffcore-rename.sp diffcore-rotate.sp dir-iterator.sp dir.sp editor.sp entry.sp environment.sp ewah/bitmap.sp ewah/ewah_bitmap.sp ewah/ewah_io.sp ewah/ewah_rlw.sp exec-cmd.sp fetch-negotiator.sp fetch-pack.sp fmt-merge-msg.sp fsck.sp fsmonitor.sp fsmonitor-ipc.sp fsmonitor-settings.sp gettext.sp gpg-interface.sp graph.sp grep.sp hash-lookup.sp hashmap.sp help.sp hex.sp hook.sp ident.sp json-writer.sp kwset.sp levenshtein.sp line-log.sp line-range.sp linear-assignment.sp list-objects-filter-options.sp list-objects-filter.sp list-objects.sp ll-merge.sp lockfile.sp log-tree.sp ls-refs.sp mailinfo.sp mailmap.sp match-trees.sp mem-pool.sp merge-blobs.sp merge-ort.sp merge-ort-wrappers.sp merge-recursive.sp merge.sp midx.sp name-hash.sp negotiator/default.sp negotiator/noop.sp negotiator/skipping.sp notes-cache.sp notes-merge.sp notes-utils.sp notes.sp object-file.sp object-name.sp object.sp oid-array.sp oidmap.sp oidset.sp oidtree.sp pack-bitmap-write.sp pack-bitmap.sp pack-check.sp pack-mtimes.sp pack-objects.sp pack-revindex.sp pack-write.sp packfile.sp pager.sp parallel-checkout.sp parse-options-cb.sp parse-options.sp patch-delta.sp patch-ids.sp path.sp pathspec.sp pkt-line.sp preload-index.sp pretty.sp prio-queue.sp progress.sp promisor-remote.sp prompt.sp protocol.sp protocol-caps.sp prune-packed.sp quote.sp range-diff.sp reachable.sp read-cache.sp rebase-interactive.sp rebase.sp ref-filter.sp reflog-walk.sp reflog.sp refs.sp refs/debug.sp refs/files-backend.sp refs/iterator.sp refs/packed-backend.sp refs/ref-cache.sp refspec.sp remote.sp replace-object.sp repo-settings.sp repository.sp rerere.sp reset.sp resolve-undo.sp revision.sp run-command.sp send-pack.sp sequencer.sp serve.sp server-info.sp setup.sp shallow.sp sideband.sp sigchain.sp sparse-index.sp split-index.sp stable-qsort.sp strbuf.sp streaming.sp string-list.sp strmap.sp strvec.sp sub-process.sp submodule-config.sp submodule.sp symlinks.sp tag.sp tempfile.sp thread-utils.sp tmp-objdir.sp trace.sp trace2.sp trace2/tr2_cfg.sp trace2/tr2_cmd_name.sp trace2/tr2_ctr.sp trace2/tr2_dst.sp trace2/tr2_sid.sp trace2/tr2_sysenv.sp trace2/tr2_tbuf.sp trace2/tr2_tgt_event.sp trace2/tr2_tgt_normal.sp trace2/tr2_tgt_perf.sp trace2/tr2_tls.sp trace2/tr2_tmr.sp trailer.sp transport-helper.sp transport.sp tree-diff.sp tree-walk.sp tree.sp unpack-trees.sp upload-pack.sp url.sp urlmatch.sp usage.sp userdiff.sp utf8.sp varint.sp version.sp versioncmp.sp walker.sp wildmatch.sp worktree.sp wrapper.sp write-or-die.sp ws.sp wt-status.sp xdiff-interface.sp zlib.sp unix-socket.sp unix-stream-server.sp compat/simple-ipc/ipc-shared.sp compat/simple-ipc/ipc-unix-socket.sp sha1dc_git.sp sha1dc/sha1.sp sha1dc/ubc_check.sp sha256/block/sha256.sp compat/linux/procinfo.sp compat/fopen.sp compat/strlcpy.sp compat/qsort_s.sp builtin/add.sp builtin/am.sp builtin/annotate.sp builtin/apply.sp builtin/archive.sp builtin/bisect--helper.sp builtin/blame.sp builtin/branch.sp builtin/bugreport.sp builtin/bundle.sp builtin/cat-file.sp builtin/check-attr.sp builtin/check-ignore.sp builtin/check-mailmap.sp builtin/check-ref-format.sp builtin/checkout--worker.sp builtin/checkout-index.sp builtin/checkout.sp builtin/clean.sp builtin/clone.sp builtin/column.sp builtin/commit-graph.sp builtin/commit-tree.sp builtin/commit.sp builtin/config.sp builtin/count-objects.sp builtin/credential-cache--daemon.sp builtin/credential-cache.sp builtin/credential-store.sp builtin/credential.sp builtin/describe.sp builtin/diagnose.sp builtin/diff-files.sp builtin/diff-index.sp builtin/diff-tree.sp builtin/diff.sp builtin/difftool.sp builtin/env--helper.sp builtin/fast-export.sp builtin/fast-import.sp builtin/fetch-pack.sp builtin/fetch.sp builtin/fmt-merge-msg.sp builtin/for-each-ref.sp builtin/for-each-repo.sp builtin/fsck.sp builtin/fsmonitor--daemon.sp builtin/gc.sp builtin/get-tar-commit-id.sp builtin/grep.sp builtin/hash-object.sp builtin/help.sp builtin/hook.sp builtin/index-pack.sp builtin/init-db.sp builtin/interpret-trailers.sp builtin/log.sp builtin/ls-files.sp builtin/ls-remote.sp builtin/ls-tree.sp builtin/mailinfo.sp builtin/mailsplit.sp builtin/merge-base.sp builtin/merge-file.sp builtin/merge-index.sp builtin/merge-ours.sp builtin/merge-recursive.sp builtin/merge-tree.sp builtin/merge.sp builtin/mktag.sp builtin/mktree.sp builtin/multi-pack-index.sp builtin/mv.sp builtin/name-rev.sp builtin/notes.sp builtin/pack-objects.sp builtin/pack-redundant.sp builtin/pack-refs.sp builtin/patch-id.sp builtin/prune-packed.sp builtin/prune.sp builtin/pull.sp builtin/push.sp builtin/range-diff.sp builtin/read-tree.sp builtin/rebase.sp builtin/receive-pack.sp builtin/reflog.sp builtin/remote-ext.sp builtin/remote-fd.sp builtin/remote.sp builtin/repack.sp builtin/replace.sp builtin/rerere.sp builtin/reset.sp builtin/rev-list.sp builtin/rev-parse.sp builtin/revert.sp builtin/rm.sp builtin/send-pack.sp builtin/shortlog.sp builtin/show-branch.sp builtin/show-index.sp builtin/show-ref.sp builtin/sparse-checkout.sp builtin/stash.sp builtin/stripspace.sp builtin/submodule--helper.sp builtin/symbolic-ref.sp builtin/tag.sp builtin/unpack-file.sp builtin/unpack-objects.sp builtin/update-index.sp builtin/update-ref.sp builtin/update-server-info.sp builtin/upload-archive.sp builtin/upload-pack.sp builtin/var.sp builtin/verify-commit.sp builtin/verify-pack.sp builtin/verify-tag.sp builtin/worktree.sp builtin/write-tree.sp common-main.sp git.sp scalar.sp daemon.sp http-backend.sp imap-send.sp sh-i18n--envsubst.sp shell.sp http-fetch.sp http-push.sp t/helper/test-fake-ssh.sp t/helper/test-tool.sp t/helper/test-advise.sp t/helper/test-bitmap.sp t/helper/test-bloom.sp t/helper/test-bundle-uri.sp t/helper/test-cache-tree.sp t/helper/test-chmtime.sp t/helper/test-config.sp t/helper/test-crontab.sp t/helper/test-csprng.sp t/helper/test-ctype.sp t/helper/test-date.sp t/helper/test-delta.sp t/helper/test-dir-iterator.sp t/helper/test-drop-caches.sp t/helper/test-dump-cache-tree.sp t/helper/test-dump-fsmonitor.sp t/helper/test-dump-split-index.sp t/helper/test-dump-untracked-cache.sp t/helper/test-example-decorate.sp t/helper/test-fast-rebase.sp t/helper/test-fsmonitor-client.sp t/helper/test-genrandom.sp t/helper/test-genzeros.sp t/helper/test-getcwd.sp t/helper/test-hash-speed.sp t/helper/test-hash.sp t/helper/test-hashmap.sp t/helper/test-hexdump.sp t/helper/test-index-version.sp t/helper/test-json-writer.sp t/helper/test-lazy-init-name-hash.sp t/helper/test-match-trees.sp t/helper/test-mergesort.sp t/helper/test-mktemp.sp t/helper/test-oid-array.sp t/helper/test-oidmap.sp t/helper/test-oidtree.sp t/helper/test-online-cpus.sp t/helper/test-pack-mtimes.sp t/helper/test-parse-options.sp t/helper/test-parse-pathspec-file.sp t/helper/test-partial-clone.sp t/helper/test-path-utils.sp t/helper/test-pcre2-config.sp t/helper/test-pkt-line.sp t/helper/test-prio-queue.sp t/helper/test-proc-receive.sp t/helper/test-progress.sp t/helper/test-reach.sp t/helper/test-read-cache.sp t/helper/test-read-graph.sp t/helper/test-read-midx.sp t/helper/test-ref-store.sp t/helper/test-reftable.sp t/helper/test-regex.sp t/helper/test-rot13-filter.sp t/helper/test-repository.sp t/helper/test-revision-walking.sp t/helper/test-run-command.sp t/helper/test-scrap-cache-tree.sp t/helper/test-serve-v2.sp t/helper/test-sha1.sp t/helper/test-sha256.sp t/helper/test-sigchain.sp t/helper/test-simple-ipc.sp t/helper/test-strcmp-offset.sp t/helper/test-string-list.sp t/helper/test-submodule-config.sp t/helper/test-submodule-nested-repo-config.sp t/helper/test-submodule.sp t/helper/test-subprocess.sp t/helper/test-trace2.sp t/helper/test-urlmatch-normalization.sp t/helper/test-userdiff.sp t/helper/test-wildmatch.sp t/helper/test-windows-named-pipe.sp t/helper/test-write-cache.sp t/helper/test-xml-encode.sp xdiff/xdiffi.sp xdiff/xemit.sp xdiff/xhistogram.sp xdiff/xmerge.sp xdiff/xpatience.sp xdiff/xprepare.sp xdiff/xutils.sp oss-fuzz/fuzz-commit-graph.sp oss-fuzz/fuzz-pack-headers.sp oss-fuzz/fuzz-pack-idx.sp reftable/basics.sp reftable/error.sp reftable/block.sp reftable/blocksource.sp reftable/iter.sp reftable/publicbasics.sp reftable/merged.sp reftable/pq.sp reftable/reader.sp reftable/record.sp reftable/refname.sp reftable/generic.sp reftable/stack.sp reftable/tree.sp reftable/writer.sp reftable/basics_test.sp reftable/block_test.sp reftable/dump.sp reftable/merged_test.sp reftable/pq_test.sp reftable/record_test.sp reftable/readwrite_test.sp reftable/refname_test.sp reftable/stack_test.sp reftable/test_framework.sp reftable/tree_test.sp http.sp http-walker.sp remote-curl.sp
rm -f add-interactive.hcc advice.hcc alias.hcc alloc.hcc apply.hcc archive.hcc attr.hcc banned.hcc bisect.hcc blame.hcc blob.hcc block-sha1/sha1.hcc bloom.hcc branch.hcc builtin.hcc bulk-checkin.hcc bundle-uri.hcc bundle.hcc cache-tree.hcc cache.hcc cbtree.hcc chdir-notify.hcc checkout.hcc chunk-format.hcc color.hcc column.hcc commit-graph.hcc commit-reach.hcc commit-slab-decl.hcc commit-slab-impl.hcc commit-slab.hcc commit.hcc config.hcc connect.hcc connected.hcc convert.hcc credential.hcc csum-file.hcc date.hcc decorate.hcc delta-islands.hcc delta.hcc diagnose.hcc diff-merges.hcc diff.hcc diffcore.hcc dir-iterator.hcc dir.hcc entry.hcc environment.hcc ewah/ewok.hcc ewah/ewok_rlw.hcc exec-cmd.hcc fetch-negotiator.hcc fetch-pack.hcc fmt-merge-msg.hcc fsck.hcc fsmonitor--daemon.hcc fsmonitor-ipc.hcc fsmonitor-path-utils.hcc fsmonitor-settings.hcc fsmonitor.hcc gettext.hcc git-compat-util.hcc git-curl-compat.hcc gpg-interface.hcc graph.hcc grep.hcc hash-lookup.hcc hash.hcc hashmap.hcc help.hcc hook.hcc http.hcc iterator.hcc json-writer.hcc khash.hcc kwset.hcc levenshtein.hcc line-log.hcc line-range.hcc linear-assignment.hcc list-objects-filter-options.hcc list-objects-filter.hcc list-objects.hcc list.hcc ll-merge.hcc lockfile.hcc log-tree.hcc ls-refs.hcc mailinfo.hcc mailmap.hcc mem-pool.hcc merge-blobs.hcc merge-ort-wrappers.hcc merge-ort.hcc merge-recursive.hcc mergesort.hcc midx.hcc negotiator/default.hcc negotiator/noop.hcc negotiator/skipping.hcc notes-cache.hcc notes-merge.hcc notes-utils.hcc notes.hcc object-store.hcc object.hcc oid-array.hcc oidmap.hcc oidset.hcc oidtree.hcc pack-bitmap.hcc pack-mtimes.hcc pack-objects.hcc pack-revindex.hcc pack.hcc packfile.hcc parallel-checkout.hcc parse-options.hcc patch-ids.hcc path.hcc pathspec.hcc pkt-line.hcc pretty.hcc prio-queue.hcc progress.hcc promisor-remote.hcc prompt.hcc protocol-caps.hcc protocol.hcc prune-packed.hcc quote.hcc range-diff.hcc reachable.hcc rebase-interactive.hcc rebase.hcc ref-filter.hcc reflog-walk.hcc reflog.hcc refs.hcc refs/packed-backend.hcc refs/ref-cache.hcc refs/refs-internal.hcc refspec.hcc reftable/basics.hcc reftable/block.hcc reftable/blocksource.hcc reftable/constants.hcc reftable/generic.hcc reftable/iter.hcc reftable/merged.hcc reftable/pq.hcc reftable/reader.hcc reftable/record.hcc reftable/refname.hcc reftable/reftable-blocksource.hcc reftable/reftable-error.hcc reftable/reftable-generic.hcc reftable/reftable-iterator.hcc reftable/reftable-malloc.hcc reftable/reftable-merged.hcc reftable/reftable-reader.hcc reftable/reftable-record.hcc reftable/reftable-stack.hcc reftable/reftable-tests.hcc reftable/reftable-writer.hcc reftable/stack.hcc reftable/system.hcc reftable/test_framework.hcc reftable/tree.hcc reftable/writer.hcc remote.hcc replace-object.hcc repository.hcc rerere.hcc reset.hcc resolve-undo.hcc revision.hcc run-command.hcc send-pack.hcc sequencer.hcc serve.hcc sha1dc/sha1.hcc sha1dc/ubc_check.hcc sha1dc_git.hcc sha256/block/sha256.hcc shallow.hcc shortlog.hcc sideband.hcc sigchain.hcc simple-ipc.hcc sparse-index.hcc split-index.hcc strbuf.hcc streaming.hcc string-list.hcc strmap.hcc strvec.hcc sub-process.hcc submodule-config.hcc submodule.hcc t/helper/test-tool-utils.hcc t/helper/test-tool.hcc tag.hcc tar.hcc tempfile.hcc thread-utils.hcc tmp-objdir.hcc trace.hcc trace2.hcc trace2/tr2_cfg.hcc trace2/tr2_cmd_name.hcc trace2/tr2_ctr.hcc trace2/tr2_dst.hcc trace2/tr2_sid.hcc trace2/tr2_sysenv.hcc trace2/tr2_tbuf.hcc trace2/tr2_tgt.hcc trace2/tr2_tls.hcc trace2/tr2_tmr.hcc trailer.hcc transport-internal.hcc transport.hcc tree-walk.hcc tree.hcc unix-socket.hcc unix-stream-server.hcc unpack-trees.hcc upload-pack.hcc url.hcc urlmatch.hcc userdiff.hcc utf8.hcc varint.hcc version.hcc walker.hcc wildmatch.hcc worktree.hcc wt-status.hcc xdiff-interface.hcc
rm -f -r bin-wrappers ./.depend builtin/.depend compat/.depend compat/linux/.depend compat/simple-ipc/.depend ewah/.depend negotiator/.depend oss-fuzz/.depend refs/.depend reftable/.depend sha1dc/.depend sha256/block/.depend t/helper/.depend trace2/.depend xdiff/.depend compile_commands compile_commands.json
rm -f -r po/build/
rm -f *.pyc *.pyo */*.pyc */*.pyo command-list.h config-list.h hook-list.h TAGS tags cscope*
rm -f -r .dist-tmp-dir .doc-tmp-dir
rm -f git-2.39.0.tar.gz
rm -f git-htmldocs-2.39.0.tar.gz git-manpages-2.39.0.tar.gz
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C Documentation/ clean
make[3]: Entering directory '/<<PKGBUILDDIR>>/Documentation'
rm -f -rf .build/
rm -f *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
rm -f *.texi *.texi+ *.texi++ git.info gitman.info
rm -f *.pdf
rm -f howto-index.txt howto/*.html doc.dep
rm -f technical/*.html technical/api-index.txt
rm -f SubmittingPatches.txt
rm -f cmds-ancillaryinterrogators.txt cmds-ancillarymanipulators.txt cmds-mainporcelain.txt cmds-plumbinginterrogators.txt cmds-plumbingmanipulators.txt cmds-synchingrepositories.txt cmds-synchelpers.txt cmds-guide.txt cmds-developerinterfaces.txt cmds-userinterfaces.txt cmds-purehelpers.txt cmds-foreignscminterface.txt mergetools-diff.txt mergetools-merge.txt *.made
rm -f manpage-base-url.xsl
rm -f GIT-ASCIIDOCFLAGS
make[3]: Leaving directory '/<<PKGBUILDDIR>>/Documentation'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f Documentation/GIT-EXCLUDED-PROGRAMS
rm -f -r perl/build/
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C templates/ clean
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
rm -f -r blt boilerplates.made
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
/usr/bin/make -C t/ clean
make[3]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'chainlinttmp'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[3]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'trash directory'.*
rm -f -r valgrind/bin
make[3]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[3]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'test-results'
rm -f .prove
make[3]: Leaving directory '/<<PKGBUILDDIR>>/t'
/usr/bin/make -C gitk-git clean
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
rm -f gitk-wish po/*.msg GIT-TCLTK-VARS
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
/usr/bin/make -C git-gui clean
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
rm -rf git-gui lib/tclIndex po/*.msg
rm -rf GIT-VERSION-FILE GIT-GUI-VARS
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
rm -f GIT-USER-AGENT GIT-PREFIX
rm -f GIT-SCRIPT-DEFINES GIT-PERL-DEFINES GIT-PERL-HEADER GIT-PYTHON-VARS
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[1]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-subtree
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   debian/rules override_dh_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_clean -Xmailinfo.c.orig
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
 debian/rules build-arch
dh build-arch --with apache2 --without autoreconf
   dh_update_autotools_config -a
   debian/rules override_dh_auto_build-arch
make[1]: Entering directory '/<<PKGBUILDDIR>>'
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/12/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 12.2.0-10+rpi1' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6+fp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (Raspbian 12.2.0-10+rpi1) 
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make all NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
make[2]: Entering directory '/<<PKGBUILDDIR>>'
GIT_VERSION = 2.39.0
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new build flags
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oss-fuzz/fuzz-pack-headers.o -c -MF oss-fuzz/.depend/fuzz-pack-headers.o.d -MQ oss-fuzz/fuzz-pack-headers.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oss-fuzz/fuzz-pack-headers.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oss-fuzz/fuzz-pack-idx.o -c -MF oss-fuzz/.depend/fuzz-pack-idx.o.d -MQ oss-fuzz/fuzz-pack-idx.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oss-fuzz/fuzz-pack-idx.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oss-fuzz/fuzz-commit-graph.o -c -MF oss-fuzz/.depend/fuzz-commit-graph.o.d -MQ oss-fuzz/fuzz-commit-graph.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oss-fuzz/fuzz-commit-graph.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new link flags
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o common-main.o -c -MF ./.depend/common-main.o.d -MQ common-main.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  common-main.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o abspath.o -c -MF ./.depend/abspath.o.d -MQ abspath.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  abspath.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o advice.o -c -MF ./.depend/advice.o.d -MQ advice.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  advice.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o alias.o -c -MF ./.depend/alias.o.d -MQ alias.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  alias.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o daemon.o -c -MF ./.depend/daemon.o.d -MQ daemon.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  daemon.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o alloc.o -c -MF ./.depend/alloc.o.d -MQ alloc.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  alloc.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o add-interactive.o -c -MF ./.depend/add-interactive.o.d -MQ add-interactive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  add-interactive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o archive-tar.o -c -MF ./.depend/archive-tar.o.d -MQ archive-tar.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  archive-tar.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o archive-zip.o -c -MF ./.depend/archive-zip.o.d -MQ archive-zip.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  archive-zip.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new prefix flags
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o add-patch.o -c -MF ./.depend/add-patch.o.d -MQ add-patch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  add-patch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o base85.o -c -MF ./.depend/base85.o.d -MQ base85.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  base85.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o archive.o -c -MF ./.depend/archive.o.d -MQ archive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  archive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o blob.o -c -MF ./.depend/blob.o.d -MQ blob.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  blob.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o bloom.o -c -MF ./.depend/bloom.o.d -MQ bloom.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  bloom.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o bisect.o -c -MF ./.depend/bisect.o.d -MQ bisect.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  bisect.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o bulk-checkin.o -c -MF ./.depend/bulk-checkin.o.d -MQ bulk-checkin.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  bulk-checkin.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o branch.o -c -MF ./.depend/branch.o.d -MQ branch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  branch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o bundle-uri.o -c -MF ./.depend/bundle-uri.o.d -MQ bundle-uri.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  bundle-uri.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o bundle.o -c -MF ./.depend/bundle.o.d -MQ bundle.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  bundle.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o cbtree.o -c -MF ./.depend/cbtree.o.d -MQ cbtree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  cbtree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o blame.o -c -MF ./.depend/blame.o.d -MQ blame.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  blame.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o chdir-notify.o -c -MF ./.depend/chdir-notify.o.d -MQ chdir-notify.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  chdir-notify.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o checkout.o -c -MF ./.depend/checkout.o.d -MQ checkout.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  checkout.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o chunk-format.o -c -MF ./.depend/chunk-format.o.d -MQ chunk-format.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  chunk-format.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o cache-tree.o -c -MF ./.depend/cache-tree.o.d -MQ cache-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  cache-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o color.o -c -MF ./.depend/color.o.d -MQ color.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  color.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o column.o -c -MF ./.depend/column.o.d -MQ column.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  column.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o apply.o -c -MF ./.depend/apply.o.d -MQ apply.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  apply.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o commit-reach.o -c -MF ./.depend/commit-reach.o.d -MQ commit-reach.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  commit-reach.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/nonblock.o -c -MF compat/.depend/nonblock.o.d -MQ compat/nonblock.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/nonblock.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/obstack.o -c -MF compat/.depend/obstack.o.d -MQ compat/obstack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/obstack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o commit.o -c -MF ./.depend/commit.o.d -MQ commit.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  commit.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/terminal.o -c -MF compat/.depend/terminal.o.d -MQ compat/terminal.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/terminal.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o combine-diff.o -c -MF ./.depend/combine-diff.o.d -MQ combine-diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  combine-diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/zlib-uncompress2.o -c -MF compat/.depend/zlib-uncompress2.o.d -MQ compat/zlib-uncompress2.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/zlib-uncompress2.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o connected.o -c -MF ./.depend/connected.o.d -MQ connected.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  connected.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o commit-graph.o -c -MF ./.depend/commit-graph.o.d -MQ commit-graph.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  commit-graph.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o copy.o -c -MF ./.depend/copy.o.d -MQ copy.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  copy.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o connect.o -c -MF ./.depend/connect.o.d -MQ connect.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  connect.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o csum-file.o -c -MF ./.depend/csum-file.o.d -MQ csum-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  csum-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o credential.o -c -MF ./.depend/credential.o.d -MQ credential.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  credential.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ctype.o -c -MF ./.depend/ctype.o.d -MQ ctype.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ctype.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o convert.o -c -MF ./.depend/convert.o.d -MQ convert.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  convert.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o decorate.o -c -MF ./.depend/decorate.o.d -MQ decorate.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  decorate.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diagnose.o -c -MF ./.depend/diagnose.o.d -MQ diagnose.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diagnose.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diff-delta.o -c -MF ./.depend/diff-delta.o.d -MQ diff-delta.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diff-delta.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o date.o -c -MF ./.depend/date.o.d -MQ date.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  date.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o delta-islands.o -c -MF ./.depend/delta-islands.o.d -MQ delta-islands.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  delta-islands.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o config.o -c -MF ./.depend/config.o.d -MQ config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -DETC_GITCONFIG='"/etc/gitconfig"' config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diff-merges.o -c -MF ./.depend/diff-merges.o.d -MQ diff-merges.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diff-merges.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-break.o -c -MF ./.depend/diffcore-break.o.d -MQ diffcore-break.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-break.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diff-no-index.o -c -MF ./.depend/diff-no-index.o.d -MQ diff-no-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diff-no-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diff-lib.o -c -MF ./.depend/diff-lib.o.d -MQ diff-lib.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diff-lib.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-delta.o -c -MF ./.depend/diffcore-delta.o.d -MQ diffcore-delta.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-delta.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-order.o -c -MF ./.depend/diffcore-order.o.d -MQ diffcore-order.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-order.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-rotate.o -c -MF ./.depend/diffcore-rotate.o.d -MQ diffcore-rotate.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-rotate.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-pickaxe.o -c -MF ./.depend/diffcore-pickaxe.o.d -MQ diffcore-pickaxe.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-pickaxe.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o dir-iterator.o -c -MF ./.depend/dir-iterator.o.d -MQ dir-iterator.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  dir-iterator.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o editor.o -c -MF ./.depend/editor.o.d -MQ editor.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  editor.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diffcore-rename.o -c -MF ./.depend/diffcore-rename.o.d -MQ diffcore-rename.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diffcore-rename.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o entry.o -c -MF ./.depend/entry.o.d -MQ entry.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  entry.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o environment.o -c -MF ./.depend/environment.o.d -MQ environment.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  environment.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ewah/bitmap.o -c -MF ewah/.depend/bitmap.o.d -MQ ewah/bitmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ewah/bitmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ewah/ewah_io.o -c -MF ewah/.depend/ewah_io.o.d -MQ ewah/ewah_io.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ewah/ewah_io.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ewah/ewah_bitmap.o -c -MF ewah/.depend/ewah_bitmap.o.d -MQ ewah/ewah_bitmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ewah/ewah_bitmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ewah/ewah_rlw.o -c -MF ewah/.depend/ewah_rlw.o.d -MQ ewah/ewah_rlw.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ewah/ewah_rlw.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o exec-cmd.o -c -MF ./.depend/exec-cmd.o.d -MQ exec-cmd.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' '-DGIT_EXEC_PATH="/usr/lib/git-core"' '-DGIT_LOCALE_PATH="share/locale"' '-DBINDIR="bin"' '-DFALLBACK_RUNTIME_PREFIX="/usr"' exec-cmd.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fetch-negotiator.o -c -MF ./.depend/fetch-negotiator.o.d -MQ fetch-negotiator.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fetch-negotiator.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o dir.o -c -MF ./.depend/dir.o.d -MQ dir.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  dir.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fmt-merge-msg.o -c -MF ./.depend/fmt-merge-msg.o.d -MQ fmt-merge-msg.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fmt-merge-msg.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fsmonitor.o -c -MF ./.depend/fsmonitor.o.d -MQ fsmonitor.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fsmonitor.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fsmonitor-ipc.o -c -MF ./.depend/fsmonitor-ipc.o.d -MQ fsmonitor-ipc.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fsmonitor-ipc.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fsck.o -c -MF ./.depend/fsck.o.d -MQ fsck.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fsck.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fsmonitor-settings.o -c -MF ./.depend/fsmonitor-settings.o.d -MQ fsmonitor-settings.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fsmonitor-settings.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o fetch-pack.o -c -MF ./.depend/fetch-pack.o.d -MQ fetch-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  fetch-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o gettext.o -c -MF ./.depend/gettext.o.d -MQ gettext.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -DGIT_LOCALE_PATH='"share/locale"' gettext.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o gpg-interface.o -c -MF ./.depend/gpg-interface.o.d -MQ gpg-interface.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  gpg-interface.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o hash-lookup.o -c -MF ./.depend/hash-lookup.o.d -MQ hash-lookup.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  hash-lookup.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o graph.o -c -MF ./.depend/graph.o.d -MQ graph.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  graph.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
/bin/sh ./generate-cmdlist.sh \
	 \
	command-list.txt >command-list.h
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o hex.o -c -MF ./.depend/hex.o.d -MQ hex.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  hex.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o hashmap.o -c -MF ./.depend/hashmap.o.d -MQ hashmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  hashmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o grep.o -c -MF ./.depend/grep.o.d -MQ grep.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  grep.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o hook.o -c -MF ./.depend/hook.o.d -MQ hook.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  hook.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o json-writer.o -c -MF ./.depend/json-writer.o.d -MQ json-writer.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  json-writer.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ident.o -c -MF ./.depend/ident.o.d -MQ ident.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ident.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o levenshtein.o -c -MF ./.depend/levenshtein.o.d -MQ levenshtein.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  levenshtein.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o line-range.o -c -MF ./.depend/line-range.o.d -MQ line-range.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  line-range.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o diff.o -c -MF ./.depend/diff.o.d -MQ diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o kwset.o -c -MF ./.depend/kwset.o.d -MQ kwset.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  kwset.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o linear-assignment.o -c -MF ./.depend/linear-assignment.o.d -MQ linear-assignment.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  linear-assignment.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o list-objects-filter-options.o -c -MF ./.depend/list-objects-filter-options.o.d -MQ list-objects-filter-options.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  list-objects-filter-options.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o line-log.o -c -MF ./.depend/line-log.o.d -MQ line-log.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  line-log.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o list-objects.o -c -MF ./.depend/list-objects.o.d -MQ list-objects.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  list-objects.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o list-objects-filter.o -c -MF ./.depend/list-objects-filter.o.d -MQ list-objects-filter.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  list-objects-filter.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o lockfile.o -c -MF ./.depend/lockfile.o.d -MQ lockfile.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  lockfile.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ll-merge.o -c -MF ./.depend/ll-merge.o.d -MQ ll-merge.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ll-merge.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ls-refs.o -c -MF ./.depend/ls-refs.o.d -MQ ls-refs.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ls-refs.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o mailmap.o -c -MF ./.depend/mailmap.o.d -MQ mailmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  mailmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o match-trees.o -c -MF ./.depend/match-trees.o.d -MQ match-trees.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  match-trees.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o mem-pool.o -c -MF ./.depend/mem-pool.o.d -MQ mem-pool.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  mem-pool.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o merge-blobs.o -c -MF ./.depend/merge-blobs.o.d -MQ merge-blobs.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  merge-blobs.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o log-tree.o -c -MF ./.depend/log-tree.o.d -MQ log-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  log-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o merge-ort-wrappers.o -c -MF ./.depend/merge-ort-wrappers.o.d -MQ merge-ort-wrappers.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  merge-ort-wrappers.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o merge.o -c -MF ./.depend/merge.o.d -MQ merge.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  merge.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o mailinfo.o -c -MF ./.depend/mailinfo.o.d -MQ mailinfo.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  mailinfo.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o name-hash.o -c -MF ./.depend/name-hash.o.d -MQ name-hash.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  name-hash.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o negotiator/default.o -c -MF negotiator/.depend/default.o.d -MQ negotiator/default.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  negotiator/default.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o negotiator/noop.o -c -MF negotiator/.depend/noop.o.d -MQ negotiator/noop.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  negotiator/noop.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o negotiator/skipping.o -c -MF negotiator/.depend/skipping.o.d -MQ negotiator/skipping.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  negotiator/skipping.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o midx.o -c -MF ./.depend/midx.o.d -MQ midx.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  midx.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o notes-cache.o -c -MF ./.depend/notes-cache.o.d -MQ notes-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  notes-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o notes-utils.o -c -MF ./.depend/notes-utils.o.d -MQ notes-utils.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  notes-utils.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o merge-recursive.o -c -MF ./.depend/merge-recursive.o.d -MQ merge-recursive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  merge-recursive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o notes-merge.o -c -MF ./.depend/notes-merge.o.d -MQ notes-merge.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  notes-merge.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o notes.o -c -MF ./.depend/notes.o.d -MQ notes.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  notes.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o merge-ort.o -c -MF ./.depend/merge-ort.o.d -MQ merge-ort.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  merge-ort.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oid-array.o -c -MF ./.depend/oid-array.o.d -MQ oid-array.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oid-array.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oidmap.o -c -MF ./.depend/oidmap.o.d -MQ oidmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oidmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o object.o -c -MF ./.depend/object.o.d -MQ object.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  object.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oidtree.o -c -MF ./.depend/oidtree.o.d -MQ oidtree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oidtree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o object-name.o -c -MF ./.depend/object-name.o.d -MQ object-name.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  object-name.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o oidset.o -c -MF ./.depend/oidset.o.d -MQ oidset.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  oidset.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o object-file.o -c -MF ./.depend/object-file.o.d -MQ object-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  object-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-check.o -c -MF ./.depend/pack-check.o.d -MQ pack-check.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-check.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-mtimes.o -c -MF ./.depend/pack-mtimes.o.d -MQ pack-mtimes.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-mtimes.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-objects.o -c -MF ./.depend/pack-objects.o.d -MQ pack-objects.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-objects.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-bitmap-write.o -c -MF ./.depend/pack-bitmap-write.o.d -MQ pack-bitmap-write.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-bitmap-write.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-revindex.o -c -MF ./.depend/pack-revindex.o.d -MQ pack-revindex.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-revindex.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pager.o -c -MF ./.depend/pager.o.d -MQ pager.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -DPAGER_ENV='"LESS=FRX LV=-c"' pager.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-write.o -c -MF ./.depend/pack-write.o.d -MQ pack-write.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-write.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o parallel-checkout.o -c -MF ./.depend/parallel-checkout.o.d -MQ parallel-checkout.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  parallel-checkout.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o parse-options-cb.o -c -MF ./.depend/parse-options-cb.o.d -MQ parse-options-cb.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  parse-options-cb.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o patch-delta.o -c -MF ./.depend/patch-delta.o.d -MQ patch-delta.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  patch-delta.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pack-bitmap.o -c -MF ./.depend/pack-bitmap.o.d -MQ pack-bitmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pack-bitmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o patch-ids.o -c -MF ./.depend/patch-ids.o.d -MQ patch-ids.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  patch-ids.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o parse-options.o -c -MF ./.depend/parse-options.o.d -MQ parse-options.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  parse-options.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o packfile.o -c -MF ./.depend/packfile.o.d -MQ packfile.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  packfile.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pathspec.o -c -MF ./.depend/pathspec.o.d -MQ pathspec.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pathspec.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o path.o -c -MF ./.depend/path.o.d -MQ path.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  path.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o preload-index.o -c -MF ./.depend/preload-index.o.d -MQ preload-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  preload-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pkt-line.o -c -MF ./.depend/pkt-line.o.d -MQ pkt-line.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pkt-line.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o prio-queue.o -c -MF ./.depend/prio-queue.o.d -MQ prio-queue.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  prio-queue.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o progress.o -c -MF ./.depend/progress.o.d -MQ progress.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  progress.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o prompt.o -c -MF ./.depend/prompt.o.d -MQ prompt.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  prompt.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o promisor-remote.o -c -MF ./.depend/promisor-remote.o.d -MQ promisor-remote.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  promisor-remote.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o protocol.o -c -MF ./.depend/protocol.o.d -MQ protocol.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  protocol.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o protocol-caps.o -c -MF ./.depend/protocol-caps.o.d -MQ protocol-caps.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  protocol-caps.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o prune-packed.o -c -MF ./.depend/prune-packed.o.d -MQ prune-packed.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  prune-packed.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reachable.o -c -MF ./.depend/reachable.o.d -MQ reachable.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reachable.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o quote.o -c -MF ./.depend/quote.o.d -MQ quote.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  quote.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o range-diff.o -c -MF ./.depend/range-diff.o.d -MQ range-diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  range-diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o rebase.o -c -MF ./.depend/rebase.o.d -MQ rebase.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  rebase.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o pretty.o -c -MF ./.depend/pretty.o.d -MQ pretty.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  pretty.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o rebase-interactive.o -c -MF ./.depend/rebase-interactive.o.d -MQ rebase-interactive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  rebase-interactive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reflog-walk.o -c -MF ./.depend/reflog-walk.o.d -MQ reflog-walk.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reflog-walk.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reflog.o -c -MF ./.depend/reflog.o.d -MQ reflog.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reflog.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs/debug.o -c -MF refs/.depend/debug.o.d -MQ refs/debug.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs/debug.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ref-filter.o -c -MF ./.depend/ref-filter.o.d -MQ ref-filter.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ref-filter.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o read-cache.o -c -MF ./.depend/read-cache.o.d -MQ read-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  read-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs/iterator.o -c -MF refs/.depend/iterator.o.d -MQ refs/iterator.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs/iterator.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs.o -c -MF ./.depend/refs.o.d -MQ refs.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refspec.o -c -MF ./.depend/refspec.o.d -MQ refspec.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refspec.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs/ref-cache.o -c -MF refs/.depend/ref-cache.o.d -MQ refs/ref-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs/ref-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs/packed-backend.o -c -MF refs/.depend/packed-backend.o.d -MQ refs/packed-backend.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs/packed-backend.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o refs/files-backend.o -c -MF refs/.depend/files-backend.o.d -MQ refs/files-backend.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  refs/files-backend.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o replace-object.o -c -MF ./.depend/replace-object.o.d -MQ replace-object.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  replace-object.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o repo-settings.o -c -MF ./.depend/repo-settings.o.d -MQ repo-settings.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  repo-settings.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o repository.o -c -MF ./.depend/repository.o.d -MQ repository.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  repository.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reset.o -c -MF ./.depend/reset.o.d -MQ reset.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reset.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o resolve-undo.o -c -MF ./.depend/resolve-undo.o.d -MQ resolve-undo.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  resolve-undo.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o rerere.o -c -MF ./.depend/rerere.o.d -MQ rerere.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  rerere.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o send-pack.o -c -MF ./.depend/send-pack.o.d -MQ send-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  send-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o remote.o -c -MF ./.depend/remote.o.d -MQ remote.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  remote.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o run-command.o -c -MF ./.depend/run-command.o.d -MQ run-command.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  run-command.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o serve.o -c -MF ./.depend/serve.o.d -MQ serve.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  serve.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o server-info.o -c -MF ./.depend/server-info.o.d -MQ server-info.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  server-info.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o setup.o -c -MF ./.depend/setup.o.d -MQ setup.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  setup.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o shallow.o -c -MF ./.depend/shallow.o.d -MQ shallow.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  shallow.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sigchain.o -c -MF ./.depend/sigchain.o.d -MQ sigchain.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sigchain.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sideband.o -c -MF ./.depend/sideband.o.d -MQ sideband.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sideband.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o revision.o -c -MF ./.depend/revision.o.d -MQ revision.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  revision.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sparse-index.o -c -MF ./.depend/sparse-index.o.d -MQ sparse-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sparse-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o split-index.o -c -MF ./.depend/split-index.o.d -MQ split-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  split-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o stable-qsort.o -c -MF ./.depend/stable-qsort.o.d -MQ stable-qsort.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  stable-qsort.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o streaming.o -c -MF ./.depend/streaming.o.d -MQ streaming.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  streaming.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o string-list.o -c -MF ./.depend/string-list.o.d -MQ string-list.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  string-list.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o strmap.o -c -MF ./.depend/strmap.o.d -MQ strmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  strmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o strvec.o -c -MF ./.depend/strvec.o.d -MQ strvec.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  strvec.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sub-process.o -c -MF ./.depend/sub-process.o.d -MQ sub-process.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sub-process.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o strbuf.o -c -MF ./.depend/strbuf.o.d -MQ strbuf.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  strbuf.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o submodule-config.o -c -MF ./.depend/submodule-config.o.d -MQ submodule-config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  submodule-config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o symlinks.o -c -MF ./.depend/symlinks.o.d -MQ symlinks.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  symlinks.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tag.o -c -MF ./.depend/tag.o.d -MQ tag.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tag.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o thread-utils.o -c -MF ./.depend/thread-utils.o.d -MQ thread-utils.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  thread-utils.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tempfile.o -c -MF ./.depend/tempfile.o.d -MQ tempfile.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tempfile.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tmp-objdir.o -c -MF ./.depend/tmp-objdir.o.d -MQ tmp-objdir.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tmp-objdir.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o submodule.o -c -MF ./.depend/submodule.o.d -MQ submodule.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  submodule.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace.o -c -MF ./.depend/trace.o.d -MQ trace.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_cfg.o -c -MF trace2/.depend/tr2_cfg.o.d -MQ trace2/tr2_cfg.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_cfg.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_cmd_name.o -c -MF trace2/.depend/tr2_cmd_name.o.d -MQ trace2/tr2_cmd_name.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_cmd_name.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_ctr.o -c -MF trace2/.depend/tr2_ctr.o.d -MQ trace2/tr2_ctr.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_ctr.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2.o -c -MF ./.depend/trace2.o.d -MQ trace2.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_sid.o -c -MF trace2/.depend/tr2_sid.o.d -MQ trace2/tr2_sid.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_sid.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_dst.o -c -MF trace2/.depend/tr2_dst.o.d -MQ trace2/tr2_dst.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_dst.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_sysenv.o -c -MF trace2/.depend/tr2_sysenv.o.d -MQ trace2/tr2_sysenv.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_sysenv.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tbuf.o -c -MF trace2/.depend/tr2_tbuf.o.d -MQ trace2/tr2_tbuf.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tbuf.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tgt_normal.o -c -MF trace2/.depend/tr2_tgt_normal.o.d -MQ trace2/tr2_tgt_normal.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tgt_normal.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tgt_event.o -c -MF trace2/.depend/tr2_tgt_event.o.d -MQ trace2/tr2_tgt_event.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tgt_event.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sequencer.o -c -MF ./.depend/sequencer.o.d -MQ sequencer.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sequencer.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tgt_perf.o -c -MF trace2/.depend/tr2_tgt_perf.o.d -MQ trace2/tr2_tgt_perf.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tgt_perf.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tls.o -c -MF trace2/.depend/tr2_tls.o.d -MQ trace2/tr2_tls.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tls.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trace2/tr2_tmr.o -c -MF trace2/.depend/tr2_tmr.o.d -MQ trace2/tr2_tmr.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trace2/tr2_tmr.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tree-diff.o -c -MF ./.depend/tree-diff.o.d -MQ tree-diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tree-diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o trailer.o -c -MF ./.depend/trailer.o.d -MQ trailer.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  trailer.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o transport-helper.o -c -MF ./.depend/transport-helper.o.d -MQ transport-helper.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  transport-helper.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tree.o -c -MF ./.depend/tree.o.d -MQ tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o transport.o -c -MF ./.depend/transport.o.d -MQ transport.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  transport.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o tree-walk.o -c -MF ./.depend/tree-walk.o.d -MQ tree-walk.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  tree-walk.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o url.o -c -MF ./.depend/url.o.d -MQ url.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  url.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o usage.o -c -MF ./.depend/usage.o.d -MQ usage.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  usage.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o urlmatch.o -c -MF ./.depend/urlmatch.o.d -MQ urlmatch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  urlmatch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o userdiff.o -c -MF ./.depend/userdiff.o.d -MQ userdiff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  userdiff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o varint.o -c -MF ./.depend/varint.o.d -MQ varint.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  varint.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o upload-pack.o -c -MF ./.depend/upload-pack.o.d -MQ upload-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  upload-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o versioncmp.o -c -MF ./.depend/versioncmp.o.d -MQ versioncmp.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  versioncmp.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o walker.o -c -MF ./.depend/walker.o.d -MQ walker.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  walker.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o utf8.o -c -MF ./.depend/utf8.o.d -MQ utf8.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  utf8.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o wildmatch.o -c -MF ./.depend/wildmatch.o.d -MQ wildmatch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  wildmatch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o unpack-trees.o -c -MF ./.depend/unpack-trees.o.d -MQ unpack-trees.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  unpack-trees.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o write-or-die.o -c -MF ./.depend/write-or-die.o.d -MQ write-or-die.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  write-or-die.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o worktree.o -c -MF ./.depend/worktree.o.d -MQ worktree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  worktree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o wrapper.o -c -MF ./.depend/wrapper.o.d -MQ wrapper.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  wrapper.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o ws.o -c -MF ./.depend/ws.o.d -MQ ws.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  ws.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o zlib.o -c -MF ./.depend/zlib.o.d -MQ zlib.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  zlib.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o unix-socket.o -c -MF ./.depend/unix-socket.o.d -MQ unix-socket.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  unix-socket.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff-interface.o -c -MF ./.depend/xdiff-interface.o.d -MQ xdiff-interface.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff-interface.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o unix-stream-server.o -c -MF ./.depend/unix-stream-server.o.d -MQ unix-stream-server.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  unix-stream-server.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/simple-ipc/ipc-shared.o -c -MF compat/simple-ipc/.depend/ipc-shared.o.d -MQ compat/simple-ipc/ipc-shared.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/simple-ipc/ipc-shared.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sha1dc_git.o -c -MF ./.depend/sha1dc_git.o.d -MQ sha1dc_git.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sha1dc_git.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/simple-ipc/ipc-unix-socket.o -c -MF compat/simple-ipc/.depend/ipc-unix-socket.o.d -MQ compat/simple-ipc/ipc-unix-socket.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/simple-ipc/ipc-unix-socket.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sha1dc/ubc_check.o -c -MF sha1dc/.depend/ubc_check.o.d -MQ sha1dc/ubc_check.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sha1dc/ubc_check.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/linux/procinfo.o -c -MF compat/linux/.depend/procinfo.o.d -MQ compat/linux/procinfo.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/linux/procinfo.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/fopen.o -c -MF compat/.depend/fopen.o.d -MQ compat/fopen.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/fopen.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sha256/block/sha256.o -c -MF sha256/block/.depend/sha256.o.d -MQ sha256/block/sha256.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sha256/block/sha256.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/strlcpy.o -c -MF compat/.depend/strlcpy.o.d -MQ compat/strlcpy.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/strlcpy.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o compat/qsort_s.o -c -MF compat/.depend/qsort_s.o.d -MQ compat/qsort_s.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  compat/qsort_s.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sha1dc/sha1.o -c -MF sha1dc/.depend/sha1.o.d -MQ sha1dc/sha1.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sha1dc/sha1.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o wt-status.o -c -MF ./.depend/wt-status.o.d -MQ wt-status.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  wt-status.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xemit.o -c -MF xdiff/.depend/xemit.o.d -MQ xdiff/xemit.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xemit.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xhistogram.o -c -MF xdiff/.depend/xhistogram.o.d -MQ xdiff/xhistogram.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xhistogram.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xdiffi.o -c -MF xdiff/.depend/xdiffi.o.d -MQ xdiff/xdiffi.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xdiffi.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xpatience.o -c -MF xdiff/.depend/xpatience.o.d -MQ xdiff/xpatience.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xpatience.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xprepare.o -c -MF xdiff/.depend/xprepare.o.d -MQ xdiff/xprepare.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xprepare.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/error.o -c -MF reftable/.depend/error.o.d -MQ reftable/error.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/error.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/basics.o -c -MF reftable/.depend/basics.o.d -MQ reftable/basics.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/basics.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xmerge.o -c -MF xdiff/.depend/xmerge.o.d -MQ xdiff/xmerge.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xmerge.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/blocksource.o -c -MF reftable/.depend/blocksource.o.d -MQ reftable/blocksource.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/blocksource.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o xdiff/xutils.o -c -MF xdiff/.depend/xutils.o.d -MQ xdiff/xutils.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  xdiff/xutils.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/iter.o -c -MF reftable/.depend/iter.o.d -MQ reftable/iter.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/iter.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/block.o -c -MF reftable/.depend/block.o.d -MQ reftable/block.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/block.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/publicbasics.o -c -MF reftable/.depend/publicbasics.o.d -MQ reftable/publicbasics.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/publicbasics.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/pq.o -c -MF reftable/.depend/pq.o.d -MQ reftable/pq.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/pq.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/merged.o -c -MF reftable/.depend/merged.o.d -MQ reftable/merged.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/merged.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/generic.o -c -MF reftable/.depend/generic.o.d -MQ reftable/generic.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/generic.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/refname.o -c -MF reftable/.depend/refname.o.d -MQ reftable/refname.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/refname.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/reader.o -c -MF reftable/.depend/reader.o.d -MQ reftable/reader.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/reader.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/tree.o -c -MF reftable/.depend/tree.o.d -MQ reftable/tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/record.o -c -MF reftable/.depend/record.o.d -MQ reftable/record.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/record.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/writer.o -c -MF reftable/.depend/writer.o.d -MQ reftable/writer.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/writer.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o http-backend.o -c -MF ./.depend/http-backend.o.d -MQ http-backend.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  http-backend.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/stack.o -c -MF reftable/.depend/stack.o.d -MQ reftable/stack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/stack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o sh-i18n--envsubst.o -c -MF ./.depend/sh-i18n--envsubst.o.d -MQ sh-i18n--envsubst.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  sh-i18n--envsubst.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o shell.o -c -MF ./.depend/shell.o.d -MQ shell.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  shell.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o imap-send.o -c -MF ./.depend/imap-send.o.d -MQ imap-send.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  imap-send.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o http-fetch.o -c -MF ./.depend/http-fetch.o.d -MQ http-fetch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  http-fetch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o http-walker.o -c -MF ./.depend/http-walker.o.d -MQ http-walker.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  http-walker.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new script parameters
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new perl-specific parameters
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
    * new Python interpreter location
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-instaweb.sh >git-instaweb+ && \
chmod +x git-instaweb+ && \
mv git-instaweb+ git-instaweb
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o git.o -c -MF ./.depend/git.o.d -MQ git.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' '-DGIT_HTML_PATH="share/doc/git/html"' '-DGIT_MAN_PATH="share/man"' '-DGIT_INFO_PATH="share/info"' git.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o http-push.o -c -MF ./.depend/http-push.o.d -MQ http-push.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  http-push.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o remote-curl.o -c -MF ./.depend/remote-curl.o.d -MQ remote-curl.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  remote-curl.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o http.o -c -MF ./.depend/http.o.d -MQ http.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  http.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/annotate.o -c -MF builtin/.depend/annotate.o.d -MQ builtin/annotate.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/annotate.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/apply.o -c -MF builtin/.depend/apply.o.d -MQ builtin/apply.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/apply.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/add.o -c -MF builtin/.depend/add.o.d -MQ builtin/add.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/add.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/archive.o -c -MF builtin/.depend/archive.o.d -MQ builtin/archive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/archive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/blame.o -c -MF builtin/.depend/blame.o.d -MQ builtin/blame.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/blame.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
/bin/sh ./generate-hooklist.sh >hook-list.h
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/bisect--helper.o -c -MF builtin/.depend/bisect--helper.o.d -MQ builtin/bisect--helper.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/bisect--helper.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/bundle.o -c -MF builtin/.depend/bundle.o.d -MQ builtin/bundle.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/bundle.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/branch.o -c -MF builtin/.depend/branch.o.d -MQ builtin/branch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/branch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/check-attr.o -c -MF builtin/.depend/check-attr.o.d -MQ builtin/check-attr.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/check-attr.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/am.o -c -MF builtin/.depend/am.o.d -MQ builtin/am.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/am.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/check-ignore.o -c -MF builtin/.depend/check-ignore.o.d -MQ builtin/check-ignore.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/check-ignore.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/check-mailmap.o -c -MF builtin/.depend/check-mailmap.o.d -MQ builtin/check-mailmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/check-mailmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/check-ref-format.o -c -MF builtin/.depend/check-ref-format.o.d -MQ builtin/check-ref-format.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/check-ref-format.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/checkout--worker.o -c -MF builtin/.depend/checkout--worker.o.d -MQ builtin/checkout--worker.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/checkout--worker.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/cat-file.o -c -MF builtin/.depend/cat-file.o.d -MQ builtin/cat-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/cat-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/checkout-index.o -c -MF builtin/.depend/checkout-index.o.d -MQ builtin/checkout-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/checkout-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/column.o -c -MF builtin/.depend/column.o.d -MQ builtin/column.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/column.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/commit-graph.o -c -MF builtin/.depend/commit-graph.o.d -MQ builtin/commit-graph.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/commit-graph.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/clean.o -c -MF builtin/.depend/clean.o.d -MQ builtin/clean.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/clean.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/commit-tree.o -c -MF builtin/.depend/commit-tree.o.d -MQ builtin/commit-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/commit-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/clone.o -c -MF builtin/.depend/clone.o.d -MQ builtin/clone.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/clone.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/checkout.o -c -MF builtin/.depend/checkout.o.d -MQ builtin/checkout.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/checkout.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/count-objects.o -c -MF builtin/.depend/count-objects.o.d -MQ builtin/count-objects.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/count-objects.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/credential-cache--daemon.o -c -MF builtin/.depend/credential-cache--daemon.o.d -MQ builtin/credential-cache--daemon.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/credential-cache--daemon.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/config.o -c -MF builtin/.depend/config.o.d -MQ builtin/config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/credential-cache.o -c -MF builtin/.depend/credential-cache.o.d -MQ builtin/credential-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/credential-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/credential.o -c -MF builtin/.depend/credential.o.d -MQ builtin/credential.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/credential.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/credential-store.o -c -MF builtin/.depend/credential-store.o.d -MQ builtin/credential-store.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/credential-store.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/diagnose.o -c -MF builtin/.depend/diagnose.o.d -MQ builtin/diagnose.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/diagnose.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/diff-files.o -c -MF builtin/.depend/diff-files.o.d -MQ builtin/diff-files.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/diff-files.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/diff-index.o -c -MF builtin/.depend/diff-index.o.d -MQ builtin/diff-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/diff-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/commit.o -c -MF builtin/.depend/commit.o.d -MQ builtin/commit.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/commit.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/diff-tree.o -c -MF builtin/.depend/diff-tree.o.d -MQ builtin/diff-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/diff-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/describe.o -c -MF builtin/.depend/describe.o.d -MQ builtin/describe.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/describe.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/env--helper.o -c -MF builtin/.depend/env--helper.o.d -MQ builtin/env--helper.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/env--helper.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/diff.o -c -MF builtin/.depend/diff.o.d -MQ builtin/diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fetch-pack.o -c -MF builtin/.depend/fetch-pack.o.d -MQ builtin/fetch-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fetch-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/difftool.o -c -MF builtin/.depend/difftool.o.d -MQ builtin/difftool.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/difftool.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fmt-merge-msg.o -c -MF builtin/.depend/fmt-merge-msg.o.d -MQ builtin/fmt-merge-msg.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fmt-merge-msg.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/for-each-ref.o -c -MF builtin/.depend/for-each-ref.o.d -MQ builtin/for-each-ref.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/for-each-ref.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fast-export.o -c -MF builtin/.depend/fast-export.o.d -MQ builtin/fast-export.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fast-export.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/for-each-repo.o -c -MF builtin/.depend/for-each-repo.o.d -MQ builtin/for-each-repo.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/for-each-repo.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fsmonitor--daemon.o -c -MF builtin/.depend/fsmonitor--daemon.o.d -MQ builtin/fsmonitor--daemon.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fsmonitor--daemon.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fsck.o -c -MF builtin/.depend/fsck.o.d -MQ builtin/fsck.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fsck.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/get-tar-commit-id.o -c -MF builtin/.depend/get-tar-commit-id.o.d -MQ builtin/get-tar-commit-id.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/get-tar-commit-id.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fetch.o -c -MF builtin/.depend/fetch.o.d -MQ builtin/fetch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fetch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/hash-object.o -c -MF builtin/.depend/hash-object.o.d -MQ builtin/hash-object.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/hash-object.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
/bin/sh ./generate-configlist.sh >config-list.h
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/hook.o -c -MF builtin/.depend/hook.o.d -MQ builtin/hook.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/hook.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/gc.o -c -MF builtin/.depend/gc.o.d -MQ builtin/gc.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/gc.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/fast-import.o -c -MF builtin/.depend/fast-import.o.d -MQ builtin/fast-import.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/fast-import.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/init-db.o -c -MF builtin/.depend/init-db.o.d -MQ builtin/init-db.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -DDEFAULT_GIT_TEMPLATE_DIR='"share/git-core/templates"' builtin/init-db.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/interpret-trailers.o -c -MF builtin/.depend/interpret-trailers.o.d -MQ builtin/interpret-trailers.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/interpret-trailers.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/grep.o -c -MF builtin/.depend/grep.o.d -MQ builtin/grep.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/grep.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/ls-remote.o -c -MF builtin/.depend/ls-remote.o.d -MQ builtin/ls-remote.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/ls-remote.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/ls-tree.o -c -MF builtin/.depend/ls-tree.o.d -MQ builtin/ls-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/ls-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/ls-files.o -c -MF builtin/.depend/ls-files.o.d -MQ builtin/ls-files.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/ls-files.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/index-pack.o -c -MF builtin/.depend/index-pack.o.d -MQ builtin/index-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/index-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/mailinfo.o -c -MF builtin/.depend/mailinfo.o.d -MQ builtin/mailinfo.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/mailinfo.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-base.o -c -MF builtin/.depend/merge-base.o.d -MQ builtin/merge-base.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-base.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/mailsplit.o -c -MF builtin/.depend/mailsplit.o.d -MQ builtin/mailsplit.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/mailsplit.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-file.o -c -MF builtin/.depend/merge-file.o.d -MQ builtin/merge-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-ours.o -c -MF builtin/.depend/merge-ours.o.d -MQ builtin/merge-ours.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-ours.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-index.o -c -MF builtin/.depend/merge-index.o.d -MQ builtin/merge-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-recursive.o -c -MF builtin/.depend/merge-recursive.o.d -MQ builtin/merge-recursive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-recursive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/mktag.o -c -MF builtin/.depend/mktag.o.d -MQ builtin/mktag.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/mktag.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge-tree.o -c -MF builtin/.depend/merge-tree.o.d -MQ builtin/merge-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/log.o -c -MF builtin/.depend/log.o.d -MQ builtin/log.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/log.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/mktree.o -c -MF builtin/.depend/mktree.o.d -MQ builtin/mktree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/mktree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/multi-pack-index.o -c -MF builtin/.depend/multi-pack-index.o.d -MQ builtin/multi-pack-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/multi-pack-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/mv.o -c -MF builtin/.depend/mv.o.d -MQ builtin/mv.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/mv.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/name-rev.o -c -MF builtin/.depend/name-rev.o.d -MQ builtin/name-rev.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/name-rev.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/merge.o -c -MF builtin/.depend/merge.o.d -MQ builtin/merge.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/merge.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/notes.o -c -MF builtin/.depend/notes.o.d -MQ builtin/notes.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/notes.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/pack-refs.o -c -MF builtin/.depend/pack-refs.o.d -MQ builtin/pack-refs.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/pack-refs.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/prune-packed.o -c -MF builtin/.depend/prune-packed.o.d -MQ builtin/prune-packed.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/prune-packed.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/patch-id.o -c -MF builtin/.depend/patch-id.o.d -MQ builtin/patch-id.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/patch-id.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/pack-redundant.o -c -MF builtin/.depend/pack-redundant.o.d -MQ builtin/pack-redundant.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/pack-redundant.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/prune.o -c -MF builtin/.depend/prune.o.d -MQ builtin/prune.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/prune.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/range-diff.o -c -MF builtin/.depend/range-diff.o.d -MQ builtin/range-diff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/range-diff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/pull.o -c -MF builtin/.depend/pull.o.d -MQ builtin/pull.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/pull.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/push.o -c -MF builtin/.depend/push.o.d -MQ builtin/push.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/push.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/read-tree.o -c -MF builtin/.depend/read-tree.o.d -MQ builtin/read-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/read-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/reflog.o -c -MF builtin/.depend/reflog.o.d -MQ builtin/reflog.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/reflog.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/remote-ext.o -c -MF builtin/.depend/remote-ext.o.d -MQ builtin/remote-ext.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/remote-ext.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/remote-fd.o -c -MF builtin/.depend/remote-fd.o.d -MQ builtin/remote-fd.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/remote-fd.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/rebase.o -c -MF builtin/.depend/rebase.o.d -MQ builtin/rebase.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/rebase.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/receive-pack.o -c -MF builtin/.depend/receive-pack.o.d -MQ builtin/receive-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/receive-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/pack-objects.o -c -MF builtin/.depend/pack-objects.o.d -MQ builtin/pack-objects.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/pack-objects.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/rerere.o -c -MF builtin/.depend/rerere.o.d -MQ builtin/rerere.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/rerere.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/replace.o -c -MF builtin/.depend/replace.o.d -MQ builtin/replace.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/replace.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/remote.o -c -MF builtin/.depend/remote.o.d -MQ builtin/remote.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/remote.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/reset.o -c -MF builtin/.depend/reset.o.d -MQ builtin/reset.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/reset.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/repack.o -c -MF builtin/.depend/repack.o.d -MQ builtin/repack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/repack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/revert.o -c -MF builtin/.depend/revert.o.d -MQ builtin/revert.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/revert.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/rev-list.o -c -MF builtin/.depend/rev-list.o.d -MQ builtin/rev-list.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/rev-list.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/rm.o -c -MF builtin/.depend/rm.o.d -MQ builtin/rm.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/rm.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/send-pack.o -c -MF builtin/.depend/send-pack.o.d -MQ builtin/send-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/send-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/shortlog.o -c -MF builtin/.depend/shortlog.o.d -MQ builtin/shortlog.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/shortlog.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/rev-parse.o -c -MF builtin/.depend/rev-parse.o.d -MQ builtin/rev-parse.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/rev-parse.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/show-index.o -c -MF builtin/.depend/show-index.o.d -MQ builtin/show-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/show-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/show-ref.o -c -MF builtin/.depend/show-ref.o.d -MQ builtin/show-ref.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/show-ref.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/stripspace.o -c -MF builtin/.depend/stripspace.o.d -MQ builtin/stripspace.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/stripspace.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/show-branch.o -c -MF builtin/.depend/show-branch.o.d -MQ builtin/show-branch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/show-branch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/symbolic-ref.o -c -MF builtin/.depend/symbolic-ref.o.d -MQ builtin/symbolic-ref.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/symbolic-ref.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/sparse-checkout.o -c -MF builtin/.depend/sparse-checkout.o.d -MQ builtin/sparse-checkout.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/sparse-checkout.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/unpack-file.o -c -MF builtin/.depend/unpack-file.o.d -MQ builtin/unpack-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/unpack-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/stash.o -c -MF builtin/.depend/stash.o.d -MQ builtin/stash.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/stash.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/unpack-objects.o -c -MF builtin/.depend/unpack-objects.o.d -MQ builtin/unpack-objects.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/unpack-objects.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/tag.o -c -MF builtin/.depend/tag.o.d -MQ builtin/tag.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/tag.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/update-server-info.o -c -MF builtin/.depend/update-server-info.o.d -MQ builtin/update-server-info.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/update-server-info.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/upload-archive.o -c -MF builtin/.depend/upload-archive.o.d -MQ builtin/upload-archive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/upload-archive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/update-ref.o -c -MF builtin/.depend/update-ref.o.d -MQ builtin/update-ref.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/update-ref.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/upload-pack.o -c -MF builtin/.depend/upload-pack.o.d -MQ builtin/upload-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/upload-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/var.o -c -MF builtin/.depend/var.o.d -MQ builtin/var.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/var.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/verify-commit.o -c -MF builtin/.depend/verify-commit.o.d -MQ builtin/verify-commit.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/verify-commit.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/verify-pack.o -c -MF builtin/.depend/verify-pack.o.d -MQ builtin/verify-pack.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/verify-pack.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/verify-tag.o -c -MF builtin/.depend/verify-tag.o.d -MQ builtin/verify-tag.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/verify-tag.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/update-index.o -c -MF builtin/.depend/update-index.o.d -MQ builtin/update-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/update-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-mergetool--lib.sh >git-mergetool--lib+ && \
mv git-mergetool--lib+ git-mergetool--lib
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-sh-i18n.sh >git-sh-i18n+ && \
mv git-sh-i18n+ git-sh-i18n
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-sh-setup.sh >git-sh-setup+ && \
mv git-sh-setup+ git-sh-setup
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/write-tree.o -c -MF builtin/.depend/write-tree.o.d -MQ builtin/write-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/write-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/submodule--helper.o -c -MF builtin/.depend/submodule--helper.o.d -MQ builtin/submodule--helper.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/submodule--helper.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o scalar.o -c -MF ./.depend/scalar.o.d -MQ scalar.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  scalar.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/worktree.o -c -MF builtin/.depend/worktree.o.d -MQ builtin/worktree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/worktree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f xdiff/lib.a && ar rcs xdiff/lib.a xdiff/xdiffi.o xdiff/xemit.o xdiff/xhistogram.o xdiff/xmerge.o xdiff/xpatience.o xdiff/xprepare.o xdiff/xutils.o
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f reftable/libreftable.a && ar rcs reftable/libreftable.a reftable/basics.o reftable/error.o reftable/block.o reftable/blocksource.o reftable/iter.o reftable/publicbasics.o reftable/merged.o reftable/pq.o reftable/reader.o reftable/record.o reftable/refname.o reftable/generic.o reftable/stack.o reftable/tree.o reftable/writer.o
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-bisect.sh >git-bisect+ && \
chmod +x git-bisect+ && \
mv git-bisect+ git-bisect
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-difftool--helper.sh >git-difftool--helper+ && \
chmod +x git-difftool--helper+ && \
mv git-difftool--helper+ git-difftool--helper
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-filter-branch.sh >git-filter-branch+ && \
chmod +x git-filter-branch+ && \
mv git-filter-branch+ git-filter-branch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-merge-octopus.sh >git-merge-octopus+ && \
chmod +x git-merge-octopus+ && \
mv git-merge-octopus+ git-merge-octopus
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-merge-one-file.sh >git-merge-one-file+ && \
chmod +x git-merge-one-file+ && \
mv git-merge-one-file+ git-merge-one-file
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-merge-resolve.sh >git-merge-resolve+ && \
chmod +x git-merge-resolve+ && \
mv git-merge-resolve+ git-merge-resolve
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-mergetool.sh >git-mergetool+ && \
chmod +x git-mergetool+ && \
mv git-mergetool+ git-mergetool
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o version.o -c -MF ./.depend/version.o.d -MQ version.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' '-DGIT_VERSION="2.39.0"' '-DGIT_USER_AGENT="git/2.39.0"' '-DGIT_BUILT_FROM_COMMIT=""' version.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-quiltimport.sh >git-quiltimport+ && \
chmod +x git-quiltimport+ && \
mv git-quiltimport+ git-quiltimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-request-pull.sh >git-request-pull+ && \
chmod +x git-request-pull+ && \
mv git-request-pull+ git-request-pull
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-submodule.sh >git-submodule+ && \
chmod +x git-submodule+ && \
mv git-submodule+ git-submodule
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' -e 's|@SHELL_PATH@|/bin/sh|' -e 's|@@DIFF@@|diff|' -e 's|@@LOCALEDIR@@|/usr/share/locale|g' -e 's/@@USE_GETTEXT_SCHEME@@//g' -e '/^# @@BROKEN_PATH_FIX@@$/d' -e 's|@@GITWEBDIR@@|/usr/share/gitweb|g' -e 's|@@PERL@@|/usr/bin/perl|g' -e 's|@@PAGER_ENV@@|LESS=FRX LV=-c|g' git-web--browse.sh >git-web--browse+ && \
chmod +x git-web--browse+ && \
mv git-web--browse+ git-web--browse
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
INSTLIBDIR='/usr/share/perl5' && \
INSTLIBDIR_EXTRA='' && \
INSTLIBDIR="$INSTLIBDIR${INSTLIBDIR_EXTRA:+:$INSTLIBDIR_EXTRA}" && \
sed -e 's=@@PATHSEP@@=:=g' \
    -e "s=@@INSTLIBDIR@@=$INSTLIBDIR=g" \
    -e 's=@@PERLLIBDIR_REL@@=share/perl5=g' \
    -e 's=@@GITEXECDIR_REL@@=lib/git-core=g' \
    -e 's=@@LOCALEDIR_REL@@=share/locale=g' \
    perl/header_templates/fixed_prefix.template.pl >GIT-PERL-HEADER+ && \
mv GIT-PERL-HEADER+ GIT-PERL-HEADER
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1s|#!.*python|#!/usr/bin/python3|' \
    git-p4.py >git-p4+ && \
chmod +x git-p4+ && \
mv git-p4+ git-p4
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o attr.o -c -MF ./.depend/attr.o.d -MQ attr.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -DETC_GITATTRIBUTES='"/etc/gitattributes"' attr.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-add--interactive.perl >git-add--interactive+ && \
chmod +x git-add--interactive+ && \
mv git-add--interactive+ git-add--interactive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-archimport.perl >git-archimport+ && \
chmod +x git-archimport+ && \
mv git-archimport+ git-archimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsexportcommit.perl >git-cvsexportcommit+ && \
chmod +x git-cvsexportcommit+ && \
mv git-cvsexportcommit+ git-cvsexportcommit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsimport.perl >git-cvsimport+ && \
chmod +x git-cvsimport+ && \
mv git-cvsimport+ git-cvsimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsserver.perl >git-cvsserver+ && \
chmod +x git-cvsserver+ && \
mv git-cvsserver+ git-cvsserver
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-send-email.perl >git-send-email+ && \
chmod +x git-send-email+ && \
mv git-send-email+ git-send-email
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-svn.perl >git-svn+ && \
chmod +x git-svn+ && \
mv git-svn+ git-svn
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o help.o -c -MF ./.depend/help.o.d -MQ help.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  help.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/bugreport.o -c -MF builtin/.depend/bugreport.o.d -MQ builtin/bugreport.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  builtin/bugreport.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f libgit.a && ar rcs libgit.a abspath.o add-interactive.o add-patch.o advice.o alias.o alloc.o apply.o archive-tar.o archive-zip.o archive.o attr.o base85.o bisect.o blame.o blob.o bloom.o branch.o bulk-checkin.o bundle-uri.o bundle.o cache-tree.o cbtree.o chdir-notify.o checkout.o chunk-format.o color.o column.o combine-diff.o commit-graph.o commit-reach.o commit.o compat/nonblock.o compat/obstack.o compat/terminal.o compat/zlib-uncompress2.o config.o connect.o connected.o convert.o copy.o credential.o csum-file.o ctype.o date.o decorate.o delta-islands.o diagnose.o diff-delta.o diff-merges.o diff-lib.o diff-no-index.o diff.o diffcore-break.o diffcore-delta.o diffcore-order.o diffcore-pickaxe.o diffcore-rename.o diffcore-rotate.o dir-iterator.o dir.o editor.o entry.o environment.o ewah/bitmap.o ewah/ewah_bitmap.o ewah/ewah_io.o ewah/ewah_rlw.o exec-cmd.o fetch-negotiator.o fetch-pack.o fmt-merge-msg.o fsck.o fsmonitor.o fsmonitor-ipc.o fsmonitor-settings.o gettext.o gpg-interface.o graph.o grep.o hash-lookup.o hashmap.o help.o hex.o hook.o ident.o json-writer.o kwset.o levenshtein.o line-log.o line-range.o linear-assignment.o list-objects-filter-options.o list-objects-filter.o list-objects.o ll-merge.o lockfile.o log-tree.o ls-refs.o mailinfo.o mailmap.o match-trees.o mem-pool.o merge-blobs.o merge-ort.o merge-ort-wrappers.o merge-recursive.o merge.o midx.o name-hash.o negotiator/default.o negotiator/noop.o negotiator/skipping.o notes-cache.o notes-merge.o notes-utils.o notes.o object-file.o object-name.o object.o oid-array.o oidmap.o oidset.o oidtree.o pack-bitmap-write.o pack-bitmap.o pack-check.o pack-mtimes.o pack-objects.o pack-revindex.o pack-write.o packfile.o pager.o parallel-checkout.o parse-options-cb.o parse-options.o patch-delta.o patch-ids.o path.o pathspec.o pkt-line.o preload-index.o pretty.o prio-queue.o progress.o promisor-remote.o prompt.o protocol.o protocol-caps.o prune-packed.o quote.o range-diff.o reachable.o read-cache.o rebase-interactive.o rebase.o ref-filter.o reflog-walk.o reflog.o refs.o refs/debug.o refs/files-backend.o refs/iterator.o refs/packed-backend.o refs/ref-cache.o refspec.o remote.o replace-object.o repo-settings.o repository.o rerere.o reset.o resolve-undo.o revision.o run-command.o send-pack.o sequencer.o serve.o server-info.o setup.o shallow.o sideband.o sigchain.o sparse-index.o split-index.o stable-qsort.o strbuf.o streaming.o string-list.o strmap.o strvec.o sub-process.o submodule-config.o submodule.o symlinks.o tag.o tempfile.o thread-utils.o tmp-objdir.o trace.o trace2.o trace2/tr2_cfg.o trace2/tr2_cmd_name.o trace2/tr2_ctr.o trace2/tr2_dst.o trace2/tr2_sid.o trace2/tr2_sysenv.o trace2/tr2_tbuf.o trace2/tr2_tgt_event.o trace2/tr2_tgt_normal.o trace2/tr2_tgt_perf.o trace2/tr2_tls.o trace2/tr2_tmr.o trailer.o transport-helper.o transport.o tree-diff.o tree-walk.o tree.o unpack-trees.o upload-pack.o url.o urlmatch.o usage.o userdiff.o utf8.o varint.o version.o versioncmp.o walker.o wildmatch.o worktree.o wrapper.o write-or-die.o ws.o wt-status.o xdiff-interface.o zlib.o unix-socket.o unix-stream-server.o compat/simple-ipc/ipc-shared.o compat/simple-ipc/ipc-unix-socket.o sha1dc_git.o sha1dc/sha1.o sha1dc/ubc_check.o sha256/block/sha256.o compat/linux/procinfo.o compat/fopen.o compat/strlcpy.o compat/qsort_s.o
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o builtin/help.o -c -MF builtin/.depend/help.o.d -MQ builtin/help.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' '-DGIT_HTML_PATH="share/doc/git/html"' '-DGIT_MAN_PATH="share/man"' '-DGIT_INFO_PATH="share/info"' builtin/help.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-daemon -Wl,-z,relro  daemon.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-http-backend -Wl,-z,relro  http-backend.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-imap-send -Wl,-z,relro  imap-send.o http.o common-main.o \
	-lcurl    libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-sh-i18n--envsubst -Wl,-z,relro  sh-i18n--envsubst.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-shell -Wl,-z,relro  shell.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-http-fetch -Wl,-z,relro  http.o http-walker.o http-fetch.o common-main.o \
	-lcurl libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-http-push -Wl,-z,relro  http.o http-push.o common-main.o \
	-lcurl -lexpat libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git-remote-http -Wl,-z,relro  remote-curl.o http.o http-walker.o common-main.o \
	-lcurl -lexpat libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote-https && \
ln git-remote-http git-remote-https 2>/dev/null || \
ln -s git-remote-http git-remote-https 2>/dev/null || \
cp git-remote-http git-remote-https
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote-ftp && \
ln git-remote-http git-remote-ftp 2>/dev/null || \
ln -s git-remote-http git-remote-ftp 2>/dev/null || \
cp git-remote-http git-remote-ftp
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote-ftps && \
ln git-remote-http git-remote-ftps 2>/dev/null || \
ln -s git-remote-http git-remote-ftps 2>/dev/null || \
cp git-remote-http git-remote-ftps
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o scalar -Wl,-z,relro  \
	scalar.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o git -Wl,-z,relro  \
	git.o builtin/add.o builtin/am.o builtin/annotate.o builtin/apply.o builtin/archive.o builtin/bisect--helper.o builtin/blame.o builtin/branch.o builtin/bugreport.o builtin/bundle.o builtin/cat-file.o builtin/check-attr.o builtin/check-ignore.o builtin/check-mailmap.o builtin/check-ref-format.o builtin/checkout--worker.o builtin/checkout-index.o builtin/checkout.o builtin/clean.o builtin/clone.o builtin/column.o builtin/commit-graph.o builtin/commit-tree.o builtin/commit.o builtin/config.o builtin/count-objects.o builtin/credential-cache--daemon.o builtin/credential-cache.o builtin/credential-store.o builtin/credential.o builtin/describe.o builtin/diagnose.o builtin/diff-files.o builtin/diff-index.o builtin/diff-tree.o builtin/diff.o builtin/difftool.o builtin/env--helper.o builtin/fast-export.o builtin/fast-import.o builtin/fetch-pack.o builtin/fetch.o builtin/fmt-merge-msg.o builtin/for-each-ref.o builtin/for-each-repo.o builtin/fsck.o builtin/fsmonitor--daemon.o builtin/gc.o builtin/get-tar-commit-id.o builtin/grep.o builtin/hash-object.o builtin/help.o builtin/hook.o builtin/index-pack.o builtin/init-db.o builtin/interpret-trailers.o builtin/log.o builtin/ls-files.o builtin/ls-remote.o builtin/ls-tree.o builtin/mailinfo.o builtin/mailsplit.o builtin/merge-base.o builtin/merge-file.o builtin/merge-index.o builtin/merge-ours.o builtin/merge-recursive.o builtin/merge-tree.o builtin/merge.o builtin/mktag.o builtin/mktree.o builtin/multi-pack-index.o builtin/mv.o builtin/name-rev.o builtin/notes.o builtin/pack-objects.o builtin/pack-redundant.o builtin/pack-refs.o builtin/patch-id.o builtin/prune-packed.o builtin/prune.o builtin/pull.o builtin/push.o builtin/range-diff.o builtin/read-tree.o builtin/rebase.o builtin/receive-pack.o builtin/reflog.o builtin/remote-ext.o builtin/remote-fd.o builtin/remote.o builtin/repack.o builtin/replace.o builtin/rerere.o builtin/reset.o builtin/rev-list.o builtin/rev-parse.o builtin/revert.o builtin/rm.o builtin/send-pack.o builtin/shortlog.o builtin/show-branch.o builtin/show-index.o builtin/show-ref.o builtin/sparse-checkout.o builtin/stash.o builtin/stripspace.o builtin/submodule--helper.o builtin/symbolic-ref.o builtin/tag.o builtin/unpack-file.o builtin/unpack-objects.o builtin/update-index.o builtin/update-ref.o builtin/update-server-info.o builtin/upload-archive.o builtin/upload-pack.o builtin/var.o builtin/verify-commit.o builtin/verify-pack.o builtin/verify-tag.o builtin/worktree.o builtin/write-tree.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-add && \
ln git git-add 2>/dev/null || \
ln -s git git-add 2>/dev/null || \
cp git git-add
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-annotate && \
ln git git-annotate 2>/dev/null || \
ln -s git git-annotate 2>/dev/null || \
cp git git-annotate
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-am && \
ln git git-am 2>/dev/null || \
ln -s git git-am 2>/dev/null || \
cp git git-am
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-apply && \
ln git git-apply 2>/dev/null || \
ln -s git git-apply 2>/dev/null || \
cp git git-apply
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-archive && \
ln git git-archive 2>/dev/null || \
ln -s git git-archive 2>/dev/null || \
cp git git-archive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-bisect--helper && \
ln git git-bisect--helper 2>/dev/null || \
ln -s git git-bisect--helper 2>/dev/null || \
cp git git-bisect--helper
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-branch && \
ln git git-branch 2>/dev/null || \
ln -s git git-branch 2>/dev/null || \
cp git git-branch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-blame && \
ln git git-blame 2>/dev/null || \
ln -s git git-blame 2>/dev/null || \
cp git git-blame
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-bugreport && \
ln git git-bugreport 2>/dev/null || \
ln -s git git-bugreport 2>/dev/null || \
cp git git-bugreport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-cat-file && \
ln git git-cat-file 2>/dev/null || \
ln -s git git-cat-file 2>/dev/null || \
cp git git-cat-file
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-bundle && \
ln git git-bundle 2>/dev/null || \
ln -s git git-bundle 2>/dev/null || \
cp git git-bundle
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-check-attr && \
ln git git-check-attr 2>/dev/null || \
ln -s git git-check-attr 2>/dev/null || \
cp git git-check-attr
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-check-mailmap && \
ln git git-check-mailmap 2>/dev/null || \
ln -s git git-check-mailmap 2>/dev/null || \
cp git git-check-mailmap
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-check-ignore && \
ln git git-check-ignore 2>/dev/null || \
ln -s git git-check-ignore 2>/dev/null || \
cp git git-check-ignore
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-check-ref-format && \
ln git git-check-ref-format 2>/dev/null || \
ln -s git git-check-ref-format 2>/dev/null || \
cp git git-check-ref-format
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-checkout--worker && \
ln git git-checkout--worker 2>/dev/null || \
ln -s git git-checkout--worker 2>/dev/null || \
cp git git-checkout--worker
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-checkout-index && \
ln git git-checkout-index 2>/dev/null || \
ln -s git git-checkout-index 2>/dev/null || \
cp git git-checkout-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-checkout && \
ln git git-checkout 2>/dev/null || \
ln -s git git-checkout 2>/dev/null || \
cp git git-checkout
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-clone && \
ln git git-clone 2>/dev/null || \
ln -s git git-clone 2>/dev/null || \
cp git git-clone
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-clean && \
ln git git-clean 2>/dev/null || \
ln -s git git-clean 2>/dev/null || \
cp git git-clean
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-column && \
ln git git-column 2>/dev/null || \
ln -s git git-column 2>/dev/null || \
cp git git-column
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-commit-graph && \
ln git git-commit-graph 2>/dev/null || \
ln -s git git-commit-graph 2>/dev/null || \
cp git git-commit-graph
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-commit && \
ln git git-commit 2>/dev/null || \
ln -s git git-commit 2>/dev/null || \
cp git git-commit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-config && \
ln git git-config 2>/dev/null || \
ln -s git git-config 2>/dev/null || \
cp git git-config
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-count-objects && \
ln git git-count-objects 2>/dev/null || \
ln -s git git-count-objects 2>/dev/null || \
cp git git-count-objects
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-commit-tree && \
ln git git-commit-tree 2>/dev/null || \
ln -s git git-commit-tree 2>/dev/null || \
cp git git-commit-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-credential-cache--daemon && \
ln git git-credential-cache--daemon 2>/dev/null || \
ln -s git git-credential-cache--daemon 2>/dev/null || \
cp git git-credential-cache--daemon
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-credential-cache && \
ln git git-credential-cache 2>/dev/null || \
ln -s git git-credential-cache 2>/dev/null || \
cp git git-credential-cache
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-credential-store && \
ln git git-credential-store 2>/dev/null || \
ln -s git git-credential-store 2>/dev/null || \
cp git git-credential-store
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-describe && \
ln git git-describe 2>/dev/null || \
ln -s git git-describe 2>/dev/null || \
cp git git-describe
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-credential && \
ln git git-credential 2>/dev/null || \
ln -s git git-credential 2>/dev/null || \
cp git git-credential
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-diff-files && \
ln git git-diff-files 2>/dev/null || \
ln -s git git-diff-files 2>/dev/null || \
cp git git-diff-files
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-diagnose && \
ln git git-diagnose 2>/dev/null || \
ln -s git git-diagnose 2>/dev/null || \
cp git git-diagnose
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-diff-index && \
ln git git-diff-index 2>/dev/null || \
ln -s git git-diff-index 2>/dev/null || \
cp git git-diff-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-diff-tree && \
ln git git-diff-tree 2>/dev/null || \
ln -s git git-diff-tree 2>/dev/null || \
cp git git-diff-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-diff && \
ln git git-diff 2>/dev/null || \
ln -s git git-diff 2>/dev/null || \
cp git git-diff
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-difftool && \
ln git git-difftool 2>/dev/null || \
ln -s git git-difftool 2>/dev/null || \
cp git git-difftool
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fast-export && \
ln git git-fast-export 2>/dev/null || \
ln -s git git-fast-export 2>/dev/null || \
cp git git-fast-export
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-env--helper && \
ln git git-env--helper 2>/dev/null || \
ln -s git git-env--helper 2>/dev/null || \
cp git git-env--helper
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fast-import && \
ln git git-fast-import 2>/dev/null || \
ln -s git git-fast-import 2>/dev/null || \
cp git git-fast-import
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fetch-pack && \
ln git git-fetch-pack 2>/dev/null || \
ln -s git git-fetch-pack 2>/dev/null || \
cp git git-fetch-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fetch && \
ln git git-fetch 2>/dev/null || \
ln -s git git-fetch 2>/dev/null || \
cp git git-fetch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fmt-merge-msg && \
ln git git-fmt-merge-msg 2>/dev/null || \
ln -s git git-fmt-merge-msg 2>/dev/null || \
cp git git-fmt-merge-msg
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-for-each-ref && \
ln git git-for-each-ref 2>/dev/null || \
ln -s git git-for-each-ref 2>/dev/null || \
cp git git-for-each-ref
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-for-each-repo && \
ln git git-for-each-repo 2>/dev/null || \
ln -s git git-for-each-repo 2>/dev/null || \
cp git git-for-each-repo
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fsmonitor--daemon && \
ln git git-fsmonitor--daemon 2>/dev/null || \
ln -s git git-fsmonitor--daemon 2>/dev/null || \
cp git git-fsmonitor--daemon
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fsck && \
ln git git-fsck 2>/dev/null || \
ln -s git git-fsck 2>/dev/null || \
cp git git-fsck
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-gc && \
ln git git-gc 2>/dev/null || \
ln -s git git-gc 2>/dev/null || \
cp git git-gc
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-get-tar-commit-id && \
ln git git-get-tar-commit-id 2>/dev/null || \
ln -s git git-get-tar-commit-id 2>/dev/null || \
cp git git-get-tar-commit-id
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-grep && \
ln git git-grep 2>/dev/null || \
ln -s git git-grep 2>/dev/null || \
cp git git-grep
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-hash-object && \
ln git git-hash-object 2>/dev/null || \
ln -s git git-hash-object 2>/dev/null || \
cp git git-hash-object
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-help && \
ln git git-help 2>/dev/null || \
ln -s git git-help 2>/dev/null || \
cp git git-help
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-hook && \
ln git git-hook 2>/dev/null || \
ln -s git git-hook 2>/dev/null || \
cp git git-hook
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-index-pack && \
ln git git-index-pack 2>/dev/null || \
ln -s git git-index-pack 2>/dev/null || \
cp git git-index-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-init-db && \
ln git git-init-db 2>/dev/null || \
ln -s git git-init-db 2>/dev/null || \
cp git git-init-db
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-interpret-trailers && \
ln git git-interpret-trailers 2>/dev/null || \
ln -s git git-interpret-trailers 2>/dev/null || \
cp git git-interpret-trailers
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-log && \
ln git git-log 2>/dev/null || \
ln -s git git-log 2>/dev/null || \
cp git git-log
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-ls-files && \
ln git git-ls-files 2>/dev/null || \
ln -s git git-ls-files 2>/dev/null || \
cp git git-ls-files
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-ls-remote && \
ln git git-ls-remote 2>/dev/null || \
ln -s git git-ls-remote 2>/dev/null || \
cp git git-ls-remote
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-ls-tree && \
ln git git-ls-tree 2>/dev/null || \
ln -s git git-ls-tree 2>/dev/null || \
cp git git-ls-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-mailinfo && \
ln git git-mailinfo 2>/dev/null || \
ln -s git git-mailinfo 2>/dev/null || \
cp git git-mailinfo
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-mailsplit && \
ln git git-mailsplit 2>/dev/null || \
ln -s git git-mailsplit 2>/dev/null || \
cp git git-mailsplit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-file && \
ln git git-merge-file 2>/dev/null || \
ln -s git git-merge-file 2>/dev/null || \
cp git git-merge-file
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-base && \
ln git git-merge-base 2>/dev/null || \
ln -s git git-merge-base 2>/dev/null || \
cp git git-merge-base
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-index && \
ln git git-merge-index 2>/dev/null || \
ln -s git git-merge-index 2>/dev/null || \
cp git git-merge-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-ours && \
ln git git-merge-ours 2>/dev/null || \
ln -s git git-merge-ours 2>/dev/null || \
cp git git-merge-ours
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-recursive && \
ln git git-merge-recursive 2>/dev/null || \
ln -s git git-merge-recursive 2>/dev/null || \
cp git git-merge-recursive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-tree && \
ln git git-merge-tree 2>/dev/null || \
ln -s git git-merge-tree 2>/dev/null || \
cp git git-merge-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge && \
ln git git-merge 2>/dev/null || \
ln -s git git-merge 2>/dev/null || \
cp git git-merge
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-mktag && \
ln git git-mktag 2>/dev/null || \
ln -s git git-mktag 2>/dev/null || \
cp git git-mktag
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-mktree && \
ln git git-mktree 2>/dev/null || \
ln -s git git-mktree 2>/dev/null || \
cp git git-mktree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-multi-pack-index && \
ln git git-multi-pack-index 2>/dev/null || \
ln -s git git-multi-pack-index 2>/dev/null || \
cp git git-multi-pack-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-mv && \
ln git git-mv 2>/dev/null || \
ln -s git git-mv 2>/dev/null || \
cp git git-mv
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-notes && \
ln git git-notes 2>/dev/null || \
ln -s git git-notes 2>/dev/null || \
cp git git-notes
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-name-rev && \
ln git git-name-rev 2>/dev/null || \
ln -s git git-name-rev 2>/dev/null || \
cp git git-name-rev
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-pack-objects && \
ln git git-pack-objects 2>/dev/null || \
ln -s git git-pack-objects 2>/dev/null || \
cp git git-pack-objects
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-pack-redundant && \
ln git git-pack-redundant 2>/dev/null || \
ln -s git git-pack-redundant 2>/dev/null || \
cp git git-pack-redundant
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-pack-refs && \
ln git git-pack-refs 2>/dev/null || \
ln -s git git-pack-refs 2>/dev/null || \
cp git git-pack-refs
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-patch-id && \
ln git git-patch-id 2>/dev/null || \
ln -s git git-patch-id 2>/dev/null || \
cp git git-patch-id
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-prune && \
ln git git-prune 2>/dev/null || \
ln -s git git-prune 2>/dev/null || \
cp git git-prune
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-prune-packed && \
ln git git-prune-packed 2>/dev/null || \
ln -s git git-prune-packed 2>/dev/null || \
cp git git-prune-packed
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-pull && \
ln git git-pull 2>/dev/null || \
ln -s git git-pull 2>/dev/null || \
cp git git-pull
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-range-diff && \
ln git git-range-diff 2>/dev/null || \
ln -s git git-range-diff 2>/dev/null || \
cp git git-range-diff
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-push && \
ln git git-push 2>/dev/null || \
ln -s git git-push 2>/dev/null || \
cp git git-push
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-read-tree && \
ln git git-read-tree 2>/dev/null || \
ln -s git git-read-tree 2>/dev/null || \
cp git git-read-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-rebase && \
ln git git-rebase 2>/dev/null || \
ln -s git git-rebase 2>/dev/null || \
cp git git-rebase
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-reflog && \
ln git git-reflog 2>/dev/null || \
ln -s git git-reflog 2>/dev/null || \
cp git git-reflog
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote-ext && \
ln git git-remote-ext 2>/dev/null || \
ln -s git git-remote-ext 2>/dev/null || \
cp git git-remote-ext
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-receive-pack && \
ln git git-receive-pack 2>/dev/null || \
ln -s git git-receive-pack 2>/dev/null || \
cp git git-receive-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote-fd && \
ln git git-remote-fd 2>/dev/null || \
ln -s git git-remote-fd 2>/dev/null || \
cp git git-remote-fd
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-remote && \
ln git git-remote 2>/dev/null || \
ln -s git git-remote 2>/dev/null || \
cp git git-remote
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-repack && \
ln git git-repack 2>/dev/null || \
ln -s git git-repack 2>/dev/null || \
cp git git-repack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-rerere && \
ln git git-rerere 2>/dev/null || \
ln -s git git-rerere 2>/dev/null || \
cp git git-rerere
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-replace && \
ln git git-replace 2>/dev/null || \
ln -s git git-replace 2>/dev/null || \
cp git git-replace
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-reset && \
ln git git-reset 2>/dev/null || \
ln -s git git-reset 2>/dev/null || \
cp git git-reset
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-rev-list && \
ln git git-rev-list 2>/dev/null || \
ln -s git git-rev-list 2>/dev/null || \
cp git git-rev-list
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-rev-parse && \
ln git git-rev-parse 2>/dev/null || \
ln -s git git-rev-parse 2>/dev/null || \
cp git git-rev-parse
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-revert && \
ln git git-revert 2>/dev/null || \
ln -s git git-revert 2>/dev/null || \
cp git git-revert
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-send-pack && \
ln git git-send-pack 2>/dev/null || \
ln -s git git-send-pack 2>/dev/null || \
cp git git-send-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-shortlog && \
ln git git-shortlog 2>/dev/null || \
ln -s git git-shortlog 2>/dev/null || \
cp git git-shortlog
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-rm && \
ln git git-rm 2>/dev/null || \
ln -s git git-rm 2>/dev/null || \
cp git git-rm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-show-branch && \
ln git git-show-branch 2>/dev/null || \
ln -s git git-show-branch 2>/dev/null || \
cp git git-show-branch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-show-index && \
ln git git-show-index 2>/dev/null || \
ln -s git git-show-index 2>/dev/null || \
cp git git-show-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-show-ref && \
ln git git-show-ref 2>/dev/null || \
ln -s git git-show-ref 2>/dev/null || \
cp git git-show-ref
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-sparse-checkout && \
ln git git-sparse-checkout 2>/dev/null || \
ln -s git git-sparse-checkout 2>/dev/null || \
cp git git-sparse-checkout
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-stash && \
ln git git-stash 2>/dev/null || \
ln -s git git-stash 2>/dev/null || \
cp git git-stash
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-stripspace && \
ln git git-stripspace 2>/dev/null || \
ln -s git git-stripspace 2>/dev/null || \
cp git git-stripspace
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-submodule--helper && \
ln git git-submodule--helper 2>/dev/null || \
ln -s git git-submodule--helper 2>/dev/null || \
cp git git-submodule--helper
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-symbolic-ref && \
ln git git-symbolic-ref 2>/dev/null || \
ln -s git git-symbolic-ref 2>/dev/null || \
cp git git-symbolic-ref
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-tag && \
ln git git-tag 2>/dev/null || \
ln -s git git-tag 2>/dev/null || \
cp git git-tag
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-unpack-file && \
ln git git-unpack-file 2>/dev/null || \
ln -s git git-unpack-file 2>/dev/null || \
cp git git-unpack-file
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-unpack-objects && \
ln git git-unpack-objects 2>/dev/null || \
ln -s git git-unpack-objects 2>/dev/null || \
cp git git-unpack-objects
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-update-index && \
ln git git-update-index 2>/dev/null || \
ln -s git git-update-index 2>/dev/null || \
cp git git-update-index
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-update-ref && \
ln git git-update-ref 2>/dev/null || \
ln -s git git-update-ref 2>/dev/null || \
cp git git-update-ref
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-update-server-info && \
ln git git-update-server-info 2>/dev/null || \
ln -s git git-update-server-info 2>/dev/null || \
cp git git-update-server-info
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-upload-pack && \
ln git git-upload-pack 2>/dev/null || \
ln -s git git-upload-pack 2>/dev/null || \
cp git git-upload-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-upload-archive && \
ln git git-upload-archive 2>/dev/null || \
ln -s git git-upload-archive 2>/dev/null || \
cp git git-upload-archive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-verify-commit && \
ln git git-verify-commit 2>/dev/null || \
ln -s git git-verify-commit 2>/dev/null || \
cp git git-verify-commit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-var && \
ln git git-var 2>/dev/null || \
ln -s git git-var 2>/dev/null || \
cp git git-var
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-verify-pack && \
ln git git-verify-pack 2>/dev/null || \
ln -s git git-verify-pack 2>/dev/null || \
cp git git-verify-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-worktree && \
ln git git-worktree 2>/dev/null || \
ln -s git git-worktree 2>/dev/null || \
cp git git-worktree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-verify-tag && \
ln git git-verify-tag 2>/dev/null || \
ln -s git git-verify-tag 2>/dev/null || \
cp git git-verify-tag
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-write-tree && \
ln git git-write-tree 2>/dev/null || \
ln -s git git-write-tree 2>/dev/null || \
cp git git-write-tree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-cherry-pick && \
ln git git-cherry-pick 2>/dev/null || \
ln -s git git-cherry-pick 2>/dev/null || \
cp git git-cherry-pick
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-format-patch && \
ln git git-format-patch 2>/dev/null || \
ln -s git git-format-patch 2>/dev/null || \
cp git git-format-patch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-cherry && \
ln git git-cherry 2>/dev/null || \
ln -s git git-cherry 2>/dev/null || \
cp git git-cherry
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-fsck-objects && \
ln git git-fsck-objects 2>/dev/null || \
ln -s git git-fsck-objects 2>/dev/null || \
cp git git-fsck-objects
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-init && \
ln git git-init 2>/dev/null || \
ln -s git git-init 2>/dev/null || \
cp git git-init
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-maintenance && \
ln git git-maintenance 2>/dev/null || \
ln -s git git-maintenance 2>/dev/null || \
cp git git-maintenance
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-merge-subtree && \
ln git git-merge-subtree 2>/dev/null || \
ln -s git git-merge-subtree 2>/dev/null || \
cp git git-merge-subtree
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-restore && \
ln git git-restore 2>/dev/null || \
ln -s git git-restore 2>/dev/null || \
cp git git-restore
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-show && \
ln git git-show 2>/dev/null || \
ln -s git git-show 2>/dev/null || \
cp git git-show
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-stage && \
ln git git-stage 2>/dev/null || \
ln -s git git-stage 2>/dev/null || \
cp git git-stage
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-status && \
ln git git-status 2>/dev/null || \
ln -s git git-status 2>/dev/null || \
cp git git-status
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-switch && \
ln git git-switch 2>/dev/null || \
ln -s git git-switch 2>/dev/null || \
cp git git-switch
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-version && \
ln git git-version 2>/dev/null || \
ln -s git git-version 2>/dev/null || \
cp git git-version
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f git-whatchanged && \
ln git git-whatchanged 2>/dev/null || \
ln -s git git-whatchanged 2>/dev/null || \
cp git git-whatchanged
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C git-gui  gitexecdir='/usr/lib/git-core' all
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
GITGUI_VERSION = 0.21.GITGUI
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
    * new locations or Tcl/Tk interpreter
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l el -d po/ po/el.po 
381 translated messages, 4 fuzzy translations, 6 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l bg -d po/ po/bg.po 
565 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l fr -d po/ po/fr.po 
520 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l de -d po/ po/de.po 
579 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l hu -d po/ po/hu.po 
514 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l it -d po/ po/it.po 
519 translated messages, 1 untranslated message.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l nb -d po/ po/nb.po 
474 translated messages, 39 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l ja -d po/ po/ja.po 
546 translated messages, 1 untranslated message.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l pt_br -d po/ po/pt_br.po 
520 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l pt_pt -d po/ po/pt_pt.po 
550 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l zh_cn -d po/ po/zh_cn.po 
366 translated messages, 7 fuzzy translations, 17 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l ru -d po/ po/ru.po 
579 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l sv -d po/ po/sv.po 
547 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
msgfmt --statistics --tcl -l vi -d po/ po/vi.po 
543 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
rm -f git-gui git-gui+ && \
sed -e '1s|#!.*/sh|#!/bin/sh|' \
	-e 's|@@SHELL_PATH@@|/bin/sh|' \
	-e '1,30s|^ argv0=$0| argv0=$0|' \
	-e '1,30s|^ exec wish | exec '\''wish'\'' |' \
	-e 's/@@GITGUI_VERSION@@/0.21.GITGUI/g' \
	-e 's|@@GITGUI_RELATIVE@@||' \
	-e 's|@@GITGUI_LIBDIR@@|/usr/share/git-gui/lib|' \
	git-gui.sh >git-gui+ && \
chmod +x git-gui+ && \
mv git-gui+ git-gui
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
if echo \
  source lib/class.tcl\; \
  auto_mkindex lib about.tcl blame.tcl branch.tcl branch_checkout.tcl branch_create.tcl branch_delete.tcl branch_rename.tcl browser.tcl checkout_op.tcl choose_font.tcl choose_repository.tcl choose_rev.tcl chord.tcl class.tcl commit.tcl console.tcl database.tcl date.tcl diff.tcl encoding.tcl error.tcl index.tcl line.tcl logo.tcl merge.tcl mergetool.tcl option.tcl remote.tcl remote_add.tcl remote_branch_delete.tcl search.tcl shortcut.tcl spellcheck.tcl sshkey.tcl status_bar.tcl themed.tcl tools.tcl tools_dlg.tcl transport.tcl win32.tcl \
| tclsh ; then : ok; \
else \
 echo >&2 "    * tclsh failed; using unoptimized loading"; \
 rm -f lib/tclIndex ; \
 echo '# Autogenerated by git-gui Makefile' >lib/tclIndex && \
 echo >>lib/tclIndex && \
 echo 'class.tcl' >>lib/tclIndex && echo 'about.tcl' >>lib/tclIndex && echo 'blame.tcl' >>lib/tclIndex && echo 'branch.tcl' >>lib/tclIndex && echo 'branch_checkout.tcl' >>lib/tclIndex && echo 'branch_create.tcl' >>lib/tclIndex && echo 'branch_delete.tcl' >>lib/tclIndex && echo 'branch_rename.tcl' >>lib/tclIndex && echo 'browser.tcl' >>lib/tclIndex && echo 'checkout_op.tcl' >>lib/tclIndex && echo 'choose_font.tcl' >>lib/tclIndex && echo 'choose_repository.tcl' >>lib/tclIndex && echo 'choose_rev.tcl' >>lib/tclIndex && echo 'chord.tcl' >>lib/tclIndex && echo 'class.tcl' >>lib/tclIndex && echo 'commit.tcl' >>lib/tclIndex && echo 'console.tcl' >>lib/tclIndex && echo 'database.tcl' >>lib/tclIndex && echo 'date.tcl' >>lib/tclIndex && echo 'diff.tcl' >>lib/tclIndex && echo 'encoding.tcl' >>lib/tclIndex && echo 'error.tcl' >>lib/tclIndex && echo 'index.tcl' >>lib/tclIndex && echo 'line.tcl' >>lib/tclIndex && echo 'logo.tcl' >>lib/tclIndex && echo 'merge.tcl' >>lib/tclIndex && echo 'mergetool.tcl' >>lib/tclIndex && echo 'option.tcl' >>lib/tclIndex && echo 'remote.tcl' >>lib/tclIndex && echo 'remote_add.tcl' >>lib/tclIndex && echo 'remote_branch_delete.tcl' >>lib/tclIndex && echo 'search.tcl' >>lib/tclIndex && echo 'shortcut.tcl' >>lib/tclIndex && echo 'spellcheck.tcl' >>lib/tclIndex && echo 'sshkey.tcl' >>lib/tclIndex && echo 'status_bar.tcl' >>lib/tclIndex && echo 'themed.tcl' >>lib/tclIndex && echo 'tools.tcl' >>lib/tclIndex && echo 'tools_dlg.tcl' >>lib/tclIndex && echo 'transport.tcl' >>lib/tclIndex && echo 'win32.tcl' >>lib/tclIndex && \
 echo >>lib/tclIndex ; \
fi
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
/usr/bin/make -C gitk-git  all
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
    * new Tcl/Tk interpreter location
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/ca.msg
msgfmt --statistics --tcl po/ca.po -l ca -d po/
307 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/de.msg
msgfmt --statistics --tcl po/de.po -l de -d po/
307 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/bg.msg
msgfmt --statistics --tcl po/bg.po -l bg -d po/
317 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/es.msg
msgfmt --statistics --tcl po/es.po -l es -d po/
184 translated messages, 46 fuzzy translations, 77 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/fr.msg
msgfmt --statistics --tcl po/fr.po -l fr -d po/
311 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/hu.msg
msgfmt --statistics --tcl po/hu.po -l hu -d po/
277 translated messages, 18 fuzzy translations, 12 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/it.msg
msgfmt --statistics --tcl po/it.po -l it -d po/
274 translated messages, 17 fuzzy translations, 16 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/ja.msg
msgfmt --statistics --tcl po/ja.po -l ja -d po/
311 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/pt_br.msg
msgfmt --statistics --tcl po/pt_br.po -l pt_br -d po/
279 translated messages, 16 fuzzy translations, 12 untranslated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/pt_pt.msg
msgfmt --statistics --tcl po/pt_pt.po -l pt_pt -d po/
311 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/sv.msg
msgfmt --statistics --tcl po/sv.po -l sv -d po/
311 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/ru.msg
msgfmt --statistics --tcl po/ru.po -l ru -d po/
317 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/vi.msg
msgfmt --statistics --tcl po/vi.po -l vi -d po/
307 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
Generating catalog po/zh_cn.msg
msgfmt --statistics --tcl po/zh_cn.po -l zh_cn -d po/
317 translated messages.
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
rm -f gitk-wish gitk-wish+ && \
sed -e '1,3s|^exec .* "$0"|exec wish "$0"|' <gitk >gitk-wish+ && \
chmod +x gitk-wish+ && \
mv -f gitk-wish+ gitk-wish
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
/usr/bin/make -C templates  SHELL_PATH='/bin/sh' PERL_PATH='/usr/bin/perl'
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
: no custom templates yet
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
umask 022 && ls *--* 2>/dev/null | \
while read boilerplate; \
do \
	case "$boilerplate" in *~) continue ;; esac && \
	dst=`echo "$boilerplate" | sed -e 's|^this|.|;s|--|/|g'` && \
	dir=`expr "$dst" : '\(.*\)/'` && \
	mkdir -p blt/$dir && \
	case "$boilerplate" in \
	*--) continue;; \
	esac && \
	sed -e '1s|#!.*/sh|#!/bin/sh|' \
	    -e 's|@SHELL_PATH@|/bin/sh|' \
	    -e 's|@PERL_PATH@|/usr/bin/perl|g' $boilerplate > \
		blt/$dst && \
	if test -x "$boilerplate"; then rx=rx; else rx=r; fi && \
	chmod a+$rx "blt/$dst" || exit; \
done && \
date >boilerplates.made
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/el/LC_MESSAGES/git.mo po/el.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/ca/LC_MESSAGES/git.mo po/ca.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/de/LC_MESSAGES/git.mo po/de.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/bg/LC_MESSAGES/git.mo po/bg.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/is/LC_MESSAGES/git.mo po/is.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/es/LC_MESSAGES/git.mo po/es.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/fr/LC_MESSAGES/git.mo po/fr.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/id/LC_MESSAGES/git.mo po/id.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/it/LC_MESSAGES/git.mo po/it.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/ko/LC_MESSAGES/git.mo po/ko.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/pt_PT/LC_MESSAGES/git.mo po/pt_PT.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/pl/LC_MESSAGES/git.mo po/pl.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/ru/LC_MESSAGES/git.mo po/ru.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/sv/LC_MESSAGES/git.mo po/sv.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/tr/LC_MESSAGES/git.mo po/tr.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/vi/LC_MESSAGES/git.mo po/vi.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/zh_CN/LC_MESSAGES/git.mo po/zh_CN.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
msgfmt --check -o po/build/locale/zh_TW/LC_MESSAGES/git.mo po/zh_TW.po
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git.pm > perl/build/lib/Git.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/IndexInfo.pm > perl/build/lib/Git/IndexInfo.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/I18N.pm > perl/build/lib/Git/I18N.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/LoadCPAN.pm > perl/build/lib/Git/LoadCPAN.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/Packet.pm > perl/build/lib/Git/Packet.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN.pm > perl/build/lib/Git/SVN.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/LoadCPAN/Error.pm > perl/build/lib/Git/LoadCPAN/Error.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Editor.pm > perl/build/lib/Git/SVN/Editor.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/GlobSpec.pm > perl/build/lib/Git/SVN/GlobSpec.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Fetcher.pm > perl/build/lib/Git/SVN/Fetcher.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Log.pm > perl/build/lib/Git/SVN/Log.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Migration.pm > perl/build/lib/Git/SVN/Migration.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Prompt.pm > perl/build/lib/Git/SVN/Prompt.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Ra.pm > perl/build/lib/Git/SVN/Ra.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Utils.pm > perl/build/lib/Git/SVN/Utils.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/LoadCPAN/Mail/Address.pm > perl/build/lib/Git/LoadCPAN/Mail/Address.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e 's|@@LOCALEDIR@@|/usr/share/locale|g' \
    -e 's|@@NO_GETTEXT@@||g' \
    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|1|g' \
< perl/Git/SVN/Memoize/YAML.pm > perl/build/lib/Git/SVN/Memoize/YAML.pm
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-fake-ssh.o -c -MF t/helper/.depend/test-fake-ssh.o.d -MQ t/helper/test-fake-ssh.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-fake-ssh.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/dump.o -c -MF reftable/.depend/dump.o.d -MQ reftable/dump.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/dump.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/basics_test.o -c -MF reftable/.depend/basics_test.o.d -MQ reftable/basics_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/basics_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/block_test.o -c -MF reftable/.depend/block_test.o.d -MQ reftable/block_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/block_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/pq_test.o -c -MF reftable/.depend/pq_test.o.d -MQ reftable/pq_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/pq_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/refname_test.o -c -MF reftable/.depend/refname_test.o.d -MQ reftable/refname_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/refname_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/record_test.o -c -MF reftable/.depend/record_test.o.d -MQ reftable/record_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/record_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/merged_test.o -c -MF reftable/.depend/merged_test.o.d -MQ reftable/merged_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/merged_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/test_framework.o -c -MF reftable/.depend/test_framework.o.d -MQ reftable/test_framework.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/test_framework.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/tree_test.o -c -MF reftable/.depend/tree_test.o.d -MQ reftable/tree_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/tree_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-tool.o -c -MF t/helper/.depend/test-tool.o.d -MQ t/helper/test-tool.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-tool.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-advise.o -c -MF t/helper/.depend/test-advise.o.d -MQ t/helper/test-advise.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-advise.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/readwrite_test.o -c -MF reftable/.depend/readwrite_test.o.d -MQ reftable/readwrite_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/readwrite_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-bitmap.o -c -MF t/helper/.depend/test-bitmap.o.d -MQ t/helper/test-bitmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-bitmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-bundle-uri.o -c -MF t/helper/.depend/test-bundle-uri.o.d -MQ t/helper/test-bundle-uri.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-bundle-uri.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-bloom.o -c -MF t/helper/.depend/test-bloom.o.d -MQ t/helper/test-bloom.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-bloom.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-cache-tree.o -c -MF t/helper/.depend/test-cache-tree.o.d -MQ t/helper/test-cache-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-cache-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-chmtime.o -c -MF t/helper/.depend/test-chmtime.o.d -MQ t/helper/test-chmtime.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-chmtime.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-crontab.o -c -MF t/helper/.depend/test-crontab.o.d -MQ t/helper/test-crontab.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-crontab.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-config.o -c -MF t/helper/.depend/test-config.o.d -MQ t/helper/test-config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-csprng.o -c -MF t/helper/.depend/test-csprng.o.d -MQ t/helper/test-csprng.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-csprng.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-ctype.o -c -MF t/helper/.depend/test-ctype.o.d -MQ t/helper/test-ctype.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-ctype.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-delta.o -c -MF t/helper/.depend/test-delta.o.d -MQ t/helper/test-delta.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-delta.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-date.o -c -MF t/helper/.depend/test-date.o.d -MQ t/helper/test-date.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-date.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o reftable/stack_test.o -c -MF reftable/.depend/stack_test.o.d -MQ reftable/stack_test.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  reftable/stack_test.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-drop-caches.o -c -MF t/helper/.depend/test-drop-caches.o.d -MQ t/helper/test-drop-caches.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-drop-caches.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-dir-iterator.o -c -MF t/helper/.depend/test-dir-iterator.o.d -MQ t/helper/test-dir-iterator.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-dir-iterator.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-dump-cache-tree.o -c -MF t/helper/.depend/test-dump-cache-tree.o.d -MQ t/helper/test-dump-cache-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-dump-cache-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-dump-fsmonitor.o -c -MF t/helper/.depend/test-dump-fsmonitor.o.d -MQ t/helper/test-dump-fsmonitor.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-dump-fsmonitor.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-dump-split-index.o -c -MF t/helper/.depend/test-dump-split-index.o.d -MQ t/helper/test-dump-split-index.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-dump-split-index.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-dump-untracked-cache.o -c -MF t/helper/.depend/test-dump-untracked-cache.o.d -MQ t/helper/test-dump-untracked-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-dump-untracked-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-fsmonitor-client.o -c -MF t/helper/.depend/test-fsmonitor-client.o.d -MQ t/helper/test-fsmonitor-client.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-fsmonitor-client.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-example-decorate.o -c -MF t/helper/.depend/test-example-decorate.o.d -MQ t/helper/test-example-decorate.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-example-decorate.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-genrandom.o -c -MF t/helper/.depend/test-genrandom.o.d -MQ t/helper/test-genrandom.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-genrandom.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-genzeros.o -c -MF t/helper/.depend/test-genzeros.o.d -MQ t/helper/test-genzeros.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-genzeros.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-getcwd.o -c -MF t/helper/.depend/test-getcwd.o.d -MQ t/helper/test-getcwd.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-getcwd.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-fast-rebase.o -c -MF t/helper/.depend/test-fast-rebase.o.d -MQ t/helper/test-fast-rebase.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-fast-rebase.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-hash-speed.o -c -MF t/helper/.depend/test-hash-speed.o.d -MQ t/helper/test-hash-speed.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-hash-speed.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-hexdump.o -c -MF t/helper/.depend/test-hexdump.o.d -MQ t/helper/test-hexdump.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-hexdump.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-hash.o -c -MF t/helper/.depend/test-hash.o.d -MQ t/helper/test-hash.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-hash.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-index-version.o -c -MF t/helper/.depend/test-index-version.o.d -MQ t/helper/test-index-version.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-index-version.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-hashmap.o -c -MF t/helper/.depend/test-hashmap.o.d -MQ t/helper/test-hashmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-hashmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-match-trees.o -c -MF t/helper/.depend/test-match-trees.o.d -MQ t/helper/test-match-trees.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-match-trees.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-lazy-init-name-hash.o -c -MF t/helper/.depend/test-lazy-init-name-hash.o.d -MQ t/helper/test-lazy-init-name-hash.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-lazy-init-name-hash.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-json-writer.o -c -MF t/helper/.depend/test-json-writer.o.d -MQ t/helper/test-json-writer.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-json-writer.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-mktemp.o -c -MF t/helper/.depend/test-mktemp.o.d -MQ t/helper/test-mktemp.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-mktemp.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-oid-array.o -c -MF t/helper/.depend/test-oid-array.o.d -MQ t/helper/test-oid-array.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-oid-array.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-oidtree.o -c -MF t/helper/.depend/test-oidtree.o.d -MQ t/helper/test-oidtree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-oidtree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-online-cpus.o -c -MF t/helper/.depend/test-online-cpus.o.d -MQ t/helper/test-online-cpus.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-online-cpus.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-oidmap.o -c -MF t/helper/.depend/test-oidmap.o.d -MQ t/helper/test-oidmap.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-oidmap.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-parse-pathspec-file.o -c -MF t/helper/.depend/test-parse-pathspec-file.o.d -MQ t/helper/test-parse-pathspec-file.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-parse-pathspec-file.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-pack-mtimes.o -c -MF t/helper/.depend/test-pack-mtimes.o.d -MQ t/helper/test-pack-mtimes.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-pack-mtimes.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-mergesort.o -c -MF t/helper/.depend/test-mergesort.o.d -MQ t/helper/test-mergesort.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-mergesort.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-partial-clone.o -c -MF t/helper/.depend/test-partial-clone.o.d -MQ t/helper/test-partial-clone.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-partial-clone.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-pcre2-config.o -c -MF t/helper/.depend/test-pcre2-config.o.d -MQ t/helper/test-pcre2-config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-pcre2-config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-parse-options.o -c -MF t/helper/.depend/test-parse-options.o.d -MQ t/helper/test-parse-options.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-parse-options.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-pkt-line.o -c -MF t/helper/.depend/test-pkt-line.o.d -MQ t/helper/test-pkt-line.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-pkt-line.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-prio-queue.o -c -MF t/helper/.depend/test-prio-queue.o.d -MQ t/helper/test-prio-queue.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-prio-queue.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-path-utils.o -c -MF t/helper/.depend/test-path-utils.o.d -MQ t/helper/test-path-utils.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-path-utils.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-progress.o -c -MF t/helper/.depend/test-progress.o.d -MQ t/helper/test-progress.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-progress.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-proc-receive.o -c -MF t/helper/.depend/test-proc-receive.o.d -MQ t/helper/test-proc-receive.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-proc-receive.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-read-cache.o -c -MF t/helper/.depend/test-read-cache.o.d -MQ t/helper/test-read-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-read-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-read-graph.o -c -MF t/helper/.depend/test-read-graph.o.d -MQ t/helper/test-read-graph.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-read-graph.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-reach.o -c -MF t/helper/.depend/test-reach.o.d -MQ t/helper/test-reach.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-reach.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-reftable.o -c -MF t/helper/.depend/test-reftable.o.d -MQ t/helper/test-reftable.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-reftable.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-read-midx.o -c -MF t/helper/.depend/test-read-midx.o.d -MQ t/helper/test-read-midx.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-read-midx.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-regex.o -c -MF t/helper/.depend/test-regex.o.d -MQ t/helper/test-regex.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-regex.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-revision-walking.o -c -MF t/helper/.depend/test-revision-walking.o.d -MQ t/helper/test-revision-walking.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-revision-walking.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-repository.o -c -MF t/helper/.depend/test-repository.o.d -MQ t/helper/test-repository.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-repository.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-ref-store.o -c -MF t/helper/.depend/test-ref-store.o.d -MQ t/helper/test-ref-store.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-ref-store.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-rot13-filter.o -c -MF t/helper/.depend/test-rot13-filter.o.d -MQ t/helper/test-rot13-filter.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-rot13-filter.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-serve-v2.o -c -MF t/helper/.depend/test-serve-v2.o.d -MQ t/helper/test-serve-v2.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-serve-v2.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-scrap-cache-tree.o -c -MF t/helper/.depend/test-scrap-cache-tree.o.d -MQ t/helper/test-scrap-cache-tree.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-scrap-cache-tree.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-sha1.o -c -MF t/helper/.depend/test-sha1.o.d -MQ t/helper/test-sha1.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-sha1.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-sha256.o -c -MF t/helper/.depend/test-sha256.o.d -MQ t/helper/test-sha256.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-sha256.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-sigchain.o -c -MF t/helper/.depend/test-sigchain.o.d -MQ t/helper/test-sigchain.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-sigchain.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-strcmp-offset.o -c -MF t/helper/.depend/test-strcmp-offset.o.d -MQ t/helper/test-strcmp-offset.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-strcmp-offset.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-run-command.o -c -MF t/helper/.depend/test-run-command.o.d -MQ t/helper/test-run-command.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-run-command.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-string-list.o -c -MF t/helper/.depend/test-string-list.o.d -MQ t/helper/test-string-list.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-string-list.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-submodule-config.o -c -MF t/helper/.depend/test-submodule-config.o.d -MQ t/helper/test-submodule-config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-submodule-config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-submodule-nested-repo-config.o -c -MF t/helper/.depend/test-submodule-nested-repo-config.o.d -MQ t/helper/test-submodule-nested-repo-config.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-submodule-nested-repo-config.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-simple-ipc.o -c -MF t/helper/.depend/test-simple-ipc.o.d -MQ t/helper/test-simple-ipc.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-simple-ipc.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-subprocess.o -c -MF t/helper/.depend/test-subprocess.o.d -MQ t/helper/test-subprocess.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-subprocess.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-urlmatch-normalization.o -c -MF t/helper/.depend/test-urlmatch-normalization.o.d -MQ t/helper/test-urlmatch-normalization.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-urlmatch-normalization.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-submodule.o -c -MF t/helper/.depend/test-submodule.o.d -MQ t/helper/test-submodule.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-submodule.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-windows-named-pipe.o -c -MF t/helper/.depend/test-windows-named-pipe.o.d -MQ t/helper/test-windows-named-pipe.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-windows-named-pipe.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-userdiff.o -c -MF t/helper/.depend/test-userdiff.o.d -MQ t/helper/test-userdiff.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-userdiff.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-wildmatch.o -c -MF t/helper/.depend/test-wildmatch.o.d -MQ t/helper/test-wildmatch.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-wildmatch.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git|' < wrap-for-bin.sh > bin-wrappers/git && \
chmod +x bin-wrappers/git
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|scalar|' < wrap-for-bin.sh > bin-wrappers/scalar && \
chmod +x bin-wrappers/scalar
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git-receive-pack|' < wrap-for-bin.sh > bin-wrappers/git-receive-pack && \
chmod +x bin-wrappers/git-receive-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git-shell|' < wrap-for-bin.sh > bin-wrappers/git-shell && \
chmod +x bin-wrappers/git-shell
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git-upload-archive|' < wrap-for-bin.sh > bin-wrappers/git-upload-archive && \
chmod +x bin-wrappers/git-upload-archive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git-upload-pack|' < wrap-for-bin.sh > bin-wrappers/git-upload-pack && \
chmod +x bin-wrappers/git-upload-pack
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-trace2.o -c -MF t/helper/.depend/test-trace2.o.d -MQ t/helper/test-trace2.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-trace2.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|git-cvsserver|' < wrap-for-bin.sh > bin-wrappers/git-cvsserver && \
chmod +x bin-wrappers/git-cvsserver
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|t/helper/test-fake-ssh|' < wrap-for-bin.sh > bin-wrappers/test-fake-ssh && \
chmod +x bin-wrappers/test-fake-ssh
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
sed -e '1s|#!.*/sh|#!/bin/sh|' \
     -e 's|@@BUILD_DIR@@|/<<PKGBUILDDIR>>|' \
     -e 's|@@PROG@@|t/helper/test-tool|' < wrap-for-bin.sh > bin-wrappers/test-tool && \
chmod +x bin-wrappers/test-tool
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f reftable/libreftable_test.a && ar rcs reftable/libreftable_test.a reftable/basics_test.o reftable/block_test.o reftable/dump.o reftable/merged_test.o reftable/pq_test.o reftable/record_test.o reftable/readwrite_test.o reftable/refname_test.o reftable/stack_test.o reftable/test_framework.o reftable/tree_test.o
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-write-cache.o -c -MF t/helper/.depend/test-write-cache.o.d -MQ t/helper/test-write-cache.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-write-cache.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc -o t/helper/test-xml-encode.o -c -MF t/helper/.depend/test-xml-encode.o.d -MQ t/helper/test-xml-encode.o -MMD -MP   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"'  t/helper/test-xml-encode.c
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o t/helper/test-fake-ssh -Wl,-z,relro  t/helper/test-fake-ssh.o common-main.o libgit.a xdiff/lib.a reftable/libreftable.a reftable/libreftable_test.a libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
gcc  -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -I. -DHAVE_SYSINFO -DGIT_HOST_CPU="\"arm\"" -DUSE_LIBPCRE2 -DHAVE_ALLOCA_H  -DUSE_CURL_FOR_IMAP_SEND -DNO_OPENSSL -DSUPPORTS_SIMPLE_IPC -DSHA1_DC -DSHA1DC_NO_STANDARD_INCLUDES -DSHA1DC_INIT_SAFE_HASH_DEFAULT=0 -DSHA1DC_CUSTOM_INCLUDE_SHA1_C="\"cache.h\"" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C="\"git-compat-util.h\"" -DSHA256_BLK  -DHAVE_PATHS_H -DHAVE_DEV_TTY -DHAVE_CLOCK_GETTIME -DHAVE_CLOCK_MONOTONIC -DHAVE_SYNC_FILE_RANGE -DHAVE_GETDELIM '-DPROCFS_EXECUTABLE_PATH="/proc/self/exe"' -DFREAD_READS_DIRECTORIES -DNO_STRLCPY -DDEFAULT_EDITOR='"editor"' -DDEFAULT_PAGER='"pager"' -DSHELL_PATH='"/bin/sh"' -o t/helper/test-tool -Wl,-z,relro  t/helper/test-tool.o common-main.o t/helper/test-advise.o t/helper/test-bitmap.o t/helper/test-bloom.o t/helper/test-bundle-uri.o t/helper/test-cache-tree.o t/helper/test-chmtime.o t/helper/test-config.o t/helper/test-crontab.o t/helper/test-csprng.o t/helper/test-ctype.o t/helper/test-date.o t/helper/test-delta.o t/helper/test-dir-iterator.o t/helper/test-drop-caches.o t/helper/test-dump-cache-tree.o t/helper/test-dump-fsmonitor.o t/helper/test-dump-split-index.o t/helper/test-dump-untracked-cache.o t/helper/test-example-decorate.o t/helper/test-fast-rebase.o t/helper/test-fsmonitor-client.o t/helper/test-genrandom.o t/helper/test-genzeros.o t/helper/test-getcwd.o t/helper/test-hash-speed.o t/helper/test-hash.o t/helper/test-hashmap.o t/helper/test-hexdump.o t/helper/test-index-version.o t/helper/test-json-writer.o t/helper/test-lazy-init-name-hash.o t/helper/test-match-trees.o t/helper/test-mergesort.o t/helper/test-mktemp.o t/helper/test-oid-array.o t/helper/test-oidmap.o t/helper/test-oidtree.o t/helper/test-online-cpus.o t/helper/test-pack-mtimes.o t/helper/test-parse-options.o t/helper/test-parse-pathspec-file.o t/helper/test-partial-clone.o t/helper/test-path-utils.o t/helper/test-pcre2-config.o t/helper/test-pkt-line.o t/helper/test-prio-queue.o t/helper/test-proc-receive.o t/helper/test-progress.o t/helper/test-reach.o t/helper/test-read-cache.o t/helper/test-read-graph.o t/helper/test-read-midx.o t/helper/test-ref-store.o t/helper/test-reftable.o t/helper/test-regex.o t/helper/test-rot13-filter.o t/helper/test-repository.o t/helper/test-revision-walking.o t/helper/test-run-command.o t/helper/test-scrap-cache-tree.o t/helper/test-serve-v2.o t/helper/test-sha1.o t/helper/test-sha256.o t/helper/test-sigchain.o t/helper/test-simple-ipc.o t/helper/test-strcmp-offset.o t/helper/test-string-list.o t/helper/test-submodule-config.o t/helper/test-submodule-nested-repo-config.o t/helper/test-submodule.o t/helper/test-subprocess.o t/helper/test-trace2.o t/helper/test-urlmatch-normalization.o t/helper/test-userdiff.o t/helper/test-wildmatch.o t/helper/test-windows-named-pipe.o t/helper/test-write-cache.o t/helper/test-xml-encode.o libgit.a xdiff/lib.a reftable/libreftable.a reftable/libreftable_test.a libgit.a xdiff/lib.a reftable/libreftable.a libgit.a -lpcre2-8 -lz -lpthread -lrt
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f gitweb/static/gitweb.js gitweb/static/gitweb.js+ && \
cat gitweb/static/js/lib/common-lib.js gitweb/static/js/lib/datetime.js gitweb/static/js/lib/cookies.js gitweb/static/js/javascript-detection.js gitweb/static/js/adjust-timezone.js gitweb/static/js/blame_incremental.js >gitweb/static/gitweb.js+ && \
mv gitweb/static/gitweb.js+ gitweb/static/gitweb.js
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
rm -f gitweb/gitweb.cgi gitweb/gitweb.cgi+ && \
sed -e '1s|#!.*perl|#!/usr/bin/perl|' \
	-e 's|++GIT_VERSION++|2.39.0|g' -e 's|++GIT_BINDIR++|/usr/bin|g' -e 's|++GITWEB_CONFIG++|gitweb_config.perl|g' -e 's|++GITWEB_CONFIG_SYSTEM++|/etc/gitweb.conf|g' -e 's|++GITWEB_CONFIG_COMMON++|/etc/gitweb-common.conf|g' -e 's|++GITWEB_HOME_LINK_STR++|projects|g' -e 's|++GITWEB_SITENAME++||g' -e 's|++GITWEB_PROJECTROOT++|/pub/git|g' -e 's|"++GITWEB_PROJECT_MAXDEPTH++"|2007|g' -e 's|++GITWEB_EXPORT_OK++||g' -e 's|++GITWEB_STRICT_EXPORT++||g' -e 's|++GITWEB_BASE_URL++||g' -e 's|++GITWEB_LIST++||g' -e 's|++GITWEB_HOMETEXT++|indextext.html|g' -e 's|++GITWEB_CSS++|static/gitweb.css|g' -e 's|++GITWEB_LOGO++|static/git-logo.png|g' -e 's|++GITWEB_FAVICON++|static/git-favicon.png|g' -e 's|++GITWEB_JS++|static/gitweb.js|g' -e 's|++GITWEB_SITE_HTML_HEAD_STRING++||g' -e 's|++GITWEB_SITE_HEADER++||g' -e 's|++GITWEB_SITE_FOOTER++||g' -e 's|++HIGHLIGHT_BIN++|highlight|g' gitweb/gitweb.perl >gitweb/gitweb.cgi+ && \
chmod +x gitweb/gitweb.cgi+ && \
mv gitweb/gitweb.cgi+ gitweb/gitweb.cgi
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[1]: Entering directory '/<<PKGBUILDDIR>>'
touch build-stamp
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C contrib/subtree all NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
/usr/bin/make -C ../../ GIT-VERSION-FILE
make[3]: 'GIT-VERSION-FILE' is up to date.
make[2]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree'
sed -e '1s|#!.*/sh|#!/bin/sh|' git-subtree.sh >git-subtree
chmod +x git-subtree
make[2]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree'
make[1]: Entering directory '/<<PKGBUILDDIR>>'
ln -s contrib/subtree/git-subtree
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   debian/rules override_dh_auto_test-arch
test -z 'test' || \
  GIT_SKIP_TESTS="t9128 t9167" \
  GIT_TEST_OPTS='--verbose' /usr/bin/make test NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-add--interactive.perl >git-add--interactive+ && \
chmod +x git-add--interactive+ && \
mv git-add--interactive+ git-add--interactive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-archimport.perl >git-archimport+ && \
chmod +x git-archimport+ && \
mv git-archimport+ git-archimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsexportcommit.perl >git-cvsexportcommit+ && \
chmod +x git-cvsexportcommit+ && \
mv git-cvsexportcommit+ git-cvsexportcommit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsimport.perl >git-cvsimport+ && \
chmod +x git-cvsimport+ && \
mv git-cvsimport+ git-cvsimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-send-email.perl >git-send-email+ && \
chmod +x git-send-email+ && \
mv git-send-email+ git-send-email
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsserver.perl >git-cvsserver+ && \
chmod +x git-cvsserver+ && \
mv git-cvsserver+ git-cvsserver
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-svn.perl >git-svn+ && \
chmod +x git-svn+ && \
mv git-svn+ git-svn
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1s|#!.*python|#!/usr/bin/python3|' \
    git-p4.py >git-p4+ && \
chmod +x git-p4+ && \
mv git-p4+ git-p4
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C git-gui  gitexecdir='/usr/lib/git-core' all
/usr/bin/make -C gitk-git  all
/usr/bin/make -C templates  SHELL_PATH='/bin/sh' PERL_PATH='/usr/bin/perl'
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
: no custom templates yet
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
/usr/bin/make -C t/ all
make[3]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'test-results'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/t'
GIT_TEST_CHAIN_LINT=0 && export GIT_TEST_CHAIN_LINT && /usr/bin/make aggregate-results-and-cleanup
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0002-gitfile.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0002-gitfile/.git/
expecting success of 0002.1 'initial setup': 
	REAL="$(pwd)/.real" &&
	mv .git "$REAL"

ok 1 - initial setup

expecting success of 0002.2 'bad setup: invalid .git file format': 
	echo "gitdir $REAL" >.git &&
	test_must_fail git rev-parse 2>.err &&
	test_i18ngrep "invalid gitfile format" .err

fatal: invalid gitfile format: /<<PKGBUILDDIR>>/t/trash directory.t0002-gitfile/.git
ok 2 - bad setup: invalid .git file format

expecting success of 0002.3 'bad setup: invalid .git file path': 
	echo "gitdir: $REAL.not" >.git &&
	test_must_fail git rev-parse 2>.err &&
	test_i18ngrep "not a git repository" .err

fatal: not a git repository: /<<PKGBUILDDIR>>/t/trash directory.t0002-gitfile/.real.not
ok 3 - bad setup: invalid .git file path

expecting success of 0002.4 'final setup + check rev-parse --git-dir': 
	echo "gitdir: $REAL" >.git &&
	test "$REAL" = "$(git rev-parse --git-dir)"

ok 4 - final setup + check rev-parse --git-dir

expecting success of 0002.5 'check hash-object': 
	echo "foo" >bar &&
	SHA=$(cat bar | git hash-object -w --stdin) &&
	test_path_is_file "$REAL/objects/$(objpath $SHA)"

ok 5 - check hash-object

expecting success of 0002.6 'check cat-file': 
	git cat-file blob $SHA >actual &&
	test_cmp bar actual

ok 6 - check cat-file

expecting success of 0002.7 'check update-index': 
	test_path_is_missing "$REAL/index" &&
	rm -f "$REAL/objects/$(objpath $SHA)" &&
	git update-index --add bar &&
	test_path_is_file "$REAL/index" &&
	test_path_is_file "$REAL/objects/$(objpath $SHA)"

ok 7 - check update-index

expecting success of 0002.8 'check write-tree': 
	SHA=$(git write-tree) &&
	test_path_is_file "$REAL/objects/$(objpath $SHA)"

ok 8 - check write-tree

expecting success of 0002.9 'check commit-tree': 
	SHA=$(echo "commit bar" | git commit-tree $SHA) &&
	test_path_is_file "$REAL/objects/$(objpath $SHA)"

ok 9 - check commit-tree

expecting success of 0002.10 'check rev-list': 
	git update-ref "HEAD" "$SHA" &&
	git rev-list HEAD >actual &&
	echo $SHA >expected &&
	test_cmp expected actual

ok 10 - check rev-list

expecting success of 0002.11 'setup_git_dir twice in subdir': 
	git init sgd &&
	(
		cd sgd &&
		git config alias.lsfi ls-files &&
		mv .git .realgit &&
		echo "gitdir: .realgit" >.git &&
		mkdir subdir &&
		cd subdir &&
		>foo &&
		git add foo &&
		git lsfi >actual &&
		echo foo >expected &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0002-gitfile/sgd/.git/
ok 11 - setup_git_dir twice in subdir

expecting success of 0002.12 'enter_repo non-strict mode': 
	test_create_repo enter_repo &&
	(
		cd enter_repo &&
		test_tick &&
		test_commit foo &&
		mv .git .realgit &&
		echo "gitdir: .realgit" >.git
	) &&
	head=$(git -C enter_repo rev-parse HEAD) &&
	git ls-remote enter_repo >actual &&
	cat >expected <<-EOF &&
	$head	HEAD
	$head	refs/heads/main
	$head	refs/tags/foo
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0002-gitfile/enter_repo/.git/
[main (root-commit) 946e985] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 12 - enter_repo non-strict mode

expecting success of 0002.13 'enter_repo linked checkout': 
	(
		cd enter_repo &&
		git worktree add  ../foo refs/tags/foo
	) &&
	head=$(git -C enter_repo rev-parse HEAD) &&
	git ls-remote foo >actual &&
	cat >expected <<-EOF &&
	$head	HEAD
	$head	refs/heads/main
	$head	refs/tags/foo
	EOF
	test_cmp expected actual

Preparing worktree (detached HEAD 946e985)
HEAD is now at 946e985 foo
ok 13 - enter_repo linked checkout

expecting success of 0002.14 'enter_repo strict mode': 
	head=$(git -C enter_repo rev-parse HEAD) &&
	git ls-remote --upload-pack="git upload-pack --strict" foo/.git >actual &&
	cat >expected <<-EOF &&
	$head	HEAD
	$head	refs/heads/main
	$head	refs/tags/foo
	EOF
	test_cmp expected actual

ok 14 - enter_repo strict mode

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0004-unwritable.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0004-unwritable/.git/
expecting success of 0004.1 'setup': 

	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	echo >file &&
	git add file


[master (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 1 - setup

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0004.2 'write-tree should notice unwritable repository': 
	test_when_finished "chmod 775 .git/objects .git/objects/??" &&
	chmod a-w .git/objects .git/objects/?? &&
	test_must_fail git write-tree 2>out.write-tree

ok 2 - write-tree should notice unwritable repository

checking prerequisite: WRITE_TREE_OUT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-WRITE_TREE_OUT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-WRITE_TREE_OUT" &&test -e "$TRASH_DIRECTORY"/out.write-tree
)
prerequisite WRITE_TREE_OUT ok
expecting success of 0004.3 'write-tree output on unwritable repository': 
	cat >expect <<-\EOF &&
	error: insufficient permission for adding an object to repository database .git/objects
	fatal: git-write-tree: error building trees
	EOF
	test_cmp expect out.write-tree

ok 3 - write-tree output on unwritable repository

expecting success of 0004.4 'commit should notice unwritable repository': 
	test_when_finished "chmod 775 .git/objects .git/objects/??" &&
	chmod a-w .git/objects .git/objects/?? &&
	test_must_fail git commit -m second 2>out.commit

ok 4 - commit should notice unwritable repository

checking prerequisite: COMMIT_OUT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-COMMIT_OUT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-COMMIT_OUT" &&test -e "$TRASH_DIRECTORY"/out.commit
)
prerequisite COMMIT_OUT ok
expecting success of 0004.5 'commit output on unwritable repository': 
	cat >expect <<-\EOF &&
	error: insufficient permission for adding an object to repository database .git/objects
	error: Error building trees
	EOF
	test_cmp expect out.commit

ok 5 - commit output on unwritable repository

expecting success of 0004.6 'update-index should notice unwritable repository': 
	test_when_finished "chmod 775 .git/objects .git/objects/??" &&
	echo 6O >file &&
	chmod a-w .git/objects .git/objects/?? &&
	test_must_fail git update-index file 2>out.update-index

ok 6 - update-index should notice unwritable repository

checking prerequisite: UPDATE_INDEX_OUT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UPDATE_INDEX_OUT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UPDATE_INDEX_OUT" &&test -e "$TRASH_DIRECTORY"/out.update-index
)
prerequisite UPDATE_INDEX_OUT ok
expecting success of 0004.7 'update-index output on unwritable repository': 
	cat >expect <<-\EOF &&
	error: insufficient permission for adding an object to repository database .git/objects
	error: file: failed to insert into database
	fatal: Unable to process path file
	EOF
	test_cmp expect out.update-index

ok 7 - update-index output on unwritable repository

expecting success of 0004.8 'add should notice unwritable repository': 
	test_when_finished "chmod 775 .git/objects .git/objects/??" &&
	echo b >file &&
	chmod a-w .git/objects .git/objects/?? &&
	test_must_fail git add file 2>out.add

ok 8 - add should notice unwritable repository

checking prerequisite: ADD_OUT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ADD_OUT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ADD_OUT" &&test -e "$TRASH_DIRECTORY"/out.add
)
prerequisite ADD_OUT ok
expecting success of 0004.9 'add output on unwritable repository': 
	cat >expect <<-\EOF &&
	error: insufficient permission for adding an object to repository database .git/objects
	error: file: failed to insert into database
	error: unable to index file 'file'
	fatal: updating files failed
	EOF
	test_cmp expect out.add

ok 9 - add output on unwritable repository

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0005-signals.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0005-signals/.git/
expecting success of 0005.1 'sigchain works': 
	{ test-tool sigchain >actual; ret=$?; } &&
	{
		# Signal death by raise() on Windows acts like exit(3),
		# regardless of the signal number. So we must allow that
		# as well as the normal signal check.
		test_match_signal 15 "$ret" ||
		test "$ret" = 3
	} &&
	test_cmp expect actual

Terminated
ok 1 - sigchain works

expecting success of 0005.2 'signals are propagated using shell convention': 
	# we use exec here to avoid any sub-shell interpretation
	# of the exit code
	git config alias.sigterm "!exec test-tool sigchain" &&
	test_expect_code 143 git sigterm

three
two
one
error: exec test-tool sigchain died of signal 15
ok 2 - signals are propagated using shell convention

expecting success of 0005.3 'create blob': 
	test-tool genrandom foo 16384 >file &&
	git add file

ok 3 - create blob

expecting success of 0005.4 'a constipated git dies with SIGPIPE': 
	OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) &&
	test_match_signal 13 "$OUT"

ok 4 - a constipated git dies with SIGPIPE

expecting success of 0005.5 'a constipated git dies with SIGPIPE even if parent ignores it': 
	OUT=$( ((trap "" PIPE && large_git; echo $? 1>&3) | :) 3>&1 ) &&
	test_match_signal 13 "$OUT"

ok 5 - a constipated git dies with SIGPIPE even if parent ignores it

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0003-attributes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0003-attributes/.git/
expecting success of 0003.1 'open-quoted pathname': 
	echo "\"a test=a" >.gitattributes &&
	attr_check a unspecified

ok 1 - open-quoted pathname

expecting success of 0003.2 'setup': 
	mkdir -p a/b/d a/c b &&
	(
		echo "[attr]notest !test" &&
		echo "\" d \"	test=d" &&
		echo " e	test=e" &&
		echo " e\"	test=e" &&
		echo "f	test=f" &&
		echo "a/i test=a/i" &&
		echo "onoff test -test" &&
		echo "offon -test test" &&
		echo "no notest" &&
		echo "A/e/F test=A/e/F"
	) >.gitattributes &&
	(
		echo "g test=a/g" &&
		echo "b/g test=a/b/g"
	) >a/.gitattributes &&
	(
		echo "h test=a/b/h" &&
		echo "d/* test=a/b/d/*" &&
		echo "d/yes notest"
	) >a/b/.gitattributes &&
	(
		echo "global test=global"
	) >"$HOME"/global-gitattributes &&
	cat <<-EOF >expect-all
	f: test: f
	a/f: test: f
	a/c/f: test: f
	a/g: test: a/g
	a/b/g: test: a/b/g
	b/g: test: unspecified
	a/b/h: test: a/b/h
	a/b/d/g: test: a/b/d/*
	onoff: test: unset
	offon: test: set
	no: notest: set
	no: test: unspecified
	a/b/d/no: notest: set
	a/b/d/no: test: a/b/d/*
	a/b/d/yes: notest: set
	a/b/d/yes: test: unspecified
	EOF

ok 2 - setup

expecting success of 0003.3 'command line checks': 
	test_must_fail git check-attr &&
	test_must_fail git check-attr -- &&
	test_must_fail git check-attr test &&
	test_must_fail git check-attr test -- &&
	test_must_fail git check-attr -- f &&
	echo "f" | test_must_fail git check-attr --stdin &&
	echo "f" | test_must_fail git check-attr --stdin -- f &&
	echo "f" | test_must_fail git check-attr --stdin test -- f &&
	test_must_fail git check-attr "" -- f

error: No attribute specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No attribute specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No file specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No file specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No attribute specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No attribute specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: No attribute specified
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: Can't specify files with --stdin
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
   or: git check-attr --stdin [-z] [-a | --all | <attr>...]

    -a, --all             report all attributes set on file
    --cached              use .gitattributes only from the index
    --stdin               read file names from stdin
    -z                    terminate input and output records by a NUL character

error: : not a valid attribute name
ok 3 - command line checks

expecting success of 0003.4 'attribute test': 

	attr_check " d " d &&
	attr_check e e &&
	attr_check_quote e\" e\\\" e &&

	attr_check f f &&
	attr_check a/f f &&
	attr_check a/c/f f &&
	attr_check a/g a/g &&
	attr_check a/b/g a/b/g &&
	attr_check b/g unspecified &&
	attr_check a/b/h a/b/h &&
	attr_check a/b/d/g "a/b/d/*" &&
	attr_check onoff unset &&
	attr_check offon set &&
	attr_check no unspecified &&
	attr_check a/b/d/no "a/b/d/*" &&
	attr_check a/b/d/yes unspecified

ok 4 - attribute test

expecting success of 0003.5 'attribute matching is case sensitive when core.ignorecase=0': 

	attr_check F unspecified "-c core.ignorecase=0" &&
	attr_check a/F unspecified "-c core.ignorecase=0" &&
	attr_check a/c/F unspecified "-c core.ignorecase=0" &&
	attr_check a/G unspecified "-c core.ignorecase=0" &&
	attr_check a/B/g a/g "-c core.ignorecase=0" &&
	attr_check a/b/G unspecified "-c core.ignorecase=0" &&
	attr_check a/b/H unspecified "-c core.ignorecase=0" &&
	attr_check a/b/D/g a/g "-c core.ignorecase=0" &&
	attr_check oNoFf unspecified "-c core.ignorecase=0" &&
	attr_check oFfOn unspecified "-c core.ignorecase=0" &&
	attr_check NO unspecified "-c core.ignorecase=0" &&
	attr_check a/b/D/NO unspecified "-c core.ignorecase=0" &&
	attr_check a/b/d/YES a/b/d/* "-c core.ignorecase=0" &&
	attr_check a/E/f f "-c core.ignorecase=0"


ok 5 - attribute matching is case sensitive when core.ignorecase=0

expecting success of 0003.6 'attribute matching is case insensitive when core.ignorecase=1': 

	attr_check F f "-c core.ignorecase=1" &&
	attr_check a/F f "-c core.ignorecase=1" &&
	attr_check a/c/F f "-c core.ignorecase=1" &&
	attr_check a/G a/g "-c core.ignorecase=1" &&
	attr_check a/B/g a/b/g "-c core.ignorecase=1" &&
	attr_check a/b/G a/b/g "-c core.ignorecase=1" &&
	attr_check a/b/H a/b/h "-c core.ignorecase=1" &&
	attr_check a/b/D/g "a/b/d/*" "-c core.ignorecase=1" &&
	attr_check oNoFf unset "-c core.ignorecase=1" &&
	attr_check oFfOn set "-c core.ignorecase=1" &&
	attr_check NO unspecified "-c core.ignorecase=1" &&
	attr_check a/b/D/NO "a/b/d/*" "-c core.ignorecase=1" &&
	attr_check a/b/d/YES unspecified "-c core.ignorecase=1" &&
	attr_check a/E/f "A/e/F" "-c core.ignorecase=1"


ok 6 - attribute matching is case insensitive when core.ignorecase=1

checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 7 # skip additional case insensitivity tests (missing CASE_INSENSITIVE_FS)

expecting success of 0003.8 'unnormalized paths': 
	attr_check ./f f &&
	attr_check ./a/g a/g &&
	attr_check a/./g a/g &&
	attr_check a/c/../b/g a/b/g

ok 8 - unnormalized paths

expecting success of 0003.9 'relative paths': 
	(cd a && attr_check ../f f) &&
	(cd a && attr_check f f) &&
	(cd a && attr_check i a/i) &&
	(cd a && attr_check g a/g) &&
	(cd a && attr_check b/g a/b/g) &&
	(cd b && attr_check ../a/f f) &&
	(cd b && attr_check ../a/g a/g) &&
	(cd b && attr_check ../a/b/g a/b/g)

ok 9 - relative paths

expecting success of 0003.10 'prefixes are not confused with leading directories': 
	attr_check a_plus/g unspecified &&
	cat >expect <<-\EOF &&
	a/g: test: a/g
	a_plus/g: test: unspecified
	EOF
	git check-attr test a/g a_plus/g >actual &&
	test_cmp expect actual

ok 10 - prefixes are not confused with leading directories

expecting success of 0003.11 'core.attributesfile': 
	attr_check global unspecified &&
	git config core.attributesfile "$HOME/global-gitattributes" &&
	attr_check global global &&
	git config core.attributesfile "~/global-gitattributes" &&
	attr_check global global &&
	echo "global test=precedence" >>.gitattributes &&
	attr_check global precedence

ok 11 - core.attributesfile

expecting success of 0003.12 'attribute test: read paths from stdin': 
	grep -v notest <expect-all >expect &&
	sed -e "s/:.*//" <expect | git check-attr --stdin test >actual &&
	test_cmp expect actual

ok 12 - attribute test: read paths from stdin

expecting success of 0003.13 'attribute test: --all option': 
	grep -v unspecified <expect-all | sort >specified-all &&
	sed -e "s/:.*//" <expect-all | uniq >stdin-all &&
	git check-attr --stdin --all <stdin-all >tmp &&
	sort tmp >actual &&
	test_cmp specified-all actual

ok 13 - attribute test: --all option

expecting success of 0003.14 'attribute test: --cached option': 
	git check-attr --cached --stdin --all <stdin-all >tmp &&
	sort tmp >actual &&
	test_must_be_empty actual &&
	git add .gitattributes a/.gitattributes a/b/.gitattributes &&
	git check-attr --cached --stdin --all <stdin-all >tmp &&
	sort tmp >actual &&
	test_cmp specified-all actual

ok 14 - attribute test: --cached option

expecting success of 0003.15 'root subdir attribute test': 
	attr_check a/i a/i &&
	attr_check subdir/a/i unspecified

ok 15 - root subdir attribute test

expecting success of 0003.16 'negative patterns': 
	echo "!f test=bar" >.gitattributes &&
	git check-attr test -- '!f' 2>errors &&
	test_i18ngrep "Negative patterns are ignored" errors

!f: test: unspecified
warning: Negative patterns are ignored in git attributes
ok 16 - negative patterns

expecting success of 0003.17 'patterns starting with exclamation': 
	echo "\!f test=foo" >.gitattributes &&
	attr_check "!f" foo

ok 17 - patterns starting with exclamation

expecting success of 0003.18 '"**" test': 
	echo "**/f foo=bar" >.gitattributes &&
	cat <<\EOF >expect &&
f: foo: bar
a/f: foo: bar
a/b/f: foo: bar
a/b/c/f: foo: bar
EOF
	git check-attr foo -- "f" >actual 2>err &&
	git check-attr foo -- "a/f" >>actual 2>>err &&
	git check-attr foo -- "a/b/f" >>actual 2>>err &&
	git check-attr foo -- "a/b/c/f" >>actual 2>>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 18 - "**" test

expecting success of 0003.19 '"**" with no slashes test': 
	echo "a**f foo=bar" >.gitattributes &&
	git check-attr foo -- "f" >actual &&
	cat <<\EOF >expect &&
f: foo: unspecified
af: foo: bar
axf: foo: bar
a/f: foo: unspecified
a/b/f: foo: unspecified
a/b/c/f: foo: unspecified
EOF
	git check-attr foo -- "f" >actual 2>err &&
	git check-attr foo -- "af" >>actual 2>err &&
	git check-attr foo -- "axf" >>actual 2>err &&
	git check-attr foo -- "a/f" >>actual 2>>err &&
	git check-attr foo -- "a/b/f" >>actual 2>>err &&
	git check-attr foo -- "a/b/c/f" >>actual 2>>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 19 - "**" with no slashes test

expecting success of 0003.20 'using --git-dir and --work-tree': 
	mkdir unreal real &&
	git init real &&
	echo "file test=in-real" >real/.gitattributes &&
	(
		cd unreal &&
		attr_check file in-real "--git-dir ../real/.git --work-tree ../real"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0003-attributes/real/.git/
ok 20 - using --git-dir and --work-tree

expecting success of 0003.21 'setup bare': 
	git clone --template= --bare . bare.git

Cloning into bare repository 'bare.git'...
warning: You appear to have cloned an empty repository.
done.
ok 21 - setup bare

expecting success of 0003.22 'bare repository: check that .gitattribute is ignored': 
	(
		cd bare.git &&
		(
			echo "f	test=f" &&
			echo "a/i test=a/i"
		) >.gitattributes &&
		attr_check f unspecified &&
		attr_check a/f unspecified &&
		attr_check a/c/f unspecified &&
		attr_check a/i unspecified &&
		attr_check subdir/a/i unspecified
	)

ok 22 - bare repository: check that .gitattribute is ignored

expecting success of 0003.23 'bare repository: check that --cached honors index': 
	(
		cd bare.git &&
		GIT_INDEX_FILE=../.git/index \
		git check-attr --cached --stdin --all <../stdin-all |
		sort >actual &&
		test_cmp ../specified-all actual
	)

ok 23 - bare repository: check that --cached honors index

expecting success of 0003.24 'bare repository: test info/attributes': 
	(
		cd bare.git &&
		mkdir info &&
		(
			echo "f	test=f" &&
			echo "a/i test=a/i"
		) >info/attributes &&
		attr_check f f &&
		attr_check a/f f &&
		attr_check a/c/f f &&
		attr_check a/i a/i &&
		attr_check subdir/a/i unspecified
	)

ok 24 - bare repository: test info/attributes

expecting success of 0003.25 'binary macro expanded by -a': 
	echo "file binary" >.gitattributes &&
	cat >expect <<-\EOF &&
	file: binary: set
	file: diff: unset
	file: merge: unset
	file: text: unset
	EOF
	git check-attr -a file >actual &&
	test_cmp expect actual

ok 25 - binary macro expanded by -a

expecting success of 0003.26 'query binary macro directly': 
	echo "file binary" >.gitattributes &&
	echo file: binary: set >expect &&
	git check-attr binary file >actual &&
	test_cmp expect actual

ok 26 - query binary macro directly

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0003.27 'set up symlink tests': 
	echo "* test" >attr &&
	rm -f .gitattributes

ok 27 - set up symlink tests

expecting success of 0003.28 'symlinks respected in core.attributesFile': 
	test_when_finished "rm symlink" &&
	ln -s attr symlink &&
	test_config core.attributesFile "$(pwd)/symlink" &&
	attr_check file set

ok 28 - symlinks respected in core.attributesFile

expecting success of 0003.29 'symlinks respected in info/attributes': 
	test_when_finished "rm .git/info/attributes" &&
	mkdir .git/info &&
	ln -s ../../attr .git/info/attributes &&
	attr_check file set

ok 29 - symlinks respected in info/attributes

expecting success of 0003.30 'symlinks not respected in-tree': 
	test_when_finished "rm -rf .gitattributes subdir" &&
	ln -s attr .gitattributes &&
	mkdir subdir &&
	ln -s ../attr subdir/.gitattributes &&
	attr_check_basic subdir/file unspecified &&
	test_i18ngrep "unable to access.*gitattributes" err

warning: unable to access '.gitattributes': Too many levels of symbolic links
warning: unable to access 'subdir/.gitattributes': Too many levels of symbolic links
ok 30 - symlinks not respected in-tree

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0007-git-var.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0007-git-var/.git/
expecting success of 0007.1 'get GIT_AUTHOR_IDENT': 
	test_tick &&
	echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	git var GIT_AUTHOR_IDENT >actual &&
	test_cmp expect actual

ok 1 - get GIT_AUTHOR_IDENT

expecting success of 0007.2 'get GIT_COMMITTER_IDENT': 
	test_tick &&
	echo "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE" >expect &&
	git var GIT_COMMITTER_IDENT >actual &&
	test_cmp expect actual

ok 2 - get GIT_COMMITTER_IDENT

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
checking prerequisite: AUTOIDENT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
	sane_unset GIT_AUTHOR_NAME &&
	sane_unset GIT_AUTHOR_EMAIL &&
	git var GIT_AUTHOR_IDENT

)
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'buildd@testwandboard.(none)')
prerequisite AUTOIDENT not satisfied
expecting success of 0007.3 'requested identities are strict': 
	(
		sane_unset GIT_COMMITTER_NAME &&
		sane_unset GIT_COMMITTER_EMAIL &&
		test_must_fail git var GIT_COMMITTER_IDENT
	)

Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'buildd@testwandboard.(none)')
ok 3 - requested identities are strict

expecting success of 0007.4 'get GIT_DEFAULT_BRANCH without configuration': 
	(
		sane_unset GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME &&
		git init defbranch &&
		git -C defbranch symbolic-ref --short HEAD >expect &&
		git var GIT_DEFAULT_BRANCH >actual &&
		test_cmp expect actual
	)

hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0007-git-var/defbranch/.git/
ok 4 - get GIT_DEFAULT_BRANCH without configuration

expecting success of 0007.5 'get GIT_DEFAULT_BRANCH with configuration': 
	test_config init.defaultbranch foo &&
	(
		sane_unset GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME &&
		echo foo >expect &&
		git var GIT_DEFAULT_BRANCH >actual &&
		test_cmp expect actual
	)

ok 5 - get GIT_DEFAULT_BRANCH with configuration

expecting success of 0007.6 'git var -l lists variables': 
	git var -l >actual &&
	echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	sed -n s/GIT_AUTHOR_IDENT=//p <actual >actual.author &&
	test_cmp expect actual.author

ok 6 - git var -l lists variables

expecting success of 0007.7 'git var -l lists config': 
	git var -l >actual &&
	echo false >expect &&
	sed -n s/core\\.bare=//p <actual >actual.bare &&
	test_cmp expect actual.bare

ok 7 - git var -l lists config

expecting success of 0007.8 'listing and asking for variables are exclusive': 
	test_must_fail git var -l GIT_COMMITTER_IDENT

usage: git var (-l | <variable>)
ok 8 - listing and asking for variables are exclusive

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0006-date.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0006-date/.git/
expecting success of 0006.1 'relative date (5 seconds ago)': 
	test-tool date relative 1251659995 >actual &&
	test_cmp expect actual
	
ok 1 - relative date (5 seconds ago)

expecting success of 0006.2 'relative date (5 minutes ago)': 
	test-tool date relative 1251659700 >actual &&
	test_cmp expect actual
	
ok 2 - relative date (5 minutes ago)

expecting success of 0006.3 'relative date (5 hours ago)': 
	test-tool date relative 1251642000 >actual &&
	test_cmp expect actual
	
ok 3 - relative date (5 hours ago)

expecting success of 0006.4 'relative date (5 days ago)': 
	test-tool date relative 1251228000 >actual &&
	test_cmp expect actual
	
ok 4 - relative date (5 days ago)

expecting success of 0006.5 'relative date (3 weeks ago)': 
	test-tool date relative 1249932000 >actual &&
	test_cmp expect actual
	
ok 5 - relative date (3 weeks ago)

expecting success of 0006.6 'relative date (5 months ago)': 
	test-tool date relative 1238660000 >actual &&
	test_cmp expect actual
	
ok 6 - relative date (5 months ago)

expecting success of 0006.7 'relative date (1 year, 2 months ago)': 
	test-tool date relative 1214160000 >actual &&
	test_cmp expect actual
	
ok 7 - relative date (1 year, 2 months ago)

expecting success of 0006.8 'relative date (1 year, 9 months ago)': 
	test-tool date relative 1196472000 >actual &&
	test_cmp expect actual
	
ok 8 - relative date (1 year, 9 months ago)

expecting success of 0006.9 'relative date (20 years ago)': 
	test-tool date relative 621660000 >actual &&
	test_cmp expect actual
	
ok 9 - relative date (20 years ago)

expecting success of 0006.10 'relative date (12 months ago)': 
	test-tool date relative 1220210400 >actual &&
	test_cmp expect actual
	
ok 10 - relative date (12 months ago)

expecting success of 0006.11 'relative date (2 years ago)': 
	test-tool date relative 1188674400 >actual &&
	test_cmp expect actual
	
ok 11 - relative date (2 years ago)

expecting success of 0006.12 'show date (iso8601:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 12 - show date (iso8601:1466000000 +0200)

expecting success of 0006.13 'show date (iso8601-strict:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 13 - show date (iso8601-strict:1466000000 +0200)

expecting success of 0006.14 'show date (rfc2822:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 14 - show date (rfc2822:1466000000 +0200)

expecting success of 0006.15 'show date (short:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 15 - show date (short:1466000000 +0200)

expecting success of 0006.16 'show date (default:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 16 - show date (default:1466000000 +0200)

expecting success of 0006.17 'show date (raw:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 17 - show date (raw:1466000000 +0200)

expecting success of 0006.18 'show date (unix:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 18 - show date (unix:1466000000 +0200)

expecting success of 0006.19 'show date (iso-local:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 19 - show date (iso-local:1466000000 +0200)

expecting success of 0006.20 'show date (raw-local:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 20 - show date (raw-local:1466000000 +0200)

expecting success of 0006.21 'show date (unix-local:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 21 - show date (unix-local:1466000000 +0200)

expecting success of 0006.22 'show date (format:%z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 22 - show date (format:%z:1466000000 +0200)

expecting success of 0006.23 'show date (format-local:%z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 23 - show date (format-local:%z:1466000000 +0200)

expecting success of 0006.24 'show date (format:%Z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 24 - show date (format:%Z:1466000000 +0200)

expecting success of 0006.25 'show date (format-local:%Z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 25 - show date (format-local:%Z:1466000000 +0200)

expecting success of 0006.26 'show date (format:%%z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 26 - show date (format:%%z:1466000000 +0200)

expecting success of 0006.27 'show date (format-local:%%z:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 27 - show date (format-local:%%z:1466000000 +0200)

expecting success of 0006.28 'show date (format:%Y-%m-%d %H:%M:%S:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 28 - show date (format:%Y-%m-%d %H:%M:%S:1466000000 +0200)

expecting success of 0006.29 'show date (format-local:%Y-%m-%d %H:%M:%S:1466000000 +0200)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 29 - show date (format-local:%Y-%m-%d %H:%M:%S:1466000000 +0200)

expecting success of 0006.30 'show date (format:%s:123456789 +1234)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 30 - show date (format:%s:123456789 +1234)

expecting success of 0006.31 'show date (format:%s:123456789 -1234)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 31 - show date (format:%s:123456789 -1234)

expecting success of 0006.32 'show date (format-local:%s:123456789 -1234)': 
		echo "$time -> $expect" >expect &&
		TZ=${zone:-$TZ} test-tool date show:"$format" "$time" >actual &&
		test_cmp expect actual
	
ok 32 - show date (format-local:%s:123456789 -1234)

checking prerequisite: TIME_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&test-tool date is64bit
)
prerequisite TIME_IS_64BIT ok
checking prerequisite: TIME_T_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&test-tool date time_t-is64bit
)
prerequisite TIME_T_IS_64BIT not satisfied
ok 33 # skip show date (iso:5758122296 -0400) (missing TIME_T_IS_64BIT of TIME_IS_64BIT,TIME_T_IS_64BIT)

ok 34 # skip show date (iso-local:5758122296 -0400) (missing TIME_T_IS_64BIT of TIME_IS_64BIT,TIME_T_IS_64BIT)

expecting success of 0006.35 'parse date (2008)': 
	TZ=UTC test-tool date parse '2008' >actual &&
	test_cmp expect actual
	
ok 35 - parse date (2008)

expecting success of 0006.36 'parse date (2008-02)': 
	TZ=UTC test-tool date parse '2008-02' >actual &&
	test_cmp expect actual
	
ok 36 - parse date (2008-02)

expecting success of 0006.37 'parse date (2008-02-14)': 
	TZ=UTC test-tool date parse '2008-02-14' >actual &&
	test_cmp expect actual
	
ok 37 - parse date (2008-02-14)

expecting success of 0006.38 'parse date (2008-02-14 20:30:45)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45' >actual &&
	test_cmp expect actual
	
ok 38 - parse date (2008-02-14 20:30:45)

expecting success of 0006.39 'parse date (2008-02-14 20:30:45 -0500)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -0500' >actual &&
	test_cmp expect actual
	
ok 39 - parse date (2008-02-14 20:30:45 -0500)

expecting success of 0006.40 'parse date (2008.02.14 20:30:45 -0500)': 
	TZ=UTC test-tool date parse '2008.02.14 20:30:45 -0500' >actual &&
	test_cmp expect actual
	
ok 40 - parse date (2008.02.14 20:30:45 -0500)

expecting success of 0006.41 'parse date (20080214T203045-04:00)': 
	TZ=UTC test-tool date parse '20080214T203045-04:00' >actual &&
	test_cmp expect actual
	
ok 41 - parse date (20080214T203045-04:00)

expecting success of 0006.42 'parse date (20080214T203045 -04:00)': 
	TZ=UTC test-tool date parse '20080214T203045 -04:00' >actual &&
	test_cmp expect actual
	
ok 42 - parse date (20080214T203045 -04:00)

expecting success of 0006.43 'parse date (20080214T203045.019-04:00)': 
	TZ=UTC test-tool date parse '20080214T203045.019-04:00' >actual &&
	test_cmp expect actual
	
ok 43 - parse date (20080214T203045.019-04:00)

expecting success of 0006.44 'parse date (2008-02-14 20:30:45.019-04:00)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45.019-04:00' >actual &&
	test_cmp expect actual
	
ok 44 - parse date (2008-02-14 20:30:45.019-04:00)

expecting success of 0006.45 'parse date (2008-02-14 20:30:45 -0015)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -0015' >actual &&
	test_cmp expect actual
	
ok 45 - parse date (2008-02-14 20:30:45 -0015)

expecting success of 0006.46 'parse date (2008-02-14 20:30:45 -5)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -5' >actual &&
	test_cmp expect actual
	
ok 46 - parse date (2008-02-14 20:30:45 -5)

expecting success of 0006.47 'parse date (2008-02-14 20:30:45 -5:)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -5:' >actual &&
	test_cmp expect actual
	
ok 47 - parse date (2008-02-14 20:30:45 -5:)

expecting success of 0006.48 'parse date (2008-02-14 20:30:45 -05)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -05' >actual &&
	test_cmp expect actual
	
ok 48 - parse date (2008-02-14 20:30:45 -05)

expecting success of 0006.49 'parse date (2008-02-14 20:30:45 -:30)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -:30' >actual &&
	test_cmp expect actual
	
ok 49 - parse date (2008-02-14 20:30:45 -:30)

expecting success of 0006.50 'parse date (2008-02-14 20:30:45 -05:00)': 
	TZ=UTC test-tool date parse '2008-02-14 20:30:45 -05:00' >actual &&
	test_cmp expect actual
	
ok 50 - parse date (2008-02-14 20:30:45 -05:00)

expecting success of 0006.51 'parse date (2008-02-14 20:30:45 TZ=EST5)': 
	TZ=EST5 test-tool date parse '2008-02-14 20:30:45' >actual &&
	test_cmp expect actual
	
ok 51 - parse date (2008-02-14 20:30:45 TZ=EST5)

expecting success of 0006.52 'parse approxidate (now)': 
	test-tool date approxidate 'now' >actual &&
	test_cmp expect actual
	
ok 52 - parse approxidate (now)

expecting success of 0006.53 'parse approxidate (5 seconds ago)': 
	test-tool date approxidate '5 seconds ago' >actual &&
	test_cmp expect actual
	
ok 53 - parse approxidate (5 seconds ago)

expecting success of 0006.54 'parse approxidate (5.seconds.ago)': 
	test-tool date approxidate '5.seconds.ago' >actual &&
	test_cmp expect actual
	
ok 54 - parse approxidate (5.seconds.ago)

expecting success of 0006.55 'parse approxidate (10.minutes.ago)': 
	test-tool date approxidate '10.minutes.ago' >actual &&
	test_cmp expect actual
	
ok 55 - parse approxidate (10.minutes.ago)

expecting success of 0006.56 'parse approxidate (yesterday)': 
	test-tool date approxidate 'yesterday' >actual &&
	test_cmp expect actual
	
ok 56 - parse approxidate (yesterday)

expecting success of 0006.57 'parse approxidate (3.days.ago)': 
	test-tool date approxidate '3.days.ago' >actual &&
	test_cmp expect actual
	
ok 57 - parse approxidate (3.days.ago)

expecting success of 0006.58 'parse approxidate (12:34:56.3.days.ago)': 
	test-tool date approxidate '12:34:56.3.days.ago' >actual &&
	test_cmp expect actual
	
ok 58 - parse approxidate (12:34:56.3.days.ago)

expecting success of 0006.59 'parse approxidate (3.weeks.ago)': 
	test-tool date approxidate '3.weeks.ago' >actual &&
	test_cmp expect actual
	
ok 59 - parse approxidate (3.weeks.ago)

expecting success of 0006.60 'parse approxidate (3.months.ago)': 
	test-tool date approxidate '3.months.ago' >actual &&
	test_cmp expect actual
	
ok 60 - parse approxidate (3.months.ago)

expecting success of 0006.61 'parse approxidate (2.years.3.months.ago)': 
	test-tool date approxidate '2.years.3.months.ago' >actual &&
	test_cmp expect actual
	
ok 61 - parse approxidate (2.years.3.months.ago)

expecting success of 0006.62 'parse approxidate (6am yesterday)': 
	test-tool date approxidate '6am yesterday' >actual &&
	test_cmp expect actual
	
ok 62 - parse approxidate (6am yesterday)

expecting success of 0006.63 'parse approxidate (6pm yesterday)': 
	test-tool date approxidate '6pm yesterday' >actual &&
	test_cmp expect actual
	
ok 63 - parse approxidate (6pm yesterday)

expecting success of 0006.64 'parse approxidate (3:00)': 
	test-tool date approxidate '3:00' >actual &&
	test_cmp expect actual
	
ok 64 - parse approxidate (3:00)

expecting success of 0006.65 'parse approxidate (15:00)': 
	test-tool date approxidate '15:00' >actual &&
	test_cmp expect actual
	
ok 65 - parse approxidate (15:00)

expecting success of 0006.66 'parse approxidate (noon today)': 
	test-tool date approxidate 'noon today' >actual &&
	test_cmp expect actual
	
ok 66 - parse approxidate (noon today)

expecting success of 0006.67 'parse approxidate (noon yesterday)': 
	test-tool date approxidate 'noon yesterday' >actual &&
	test_cmp expect actual
	
ok 67 - parse approxidate (noon yesterday)

expecting success of 0006.68 'parse approxidate (January 5th noon pm)': 
	test-tool date approxidate 'January 5th noon pm' >actual &&
	test_cmp expect actual
	
ok 68 - parse approxidate (January 5th noon pm)

expecting success of 0006.69 'parse approxidate (10am noon)': 
	test-tool date approxidate '10am noon' >actual &&
	test_cmp expect actual
	
ok 69 - parse approxidate (10am noon)

expecting success of 0006.70 'parse approxidate (last tuesday)': 
	test-tool date approxidate 'last tuesday' >actual &&
	test_cmp expect actual
	
ok 70 - parse approxidate (last tuesday)

expecting success of 0006.71 'parse approxidate (July 5th)': 
	test-tool date approxidate 'July 5th' >actual &&
	test_cmp expect actual
	
ok 71 - parse approxidate (July 5th)

expecting success of 0006.72 'parse approxidate (06/05/2009)': 
	test-tool date approxidate '06/05/2009' >actual &&
	test_cmp expect actual
	
ok 72 - parse approxidate (06/05/2009)

expecting success of 0006.73 'parse approxidate (06.05.2009)': 
	test-tool date approxidate '06.05.2009' >actual &&
	test_cmp expect actual
	
ok 73 - parse approxidate (06.05.2009)

expecting success of 0006.74 'parse approxidate (Jun 6, 5AM)': 
	test-tool date approxidate 'Jun 6, 5AM' >actual &&
	test_cmp expect actual
	
ok 74 - parse approxidate (Jun 6, 5AM)

expecting success of 0006.75 'parse approxidate (5AM Jun 6)': 
	test-tool date approxidate '5AM Jun 6' >actual &&
	test_cmp expect actual
	
ok 75 - parse approxidate (5AM Jun 6)

expecting success of 0006.76 'parse approxidate (6AM, June 7, 2009)': 
	test-tool date approxidate '6AM, June 7, 2009' >actual &&
	test_cmp expect actual
	
ok 76 - parse approxidate (6AM, June 7, 2009)

expecting success of 0006.77 'parse approxidate (2008-12-01)': 
	test-tool date approxidate '2008-12-01' >actual &&
	test_cmp expect actual
	
ok 77 - parse approxidate (2008-12-01)

expecting success of 0006.78 'parse approxidate (2009-12-01)': 
	test-tool date approxidate '2009-12-01' >actual &&
	test_cmp expect actual
	
ok 78 - parse approxidate (2009-12-01)

expecting success of 0006.79 'human date 1251642000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 79 - human date 1251642000

expecting success of 0006.80 'human date 1251228000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 80 - human date 1251228000

expecting success of 0006.81 'human date 1249932000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 81 - human date 1249932000

expecting success of 0006.82 'human date 1238660000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 82 - human date 1238660000

expecting success of 0006.83 'human date 1220210400': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 83 - human date 1220210400

expecting success of 0006.84 'human date 1214160000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 84 - human date 1214160000

expecting success of 0006.85 'human date 1196472000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 85 - human date 1196472000

expecting success of 0006.86 'human date 621660000': 
		test-tool date human $t >actual &&
		test_cmp expect actual

ok 86 - human date 621660000

# passed all 86 test(s)
1..86
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0009-prio-queue.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0009-prio-queue/.git/
expecting success of 0009.1 'basic ordering': 
	test-tool prio-queue 2 6 3 10 9 5 7 4 5 8 1 dump >actual &&
	test_cmp expect actual

ok 1 - basic ordering

expecting success of 0009.2 'mixed put and get': 
	test-tool prio-queue 6 2 4 get 5 3 get get 1 dump >actual &&
	test_cmp expect actual

ok 2 - mixed put and get

expecting success of 0009.3 'notice empty queue': 
	test-tool prio-queue 1 2 get get get 1 2 get get get >actual &&
	test_cmp expect actual

ok 3 - notice empty queue

expecting success of 0009.4 'stack order': 
	test-tool prio-queue stack 8 1 5 4 6 2 3 dump >actual &&
	test_cmp expect actual

ok 4 - stack order

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0001-init.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/.git/
expecting success of 0001.1 'plain': 
	git init plain &&
	check_config plain/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/plain/.git/
ok 1 - plain

expecting success of 0001.2 'plain nested in bare': 
	(
		git init --bare bare-ancestor.git &&
		cd bare-ancestor.git &&
		mkdir plain-nested &&
		cd plain-nested &&
		git init
	) &&
	check_config bare-ancestor.git/plain-nested/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/bare-ancestor.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/bare-ancestor.git/plain-nested/.git/
ok 2 - plain nested in bare

expecting success of 0001.3 'plain through aliased command, outside any git repo': 
	(
		HOME=$(pwd)/alias-config &&
		export HOME &&
		mkdir alias-config &&
		echo "[alias] aliasedinit = init" >alias-config/.gitconfig &&

		GIT_CEILING_DIRECTORIES=$(pwd) &&
		export GIT_CEILING_DIRECTORIES &&

		mkdir plain-aliased &&
		cd plain-aliased &&
		git aliasedinit
	) &&
	check_config plain-aliased/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/plain-aliased/.git/
ok 3 - plain through aliased command, outside any git repo

expecting success of 0001.4 'plain nested through aliased command': 
	(
		git init plain-ancestor-aliased &&
		cd plain-ancestor-aliased &&
		echo "[alias] aliasedinit = init" >>.git/config &&
		mkdir plain-nested &&
		cd plain-nested &&
		git aliasedinit
	) &&
	check_config plain-ancestor-aliased/plain-nested/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/plain-ancestor-aliased/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/plain-ancestor-aliased/plain-nested/.git/
ok 4 - plain nested through aliased command

expecting success of 0001.5 'plain nested in bare through aliased command': 
	(
		git init --bare bare-ancestor-aliased.git &&
		cd bare-ancestor-aliased.git &&
		echo "[alias] aliasedinit = init" >>config &&
		mkdir plain-nested &&
		cd plain-nested &&
		git aliasedinit
	) &&
	check_config bare-ancestor-aliased.git/plain-nested/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/bare-ancestor-aliased.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/bare-ancestor-aliased.git/plain-nested/.git/
ok 5 - plain nested in bare through aliased command

expecting success of 0001.6 'No extra GIT_* on alias scripts': 
	write_script script <<-\EOF &&
	env |
		sed -n \
			-e "/^GIT_PREFIX=/d" \
			-e "/^GIT_TEXTDOMAINDIR=/d" \
			-e "/^GIT_TRACE2_PARENT/d" \
			-e "/^GIT_/s/=.*//p" |
		sort
	EOF
	./script >expected &&
	git config alias.script \!./script &&
	( mkdir sub && cd sub && git script >../actual ) &&
	test_cmp expected actual

ok 6 - No extra GIT_* on alias scripts

expecting success of 0001.7 'plain with GIT_WORK_TREE': 
	mkdir plain-wt &&
	test_must_fail env GIT_WORK_TREE="$(pwd)/plain-wt" git init plain-wt

fatal: GIT_WORK_TREE (or --work-tree=<directory>) not allowed without specifying GIT_DIR (or --git-dir=<directory>)
ok 7 - plain with GIT_WORK_TREE

expecting success of 0001.8 'plain bare': 
	git --bare init plain-bare-1 &&
	check_config plain-bare-1 true unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/plain-bare-1/
ok 8 - plain bare

expecting success of 0001.9 'plain bare with GIT_WORK_TREE': 
	mkdir plain-bare-2 &&
	test_must_fail \
		env GIT_WORK_TREE="$(pwd)/plain-bare-2" \
		git --bare init plain-bare-2

fatal: GIT_WORK_TREE (or --work-tree=<directory>) not allowed without specifying GIT_DIR (or --git-dir=<directory>)
ok 9 - plain bare with GIT_WORK_TREE

expecting success of 0001.10 'GIT_DIR bare': 
	mkdir git-dir-bare.git &&
	GIT_DIR=git-dir-bare.git git init &&
	check_config git-dir-bare.git true unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/git-dir-bare.git/
ok 10 - GIT_DIR bare

expecting success of 0001.11 'init --bare': 
	git init --bare init-bare.git &&
	check_config init-bare.git true unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/init-bare.git/
ok 11 - init --bare

expecting success of 0001.12 'GIT_DIR non-bare': 

	(
		mkdir non-bare &&
		cd non-bare &&
		GIT_DIR=.git git init
	) &&
	check_config non-bare/.git false unset

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/non-bare/.git/
ok 12 - GIT_DIR non-bare

expecting success of 0001.13 'GIT_DIR & GIT_WORK_TREE (1)': 

	(
		mkdir git-dir-wt-1.git &&
		GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-1.git git init
	) &&
	check_config git-dir-wt-1.git false "$(pwd)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/git-dir-wt-1.git/
ok 13 - GIT_DIR & GIT_WORK_TREE (1)

expecting success of 0001.14 'GIT_DIR & GIT_WORK_TREE (2)': 
	mkdir git-dir-wt-2.git &&
	test_must_fail env \
		GIT_WORK_TREE="$(pwd)" \
		GIT_DIR=git-dir-wt-2.git \
		git --bare init

fatal: GIT_WORK_TREE (or --work-tree=<directory>) not allowed without specifying GIT_DIR (or --git-dir=<directory>)
ok 14 - GIT_DIR & GIT_WORK_TREE (2)

expecting success of 0001.15 'reinit': 

	(
		mkdir again &&
		cd again &&
		git -c init.defaultBranch=initial init >out1 2>err1 &&
		git init >out2 2>err2
	) &&
	test_i18ngrep "Initialized empty" again/out1 &&
	test_i18ngrep "Reinitialized existing" again/out2 &&
	test_must_be_empty again/err1 &&
	test_must_be_empty again/err2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/again/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/again/.git/
ok 15 - reinit

expecting success of 0001.16 'init with --template': 
	mkdir template-source &&
	echo content >template-source/file &&
	git init --template=template-source template-custom &&
	test_cmp template-source/file template-custom/.git/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/template-custom/.git/
ok 16 - init with --template

expecting success of 0001.17 'init with --template (blank)': 
	git init template-plain &&
	test_path_is_file template-plain/.git/info/exclude &&
	git init --template= template-blank &&
	test_path_is_missing template-blank/.git/info/exclude

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/template-plain/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/template-blank/.git/
ok 17 - init with --template (blank)

expecting success of 0001.18 'init with init.templatedir set': 
	mkdir templatedir-source &&
	echo Content >templatedir-source/file &&
	test_config_global init.templatedir "${HOME}/templatedir-source" &&

	init_no_templatedir_env templatedir-set &&
	test_cmp templatedir-source/file templatedir-set/.git/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/templatedir-set/.git/
ok 18 - init with init.templatedir set

expecting success of 0001.19 'init with init.templatedir using ~ expansion': 
	mkdir -p templatedir-source &&
	echo Content >templatedir-source/file &&
	test_config_global init.templatedir "~/templatedir-source" &&

	init_no_templatedir_env templatedir-expansion &&
	test_cmp templatedir-source/file templatedir-expansion/.git/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/templatedir-expansion/.git/
ok 19 - init with init.templatedir using ~ expansion

expecting success of 0001.20 'init --bare/--shared overrides system/global config': 
	test_config_global core.bare false &&
	test_config_global core.sharedRepository 0640 &&
	git init --bare --shared=0666 init-bare-shared-override &&
	check_config init-bare-shared-override true unset &&
	test x0666 = \
	x$(git config -f init-bare-shared-override/config core.sharedRepository)

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/init-bare-shared-override/
ok 20 - init --bare/--shared overrides system/global config

expecting success of 0001.21 'init honors global core.sharedRepository': 
	test_config_global core.sharedRepository 0666 &&
	git init shared-honor-global &&
	test x0666 = \
	x$(git config -f shared-honor-global/.git/config core.sharedRepository)

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/shared-honor-global/.git/
ok 21 - init honors global core.sharedRepository

expecting success of 0001.22 'init allows insanely long --template': 
	git init --template=$(printf "x%09999dx" 1) test

warning: templates not found in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/test/.git/
ok 22 - init allows insanely long --template

expecting success of 0001.23 'init creates a new directory': 
	rm -fr newdir &&
	git init newdir &&
	test_path_is_dir newdir/.git/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/.git/
ok 23 - init creates a new directory

expecting success of 0001.24 'init creates a new bare directory': 
	rm -fr newdir &&
	git init --bare newdir &&
	test_path_is_dir newdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/
ok 24 - init creates a new bare directory

expecting success of 0001.25 'init recreates a directory': 
	rm -fr newdir &&
	mkdir newdir &&
	git init newdir &&
	test_path_is_dir newdir/.git/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/.git/
ok 25 - init recreates a directory

expecting success of 0001.26 'init recreates a new bare directory': 
	rm -fr newdir &&
	mkdir newdir &&
	git init --bare newdir &&
	test_path_is_dir newdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/
ok 26 - init recreates a new bare directory

expecting success of 0001.27 'init creates a new deep directory': 
	rm -fr newdir &&
	git init newdir/a/b/c &&
	test_path_is_dir newdir/a/b/c/.git/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/a/b/c/.git/
ok 27 - init creates a new deep directory

expecting success of 0001.28 'init creates a new deep directory (umask vs. shared)': 
	rm -fr newdir &&
	(
		# Leading directories should honor umask while
		# the repository itself should follow "shared"
		mkdir newdir &&
		# Remove a default ACL if possible.
		(setfacl -k newdir 2>/dev/null || true) &&
		umask 002 &&
		git init --bare --shared=0660 newdir/a/b/c &&
		test_path_is_dir newdir/a/b/c/refs &&
		ls -ld newdir/a newdir/a/b > lsab.out &&
		! grep -v "^drwxrw[sx]r-x" lsab.out &&
		ls -ld newdir/a/b/c > lsc.out &&
		! grep -v "^drwxrw[sx]---" lsc.out
	)

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/a/b/c/
ok 28 - init creates a new deep directory (umask vs. shared)

expecting success of 0001.29 'init notices EEXIST (1)': 
	rm -fr newdir &&
	>newdir &&
	test_must_fail git init newdir &&
	test_path_is_file newdir

fatal: cannot mkdir newdir: File exists
ok 29 - init notices EEXIST (1)

expecting success of 0001.30 'init notices EEXIST (2)': 
	rm -fr newdir &&
	mkdir newdir &&
	>newdir/a &&
	test_must_fail git init newdir/a/b &&
	test_path_is_file newdir/a

fatal: cannot mkdir newdir/a/b: File exists
ok 30 - init notices EEXIST (2)

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0001.31 'init notices EPERM': 
	test_when_finished "chmod +w newdir" &&
	rm -fr newdir &&
	mkdir newdir &&
	chmod -w newdir &&
	test_must_fail git init newdir/a/b

fatal: cannot mkdir newdir/a/b: Permission denied
ok 31 - init notices EPERM

expecting success of 0001.32 'init creates a new bare directory with global --bare': 
	rm -rf newdir &&
	git --bare init newdir &&
	test_path_is_dir newdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/
ok 32 - init creates a new bare directory with global --bare

expecting success of 0001.33 'init prefers command line to GIT_DIR': 
	rm -rf newdir &&
	mkdir otherdir &&
	GIT_DIR=otherdir git --bare init newdir &&
	test_path_is_dir newdir/refs &&
	test_path_is_missing otherdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/
ok 33 - init prefers command line to GIT_DIR

expecting success of 0001.34 'init with separate gitdir': 
	rm -rf newdir &&
	git init --separate-git-dir realgitdir newdir &&
	newdir_git="$(cat newdir/.git)" &&
	test_cmp_fspath "$(pwd)/realgitdir" "${newdir_git#gitdir: }" &&
	test_path_is_dir realgitdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/realgitdir/
ok 34 - init with separate gitdir

expecting success of 0001.35 'explicit bare & --separate-git-dir incompatible': 
	test_must_fail git init --bare --separate-git-dir goop.git bare.git 2>err &&
	test_i18ngrep "cannot be used together" err

fatal: options '--separate-git-dir' and '--bare' cannot be used together
ok 35 - explicit bare & --separate-git-dir incompatible

expecting success of 0001.36 'implicit bare & --separate-git-dir incompatible': 
	test_when_finished "rm -rf bare.git" &&
	mkdir -p bare.git &&
	test_must_fail env GIT_DIR=. \
		git -C bare.git init --separate-git-dir goop.git 2>err &&
	test_i18ngrep "incompatible" err

fatal: --separate-git-dir incompatible with bare repository
ok 36 - implicit bare & --separate-git-dir incompatible

expecting success of 0001.37 'bare & --separate-git-dir incompatible within worktree': 
	test_when_finished "rm -rf bare.git linkwt seprepo" &&
	test_commit gumby &&
	git clone --bare . bare.git &&
	git -C bare.git worktree add --detach ../linkwt &&
	test_must_fail git -C linkwt init --separate-git-dir seprepo 2>err &&
	test_i18ngrep "incompatible" err

[master (root-commit) 9bca56c] gumby
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 gumby.t
Cloning into bare repository 'bare.git'...
done.
Preparing worktree (detached HEAD 9bca56c)
HEAD is now at 9bca56c gumby
fatal: --separate-git-dir incompatible with bare repository
ok 37 - bare & --separate-git-dir incompatible within worktree

expecting success of 0001.38 'init in long base path': 
	check_long_base_path

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/newdir/.git/
ok 38 - init in long base path

checking prerequisite: GETCWD_IGNORES_PERMS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GETCWD_IGNORES_PERMS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GETCWD_IGNORES_PERMS" &&
	base=GETCWD_TEST_BASE_DIR &&
	mkdir -p $base/dir &&
	chmod 100 $base ||
	BUG "cannot prepare $base"

	(
		cd $base/dir &&
		test-tool getcwd
	)
	status=$?

	chmod 700 $base &&
	rm -rf $base ||
	BUG "cannot clean $base"
	return $status

)
/<<PKGBUILDDIR>>/t/trash directory.t0001-init/prereq-test-dir-GETCWD_IGNORES_PERMS/GETCWD_TEST_BASE_DIR/dir
prerequisite GETCWD_IGNORES_PERMS ok
expecting success of 0001.39 'init in long restricted base path': 
	check_long_base_path 0111

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/123456789abcdef/newdir/.git/
ok 39 - init in long restricted base path

expecting success of 0001.40 're-init on .git file': 
	( cd newdir && git init )

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/realgitdir/
ok 40 - re-init on .git file

expecting success of 0001.41 're-init to update git link': 
	git -C newdir init --separate-git-dir ../surrealgitdir &&
	newdir_git="$(cat newdir/.git)" &&
	test_cmp_fspath "$(pwd)/surrealgitdir" "${newdir_git#gitdir: }" &&
	test_path_is_dir surrealgitdir/refs &&
	test_path_is_missing realgitdir/refs

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/surrealgitdir/
ok 41 - re-init to update git link

expecting success of 0001.42 're-init to move gitdir': 
	rm -rf newdir realgitdir surrealgitdir &&
	git init newdir &&
	git -C newdir init --separate-git-dir ../realgitdir &&
	newdir_git="$(cat newdir/.git)" &&
	test_cmp_fspath "$(pwd)/realgitdir" "${newdir_git#gitdir: }" &&
	test_path_is_dir realgitdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/realgitdir/
ok 42 - re-init to move gitdir

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0001.43 're-init to move gitdir symlink': 
	rm -rf newdir realgitdir &&
	git init newdir &&
	(
	cd newdir &&
	mv .git here &&
	ln -s here .git &&
	git init --separate-git-dir ../realgitdir
	) &&
	echo "gitdir: $(pwd)/realgitdir" >expected &&
	test_cmp expected newdir/.git &&
	test_cmp expected newdir/here &&
	test_path_is_dir realgitdir/refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/realgitdir/
ok 43 - re-init to move gitdir symlink

expecting success of 0001.44 're-init to move gitdir with linked worktrees': 
	sep_git_dir_worktree mainwt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/mainwt/.git/
[master (root-commit) ad170d6] gumby
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 gumby.t
Preparing worktree (detached HEAD ad170d6)
HEAD is now at ad170d6 gumby
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/seprepo/
ok 44 - re-init to move gitdir with linked worktrees

expecting success of 0001.45 're-init to move gitdir within linked worktree': 
	sep_git_dir_worktree linkwt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/mainwt/.git/
[master (root-commit) ee407db] gumby
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 gumby.t
Preparing worktree (detached HEAD ee407db)
HEAD is now at ee407db gumby
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/seprepo/
ok 45 - re-init to move gitdir within linked worktree

ok 46 # skip .git hidden (missing MINGW)

ok 47 # skip bare git dir not hidden (missing MINGW)

expecting success of 0001.48 'remote init from does not use config from cwd': 
	rm -rf newdir &&
	test_config core.logallrefupdates true &&
	git init newdir &&
	echo true >expect &&
	git -C newdir config --bool core.logallrefupdates >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/newdir/.git/
ok 48 - remote init from does not use config from cwd

expecting success of 0001.49 're-init from a linked worktree': 
	git init main-worktree &&
	(
		cd main-worktree &&
		test_commit first &&
		git worktree add ../linked-worktree &&
		mv .git/info/exclude expected-exclude &&
		cp .git/config expected-config &&
		find .git/worktrees -print | sort >expected &&
		git -C ../linked-worktree init &&
		test_cmp expected-exclude .git/info/exclude &&
		test_cmp expected-config .git/config &&
		find .git/worktrees -print | sort >actual &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/main-worktree/.git/
[master (root-commit) 599f738] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Preparing worktree (new branch 'linked-worktree')
HEAD is now at 599f738 first
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/main-worktree/.git/worktrees/linked-worktree/
ok 49 - re-init from a linked worktree

expecting success of 0001.50 'init honors GIT_DEFAULT_HASH': 
	GIT_DEFAULT_HASH=sha1 git init sha1 &&
	git -C sha1 rev-parse --show-object-format >actual &&
	echo sha1 >expected &&
	test_cmp expected actual &&
	GIT_DEFAULT_HASH=sha256 git init sha256 &&
	git -C sha256 rev-parse --show-object-format >actual &&
	echo sha256 >expected &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/sha1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/sha256/.git/
ok 50 - init honors GIT_DEFAULT_HASH

expecting success of 0001.51 'init honors --object-format': 
	git init --object-format=sha1 explicit-sha1 &&
	git -C explicit-sha1 rev-parse --show-object-format >actual &&
	echo sha1 >expected &&
	test_cmp expected actual &&
	git init --object-format=sha256 explicit-sha256 &&
	git -C explicit-sha256 rev-parse --show-object-format >actual &&
	echo sha256 >expected &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/explicit-sha1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/explicit-sha256/.git/
ok 51 - init honors --object-format

expecting success of 0001.52 'extensions.objectFormat is not allowed with repo version 0': 
	git init --object-format=sha256 explicit-v0 &&
	git -C explicit-v0 config core.repositoryformatversion 0 &&
	test_must_fail git -C explicit-v0 rev-parse --show-object-format

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/explicit-v0/.git/
fatal: repo version is 0, but v1-only extension found:
	objectformat
ok 52 - extensions.objectFormat is not allowed with repo version 0

expecting success of 0001.53 'init rejects attempts to initialize with different hash': 
	test_must_fail git -C sha1 init --object-format=sha256 &&
	test_must_fail git -C sha256 init --object-format=sha1

fatal: attempt to reinitialize repository with different hash
fatal: attempt to reinitialize repository with different hash
ok 53 - init rejects attempts to initialize with different hash

ok 54 # skip core.hidedotfiles = false (missing MINGW)

ok 55 # skip redirect std handles (missing MINGW)

expecting success of 0001.56 '--initial-branch': 
	git init --initial-branch=hello initial-branch-option &&
	git -C initial-branch-option symbolic-ref HEAD >actual &&
	echo refs/heads/hello >expect &&
	test_cmp expect actual &&

	: re-initializing should not change the branch name &&
	git init --initial-branch=ignore initial-branch-option 2>err &&
	test_i18ngrep "ignored --initial-branch" err &&
	git -C initial-branch-option symbolic-ref HEAD >actual &&
	grep hello actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/initial-branch-option/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/initial-branch-option/.git/
warning: re-init: ignored --initial-branch=ignore
refs/heads/hello
ok 56 - --initial-branch

expecting success of 0001.57 'overridden default initial branch name (config)': 
	test_config_global init.defaultBranch nmb &&
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= git init initial-branch-config &&
	git -C initial-branch-config symbolic-ref HEAD >actual &&
	grep nmb actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/initial-branch-config/.git/
refs/heads/nmb
ok 57 - overridden default initial branch name (config)

expecting success of 0001.58 'advice on unconfigured init.defaultBranch': 
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= git -c color.advice=always \
		init unconfigured-default-branch-name 2>err &&
	test_decode_color <err >decoded &&
	test_i18ngrep "<YELLOW>hint: " decoded

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/unconfigured-default-branch-name/.git/
<YELLOW>hint: Using 'master' as the name for the initial branch. This default branch name<RESET>
<YELLOW>hint: is subject to change. To configure the initial branch name to use in all<RESET>
<YELLOW>hint: of your new repositories, which will suppress this warning, call:<RESET>
<YELLOW>hint: <RESET>
<YELLOW>hint: 	git config --global init.defaultBranch <name><RESET>
<YELLOW>hint: <RESET>
<YELLOW>hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and<RESET>
<YELLOW>hint: 'development'. The just-created branch can be renamed via this command:<RESET>
<YELLOW>hint: <RESET>
<YELLOW>hint: 	git branch -m <name><RESET>
ok 58 - advice on unconfigured init.defaultBranch

expecting success of 0001.59 'overridden default main branch name (env)': 
	test_config_global init.defaultBranch nmb &&
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=env git init main-branch-env &&
	git -C main-branch-env symbolic-ref HEAD >actual &&
	grep env actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/main-branch-env/.git/
refs/heads/env
ok 59 - overridden default main branch name (env)

expecting success of 0001.60 'invalid default branch name': 
	test_must_fail env GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME="with space" \
		git init initial-branch-invalid 2>err &&
	test_i18ngrep "invalid branch name" err

fatal: invalid branch name: init.defaultBranch = with space
ok 60 - invalid default branch name

expecting success of 0001.61 'branch -m with the initial branch': 
	git init rename-initial &&
	git -C rename-initial branch -m renamed &&
	test renamed = $(git -C rename-initial symbolic-ref --short HEAD) &&
	git -C rename-initial branch -m renamed again &&
	test again = $(git -C rename-initial symbolic-ref --short HEAD)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0001-init/rename-initial/.git/
ok 61 - branch -m with the initial branch

# passed all 61 test(s)
1..61
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0011-hashmap.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0011-hashmap/.git/
expecting success of 0011.1 'put': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
put foobarfrotz value4
size" "NULL
NULL
NULL
NULL
64 4"


ok 1 - put

expecting success of 0011.2 'put (case insensitive)': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
size" "NULL
NULL
NULL
64 3" ignorecase


ok 2 - put (case insensitive)

expecting success of 0011.3 'replace': 

test_hashmap "put key1 value1
put key1 value2
put fooBarFrotz value3
put fooBarFrotz value4
size" "NULL
value1
NULL
value3
64 2"


ok 3 - replace

expecting success of 0011.4 'replace (case insensitive)': 

test_hashmap "put key1 value1
put Key1 value2
put fooBarFrotz value3
put foobarfrotz value4
size" "NULL
value1
NULL
value3
64 2" ignorecase


ok 4 - replace (case insensitive)

expecting success of 0011.5 'get': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
put foobarfrotz value4
get key1
get key2
get fooBarFrotz
get notInMap" "NULL
NULL
NULL
NULL
value1
value2
value3
NULL"


ok 5 - get

expecting success of 0011.6 'get (case insensitive)': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
get Key1
get keY2
get foobarfrotz
get notInMap" "NULL
NULL
NULL
value1
value2
value3
NULL" ignorecase


ok 6 - get (case insensitive)

expecting success of 0011.7 'add': 

test_hashmap "add key1 value1
add key1 value2
add fooBarFrotz value3
add fooBarFrotz value4
get key1
get fooBarFrotz
get notInMap" "value2
value1
value4
value3
NULL"


ok 7 - add

expecting success of 0011.8 'add (case insensitive)': 

test_hashmap "add key1 value1
add Key1 value2
add fooBarFrotz value3
add foobarfrotz value4
get key1
get Foobarfrotz
get notInMap" "value2
value1
value4
value3
NULL" ignorecase


ok 8 - add (case insensitive)

expecting success of 0011.9 'remove': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
remove key1
remove key2
remove notInMap
size" "NULL
NULL
NULL
value1
value2
NULL
64 1"


ok 9 - remove

expecting success of 0011.10 'remove (case insensitive)': 

test_hashmap "put key1 value1
put key2 value2
put fooBarFrotz value3
remove Key1
remove keY2
remove notInMap
size" "NULL
NULL
NULL
value1
value2
NULL
64 1" ignorecase


ok 10 - remove (case insensitive)

expecting success of 0011.11 'iterate': 
	test-tool hashmap >actual.raw <<-\EOF &&
	put key1 value1
	put key2 value2
	put fooBarFrotz value3
	iterate
	EOF

	cat >expect <<-\EOF &&
	NULL
	NULL
	NULL
	fooBarFrotz value3
	key1 value1
	key2 value2
	EOF

	sort <actual.raw >actual &&
	test_cmp expect actual

ok 11 - iterate

expecting success of 0011.12 'iterate (case insensitive)': 
	test-tool hashmap ignorecase >actual.raw <<-\EOF &&
	put key1 value1
	put key2 value2
	put fooBarFrotz value3
	iterate
	EOF

	cat >expect <<-\EOF &&
	NULL
	NULL
	NULL
	fooBarFrotz value3
	key1 value1
	key2 value2
	EOF

	sort <actual.raw >actual &&
	test_cmp expect actual

ok 12 - iterate (case insensitive)

expecting success of 0011.13 'grow / shrink': 

	rm -f in &&
	rm -f expect &&
	for n in $(test_seq 51)
	do
		echo put key$n value$n >> in &&
		echo NULL >> expect || return 1
	done &&
	echo size >> in &&
	echo 64 51 >> expect &&
	echo put key52 value52 >> in &&
	echo NULL >> expect &&
	echo size >> in &&
	echo 256 52 >> expect &&
	for n in $(test_seq 12)
	do
		echo remove key$n >> in &&
		echo value$n >> expect || return 1
	done &&
	echo size >> in &&
	echo 256 40 >> expect &&
	echo remove key40 >> in &&
	echo value40 >> expect &&
	echo size >> in &&
	echo 64 39 >> expect &&
	cat in | test-tool hashmap > out &&
	test_cmp expect out


ok 13 - grow / shrink

expecting success of 0011.14 'string interning': 

test_hashmap "intern value1
intern Value1
intern value2
intern value2
" "value1
Value1
value2
value2"


ok 14 - string interning

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0010-racy-git.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0010-racy-git/.git/
expecting success of 0010.1 'Racy GIT trial #0 part A': test "" != "$files"
ok 1 - Racy GIT trial #0 part A

expecting success of 0010.2 'Racy GIT trial #0 part B': test "" != "$files"
ok 2 - Racy GIT trial #0 part B

expecting success of 0010.3 'Racy GIT trial #1 part A': test "" != "$files"
ok 3 - Racy GIT trial #1 part A

expecting success of 0010.4 'Racy GIT trial #1 part B': test "" != "$files"
ok 4 - Racy GIT trial #1 part B

expecting success of 0010.5 'Racy GIT trial #2 part A': test "" != "$files"
ok 5 - Racy GIT trial #2 part A

expecting success of 0010.6 'Racy GIT trial #2 part B': test "" != "$files"
ok 6 - Racy GIT trial #2 part B

expecting success of 0010.7 'Racy GIT trial #3 part A': test "" != "$files"
ok 7 - Racy GIT trial #3 part A

expecting success of 0010.8 'Racy GIT trial #3 part B': test "" != "$files"
ok 8 - Racy GIT trial #3 part B

expecting success of 0010.9 'Racy GIT trial #4 part A': test "" != "$files"
ok 9 - Racy GIT trial #4 part A

expecting success of 0010.10 'Racy GIT trial #4 part B': test "" != "$files"
ok 10 - Racy GIT trial #4 part B

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0013-sha1dc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0013-sha1dc/.git/
checking prerequisite: SHA1_IS_SHA1DC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1_IS_SHA1DC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1_IS_SHA1DC" &&test-tool sha1-is-sha1dc
)
prerequisite SHA1_IS_SHA1DC ok
expecting success of 0013.1 'test-sha1 detects shattered pdf': 
	test_must_fail test-tool sha1 <"$TEST_DATA/shattered-1.pdf" 2>err &&
	test_i18ngrep collision err &&
	grep 38762cf7f55934b34d179ae6a4c80cadccbb7f0a err

fatal: SHA-1 appears to be part of a collision attack: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a
fatal: SHA-1 appears to be part of a collision attack: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a
ok 1 - test-sha1 detects shattered pdf

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0014-alias.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0014-alias/.git/
expecting success of 0014.1 'nested aliases - internal execution': 
	git config alias.nested-internal-1 nested-internal-2 &&
	git config alias.nested-internal-2 status &&
	git nested-internal-1 >output &&
	test_i18ngrep "^On branch " output

On branch master
ok 1 - nested aliases - internal execution

expecting success of 0014.2 'nested aliases - mixed execution': 
	git config alias.nested-external-1 nested-external-2 &&
	git config alias.nested-external-2 "!git nested-external-3" &&
	git config alias.nested-external-3 status &&
	git nested-external-1 >output &&
	test_i18ngrep "^On branch " output

On branch master
ok 2 - nested aliases - mixed execution

expecting success of 0014.3 'looping aliases - internal execution': 
	git config alias.loop-internal-1 loop-internal-2 &&
	git config alias.loop-internal-2 loop-internal-3 &&
	git config alias.loop-internal-3 loop-internal-2 &&
	test_must_fail git loop-internal-1 2>output &&
	test_i18ngrep "^fatal: alias loop detected: expansion of" output

fatal: alias loop detected: expansion of 'loop-internal-1' does not terminate:
ok 3 - looping aliases - internal execution

expecting success of 0014.4 'run-command formats empty args properly': 
    test_must_fail env GIT_TRACE=1 git frotz a "" b " " c 2>actual.raw &&
    sed -ne "/run_command:/s/.*trace: run_command: //p" actual.raw >actual &&
    echo "git-frotz a '' b ' ' c" >expect &&
    test_cmp expect actual

ok 4 - run-command formats empty args properly

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0012-help.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0012-help/.git/
expecting success of 0012.1 'setup': 
	# Just write out which page gets requested
	write_script test-browser <<-\EOF
	echo "$*" >test-browser.log
	EOF

ok 1 - setup

expecting success of 0012.2 'basic help commands': 
	git help >/dev/null &&
	git help -a --no-verbose >/dev/null &&
	git help -g >/dev/null &&
	git help -a >/dev/null

ok 2 - basic help commands

expecting success of 0012.3 'invalid usage': 
	test_expect_code 129 git help -a add &&
	test_expect_code 129 git help --all add &&

	test_expect_code 129 git help -g add &&
	test_expect_code 129 git help -a -c &&

	test_expect_code 129 git help -g add &&
	test_expect_code 129 git help -a -g &&

	test_expect_code 129 git help --user-interfaces add &&

	test_expect_code 129 git help -g -c &&
	test_expect_code 129 git help --config-for-completion add &&
	test_expect_code 129 git help --config-sections-for-completion add

fatal: the '--all' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: the '--all' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: the '--guides' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

error: switch `c' is incompatible with --all
fatal: the '--guides' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

error: switch `g' is incompatible with --all
fatal: the '--user-interfaces' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

error: switch `c' is incompatible with --guides
fatal: the '--config-for-completion' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: the '--config-sections-for-completion' option doesn't take any non-option arguments

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 3 - invalid usage

expecting success of 0012.4 'invalid usage of '-a' with [-i|-m|-w]': 
		git help $opt &&
		test_expect_code 129 git help $opt -i &&
		test_expect_code 129 git help $opt -m &&
		test_expect_code 129 git help $opt -w
	
See 'git help <command>' to read about a specific subcommand

Main Porcelain Commands
   add                     Add file contents to the index
   am                      Apply a series of patches from a mailbox
   archive                 Create an archive of files from a named tree
   bisect                  Use binary search to find the commit that introduced a bug
   branch                  List, create, or delete branches
   bundle                  Move objects and refs by archive
   checkout                Switch branches or restore working tree files
   cherry-pick             Apply the changes introduced by some existing commits
   citool                  Graphical alternative to git-commit
   clean                   Remove untracked files from the working tree
   clone                   Clone a repository into a new directory
   commit                  Record changes to the repository
   describe                Give an object a human readable name based on an available ref
   diff                    Show changes between commits, commit and working tree, etc
   fetch                   Download objects and refs from another repository
   format-patch            Prepare patches for e-mail submission
   gc                      Cleanup unnecessary files and optimize the local repository
   gitk                    The Git repository browser
   grep                    Print lines matching a pattern
   gui                     A portable graphical interface to Git
   init                    Create an empty Git repository or reinitialize an existing one
   log                     Show commit logs
   maintenance             Run tasks to optimize Git repository data
   merge                   Join two or more development histories together
   mv                      Move or rename a file, a directory, or a symlink
   notes                   Add or inspect object notes
   pull                    Fetch from and integrate with another repository or a local branch
   push                    Update remote refs along with associated objects
   range-diff              Compare two commit ranges (e.g. two versions of a branch)
   rebase                  Reapply commits on top of another base tip
   reset                   Reset current HEAD to the specified state
   restore                 Restore working tree files
   revert                  Revert some existing commits
   rm                      Remove files from the working tree and from the index
   scalar                  A tool for managing large Git repositories
   shortlog                Summarize 'git log' output
   show                    Show various types of objects
   sparse-checkout         Reduce your working tree to a subset of tracked files
   stash                   Stash the changes in a dirty working directory away
   status                  Show the working tree status
   submodule               Initialize, update or inspect submodules
   switch                  Switch branches
   tag                     Create, list, delete or verify a tag object signed with GPG
   worktree                Manage multiple working trees

Ancillary Commands / Manipulators
   config                  Get and set repository or global options
   fast-export             Git data exporter
   fast-import             Backend for fast Git data importers
   filter-branch           Rewrite branches
   mergetool               Run merge conflict resolution tools to resolve merge conflicts
   pack-refs               Pack heads and tags for efficient repository access
   prune                   Prune all unreachable objects from the object database
   reflog                  Manage reflog information
   remote                  Manage set of tracked repositories
   repack                  Pack unpacked objects in a repository
   replace                 Create, list, delete refs to replace objects

Ancillary Commands / Interrogators
   annotate                Annotate file lines with commit information
   blame                   Show what revision and author last modified each line of a file
   bugreport               Collect information for user to file a bug report
   count-objects           Count unpacked number of objects and their disk consumption
   diagnose                Generate a zip archive of diagnostic information
   difftool                Show changes using common diff tools
   fsck                    Verifies the connectivity and validity of the objects in the database
   gitweb                  Git web interface (web frontend to Git repositories)
   help                    Display help information about Git
   instaweb                Instantly browse your working repository in gitweb
   merge-tree              Perform merge without touching index or working tree
   rerere                  Reuse recorded resolution of conflicted merges
   show-branch             Show branches and their commits
   verify-commit           Check the GPG signature of commits
   verify-tag              Check the GPG signature of tags
   version                 Display version information about Git
   whatchanged             Show logs with difference each commit introduces

Interacting with Others
   archimport              Import a GNU Arch repository into Git
   cvsexportcommit         Export a single commit to a CVS checkout
   cvsimport               Salvage your data out of another SCM people love to hate
   cvsserver               A CVS server emulator for Git
   imap-send               Send a collection of patches from stdin to an IMAP folder
   p4                      Import from and submit to Perforce repositories
   quiltimport             Applies a quilt patchset onto the current branch
   request-pull            Generates a summary of pending changes
   send-email              Send a collection of patches as emails
   svn                     Bidirectional operation between a Subversion repository and Git

Low-level Commands / Manipulators
   apply                   Apply a patch to files and/or to the index
   checkout-index          Copy files from the index to the working tree
   commit-graph            Write and verify Git commit-graph files
   commit-tree             Create a new commit object
   hash-object             Compute object ID and optionally creates a blob from a file
   index-pack              Build pack index file for an existing packed archive
   merge-file              Run a three-way file merge
   merge-index             Run a merge for files needing merging
   mktag                   Creates a tag object with extra validation
   mktree                  Build a tree-object from ls-tree formatted text
   multi-pack-index        Write and verify multi-pack-indexes
   pack-objects            Create a packed archive of objects
   prune-packed            Remove extra objects that are already in pack files
   read-tree               Reads tree information into the index
   symbolic-ref            Read, modify and delete symbolic refs
   unpack-objects          Unpack objects from a packed archive
   update-index            Register file contents in the working tree to the index
   update-ref              Update the object name stored in a ref safely
   write-tree              Create a tree object from the current index

Low-level Commands / Interrogators
   cat-file                Provide content or type and size information for repository objects
   cherry                  Find commits yet to be applied to upstream
   diff-files              Compares files in the working tree and the index
   diff-index              Compare a tree to the working tree or index
   diff-tree               Compares the content and mode of blobs found via two tree objects
   for-each-ref            Output information on each ref
   for-each-repo           Run a Git command on a list of repositories
   get-tar-commit-id       Extract commit ID from an archive created using git-archive
   ls-files                Show information about files in the index and the working tree
   ls-remote               List references in a remote repository
   ls-tree                 List the contents of a tree object
   merge-base              Find as good common ancestors as possible for a merge
   name-rev                Find symbolic names for given revs
   pack-redundant          Find redundant pack files
   rev-list                Lists commit objects in reverse chronological order
   rev-parse               Pick out and massage parameters
   show-index              Show packed archive index
   show-ref                List references in a local repository
   unpack-file             Creates a temporary file with a blob's contents
   var                     Show a Git logical variable
   verify-pack             Validate packed Git archive files

Low-level Commands / Syncing Repositories
   daemon                  A really simple server for Git repositories
   fetch-pack              Receive missing objects from another repository
   http-backend            Server side implementation of Git over HTTP
   send-pack               Push objects over Git protocol to another repository
   update-server-info      Update auxiliary info file to help dumb servers

Low-level Commands / Internal Helpers
   check-attr              Display gitattributes information
   check-ignore            Debug gitignore / exclude files
   check-mailmap           Show canonical names and email addresses of contacts
   check-ref-format        Ensures that a reference name is well formed
   column                  Display data in columns
   credential              Retrieve and store user credentials
   credential-cache        Helper to temporarily store passwords in memory
   credential-store        Helper to store credentials on disk
   fmt-merge-msg           Produce a merge commit message
   hook                    Run git hooks
   interpret-trailers      Add or parse structured information in commit messages
   mailinfo                Extracts patch and authorship from a single e-mail message
   mailsplit               Simple UNIX mbox splitter program
   merge-one-file          The standard helper program to use with git-merge-index
   patch-id                Compute unique ID for a patch
   sh-i18n                 Git's i18n setup code for shell scripts
   sh-setup                Common Git shell script setup code
   stripspace              Remove unnecessary whitespace

User-facing repository, command and file interfaces
   attributes              Defining attributes per path
   cli                     Git command-line interface and conventions
   hooks                   Hooks used by Git
   ignore                  Specifies intentionally untracked files to ignore
   mailmap                 Map author/committer names and/or E-Mail addresses
   modules                 Defining submodule properties
   repository-layout       Git Repository Layout
   revisions               Specifying revisions and ranges for Git

Developer-facing file formats, protocols and other interfaces
   format-bundle           The bundle file format
   format-chunk            Chunk-based file formats
   format-commit-graph     Git commit-graph format
   format-index            Git index format
   format-pack             Git pack format
   format-signature        Git cryptographic signature formats
   protocol-capabilities   Protocol v0 and v1 capabilities
   protocol-common         Things common to various protocols
   protocol-http           Git HTTP-based protocols
   protocol-pack           How packs are transferred over-the-wire
   protocol-v2             Git Wire Protocol, Version 2
fatal: options '--all' and '--info' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--all' and '--man' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--all' and '--web' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 4 - invalid usage of '-a' with [-i|-m|-w]

expecting success of 0012.5 'invalid usage of '-g' with [-i|-m|-w]': 
		git help $opt &&
		test_expect_code 129 git help $opt -i &&
		test_expect_code 129 git help $opt -m &&
		test_expect_code 129 git help $opt -w
	
The Git concept guides are:
   core-tutorial    A Git core tutorial for developers
   credentials      Providing usernames and passwords to Git
   cvs-migration    Git for CVS users
   diffcore         Tweaking diff output
   everyday         A useful minimum set of commands for Everyday Git
   faq              Frequently asked questions about using Git
   glossary         A Git Glossary
   namespaces       Git namespaces
   remote-helpers   Helper programs to interact with remote repositories
   submodules       Mounting one repository inside another
   tutorial         A tutorial introduction to Git
   tutorial-2       A tutorial introduction to Git: part two
   workflows        An overview of recommended workflows with Git

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
fatal: options '--guides' and '--info' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--guides' and '--man' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--guides' and '--web' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 5 - invalid usage of '-g' with [-i|-m|-w]

expecting success of 0012.6 'invalid usage of '-g' with --no-external-commands': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 6 - invalid usage of '-g' with --no-external-commands

expecting success of 0012.7 'invalid usage of '-g' with --no-aliases': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 7 - invalid usage of '-g' with --no-aliases

expecting success of 0012.8 'invalid usage of '-c' with [-i|-m|-w]': 
		git help $opt &&
		test_expect_code 129 git help $opt -i &&
		test_expect_code 129 git help $opt -m &&
		test_expect_code 129 git help $opt -w
	
add.ignoreErrors
add.interactive.useBuiltin
advice.addEmbeddedRepo
advice.addEmptyPathspec
advice.addIgnoredFile
advice.amWorkDir
advice.ambiguousFetchRefspec
advice.checkoutAmbiguousRemoteBranchName
advice.commitBeforeMerge
advice.detachedHead
advice.fetchShowForcedUpdates
advice.graftFileDeprecated
advice.ignoredHook
advice.implicitIdentity
advice.nestedTag
advice.objectNameWarning
advice.pushAlreadyExists
advice.pushFetchFirst
advice.pushNeedsForce
advice.pushNonFFCurrent
advice.pushNonFFMatching
advice.pushNonFastForward
advice.pushRefNeedsUpdate
advice.pushUnqualifiedRefName
advice.pushUpdateRejected
advice.resetNoRefresh
advice.resolveConflict
advice.rmHints
advice.sequencerInUse
advice.setUpstreamFailure
advice.skippedCherryPicks
advice.statusAheadBehindWarning
advice.statusHints
advice.statusUoption
advice.submoduleAlternateErrorStrategyDie
advice.submodulesNotUpdated
advice.suggestDetachingHead
advice.updateSparsePath
advice.waitingForEditor
alias.*
am.keepcr
am.threeWay
apply.ignoreWhitespace
apply.whitespace
author.email
author.name
blame.blankBoundary
blame.coloring
blame.date
blame.ignoreRevsFile
blame.markIgnoredLines
blame.markUnblamableLines
blame.showEmail
blame.showRoot
branch.<name>.description
branch.<name>.merge
branch.<name>.mergeOptions
branch.<name>.pushRemote
branch.<name>.rebase
branch.<name>.remote
branch.autoSetupMerge
branch.autoSetupRebase
branch.sort
browser.<tool>.cmd
browser.<tool>.path
bundle.*
bundle.<id>.*
bundle.<id>.uri
bundle.mode
bundle.version
checkout.defaultRemote
checkout.guess
checkout.thresholdForParallelism
checkout.workers
clean.requireForce
clone.defaultRemoteName
clone.filterSubmodules
clone.rejectShallow
color.advice
color.advice.hint
color.blame.highlightRecent
color.blame.repeatedLines
color.branch
color.branch.current
color.branch.local
color.branch.plain
color.branch.remote
color.branch.reset
color.branch.upstream
color.branch.worktree
color.decorate.HEAD
color.decorate.branch
color.decorate.grafted
color.decorate.remoteBranch
color.decorate.stash
color.decorate.tag
color.diff
color.diff.commit
color.diff.context
color.diff.contextBold
color.diff.contextDimmed
color.diff.frag
color.diff.func
color.diff.meta
color.diff.new
color.diff.newBold
color.diff.newDimmed
color.diff.newMoved
color.diff.newMovedAlternative
color.diff.newMovedAlternativeDimmed
color.diff.newMovedDimmed
color.diff.old
color.diff.oldBold
color.diff.oldDimmed
color.diff.oldMoved
color.diff.oldMovedAlternative
color.diff.oldMovedAlternativeDimmed
color.diff.oldMovedDimmed
color.diff.plain
color.diff.whitespace
color.grep
color.grep.column
color.grep.context
color.grep.filename
color.grep.function
color.grep.lineNumber
color.grep.match
color.grep.matchContext
color.grep.matchSelected
color.grep.selected
color.grep.separator
color.interactive
color.interactive.error
color.interactive.header
color.interactive.help
color.interactive.plain
color.interactive.prompt
color.interactive.reset
color.pager
color.push
color.push.error
color.remote
color.remote.error
color.remote.hint
color.remote.success
color.remote.warning
color.showBranch
color.status
color.status.added
color.status.branch
color.status.changed
color.status.header
color.status.localBranch
color.status.noBranch
color.status.remoteBranch
color.status.unmerged
color.status.untracked
color.status.updated
color.transport
color.transport.rejected
color.ui
column.branch
column.clean
column.status
column.tag
column.ui
commit.cleanup
commit.gpgSign
commit.status
commit.template
commit.verbose
commitGraph.generationVersion
commitGraph.maxNewFilters
commitGraph.readChangedPaths
committer.email
committer.name
completion.commands
core.abbrev
core.alternateRefsCommand
core.alternateRefsPrefixes
core.askPass
core.attributesFile
core.autocrlf
core.bare
core.bigFileThreshold
core.checkRoundtripEncoding
core.checkStat
core.commentChar
core.commitGraph
core.compression
core.createObject
core.deltaBaseCacheLimit
core.editor
core.eol
core.excludesFile
core.fileMode
core.filesRefLockTimeout
core.fsmonitor
core.fsmonitorHookVersion
core.fsync
core.fsyncMethod
core.fsyncObjectFiles
core.gitProxy
core.hideDotFiles
core.hooksPath
core.ignoreCase
core.ignoreStat
core.logAllRefUpdates
core.looseCompression
core.multiPackIndex
core.notesRef
core.packedGitLimit
core.packedGitWindowSize
core.packedRefsTimeout
core.pager
core.precomposeUnicode
core.preferSymlinkRefs
core.preloadIndex
core.protectHFS
core.protectNTFS
core.quotePath
core.repositoryFormatVersion
core.restrictinheritedhandles
core.safecrlf
core.sharedRepository
core.sparseCheckout
core.sparseCheckoutCone
core.splitIndex
core.sshCommand
core.symlinks
core.trustctime
core.unsetenvvars
core.untrackedCache
core.useReplaceRefs
core.warnAmbiguousRefs
core.whitespace
core.worktree
credential.<url>.*
credential.helper
credential.useHttpPath
credential.username
credentialCache.ignoreSIGHUP
credentialStore.lockTimeoutMS
diff.<driver>.binary
diff.<driver>.cachetextconv
diff.<driver>.command
diff.<driver>.textconv
diff.<driver>.wordRegex
diff.<driver>.xfuncname
diff.algorithm
diff.autoRefreshIndex
diff.colorMoved
diff.colorMovedWS
diff.context
diff.dirstat
diff.external
diff.guitool
diff.ignoreSubmodules
diff.indentHeuristic
diff.interHunkContext
diff.mnemonicPrefix
diff.noprefix
diff.orderFile
diff.relative
diff.renameLimit
diff.renames
diff.statGraphWidth
diff.submodule
diff.suppressBlankEmpty
diff.tool
diff.wordRegex
diff.wsErrorHighlight
difftool.<tool>.cmd
difftool.<tool>.path
difftool.prompt
difftool.trustExitCode
extensions.objectFormat
extensions.worktreeConfig
fastimport.unpackLimit
feature.*
feature.experimental
feature.manyFiles
fetch.fsck.<msg-id>
fetch.fsck.skipList
fetch.fsckObjects
fetch.negotiationAlgorithm
fetch.output
fetch.parallel
fetch.prune
fetch.pruneTags
fetch.recurseSubmodules
fetch.showForcedUpdates
fetch.unpackLimit
fetch.writeCommitGraph
filter.<driver>.clean
filter.<driver>.smudge
format.attach
format.cc
format.coverFromDescription
format.coverLetter
format.encodeEmailHeaders
format.filenameMaxLength
format.forceInBodyFrom
format.from
format.headers
format.notes
format.numbered
format.outputDirectory
format.pretty
format.signOff
format.signature
format.signatureFile
format.subjectPrefix
format.suffix
format.thread
format.to
format.useAutoBase
fsck.badDate
fsck.badDateOverflow
fsck.badEmail
fsck.badFilemode
fsck.badName
fsck.badObjectSha1
fsck.badParentSha1
fsck.badTagName
fsck.badTimezone
fsck.badTree
fsck.badTreeSha1
fsck.badType
fsck.duplicateEntries
fsck.emptyName
fsck.extraHeaderEntry
fsck.fullPathname
fsck.gitattributesSymlink
fsck.gitignoreSymlink
fsck.gitmodulesBlob
fsck.gitmodulesLarge
fsck.gitmodulesMissing
fsck.gitmodulesName
fsck.gitmodulesParse
fsck.gitmodulesPath
fsck.gitmodulesSymlink
fsck.gitmodulesUpdate
fsck.gitmodulesUrl
fsck.hasDot
fsck.hasDotdot
fsck.hasDotgit
fsck.mailmapSymlink
fsck.missingAuthor
fsck.missingCommitter
fsck.missingEmail
fsck.missingNameBeforeEmail
fsck.missingObject
fsck.missingSpaceBeforeDate
fsck.missingSpaceBeforeEmail
fsck.missingTag
fsck.missingTagEntry
fsck.missingTaggerEntry
fsck.missingTree
fsck.missingType
fsck.missingTypeEntry
fsck.multipleAuthors
fsck.nulInCommit
fsck.nulInHeader
fsck.nullSha1
fsck.skipList
fsck.treeNotSorted
fsck.unknownType
fsck.unterminatedHeader
fsck.zeroPaddedDate
fsck.zeroPaddedFilemode
fsmonitor.allowRemote
fsmonitor.socketDir
gc.<pattern>.reflogExpire
gc.<pattern>.reflogExpireUnreachable
gc.aggressiveDepth
gc.aggressiveWindow
gc.auto
gc.autoDetach
gc.autoPackLimit
gc.bigPackThreshold
gc.cruftPacks
gc.logExpiry
gc.packRefs
gc.pruneExpire
gc.reflogExpire
gc.reflogExpireUnreachable
gc.rerereResolved
gc.rerereUnresolved
gc.worktreePruneExpire
gc.writeCommitGraph
gitcvs.allBinary
gitcvs.commitMsgAnnotation
gitcvs.dbDriver
gitcvs.dbName
gitcvs.dbPass
gitcvs.dbTableNamePrefix
gitcvs.dbUser
gitcvs.enabled
gitcvs.logFile
gitcvs.usecrlfattr
gitweb.avatar
gitweb.blame
gitweb.category
gitweb.description
gitweb.grep
gitweb.highlight
gitweb.owner
gitweb.patches
gitweb.pickaxe
gitweb.remote_heads
gitweb.showSizes
gitweb.snapshot
gitweb.url
gpg.<format>.program
gpg.format
gpg.minTrustLevel
gpg.program
gpg.ssh.allowedSignersFile
gpg.ssh.defaultKeyCommand
gpg.ssh.revocationFile
grep.column
grep.extendedRegexp
grep.fallbackToNoIndex
grep.fullName
grep.lineNumber
grep.patternType
grep.threads
gui.blamehistoryctx
gui.commitMsgWidth
gui.copyBlameThreshold
gui.diffContext
gui.displayUntracked
gui.encoding
gui.fastCopyBlame
gui.matchTrackingBranch
gui.newBranchTemplate
gui.pruneDuringFetch
gui.spellingDictionary
gui.trustmtime
guitool.<name>.argPrompt
guitool.<name>.cmd
guitool.<name>.confirm
guitool.<name>.needsFile
guitool.<name>.noConsole
guitool.<name>.noRescan
guitool.<name>.prompt
guitool.<name>.revPrompt
guitool.<name>.revUnmerged
guitool.<name>.title
help.autoCorrect
help.browser
help.format
help.htmlPath
http.<url>.*
http.cookieFile
http.curloptResolve
http.delegation
http.emptyAuth
http.extraHeader
http.followRedirects
http.lowSpeedLimit
http.lowSpeedTime
http.maxRequests
http.minSessions
http.noEPSV
http.pinnedPubkey
http.postBuffer
http.proxy
http.proxyAuthMethod
http.proxySSLCAInfo
http.proxySSLCert
http.proxySSLCertPasswordProtected
http.proxySSLKey
http.saveCookies
http.schannelCheckRevoke
http.schannelUseSSLCAInfo
http.sslBackend
http.sslCAInfo
http.sslCAPath
http.sslCert
http.sslCertPasswordProtected
http.sslCipherList
http.sslKey
http.sslTry
http.sslVerify
http.sslVersion
http.userAgent
http.version
i18n.commitEncoding
i18n.logOutputEncoding
imap.authMethod
imap.folder
imap.host
imap.pass
imap.port
imap.preformattedHTML
imap.sslverify
imap.tunnel
imap.user
include.path
includeIf.<condition>.path
index.recordEndOfIndexEntries
index.recordOffsetTable
index.sparse
index.threads
index.version
init.defaultBranch
init.templateDir
instaweb.browser
instaweb.httpd
instaweb.local
instaweb.modulePath
instaweb.port
interactive.diffFilter
interactive.singleKey
log.abbrevCommit
log.date
log.decorate
log.diffMerges
log.excludeDecoration
log.follow
log.graphColors
log.initialDecorationSet
log.mailmap
log.showRoot
log.showSignature
lsrefs.unborn
mailinfo.scissors
mailmap.blob
mailmap.file
maintenance.<task>.enabled
maintenance.<task>.schedule
maintenance.auto
maintenance.commit-graph.auto
maintenance.incremental-repack.auto
maintenance.loose-objects.auto
maintenance.strategy
man.<tool>.cmd
man.<tool>.path
man.viewer
merge.<driver>.driver
merge.<driver>.name
merge.<driver>.recursive
merge.autoStash
merge.branchdesc
merge.conflictStyle
merge.defaultToUpstream
merge.directoryRenames
merge.ff
merge.guitool
merge.log
merge.renameLimit
merge.renames
merge.renormalize
merge.stat
merge.suppressDest
merge.tool
merge.verbosity
merge.verifySignatures
mergetool.<tool>.cmd
mergetool.<tool>.hideResolved
mergetool.<tool>.path
mergetool.<tool>.trustExitCode
mergetool.hideResolved
mergetool.keepBackup
mergetool.keepTemporaries
mergetool.meld.hasOutput
mergetool.meld.useAutoMerge
mergetool.prompt
mergetool.vimdiff.layout
mergetool.writeToTemp
notes.<name>.mergeStrategy
notes.displayRef
notes.mergeStrategy
notes.rewrite.<command>
notes.rewriteMode
notes.rewriteRef
pack.allowPackReuse
pack.compression
pack.deltaCacheLimit
pack.deltaCacheSize
pack.depth
pack.indexVersion
pack.island
pack.islandCore
pack.packSizeLimit
pack.preferBitmapTips
pack.threads
pack.useBitmaps
pack.useSparse
pack.window
pack.windowMemory
pack.writeBitmapHashCache
pack.writeBitmapLookupTable
pack.writeReverseIndex
pager.<cmd>
pretty.<name>
protocol.<name>.allow
protocol.allow
protocol.version
pull.ff
pull.octopus
pull.rebase
pull.twohead
push.autoSetupRemote
push.default
push.followTags
push.gpgSign
push.negotiate
push.pushOption
push.recurseSubmodules
push.useBitmaps
push.useForceIfIncludes
rebase.abbreviateCommands
rebase.autoSquash
rebase.autoStash
rebase.backend
rebase.forkPoint
rebase.instructionFormat
rebase.missingCommitsCheck
rebase.rescheduleFailedExec
rebase.stat
rebase.updateRefs
receive.advertiseAtomic
receive.advertisePushOptions
receive.autogc
receive.certNonceSeed
receive.certNonceSlop
receive.denyCurrentBranch
receive.denyDeleteCurrent
receive.denyDeletes
receive.denyNonFastForwards
receive.fsck.badDate
receive.fsck.badDateOverflow
receive.fsck.badEmail
receive.fsck.badFilemode
receive.fsck.badName
receive.fsck.badObjectSha1
receive.fsck.badParentSha1
receive.fsck.badTagName
receive.fsck.badTimezone
receive.fsck.badTree
receive.fsck.badTreeSha1
receive.fsck.badType
receive.fsck.duplicateEntries
receive.fsck.emptyName
receive.fsck.extraHeaderEntry
receive.fsck.fullPathname
receive.fsck.gitattributesSymlink
receive.fsck.gitignoreSymlink
receive.fsck.gitmodulesBlob
receive.fsck.gitmodulesLarge
receive.fsck.gitmodulesMissing
receive.fsck.gitmodulesName
receive.fsck.gitmodulesParse
receive.fsck.gitmodulesPath
receive.fsck.gitmodulesSymlink
receive.fsck.gitmodulesUpdate
receive.fsck.gitmodulesUrl
receive.fsck.hasDot
receive.fsck.hasDotdot
receive.fsck.hasDotgit
receive.fsck.mailmapSymlink
receive.fsck.missingAuthor
receive.fsck.missingCommitter
receive.fsck.missingEmail
receive.fsck.missingNameBeforeEmail
receive.fsck.missingObject
receive.fsck.missingSpaceBeforeDate
receive.fsck.missingSpaceBeforeEmail
receive.fsck.missingTag
receive.fsck.missingTagEntry
receive.fsck.missingTaggerEntry
receive.fsck.missingTree
receive.fsck.missingType
receive.fsck.missingTypeEntry
receive.fsck.multipleAuthors
receive.fsck.nulInCommit
receive.fsck.nulInHeader
receive.fsck.nullSha1
receive.fsck.skipList
receive.fsck.treeNotSorted
receive.fsck.unknownType
receive.fsck.unterminatedHeader
receive.fsck.zeroPaddedDate
receive.fsck.zeroPaddedFilemode
receive.fsckObjects
receive.hideRefs
receive.keepAlive
receive.maxInputSize
receive.procReceiveRefs
receive.shallowUpdate
receive.unpackLimit
receive.updateServerInfo
remote.<name>.fetch
remote.<name>.mirror
remote.<name>.partialclonefilter
remote.<name>.promisor
remote.<name>.proxy
remote.<name>.proxyAuthMethod
remote.<name>.prune
remote.<name>.pruneTags
remote.<name>.push
remote.<name>.pushurl
remote.<name>.receivepack
remote.<name>.skipDefaultUpdate
remote.<name>.skipFetchAll
remote.<name>.tagOpt
remote.<name>.uploadpack
remote.<name>.url
remote.<name>.vcs
remote.pushDefault
remotes.<group>
repack.cruftDepth
repack.cruftThreads
repack.cruftWindow
repack.cruftWindowMemory
repack.packKeptObjects
repack.updateServerInfo
repack.useDeltaBaseOffset
repack.useDeltaIslands
repack.writeBitmaps
rerere.autoUpdate
rerere.enabled
revert.reference
safe.bareRepository
safe.directory
sendemail.<identity>.*
sendemail.aliasFileType
sendemail.aliasesFile
sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.confirm
sendemail.envelopeSender
sendemail.forbidSendmailVariables
sendemail.from
sendemail.identity
sendemail.multiEdit
sendemail.signedoffbycc
sendemail.smtpBatchSize
sendemail.smtpDomain
sendemail.smtpEncryption
sendemail.smtpPass
sendemail.smtpReloginDelay
sendemail.smtpServer
sendemail.smtpServerOption
sendemail.smtpServerPort
sendemail.smtpUser
sendemail.smtpsslcertpath
sendemail.suppressFrom
sendemail.suppresscc
sendemail.thread
sendemail.to
sendemail.tocmd
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer
sequence.editor
showBranch.default
sparse.expectFilesOutsideOfPatterns
splitIndex.maxPercentChange
splitIndex.sharedIndexExpire
ssh.variant
stash.showIncludeUntracked
stash.showPatch
stash.showStat
status.aheadBehind
status.branch
status.displayCommentPrefix
status.relativePaths
status.renameLimit
status.renames
status.short
status.showStash
status.showUntrackedFiles
status.submoduleSummary
submodule.<name>.active
submodule.<name>.branch
submodule.<name>.fetchRecurseSubmodules
submodule.<name>.ignore
submodule.<name>.update
submodule.<name>.url
submodule.active
submodule.alternateErrorStrategy
submodule.alternateLocation
submodule.fetchJobs
submodule.propagateBranches
submodule.recurse
tag.forceSignAnnotated
tag.gpgSign
tag.sort
tar.umask
trace2.configParams
trace2.destinationDebug
trace2.envVars
trace2.eventBrief
trace2.eventNesting
trace2.eventTarget
trace2.maxFiles
trace2.normalBrief
trace2.normalTarget
trace2.perfBrief
trace2.perfTarget
transfer.advertiseSID
transfer.credentialsInUrl
transfer.fsckObjects
transfer.hideRefs
transfer.unpackLimit
uploadarchive.allowUnreachable
uploadpack.allowAnySHA1InWant
uploadpack.allowFilter
uploadpack.allowReachableSHA1InWant
uploadpack.allowRefInWant
uploadpack.allowTipSHA1InWant
uploadpack.hideRefs
uploadpack.keepAlive
uploadpack.packObjectsHook
uploadpackfilter.<filter>.allow
uploadpackfilter.allow
uploadpackfilter.tree.maxDepth
url.<base>.insteadOf
url.<base>.pushInsteadOf
user.email
user.name
user.signingKey
user.useConfigOnly
versionsort.suffix
web.browser
worktree.guessRemote

'git help config' for more information
fatal: options '--config' and '--info' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config' and '--man' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config' and '--web' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 8 - invalid usage of '-c' with [-i|-m|-w]

expecting success of 0012.9 'invalid usage of '-c' with --no-external-commands': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 9 - invalid usage of '-c' with --no-external-commands

expecting success of 0012.10 'invalid usage of '-c' with --no-aliases': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 10 - invalid usage of '-c' with --no-aliases

expecting success of 0012.11 'invalid usage of '--config-for-completion' with [-i|-m|-w]': 
		git help $opt &&
		test_expect_code 129 git help $opt -i &&
		test_expect_code 129 git help $opt -m &&
		test_expect_code 129 git help $opt -w
	
add.ignoreErrors
add.interactive.useBuiltin
advice.addEmbeddedRepo
advice.addEmptyPathspec
advice.addIgnoredFile
advice.amWorkDir
advice.ambiguousFetchRefspec
advice.checkoutAmbiguousRemoteBranchName
advice.commitBeforeMerge
advice.detachedHead
advice.fetchShowForcedUpdates
advice.graftFileDeprecated
advice.ignoredHook
advice.implicitIdentity
advice.nestedTag
advice.objectNameWarning
advice.pushAlreadyExists
advice.pushFetchFirst
advice.pushNeedsForce
advice.pushNonFFCurrent
advice.pushNonFFMatching
advice.pushNonFastForward
advice.pushRefNeedsUpdate
advice.pushUnqualifiedRefName
advice.pushUpdateRejected
advice.resetNoRefresh
advice.resolveConflict
advice.rmHints
advice.sequencerInUse
advice.setUpstreamFailure
advice.skippedCherryPicks
advice.statusAheadBehindWarning
advice.statusHints
advice.statusUoption
advice.submoduleAlternateErrorStrategyDie
advice.submodulesNotUpdated
advice.suggestDetachingHead
advice.updateSparsePath
advice.waitingForEditor
alias.
am.keepcr
am.threeWay
apply.ignoreWhitespace
apply.whitespace
author.email
author.name
blame.blankBoundary
blame.coloring
blame.date
blame.ignoreRevsFile
blame.markIgnoredLines
blame.markUnblamableLines
blame.showEmail
blame.showRoot
branch.
branch.autoSetupMerge
branch.autoSetupRebase
branch.sort
browser.
bundle.
bundle.mode
bundle.version
checkout.defaultRemote
checkout.guess
checkout.thresholdForParallelism
checkout.workers
clean.requireForce
clone.defaultRemoteName
clone.filterSubmodules
clone.rejectShallow
color.advice
color.advice.hint
color.blame.highlightRecent
color.blame.repeatedLines
color.branch
color.branch.current
color.branch.local
color.branch.plain
color.branch.remote
color.branch.reset
color.branch.upstream
color.branch.worktree
color.decorate.HEAD
color.decorate.branch
color.decorate.grafted
color.decorate.remoteBranch
color.decorate.stash
color.decorate.tag
color.diff
color.diff.commit
color.diff.context
color.diff.contextBold
color.diff.contextDimmed
color.diff.frag
color.diff.func
color.diff.meta
color.diff.new
color.diff.newBold
color.diff.newDimmed
color.diff.newMoved
color.diff.newMovedAlternative
color.diff.newMovedAlternativeDimmed
color.diff.newMovedDimmed
color.diff.old
color.diff.oldBold
color.diff.oldDimmed
color.diff.oldMoved
color.diff.oldMovedAlternative
color.diff.oldMovedAlternativeDimmed
color.diff.oldMovedDimmed
color.diff.plain
color.diff.whitespace
color.grep
color.grep.column
color.grep.context
color.grep.filename
color.grep.function
color.grep.lineNumber
color.grep.match
color.grep.matchContext
color.grep.matchSelected
color.grep.selected
color.grep.separator
color.interactive
color.interactive.error
color.interactive.header
color.interactive.help
color.interactive.plain
color.interactive.prompt
color.interactive.reset
color.pager
color.push
color.push.error
color.remote
color.remote.error
color.remote.hint
color.remote.success
color.remote.warning
color.showBranch
color.status
color.status.added
color.status.branch
color.status.changed
color.status.header
color.status.localBranch
color.status.noBranch
color.status.remoteBranch
color.status.unmerged
color.status.untracked
color.status.updated
color.transport
color.transport.rejected
color.ui
column.branch
column.clean
column.status
column.tag
column.ui
commit.cleanup
commit.gpgSign
commit.status
commit.template
commit.verbose
commitGraph.generationVersion
commitGraph.maxNewFilters
commitGraph.readChangedPaths
committer.email
committer.name
completion.commands
core.abbrev
core.alternateRefsCommand
core.alternateRefsPrefixes
core.askPass
core.attributesFile
core.autocrlf
core.bare
core.bigFileThreshold
core.checkRoundtripEncoding
core.checkStat
core.commentChar
core.commitGraph
core.compression
core.createObject
core.deltaBaseCacheLimit
core.editor
core.eol
core.excludesFile
core.fileMode
core.filesRefLockTimeout
core.fsmonitor
core.fsmonitorHookVersion
core.fsync
core.fsyncMethod
core.fsyncObjectFiles
core.gitProxy
core.hideDotFiles
core.hooksPath
core.ignoreCase
core.ignoreStat
core.logAllRefUpdates
core.looseCompression
core.multiPackIndex
core.notesRef
core.packedGitLimit
core.packedGitWindowSize
core.packedRefsTimeout
core.pager
core.precomposeUnicode
core.preferSymlinkRefs
core.preloadIndex
core.protectHFS
core.protectNTFS
core.quotePath
core.repositoryFormatVersion
core.restrictinheritedhandles
core.safecrlf
core.sharedRepository
core.sparseCheckout
core.sparseCheckoutCone
core.splitIndex
core.sshCommand
core.symlinks
core.trustctime
core.unsetenvvars
core.untrackedCache
core.useReplaceRefs
core.warnAmbiguousRefs
core.whitespace
core.worktree
credential.
credential.helper
credential.useHttpPath
credential.username
credentialCache.ignoreSIGHUP
credentialStore.lockTimeoutMS
diff.
diff.algorithm
diff.autoRefreshIndex
diff.colorMoved
diff.colorMovedWS
diff.context
diff.dirstat
diff.external
diff.guitool
diff.ignoreSubmodules
diff.indentHeuristic
diff.interHunkContext
diff.mnemonicPrefix
diff.noprefix
diff.orderFile
diff.relative
diff.renameLimit
diff.renames
diff.statGraphWidth
diff.submodule
diff.suppressBlankEmpty
diff.tool
diff.wordRegex
diff.wsErrorHighlight
difftool.
difftool.prompt
difftool.trustExitCode
extensions.objectFormat
extensions.worktreeConfig
fastimport.unpackLimit
feature.
feature.experimental
feature.manyFiles
fetch.fsck.
fetch.fsck.skipList
fetch.fsckObjects
fetch.negotiationAlgorithm
fetch.output
fetch.parallel
fetch.prune
fetch.pruneTags
fetch.recurseSubmodules
fetch.showForcedUpdates
fetch.unpackLimit
fetch.writeCommitGraph
filter.
format.attach
format.cc
format.coverFromDescription
format.coverLetter
format.encodeEmailHeaders
format.filenameMaxLength
format.forceInBodyFrom
format.from
format.headers
format.notes
format.numbered
format.outputDirectory
format.pretty
format.signOff
format.signature
format.signatureFile
format.subjectPrefix
format.suffix
format.thread
format.to
format.useAutoBase
fsck.badDate
fsck.badDateOverflow
fsck.badEmail
fsck.badFilemode
fsck.badName
fsck.badObjectSha1
fsck.badParentSha1
fsck.badTagName
fsck.badTimezone
fsck.badTree
fsck.badTreeSha1
fsck.badType
fsck.duplicateEntries
fsck.emptyName
fsck.extraHeaderEntry
fsck.fullPathname
fsck.gitattributesSymlink
fsck.gitignoreSymlink
fsck.gitmodulesBlob
fsck.gitmodulesLarge
fsck.gitmodulesMissing
fsck.gitmodulesName
fsck.gitmodulesParse
fsck.gitmodulesPath
fsck.gitmodulesSymlink
fsck.gitmodulesUpdate
fsck.gitmodulesUrl
fsck.hasDot
fsck.hasDotdot
fsck.hasDotgit
fsck.mailmapSymlink
fsck.missingAuthor
fsck.missingCommitter
fsck.missingEmail
fsck.missingNameBeforeEmail
fsck.missingObject
fsck.missingSpaceBeforeDate
fsck.missingSpaceBeforeEmail
fsck.missingTag
fsck.missingTagEntry
fsck.missingTaggerEntry
fsck.missingTree
fsck.missingType
fsck.missingTypeEntry
fsck.multipleAuthors
fsck.nulInCommit
fsck.nulInHeader
fsck.nullSha1
fsck.skipList
fsck.treeNotSorted
fsck.unknownType
fsck.unterminatedHeader
fsck.zeroPaddedDate
fsck.zeroPaddedFilemode
fsmonitor.allowRemote
fsmonitor.socketDir
gc.
gc.aggressiveDepth
gc.aggressiveWindow
gc.auto
gc.autoDetach
gc.autoPackLimit
gc.bigPackThreshold
gc.cruftPacks
gc.logExpiry
gc.packRefs
gc.pruneExpire
gc.reflogExpire
gc.reflogExpireUnreachable
gc.rerereResolved
gc.rerereUnresolved
gc.worktreePruneExpire
gc.writeCommitGraph
gitcvs.allBinary
gitcvs.commitMsgAnnotation
gitcvs.dbDriver
gitcvs.dbName
gitcvs.dbPass
gitcvs.dbTableNamePrefix
gitcvs.dbUser
gitcvs.enabled
gitcvs.logFile
gitcvs.usecrlfattr
gitweb.avatar
gitweb.blame
gitweb.category
gitweb.description
gitweb.grep
gitweb.highlight
gitweb.owner
gitweb.patches
gitweb.pickaxe
gitweb.remote_heads
gitweb.showSizes
gitweb.snapshot
gitweb.url
gpg.
gpg.format
gpg.minTrustLevel
gpg.program
gpg.ssh.allowedSignersFile
gpg.ssh.defaultKeyCommand
gpg.ssh.revocationFile
grep.column
grep.extendedRegexp
grep.fallbackToNoIndex
grep.fullName
grep.lineNumber
grep.patternType
grep.threads
gui.blamehistoryctx
gui.commitMsgWidth
gui.copyBlameThreshold
gui.diffContext
gui.displayUntracked
gui.encoding
gui.fastCopyBlame
gui.matchTrackingBranch
gui.newBranchTemplate
gui.pruneDuringFetch
gui.spellingDictionary
gui.trustmtime
guitool.
help.autoCorrect
help.browser
help.format
help.htmlPath
http.
http.cookieFile
http.curloptResolve
http.delegation
http.emptyAuth
http.extraHeader
http.followRedirects
http.lowSpeedLimit
http.lowSpeedTime
http.maxRequests
http.minSessions
http.noEPSV
http.pinnedPubkey
http.postBuffer
http.proxy
http.proxyAuthMethod
http.proxySSLCAInfo
http.proxySSLCert
http.proxySSLCertPasswordProtected
http.proxySSLKey
http.saveCookies
http.schannelCheckRevoke
http.schannelUseSSLCAInfo
http.sslBackend
http.sslCAInfo
http.sslCAPath
http.sslCert
http.sslCertPasswordProtected
http.sslCipherList
http.sslKey
http.sslTry
http.sslVerify
http.sslVersion
http.userAgent
http.version
i18n.commitEncoding
i18n.logOutputEncoding
imap.authMethod
imap.folder
imap.host
imap.pass
imap.port
imap.preformattedHTML
imap.sslverify
imap.tunnel
imap.user
include.path
includeIf.
index.recordEndOfIndexEntries
index.recordOffsetTable
index.sparse
index.threads
index.version
init.defaultBranch
init.templateDir
instaweb.browser
instaweb.httpd
instaweb.local
instaweb.modulePath
instaweb.port
interactive.diffFilter
interactive.singleKey
log.abbrevCommit
log.date
log.decorate
log.diffMerges
log.excludeDecoration
log.follow
log.graphColors
log.initialDecorationSet
log.mailmap
log.showRoot
log.showSignature
lsrefs.unborn
mailinfo.scissors
mailmap.blob
mailmap.file
maintenance.
maintenance.auto
maintenance.commit-graph.auto
maintenance.incremental-repack.auto
maintenance.loose-objects.auto
maintenance.strategy
man.
man.viewer
merge.
merge.autoStash
merge.branchdesc
merge.conflictStyle
merge.defaultToUpstream
merge.directoryRenames
merge.ff
merge.guitool
merge.log
merge.renameLimit
merge.renames
merge.renormalize
merge.stat
merge.suppressDest
merge.tool
merge.verbosity
merge.verifySignatures
mergetool.
mergetool.hideResolved
mergetool.keepBackup
mergetool.keepTemporaries
mergetool.meld.hasOutput
mergetool.meld.useAutoMerge
mergetool.prompt
mergetool.vimdiff.layout
mergetool.writeToTemp
notes.
notes.displayRef
notes.mergeStrategy
notes.rewrite.
notes.rewriteMode
notes.rewriteRef
pack.allowPackReuse
pack.compression
pack.deltaCacheLimit
pack.deltaCacheSize
pack.depth
pack.indexVersion
pack.island
pack.islandCore
pack.packSizeLimit
pack.preferBitmapTips
pack.threads
pack.useBitmaps
pack.useSparse
pack.window
pack.windowMemory
pack.writeBitmapHashCache
pack.writeBitmapLookupTable
pack.writeReverseIndex
pager.
pretty.
protocol.
protocol.allow
protocol.version
pull.ff
pull.octopus
pull.rebase
pull.twohead
push.autoSetupRemote
push.default
push.followTags
push.gpgSign
push.negotiate
push.pushOption
push.recurseSubmodules
push.useBitmaps
push.useForceIfIncludes
rebase.abbreviateCommands
rebase.autoSquash
rebase.autoStash
rebase.backend
rebase.forkPoint
rebase.instructionFormat
rebase.missingCommitsCheck
rebase.rescheduleFailedExec
rebase.stat
rebase.updateRefs
receive.advertiseAtomic
receive.advertisePushOptions
receive.autogc
receive.certNonceSeed
receive.certNonceSlop
receive.denyCurrentBranch
receive.denyDeleteCurrent
receive.denyDeletes
receive.denyNonFastForwards
receive.fsck.badDate
receive.fsck.badDateOverflow
receive.fsck.badEmail
receive.fsck.badFilemode
receive.fsck.badName
receive.fsck.badObjectSha1
receive.fsck.badParentSha1
receive.fsck.badTagName
receive.fsck.badTimezone
receive.fsck.badTree
receive.fsck.badTreeSha1
receive.fsck.badType
receive.fsck.duplicateEntries
receive.fsck.emptyName
receive.fsck.extraHeaderEntry
receive.fsck.fullPathname
receive.fsck.gitattributesSymlink
receive.fsck.gitignoreSymlink
receive.fsck.gitmodulesBlob
receive.fsck.gitmodulesLarge
receive.fsck.gitmodulesMissing
receive.fsck.gitmodulesName
receive.fsck.gitmodulesParse
receive.fsck.gitmodulesPath
receive.fsck.gitmodulesSymlink
receive.fsck.gitmodulesUpdate
receive.fsck.gitmodulesUrl
receive.fsck.hasDot
receive.fsck.hasDotdot
receive.fsck.hasDotgit
receive.fsck.mailmapSymlink
receive.fsck.missingAuthor
receive.fsck.missingCommitter
receive.fsck.missingEmail
receive.fsck.missingNameBeforeEmail
receive.fsck.missingObject
receive.fsck.missingSpaceBeforeDate
receive.fsck.missingSpaceBeforeEmail
receive.fsck.missingTag
receive.fsck.missingTagEntry
receive.fsck.missingTaggerEntry
receive.fsck.missingTree
receive.fsck.missingType
receive.fsck.missingTypeEntry
receive.fsck.multipleAuthors
receive.fsck.nulInCommit
receive.fsck.nulInHeader
receive.fsck.nullSha1
receive.fsck.skipList
receive.fsck.treeNotSorted
receive.fsck.unknownType
receive.fsck.unterminatedHeader
receive.fsck.zeroPaddedDate
receive.fsck.zeroPaddedFilemode
receive.fsckObjects
receive.hideRefs
receive.keepAlive
receive.maxInputSize
receive.procReceiveRefs
receive.shallowUpdate
receive.unpackLimit
receive.updateServerInfo
remote.
remote.pushDefault
remotes.
repack.cruftDepth
repack.cruftThreads
repack.cruftWindow
repack.cruftWindowMemory
repack.packKeptObjects
repack.updateServerInfo
repack.useDeltaBaseOffset
repack.useDeltaIslands
repack.writeBitmaps
rerere.autoUpdate
rerere.enabled
revert.reference
safe.bareRepository
safe.directory
sendemail.
sendemail.aliasFileType
sendemail.aliasesFile
sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.confirm
sendemail.envelopeSender
sendemail.forbidSendmailVariables
sendemail.from
sendemail.identity
sendemail.multiEdit
sendemail.signedoffbycc
sendemail.smtpBatchSize
sendemail.smtpDomain
sendemail.smtpEncryption
sendemail.smtpPass
sendemail.smtpReloginDelay
sendemail.smtpServer
sendemail.smtpServerOption
sendemail.smtpServerPort
sendemail.smtpUser
sendemail.smtpsslcertpath
sendemail.suppressFrom
sendemail.suppresscc
sendemail.thread
sendemail.to
sendemail.tocmd
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer
sequence.editor
showBranch.default
sparse.expectFilesOutsideOfPatterns
splitIndex.maxPercentChange
splitIndex.sharedIndexExpire
ssh.variant
stash.showIncludeUntracked
stash.showPatch
stash.showStat
status.aheadBehind
status.branch
status.displayCommentPrefix
status.relativePaths
status.renameLimit
status.renames
status.short
status.showStash
status.showUntrackedFiles
status.submoduleSummary
submodule.
submodule.active
submodule.alternateErrorStrategy
submodule.alternateLocation
submodule.fetchJobs
submodule.propagateBranches
submodule.recurse
tag.forceSignAnnotated
tag.gpgSign
tag.sort
tar.umask
trace2.configParams
trace2.destinationDebug
trace2.envVars
trace2.eventBrief
trace2.eventNesting
trace2.eventTarget
trace2.maxFiles
trace2.normalBrief
trace2.normalTarget
trace2.perfBrief
trace2.perfTarget
transfer.advertiseSID
transfer.credentialsInUrl
transfer.fsckObjects
transfer.hideRefs
transfer.unpackLimit
uploadarchive.allowUnreachable
uploadpack.allowAnySHA1InWant
uploadpack.allowFilter
uploadpack.allowReachableSHA1InWant
uploadpack.allowRefInWant
uploadpack.allowTipSHA1InWant
uploadpack.hideRefs
uploadpack.keepAlive
uploadpack.packObjectsHook
uploadpackfilter.
uploadpackfilter.allow
uploadpackfilter.tree.maxDepth
url.
user.email
user.name
user.signingKey
user.useConfigOnly
versionsort.suffix
web.browser
worktree.guessRemote
fatal: options '--config-for-completion' and '--info' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config-for-completion' and '--man' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config-for-completion' and '--web' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 11 - invalid usage of '--config-for-completion' with [-i|-m|-w]

expecting success of 0012.12 'invalid usage of '--config-for-completion' with --no-external-commands': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 12 - invalid usage of '--config-for-completion' with --no-external-commands

expecting success of 0012.13 'invalid usage of '--config-for-completion' with --no-aliases': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 13 - invalid usage of '--config-for-completion' with --no-aliases

expecting success of 0012.14 'invalid usage of '--config-sections-for-completion' with [-i|-m|-w]': 
		git help $opt &&
		test_expect_code 129 git help $opt -i &&
		test_expect_code 129 git help $opt -m &&
		test_expect_code 129 git help $opt -w
	
add
advice
alias
am
apply
author
blame
branch
browser
bundle
checkout
clean
clone
color
column
commit
commitGraph
committer
completion
core
credential
credentialCache
credentialStore
diff
difftool
extensions
fastimport
feature
fetch
filter
format
fsck
fsmonitor
gc
gitcvs
gitweb
gpg
grep
gui
guitool
help
http
i18n
imap
include
includeIf
index
init
instaweb
interactive
log
lsrefs
mailinfo
mailmap
maintenance
man
merge
mergetool
notes
pack
pager
pretty
protocol
pull
push
rebase
receive
remote
remotes
repack
rerere
revert
safe
sendemail
sequence
showBranch
sparse
splitIndex
ssh
stash
status
submodule
tag
tar
trace2
transfer
uploadarchive
uploadpack
uploadpackfilter
url
user
versionsort
web
worktree
fatal: options '--config-sections-for-completion' and '--info' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config-sections-for-completion' and '--man' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

fatal: options '--config-sections-for-completion' and '--web' cannot be used together

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 14 - invalid usage of '--config-sections-for-completion' with [-i|-m|-w]

expecting success of 0012.15 'invalid usage of '--config-sections-for-completion' with --no-external-commands': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 15 - invalid usage of '--config-sections-for-completion' with --no-external-commands

expecting success of 0012.16 'invalid usage of '--config-sections-for-completion' with --no-aliases': 
		test_expect_code 129 git help $opt --no-external-commands
	
fatal: the '--no-[external-commands|aliases]' options can only be used with '--all'

usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
   or: git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
   or: git help [-g|--guides]
   or: git help [-c|--config]
   or: git help [--user-interfaces]
   or: git help [--developer-interfaces]

    -a, --all             print all available commands
    --external-commands   show external commands in --all
    --aliases             show aliases in --all
    -m, --man             show man page
    -w, --web             show manual in web browser
    -i, --info            show info page
    -v, --verbose         print command description
    -g, --guides          print list of useful guides
    --user-interfaces     print list of user-facing repository, command and file interfaces
    --developer-interfaces
                          print list of file formats, protocols and other developer interfaces
    -c, --config          print all configuration variable names

ok 16 - invalid usage of '--config-sections-for-completion' with --no-aliases

expecting success of 0012.17 'works for commands and guides by default': 
	configure_help &&
	git help status &&
	echo "test://html/git-status.html" >expect &&
	test_cmp expect test-browser.log &&
	git help revisions &&
	echo "test://html/gitrevisions.html" >expect &&
	test_cmp expect test-browser.log

ok 17 - works for commands and guides by default

expecting success of 0012.18 '--exclude-guides does not work for guides': 
	>test-browser.log &&
	test_must_fail git help --exclude-guides revisions &&
	test_must_be_empty test-browser.log

git: 'revisions' is not a git command. See 'git --help'.
ok 18 - --exclude-guides does not work for guides

expecting success of 0012.19 '--help does not work for guides': 
	cat <<-EOF >expect &&
		git: 'revisions' is not a git command. See 'git --help'.
	EOF
	test_must_fail git revisions --help 2>actual &&
	test_cmp expect actual

ok 19 - --help does not work for guides

expecting success of 0012.20 'git help': 
	git help >help.output &&
	test_i18ngrep "^   clone  " help.output &&
	test_i18ngrep "^   add    " help.output &&
	test_i18ngrep "^   log    " help.output &&
	test_i18ngrep "^   commit " help.output &&
	test_i18ngrep "^   fetch  " help.output

   clone     Clone a repository into a new directory
   add       Add file contents to the index
   log       Show commit logs
   commit    Record changes to the repository
   fetch     Download objects and refs from another repository
ok 20 - git help

expecting success of 0012.21 'git help -g': 
	git help -g >help.output &&
	test_i18ngrep "^   everyday   " help.output &&
	test_i18ngrep "^   tutorial   " help.output

   everyday         A useful minimum set of commands for Everyday Git
   tutorial         A tutorial introduction to Git
ok 21 - git help -g

expecting success of 0012.22 'git help fails for non-existing html pages': 
	configure_help &&
	mkdir html-empty &&
	test_must_fail git -c help.htmlpath=html-empty help status &&
	test_must_be_empty test-browser.log

fatal: 'html-empty/git-status.html': documentation file not found.
ok 22 - git help fails for non-existing html pages

expecting success of 0012.23 'git help succeeds without git.html': 
	configure_help &&
	mkdir html-with-docs &&
	touch html-with-docs/git-status.html &&
	git -c help.htmlpath=html-with-docs help status &&
	echo "html-with-docs/git-status.html" >expect &&
	test_cmp expect test-browser.log

ok 23 - git help succeeds without git.html

expecting success of 0012.24 'git help --user-interfaces': 
	git help --user-interfaces >help.output &&
	grep "^   attributes   " help.output &&
	grep "^   mailmap   " help.output

   attributes          Defining attributes per path
   mailmap             Map author/committer names and/or E-Mail addresses
ok 24 - git help --user-interfaces

expecting success of 0012.25 'git help -c': 
	git help -c >help.output &&
	cat >expect <<-\EOF &&

	'git help config' for more information
	EOF
	grep -v -E \
		-e "^[^.]+\.[^.]+$" \
		-e "^[^.]+\.[^.]+\.[^.]+$" \
		help.output >actual &&
	test_cmp expect actual

ok 25 - git help -c

expecting success of 0012.26 'git help --config-for-completion': 
	git help -c >human &&
	grep -E \
	     -e "^[^.]+\.[^.]+$" \
	     -e "^[^.]+\.[^.]+\.[^.]+$" human |
	     sed -e "s/\*.*//" -e "s/<.*//" |
	     sort -u >human.munged &&

	git help --config-for-completion >vars &&
	test_cmp human.munged vars

ok 26 - git help --config-for-completion

expecting success of 0012.27 'git help --config-sections-for-completion': 
	git help -c >human &&
	grep -E \
	     -e "^[^.]+\.[^.]+$" \
	     -e "^[^.]+\.[^.]+\.[^.]+$" human |
	     sed -e "s/\..*//" |
	     sort -u >human.munged &&

	git help --config-sections-for-completion >sections &&
	test_cmp human.munged sections

ok 27 - git help --config-sections-for-completion

expecting success of 0012.28 ''git' section spacing': 
		test_section_spacing_trailer git help <<-\EOF &&
		usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]

		These are common Git commands used in various situations:

		start a working area (see also: git help tutorial)

		work on the current change (see also: git help everyday)

		examine the history and state (see also: git help revisions)

		grow, mark and tweak your common history

		collaborate (see also: git help workflows)

		EOF
		test_cmp expect actual
	
ok 28 - 'git' section spacing

expecting success of 0012.29 ''git help' section spacing': 
		test_section_spacing_trailer git help <<-\EOF &&
		usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]

		These are common Git commands used in various situations:

		start a working area (see also: git help tutorial)

		work on the current change (see also: git help everyday)

		examine the history and state (see also: git help revisions)

		grow, mark and tweak your common history

		collaborate (see also: git help workflows)

		EOF
		test_cmp expect actual
	
ok 29 - 'git help' section spacing

expecting success of 0012.30 ''git help -a' section spacing': 
	test_section_spacing \
		git help -a --no-external-commands --no-aliases <<-\EOF &&
	See 'git help <command>' to read about a specific subcommand

	Main Porcelain Commands

	Ancillary Commands / Manipulators

	Ancillary Commands / Interrogators

	Interacting with Others

	Low-level Commands / Manipulators

	Low-level Commands / Interrogators

	Low-level Commands / Syncing Repositories

	Low-level Commands / Internal Helpers

	User-facing repository, command and file interfaces

	Developer-facing file formats, protocols and other interfaces
	EOF
	test_cmp expect actual

ok 30 - 'git help -a' section spacing

expecting success of 0012.31 ''git help -g' section spacing': 
	test_section_spacing_trailer git help -g <<-\EOF &&
	The Git concept guides are:

	EOF
	test_cmp expect actual

ok 31 - 'git help -g' section spacing

expecting success of 0012.32 'generate builtin list': 
	mkdir -p sub &&
	git --list-cmds=builtins >builtins

ok 32 - generate builtin list

expecting success of 0012.33 'add can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git add [<options>] [--] <pathspec>...
ok 33 - add can handle -h

expecting success of 0012.34 'am can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git am [<options>] [(<mbox> | <Maildir>)...]
ok 34 - am can handle -h

expecting success of 0012.35 'annotate can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 35 - annotate can handle -h

expecting success of 0012.36 'apply can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git apply [<options>] [<patch>...]
ok 36 - apply can handle -h

expecting success of 0012.37 'archive can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git archive [<options>] <tree-ish> [<path>...]
ok 37 - archive can handle -h

expecting success of 0012.38 'bisect--helper can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git bisect--helper --bisect-reset [<commit>]
ok 38 - bisect--helper can handle -h

expecting success of 0012.39 'blame can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 39 - blame can handle -h

expecting success of 0012.40 'branch can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
ok 40 - branch can handle -h

expecting success of 0012.41 'bugreport can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git bugreport [(-o | --output-directory) <path>] [(-s | --suffix) <format>]
ok 41 - bugreport can handle -h

expecting success of 0012.42 'bundle can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git bundle create [-q | --quiet | --progress | --all-progress] [--all-progress-implied]
ok 42 - bundle can handle -h

expecting success of 0012.43 'cat-file can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git cat-file <type> <object>
ok 43 - cat-file can handle -h

expecting success of 0012.44 'check-attr can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git check-attr [-a | --all | <attr>...] [--] <pathname>...
ok 44 - check-attr can handle -h

expecting success of 0012.45 'check-ignore can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git check-ignore [<options>] <pathname>...
ok 45 - check-ignore can handle -h

expecting success of 0012.46 'check-mailmap can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git check-mailmap [<options>] <contact>...
ok 46 - check-mailmap can handle -h

expecting success of 0012.47 'check-ref-format can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git check-ref-format [--normalize] [<options>] <refname>
ok 47 - check-ref-format can handle -h

expecting success of 0012.48 'checkout can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git checkout [<options>] <branch>
ok 48 - checkout can handle -h

expecting success of 0012.49 'checkout--worker can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git checkout--worker [<options>]
ok 49 - checkout--worker can handle -h

expecting success of 0012.50 'checkout-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git checkout-index [<options>] [--] [<file>...]
ok 50 - checkout-index can handle -h

expecting success of 0012.51 'cherry can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git cherry [-v] [<upstream> [<head> [<limit>]]]
ok 51 - cherry can handle -h

expecting success of 0012.52 'cherry-pick can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git cherry-pick [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff]
ok 52 - cherry-pick can handle -h

expecting success of 0012.53 'clean can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] [<pathspec>...]
ok 53 - clean can handle -h

expecting success of 0012.54 'clone can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git clone [<options>] [--] <repo> [<dir>]
ok 54 - clone can handle -h

expecting success of 0012.55 'column can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git column [<options>]
ok 55 - column can handle -h

expecting success of 0012.56 'commit can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
ok 56 - commit can handle -h

expecting success of 0012.57 'commit-graph can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git commit-graph verify [--object-dir <dir>] [--shallow] [--[no-]progress]
ok 57 - commit-graph can handle -h

expecting success of 0012.58 'commit-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git commit-tree <tree> [(-p <parent>)...]
ok 58 - commit-tree can handle -h

expecting success of 0012.59 'config can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git config [<options>]
ok 59 - config can handle -h

expecting success of 0012.60 'count-objects can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git count-objects [-v] [-H | --human-readable]
ok 60 - count-objects can handle -h

expecting success of 0012.61 'credential can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git credential (fill|approve|reject)
ok 61 - credential can handle -h

expecting success of 0012.62 'credential-cache can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git credential-cache [<options>] <action>
ok 62 - credential-cache can handle -h

expecting success of 0012.63 'credential-cache--daemon can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git credential-cache--daemon [--debug] <socket-path>
ok 63 - credential-cache--daemon can handle -h

expecting success of 0012.64 'credential-store can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git credential-store [<options>] <action>
ok 64 - credential-store can handle -h

expecting success of 0012.65 'describe can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
ok 65 - describe can handle -h

expecting success of 0012.66 'diagnose can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git diagnose [(-o | --output-directory) <path>] [(-s | --suffix) <format>]
ok 66 - diagnose can handle -h

expecting success of 0012.67 'diff can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git diff --no-index [<options>] <path> <path>
ok 67 - diff can handle -h

expecting success of 0012.68 'diff-files can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git diff-files [-q] [-0 | -1 | -2 | -3 | -c | --cc] [<common-diff-options>] [<path>...]
ok 68 - diff-files can handle -h

expecting success of 0012.69 'diff-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git diff-index [-m] [--cached] [--merge-base] [<common-diff-options>] <tree-ish> [<path>...]
ok 69 - diff-index can handle -h

expecting success of 0012.70 'diff-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git diff-tree [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]
ok 70 - diff-tree can handle -h

expecting success of 0012.71 'difftool can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]
ok 71 - difftool can handle -h

expecting success of 0012.72 'env--helper can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git env--helper --type=[bool|ulong] <options> <env-var>
ok 72 - env--helper can handle -h

expecting success of 0012.73 'fast-export can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fast-export [<rev-list-opts>]
ok 73 - fast-export can handle -h

expecting success of 0012.74 'fast-import can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fast-import [--date-format=<f>] [--max-pack-size=<n>] [--big-file-threshold=<n>] [--depth=<n>] [--active-branches=<n>] [--export-marks=<marks.file>]
ok 74 - fast-import can handle -h

expecting success of 0012.75 'fetch can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fetch [<options>] [<repository> [<refspec>...]]
ok 75 - fetch can handle -h

expecting success of 0012.76 'fetch-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fetch-pack [--all] [--stdin] [--quiet | -q] [--keep | -k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [--diag-url] [-v] [<host>:]<directory> [<refs>...]
ok 76 - fetch-pack can handle -h

expecting success of 0012.77 'fmt-merge-msg can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]
ok 77 - fmt-merge-msg can handle -h

expecting success of 0012.78 'for-each-ref can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git for-each-ref [<options>] [<pattern>]
ok 78 - for-each-ref can handle -h

expecting success of 0012.79 'for-each-repo can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git for-each-repo --config=<config> [--] <arguments>
ok 79 - for-each-repo can handle -h

expecting success of 0012.80 'format-patch can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git format-patch [<options>] [<since> | <revision-range>]
ok 80 - format-patch can handle -h

expecting success of 0012.81 'fsck can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
ok 81 - fsck can handle -h

expecting success of 0012.82 'fsck-objects can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
ok 82 - fsck-objects can handle -h

expecting success of 0012.83 'fsmonitor--daemon can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git fsmonitor--daemon start [<options>]
ok 83 - fsmonitor--daemon can handle -h

expecting success of 0012.84 'gc can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git gc [<options>]
ok 84 - gc can handle -h

expecting success of 0012.85 'get-tar-commit-id can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git get-tar-commit-id
ok 85 - get-tar-commit-id can handle -h

expecting success of 0012.86 'grep can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]
ok 86 - grep can handle -h

expecting success of 0012.87 'hash-object can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
ok 87 - hash-object can handle -h

expecting success of 0012.88 'help can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git help [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
ok 88 - help can handle -h

expecting success of 0012.89 'hook can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git hook run [--ignore-missing] <hook-name> [-- <hook-args>]
ok 89 - hook can handle -h

expecting success of 0012.90 'index-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--[no-]rev-index] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])
ok 90 - index-pack can handle -h

expecting success of 0012.91 'init can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git init [-q | --quiet] [--bare] [--template=<template-directory>]
ok 91 - init can handle -h

expecting success of 0012.92 'init-db can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git init [-q | --quiet] [--bare] [--template=<template-directory>]
ok 92 - init-db can handle -h

expecting success of 0012.93 'interpret-trailers can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git interpret-trailers [--in-place] [--trim-empty]
ok 93 - interpret-trailers can handle -h

expecting success of 0012.94 'log can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git log [<options>] [<revision-range>] [[--] <path>...]
ok 94 - log can handle -h

expecting success of 0012.95 'ls-files can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git ls-files [<options>] [<file>...]
ok 95 - ls-files can handle -h

expecting success of 0012.96 'ls-remote can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]
ok 96 - ls-remote can handle -h

expecting success of 0012.97 'ls-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git ls-tree [<options>] <tree-ish> [<path>...]
ok 97 - ls-tree can handle -h

expecting success of 0012.98 'mailinfo can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git mailinfo [<options>] <msg> <patch> < mail >info
ok 98 - mailinfo can handle -h

expecting success of 0012.99 'mailsplit can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git mailsplit [-d<prec>] [-f<n>] [-b] [--keep-cr] -o<directory> [(<mbox>|<Maildir>)...]
ok 99 - mailsplit can handle -h

expecting success of 0012.100 'maintenance can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git maintenance <subcommand> [<options>]
ok 100 - maintenance can handle -h

expecting success of 0012.101 'merge can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge [<options>] [<commit>...]
ok 101 - merge can handle -h

expecting success of 0012.102 'merge-base can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-base [-a | --all] <commit> <commit>...
ok 102 - merge-base can handle -h

expecting success of 0012.103 'merge-file can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> <orig-file> <file2>
ok 103 - merge-file can handle -h

expecting success of 0012.104 'merge-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-index [-o] [-q] <merge-program> (-a | [--] [<filename>...])
ok 104 - merge-index can handle -h

expecting success of 0012.105 'merge-ours can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-ours <base>... -- HEAD <remote>...
ok 105 - merge-ours can handle -h

expecting success of 0012.106 'merge-recursive can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-recursive <base>... -- <head> <remote> ...
ok 106 - merge-recursive can handle -h

expecting success of 0012.107 'merge-recursive-ours can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-recursive-ours <base>... -- <head> <remote> ...
ok 107 - merge-recursive-ours can handle -h

expecting success of 0012.108 'merge-recursive-theirs can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-recursive-theirs <base>... -- <head> <remote> ...
ok 108 - merge-recursive-theirs can handle -h

expecting success of 0012.109 'merge-subtree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-subtree <base>... -- <head> <remote> ...
ok 109 - merge-subtree can handle -h

expecting success of 0012.110 'merge-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git merge-tree [--write-tree] [<options>] <branch1> <branch2>
ok 110 - merge-tree can handle -h

expecting success of 0012.111 'mktag can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git mktag
ok 111 - mktag can handle -h

expecting success of 0012.112 'mktree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git mktree [-z] [--missing] [--batch]
ok 112 - mktree can handle -h

expecting success of 0012.113 'multi-pack-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-snapshot=<path>]
ok 113 - multi-pack-index can handle -h

expecting success of 0012.114 'mv can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git mv [<options>] <source>... <destination>
ok 114 - mv can handle -h

expecting success of 0012.115 'name-rev can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git name-rev [<options>] <commit>...
ok 115 - name-rev can handle -h

expecting success of 0012.116 'notes can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git notes [--ref <notes-ref>] [list [<object>]]
ok 116 - notes can handle -h

expecting success of 0012.117 'pack-objects can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git pack-objects --stdout [<options>] [< <ref-list> | < <object-list>]
ok 117 - pack-objects can handle -h

expecting success of 0012.118 'pack-redundant can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git pack-redundant [--verbose] [--alt-odb] (--all | <pack-filename>...)
ok 118 - pack-redundant can handle -h

expecting success of 0012.119 'pack-refs can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git pack-refs [--all] [--no-prune]
ok 119 - pack-refs can handle -h

expecting success of 0012.120 'patch-id can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git patch-id [--stable | --unstable | --verbatim]
ok 120 - patch-id can handle -h

expecting success of 0012.121 'pickaxe can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 121 - pickaxe can handle -h

expecting success of 0012.122 'prune can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]
ok 122 - prune can handle -h

expecting success of 0012.123 'prune-packed can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git prune-packed [-n | --dry-run] [-q | --quiet]
ok 123 - prune-packed can handle -h

expecting success of 0012.124 'pull can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git pull [<options>] [<repository> [<refspec>...]]
ok 124 - pull can handle -h

expecting success of 0012.125 'push can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git push [<options>] [<repository> [<refspec>...]]
ok 125 - push can handle -h

expecting success of 0012.126 'range-diff can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>
ok 126 - range-diff can handle -h

expecting success of 0012.127 'read-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>)
ok 127 - read-tree can handle -h

expecting success of 0012.128 'rebase can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
ok 128 - rebase can handle -h

expecting success of 0012.129 'receive-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git receive-pack <git-dir>
ok 129 - receive-pack can handle -h

expecting success of 0012.130 'reflog can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git reflog [show] [<log-options>] [<ref>]
ok 130 - reflog can handle -h

expecting success of 0012.131 'remote can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git remote [-v | --verbose]
ok 131 - remote can handle -h

expecting success of 0012.132 'remote-ext can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git remote-ext <remote> <url>
ok 132 - remote-ext can handle -h

expecting success of 0012.133 'remote-fd can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git remote-fd <remote> <url>
ok 133 - remote-fd can handle -h

expecting success of 0012.134 'repack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git repack [<options>]
ok 134 - repack can handle -h

expecting success of 0012.135 'replace can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git replace [-f] <object> <replacement>
ok 135 - replace can handle -h

expecting success of 0012.136 'rerere can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]
ok 136 - rerere can handle -h

expecting success of 0012.137 'reset can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
ok 137 - reset can handle -h

expecting success of 0012.138 'restore can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git restore [<options>] [--source=<branch>] <file>...
ok 138 - restore can handle -h

expecting success of 0012.139 'rev-list can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git rev-list [<options>] <commit>... [--] [<path>...]
    --disk-usage[=human]
ok 139 - rev-list can handle -h

expecting success of 0012.140 'rev-parse can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git rev-parse --parseopt [<options>] -- [<args>...]
Run "git rev-parse --parseopt -h" for more information on the first usage.
ok 140 - rev-parse can handle -h

expecting success of 0012.141 'revert can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>...
ok 141 - revert can handle -h

expecting success of 0012.142 'rm can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
ok 142 - rm can handle -h

expecting success of 0012.143 'send-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git send-pack [--mirror] [--dry-run] [--force]
ok 143 - send-pack can handle -h

expecting success of 0012.144 'shortlog can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git shortlog [<options>] [<revision-range>] [[--] <path>...]
ok 144 - shortlog can handle -h

expecting success of 0012.145 'show can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git log [<options>] [<revision-range>] [[--] <path>...]
ok 145 - show can handle -h

expecting success of 0012.146 'show-branch can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]
ok 146 - show-branch can handle -h

expecting success of 0012.147 'show-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git show-index [--object-format=<hash-algorithm>]
ok 147 - show-index can handle -h

expecting success of 0012.148 'show-ref can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference]
ok 148 - show-ref can handle -h

expecting success of 0012.149 'sparse-checkout can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git sparse-checkout (init | list | set | add | reapply | disable) [<options>]
ok 149 - sparse-checkout can handle -h

expecting success of 0012.150 'stage can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git add [<options>] [--] <pathspec>...
ok 150 - stage can handle -h

expecting success of 0012.151 'stash can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git stash list [<log-options>]
ok 151 - stash can handle -h

expecting success of 0012.152 'status can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git status [<options>] [--] [<pathspec>...]
ok 152 - status can handle -h

expecting success of 0012.153 'stripspace can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git stripspace [-s | --strip-comments]
ok 153 - stripspace can handle -h

expecting success of 0012.154 'submodule--helper can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git submodule--helper <command>
ok 154 - submodule--helper can handle -h

expecting success of 0012.155 'switch can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git switch [<options>] [<branch>]
ok 155 - switch can handle -h

expecting success of 0012.156 'symbolic-ref can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git symbolic-ref [-m <reason>] <name> <ref>
ok 156 - symbolic-ref can handle -h

expecting success of 0012.157 'tag can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
ok 157 - tag can handle -h

expecting success of 0012.158 'unpack-file can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git unpack-file <blob>
ok 158 - unpack-file can handle -h

expecting success of 0012.159 'unpack-objects can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git unpack-objects [-n] [-q] [-r] [--strict]
ok 159 - unpack-objects can handle -h

expecting success of 0012.160 'update-index can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git update-index [<options>] [--] [<file>...]
ok 160 - update-index can handle -h

expecting success of 0012.161 'update-ref can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git update-ref [<options>] -d <refname> [<old-val>]
ok 161 - update-ref can handle -h

expecting success of 0012.162 'update-server-info can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git update-server-info [-f | --force]
ok 162 - update-server-info can handle -h

expecting success of 0012.163 'upload-archive can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git upload-archive <repository>
ok 163 - upload-archive can handle -h

expecting success of 0012.164 'upload-archive--writer can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git upload-archive <repository>
ok 164 - upload-archive--writer can handle -h

expecting success of 0012.165 'upload-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git-upload-pack [--[no-]strict] [--timeout=<n>] [--stateless-rpc]
ok 165 - upload-pack can handle -h

expecting success of 0012.166 'var can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git var (-l | <variable>)
ok 166 - var can handle -h

expecting success of 0012.167 'verify-commit can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git verify-commit [-v | --verbose] [--raw] <commit>...
ok 167 - verify-commit can handle -h

expecting success of 0012.168 'verify-pack can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git verify-pack [-v | --verbose] [-s | --stat-only] [--] <pack>.idx...
ok 168 - verify-pack can handle -h

expecting success of 0012.169 'verify-tag can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git verify-tag [-v | --verbose] [--format=<format>] [--raw] <tag>...
ok 169 - verify-tag can handle -h

expecting success of 0012.170 'version can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git version [--build-options]
ok 170 - version can handle -h

expecting success of 0012.171 'whatchanged can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git log [<options>] [<revision-range>] [[--] <path>...]
ok 171 - whatchanged can handle -h

expecting success of 0012.172 'worktree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]]
ok 172 - worktree can handle -h

expecting success of 0012.173 'write-tree can handle -h': 
		(
			GIT_CEILING_DIRECTORIES=$(pwd) &&
			export GIT_CEILING_DIRECTORIES &&
			test_expect_code 129 git -C sub $builtin -h >output 2>&1
		) &&
		test_i18ngrep usage output
	
usage: git write-tree [--missing-ok] [--prefix=<prefix>/]
ok 173 - write-tree can handle -h

# passed all 173 test(s)
1..173
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0016-oidmap.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0016-oidmap/.git/
expecting success of 0016.1 'setup': 

	test_commit one &&
	test_commit two &&
	test_commit three &&
	test_commit four


[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
ok 1 - setup

expecting success of 0016.2 'put': 

test_oidmap "put one 1
put two 2
put invalidOid 4
put three 3" "NULL
NULL
Unknown oid: invalidOid
NULL"


ok 2 - put

expecting success of 0016.3 'replace': 

test_oidmap "put one 1
put two 2
put three 3
put invalidOid 4
put two deux
put one un" "NULL
NULL
NULL
Unknown oid: invalidOid
2
1"


ok 3 - replace

expecting success of 0016.4 'get': 

test_oidmap "put one 1
put two 2
put three 3
get two
get four
get invalidOid
get one" "NULL
NULL
NULL
2
NULL
Unknown oid: invalidOid
1"


ok 4 - get

expecting success of 0016.5 'remove': 

test_oidmap "put one 1
put two 2
put three 3
remove one
remove two
remove invalidOid
remove four" "NULL
NULL
NULL
1
2
Unknown oid: invalidOid
NULL"


ok 5 - remove

expecting success of 0016.6 'iterate': 
	test-tool oidmap >actual.raw <<-\EOF &&
	put one 1
	put two 2
	put three 3
	iterate
	EOF

	# sort "expect" too so we do not rely on the order of particular oids
	sort >expect <<-EOF &&
	NULL
	NULL
	NULL
	$(git rev-parse one) 1
	$(git rev-parse two) 2
	$(git rev-parse three) 3
	EOF

	sort <actual.raw >actual &&
	test_cmp expect actual

ok 6 - iterate

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0015-hash.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0015-hash/.git/
expecting success of 0015.1 'test basic SHA-1 hash values': 
	test-tool sha1 </dev/null >actual &&
	grep da39a3ee5e6b4b0d3255bfef95601890afd80709 actual &&
	printf "a" | test-tool sha1 >actual &&
	grep 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 actual &&
	printf "abc" | test-tool sha1 >actual &&
	grep a9993e364706816aba3e25717850c26c9cd0d89d actual &&
	printf "message digest" | test-tool sha1 >actual &&
	grep c12252ceda8be8994d5fa0290a47231c1d16aae3 actual &&
	printf "abcdefghijklmnopqrstuvwxyz" | test-tool sha1 >actual &&
	grep 32d10c7b8cf96570ca04ce37f2a19d84240d3a89 actual &&
	perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" |
		test-tool sha1 >actual &&
	grep 34aa973cd4c4daa4f61eeb2bdbad27316534016f actual &&
	printf "blob 0\0" | test-tool sha1 >actual &&
	grep e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 actual &&
	printf "blob 3\0abc" | test-tool sha1 >actual &&
	grep f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f actual &&
	printf "tree 0\0" | test-tool sha1 >actual &&
	grep 4b825dc642cb6eb9a060e54bf8d69288fbee4904 actual

da39a3ee5e6b4b0d3255bfef95601890afd80709
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
a9993e364706816aba3e25717850c26c9cd0d89d
c12252ceda8be8994d5fa0290a47231c1d16aae3
32d10c7b8cf96570ca04ce37f2a19d84240d3a89
34aa973cd4c4daa4f61eeb2bdbad27316534016f
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f
4b825dc642cb6eb9a060e54bf8d69288fbee4904
ok 1 - test basic SHA-1 hash values

expecting success of 0015.2 'test basic SHA-256 hash values': 
	test-tool sha256 </dev/null >actual &&
	grep e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 actual &&
	printf "a" | test-tool sha256 >actual &&
	grep ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb actual &&
	printf "abc" | test-tool sha256 >actual &&
	grep ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad actual &&
	printf "message digest" | test-tool sha256 >actual &&
	grep f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650 actual &&
	printf "abcdefghijklmnopqrstuvwxyz" | test-tool sha256 >actual &&
	grep 71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 actual &&
	# Try to exercise the chunking code by turning autoflush on.
	perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" |
		test-tool sha256 >actual &&
	grep cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0 actual &&
	perl -e "$| = 1; print q{abcdefghijklmnopqrstuvwxyz} for 1..100000;" |
		test-tool sha256 >actual &&
	grep e406ba321ca712ad35a698bf0af8d61fc4dc40eca6bdcea4697962724ccbde35 actual &&
	printf "blob 0\0" | test-tool sha256 >actual &&
	grep 473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813 actual &&
	printf "blob 3\0abc" | test-tool sha256 >actual &&
	grep c1cf6e465077930e88dc5136641d402f72a229ddd996f627d60e9639eaba35a6 actual &&
	printf "tree 0\0" | test-tool sha256 >actual &&
	grep 6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321 actual

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650
71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73
cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0
e406ba321ca712ad35a698bf0af8d61fc4dc40eca6bdcea4697962724ccbde35
473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813
c1cf6e465077930e88dc5136641d402f72a229ddd996f627d60e9639eaba35a6
6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
ok 2 - test basic SHA-256 hash values

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0018-advice.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0018-advice/.git/
expecting success of 0018.1 'advice should be printed when config variable is unset': 
	cat >expect <<-\EOF &&
	hint: This is a piece of advice
	hint: Disable this message with "git config advice.nestedTag false"
	EOF
	test-tool advise "This is a piece of advice" 2>actual &&
	test_cmp expect actual

ok 1 - advice should be printed when config variable is unset

expecting success of 0018.2 'advice should be printed when config variable is set to true': 
	cat >expect <<-\EOF &&
	hint: This is a piece of advice
	hint: Disable this message with "git config advice.nestedTag false"
	EOF
	test_config advice.nestedTag true &&
	test-tool advise "This is a piece of advice" 2>actual &&
	test_cmp expect actual

ok 2 - advice should be printed when config variable is set to true

expecting success of 0018.3 'advice should not be printed when config variable is set to false': 
	test_config advice.nestedTag false &&
	test-tool advise "This is a piece of advice" 2>actual &&
	test_must_be_empty actual

ok 3 - advice should not be printed when config variable is set to false

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0017-env-helper.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0017-env-helper/.git/
expecting success of 0017.1 'env--helper usage': 
	test_must_fail git env--helper &&
	test_must_fail git env--helper --type=bool &&
	test_must_fail git env--helper --type=ulong &&
	test_must_fail git env--helper --type=bool &&
	test_must_fail git env--helper --type=bool --default &&
	test_must_fail git env--helper --type=bool --default= &&
	test_must_fail git env--helper --defaultxyz

usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

error: option `default' requires a value
usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

ok 1 - env--helper usage

expecting success of 0017.2 'env--helper bad default values': 
	test_must_fail git env--helper --type=bool --default=1xyz MISSING &&
	test_must_fail git env--helper --type=ulong --default=1xyz MISSING

error: option `--default' expects a boolean value with `--type=bool`, not `1xyz`
usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

error: option `--default' expects an unsigned long value with `--type=ulong`, not `1xyz`
usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

ok 2 - env--helper bad default values

expecting success of 0017.3 'env--helper --type=bool': 
	# Test various --default bool values
	echo true >expected &&
	git env--helper --type=bool --default=1 MISSING >actual &&
	test_cmp expected actual &&
	git env--helper --type=bool --default=yes MISSING >actual &&
	test_cmp expected actual &&
	git env--helper --type=bool --default=true MISSING >actual &&
	test_cmp expected actual &&
	echo false >expected &&
	test_must_fail git env--helper --type=bool --default=0 MISSING >actual &&
	test_cmp expected actual &&
	test_must_fail git env--helper --type=bool --default=no MISSING >actual &&
	test_cmp expected actual &&
	test_must_fail git env--helper --type=bool --default=false MISSING >actual &&
	test_cmp expected actual &&

	# No output with --exit-code
	git env--helper --type=bool --default=true --exit-code MISSING >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err &&
	test_must_fail git env--helper --type=bool --default=false --exit-code MISSING >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err &&

	# Existing variable
	EXISTS=true git env--helper --type=bool --default=false --exit-code EXISTS >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err &&
	test_must_fail \
		env EXISTS=false \
		git env--helper --type=bool --default=true --exit-code EXISTS >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 3 - env--helper --type=bool

expecting success of 0017.4 'env--helper --type=ulong': 
	echo 1234567890 >expected &&
	git env--helper --type=ulong --default=1234567890 MISSING >actual.out 2>actual.err &&
	test_cmp expected actual.out &&
	test_must_be_empty actual.err &&

	echo 0 >expected &&
	test_must_fail git env--helper --type=ulong --default=0 MISSING >actual &&
	test_cmp expected actual &&

	git env--helper --type=ulong --default=1234567890 --exit-code MISSING >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err &&

	EXISTS=1234567890 git env--helper --type=ulong --default=0 EXISTS --exit-code >actual.out 2>actual.err &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err &&

	echo 1234567890 >expected &&
	EXISTS=1234567890 git env--helper --type=ulong --default=0 EXISTS >actual.out 2>actual.err &&
	test_cmp expected actual.out &&
	test_must_be_empty actual.err

ok 4 - env--helper --type=ulong

expecting success of 0017.5 'env--helper reads config thanks to trace2': 
	mkdir home &&
	git config -f home/.gitconfig include.path cycle &&
	git config -f home/cycle include.path .gitconfig &&

	test_must_fail \
		env HOME="$(pwd)/home" \
		git config -l 2>err &&
	grep "exceeded maximum include depth" err &&

	test_must_fail \
		env HOME="$(pwd)/home" GIT_TEST_ENV_HELPER=true \
		git -C cycle env--helper --type=bool --default=0 --exit-code GIT_TEST_ENV_HELPER 2>err &&
	grep "exceeded maximum include depth" err

fatal: exceeded maximum include depth (10) while including
fatal: exceeded maximum include depth (10) while including
ok 5 - env--helper reads config thanks to trace2

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0019-json-writer.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0019-json-writer/.git/
expecting success of 0019.1 'unit test of json-writer routines': 
	test-tool json-writer -u

ok 1 - unit test of json-writer routines

expecting success of 0019.2 'trivial object': 
	cat >expect <<-\EOF &&
	{}
	EOF
	cat >input <<-\EOF &&
	object
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 2 - trivial object

expecting success of 0019.3 'trivial array': 
	cat >expect <<-\EOF &&
	[]
	EOF
	cat >input <<-\EOF &&
	array
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 3 - trivial array

expecting success of 0019.4 'simple object': 
	cat >expect <<-\EOF &&
	{"a":"abc","b":42,"c":3.14,"d":true,"e":false,"f":null}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-int b 42
		object-double c 2 3.140
		object-true d
		object-false e
		object-null f
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 4 - simple object

expecting success of 0019.5 'simple array': 
	cat >expect <<-\EOF &&
	["abc",42,3.14,true,false,null]
	EOF
	cat >input <<-\EOF &&
	array
		array-string abc
		array-int 42
		array-double 2 3.140
		array-true
		array-false
		array-null
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 5 - simple array

expecting success of 0019.6 'escape quoting string': 
	cat >expect <<-\EOF &&
	{"a":"abc\\def"}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc\def
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 6 - escape quoting string

expecting success of 0019.7 'escape quoting string 2': 
	cat >expect <<-\EOF &&
	{"a":"abc\"def"}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc"def
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 7 - escape quoting string 2

expecting success of 0019.8 'nested inline object': 
	cat >expect <<-\EOF &&
	{"a":"abc","b":42,"sub1":{"c":3.14,"d":true,"sub2":{"e":false,"f":null}}}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-int b 42
		object-object sub1
			object-double c 2 3.140
			object-true d
			object-object sub2
				object-false e
				object-null f
			end
		end
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 8 - nested inline object

expecting success of 0019.9 'nested inline array': 
	cat >expect <<-\EOF &&
	["abc",42,[3.14,true,[false,null]]]
	EOF
	cat >input <<-\EOF &&
	array
		array-string abc
		array-int 42
		array-array
			array-double 2 3.140
			array-true
			array-array
				array-false
				array-null
			end
		end
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 9 - nested inline array

expecting success of 0019.10 'nested inline object and array': 
	cat >expect <<-\EOF &&
	{"a":"abc","b":42,"sub1":{"c":3.14,"d":true,"sub2":[false,null]}}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-int b 42
		object-object sub1
			object-double c 2 3.140
			object-true d
			object-array sub2
				array-false
				array-null
			end
		end
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 10 - nested inline object and array

expecting success of 0019.11 'nested inline object and array 2': 
	cat >expect <<-\EOF &&
	{"a":"abc","b":42,"sub1":{"c":3.14,"d":true,"sub2":[false,{"g":0,"h":1},null]}}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-int b 42
		object-object sub1
			object-double c 2 3.140
			object-true d
			object-array sub2
				array-false
				array-object
					object-int g 0
					object-int h 1
				end
				array-null
			end
		end
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 11 - nested inline object and array 2

expecting success of 0019.12 'pretty nested inline object and array 2': 
	sed -e "s/^|//" >expect <<-\EOF &&
	|{
	|  "a": "abc",
	|  "b": 42,
	|  "sub1": {
	|    "c": 3.14,
	|    "d": true,
	|    "sub2": [
	|      false,
	|      {
	|        "g": 0,
	|        "h": 1
	|      },
	|      null
	|    ]
	|  }
	|}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-int b 42
		object-object sub1
			object-double c 2 3.140
			object-true d
			object-array sub2
				array-false
				array-object
					object-int g 0
					object-int h 1
				end
				array-null
			end
		end
	end
	EOF
	test-tool json-writer -p <input >actual &&
	test_cmp expect actual

ok 12 - pretty nested inline object and array 2

expecting success of 0019.13 'inline object with no members': 
	cat >expect <<-\EOF &&
	{"a":"abc","empty":{},"b":42}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-object empty
		end
		object-int b 42
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 13 - inline object with no members

expecting success of 0019.14 'inline array with no members': 
	cat >expect <<-\EOF &&
	{"a":"abc","empty":[],"b":42}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-array empty
		end
		object-int b 42
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 14 - inline array with no members

expecting success of 0019.15 'larger empty example': 
	cat >expect <<-\EOF &&
	{"a":"abc","empty":[{},{},{},[],{}],"b":42}
	EOF
	cat >input <<-\EOF &&
	object
		object-string a abc
		object-array empty
			array-object
			end
			array-object
			end
			array-object
			end
			array-array
			end
			array-object
			end
		end
		object-int b 42
	end
	EOF
	test-tool json-writer <input >actual &&
	test_cmp expect actual

ok 15 - larger empty example

checking prerequisite: PERLJSON

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PERLJSON" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PERLJSON" &&
	perl -MJSON -e "exit 0"

)
Can't locate JSON.pm in @INC (you may need to install the JSON module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.36.0 /usr/local/share/perl/5.36.0 /usr/lib/arm-linux-gnueabihf/perl5/5.36 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl-base /usr/lib/arm-linux-gnueabihf/perl/5.36 /usr/share/perl/5.36 /usr/local/lib/site_perl .).
BEGIN failed--compilation aborted.
prerequisite PERLJSON not satisfied
ok 16 # skip parse JSON using Perl (missing PERLJSON)

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0020-crlf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0020-crlf/.git/
expecting success of 0020.1 'setup': 

	git config core.autocrlf false &&

	test_write_lines Hello world how are you >one &&
	mkdir dir &&
	test_write_lines I am very very fine thank you >dir/two &&
	test_write_lines Oh here is NULQin text here | q_to_nul >three &&
	git add . &&

	git commit -m initial &&

	one=$(git rev-parse HEAD:one) &&
	dir=$(git rev-parse HEAD:dir) &&
	two=$(git rev-parse HEAD:dir/two) &&
	three=$(git rev-parse HEAD:three) &&

	test_write_lines Some extra lines here >>one &&
	git diff >patch.file &&
	patched=$(git hash-object --stdin <one) &&
	git read-tree --reset -u HEAD

[main (root-commit) 69d7d88] initial
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 dir/two
 create mode 100644 one
 create mode 100644 three
ok 1 - setup

expecting success of 0020.2 'safecrlf: autocrlf=input, all CRLF': 

	git config core.autocrlf input &&
	git config core.safecrlf true &&

	test_write_lines I am all CRLF | append_cr >allcrlf &&
	test_must_fail git add allcrlf

fatal: CRLF would be replaced by LF in allcrlf
ok 2 - safecrlf: autocrlf=input, all CRLF

expecting success of 0020.3 'safecrlf: autocrlf=input, mixed LF/CRLF': 

	git config core.autocrlf input &&
	git config core.safecrlf true &&

	test_write_lines Oh here is CRLFQ in text | q_to_cr >mixed &&
	test_must_fail git add mixed

fatal: CRLF would be replaced by LF in mixed
ok 3 - safecrlf: autocrlf=input, mixed LF/CRLF

expecting success of 0020.4 'safecrlf: autocrlf=true, all LF': 

	git config core.autocrlf true &&
	git config core.safecrlf true &&

	test_write_lines I am all LF >alllf &&
	test_must_fail git add alllf

fatal: LF would be replaced by CRLF in alllf
ok 4 - safecrlf: autocrlf=true, all LF

expecting success of 0020.5 'safecrlf: autocrlf=true mixed LF/CRLF': 

	git config core.autocrlf true &&
	git config core.safecrlf true &&

	test_write_lines Oh here is CRLFQ in text | q_to_cr >mixed &&
	test_must_fail git add mixed

fatal: LF would be replaced by CRLF in mixed
ok 5 - safecrlf: autocrlf=true mixed LF/CRLF

expecting success of 0020.6 'safecrlf: print warning only once': 

	git config core.autocrlf input &&
	git config core.safecrlf warn &&

	test_write_lines I am all LF >doublewarn &&
	git add doublewarn &&
	git commit -m "nowarn" &&
	test_write_lines Oh here is CRLFQ in text | q_to_cr >doublewarn &&
	git add doublewarn 2>err &&
	grep "CRLF will be replaced by LF" err >err.warnings &&
	test_line_count = 1 err.warnings

[main 4d5dbcd] nowarn
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 doublewarn
ok 6 - safecrlf: print warning only once

expecting success of 0020.7 'safecrlf: git diff demotes safecrlf=true to warn': 
	git config core.autocrlf input &&
	git config core.safecrlf true &&
	git diff HEAD

diff --git a/doublewarn b/doublewarn
index 03ba6c2..1ed2a2c 100644
--- a/doublewarn
+++ b/doublewarn
@@ -1,4 +1,6 @@
-I
-am
-all
-LF
+Oh
+here
+is
+CRLF
+in
+text
ok 7 - safecrlf: git diff demotes safecrlf=true to warn

expecting success of 0020.8 'safecrlf: no warning with safecrlf=false': 
	git config core.autocrlf input &&
	git config core.safecrlf false &&

	test_write_lines I am all CRLF | append_cr >allcrlf &&
	git add allcrlf 2>err &&
	test_must_be_empty err

ok 8 - safecrlf: no warning with safecrlf=false

expecting success of 0020.9 'switch off autocrlf, safecrlf, reset HEAD': 
	git config core.autocrlf false &&
	git config core.safecrlf false &&
	git reset --hard HEAD^

HEAD is now at 69d7d88 initial
ok 9 - switch off autocrlf, safecrlf, reset HEAD

expecting success of 0020.10 'update with autocrlf=input': 

	rm -f tmp one dir/two three &&
	git read-tree --reset -u HEAD &&
	git config core.autocrlf input &&
	munge_cr append one &&
	munge_cr append dir/two &&
	git update-index -- one dir/two &&
	differs=$(git diff-index --cached HEAD) &&
	verbose test -z "$differs"


ok 10 - update with autocrlf=input

expecting success of 0020.11 'update with autocrlf=true': 

	rm -f tmp one dir/two three &&
	git read-tree --reset -u HEAD &&
	git config core.autocrlf true &&
	munge_cr append one &&
	munge_cr append dir/two &&
	git update-index -- one dir/two &&
	differs=$(git diff-index --cached HEAD) &&
	verbose test -z "$differs"


ok 11 - update with autocrlf=true

expecting success of 0020.12 'checkout with autocrlf=true': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&
	munge_cr remove one &&
	munge_cr remove dir/two &&
	git update-index -- one dir/two &&
	test "$one" = $(git hash-object --stdin <one) &&
	test "$two" = $(git hash-object --stdin <dir/two) &&
	differs=$(git diff-index --cached HEAD) &&
	verbose test -z "$differs"

ok 12 - checkout with autocrlf=true

expecting success of 0020.13 'checkout with autocrlf=input': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf input &&
	git read-tree --reset -u HEAD &&
	! has_cr one &&
	! has_cr dir/two &&
	git update-index -- one dir/two &&
	test "$one" = $(git hash-object --stdin <one) &&
	test "$two" = $(git hash-object --stdin <dir/two) &&
	differs=$(git diff-index --cached HEAD) &&
	verbose test -z "$differs"

ok 13 - checkout with autocrlf=input

expecting success of 0020.14 'apply patch (autocrlf=input)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf input &&
	git read-tree --reset -u HEAD &&

	git apply patch.file &&
	verbose test "$patched" = "$(git hash-object --stdin <one)"

ok 14 - apply patch (autocrlf=input)

expecting success of 0020.15 'apply patch --cached (autocrlf=input)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf input &&
	git read-tree --reset -u HEAD &&

	git apply --cached patch.file &&
	verbose test "$patched" = $(git rev-parse :one)

ok 15 - apply patch --cached (autocrlf=input)

expecting success of 0020.16 'apply patch --index (autocrlf=input)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf input &&
	git read-tree --reset -u HEAD &&

	git apply --index patch.file &&
	verbose test "$patched" = $(git rev-parse :one) &&
	verbose test "$patched" = $(git hash-object --stdin <one)

ok 16 - apply patch --index (autocrlf=input)

expecting success of 0020.17 'apply patch (autocrlf=true)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	git apply patch.file &&
	verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)"

ok 17 - apply patch (autocrlf=true)

expecting success of 0020.18 'apply patch --cached (autocrlf=true)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	git apply --cached patch.file &&
	verbose test "$patched" = $(git rev-parse :one)

ok 18 - apply patch --cached (autocrlf=true)

expecting success of 0020.19 'apply patch --index (autocrlf=true)': 

	rm -f tmp one dir/two three &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	git apply --index patch.file &&
	verbose test "$patched" = $(git rev-parse :one) &&
	verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)"

ok 19 - apply patch --index (autocrlf=true)

expecting success of 0020.20 '.gitattributes says two is binary': 

	rm -f tmp one dir/two three &&
	echo "two -crlf" >.gitattributes &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	! has_cr dir/two &&
	verbose has_cr one &&
	! has_cr three

ok 20 - .gitattributes says two is binary

expecting success of 0020.21 '.gitattributes says two is input': 

	rm -f tmp one dir/two three &&
	echo "two crlf=input" >.gitattributes &&
	git read-tree --reset -u HEAD &&

	! has_cr dir/two

ok 21 - .gitattributes says two is input

expecting success of 0020.22 '.gitattributes says two and three are text': 

	rm -f tmp one dir/two three &&
	echo "t* crlf" >.gitattributes &&
	git read-tree --reset -u HEAD &&

	verbose has_cr dir/two &&
	verbose has_cr three

ok 22 - .gitattributes says two and three are text

expecting success of 0020.23 'in-tree .gitattributes (1)': 

	echo "one -crlf" >>.gitattributes &&
	git add .gitattributes &&
	git commit -m "Add .gitattributes" &&

	rm -rf tmp one dir .gitattributes patch.file three &&
	git read-tree --reset -u HEAD &&

	! has_cr one &&
	verbose has_cr three

[main 31eb750] Add .gitattributes
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 .gitattributes
ok 23 - in-tree .gitattributes (1)

expecting success of 0020.24 'in-tree .gitattributes (2)': 

	rm -rf tmp one dir .gitattributes patch.file three &&
	git read-tree --reset HEAD &&
	git checkout-index -f -q -u -a &&

	! has_cr one &&
	verbose has_cr three

ok 24 - in-tree .gitattributes (2)

expecting success of 0020.25 'in-tree .gitattributes (3)': 

	rm -rf tmp one dir .gitattributes patch.file three &&
	git read-tree --reset HEAD &&
	git checkout-index -u .gitattributes &&
	git checkout-index -u one dir/two three &&

	! has_cr one &&
	verbose has_cr three

ok 25 - in-tree .gitattributes (3)

expecting success of 0020.26 'in-tree .gitattributes (4)': 

	rm -rf tmp one dir .gitattributes patch.file three &&
	git read-tree --reset HEAD &&
	git checkout-index -u one dir/two three &&
	git checkout-index -u .gitattributes &&

	! has_cr one &&
	verbose has_cr three

ok 26 - in-tree .gitattributes (4)

expecting success of 0020.27 'checkout with existing .gitattributes': 

	git config core.autocrlf true &&
	git config --unset core.safecrlf &&
	echo ".file2 -crlfQ" | q_to_cr >> .gitattributes &&
	git add .gitattributes &&
	git commit -m initial &&
	echo ".file -crlfQ" | q_to_cr >> .gitattributes &&
	echo "contents" > .file &&
	git add .gitattributes .file &&
	git commit -m second &&

	git checkout main~1 &&
	git checkout main &&
	test "$(git diff-files --raw)" = ""


[main 6d0586a] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main f2c783e] second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 .file
Note: switching to 'main~1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6d0586a initial
Previous HEAD position was 6d0586a initial
Switched to branch 'main'
ok 27 - checkout with existing .gitattributes

expecting success of 0020.28 'checkout when deleting .gitattributes': 

	git rm .gitattributes &&
	echo "contentsQ" | q_to_cr > .file2 &&
	git add .file2 &&
	git commit -m third &&

	git checkout main~1 &&
	git checkout main &&
	has_cr .file2


rm '.gitattributes'
[main edaea69] third
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 4 deletions(-)
 create mode 100644 .file2
 delete mode 100644 .gitattributes
Note: switching to 'main~1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f2c783e second
M	three
Previous HEAD position was f2c783e second
Switched to branch 'main'
ok 28 - checkout when deleting .gitattributes

expecting success of 0020.29 'invalid .gitattributes (must not crash)': 

	echo "three +crlf" >>.gitattributes &&
	git diff


+crlf is not a valid attribute name: .gitattributes:1
+crlf is not a valid attribute name: .gitattributes:1
diff --git a/three b/three
index 98efc5e..c5c386a 100644
Binary files a/three and b/three differ
ok 29 - invalid .gitattributes (must not crash)

expecting success of 0020.30 'setting up for new autocrlf tests': 
	git config core.autocrlf false &&
	git config core.safecrlf false &&
	rm -rf .????* * &&
	test_write_lines I am all LF >alllf &&
	test_write_lines Oh here is CRLFQ in text | q_to_cr >mixed &&
	test_write_lines I am all CRLF | append_cr >allcrlf &&
	git add -A . &&
	git commit -m "alllf, allcrlf and mixed only" &&
	git tag -a -m "message" autocrlf-checkpoint

[main 021c55b] alllf, allcrlf and mixed only
 Author: A U Thor <author@example.com>
 7 files changed, 8 insertions(+), 14 deletions(-)
 delete mode 100644 .file
 delete mode 100644 .file2
 create mode 100644 allcrlf
 create mode 100644 alllf
 delete mode 100644 dir/two
 rename three => mixed (57%)
 delete mode 100644 one
ok 30 - setting up for new autocrlf tests

expecting success of 0020.31 'report no change after setting autocrlf': 
	git config core.autocrlf true &&
	touch * &&
	git diff --exit-code

ok 31 - report no change after setting autocrlf

expecting success of 0020.32 'files are clean after checkout': 
	rm * &&
	git checkout -f &&
	git diff --exit-code

ok 32 - files are clean after checkout

expecting success of 0020.33 'LF only file gets CRLF with autocrlf': 
	test "$(cr_to_Q_no_NL < alllf)" = "IQamQallQLFQ"

ok 33 - LF only file gets CRLF with autocrlf

expecting success of 0020.34 'Mixed file is still mixed with autocrlf': 
	test "$(cr_to_Q_no_NL < mixed)" = "OhhereisCRLFQintext"

ok 34 - Mixed file is still mixed with autocrlf

expecting success of 0020.35 'CRLF only file has CRLF with autocrlf': 
	test "$(cr_to_Q_no_NL < allcrlf)" = "IQamQallQCRLFQ"

ok 35 - CRLF only file has CRLF with autocrlf

expecting success of 0020.36 'New CRLF file gets LF in repo': 
	tr -d "\015" < alllf | append_cr > alllf2 &&
	git add alllf2 &&
	git commit -m "alllf2 added" &&
	git config core.autocrlf false &&
	rm * &&
	git checkout -f &&
	test_cmp alllf alllf2

[main 6ebdedc] alllf2 added
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 alllf2
ok 36 - New CRLF file gets LF in repo

# passed all 36 test(s)
1..36
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0022-crlf-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0022-crlf-rename/.git/
expecting success of 0022.1 'setup': 

	cat "$TEST_DIRECTORY"/t0022-crlf-rename.sh >sample &&
	git add sample &&

	test_tick &&
	git commit -m Initial &&

	append_cr <"$TEST_DIRECTORY"/t0022-crlf-rename.sh >elpmas &&
	git add elpmas &&
	rm -f sample &&

	test_tick &&
	git commit -a -m Second


[master (root-commit) d48b93e] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 34 insertions(+)
 create mode 100644 sample
[master 42002cb] Second
 Author: A U Thor <author@example.com>
 1 file changed, 34 insertions(+), 34 deletions(-)
 rename sample => elpmas (94%)
ok 1 - setup

expecting success of 0022.2 'diff -M': 

	git diff-tree -M -r --name-status HEAD^ HEAD >tmp &&
	sed -e "s/R[0-9]*/RNUM/" tmp >actual &&
	echo "RNUM	sample	elpmas" >expect &&
	test_cmp expect actual


ok 2 - diff -M

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0008-ignores.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0008-ignores/.git/
expecting success of 0008.1 'setup': 
	init_vars &&
	mkdir -p a/b/ignored-dir a/submodule b &&
	if test_have_prereq SYMLINKS
	then
		ln -s b a/symlink
	fi &&
	(
		cd a/submodule &&
		git init &&
		echo a >a &&
		git add a &&
		git commit -m"commit in submodule"
	) &&
	git add a/submodule &&
	cat <<-\EOF >.gitignore &&
		one
		ignored-*
		top-level-dir/
	EOF
	for dir in . a
	do
		: >$dir/not-ignored &&
		: >$dir/ignored-and-untracked &&
		: >$dir/ignored-but-in-index || return 1
	done &&
	git add -f ignored-but-in-index a/ignored-but-in-index &&
	cat <<-\EOF >a/.gitignore &&
		two*
		*three
	EOF
	cat <<-\EOF >a/b/.gitignore &&
		four
		five
		# this comment should affect the line numbers
		six
		ignored-dir/
		# and so should this blank line:

		!on*
		!two
	EOF
	echo "seven" >a/b/ignored-dir/.gitignore &&
	test -n "$HOME" &&
	cat <<-\EOF >"$global_excludes" &&
		globalone
		!globaltwo
		globalthree
	EOF
	mkdir .git/info &&
	cat <<-\EOF >.git/info/exclude
		per-repo
	EOF

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0008-ignores/a/submodule/.git/
[master (root-commit) d93acdf] commit in submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
warning: adding embedded git repository: a/submodule
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> a/submodule
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached a/submodule
hint: 
hint: See "git help submodule" for more information.
ok 1 - setup

expecting success of 0008.2 '. corner-case': 
		expect "$expect" &&
		eval "$code"
	
ok 2 - . corner-case

expecting success of 0008.3 '. corner-case with -q': 
			expect '' &&
			
	test_check_ignore . 1

		
ok 3 - . corner-case with -q

expecting success of 0008.4 '. corner-case with --quiet': 
			expect '' &&
			
	test_check_ignore . 1

		
ok 4 - . corner-case with --quiet

expecting success of 0008.5 '. corner-case with -v': 
				expect '' &&
				
	test_check_ignore . 1

			
ok 5 - . corner-case with -v

expecting success of 0008.6 '. corner-case with -v -n': 
				expect '::	.' &&
				
	test_check_ignore . 1

			
ok 6 - . corner-case with -v -n

expecting success of 0008.7 '. corner-case with -v --non-matching': 
				expect '::	.' &&
				
	test_check_ignore . 1

			
ok 7 - . corner-case with -v --non-matching

expecting success of 0008.8 '. corner-case with --verbose': 
				expect '' &&
				
	test_check_ignore . 1

			
ok 8 - . corner-case with --verbose

expecting success of 0008.9 '. corner-case with --verbose -n': 
				expect '::	.' &&
				
	test_check_ignore . 1

			
ok 9 - . corner-case with --verbose -n

expecting success of 0008.10 '. corner-case with --verbose --non-matching': 
				expect '::	.' &&
				
	test_check_ignore . 1

			
ok 10 - . corner-case with --verbose --non-matching

expecting success of 0008.11 'empty command line': 
		expect "$expect" &&
		eval "$code"
	
fatal: no path specified
ok 11 - empty command line

expecting success of 0008.12 'empty command line with -q': 
			expect '' &&
			
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

		
fatal: no path specified
ok 12 - empty command line with -q

expecting success of 0008.13 'empty command line with --quiet': 
			expect '' &&
			
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

		
fatal: no path specified
ok 13 - empty command line with --quiet

expecting success of 0008.14 'empty command line with -v': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 14 - empty command line with -v

expecting success of 0008.15 'empty command line with -v -n': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 15 - empty command line with -v -n

expecting success of 0008.16 'empty command line with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 16 - empty command line with -v --non-matching

expecting success of 0008.17 'empty command line with --verbose': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 17 - empty command line with --verbose

expecting success of 0008.18 'empty command line with --verbose -n': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 18 - empty command line with --verbose -n

expecting success of 0008.19 'empty command line with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 19 - empty command line with --verbose --non-matching

expecting success of 0008.20 '--stdin with empty STDIN': 
		expect "$expect" &&
		eval "$code"
	
ok 20 - --stdin with empty STDIN

expecting success of 0008.21 '--stdin with empty STDIN with -q': 
			expect '' &&
			
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

		
ok 21 - --stdin with empty STDIN with -q

expecting success of 0008.22 '--stdin with empty STDIN with --quiet': 
			expect '' &&
			
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

		
ok 22 - --stdin with empty STDIN with --quiet

expecting success of 0008.23 '--stdin with empty STDIN with -v': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 23 - --stdin with empty STDIN with -v

expecting success of 0008.24 '--stdin with empty STDIN with -v -n': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 24 - --stdin with empty STDIN with -v -n

expecting success of 0008.25 '--stdin with empty STDIN with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 25 - --stdin with empty STDIN with -v --non-matching

expecting success of 0008.26 '--stdin with empty STDIN with --verbose': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 26 - --stdin with empty STDIN with --verbose

expecting success of 0008.27 '--stdin with empty STDIN with --verbose -n': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 27 - --stdin with empty STDIN with --verbose -n

expecting success of 0008.28 '--stdin with empty STDIN with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin" 1 </dev/null &&
	test_stderr ""

			
ok 28 - --stdin with empty STDIN with --verbose --non-matching

expecting success of 0008.29 '-q with multiple args': 
	expect "" &&
	test_check_ignore "-q one two" 128 &&
	stderr_contains "fatal: --quiet is only valid with a single pathname"

fatal: --quiet is only valid with a single pathname
ok 29 - -q with multiple args

expecting success of 0008.30 '--quiet with multiple args': 
	expect "" &&
	test_check_ignore "--quiet one two" 128 &&
	stderr_contains "fatal: --quiet is only valid with a single pathname"

fatal: --quiet is only valid with a single pathname
ok 30 - --quiet with multiple args

expecting success of 0008.31 '-q -v': 
			expect '' &&
			test_check_ignore '-q -v foo' 128 &&
			stderr_contains 'fatal: cannot have both --quiet and --verbose'
		
fatal: cannot have both --quiet and --verbose
ok 31 - -q -v

expecting success of 0008.32 '--quiet -v': 
			expect '' &&
			test_check_ignore '--quiet -v foo' 128 &&
			stderr_contains 'fatal: cannot have both --quiet and --verbose'
		
fatal: cannot have both --quiet and --verbose
ok 32 - --quiet -v

expecting success of 0008.33 '-q --verbose': 
			expect '' &&
			test_check_ignore '-q --verbose foo' 128 &&
			stderr_contains 'fatal: cannot have both --quiet and --verbose'
		
fatal: cannot have both --quiet and --verbose
ok 33 - -q --verbose

expecting success of 0008.34 '--quiet --verbose': 
			expect '' &&
			test_check_ignore '--quiet --verbose foo' 128 &&
			stderr_contains 'fatal: cannot have both --quiet and --verbose'
		
fatal: cannot have both --quiet and --verbose
ok 34 - --quiet --verbose

expecting success of 0008.35 '--quiet with multiple args': 
	expect "" &&
	test_check_ignore "--quiet one two" 128 &&
	stderr_contains "fatal: --quiet is only valid with a single pathname"

fatal: --quiet is only valid with a single pathname
ok 35 - --quiet with multiple args

expecting success of 0008.36 'erroneous use of --': 
		expect "$expect" &&
		eval "$code"
	
fatal: no path specified
ok 36 - erroneous use of --

expecting success of 0008.37 'erroneous use of -- with -q': 
			expect '' &&
			
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

		
fatal: no path specified
ok 37 - erroneous use of -- with -q

expecting success of 0008.38 'erroneous use of -- with --quiet': 
			expect '' &&
			
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

		
fatal: no path specified
ok 38 - erroneous use of -- with --quiet

expecting success of 0008.39 'erroneous use of -- with -v': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 39 - erroneous use of -- with -v

expecting success of 0008.40 'erroneous use of -- with -v -n': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 40 - erroneous use of -- with -v -n

expecting success of 0008.41 'erroneous use of -- with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 41 - erroneous use of -- with -v --non-matching

expecting success of 0008.42 'erroneous use of -- with --verbose': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 42 - erroneous use of -- with --verbose

expecting success of 0008.43 'erroneous use of -- with --verbose -n': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 43 - erroneous use of -- with --verbose -n

expecting success of 0008.44 'erroneous use of -- with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "--" 128 &&
	stderr_contains "fatal: no path specified"

			
fatal: no path specified
ok 44 - erroneous use of -- with --verbose --non-matching

expecting success of 0008.45 '--stdin with superfluous arg': 
		expect "$expect" &&
		eval "$code"
	
fatal: cannot specify pathnames with --stdin
ok 45 - --stdin with superfluous arg

expecting success of 0008.46 '--stdin with superfluous arg with -q': 
			expect '' &&
			
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

		
fatal: cannot specify pathnames with --stdin
ok 46 - --stdin with superfluous arg with -q

expecting success of 0008.47 '--stdin with superfluous arg with --quiet': 
			expect '' &&
			
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

		
fatal: cannot specify pathnames with --stdin
ok 47 - --stdin with superfluous arg with --quiet

expecting success of 0008.48 '--stdin with superfluous arg with -v': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 48 - --stdin with superfluous arg with -v

expecting success of 0008.49 '--stdin with superfluous arg with -v -n': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 49 - --stdin with superfluous arg with -v -n

expecting success of 0008.50 '--stdin with superfluous arg with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 50 - --stdin with superfluous arg with -v --non-matching

expecting success of 0008.51 '--stdin with superfluous arg with --verbose': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 51 - --stdin with superfluous arg with --verbose

expecting success of 0008.52 '--stdin with superfluous arg with --verbose -n': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 52 - --stdin with superfluous arg with --verbose -n

expecting success of 0008.53 '--stdin with superfluous arg with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 53 - --stdin with superfluous arg with --verbose --non-matching

expecting success of 0008.54 '--stdin -z with superfluous arg': 
		expect "$expect" &&
		eval "$code"
	
fatal: cannot specify pathnames with --stdin
ok 54 - --stdin -z with superfluous arg

expecting success of 0008.55 '--stdin -z with superfluous arg with -q': 
			expect '' &&
			
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

		
fatal: cannot specify pathnames with --stdin
ok 55 - --stdin -z with superfluous arg with -q

expecting success of 0008.56 '--stdin -z with superfluous arg with --quiet': 
			expect '' &&
			
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

		
fatal: cannot specify pathnames with --stdin
ok 56 - --stdin -z with superfluous arg with --quiet

expecting success of 0008.57 '--stdin -z with superfluous arg with -v': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 57 - --stdin -z with superfluous arg with -v

expecting success of 0008.58 '--stdin -z with superfluous arg with -v -n': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 58 - --stdin -z with superfluous arg with -v -n

expecting success of 0008.59 '--stdin -z with superfluous arg with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 59 - --stdin -z with superfluous arg with -v --non-matching

expecting success of 0008.60 '--stdin -z with superfluous arg with --verbose': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 60 - --stdin -z with superfluous arg with --verbose

expecting success of 0008.61 '--stdin -z with superfluous arg with --verbose -n': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 61 - --stdin -z with superfluous arg with --verbose -n

expecting success of 0008.62 '--stdin -z with superfluous arg with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "--stdin -z foo" 128 &&
	stderr_contains "fatal: cannot specify pathnames with --stdin"

			
fatal: cannot specify pathnames with --stdin
ok 62 - --stdin -z with superfluous arg with --verbose --non-matching

expecting success of 0008.63 '-z without --stdin': 
		expect "$expect" &&
		eval "$code"
	
fatal: -z only makes sense with --stdin
ok 63 - -z without --stdin

expecting success of 0008.64 '-z without --stdin with -q': 
			expect '' &&
			
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

		
fatal: -z only makes sense with --stdin
ok 64 - -z without --stdin with -q

expecting success of 0008.65 '-z without --stdin with --quiet': 
			expect '' &&
			
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

		
fatal: -z only makes sense with --stdin
ok 65 - -z without --stdin with --quiet

expecting success of 0008.66 '-z without --stdin with -v': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 66 - -z without --stdin with -v

expecting success of 0008.67 '-z without --stdin with -v -n': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 67 - -z without --stdin with -v -n

expecting success of 0008.68 '-z without --stdin with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 68 - -z without --stdin with -v --non-matching

expecting success of 0008.69 '-z without --stdin with --verbose': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 69 - -z without --stdin with --verbose

expecting success of 0008.70 '-z without --stdin with --verbose -n': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 70 - -z without --stdin with --verbose -n

expecting success of 0008.71 '-z without --stdin with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "-z" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 71 - -z without --stdin with --verbose --non-matching

expecting success of 0008.72 '-z without --stdin and superfluous arg': 
		expect "$expect" &&
		eval "$code"
	
fatal: -z only makes sense with --stdin
ok 72 - -z without --stdin and superfluous arg

expecting success of 0008.73 '-z without --stdin and superfluous arg with -q': 
			expect '' &&
			
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

		
fatal: -z only makes sense with --stdin
ok 73 - -z without --stdin and superfluous arg with -q

expecting success of 0008.74 '-z without --stdin and superfluous arg with --quiet': 
			expect '' &&
			
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

		
fatal: -z only makes sense with --stdin
ok 74 - -z without --stdin and superfluous arg with --quiet

expecting success of 0008.75 '-z without --stdin and superfluous arg with -v': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 75 - -z without --stdin and superfluous arg with -v

expecting success of 0008.76 '-z without --stdin and superfluous arg with -v -n': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 76 - -z without --stdin and superfluous arg with -v -n

expecting success of 0008.77 '-z without --stdin and superfluous arg with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 77 - -z without --stdin and superfluous arg with -v --non-matching

expecting success of 0008.78 '-z without --stdin and superfluous arg with --verbose': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 78 - -z without --stdin and superfluous arg with --verbose

expecting success of 0008.79 '-z without --stdin and superfluous arg with --verbose -n': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 79 - -z without --stdin and superfluous arg with --verbose -n

expecting success of 0008.80 '-z without --stdin and superfluous arg with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "-z foo" 128 &&
	stderr_contains "fatal: -z only makes sense with --stdin"

			
fatal: -z only makes sense with --stdin
ok 80 - -z without --stdin and superfluous arg with --verbose --non-matching

expecting success of 0008.81 'needs work tree': 
		expect "$expect" &&
		eval "$code"
	
fatal: this operation must be run in a work tree
ok 81 - needs work tree

expecting success of 0008.82 'needs work tree with -q': 
			expect '' &&
			
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

		
fatal: this operation must be run in a work tree
ok 82 - needs work tree with -q

expecting success of 0008.83 'needs work tree with --quiet': 
			expect '' &&
			
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

		
fatal: this operation must be run in a work tree
ok 83 - needs work tree with --quiet

expecting success of 0008.84 'needs work tree with -v': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 84 - needs work tree with -v

expecting success of 0008.85 'needs work tree with -v -n': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 85 - needs work tree with -v -n

expecting success of 0008.86 'needs work tree with -v --non-matching': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 86 - needs work tree with -v --non-matching

expecting success of 0008.87 'needs work tree with --verbose': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 87 - needs work tree with --verbose

expecting success of 0008.88 'needs work tree with --verbose -n': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 88 - needs work tree with --verbose -n

expecting success of 0008.89 'needs work tree with --verbose --non-matching': 
				expect '' &&
				
	(
		cd .git &&
		test_check_ignore "foo" 128
	) &&
	stderr_contains "fatal: this operation must be run in a work tree"

			
fatal: this operation must be run in a work tree
ok 89 - needs work tree with --verbose --non-matching

expecting success of 0008.90 'non-existent file at top-level not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 90 - non-existent file at top-level not ignored

expecting success of 0008.91 'non-existent file at top-level not ignored with -q': 
			expect '' &&
			test_check_ignore 'non-existent' 1
		
ok 91 - non-existent file at top-level not ignored with -q

expecting success of 0008.92 'non-existent file at top-level not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'non-existent' 1
		
ok 92 - non-existent file at top-level not ignored with --quiet

expecting success of 0008.93 'non-existent file at top-level not ignored with -v': 
				expect '' &&
				test_check_ignore 'non-existent' 1
			
ok 93 - non-existent file at top-level not ignored with -v

expecting success of 0008.94 'non-existent file at top-level not ignored with -v -n': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 94 - non-existent file at top-level not ignored with -v -n

expecting success of 0008.95 'non-existent file at top-level not ignored with -v --non-matching': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 95 - non-existent file at top-level not ignored with -v --non-matching

expecting success of 0008.96 'non-existent file at top-level not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'non-existent' 1
			
ok 96 - non-existent file at top-level not ignored with --verbose

expecting success of 0008.97 'non-existent file at top-level not ignored with --verbose -n': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 97 - non-existent file at top-level not ignored with --verbose -n

expecting success of 0008.98 'non-existent file at top-level not ignored with --verbose --non-matching': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 98 - non-existent file at top-level not ignored with --verbose --non-matching

expecting success of 0008.99 'non-existent file at top-level not ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 99 - non-existent file at top-level not ignored with --no-index

expecting success of 0008.100 'non-existent file at top-level not ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'non-existent' 1
		
ok 100 - non-existent file at top-level not ignored with --no-index -q

expecting success of 0008.101 'non-existent file at top-level not ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'non-existent' 1
		
ok 101 - non-existent file at top-level not ignored with --no-index --quiet

expecting success of 0008.102 'non-existent file at top-level not ignored with --no-index -v': 
				expect '' &&
				test_check_ignore 'non-existent' 1
			
ok 102 - non-existent file at top-level not ignored with --no-index -v

expecting success of 0008.103 'non-existent file at top-level not ignored with --no-index -v -n': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 103 - non-existent file at top-level not ignored with --no-index -v -n

expecting success of 0008.104 'non-existent file at top-level not ignored with --no-index -v --non-matching': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 104 - non-existent file at top-level not ignored with --no-index -v --non-matching

expecting success of 0008.105 'non-existent file at top-level not ignored with --no-index --verbose': 
				expect '' &&
				test_check_ignore 'non-existent' 1
			
ok 105 - non-existent file at top-level not ignored with --no-index --verbose

expecting success of 0008.106 'non-existent file at top-level not ignored with --no-index --verbose -n': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 106 - non-existent file at top-level not ignored with --no-index --verbose -n

expecting success of 0008.107 'non-existent file at top-level not ignored with --no-index --verbose --non-matching': 
				expect '::	non-existent' &&
				test_check_ignore 'non-existent' 1
			
ok 107 - non-existent file at top-level not ignored with --no-index --verbose --non-matching

expecting success of 0008.108 'non-existent file at top-level ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 108 - non-existent file at top-level ignored

expecting success of 0008.109 'non-existent file at top-level ignored with -q': 
			expect '' &&
			test_check_ignore 'one'
		
ok 109 - non-existent file at top-level ignored with -q

expecting success of 0008.110 'non-existent file at top-level ignored with --quiet': 
			expect '' &&
			test_check_ignore 'one'
		
ok 110 - non-existent file at top-level ignored with --quiet

expecting success of 0008.111 'non-existent file at top-level ignored with -v': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 111 - non-existent file at top-level ignored with -v

expecting success of 0008.112 'non-existent file at top-level ignored with -v -n': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 112 - non-existent file at top-level ignored with -v -n

expecting success of 0008.113 'non-existent file at top-level ignored with -v --non-matching': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 113 - non-existent file at top-level ignored with -v --non-matching

expecting success of 0008.114 'non-existent file at top-level ignored with --verbose': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 114 - non-existent file at top-level ignored with --verbose

expecting success of 0008.115 'non-existent file at top-level ignored with --verbose -n': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 115 - non-existent file at top-level ignored with --verbose -n

expecting success of 0008.116 'non-existent file at top-level ignored with --verbose --non-matching': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 116 - non-existent file at top-level ignored with --verbose --non-matching

expecting success of 0008.117 'non-existent file at top-level ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 117 - non-existent file at top-level ignored with --no-index

expecting success of 0008.118 'non-existent file at top-level ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'one'
		
ok 118 - non-existent file at top-level ignored with --no-index -q

expecting success of 0008.119 'non-existent file at top-level ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'one'
		
ok 119 - non-existent file at top-level ignored with --no-index --quiet

expecting success of 0008.120 'non-existent file at top-level ignored with --no-index -v': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 120 - non-existent file at top-level ignored with --no-index -v

expecting success of 0008.121 'non-existent file at top-level ignored with --no-index -v -n': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 121 - non-existent file at top-level ignored with --no-index -v -n

expecting success of 0008.122 'non-existent file at top-level ignored with --no-index -v --non-matching': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 122 - non-existent file at top-level ignored with --no-index -v --non-matching

expecting success of 0008.123 'non-existent file at top-level ignored with --no-index --verbose': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 123 - non-existent file at top-level ignored with --no-index --verbose

expecting success of 0008.124 'non-existent file at top-level ignored with --no-index --verbose -n': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 124 - non-existent file at top-level ignored with --no-index --verbose -n

expecting success of 0008.125 'non-existent file at top-level ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:1:one	one' &&
				test_check_ignore 'one'
			
ok 125 - non-existent file at top-level ignored with --no-index --verbose --non-matching

expecting success of 0008.126 'existing untracked file at top-level not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 126 - existing untracked file at top-level not ignored

expecting success of 0008.127 'existing untracked file at top-level not ignored with -q': 
			expect '' &&
			test_check_ignore 'not-ignored' 1
		
ok 127 - existing untracked file at top-level not ignored with -q

expecting success of 0008.128 'existing untracked file at top-level not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'not-ignored' 1
		
ok 128 - existing untracked file at top-level not ignored with --quiet

expecting success of 0008.129 'existing untracked file at top-level not ignored with -v': 
				expect '' &&
				test_check_ignore 'not-ignored' 1
			
ok 129 - existing untracked file at top-level not ignored with -v

expecting success of 0008.130 'existing untracked file at top-level not ignored with -v -n': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 130 - existing untracked file at top-level not ignored with -v -n

expecting success of 0008.131 'existing untracked file at top-level not ignored with -v --non-matching': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 131 - existing untracked file at top-level not ignored with -v --non-matching

expecting success of 0008.132 'existing untracked file at top-level not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'not-ignored' 1
			
ok 132 - existing untracked file at top-level not ignored with --verbose

expecting success of 0008.133 'existing untracked file at top-level not ignored with --verbose -n': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 133 - existing untracked file at top-level not ignored with --verbose -n

expecting success of 0008.134 'existing untracked file at top-level not ignored with --verbose --non-matching': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 134 - existing untracked file at top-level not ignored with --verbose --non-matching

expecting success of 0008.135 'existing untracked file at top-level not ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 135 - existing untracked file at top-level not ignored with --no-index

expecting success of 0008.136 'existing untracked file at top-level not ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'not-ignored' 1
		
ok 136 - existing untracked file at top-level not ignored with --no-index -q

expecting success of 0008.137 'existing untracked file at top-level not ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'not-ignored' 1
		
ok 137 - existing untracked file at top-level not ignored with --no-index --quiet

expecting success of 0008.138 'existing untracked file at top-level not ignored with --no-index -v': 
				expect '' &&
				test_check_ignore 'not-ignored' 1
			
ok 138 - existing untracked file at top-level not ignored with --no-index -v

expecting success of 0008.139 'existing untracked file at top-level not ignored with --no-index -v -n': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 139 - existing untracked file at top-level not ignored with --no-index -v -n

expecting success of 0008.140 'existing untracked file at top-level not ignored with --no-index -v --non-matching': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 140 - existing untracked file at top-level not ignored with --no-index -v --non-matching

expecting success of 0008.141 'existing untracked file at top-level not ignored with --no-index --verbose': 
				expect '' &&
				test_check_ignore 'not-ignored' 1
			
ok 141 - existing untracked file at top-level not ignored with --no-index --verbose

expecting success of 0008.142 'existing untracked file at top-level not ignored with --no-index --verbose -n': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 142 - existing untracked file at top-level not ignored with --no-index --verbose -n

expecting success of 0008.143 'existing untracked file at top-level not ignored with --no-index --verbose --non-matching': 
				expect '::	not-ignored' &&
				test_check_ignore 'not-ignored' 1
			
ok 143 - existing untracked file at top-level not ignored with --no-index --verbose --non-matching

expecting success of 0008.144 'existing tracked file at top-level not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 144 - existing tracked file at top-level not ignored

expecting success of 0008.145 'existing tracked file at top-level not ignored with -q': 
			expect '' &&
			test_check_ignore 'ignored-but-in-index' 1
		
ok 145 - existing tracked file at top-level not ignored with -q

expecting success of 0008.146 'existing tracked file at top-level not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'ignored-but-in-index' 1
		
ok 146 - existing tracked file at top-level not ignored with --quiet

expecting success of 0008.147 'existing tracked file at top-level not ignored with -v': 
				expect '' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 147 - existing tracked file at top-level not ignored with -v

expecting success of 0008.148 'existing tracked file at top-level not ignored with -v -n': 
				expect '::	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 148 - existing tracked file at top-level not ignored with -v -n

expecting success of 0008.149 'existing tracked file at top-level not ignored with -v --non-matching': 
				expect '::	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 149 - existing tracked file at top-level not ignored with -v --non-matching

expecting success of 0008.150 'existing tracked file at top-level not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 150 - existing tracked file at top-level not ignored with --verbose

expecting success of 0008.151 'existing tracked file at top-level not ignored with --verbose -n': 
				expect '::	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 151 - existing tracked file at top-level not ignored with --verbose -n

expecting success of 0008.152 'existing tracked file at top-level not ignored with --verbose --non-matching': 
				expect '::	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index' 1
			
ok 152 - existing tracked file at top-level not ignored with --verbose --non-matching

expecting success of 0008.153 'existing tracked file at top-level shown as ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 153 - existing tracked file at top-level shown as ignored with --no-index

expecting success of 0008.154 'existing tracked file at top-level shown as ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'ignored-but-in-index'
		
ok 154 - existing tracked file at top-level shown as ignored with --no-index -q

expecting success of 0008.155 'existing tracked file at top-level shown as ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'ignored-but-in-index'
		
ok 155 - existing tracked file at top-level shown as ignored with --no-index --quiet

expecting success of 0008.156 'existing tracked file at top-level shown as ignored with --no-index -v': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 156 - existing tracked file at top-level shown as ignored with --no-index -v

expecting success of 0008.157 'existing tracked file at top-level shown as ignored with --no-index -v -n': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 157 - existing tracked file at top-level shown as ignored with --no-index -v -n

expecting success of 0008.158 'existing tracked file at top-level shown as ignored with --no-index -v --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 158 - existing tracked file at top-level shown as ignored with --no-index -v --non-matching

expecting success of 0008.159 'existing tracked file at top-level shown as ignored with --no-index --verbose': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 159 - existing tracked file at top-level shown as ignored with --no-index --verbose

expecting success of 0008.160 'existing tracked file at top-level shown as ignored with --no-index --verbose -n': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 160 - existing tracked file at top-level shown as ignored with --no-index --verbose -n

expecting success of 0008.161 'existing tracked file at top-level shown as ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-but-in-index' &&
				test_check_ignore 'ignored-but-in-index'
			
ok 161 - existing tracked file at top-level shown as ignored with --no-index --verbose --non-matching

expecting success of 0008.162 'existing untracked file at top-level ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 162 - existing untracked file at top-level ignored

expecting success of 0008.163 'existing untracked file at top-level ignored with -q': 
			expect '' &&
			test_check_ignore 'ignored-and-untracked'
		
ok 163 - existing untracked file at top-level ignored with -q

expecting success of 0008.164 'existing untracked file at top-level ignored with --quiet': 
			expect '' &&
			test_check_ignore 'ignored-and-untracked'
		
ok 164 - existing untracked file at top-level ignored with --quiet

expecting success of 0008.165 'existing untracked file at top-level ignored with -v': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 165 - existing untracked file at top-level ignored with -v

expecting success of 0008.166 'existing untracked file at top-level ignored with -v -n': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 166 - existing untracked file at top-level ignored with -v -n

expecting success of 0008.167 'existing untracked file at top-level ignored with -v --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 167 - existing untracked file at top-level ignored with -v --non-matching

expecting success of 0008.168 'existing untracked file at top-level ignored with --verbose': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 168 - existing untracked file at top-level ignored with --verbose

expecting success of 0008.169 'existing untracked file at top-level ignored with --verbose -n': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 169 - existing untracked file at top-level ignored with --verbose -n

expecting success of 0008.170 'existing untracked file at top-level ignored with --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 170 - existing untracked file at top-level ignored with --verbose --non-matching

expecting success of 0008.171 'existing untracked file at top-level ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 171 - existing untracked file at top-level ignored with --no-index

expecting success of 0008.172 'existing untracked file at top-level ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'ignored-and-untracked'
		
ok 172 - existing untracked file at top-level ignored with --no-index -q

expecting success of 0008.173 'existing untracked file at top-level ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'ignored-and-untracked'
		
ok 173 - existing untracked file at top-level ignored with --no-index --quiet

expecting success of 0008.174 'existing untracked file at top-level ignored with --no-index -v': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 174 - existing untracked file at top-level ignored with --no-index -v

expecting success of 0008.175 'existing untracked file at top-level ignored with --no-index -v -n': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 175 - existing untracked file at top-level ignored with --no-index -v -n

expecting success of 0008.176 'existing untracked file at top-level ignored with --no-index -v --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 176 - existing untracked file at top-level ignored with --no-index -v --non-matching

expecting success of 0008.177 'existing untracked file at top-level ignored with --no-index --verbose': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 177 - existing untracked file at top-level ignored with --no-index --verbose

expecting success of 0008.178 'existing untracked file at top-level ignored with --no-index --verbose -n': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 178 - existing untracked file at top-level ignored with --no-index --verbose -n

expecting success of 0008.179 'existing untracked file at top-level ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore 'ignored-and-untracked'
			
ok 179 - existing untracked file at top-level ignored with --no-index --verbose --non-matching

expecting success of 0008.180 'mix of file types at top-level': 
		expect "$expect" &&
		eval "$code"
	
ok 180 - mix of file types at top-level

expecting success of 0008.181 'mix of file types at top-level with -v': 
				expect '.gitignore:1:one	one
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 181 - mix of file types at top-level with -v

expecting success of 0008.182 'mix of file types at top-level with -v -n': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
::	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 182 - mix of file types at top-level with -v -n

expecting success of 0008.183 'mix of file types at top-level with -v --non-matching': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
::	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 183 - mix of file types at top-level with -v --non-matching

expecting success of 0008.184 'mix of file types at top-level with --verbose': 
				expect '.gitignore:1:one	one
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 184 - mix of file types at top-level with --verbose

expecting success of 0008.185 'mix of file types at top-level with --verbose -n': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
::	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 185 - mix of file types at top-level with --verbose -n

expecting success of 0008.186 'mix of file types at top-level with --verbose --non-matching': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
::	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 186 - mix of file types at top-level with --verbose --non-matching

expecting success of 0008.187 'mix of file types at top-level with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 187 - mix of file types at top-level with --no-index

expecting success of 0008.188 'mix of file types at top-level with --no-index -v': 
				expect '.gitignore:1:one	one
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 188 - mix of file types at top-level with --no-index -v

expecting success of 0008.189 'mix of file types at top-level with --no-index -v -n': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 189 - mix of file types at top-level with --no-index -v -n

expecting success of 0008.190 'mix of file types at top-level with --no-index -v --non-matching': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 190 - mix of file types at top-level with --no-index -v --non-matching

expecting success of 0008.191 'mix of file types at top-level with --no-index --verbose': 
				expect '.gitignore:1:one	one
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 191 - mix of file types at top-level with --no-index --verbose

expecting success of 0008.192 'mix of file types at top-level with --no-index --verbose -n': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 192 - mix of file types at top-level with --no-index --verbose -n

expecting success of 0008.193 'mix of file types at top-level with --no-index --verbose --non-matching': 
				expect '::	non-existent
.gitignore:1:one	one
::	not-ignored
.gitignore:2:ignored-*	ignored-but-in-index
.gitignore:2:ignored-*	ignored-and-untracked' &&
				test_check_ignore '
			non-existent
			one
			not-ignored
			ignored-but-in-index
			ignored-and-untracked'
		
			
ok 193 - mix of file types at top-level with --no-index --verbose --non-matching

expecting success of 0008.194 'non-existent file in subdir a/ not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 194 - non-existent file in subdir a/ not ignored

expecting success of 0008.195 'non-existent file in subdir a/ not ignored with -q': 
			expect '' &&
			test_check_ignore 'a/non-existent' 1
		
ok 195 - non-existent file in subdir a/ not ignored with -q

expecting success of 0008.196 'non-existent file in subdir a/ not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'a/non-existent' 1
		
ok 196 - non-existent file in subdir a/ not ignored with --quiet

expecting success of 0008.197 'non-existent file in subdir a/ not ignored with -v': 
				expect '' &&
				test_check_ignore 'a/non-existent' 1
			
ok 197 - non-existent file in subdir a/ not ignored with -v

expecting success of 0008.198 'non-existent file in subdir a/ not ignored with -v -n': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 198 - non-existent file in subdir a/ not ignored with -v -n

expecting success of 0008.199 'non-existent file in subdir a/ not ignored with -v --non-matching': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 199 - non-existent file in subdir a/ not ignored with -v --non-matching

expecting success of 0008.200 'non-existent file in subdir a/ not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'a/non-existent' 1
			
ok 200 - non-existent file in subdir a/ not ignored with --verbose

expecting success of 0008.201 'non-existent file in subdir a/ not ignored with --verbose -n': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 201 - non-existent file in subdir a/ not ignored with --verbose -n

expecting success of 0008.202 'non-existent file in subdir a/ not ignored with --verbose --non-matching': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 202 - non-existent file in subdir a/ not ignored with --verbose --non-matching

expecting success of 0008.203 'non-existent file in subdir a/ not ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 203 - non-existent file in subdir a/ not ignored with --no-index

expecting success of 0008.204 'non-existent file in subdir a/ not ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'a/non-existent' 1
		
ok 204 - non-existent file in subdir a/ not ignored with --no-index -q

expecting success of 0008.205 'non-existent file in subdir a/ not ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'a/non-existent' 1
		
ok 205 - non-existent file in subdir a/ not ignored with --no-index --quiet

expecting success of 0008.206 'non-existent file in subdir a/ not ignored with --no-index -v': 
				expect '' &&
				test_check_ignore 'a/non-existent' 1
			
ok 206 - non-existent file in subdir a/ not ignored with --no-index -v

expecting success of 0008.207 'non-existent file in subdir a/ not ignored with --no-index -v -n': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 207 - non-existent file in subdir a/ not ignored with --no-index -v -n

expecting success of 0008.208 'non-existent file in subdir a/ not ignored with --no-index -v --non-matching': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 208 - non-existent file in subdir a/ not ignored with --no-index -v --non-matching

expecting success of 0008.209 'non-existent file in subdir a/ not ignored with --no-index --verbose': 
				expect '' &&
				test_check_ignore 'a/non-existent' 1
			
ok 209 - non-existent file in subdir a/ not ignored with --no-index --verbose

expecting success of 0008.210 'non-existent file in subdir a/ not ignored with --no-index --verbose -n': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 210 - non-existent file in subdir a/ not ignored with --no-index --verbose -n

expecting success of 0008.211 'non-existent file in subdir a/ not ignored with --no-index --verbose --non-matching': 
				expect '::	a/non-existent' &&
				test_check_ignore 'a/non-existent' 1
			
ok 211 - non-existent file in subdir a/ not ignored with --no-index --verbose --non-matching

expecting success of 0008.212 'non-existent file in subdir a/ ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 212 - non-existent file in subdir a/ ignored

expecting success of 0008.213 'non-existent file in subdir a/ ignored with -q': 
			expect '' &&
			test_check_ignore 'a/one'
		
ok 213 - non-existent file in subdir a/ ignored with -q

expecting success of 0008.214 'non-existent file in subdir a/ ignored with --quiet': 
			expect '' &&
			test_check_ignore 'a/one'
		
ok 214 - non-existent file in subdir a/ ignored with --quiet

expecting success of 0008.215 'non-existent file in subdir a/ ignored with -v': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 215 - non-existent file in subdir a/ ignored with -v

expecting success of 0008.216 'non-existent file in subdir a/ ignored with -v -n': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 216 - non-existent file in subdir a/ ignored with -v -n

expecting success of 0008.217 'non-existent file in subdir a/ ignored with -v --non-matching': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 217 - non-existent file in subdir a/ ignored with -v --non-matching

expecting success of 0008.218 'non-existent file in subdir a/ ignored with --verbose': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 218 - non-existent file in subdir a/ ignored with --verbose

expecting success of 0008.219 'non-existent file in subdir a/ ignored with --verbose -n': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 219 - non-existent file in subdir a/ ignored with --verbose -n

expecting success of 0008.220 'non-existent file in subdir a/ ignored with --verbose --non-matching': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 220 - non-existent file in subdir a/ ignored with --verbose --non-matching

expecting success of 0008.221 'non-existent file in subdir a/ ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 221 - non-existent file in subdir a/ ignored with --no-index

expecting success of 0008.222 'non-existent file in subdir a/ ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'a/one'
		
ok 222 - non-existent file in subdir a/ ignored with --no-index -q

expecting success of 0008.223 'non-existent file in subdir a/ ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'a/one'
		
ok 223 - non-existent file in subdir a/ ignored with --no-index --quiet

expecting success of 0008.224 'non-existent file in subdir a/ ignored with --no-index -v': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 224 - non-existent file in subdir a/ ignored with --no-index -v

expecting success of 0008.225 'non-existent file in subdir a/ ignored with --no-index -v -n': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 225 - non-existent file in subdir a/ ignored with --no-index -v -n

expecting success of 0008.226 'non-existent file in subdir a/ ignored with --no-index -v --non-matching': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 226 - non-existent file in subdir a/ ignored with --no-index -v --non-matching

expecting success of 0008.227 'non-existent file in subdir a/ ignored with --no-index --verbose': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 227 - non-existent file in subdir a/ ignored with --no-index --verbose

expecting success of 0008.228 'non-existent file in subdir a/ ignored with --no-index --verbose -n': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 228 - non-existent file in subdir a/ ignored with --no-index --verbose -n

expecting success of 0008.229 'non-existent file in subdir a/ ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:1:one	a/one' &&
				test_check_ignore 'a/one'
			
ok 229 - non-existent file in subdir a/ ignored with --no-index --verbose --non-matching

expecting success of 0008.230 'existing untracked file in subdir a/ not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 230 - existing untracked file in subdir a/ not ignored

expecting success of 0008.231 'existing untracked file in subdir a/ not ignored with -q': 
			expect '' &&
			test_check_ignore 'a/not-ignored' 1
		
ok 231 - existing untracked file in subdir a/ not ignored with -q

expecting success of 0008.232 'existing untracked file in subdir a/ not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'a/not-ignored' 1
		
ok 232 - existing untracked file in subdir a/ not ignored with --quiet

expecting success of 0008.233 'existing untracked file in subdir a/ not ignored with -v': 
				expect '' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 233 - existing untracked file in subdir a/ not ignored with -v

expecting success of 0008.234 'existing untracked file in subdir a/ not ignored with -v -n': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 234 - existing untracked file in subdir a/ not ignored with -v -n

expecting success of 0008.235 'existing untracked file in subdir a/ not ignored with -v --non-matching': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 235 - existing untracked file in subdir a/ not ignored with -v --non-matching

expecting success of 0008.236 'existing untracked file in subdir a/ not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 236 - existing untracked file in subdir a/ not ignored with --verbose

expecting success of 0008.237 'existing untracked file in subdir a/ not ignored with --verbose -n': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 237 - existing untracked file in subdir a/ not ignored with --verbose -n

expecting success of 0008.238 'existing untracked file in subdir a/ not ignored with --verbose --non-matching': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 238 - existing untracked file in subdir a/ not ignored with --verbose --non-matching

expecting success of 0008.239 'existing untracked file in subdir a/ not ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 239 - existing untracked file in subdir a/ not ignored with --no-index

expecting success of 0008.240 'existing untracked file in subdir a/ not ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'a/not-ignored' 1
		
ok 240 - existing untracked file in subdir a/ not ignored with --no-index -q

expecting success of 0008.241 'existing untracked file in subdir a/ not ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'a/not-ignored' 1
		
ok 241 - existing untracked file in subdir a/ not ignored with --no-index --quiet

expecting success of 0008.242 'existing untracked file in subdir a/ not ignored with --no-index -v': 
				expect '' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 242 - existing untracked file in subdir a/ not ignored with --no-index -v

expecting success of 0008.243 'existing untracked file in subdir a/ not ignored with --no-index -v -n': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 243 - existing untracked file in subdir a/ not ignored with --no-index -v -n

expecting success of 0008.244 'existing untracked file in subdir a/ not ignored with --no-index -v --non-matching': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 244 - existing untracked file in subdir a/ not ignored with --no-index -v --non-matching

expecting success of 0008.245 'existing untracked file in subdir a/ not ignored with --no-index --verbose': 
				expect '' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 245 - existing untracked file in subdir a/ not ignored with --no-index --verbose

expecting success of 0008.246 'existing untracked file in subdir a/ not ignored with --no-index --verbose -n': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 246 - existing untracked file in subdir a/ not ignored with --no-index --verbose -n

expecting success of 0008.247 'existing untracked file in subdir a/ not ignored with --no-index --verbose --non-matching': 
				expect '::	a/not-ignored' &&
				test_check_ignore 'a/not-ignored' 1
			
ok 247 - existing untracked file in subdir a/ not ignored with --no-index --verbose --non-matching

expecting success of 0008.248 'existing tracked file in subdir a/ not ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 248 - existing tracked file in subdir a/ not ignored

expecting success of 0008.249 'existing tracked file in subdir a/ not ignored with -q': 
			expect '' &&
			test_check_ignore 'a/ignored-but-in-index' 1
		
ok 249 - existing tracked file in subdir a/ not ignored with -q

expecting success of 0008.250 'existing tracked file in subdir a/ not ignored with --quiet': 
			expect '' &&
			test_check_ignore 'a/ignored-but-in-index' 1
		
ok 250 - existing tracked file in subdir a/ not ignored with --quiet

expecting success of 0008.251 'existing tracked file in subdir a/ not ignored with -v': 
				expect '' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 251 - existing tracked file in subdir a/ not ignored with -v

expecting success of 0008.252 'existing tracked file in subdir a/ not ignored with -v -n': 
				expect '::	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 252 - existing tracked file in subdir a/ not ignored with -v -n

expecting success of 0008.253 'existing tracked file in subdir a/ not ignored with -v --non-matching': 
				expect '::	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 253 - existing tracked file in subdir a/ not ignored with -v --non-matching

expecting success of 0008.254 'existing tracked file in subdir a/ not ignored with --verbose': 
				expect '' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 254 - existing tracked file in subdir a/ not ignored with --verbose

expecting success of 0008.255 'existing tracked file in subdir a/ not ignored with --verbose -n': 
				expect '::	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 255 - existing tracked file in subdir a/ not ignored with --verbose -n

expecting success of 0008.256 'existing tracked file in subdir a/ not ignored with --verbose --non-matching': 
				expect '::	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index' 1
			
ok 256 - existing tracked file in subdir a/ not ignored with --verbose --non-matching

expecting success of 0008.257 'existing tracked file in subdir a/ shown as ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 257 - existing tracked file in subdir a/ shown as ignored with --no-index

expecting success of 0008.258 'existing tracked file in subdir a/ shown as ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'a/ignored-but-in-index'
		
ok 258 - existing tracked file in subdir a/ shown as ignored with --no-index -q

expecting success of 0008.259 'existing tracked file in subdir a/ shown as ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'a/ignored-but-in-index'
		
ok 259 - existing tracked file in subdir a/ shown as ignored with --no-index --quiet

expecting success of 0008.260 'existing tracked file in subdir a/ shown as ignored with --no-index -v': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 260 - existing tracked file in subdir a/ shown as ignored with --no-index -v

expecting success of 0008.261 'existing tracked file in subdir a/ shown as ignored with --no-index -v -n': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 261 - existing tracked file in subdir a/ shown as ignored with --no-index -v -n

expecting success of 0008.262 'existing tracked file in subdir a/ shown as ignored with --no-index -v --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 262 - existing tracked file in subdir a/ shown as ignored with --no-index -v --non-matching

expecting success of 0008.263 'existing tracked file in subdir a/ shown as ignored with --no-index --verbose': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 263 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose

expecting success of 0008.264 'existing tracked file in subdir a/ shown as ignored with --no-index --verbose -n': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 264 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose -n

expecting success of 0008.265 'existing tracked file in subdir a/ shown as ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-but-in-index' &&
				test_check_ignore 'a/ignored-but-in-index'
			
ok 265 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose --non-matching

expecting success of 0008.266 'existing untracked file in subdir a/ ignored': 
		expect "$expect" &&
		eval "$code"
	
ok 266 - existing untracked file in subdir a/ ignored

expecting success of 0008.267 'existing untracked file in subdir a/ ignored with -q': 
			expect '' &&
			test_check_ignore 'a/ignored-and-untracked'
		
ok 267 - existing untracked file in subdir a/ ignored with -q

expecting success of 0008.268 'existing untracked file in subdir a/ ignored with --quiet': 
			expect '' &&
			test_check_ignore 'a/ignored-and-untracked'
		
ok 268 - existing untracked file in subdir a/ ignored with --quiet

expecting success of 0008.269 'existing untracked file in subdir a/ ignored with -v': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 269 - existing untracked file in subdir a/ ignored with -v

expecting success of 0008.270 'existing untracked file in subdir a/ ignored with -v -n': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 270 - existing untracked file in subdir a/ ignored with -v -n

expecting success of 0008.271 'existing untracked file in subdir a/ ignored with -v --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 271 - existing untracked file in subdir a/ ignored with -v --non-matching

expecting success of 0008.272 'existing untracked file in subdir a/ ignored with --verbose': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 272 - existing untracked file in subdir a/ ignored with --verbose

expecting success of 0008.273 'existing untracked file in subdir a/ ignored with --verbose -n': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 273 - existing untracked file in subdir a/ ignored with --verbose -n

expecting success of 0008.274 'existing untracked file in subdir a/ ignored with --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 274 - existing untracked file in subdir a/ ignored with --verbose --non-matching

expecting success of 0008.275 'existing untracked file in subdir a/ ignored with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 275 - existing untracked file in subdir a/ ignored with --no-index

expecting success of 0008.276 'existing untracked file in subdir a/ ignored with --no-index -q': 
			expect '' &&
			test_check_ignore 'a/ignored-and-untracked'
		
ok 276 - existing untracked file in subdir a/ ignored with --no-index -q

expecting success of 0008.277 'existing untracked file in subdir a/ ignored with --no-index --quiet': 
			expect '' &&
			test_check_ignore 'a/ignored-and-untracked'
		
ok 277 - existing untracked file in subdir a/ ignored with --no-index --quiet

expecting success of 0008.278 'existing untracked file in subdir a/ ignored with --no-index -v': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 278 - existing untracked file in subdir a/ ignored with --no-index -v

expecting success of 0008.279 'existing untracked file in subdir a/ ignored with --no-index -v -n': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 279 - existing untracked file in subdir a/ ignored with --no-index -v -n

expecting success of 0008.280 'existing untracked file in subdir a/ ignored with --no-index -v --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 280 - existing untracked file in subdir a/ ignored with --no-index -v --non-matching

expecting success of 0008.281 'existing untracked file in subdir a/ ignored with --no-index --verbose': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 281 - existing untracked file in subdir a/ ignored with --no-index --verbose

expecting success of 0008.282 'existing untracked file in subdir a/ ignored with --no-index --verbose -n': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 282 - existing untracked file in subdir a/ ignored with --no-index --verbose -n

expecting success of 0008.283 'existing untracked file in subdir a/ ignored with --no-index --verbose --non-matching': 
				expect '.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore 'a/ignored-and-untracked'
			
ok 283 - existing untracked file in subdir a/ ignored with --no-index --verbose --non-matching

expecting success of 0008.284 'mix of file types in subdir a/': 
		expect "$expect" &&
		eval "$code"
	
ok 284 - mix of file types in subdir a/

expecting success of 0008.285 'mix of file types in subdir a/ with -v': 
				expect '.gitignore:1:one	a/one
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 285 - mix of file types in subdir a/ with -v

expecting success of 0008.286 'mix of file types in subdir a/ with -v -n': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
::	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 286 - mix of file types in subdir a/ with -v -n

expecting success of 0008.287 'mix of file types in subdir a/ with -v --non-matching': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
::	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 287 - mix of file types in subdir a/ with -v --non-matching

expecting success of 0008.288 'mix of file types in subdir a/ with --verbose': 
				expect '.gitignore:1:one	a/one
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 288 - mix of file types in subdir a/ with --verbose

expecting success of 0008.289 'mix of file types in subdir a/ with --verbose -n': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
::	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 289 - mix of file types in subdir a/ with --verbose -n

expecting success of 0008.290 'mix of file types in subdir a/ with --verbose --non-matching': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
::	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 290 - mix of file types in subdir a/ with --verbose --non-matching

expecting success of 0008.291 'mix of file types in subdir a/ with --no-index': 
		expect "$expect" &&
		eval "$code"
	
ok 291 - mix of file types in subdir a/ with --no-index

expecting success of 0008.292 'mix of file types in subdir a/ with --no-index -v': 
				expect '.gitignore:1:one	a/one
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 292 - mix of file types in subdir a/ with --no-index -v

expecting success of 0008.293 'mix of file types in subdir a/ with --no-index -v -n': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 293 - mix of file types in subdir a/ with --no-index -v -n

expecting success of 0008.294 'mix of file types in subdir a/ with --no-index -v --non-matching': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 294 - mix of file types in subdir a/ with --no-index -v --non-matching

expecting success of 0008.295 'mix of file types in subdir a/ with --no-index --verbose': 
				expect '.gitignore:1:one	a/one
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 295 - mix of file types in subdir a/ with --no-index --verbose

expecting success of 0008.296 'mix of file types in subdir a/ with --no-index --verbose -n': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 296 - mix of file types in subdir a/ with --no-index --verbose -n

expecting success of 0008.297 'mix of file types in subdir a/ with --no-index --verbose --non-matching': 
				expect '::	a/non-existent
.gitignore:1:one	a/one
::	a/not-ignored
.gitignore:2:ignored-*	a/ignored-but-in-index
.gitignore:2:ignored-*	a/ignored-and-untracked' &&
				test_check_ignore '
			a/non-existent
			a/one
			a/not-ignored
			a/ignored-but-in-index
			a/ignored-and-untracked'
		
			
ok 297 - mix of file types in subdir a/ with --no-index --verbose --non-matching

expecting success of 0008.298 'sub-directory local ignore': 
	expect "a/3-three" &&
	test_check_ignore "a/3-three a/three-not-this-one"

ok 298 - sub-directory local ignore

expecting success of 0008.299 'sub-directory local ignore with --verbose': 
	expect "a/.gitignore:2:*three	a/3-three" &&
	test_check_ignore "--verbose a/3-three a/three-not-this-one"

ok 299 - sub-directory local ignore with --verbose

expecting success of 0008.300 'local ignore inside a sub-directory': 
	expect "3-three" &&
	(
		cd a &&
		test_check_ignore "3-three three-not-this-one"
	)

ok 300 - local ignore inside a sub-directory

expecting success of 0008.301 'local ignore inside a sub-directory with --verbose': 
	expect "a/.gitignore:2:*three	3-three" &&
	(
		cd a &&
		test_check_ignore "--verbose 3-three three-not-this-one"
	)

ok 301 - local ignore inside a sub-directory with --verbose

expecting success of 0008.302 'nested include of negated pattern': 
	expect "" &&
	test_check_ignore "a/b/one" 1

ok 302 - nested include of negated pattern

expecting success of 0008.303 'nested include of negated pattern with -q': 
	expect "" &&
	test_check_ignore "-q a/b/one" 1

ok 303 - nested include of negated pattern with -q

expecting success of 0008.304 'nested include of negated pattern with -v': 
	expect "a/b/.gitignore:8:!on*	a/b/one" &&
	test_check_ignore "-v a/b/one" 0

ok 304 - nested include of negated pattern with -v

expecting success of 0008.305 'nested include of negated pattern with -v -n': 
	expect "a/b/.gitignore:8:!on*	a/b/one" &&
	test_check_ignore "-v -n a/b/one" 0

ok 305 - nested include of negated pattern with -v -n

expecting success of 0008.306 'ignored sub-directory': 
		expect "$expect" &&
		eval "$code"
	
ok 306 - ignored sub-directory

expecting success of 0008.307 'ignored sub-directory with -q': 
			expect '' &&
			
	test_check_ignore "a/b/ignored-dir"

		
ok 307 - ignored sub-directory with -q

expecting success of 0008.308 'ignored sub-directory with --quiet': 
			expect '' &&
			
	test_check_ignore "a/b/ignored-dir"

		
ok 308 - ignored sub-directory with --quiet

expecting success of 0008.309 'ignored sub-directory with -v': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 309 - ignored sub-directory with -v

expecting success of 0008.310 'ignored sub-directory with -v -n': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 310 - ignored sub-directory with -v -n

expecting success of 0008.311 'ignored sub-directory with -v --non-matching': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 311 - ignored sub-directory with -v --non-matching

expecting success of 0008.312 'ignored sub-directory with --verbose': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 312 - ignored sub-directory with --verbose

expecting success of 0008.313 'ignored sub-directory with --verbose -n': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 313 - ignored sub-directory with --verbose -n

expecting success of 0008.314 'ignored sub-directory with --verbose --non-matching': 
				expect 'a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir' &&
				
	test_check_ignore "a/b/ignored-dir"

			
ok 314 - ignored sub-directory with --verbose --non-matching

expecting success of 0008.315 'multiple files inside ignored sub-directory': 
	expect_from_stdin <<-\EOF &&
		a/b/ignored-dir/foo
		a/b/ignored-dir/twoooo
		a/b/ignored-dir/seven
	EOF
	test_check_ignore "a/b/ignored-dir/foo a/b/ignored-dir/twoooo a/b/ignored-dir/seven"

ok 315 - multiple files inside ignored sub-directory

expecting success of 0008.316 'multiple files inside ignored sub-directory with -v': 
	expect_from_stdin <<-\EOF &&
		a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir/foo
		a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir/twoooo
		a/b/.gitignore:5:ignored-dir/	a/b/ignored-dir/seven
	EOF
	test_check_ignore "-v a/b/ignored-dir/foo a/b/ignored-dir/twoooo a/b/ignored-dir/seven"

ok 316 - multiple files inside ignored sub-directory with -v

expecting success of 0008.317 'cd to ignored sub-directory': 
	expect_from_stdin <<-\EOF &&
		foo
		twoooo
		seven
		../../one
	EOF
	(
		cd a/b/ignored-dir &&
		test_check_ignore "foo twoooo ../one seven ../../one"
	)

ok 317 - cd to ignored sub-directory

expecting success of 0008.318 'cd to ignored sub-directory with -v': 
	expect_from_stdin <<-\EOF &&
		a/b/.gitignore:5:ignored-dir/	foo
		a/b/.gitignore:5:ignored-dir/	twoooo
		a/b/.gitignore:8:!on*	../one
		a/b/.gitignore:5:ignored-dir/	seven
		.gitignore:1:one	../../one
	EOF
	(
		cd a/b/ignored-dir &&
		test_check_ignore "-v foo twoooo ../one seven ../../one"
	)

ok 318 - cd to ignored sub-directory with -v

expecting success of 0008.319 'symlink': 
		expect "$expect" &&
		eval "$code"
	
ok 319 - symlink

expecting success of 0008.320 'symlink with -q': 
			expect '' &&
			
	test_check_ignore "a/symlink" 1

		
ok 320 - symlink with -q

expecting success of 0008.321 'symlink with --quiet': 
			expect '' &&
			
	test_check_ignore "a/symlink" 1

		
ok 321 - symlink with --quiet

expecting success of 0008.322 'symlink with -v': 
				expect '' &&
				
	test_check_ignore "a/symlink" 1

			
ok 322 - symlink with -v

expecting success of 0008.323 'symlink with -v -n': 
				expect '::	a/symlink' &&
				
	test_check_ignore "a/symlink" 1

			
ok 323 - symlink with -v -n

expecting success of 0008.324 'symlink with -v --non-matching': 
				expect '::	a/symlink' &&
				
	test_check_ignore "a/symlink" 1

			
ok 324 - symlink with -v --non-matching

expecting success of 0008.325 'symlink with --verbose': 
				expect '' &&
				
	test_check_ignore "a/symlink" 1

			
ok 325 - symlink with --verbose

expecting success of 0008.326 'symlink with --verbose -n': 
				expect '::	a/symlink' &&
				
	test_check_ignore "a/symlink" 1

			
ok 326 - symlink with --verbose -n

expecting success of 0008.327 'symlink with --verbose --non-matching': 
				expect '::	a/symlink' &&
				
	test_check_ignore "a/symlink" 1

			
ok 327 - symlink with --verbose --non-matching

expecting success of 0008.328 'beyond a symlink': 
		expect "$expect" &&
		eval "$code"
	
ok 328 - beyond a symlink

expecting success of 0008.329 'beyond a symlink with -q': 
			expect '' &&
			
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

		
ok 329 - beyond a symlink with -q

expecting success of 0008.330 'beyond a symlink with --quiet': 
			expect '' &&
			
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

		
ok 330 - beyond a symlink with --quiet

expecting success of 0008.331 'beyond a symlink with -v': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 331 - beyond a symlink with -v

expecting success of 0008.332 'beyond a symlink with -v -n': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 332 - beyond a symlink with -v -n

expecting success of 0008.333 'beyond a symlink with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 333 - beyond a symlink with -v --non-matching

expecting success of 0008.334 'beyond a symlink with --verbose': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 334 - beyond a symlink with --verbose

expecting success of 0008.335 'beyond a symlink with --verbose -n': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 335 - beyond a symlink with --verbose -n

expecting success of 0008.336 'beyond a symlink with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "a/symlink/foo" 128 &&
	test_stderr "fatal: pathspec 'a/symlink/foo' is beyond a symbolic link"

			
ok 336 - beyond a symlink with --verbose --non-matching

expecting success of 0008.337 'beyond a symlink from subdirectory': 
		expect "$expect" &&
		eval "$code"
	
ok 337 - beyond a symlink from subdirectory

expecting success of 0008.338 'beyond a symlink from subdirectory with -q': 
			expect '' &&
			
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

		
ok 338 - beyond a symlink from subdirectory with -q

expecting success of 0008.339 'beyond a symlink from subdirectory with --quiet': 
			expect '' &&
			
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

		
ok 339 - beyond a symlink from subdirectory with --quiet

expecting success of 0008.340 'beyond a symlink from subdirectory with -v': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 340 - beyond a symlink from subdirectory with -v

expecting success of 0008.341 'beyond a symlink from subdirectory with -v -n': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 341 - beyond a symlink from subdirectory with -v -n

expecting success of 0008.342 'beyond a symlink from subdirectory with -v --non-matching': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 342 - beyond a symlink from subdirectory with -v --non-matching

expecting success of 0008.343 'beyond a symlink from subdirectory with --verbose': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 343 - beyond a symlink from subdirectory with --verbose

expecting success of 0008.344 'beyond a symlink from subdirectory with --verbose -n': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 344 - beyond a symlink from subdirectory with --verbose -n

expecting success of 0008.345 'beyond a symlink from subdirectory with --verbose --non-matching': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "symlink/foo" 128
	) &&
	test_stderr "fatal: pathspec 'symlink/foo' is beyond a symbolic link"

			
ok 345 - beyond a symlink from subdirectory with --verbose --non-matching

expecting success of 0008.346 'submodule': 
		expect "$expect" &&
		eval "$code"
	
ok 346 - submodule

expecting success of 0008.347 'submodule with -q': 
			expect '' &&
			
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

		
ok 347 - submodule with -q

expecting success of 0008.348 'submodule with --quiet': 
			expect '' &&
			
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

		
ok 348 - submodule with --quiet

expecting success of 0008.349 'submodule with -v': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 349 - submodule with -v

expecting success of 0008.350 'submodule with -v -n': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 350 - submodule with -v -n

expecting success of 0008.351 'submodule with -v --non-matching': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 351 - submodule with -v --non-matching

expecting success of 0008.352 'submodule with --verbose': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 352 - submodule with --verbose

expecting success of 0008.353 'submodule with --verbose -n': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 353 - submodule with --verbose -n

expecting success of 0008.354 'submodule with --verbose --non-matching': 
				expect '' &&
				
	test_check_ignore "a/submodule/one" 128 &&
	test_stderr "fatal: Pathspec 'a/submodule/one' is in submodule 'a/submodule'"

			
ok 354 - submodule with --verbose --non-matching

expecting success of 0008.355 'submodule from subdirectory': 
		expect "$expect" &&
		eval "$code"
	
ok 355 - submodule from subdirectory

expecting success of 0008.356 'submodule from subdirectory with -q': 
			expect '' &&
			
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

		
ok 356 - submodule from subdirectory with -q

expecting success of 0008.357 'submodule from subdirectory with --quiet': 
			expect '' &&
			
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

		
ok 357 - submodule from subdirectory with --quiet

expecting success of 0008.358 'submodule from subdirectory with -v': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 358 - submodule from subdirectory with -v

expecting success of 0008.359 'submodule from subdirectory with -v -n': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 359 - submodule from subdirectory with -v -n

expecting success of 0008.360 'submodule from subdirectory with -v --non-matching': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 360 - submodule from subdirectory with -v --non-matching

expecting success of 0008.361 'submodule from subdirectory with --verbose': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 361 - submodule from subdirectory with --verbose

expecting success of 0008.362 'submodule from subdirectory with --verbose -n': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 362 - submodule from subdirectory with --verbose -n

expecting success of 0008.363 'submodule from subdirectory with --verbose --non-matching': 
				expect '' &&
				
	(
		cd a &&
		test_check_ignore "submodule/one" 128
	) &&
	test_stderr "fatal: Pathspec 'submodule/one' is in submodule 'a/submodule'"

			
ok 363 - submodule from subdirectory with --verbose --non-matching

expecting success of 0008.364 'global ignore not yet enabled': 
	expect_from_stdin <<-\EOF &&
		.git/info/exclude:1:per-repo	per-repo
		a/.gitignore:2:*three	a/globalthree
		.git/info/exclude:1:per-repo	a/per-repo
	EOF
	test_check_ignore "-v globalone per-repo a/globalthree a/per-repo not-ignored a/globaltwo"

ok 364 - global ignore not yet enabled

expecting success of 0008.365 'global ignore': 
	enable_global_excludes &&
	expect_from_stdin <<-\EOF &&
		globalone
		per-repo
		globalthree
		a/globalthree
		a/per-repo
	EOF
	test_check_ignore "globalone per-repo globalthree a/globalthree a/per-repo not-ignored globaltwo"

ok 365 - global ignore

expecting success of 0008.366 'global ignore with -v': 
	enable_global_excludes &&
	expect_from_stdin <<-EOF &&
		$global_excludes:1:globalone	globalone
		.git/info/exclude:1:per-repo	per-repo
		$global_excludes:3:globalthree	globalthree
		a/.gitignore:2:*three	a/globalthree
		.git/info/exclude:1:per-repo	a/per-repo
		$global_excludes:2:!globaltwo	globaltwo
	EOF
	test_check_ignore "-v globalone per-repo globalthree a/globalthree a/per-repo not-ignored globaltwo"

ok 366 - global ignore with -v

expecting success of 0008.367 '--stdin': 
	expect_from_stdin <expected-default &&
	test_check_ignore "--stdin" <stdin

ok 367 - --stdin

expecting success of 0008.368 '--stdin -q': 
	expect "" &&
	test_check_ignore "-q --stdin" <stdin

ok 368 - --stdin -q

expecting success of 0008.369 '--stdin -v': 
	expect_from_stdin <expected-verbose &&
	test_check_ignore "-v --stdin" <stdin

ok 369 - --stdin -v

expecting success of 0008.370 '--stdin -z': 
		expect_from_stdin <expected-default0 &&
		test_check_ignore '--stdin -z' <stdin0
	
ok 370 - --stdin -z

expecting success of 0008.371 '--stdin -z -q': 
		expect  &&
		test_check_ignore '-q --stdin -z' <stdin0
	
ok 371 - --stdin -z -q

expecting success of 0008.372 '--stdin -z -v': 
		expect_from_stdin <expected-verbose0 &&
		test_check_ignore '-v --stdin -z' <stdin0
	
ok 372 - --stdin -z -v

expecting success of 0008.373 '-z --stdin': 
		expect_from_stdin <expected-default0 &&
		test_check_ignore '-z --stdin' <stdin0
	
ok 373 - -z --stdin

expecting success of 0008.374 '-z --stdin -q': 
		expect  &&
		test_check_ignore '-q -z --stdin' <stdin0
	
ok 374 - -z --stdin -q

expecting success of 0008.375 '-z --stdin -v': 
		expect_from_stdin <expected-verbose0 &&
		test_check_ignore '-v -z --stdin' <stdin0
	
ok 375 - -z --stdin -v

expecting success of 0008.376 '--stdin from subdirectory': 
	expect_from_stdin <expected-default &&
	(
		cd a &&
		test_check_ignore "--stdin" <../stdin
	)

ok 376 - --stdin from subdirectory

expecting success of 0008.377 '--stdin from subdirectory with -v': 
	expect_from_stdin <expected-verbose &&
	(
		cd a &&
		test_check_ignore "--stdin -v" <../stdin
	)

ok 377 - --stdin from subdirectory with -v

expecting success of 0008.378 '--stdin from subdirectory with -v -n': 
	expect_from_stdin <expected-all &&
	(
		cd a &&
		test_check_ignore "--stdin -v -n" <../stdin
	)

ok 378 - --stdin from subdirectory with -v -n

expecting success of 0008.379 '--stdin -z from subdirectory': 
		expect_from_stdin <expected-default0 &&
		(
			cd a &&
			test_check_ignore "--stdin -z" <../stdin0
		)
	
ok 379 - --stdin -z from subdirectory

expecting success of 0008.380 '--stdin -z from subdirectory with -v': 
		expect_from_stdin <expected-verbose0 &&
		(
			cd a &&
			test_check_ignore "--stdin -z -v" <../stdin0
		)
	
ok 380 - --stdin -z from subdirectory with -v

expecting success of 0008.381 '-z --stdin from subdirectory': 
		expect_from_stdin <expected-default0 &&
		(
			cd a &&
			test_check_ignore "-z --stdin" <../stdin0
		)
	
ok 381 - -z --stdin from subdirectory

expecting success of 0008.382 '-z --stdin from subdirectory with -v': 
		expect_from_stdin <expected-verbose0 &&
		(
			cd a &&
			test_check_ignore "-z --stdin -v" <../stdin0
		)
	
ok 382 - -z --stdin from subdirectory with -v

checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
expecting success of 0008.383 'streaming support for --stdin': 
	mkfifo in out &&
	(git check-ignore -n -v --stdin <in >out &) &&

	# We cannot just "echo >in" because check-ignore would get EOF
	# after echo exited; instead we open the descriptor in our
	# shell, and then echo to the fd. We make sure to close it at
	# the end, so that the subprocess does get EOF and dies
	# properly.
	#
	# Similarly, we must keep "out" open so that check-ignore does
	# not ever get SIGPIPE trying to write to us. Not only would that
	# produce incorrect results, but then there would be no writer on the
	# other end of the pipe, and we would potentially block forever trying
	# to open it.
	exec 9>in &&
	exec 8<out &&
	test_when_finished "exec 9>&-" &&
	test_when_finished "exec 8<&-" &&
	echo >&9 one &&
	read response <&8 &&
	echo "$response" | grep "^\.gitignore:1:one	one" &&
	echo >&9 two &&
	read response <&8 &&
	echo "$response" | grep "^::	two"

.gitignore:1:one	one
::	two
ok 383 - streaming support for --stdin

expecting success of 0008.384 'existing file and directory': 
	test_when_finished "rm one" &&
	test_when_finished "rmdir top-level-dir" &&
	>one &&
	mkdir top-level-dir &&
	git check-ignore one top-level-dir >actual &&
	grep one actual &&
	grep top-level-dir actual

one
top-level-dir
ok 384 - existing file and directory

expecting success of 0008.385 'existing directory and file': 
	test_when_finished "rm one" &&
	test_when_finished "rmdir top-level-dir" &&
	>one &&
	mkdir top-level-dir &&
	git check-ignore top-level-dir one >actual &&
	grep one actual &&
	grep top-level-dir actual

one
top-level-dir
ok 385 - existing directory and file

expecting success of 0008.386 'exact prefix matching (with root)': 
	test_when_finished rm -r a &&
	mkdir -p a/git a/git-foo &&
	touch a/git/foo a/git-foo/bar &&
	echo /git/ >a/.gitignore &&
	git check-ignore a/git a/git/foo a/git-foo a/git-foo/bar >actual &&
	cat >expect <<-\EOF &&
	a/git
	a/git/foo
	EOF
	test_cmp expect actual

ok 386 - exact prefix matching (with root)

expecting success of 0008.387 'exact prefix matching (without root)': 
	test_when_finished rm -r a &&
	mkdir -p a/git a/git-foo &&
	touch a/git/foo a/git-foo/bar &&
	echo git/ >a/.gitignore &&
	git check-ignore a/git a/git/foo a/git-foo a/git-foo/bar >actual &&
	cat >expect <<-\EOF &&
	a/git
	a/git/foo
	EOF
	test_cmp expect actual

ok 387 - exact prefix matching (without root)

expecting success of 0008.388 'directories and ** matches': 
	cat >.gitignore <<-\EOF &&
	data/**
	!data/**/
	!data/**/*.txt
	EOF
	git check-ignore file \
		data/file data/data1/file1 data/data1/file1.txt \
		data/data2/file2 data/data2/file2.txt >actual &&
	cat >expect <<-\EOF &&
	data/file
	data/data1/file1
	data/data2/file2
	EOF
	test_cmp expect actual

ok 388 - directories and ** matches

expecting success of 0008.389 'trailing whitespace is ignored': 
	mkdir whitespace &&
	>whitespace/trailing &&
	>whitespace/untracked &&
	echo "whitespace/trailing   " >ignore &&
	cat >expect <<EOF &&
whitespace/untracked
EOF
	git ls-files -o -X ignore whitespace >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 389 - trailing whitespace is ignored

expecting success of 0008.390 'quoting allows trailing whitespace': 
	rm -rf whitespace &&
	mkdir whitespace &&
	>"whitespace/trailing  " &&
	>whitespace/untracked &&
	echo "whitespace/trailing\\ \\ " >ignore &&
	echo whitespace/untracked >expect &&
	git ls-files -o -X ignore whitespace >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 390 - quoting allows trailing whitespace

expecting success of 0008.391 'correct handling of backslashes': 
	rm -rf whitespace &&
	mkdir whitespace &&
	>"whitespace/trailing 1  " &&
	>"whitespace/trailing 2 \\\\" &&
	>"whitespace/trailing 3 \\\\" &&
	>"whitespace/trailing 4   \\ " &&
	>"whitespace/trailing 5 \\ \\ " &&
	>"whitespace/trailing 6 \\a\\" &&
	>whitespace/untracked &&
	sed -e "s/Z$//" >ignore <<-\EOF &&
	whitespace/trailing 1 \    Z
	whitespace/trailing 2 \\\\Z
	whitespace/trailing 3 \\\\ Z
	whitespace/trailing 4   \\\    Z
	whitespace/trailing 5 \\ \\\   Z
	whitespace/trailing 6 \\a\\Z
	EOF
	echo whitespace/untracked >expect &&
	git ls-files -o -X ignore whitespace >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 391 - correct handling of backslashes

expecting success of 0008.392 'info/exclude trumps core.excludesfile': 
	echo >>global-excludes usually-ignored &&
	echo >>.git/info/exclude "!usually-ignored" &&
	>usually-ignored &&
	echo "?? usually-ignored" >expect &&

	git status --porcelain usually-ignored >actual &&
	test_cmp expect actual

ok 392 - info/exclude trumps core.excludesfile

expecting success of 0008.393 'set up ignore file for symlink tests': 
	echo "*" >ignore &&
	rm -f .gitignore .git/info/exclude

ok 393 - set up ignore file for symlink tests

expecting success of 0008.394 'symlinks respected in core.excludesFile': 
	test_when_finished "rm symlink" &&
	ln -s ignore symlink &&
	test_config core.excludesFile "$(pwd)/symlink" &&
	echo file >expect &&
	git check-ignore file >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 394 - symlinks respected in core.excludesFile

expecting success of 0008.395 'symlinks respected in info/exclude': 
	test_when_finished "rm .git/info/exclude" &&
	ln -s ../../ignore .git/info/exclude &&
	echo file >expect &&
	git check-ignore file >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

ok 395 - symlinks respected in info/exclude

expecting success of 0008.396 'symlinks not respected in-tree': 
	test_when_finished "rm .gitignore" &&
	ln -s ignore .gitignore &&
	mkdir subdir &&
	ln -s ignore subdir/.gitignore &&
	test_must_fail git check-ignore subdir/file >actual 2>err &&
	test_must_be_empty actual &&
	test_i18ngrep "unable to access.*gitignore" err

warning: unable to access '.gitignore': Too many levels of symbolic links
warning: unable to access 'subdir/.gitignore': Too many levels of symbolic links
ok 396 - symlinks not respected in-tree

# passed all 396 test(s)
1..396
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0023-crlf-am.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0023-crlf-am/.git/
expecting success of 0023.1 'setup': 

	git config core.autocrlf true &&
	echo foo >bar &&
	git add bar &&
	test_tick &&
	git commit -m initial


warning: in the working copy of 'bar', LF will be replaced by CRLF the next time Git touches it
[master (root-commit) 1adb513] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
ok 1 - setup

expecting success of 0023.2 'am': 

	git am -3 <patchfile &&
	git diff-files --name-status --exit-code


Applying: test1
ok 2 - am

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0024-crlf-archive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0024-crlf-archive/.git/
expecting success of 0024.1 'setup': 

	git config core.autocrlf true &&

	printf "CRLF line ending\r\nAnd another\r\n" > sample &&
	git add sample &&

	test_tick &&
	git commit -m Initial


[master (root-commit) 4f7f1aa] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 sample
ok 1 - setup

expecting success of 0024.2 'tar archive': 

	git archive --format=tar HEAD |
	( mkdir untarred && cd untarred && "$TAR" -xf - ) &&

	test_cmp sample untarred/sample


ok 2 - tar archive

checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 0024.3 'zip archive': 

	git archive --format=zip HEAD >test.zip &&

	( mkdir unzipped && cd unzipped && "$GIT_UNZIP" ../test.zip ) &&

	test_cmp sample unzipped/sample


Archive:  ../test.zip
4f7f1aaec1ee996d8f5e13c2cfbd43a378578e1f
 extracting: sample                  
ok 3 - zip archive

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0025-crlf-renormalize.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0025-crlf-renormalize/.git/
expecting success of 0025.1 'setup': 
	git config core.autocrlf false &&
	printf "LINEONE\nLINETWO\nLINETHREE\n" >LF.txt &&
	printf "LINEONE\r\nLINETWO\r\nLINETHREE\r\n" >CRLF.txt &&
	printf "LINEONE\r\nLINETWO\nLINETHREE\n" >CRLF_mix_LF.txt &&
	git add . &&
	git commit -m initial

[master (root-commit) 98c48e8] initial
 Author: A U Thor <author@example.com>
 3 files changed, 9 insertions(+)
 create mode 100644 CRLF.txt
 create mode 100644 CRLF_mix_LF.txt
 create mode 100644 LF.txt
ok 1 - setup

expecting success of 0025.2 'renormalize CRLF in repo': 
	echo "*.txt text=auto" >.gitattributes &&
	git add --renormalize "*.txt" &&
	cat >expect <<-\EOF &&
	i/lf w/crlf attr/text=auto CRLF.txt
	i/lf w/lf attr/text=auto LF.txt
	i/lf w/mixed attr/text=auto CRLF_mix_LF.txt
	EOF
	git ls-files --eol >tmp &&
	sed -e "s/	/ /g" -e "s/  */ /g" tmp |
	sort >actual &&
	test_cmp expect actual

ok 2 - renormalize CRLF in repo

expecting success of 0025.3 'ignore-errors not mistaken for renormalize': 
	git reset --hard &&
	echo "*.txt text=auto" >.gitattributes &&
	git ls-files --eol >expect &&
	git add --ignore-errors "*.txt" &&
	git ls-files --eol >actual &&
	test_cmp expect actual

HEAD is now at 98c48e8 initial
ok 3 - ignore-errors not mistaken for renormalize

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0026-eol-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0026-eol-config/.git/
expecting success of 0026.1 'setup': 

	git config core.autocrlf false &&

	echo "one text" > .gitattributes &&

	test_write_lines Hello world how are you >one &&
	test_write_lines I am very very fine thank you >two &&
	git add . &&

	git commit -m initial &&

	one=$(git rev-parse HEAD:one) &&
	two=$(git rev-parse HEAD:two) &&

	echo happy.

[master (root-commit) f7a09ee] initial
 Author: A U Thor <author@example.com>
 3 files changed, 13 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 one
 create mode 100644 two
happy.
ok 1 - setup

expecting success of 0026.2 'eol=lf puts LFs in normalized file': 

	rm -f .gitattributes tmp one two &&
	git config core.eol lf &&
	git read-tree --reset -u HEAD &&

	! has_cr one &&
	! has_cr two &&
	onediff=$(git diff one) &&
	twodiff=$(git diff two) &&
	test -z "$onediff" && test -z "$twodiff"

ok 2 - eol=lf puts LFs in normalized file

expecting success of 0026.3 'eol=crlf puts CRLFs in normalized file': 

	rm -f .gitattributes tmp one two &&
	git config core.eol crlf &&
	git read-tree --reset -u HEAD &&

	has_cr one &&
	! has_cr two &&
	onediff=$(git diff one) &&
	twodiff=$(git diff two) &&
	test -z "$onediff" && test -z "$twodiff"

ok 3 - eol=crlf puts CRLFs in normalized file

expecting success of 0026.4 'autocrlf=true overrides eol=lf': 

	rm -f .gitattributes tmp one two &&
	git config core.eol lf &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	has_cr one &&
	has_cr two &&
	onediff=$(git diff one) &&
	twodiff=$(git diff two) &&
	test -z "$onediff" && test -z "$twodiff"

ok 4 - autocrlf=true overrides eol=lf

expecting success of 0026.5 'autocrlf=true overrides unset eol': 

	rm -f .gitattributes tmp one two &&
	git config --unset-all core.eol &&
	git config core.autocrlf true &&
	git read-tree --reset -u HEAD &&

	has_cr one &&
	has_cr two &&
	onediff=$(git diff one) &&
	twodiff=$(git diff two) &&
	test -z "$onediff" && test -z "$twodiff"

ok 5 - autocrlf=true overrides unset eol

ok 6 # skip eol native is crlf (missing NATIVE_CRLF)

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0000-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0000-basic/.git/
expecting success of 0000.1 'verify that the running shell supports "local"': 
	x="notlocal" &&
	y="alsonotlocal" &&
	echo "local alsolocal" >expected1 &&
	try_local_xy >actual1 &&
	test_cmp expected1 actual1 &&
	echo "notlocal alsonotlocal" >expected2 &&
	echo "$x $y" >actual2 &&
	test_cmp expected2 actual2

ok 1 - verify that the running shell supports "local"

expecting success of 0000.2 '.git/objects should be empty after git init in an empty repo': 
	find .git/objects -type f -print >should-be-empty &&
	test_line_count = 0 should-be-empty

ok 2 - .git/objects should be empty after git init in an empty repo

expecting success of 0000.3 '.git/objects should have 3 subdirectories': 
	find .git/objects -type d -print >full-of-directories &&
	test_line_count = 3 full-of-directories

ok 3 - .git/objects should have 3 subdirectories

expecting success of 0000.4 'success is reported like this': 
	:

ok 4 - success is reported like this

expecting success of 0000.5 'subtest: 3 passing tests': 
	write_and_run_sub_test_lib_test full-pass <<-\EOF &&
	for i in 1 2 3
	do
		test_expect_success "passing test #$i" "true"
	done
	test_done
	EOF
	check_sub_test_lib_test full-pass <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 - passing test #3
	> # passed all 3 test(s)
	> 1..3
	EOF

ok 5 - subtest: 3 passing tests

expecting success of 0000.6 'subtest: 2/3 tests passing': 
	write_and_run_sub_test_lib_test_err partial-pass <<-\EOF &&
	test_expect_success "passing test #1" "true"
	test_expect_success "failing test #2" "false"
	test_expect_success "passing test #3" "true"
	test_done
	EOF
	check_sub_test_lib_test partial-pass <<-\EOF
	> ok 1 - passing test #1
	> not ok 2 - failing test #2
	#	false
	> ok 3 - passing test #3
	> # failed 1 among 3 test(s)
	> 1..3
	EOF

ok 6 - subtest: 2/3 tests passing

expecting success of 0000.7 'subtest: --immediate': 
	run_sub_test_lib_test_err partial-pass \
		--immediate &&
	check_sub_test_lib_test_err partial-pass \
		<<-\EOF_OUT 3<<-EOF_ERR
	> ok 1 - passing test #1
	> not ok 2 - failing test #2
	> #	false
	> 1..2
	EOF_OUT
	EOF_ERR

ok 7 - subtest: --immediate

expecting success of 0000.8 'subtest: a failing TODO test': 
	write_and_run_sub_test_lib_test failing-todo <<-\EOF &&
	test_expect_success "passing test" "true"
	test_expect_failure "pretend we have a known breakage" "false"
	test_done
	EOF
	check_sub_test_lib_test failing-todo <<-\EOF
	> ok 1 - passing test
	> not ok 2 - pretend we have a known breakage # TODO known breakage
	> # still have 1 known breakage(s)
	> # passed all remaining 1 test(s)
	> 1..2
	EOF

ok 8 - subtest: a failing TODO test

expecting success of 0000.9 'subtest: a passing TODO test': 
	write_and_run_sub_test_lib_test passing-todo <<-\EOF &&
	test_expect_failure "pretend we have fixed a known breakage" "true"
	test_done
	EOF
	check_sub_test_lib_test passing-todo <<-\EOF
	> ok 1 - pretend we have fixed a known breakage # TODO known breakage vanished
	> # 1 known breakage(s) vanished; please update test(s)
	> 1..1
	EOF

ok 9 - subtest: a passing TODO test

expecting success of 0000.10 'subtest: 2 TODO tests, one passin': 
	write_and_run_sub_test_lib_test partially-passing-todos <<-\EOF &&
	test_expect_failure "pretend we have a known breakage" "false"
	test_expect_success "pretend we have a passing test" "true"
	test_expect_failure "pretend we have fixed another known breakage" "true"
	test_done
	EOF
	check_sub_test_lib_test partially-passing-todos <<-\EOF
	> not ok 1 - pretend we have a known breakage # TODO known breakage
	> ok 2 - pretend we have a passing test
	> ok 3 - pretend we have fixed another known breakage # TODO known breakage vanished
	> # 1 known breakage(s) vanished; please update test(s)
	> # still have 1 known breakage(s)
	> # passed all remaining 1 test(s)
	> 1..3
	EOF

ok 10 - subtest: 2 TODO tests, one passin

expecting success of 0000.11 'subtest: mixed results: pass, failure and a TODO test': 
	write_and_run_sub_test_lib_test_err mixed-results1 <<-\EOF &&
	test_expect_success "passing test" "true"
	test_expect_success "failing test" "false"
	test_expect_failure "pretend we have a known breakage" "false"
	test_done
	EOF
	check_sub_test_lib_test mixed-results1 <<-\EOF
	> ok 1 - passing test
	> not ok 2 - failing test
	> #	false
	> not ok 3 - pretend we have a known breakage # TODO known breakage
	> # still have 1 known breakage(s)
	> # failed 1 among remaining 2 test(s)
	> 1..3
	EOF

ok 11 - subtest: mixed results: pass, failure and a TODO test

expecting success of 0000.12 'subtest: mixed results: a mixture of all possible results': 
	write_and_run_sub_test_lib_test_err mixed-results2 <<-\EOF &&
	test_expect_success "passing test" "true"
	test_expect_success "passing test" "true"
	test_expect_success "passing test" "true"
	test_expect_success "passing test" "true"
	test_expect_success "failing test" "false"
	test_expect_success "failing test" "false"
	test_expect_success "failing test" "false"
	test_expect_failure "pretend we have a known breakage" "false"
	test_expect_failure "pretend we have a known breakage" "false"
	test_expect_failure "pretend we have fixed a known breakage" "true"
	test_done
	EOF
	check_sub_test_lib_test mixed-results2 <<-\EOF
	> ok 1 - passing test
	> ok 2 - passing test
	> ok 3 - passing test
	> ok 4 - passing test
	> not ok 5 - failing test
	> #	false
	> not ok 6 - failing test
	> #	false
	> not ok 7 - failing test
	> #	false
	> not ok 8 - pretend we have a known breakage # TODO known breakage
	> not ok 9 - pretend we have a known breakage # TODO known breakage
	> ok 10 - pretend we have fixed a known breakage # TODO known breakage vanished
	> # 1 known breakage(s) vanished; please update test(s)
	> # still have 2 known breakage(s)
	> # failed 3 among remaining 7 test(s)
	> 1..10
	EOF

ok 12 - subtest: mixed results: a mixture of all possible results

expecting success of 0000.13 'subtest: --verbose option': 
	write_and_run_sub_test_lib_test_err t1234-verbose --verbose <<-\EOF &&
	test_expect_success "passing test" true
	test_expect_success "test with output" "echo foo"
	test_expect_success "failing test" false
	test_done
	EOF
	mv t1234-verbose/out t1234-verbose/out+ &&
	grep -v "^Initialized empty" t1234-verbose/out+ >t1234-verbose/out &&
	check_sub_test_lib_test t1234-verbose <<-\EOF
	> expecting success of 1234.1 'passing test': true
	> ok 1 - passing test
	> Z
	> expecting success of 1234.2 'test with output': echo foo
	> foo
	> ok 2 - test with output
	> Z
	> expecting success of 1234.3 'failing test': false
	> not ok 3 - failing test
	> #	false
	> Z
	> # failed 1 among 3 test(s)
	> 1..3
	EOF

ok 13 - subtest: --verbose option

expecting success of 0000.14 'subtest: --verbose-only option': 
	run_sub_test_lib_test_err \
		t1234-verbose \
		--verbose-only=2 &&
	check_sub_test_lib_test t1234-verbose <<-\EOF
	> ok 1 - passing test
	> Z
	> expecting success of 1234.2 'test with output': echo foo
	> foo
	> ok 2 - test with output
	> Z
	> not ok 3 - failing test
	> #	false
	> # failed 1 among 3 test(s)
	> 1..3
	EOF

ok 14 - subtest: --verbose-only option

expecting success of 0000.15 'subtest: skip one with GIT_SKIP_TESTS': 
	(
		run_sub_test_lib_test full-pass \
			--skip="full.2" &&
		check_sub_test_lib_test full-pass <<-\EOF
		> ok 1 - passing test #1
		> ok 2 # skip passing test #2 (GIT_SKIP_TESTS)
		> ok 3 - passing test #3
		> # passed all 3 test(s)
		> 1..3
		EOF
	)

ok 15 - subtest: skip one with GIT_SKIP_TESTS

expecting success of 0000.16 'subtest: skip several with GIT_SKIP_TESTS': 
	(
		write_and_run_sub_test_lib_test git-skip-tests-several \
			--skip="git.2 git.5" <<-\EOF &&
		for i in 1 2 3 4 5 6
		do
			test_expect_success "passing test #$i" "true"
		done
		test_done
		EOF
		check_sub_test_lib_test git-skip-tests-several <<-\EOF
		> ok 1 - passing test #1
		> ok 2 # skip passing test #2 (GIT_SKIP_TESTS)
		> ok 3 - passing test #3
		> ok 4 - passing test #4
		> ok 5 # skip passing test #5 (GIT_SKIP_TESTS)
		> ok 6 - passing test #6
		> # passed all 6 test(s)
		> 1..6
		EOF
	)

ok 16 - subtest: skip several with GIT_SKIP_TESTS

expecting success of 0000.17 'subtest: sh pattern skipping with GIT_SKIP_TESTS': 
	(
		run_sub_test_lib_test git-skip-tests-several \
			--skip="git.[2-5]" &&
		check_sub_test_lib_test git-skip-tests-several <<-\EOF
		> ok 1 - passing test #1
		> ok 2 # skip passing test #2 (GIT_SKIP_TESTS)
		> ok 3 # skip passing test #3 (GIT_SKIP_TESTS)
		> ok 4 # skip passing test #4 (GIT_SKIP_TESTS)
		> ok 5 # skip passing test #5 (GIT_SKIP_TESTS)
		> ok 6 - passing test #6
		> # passed all 6 test(s)
		> 1..6
		EOF
	)

ok 17 - subtest: sh pattern skipping with GIT_SKIP_TESTS

expecting success of 0000.18 'subtest: skip entire test suite with GIT_SKIP_TESTS': 
	(
		GIT_SKIP_TESTS="git" && export GIT_SKIP_TESTS &&
		run_sub_test_lib_test git-skip-tests-several \
			--skip="git" &&
		check_sub_test_lib_test git-skip-tests-several <<-\EOF
		> 1..0 # SKIP skip all tests in git
		EOF
	)

ok 18 - subtest: skip entire test suite with GIT_SKIP_TESTS

expecting success of 0000.19 'subtest: GIT_SKIP_TESTS does not skip unmatched suite': 
	(
		GIT_SKIP_TESTS="notgit" && export GIT_SKIP_TESTS &&
		run_sub_test_lib_test full-pass \
			--skip="notfull" &&
		check_sub_test_lib_test full-pass <<-\EOF
		> ok 1 - passing test #1
		> ok 2 - passing test #2
		> ok 3 - passing test #3
		> # passed all 3 test(s)
		> 1..3
		EOF
	)

ok 19 - subtest: GIT_SKIP_TESTS does not skip unmatched suite

expecting success of 0000.20 'subtest: --run basic': 
	run_sub_test_lib_test git-skip-tests-several --run="1,3,5" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 # skip passing test #2 (--run)
	> ok 3 - passing test #3
	> ok 4 # skip passing test #4 (--run)
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 20 - subtest: --run basic

expecting success of 0000.21 'subtest: --run with a range': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="1-3" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 - passing test #3
	> ok 4 # skip passing test #4 (--run)
	> ok 5 # skip passing test #5 (--run)
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 21 - subtest: --run with a range

expecting success of 0000.22 'subtest: --run with two ranges': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="1-2,5-6" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 # skip passing test #4 (--run)
	> ok 5 - passing test #5
	> ok 6 - passing test #6
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 22 - subtest: --run with two ranges

expecting success of 0000.23 'subtest: --run with a left open range': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="-3" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 - passing test #3
	> ok 4 # skip passing test #4 (--run)
	> ok 5 # skip passing test #5 (--run)
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 23 - subtest: --run with a left open range

expecting success of 0000.24 'subtest: --run with a right open range': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="4-" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 # skip passing test #1 (--run)
	> ok 2 # skip passing test #2 (--run)
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 - passing test #6
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 24 - subtest: --run with a right open range

expecting success of 0000.25 'subtest: --run with basic negation': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="!3" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 - passing test #6
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 25 - subtest: --run with basic negation

expecting success of 0000.26 'subtest: --run with two negations': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="!3,!6" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 26 - subtest: --run with two negations

expecting success of 0000.27 'subtest: --run a range and negation': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="-4,!2" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 # skip passing test #2 (--run)
	> ok 3 - passing test #3
	> ok 4 - passing test #4
	> ok 5 # skip passing test #5 (--run)
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 27 - subtest: --run a range and negation

expecting success of 0000.28 'subtest: --run range negation': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="!1-3" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 # skip passing test #1 (--run)
	> ok 2 # skip passing test #2 (--run)
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 - passing test #6
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 28 - subtest: --run range negation

expecting success of 0000.29 'subtest: --run include, exclude and include': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="1-5,!1-3,2" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 # skip passing test #1 (--run)
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 29 - subtest: --run include, exclude and include

expecting success of 0000.30 'subtest: --run include, exclude and include, comma separated': 
	run_sub_test_lib_test git-skip-tests-several \
		--run=1-5,!1-3,2 &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 # skip passing test #1 (--run)
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 - passing test #4
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 30 - subtest: --run include, exclude and include, comma separated

expecting success of 0000.31 'subtest: --run exclude and include': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="!3-,5" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 - passing test #2
	> ok 3 # skip passing test #3 (--run)
	> ok 4 # skip passing test #4 (--run)
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 31 - subtest: --run exclude and include

expecting success of 0000.32 'subtest: --run empty selectors': 
	run_sub_test_lib_test git-skip-tests-several \
		--run="1,,3,,,5" &&
	check_sub_test_lib_test git-skip-tests-several <<-\EOF
	> ok 1 - passing test #1
	> ok 2 # skip passing test #2 (--run)
	> ok 3 - passing test #3
	> ok 4 # skip passing test #4 (--run)
	> ok 5 - passing test #5
	> ok 6 # skip passing test #6 (--run)
	> # passed all 6 test(s)
	> 1..6
	EOF

ok 32 - subtest: --run empty selectors

expecting success of 0000.33 'subtest: --run substring selector': 
	write_and_run_sub_test_lib_test run-substring-selector \
		--run="relevant" <<-\EOF &&
	test_expect_success "relevant test" "true"
	for i in 1 2 3 4 5 6
	do
		test_expect_success "other test #$i" "true"
	done
	test_done
	EOF
	check_sub_test_lib_test run-substring-selector <<-\EOF
	> ok 1 - relevant test
	> ok 2 # skip other test #1 (--run)
	> ok 3 # skip other test #2 (--run)
	> ok 4 # skip other test #3 (--run)
	> ok 5 # skip other test #4 (--run)
	> ok 6 # skip other test #5 (--run)
	> ok 7 # skip other test #6 (--run)
	> # passed all 7 test(s)
	> 1..7
	EOF

ok 33 - subtest: --run substring selector

expecting success of 0000.34 'subtest: --run keyword selection': 
	write_and_run_sub_test_lib_test_err run-inv-range-start \
		--run="a-5" <<-\EOF &&
	test_expect_success "passing test #1" "true"
	test_done
	EOF
	check_sub_test_lib_test_err run-inv-range-start \
		<<-\EOF_OUT 3<<-EOF_ERR
	> FATAL: Unexpected exit with code 1
	EOF_OUT
	> error: --run: invalid non-numeric in range start: ${SQ}a-5${SQ}
	EOF_ERR

ok 34 - subtest: --run keyword selection

expecting success of 0000.35 'subtest: --run invalid range end': 
	run_sub_test_lib_test_err run-inv-range-start \
		--run="1-z" &&
	check_sub_test_lib_test_err run-inv-range-start \
		<<-\EOF_OUT 3<<-EOF_ERR
	> FATAL: Unexpected exit with code 1
	EOF_OUT
	> error: --run: invalid non-numeric in range end: ${SQ}1-z${SQ}
	EOF_ERR

ok 35 - subtest: --run invalid range end

expecting success of 0000.36 'subtest: --invert-exit-code without --immediate': 
	run_sub_test_lib_test_err full-pass \
		--invert-exit-code &&
	check_sub_test_lib_test_err full-pass \
		<<-\EOF_OUT 3<<-EOF_ERR
	ok 1 - passing test #1
	ok 2 - passing test #2
	ok 3 - passing test #3
	# passed all 3 test(s)
	1..3
	# faking up non-zero exit with --invert-exit-code
	EOF_OUT
	EOF_ERR

ok 36 - subtest: --invert-exit-code without --immediate

expecting success of 0000.37 'subtest: --invert-exit-code with --immediate: all passed': 
	run_sub_test_lib_test_err full-pass \
		--invert-exit-code --immediate &&
	check_sub_test_lib_test_err full-pass \
		<<-\EOF_OUT 3<<-EOF_ERR
	ok 1 - passing test #1
	ok 2 - passing test #2
	ok 3 - passing test #3
	# passed all 3 test(s)
	1..3
	# faking up non-zero exit with --invert-exit-code
	EOF_OUT
	EOF_ERR

ok 37 - subtest: --invert-exit-code with --immediate: all passed

expecting success of 0000.38 'subtest: --invert-exit-code without --immediate: partial pass': 
	run_sub_test_lib_test partial-pass \
		--invert-exit-code &&
	check_sub_test_lib_test partial-pass <<-\EOF
	ok 1 - passing test #1
	not ok 2 - # TODO induced breakage (--invert-exit-code): failing test #2
	#	false
	ok 3 - passing test #3
	# failed 1 among 3 test(s)
	1..3
	# faked up failures as TODO & now exiting with 0 due to --invert-exit-code
	EOF

ok 38 - subtest: --invert-exit-code without --immediate: partial pass

expecting success of 0000.39 'subtest: --invert-exit-code with --immediate: partial pass': 
	run_sub_test_lib_test partial-pass \
		--invert-exit-code --immediate &&
	check_sub_test_lib_test partial-pass \
		<<-\EOF_OUT 3<<-EOF_ERR
	ok 1 - passing test #1
	not ok 2 - # TODO induced breakage (--invert-exit-code): failing test #2
	#	false
	1..2
	# faked up failures as TODO & now exiting with 0 due to --invert-exit-code
	EOF_OUT
	EOF_ERR

ok 39 - subtest: --invert-exit-code with --immediate: partial pass

expecting success of 0000.40 'subtest: --invert-exit-code --immediate: got a failure': 
	run_sub_test_lib_test partial-pass \
		--invert-exit-code --immediate &&
	check_sub_test_lib_test_err partial-pass \
		<<-\EOF_OUT 3<<-EOF_ERR
	ok 1 - passing test #1
	not ok 2 - # TODO induced breakage (--invert-exit-code): failing test #2
	#	false
	1..2
	# faked up failures as TODO & now exiting with 0 due to --invert-exit-code
	EOF_OUT
	EOF_ERR

ok 40 - subtest: --invert-exit-code --immediate: got a failure

expecting success of 0000.41 'subtest: tests respect prerequisites': 
	write_and_run_sub_test_lib_test prereqs <<-\EOF &&

	test_set_prereq HAVEIT
	test_expect_success HAVEIT "prereq is satisfied" "true"
	test_expect_success "have_prereq works" "
		test_have_prereq HAVEIT
	"
	test_expect_success DONTHAVEIT "prereq not satisfied" "false"

	test_set_prereq HAVETHIS
	test_expect_success HAVETHIS,HAVEIT "multiple prereqs" "true"
	test_expect_success HAVEIT,DONTHAVEIT "mixed prereqs (yes,no)" "false"
	test_expect_success DONTHAVEIT,HAVEIT "mixed prereqs (no,yes)" "false"

	test_done
	EOF

	check_sub_test_lib_test prereqs <<-\EOF
	ok 1 - prereq is satisfied
	ok 2 - have_prereq works
	ok 3 # skip prereq not satisfied (missing DONTHAVEIT)
	ok 4 - multiple prereqs
	ok 5 # skip mixed prereqs (yes,no) (missing DONTHAVEIT of HAVEIT,DONTHAVEIT)
	ok 6 # skip mixed prereqs (no,yes) (missing DONTHAVEIT of DONTHAVEIT,HAVEIT)
	# passed all 6 test(s)
	1..6
	EOF

ok 41 - subtest: tests respect prerequisites

expecting success of 0000.42 'subtest: tests respect lazy prerequisites': 
	write_and_run_sub_test_lib_test lazy-prereqs <<-\EOF &&

	test_lazy_prereq LAZY_TRUE true
	test_expect_success LAZY_TRUE "lazy prereq is satisifed" "true"
	test_expect_success !LAZY_TRUE "negative lazy prereq" "false"

	test_lazy_prereq LAZY_FALSE false
	test_expect_success LAZY_FALSE "lazy prereq not satisfied" "false"
	test_expect_success !LAZY_FALSE "negative false prereq" "true"

	test_done
	EOF

	check_sub_test_lib_test lazy-prereqs <<-\EOF
	ok 1 - lazy prereq is satisifed
	ok 2 # skip negative lazy prereq (missing !LAZY_TRUE)
	ok 3 # skip lazy prereq not satisfied (missing LAZY_FALSE)
	ok 4 - negative false prereq
	# passed all 4 test(s)
	1..4
	EOF

ok 42 - subtest: tests respect lazy prerequisites

expecting success of 0000.43 'subtest: nested lazy prerequisites': 
	write_and_run_sub_test_lib_test nested-lazy <<-\EOF &&

	test_lazy_prereq NESTED_INNER "
		>inner &&
		rm -f outer
	"
	test_lazy_prereq NESTED_PREREQ "
		>outer &&
		test_have_prereq NESTED_INNER &&
		echo can create new file in cwd >file &&
		test_path_is_file outer &&
		test_path_is_missing inner
	"
	test_expect_success NESTED_PREREQ "evaluate nested prereq" "true"

	test_done
	EOF

	check_sub_test_lib_test nested-lazy <<-\EOF
	ok 1 - evaluate nested prereq
	# passed all 1 test(s)
	1..1
	EOF

ok 43 - subtest: nested lazy prerequisites

expecting success of 0000.44 'subtest: lazy prereqs do not turn off tracing': 
	write_and_run_sub_test_lib_test lazy-prereq-and-tracing \
		-v -x <<-\EOF &&
	test_lazy_prereq LAZY true

	test_expect_success lazy "test_have_prereq LAZY && echo trace"

	test_done
	EOF

	grep "echo trace" lazy-prereq-and-tracing/err

+ echo trace
ok 44 - subtest: lazy prereqs do not turn off tracing

expecting success of 0000.45 'subtest: tests clean up after themselves': 
	write_and_run_sub_test_lib_test cleanup <<-\EOF &&
	clean=no
	test_expect_success "do cleanup" "
		test_when_finished clean=yes
	"
	test_expect_success "cleanup happened" "
		test $clean = yes
	"
	test_done
	EOF

	check_sub_test_lib_test cleanup <<-\EOF
	ok 1 - do cleanup
	ok 2 - cleanup happened
	# passed all 2 test(s)
	1..2
	EOF

ok 45 - subtest: tests clean up after themselves

expecting success of 0000.46 'subtest: tests clean up even on failures': 
	write_and_run_sub_test_lib_test_err \
		failing-cleanup <<-\EOF &&
	test_expect_success "tests clean up even after a failure" "
		touch clean-after-failure &&
		test_when_finished rm clean-after-failure &&
		(exit 1)
	"
	test_expect_success "failure to clean up causes the test to fail" "
		test_when_finished \"(exit 2)\"
	"
	test_done
	EOF
	check_sub_test_lib_test failing-cleanup <<-\EOF
	> not ok 1 - tests clean up even after a failure
	> #	Z
	> #	touch clean-after-failure &&
	> #	test_when_finished rm clean-after-failure &&
	> #	(exit 1)
	> #	Z
	> not ok 2 - failure to clean up causes the test to fail
	> #	Z
	> #	test_when_finished "(exit 2)"
	> #	Z
	> # failed 2 among 2 test(s)
	> 1..2
	EOF

ok 46 - subtest: tests clean up even on failures

expecting success of 0000.47 'subtest: test_atexit is run': 
	write_and_run_sub_test_lib_test_err \
		atexit-cleanup -i <<-\EOF &&
	test_expect_success "tests clean up even after a failure" "
		> ../../clean-atexit &&
		test_atexit rm ../../clean-atexit &&
		> ../../also-clean-atexit &&
		test_atexit rm ../../also-clean-atexit &&
		> ../../dont-clean-atexit &&
		(exit 1)
	"
	test_done
	EOF
	test_path_is_file dont-clean-atexit &&
	test_path_is_missing clean-atexit &&
	test_path_is_missing also-clean-atexit

ok 47 - subtest: test_atexit is run

expecting success of 0000.48 'test_oid provides sane info by default': 
	test_oid zero >actual &&
	grep "^00*\$" actual &&
	rawsz="$(test_oid rawsz)" &&
	hexsz="$(test_oid hexsz)" &&
	test "$hexsz" -eq $(wc -c <actual) &&
	test $(( $rawsz * 2)) -eq "$hexsz"

0000000000000000000000000000000000000000
ok 48 - test_oid provides sane info by default

expecting success of 0000.49 'test_oid can look up data for SHA-1': 
	test_when_finished "test_detect_hash" &&
	test_set_hash sha1 &&
	test_oid zero >actual &&
	grep "^00*\$" actual &&
	rawsz="$(test_oid rawsz)" &&
	hexsz="$(test_oid hexsz)" &&
	test $(wc -c <actual) -eq 40 &&
	test "$rawsz" -eq 20 &&
	test "$hexsz" -eq 40

0000000000000000000000000000000000000000
ok 49 - test_oid can look up data for SHA-1

expecting success of 0000.50 'test_oid can look up data for SHA-256': 
	test_when_finished "test_detect_hash" &&
	test_set_hash sha256 &&
	test_oid zero >actual &&
	grep "^00*\$" actual &&
	rawsz="$(test_oid rawsz)" &&
	hexsz="$(test_oid hexsz)" &&
	test $(wc -c <actual) -eq 64 &&
	test "$rawsz" -eq 32 &&
	test "$hexsz" -eq 64

0000000000000000000000000000000000000000000000000000000000000000
ok 50 - test_oid can look up data for SHA-256

expecting success of 0000.51 'test_oid can look up data for a specified algorithm': 
	rawsz="$(test_oid --hash=sha1 rawsz)" &&
	hexsz="$(test_oid --hash=sha1 hexsz)" &&
	test "$rawsz" -eq 20 &&
	test "$hexsz" -eq 40 &&
	rawsz="$(test_oid --hash=sha256 rawsz)" &&
	hexsz="$(test_oid --hash=sha256 hexsz)" &&
	test "$rawsz" -eq 32 &&
	test "$hexsz" -eq 64

ok 51 - test_oid can look up data for a specified algorithm

expecting success of 0000.52 'test_bool_env': 
	(
		sane_unset envvar &&

		test_bool_env envvar true &&
		! test_bool_env envvar false &&

		envvar= &&
		export envvar &&
		! test_bool_env envvar true &&
		! test_bool_env envvar false &&

		envvar=true &&
		test_bool_env envvar true &&
		test_bool_env envvar false &&

		envvar=false &&
		! test_bool_env envvar true &&
		! test_bool_env envvar false &&

		envvar=invalid &&
		# When encountering an invalid bool value, test_bool_env
		# prints its error message to the original stderr of the
		# test script, hence the redirection of fd 7, and aborts
		# with "exit 1", hence the subshell.
		! ( test_bool_env envvar true ) 7>err &&
		grep "error: test_bool_env requires bool values" err &&

		envvar=true &&
		! ( test_bool_env envvar invalid ) 7>err &&
		grep "error: test_bool_env requires bool values" err
	)

fatal: bad boolean config value 'invalid' for 'envvar'
error: test_bool_env requires bool values both for $envvar and for the default fallback
error: option `--default' expects a boolean value with `--type=bool`, not `invalid`
usage: git env--helper --type=[bool|ulong] <options> <env-var>

    --type <type>         value is given this type
    --default <value>     default for git_env_*(...) to fall back on
    --exit-code           be quiet only use git_env_*() value as exit code

error: test_bool_env requires bool values both for $envvar and for the default fallback
ok 52 - test_bool_env

expecting success of 0000.53 'git update-index without --add should fail adding': 
	test_must_fail git update-index should-be-empty

error: should-be-empty: cannot add to the index - missing --add option?
fatal: Unable to process path should-be-empty
ok 53 - git update-index without --add should fail adding

expecting success of 0000.54 'git update-index with --add should succeed': 
	git update-index --add should-be-empty

ok 54 - git update-index with --add should succeed

expecting success of 0000.55 'writing tree out with git write-tree': 
	tree=$(git write-tree)

ok 55 - writing tree out with git write-tree

expecting success of 0000.56 'validate object ID of a known tree': 
	test "$tree" = "$(test_oid simpletree)"
    
ok 56 - validate object ID of a known tree

expecting success of 0000.57 'git update-index without --remove should fail removing': 
	rm -f should-be-empty full-of-directories &&
	test_must_fail git update-index should-be-empty

error: should-be-empty: does not exist and --remove not passed
fatal: Unable to process path should-be-empty
ok 57 - git update-index without --remove should fail removing

expecting success of 0000.58 'git update-index with --remove should be able to remove': 
	git update-index --remove should-be-empty

ok 58 - git update-index with --remove should be able to remove

expecting success of 0000.59 'git write-tree should be able to write an empty tree': 
	tree=$(git write-tree)

ok 59 - git write-tree should be able to write an empty tree

expecting success of 0000.60 'validate object ID of a known tree': 
	test "$tree" = $EMPTY_TREE

ok 60 - validate object ID of a known tree

expecting success of 0000.61 'adding various types of objects with git update-index --add': 
	mkdir path2 path3 path3/subp3 &&
	paths="path0 path2/file2 path3/file3 path3/subp3/file3" &&
	(
		for p in $paths
		do
			echo "hello $p" >$p || exit 1
			test_ln_s_add "hello $p" ${p}sym || exit 1
		done
	) &&
	find path* ! -type d -print | xargs git update-index --add

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 61 - adding various types of objects with git update-index --add

expecting success of 0000.62 'showing stage with git ls-files --stage': 
	git ls-files --stage >current

ok 62 - showing stage with git ls-files --stage

expecting success of 0000.63 'validate git ls-files output for a known tree': 
	cat >expected <<-EOF &&
	100644 $(test_oid path0f) 0	path0
	120000 $(test_oid path0s) 0	path0sym
	100644 $(test_oid path2f) 0	path2/file2
	120000 $(test_oid path2s) 0	path2/file2sym
	100644 $(test_oid path3f) 0	path3/file3
	120000 $(test_oid path3s) 0	path3/file3sym
	100644 $(test_oid subp3f) 0	path3/subp3/file3
	120000 $(test_oid subp3s) 0	path3/subp3/file3sym
	EOF
	test_cmp expected current

ok 63 - validate git ls-files output for a known tree

expecting success of 0000.64 'writing tree out with git write-tree': 
	tree=$(git write-tree)

ok 64 - writing tree out with git write-tree

expecting success of 0000.65 'validate object ID for a known tree': 
	test "$tree" = "$(test_oid root)"

ok 65 - validate object ID for a known tree

expecting success of 0000.66 'showing tree with git ls-tree': 
    git ls-tree $tree >current

ok 66 - showing tree with git ls-tree

expecting success of 0000.67 'git ls-tree output for a known tree': 
	cat >expected <<-EOF &&
	100644 blob $(test_oid path0f)	path0
	120000 blob $(test_oid path0s)	path0sym
	040000 tree $(test_oid path2d)	path2
	040000 tree $(test_oid path3d)	path3
	EOF
	test_cmp expected current

ok 67 - git ls-tree output for a known tree

expecting success of 0000.68 'showing tree with git ls-tree -r': 
	git ls-tree -r $tree >current

ok 68 - showing tree with git ls-tree -r

expecting success of 0000.69 'git ls-tree -r output for a known tree': 
	cat >expected <<-EOF &&
	100644 blob $(test_oid path0f)	path0
	120000 blob $(test_oid path0s)	path0sym
	100644 blob $(test_oid path2f)	path2/file2
	120000 blob $(test_oid path2s)	path2/file2sym
	100644 blob $(test_oid path3f)	path3/file3
	120000 blob $(test_oid path3s)	path3/file3sym
	100644 blob $(test_oid subp3f)	path3/subp3/file3
	120000 blob $(test_oid subp3s)	path3/subp3/file3sym
	EOF
	test_cmp expected current

ok 69 - git ls-tree -r output for a known tree

expecting success of 0000.70 'showing tree with git ls-tree -r -t': 
	git ls-tree -r -t $tree >current

ok 70 - showing tree with git ls-tree -r -t

expecting success of 0000.71 'git ls-tree -r output for a known tree': 
	cat >expected <<-EOF &&
	100644 blob $(test_oid path0f)	path0
	120000 blob $(test_oid path0s)	path0sym
	040000 tree $(test_oid path2d)	path2
	100644 blob $(test_oid path2f)	path2/file2
	120000 blob $(test_oid path2s)	path2/file2sym
	040000 tree $(test_oid path3d)	path3
	100644 blob $(test_oid path3f)	path3/file3
	120000 blob $(test_oid path3s)	path3/file3sym
	040000 tree $(test_oid subp3d)	path3/subp3
	100644 blob $(test_oid subp3f)	path3/subp3/file3
	120000 blob $(test_oid subp3s)	path3/subp3/file3sym
	EOF
	test_cmp expected current

ok 71 - git ls-tree -r output for a known tree

expecting success of 0000.72 'writing partial tree out with git write-tree --prefix': 
	ptree=$(git write-tree --prefix=path3)

ok 72 - writing partial tree out with git write-tree --prefix

expecting success of 0000.73 'validate object ID for a known tree': 
	test "$ptree" = $(test_oid path3d)

ok 73 - validate object ID for a known tree

expecting success of 0000.74 'writing partial tree out with git write-tree --prefix': 
	ptree=$(git write-tree --prefix=path3/subp3)

ok 74 - writing partial tree out with git write-tree --prefix

expecting success of 0000.75 'validate object ID for a known tree': 
	test "$ptree" = $(test_oid subp3d)

ok 75 - validate object ID for a known tree

expecting success of 0000.76 'put invalid objects into the index': 
	rm -f .git/index &&
	suffix=$(echo $ZERO_OID | sed -e "s/^.//") &&
	cat >badobjects <<-EOF &&
	100644 blob $(test_oid 001)	dir/file1
	100644 blob $(test_oid 002)	dir/file2
	100644 blob $(test_oid 003)	dir/file3
	100644 blob $(test_oid 004)	dir/file4
	100644 blob $(test_oid 005)	dir/file5
	EOF
	git update-index --index-info <badobjects

ok 76 - put invalid objects into the index

expecting success of 0000.77 'writing this tree without --missing-ok': 
	test_must_fail git write-tree

error: invalid object 100644 0000000000000000000000000000000000000001 for 'dir/file1'
fatal: git-write-tree: error building trees
ok 77 - writing this tree without --missing-ok

expecting success of 0000.78 'writing this tree with --missing-ok': 
	git write-tree --missing-ok

6718b1dd2231ec9ad958238ceeaa06fbfbefda94
ok 78 - writing this tree with --missing-ok

expecting success of 0000.79 'git read-tree followed by write-tree should be idempotent': 
	rm -f .git/index &&
	git read-tree $tree &&
	test_path_is_file .git/index &&
	newtree=$(git write-tree) &&
	test "$newtree" = "$tree"

ok 79 - git read-tree followed by write-tree should be idempotent

expecting success of 0000.80 'validate git diff-files output for a know cache/work tree state': 
	cat >expected <<EOF &&
:100644 100644 $(test_oid path0f) $ZERO_OID M	path0
:120000 120000 $(test_oid path0s) $ZERO_OID M	path0sym
:100644 100644 $(test_oid path2f) $ZERO_OID M	path2/file2
:120000 120000 $(test_oid path2s) $ZERO_OID M	path2/file2sym
:100644 100644 $(test_oid path3f) $ZERO_OID M	path3/file3
:120000 120000 $(test_oid path3s) $ZERO_OID M	path3/file3sym
:100644 100644 $(test_oid subp3f) $ZERO_OID M	path3/subp3/file3
:120000 120000 $(test_oid subp3s) $ZERO_OID M	path3/subp3/file3sym
EOF
	git diff-files >current &&
	test_cmp expected current

ok 80 - validate git diff-files output for a know cache/work tree state

expecting success of 0000.81 'git update-index --refresh should succeed': 
	git update-index --refresh

ok 81 - git update-index --refresh should succeed

expecting success of 0000.82 'no diff after checkout and git update-index --refresh': 
	git diff-files >current &&
	cmp -s current /dev/null

ok 82 - no diff after checkout and git update-index --refresh

expecting success of 0000.83 'git commit-tree records the correct tree in a commit': 
	commit0=$(echo NO | git commit-tree $P) &&
	git show --pretty=raw $commit0 >out &&
	tree=$(sed -n -e "s/^tree //p" -e "/^author /q" out) &&
	test "z$tree" = "z$P"

ok 83 - git commit-tree records the correct tree in a commit

expecting success of 0000.84 'git commit-tree records the correct parent in a commit': 
	commit1=$(echo NO | git commit-tree $P -p $commit0) &&
	git show --pretty=raw $commit1 >out &&
	parent=$(sed -n -e "s/^parent //p" -e "/^author /q" out) &&
	test "z$commit0" = "z$parent"

ok 84 - git commit-tree records the correct parent in a commit

expecting success of 0000.85 'git commit-tree omits duplicated parent in a commit': 
	commit2=$(echo NO | git commit-tree $P -p $commit0 -p $commit0) &&
	git show --pretty=raw $commit2 >out &&
	cat >match.sed <<-\EOF &&
	s/^parent //p
	/^author /q
	EOF
	parent=$(sed -n -f match.sed out | sort -u) &&
	test "z$commit0" = "z$parent" &&
	git show --pretty=raw $commit2 >out &&
	test_stdout_line_count = 1 sed -n -f match.sed out

error: duplicate parent d664f4b2f72710b8e019acf96c4773c8ac3993b8 ignored
ok 85 - git commit-tree omits duplicated parent in a commit

expecting success of 0000.86 'update-index D/F conflict': 
	mv path0 tmp &&
	mv path2 path0 &&
	mv tmp path2 &&
	git update-index --add --replace path2 path0/file2 &&
	git ls-files path0 >tmp &&
	numpath0=$(wc -l <tmp) &&
	test $numpath0 = 1

ok 86 - update-index D/F conflict

expecting success of 0000.87 'very long name in the index handled sanely': 

	a=a && # 1
	a=$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a && # 16
	a=$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a && # 256
	a=$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a && # 4096
	a=${a}q &&

	>path4 &&
	git update-index --add path4 &&
	git ls-files -s path4 >tmp &&
	(
		sed -e "s/	.*/	/" tmp |
		tr -d "\012" &&
		echo "$a"
	) | git update-index --index-info &&
	git ls-files "a*" >tmp &&
	len=$(wc -c <tmp) &&
	test $len = 4098

ok 87 - very long name in the index handled sanely

expecting success of 0000.88 'test_must_fail on a failing git command': 
	test_must_fail git notacommand

git: 'notacommand' is not a git command. See 'git --help'.
ok 88 - test_must_fail on a failing git command

expecting success of 0000.89 'test_must_fail on a failing git command with env': 
	test_must_fail env var1=a var2=b git notacommand

git: 'notacommand' is not a git command. See 'git --help'.
ok 89 - test_must_fail on a failing git command with env

expecting success of 0000.90 'test_must_fail rejects a non-git command': 
	! test_must_fail grep ^$ notafile 2>err &&
	grep -F "test_must_fail: only 'git' is allowed" err

test_must_fail: only 'git' is allowed: grep ^$ notafile
ok 90 - test_must_fail rejects a non-git command

expecting success of 0000.91 'test_must_fail rejects a non-git command with env': 
	! test_must_fail env var1=a var2=b grep ^$ notafile 2>err &&
	grep -F "test_must_fail: only 'git' is allowed" err

test_must_fail: only 'git' is allowed: env var1=a var2=b grep ^$ notafile
ok 91 - test_must_fail rejects a non-git command with env

# passed all 91 test(s)
1..91
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0029-core-unsetenvvars.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0029-core-unsetenvvars/.git/
1..0 # SKIP skipping Windows-specific tests
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0028-working-tree-encoding.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0028-working-tree-encoding/.git/
expecting success of 0028.1 'setup test files': 
	git config core.eol lf &&

	text="hallo there!\ncan you read me?" &&
	echo "*.utf16 text working-tree-encoding=utf-16" >.gitattributes &&
	echo "*.utf16lebom text working-tree-encoding=UTF-16LE-BOM" >>.gitattributes &&
	printf "$text" >test.utf8.raw &&
	printf "$text" | write_utf16 >test.utf16.raw &&
	printf "$text" | write_utf32 >test.utf32.raw &&
	printf "\377\376"                         >test.utf16lebom.raw &&
	printf "$text" | iconv -f UTF-8 -t UTF-16LE >>test.utf16lebom.raw &&

	# Line ending tests
	printf "one\ntwo\nthree\n" >lf.utf8.raw &&
	printf "one\r\ntwo\r\nthree\r\n" >crlf.utf8.raw &&

	# BOM tests
	printf "\0a\0b\0c"                         >nobom.utf16be.raw &&
	printf "a\0b\0c\0"                         >nobom.utf16le.raw &&
	printf "\376\377\0a\0b\0c"                 >bebom.utf16be.raw &&
	printf "\377\376a\0b\0c\0"                 >lebom.utf16le.raw &&
	printf "\0\0\0a\0\0\0b\0\0\0c"             >nobom.utf32be.raw &&
	printf "a\0\0\0b\0\0\0c\0\0\0"             >nobom.utf32le.raw &&
	printf "\0\0\376\377\0\0\0a\0\0\0b\0\0\0c" >bebom.utf32be.raw &&
	printf "\377\376\0\0a\0\0\0b\0\0\0c\0\0\0" >lebom.utf32le.raw &&

	# Add only UTF-16 file, we will add the UTF-32 file later
	cp test.utf16.raw test.utf16 &&
	cp test.utf32.raw test.utf32 &&
	cp test.utf16lebom.raw test.utf16lebom &&
	git add .gitattributes test.utf16 test.utf16lebom &&
	git commit -m initial

checking prerequisite: NO_UTF16_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6

)
prerequisite NO_UTF16_BOM not satisfied
checking prerequisite: NO_UTF32_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-32 | wc -c) = 12

)
prerequisite NO_UTF32_BOM not satisfied
source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

[main (root-commit) dfb2bb8] initial
 Author: A U Thor <author@example.com>
 3 files changed, 6 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 test.utf16
 create mode 100644 test.utf16lebom
ok 1 - setup test files

expecting success of 0028.2 'ensure UTF-8 is stored in Git': 
	test_when_finished "rm -f test.utf16.git" &&

	git cat-file -p :test.utf16 >test.utf16.git &&
	test_cmp_bin test.utf8.raw test.utf16.git

ok 2 - ensure UTF-8 is stored in Git

expecting success of 0028.3 're-encode to UTF-16 on checkout': 
	test_when_finished "rm -f test.utf16.raw" &&

	rm test.utf16 &&
	git checkout test.utf16 &&
	test_cmp_bin test.utf16.raw test.utf16

Updated 1 path from the index
source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

ok 3 - re-encode to UTF-16 on checkout

expecting success of 0028.4 're-encode to UTF-16-LE-BOM on checkout': 
	rm test.utf16lebom &&
	git checkout test.utf16lebom &&
	test_cmp_bin test.utf16lebom.raw test.utf16lebom

Updated 1 path from the index
source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

ok 4 - re-encode to UTF-16-LE-BOM on checkout

expecting success of 0028.5 'check $GIT_DIR/info/attributes support': 
	test_when_finished "rm -f test.utf32.git" &&
	test_when_finished "git reset --hard HEAD" &&

	mkdir .git/info &&
	echo "*.utf32 text working-tree-encoding=utf-32" >.git/info/attributes &&
	git add test.utf32 &&

	git cat-file -p :test.utf32 >test.utf32.git &&
	test_cmp_bin test.utf8.raw test.utf32.git

source (test.utf32, considered utf-32):
|  0: ff   |  1: fe   |  2:  0   |  3:  0   |  4: 68 h |  5:  0   |  6:  0   |  7:  0  
|  8: 61 a |  9:  0   | 10:  0   | 11:  0   | 12: 6c l | 13:  0   | 14:  0   | 15:  0  
| 16: 6c l | 17:  0   | 18:  0   | 19:  0   | 20: 6f o | 21:  0   | 22:  0   | 23:  0  
| 24: 20   | 25:  0   | 26:  0   | 27:  0   | 28: 74 t | 29:  0   | 30:  0   | 31:  0  
| 32: 68 h | 33:  0   | 34:  0   | 35:  0   | 36: 65 e | 37:  0   | 38:  0   | 39:  0  
| 40: 72 r | 41:  0   | 42:  0   | 43:  0   | 44: 65 e | 45:  0   | 46:  0   | 47:  0  
| 48: 21 ! | 49:  0   | 50:  0   | 51:  0   | 52:  a   | 53:  0   | 54:  0   | 55:  0  
| 56: 63 c | 57:  0   | 58:  0   | 59:  0   | 60: 61 a | 61:  0   | 62:  0   | 63:  0  
| 64: 6e n | 65:  0   | 66:  0   | 67:  0   | 68: 20   | 69:  0   | 70:  0   | 71:  0  
| 72: 79 y | 73:  0   | 74:  0   | 75:  0   | 76: 6f o | 77:  0   | 78:  0   | 79:  0  
| 80: 75 u | 81:  0   | 82:  0   | 83:  0   | 84: 20   | 85:  0   | 86:  0   | 87:  0  
| 88: 72 r | 89:  0   | 90:  0   | 91:  0   | 92: 65 e | 93:  0   | 94:  0   | 95:  0  
| 96: 61 a | 97:  0   | 98:  0   | 99:  0   | 100: 64 d | 101:  0   | 102:  0   | 103:  0  
| 104: 20   | 105:  0   | 106:  0   | 107:  0   | 108: 6d m | 109:  0   | 110:  0   | 111:  0  
| 112: 65 e | 113:  0   | 114:  0   | 115:  0   | 116: 3f ? | 117:  0   | 118:  0   | 119:  0  

destination (test.utf32, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

HEAD is now at dfb2bb8 initial
ok 5 - check $GIT_DIR/info/attributes support

expecting success of 0028.6 'check prohibited UTF-16 BOM': 
		test_when_finished "git reset --hard HEAD" &&

		echo "*.utf${i}be text working-tree-encoding=utf-${i}be" >>.gitattributes &&
		echo "*.utf${i}le text working-tree-encoding=utf-${i}LE" >>.gitattributes &&

		# Here we add a UTF-16 (resp. UTF-32) files with BOM (big/little-endian)
		# but we tell Git to treat it as UTF-16BE/UTF-16LE (resp. UTF-32).
		# In these cases the BOM is prohibited.
		cp bebom.utf${i}be.raw bebom.utf${i}be &&
		test_must_fail git add bebom.utf${i}be 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}be" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp lebom.utf${i}le.raw lebom.utf${i}be &&
		test_must_fail git add lebom.utf${i}be 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}be" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp bebom.utf${i}be.raw bebom.utf${i}le &&
		test_must_fail git add bebom.utf${i}le 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}LE" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp lebom.utf${i}le.raw lebom.utf${i}le &&
		test_must_fail git add lebom.utf${i}le 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}LE" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out
	
fatal: BOM is prohibited in 'bebom.utf16be' if encoded as utf-16be
hint: The file 'bebom.utf16be' contains a byte order mark (BOM). Please use UTF-16 as working-tree-encoding.
fatal: BOM is prohibited in 'lebom.utf16be' if encoded as utf-16be
hint: The file 'lebom.utf16be' contains a byte order mark (BOM). Please use UTF-16 as working-tree-encoding.
fatal: BOM is prohibited in 'bebom.utf16le' if encoded as utf-16LE
hint: The file 'bebom.utf16le' contains a byte order mark (BOM). Please use UTF-16 as working-tree-encoding.
fatal: BOM is prohibited in 'lebom.utf16le' if encoded as utf-16LE
hint: The file 'lebom.utf16le' contains a byte order mark (BOM). Please use UTF-16 as working-tree-encoding.
source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

source (test.utf16lebom, considered UTF-16LE-BOM):
|  0: ff   |  1: fe   |  2: 68 h |  3:  0   |  4: 61 a |  5:  0   |  6: 6c l |  7:  0  
|  8: 6c l |  9:  0   | 10: 6f o | 11:  0   | 12: 20   | 13:  0   | 14: 74 t | 15:  0  
| 16: 68 h | 17:  0   | 18: 65 e | 19:  0   | 20: 72 r | 21:  0   | 22: 65 e | 23:  0  
| 24: 21 ! | 25:  0   | 26:  a   | 27:  0   | 28: 63 c | 29:  0   | 30: 61 a | 31:  0  
| 32: 6e n | 33:  0   | 34: 20   | 35:  0   | 36: 79 y | 37:  0   | 38: 6f o | 39:  0  
| 40: 75 u | 41:  0   | 42: 20   | 43:  0   | 44: 72 r | 45:  0   | 46: 65 e | 47:  0  
| 48: 61 a | 49:  0   | 50: 64 d | 51:  0   | 52: 20   | 53:  0   | 54: 6d m | 55:  0  
| 56: 65 e | 57:  0   | 58: 3f ? | 59:  0  

destination (test.utf16lebom, considered UTF-8):
|  0: 68 h |  1: 61 a |  2: 6c l |  3: 6c l |  4: 6f o |  5: 20   |  6: 74 t |  7: 68 h
|  8: 65 e |  9: 72 r | 10: 65 e | 11: 21 ! | 12:  a   | 13: 63 c | 14: 61 a | 15: 6e n
| 16: 20   | 17: 79 y | 18: 6f o | 19: 75 u | 20: 20   | 21: 72 r | 22: 65 e | 23: 61 a
| 24: 64 d | 25: 20   | 26: 6d m | 27: 65 e | 28: 3f ?

HEAD is now at dfb2bb8 initial
ok 6 - check prohibited UTF-16 BOM

expecting success of 0028.7 'check required UTF-16 BOM': 
		test_when_finished "git reset --hard HEAD" &&

		echo "*.utf${i} text working-tree-encoding=utf-${i}" >>.gitattributes &&

		cp nobom.utf${i}be.raw nobom.utf${i} &&
		test_must_fail git add nobom.utf${i} 2>err.out &&
		test_i18ngrep "fatal: BOM is required .* utf-${i}" err.out &&
		test_i18ngrep "use UTF-${i}BE or UTF-${i}LE" err.out &&

		cp nobom.utf${i}le.raw nobom.utf${i} &&
		test_must_fail git add nobom.utf${i} 2>err.out &&
		test_i18ngrep "fatal: BOM is required .* utf-${i}" err.out &&
		test_i18ngrep "use UTF-${i}BE or UTF-${i}LE" err.out
	
fatal: BOM is required in 'nobom.utf16' if encoded as utf-16
hint: The file 'nobom.utf16' is missing a byte order mark (BOM). Please use UTF-16BE or UTF-16LE (depending on the byte order) as working-tree-encoding.
fatal: BOM is required in 'nobom.utf16' if encoded as utf-16
hint: The file 'nobom.utf16' is missing a byte order mark (BOM). Please use UTF-16BE or UTF-16LE (depending on the byte order) as working-tree-encoding.
HEAD is now at dfb2bb8 initial
ok 7 - check required UTF-16 BOM

expecting success of 0028.8 'eol conversion for UTF-16 encoded files on checkout': 
		test_when_finished "rm -f crlf.utf${i}.raw lf.utf${i}.raw" &&
		test_when_finished "git reset --hard HEAD^" &&

		cat lf.utf8.raw | write_utf${i} >lf.utf${i}.raw &&
		cat crlf.utf8.raw | write_utf${i} >crlf.utf${i}.raw &&
		cp crlf.utf${i}.raw eol.utf${i} &&

		cat >expectIndexLF <<-EOF &&
			i/lf    w/-text attr/text             	eol.utf${i}
		EOF

		git add eol.utf${i} &&
		git commit -m eol &&

		# UTF-${i} with CRLF (Windows line endings)
		rm eol.utf${i} &&
		git -c core.eol=crlf checkout eol.utf${i} &&
		test_cmp_bin crlf.utf${i}.raw eol.utf${i} &&

		# Although the file has CRLF in the working tree,
		# ensure LF in the index
		git ls-files --eol eol.utf${i} >actual &&
		test_cmp expectIndexLF actual &&

		# UTF-${i} with LF (Unix line endings)
		rm eol.utf${i} &&
		git -c core.eol=lf checkout eol.utf${i} &&
		test_cmp_bin lf.utf${i}.raw eol.utf${i} &&

		# The file LF in the working tree, ensure LF in the index
		git ls-files --eol eol.utf${i} >actual &&
		test_cmp expectIndexLF actual
	
checking prerequisite: NO_UTF16_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6

)
prerequisite NO_UTF16_BOM not satisfied
checking prerequisite: NO_UTF16_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6

)
prerequisite NO_UTF16_BOM not satisfied
source (eol.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 6f o |  3:  0   |  4: 6e n |  5:  0   |  6: 65 e |  7:  0  
|  8:  d   |  9:  0   | 10:  a   | 11:  0   | 12: 74 t | 13:  0   | 14: 77 w | 15:  0  
| 16: 6f o | 17:  0   | 18:  d   | 19:  0   | 20:  a   | 21:  0   | 22: 74 t | 23:  0  
| 24: 68 h | 25:  0   | 26: 72 r | 27:  0   | 28: 65 e | 29:  0   | 30: 65 e | 31:  0  
| 32:  d   | 33:  0   | 34:  a   | 35:  0  

destination (eol.utf16, considered UTF-8):
|  0: 6f o |  1: 6e n |  2: 65 e |  3:  d   |  4:  a   |  5: 74 t |  6: 77 w |  7: 6f o
|  8:  d   |  9:  a   | 10: 74 t | 11: 68 h | 12: 72 r | 13: 65 e | 14: 65 e | 15:  d  
| 16:  a  

warning: in the working copy of 'eol.utf16', CRLF will be replaced by LF the next time Git touches it
source (eol.utf16, considered utf-16):
|  0: ff   |  1: fe   |  2: 6f o |  3:  0   |  4: 6e n |  5:  0   |  6: 65 e |  7:  0  
|  8:  d   |  9:  0   | 10:  a   | 11:  0   | 12: 74 t | 13:  0   | 14: 77 w | 15:  0  
| 16: 6f o | 17:  0   | 18:  d   | 19:  0   | 20:  a   | 21:  0   | 22: 74 t | 23:  0  
| 24: 68 h | 25:  0   | 26: 72 r | 27:  0   | 28: 65 e | 29:  0   | 30: 65 e | 31:  0  
| 32:  d   | 33:  0   | 34:  a   | 35:  0  

destination (eol.utf16, considered UTF-8):
|  0: 6f o |  1: 6e n |  2: 65 e |  3:  d   |  4:  a   |  5: 74 t |  6: 77 w |  7: 6f o
|  8:  d   |  9:  a   | 10: 74 t | 11: 68 h | 12: 72 r | 13: 65 e | 14: 65 e | 15:  d  
| 16:  a  

[main 85a4f33] eol
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 eol.utf16
Updated 1 path from the index
Updated 1 path from the index
HEAD is now at dfb2bb8 initial
ok 8 - eol conversion for UTF-16 encoded files on checkout

expecting success of 0028.9 'check prohibited UTF-32 BOM': 
		test_when_finished "git reset --hard HEAD" &&

		echo "*.utf${i}be text working-tree-encoding=utf-${i}be" >>.gitattributes &&
		echo "*.utf${i}le text working-tree-encoding=utf-${i}LE" >>.gitattributes &&

		# Here we add a UTF-16 (resp. UTF-32) files with BOM (big/little-endian)
		# but we tell Git to treat it as UTF-16BE/UTF-16LE (resp. UTF-32).
		# In these cases the BOM is prohibited.
		cp bebom.utf${i}be.raw bebom.utf${i}be &&
		test_must_fail git add bebom.utf${i}be 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}be" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp lebom.utf${i}le.raw lebom.utf${i}be &&
		test_must_fail git add lebom.utf${i}be 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}be" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp bebom.utf${i}be.raw bebom.utf${i}le &&
		test_must_fail git add bebom.utf${i}le 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}LE" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out &&

		cp lebom.utf${i}le.raw lebom.utf${i}le &&
		test_must_fail git add lebom.utf${i}le 2>err.out &&
		test_i18ngrep "fatal: BOM is prohibited .* utf-${i}LE" err.out &&
		test_i18ngrep "use UTF-${i} as working-tree-encoding" err.out
	
fatal: BOM is prohibited in 'bebom.utf32be' if encoded as utf-32be
hint: The file 'bebom.utf32be' contains a byte order mark (BOM). Please use UTF-32 as working-tree-encoding.
fatal: BOM is prohibited in 'lebom.utf32be' if encoded as utf-32be
hint: The file 'lebom.utf32be' contains a byte order mark (BOM). Please use UTF-32 as working-tree-encoding.
fatal: BOM is prohibited in 'bebom.utf32le' if encoded as utf-32LE
hint: The file 'bebom.utf32le' contains a byte order mark (BOM). Please use UTF-32 as working-tree-encoding.
fatal: BOM is prohibited in 'lebom.utf32le' if encoded as utf-32LE
hint: The file 'lebom.utf32le' contains a byte order mark (BOM). Please use UTF-32 as working-tree-encoding.
HEAD is now at dfb2bb8 initial
ok 9 - check prohibited UTF-32 BOM

expecting success of 0028.10 'check required UTF-32 BOM': 
		test_when_finished "git reset --hard HEAD" &&

		echo "*.utf${i} text working-tree-encoding=utf-${i}" >>.gitattributes &&

		cp nobom.utf${i}be.raw nobom.utf${i} &&
		test_must_fail git add nobom.utf${i} 2>err.out &&
		test_i18ngrep "fatal: BOM is required .* utf-${i}" err.out &&
		test_i18ngrep "use UTF-${i}BE or UTF-${i}LE" err.out &&

		cp nobom.utf${i}le.raw nobom.utf${i} &&
		test_must_fail git add nobom.utf${i} 2>err.out &&
		test_i18ngrep "fatal: BOM is required .* utf-${i}" err.out &&
		test_i18ngrep "use UTF-${i}BE or UTF-${i}LE" err.out
	
fatal: BOM is required in 'nobom.utf32' if encoded as utf-32
hint: The file 'nobom.utf32' is missing a byte order mark (BOM). Please use UTF-32BE or UTF-32LE (depending on the byte order) as working-tree-encoding.
fatal: BOM is required in 'nobom.utf32' if encoded as utf-32
hint: The file 'nobom.utf32' is missing a byte order mark (BOM). Please use UTF-32BE or UTF-32LE (depending on the byte order) as working-tree-encoding.
HEAD is now at dfb2bb8 initial
ok 10 - check required UTF-32 BOM

expecting success of 0028.11 'eol conversion for UTF-32 encoded files on checkout': 
		test_when_finished "rm -f crlf.utf${i}.raw lf.utf${i}.raw" &&
		test_when_finished "git reset --hard HEAD^" &&

		cat lf.utf8.raw | write_utf${i} >lf.utf${i}.raw &&
		cat crlf.utf8.raw | write_utf${i} >crlf.utf${i}.raw &&
		cp crlf.utf${i}.raw eol.utf${i} &&

		cat >expectIndexLF <<-EOF &&
			i/lf    w/-text attr/text             	eol.utf${i}
		EOF

		git add eol.utf${i} &&
		git commit -m eol &&

		# UTF-${i} with CRLF (Windows line endings)
		rm eol.utf${i} &&
		git -c core.eol=crlf checkout eol.utf${i} &&
		test_cmp_bin crlf.utf${i}.raw eol.utf${i} &&

		# Although the file has CRLF in the working tree,
		# ensure LF in the index
		git ls-files --eol eol.utf${i} >actual &&
		test_cmp expectIndexLF actual &&

		# UTF-${i} with LF (Unix line endings)
		rm eol.utf${i} &&
		git -c core.eol=lf checkout eol.utf${i} &&
		test_cmp_bin lf.utf${i}.raw eol.utf${i} &&

		# The file LF in the working tree, ensure LF in the index
		git ls-files --eol eol.utf${i} >actual &&
		test_cmp expectIndexLF actual
	
checking prerequisite: NO_UTF32_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-32 | wc -c) = 12

)
prerequisite NO_UTF32_BOM not satisfied
checking prerequisite: NO_UTF32_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF32_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-32 | wc -c) = 12

)
prerequisite NO_UTF32_BOM not satisfied
source (eol.utf32, considered utf-32):
|  0: ff   |  1: fe   |  2:  0   |  3:  0   |  4: 6f o |  5:  0   |  6:  0   |  7:  0  
|  8: 6e n |  9:  0   | 10:  0   | 11:  0   | 12: 65 e | 13:  0   | 14:  0   | 15:  0  
| 16:  d   | 17:  0   | 18:  0   | 19:  0   | 20:  a   | 21:  0   | 22:  0   | 23:  0  
| 24: 74 t | 25:  0   | 26:  0   | 27:  0   | 28: 77 w | 29:  0   | 30:  0   | 31:  0  
| 32: 6f o | 33:  0   | 34:  0   | 35:  0   | 36:  d   | 37:  0   | 38:  0   | 39:  0  
| 40:  a   | 41:  0   | 42:  0   | 43:  0   | 44: 74 t | 45:  0   | 46:  0   | 47:  0  
| 48: 68 h | 49:  0   | 50:  0   | 51:  0   | 52: 72 r | 53:  0   | 54:  0   | 55:  0  
| 56: 65 e | 57:  0   | 58:  0   | 59:  0   | 60: 65 e | 61:  0   | 62:  0   | 63:  0  
| 64:  d   | 65:  0   | 66:  0   | 67:  0   | 68:  a   | 69:  0   | 70:  0   | 71:  0  

destination (eol.utf32, considered UTF-8):
|  0: 6f o |  1: 6e n |  2: 65 e |  3:  d   |  4:  a   |  5: 74 t |  6: 77 w |  7: 6f o
|  8:  d   |  9:  a   | 10: 74 t | 11: 68 h | 12: 72 r | 13: 65 e | 14: 65 e | 15:  d  
| 16:  a  

warning: in the working copy of 'eol.utf32', CRLF will be replaced by LF the next time Git touches it
source (eol.utf32, considered utf-32):
|  0: ff   |  1: fe   |  2:  0   |  3:  0   |  4: 6f o |  5:  0   |  6:  0   |  7:  0  
|  8: 6e n |  9:  0   | 10:  0   | 11:  0   | 12: 65 e | 13:  0   | 14:  0   | 15:  0  
| 16:  d   | 17:  0   | 18:  0   | 19:  0   | 20:  a   | 21:  0   | 22:  0   | 23:  0  
| 24: 74 t | 25:  0   | 26:  0   | 27:  0   | 28: 77 w | 29:  0   | 30:  0   | 31:  0  
| 32: 6f o | 33:  0   | 34:  0   | 35:  0   | 36:  d   | 37:  0   | 38:  0   | 39:  0  
| 40:  a   | 41:  0   | 42:  0   | 43:  0   | 44: 74 t | 45:  0   | 46:  0   | 47:  0  
| 48: 68 h | 49:  0   | 50:  0   | 51:  0   | 52: 72 r | 53:  0   | 54:  0   | 55:  0  
| 56: 65 e | 57:  0   | 58:  0   | 59:  0   | 60: 65 e | 61:  0   | 62:  0   | 63:  0  
| 64:  d   | 65:  0   | 66:  0   | 67:  0   | 68:  a   | 69:  0   | 70:  0   | 71:  0  

destination (eol.utf32, considered UTF-8):
|  0: 6f o |  1: 6e n |  2: 65 e |  3:  d   |  4:  a   |  5: 74 t |  6: 77 w |  7: 6f o
|  8:  d   |  9:  a   | 10: 74 t | 11: 68 h | 12: 72 r | 13: 65 e | 14: 65 e | 15:  d  
| 16:  a  

[main 674dc3f] eol
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 eol.utf32
Updated 1 path from the index
Updated 1 path from the index
HEAD is now at dfb2bb8 initial
ok 11 - eol conversion for UTF-32 encoded files on checkout

expecting success of 0028.12 'check unsupported encodings': 
	test_when_finished "git reset --hard HEAD" &&

	echo "*.set text working-tree-encoding" >.gitattributes &&
	printf "set" >t.set &&
	test_must_fail git add t.set 2>err.out &&
	test_i18ngrep "true/false are no valid working-tree-encodings" err.out &&

	echo "*.unset text -working-tree-encoding" >.gitattributes &&
	printf "unset" >t.unset &&
	git add t.unset &&

	echo "*.empty text working-tree-encoding=" >.gitattributes &&
	printf "empty" >t.empty &&
	git add t.empty &&

	echo "*.garbage text working-tree-encoding=garbage" >.gitattributes &&
	printf "garbage" >t.garbage &&
	test_must_fail git add t.garbage 2>err.out &&
	test_i18ngrep "failed to encode" err.out

fatal: true/false are no valid working-tree-encodings
fatal: failed to encode 't.garbage' from garbage to UTF-8
HEAD is now at dfb2bb8 initial
ok 12 - check unsupported encodings

expecting success of 0028.13 'error if encoding round trip is not the same during refresh': 
	BEFORE_STATE=$(git rev-parse HEAD) &&
	test_when_finished "git reset --hard $BEFORE_STATE" &&

	# Add and commit a UTF-16 file but skip the "working-tree-encoding"
	# filter. Consequently, the in-repo representation is UTF-16 and not
	# UTF-8. This simulates a Git version that has no working tree encoding
	# support.
	echo "*.utf16le text working-tree-encoding=utf-16le" >.gitattributes &&
	echo "hallo" >nonsense.utf16le &&
	TEST_HASH=$(git hash-object --no-filters -w nonsense.utf16le) &&
	git update-index --add --cacheinfo 100644 $TEST_HASH nonsense.utf16le &&
	COMMIT=$(git commit-tree -p $(git rev-parse HEAD) -m "plain commit" $(git write-tree)) &&
	git update-ref refs/heads/main $COMMIT &&

	test_must_fail git checkout HEAD^ 2>err.out &&
	test_i18ngrep "error: .* overwritten by checkout:" err.out

error: Your local changes to the following files would be overwritten by checkout:
HEAD is now at dfb2bb8 initial
ok 13 - error if encoding round trip is not the same during refresh

expecting success of 0028.14 'error if encoding garbage is already in Git': 
	BEFORE_STATE=$(git rev-parse HEAD) &&
	test_when_finished "git reset --hard $BEFORE_STATE" &&

	# Skip the UTF-16 filter for the added file
	# This simulates a Git version that has no checkoutEncoding support
	cp nobom.utf16be.raw nonsense.utf16 &&
	TEST_HASH=$(git hash-object --no-filters -w nonsense.utf16) &&
	git update-index --add --cacheinfo 100644 $TEST_HASH nonsense.utf16 &&
	COMMIT=$(git commit-tree -p $(git rev-parse HEAD) -m "plain commit" $(git write-tree)) &&
	git update-ref refs/heads/main $COMMIT &&

	git diff 2>err.out &&
	test_i18ngrep "error: BOM is required" err.out

error: BOM is required in 'nonsense.utf16' if encoded as utf-16
error: BOM is required in 'nonsense.utf16' if encoded as utf-16
HEAD is now at dfb2bb8 initial
ok 14 - error if encoding garbage is already in Git

checking prerequisite: ICONV_SHIFT_JIS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ICONV_SHIFT_JIS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ICONV_SHIFT_JIS" &&
	iconv -f UTF-8 -t SHIFT-JIS </dev/null

)
prerequisite ICONV_SHIFT_JIS ok
expecting success of 0028.15 'check roundtrip encoding': 
	test_when_finished "rm -f roundtrip.shift roundtrip.utf16" &&
	test_when_finished "git reset --hard HEAD" &&

	text="hallo there!\nroundtrip test here!" &&
	printf "$text" | iconv -f UTF-8 -t SHIFT-JIS >roundtrip.shift &&
	printf "$text" | write_utf16 >roundtrip.utf16 &&
	echo "*.shift text working-tree-encoding=SHIFT-JIS" >>.gitattributes &&

	# SHIFT-JIS encoded files are round-trip checked by default...
	GIT_TRACE=1 git add .gitattributes roundtrip.shift 2>&1 |
		grep "Checking roundtrip encoding for SHIFT-JIS" &&
	git reset &&

	# ... unless we overwrite the Git config!
	! GIT_TRACE=1 git -c core.checkRoundtripEncoding=garbage \
		add .gitattributes roundtrip.shift 2>&1 |
		grep "Checking roundtrip encoding for SHIFT-JIS" &&
	git reset &&

	# UTF-16 encoded files should not be round-trip checked by default...
	! GIT_TRACE=1 git add roundtrip.utf16 2>&1 |
		grep "Checking roundtrip encoding for UTF-16" &&
	git reset &&

	# ... unless we tell Git to check it!
	GIT_TRACE=1 git -c core.checkRoundtripEncoding="UTF-16, UTF-32" \
		add roundtrip.utf16 2>&1 |
		grep "Checking roundtrip encoding for utf-16" &&
	git reset &&

	# ... unless we tell Git to check it!
	# (here we also check that the casing of the encoding is irrelevant)
	GIT_TRACE=1 git -c core.checkRoundtripEncoding="UTF-32, utf-16" \
		add roundtrip.utf16 2>&1 |
		grep "Checking roundtrip encoding for utf-16" &&
	git reset

checking prerequisite: NO_UTF16_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6

)
prerequisite NO_UTF16_BOM not satisfied
Checking roundtrip encoding for SHIFT-JIS...
Unstaged changes after reset:
M	.gitattributes
Unstaged changes after reset:
M	.gitattributes
Unstaged changes after reset:
M	.gitattributes
Checking roundtrip encoding for utf-16...
Unstaged changes after reset:
M	.gitattributes
Checking roundtrip encoding for utf-16...
Unstaged changes after reset:
M	.gitattributes
HEAD is now at dfb2bb8 initial
ok 15 - check roundtrip encoding

expecting success of 0028.16 'Commit UTF-8, checkout UTF-8': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main 7887505] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-8
ok 16 - Commit UTF-8, checkout UTF-8

expecting success of 0028.17 'Commit UTF-8, checkout UTF-16LE': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main dd0bb11] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-16LE
ok 17 - Commit UTF-8, checkout UTF-16LE

expecting success of 0028.18 'Commit UTF-8, checkout UTF-16BE': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main ccf08f2] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-16BE
ok 18 - Commit UTF-8, checkout UTF-16BE

expecting success of 0028.19 'Commit UTF-8, checkout UTF-16LE-BOM': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main bb82fa0] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-16LE-BOM
ok 19 - Commit UTF-8, checkout UTF-16LE-BOM

expecting success of 0028.20 'Commit UTF-8, checkout UTF-16BE-BOM': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main 434b0e2] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-16BE-BOM
ok 20 - Commit UTF-8, checkout UTF-16BE-BOM

expecting success of 0028.21 'Commit UTF-8, checkout UTF-32LE': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main 4ebb4c9] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-32LE
ok 21 - Commit UTF-8, checkout UTF-32LE

expecting success of 0028.22 'Commit UTF-8, checkout UTF-32BE': 
		test_when_finished "git checkout HEAD -- .gitattributes" &&

		test_ext="commit_utf8_checkout_$encoding" &&
		test_file="test.$test_ext" &&

		# Commit as UTF-8
		echo "*.$test_ext text working-tree-encoding=UTF-8" >.gitattributes &&
		printf "$orig_string" >$test_file &&
		git add $test_file &&
		git commit -m "Test data" &&

		# Checkout in tested encoding
		rm $test_file &&
		echo "*.$test_ext text working-tree-encoding=$encoding" >.gitattributes &&
		git checkout HEAD -- $test_file &&

		# Test
		printf $expect_bytes >$test_file.raw &&
		test_cmp_bin $test_file.raw $test_file
	
[main bfde51e] Test data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.commit_utf8_checkout_UTF-32BE
ok 22 - Commit UTF-8, checkout UTF-32BE

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0032-reftable-unittest.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0032-reftable-unittest/.git/
expecting success of 0032.1 'unittests': 
	TMPDIR=$(pwd) && export TMPDIR &&
	test-tool reftable

running test_common_prefix
running test_parse_names_normal
running test_parse_names_drop_empty
running test_binsearch
running test_names_length
running test_reftable_log_record_equal
running test_reftable_log_record_roundtrip
running test_reftable_ref_record_roundtrip
running test_varint_roundtrip
running test_key_roundtrip
running test_common_prefix
running test_reftable_obj_record_roundtrip
running test_reftable_index_record_roundtrip
running test_u24_roundtrip
running test_block_read_write
running test_tree
running test_pq
running test_log_zlib_corruption
running test_corrupt_table
running test_corrupt_table_empty
running test_log_write_read
running test_write_key_order
running test_table_read_write_seek_linear_sha256
running test_log_buffer_size
running test_table_write_small_table
running test_buffer
running test_table_read_api
running test_table_read_write_sequential
running test_table_read_write_seek_linear
running test_table_read_write_seek_index
running test_table_refs_for_no_index
running test_table_refs_for_obj_index
running test_write_empty_key
running test_write_empty_table
running test_log_overflow
running test_write_object_id_length
running test_write_object_id_min_length
running test_merged_logs
running test_merged_between
running test_merged
running test_default_write_opts
running test_empty_add
running test_log2
running test_names_equal
running test_parse_names
running test_read_file
running test_reflog_expire
running test_reftable_stack_add
running test_reftable_stack_add_one
running test_reftable_stack_auto_compaction
running test_reftable_stack_compaction_concurrent
running test_reftable_stack_compaction_concurrent_clean
running test_reftable_stack_hash_id
running test_reftable_stack_lock_failure
running test_reftable_stack_log_normalize
running test_reftable_stack_tombstone
running test_reftable_stack_transaction_api
running test_reftable_stack_update_index_check
running test_reftable_stack_uptodate
running test_reftable_stack_validate_refname
running test_sizes_to_segments
running test_sizes_to_segments_all_equal
running test_sizes_to_segments_empty
running test_suggest_compaction_segment
running test_suggest_compaction_segment_nothing
running test_conflict
testing print coverage:

'g': log{refs/heads/master(42) han-wen <hanwen@google.com> 1577123507 0100
0202020202020202020202020202020202020202 => 0101010101010101010101010101010101010101

test
}
testing print coverage:

'g': log{refs/heads/master(22) delete
testing print coverage:

'g': log{branch(33)  <> 0 0000
0404040404040404040404040404040404040404 => 0303030303030303030303030303030303030303


}
testing print coverage:

'r': ref{refs/heads/master(0) delete}
testing print coverage:

'r': ref{refs/heads/master(0) val 1 0100000000000000000000000000000000000000}
testing print coverage:

'r': ref{refs/heads/master(0) val 2 0100000000000000000000000000000000000000(T 0201000000000000000000000000000000000000)}
testing print coverage:

'r': ref{refs/heads/master(0) => target}
testing print coverage:

'o': prefix 0102030400 (len 5), offsets [1 2 3 ]
testing print coverage:

'o': prefix 0102030400 (len 5), offsets [1 2 3 4 500 600 700 800 9000 ]
testing print coverage:

'o': prefix 0102030400 (len 5), offsets []
testing print coverage:

'i': "refs/heads/master" 42
testing print functionality:
ref{HEAD(1) => master}
ok 1 - unittests

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0030-stripspace.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0030-stripspace/.git/
expecting success of 0030.1 'long lines without spaces should be unchanged': 
    echo "$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt$ttt$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual

ok 1 - long lines without spaces should be unchanged

expecting success of 0030.2 'lines with spaces at the beginning should be unchanged': 
    echo "$sss$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$sss$sss$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$sss$sss$sss$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual

ok 2 - lines with spaces at the beginning should be unchanged

expecting success of 0030.3 'lines with intermediate spaces should be unchanged': 
    echo "$ttt$sss$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual &&

    echo "$ttt$sss$sss$ttt" >expect &&
    git stripspace <expect >actual &&
    test_cmp expect actual

ok 3 - lines with intermediate spaces should be unchanged

expecting success of 0030.4 'consecutive blank lines should be unified': 
    printf "$ttt\n\n$ttt\n" > expect &&
    printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n\n$ttt\n" > expect &&
    printf "$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
    printf "$ttt$ttt$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt\n" > expect &&
    printf "$ttt\n\n\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt$ttt\n" > expect &&
    printf "$ttt\n\n\n\n\n$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
    printf "$ttt\n\n\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt\n" > expect &&
    printf "$ttt\n\t\n \n\n  \t\t\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n\n$ttt\n" > expect &&
    printf "$ttt$ttt\n\t\n \n\n  \t\t\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt\n\n$ttt\n" > expect &&
    printf "$ttt$ttt$ttt\n\t\n \n\n  \t\t\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt\n" > expect &&
    printf "$ttt\n\t\n \n\n  \t\t\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt$ttt\n" > expect &&
    printf "$ttt\n\t\n \n\n  \t\t\n$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$ttt$ttt$ttt\n" > expect &&
    printf "$ttt\n\t\n \n\n  \t\t\n$ttt$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual

ok 4 - consecutive blank lines should be unified

expecting success of 0030.5 'only consecutive blank lines should be completely removed': 

    printf "\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "\n\n\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss\n$sss\n$sss\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss$sss\n$sss\n\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "\n$sss\n$sss$sss\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss$sss$sss$sss\n\n\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "\n$sss$sss$sss$sss\n\n" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "\n\n$sss$sss$sss$sss\n" | git stripspace >actual &&
    test_must_be_empty actual

ok 5 - only consecutive blank lines should be completely removed

expecting success of 0030.6 'consecutive blank lines at the beginning should be removed': 
    printf "$ttt\n" > expect &&
    printf "\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" > expect &&
    printf "\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n" > expect &&
    printf "\n\n\n$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt\n" > expect &&
    printf "\n\n\n$ttt$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt$ttt\n" > expect &&
    printf "\n\n\n$ttt$ttt$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" > expect &&

    printf "$sss\n$sss\n$sss\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "\n$sss\n$sss$sss\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$sss$sss\n$sss\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$sss$sss$sss\n\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "\n$sss$sss$sss\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "\n\n$sss$sss$sss\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual

ok 6 - consecutive blank lines at the beginning should be removed

expecting success of 0030.7 'consecutive blank lines at the end should be removed': 
    printf "$ttt\n" > expect &&
    printf "$ttt\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" > expect &&
    printf "$ttt\n\n\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n" > expect &&
    printf "$ttt$ttt\n\n\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt\n" > expect &&
    printf "$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt$ttt\n" > expect &&
    printf "$ttt$ttt$ttt$ttt\n\n\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" > expect &&

    printf "$ttt\n$sss\n$sss\n$sss\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$sss\n$sss$sss\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$sss$sss\n$sss\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$sss$sss$sss\n\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n$sss$sss$sss\n\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n\n\n$sss$sss$sss\n" | git stripspace >actual &&
    test_cmp expect actual

ok 7 - consecutive blank lines at the end should be removed

expecting success of 0030.8 'text without newline at end should end with newline': 
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt$ttt"

ok 8 - text without newline at end should end with newline

expecting success of 0030.9 'text plus spaces without newline at end should end with newline': 
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$sss" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt$sss" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss$sss" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$sss$sss" &&
    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss$sss$sss"

ok 9 - text plus spaces without newline at end should end with newline

expecting success of 0030.10 'text plus spaces without newline at end should not show spaces': 
    printf "$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    printf "$ttt$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    printf "$ttt$ttt$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    printf "$ttt$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    printf "$ttt$ttt$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    printf "$ttt$sss$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null

ok 10 - text plus spaces without newline at end should not show spaces

expecting success of 0030.11 'text plus spaces without newline should show the correct lines': 
    printf "$ttt\n" >expect &&
    printf "$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" >expect &&
    printf "$ttt$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n" >expect &&
    printf "$ttt$sss$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n" >expect &&
    printf "$ttt$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n" >expect &&
    printf "$ttt$ttt$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt$ttt\n" >expect &&
    printf "$ttt$ttt$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual

ok 11 - text plus spaces without newline should show the correct lines

expecting success of 0030.12 'text plus spaces at end should not show spaces': 
    echo "$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    echo "$ttt$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    echo "$ttt$ttt$ttt$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    echo "$ttt$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    echo "$ttt$ttt$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null &&
    echo "$ttt$sss$sss$sss" | git stripspace >tmp &&
    ! grep "  " tmp >/dev/null

ok 12 - text plus spaces at end should not show spaces

expecting success of 0030.13 'text plus spaces at end should be cleaned and newline must remain': 
    echo "$ttt" >expect &&
    echo "$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    echo "$ttt" >expect &&
    echo "$ttt$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    echo "$ttt" >expect &&
    echo "$ttt$sss$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt" >expect &&
    echo "$ttt$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt" >expect &&
    echo "$ttt$ttt$sss$sss" | git stripspace >actual &&
    test_cmp expect actual &&

    echo "$ttt$ttt$ttt" >expect &&
    echo "$ttt$ttt$ttt$sss" | git stripspace >actual &&
    test_cmp expect actual

ok 13 - text plus spaces at end should be cleaned and newline must remain

expecting success of 0030.14 'spaces with newline at end should be replaced with empty string': 
    echo | git stripspace >actual &&
    test_must_be_empty actual &&

    echo "$sss" | git stripspace >actual &&
    test_must_be_empty actual &&

    echo "$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual &&

    echo "$sss$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual &&

    echo "$sss$sss$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual

ok 14 - spaces with newline at end should be replaced with empty string

expecting success of 0030.15 'spaces without newline at end should not show spaces': 
    printf "" | git stripspace >tmp &&
    ! grep " " tmp >/dev/null &&
    printf "$sss" | git stripspace >tmp &&
    ! grep " " tmp >/dev/null &&
    printf "$sss$sss" | git stripspace >tmp &&
    ! grep " " tmp >/dev/null &&
    printf "$sss$sss$sss" | git stripspace >tmp &&
    ! grep " " tmp >/dev/null &&
    printf "$sss$sss$sss$sss" | git stripspace >tmp &&
    ! grep " " tmp >/dev/null

ok 15 - spaces without newline at end should not show spaces

expecting success of 0030.16 'spaces without newline at end should be replaced with empty string': 
    printf "" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual &&

    printf "$sss$sss$sss$sss" | git stripspace >actual &&
    test_must_be_empty actual

ok 16 - spaces without newline at end should be replaced with empty string

expecting success of 0030.17 'consecutive text lines should be unchanged': 
    printf "$ttt$ttt\n$ttt\n" >expect &&
    printf "$ttt$ttt\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$ttt$ttt\n$ttt\n" >expect &&
    printf "$ttt\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" >expect &&
    printf "$ttt\n$ttt\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" >expect &&
    printf "$ttt\n$ttt\n\n$ttt$ttt\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" >expect &&
    printf "$ttt$ttt\n\n$ttt\n$ttt$ttt\n" | git stripspace >actual &&
    test_cmp expect actual &&

    printf "$ttt\n$ttt$ttt\n\n$ttt\n" >expect &&
    printf "$ttt\n$ttt$ttt\n\n$ttt\n" | git stripspace >actual &&
    test_cmp expect actual

ok 17 - consecutive text lines should be unchanged

expecting success of 0030.18 'strip comments, too': 
	test ! -z "$(echo "# comment" | git stripspace)" &&
	test -z "$(echo "# comment" | git stripspace -s)"

ok 18 - strip comments, too

expecting success of 0030.19 'strip comments with changed comment char': 
	test ! -z "$(echo "; comment" | git -c core.commentchar=";" stripspace)" &&
	test -z "$(echo "; comment" | git -c core.commentchar=";" stripspace -s)"

ok 19 - strip comments with changed comment char

expecting success of 0030.20 '-c with single line': 
	printf "# foo\n" >expect &&
	printf "foo" | git stripspace -c >actual &&
	test_cmp expect actual

ok 20 - -c with single line

expecting success of 0030.21 '-c with single line followed by empty line': 
	printf "# foo\n#\n" >expect &&
	printf "foo\n\n" | git stripspace -c >actual &&
	test_cmp expect actual

ok 21 - -c with single line followed by empty line

expecting success of 0030.22 '-c with newline only': 
	printf "#\n" >expect &&
	printf "\n" | git stripspace -c >actual &&
	test_cmp expect actual

ok 22 - -c with newline only

expecting success of 0030.23 '--comment-lines with single line': 
	printf "# foo\n" >expect &&
	printf "foo" | git stripspace -c >actual &&
	test_cmp expect actual

ok 23 - --comment-lines with single line

expecting success of 0030.24 '-c with changed comment char': 
	printf "; foo\n" >expect &&
	printf "foo" | git -c core.commentchar=";" stripspace -c >actual &&
	test_cmp expect actual

ok 24 - -c with changed comment char

expecting success of 0030.25 '-c with comment char defined in .git/config': 
	test_config core.commentchar = &&
	printf "= foo\n" >expect &&
	rm -fr sub &&
	mkdir sub &&
	printf "foo" | git -C sub stripspace -c >actual &&
	test_cmp expect actual

ok 25 - -c with comment char defined in .git/config

expecting success of 0030.26 '-c outside git repository': 
	printf "# foo\n" >expect &&
	printf "foo" | nongit git stripspace -c >actual &&
	test_cmp expect actual

ok 26 - -c outside git repository

expecting success of 0030.27 'avoid SP-HT sequence in commented line': 
	printf "#\tone\n#\n# two\n" >expect &&
	printf "\tone\n\ntwo\n" | git stripspace -c >actual &&
	test_cmp expect actual

ok 27 - avoid SP-HT sequence in commented line

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0033-safe-directory.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory/.git/
expecting success of 0033.1 'safe.directory is not set': 
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 1 - safe.directory is not set

expecting success of 0033.2 'safe.directory on the command line': 
	git -c safe.directory="$(pwd)" status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
ok 2 - safe.directory on the command line

expecting success of 0033.3 'safe.directory in the environment': 
	env GIT_CONFIG_COUNT=1 \
	    GIT_CONFIG_KEY_0="safe.directory" \
	    GIT_CONFIG_VALUE_0="$(pwd)" \
	    git status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
ok 3 - safe.directory in the environment

expecting success of 0033.4 'safe.directory in GIT_CONFIG_PARAMETERS': 
	env GIT_CONFIG_PARAMETERS="${SQ}safe.directory${SQ}=${SQ}$(pwd)${SQ}" \
	    git status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
ok 4 - safe.directory in GIT_CONFIG_PARAMETERS

expecting success of 0033.5 'ignoring safe.directory in repo config': 
	(
		unset GIT_TEST_ASSUME_DIFFERENT_OWNER &&
		git config safe.directory "$(pwd)"
	) &&
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 5 - ignoring safe.directory in repo config

expecting success of 0033.6 'safe.directory does not match': 
	git config --global safe.directory bogus &&
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 6 - safe.directory does not match

expecting success of 0033.7 'path exist as different key': 
	git config --global foo.bar "$(pwd)" &&
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 7 - path exist as different key

expecting success of 0033.8 'safe.directory matches': 
	git config --global --add safe.directory "$(pwd)" &&
	git status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitconfig
	err

nothing added to commit but untracked files present (use "git add" to track)
ok 8 - safe.directory matches

expecting success of 0033.9 'safe.directory matches, but is reset': 
	git config --global --add safe.directory "" &&
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 9 - safe.directory matches, but is reset

expecting success of 0033.10 'safe.directory=*': 
	git config --global --add safe.directory "*" &&
	git status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitconfig
	err

nothing added to commit but untracked files present (use "git add" to track)
ok 10 - safe.directory=*

expecting success of 0033.11 'safe.directory=*, but is reset': 
	git config --global --add safe.directory "" &&
	expect_rejected_dir

fatal: detected dubious ownership in repository at '/<<PKGBUILDDIR>>/t/trash directory.t0033-safe-directory'
ok 11 - safe.directory=*, but is reset

expecting success of 0033.12 'safe.directory in included file': 
	cat >gitconfig-include <<-EOF &&
	[safe]
		directory = "$(pwd)"
	EOF
	git config --global --add include.path "$(pwd)/gitconfig-include" &&
	git status

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitconfig
	err
	gitconfig-include

nothing added to commit but untracked files present (use "git add" to track)
ok 12 - safe.directory in included file

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0034-root-safe-directory.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0034-root-safe-directory/.git/
1..0 # SKIP You must set env var GIT_TEST_ALLOW_SUDO=YES in order to run this test
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0035-safe-bare-repository.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/.git/
expecting success of 0035.1 'setup bare repo in worktree': 
	git init outer-repo &&
	git init --bare outer-repo/bare-repo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/outer-repo/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/outer-repo/bare-repo/
ok 1 - setup bare repo in worktree

expecting success of 0035.2 'safe.bareRepository unset': 
	expect_accepted -C outer-repo/bare-repo

.
ok 2 - safe.bareRepository unset

expecting success of 0035.3 'safe.bareRepository=all': 
	test_config_global safe.bareRepository all &&
	expect_accepted -C outer-repo/bare-repo

.
ok 3 - safe.bareRepository=all

expecting success of 0035.4 'safe.bareRepository=explicit': 
	test_config_global safe.bareRepository explicit &&
	expect_rejected -C outer-repo/bare-repo

fatal: cannot use bare repository '/<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/outer-repo/bare-repo' (safe.bareRepository is 'explicit')
ok 4 - safe.bareRepository=explicit

expecting success of 0035.5 'safe.bareRepository in the repository': 
	# safe.bareRepository must not be "explicit", otherwise
	# git config fails with "fatal: not in a git directory" (like
	# safe.directory)
	test_config -C outer-repo/bare-repo safe.bareRepository \
		all &&
	test_config_global safe.bareRepository explicit &&
	expect_rejected -C outer-repo/bare-repo

fatal: cannot use bare repository '/<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/outer-repo/bare-repo' (safe.bareRepository is 'explicit')
ok 5 - safe.bareRepository in the repository

expecting success of 0035.6 'safe.bareRepository on the command line': 
	test_config_global safe.bareRepository explicit &&
	expect_accepted -C outer-repo/bare-repo \
		-c safe.bareRepository=all

.
ok 6 - safe.bareRepository on the command line

expecting success of 0035.7 'safe.bareRepository in included file': 
	cat >gitconfig-include <<-\EOF &&
	[safe]
		bareRepository = explicit
	EOF
	git config --global --add include.path "$(pwd)/gitconfig-include" &&
	expect_rejected -C outer-repo/bare-repo

fatal: cannot use bare repository '/<<PKGBUILDDIR>>/t/trash directory.t0035-safe-bare-repository/outer-repo/bare-repo' (safe.bareRepository is 'explicit')
ok 7 - safe.bareRepository in included file

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0041-usage.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0041-usage/.git/
expecting success of 0041.1 'setup ': 
	test_commit "v1.0"

[main (root-commit) 843b676] v1.0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v1.0.t
ok 1 - setup 

expecting success of 0041.2 'tag --contains <existent_tag>': 
	git tag --contains "v1.0" >actual 2>actual.err &&
	grep "v1.0" actual &&
	test_line_count = 0 actual.err

v1.0
ok 2 - tag --contains <existent_tag>

expecting success of 0041.3 'tag --contains <inexistent_tag>': 
	test_must_fail git tag --contains "notag" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name notag
ok 3 - tag --contains <inexistent_tag>

expecting success of 0041.4 'tag --no-contains <existent_tag>': 
	git tag --no-contains "v1.0" >actual 2>actual.err  &&
	test_line_count = 0 actual &&
	test_line_count = 0 actual.err

ok 4 - tag --no-contains <existent_tag>

expecting success of 0041.5 'tag --no-contains <inexistent_tag>': 
	test_must_fail git tag --no-contains "notag" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name notag
ok 5 - tag --no-contains <inexistent_tag>

expecting success of 0041.6 'tag usage error': 
	test_must_fail git tag --noopt >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "usage" actual.err

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
ok 6 - tag usage error

expecting success of 0041.7 'branch --contains <existent_commit>': 
	git branch --contains "main" >actual 2>actual.err &&
	test_i18ngrep "main" actual &&
	test_line_count = 0 actual.err

* main
ok 7 - branch --contains <existent_commit>

expecting success of 0041.8 'branch --contains <inexistent_commit>': 
	test_must_fail git branch --no-contains "nocommit" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name nocommit
ok 8 - branch --contains <inexistent_commit>

expecting success of 0041.9 'branch --no-contains <existent_commit>': 
	git branch --no-contains "main" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_line_count = 0 actual.err

ok 9 - branch --no-contains <existent_commit>

expecting success of 0041.10 'branch --no-contains <inexistent_commit>': 
	test_must_fail git branch --no-contains "nocommit" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name nocommit
ok 10 - branch --no-contains <inexistent_commit>

expecting success of 0041.11 'branch usage error': 
	test_must_fail git branch --noopt >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "usage" actual.err

usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
ok 11 - branch usage error

expecting success of 0041.12 'for-each-ref --contains <existent_object>': 
	git for-each-ref --contains "main" >actual 2>actual.err &&
	test_line_count = 2 actual &&
	test_line_count = 0 actual.err

ok 12 - for-each-ref --contains <existent_object>

expecting success of 0041.13 'for-each-ref --contains <inexistent_object>': 
	test_must_fail git for-each-ref --no-contains "noobject" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name noobject
ok 13 - for-each-ref --contains <inexistent_object>

expecting success of 0041.14 'for-each-ref --no-contains <existent_object>': 
	git for-each-ref --no-contains "main" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_line_count = 0 actual.err

ok 14 - for-each-ref --no-contains <existent_object>

expecting success of 0041.15 'for-each-ref --no-contains <inexistent_object>': 
	test_must_fail git for-each-ref --no-contains "noobject" >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "error" actual.err &&
	test_i18ngrep ! "usage" actual.err

error: malformed object name noobject
ok 15 - for-each-ref --no-contains <inexistent_object>

expecting success of 0041.16 'for-each-ref usage error': 
	test_must_fail git for-each-ref --noopt >actual 2>actual.err &&
	test_line_count = 0 actual &&
	test_i18ngrep "usage" actual.err

usage: git for-each-ref [<options>] [<pattern>]
ok 16 - for-each-ref usage error

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0040-parse-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0040-parse-options/.git/
expecting success of 0040.1 'test help': 
	test_must_fail test-tool parse-options -h >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 1 - test help

expecting success of 0040.2 'OPT_BOOL() #1': check boolean: 1 --yes
ok 2 - OPT_BOOL() #1

expecting success of 0040.3 'OPT_BOOL() #2': check boolean: 1 --no-doubt
ok 3 - OPT_BOOL() #2

expecting success of 0040.4 'OPT_BOOL() #3': check boolean: 1 -D
ok 4 - OPT_BOOL() #3

expecting success of 0040.5 'OPT_BOOL() #4': check boolean: 1 --no-fear
ok 5 - OPT_BOOL() #4

expecting success of 0040.6 'OPT_BOOL() #5': check boolean: 1 -B
ok 6 - OPT_BOOL() #5

expecting success of 0040.7 'OPT_BOOL() is idempotent #1': check boolean: 1 --yes --yes
ok 7 - OPT_BOOL() is idempotent #1

expecting success of 0040.8 'OPT_BOOL() is idempotent #2': check boolean: 1 -DB
ok 8 - OPT_BOOL() is idempotent #2

expecting success of 0040.9 'OPT_BOOL() negation #1': check boolean: 0 -D --no-yes
ok 9 - OPT_BOOL() negation #1

expecting success of 0040.10 'OPT_BOOL() negation #2': check boolean: 0 -D --no-no-doubt
ok 10 - OPT_BOOL() negation #2

expecting success of 0040.11 'OPT_BOOL() no negation #1': check_unknown_i18n --fear
ok 11 - OPT_BOOL() no negation #1

expecting success of 0040.12 'OPT_BOOL() no negation #2': check_unknown_i18n --no-no-fear
ok 12 - OPT_BOOL() no negation #2

expecting success of 0040.13 'OPT_BOOL() positivation': check boolean: 0 -D --doubt
ok 13 - OPT_BOOL() positivation

expecting success of 0040.14 'OPT_INT() negative': check integer: -2345 -i -2345
ok 14 - OPT_INT() negative

expecting success of 0040.15 'OPT_MAGNITUDE() simple': 
	check magnitude: 2345678 -m 2345678

ok 15 - OPT_MAGNITUDE() simple

expecting success of 0040.16 'OPT_MAGNITUDE() kilo': 
	check magnitude: 239616 -m 234k

ok 16 - OPT_MAGNITUDE() kilo

expecting success of 0040.17 'OPT_MAGNITUDE() mega': 
	check magnitude: 104857600 -m 100m

ok 17 - OPT_MAGNITUDE() mega

expecting success of 0040.18 'OPT_MAGNITUDE() giga': 
	check magnitude: 1073741824 -m 1g

ok 18 - OPT_MAGNITUDE() giga

expecting success of 0040.19 'OPT_MAGNITUDE() 3giga': 
	check magnitude: 3221225472 -m 3g

ok 19 - OPT_MAGNITUDE() 3giga

expecting success of 0040.20 'short options': 
	test-tool parse-options -s123 -b -i 1729 -m 16k -b -vv -n -F my.file \
	>output 2>output.err &&
	test_cmp expect output &&
	test_must_be_empty output.err

ok 20 - short options

expecting success of 0040.21 'long options': 
	test-tool parse-options --boolean --integer 1729 --magnitude 16k \
		--boolean --string2=321 --verbose --verbose --no-dry-run \
		--abbrev=10 --file fi.le --obsolete \
		>output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 21 - long options

expecting success of 0040.22 'missing required value': 
	cat >expect <<-\EOF &&
	error: switch `s' requires a value
	EOF
	test_expect_code 129 test-tool parse-options -s 2>actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	error: option `string' requires a value
	EOF
	test_expect_code 129 test-tool parse-options --string 2>actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	error: option `file' requires a value
	EOF
	test_expect_code 129 test-tool parse-options --file 2>actual &&
	test_cmp expect actual

ok 22 - missing required value

expecting success of 0040.23 'superfluous value provided: boolean': 
	cat >expect <<-\EOF &&
	error: option `yes' takes no value
	EOF
	test_expect_code 129 test-tool parse-options --yes=hi 2>actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	error: option `no-yes' takes no value
	EOF
	test_expect_code 129 test-tool parse-options --no-yes=hi 2>actual &&
	test_cmp expect actual

ok 23 - superfluous value provided: boolean

expecting success of 0040.24 'superfluous value provided: cmdmode': 
	cat >expect <<-\EOF &&
	error: option `mode1' takes no value
	EOF
	test_expect_code 129 test-tool parse-options --mode1=hi 2>actual &&
	test_cmp expect actual

ok 24 - superfluous value provided: cmdmode

expecting success of 0040.25 'intermingled arguments': 
	test-tool parse-options a1 --string 123 b1 --boolean -j 13 -- --boolean \
		>output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 25 - intermingled arguments

expecting success of 0040.26 'unambiguously abbreviated option': 
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --int 2 --boolean --no-bo >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 26 - unambiguously abbreviated option

expecting success of 0040.27 'unambiguously abbreviated option with "="': 
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --expect="integer: 2" --int=2

ok 27 - unambiguously abbreviated option with "="

expecting success of 0040.28 'ambiguously abbreviated option': 
	test_expect_code 129 env GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --strin 123

error: ambiguous option: strin (could be --string or --string2)
usage: test-tool parse-options <options>

    A helper function for the parse-options API.

    --yes                 get a boolean
    -D, --no-doubt        begins with 'no-'
    -B, --no-fear         be brave
    -b, --boolean         increment by one
    -4, --or4             bitwise-or boolean with ...0100
    --neg-or4             same as --no-or4

    -i, --integer <n>     get a integer
    -j <n>                get a integer, too
    -m, --magnitude <n>   get a magnitude
    --set23               set integer to 23
    --mode1               set integer to 1 (cmdmode option)
    --mode2               set integer to 2 (cmdmode option)
    -L, --length <str>    get length of <str>
    -F, --file <file>     set file to <file>

String options
    -s, --string <string>
                          get a string
    --string2 <str>       get another string
    --st <st>             get another string (pervert ordering)
    -o <str>              get another string
    --list <str>          add str to list

Magic arguments
    -NUM                  set integer to NUM
    +                     same as -b
    --ambiguous           positive ambiguity
    --no-ambiguous        negative ambiguity

Standard options
    --abbrev[=<n>]        use <n> digits to display object names
    -v, --verbose         be verbose
    -n, --dry-run         dry run
    -q, --quiet           be quiet
    --expect <string>     expected output in the variable dump

Alias
    -A, --alias-source <string>
                          get a string
    -Z, --alias-target <string>
                          alias of --alias-source

ok 28 - ambiguously abbreviated option

expecting success of 0040.29 'non ambiguous option (after two options it abbreviates)': 
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --expect="string: 123" --st 123

ok 29 - non ambiguous option (after two options it abbreviates)

expecting success of 0040.30 'Alias options do not contribute to abbreviation': 
	test-tool parse-options --alias-source 123 >output &&
	grep "^string: 123" output &&
	test-tool parse-options --alias-target 123 >output &&
	grep "^string: 123" output &&
	test_must_fail test-tool parse-options --alias &&
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --alias 123 >output &&
	grep "^string: 123" output

string: 123
string: 123
fatal: disallowed abbreviated or ambiguous option 'alias'
string: 123
ok 30 - Alias options do not contribute to abbreviation

expecting success of 0040.31 'detect possible typos': 
	test_must_fail test-tool parse-options -boolean >output 2>output.err &&
	test_must_be_empty output &&
	test_cmp typo.err output.err

ok 31 - detect possible typos

expecting success of 0040.32 'detect possible typos': 
	test_must_fail test-tool parse-options -ambiguous >output 2>output.err &&
	test_must_be_empty output &&
	test_cmp typo.err output.err

ok 32 - detect possible typos

expecting success of 0040.33 'OPT_CALLBACK() and OPT_BIT() work': 
	test-tool parse-options --length=four -b -4 >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 33 - OPT_CALLBACK() and OPT_BIT() work

expecting success of 0040.34 'OPT_CALLBACK() and callback errors work': 
	test_must_fail test-tool parse-options --no-length >output 2>output.err &&
	test_must_be_empty output &&
	test_must_be_empty output.err

ok 34 - OPT_CALLBACK() and callback errors work

expecting success of 0040.35 'OPT_BIT() and OPT_SET_INT() work': 
	test-tool parse-options --set23 -bbbbb --no-or4 >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 35 - OPT_BIT() and OPT_SET_INT() work

expecting success of 0040.36 'OPT_NEGBIT() and OPT_SET_INT() work': 
	test-tool parse-options --set23 -bbbbb --neg-or4 >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 36 - OPT_NEGBIT() and OPT_SET_INT() work

expecting success of 0040.37 'OPT_BIT() works': 
	test-tool parse-options --expect="boolean: 6" -bb --or4

ok 37 - OPT_BIT() works

expecting success of 0040.38 'OPT_NEGBIT() works': 
	test-tool parse-options --expect="boolean: 6" -bb --no-neg-or4

ok 38 - OPT_NEGBIT() works

expecting success of 0040.39 'OPT_CMDMODE() works': 
	test-tool parse-options --expect="integer: 1" --mode1

ok 39 - OPT_CMDMODE() works

expecting success of 0040.40 'OPT_CMDMODE() detects incompatibility': 
	test_must_fail test-tool parse-options --mode1 --mode2 >output 2>output.err &&
	test_must_be_empty output &&
	test_i18ngrep "incompatible with --mode" output.err

error: option `mode2' is incompatible with --mode1
ok 40 - OPT_CMDMODE() detects incompatibility

expecting success of 0040.41 'OPT_CMDMODE() detects incompatibility with something else': 
	test_must_fail test-tool parse-options --set23 --mode2 >output 2>output.err &&
	test_must_be_empty output &&
	test_i18ngrep "incompatible with something else" output.err

error: option `mode2' : incompatible with something else
ok 41 - OPT_CMDMODE() detects incompatibility with something else

expecting success of 0040.42 'OPT_COUNTUP() with PARSE_OPT_NODASH works': 
	test-tool parse-options --expect="boolean: 6" + + + + + +

ok 42 - OPT_COUNTUP() with PARSE_OPT_NODASH works

expecting success of 0040.43 'OPT_NUMBER_CALLBACK() works': 
	test-tool parse-options --expect="integer: 12345" -12345

ok 43 - OPT_NUMBER_CALLBACK() works

expecting success of 0040.44 'negation of OPT_NONEG flags is not ambiguous': 
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
	test-tool parse-options --no-ambig >output 2>output.err &&
	test_must_be_empty output.err &&
	test_cmp expect output

ok 44 - negation of OPT_NONEG flags is not ambiguous

expecting success of 0040.45 '--list keeps list of strings': 
	test-tool parse-options --list foo --list=bar --list=baz >output &&
	test_cmp expect output

ok 45 - --list keeps list of strings

expecting success of 0040.46 '--no-list resets list': 
	test-tool parse-options --list=other --list=irrelevant --list=options \
		--no-list --list=foo --list=bar --list=baz >output &&
	test_cmp expect output

ok 46 - --no-list resets list

expecting success of 0040.47 'multiple quiet levels': 
	test-tool parse-options --expect="quiet: 3" -q -q -q

ok 47 - multiple quiet levels

expecting success of 0040.48 'multiple verbose levels': 
	test-tool parse-options --expect="verbose: 3" -v -v -v

ok 48 - multiple verbose levels

expecting success of 0040.49 '--no-quiet sets --quiet to 0': 
	test-tool parse-options --expect="quiet: 0" --no-quiet

ok 49 - --no-quiet sets --quiet to 0

expecting success of 0040.50 '--no-quiet resets multiple -q to 0': 
	test-tool parse-options --expect="quiet: 0" -q -q -q --no-quiet

ok 50 - --no-quiet resets multiple -q to 0

expecting success of 0040.51 '--no-verbose sets verbose to 0': 
	test-tool parse-options --expect="verbose: 0" --no-verbose

ok 51 - --no-verbose sets verbose to 0

expecting success of 0040.52 '--no-verbose resets multiple verbose to 0': 
	test-tool parse-options --expect="verbose: 0" -v -v -v --no-verbose

ok 52 - --no-verbose resets multiple verbose to 0

expecting success of 0040.53 'GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS works': 
	GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=false \
		test-tool parse-options --ye &&
	test_must_fail env GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=true \
		test-tool parse-options --ye

boolean: 1
integer: 0
magnitude: 0
timestamp: 0
string: (not set)
abbrev: 7
verbose: -1
quiet: 0
dry run: no
file: (not set)
fatal: disallowed abbreviated or ambiguous option 'ye'
ok 53 - GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS works

expecting success of 0040.54 '--end-of-options treats remainder as args': 
	test-tool parse-options \
	    --expect="verbose: -1" \
	    --expect="arg 00: --verbose" \
	    --end-of-options --verbose

ok 54 - --end-of-options treats remainder as args

expecting success of 0040.55 'KEEP_DASHDASH works': 
	test-tool parse-options-flags --keep-dashdash cmd --opt=1 -- --opt=2 --unknown >actual &&
	cat >expect <<-\EOF &&
	opt: 1
	arg 00: --
	arg 01: --opt=2
	arg 02: --unknown
	EOF
	test_cmp expect actual

ok 55 - KEEP_DASHDASH works

expecting success of 0040.56 'KEEP_ARGV0 works': 
	test-tool parse-options-flags --keep-argv0 cmd arg0 --opt=3 >actual &&
	cat >expect <<-\EOF &&
	opt: 3
	arg 00: cmd
	arg 01: arg0
	EOF
	test_cmp expect actual

ok 56 - KEEP_ARGV0 works

expecting success of 0040.57 'STOP_AT_NON_OPTION works': 
	test-tool parse-options-flags --stop-at-non-option cmd --opt=4 arg0 --opt=5 --unknown >actual &&
	cat >expect <<-\EOF &&
	opt: 4
	arg 00: arg0
	arg 01: --opt=5
	arg 02: --unknown
	EOF
	test_cmp expect actual

ok 57 - STOP_AT_NON_OPTION works

expecting success of 0040.58 'KEEP_UNKNOWN_OPT works': 
	test-tool parse-options-flags --keep-unknown-opt cmd --unknown=1 --opt=6 -u2 >actual &&
	cat >expect <<-\EOF &&
	opt: 6
	arg 00: --unknown=1
	arg 01: -u2
	EOF
	test_cmp expect actual

ok 58 - KEEP_UNKNOWN_OPT works

expecting success of 0040.59 'NO_INTERNAL_HELP works for -h': 
	test_expect_code 129 test-tool parse-options-flags --no-internal-help cmd -h 2>err &&
	grep "^error: unknown switch \`h$SQ" err &&
	grep "^usage: " err

error: unknown switch `h'
usage: <...> cmd [options]
ok 59 - NO_INTERNAL_HELP works for -h

expecting success of 0040.60 'NO_INTERNAL_HELP works for --help': 
		test_expect_code 129 test-tool parse-options-flags --no-internal-help cmd --help 2>err &&
		grep '^error: unknown option `'help\' err &&
		grep '^usage: ' err
	
error: unknown option `help'
usage: <...> cmd [options]
ok 60 - NO_INTERNAL_HELP works for --help

expecting success of 0040.61 'NO_INTERNAL_HELP works for --help-all': 
		test_expect_code 129 test-tool parse-options-flags --no-internal-help cmd --help-all 2>err &&
		grep '^error: unknown option `'help-all\' err &&
		grep '^usage: ' err
	
error: unknown option `help-all'
usage: <...> cmd [options]
ok 61 - NO_INTERNAL_HELP works for --help-all

expecting success of 0040.62 'KEEP_UNKNOWN_OPT | NO_INTERNAL_HELP works': 
	test-tool parse-options-flags --keep-unknown-opt --no-internal-help cmd -h --help --help-all >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	arg 00: -h
	arg 01: --help
	arg 02: --help-all
	EOF
	test_cmp expect actual

ok 62 - KEEP_UNKNOWN_OPT | NO_INTERNAL_HELP works

expecting success of 0040.63 'subcommand - no subcommand shows error and usage': 
	test_expect_code 129 test-tool parse-subcommand cmd 2>err &&
	grep "^error: need a subcommand" err &&
	grep ^usage: err

error: need a subcommand
usage: <...> cmd subcmd-one
ok 63 - subcommand - no subcommand shows error and usage

expecting success of 0040.64 'subcommand - subcommand after -- shows error and usage': 
	test_expect_code 129 test-tool parse-subcommand cmd -- subcmd-one 2>err &&
	grep "^error: need a subcommand" err &&
	grep ^usage: err

error: need a subcommand
usage: <...> cmd subcmd-one
ok 64 - subcommand - subcommand after -- shows error and usage

expecting success of 0040.65 'subcommand - subcommand after --end-of-options shows error and usage': 
	test_expect_code 129 test-tool parse-subcommand cmd --end-of-options subcmd-one 2>err &&
	grep "^error: need a subcommand" err &&
	grep ^usage: err

error: need a subcommand
usage: <...> cmd subcmd-one
ok 65 - subcommand - subcommand after --end-of-options shows error and usage

expecting success of 0040.66 'subcommand - unknown subcommand shows error and usage': 
	test_expect_code 129 test-tool parse-subcommand cmd nope 2>err &&
	grep "^error: unknown subcommand: \`nope$SQ" err &&
	grep ^usage: err

error: unknown subcommand: `nope'
usage: <...> cmd subcmd-one
ok 66 - subcommand - unknown subcommand shows error and usage

expecting success of 0040.67 'subcommand - subcommands cannot be abbreviated': 
	test_expect_code 129 test-tool parse-subcommand cmd subcmd-o 2>err &&
	grep "^error: unknown subcommand: \`subcmd-o$SQ$" err &&
	grep ^usage: err

error: unknown subcommand: `subcmd-o'
usage: <...> cmd subcmd-one
ok 67 - subcommand - subcommands cannot be abbreviated

expecting success of 0040.68 'subcommand - no negated subcommands': 
	test_expect_code 129 test-tool parse-subcommand cmd no-subcmd-one 2>err &&
	grep "^error: unknown subcommand: \`no-subcmd-one$SQ" err &&
	grep ^usage: err

error: unknown subcommand: `no-subcmd-one'
usage: <...> cmd subcmd-one
ok 68 - subcommand - no negated subcommands

expecting success of 0040.69 'subcommand - simple': 
	test-tool parse-subcommand cmd subcmd-two >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_two
	arg 00: subcmd-two
	EOF
	test_cmp expect actual

ok 69 - subcommand - simple

expecting success of 0040.70 'subcommand - stop parsing at the first subcommand': 
	test-tool parse-subcommand cmd --opt=1 subcmd-two subcmd-one --opt=2 >actual &&
	cat >expect <<-\EOF &&
	opt: 1
	fn: subcmd_two
	arg 00: subcmd-two
	arg 01: subcmd-one
	arg 02: --opt=2
	EOF
	test_cmp expect actual

ok 70 - subcommand - stop parsing at the first subcommand

expecting success of 0040.71 'subcommand - KEEP_ARGV0': 
	test-tool parse-subcommand --keep-argv0 cmd subcmd-two >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_two
	arg 00: cmd
	arg 01: subcmd-two
	EOF
	test_cmp expect actual

ok 71 - subcommand - KEEP_ARGV0

expecting success of 0040.72 'subcommand - SUBCOMMAND_OPTIONAL + subcommand not given': 
	test-tool parse-subcommand --subcommand-optional cmd >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	EOF
	test_cmp expect actual

ok 72 - subcommand - SUBCOMMAND_OPTIONAL + subcommand not given

expecting success of 0040.73 'subcommand - SUBCOMMAND_OPTIONAL + given subcommand': 
	test-tool parse-subcommand --subcommand-optional cmd subcmd-two branch file >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_two
	arg 00: subcmd-two
	arg 01: branch
	arg 02: file
	EOF
	test_cmp expect actual

ok 73 - subcommand - SUBCOMMAND_OPTIONAL + given subcommand

expecting success of 0040.74 'subcommand - SUBCOMMAND_OPTIONAL + subcommand not given + unknown dashless args': 
	test-tool parse-subcommand --subcommand-optional cmd branch file >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: branch
	arg 01: file
	EOF
	test_cmp expect actual

ok 74 - subcommand - SUBCOMMAND_OPTIONAL + subcommand not given + unknown dashless args

expecting success of 0040.75 'subcommand - SUBCOMMAND_OPTIONAL + subcommand not given + unknown option': 
	test_expect_code 129 test-tool parse-subcommand --subcommand-optional cmd --subcommand-opt 2>err &&
	grep "^error: unknown option" err &&
	grep ^usage: err

error: unknown option `subcommand-opt'
usage: <...> cmd subcmd-one
ok 75 - subcommand - SUBCOMMAND_OPTIONAL + subcommand not given + unknown option

expecting success of 0040.76 'subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + subcommand not given + unknown option': 
	test-tool parse-subcommand --subcommand-optional --keep-unknown-opt cmd --subcommand-opt >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: --subcommand-opt
	EOF
	test_cmp expect actual

ok 76 - subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + subcommand not given + unknown option

expecting success of 0040.77 'subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + subcommand ignored after unknown option': 
	test-tool parse-subcommand --subcommand-optional --keep-unknown-opt cmd --subcommand-opt subcmd-two >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: --subcommand-opt
	arg 01: subcmd-two
	EOF
	test_cmp expect actual

ok 77 - subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + subcommand ignored after unknown option

expecting success of 0040.78 'subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + command and subcommand options cannot be mixed': 
	test-tool parse-subcommand --subcommand-optional --keep-unknown-opt cmd --subcommand-opt branch --opt=1 >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: --subcommand-opt
	arg 01: branch
	arg 02: --opt=1
	EOF
	test_cmp expect actual

ok 78 - subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT + command and subcommand options cannot be mixed

expecting success of 0040.79 'subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT | KEEP_ARGV0': 
	test-tool parse-subcommand --subcommand-optional --keep-unknown-opt --keep-argv0 cmd --subcommand-opt branch >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: cmd
	arg 01: --subcommand-opt
	arg 02: branch
	EOF
	test_cmp expect actual

ok 79 - subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT | KEEP_ARGV0

expecting success of 0040.80 'subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT | KEEP_DASHDASH': 
	test-tool parse-subcommand --subcommand-optional --keep-unknown-opt --keep-dashdash cmd -- --subcommand-opt file >actual &&
	cat >expect <<-\EOF &&
	opt: 0
	fn: subcmd_one
	arg 00: --
	arg 01: --subcommand-opt
	arg 02: file
	EOF
	test_cmp expect actual

ok 80 - subcommand - SUBCOMMAND_OPTIONAL | KEEP_UNKNOWN_OPT | KEEP_DASHDASH

expecting success of 0040.81 'subcommand - completion helper': 
	test-tool parse-subcommand cmd --git-completion-helper >actual &&
	echo "subcmd-one subcmd-two --opt= --no-opt" >expect &&
	test_cmp expect actual

ok 81 - subcommand - completion helper

expecting success of 0040.82 'subcommands are incompatible with STOP_AT_NON_OPTION': 
	test_must_fail test-tool parse-subcommand --stop-at-non-option cmd subcmd-one 2>err &&
	grep ^BUG err

BUG: parse-options.c:555: subcommands are incompatible with PARSE_OPT_STOP_AT_NON_OPTION
ok 82 - subcommands are incompatible with STOP_AT_NON_OPTION

expecting success of 0040.83 'subcommands are incompatible with KEEP_UNKNOWN_OPT unless in combination with SUBCOMMAND_OPTIONAL': 
	test_must_fail test-tool parse-subcommand --keep-unknown-opt cmd subcmd-two 2>err &&
	grep ^BUG err

BUG: parse-options.c:558: subcommands are incompatible with PARSE_OPT_KEEP_UNKNOWN_OPT unless in combination with PARSE_OPT_SUBCOMMAND_OPTIONAL
ok 83 - subcommands are incompatible with KEEP_UNKNOWN_OPT unless in combination with SUBCOMMAND_OPTIONAL

expecting success of 0040.84 'subcommands are incompatible with KEEP_DASHDASH unless in combination with SUBCOMMAND_OPTIONAL': 
	test_must_fail test-tool parse-subcommand --keep-dashdash cmd subcmd-two 2>err &&
	grep ^BUG err

BUG: parse-options.c:560: subcommands are incompatible with PARSE_OPT_KEEP_DASHDASH unless in combination with PARSE_OPT_SUBCOMMAND_OPTIONAL
ok 84 - subcommands are incompatible with KEEP_DASHDASH unless in combination with SUBCOMMAND_OPTIONAL

expecting success of 0040.85 'negative magnitude': 
	test_must_fail test-tool parse-options --magnitude -1 >out 2>err &&
	grep "non-negative integer" err &&
	test_must_be_empty out

error: option `magnitude' expects a non-negative integer value with an optional k/m/g suffix
ok 85 - negative magnitude

expecting success of 0040.86 'magnitude with units but no numbers': 
	test_must_fail test-tool parse-options --magnitude m >out 2>err &&
	grep "non-negative integer" err &&
	test_must_be_empty out

error: option `magnitude' expects a non-negative integer value with an optional k/m/g suffix
ok 86 - magnitude with units but no numbers

# passed all 86 test(s)
1..86
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0051-windows-named-pipe.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0051-windows-named-pipe/.git/
1..0 # SKIP skipping Windows-specific tests
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0050-filesystem.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0050-filesystem/.git/
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
checking prerequisite: UTF8_NFD_TO_NFC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
	# check whether FS converts nfd unicode to nfc
	auml=$(printf "\303\244")
	aumlcdiar=$(printf "\141\314\210")
	>"$auml" &&
	test -f "$aumlcdiar"

)
prerequisite UTF8_NFD_TO_NFC not satisfied
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0050.1 'detection of case insensitive filesystem during repo init': 
	{
		test_must_fail git config --bool core.ignorecase >/dev/null ||
			test $(git config --bool core.ignorecase) = false
	}

ok 1 - detection of case insensitive filesystem during repo init

expecting success of 0050.2 'detection of filesystem w/o symlink support during repo init': 
	{
		test_must_fail git config --bool core.symlinks ||
		test "$(git config --bool core.symlinks)" = true
	}

ok 2 - detection of filesystem w/o symlink support during repo init

expecting success of 0050.3 'setup case tests': 
	git config core.ignorecase true &&
	touch camelcase &&
	git add camelcase &&
	git commit -m "initial" &&
	git tag initial &&
	git checkout -b topic &&
	git mv camelcase tmp &&
	git mv tmp CamelCase &&
	git commit -m "rename" &&
	git checkout -f main

[main (root-commit) 4f2cf87] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 camelcase
Switched to a new branch 'topic'
[topic 0a6fec9] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename camelcase => CamelCase (100%)
Switched to branch 'main'
ok 3 - setup case tests

expecting success of 0050.4 'rename (case change)': 
	git mv camelcase CamelCase &&
	git commit -m "rename"

[main 0a6fec9] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename camelcase => CamelCase (100%)
ok 4 - rename (case change)

expecting success of 0050.5 'merge (case change)': 
	rm -f CamelCase &&
	rm -f camelcase &&
	git reset --hard initial &&
	git merge topic

HEAD is now at 4f2cf87 initial
Updating 4f2cf87..0a6fec9
Fast-forward
 camelcase => CamelCase | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename camelcase => CamelCase (100%)
ok 5 - merge (case change)

ok 6 # skip add directory (with different case) (missing CASE_INSENSITIVE_FS)

ok 7 # skip add (with different case) (missing CASE_INSENSITIVE_FS)

expecting success of 0050.8 'setup unicode normalization tests': 
	test_create_repo unicode &&
	cd unicode &&
	git config core.precomposeunicode false &&
	touch "$aumlcdiar" &&
	git add "$aumlcdiar" &&
	git commit -m initial &&
	git tag initial &&
	git checkout -b topic &&
	git mv $aumlcdiar tmp &&
	git mv tmp "$auml" &&
	git commit -m rename &&
	git checkout -f main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0050-filesystem/unicode/.git/
[main (root-commit) 34f0acb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "a\314\210"
Switched to a new branch 'topic'
[topic 591d19c] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename "a\314\210" => "\303\244" (100%)
Switched to branch 'main'
ok 8 - setup unicode normalization tests

expecting success of 0050.9 'rename (silent unicode normalization)': 
	git mv "$aumlcdiar" "$auml" &&
	git commit -m rename

[main 591d19c] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename "a\314\210" => "\303\244" (100%)
ok 9 - rename (silent unicode normalization)

expecting success of 0050.10 'merge (silent unicode normalization)': 
	git reset --hard initial &&
	git merge topic

HEAD is now at 34f0acb initial
Updating 34f0acb..591d19c
Fast-forward
 "a\314\210" => "\303\244" | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename "a\314\210" => "\303\244" (100%)
ok 10 - merge (silent unicode normalization)

ok 11 # skip checkout with no pathspec and a case insensitive fs (missing CASE_INSENSITIVE_FS)

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0055-beyond-symlinks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0055-beyond-symlinks/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0055.1 'setup': 
	>a &&
	mkdir b &&
	ln -s b c &&
	>c/d &&
	git update-index --add a b/d

ok 1 - setup

expecting success of 0055.2 'update-index --add beyond symlinks': 
	test_must_fail git update-index --add c/d &&
	! ( git ls-files | grep c/d )

error: 'c/d' is beyond a symbolic link
fatal: Unable to process path c/d
ok 2 - update-index --add beyond symlinks

expecting success of 0055.3 'add beyond symlinks': 
	test_must_fail git add c/d &&
	! ( git ls-files | grep c/d )

fatal: pathspec 'c/d' is beyond a symbolic link
ok 3 - add beyond symlinks

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0056-git-C.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0056-git-C/.git/
expecting success of 0056.1 '"git -C <path>" runs git from the directory <path>': 
	test_create_repo dir1 &&
	echo 1 >dir1/a.txt &&
	msg="initial in dir1" &&
	(cd dir1 && git add a.txt && git commit -m "$msg") &&
	echo "$msg" >expected &&
	git -C dir1 log --format=%s >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0056-git-C/dir1/.git/
[master (root-commit) 4efbfb5] initial in dir1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
ok 1 - "git -C <path>" runs git from the directory <path>

expecting success of 0056.2 '"git -C <path>" with an empty <path> is a no-op': 
	(
		mkdir -p dir1/subdir &&
		cd dir1/subdir &&
		git -C "" rev-parse --show-prefix >actual &&
		echo subdir/ >expect &&
		test_cmp expect actual
	)

ok 2 - "git -C <path>" with an empty <path> is a no-op

expecting success of 0056.3 'Multiple -C options: "-C dir1 -C dir2" is equivalent to "-C dir1/dir2"': 
	test_create_repo dir1/dir2 &&
	echo 1 >dir1/dir2/b.txt &&
	git -C dir1/dir2 add b.txt &&
	msg="initial in dir1/dir2" &&
	echo "$msg" >expected &&
	git -C dir1/dir2 commit -m "$msg" &&
	git -C dir1 -C dir2 log --format=%s >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0056-git-C/dir1/dir2/.git/
[master (root-commit) ea3acc3] initial in dir1/dir2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.txt
ok 3 - Multiple -C options: "-C dir1 -C dir2" is equivalent to "-C dir1/dir2"

expecting success of 0056.4 'Effect on --git-dir option: "-C c --git-dir=a.git" is equivalent to "--git-dir c/a.git"': 
	mkdir c &&
	mkdir c/a &&
	mkdir c/a.git &&
	(cd c/a.git && git init --bare) &&
	echo 1 >c/a/a.txt &&
	git --git-dir c/a.git --work-tree=c/a add a.txt &&
	git --git-dir c/a.git --work-tree=c/a commit -m "initial" &&
	git --git-dir=c/a.git log -1 --format=%s >expected &&
	git -C c --git-dir=a.git log -1 --format=%s >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0056-git-C/c/a.git/
[master (root-commit) cac529a] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
ok 4 - Effect on --git-dir option: "-C c --git-dir=a.git" is equivalent to "--git-dir c/a.git"

expecting success of 0056.5 'Order should not matter: "--git-dir=a.git -C c" is equivalent to "-C c --git-dir=a.git"': 
	git -C c --git-dir=a.git log -1 --format=%s >expected &&
	git --git-dir=a.git -C c log -1 --format=%s >actual &&
	test_cmp expected actual

ok 5 - Order should not matter: "--git-dir=a.git -C c" is equivalent to "-C c --git-dir=a.git"

expecting success of 0056.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"': 
	rm c/a/a.txt &&
	git --git-dir=c/a.git --work-tree=c/a status >expected &&
	git -C c/a.git --work-tree=../a status >actual &&
	test_cmp expected actual

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"

expecting success of 0056.7 'Order should not matter: "--work-tree=../a -C c/a.git" is equivalent to "-C c/a.git --work-tree=../a"': 
	git -C c/a.git --work-tree=../a status >expected &&
	git --work-tree=../a -C c/a.git status >actual &&
	test_cmp expected actual

ok 7 - Order should not matter: "--work-tree=../a -C c/a.git" is equivalent to "-C c/a.git --work-tree=../a"

expecting success of 0056.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"': 
	git --git-dir=c/a.git --work-tree=c/a status >expected &&
	git -C c --git-dir=a.git --work-tree=a status >actual &&
	test_cmp expected actual

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"

expecting success of 0056.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"': 
	git -C c --git-dir=a.git --work-tree=a status >expected &&
	git --git-dir=a.git -C c --work-tree=a status >actual &&
	test_cmp expected actual

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"

expecting success of 0056.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"': 
	git -C c --git-dir=a.git --work-tree=a status >expected &&
	git --git-dir=a.git --work-tree=a -C c status >actual &&
	test_cmp expected actual

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"

expecting success of 0056.11 'Relative followed by fullpath: "-C ./here -C /there" is equivalent to "-C /there"': 
	echo "initial in dir1/dir2" >expected &&
	git -C dir1 -C "$(pwd)/dir1/dir2" log --format=%s >actual &&
	test_cmp expected actual

ok 11 - Relative followed by fullpath: "-C ./here -C /there" is equivalent to "-C /there"

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0021-conversion.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/.git/
expecting success of 0021.1 'setup': 
	git config filter.rot13.smudge ./rot13.sh &&
	git config filter.rot13.clean ./rot13.sh &&

	{
	    echo "*.t filter=rot13" &&
	    echo "*.i ident"
	} >.gitattributes &&

	{
	    echo a b c d e f g h i j k l m &&
	    echo n o p q r s t u v w x y z &&
	    echo '$Id$'
	} >test &&
	cat test >test.t &&
	cat test >test.o &&
	cat test >test.i &&
	git add test test.t test.i &&
	rm -f test test.t test.i &&
	git checkout -- test test.t test.i &&

	echo "content-test2" >test2.o &&
	echo "content-test3 - filename with special characters" >"test3 'sq',\$x=.o"

ok 1 - setup

expecting success of 0021.2 'check': 

	test_cmp test.o test &&
	test_cmp test.o test.t &&

	# ident should be stripped in the repository
	git diff --raw --exit-code :test :test.i &&
	id=$(git rev-parse --verify :test) &&
	embedded=$(sed -ne "$script" test.i) &&
	test "z$id" = "z$embedded" &&

	git cat-file blob :test.t >test.r &&

	./rot13.sh <test.o >test.t &&
	test_cmp test.r test.t

ok 2 - check

expecting success of 0021.3 'expanded_in_repo': 
	cat >expanded-keywords.0 <<-\EOF &&
	File with expanded keywords
	$Id$
	$Id:$
	$Id: 0000000000000000000000000000000000000000 $
	$Id: NoSpaceAtEnd$
	$Id:NoSpaceAtFront $
	$Id:NoSpaceAtEitherEnd$
	$Id: NoTerminatingSymbol
	$Id: Foreign Commit With Spaces $
	EOF

	{
		cat expanded-keywords.0 &&
		printf "\$Id: NoTerminatingSymbolAtEOF"
	} >expanded-keywords &&
	cat expanded-keywords >expanded-keywords-crlf &&
	git add expanded-keywords expanded-keywords-crlf &&
	git commit -m "File with keywords expanded" &&
	id=$(git rev-parse --verify :expanded-keywords) &&

	cat >expected-output.0 <<-EOF &&
	File with expanded keywords
	\$Id: $id \$
	\$Id: $id \$
	\$Id: $id \$
	\$Id: $id \$
	\$Id: $id \$
	\$Id: $id \$
	\$Id: NoTerminatingSymbol
	\$Id: Foreign Commit With Spaces \$
	EOF
	{
		cat expected-output.0 &&
		printf "\$Id: NoTerminatingSymbolAtEOF"
	} >expected-output &&
	{
		append_cr <expected-output.0 &&
		printf "\$Id: NoTerminatingSymbolAtEOF"
	} >expected-output-crlf &&
	{
		echo "expanded-keywords ident" &&
		echo "expanded-keywords-crlf ident text eol=crlf"
	} >>.gitattributes &&

	rm -f expanded-keywords expanded-keywords-crlf &&

	git checkout -- expanded-keywords &&
	test_cmp expected-output expanded-keywords &&

	git checkout -- expanded-keywords-crlf &&
	test_cmp expected-output-crlf expanded-keywords-crlf

[main (root-commit) bf31399] File with keywords expanded
 Author: A U Thor <author@example.com>
 5 files changed, 29 insertions(+)
 create mode 100644 expanded-keywords
 create mode 100644 expanded-keywords-crlf
 create mode 100644 test
 create mode 100644 test.i
 create mode 100644 test.t
ok 3 - expanded_in_repo

expecting success of 0021.4 'filter shell-escaped filenames': 
	cat >argc.sh <<-EOF &&
	#!$SHELL_PATH
	cat >/dev/null
	echo argc: \$# "\$@"
	EOF
	normal=name-no-magic &&
	special="name  with 'sq' and \$x" &&
	echo some test text >"$normal" &&
	echo some test text >"$special" &&
	git add "$normal" "$special" &&
	git commit -q -m "add files" &&
	echo "name* filter=argc" >.gitattributes &&

	# delete the files and check them out again, using a smudge filter
	# that will count the args and echo the command-line back to us
	test_config filter.argc.smudge "sh ./argc.sh %f" &&
	rm "$normal" "$special" &&
	git checkout -- "$normal" "$special" &&

	# make sure argc.sh counted the right number of args
	echo "argc: 1 $normal" >expect &&
	test_cmp expect "$normal" &&
	echo "argc: 1 $special" >expect &&
	test_cmp expect "$special" &&

	# do the same thing, but with more args in the filter expression
	test_config filter.argc.smudge "sh ./argc.sh %f --my-extra-arg" &&
	rm "$normal" "$special" &&
	git checkout -- "$normal" "$special" &&

	# make sure argc.sh counted the right number of args
	echo "argc: 2 $normal --my-extra-arg" >expect &&
	test_cmp expect "$normal" &&
	echo "argc: 2 $special --my-extra-arg" >expect &&
	test_cmp expect "$special" &&
	:

ok 4 - filter shell-escaped filenames

expecting success of 0021.5 'required filter should filter data': 
	test_config filter.required.smudge ./rot13.sh &&
	test_config filter.required.clean ./rot13.sh &&
	test_config filter.required.required true &&

	echo "*.r filter=required" >.gitattributes &&

	cat test.o >test.r &&
	git add test.r &&

	rm -f test.r &&
	git checkout -- test.r &&
	test_cmp test.o test.r &&

	./rot13.sh <test.o >expected &&
	git cat-file blob :test.r >actual &&
	test_cmp expected actual

ok 5 - required filter should filter data

expecting success of 0021.6 'required filter smudge failure': 
	test_config filter.failsmudge.smudge false &&
	test_config filter.failsmudge.clean cat &&
	test_config filter.failsmudge.required true &&

	echo "*.fs filter=failsmudge" >.gitattributes &&

	echo test >test.fs &&
	git add test.fs &&
	rm -f test.fs &&
	test_must_fail git checkout -- test.fs

error: external filter 'false' failed 1
error: external filter 'false' failed
fatal: test.fs: smudge filter failsmudge failed
ok 6 - required filter smudge failure

expecting success of 0021.7 'required filter clean failure': 
	test_config filter.failclean.smudge cat &&
	test_config filter.failclean.clean false &&
	test_config filter.failclean.required true &&

	echo "*.fc filter=failclean" >.gitattributes &&

	echo test >test.fc &&
	test_must_fail git add test.fc

error: external filter 'false' failed 1
error: external filter 'false' failed
fatal: test.fc: clean filter 'failclean' failed
ok 7 - required filter clean failure

expecting success of 0021.8 'required filter with absent clean field': 
	test_config filter.absentclean.smudge cat &&
	test_config filter.absentclean.required true &&

	echo "*.ac filter=absentclean" >.gitattributes &&

	echo test >test.ac &&
	test_must_fail git add test.ac 2>stderr &&
	test_i18ngrep "fatal: test.ac: clean filter .absentclean. failed" stderr

fatal: test.ac: clean filter 'absentclean' failed
ok 8 - required filter with absent clean field

expecting success of 0021.9 'required filter with absent smudge field': 
	test_config filter.absentsmudge.clean cat &&
	test_config filter.absentsmudge.required true &&

	echo "*.as filter=absentsmudge" >.gitattributes &&

	echo test >test.as &&
	git add test.as &&
	rm -f test.as &&
	test_must_fail git checkout -- test.as 2>stderr &&
	test_i18ngrep "fatal: test.as: smudge filter absentsmudge failed" stderr

fatal: test.as: smudge filter absentsmudge failed
ok 9 - required filter with absent smudge field

expecting success of 0021.10 'filtering large input to small output should use little memory': 
	test_config filter.devnull.clean "cat >/dev/null" &&
	test_config filter.devnull.required true &&
	for i in $(test_seq 1 30); do printf "%1048576d" 1 || return 1; done >30MB &&
	echo "30MB filter=devnull" >.gitattributes &&
	GIT_MMAP_LIMIT=1m GIT_ALLOC_LIMIT=1m git add 30MB

ok 10 - filtering large input to small output should use little memory

expecting success of 0021.11 'filter that does not read is fine': 
	test-tool genrandom foo $((128 * 1024 + 1)) >big &&
	echo "big filter=epipe" >.gitattributes &&
	test_config filter.epipe.clean "echo xyzzy" &&
	git add big &&
	git cat-file blob :big >actual &&
	echo xyzzy >expect &&
	test_cmp expect actual

ok 11 - filter that does not read is fine

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
ok 12 # skip filter large file (missing EXPENSIVE)

expecting success of 0021.13 'filter: clean empty file': 
	test_config filter.in-repo-header.clean  "echo cleaned && cat" &&
	test_config filter.in-repo-header.smudge "sed 1d" &&

	echo "empty-in-worktree    filter=in-repo-header" >>.gitattributes &&
	>empty-in-worktree &&

	echo cleaned >expected &&
	git add empty-in-worktree &&
	git show :empty-in-worktree >actual &&
	test_cmp expected actual

ok 13 - filter: clean empty file

expecting success of 0021.14 'filter: smudge empty file': 
	test_config filter.empty-in-repo.clean "cat >/dev/null" &&
	test_config filter.empty-in-repo.smudge "echo smudged && cat" &&

	echo "empty-in-repo filter=empty-in-repo" >>.gitattributes &&
	echo dead data walking >empty-in-repo &&
	git add empty-in-repo &&

	echo smudged >expected &&
	git checkout-index --prefix=filtered- empty-in-repo &&
	test_cmp expected filtered-empty-in-repo

ok 14 - filter: smudge empty file

expecting success of 0021.15 'disable filter with empty override': 
	test_config_global filter.disable.smudge false &&
	test_config_global filter.disable.clean false &&
	test_config filter.disable.smudge false &&
	test_config filter.disable.clean false &&

	echo "*.disable filter=disable" >.gitattributes &&

	echo test >test.disable &&
	git -c filter.disable.clean= add test.disable 2>err &&
	test_must_be_empty err &&
	rm -f test.disable &&
	git -c filter.disable.smudge= checkout -- test.disable 2>err &&
	test_must_be_empty err

ok 15 - disable filter with empty override

expecting success of 0021.16 'diff does not reuse worktree files that need cleaning': 
	test_config filter.counter.clean "echo . >>count; sed s/^/clean:/" &&
	echo "file filter=counter" >.gitattributes &&
	test_commit one file &&
	test_commit two file &&

	>count &&
	git diff-tree -p HEAD &&
	test_line_count = 0 count

[main 2e1b3a0] one
 Author: A U Thor <author@example.com>
 9 files changed, 10 insertions(+)
 create mode 100644 30MB
 create mode 100644 big
 create mode 100644 empty-in-repo
 create mode 100644 empty-in-worktree
 create mode 100644 file
 create mode 100644 test.as
 create mode 100644 test.disable
 create mode 100644 test.fs
 create mode 100644 test.r
[main 5763447] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
57634479428deffd4cbb8230d4ff66a3801fc1be
diff --git a/file b/file
index e4a1655..0c54b7b 100644
--- a/file
+++ b/file
@@ -1 +1 @@
-clean:one
+clean:two
ok 16 - diff does not reuse worktree files that need cleaning

expecting success of 0021.17 'required process filter should filter data': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	test_config_global filter.protocol.required true &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&
		git add . &&
		git commit -m "test commit 1" &&
		git branch empty-branch &&

		cp "$TEST_ROOT/test.o" test.r &&
		cp "$TEST_ROOT/test2.o" test2.r &&
		mkdir testsubdir &&
		cp "$TEST_ROOT/test3 'sq',\$x=.o" "testsubdir/test3 'sq',\$x=.r" &&
		>test4-empty.r &&

		S=$(test_file_size test.r) &&
		S2=$(test_file_size test2.r) &&
		S3=$(test_file_size "testsubdir/test3 'sq',\$x=.r") &&
		M=$(git hash-object test.r) &&
		M2=$(git hash-object test2.r) &&
		M3=$(git hash-object "testsubdir/test3 'sq',\$x=.r") &&
		EMPTY=$(git hash-object /dev/null) &&

		filter_git add . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: clean test.r $S [OK] -- OUT: $S . [OK]
			IN: clean test2.r $S2 [OK] -- OUT: $S2 . [OK]
			IN: clean test4-empty.r 0 [OK] -- OUT: 0  [OK]
			IN: clean testsubdir/test3 'sq',\$x=.r $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_count expected.log debug.log &&

		git commit -m "test commit 2" &&
		MAIN=$(git rev-parse --verify main) &&
		META="ref=refs/heads/main treeish=$MAIN" &&
		rm -f test2.r "testsubdir/test3 'sq',\$x=.r" &&

		filter_git checkout --quiet --no-progress . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test2.r blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		# Make sure that the file appears dirty, so checkout below has to
		# run the configured filter.
		touch test.r &&
		filter_git checkout --quiet --no-progress empty-branch &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: clean test.r $S [OK] -- OUT: $S . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		filter_git checkout --quiet --no-progress main &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.r &&
		test_cmp_committed_rot13 "$TEST_ROOT/test2.o" test2.r &&
		test_cmp_committed_rot13 "$TEST_ROOT/test3 'sq',\$x=.o" "testsubdir/test3 'sq',\$x=.r"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
[main (root-commit) 56d459b] test commit 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .gitattributes
[main 9ea74df] test commit 2
 Author: A U Thor <author@example.com>
 4 files changed, 5 insertions(+)
 create mode 100644 test.r
 create mode 100644 test2.r
 create mode 100644 test4-empty.r
 create mode 100644 testsubdir/test3 'sq',$x=.r
ok 17 - required process filter should filter data

expecting success of 0021.18 'required process filter should filter data for various subcommands': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	test_config_global filter.protocol.required true &&
	(
		cd repo &&

		S=$(test_file_size test.r) &&
		S2=$(test_file_size test2.r) &&
		S3=$(test_file_size "testsubdir/test3 'sq',\$x=.r") &&
		M=$(git hash-object test.r) &&
		M2=$(git hash-object test2.r) &&
		M3=$(git hash-object "testsubdir/test3 'sq',\$x=.r") &&
		EMPTY=$(git hash-object /dev/null) &&

		MAIN=$(git rev-parse --verify main) &&

		cp "$TEST_ROOT/test.o" test5.r &&
		git add test5.r &&
		git commit -m "test commit 3" &&
		git checkout empty-branch &&
		filter_git rebase --onto empty-branch main^^ main &&
		MAIN2=$(git rev-parse --verify main) &&
		META="ref=refs/heads/main treeish=$MAIN2" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge test5.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		git reset --hard empty-branch &&
		filter_git reset --hard $MAIN &&
		META="treeish=$MAIN" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		git branch old-main $MAIN &&
		git reset --hard empty-branch &&
		filter_git reset --hard old-main &&
		META="ref=refs/heads/old-main treeish=$MAIN" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		git checkout -b merge empty-branch &&
		git branch -f main $MAIN2 &&
		filter_git merge main &&
		META="treeish=$MAIN2" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge test5.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		filter_git archive main >/dev/null &&
		META="ref=refs/heads/main treeish=$MAIN2" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge test5.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		TREE="$(git rev-parse $MAIN2^{tree})" &&
		filter_git archive $TREE >/dev/null &&
		META="treeish=$TREE" &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge test.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r $META blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			IN: smudge test4-empty.r $META blob=$EMPTY 0 [OK] -- OUT: 0  [OK]
			IN: smudge test5.r $META blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge testsubdir/test3 'sq',\$x=.r $META blob=$M3 $S3 [OK] -- OUT: $S3 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log
	)

[main 07631f7] test commit 3
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 test5.r
Switched to branch 'empty-branch'
Current branch main is up to date.
HEAD is now at 56d459b test commit 1
HEAD is now at 9ea74df test commit 2
HEAD is now at 56d459b test commit 1
HEAD is now at 9ea74df test commit 2
Switched to a new branch 'merge'
Updating 56d459b..07631f7
Fast-forward
 test.r                      | 3 +++
 test2.r                     | 1 +
 test4-empty.r               | 0
 test5.r                     | 3 +++
 testsubdir/test3 'sq',$x=.r | 1 +
 5 files changed, 8 insertions(+)
 create mode 100644 test.r
 create mode 100644 test2.r
 create mode 100644 test4-empty.r
 create mode 100644 test5.r
 create mode 100644 testsubdir/test3 'sq',$x=.r
ok 18 - required process filter should filter data for various subcommands

expecting success of 0021.19 'required process filter takes precedence': 
	test_config_global filter.protocol.clean false &&
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean" &&
	test_config_global filter.protocol.required true &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&
		cp "$TEST_ROOT/test.o" test.r &&
		S=$(test_file_size test.r) &&

		# Check that the process filter is invoked here
		filter_git add . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: clean test.r $S [OK] -- OUT: $S . [OK]
			STOP
		EOF
		test_cmp_count expected.log debug.log
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
ok 19 - required process filter takes precedence

expecting success of 0021.20 'required process filter should be used only for "clean" operation only': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean" &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&
		cp "$TEST_ROOT/test.o" test.r &&
		S=$(test_file_size test.r) &&

		filter_git add . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: clean test.r $S [OK] -- OUT: $S . [OK]
			STOP
		EOF
		test_cmp_count expected.log debug.log &&

		rm test.r &&

		filter_git checkout --quiet --no-progress . &&
		# If the filter would be used for "smudge", too, we would see
		# "IN: smudge test.r 57 [OK] -- OUT: 57 . [OK]" here
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
ok 20 - required process filter should be used only for "clean" operation only

expecting success of 0021.21 'required process filter should process multiple packets': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	test_config_global filter.protocol.required true &&

	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		# Generate data requiring 1, 2, 3 packets
		S=65516 && # PKTLINE_DATA_MAXLEN -> Maximal size of a packet
		generate_random_characters $(($S    )) 1pkt_1__.file &&
		generate_random_characters $(($S  +1)) 2pkt_1+1.file &&
		generate_random_characters $(($S*2-1)) 2pkt_2-1.file &&
		generate_random_characters $(($S*2  )) 2pkt_2__.file &&
		generate_random_characters $(($S*2+1)) 3pkt_2+1.file &&

		for FILE in "$TEST_ROOT"/*.file
		do
			cp "$FILE" . &&
			rot13.sh <"$FILE" >"$FILE.rot13" || return 1
		done &&

		echo "*.file filter=protocol" >.gitattributes &&
		filter_git add *.file .gitattributes &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: clean 1pkt_1__.file $(($S    )) [OK] -- OUT: $(($S    )) . [OK]
			IN: clean 2pkt_1+1.file $(($S  +1)) [OK] -- OUT: $(($S  +1)) .. [OK]
			IN: clean 2pkt_2-1.file $(($S*2-1)) [OK] -- OUT: $(($S*2-1)) .. [OK]
			IN: clean 2pkt_2__.file $(($S*2  )) [OK] -- OUT: $(($S*2  )) .. [OK]
			IN: clean 3pkt_2+1.file $(($S*2+1)) [OK] -- OUT: $(($S*2+1)) ... [OK]
			STOP
		EOF
		test_cmp_count expected.log debug.log &&

		M1="blob=$(git hash-object 1pkt_1__.file)" &&
		M2="blob=$(git hash-object 2pkt_1+1.file)" &&
		M3="blob=$(git hash-object 2pkt_2-1.file)" &&
		M4="blob=$(git hash-object 2pkt_2__.file)" &&
		M5="blob=$(git hash-object 3pkt_2+1.file)" &&
		rm -f *.file debug.log &&

		filter_git checkout --quiet --no-progress -- *.file &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge 1pkt_1__.file $M1 $(($S    )) [OK] -- OUT: $(($S    )) . [OK]
			IN: smudge 2pkt_1+1.file $M2 $(($S  +1)) [OK] -- OUT: $(($S  +1)) .. [OK]
			IN: smudge 2pkt_2-1.file $M3 $(($S*2-1)) [OK] -- OUT: $(($S*2-1)) .. [OK]
			IN: smudge 2pkt_2__.file $M4 $(($S*2  )) [OK] -- OUT: $(($S*2  )) .. [OK]
			IN: smudge 3pkt_2+1.file $M5 $(($S*2+1)) [OK] -- OUT: $(($S*2+1)) ... [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		for FILE in *.file
		do
			test_cmp_committed_rot13 "$TEST_ROOT/$FILE" $FILE || return 1
		done
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
ok 21 - required process filter should process multiple packets

expecting success of 0021.22 'required process filter with clean error should fail': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	test_config_global filter.protocol.required true &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&

		cp "$TEST_ROOT/test.o" test.r &&
		echo "this is going to fail" >clean-write-fail.r &&
		echo "content-test3-subdir" >test3.r &&

		test_must_fail git add .
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
fatal: clean write error
error: external filter 'test-tool rot13-filter --log=debug.log clean smudge' failed
fatal: clean-write-fail.r: clean filter 'protocol' failed
ok 22 - required process filter with clean error should fail

expecting success of 0021.23 'process filter should restart after unexpected write failure': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&

		cp "$TEST_ROOT/test.o" test.r &&
		cp "$TEST_ROOT/test2.o" test2.r &&
		echo "this is going to fail" >smudge-write-fail.o &&
		cp smudge-write-fail.o smudge-write-fail.r &&

		S=$(test_file_size test.r) &&
		S2=$(test_file_size test2.r) &&
		SF=$(test_file_size smudge-write-fail.r) &&
		M=$(git hash-object test.r) &&
		M2=$(git hash-object test2.r) &&
		MF=$(git hash-object smudge-write-fail.r) &&
		rm -f debug.log &&

		git add . &&
		rm -f *.r &&

		rm -f debug.log &&
		git checkout --quiet --no-progress . 2>git-stderr.log &&

		grep "smudge write error" git-stderr.log &&
		test_i18ngrep "error: external filter" git-stderr.log &&

		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge smudge-write-fail.r blob=$MF $SF [OK] -- [WRITE FAIL]
			START
			init handshake complete
			IN: smudge test.r blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.r &&
		test_cmp_committed_rot13 "$TEST_ROOT/test2.o" test2.r &&

		# Smudge failed
		! test_cmp smudge-write-fail.o smudge-write-fail.r &&
		rot13.sh <smudge-write-fail.o >expected &&
		git cat-file blob :smudge-write-fail.r >actual &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
fatal: smudge write error
error: external filter 'test-tool rot13-filter --log=debug.log clean smudge' failed
--- smudge-write-fail.o	2022-12-28 07:30:53.657434606 +0000
+++ smudge-write-fail.r	2022-12-28 07:30:54.047449042 +0000
@@ -1 +1 @@
-this is going to fail
+guvf vf tbvat gb snvy
ok 23 - process filter should restart after unexpected write failure

expecting success of 0021.24 'process filter should not be restarted if it signals an error': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&

		cp "$TEST_ROOT/test.o" test.r &&
		cp "$TEST_ROOT/test2.o" test2.r &&
		echo "this will cause an error" >error.o &&
		cp error.o error.r &&

		S=$(test_file_size test.r) &&
		S2=$(test_file_size test2.r) &&
		SE=$(test_file_size error.r) &&
		M=$(git hash-object test.r) &&
		M2=$(git hash-object test2.r) &&
		ME=$(git hash-object error.r) &&
		rm -f debug.log &&

		git add . &&
		rm -f *.r &&

		filter_git checkout --quiet --no-progress . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge error.r blob=$ME $SE [OK] -- [ERROR]
			IN: smudge test.r blob=$M $S [OK] -- OUT: $S . [OK]
			IN: smudge test2.r blob=$M2 $S2 [OK] -- OUT: $S2 . [OK]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.r &&
		test_cmp_committed_rot13 "$TEST_ROOT/test2.o" test2.r &&
		test_cmp error.o error.r
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
ok 24 - process filter should not be restarted if it signals an error

expecting success of 0021.25 'process filter abort stops processing of all further files': 
	test_config_global filter.protocol.process "test-tool rot13-filter --log=debug.log clean smudge" &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&

		cp "$TEST_ROOT/test.o" test.r &&
		cp "$TEST_ROOT/test2.o" test2.r &&
		echo "error this blob and all future blobs" >abort.o &&
		cp abort.o abort.r &&

		M="blob=$(git hash-object abort.r)" &&
		rm -f debug.log &&
		SA=$(test_file_size abort.r) &&

		git add . &&
		rm -f *.r &&


		# Note: This test assumes that Git filters files in alphabetical
		# order ("abort.r" before "test.r").
		filter_git checkout --quiet --no-progress . &&
		cat >expected.log <<-EOF &&
			START
			init handshake complete
			IN: smudge abort.r $M $SA [OK] -- [ABORT]
			STOP
		EOF
		test_cmp_exclude_clean expected.log debug.log &&

		test_cmp "$TEST_ROOT/test.o" test.r &&
		test_cmp "$TEST_ROOT/test2.o" test2.r &&
		test_cmp abort.o abort.r
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
ok 25 - process filter abort stops processing of all further files

expecting success of 0021.26 'invalid process filter must fail (and not hang!)': 
	test_config_global filter.protocol.process cat &&
	test_config_global filter.protocol.required true &&
	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&

		echo "*.r filter=protocol" >.gitattributes &&

		cp "$TEST_ROOT/test.o" test.r &&
		test_must_fail git add . 2>git-stderr.log &&
		grep "expected git-filter-server" git-stderr.log
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
error: Unexpected line 'git-filter-client', expected git-filter-server
ok 26 - invalid process filter must fail (and not hang!)

expecting success of 0021.27 'delayed checkout in process filter': 
	test_config_global filter.a.process "test-tool rot13-filter --log=a.log clean smudge delay" &&
	test_config_global filter.a.required true &&
	test_config_global filter.b.process "test-tool rot13-filter --log=b.log clean smudge delay" &&
	test_config_global filter.b.required true &&

	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&
		echo "*.a filter=a" >.gitattributes &&
		echo "*.b filter=b" >>.gitattributes &&
		cp "$TEST_ROOT/test.o" test.a &&
		cp "$TEST_ROOT/test.o" test-delay10.a &&
		cp "$TEST_ROOT/test.o" test-delay11.a &&
		cp "$TEST_ROOT/test.o" test-delay20.a &&
		cp "$TEST_ROOT/test.o" test-delay10.b &&
		git add . &&
		git commit -m "test commit"
	) &&

	S=$(test_file_size "$TEST_ROOT/test.o") &&
	PM="ref=refs/heads/main treeish=$(git -C repo rev-parse --verify main) " &&
	M="${PM}blob=$(git -C repo rev-parse --verify main:test.a)" &&
	cat >a.exp <<-EOF &&
		START
		init handshake complete
		IN: smudge test.a $M $S [OK] -- OUT: $S . [OK]
		IN: smudge test-delay10.a $M $S [OK] -- [DELAYED]
		IN: smudge test-delay11.a $M $S [OK] -- [DELAYED]
		IN: smudge test-delay20.a $M $S [OK] -- [DELAYED]
		IN: list_available_blobs test-delay10.a test-delay11.a [OK]
		IN: smudge test-delay10.a $M 0 [OK] -- OUT: $S . [OK]
		IN: smudge test-delay11.a $M 0 [OK] -- OUT: $S . [OK]
		IN: list_available_blobs test-delay20.a [OK]
		IN: smudge test-delay20.a $M 0 [OK] -- OUT: $S . [OK]
		IN: list_available_blobs [OK]
		STOP
	EOF
	cat >b.exp <<-EOF &&
		START
		init handshake complete
		IN: smudge test-delay10.b $M $S [OK] -- [DELAYED]
		IN: list_available_blobs test-delay10.b [OK]
		IN: smudge test-delay10.b $M 0 [OK] -- OUT: $S . [OK]
		IN: list_available_blobs [OK]
		STOP
	EOF

	rm -rf repo-cloned &&
	filter_git clone repo repo-cloned &&
	test_cmp_count a.exp repo-cloned/a.log &&
	test_cmp_count b.exp repo-cloned/b.log &&

	(
		cd repo-cloned &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay10.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay11.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay20.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay10.b &&

		rm *.a *.b &&
		filter_git checkout . &&
		# We are not checking out a ref here, so filter out ref metadata.
		sed -e "s!$PM!!" ../a.exp >a.exp.filtered &&
		sed -e "s!$PM!!" ../b.exp >b.exp.filtered &&
		test_cmp_count a.exp.filtered a.log &&
		test_cmp_count b.exp.filtered b.log &&

		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay10.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay11.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay20.a &&
		test_cmp_committed_rot13 "$TEST_ROOT/test.o" test-delay10.b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
[main (root-commit) 27d7fe8] test commit
 Author: A U Thor <author@example.com>
 6 files changed, 17 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 test-delay10.a
 create mode 100644 test-delay10.b
 create mode 100644 test-delay11.a
 create mode 100644 test-delay20.a
 create mode 100644 test.a
Cloning into 'repo-cloned'...
done.
Updated 5 paths from the index
ok 27 - delayed checkout in process filter

expecting success of 0021.28 'missing file in delayed checkout': 
	test_config_global filter.bug.process "test-tool rot13-filter --log=bug.log clean smudge delay" &&
	test_config_global filter.bug.required true &&

	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&
		echo "*.a filter=bug" >.gitattributes &&
		cp "$TEST_ROOT/test.o" missing-delay.a &&
		git add . &&
		git commit -m "test commit"
	) &&

	rm -rf repo-cloned &&
	test_must_fail git clone repo repo-cloned 2>git-stderr.log &&
	grep "error: .missing-delay\.a. was not filtered properly" git-stderr.log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
[main (root-commit) 5567259] test commit
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 missing-delay.a
error: 'missing-delay.a' was not filtered properly
ok 28 - missing file in delayed checkout

expecting success of 0021.29 'invalid file in delayed checkout': 
	test_config_global filter.bug.process "test-tool rot13-filter --log=bug.log clean smudge delay" &&
	test_config_global filter.bug.required true &&

	rm -rf repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&
		echo "*.a filter=bug" >.gitattributes &&
		cp "$TEST_ROOT/test.o" invalid-delay.a &&
		cp "$TEST_ROOT/test.o" unfiltered &&
		git add . &&
		git commit -m "test commit"
	) &&

	rm -rf repo-cloned &&
	test_must_fail git clone repo repo-cloned 2>git-stderr.log &&
	grep "error: external filter .* signaled that .unfiltered. is now available although it has not been delayed earlier" git-stderr.log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
[main (root-commit) 636012f] test commit
 Author: A U Thor <author@example.com>
 3 files changed, 7 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 invalid-delay.a
 create mode 100644 unfiltered
error: external filter 'test-tool rot13-filter --log=bug.log clean smudge delay' signaled that 'unfiltered' is now available although it has not been delayed earlier
ok 29 - invalid file in delayed checkout

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 30 # skip delayed checkout with case-collision don't write to the wrong place (missing CASE_INSENSITIVE_FS of SYMLINKS,CASE_INSENSITIVE_FS)

checking prerequisite: UTF8_NFD_TO_NFC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
	# check whether FS converts nfd unicode to nfc
	auml=$(printf "\303\244")
	aumlcdiar=$(printf "\141\314\210")
	>"$auml" &&
	test -f "$aumlcdiar"

)
prerequisite UTF8_NFD_TO_NFC not satisfied
ok 31 # skip delayed checkout with utf-8-collision don't write to the wrong place (missing UTF8_NFD_TO_NFC of SYMLINKS,UTF8_NFD_TO_NFC)

ok 32 # skip delayed checkout with submodule collision don't write to the wrong place (missing CASE_INSENSITIVE_FS of SYMLINKS,CASE_INSENSITIVE_FS)

expecting success of 0021.33 'setup for progress tests': 
	git init progress &&
	(
		cd progress &&
		git config filter.delay.process "test-tool rot13-filter --log=delay-progress.log clean smudge delay" &&
		git config filter.delay.required true &&

		echo "*.a filter=delay" >.gitattributes &&
		touch test-delay10.a &&
		git add . &&
		git commit -m files
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/progress/.git/
[main (root-commit) 36dc8bf] files
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 .gitattributes
 create mode 100644 test-delay10.a
ok 33 - setup for progress tests

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 0021.34 'delayed checkout shows progress by default on tty (pathspec checkout)': 
		test_delayed_checkout_progress test_terminal git checkout $opt
	
IN: smudge test-delay10.a blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
Filtering content: 100% (1/1)
Filtering content: 100% (1/1), 0 bytes | 0 bytes/s, done.
ok 34 - delayed checkout shows progress by default on tty (pathspec checkout)

expecting success of 0021.35 'delayed checkout ommits progress on non-tty (pathspec checkout)': 
		test_delayed_checkout_progress ! git checkout $opt
	
IN: smudge test-delay10.a blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
ok 35 - delayed checkout ommits progress on non-tty (pathspec checkout)

expecting success of 0021.36 'delayed checkout ommits progress with --quiet (pathspec checkout)': 
		test_delayed_checkout_progress ! test_terminal git checkout --quiet $opt
	
IN: smudge test-delay10.a blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
ok 36 - delayed checkout ommits progress with --quiet (pathspec checkout)

expecting success of 0021.37 'delayed checkout honors --[no]-progress (pathspec checkout)': 
		test_delayed_checkout_progress ! test_terminal git checkout --no-progress $opt &&
		test_delayed_checkout_progress test_terminal git checkout --quiet --progress $opt
	
IN: smudge test-delay10.a blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
IN: smudge test-delay10.a blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
Filtering content: 100% (1/1)
Filtering content: 100% (1/1), 0 bytes | 0 bytes/s, done.
ok 37 - delayed checkout honors --[no]-progress (pathspec checkout)

expecting success of 0021.38 'delayed checkout shows progress by default on tty (branch checkout)': 
		test_delayed_checkout_progress test_terminal git checkout $opt
	
IN: smudge test-delay10.a ref=refs/heads/main treeish=36dc8bfae462bbc71de73591934e95020c6c26ce blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
Filtering content: 100% (1/1)
Filtering content: 100% (1/1), 0 bytes | 0 bytes/s, done.
ok 38 - delayed checkout shows progress by default on tty (branch checkout)

expecting success of 0021.39 'delayed checkout ommits progress on non-tty (branch checkout)': 
		test_delayed_checkout_progress ! git checkout $opt
	
IN: smudge test-delay10.a ref=refs/heads/main treeish=36dc8bfae462bbc71de73591934e95020c6c26ce blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
ok 39 - delayed checkout ommits progress on non-tty (branch checkout)

expecting success of 0021.40 'delayed checkout ommits progress with --quiet (branch checkout)': 
		test_delayed_checkout_progress ! test_terminal git checkout --quiet $opt
	
IN: smudge test-delay10.a ref=refs/heads/main treeish=36dc8bfae462bbc71de73591934e95020c6c26ce blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
ok 40 - delayed checkout ommits progress with --quiet (branch checkout)

expecting success of 0021.41 'delayed checkout honors --[no]-progress (branch checkout)': 
		test_delayed_checkout_progress ! test_terminal git checkout --no-progress $opt &&
		test_delayed_checkout_progress test_terminal git checkout --quiet --progress $opt
	
IN: smudge test-delay10.a ref=refs/heads/main treeish=36dc8bfae462bbc71de73591934e95020c6c26ce blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
IN: smudge test-delay10.a ref=refs/heads/main treeish=36dc8bfae462bbc71de73591934e95020c6c26ce blob=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 [OK] -- [DELAYED]
Filtering content: 100% (1/1)
Filtering content: 100% (1/1), 0 bytes | 0 bytes/s, done.
ok 41 - delayed checkout honors --[no]-progress (branch checkout)

expecting success of 0021.42 'delayed checkout correctly reports the number of updated entries': 
	rm -rf repo &&
	git init repo &&
	(
		cd repo &&
		git config filter.delay.process "test-tool rot13-filter --log=delayed.log clean smudge delay" &&
		git config filter.delay.required true &&

		echo "*.a filter=delay" >.gitattributes &&
		echo a >test-delay10.a &&
		echo a >test-delay11.a &&
		git add . &&
		git commit -m files &&

		rm *.a &&
		git checkout . 2>err &&
		grep "IN: smudge test-delay10.a .* \\[DELAYED\\]" delayed.log &&
		grep "IN: smudge test-delay11.a .* \\[DELAYED\\]" delayed.log &&
		grep "Updated 2 paths from the index" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0021-conversion/repo/.git/
[main (root-commit) 6d52fcb] files
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 test-delay10.a
 create mode 100644 test-delay11.a
IN: smudge test-delay10.a blob=8ba3a16384aacc37d01564b28401755ce8053f51 2 [OK] -- [DELAYED]
IN: smudge test-delay11.a blob=8ba3a16384aacc37d01564b28401755ce8053f51 2 [OK] -- [DELAYED]
Updated 2 paths from the index
ok 42 - delayed checkout correctly reports the number of updated entries

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0060-path-utils.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.git/
expecting success of 0060.1 'basename': test-tool path-utils basename
ok 1 - basename

expecting success of 0060.2 'dirname': test-tool path-utils dirname
ok 2 - dirname

expecting success of 0060.3 'normalize path:  => ': test "$(test-tool path-utils normalize_path_copy '')" = ''
ok 3 - normalize path:  => 

expecting success of 0060.4 'normalize path: . => ': test "$(test-tool path-utils normalize_path_copy '.')" = ''
ok 4 - normalize path: . => 

expecting success of 0060.5 'normalize path: ./ => ': test "$(test-tool path-utils normalize_path_copy './')" = ''
ok 5 - normalize path: ./ => 

expecting success of 0060.6 'normalize path: ./. => ': test "$(test-tool path-utils normalize_path_copy './.')" = ''
ok 6 - normalize path: ./. => 

expecting success of 0060.7 'normalize path: ./.. => ++failed++': test "$(test-tool path-utils normalize_path_copy './..')" = '++failed++'
ok 7 - normalize path: ./.. => ++failed++

expecting success of 0060.8 'normalize path: ../. => ++failed++': test "$(test-tool path-utils normalize_path_copy '../.')" = '++failed++'
ok 8 - normalize path: ../. => ++failed++

expecting success of 0060.9 'normalize path: ./../.// => ++failed++': test "$(test-tool path-utils normalize_path_copy './.././/')" = '++failed++'
ok 9 - normalize path: ./../.// => ++failed++

expecting success of 0060.10 'normalize path: dir/.. => ': test "$(test-tool path-utils normalize_path_copy 'dir/..')" = ''
ok 10 - normalize path: dir/.. => 

expecting success of 0060.11 'normalize path: dir/sub/../.. => ': test "$(test-tool path-utils normalize_path_copy 'dir/sub/../..')" = ''
ok 11 - normalize path: dir/sub/../.. => 

expecting success of 0060.12 'normalize path: dir/sub/../../.. => ++failed++': test "$(test-tool path-utils normalize_path_copy 'dir/sub/../../..')" = '++failed++'
ok 12 - normalize path: dir/sub/../../.. => ++failed++

expecting success of 0060.13 'normalize path: dir => dir': test "$(test-tool path-utils normalize_path_copy 'dir')" = 'dir'
ok 13 - normalize path: dir => dir

expecting success of 0060.14 'normalize path: dir// => dir/': test "$(test-tool path-utils normalize_path_copy 'dir//')" = 'dir/'
ok 14 - normalize path: dir// => dir/

expecting success of 0060.15 'normalize path: ./dir => dir': test "$(test-tool path-utils normalize_path_copy './dir')" = 'dir'
ok 15 - normalize path: ./dir => dir

expecting success of 0060.16 'normalize path: dir/. => dir/': test "$(test-tool path-utils normalize_path_copy 'dir/.')" = 'dir/'
ok 16 - normalize path: dir/. => dir/

expecting success of 0060.17 'normalize path: dir///./ => dir/': test "$(test-tool path-utils normalize_path_copy 'dir///./')" = 'dir/'
ok 17 - normalize path: dir///./ => dir/

expecting success of 0060.18 'normalize path: dir//sub/.. => dir/': test "$(test-tool path-utils normalize_path_copy 'dir//sub/..')" = 'dir/'
ok 18 - normalize path: dir//sub/.. => dir/

expecting success of 0060.19 'normalize path: dir/sub/../ => dir/': test "$(test-tool path-utils normalize_path_copy 'dir/sub/../')" = 'dir/'
ok 19 - normalize path: dir/sub/../ => dir/

expecting success of 0060.20 'normalize path: dir/sub/../. => dir/': test "$(test-tool path-utils normalize_path_copy 'dir/sub/../.')" = 'dir/'
ok 20 - normalize path: dir/sub/../. => dir/

expecting success of 0060.21 'normalize path: dir/s1/../s2/ => dir/s2/': test "$(test-tool path-utils normalize_path_copy 'dir/s1/../s2/')" = 'dir/s2/'
ok 21 - normalize path: dir/s1/../s2/ => dir/s2/

expecting success of 0060.22 'normalize path: d1/s1///s2/..//../s3/ => d1/s3/': test "$(test-tool path-utils normalize_path_copy 'd1/s1///s2/..//../s3/')" = 'd1/s3/'
ok 22 - normalize path: d1/s1///s2/..//../s3/ => d1/s3/

expecting success of 0060.23 'normalize path: d1/s1//../s2/../../d2 => d2': test "$(test-tool path-utils normalize_path_copy 'd1/s1//../s2/../../d2')" = 'd2'
ok 23 - normalize path: d1/s1//../s2/../../d2 => d2

expecting success of 0060.24 'normalize path: d1/.../d2 => d1/.../d2': test "$(test-tool path-utils normalize_path_copy 'd1/.../d2')" = 'd1/.../d2'
ok 24 - normalize path: d1/.../d2 => d1/.../d2

expecting success of 0060.25 'normalize path: d1/..././../d2 => d1/d2': test "$(test-tool path-utils normalize_path_copy 'd1/..././../d2')" = 'd1/d2'
ok 25 - normalize path: d1/..././../d2 => d1/d2

expecting success of 0060.26 'normalize path: / => /': test "$(test-tool path-utils normalize_path_copy '/')" = '/'
ok 26 - normalize path: / => /

expecting success of 0060.27 'normalize path: // => /': test "$(test-tool path-utils normalize_path_copy '//')" = '/'
ok 27 - normalize path: // => /

expecting success of 0060.28 'normalize path: /// => /': test "$(test-tool path-utils normalize_path_copy '///')" = '/'
ok 28 - normalize path: /// => /

expecting success of 0060.29 'normalize path: /. => /': test "$(test-tool path-utils normalize_path_copy '/.')" = '/'
ok 29 - normalize path: /. => /

expecting success of 0060.30 'normalize path: /./ => /': test "$(test-tool path-utils normalize_path_copy '/./')" = '/'
ok 30 - normalize path: /./ => /

expecting success of 0060.31 'normalize path: /./.. => ++failed++': test "$(test-tool path-utils normalize_path_copy '/./..')" = '++failed++'
ok 31 - normalize path: /./.. => ++failed++

expecting success of 0060.32 'normalize path: /../. => ++failed++': test "$(test-tool path-utils normalize_path_copy '/../.')" = '++failed++'
ok 32 - normalize path: /../. => ++failed++

expecting success of 0060.33 'normalize path: /./../.// => ++failed++': test "$(test-tool path-utils normalize_path_copy '/./.././/')" = '++failed++'
ok 33 - normalize path: /./../.// => ++failed++

expecting success of 0060.34 'normalize path: /dir/.. => /': test "$(test-tool path-utils normalize_path_copy '/dir/..')" = '/'
ok 34 - normalize path: /dir/.. => /

expecting success of 0060.35 'normalize path: /dir/sub/../.. => /': test "$(test-tool path-utils normalize_path_copy '/dir/sub/../..')" = '/'
ok 35 - normalize path: /dir/sub/../.. => /

expecting success of 0060.36 'normalize path: /dir/sub/../../.. => ++failed++': test "$(test-tool path-utils normalize_path_copy '/dir/sub/../../..')" = '++failed++'
ok 36 - normalize path: /dir/sub/../../.. => ++failed++

expecting success of 0060.37 'normalize path: /dir => /dir': test "$(test-tool path-utils normalize_path_copy '/dir')" = '/dir'
ok 37 - normalize path: /dir => /dir

expecting success of 0060.38 'normalize path: /dir// => /dir/': test "$(test-tool path-utils normalize_path_copy '/dir//')" = '/dir/'
ok 38 - normalize path: /dir// => /dir/

expecting success of 0060.39 'normalize path: /./dir => /dir': test "$(test-tool path-utils normalize_path_copy '/./dir')" = '/dir'
ok 39 - normalize path: /./dir => /dir

expecting success of 0060.40 'normalize path: /dir/. => /dir/': test "$(test-tool path-utils normalize_path_copy '/dir/.')" = '/dir/'
ok 40 - normalize path: /dir/. => /dir/

expecting success of 0060.41 'normalize path: /dir///./ => /dir/': test "$(test-tool path-utils normalize_path_copy '/dir///./')" = '/dir/'
ok 41 - normalize path: /dir///./ => /dir/

expecting success of 0060.42 'normalize path: /dir//sub/.. => /dir/': test "$(test-tool path-utils normalize_path_copy '/dir//sub/..')" = '/dir/'
ok 42 - normalize path: /dir//sub/.. => /dir/

expecting success of 0060.43 'normalize path: /dir/sub/../ => /dir/': test "$(test-tool path-utils normalize_path_copy '/dir/sub/../')" = '/dir/'
ok 43 - normalize path: /dir/sub/../ => /dir/

expecting success of 0060.44 'normalize path: //dir/sub/../. => /dir/': test "$(test-tool path-utils normalize_path_copy '//dir/sub/../.')" = '/dir/'
ok 44 - normalize path: //dir/sub/../. => /dir/

expecting success of 0060.45 'normalize path: /dir/s1/../s2/ => /dir/s2/': test "$(test-tool path-utils normalize_path_copy '/dir/s1/../s2/')" = '/dir/s2/'
ok 45 - normalize path: /dir/s1/../s2/ => /dir/s2/

expecting success of 0060.46 'normalize path: /d1/s1///s2/..//../s3/ => /d1/s3/': test "$(test-tool path-utils normalize_path_copy '/d1/s1///s2/..//../s3/')" = '/d1/s3/'
ok 46 - normalize path: /d1/s1///s2/..//../s3/ => /d1/s3/

expecting success of 0060.47 'normalize path: /d1/s1//../s2/../../d2 => /d2': test "$(test-tool path-utils normalize_path_copy '/d1/s1//../s2/../../d2')" = '/d2'
ok 47 - normalize path: /d1/s1//../s2/../../d2 => /d2

expecting success of 0060.48 'normalize path: /d1/.../d2 => /d1/.../d2': test "$(test-tool path-utils normalize_path_copy '/d1/.../d2')" = '/d1/.../d2'
ok 48 - normalize path: /d1/.../d2 => /d1/.../d2

expecting success of 0060.49 'normalize path: /d1/..././../d2 => /d1/d2': test "$(test-tool path-utils normalize_path_copy '/d1/..././../d2')" = '/d1/d2'
ok 49 - normalize path: /d1/..././../d2 => /d1/d2

expecting success of 0060.50 'longest ancestor: / / => -1': actual=$(test-tool path-utils longest_ancestor_length '/' '/') &&
	 test "$actual" = '-1'
ok 50 - longest ancestor: / / => -1

expecting success of 0060.51 'longest ancestor: /foo / => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/') &&
	 test "$actual" = '0'
ok 51 - longest ancestor: /foo / => 0

expecting success of 0060.52 'longest ancestor: /foo /fo => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/fo') &&
	 test "$actual" = '-1'
ok 52 - longest ancestor: /foo /fo => -1

expecting success of 0060.53 'longest ancestor: /foo /foo => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/foo') &&
	 test "$actual" = '-1'
ok 53 - longest ancestor: /foo /foo => -1

expecting success of 0060.54 'longest ancestor: /foo /bar => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/bar') &&
	 test "$actual" = '-1'
ok 54 - longest ancestor: /foo /bar => -1

expecting success of 0060.55 'longest ancestor: /foo /foo/bar => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/foo/bar') &&
	 test "$actual" = '-1'
ok 55 - longest ancestor: /foo /foo/bar => -1

expecting success of 0060.56 'longest ancestor: /foo /foo:/bar => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/foo:/bar') &&
	 test "$actual" = '-1'
ok 56 - longest ancestor: /foo /foo:/bar => -1

expecting success of 0060.57 'longest ancestor: /foo /:/foo:/bar => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/:/foo:/bar') &&
	 test "$actual" = '0'
ok 57 - longest ancestor: /foo /:/foo:/bar => 0

expecting success of 0060.58 'longest ancestor: /foo /foo:/:/bar => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/foo:/:/bar') &&
	 test "$actual" = '0'
ok 58 - longest ancestor: /foo /foo:/:/bar => 0

expecting success of 0060.59 'longest ancestor: /foo /:/bar:/foo => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo' '/:/bar:/foo') &&
	 test "$actual" = '0'
ok 59 - longest ancestor: /foo /:/bar:/foo => 0

expecting success of 0060.60 'longest ancestor: /foo/bar / => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/') &&
	 test "$actual" = '0'
ok 60 - longest ancestor: /foo/bar / => 0

expecting success of 0060.61 'longest ancestor: /foo/bar /fo => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/fo') &&
	 test "$actual" = '-1'
ok 61 - longest ancestor: /foo/bar /fo => -1

expecting success of 0060.62 'longest ancestor: /foo/bar /foo => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo') &&
	 test "$actual" = '4'
ok 62 - longest ancestor: /foo/bar /foo => 4

expecting success of 0060.63 'longest ancestor: /foo/bar /foo/ba => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo/ba') &&
	 test "$actual" = '-1'
ok 63 - longest ancestor: /foo/bar /foo/ba => -1

expecting success of 0060.64 'longest ancestor: /foo/bar /:/fo => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/:/fo') &&
	 test "$actual" = '0'
ok 64 - longest ancestor: /foo/bar /:/fo => 0

expecting success of 0060.65 'longest ancestor: /foo/bar /foo:/foo/ba => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo:/foo/ba') &&
	 test "$actual" = '4'
ok 65 - longest ancestor: /foo/bar /foo:/foo/ba => 4

expecting success of 0060.66 'longest ancestor: /foo/bar /bar => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/bar') &&
	 test "$actual" = '-1'
ok 66 - longest ancestor: /foo/bar /bar => -1

expecting success of 0060.67 'longest ancestor: /foo/bar /fo => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/fo') &&
	 test "$actual" = '-1'
ok 67 - longest ancestor: /foo/bar /fo => -1

expecting success of 0060.68 'longest ancestor: /foo/bar /foo:/bar => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo:/bar') &&
	 test "$actual" = '4'
ok 68 - longest ancestor: /foo/bar /foo:/bar => 4

expecting success of 0060.69 'longest ancestor: /foo/bar /:/foo:/bar => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/:/foo:/bar') &&
	 test "$actual" = '4'
ok 69 - longest ancestor: /foo/bar /:/foo:/bar => 4

expecting success of 0060.70 'longest ancestor: /foo/bar /foo:/:/bar => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo:/:/bar') &&
	 test "$actual" = '4'
ok 70 - longest ancestor: /foo/bar /foo:/:/bar => 4

expecting success of 0060.71 'longest ancestor: /foo/bar /:/bar:/fo => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/:/bar:/fo') &&
	 test "$actual" = '0'
ok 71 - longest ancestor: /foo/bar /:/bar:/fo => 0

expecting success of 0060.72 'longest ancestor: /foo/bar /:/bar => 0': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/:/bar') &&
	 test "$actual" = '0'
ok 72 - longest ancestor: /foo/bar /:/bar => 0

expecting success of 0060.73 'longest ancestor: /foo/bar /foo => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo') &&
	 test "$actual" = '4'
ok 73 - longest ancestor: /foo/bar /foo => 4

expecting success of 0060.74 'longest ancestor: /foo/bar /foo:/bar => 4': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/foo:/bar') &&
	 test "$actual" = '4'
ok 74 - longest ancestor: /foo/bar /foo:/bar => 4

expecting success of 0060.75 'longest ancestor: /foo/bar /bar => -1': actual=$(test-tool path-utils longest_ancestor_length '/foo/bar' '/bar') &&
	 test "$actual" = '-1'
ok 75 - longest ancestor: /foo/bar /bar => -1

ok 76 # skip longest ancestor: C:/Users/me C:/ => 2 (missing MINGW)

ok 77 # skip longest ancestor: D:/Users/me C:/ => -1 (missing MINGW)

ok 78 # skip longest ancestor: //server/share/my-directory //server/share/ => 14 (missing MINGW)

expecting success of 0060.79 'strip_path_suffix': 
	test c:/msysgit = $(test-tool path-utils strip_path_suffix \
		c:/msysgit/libexec//git-core libexec/git-core)

ok 79 - strip_path_suffix

expecting success of 0060.80 'absolute path rejects the empty string': 
	test_must_fail test-tool path-utils absolute_path ""

fatal: The empty string is not a valid path
ok 80 - absolute path rejects the empty string

ok 81 # skip <drive-letter>:\\abc is an absolute path (missing MINGW)

expecting success of 0060.82 'real path rejects the empty string': 
	test_must_fail test-tool path-utils real_path ""

fatal: The empty string is not a valid path
ok 82 - real path rejects the empty string

expecting success of 0060.83 'real path works on absolute paths 1': 
	nopath="hopefully-absent-path" &&
	test "/" = "$(test-tool path-utils real_path "/")" &&
	test "/$nopath" = "$(test-tool path-utils real_path "/$nopath")"

ok 83 - real path works on absolute paths 1

expecting success of 0060.84 'real path works on absolute paths 2': 
	nopath="hopefully-absent-path" &&
	# Find an existing top-level directory for the remaining tests:
	d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
	test "$d" = "$(test-tool path-utils real_path "$d")" &&
	test "$d/$nopath" = "$(test-tool path-utils real_path "$d/$nopath")"

ok 84 - real path works on absolute paths 2

expecting success of 0060.85 'real path removes extra leading slashes': 
	nopath="hopefully-absent-path" &&
	test "/" = "$(test-tool path-utils real_path "///")" &&
	test "/$nopath" = "$(test-tool path-utils real_path "///$nopath")" &&
	# Find an existing top-level directory for the remaining tests:
	d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
	test "$d" = "$(test-tool path-utils real_path "//$d")" &&
	test "$d/$nopath" = "$(test-tool path-utils real_path "//$d/$nopath")"

ok 85 - real path removes extra leading slashes

expecting success of 0060.86 'real path removes other extra slashes': 
	nopath="hopefully-absent-path" &&
	# Find an existing top-level directory for the remaining tests:
	d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
	test "$d" = "$(test-tool path-utils real_path "$d///")" &&
	test "$d/$nopath" = "$(test-tool path-utils real_path "$d///$nopath")"

ok 86 - real path removes other extra slashes

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0060.87 'real path works on symlinks': 
	mkdir first &&
	ln -s ../.git first/.git &&
	mkdir second &&
	ln -s ../first second/other &&
	mkdir third &&
	dir="$(cd .git && pwd -P)" &&
	dir2=third/../second/other/.git &&
	test "$dir" = "$(test-tool path-utils real_path $dir2)" &&
	file="$dir"/index &&
	test "$file" = "$(test-tool path-utils real_path $dir2/index)" &&
	basename=blub &&
	test "$dir/$basename" = "$(cd .git && test-tool path-utils real_path "$basename")" &&
	ln -s ../first/file .git/syml &&
	sym="$(cd first && pwd -P)"/file &&
	test "$sym" = "$(test-tool path-utils real_path "$dir2/syml")"

ok 87 - real path works on symlinks

expecting success of 0060.88 'prefix_path works with absolute paths to work tree symlinks': 
	ln -s target symlink &&
	test "$(test-tool path-utils prefix_path prefix "$(pwd)/symlink")" = "symlink"

ok 88 - prefix_path works with absolute paths to work tree symlinks

expecting success of 0060.89 'prefix_path works with only absolute path to work tree': 
	echo "" >expected &&
	test-tool path-utils prefix_path prefix "$(pwd)" >actual &&
	test_cmp expected actual

ok 89 - prefix_path works with only absolute path to work tree

expecting success of 0060.90 'prefix_path rejects absolute path to dir with same beginning as work tree': 
	test_must_fail test-tool path-utils prefix_path prefix "$(pwd)a"

fatal: '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utilsa' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils'
ok 90 - prefix_path rejects absolute path to dir with same beginning as work tree

expecting success of 0060.91 'prefix_path works with absolute path to a symlink to work tree having  same beginning as work tree': 
	git init repo &&
	ln -s repo repolink &&
	test "a" = "$(cd repo && test-tool path-utils prefix_path prefix "$(pwd)/../repolink/a")"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo/.git/
ok 91 - prefix_path works with absolute path to a symlink to work tree having  same beginning as work tree

expecting success of 0060.92 'relative path: /foo/a/b/c/ /foo/a/b/ => c/': test "$(test-tool path-utils relative_path '/foo/a/b/c/' '/foo/a/b/')" = 'c/'
ok 92 - relative path: /foo/a/b/c/ /foo/a/b/ => c/

expecting success of 0060.93 'relative path: /foo/a/b/c/ /foo/a/b => c/': test "$(test-tool path-utils relative_path '/foo/a/b/c/' '/foo/a/b')" = 'c/'
ok 93 - relative path: /foo/a/b/c/ /foo/a/b => c/

expecting success of 0060.94 'relative path: /foo/a//b//c/ ///foo/a/b// => c/': test "$(test-tool path-utils relative_path '/foo/a//b//c/' '///foo/a/b//')" = 'c/'
ok 94 - relative path: /foo/a//b//c/ ///foo/a/b// => c/

expecting success of 0060.95 'relative path: /foo/a/b /foo/a/b => ./': test "$(test-tool path-utils relative_path '/foo/a/b' '/foo/a/b')" = './'
ok 95 - relative path: /foo/a/b /foo/a/b => ./

expecting success of 0060.96 'relative path: /foo/a/b/ /foo/a/b => ./': test "$(test-tool path-utils relative_path '/foo/a/b/' '/foo/a/b')" = './'
ok 96 - relative path: /foo/a/b/ /foo/a/b => ./

expecting success of 0060.97 'relative path: /foo/a /foo/a/b => ../': test "$(test-tool path-utils relative_path '/foo/a' '/foo/a/b')" = '../'
ok 97 - relative path: /foo/a /foo/a/b => ../

expecting success of 0060.98 'relative path: / /foo/a/b/ => ../../../': test "$(test-tool path-utils relative_path '/' '/foo/a/b/')" = '../../../'
ok 98 - relative path: / /foo/a/b/ => ../../../

expecting success of 0060.99 'relative path: /foo/a/c /foo/a/b/ => ../c': test "$(test-tool path-utils relative_path '/foo/a/c' '/foo/a/b/')" = '../c'
ok 99 - relative path: /foo/a/c /foo/a/b/ => ../c

expecting success of 0060.100 'relative path: /foo/a/c /foo/a/b => ../c': test "$(test-tool path-utils relative_path '/foo/a/c' '/foo/a/b')" = '../c'
ok 100 - relative path: /foo/a/c /foo/a/b => ../c

expecting success of 0060.101 'relative path: /foo/x/y /foo/a/b/ => ../../x/y': test "$(test-tool path-utils relative_path '/foo/x/y' '/foo/a/b/')" = '../../x/y'
ok 101 - relative path: /foo/x/y /foo/a/b/ => ../../x/y

expecting success of 0060.102 'relative path: /foo/a/b <empty> => /foo/a/b': test "$(test-tool path-utils relative_path '/foo/a/b' '<empty>')" = '/foo/a/b'
ok 102 - relative path: /foo/a/b <empty> => /foo/a/b

expecting success of 0060.103 'relative path: /foo/a/b <null> => /foo/a/b': test "$(test-tool path-utils relative_path '/foo/a/b' '<null>')" = '/foo/a/b'
ok 103 - relative path: /foo/a/b <null> => /foo/a/b

expecting success of 0060.104 'relative path: foo/a/b/c/ foo/a/b/ => c/': test "$(test-tool path-utils relative_path 'foo/a/b/c/' 'foo/a/b/')" = 'c/'
ok 104 - relative path: foo/a/b/c/ foo/a/b/ => c/

expecting success of 0060.105 'relative path: foo/a/b/c/ foo/a/b => c/': test "$(test-tool path-utils relative_path 'foo/a/b/c/' 'foo/a/b')" = 'c/'
ok 105 - relative path: foo/a/b/c/ foo/a/b => c/

expecting success of 0060.106 'relative path: foo/a/b//c foo/a//b => c': test "$(test-tool path-utils relative_path 'foo/a/b//c' 'foo/a//b')" = 'c'
ok 106 - relative path: foo/a/b//c foo/a//b => c

expecting success of 0060.107 'relative path: foo/a/b/ foo/a/b/ => ./': test "$(test-tool path-utils relative_path 'foo/a/b/' 'foo/a/b/')" = './'
ok 107 - relative path: foo/a/b/ foo/a/b/ => ./

expecting success of 0060.108 'relative path: foo/a/b/ foo/a/b => ./': test "$(test-tool path-utils relative_path 'foo/a/b/' 'foo/a/b')" = './'
ok 108 - relative path: foo/a/b/ foo/a/b => ./

expecting success of 0060.109 'relative path: foo/a foo/a/b => ../': test "$(test-tool path-utils relative_path 'foo/a' 'foo/a/b')" = '../'
ok 109 - relative path: foo/a foo/a/b => ../

expecting success of 0060.110 'relative path: foo/x/y foo/a/b => ../../x/y': test "$(test-tool path-utils relative_path 'foo/x/y' 'foo/a/b')" = '../../x/y'
ok 110 - relative path: foo/x/y foo/a/b => ../../x/y

expecting success of 0060.111 'relative path: foo/a/c foo/a/b => ../c': test "$(test-tool path-utils relative_path 'foo/a/c' 'foo/a/b')" = '../c'
ok 111 - relative path: foo/a/c foo/a/b => ../c

expecting success of 0060.112 'relative path: foo/a/b /foo/x/y => foo/a/b': test "$(test-tool path-utils relative_path 'foo/a/b' '/foo/x/y')" = 'foo/a/b'
ok 112 - relative path: foo/a/b /foo/x/y => foo/a/b

expecting success of 0060.113 'relative path: /foo/a/b foo/x/y => /foo/a/b': test "$(test-tool path-utils relative_path '/foo/a/b' 'foo/x/y')" = '/foo/a/b'
ok 113 - relative path: /foo/a/b foo/x/y => /foo/a/b

ok 114 # skip relative path: d:/a/b D:/a/c => ../b (missing MINGW)

ok 115 # skip relative path: C:/a/b D:/a/c => C:/a/b (missing MINGW)

expecting success of 0060.116 'relative path: foo/a/b <empty> => foo/a/b': test "$(test-tool path-utils relative_path 'foo/a/b' '<empty>')" = 'foo/a/b'
ok 116 - relative path: foo/a/b <empty> => foo/a/b

expecting success of 0060.117 'relative path: foo/a/b <null> => foo/a/b': test "$(test-tool path-utils relative_path 'foo/a/b' '<null>')" = 'foo/a/b'
ok 117 - relative path: foo/a/b <null> => foo/a/b

expecting success of 0060.118 'relative path: <empty> /foo/a/b => ./': test "$(test-tool path-utils relative_path '<empty>' '/foo/a/b')" = './'
ok 118 - relative path: <empty> /foo/a/b => ./

expecting success of 0060.119 'relative path: <empty> <empty> => ./': test "$(test-tool path-utils relative_path '<empty>' '<empty>')" = './'
ok 119 - relative path: <empty> <empty> => ./

expecting success of 0060.120 'relative path: <empty> <null> => ./': test "$(test-tool path-utils relative_path '<empty>' '<null>')" = './'
ok 120 - relative path: <empty> <null> => ./

expecting success of 0060.121 'relative path: <null> <empty> => ./': test "$(test-tool path-utils relative_path '<null>' '<empty>')" = './'
ok 121 - relative path: <null> <empty> => ./

expecting success of 0060.122 'relative path: <null> <null> => ./': test "$(test-tool path-utils relative_path '<null>' '<null>')" = './'
ok 122 - relative path: <null> <null> => ./

expecting success of 0060.123 'relative path: <null> /foo/a/b => ./': test "$(test-tool path-utils relative_path '<null>' '/foo/a/b')" = './'
ok 123 - relative path: <null> /foo/a/b => ./

expecting success of 0060.124 'git-path A=B info/grafts => .git/info/grafts': 
		A=B git rev-parse --git-path info/grafts >actual &&
		echo .git/info/grafts >expect &&
		test_cmp expect actual
	
ok 124 - git-path A=B info/grafts => .git/info/grafts

expecting success of 0060.125 'git-path GIT_GRAFT_FILE=foo info/grafts => foo': 
		GIT_GRAFT_FILE=foo git rev-parse --git-path info/grafts >actual &&
		echo foo >expect &&
		test_cmp expect actual
	
ok 125 - git-path GIT_GRAFT_FILE=foo info/grafts => foo

expecting success of 0060.126 'git-path GIT_GRAFT_FILE=foo info/////grafts => foo': 
		GIT_GRAFT_FILE=foo git rev-parse --git-path info/////grafts >actual &&
		echo foo >expect &&
		test_cmp expect actual
	
ok 126 - git-path GIT_GRAFT_FILE=foo info/////grafts => foo

expecting success of 0060.127 'git-path GIT_INDEX_FILE=foo index => foo': 
		GIT_INDEX_FILE=foo git rev-parse --git-path index >actual &&
		echo foo >expect &&
		test_cmp expect actual
	
ok 127 - git-path GIT_INDEX_FILE=foo index => foo

expecting success of 0060.128 'git-path GIT_INDEX_FILE=foo index/foo => .git/index/foo': 
		GIT_INDEX_FILE=foo git rev-parse --git-path index/foo >actual &&
		echo .git/index/foo >expect &&
		test_cmp expect actual
	
ok 128 - git-path GIT_INDEX_FILE=foo index/foo => .git/index/foo

expecting success of 0060.129 'git-path GIT_INDEX_FILE=foo index2 => .git/index2': 
		GIT_INDEX_FILE=foo git rev-parse --git-path index2 >actual &&
		echo .git/index2 >expect &&
		test_cmp expect actual
	
ok 129 - git-path GIT_INDEX_FILE=foo index2 => .git/index2

expecting success of 0060.130 'setup fake objects directory foo': mkdir foo
ok 130 - setup fake objects directory foo

expecting success of 0060.131 'git-path GIT_OBJECT_DIRECTORY=foo objects => foo': 
		GIT_OBJECT_DIRECTORY=foo git rev-parse --git-path objects >actual &&
		echo foo >expect &&
		test_cmp expect actual
	
ok 131 - git-path GIT_OBJECT_DIRECTORY=foo objects => foo

expecting success of 0060.132 'git-path GIT_OBJECT_DIRECTORY=foo objects/foo => foo/foo': 
		GIT_OBJECT_DIRECTORY=foo git rev-parse --git-path objects/foo >actual &&
		echo foo/foo >expect &&
		test_cmp expect actual
	
ok 132 - git-path GIT_OBJECT_DIRECTORY=foo objects/foo => foo/foo

expecting success of 0060.133 'git-path GIT_OBJECT_DIRECTORY=foo objects2 => .git/objects2': 
		GIT_OBJECT_DIRECTORY=foo git rev-parse --git-path objects2 >actual &&
		echo .git/objects2 >expect &&
		test_cmp expect actual
	
ok 133 - git-path GIT_OBJECT_DIRECTORY=foo objects2 => .git/objects2

expecting success of 0060.134 'setup common repository': git --git-dir=bar init
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/bar/
ok 134 - setup common repository

expecting success of 0060.135 'git-path GIT_COMMON_DIR=bar index => .git/index': 
		GIT_COMMON_DIR=bar git rev-parse --git-path index >actual &&
		echo .git/index >expect &&
		test_cmp expect actual
	
ok 135 - git-path GIT_COMMON_DIR=bar index => .git/index

expecting success of 0060.136 'git-path GIT_COMMON_DIR=bar index.lock => .git/index.lock': 
		GIT_COMMON_DIR=bar git rev-parse --git-path index.lock >actual &&
		echo .git/index.lock >expect &&
		test_cmp expect actual
	
ok 136 - git-path GIT_COMMON_DIR=bar index.lock => .git/index.lock

expecting success of 0060.137 'git-path GIT_COMMON_DIR=bar HEAD => .git/HEAD': 
		GIT_COMMON_DIR=bar git rev-parse --git-path HEAD >actual &&
		echo .git/HEAD >expect &&
		test_cmp expect actual
	
ok 137 - git-path GIT_COMMON_DIR=bar HEAD => .git/HEAD

expecting success of 0060.138 'git-path GIT_COMMON_DIR=bar logs/HEAD => .git/logs/HEAD': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/HEAD >actual &&
		echo .git/logs/HEAD >expect &&
		test_cmp expect actual
	
ok 138 - git-path GIT_COMMON_DIR=bar logs/HEAD => .git/logs/HEAD

expecting success of 0060.139 'git-path GIT_COMMON_DIR=bar logs/HEAD.lock => .git/logs/HEAD.lock': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/HEAD.lock >actual &&
		echo .git/logs/HEAD.lock >expect &&
		test_cmp expect actual
	
ok 139 - git-path GIT_COMMON_DIR=bar logs/HEAD.lock => .git/logs/HEAD.lock

expecting success of 0060.140 'git-path GIT_COMMON_DIR=bar logs/refs/bisect/foo => .git/logs/refs/bisect/foo': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/bisect/foo >actual &&
		echo .git/logs/refs/bisect/foo >expect &&
		test_cmp expect actual
	
ok 140 - git-path GIT_COMMON_DIR=bar logs/refs/bisect/foo => .git/logs/refs/bisect/foo

expecting success of 0060.141 'git-path GIT_COMMON_DIR=bar logs/refs => bar/logs/refs': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs >actual &&
		echo bar/logs/refs >expect &&
		test_cmp expect actual
	
ok 141 - git-path GIT_COMMON_DIR=bar logs/refs => bar/logs/refs

expecting success of 0060.142 'git-path GIT_COMMON_DIR=bar logs/refs/ => bar/logs/refs/': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/ >actual &&
		echo bar/logs/refs/ >expect &&
		test_cmp expect actual
	
ok 142 - git-path GIT_COMMON_DIR=bar logs/refs/ => bar/logs/refs/

expecting success of 0060.143 'git-path GIT_COMMON_DIR=bar logs/refs/bisec/foo => bar/logs/refs/bisec/foo': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/bisec/foo >actual &&
		echo bar/logs/refs/bisec/foo >expect &&
		test_cmp expect actual
	
ok 143 - git-path GIT_COMMON_DIR=bar logs/refs/bisec/foo => bar/logs/refs/bisec/foo

expecting success of 0060.144 'git-path GIT_COMMON_DIR=bar logs/refs/bisec => bar/logs/refs/bisec': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/bisec >actual &&
		echo bar/logs/refs/bisec >expect &&
		test_cmp expect actual
	
ok 144 - git-path GIT_COMMON_DIR=bar logs/refs/bisec => bar/logs/refs/bisec

expecting success of 0060.145 'git-path GIT_COMMON_DIR=bar logs/refs/bisectfoo => bar/logs/refs/bisectfoo': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/bisectfoo >actual &&
		echo bar/logs/refs/bisectfoo >expect &&
		test_cmp expect actual
	
ok 145 - git-path GIT_COMMON_DIR=bar logs/refs/bisectfoo => bar/logs/refs/bisectfoo

expecting success of 0060.146 'git-path GIT_COMMON_DIR=bar objects => bar/objects': 
		GIT_COMMON_DIR=bar git rev-parse --git-path objects >actual &&
		echo bar/objects >expect &&
		test_cmp expect actual
	
ok 146 - git-path GIT_COMMON_DIR=bar objects => bar/objects

expecting success of 0060.147 'git-path GIT_COMMON_DIR=bar objects/bar => bar/objects/bar': 
		GIT_COMMON_DIR=bar git rev-parse --git-path objects/bar >actual &&
		echo bar/objects/bar >expect &&
		test_cmp expect actual
	
ok 147 - git-path GIT_COMMON_DIR=bar objects/bar => bar/objects/bar

expecting success of 0060.148 'git-path GIT_COMMON_DIR=bar info/exclude => bar/info/exclude': 
		GIT_COMMON_DIR=bar git rev-parse --git-path info/exclude >actual &&
		echo bar/info/exclude >expect &&
		test_cmp expect actual
	
ok 148 - git-path GIT_COMMON_DIR=bar info/exclude => bar/info/exclude

expecting success of 0060.149 'git-path GIT_COMMON_DIR=bar info/grafts => bar/info/grafts': 
		GIT_COMMON_DIR=bar git rev-parse --git-path info/grafts >actual &&
		echo bar/info/grafts >expect &&
		test_cmp expect actual
	
ok 149 - git-path GIT_COMMON_DIR=bar info/grafts => bar/info/grafts

expecting success of 0060.150 'git-path GIT_COMMON_DIR=bar info/sparse-checkout => .git/info/sparse-checkout': 
		GIT_COMMON_DIR=bar git rev-parse --git-path info/sparse-checkout >actual &&
		echo .git/info/sparse-checkout >expect &&
		test_cmp expect actual
	
ok 150 - git-path GIT_COMMON_DIR=bar info/sparse-checkout => .git/info/sparse-checkout

expecting success of 0060.151 'git-path GIT_COMMON_DIR=bar info//sparse-checkout => .git/info//sparse-checkout': 
		GIT_COMMON_DIR=bar git rev-parse --git-path info//sparse-checkout >actual &&
		echo .git/info//sparse-checkout >expect &&
		test_cmp expect actual
	
ok 151 - git-path GIT_COMMON_DIR=bar info//sparse-checkout => .git/info//sparse-checkout

expecting success of 0060.152 'git-path GIT_COMMON_DIR=bar remotes/bar => bar/remotes/bar': 
		GIT_COMMON_DIR=bar git rev-parse --git-path remotes/bar >actual &&
		echo bar/remotes/bar >expect &&
		test_cmp expect actual
	
ok 152 - git-path GIT_COMMON_DIR=bar remotes/bar => bar/remotes/bar

expecting success of 0060.153 'git-path GIT_COMMON_DIR=bar branches/bar => bar/branches/bar': 
		GIT_COMMON_DIR=bar git rev-parse --git-path branches/bar >actual &&
		echo bar/branches/bar >expect &&
		test_cmp expect actual
	
ok 153 - git-path GIT_COMMON_DIR=bar branches/bar => bar/branches/bar

expecting success of 0060.154 'git-path GIT_COMMON_DIR=bar logs/refs/heads/main => bar/logs/refs/heads/main': 
		GIT_COMMON_DIR=bar git rev-parse --git-path logs/refs/heads/main >actual &&
		echo bar/logs/refs/heads/main >expect &&
		test_cmp expect actual
	
ok 154 - git-path GIT_COMMON_DIR=bar logs/refs/heads/main => bar/logs/refs/heads/main

expecting success of 0060.155 'git-path GIT_COMMON_DIR=bar refs/heads/main => bar/refs/heads/main': 
		GIT_COMMON_DIR=bar git rev-parse --git-path refs/heads/main >actual &&
		echo bar/refs/heads/main >expect &&
		test_cmp expect actual
	
ok 155 - git-path GIT_COMMON_DIR=bar refs/heads/main => bar/refs/heads/main

expecting success of 0060.156 'git-path GIT_COMMON_DIR=bar refs/bisect/foo => .git/refs/bisect/foo': 
		GIT_COMMON_DIR=bar git rev-parse --git-path refs/bisect/foo >actual &&
		echo .git/refs/bisect/foo >expect &&
		test_cmp expect actual
	
ok 156 - git-path GIT_COMMON_DIR=bar refs/bisect/foo => .git/refs/bisect/foo

expecting success of 0060.157 'git-path GIT_COMMON_DIR=bar hooks/me => bar/hooks/me': 
		GIT_COMMON_DIR=bar git rev-parse --git-path hooks/me >actual &&
		echo bar/hooks/me >expect &&
		test_cmp expect actual
	
ok 157 - git-path GIT_COMMON_DIR=bar hooks/me => bar/hooks/me

expecting success of 0060.158 'git-path GIT_COMMON_DIR=bar config => bar/config': 
		GIT_COMMON_DIR=bar git rev-parse --git-path config >actual &&
		echo bar/config >expect &&
		test_cmp expect actual
	
ok 158 - git-path GIT_COMMON_DIR=bar config => bar/config

expecting success of 0060.159 'git-path GIT_COMMON_DIR=bar packed-refs => bar/packed-refs': 
		GIT_COMMON_DIR=bar git rev-parse --git-path packed-refs >actual &&
		echo bar/packed-refs >expect &&
		test_cmp expect actual
	
ok 159 - git-path GIT_COMMON_DIR=bar packed-refs => bar/packed-refs

expecting success of 0060.160 'git-path GIT_COMMON_DIR=bar shallow => bar/shallow': 
		GIT_COMMON_DIR=bar git rev-parse --git-path shallow >actual &&
		echo bar/shallow >expect &&
		test_cmp expect actual
	
ok 160 - git-path GIT_COMMON_DIR=bar shallow => bar/shallow

expecting success of 0060.161 'git-path GIT_COMMON_DIR=bar common => bar/common': 
		GIT_COMMON_DIR=bar git rev-parse --git-path common >actual &&
		echo bar/common >expect &&
		test_cmp expect actual
	
ok 161 - git-path GIT_COMMON_DIR=bar common => bar/common

expecting success of 0060.162 'git-path GIT_COMMON_DIR=bar common/file => bar/common/file': 
		GIT_COMMON_DIR=bar git rev-parse --git-path common/file >actual &&
		echo bar/common/file >expect &&
		test_cmp expect actual
	
ok 162 - git-path GIT_COMMON_DIR=bar common/file => bar/common/file

expecting success of 0060.163 'test_submodule_relative_url: ../ ../foo ../submodule => ../../submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' '../foo' '../submodule') &&
		test "$actual" = '../../submodule'
	
ok 163 - test_submodule_relative_url: ../ ../foo ../submodule => ../../submodule

expecting success of 0060.164 'test_submodule_relative_url: ../ ../foo/bar ../submodule => ../../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' '../foo/bar' '../submodule') &&
		test "$actual" = '../../foo/submodule'
	
ok 164 - test_submodule_relative_url: ../ ../foo/bar ../submodule => ../../foo/submodule

expecting success of 0060.165 'test_submodule_relative_url: ../ ../foo/submodule ../submodule => ../../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' '../foo/submodule' '../submodule') &&
		test "$actual" = '../../foo/submodule'
	
ok 165 - test_submodule_relative_url: ../ ../foo/submodule ../submodule => ../../foo/submodule

expecting success of 0060.166 'test_submodule_relative_url: ../ ./foo ../submodule => ../submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' './foo' '../submodule') &&
		test "$actual" = '../submodule'
	
ok 166 - test_submodule_relative_url: ../ ./foo ../submodule => ../submodule

expecting success of 0060.167 'test_submodule_relative_url: ../ ./foo/bar ../submodule => ../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' './foo/bar' '../submodule') &&
		test "$actual" = '../foo/submodule'
	
ok 167 - test_submodule_relative_url: ../ ./foo/bar ../submodule => ../foo/submodule

expecting success of 0060.168 'test_submodule_relative_url: ../../../ ../foo/bar ../sub/a/b/c => ../../../../foo/sub/a/b/c': 
		actual=$(test-tool submodule resolve-relative-url '../../../' '../foo/bar' '../sub/a/b/c') &&
		test "$actual" = '../../../../foo/sub/a/b/c'
	
ok 168 - test_submodule_relative_url: ../../../ ../foo/bar ../sub/a/b/c => ../../../../foo/sub/a/b/c

expecting success of 0060.169 'test_submodule_relative_url: ../ /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest ../repo => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo': 
		actual=$(test-tool submodule resolve-relative-url '../' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest' '../repo') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo'
	
ok 169 - test_submodule_relative_url: ../ /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest ../repo => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo

expecting success of 0060.170 'test_submodule_relative_url: ../ foo/bar ../submodule => ../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' 'foo/bar' '../submodule') &&
		test "$actual" = '../foo/submodule'
	
ok 170 - test_submodule_relative_url: ../ foo/bar ../submodule => ../foo/submodule

expecting success of 0060.171 'test_submodule_relative_url: ../ foo ../submodule => ../submodule': 
		actual=$(test-tool submodule resolve-relative-url '../' 'foo' '../submodule') &&
		test "$actual" = '../submodule'
	
ok 171 - test_submodule_relative_url: ../ foo ../submodule => ../submodule

expecting success of 0060.172 'test_submodule_relative_url: (null) ../foo/bar ../sub/a/b/c => ../foo/sub/a/b/c': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo/bar' '../sub/a/b/c') &&
		test "$actual" = '../foo/sub/a/b/c'
	
ok 172 - test_submodule_relative_url: (null) ../foo/bar ../sub/a/b/c => ../foo/sub/a/b/c

expecting success of 0060.173 'test_submodule_relative_url: (null) ../foo/bar ../sub/a/b/c/ => ../foo/sub/a/b/c': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo/bar' '../sub/a/b/c/') &&
		test "$actual" = '../foo/sub/a/b/c'
	
ok 173 - test_submodule_relative_url: (null) ../foo/bar ../sub/a/b/c/ => ../foo/sub/a/b/c

expecting success of 0060.174 'test_submodule_relative_url: (null) ../foo/bar/ ../sub/a/b/c => ../foo/sub/a/b/c': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo/bar/' '../sub/a/b/c') &&
		test "$actual" = '../foo/sub/a/b/c'
	
ok 174 - test_submodule_relative_url: (null) ../foo/bar/ ../sub/a/b/c => ../foo/sub/a/b/c

expecting success of 0060.175 'test_submodule_relative_url: (null) ../foo/bar ../submodule => ../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo/bar' '../submodule') &&
		test "$actual" = '../foo/submodule'
	
ok 175 - test_submodule_relative_url: (null) ../foo/bar ../submodule => ../foo/submodule

expecting success of 0060.176 'test_submodule_relative_url: (null) ../foo/submodule ../submodule => ../foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo/submodule' '../submodule') &&
		test "$actual" = '../foo/submodule'
	
ok 176 - test_submodule_relative_url: (null) ../foo/submodule ../submodule => ../foo/submodule

expecting success of 0060.177 'test_submodule_relative_url: (null) ../foo ../submodule => ../submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '../foo' '../submodule') &&
		test "$actual" = '../submodule'
	
ok 177 - test_submodule_relative_url: (null) ../foo ../submodule => ../submodule

expecting success of 0060.178 'test_submodule_relative_url: (null) ./foo/bar ../submodule => foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' './foo/bar' '../submodule') &&
		test "$actual" = 'foo/submodule'
	
ok 178 - test_submodule_relative_url: (null) ./foo/bar ../submodule => foo/submodule

expecting success of 0060.179 'test_submodule_relative_url: (null) ./foo ../submodule => submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' './foo' '../submodule') &&
		test "$actual" = 'submodule'
	
ok 179 - test_submodule_relative_url: (null) ./foo ../submodule => submodule

expecting success of 0060.180 'test_submodule_relative_url: (null) //somewhere else/repo ../subrepo => //somewhere else/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '//somewhere else/repo' '../subrepo') &&
		test "$actual" = '//somewhere else/subrepo'
	
ok 180 - test_submodule_relative_url: (null) //somewhere else/repo ../subrepo => //somewhere else/subrepo

expecting success of 0060.181 'test_submodule_relative_url: (null) //somewhere else/repo ../../subrepo => //subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '//somewhere else/repo' '../../subrepo') &&
		test "$actual" = '//subrepo'
	
ok 181 - test_submodule_relative_url: (null) //somewhere else/repo ../../subrepo => //subrepo

expecting success of 0060.182 'test_submodule_relative_url: (null) //somewhere else/repo ../../../subrepo => /subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '//somewhere else/repo' '../../../subrepo') &&
		test "$actual" = '/subrepo'
	
ok 182 - test_submodule_relative_url: (null) //somewhere else/repo ../../../subrepo => /subrepo

expecting success of 0060.183 'test_submodule_relative_url: (null) //somewhere else/repo ../../../../subrepo => subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '//somewhere else/repo' '../../../../subrepo') &&
		test "$actual" = 'subrepo'
	
ok 183 - test_submodule_relative_url: (null) //somewhere else/repo ../../../../subrepo => subrepo

expecting success of 0060.184 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r ../subsubsuper_update_r => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsubsuper_update_r': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r' '../subsubsuper_update_r') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsubsuper_update_r'
	
ok 184 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r ../subsubsuper_update_r => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsubsuper_update_r

expecting success of 0060.185 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/super_update_r2 ../subsuper_update_r => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/super_update_r2' '../subsuper_update_r') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r'
	
ok 185 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/super_update_r2 ../subsuper_update_r => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/subsuper_update_r

expecting success of 0060.186 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/. ../. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.' '../.') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.'
	
ok 186 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/. ../. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.

expecting success of 0060.187 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils ./. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils' './.') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.'
	
ok 187 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils ./. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.

expecting success of 0060.188 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest ../repo => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest' '../repo') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo'
	
ok 188 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/addtest ../repo => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/repo

expecting success of 0060.189 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils ./å äö => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/å äö': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils' './å äö') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/å äö'
	
ok 189 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils ./å äö => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/å äö

expecting success of 0060.190 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/. ../submodule => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/.' '../submodule') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule'
	
ok 190 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/. ../submodule => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule

expecting success of 0060.191 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule ../submodule => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule' '../submodule') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule'
	
ok 191 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule ../submodule => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule

expecting success of 0060.192 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../remote ../bundle1 => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../bundle1': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../remote' '../bundle1') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../bundle1'
	
ok 192 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../remote ../bundle1 => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/home2/../bundle1

expecting success of 0060.193 'test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo ./. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo/.': 
		actual=$(test-tool submodule resolve-relative-url '(null)' '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo' './.') &&
		test "$actual" = '/<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo/.'
	
ok 193 - test_submodule_relative_url: (null) /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo ./. => /<<PKGBUILDDIR>>/t/trash directory.t0060-path-utils/submodule_update_repo/.

expecting success of 0060.194 'test_submodule_relative_url: (null) file:///tmp/repo ../subrepo => file:///tmp/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'file:///tmp/repo' '../subrepo') &&
		test "$actual" = 'file:///tmp/subrepo'
	
ok 194 - test_submodule_relative_url: (null) file:///tmp/repo ../subrepo => file:///tmp/subrepo

expecting success of 0060.195 'test_submodule_relative_url: (null) foo/bar ../submodule => foo/submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'foo/bar' '../submodule') &&
		test "$actual" = 'foo/submodule'
	
ok 195 - test_submodule_relative_url: (null) foo/bar ../submodule => foo/submodule

expecting success of 0060.196 'test_submodule_relative_url: (null) foo ../submodule => submodule': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'foo' '../submodule') &&
		test "$actual" = 'submodule'
	
ok 196 - test_submodule_relative_url: (null) foo ../submodule => submodule

expecting success of 0060.197 'test_submodule_relative_url: (null) helper:://hostname/repo ../subrepo => helper:://hostname/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../subrepo') &&
		test "$actual" = 'helper:://hostname/subrepo'
	
ok 197 - test_submodule_relative_url: (null) helper:://hostname/repo ../subrepo => helper:://hostname/subrepo

expecting success of 0060.198 'test_submodule_relative_url: (null) helper:://hostname/repo ../../subrepo => helper:://subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../../subrepo') &&
		test "$actual" = 'helper:://subrepo'
	
ok 198 - test_submodule_relative_url: (null) helper:://hostname/repo ../../subrepo => helper:://subrepo

expecting success of 0060.199 'test_submodule_relative_url: (null) helper:://hostname/repo ../../../subrepo => helper::/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../../../subrepo') &&
		test "$actual" = 'helper::/subrepo'
	
ok 199 - test_submodule_relative_url: (null) helper:://hostname/repo ../../../subrepo => helper::/subrepo

expecting success of 0060.200 'test_submodule_relative_url: (null) helper:://hostname/repo ../../../../subrepo => helper::subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../../../../subrepo') &&
		test "$actual" = 'helper::subrepo'
	
ok 200 - test_submodule_relative_url: (null) helper:://hostname/repo ../../../../subrepo => helper::subrepo

expecting success of 0060.201 'test_submodule_relative_url: (null) helper:://hostname/repo ../../../../../subrepo => helper:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../../../../../subrepo') &&
		test "$actual" = 'helper:subrepo'
	
ok 201 - test_submodule_relative_url: (null) helper:://hostname/repo ../../../../../subrepo => helper:subrepo

expecting success of 0060.202 'test_submodule_relative_url: (null) helper:://hostname/repo ../../../../../../subrepo => .:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'helper:://hostname/repo' '../../../../../../subrepo') &&
		test "$actual" = '.:subrepo'
	
ok 202 - test_submodule_relative_url: (null) helper:://hostname/repo ../../../../../../subrepo => .:subrepo

expecting success of 0060.203 'test_submodule_relative_url: (null) ssh://hostname/repo ../subrepo => ssh://hostname/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname/repo' '../subrepo') &&
		test "$actual" = 'ssh://hostname/subrepo'
	
ok 203 - test_submodule_relative_url: (null) ssh://hostname/repo ../subrepo => ssh://hostname/subrepo

expecting success of 0060.204 'test_submodule_relative_url: (null) ssh://hostname/repo ../../subrepo => ssh://subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname/repo' '../../subrepo') &&
		test "$actual" = 'ssh://subrepo'
	
ok 204 - test_submodule_relative_url: (null) ssh://hostname/repo ../../subrepo => ssh://subrepo

expecting success of 0060.205 'test_submodule_relative_url: (null) ssh://hostname/repo ../../../subrepo => ssh:/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname/repo' '../../../subrepo') &&
		test "$actual" = 'ssh:/subrepo'
	
ok 205 - test_submodule_relative_url: (null) ssh://hostname/repo ../../../subrepo => ssh:/subrepo

expecting success of 0060.206 'test_submodule_relative_url: (null) ssh://hostname/repo ../../../../subrepo => ssh:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname/repo' '../../../../subrepo') &&
		test "$actual" = 'ssh:subrepo'
	
ok 206 - test_submodule_relative_url: (null) ssh://hostname/repo ../../../../subrepo => ssh:subrepo

expecting success of 0060.207 'test_submodule_relative_url: (null) ssh://hostname/repo ../../../../../subrepo => .:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname/repo' '../../../../../subrepo') &&
		test "$actual" = '.:subrepo'
	
ok 207 - test_submodule_relative_url: (null) ssh://hostname/repo ../../../../../subrepo => .:subrepo

expecting success of 0060.208 'test_submodule_relative_url: (null) ssh://hostname:22/repo ../subrepo => ssh://hostname:22/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'ssh://hostname:22/repo' '../subrepo') &&
		test "$actual" = 'ssh://hostname:22/subrepo'
	
ok 208 - test_submodule_relative_url: (null) ssh://hostname:22/repo ../subrepo => ssh://hostname:22/subrepo

expecting success of 0060.209 'test_submodule_relative_url: (null) user@host:path/to/repo ../subrepo => user@host:path/to/subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'user@host:path/to/repo' '../subrepo') &&
		test "$actual" = 'user@host:path/to/subrepo'
	
ok 209 - test_submodule_relative_url: (null) user@host:path/to/repo ../subrepo => user@host:path/to/subrepo

expecting success of 0060.210 'test_submodule_relative_url: (null) user@host:repo ../subrepo => user@host:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'user@host:repo' '../subrepo') &&
		test "$actual" = 'user@host:subrepo'
	
ok 210 - test_submodule_relative_url: (null) user@host:repo ../subrepo => user@host:subrepo

expecting success of 0060.211 'test_submodule_relative_url: (null) user@host:repo ../../subrepo => .:subrepo': 
		actual=$(test-tool submodule resolve-relative-url '(null)' 'user@host:repo' '../../subrepo') &&
		test "$actual" = '.:subrepo'
	
ok 211 - test_submodule_relative_url: (null) user@host:repo ../../subrepo => .:subrepo

expecting success of 0060.212 'match .gitmodules': 
	test-tool path-utils is_dotgitmodules \
		.gitmodules \
		\
		.git${u200c}modules \
		\
		.Gitmodules \
		.gitmoduleS \
		\
		".gitmodules " \
		".gitmodules." \
		".gitmodules  " \
		".gitmodules. " \
		".gitmodules ." \
		".gitmodules.." \
		".gitmodules   " \
		".gitmodules.  " \
		".gitmodules . " \
		".gitmodules  ." \
		\
		".Gitmodules " \
		".Gitmodules." \
		".Gitmodules  " \
		".Gitmodules. " \
		".Gitmodules ." \
		".Gitmodules.." \
		".Gitmodules   " \
		".Gitmodules.  " \
		".Gitmodules . " \
		".Gitmodules  ." \
		\
		GITMOD~1 \
		gitmod~1 \
		GITMOD~2 \
		gitmod~3 \
		GITMOD~4 \
		\
		"GITMOD~1 " \
		"gitmod~2." \
		"GITMOD~3  " \
		"gitmod~4. " \
		"GITMOD~1 ." \
		"gitmod~2   " \
		"GITMOD~3.  " \
		"gitmod~4 . " \
		\
		GI7EBA~1 \
		gi7eba~9 \
		\
		GI7EB~10 \
		GI7EB~11 \
		GI7EB~99 \
		GI7EB~10 \
		GI7E~100 \
		GI7E~101 \
		GI7E~999 \
		~1000000 \
		~9999999 \
		\
		.gitmodules:\$DATA \
		"gitmod~4 . :\$DATA" \
		\
		--not \
		".gitmodules x"  \
		".gitmodules .x" \
		\
		" .gitmodules" \
		\
		..gitmodules \
		\
		gitmodules \
		\
		.gitmodule \
		\
		".gitmodules x " \
		".gitmodules .x" \
		\
		GI7EBA~ \
		GI7EBA~0 \
		GI7EBA~~1 \
		GI7EBA~X \
		Gx7EBA~1 \
		GI7EBX~1 \
		\
		GI7EB~1 \
		GI7EB~01 \
		GI7EB~1X \
		\
		.gitmodules,:\$DATA

ok: '.gitmodules' is .gitmodules
ok: '.git‌modules' is .gitmodules
ok: '.Gitmodules' is .gitmodules
ok: '.gitmoduleS' is .gitmodules
ok: '.gitmodules ' is .gitmodules
ok: '.gitmodules.' is .gitmodules
ok: '.gitmodules  ' is .gitmodules
ok: '.gitmodules. ' is .gitmodules
ok: '.gitmodules .' is .gitmodules
ok: '.gitmodules..' is .gitmodules
ok: '.gitmodules   ' is .gitmodules
ok: '.gitmodules.  ' is .gitmodules
ok: '.gitmodules . ' is .gitmodules
ok: '.gitmodules  .' is .gitmodules
ok: '.Gitmodules ' is .gitmodules
ok: '.Gitmodules.' is .gitmodules
ok: '.Gitmodules  ' is .gitmodules
ok: '.Gitmodules. ' is .gitmodules
ok: '.Gitmodules .' is .gitmodules
ok: '.Gitmodules..' is .gitmodules
ok: '.Gitmodules   ' is .gitmodules
ok: '.Gitmodules.  ' is .gitmodules
ok: '.Gitmodules . ' is .gitmodules
ok: '.Gitmodules  .' is .gitmodules
ok: 'GITMOD~1' is .gitmodules
ok: 'gitmod~1' is .gitmodules
ok: 'GITMOD~2' is .gitmodules
ok: 'gitmod~3' is .gitmodules
ok: 'GITMOD~4' is .gitmodules
ok: 'GITMOD~1 ' is .gitmodules
ok: 'gitmod~2.' is .gitmodules
ok: 'GITMOD~3  ' is .gitmodules
ok: 'gitmod~4. ' is .gitmodules
ok: 'GITMOD~1 .' is .gitmodules
ok: 'gitmod~2   ' is .gitmodules
ok: 'GITMOD~3.  ' is .gitmodules
ok: 'gitmod~4 . ' is .gitmodules
ok: 'GI7EBA~1' is .gitmodules
ok: 'gi7eba~9' is .gitmodules
ok: 'GI7EB~10' is .gitmodules
ok: 'GI7EB~11' is .gitmodules
ok: 'GI7EB~99' is .gitmodules
ok: 'GI7EB~10' is .gitmodules
ok: 'GI7E~100' is .gitmodules
ok: 'GI7E~101' is .gitmodules
ok: 'GI7E~999' is .gitmodules
ok: '~1000000' is .gitmodules
ok: '~9999999' is .gitmodules
ok: '.gitmodules:$DATA' is .gitmodules
ok: 'gitmod~4 . :$DATA' is .gitmodules
ok: '.gitmodules x' is not .gitmodules
ok: '.gitmodules .x' is not .gitmodules
ok: ' .gitmodules' is not .gitmodules
ok: '..gitmodules' is not .gitmodules
ok: 'gitmodules' is not .gitmodules
ok: '.gitmodule' is not .gitmodules
ok: '.gitmodules x ' is not .gitmodules
ok: '.gitmodules .x' is not .gitmodules
ok: 'GI7EBA~' is not .gitmodules
ok: 'GI7EBA~0' is not .gitmodules
ok: 'GI7EBA~~1' is not .gitmodules
ok: 'GI7EBA~X' is not .gitmodules
ok: 'Gx7EBA~1' is not .gitmodules
ok: 'GI7EBX~1' is not .gitmodules
ok: 'GI7EB~1' is not .gitmodules
ok: 'GI7EB~01' is not .gitmodules
ok: 'GI7EB~1X' is not .gitmodules
ok: '.gitmodules,:$DATA' is not .gitmodules
ok 212 - match .gitmodules

expecting success of 0060.213 'match .gitattributes': 
	test-tool path-utils is_dotgitattributes \
		.gitattributes \
		.git${u200c}attributes \
		.Gitattributes \
		.gitattributeS \
		GITATT~1 \
		GI7D29~1

ok: '.gitattributes' is .gitattributes
ok: '.git‌attributes' is .gitattributes
ok: '.Gitattributes' is .gitattributes
ok: '.gitattributeS' is .gitattributes
ok: 'GITATT~1' is .gitattributes
ok: 'GI7D29~1' is .gitattributes
ok 213 - match .gitattributes

expecting success of 0060.214 'match .gitignore': 
	test-tool path-utils is_dotgitignore \
		.gitignore \
		.git${u200c}ignore \
		.Gitignore \
		.gitignorE \
		GITIGN~1 \
		GI250A~1

ok: '.gitignore' is .gitignore
ok: '.git‌ignore' is .gitignore
ok: '.Gitignore' is .gitignore
ok: '.gitignorE' is .gitignore
ok: 'GITIGN~1' is .gitignore
ok: 'GI250A~1' is .gitignore
ok 214 - match .gitignore

expecting success of 0060.215 'match .mailmap': 
	test-tool path-utils is_dotmailmap \
		.mailmap \
		.mail${u200c}map \
		.Mailmap \
		.mailmaP \
		MAILMA~1 \
		MABA30~1

ok: '.mailmap' is .gitmailmap
ok: '.mail‌map' is .gitmailmap
ok: '.Mailmap' is .gitmailmap
ok: '.mailmaP' is .gitmailmap
ok: 'MAILMA~1' is .gitmailmap
ok: 'MABA30~1' is .gitmailmap
ok 215 - match .mailmap

ok 216 # skip is_valid_path() on Windows (missing MINGW)

checking prerequisite: RUNTIME_PREFIX

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-RUNTIME_PREFIX" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-RUNTIME_PREFIX" &&
	test true = "$RUNTIME_PREFIX"

)
prerequisite RUNTIME_PREFIX not satisfied
checking prerequisite: CAN_EXEC_IN_PWD

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CAN_EXEC_IN_PWD" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CAN_EXEC_IN_PWD" &&
	cp "$GIT_EXEC_PATH"/git$X ./ &&
	./git rev-parse

)
prerequisite CAN_EXEC_IN_PWD ok
ok 217 # skip RUNTIME_PREFIX works (missing RUNTIME_PREFIX of !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD)

ok 218 # skip %(prefix)/ works (missing RUNTIME_PREFIX of !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD)

# passed all 218 test(s)
1..218
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0061-run-command.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0061-run-command/.git/
ok 1 # skip subprocess inherits only std handles (missing MINGW)

expecting success of 0061.2 'start_command reports ENOENT (slash)': 
	test-tool run-command start-command-ENOENT ./does-not-exist 2>err &&
	test_i18ngrep "\./does-not-exist" err

fatal: cannot run ./does-not-exist: No such file or directory
ok 2 - start_command reports ENOENT (slash)

expecting success of 0061.3 'start_command reports ENOENT (no slash)': 
	test-tool run-command start-command-ENOENT does-not-exist 2>err &&
	test_i18ngrep "does-not-exist" err

error: cannot run does-not-exist: No such file or directory
ok 3 - start_command reports ENOENT (no slash)

expecting success of 0061.4 'run_command can run a command': 
	cat hello-script >hello.sh &&
	chmod +x hello.sh &&
	test-tool run-command run-command ./hello.sh >actual 2>err &&

	test_cmp hello-script actual &&
	test_must_be_empty err

ok 4 - run_command can run a command

checking prerequisite: RUNS_COMMANDS_FROM_PWD

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-RUNS_COMMANDS_FROM_PWD" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-RUNS_COMMANDS_FROM_PWD" &&
	write_script runs-commands-from-pwd <<-\EOF &&
	true
	EOF
	runs-commands-from-pwd >/dev/null 2>&1

)
prerequisite RUNS_COMMANDS_FROM_PWD not satisfied
expecting success of 0061.5 'run_command is restricted to PATH': 
	write_script should-not-run <<-\EOF &&
	echo yikes
	EOF
	test_must_fail test-tool run-command run-command should-not-run 2>err &&
	test_i18ngrep "should-not-run" err

error: cannot run should-not-run: No such file or directory
ok 5 - run_command is restricted to PATH

expecting success of 0061.6 'run_command can run a script without a #! line': 
	cat >hello <<-\EOF &&
	cat hello-script
	EOF
	chmod +x hello &&
	test-tool run-command run-command ./hello >actual 2>err &&

	test_cmp hello-script actual &&
	test_must_be_empty err

ok 6 - run_command can run a script without a #! line

expecting success of 0061.7 'run_command does not try to execute a directory': 
	test_when_finished "rm -rf bin1 bin2" &&
	mkdir -p bin1/greet bin2 &&
	write_script bin2/greet <<-\EOF &&
	cat bin2/greet
	EOF

	PATH=$PWD/bin1:$PWD/bin2:$PATH \
		test-tool run-command run-command greet >actual 2>err &&
	test_cmp bin2/greet actual &&
	test_must_be_empty err

ok 7 - run_command does not try to execute a directory

expecting success of 0061.8 'run_command passes over non-executable file': 
	test_when_finished "rm -rf bin1 bin2" &&
	mkdir -p bin1 bin2 &&
	write_script bin1/greet <<-\EOF &&
	cat bin1/greet
	EOF
	chmod -x bin1/greet &&
	write_script bin2/greet <<-\EOF &&
	cat bin2/greet
	EOF

	PATH=$PWD/bin1:$PWD/bin2:$PATH \
		test-tool run-command run-command greet >actual 2>err &&
	test_cmp bin2/greet actual &&
	test_must_be_empty err

ok 8 - run_command passes over non-executable file

expecting success of 0061.9 'run_command reports EACCES': 
	cat hello-script >hello.sh &&
	chmod -x hello.sh &&
	test_must_fail test-tool run-command run-command ./hello.sh 2>err &&

	grep "fatal: cannot exec.*hello.sh" err

fatal: cannot exec './hello.sh': Permission denied
ok 9 - run_command reports EACCES

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0061.10 'unreadable directory in PATH': 
	mkdir local-command &&
	test_when_finished "chmod u+rwx local-command && rm -fr local-command" &&
	git config alias.nitfol "!echo frotz" &&
	chmod a-rx local-command &&
	(
		PATH=./local-command:$PATH &&
		git nitfol >actual
	) &&
	echo frotz >expect &&
	test_cmp expect actual

ok 10 - unreadable directory in PATH

expecting success of 0061.11 'run_command runs in parallel with more jobs available than tasks': 
	test-tool run-command run-command-parallel 5 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>actual &&
	test_must_be_empty out &&
	test_cmp expect actual

ok 11 - run_command runs in parallel with more jobs available than tasks

expecting success of 0061.12 'run_command runs ungrouped in parallel with more jobs available than tasks': 
	test-tool run-command --ungroup run-command-parallel 5 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>err &&
	test_line_count = 8 out &&
	test_line_count = 4 err

ok 12 - run_command runs ungrouped in parallel with more jobs available than tasks

expecting success of 0061.13 'run_command runs in parallel with as many jobs as tasks': 
	test-tool run-command run-command-parallel 4 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>actual &&
	test_must_be_empty out &&
	test_cmp expect actual

ok 13 - run_command runs in parallel with as many jobs as tasks

expecting success of 0061.14 'run_command runs ungrouped in parallel with as many jobs as tasks': 
	test-tool run-command --ungroup run-command-parallel 4 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>err &&
	test_line_count = 8 out &&
	test_line_count = 4 err

ok 14 - run_command runs ungrouped in parallel with as many jobs as tasks

expecting success of 0061.15 'run_command runs in parallel with more tasks than jobs available': 
	test-tool run-command run-command-parallel 3 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>actual &&
	test_must_be_empty out &&
	test_cmp expect actual

ok 15 - run_command runs in parallel with more tasks than jobs available

expecting success of 0061.16 'run_command runs ungrouped in parallel with more tasks than jobs available': 
	test-tool run-command --ungroup run-command-parallel 3 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>err &&
	test_line_count = 8 out &&
	test_line_count = 4 err

ok 16 - run_command runs ungrouped in parallel with more tasks than jobs available

expecting success of 0061.17 'run_command is asked to abort gracefully': 
	test-tool run-command run-command-abort 3 false >out 2>actual &&
	test_must_be_empty out &&
	test_cmp expect actual

ok 17 - run_command is asked to abort gracefully

expecting success of 0061.18 'run_command is asked to abort gracefully (ungroup)': 
	test-tool run-command --ungroup run-command-abort 3 false >out 2>err &&
	test_must_be_empty out &&
	test_line_count = 6 err

ok 18 - run_command is asked to abort gracefully (ungroup)

expecting success of 0061.19 'run_command outputs ': 
	test-tool run-command run-command-no-jobs 3 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>actual &&
	test_must_be_empty out &&
	test_cmp expect actual

ok 19 - run_command outputs 

expecting success of 0061.20 'run_command outputs (ungroup) ': 
	test-tool run-command --ungroup run-command-no-jobs 3 sh -c "printf \"%s\n%s\n\" Hello World" >out 2>err &&
	test_must_be_empty out &&
	test_cmp expect err

ok 20 - run_command outputs (ungroup) 

expecting success of 0061.21 'GIT_TRACE with environment variables': 
	test_trace "abc=1 def=2" env abc=1 env def=2 &&
	test_trace "abc=2" env abc env abc=1 env abc=2 &&
	test_trace "abc=2" env abc env abc=2 &&
	(
		abc=1 && export abc &&
		test_trace "def=1" env abc=1 env def=1
	) &&
	(
		abc=1 && export abc &&
		test_trace "def=1" env abc env abc=1 env def=1
	) &&
	test_trace "def=1" env non-exist env def=1 &&
	test_trace "abc=2" env abc=1 env abc env abc=2 &&
	(
		abc=1 def=2 && export abc def &&
		test_trace "unset abc def;" env abc env def
	) &&
	(
		abc=1 def=2 && export abc def &&
		test_trace "unset def; abc=3" env abc env def env abc=3
	) &&
	(
		abc=1 && export abc &&
		test_trace "unset abc;" env abc=2 env abc
	)

ok 21 - GIT_TRACE with environment variables

ok 22 # skip verify curlies are quoted properly (missing MINGW)

ok 23 # skip can spawn .bat with argv[0] containing spaces (missing MINGW)

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0062-revision-walking.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0062-revision-walking/.git/
expecting success of 0062.1 'setup': 
	echo a > a &&
	git add a &&
	git commit -m "add a" &&
	echo b > b &&
	git add b &&
	git commit -m "add b"

[master (root-commit) 925677c] add a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[master 4505e02] add b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
ok 1 - setup

expecting success of 0062.2 'revision walking can be done twice': 
	test-tool revision-walking run-twice >run_twice_actual &&
	test_cmp run_twice_expected run_twice_actual

ok 2 - revision walking can be done twice

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0052-simple-ipc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0052-simple-ipc/.git/
expecting success of 0052.1 'start simple command server': 
	test_atexit stop_simple_IPC_server &&
	test-tool simple-ipc start-daemon --threads=8 &&
	test-tool simple-ipc is-active

ok 1 - start simple command server

expecting success of 0052.2 'simple command server': 
	test-tool simple-ipc send --token=ping >actual &&
	echo pong >expect &&
	test_cmp expect actual

ok 2 - simple command server

expecting success of 0052.3 'servers cannot share the same path': 
	test_must_fail test-tool simple-ipc run-daemon &&
	test-tool simple-ipc is-active

error: socket/pipe already in use: 'ipc-test'
ok 3 - servers cannot share the same path

expecting success of 0052.4 'big response': 
	test-tool simple-ipc send --token=big >actual &&
	test_line_count -ge 10000 actual &&
	grep -q "big: [0]*9999\$" actual

ok 4 - big response

expecting success of 0052.5 'chunk response': 
	test-tool simple-ipc send --token=chunk >actual &&
	test_line_count -ge 10000 actual &&
	grep -q "big: [0]*9999\$" actual

ok 5 - chunk response

expecting success of 0052.6 'slow response': 
	test-tool simple-ipc send --token=slow >actual &&
	test_line_count -ge 100 actual &&
	grep -q "big: [0]*99\$" actual

ok 6 - slow response

expecting success of 0052.7 'sendbytes': 
	test-tool simple-ipc sendbytes --bytecount=100000 --byte=A >actual &&
	grep "sent:A00100000 rcvd:A00100000" actual

sent:A00100000 rcvd:A00100000
ok 7 - sendbytes

expecting success of 0052.8 'stress test threads': 
	test-tool simple-ipc multiple \
		--threads=7 \
		--bytecount=19 \
		--batchsize=13 \
		>actual &&
	test_line_count = 92 actual &&
	grep "good 91" actual &&
	grep "sent:A" <actual >actual_a &&
	cat >expect_a <<-EOF &&
		sent:A00000019 rcvd:A00000019
		sent:A00000020 rcvd:A00000020
		sent:A00000021 rcvd:A00000021
		sent:A00000022 rcvd:A00000022
		sent:A00000023 rcvd:A00000023
		sent:A00000024 rcvd:A00000024
		sent:A00000025 rcvd:A00000025
		sent:A00000026 rcvd:A00000026
		sent:A00000027 rcvd:A00000027
		sent:A00000028 rcvd:A00000028
		sent:A00000029 rcvd:A00000029
		sent:A00000030 rcvd:A00000030
		sent:A00000031 rcvd:A00000031
	EOF
	test_cmp expect_a actual_a

client (good 91) (join 0), (errors 0)
ok 8 - stress test threads

expecting success of 0052.9 'stop-daemon works': 
	test-tool simple-ipc stop-daemon &&
	test_must_fail test-tool simple-ipc is-active &&
	test_must_fail test-tool simple-ipc send --token=ping

error: no server listening at 'ipc-test'
error: no server listening at 'ipc-test'
ok 9 - stop-daemon works

error: no server listening at 'ipc-test'
# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0065-strcmp-offset.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0065-strcmp-offset/.git/
expecting success of 0065.1 'strcmp_offset(abc, abc)': 
		echo "$expect" >expect &&
		test-tool strcmp-offset "$s1" "$s2" >actual &&
		test_cmp expect actual
	
ok 1 - strcmp_offset(abc, abc)

expecting success of 0065.2 'strcmp_offset(abc, def)': 
		echo "$expect" >expect &&
		test-tool strcmp-offset "$s1" "$s2" >actual &&
		test_cmp expect actual
	
ok 2 - strcmp_offset(abc, def)

expecting success of 0065.3 'strcmp_offset(abc, abz)': 
		echo "$expect" >expect &&
		test-tool strcmp-offset "$s1" "$s2" >actual &&
		test_cmp expect actual
	
ok 3 - strcmp_offset(abc, abz)

expecting success of 0065.4 'strcmp_offset(abc, abcdef)': 
		echo "$expect" >expect &&
		test-tool strcmp-offset "$s1" "$s2" >actual &&
		test_cmp expect actual
	
ok 4 - strcmp_offset(abc, abcdef)

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0063-string-list.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0063-string-list/.git/
expecting success of 0063.1 'split foo:bar:baz at :, max -1': 
		test-tool string-list split 'foo:bar:baz' ':' '-1' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place 'foo:bar:baz' ':' '-1' >actual &&
		test_cmp expected actual
	
ok 1 - split foo:bar:baz at :, max -1

expecting success of 0063.2 'split foo:bar:baz at :, max 0': 
		test-tool string-list split 'foo:bar:baz' ':' '0' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place 'foo:bar:baz' ':' '0' >actual &&
		test_cmp expected actual
	
ok 2 - split foo:bar:baz at :, max 0

expecting success of 0063.3 'split foo:bar:baz at :, max 1': 
		test-tool string-list split 'foo:bar:baz' ':' '1' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place 'foo:bar:baz' ':' '1' >actual &&
		test_cmp expected actual
	
ok 3 - split foo:bar:baz at :, max 1

expecting success of 0063.4 'split foo:bar:baz at :, max 2': 
		test-tool string-list split 'foo:bar:baz' ':' '2' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place 'foo:bar:baz' ':' '2' >actual &&
		test_cmp expected actual
	
ok 4 - split foo:bar:baz at :, max 2

expecting success of 0063.5 'split foo:bar: at :, max -1': 
		test-tool string-list split 'foo:bar:' ':' '-1' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place 'foo:bar:' ':' '-1' >actual &&
		test_cmp expected actual
	
ok 5 - split foo:bar: at :, max -1

expecting success of 0063.6 'split  at :, max -1': 
		test-tool string-list split '' ':' '-1' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place '' ':' '-1' >actual &&
		test_cmp expected actual
	
ok 6 - split  at :, max -1

expecting success of 0063.7 'split : at :, max -1': 
		test-tool string-list split ':' ':' '-1' >actual &&
		test_cmp expected actual &&
		test-tool string-list split_in_place ':' ':' '-1' >actual &&
		test_cmp expected actual
	
ok 7 - split : at :, max -1

expecting success of 0063.8 'test filter_string_list': 
	test "x-" = "x$(test-tool string-list filter - y)" &&
	test "x-" = "x$(test-tool string-list filter no y)" &&
	test yes = "$(test-tool string-list filter yes y)" &&
	test yes = "$(test-tool string-list filter no:yes y)" &&
	test yes = "$(test-tool string-list filter yes:no y)" &&
	test y1:y2 = "$(test-tool string-list filter y1:y2 y)" &&
	test y2:y1 = "$(test-tool string-list filter y2:y1 y)" &&
	test "x-" = "x$(test-tool string-list filter x1:x2 y)"

ok 8 - test filter_string_list

expecting success of 0063.9 'test remove_duplicates': 
	test "x-" = "x$(test-tool string-list remove_duplicates -)" &&
	test "x" = "x$(test-tool string-list remove_duplicates "")" &&
	test a = "$(test-tool string-list remove_duplicates a)" &&
	test a = "$(test-tool string-list remove_duplicates a:a)" &&
	test a = "$(test-tool string-list remove_duplicates a:a:a:a:a)" &&
	test a:b = "$(test-tool string-list remove_duplicates a:b)" &&
	test a:b = "$(test-tool string-list remove_duplicates a:a:b)" &&
	test a:b = "$(test-tool string-list remove_duplicates a:b:b)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:b:c)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:a:b:c)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:b:b:c)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:b:c:c)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:a:b:b:c:c)" &&
	test a:b:c = "$(test-tool string-list remove_duplicates a:a:a:b:b:b:c:c:c)"

ok 9 - test remove_duplicates

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0064-oid-array.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0064-oid-array/.git/
expecting success of 0064.1 'ordered enumeration': 
	echoid "" 44 55 88 aa >expect &&
	{
		echoid append 88 44 aa 55 &&
		echo for_each_unique
	} | test-tool oid-array >actual &&
	test_cmp expect actual

ok 1 - ordered enumeration

expecting success of 0064.2 'ordered enumeration with duplicate suppression': 
	echoid "" 44 55 88 aa >expect &&
	{
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echo for_each_unique
	} | test-tool oid-array >actual &&
	test_cmp expect actual

ok 2 - ordered enumeration with duplicate suppression

expecting success of 0064.3 'lookup': 
	{
		echoid append 88 44 aa 55 &&
		echoid lookup 55
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -eq 1

ok 3 - lookup

expecting success of 0064.4 'lookup non-existing entry': 
	{
		echoid append 88 44 aa 55 &&
		echoid lookup 33
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -lt 0

ok 4 - lookup non-existing entry

expecting success of 0064.5 'lookup with duplicates': 
	{
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echoid lookup 55
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -ge 3 &&
	test "$n" -le 5

ok 5 - lookup with duplicates

expecting success of 0064.6 'lookup non-existing entry with duplicates': 
	{
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echoid append 88 44 aa 55 &&
		echoid lookup 66
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -lt 0

ok 6 - lookup non-existing entry with duplicates

expecting success of 0064.7 'lookup with almost duplicate values': 
	# n-1 5s
	root=$(echoid "" 55) &&
	root=${root%5} &&
	{
		id1="${root}5" &&
		id2="${root}f" &&
		echo "append $id1" &&
		echo "append $id2" &&
		echoid lookup 55
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -eq 0

ok 7 - lookup with almost duplicate values

expecting success of 0064.8 'lookup with single duplicate value': 
	{
		echoid append 55 55 &&
		echoid lookup 55
	} | test-tool oid-array >actual &&
	n=$(cat actual) &&
	test "$n" -ge 0 &&
	test "$n" -le 1

ok 8 - lookup with single duplicate value

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0067-parse_pathspec_file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0067-parse_pathspec_file/.git/
expecting success of 0067.1 'one item from stdin': 
	cat >expect <<-\EOF &&
	fileA.t
	EOF

	echo fileA.t |
	test-tool parse-pathspec-file --pathspec-from-file=- >actual &&

	test_cmp expect actual

ok 1 - one item from stdin

expecting success of 0067.2 'one item from file': 
	cat >expect <<-\EOF &&
	fileA.t
	EOF

	echo fileA.t >list &&
	test-tool parse-pathspec-file --pathspec-from-file=list >actual &&

	test_cmp expect actual

ok 2 - one item from file

expecting success of 0067.3 'NUL delimiters': 
	cat >expect <<-\EOF &&
	fileA.t
	fileB.t
	EOF

	printf "fileA.t\0fileB.t\0" |
	test-tool parse-pathspec-file --pathspec-from-file=- --pathspec-file-nul >actual &&

	test_cmp expect actual

ok 3 - NUL delimiters

expecting success of 0067.4 'LF delimiters': 
	cat >expect <<-\EOF &&
	fileA.t
	fileB.t
	EOF

	printf "fileA.t\nfileB.t\n" |
	test-tool parse-pathspec-file --pathspec-from-file=- >actual &&

	test_cmp expect actual

ok 4 - LF delimiters

expecting success of 0067.5 'no trailing delimiter': 
	cat >expect <<-\EOF &&
	fileA.t
	fileB.t
	EOF

	printf "fileA.t\nfileB.t" |
	test-tool parse-pathspec-file --pathspec-from-file=- >actual &&

	test_cmp expect actual

ok 5 - no trailing delimiter

expecting success of 0067.6 'CRLF delimiters': 
	cat >expect <<-\EOF &&
	fileA.t
	fileB.t
	EOF

	printf "fileA.t\r\nfileB.t\r\n" |
	test-tool parse-pathspec-file --pathspec-from-file=- >actual &&

	test_cmp expect actual

ok 6 - CRLF delimiters

expecting success of 0067.7 'quotes': 
	cat >expect <<-\EOF &&
	fileA.t
	EOF

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test-tool parse-pathspec-file --pathspec-from-file=list >actual &&

	test_cmp expect actual

ok 7 - quotes

expecting success of 0067.8 '--pathspec-file-nul takes quotes literally': 
	# Note: there is an extra newline because --pathspec-file-nul takes
	# input \n literally, too
	cat >expect <<-\EOF &&
	"file\101.t"

	EOF

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test-tool parse-pathspec-file --pathspec-from-file=list --pathspec-file-nul >actual &&

	test_cmp expect actual

ok 8 - --pathspec-file-nul takes quotes literally

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0066-dir-iterator.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0066-dir-iterator/.git/
expecting success of 0066.1 'setup': 
	mkdir -p dir &&
	mkdir -p dir/a/b/c/ &&
	>dir/b &&
	>dir/c &&
	mkdir -p dir/d/e/d/ &&
	>dir/a/b/c/d &&
	>dir/a/e &&
	>dir/d/e/d/a &&

	mkdir -p dir2/a/b/c/ &&
	>dir2/a/b/c/d

ok 1 - setup

expecting success of 0066.2 'dir-iterator should iterate through all files': 
	cat >expected-iteration-sorted-output <<-EOF &&
	[d] (a) [a] ./dir/a
	[d] (a/b) [b] ./dir/a/b
	[d] (a/b/c) [c] ./dir/a/b/c
	[d] (d) [d] ./dir/d
	[d] (d/e) [e] ./dir/d/e
	[d] (d/e/d) [d] ./dir/d/e/d
	[f] (a/b/c/d) [d] ./dir/a/b/c/d
	[f] (a/e) [e] ./dir/a/e
	[f] (b) [b] ./dir/b
	[f] (c) [c] ./dir/c
	[f] (d/e/d/a) [a] ./dir/d/e/d/a
	EOF

	test-tool dir-iterator ./dir >out &&
	sort out >./actual-iteration-sorted-output &&

	test_cmp expected-iteration-sorted-output actual-iteration-sorted-output

ok 2 - dir-iterator should iterate through all files

expecting success of 0066.3 'dir-iterator should list files in the correct order': 
	cat >expected-pre-order-output <<-EOF &&
	[d] (a) [a] ./dir2/a
	[d] (a/b) [b] ./dir2/a/b
	[d] (a/b/c) [c] ./dir2/a/b/c
	[f] (a/b/c/d) [d] ./dir2/a/b/c/d
	EOF

	test-tool dir-iterator ./dir2 >actual-pre-order-output &&

	test_cmp expected-pre-order-output actual-pre-order-output

ok 3 - dir-iterator should list files in the correct order

expecting success of 0066.4 'begin should fail upon inexistent paths': 
	test_must_fail test-tool dir-iterator ./inexistent-path \
		>actual-inexistent-path-output &&
	echo "dir_iterator_begin failure: ENOENT" >expected-inexistent-path-output &&
	test_cmp expected-inexistent-path-output actual-inexistent-path-output

ok 4 - begin should fail upon inexistent paths

expecting success of 0066.5 'begin should fail upon non directory paths': 
	test_must_fail test-tool dir-iterator ./dir/b >actual-non-dir-output &&
	echo "dir_iterator_begin failure: ENOTDIR" >expected-non-dir-output &&
	test_cmp expected-non-dir-output actual-non-dir-output

ok 5 - begin should fail upon non directory paths

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0066.6 'advance should not fail on errors by default': 
	cat >expected-no-permissions-output <<-EOF &&
	[d] (a) [a] ./dir3/a
	EOF

	mkdir -p dir3/a &&
	>dir3/a/b &&
	chmod 0 dir3/a &&

	test-tool dir-iterator ./dir3 >actual-no-permissions-output &&
	test_cmp expected-no-permissions-output actual-no-permissions-output &&
	chmod 755 dir3/a &&
	rm -rf dir3

warning: error opening directory './dir3/a/': Permission denied
ok 6 - advance should not fail on errors by default

expecting success of 0066.7 'advance should fail on errors, w/ pedantic flag': 
	cat >expected-no-permissions-pedantic-output <<-EOF &&
	[d] (a) [a] ./dir3/a
	dir_iterator_advance failure
	EOF

	mkdir -p dir3/a &&
	>dir3/a/b &&
	chmod 0 dir3/a &&

	test_must_fail test-tool dir-iterator --pedantic ./dir3 \
		>actual-no-permissions-pedantic-output &&
	test_cmp expected-no-permissions-pedantic-output \
		actual-no-permissions-pedantic-output &&
	chmod 755 dir3/a &&
	rm -rf dir3

warning: error opening directory './dir3/a/': Permission denied
ok 7 - advance should fail on errors, w/ pedantic flag

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0066.8 'setup dirs with symlinks': 
	mkdir -p dir4/a &&
	mkdir -p dir4/b/c &&
	>dir4/a/d &&
	ln -s d dir4/a/e &&
	ln -s ../b dir4/a/f &&

	mkdir -p dir5/a/b &&
	mkdir -p dir5/a/c &&
	ln -s ../c dir5/a/b/d &&
	ln -s ../ dir5/a/b/e &&
	ln -s ../../ dir5/a/b/f

ok 8 - setup dirs with symlinks

expecting success of 0066.9 'dir-iterator should not follow symlinks by default': 
	cat >expected-no-follow-sorted-output <<-EOF &&
	[d] (a) [a] ./dir4/a
	[d] (b) [b] ./dir4/b
	[d] (b/c) [c] ./dir4/b/c
	[f] (a/d) [d] ./dir4/a/d
	[s] (a/e) [e] ./dir4/a/e
	[s] (a/f) [f] ./dir4/a/f
	EOF

	test-tool dir-iterator ./dir4 >out &&
	sort out >actual-no-follow-sorted-output &&

	test_cmp expected-no-follow-sorted-output actual-no-follow-sorted-output

ok 9 - dir-iterator should not follow symlinks by default

expecting success of 0066.10 'dir-iterator should follow symlinks w/ follow flag': 
	cat >expected-follow-sorted-output <<-EOF &&
	[d] (a) [a] ./dir4/a
	[d] (a/f) [f] ./dir4/a/f
	[d] (a/f/c) [c] ./dir4/a/f/c
	[d] (b) [b] ./dir4/b
	[d] (b/c) [c] ./dir4/b/c
	[f] (a/d) [d] ./dir4/a/d
	[f] (a/e) [e] ./dir4/a/e
	EOF

	test-tool dir-iterator --follow-symlinks ./dir4 >out &&
	sort out >actual-follow-sorted-output &&

	test_cmp expected-follow-sorted-output actual-follow-sorted-output

ok 10 - dir-iterator should follow symlinks w/ follow flag

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0069-oidtree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0069-oidtree/.git/
expecting success of 0069.1 'oidtree insert and contains': 
	cat >expect <<-\EOF &&
		0
		0
		0
		1
		1
		0
	EOF
	{
		echoid insert 444 1 2 3 4 5 a b c d e &&
		echoid contains 44 441 440 444 4440 4444 &&
		echo clear
	} | test-tool oidtree >actual &&
	test_cmp expect actual

ok 1 - oidtree insert and contains

expecting success of 0069.2 'oidtree each': 
	echoid "" 123 321 321 >expect &&
	{
		echoid insert f 9 8 123 321 a b c d e &&
		echo each 12300 &&
		echo each 3211 &&
		echo each 3210 &&
		echo each 32100 &&
		echo clear
	} | test-tool oidtree >actual &&
	test_cmp expect actual

ok 2 - oidtree each

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0070-fundamental.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0070-fundamental/.git/
expecting success of 0070.1 'character classes (isspace, isalpha etc.)': 
	test-tool ctype

ok 1 - character classes (isspace, isalpha etc.)

expecting success of 0070.2 'mktemp to nonexistent directory prints filename': 
	test_must_fail test-tool mktemp doesnotexist/testXXXXXX 2>err &&
	grep "doesnotexist/test" err

fatal: Unable to create temporary file '/<<PKGBUILDDIR>>/t/trash directory.t0070-fundamental/doesnotexist/testgyyfud': No such file or directory
ok 2 - mktemp to nonexistent directory prints filename

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0070.3 'mktemp to unwritable directory prints filename': 
	mkdir cannotwrite &&
	test_when_finished "chmod +w cannotwrite" &&
	chmod -w cannotwrite &&
	test_must_fail test-tool mktemp cannotwrite/testXXXXXX 2>err &&
	grep "cannotwrite/test" err

fatal: Unable to create temporary file '/<<PKGBUILDDIR>>/t/trash directory.t0070-fundamental/cannotwrite/testhJrY1a': Permission denied
ok 3 - mktemp to unwritable directory prints filename

expecting success of 0070.4 'git_mkstemps_mode does not fail if fd 0 is not open': 
	git commit --allow-empty -m message <&-

[master (root-commit) b293b08] message
 Author: A U Thor <author@example.com>
ok 4 - git_mkstemps_mode does not fail if fd 0 is not open

expecting success of 0070.5 'check for a bug in the regex routines': 
	# if this test fails, re-build git with NO_REGEX=1
	test-tool regex --bug

ok 5 - check for a bug in the regex routines

expecting success of 0070.6 'incomplete sideband messages are reassembled': 
	test-tool pkt-line send-split-sideband >split-sideband &&
	test-tool pkt-line receive-sideband <split-sideband 2>err &&
	grep "Hello, world" err

primary: regular output
remote: Hello, world!        
ok 6 - incomplete sideband messages are reassembled

expecting success of 0070.7 'eof on sideband message is reported': 
	printf 1234 >input &&
	test-tool pkt-line receive-sideband <input 2>err &&
	test_i18ngrep "unexpected disconnect" err

sideband: unexpected disconnect while reading sideband packet
ok 7 - eof on sideband message is reported

expecting success of 0070.8 'missing sideband designator is reported': 
	printf 0004 >input &&
	test-tool pkt-line receive-sideband <input 2>err &&
	test_i18ngrep "missing sideband" err

sideband: protocol error: missing sideband designator
ok 8 - missing sideband designator is reported

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0068-for-each-repo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0068-for-each-repo/.git/
expecting success of 0068.1 'run based on configured value': 
	git init one &&
	git init two &&
	git init three &&
	git init ~/four &&
	git -C two commit --allow-empty -m "DID NOT RUN" &&
	git config run.key "$TRASH_DIRECTORY/one" &&
	git config --add run.key "$TRASH_DIRECTORY/three" &&
	git config --add run.key "~/four" &&
	git for-each-repo --config=run.key commit --allow-empty -m "ran" &&
	git -C one log -1 --pretty=format:%s >message &&
	grep ran message &&
	git -C two log -1 --pretty=format:%s >message &&
	! grep ran message &&
	git -C three log -1 --pretty=format:%s >message &&
	grep ran message &&
	git -C ~/four log -1 --pretty=format:%s >message &&
	grep ran message &&
	git for-each-repo --config=run.key -- commit --allow-empty -m "ran again" &&
	git -C one log -1 --pretty=format:%s >message &&
	grep again message &&
	git -C two log -1 --pretty=format:%s >message &&
	! grep again message &&
	git -C three log -1 --pretty=format:%s >message &&
	grep again message &&
	git -C ~/four log -1 --pretty=format:%s >message &&
	grep again message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0068-for-each-repo/one/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0068-for-each-repo/two/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0068-for-each-repo/three/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0068-for-each-repo/four/.git/
[master (root-commit) 20fd2df] DID NOT RUN
 Author: A U Thor <author@example.com>
[master (root-commit) 3c2529d] ran
 Author: A U Thor <author@example.com>
[master (root-commit) 3c2529d] ran
 Author: A U Thor <author@example.com>
[master (root-commit) 3c2529d] ran
 Author: A U Thor <author@example.com>
ran
ran
ran
[master 3fc5dd1] ran again
 Author: A U Thor <author@example.com>
[master 3fc5dd1] ran again
 Author: A U Thor <author@example.com>
[master 3fc5dd1] ran again
 Author: A U Thor <author@example.com>
ran again
ran again
ran again
ok 1 - run based on configured value

expecting success of 0068.2 'do nothing on empty config': 
	# the whole thing would fail if for-each-ref iterated even
	# once, because "git help --no-such-option" would fail
	git for-each-repo --config=bogus.config -- help --no-such-option

ok 2 - do nothing on empty config

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0091-bugreport.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0091-bugreport/.git/
expecting success of 0091.1 'creates a report with content in the right places': 
	test_when_finished rm git-bugreport-check-headers.txt &&
	git bugreport -s check-headers &&
	check_all_headers_populated <git-bugreport-check-headers.txt

Created new report at 'git-bugreport-check-headers.txt'.
grep: Thank you for filling out a Git bug report!: No such file or directory
grep: Please answer the following questions to help us understand your issue.: No such file or directory
grep: : No such file or directory
grep: What did you do before the bug happened? (Steps to reproduce your issue): No such file or directory
grep: : No such file or directory
grep: What did you expect to happen? (Expected behavior): No such file or directory
grep: : No such file or directory
grep: What happened instead? (Actual behavior): No such file or directory
grep: : No such file or directory
grep: What's different between what you expected and what actually happened?: No such file or directory
grep: : No such file or directory
grep: Anything else you want to add:: No such file or directory
grep: : No such file or directory
grep: Please review the rest of the bug report below.: No such file or directory
grep: You can delete any lines you don't wish to share.: No such file or directory
grep: : No such file or directory
grep: : No such file or directory
grep: [System Info]: No such file or directory
grep: git version:: No such file or directory
grep: git version 2.39.0: No such file or directory
grep: cpu: arm: No such file or directory
grep: no commit associated with this build: No such file or directory
grep: sizeof-long: 4: No such file or directory
grep: sizeof-size_t: 4: No such file or directory
grep: shell-path: /bin/sh: No such file or directory
grep: uname: Linux 4.9.0-0.bpo.6-armmp #1 SMP Debian 4.9.82-1+deb9u3~bpo8+1 (2018-03-22) armv7l: No such file or directory
grep: compiler info: gnuc: 12.2: No such file or directory
grep: libc info: glibc: 2.36: No such file or directory
grep: $SHELL (typically, interactive shell): /bin/sh: No such file or directory
grep: : No such file or directory
grep: : No such file or directory
grep: [Enabled Hooks]: No such file or directory
ok 1 - creates a report with content in the right places

expecting success of 0091.2 'dies if file with same name as report already exists': 
	test_when_finished rm git-bugreport-duplicate.txt &&
	>>git-bugreport-duplicate.txt &&
	test_must_fail git bugreport --suffix duplicate

fatal: unable to create 'git-bugreport-duplicate.txt': File exists
ok 2 - dies if file with same name as report already exists

expecting success of 0091.3 '--output-directory puts the report in the provided dir': 
	test_when_finished rm -fr foo/ &&
	git bugreport -o foo/ &&
	test_path_is_file foo/git-bugreport-*

Created new report at 'foo/git-bugreport-2022-12-28-0731.txt'.
ok 3 - --output-directory puts the report in the provided dir

expecting success of 0091.4 'incorrect arguments abort with usage': 
	test_must_fail git bugreport --false 2>output &&
	test_i18ngrep usage output &&
	test_path_is_missing git-bugreport-*

usage: git bugreport [(-o | --output-directory) <path>] [(-s | --suffix) <format>]
ok 4 - incorrect arguments abort with usage

expecting success of 0091.5 'runs outside of a git dir': 
	test_when_finished rm non-repo/git-bugreport-* &&
	nongit git bugreport

Created new report at 'git-bugreport-2022-12-28-0731.txt'.
ok 5 - runs outside of a git dir

expecting success of 0091.6 'can create leading directories outside of a git dir': 
	test_when_finished rm -fr foo/bar/baz &&
	nongit git bugreport -o foo/bar/baz

Created new report at 'foo/bar/baz/git-bugreport-2022-12-28-0731.txt'.
ok 6 - can create leading directories outside of a git dir

expecting success of 0091.7 'indicates populated hooks': 
	test_when_finished rm git-bugreport-hooks.txt &&

	test_hook applypatch-msg <<-\EOF &&
	true
	EOF
	test_hook unknown-hook <<-\EOF &&
	true
	EOF
	git bugreport -s hooks &&

	sort >expect <<-\EOF &&
	[Enabled Hooks]
	applypatch-msg
	EOF

	sed -ne "/^\[Enabled Hooks\]$/,/^$/p" <git-bugreport-hooks.txt >actual &&
	test_cmp expect actual

Created new report at 'git-bugreport-hooks.txt'.
ok 7 - indicates populated hooks

checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 0091.8 '--diagnose creates diagnostics zip archive': 
	test_when_finished rm -rf report &&

	git bugreport --diagnose -o report -s test >out &&

	zip_path=report/git-diagnostics-test.zip &&
	grep "Available space" out &&
	test_path_is_file "$zip_path" &&

	# Check zipped archive content
	"$GIT_UNZIP" -p "$zip_path" diagnostics.log >out &&
	test_file_not_empty out &&

	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep ".git/objects" out &&

	"$GIT_UNZIP" -p "$zip_path" objects-local.txt >out &&
	grep "^Total: [0-9][0-9]*" out &&

	# Should not include .git directory contents by default
	! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"


Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Created new report at 'report/git-bugreport-test.txt'.
Available space on '/<<PKGBUILDDIR>>/t/trash directory.t0091-bugreport': 204.14 GiB (mount flags 0x1000)
Contents of .git/objects:
Total: 0 loose objects
ok 8 - --diagnose creates diagnostics zip archive

expecting success of 0091.9 '--diagnose=stats excludes .git dir contents': 
	test_when_finished rm -rf report &&

	git bugreport --diagnose=stats -o report -s test >out &&

	# Includes pack quantity/size info
	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep ".git/objects" out &&

	# Does not include .git directory contents
	! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"


Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Created new report at 'report/git-bugreport-test.txt'.
Contents of .git/objects:
ok 9 - --diagnose=stats excludes .git dir contents

expecting success of 0091.10 '--diagnose=all includes .git dir contents': 
	test_when_finished rm -rf report &&

	git bugreport --diagnose=all -o report -s test >out &&

	# Includes .git directory contents
	"$GIT_UNZIP" -l "$zip_path" | grep ".git/" &&

	"$GIT_UNZIP" -p "$zip_path" .git/HEAD >out &&
	test_file_not_empty out

warning: could not archive missing directory '.git/logs'

Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Created new report at 'report/git-bugreport-test.txt'.
       73  2022-12-28 07:31   .git/description
       23  2022-12-28 07:31   .git/HEAD
       92  2022-12-28 07:31   .git/config
      478  2022-12-28 07:31   .git/hooks/applypatch-msg.sample
      896  2022-12-28 07:31   .git/hooks/commit-msg.sample
     4726  2022-12-28 07:31   .git/hooks/fsmonitor-watchman.sample
      189  2022-12-28 07:31   .git/hooks/post-update.sample
      424  2022-12-28 07:31   .git/hooks/pre-applypatch.sample
     1643  2022-12-28 07:31   .git/hooks/pre-commit.sample
      416  2022-12-28 07:31   .git/hooks/pre-merge-commit.sample
     1374  2022-12-28 07:31   .git/hooks/pre-push.sample
     4898  2022-12-28 07:31   .git/hooks/pre-rebase.sample
      544  2022-12-28 07:31   .git/hooks/pre-receive.sample
     1492  2022-12-28 07:31   .git/hooks/prepare-commit-msg.sample
     2783  2022-12-28 07:31   .git/hooks/push-to-checkout.sample
     3650  2022-12-28 07:31   .git/hooks/update.sample
      240  2022-12-28 07:31   .git/info/exclude
ok 10 - --diagnose=all includes .git dir contents

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0092-diagnose.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0092-diagnose/.git/
checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 0092.1 'creates diagnostics zip archive': 
	test_when_finished rm -rf report &&

	git diagnose -o report -s test >out &&
	grep "Available space" out &&

	zip_path=report/git-diagnostics-test.zip &&
	test_path_is_file "$zip_path" &&

	# Check zipped archive content
	"$GIT_UNZIP" -p "$zip_path" diagnostics.log >out &&
	test_file_not_empty out &&

	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep ".git/objects" out &&

	"$GIT_UNZIP" -p "$zip_path" objects-local.txt >out &&
	grep "^Total: [0-9][0-9]*" out &&

	# Should not include .git directory contents by default
	! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"


Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Available space on '/<<PKGBUILDDIR>>/t/trash directory.t0092-diagnose': 204.14 GiB (mount flags 0x1000)
Contents of .git/objects:
Total: 0 loose objects
ok 1 - creates diagnostics zip archive

expecting success of 0092.2 'counts loose objects': 
	test_commit A &&

	# After committing, should have non-zero loose objects
	git diagnose -o test-count -s 1 >out &&
	zip_path=test-count/git-diagnostics-1.zip &&
	"$GIT_UNZIP" -p "$zip_path" objects-local.txt >out &&
	grep "^Total: [1-9][0-9]* loose objects" out

[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t

Diagnostics complete.
All of the gathered info is captured in 'test-count/git-diagnostics-1.zip'
Total: 3 loose objects
ok 2 - counts loose objects

expecting success of 0092.3 '--mode=stats excludes .git dir contents': 
	test_when_finished rm -rf report &&

	git diagnose -o report -s test --mode=stats >out &&

	# Includes pack quantity/size info
	zip_path=report/git-diagnostics-test.zip &&
	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep ".git/objects" out &&

	# Does not include .git directory contents
	! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"


Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Contents of .git/objects:
ok 3 - --mode=stats excludes .git dir contents

expecting success of 0092.4 '--mode=all includes .git dir contents': 
	test_when_finished rm -rf report &&

	git diagnose -o report -s test --mode=all >out &&

	# Includes pack quantity/size info
	zip_path=report/git-diagnostics-test.zip &&
	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep ".git/objects" out &&

	# Includes .git directory contents
	"$GIT_UNZIP" -l "$zip_path" | grep ".git/" &&

	"$GIT_UNZIP" -p "$zip_path" .git/HEAD >out &&
	test_file_not_empty out


Diagnostics complete.
All of the gathered info is captured in 'report/git-diagnostics-test.zip'
Contents of .git/objects:
       73  2022-12-28 07:31   .git/description
       23  2022-12-28 07:31   .git/HEAD
       92  2022-12-28 07:31   .git/config
      137  2022-12-28 07:31   .git/index
        2  2022-12-28 07:31   .git/COMMIT_EDITMSG
      478  2022-12-28 07:31   .git/hooks/applypatch-msg.sample
      896  2022-12-28 07:31   .git/hooks/commit-msg.sample
     4726  2022-12-28 07:31   .git/hooks/fsmonitor-watchman.sample
      189  2022-12-28 07:31   .git/hooks/post-update.sample
      424  2022-12-28 07:31   .git/hooks/pre-applypatch.sample
     1643  2022-12-28 07:31   .git/hooks/pre-commit.sample
      416  2022-12-28 07:31   .git/hooks/pre-merge-commit.sample
     1374  2022-12-28 07:31   .git/hooks/pre-push.sample
     4898  2022-12-28 07:31   .git/hooks/pre-rebase.sample
      544  2022-12-28 07:31   .git/hooks/pre-receive.sample
     1492  2022-12-28 07:31   .git/hooks/prepare-commit-msg.sample
     2783  2022-12-28 07:31   .git/hooks/push-to-checkout.sample
     3650  2022-12-28 07:31   .git/hooks/update.sample
      240  2022-12-28 07:31   .git/info/exclude
      154  2022-12-28 07:31   .git/logs/HEAD
      154  2022-12-28 07:31   .git/logs/refs/heads/master
ok 4 - --mode=all includes .git dir contents

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0071-sort.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0071-sort/.git/
expecting success of 0071.1 'DEFINE_LIST_SORT_DEBUG': 
	test-tool mergesort test

distribut mode                    n        m get_next set_next  compare verdict
sawtooth  copy                  100        1      472      198      372 OK
sawtooth  copy                  100        2      605      296      505 OK
sawtooth  copy                  100        4      634      342      534 OK
sawtooth  copy                  100        8      604      359      504 OK
sawtooth  copy                  100       16      561      355      461 OK
sawtooth  copy                  100       32      514      329      414 OK
sawtooth  copy                  100       64      480      269      380 OK
sawtooth  copy                  100      128      472      198      372 OK
sawtooth  reverse               100        1      472      198      372 OK
sawtooth  reverse               100        2      605      296      505 OK
sawtooth  reverse               100        4      634      342      534 OK
sawtooth  reverse               100        8      604      359      504 OK
sawtooth  reverse               100       16      585      361      485 OK
sawtooth  reverse               100       32      538      335      438 OK
sawtooth  reverse               100       64      464      272      364 OK
sawtooth  reverse               100      128      416      198      316 OK
sawtooth  reverse_1st_half      100        1      472      198      372 OK
sawtooth  reverse_1st_half      100        2      605      296      505 OK
sawtooth  reverse_1st_half      100        4      634      342      534 OK
sawtooth  reverse_1st_half      100        8      616      365      516 OK
sawtooth  reverse_1st_half      100       16      573      361      473 OK
sawtooth  reverse_1st_half      100       32      522      333      422 OK
sawtooth  reverse_1st_half      100       64      500      271      400 OK
sawtooth  reverse_1st_half      100      128      492      200      392 OK
sawtooth  reverse_2nd_half      100        1      472      198      372 OK
sawtooth  reverse_2nd_half      100        2      605      296      505 OK
sawtooth  reverse_2nd_half      100        4      634      342      534 OK
sawtooth  reverse_2nd_half      100        8      624      364      524 OK
sawtooth  reverse_2nd_half      100       16      589      360      489 OK
sawtooth  reverse_2nd_half      100       32      558      334      458 OK
sawtooth  reverse_2nd_half      100       64      525      273      425 OK
sawtooth  reverse_2nd_half      100      128      470      201      370 OK
sawtooth  sort                  100        1      472      198      372 OK
sawtooth  sort                  100        2      472      198      372 OK
sawtooth  sort                  100        4      472      198      372 OK
sawtooth  sort                  100        8      472      198      372 OK
sawtooth  sort                  100       16      472      198      372 OK
sawtooth  sort                  100       32      472      198      372 OK
sawtooth  sort                  100       64      472      198      372 OK
sawtooth  sort                  100      128      472      198      372 OK
sawtooth  dither                100        1      652      374      552 OK
sawtooth  dither                100        2      663      367      563 OK
sawtooth  dither                100        4      672      421      572 OK
sawtooth  dither                100        8      642      418      542 OK
sawtooth  dither                100       16      594      416      494 OK
sawtooth  dither                100       32      547      389      447 OK
sawtooth  dither                100       64      514      333      414 OK
sawtooth  dither                100      128      505      264      405 OK
sawtooth  unriffle              100        1      472      198      372 OK
sawtooth  unriffle              100        2      472      198      372 OK
sawtooth  unriffle              100        4      519      205      419 OK
sawtooth  unriffle              100        8      570      221      470 OK
sawtooth  unriffle              100       16      585      261      485 OK
sawtooth  unriffle              100       32      630      322      530 OK
sawtooth  unriffle              100       64      658      418      558 OK
sawtooth  unriffle              100      128      672      520      572 OK
sawtooth  unriffle_skewed       100        1      472      198      372 OK
sawtooth  unriffle_skewed       100        2      509      226      409 OK
sawtooth  unriffle_skewed       100        4      539      246      439 OK
sawtooth  unriffle_skewed       100        8      609      268      509 OK
sawtooth  unriffle_skewed       100       16      627      301      527 OK
sawtooth  unriffle_skewed       100       32      631      369      531 OK
sawtooth  unriffle_skewed       100       64      674      533      574 OK
sawtooth  unriffle_skewed       100      128      689      632      589 OK
rand      copy                  100        1      472      198      372 OK
rand      copy                  100        2      581      264      481 OK
rand      copy                  100        4      627      315      527 OK
rand      copy                  100        8      647      351      547 OK
rand      copy                  100       16      640      381      540 OK
rand      copy                  100       32      648      398      548 OK
rand      copy                  100       64      641      403      541 OK
rand      copy                  100      128      649      422      549 OK
rand      reverse               100        1      472      198      372 OK
rand      reverse               100        2      568      266      468 OK
rand      reverse               100        4      623      312      523 OK
rand      reverse               100        8      649      349      549 OK
rand      reverse               100       16      651      376      551 OK
rand      reverse               100       32      654      399      554 OK
rand      reverse               100       64      659      415      559 OK
rand      reverse               100      128      661      421      561 OK
rand      reverse_1st_half      100        1      472      198      372 OK
rand      reverse_1st_half      100        2      576      266      476 OK
rand      reverse_1st_half      100        4      623      320      523 OK
rand      reverse_1st_half      100        8      646      357      546 OK
rand      reverse_1st_half      100       16      639      390      539 OK
rand      reverse_1st_half      100       32      652      423      552 OK
rand      reverse_1st_half      100       64      644      422      544 OK
rand      reverse_1st_half      100      128      649      418      549 OK
rand      reverse_2nd_half      100        1      472      198      372 OK
rand      reverse_2nd_half      100        2      581      264      481 OK
rand      reverse_2nd_half      100        4      631      320      531 OK
rand      reverse_2nd_half      100        8      643      364      543 OK
rand      reverse_2nd_half      100       16      651      390      551 OK
rand      reverse_2nd_half      100       32      652      402      552 OK
rand      reverse_2nd_half      100       64      647      416      547 OK
rand      reverse_2nd_half      100      128      660      434      560 OK
rand      sort                  100        1      472      198      372 OK
rand      sort                  100        2      472      198      372 OK
rand      sort                  100        4      472      198      372 OK
rand      sort                  100        8      472      198      372 OK
rand      sort                  100       16      472      198      372 OK
rand      sort                  100       32      472      198      372 OK
rand      sort                  100       64      472      198      372 OK
rand      sort                  100      128      472      198      372 OK
rand      dither                100        1      652      374      552 OK
rand      dither                100        2      658      338      558 OK
rand      dither                100        4      653      347      553 OK
rand      dither                100        8      649      359      549 OK
rand      dither                100       16      643      398      543 OK
rand      dither                100       32      653      397      553 OK
rand      dither                100       64      641      395      541 OK
rand      dither                100      128      651      425      551 OK
rand      unriffle              100        1      472      198      372 OK
rand      unriffle              100        2      578      264      478 OK
rand      unriffle              100        4      621      320      521 OK
rand      unriffle              100        8      649      371      549 OK
rand      unriffle              100       16      664      403      564 OK
rand      unriffle              100       32      656      419      556 OK
rand      unriffle              100       64      656      441      556 OK
rand      unriffle              100      128      665      450      565 OK
rand      unriffle_skewed       100        1      472      198      372 OK
rand      unriffle_skewed       100        2      581      268      481 OK
rand      unriffle_skewed       100        4      625      312      525 OK
rand      unriffle_skewed       100        8      648      356      548 OK
rand      unriffle_skewed       100       16      660      398      560 OK
rand      unriffle_skewed       100       32      654      417      554 OK
rand      unriffle_skewed       100       64      667      435      567 OK
rand      unriffle_skewed       100      128      662      431      562 OK
stagger   copy                  100        1      543      299      443 OK
stagger   copy                  100        2      582      335      482 OK
stagger   copy                  100        4      586      354      486 OK
stagger   copy                  100        8      627      368      527 OK
stagger   copy                  100       16      653      458      553 OK
stagger   copy                  100       32      618      315      518 OK
stagger   copy                  100       64      673      480      573 OK
stagger   copy                  100      128      666      501      566 OK
stagger   reverse               100        1      489      299      389 OK
stagger   reverse               100        2      522      335      422 OK
stagger   reverse               100        4      562      350      462 OK
stagger   reverse               100        8      613      366      513 OK
stagger   reverse               100       16      643      457      543 OK
stagger   reverse               100       32      633      312      533 OK
stagger   reverse               100       64      680      496      580 OK
stagger   reverse               100      128      669      498      569 OK
stagger   reverse_1st_half      100        1      520      294      420 OK
stagger   reverse_1st_half      100        2      561      331      461 OK
stagger   reverse_1st_half      100        4      596      353      496 OK
stagger   reverse_1st_half      100        8      630      368      530 OK
stagger   reverse_1st_half      100       16      652      451      552 OK
stagger   reverse_1st_half      100       32      622      314      522 OK
stagger   reverse_1st_half      100       64      670      480      570 OK
stagger   reverse_1st_half      100      128      668      490      568 OK
stagger   reverse_2nd_half      100        1      464      293      364 OK
stagger   reverse_2nd_half      100        2      563      335      463 OK
stagger   reverse_2nd_half      100        4      590      355      490 OK
stagger   reverse_2nd_half      100        8      627      367      527 OK
stagger   reverse_2nd_half      100       16      651      453      551 OK
stagger   reverse_2nd_half      100       32      633      316      533 OK
stagger   reverse_2nd_half      100       64      678      482      578 OK
stagger   reverse_2nd_half      100      128      665      493      565 OK
stagger   sort                  100        1      472      198      372 OK
stagger   sort                  100        2      472      198      372 OK
stagger   sort                  100        4      472      198      372 OK
stagger   sort                  100        8      472      198      372 OK
stagger   sort                  100       16      472      198      372 OK
stagger   sort                  100       32      472      198      372 OK
stagger   sort                  100       64      472      198      372 OK
stagger   sort                  100      128      472      198      372 OK
stagger   dither                100        1      551      315      451 OK
stagger   dither                100        2      589      328      489 OK
stagger   dither                100        4      586      354      486 OK
stagger   dither                100        8      633      363      533 OK
stagger   dither                100       16      653      436      553 OK
stagger   dither                100       32      631      374      531 OK
stagger   dither                100       64      673      480      573 OK
stagger   dither                100      128      668      465      568 OK
stagger   unriffle              100        1      662      447      562 OK
stagger   unriffle              100        2      643      429      543 OK
stagger   unriffle              100        4      656      374      556 OK
stagger   unriffle              100        8      662      487      562 OK
stagger   unriffle              100       16      670      506      570 OK
stagger   unriffle              100       32      669      503      569 OK
stagger   unriffle              100       64      650      367      550 OK
stagger   unriffle              100      128      662      498      562 OK
stagger   unriffle_skewed       100        1      673      478      573 OK
stagger   unriffle_skewed       100        2      650      450      550 OK
stagger   unriffle_skewed       100        4      655      381      555 OK
stagger   unriffle_skewed       100        8      663      500      563 OK
stagger   unriffle_skewed       100       16      669      513      569 OK
stagger   unriffle_skewed       100       32      655      554      555 OK
stagger   unriffle_skewed       100       64      652      383      552 OK
stagger   unriffle_skewed       100      128      658      447      558 OK
plateau   copy                  100        1      472      198      372 OK
plateau   copy                  100        2      472      198      372 OK
plateau   copy                  100        4      472      198      372 OK
plateau   copy                  100        8      472      198      372 OK
plateau   copy                  100       16      472      198      372 OK
plateau   copy                  100       32      472      198      372 OK
plateau   copy                  100       64      472      198      372 OK
plateau   copy                  100      128      472      198      372 OK
plateau   reverse               100        1      475      201      375 OK
plateau   reverse               100        2      476      200      376 OK
plateau   reverse               100        4      448      199      348 OK
plateau   reverse               100        8      460      201      360 OK
plateau   reverse               100       16      472      200      372 OK
plateau   reverse               100       32      476      199      376 OK
plateau   reverse               100       64      444      199      344 OK
plateau   reverse               100      128      416      198      316 OK
plateau   reverse_1st_half      100        1      474      200      374 OK
plateau   reverse_1st_half      100        2      476      200      376 OK
plateau   reverse_1st_half      100        4      482      202      382 OK
plateau   reverse_1st_half      100        8      488      201      388 OK
plateau   reverse_1st_half      100       16      490      200      390 OK
plateau   reverse_1st_half      100       32      506      201      406 OK
plateau   reverse_1st_half      100       64      492      200      392 OK
plateau   reverse_1st_half      100      128      492      200      392 OK
plateau   reverse_2nd_half      100        1      472      198      372 OK
plateau   reverse_2nd_half      100        2      472      198      372 OK
plateau   reverse_2nd_half      100        4      472      198      372 OK
plateau   reverse_2nd_half      100        8      472      198      372 OK
plateau   reverse_2nd_half      100       16      472      198      372 OK
plateau   reverse_2nd_half      100       32      472      198      372 OK
plateau   reverse_2nd_half      100       64      470      202      370 OK
plateau   reverse_2nd_half      100      128      470      201      370 OK
plateau   sort                  100        1      472      198      372 OK
plateau   sort                  100        2      472      198      372 OK
plateau   sort                  100        4      472      198      372 OK
plateau   sort                  100        8      472      198      372 OK
plateau   sort                  100       16      472      198      372 OK
plateau   sort                  100       32      472      198      372 OK
plateau   sort                  100       64      472      198      372 OK
plateau   sort                  100      128      472      198      372 OK
plateau   dither                100        1      652      374      552 OK
plateau   dither                100        2      652      372      552 OK
plateau   dither                100        4      651      368      551 OK
plateau   dither                100        8      646      365      546 OK
plateau   dither                100       16      636      354      536 OK
plateau   dither                100       32      602      337      502 OK
plateau   dither                100       64      551      300      451 OK
plateau   dither                100      128      505      264      405 OK
plateau   unriffle              100        1      472      198      372 OK
plateau   unriffle              100        2      475      202      375 OK
plateau   unriffle              100        4      480      209      380 OK
plateau   unriffle              100        8      490      220      390 OK
plateau   unriffle              100       16      511      254      411 OK
plateau   unriffle              100       32      553      316      453 OK
plateau   unriffle              100       64      632      436      532 OK
plateau   unriffle              100      128      672      520      572 OK
plateau   unriffle_skewed       100        1      472      198      372 OK
plateau   unriffle_skewed       100        2      473      200      373 OK
plateau   unriffle_skewed       100        4      476      206      376 OK
plateau   unriffle_skewed       100        8      484      222      384 OK
plateau   unriffle_skewed       100       16      504      262      404 OK
plateau   unriffle_skewed       100       32      546      346      446 OK
plateau   unriffle_skewed       100       64      628      510      528 OK
plateau   unriffle_skewed       100      128      689      632      589 OK
shuffle   copy                  100        1      472      198      372 OK
shuffle   copy                  100        2      580      336      480 OK
shuffle   copy                  100        4      538      291      438 OK
shuffle   copy                  100        8      501      239      401 OK
shuffle   copy                  100       16      496      231      396 OK
shuffle   copy                  100       32      479      207      379 OK
shuffle   copy                  100       64      472      198      372 OK
shuffle   copy                  100      128      472      198      372 OK
shuffle   reverse               100        1      416      198      316 OK
shuffle   reverse               100        2      526      335      426 OK
shuffle   reverse               100        4      491      290      391 OK
shuffle   reverse               100        8      449      239      349 OK
shuffle   reverse               100       16      441      230      341 OK
shuffle   reverse               100       32      425      210      325 OK
shuffle   reverse               100       64      416      198      316 OK
shuffle   reverse               100      128      416      198      316 OK
shuffle   reverse_1st_half      100        1      492      200      392 OK
shuffle   reverse_1st_half      100        2      591      338      491 OK
shuffle   reverse_1st_half      100        4      550      291      450 OK
shuffle   reverse_1st_half      100        8      519      240      419 OK
shuffle   reverse_1st_half      100       16      515      233      415 OK
shuffle   reverse_1st_half      100       32      499      207      399 OK
shuffle   reverse_1st_half      100       64      492      200      392 OK
shuffle   reverse_1st_half      100      128      492      200      392 OK
shuffle   reverse_2nd_half      100        1      470      201      370 OK
shuffle   reverse_2nd_half      100        2      571      337      471 OK
shuffle   reverse_2nd_half      100        4      541      296      441 OK
shuffle   reverse_2nd_half      100        8      503      241      403 OK
shuffle   reverse_2nd_half      100       16      496      231      396 OK
shuffle   reverse_2nd_half      100       32      477      208      377 OK
shuffle   reverse_2nd_half      100       64      470      201      370 OK
shuffle   reverse_2nd_half      100      128      470      201      370 OK
shuffle   sort                  100        1      472      198      372 OK
shuffle   sort                  100        2      472      198      372 OK
shuffle   sort                  100        4      472      198      372 OK
shuffle   sort                  100        8      472      198      372 OK
shuffle   sort                  100       16      472      198      372 OK
shuffle   sort                  100       32      472      198      372 OK
shuffle   sort                  100       64      472      198      372 OK
shuffle   sort                  100      128      472      198      372 OK
shuffle   dither                100        1      481      216      381 OK
shuffle   dither                100        2      588      330      488 OK
shuffle   dither                100        4      547      295      447 OK
shuffle   dither                100        8      513      261      413 OK
shuffle   dither                100       16      507      252      407 OK
shuffle   dither                100       32      488      226      388 OK
shuffle   dither                100       64      481      216      381 OK
shuffle   dither                100      128      481      216      381 OK
shuffle   unriffle              100        1      672      520      572 OK
shuffle   unriffle              100        2      663      429      563 OK
shuffle   unriffle              100        4      665      451      565 OK
shuffle   unriffle              100        8      669      487      569 OK
shuffle   unriffle              100       16      670      498      570 OK
shuffle   unriffle              100       32      671      514      571 OK
shuffle   unriffle              100       64      672      520      572 OK
shuffle   unriffle              100      128      672      520      572 OK
shuffle   unriffle_skewed       100        1      689      632      589 OK
shuffle   unriffle_skewed       100        2      678      443      578 OK
shuffle   unriffle_skewed       100        4      677      492      577 OK
shuffle   unriffle_skewed       100        8      681      564      581 OK
shuffle   unriffle_skewed       100       16      683      580      583 OK
shuffle   unriffle_skewed       100       32      687      617      587 OK
shuffle   unriffle_skewed       100       64      689      632      589 OK
shuffle   unriffle_skewed       100      128      689      632      589 OK
sawtooth  copy                 1023        1     6142     2044     5119 OK
sawtooth  copy                 1023        2     8445     3065     7422 OK
sawtooth  copy                 1023        4     9213     3573     8190 OK
sawtooth  copy                 1023        8     9277     3821     8254 OK
sawtooth  copy                 1023       16     9021     3933     7998 OK
sawtooth  copy                 1023       32     8621     3965     7598 OK
sawtooth  copy                 1023       64     8157     3933     7134 OK
sawtooth  copy                 1023      128     7665     3821     6642 OK
sawtooth  copy                 1023      256     7161     3573     6138 OK
sawtooth  copy                 1023      512     6652     3065     5629 OK
sawtooth  copy                 1023     1024     6142     2044     5119 OK
sawtooth  reverse              1023        1     6142     2044     5119 OK
sawtooth  reverse              1023        2     8445     3065     7422 OK
sawtooth  reverse              1023        4     9467     3828     8444 OK
sawtooth  reverse              1023        8     9783     4075     8760 OK
sawtooth  reverse              1023       16     9711     4122     8688 OK
sawtooth  reverse              1023       32     9423     4089     8400 OK
sawtooth  reverse              1023       64     9007     4008     7984 OK
sawtooth  reverse              1023      128     8499     3863     7476 OK
sawtooth  reverse              1023      256     7895     3594     6872 OK
sawtooth  reverse              1023      512     7146     3073     6123 OK
sawtooth  reverse              1023     1024     6133     2044     5110 OK
sawtooth  reverse_1st_half     1023        1     6142     2044     5119 OK
sawtooth  reverse_1st_half     1023        2     8445     3065     7422 OK
sawtooth  reverse_1st_half     1023        4     9341     3701     8318 OK
sawtooth  reverse_1st_half     1023        8     9533     3949     8510 OK
sawtooth  reverse_1st_half     1023       16     9373     4029     8350 OK
sawtooth  reverse_1st_half     1023       32     9037     4029     8014 OK
sawtooth  reverse_1st_half     1023       64     8613     3973     7590 OK
sawtooth  reverse_1st_half     1023      128     8145     3845     7122 OK
sawtooth  reverse_1st_half     1023      256     7655     3587     6632 OK
sawtooth  reverse_1st_half     1023      512     7154     3073     6131 OK
sawtooth  reverse_1st_half     1023     1024     6644     2052     5621 OK
sawtooth  reverse_2nd_half     1023        1     6142     2044     5119 OK
sawtooth  reverse_2nd_half     1023        2     8444     3063     7421 OK
sawtooth  reverse_2nd_half     1023        4     9212     3571     8189 OK
sawtooth  reverse_2nd_half     1023        8     9404     3883     8381 OK
sawtooth  reverse_2nd_half     1023       16     9276     3995     8253 OK
sawtooth  reverse_2nd_half     1023       32     8972     4011     7949 OK
sawtooth  reverse_2nd_half     1023       64     8572     3963     7549 OK
sawtooth  reverse_2nd_half     1023      128     8120     3839     7097 OK
sawtooth  reverse_2nd_half     1023      256     7640     3583     6617 OK
sawtooth  reverse_2nd_half     1023      512     7146     3071     6123 OK
sawtooth  reverse_2nd_half     1023     1024     6644     2045     5621 OK
sawtooth  sort                 1023        1     6142     2044     5119 OK
sawtooth  sort                 1023        2     6142     2044     5119 OK
sawtooth  sort                 1023        4     6142     2044     5119 OK
sawtooth  sort                 1023        8     6142     2044     5119 OK
sawtooth  sort                 1023       16     6142     2044     5119 OK
sawtooth  sort                 1023       32     6142     2044     5119 OK
sawtooth  sort                 1023       64     6142     2044     5119 OK
sawtooth  sort                 1023      128     6142     2044     5119 OK
sawtooth  sort                 1023      256     6142     2044     5119 OK
sawtooth  sort                 1023      512     6142     2044     5119 OK
sawtooth  sort                 1023     1024     6142     2044     5119 OK
sawtooth  dither               1023        1     9489     3928     8466 OK
sawtooth  dither               1023        2     9805     3899     8782 OK
sawtooth  dither               1023        4     9974     4499     8951 OK
sawtooth  dither               1023        8     9794     4536     8771 OK
sawtooth  dither               1023       16     9428     4683     8405 OK
sawtooth  dither               1023       32     8990     4674     7967 OK
sawtooth  dither               1023       64     8512     4651     7489 OK
sawtooth  dither               1023      128     8019     4530     6996 OK
sawtooth  dither               1023      256     7517     4285     6494 OK
sawtooth  dither               1023      512     7009     3777     5986 OK
sawtooth  dither               1023     1024     6499     2758     5476 OK
sawtooth  unriffle             1023        1     6142     2044     5119 OK
sawtooth  unriffle             1023        2     6142     2044     5119 OK
sawtooth  unriffle             1023        4     6405     2054     5382 OK
sawtooth  unriffle             1023        8     6928     2077     5905 OK
sawtooth  unriffle             1023       16     7395     2127     6372 OK
sawtooth  unriffle             1023       32     7874     2236     6851 OK
sawtooth  unriffle             1023       64     8385     2472     7362 OK
sawtooth  unriffle             1023      128     8928     2979     7905 OK
sawtooth  unriffle             1023      256     9483     4061     8460 OK
sawtooth  unriffle             1023      512     9982     6358     8959 OK
sawtooth  unriffle             1023     1024    10202     9699     9179 OK
sawtooth  unriffle_skewed      1023        1     6142     2044     5119 OK
sawtooth  unriffle_skewed      1023        2     6142     2045     5119 OK
sawtooth  unriffle_skewed      1023        4     6646     2055     5623 OK
sawtooth  unriffle_skewed      1023        8     7023     2069     6000 OK
sawtooth  unriffle_skewed      1023       16     7402     2097     6379 OK
sawtooth  unriffle_skewed      1023       32     7815     2163     6792 OK
sawtooth  unriffle_skewed      1023       64     8262     2323     7239 OK
sawtooth  unriffle_skewed      1023      128     8735     2705     7712 OK
sawtooth  unriffle_skewed      1023      256     9226     3597     8203 OK
sawtooth  unriffle_skewed      1023      512     9729     5639     8706 OK
sawtooth  unriffle_skewed      1023     1024    10230    10220     9207 OK
rand      copy                 1023        1     6142     2044     5119 OK
rand      copy                 1023        2     8195     2690     7172 OK
rand      copy                 1023        4     9206     3248     8183 OK
rand      copy                 1023        8     9596     3792     8573 OK
rand      copy                 1023       16     9837     4382     8814 OK
rand      copy                 1023       32     9912     4825     8889 OK
rand      copy                 1023       64     9904     5179     8881 OK
rand      copy                 1023      128     9934     5573     8911 OK
rand      copy                 1023      256     9962     5849     8939 OK
rand      copy                 1023      512     9937     6037     8914 OK
rand      copy                 1023     1024     9954     6035     8931 OK
rand      reverse              1023        1     6142     2044     5119 OK
rand      reverse              1023        2     8183     2696     7160 OK
rand      reverse              1023        4     9157     3246     8134 OK
rand      reverse              1023        8     9645     3811     8622 OK
rand      reverse              1023       16     9818     4350     8795 OK
rand      reverse              1023       32     9925     4818     8902 OK
rand      reverse              1023       64     9940     5259     8917 OK
rand      reverse              1023      128     9958     5650     8935 OK
rand      reverse              1023      256     9958     5887     8935 OK
rand      reverse              1023      512     9950     6036     8927 OK
rand      reverse              1023     1024     9962     6067     8939 OK
rand      reverse_1st_half     1023        1     6142     2044     5119 OK
rand      reverse_1st_half     1023        2     8144     2690     7121 OK
rand      reverse_1st_half     1023        4     9188     3229     8165 OK
rand      reverse_1st_half     1023        8     9620     3786     8597 OK
rand      reverse_1st_half     1023       16     9823     4359     8800 OK
rand      reverse_1st_half     1023       32     9904     4805     8881 OK
rand      reverse_1st_half     1023       64     9923     5230     8900 OK
rand      reverse_1st_half     1023      128     9939     5601     8916 OK
rand      reverse_1st_half     1023      256     9950     5844     8927 OK
rand      reverse_1st_half     1023      512     9939     6045     8916 OK
rand      reverse_1st_half     1023     1024     9963     6079     8940 OK
rand      reverse_2nd_half     1023        1     6142     2044     5119 OK
rand      reverse_2nd_half     1023        2     8206     2679     7183 OK
rand      reverse_2nd_half     1023        4     9175     3261     8152 OK
rand      reverse_2nd_half     1023        8     9603     3788     8580 OK
rand      reverse_2nd_half     1023       16     9837     4367     8814 OK
rand      reverse_2nd_half     1023       32     9905     4836     8882 OK
rand      reverse_2nd_half     1023       64     9911     5215     8888 OK
rand      reverse_2nd_half     1023      128     9937     5603     8914 OK
rand      reverse_2nd_half     1023      256     9954     5843     8931 OK
rand      reverse_2nd_half     1023      512     9946     5993     8923 OK
rand      reverse_2nd_half     1023     1024     9966     6046     8943 OK
rand      sort                 1023        1     6142     2044     5119 OK
rand      sort                 1023        2     6142     2044     5119 OK
rand      sort                 1023        4     6142     2044     5119 OK
rand      sort                 1023        8     6142     2044     5119 OK
rand      sort                 1023       16     6142     2044     5119 OK
rand      sort                 1023       32     6142     2044     5119 OK
rand      sort                 1023       64     6142     2044     5119 OK
rand      sort                 1023      128     6142     2044     5119 OK
rand      sort                 1023      256     6142     2044     5119 OK
rand      sort                 1023      512     6142     2044     5119 OK
rand      sort                 1023     1024     6142     2044     5119 OK
rand      dither               1023        1     9489     3928     8466 OK
rand      dither               1023        2     9737     3633     8714 OK
rand      dither               1023        4     9862     3780     8839 OK
rand      dither               1023        8     9905     4048     8882 OK
rand      dither               1023       16     9968     4471     8945 OK
rand      dither               1023       32     9985     4884     8962 OK
rand      dither               1023       64     9930     5288     8907 OK
rand      dither               1023      128     9947     5611     8924 OK
rand      dither               1023      256     9950     5888     8927 OK
rand      dither               1023      512     9932     6002     8909 OK
rand      dither               1023     1024     9953     6055     8930 OK
rand      unriffle             1023        1     6142     2044     5119 OK
rand      unriffle             1023        2     8210     2680     7187 OK
rand      unriffle             1023        4     9188     3287     8165 OK
rand      unriffle             1023        8     9612     3784     8589 OK
rand      unriffle             1023       16     9802     4407     8779 OK
rand      unriffle             1023       32     9915     4860     8892 OK
rand      unriffle             1023       64     9945     5299     8922 OK
rand      unriffle             1023      128     9989     5659     8966 OK
rand      unriffle             1023      256     9919     5898     8896 OK
rand      unriffle             1023      512     9960     6084     8937 OK
rand      unriffle             1023     1024     9910     6009     8887 OK
rand      unriffle_skewed      1023        1     6142     2044     5119 OK
rand      unriffle_skewed      1023        2     8212     2683     7189 OK
rand      unriffle_skewed      1023        4     9199     3270     8176 OK
rand      unriffle_skewed      1023        8     9621     3855     8598 OK
rand      unriffle_skewed      1023       16     9815     4403     8792 OK
rand      unriffle_skewed      1023       32     9928     4895     8905 OK
rand      unriffle_skewed      1023       64     9953     5302     8930 OK
rand      unriffle_skewed      1023      128     9967     5622     8944 OK
rand      unriffle_skewed      1023      256     9940     5918     8917 OK
rand      unriffle_skewed      1023      512     9952     6070     8929 OK
rand      unriffle_skewed      1023     1024     9917     6078     8894 OK
stagger   copy                 1023        1     6652     3065     5629 OK
stagger   copy                 1023        2     7335     3419     6312 OK
stagger   copy                 1023        4     7767     4108     6744 OK
stagger   copy                 1023        8     8221     4795     7198 OK
stagger   copy                 1023       16     8681     5191     7658 OK
stagger   copy                 1023       32     9044     4062     8021 OK
stagger   copy                 1023       64     9475     6711     8452 OK
stagger   copy                 1023      128     9740     6263     8717 OK
stagger   copy                 1023      256     9711     5691     8688 OK
stagger   copy                 1023      512     9040     4436     8017 OK
stagger   copy                 1023     1024     6652     3065     5629 OK
stagger   reverse              1023        1     7145     3072     6122 OK
stagger   reverse              1023        2     7316     3417     6293 OK
stagger   reverse              1023        4     7738     4107     6715 OK
stagger   reverse              1023        8     8187     4571     7164 OK
stagger   reverse              1023       16     8610     5179     7587 OK
stagger   reverse              1023       32     9029     4002     8006 OK
stagger   reverse              1023       64     9498     6718     8475 OK
stagger   reverse              1023      128     9788     6529     8765 OK
stagger   reverse              1023      256     9752     5740     8729 OK
stagger   reverse              1023      512     9029     4430     8006 OK
stagger   reverse              1023     1024     7145     3072     6122 OK
stagger   reverse_1st_half     1023        1     7154     3073     6131 OK
stagger   reverse_1st_half     1023        2     7491     3423     6468 OK
stagger   reverse_1st_half     1023        4     7851     4113     6828 OK
stagger   reverse_1st_half     1023        8     8256     4683     7233 OK
stagger   reverse_1st_half     1023       16     8673     5192     7650 OK
stagger   reverse_1st_half     1023       32     9055     4036     8032 OK
stagger   reverse_1st_half     1023       64     9492     6715     8469 OK
stagger   reverse_1st_half     1023      128     9766     6396     8743 OK
stagger   reverse_1st_half     1023      256     9732     5715     8709 OK
stagger   reverse_1st_half     1023      512     9035     4434     8012 OK
stagger   reverse_1st_half     1023     1024     7154     3073     6131 OK
stagger   reverse_2nd_half     1023        1     7146     3071     6123 OK
stagger   reverse_2nd_half     1023        2     7399     3416     6376 OK
stagger   reverse_2nd_half     1023        4     7766     4106     6743 OK
stagger   reverse_2nd_half     1023        8     8185     4679     7162 OK
stagger   reverse_2nd_half     1023       16     8666     5184     7643 OK
stagger   reverse_2nd_half     1023       32     9040     4032     8017 OK
stagger   reverse_2nd_half     1023       64     9491     6710     8468 OK
stagger   reverse_2nd_half     1023      128     9752     6386     8729 OK
stagger   reverse_2nd_half     1023      256     9707     5691     8684 OK
stagger   reverse_2nd_half     1023      512     9027     4431     8004 OK
stagger   reverse_2nd_half     1023     1024     7146     3071     6123 OK
stagger   sort                 1023        1     6142     2044     5119 OK
stagger   sort                 1023        2     6142     2044     5119 OK
stagger   sort                 1023        4     6142     2044     5119 OK
stagger   sort                 1023        8     6142     2044     5119 OK
stagger   sort                 1023       16     6142     2044     5119 OK
stagger   sort                 1023       32     6142     2044     5119 OK
stagger   sort                 1023       64     6142     2044     5119 OK
stagger   sort                 1023      128     6142     2044     5119 OK
stagger   sort                 1023      256     6142     2044     5119 OK
stagger   sort                 1023      512     6142     2044     5119 OK
stagger   sort                 1023     1024     6142     2044     5119 OK
stagger   dither               1023        1     6754     3064     5731 OK
stagger   dither               1023        2     7436     3350     6413 OK
stagger   dither               1023        4     7767     3784     6744 OK
stagger   dither               1023        8     8221     4479     7198 OK
stagger   dither               1023       16     8680     4974     7657 OK
stagger   dither               1023       32     9085     5227     8062 OK
stagger   dither               1023       64     9474     6300     8451 OK
stagger   dither               1023      128     9740     6305     8717 OK
stagger   dither               1023      256     9712     5224     8689 OK
stagger   dither               1023      512     9040     3893     8017 OK
stagger   dither               1023     1024     6754     3064     5731 OK
stagger   unriffle             1023        1     9982     6358     8959 OK
stagger   unriffle             1023        2    10095     8347     9072 OK
stagger   unriffle             1023        4    10024     8213     9001 OK
stagger   unriffle             1023        8    10106     8423     9083 OK
stagger   unriffle             1023       16    10092     8643     9069 OK
stagger   unriffle             1023       32    10026     6285     9003 OK
stagger   unriffle             1023       64    10061     8542     9038 OK
stagger   unriffle             1023      128    10054     8456     9031 OK
stagger   unriffle             1023      256    10042     7781     9019 OK
stagger   unriffle             1023      512    10050     7574     9027 OK
stagger   unriffle             1023     1024     9982     6358     8959 OK
stagger   unriffle_skewed      1023        1     9729     5639     8706 OK
stagger   unriffle_skewed      1023        2    10227     9515     9204 OK
stagger   unriffle_skewed      1023        4    10226     9370     9203 OK
stagger   unriffle_skewed      1023        8    10226     9279     9203 OK
stagger   unriffle_skewed      1023       16    10223     9462     9200 OK
stagger   unriffle_skewed      1023       32    10172     6960     9149 OK
stagger   unriffle_skewed      1023       64    10223     9240     9200 OK
stagger   unriffle_skewed      1023      128    10217     9057     9194 OK
stagger   unriffle_skewed      1023      256    10197     8156     9174 OK
stagger   unriffle_skewed      1023      512    10103     7619     9080 OK
stagger   unriffle_skewed      1023     1024     9729     5639     8706 OK
plateau   copy                 1023        1     6142     2044     5119 OK
plateau   copy                 1023        2     6142     2044     5119 OK
plateau   copy                 1023        4     6142     2044     5119 OK
plateau   copy                 1023        8     6142     2044     5119 OK
plateau   copy                 1023       16     6142     2044     5119 OK
plateau   copy                 1023       32     6142     2044     5119 OK
plateau   copy                 1023       64     6142     2044     5119 OK
plateau   copy                 1023      128     6142     2044     5119 OK
plateau   copy                 1023      256     6142     2044     5119 OK
plateau   copy                 1023      512     6142     2044     5119 OK
plateau   copy                 1023     1024     6142     2044     5119 OK
plateau   reverse              1023        1     6149     2052     5126 OK
plateau   reverse              1023        2     6157     2052     5134 OK
plateau   reverse              1023        4     6169     2052     5146 OK
plateau   reverse              1023        8     6189     2052     5166 OK
plateau   reverse              1023       16     6221     2052     5198 OK
plateau   reverse              1023       32     6269     2052     5246 OK
plateau   reverse              1023       64     6333     2052     5310 OK
plateau   reverse              1023      128     6397     2052     5374 OK
plateau   reverse              1023      256     6397     2052     5374 OK
plateau   reverse              1023      512     6141     2052     5118 OK
plateau   reverse              1023     1024     6133     2044     5110 OK
plateau   reverse_1st_half     1023        1     6150     2052     5127 OK
plateau   reverse_1st_half     1023        2     6157     2052     5134 OK
plateau   reverse_1st_half     1023        4     6171     2053     5148 OK
plateau   reverse_1st_half     1023        8     6195     2054     5172 OK
plateau   reverse_1st_half     1023       16     6235     2055     5212 OK
plateau   reverse_1st_half     1023       32     6299     2056     5276 OK
plateau   reverse_1st_half     1023       64     6395     2057     5372 OK
plateau   reverse_1st_half     1023      128     6523     2058     5500 OK
plateau   reverse_1st_half     1023      256     6651     2059     5628 OK
plateau   reverse_1st_half     1023      512     6644     2052     5621 OK
plateau   reverse_1st_half     1023     1024     6644     2052     5621 OK
plateau   reverse_2nd_half     1023        1     6142     2044     5119 OK
plateau   reverse_2nd_half     1023        2     6142     2044     5119 OK
plateau   reverse_2nd_half     1023        4     6142     2044     5119 OK
plateau   reverse_2nd_half     1023        8     6142     2044     5119 OK
plateau   reverse_2nd_half     1023       16     6142     2044     5119 OK
plateau   reverse_2nd_half     1023       32     6142     2044     5119 OK
plateau   reverse_2nd_half     1023       64     6142     2044     5119 OK
plateau   reverse_2nd_half     1023      128     6142     2044     5119 OK
plateau   reverse_2nd_half     1023      256     6142     2044     5119 OK
plateau   reverse_2nd_half     1023      512     6149     2053     5126 OK
plateau   reverse_2nd_half     1023     1024     6644     2045     5621 OK
plateau   sort                 1023        1     6142     2044     5119 OK
plateau   sort                 1023        2     6142     2044     5119 OK
plateau   sort                 1023        4     6142     2044     5119 OK
plateau   sort                 1023        8     6142     2044     5119 OK
plateau   sort                 1023       16     6142     2044     5119 OK
plateau   sort                 1023       32     6142     2044     5119 OK
plateau   sort                 1023       64     6142     2044     5119 OK
plateau   sort                 1023      128     6142     2044     5119 OK
plateau   sort                 1023      256     6142     2044     5119 OK
plateau   sort                 1023      512     6142     2044     5119 OK
plateau   sort                 1023     1024     6142     2044     5119 OK
plateau   dither               1023        1     9489     3928     8466 OK
plateau   dither               1023        2     9489     3926     8466 OK
plateau   dither               1023        4     9488     3922     8465 OK
plateau   dither               1023        8     9483     3919     8460 OK
plateau   dither               1023       16     9473     3908     8450 OK
plateau   dither               1023       32     9439     3891     8416 OK
plateau   dither               1023       64     9377     3854     8354 OK
plateau   dither               1023      128     9190     3781     8167 OK
plateau   dither               1023      256     8841     3632     7818 OK
plateau   dither               1023      512     7888     3339     6865 OK
plateau   dither               1023     1024     6499     2758     5476 OK
plateau   unriffle             1023        1     6142     2044     5119 OK
plateau   unriffle             1023        2     6150     2053     5127 OK
plateau   unriffle             1023        4     6164     2069     5141 OK
plateau   unriffle             1023        8     6190     2100     5167 OK
plateau   unriffle             1023       16     6239     2162     5216 OK
plateau   unriffle             1023       32     6331     2287     5308 OK
plateau   unriffle             1023       64     6502     2539     5479 OK
plateau   unriffle             1023      128     6816     3046     5793 OK
plateau   unriffle             1023      256     7385     4064     6362 OK
plateau   unriffle             1023      512     8410     6114     7387 OK
plateau   unriffle             1023     1024    10202     9699     9179 OK
plateau   unriffle_skewed      1023        1     6142     2044     5119 OK
plateau   unriffle_skewed      1023        2     6143     2046     5120 OK
plateau   unriffle_skewed      1023        4     6145     2050     5122 OK
plateau   unriffle_skewed      1023        8     6152     2064     5129 OK
plateau   unriffle_skewed      1023       16     6171     2102     5148 OK
plateau   unriffle_skewed      1023       32     6218     2196     5195 OK
plateau   unriffle_skewed      1023       64     6329     2418     5306 OK
plateau   unriffle_skewed      1023      128     6584     2928     5561 OK
plateau   unriffle_skewed      1023      256     7159     4078     6136 OK
plateau   unriffle_skewed      1023      512     8437     6634     7414 OK
plateau   unriffle_skewed      1023     1024    10230    10220     9207 OK
shuffle   copy                 1023        1     6142     2044     5119 OK
shuffle   copy                 1023        2     7497     3576     6474 OK
shuffle   copy                 1023        4     7244     3040     6221 OK
shuffle   copy                 1023        8     6612     2523     5589 OK
shuffle   copy                 1023       16     6379     2307     5356 OK
shuffle   copy                 1023       32     6270     2195     5247 OK
shuffle   copy                 1023       64     6210     2130     5187 OK
shuffle   copy                 1023      128     6171     2080     5148 OK
shuffle   copy                 1023      256     6153     2055     5130 OK
shuffle   copy                 1023      512     6153     2055     5130 OK
shuffle   copy                 1023     1024     6153     2055     5130 OK
shuffle   reverse              1023        1     6133     2044     5110 OK
shuffle   reverse              1023        2     7496     3577     6473 OK
shuffle   reverse              1023        4     7221     3022     6198 OK
shuffle   reverse              1023        8     6612     2528     5589 OK
shuffle   reverse              1023       16     6376     2315     5353 OK
shuffle   reverse              1023       32     6263     2199     5240 OK
shuffle   reverse              1023       64     6204     2133     5181 OK
shuffle   reverse              1023      128     6163     2081     5140 OK
shuffle   reverse              1023      256     6144     2055     5121 OK
shuffle   reverse              1023      512     6144     2055     5121 OK
shuffle   reverse              1023     1024     6144     2055     5121 OK
shuffle   reverse_1st_half     1023        1     6644     2052     5621 OK
shuffle   reverse_1st_half     1023        2     7894     3589     6871 OK
shuffle   reverse_1st_half     1023        4     7362     3038     6339 OK
shuffle   reverse_1st_half     1023        8     7062     2533     6039 OK
shuffle   reverse_1st_half     1023       16     6857     2322     5834 OK
shuffle   reverse_1st_half     1023       32     6760     2205     5737 OK
shuffle   reverse_1st_half     1023       64     6708     2139     5685 OK
shuffle   reverse_1st_half     1023      128     6669     2088     5646 OK
shuffle   reverse_1st_half     1023      256     6653     2063     5630 OK
shuffle   reverse_1st_half     1023      512     6653     2063     5630 OK
shuffle   reverse_1st_half     1023     1024     6653     2063     5630 OK
shuffle   reverse_2nd_half     1023        1     6644     2045     5621 OK
shuffle   reverse_2nd_half     1023        2     7996     3584     6973 OK
shuffle   reverse_2nd_half     1023        4     7634     3048     6611 OK
shuffle   reverse_2nd_half     1023        8     7079     2535     6056 OK
shuffle   reverse_2nd_half     1023       16     6862     2314     5839 OK
shuffle   reverse_2nd_half     1023       32     6759     2197     5736 OK
shuffle   reverse_2nd_half     1023       64     6706     2133     5683 OK
shuffle   reverse_2nd_half     1023      128     6673     2083     5650 OK
shuffle   reverse_2nd_half     1023      256     6655     2056     5632 OK
shuffle   reverse_2nd_half     1023      512     6655     2056     5632 OK
shuffle   reverse_2nd_half     1023     1024     6655     2056     5632 OK
shuffle   sort                 1023        1     6142     2044     5119 OK
shuffle   sort                 1023        2     6142     2044     5119 OK
shuffle   sort                 1023        4     6142     2044     5119 OK
shuffle   sort                 1023        8     6142     2044     5119 OK
shuffle   sort                 1023       16     6142     2044     5119 OK
shuffle   sort                 1023       32     6142     2044     5119 OK
shuffle   sort                 1023       64     6142     2044     5119 OK
shuffle   sort                 1023      128     6142     2044     5119 OK
shuffle   sort                 1023      256     6142     2044     5119 OK
shuffle   sort                 1023      512     6142     2044     5119 OK
shuffle   sort                 1023     1024     6142     2044     5119 OK
shuffle   dither               1023        1     6244     2248     5221 OK
shuffle   dither               1023        2     7567     3486     6544 OK
shuffle   dither               1023        4     7334     3098     6311 OK
shuffle   dither               1023        8     6717     2690     5694 OK
shuffle   dither               1023       16     6481     2488     5458 OK
shuffle   dither               1023       32     6369     2385     5346 OK
shuffle   dither               1023       64     6312     2329     5289 OK
shuffle   dither               1023      128     6274     2285     5251 OK
shuffle   dither               1023      256     6255     2260     5232 OK
shuffle   dither               1023      512     6255     2260     5232 OK
shuffle   dither               1023     1024     6255     2260     5232 OK
shuffle   unriffle             1023        1    10202     9699     9179 OK
shuffle   unriffle             1023        2    10186     7254     9163 OK
shuffle   unriffle             1023        4    10130     7475     9107 OK
shuffle   unriffle             1023        8    10164     8557     9141 OK
shuffle   unriffle             1023       16    10181     9100     9158 OK
shuffle   unriffle             1023       32    10196     9393     9173 OK
shuffle   unriffle             1023       64    10198     9542     9175 OK
shuffle   unriffle             1023      128    10202     9642     9179 OK
shuffle   unriffle             1023      256    10202     9684     9179 OK
shuffle   unriffle             1023      512    10202     9684     9179 OK
shuffle   unriffle             1023     1024    10202     9684     9179 OK
shuffle   unriffle_skewed      1023        1    10230    10220     9207 OK
shuffle   unriffle_skewed      1023        2    10201     7717     9178 OK
shuffle   unriffle_skewed      1023        4    10132     7614     9109 OK
shuffle   unriffle_skewed      1023        8    10187     8860     9164 OK
shuffle   unriffle_skewed      1023       16    10205     9501     9182 OK
shuffle   unriffle_skewed      1023       32    10217     9842     9194 OK
shuffle   unriffle_skewed      1023       64    10221    10019     9198 OK
shuffle   unriffle_skewed      1023      128    10228    10137     9205 OK
shuffle   unriffle_skewed      1023      256    10230    10199     9207 OK
shuffle   unriffle_skewed      1023      512    10230    10199     9207 OK
shuffle   unriffle_skewed      1023     1024    10230    10199     9207 OK
sawtooth  copy                 1024        1     6144     2046     5120 OK
sawtooth  copy                 1024        2     8448     3068     7424 OK
sawtooth  copy                 1024        4     9216     3576     8192 OK
sawtooth  copy                 1024        8     9280     3824     8256 OK
sawtooth  copy                 1024       16     9024     3936     8000 OK
sawtooth  copy                 1024       32     8624     3968     7600 OK
sawtooth  copy                 1024       64     8160     3936     7136 OK
sawtooth  copy                 1024      128     7668     3824     6644 OK
sawtooth  copy                 1024      256     7164     3576     6140 OK
sawtooth  copy                 1024      512     6655     3068     5631 OK
sawtooth  copy                 1024     1024     6144     2046     5120 OK
sawtooth  reverse              1024        1     6144     2046     5120 OK
sawtooth  reverse              1024        2     8448     3068     7424 OK
sawtooth  reverse              1024        4     9216     3576     8192 OK
sawtooth  reverse              1024        8     9280     3824     8256 OK
sawtooth  reverse              1024       16     9024     3936     8000 OK
sawtooth  reverse              1024       32     8624     3968     7600 OK
sawtooth  reverse              1024       64     8160     3936     7136 OK
sawtooth  reverse              1024      128     7668     3824     6644 OK
sawtooth  reverse              1024      256     7164     3576     6140 OK
sawtooth  reverse              1024      512     6655     3068     5631 OK
sawtooth  reverse              1024     1024     6144     2046     5120 OK
sawtooth  reverse_1st_half     1024        1     6144     2046     5120 OK
sawtooth  reverse_1st_half     1024        2     8448     3068     7424 OK
sawtooth  reverse_1st_half     1024        4     9216     3576     8192 OK
sawtooth  reverse_1st_half     1024        8     9280     3824     8256 OK
sawtooth  reverse_1st_half     1024       16     9024     3936     8000 OK
sawtooth  reverse_1st_half     1024       32     8624     3968     7600 OK
sawtooth  reverse_1st_half     1024       64     8160     3936     7136 OK
sawtooth  reverse_1st_half     1024      128     7668     3824     6644 OK
sawtooth  reverse_1st_half     1024      256     7164     3576     6140 OK
sawtooth  reverse_1st_half     1024      512     6655     3068     5631 OK
sawtooth  reverse_1st_half     1024     1024     6144     2046     5120 OK
sawtooth  reverse_2nd_half     1024        1     6144     2046     5120 OK
sawtooth  reverse_2nd_half     1024        2     8448     3068     7424 OK
sawtooth  reverse_2nd_half     1024        4     9216     3576     8192 OK
sawtooth  reverse_2nd_half     1024        8     9280     3824     8256 OK
sawtooth  reverse_2nd_half     1024       16     9024     3936     8000 OK
sawtooth  reverse_2nd_half     1024       32     8624     3968     7600 OK
sawtooth  reverse_2nd_half     1024       64     8160     3936     7136 OK
sawtooth  reverse_2nd_half     1024      128     7668     3824     6644 OK
sawtooth  reverse_2nd_half     1024      256     7164     3576     6140 OK
sawtooth  reverse_2nd_half     1024      512     6655     3068     5631 OK
sawtooth  reverse_2nd_half     1024     1024     6144     2046     5120 OK
sawtooth  sort                 1024        1     6144     2046     5120 OK
sawtooth  sort                 1024        2     6144     2046     5120 OK
sawtooth  sort                 1024        4     6144     2046     5120 OK
sawtooth  sort                 1024        8     6144     2046     5120 OK
sawtooth  sort                 1024       16     6144     2046     5120 OK
sawtooth  sort                 1024       32     6144     2046     5120 OK
sawtooth  sort                 1024       64     6144     2046     5120 OK
sawtooth  sort                 1024      128     6144     2046     5120 OK
sawtooth  sort                 1024      256     6144     2046     5120 OK
sawtooth  sort                 1024      512     6144     2046     5120 OK
sawtooth  sort                 1024     1024     6144     2046     5120 OK
sawtooth  dither               1024        1     9500     3932     8476 OK
sawtooth  dither               1024        2     9817     3905     8793 OK
sawtooth  dither               1024        4     9984     4503     8960 OK
sawtooth  dither               1024        8     9802     4539     8778 OK
sawtooth  dither               1024       16     9436     4687     8412 OK
sawtooth  dither               1024       32     8997     4679     7973 OK
sawtooth  dither               1024       64     8518     4655     7494 OK
sawtooth  dither               1024      128     8023     4533     6999 OK
sawtooth  dither               1024      256     7521     4289     6497 OK
sawtooth  dither               1024      512     7012     3780     5988 OK
sawtooth  dither               1024     1024     6501     2760     5477 OK
sawtooth  unriffle             1024        1     6144     2046     5120 OK
sawtooth  unriffle             1024        2     6144     2046     5120 OK
sawtooth  unriffle             1024        4     6400     2048     5376 OK
sawtooth  unriffle             1024        8     6784     2056     5760 OK
sawtooth  unriffle             1024       16     7232     2080     6208 OK
sawtooth  unriffle             1024       32     7712     2144     6688 OK
sawtooth  unriffle             1024       64     8208     2304     7184 OK
sawtooth  unriffle             1024      128     8712     2688     7688 OK
sawtooth  unriffle             1024      256     9220     3584     8196 OK
sawtooth  unriffle             1024      512     9730     5632     8706 OK
sawtooth  unriffle             1024     1024    10241    10240     9217 OK
sawtooth  unriffle_skewed      1024        1     6144     2046     5120 OK
sawtooth  unriffle_skewed      1024        2     6144     2046     5120 OK
sawtooth  unriffle_skewed      1024        4     6400     2048     5376 OK
sawtooth  unriffle_skewed      1024        8     6784     2056     5760 OK
sawtooth  unriffle_skewed      1024       16     7232     2080     6208 OK
sawtooth  unriffle_skewed      1024       32     7712     2144     6688 OK
sawtooth  unriffle_skewed      1024       64     8208     2304     7184 OK
sawtooth  unriffle_skewed      1024      128     8712     2688     7688 OK
sawtooth  unriffle_skewed      1024      256     9220     3584     8196 OK
sawtooth  unriffle_skewed      1024      512     9730     5632     8706 OK
sawtooth  unriffle_skewed      1024     1024    10241    10240     9217 OK
rand      copy                 1024        1     6144     2046     5120 OK
rand      copy                 1024        2     8197     2692     7173 OK
rand      copy                 1024        4     9211     3252     8187 OK
rand      copy                 1024        8     9607     3796     8583 OK
rand      copy                 1024       16     9849     4388     8825 OK
rand      copy                 1024       32     9924     4831     8900 OK
rand      copy                 1024       64     9914     5184     8890 OK
rand      copy                 1024      128     9945     5580     8921 OK
rand      copy                 1024      256     9973     5856     8949 OK
rand      copy                 1024      512     9948     6043     8924 OK
rand      copy                 1024     1024     9965     6041     8941 OK
rand      reverse              1024        1     6144     2046     5120 OK
rand      reverse              1024        2     8197     2694     7173 OK
rand      reverse              1024        4     9139     3247     8115 OK
rand      reverse              1024        8     9624     3844     8600 OK
rand      reverse              1024       16     9846     4386     8822 OK
rand      reverse              1024       32     9948     4801     8924 OK
rand      reverse              1024       64     9941     5244     8917 OK
rand      reverse              1024      128     9946     5603     8922 OK
rand      reverse              1024      256     9973     5843     8949 OK
rand      reverse              1024      512     9949     6011     8925 OK
rand      reverse              1024     1024     9965     6025     8941 OK
rand      reverse_1st_half     1024        1     6144     2046     5120 OK
rand      reverse_1st_half     1024        2     8149     2693     7125 OK
rand      reverse_1st_half     1024        4     9171     3229     8147 OK
rand      reverse_1st_half     1024        8     9613     3800     8589 OK
rand      reverse_1st_half     1024       16     9840     4379     8816 OK
rand      reverse_1st_half     1024       32     9923     4802     8899 OK
rand      reverse_1st_half     1024       64     9913     5200     8889 OK
rand      reverse_1st_half     1024      128     9936     5574     8912 OK
rand      reverse_1st_half     1024      256     9973     5834     8949 OK
rand      reverse_1st_half     1024      512     9945     6036     8921 OK
rand      reverse_1st_half     1024     1024     9963     6044     8939 OK
rand      reverse_2nd_half     1024        1     6144     2046     5120 OK
rand      reverse_2nd_half     1024        2     8243     2693     7219 OK
rand      reverse_2nd_half     1024        4     9197     3270     8173 OK
rand      reverse_2nd_half     1024        8     9620     3840     8596 OK
rand      reverse_2nd_half     1024       16     9861     4395     8837 OK
rand      reverse_2nd_half     1024       32     9940     4830     8916 OK
rand      reverse_2nd_half     1024       64     9938     5228     8914 OK
rand      reverse_2nd_half     1024      128     9950     5609     8926 OK
rand      reverse_2nd_half     1024      256     9971     5860     8947 OK
rand      reverse_2nd_half     1024      512     9950     6019     8926 OK
rand      reverse_2nd_half     1024     1024     9966     6033     8942 OK
rand      sort                 1024        1     6144     2046     5120 OK
rand      sort                 1024        2     6144     2046     5120 OK
rand      sort                 1024        4     6144     2046     5120 OK
rand      sort                 1024        8     6144     2046     5120 OK
rand      sort                 1024       16     6144     2046     5120 OK
rand      sort                 1024       32     6144     2046     5120 OK
rand      sort                 1024       64     6144     2046     5120 OK
rand      sort                 1024      128     6144     2046     5120 OK
rand      sort                 1024      256     6144     2046     5120 OK
rand      sort                 1024      512     6144     2046     5120 OK
rand      sort                 1024     1024     6144     2046     5120 OK
rand      dither               1024        1     9500     3932     8476 OK
rand      dither               1024        2     9747     3637     8723 OK
rand      dither               1024        4     9872     3784     8848 OK
rand      dither               1024        8     9915     4054     8891 OK
rand      dither               1024       16     9980     4474     8956 OK
rand      dither               1024       32     9997     4889     8973 OK
rand      dither               1024       64     9940     5293     8916 OK
rand      dither               1024      128     9957     5616     8933 OK
rand      dither               1024      256     9961     5895     8937 OK
rand      dither               1024      512     9943     6006     8919 OK
rand      dither               1024     1024     9964     6059     8940 OK
rand      unriffle             1024        1     6144     2046     5120 OK
rand      unriffle             1024        2     8192     2687     7168 OK
rand      unriffle             1024        4     9200     3272     8176 OK
rand      unriffle             1024        8     9630     3851     8606 OK
rand      unriffle             1024       16     9816     4400     8792 OK
rand      unriffle             1024       32     9939     4898     8915 OK
rand      unriffle             1024       64     9960     5298     8936 OK
rand      unriffle             1024      128     9977     5638     8953 OK
rand      unriffle             1024      256     9955     5956     8931 OK
rand      unriffle             1024      512     9965     6078     8941 OK
rand      unriffle             1024     1024     9933     6100     8909 OK
rand      unriffle_skewed      1024        1     6144     2046     5120 OK
rand      unriffle_skewed      1024        2     8192     2687     7168 OK
rand      unriffle_skewed      1024        4     9200     3272     8176 OK
rand      unriffle_skewed      1024        8     9630     3851     8606 OK
rand      unriffle_skewed      1024       16     9816     4400     8792 OK
rand      unriffle_skewed      1024       32     9939     4898     8915 OK
rand      unriffle_skewed      1024       64     9960     5298     8936 OK
rand      unriffle_skewed      1024      128     9977     5638     8953 OK
rand      unriffle_skewed      1024      256     9955     5956     8931 OK
rand      unriffle_skewed      1024      512     9965     6078     8941 OK
rand      unriffle_skewed      1024     1024     9933     6100     8909 OK
stagger   copy                 1024        1     6655     3068     5631 OK
stagger   copy                 1024        2     7327     3421     6303 OK
stagger   copy                 1024        4     7760     3702     6736 OK
stagger   copy                 1024        8     8207     4575     7183 OK
stagger   copy                 1024       16     8652     5064     7628 OK
stagger   copy                 1024       32     9040     4009     8016 OK
stagger   copy                 1024       64     9472     5486     8448 OK
stagger   copy                 1024      128     9716     5653     8692 OK
stagger   copy                 1024      256     9596     5212     8572 OK
stagger   copy                 1024      512     8703     4087     7679 OK
stagger   copy                 1024     1024     6144     2046     5120 OK
stagger   reverse              1024        1     6655     3068     5631 OK
stagger   reverse              1024        2     7327     3421     6303 OK
stagger   reverse              1024        4     7760     3702     6736 OK
stagger   reverse              1024        8     8207     4575     7183 OK
stagger   reverse              1024       16     8652     5064     7628 OK
stagger   reverse              1024       32     9040     4009     8016 OK
stagger   reverse              1024       64     9472     5486     8448 OK
stagger   reverse              1024      128     9716     5653     8692 OK
stagger   reverse              1024      256     9596     5212     8572 OK
stagger   reverse              1024      512     8703     4087     7679 OK
stagger   reverse              1024     1024     6144     2046     5120 OK
stagger   reverse_1st_half     1024        1     6655     3068     5631 OK
stagger   reverse_1st_half     1024        2     7327     3421     6303 OK
stagger   reverse_1st_half     1024        4     7760     3702     6736 OK
stagger   reverse_1st_half     1024        8     8207     4575     7183 OK
stagger   reverse_1st_half     1024       16     8652     5064     7628 OK
stagger   reverse_1st_half     1024       32     9040     4009     8016 OK
stagger   reverse_1st_half     1024       64     9472     5486     8448 OK
stagger   reverse_1st_half     1024      128     9716     5653     8692 OK
stagger   reverse_1st_half     1024      256     9596     5212     8572 OK
stagger   reverse_1st_half     1024      512     8703     4087     7679 OK
stagger   reverse_1st_half     1024     1024     6144     2046     5120 OK
stagger   reverse_2nd_half     1024        1     6655     3068     5631 OK
stagger   reverse_2nd_half     1024        2     7327     3421     6303 OK
stagger   reverse_2nd_half     1024        4     7760     3702     6736 OK
stagger   reverse_2nd_half     1024        8     8207     4575     7183 OK
stagger   reverse_2nd_half     1024       16     8652     5064     7628 OK
stagger   reverse_2nd_half     1024       32     9040     4009     8016 OK
stagger   reverse_2nd_half     1024       64     9472     5486     8448 OK
stagger   reverse_2nd_half     1024      128     9716     5653     8692 OK
stagger   reverse_2nd_half     1024      256     9596     5212     8572 OK
stagger   reverse_2nd_half     1024      512     8703     4087     7679 OK
stagger   reverse_2nd_half     1024     1024     6144     2046     5120 OK
stagger   sort                 1024        1     6144     2046     5120 OK
stagger   sort                 1024        2     6144     2046     5120 OK
stagger   sort                 1024        4     6144     2046     5120 OK
stagger   sort                 1024        8     6144     2046     5120 OK
stagger   sort                 1024       16     6144     2046     5120 OK
stagger   sort                 1024       32     6144     2046     5120 OK
stagger   sort                 1024       64     6144     2046     5120 OK
stagger   sort                 1024      128     6144     2046     5120 OK
stagger   sort                 1024      256     6144     2046     5120 OK
stagger   sort                 1024      512     6144     2046     5120 OK
stagger   sort                 1024     1024     6144     2046     5120 OK
stagger   dither               1024        1     6757     3068     5733 OK
stagger   dither               1024        2     7428     3353     6404 OK
stagger   dither               1024        4     7760     3382     6736 OK
stagger   dither               1024        8     8207     4575     7183 OK
stagger   dither               1024       16     8651     5326     7627 OK
stagger   dither               1024       32     9067     4079     8043 OK
stagger   dither               1024       64     9477     5817     8453 OK
stagger   dither               1024      128     9717     5726     8693 OK
stagger   dither               1024      256     9596     5212     8572 OK
stagger   dither               1024      512     8806     4193     7782 OK
stagger   dither               1024     1024     6501     2760     5477 OK
stagger   unriffle             1024        1     9730     5632     8706 OK
stagger   unriffle             1024        2    10241    10240     9217 OK
stagger   unriffle             1024        4    10241    10240     9217 OK
stagger   unriffle             1024        8    10241    10240     9217 OK
stagger   unriffle             1024       16    10241    10240     9217 OK
stagger   unriffle             1024       32    10241    10240     9217 OK
stagger   unriffle             1024       64    10241    10240     9217 OK
stagger   unriffle             1024      128    10241    10240     9217 OK
stagger   unriffle             1024      256    10241    10240     9217 OK
stagger   unriffle             1024      512    10241    10240     9217 OK
stagger   unriffle             1024     1024    10241    10240     9217 OK
stagger   unriffle_skewed      1024        1     9730     5632     8706 OK
stagger   unriffle_skewed      1024        2    10241    10240     9217 OK
stagger   unriffle_skewed      1024        4    10241    10240     9217 OK
stagger   unriffle_skewed      1024        8    10241    10240     9217 OK
stagger   unriffle_skewed      1024       16    10241    10240     9217 OK
stagger   unriffle_skewed      1024       32    10241    10240     9217 OK
stagger   unriffle_skewed      1024       64    10241    10240     9217 OK
stagger   unriffle_skewed      1024      128    10241    10240     9217 OK
stagger   unriffle_skewed      1024      256    10241    10240     9217 OK
stagger   unriffle_skewed      1024      512    10241    10240     9217 OK
stagger   unriffle_skewed      1024     1024    10241    10240     9217 OK
plateau   copy                 1024        1     6144     2046     5120 OK
plateau   copy                 1024        2     6144     2046     5120 OK
plateau   copy                 1024        4     6144     2046     5120 OK
plateau   copy                 1024        8     6144     2046     5120 OK
plateau   copy                 1024       16     6144     2046     5120 OK
plateau   copy                 1024       32     6144     2046     5120 OK
plateau   copy                 1024       64     6144     2046     5120 OK
plateau   copy                 1024      128     6144     2046     5120 OK
plateau   copy                 1024      256     6144     2046     5120 OK
plateau   copy                 1024      512     6144     2046     5120 OK
plateau   copy                 1024     1024     6144     2046     5120 OK
plateau   reverse              1024        1     6153     2055     5129 OK
plateau   reverse              1024        2     6160     2054     5136 OK
plateau   reverse              1024        4     6172     2053     5148 OK
plateau   reverse              1024        8     6192     2052     5168 OK
plateau   reverse              1024       16     6224     2051     5200 OK
plateau   reverse              1024       32     6272     2050     5248 OK
plateau   reverse              1024       64     6336     2049     5312 OK
plateau   reverse              1024      128     6400     2048     5376 OK
plateau   reverse              1024      256     6400     2047     5376 OK
plateau   reverse              1024      512     6144     2046     5120 OK
plateau   reverse              1024     1024     6144     2046     5120 OK
plateau   reverse_1st_half     1024        1     6152     2054     5128 OK
plateau   reverse_1st_half     1024        2     6158     2053     5134 OK
plateau   reverse_1st_half     1024        4     6168     2052     5144 OK
plateau   reverse_1st_half     1024        8     6184     2051     5160 OK
plateau   reverse_1st_half     1024       16     6208     2050     5184 OK
plateau   reverse_1st_half     1024       32     6240     2049     5216 OK
plateau   reverse_1st_half     1024       64     6272     2048     5248 OK
plateau   reverse_1st_half     1024      128     6272     2047     5248 OK
plateau   reverse_1st_half     1024      256     6144     2046     5120 OK
plateau   reverse_1st_half     1024      512     6144     2046     5120 OK
plateau   reverse_1st_half     1024     1024     6144     2046     5120 OK
plateau   reverse_2nd_half     1024        1     6144     2046     5120 OK
plateau   reverse_2nd_half     1024        2     6144     2046     5120 OK
plateau   reverse_2nd_half     1024        4     6144     2046     5120 OK
plateau   reverse_2nd_half     1024        8     6144     2046     5120 OK
plateau   reverse_2nd_half     1024       16     6144     2046     5120 OK
plateau   reverse_2nd_half     1024       32     6144     2046     5120 OK
plateau   reverse_2nd_half     1024       64     6144     2046     5120 OK
plateau   reverse_2nd_half     1024      128     6144     2046     5120 OK
plateau   reverse_2nd_half     1024      256     6144     2046     5120 OK
plateau   reverse_2nd_half     1024      512     6144     2046     5120 OK
plateau   reverse_2nd_half     1024     1024     6144     2046     5120 OK
plateau   sort                 1024        1     6144     2046     5120 OK
plateau   sort                 1024        2     6144     2046     5120 OK
plateau   sort                 1024        4     6144     2046     5120 OK
plateau   sort                 1024        8     6144     2046     5120 OK
plateau   sort                 1024       16     6144     2046     5120 OK
plateau   sort                 1024       32     6144     2046     5120 OK
plateau   sort                 1024       64     6144     2046     5120 OK
plateau   sort                 1024      128     6144     2046     5120 OK
plateau   sort                 1024      256     6144     2046     5120 OK
plateau   sort                 1024      512     6144     2046     5120 OK
plateau   sort                 1024     1024     6144     2046     5120 OK
plateau   dither               1024        1     9500     3932     8476 OK
plateau   dither               1024        2     9500     3930     8476 OK
plateau   dither               1024        4     9499     3926     8475 OK
plateau   dither               1024        8     9494     3923     8470 OK
plateau   dither               1024       16     9484     3912     8460 OK
plateau   dither               1024       32     9450     3895     8426 OK
plateau   dither               1024       64     9388     3858     8364 OK
plateau   dither               1024      128     9201     3785     8177 OK
plateau   dither               1024      256     8852     3636     7828 OK
plateau   dither               1024      512     7898     3343     6874 OK
plateau   dither               1024     1024     6501     2760     5477 OK
plateau   unriffle             1024        1     6144     2046     5120 OK
plateau   unriffle             1024        2     6145     2048     5121 OK
plateau   unriffle             1024        4     6148     2054     5124 OK
plateau   unriffle             1024        8     6156     2070     5132 OK
plateau   unriffle             1024       16     6176     2110     5152 OK
plateau   unriffle             1024       32     6224     2206     5200 OK
plateau   unriffle             1024       64     6336     2430     5312 OK
plateau   unriffle             1024      128     6592     2942     5568 OK
plateau   unriffle             1024      256     7168     4094     6144 OK
plateau   unriffle             1024      512     8448     6654     7424 OK
plateau   unriffle             1024     1024    10241    10240     9217 OK
plateau   unriffle_skewed      1024        1     6144     2046     5120 OK
plateau   unriffle_skewed      1024        2     6145     2048     5121 OK
plateau   unriffle_skewed      1024        4     6148     2054     5124 OK
plateau   unriffle_skewed      1024        8     6156     2070     5132 OK
plateau   unriffle_skewed      1024       16     6176     2110     5152 OK
plateau   unriffle_skewed      1024       32     6224     2206     5200 OK
plateau   unriffle_skewed      1024       64     6336     2430     5312 OK
plateau   unriffle_skewed      1024      128     6592     2942     5568 OK
plateau   unriffle_skewed      1024      256     7168     4094     6144 OK
plateau   unriffle_skewed      1024      512     8448     6654     7424 OK
plateau   unriffle_skewed      1024     1024    10241    10240     9217 OK
shuffle   copy                 1024        1     6144     2046     5120 OK
shuffle   copy                 1024        2     7499     3578     6475 OK
shuffle   copy                 1024        4     7246     3042     6222 OK
shuffle   copy                 1024        8     6614     2525     5590 OK
shuffle   copy                 1024       16     6381     2309     5357 OK
shuffle   copy                 1024       32     6272     2197     5248 OK
shuffle   copy                 1024       64     6212     2132     5188 OK
shuffle   copy                 1024      128     6173     2082     5149 OK
shuffle   copy                 1024      256     6155     2057     5131 OK
shuffle   copy                 1024      512     6155     2057     5131 OK
shuffle   copy                 1024     1024     6155     2057     5131 OK
shuffle   reverse              1024        1     6144     2046     5120 OK
shuffle   reverse              1024        2     7499     3578     6475 OK
shuffle   reverse              1024        4     7246     3042     6222 OK
shuffle   reverse              1024        8     6614     2525     5590 OK
shuffle   reverse              1024       16     6381     2309     5357 OK
shuffle   reverse              1024       32     6272     2197     5248 OK
shuffle   reverse              1024       64     6212     2132     5188 OK
shuffle   reverse              1024      128     6173     2082     5149 OK
shuffle   reverse              1024      256     6155     2057     5131 OK
shuffle   reverse              1024      512     6155     2057     5131 OK
shuffle   reverse              1024     1024     6155     2057     5131 OK
shuffle   reverse_1st_half     1024        1     6144     2046     5120 OK
shuffle   reverse_1st_half     1024        2     7499     3578     6475 OK
shuffle   reverse_1st_half     1024        4     7246     3042     6222 OK
shuffle   reverse_1st_half     1024        8     6614     2525     5590 OK
shuffle   reverse_1st_half     1024       16     6381     2309     5357 OK
shuffle   reverse_1st_half     1024       32     6272     2197     5248 OK
shuffle   reverse_1st_half     1024       64     6212     2132     5188 OK
shuffle   reverse_1st_half     1024      128     6173     2082     5149 OK
shuffle   reverse_1st_half     1024      256     6155     2057     5131 OK
shuffle   reverse_1st_half     1024      512     6155     2057     5131 OK
shuffle   reverse_1st_half     1024     1024     6155     2057     5131 OK
shuffle   reverse_2nd_half     1024        1     6144     2046     5120 OK
shuffle   reverse_2nd_half     1024        2     7499     3578     6475 OK
shuffle   reverse_2nd_half     1024        4     7246     3042     6222 OK
shuffle   reverse_2nd_half     1024        8     6614     2525     5590 OK
shuffle   reverse_2nd_half     1024       16     6381     2309     5357 OK
shuffle   reverse_2nd_half     1024       32     6272     2197     5248 OK
shuffle   reverse_2nd_half     1024       64     6212     2132     5188 OK
shuffle   reverse_2nd_half     1024      128     6173     2082     5149 OK
shuffle   reverse_2nd_half     1024      256     6155     2057     5131 OK
shuffle   reverse_2nd_half     1024      512     6155     2057     5131 OK
shuffle   reverse_2nd_half     1024     1024     6155     2057     5131 OK
shuffle   sort                 1024        1     6144     2046     5120 OK
shuffle   sort                 1024        2     6144     2046     5120 OK
shuffle   sort                 1024        4     6144     2046     5120 OK
shuffle   sort                 1024        8     6144     2046     5120 OK
shuffle   sort                 1024       16     6144     2046     5120 OK
shuffle   sort                 1024       32     6144     2046     5120 OK
shuffle   sort                 1024       64     6144     2046     5120 OK
shuffle   sort                 1024      128     6144     2046     5120 OK
shuffle   sort                 1024      256     6144     2046     5120 OK
shuffle   sort                 1024      512     6144     2046     5120 OK
shuffle   sort                 1024     1024     6144     2046     5120 OK
shuffle   dither               1024        1     6246     2250     5222 OK
shuffle   dither               1024        2     7569     3488     6545 OK
shuffle   dither               1024        4     7336     3100     6312 OK
shuffle   dither               1024        8     6719     2692     5695 OK
shuffle   dither               1024       16     6483     2490     5459 OK
shuffle   dither               1024       32     6371     2387     5347 OK
shuffle   dither               1024       64     6314     2331     5290 OK
shuffle   dither               1024      128     6276     2287     5252 OK
shuffle   dither               1024      256     6257     2262     5233 OK
shuffle   dither               1024      512     6257     2262     5233 OK
shuffle   dither               1024     1024     6257     2262     5233 OK
shuffle   unriffle             1024        1    10241    10240     9217 OK
shuffle   unriffle             1024        2    10210     7732     9186 OK
shuffle   unriffle             1024        4    10144     7630     9120 OK
shuffle   unriffle             1024        8    10198     8872     9174 OK
shuffle   unriffle             1024       16    10216     9512     9192 OK
shuffle   unriffle             1024       32    10228     9856     9204 OK
shuffle   unriffle             1024       64    10232    10036     9208 OK
shuffle   unriffle             1024      128    10239    10154     9215 OK
shuffle   unriffle             1024      256    10241    10216     9217 OK
shuffle   unriffle             1024      512    10241    10216     9217 OK
shuffle   unriffle             1024     1024    10241    10216     9217 OK
shuffle   unriffle_skewed      1024        1    10241    10240     9217 OK
shuffle   unriffle_skewed      1024        2    10210     7732     9186 OK
shuffle   unriffle_skewed      1024        4    10144     7630     9120 OK
shuffle   unriffle_skewed      1024        8    10198     8872     9174 OK
shuffle   unriffle_skewed      1024       16    10216     9512     9192 OK
shuffle   unriffle_skewed      1024       32    10228     9856     9204 OK
shuffle   unriffle_skewed      1024       64    10232    10036     9208 OK
shuffle   unriffle_skewed      1024      128    10239    10154     9215 OK
shuffle   unriffle_skewed      1024      256    10241    10216     9217 OK
shuffle   unriffle_skewed      1024      512    10241    10216     9217 OK
shuffle   unriffle_skewed      1024     1024    10241    10216     9217 OK
sawtooth  copy                 1025        1     7169     2048     6144 OK
sawtooth  copy                 1025        2     8962     3071     7937 OK
sawtooth  copy                 1025        4     9474     3579     8449 OK
sawtooth  copy                 1025        8     9410     3827     8385 OK
sawtooth  copy                 1025       16     9090     3939     8065 OK
sawtooth  copy                 1025       32     8658     3971     7633 OK
sawtooth  copy                 1025       64     8178     3939     7153 OK
sawtooth  copy                 1025      128     7678     3827     6653 OK
sawtooth  copy                 1025      256     7170     3579     6145 OK
sawtooth  copy                 1025      512     6659     3071     5634 OK
sawtooth  copy                 1025     1024     6147     2049     5122 OK
sawtooth  copy                 1025     2048     7169     2048     6144 OK
sawtooth  reverse              1025        1     7169     2048     6144 OK
sawtooth  reverse              1025        2     8962     3071     7937 OK
sawtooth  reverse              1025        4     9730     3835     8705 OK
sawtooth  reverse              1025        8     9666     4083     8641 OK
sawtooth  reverse              1025       16     9282     4131     8257 OK
sawtooth  reverse              1025       32     8786     4099     7761 OK
sawtooth  reverse              1025       64     8258     4019     7233 OK
sawtooth  reverse              1025      128     7726     3875     6701 OK
sawtooth  reverse              1025      256     7198     3607     6173 OK
sawtooth  reverse              1025      512     6675     3087     5650 OK
sawtooth  reverse              1025     1024     6156     2058     5131 OK
sawtooth  reverse              1025     2048     6146     2048     5121 OK
sawtooth  reverse_1st_half     1025        1     7169     2048     6144 OK
sawtooth  reverse_1st_half     1025        2     8962     3071     7937 OK
sawtooth  reverse_1st_half     1025        4     9474     3579     8449 OK
sawtooth  reverse_1st_half     1025        8     9410     3827     8385 OK
sawtooth  reverse_1st_half     1025       16     9090     3939     8065 OK
sawtooth  reverse_1st_half     1025       32     8658     3971     7633 OK
sawtooth  reverse_1st_half     1025       64     8178     3939     7153 OK
sawtooth  reverse_1st_half     1025      128     7678     3827     6653 OK
sawtooth  reverse_1st_half     1025      256     7170     3579     6145 OK
sawtooth  reverse_1st_half     1025      512     6659     3071     5634 OK
sawtooth  reverse_1st_half     1025     1024     6147     2049     5122 OK
sawtooth  reverse_1st_half     1025     2048     7169     2048     6144 OK
sawtooth  reverse_2nd_half     1025        1     7169     2048     6144 OK
sawtooth  reverse_2nd_half     1025        2     8962     3071     7937 OK
sawtooth  reverse_2nd_half     1025        4     9602     3707     8577 OK
sawtooth  reverse_2nd_half     1025        8     9538     3955     8513 OK
sawtooth  reverse_2nd_half     1025       16     9186     4035     8161 OK
sawtooth  reverse_2nd_half     1025       32     8722     4035     7697 OK
sawtooth  reverse_2nd_half     1025       64     8218     3979     7193 OK
sawtooth  reverse_2nd_half     1025      128     7702     3851     6677 OK
sawtooth  reverse_2nd_half     1025      256     7184     3593     6159 OK
sawtooth  reverse_2nd_half     1025      512     6667     3079     5642 OK
sawtooth  reverse_2nd_half     1025     1024     6668     2059     5643 OK
sawtooth  reverse_2nd_half     1025     2048     6658     2049     5633 OK
sawtooth  sort                 1025        1     7169     2048     6144 OK
sawtooth  sort                 1025        2     7169     2048     6144 OK
sawtooth  sort                 1025        4     7169     2048     6144 OK
sawtooth  sort                 1025        8     7169     2048     6144 OK
sawtooth  sort                 1025       16     7169     2048     6144 OK
sawtooth  sort                 1025       32     7169     2048     6144 OK
sawtooth  sort                 1025       64     7169     2048     6144 OK
sawtooth  sort                 1025      128     7169     2048     6144 OK
sawtooth  sort                 1025      256     7169     2048     6144 OK
sawtooth  sort                 1025      512     7169     2048     6144 OK
sawtooth  sort                 1025     1024     7169     2048     6144 OK
sawtooth  sort                 1025     2048     7169     2048     6144 OK
sawtooth  dither               1025        1    10525     3934     9500 OK
sawtooth  dither               1025        2    10741     3908     9716 OK
sawtooth  dither               1025        4    10703     4506     9678 OK
sawtooth  dither               1025        8    10188     4542     9163 OK
sawtooth  dither               1025       16     9630     4690     8605 OK
sawtooth  dither               1025       32     9095     4682     8070 OK
sawtooth  dither               1025       64     8568     4658     7543 OK
sawtooth  dither               1025      128     8049     4536     7024 OK
sawtooth  dither               1025      256     7535     4292     6510 OK
sawtooth  dither               1025      512     7020     3783     5995 OK
sawtooth  dither               1025     1024     6506     2763     5481 OK
sawtooth  dither               1025     2048     7526     2762     6501 OK
sawtooth  unriffle             1025        1     7169     2048     6144 OK
sawtooth  unriffle             1025        2     7169     2048     6144 OK
sawtooth  unriffle             1025        4     7416     2060     6391 OK
sawtooth  unriffle             1025        8     7537     2076     6512 OK
sawtooth  unriffle             1025       16     7724     2106     6699 OK
sawtooth  unriffle             1025       32     8009     2174     6984 OK
sawtooth  unriffle             1025       64     8376     2336     7351 OK
sawtooth  unriffle             1025      128     8801     2720     7776 OK
sawtooth  unriffle             1025      256     9264     3614     8239 OK
sawtooth  unriffle             1025      512     9751     5658     8726 OK
sawtooth  unriffle             1025     1024    10244    10234     9219 OK
sawtooth  unriffle             1025     2048    10243    10233     9218 OK
sawtooth  unriffle_skewed      1025        1     7169     2048     6144 OK
sawtooth  unriffle_skewed      1025        2     6658     2049     5633 OK
sawtooth  unriffle_skewed      1025        4     6658     2051     5633 OK
sawtooth  unriffle_skewed      1025        8     6914     2059     5889 OK
sawtooth  unriffle_skewed      1025       16     7298     2083     6273 OK
sawtooth  unriffle_skewed      1025       32     7746     2147     6721 OK
sawtooth  unriffle_skewed      1025       64     8226     2307     7201 OK
sawtooth  unriffle_skewed      1025      128     8722     2691     7697 OK
sawtooth  unriffle_skewed      1025      256     9226     3587     8201 OK
sawtooth  unriffle_skewed      1025      512     9734     5635     8709 OK
sawtooth  unriffle_skewed      1025     1024    10244    10243     9219 OK
sawtooth  unriffle_skewed      1025     2048    11266    10242    10241 OK
rand      copy                 1025        1     7169     2048     6144 OK
rand      copy                 1025        2     8689     2695     7664 OK
rand      copy                 1025        4     9463     3255     8438 OK
rand      copy                 1025        8     9714     3799     8689 OK
rand      copy                 1025       16     9904     4391     8879 OK
rand      copy                 1025       32    10453     4834     9428 OK
rand      copy                 1025       64    10692     5187     9667 OK
rand      copy                 1025      128    10347     5583     9322 OK
rand      copy                 1025      256    10695     5859     9670 OK
rand      copy                 1025      512    10824     6046     9799 OK
rand      copy                 1025     1024    10910     6044     9885 OK
rand      copy                 1025     2048    10945     6116     9920 OK
rand      reverse              1025        1     7169     2048     6144 OK
rand      reverse              1025        2     9242     2700     8217 OK
rand      reverse              1025        4    10181     3253     9156 OK
rand      reverse              1025        8    10669     3834     9644 OK
rand      reverse              1025       16    10852     4384     9827 OK
rand      reverse              1025       32    10420     4829     9395 OK
rand      reverse              1025       64    10209     5273     9184 OK
rand      reverse              1025      128    10093     5621     9068 OK
rand      reverse              1025      256    10561     5895     9536 OK
rand      reverse              1025      512    10245     6070     9220 OK
rand      reverse              1025     1024    10117     6092     9092 OK
rand      reverse              1025     2048    10576     6149     9551 OK
rand      reverse_1st_half     1025        1     7169     2048     6144 OK
rand      reverse_1st_half     1025        2     8641     2696     7616 OK
rand      reverse_1st_half     1025        4     9423     3232     8398 OK
rand      reverse_1st_half     1025        8     9720     3803     8695 OK
rand      reverse_1st_half     1025       16     9895     4382     8870 OK
rand      reverse_1st_half     1025       32    10452     4805     9427 OK
rand      reverse_1st_half     1025       64    10691     5203     9666 OK
rand      reverse_1st_half     1025      128    10338     5577     9313 OK
rand      reverse_1st_half     1025      256    10695     5837     9670 OK
rand      reverse_1st_half     1025      512    10821     6039     9796 OK
rand      reverse_1st_half     1025     1024    10908     6047     9883 OK
rand      reverse_1st_half     1025     2048    10943     6132     9918 OK
rand      reverse_2nd_half     1025        1     7169     2048     6144 OK
rand      reverse_2nd_half     1025        2     8743     2700     7718 OK
rand      reverse_2nd_half     1025        4     9948     3258     8923 OK
rand      reverse_2nd_half     1025        8     9997     3823     8972 OK
rand      reverse_2nd_half     1025       16    10028     4401     9003 OK
rand      reverse_2nd_half     1025       32    10516     4841     9491 OK
rand      reverse_2nd_half     1025       64    10234     5237     9209 OK
rand      reverse_2nd_half     1025      128    10619     5628     9594 OK
rand      reverse_2nd_half     1025      256    10317     5883     9292 OK
rand      reverse_2nd_half     1025      512    10642     6043     9617 OK
rand      reverse_2nd_half     1025     1024    10826     6063     9801 OK
rand      reverse_2nd_half     1025     2048    10417     6098     9392 OK
rand      sort                 1025        1     7169     2048     6144 OK
rand      sort                 1025        2     7169     2048     6144 OK
rand      sort                 1025        4     7169     2048     6144 OK
rand      sort                 1025        8     7169     2048     6144 OK
rand      sort                 1025       16     7169     2048     6144 OK
rand      sort                 1025       32     7169     2048     6144 OK
rand      sort                 1025       64     7169     2048     6144 OK
rand      sort                 1025      128     7169     2048     6144 OK
rand      sort                 1025      256     7169     2048     6144 OK
rand      sort                 1025      512     7169     2048     6144 OK
rand      sort                 1025     1024     7169     2048     6144 OK
rand      sort                 1025     2048     7169     2048     6144 OK
rand      dither               1025        1    10525     3934     9500 OK
rand      dither               1025        2    10669     3640     9644 OK
rand      dither               1025        4    10590     3787     9565 OK
rand      dither               1025        8    10285     4057     9260 OK
rand      dither               1025       16    10163     4477     9138 OK
rand      dither               1025       32    10586     4892     9561 OK
rand      dither               1025       64    10743     5296     9718 OK
rand      dither               1025      128    10372     5619     9347 OK
rand      dither               1025      256    10690     5898     9665 OK
rand      dither               1025      512    10823     6009     9798 OK
rand      dither               1025     1024    10911     6062     9886 OK
rand      dither               1025     2048    10947     6123     9922 OK
rand      unriffle             1025        1     7169     2048     6144 OK
rand      unriffle             1025        2     8718     2689     7693 OK
rand      unriffle             1025        4     9980     3275     8955 OK
rand      unriffle             1025        8    10033     3850     9008 OK
rand      unriffle             1025       16    10015     4403     8990 OK
rand      unriffle             1025       32    10035     4896     9010 OK
rand      unriffle             1025       64    10524     5303     9499 OK
rand      unriffle             1025      128    10764     5624     9739 OK
rand      unriffle             1025      256    10867     5945     9842 OK
rand      unriffle             1025      512    10927     6090     9902 OK
rand      unriffle             1025     1024    10923     6102     9898 OK
rand      unriffle             1025     2048    10960     6121     9935 OK
rand      unriffle_skewed      1025        1     7169     2048     6144 OK
rand      unriffle_skewed      1025        2     8684     2690     7659 OK
rand      unriffle_skewed      1025        4     9452     3275     8427 OK
rand      unriffle_skewed      1025        8     9737     3854     8712 OK
rand      unriffle_skewed      1025       16     9871     4403     8846 OK
rand      unriffle_skewed      1025       32    10468     4901     9443 OK
rand      unriffle_skewed      1025       64    10738     5301     9713 OK
rand      unriffle_skewed      1025      128    10379     5641     9354 OK
rand      unriffle_skewed      1025      256    10677     5959     9652 OK
rand      unriffle_skewed      1025      512    10841     6081     9816 OK
rand      unriffle_skewed      1025     1024    10878     6103     9853 OK
rand      unriffle_skewed      1025     2048    10931     6136     9906 OK
stagger   copy                 1025        1     8182     3079     7157 OK
stagger   copy                 1025        2     8343     3423     7318 OK
stagger   copy                 1025        4     8785     3704     7760 OK
stagger   copy                 1025        8     9198     3887     8173 OK
stagger   copy                 1025       16     9655     5313     8630 OK
stagger   copy                 1025       32    10049     4943     9024 OK
stagger   copy                 1025       64    10435     6344     9410 OK
stagger   copy                 1025      128    10614     6238     9589 OK
stagger   copy                 1025      256    10367     5030     9342 OK
stagger   copy                 1025      512     8962     3071     7937 OK
stagger   copy                 1025     1024     7169     2048     6144 OK
stagger   copy                 1025     2048     6156     2058     5131 OK
stagger   reverse              1025        1     6657     3070     5632 OK
stagger   reverse              1025        2     7337     3426     6312 OK
stagger   reverse              1025        4     7784     3698     6759 OK
stagger   reverse              1025        8     8230     3902     7205 OK
stagger   reverse              1025       16     8667     5306     7642 OK
stagger   reverse              1025       32     9057     4938     8032 OK
stagger   reverse              1025       64     9524     6761     8499 OK
stagger   reverse              1025      128     9794     6278     8769 OK
stagger   reverse              1025      256     9683     5114     8658 OK
stagger   reverse              1025      512     8450     3070     7425 OK
stagger   reverse              1025     1024     7169     2048     6144 OK
stagger   reverse              1025     2048     6146     2048     5121 OK
stagger   reverse_1st_half     1025        1     8182     3079     7157 OK
stagger   reverse_1st_half     1025        2     8343     3423     7318 OK
stagger   reverse_1st_half     1025        4     8785     3701     7760 OK
stagger   reverse_1st_half     1025        8     9198     3887     8173 OK
stagger   reverse_1st_half     1025       16     9655     5313     8630 OK
stagger   reverse_1st_half     1025       32    10049     4943     9024 OK
stagger   reverse_1st_half     1025       64    10436     6546     9411 OK
stagger   reverse_1st_half     1025      128    10614     6238     9589 OK
stagger   reverse_1st_half     1025      256    10367     5030     9342 OK
stagger   reverse_1st_half     1025      512     8962     3071     7937 OK
stagger   reverse_1st_half     1025     1024     7169     2048     6144 OK
stagger   reverse_1st_half     1025     2048     6156     2058     5131 OK
stagger   reverse_2nd_half     1025        1     7680     3070     6655 OK
stagger   reverse_2nd_half     1025        2     7840     3425     6815 OK
stagger   reverse_2nd_half     1025        4     8285     3702     7260 OK
stagger   reverse_2nd_half     1025        8     8714     3895     7689 OK
stagger   reverse_2nd_half     1025       16     9161     5313     8136 OK
stagger   reverse_2nd_half     1025       32     9553     4943     8528 OK
stagger   reverse_2nd_half     1025       64     9982     6555     8957 OK
stagger   reverse_2nd_half     1025      128    10204     6258     9179 OK
stagger   reverse_2nd_half     1025      256    10025     5072     9000 OK
stagger   reverse_2nd_half     1025      512     8706     3071     7681 OK
stagger   reverse_2nd_half     1025     1024     7169     2048     6144 OK
stagger   reverse_2nd_half     1025     2048     6668     2058     5643 OK
stagger   sort                 1025        1     7169     2048     6144 OK
stagger   sort                 1025        2     7169     2048     6144 OK
stagger   sort                 1025        4     7169     2048     6144 OK
stagger   sort                 1025        8     7169     2048     6144 OK
stagger   sort                 1025       16     7169     2048     6144 OK
stagger   sort                 1025       32     7169     2048     6144 OK
stagger   sort                 1025       64     7169     2048     6144 OK
stagger   sort                 1025      128     7169     2048     6144 OK
stagger   sort                 1025      256     7169     2048     6144 OK
stagger   sort                 1025      512     7169     2048     6144 OK
stagger   sort                 1025     1024     7169     2048     6144 OK
stagger   sort                 1025     2048     7169     2048     6144 OK
stagger   dither               1025        1     8281     2872     7256 OK
stagger   dither               1025        2     8446     3353     7421 OK
stagger   dither               1025        4     8785     3704     7760 OK
stagger   dither               1025        8     9202     4023     8177 OK
stagger   dither               1025       16     9657     5529     8632 OK
stagger   dither               1025       32    10050     4221     9025 OK
stagger   dither               1025       64    10435     6344     9410 OK
stagger   dither               1025      128    10615     5581     9590 OK
stagger   dither               1025      256    10368     4757     9343 OK
stagger   dither               1025      512     9142     3581     8117 OK
stagger   dither               1025     1024    10525     3934     9500 OK
stagger   dither               1025     2048     6744     2516     5719 OK
stagger   unriffle             1025        1     9743     5644     8718 OK
stagger   unriffle             1025        2    10237     9540     9212 OK
stagger   unriffle             1025        4    10245     9198     9220 OK
stagger   unriffle             1025        8    10238     9293     9213 OK
stagger   unriffle             1025       16    10254     8894     9229 OK
stagger   unriffle             1025       32    10262     8172     9237 OK
stagger   unriffle             1025       64    10304     9066     9279 OK
stagger   unriffle             1025      128    10351     9199     9326 OK
stagger   unriffle             1025      256    10413     9543     9388 OK
stagger   unriffle             1025      512    10244     9212     9219 OK
stagger   unriffle             1025     1024     7169     2048     6144 OK
stagger   unriffle             1025     2048    11266    10233    10241 OK
stagger   unriffle_skewed      1025        1    10764     5644     9739 OK
stagger   unriffle_skewed      1025        2    11264     9561    10239 OK
stagger   unriffle_skewed      1025        4    11265     9224    10240 OK
stagger   unriffle_skewed      1025        8    11252     9333    10227 OK
stagger   unriffle_skewed      1025       16    11247     8922    10222 OK
stagger   unriffle_skewed      1025       32    11222     8200    10197 OK
stagger   unriffle_skewed      1025       64    11199     9099    10174 OK
stagger   unriffle_skewed      1025      128    11119     9227    10094 OK
stagger   unriffle_skewed      1025      256    10925     9559     9900 OK
stagger   unriffle_skewed      1025      512    10244     9221     9219 OK
stagger   unriffle_skewed      1025     1024     7169     2048     6144 OK
stagger   unriffle_skewed      1025     2048    10244    10243     9219 OK
plateau   copy                 1025        1     7169     2048     6144 OK
plateau   copy                 1025        2     7169     2048     6144 OK
plateau   copy                 1025        4     7169     2048     6144 OK
plateau   copy                 1025        8     7169     2048     6144 OK
plateau   copy                 1025       16     7169     2048     6144 OK
plateau   copy                 1025       32     7169     2048     6144 OK
plateau   copy                 1025       64     7169     2048     6144 OK
plateau   copy                 1025      128     7169     2048     6144 OK
plateau   copy                 1025      256     7169     2048     6144 OK
plateau   copy                 1025      512     7169     2048     6144 OK
plateau   copy                 1025     1024     7169     2048     6144 OK
plateau   copy                 1025     2048     7169     2048     6144 OK
plateau   reverse              1025        1     6146     2048     5121 OK
plateau   reverse              1025        2     6155     2057     5130 OK
plateau   reverse              1025        4     6170     2056     5145 OK
plateau   reverse              1025        8     6195     2055     5170 OK
plateau   reverse              1025       16     6236     2054     5211 OK
plateau   reverse              1025       32     6301     2053     5276 OK
plateau   reverse              1025       64     6398     2052     5373 OK
plateau   reverse              1025      128     6527     2051     5502 OK
plateau   reverse              1025      256     6656     2050     5631 OK
plateau   reverse              1025      512     6657     2049     5632 OK
plateau   reverse              1025     1024     6146     2048     5121 OK
plateau   reverse              1025     2048     6146     2048     5121 OK
plateau   reverse_1st_half     1025        1     7177     2056     6152 OK
plateau   reverse_1st_half     1025        2     7183     2055     6158 OK
plateau   reverse_1st_half     1025        4     7193     2054     6168 OK
plateau   reverse_1st_half     1025        8     7209     2053     6184 OK
plateau   reverse_1st_half     1025       16     7233     2052     6208 OK
plateau   reverse_1st_half     1025       32     7265     2051     6240 OK
plateau   reverse_1st_half     1025       64     7297     2050     6272 OK
plateau   reverse_1st_half     1025      128     7297     2049     6272 OK
plateau   reverse_1st_half     1025      256     7169     2048     6144 OK
plateau   reverse_1st_half     1025      512     7169     2048     6144 OK
plateau   reverse_1st_half     1025     1024     7169     2048     6144 OK
plateau   reverse_1st_half     1025     2048     7169     2048     6144 OK
plateau   reverse_2nd_half     1025        1     7169     2048     6144 OK
plateau   reverse_2nd_half     1025        2     7169     2048     6144 OK
plateau   reverse_2nd_half     1025        4     7169     2048     6144 OK
plateau   reverse_2nd_half     1025        8     7169     2048     6144 OK
plateau   reverse_2nd_half     1025       16     7169     2048     6144 OK
plateau   reverse_2nd_half     1025       32     7169     2048     6144 OK
plateau   reverse_2nd_half     1025       64     7169     2048     6144 OK
plateau   reverse_2nd_half     1025      128     7169     2048     6144 OK
plateau   reverse_2nd_half     1025      256     7169     2048     6144 OK
plateau   reverse_2nd_half     1025      512     7169     2048     6144 OK
plateau   reverse_2nd_half     1025     1024     6658     2049     5633 OK
plateau   reverse_2nd_half     1025     2048     6658     2049     5633 OK
plateau   sort                 1025        1     7169     2048     6144 OK
plateau   sort                 1025        2     7169     2048     6144 OK
plateau   sort                 1025        4     7169     2048     6144 OK
plateau   sort                 1025        8     7169     2048     6144 OK
plateau   sort                 1025       16     7169     2048     6144 OK
plateau   sort                 1025       32     7169     2048     6144 OK
plateau   sort                 1025       64     7169     2048     6144 OK
plateau   sort                 1025      128     7169     2048     6144 OK
plateau   sort                 1025      256     7169     2048     6144 OK
plateau   sort                 1025      512     7169     2048     6144 OK
plateau   sort                 1025     1024     7169     2048     6144 OK
plateau   sort                 1025     2048     7169     2048     6144 OK
plateau   dither               1025        1    10525     3934     9500 OK
plateau   dither               1025        2    10525     3932     9500 OK
plateau   dither               1025        4    10524     3928     9499 OK
plateau   dither               1025        8    10519     3925     9494 OK
plateau   dither               1025       16    10509     3914     9484 OK
plateau   dither               1025       32    10475     3897     9450 OK
plateau   dither               1025       64    10413     3860     9388 OK
plateau   dither               1025      128    10226     3787     9201 OK
plateau   dither               1025      256     9877     3638     8852 OK
plateau   dither               1025      512     8923     3345     7898 OK
plateau   dither               1025     1024     7526     2762     6501 OK
plateau   dither               1025     2048     7526     2762     6501 OK
plateau   unriffle             1025        1     7169     2048     6144 OK
plateau   unriffle             1025        2     6147     2049     5122 OK
plateau   unriffle             1025        4     6150     2054     5125 OK
plateau   unriffle             1025        8     6158     2068     5133 OK
plateau   unriffle             1025       16     6178     2105     5153 OK
plateau   unriffle             1025       32     6226     2197     5201 OK
plateau   unriffle             1025       64     6338     2416     5313 OK
plateau   unriffle             1025      128     6594     2922     5569 OK
plateau   unriffle             1025      256     7170     4067     6145 OK
plateau   unriffle             1025      512     8442     6611     7417 OK
plateau   unriffle             1025     1024    10243    10233     9218 OK
plateau   unriffle             1025     2048    10243    10233     9218 OK
plateau   unriffle_skewed      1025        1     7169     2048     6144 OK
plateau   unriffle_skewed      1025        2     7170     2050     6145 OK
plateau   unriffle_skewed      1025        4     7173     2056     6148 OK
plateau   unriffle_skewed      1025        8     7181     2072     6156 OK
plateau   unriffle_skewed      1025       16     7201     2112     6176 OK
plateau   unriffle_skewed      1025       32     7249     2208     6224 OK
plateau   unriffle_skewed      1025       64     7361     2432     6336 OK
plateau   unriffle_skewed      1025      128     7617     2944     6592 OK
plateau   unriffle_skewed      1025      256     8193     4096     7168 OK
plateau   unriffle_skewed      1025      512     9473     6656     8448 OK
plateau   unriffle_skewed      1025     1024    11266    10242    10241 OK
plateau   unriffle_skewed      1025     2048    11266    10242    10241 OK
shuffle   copy                 1025        1     7169     2048     6144 OK
shuffle   copy                 1025        2     8482     3581     7457 OK
shuffle   copy                 1025        4     7749     3045     6724 OK
shuffle   copy                 1025        8     6827     2528     5802 OK
shuffle   copy                 1025       16     6490     2312     5465 OK
shuffle   copy                 1025       32     7297     2199     6272 OK
shuffle   copy                 1025       64     7237     2134     6212 OK
shuffle   copy                 1025      128     7198     2084     6173 OK
shuffle   copy                 1025      256     7180     2059     6155 OK
shuffle   copy                 1025      512     7180     2059     6155 OK
shuffle   copy                 1025     1024     7180     2059     6155 OK
shuffle   copy                 1025     2048     7174     2054     6149 OK
shuffle   reverse              1025        1     6146     2048     5121 OK
shuffle   reverse              1025        2     7508     3586     6483 OK
shuffle   reverse              1025        4     7244     3021     6219 OK
shuffle   reverse              1025        8     6623     2522     5598 OK
shuffle   reverse              1025       16     6386     2313     5361 OK
shuffle   reverse              1025       32     6265     2190     5240 OK
shuffle   reverse              1025       64     6210     2129     5185 OK
shuffle   reverse              1025      128     6173     2081     5148 OK
shuffle   reverse              1025      256     6155     2056     5130 OK
shuffle   reverse              1025      512     6155     2056     5130 OK
shuffle   reverse              1025     1024     6155     2056     5130 OK
shuffle   reverse              1025     2048     6150     2052     5125 OK
shuffle   reverse_1st_half     1025        1     7169     2048     6144 OK
shuffle   reverse_1st_half     1025        2     8482     3581     7457 OK
shuffle   reverse_1st_half     1025        4     7749     3045     6724 OK
shuffle   reverse_1st_half     1025        8     6827     2528     5802 OK
shuffle   reverse_1st_half     1025       16     6490     2312     5465 OK
shuffle   reverse_1st_half     1025       32     7297     2199     6272 OK
shuffle   reverse_1st_half     1025       64     7237     2134     6212 OK
shuffle   reverse_1st_half     1025      128     7198     2084     6173 OK
shuffle   reverse_1st_half     1025      256     7180     2059     6155 OK
shuffle   reverse_1st_half     1025      512     7180     2059     6155 OK
shuffle   reverse_1st_half     1025     1024     7180     2059     6155 OK
shuffle   reverse_1st_half     1025     2048     7174     2054     6149 OK
shuffle   reverse_2nd_half     1025        1     6658     2049     5633 OK
shuffle   reverse_2nd_half     1025        2     7995     3578     6970 OK
shuffle   reverse_2nd_half     1025        4     7865     3026     6840 OK
shuffle   reverse_2nd_half     1025        8     7185     2532     6160 OK
shuffle   reverse_2nd_half     1025       16     6926     2314     5901 OK
shuffle   reverse_2nd_half     1025       32     6796     2198     5771 OK
shuffle   reverse_2nd_half     1025       64     6733     2133     5708 OK
shuffle   reverse_2nd_half     1025      128     6689     2085     5664 OK
shuffle   reverse_2nd_half     1025      256     6669     2060     5644 OK
shuffle   reverse_2nd_half     1025      512     6669     2060     5644 OK
shuffle   reverse_2nd_half     1025     1024     6669     2060     5644 OK
shuffle   reverse_2nd_half     1025     2048     6663     2055     5638 OK
shuffle   sort                 1025        1     7169     2048     6144 OK
shuffle   sort                 1025        2     7169     2048     6144 OK
shuffle   sort                 1025        4     7169     2048     6144 OK
shuffle   sort                 1025        8     7169     2048     6144 OK
shuffle   sort                 1025       16     7169     2048     6144 OK
shuffle   sort                 1025       32     7169     2048     6144 OK
shuffle   sort                 1025       64     7169     2048     6144 OK
shuffle   sort                 1025      128     7169     2048     6144 OK
shuffle   sort                 1025      256     7169     2048     6144 OK
shuffle   sort                 1025      512     7169     2048     6144 OK
shuffle   sort                 1025     1024     7169     2048     6144 OK
shuffle   sort                 1025     2048     7169     2048     6144 OK
shuffle   dither               1025        1     7271     2252     6246 OK
shuffle   dither               1025        2     8553     3491     7528 OK
shuffle   dither               1025        4     7841     3103     6816 OK
shuffle   dither               1025        8     6933     2695     5908 OK
shuffle   dither               1025       16     6593     2493     5568 OK
shuffle   dither               1025       32     7396     2389     6371 OK
shuffle   dither               1025       64     7339     2333     6314 OK
shuffle   dither               1025      128     7301     2289     6276 OK
shuffle   dither               1025      256     7282     2264     6257 OK
shuffle   dither               1025      512     7282     2264     6257 OK
shuffle   dither               1025     1024     7282     2264     6257 OK
shuffle   dither               1025     2048     7276     2259     6251 OK
shuffle   unriffle             1025        1    10243    10233     9218 OK
shuffle   unriffle             1025        2    10216     7736     9191 OK
shuffle   unriffle             1025        4    10146     7630     9121 OK
shuffle   unriffle             1025        8    10201     8866     9176 OK
shuffle   unriffle             1025       16    10219     9506     9194 OK
shuffle   unriffle             1025       32    10231     9854     9206 OK
shuffle   unriffle             1025       64    10235    10030     9210 OK
shuffle   unriffle             1025      128    10242    10148     9217 OK
shuffle   unriffle             1025      256    10244    10209     9219 OK
shuffle   unriffle             1025      512    10244    10209     9219 OK
shuffle   unriffle             1025     1024    10244    10209     9219 OK
shuffle   unriffle             1025     2048    10244    10219     9219 OK
shuffle   unriffle_skewed      1025        1    11266    10242    10241 OK
shuffle   unriffle_skewed      1025        2    11193     7735    10168 OK
shuffle   unriffle_skewed      1025        4    10647     7633     9622 OK
shuffle   unriffle_skewed      1025        8    10411     8875     9386 OK
shuffle   unriffle_skewed      1025       16    10325     9515     9300 OK
shuffle   unriffle_skewed      1025       32    11253     9858    10228 OK
shuffle   unriffle_skewed      1025       64    11257    10038    10232 OK
shuffle   unriffle_skewed      1025      128    11264    10156    10239 OK
shuffle   unriffle_skewed      1025      256    11266    10218    10241 OK
shuffle   unriffle_skewed      1025      512    11266    10218    10241 OK
shuffle   unriffle_skewed      1025     1024    11266    10218    10241 OK
shuffle   unriffle_skewed      1025     2048    11266    10228    10241 OK
ok 1 - DEFINE_LIST_SORT_DEBUG

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0095-bloom.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0095-bloom/.git/
expecting success of 0095.1 'compute unseeded murmur3 hash for empty string': 
	cat >expect <<-\EOF &&
	Murmur3 Hash with seed=0:0x00000000
	EOF
	test-tool bloom get_murmur3 "" >actual &&
	test_cmp expect actual

ok 1 - compute unseeded murmur3 hash for empty string

expecting success of 0095.2 'compute unseeded murmur3 hash for test string 1': 
	cat >expect <<-\EOF &&
	Murmur3 Hash with seed=0:0x627b0c2c
	EOF
	test-tool bloom get_murmur3 "Hello world!" >actual &&
	test_cmp expect actual

ok 2 - compute unseeded murmur3 hash for test string 1

expecting success of 0095.3 'compute unseeded murmur3 hash for test string 2': 
	cat >expect <<-\EOF &&
	Murmur3 Hash with seed=0:0x2e4ff723
	EOF
	test-tool bloom get_murmur3 "The quick brown fox jumps over the lazy dog" >actual &&
	test_cmp expect actual

ok 3 - compute unseeded murmur3 hash for test string 2

expecting success of 0095.4 'compute bloom key for empty string': 
	cat >expect <<-\EOF &&
	Hashes:0x5615800c|0x5b966560|0x61174ab4|0x66983008|0x6c19155c|0x7199fab0|0x771ae004|
	Filter_Length:2
	Filter_Data:11|11|
	EOF
	test-tool bloom generate_filter "" >actual &&
	test_cmp expect actual

ok 4 - compute bloom key for empty string

expecting success of 0095.5 'compute bloom key for whitespace': 
	cat >expect <<-\EOF &&
	Hashes:0xf178874c|0x5f3d6eb6|0xcd025620|0x3ac73d8a|0xa88c24f4|0x16510c5e|0x8415f3c8|
	Filter_Length:2
	Filter_Data:51|55|
	EOF
	test-tool bloom generate_filter " " >actual &&
	test_cmp expect actual

ok 5 - compute bloom key for whitespace

expecting success of 0095.6 'compute bloom key for test string 1': 
	cat >expect <<-\EOF &&
	Hashes:0xb270de9b|0x1bb6f26e|0x84fd0641|0xee431a14|0x57892de7|0xc0cf41ba|0x2a15558d|
	Filter_Length:2
	Filter_Data:92|6c|
	EOF
	test-tool bloom generate_filter "Hello world!" >actual &&
	test_cmp expect actual

ok 6 - compute bloom key for test string 1

expecting success of 0095.7 'compute bloom key for test string 2': 
	cat >expect <<-\EOF &&
	Hashes:0x20ab385b|0xf5237fe2|0xc99bc769|0x9e140ef0|0x728c5677|0x47049dfe|0x1b7ce585|
	Filter_Length:2
	Filter_Data:a5|4a|
	EOF
	test-tool bloom generate_filter "file.txt" >actual &&
	test_cmp expect actual

ok 7 - compute bloom key for test string 2

expecting success of 0095.8 'get bloom filters for commit with no changes': 
	git init &&
	git commit --allow-empty -m "c0" &&
	cat >expect <<-\EOF &&
	Filter_Length:1
	Filter_Data:00|
	EOF
	test-tool bloom get_filter_for_commit "$(git rev-parse HEAD)" >actual &&
	test_cmp expect actual

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0095-bloom/.git/
[master (root-commit) c7bd1a3] c0
 Author: A U Thor <author@example.com>
ok 8 - get bloom filters for commit with no changes

expecting success of 0095.9 'get bloom filter for commit with 10 changes': 
	rm actual &&
	rm expect &&
	mkdir smallDir &&
	for i in $(test_seq 0 9)
	do
		echo $i >smallDir/$i || return 1
	done &&
	git add smallDir &&
	git commit -m "commit with 10 changes" &&
	cat >expect <<-\EOF &&
	Filter_Length:14
	Filter_Data:02|b3|c4|a0|34|e7|fe|eb|cb|47|fe|a0|e8|72|
	EOF
	test-tool bloom get_filter_for_commit "$(git rev-parse HEAD)" >actual &&
	test_cmp expect actual

[master 2444bb6] commit with 10 changes
 Author: A U Thor <author@example.com>
 10 files changed, 10 insertions(+)
 create mode 100644 smallDir/0
 create mode 100644 smallDir/1
 create mode 100644 smallDir/2
 create mode 100644 smallDir/3
 create mode 100644 smallDir/4
 create mode 100644 smallDir/5
 create mode 100644 smallDir/6
 create mode 100644 smallDir/7
 create mode 100644 smallDir/8
 create mode 100644 smallDir/9
ok 9 - get bloom filter for commit with 10 changes

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
ok 10 # skip get bloom filter for commit with 513 changes (missing EXPENSIVE)

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0101-at-syntax.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0101-at-syntax/.git/
expecting success of 0101.1 'setup': 
	test_commit one &&
	test_commit two

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - setup

expecting success of 0101.2 '@{0} shows current': 
	check_at @{0} two

ok 2 - @{0} shows current

expecting success of 0101.3 '@{1} shows old': 
	check_at @{1} one

ok 3 - @{1} shows old

expecting success of 0101.4 '@{now} shows current': 
	check_at @{now} two

ok 4 - @{now} shows current

expecting success of 0101.5 '@{2001-09-17} (before the first commit) shows old': 
	check_at @{2001-09-17} one

warning: log for 'master' only goes back to Thu, 7 Apr 2005 15:13:13 -0700
ok 5 - @{2001-09-17} (before the first commit) shows old

expecting success of 0101.6 'silly approxidates work': 
	check_at @{3.hot.dogs.on.2001-09-17} one

warning: log for 'master' only goes back to Thu, 7 Apr 2005 15:13:13 -0700
ok 6 - silly approxidates work

expecting success of 0101.7 'notice misspelled upstream': 
	test_must_fail git log -1 --format=%s @{usptream}

fatal: ambiguous argument '@{usptream}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 7 - notice misspelled upstream

expecting success of 0101.8 'complain about total nonsense': 
	test_must_fail git log -1 --format=%s @{utter.bogosity}

fatal: ambiguous argument '@{utter.bogosity}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 8 - complain about total nonsense

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0100-previous.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0100-previous/.git/
expecting success of 0100.1 'branch -d @{-1}': 
	test_commit A &&
	git checkout -b junk &&
	git checkout - &&
	test "$(git symbolic-ref HEAD)" = refs/heads/main &&
	git branch -d @{-1} &&
	test_must_fail git rev-parse --verify refs/heads/junk

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'junk'
Switched to branch 'main'
Deleted branch junk (was 0ddfaf1).
fatal: Needed a single revision
ok 1 - branch -d @{-1}

expecting success of 0100.2 'branch -d @{-12} when there is not enough switches yet': 
	git reflog expire --expire=now &&
	git checkout -b junk2 &&
	git checkout - &&
	test "$(git symbolic-ref HEAD)" = refs/heads/main &&
	test_must_fail git branch -d @{-12} &&
	git rev-parse --verify refs/heads/main

Switched to a new branch 'junk2'
Switched to branch 'main'
error: branch '@{-12}' not found.
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050
ok 2 - branch -d @{-12} when there is not enough switches yet

expecting success of 0100.3 'merge @{-1}': 
	git checkout A &&
	test_commit B &&
	git checkout A &&
	test_commit C &&
	test_commit D &&
	git branch -f main B &&
	git branch -f other &&
	git checkout other &&
	git checkout main &&
	git merge @{-1} &&
	git cat-file commit HEAD | grep "Merge branch 'other'"

Note: switching to 'A'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0ddfaf1 A
[detached HEAD d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Previous HEAD position was d9df450 B
HEAD is now at 0ddfaf1 A
[detached HEAD 5dee784] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[detached HEAD 12bd07b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Switched to branch 'other'
Switched to branch 'main'
Merge made by the 'ort' strategy.
 C.t | 1 +
 D.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 C.t
 create mode 100644 D.t
Merge branch 'other'
ok 3 - merge @{-1}

expecting success of 0100.4 'merge @{-1}~1': 
	git checkout main &&
	git reset --hard B &&
	git checkout other &&
	git checkout main &&
	git merge @{-1}~1 &&
	git cat-file commit HEAD >actual &&
	grep "Merge branch 'other'" actual

Already on 'main'
HEAD is now at d9df450 B
Switched to branch 'other'
Switched to branch 'main'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Merge branch 'other' (early part)
ok 4 - merge @{-1}~1

expecting success of 0100.5 'merge @{-100} before checking out that many branches yet': 
	git reflog expire --expire=now &&
	git checkout -f main &&
	git reset --hard B &&
	git branch -f other C &&
	git checkout other &&
	git checkout main &&
	test_must_fail git merge @{-100}

Already on 'main'
HEAD is now at d9df450 B
Switched to branch 'other'
Switched to branch 'main'
merge: @{-100} - not something we can merge
ok 5 - merge @{-100} before checking out that many branches yet

expecting success of 0100.6 'log -g @{-1}': 
	git checkout -b last_branch &&
	git checkout -b new_branch &&
	echo "last_branch@{0}" >expect &&
	git log -g --format=%gd @{-1} >actual &&
	test_cmp expect actual

Switched to a new branch 'last_branch'
Switched to a new branch 'new_branch'
ok 6 - log -g @{-1}

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0200-gettext-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0200-gettext-basic/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
expecting success of 0200.1 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME is set (to gnu)': 
    test -n "$GIT_INTERNAL_GETTEXT_SH_SCHEME"

ok 1 - sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME is set (to gnu)

expecting success of 0200.2 'sanity: $TEXTDOMAIN is git': 
    test $TEXTDOMAIN = "git"

ok 2 - sanity: $TEXTDOMAIN is git

expecting success of 0200.3 'xgettext sanity: Perl _() strings are not extracted': 
    ! grep "A Perl string xgettext will not get" "$GIT_PO_PATH"/is.po

ok 3 - xgettext sanity: Perl _() strings are not extracted

expecting success of 0200.4 'xgettext sanity: Comment extraction with --add-comments': 
    grep "TRANSLATORS: This is a test" "$TEST_DIRECTORY"/t0200/* | wc -l >expect &&
    grep "TRANSLATORS: This is a test" "$GIT_PO_PATH"/is.po  | wc -l >actual &&
    test_cmp expect actual

ok 4 - xgettext sanity: Comment extraction with --add-comments

expecting success of 0200.5 'xgettext sanity: Comment extraction with --add-comments stops at statements': 
    ! grep "This is a phony" "$GIT_PO_PATH"/is.po &&
    ! grep "the above comment" "$GIT_PO_PATH"/is.po

ok 5 - xgettext sanity: Comment extraction with --add-comments stops at statements

expecting success of 0200.6 'sanity: $TEXTDOMAINDIR exists without NO_GETTEXT=YesPlease': 
    test -d "$TEXTDOMAINDIR" &&
    test "$TEXTDOMAINDIR" = "$GIT_TEXTDOMAINDIR"

ok 6 - sanity: $TEXTDOMAINDIR exists without NO_GETTEXT=YesPlease

expecting success of 0200.7 'sanity: Icelandic locale was compiled': 
    test -f "$TEXTDOMAINDIR/is/LC_MESSAGES/git.mo"

ok 7 - sanity: Icelandic locale was compiled

ok 8 # skip sanity: gettext("") metadata is OK (missing GETTEXT_LOCALE)

ok 9 # skip sanity: gettext(unknown) is passed through (missing GETTEXT_LOCALE)

ok 10 # skip xgettext: C extraction of _() and N_() strings (missing GETTEXT_LOCALE)

ok 11 # skip xgettext: C extraction with %s (missing GETTEXT_LOCALE)

ok 12 # skip xgettext: Shell extraction (missing GETTEXT_LOCALE)

ok 13 # skip xgettext: Shell extraction with $variable (missing GETTEXT_LOCALE)

ok 14 # skip xgettext: Perl extraction (missing GETTEXT_LOCALE)

ok 15 # skip xgettext: Perl extraction with %s (missing GETTEXT_LOCALE)

ok 16 # skip sanity: Some gettext("") data for real locale (missing GETTEXT_LOCALE)

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0201-gettext-fallbacks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0201-gettext-fallbacks/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
expecting success of 0201.1 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME is set (to fallthrough)': 
    test -n "$GIT_INTERNAL_GETTEXT_SH_SCHEME"

ok 1 - sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME is set (to fallthrough)

expecting success of 0201.2 'sanity: $GIT_INTERNAL_GETTEXT_TEST_FALLBACKS is set': 
    test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"

ok 2 - sanity: $GIT_INTERNAL_GETTEXT_TEST_FALLBACKS is set

expecting success of 0201.3 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME" is fallthrough': 
    echo fallthrough >expect &&
    echo $GIT_INTERNAL_GETTEXT_SH_SCHEME >actual &&
    test_cmp expect actual

ok 3 - sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME" is fallthrough

expecting success of 0201.4 'gettext: our gettext() fallback has pass-through semantics': 
    printf "test" >expect &&
    gettext "test" >actual &&
    test_cmp expect actual &&
    printf "test more words" >expect &&
    gettext "test more words" >actual &&
    test_cmp expect actual

ok 4 - gettext: our gettext() fallback has pass-through semantics

expecting success of 0201.5 'eval_gettext: our eval_gettext() fallback has pass-through semantics': 
    printf "test" >expect &&
    eval_gettext "test" >actual &&
    test_cmp expect actual &&
    printf "test more words" >expect &&
    eval_gettext "test more words" >actual &&
    test_cmp expect actual

ok 5 - eval_gettext: our eval_gettext() fallback has pass-through semantics

expecting success of 0201.6 'eval_gettext: our eval_gettext() fallback can interpolate variables': 
    printf "test YesPlease" >expect &&
    GIT_INTERNAL_GETTEXT_TEST_FALLBACKS=YesPlease eval_gettext "test \$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" >actual &&
    test_cmp expect actual

ok 6 - eval_gettext: our eval_gettext() fallback can interpolate variables

expecting success of 0201.7 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces': 
    cmdline="git am" &&
    export cmdline &&
    printf "When you have resolved this problem, run git am --resolved." >expect &&
    eval_gettext "When you have resolved this problem, run \$cmdline --resolved." >actual &&
    test_cmp expect actual

ok 7 - eval_gettext: our eval_gettext() fallback can interpolate variables with spaces

expecting success of 0201.8 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces and quotes': 
    cmdline="git am" &&
    export cmdline &&
    printf "When you have resolved this problem, run \"git am --resolved\"." >expect &&
    eval_gettext "When you have resolved this problem, run \"\$cmdline --resolved\"." >actual &&
    test_cmp expect actual

ok 8 - eval_gettext: our eval_gettext() fallback can interpolate variables with spaces and quotes

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0110-urlmatch-normalization.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0110-urlmatch-normalization/.git/
expecting success of 0110.1 'url scheme': 
	! test-tool urlmatch-normalization "" &&
	! test-tool urlmatch-normalization "_" &&
	! test-tool urlmatch-normalization "scheme" &&
	! test-tool urlmatch-normalization "scheme:" &&
	! test-tool urlmatch-normalization "scheme:/" &&
	! test-tool urlmatch-normalization "scheme://" &&
	! test-tool urlmatch-normalization "file" &&
	! test-tool urlmatch-normalization "file:" &&
	! test-tool urlmatch-normalization "file:/" &&
	test-tool urlmatch-normalization "file://" &&
	! test-tool urlmatch-normalization "://acme.co" &&
	! test-tool urlmatch-normalization "x_test://acme.co" &&
	! test-tool urlmatch-normalization "-test://acme.co" &&
	! test-tool urlmatch-normalization "0test://acme.co" &&
	! test-tool urlmatch-normalization "+test://acme.co" &&
	! test-tool urlmatch-normalization ".test://acme.co" &&
	! test-tool urlmatch-normalization "schem%6e://" &&
	test-tool urlmatch-normalization "x-Test+v1.0://acme.co" &&
	test "$(test-tool urlmatch-normalization -p "AbCdeF://x.Y")" = "abcdef://x.y/"

ok 1 - url scheme

expecting success of 0110.2 'url authority': 
	! test-tool urlmatch-normalization "scheme://user:pass@" &&
	! test-tool urlmatch-normalization "scheme://?" &&
	! test-tool urlmatch-normalization "scheme://#" &&
	! test-tool urlmatch-normalization "scheme:///" &&
	! test-tool urlmatch-normalization "scheme://:" &&
	! test-tool urlmatch-normalization "scheme://:555" &&
	test-tool urlmatch-normalization "file://user:pass@" &&
	test-tool urlmatch-normalization "file://?" &&
	test-tool urlmatch-normalization "file://#" &&
	test-tool urlmatch-normalization "file:///" &&
	test-tool urlmatch-normalization "file://:" &&
	! test-tool urlmatch-normalization "file://:555" &&
	test-tool urlmatch-normalization "scheme://user:pass@host" &&
	test-tool urlmatch-normalization "scheme://@host" &&
	test-tool urlmatch-normalization "scheme://%00@host" &&
	! test-tool urlmatch-normalization "scheme://%%@host" &&
	test-tool urlmatch-normalization "scheme://host_" &&
	test-tool urlmatch-normalization "scheme://user:pass@host/" &&
	test-tool urlmatch-normalization "scheme://@host/" &&
	test-tool urlmatch-normalization "scheme://host/" &&
	test-tool urlmatch-normalization "scheme://host?x" &&
	test-tool urlmatch-normalization "scheme://host#x" &&
	test-tool urlmatch-normalization "scheme://host/@" &&
	test-tool urlmatch-normalization "scheme://host?@x" &&
	test-tool urlmatch-normalization "scheme://host#@x" &&
	test-tool urlmatch-normalization "scheme://[::1]" &&
	test-tool urlmatch-normalization "scheme://[::1]/" &&
	! test-tool urlmatch-normalization "scheme://hos%41/" &&
	test-tool urlmatch-normalization "scheme://[invalid....:/" &&
	test-tool urlmatch-normalization "scheme://invalid....:]/" &&
	! test-tool urlmatch-normalization "scheme://invalid....:[/" &&
	! test-tool urlmatch-normalization "scheme://invalid....:["

ok 2 - url authority

expecting success of 0110.3 'url port checks': 
	test-tool urlmatch-normalization "xyz://q@some.host:" &&
	test-tool urlmatch-normalization "xyz://q@some.host:456/" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:0" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:0000000" &&
	test-tool urlmatch-normalization "xyz://q@some.host:0000001?" &&
	test-tool urlmatch-normalization "xyz://q@some.host:065535#" &&
	test-tool urlmatch-normalization "xyz://q@some.host:65535" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:65536" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:99999" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:100000" &&
	! test-tool urlmatch-normalization "xyz://q@some.host:100001" &&
	test-tool urlmatch-normalization "http://q@some.host:80" &&
	test-tool urlmatch-normalization "https://q@some.host:443" &&
	test-tool urlmatch-normalization "http://q@some.host:80/" &&
	test-tool urlmatch-normalization "https://q@some.host:443?" &&
	! test-tool urlmatch-normalization "http://q@:8008" &&
	! test-tool urlmatch-normalization "http://:8080" &&
	! test-tool urlmatch-normalization "http://:" &&
	test-tool urlmatch-normalization "xyz://q@some.host:456/" &&
	test-tool urlmatch-normalization "xyz://[::1]:456/" &&
	test-tool urlmatch-normalization "xyz://[::1]:/" &&
	! test-tool urlmatch-normalization "xyz://[::1]:000/" &&
	! test-tool urlmatch-normalization "xyz://[::1]:0%300/" &&
	! test-tool urlmatch-normalization "xyz://[::1]:0x80/" &&
	! test-tool urlmatch-normalization "xyz://[::1]:4294967297/" &&
	! test-tool urlmatch-normalization "xyz://[::1]:030f/"

ok 3 - url port checks

expecting success of 0110.4 'url port normalization': 
	test "$(test-tool urlmatch-normalization -p "http://x:800")" = "http://x:800/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:0800")" = "http://x:800/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:00000800")" = "http://x:800/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:065535")" = "http://x:65535/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:1")" = "http://x:1/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:80")" = "http://x/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:080")" = "http://x/" &&
	test "$(test-tool urlmatch-normalization -p "http://x:000000080")" = "http://x/" &&
	test "$(test-tool urlmatch-normalization -p "https://x:443")" = "https://x/" &&
	test "$(test-tool urlmatch-normalization -p "https://x:0443")" = "https://x/" &&
	test "$(test-tool urlmatch-normalization -p "https://x:000000443")" = "https://x/"

ok 4 - url port normalization

expecting success of 0110.5 'url general escapes': 
	! test-tool urlmatch-normalization "http://x.y?%fg" &&
	test "$(test-tool urlmatch-normalization -p "X://W/%7e%41^%3a")" = "x://w/~A%5E%3A" &&
	test "$(test-tool urlmatch-normalization -p "X://W/:/?#[]@")" = "x://w/:/?#[]@" &&
	test "$(test-tool urlmatch-normalization -p "X://W/$&()*+,;=")" = "x://w/$&()*+,;=" &&
	test "$(test-tool urlmatch-normalization -p "X://W/'")" = "x://w/'" &&
	test "$(test-tool urlmatch-normalization -p "X://W?!")" = "x://w/?!"

ok 5 - url general escapes

expecting success of 0110.6 'url high-bit escapes': 
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-1")")" = "x://q/%01%02%03%04%05%06%07%08%0E%0F%10%11%12" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-2")")" = "x://q/%13%14%15%16%17%18%19%1B%1C%1D%1E%1F%7F" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-3")")" = "x://q/%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-4")")" = "x://q/%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-5")")" = "x://q/%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-6")")" = "x://q/%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-7")")" = "x://q/%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-8")")" = "x://q/%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-9")")" = "x://q/%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" &&
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-10")")" = "x://q/%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF"

ok 6 - url high-bit escapes

expecting success of 0110.7 'url utf-8 escapes': 
	test "$(test-tool urlmatch-normalization -p "$(cat "$tu-11")")" = "x://q/%C2%80%DF%BF%E0%A0%80%EF%BF%BD%F0%90%80%80%F0%AF%BF%BD"

ok 7 - url utf-8 escapes

expecting success of 0110.8 'url username/password escapes': 
	test "$(test-tool urlmatch-normalization -p "x://%41%62(^):%70+d@foo")" = "x://Ab(%5E):p+d@foo/"

ok 8 - url username/password escapes

expecting success of 0110.9 'url normalized lengths': 
	test "$(test-tool urlmatch-normalization -l "Http://%4d%65:%4d^%70@The.Host")" = 25 &&
	test "$(test-tool urlmatch-normalization -l "http://%41:%42@x.y/%61/")" = 17 &&
	test "$(test-tool urlmatch-normalization -l "http://@x.y/^")" = 15

ok 9 - url normalized lengths

expecting success of 0110.10 'url . and .. segments': 
	test "$(test-tool urlmatch-normalization -p "x://y/.")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/./")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/.")" = "x://y/a" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./")" = "x://y/a/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/.?")" = "x://y/?" &&
	test "$(test-tool urlmatch-normalization -p "x://y/./?")" = "x://y/?" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/.?")" = "x://y/a?" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./?")" = "x://y/a/?" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./b/.././../c")" = "x://y/c" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./b/../.././c/")" = "x://y/c/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./b/.././../c/././.././.")" = "x://y/" &&
	! test-tool urlmatch-normalization "x://y/a/./b/.././../c/././.././.." &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/./?/././..")" = "x://y/a/?/././.." &&
	test "$(test-tool urlmatch-normalization -p "x://y/%2e/")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/%2E/")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/a/%2e./")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/b/.%2E/")" = "x://y/" &&
	test "$(test-tool urlmatch-normalization -p "x://y/c/%2e%2E/")" = "x://y/"

ok 10 - url . and .. segments

expecting success of 0110.11 'url equivalents': 
	test-tool urlmatch-normalization "httP://x" "Http://X/" &&
	test-tool urlmatch-normalization "Http://%4d%65:%4d^%70@The.Host" "hTTP://Me:%4D^p@the.HOST:80/" &&
	! test-tool urlmatch-normalization "https://@x.y/^" "httpS://x.y:443/^" &&
	test-tool urlmatch-normalization "https://@x.y/^" "httpS://@x.y:0443/^" &&
	test-tool urlmatch-normalization "https://@x.y/^/../abc" "httpS://@x.y:0443/abc" &&
	test-tool urlmatch-normalization "https://@x.y/^/.." "httpS://@x.y:0443/"

ok 11 - url equivalents

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0090-cache-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0090-cache-tree/.git/
expecting success of 0090.1 'initial commit has cache-tree': 
	test_commit foo &&
	test_cache_tree

[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 1 - initial commit has cache-tree

expecting success of 0090.2 'read-tree HEAD establishes cache-tree': 
	git read-tree HEAD &&
	test_cache_tree

ok 2 - read-tree HEAD establishes cache-tree

expecting success of 0090.3 'git-add invalidates cache-tree': 
	test_when_finished "git reset --hard; git read-tree HEAD" &&
	echo "I changed this file" >foo &&
	git add foo &&
	test_invalid_cache_tree

HEAD is now at ddd63c9 foo
ok 3 - git-add invalidates cache-tree

expecting success of 0090.4 'git-add in subdir invalidates cache-tree': 
	test_when_finished "git reset --hard; git read-tree HEAD" &&
	mkdir dirx &&
	echo "I changed this file" >dirx/foo &&
	git add dirx/foo &&
	test_invalid_cache_tree

error: invalid object 040000 59d259507ddf2acc00997a8b70c61d7bdc240440 for 'dirx'
HEAD is now at ddd63c9 foo
ok 4 - git-add in subdir invalidates cache-tree

expecting success of 0090.5 'git-add in subdir does not invalidate sibling cache-tree': 
	git tag no-children &&
	test_when_finished "git reset --hard no-children; git read-tree HEAD" &&
	mkdir dir1 dir2 &&
	test_commit dir1/a &&
	test_commit dir2/b &&
	echo "I changed this file" >dir1/a &&
	test_when_finished "rm before" &&
	cat >before <<-\EOF &&
	SHA  (3 entries, 2 subtrees)
	SHA dir1/ (1 entries, 0 subtrees)
	SHA dir2/ (1 entries, 0 subtrees)
	EOF
	cmp_cache_tree before &&
	echo "I changed this file" >dir1/a &&
	git add dir1/a &&
	cat >expect <<-\EOF &&
	invalid                                   (2 subtrees)
	invalid                                  dir1/ (0 subtrees)
	SHA dir2/ (1 entries, 0 subtrees)
	EOF
	cmp_cache_tree expect

[master 365c8fc] dir1/a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir1/a.t
[master 8be4607] dir2/b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir2/b.t
error: invalid object 040000 3b5b859722b671676295bf3795f34b8c6f2393f5 for 'dir1'
HEAD is now at ddd63c9 foo
ok 5 - git-add in subdir does not invalidate sibling cache-tree

expecting success of 0090.6 'update-index invalidates cache-tree': 
	test_when_finished "git reset --hard; git read-tree HEAD" &&
	echo "I changed this file" >foo &&
	git update-index --add foo &&
	test_invalid_cache_tree

HEAD is now at ddd63c9 foo
ok 6 - update-index invalidates cache-tree

expecting success of 0090.7 'write-tree establishes cache-tree': 
	test-tool scrap-cache-tree &&
	git write-tree &&
	test_cache_tree

64fd3796c57084e7b8cbae358ce37970b8e954f6
ok 7 - write-tree establishes cache-tree

expecting success of 0090.8 'test-tool scrap-cache-tree works': 
	git read-tree HEAD &&
	test-tool scrap-cache-tree &&
	test_no_cache_tree

ok 8 - test-tool scrap-cache-tree works

expecting success of 0090.9 'second commit has cache-tree': 
	test_commit bar &&
	test_cache_tree

[master eeeeed8] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 9 - second commit has cache-tree

expecting success of 0090.10 'commit --interactive gives cache-tree on partial commit': 
	test_when_finished "git reset --hard" &&
	cat <<-\EOT >foo.c &&
	int foo()
	{
		return 42;
	}
	int bar()
	{
		return 42;
	}
	EOT
	git add foo.c &&
	test_invalid_cache_tree &&
	git commit -m "add a file" &&
	test_cache_tree &&
	cat <<-\EOT >foo.c &&
	int foo()
	{
		return 43;
	}
	int bar()
	{
		return 44;
	}
	EOT
	test_write_lines p 1 "" s n y q |
	git commit --interactive -m foo &&
	cat <<-\EOF >expected.status &&
	 M foo.c
	EOF
	test_cache_tree expected.status

[master d1075a6] add a file
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 foo.c
           staged     unstaged path
  1:    unchanged        +2/-2 foo.c

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:    unchanged        +2/-2 [f]oo.c
Patch update>>            staged     unstaged path
* 1:    unchanged        +2/-2 [f]oo.c
Patch update>> diff --git a/foo.c b/foo.c
index 75522e2..3f7f049 100644
--- a/foo.c
+++ b/foo.c
@@ -1,8 +1,8 @@
 int foo()
 {
-return 42;
+return 43;
 }
 int bar()
 {
-return 42;
+return 44;
 }
(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? Split into 2 hunks.
@@ -1,6 +1,6 @@
 int foo()
 {
-return 42;
+return 43;
 }
 int bar()
 {
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -4,5 +4,5 @@
 }
 int bar()
 {
-return 42;
+return 44;
 }
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> Bye.
[master 65d7dde] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 65d7dde foo
ok 10 - commit --interactive gives cache-tree on partial commit

expecting success of 0090.11 'commit -p with shrinking cache-tree': 
	mkdir -p deep/very-long-subdir &&
	echo content >deep/very-long-subdir/file &&
	git add deep &&
	git commit -m add &&
	git rm -r deep &&

	before=$(wc -c <.git/index) &&
	git commit -m delete -p &&
	after=$(wc -c <.git/index) &&

	# double check that the index shrank
	test $before -gt $after &&

	# and that our index was not corrupted
	git fsck

[master 10c383a] add
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 deep/very-long-subdir/file
rm 'deep/very-long-subdir/file'
No changes.
[master 73c66c3] delete
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 deep/very-long-subdir/file
dangling blob d238b40d1657b1cc3ebd9a3c55ef04f303c694ae
ok 11 - commit -p with shrinking cache-tree

expecting success of 0090.12 'commit in child dir has cache-tree': 
	mkdir dir &&
	>dir/child.t &&
	git add dir/child.t &&
	git commit -m dir/child.t &&
	test_cache_tree

[master d3413ee] dir/child.t
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir/child.t
ok 12 - commit in child dir has cache-tree

expecting success of 0090.13 'reset --hard gives cache-tree': 
	test-tool scrap-cache-tree &&
	git reset --hard &&
	test_cache_tree

HEAD is now at d3413ee dir/child.t
ok 13 - reset --hard gives cache-tree

expecting success of 0090.14 'reset --hard without index gives cache-tree': 
	rm -f .git/index &&
	git clean -fd &&
	git reset --hard &&
	test_cache_tree

Removing bar.t
Removing dir/
Removing expected.status
Removing foo.c
Removing foo.t
Removing status
HEAD is now at d3413ee dir/child.t
ok 14 - reset --hard without index gives cache-tree

expecting success of 0090.15 'checkout gives cache-tree': 
	git tag current &&
	git checkout HEAD^ &&
	test_cache_tree

Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 73c66c3 delete
ok 15 - checkout gives cache-tree

expecting success of 0090.16 'checkout -b gives cache-tree': 
	git checkout current &&
	git checkout -b prev HEAD^ &&
	test_cache_tree

Previous HEAD position was 73c66c3 delete
HEAD is now at d3413ee dir/child.t
Previous HEAD position was d3413ee dir/child.t
Switched to a new branch 'prev'
ok 16 - checkout -b gives cache-tree

expecting success of 0090.17 'checkout -B gives cache-tree': 
	git checkout current &&
	git checkout -B prev HEAD^ &&
	test_cache_tree

Note: switching to 'current'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d3413ee dir/child.t
Previous HEAD position was d3413ee dir/child.t
Switched to and reset branch 'prev'
ok 17 - checkout -B gives cache-tree

expecting success of 0090.18 'merge --ff-only maintains cache-tree': 
	git checkout current &&
	git checkout -b changes &&
	test_commit llamas &&
	test_commit pachyderm &&
	test_cache_tree &&
	git checkout current &&
	test_cache_tree &&
	git merge --ff-only changes &&
	test_cache_tree

Note: switching to 'current'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d3413ee dir/child.t
Switched to a new branch 'changes'
[changes 229c856] llamas
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 llamas.t
[changes f10d9f3] pachyderm
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pachyderm.t
Note: switching to 'current'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d3413ee dir/child.t
Updating d3413ee..f10d9f3
Fast-forward
 llamas.t    | 1 +
 pachyderm.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 llamas.t
 create mode 100644 pachyderm.t
ok 18 - merge --ff-only maintains cache-tree

expecting success of 0090.19 'merge maintains cache-tree': 
	git checkout current &&
	git checkout -b changes2 &&
	test_commit alpacas &&
	test_cache_tree &&
	git checkout current &&
	test_commit struthio &&
	test_cache_tree &&
	git merge changes2 &&
	test_cache_tree

Previous HEAD position was f10d9f3 pachyderm
HEAD is now at d3413ee dir/child.t
Switched to a new branch 'changes2'
[changes2 4b1575a] alpacas
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpacas.t
Note: switching to 'current'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d3413ee dir/child.t
[detached HEAD 5a63c6d] struthio
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 struthio.t
Merge made by the 'ort' strategy.
 alpacas.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 alpacas.t
ok 19 - merge maintains cache-tree

expecting success of 0090.20 'partial commit gives cache-tree': 
	git checkout -b partial no-children &&
	test_commit one &&
	test_commit two &&
	echo "some change" >one.t &&
	git add one.t &&
	echo "some other change" >two.t &&
	git commit two.t -m partial &&
	cat <<-\EOF >expected.status &&
	M  one.t
	EOF
	test_cache_tree expected.status

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  e104fa1 Merge branch 'changes2' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> e104fa1

Switched to a new branch 'partial'
[partial 6771940] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[partial cd7fad9] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[partial f24c7c2] partial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 20 - partial commit gives cache-tree

expecting success of 0090.21 'no phantom error when switching trees': 
	mkdir newdir &&
	>newdir/one &&
	git add newdir/one &&
	git checkout 2>errors &&
	test_must_be_empty errors

A	newdir/one
M	one.t
ok 21 - no phantom error when switching trees

expecting success of 0090.22 'switching trees does not invalidate shared index': 
	(
		sane_unset GIT_TEST_SPLIT_INDEX &&
		git update-index --split-index &&
		>split &&
		git add split &&
		test-tool dump-split-index .git/index | grep -v ^own >before &&
		git commit -m "as-is" &&
		test-tool dump-split-index .git/index | grep -v ^own >after &&
		test_cmp before after
	)

[partial dc7a831] as-is
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 newdir/one
 create mode 100644 split
ok 22 - switching trees does not invalidate shared index

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0203-gettext-setlocale-sanity.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0203-gettext-setlocale-sanity/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
expecting success of 0203.1 'git show a ISO-8859-1 commit under C locale': 
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&
	test_commit "iso-c-commit" iso-under-c &&
	git show >out 2>err &&
	test_must_be_empty err &&
	grep -q "iso-c-commit" out

Warning: commit message did not conform to UTF-8.
You may want to amend it after fixing the message, or set the config
variable i18n.commitEncoding to the encoding your project uses.
[master (root-commit) f2030b4] iso-c-commit
 Author: Áéí óú <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 iso-under-c
ok 1 - git show a ISO-8859-1 commit under C locale

ok 2 # skip git show a ISO-8859-1 commit under a UTF-8 locale (missing GETTEXT_LOCALE)

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0204-gettext-reencode-sanity.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0204-gettext-reencode-sanity/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
ok 1 # skip gettext: Emitting UTF-8 from our UTF-8 *.mo files / Icelandic (missing GETTEXT_LOCALE)

ok 2 # skip gettext: Emitting UTF-8 from our UTF-8 *.mo files / Runes (missing GETTEXT_LOCALE)

ok 3 # skip gettext: Emitting ISO-8859-1 from our UTF-8 *.mo files / Icelandic (missing GETTEXT_ISO_LOCALE)

ok 4 # skip gettext: impossible ISO-8859-1 output (missing GETTEXT_ISO_LOCALE)

ok 5 # skip gettext: Fetching a UTF-8 msgid -> UTF-8 (missing GETTEXT_LOCALE)

ok 6 # skip gettext: Fetching a UTF-8 msgid -> ISO-8859-1 (missing GETTEXT_ISO_LOCALE)

ok 7 # skip gettext.c: git init UTF-8 -> UTF-8 (missing GETTEXT_LOCALE)

ok 8 # skip gettext.c: git init UTF-8 -> ISO-8859-1 (missing GETTEXT_ISO_LOCALE)

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0211-trace2-perf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0211-trace2-perf/.git/
expecting success of 0211.1 'perf stream, return code 0': 
	test_when_finished "rm trace.perf actual expect" &&
	GIT_TRACE2_PERF="$(pwd)/trace.perf" test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&
	cat >expect <<-EOF &&
		d0|main|version|||||$V
		d0|main|start||_T_ABS_|||_EXE_ trace2 001return 0
		d0|main|cmd_name|||||trace2 (trace2)
		d0|main|exit||_T_ABS_|||code:0
		d0|main|atexit||_T_ABS_|||code:0
	EOF
	test_cmp expect actual

ok 1 - perf stream, return code 0

expecting success of 0211.2 'perf stream, return code 1': 
	test_when_finished "rm trace.perf actual expect" &&
	test_must_fail env GIT_TRACE2_PERF="$(pwd)/trace.perf" test-tool trace2 001return 1 &&
	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&
	cat >expect <<-EOF &&
		d0|main|version|||||$V
		d0|main|start||_T_ABS_|||_EXE_ trace2 001return 1
		d0|main|cmd_name|||||trace2 (trace2)
		d0|main|exit||_T_ABS_|||code:1
		d0|main|atexit||_T_ABS_|||code:1
	EOF
	test_cmp expect actual

ok 2 - perf stream, return code 1

expecting success of 0211.3 'perf stream, error event': 
	test_when_finished "rm trace.perf actual expect" &&
	GIT_TRACE2_PERF="$(pwd)/trace.perf" test-tool trace2 003error "hello world" "this is a test" &&
	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&
	cat >expect <<-EOF &&
		d0|main|version|||||$V
		d0|main|start||_T_ABS_|||_EXE_ trace2 003error 'hello world' 'this is a test'
		d0|main|cmd_name|||||trace2 (trace2)
		d0|main|error|||||hello world
		d0|main|error|||||this is a test
		d0|main|exit||_T_ABS_|||code:0
		d0|main|atexit||_T_ABS_|||code:0
	EOF
	test_cmp expect actual

error: hello world
error: this is a test
ok 3 - perf stream, error event

expecting success of 0211.4 'perf stream, child processes': 
	test_when_finished "rm trace.perf actual expect" &&
	GIT_TRACE2_PERF="$(pwd)/trace.perf" test-tool trace2 004child test-tool trace2 004child test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&
	cat >expect <<-EOF &&
		d0|main|version|||||$V
		d0|main|start||_T_ABS_|||_EXE_ trace2 004child test-tool trace2 004child test-tool trace2 001return 0
		d0|main|cmd_name|||||trace2 (trace2)
		d0|main|child_start||_T_ABS_|||[ch0] class:? argv:[test-tool trace2 004child test-tool trace2 001return 0]
		d1|main|version|||||$V
		d1|main|start||_T_ABS_|||_EXE_ trace2 004child test-tool trace2 001return 0
		d1|main|cmd_name|||||trace2 (trace2/trace2)
		d1|main|child_start||_T_ABS_|||[ch0] class:? argv:[test-tool trace2 001return 0]
		d2|main|version|||||$V
		d2|main|start||_T_ABS_|||_EXE_ trace2 001return 0
		d2|main|cmd_name|||||trace2 (trace2/trace2/trace2)
		d2|main|exit||_T_ABS_|||code:0
		d2|main|atexit||_T_ABS_|||code:0
		d1|main|child_exit||_T_ABS_|_T_REL_||[ch0] pid:_PID_ code:0
		d1|main|exit||_T_ABS_|||code:0
		d1|main|atexit||_T_ABS_|||code:0
		d0|main|child_exit||_T_ABS_|_T_REL_||[ch0] pid:_PID_ code:0
		d0|main|exit||_T_ABS_|||code:0
		d0|main|atexit||_T_ABS_|||code:0
	EOF
	test_cmp expect actual

ok 4 - perf stream, child processes

expecting success of 0211.5 'using global config, perf stream, return code 0': 
	test_when_finished "rm trace.perf actual expect" &&
	test_config_global trace2.perfBrief 1 &&
	test_config_global trace2.perfTarget "$(pwd)/trace.perf" &&
	test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&
	cat >expect <<-EOF &&
		d0|main|version|||||$V
		d0|main|start||_T_ABS_|||_EXE_ trace2 001return 0
		d0|main|cmd_name|||||trace2 (trace2)
		d0|main|exit||_T_ABS_|||code:0
		d0|main|atexit||_T_ABS_|||code:0
	EOF
	test_cmp expect actual

ok 5 - using global config, perf stream, return code 0

expecting success of 0211.6 'stopwatch timer test/test1': 
	test_when_finished "rm trace.perf actual" &&
	test_config_global trace2.perfBrief 1 &&
	test_config_global trace2.perfTarget "$(pwd)/trace.perf" &&

	# Use the timer "test1" 5 times from "main".
	test-tool trace2 100timer 5 10 &&

	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&

	have_timer_event "main" "timer" "test" "test1" 5 actual

d0|main|timer||||test|name:test1 intervals:5 total:_T_TOTAL_ min:_T_MIN_ max:_T_MAX_
ok 6 - stopwatch timer test/test1

ok 7 # skip stopwatch timer test/test2 (missing PTHREAD)

expecting success of 0211.8 'global counter test/test1': 
	test_when_finished "rm trace.perf actual" &&
	test_config_global trace2.perfBrief 1 &&
	test_config_global trace2.perfTarget "$(pwd)/trace.perf" &&

	# Use the counter "test1" and add n integers.
	test-tool trace2 200counter 1 2 3 4 5 &&

	perl "$TEST_DIRECTORY/t0211/scrub_perf.perl" <trace.perf >actual &&

	have_counter_event "main" "counter" "test" "test1" 15 actual

d0|main|version|||||2.39.0
d0|main|start||_T_ABS_|||_EXE_ trace2 200counter 1 2 3 4 5
d0|main|cmd_name|||||trace2 (trace2)
d0|main|exit||_T_ABS_|||code:0
d0|main|counter||||test|name:test1 value:15
d0|main|atexit||_T_ABS_|||code:0
ok 8 - global counter test/test1

ok 9 # skip global counter test/test2 (missing PTHREAD)

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0202-gettext-perl.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0202-gettext-perl/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
checking prerequisite: PERL_TEST_MORE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PERL_TEST_MORE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PERL_TEST_MORE" &&
	perl -MTest::More -e 0

)
prerequisite PERL_TEST_MORE ok
expecting success of 0202.1 'run t0202/test.pl to test Git::I18N.pm': 
	"$PERL_PATH" "$TEST_DIRECTORY"/t0202/test.pl 2>stderr &&
	test_must_be_empty stderr

1..13
ok 1 - Testing Git::I18N with NO Perl gettext library
ok 2 - Git::I18N is located at /<<PKGBUILDDIR>>/perl/build/lib/Git/I18N.pm
ok 3 - sanity: Git::I18N has 3 export(s)
ok 4 - sanity: Git::I18N exports everything by default
ok 5 - sanity: __n has a $$$ prototype
ok 6 - sanity: N__ has a $ prototype
ok 7 - sanity: __ has a $ prototype
ok 8 - Passing a string through __() in the C locale works
ok 9 - Get singular string through __n() in C locale
ok 10 - Get plural string through __n() in C locale
ok 11 - Passing a string through N__() in the C locale works
ok 12 # skip GETTEXT_LOCALE must be set by lib-gettext.sh for exhaustive Git::I18N tests
ok 13 # skip GETTEXT_LOCALE must be set by lib-gettext.sh for exhaustive Git::I18N tests
ok 1 - run t0202/test.pl to test Git::I18N.pm

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0210-trace2-normal.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0210-trace2-normal/.git/
expecting success of 0210.1 'normal stream, return code 0': 
	test_when_finished "rm trace.normal actual expect" &&
	GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 001return 0
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

ok 1 - normal stream, return code 0

expecting success of 0210.2 'normal stream, return code 1': 
	test_when_finished "rm trace.normal actual expect" &&
	test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 1 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 001return 1
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:1
		atexit elapsed:_TIME_ code:1
	EOF
	test_cmp expect actual

ok 2 - normal stream, return code 1

expecting success of 0210.3 'automatic filename': 
	test_when_finished "rm -r traces actual expect" &&
	mkdir traces &&
	GIT_TRACE2="$(pwd)/traces" test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <"$(ls traces/*)" >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 001return 0
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

ok 3 - automatic filename

expecting success of 0210.4 'normal stream, exit code 0': 
	test_when_finished "rm trace.normal actual expect" &&
	GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 0 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 002exit 0
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

ok 4 - normal stream, exit code 0

expecting success of 0210.5 'normal stream, exit code 1': 
	test_when_finished "rm trace.normal actual expect" &&
	test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 1 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 002exit 1
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:1
		atexit elapsed:_TIME_ code:1
	EOF
	test_cmp expect actual

ok 5 - normal stream, exit code 1

expecting success of 0210.6 'normal stream, error event': 
	test_when_finished "rm trace.normal actual expect" &&
	GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 003error "hello world" "this is a test" &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 003error 'hello world' 'this is a test'
		cmd_name trace2 (trace2)
		error hello world
		error this is a test
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

error: hello world
error: this is a test
ok 6 - normal stream, error event

expecting success of 0210.7 'BUG messages are written to trace2': 
	test_when_finished "rm trace.normal actual expect" &&
	test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 007bug &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 007bug
		cmd_name trace2 (trace2)
		error the bug message
		exit elapsed:_TIME_ code:99
		atexit elapsed:_TIME_ code:99
	EOF
	test_cmp expect actual

BUG: t/helper/test-trace2.c:208: the bug message
ok 7 - BUG messages are written to trace2

expecting success of 0210.8 'bug messages with BUG_if_bug() are written to trace2': 
	test_when_finished "rm trace.normal actual expect" &&
	test_expect_code 99 env GIT_TRACE2="$(pwd)/trace.normal" \
		test-tool trace2 008bug 2>err &&
	cat >expect <<-\EOF &&
	a bug message
	another bug message
	an explicit BUG_if_bug() following bug() call(s) is nice, but not required
	EOF
	sed "s/^.*: //" <err >actual &&
	test_cmp expect actual &&

	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 008bug
		cmd_name trace2 (trace2)
		error a bug message
		error another bug message
		error an explicit BUG_if_bug() following bug() call(s) is nice, but not required
		exit elapsed:_TIME_ code:99
		atexit elapsed:_TIME_ code:99
	EOF
	test_cmp expect actual

ok 8 - bug messages with BUG_if_bug() are written to trace2

expecting success of 0210.9 'bug messages without explicit BUG_if_bug() are written to trace2': 
	test_when_finished "rm trace.normal actual expect" &&
	test_expect_code 99 env GIT_TRACE2="$(pwd)/trace.normal" \
		test-tool trace2 009bug_BUG 2>err &&
	cat >expect <<-\EOF &&
	a bug message
	another bug message
	had bug() call(s) in this process without explicit BUG_if_bug()
	EOF
	sed "s/^.*: //" <err >actual &&
	test_cmp expect actual &&

	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 009bug_BUG
		cmd_name trace2 (trace2)
		error a bug message
		error another bug message
		error on exit(): had bug() call(s) in this process without explicit BUG_if_bug()
		exit elapsed:_TIME_ code:99
		atexit elapsed:_TIME_ code:99
	EOF
	test_cmp expect actual

ok 9 - bug messages without explicit BUG_if_bug() are written to trace2

expecting success of 0210.10 'bug messages followed by BUG() are written to trace2': 
	test_when_finished "rm trace.normal actual expect" &&
	test_expect_code 99 env GIT_TRACE2="$(pwd)/trace.normal" \
		test-tool trace2 010bug_BUG 2>err &&
	cat >expect <<-\EOF &&
	a bug message
	a BUG message
	EOF
	sed "s/^.*: //" <err >actual &&
	test_cmp expect actual &&

	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 010bug_BUG
		cmd_name trace2 (trace2)
		error a bug message
		error a BUG message
		exit elapsed:_TIME_ code:99
		atexit elapsed:_TIME_ code:99
	EOF
	test_cmp expect actual

ok 10 - bug messages followed by BUG() are written to trace2

expecting success of 0210.11 'using global config, normal stream, return code 0': 
	test_when_finished "rm trace.normal actual expect" &&
	test_config_global trace2.normalBrief 1 &&
	test_config_global trace2.normalTarget "$(pwd)/trace.normal" &&
	test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 001return 0
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

ok 11 - using global config, normal stream, return code 0

expecting success of 0210.12 'using global config with include': 
	test_when_finished "rm trace.normal actual expect real.gitconfig" &&
	test_config_global trace2.normalBrief 1 &&
	test_config_global trace2.normalTarget "$(pwd)/trace.normal" &&
	mv "$(pwd)/.gitconfig" "$(pwd)/real.gitconfig" &&
	test_config_global include.path "$(pwd)/real.gitconfig" &&
	test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
	cat >expect <<-EOF &&
		version $V
		start _EXE_ trace2 001return 0
		cmd_name trace2 (trace2)
		exit elapsed:_TIME_ code:0
		atexit elapsed:_TIME_ code:0
	EOF
	test_cmp expect actual

ok 12 - using global config with include

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0212-trace2-event.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0212-trace2-event/.git/
expecting success of 0212.1 'event stream, error event': 
	test_when_finished "rm trace.event actual expect" &&
	GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool trace2 003error "hello world" "this is a test" &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "003error",
	|      "hello world",
	|      "this is a test"
	|    ],
	|    "errors":[
	|      "%s",
	|      "%s"
	|    ],
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

error: hello world
error: this is a test
ok 1 - event stream, error event

expecting success of 0212.2 'event stream, return code 0': 
	test_when_finished "rm trace.event actual expect" &&
	GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool trace2 004child test-tool trace2 004child test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "004child",
	|      "test-tool",
	|      "trace2",
	|      "004child",
	|      "test-tool",
	|      "trace2",
	|      "001return",
	|      "0"
	|    ],
	|    "child":{
	|      "0":{
	|        "child_argv":[
	|          "_EXE_",
	|          "trace2",
	|          "004child",
	|          "test-tool",
	|          "trace2",
	|          "001return",
	|          "0"
	|        ],
	|        "child_class":"?",
	|        "child_code":0,
	|        "use_shell":0
	|      }
	|    },
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  },
	|  "_SID0_/_SID1_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "004child",
	|      "test-tool",
	|      "trace2",
	|      "001return",
	|      "0"
	|    ],
	|    "child":{
	|      "0":{
	|        "child_argv":[
	|          "_EXE_",
	|          "trace2",
	|          "001return",
	|          "0"
	|        ],
	|        "child_class":"?",
	|        "child_code":0,
	|        "use_shell":0
	|      }
	|    },
	|    "exit_code":0,
	|    "hierarchy":"trace2/trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  },
	|  "_SID0_/_SID1_/_SID2_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "001return",
	|      "0"
	|    ],
	|    "exit_code":0,
	|    "hierarchy":"trace2/trace2/trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

ok 2 - event stream, return code 0

expecting success of 0212.3 'event stream, list config': 
	test_when_finished "rm trace.event actual expect" &&
	git config --local t0212.abc 1 &&
	git config --local t0212.def "hello world" &&
	GIT_TRACE2_EVENT="$(pwd)/trace.event" GIT_TRACE2_CONFIG_PARAMS="t0212.*" test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "001return",
	|      "0"
	|    ],
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "params":[
	|      {
	|        "param":"t0212.abc",
	|        "value":"1"
	|      },
	|      {
	|        "param":"t0212.def",
	|        "value":"hello world"
	|      }
	|    ],
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

ok 3 - event stream, list config

expecting success of 0212.4 'event stream, list env vars': 
	test_when_finished "rm trace.event actual expect" &&
	GIT_TRACE2_EVENT="$(pwd)/trace.event" \
		GIT_TRACE2_ENV_VARS="A_VAR,OTHER_VAR,MISSING" \
		A_VAR=1 OTHER_VAR="hello world" test-tool trace2 001return 0 &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "001return",
	|      "0"
	|    ],
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "params":[
	|      {
	|        "param":"A_VAR",
	|        "value":"1"
	|      },
	|      {
	|        "param":"OTHER_VAR",
	|        "value":"hello world"
	|      }
	|    ],
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

ok 4 - event stream, list env vars

expecting success of 0212.5 'basic trace2_data': 
	test_when_finished "rm trace.event actual expect" &&
	GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool trace2 006data test_category k1 v1 test_category k2 v2 &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "006data",
	|      "test_category",
	|      "k1",
	|      "v1",
	|      "test_category",
	|      "k2",
	|      "v2"
	|    ],
	|    "data":{
	|      "test_category":{
	|        "k1":"v1",
	|        "k2":"v2"
	|      }
	|    },
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

ok 5 - basic trace2_data

expecting success of 0212.6 'using global config, event stream, error event': 
	test_when_finished "rm trace.event actual expect" &&
	test_config_global trace2.eventTarget "$(pwd)/trace.event" &&
	test-tool trace2 003error "hello world" "this is a test" &&
	perl "$TEST_DIRECTORY/t0212/parse_events.perl" <trace.event >actual &&
	sed -e "s/^|//" >expect <<-EOF &&
	|VAR1 = {
	|  "_SID0_":{
	|    "argv":[
	|      "_EXE_",
	|      "trace2",
	|      "003error",
	|      "hello world",
	|      "this is a test"
	|    ],
	|    "errors":[
	|      "%s",
	|      "%s"
	|    ],
	|    "exit_code":0,
	|    "hierarchy":"trace2",
	|    "name":"trace2",
	|    "version":"$V"
	|  }
	|};
	EOF
	test_cmp expect actual

error: hello world
error: this is a test
ok 6 - using global config, event stream, error event

expecting success of 0212.7 'discard traces when there are too many files': 
	mkdir trace_target_dir &&
	test_when_finished "rm -r trace_target_dir" &&
	(
		GIT_TRACE2_MAX_FILES=5 &&
		export GIT_TRACE2_MAX_FILES &&
		cd trace_target_dir &&
		test_seq $GIT_TRACE2_MAX_FILES >../expected_filenames.txt &&
		xargs touch <../expected_filenames.txt &&
		cd .. &&
		GIT_TRACE2_EVENT="$(pwd)/trace_target_dir" test-tool trace2 001return 0
	) &&
	echo git-trace2-discard >>expected_filenames.txt &&
	ls trace_target_dir >ls_output.txt &&
	test_cmp expected_filenames.txt ls_output.txt &&
	head -n1 trace_target_dir/git-trace2-discard | grep \"event\":\"version\" &&
	head -n2 trace_target_dir/git-trace2-discard | tail -n1 | grep \"event\":\"too_many_files\"

{"event":"version","sid":"20221228T073131.444486Z-Hc64317c2-P00005536","thread":"main","time":"2022-12-28T07:31:31.445459Z","file":"common-main.c","line":50,"evt":"3","exe":"2.39.0"}
{"event":"too_many_files","sid":"20221228T073131.444486Z-Hc64317c2-P00005536","thread":"main","time":"2022-12-28T07:31:31.445639Z","file":"common-main.c","line":50}
ok 7 - discard traces when there are too many files

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0300-credentials.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0300-credentials/.git/
expecting success of 0300.1 'setup helper scripts': 
	cat >dump <<-\EOF &&
	whoami=$(echo $0 | sed s/.*git-credential-//)
	echo >&2 "$whoami: $*"
	OIFS=$IFS
	IFS==
	while read key value; do
		echo >&2 "$whoami: $key=$value"
		eval "$key=$value"
	done
	IFS=$OIFS
	EOF

	write_script git-credential-useless <<-\EOF &&
	. ./dump
	exit 0
	EOF

	write_script git-credential-quit <<-\EOF &&
	. ./dump
	echo quit=1
	EOF

	write_script git-credential-verbatim <<-\EOF &&
	user=$1; shift
	pass=$1; shift
	. ./dump
	test -z "$user" || echo username=$user
	test -z "$pass" || echo password=$pass
	EOF

	PATH="$PWD:$PATH"

ok 1 - setup helper scripts

expecting success of 0300.2 'credential_fill invokes helper': 
	check fill "verbatim foo bar" <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	EOF

ok 2 - credential_fill invokes helper

expecting success of 0300.3 'credential_fill invokes multiple helpers': 
	check fill useless "verbatim foo bar" <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=foo
	password=bar
	--
	useless: get
	useless: protocol=http
	useless: host=example.com
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	EOF

ok 3 - credential_fill invokes multiple helpers

expecting success of 0300.4 'credential_fill stops when we get a full response': 
	check fill "verbatim one two" "verbatim three four" <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=one
	password=two
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	EOF

ok 4 - credential_fill stops when we get a full response

expecting success of 0300.5 'credential_fill continues through partial response': 
	check fill "verbatim one \"\"" "verbatim two three" <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=two
	password=three
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: username=one
	EOF

ok 5 - credential_fill continues through partial response

expecting success of 0300.6 'credential_fill passes along metadata': 
	check fill "verbatim one two" <<-\EOF
	protocol=ftp
	host=example.com
	path=foo.git
	--
	protocol=ftp
	host=example.com
	path=foo.git
	username=one
	password=two
	--
	verbatim: get
	verbatim: protocol=ftp
	verbatim: host=example.com
	verbatim: path=foo.git
	EOF

ok 6 - credential_fill passes along metadata

expecting success of 0300.7 'credential_approve calls all helpers': 
	check approve useless "verbatim one two" <<-\EOF
	protocol=http
	host=example.com
	username=foo
	password=bar
	--
	--
	useless: store
	useless: protocol=http
	useless: host=example.com
	useless: username=foo
	useless: password=bar
	verbatim: store
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: username=foo
	verbatim: password=bar
	EOF

ok 7 - credential_approve calls all helpers

expecting success of 0300.8 'do not bother storing password-less credential': 
	check approve useless <<-\EOF
	protocol=http
	host=example.com
	username=foo
	--
	--
	EOF

ok 8 - do not bother storing password-less credential

expecting success of 0300.9 'credential_reject calls all helpers': 
	check reject useless "verbatim one two" <<-\EOF
	protocol=http
	host=example.com
	username=foo
	password=bar
	--
	--
	useless: erase
	useless: protocol=http
	useless: host=example.com
	useless: username=foo
	useless: password=bar
	verbatim: erase
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: username=foo
	verbatim: password=bar
	EOF

ok 9 - credential_reject calls all helpers

expecting success of 0300.10 'usernames can be preserved': 
	check fill "verbatim \"\" three" <<-\EOF
	protocol=http
	host=example.com
	username=one
	--
	protocol=http
	host=example.com
	username=one
	password=three
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: username=one
	EOF

ok 10 - usernames can be preserved

expecting success of 0300.11 'usernames can be overridden': 
	check fill "verbatim two three" <<-\EOF
	protocol=http
	host=example.com
	username=one
	--
	protocol=http
	host=example.com
	username=two
	password=three
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	verbatim: username=one
	EOF

ok 11 - usernames can be overridden

expecting success of 0300.12 'do not bother completing already-full credential': 
	check fill "verbatim three four" <<-\EOF
	protocol=http
	host=example.com
	username=one
	password=two
	--
	protocol=http
	host=example.com
	username=one
	password=two
	--
	EOF

ok 12 - do not bother completing already-full credential

expecting success of 0300.13 'empty helper list falls back to internal getpass': 
	check fill <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=askpass-username
	password=askpass-password
	--
	askpass: Username for 'http://example.com':
	askpass: Password for 'http://askpass-username@example.com':
	EOF

ok 13 - empty helper list falls back to internal getpass

expecting success of 0300.14 'internal getpass does not ask for known username': 
	check fill <<-\EOF
	protocol=http
	host=example.com
	username=foo
	--
	protocol=http
	host=example.com
	username=foo
	password=askpass-password
	--
	askpass: Password for 'http://foo@example.com':
	EOF

ok 14 - internal getpass does not ask for known username

expecting success of 0300.15 'git-credential respects core.askPass': 
	write_script alternate-askpass <<-\EOF &&
	echo >&2 "alternate askpass invoked"
	echo alternate-value
	EOF
	test_config core.askpass "$PWD/alternate-askpass" &&
	(
		# unset GIT_ASKPASS set by lib-credential.sh which would
		# override our config, but do so in a subshell so that we do
		# not interfere with other tests
		sane_unset GIT_ASKPASS &&
		check fill <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=alternate-value
		password=alternate-value
		--
		alternate askpass invoked
		alternate askpass invoked
		EOF
	)

ok 15 - git-credential respects core.askPass

expecting success of 0300.16 'respect configured credentials': 
	test_config credential.helper "$HELPER" &&
	check fill <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=foo
	password=bar
	--
	EOF

ok 16 - respect configured credentials

expecting success of 0300.17 'match configured credential': 
	test_config credential.https://example.com.helper "$HELPER" &&
	check fill <<-\EOF
	protocol=https
	host=example.com
	path=repo.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	EOF

ok 17 - match configured credential

expecting success of 0300.18 'do not match configured credential': 
	test_config credential.https://foo.helper "$HELPER" &&
	check fill <<-\EOF
	protocol=https
	host=bar
	--
	protocol=https
	host=bar
	username=askpass-username
	password=askpass-password
	--
	askpass: Username for 'https://bar':
	askpass: Password for 'https://askpass-username@bar':
	EOF

ok 18 - do not match configured credential

expecting success of 0300.19 'match multiple configured helpers': 
	test_config credential.helper "verbatim \"\" \"\"" &&
	test_config credential.https://example.com.helper "$HELPER" &&
	check fill <<-\EOF
	protocol=https
	host=example.com
	path=repo.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	EOF

ok 19 - match multiple configured helpers

expecting success of 0300.20 'match multiple configured helpers with URLs': 
	test_config credential.https://example.com/repo.git.helper "verbatim \"\" \"\"" &&
	test_config credential.https://example.com.helper "$HELPER" &&
	check fill <<-\EOF
	protocol=https
	host=example.com
	path=repo.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	EOF

ok 20 - match multiple configured helpers with URLs

expecting success of 0300.21 'match percent-encoded values': 
	test_config credential.https://example.com/%2566.git.helper "$HELPER" &&
	check fill <<-\EOF
	url=https://example.com/%2566.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	EOF

ok 21 - match percent-encoded values

expecting success of 0300.22 'match percent-encoded UTF-8 values in path': 
	test_config credential.https://example.com.useHttpPath true &&
	test_config credential.https://example.com/perú.git.helper "$HELPER" &&
	check fill <<-\EOF
	url=https://example.com/per%C3%BA.git
	--
	protocol=https
	host=example.com
	path=perú.git
	username=foo
	password=bar
	--
	EOF

ok 22 - match percent-encoded UTF-8 values in path

expecting success of 0300.23 'match percent-encoded values in username': 
	test_config credential.https://user%2fname@example.com/foo/bar.git.helper "$HELPER" &&
	check fill <<-\EOF
	url=https://user%2fname@example.com/foo/bar.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	EOF

ok 23 - match percent-encoded values in username

expecting success of 0300.24 'fetch with multiple path components': 
	test_unconfig credential.helper &&
	test_config credential.https://example.com/foo/repo.git.helper "verbatim foo bar" &&
	check fill <<-\EOF
	url=https://example.com/foo/repo.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	EOF

ok 24 - fetch with multiple path components

expecting success of 0300.25 'pull username from config': 
	test_config credential.https://example.com.username foo &&
	check fill <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=foo
	password=askpass-password
	--
	askpass: Password for 'https://foo@example.com':
	EOF

ok 25 - pull username from config

expecting success of 0300.26 'honors username from URL over helper (URL)': 
	test_config credential.https://example.com.username bob &&
	test_config credential.https://example.com.helper "verbatim \"\" bar" &&
	check fill <<-\EOF
	url=https://alice@example.com
	--
	protocol=https
	host=example.com
	username=alice
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	verbatim: username=alice
	EOF

ok 26 - honors username from URL over helper (URL)

expecting success of 0300.27 'honors username from URL over helper (components)': 
	test_config credential.https://example.com.username bob &&
	test_config credential.https://example.com.helper "verbatim \"\" bar" &&
	check fill <<-\EOF
	protocol=https
	host=example.com
	username=alice
	--
	protocol=https
	host=example.com
	username=alice
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	verbatim: username=alice
	EOF

ok 27 - honors username from URL over helper (components)

expecting success of 0300.28 'last matching username wins': 
	test_config credential.https://example.com/path.git.username bob &&
	test_config credential.https://example.com.username alice &&
	test_config credential.https://example.com.helper "verbatim \"\" bar" &&
	check fill <<-\EOF
	url=https://example.com/path.git
	--
	protocol=https
	host=example.com
	username=alice
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	verbatim: username=alice
	EOF

ok 28 - last matching username wins

expecting success of 0300.29 'http paths can be part of context': 
	check fill "verbatim foo bar" <<-\EOF &&
	protocol=https
	host=example.com
	path=foo.git
	--
	protocol=https
	host=example.com
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	EOF
	test_config credential.https://example.com.useHttpPath true &&
	check fill "verbatim foo bar" <<-\EOF
	protocol=https
	host=example.com
	path=foo.git
	--
	protocol=https
	host=example.com
	path=foo.git
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.com
	verbatim: path=foo.git
	EOF

ok 29 - http paths can be part of context

expecting success of 0300.30 'context uses urlmatch': 
	test_config "credential.https://*.org.useHttpPath" true &&
	check fill "verbatim foo bar" <<-\EOF
	protocol=https
	host=example.org
	path=foo.git
	--
	protocol=https
	host=example.org
	path=foo.git
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=https
	verbatim: host=example.org
	verbatim: path=foo.git
	EOF

ok 30 - context uses urlmatch

expecting success of 0300.31 'helpers can abort the process': 
	test_must_fail git \
		-c credential.helper=quit \
		-c credential.helper="verbatim foo bar" \
		credential fill >stdout 2>stderr <<-\EOF &&
	protocol=http
	host=example.com
	EOF
	test_must_be_empty stdout &&
	cat >expect <<-\EOF &&
	quit: get
	quit: protocol=http
	quit: host=example.com
	fatal: credential helper 'quit' told us to quit
	EOF
	test_cmp expect stderr

ok 31 - helpers can abort the process

expecting success of 0300.32 'empty helper spec resets helper list': 
	test_config credential.helper "verbatim file file" &&
	check fill "" "verbatim cmdline cmdline" <<-\EOF
	protocol=http
	host=example.com
	--
	protocol=http
	host=example.com
	username=cmdline
	password=cmdline
	--
	verbatim: get
	verbatim: protocol=http
	verbatim: host=example.com
	EOF

ok 32 - empty helper spec resets helper list

expecting success of 0300.33 'url parser rejects embedded newlines': 
	test_must_fail git credential fill 2>stderr <<-\EOF &&
	url=https://one.example.com?%0ahost=two.example.com/
	EOF
	cat >expect <<-\EOF &&
	warning: url contains a newline in its path component: https://one.example.com?%0ahost=two.example.com/
	fatal: credential url cannot be parsed: https://one.example.com?%0ahost=two.example.com/
	EOF
	test_cmp expect stderr

ok 33 - url parser rejects embedded newlines

expecting success of 0300.34 'host-less URLs are parsed as empty host': 
	check fill "verbatim foo bar" <<-\EOF
	url=cert:///path/to/cert.pem
	--
	protocol=cert
	host=
	path=path/to/cert.pem
	username=foo
	password=bar
	--
	verbatim: get
	verbatim: protocol=cert
	verbatim: host=
	verbatim: path=path/to/cert.pem
	EOF

ok 34 - host-less URLs are parsed as empty host

expecting success of 0300.35 'credential system refuses to work with missing host': 
	test_must_fail git credential fill 2>stderr <<-\EOF &&
	protocol=http
	EOF
	cat >expect <<-\EOF &&
	fatal: refusing to work with credential missing host field
	EOF
	test_cmp expect stderr

ok 35 - credential system refuses to work with missing host

expecting success of 0300.36 'credential system refuses to work with missing protocol': 
	test_must_fail git credential fill 2>stderr <<-\EOF &&
	host=example.com
	EOF
	cat >expect <<-\EOF &&
	fatal: refusing to work with credential missing protocol field
	EOF
	test_cmp expect stderr

ok 36 - credential system refuses to work with missing protocol

expecting success of 0300.37 'url parser handles bare query marker': 
	check_host_and_path https://example.com?foo.git example.com ?foo.git

ok 37 - url parser handles bare query marker

expecting success of 0300.38 'url parser handles bare fragment marker': 
	check_host_and_path https://example.com#foo.git example.com "#foo.git"

ok 38 - url parser handles bare fragment marker

expecting success of 0300.39 'url parser not confused by encoded markers': 
	check_host_and_path https://example.com%23%3f%2f/foo.git \
		"example.com#?/" foo.git

ok 39 - url parser not confused by encoded markers

expecting success of 0300.40 'credential config with partial URLs': 
	echo "echo password=yep" | write_script git-credential-yep &&
	test_write_lines url=https://user@example.com/repo.git >stdin &&
	for partial in \
		example.com \
		user@example.com \
		https:// \
		https://example.com \
		https://example.com/ \
		https://user@example.com \
		https://user@example.com/ \
		https://example.com/repo.git \
		https://user@example.com/repo.git \
		/repo.git
	do
		git -c credential.$partial.helper=yep \
			credential fill <stdin >stdout &&
		grep yep stdout ||
		return 1
	done &&

	for partial in \
		dont.use.this \
		http:// \
		/repo
	do
		git -c credential.$partial.helper=yep \
			credential fill <stdin >stdout &&
		! grep yep stdout ||
		return 1
	done &&

	git -c credential.$partial.helper=yep \
		-c credential.with%0anewline.username=uh-oh \
		credential fill <stdin >stdout 2>stderr &&
	test_i18ngrep "skipping credential lookup for key" stderr

password=yep
password=yep
password=yep
password=yep
password=yep
password=yep
password=yep
password=yep
password=yep
password=yep
askpass: Password for 'https://user@example.com':
askpass: Password for 'https://user@example.com':
askpass: Password for 'https://user@example.com':
warning: skipping credential lookup for key: credential.with%0anewline
ok 40 - credential config with partial URLs

# passed all 40 test(s)
1..40
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0303-credential-external.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0303-credential-external/.git/
1..0 # SKIP used to test external credential helpers
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0301-credential-cache.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0301-credential-cache/.git/
expecting success of 0301.1 'helper (cache) has no existing data': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 1 - helper (cache) has no existing data

expecting success of 0301.2 'helper (cache) stores password': 
		check approve $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		EOF
	
ok 2 - helper (cache) stores password

expecting success of 0301.3 'helper (cache) can retrieve password': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		--
		EOF
	
ok 3 - helper (cache) can retrieve password

expecting success of 0301.4 'helper (cache) requires matching protocol': 
		check fill $HELPER <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://example.com':
		askpass: Password for 'http://askpass-username@example.com':
		EOF
	
ok 4 - helper (cache) requires matching protocol

expecting success of 0301.5 'helper (cache) requires matching host': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=other.tld
		--
		protocol=https
		host=other.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://other.tld':
		askpass: Password for 'https://askpass-username@other.tld':
		EOF
	
ok 5 - helper (cache) requires matching host

expecting success of 0301.6 'helper (cache) requires matching username': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=other
		--
		protocol=https
		host=example.com
		username=other
		password=askpass-password
		--
		askpass: Password for 'https://other@example.com':
		EOF
	
ok 6 - helper (cache) requires matching username

expecting success of 0301.7 'helper (cache) requires matching path': 
		test_config credential.usehttppath true &&
		check approve $HELPER <<-\EOF &&
		protocol=http
		host=path.tld
		path=foo.git
		username=user
		password=pass
		EOF
		check fill $HELPER <<-\EOF
		protocol=http
		host=path.tld
		path=bar.git
		--
		protocol=http
		host=path.tld
		path=bar.git
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://path.tld/bar.git':
		askpass: Password for 'http://askpass-username@path.tld/bar.git':
		EOF
	
ok 7 - helper (cache) requires matching path

expecting success of 0301.8 'helper (cache) can forget host': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 8 - helper (cache) can forget host

expecting success of 0301.9 'helper (cache) can store multiple users': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
		check fill $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 9 - helper (cache) can store multiple users

expecting success of 0301.10 'helper (cache) can forget user': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=askpass-password
		--
		askpass: Password for 'https://user1@example.com':
		EOF
	
ok 10 - helper (cache) can forget user

expecting success of 0301.11 'helper (cache) remembers other user': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 11 - helper (cache) remembers other user

expecting success of 0301.12 'helper (cache) can store empty username': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=sso.tld
		--
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
	
ok 12 - helper (cache) can store empty username

expecting success of 0301.13 'socket defaults to ~/.cache/git/credential/socket': 
	test_when_finished "
		git credential-cache exit &&
		rmdir -p .cache/git/credential/
	" &&
	test_path_is_missing "$HOME/.git-credential-cache" &&
	test_path_is_socket "$HOME/.cache/git/credential/socket"

ok 13 - socket defaults to ~/.cache/git/credential/socket

expecting success of 0301.14 'helper (cache) has no existing data': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 14 - helper (cache) has no existing data

expecting success of 0301.15 'helper (cache) stores password': 
		check approve $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		EOF
	
ok 15 - helper (cache) stores password

expecting success of 0301.16 'helper (cache) can retrieve password': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		--
		EOF
	
ok 16 - helper (cache) can retrieve password

expecting success of 0301.17 'helper (cache) requires matching protocol': 
		check fill $HELPER <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://example.com':
		askpass: Password for 'http://askpass-username@example.com':
		EOF
	
ok 17 - helper (cache) requires matching protocol

expecting success of 0301.18 'helper (cache) requires matching host': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=other.tld
		--
		protocol=https
		host=other.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://other.tld':
		askpass: Password for 'https://askpass-username@other.tld':
		EOF
	
ok 18 - helper (cache) requires matching host

expecting success of 0301.19 'helper (cache) requires matching username': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=other
		--
		protocol=https
		host=example.com
		username=other
		password=askpass-password
		--
		askpass: Password for 'https://other@example.com':
		EOF
	
ok 19 - helper (cache) requires matching username

expecting success of 0301.20 'helper (cache) requires matching path': 
		test_config credential.usehttppath true &&
		check approve $HELPER <<-\EOF &&
		protocol=http
		host=path.tld
		path=foo.git
		username=user
		password=pass
		EOF
		check fill $HELPER <<-\EOF
		protocol=http
		host=path.tld
		path=bar.git
		--
		protocol=http
		host=path.tld
		path=bar.git
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://path.tld/bar.git':
		askpass: Password for 'http://askpass-username@path.tld/bar.git':
		EOF
	
ok 20 - helper (cache) requires matching path

expecting success of 0301.21 'helper (cache) can forget host': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 21 - helper (cache) can forget host

expecting success of 0301.22 'helper (cache) can store multiple users': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
		check fill $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 22 - helper (cache) can store multiple users

expecting success of 0301.23 'helper (cache) can forget user': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=askpass-password
		--
		askpass: Password for 'https://user1@example.com':
		EOF
	
ok 23 - helper (cache) can forget user

expecting success of 0301.24 'helper (cache) remembers other user': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 24 - helper (cache) remembers other user

expecting success of 0301.25 'helper (cache) can store empty username': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=sso.tld
		--
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
	
ok 25 - helper (cache) can store empty username

expecting success of 0301.26 'use custom XDG_CACHE_HOME if set and default sockets are not created': 
	test_when_finished "git credential-cache exit" &&
	test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket" &&
	test_path_is_missing "$HOME/.git-credential-cache/socket" &&
	test_path_is_missing "$HOME/.cache/git/credential/socket"

ok 26 - use custom XDG_CACHE_HOME if set and default sockets are not created

expecting success of 0301.27 'credential-cache --socket option overrides default location': 
	test_when_finished "
		git credential-cache exit --socket \"\$HOME/dir/socket\" &&
		rmdir \"\$HOME/dir\"
	" &&
	check approve "cache --socket \"\$HOME/dir/socket\"" <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/dir/socket"

ok 27 - credential-cache --socket option overrides default location

expecting success of 0301.28 'use custom XDG_CACHE_HOME even if xdg socket exists': 
	test_when_finished "
		git credential-cache exit &&
		sane_unset XDG_CACHE_HOME
	" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.cache/git/credential/socket" &&
	XDG_CACHE_HOME="$HOME/xdg" &&
	export XDG_CACHE_HOME &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket"

ok 28 - use custom XDG_CACHE_HOME even if xdg socket exists

expecting success of 0301.29 'use user socket if user directory exists': 
	test_when_finished "
		git credential-cache exit &&
		rmdir \"\$HOME/.git-credential-cache/\"
	" &&
	mkdir -p "$HOME/.git-credential-cache/" &&
	chmod 700 "$HOME/.git-credential-cache/" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.git-credential-cache/socket"

ok 29 - use user socket if user directory exists

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 0301.30 'use user socket if user directory is a symlink to a directory': 
	test_when_finished "
		git credential-cache exit &&
		rmdir \"\$HOME/dir/\" &&
		rm \"\$HOME/.git-credential-cache\"
	" &&
	mkdir -p -m 700 "$HOME/dir/" &&
	ln -s "$HOME/dir" "$HOME/.git-credential-cache" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.git-credential-cache/socket"

ok 30 - use user socket if user directory is a symlink to a directory

expecting success of 0301.31 'helper (cache --timeout=1) times out': 
		check approve "$HELPER" <<-\EOF &&
		protocol=https
		host=timeout.tld
		username=user
		password=pass
		EOF
		sleep 2 &&
		check fill "$HELPER" <<-\EOF
		protocol=https
		host=timeout.tld
		--
		protocol=https
		host=timeout.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://timeout.tld':
		askpass: Password for 'https://askpass-username@timeout.tld':
		EOF
	
ok 31 - helper (cache --timeout=1) times out

# passed all 31 test(s)
1..31
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0302-credential-store.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0302-credential-store/.git/
expecting success of 0302.1 'helper (store) has no existing data': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 1 - helper (store) has no existing data

expecting success of 0302.2 'helper (store) stores password': 
		check approve $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		EOF
	
ok 2 - helper (store) stores password

expecting success of 0302.3 'helper (store) can retrieve password': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		--
		EOF
	
ok 3 - helper (store) can retrieve password

expecting success of 0302.4 'helper (store) requires matching protocol': 
		check fill $HELPER <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://example.com':
		askpass: Password for 'http://askpass-username@example.com':
		EOF
	
ok 4 - helper (store) requires matching protocol

expecting success of 0302.5 'helper (store) requires matching host': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=other.tld
		--
		protocol=https
		host=other.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://other.tld':
		askpass: Password for 'https://askpass-username@other.tld':
		EOF
	
ok 5 - helper (store) requires matching host

expecting success of 0302.6 'helper (store) requires matching username': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=other
		--
		protocol=https
		host=example.com
		username=other
		password=askpass-password
		--
		askpass: Password for 'https://other@example.com':
		EOF
	
ok 6 - helper (store) requires matching username

expecting success of 0302.7 'helper (store) requires matching path': 
		test_config credential.usehttppath true &&
		check approve $HELPER <<-\EOF &&
		protocol=http
		host=path.tld
		path=foo.git
		username=user
		password=pass
		EOF
		check fill $HELPER <<-\EOF
		protocol=http
		host=path.tld
		path=bar.git
		--
		protocol=http
		host=path.tld
		path=bar.git
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://path.tld/bar.git':
		askpass: Password for 'http://askpass-username@path.tld/bar.git':
		EOF
	
ok 7 - helper (store) requires matching path

expecting success of 0302.8 'helper (store) can forget host': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 8 - helper (store) can forget host

expecting success of 0302.9 'helper (store) can store multiple users': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
		check fill $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 9 - helper (store) can store multiple users

expecting success of 0302.10 'helper (store) can forget user': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=askpass-password
		--
		askpass: Password for 'https://user1@example.com':
		EOF
	
ok 10 - helper (store) can forget user

expecting success of 0302.11 'helper (store) remembers other user': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 11 - helper (store) remembers other user

expecting success of 0302.12 'helper (store) can store empty username': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=sso.tld
		--
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
	
ok 12 - helper (store) can store empty username

expecting success of 0302.13 'when xdg file does not exist, xdg file not created': 
	test_path_is_missing "$HOME/.config/git/credentials" &&
	test -s "$HOME/.git-credentials"

ok 13 - when xdg file does not exist, xdg file not created

expecting success of 0302.14 'setup xdg file': 
	rm -f "$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	>"$HOME/.config/git/credentials"

ok 14 - setup xdg file

expecting success of 0302.15 'helper (store) has no existing data': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 15 - helper (store) has no existing data

expecting success of 0302.16 'helper (store) stores password': 
		check approve $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		EOF
	
ok 16 - helper (store) stores password

expecting success of 0302.17 'helper (store) can retrieve password': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		--
		EOF
	
ok 17 - helper (store) can retrieve password

expecting success of 0302.18 'helper (store) requires matching protocol': 
		check fill $HELPER <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://example.com':
		askpass: Password for 'http://askpass-username@example.com':
		EOF
	
ok 18 - helper (store) requires matching protocol

expecting success of 0302.19 'helper (store) requires matching host': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=other.tld
		--
		protocol=https
		host=other.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://other.tld':
		askpass: Password for 'https://askpass-username@other.tld':
		EOF
	
ok 19 - helper (store) requires matching host

expecting success of 0302.20 'helper (store) requires matching username': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=other
		--
		protocol=https
		host=example.com
		username=other
		password=askpass-password
		--
		askpass: Password for 'https://other@example.com':
		EOF
	
ok 20 - helper (store) requires matching username

expecting success of 0302.21 'helper (store) requires matching path': 
		test_config credential.usehttppath true &&
		check approve $HELPER <<-\EOF &&
		protocol=http
		host=path.tld
		path=foo.git
		username=user
		password=pass
		EOF
		check fill $HELPER <<-\EOF
		protocol=http
		host=path.tld
		path=bar.git
		--
		protocol=http
		host=path.tld
		path=bar.git
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://path.tld/bar.git':
		askpass: Password for 'http://askpass-username@path.tld/bar.git':
		EOF
	
ok 21 - helper (store) requires matching path

expecting success of 0302.22 'helper (store) can forget host': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 22 - helper (store) can forget host

expecting success of 0302.23 'helper (store) can store multiple users': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
		check fill $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 23 - helper (store) can store multiple users

expecting success of 0302.24 'helper (store) can forget user': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=askpass-password
		--
		askpass: Password for 'https://user1@example.com':
		EOF
	
ok 24 - helper (store) can forget user

expecting success of 0302.25 'helper (store) remembers other user': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 25 - helper (store) remembers other user

expecting success of 0302.26 'helper (store) can store empty username': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=sso.tld
		--
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
	
ok 26 - helper (store) can store empty username

expecting success of 0302.27 'when xdg file exists, home file not created': 
	test -s "$HOME/.config/git/credentials" &&
	test_path_is_missing "$HOME/.git-credentials"

ok 27 - when xdg file exists, home file not created

expecting success of 0302.28 'setup custom xdg file': 
	rm -f "$HOME/.git-credentials" &&
	rm -f "$HOME/.config/git/credentials" &&
	mkdir -p "$HOME/xdg/git" &&
	>"$HOME/xdg/git/credentials"

ok 28 - setup custom xdg file

expecting success of 0302.29 'helper (store) has no existing data': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 29 - helper (store) has no existing data

expecting success of 0302.30 'helper (store) stores password': 
		check approve $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		EOF
	
ok 30 - helper (store) stores password

expecting success of 0302.31 'helper (store) can retrieve password': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=store-user
		password=store-pass
		--
		EOF
	
ok 31 - helper (store) can retrieve password

expecting success of 0302.32 'helper (store) requires matching protocol': 
		check fill $HELPER <<-\EOF
		protocol=http
		host=example.com
		--
		protocol=http
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://example.com':
		askpass: Password for 'http://askpass-username@example.com':
		EOF
	
ok 32 - helper (store) requires matching protocol

expecting success of 0302.33 'helper (store) requires matching host': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=other.tld
		--
		protocol=https
		host=other.tld
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://other.tld':
		askpass: Password for 'https://askpass-username@other.tld':
		EOF
	
ok 33 - helper (store) requires matching host

expecting success of 0302.34 'helper (store) requires matching username': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=other
		--
		protocol=https
		host=example.com
		username=other
		password=askpass-password
		--
		askpass: Password for 'https://other@example.com':
		EOF
	
ok 34 - helper (store) requires matching username

expecting success of 0302.35 'helper (store) requires matching path': 
		test_config credential.usehttppath true &&
		check approve $HELPER <<-\EOF &&
		protocol=http
		host=path.tld
		path=foo.git
		username=user
		password=pass
		EOF
		check fill $HELPER <<-\EOF
		protocol=http
		host=path.tld
		path=bar.git
		--
		protocol=http
		host=path.tld
		path=bar.git
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'http://path.tld/bar.git':
		askpass: Password for 'http://askpass-username@path.tld/bar.git':
		EOF
	
ok 35 - helper (store) requires matching path

expecting success of 0302.36 'helper (store) can forget host': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		EOF
	
ok 36 - helper (store) can forget host

expecting success of 0302.37 'helper (store) can store multiple users': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
		check fill $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=pass1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 37 - helper (store) can store multiple users

expecting success of 0302.38 'helper (store) can forget user': 
		check reject $HELPER <<-\EOF &&
		protocol=https
		host=example.com
		username=user1
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user1
		--
		protocol=https
		host=example.com
		username=user1
		password=askpass-password
		--
		askpass: Password for 'https://user1@example.com':
		EOF
	
ok 38 - helper (store) can forget user

expecting success of 0302.39 'helper (store) remembers other user': 
		check fill $HELPER <<-\EOF
		protocol=https
		host=example.com
		username=user2
		--
		protocol=https
		host=example.com
		username=user2
		password=pass2
		EOF
	
ok 39 - helper (store) remembers other user

expecting success of 0302.40 'helper (store) can store empty username': 
		check approve $HELPER <<-\EOF &&
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
		check fill $HELPER <<-\EOF
		protocol=https
		host=sso.tld
		--
		protocol=https
		host=sso.tld
		username=
		password=
		EOF
	
ok 40 - helper (store) can store empty username

expecting success of 0302.41 'if custom xdg file exists, home and xdg files not created': 
	test_when_finished "rm -f \"$HOME/xdg/git/credentials\"" &&
	test -s "$HOME/xdg/git/credentials" &&
	test_path_is_missing "$HOME/.git-credentials" &&
	test_path_is_missing "$HOME/.config/git/credentials"

ok 41 - if custom xdg file exists, home and xdg files not created

expecting success of 0302.42 'get: use home file if both home and xdg files have matches': 
	echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
	check fill store <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=home-user
	password=home-pass
	--
	EOF

ok 42 - get: use home file if both home and xdg files have matches

expecting success of 0302.43 'get: use xdg file if home file has no matches': 
	>"$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
	check fill store <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=xdg-user
	password=xdg-pass
	--
	EOF

ok 43 - get: use xdg file if home file has no matches

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 0302.44 'get: use xdg file if home file is unreadable': 
	echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
	chmod -r "$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
	check fill store <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=xdg-user
	password=xdg-pass
	--
	EOF

ok 44 - get: use xdg file if home file is unreadable

expecting success of 0302.45 'store: if both xdg and home files exist, only store in home file': 
	>"$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	>"$HOME/.config/git/credentials" &&
	check approve store <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	echo "https://store-user:store-pass@example.com" >expected &&
	test_cmp expected "$HOME/.git-credentials" &&
	test_must_be_empty "$HOME/.config/git/credentials"

ok 45 - store: if both xdg and home files exist, only store in home file

expecting success of 0302.46 'erase: erase matching credentials from both xdg and home files': 
	echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
	mkdir -p "$HOME/.config/git" &&
	echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
	check reject store <<-\EOF &&
	protocol=https
	host=example.com
	EOF
	test_must_be_empty "$HOME/.git-credentials" &&
	test_must_be_empty "$HOME/.config/git/credentials"

ok 46 - erase: erase matching credentials from both xdg and home files

expecting success of 0302.47 'get: ignore credentials without scheme as invalid': 
		echo "$2" >"$HOME/.git-credentials" &&
		check fill store <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		--
		EOF
	
ok 47 - get: ignore credentials without scheme as invalid

expecting success of 0302.48 'get: ignore credentials without valid host/path as invalid': 
		echo "$2" >"$HOME/.git-credentials" &&
		check fill store <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		--
		EOF
	
ok 48 - get: ignore credentials without valid host/path as invalid

expecting success of 0302.49 'get: ignore credentials without username/password as invalid': 
		echo "$2" >"$HOME/.git-credentials" &&
		check fill store <<-\EOF
		protocol=https
		host=example.com
		--
		protocol=https
		host=example.com
		username=askpass-username
		password=askpass-password
		--
		askpass: Username for 'https://example.com':
		askpass: Password for 'https://askpass-username@example.com':
		--
		EOF
	
ok 49 - get: ignore credentials without username/password as invalid

expecting success of 0302.50 'get: credentials with DOS line endings are invalid': 
	printf "https://user:pass@example.com\r\n" >"$HOME/.git-credentials" &&
	check fill store <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=askpass-username
	password=askpass-password
	--
	askpass: Username for 'https://example.com':
	askpass: Password for 'https://askpass-username@example.com':
	--
	EOF

ok 50 - get: credentials with DOS line endings are invalid

expecting success of 0302.51 'get: credentials with path and DOS line endings are valid': 
	printf "https://user:pass@example.com/repo.git\r\n" >"$HOME/.git-credentials" &&
	check fill store <<-\EOF
	url=https://example.com/repo.git
	--
	protocol=https
	host=example.com
	username=user
	password=pass
	--
	EOF

ok 51 - get: credentials with path and DOS line endings are valid

expecting success of 0302.52 'get: credentials with DOS line endings are invalid if path is relevant': 
	printf "https://user:pass@example.com/repo.git\r\n" >"$HOME/.git-credentials" &&
	test_config credential.useHttpPath true &&
	check fill store <<-\EOF
	url=https://example.com/repo.git
	--
	protocol=https
	host=example.com
	path=repo.git
	username=askpass-username
	password=askpass-password
	--
	askpass: Username for 'https://example.com/repo.git':
	askpass: Password for 'https://askpass-username@example.com/repo.git':
	--
	EOF

ok 52 - get: credentials with DOS line endings are invalid if path is relevant

expecting success of 0302.53 'get: store file can contain empty/bogus lines': 
	echo "" >"$HOME/.git-credentials" &&
	q_to_tab <<-\CREDENTIAL >>"$HOME/.git-credentials" &&
	#comment
	Q
	https://user:pass@example.com
	CREDENTIAL
	check fill store <<-\EOF
	protocol=https
	host=example.com
	--
	protocol=https
	host=example.com
	username=user
	password=pass
	--
	EOF

ok 53 - get: store file can contain empty/bogus lines

# passed all 53 test(s)
1..53
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0500-progress-display.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0500-progress-display/.git/
expecting success of 0500.1 'simple progress display': 
	cat >expect <<-\EOF &&
	Working hard: 1<CR>
	Working hard: 2<CR>
	Working hard: 5<CR>
	Working hard: 5, done.
	EOF

	cat >in <<-\EOF &&
	start 0
	update
	progress 1
	update
	progress 2
	progress 3
	progress 4
	update
	progress 5
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 1 - simple progress display

expecting success of 0500.2 'progress display with total': 
	cat >expect <<-\EOF &&
	Working hard:  33% (1/3)<CR>
	Working hard:  66% (2/3)<CR>
	Working hard: 100% (3/3)<CR>
	Working hard: 100% (3/3), done.
	EOF

	cat >in <<-\EOF &&
	start 3
	progress 1
	progress 2
	progress 3
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 2 - progress display with total

expecting success of 0500.3 'progress display breaks long lines #1': 
	sed -e "s/Z$//" >expect <<\EOF &&
Working hard.......2.........3.........4.........5.........6:   0% (100/100000)<CR>
Working hard.......2.........3.........4.........5.........6:   1% (1000/100000)<CR>
Working hard.......2.........3.........4.........5.........6:                   Z
   10% (10000/100000)<CR>
  100% (100000/100000)<CR>
  100% (100000/100000), done.
EOF

	cat >in <<-\EOF &&
	start 100000 Working hard.......2.........3.........4.........5.........6
	progress 100
	progress 1000
	progress 10000
	progress 100000
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 3 - progress display breaks long lines #1

expecting success of 0500.4 'progress display breaks long lines #2': 
	# Note: we do not need that many spaces after the title to cover up
	# the last line before breaking the progress line.
	sed -e "s/Z$//" >expect <<\EOF &&
Working hard.......2.........3.........4.........5.........6:   0% (1/100000)<CR>
Working hard.......2.........3.........4.........5.........6:   0% (2/100000)<CR>
Working hard.......2.........3.........4.........5.........6:                   Z
   10% (10000/100000)<CR>
  100% (100000/100000)<CR>
  100% (100000/100000), done.
EOF

	cat >in <<-\EOF &&
	start 100000 Working hard.......2.........3.........4.........5.........6
	update
	progress 1
	update
	progress 2
	progress 10000
	progress 100000
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 4 - progress display breaks long lines #2

expecting success of 0500.5 'progress display breaks long lines #3 - even the first is too long': 
	# Note: we do not actually need any spaces at the end of the title
	# line, because there is no previous progress line to cover up.
	sed -e "s/Z$//" >expect <<\EOF &&
Working hard.......2.........3.........4.........5.........6:                   Z
   25% (25000/100000)<CR>
   50% (50000/100000)<CR>
   75% (75000/100000)<CR>
  100% (100000/100000)<CR>
  100% (100000/100000), done.
EOF

	cat >in <<-\EOF &&
	start 100000 Working hard.......2.........3.........4.........5.........6
	progress 25000
	progress 50000
	progress 75000
	progress 100000
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 5 - progress display breaks long lines #3 - even the first is too long

expecting success of 0500.6 'progress display breaks long lines #4 - title line matches terminal width': 
	cat >expect <<\EOF &&
Working hard.......2.........3.........4.........5.........6.........7.........:
   25% (25000/100000)<CR>
   50% (50000/100000)<CR>
   75% (75000/100000)<CR>
  100% (100000/100000)<CR>
  100% (100000/100000), done.
EOF

	cat >in <<-\EOF &&
	start 100000 Working hard.......2.........3.........4.........5.........6.........7.........
	progress 25000
	progress 50000
	progress 75000
	progress 100000
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 6 - progress display breaks long lines #4 - title line matches terminal width

expecting success of 0500.7 'progress shortens - crazy caller': 
	cat >expect <<-\EOF &&
	Working hard:  10% (100/1000)<CR>
	Working hard:  20% (200/1000)<CR>
	Working hard:   0% (1/1000)  <CR>
	Working hard: 100% (1000/1000)<CR>
	Working hard: 100% (1000/1000), done.
	EOF

	cat >in <<-\EOF &&
	start 1000
	progress 100
	progress 200
	progress 1
	progress 1000
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 7 - progress shortens - crazy caller

expecting success of 0500.8 'progress display with throughput': 
	cat >expect <<-\EOF &&
	Working hard: 10<CR>
	Working hard: 20, 200.00 KiB | 100.00 KiB/s<CR>
	Working hard: 30, 300.00 KiB | 100.00 KiB/s<CR>
	Working hard: 40, 400.00 KiB | 100.00 KiB/s<CR>
	Working hard: 40, 400.00 KiB | 100.00 KiB/s, done.
	EOF

	cat >in <<-\EOF &&
	start 0
	throughput 102400 1000
	update
	progress 10
	throughput 204800 2000
	update
	progress 20
	throughput 307200 3000
	update
	progress 30
	throughput 409600 4000
	update
	progress 40
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 8 - progress display with throughput

expecting success of 0500.9 'progress display with throughput and total': 
	cat >expect <<-\EOF &&
	Working hard:  25% (10/40)<CR>
	Working hard:  50% (20/40), 200.00 KiB | 100.00 KiB/s<CR>
	Working hard:  75% (30/40), 300.00 KiB | 100.00 KiB/s<CR>
	Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s<CR>
	Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s, done.
	EOF

	cat >in <<-\EOF &&
	start 40
	throughput 102400 1000
	progress 10
	throughput 204800 2000
	progress 20
	throughput 307200 3000
	progress 30
	throughput 409600 4000
	progress 40
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 9 - progress display with throughput and total

expecting success of 0500.10 'cover up after throughput shortens': 
	cat >expect <<-\EOF &&
	Working hard: 1<CR>
	Working hard: 2, 800.00 KiB | 400.00 KiB/s<CR>
	Working hard: 3, 1.17 MiB | 400.00 KiB/s  <CR>
	Working hard: 4, 1.56 MiB | 400.00 KiB/s<CR>
	Working hard: 4, 1.56 MiB | 400.00 KiB/s, done.
	EOF

	cat >in <<-\EOF &&
	start 0
	throughput 409600 1000
	update
	progress 1
	throughput 819200 2000
	update
	progress 2
	throughput 1228800 3000
	update
	progress 3
	throughput 1638400 4000
	update
	progress 4
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 10 - cover up after throughput shortens

expecting success of 0500.11 'cover up after throughput shortens a lot': 
	cat >expect <<-\EOF &&
	Working hard: 1<CR>
	Working hard: 2, 1000.00 KiB | 1000.00 KiB/s<CR>
	Working hard: 3, 3.00 MiB | 1.50 MiB/s      <CR>
	Working hard: 3, 3.00 MiB | 1024.00 KiB/s, done.
	EOF

	cat >in <<-\EOF &&
	start 0
	throughput 1 1000
	update
	progress 1
	throughput 1024000 2000
	update
	progress 2
	throughput 3145728 3000
	update
	progress 3
	stop
	EOF
	test-tool progress <in 2>stderr &&

	show_cr <stderr >out &&
	test_cmp expect out

ok 11 - cover up after throughput shortens a lot

expecting success of 0500.12 'progress generates traces': 
	cat >in <<-\EOF &&
	start 40
	throughput 102400 1000
	update
	progress 10
	throughput 204800 2000
	update
	progress 20
	throughput 307200 3000
	update
	progress 30
	throughput 409600 4000
	update
	progress 40
	stop
	EOF

	GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress \
		<in 2>stderr &&

	# t0212/parse_events.perl intentionally omits regions and data.
	test_region progress "Working hard" trace.event &&
	grep "\"key\":\"total_objects\",\"value\":\"40\"" trace.event &&
	grep "\"key\":\"total_bytes\",\"value\":\"409600\"" trace.event

{"event":"region_enter","sid":"20221228T073140.465960Z-Hc64317c2-P00006200","thread":"main","time":"2022-12-28T07:31:40.470388Z","file":"progress.c","line":268,"repo":0,"nesting":1,"category":"progress","label":"Working hard"}
{"event":"region_leave","sid":"20221228T073140.465960Z-Hc64317c2-P00006200","thread":"main","time":"2022-12-28T07:31:40.472565Z","file":"progress.c","line":346,"repo":0,"t_rel":0.002186,"nesting":1,"category":"progress","label":"Working hard"}
{"event":"data","sid":"20221228T073140.465960Z-Hc64317c2-P00006200","thread":"main","time":"2022-12-28T07:31:40.471172Z","file":"progress.c","line":339,"repo":0,"t_abs":0.009205,"t_rel":0.000791,"nesting":2,"category":"progress","key":"total_objects","value":"40"}
{"event":"data","sid":"20221228T073140.465960Z-Hc64317c2-P00006200","thread":"main","time":"2022-12-28T07:31:40.472320Z","file":"progress.c","line":343,"repo":0,"t_abs":0.010342,"t_rel":0.001928,"nesting":2,"category":"progress","key":"total_bytes","value":"409600"}
ok 12 - progress generates traces

expecting success of 0500.13 'progress generates traces: stop / start': 
	cat >in <<-\EOF &&
	start 0
	stop
	EOF

	GIT_TRACE2_EVENT="$PWD/trace-startstop.event" test-tool progress \
		<in 2>stderr &&
	test_region progress "Working hard" trace-startstop.event

{"event":"region_enter","sid":"20221228T073140.550349Z-Hc64317c2-P0000621c","thread":"main","time":"2022-12-28T07:31:40.555340Z","file":"progress.c","line":268,"repo":0,"nesting":1,"category":"progress","label":"Working hard"}
{"event":"region_leave","sid":"20221228T073140.550349Z-Hc64317c2-P0000621c","thread":"main","time":"2022-12-28T07:31:40.555810Z","file":"progress.c","line":346,"repo":0,"t_rel":0.000474,"nesting":1,"category":"progress","label":"Working hard"}
ok 13 - progress generates traces: stop / start

expecting success of 0500.14 'progress generates traces: start without stop': 
	cat >in <<-\EOF &&
	start 0
	EOF

	GIT_TRACE2_EVENT="$PWD/trace-start.event" \
	LSAN_OPTIONS=detect_leaks=0 \
	test-tool progress \
		<in 2>stderr &&
	grep region_enter.*progress trace-start.event &&
	! grep region_leave.*progress trace-start.event

{"event":"region_enter","sid":"20221228T073140.607905Z-Hc64317c2-P00006233","thread":"main","time":"2022-12-28T07:31:40.613790Z","file":"progress.c","line":268,"repo":0,"nesting":1,"category":"progress","label":"Working hard"}
ok 14 - progress generates traces: start without stop

expecting success of 0500.15 'progress generates traces: stop without start': 
	cat >in <<-\EOF &&
	stop
	EOF

	GIT_TRACE2_EVENT="$PWD/trace-stop.event" test-tool progress \
		<in 2>stderr &&
	! grep region_enter.*progress trace-stop.event &&
	! grep region_leave.*progress trace-stop.event

ok 15 - progress generates traces: stop without start

expecting success of 0500.16 'progress generates traces: start with active progress bar (no stops)': 
	cat >in <<-\EOF &&
	start 0 One
	start 0 Two
	EOF

	GIT_TRACE2_EVENT="$PWD/trace-2start.event" \
	LSAN_OPTIONS=detect_leaks=0 \
	test-tool progress \
		<in 2>stderr &&
	grep region_enter.*progress.*One trace-2start.event &&
	grep region_enter.*progress.*Two trace-2start.event &&
	! grep region_leave trace-2start.event

{"event":"region_enter","sid":"20221228T073140.733155Z-Hc64317c2-P0000625e","thread":"main","time":"2022-12-28T07:31:40.738797Z","file":"progress.c","line":268,"repo":0,"nesting":1,"category":"progress","label":"One"}
{"event":"region_enter","sid":"20221228T073140.733155Z-Hc64317c2-P0000625e","thread":"main","time":"2022-12-28T07:31:40.738973Z","file":"progress.c","line":268,"repo":0,"nesting":2,"category":"progress","label":"Two"}
ok 16 - progress generates traces: start with active progress bar (no stops)

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1000-read-tree-m-3way.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1000-read-tree-m-3way/.git/
expecting success of 1000.1 'adding test file NN and Z/NN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 1 - adding test file NN and Z/NN

expecting success of 1000.2 'adding test file ND and Z/ND': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 2 - adding test file ND and Z/ND

expecting success of 1000.3 'adding test file NM and Z/NM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 3 - adding test file NM and Z/NM

expecting success of 1000.4 'adding test file DN and Z/DN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 4 - adding test file DN and Z/DN

expecting success of 1000.5 'adding test file DD and Z/DD': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 5 - adding test file DD and Z/DD

expecting success of 1000.6 'adding test file DM and Z/DM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 6 - adding test file DM and Z/DM

expecting success of 1000.7 'adding test file MN and Z/MN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 7 - adding test file MN and Z/MN

expecting success of 1000.8 'adding test file MD and Z/MD': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 8 - adding test file MD and Z/MD

expecting success of 1000.9 'adding test file MM and Z/MM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 9 - adding test file MM and Z/MM

expecting success of 1000.10 'adding test file SS': 
	git update-index --add SS

ok 10 - adding test file SS

expecting success of 1000.11 'adding test file TT': 
	git update-index --add TT

ok 11 - adding test file TT

expecting success of 1000.12 'prepare initial tree': 
	tree_O=$(git write-tree)

ok 12 - prepare initial tree

expecting success of 1000.13 'change in branch A (removal)': 
	git update-index --remove $to_remove

ok 13 - change in branch A (removal)

expecting success of 1000.14 'change in branch A (modification)': 
		git update-index $p
	
ok 14 - change in branch A (modification)

expecting success of 1000.15 'change in branch A (modification)': 
		git update-index $p
	
ok 15 - change in branch A (modification)

expecting success of 1000.16 'change in branch A (modification)': 
		git update-index $p
	
ok 16 - change in branch A (modification)

expecting success of 1000.17 'change in branch A (modification)': 
		git update-index $p
	
ok 17 - change in branch A (modification)

expecting success of 1000.18 'change in branch A (modification)': 
		git update-index $p
	
ok 18 - change in branch A (modification)

expecting success of 1000.19 'change in branch A (modification)': 
		git update-index $p
	
ok 19 - change in branch A (modification)

expecting success of 1000.20 'change in branch A (addition)': 
		git update-index --add $p
	
ok 20 - change in branch A (addition)

expecting success of 1000.21 'change in branch A (addition)': 
		git update-index --add $p
	
ok 21 - change in branch A (addition)

expecting success of 1000.22 'change in branch A (addition)': 
		git update-index --add $p
	
ok 22 - change in branch A (addition)

expecting success of 1000.23 'change in branch A (addition)': 
		git update-index --add $p
	
ok 23 - change in branch A (addition)

expecting success of 1000.24 'change in branch A (addition)': 
	git update-index --add LL &&
	git update-index SS

ok 24 - change in branch A (addition)

expecting success of 1000.25 'change in branch A (edit)': 
	git update-index TT

ok 25 - change in branch A (edit)

expecting success of 1000.26 'change in branch A (change file to directory)': 
	git update-index --add DF/DF

ok 26 - change in branch A (change file to directory)

expecting success of 1000.27 'recording branch A tree': 
	tree_A=$(git write-tree)

ok 27 - recording branch A tree

expecting success of 1000.28 'reading original tree and checking out': 
	git read-tree $tree_O &&
	git checkout-index -a

ok 28 - reading original tree and checking out

expecting success of 1000.29 'change in branch B (removal)': 
	git update-index --remove $to_remove

ok 29 - change in branch B (removal)

expecting success of 1000.30 'change in branch B (modification)': 
		git update-index $p
	
ok 30 - change in branch B (modification)

expecting success of 1000.31 'change in branch B (modification)': 
		git update-index $p
	
ok 31 - change in branch B (modification)

expecting success of 1000.32 'change in branch B (modification)': 
		git update-index $p
	
ok 32 - change in branch B (modification)

expecting success of 1000.33 'change in branch B (modification)': 
		git update-index $p
	
ok 33 - change in branch B (modification)

expecting success of 1000.34 'change in branch B (modification)': 
		git update-index $p
	
ok 34 - change in branch B (modification)

expecting success of 1000.35 'change in branch B (modification)': 
		git update-index $p
	
ok 35 - change in branch B (modification)

expecting success of 1000.36 'change in branch B (addition)': 
		git update-index --add $p
	
ok 36 - change in branch B (addition)

expecting success of 1000.37 'change in branch B (addition)': 
		git update-index --add $p
	
ok 37 - change in branch B (addition)

expecting success of 1000.38 'change in branch B (addition)': 
		git update-index --add $p
	
ok 38 - change in branch B (addition)

expecting success of 1000.39 'change in branch B (addition)': 
		git update-index --add $p
	
ok 39 - change in branch B (addition)

expecting success of 1000.40 'change in branch B (addition and modification)': 
	git update-index --add LL &&
	git update-index SS

ok 40 - change in branch B (addition and modification)

expecting success of 1000.41 'change in branch B (modification)': 
	git update-index TT

ok 41 - change in branch B (modification)

expecting success of 1000.42 'change in branch B (addition of a file to conflict with directory)': 
	git update-index --add DF

ok 42 - change in branch B (addition of a file to conflict with directory)

expecting success of 1000.43 'recording branch B tree': 
	tree_B=$(git write-tree)

ok 43 - recording branch B tree

expecting success of 1000.44 'keep contents of 3 trees for easy access': 
	rm -f .git/index &&
	git read-tree $tree_O &&
	mkdir .orig-O &&
	git checkout-index --prefix=.orig-O/ -f -q -a &&
	rm -f .git/index &&
	git read-tree $tree_A &&
	mkdir .orig-A &&
	git checkout-index --prefix=.orig-A/ -f -q -a &&
	rm -f .git/index &&
	git read-tree $tree_B &&
	mkdir .orig-B &&
	git checkout-index --prefix=.orig-B/ -f -q -a

ok 44 - keep contents of 3 trees for easy access

expecting success of 1000.45 '3-way merge with git read-tree -m, empty cache': 
	rm -fr [NDMALTS][NDMALTSF] Z &&
	rm .git/index &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 45 - 3-way merge with git read-tree -m, empty cache

expecting success of 1000.46 '3-way merge with git read-tree -m, match H': 
	rm -fr [NDMALTS][NDMALTSF] Z &&
	rm .git/index &&
	read_tree_must_succeed $tree_A &&
	git checkout-index -f -u -a &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 46 - 3-way merge with git read-tree -m, match H

expecting success of 1000.47 '1 - must not have an entry not in A.': 
	rm -f .git/index XX &&
	echo XX >XX &&
	git update-index --add XX &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'XX' would be overwritten by merge. Cannot merge.
error: Entry 'XX' would be overwritten by merge. Cannot merge.
ok 47 - 1 - must not have an entry not in A.

expecting success of 1000.48 '2 - must match B in !O && !A && B case.': 
	rm -f .git/index NA &&
	cp .orig-B/NA NA &&
	git update-index --add NA &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B

ok 48 - 2 - must match B in !O && !A && B case.

expecting success of 1000.49 '2 - matching B alone is OK in !O && !A && B case.': 
	rm -f .git/index NA &&
	cp .orig-B/NA NA &&
	git update-index --add NA &&
	echo extra >>NA &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B

ok 49 - 2 - matching B alone is OK in !O && !A && B case.

expecting success of 1000.50 '3 - must match A in !O && A && !B case.': 
	rm -f .git/index AN &&
	cp .orig-A/AN AN &&
	git update-index --add AN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 50 - 3 - must match A in !O && A && !B case.

expecting success of 1000.51 '3 - matching A alone is OK in !O && A && !B case.': 
	rm -f .git/index AN &&
	cp .orig-A/AN AN &&
	git update-index --add AN &&
	echo extra >>AN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B

ok 51 - 3 - matching A alone is OK in !O && A && !B case.

expecting success of 1000.52 '3 (fail) - must match A in !O && A && !B case.': 
	rm -f .git/index AN &&
	cp .orig-A/AN AN &&
	echo extra >>AN &&
	git update-index --add AN &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'AN' would be overwritten by merge. Cannot merge.
error: Entry 'AN' would be overwritten by merge. Cannot merge.
ok 52 - 3 (fail) - must match A in !O && A && !B case.

expecting success of 1000.53 '4 - must match and be up-to-date in !O && A && B && A!=B case.': 
	rm -f .git/index AA &&
	cp .orig-A/AA AA &&
	git update-index --add AA &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 53 - 4 - must match and be up-to-date in !O && A && B && A!=B case.

expecting success of 1000.54 '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.': 
	rm -f .git/index AA &&
	cp .orig-A/AA AA &&
	git update-index --add AA &&
	echo extra >>AA &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'AA' not uptodate. Cannot merge.
error: Entry 'AA' not uptodate. Cannot merge.
ok 54 - 4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.

expecting success of 1000.55 '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.': 
	rm -f .git/index AA &&
	cp .orig-A/AA AA &&
	echo extra >>AA &&
	git update-index --add AA &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'AA' would be overwritten by merge. Cannot merge.
error: Entry 'AA' would be overwritten by merge. Cannot merge.
ok 55 - 4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.

expecting success of 1000.56 '5 - must match in !O && A && B && A==B case.': 
	rm -f .git/index LL &&
	cp .orig-A/LL LL &&
	git update-index --add LL &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 56 - 5 - must match in !O && A && B && A==B case.

expecting success of 1000.57 '5 - must match in !O && A && B && A==B case.': 
	rm -f .git/index LL &&
	cp .orig-A/LL LL &&
	git update-index --add LL &&
	echo extra >>LL &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 57 - 5 - must match in !O && A && B && A==B case.

expecting success of 1000.58 '5 (fail) - must match A in !O && A && B && A==B case.': 
	rm -f .git/index LL &&
	cp .orig-A/LL LL &&
	echo extra >>LL &&
	git update-index --add LL &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'LL' would be overwritten by merge. Cannot merge.
error: Entry 'LL' would be overwritten by merge. Cannot merge.
ok 58 - 5 (fail) - must match A in !O && A && B && A==B case.

expecting success of 1000.59 '6 - must not exist in O && !A && !B case': 
	rm -f .git/index DD &&
	echo DD >DD &&
	git update-index --add DD &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'DD' would be overwritten by merge. Cannot merge.
error: Entry 'DD' would be overwritten by merge. Cannot merge.
ok 59 - 6 - must not exist in O && !A && !B case

expecting success of 1000.60 '7 - must not exist in O && !A && B && O!=B case': 
	rm -f .git/index DM &&
	cp .orig-B/DM DM &&
	git update-index --add DM &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'DM' would be overwritten by merge. Cannot merge.
error: Entry 'DM' would be overwritten by merge. Cannot merge.
ok 60 - 7 - must not exist in O && !A && B && O!=B case

expecting success of 1000.61 '8 - must not exist in O && !A && B && O==B case': 
	rm -f .git/index DN &&
	cp .orig-B/DN DN &&
	git update-index --add DN &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'DN' would be overwritten by merge. Cannot merge.
error: Entry 'DN' would be overwritten by merge. Cannot merge.
ok 61 - 8 - must not exist in O && !A && B && O==B case

expecting success of 1000.62 '9 - must match and be up-to-date in O && A && !B && O!=A case': 
	rm -f .git/index MD &&
	cp .orig-A/MD MD &&
	git update-index --add MD &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 62 - 9 - must match and be up-to-date in O && A && !B && O!=A case

expecting success of 1000.63 '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case': 
	rm -f .git/index MD &&
	cp .orig-A/MD MD &&
	git update-index --add MD &&
	echo extra >>MD &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'MD' not uptodate. Cannot merge.
error: Entry 'MD' not uptodate. Cannot merge.
ok 63 - 9 (fail) - must match and be up-to-date in O && A && !B && O!=A case

expecting success of 1000.64 '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case': 
	rm -f .git/index MD &&
	cp .orig-A/MD MD &&
	echo extra >>MD &&
	git update-index --add MD &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'MD' would be overwritten by merge. Cannot merge.
error: Entry 'MD' would be overwritten by merge. Cannot merge.
ok 64 - 9 (fail) - must match and be up-to-date in O && A && !B && O!=A case

expecting success of 1000.65 '10 - must match and be up-to-date in O && A && !B && O==A case': 
	rm -f .git/index ND &&
	cp .orig-A/ND ND &&
	git update-index --add ND &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 65 - 10 - must match and be up-to-date in O && A && !B && O==A case

expecting success of 1000.66 '10 (fail) - must match and be up-to-date in O && A && !B && O==A case': 
	rm -f .git/index ND &&
	cp .orig-A/ND ND &&
	git update-index --add ND &&
	echo extra >>ND &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'ND' not uptodate. Cannot merge.
error: Entry 'ND' not uptodate. Cannot merge.
ok 66 - 10 (fail) - must match and be up-to-date in O && A && !B && O==A case

expecting success of 1000.67 '10 (fail) - must match and be up-to-date in O && A && !B && O==A case': 
	rm -f .git/index ND &&
	cp .orig-A/ND ND &&
	echo extra >>ND &&
	git update-index --add ND &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'ND' would be overwritten by merge. Cannot merge.
error: Entry 'ND' would be overwritten by merge. Cannot merge.
ok 67 - 10 (fail) - must match and be up-to-date in O && A && !B && O==A case

expecting success of 1000.68 '11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case': 
	rm -f .git/index MM &&
	cp .orig-A/MM MM &&
	git update-index --add MM &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 68 - 11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case

expecting success of 1000.69 '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case': 
	rm -f .git/index MM &&
	cp .orig-A/MM MM &&
	git update-index --add MM &&
	echo extra >>MM &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'MM' not uptodate. Cannot merge.
error: Entry 'MM' not uptodate. Cannot merge.
ok 69 - 11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case

expecting success of 1000.70 '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case': 
	rm -f .git/index MM &&
	cp .orig-A/MM MM &&
	echo extra >>MM &&
	git update-index --add MM &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'MM' would be overwritten by merge. Cannot merge.
error: Entry 'MM' would be overwritten by merge. Cannot merge.
ok 70 - 11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case

expecting success of 1000.71 '12 - must match A in O && A && B && O!=A && A==B case': 
	rm -f .git/index SS &&
	cp .orig-A/SS SS &&
	git update-index --add SS &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 71 - 12 - must match A in O && A && B && O!=A && A==B case

expecting success of 1000.72 '12 - must match A in O && A && B && O!=A && A==B case': 
	rm -f .git/index SS &&
	cp .orig-A/SS SS &&
	git update-index --add SS &&
	echo extra >>SS &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 72 - 12 - must match A in O && A && B && O!=A && A==B case

expecting success of 1000.73 '12 (fail) - must match A in O && A && B && O!=A && A==B case': 
	rm -f .git/index SS &&
	cp .orig-A/SS SS &&
	echo extra >>SS &&
	git update-index --add SS &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'SS' would be overwritten by merge. Cannot merge.
error: Entry 'SS' would be overwritten by merge. Cannot merge.
ok 73 - 12 (fail) - must match A in O && A && B && O!=A && A==B case

expecting success of 1000.74 '13 - must match A in O && A && B && O!=A && O==B case': 
	rm -f .git/index MN &&
	cp .orig-A/MN MN &&
	git update-index --add MN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 74 - 13 - must match A in O && A && B && O!=A && O==B case

expecting success of 1000.75 '13 - must match A in O && A && B && O!=A && O==B case': 
	rm -f .git/index MN &&
	cp .orig-A/MN MN &&
	git update-index --add MN &&
	echo extra >>MN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 75 - 13 - must match A in O && A && B && O!=A && O==B case

expecting success of 1000.76 '14 - must match and be up-to-date in O && A && B && O==A && O!=B case': 
	rm -f .git/index NM &&
	cp .orig-A/NM NM &&
	git update-index --add NM &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 76 - 14 - must match and be up-to-date in O && A && B && O==A && O!=B case

expecting success of 1000.77 '14 - may match B in O && A && B && O==A && O!=B case': 
	rm -f .git/index NM &&
	cp .orig-B/NM NM &&
	git update-index --add NM &&
	echo extra >>NM &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 77 - 14 - may match B in O && A && B && O==A && O!=B case

expecting success of 1000.78 '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case': 
	rm -f .git/index NM &&
	cp .orig-A/NM NM &&
	git update-index --add NM &&
	echo extra >>NM &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'NM' not uptodate. Cannot merge.
error: Entry 'NM' not uptodate. Cannot merge.
ok 78 - 14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case

expecting success of 1000.79 '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case': 
	rm -f .git/index NM &&
	cp .orig-A/NM NM &&
	echo extra >>NM &&
	git update-index --add NM &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'NM' would be overwritten by merge. Cannot merge.
error: Entry 'NM' would be overwritten by merge. Cannot merge.
ok 79 - 14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case

expecting success of 1000.80 '15 - must match A in O && A && B && O==A && O==B case': 
	rm -f .git/index NN &&
	cp .orig-A/NN NN &&
	git update-index --add NN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 80 - 15 - must match A in O && A && B && O==A && O==B case

expecting success of 1000.81 '15 - must match A in O && A && B && O==A && O==B case': 
	rm -f .git/index NN &&
	cp .orig-A/NN NN &&
	git update-index --add NN &&
	echo extra >>NN &&
	read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
	check_result

ok 81 - 15 - must match A in O && A && B && O==A && O==B case

expecting success of 1000.82 '15 (fail) - must match A in O && A && B && O==A && O==B case': 
	rm -f .git/index NN &&
	cp .orig-A/NN NN &&
	echo extra >>NN &&
	git update-index --add NN &&
	read_tree_must_fail -m $tree_O $tree_A $tree_B

error: Entry 'NN' would be overwritten by merge. Cannot merge.
error: Entry 'NN' would be overwritten by merge. Cannot merge.
ok 82 - 15 (fail) - must match A in O && A && B && O==A && O==B case

expecting success of 1000.83 '16 - A matches in one and B matches in another.': 
	rm -f .git/index F16 &&
	echo F16 >F16 &&
	git update-index --add F16 &&
	tree0=$(git write-tree) &&
	echo E16 >F16 &&
	git update-index F16 &&
	tree1=$(git write-tree) &&
	read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&
	git ls-files --stage

100644 ecbec6db011caa3ae26739812f092f76875fe6b6 2	F16
100644 bcf4afda2c30299bf6538240d40bcb8fb3857691 3	F16
ok 83 - 16 - A matches in one and B matches in another.

# passed all 83 test(s)
1..83
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0410-partial-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/.git/
expecting success of 0410.1 'extensions.partialclone without filter': 
	test_create_repo server &&
	git clone --filter="blob:none" "file://$(pwd)/server" client &&
	git -C client config --unset remote.origin.partialclonefilter &&
	git -C client fetch origin

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
Cloning into 'client'...
warning: You appear to have cloned an empty repository.
ok 1 - extensions.partialclone without filter

expecting success of 0410.2 'convert shallow clone to partial clone': 
	rm -fr server client &&
	test_create_repo server &&
	test_commit -C server my_commit 1 &&
	test_commit -C server my_commit2 1 &&
	git clone --depth=1 "file://$(pwd)/server" client &&
	git -C client fetch --unshallow --filter="blob:none" &&
	test_cmp_config -C client true remote.origin.promisor &&
	test_cmp_config -C client blob:none remote.origin.partialclonefilter &&
	test_cmp_config -C client 1 core.repositoryformatversion

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master (root-commit) 282d88a] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
[master b56a127] my_commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'client'...
warning: filtering not recognized by server, ignoring
warning: filtering not recognized by server, ignoring
From file:///<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server
 * [new tag]         my_commit  -> my_commit
ok 2 - convert shallow clone to partial clone

checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
expecting success of 0410.3 'convert to partial clone with noop extension': 
	rm -fr server client &&
	test_create_repo server &&
	test_commit -C server my_commit 1 &&
	test_commit -C server my_commit2 1 &&
	git clone --depth=1 "file://$(pwd)/server" client &&
	test_cmp_config -C client 0 core.repositoryformatversion &&
	git -C client config extensions.noop true &&
	git -C client fetch --unshallow --filter="blob:none"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master (root-commit) 593c6ee] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
[master 639877a] my_commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'client'...
warning: filtering not recognized by server, ignoring
warning: filtering not recognized by server, ignoring
From file:///<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server
 * [new tag]         my_commit  -> my_commit
ok 3 - convert to partial clone with noop extension

expecting success of 0410.4 'converting to partial clone fails with unrecognized extension': 
	rm -fr server client &&
	test_create_repo server &&
	test_commit -C server my_commit 1 &&
	test_commit -C server my_commit2 1 &&
	git clone --depth=1 "file://$(pwd)/server" client &&
	test_cmp_config -C client 0 core.repositoryformatversion &&
	git -C client config extensions.nonsense true &&
	test_must_fail git -C client fetch --unshallow --filter="blob:none"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master (root-commit) 6114aba] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
[master 743b332] my_commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'client'...
error: cannot upgrade repository format: unknown extension nonsense
fatal: unable to upgrade repository format to support partial clone
ok 4 - converting to partial clone fails with unrecognized extension

expecting success of 0410.5 'missing reflog object, but promised by a commit, passes fsck': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	A=$(git -C repo commit-tree -m a HEAD^{tree}) &&
	C=$(git -C repo commit-tree -m c -p $A HEAD^{tree}) &&

	# Reference $A only from reflog, and delete it
	git -C repo branch my_branch "$A" &&
	git -C repo branch -f my_branch my_commit &&
	delete_object repo "$A" &&

	# State that we got $C, which refers to $A, from promisor
	printf "$C\n" | pack_as_from_promisor &&

	# Normally, it fails
	test_must_fail git -C repo fsck &&

	# But with the extension, it succeeds
	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 645f0a1] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
b3b4322753142630efe6237cb5ef6cdc9d672d66
error: refs/heads/my_branch: invalid reflog entry 7fcb8777d818dca542e59d6eec4b069c2142b35e
error: refs/heads/my_branch: invalid reflog entry 7fcb8777d818dca542e59d6eec4b069c2142b35e
dangling commit fe174b3c23f972b6c7ba26ed4c372380fc6d8deb
dangling commit fe174b3c23f972b6c7ba26ed4c372380fc6d8deb
ok 5 - missing reflog object, but promised by a commit, passes fsck

expecting success of 0410.6 'missing reflog object, but promised by a tag, passes fsck': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	A=$(git -C repo commit-tree -m a HEAD^{tree}) &&
	git -C repo tag -a -m d my_tag_name $A &&
	T=$(git -C repo rev-parse my_tag_name) &&
	git -C repo tag -d my_tag_name &&

	# Reference $A only from reflog, and delete it
	git -C repo branch my_branch "$A" &&
	git -C repo branch -f my_branch my_commit &&
	delete_object repo "$A" &&

	# State that we got $T, which refers to $A, from promisor
	printf "$T\n" | pack_as_from_promisor &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) da2e7de] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
Deleted tag 'my_tag_name' (was 34fac6a)
c5475378ca2e78834b400c9d937a6a162caee84e
dangling tag 34fac6a88cc545a8f8a17584908f0390550dbdb0
ok 6 - missing reflog object, but promised by a tag, passes fsck

expecting success of 0410.7 'missing reflog object alone fails fsck, even with extension set': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	A=$(git -C repo commit-tree -m a HEAD^{tree}) &&
	B=$(git -C repo commit-tree -m b HEAD^{tree}) &&

	# Reference $A only from reflog, and delete it
	git -C repo branch my_branch "$A" &&
	git -C repo branch -f my_branch my_commit &&
	delete_object repo "$A" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	test_must_fail git -C repo fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) b45c342] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
error: refs/heads/my_branch: invalid reflog entry f1a8c2dbb0668e21bdaf6b739b0910c11c02cd4e
error: refs/heads/my_branch: invalid reflog entry f1a8c2dbb0668e21bdaf6b739b0910c11c02cd4e
dangling commit 2a85d5935b4dc1c093280877f8358ac27008115b
ok 7 - missing reflog object alone fails fsck, even with extension set

expecting success of 0410.8 'missing ref object, but promised, passes fsck': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	A=$(git -C repo commit-tree -m a HEAD^{tree}) &&

	# Reference $A only from ref
	git -C repo branch my_branch "$A" &&
	promise_and_delete "$A" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 64a3647] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
07990eb35a674c00ed95208ed2ad46a96b92b75e
dangling tag 549fe140e3a312e3c41eddbd806b0489252b5987
ok 8 - missing ref object, but promised, passes fsck

expecting success of 0410.9 'missing object, but promised, passes fsck': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo 1 &&
	test_commit -C repo 2 &&
	test_commit -C repo 3 &&
	git -C repo tag -a annotated_tag -m "annotated tag" &&

	C=$(git -C repo rev-parse 1) &&
	T=$(git -C repo rev-parse 2^{tree}) &&
	B=$(git hash-object repo/3.t) &&
	AT=$(git -C repo rev-parse annotated_tag) &&

	promise_and_delete "$C" &&
	promise_and_delete "$T" &&
	promise_and_delete "$B" &&
	promise_and_delete "$AT" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 105d4e4] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 6e1a67a] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master b8c6625] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
2485aac98d1c3225c271e3af5e766f4367310b3a
777e8eb59ffb5b5722c8cd4f7d423cf3cd5ba1c8
31d0fc16a061bb21781c4c8359676a24cc34001e
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f my_annotated_tag f68fb4566316e272a308917d081de51a218993a2^{}
hint: Disable this message with "git config advice.nestedTag false"
4a50c8bde259d424ffcf127903fe9d554cac6b7d
dangling tag 2683b267061c97bcc34e7140acb2a6275e5b30d1
dangling tag 34bbb6f6e07e9726facfc8fa6af2c0b91c7d5958
dangling tag 5cbb9b35329a5b70b793ba9577acb379e91b1e55
dangling tree dcf3d5d7c6d10fb961287ca9bc59a5bf8a4b2afc
dangling tag 9fcc2c2e5cb1b8f6435735dde34bf7cb9effe69d
ok 9 - missing object, but promised, passes fsck

expecting success of 0410.10 'missing CLI object, but promised, passes fsck': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	A=$(git -C repo commit-tree -m a HEAD^{tree}) &&
	promise_and_delete "$A" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo fsck "$A"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 1a8f860] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
492fcaedcae5f38e5d43847baf9ad7f322583322
dangling tag 2b9e4c52199b033af01a67d4508ef14ad7cf61f0
dangling commit 1a8f8606ad20bf122ef5b7c5a44b64bc32833be8
ok 10 - missing CLI object, but promised, passes fsck

expecting success of 0410.11 'fetching of missing objects': 
	rm -rf repo err &&
	test_create_repo server &&
	test_commit -C server foo &&
	git -C server repack -a -d --write-bitmap-index &&

	git clone "file://$(pwd)/server" repo &&
	HASH=$(git -C repo rev-parse foo) &&
	rm -rf repo/.git/objects/* &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "origin" &&
	git -C repo cat-file -p "$HASH" 2>err &&

	# Ensure that no spurious FETCH_HEAD messages are written
	! grep FETCH_HEAD err &&

	# Ensure that the .promisor file is written, and check that its
	# associated packfile contains the object
	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
	test_line_count = 1 promisorlist &&
	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
	git verify-pack --verbose "$IDX" >out &&
	grep "$HASH" out

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master b704ccc] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'repo'...
tree e36fba6ed8261dd9be2ee0232186fc8ed7b73cdf
parent 743b332bcde964fd77f8834b760ab10e4e6a878e
author A U Thor <author@example.com> 1112912833 -0700
committer C O Mitter <committer@example.com> 1112912833 -0700

foo
b704ccc22db3053176e94aafda84b62a9f092a25 commit 215 155 12
ok 11 - fetching of missing objects

expecting success of 0410.12 'fetching of a promised object that promisor remote no longer has': 
	rm -f err &&
	test_create_repo unreliable-server &&
	git -C unreliable-server config uploadpack.allowanysha1inwant 1 &&
	git -C unreliable-server config uploadpack.allowfilter 1 &&
	test_commit -C unreliable-server foo &&

	git clone --filter=blob:none --no-checkout "file://$(pwd)/unreliable-server" unreliable-client &&

	rm -rf unreliable-server/.git/objects/* &&
	test_must_fail git -C unreliable-client checkout HEAD 2>err &&
	grep "could not fetch.*from promisor remote" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/unreliable-server/.git/
[master (root-commit) 179b371] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'unreliable-client'...
fatal: could not fetch 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 from promisor remote
ok 12 - fetching of a promised object that promisor remote no longer has

expecting success of 0410.13 'fetching of missing objects works with ref-in-want enabled': 
	# ref-in-want requires protocol version 2
	git -C server config protocol.version 2 &&
	git -C server config uploadpack.allowrefinwant 1 &&
	git -C repo config protocol.version 2 &&

	rm -rf repo/.git/objects/* &&
	rm -f trace &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C repo cat-file -p "$HASH" &&
	grep "fetch< fetch=.*ref-in-want" trace

warning: filtering not recognized by server, ignoring
tree e36fba6ed8261dd9be2ee0232186fc8ed7b73cdf
parent 743b332bcde964fd77f8834b760ab10e4e6a878e
author A U Thor <author@example.com> 1112912833 -0700
committer C O Mitter <committer@example.com> 1112912833 -0700

foo
packet:        fetch< fetch=shallow wait-for-done ref-in-want
ok 13 - fetching of missing objects works with ref-in-want enabled

expecting success of 0410.14 'fetching of missing objects from another promisor remote': 
	git clone "file://$(pwd)/server" server2 &&
	test_commit -C server2 bar &&
	git -C server2 repack -a -d --write-bitmap-index &&
	HASH2=$(git -C server2 rev-parse bar) &&

	git -C repo remote add server2 "file://$(pwd)/server2" &&
	git -C repo config remote.server2.promisor true &&
	git -C repo cat-file -p "$HASH2" &&

	git -C repo fetch server2 &&
	rm -rf repo/.git/objects/* &&
	git -C repo cat-file -p "$HASH2" &&

	# Ensure that the .promisor file is written, and check that its
	# associated packfile contains the object
	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
	test_line_count = 1 promisorlist &&
	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
	git verify-pack --verbose "$IDX" >out &&
	grep "$HASH2" out

Cloning into 'server2'...
[master e31237c] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
warning: filtering not recognized by server, ignoring
tree 71baac54afb804ff6a25aae0730b2466d066a704
parent b704ccc22db3053176e94aafda84b62a9f092a25
author A U Thor <author@example.com> 1112912953 -0700
committer C O Mitter <committer@example.com> 1112912953 -0700

bar
From file:///<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server2
 * [new branch]      master     -> server2/master
 * [new tag]         bar        -> bar
warning: filtering not recognized by server, ignoring
tree 71baac54afb804ff6a25aae0730b2466d066a704
parent b704ccc22db3053176e94aafda84b62a9f092a25
author A U Thor <author@example.com> 1112912953 -0700
committer C O Mitter <committer@example.com> 1112912953 -0700

bar
e31237c4c7797ac5ccee8f6eca69c5a52b78be41 commit 215 154 12
ok 14 - fetching of missing objects from another promisor remote

expecting success of 0410.15 'fetching of missing objects configures a promisor remote': 
	git clone "file://$(pwd)/server" server3 &&
	test_commit -C server3 baz &&
	git -C server3 repack -a -d --write-bitmap-index &&
	HASH3=$(git -C server3 rev-parse baz) &&
	git -C server3 config uploadpack.allowfilter 1 &&

	rm repo/.git/objects/pack/pack-*.promisor &&

	git -C repo remote add server3 "file://$(pwd)/server3" &&
	git -C repo fetch --filter="blob:none" server3 $HASH3 &&

	test_cmp_config -C repo true remote.server3.promisor &&

	# Ensure that the .promisor file is written, and check that its
	# associated packfile contains the object
	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
	test_line_count = 1 promisorlist &&
	IDX=$(sed "s/promisor$/idx/" promisorlist) &&
	git verify-pack --verbose "$IDX" >out &&
	grep "$HASH3" out

Cloning into 'server3'...
[master 564c63c] baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server3
 * branch            564c63c3fd2eb60f09ddde009d238b8ea1732504 -> FETCH_HEAD
564c63c3fd2eb60f09ddde009d238b8ea1732504 commit 215 156 12
ok 15 - fetching of missing objects configures a promisor remote

expecting success of 0410.16 'fetching of missing blobs works': 
	rm -rf server server2 repo &&
	rm -rf server server3 repo &&
	test_create_repo server &&
	test_commit -C server foo &&
	git -C server repack -a -d --write-bitmap-index &&

	git clone "file://$(pwd)/server" repo &&
	git hash-object repo/foo.t >blobhash &&
	rm -rf repo/.git/objects/* &&

	git -C server config uploadpack.allowanysha1inwant 1 &&
	git -C server config uploadpack.allowfilter 1 &&
	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "origin" &&

	git -C repo cat-file -p $(cat blobhash)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master (root-commit) bbef54c] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'repo'...
foo
ok 16 - fetching of missing blobs works

expecting success of 0410.17 'fetching of missing trees does not fetch blobs': 
	rm -rf server repo &&
	test_create_repo server &&
	test_commit -C server foo &&
	git -C server repack -a -d --write-bitmap-index &&

	git clone "file://$(pwd)/server" repo &&
	git -C repo rev-parse foo^{tree} >treehash &&
	git hash-object repo/foo.t >blobhash &&
	rm -rf repo/.git/objects/* &&

	git -C server config uploadpack.allowanysha1inwant 1 &&
	git -C server config uploadpack.allowfilter 1 &&
	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "origin" &&
	git -C repo cat-file -p $(cat treehash) &&

	# Ensure that the tree, but not the blob, is fetched
	git -C repo rev-list --objects --missing=print $(cat treehash) >objects &&
	grep "^$(cat treehash)" objects &&
	grep "^[?]$(cat blobhash)" objects

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/server/.git/
[master (root-commit) 6aab15f] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'repo'...
100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99	foo.t
64fd3796c57084e7b8cbae358ce37970b8e954f6 
?257cc5642cb1a054f08cc83f2d943e56fd3ebe99
ok 17 - fetching of missing trees does not fetch blobs

expecting success of 0410.18 'rev-list stops traversal at missing and promised commit': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo foo &&
	test_commit -C repo bar &&

	FOO=$(git -C repo rev-parse foo) &&
	promise_and_delete "$FOO" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo rev-list --exclude-promisor-objects --objects bar >out &&
	grep $(git -C repo rev-parse bar) out &&
	! grep $FOO out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 9221471] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master ff8c8be] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
b811da665b3347533d28e754783c731dd3be8fc0
ff8c8bee78de1035f43b9046635cf3173c80847d
ok 18 - rev-list stops traversal at missing and promised commit

expecting success of 0410.19 'missing tree objects with --missing=allow-promisor and --exclude-promisor-objects': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo foo &&
	test_commit -C repo bar &&
	test_commit -C repo baz &&

	promise_and_delete $(git -C repo rev-parse bar^{tree}) &&
	promise_and_delete $(git -C repo rev-parse foo^{tree}) &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&

	git -C repo rev-list --missing=allow-promisor --objects HEAD >objs 2>rev_list_err &&
	test_must_be_empty rev_list_err &&
	# 3 commits, 3 blobs, and 1 tree
	test_line_count = 7 objs &&

	# Do the same for --exclude-promisor-objects, but with all trees gone.
	promise_and_delete $(git -C repo rev-parse baz^{tree}) &&
	git -C repo rev-list --exclude-promisor-objects --objects HEAD >objs 2>rev_list_err &&
	test_must_be_empty rev_list_err &&
	# 3 commits, no blobs or trees
	test_line_count = 3 objs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) da360a9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master 8e63723] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
[master 9f4b2de] baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz.t
6550f6c14e11be8aa8fd4775f1cbac8a86d3c020
21f60db37d541c539ce18abed9c34cca08275e75
a0897ff0dc3d6258c3e2e9b672280c8c67afe5a6
ok 19 - missing tree objects with --missing=allow-promisor and --exclude-promisor-objects

expecting success of 0410.20 'missing non-root tree object and rev-list': 
	rm -rf repo &&
	test_create_repo repo &&
	mkdir repo/dir &&
	echo foo >repo/dir/foo &&
	git -C repo add dir/foo &&
	git -C repo commit -m "commit dir/foo" &&

	promise_and_delete $(git -C repo rev-parse HEAD:dir) &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&

	git -C repo rev-list --missing=allow-any --objects HEAD >objs 2>rev_list_err &&
	test_must_be_empty rev_list_err &&
	# 1 commit and 1 tree
	test_line_count = 2 objs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 19805d4] commit dir/foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/foo
83b1345e23463e491d63e0b738b32737ae12b14e
ok 20 - missing non-root tree object and rev-list

expecting success of 0410.21 'rev-list stops traversal at missing and promised tree': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo foo &&
	mkdir repo/a_dir &&
	echo something >repo/a_dir/something &&
	git -C repo add a_dir/something &&
	git -C repo commit -m bar &&

	# foo^{tree} (tree referenced from commit)
	TREE=$(git -C repo rev-parse foo^{tree}) &&

	# a tree referenced by HEAD^{tree} (tree referenced from tree)
	TREE2=$(git -C repo ls-tree HEAD^{tree} | grep " tree " | head -1 | cut -b13-52) &&

	promise_and_delete "$TREE" &&
	promise_and_delete "$TREE2" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo rev-list --exclude-promisor-objects --objects HEAD >out &&
	grep $(git -C repo rev-parse foo) out &&
	! grep $TREE out &&
	grep $(git -C repo rev-parse HEAD) out &&
	! grep $TREE2 out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 17fbdf8] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master ad093f3] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a_dir/something
5ef11270e2d2fd2bc3855f6dd86c6c55e98b89e4
979cf6fb4e13711d7be586e5be27a045f17cf7ab
17fbdf8e8f2cd984906bc16944e7b642a041bd09
ad093f3bd66a91b34d8a8c0ad31fb2b14216feee
ok 21 - rev-list stops traversal at missing and promised tree

expecting success of 0410.22 'rev-list stops traversal at missing and promised blob': 
	rm -rf repo &&
	test_create_repo repo &&
	echo something >repo/something &&
	git -C repo add something &&
	git -C repo commit -m foo &&

	BLOB=$(git -C repo hash-object -w something) &&
	promise_and_delete "$BLOB" &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo rev-list --exclude-promisor-objects --objects HEAD >out &&
	grep $(git -C repo rev-parse HEAD) out &&
	! grep $BLOB out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 53e2498] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 something
1bd387dfff2cd70c81fc24a57da1423e7646d0ac
53e249869c30b2797cba2e4262d1403822bd6f27
ok 22 - rev-list stops traversal at missing and promised blob

expecting success of 0410.23 'rev-list stops traversal at promisor commit, tree, and blob': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo foo &&
	test_commit -C repo bar &&
	test_commit -C repo baz &&

	COMMIT=$(git -C repo rev-parse foo) &&
	TREE=$(git -C repo rev-parse bar^{tree}) &&
	BLOB=$(git hash-object repo/baz.t) &&
	printf "%s\n%s\n%s\n" $COMMIT $TREE $BLOB | pack_as_from_promisor &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo rev-list --exclude-promisor-objects --objects HEAD >out &&
	! grep $COMMIT out &&
	! grep $TREE out &&
	! grep $BLOB out &&
	grep $(git -C repo rev-parse bar) out  # sanity check that some walking was done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 551a204] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master 3c09622] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
[master 114e46f] baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz.t
6ccf2e85bb4fbea4379d5abce112fd85bb65c461
3c09622014b3efcccde9c022644ac33a55ecd125
ok 23 - rev-list stops traversal at promisor commit, tree, and blob

expecting success of 0410.24 'rev-list dies for missing objects on cmd line': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo foo &&
	test_commit -C repo bar &&
	test_commit -C repo baz &&

	COMMIT=$(git -C repo rev-parse foo) &&
	TREE=$(git -C repo rev-parse bar^{tree}) &&
	BLOB=$(git hash-object repo/baz.t) &&

	promise_and_delete $COMMIT &&
	promise_and_delete $TREE &&
	promise_and_delete $BLOB &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&

	for OBJ in "$COMMIT" "$TREE" "$BLOB"; do
		test_must_fail git -C repo rev-list --objects \
			--exclude-promisor-objects "$OBJ" &&
		test_must_fail git -C repo rev-list --objects-edge-aggressive \
			--exclude-promisor-objects "$OBJ" &&

		# Do not die or crash when --ignore-missing is passed.
		git -C repo rev-list --ignore-missing --objects \
			--exclude-promisor-objects "$OBJ" &&
		git -C repo rev-list --ignore-missing --objects-edge-aggressive \
			--exclude-promisor-objects "$OBJ" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) bf98c57] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master 9768ca4] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
[master 1980c58] baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz.t
cc034486f116f4a2da237cfb31d7f52d7493d39a
ec1dec6a75446df8471b40065154383df5d8be54
911d478da9923de08ad2da390153ab87072d89b5
fatal: ambiguous argument 'bf98c5722fd23396766e1a68ef49284bac9f34d3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument 'bf98c5722fd23396766e1a68ef49284bac9f34d3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument '12e519f9839344d0202cbb4a0286099ef31e2196': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument '12e519f9839344d0202cbb4a0286099ef31e2196': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument '76018072e09c5d31c8c6e3113b8aa0fe625195ca': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument '76018072e09c5d31c8c6e3113b8aa0fe625195ca': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 24 - rev-list dies for missing objects on cmd line

expecting success of 0410.25 'single promisor remote can be re-initialized gracefully': 
	# ensure one promisor is in the promisors list
	rm -rf repo &&
	test_create_repo repo &&
	test_create_repo other &&
	git -C repo remote add foo "file://$(pwd)/other" &&
	git -C repo config remote.foo.promisor true &&
	git -C repo config extensions.partialclone foo &&

	# reinitialize the promisors list
	git -C repo fetch --filter=blob:none foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/other/.git/
ok 25 - single promisor remote can be re-initialized gracefully

expecting success of 0410.26 'gc repacks promisor objects separately from non-promisor objects': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo one &&
	test_commit -C repo two &&

	TREE_ONE=$(git -C repo rev-parse one^{tree}) &&
	printf "$TREE_ONE\n" | pack_as_from_promisor &&
	TREE_TWO=$(git -C repo rev-parse two^{tree}) &&
	printf "$TREE_TWO\n" | pack_as_from_promisor &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo gc &&

	# Ensure that exactly one promisor packfile exists, and that it
	# contains the trees but not the commits
	ls repo/.git/objects/pack/pack-*.promisor >promisorlist &&
	test_line_count = 1 promisorlist &&
	PROMISOR_PACKFILE=$(sed "s/.promisor/.pack/" <promisorlist) &&
	git verify-pack $PROMISOR_PACKFILE -v >out &&
	grep "$TREE_ONE" out &&
	grep "$TREE_TWO" out &&
	! grep "$(git -C repo rev-parse one)" out &&
	! grep "$(git -C repo rev-parse two)" out &&

	# Remove the promisor packfile and associated files
	rm $(sed "s/.promisor//" <promisorlist).* &&

	# Ensure that the single other pack contains the commits, but not the
	# trees
	ls repo/.git/objects/pack/pack-*.pack >packlist &&
	test_line_count = 1 packlist &&
	git verify-pack repo/.git/objects/pack/pack-*.pack -v >out &&
	grep "$(git -C repo rev-parse one)" out &&
	grep "$(git -C repo rev-parse two)" out &&
	! grep "$TREE_ONE" out &&
	! grep "$TREE_TWO" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) ef23b68] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master b399ab2] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
80b0d61182f42d417d3f1080999c86acd16276f7
4f4b1c441e35611dff006a309fbda4370b40fc90
a7cddf35737959e1438bc929b665619e9e79bfee tree   33 44 85
2f00a404aed7e63d867313d504bd0fccea53fd25 tree   66 73 12
ef23b68d4e6487c3b82203365a1ad71966a7c795 commit 167 127 168
b399ab2167d8b39d1885d639c028321b5d84b0da commit 215 156 12
ok 26 - gc repacks promisor objects separately from non-promisor objects

expecting success of 0410.27 'gc does not repack promisor objects if there are none': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo one &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo gc &&

	# Ensure that only one pack exists
	ls repo/.git/objects/pack/pack-*.pack >packlist &&
	test_line_count = 1 packlist

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 772c775] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 27 - gc does not repack promisor objects if there are none

expecting success of 0410.28 'repack -d does not irreversibly delete promisor objects': 
	rm -rf repo &&
	test_create_repo repo &&
	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&

	git -C repo commit --allow-empty -m one &&
	git -C repo commit --allow-empty -m two &&
	git -C repo commit --allow-empty -m three &&
	git -C repo commit --allow-empty -m four &&
	ONE=$(git -C repo rev-parse HEAD^^^) &&
	TWO=$(git -C repo rev-parse HEAD^^) &&
	THREE=$(git -C repo rev-parse HEAD^) &&

	printf "$TWO\n" | pack_as_from_promisor &&
	printf "$THREE\n" | pack_as_from_promisor &&
	delete_object repo "$ONE" &&

	repack_and_check --must-fail -ab "$TWO" "$THREE" &&
	repack_and_check -a "$TWO" "$THREE" &&
	repack_and_check -A "$TWO" "$THREE" &&
	repack_and_check -l "$TWO" "$THREE"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 855c7a9] one
 Author: A U Thor <author@example.com>
[master 2a4d010] two
 Author: A U Thor <author@example.com>
[master 35fd646] three
 Author: A U Thor <author@example.com>
[master 6be7a1a] four
 Author: A U Thor <author@example.com>
2a4f85dde21d39cdf91c12b1cabc70b22e331e87
daf9f3011efc4e7873d073475188dc321f1033f9
warning: reflog of 'HEAD' references pruned commits
warning: reflog of 'refs/heads/master' references pruned commits
warning: Failed to write bitmap index. Packfile doesn't have full closure (object 35fd6460acd56684efbfd2c8e3afd7ee8f3b80f1 is missing)
fatal: failed to write bitmap index
warning: reflog of 'HEAD' references pruned commits
warning: reflog of 'refs/heads/master' references pruned commits
warning: reflog of 'HEAD' references pruned commits
warning: reflog of 'refs/heads/master' references pruned commits
warning: reflog of 'HEAD' references pruned commits
warning: reflog of 'refs/heads/master' references pruned commits
ok 28 - repack -d does not irreversibly delete promisor objects

expecting success of 0410.29 'gc stops traversal when a missing but promised object is reached': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo my_commit &&

	TREE_HASH=$(git -C repo rev-parse HEAD^{tree}) &&
	HASH=$(promise_and_delete $TREE_HASH) &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&
	git -C repo gc &&

	# Ensure that the promisor packfile still exists, and remove it
	test -e repo/.git/objects/pack/pack-$HASH.pack &&
	rm repo/.git/objects/pack/pack-$HASH.* &&

	# Ensure that the single other pack contains the commit, but not the tree
	ls repo/.git/objects/pack/pack-*.pack >packlist &&
	test_line_count = 1 packlist &&
	git verify-pack repo/.git/objects/pack/pack-*.pack -v >out &&
	grep "$(git -C repo rev-parse HEAD)" out &&
	! grep "$TREE_HASH" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 52a9f42] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_commit.t
52a9f4290c16cfcf35d767283a0965b6a04864e8 commit 173 128 12
ok 29 - gc stops traversal when a missing but promised object is reached

expecting success of 0410.30 'do not fetch when checking existence of tree we construct ourselves': 
	rm -rf repo &&
	test_create_repo repo &&
	test_commit -C repo base &&
	test_commit -C repo side1 &&
	git -C repo checkout base &&
	test_commit -C repo side2 &&

	git -C repo config core.repositoryformatversion 1 &&
	git -C repo config extensions.partialclone "arbitrary string" &&

	git -C repo cherry-pick side1

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 5d33c08] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master d575dc7] side1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
Note: switching to 'base'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5d33c08 base
[detached HEAD 5ac9e13] side2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
[detached HEAD fa37d98] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:50:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
ok 30 - do not fetch when checking existence of tree we construct ourselves

expecting success of 0410.31 'exact rename does not need to fetch the blob lazily': 
	rm -rf repo partial.git &&
	test_create_repo repo &&
	content="some dummy content" &&
	test_commit -C repo create-a-file file.txt "$content" &&
	git -C repo mv file.txt new-file.txt &&
	git -C repo commit -m rename-the-file &&
	FILE_HASH=$(git -C repo rev-parse HEAD:new-file.txt) &&
	test_config -C repo uploadpack.allowfilter 1 &&
	test_config -C repo uploadpack.allowanysha1inwant 1 &&

	git clone --filter=blob:none --bare "file://$(pwd)/repo" partial.git &&
	git -C partial.git rev-list --objects --missing=print HEAD >out &&
	grep "[?]$FILE_HASH" out &&
	git -C partial.git log --follow -- new-file.txt &&
	git -C partial.git rev-list --objects --missing=print HEAD >out &&
	grep "[?]$FILE_HASH" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/repo/.git/
[master (root-commit) 7ac4eca] create-a-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
[master b8362fb] rename-the-file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file.txt => new-file.txt (100%)
Cloning into bare repository 'partial.git'...
?62d06a966bf6dc792f2877492ae19ad68622d978
commit b8362fbe7536ff7fea31c5374c3cda4baf9b3ee0
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:52:13 2005 -0700

    rename-the-file

commit 7ac4ecae96a92bab0cc7f88a2d2d88598ddca71b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:52:13 2005 -0700

    create-a-file
?62d06a966bf6dc792f2877492ae19ad68622d978
ok 31 - exact rename does not need to fetch the blob lazily

expecting success of 0410.32 'lazy-fetch when accessing object not in the_repository': 
	rm -rf full partial.git &&
	test_create_repo full &&
	test_commit -C full create-a-file file.txt &&

	test_config -C full uploadpack.allowfilter 1 &&
	test_config -C full uploadpack.allowanysha1inwant 1 &&
	git clone --filter=blob:none --bare "file://$(pwd)/full" partial.git &&
	FILE_HASH=$(git -C full rev-parse HEAD:file.txt) &&

	# Sanity check that the file is missing
	git -C partial.git rev-list --objects --missing=print HEAD >out &&
	grep "[?]$FILE_HASH" out &&

	git -C full cat-file -s "$FILE_HASH" >expect &&
	test-tool partial-clone object-info partial.git "$FILE_HASH" >actual &&
	test_cmp expect actual &&

	# Sanity check that the file is now present
	git -C partial.git rev-list --objects --missing=print HEAD >out &&
	! grep "[?]$FILE_HASH" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0410-partial-clone/full/.git/
[master (root-commit) fc5fa02] create-a-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
Cloning into bare repository 'partial.git'...
?aa94997042a27f4d6c4b4556031df55155e02559
ok 32 - lazy-fetch when accessing object not in the_repository

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 32 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..32
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1001-read-tree-m-2way.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1001-read-tree-m-2way/.git/
expecting success of 1001.1 'setup': 
	echo frotz >frotz &&
	echo nitfol >nitfol &&
	cat bozbar-old >bozbar &&
	echo rezrov >rezrov &&
	echo yomin >yomin &&
	git update-index --add nitfol bozbar rezrov &&
	treeH=$(git write-tree) &&
	echo treeH $treeH &&
	git ls-tree $treeH &&

	cat bozbar-new >bozbar &&
	git update-index --add frotz bozbar --force-remove rezrov &&
	git ls-files --stage >M.out &&
	treeM=$(git write-tree) &&
	echo treeM $treeM &&
	git ls-tree $treeM &&
	git diff-tree $treeH $treeM

treeH ca3aa9e6ee09349df7db6f0de15016afcdf5d9e4
100644 blob 3e8d9abb979a4fbdc93309f457a5496bc41ba6ab	bozbar
100644 blob dca6b92303befc93086aa025d90a5facd7eb2812	nitfol
100644 blob 766498d93a4b06057a8e49d23f4068f1170ff38f	rezrov
treeM d2c045ead2ecb56f2632385a395918bf21816c12
100644 blob 346d4e61f111336a1443ef6b2e834aa5b1a7f91a	bozbar
100644 blob 8e4020bb5a8d8c873b25de15933e75cc0fc275df	frotz
100644 blob dca6b92303befc93086aa025d90a5facd7eb2812	nitfol
:100644 100644 3e8d9abb979a4fbdc93309f457a5496bc41ba6ab 346d4e61f111336a1443ef6b2e834aa5b1a7f91a M	bozbar
:000000 100644 0000000000000000000000000000000000000000 8e4020bb5a8d8c873b25de15933e75cc0fc275df A	frotz
:100644 000000 766498d93a4b06057a8e49d23f4068f1170ff38f 0000000000000000000000000000000000000000 D	rezrov
ok 1 - setup

expecting success of 1001.2 '1, 2, 3 - no carry forward': 
	rm -f .git/index &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >1-3.out &&
	test_cmp M.out 1-3.out &&
	check_cache_at bozbar dirty &&
	check_cache_at frotz dirty &&
	check_cache_at nitfol dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
bozbar: dirty
frotz: dirty
nitfol: dirty
ok 2 - 1, 2, 3 - no carry forward

expecting success of 1001.3 '4 - carry forward local addition.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	git update-index --add yomin &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >4.out &&
	test_must_fail git diff --no-index M.out 4.out >4diff.out &&
	compare_change 4diff.out expected &&
	check_cache_at yomin clean

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
100644 0a41e115ab61be0328a19b29f18cdcb49338d516 0	yomin
yomin: clean
ok 3 - 4 - carry forward local addition.

expecting success of 1001.4 '5 - carry forward local addition.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo yomin >yomin &&
	git update-index --add yomin &&
	echo yomin yomin >yomin &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >5.out &&
	test_must_fail git diff --no-index M.out 5.out >5diff.out &&
	compare_change 5diff.out expected &&
	check_cache_at yomin dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
100644 0a41e115ab61be0328a19b29f18cdcb49338d516 0	yomin
yomin: dirty
ok 4 - 5 - carry forward local addition.

expecting success of 1001.5 '6 - local addition already has the same.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	git update-index --add frotz &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >6.out &&
	test_cmp M.out 6.out &&
	check_cache_at frotz clean

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
frotz: clean
ok 5 - 6 - local addition already has the same.

expecting success of 1001.6 '7 - local addition already has the same.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo frotz >frotz &&
	git update-index --add frotz &&
	echo frotz frotz >frotz &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >7.out &&
	test_cmp M.out 7.out &&
	check_cache_at frotz dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
frotz: dirty
ok 6 - 7 - local addition already has the same.

expecting success of 1001.7 '8 - conflicting addition.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo frotz frotz >frotz &&
	git update-index --add frotz &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'frotz' would be overwritten by merge. Cannot merge.
ok 7 - 8 - conflicting addition.

expecting success of 1001.8 '9 - conflicting addition.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo frotz frotz >frotz &&
	git update-index --add frotz &&
	echo frotz >frotz &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'frotz' would be overwritten by merge. Cannot merge.
ok 8 - 9 - conflicting addition.

expecting success of 1001.9 '10 - path removed.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo rezrov >rezrov &&
	git update-index --add rezrov &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >10.out &&
	test_cmp M.out 10.out

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
ok 9 - 10 - path removed.

expecting success of 1001.10 '11 - dirty path removed.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo rezrov >rezrov &&
	git update-index --add rezrov &&
	echo rezrov rezrov >rezrov &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'rezrov' not uptodate. Cannot merge.
ok 10 - 11 - dirty path removed.

expecting success of 1001.11 '12 - unmatching local changes being removed.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo rezrov rezrov >rezrov &&
	git update-index --add rezrov &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'rezrov' would be overwritten by merge. Cannot merge.
ok 11 - 12 - unmatching local changes being removed.

expecting success of 1001.12 '13 - unmatching local changes being removed.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo rezrov rezrov >rezrov &&
	git update-index --add rezrov &&
	echo rezrov >rezrov &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'rezrov' would be overwritten by merge. Cannot merge.
ok 12 - 13 - unmatching local changes being removed.

expecting success of 1001.13 '14 - unchanged in two heads.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo nitfol nitfol >nitfol &&
	git update-index --add nitfol &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >14.out &&
	test_must_fail git diff --no-index M.out 14.out >14diff.out &&
	compare_change 14diff.out expected &&
	check_cache_at nitfol clean

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 7e1bf714fb103c778a21dd67411666901222425a 0	nitfol
nitfol: clean
ok 13 - 14 - unchanged in two heads.

expecting success of 1001.14 '15 - unchanged in two heads.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo nitfol nitfol >nitfol &&
	git update-index --add nitfol &&
	echo nitfol nitfol nitfol >nitfol &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >15.out &&
	test_must_fail git diff --no-index M.out 15.out >15diff.out &&
	compare_change 15diff.out expected &&
	check_cache_at nitfol dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 7e1bf714fb103c778a21dd67411666901222425a 0	nitfol
nitfol: dirty
ok 14 - 15 - unchanged in two heads.

expecting success of 1001.15 '16 - conflicting local change.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo bozbar bozbar >bozbar &&
	git update-index --add bozbar &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'bozbar' would be overwritten by merge. Cannot merge.
ok 15 - 16 - conflicting local change.

expecting success of 1001.16 '17 - conflicting local change.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	echo bozbar bozbar >bozbar &&
	git update-index --add bozbar &&
	echo bozbar bozbar bozbar >bozbar &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'bozbar' would be overwritten by merge. Cannot merge.
ok 16 - 17 - conflicting local change.

expecting success of 1001.17 '18 - local change already having a good result.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	cat bozbar-new >bozbar &&
	git update-index --add bozbar &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >18.out &&
	test_cmp M.out 18.out &&
	check_cache_at bozbar clean

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
bozbar: clean
ok 17 - 18 - local change already having a good result.

expecting success of 1001.18 '19 - local change already having a good result, further modified.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	cat bozbar-new >bozbar &&
	git update-index --add bozbar &&
	echo gnusto gnusto >bozbar &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >19.out &&
	test_cmp M.out 19.out &&
	check_cache_at bozbar dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
bozbar: dirty
ok 18 - 19 - local change already having a good result, further modified.

expecting success of 1001.19 '20 - no local change, use new tree.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	cat bozbar-old >bozbar &&
	git update-index --add bozbar &&
	read_tree_twoway $treeH $treeM &&
	git ls-files --stage >20.out &&
	test_cmp M.out 20.out &&
	check_cache_at bozbar dirty

100644 346d4e61f111336a1443ef6b2e834aa5b1a7f91a 0	bozbar
100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0	frotz
100644 dca6b92303befc93086aa025d90a5facd7eb2812 0	nitfol
bozbar: dirty
ok 19 - 20 - no local change, use new tree.

expecting success of 1001.20 '21 - no local change, dirty cache.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	cat bozbar-old >bozbar &&
	git update-index --add bozbar &&
	echo gnusto gnusto >bozbar &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'bozbar' not uptodate. Cannot merge.
ok 20 - 21 - no local change, dirty cache.

expecting success of 1001.21 '22 - local change cache updated.': 
	rm -f .git/index &&
	read_tree_must_succeed $treeH &&
	git checkout-index -u -f -q -a &&
	sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
	git update-index --add bozbar &&
	if read_tree_twoway $treeH $treeM; then false; else :; fi

error: Entry 'bozbar' would be overwritten by merge. Cannot merge.
ok 21 - 22 - local change cache updated.

expecting success of 1001.22 'DF vs DF/DF case setup.': 
	rm -f .git/index &&
	echo DF >DF &&
	git update-index --add DF &&
	treeDF=$(git write-tree) &&
	echo treeDF $treeDF &&
	git ls-tree $treeDF &&

	rm -f DF &&
	mkdir DF &&
	echo DF/DF >DF/DF &&
	git update-index --add --remove DF DF/DF &&
	treeDFDF=$(git write-tree) &&
	echo treeDFDF $treeDFDF &&
	git ls-tree $treeDFDF &&
	git ls-files --stage >DFDF.out

treeDF 6bf22db9043f2b5821c019d0ce0f2605421affcb
100644 blob 052efc3abbc31348f7abd34535b1953d38273257	DF
treeDFDF c38e296263d024b0f48c4a728d293232ac6c5443
040000 tree 90bbead36f4d6a7c325fd450e6cfbcc7479d421a	DF
ok 22 - DF vs DF/DF case setup.

expecting success of 1001.23 'DF vs DF/DF case test.': 
	rm -f .git/index &&
	rm -fr DF &&
	echo DF >DF &&
	git update-index --add DF &&
	read_tree_twoway $treeDF $treeDFDF &&
	git ls-files --stage >DFDFcheck.out &&
	test_cmp DFDF.out DFDFcheck.out &&
	check_cache_at DF/DF dirty &&
	:

100644 b90ea14b2dd74b6f377c10870b3757344bbe077c 0	DF/DF
DF/DF: dirty
ok 23 - DF vs DF/DF case test.

expecting success of 1001.24 'a/b (untracked) vs a case setup.': 
	rm -f .git/index &&
	: >a &&
	git update-index --add a &&
	treeM=$(git write-tree) &&
	echo treeM $treeM &&
	git ls-tree $treeM &&
	git ls-files --stage >treeM.out &&

	rm -f a &&
	git update-index --remove a &&
	mkdir a &&
	: >a/b &&
	treeH=$(git write-tree) &&
	echo treeH $treeH &&
	git ls-tree $treeH

treeM 496d6428b9cf92981dc9495211e6e1120fb6f2ba
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391	a
treeH 4b825dc642cb6eb9a060e54bf8d69288fbee4904
ok 24 - a/b (untracked) vs a case setup.

expecting success of 1001.25 'a/b (untracked) vs a, plus c/d case test.': 
	read_tree_u_must_fail -u -m "$treeH" "$treeM" &&
	git ls-files --stage &&
	test -f a/b

error: Updating 'a' would lose untracked files in it
error: Updating 'a' would lose untracked files in it
ok 25 - a/b (untracked) vs a, plus c/d case test.

expecting success of 1001.26 'read-tree supports the super-prefix': 
	cat <<-EOF >expect &&
		error: Updating 'fictional/a' would lose untracked files in it
	EOF
	test_must_fail git --super-prefix fictional/ read-tree -u -m "$treeH" "$treeM" 2>actual &&
	test_cmp expect actual

ok 26 - read-tree supports the super-prefix

expecting success of 1001.27 'a/b vs a, plus c/d case setup.': 
	rm -f .git/index &&
	rm -fr a &&
	: >a &&
	mkdir c &&
	: >c/d &&
	git update-index --add a c/d &&
	treeM=$(git write-tree) &&
	echo treeM $treeM &&
	git ls-tree $treeM &&
	git ls-files --stage >treeM.out &&

	rm -f a &&
	mkdir a &&
	: >a/b &&
	git update-index --add --remove a a/b &&
	treeH=$(git write-tree) &&
	echo treeH $treeH &&
	git ls-tree $treeH

treeM 3e82e8b9894d6c7982dcd25a6dad66400d52735f
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391	a
040000 tree 2a26db49a6962700da5bd4084ae0e5a22d6583ee	c
treeH 02c6f058fb950781e5b773c21e4c237db1ff4d5a
040000 tree 4277b6e69d25e5efa77c455340557b384a4c018a	a
040000 tree 2a26db49a6962700da5bd4084ae0e5a22d6583ee	c
ok 27 - a/b vs a, plus c/d case setup.

expecting success of 1001.28 'a/b vs a, plus c/d case test.': 
	read_tree_u_must_succeed -u -m "$treeH" "$treeM" &&
	git ls-files --stage | tee >treeMcheck.out &&
	test_cmp treeM.out treeMcheck.out

ok 28 - a/b vs a, plus c/d case test.

expecting success of 1001.29 '-m references the correct modified tree': 
	echo >file-a &&
	echo >file-b &&
	git add file-a file-b &&
	git commit -a -m "test for correct modified tree" &&
	git branch initial-mod &&
	echo b >file-b &&
	git commit -a -m "B" &&
	echo a >file-a &&
	git add file-a &&
	git ls-tree $(git write-tree) file-a >expect &&
	read_tree_must_succeed -m HEAD initial-mod &&
	git ls-tree $(git write-tree) file-a >actual &&
	test_cmp expect actual

[master (root-commit) 0d16b8a] test for correct modified tree
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 c/d
 create mode 100644 file-a
 create mode 100644 file-b
[master 9f64e7b] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 29 - -m references the correct modified tree

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1003-read-tree-prefix.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1003-read-tree-prefix/.git/
expecting success of 1003.1 'setup': 
	echo hello >one &&
	git update-index --add one &&
	tree=$(git write-tree) &&
	echo tree is $tree

tree is 700196ec4e5b1c75e9f5481e5b545d78533ff917
ok 1 - setup

expecting success of 1003.2 'read-tree --prefix': 
	git read-tree --prefix=two/ $tree &&
	git ls-files >actual &&
	cmp expect actual

ok 2 - read-tree --prefix

expecting success of 1003.3 'read-tree --prefix with leading slash exits with error': 
	git rm -rf . &&
	test_must_fail git read-tree --prefix=/two/ $tree &&
	git read-tree --prefix=two/ $tree &&

	git rm -rf . &&
	test_must_fail git read-tree --prefix=/ $tree &&
	git read-tree --prefix= $tree

rm 'one'
rm 'two/one'
fatal: Invalid prefix, prefix cannot start with '/'
rm 'two/one'
fatal: Invalid prefix, prefix cannot start with '/'
ok 3 - read-tree --prefix with leading slash exits with error

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1004-read-tree-m-u-wf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1004-read-tree-m-u-wf/.git/
expecting success of 1004.1 'two-way setup': 

	mkdir subdir &&
	echo >file1 file one &&
	echo >file2 file two &&
	echo >subdir/file1 file one in subdirectory &&
	echo >subdir/file2 file two in subdirectory &&
	git update-index --add file1 file2 subdir/file1 subdir/file2 &&
	git commit -m initial &&

	git branch side &&
	git tag -f branch-point &&

	echo file2 is not tracked on the main branch anymore &&
	rm -f file2 subdir/file2 &&
	git update-index --remove file2 subdir/file2 &&
	git commit -a -m "main removes file2 and subdir/file2"

[main (root-commit) eb5336a] initial
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
 create mode 100644 subdir/file1
 create mode 100644 subdir/file2
file2 is not tracked on the main branch anymore
[main dbb6421] main removes file2 and subdir/file2
 Author: A U Thor <author@example.com>
 2 files changed, 2 deletions(-)
 delete mode 100644 file2
 delete mode 100644 subdir/file2
ok 1 - two-way setup

expecting success of 1004.2 'two-way not clobbering': 

	echo >file2 main creates untracked file2 &&
	echo >subdir/file2 main creates untracked subdir/file2 &&
	if err=$(read_tree_u_must_succeed -m -u main side 2>&1)
	then
		echo should have complained
		false
	else
		echo "happy to see $err"
	fi

happy to see error: Untracked working tree file 'file2' would be overwritten by merge.
ok 2 - two-way not clobbering

expecting success of 1004.3 'two-way with incorrect --exclude-per-directory (1)': 

	if err=$(read_tree_u_must_succeed -m --exclude-per-directory=.gitignore main side 2>&1)
	then
		echo should have complained
		false
	else
		echo "happy to see $err"
	fi

happy to see fatal: --exclude-per-directory is meaningless unless -u
ok 3 - two-way with incorrect --exclude-per-directory (1)

expecting success of 1004.4 'two-way with incorrect --exclude-per-directory (2)': 

	if err=$(read_tree_u_must_succeed -m -u --exclude-per-directory=foo --exclude-per-directory=.gitignore main side 2>&1)
	then
		echo should have complained
		false
	else
		echo "happy to see $err"
	fi

happy to see fatal: --exclude-per-directory argument must be .gitignore
ok 4 - two-way with incorrect --exclude-per-directory (2)

expecting success of 1004.5 'two-way clobbering a ignored file': 

	read_tree_u_must_succeed -m -u --exclude-per-directory=.gitignore main side

ok 5 - two-way clobbering a ignored file

expecting success of 1004.6 'three-way not complaining on an untracked path in both': 

	rm -f file2 subdir/file2 &&
	git checkout side &&
	echo >file3 file three &&
	echo >subdir/file3 file three &&
	git update-index --add file3 subdir/file3 &&
	git commit -a -m "side adds file3 and removes file2" &&

	git checkout main &&
	echo >file2 file two is untracked on the main side &&
	echo >subdir/file2 file two is untracked on the main side &&

	read_tree_u_must_succeed -m -u branch-point main side

Switched to branch 'side'
D	file2
D	subdir/file2
[side 4be225f] side adds file3 and removes file2
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 file2
 create mode 100644 file3
 delete mode 100644 subdir/file2
 create mode 100644 subdir/file3
Switched to branch 'main'
ok 6 - three-way not complaining on an untracked path in both

expecting success of 1004.7 'three-way not clobbering a working tree file': 

	git reset --hard &&
	rm -f file2 subdir/file2 file3 subdir/file3 &&
	git checkout main &&
	echo >file3 file three created in main, untracked &&
	echo >subdir/file3 file three created in main, untracked &&
	if err=$(read_tree_u_must_succeed -m -u branch-point main side 2>&1)
	then
		echo should have complained
		false
	else
		echo "happy to see $err"
	fi

HEAD is now at dbb6421 main removes file2 and subdir/file2
Already on 'main'
happy to see error: Untracked working tree file 'file3' would be overwritten by merge.
ok 7 - three-way not clobbering a working tree file

expecting success of 1004.8 'three-way not complaining on an untracked file': 

	git reset --hard &&
	rm -f file2 subdir/file2 file3 subdir/file3 &&
	git checkout main &&
	echo >file3 file three created in main, untracked &&
	echo >subdir/file3 file three created in main, untracked &&

	read_tree_u_must_succeed -m -u --exclude-per-directory=.gitignore branch-point main side

HEAD is now at dbb6421 main removes file2 and subdir/file2
Already on 'main'
ok 8 - three-way not complaining on an untracked file

expecting success of 1004.9 '3-way not overwriting local changes (setup)': 

	git reset --hard &&
	git checkout -b side-a branch-point &&
	echo >>file1 "new line to be kept in the merge result" &&
	git commit -a -m "side-a changes file1" &&
	git checkout -b side-b branch-point &&
	echo >>file2 "new line to be kept in the merge result" &&
	git commit -a -m "side-b changes file2" &&
	git checkout side-a


HEAD is now at dbb6421 main removes file2 and subdir/file2
Switched to a new branch 'side-a'
[side-a 67c0594] side-a changes file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'side-b'
[side-b 3ad988a] side-b changes file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'side-a'
ok 9 - 3-way not overwriting local changes (setup)

expecting success of 1004.10 '3-way not overwriting local changes (our side)': 

	# At this point, file1 from side-a should be kept as side-b
	# did not touch it.

	git reset --hard &&

	echo >>file1 "local changes" &&
	read_tree_u_must_succeed -m -u branch-point side-a side-b &&
	grep "new line to be kept" file1 &&
	grep "local changes" file1


HEAD is now at 67c0594 side-a changes file1
new line to be kept in the merge result
local changes
ok 10 - 3-way not overwriting local changes (our side)

expecting success of 1004.11 '3-way not overwriting local changes (their side)': 

	# At this point, file2 from side-b should be taken as side-a
	# did not touch it.

	git reset --hard &&

	echo >>file2 "local changes" &&
	read_tree_u_must_fail -m -u branch-point side-a side-b &&
	! grep "new line to be kept" file2 &&
	grep "local changes" file2


HEAD is now at 67c0594 side-a changes file1
error: Entry 'file2' not uptodate. Cannot merge.
error: Entry 'file2' not uptodate. Cannot merge.
local changes
ok 11 - 3-way not overwriting local changes (their side)

expecting success of 1004.12 'funny symlink in work tree': 

	git reset --hard &&
	git checkout -b sym-b side-b &&
	mkdir -p a &&
	>a/b &&
	git add a/b &&
	git commit -m "side adds a/b" &&

	rm -fr a &&
	git checkout -b sym-a side-a &&
	mkdir -p a &&
	test_ln_s_add ../b a/b &&
	git commit -m "we add a/b" &&

	read_tree_u_must_succeed -m -u sym-a sym-a sym-b


HEAD is now at 67c0594 side-a changes file1
Switched to a new branch 'sym-b'
[sym-b b05f19b] side adds a/b
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/b
Switched to a new branch 'sym-a'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[sym-a c4bc40b] we add a/b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 a/b
ok 12 - funny symlink in work tree

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 1004.13 'funny symlink in work tree, un-unlink-able': 

	test_when_finished "chmod u+w a 2>/dev/null; rm -fr a b" &&

	rm -fr a b &&
	git reset --hard &&

	git checkout sym-a &&
	chmod a-w a &&
	test_must_fail git read-tree -m -u sym-a sym-a sym-b


HEAD is now at c4bc40b we add a/b
Already on 'sym-a'
error: unable to unlink old 'a/b': Permission denied
ok 13 - funny symlink in work tree, un-unlink-able

expecting success of 1004.14 'D/F setup': 

	git reset --hard &&

	git checkout side-a &&
	rm -f subdir/file2 &&
	mkdir subdir/file2 &&
	echo qfwfq >subdir/file2/another &&
	git add subdir/file2/another &&
	test_tick &&
	git commit -m "side-a changes file2 to directory"


HEAD is now at c4bc40b we add a/b
Switched to branch 'side-a'
[side-a d094fd2] side-a changes file2 to directory
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 subdir/file2
 create mode 100644 subdir/file2/another
ok 14 - D/F setup

expecting success of 1004.15 'D/F': 

	git checkout side-b &&
	read_tree_u_must_succeed -m -u branch-point side-b side-a &&
	git ls-files -u >actual &&
	(
		a=$(git rev-parse branch-point:subdir/file2) &&
		b=$(git rev-parse side-a:subdir/file2/another) &&
		echo "100644 $a 1	subdir/file2" &&
		echo "100644 $a 2	subdir/file2" &&
		echo "100644 $b 3	subdir/file2/another"
	) >expect &&
	test_cmp expect actual


Switched to branch 'side-b'
ok 15 - D/F

expecting success of 1004.16 'D/F resolve': 

	git reset --hard &&
	git checkout side-b &&
	git merge-resolve branch-point -- side-b side-a


HEAD is now at 3ad988a side-b changes file2
Already on 'side-b'
Trying simple merge.
Simple merge failed, trying Automatic merge.
Adding subdir/file2/another
ok 16 - D/F resolve

expecting success of 1004.17 'D/F recursive': 

	git reset --hard &&
	git checkout side-b &&
	git merge-recursive branch-point -- side-b side-a


HEAD is now at 3ad988a side-b changes file2
Already on 'side-b'
Merging side-b with side-a
Merging:
3ad988a side-b changes file2
d094fd2 side-a changes file2 to directory
found 1 common ancestor:
eb5336a initial
Adding subdir/file2/another
Removing subdir/file2 to make room for subdirectory

Removing subdir/file2
ok 17 - D/F recursive

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1002-read-tree-m-u-2way.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1002-read-tree-m-u-2way/.git/
expecting success of 1002.1 'setup': echo frotz >frotz &&
     echo nitfol >nitfol &&
     echo bozbar >bozbar &&
     echo rezrov >rezrov &&
     git update-index --add nitfol bozbar rezrov &&
     treeH=$(git write-tree) &&
     echo treeH $treeH &&
     git ls-tree $treeH &&

     echo gnusto >bozbar &&
     git update-index --add frotz bozbar --force-remove rezrov &&
     git ls-files --stage >M.out &&
     treeM=$(git write-tree) &&
     echo treeM $treeM &&
     git ls-tree $treeM &&
     cp bozbar bozbar.M &&
     cp frotz frotz.M &&
     cp nitfol nitfol.M &&
     git diff-tree $treeH $treeM
treeH 661afa9096b7e2d4b9a28a6e43736cd0b06d1308
100644 blob 78d812a2124ff980a1a70f8cca493698d643d242	bozbar
100644 blob dca6b92303befc93086aa025d90a5facd7eb2812	nitfol
100644 blob 766498d93a4b06057a8e49d23f4068f1170ff38f	rezrov
treeM 05bf9652e9b06473d6ca2f32ff60e2401e59bfa6
100644 blob bb3b2cd2e136e1e4e7ecdf10068e246196dd8294	bozbar
100644 blob 8e4020bb5a8d8c873b25de15933e75cc0fc275df	frotz
100644 blob dca6b92303befc93086aa025d90a5facd7eb2812	nitfol
:100644 100644 78d812a2124ff980a1a70f8cca493698d643d242 bb3b2cd2e136e1e4e7ecdf10068e246196dd8294 M	bozbar
:000000 100644 0000000000000000000000000000000000000000 8e4020bb5a8d8c873b25de15933e75cc0fc275df A	frotz
:100644 000000 766498d93a4b06057a8e49d23f4068f1170ff38f 0000000000000000000000000000000000000000 D	rezrov
ok 1 - setup

expecting success of 1002.2 '1, 2, 3 - no carry forward': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >1-3.out &&
     cmp M.out 1-3.out &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol &&
     check_cache_at bozbar clean &&
     check_cache_at frotz clean &&
     check_cache_at nitfol clean
bozbar: clean
frotz: clean
nitfol: clean
ok 2 - 1, 2, 3 - no carry forward

expecting success of 1002.3 '4 - carry forward local addition.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo "+100644 X 0	yomin" >expected &&
     echo yomin >yomin &&
     git update-index --add yomin &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >4.out &&
     test_might_fail git diff -U0 --no-index M.out 4.out >4diff.out &&
     compare_change 4diff.out expected &&
     check_cache_at yomin clean &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol &&
     echo yomin >yomin1 &&
     diff yomin yomin1 &&
     rm -f yomin1
yomin: clean
ok 3 - 4 - carry forward local addition.

expecting success of 1002.4 '5 - carry forward local addition.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     read_tree_u_must_succeed -m -u $treeH &&
     echo yomin >yomin &&
     git update-index --add yomin &&
     echo yomin yomin >yomin &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >5.out &&
     test_might_fail git diff -U0 --no-index M.out 5.out >5diff.out &&
     compare_change 5diff.out expected &&
     check_cache_at yomin dirty &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol &&
     : dirty index should have prevented -u from checking it out. &&
     echo yomin yomin >yomin1 &&
     diff yomin yomin1 &&
     rm -f yomin1
yomin: dirty
ok 4 - 5 - carry forward local addition.

expecting success of 1002.5 '6 - local addition already has the same.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo frotz >frotz &&
     git update-index --add frotz &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >6.out &&
     test_cmp M.out 6.out &&
     check_cache_at frotz clean &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol &&
     echo frotz >frotz1 &&
     diff frotz frotz1 &&
     rm -f frotz1
frotz: clean
ok 5 - 6 - local addition already has the same.

expecting success of 1002.6 '7 - local addition already has the same.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo frotz >frotz &&
     git update-index --add frotz &&
     echo frotz frotz >frotz &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >7.out &&
     test_cmp M.out 7.out &&
     check_cache_at frotz dirty &&
     test_cmp bozbar.M bozbar &&
     test_cmp nitfol.M nitfol &&
     : dirty index should have prevented -u from checking it out. &&
     echo frotz frotz >frotz1 &&
     diff frotz frotz1 &&
     rm -f frotz1
frotz: dirty
ok 6 - 7 - local addition already has the same.

expecting success of 1002.7 '8 - conflicting addition.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo frotz frotz >frotz &&
     git update-index --add frotz &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'frotz' would be overwritten by merge. Cannot merge.
ok 7 - 8 - conflicting addition.

expecting success of 1002.8 '9 - conflicting addition.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo frotz frotz >frotz &&
     git update-index --add frotz &&
     echo frotz >frotz &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'frotz' would be overwritten by merge. Cannot merge.
ok 8 - 9 - conflicting addition.

expecting success of 1002.9 '10 - path removed.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo rezrov >rezrov &&
     git update-index --add rezrov &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >10.out &&
     cmp M.out 10.out &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol

ok 9 - 10 - path removed.

expecting success of 1002.10 '11 - dirty path removed.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo rezrov >rezrov &&
     git update-index --add rezrov &&
     echo rezrov rezrov >rezrov &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'rezrov' not uptodate. Cannot merge.
ok 10 - 11 - dirty path removed.

expecting success of 1002.11 '12 - unmatching local changes being removed.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo rezrov rezrov >rezrov &&
     git update-index --add rezrov &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'rezrov' would be overwritten by merge. Cannot merge.
ok 11 - 12 - unmatching local changes being removed.

expecting success of 1002.12 '13 - unmatching local changes being removed.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo rezrov rezrov >rezrov &&
     git update-index --add rezrov &&
     echo rezrov >rezrov &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'rezrov' would be overwritten by merge. Cannot merge.
ok 12 - 13 - unmatching local changes being removed.

expecting success of 1002.13 '14 - unchanged in two heads.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo nitfol nitfol >nitfol &&
     git update-index --add nitfol &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >14.out &&
     test_must_fail git diff -U0 --no-index M.out 14.out >14diff.out &&
     compare_change 14diff.out expected &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     check_cache_at nitfol clean &&
     echo nitfol nitfol >nitfol1 &&
     diff nitfol nitfol1 &&
     rm -f nitfol1
nitfol: clean
ok 13 - 14 - unchanged in two heads.

expecting success of 1002.14 '15 - unchanged in two heads.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo nitfol nitfol >nitfol &&
     git update-index --add nitfol &&
     echo nitfol nitfol nitfol >nitfol &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >15.out &&
     test_must_fail git diff -U0 --no-index M.out 15.out >15diff.out &&
     compare_change 15diff.out expected &&
     check_cache_at nitfol dirty &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     echo nitfol nitfol nitfol >nitfol1 &&
     diff nitfol nitfol1 &&
     rm -f nitfol1
nitfol: dirty
ok 14 - 15 - unchanged in two heads.

expecting success of 1002.15 '16 - conflicting local change.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo bozbar bozbar >bozbar &&
     git update-index --add bozbar &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'bozbar' would be overwritten by merge. Cannot merge.
ok 15 - 16 - conflicting local change.

expecting success of 1002.16 '17 - conflicting local change.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo bozbar bozbar >bozbar &&
     git update-index --add bozbar &&
     echo bozbar bozbar bozbar >bozbar &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'bozbar' would be overwritten by merge. Cannot merge.
ok 16 - 17 - conflicting local change.

expecting success of 1002.17 '18 - local change already having a good result.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo gnusto >bozbar &&
     git update-index --add bozbar &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >18.out &&
     test_cmp M.out 18.out &&
     check_cache_at bozbar clean &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol

bozbar: clean
ok 17 - 18 - local change already having a good result.

expecting success of 1002.18 '19 - local change already having a good result, further modified.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo gnusto >bozbar &&
     git update-index --add bozbar &&
     echo gnusto gnusto >bozbar &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >19.out &&
     test_cmp M.out 19.out &&
     check_cache_at bozbar dirty &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol &&
     echo gnusto gnusto >bozbar1 &&
     diff bozbar bozbar1 &&
     rm -f bozbar1
bozbar: dirty
ok 18 - 19 - local change already having a good result, further modified.

expecting success of 1002.19 '20 - no local change, use new tree.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo bozbar >bozbar &&
     git update-index --add bozbar &&
     read_tree_u_must_succeed -m -u $treeH $treeM &&
     git ls-files --stage >20.out &&
     test_cmp M.out 20.out &&
     check_cache_at bozbar clean &&
     test_cmp bozbar.M bozbar &&
     test_cmp frotz.M frotz &&
     test_cmp nitfol.M nitfol

bozbar: clean
ok 19 - 20 - no local change, use new tree.

expecting success of 1002.20 '21 - no local change, dirty cache.': rm -f .git/index nitfol bozbar rezrov frotz &&
     read_tree_u_must_succeed --reset -u $treeH &&
     echo bozbar >bozbar &&
     git update-index --add bozbar &&
     echo gnusto gnusto >bozbar &&
     ! read_tree_u_must_succeed -m -u $treeH $treeM
error: Entry 'bozbar' not uptodate. Cannot merge.
ok 20 - 21 - no local change, dirty cache.

expecting success of 1002.21 'DF vs DF/DF case setup.': rm -f .git/index &&
     echo DF >DF &&
     git update-index --add DF &&
     treeDF=$(git write-tree) &&
     echo treeDF $treeDF &&
     git ls-tree $treeDF &&

     rm -f DF &&
     mkdir DF &&
     echo DF/DF >DF/DF &&
     git update-index --add --remove DF DF/DF &&
     treeDFDF=$(git write-tree) &&
     echo treeDFDF $treeDFDF &&
     git ls-tree $treeDFDF &&
     git ls-files --stage >DFDF.out
treeDF 6bf22db9043f2b5821c019d0ce0f2605421affcb
100644 blob 052efc3abbc31348f7abd34535b1953d38273257	DF
treeDFDF c38e296263d024b0f48c4a728d293232ac6c5443
040000 tree 90bbead36f4d6a7c325fd450e6cfbcc7479d421a	DF
ok 21 - DF vs DF/DF case setup.

expecting success of 1002.22 'DF vs DF/DF case test.': rm -f .git/index &&
     rm -fr DF &&
     echo DF >DF &&
     git update-index --add DF &&
     read_tree_u_must_succeed -m -u $treeDF $treeDFDF &&
     git ls-files --stage >DFDFcheck.out &&
     test_cmp DFDF.out DFDFcheck.out &&
     check_cache_at DF/DF clean
DF/DF: clean
ok 22 - DF vs DF/DF case test.

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1005-read-tree-reset.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1005-read-tree-reset/.git/
expecting success of 1005.1 'setup': 
	git init &&
	mkdir df &&
	echo content >df/file &&
	git add df/file &&
	git commit -m one &&
	git ls-files >expect &&
	rm -rf df &&
	echo content >df &&
	git add df &&
	echo content >new &&
	git add new &&
	git commit -m two

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1005-read-tree-reset/.git/
[master (root-commit) 92e0c46] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 df/file
[master 12f5e11] two
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename df/file => df (100%)
 create mode 100644 new
ok 1 - setup

expecting success of 1005.2 'reset should work': 
	read_tree_u_must_succeed -u --reset HEAD^ &&
	git ls-files >actual &&
	test_cmp expect actual

ok 2 - reset should work

expecting success of 1005.3 'reset should remove remnants from a failed merge': 
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >expect &&
	sha1=$(git rev-parse :new) &&
	(
		echo "100644 $sha1 1	old" &&
		echo "100644 $sha1 3	old"
	) | git update-index --index-info &&
	>old &&
	git ls-files -s &&
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >actual &&
	! test -f old

100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	df
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	new
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 1	old
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 3	old
ok 3 - reset should remove remnants from a failed merge

expecting success of 1005.4 'two-way reset should remove remnants too': 
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >expect &&
	sha1=$(git rev-parse :new) &&
	(
		echo "100644 $sha1 1	old" &&
		echo "100644 $sha1 3	old"
	) | git update-index --index-info &&
	>old &&
	git ls-files -s &&
	read_tree_u_must_succeed --reset -u HEAD HEAD &&
	git ls-files -s >actual &&
	! test -f old

100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	df
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	new
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 1	old
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 3	old
ok 4 - two-way reset should remove remnants too

expecting success of 1005.5 'Porcelain reset should remove remnants too': 
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >expect &&
	sha1=$(git rev-parse :new) &&
	(
		echo "100644 $sha1 1	old" &&
		echo "100644 $sha1 3	old"
	) | git update-index --index-info &&
	>old &&
	git ls-files -s &&
	git reset --hard &&
	git ls-files -s >actual &&
	! test -f old

100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	df
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	new
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 1	old
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 3	old
HEAD is now at 12f5e11 two
ok 5 - Porcelain reset should remove remnants too

expecting success of 1005.6 'Porcelain checkout -f should remove remnants too': 
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >expect &&
	sha1=$(git rev-parse :new) &&
	(
		echo "100644 $sha1 1	old" &&
		echo "100644 $sha1 3	old"
	) | git update-index --index-info &&
	>old &&
	git ls-files -s &&
	git checkout -f &&
	git ls-files -s >actual &&
	! test -f old

100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	df
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	new
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 1	old
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 3	old
ok 6 - Porcelain checkout -f should remove remnants too

expecting success of 1005.7 'Porcelain checkout -f HEAD should remove remnants too': 
	read_tree_u_must_succeed --reset -u HEAD &&
	git ls-files -s >expect &&
	sha1=$(git rev-parse :new) &&
	(
		echo "100644 $sha1 1	old" &&
		echo "100644 $sha1 3	old"
	) | git update-index --index-info &&
	>old &&
	git ls-files -s &&
	git checkout -f HEAD &&
	git ls-files -s >actual &&
	! test -f old

100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	df
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 0	new
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 1	old
100644 d95f3ad14dee633a758d2e331151e950dd13e4ed 3	old
ok 7 - Porcelain checkout -f HEAD should remove remnants too

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1007-hash-object.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/.git/
expecting success of 1007.1 'setup': 
	setup_repo &&
	test_oid_cache <<-EOF
	hello sha1:5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
	hello sha256:1e3b6c04d2eeb2b3e45c8a330445404c0b7cc7b257e2b097167d26f5230090c4

	example sha1:ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	example sha256:b44fe1fe65589848253737db859bd490453510719d7424daab03daf0767b85ae
	EOF

ok 1 - setup

expecting success of 1007.2 'multiple '--stdin's are rejected': 
	echo example | test_must_fail git hash-object --stdin --stdin

error: Multiple --stdin arguments are not supported
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

ok 2 - multiple '--stdin's are rejected

expecting success of 1007.3 'Can't use --stdin and --stdin-paths together': 
	echo example | test_must_fail git hash-object --stdin --stdin-paths &&
	echo example | test_must_fail git hash-object --stdin-paths --stdin

error: Can't use --stdin-paths with --stdin
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

error: Can't use --stdin-paths with --stdin
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

ok 3 - Can't use --stdin and --stdin-paths together

expecting success of 1007.4 'Can't pass filenames as arguments with --stdin-paths': 
	echo example | test_must_fail git hash-object --stdin-paths hello

error: Can't specify files with --stdin-paths
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

ok 4 - Can't pass filenames as arguments with --stdin-paths

expecting success of 1007.5 'Can't use --path with --stdin-paths': 
	echo example | test_must_fail git hash-object --stdin-paths --path=foo

error: Can't use --stdin-paths with --path
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

ok 5 - Can't use --path with --stdin-paths

expecting success of 1007.6 'Can't use --path with --no-filters': 
	test_must_fail git hash-object --no-filters --path=foo

error: Can't use --path with --no-filters
usage: git hash-object [-t <type>] [-w] [--path=<file> | --no-filters]
                       [--stdin [--literally]] [--] <file>...
   or: git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

    -t <type>             object type
    -w                    write the object into the object database
    --stdin               read the object from stdin
    --stdin-paths         read file names from stdin
    --no-filters          store file as is without filters
    --literally           just hash any random garbage to create corrupt objects for debugging Git
    --path <file>         process file as it were from this path

ok 6 - Can't use --path with --no-filters

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/test/.git/
expecting success of 1007.7 'hash a file': 
	test "$(test_oid hello)" = $(git hash-object hello)

ok 7 - hash a file

expecting success of 1007.8 'blob does not exist in database': 
		test_must_fail git cat-file blob 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
	
fatal: git cat-file 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689: bad file
ok 8 - blob does not exist in database

expecting success of 1007.9 'hash from stdin': 
	test "$(test_oid example)" = $(git hash-object --stdin < example)

ok 9 - hash from stdin

expecting success of 1007.10 'blob does not exist in database': 
		test_must_fail git cat-file blob ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	
fatal: git cat-file ddd3f836d3e3fbb7ae289aa9ae83536f76956399: bad file
ok 10 - blob does not exist in database

expecting success of 1007.11 'hash a file and write to database': 
	test "$(test_oid hello)" = $(git hash-object -w hello)

ok 11 - hash a file and write to database

expecting success of 1007.12 'blob exists in database': 
		git cat-file blob 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
	
Hello Worldok 12 - blob exists in database

expecting success of 1007.13 'git hash-object --stdin file1 <file0 first operates on file0, then file1': 
	echo foo > file1 &&
	obname0=$(echo bar | git hash-object --stdin) &&
	obname1=$(git hash-object file1) &&
	obname0new=$(echo bar | git hash-object --stdin file1 | sed -n -e 1p) &&
	obname1new=$(echo bar | git hash-object --stdin file1 | sed -n -e 2p) &&
	test "$obname0" = "$obname0new" &&
	test "$obname1" = "$obname1new"

ok 13 - git hash-object --stdin file1 <file0 first operates on file0, then file1

expecting success of 1007.14 'set up crlf tests': 
	echo fooQ | tr Q "\\015" >file0 &&
	cp file0 file1 &&
	echo "file0 -crlf" >.gitattributes &&
	echo "file1 crlf" >>.gitattributes &&
	git config core.autocrlf true &&
	file0_sha=$(git hash-object file0) &&
	file1_sha=$(git hash-object file1) &&
	test "$file0_sha" != "$file1_sha"

ok 14 - set up crlf tests

expecting success of 1007.15 'check that appropriate filter is invoke when --path is used': 
	path1_sha=$(git hash-object --path=file1 file0) &&
	path0_sha=$(git hash-object --path=file0 file1) &&
	test "$file0_sha" = "$path0_sha" &&
	test "$file1_sha" = "$path1_sha" &&
	path1_sha=$(cat file0 | git hash-object --path=file1 --stdin) &&
	path0_sha=$(cat file1 | git hash-object --path=file0 --stdin) &&
	test "$file0_sha" = "$path0_sha" &&
	test "$file1_sha" = "$path1_sha"

ok 15 - check that appropriate filter is invoke when --path is used

expecting success of 1007.16 'gitattributes also work in a subdirectory': 
	mkdir subdir &&
	(
		cd subdir &&
		subdir_sha0=$(git hash-object ../file0) &&
		subdir_sha1=$(git hash-object ../file1) &&
		test "$file0_sha" = "$subdir_sha0" &&
		test "$file1_sha" = "$subdir_sha1"
	)

ok 16 - gitattributes also work in a subdirectory

expecting success of 1007.17 '--path works in a subdirectory': 
	(
		cd subdir &&
		path1_sha=$(git hash-object --path=../file1 ../file0) &&
		path0_sha=$(git hash-object --path=../file0 ../file1) &&
		test "$file0_sha" = "$path0_sha" &&
		test "$file1_sha" = "$path1_sha"
	)

ok 17 - --path works in a subdirectory

expecting success of 1007.18 'check that --no-filters option works': 
	nofilters_file1=$(git hash-object --no-filters file1) &&
	test "$file0_sha" = "$nofilters_file1" &&
	nofilters_file1=$(cat file1 | git hash-object --stdin) &&
	test "$file0_sha" = "$nofilters_file1"

ok 18 - check that --no-filters option works

expecting success of 1007.19 'check that --no-filters option works with --stdin-paths': 
	nofilters_file1=$(echo "file1" | git hash-object --stdin-paths --no-filters) &&
	test "$file0_sha" = "$nofilters_file1"

ok 19 - check that --no-filters option works with --stdin-paths

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/test/.git/
expecting success of 1007.20 'hash from stdin and write to database (-w --stdin)': 
		test "$(test_oid example)" = $(git hash-object $args < example)
	
ok 20 - hash from stdin and write to database (-w --stdin)

expecting success of 1007.21 'blob exists in database': 
		git cat-file blob ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	
This is an exampleok 21 - blob exists in database

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/test/.git/
expecting success of 1007.22 'hash from stdin and write to database (--stdin -w)': 
		test "$(test_oid example)" = $(git hash-object $args < example)
	
ok 22 - hash from stdin and write to database (--stdin -w)

expecting success of 1007.23 'blob exists in database': 
		git cat-file blob ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	
This is an exampleok 23 - blob exists in database

expecting success of 1007.24 'hash two files with names on stdin': 
	test "$oids" = "$(echo_without_newline "$filenames" | git hash-object --stdin-paths)"

ok 24 - hash two files with names on stdin

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/test/.git/
expecting success of 1007.25 'hash two files with names on stdin and write to database (-w --stdin-paths)': 
		test "$oids" = "$(echo_without_newline "$filenames" | git hash-object $args)"
	
ok 25 - hash two files with names on stdin and write to database (-w --stdin-paths)

expecting success of 1007.26 'blob exists in database': 
		git cat-file blob 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
	
Hello Worldok 26 - blob exists in database

expecting success of 1007.27 'blob exists in database': 
		git cat-file blob ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	
This is an exampleok 27 - blob exists in database

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1007-hash-object/test/.git/
expecting success of 1007.28 'hash two files with names on stdin and write to database (--stdin-paths -w)': 
		test "$oids" = "$(echo_without_newline "$filenames" | git hash-object $args)"
	
ok 28 - hash two files with names on stdin and write to database (--stdin-paths -w)

expecting success of 1007.29 'blob exists in database': 
		git cat-file blob 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
	
Hello Worldok 29 - blob exists in database

expecting success of 1007.30 'blob exists in database': 
		git cat-file blob ddd3f836d3e3fbb7ae289aa9ae83536f76956399
	
This is an exampleok 30 - blob exists in database

expecting success of 1007.31 'too-short tree': 
	echo abc >malformed-tree &&
	test_must_fail git hash-object -t tree malformed-tree 2>err &&
	test_i18ngrep "too-short tree object" err

fatal: too-short tree object
ok 31 - too-short tree

expecting success of 1007.32 'malformed mode in tree': 
	hex_sha1=$(echo foo | git hash-object --stdin -w) &&
	bin_sha1=$(echo $hex_sha1 | hex2oct) &&
	printf "9100644 \0$bin_sha1" >tree-with-malformed-mode &&
	test_must_fail git hash-object -t tree tree-with-malformed-mode 2>err &&
	test_i18ngrep "malformed mode in tree entry" err

fatal: malformed mode in tree entry
ok 32 - malformed mode in tree

expecting success of 1007.33 'empty filename in tree': 
	hex_sha1=$(echo foo | git hash-object --stdin -w) &&
	bin_sha1=$(echo $hex_sha1 | hex2oct) &&
	printf "100644 \0$bin_sha1" >tree-with-empty-filename &&
	test_must_fail git hash-object -t tree tree-with-empty-filename 2>err &&
	test_i18ngrep "empty filename in tree entry" err

fatal: empty filename in tree entry
ok 33 - empty filename in tree

expecting success of 1007.34 'corrupt commit': 
	test_must_fail git hash-object -t commit --stdin </dev/null

error: bogus commit object 0000000000000000000000000000000000000000
fatal: corrupt commit
ok 34 - corrupt commit

expecting success of 1007.35 'corrupt tag': 
	test_must_fail git hash-object -t tag --stdin </dev/null

fatal: corrupt tag
ok 35 - corrupt tag

expecting success of 1007.36 'hash-object complains about bogus type name': 
	test_must_fail git hash-object -t bogus --stdin </dev/null

fatal: invalid object type "bogus"
ok 36 - hash-object complains about bogus type name

expecting success of 1007.37 'hash-object complains about truncated type name': 
	test_must_fail git hash-object -t bl --stdin </dev/null

fatal: invalid object type "bl"
ok 37 - hash-object complains about truncated type name

expecting success of 1007.38 '--literally': 
	t=1234567890 &&
	echo example | git hash-object -t $t --literally --stdin

f78b23c3f872d473c764d5fcf4fb39af8bbf2123
ok 38 - --literally

expecting success of 1007.39 '--literally with extra-long type': 
	t=12345678901234567890123456789012345678901234567890 &&
	t="$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t$t" &&
	echo example | git hash-object -t $t --literally --stdin

2a881776ee43e849175ee7158075560ca0ae7692
ok 39 - --literally with extra-long type

# passed all 39 test(s)
1..39
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0450-txt-doc-vs-help.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0450-txt-doc-vs-help/.git/
expecting success of 0450.1 'setup: list of builtins': 
	git --list-cmds=builtins >builtins

ok 1 - setup: list of builtins

expecting success of 0450.2 'list of txt and help mismatches is sorted': 
	sort -u "$TEST_DIRECTORY"/t0450/txt-help-mismatches >expect &&
	if ! test_cmp expect "$TEST_DIRECTORY"/t0450/txt-help-mismatches
	then
		BUG "please keep the list of txt and help mismatches sorted"
	fi

ok 2 - list of txt and help mismatches is sorted

expecting success of 0450.3 'add -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 3 - add -h output has no \t

expecting success of 0450.4 'add -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 4 - add -h output has dashed labels

expecting success of 0450.5 'add -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 5 - add -h output has consistent spacing

expecting success of 0450.6 'add *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 6 - add *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.7 'add -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:33.873923075 +0000
+++ help	2022-12-28 07:31:33.903924186 +0000
@@ -1,5 +1 @@
-git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
-        [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--sparse]
-        [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
-        [--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
-        [--] [<pathspec>...]
+git add [<options>] [--] <pathspec>...
not ok 7 - add -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.8 'am -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 8 - am -h output has no \t

expecting success of 0450.9 'am -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 9 - am -h output has dashed labels

expecting success of 0450.10 'am -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 10 - am -h output has consistent spacing

expecting success of 0450.11 'am *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 11 - am *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.12 'am -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:34.178934363 +0000
+++ help	2022-12-28 07:31:34.208935474 +0000
@@ -1,10 +1,2 @@
-git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8]
-       [--[no-]3way] [--interactive] [--committer-date-is-author-date]
-       [--ignore-date] [--ignore-space-change | --ignore-whitespace]
-       [--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
-       [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
-       [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
-       [--quoted-cr=<action>]
-       [--empty=(stop|drop|keep)]
-       [(<mbox> | <Maildir>)...]
-git am (--continue | --skip | --abort | --quit | --show-current-patch[=(diff|raw)] | --allow-empty)
+git am [<options>] [(<mbox> | <Maildir>)...]
+git am [<options>] (--continue | --skip | --abort)
not ok 12 - am -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.13 'annotate -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 13 - annotate -h output has no \t

expecting success of 0450.14 'annotate -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 14 - annotate -h output has dashed labels

expecting success of 0450.15 'annotate -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 15 - annotate -h output has consistent spacing

expecting success of 0450.16 'annotate *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 16 - annotate *.txt SYNOPSIS has dashed labels

expecting success of 0450.17 'annotate -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 17 - annotate -h output and SYNOPSIS agree

expecting success of 0450.18 'apply -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 18 - apply -h output has no \t

expecting success of 0450.19 'apply -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 19 - apply -h output has dashed labels

expecting success of 0450.20 'apply -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 20 - apply -h output has consistent spacing

expecting success of 0450.21 'apply *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 21 - apply *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.22 'apply -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:34.748955459 +0000
+++ help	2022-12-28 07:31:34.783956754 +0000
@@ -1,8 +1 @@
-git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way]
-          [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
-          [--allow-binary-replacement | --binary] [--reject] [-z]
-          [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
-          [--ignore-space-change | --ignore-whitespace]
-          [--whitespace=(nowarn|warn|fix|error|error-all)]
-          [--exclude=<path>] [--include=<path>] [--directory=<root>]
-          [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>...]
+git apply [<options>] [<patch>...]
not ok 22 - apply -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.23 'archive -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 23 - archive -h output has no \t

expecting success of 0450.24 'archive -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 24 - archive -h output has dashed labels

expecting success of 0450.25 'archive -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 25 - archive -h output has consistent spacing

expecting success of 0450.26 'archive *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 26 - archive *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.27 'archive -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:35.053966747 +0000
+++ help	2022-12-28 07:31:35.078967672 +0000
@@ -1,4 +1,4 @@
-git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
-            [-o <file> | --output=<file>] [--worktree-attributes]
-            [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
-            [<path>...]
+git archive [<options>] <tree-ish> [<path>...]
+git archive --list
+git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]
+git archive --remote <repo> [--exec <cmd>] --list
not ok 27 - archive -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.28 'bisect--helper -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 28 - bisect--helper -h output has no \t

expecting success of 0450.29 'bisect--helper -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 29 - bisect--helper -h output has dashed labels

expecting success of 0450.30 'bisect--helper -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 30 - bisect--helper -h output has consistent spacing

ok 31 # skip bisect--helper *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_BISECT__HELPER)

ok 32 # skip bisect--helper -h output and SYNOPSIS agree (missing BUILTIN_TXT_BISECT__HELPER)

expecting success of 0450.33 'blame -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 33 - blame -h output has no \t

expecting success of 0450.34 'blame -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 34 - blame -h output has dashed labels

expecting success of 0450.35 'blame -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 35 - blame -h output has consistent spacing

expecting success of 0450.36 'blame *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 36 - blame *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.37 'blame -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:35.488982846 +0000
+++ help	2022-12-28 07:31:35.523984141 +0000
@@ -1,5 +1 @@
-git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
-          [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
-          [--ignore-rev <rev>] [--ignore-revs-file <file>]
-          [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
-          [<rev> | --contents <file> | --reverse <rev>..<rev>] [--] <file>
+git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
not ok 37 - blame -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.38 'branch -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 38 - branch -h output has no \t

expecting success of 0450.39 'branch -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 39 - branch -h output has dashed labels

expecting success of 0450.40 'branch -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 40 - branch -h output has consistent spacing

expecting success of 0450.41 'branch *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 41 - branch *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.42 'branch -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:35.778993578 +0000
+++ help	2022-12-28 07:31:35.808994689 +0000
@@ -1,16 +1,8 @@
-git branch [--color[=<when>] | --no-color] [--show-current]
-           [-v [--abbrev=<n> | --no-abbrev]]
-           [--column[=<options>] | --no-column] [--sort=<key>]
-           [--merged [<commit>]] [--no-merged [<commit>]]
-           [--contains [<commit>]] [--no-contains [<commit>]]
-           [--points-at <object>] [--format=<format>]
-           [(-r | --remotes) | (-a | --all)]
-           [--list] [<pattern>...]
-git branch [--track[=(direct|inherit)] | --no-track] [-f]
-           [--recurse-submodules] <branchname> [<start-point>]
-git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
-git branch --unset-upstream [<branchname>]
-git branch (-m | -M) [<oldbranch>] <newbranch>
-git branch (-c | -C) [<oldbranch>] <newbranch>
-git branch (-d | -D) [-r] <branchname>...
-git branch --edit-description [<branchname>]
+git branch [<options>] [-r | -a] [--merged] [--no-merged]
+git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
+git branch [<options>] [-l] [<pattern>...]
+git branch [<options>] [-r] (-d | -D) <branch-name>...
+git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
+git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
+git branch [<options>] [-r | -a] [--points-at]
+git branch [<options>] [-r | -a] [--format]
not ok 42 - branch -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.43 'bugreport -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 43 - bugreport -h output has no \t

expecting success of 0450.44 'bugreport -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 44 - bugreport -h output has dashed labels

expecting success of 0450.45 'bugreport -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 45 - bugreport -h output has consistent spacing

expecting success of 0450.46 'bugreport *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 46 - bugreport *.txt SYNOPSIS has dashed labels

expecting success of 0450.47 'bugreport -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 47 - bugreport -h output and SYNOPSIS agree

expecting success of 0450.48 'bundle -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 48 - bundle -h output has no \t

expecting success of 0450.49 'bundle -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 49 - bundle -h output has dashed labels

expecting success of 0450.50 'bundle -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 50 - bundle -h output has consistent spacing

expecting success of 0450.51 'bundle *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 51 - bundle *.txt SYNOPSIS has dashed labels

expecting success of 0450.52 'bundle -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 52 - bundle -h output and SYNOPSIS agree

expecting success of 0450.53 'cat-file -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 53 - cat-file -h output has no \t

expecting success of 0450.54 'cat-file -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 54 - cat-file -h output has dashed labels

expecting success of 0450.55 'cat-file -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 55 - cat-file -h output has consistent spacing

expecting success of 0450.56 'cat-file *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 56 - cat-file *.txt SYNOPSIS has dashed labels

expecting success of 0450.57 'cat-file -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 57 - cat-file -h output and SYNOPSIS agree

expecting success of 0450.58 'check-attr -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 58 - check-attr -h output has no \t

expecting success of 0450.59 'check-attr -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 59 - check-attr -h output has dashed labels

expecting success of 0450.60 'check-attr -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 60 - check-attr -h output has consistent spacing

expecting success of 0450.61 'check-attr *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 61 - check-attr *.txt SYNOPSIS has dashed labels

expecting success of 0450.62 'check-attr -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 62 - check-attr -h output and SYNOPSIS agree

expecting success of 0450.63 'check-ignore -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 63 - check-ignore -h output has no \t

expecting success of 0450.64 'check-ignore -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 64 - check-ignore -h output has dashed labels

expecting success of 0450.65 'check-ignore -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 65 - check-ignore -h output has consistent spacing

expecting success of 0450.66 'check-ignore *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 66 - check-ignore *.txt SYNOPSIS has dashed labels

expecting success of 0450.67 'check-ignore -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 67 - check-ignore -h output and SYNOPSIS agree

expecting success of 0450.68 'check-mailmap -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 68 - check-mailmap -h output has no \t

expecting success of 0450.69 'check-mailmap -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 69 - check-mailmap -h output has dashed labels

expecting success of 0450.70 'check-mailmap -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 70 - check-mailmap -h output has consistent spacing

expecting success of 0450.71 'check-mailmap *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 71 - check-mailmap *.txt SYNOPSIS has dashed labels

expecting success of 0450.72 'check-mailmap -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 72 - check-mailmap -h output and SYNOPSIS agree

expecting success of 0450.73 'check-ref-format -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 73 - check-ref-format -h output has no \t

expecting success of 0450.74 'check-ref-format -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 74 - check-ref-format -h output has dashed labels

expecting success of 0450.75 'check-ref-format -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 75 - check-ref-format -h output has consistent spacing

expecting success of 0450.76 'check-ref-format *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 76 - check-ref-format *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.77 'check-ref-format -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:37.864070742 +0000
+++ help	2022-12-28 07:31:37.899072038 +0000
@@ -1,4 +1,2 @@
-git check-ref-format [--normalize]
-                     [--[no-]allow-onelevel] [--refspec-pattern]
-                     <refname>
+git check-ref-format [--normalize] [<options>] <refname>
 git check-ref-format --branch <branchname-shorthand>
not ok 77 - check-ref-format -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.78 'checkout -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 78 - checkout -h output has no \t

expecting success of 0450.79 'checkout -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 79 - checkout -h output has dashed labels

expecting success of 0450.80 'checkout -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 80 - checkout -h output has consistent spacing

expecting success of 0450.81 'checkout *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 81 - checkout *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.82 'checkout -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:38.179082400 +0000
+++ help	2022-12-28 07:31:38.204083325 +0000
@@ -1,7 +1,2 @@
-git checkout [-q] [-f] [-m] [<branch>]
-git checkout [-q] [-f] [-m] --detach [<branch>]
-git checkout [-q] [-f] [-m] [--detach] <commit>
-git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]
-git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>...
-git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] --pathspec-from-file=<file> [--pathspec-file-nul]
-git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>...]
+git checkout [<options>] <branch>
+git checkout [<options>] [<branch>] -- <file>...
not ok 82 - checkout -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.83 'checkout--worker -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 83 - checkout--worker -h output has no \t

expecting success of 0450.84 'checkout--worker -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 84 - checkout--worker -h output has dashed labels

expecting success of 0450.85 'checkout--worker -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 85 - checkout--worker -h output has consistent spacing

ok 86 # skip checkout--worker *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_CHECKOUT__WORKER)

ok 87 # skip checkout--worker -h output and SYNOPSIS agree (missing BUILTIN_TXT_CHECKOUT__WORKER)

expecting success of 0450.88 'checkout-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 88 - checkout-index -h output has no \t

expecting success of 0450.89 'checkout-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 89 - checkout-index -h output has dashed labels

expecting success of 0450.90 'checkout-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 90 - checkout-index -h output has consistent spacing

expecting success of 0450.91 'checkout-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 91 - checkout-index *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.92 'checkout-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:38.674100720 +0000
+++ help	2022-12-28 07:31:38.709102015 +0000
@@ -1,6 +1 @@
-git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
-                   [--stage=<number>|all]
-                   [--temp]
-                   [--ignore-skip-worktree-bits]
-                   [-z] [--stdin]
-                   [--] [<file>...]
+git checkout-index [<options>] [--] [<file>...]
not ok 92 - checkout-index -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.93 'cherry -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 93 - cherry -h output has no \t

expecting success of 0450.94 'cherry -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 94 - cherry -h output has dashed labels

expecting success of 0450.95 'cherry -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 95 - cherry -h output has consistent spacing

expecting success of 0450.96 'cherry *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 96 - cherry *.txt SYNOPSIS has dashed labels

expecting success of 0450.97 'cherry -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 97 - cherry -h output and SYNOPSIS agree

expecting success of 0450.98 'cherry-pick -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 98 - cherry-pick -h output has no \t

expecting success of 0450.99 'cherry-pick -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 99 - cherry-pick -h output has dashed labels

expecting success of 0450.100 'cherry-pick -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 100 - cherry-pick -h output has consistent spacing

expecting success of 0450.101 'cherry-pick *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 101 - cherry-pick *.txt SYNOPSIS has dashed labels

expecting success of 0450.102 'cherry-pick -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 102 - cherry-pick -h output and SYNOPSIS agree

expecting success of 0450.103 'clean -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 103 - clean -h output has no \t

expecting success of 0450.104 'clean -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 104 - clean -h output has dashed labels

expecting success of 0450.105 'clean -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 105 - clean -h output has consistent spacing

expecting success of 0450.106 'clean *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 106 - clean *.txt SYNOPSIS has dashed labels

expecting success of 0450.107 'clean -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 107 - clean -h output and SYNOPSIS agree

expecting success of 0450.108 'clone -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 108 - clone -h output has no \t

expecting success of 0450.109 'clone -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 109 - clone -h output has dashed labels

expecting success of 0450.110 'clone -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 110 - clone -h output has consistent spacing

expecting success of 0450.111 'clone *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 111 - clone *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.112 'clone -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:39.959148276 +0000
+++ help	2022-12-28 07:31:39.984149201 +0000
@@ -1,9 +1 @@
-git clone [--template=<template-directory>]
-          [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
-          [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
-          [--dissociate] [--separate-git-dir <git-dir>]
-          [--depth <depth>] [--[no-]single-branch] [--no-tags]
-          [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
-          [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
-          [--filter=<filter> [--also-filter-submodules]] [--] <repository>
-          [<directory>]
+git clone [<options>] [--] <repo> [<dir>]
not ok 112 - clone -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.113 'column -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 113 - column -h output has no \t

expecting success of 0450.114 'column -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 114 - column -h output has dashed labels

expecting success of 0450.115 'column -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 115 - column -h output has consistent spacing

expecting success of 0450.116 'column *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 116 - column *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.117 'column -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:40.254159193 +0000
+++ help	2022-12-28 07:31:40.284160304 +0000
@@ -1,2 +1 @@
-git column [--command=<name>] [--[raw-]mode=<mode>] [--width=<width>]
-           [--indent=<string>] [--nl=<string>] [--padding=<n>]
+git column [<options>]
not ok 117 - column -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.118 'commit -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 118 - commit -h output has no \t

expecting success of 0450.119 'commit -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 119 - commit -h output has dashed labels

expecting success of 0450.120 'commit -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 120 - commit -h output has consistent spacing

expecting success of 0450.121 'commit *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 121 - commit *.txt SYNOPSIS has dashed labels

expecting success of 0450.122 'commit -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 122 - commit -h output and SYNOPSIS agree

expecting success of 0450.123 'commit-graph -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 123 - commit-graph -h output has no \t

expecting success of 0450.124 'commit-graph -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 124 - commit-graph -h output has dashed labels

expecting success of 0450.125 'commit-graph -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 125 - commit-graph -h output has consistent spacing

expecting success of 0450.126 'commit-graph *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 126 - commit-graph *.txt SYNOPSIS has dashed labels

expecting success of 0450.127 'commit-graph -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 127 - commit-graph -h output and SYNOPSIS agree

expecting success of 0450.128 'commit-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 128 - commit-tree -h output has no \t

expecting success of 0450.129 'commit-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 129 - commit-tree -h output has dashed labels

expecting success of 0450.130 'commit-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 130 - commit-tree -h output has consistent spacing

expecting success of 0450.131 'commit-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 131 - commit-tree *.txt SYNOPSIS has dashed labels

expecting success of 0450.132 'commit-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 132 - commit-tree -h output and SYNOPSIS agree

expecting success of 0450.133 'config -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 133 - config -h output has no \t

expecting success of 0450.134 'config -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 134 - config -h output has dashed labels

expecting success of 0450.135 'config -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 135 - config -h output has consistent spacing

expecting success of 0450.136 'config *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 136 - config *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.137 'config -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:41.499205269 +0000
+++ help	2022-12-28 07:31:41.529206379 +0000
@@ -1,15 +1 @@
-git config [<file-option>] [--type=<type>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] <name> [<value> [<value-pattern>]]
-git config [<file-option>] [--type=<type>] --add <name> <value>
-git config [<file-option>] [--type=<type>] [--fixed-value] --replace-all <name> <value> [<value-pattern>]
-git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get <name> [<value-pattern>]
-git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get-all <name> [<value-pattern>]
-git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] [--name-only] --get-regexp <name-regex> [<value-pattern>]
-git config [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch <name> <URL>
-git config [<file-option>] [--fixed-value] --unset <name> [<value-pattern>]
-git config [<file-option>] [--fixed-value] --unset-all <name> [<value-pattern>]
-git config [<file-option>] --rename-section <old-name> <new-name>
-git config [<file-option>] --remove-section <name>
-git config [<file-option>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list
-git config [<file-option>] --get-color <name> [<default>]
-git config [<file-option>] --get-colorbool <name> [<stdout-is-tty>]
-git config [<file-option>] -e | --edit
+git config [<options>]
not ok 137 - config -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.138 'count-objects -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 138 - count-objects -h output has no \t

expecting success of 0450.139 'count-objects -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 139 - count-objects -h output has dashed labels

expecting success of 0450.140 'count-objects -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 140 - count-objects -h output has consistent spacing

expecting success of 0450.141 'count-objects *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 141 - count-objects *.txt SYNOPSIS has dashed labels

expecting success of 0450.142 'count-objects -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 142 - count-objects -h output and SYNOPSIS agree

expecting success of 0450.143 'credential -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 143 - credential -h output has no \t

expecting success of 0450.144 'credential -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 144 - credential -h output has dashed labels

expecting success of 0450.145 'credential -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 145 - credential -h output has consistent spacing

expecting success of 0450.146 'credential *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 146 - credential *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.147 'credential -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:42.049225623 +0000
+++ help	2022-12-28 07:31:42.104227659 +0000
@@ -0,0 +1 @@
+git credential (fill|approve|reject)
not ok 147 - credential -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.148 'credential-cache -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 148 - credential-cache -h output has no \t

expecting success of 0450.149 'credential-cache -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 149 - credential-cache -h output has dashed labels

expecting success of 0450.150 'credential-cache -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 150 - credential-cache -h output has consistent spacing

expecting success of 0450.151 'credential-cache *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 151 - credential-cache *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.152 'credential-cache -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:42.344236541 +0000
+++ help	2022-12-28 07:31:42.459240797 +0000
@@ -0,0 +1 @@
+git credential-cache [<options>] <action>
not ok 152 - credential-cache -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.153 'credential-cache--daemon -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 153 - credential-cache--daemon -h output has no \t

expecting success of 0450.154 'credential-cache--daemon -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 154 - credential-cache--daemon -h output has dashed labels

expecting success of 0450.155 'credential-cache--daemon -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 155 - credential-cache--daemon -h output has consistent spacing

expecting success of 0450.156 'credential-cache--daemon *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 156 - credential-cache--daemon *.txt SYNOPSIS has dashed labels

expecting success of 0450.157 'credential-cache--daemon -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 157 - credential-cache--daemon -h output and SYNOPSIS agree

expecting success of 0450.158 'credential-store -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 158 - credential-store -h output has no \t

expecting success of 0450.159 'credential-store -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 159 - credential-store -h output has dashed labels

expecting success of 0450.160 'credential-store -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 160 - credential-store -h output has consistent spacing

expecting success of 0450.161 'credential-store *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 161 - credential-store *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.162 'credential-store -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:42.999260781 +0000
+++ help	2022-12-28 07:31:43.054262817 +0000
@@ -0,0 +1 @@
+git credential-store [<options>] <action>
not ok 162 - credential-store -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.163 'describe -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 163 - describe -h output has no \t

expecting success of 0450.164 'describe -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 164 - describe -h output has dashed labels

expecting success of 0450.165 'describe -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 165 - describe -h output has consistent spacing

expecting success of 0450.166 'describe *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 166 - describe *.txt SYNOPSIS has dashed labels

expecting success of 0450.167 'describe -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 167 - describe -h output and SYNOPSIS agree

expecting success of 0450.168 'diagnose -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 168 - diagnose -h output has no \t

expecting success of 0450.169 'diagnose -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 169 - diagnose -h output has dashed labels

expecting success of 0450.170 'diagnose -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 170 - diagnose -h output has consistent spacing

expecting success of 0450.171 'diagnose *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 171 - diagnose *.txt SYNOPSIS has dashed labels

expecting success of 0450.172 'diagnose -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 172 - diagnose -h output and SYNOPSIS agree

expecting success of 0450.173 'diff -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 173 - diff -h output has no \t

expecting success of 0450.174 'diff -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 174 - diff -h output has dashed labels

expecting success of 0450.175 'diff -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 175 - diff -h output has consistent spacing

expecting success of 0450.176 'diff *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 176 - diff *.txt SYNOPSIS has dashed labels

expecting success of 0450.177 'diff -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 177 - diff -h output and SYNOPSIS agree

expecting success of 0450.178 'diff-files -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 178 - diff-files -h output has no \t

expecting success of 0450.179 'diff-files -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 179 - diff-files -h output has dashed labels

expecting success of 0450.180 'diff-files -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 180 - diff-files -h output has consistent spacing

expecting success of 0450.181 'diff-files *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 181 - diff-files *.txt SYNOPSIS has dashed labels

expecting success of 0450.182 'diff-files -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 182 - diff-files -h output and SYNOPSIS agree

expecting success of 0450.183 'diff-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 183 - diff-index -h output has no \t

expecting success of 0450.184 'diff-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 184 - diff-index -h output has dashed labels

expecting success of 0450.185 'diff-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 185 - diff-index -h output has consistent spacing

expecting success of 0450.186 'diff-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 186 - diff-index *.txt SYNOPSIS has dashed labels

expecting success of 0450.187 'diff-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 187 - diff-index -h output and SYNOPSIS agree

expecting success of 0450.188 'diff-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 188 - diff-tree -h output has no \t

expecting success of 0450.189 'diff-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 189 - diff-tree -h output has dashed labels

expecting success of 0450.190 'diff-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 190 - diff-tree -h output has consistent spacing

expecting success of 0450.191 'diff-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 191 - diff-tree *.txt SYNOPSIS has dashed labels

expecting success of 0450.192 'diff-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 192 - diff-tree -h output and SYNOPSIS agree

expecting success of 0450.193 'difftool -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 193 - difftool -h output has no \t

expecting success of 0450.194 'difftool -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 194 - difftool -h output has dashed labels

expecting success of 0450.195 'difftool -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 195 - difftool -h output has consistent spacing

expecting success of 0450.196 'difftool *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 196 - difftool *.txt SYNOPSIS has dashed labels

expecting success of 0450.197 'difftool -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 197 - difftool -h output and SYNOPSIS agree

expecting success of 0450.198 'env--helper -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 198 - env--helper -h output has no \t

expecting success of 0450.199 'env--helper -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 199 - env--helper -h output has dashed labels

expecting success of 0450.200 'env--helper -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 200 - env--helper -h output has consistent spacing

ok 201 # skip env--helper *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_ENV__HELPER)

ok 202 # skip env--helper -h output and SYNOPSIS agree (missing BUILTIN_TXT_ENV__HELPER)

expecting success of 0450.203 'fast-export -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 203 - fast-export -h output has no \t

expecting success of 0450.204 'fast-export -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 204 - fast-export -h output has dashed labels

expecting success of 0450.205 'fast-export -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 205 - fast-export -h output has consistent spacing

expecting success of 0450.206 'fast-export *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 206 - fast-export *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.207 'fast-export -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:45.564355707 +0000
+++ help	2022-12-28 07:31:45.594356817 +0000
@@ -1 +1 @@
-git fast-export [<options>] | git fast-import
+git fast-export [<rev-list-opts>]
not ok 207 - fast-export -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.208 'fast-import -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 208 - fast-import -h output has no \t

expecting success of 0450.209 'fast-import -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 209 - fast-import -h output has dashed labels

expecting success of 0450.210 'fast-import -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 210 - fast-import -h output has consistent spacing

expecting success of 0450.211 'fast-import *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 211 - fast-import *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.212 'fast-import -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:45.839365884 +0000
+++ help	2022-12-28 07:31:45.869366994 +0000
@@ -1 +1 @@
-frontend | git fast-import [<options>]
+git fast-import [--date-format=<f>] [--max-pack-size=<n>] [--big-file-threshold=<n>] [--depth=<n>] [--active-branches=<n>] [--export-marks=<marks.file>]
not ok 212 - fast-import -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.213 'fetch -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 213 - fetch -h output has no \t

expecting success of 0450.214 'fetch -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 214 - fetch -h output has dashed labels

expecting success of 0450.215 'fetch -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 215 - fetch -h output has consistent spacing

expecting success of 0450.216 'fetch *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 216 - fetch *.txt SYNOPSIS has dashed labels

expecting success of 0450.217 'fetch -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 217 - fetch -h output and SYNOPSIS agree

expecting success of 0450.218 'fetch-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 218 - fetch-pack -h output has no \t

expecting success of 0450.219 'fetch-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 219 - fetch-pack -h output has dashed labels

expecting success of 0450.220 'fetch-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 220 - fetch-pack -h output has consistent spacing

expecting success of 0450.221 'fetch-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 221 - fetch-pack *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.222 'fetch-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:46.484389754 +0000
+++ help	2022-12-28 07:31:46.514390864 +0000
@@ -1,4 +1 @@
-git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag]
-               [--upload-pack=<git-upload-pack>]
-               [--depth=<n>] [--no-progress]
-               [-v] <repository> [<refs>...]
+git fetch-pack [--all] [--stdin] [--quiet | -q] [--keep | -k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [--diag-url] [-v] [<host>:]<directory> [<refs>...]
not ok 222 - fetch-pack -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.223 'fmt-merge-msg -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 223 - fmt-merge-msg -h output has no \t

expecting success of 0450.224 'fmt-merge-msg -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 224 - fmt-merge-msg -h output has dashed labels

expecting success of 0450.225 'fmt-merge-msg -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 225 - fmt-merge-msg -h output has consistent spacing

expecting success of 0450.226 'fmt-merge-msg *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 226 - fmt-merge-msg *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.227 'fmt-merge-msg -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:46.819402151 +0000
+++ help	2022-12-28 07:31:46.854403447 +0000
@@ -1,2 +1 @@
-git fmt-merge-msg [-m <message>] [--into-name <branch>] [--log[=<n>] | --no-log]
-git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] -F <file>
+git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]
not ok 227 - fmt-merge-msg -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.228 'for-each-ref -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 228 - for-each-ref -h output has no \t

expecting success of 0450.229 'for-each-ref -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 229 - for-each-ref -h output has dashed labels

expecting success of 0450.230 'for-each-ref -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 230 - for-each-ref -h output has consistent spacing

expecting success of 0450.231 'for-each-ref *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 231 - for-each-ref *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.232 'for-each-ref -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:47.119413254 +0000
+++ help	2022-12-28 07:31:47.149414364 +0000
@@ -1,5 +1,4 @@
-git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
-                 [(--sort=<key>)...] [--format=<format>] [<pattern>...]
-                 [--points-at=<object>]
-                 [--merged[=<object>]] [--no-merged[=<object>]]
-                 [--contains[=<object>]] [--no-contains[=<object>]]
+git for-each-ref [<options>] [<pattern>]
+git for-each-ref [--points-at <object>]
+git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]
+git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]
not ok 232 - for-each-ref -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.233 'for-each-repo -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 233 - for-each-repo -h output has no \t

expecting success of 0450.234 'for-each-repo -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 234 - for-each-repo -h output has dashed labels

expecting success of 0450.235 'for-each-repo -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 235 - for-each-repo -h output has consistent spacing

expecting success of 0450.236 'for-each-repo *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 236 - for-each-repo *.txt SYNOPSIS has dashed labels

expecting success of 0450.237 'for-each-repo -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 237 - for-each-repo -h output and SYNOPSIS agree

expecting success of 0450.238 'format-patch -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 238 - format-patch -h output has no \t

expecting success of 0450.239 'format-patch -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 239 - format-patch -h output has dashed labels

expecting success of 0450.240 'format-patch -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 240 - format-patch -h output has consistent spacing

expecting success of 0450.241 'format-patch *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 241 - format-patch *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.242 'format-patch -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:47.684434163 +0000
+++ help	2022-12-28 07:31:47.719435458 +0000
@@ -1,23 +1 @@
-git format-patch [-k] [(-o|--output-directory) <dir> | --stdout]
-                 [--no-thread | --thread[=<style>]]
-                 [(--attach|--inline)[=<boundary>] | --no-attach]
-                 [-s | --signoff]
-                 [--signature=<signature> | --no-signature]
-                 [--signature-file=<file>]
-                 [-n | --numbered | -N | --no-numbered]
-                 [--start-number <n>] [--numbered-files]
-                 [--in-reply-to=<message id>] [--suffix=.<sfx>]
-                 [--ignore-if-in-upstream] [--always]
-                 [--cover-from-description=<mode>]
-                 [--rfc] [--subject-prefix=<subject prefix>]
-                 [(--reroll-count|-v) <n>]
-                 [--to=<email>] [--cc=<email>]
-                 [--[no-]cover-letter] [--quiet]
-                 [--[no-]encode-email-headers]
-                 [--no-notes | --notes[=<ref>]]
-                 [--interdiff=<previous>]
-                 [--range-diff=<previous> [--creation-factor=<percent>]]
-                 [--filename-max-length=<n>]
-                 [--progress]
-                 [<common diff options>]
-                 [ <since> | <revision range> ]
+git format-patch [<options>] [<since> | <revision-range>]
not ok 242 - format-patch -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.243 'fsck -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 243 - fsck -h output has no \t

expecting success of 0450.244 'fsck -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 244 - fsck -h output has dashed labels

expecting success of 0450.245 'fsck -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 245 - fsck -h output has consistent spacing

expecting success of 0450.246 'fsck *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 246 - fsck *.txt SYNOPSIS has dashed labels

expecting success of 0450.247 'fsck -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 247 - fsck -h output and SYNOPSIS agree

expecting success of 0450.248 'fsck-objects -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 248 - fsck-objects -h output has no \t

expecting success of 0450.249 'fsck-objects -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 249 - fsck-objects -h output has dashed labels

expecting success of 0450.250 'fsck-objects -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 250 - fsck-objects -h output has consistent spacing

expecting success of 0450.251 'fsck-objects *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 251 - fsck-objects *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.252 'fsck-objects -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:48.319457662 +0000
+++ help	2022-12-28 07:31:48.349458773 +0000
@@ -1 +1,4 @@
-git fsck-objects ...
+git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
+                 [--[no-]full] [--strict] [--verbose] [--lost-found]
+                 [--[no-]dangling] [--[no-]progress] [--connectivity-only]
+                 [--[no-]name-objects] [<object>...]
not ok 252 - fsck-objects -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.253 'fsmonitor--daemon -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 253 - fsmonitor--daemon -h output has no \t

expecting success of 0450.254 'fsmonitor--daemon -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 254 - fsmonitor--daemon -h output has dashed labels

expecting success of 0450.255 'fsmonitor--daemon -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 255 - fsmonitor--daemon -h output has consistent spacing

expecting success of 0450.256 'fsmonitor--daemon *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 256 - fsmonitor--daemon *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.257 'fsmonitor--daemon -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:48.634469320 +0000
+++ help	2022-12-28 07:31:48.664470430 +0000
@@ -1,4 +1,4 @@
-git fsmonitor--daemon start
-git fsmonitor--daemon run
+git fsmonitor--daemon start [<options>]
+git fsmonitor--daemon run [<options>]
 git fsmonitor--daemon stop
 git fsmonitor--daemon status
not ok 257 - fsmonitor--daemon -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.258 'gc -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 258 - gc -h output has no \t

expecting success of 0450.259 'gc -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 259 - gc -h output has dashed labels

expecting success of 0450.260 'gc -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 260 - gc -h output has consistent spacing

expecting success of 0450.261 'gc *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 261 - gc *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.262 'gc -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:48.929480237 +0000
+++ help	2022-12-28 07:31:48.974481902 +0000
@@ -1 +1 @@
-git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] [--keep-largest-pack]
+git gc [<options>]
not ok 262 - gc -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.263 'get-tar-commit-id -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 263 - get-tar-commit-id -h output has no \t

expecting success of 0450.264 'get-tar-commit-id -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 264 - get-tar-commit-id -h output has dashed labels

expecting success of 0450.265 'get-tar-commit-id -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 265 - get-tar-commit-id -h output has consistent spacing

expecting success of 0450.266 'get-tar-commit-id *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 266 - get-tar-commit-id *.txt SYNOPSIS has dashed labels

expecting success of 0450.267 'get-tar-commit-id -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 267 - get-tar-commit-id -h output and SYNOPSIS agree

expecting success of 0450.268 'grep -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 268 - grep -h output has no \t

expecting success of 0450.269 'grep -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 269 - grep -h output has dashed labels

expecting success of 0450.270 'grep -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 270 - grep -h output has consistent spacing

expecting success of 0450.271 'grep *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 271 - grep *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.272 'grep -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:49.594504847 +0000
+++ help	2022-12-28 07:31:49.624505957 +0000
@@ -1,21 +1 @@
-git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
-         [-v | --invert-match] [-h|-H] [--full-name]
-         [-E | --extended-regexp] [-G | --basic-regexp]
-         [-P | --perl-regexp]
-         [-F | --fixed-strings] [-n | --line-number] [--column]
-         [-l | --files-with-matches] [-L | --files-without-match]
-         [(-O | --open-files-in-pager) [<pager>]]
-         [-z | --null]
-         [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
-         [--max-depth <depth>] [--[no-]recursive]
-         [--color[=<when>] | --no-color]
-         [--break] [--heading] [-p | --show-function]
-         [-A <post-context>] [-B <pre-context>] [-C <context>]
-         [-W | --function-context]
-         [(-m | --max-count) <num>]
-         [--threads <num>]
-         [-f <file>] [-e] <pattern>
-         [--and|--or|--not|(|)|-e <pattern>...]
-         [--recurse-submodules] [--parent-basename <basename>]
-         [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
-         [--] [<pathspec>...]
+git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]
not ok 272 - grep -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.273 'hash-object -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 273 - hash-object -h output has no \t

expecting success of 0450.274 'hash-object -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 274 - hash-object -h output has dashed labels

expecting success of 0450.275 'hash-object -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 275 - hash-object -h output has consistent spacing

expecting success of 0450.276 'hash-object *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 276 - hash-object *.txt SYNOPSIS has dashed labels

expecting success of 0450.277 'hash-object -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 277 - hash-object -h output and SYNOPSIS agree

expecting success of 0450.278 'help -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 278 - help -h output has no \t

expecting success of 0450.279 'help -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 279 - help -h output has dashed labels

expecting success of 0450.280 'help -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 280 - help -h output has consistent spacing

expecting success of 0450.281 'help *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 281 - help *.txt SYNOPSIS has dashed labels

expecting success of 0450.282 'help -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 282 - help -h output and SYNOPSIS agree

expecting success of 0450.283 'hook -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 283 - hook -h output has no \t

expecting success of 0450.284 'hook -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 284 - hook -h output has dashed labels

expecting success of 0450.285 'hook -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 285 - hook -h output has consistent spacing

expecting success of 0450.286 'hook *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 286 - hook *.txt SYNOPSIS has dashed labels

expecting success of 0450.287 'hook -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 287 - hook -h output and SYNOPSIS agree

expecting success of 0450.288 'index-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 288 - index-pack -h output has no \t

expecting success of 0450.289 'index-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 289 - index-pack -h output has dashed labels

expecting success of 0450.290 'index-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 290 - index-pack -h output has consistent spacing

expecting success of 0450.291 'index-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 291 - index-pack *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.292 'index-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:50.844551105 +0000
+++ help	2022-12-28 07:31:50.869552031 +0000
@@ -1,3 +1 @@
-git index-pack [-v] [-o <index-file>] [--[no-]rev-index] <pack-file>
-git index-pack --stdin [--fix-thin] [--keep] [-v] [-o <index-file>]
-               [--[no-]rev-index] [<pack-file>]
+git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--[no-]rev-index] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])
not ok 292 - index-pack -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.293 'init -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 293 - init -h output has no \t

expecting success of 0450.294 'init -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 294 - init -h output has dashed labels

expecting success of 0450.295 'init -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 295 - init -h output has consistent spacing

expecting success of 0450.296 'init *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 296 - init *.txt SYNOPSIS has dashed labels

expecting success of 0450.297 'init -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 297 - init -h output and SYNOPSIS agree

expecting success of 0450.298 'init-db -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 298 - init-db -h output has no \t

expecting success of 0450.299 'init-db -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 299 - init-db -h output has dashed labels

expecting success of 0450.300 'init-db -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 300 - init-db -h output has consistent spacing

expecting success of 0450.301 'init-db *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 301 - init-db *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.302 'init-db -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:51.439573124 +0000
+++ help	2022-12-28 07:31:51.474574420 +0000
@@ -1 +1,4 @@
-git init-db [-q | --quiet] [--bare] [--template=<template-directory>] [--separate-git-dir <git-dir>] [--shared[=<permissions>]]
+git init [-q | --quiet] [--bare] [--template=<template-directory>]
+            [--separate-git-dir <git-dir>] [--object-format=<format>]
+            [-b <branch-name> | --initial-branch=<branch-name>]
+            [--shared[=<permissions>]] [<directory>]
not ok 302 - init-db -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.303 'interpret-trailers -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 303 - interpret-trailers -h output has no \t

expecting success of 0450.304 'interpret-trailers -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 304 - interpret-trailers -h output has dashed labels

expecting success of 0450.305 'interpret-trailers -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 305 - interpret-trailers -h output has consistent spacing

expecting success of 0450.306 'interpret-trailers *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 306 - interpret-trailers *.txt SYNOPSIS has dashed labels

expecting success of 0450.307 'interpret-trailers -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 307 - interpret-trailers -h output and SYNOPSIS agree

expecting success of 0450.308 'log -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 308 - log -h output has no \t

expecting success of 0450.309 'log -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 309 - log -h output has dashed labels

expecting success of 0450.310 'log -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 310 - log -h output has consistent spacing

expecting success of 0450.311 'log *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 311 - log *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.312 'log -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:52.124598474 +0000
+++ help	2022-12-28 07:31:52.149599399 +0000
@@ -1 +1,2 @@
 git log [<options>] [<revision-range>] [[--] <path>...]
+git show [<options>] <object>...
not ok 312 - log -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.313 'ls-files -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 313 - ls-files -h output has no \t

expecting success of 0450.314 'ls-files -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 314 - ls-files -h output has dashed labels

expecting success of 0450.315 'ls-files -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 315 - ls-files -h output has consistent spacing

expecting success of 0450.316 'ls-files *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 316 - ls-files *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.317 'ls-files -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:52.424609576 +0000
+++ help	2022-12-28 07:31:52.454610686 +0000
@@ -1,12 +1 @@
-git ls-files [-z] [-t] [-v] [-f]
-             [-c|--cached] [-d|--deleted] [-o|--others] [-i|--ignored]
-             [-s|--stage] [-u|--unmerged] [-k|--killed] [-m|--modified]
-             [--directory [--no-empty-directory]] [--eol]
-             [--deduplicate]
-             [-x <pattern>|--exclude=<pattern>]
-             [-X <file>|--exclude-from=<file>]
-             [--exclude-per-directory=<file>]
-             [--exclude-standard]
-             [--error-unmatch] [--with-tree=<tree-ish>]
-             [--full-name] [--recurse-submodules]
-             [--abbrev[=<n>]] [--format=<format>] [--] [<file>...]
+git ls-files [<options>] [<file>...]
not ok 317 - ls-files -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.318 'ls-remote -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 318 - ls-remote -h output has no \t

expecting success of 0450.319 'ls-remote -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 319 - ls-remote -h output has dashed labels

expecting success of 0450.320 'ls-remote -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 320 - ls-remote -h output has consistent spacing

expecting success of 0450.321 'ls-remote *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 321 - ls-remote *.txt SYNOPSIS has dashed labels

expecting success of 0450.322 'ls-remote -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 322 - ls-remote -h output and SYNOPSIS agree

expecting success of 0450.323 'ls-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 323 - ls-tree -h output has no \t

expecting success of 0450.324 'ls-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 324 - ls-tree -h output has dashed labels

expecting success of 0450.325 'ls-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 325 - ls-tree -h output has consistent spacing

expecting success of 0450.326 'ls-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 326 - ls-tree *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.327 'ls-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:53.039632335 +0000
+++ help	2022-12-28 07:31:53.069633445 +0000
@@ -1,3 +1 @@
-git ls-tree [-d] [-r] [-t] [-l] [-z]
-            [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
-            <tree-ish> [<path>...]
+git ls-tree [<options>] <tree-ish> [<path>...]
not ok 327 - ls-tree -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.328 'mailinfo -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 328 - mailinfo -h output has no \t

expecting success of 0450.329 'mailinfo -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 329 - mailinfo -h output has dashed labels

expecting success of 0450.330 'mailinfo -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 330 - mailinfo -h output has consistent spacing

expecting success of 0450.331 'mailinfo *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 331 - mailinfo *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.332 'mailinfo -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:53.329643067 +0000
+++ help	2022-12-28 07:31:53.359644177 +0000
@@ -1,3 +1 @@
-git mailinfo [-k|-b] [-u | --encoding=<encoding> | -n]
-             [--[no-]scissors] [--quoted-cr=<action>]
-             <msg> <patch>
+git mailinfo [<options>] <msg> <patch> < mail >info
not ok 332 - mailinfo -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.333 'mailsplit -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 333 - mailsplit -h output has no \t

expecting success of 0450.334 'mailsplit -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 334 - mailsplit -h output has dashed labels

expecting success of 0450.335 'mailsplit -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 335 - mailsplit -h output has consistent spacing

expecting success of 0450.336 'mailsplit *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 336 - mailsplit *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.337 'mailsplit -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:53.619653799 +0000
+++ help	2022-12-28 07:31:53.644654724 +0000
@@ -1,2 +1 @@
-git mailsplit [-b] [-f<nn>] [-d<prec>] [--keep-cr] [--mboxrd]
-              -o<directory> [--] [(<mbox>|<Maildir>)...]
+git mailsplit [-d<prec>] [-f<n>] [-b] [--keep-cr] -o<directory> [(<mbox>|<Maildir>)...]
not ok 337 - mailsplit -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.338 'maintenance -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 338 - maintenance -h output has no \t

expecting success of 0450.339 'maintenance -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 339 - maintenance -h output has dashed labels

expecting success of 0450.340 'maintenance -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 340 - maintenance -h output has consistent spacing

expecting success of 0450.341 'maintenance *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 341 - maintenance *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.342 'maintenance -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:53.914664716 +0000
+++ help	2022-12-28 07:31:53.944665826 +0000
@@ -1,3 +1 @@
-git maintenance run [<options>]
-git maintenance start [--scheduler=<scheduler>]
-git maintenance (stop|register|unregister) [<options>]
+git maintenance <subcommand> [<options>]
not ok 342 - maintenance -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.343 'merge -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 343 - merge -h output has no \t

expecting success of 0450.344 'merge -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 344 - merge -h output has dashed labels

expecting success of 0450.345 'merge -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 345 - merge -h output has consistent spacing

expecting success of 0450.346 'merge *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 346 - merge *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.347 'merge -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:54.219676003 +0000
+++ help	2022-12-28 07:31:54.249677113 +0000
@@ -1,6 +1,3 @@
-git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
-          [--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
-          [--[no-]allow-unrelated-histories]
-          [--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]
-          [--into-name <branch>] [<commit>...]
-git merge (--continue | --abort | --quit)
+git merge [<options>] [<commit>...]
+git merge --abort
+git merge --continue
not ok 347 - merge -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.348 'merge-base -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 348 - merge-base -h output has no \t

expecting success of 0450.349 'merge-base -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 349 - merge-base -h output has dashed labels

expecting success of 0450.350 'merge-base -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 350 - merge-base -h output has consistent spacing

expecting success of 0450.351 'merge-base *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 351 - merge-base *.txt SYNOPSIS has dashed labels

expecting success of 0450.352 'merge-base -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 352 - merge-base -h output and SYNOPSIS agree

expecting success of 0450.353 'merge-file -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 353 - merge-file -h output has no \t

expecting success of 0450.354 'merge-file -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 354 - merge-file -h output has dashed labels

expecting success of 0450.355 'merge-file -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 355 - merge-file -h output has consistent spacing

expecting success of 0450.356 'merge-file *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 356 - merge-file *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.357 'merge-file -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:54.784696911 +0000
+++ help	2022-12-28 07:31:54.814698022 +0000
@@ -1,3 +1 @@
-git merge-file [-L <current-name> [-L <base-name> [-L <other-name>]]]
-               [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
-               [--[no-]diff3] <current-file> <base-file> <other-file>
+git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> <orig-file> <file2>
not ok 357 - merge-file -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.358 'merge-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 358 - merge-index -h output has no \t

expecting success of 0450.359 'merge-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 359 - merge-index -h output has dashed labels

expecting success of 0450.360 'merge-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 360 - merge-index -h output has consistent spacing

expecting success of 0450.361 'merge-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 361 - merge-index *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.362 'merge-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:55.069707458 +0000
+++ help	2022-12-28 07:31:55.094708383 +0000
@@ -1 +1 @@
-git merge-index [-o] [-q] <merge-program> (-a | ( [--] <file>...) )
+git merge-index [-o] [-q] <merge-program> (-a | [--] [<filename>...])
not ok 362 - merge-index -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.363 'merge-ours -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 363 - merge-ours -h output has no \t

expecting success of 0450.364 'merge-ours -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 364 - merge-ours -h output has dashed labels

expecting success of 0450.365 'merge-ours -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 365 - merge-ours -h output has consistent spacing

ok 366 # skip merge-ours *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_MERGE_OURS)

ok 367 # skip merge-ours -h output and SYNOPSIS agree (missing BUILTIN_TXT_MERGE_OURS)

expecting success of 0450.368 'merge-recursive -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 368 - merge-recursive -h output has no \t

expecting success of 0450.369 'merge-recursive -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 369 - merge-recursive -h output has dashed labels

expecting success of 0450.370 'merge-recursive -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 370 - merge-recursive -h output has consistent spacing

ok 371 # skip merge-recursive *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_MERGE_RECURSIVE)

ok 372 # skip merge-recursive -h output and SYNOPSIS agree (missing BUILTIN_TXT_MERGE_RECURSIVE)

expecting success of 0450.373 'merge-recursive-ours -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 373 - merge-recursive-ours -h output has no \t

expecting success of 0450.374 'merge-recursive-ours -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 374 - merge-recursive-ours -h output has dashed labels

expecting success of 0450.375 'merge-recursive-ours -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 375 - merge-recursive-ours -h output has consistent spacing

ok 376 # skip merge-recursive-ours *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_MERGE_RECURSIVE_OURS)

ok 377 # skip merge-recursive-ours -h output and SYNOPSIS agree (missing BUILTIN_TXT_MERGE_RECURSIVE_OURS)

expecting success of 0450.378 'merge-recursive-theirs -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 378 - merge-recursive-theirs -h output has no \t

expecting success of 0450.379 'merge-recursive-theirs -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 379 - merge-recursive-theirs -h output has dashed labels

expecting success of 0450.380 'merge-recursive-theirs -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 380 - merge-recursive-theirs -h output has consistent spacing

ok 381 # skip merge-recursive-theirs *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_MERGE_RECURSIVE_THEIRS)

ok 382 # skip merge-recursive-theirs -h output and SYNOPSIS agree (missing BUILTIN_TXT_MERGE_RECURSIVE_THEIRS)

expecting success of 0450.383 'merge-subtree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 383 - merge-subtree -h output has no \t

expecting success of 0450.384 'merge-subtree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 384 - merge-subtree -h output has dashed labels

expecting success of 0450.385 'merge-subtree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 385 - merge-subtree -h output has consistent spacing

ok 386 # skip merge-subtree *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_MERGE_SUBTREE)

ok 387 # skip merge-subtree -h output and SYNOPSIS agree (missing BUILTIN_TXT_MERGE_SUBTREE)

expecting success of 0450.388 'merge-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 388 - merge-tree -h output has no \t

expecting success of 0450.389 'merge-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 389 - merge-tree -h output has dashed labels

expecting success of 0450.390 'merge-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 390 - merge-tree -h output has consistent spacing

expecting success of 0450.391 'merge-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 391 - merge-tree *.txt SYNOPSIS has dashed labels

expecting success of 0450.392 'merge-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 392 - merge-tree -h output and SYNOPSIS agree

expecting success of 0450.393 'mktag -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 393 - mktag -h output has no \t

expecting success of 0450.394 'mktag -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 394 - mktag -h output has dashed labels

expecting success of 0450.395 'mktag -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 395 - mktag -h output has consistent spacing

expecting success of 0450.396 'mktag *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 396 - mktag *.txt SYNOPSIS has dashed labels

expecting success of 0450.397 'mktag -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 397 - mktag -h output and SYNOPSIS agree

expecting success of 0450.398 'mktree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 398 - mktree -h output has no \t

expecting success of 0450.399 'mktree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 399 - mktree -h output has dashed labels

expecting success of 0450.400 'mktree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 400 - mktree -h output has consistent spacing

expecting success of 0450.401 'mktree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 401 - mktree *.txt SYNOPSIS has dashed labels

expecting success of 0450.402 'mktree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 402 - mktree -h output and SYNOPSIS agree

expecting success of 0450.403 'multi-pack-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 403 - multi-pack-index -h output has no \t

expecting success of 0450.404 'multi-pack-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 404 - multi-pack-index -h output has dashed labels

expecting success of 0450.405 'multi-pack-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 405 - multi-pack-index -h output has consistent spacing

expecting success of 0450.406 'multi-pack-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 406 - multi-pack-index *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.407 'multi-pack-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:57.099782581 +0000
+++ help	2022-12-28 07:31:57.124783506 +0000
@@ -1 +1,4 @@
-git multi-pack-index [--object-dir=<dir>] [--[no-]bitmap] <sub-command>
+git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-snapshot=<path>]
+git multi-pack-index [<options>] verify
+git multi-pack-index [<options>] expire
+git multi-pack-index [<options>] repack [--batch-size=<size>]
not ok 407 - multi-pack-index -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.408 'mv -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 408 - mv -h output has no \t

expecting success of 0450.409 'mv -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 409 - mv -h output has dashed labels

expecting success of 0450.410 'mv -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 410 - mv -h output has consistent spacing

expecting success of 0450.411 'mv *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 411 - mv *.txt SYNOPSIS has dashed labels

expecting success of 0450.412 'mv -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 412 - mv -h output and SYNOPSIS agree

expecting success of 0450.413 'name-rev -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 413 - name-rev -h output has no \t

expecting success of 0450.414 'name-rev -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 414 - name-rev -h output has dashed labels

expecting success of 0450.415 'name-rev -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 415 - name-rev -h output has consistent spacing

expecting success of 0450.416 'name-rev *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 416 - name-rev *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.417 'name-rev -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:57.694804599 +0000
+++ help	2022-12-28 07:31:57.719805524 +0000
@@ -1,2 +1,3 @@
-git name-rev [--tags] [--refs=<pattern>]
-             ( --all | --stdin | <commit-ish>... )
+git name-rev [<options>] <commit>...
+git name-rev [<options>] --all
+git name-rev [<options>] --annotate-stdin
not ok 417 - name-rev -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.418 'notes -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 418 - notes -h output has no \t

expecting success of 0450.419 'notes -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 419 - notes -h output has dashed labels

expecting success of 0450.420 'notes -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 420 - notes -h output has consistent spacing

expecting success of 0450.421 'notes *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 421 - notes *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.422 'notes -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:57.989815516 +0000
+++ help	2022-12-28 07:31:58.019816626 +0000
@@ -1,12 +1,12 @@
-git notes [list [<object>]]
-git notes add [-f] [--allow-empty] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
-git notes copy [-f] ( --stdin | <from-object> [<to-object>] )
-git notes append [--allow-empty] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
-git notes edit [--allow-empty] [<object>]
-git notes show [<object>]
-git notes merge [-v | -q] [-s <strategy> ] <notes-ref>
+git notes [--ref <notes-ref>] [list [<object>]]
+git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]
+git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>
+git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]
+git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]
+git notes [--ref <notes-ref>] show [<object>]
+git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>
 git notes merge --commit [-v | -q]
 git notes merge --abort [-v | -q]
-git notes remove [--ignore-missing] [--stdin] [<object>...]
-git notes prune [-n] [-v]
-git notes get-ref
+git notes [--ref <notes-ref>] remove [<object>...]
+git notes [--ref <notes-ref>] prune [-n] [-v]
+git notes [--ref <notes-ref>] get-ref
not ok 422 - notes -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.423 'pack-objects -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 423 - pack-objects -h output has no \t

expecting success of 0450.424 'pack-objects -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 424 - pack-objects -h output has dashed labels

expecting success of 0450.425 'pack-objects -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 425 - pack-objects -h output has consistent spacing

expecting success of 0450.426 'pack-objects *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 426 - pack-objects *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.427 'pack-objects -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:31:58.274826062 +0000
+++ help	2022-12-28 07:31:58.309827358 +0000
@@ -1,7 +1,2 @@
-git pack-objects [-q | --progress | --all-progress] [--all-progress-implied]
-                 [--no-reuse-delta] [--delta-base-offset] [--non-empty]
-                 [--local] [--incremental] [--window=<n>] [--depth=<n>]
-                 [--revs [--unpacked | --all]] [--keep-pack=<pack-name>]
-                 [--cruft] [--cruft-expiration=<time>]
-                 [--stdout [--filter=<filter-spec>] | <base-name>]
-                 [--shallow] [--keep-true-parents] [--[no-]sparse] < <object-list>
+git pack-objects --stdout [<options>] [< <ref-list> | < <object-list>]
+git pack-objects [<options>] <base-name> [< <ref-list> | < <object-list>]
not ok 427 - pack-objects -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.428 'pack-redundant -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 428 - pack-redundant -h output has no \t

expecting success of 0450.429 'pack-redundant -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 429 - pack-redundant -h output has dashed labels

expecting success of 0450.430 'pack-redundant -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 430 - pack-redundant -h output has consistent spacing

expecting success of 0450.431 'pack-redundant *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 431 - pack-redundant *.txt SYNOPSIS has dashed labels

expecting success of 0450.432 'pack-redundant -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 432 - pack-redundant -h output and SYNOPSIS agree

expecting success of 0450.433 'pack-refs -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 433 - pack-refs -h output has no \t

expecting success of 0450.434 'pack-refs -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 434 - pack-refs -h output has dashed labels

expecting success of 0450.435 'pack-refs -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 435 - pack-refs -h output has consistent spacing

expecting success of 0450.436 'pack-refs *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 436 - pack-refs *.txt SYNOPSIS has dashed labels

expecting success of 0450.437 'pack-refs -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 437 - pack-refs -h output and SYNOPSIS agree

expecting success of 0450.438 'patch-id -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 438 - patch-id -h output has no \t

expecting success of 0450.439 'patch-id -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 439 - patch-id -h output has dashed labels

expecting success of 0450.440 'patch-id -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 440 - patch-id -h output has consistent spacing

expecting success of 0450.441 'patch-id *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 441 - patch-id *.txt SYNOPSIS has dashed labels

expecting success of 0450.442 'patch-id -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 442 - patch-id -h output and SYNOPSIS agree

expecting success of 0450.443 'pickaxe -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 443 - pickaxe -h output has no \t

expecting success of 0450.444 'pickaxe -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 444 - pickaxe -h output has dashed labels

expecting success of 0450.445 'pickaxe -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 445 - pickaxe -h output has consistent spacing

ok 446 # skip pickaxe *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_PICKAXE)

ok 447 # skip pickaxe -h output and SYNOPSIS agree (missing BUILTIN_TXT_PICKAXE)

expecting success of 0450.448 'prune -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 448 - prune -h output has no \t

expecting success of 0450.449 'prune -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 449 - prune -h output has dashed labels

expecting success of 0450.450 'prune -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 450 - prune -h output has consistent spacing

expecting success of 0450.451 'prune *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 451 - prune *.txt SYNOPSIS has dashed labels

expecting success of 0450.452 'prune -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 452 - prune -h output and SYNOPSIS agree

expecting success of 0450.453 'prune-packed -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 453 - prune-packed -h output has no \t

expecting success of 0450.454 'prune-packed -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 454 - prune-packed -h output has dashed labels

expecting success of 0450.455 'prune-packed -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 455 - prune-packed -h output has consistent spacing

expecting success of 0450.456 'prune-packed *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 456 - prune-packed *.txt SYNOPSIS has dashed labels

expecting success of 0450.457 'prune-packed -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 457 - prune-packed -h output and SYNOPSIS agree

expecting success of 0450.458 'pull -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 458 - pull -h output has no \t

expecting success of 0450.459 'pull -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 459 - pull -h output has dashed labels

expecting success of 0450.460 'pull -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 460 - pull -h output has consistent spacing

expecting success of 0450.461 'pull *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 461 - pull *.txt SYNOPSIS has dashed labels

expecting success of 0450.462 'pull -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 462 - pull -h output and SYNOPSIS agree

expecting success of 0450.463 'push -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 463 - push -h output has no \t

expecting success of 0450.464 'push -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 464 - push -h output has dashed labels

expecting success of 0450.465 'push -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 465 - push -h output has consistent spacing

expecting success of 0450.466 'push *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 466 - push *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.467 'push -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:00.484907845 +0000
+++ help	2022-12-28 07:32:00.514908955 +0000
@@ -1,6 +1 @@
-git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
-         [--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose]
-         [-u | --set-upstream] [-o <string> | --push-option=<string>]
-         [--[no-]signed|--signed=(true|false|if-asked)]
-         [--force-with-lease[=<refname>[:<expect>]] [--force-if-includes]]
-         [--no-verify] [<repository> [<refspec>...]]
+git push [<options>] [<repository> [<refspec>...]]
not ok 467 - push -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.468 'range-diff -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 468 - range-diff -h output has no \t

expecting success of 0450.469 'range-diff -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 469 - range-diff -h output has dashed labels

expecting success of 0450.470 'range-diff -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 470 - range-diff -h output has consistent spacing

expecting success of 0450.471 'range-diff *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 471 - range-diff *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.472 'range-diff -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:00.854921537 +0000
+++ help	2022-12-28 07:32:00.889922832 +0000
@@ -1,5 +1,3 @@
-git range-diff [--color=[<when>]] [--no-color] [<diff-options>]
-               [--no-dual-color] [--creation-factor=<factor>]
-               [--left-only | --right-only]
-               ( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> )
-               [[--] <path>...]
+git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>
+git range-diff [<options>] <old-tip>...<new-tip>
+git range-diff [<options>] <base> <old-tip> <new-tip>
not ok 472 - range-diff -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.473 'read-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 473 - read-tree -h output has no \t

expecting success of 0450.474 'read-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 474 - read-tree -h output has dashed labels

expecting success of 0450.475 'read-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 475 - read-tree -h output has consistent spacing

expecting success of 0450.476 'read-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 476 - read-tree *.txt SYNOPSIS has dashed labels

expecting success of 0450.477 'read-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 477 - read-tree -h output and SYNOPSIS agree

expecting success of 0450.478 'rebase -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 478 - rebase -h output has no \t

expecting success of 0450.479 'rebase -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 479 - rebase -h output has dashed labels

expecting success of 0450.480 'rebase -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 480 - rebase -h output has consistent spacing

expecting success of 0450.481 'rebase *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 481 - rebase *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.482 'rebase -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:01.474944480 +0000
+++ help	2022-12-28 07:32:01.524946330 +0000
@@ -1,5 +1,3 @@
-git rebase [-i | --interactive] [<options>] [--exec <cmd>]
-           [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
-git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
-           --root [<branch>]
-git rebase (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)
+git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
+git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
+git rebase --continue | --abort | --skip | --edit-todo
not ok 482 - rebase -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.483 'receive-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 483 - receive-pack -h output has no \t

expecting success of 0450.484 'receive-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 484 - receive-pack -h output has dashed labels

expecting success of 0450.485 'receive-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 485 - receive-pack -h output has consistent spacing

expecting success of 0450.486 'receive-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 486 - receive-pack *.txt SYNOPSIS has dashed labels

expecting success of 0450.487 'receive-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 487 - receive-pack -h output and SYNOPSIS agree

expecting success of 0450.488 'reflog -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 488 - reflog -h output has no \t

expecting success of 0450.489 'reflog -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 489 - reflog -h output has dashed labels

expecting success of 0450.490 'reflog -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 490 - reflog -h output has consistent spacing

expecting success of 0450.491 'reflog *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 491 - reflog *.txt SYNOPSIS has dashed labels

expecting success of 0450.492 'reflog -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 492 - reflog -h output and SYNOPSIS agree

expecting success of 0450.493 'remote -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 493 - remote -h output has no \t

expecting success of 0450.494 'remote -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 494 - remote -h output has dashed labels

expecting success of 0450.495 'remote -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 495 - remote -h output has consistent spacing

expecting success of 0450.496 'remote *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 496 - remote *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.497 'remote -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:02.374977785 +0000
+++ help	2022-12-28 07:32:02.409979080 +0000
@@ -1,13 +1,13 @@
 git remote [-v | --verbose]
-git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
+git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>
 git remote rename [--[no-]progress] <old> <new>
 git remote remove <name>
 git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
+git remote [-v | --verbose] show [-n] <name>
+git remote prune [-n | --dry-run] <name>
+git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
 git remote set-branches [--add] <name> <branch>...
 git remote get-url [--push] [--all] <name>
 git remote set-url [--push] <name> <newurl> [<oldurl>]
-git remote set-url --add [--push] <name> <newurl>
-git remote set-url --delete [--push] <name> <URL>
-git remote [-v | --verbose] 'show' [-n] <name>...
-git remote prune [-n | --dry-run] <name>...
-git remote [-v | --verbose] 'update' [-p | --prune] [(<group> | <remote>)...]
+git remote set-url --add <name> <newurl>
+git remote set-url --delete <name> <url>
not ok 497 - remote -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.498 'remote-ext -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 498 - remote-ext -h output has no \t

expecting success of 0450.499 'remote-ext -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 499 - remote-ext -h output has dashed labels

expecting success of 0450.500 'remote-ext -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 500 - remote-ext -h output has consistent spacing

expecting success of 0450.501 'remote-ext *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 501 - remote-ext *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.502 'remote-ext -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:02.649987961 +0000
+++ help	2022-12-28 07:32:02.679989071 +0000
@@ -1 +1 @@
-git remote add <nick> "ext::<command>[ <arguments>...]"
+git remote-ext <remote> <url>
not ok 502 - remote-ext -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.503 'remote-fd -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 503 - remote-fd -h output has no \t

expecting success of 0450.504 'remote-fd -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 504 - remote-fd -h output has dashed labels

expecting success of 0450.505 'remote-fd -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 505 - remote-fd -h output has consistent spacing

expecting success of 0450.506 'remote-fd *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 506 - remote-fd *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.507 'remote-fd -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:02.909997582 +0000
+++ help	2022-12-28 07:32:02.954999248 +0000
@@ -0,0 +1 @@
+git remote-fd <remote> <url>
not ok 507 - remote-fd -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.508 'repack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 508 - repack -h output has no \t

expecting success of 0450.509 'repack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 509 - repack -h output has dashed labels

expecting success of 0450.510 'repack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 510 - repack -h output has consistent spacing

expecting success of 0450.511 'repack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 511 - repack *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.512 'repack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:03.215008869 +0000
+++ help	2022-12-28 07:32:03.245009979 +0000
@@ -1 +1 @@
-git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>] [--write-midx]
+git repack [<options>]
not ok 512 - repack -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.513 'replace -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 513 - replace -h output has no \t

expecting success of 0450.514 'replace -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 514 - replace -h output has dashed labels

expecting success of 0450.515 'replace -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 515 - replace -h output has consistent spacing

expecting success of 0450.516 'replace *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 516 - replace *.txt SYNOPSIS has dashed labels

expecting success of 0450.517 'replace -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 517 - replace -h output and SYNOPSIS agree

expecting success of 0450.518 'rerere -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 518 - rerere -h output has no \t

expecting success of 0450.519 'rerere -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 519 - rerere -h output has dashed labels

expecting success of 0450.520 'rerere -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 520 - rerere -h output has consistent spacing

expecting success of 0450.521 'rerere *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 521 - rerere *.txt SYNOPSIS has dashed labels

expecting success of 0450.522 'rerere -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 522 - rerere -h output and SYNOPSIS agree

expecting success of 0450.523 'reset -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 523 - reset -h output has no \t

expecting success of 0450.524 'reset -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 524 - reset -h output has dashed labels

expecting success of 0450.525 'reset -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 525 - reset -h output has consistent spacing

expecting success of 0450.526 'reset *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 526 - reset *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.527 'reset -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:04.085041063 +0000
+++ help	2022-12-28 07:32:04.110041988 +0000
@@ -1,4 +1,4 @@
+git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
 git reset [-q] [<tree-ish>] [--] <pathspec>...
-git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
-git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...]
-git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
+git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
+git reset --patch [<tree-ish>] [--] [<pathspec>...]
not ok 527 - reset -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.528 'restore -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 528 - restore -h output has no \t

expecting success of 0450.529 'restore -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 529 - restore -h output has dashed labels

expecting success of 0450.530 'restore -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 530 - restore -h output has consistent spacing

expecting success of 0450.531 'restore *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 531 - restore *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.532 'restore -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:04.370051610 +0000
+++ help	2022-12-28 07:32:04.395052535 +0000
@@ -1,3 +1 @@
-git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
-git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
-git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>...]
+git restore [<options>] [--source=<branch>] <file>...
not ok 532 - restore -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.533 'rev-list -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 533 - rev-list -h output has no \t

expecting success of 0450.534 'rev-list -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 534 - rev-list -h output has dashed labels

expecting success of 0450.535 'rev-list -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 535 - rev-list -h output has consistent spacing

expecting success of 0450.536 'rev-list *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 536 - rev-list *.txt SYNOPSIS has dashed labels

expecting success of 0450.537 'rev-list -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 537 - rev-list -h output and SYNOPSIS agree

expecting success of 0450.538 'rev-parse -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 538 - rev-parse -h output has no \t

expecting success of 0450.539 'rev-parse -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 539 - rev-parse -h output has dashed labels

expecting success of 0450.540 'rev-parse -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 540 - rev-parse -h output has consistent spacing

expecting success of 0450.541 'rev-parse *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 541 - rev-parse *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.542 'rev-parse -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:04.920071962 +0000
+++ help	2022-12-28 07:32:04.945072887 +0000
@@ -1 +1,3 @@
-git rev-parse [<options>] <args>...
+git rev-parse --parseopt [<options>] -- [<args>...]
+git rev-parse --sq-quote [<arg>...]
+git rev-parse [<options>] [<arg>...]
not ok 542 - rev-parse -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.543 'revert -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 543 - revert -h output has no \t

expecting success of 0450.544 'revert -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 544 - revert -h output has dashed labels

expecting success of 0450.545 'revert -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 545 - revert -h output has consistent spacing

expecting success of 0450.546 'revert *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 546 - revert *.txt SYNOPSIS has dashed labels

expecting success of 0450.547 'revert -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 547 - revert -h output and SYNOPSIS agree

expecting success of 0450.548 'rm -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 548 - rm -h output has no \t

expecting success of 0450.549 'rm -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 549 - rm -h output has dashed labels

expecting success of 0450.550 'rm -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 550 - rm -h output has consistent spacing

expecting success of 0450.551 'rm *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 551 - rm *.txt SYNOPSIS has dashed labels

expecting success of 0450.552 'rm -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 552 - rm -h output and SYNOPSIS agree

expecting success of 0450.553 'send-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 553 - send-pack -h output has no \t

expecting success of 0450.554 'send-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 554 - send-pack -h output has dashed labels

expecting success of 0450.555 'send-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 555 - send-pack -h output has consistent spacing

expecting success of 0450.556 'send-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 556 - send-pack *.txt SYNOPSIS has dashed labels

expecting success of 0450.557 'send-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 557 - send-pack -h output and SYNOPSIS agree

expecting success of 0450.558 'shortlog -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 558 - shortlog -h output has no \t

expecting success of 0450.559 'shortlog -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 559 - shortlog -h output has dashed labels

expecting success of 0450.560 'shortlog -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 560 - shortlog -h output has consistent spacing

expecting success of 0450.561 'shortlog *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 561 - shortlog *.txt SYNOPSIS has dashed labels

expecting success of 0450.562 'shortlog -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 562 - shortlog -h output and SYNOPSIS agree

expecting success of 0450.563 'show -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 563 - show -h output has no \t

expecting success of 0450.564 'show -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 564 - show -h output has dashed labels

expecting success of 0450.565 'show -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 565 - show -h output has consistent spacing

expecting success of 0450.566 'show *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 566 - show *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.567 'show -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:06.335124324 +0000
+++ help	2022-12-28 07:32:06.365125434 +0000
@@ -1 +1,2 @@
-git show [<options>] [<object>...]
+git log [<options>] [<revision-range>] [[--] <path>...]
+git show [<options>] <object>...
not ok 567 - show -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.568 'show-branch -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 568 - show-branch -h output has no \t

expecting success of 0450.569 'show-branch -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 569 - show-branch -h output has dashed labels

expecting success of 0450.570 'show-branch -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 570 - show-branch -h output has consistent spacing

expecting success of 0450.571 'show-branch *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 571 - show-branch *.txt SYNOPSIS has dashed labels

expecting success of 0450.572 'show-branch -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 572 - show-branch -h output and SYNOPSIS agree

expecting success of 0450.573 'show-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 573 - show-index -h output has no \t

expecting success of 0450.574 'show-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 574 - show-index -h output has dashed labels

expecting success of 0450.575 'show-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 575 - show-index -h output has consistent spacing

expecting success of 0450.576 'show-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 576 - show-index *.txt SYNOPSIS has dashed labels

expecting success of 0450.577 'show-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 577 - show-index -h output and SYNOPSIS agree

expecting success of 0450.578 'show-ref -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 578 - show-ref -h output has no \t

expecting success of 0450.579 'show-ref -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 579 - show-ref -h output has dashed labels

expecting success of 0450.580 'show-ref -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 580 - show-ref -h output has consistent spacing

expecting success of 0450.581 'show-ref *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 581 - show-ref *.txt SYNOPSIS has dashed labels

expecting success of 0450.582 'show-ref -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 582 - show-ref -h output and SYNOPSIS agree

expecting success of 0450.583 'sparse-checkout -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 583 - sparse-checkout -h output has no \t

expecting success of 0450.584 'sparse-checkout -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 584 - sparse-checkout -h output has dashed labels

expecting success of 0450.585 'sparse-checkout -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 585 - sparse-checkout -h output has consistent spacing

expecting success of 0450.586 'sparse-checkout *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 586 - sparse-checkout *.txt SYNOPSIS has dashed labels

expecting success of 0450.587 'sparse-checkout -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 587 - sparse-checkout -h output and SYNOPSIS agree

expecting success of 0450.588 'stage -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 588 - stage -h output has no \t

expecting success of 0450.589 'stage -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 589 - stage -h output has dashed labels

expecting success of 0450.590 'stage -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 590 - stage -h output has consistent spacing

expecting success of 0450.591 'stage *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 591 - stage *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.592 'stage -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:07.830179645 +0000
+++ help	2022-12-28 07:32:07.865180940 +0000
@@ -1 +1 @@
-git stage <arg>...
+git add [<options>] [--] <pathspec>...
not ok 592 - stage -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.593 'stash -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 593 - stash -h output has no \t

expecting success of 0450.594 'stash -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 594 - stash -h output has dashed labels

expecting success of 0450.595 'stash -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 595 - stash -h output has consistent spacing

expecting success of 0450.596 'stash *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 596 - stash *.txt SYNOPSIS has dashed labels

expecting success of 0450.597 'stash -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 597 - stash -h output and SYNOPSIS agree

expecting success of 0450.598 'status -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 598 - status -h output has no \t

expecting success of 0450.599 'status -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 599 - status -h output has dashed labels

expecting success of 0450.600 'status -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 600 - status -h output has consistent spacing

expecting success of 0450.601 'status *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 601 - status *.txt SYNOPSIS has dashed labels

expecting success of 0450.602 'status -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 602 - status -h output and SYNOPSIS agree

expecting success of 0450.603 'stripspace -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 603 - stripspace -h output has no \t

expecting success of 0450.604 'stripspace -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 604 - stripspace -h output has dashed labels

expecting success of 0450.605 'stripspace -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 605 - stripspace -h output has consistent spacing

expecting success of 0450.606 'stripspace *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 606 - stripspace *.txt SYNOPSIS has dashed labels

expecting success of 0450.607 'stripspace -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 607 - stripspace -h output and SYNOPSIS agree

expecting success of 0450.608 'submodule--helper -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 608 - submodule--helper -h output has no \t

expecting success of 0450.609 'submodule--helper -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 609 - submodule--helper -h output has dashed labels

expecting success of 0450.610 'submodule--helper -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 610 - submodule--helper -h output has consistent spacing

ok 611 # skip submodule--helper *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_SUBMODULE__HELPER)

ok 612 # skip submodule--helper -h output and SYNOPSIS agree (missing BUILTIN_TXT_SUBMODULE__HELPER)

expecting success of 0450.613 'switch -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 613 - switch -h output has no \t

expecting success of 0450.614 'switch -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 614 - switch -h output has dashed labels

expecting success of 0450.615 'switch -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 615 - switch -h output has consistent spacing

expecting success of 0450.616 'switch *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 616 - switch *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.617 'switch -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:09.190229971 +0000
+++ help	2022-12-28 07:32:09.215230896 +0000
@@ -1,4 +1 @@
-git switch [<options>] [--no-guess] <branch>
-git switch [<options>] --detach [<start-point>]
-git switch [<options>] (-c|-C) <new-branch> [<start-point>]
-git switch [<options>] --orphan <new-branch>
+git switch [<options>] [<branch>]
not ok 617 - switch -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.618 'symbolic-ref -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 618 - symbolic-ref -h output has no \t

expecting success of 0450.619 'symbolic-ref -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 619 - symbolic-ref -h output has dashed labels

expecting success of 0450.620 'symbolic-ref -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 620 - symbolic-ref -h output has consistent spacing

expecting success of 0450.621 'symbolic-ref *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 621 - symbolic-ref *.txt SYNOPSIS has dashed labels

expecting success of 0450.622 'symbolic-ref -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 622 - symbolic-ref -h output and SYNOPSIS agree

expecting success of 0450.623 'tag -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 623 - tag -h output has no \t

expecting success of 0450.624 'tag -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 624 - tag -h output has dashed labels

expecting success of 0450.625 'tag -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 625 - tag -h output has consistent spacing

expecting success of 0450.626 'tag *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 626 - tag *.txt SYNOPSIS has dashed labels

expecting success of 0450.627 'tag -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 627 - tag -h output and SYNOPSIS agree

expecting success of 0450.628 'unpack-file -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 628 - unpack-file -h output has no \t

expecting success of 0450.629 'unpack-file -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 629 - unpack-file -h output has dashed labels

expecting success of 0450.630 'unpack-file -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 630 - unpack-file -h output has consistent spacing

expecting success of 0450.631 'unpack-file *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 631 - unpack-file *.txt SYNOPSIS has dashed labels

expecting success of 0450.632 'unpack-file -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 632 - unpack-file -h output and SYNOPSIS agree

expecting success of 0450.633 'unpack-objects -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 633 - unpack-objects -h output has no \t

expecting success of 0450.634 'unpack-objects -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 634 - unpack-objects -h output has dashed labels

expecting success of 0450.635 'unpack-objects -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 635 - unpack-objects -h output has consistent spacing

expecting success of 0450.636 'unpack-objects *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 636 - unpack-objects *.txt SYNOPSIS has dashed labels

expecting success of 0450.637 'unpack-objects -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 637 - unpack-objects -h output and SYNOPSIS agree

expecting success of 0450.638 'update-index -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 638 - update-index -h output has no \t

expecting success of 0450.639 'update-index -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 639 - update-index -h output has dashed labels

expecting success of 0450.640 'update-index -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 640 - update-index -h output has consistent spacing

expecting success of 0450.641 'update-index *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 641 - update-index *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.642 'update-index -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:10.670284737 +0000
+++ help	2022-12-28 07:32:10.700285847 +0000
@@ -1,18 +1 @@
-git update-index
-                 [--add] [--remove | --force-remove] [--replace]
-                 [--refresh] [-q] [--unmerged] [--ignore-missing]
-                 [(--cacheinfo <mode>,<object>,<file>)...]
-                 [--chmod=(+|-)x]
-                 [--[no-]assume-unchanged]
-                 [--[no-]skip-worktree]
-                 [--[no-]ignore-skip-worktree-entries]
-                 [--[no-]fsmonitor-valid]
-                 [--ignore-submodules]
-                 [--[no-]split-index]
-                 [--[no-|test-|force-]untracked-cache]
-                 [--[no-]fsmonitor]
-                 [--really-refresh] [--unresolve] [--again | -g]
-                 [--info-only] [--index-info]
-                 [-z] [--stdin] [--index-version <n>]
-                 [--verbose]
-                 [--] [<file>...]
+git update-index [<options>] [--] [<file>...]
not ok 642 - update-index -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.643 'update-ref -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 643 - update-ref -h output has no \t

expecting success of 0450.644 'update-ref -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 644 - update-ref -h output has dashed labels

expecting success of 0450.645 'update-ref -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 645 - update-ref -h output has consistent spacing

expecting success of 0450.646 'update-ref *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 646 - update-ref *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.647 'update-ref -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:10.940294728 +0000
+++ help	2022-12-28 07:32:10.965295653 +0000
@@ -1 +1,3 @@
-git update-ref [-m <reason>] [--no-deref] (-d <ref> [<oldvalue>] | [--create-reflog] <ref> <newvalue> [<oldvalue>] | --stdin [-z])
+git update-ref [<options>] -d <refname> [<old-val>]
+git update-ref [<options>]    <refname> <new-val> [<old-val>]
+git update-ref [<options>] --stdin [-z]
not ok 647 - update-ref -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.648 'update-server-info -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 648 - update-server-info -h output has no \t

expecting success of 0450.649 'update-server-info -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 649 - update-server-info -h output has dashed labels

expecting success of 0450.650 'update-server-info -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 650 - update-server-info -h output has consistent spacing

expecting success of 0450.651 'update-server-info *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 651 - update-server-info *.txt SYNOPSIS has dashed labels

expecting success of 0450.652 'update-server-info -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 652 - update-server-info -h output and SYNOPSIS agree

expecting success of 0450.653 'upload-archive -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 653 - upload-archive -h output has no \t

expecting success of 0450.654 'upload-archive -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 654 - upload-archive -h output has dashed labels

expecting success of 0450.655 'upload-archive -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 655 - upload-archive -h output has consistent spacing

expecting success of 0450.656 'upload-archive *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 656 - upload-archive *.txt SYNOPSIS has dashed labels

expecting success of 0450.657 'upload-archive -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 657 - upload-archive -h output and SYNOPSIS agree

expecting success of 0450.658 'upload-archive--writer -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 658 - upload-archive--writer -h output has no \t

expecting success of 0450.659 'upload-archive--writer -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 659 - upload-archive--writer -h output has dashed labels

expecting success of 0450.660 'upload-archive--writer -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 660 - upload-archive--writer -h output has consistent spacing

ok 661 # skip upload-archive--writer *.txt SYNOPSIS has dashed labels (missing BUILTIN_TXT_UPLOAD_ARCHIVE__WRITER)

ok 662 # skip upload-archive--writer -h output and SYNOPSIS agree (missing BUILTIN_TXT_UPLOAD_ARCHIVE__WRITER)

expecting success of 0450.663 'upload-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 663 - upload-pack -h output has no \t

expecting success of 0450.664 'upload-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 664 - upload-pack -h output has dashed labels

expecting success of 0450.665 'upload-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 665 - upload-pack -h output has consistent spacing

expecting success of 0450.666 'upload-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 666 - upload-pack *.txt SYNOPSIS has dashed labels

expecting success of 0450.667 'upload-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 667 - upload-pack -h output and SYNOPSIS agree

expecting success of 0450.668 'var -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 668 - var -h output has no \t

expecting success of 0450.669 'var -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 669 - var -h output has dashed labels

expecting success of 0450.670 'var -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 670 - var -h output has consistent spacing

expecting success of 0450.671 'var *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 671 - var *.txt SYNOPSIS has dashed labels

expecting success of 0450.672 'var -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 672 - var -h output and SYNOPSIS agree

expecting success of 0450.673 'verify-commit -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 673 - verify-commit -h output has no \t

expecting success of 0450.674 'verify-commit -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 674 - verify-commit -h output has dashed labels

expecting success of 0450.675 'verify-commit -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 675 - verify-commit -h output has consistent spacing

expecting success of 0450.676 'verify-commit *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 676 - verify-commit *.txt SYNOPSIS has dashed labels

expecting success of 0450.677 'verify-commit -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 677 - verify-commit -h output and SYNOPSIS agree

expecting success of 0450.678 'verify-pack -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 678 - verify-pack -h output has no \t

expecting success of 0450.679 'verify-pack -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 679 - verify-pack -h output has dashed labels

expecting success of 0450.680 'verify-pack -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 680 - verify-pack -h output has consistent spacing

expecting success of 0450.681 'verify-pack *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 681 - verify-pack *.txt SYNOPSIS has dashed labels

expecting success of 0450.682 'verify-pack -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 682 - verify-pack -h output and SYNOPSIS agree

expecting success of 0450.683 'verify-tag -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 683 - verify-tag -h output has no \t

expecting success of 0450.684 'verify-tag -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 684 - verify-tag -h output has dashed labels

expecting success of 0450.685 'verify-tag -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 685 - verify-tag -h output has consistent spacing

expecting success of 0450.686 'verify-tag *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 686 - verify-tag *.txt SYNOPSIS has dashed labels

expecting success of 0450.687 'verify-tag -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 687 - verify-tag -h output and SYNOPSIS agree

expecting success of 0450.688 'version -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 688 - version -h output has no \t

expecting success of 0450.689 'version -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 689 - version -h output has dashed labels

expecting success of 0450.690 'version -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 690 - version -h output has consistent spacing

expecting success of 0450.691 'version *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 691 - version *.txt SYNOPSIS has dashed labels

expecting success of 0450.692 'version -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 692 - version -h output and SYNOPSIS agree

expecting success of 0450.693 'whatchanged -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 693 - whatchanged -h output has no \t

expecting success of 0450.694 'whatchanged -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 694 - whatchanged -h output has dashed labels

expecting success of 0450.695 'whatchanged -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 695 - whatchanged -h output has consistent spacing

expecting success of 0450.696 'whatchanged *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 696 - whatchanged *.txt SYNOPSIS has dashed labels

checking known breakage of 0450.697 'whatchanged -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
--- txt	2022-12-28 07:32:13.760399078 +0000
+++ help	2022-12-28 07:32:13.790400188 +0000
@@ -1 +1,2 @@
-git whatchanged <option>...
+git log [<options>] [<revision-range>] [[--] <path>...]
+git show [<options>] <object>...
not ok 697 - whatchanged -h output and SYNOPSIS agree # TODO known breakage

expecting success of 0450.698 'worktree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 698 - worktree -h output has no \t

expecting success of 0450.699 'worktree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 699 - worktree -h output has dashed labels

expecting success of 0450.700 'worktree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 700 - worktree -h output has consistent spacing

expecting success of 0450.701 'worktree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 701 - worktree *.txt SYNOPSIS has dashed labels

expecting success of 0450.702 'worktree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 702 - worktree -h output and SYNOPSIS agree

expecting success of 0450.703 'write-tree -h output has no \t': 
		h2s="$(help_to_synopsis "$builtin")" &&
		! grep "$HT" "$h2s"
	
ok 703 - write-tree -h output has no \t

expecting success of 0450.704 'write-tree -h output has dashed labels': 
		check_dashed_labels "$(help_to_synopsis "$builtin")"
	
ok 704 - write-tree -h output has dashed labels

expecting success of 0450.705 'write-tree -h output has consistent spacing': 
		h2s="$(help_to_synopsis "$builtin")" &&
		sed -n \
			-e "/^ / {
				s/[^ ].*//;
				p;
			}" \
			<"$h2s" >help &&
		sort -u help >help.ws &&
		if test -s help.ws
		then
			test_line_count = 1 help.ws
		fi
	
ok 705 - write-tree -h output has consistent spacing

expecting success of 0450.706 'write-tree *.txt SYNOPSIS has dashed labels': 
		check_dashed_labels "$(txt_to_synopsis "$builtin")"
	
ok 706 - write-tree *.txt SYNOPSIS has dashed labels

expecting success of 0450.707 'write-tree -h output and SYNOPSIS agree': 
		t2s="$(txt_to_synopsis "$builtin")" &&
		if test "$builtin" = "merge-tree"
		then
			test_when_finished "rm -f t2s.new" &&
			sed -e 's/ (deprecated)$//g' <"$t2s" >t2s.new
			t2s=t2s.new
		fi &&
		h2s="$(help_to_synopsis "$builtin")" &&

		# The *.txt and -h use different spacing for the
		# alignment of continued usage output, normalize it.
		align_after_nl "$builtin" <"$t2s" >txt &&
		align_after_nl "$builtin" <"$h2s" >help &&
		test_cmp txt help
	
ok 707 - write-tree -h output and SYNOPSIS agree

# still have 56 known breakage(s)
# passed all remaining 651 test(s)
1..707
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1008-read-tree-overlay.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1008-read-tree-overlay/.git/
expecting success of 1008.1 'setup': 
	echo one >a &&
	git add a &&
	git commit -m initial &&
	git tag initial &&
	echo two >b &&
	git add b &&
	git commit -m second &&
	git checkout -b side initial &&
	echo three >a &&
	mkdir b &&
	echo four >b/c &&
	git add b/c &&
	git commit -m third

[main (root-commit) 4d54ff5] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main a9fb064] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Switched to a new branch 'side'
[side 2be041c] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b/c
ok 1 - setup

expecting success of 1008.2 'multi-read': 
	read_tree_must_succeed initial main side &&
	test_write_lines a b/c >expect &&
	git ls-files >actual &&
	test_cmp expect actual

ok 2 - multi-read

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1009-read-tree-new-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1009-read-tree-new-index/.git/
expecting success of 1009.1 'setup': 
	echo one >a &&
	git add a &&
	git commit -m initial

[main (root-commit) 4d54ff5] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
ok 1 - setup

expecting success of 1009.2 'non-existent index file': 
	rm -f new-index &&
	GIT_INDEX_FILE=new-index git read-tree main

ok 2 - non-existent index file

expecting success of 1009.3 'empty index file': 
	rm -f new-index &&
	> new-index &&
	GIT_INDEX_FILE=new-index git read-tree main

ok 3 - empty index file

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1010-mktree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1010-mktree/.git/
expecting success of 1010.1 'setup': 
	for d in a a- a0
	do
		mkdir "$d" && echo "$d/one" >"$d/one" &&
		git add "$d" || return 1
	done &&
	echo zero >one &&
	git update-index --add --info-only one &&
	git write-tree --missing-ok >tree.missing &&
	git ls-tree $(cat tree.missing) >top.missing &&
	git ls-tree -r $(cat tree.missing) >all.missing &&
	echo one >one &&
	git add one &&
	git write-tree >tree &&
	git ls-tree $(cat tree) >top &&
	git ls-tree -r $(cat tree) >all &&
	test_tick &&
	git commit -q -m one &&
	H=$(git rev-parse HEAD) &&
	git update-index --add --cacheinfo 160000 $H sub &&
	test_tick &&
	git commit -q -m two &&
	git rev-parse HEAD^{tree} >tree.withsub &&
	git ls-tree HEAD >top.withsub &&
	git ls-tree -r HEAD >all.withsub

ok 1 - setup

expecting success of 1010.2 'ls-tree piped to mktree (1)': 
	git mktree <top >actual &&
	test_cmp tree actual

ok 2 - ls-tree piped to mktree (1)

expecting success of 1010.3 'ls-tree piped to mktree (2)': 
	git mktree <top.withsub >actual &&
	test_cmp tree.withsub actual

ok 3 - ls-tree piped to mktree (2)

expecting success of 1010.4 'ls-tree output in wrong order given to mktree (1)': 
	perl -e "print reverse <>" <top |
	git mktree >actual &&
	test_cmp tree actual

ok 4 - ls-tree output in wrong order given to mktree (1)

expecting success of 1010.5 'ls-tree output in wrong order given to mktree (2)': 
	perl -e "print reverse <>" <top.withsub |
	git mktree >actual &&
	test_cmp tree.withsub actual

ok 5 - ls-tree output in wrong order given to mktree (2)

expecting success of 1010.6 'allow missing object with --missing': 
	git mktree --missing <top.missing >actual &&
	test_cmp tree.missing actual

ok 6 - allow missing object with --missing

expecting success of 1010.7 'mktree refuses to read ls-tree -r output (1)': 
	test_must_fail git mktree <all >actual

fatal: path a-/one contains slash
ok 7 - mktree refuses to read ls-tree -r output (1)

expecting success of 1010.8 'mktree refuses to read ls-tree -r output (2)': 
	test_must_fail git mktree <all.withsub >actual

fatal: path a-/one contains slash
ok 8 - mktree refuses to read ls-tree -r output (2)

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1012-read-tree-df.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1012-read-tree-df/.git/
expecting success of 1012.1 'setup': 
	maketree O-000 a/b-2/c/d a/b/c/d a/x &&
	maketree A-000 a/b-2/c/d a/b/c/d a/x &&
	maketree A-001 a/b-2/c/d a/b/c/d a/b/c/e a/x &&
	maketree B-000 a/b-2/c/d a/b     a/x &&

	maketree O-010 t-0     t/1  t/2 t=3 &&
	maketree A-010 t-0 t            t=3 &&
	maketree B-010         t/1:     t=3: &&

	maketree O-020 ds/dma/ioat.c ds/dma/ioat_dca.c &&
	maketree A-020 ds/dma/ioat/Makefile ds/dma/ioat/registers.h &&
	:

ok 1 - setup

expecting success of 1012.2 '3-way (1)': 
	settree A-000 &&
	read_tree_u_must_succeed -m -u O-000 A-000 B-000 &&
	checkindex <<-EOF
	3 a/b
	0 a/b-2/c/d
	1 a/b/c/d
	2 a/b/c/d
	0 a/x
	EOF

ok 2 - 3-way (1)

expecting success of 1012.3 '3-way (2)': 
	settree A-001 &&
	read_tree_u_must_succeed -m -u O-000 A-001 B-000 &&
	checkindex <<-EOF
	3 a/b
	0 a/b-2/c/d
	1 a/b/c/d
	2 a/b/c/d
	2 a/b/c/e
	0 a/x
	EOF

ok 3 - 3-way (2)

expecting success of 1012.4 '3-way (3)': 
	settree A-010 &&
	read_tree_u_must_succeed -m -u O-010 A-010 B-010 &&
	checkindex <<-EOF
	2 t
	1 t-0
	2 t-0
	1 t/1
	3 t/1
	1 t/2
	0 t=3
	EOF

ok 4 - 3-way (3)

expecting success of 1012.5 '2-way (1)': 
	settree O-020 &&
	read_tree_u_must_succeed -m -u O-020 A-020 &&
	checkindex <<-EOF
	0 ds/dma/ioat/Makefile
	0 ds/dma/ioat/registers.h
	EOF

ok 5 - 2-way (1)

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1011-read-tree-sparse-checkout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1011-read-tree-sparse-checkout/.git/
expecting success of 1011.1 'setup': 
	test_commit init &&
	echo modified >>init.t &&

	cat >expected <<-EOF &&
	100644 $(git hash-object init.t) 0	init.t
	100644 $EMPTY_BLOB 0	sub/added
	100644 $EMPTY_BLOB 0	sub/addedtoo
	100644 $EMPTY_BLOB 0	subsub/added
	EOF
	cat >expected.swt <<-\EOF &&
	H init.t
	H sub/added
	H sub/addedtoo
	H subsub/added
	EOF

	mkdir sub subsub &&
	touch sub/added sub/addedtoo subsub/added &&
	git add init.t sub/added sub/addedtoo subsub/added &&
	git commit -m "modified and added" &&
	git tag top &&
	git rm sub/added &&
	git commit -m removed &&
	git tag removed &&
	git checkout top &&
	git ls-files --stage >result &&
	test_cmp expected result

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 9598e22] modified and added
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 create mode 100644 sub/added
 create mode 100644 sub/addedtoo
 create mode 100644 subsub/added
rm 'sub/added'
[master de70956] removed
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 sub/added
Note: switching to 'top'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9598e22 modified and added
ok 1 - setup

expecting success of 1011.2 'read-tree without .git/info/sparse-checkout': 
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files --stage >result &&
	test_cmp expected result &&
	git ls-files -t >result &&
	test_cmp expected.swt result

ok 2 - read-tree without .git/info/sparse-checkout

expecting success of 1011.3 'read-tree with .git/info/sparse-checkout but disabled': 
	mkdir .git/info &&
	echo >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt result &&
	test_path_is_file init.t &&
	test_path_is_file sub/added

ok 3 - read-tree with .git/info/sparse-checkout but disabled

expecting success of 1011.4 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled': 
	git config core.sparsecheckout true &&
	echo >.git/info/sparse-checkout &&
	read_tree_u_must_succeed --no-sparse-checkout -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt result &&
	test_path_is_file init.t &&
	test_path_is_file sub/added

ok 4 - read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled

expecting success of 1011.5 'read-tree with empty .git/info/sparse-checkout': 
	git config core.sparsecheckout true &&
	echo >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files --stage >result &&
	test_cmp expected result &&
	git ls-files -t >result &&
	cat >expected.swt <<-\EOF &&
	S init.t
	S sub/added
	S sub/addedtoo
	S subsub/added
	EOF
	test_cmp expected.swt result &&
	test_path_is_missing init.t &&
	test_path_is_missing sub/added

ok 5 - read-tree with empty .git/info/sparse-checkout

expecting success of 1011.6 'match directories with trailing slash': 
	cat >expected.swt-noinit <<-\EOF &&
	S init.t
	H sub/added
	H sub/addedtoo
	S subsub/added
	EOF

	echo sub/ > .git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files -t > result &&
	test_cmp expected.swt-noinit result &&
	test_path_is_missing init.t &&
	test_path_is_file sub/added

ok 6 - match directories with trailing slash

expecting success of 1011.7 'match directories without trailing slash': 
	echo sub >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt-noinit result &&
	test_path_is_missing init.t &&
	test_path_is_file sub/added

ok 7 - match directories without trailing slash

expecting success of 1011.8 'match directories with negated patterns': 
	cat >expected.swt-negation <<\EOF &&
S init.t
S sub/added
H sub/addedtoo
S subsub/added
EOF

	cat >.git/info/sparse-checkout <<\EOF &&
sub
!sub/added
EOF
	git read-tree -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt-negation result &&
	test_path_is_missing init.t &&
	test_path_is_missing sub/added &&
	test_path_is_file sub/addedtoo

ok 8 - match directories with negated patterns

expecting success of 1011.9 'match directories with negated patterns (2)': 
	cat >expected.swt-negation2 <<\EOF &&
H init.t
H sub/added
S sub/addedtoo
H subsub/added
EOF

	cat >.git/info/sparse-checkout <<\EOF &&
/*
!sub
sub/added
EOF
	git read-tree -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt-negation2 result &&
	test_path_is_file init.t &&
	test_path_is_file sub/added &&
	test_path_is_missing sub/addedtoo

ok 9 - match directories with negated patterns (2)

expecting success of 1011.10 'match directory pattern': 
	echo "s?b" >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt-noinit result &&
	test_path_is_missing init.t &&
	test_path_is_file sub/added

ok 10 - match directory pattern

expecting success of 1011.11 'checkout area changes': 
	cat >expected.swt-nosub <<-\EOF &&
	H init.t
	S sub/added
	S sub/addedtoo
	S subsub/added
	EOF

	echo init.t >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&
	git ls-files -t >result &&
	test_cmp expected.swt-nosub result &&
	test_path_is_file init.t &&
	test_path_is_missing sub/added

ok 11 - checkout area changes

expecting success of 1011.12 'read-tree updates worktree, absent case': 
	echo sub/added >.git/info/sparse-checkout &&
	git checkout -f top &&
	read_tree_u_must_succeed -m -u HEAD^ &&
	test_path_is_missing init.t

HEAD is now at 9598e22 modified and added
ok 12 - read-tree updates worktree, absent case

expecting success of 1011.13 'read-tree will not throw away dirty changes, non-sparse': 
	echo "/*" >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&

	echo dirty >init.t &&
	read_tree_u_must_fail -m -u HEAD^ &&
	test_path_is_file init.t &&
	grep -q dirty init.t

error: Entry 'init.t' not uptodate. Cannot merge.
error: Entry 'init.t' not uptodate. Cannot merge.
ok 13 - read-tree will not throw away dirty changes, non-sparse

expecting success of 1011.14 'read-tree will not throw away dirty changes, sparse': 
	echo "/*" >.git/info/sparse-checkout &&
	read_tree_u_must_succeed -m -u HEAD &&

	echo dirty >init.t &&
	echo sub/added >.git/info/sparse-checkout &&
	read_tree_u_must_fail -m -u HEAD^ &&
	test_path_is_file init.t &&
	grep -q dirty init.t

error: Entry 'init.t' not uptodate. Cannot merge.
error: Entry 'init.t' not uptodate. Cannot merge.
ok 14 - read-tree will not throw away dirty changes, sparse

expecting success of 1011.15 'read-tree updates worktree, dirty case': 
	echo sub/added >.git/info/sparse-checkout &&
	git checkout -f top &&
	echo dirty >init.t &&
	read_tree_u_must_fail -m -u HEAD^ &&
	grep -q dirty init.t &&
	rm init.t

HEAD is now at 9598e22 modified and added
error: Entry 'init.t' not uptodate. Cannot merge.
error: Entry 'init.t' not uptodate. Cannot merge.
ok 15 - read-tree updates worktree, dirty case

expecting success of 1011.16 'read-tree removes worktree, dirty case': 
	echo init.t >.git/info/sparse-checkout &&
	git checkout -f top &&
	echo dirty >added &&
	read_tree_u_must_succeed -m -u HEAD^ &&
	grep -q dirty added

HEAD is now at 9598e22 modified and added
ok 16 - read-tree removes worktree, dirty case

expecting success of 1011.17 'read-tree adds to worktree, absent case': 
	echo init.t >.git/info/sparse-checkout &&
	git checkout -f removed &&
	read_tree_u_must_succeed -u -m HEAD^ &&
	test_path_is_missing sub/added

Previous HEAD position was 9598e22 modified and added
HEAD is now at de70956 removed
ok 17 - read-tree adds to worktree, absent case

expecting success of 1011.18 'read-tree adds to worktree, dirty case': 
	echo init.t >.git/info/sparse-checkout &&
	git checkout -f removed &&
	mkdir sub &&
	echo dirty >sub/added &&
	read_tree_u_must_succeed -u -m HEAD^ &&
	grep -q dirty sub/added

HEAD is now at de70956 removed
ok 18 - read-tree adds to worktree, dirty case

expecting success of 1011.19 'index removal and worktree narrowing at the same time': 
	echo init.t >.git/info/sparse-checkout &&
	echo sub/added >>.git/info/sparse-checkout &&
	git checkout -f top &&
	echo init.t >.git/info/sparse-checkout &&
	git checkout removed &&
	git ls-files sub/added >result &&
	test_path_is_missing sub/added &&
	test_must_be_empty result

Previous HEAD position was de70956 removed
HEAD is now at 9598e22 modified and added
Previous HEAD position was 9598e22 modified and added
HEAD is now at de70956 removed
ok 19 - index removal and worktree narrowing at the same time

expecting success of 1011.20 'read-tree --reset removes outside worktree': 
	echo init.t >.git/info/sparse-checkout &&
	git checkout -f top &&
	git reset --hard removed &&
	git ls-files sub/added >result &&
	test_must_be_empty result

Previous HEAD position was de70956 removed
HEAD is now at 9598e22 modified and added
HEAD is now at de70956 removed
ok 20 - read-tree --reset removes outside worktree

expecting success of 1011.21 'print warnings when some worktree updates disabled': 
	echo sub >.git/info/sparse-checkout &&
	git checkout -f init &&
	mkdir sub &&
	touch sub/added sub/addedtoo &&
	# Use -q to suppress "Previous HEAD position" and "Head is now at" msgs
	git checkout -q top 2>actual &&
	cat >expected <<\EOF &&
warning: The following paths were already present and thus not updated despite sparse patterns:
	sub/added
	sub/addedtoo

After fixing the above paths, you may want to run `git sparse-checkout reapply`.
EOF
	test_cmp expected actual

Previous HEAD position was de70956 removed
HEAD is now at 2519212 init
ok 21 - print warnings when some worktree updates disabled

expecting success of 1011.22 'checkout without --ignore-skip-worktree-bits': 
	echo "*" >.git/info/sparse-checkout &&
	git checkout -f top &&
	test_path_is_file init.t &&
	echo sub >.git/info/sparse-checkout &&
	git checkout &&
	echo modified >> sub/added &&
	git checkout . &&
	test_path_is_missing init.t &&
	git diff --exit-code HEAD

HEAD is now at 9598e22 modified and added
Updated 1 path from the index
ok 22 - checkout without --ignore-skip-worktree-bits

expecting success of 1011.23 'checkout with --ignore-skip-worktree-bits': 
	echo "*" >.git/info/sparse-checkout &&
	git checkout -f top &&
	test_path_is_file init.t &&
	echo sub >.git/info/sparse-checkout &&
	git checkout &&
	echo modified >> sub/added &&
	git checkout --ignore-skip-worktree-bits . &&
	test_path_is_file init.t &&
	git diff --exit-code HEAD

HEAD is now at 9598e22 modified and added
Updated 3 paths from the index
ok 23 - checkout with --ignore-skip-worktree-bits

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1014-read-tree-confusing.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1014-read-tree-confusing/.git/
expecting success of 1014.1 'create base tree': 
	echo content >file &&
	git add file &&
	git commit -m base &&
	blob=$(git rev-parse HEAD:file) &&
	tree=$(git rev-parse HEAD^{tree})

[master (root-commit) 5d770fe] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - create base tree

expecting success of 1014.2 'enable core.protectHFS for rejection tests': 
	git config core.protectHFS true

ok 2 - enable core.protectHFS for rejection tests

expecting success of 1014.3 'enable core.protectNTFS for rejection tests': 
	git config core.protectNTFS true

ok 3 - enable core.protectNTFS for rejection tests

expecting success of 1014.4 'reject . at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.'
ok 4 - reject . at end of path

expecting success of 1014.5 'reject . as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path './file'
ok 5 - reject . as subtree

expecting success of 1014.6 'reject .. at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '..'
ok 6 - reject .. at end of path

expecting success of 1014.7 'reject .. as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '../file'
ok 7 - reject .. as subtree

expecting success of 1014.8 'reject .git at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git'
ok 8 - reject .git at end of path

expecting success of 1014.9 'reject .git as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git/file'
ok 9 - reject .git as subtree

expecting success of 1014.10 'reject .GIT at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.GIT'
ok 10 - reject .GIT at end of path

expecting success of 1014.11 'reject .GIT as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.GIT/file'
ok 11 - reject .GIT as subtree

expecting success of 1014.12 'reject {u200c}.Git at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '‌.Git'
ok 12 - reject {u200c}.Git at end of path

expecting success of 1014.13 'reject {u200c}.Git as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '‌.Git/file'
ok 13 - reject {u200c}.Git as subtree

expecting success of 1014.14 'reject .gI{u200c}T at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.gI‌T'
ok 14 - reject .gI{u200c}T at end of path

expecting success of 1014.15 'reject .gI{u200c}T as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.gI‌T/file'
ok 15 - reject .gI{u200c}T as subtree

expecting success of 1014.16 'reject .GiT{u200c} at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.GiT‌'
ok 16 - reject .GiT{u200c} at end of path

expecting success of 1014.17 'reject .GiT{u200c} as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.GiT‌/file'
ok 17 - reject .GiT{u200c} as subtree

expecting success of 1014.18 'reject git~1 at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path 'git~1'
ok 18 - reject git~1 at end of path

expecting success of 1014.19 'reject git~1 as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path 'git~1/file'
ok 19 - reject git~1 as subtree

expecting success of 1014.20 'reject .git.{space} at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git. '
ok 20 - reject .git.{space} at end of path

expecting success of 1014.21 'reject .git.{space} as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git. /file'
ok 21 - reject .git.{space} as subtree

expecting success of 1014.22 'reject backslashes at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.\.GIT\foobar'
ok 22 - reject backslashes at end of path

expecting success of 1014.23 'reject backslashes as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.\.GIT\foobar/file'
ok 23 - reject backslashes as subtree

expecting success of 1014.24 'reject backslashes2 at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git\foobar'
ok 24 - reject backslashes2 at end of path

expecting success of 1014.25 'reject backslashes2 as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git\foobar/file'
ok 25 - reject backslashes2 as subtree

expecting success of 1014.26 'reject .git...:alternate-stream at end of path': 
		printf "100644 blob %s\t%s" "$blob" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git...:alternate-stream'
ok 26 - reject .git...:alternate-stream at end of path

expecting success of 1014.27 'reject .git...:alternate-stream as subtree': 
		printf "040000 tree %s\t%s" "$tree" "$path" >tree &&
		bogus=$(git mktree <tree) &&
		test_must_fail git read-tree $bogus
	
error: invalid path '.git...:alternate-stream/file'
ok 27 - reject .git...:alternate-stream as subtree

expecting success of 1014.28 'utf-8 paths allowed with core.protectHFS off': 
	test_when_finished "git read-tree HEAD" &&
	test_config core.protectHFS false &&
	printf "100644 blob %s\t%s" "$blob" ".gi${u200c}t" >tree &&
	ok=$(git mktree <tree) &&
	git read-tree $ok

ok 28 - utf-8 paths allowed with core.protectHFS off

# passed all 28 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1006-cat-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1006-cat-file/.git/
expecting success of 1006.1 'usage: cmdmode -e -p': 
		test_cmdmode_usage git cat-file $switches
	
error: switch `p' is incompatible with -e
ok 1 - usage: cmdmode -e -p

expecting success of 1006.2 'usage: cmdmode -p -t': 
		test_cmdmode_usage git cat-file $switches
	
error: switch `t' is incompatible with -p
ok 2 - usage: cmdmode -p -t

expecting success of 1006.3 'usage: cmdmode -t -s': 
		test_cmdmode_usage git cat-file $switches
	
error: switch `s' is incompatible with -t
ok 3 - usage: cmdmode -t -s

expecting success of 1006.4 'usage: cmdmode -s --textconv': 
		test_cmdmode_usage git cat-file $switches
	
error: option `textconv' is incompatible with -s
ok 4 - usage: cmdmode -s --textconv

expecting success of 1006.5 'usage: cmdmode --textconv --filters': 
		test_cmdmode_usage git cat-file $switches
	
error: option `filters' is incompatible with --textconv
ok 5 - usage: cmdmode --textconv --filters

expecting success of 1006.6 'usage: cmdmode --batch-all-objects -e': 
		test_cmdmode_usage git cat-file $switches
	
error: switch `e' is incompatible with --batch-all-objects
ok 6 - usage: cmdmode --batch-all-objects -e

expecting success of 1006.7 'usage: incompatible options: --path with --batch': 
		test_incompatible_usage git cat-file --path=foo $opt
	
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 7 - usage: incompatible options: --path with --batch

expecting success of 1006.8 'usage: incompatible options: --path with --batch-check': 
		test_incompatible_usage git cat-file --path=foo $opt
	
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 8 - usage: incompatible options: --path with --batch-check

expecting success of 1006.9 'usage: --textconv requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <rev> required with '--textconv'
ok 9 - usage: --textconv requires another option

expecting success of 1006.10 'usage: --filters requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <rev> required with '--filters'
ok 10 - usage: --filters requires another option

expecting success of 1006.11 'usage: -e requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <object> required with '-e'
ok 11 - usage: -e requires another option

expecting success of 1006.12 'usage: incompatible options: -e and --batch': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-e' is incompatible with batch mode
ok 12 - usage: incompatible options: -e and --batch

expecting success of 1006.13 'usage: incompatible options: -e and --batch-check': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-e' is incompatible with batch mode
ok 13 - usage: incompatible options: -e and --batch-check

expecting success of 1006.14 'usage: incompatible options: -e and --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 14 - usage: incompatible options: -e and --follow-symlinks

expecting success of 1006.15 'usage: incompatible options: -e and --path=foo HEAD:some-path.txt': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 15 - usage: incompatible options: -e and --path=foo HEAD:some-path.txt

expecting success of 1006.16 'usage: -p requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <object> required with '-p'
ok 16 - usage: -p requires another option

expecting success of 1006.17 'usage: incompatible options: -p and --batch': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-p' is incompatible with batch mode
ok 17 - usage: incompatible options: -p and --batch

expecting success of 1006.18 'usage: incompatible options: -p and --batch-check': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-p' is incompatible with batch mode
ok 18 - usage: incompatible options: -p and --batch-check

expecting success of 1006.19 'usage: incompatible options: -p and --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 19 - usage: incompatible options: -p and --follow-symlinks

expecting success of 1006.20 'usage: incompatible options: -p and --path=foo HEAD:some-path.txt': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 20 - usage: incompatible options: -p and --path=foo HEAD:some-path.txt

expecting success of 1006.21 'usage: -t requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <object> required with '-t'
ok 21 - usage: -t requires another option

expecting success of 1006.22 'usage: incompatible options: -t and --batch': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-t' is incompatible with batch mode
ok 22 - usage: incompatible options: -t and --batch

expecting success of 1006.23 'usage: incompatible options: -t and --batch-check': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-t' is incompatible with batch mode
ok 23 - usage: incompatible options: -t and --batch-check

expecting success of 1006.24 'usage: incompatible options: -t and --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 24 - usage: incompatible options: -t and --follow-symlinks

expecting success of 1006.25 'usage: incompatible options: -t and --path=foo HEAD:some-path.txt': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 25 - usage: incompatible options: -t and --path=foo HEAD:some-path.txt

expecting success of 1006.26 'usage: -s requires another option': 
		test_missing_usage git cat-file $opt
	
fatal: <object> required with '-s'
ok 26 - usage: -s requires another option

expecting success of 1006.27 'usage: incompatible options: -s and --batch': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-s' is incompatible with batch mode
ok 27 - usage: incompatible options: -s and --batch

expecting success of 1006.28 'usage: incompatible options: -s and --batch-check': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '-s' is incompatible with batch mode
ok 28 - usage: incompatible options: -s and --batch-check

expecting success of 1006.29 'usage: incompatible options: -s and --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 29 - usage: incompatible options: -s and --follow-symlinks

expecting success of 1006.30 'usage: incompatible options: -s and --path=foo HEAD:some-path.txt': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 30 - usage: incompatible options: -s and --path=foo HEAD:some-path.txt

expecting success of 1006.31 'usage: too many arguments: -e one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 31 - usage: too many arguments: -e one two three

expecting success of 1006.32 'usage: incompatible arguments: -e with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 32 - usage: incompatible arguments: -e with batch option --buffer

expecting success of 1006.33 'usage: incompatible arguments: -e with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 33 - usage: incompatible arguments: -e with batch option --follow-symlinks

expecting success of 1006.34 'usage: too many arguments: -p one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 34 - usage: too many arguments: -p one two three

expecting success of 1006.35 'usage: incompatible arguments: -p with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 35 - usage: incompatible arguments: -p with batch option --buffer

expecting success of 1006.36 'usage: incompatible arguments: -p with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 36 - usage: incompatible arguments: -p with batch option --follow-symlinks

expecting success of 1006.37 'usage: too many arguments: -t one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 37 - usage: too many arguments: -t one two three

expecting success of 1006.38 'usage: incompatible arguments: -t with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 38 - usage: incompatible arguments: -t with batch option --buffer

expecting success of 1006.39 'usage: incompatible arguments: -t with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 39 - usage: incompatible arguments: -t with batch option --follow-symlinks

expecting success of 1006.40 'usage: too many arguments: -s one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 40 - usage: too many arguments: -s one two three

expecting success of 1006.41 'usage: incompatible arguments: -s with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 41 - usage: incompatible arguments: -s with batch option --buffer

expecting success of 1006.42 'usage: incompatible arguments: -s with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 42 - usage: incompatible arguments: -s with batch option --follow-symlinks

expecting success of 1006.43 'usage: too many arguments: --textconv one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 43 - usage: too many arguments: --textconv one two three

expecting success of 1006.44 'usage: incompatible arguments: --textconv with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 44 - usage: incompatible arguments: --textconv with batch option --buffer

expecting success of 1006.45 'usage: incompatible arguments: --textconv with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 45 - usage: incompatible arguments: --textconv with batch option --follow-symlinks

expecting success of 1006.46 'usage: too many arguments: --filters one two three': 
		test_too_many_arguments git cat-file $opt $args
	
fatal: too many arguments
ok 46 - usage: too many arguments: --filters one two three

expecting success of 1006.47 'usage: incompatible arguments: --filters with batch option --buffer': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--buffer' requires a batch mode
ok 47 - usage: incompatible arguments: --filters with batch option --buffer

expecting success of 1006.48 'usage: incompatible arguments: --filters with batch option --follow-symlinks': 
			test_incompatible_usage git cat-file $opt $opt2
		
fatal: '--follow-symlinks' requires a batch mode
ok 48 - usage: incompatible arguments: --filters with batch option --follow-symlinks

expecting success of 1006.49 'usage: bad option combination: --buffer without batch mode': 
		test_incompatible_usage git cat-file $opt &&
		test_incompatible_usage git cat-file $opt commit HEAD
	
fatal: '--buffer' requires a batch mode
fatal: '--buffer' requires a batch mode
ok 49 - usage: bad option combination: --buffer without batch mode

expecting success of 1006.50 'usage: bad option combination: --follow-symlinks without batch mode': 
		test_incompatible_usage git cat-file $opt &&
		test_incompatible_usage git cat-file $opt commit HEAD
	
fatal: '--follow-symlinks' requires a batch mode
fatal: '--follow-symlinks' requires a batch mode
ok 50 - usage: bad option combination: --follow-symlinks without batch mode

expecting success of 1006.51 'usage: bad option combination: --batch-all-objects without batch mode': 
		test_incompatible_usage git cat-file $opt &&
		test_incompatible_usage git cat-file $opt commit HEAD
	
fatal: '--batch-all-objects' requires a batch mode
fatal: '--batch-all-objects' requires a batch mode
ok 51 - usage: bad option combination: --batch-all-objects without batch mode

expecting success of 1006.52 'usage: bad option combination: -z without batch mode': 
		test_incompatible_usage git cat-file $opt &&
		test_incompatible_usage git cat-file $opt commit HEAD
	
fatal: '-z' requires a batch mode
fatal: '-z' requires a batch mode
ok 52 - usage: bad option combination: -z without batch mode

expecting success of 1006.53 'setup': 
	echo_without_newline "$hello_content" > hello &&
	git update-index --add hello

ok 53 - setup

expecting success of 1006.54 'blob exists': 
	git cat-file -e $sha1
    
ok 54 - blob exists

expecting success of 1006.55 'Type of blob is correct': 
	echo $type >expect &&
	git cat-file -t $sha1 >actual &&
	test_cmp expect actual
    
ok 55 - Type of blob is correct

expecting success of 1006.56 'Size of blob is correct': 
	echo $size >expect &&
	git cat-file -s $sha1 >actual &&
	test_cmp expect actual
    
ok 56 - Size of blob is correct

expecting success of 1006.57 'Type of blob is correct using --allow-unknown-type': 
	echo $type >expect &&
	git cat-file -t --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 57 - Type of blob is correct using --allow-unknown-type

expecting success of 1006.58 'Size of blob is correct using --allow-unknown-type': 
	echo $size >expect &&
	git cat-file -s --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 58 - Size of blob is correct using --allow-unknown-type

expecting success of 1006.59 'Content of blob is correct': 
	maybe_remove_timestamp "$content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 59 - Content of blob is correct

expecting success of 1006.60 'Pretty content of blob is correct': 
	maybe_remove_timestamp "$pretty_content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 60 - Pretty content of blob is correct

expecting success of 1006.61 '--batch output of blob is correct': 
	maybe_remove_timestamp "$batch_output" $no_ts >expect &&
	maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts >actual &&
	test_cmp expect actual
    
ok 61 - --batch output of blob is correct

expecting success of 1006.62 '--batch-check output of blob is correct': 
	echo "$sha1 $type $size" >expect &&
	echo_without_newline $sha1 | git cat-file --batch-check >actual &&
	test_cmp expect actual
    
ok 62 - --batch-check output of blob is correct

expecting success of 1006.63 '--batch-command --buffer output of blob content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 63 - --batch-command --buffer output of blob content is correct

expecting success of 1006.64 '--batch-command --buffer output of blob info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 64 - --batch-command --buffer output of blob info is correct

expecting success of 1006.65 '--batch-command --no-buffer output of blob content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 65 - --batch-command --no-buffer output of blob content is correct

expecting success of 1006.66 '--batch-command --no-buffer output of blob info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 66 - --batch-command --no-buffer output of blob info is correct

expecting success of 1006.67 'custom --batch-check format': 
	echo "$type $sha1" >expect &&
	echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 67 - custom --batch-check format

expecting success of 1006.68 'custom --batch-command format': 
	echo "$type $sha1" >expect &&
	echo "info $sha1" | git cat-file --batch-command="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 68 - custom --batch-command format

expecting success of 1006.69 '--batch-check with %(rest)': 
	echo "$type this is some extra content" >expect &&
	echo "$sha1    this is some extra content" |
		git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
	test_cmp expect actual
    
ok 69 - --batch-check with %(rest)

expecting success of 1006.70 '--batch without type (blob)': 
	{
		echo "$size" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objectsize)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 70 - --batch without type (blob)

expecting success of 1006.71 '--batch without size (blob)': 
	{
		echo "$type" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objecttype)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 71 - --batch without size (blob)

expecting success of 1006.72 '--batch-command --buffer with flush for blob info': 
	echo "$hello_sha1 blob $hello_size" >expect &&
	test_write_lines "info $hello_sha1" "flush" |
	GIT_TEST_CAT_FILE_NO_FLUSH_ON_EXIT=1 \
	git cat-file --batch-command --buffer >actual &&
	test_cmp expect actual

ok 72 - --batch-command --buffer with flush for blob info

expecting success of 1006.73 '--batch-command --buffer without flush for blob info': 
	touch output &&
	test_write_lines "info $hello_sha1" |
	GIT_TEST_CAT_FILE_NO_FLUSH_ON_EXIT=1 \
	git cat-file --batch-command --buffer >>output &&
	test_must_be_empty output

ok 73 - --batch-command --buffer without flush for blob info

expecting success of 1006.74 '--batch-check without %(rest) considers whole line': 
	echo "$hello_sha1 blob $hello_size" >expect &&
	git update-index --add --cacheinfo 100644 $hello_sha1 "white space" &&
	test_when_finished "git update-index --remove \"white space\"" &&
	echo ":white space" | git cat-file --batch-check >actual &&
	test_cmp expect actual

ok 74 - --batch-check without %(rest) considers whole line

expecting success of 1006.75 'tree exists': 
	git cat-file -e $sha1
    
ok 75 - tree exists

expecting success of 1006.76 'Type of tree is correct': 
	echo $type >expect &&
	git cat-file -t $sha1 >actual &&
	test_cmp expect actual
    
ok 76 - Type of tree is correct

expecting success of 1006.77 'Size of tree is correct': 
	echo $size >expect &&
	git cat-file -s $sha1 >actual &&
	test_cmp expect actual
    
ok 77 - Size of tree is correct

expecting success of 1006.78 'Type of tree is correct using --allow-unknown-type': 
	echo $type >expect &&
	git cat-file -t --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 78 - Type of tree is correct using --allow-unknown-type

expecting success of 1006.79 'Size of tree is correct using --allow-unknown-type': 
	echo $size >expect &&
	git cat-file -s --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 79 - Size of tree is correct using --allow-unknown-type

expecting success of 1006.80 'Pretty content of tree is correct': 
	maybe_remove_timestamp "$pretty_content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 80 - Pretty content of tree is correct

expecting success of 1006.81 '--batch-check output of tree is correct': 
	echo "$sha1 $type $size" >expect &&
	echo_without_newline $sha1 | git cat-file --batch-check >actual &&
	test_cmp expect actual
    
ok 81 - --batch-check output of tree is correct

expecting success of 1006.82 '--batch-command --buffer output of tree info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 82 - --batch-command --buffer output of tree info is correct

expecting success of 1006.83 '--batch-command --no-buffer output of tree info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 83 - --batch-command --no-buffer output of tree info is correct

expecting success of 1006.84 'custom --batch-check format': 
	echo "$type $sha1" >expect &&
	echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 84 - custom --batch-check format

expecting success of 1006.85 'custom --batch-command format': 
	echo "$type $sha1" >expect &&
	echo "info $sha1" | git cat-file --batch-command="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 85 - custom --batch-command format

expecting success of 1006.86 '--batch-check with %(rest)': 
	echo "$type this is some extra content" >expect &&
	echo "$sha1    this is some extra content" |
		git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
	test_cmp expect actual
    
ok 86 - --batch-check with %(rest)

expecting success of 1006.87 'commit exists': 
	git cat-file -e $sha1
    
ok 87 - commit exists

expecting success of 1006.88 'Type of commit is correct': 
	echo $type >expect &&
	git cat-file -t $sha1 >actual &&
	test_cmp expect actual
    
ok 88 - Type of commit is correct

expecting success of 1006.89 'Size of commit is correct': 
	echo $size >expect &&
	git cat-file -s $sha1 >actual &&
	test_cmp expect actual
    
ok 89 - Size of commit is correct

expecting success of 1006.90 'Type of commit is correct using --allow-unknown-type': 
	echo $type >expect &&
	git cat-file -t --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 90 - Type of commit is correct using --allow-unknown-type

expecting success of 1006.91 'Size of commit is correct using --allow-unknown-type': 
	echo $size >expect &&
	git cat-file -s --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 91 - Size of commit is correct using --allow-unknown-type

expecting success of 1006.92 'Content of commit is correct': 
	maybe_remove_timestamp "$content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 92 - Content of commit is correct

expecting success of 1006.93 'Pretty content of commit is correct': 
	maybe_remove_timestamp "$pretty_content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 93 - Pretty content of commit is correct

expecting success of 1006.94 '--batch output of commit is correct': 
	maybe_remove_timestamp "$batch_output" $no_ts >expect &&
	maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts >actual &&
	test_cmp expect actual
    
ok 94 - --batch output of commit is correct

expecting success of 1006.95 '--batch-check output of commit is correct': 
	echo "$sha1 $type $size" >expect &&
	echo_without_newline $sha1 | git cat-file --batch-check >actual &&
	test_cmp expect actual
    
ok 95 - --batch-check output of commit is correct

expecting success of 1006.96 '--batch-command --buffer output of commit content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 96 - --batch-command --buffer output of commit content is correct

expecting success of 1006.97 '--batch-command --buffer output of commit info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 97 - --batch-command --buffer output of commit info is correct

expecting success of 1006.98 '--batch-command --no-buffer output of commit content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 98 - --batch-command --no-buffer output of commit content is correct

expecting success of 1006.99 '--batch-command --no-buffer output of commit info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 99 - --batch-command --no-buffer output of commit info is correct

expecting success of 1006.100 'custom --batch-check format': 
	echo "$type $sha1" >expect &&
	echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 100 - custom --batch-check format

expecting success of 1006.101 'custom --batch-command format': 
	echo "$type $sha1" >expect &&
	echo "info $sha1" | git cat-file --batch-command="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 101 - custom --batch-command format

expecting success of 1006.102 '--batch-check with %(rest)': 
	echo "$type this is some extra content" >expect &&
	echo "$sha1    this is some extra content" |
		git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
	test_cmp expect actual
    
ok 102 - --batch-check with %(rest)

expecting success of 1006.103 '--batch without type (commit)': 
	{
		echo "$size" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objectsize)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 103 - --batch without type (commit)

expecting success of 1006.104 '--batch without size (commit)': 
	{
		echo "$type" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objecttype)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 104 - --batch without size (commit)

expecting success of 1006.105 'tag exists': 
	git cat-file -e $sha1
    
ok 105 - tag exists

expecting success of 1006.106 'Type of tag is correct': 
	echo $type >expect &&
	git cat-file -t $sha1 >actual &&
	test_cmp expect actual
    
ok 106 - Type of tag is correct

expecting success of 1006.107 'Size of tag is correct': 
	echo $size >expect &&
	git cat-file -s $sha1 >actual &&
	test_cmp expect actual
    
ok 107 - Size of tag is correct

expecting success of 1006.108 'Type of tag is correct using --allow-unknown-type': 
	echo $type >expect &&
	git cat-file -t --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 108 - Type of tag is correct using --allow-unknown-type

expecting success of 1006.109 'Size of tag is correct using --allow-unknown-type': 
	echo $size >expect &&
	git cat-file -s --allow-unknown-type $sha1 >actual &&
	test_cmp expect actual
    
ok 109 - Size of tag is correct using --allow-unknown-type

expecting success of 1006.110 'Content of tag is correct': 
	maybe_remove_timestamp "$content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 110 - Content of tag is correct

expecting success of 1006.111 'Pretty content of tag is correct': 
	maybe_remove_timestamp "$pretty_content" $no_ts >expect &&
	maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual &&
	test_cmp expect actual
    
ok 111 - Pretty content of tag is correct

expecting success of 1006.112 '--batch output of tag is correct': 
	maybe_remove_timestamp "$batch_output" $no_ts >expect &&
	maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts >actual &&
	test_cmp expect actual
    
ok 112 - --batch output of tag is correct

expecting success of 1006.113 '--batch-check output of tag is correct': 
	echo "$sha1 $type $size" >expect &&
	echo_without_newline $sha1 | git cat-file --batch-check >actual &&
	test_cmp expect actual
    
ok 113 - --batch-check output of tag is correct

expecting success of 1006.114 '--batch-command --buffer output of tag content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 114 - --batch-command --buffer output of tag content is correct

expecting success of 1006.115 '--batch-command --buffer output of tag info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 115 - --batch-command --buffer output of tag info is correct

expecting success of 1006.116 '--batch-command --no-buffer output of tag content is correct': 
		maybe_remove_timestamp "$batch_output" $no_ts >expect &&
		maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
		git cat-file --batch-command $opt)" $no_ts >actual &&
		test_cmp expect actual
	
ok 116 - --batch-command --no-buffer output of tag content is correct

expecting success of 1006.117 '--batch-command --no-buffer output of tag info is correct': 
		echo "$sha1 $type $size" >expect &&
		test_write_lines "info $sha1" |
		git cat-file --batch-command $opt >actual &&
		test_cmp expect actual
	
ok 117 - --batch-command --no-buffer output of tag info is correct

expecting success of 1006.118 'custom --batch-check format': 
	echo "$type $sha1" >expect &&
	echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 118 - custom --batch-check format

expecting success of 1006.119 'custom --batch-command format': 
	echo "$type $sha1" >expect &&
	echo "info $sha1" | git cat-file --batch-command="%(objecttype) %(objectname)" >actual &&
	test_cmp expect actual
    
ok 119 - custom --batch-command format

expecting success of 1006.120 '--batch-check with %(rest)': 
	echo "$type this is some extra content" >expect &&
	echo "$sha1    this is some extra content" |
		git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
	test_cmp expect actual
    
ok 120 - --batch-check with %(rest)

expecting success of 1006.121 '--batch without type (tag)': 
	{
		echo "$size" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objectsize)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 121 - --batch without type (tag)

expecting success of 1006.122 '--batch without size (tag)': 
	{
		echo "$type" &&
		maybe_remove_timestamp "$content" $no_ts
	} >expect &&
	echo $sha1 | git cat-file --batch="%(objecttype)" >actual.full &&
	maybe_remove_timestamp "$(cat actual.full)" $no_ts >actual &&
	test_cmp expect actual
    
ok 122 - --batch without size (tag)

expecting success of 1006.123 'Reach a blob from a tag pointing to it': test 'Hello World' = "$(git cat-file blob bb50ec8a71343279c59ba488a3445888e3fb624b)"
ok 123 - Reach a blob from a tag pointing to it

expecting success of 1006.124 'Passing -t with --batch fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 124 - Passing -t with --batch fails

expecting success of 1006.125 'Passing --batch with -t fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 125 - Passing --batch with -t fails

expecting success of 1006.126 'Passing -s with --batch fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 126 - Passing -s with --batch fails

expecting success of 1006.127 'Passing --batch with -s fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 127 - Passing --batch with -s fails

expecting success of 1006.128 'Passing -e with --batch fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 128 - Passing -e with --batch fails

expecting success of 1006.129 'Passing --batch with -e fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 129 - Passing --batch with -e fails

expecting success of 1006.130 'Passing -p with --batch fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 130 - Passing -p with --batch fails

expecting success of 1006.131 'Passing --batch with -p fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 131 - Passing --batch with -p fails

expecting success of 1006.132 'Passing <type> with --batch fails': 
	test_must_fail git cat-file --$batch blob $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 132 - Passing <type> with --batch fails

expecting success of 1006.133 'Passing --batch with <type> fails': 
	test_must_fail git cat-file blob --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 133 - Passing --batch with <type> fails

expecting success of 1006.134 'Passing sha1 with --batch fails': 
	test_must_fail git cat-file --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 134 - Passing sha1 with --batch fails

expecting success of 1006.135 'Passing -t with --batch-check fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 135 - Passing -t with --batch-check fails

expecting success of 1006.136 'Passing --batch-check with -t fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 136 - Passing --batch-check with -t fails

expecting success of 1006.137 'Passing -s with --batch-check fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 137 - Passing -s with --batch-check fails

expecting success of 1006.138 'Passing --batch-check with -s fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 138 - Passing --batch-check with -s fails

expecting success of 1006.139 'Passing -e with --batch-check fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 139 - Passing -e with --batch-check fails

expecting success of 1006.140 'Passing --batch-check with -e fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 140 - Passing --batch-check with -e fails

expecting success of 1006.141 'Passing -p with --batch-check fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 141 - Passing -p with --batch-check fails

expecting success of 1006.142 'Passing --batch-check with -p fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 142 - Passing --batch-check with -p fails

expecting success of 1006.143 'Passing <type> with --batch-check fails': 
	test_must_fail git cat-file --$batch blob $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 143 - Passing <type> with --batch-check fails

expecting success of 1006.144 'Passing --batch-check with <type> fails': 
	test_must_fail git cat-file blob --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 144 - Passing --batch-check with <type> fails

expecting success of 1006.145 'Passing sha1 with --batch-check fails': 
	test_must_fail git cat-file --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 145 - Passing sha1 with --batch-check fails

expecting success of 1006.146 'Passing -t with --batch-command fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 146 - Passing -t with --batch-command fails

expecting success of 1006.147 'Passing --batch-command with -t fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-t' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 147 - Passing --batch-command with -t fails

expecting success of 1006.148 'Passing -s with --batch-command fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 148 - Passing -s with --batch-command fails

expecting success of 1006.149 'Passing --batch-command with -s fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-s' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 149 - Passing --batch-command with -s fails

expecting success of 1006.150 'Passing -e with --batch-command fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 150 - Passing -e with --batch-command fails

expecting success of 1006.151 'Passing --batch-command with -e fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-e' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 151 - Passing --batch-command with -e fails

expecting success of 1006.152 'Passing -p with --batch-command fails': 
	    test_must_fail git cat-file --$batch -$opt $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 152 - Passing -p with --batch-command fails

expecting success of 1006.153 'Passing --batch-command with -p fails': 
	    test_must_fail git cat-file -$opt --$batch $hello_sha1
	
fatal: '-p' is incompatible with batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 153 - Passing --batch-command with -p fails

expecting success of 1006.154 'Passing <type> with --batch-command fails': 
	test_must_fail git cat-file --$batch blob $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 154 - Passing <type> with --batch-command fails

expecting success of 1006.155 'Passing --batch-command with <type> fails': 
	test_must_fail git cat-file blob --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 155 - Passing --batch-command with <type> fails

expecting success of 1006.156 'Passing sha1 with --batch-command fails': 
	test_must_fail git cat-file --$batch $hello_sha1
    
fatal: batch modes take no arguments

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 156 - Passing sha1 with --batch-command fails

expecting success of 1006.157 'Passing -t with --follow-symlinks fails': 
	    test_must_fail git cat-file --follow-symlinks -$opt $hello_sha1
	
fatal: '--follow-symlinks' requires a batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 157 - Passing -t with --follow-symlinks fails

expecting success of 1006.158 'Passing -s with --follow-symlinks fails': 
	    test_must_fail git cat-file --follow-symlinks -$opt $hello_sha1
	
fatal: '--follow-symlinks' requires a batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 158 - Passing -s with --follow-symlinks fails

expecting success of 1006.159 'Passing -e with --follow-symlinks fails': 
	    test_must_fail git cat-file --follow-symlinks -$opt $hello_sha1
	
fatal: '--follow-symlinks' requires a batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 159 - Passing -e with --follow-symlinks fails

expecting success of 1006.160 'Passing -p with --follow-symlinks fails': 
	    test_must_fail git cat-file --follow-symlinks -$opt $hello_sha1
	
fatal: '--follow-symlinks' requires a batch mode

usage: git cat-file <type> <object>
   or: git cat-file (-e | -p) <object>
   or: git cat-file (-t | -s) [--allow-unknown-type] <object>
   or: git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
                    [--buffer] [--follow-symlinks] [--unordered]
                    [--textconv | --filters] [-z]
   or: git cat-file (--textconv | --filters)
                    [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]

Check object existence or emit object contents
    -e                    check if <object> exists
    -p                    pretty-print <object> content

Emit [broken] object attributes
    -t                    show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
    -s                    show object size
    --allow-unknown-type  allow -s and -t to work with broken/corrupt objects
    --use-mailmap         use mail map file
    --mailmap ...         alias of --use-mailmap

Batch objects requested on stdin (or --batch-all-objects)
    --batch[=<format>]    show full <object> or <rev> contents
    --batch-check[=<format>]
                          like --batch, but don't emit <contents>
    -z                    stdin is NUL-terminated
    --batch-command[=<format>]
                          read commands from stdin
    --batch-all-objects   with --batch[-check]: ignores stdin, batches all known objects

Change or optimize batch output
    --buffer              buffer --batch output
    --follow-symlinks     follow in-tree symlinks
    --unordered           do not order objects before emitting them

Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
    --textconv            run textconv on object's content
    --filters             run filters on object's content
    --path blob|tree      use a <path> for (--textconv | --filters); Not with 'batch'

ok 160 - Passing -p with --follow-symlinks fails

expecting success of 1006.161 '--batch-check for a non-existent named object': 
    test "foobar42 missing
foobar84 missing" = \
    "$( ( echo foobar42 && echo_without_newline foobar84 ) | git cat-file --batch-check)"

ok 161 - --batch-check for a non-existent named object

expecting success of 1006.162 '--batch-check for a non-existent hash': 
    test "0000000000000000000000000000000000000042 missing
0000000000000000000000000000000000000084 missing" = \
    "$( ( echo 0000000000000000000000000000000000000042 &&
	 echo_without_newline 0000000000000000000000000000000000000084 ) |
       git cat-file --batch-check)"

ok 162 - --batch-check for a non-existent hash

expecting success of 1006.163 '--batch for an existent and a non-existent hash': 
    test "$tag_sha1 tag $tag_size
$tag_content
0000000000000000000000000000000000000000 missing" = \
    "$( ( echo $tag_sha1 &&
	 echo_without_newline 0000000000000000000000000000000000000000 ) |
       git cat-file --batch)"

ok 163 - --batch for an existent and a non-existent hash

expecting success of 1006.164 '--batch-check for an empty line': 
    test " missing" = "$(echo | git cat-file --batch-check)"

ok 164 - --batch-check for an empty line

expecting success of 1006.165 'empty --batch-check notices missing object': 
	echo "$ZERO_OID missing" >expect &&
	echo "$ZERO_OID" | git cat-file --batch-check="" >actual &&
	test_cmp expect actual

ok 165 - empty --batch-check notices missing object

expecting success of 1006.166 '--batch with multiple sha1s gives correct format': 
	test "$(maybe_remove_timestamp "$batch_output" 1)" = "$(maybe_remove_timestamp "$(echo_without_newline "$batch_input" | git cat-file --batch)" 1)"

ok 166 - --batch with multiple sha1s gives correct format

expecting success of 1006.167 '--batch, -z with multiple sha1s gives correct format': 
	echo_without_newline_nul "$batch_input" >in &&
	test "$(maybe_remove_timestamp "$batch_output" 1)" = \
	"$(maybe_remove_timestamp "$(git cat-file --batch -z <in)" 1)"

ok 167 - --batch, -z with multiple sha1s gives correct format

expecting success of 1006.168 '--batch-check with multiple sha1s gives correct format': 
    test "$batch_check_output" = \
    "$(echo_without_newline "$batch_check_input" | git cat-file --batch-check)"

ok 168 - --batch-check with multiple sha1s gives correct format

expecting success of 1006.169 '--batch-check, -z with multiple sha1s gives correct format': 
    echo_without_newline_nul "$batch_check_input" >in &&
    test "$batch_check_output" = "$(git cat-file --batch-check -z <in)"

ok 169 - --batch-check, -z with multiple sha1s gives correct format

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 1006.170 '--batch-check, -z with newline in input': 
	touch -- "newline${LF}embedded" &&
	git add -- "newline${LF}embedded" &&
	git commit -m "file with newline embedded" &&
	test_tick &&

	printf "HEAD:newline${LF}embedded" >in &&
	git cat-file --batch-check -z <in >actual &&

	echo "$(git rev-parse "HEAD:newline${LF}embedded") blob 0" >expect &&
	test_cmp expect actual

[master (root-commit) a7561ce] file with newline embedded
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 hello
 create mode 100644 "newline\nembedded"
ok 170 - --batch-check, -z with newline in input

expecting success of 1006.171 '--batch-command with multiple info calls gives correct format': 
	cat >expect <<-EOF &&
	$hello_sha1 blob $hello_size
	$tree_sha1 tree $tree_size
	$commit_sha1 commit $commit_size
	$tag_sha1 tag $tag_size
	deadbeef missing
	EOF

	echo "$batch_command_multiple_info" >in &&
	git cat-file --batch-command --buffer <in >actual &&

	test_cmp expect actual &&

	echo "$batch_command_multiple_info" | tr "\n" "\0" >in &&
	git cat-file --batch-command --buffer -z <in >actual &&

	test_cmp expect actual

ok 171 - --batch-command with multiple info calls gives correct format

expecting success of 1006.172 '--batch-command with multiple command calls gives correct format': 
	remove_timestamp >expect <<-EOF &&
	$hello_sha1 blob $hello_size
	$hello_content
	$commit_sha1 commit $commit_size
	$commit_content
	$tag_sha1 tag $tag_size
	$tag_content
	deadbeef missing
	EOF

	echo "$batch_command_multiple_contents" >in &&
	git cat-file --batch-command --buffer <in >actual_raw &&

	remove_timestamp <actual_raw >actual &&
	test_cmp expect actual &&

	echo "$batch_command_multiple_contents" | tr "\n" "\0" >in &&
	git cat-file --batch-command --buffer -z <in >actual_raw &&

	remove_timestamp <actual_raw >actual &&
	test_cmp expect actual

ok 172 - --batch-command with multiple command calls gives correct format

expecting success of 1006.173 'setup blobs which are likely to delta': 
	test-tool genrandom foo 10240 >foo &&
	{ cat foo && echo plus; } >foo-plus &&
	git add foo foo-plus &&
	git commit -m foo &&
	cat >blobs <<-\EOF
	HEAD:foo
	HEAD:foo-plus
	EOF

[master 149611e] foo
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
 create mode 100644 foo-plus
ok 173 - setup blobs which are likely to delta

expecting success of 1006.174 'confirm that neither loose blob is a delta': 
	cat >expect <<-EOF &&
	$ZERO_OID
	$ZERO_OID
	EOF
	git cat-file --batch-check="%(deltabase)" <blobs >actual &&
	test_cmp expect actual

ok 174 - confirm that neither loose blob is a delta

expecting success of 1006.175 '%(deltabase) reports packed delta bases': 
	git repack -ad &&
	git cat-file --batch-check="%(deltabase)" <blobs >actual &&
	{
		grep "$(git rev-parse HEAD:foo)" actual ||
		grep "$(git rev-parse HEAD:foo-plus)" actual
	}

9b546ef00c80e00a1733cb882d607028fcd562fc
ok 175 - %(deltabase) reports packed delta bases

expecting success of 1006.176 'setup bogus data': 
	bogus_short_type="bogus" &&
	bogus_short_content="bogus" &&
	bogus_short_size=$(strlen "$bogus_short_content") &&
	bogus_short_sha1=$(echo_without_newline "$bogus_short_content" | git hash-object -t $bogus_short_type --literally -w --stdin) &&

	bogus_long_type="abcdefghijklmnopqrstuvwxyz1234679" &&
	bogus_long_content="bogus" &&
	bogus_long_size=$(strlen "$bogus_long_content") &&
	bogus_long_sha1=$(echo_without_newline "$bogus_long_content" | git hash-object -t $bogus_long_type --literally -w --stdin)

ok 176 - setup bogus data

expecting success of 1006.177 'cat-file  -s error on bogus short OID': 
			cat >expect <<-\EOF &&
			fatal: invalid object type
			EOF

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_short_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 177 - cat-file  -s error on bogus short OID

expecting success of 1006.178 'cat-file  -s error on bogus full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: Not a valid object name $bogus_long_sha1
				EOF
			else
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: git cat-file: could not get object info
				EOF
			fi &&

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_long_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 178 - cat-file  -s error on bogus full OID

expecting success of 1006.179 'cat-file  -s error on missing short OID': 
			cat >expect.err <<-EOF &&
			fatal: Not a valid object name $(test_oid deadbeef_short)
			EOF
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef_short) >out 2>err.actual &&
			test_must_be_empty out
		
ok 179 - cat-file  -s error on missing short OID

expecting success of 1006.180 'cat-file  -s error on missing full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect.err <<-EOF
				fatal: Not a valid object name $(test_oid deadbeef)
				EOF
			else
				cat >expect.err <<-\EOF
				fatal: git cat-file: could not get object info
				EOF
			fi &&
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef) >out 2>err.actual &&
			test_must_be_empty out &&
			test_cmp expect.err err.actual
		
ok 180 - cat-file  -s error on missing full OID

expecting success of 1006.181 'cat-file  -t error on bogus short OID': 
			cat >expect <<-\EOF &&
			fatal: invalid object type
			EOF

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_short_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 181 - cat-file  -t error on bogus short OID

expecting success of 1006.182 'cat-file  -t error on bogus full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: Not a valid object name $bogus_long_sha1
				EOF
			else
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: git cat-file: could not get object info
				EOF
			fi &&

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_long_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 182 - cat-file  -t error on bogus full OID

expecting success of 1006.183 'cat-file  -t error on missing short OID': 
			cat >expect.err <<-EOF &&
			fatal: Not a valid object name $(test_oid deadbeef_short)
			EOF
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef_short) >out 2>err.actual &&
			test_must_be_empty out
		
ok 183 - cat-file  -t error on missing short OID

expecting success of 1006.184 'cat-file  -t error on missing full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect.err <<-EOF
				fatal: Not a valid object name $(test_oid deadbeef)
				EOF
			else
				cat >expect.err <<-\EOF
				fatal: git cat-file: could not get object info
				EOF
			fi &&
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef) >out 2>err.actual &&
			test_must_be_empty out &&
			test_cmp expect.err err.actual
		
ok 184 - cat-file  -t error on missing full OID

expecting success of 1006.185 'cat-file  -p error on bogus short OID': 
			cat >expect <<-\EOF &&
			fatal: invalid object type
			EOF

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_short_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 185 - cat-file  -p error on bogus short OID

expecting success of 1006.186 'cat-file  -p error on bogus full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: Not a valid object name $bogus_long_sha1
				EOF
			else
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: git cat-file: could not get object info
				EOF
			fi &&

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_long_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
ok 186 - cat-file  -p error on bogus full OID

expecting success of 1006.187 'cat-file  -p error on missing short OID': 
			cat >expect.err <<-EOF &&
			fatal: Not a valid object name $(test_oid deadbeef_short)
			EOF
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef_short) >out 2>err.actual &&
			test_must_be_empty out
		
ok 187 - cat-file  -p error on missing short OID

expecting success of 1006.188 'cat-file  -p error on missing full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect.err <<-EOF
				fatal: Not a valid object name $(test_oid deadbeef)
				EOF
			else
				cat >expect.err <<-\EOF
				fatal: git cat-file: could not get object info
				EOF
			fi &&
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef) >out 2>err.actual &&
			test_must_be_empty out &&
			test_cmp expect.err err.actual
		
ok 188 - cat-file  -p error on missing full OID

expecting success of 1006.189 'cat-file --allow-unknown-type -s error on bogus short OID': 
			cat >expect <<-\EOF &&
			fatal: invalid object type
			EOF

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_short_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
5
ok 189 - cat-file --allow-unknown-type -s error on bogus short OID

expecting success of 1006.190 'cat-file --allow-unknown-type -s error on bogus full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: Not a valid object name $bogus_long_sha1
				EOF
			else
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: git cat-file: could not get object info
				EOF
			fi &&

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_long_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
5
ok 190 - cat-file --allow-unknown-type -s error on bogus full OID

expecting success of 1006.191 'cat-file --allow-unknown-type -s error on missing short OID': 
			cat >expect.err <<-EOF &&
			fatal: Not a valid object name $(test_oid deadbeef_short)
			EOF
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef_short) >out 2>err.actual &&
			test_must_be_empty out
		
ok 191 - cat-file --allow-unknown-type -s error on missing short OID

expecting success of 1006.192 'cat-file --allow-unknown-type -s error on missing full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect.err <<-EOF
				fatal: Not a valid object name $(test_oid deadbeef)
				EOF
			else
				cat >expect.err <<-\EOF
				fatal: git cat-file: could not get object info
				EOF
			fi &&
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef) >out 2>err.actual &&
			test_must_be_empty out &&
			test_cmp expect.err err.actual
		
ok 192 - cat-file --allow-unknown-type -s error on missing full OID

expecting success of 1006.193 'cat-file --allow-unknown-type -t error on bogus short OID': 
			cat >expect <<-\EOF &&
			fatal: invalid object type
			EOF

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_short_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
bogus
ok 193 - cat-file --allow-unknown-type -t error on bogus short OID

expecting success of 1006.194 'cat-file --allow-unknown-type -t error on bogus full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: Not a valid object name $bogus_long_sha1
				EOF
			else
				cat >expect <<-EOF
				error: header for $bogus_long_sha1 too long, exceeds 32 bytes
				fatal: git cat-file: could not get object info
				EOF
			fi &&

			if test "$arg1" = "--allow-unknown-type"
			then
				git cat-file $arg1 $arg2 $bogus_short_sha1
			else
				test_must_fail git cat-file $arg1 $arg2 $bogus_long_sha1 >out 2>actual &&
				test_must_be_empty out &&
				test_cmp expect actual
			fi
		
bogus
ok 194 - cat-file --allow-unknown-type -t error on bogus full OID

expecting success of 1006.195 'cat-file --allow-unknown-type -t error on missing short OID': 
			cat >expect.err <<-EOF &&
			fatal: Not a valid object name $(test_oid deadbeef_short)
			EOF
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef_short) >out 2>err.actual &&
			test_must_be_empty out
		
ok 195 - cat-file --allow-unknown-type -t error on missing short OID

expecting success of 1006.196 'cat-file --allow-unknown-type -t error on missing full OID': 
			if test "$arg2" = "-p"
			then
				cat >expect.err <<-EOF
				fatal: Not a valid object name $(test_oid deadbeef)
				EOF
			else
				cat >expect.err <<-\EOF
				fatal: git cat-file: could not get object info
				EOF
			fi &&
			test_must_fail git cat-file $arg1 $arg2 $(test_oid deadbeef) >out 2>err.actual &&
			test_must_be_empty out &&
			test_cmp expect.err err.actual
		
ok 196 - cat-file --allow-unknown-type -t error on missing full OID

expecting success of 1006.197 '-e is OK with a broken object without --allow-unknown-type': 
	git cat-file -e $bogus_short_sha1

ok 197 - -e is OK with a broken object without --allow-unknown-type

expecting success of 1006.198 '-e can not be combined with --allow-unknown-type': 
	test_expect_code 128 git cat-file -e --allow-unknown-type $bogus_short_sha1

fatal: git cat-file --allow-unknown-type: use with -s or -t
ok 198 - -e can not be combined with --allow-unknown-type

expecting success of 1006.199 '-p cannot print a broken object even with --allow-unknown-type': 
	test_must_fail git cat-file -p $bogus_short_sha1 &&
	test_expect_code 128 git cat-file -p --allow-unknown-type $bogus_short_sha1

fatal: invalid object type
fatal: git cat-file --allow-unknown-type: use with -s or -t
ok 199 - -p cannot print a broken object even with --allow-unknown-type

expecting success of 1006.200 '<type> <hash> does not work with objects of broken types': 
	cat >err.expect <<-\EOF &&
	fatal: invalid object type "bogus"
	EOF
	test_must_fail git cat-file $bogus_short_type $bogus_short_sha1 2>err.actual &&
	test_cmp err.expect err.actual

ok 200 - <type> <hash> does not work with objects of broken types

expecting success of 1006.201 'broken types combined with --batch and --batch-check': 
	echo $bogus_short_sha1 >bogus-oid &&

	cat >err.expect <<-\EOF &&
	fatal: invalid object type
	EOF

	test_must_fail git cat-file --batch <bogus-oid 2>err.actual &&
	test_cmp err.expect err.actual &&

	test_must_fail git cat-file --batch-check <bogus-oid 2>err.actual &&
	test_cmp err.expect err.actual

ok 201 - broken types combined with --batch and --batch-check

expecting success of 1006.202 'the --batch and --batch-check options do not combine with --allow-unknown-type': 
	test_expect_code 128 git cat-file --batch --allow-unknown-type <bogus-oid &&
	test_expect_code 128 git cat-file --batch-check --allow-unknown-type <bogus-oid

fatal: invalid object type
fatal: invalid object type
ok 202 - the --batch and --batch-check options do not combine with --allow-unknown-type

expecting success of 1006.203 'the --allow-unknown-type option does not consider replacement refs': 
	cat >expect <<-EOF &&
	$bogus_short_type
	EOF
	git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&
	test_cmp expect actual &&

	# Create it manually, as "git replace" will die on bogus
	# types.
	head=$(git rev-parse --verify HEAD) &&
	test_when_finished "test-tool ref-store main delete-refs 0 msg refs/replace/$bogus_short_sha1" &&
	test-tool ref-store main update-ref msg "refs/replace/$bogus_short_sha1" $head $ZERO_OID REF_SKIP_OID_VERIFICATION &&

	cat >expect <<-EOF &&
	commit
	EOF
	git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&
	test_cmp expect actual

ok 203 - the --allow-unknown-type option does not consider replacement refs

expecting success of 1006.204 'Type of broken object is correct': 
	echo $bogus_short_type >expect &&
	git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&
	test_cmp expect actual

ok 204 - Type of broken object is correct

expecting success of 1006.205 'Size of broken object is correct': 
	echo $bogus_short_size >expect &&
	git cat-file -s --allow-unknown-type $bogus_short_sha1 >actual &&
	test_cmp expect actual

ok 205 - Size of broken object is correct

expecting success of 1006.206 'clean up broken object': 
	rm .git/objects/$(test_oid_to_path $bogus_short_sha1)

ok 206 - clean up broken object

expecting success of 1006.207 'Type of broken object is correct when type is large': 
	echo $bogus_long_type >expect &&
	git cat-file -t --allow-unknown-type $bogus_long_sha1 >actual &&
	test_cmp expect actual

ok 207 - Type of broken object is correct when type is large

expecting success of 1006.208 'Size of large broken object is correct when type is large': 
	echo $bogus_long_size >expect &&
	git cat-file -s --allow-unknown-type $bogus_long_sha1 >actual &&
	test_cmp expect actual

ok 208 - Size of large broken object is correct when type is large

expecting success of 1006.209 'clean up broken object': 
	rm .git/objects/$(test_oid_to_path $bogus_long_sha1)

ok 209 - clean up broken object

expecting success of 1006.210 'cat-file -t and -s on corrupt loose object': 
	git init --bare corrupt-loose.git &&
	(
		cd corrupt-loose.git &&

		# Setup and create the empty blob and its path
		empty_path=$(git rev-parse --git-path objects/$(test_oid_to_path "$EMPTY_BLOB")) &&
		empty_blob=$(git hash-object -w --stdin </dev/null) &&

		# Create another blob and its path
		echo other >other.blob &&
		other_blob=$(git hash-object -w --stdin <other.blob) &&
		other_path=$(git rev-parse --git-path objects/$(test_oid_to_path "$other_blob")) &&

		# Before the swap the size is 0
		cat >out.expect <<-EOF &&
		0
		EOF
		git cat-file -s "$EMPTY_BLOB" >out.actual 2>err.actual &&
		test_must_be_empty err.actual &&
		test_cmp out.expect out.actual &&

		# Swap the two to corrupt the repository
		mv -f "$other_path" "$empty_path" &&
		test_must_fail git fsck 2>err.fsck &&
		grep "hash-path mismatch" err.fsck &&

		# confirm that cat-file is reading the new swapped-in
		# blob...
		cat >out.expect <<-EOF &&
		blob
		EOF
		git cat-file -t "$EMPTY_BLOB" >out.actual 2>err.actual &&
		test_must_be_empty err.actual &&
		test_cmp out.expect out.actual &&

		# ... since it has a different size now.
		cat >out.expect <<-EOF &&
		6
		EOF
		git cat-file -s "$EMPTY_BLOB" >out.actual 2>err.actual &&
		test_must_be_empty err.actual &&
		test_cmp out.expect out.actual &&

		# So far "cat-file" has been happy to spew the found
		# content out as-is. Try to make it zlib-invalid.
		mv -f other.blob "$empty_path" &&
		test_must_fail git fsck 2>err.fsck &&
		cat >expect <<-EOF &&
		error: inflate: data stream error (incorrect header check)
		error: unable to unpack header of ./$empty_path
		error: $empty_blob: object corrupt or missing: ./$empty_path
		EOF
		grep "^error: " err.fsck >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1006-cat-file/corrupt-loose.git/
error: e45c9c2666d44e0327c1f9c239a74c508336053e: hash-path mismatch, found at: ./objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 210 - cat-file -t and -s on corrupt loose object

expecting success of 1006.211 'prep for symlink tests': 
	echo_without_newline "$hello_content" >morx &&
	test_ln_s_add morx same-dir-link &&
	test_ln_s_add dir link-to-dir &&
	test_ln_s_add ../fleem out-of-repo-link &&
	test_ln_s_add .. out-of-repo-link-dir &&
	test_ln_s_add same-dir-link link-to-link &&
	test_ln_s_add nope broken-same-dir-link &&
	mkdir dir &&
	test_ln_s_add ../morx dir/parent-dir-link &&
	test_ln_s_add .. dir/link-dir &&
	test_ln_s_add ../../escape dir/out-of-repo-link &&
	test_ln_s_add ../.. dir/out-of-repo-link-dir &&
	test_ln_s_add nope dir/broken-link-in-dir &&
	mkdir dir/subdir &&
	test_ln_s_add ../../morx dir/subdir/grandparent-dir-link &&
	test_ln_s_add ../../../great-escape dir/subdir/out-of-repo-link &&
	test_ln_s_add ../../.. dir/subdir/out-of-repo-link-dir &&
	test_ln_s_add ../../../ dir/subdir/out-of-repo-link-dir-trailing &&
	test_ln_s_add ../parent-dir-link dir/subdir/parent-dir-link-to-link &&
	echo_without_newline "$hello_content" >dir/subdir/ind2 &&
	echo_without_newline "$hello_content" >dir/ind1 &&
	test_ln_s_add dir dirlink &&
	test_ln_s_add dir/subdir subdirlink &&
	test_ln_s_add subdir/ind2 dir/link-to-child &&
	test_ln_s_add dir/link-to-child link-to-down-link &&
	test_ln_s_add dir/.. up-down &&
	test_ln_s_add dir/../ up-down-trailing &&
	test_ln_s_add dir/../morx up-down-file &&
	test_ln_s_add dir/../../morx up-up-down-file &&
	test_ln_s_add subdirlink/../../morx up-two-down-file &&
	test_ln_s_add loop1 loop2 &&
	test_ln_s_add loop2 loop1 &&
	git add morx dir/subdir/ind2 dir/ind1 &&
	git commit -am "test" &&
	echo $hello_sha1 blob $hello_size >found

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master 86a080e] test
 Author: A U Thor <author@example.com>
 30 files changed, 30 insertions(+)
 create mode 120000 broken-same-dir-link
 create mode 120000 dir/broken-link-in-dir
 create mode 100644 dir/ind1
 create mode 120000 dir/link-dir
 create mode 120000 dir/link-to-child
 create mode 120000 dir/out-of-repo-link
 create mode 120000 dir/out-of-repo-link-dir
 create mode 120000 dir/parent-dir-link
 create mode 120000 dir/subdir/grandparent-dir-link
 create mode 100644 dir/subdir/ind2
 create mode 120000 dir/subdir/out-of-repo-link
 create mode 120000 dir/subdir/out-of-repo-link-dir
 create mode 120000 dir/subdir/out-of-repo-link-dir-trailing
 create mode 120000 dir/subdir/parent-dir-link-to-link
 create mode 120000 dirlink
 create mode 120000 link-to-dir
 create mode 120000 link-to-down-link
 create mode 120000 link-to-link
 create mode 120000 loop1
 create mode 120000 loop2
 create mode 100644 morx
 create mode 120000 out-of-repo-link
 create mode 120000 out-of-repo-link-dir
 create mode 120000 same-dir-link
 create mode 120000 subdirlink
 create mode 120000 up-down
 create mode 120000 up-down-file
 create mode 120000 up-down-trailing
 create mode 120000 up-two-down-file
 create mode 120000 up-up-down-file
ok 211 - prep for symlink tests

expecting success of 1006.212 'git cat-file --batch-check --follow-symlinks works for non-links': 
	echo HEAD:morx | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo HEAD:nope missing >expect &&
	echo HEAD:nope | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 212 - git cat-file --batch-check --follow-symlinks works for non-links

expecting success of 1006.213 'git cat-file --batch-check --follow-symlinks works for in-repo, same-dir links': 
	echo HEAD:same-dir-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 213 - git cat-file --batch-check --follow-symlinks works for in-repo, same-dir links

expecting success of 1006.214 'git cat-file --batch-check --follow-symlinks works for in-repo, links to dirs': 
	echo HEAD:link-to-dir/ind1 | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 214 - git cat-file --batch-check --follow-symlinks works for in-repo, links to dirs

expecting success of 1006.215 'git cat-file --batch-check --follow-symlinks works for broken in-repo, same-dir links': 
	echo dangling 25 >expect &&
	echo HEAD:broken-same-dir-link >>expect &&
	echo HEAD:broken-same-dir-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 215 - git cat-file --batch-check --follow-symlinks works for broken in-repo, same-dir links

expecting success of 1006.216 'git cat-file --batch-check --follow-symlinks works for same-dir links-to-links': 
	echo HEAD:link-to-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 216 - git cat-file --batch-check --follow-symlinks works for same-dir links-to-links

expecting success of 1006.217 'git cat-file --batch-check --follow-symlinks works for parent-dir links': 
	echo HEAD:dir/parent-dir-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo notdir 29 >expect &&
	echo HEAD:dir/parent-dir-link/nope >>expect &&
	echo HEAD:dir/parent-dir-link/nope | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 217 - git cat-file --batch-check --follow-symlinks works for parent-dir links

expecting success of 1006.218 'git cat-file --batch-check --follow-symlinks works for .. links': 
	echo dangling 22 >expect &&
	echo HEAD:dir/link-dir/nope >>expect &&
	echo HEAD:dir/link-dir/nope | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:dir/link-dir/morx | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo dangling 27 >expect &&
	echo HEAD:dir/broken-link-in-dir >>expect &&
	echo HEAD:dir/broken-link-in-dir | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 218 - git cat-file --batch-check --follow-symlinks works for .. links

expecting success of 1006.219 'git cat-file --batch-check --follow-symlinks works for ../.. links': 
	echo notdir 41 >expect &&
	echo HEAD:dir/subdir/grandparent-dir-link/nope >>expect &&
	echo HEAD:dir/subdir/grandparent-dir-link/nope | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:dir/subdir/grandparent-dir-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo HEAD:dir/subdir/parent-dir-link-to-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 219 - git cat-file --batch-check --follow-symlinks works for ../.. links

expecting success of 1006.220 'git cat-file --batch-check --follow-symlinks works for dir/ links': 
	echo dangling 17 >expect &&
	echo HEAD:dirlink/morx >>expect &&
	echo HEAD:dirlink/morx | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo $hello_sha1 blob $hello_size >expect &&
	echo HEAD:dirlink/ind1 | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 220 - git cat-file --batch-check --follow-symlinks works for dir/ links

expecting success of 1006.221 'git cat-file --batch-check --follow-symlinks works for dir/subdir links': 
	echo dangling 20 >expect &&
	echo HEAD:subdirlink/morx >>expect &&
	echo HEAD:subdirlink/morx | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:subdirlink/ind2 | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 221 - git cat-file --batch-check --follow-symlinks works for dir/subdir links

expecting success of 1006.222 'git cat-file --batch-check --follow-symlinks works for dir ->subdir links': 
	echo notdir 27 >expect &&
	echo HEAD:dir/link-to-child/morx >>expect &&
	echo HEAD:dir/link-to-child/morx | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:dir/link-to-child | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo HEAD:link-to-down-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 222 - git cat-file --batch-check --follow-symlinks works for dir ->subdir links

expecting success of 1006.223 'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks': 
	echo symlink 8 >expect &&
	echo ../fleem >>expect &&
	echo HEAD:out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo symlink 2 >expect &&
	echo .. >>expect &&
	echo HEAD:out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 223 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks

expecting success of 1006.224 'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in dirs': 
	echo symlink 9 >expect &&
	echo ../escape >>expect &&
	echo HEAD:dir/out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo symlink 2 >expect &&
	echo .. >>expect &&
	echo HEAD:dir/out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 224 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in dirs

expecting success of 1006.225 'git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in subdirs': 
	echo symlink 15 >expect &&
	echo ../great-escape >>expect &&
	echo HEAD:dir/subdir/out-of-repo-link | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo symlink 2 >expect &&
	echo .. >>expect &&
	echo HEAD:dir/subdir/out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo symlink 3 >expect &&
	echo ../ >>expect &&
	echo HEAD:dir/subdir/out-of-repo-link-dir-trailing | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 225 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in subdirs

expecting success of 1006.226 'git cat-file --batch-check --follow-symlinks works for symlinks with internal ..': 
	echo HEAD: | git cat-file --batch-check >expect &&
	echo HEAD:up-down | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:up-down-trailing | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:up-down-file | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual &&
	echo symlink 7 >expect &&
	echo ../morx >>expect &&
	echo HEAD:up-up-down-file | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual &&
	echo HEAD:up-two-down-file | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp found actual

ok 226 - git cat-file --batch-check --follow-symlinks works for symlinks with internal ..

expecting success of 1006.227 'git cat-file --batch-check --follow-symlink breaks loops': 
	echo loop 10 >expect &&
	echo HEAD:loop1 >>expect &&
	echo HEAD:loop1 | git cat-file --batch-check --follow-symlinks >actual &&
	test_cmp expect actual

ok 227 - git cat-file --batch-check --follow-symlink breaks loops

expecting success of 1006.228 'git cat-file --batch --follow-symlink returns correct sha and mode': 
	echo HEAD:morx | git cat-file --batch >expect &&
	echo HEAD:morx | git cat-file --batch --follow-symlinks >actual &&
	test_cmp expect actual

ok 228 - git cat-file --batch --follow-symlink returns correct sha and mode

expecting success of 1006.229 'cat-file --batch-all-objects shows all objects': 
	# make new repos so we know the full set of objects; we will
	# also make sure that there are some packed and some loose
	# objects, some referenced and some not, some duplicates, and that
	# there are some available only via alternates.
	git init all-one &&
	(
		cd all-one &&
		echo content >file &&
		git add file &&
		git commit -qm base &&
		git rev-parse HEAD HEAD^{tree} HEAD:file &&
		git repack -ad &&
		echo not-cloned | git hash-object -w --stdin
	) >expect.unsorted &&
	git clone -s all-one all-two &&
	(
		cd all-two &&
		echo local-unref | git hash-object -w --stdin
	) >>expect.unsorted &&
	git -C all-two rev-parse HEAD:file |
		git -C all-two pack-objects .git/objects/pack/pack &&
	sort <expect.unsorted >expect &&
	git -C all-two cat-file --batch-all-objects \
				--batch-check="%(objectname)" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1006-cat-file/all-one/.git/
Cloning into 'all-two'...
done.
2d40090ddd2c612f2679520aaab9f69d52e41628
ok 229 - cat-file --batch-all-objects shows all objects

expecting success of 1006.230 'cat-file --unordered works': 
	git -C all-two cat-file --batch-all-objects --unordered \
				--batch-check="%(objectname)" >actual.unsorted &&
	sort <actual.unsorted >actual &&
	test_cmp expect actual

ok 230 - cat-file --unordered works

expecting success of 1006.231 'set up object list for --batch-all-objects tests': 
	git -C all-two cat-file --batch-all-objects --batch-check="%(objectname)" >objects

ok 231 - set up object list for --batch-all-objects tests

expecting success of 1006.232 'cat-file --batch="%(objectname)" with --batch-all-objects will work': 
	git -C all-two cat-file --batch="%(objectname)" <objects >expect &&
	git -C all-two cat-file --batch-all-objects --batch="%(objectname)" >actual &&
	cmp expect actual

ok 232 - cat-file --batch="%(objectname)" with --batch-all-objects will work

expecting success of 1006.233 'cat-file --batch="%(rest)" with --batch-all-objects will work': 
	git -C all-two cat-file --batch="%(rest)" <objects >expect &&
	git -C all-two cat-file --batch-all-objects --batch="%(rest)" >actual &&
	cmp expect actual

ok 233 - cat-file --batch="%(rest)" with --batch-all-objects will work

expecting success of 1006.234 'cat-file --batch="batman" with --batch-all-objects will work': 
	git -C all-two cat-file --batch="batman" <objects >expect &&
	git -C all-two cat-file --batch-all-objects --batch="batman" >actual &&
	cmp expect actual

ok 234 - cat-file --batch="batman" with --batch-all-objects will work

expecting success of 1006.235 'set up replacement object': 
	orig=$(git rev-parse HEAD) &&
	git cat-file commit $orig >orig &&
	{
		cat orig &&
		echo extra
	} >fake &&
	fake=$(git hash-object -t commit -w fake) &&
	orig_size=$(git cat-file -s $orig) &&
	fake_size=$(git cat-file -s $fake) &&
	git replace $orig $fake

ok 235 - set up replacement object

expecting success of 1006.236 'cat-file --batch respects replace objects': 
	git cat-file --batch >actual <<-EOF &&
	$orig
	EOF
	{
		echo "$orig commit $fake_size" &&
		cat fake &&
		echo
	} >expect &&
	test_cmp expect actual

ok 236 - cat-file --batch respects replace objects

expecting success of 1006.237 'cat-file --batch-check respects replace objects': 
	git cat-file --batch-check >actual <<-EOF &&
	$orig
	EOF
	echo "$orig commit $fake_size" >expect &&
	test_cmp expect actual

ok 237 - cat-file --batch-check respects replace objects

expecting success of 1006.238 'cat-file --batch-all-objects --batch ignores replace': 
	git cat-file --batch-all-objects --batch >actual.raw &&
	extract_batch_output $orig <actual.raw >actual &&
	{
		echo "$orig commit $orig_size" &&
		cat orig &&
		echo
	} >expect &&
	test_cmp expect actual

ok 238 - cat-file --batch-all-objects --batch ignores replace

expecting success of 1006.239 'cat-file --batch-all-objects --batch-check ignores replace': 
	git cat-file --batch-all-objects --batch-check >actual.raw &&
	grep ^$orig actual.raw >actual &&
	echo "$orig commit $orig_size" >expect &&
	test_cmp expect actual

ok 239 - cat-file --batch-all-objects --batch-check ignores replace

expecting success of 1006.240 'batch-command empty command': 
	echo "" >cmd &&
	test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
	grep "^fatal:.*empty command in input.*" err

fatal: empty command in input
ok 240 - batch-command empty command

expecting success of 1006.241 'batch-command whitespace before command': 
	echo " info deadbeef" >cmd &&
	test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
	grep "^fatal:.*whitespace before command.*" err

fatal: whitespace before command: ' info deadbeef'
ok 241 - batch-command whitespace before command

expecting success of 1006.242 'batch-command unknown command': 
	echo unknown_command >cmd &&
	test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
	grep "^fatal:.*unknown command.*" err

fatal: unknown command: 'unknown_command'
ok 242 - batch-command unknown command

expecting success of 1006.243 'batch-command missing arguments': 
	echo "info" >cmd &&
	test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
	grep "^fatal:.*info requires arguments.*" err

fatal: info requires arguments
ok 243 - batch-command missing arguments

expecting success of 1006.244 'batch-command flush with arguments': 
	echo "flush arg" >cmd &&
	test_expect_code 128 git cat-file --batch-command --buffer <cmd 2>err &&
	grep "^fatal:.*flush takes no arguments.*" err

fatal: flush takes no arguments
ok 244 - batch-command flush with arguments

expecting success of 1006.245 'batch-command flush without --buffer': 
	echo "flush" >cmd &&
	test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
	grep "^fatal:.*flush is only for --buffer mode.*" err

fatal: flush is only for --buffer mode
ok 245 - batch-command flush without --buffer

# passed all 245 test(s)
1..245
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1015-read-index-unmerged.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1015-read-index-unmerged/.git/
expecting success of 1015.1 'setup modify/delete + directory/file conflict': 
	test_create_repo df_plus_modify_delete &&
	(
		cd df_plus_modify_delete &&

		test_write_lines a b c d e f g h >letters &&
		git add letters &&
		git commit -m initial &&

		git checkout -b modify &&
		# Throw in letters.txt for sorting order fun
		# ("letters.txt" sorts between "letters" and "letters/file")
		echo i >>letters &&
		echo "version 2" >letters.txt &&
		git add letters letters.txt &&
		git commit -m modified &&

		git checkout -b delete HEAD^ &&
		git rm letters &&
		mkdir letters &&
		>letters/file &&
		echo "version 1" >letters.txt &&
		git add letters letters.txt &&
		git commit -m deleted
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1015-read-index-unmerged/df_plus_modify_delete/.git/
[master (root-commit) 461649b] initial
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 letters
Switched to a new branch 'modify'
[modify 4e26d91] modified
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 letters.txt
Switched to a new branch 'delete'
rm 'letters'
[delete 380ce95] deleted
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 8 deletions(-)
 delete mode 100644 letters
 create mode 100644 letters.txt
 create mode 100644 letters/file
ok 1 - setup modify/delete + directory/file conflict

expecting success of 1015.2 'read-tree --reset cleans unmerged entries': 
	test_when_finished "git -C df_plus_modify_delete clean -f" &&
	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
	(
		cd df_plus_modify_delete &&

		git checkout delete^0 &&
		test_must_fail git merge modify &&

		git read-tree --reset HEAD &&
		git ls-files -u >conflicts &&
		test_must_be_empty conflicts
	)

Note: switching to 'delete^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 380ce95 deleted
Auto-merging letters.txt
CONFLICT (add/add): Merge conflict in letters.txt
CONFLICT (file/directory): directory in the way of letters from modify; moving it to letters~modify instead.
CONFLICT (modify/delete): letters~modify deleted in HEAD and modified in modify.  Version modify of letters~modify left in tree.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 380ce95 deleted
Removing conflicts
Removing letters~modify
ok 2 - read-tree --reset cleans unmerged entries

expecting success of 1015.3 'One reset --hard cleans unmerged entries': 
	test_when_finished "git -C df_plus_modify_delete clean -f" &&
	test_when_finished "git -C df_plus_modify_delete reset --hard" &&
	(
		cd df_plus_modify_delete &&

		git checkout delete^0 &&
		test_must_fail git merge modify &&

		git reset --hard &&
		test_path_is_missing .git/MERGE_HEAD &&
		git ls-files -u >conflicts &&
		test_must_be_empty conflicts
	)

HEAD is now at 380ce95 deleted
Auto-merging letters.txt
CONFLICT (add/add): Merge conflict in letters.txt
CONFLICT (file/directory): directory in the way of letters from modify; moving it to letters~modify instead.
CONFLICT (modify/delete): letters~modify deleted in HEAD and modified in modify.  Version modify of letters~modify left in tree.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 380ce95 deleted
HEAD is now at 380ce95 deleted
Removing conflicts
ok 3 - One reset --hard cleans unmerged entries

expecting success of 1015.4 'setup directory/file conflict + simple edit/edit': 
	test_create_repo df_plus_edit_edit &&
	(
		cd df_plus_edit_edit &&

		test_seq 1 10 >numbers &&
		git add numbers &&
		git commit -m initial &&

		git checkout -b d-edit &&
		mkdir foo &&
		echo content >foo/bar &&
		git add foo &&
		echo 11 >>numbers &&
		git add numbers &&
		git commit -m "directory and edit" &&

		git checkout -b f-edit d-edit^1 &&
		echo content >foo &&
		git add foo &&
		echo eleven >>numbers &&
		git add numbers &&
		git commit -m "file and edit"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1015-read-index-unmerged/df_plus_edit_edit/.git/
[master (root-commit) e5e228a] initial
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 numbers
Switched to a new branch 'd-edit'
[d-edit 1997ecb] directory and edit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 foo/bar
Switched to a new branch 'f-edit'
[f-edit ea28ef2] file and edit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 foo
ok 4 - setup directory/file conflict + simple edit/edit

expecting success of 1015.5 'git merge --abort succeeds despite D/F conflict': 
	test_when_finished "git -C df_plus_edit_edit clean -f" &&
	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
	(
		cd df_plus_edit_edit &&

		git checkout f-edit^0 &&
		test_must_fail git merge d-edit^0 &&

		git merge --abort &&
		test_path_is_missing .git/MERGE_HEAD &&
		git ls-files -u >conflicts &&
		test_must_be_empty conflicts
	)

Note: switching to 'f-edit^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ea28ef2 file and edit
CONFLICT (file/directory): directory in the way of foo from HEAD; moving it to foo~HEAD instead.
Auto-merging numbers
CONFLICT (content): Merge conflict in numbers
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at ea28ef2 file and edit
Removing conflicts
ok 5 - git merge --abort succeeds despite D/F conflict

expecting success of 1015.6 'git am --skip succeeds despite D/F conflict': 
	test_when_finished "git -C df_plus_edit_edit clean -f" &&
	test_when_finished "git -C df_plus_edit_edit reset --hard" &&
	(
		cd df_plus_edit_edit &&

		git checkout f-edit^0 &&
		git format-patch -1 d-edit &&
		test_must_fail git am -3 0001*.patch &&

		git am --skip &&
		test_path_is_missing .git/rebase-apply &&
		git ls-files -u >conflicts &&
		test_must_be_empty conflicts
	)

HEAD is now at ea28ef2 file and edit
0001-directory-and-edit.patch
Applying: directory and edit
Using index info to reconstruct a base tree...
M	numbers
Falling back to patching base and 3-way merge...
Merging:
ea28ef2 file and edit
virtual directory and edit
found 1 common ancestor:
virtual 75a3e2be4ba4a7062d21fba0206758f5518d6ead
Auto-merging numbers
CONFLICT (content): Merge conflict in numbers
Adding foo/bar
Removing foo to make room for subdirectory

CONFLICT (file/directory): There is a directory with name foo in directory and edit. Adding foo as foo~HEAD
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 directory and edit
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
HEAD is now at ea28ef2 file and edit
Removing 0001-directory-and-edit.patch
Removing conflicts
Removing foo~HEAD
ok 6 - git am --skip succeeds despite D/F conflict

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1020-subdirectory.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1020-subdirectory/.git/
expecting success of 1020.1 'setup': 
	long="a b c d e f g h i j k l m n o p q r s t u v w x y z" &&
	test_write_lines $long >one &&
	mkdir dir &&
	test_write_lines x y z $long a b c >dir/two &&
	cp one original.one &&
	cp dir/two original.two

ok 1 - setup

expecting success of 1020.2 'update-index and ls-files': 
	git update-index --add one &&
	case "$(git ls-files)" in
	one) echo pass one ;;
	*) echo bad one; return 1 ;;
	esac &&
	(
		cd dir &&
		git update-index --add two &&
		case "$(git ls-files)" in
		two) echo pass two ;;
		*) echo bad two; exit 1 ;;
		esac
	) &&
	case "$(git ls-files)" in
	dir/two"$LF"one) echo pass both ;;
	*) echo bad; return 1 ;;
	esac

pass one
pass two
pass both
ok 2 - update-index and ls-files

expecting success of 1020.3 'cat-file': 
	two=$(git ls-files -s dir/two) &&
	two=$(expr "$two" : "[0-7]* \\([0-9a-f]*\\)") &&
	echo "$two" &&
	git cat-file -p "$two" >actual &&
	cmp dir/two actual &&
	(
		cd dir &&
		git cat-file -p "$two" >actual &&
		cmp two actual
	)

c1144d0671912dd26751c1fbf1eac57a907f82c7
ok 3 - cat-file

expecting success of 1020.4 'diff-files': 
	echo a >>one &&
	echo d >>dir/two &&
	case "$(git diff-files --name-only)" in
	dir/two"$LF"one) echo pass top ;;
	*) echo bad top; return 1 ;;
	esac &&
	# diff should not omit leading paths
	(
		cd dir &&
		case "$(git diff-files --name-only)" in
		dir/two"$LF"one) echo pass subdir ;;
		*) echo bad subdir; exit 1 ;;
		esac &&
		case "$(git diff-files --name-only .)" in
		dir/two) echo pass subdir limited ;;
		*) echo bad subdir limited; exit 1 ;;
		esac
	)

pass top
pass subdir
pass subdir limited
ok 4 - diff-files

expecting success of 1020.5 'write-tree': 
	top=$(git write-tree) &&
	echo $top &&
	(
		cd dir &&
		sub=$(git write-tree) &&
		echo $sub &&
		test "z$top" = "z$sub"
	)

cf1e35b43464cccd320d58a813e14e25fa36b1d7
cf1e35b43464cccd320d58a813e14e25fa36b1d7
ok 5 - write-tree

expecting success of 1020.6 'checkout-index': 
	git checkout-index -f -u one &&
	cmp one original.one &&
	(
		cd dir &&
		git checkout-index -f -u two &&
		cmp two ../original.two
	)

ok 6 - checkout-index

expecting success of 1020.7 'read-tree': 
	rm -f one dir/two &&
	tree=$(git write-tree) &&
	read_tree_u_must_succeed --reset -u "$tree" &&
	cmp one original.one &&
	cmp dir/two original.two &&
	(
		cd dir &&
		rm -f two &&
		read_tree_u_must_succeed --reset -u "$tree" &&
		cmp two ../original.two &&
		cmp ../one ../original.one
	)

ok 7 - read-tree

expecting success of 1020.8 'alias expansion': 
	(
		git config alias.test-status-alias status &&
		cd dir &&
		git status &&
		git test-status-alias
	)

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   two
	new file:   ../one

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	post-dry-run
	post-dry-run-wt
	pre-dry-run
	pre-dry-run-wt
	../original.one
	../original.two
	../post-dry-run
	../post-dry-run-wt
	../pre-dry-run
	../pre-dry-run-wt

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   two
	new file:   ../one

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	post-dry-run
	post-dry-run-wt
	pre-dry-run
	pre-dry-run-wt
	../original.one
	../original.two
	../post-dry-run
	../post-dry-run-wt
	../pre-dry-run
	../pre-dry-run-wt

ok 8 - alias expansion

expecting success of 1020.9 '!alias expansion': 
	pwd >expect &&
	(
		git config alias.test-alias-directory !pwd &&
		cd dir &&
		git test-alias-directory >../actual
	) &&
	test_cmp expect actual

ok 9 - !alias expansion

expecting success of 1020.10 'GIT_PREFIX for !alias': 
	printf "dir/" >expect &&
	(
		git config alias.test-alias-directory "!sh -c \"printf \$GIT_PREFIX\"" &&
		cd dir &&
		git test-alias-directory >../actual
	) &&
	test_cmp expect actual

ok 10 - GIT_PREFIX for !alias

expecting success of 1020.11 'GIT_PREFIX for built-ins': 
	# Use GIT_EXTERNAL_DIFF to test that the "diff" built-in
	# receives the GIT_PREFIX variable.
	echo "dir/" >expect &&
	write_script diff <<-\EOF &&
	printf "%s\n" "$GIT_PREFIX"
	EOF
	(
		cd dir &&
		echo "change" >two &&
		GIT_EXTERNAL_DIFF=./diff git diff >../actual &&
		git checkout -- two
	) &&
	test_cmp expect actual

ok 11 - GIT_PREFIX for built-ins

expecting success of 1020.12 'no file/rev ambiguity check inside .git': 
	git commit -a -m 1 &&
	(
		cd .git &&
		git show -s HEAD
	)

[master (root-commit) 63e2ba9] 1
 Author: A U Thor <author@example.com>
 2 files changed, 58 insertions(+)
 create mode 100644 dir/two
 create mode 100644 one
commit 63e2ba96e88f4f612aaba03cc52a7db80cff1e0c
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
ok 12 - no file/rev ambiguity check inside .git

expecting success of 1020.13 'no file/rev ambiguity check inside a bare repo (explicit GIT_DIR)': 
	test_when_finished "rm -fr foo.git" &&
	git clone -s --bare .git foo.git &&
	(
		cd foo.git &&
		# older Git needed help by exporting GIT_DIR=.
		# to realize that it is inside a bare repository.
		# We keep this test around for regression testing.
		GIT_DIR=. git show -s HEAD
	)

Cloning into bare repository 'foo.git'...
done.
commit 63e2ba96e88f4f612aaba03cc52a7db80cff1e0c
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
ok 13 - no file/rev ambiguity check inside a bare repo (explicit GIT_DIR)

expecting success of 1020.14 'no file/rev ambiguity check inside a bare repo': 
	test_when_finished "rm -fr foo.git" &&
	git clone -s --bare .git foo.git &&
	(
		cd foo.git &&
		git show -s HEAD
	)

Cloning into bare repository 'foo.git'...
done.
commit 63e2ba96e88f4f612aaba03cc52a7db80cff1e0c
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
ok 14 - no file/rev ambiguity check inside a bare repo

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1020.15 'detection should not be fooled by a symlink': 
	git clone -s .git another &&
	ln -s another yetanother &&
	(
		cd yetanother/.git &&
		git show -s HEAD
	)

Cloning into 'another'...
done.
commit 63e2ba96e88f4f612aaba03cc52a7db80cff1e0c
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
ok 15 - detection should not be fooled by a symlink

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1021-rerere-in-workdir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1021-rerere-in-workdir/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1021.1 'setup': 
	git config rerere.enabled true &&
	>world &&
	git add world &&
	test_tick &&
	git commit -m initial &&

	echo hello >world &&
	test_tick &&
	git commit -a -m hello &&

	git checkout -b side HEAD^ &&
	echo goodbye >world &&
	test_tick &&
	git commit -a -m goodbye &&

	git checkout main

[main (root-commit) 21975ff] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 world
[main 02943d2] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'side'
[side 5611ff9] goodbye
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
ok 1 - setup

expecting success of 1021.2 'rerere in workdir': 
	rm -rf .git/rr-cache &&
	"$SHELL_PATH" "$TEST_DIRECTORY/../contrib/workdir/git-new-workdir" . work &&
	(
		cd work &&
		test_must_fail git merge side &&
		git rerere status >actual &&
		echo world >expect &&
		test_cmp expect actual
	)

Auto-merging world
CONFLICT (content): Merge conflict in world
Recorded preimage for 'world'
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - rerere in workdir

checking known breakage of 1021.3 'rerere in workdir (relative)': 
	rm -rf .git/rr-cache &&
	"$SHELL_PATH" "$TEST_DIRECTORY/../contrib/workdir/git-new-workdir" . krow &&
	(
		cd krow &&
		rm -f .git/rr-cache &&
		ln -s ../.git/rr-cache .git/rr-cache &&
		test_must_fail git merge side &&
		git rerere status >actual &&
		echo world >expect &&
		test_cmp expect actual
	)

Auto-merging world
CONFLICT (content): Merge conflict in world
fatal: could not create directory '.git/rr-cache'
fatal: could not create directory '.git/rr-cache'
not ok 3 - rerere in workdir (relative) # TODO known breakage

# still have 1 known breakage(s)
# passed all remaining 2 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1022-read-tree-partial-clone.sh ***
expecting success of 1022.1 'read-tree in partial clone prefetches in one batch': 
	test_when_finished "rm -rf server client trace" &&

	git init server &&
	echo foo >server/one &&
	echo bar >server/two &&
	git -C server add one two &&
	git -C server commit -m "initial commit" &&
	TREE=$(git -C server rev-parse HEAD^{tree}) &&

	git -C server config uploadpack.allowfilter 1 &&
	git -C server config uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:none "file://$(pwd)/server" client &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client read-tree $TREE $TREE &&

	# "done" marks the end of negotiation (once per fetch). Expect that
	# only one fetch occurs.
	grep "fetch> done" trace >donelines &&
	test_line_count = 1 donelines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1022-read-tree-partial-clone/server/.git/
[master (root-commit) a6fa93e] initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one
 create mode 100644 two
Cloning into bare repository 'client'...
ok 1 - read-tree in partial clone prefetches in one batch

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1051-large-conversion.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1051-large-conversion/.git/
expecting success of 1051.1 'setup input tests': 
	printf "\$Id: foo\$\\r\\n" >small &&
	cat small small >large &&
	git config core.bigfilethreshold 20 &&
	git config filter.test.clean "sed s/.*/CLEAN/"

ok 1 - setup input tests

expecting success of 1051.2 'autocrlf=true converts on input': 
	test_config core.autocrlf true &&
	check_input

ok 2 - autocrlf=true converts on input

expecting success of 1051.3 'eol=crlf converts on input': 
	set_attr eol=crlf &&
	check_input

ok 3 - eol=crlf converts on input

expecting success of 1051.4 'ident converts on input': 
	set_attr ident &&
	check_input

ok 4 - ident converts on input

expecting success of 1051.5 'user-defined filters convert on input': 
	set_attr filter=test &&
	check_input

ok 5 - user-defined filters convert on input

expecting success of 1051.6 'setup output tests': 
	echo "\$Id\$" >small &&
	cat small small >large &&
	git add small large &&
	git config core.bigfilethreshold 7 &&
	git config filter.test.smudge "sed s/.*/SMUDGE/"

ok 6 - setup output tests

expecting success of 1051.7 'autocrlf=true converts on output': 
	test_config core.autocrlf true &&
	check_output

Updated 2 paths from the index
ok 7 - autocrlf=true converts on output

expecting success of 1051.8 'eol=crlf converts on output': 
	set_attr eol=crlf &&
	check_output

Updated 2 paths from the index
ok 8 - eol=crlf converts on output

expecting success of 1051.9 'user-defined filters convert on output': 
	set_attr filter=test &&
	check_output

Updated 2 paths from the index
ok 9 - user-defined filters convert on output

expecting success of 1051.10 'ident converts on output': 
	set_attr ident &&
	rm -f small large &&
	git checkout small large &&
	sed -n "s/Id: .*/Id: SHA/p" <small >small.clean &&
	head -n 1 large >large.head &&
	sed -n "s/Id: .*/Id: SHA/p" <large.head >large.clean &&
	test_cmp small.clean large.clean

Updated 2 paths from the index
ok 10 - ident converts on output

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
checking prerequisite: SIZE_T_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SIZE_T_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SIZE_T_IS_64BIT" &&
	test 8 -eq "$(build_option sizeof-size_t)"

)
prerequisite SIZE_T_IS_64BIT not satisfied
checking prerequisite: LONG_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
	test 8 -le "$(build_option sizeof-long)"

)
prerequisite LONG_IS_64BIT not satisfied
ok 11 # skip files over 4GB convert on output (missing SIZE_T_IS_64BIT,EXPENSIVE of EXPENSIVE,SIZE_T_IS_64BIT,!LONG_IS_64BIT)

ok 12 # skip files over 4GB convert on input (missing SIZE_T_IS_64BIT,EXPENSIVE of EXPENSIVE,SIZE_T_IS_64BIT,!LONG_IS_64BIT)

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1060-object-corruption.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/.git/
expecting success of 1060.1 'setup corrupt repo': 
	git init bit-error &&
	(
		cd bit-error &&
		test_commit content &&
		corrupt_byte HEAD:content.t 10
	) &&
	git init no-bit-error &&
	(
		# distinct commit from bit-error, but containing a
		# non-corrupted version of the same blob
		cd no-bit-error &&
		test_tick &&
		test_commit content
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/bit-error/.git/
[master (root-commit) 0df6d69] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content.t
1+0 records in
1+0 records out
1 byte copied, 0.000492685 s, 2.0 kB/s
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/no-bit-error/.git/
[master (root-commit) f374eba] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content.t
ok 1 - setup corrupt repo

expecting success of 1060.2 'setup repo with missing object': 
	git init missing &&
	(
		cd missing &&
		test_commit content &&
		rm -f "$(obj_to_file HEAD:content.t)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/missing/.git/
[master (root-commit) 0df6d69] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content.t
ok 2 - setup repo with missing object

expecting success of 1060.3 'setup repo with misnamed object': 
	git init misnamed &&
	(
		cd misnamed &&
		test_commit content &&
		good=$(obj_to_file HEAD:content.t) &&
		blob=$(echo corrupt | git hash-object -w --stdin) &&
		bad=$(obj_to_file $blob) &&
		rm -f "$good" &&
		mv "$bad" "$good"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/misnamed/.git/
[master (root-commit) 0df6d69] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content.t
ok 3 - setup repo with misnamed object

expecting success of 1060.4 'streaming a corrupt blob fails': 
	(
		cd bit-error &&
		test_must_fail git cat-file blob HEAD:content.t
	)

error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
fatal: loose object d95f3ad14dee633a758d2e331151e950dd13e4ed (stored in .git/objects/d9/5f3ad14dee633a758d2e331151e950dd13e4ed) is corrupt
ok 4 - streaming a corrupt blob fails

expecting success of 1060.5 'getting type of a corrupt blob fails': 
	(
		cd bit-error &&
		test_must_fail git cat-file -s HEAD:content.t
	)

error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
fatal: git cat-file: could not get object info
ok 5 - getting type of a corrupt blob fails

expecting success of 1060.6 'read-tree -u detects bit-errors in blobs': 
	(
		cd bit-error &&
		rm -f content.t &&
		test_must_fail git read-tree --reset -u HEAD
	)

error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
fatal: loose object d95f3ad14dee633a758d2e331151e950dd13e4ed (stored in .git/objects/d9/5f3ad14dee633a758d2e331151e950dd13e4ed) is corrupt
ok 6 - read-tree -u detects bit-errors in blobs

expecting success of 1060.7 'read-tree -u detects missing objects': 
	(
		cd missing &&
		rm -f content.t &&
		test_must_fail git read-tree --reset -u HEAD
	)

error: unable to read sha1 file of content.t (d95f3ad14dee633a758d2e331151e950dd13e4ed)
ok 7 - read-tree -u detects missing objects

expecting success of 1060.8 'clone --no-local --bare detects corruption': 
	test_must_fail git clone --no-local --bare bit-error corrupt-transport

Cloning into bare repository 'corrupt-transport'...
remote: error: inflate: data stream error (invalid distance too far back)        
remote: error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header        
remote: error: inflate: data stream error (invalid distance too far back)        
remote: error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header        
remote: fatal: loose object d95f3ad14dee633a758d2e331151e950dd13e4ed (stored in ./objects/d9/5f3ad14dee633a758d2e331151e950dd13e4ed) is corrupt        
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
ok 8 - clone --no-local --bare detects corruption

expecting success of 1060.9 'clone --no-local --bare detects missing object': 
	test_must_fail git clone --no-local --bare missing missing-transport

Cloning into bare repository 'missing-transport'...
remote: fatal: unable to read d95f3ad14dee633a758d2e331151e950dd13e4ed        
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
ok 9 - clone --no-local --bare detects missing object

expecting success of 1060.10 'clone --no-local --bare detects misnamed object': 
	test_must_fail git clone --no-local --bare misnamed misnamed-transport

Cloning into bare repository 'misnamed-transport'...
fatal: did not receive expected object d95f3ad14dee633a758d2e331151e950dd13e4ed
fatal: fetch-pack: invalid index-pack output
ok 10 - clone --no-local --bare detects misnamed object

expecting success of 1060.11 'clone --local detects corruption': 
	test_must_fail git clone --local bit-error corrupt-checkout

Cloning into 'corrupt-checkout'...
done.
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
error: inflate: data stream error (invalid distance too far back)
error: unable to unpack d95f3ad14dee633a758d2e331151e950dd13e4ed header
fatal: loose object d95f3ad14dee633a758d2e331151e950dd13e4ed (stored in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/corrupt-checkout/.git/objects/d9/5f3ad14dee633a758d2e331151e950dd13e4ed) is corrupt
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

ok 11 - clone --local detects corruption

expecting success of 1060.12 'error detected during checkout leaves repo intact': 
	test_path_is_dir corrupt-checkout/.git

ok 12 - error detected during checkout leaves repo intact

expecting success of 1060.13 'clone --local detects missing objects': 
	test_must_fail git clone --local missing missing-checkout

Cloning into 'missing-checkout'...
done.
error: unable to read sha1 file of content.t (d95f3ad14dee633a758d2e331151e950dd13e4ed)
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

ok 13 - clone --local detects missing objects

checking known breakage of 1060.14 'clone --local detects misnamed objects': 
	test_must_fail git clone --local misnamed misnamed-checkout

Cloning into 'misnamed-checkout'...
done.
test_must_fail: command succeeded: git clone --local misnamed misnamed-checkout
not ok 14 - clone --local detects misnamed objects # TODO known breakage

expecting success of 1060.15 'fetch into corrupted repo with index-pack': 
	cp -R bit-error bit-error-cp &&
	test_when_finished "rm -rf bit-error-cp" &&
	(
		cd bit-error-cp &&
		test_must_fail git -c transfer.unpackLimit=1 \
			fetch ../no-bit-error 2>stderr &&
		test_i18ngrep ! -i collision stderr
	)

ok 15 - fetch into corrupted repo with index-pack

expecting success of 1060.16 'internal tree objects are not "missing"': 
	git init missing-empty &&
	(
		cd missing-empty &&
		empty_tree=$(git hash-object -t tree /dev/null) &&
		commit=$(echo foo | git commit-tree $empty_tree) &&
		git rev-list --objects $commit
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/missing-empty/.git/
2093db06f424f426e05da2ca90f40d2663e89387
4b825dc642cb6eb9a060e54bf8d69288fbee4904 
ok 16 - internal tree objects are not "missing"

expecting success of 1060.17 'partial clone of corrupted repository': 
	test_config -C misnamed uploadpack.allowFilter true &&
	git clone --no-local --no-checkout --filter=blob:none \
		misnamed corrupt-partial && \
	test_must_fail git -C corrupt-partial checkout --force

Cloning into 'corrupt-partial'...
fatal: bad revision 'd95f3ad14dee633a758d2e331151e950dd13e4ed'
error: /<<PKGBUILDDIR>>/t/trash directory.t1060-object-corruption/misnamed did not send all necessary objects

fatal: could not fetch d95f3ad14dee633a758d2e331151e950dd13e4ed from promisor remote
ok 17 - partial clone of corrupted repository

# still have 1 known breakage(s)
# passed all remaining 16 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1090-sparse-checkout-scope.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1090-sparse-checkout-scope/.git/
expecting success of 1090.1 'setup': 
	echo "initial" >a &&
	echo "initial" >b &&
	echo "initial" >c &&
	git add a b c &&
	git commit -m "initial commit"

[main (root-commit) 0b6cffd] initial commit
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
ok 1 - setup

expecting success of 1090.2 'create feature branch': 
	git checkout -b feature &&
	echo "modified" >b &&
	echo "modified" >c &&
	git add b c &&
	git commit -m "modification"

Switched to a new branch 'feature'
[feature 96237bb] modification
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 2 - create feature branch

expecting success of 1090.3 'perform sparse checkout of main': 
	git config --local --bool core.sparsecheckout true &&
	mkdir .git/info &&
	echo "!/*" >.git/info/sparse-checkout &&
	echo "/a" >>.git/info/sparse-checkout &&
	echo "/c" >>.git/info/sparse-checkout &&
	git checkout main &&
	test_path_is_file a &&
	test_path_is_missing b &&
	test_path_is_file c

Switched to branch 'main'
ok 3 - perform sparse checkout of main

expecting success of 1090.4 'merge feature branch into sparse checkout of main': 
	git merge feature &&
	test_path_is_file a &&
	test_path_is_missing b &&
	test_path_is_file c &&
	test "$(cat c)" = "modified"

Updating 0b6cffd..96237bb
Fast-forward
 b | 2 +-
 c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 4 - merge feature branch into sparse checkout of main

expecting success of 1090.5 'return to full checkout of main': 
	git checkout feature &&
	echo "/*" >.git/info/sparse-checkout &&
	git checkout main &&
	test_path_is_file a &&
	test_path_is_file b &&
	test_path_is_file c &&
	test "$(cat b)" = "modified"

Switched to branch 'feature'
Switched to branch 'main'
ok 5 - return to full checkout of main

expecting success of 1090.6 'skip-worktree on files outside sparse patterns': 
	git sparse-checkout disable &&
	git sparse-checkout set --no-cone "a*" &&
	git checkout-index --all --ignore-skip-worktree-bits &&

	git ls-files -t >output &&
	! grep ^S output >actual &&
	test_must_be_empty actual &&

	test_config sparse.expectFilesOutsideOfPatterns true &&
	cat <<-\EOF >expect &&
	S b
	S c
	EOF
	git ls-files -t >output &&
	grep ^S output >actual &&
	test_cmp expect actual

ok 6 - skip-worktree on files outside sparse patterns

expecting success of 1090.7 'in partial clone, sparse checkout only fetches needed blobs': 
	test_create_repo server &&
	git clone --template= "file://$(pwd)/server" client &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	echo a >server/a &&
	echo bb >server/b &&
	mkdir server/c &&
	echo ccc >server/c/c &&
	git -C server add a b c/c &&
	git -C server commit -m message &&

	test_config -C client core.sparsecheckout 1 &&
	mkdir client/.git/info &&
	echo "!/*" >client/.git/info/sparse-checkout &&
	echo "/a" >>client/.git/info/sparse-checkout &&
	git -C client fetch --filter=blob:none origin &&
	git -C client checkout FETCH_HEAD &&

	git -C client rev-list HEAD \
		--quiet --objects --missing=print >unsorted_actual &&
	(
		printf "?" &&
		git hash-object server/b &&
		printf "?" &&
		git hash-object server/c/c
	) >unsorted_expect &&
	sort unsorted_actual >actual &&
	sort unsorted_expect >expect &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1090-sparse-checkout-scope/server/.git/
Cloning into 'client'...
warning: You appear to have cloned an empty repository.
[main (root-commit) ab14680] message
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c/c
From file:///<<PKGBUILDDIR>>/t/trash directory.t1090-sparse-checkout-scope/server
 * [new branch]      main       -> origin/main
Note: switching to 'FETCH_HEAD'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ab14680 message
ok 7 - in partial clone, sparse checkout only fetches needed blobs

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1050-large.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1050-large/.git/
expecting success of 1050.1 'core.bigFileThreshold must be non-negative': 
	test_must_fail git -c core.bigFileThreshold=-1 rev-parse >out 2>err &&
	grep "bad numeric config value" err &&
	test_must_be_empty out

fatal: bad numeric config value '-1' for 'core.bigfilethreshold': invalid unit
ok 1 - core.bigFileThreshold must be non-negative

expecting success of 1050.2 'setup': 
	# clone does not allow us to pass core.bigfilethreshold to
	# new repos, so set core.bigfilethreshold globally
	git config --global core.bigfilethreshold 200k &&
	printf "%2000000s" X >large1 &&
	cp large1 large2 &&
	cp large1 large3 &&
	printf "%2500000s" Y >huge &&
	GIT_ALLOC_LIMIT=1500k &&
	export GIT_ALLOC_LIMIT

ok 2 - setup

expecting success of 1050.3 'enter "large" codepath, with small core.bigFileThreshold': 
	test_when_finished "rm -rf repo" &&

	git init --bare repo &&
	echo large | git -C repo hash-object -w --stdin &&
	git -C repo -c core.bigfilethreshold=4 fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1050-large/repo/
f60ccf3732fd547d393fe12095261c4d49cc94be
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling blob f60ccf3732fd547d393fe12095261c4d49cc94be
ok 3 - enter "large" codepath, with small core.bigFileThreshold

expecting success of 1050.4 'add with -c core.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 4 - add with -c core.compression=0

expecting success of 1050.5 'add with -c core.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 5 - add with -c core.compression=9

expecting success of 1050.6 'add with -c core.compression=0 -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 6 - add with -c core.compression=0 -c pack.compression=0

expecting success of 1050.7 'add with -c core.compression=9 -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 7 - add with -c core.compression=9 -c pack.compression=0

expecting success of 1050.8 'add with -c core.compression=0 -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 8 - add with -c core.compression=0 -c pack.compression=9

expecting success of 1050.9 'add with -c core.compression=9 -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 9 - add with -c core.compression=9 -c pack.compression=9

expecting success of 1050.10 'add with -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 10 - add with -c pack.compression=0

expecting success of 1050.11 'add with -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
		git $config add large1 &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
ok 11 - add with -c pack.compression=9

expecting success of 1050.12 'add a large file or two': 
	git add large1 huge large2 &&
	# make sure we got a single packfile and no loose objects
	count=0 idx= &&
	for p in .git/objects/pack/pack-*.pack
	do
		count=$(( $count + 1 )) &&
		test_path_is_file "$p" &&
		idx=${p%.pack}.idx &&
		test_path_is_file "$idx" || return 1
	done &&
	test $count = 1 &&
	cnt=$(git show-index <"$idx" | wc -l) &&
	test $cnt = 2 &&
	for l in .git/objects/$OIDPATH_REGEX
	do
		test_path_is_missing "$l" || return 1
	done &&

	# attempt to add another copy of the same
	git add large3 &&
	bad= count=0 &&
	for p in .git/objects/pack/pack-*.pack
	do
		count=$(( $count + 1 )) &&
		test_path_is_file "$p" &&
		idx=${p%.pack}.idx &&
		test_path_is_file "$idx" || return 1
	done &&
	test $count = 1

ok 12 - add a large file or two

expecting success of 1050.13 'checkout a large file': 
	large1=$(git rev-parse :large1) &&
	git update-index --add --cacheinfo 100644 $large1 another &&
	git checkout another &&
	test_cmp large1 another

Updated 1 path from the index
ok 13 - checkout a large file

expecting success of 1050.14 'packsize limit': 
	test_create_repo mid &&
	(
		cd mid &&
		git config core.bigfilethreshold 64k &&
		git config pack.packsizelimit 256k &&

		# mid1 and mid2 will fit within 256k limit but
		# appending mid3 will bust the limit and will
		# result in a separate packfile.
		test-tool genrandom "a" $(( 66 * 1024 )) >mid1 &&
		test-tool genrandom "b" $(( 80 * 1024 )) >mid2 &&
		test-tool genrandom "c" $(( 128 * 1024 )) >mid3 &&
		git add mid1 mid2 mid3 &&

		count=0 &&
		for pi in .git/objects/pack/pack-*.idx
		do
			test_path_is_file "$pi" && count=$(( $count + 1 )) || return 1
		done &&
		test $count = 2 &&

		(
			git hash-object --stdin <mid1 &&
			git hash-object --stdin <mid2 &&
			git hash-object --stdin <mid3
		) |
		sort >expect &&

		for pi in .git/objects/pack/pack-*.idx
		do
			git show-index <"$pi" || return 1
		done |
		sed -e "s/^[0-9]* \([0-9a-f]*\) .*/\1/" |
		sort >actual &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1050-large/mid/.git/
ok 14 - packsize limit

expecting success of 1050.15 'diff --raw': 
	git commit -q -m initial &&
	echo modified >>large1 &&
	git add large1 &&
	git commit -q -m modified &&
	git diff --raw HEAD^

:100644 100644 6cef6d8 171a2cf M	large1
ok 15 - diff --raw

expecting success of 1050.16 'diff --stat': 
	git diff --stat HEAD^ HEAD

 large1 | Bin 2000000 -> 2000009 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 16 - diff --stat

expecting success of 1050.17 'diff': 
	git diff HEAD^ HEAD >actual &&
	grep "Binary files.*differ" actual

Binary files a/large1 and b/large1 differ
ok 17 - diff

expecting success of 1050.18 'diff --cached': 
	git diff --cached HEAD^ >actual &&
	grep "Binary files.*differ" actual

Binary files a/large1 and b/large1 differ
ok 18 - diff --cached

expecting success of 1050.19 'hash-object': 
	git hash-object large1

171a2cf5cd75bd8d405266c986591716925e9712
ok 19 - hash-object

expecting success of 1050.20 'cat-file a large file': 
	git cat-file blob :large1 >/dev/null

ok 20 - cat-file a large file

expecting success of 1050.21 'cat-file a large file from a tag': 
	git tag -m largefile largefiletag :large1 &&
	git cat-file blob largefiletag >/dev/null

ok 21 - cat-file a large file from a tag

expecting success of 1050.22 'git-show a large file': 
	git show :large1 >/dev/null


ok 22 - git-show a large file

expecting success of 1050.23 'index-pack': 
	git clone file://"$(pwd)"/.git foo &&
	GIT_DIR=non-existent git index-pack --object-format=$(test_oid algo) \
		--strict --verify foo/.git/objects/pack/*.pack

Cloning into 'foo'...
ok 23 - index-pack

expecting success of 1050.24 'repack': 
	git repack -ad

ok 24 - repack

expecting success of 1050.25 'pack-objects with large loose object': 
	SHA1=$(git hash-object huge) &&
	test_create_repo loose &&
	echo $SHA1 | git pack-objects --stdout |
		GIT_ALLOC_LIMIT=0 GIT_DIR=loose/.git git unpack-objects &&
	echo $SHA1 | GIT_DIR=loose/.git git pack-objects pack &&
	test_create_repo packed &&
	mv pack-* packed/.git/objects/pack &&
	GIT_DIR=packed/.git git cat-file blob $SHA1 >actual &&
	test_cmp huge actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1050-large/loose/.git/
dc5b4c5413c9a2a6ca4f121474e1c9c8ea086153
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1050-large/packed/.git/
ok 25 - pack-objects with large loose object

expecting success of 1050.26 'tar archiving': 
	git archive --format=tar HEAD >/dev/null

ok 26 - tar archiving

expecting success of 1050.27 'zip archiving, store only': 
	git archive --format=zip -0 HEAD >/dev/null

ok 27 - zip archiving, store only

expecting success of 1050.28 'zip archiving, deflate': 
	git archive --format=zip HEAD >/dev/null

ok 28 - zip archiving, deflate

expecting success of 1050.29 'fsck large blobs': 
	git fsck 2>err &&
	test_must_be_empty err

ok 29 - fsck large blobs

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1091-sparse-checkout-builtin.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/.git/
expecting success of 1091.1 'setup': 
	git init repo &&
	(
		cd repo &&
		echo "initial" >a &&
		mkdir folder1 folder2 deep &&
		mkdir deep/deeper1 deep/deeper2 &&
		mkdir deep/deeper1/deepest &&
		cp a folder1 &&
		cp a folder2 &&
		cp a deep &&
		cp a deep/deeper1 &&
		cp a deep/deeper2 &&
		cp a deep/deeper1/deepest &&
		git add . &&
		git commit -m "initial commit"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/repo/.git/
[main (root-commit) ebf8b57] initial commit
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 create mode 100644 a
 create mode 100644 deep/a
 create mode 100644 deep/deeper1/a
 create mode 100644 deep/deeper1/deepest/a
 create mode 100644 deep/deeper2/a
 create mode 100644 folder1/a
 create mode 100644 folder2/a
ok 1 - setup

expecting success of 1091.2 'git sparse-checkout list (not sparse)': 
	test_must_fail git -C repo sparse-checkout list >list 2>err &&
	test_must_be_empty list &&
	test_i18ngrep "this worktree is not sparse" err

fatal: this worktree is not sparse
ok 2 - git sparse-checkout list (not sparse)

expecting success of 1091.3 'git sparse-checkout list (not sparse)': 
	git -C repo sparse-checkout set &&
	rm repo/.git/info/sparse-checkout &&
	git -C repo sparse-checkout list >list 2>err &&
	test_must_be_empty list &&
	test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err

warning: this worktree is not sparse (sparse-checkout file may not exist)
ok 3 - git sparse-checkout list (not sparse)

expecting success of 1091.4 'git sparse-checkout list (populated)': 
	test_when_finished rm -f repo/.git/info/sparse-checkout &&
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/folder1/*
	/deep/
	**/a
	!*bin*
	EOF
	cp repo/.git/info/sparse-checkout expect &&
	git -C repo sparse-checkout list >list &&
	test_cmp expect list

warning: unrecognized pattern: '/folder1/*'
warning: disabling cone pattern matching
ok 4 - git sparse-checkout list (populated)

expecting success of 1091.5 'git sparse-checkout init': 
	git -C repo sparse-checkout init --no-cone &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	test_cmp_config -C repo true core.sparsecheckout &&
	check_files repo a

ok 5 - git sparse-checkout init

expecting success of 1091.6 'git sparse-checkout init in empty repo': 
	test_when_finished rm -rf empty-repo blank-template &&
	git init --template= empty-repo &&
	git -C empty-repo sparse-checkout init

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/empty-repo/.git/
ok 6 - git sparse-checkout init in empty repo

expecting success of 1091.7 'git sparse-checkout list after init': 
	git -C repo sparse-checkout list >actual &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	EOF
	test_cmp expect actual

ok 7 - git sparse-checkout list after init

expecting success of 1091.8 'init with existing sparse-checkout': 
	echo "*folder*" >> repo/.git/info/sparse-checkout &&
	git -C repo sparse-checkout init &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	*folder*
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a folder1 folder2

ok 8 - init with existing sparse-checkout

expecting success of 1091.9 'clone --sparse': 
	git clone --sparse "file://$(pwd)/repo" clone &&
	git -C clone sparse-checkout reapply --no-cone &&
	git -C clone sparse-checkout list >actual &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	EOF
	test_cmp expect actual &&
	check_files clone a

Cloning into 'clone'...
ok 9 - clone --sparse

expecting success of 1091.10 'switching to cone mode with non-cone mode patterns': 
	git init bad-patterns &&
	(
		cd bad-patterns &&
		git sparse-checkout init --no-cone &&
		git sparse-checkout add dir &&
		git config --worktree core.sparseCheckoutCone true &&
		test_must_fail git sparse-checkout add dir 2>err &&
		grep "existing sparse-checkout patterns do not use cone mode" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/bad-patterns/.git/
fatal: existing sparse-checkout patterns do not use cone mode
ok 10 - switching to cone mode with non-cone mode patterns

expecting success of 1091.11 'interaction with clone --no-checkout (unborn index)': 
	git clone --no-checkout "file://$(pwd)/repo" clone_no_checkout &&
	git -C clone_no_checkout sparse-checkout init --cone &&
	git -C clone_no_checkout sparse-checkout set folder1 &&

	git -C clone_no_checkout sparse-checkout list >actual &&
	cat >expect <<-\EOF &&
	folder1
	EOF
	test_cmp expect actual &&

	# nothing checked out, expect "No such file or directory"
	! ls clone_no_checkout/* >actual &&
	test_must_be_empty actual &&
	test_path_is_missing clone_no_checkout/.git/index &&

	# No branch is checked out until we manually switch to one
	git -C clone_no_checkout switch main &&
	test_path_is_file clone_no_checkout/.git/index &&
	check_files clone_no_checkout a folder1

Cloning into 'clone_no_checkout'...
ls: cannot access 'clone_no_checkout/*': No such file or directory
Already on 'main'
Your branch is up to date with 'origin/main'.
ok 11 - interaction with clone --no-checkout (unborn index)

expecting success of 1091.12 'set enables config': 
	git init worktree-config &&
	(
		cd worktree-config &&
		test_commit test file &&
		test_path_is_missing .git/config.worktree &&
		git sparse-checkout set nothing &&
		test_path_is_file .git/config.worktree &&
		test_cmp_config true core.sparseCheckout
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/worktree-config/.git/
[main (root-commit) 236e830] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 12 - set enables config

expecting success of 1091.13 'set sparse-checkout using builtin': 
	git -C repo sparse-checkout set "/*" "!/*/" "*folder*" &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	*folder*
	EOF
	git -C repo sparse-checkout list >actual &&
	test_cmp expect actual &&
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a folder1 folder2

ok 13 - set sparse-checkout using builtin

expecting success of 1091.14 'set sparse-checkout using --stdin': 
	cat >expect <<-\EOF &&
	/*
	!/*/
	/folder1/
	/folder2/
	EOF
	git -C repo sparse-checkout set --stdin <expect &&
	git -C repo sparse-checkout list >actual &&
	test_cmp expect actual &&
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo "a folder1 folder2"

ok 14 - set sparse-checkout using --stdin

expecting success of 1091.15 'add to sparse-checkout': 
	cat repo/.git/info/sparse-checkout >old &&
	test_when_finished cp old repo/.git/info/sparse-checkout &&
	cat >add <<-\EOF &&
	pattern1
	/folder1/
	pattern2
	EOF
	cat old >expect &&
	cat add >>expect &&
	git -C repo sparse-checkout add --stdin <add &&
	git -C repo sparse-checkout list >actual &&
	test_cmp expect actual &&
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo "a folder1 folder2"

ok 15 - add to sparse-checkout

expecting success of 1091.16 'worktree: add copies sparse-checkout patterns': 
	cat repo/.git/info/sparse-checkout >old &&
	test_when_finished cp old repo/.git/info/sparse-checkout &&
	test_when_finished git -C repo worktree remove ../worktree &&
	git -C repo sparse-checkout set --no-cone "/*" &&
	git -C repo worktree add --quiet ../worktree 2>err &&
	test_must_be_empty err &&
	new="$(git -C worktree rev-parse --git-path info/sparse-checkout)" &&
	test_path_is_file "$new" &&
	test_cmp repo/.git/info/sparse-checkout "$new" &&
	git -C worktree sparse-checkout set --cone &&
	test_cmp_config -C worktree true core.sparseCheckoutCone &&
	test_must_fail git -C repo core.sparseCheckoutCone

git: 'core.sparseCheckoutCone' is not a git command. See 'git --help'.
ok 16 - worktree: add copies sparse-checkout patterns

expecting success of 1091.17 'cone mode: match patterns': 
	git -C repo config --worktree core.sparseCheckoutCone true &&
	rm -rf repo/a repo/folder1 repo/folder2 &&
	git -C repo read-tree -mu HEAD 2>err &&
	test_i18ngrep ! "disabling cone patterns" err &&
	git -C repo reset --hard &&
	check_files repo a folder1 folder2

HEAD is now at ebf8b57 initial commit
ok 17 - cone mode: match patterns

expecting success of 1091.18 'cone mode: warn on bad pattern': 
	test_when_finished mv sparse-checkout repo/.git/info/ &&
	cp repo/.git/info/sparse-checkout . &&
	echo "!/deep/deeper/*" >>repo/.git/info/sparse-checkout &&
	git -C repo read-tree -mu HEAD 2>err &&
	test_i18ngrep "unrecognized negative pattern" err

warning: unrecognized negative pattern: '/deep/deeper/*'
warning: unrecognized negative pattern: '/deep/deeper/*'
ok 18 - cone mode: warn on bad pattern

expecting success of 1091.19 'sparse-checkout disable': 
	test_when_finished rm -rf repo/.git/info/sparse-checkout &&
	git -C repo sparse-checkout disable &&
	test_path_is_file repo/.git/info/sparse-checkout &&
	git -C repo config --list >config &&
	test_must_fail git config core.sparseCheckout &&
	check_files repo a deep folder1 folder2

ok 19 - sparse-checkout disable

expecting success of 1091.20 'sparse-index enabled and disabled': 
	git -C repo sparse-checkout init --cone --sparse-index &&
	test_cmp_config -C repo true index.sparse &&
	git -C repo ls-files --sparse >sparse &&
	git -C repo sparse-checkout disable &&
	git -C repo ls-files --sparse >full &&

	cat >expect <<-\EOF &&
	@@ -1,4 +1,7 @@
	 a
	-deep/
	-folder1/
	-folder2/
	+deep/a
	+deep/deeper1/a
	+deep/deeper1/deepest/a
	+deep/deeper2/a
	+folder1/a
	+folder2/a
	EOF

	diff -u sparse full | tail -n +3 >actual &&
	test_cmp expect actual &&

	git -C repo config --list >config &&
	test_cmp_config -C repo false index.sparse

ok 20 - sparse-index enabled and disabled

expecting success of 1091.21 'cone mode: init and set': 
	git -C repo sparse-checkout init --cone &&
	git -C repo config --list >config &&
	test_i18ngrep "core.sparsecheckoutcone=true" config &&
	list_files repo >dir  &&
	echo a >expect &&
	test_cmp expect dir &&
	git -C repo sparse-checkout set deep/deeper1/deepest/ 2>err &&
	test_must_be_empty err &&
	check_files repo a deep &&
	check_files repo/deep a deeper1 &&
	check_files repo/deep/deeper1 a deepest &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	!/deep/*/
	/deep/deeper1/
	!/deep/deeper1/*/
	/deep/deeper1/deepest/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	git -C repo sparse-checkout set --stdin 2>err <<-\EOF &&
	folder1
	folder2
	EOF
	test_must_be_empty err &&
	check_files repo a folder1 folder2

core.sparsecheckoutcone=true
ok 21 - cone mode: init and set

expecting success of 1091.22 'cone mode: list': 
	cat >expect <<-\EOF &&
	folder1
	folder2
	EOF
	git -C repo sparse-checkout set --stdin <expect &&
	git -C repo sparse-checkout list >actual 2>err &&
	test_must_be_empty err &&
	test_cmp expect actual

ok 22 - cone mode: list

expecting success of 1091.23 'cone mode: set with nested folders': 
	git -C repo sparse-checkout set deep deep/deeper1/deepest 2>err &&
	test_line_count = 0 err &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	EOF
	test_cmp repo/.git/info/sparse-checkout expect

ok 23 - cone mode: set with nested folders

expecting success of 1091.24 'cone mode: add independent path': 
	git -C repo sparse-checkout set deep/deeper1 &&
	git -C repo sparse-checkout add folder1 &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	!/deep/*/
	/deep/deeper1/
	/folder1/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a deep folder1

ok 24 - cone mode: add independent path

expecting success of 1091.25 'cone mode: add sibling path': 
	git -C repo sparse-checkout set deep/deeper1 &&
	git -C repo sparse-checkout add deep/deeper2 &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	!/deep/*/
	/deep/deeper1/
	/deep/deeper2/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a deep

ok 25 - cone mode: add sibling path

expecting success of 1091.26 'cone mode: add parent path': 
	git -C repo sparse-checkout set deep/deeper1 folder1 &&
	git -C repo sparse-checkout add deep &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	/folder1/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a deep folder1

ok 26 - cone mode: add parent path

expecting success of 1091.27 'not-up-to-date does not block rest of sparsification': 
	test_when_finished git -C repo sparse-checkout disable &&
	test_when_finished git -C repo reset --hard &&
	git -C repo sparse-checkout set deep &&

	echo update >repo/deep/deeper2/a &&
	cp repo/.git/info/sparse-checkout expect &&
	test_write_lines "!/deep/*/" "/deep/deeper1/" >>expect &&

	git -C repo sparse-checkout set deep/deeper1 2>err &&

	test_i18ngrep "The following paths are not up to date" err &&
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo/deep a deeper1 deeper2 &&
	check_files repo/deep/deeper1 a deepest &&
	check_files repo/deep/deeper1/deepest a &&
	check_files repo/deep/deeper2 a

warning: The following paths are not up to date and were left despite sparse patterns:
HEAD is now at ebf8b57 initial commit
ok 27 - not-up-to-date does not block rest of sparsification

expecting success of 1091.28 'revert to old sparse-checkout on empty update': 
	git init empty-test &&
	(
		echo >file &&
		git add file &&
		git commit -m "test" &&
		git sparse-checkout set nothing 2>err &&
		test_i18ngrep ! "Sparse checkout leaves no entry on working directory" err &&
		test_i18ngrep ! ".git/index.lock" err &&
		git sparse-checkout set --no-cone file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/empty-test/.git/
[main (root-commit) d402fe2] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
warning: pass a leading slash before paths such as 'file' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 28 - revert to old sparse-checkout on empty update

expecting success of 1091.29 'fail when lock is taken': 
	test_when_finished rm -rf repo/.git/info/sparse-checkout.lock &&
	touch repo/.git/info/sparse-checkout.lock &&
	test_must_fail git -C repo sparse-checkout set deep 2>err &&
	test_i18ngrep "Unable to create .*\.lock" err

fatal: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/repo/.git/info/sparse-checkout.lock': File exists.
ok 29 - fail when lock is taken

expecting success of 1091.30 '.gitignore should not warn about cone mode': 
	git -C repo config --worktree core.sparseCheckoutCone true &&
	echo "**/bin/*" >repo/.gitignore &&
	git -C repo reset --hard 2>err &&
	test_i18ngrep ! "disabling cone patterns" err

HEAD is now at ebf8b57 initial commit
ok 30 - .gitignore should not warn about cone mode

expecting success of 1091.31 'sparse-checkout (init|set|disable) warns with dirty status': 
	git clone repo dirty &&
	echo dirty >dirty/folder1/a &&

	git -C dirty sparse-checkout init --no-cone 2>err &&
	test_i18ngrep "warning.*The following paths are not up to date" err &&

	git -C dirty sparse-checkout set /folder2/* /deep/deeper1/* 2>err &&
	test_i18ngrep "warning.*The following paths are not up to date" err &&
	test_path_is_file dirty/folder1/a &&

	git -C dirty sparse-checkout disable 2>err &&
	test_must_be_empty err &&

	git -C dirty reset --hard &&
	git -C dirty sparse-checkout init --no-cone &&
	git -C dirty sparse-checkout set /folder2/* /deep/deeper1/* &&
	test_path_is_missing dirty/folder1/a &&
	git -C dirty sparse-checkout disable &&
	test_path_is_file dirty/folder1/a

Cloning into 'dirty'...
done.
warning: The following paths are not up to date and were left despite sparse patterns:
warning: The following paths are not up to date and were left despite sparse patterns:
HEAD is now at ebf8b57 initial commit
ok 31 - sparse-checkout (init|set|disable) warns with dirty status

expecting success of 1091.32 'sparse-checkout (init|set|disable) warns with unmerged status': 
	git clone repo unmerged &&

	cat >input <<-EOF &&
	0 $ZERO_OID	folder1/a
	100644 $(git -C unmerged rev-parse HEAD:folder1/a) 1	folder1/a
	EOF
	git -C unmerged update-index --index-info <input &&

	git -C unmerged sparse-checkout init --no-cone 2>err &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&

	git -C unmerged sparse-checkout set /folder2/* /deep/deeper1/* 2>err &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&
	test_path_is_file dirty/folder1/a &&

	git -C unmerged sparse-checkout disable 2>err &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&

	git -C unmerged reset --hard &&
	git -C unmerged sparse-checkout init --no-cone &&
	git -C unmerged sparse-checkout set /folder2/* /deep/deeper1/* &&
	git -C unmerged sparse-checkout disable

Cloning into 'unmerged'...
done.
warning: The following paths are unmerged and were left despite sparse patterns:
warning: The following paths are unmerged and were left despite sparse patterns:
warning: The following paths are unmerged and were left despite sparse patterns:
HEAD is now at ebf8b57 initial commit
ok 32 - sparse-checkout (init|set|disable) warns with unmerged status

checking known breakage of 1091.33 'sparse-checkout reapply': 
	git clone repo tweak &&

	echo dirty >tweak/deep/deeper2/a &&

	cat >input <<-EOF &&
	0 $ZERO_OID	folder1/a
	100644 $(git -C tweak rev-parse HEAD:folder1/a) 1	folder1/a
	EOF
	git -C tweak update-index --index-info <input &&

	git -C tweak sparse-checkout init --cone 2>err &&
	test_i18ngrep "warning.*The following paths are not up to date" err &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&

	git -C tweak sparse-checkout set folder2 deep/deeper1 2>err &&
	test_i18ngrep "warning.*The following paths are not up to date" err &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&

	git -C tweak sparse-checkout reapply 2>err &&
	test_i18ngrep "warning.*The following paths are not up to date" err &&
	test_path_is_file tweak/deep/deeper2/a &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&
	test_path_is_file tweak/folder1/a &&

	git -C tweak checkout HEAD deep/deeper2/a &&
	git -C tweak sparse-checkout reapply 2>err &&
	test_i18ngrep ! "warning.*The following paths are not up to date" err &&
	test_path_is_missing tweak/deep/deeper2/a &&
	test_i18ngrep "warning.*The following paths are unmerged" err &&
	test_path_is_file tweak/folder1/a &&

	# NEEDSWORK: We are asking to update a file outside of the
	# sparse-checkout cone, but this is no longer allowed.
	git -C tweak add folder1/a &&
	git -C tweak sparse-checkout reapply 2>err &&
	test_must_be_empty err &&
	test_path_is_missing tweak/deep/deeper2/a &&
	test_path_is_missing tweak/folder1/a &&

	git -C tweak sparse-checkout disable

Cloning into 'tweak'...
done.
warning: The following paths are not up to date and were left despite sparse patterns:
warning: The following paths are unmerged and were left despite sparse patterns:
warning: The following paths are not up to date and were left despite sparse patterns:
warning: The following paths are unmerged and were left despite sparse patterns:
warning: The following paths are not up to date and were left despite sparse patterns:
warning: The following paths are unmerged and were left despite sparse patterns:
Updated 1 path from 5b6118d
warning: The following paths are unmerged and were left despite sparse patterns:
The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
folder1/a
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
not ok 33 - sparse-checkout reapply # TODO known breakage

expecting success of 1091.34 'reapply can handle config options': 
	git -C repo sparse-checkout init --cone --no-sparse-index &&
	git -C repo config --worktree --list >actual &&
	cat >expect <<-\EOF &&
	core.sparsecheckout=true
	core.sparsecheckoutcone=true
	index.sparse=false
	EOF
	test_cmp expect actual &&

	git -C repo sparse-checkout reapply --no-cone --no-sparse-index &&
	git -C repo config --worktree --list >actual &&
	cat >expect <<-\EOF &&
	core.sparsecheckout=true
	core.sparsecheckoutcone=false
	index.sparse=false
	EOF
	test_cmp expect actual &&

	git -C repo sparse-checkout reapply --cone --sparse-index &&
	git -C repo config --worktree --list >actual &&
	cat >expect <<-\EOF &&
	core.sparsecheckout=true
	core.sparsecheckoutcone=true
	index.sparse=true
	EOF
	test_cmp expect actual &&

	git -C repo sparse-checkout disable

ok 34 - reapply can handle config options

expecting success of 1091.35 'cone mode: set with core.ignoreCase=true': 
	rm repo/.git/info/sparse-checkout &&
	git -C repo sparse-checkout init --cone &&
	git -C repo -c core.ignoreCase=true sparse-checkout set folder1 &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/folder1/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a folder1

ok 35 - cone mode: set with core.ignoreCase=true

expecting success of 1091.36 'interaction with submodules': 
	git clone repo super &&
	(
		cd super &&
		mkdir modules &&
		git -c protocol.file.allow=always \
			submodule add ../repo modules/child &&
		git add . &&
		git commit -m "add submodule" &&
		git sparse-checkout init --cone &&
		git sparse-checkout set folder1
	) &&
	check_files super a folder1 modules &&
	check_files super/modules/child a deep folder1 folder2

Cloning into 'super'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1091-sparse-checkout-builtin/super/modules/child'...
done.
[main 7bdd197] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 modules/child
warning: unable to rmdir 'modules/child': Directory not empty
warning: unable to rmdir 'modules/child': Directory not empty
ok 36 - interaction with submodules

expecting success of 1091.37 'different sparse-checkouts with worktrees': 
	git -C repo sparse-checkout set --cone deep folder1 &&
	git -C repo worktree add --detach ../worktree &&
	check_files worktree "a deep folder1" &&
	git -C repo sparse-checkout set --cone folder1 &&
	git -C worktree sparse-checkout set --cone deep/deeper1 &&
	check_files repo "a folder1" &&
	check_files worktree "a deep"

Preparing worktree (detached HEAD ebf8b57)
HEAD is now at ebf8b57 initial commit
ok 37 - different sparse-checkouts with worktrees

expecting success of 1091.38 'set using filename keeps file on-disk': 
	git -C repo sparse-checkout set --skip-checks a deep &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/a/
	/deep/
	EOF
	test_cmp expect repo/.git/info/sparse-checkout &&
	check_files repo a deep

ok 38 - set using filename keeps file on-disk

expecting success of 1091.39 'pattern-checks: /A/**': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/folder1/**
	EOF
	check_read_tree_errors repo "a folder1" "disabling cone pattern matching"

warning: disabling cone pattern matching
warning: disabling cone pattern matching
ok 39 - pattern-checks: /A/**

expecting success of 1091.40 'pattern-checks: /A/**/B/': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/deep/**/deepest
	EOF
	check_read_tree_errors repo "a deep" "disabling cone pattern matching" &&
	check_files repo/deep "deeper1" &&
	check_files repo/deep/deeper1 "deepest"

warning: disabling cone pattern matching
warning: disabling cone pattern matching
ok 40 - pattern-checks: /A/**/B/

expecting success of 1091.41 'pattern-checks: too short': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/
	EOF
	check_read_tree_errors repo "a" "disabling cone pattern matching"

warning: disabling cone pattern matching
ok 41 - pattern-checks: too short

expecting success of 1091.42 'pattern-checks: not too short': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/b/
	EOF
	git -C repo read-tree -mu HEAD 2>err &&
	test_must_be_empty err &&
	check_files repo a

ok 42 - pattern-checks: not too short

expecting success of 1091.43 'pattern-checks: trailing "*"': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/a*
	EOF
	check_read_tree_errors repo "a" "disabling cone pattern matching"

warning: disabling cone pattern matching
ok 43 - pattern-checks: trailing "*"

expecting success of 1091.44 'pattern-checks: starting "*"': 
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	*eep/
	EOF
	check_read_tree_errors repo "a deep" "disabling cone pattern matching"

warning: disabling cone pattern matching
warning: disabling cone pattern matching
ok 44 - pattern-checks: starting "*"

expecting success of 1091.45 'pattern-checks: contained glob characters': 
	for c in "[a]" "\\" "?" "*"
	do
		cat >repo/.git/info/sparse-checkout <<-EOF &&
		/*
		!/*/
		something$c-else/
		EOF
		check_read_tree_errors repo "a" "disabling cone pattern matching" || return 1
	done

warning: disabling cone pattern matching
warning: disabling cone pattern matching
warning: disabling cone pattern matching
warning: disabling cone pattern matching
ok 45 - pattern-checks: contained glob characters

expecting success of 1091.46 'pattern-checks: escaped characters': 
	git clone repo escaped &&
	TREEOID=$(git -C escaped rev-parse HEAD:folder1) &&
	NEWTREE=$(git -C escaped mktree <<-EOF
	$(git -C escaped ls-tree HEAD)
	040000 tree $TREEOID	zbad\\dir
	040000 tree $TREEOID	zdoes*exist
	040000 tree $TREEOID	zglob[!a]?
	EOF
	) &&
	COMMIT=$(git -C escaped commit-tree $NEWTREE -p HEAD) &&
	git -C escaped reset --hard $COMMIT &&
	check_files escaped "a deep folder1 folder2 zbad\\dir zdoes*exist" zglob[!a]? &&
	git -C escaped sparse-checkout init --cone &&
	git -C escaped sparse-checkout set --skip-checks zbad\\dir/bogus "zdoes*not*exist" "zdoes*exist" "zglob[!a]?" &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/zbad\\dir/
	!/zbad\\dir/*/
	/zbad\\dir/bogus/
	/zdoes\*exist/
	/zdoes\*not\*exist/
	/zglob\[!a]\?/
	EOF
	test_cmp expect escaped/.git/info/sparse-checkout &&
	check_read_tree_errors escaped "a zbad\\dir zdoes*exist zglob[!a]?" &&
	git -C escaped ls-tree -d --name-only HEAD >list-expect &&
	git -C escaped sparse-checkout set --stdin <list-expect &&
	cat >expect <<-\EOF &&
	/*
	!/*/
	/deep/
	/folder1/
	/folder2/
	/zbad\\dir/
	/zdoes\*exist/
	/zglob\[!a]\?/
	EOF
	test_cmp expect escaped/.git/info/sparse-checkout &&
	check_files escaped "a deep folder1 folder2 zbad\\dir zdoes*exist" zglob[!a]? &&
	git -C escaped sparse-checkout list >list-actual &&
	test_cmp list-expect list-actual

Cloning into 'escaped'...
done.
HEAD is now at deac45b
ok 46 - pattern-checks: escaped characters

ok 47 # skip cone mode replaces backslashes with slashes (missing MINGW)

expecting success of 1091.48 'cone mode clears ignored subdirectories': 
	rm repo/.git/info/sparse-checkout &&

	git -C repo sparse-checkout init --cone &&
	git -C repo sparse-checkout set deep/deeper1 &&

	cat >repo/.gitignore <<-\EOF &&
	obj/
	*.o
	EOF

	git -C repo add .gitignore &&
	git -C repo commit -m ".gitignore" &&

	mkdir -p repo/obj repo/folder1/obj repo/deep/deeper2/obj &&
	for file in folder1/obj/a obj/a folder1/file.o folder1.o \
		    deep/deeper2/obj/a deep/deeper2/file.o file.o
	do
		echo ignored >repo/$file || return 1
	done &&

	git -C repo status --porcelain=v2 >out &&
	test_must_be_empty out &&

	git -C repo sparse-checkout reapply &&
	test_path_is_missing repo/folder1 &&
	test_path_is_missing repo/deep/deeper2 &&
	test_path_is_dir repo/obj &&
	test_path_is_file repo/file.o &&

	git -C repo status --porcelain=v2 >out &&
	test_must_be_empty out &&

	git -C repo sparse-checkout set deep/deeper2 &&
	test_path_is_missing repo/deep/deeper1 &&
	test_path_is_dir repo/deep/deeper2 &&
	test_path_is_dir repo/obj &&
	test_path_is_file repo/file.o &&

	>repo/deep/deeper2/ignored.o &&
	>repo/deep/deeper2/untracked &&

	# When an untracked file is in the way, all untracked files
	# (even ignored files) are preserved.
	git -C repo sparse-checkout set folder1 2>err &&
	grep "contains untracked files" err &&
	test_path_is_file repo/deep/deeper2/ignored.o &&
	test_path_is_file repo/deep/deeper2/untracked &&

	# The rest of the cone matches expectation
	test_path_is_missing repo/deep/deeper1 &&
	test_path_is_dir repo/obj &&
	test_path_is_file repo/file.o &&

	git -C repo status --porcelain=v2 >out &&
	echo "? deep/deeper2/untracked" >expect &&
	test_cmp expect out

[main ab507a5] .gitignore
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore
warning: directory 'deep/' contains untracked files, but is not in the sparse-checkout cone
ok 48 - cone mode clears ignored subdirectories

expecting success of 1091.49 'malformed cone-mode patterns': 
	git -C repo sparse-checkout init --cone &&
	mkdir -p repo/foo/bar &&
	touch repo/foo/bar/x repo/foo/y &&
	cat >repo/.git/info/sparse-checkout <<-\EOF &&
	/*
	!/*/
	/foo/
	!/foo/*/
	/foo/\*/
	EOF

	# Listing the patterns will notice the duplicate pattern and
	# emit a warning. It will list the patterns directly instead
	# of using the cone-mode translation to a set of directories.
	git -C repo sparse-checkout list >actual 2>err &&
	test_cmp repo/.git/info/sparse-checkout actual &&
	grep "warning: your sparse-checkout file may have issues: pattern .* is repeated" err &&
	grep "warning: disabling cone pattern matching" err

warning: directory 'deep/' contains untracked files, but is not in the sparse-checkout cone
warning: your sparse-checkout file may have issues: pattern '/foo/\*' is repeated
warning: disabling cone pattern matching
ok 49 - malformed cone-mode patterns

expecting success of 1091.50 'set from subdir pays attention to prefix': 
	git -C repo sparse-checkout disable &&
	git -C repo/deep sparse-checkout set --cone deeper2 ../folder1 &&

	git -C repo sparse-checkout list >actual &&

	cat >expect <<-\EOF &&
	deep/deeper2
	folder1
	EOF
	test_cmp expect actual

ok 50 - set from subdir pays attention to prefix

expecting success of 1091.51 'add from subdir pays attention to prefix': 
	git -C repo sparse-checkout set --cone deep/deeper2 &&
	git -C repo/deep sparse-checkout add deeper1/deepest ../folder1 &&

	git -C repo sparse-checkout list >actual &&

	cat >expect <<-\EOF &&
	deep/deeper1/deepest
	deep/deeper2
	folder1
	EOF
	test_cmp expect actual

ok 51 - add from subdir pays attention to prefix

expecting success of 1091.52 'set from subdir in non-cone mode throws an error': 
	git -C repo sparse-checkout disable &&
	test_must_fail git -C repo/deep sparse-checkout set --no-cone deeper2 ../folder1 2>error &&

	grep "run from the toplevel directory in non-cone mode" error

fatal: please run from the toplevel directory in non-cone mode
ok 52 - set from subdir in non-cone mode throws an error

expecting success of 1091.53 'set from subdir in non-cone mode throws an error': 
	git -C repo sparse-checkout set --no-cone deep/deeper2 &&
	test_must_fail git -C repo/deep sparse-checkout add deeper1/deepest ../folder1 2>error &&

	grep "run from the toplevel directory in non-cone mode" error

fatal: please run from the toplevel directory in non-cone mode
ok 53 - set from subdir in non-cone mode throws an error

expecting success of 1091.54 'by default, cone mode will error out when passed files': 
	git -C repo sparse-checkout reapply --cone &&
	test_must_fail git -C repo sparse-checkout add .gitignore 2>error &&

	grep ".gitignore.*is not a directory" error

warning: unrecognized pattern: 'deep/deeper2'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'deep/deeper2'
warning: disabling cone pattern matching
fatal: '.gitignore' is not a directory; to treat it as a directory anyway, rerun with --skip-checks
ok 54 - by default, cone mode will error out when passed files

expecting success of 1091.55 'by default, non-cone mode will warn on individual files': 
	git -C repo sparse-checkout reapply --no-cone &&
	git -C repo sparse-checkout add .gitignore 2>warning &&

	grep "pass a leading slash before paths.*if you want a single file" warning

warning: pass a leading slash before paths such as '.gitignore' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 55 - by default, non-cone mode will warn on individual files

# still have 1 known breakage(s)
# passed all remaining 54 test(s)
1..55
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1100-commit-tree-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1100-commit-tree-options/.git/
expecting success of 1100.1 'test preparation: write empty tree': git write-tree >treeid
ok 1 - test preparation: write empty tree

expecting success of 1100.2 'construct commit': echo comment text |
     GIT_AUTHOR_NAME="Author Name" \
     GIT_AUTHOR_EMAIL="author@email" \
     GIT_AUTHOR_DATE="2005-05-26 23:00" \
     GIT_COMMITTER_NAME="Committer Name" \
     GIT_COMMITTER_EMAIL="committer@email" \
     GIT_COMMITTER_DATE="2005-05-26 23:30" \
     TZ=GMT git commit-tree $(cat treeid) >commitid 2>/dev/null
ok 2 - construct commit

expecting success of 1100.3 'read commit': git cat-file commit $(cat commitid) >commit
ok 3 - read commit

expecting success of 1100.4 'compare commit': test_cmp expected commit
ok 4 - compare commit

expecting success of 1100.5 'flags and then non flags': 
	test_tick &&
	echo comment text |
	git commit-tree $(cat treeid) >commitid &&
	echo comment text |
	git commit-tree $(cat treeid) -p $(cat commitid) >childid-1 &&
	echo comment text |
	git commit-tree -p $(cat commitid) $(cat treeid) >childid-2 &&
	test_cmp childid-1 childid-2 &&
	git commit-tree $(cat treeid) -m foo >childid-3 &&
	git commit-tree -m foo $(cat treeid) >childid-4 &&
	test_cmp childid-3 childid-4

ok 5 - flags and then non flags

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1300-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1300-config/.git/
expecting success of 1300.1 'clear default config': 
	rm -f .git/config

ok 1 - clear default config

expecting success of 1300.2 'initial': 
	git config section.penguin "little blue" &&
	test_cmp expect .git/config

ok 2 - initial

expecting success of 1300.3 'mixed case': 
	git config Section.Movie BadPhysics &&
	test_cmp expect .git/config

ok 3 - mixed case

expecting success of 1300.4 'similar section': 
	git config Sections.WhatEver Second &&
	test_cmp expect .git/config

ok 4 - similar section

expecting success of 1300.5 'uppercase section': 
	git config SECTION.UPPERCASE true &&
	test_cmp expect .git/config

ok 5 - uppercase section

expecting success of 1300.6 'replace with non-match': 
	git config section.penguin kingpin !blue

ok 6 - replace with non-match

expecting success of 1300.7 'replace with non-match (actually matching)': 
	git config section.penguin "very blue" !kingpin

ok 7 - replace with non-match (actually matching)

expecting success of 1300.8 'non-match result': test_cmp expect .git/config
ok 8 - non-match result

expecting success of 1300.9 'find mixed-case key by canonical name': 
	test_cmp_config Second sections.whatever

ok 9 - find mixed-case key by canonical name

expecting success of 1300.10 'find mixed-case key by non-canonical name': 
	test_cmp_config Second SeCtIoNs.WhAtEvEr

ok 10 - find mixed-case key by non-canonical name

expecting success of 1300.11 'subsections are not canonicalized by git-config': 
	cat >>.git/config <<-\EOF &&
	[section.SubSection]
	key = one
	[section "SubSection"]
	key = two
	EOF
	test_cmp_config one section.subsection.key &&
	test_cmp_config two section.SubSection.key

ok 11 - subsections are not canonicalized by git-config

expecting success of 1300.12 'unset with cont. lines': 
	git config --unset beta.baz

ok 12 - unset with cont. lines

expecting success of 1300.13 'unset with cont. lines is correct': test_cmp expect .git/config
ok 13 - unset with cont. lines is correct

expecting success of 1300.14 'multiple unset': 
	git config --unset-all beta.haha

ok 14 - multiple unset

expecting success of 1300.15 'multiple unset is correct': 
	test_cmp expect .git/config

ok 15 - multiple unset is correct

expecting success of 1300.16 '--replace-all missing value': 
	test_must_fail git config --replace-all beta.haha &&
	test_cmp .git/config2 .git/config

error: wrong number of arguments, should be from 2 to 3
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

ok 16 - --replace-all missing value

expecting success of 1300.17 '--replace-all': 
	git config --replace-all beta.haha gamma

ok 17 - --replace-all

expecting success of 1300.18 'all replaced': 
	test_cmp expect .git/config

ok 18 - all replaced

expecting success of 1300.19 'really mean test': 
	git config beta.haha alpha &&
	test_cmp expect .git/config

ok 19 - really mean test

expecting success of 1300.20 'really really mean test': 
	git config nextsection.nonewline wow &&
	test_cmp expect .git/config

ok 20 - really really mean test

expecting success of 1300.21 'get value': 
	test_cmp_config alpha beta.haha

ok 21 - get value

expecting success of 1300.22 'unset': 
	git config --unset beta.haha &&
	test_cmp expect .git/config

ok 22 - unset

expecting success of 1300.23 'multivar': 
	git config nextsection.NoNewLine "wow2 for me" "for me$" &&
	test_cmp expect .git/config

ok 23 - multivar

expecting success of 1300.24 'non-match': 
	git config --get nextsection.nonewline !for

wow
ok 24 - non-match

expecting success of 1300.25 'non-match value': 
	test_cmp_config wow --get nextsection.nonewline !for

ok 25 - non-match value

expecting success of 1300.26 'multi-valued get returns final one': 
	test_cmp_config "wow2 for me" --get nextsection.nonewline

ok 26 - multi-valued get returns final one

expecting success of 1300.27 'multi-valued get-all returns all': 
	cat >expect <<-\EOF &&
	wow
	wow2 for me
	EOF
	git config --get-all nextsection.nonewline >actual &&
	test_cmp expect actual

ok 27 - multi-valued get-all returns all

expecting success of 1300.28 'multivar replace': 
	git config nextsection.nonewline "wow3" "wow$" &&
	test_cmp expect .git/config

ok 28 - multivar replace

expecting success of 1300.29 'ambiguous unset': 
	test_must_fail git config --unset nextsection.nonewline

warning: nextsection.nonewline has multiple values
ok 29 - ambiguous unset

expecting success of 1300.30 'invalid unset': 
	test_must_fail git config --unset somesection.nonewline

ok 30 - invalid unset

expecting success of 1300.31 'multivar unset': 
	git config --unset nextsection.nonewline "wow3$" &&
	test_cmp expect .git/config

ok 31 - multivar unset

expecting success of 1300.32 'invalid key': test_must_fail git config inval.2key blabla
error: invalid key: inval.2key
ok 32 - invalid key

expecting success of 1300.33 'correct key': git config 123456.a123 987
ok 33 - correct key

expecting success of 1300.34 'hierarchical section': 
	git config Version.1.2.3eX.Alpha beta

ok 34 - hierarchical section

expecting success of 1300.35 'hierarchical section value': 
	test_cmp expect .git/config

ok 35 - hierarchical section value

expecting success of 1300.36 'working --list': 
	git config --list > output &&
	test_cmp expect output

ok 36 - working --list

expecting success of 1300.37 '--list without repo produces empty output': 
	git --git-dir=nonexistent config --list >output &&
	test_must_be_empty output

ok 37 - --list without repo produces empty output

expecting success of 1300.38 '--name-only --list': 
	git config --name-only --list >output &&
	test_cmp expect output

ok 38 - --name-only --list

expecting success of 1300.39 '--get-regexp': 
	git config --get-regexp in >output &&
	test_cmp expect output

ok 39 - --get-regexp

expecting success of 1300.40 '--name-only --get-regexp': 
	git config --name-only --get-regexp in >output &&
	test_cmp expect output

ok 40 - --name-only --get-regexp

expecting success of 1300.41 '--add': 
	git config --add nextsection.nonewline "wow4 for you" &&
	git config --get-all nextsection.nonewline > output &&
	test_cmp expect output

ok 41 - --add

expecting success of 1300.42 'get variable with no value': 
	git config --get novalue.variable ^$


ok 42 - get variable with no value

expecting success of 1300.43 'get variable with empty value': 
	git config --get emptyvalue.variable ^$


ok 43 - get variable with empty value

expecting success of 1300.44 'get-regexp variable with no value': 
	git config --get-regexp novalue > output &&
	test_cmp expect output

ok 44 - get-regexp variable with no value

expecting success of 1300.45 'get-regexp --bool variable with no value': 
	git config --bool --get-regexp novalue > output &&
	test_cmp expect output

ok 45 - get-regexp --bool variable with no value

expecting success of 1300.46 'get-regexp variable with empty value': 
	git config --get-regexp emptyvalue > output &&
	test_cmp expect output

ok 46 - get-regexp variable with empty value

expecting success of 1300.47 'get bool variable with no value': 
	git config --bool novalue.variable > output &&
	test_cmp expect output

ok 47 - get bool variable with no value

expecting success of 1300.48 'get bool variable with empty value': 
	git config --bool emptyvalue.variable > output &&
	test_cmp expect output

ok 48 - get bool variable with empty value

expecting success of 1300.49 'no arguments, but no crash': 
	test_must_fail git config >output 2>&1 &&
	test_i18ngrep usage output

usage: git config [<options>]
ok 49 - no arguments, but no crash

expecting success of 1300.50 'new section is partial match of another': 
	git config a.x y &&
	test_cmp expect .git/config

ok 50 - new section is partial match of another

expecting success of 1300.51 'new variable inserts into proper section': 
	git config b.x y &&
	git config a.b c &&
	test_cmp expect .git/config

ok 51 - new variable inserts into proper section

expecting success of 1300.52 'alternative --file (non-existing file should fail)': 
	test_must_fail git config --file non-existing-config -l &&
	test_must_fail git config --file non-existing-config test.xyzzy

fatal: unable to read config file 'non-existing-config': No such file or directory
ok 52 - alternative --file (non-existing file should fail)

expecting success of 1300.53 'alternative GIT_CONFIG': 
	GIT_CONFIG=other-config git config --list >output &&
	test_cmp expect output

ok 53 - alternative GIT_CONFIG

expecting success of 1300.54 'alternative GIT_CONFIG (--file)': 
	git config --file other-config --list >output &&
	test_cmp expect output

ok 54 - alternative GIT_CONFIG (--file)

expecting success of 1300.55 'alternative GIT_CONFIG (--file=-)': 
	git config --file - --list <other-config >output &&
	test_cmp expect output

ok 55 - alternative GIT_CONFIG (--file=-)

expecting success of 1300.56 'setting a value in stdin is an error': 
	test_must_fail git config --file - some.value foo

fatal: writing to stdin is not supported
ok 56 - setting a value in stdin is an error

expecting success of 1300.57 'editing stdin is an error': 
	test_must_fail git config --file - --edit

fatal: editing stdin is not supported
ok 57 - editing stdin is an error

expecting success of 1300.58 'refer config from subdirectory': 
	mkdir x &&
	test_cmp_config -C x strasse --file=../other-config --get ein.bahn

ok 58 - refer config from subdirectory

expecting success of 1300.59 '--set in alternative file': 
	git config --file=other-config anwohner.park ausweis &&
	test_cmp expect other-config

ok 59 - --set in alternative file

expecting success of 1300.60 'rename section': 
	git config --rename-section branch.eins branch.zwei

ok 60 - rename section

expecting success of 1300.61 'rename succeeded': 
	test_cmp expect .git/config

ok 61 - rename succeeded

expecting success of 1300.62 'rename non-existing section': 
	test_must_fail git config --rename-section \
		branch."world domination" branch.drei

fatal: no such section: branch.world domination
ok 62 - rename non-existing section

expecting success of 1300.63 'rename succeeded': 
	test_cmp expect .git/config

ok 63 - rename succeeded

expecting success of 1300.64 'rename another section': 
	git config --rename-section branch."1 234 blabl/a" branch.drei

ok 64 - rename another section

expecting success of 1300.65 'rename succeeded': 
	test_cmp expect .git/config

ok 65 - rename succeeded

expecting success of 1300.66 'rename a section with a var on the same line': 
	git config --rename-section branch.vier branch.zwei

ok 66 - rename a section with a var on the same line

expecting success of 1300.67 'rename succeeded': 
	test_cmp expect .git/config

ok 67 - rename succeeded

expecting success of 1300.68 'renaming empty section name is rejected': 
	test_must_fail git config --rename-section branch.zwei ""

error: invalid section name: 
ok 68 - renaming empty section name is rejected

expecting success of 1300.69 'renaming to bogus section is rejected': 
	test_must_fail git config --rename-section branch.zwei "bogus name"

error: invalid section name: bogus name
ok 69 - renaming to bogus section is rejected

expecting success of 1300.70 'remove section': 
	git config --remove-section branch.zwei

ok 70 - remove section

expecting success of 1300.71 'section was removed properly': 
	test_cmp expect .git/config

ok 71 - section was removed properly

expecting success of 1300.72 'section ending': 
	rm -f .git/config &&
	git config gitcvs.enabled true &&
	git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&
	git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&
	test_cmp expect .git/config


ok 72 - section ending

expecting success of 1300.73 'numbers': 
	git config kilo.gram 1k &&
	git config mega.ton 1m &&
	echo 1024 >expect &&
	echo 1048576 >>expect &&
	git config --int --get kilo.gram >actual &&
	git config --int --get mega.ton >>actual &&
	test_cmp expect actual

ok 73 - numbers

expecting success of 1300.74 '--int is at least 64 bits': 
	git config giga.watts 121g &&
	echo  >expect &&
	test_cmp_config 129922760704 --int --get giga.watts

ok 74 - --int is at least 64 bits

expecting success of 1300.75 'invalid unit': 
	git config aninvalid.unit "1auto" &&
	test_cmp_config 1auto aninvalid.unit &&
	test_must_fail git config --int --get aninvalid.unit 2>actual &&
	test_i18ngrep "bad numeric config value .1auto. for .aninvalid.unit. in file .git/config: invalid unit" actual

fatal: bad numeric config value '1auto' for 'aninvalid.unit' in file .git/config: invalid unit
ok 75 - invalid unit

expecting success of 1300.76 'invalid unit boolean': 
	git config commit.gpgsign "1true" &&
	test_cmp_config 1true commit.gpgsign &&
	test_must_fail git config --bool --get commit.gpgsign 2>actual &&
	test_i18ngrep "bad boolean config value .1true. for .commit.gpgsign." actual

fatal: bad boolean config value '1true' for 'commit.gpgsign'
ok 76 - invalid unit boolean

expecting success of 1300.77 'line number is reported correctly': 
	printf "[bool]\n\tvar\n" >invalid &&
	test_must_fail git config -f invalid --path bool.var 2>actual &&
	test_i18ngrep "line 2" actual

fatal: bad config line 2 in file invalid
ok 77 - line number is reported correctly

expecting success of 1300.78 'invalid stdin config': 
	echo "[broken" | test_must_fail git config --list --file - >output 2>&1 &&
	test_i18ngrep "bad config line 1 in standard input" output

fatal: bad config line 1 in standard input
ok 78 - invalid stdin config

expecting success of 1300.79 'bool': 

	git config bool.true1 01 &&
	git config bool.true2 -1 &&
	git config bool.true3 YeS &&
	git config bool.true4 true &&
	git config bool.false1 000 &&
	git config bool.false2 "" &&
	git config bool.false3 nO &&
	git config bool.false4 FALSE &&
	rm -f result &&
	for i in 1 2 3 4
	do
	    git config --bool --get bool.true$i >>result &&
	    git config --bool --get bool.false$i >>result || return 1
	done &&
	test_cmp expect result
ok 79 - bool

expecting success of 1300.80 'invalid bool (--get)': 

	git config bool.nobool foobar &&
	test_must_fail git config --bool --get bool.nobool
fatal: bad boolean config value 'foobar' for 'bool.nobool'
ok 80 - invalid bool (--get)

expecting success of 1300.81 'invalid bool (set)': 

	test_must_fail git config --bool bool.nobool foobar
fatal: bad boolean config value 'foobar' for 'bool.nobool'
ok 81 - invalid bool (set)

expecting success of 1300.82 'set --bool': 

	rm -f .git/config &&
	git config --bool bool.true1 01 &&
	git config --bool bool.true2 -1 &&
	git config --bool bool.true3 YeS &&
	git config --bool bool.true4 true &&
	git config --bool bool.false1 000 &&
	git config --bool bool.false2 "" &&
	git config --bool bool.false3 nO &&
	git config --bool bool.false4 FALSE &&
	test_cmp expect .git/config
ok 82 - set --bool

expecting success of 1300.83 'set --int': 

	rm -f .git/config &&
	git config --int int.val1 01 &&
	git config --int int.val2 -1 &&
	git config --int int.val3 5m &&
	test_cmp expect .git/config

ok 83 - set --int

expecting success of 1300.84 'get --bool-or-int': 
	cat >.git/config <<-\EOF &&
	[bool]
	true1
	true2 = true
	false = false
	[int]
	int1 = 0
	int2 = 1
	int3 = -1
	EOF
	cat >expect <<-\EOF &&
	true
	true
	false
	0
	1
	-1
	EOF
	{
		git config --bool-or-int bool.true1 &&
		git config --bool-or-int bool.true2 &&
		git config --bool-or-int bool.false &&
		git config --bool-or-int int.int1 &&
		git config --bool-or-int int.int2 &&
		git config --bool-or-int int.int3
	} >actual &&
	test_cmp expect actual

ok 84 - get --bool-or-int

expecting success of 1300.85 'set --bool-or-int': 
	rm -f .git/config &&
	git config --bool-or-int bool.true1 true &&
	git config --bool-or-int bool.false1 false &&
	git config --bool-or-int bool.true2 yes &&
	git config --bool-or-int bool.false2 no &&
	git config --bool-or-int int.int1 0 &&
	git config --bool-or-int int.int2 1 &&
	git config --bool-or-int int.int3 -1 &&
	test_cmp expect .git/config

ok 85 - set --bool-or-int

expecting success of 1300.86 'set --path': 
	rm -f .git/config &&
	git config --path path.home "~/" &&
	git config --path path.normal "/dev/null" &&
	git config --path path.trailingtilde "foo~" &&
	test_cmp expect .git/config
ok 86 - set --path

expecting success of 1300.87 'get --path': 
	git config --get --path path.home > result &&
	git config --get --path path.normal >> result &&
	git config --get --path path.trailingtilde >> result &&
	test_cmp expect result

ok 87 - get --path

expecting success of 1300.88 'get --path copes with unset $HOME': 
	(
		sane_unset HOME &&
		test_must_fail git config --get --path path.home \
			>result 2>msg &&
		git config --get --path path.normal >>result &&
		git config --get --path path.trailingtilde >>result
	) &&
	test_i18ngrep "[Ff]ailed to expand.*~/" msg &&
	test_cmp expect result

fatal: failed to expand user dir in: '~/'
ok 88 - get --path copes with unset $HOME

expecting success of 1300.89 'get --path barfs on boolean variable': 
	echo "[path]bool" >.git/config &&
	test_must_fail git config --get --path path.bool

error: missing value for 'path.bool'
fatal: bad config line 1 in file .git/config
ok 89 - get --path barfs on boolean variable

expecting success of 1300.90 'get --expiry-date': 
	rel="3.weeks.5.days.00:00" &&
	rel_out="$rel ->" &&
	cat >.git/config <<-\EOF &&
	[date]
	valid1 = "3.weeks.5.days 00:00"
	valid2 = "Fri Jun 4 15:46:55 2010"
	valid3 = "2017/11/11 11:11:11PM"
	valid4 = "2017/11/10 09:08:07 PM"
	valid5 = "never"
	invalid1 = "abc"
	EOF
	cat >expect <<-EOF &&
	$(test-tool date timestamp $rel)
	1275666415
	1510441871
	1510348087
	0
	EOF
	: "work around heredoc parsing bug fixed in dash 0.5.7 (in ec2c84d)" &&
	{
		echo "$rel_out $(git config --expiry-date date.valid1)" &&
		git config --expiry-date date.valid2 &&
		git config --expiry-date date.valid3 &&
		git config --expiry-date date.valid4 &&
		git config --expiry-date date.valid5
	} >actual &&
	test_cmp expect actual &&
	test_must_fail git config --expiry-date date.invalid1

error: 'abc' for 'date.invalid1' is not a valid timestamp
fatal: bad config line 7 in file .git/config
ok 90 - get --expiry-date

expecting success of 1300.91 'get --type=color': 
	rm .git/config &&
	git config foo.color "red" &&
	git config --get --type=color foo.color >actual.raw &&
	test_decode_color <actual.raw >actual &&
	echo "<RED>" >expect &&
	test_cmp expect actual

ok 91 - get --type=color

expecting success of 1300.92 'set --type=color': 
	rm .git/config &&
	git config --type=color foo.color "red" &&
	test_cmp expect .git/config

ok 92 - set --type=color

expecting success of 1300.93 'get --type=color barfs on non-color': 
	echo "[foo]bar=not-a-color" >.git/config &&
	test_must_fail git config --get --type=color foo.bar

error: invalid color value: not-a-color
fatal: bad config line 1 in file .git/config
ok 93 - get --type=color barfs on non-color

expecting success of 1300.94 'set --type=color barfs on non-color': 
	test_must_fail git config --type=color foo.color "not-a-color" 2>error &&
	test_i18ngrep "cannot parse color" error

fatal: cannot parse color 'not-a-color'
ok 94 - set --type=color barfs on non-color

expecting success of 1300.95 'quoting': 
	rm -f .git/config &&
	git config quote.leading " test" &&
	git config quote.ending "test " &&
	git config quote.semicolon "test;test" &&
	git config quote.hash "test#test" &&
	test_cmp expect .git/config

ok 95 - quoting

expecting success of 1300.96 'key with newline': 
	test_must_fail git config "key.with
newline" 123
error: invalid key: key.with
newline
ok 96 - key with newline

expecting success of 1300.97 'value with newline': git config key.sub value.with\\\
newline
ok 97 - value with newline

expecting success of 1300.98 'value continued on next line': 
	git config --list > result &&
	test_cmp expect result

ok 98 - value continued on next line

expecting success of 1300.99 '--null --list': 
	git config --null --list >result.raw &&
	nul_to_q <result.raw >result &&
	echo >>result &&
	test_cmp expect result

ok 99 - --null --list

expecting success of 1300.100 '--null --get-regexp': 
	git config --null --get-regexp "val[0-9]" >result.raw &&
	nul_to_q <result.raw >result &&
	echo >>result &&
	test_cmp expect result

ok 100 - --null --get-regexp

expecting success of 1300.101 'inner whitespace kept verbatim': 
	git config section.val "foo 	  bar" &&
	test_cmp_config "foo 	  bar" section.val

ok 101 - inner whitespace kept verbatim

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1300.102 'symlinked configuration': 
	ln -s notyet myconfig &&
	git config --file=myconfig test.frotz nitfol &&
	test -h myconfig &&
	test -f notyet &&
	test "z$(git config --file=notyet test.frotz)" = znitfol &&
	git config --file=myconfig test.xyzzy rezrov &&
	test -h myconfig &&
	test -f notyet &&
	cat >expect <<-\EOF &&
	nitfol
	rezrov
	EOF
	{
		git config --file=notyet test.frotz &&
		git config --file=notyet test.xyzzy
	} >actual &&
	test_cmp expect actual

ok 102 - symlinked configuration

expecting success of 1300.103 'symlink to nonexistent configuration': 
	ln -s doesnotexist linktonada &&
	ln -s linktonada linktolinktonada &&
	test_must_fail git config --file=linktonada --list &&
	test_must_fail git config --file=linktolinktonada --list

fatal: unable to read config file 'linktonada': No such file or directory
fatal: unable to read config file 'linktolinktonada': No such file or directory
ok 103 - symlink to nonexistent configuration

expecting success of 1300.104 'check split_cmdline return': 
	git config alias.split-cmdline-fix 'echo "' &&
	test_must_fail git split-cmdline-fix &&
	echo foo > foo &&
	git add foo &&
	git commit -m 'initial commit' &&
	git config branch.main.mergeoptions 'echo "' &&
	test_must_fail git merge main

fatal: bad alias.split-cmdline-fix string: unclosed quote
[main (root-commit) fecaf4f] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
fatal: Bad branch.main.mergeoptions string: unclosed quote
ok 104 - check split_cmdline return

expecting success of 1300.105 'git -c "key=value" support': 
	cat >expect <<-\EOF &&
	value
	value
	true
	EOF
	{
		git -c section.name=value config section.name &&
		git -c foo.CamelCase=value config foo.camelcase &&
		git -c foo.flag config --bool foo.flag
	} >actual &&
	test_cmp expect actual &&
	test_must_fail git -c name=value config section.name

error: key does not contain a section: name
fatal: unable to parse command-line config
ok 105 - git -c "key=value" support

expecting success of 1300.106 'git -c can represent empty string': 
	echo >expect &&
	git -c foo.empty= config --path foo.empty >actual &&
	test_cmp expect actual

ok 106 - git -c can represent empty string

expecting success of 1300.107 'key sanity-checking': 
	test_must_fail git config foo=bar &&
	test_must_fail git config foo=.bar &&
	test_must_fail git config foo.ba=r &&
	test_must_fail git config foo.1bar &&
	test_must_fail git config foo."ba
				z".bar &&
	test_must_fail git config . false &&
	test_must_fail git config .foo false &&
	test_must_fail git config foo. false &&
	test_must_fail git config .foo. false &&
	git config foo.bar true &&
	git config foo."ba =z".bar false

error: key does not contain a section: foo=bar
error: invalid key: foo=.bar
error: invalid key: foo.ba=r
error: invalid key: foo.1bar
error: invalid key (newline): foo.ba
				z.bar
error: key does not contain a section: .
error: key does not contain a section: .foo
error: key does not contain variable name: foo.
error: key does not contain variable name: .foo.
ok 107 - key sanity-checking

expecting success of 1300.108 'git -c works with aliases of builtins': 
	git config alias.checkconfig "-c foo.check=bar config foo.check" &&
	echo bar >expect &&
	git checkconfig >actual &&
	test_cmp expect actual

ok 108 - git -c works with aliases of builtins

expecting success of 1300.109 'aliases can be CamelCased': 
	test_config alias.CamelCased "rev-parse HEAD" &&
	git CamelCased >out &&
	git rev-parse HEAD >expect &&
	test_cmp expect out

ok 109 - aliases can be CamelCased

expecting success of 1300.110 'git -c does not split values on equals': 
	echo "value with = in it" >expect &&
	git -c section.foo="value with = in it" config section.foo >actual &&
	test_cmp expect actual

ok 110 - git -c does not split values on equals

expecting success of 1300.111 'git -c dies on bogus config': 
	test_must_fail git -c core.bare=foo rev-parse

fatal: bad boolean config value 'foo' for 'core.bare'
ok 111 - git -c dies on bogus config

expecting success of 1300.112 'git -c complains about empty key': 
	test_must_fail git -c "=foo" rev-parse

error: empty config key
fatal: unable to parse command-line config
ok 112 - git -c complains about empty key

expecting success of 1300.113 'git -c complains about empty key and value': 
	test_must_fail git -c "" rev-parse

error: empty config key
fatal: unable to parse command-line config
ok 113 - git -c complains about empty key and value

expecting success of 1300.114 'multiple git -c appends config': 
	test_config alias.x "!git -c x.two=2 config --get-regexp ^x\.*" &&
	cat >expect <<-\EOF &&
	x.one 1
	x.two 2
	EOF
	git -c x.one=1 x >actual &&
	test_cmp expect actual

ok 114 - multiple git -c appends config

expecting success of 1300.115 'last one wins: two level vars': 

	# sec.var and sec.VAR are the same variable, as the first
	# and the last level of a configuration variable name is
	# case insensitive.

	echo VAL >expect &&

	git -c sec.var=val -c sec.VAR=VAL config --get sec.var >actual &&
	test_cmp expect actual &&
	git -c SEC.var=val -c sec.var=VAL config --get sec.var >actual &&
	test_cmp expect actual &&

	git -c sec.var=val -c sec.VAR=VAL config --get SEC.var >actual &&
	test_cmp expect actual &&
	git -c SEC.var=val -c sec.var=VAL config --get sec.VAR >actual &&
	test_cmp expect actual

ok 115 - last one wins: two level vars

expecting success of 1300.116 'last one wins: three level vars': 

	# v.a.r and v.A.r are not the same variable, as the middle
	# level of a three-level configuration variable name is
	# case sensitive.

	echo val >expect &&
	git -c v.a.r=val -c v.A.r=VAL config --get v.a.r >actual &&
	test_cmp expect actual &&
	git -c v.a.r=val -c v.A.r=VAL config --get V.a.R >actual &&
	test_cmp expect actual &&

	# v.a.r and V.a.R are the same variable, as the first
	# and the last level of a configuration variable name is
	# case insensitive.

	echo VAL >expect &&
	git -c v.a.r=val -c v.a.R=VAL config --get v.a.r >actual &&
	test_cmp expect actual &&
	git -c v.a.r=val -c V.a.r=VAL config --get v.a.r >actual &&
	test_cmp expect actual &&
	git -c v.a.r=val -c v.a.R=VAL config --get V.a.R >actual &&
	test_cmp expect actual &&
	git -c v.a.r=val -c V.a.r=VAL config --get V.a.R >actual &&
	test_cmp expect actual

ok 116 - last one wins: three level vars

expecting success of 1300.117 'old-fashioned settings are case insensitive': 
	test_when_finished "rm -f testConfig testConfig_expect testConfig_actual" &&

	cat >testConfig_actual <<-EOF &&
	[V.A]
	r = value1
	EOF
	q_to_tab >testConfig_expect <<-EOF &&
	[V.A]
	Qr = value2
	EOF
	git config -f testConfig_actual "v.a.r" value2 &&
	test_cmp testConfig_expect testConfig_actual &&

	cat >testConfig_actual <<-EOF &&
	[V.A]
	r = value1
	EOF
	q_to_tab >testConfig_expect <<-EOF &&
	[V.A]
	QR = value2
	EOF
	git config -f testConfig_actual "V.a.R" value2 &&
	test_cmp testConfig_expect testConfig_actual &&

	cat >testConfig_actual <<-EOF &&
	[V.A]
	r = value1
	EOF
	q_to_tab >testConfig_expect <<-EOF &&
	[V.A]
	r = value1
	Qr = value2
	EOF
	git config -f testConfig_actual "V.A.r" value2 &&
	test_cmp testConfig_expect testConfig_actual &&

	cat >testConfig_actual <<-EOF &&
	[V.A]
	r = value1
	EOF
	q_to_tab >testConfig_expect <<-EOF &&
	[V.A]
	r = value1
	Qr = value2
	EOF
	git config -f testConfig_actual "v.A.r" value2 &&
	test_cmp testConfig_expect testConfig_actual

ok 117 - old-fashioned settings are case insensitive

expecting success of 1300.118 'setting different case sensitive subsections ': 
	test_when_finished "rm -f testConfig testConfig_expect testConfig_actual" &&

	cat >testConfig_actual <<-EOF &&
	[V "A"]
	R = v1
	[K "E"]
	Y = v1
	[a "b"]
	c = v1
	[d "e"]
	f = v1
	EOF
	q_to_tab >testConfig_expect <<-EOF &&
	[V "A"]
	Qr = v2
	[K "E"]
	Qy = v2
	[a "b"]
	Qc = v2
	[d "e"]
	f = v1
	[d "E"]
	Qf = v2
	EOF
	# exact match
	git config -f testConfig_actual a.b.c v2 &&
	# match section and subsection, key is cased differently.
	git config -f testConfig_actual K.E.y v2 &&
	# section and key are matched case insensitive, but subsection needs
	# to match; When writing out new values only the key is adjusted
	git config -f testConfig_actual v.A.r v2 &&
	# subsection is not matched:
	git config -f testConfig_actual d.E.f v2 &&
	test_cmp testConfig_expect testConfig_actual

ok 118 - setting different case sensitive subsections 

expecting success of 1300.119 'git -c a=VAL rejects invalid 'a'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: key does not contain a section: a
fatal: unable to parse command-line config
ok 119 - git -c a=VAL rejects invalid 'a'

expecting success of 1300.120 'git -c .a=VAL rejects invalid '.a'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: key does not contain a section: .a
fatal: unable to parse command-line config
ok 120 - git -c .a=VAL rejects invalid '.a'

expecting success of 1300.121 'git -c a.=VAL rejects invalid 'a.'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: key does not contain variable name: a.
fatal: unable to parse command-line config
ok 121 - git -c a.=VAL rejects invalid 'a.'

expecting success of 1300.122 'git -c a.0b=VAL rejects invalid 'a.0b'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: invalid key: a.0b
fatal: unable to parse command-line config
ok 122 - git -c a.0b=VAL rejects invalid 'a.0b'

expecting success of 1300.123 'git -c a.b c.=VAL rejects invalid 'a.b c.'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: key does not contain variable name: a.b c.
fatal: unable to parse command-line config
ok 123 - git -c a.b c.=VAL rejects invalid 'a.b c.'

expecting success of 1300.124 'git -c a.b c.0d=VAL rejects invalid 'a.b c.0d'': 
		test_must_fail git -c "$VAR=VAL" config -l
	
error: invalid key: a.b c.0d
fatal: unable to parse command-line config
ok 124 - git -c a.b c.0d=VAL rejects invalid 'a.b c.0d'

expecting success of 1300.125 'git -c a.b=VAL works with valid 'a.b'': 
		echo VAL >expect &&
		git -c "$VAR=VAL" config --get "$VAR" >actual &&
		test_cmp expect actual
	
ok 125 - git -c a.b=VAL works with valid 'a.b'

expecting success of 1300.126 'git -c a.b c.d=VAL works with valid 'a.b c.d'': 
		echo VAL >expect &&
		git -c "$VAR=VAL" config --get "$VAR" >actual &&
		test_cmp expect actual
	
ok 126 - git -c a.b c.d=VAL works with valid 'a.b c.d'

expecting success of 1300.127 'git -c is not confused by empty environment': 
	GIT_CONFIG_PARAMETERS="" git -c x.one=1 config --list

section.sub=section.val1=foo=bar
section.sub=section.val2=foo
bar
section.sub=section.val3=


section.sub=section.val4=
section.sub=section.val5
section.val=foo 	  bar
alias.split-cmdline-fix=echo "
alias.checkconfig=-c foo.check=bar config foo.check
branch.main.mergeoptions=echo "
foo.bar=true
foo.ba =z.bar=false
x.one=1
ok 127 - git -c is not confused by empty environment

expecting success of 1300.128 'GIT_CONFIG_PARAMETERS handles old-style entries': 
	v="${SQ}key.one=foo${SQ}" &&
	v="$v  ${SQ}key.two=bar${SQ}" &&
	v="$v ${SQ}key.ambiguous=section.whatever=value${SQ}" &&
	GIT_CONFIG_PARAMETERS=$v git config --get-regexp "key.*" >actual &&
	cat >expect <<-EOF &&
	key.one foo
	key.two bar
	key.ambiguous section.whatever=value
	EOF
	test_cmp expect actual

ok 128 - GIT_CONFIG_PARAMETERS handles old-style entries

expecting success of 1300.129 'GIT_CONFIG_PARAMETERS handles new-style entries': 
	v="${SQ}key.one${SQ}=${SQ}foo${SQ}" &&
	v="$v  ${SQ}key.two${SQ}=${SQ}bar${SQ}" &&
	v="$v ${SQ}key.ambiguous=section.whatever${SQ}=${SQ}value${SQ}" &&
	GIT_CONFIG_PARAMETERS=$v git config --get-regexp "key.*" >actual &&
	cat >expect <<-EOF &&
	key.one foo
	key.two bar
	key.ambiguous=section.whatever value
	EOF
	test_cmp expect actual

ok 129 - GIT_CONFIG_PARAMETERS handles new-style entries

expecting success of 1300.130 'old and new-style entries can mix': 
	v="${SQ}key.oldone=oldfoo${SQ}" &&
	v="$v ${SQ}key.newone${SQ}=${SQ}newfoo${SQ}" &&
	v="$v ${SQ}key.oldtwo=oldbar${SQ}" &&
	v="$v ${SQ}key.newtwo${SQ}=${SQ}newbar${SQ}" &&
	GIT_CONFIG_PARAMETERS=$v git config --get-regexp "key.*" >actual &&
	cat >expect <<-EOF &&
	key.oldone oldfoo
	key.newone newfoo
	key.oldtwo oldbar
	key.newtwo newbar
	EOF
	test_cmp expect actual

ok 130 - old and new-style entries can mix

expecting success of 1300.131 'old and new bools with ambiguous subsection': 
	v="${SQ}key.with=equals.oldbool${SQ}" &&
	v="$v ${SQ}key.with=equals.newbool${SQ}=" &&
	GIT_CONFIG_PARAMETERS=$v git config --get-regexp "key.*" >actual &&
	cat >expect <<-EOF &&
	key.with equals.oldbool
	key.with=equals.newbool
	EOF
	test_cmp expect actual

ok 131 - old and new bools with ambiguous subsection

expecting success of 1300.132 'detect bogus GIT_CONFIG_PARAMETERS': 
	cat >expect <<-\EOF &&
	env.one one
	env.two two
	EOF
	GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ} ${SQ}env.two=two${SQ}" \
		git config --get-regexp "env.*" >actual &&
	test_cmp expect actual &&

	cat >expect <<-EOF &&
	env.one one${SQ}
	env.two two
	EOF
	GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ}\\$SQ$SQ$SQ ${SQ}env.two=two${SQ}" \
		git config --get-regexp "env.*" >actual &&
	test_cmp expect actual &&

	test_must_fail env \
		GIT_CONFIG_PARAMETERS="${SQ}env.one=one${SQ}\\$SQ ${SQ}env.two=two${SQ}" \
		git config --get-regexp "env.*"

error: bogus format in GIT_CONFIG_PARAMETERS
fatal: unable to parse command-line config
ok 132 - detect bogus GIT_CONFIG_PARAMETERS

expecting success of 1300.133 'git --config-env=key=envvar support': 
	cat >expect <<-\EOF &&
	value
	value
	value
	value
	false
	false
	EOF
	{
		ENVVAR=value git --config-env=core.name=ENVVAR config core.name &&
		ENVVAR=value git --config-env core.name=ENVVAR config core.name &&
		ENVVAR=value git --config-env=foo.CamelCase=ENVVAR config foo.camelcase &&
		ENVVAR=value git --config-env foo.CamelCase=ENVVAR config foo.camelcase &&
		ENVVAR= git --config-env=foo.flag=ENVVAR config --bool foo.flag &&
		ENVVAR= git --config-env foo.flag=ENVVAR config --bool foo.flag
	} >actual &&
	test_cmp expect actual

ok 133 - git --config-env=key=envvar support

expecting success of 1300.134 'git --config-env with missing value': 
	test_must_fail env ENVVAR=value git --config-env 2>error &&
	grep "no config key given for --config-env" error &&
	test_must_fail env ENVVAR=value git --config-env config core.name 2>error &&
	grep "invalid config format: config" error

no config key given for --config-env
fatal: invalid config format: config
ok 134 - git --config-env with missing value

expecting success of 1300.135 'git --config-env fails with invalid parameters': 
	test_must_fail git --config-env=foo.flag config --bool foo.flag 2>error &&
	test_i18ngrep "invalid config format: foo.flag" error &&
	test_must_fail git --config-env=foo.flag= config --bool foo.flag 2>error &&
	test_i18ngrep "missing environment variable name for configuration ${SQ}foo.flag${SQ}" error &&
	sane_unset NONEXISTENT &&
	test_must_fail git --config-env=foo.flag=NONEXISTENT config --bool foo.flag 2>error &&
	test_i18ngrep "missing environment variable ${SQ}NONEXISTENT${SQ} for configuration ${SQ}foo.flag${SQ}" error

fatal: invalid config format: foo.flag
fatal: missing environment variable name for configuration 'foo.flag'
fatal: missing environment variable 'NONEXISTENT' for configuration 'foo.flag'
ok 135 - git --config-env fails with invalid parameters

expecting success of 1300.136 'git -c and --config-env work together': 
	cat >expect <<-\EOF &&
	bar.cmd cmd-value
	bar.env env-value
	EOF
	ENVVAR=env-value git \
		-c bar.cmd=cmd-value \
		--config-env=bar.env=ENVVAR \
		config --get-regexp "^bar.*" >actual &&
	test_cmp expect actual

ok 136 - git -c and --config-env work together

expecting success of 1300.137 'git -c and --config-env override each other': 
	cat >expect <<-\EOF &&
	env
	cmd
	EOF
	{
		ENVVAR=env git -c bar.bar=cmd --config-env=bar.bar=ENVVAR config bar.bar &&
		ENVVAR=env git --config-env=bar.bar=ENVVAR -c bar.bar=cmd config bar.bar
	} >actual &&
	test_cmp expect actual

ok 137 - git -c and --config-env override each other

expecting success of 1300.138 '--config-env handles keys with equals': 
	echo value=with=equals >expect &&
	ENVVAR=value=with=equals git \
		--config-env=section.subsection=with=equals.key=ENVVAR \
		config section.subsection=with=equals.key >actual &&
	test_cmp expect actual

ok 138 - --config-env handles keys with equals

expecting success of 1300.139 'git config handles environment config pairs': 
	GIT_CONFIG_COUNT=2 \
		GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="foo" \
		GIT_CONFIG_KEY_1="pair.two" GIT_CONFIG_VALUE_1="bar" \
		git config --get-regexp "pair.*" >actual &&
	cat >expect <<-EOF &&
	pair.one foo
	pair.two bar
	EOF
	test_cmp expect actual

ok 139 - git config handles environment config pairs

expecting success of 1300.140 'git config ignores pairs without count': 
	test_must_fail env GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="value" \
		git config pair.one 2>error &&
	test_must_be_empty error

ok 140 - git config ignores pairs without count

expecting success of 1300.141 'git config ignores pairs with zero count': 
	test_must_fail env \
		GIT_CONFIG_COUNT=0 \
		GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="value" \
		git config pair.one

ok 141 - git config ignores pairs with zero count

expecting success of 1300.142 'git config ignores pairs exceeding count': 
	GIT_CONFIG_COUNT=1 \
		GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="value" \
		GIT_CONFIG_KEY_1="pair.two" GIT_CONFIG_VALUE_1="value" \
		git config --get-regexp "pair.*" >actual &&
	cat >expect <<-EOF &&
	pair.one value
	EOF
	test_cmp expect actual

ok 142 - git config ignores pairs exceeding count

expecting success of 1300.143 'git config ignores pairs with zero count': 
	test_must_fail env \
		GIT_CONFIG_COUNT=0 GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="value" \
		git config pair.one >error &&
	test_must_be_empty error

ok 143 - git config ignores pairs with zero count

expecting success of 1300.144 'git config ignores pairs with empty count': 
	test_must_fail env \
		GIT_CONFIG_COUNT= GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="value" \
		git config pair.one >error &&
	test_must_be_empty error

ok 144 - git config ignores pairs with empty count

expecting success of 1300.145 'git config fails with invalid count': 
	test_must_fail env GIT_CONFIG_COUNT=10a git config --list 2>error &&
	test_i18ngrep "bogus count" error &&
	test_must_fail env GIT_CONFIG_COUNT=9999999999999999 git config --list 2>error &&
	test_i18ngrep "too many entries" error

error: bogus count in GIT_CONFIG_COUNT
error: too many entries in GIT_CONFIG_COUNT
ok 145 - git config fails with invalid count

expecting success of 1300.146 'git config fails with missing config key': 
	test_must_fail env GIT_CONFIG_COUNT=1 GIT_CONFIG_VALUE_0="value" \
		git config --list 2>error &&
	test_i18ngrep "missing config key" error

error: missing config key GIT_CONFIG_KEY_0
ok 146 - git config fails with missing config key

expecting success of 1300.147 'git config fails with missing config value': 
	test_must_fail env GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0="pair.one" \
		git config --list 2>error &&
	test_i18ngrep "missing config value" error

error: missing config value GIT_CONFIG_VALUE_0
ok 147 - git config fails with missing config value

expecting success of 1300.148 'git config fails with invalid config pair key': 
	test_must_fail env GIT_CONFIG_COUNT=1 \
		GIT_CONFIG_KEY_0= GIT_CONFIG_VALUE_0=value \
		git config --list &&
	test_must_fail env GIT_CONFIG_COUNT=1 \
		GIT_CONFIG_KEY_0=missing-section GIT_CONFIG_VALUE_0=value \
		git config --list

error: empty config key
fatal: unable to parse command-line config
error: key does not contain a section: missing-section
fatal: unable to parse command-line config
ok 148 - git config fails with invalid config pair key

expecting success of 1300.149 'environment overrides config file': 
	test_when_finished "rm -f .git/config" &&
	cat >.git/config <<-EOF &&
	[pair]
	one = value
	EOF
	GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=pair.one GIT_CONFIG_VALUE_0=override \
		git config pair.one >actual &&
	cat >expect <<-EOF &&
	override
	EOF
	test_cmp expect actual

ok 149 - environment overrides config file

expecting success of 1300.150 'GIT_CONFIG_PARAMETERS overrides environment config': 
	GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=pair.one GIT_CONFIG_VALUE_0=value \
		GIT_CONFIG_PARAMETERS="${SQ}pair.one=override${SQ}" \
		git config pair.one >actual &&
	cat >expect <<-EOF &&
	override
	EOF
	test_cmp expect actual

ok 150 - GIT_CONFIG_PARAMETERS overrides environment config

expecting success of 1300.151 'command line overrides environment config': 
	GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=pair.one GIT_CONFIG_VALUE_0=value \
		git -c pair.one=override config pair.one >actual &&
	cat >expect <<-EOF &&
	override
	EOF
	test_cmp expect actual

ok 151 - command line overrides environment config

expecting success of 1300.152 'git config --edit works': 
	git config -f tmp test.value no &&
	echo test.value=yes >expect &&
	GIT_EDITOR="echo [test]value=yes >" git config -f tmp --edit &&
	git config -f tmp --list >actual &&
	test_cmp expect actual

ok 152 - git config --edit works

expecting success of 1300.153 'git config --edit respects core.editor': 
	git config -f tmp test.value no &&
	echo test.value=yes >expect &&
	test_config core.editor "echo [test]value=yes >" &&
	git config -f tmp --edit &&
	git config -f tmp --list >actual &&
	test_cmp expect actual

ok 153 - git config --edit respects core.editor

expecting success of 1300.154 'barf on syntax error': 
	cat >.git/config <<-\EOF &&
	# broken section line
	[section]
	key garbage
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	test_i18ngrep " line 3 " error

fatal: bad config line 3 in file .git/config
ok 154 - barf on syntax error

expecting success of 1300.155 'barf on incomplete section header': 
	cat >.git/config <<-\EOF &&
	# broken section line
	[section
	key = value
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	test_i18ngrep " line 2 " error

fatal: bad config line 2 in file .git/config
ok 155 - barf on incomplete section header

expecting success of 1300.156 'barf on incomplete string': 
	cat >.git/config <<-\EOF &&
	# broken section line
	[section]
	key = "value string
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	test_i18ngrep " line 3 " error

fatal: bad config line 3 in file .git/config
ok 156 - barf on incomplete string

expecting success of 1300.157 'urlmatch': 
	cat >.git/config <<-\EOF &&
	[http]
		sslVerify
	[http "https://weak.example.com"]
		sslVerify = false
		cookieFile = /tmp/cookie.txt
	EOF

	test_expect_code 1 git config --bool --get-urlmatch doesnt.exist https://good.example.com >actual &&
	test_must_be_empty actual &&

	echo true >expect &&
	git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual &&
	test_cmp expect actual &&

	echo false >expect &&
	git config --bool --get-urlmatch http.sslverify https://weak.example.com >actual &&
	test_cmp expect actual &&

	{
		echo http.cookiefile /tmp/cookie.txt &&
		echo http.sslverify false
	} >expect &&
	git config --get-urlmatch HTTP https://weak.example.com >actual &&
	test_cmp expect actual

ok 157 - urlmatch

expecting success of 1300.158 'urlmatch favors more specific URLs': 
	cat >.git/config <<-\EOF &&
	[http "https://example.com/"]
		cookieFile = /tmp/root.txt
	[http "https://example.com/subdirectory"]
		cookieFile = /tmp/subdirectory.txt
	[http "https://user@example.com/"]
		cookieFile = /tmp/user.txt
	[http "https://averylonguser@example.com/"]
		cookieFile = /tmp/averylonguser.txt
	[http "https://preceding.example.com"]
		cookieFile = /tmp/preceding.txt
	[http "https://*.example.com"]
		cookieFile = /tmp/wildcard.txt
	[http "https://*.example.com/wildcardwithsubdomain"]
		cookieFile = /tmp/wildcardwithsubdomain.txt
	[http "https://*.example.*"]
		cookieFile = /tmp/multiwildcard.txt
	[http "https://trailing.example.com"]
		cookieFile = /tmp/trailing.txt
	[http "https://user@*.example.com/"]
		cookieFile = /tmp/wildcardwithuser.txt
	[http "https://sub.example.com/"]
		cookieFile = /tmp/sub.txt
	EOF

	echo http.cookiefile /tmp/root.txt >expect &&
	git config --get-urlmatch HTTP https://example.com >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/subdirectory.txt >expect &&
	git config --get-urlmatch HTTP https://example.com/subdirectory >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/subdirectory.txt >expect &&
	git config --get-urlmatch HTTP https://example.com/subdirectory/nested >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/user.txt >expect &&
	git config --get-urlmatch HTTP https://user@example.com/ >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/subdirectory.txt >expect &&
	git config --get-urlmatch HTTP https://averylonguser@example.com/subdirectory >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/preceding.txt >expect &&
	git config --get-urlmatch HTTP https://preceding.example.com >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/wildcard.txt >expect &&
	git config --get-urlmatch HTTP https://wildcard.example.com >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/sub.txt >expect &&
	git config --get-urlmatch HTTP https://sub.example.com/wildcardwithsubdomain >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/trailing.txt >expect &&
	git config --get-urlmatch HTTP https://trailing.example.com >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/sub.txt >expect &&
	git config --get-urlmatch HTTP https://user@sub.example.com >actual &&
	test_cmp expect actual &&

	echo http.cookiefile /tmp/multiwildcard.txt >expect &&
	git config --get-urlmatch HTTP https://wildcard.example.org >actual &&
	test_cmp expect actual

ok 158 - urlmatch favors more specific URLs

expecting success of 1300.159 'urlmatch with wildcard': 
	cat >.git/config <<-\EOF &&
	[http]
		sslVerify
	[http "https://*.example.com"]
		sslVerify = false
		cookieFile = /tmp/cookie.txt
	EOF

	test_expect_code 1 git config --bool --get-urlmatch doesnt.exist https://good.example.com >actual &&
	test_must_be_empty actual &&

	echo true >expect &&
	git config --bool --get-urlmatch http.SSLverify https://example.com >actual &&
	test_cmp expect actual &&

	echo true >expect &&
	git config --bool --get-urlmatch http.SSLverify https://good-example.com >actual &&
	test_cmp expect actual &&

	echo true >expect &&
	git config --bool --get-urlmatch http.sslverify https://deep.nested.example.com >actual &&
	test_cmp expect actual &&

	echo false >expect &&
	git config --bool --get-urlmatch http.sslverify https://good.example.com >actual &&
	test_cmp expect actual &&

	{
		echo http.cookiefile /tmp/cookie.txt &&
		echo http.sslverify false
	} >expect &&
	git config --get-urlmatch HTTP https://good.example.com >actual &&
	test_cmp expect actual &&

	echo http.sslverify >expect &&
	git config --get-urlmatch HTTP https://more.example.com.au >actual &&
	test_cmp expect actual

ok 159 - urlmatch with wildcard

expecting success of 1300.160 '--unset last key removes section (except if commented)': 
	cat >.git/config <<-\EOF &&
	# some generic comment on the configuration file itself
	# a comment specific to this "section" section.
	[section]
	# some intervening lines
	# that should also be dropped

	key = value
	# please be careful when you update the above variable
	EOF

	cat >expect <<-\EOF &&
	# some generic comment on the configuration file itself
	# a comment specific to this "section" section.
	[section]
	# some intervening lines
	# that should also be dropped

	# please be careful when you update the above variable
	EOF

	git config --unset section.key &&
	test_cmp expect .git/config &&

	cat >.git/config <<-\EOF &&
	[section]
	key = value
	[next-section]
	EOF

	cat >expect <<-\EOF &&
	[next-section]
	EOF

	git config --unset section.key &&
	test_cmp expect .git/config &&

	q_to_tab >.git/config <<-\EOF &&
	[one]
	Qkey = "multiline \
	QQ# with comment"
	[two]
	key = true
	EOF
	git config --unset two.key &&
	! grep two .git/config &&

	q_to_tab >.git/config <<-\EOF &&
	[one]
	Qkey = "multiline \
	QQ# with comment"
	[one]
	key = true
	EOF
	git config --unset-all one.key &&
	test_line_count = 0 .git/config &&

	q_to_tab >.git/config <<-\EOF &&
	[one]
	Qkey = true
	Q# a comment not at the start
	[two]
	Qkey = true
	EOF
	git config --unset two.key &&
	grep two .git/config &&

	q_to_tab >.git/config <<-\EOF &&
	[one]
	Qkey = not [two "subsection"]
	[two "subsection"]
	[two "subsection"]
	Qkey = true
	[TWO "subsection"]
	[one]
	EOF
	git config --unset two.subsection.key &&
	test "not [two subsection]" = "$(git config one.key)" &&
	test_line_count = 3 .git/config

[two]
ok 160 - --unset last key removes section (except if commented)

expecting success of 1300.161 '--unset-all removes section if empty & uncommented': 
	cat >.git/config <<-\EOF &&
	[section]
	key = value1
	key = value2
	EOF

	git config --unset-all section.key &&
	test_line_count = 0 .git/config

ok 161 - --unset-all removes section if empty & uncommented

expecting success of 1300.162 'adding a key into an empty section reuses header': 
	cat >.git/config <<-\EOF &&
	[section]
	EOF

	q_to_tab >expect <<-\EOF &&
	[section]
	Qkey = value
	EOF

	git config section.key value &&
	test_cmp expect .git/config

ok 162 - adding a key into an empty section reuses header

expecting success of 1300.163 'preserves existing permissions': 
	chmod 0600 .git/config &&
	git config imap.pass Hunter2 &&
	perl -e \
	  "die q(badset) if ((stat(q(.git/config)))[2] & 07777) != 0600" &&
	git config --rename-section imap pop &&
	perl -e \
	  "die q(badrename) if ((stat(q(.git/config)))[2] & 07777) != 0600"

ok 163 - preserves existing permissions

expecting success of 1300.164 'set up --show-origin tests': 
	INCLUDE_DIR="$HOME/include" &&
	mkdir -p "$INCLUDE_DIR" &&
	cat >"$INCLUDE_DIR"/absolute.include <<-\EOF &&
	[user]
		absolute = include
	EOF
	cat >"$INCLUDE_DIR"/relative.include <<-\EOF &&
	[user]
		relative = include
	EOF
	cat >"$HOME"/.gitconfig <<-EOF &&
	[user]
		global = true
		override = global
	[include]
		path = "$INCLUDE_DIR/absolute.include"
	EOF
	cat >.git/config <<-\EOF
	[user]
		local = true
		override = local
	[include]
		path = ../include/relative.include
	EOF

ok 164 - set up --show-origin tests

expecting success of 1300.165 '--show-origin with --list': 
	cat >expect <<-EOF &&
	file:$HOME/.gitconfig	user.global=true
	file:$HOME/.gitconfig	user.override=global
	file:$HOME/.gitconfig	include.path=$INCLUDE_DIR/absolute.include
	file:$INCLUDE_DIR/absolute.include	user.absolute=include
	file:.git/config	user.local=true
	file:.git/config	user.override=local
	file:.git/config	include.path=../include/relative.include
	file:.git/../include/relative.include	user.relative=include
	command line:	user.environ=true
	command line:	user.cmdline=true
	EOF
	GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=user.environ GIT_CONFIG_VALUE_0=true\
		git -c user.cmdline=true config --list --show-origin >output &&
	test_cmp expect output

ok 165 - --show-origin with --list

expecting success of 1300.166 '--show-origin with --list --null': 
	cat >expect <<-EOF &&
	file:$HOME/.gitconfigQuser.global
	trueQfile:$HOME/.gitconfigQuser.override
	globalQfile:$HOME/.gitconfigQinclude.path
	$INCLUDE_DIR/absolute.includeQfile:$INCLUDE_DIR/absolute.includeQuser.absolute
	includeQfile:.git/configQuser.local
	trueQfile:.git/configQuser.override
	localQfile:.git/configQinclude.path
	../include/relative.includeQfile:.git/../include/relative.includeQuser.relative
	includeQcommand line:Quser.cmdline
	trueQ
	EOF
	git -c user.cmdline=true config --null --list --show-origin >output.raw &&
	nul_to_q <output.raw >output &&
	# The here-doc above adds a newline that the --null output would not
	# include. Add it here to make the two comparable.
	echo >>output &&
	test_cmp expect output

ok 166 - --show-origin with --list --null

expecting success of 1300.167 '--show-origin with single file': 
	cat >expect <<-\EOF &&
	file:.git/config	user.local=true
	file:.git/config	user.override=local
	file:.git/config	include.path=../include/relative.include
	EOF
	git config --local --list --show-origin >output &&
	test_cmp expect output

ok 167 - --show-origin with single file

expecting success of 1300.168 '--show-origin with --get-regexp': 
	cat >expect <<-EOF &&
	file:$HOME/.gitconfig	user.global true
	file:.git/config	user.local true
	EOF
	git config --show-origin --get-regexp "user\.[g|l].*" >output &&
	test_cmp expect output

ok 168 - --show-origin with --get-regexp

expecting success of 1300.169 '--show-origin getting a single key': 
	cat >expect <<-\EOF &&
	file:.git/config	local
	EOF
	git config --show-origin user.override >output &&
	test_cmp expect output

ok 169 - --show-origin getting a single key

expecting success of 1300.170 'set up custom config file': 
	CUSTOM_CONFIG_FILE="custom.conf" &&
	cat >"$CUSTOM_CONFIG_FILE" <<-\EOF
	[user]
		custom = true
	EOF

ok 170 - set up custom config file

expecting success of 1300.171 'set up custom config file with special name characters': 
	WEIRDLY_NAMED_FILE="file\" (dq) and spaces.conf" &&
	cp "$CUSTOM_CONFIG_FILE" "$WEIRDLY_NAMED_FILE"

ok 171 - set up custom config file with special name characters

expecting success of 1300.172 '--show-origin escape special file name characters': 
	cat >expect <<-\EOF &&
	file:"file\" (dq) and spaces.conf"	user.custom=true
	EOF
	git config --file "$WEIRDLY_NAMED_FILE" --show-origin --list >output &&
	test_cmp expect output

ok 172 - --show-origin escape special file name characters

expecting success of 1300.173 '--show-origin stdin': 
	cat >expect <<-\EOF &&
	standard input:	user.custom=true
	EOF
	git config --file - --show-origin --list <"$CUSTOM_CONFIG_FILE" >output &&
	test_cmp expect output

ok 173 - --show-origin stdin

expecting success of 1300.174 '--show-origin stdin with file include': 
	cat >"$INCLUDE_DIR"/stdin.include <<-EOF &&
	[user]
		stdin = include
	EOF
	cat >expect <<-EOF &&
	file:$INCLUDE_DIR/stdin.include	include
	EOF
	echo "[include]path=\"$INCLUDE_DIR\"/stdin.include" |
	git config --show-origin --includes --file - user.stdin >output &&

	test_cmp expect output

ok 174 - --show-origin stdin with file include

expecting success of 1300.175 '--show-origin blob': 
	blob=$(git hash-object -w "$CUSTOM_CONFIG_FILE") &&
	cat >expect <<-EOF &&
	blob:$blob	user.custom=true
	EOF
	git config --blob=$blob --show-origin --list >output &&
	test_cmp expect output

ok 175 - --show-origin blob

expecting success of 1300.176 '--show-origin blob ref': 
	cat >expect <<-\EOF &&
	blob:main:custom.conf	user.custom=true
	EOF
	git add "$CUSTOM_CONFIG_FILE" &&
	git commit -m "new config file" &&
	git config --blob=main:"$CUSTOM_CONFIG_FILE" --show-origin --list >output &&
	test_cmp expect output

[main 21f66f7] new config file
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 custom.conf
ok 176 - --show-origin blob ref

expecting success of 1300.177 '--show-scope with --list': 
	cat >expect <<-EOF &&
	global	user.global=true
	global	user.override=global
	global	include.path=$INCLUDE_DIR/absolute.include
	global	user.absolute=include
	local	user.local=true
	local	user.override=local
	local	include.path=../include/relative.include
	local	user.relative=include
	local	core.repositoryformatversion=1
	local	extensions.worktreeconfig=true
	worktree	user.worktree=true
	command	user.cmdline=true
	EOF
	git worktree add wt1 &&
	# We need these to test for worktree scope, but outside of this
	# test, this is just noise
	test_config core.repositoryformatversion 1 &&
	test_config extensions.worktreeConfig true &&
	git config --worktree user.worktree true &&
	git -c user.cmdline=true config --list --show-scope >output &&
	test_cmp expect output

Preparing worktree (new branch 'wt1')
HEAD is now at 21f66f7 new config file
ok 177 - --show-scope with --list

expecting success of 1300.178 '--show-scope with --blob': 
	blob=$(git hash-object -w "$CUSTOM_CONFIG_FILE") &&
	cat >expect <<-EOF &&
	command	user.custom=true
	EOF
	git config --blob=$blob --show-scope --list >output &&
	test_cmp expect output

ok 178 - --show-scope with --blob

expecting success of 1300.179 '--show-scope with --local': 
	cat >expect <<-\EOF &&
	local	user.local=true
	local	user.override=local
	local	include.path=../include/relative.include
	EOF
	git config --local --list --show-scope >output &&
	test_cmp expect output

ok 179 - --show-scope with --local

expecting success of 1300.180 '--show-scope getting a single value': 
	cat >expect <<-\EOF &&
	local	true
	EOF
	git config --show-scope --get user.local >output &&
	test_cmp expect output

ok 180 - --show-scope getting a single value

expecting success of 1300.181 '--show-scope with --show-origin': 
	cat >expect <<-EOF &&
	global	file:$HOME/.gitconfig	user.global=true
	global	file:$HOME/.gitconfig	user.override=global
	global	file:$HOME/.gitconfig	include.path=$INCLUDE_DIR/absolute.include
	global	file:$INCLUDE_DIR/absolute.include	user.absolute=include
	local	file:.git/config	user.local=true
	local	file:.git/config	user.override=local
	local	file:.git/config	include.path=../include/relative.include
	local	file:.git/../include/relative.include	user.relative=include
	command	command line:	user.cmdline=true
	EOF
	git -c user.cmdline=true config --list --show-origin --show-scope >output &&
	test_cmp expect output

ok 181 - --show-scope with --show-origin

expecting success of 1300.182 'override global and system config': 
	test_when_finished rm -f \"\$HOME\"/.gitconfig &&
	cat >"$HOME"/.gitconfig <<-EOF &&
	[home]
		config = true
	EOF

	test_when_finished rm -rf \"\$HOME\"/.config/git &&
	mkdir -p "$HOME"/.config/git &&
	cat >"$HOME"/.config/git/config <<-EOF &&
	[xdg]
		config = true
	EOF
	cat >.git/config <<-EOF &&
	[local]
		config = true
	EOF
	cat >custom-global-config <<-EOF &&
	[global]
		config = true
	EOF
	cat >custom-system-config <<-EOF &&
	[system]
		config = true
	EOF

	cat >expect <<-EOF &&
	global	xdg.config=true
	global	home.config=true
	local	local.config=true
	EOF
	git config --show-scope --list >output &&
	test_cmp expect output &&

	cat >expect <<-EOF &&
	system	system.config=true
	global	global.config=true
	local	local.config=true
	EOF
	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=custom-system-config GIT_CONFIG_GLOBAL=custom-global-config \
		git config --show-scope --list >output &&
	test_cmp expect output &&

	cat >expect <<-EOF &&
	local	local.config=true
	EOF
	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=/dev/null GIT_CONFIG_GLOBAL=/dev/null \
		git config --show-scope --list >output &&
	test_cmp expect output

ok 182 - override global and system config

expecting success of 1300.183 'override global and system config with missing file': 
	test_must_fail env GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=/dev/null git config --global --list &&
	test_must_fail env GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_SYSTEM=does-not-exist git config --system --list &&
	GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=does-not-exist git version

fatal: unable to read config file 'does-not-exist': No such file or directory
fatal: unable to read config file 'does-not-exist': No such file or directory
git version 2.39.0
ok 183 - override global and system config with missing file

expecting success of 1300.184 'system override has no effect with GIT_CONFIG_NOSYSTEM': 
	# `git config --system` has different semantics compared to other
	# commands as it ignores GIT_CONFIG_NOSYSTEM. We thus test whether the
	# variable has an effect via a different proxy.
	cat >alias-config <<-EOF &&
	[alias]
		hello-world = !echo "hello world"
	EOF
	test_must_fail env GIT_CONFIG_NOSYSTEM=true GIT_CONFIG_SYSTEM=alias-config \
		git hello-world &&
	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=alias-config \
		git hello-world >actual &&
	echo "hello world" >expect &&
	test_cmp expect actual

git: 'hello-world' is not a git command. See 'git --help'.
ok 184 - system override has no effect with GIT_CONFIG_NOSYSTEM

expecting success of 1300.185 'write to overridden global and system config': 
	cat >expect <<EOF &&
[config]
	key = value
EOF

	GIT_CONFIG_GLOBAL=write-to-global git config --global config.key value &&
	test_cmp expect write-to-global &&

	GIT_CONFIG_SYSTEM=write-to-system git config --system config.key value &&
	test_cmp expect write-to-system

ok 185 - write to overridden global and system config

expecting success of 1300.186 '--local requires a repo': 
		# we expect 128 to ensure that we do not simply
		# fail to find anything and return code "1"
		test_expect_code 128 nongit git config $opt foo.bar
	
fatal: --local can only be used inside a git repository
ok 186 - --local requires a repo

expecting success of 1300.187 '--worktree requires a repo': 
		# we expect 128 to ensure that we do not simply
		# fail to find anything and return code "1"
		test_expect_code 128 nongit git config $opt foo.bar
	
fatal: --worktree can only be used inside a git repository
ok 187 - --worktree requires a repo

expecting success of 1300.188 'identical modern --type specifiers are allowed': 
	test_cmp_config 1048576 --type=int --type=int section.big

ok 188 - identical modern --type specifiers are allowed

expecting success of 1300.189 'identical legacy --type specifiers are allowed': 
	test_cmp_config 1048576 --int --int section.big

ok 189 - identical legacy --type specifiers are allowed

expecting success of 1300.190 'identical mixed --type specifiers are allowed': 
	test_cmp_config 1048576 --int --type=int section.big

ok 190 - identical mixed --type specifiers are allowed

expecting success of 1300.191 'non-identical modern --type specifiers are not allowed': 
	test_must_fail git config --type=int --type=bool section.big 2>error &&
	test_i18ngrep "only one type at a time" error

error: only one type at a time
ok 191 - non-identical modern --type specifiers are not allowed

expecting success of 1300.192 'non-identical legacy --type specifiers are not allowed': 
	test_must_fail git config --int --bool section.big 2>error &&
	test_i18ngrep "only one type at a time" error

error: only one type at a time
ok 192 - non-identical legacy --type specifiers are not allowed

expecting success of 1300.193 'non-identical mixed --type specifiers are not allowed': 
	test_must_fail git config --type=int --bool section.big 2>error &&
	test_i18ngrep "only one type at a time" error

error: only one type at a time
ok 193 - non-identical mixed --type specifiers are not allowed

expecting success of 1300.194 '--type allows valid type specifiers': 
	test_cmp_config true  --type=bool section.foo

ok 194 - --type allows valid type specifiers

expecting success of 1300.195 '--no-type unsets type specifiers': 
	test_cmp_config 10 --type=bool --no-type section.number

ok 195 - --no-type unsets type specifiers

expecting success of 1300.196 'unset type specifiers may be reset to conflicting ones': 
	test_cmp_config 1048576 --type=bool --no-type --type=int section.big

ok 196 - unset type specifiers may be reset to conflicting ones

expecting success of 1300.197 '--type rejects unknown specifiers': 
	test_must_fail git config --type=nonsense section.foo 2>error &&
	test_i18ngrep "unrecognized --type argument" error

fatal: unrecognized --type argument, nonsense
ok 197 - --type rejects unknown specifiers

expecting success of 1300.198 '--type=int requires at least one digit': 
	test_must_fail git config --type int --default m some.key >out 2>error &&
	grep "bad numeric config value" error &&
	test_must_be_empty out

fatal: bad numeric config value 'm' for 'some.key': invalid unit
ok 198 - --type=int requires at least one digit

expecting success of 1300.199 '--replace-all does not invent newlines': 
	q_to_tab >.git/config <<-\EOF &&
	[abc]key
	QkeepSection
	[xyz]
	Qkey = 1
	[abc]
	Qkey = a
	EOF
	q_to_tab >expect <<-\EOF &&
	[abc]
	QkeepSection
	[xyz]
	Qkey = 1
	[abc]
	Qkey = b
	EOF
	git config --replace-all abc.key b &&
	test_cmp expect .git/config

ok 199 - --replace-all does not invent newlines

expecting success of 1300.200 'set all config with value-pattern': 
	test_when_finished rm -f config initial &&
	git config --file=initial abc.key one &&

	# no match => add new entry
	cp initial config &&
	git config --file=config abc.key two a+ &&
	git config --file=config --list >actual &&
	cat >expect <<-\EOF &&
	abc.key=one
	abc.key=two
	EOF
	test_cmp expect actual &&

	# multiple matches => failure
	test_must_fail git config --file=config abc.key three o+ 2>err &&
	test_i18ngrep "has multiple values" err &&

	# multiple values, no match => add
	git config --file=config abc.key three a+ &&
	git config --file=config --list >actual &&
	cat >expect <<-\EOF &&
	abc.key=one
	abc.key=two
	abc.key=three
	EOF
	test_cmp expect actual &&

	# single match => replace
	git config --file=config abc.key four h+ &&
	git config --file=config --list >actual &&
	cat >expect <<-\EOF &&
	abc.key=one
	abc.key=two
	abc.key=four
	EOF
	test_cmp expect actual

warning: abc.key has multiple values
ok 200 - set all config with value-pattern

expecting success of 1300.201 '--replace-all and value-pattern': 
	test_when_finished rm -f config &&
	git config --file=config --add abc.key one &&
	git config --file=config --add abc.key two &&
	git config --file=config --add abc.key three &&
	git config --file=config --replace-all abc.key four "o+" &&
	git config --file=config --list >actual &&
	cat >expect <<-\EOF &&
	abc.key=four
	abc.key=three
	EOF
	test_cmp expect actual

ok 201 - --replace-all and value-pattern

expecting success of 1300.202 'refuse --fixed-value for incompatible actions': 
	test_when_finished rm -f config &&
	git config --file=config dev.null bogus &&

	# These modes do not allow --fixed-value at all
	test_must_fail git config --file=config --fixed-value --add dev.null bogus &&
	test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
	test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
	test_must_fail git config --file=config --fixed-value --rename-section dev null &&
	test_must_fail git config --file=config --fixed-value --remove-section dev &&
	test_must_fail git config --file=config --fixed-value --list &&
	test_must_fail git config --file=config --fixed-value --get-color dev.null &&
	test_must_fail git config --file=config --fixed-value --get-colorbool dev.null &&

	# These modes complain when --fixed-value has no value-pattern
	test_must_fail git config --file=config --fixed-value dev.null bogus &&
	test_must_fail git config --file=config --fixed-value --replace-all dev.null bogus &&
	test_must_fail git config --file=config --fixed-value --get dev.null &&
	test_must_fail git config --file=config --fixed-value --get-all dev.null &&
	test_must_fail git config --file=config --fixed-value --get-regexp "dev.*" &&
	test_must_fail git config --file=config --fixed-value --unset dev.null &&
	test_must_fail git config --file=config --fixed-value --unset-all dev.null

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

error: --fixed-value only applies with 'value-pattern'
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

ok 202 - refuse --fixed-value for incompatible actions

expecting success of 1300.203 '--fixed-value uses exact string matching': 
	test_when_finished rm -f config initial &&
	META="a+b*c?d[e]f.g" &&
	git config --file=initial fixed.test "$META" &&

	cp initial config &&
	git config --file=config fixed.test bogus "$META" &&
	git config --file=config --list >actual &&
	cat >expect <<-EOF &&
	fixed.test=$META
	fixed.test=bogus
	EOF
	test_cmp expect actual &&

	cp initial config &&
	git config --file=config --fixed-value fixed.test bogus "$META" &&
	git config --file=config --list >actual &&
	cat >expect <<-\EOF &&
	fixed.test=bogus
	EOF
	test_cmp expect actual &&

	cp initial config &&
	test_must_fail git config --file=config --unset fixed.test "$META" &&
	git config --file=config --fixed-value --unset fixed.test "$META" &&
	test_must_fail git config --file=config fixed.test &&

	cp initial config &&
	test_must_fail git config --file=config --unset-all fixed.test "$META" &&
	git config --file=config --fixed-value --unset-all fixed.test "$META" &&
	test_must_fail git config --file=config fixed.test &&

	cp initial config &&
	git config --file=config --replace-all fixed.test bogus "$META" &&
	git config --file=config --list >actual &&
	cat >expect <<-EOF &&
	fixed.test=$META
	fixed.test=bogus
	EOF
	test_cmp expect actual &&

	git config --file=config --fixed-value --replace-all fixed.test bogus "$META" &&
	git config --file=config --list >actual &&
	cat >expect <<-EOF &&
	fixed.test=bogus
	fixed.test=bogus
	EOF
	test_cmp expect actual

ok 203 - --fixed-value uses exact string matching

expecting success of 1300.204 '--get and --get-all with --fixed-value': 
	test_when_finished rm -f config &&
	META="a+b*c?d[e]f.g" &&
	git config --file=config fixed.test bogus &&
	git config --file=config --add fixed.test "$META" &&

	git config --file=config --get fixed.test bogus &&
	test_must_fail git config --file=config --get fixed.test "$META" &&
	git config --file=config --get --fixed-value fixed.test "$META" &&
	test_must_fail git config --file=config --get --fixed-value fixed.test non-existent &&

	git config --file=config --get-all fixed.test bogus &&
	test_must_fail git config --file=config --get-all fixed.test "$META" &&
	git config --file=config --get-all --fixed-value fixed.test "$META" &&
	test_must_fail git config --file=config --get-all --fixed-value fixed.test non-existent &&

	git config --file=config --get-regexp fixed+ bogus &&
	test_must_fail git config --file=config --get-regexp fixed+ "$META" &&
	git config --file=config --get-regexp --fixed-value fixed+ "$META" &&
	test_must_fail git config --file=config --get-regexp --fixed-value fixed+ non-existent

bogus
a+b*c?d[e]f.g
bogus
a+b*c?d[e]f.g
fixed.test bogus
fixed.test a+b*c?d[e]f.g
ok 204 - --get and --get-all with --fixed-value

expecting success of 1300.205 'includeIf.hasconfig:remote.*.url': 
	git init hasremoteurlTest &&
	test_when_finished "rm -rf hasremoteurlTest" &&

	cat >include-this <<-\EOF &&
	[user]
		this = this-is-included
	EOF
	cat >dont-include-that <<-\EOF &&
	[user]
		that = that-is-not-included
	EOF
	cat >>hasremoteurlTest/.git/config <<-EOF &&
	[includeIf "hasconfig:remote.*.url:foourl"]
		path = "$(pwd)/include-this"
	[includeIf "hasconfig:remote.*.url:barurl"]
		path = "$(pwd)/dont-include-that"
	[remote "foo"]
		url = foourl
	EOF

	echo this-is-included >expect-this &&
	git -C hasremoteurlTest config --get user.this >actual-this &&
	test_cmp expect-this actual-this &&

	test_must_fail git -C hasremoteurlTest config --get user.that

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1300-config/hasremoteurlTest/.git/
ok 205 - includeIf.hasconfig:remote.*.url

expecting success of 1300.206 'includeIf.hasconfig:remote.*.url respects last-config-wins': 
	git init hasremoteurlTest &&
	test_when_finished "rm -rf hasremoteurlTest" &&

	cat >include-two-three <<-\EOF &&
	[user]
		two = included-config
		three = included-config
	EOF
	cat >>hasremoteurlTest/.git/config <<-EOF &&
	[remote "foo"]
		url = foourl
	[user]
		one = main-config
		two = main-config
	[includeIf "hasconfig:remote.*.url:foourl"]
		path = "$(pwd)/include-two-three"
	[user]
		three = main-config
	EOF

	echo main-config >expect-main-config &&
	echo included-config >expect-included-config &&

	git -C hasremoteurlTest config --get user.one >actual &&
	test_cmp expect-main-config actual &&

	git -C hasremoteurlTest config --get user.two >actual &&
	test_cmp expect-included-config actual &&

	git -C hasremoteurlTest config --get user.three >actual &&
	test_cmp expect-main-config actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1300-config/hasremoteurlTest/.git/
ok 206 - includeIf.hasconfig:remote.*.url respects last-config-wins

expecting success of 1300.207 'includeIf.hasconfig:remote.*.url globs': 
	git init hasremoteurlTest &&
	test_when_finished "rm -rf hasremoteurlTest" &&

	printf "[user]\ndss = yes\n" >double-star-start &&
	printf "[user]\ndse = yes\n" >double-star-end &&
	printf "[user]\ndsm = yes\n" >double-star-middle &&
	printf "[user]\nssm = yes\n" >single-star-middle &&
	printf "[user]\nno = no\n" >no &&

	cat >>hasremoteurlTest/.git/config <<-EOF &&
	[remote "foo"]
		url = https://foo/bar/baz
	[includeIf "hasconfig:remote.*.url:**/baz"]
		path = "$(pwd)/double-star-start"
	[includeIf "hasconfig:remote.*.url:**/nomatch"]
		path = "$(pwd)/no"
	[includeIf "hasconfig:remote.*.url:https:/**"]
		path = "$(pwd)/double-star-end"
	[includeIf "hasconfig:remote.*.url:nomatch:/**"]
		path = "$(pwd)/no"
	[includeIf "hasconfig:remote.*.url:https:/**/baz"]
		path = "$(pwd)/double-star-middle"
	[includeIf "hasconfig:remote.*.url:https:/**/nomatch"]
		path = "$(pwd)/no"
	[includeIf "hasconfig:remote.*.url:https://*/bar/baz"]
		path = "$(pwd)/single-star-middle"
	[includeIf "hasconfig:remote.*.url:https://*/baz"]
		path = "$(pwd)/no"
	EOF

	git -C hasremoteurlTest config --get user.dss &&
	git -C hasremoteurlTest config --get user.dse &&
	git -C hasremoteurlTest config --get user.dsm &&
	git -C hasremoteurlTest config --get user.ssm &&
	test_must_fail git -C hasremoteurlTest config --get user.no

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1300-config/hasremoteurlTest/.git/
yes
yes
yes
yes
ok 207 - includeIf.hasconfig:remote.*.url globs

expecting success of 1300.208 'includeIf.hasconfig:remote.*.url forbids remote url in such included files': 
	git init hasremoteurlTest &&
	test_when_finished "rm -rf hasremoteurlTest" &&

	cat >include-with-url <<-\EOF &&
	[remote "bar"]
		url = barurl
	EOF
	cat >>hasremoteurlTest/.git/config <<-EOF &&
	[includeIf "hasconfig:remote.*.url:foourl"]
		path = "$(pwd)/include-with-url"
	EOF

	# test with any Git command
	test_must_fail git -C hasremoteurlTest status 2>err &&
	grep "fatal: remote URLs cannot be configured in file directly or indirectly included by includeIf.hasconfig:remote.*.url" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1300-config/hasremoteurlTest/.git/
fatal: remote URLs cannot be configured in file directly or indirectly included by includeIf.hasconfig:remote.*.url
ok 208 - includeIf.hasconfig:remote.*.url forbids remote url in such included files

# passed all 208 test(s)
1..208
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1301-shared-repo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/.git/
expecting success of 1301.1 'shared = 0400 (faulty permission u-w)': 
	test_when_finished "rm -rf sub" &&
	mkdir sub && (
		cd sub &&
		test_must_fail git init --shared=0400
	)

fatal: problem with core.sharedRepository filemode value (0400).
The owner of files must always have read and write permissions.
ok 1 - shared = 0400 (faulty permission u-w)

expecting success of 1301.2 'shared=1 does not clear bits preset by umask 002': 
		mkdir sub && (
			cd sub &&
			umask $u &&
			git init --shared=1 &&
			test 1 = "$(git config core.sharedrepository)"
		) &&
		actual=$(ls -l sub/.git/HEAD) &&
		case "$actual" in
		-rw-rw-r--*)
			: happy
			;;
		*)
			echo Oops, .git/HEAD is not 0664 but $actual
			false
			;;
		esac
	
Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/.git/
ok 2 - shared=1 does not clear bits preset by umask 002

expecting success of 1301.3 'shared=1 does not clear bits preset by umask 022': 
		mkdir sub && (
			cd sub &&
			umask $u &&
			git init --shared=1 &&
			test 1 = "$(git config core.sharedrepository)"
		) &&
		actual=$(ls -l sub/.git/HEAD) &&
		case "$actual" in
		-rw-rw-r--*)
			: happy
			;;
		*)
			echo Oops, .git/HEAD is not 0664 but $actual
			false
			;;
		esac
	
Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/.git/
ok 3 - shared=1 does not clear bits preset by umask 022

expecting success of 1301.4 'shared=all': 
	mkdir sub &&
	cd sub &&
	git init --template= --shared=all &&
	test 2 = $(git config core.sharedrepository)

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/.git/
ok 4 - shared=all

expecting success of 1301.5 'update-server-info honors core.sharedRepository': 
	: > a1 &&
	git add a1 &&
	test_tick &&
	git commit -m a1 &&
	mkdir .git/info &&
	umask 0277 &&
	git update-server-info &&
	actual="$(ls -l .git/info/refs)" &&
	case "$actual" in
	-r--r--r--*)
		: happy
		;;
	*)
		echo Oops, .git/info/refs is not 0444
		false
		;;
	esac

[main (root-commit) a2bd363] a1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a1
ok 5 - update-server-info honors core.sharedRepository

expecting success of 1301.6 'shared = 0660 (r--r-----) ro': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$y"

	
ok 6 - shared = 0660 (r--r-----) ro

expecting success of 1301.7 'shared = 0660 (rw-rw----) rw': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$x"

	
ok 7 - shared = 0660 (rw-rw----) rw

expecting success of 1301.8 'shared = 0640 (r--r-----) ro': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$y"

	
ok 8 - shared = 0640 (r--r-----) ro

expecting success of 1301.9 'shared = 0640 (rw-r-----) rw': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$x"

	
ok 9 - shared = 0640 (rw-r-----) rw

expecting success of 1301.10 'shared = 0600 (r--------) ro': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$y"

	
ok 10 - shared = 0600 (r--------) ro

expecting success of 1301.11 'shared = 0600 (rw-------) rw': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$x"

	
ok 11 - shared = 0600 (rw-------) rw

expecting success of 1301.12 'shared = 0666 (r--r--r--) ro': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$y"

	
ok 12 - shared = 0666 (r--r--r--) ro

expecting success of 1301.13 'shared = 0666 (rw-rw-rw-) rw': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$x"

	
ok 13 - shared = 0666 (rw-rw-rw-) rw

expecting success of 1301.14 'shared = 0664 (r--r--r--) ro': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$y"

	
ok 14 - shared = 0664 (r--r--r--) ro

expecting success of 1301.15 'shared = 0664 (rw-rw-r--) rw': 

		rm -f .git/info/refs &&
		git update-server-info &&
		actual="$(test_modebits .git/info/refs)" &&
		verbose test "x$actual" = "x-$x"

	
ok 15 - shared = 0664 (rw-rw-r--) rw

expecting success of 1301.16 'info/refs respects umask in unshared repo': 
	rm -f .git/info/refs &&
	test_unconfig core.sharedrepository &&
	umask 002 &&
	git update-server-info &&
	echo "-rw-rw-r--" >expect &&
	test_modebits .git/info/refs >actual &&
	test_cmp expect actual

ok 16 - info/refs respects umask in unshared repo

expecting success of 1301.17 'git reflog expire honors core.sharedRepository': 
	umask 077 &&
	git config core.sharedRepository group &&
	git reflog expire --all &&
	actual="$(ls -l .git/logs/refs/heads/main)" &&
	case "$actual" in
	-rw-rw-*)
		: happy
		;;
	*)
		echo Ooops, .git/logs/refs/heads/main is not 066x [$actual]
		false
		;;
	esac

ok 17 - git reflog expire honors core.sharedRepository

expecting success of 1301.18 'forced modes': 
	mkdir -p templates/hooks &&
	echo update-server-info >templates/hooks/post-update &&
	chmod +x templates/hooks/post-update &&
	echo : >random-file &&
	mkdir new &&
	(
		cd new &&
		umask 002 &&
		git init --shared=0660 --template=templates &&
		>frotz &&
		git add frotz &&
		git commit -a -m initial &&
		git repack
	) &&
	# List repository files meant to be protected; note that
	# COMMIT_EDITMSG does not matter---0mode is not about a
	# repository with a work tree.
	find new/.git -type f -name COMMIT_EDITMSG -prune -o -print |
	xargs ls -ld >actual &&

	# Everything must be unaccessible to others
	test -z "$(sed -e "/^.......---/d" actual)" &&

	# All directories must have either 2770 or 770
	test -z "$(sed -n -e "/^drwxrw[sx]---/d" -e "/^d/p" actual)" &&

	# post-update hook must be 0770
	test -z "$(sed -n -e "/post-update/{
		/^-rwxrwx---/d
		p
	}" actual)" &&

	# All files inside objects must be accessible by us
	test -z "$(sed -n -e "/objects\//{
		/^d/d
		/^-r.-r.----/d
		p
	}" actual)"

warning: templates not found in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/new/templates
Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/new/.git/
[main (root-commit) e4c5dc6] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 frotz
ok 18 - forced modes

expecting success of 1301.19 'remote init does not use config from cwd': 
	git config core.sharedrepository 0666 &&
	umask 0022 &&
	git init --bare child.git &&
	echo "-rw-r--r--" >expect &&
	test_modebits child.git/config >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/child.git/
ok 19 - remote init does not use config from cwd

expecting success of 1301.20 're-init respects core.sharedrepository (local)': 
	git config core.sharedrepository 0666 &&
	umask 0022 &&
	echo whatever >templates/foo &&
	git init --template=templates &&
	echo "-rw-rw-rw-" >expect &&
	test_modebits .git/foo >actual &&
	test_cmp expect actual

Reinitialized existing shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/.git/
ok 20 - re-init respects core.sharedrepository (local)

expecting success of 1301.21 're-init respects core.sharedrepository (remote)': 
	rm -rf child.git &&
	umask 0022 &&
	git init --bare --shared=0666 child.git &&
	test_path_is_missing child.git/foo &&
	git init --bare --template=templates child.git &&
	echo "-rw-rw-rw-" >expect &&
	test_modebits child.git/foo >actual &&
	test_cmp expect actual

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/child.git/
Reinitialized existing shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/child.git/
ok 21 - re-init respects core.sharedrepository (remote)

expecting success of 1301.22 'template can set core.sharedrepository': 
	rm -rf child.git &&
	umask 0022 &&
	git config core.sharedrepository 0666 &&
	cp .git/config templates/config &&
	git init --bare --template=templates child.git &&
	echo "-rw-rw-rw-" >expect &&
	test_modebits child.git/HEAD >actual &&
	test_cmp expect actual

Initialized empty shared Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1301-shared-repo/sub/child.git/
ok 22 - template can set core.sharedrepository

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1302-repo-version.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1302-repo-version/.git/
expecting success of 1302.1 'setup': 
	test_oid_cache <<-\EOF &&
	version sha1:0
	version sha256:1
	EOF
	cat >test.patch <<-\EOF &&
	diff --git a/test.txt b/test.txt
	new file mode 100644
	--- /dev/null
	+++ b/test.txt
	@@ -0,0 +1 @@
	+123
	EOF

	test_create_repo "test" &&
	test_create_repo "test2" &&
	git config --file=test2/.git/config core.repositoryformatversion 99

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1302-repo-version/test/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1302-repo-version/test2/.git/
ok 1 - setup

expecting success of 1302.2 'gitdir selection on normal repos': 
	echo $(test_oid version) >expect &&
	git config core.repositoryformatversion >actual &&
	git -C test config core.repositoryformatversion >actual2 &&
	test_cmp expect actual &&
	test_cmp expect actual2

ok 2 - gitdir selection on normal repos

expecting success of 1302.3 'gitdir selection on unsupported repo': 
	# Make sure it would stop at test2, not trash
	test_expect_code 1 git -C test2 config core.repositoryformatversion >actual

warning: Expected git repo version <= 1, found 99
ok 3 - gitdir selection on unsupported repo

expecting success of 1302.4 'gitdir not required mode': 
	git apply --stat test.patch &&
	git -C test apply --stat ../test.patch &&
	git -C test2 apply --stat ../test.patch

 test.txt |    1 +
 1 file changed, 1 insertion(+)
 test.txt |    1 +
 1 file changed, 1 insertion(+)
warning: Expected git repo version <= 1, found 99
warning: ignoring git dir '.git': Expected git repo version <= 1, found 99
 test.txt |    1 +
 1 file changed, 1 insertion(+)
ok 4 - gitdir not required mode

expecting success of 1302.5 'gitdir required mode': 
	git apply --check --index test.patch &&
	git -C test apply --check --index ../test.patch &&
	test_must_fail git -C test2 apply --check --index ../test.patch

warning: Expected git repo version <= 1, found 99
warning: ignoring git dir '.git': Expected git repo version <= 1, found 99
error: '--index' outside a repository
ok 5 - gitdir required mode

expecting success of 1302.6 'allow version=0 ': 
		mkconfig 0  >.git/config &&
		check_allow
	
ok 6 - allow version=0 

expecting success of 1302.7 'allow version=1 ': 
		mkconfig 1  >.git/config &&
		check_allow
	
ok 7 - allow version=1 

expecting success of 1302.8 'allow version=1 noop': 
		mkconfig 1 noop >.git/config &&
		check_allow
	
ok 8 - allow version=1 noop

expecting success of 1302.9 'abort version=1 no-such-extension': 
		mkconfig 1 no-such-extension >.git/config &&
		check_abort
	
fatal: unknown repository extension found:
	no-such-extension
ok 9 - abort version=1 no-such-extension

expecting success of 1302.10 'allow version=0 no-such-extension': 
		mkconfig 0 no-such-extension >.git/config &&
		check_allow
	
ok 10 - allow version=0 no-such-extension

expecting success of 1302.11 'allow version=0 noop': 
		mkconfig 0 noop >.git/config &&
		check_allow
	
ok 11 - allow version=0 noop

expecting success of 1302.12 'abort version=0 noop-v1': 
		mkconfig 0 noop-v1 >.git/config &&
		check_abort
	
fatal: repo version is 0, but v1-only extension found:
	noop-v1
ok 12 - abort version=0 noop-v1

expecting success of 1302.13 'allow version=1 noop-v1': 
		mkconfig 1 noop-v1 >.git/config &&
		check_allow
	
ok 13 - allow version=1 noop-v1

expecting success of 1302.14 'precious-objects allowed': 
	mkconfig 1 preciousObjects >.git/config &&
	check_allow

ok 14 - precious-objects allowed

expecting success of 1302.15 'precious-objects blocks destructive repack': 
	test_must_fail git repack -ad

fatal: cannot delete packs in a precious-objects repo
ok 15 - precious-objects blocks destructive repack

expecting success of 1302.16 'other repacks are OK': 
	test_commit foo &&
	git repack

[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 16 - other repacks are OK

expecting success of 1302.17 'precious-objects blocks prune': 
	test_must_fail git prune

fatal: cannot prune in a precious-objects repo
ok 17 - precious-objects blocks prune

expecting success of 1302.18 'gc runs without complaint': 
	git gc

ok 18 - gc runs without complaint

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1303-wacky-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1303-wacky-config/.git/
expecting success of 1303.1 'modify same key': 
	setup &&
	git config section.key bar &&
	check section.key bar

ok 1 - modify same key

expecting success of 1303.2 'add key in same section': 
	setup &&
	git config section.other bar &&
	check section.key foo &&
	check section.other bar

ok 2 - add key in same section

expecting success of 1303.3 'add key in different section': 
	setup &&
	git config section2.key bar &&
	check section.key foo &&
	check section2.key bar

ok 3 - add key in different section

expecting success of 1303.4 'make sure git config escapes section names properly': 
	git config "$SECTION" bar &&
	check "$SECTION" bar

ok 4 - make sure git config escapes section names properly

expecting success of 1303.5 'do not crash on special long config line': 
	setup &&
	git config section.key "$LONG_VALUE" &&
	check section.key "$LONG_VALUE"

ok 5 - do not crash on special long config line

expecting success of 1303.6 'get many entries': 
	setup_many &&
	git config --get-all section.key >actual &&
	test_line_count = 3126 actual

ok 6 - get many entries

expecting success of 1303.7 'get many entries by regex': 
	setup_many &&
	git config --get-regexp "sec.*ke." >actual &&
	test_line_count = 3126 actual

ok 7 - get many entries by regex

expecting success of 1303.8 'add and replace one of many entries': 
	setup_many &&
	git config --add section.key bar &&
	check_regex section.key "b.*r" bar &&
	git config section.key beer "b.*r" &&
	check_regex section.key "b.*r" beer

ok 8 - add and replace one of many entries

expecting success of 1303.9 'replace many entries': 
	setup_many &&
	git config --replace-all section.key bar &&
	check section.key bar

ok 9 - replace many entries

expecting success of 1303.10 'unset many entries': 
	setup_many &&
	git config --unset-all section.key &&
	test_must_fail git config section.key

ok 10 - unset many entries

expecting success of 1303.11 '--add appends new value after existing empty value': 
	cat >expect <<-\EOF &&


	fool
	roll
	EOF
	cp .git/config .git/config.old &&
	test_when_finished "mv .git/config.old .git/config" &&
	cat >.git/config <<-\EOF &&
	[foo]
		baz
		baz =
		baz = fool
	EOF
	git config --add foo.baz roll &&
	git config --get-all foo.baz >output &&
	test_cmp expect output

ok 11 - --add appends new value after existing empty value

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1304-default-acl.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1304-default-acl/.git/
expecting success of 1304.1 'checking for a working acl setup': 
	if setfacl -m d:m:rwx -m u:root:rwx . &&
	   getfacl . | grep user:root:rwx &&
	   touch should-have-readable-acl &&
	   getfacl should-have-readable-acl | grep -E "mask::?rw-"
	then
		test_set_prereq SETFACL
	fi

t1304-default-acl.sh: 4: eval: setfacl: not found
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
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1305-config-include.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1305-config-include/.git/
expecting success of 1305.1 'include file by absolute path': 
	echo "[test]one = 1" >one &&
	echo "[include]path = \"$(pwd)/one\"" >.gitconfig &&
	echo 1 >expect &&
	git config test.one >actual &&
	test_cmp expect actual

ok 1 - include file by absolute path

expecting success of 1305.2 'include file by relative path': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	echo 1 >expect &&
	git config test.one >actual &&
	test_cmp expect actual

ok 2 - include file by relative path

expecting success of 1305.3 'chained relative paths': 
	mkdir subdir &&
	echo "[test]three = 3" >subdir/three &&
	echo "[include]path = three" >subdir/two &&
	echo "[include]path = subdir/two" >.gitconfig &&
	echo 3 >expect &&
	git config test.three >actual &&
	test_cmp expect actual

ok 3 - chained relative paths

expecting success of 1305.4 'include paths get tilde-expansion': 
	echo "[test]one = 1" >one &&
	echo "[include]path = ~/one" >.gitconfig &&
	echo 1 >expect &&
	git config test.one >actual &&
	test_cmp expect actual

ok 4 - include paths get tilde-expansion

expecting success of 1305.5 'include options can still be examined': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	echo one >expect &&
	git config include.path >actual &&
	test_cmp expect actual

ok 5 - include options can still be examined

expecting success of 1305.6 'listing includes option and expansion': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	cat >expect <<-\EOF &&
	include.path=one
	test.one=1
	EOF
	git config --list >actual.full &&
	grep -v -e ^core -e ^extensions actual.full >actual &&
	test_cmp expect actual

ok 6 - listing includes option and expansion

expecting success of 1305.7 'single file lookup does not expand includes by default': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	test_must_fail git config -f .gitconfig test.one &&
	test_must_fail git config --global test.one &&
	echo 1 >expect &&
	git config --includes -f .gitconfig test.one >actual &&
	test_cmp expect actual

ok 7 - single file lookup does not expand includes by default

expecting success of 1305.8 'single file list does not expand includes by default': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	echo "include.path=one" >expect &&
	git config -f .gitconfig --list >actual &&
	test_cmp expect actual

ok 8 - single file list does not expand includes by default

expecting success of 1305.9 'writing config file does not expand includes': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	git config test.two 2 &&
	echo 2 >expect &&
	git config --no-includes test.two >actual &&
	test_cmp expect actual &&
	test_must_fail git config --no-includes test.one

ok 9 - writing config file does not expand includes

expecting success of 1305.10 'config modification does not affect includes': 
	echo "[test]one = 1" >one &&
	echo "[include]path = one" >.gitconfig &&
	git config test.one 2 &&
	echo 1 >expect &&
	git config -f one test.one >actual &&
	test_cmp expect actual &&
	cat >expect <<-\EOF &&
	1
	2
	EOF
	git config --get-all test.one >actual &&
	test_cmp expect actual

ok 10 - config modification does not affect includes

expecting success of 1305.11 'missing include files are ignored': 
	cat >.gitconfig <<-\EOF &&
	[include]path = non-existent
	[test]value = yes
	EOF
	echo yes >expect &&
	git config test.value >actual &&
	test_cmp expect actual

ok 11 - missing include files are ignored

expecting success of 1305.12 'absolute includes from command line work': 
	echo "[test]one = 1" >one &&
	echo 1 >expect &&
	git -c include.path="$(pwd)/one" config test.one >actual &&
	test_cmp expect actual

ok 12 - absolute includes from command line work

expecting success of 1305.13 'relative includes from command line fail': 
	echo "[test]one = 1" >one &&
	test_must_fail git -c include.path=one config test.one

error: relative config includes must come from files
fatal: unable to parse command-line config
ok 13 - relative includes from command line fail

expecting success of 1305.14 'absolute includes from blobs work': 
	echo "[test]one = 1" >one &&
	echo "[include]path=$(pwd)/one" >blob &&
	blob=$(git hash-object -w blob) &&
	echo 1 >expect &&
	git config --blob=$blob test.one >actual &&
	test_cmp expect actual

ok 14 - absolute includes from blobs work

expecting success of 1305.15 'relative includes from blobs fail': 
	echo "[test]one = 1" >one &&
	echo "[include]path=one" >blob &&
	blob=$(git hash-object -w blob) &&
	test_must_fail git config --blob=$blob test.one

error: relative config includes must come from files
error: bad config line 1 in blob d085876092eb24c144128bcd5db5d26e665f4f8a
ok 15 - relative includes from blobs fail

expecting success of 1305.16 'absolute includes from stdin work': 
	echo "[test]one = 1" >one &&
	echo 1 >expect &&
	echo "[include]path=\"$(pwd)/one\"" |
	git config --file - test.one >actual &&
	test_cmp expect actual

ok 16 - absolute includes from stdin work

expecting success of 1305.17 'relative includes from stdin line fail': 
	echo "[test]one = 1" >one &&
	echo "[include]path=one" |
	test_must_fail git config --file - test.one

error: relative config includes must come from files
fatal: bad config line 1 in standard input
ok 17 - relative includes from stdin line fail

expecting success of 1305.18 'conditional include, both unanchored': 
	git init foo &&
	(
		cd foo &&
		echo "[includeIf \"gitdir:foo/\"]path=bar" >>.git/config &&
		echo "[test]one=1" >.git/bar &&
		echo 1 >expect &&
		git config test.one >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1305-config-include/foo/.git/
ok 18 - conditional include, both unanchored

expecting success of 1305.19 'conditional include, $HOME expansion': 
	(
		cd foo &&
		echo "[includeIf \"gitdir:~/foo/\"]path=bar2" >>.git/config &&
		echo "[test]two=2" >.git/bar2 &&
		echo 2 >expect &&
		git config test.two >actual &&
		test_cmp expect actual
	)

ok 19 - conditional include, $HOME expansion

expecting success of 1305.20 'conditional include, full pattern': 
	(
		cd foo &&
		echo "[includeIf \"gitdir:**/foo/**\"]path=bar3" >>.git/config &&
		echo "[test]three=3" >.git/bar3 &&
		echo 3 >expect &&
		git config test.three >actual &&
		test_cmp expect actual
	)

ok 20 - conditional include, full pattern

expecting success of 1305.21 'conditional include, relative path': 
	echo "[includeIf \"gitdir:./foo/.git\"]path=bar4" >>.gitconfig &&
	echo "[test]four=4" >bar4 &&
	(
		cd foo &&
		echo 4 >expect &&
		git config test.four >actual &&
		test_cmp expect actual
	)

ok 21 - conditional include, relative path

expecting success of 1305.22 'conditional include, both unanchored, icase': 
	(
		cd foo &&
		echo "[includeIf \"gitdir/i:FOO/\"]path=bar5" >>.git/config &&
		echo "[test]five=5" >.git/bar5 &&
		echo 5 >expect &&
		git config test.five >actual &&
		test_cmp expect actual
	)

ok 22 - conditional include, both unanchored, icase

expecting success of 1305.23 'conditional include, early config reading': 
	(
		cd foo &&
		echo "[includeIf \"gitdir:foo/\"]path=bar6" >>.git/config &&
		echo "[test]six=6" >.git/bar6 &&
		echo 6 >expect &&
		test-tool config read_early_config test.six >actual &&
		test_cmp expect actual
	)

ok 23 - conditional include, early config reading

expecting success of 1305.24 'conditional include with /**/': 
	REPO=foo/bar/repo &&
	git init $REPO &&
	cat >>$REPO/.git/config <<-\EOF &&
	[includeIf "gitdir:**/foo/**/bar/**"]
	path=bar7
	EOF
	echo "[test]seven=7" >$REPO/.git/bar7 &&
	echo 7 >expect &&
	git -C $REPO config test.seven >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1305-config-include/foo/bar/repo/.git/
ok 24 - conditional include with /**/

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1305.25 'conditional include, set up symlinked $HOME': 
	mkdir real-home &&
	ln -s real-home home &&
	(
		HOME="$TRASH_DIRECTORY/home" &&
		export HOME &&
		cd "$HOME" &&

		git init foo &&
		cd foo &&
		mkdir sub
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1305-config-include/real-home/foo/.git/
ok 25 - conditional include, set up symlinked $HOME

expecting success of 1305.26 'conditional include, $HOME expansion with symlinks': 
	(
		HOME="$TRASH_DIRECTORY/home" &&
		export HOME &&
		cd "$HOME"/foo &&

		echo "[includeIf \"gitdir:~/foo/\"]path=bar2" >>.git/config &&
		echo "[test]two=2" >.git/bar2 &&
		echo 2 >expect &&
		force_setup_explicit_git_dir &&
		git -C sub config test.two >actual &&
		test_cmp expect actual
	)

ok 26 - conditional include, $HOME expansion with symlinks

expecting success of 1305.27 'conditional include, relative path with symlinks': 
	echo "[includeIf \"gitdir:./foo/.git\"]path=bar4" >home/.gitconfig &&
	echo "[test]four=4" >home/bar4 &&
	(
		HOME="$TRASH_DIRECTORY/home" &&
		export HOME &&
		cd "$HOME"/foo &&

		echo 4 >expect &&
		force_setup_explicit_git_dir &&
		git -C sub config test.four >actual &&
		test_cmp expect actual
	)

ok 27 - conditional include, relative path with symlinks

expecting success of 1305.28 'conditional include, gitdir matching symlink': 
	ln -s foo bar &&
	(
		cd bar &&
		echo "[includeIf \"gitdir:bar/\"]path=bar7" >>.git/config &&
		echo "[test]seven=7" >.git/bar7 &&
		echo 7 >expect &&
		git config test.seven >actual &&
		test_cmp expect actual
	)

ok 28 - conditional include, gitdir matching symlink

expecting success of 1305.29 'conditional include, gitdir matching symlink, icase': 
	(
		cd bar &&
		echo "[includeIf \"gitdir/i:BAR/\"]path=bar8" >>.git/config &&
		echo "[test]eight=8" >.git/bar8 &&
		echo 8 >expect &&
		git config test.eight >actual &&
		test_cmp expect actual
	)

ok 29 - conditional include, gitdir matching symlink, icase

expecting success of 1305.30 'conditional include, onbranch': 
	echo "[includeIf \"onbranch:foo-branch\"]path=bar9" >>.git/config &&
	echo "[test]nine=9" >.git/bar9 &&
	git checkout -b main &&
	test_must_fail git config test.nine &&
	git checkout -b foo-branch &&
	echo 9 >expect &&
	git config test.nine >actual &&
	test_cmp expect actual

Switched to a new branch 'main'
Switched to a new branch 'foo-branch'
ok 30 - conditional include, onbranch

expecting success of 1305.31 'conditional include, onbranch, wildcard': 
	echo "[includeIf \"onbranch:?oo-*/**\"]path=bar10" >>.git/config &&
	echo "[test]ten=10" >.git/bar10 &&
	git checkout -b not-foo-branch/a &&
	test_must_fail git config test.ten &&

	echo 10 >expect &&
	git checkout -b foo-branch/a/b/c &&
	git config test.ten >actual &&
	test_cmp expect actual &&

	git checkout -b moo-bar/a &&
	git config test.ten >actual &&
	test_cmp expect actual

Switched to a new branch 'not-foo-branch/a'
Switched to a new branch 'foo-branch/a/b/c'
Switched to a new branch 'moo-bar/a'
ok 31 - conditional include, onbranch, wildcard

expecting success of 1305.32 'conditional include, onbranch, implicit /** for /': 
	echo "[includeIf \"onbranch:foo-dir/\"]path=bar11" >>.git/config &&
	echo "[test]eleven=11" >.git/bar11 &&
	git checkout -b not-foo-dir/a &&
	test_must_fail git config test.eleven &&

	echo 11 >expect &&
	git checkout -b foo-dir/a/b/c &&
	git config test.eleven >actual &&
	test_cmp expect actual

Switched to a new branch 'not-foo-dir/a'
Switched to a new branch 'foo-dir/a/b/c'
ok 32 - conditional include, onbranch, implicit /** for /

expecting success of 1305.33 'include cycles are detected': 
	git init --bare cycle &&
	git -C cycle config include.path cycle &&
	git config -f cycle/cycle include.path config &&
	test_must_fail git -C cycle config --get-all test.value 2>stderr &&
	grep "exceeded maximum include depth" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1305-config-include/cycle/
fatal: exceeded maximum include depth (10) while including
ok 33 - include cycles are detected

# passed all 33 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1306-xdg-files.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1306-xdg-files/.git/
expecting success of 1306.1 'read config: xdg file exists and ~/.gitconfig doesn't': 
	mkdir -p .config/git &&
	echo "[alias]" >.config/git/config &&
	echo "	myalias = !echo in_config" >>.config/git/config &&
	echo in_config >expected &&
	git myalias >actual &&
	test_cmp expected actual

ok 1 - read config: xdg file exists and ~/.gitconfig doesn't

expecting success of 1306.2 'read config: xdg file exists and ~/.gitconfig exists': 
	>.gitconfig &&
	echo "[alias]" >.gitconfig &&
	echo "	myalias = !echo in_gitconfig" >>.gitconfig &&
	echo in_gitconfig >expected &&
	git myalias >actual &&
	test_cmp expected actual

ok 2 - read config: xdg file exists and ~/.gitconfig exists

expecting success of 1306.3 'read with --get: xdg file exists and ~/.gitconfig doesn't': 
	rm .gitconfig &&
	echo "[user]" >.config/git/config &&
	echo "	name = read_config" >>.config/git/config &&
	echo read_config >expected &&
	git config --get user.name >actual &&
	test_cmp expected actual

ok 3 - read with --get: xdg file exists and ~/.gitconfig doesn't

expecting success of 1306.4 '"$XDG_CONFIG_HOME overrides $HOME/.config/git': 
	mkdir -p "$HOME"/xdg/git &&
	echo "[user]name = in_xdg" >"$HOME"/xdg/git/config &&
	echo in_xdg >expected &&
	XDG_CONFIG_HOME="$HOME"/xdg git config --get-all user.name >actual &&
	test_cmp expected actual

ok 4 - "$XDG_CONFIG_HOME overrides $HOME/.config/git

expecting success of 1306.5 'read with --get: xdg file exists and ~/.gitconfig exists': 
	>.gitconfig &&
	echo "[user]" >.gitconfig &&
	echo "	name = read_gitconfig" >>.gitconfig &&
	echo read_gitconfig >expected &&
	git config --get user.name >actual &&
	test_cmp expected actual

ok 5 - read with --get: xdg file exists and ~/.gitconfig exists

expecting success of 1306.6 'read with --list: xdg file exists and ~/.gitconfig doesn't': 
	rm .gitconfig &&
	echo user.name=read_config >expected &&
	git config --global --list >actual &&
	test_cmp expected actual

ok 6 - read with --list: xdg file exists and ~/.gitconfig doesn't

expecting success of 1306.7 'read with --list: xdg file exists and ~/.gitconfig exists': 
	>.gitconfig &&
	echo "[user]" >.gitconfig &&
	echo "	name = read_gitconfig" >>.gitconfig &&
	echo user.name=read_gitconfig >expected &&
	git config --global --list >actual &&
	test_cmp expected actual

ok 7 - read with --list: xdg file exists and ~/.gitconfig exists

expecting success of 1306.8 'Setup': 
	git init git &&
	cd git &&
	echo foo >to_be_excluded

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1306-xdg-files/git/.git/
ok 8 - Setup

expecting success of 1306.9 'Exclusion of a file in the XDG ignore file': 
	mkdir -p "$HOME"/.config/git/ &&
	echo to_be_excluded >"$HOME"/.config/git/ignore &&
	test_must_fail git add to_be_excluded

The following paths are ignored by one of your .gitignore files:
to_be_excluded
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 9 - Exclusion of a file in the XDG ignore file

expecting success of 1306.10 '$XDG_CONFIG_HOME overrides $HOME/.config/git/ignore': 
	mkdir -p "$HOME"/xdg/git &&
	echo content >excluded_by_xdg_only &&
	echo excluded_by_xdg_only >"$HOME"/xdg/git/ignore &&
	test_when_finished "git read-tree --empty" &&
	(XDG_CONFIG_HOME="$HOME/xdg" &&
	 export XDG_CONFIG_HOME &&
	 git add to_be_excluded &&
	 test_must_fail git add excluded_by_xdg_only
	)

The following paths are ignored by one of your .gitignore files:
excluded_by_xdg_only
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 10 - $XDG_CONFIG_HOME overrides $HOME/.config/git/ignore

expecting success of 1306.11 'Exclusion in both XDG and local ignore files': 
	echo to_be_excluded >.gitignore &&
	test_must_fail git add to_be_excluded

The following paths are ignored by one of your .gitignore files:
to_be_excluded
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 11 - Exclusion in both XDG and local ignore files

expecting success of 1306.12 'Exclusion in a non-XDG global ignore file': 
	rm .gitignore &&
	echo >"$HOME"/.config/git/ignore &&
	echo to_be_excluded >"$HOME"/my_gitignore &&
	git config core.excludesfile "$HOME"/my_gitignore &&
	test_must_fail git add to_be_excluded

The following paths are ignored by one of your .gitignore files:
to_be_excluded
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 12 - Exclusion in a non-XDG global ignore file

expecting success of 1306.13 'Checking XDG ignore file when HOME is unset': 
	(sane_unset HOME &&
	 git config --unset core.excludesfile &&
	 git ls-files --exclude-standard --ignored --others >actual) &&
	test_must_be_empty actual

ok 13 - Checking XDG ignore file when HOME is unset

expecting success of 1306.14 'Checking attributes in the XDG attributes file': 
	echo foo >f &&
	git check-attr -a f >actual &&
	test_line_count -eq 0 actual &&
	echo "f attr_f" >"$HOME"/.config/git/attributes &&
	echo "f: attr_f: set" >expected &&
	git check-attr -a f >actual &&
	test_cmp expected actual

ok 14 - Checking attributes in the XDG attributes file

expecting success of 1306.15 'Checking XDG attributes when HOME is unset': 
	(sane_unset HOME &&
	 git check-attr -a f >actual) &&
	test_must_be_empty actual

ok 15 - Checking XDG attributes when HOME is unset

expecting success of 1306.16 '$XDG_CONFIG_HOME overrides $HOME/.config/git/attributes': 
	mkdir -p "$HOME"/xdg/git &&
	echo "f attr_f=xdg" >"$HOME"/xdg/git/attributes &&
	echo "f: attr_f: xdg" >expected &&
	XDG_CONFIG_HOME="$HOME/xdg" git check-attr -a f >actual &&
	test_cmp expected actual

ok 16 - $XDG_CONFIG_HOME overrides $HOME/.config/git/attributes

expecting success of 1306.17 'Checking attributes in both XDG and local attributes files': 
	echo "f -attr_f" >.gitattributes &&
	echo "f: attr_f: unset" >expected &&
	git check-attr -a f >actual &&
	test_cmp expected actual

ok 17 - Checking attributes in both XDG and local attributes files

expecting success of 1306.18 'Checking attributes in a non-XDG global attributes file': 
	rm -f .gitattributes &&
	echo "f attr_f=test" >"$HOME"/my_gitattributes &&
	git config core.attributesfile "$HOME"/my_gitattributes &&
	echo "f: attr_f: test" >expected &&
	git check-attr -a f >actual &&
	test_cmp expected actual

ok 18 - Checking attributes in a non-XDG global attributes file

expecting success of 1306.19 'write: xdg file exists and ~/.gitconfig doesn't': 
	mkdir -p "$HOME"/.config/git &&
	>"$HOME"/.config/git/config &&
	rm -f "$HOME"/.gitconfig &&
	git config --global user.name "write_config" &&
	echo "[user]" >expected &&
	echo "	name = write_config" >>expected &&
	test_cmp expected "$HOME"/.config/git/config

ok 19 - write: xdg file exists and ~/.gitconfig doesn't

expecting success of 1306.20 'write: xdg file exists and ~/.gitconfig exists': 
	>"$HOME"/.gitconfig &&
	git config --global user.name "write_gitconfig" &&
	echo "[user]" >expected &&
	echo "	name = write_gitconfig" >>expected &&
	test_cmp expected "$HOME"/.gitconfig

ok 20 - write: xdg file exists and ~/.gitconfig exists

expecting success of 1306.21 'write: ~/.config/git/ exists and config file doesn't': 
	rm -f "$HOME"/.gitconfig &&
	rm -f "$HOME"/.config/git/config &&
	git config --global user.name "write_gitconfig" &&
	echo "[user]" >expected &&
	echo "	name = write_gitconfig" >>expected &&
	test_cmp expected "$HOME"/.gitconfig

ok 21 - write: ~/.config/git/ exists and config file doesn't

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1307-config-blob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1307-config-blob/.git/
expecting success of 1307.1 'create config blob': 
	cat >config <<-\EOF &&
	[some]
		value = 1
	EOF
	git add config &&
	git commit -m foo

[master (root-commit) 5571afa] foo
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 config
ok 1 - create config blob

expecting success of 1307.2 'list config blob contents': 
	echo some.value=1 >expect &&
	git config --blob=HEAD:config --list >actual &&
	test_cmp expect actual

ok 2 - list config blob contents

expecting success of 1307.3 'fetch value from blob': 
	echo true >expect &&
	git config --blob=HEAD:config --bool some.value >actual &&
	test_cmp expect actual

ok 3 - fetch value from blob

expecting success of 1307.4 'reading non-existing value from blob is an error': 
	test_must_fail git config --blob=HEAD:config non.existing

ok 4 - reading non-existing value from blob is an error

expecting success of 1307.5 'reading from blob and file is an error': 
	test_must_fail git config --blob=HEAD:config --system --list

error: only one config file at a time
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    --worktree            use per-worktree config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-pattern]
    --get-all             get all values: key [value-pattern]
    --get-regexp          get values for regexp: name-regex [value-pattern]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value-pattern]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-pattern]
    --unset-all           remove all matches: name [value-pattern]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    --fixed-value         use string equality when comparing values to 'value-pattern'
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    -t, --type <type>     value is given this type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --bool-or-str         value is --bool or string
    --path                value is a path (file or directory name)
    --expiry-date         value is an expiry date

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)
    --show-scope          show scope of config (worktree, local, global, system, command)
    --default <value>     with --get, use default value when missing entry

ok 5 - reading from blob and file is an error

expecting success of 1307.6 'reading from missing ref is an error': 
	test_must_fail git config --blob=HEAD:doesnotexist --list

error: unable to resolve config blob 'HEAD:doesnotexist'
fatal: error processing config file(s)
ok 6 - reading from missing ref is an error

expecting success of 1307.7 'reading from non-blob is an error': 
	test_must_fail git config --blob=HEAD --list

error: reference 'HEAD' does not point to a blob
fatal: error processing config file(s)
ok 7 - reading from non-blob is an error

expecting success of 1307.8 'setting a value in a blob is an error': 
	test_must_fail git config --blob=HEAD:config some.value foo

fatal: writing config blobs is not supported
ok 8 - setting a value in a blob is an error

expecting success of 1307.9 'deleting a value in a blob is an error': 
	test_must_fail git config --blob=HEAD:config --unset some.value

fatal: writing config blobs is not supported
ok 9 - deleting a value in a blob is an error

expecting success of 1307.10 'editing a blob is an error': 
	test_must_fail git config --blob=HEAD:config --edit

fatal: editing blobs is not supported
ok 10 - editing a blob is an error

expecting success of 1307.11 'parse errors in blobs are properly attributed': 
	cat >config <<-\EOF &&
	[some]
		value = "
	EOF
	git add config &&
	git commit -m broken &&

	test_must_fail git config --blob=HEAD:config some.value 2>err &&
	test_i18ngrep "HEAD:config" err

[master 91b4611] broken
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: bad config line 2 in blob HEAD:config
ok 11 - parse errors in blobs are properly attributed

expecting success of 1307.12 'can parse blob ending with CR': 
	test_commit --printf CR config "[some]key = value\\r" &&
	echo value >expect &&
	git config --blob=HEAD:config some.key >actual &&
	test_cmp expect actual

[master f02e06a] CR
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
ok 12 - can parse blob ending with CR

expecting success of 1307.13 'config --blob outside of a repository is an error': 
	nongit test_must_fail git config --blob=foo --list

fatal: --blob can only be used inside a git repository
ok 13 - config --blob outside of a repository is an error

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1308-config-set.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1308-config-set/.git/
expecting success of 1308.1 'setup default config': 
	cat >.git/config <<-\EOF
	[case]
		penguin = very blue
		Movie = BadPhysics
		UPPERCASE = true
		MixedCase = true
		my =
		foo
		baz = sam
	[Cores]
		WhatEver = Second
		baz = bar
	[cores]
		baz = bat
	[CORES]
		baz = ball
	[my "Foo bAr"]
		hi = mixed-case
	[my "FOO BAR"]
		hi = upper-case
	[my "foo bar"]
		hi = lower-case
	[case]
		baz = bat
		baz = hask
	[lamb]
		chop = 65
		head = none
	[goat]
		legs = 4
		head = true
		skin = false
		nose = 1
		horns
	EOF

ok 1 - setup default config

expecting success of 1308.2 'get value for a simple key': 
	check_config get_value case.penguin "very blue"

ok 2 - get value for a simple key

expecting success of 1308.3 'get value for a key with value as an empty string': 
	check_config get_value case.my ""

ok 3 - get value for a key with value as an empty string

expecting success of 1308.4 'get value for a key with value as NULL': 
	check_config get_value case.foo "(NULL)"

ok 4 - get value for a key with value as NULL

expecting success of 1308.5 'upper case key': 
	check_config get_value case.UPPERCASE "true" &&
	check_config get_value case.uppercase "true"

ok 5 - upper case key

expecting success of 1308.6 'mixed case key': 
	check_config get_value case.MixedCase "true" &&
	check_config get_value case.MIXEDCASE "true" &&
	check_config get_value case.mixedcase "true"

ok 6 - mixed case key

expecting success of 1308.7 'key and value with mixed case': 
	check_config get_value case.Movie "BadPhysics"

ok 7 - key and value with mixed case

expecting success of 1308.8 'key with case sensitive subsection': 
	check_config get_value "my.Foo bAr.hi" "mixed-case" &&
	check_config get_value "my.FOO BAR.hi" "upper-case" &&
	check_config get_value "my.foo bar.hi" "lower-case"

ok 8 - key with case sensitive subsection

expecting success of 1308.9 'key with case insensitive section header': 
	check_config get_value cores.baz "ball" &&
	check_config get_value Cores.baz "ball" &&
	check_config get_value CORES.baz "ball" &&
	check_config get_value coreS.baz "ball"

ok 9 - key with case insensitive section header

expecting success of 1308.10 'key with case insensitive section header & variable': 
	check_config get_value CORES.BAZ "ball" &&
	check_config get_value cores.baz "ball" &&
	check_config get_value cores.BaZ "ball" &&
	check_config get_value cOreS.bAz "ball"

ok 10 - key with case insensitive section header & variable

expecting success of 1308.11 'find value with misspelled key': 
	check_config expect_code 1 get_value "my.fOo Bar.hi" "Value not found for \"my.fOo Bar.hi\""

ok 11 - find value with misspelled key

expecting success of 1308.12 'find value with the highest priority': 
	check_config get_value case.baz "hask"

ok 12 - find value with the highest priority

expecting success of 1308.13 'find integer value for a key': 
	check_config get_int lamb.chop 65

ok 13 - find integer value for a key

expecting success of 1308.14 'find string value for a key': 
	check_config get_string case.baz hask &&
	check_config expect_code 1 get_string case.ba "Value not found for \"case.ba\""

ok 14 - find string value for a key

expecting success of 1308.15 'check line error when NULL string is queried': 
	test_expect_code 128 test-tool config get_string case.foo 2>result &&
	test_i18ngrep "fatal: .*case\.foo.*\.git/config.*line 7" result

fatal: bad config variable 'case.foo' in file '.git/config' at line 7
ok 15 - check line error when NULL string is queried

expecting success of 1308.16 'find integer if value is non parse-able': 
	check_config expect_code 128 get_int lamb.head

fatal: bad numeric config value 'none' for 'lamb.head': invalid unit
ok 16 - find integer if value is non parse-able

expecting success of 1308.17 'find bool value for the entered key': 
	check_config get_bool goat.head 1 &&
	check_config get_bool goat.skin 0 &&
	check_config get_bool goat.nose 1 &&
	check_config get_bool goat.horns 1 &&
	check_config get_bool goat.legs 1

ok 17 - find bool value for the entered key

expecting success of 1308.18 'find multiple values': 
	check_config get_value_multi case.baz sam bat hask

ok 18 - find multiple values

expecting success of 1308.19 'find value from a configset': 
	cat >config2 <<-\EOF &&
	[case]
		baz = lama
	[my]
		new = silk
	[case]
		baz = ball
	EOF
	echo silk >expect &&
	test-tool config configset_get_value my.new config2 .git/config >actual &&
	test_cmp expect actual

ok 19 - find value from a configset

expecting success of 1308.20 'find value with highest priority from a configset': 
	echo hask >expect &&
	test-tool config configset_get_value case.baz config2 .git/config >actual &&
	test_cmp expect actual

ok 20 - find value with highest priority from a configset

expecting success of 1308.21 'find value_list for a key from a configset': 
	cat >expect <<-\EOF &&
	lama
	ball
	sam
	bat
	hask
	EOF
	test-tool config configset_get_value_multi case.baz config2 .git/config >actual &&
	test_cmp expect actual

ok 21 - find value_list for a key from a configset

expecting success of 1308.22 'proper error on non-existent files': 
	echo "Error (-1) reading configuration file non-existent-file." >expect &&
	test_expect_code 2 test-tool config configset_get_value foo.bar non-existent-file 2>actual &&
	test_cmp expect actual

ok 22 - proper error on non-existent files

expecting success of 1308.23 'proper error on directory "files"': 
	echo "Error (-1) reading configuration file a-directory." >expect &&
	mkdir a-directory &&
	test_expect_code 2 test-tool config configset_get_value foo.bar a-directory 2>output &&
	grep "^warning:" output &&
	grep "^Error" output >actual &&
	test_cmp expect actual

warning: unable to access 'a-directory': Is a directory
ok 23 - proper error on directory "files"

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 1308.24 'proper error on non-accessible files': 
	chmod -r .git/config &&
	test_when_finished "chmod +r .git/config" &&
	echo "Error (-1) reading configuration file .git/config." >expect &&
	test_expect_code 2 test-tool config configset_get_value foo.bar .git/config 2>output &&
	grep "^warning:" output &&
	grep "^Error" output >actual &&
	test_cmp expect actual

warning: unable to access '.git/config': Permission denied
warning: unable to access '.git/config': Permission denied
ok 24 - proper error on non-accessible files

expecting success of 1308.25 'proper error on error in default config files': 
	cp .git/config .git/config.old &&
	test_when_finished "mv .git/config.old .git/config" &&
	echo "[" >>.git/config &&
	echo "fatal: bad config line 34 in file .git/config" >expect &&
	test_expect_code 128 test-tool config get_value foo.bar 2>actual &&
	test_cmp expect actual

ok 25 - proper error on error in default config files

expecting success of 1308.26 'proper error on error in custom config files': 
	echo "[" >>syntax-error &&
	echo "fatal: bad config line 1 in file syntax-error" >expect &&
	test_expect_code 128 test-tool config configset_get_value foo.bar syntax-error 2>actual &&
	test_cmp expect actual

ok 26 - proper error on error in custom config files

expecting success of 1308.27 'check line errors for malformed values': 
	mv .git/config .git/config.old &&
	test_when_finished "mv .git/config.old .git/config" &&
	cat >.git/config <<-\EOF &&
	[alias]
		br
	EOF
	test_expect_code 128 git br 2>result &&
	test_i18ngrep "missing value for .alias\.br" result &&
	test_i18ngrep "fatal: .*\.git/config" result &&
	test_i18ngrep "fatal: .*line 2" result

error: missing value for 'alias.br'
fatal: bad config line 2 in file .git/config
fatal: bad config line 2 in file .git/config
ok 27 - check line errors for malformed values

expecting success of 1308.28 'error on modifying repo config without repo': 
	nongit test_must_fail git config a.b c 2>err &&
	test_i18ngrep "not in a git directory" err

fatal: not in a git directory
ok 28 - error on modifying repo config without repo

expecting success of 1308.29 'iteration shows correct origins': 
	printf "[ignore]\n\tthis = please\n[foo]bar = from-repo\n" >.git/config &&
	printf "[foo]\n\tbar = from-home\n" >.gitconfig &&
	if test_have_prereq MINGW
	then
		# Use Windows path (i.e. *not* $HOME)
		HOME_GITCONFIG=$(pwd)/.gitconfig
	else
		# Do not get fooled by symbolic links, i.e. $HOME != $(pwd)
		HOME_GITCONFIG=$HOME/.gitconfig
	fi &&
	cat >expect <<-EOF &&
	key=foo.bar
	value=from-home
	origin=file
	name=$HOME_GITCONFIG
	lno=2
	scope=global

	key=ignore.this
	value=please
	origin=file
	name=.git/config
	lno=2
	scope=local

	key=foo.bar
	value=from-repo
	origin=file
	name=.git/config
	lno=3
	scope=local

	key=foo.bar
	value=from-cmdline
	origin=command line
	name=
	lno=-1
	scope=command
	EOF
	GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config iterate >actual &&
	test_cmp expect actual

ok 29 - iteration shows correct origins

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1309-early-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/.git/
expecting success of 1309.1 'read early config': 
	test_config early.config correct &&
	test-tool config read_early_config early.config >output &&
	test correct = "$(cat output)"

ok 1 - read early config

expecting success of 1309.2 'in a sub-directory': 
	test_config early.config sub &&
	mkdir -p sub &&
	(
		cd sub &&
		test-tool config read_early_config early.config
	) >output &&
	test sub = "$(cat output)"

ok 2 - in a sub-directory

expecting success of 1309.3 'ceiling': 
	test_config early.config ceiling &&
	mkdir -p sub &&
	(
		GIT_CEILING_DIRECTORIES="$PWD" &&
		export GIT_CEILING_DIRECTORIES &&
		cd sub &&
		test-tool config read_early_config early.config
	) >output &&
	test_must_be_empty output

ok 3 - ceiling

expecting success of 1309.4 'ceiling #2': 
	mkdir -p xdg/git &&
	git config -f xdg/git/config early.config xdg &&
	test_config early.config ceiling &&
	mkdir -p sub &&
	(
		XDG_CONFIG_HOME="$PWD"/xdg &&
		GIT_CEILING_DIRECTORIES="$PWD" &&
		export GIT_CEILING_DIRECTORIES XDG_CONFIG_HOME &&
		cd sub &&
		test-tool config read_early_config early.config
	) >output &&
	test xdg = "$(cat output)"

ok 4 - ceiling #2

expecting success of 1309.5 'read config file in right order': 
	echo "[test]source = home" >>.gitconfig &&
	git init foo &&
	(
		cd foo &&
		echo "[test]source = repo" >>.git/config &&
		GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config \
			read_early_config test.source >actual &&
		cat >expected <<-\EOF &&
		home
		repo
		cmdline
		EOF
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/foo/.git/
ok 5 - read config file in right order

expecting success of 1309.6 'ignore .git/ with incompatible repository version': 
	test_with_config "[core]repositoryformatversion = 999999" 2>err &&
	test_i18ngrep "warning:.* Expected git repo version <= [1-9]" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/throwaway/.git/
warning: ignoring git dir '.git': Expected git repo version <= 1, found 999999
ok 6 - ignore .git/ with incompatible repository version

checking known breakage of 1309.7 'ignore .git/ with invalid repository version': 
	test_with_config "[core]repositoryformatversion = invalid"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/throwaway/.git/
fatal: bad numeric config value 'invalid' for 'core.repositoryformatversion' in file .git/config: invalid unit
not ok 7 - ignore .git/ with invalid repository version # TODO known breakage

checking known breakage of 1309.8 'ignore .git/ with invalid config': 
	test_with_config "["

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/throwaway/.git/
fatal: bad config line 1 in file .git/config
not ok 8 - ignore .git/ with invalid config # TODO known breakage

expecting success of 1309.9 'early config and onbranch': 
	echo "[broken" >broken &&
	test_with_config "[includeif \"onbranch:topic\"]path=../broken"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1309-early-config/throwaway/.git/
ok 9 - early config and onbranch

expecting success of 1309.10 'onbranch config outside of git repo': 
	test_config_global includeIf.onbranch:topic.path non-existent &&
	nongit git help

usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env=<name>=<envvar>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
ok 10 - onbranch config outside of git repo

# still have 2 known breakage(s)
# passed all remaining 8 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1310-config-default.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1310-config-default/.git/
expecting success of 1310.1 'uses --default when entry missing': 
	echo quux >expect &&
	git config -f config --default=quux core.foo >actual &&
	test_cmp expect actual

ok 1 - uses --default when entry missing

expecting success of 1310.2 'does not use --default when entry present': 
	echo bar >expect &&
	git -c core.foo=bar config --default=baz core.foo >actual &&
	test_cmp expect actual

ok 2 - does not use --default when entry present

expecting success of 1310.3 'canonicalizes --default with appropriate type': 
	echo true >expect &&
	git config -f config --default=yes --bool core.foo >actual &&
	test_cmp expect actual

ok 3 - canonicalizes --default with appropriate type

expecting success of 1310.4 'dies when --default cannot be parsed': 
	test_must_fail git config -f config --type=expiry-date --default=x --get \
		not.a.section 2>error &&
	test_i18ngrep "failed to format default config value" error

fatal: failed to format default config value: x
ok 4 - dies when --default cannot be parsed

expecting success of 1310.5 'does not allow --default without --get': 
	test_must_fail git config --default=quux --unset a.section >output 2>&1 &&
	test_i18ngrep "\-\-default is only applicable to" output

error: --default is only applicable to --get
ok 5 - does not allow --default without --get

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1350-config-hooks-path.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1350-config-hooks-path/.git/
expecting success of 1350.1 'set up a pre-commit hook in core.hooksPath': 
	>actual &&
	mkdir -p .git/custom-hooks &&
	write_script .git/custom-hooks/pre-commit <<-\EOF &&
	echo CUSTOM >>actual
	EOF
	test_hook --setup pre-commit <<-\EOF
	echo NORMAL >>actual
	EOF

ok 1 - set up a pre-commit hook in core.hooksPath

expecting success of 1350.2 'Check that various forms of specifying core.hooksPath work': 
	test_commit no_custom_hook &&
	git config core.hooksPath .git/custom-hooks &&
	test_commit have_custom_hook &&
	git config core.hooksPath .git/custom-hooks/ &&
	test_commit have_custom_hook_trailing_slash &&
	git config core.hooksPath "$PWD/.git/custom-hooks" &&
	test_commit have_custom_hook_abs_path &&
	git config core.hooksPath "$PWD/.git/custom-hooks/" &&
	test_commit have_custom_hook_abs_path_trailing_slash &&
	cat >expect <<-\EOF &&
	NORMAL
	CUSTOM
	CUSTOM
	CUSTOM
	CUSTOM
	EOF
	test_cmp expect actual

[master (root-commit) 51fec20] no_custom_hook
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 no_custom_hook.t
[master d6f765a] have_custom_hook
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 have_custom_hook.t
[master c8447a6] have_custom_hook_trailing_slash
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 have_custom_hook_trailing_slash.t
[master acc1a92] have_custom_hook_abs_path
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 have_custom_hook_abs_path.t
[master 3a47fb1] have_custom_hook_abs_path_trailing_slash
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 have_custom_hook_abs_path_trailing_slash.t
ok 2 - Check that various forms of specifying core.hooksPath work

expecting success of 1350.3 'git rev-parse --git-path hooks': 
	git config core.hooksPath .git/custom-hooks &&
	git rev-parse --git-path hooks/abc >actual &&
	test .git/custom-hooks/abc = "$(cat actual)"

ok 3 - git rev-parse --git-path hooks

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t0027-auto-crlf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t0027-auto-crlf/.git/
expecting success of 0027.1 'ls-files --eol -o Text/Binary': 
	test_when_finished "rm expect actual TeBi_*" &&
	STRT=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA &&
	STR=$STRT$STRT$STRT$STRT &&
	printf "${STR}BBB\001" >TeBi_127_S &&
	printf "${STR}BBBB\001">TeBi_128_S &&
	printf "${STR}BBB\032" >TeBi_127_E &&
	printf "\032${STR}BBB" >TeBi_E_127 &&
	printf "${STR}BBBB\000">TeBi_128_N &&
	printf "${STR}BBB\012">TeBi_128_L &&
	printf "${STR}BBB\015">TeBi_127_C &&
	printf "${STR}BB\015\012" >TeBi_126_CL &&
	printf "${STR}BB\015\012\015" >TeBi_126_CLC &&
	sort <<-\EOF >expect &&
	i/ w/-text TeBi_127_S
	i/ w/none TeBi_128_S
	i/ w/none TeBi_127_E
	i/ w/-text TeBi_E_127
	i/ w/-text TeBi_128_N
	i/ w/lf TeBi_128_L
	i/ w/-text TeBi_127_C
	i/ w/crlf TeBi_126_CL
	i/ w/-text TeBi_126_CLC
	EOF
	git ls-files --eol -o >tmp &&
	sed -n -e "/TeBi_/{s!attr/[	]*!!g
	s!	! !g
	s!  *! !g
	p
	}" tmp | sort >actual &&
	test_cmp expect actual

ok 1 - ls-files --eol -o Text/Binary

expecting success of 0027.2 'setup main': 
	echo >.gitattributes &&
	git checkout -b main &&
	git add .gitattributes &&
	git commit -m "add .gitattributes" . &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\nLINEONE\nLINETWO\nLINETHREE"     >LF &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\r\nLINEONE\r\nLINETWO\r\nLINETHREE" >CRLF &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\nLINEONE\r\nLINETWO\nLINETHREE"   >CRLF_mix_LF &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\nLINEONE\nLINETWO\rLINETHREE"     >LF_mix_CR &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\r\nLINEONE\r\nLINETWO\rLINETHREE"   >CRLF_mix_CR &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\r\nLINEONEQ\r\nLINETWO\r\nLINETHREE" | q_to_nul >CRLF_nul &&
	printf "\$Id: 0000000000000000000000000000000000000000 \$\nLINEONEQ\nLINETWO\nLINETHREE" | q_to_nul >LF_nul &&
	create_NNO_MIX_files &&
	git -c core.autocrlf=false add NNO_*.txt MIX_*.txt &&
	git commit -m "mixed line endings" &&
	test_tick

Switched to a new branch 'main'
[main (root-commit) 92d411f] add .gitattributes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .gitattributes
[main 28e6523] mixed line endings
 Author: A U Thor <author@example.com>
 360 files changed, 1260 insertions(+)
 create mode 100644 MIX_attr_-text_aeol__false_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol__false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol__false_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol__false_LF.txt
 create mode 100644 MIX_attr_-text_aeol__false_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol__input_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol__input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol__input_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol__input_LF.txt
 create mode 100644 MIX_attr_-text_aeol__input_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol__true_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol__true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol__true_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol__true_LF.txt
 create mode 100644 MIX_attr_-text_aeol__true_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_false_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_false_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_input_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_input_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_true_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_true_LF.txt
 create mode 100644 MIX_attr_-text_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_lf_false_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_lf_false_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_lf_input_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_lf_input_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_-text_aeol_lf_true_CRLF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_-text_aeol_lf_true_LF.txt
 create mode 100644 MIX_attr_-text_aeol_lf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol__false_CRLF.txt
 create mode 100644 MIX_attr__aeol__false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol__false_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol__false_LF.txt
 create mode 100644 MIX_attr__aeol__false_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol__input_CRLF.txt
 create mode 100644 MIX_attr__aeol__input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol__input_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol__input_LF.txt
 create mode 100644 MIX_attr__aeol__input_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol__true_CRLF.txt
 create mode 100644 MIX_attr__aeol__true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol__true_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol__true_LF.txt
 create mode 100644 MIX_attr__aeol__true_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_crlf_false_CRLF.txt
 create mode 100644 MIX_attr__aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_false_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_crlf_false_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_crlf_input_CRLF.txt
 create mode 100644 MIX_attr__aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_input_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_crlf_input_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_crlf_true_CRLF.txt
 create mode 100644 MIX_attr__aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_true_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_crlf_true_LF.txt
 create mode 100644 MIX_attr__aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_lf_false_CRLF.txt
 create mode 100644 MIX_attr__aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_lf_false_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_lf_false_LF.txt
 create mode 100644 MIX_attr__aeol_lf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_lf_input_CRLF.txt
 create mode 100644 MIX_attr__aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_lf_input_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_lf_input_LF.txt
 create mode 100644 MIX_attr__aeol_lf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr__aeol_lf_true_CRLF.txt
 create mode 100644 MIX_attr__aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr__aeol_lf_true_CRLF_nul.txt
 create mode 100644 MIX_attr__aeol_lf_true_LF.txt
 create mode 100644 MIX_attr__aeol_lf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol__false_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol__false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol__false_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol__false_LF.txt
 create mode 100644 MIX_attr_auto_aeol__false_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol__input_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol__input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol__input_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol__input_LF.txt
 create mode 100644 MIX_attr_auto_aeol__input_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol__true_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol__true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol__true_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol__true_LF.txt
 create mode 100644 MIX_attr_auto_aeol__true_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_false_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_false_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_input_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_input_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_true_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_true_LF.txt
 create mode 100644 MIX_attr_auto_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_lf_false_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_lf_false_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_lf_input_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_lf_input_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_auto_aeol_lf_true_CRLF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_auto_aeol_lf_true_LF.txt
 create mode 100644 MIX_attr_auto_aeol_lf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol__false_CRLF.txt
 create mode 100644 MIX_attr_text_aeol__false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol__false_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol__false_LF.txt
 create mode 100644 MIX_attr_text_aeol__false_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol__input_CRLF.txt
 create mode 100644 MIX_attr_text_aeol__input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol__input_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol__input_LF.txt
 create mode 100644 MIX_attr_text_aeol__input_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol__true_CRLF.txt
 create mode 100644 MIX_attr_text_aeol__true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol__true_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol__true_LF.txt
 create mode 100644 MIX_attr_text_aeol__true_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_crlf_false_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_crlf_false_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_crlf_input_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_crlf_input_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_crlf_true_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_crlf_true_LF.txt
 create mode 100644 MIX_attr_text_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_lf_false_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_false_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_lf_false_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_lf_input_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_input_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_lf_input_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 MIX_attr_text_aeol_lf_true_CRLF.txt
 create mode 100644 MIX_attr_text_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_true_CRLF_nul.txt
 create mode 100644 MIX_attr_text_aeol_lf_true_LF.txt
 create mode 100644 MIX_attr_text_aeol_lf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol__false_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol__false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol__false_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol__false_LF.txt
 create mode 100644 NNO_attr_-text_aeol__false_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol__input_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol__input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol__input_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol__input_LF.txt
 create mode 100644 NNO_attr_-text_aeol__input_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol__true_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol__true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol__true_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol__true_LF.txt
 create mode 100644 NNO_attr_-text_aeol__true_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_false_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_false_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_input_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_input_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_true_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_true_LF.txt
 create mode 100644 NNO_attr_-text_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_lf_false_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_lf_false_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_lf_input_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_lf_input_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_-text_aeol_lf_true_CRLF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_-text_aeol_lf_true_LF.txt
 create mode 100644 NNO_attr_-text_aeol_lf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol__false_CRLF.txt
 create mode 100644 NNO_attr__aeol__false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol__false_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol__false_LF.txt
 create mode 100644 NNO_attr__aeol__false_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol__input_CRLF.txt
 create mode 100644 NNO_attr__aeol__input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol__input_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol__input_LF.txt
 create mode 100644 NNO_attr__aeol__input_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol__true_CRLF.txt
 create mode 100644 NNO_attr__aeol__true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol__true_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol__true_LF.txt
 create mode 100644 NNO_attr__aeol__true_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_crlf_false_CRLF.txt
 create mode 100644 NNO_attr__aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_false_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_crlf_false_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_crlf_input_CRLF.txt
 create mode 100644 NNO_attr__aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_input_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_crlf_input_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_crlf_true_CRLF.txt
 create mode 100644 NNO_attr__aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_true_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_crlf_true_LF.txt
 create mode 100644 NNO_attr__aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_lf_false_CRLF.txt
 create mode 100644 NNO_attr__aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_lf_false_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_lf_false_LF.txt
 create mode 100644 NNO_attr__aeol_lf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_lf_input_CRLF.txt
 create mode 100644 NNO_attr__aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_lf_input_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_lf_input_LF.txt
 create mode 100644 NNO_attr__aeol_lf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr__aeol_lf_true_CRLF.txt
 create mode 100644 NNO_attr__aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr__aeol_lf_true_CRLF_nul.txt
 create mode 100644 NNO_attr__aeol_lf_true_LF.txt
 create mode 100644 NNO_attr__aeol_lf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol__false_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol__false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol__false_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol__false_LF.txt
 create mode 100644 NNO_attr_auto_aeol__false_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol__input_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol__input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol__input_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol__input_LF.txt
 create mode 100644 NNO_attr_auto_aeol__input_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol__true_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol__true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol__true_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol__true_LF.txt
 create mode 100644 NNO_attr_auto_aeol__true_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_false_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_false_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_input_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_input_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_true_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_true_LF.txt
 create mode 100644 NNO_attr_auto_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_lf_false_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_lf_false_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_lf_input_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_lf_input_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_auto_aeol_lf_true_CRLF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_auto_aeol_lf_true_LF.txt
 create mode 100644 NNO_attr_auto_aeol_lf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol__false_CRLF.txt
 create mode 100644 NNO_attr_text_aeol__false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol__false_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol__false_LF.txt
 create mode 100644 NNO_attr_text_aeol__false_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol__input_CRLF.txt
 create mode 100644 NNO_attr_text_aeol__input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol__input_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol__input_LF.txt
 create mode 100644 NNO_attr_text_aeol__input_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol__true_CRLF.txt
 create mode 100644 NNO_attr_text_aeol__true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol__true_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol__true_LF.txt
 create mode 100644 NNO_attr_text_aeol__true_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_crlf_false_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_crlf_false_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_crlf_input_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_crlf_input_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_crlf_true_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_crlf_true_LF.txt
 create mode 100644 NNO_attr_text_aeol_crlf_true_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_lf_false_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_lf_false_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_false_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_lf_false_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_false_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_lf_input_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_lf_input_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_input_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_lf_input_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_input_LF_mix_CR.txt
 create mode 100644 NNO_attr_text_aeol_lf_true_CRLF.txt
 create mode 100644 NNO_attr_text_aeol_lf_true_CRLF_mix_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_true_CRLF_nul.txt
 create mode 100644 NNO_attr_text_aeol_lf_true_LF.txt
 create mode 100644 NNO_attr_text_aeol_lf_true_LF_mix_CR.txt
ok 2 - setup main

expecting success of 0027.3 'commit files empty attr': 
	commit_check_warn false ""     ""        ""        ""        ""        "" &&
	commit_check_warn true  ""     "LF_CRLF" ""        "LF_CRLF" ""        "" &&
	commit_check_warn input ""     ""        "CRLF_LF" "CRLF_LF" ""        ""

[main c62ad5d] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr__CRLF.txt
 create mode 100644 crlf_false_attr__CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr__CRLF_nul.txt
 create mode 100644 crlf_false_attr__LF.txt
 create mode 100644 crlf_false_attr__LF_mix_CR.txt
 create mode 100644 crlf_false_attr__LF_nul.txt
[main d70a676] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr__CRLF.txt
 create mode 100644 crlf_true_attr__CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr__CRLF_nul.txt
 create mode 100644 crlf_true_attr__LF.txt
 create mode 100644 crlf_true_attr__LF_mix_CR.txt
 create mode 100644 crlf_true_attr__LF_nul.txt
[main a106c40] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr__CRLF.txt
 create mode 100644 crlf_input_attr__CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr__CRLF_nul.txt
 create mode 100644 crlf_input_attr__LF.txt
 create mode 100644 crlf_input_attr__LF_mix_CR.txt
 create mode 100644 crlf_input_attr__LF_nul.txt
ok 3 - commit files empty attr

expecting success of 0027.4 'commit files attr=auto': 
	commit_check_warn false "auto" "$WILC"   "$WICL"   "$WAMIX"  ""        "" &&
	commit_check_warn true  "auto" "LF_CRLF" ""        "LF_CRLF" ""        "" &&
	commit_check_warn input "auto" ""        "CRLF_LF" "CRLF_LF" ""        ""

[main 68bab31] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr_auto_CRLF.txt
 create mode 100644 crlf_false_attr_auto_CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr_auto_CRLF_nul.txt
 create mode 100644 crlf_false_attr_auto_LF.txt
 create mode 100644 crlf_false_attr_auto_LF_mix_CR.txt
 create mode 100644 crlf_false_attr_auto_LF_nul.txt
[main efc8d5d] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr_auto_CRLF.txt
 create mode 100644 crlf_true_attr_auto_CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr_auto_CRLF_nul.txt
 create mode 100644 crlf_true_attr_auto_LF.txt
 create mode 100644 crlf_true_attr_auto_LF_mix_CR.txt
 create mode 100644 crlf_true_attr_auto_LF_nul.txt
[main 21fb1d0] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr_auto_CRLF.txt
 create mode 100644 crlf_input_attr_auto_CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr_auto_CRLF_nul.txt
 create mode 100644 crlf_input_attr_auto_LF.txt
 create mode 100644 crlf_input_attr_auto_LF_mix_CR.txt
 create mode 100644 crlf_input_attr_auto_LF_nul.txt
ok 4 - commit files attr=auto

expecting success of 0027.5 'commit files attr=text': 
	commit_check_warn false "text" "$WILC"   "$WICL"   "$WAMIX"  "$WILC"   "$WICL"   &&
	commit_check_warn true  "text" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""        &&
	commit_check_warn input "text" ""        "CRLF_LF" "CRLF_LF" ""        "CRLF_LF"

[main 16b2963] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr_text_CRLF.txt
 create mode 100644 crlf_false_attr_text_CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr_text_CRLF_nul.txt
 create mode 100644 crlf_false_attr_text_LF.txt
 create mode 100644 crlf_false_attr_text_LF_mix_CR.txt
 create mode 100644 crlf_false_attr_text_LF_nul.txt
[main 006c230] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr_text_CRLF.txt
 create mode 100644 crlf_true_attr_text_CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr_text_CRLF_nul.txt
 create mode 100644 crlf_true_attr_text_LF.txt
 create mode 100644 crlf_true_attr_text_LF_mix_CR.txt
 create mode 100644 crlf_true_attr_text_LF_nul.txt
[main 00481a2] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr_text_CRLF.txt
 create mode 100644 crlf_input_attr_text_CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr_text_CRLF_nul.txt
 create mode 100644 crlf_input_attr_text_LF.txt
 create mode 100644 crlf_input_attr_text_LF_mix_CR.txt
 create mode 100644 crlf_input_attr_text_LF_nul.txt
ok 5 - commit files attr=text

expecting success of 0027.6 'commit files attr=-text': 
	commit_check_warn false "-text" ""       ""        ""        ""        "" &&
	commit_check_warn true  "-text" ""       ""        ""        ""        "" &&
	commit_check_warn input "-text" ""       ""        ""        ""        ""

[main 88d9dda] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr_-text_CRLF.txt
 create mode 100644 crlf_false_attr_-text_CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr_-text_CRLF_nul.txt
 create mode 100644 crlf_false_attr_-text_LF.txt
 create mode 100644 crlf_false_attr_-text_LF_mix_CR.txt
 create mode 100644 crlf_false_attr_-text_LF_nul.txt
[main 1456133] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr_-text_CRLF.txt
 create mode 100644 crlf_true_attr_-text_CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr_-text_CRLF_nul.txt
 create mode 100644 crlf_true_attr_-text_LF.txt
 create mode 100644 crlf_true_attr_-text_LF_mix_CR.txt
 create mode 100644 crlf_true_attr_-text_LF_nul.txt
[main 08b2ac8] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr_-text_CRLF.txt
 create mode 100644 crlf_input_attr_-text_CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr_-text_CRLF_nul.txt
 create mode 100644 crlf_input_attr_-text_LF.txt
 create mode 100644 crlf_input_attr_-text_LF_mix_CR.txt
 create mode 100644 crlf_input_attr_-text_LF_nul.txt
ok 6 - commit files attr=-text

expecting success of 0027.7 'commit files attr=lf': 
	commit_check_warn false "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&
	commit_check_warn true  "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&
	commit_check_warn input "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF"

[main f130974] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr_lf_CRLF.txt
 create mode 100644 crlf_false_attr_lf_CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr_lf_CRLF_nul.txt
 create mode 100644 crlf_false_attr_lf_LF.txt
 create mode 100644 crlf_false_attr_lf_LF_mix_CR.txt
 create mode 100644 crlf_false_attr_lf_LF_nul.txt
[main 0b69747] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr_lf_CRLF.txt
 create mode 100644 crlf_true_attr_lf_CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr_lf_CRLF_nul.txt
 create mode 100644 crlf_true_attr_lf_LF.txt
 create mode 100644 crlf_true_attr_lf_LF_mix_CR.txt
 create mode 100644 crlf_true_attr_lf_LF_nul.txt
[main 7d87167] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr_lf_CRLF.txt
 create mode 100644 crlf_input_attr_lf_CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr_lf_CRLF_nul.txt
 create mode 100644 crlf_input_attr_lf_LF.txt
 create mode 100644 crlf_input_attr_lf_LF_mix_CR.txt
 create mode 100644 crlf_input_attr_lf_LF_nul.txt
ok 7 - commit files attr=lf

expecting success of 0027.8 'commit files attr=crlf': 
	commit_check_warn false "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&
	commit_check_warn true  "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&
	commit_check_warn input "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""

[main 753280e] core.autocrlf false
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_false_attr_crlf_CRLF.txt
 create mode 100644 crlf_false_attr_crlf_CRLF_mix_LF.txt
 create mode 100644 crlf_false_attr_crlf_CRLF_nul.txt
 create mode 100644 crlf_false_attr_crlf_LF.txt
 create mode 100644 crlf_false_attr_crlf_LF_mix_CR.txt
 create mode 100644 crlf_false_attr_crlf_LF_nul.txt
[main abec00d] core.autocrlf true
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_true_attr_crlf_CRLF.txt
 create mode 100644 crlf_true_attr_crlf_CRLF_mix_LF.txt
 create mode 100644 crlf_true_attr_crlf_CRLF_nul.txt
 create mode 100644 crlf_true_attr_crlf_LF.txt
 create mode 100644 crlf_true_attr_crlf_LF_mix_CR.txt
 create mode 100644 crlf_true_attr_crlf_LF_nul.txt
[main 4e045e6] core.autocrlf input
 Author: A U Thor <author@example.com>
 6 files changed, 15 insertions(+)
 create mode 100644 crlf_input_attr_crlf_CRLF.txt
 create mode 100644 crlf_input_attr_crlf_CRLF_mix_LF.txt
 create mode 100644 crlf_input_attr_crlf_CRLF_nul.txt
 create mode 100644 crlf_input_attr_crlf_LF.txt
 create mode 100644 crlf_input_attr_crlf_LF_mix_CR.txt
 create mode 100644 crlf_input_attr_crlf_LF_nul.txt
ok 8 - commit files attr=crlf

expecting success of 0027.9 'commit file with mixed EOL onto LF crlf=false attr=': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 9 - commit file with mixed EOL onto LF crlf=false attr=

expecting success of 0027.10 'commit file with mixed EOL onto CLRF attr= aeol= crlf=false': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 10 - commit file with mixed EOL onto CLRF attr= aeol= crlf=false

expecting success of 0027.11 'commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=false': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 11 - commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=false

expecting success of 0027.12 'commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=false ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 12 - commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=false 

expecting success of 0027.13 'commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=false': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 13 - commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=false

expecting success of 0027.14 'commit file with mixed EOL onto LF crlf=true attr=': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 14 - commit file with mixed EOL onto LF crlf=true attr=

expecting success of 0027.15 'commit file with mixed EOL onto CLRF attr= aeol= crlf=true': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 15 - commit file with mixed EOL onto CLRF attr= aeol= crlf=true

expecting success of 0027.16 'commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=true': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 16 - commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=true

expecting success of 0027.17 'commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=true ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 17 - commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=true 

expecting success of 0027.18 'commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=true': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 18 - commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=true

expecting success of 0027.19 'commit file with mixed EOL onto LF crlf=input attr=': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 19 - commit file with mixed EOL onto LF crlf=input attr=

expecting success of 0027.20 'commit file with mixed EOL onto CLRF attr= aeol= crlf=input': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 20 - commit file with mixed EOL onto CLRF attr= aeol= crlf=input

expecting success of 0027.21 'commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=input': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 21 - commit file with mixed EOL onto CRLF_mix_LF attr= aeol= crlf=input

expecting success of 0027.22 'commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=input ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 22 - commit file with mixed EOL onto LF_mix_cr attr= aeol= crlf=input 

expecting success of 0027.23 'commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=input': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 23 - commit file with mixed EOL onto CRLF_nul attr= aeol= crlf=input

expecting success of 0027.24 'commit file with mixed EOL onto LF crlf=false attr=auto': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 24 - commit file with mixed EOL onto LF crlf=false attr=auto

expecting success of 0027.25 'commit file with mixed EOL onto CLRF attr=auto aeol= crlf=false': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 25 - commit file with mixed EOL onto CLRF attr=auto aeol= crlf=false

expecting success of 0027.26 'commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=false': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 26 - commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=false

expecting success of 0027.27 'commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=false ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 27 - commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=false 

expecting success of 0027.28 'commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=false': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 28 - commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=false

expecting success of 0027.29 'commit file with mixed EOL onto LF crlf=true attr=auto': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 29 - commit file with mixed EOL onto LF crlf=true attr=auto

expecting success of 0027.30 'commit file with mixed EOL onto CLRF attr=auto aeol= crlf=true': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 30 - commit file with mixed EOL onto CLRF attr=auto aeol= crlf=true

expecting success of 0027.31 'commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=true': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 31 - commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=true

expecting success of 0027.32 'commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=true ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 32 - commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=true 

expecting success of 0027.33 'commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=true': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 33 - commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=true

expecting success of 0027.34 'commit file with mixed EOL onto LF crlf=input attr=auto': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 34 - commit file with mixed EOL onto LF crlf=input attr=auto

expecting success of 0027.35 'commit file with mixed EOL onto CLRF attr=auto aeol= crlf=input': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 35 - commit file with mixed EOL onto CLRF attr=auto aeol= crlf=input

expecting success of 0027.36 'commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=input': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 36 - commit file with mixed EOL onto CRLF_mix_LF attr=auto aeol= crlf=input

expecting success of 0027.37 'commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=input ': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 37 - commit file with mixed EOL onto LF_mix_cr attr=auto aeol= crlf=input 

expecting success of 0027.38 'commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=input': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 38 - commit file with mixed EOL onto CRLF_nul attr=auto aeol= crlf=input

expecting success of 0027.39 'commit NNO files crlf=false attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 39 - commit NNO files crlf=false attr= LF

expecting success of 0027.40 'commit NNO files attr= aeol= crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 40 - commit NNO files attr= aeol= crlf=false CRLF

expecting success of 0027.41 'commit NNO files attr= aeol= crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 41 - commit NNO files attr= aeol= crlf=false CRLF_mix_LF

expecting success of 0027.42 'commit NNO files attr= aeol= crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 42 - commit NNO files attr= aeol= crlf=false LF_mix_cr

expecting success of 0027.43 'commit NNO files attr= aeol= crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 43 - commit NNO files attr= aeol= crlf=false CRLF_nul

expecting success of 0027.44 'commit NNO files crlf=true attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 44 - commit NNO files crlf=true attr= LF

expecting success of 0027.45 'commit NNO files attr= aeol= crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 45 - commit NNO files attr= aeol= crlf=true CRLF

expecting success of 0027.46 'commit NNO files attr= aeol= crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 46 - commit NNO files attr= aeol= crlf=true CRLF_mix_LF

expecting success of 0027.47 'commit NNO files attr= aeol= crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 47 - commit NNO files attr= aeol= crlf=true LF_mix_cr

expecting success of 0027.48 'commit NNO files attr= aeol= crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 48 - commit NNO files attr= aeol= crlf=true CRLF_nul

expecting success of 0027.49 'commit NNO files crlf=input attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 49 - commit NNO files crlf=input attr= LF

expecting success of 0027.50 'commit NNO files attr= aeol= crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 50 - commit NNO files attr= aeol= crlf=input CRLF

expecting success of 0027.51 'commit NNO files attr= aeol= crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 51 - commit NNO files attr= aeol= crlf=input CRLF_mix_LF

expecting success of 0027.52 'commit NNO files attr= aeol= crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 52 - commit NNO files attr= aeol= crlf=input LF_mix_cr

expecting success of 0027.53 'commit NNO files attr= aeol= crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 53 - commit NNO files attr= aeol= crlf=input CRLF_nul

expecting success of 0027.54 'commit NNO files crlf=false attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 54 - commit NNO files crlf=false attr=auto LF

expecting success of 0027.55 'commit NNO files attr=auto aeol= crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 55 - commit NNO files attr=auto aeol= crlf=false CRLF

expecting success of 0027.56 'commit NNO files attr=auto aeol= crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 56 - commit NNO files attr=auto aeol= crlf=false CRLF_mix_LF

expecting success of 0027.57 'commit NNO files attr=auto aeol= crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 57 - commit NNO files attr=auto aeol= crlf=false LF_mix_cr

expecting success of 0027.58 'commit NNO files attr=auto aeol= crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 58 - commit NNO files attr=auto aeol= crlf=false CRLF_nul

expecting success of 0027.59 'commit NNO files crlf=true attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 59 - commit NNO files crlf=true attr=auto LF

expecting success of 0027.60 'commit NNO files attr=auto aeol= crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 60 - commit NNO files attr=auto aeol= crlf=true CRLF

expecting success of 0027.61 'commit NNO files attr=auto aeol= crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 61 - commit NNO files attr=auto aeol= crlf=true CRLF_mix_LF

expecting success of 0027.62 'commit NNO files attr=auto aeol= crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 62 - commit NNO files attr=auto aeol= crlf=true LF_mix_cr

expecting success of 0027.63 'commit NNO files attr=auto aeol= crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 63 - commit NNO files attr=auto aeol= crlf=true CRLF_nul

expecting success of 0027.64 'commit NNO files crlf=input attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 64 - commit NNO files crlf=input attr=auto LF

expecting success of 0027.65 'commit NNO files attr=auto aeol= crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 65 - commit NNO files attr=auto aeol= crlf=input CRLF

expecting success of 0027.66 'commit NNO files attr=auto aeol= crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 66 - commit NNO files attr=auto aeol= crlf=input CRLF_mix_LF

expecting success of 0027.67 'commit NNO files attr=auto aeol= crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 67 - commit NNO files attr=auto aeol= crlf=input LF_mix_cr

expecting success of 0027.68 'commit NNO files attr=auto aeol= crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 68 - commit NNO files attr=auto aeol= crlf=input CRLF_nul

expecting success of 0027.69 'commit NNO files crlf=true attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 69 - commit NNO files crlf=true attr=-text LF

expecting success of 0027.70 'commit NNO files attr=-text aeol= crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 70 - commit NNO files attr=-text aeol= crlf=true CRLF

expecting success of 0027.71 'commit NNO files attr=-text aeol= crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 71 - commit NNO files attr=-text aeol= crlf=true CRLF_mix_LF

expecting success of 0027.72 'commit NNO files attr=-text aeol= crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 72 - commit NNO files attr=-text aeol= crlf=true LF_mix_cr

expecting success of 0027.73 'commit NNO files attr=-text aeol= crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 73 - commit NNO files attr=-text aeol= crlf=true CRLF_nul

expecting success of 0027.74 'commit NNO files crlf=true attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 74 - commit NNO files crlf=true attr=-text LF

expecting success of 0027.75 'commit NNO files attr=-text aeol=lf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 75 - commit NNO files attr=-text aeol=lf crlf=true CRLF

expecting success of 0027.76 'commit NNO files attr=-text aeol=lf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 76 - commit NNO files attr=-text aeol=lf crlf=true CRLF_mix_LF

expecting success of 0027.77 'commit NNO files attr=-text aeol=lf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 77 - commit NNO files attr=-text aeol=lf crlf=true LF_mix_cr

expecting success of 0027.78 'commit NNO files attr=-text aeol=lf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 78 - commit NNO files attr=-text aeol=lf crlf=true CRLF_nul

expecting success of 0027.79 'commit NNO files crlf=true attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 79 - commit NNO files crlf=true attr=-text LF

expecting success of 0027.80 'commit NNO files attr=-text aeol=crlf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 80 - commit NNO files attr=-text aeol=crlf crlf=true CRLF

expecting success of 0027.81 'commit NNO files attr=-text aeol=crlf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 81 - commit NNO files attr=-text aeol=crlf crlf=true CRLF_mix_LF

expecting success of 0027.82 'commit NNO files attr=-text aeol=crlf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 82 - commit NNO files attr=-text aeol=crlf crlf=true LF_mix_cr

expecting success of 0027.83 'commit NNO files attr=-text aeol=crlf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 83 - commit NNO files attr=-text aeol=crlf crlf=true CRLF_nul

expecting success of 0027.84 'commit NNO files crlf=true attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 84 - commit NNO files crlf=true attr= LF

expecting success of 0027.85 'commit NNO files attr= aeol=lf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 85 - commit NNO files attr= aeol=lf crlf=true CRLF

expecting success of 0027.86 'commit NNO files attr= aeol=lf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 86 - commit NNO files attr= aeol=lf crlf=true CRLF_mix_LF

expecting success of 0027.87 'commit NNO files attr= aeol=lf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 87 - commit NNO files attr= aeol=lf crlf=true LF_mix_cr

expecting success of 0027.88 'commit NNO files attr= aeol=lf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 88 - commit NNO files attr= aeol=lf crlf=true CRLF_nul

expecting success of 0027.89 'commit NNO files crlf=true attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 89 - commit NNO files crlf=true attr= LF

expecting success of 0027.90 'commit NNO files attr= aeol=crlf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 90 - commit NNO files attr= aeol=crlf crlf=true CRLF

expecting success of 0027.91 'commit NNO files attr= aeol=crlf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 91 - commit NNO files attr= aeol=crlf crlf=true CRLF_mix_LF

expecting success of 0027.92 'commit NNO files attr= aeol=crlf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 92 - commit NNO files attr= aeol=crlf crlf=true LF_mix_cr

expecting success of 0027.93 'commit NNO files attr= aeol=crlf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 93 - commit NNO files attr= aeol=crlf crlf=true CRLF_nul

expecting success of 0027.94 'commit NNO files crlf=true attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 94 - commit NNO files crlf=true attr=auto LF

expecting success of 0027.95 'commit NNO files attr=auto aeol=lf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 95 - commit NNO files attr=auto aeol=lf crlf=true CRLF

expecting success of 0027.96 'commit NNO files attr=auto aeol=lf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 96 - commit NNO files attr=auto aeol=lf crlf=true CRLF_mix_LF

expecting success of 0027.97 'commit NNO files attr=auto aeol=lf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 97 - commit NNO files attr=auto aeol=lf crlf=true LF_mix_cr

expecting success of 0027.98 'commit NNO files attr=auto aeol=lf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 98 - commit NNO files attr=auto aeol=lf crlf=true CRLF_nul

expecting success of 0027.99 'commit NNO files crlf=true attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 99 - commit NNO files crlf=true attr=auto LF

expecting success of 0027.100 'commit NNO files attr=auto aeol=crlf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 100 - commit NNO files attr=auto aeol=crlf crlf=true CRLF

expecting success of 0027.101 'commit NNO files attr=auto aeol=crlf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 101 - commit NNO files attr=auto aeol=crlf crlf=true CRLF_mix_LF

expecting success of 0027.102 'commit NNO files attr=auto aeol=crlf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 102 - commit NNO files attr=auto aeol=crlf crlf=true LF_mix_cr

expecting success of 0027.103 'commit NNO files attr=auto aeol=crlf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 103 - commit NNO files attr=auto aeol=crlf crlf=true CRLF_nul

expecting success of 0027.104 'commit NNO files crlf=true attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 104 - commit NNO files crlf=true attr=text LF

expecting success of 0027.105 'commit NNO files attr=text aeol=lf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 105 - commit NNO files attr=text aeol=lf crlf=true CRLF

expecting success of 0027.106 'commit NNO files attr=text aeol=lf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 106 - commit NNO files attr=text aeol=lf crlf=true CRLF_mix_LF

expecting success of 0027.107 'commit NNO files attr=text aeol=lf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 107 - commit NNO files attr=text aeol=lf crlf=true LF_mix_cr

expecting success of 0027.108 'commit NNO files attr=text aeol=lf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 108 - commit NNO files attr=text aeol=lf crlf=true CRLF_nul

expecting success of 0027.109 'commit NNO files crlf=true attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 109 - commit NNO files crlf=true attr=text LF

expecting success of 0027.110 'commit NNO files attr=text aeol=crlf crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 110 - commit NNO files attr=text aeol=crlf crlf=true CRLF

expecting success of 0027.111 'commit NNO files attr=text aeol=crlf crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 111 - commit NNO files attr=text aeol=crlf crlf=true CRLF_mix_LF

expecting success of 0027.112 'commit NNO files attr=text aeol=crlf crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 112 - commit NNO files attr=text aeol=crlf crlf=true LF_mix_cr

expecting success of 0027.113 'commit NNO files attr=text aeol=crlf crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 113 - commit NNO files attr=text aeol=crlf crlf=true CRLF_nul

expecting success of 0027.114 'commit NNO files crlf=false attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 114 - commit NNO files crlf=false attr=-text LF

expecting success of 0027.115 'commit NNO files attr=-text aeol= crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 115 - commit NNO files attr=-text aeol= crlf=false CRLF

expecting success of 0027.116 'commit NNO files attr=-text aeol= crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 116 - commit NNO files attr=-text aeol= crlf=false CRLF_mix_LF

expecting success of 0027.117 'commit NNO files attr=-text aeol= crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 117 - commit NNO files attr=-text aeol= crlf=false LF_mix_cr

expecting success of 0027.118 'commit NNO files attr=-text aeol= crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 118 - commit NNO files attr=-text aeol= crlf=false CRLF_nul

expecting success of 0027.119 'commit NNO files crlf=false attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 119 - commit NNO files crlf=false attr=-text LF

expecting success of 0027.120 'commit NNO files attr=-text aeol=lf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 120 - commit NNO files attr=-text aeol=lf crlf=false CRLF

expecting success of 0027.121 'commit NNO files attr=-text aeol=lf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 121 - commit NNO files attr=-text aeol=lf crlf=false CRLF_mix_LF

expecting success of 0027.122 'commit NNO files attr=-text aeol=lf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 122 - commit NNO files attr=-text aeol=lf crlf=false LF_mix_cr

expecting success of 0027.123 'commit NNO files attr=-text aeol=lf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 123 - commit NNO files attr=-text aeol=lf crlf=false CRLF_nul

expecting success of 0027.124 'commit NNO files crlf=false attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 124 - commit NNO files crlf=false attr=-text LF

expecting success of 0027.125 'commit NNO files attr=-text aeol=crlf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 125 - commit NNO files attr=-text aeol=crlf crlf=false CRLF

expecting success of 0027.126 'commit NNO files attr=-text aeol=crlf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 126 - commit NNO files attr=-text aeol=crlf crlf=false CRLF_mix_LF

expecting success of 0027.127 'commit NNO files attr=-text aeol=crlf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 127 - commit NNO files attr=-text aeol=crlf crlf=false LF_mix_cr

expecting success of 0027.128 'commit NNO files attr=-text aeol=crlf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 128 - commit NNO files attr=-text aeol=crlf crlf=false CRLF_nul

expecting success of 0027.129 'commit NNO files crlf=false attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 129 - commit NNO files crlf=false attr= LF

expecting success of 0027.130 'commit NNO files attr= aeol=lf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 130 - commit NNO files attr= aeol=lf crlf=false CRLF

expecting success of 0027.131 'commit NNO files attr= aeol=lf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 131 - commit NNO files attr= aeol=lf crlf=false CRLF_mix_LF

expecting success of 0027.132 'commit NNO files attr= aeol=lf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 132 - commit NNO files attr= aeol=lf crlf=false LF_mix_cr

expecting success of 0027.133 'commit NNO files attr= aeol=lf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 133 - commit NNO files attr= aeol=lf crlf=false CRLF_nul

expecting success of 0027.134 'commit NNO files crlf=false attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 134 - commit NNO files crlf=false attr= LF

expecting success of 0027.135 'commit NNO files attr= aeol=crlf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 135 - commit NNO files attr= aeol=crlf crlf=false CRLF

expecting success of 0027.136 'commit NNO files attr= aeol=crlf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 136 - commit NNO files attr= aeol=crlf crlf=false CRLF_mix_LF

expecting success of 0027.137 'commit NNO files attr= aeol=crlf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 137 - commit NNO files attr= aeol=crlf crlf=false LF_mix_cr

expecting success of 0027.138 'commit NNO files attr= aeol=crlf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 138 - commit NNO files attr= aeol=crlf crlf=false CRLF_nul

expecting success of 0027.139 'commit NNO files crlf=false attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 139 - commit NNO files crlf=false attr=auto LF

expecting success of 0027.140 'commit NNO files attr=auto aeol=lf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 140 - commit NNO files attr=auto aeol=lf crlf=false CRLF

expecting success of 0027.141 'commit NNO files attr=auto aeol=lf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 141 - commit NNO files attr=auto aeol=lf crlf=false CRLF_mix_LF

expecting success of 0027.142 'commit NNO files attr=auto aeol=lf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 142 - commit NNO files attr=auto aeol=lf crlf=false LF_mix_cr

expecting success of 0027.143 'commit NNO files attr=auto aeol=lf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 143 - commit NNO files attr=auto aeol=lf crlf=false CRLF_nul

expecting success of 0027.144 'commit NNO files crlf=false attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 144 - commit NNO files crlf=false attr=auto LF

expecting success of 0027.145 'commit NNO files attr=auto aeol=crlf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 145 - commit NNO files attr=auto aeol=crlf crlf=false CRLF

expecting success of 0027.146 'commit NNO files attr=auto aeol=crlf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 146 - commit NNO files attr=auto aeol=crlf crlf=false CRLF_mix_LF

expecting success of 0027.147 'commit NNO files attr=auto aeol=crlf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 147 - commit NNO files attr=auto aeol=crlf crlf=false LF_mix_cr

expecting success of 0027.148 'commit NNO files attr=auto aeol=crlf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 148 - commit NNO files attr=auto aeol=crlf crlf=false CRLF_nul

expecting success of 0027.149 'commit NNO files crlf=false attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 149 - commit NNO files crlf=false attr=text LF

expecting success of 0027.150 'commit NNO files attr=text aeol=lf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 150 - commit NNO files attr=text aeol=lf crlf=false CRLF

expecting success of 0027.151 'commit NNO files attr=text aeol=lf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 151 - commit NNO files attr=text aeol=lf crlf=false CRLF_mix_LF

expecting success of 0027.152 'commit NNO files attr=text aeol=lf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 152 - commit NNO files attr=text aeol=lf crlf=false LF_mix_cr

expecting success of 0027.153 'commit NNO files attr=text aeol=lf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 153 - commit NNO files attr=text aeol=lf crlf=false CRLF_nul

expecting success of 0027.154 'commit NNO files crlf=false attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 154 - commit NNO files crlf=false attr=text LF

expecting success of 0027.155 'commit NNO files attr=text aeol=crlf crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 155 - commit NNO files attr=text aeol=crlf crlf=false CRLF

expecting success of 0027.156 'commit NNO files attr=text aeol=crlf crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 156 - commit NNO files attr=text aeol=crlf crlf=false CRLF_mix_LF

expecting success of 0027.157 'commit NNO files attr=text aeol=crlf crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 157 - commit NNO files attr=text aeol=crlf crlf=false LF_mix_cr

expecting success of 0027.158 'commit NNO files attr=text aeol=crlf crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 158 - commit NNO files attr=text aeol=crlf crlf=false CRLF_nul

expecting success of 0027.159 'commit NNO files crlf=input attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 159 - commit NNO files crlf=input attr=-text LF

expecting success of 0027.160 'commit NNO files attr=-text aeol= crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 160 - commit NNO files attr=-text aeol= crlf=input CRLF

expecting success of 0027.161 'commit NNO files attr=-text aeol= crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 161 - commit NNO files attr=-text aeol= crlf=input CRLF_mix_LF

expecting success of 0027.162 'commit NNO files attr=-text aeol= crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 162 - commit NNO files attr=-text aeol= crlf=input LF_mix_cr

expecting success of 0027.163 'commit NNO files attr=-text aeol= crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 163 - commit NNO files attr=-text aeol= crlf=input CRLF_nul

expecting success of 0027.164 'commit NNO files crlf=input attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 164 - commit NNO files crlf=input attr=-text LF

expecting success of 0027.165 'commit NNO files attr=-text aeol=lf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 165 - commit NNO files attr=-text aeol=lf crlf=input CRLF

expecting success of 0027.166 'commit NNO files attr=-text aeol=lf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 166 - commit NNO files attr=-text aeol=lf crlf=input CRLF_mix_LF

expecting success of 0027.167 'commit NNO files attr=-text aeol=lf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 167 - commit NNO files attr=-text aeol=lf crlf=input LF_mix_cr

expecting success of 0027.168 'commit NNO files attr=-text aeol=lf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 168 - commit NNO files attr=-text aeol=lf crlf=input CRLF_nul

expecting success of 0027.169 'commit NNO files crlf=input attr=-text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 169 - commit NNO files crlf=input attr=-text LF

expecting success of 0027.170 'commit NNO files attr=-text aeol=crlf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 170 - commit NNO files attr=-text aeol=crlf crlf=input CRLF

expecting success of 0027.171 'commit NNO files attr=-text aeol=crlf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 171 - commit NNO files attr=-text aeol=crlf crlf=input CRLF_mix_LF

expecting success of 0027.172 'commit NNO files attr=-text aeol=crlf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 172 - commit NNO files attr=-text aeol=crlf crlf=input LF_mix_cr

expecting success of 0027.173 'commit NNO files attr=-text aeol=crlf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 173 - commit NNO files attr=-text aeol=crlf crlf=input CRLF_nul

expecting success of 0027.174 'commit NNO files crlf=input attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 174 - commit NNO files crlf=input attr= LF

expecting success of 0027.175 'commit NNO files attr= aeol=lf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 175 - commit NNO files attr= aeol=lf crlf=input CRLF

expecting success of 0027.176 'commit NNO files attr= aeol=lf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 176 - commit NNO files attr= aeol=lf crlf=input CRLF_mix_LF

expecting success of 0027.177 'commit NNO files attr= aeol=lf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 177 - commit NNO files attr= aeol=lf crlf=input LF_mix_cr

expecting success of 0027.178 'commit NNO files attr= aeol=lf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 178 - commit NNO files attr= aeol=lf crlf=input CRLF_nul

expecting success of 0027.179 'commit NNO files crlf=input attr= LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 179 - commit NNO files crlf=input attr= LF

expecting success of 0027.180 'commit NNO files attr= aeol=crlf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 180 - commit NNO files attr= aeol=crlf crlf=input CRLF

expecting success of 0027.181 'commit NNO files attr= aeol=crlf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 181 - commit NNO files attr= aeol=crlf crlf=input CRLF_mix_LF

expecting success of 0027.182 'commit NNO files attr= aeol=crlf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 182 - commit NNO files attr= aeol=crlf crlf=input LF_mix_cr

expecting success of 0027.183 'commit NNO files attr= aeol=crlf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 183 - commit NNO files attr= aeol=crlf crlf=input CRLF_nul

expecting success of 0027.184 'commit NNO files crlf=input attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 184 - commit NNO files crlf=input attr=auto LF

expecting success of 0027.185 'commit NNO files attr=auto aeol=lf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 185 - commit NNO files attr=auto aeol=lf crlf=input CRLF

expecting success of 0027.186 'commit NNO files attr=auto aeol=lf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 186 - commit NNO files attr=auto aeol=lf crlf=input CRLF_mix_LF

expecting success of 0027.187 'commit NNO files attr=auto aeol=lf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 187 - commit NNO files attr=auto aeol=lf crlf=input LF_mix_cr

expecting success of 0027.188 'commit NNO files attr=auto aeol=lf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 188 - commit NNO files attr=auto aeol=lf crlf=input CRLF_nul

expecting success of 0027.189 'commit NNO files crlf=input attr=auto LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 189 - commit NNO files crlf=input attr=auto LF

expecting success of 0027.190 'commit NNO files attr=auto aeol=crlf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 190 - commit NNO files attr=auto aeol=crlf crlf=input CRLF

expecting success of 0027.191 'commit NNO files attr=auto aeol=crlf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 191 - commit NNO files attr=auto aeol=crlf crlf=input CRLF_mix_LF

expecting success of 0027.192 'commit NNO files attr=auto aeol=crlf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 192 - commit NNO files attr=auto aeol=crlf crlf=input LF_mix_cr

expecting success of 0027.193 'commit NNO files attr=auto aeol=crlf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 193 - commit NNO files attr=auto aeol=crlf crlf=input CRLF_nul

expecting success of 0027.194 'commit NNO files crlf=input attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 194 - commit NNO files crlf=input attr=text LF

expecting success of 0027.195 'commit NNO files attr=text aeol=lf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 195 - commit NNO files attr=text aeol=lf crlf=input CRLF

expecting success of 0027.196 'commit NNO files attr=text aeol=lf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 196 - commit NNO files attr=text aeol=lf crlf=input CRLF_mix_LF

expecting success of 0027.197 'commit NNO files attr=text aeol=lf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 197 - commit NNO files attr=text aeol=lf crlf=input LF_mix_cr

expecting success of 0027.198 'commit NNO files attr=text aeol=lf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 198 - commit NNO files attr=text aeol=lf crlf=input CRLF_nul

expecting success of 0027.199 'commit NNO files crlf=input attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 199 - commit NNO files crlf=input attr=text LF

expecting success of 0027.200 'commit NNO files attr=text aeol=crlf crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 200 - commit NNO files attr=text aeol=crlf crlf=input CRLF

expecting success of 0027.201 'commit NNO files attr=text aeol=crlf crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 201 - commit NNO files attr=text aeol=crlf crlf=input CRLF_mix_LF

expecting success of 0027.202 'commit NNO files attr=text aeol=crlf crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 202 - commit NNO files attr=text aeol=crlf crlf=input LF_mix_cr

expecting success of 0027.203 'commit NNO files attr=text aeol=crlf crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 203 - commit NNO files attr=text aeol=crlf crlf=input CRLF_nul

expecting success of 0027.204 'commit NNO files crlf=false attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 204 - commit NNO files crlf=false attr=text LF

expecting success of 0027.205 'commit NNO files attr=text aeol= crlf=false CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 205 - commit NNO files attr=text aeol= crlf=false CRLF

expecting success of 0027.206 'commit NNO files attr=text aeol= crlf=false CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 206 - commit NNO files attr=text aeol= crlf=false CRLF_mix_LF

expecting success of 0027.207 'commit NNO files attr=text aeol= crlf=false LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 207 - commit NNO files attr=text aeol= crlf=false LF_mix_cr

expecting success of 0027.208 'commit NNO files attr=text aeol= crlf=false CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 208 - commit NNO files attr=text aeol= crlf=false CRLF_nul

expecting success of 0027.209 'commit NNO files crlf=true attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 209 - commit NNO files crlf=true attr=text LF

expecting success of 0027.210 'commit NNO files attr=text aeol= crlf=true CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 210 - commit NNO files attr=text aeol= crlf=true CRLF

expecting success of 0027.211 'commit NNO files attr=text aeol= crlf=true CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 211 - commit NNO files attr=text aeol= crlf=true CRLF_mix_LF

expecting success of 0027.212 'commit NNO files attr=text aeol= crlf=true LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 212 - commit NNO files attr=text aeol= crlf=true LF_mix_cr

expecting success of 0027.213 'commit NNO files attr=text aeol= crlf=true CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 213 - commit NNO files attr=text aeol= crlf=true CRLF_nul

expecting success of 0027.214 'commit NNO files crlf=input attr=text LF': 
		check_warning "$lfwarn" ${pfx}_LF.err
	
ok 214 - commit NNO files crlf=input attr=text LF

expecting success of 0027.215 'commit NNO files attr=text aeol= crlf=input CRLF': 
		check_warning "$crlfwarn" ${pfx}_CRLF.err
	
ok 215 - commit NNO files attr=text aeol= crlf=input CRLF

expecting success of 0027.216 'commit NNO files attr=text aeol= crlf=input CRLF_mix_LF': 
		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
	
ok 216 - commit NNO files attr=text aeol= crlf=input CRLF_mix_LF

expecting success of 0027.217 'commit NNO files attr=text aeol= crlf=input LF_mix_cr': 
		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
	
ok 217 - commit NNO files attr=text aeol= crlf=input LF_mix_cr

expecting success of 0027.218 'commit NNO files attr=text aeol= crlf=input CRLF_nul': 
		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
	
ok 218 - commit NNO files attr=text aeol= crlf=input CRLF_nul

expecting success of 0027.219 'commit NNO and cleanup': 
	git commit -m "commit files on top of NNO" &&
	rm -f *.txt &&
	git -c core.autocrlf=false reset --hard

[main 35da0ca] commit files on top of NNO
 Author: A U Thor <author@example.com>
 210 files changed, 332 insertions(+), 362 deletions(-)
HEAD is now at 35da0ca commit files on top of NNO
ok 219 - commit NNO and cleanup

expecting success of 0027.220 'commit empty gitattribues': 
	check_files_in_repo false ""      LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
	check_files_in_repo true  ""      LF LF   LF          LF_mix_CR CRLF_nul &&
	check_files_in_repo input ""      LF LF   LF          LF_mix_CR CRLF_nul

ok 220 - commit empty gitattribues

expecting success of 0027.221 'commit text=auto': 
	check_files_in_repo false "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&
	check_files_in_repo true  "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&
	check_files_in_repo input "auto"  LF LF   LF          LF_mix_CR CRLF_nul

ok 221 - commit text=auto

expecting success of 0027.222 'commit text': 
	check_files_in_repo false "text"  LF LF   LF          LF_mix_CR LF_nul &&
	check_files_in_repo true  "text"  LF LF   LF          LF_mix_CR LF_nul &&
	check_files_in_repo input "text"  LF LF   LF          LF_mix_CR LF_nul

ok 222 - commit text

expecting success of 0027.223 'commit -text': 
	check_files_in_repo false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
	check_files_in_repo true  "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
	check_files_in_repo input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

ok 223 - commit -text

expecting success of 0027.224 'compare_files LF NNO_attr__aeol__true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 224 - compare_files LF NNO_attr__aeol__true_LF.txt

expecting success of 0027.225 'compare_files CRLF NNO_attr__aeol__true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 225 - compare_files CRLF NNO_attr__aeol__true_CRLF.txt

expecting success of 0027.226 'compare_files CRLF_mix_LF NNO_attr__aeol__true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 226 - compare_files CRLF_mix_LF NNO_attr__aeol__true_CRLF_mix_LF.txt

expecting success of 0027.227 'compare_files LF_mix_CR NNO_attr__aeol__true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 227 - compare_files LF_mix_CR NNO_attr__aeol__true_LF_mix_CR.txt

expecting success of 0027.228 'compare_files CRLF_nul NNO_attr__aeol__true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 228 - compare_files CRLF_nul NNO_attr__aeol__true_CRLF_nul.txt

expecting success of 0027.229 'compare_files LF NNO_attr_-text_aeol__true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 229 - compare_files LF NNO_attr_-text_aeol__true_LF.txt

expecting success of 0027.230 'compare_files CRLF NNO_attr_-text_aeol__true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 230 - compare_files CRLF NNO_attr_-text_aeol__true_CRLF.txt

expecting success of 0027.231 'compare_files CRLF_mix_LF NNO_attr_-text_aeol__true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 231 - compare_files CRLF_mix_LF NNO_attr_-text_aeol__true_CRLF_mix_LF.txt

expecting success of 0027.232 'compare_files LF_mix_CR NNO_attr_-text_aeol__true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 232 - compare_files LF_mix_CR NNO_attr_-text_aeol__true_LF_mix_CR.txt

expecting success of 0027.233 'compare_files CRLF_nul NNO_attr_-text_aeol__true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 233 - compare_files CRLF_nul NNO_attr_-text_aeol__true_CRLF_nul.txt

expecting success of 0027.234 'compare_files LF NNO_attr_-text_aeol_lf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 234 - compare_files LF NNO_attr_-text_aeol_lf_true_LF.txt

expecting success of 0027.235 'compare_files CRLF NNO_attr_-text_aeol_lf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 235 - compare_files CRLF NNO_attr_-text_aeol_lf_true_CRLF.txt

expecting success of 0027.236 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 236 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_true_CRLF_mix_LF.txt

expecting success of 0027.237 'compare_files LF_mix_CR NNO_attr_-text_aeol_lf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 237 - compare_files LF_mix_CR NNO_attr_-text_aeol_lf_true_LF_mix_CR.txt

expecting success of 0027.238 'compare_files CRLF_nul NNO_attr_-text_aeol_lf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 238 - compare_files CRLF_nul NNO_attr_-text_aeol_lf_true_CRLF_nul.txt

expecting success of 0027.239 'compare_files LF NNO_attr_-text_aeol_crlf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 239 - compare_files LF NNO_attr_-text_aeol_crlf_true_LF.txt

expecting success of 0027.240 'compare_files CRLF NNO_attr_-text_aeol_crlf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 240 - compare_files CRLF NNO_attr_-text_aeol_crlf_true_CRLF.txt

expecting success of 0027.241 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 241 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_true_CRLF_mix_LF.txt

expecting success of 0027.242 'compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 242 - compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_true_LF_mix_CR.txt

expecting success of 0027.243 'compare_files CRLF_nul NNO_attr_-text_aeol_crlf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 243 - compare_files CRLF_nul NNO_attr_-text_aeol_crlf_true_CRLF_nul.txt

expecting success of 0027.244 'compare_files LF NNO_attr_auto_aeol__true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 244 - compare_files LF NNO_attr_auto_aeol__true_LF.txt

expecting success of 0027.245 'compare_files CRLF NNO_attr_auto_aeol__true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 245 - compare_files CRLF NNO_attr_auto_aeol__true_CRLF.txt

expecting success of 0027.246 'compare_files CRLF_mix_LF NNO_attr_auto_aeol__true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 246 - compare_files CRLF_mix_LF NNO_attr_auto_aeol__true_CRLF_mix_LF.txt

expecting success of 0027.247 'compare_files LF_mix_CR NNO_attr_auto_aeol__true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 247 - compare_files LF_mix_CR NNO_attr_auto_aeol__true_LF_mix_CR.txt

expecting success of 0027.248 'compare_files CRLF_nul NNO_attr_auto_aeol__true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 248 - compare_files CRLF_nul NNO_attr_auto_aeol__true_CRLF_nul.txt

expecting success of 0027.249 'compare_files LF NNO_attr_auto_aeol_lf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 249 - compare_files LF NNO_attr_auto_aeol_lf_true_LF.txt

expecting success of 0027.250 'compare_files CRLF NNO_attr_auto_aeol_lf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 250 - compare_files CRLF NNO_attr_auto_aeol_lf_true_CRLF.txt

expecting success of 0027.251 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 251 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_true_CRLF_mix_LF.txt

expecting success of 0027.252 'compare_files LF_mix_CR NNO_attr_auto_aeol_lf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 252 - compare_files LF_mix_CR NNO_attr_auto_aeol_lf_true_LF_mix_CR.txt

expecting success of 0027.253 'compare_files CRLF_nul NNO_attr_auto_aeol_lf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 253 - compare_files CRLF_nul NNO_attr_auto_aeol_lf_true_CRLF_nul.txt

expecting success of 0027.254 'compare_files LF NNO_attr_auto_aeol_crlf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 254 - compare_files LF NNO_attr_auto_aeol_crlf_true_LF.txt

expecting success of 0027.255 'compare_files CRLF NNO_attr_auto_aeol_crlf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 255 - compare_files CRLF NNO_attr_auto_aeol_crlf_true_CRLF.txt

expecting success of 0027.256 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 256 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_true_CRLF_mix_LF.txt

expecting success of 0027.257 'compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 257 - compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_true_LF_mix_CR.txt

expecting success of 0027.258 'compare_files CRLF_nul NNO_attr_auto_aeol_crlf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 258 - compare_files CRLF_nul NNO_attr_auto_aeol_crlf_true_CRLF_nul.txt

expecting success of 0027.259 'compare_files LF NNO_attr_text_aeol__true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 259 - compare_files LF NNO_attr_text_aeol__true_LF.txt

expecting success of 0027.260 'compare_files LF NNO_attr_text_aeol__true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 260 - compare_files LF NNO_attr_text_aeol__true_CRLF.txt

expecting success of 0027.261 'compare_files LF NNO_attr_text_aeol__true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 261 - compare_files LF NNO_attr_text_aeol__true_CRLF_mix_LF.txt

expecting success of 0027.262 'compare_files LF_mix_CR NNO_attr_text_aeol__true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 262 - compare_files LF_mix_CR NNO_attr_text_aeol__true_LF_mix_CR.txt

expecting success of 0027.263 'compare_files LF_nul NNO_attr_text_aeol__true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 263 - compare_files LF_nul NNO_attr_text_aeol__true_CRLF_nul.txt

expecting success of 0027.264 'compare_files LF NNO_attr_text_aeol_lf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 264 - compare_files LF NNO_attr_text_aeol_lf_true_LF.txt

expecting success of 0027.265 'compare_files LF NNO_attr_text_aeol_lf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 265 - compare_files LF NNO_attr_text_aeol_lf_true_CRLF.txt

expecting success of 0027.266 'compare_files LF NNO_attr_text_aeol_lf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 266 - compare_files LF NNO_attr_text_aeol_lf_true_CRLF_mix_LF.txt

expecting success of 0027.267 'compare_files LF_mix_CR NNO_attr_text_aeol_lf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 267 - compare_files LF_mix_CR NNO_attr_text_aeol_lf_true_LF_mix_CR.txt

expecting success of 0027.268 'compare_files LF_nul NNO_attr_text_aeol_lf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 268 - compare_files LF_nul NNO_attr_text_aeol_lf_true_CRLF_nul.txt

expecting success of 0027.269 'compare_files LF NNO_attr_text_aeol_crlf_true_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 269 - compare_files LF NNO_attr_text_aeol_crlf_true_LF.txt

expecting success of 0027.270 'compare_files LF NNO_attr_text_aeol_crlf_true_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 270 - compare_files LF NNO_attr_text_aeol_crlf_true_CRLF.txt

expecting success of 0027.271 'compare_files LF NNO_attr_text_aeol_crlf_true_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 271 - compare_files LF NNO_attr_text_aeol_crlf_true_CRLF_mix_LF.txt

expecting success of 0027.272 'compare_files LF_mix_CR NNO_attr_text_aeol_crlf_true_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 272 - compare_files LF_mix_CR NNO_attr_text_aeol_crlf_true_LF_mix_CR.txt

expecting success of 0027.273 'compare_files LF_nul NNO_attr_text_aeol_crlf_true_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 273 - compare_files LF_nul NNO_attr_text_aeol_crlf_true_CRLF_nul.txt

expecting success of 0027.274 'compare_files LF NNO_attr__aeol__false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 274 - compare_files LF NNO_attr__aeol__false_LF.txt

expecting success of 0027.275 'compare_files CRLF NNO_attr__aeol__false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 275 - compare_files CRLF NNO_attr__aeol__false_CRLF.txt

expecting success of 0027.276 'compare_files CRLF_mix_LF NNO_attr__aeol__false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 276 - compare_files CRLF_mix_LF NNO_attr__aeol__false_CRLF_mix_LF.txt

expecting success of 0027.277 'compare_files LF_mix_CR NNO_attr__aeol__false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 277 - compare_files LF_mix_CR NNO_attr__aeol__false_LF_mix_CR.txt

expecting success of 0027.278 'compare_files CRLF_nul NNO_attr__aeol__false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 278 - compare_files CRLF_nul NNO_attr__aeol__false_CRLF_nul.txt

expecting success of 0027.279 'compare_files LF NNO_attr_-text_aeol__false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 279 - compare_files LF NNO_attr_-text_aeol__false_LF.txt

expecting success of 0027.280 'compare_files CRLF NNO_attr_-text_aeol__false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 280 - compare_files CRLF NNO_attr_-text_aeol__false_CRLF.txt

expecting success of 0027.281 'compare_files CRLF_mix_LF NNO_attr_-text_aeol__false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 281 - compare_files CRLF_mix_LF NNO_attr_-text_aeol__false_CRLF_mix_LF.txt

expecting success of 0027.282 'compare_files LF_mix_CR NNO_attr_-text_aeol__false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 282 - compare_files LF_mix_CR NNO_attr_-text_aeol__false_LF_mix_CR.txt

expecting success of 0027.283 'compare_files CRLF_nul NNO_attr_-text_aeol__false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 283 - compare_files CRLF_nul NNO_attr_-text_aeol__false_CRLF_nul.txt

expecting success of 0027.284 'compare_files LF NNO_attr_-text_aeol_lf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 284 - compare_files LF NNO_attr_-text_aeol_lf_false_LF.txt

expecting success of 0027.285 'compare_files CRLF NNO_attr_-text_aeol_lf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 285 - compare_files CRLF NNO_attr_-text_aeol_lf_false_CRLF.txt

expecting success of 0027.286 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 286 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_false_CRLF_mix_LF.txt

expecting success of 0027.287 'compare_files LF_mix_CR NNO_attr_-text_aeol_lf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 287 - compare_files LF_mix_CR NNO_attr_-text_aeol_lf_false_LF_mix_CR.txt

expecting success of 0027.288 'compare_files CRLF_nul NNO_attr_-text_aeol_lf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 288 - compare_files CRLF_nul NNO_attr_-text_aeol_lf_false_CRLF_nul.txt

expecting success of 0027.289 'compare_files LF NNO_attr_-text_aeol_crlf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 289 - compare_files LF NNO_attr_-text_aeol_crlf_false_LF.txt

expecting success of 0027.290 'compare_files CRLF NNO_attr_-text_aeol_crlf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 290 - compare_files CRLF NNO_attr_-text_aeol_crlf_false_CRLF.txt

expecting success of 0027.291 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 291 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_false_CRLF_mix_LF.txt

expecting success of 0027.292 'compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 292 - compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_false_LF_mix_CR.txt

expecting success of 0027.293 'compare_files CRLF_nul NNO_attr_-text_aeol_crlf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 293 - compare_files CRLF_nul NNO_attr_-text_aeol_crlf_false_CRLF_nul.txt

expecting success of 0027.294 'compare_files LF NNO_attr_auto_aeol__false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 294 - compare_files LF NNO_attr_auto_aeol__false_LF.txt

expecting success of 0027.295 'compare_files CRLF NNO_attr_auto_aeol__false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 295 - compare_files CRLF NNO_attr_auto_aeol__false_CRLF.txt

expecting success of 0027.296 'compare_files CRLF_mix_LF NNO_attr_auto_aeol__false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 296 - compare_files CRLF_mix_LF NNO_attr_auto_aeol__false_CRLF_mix_LF.txt

expecting success of 0027.297 'compare_files LF_mix_CR NNO_attr_auto_aeol__false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 297 - compare_files LF_mix_CR NNO_attr_auto_aeol__false_LF_mix_CR.txt

expecting success of 0027.298 'compare_files CRLF_nul NNO_attr_auto_aeol__false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 298 - compare_files CRLF_nul NNO_attr_auto_aeol__false_CRLF_nul.txt

expecting success of 0027.299 'compare_files LF NNO_attr_auto_aeol_lf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 299 - compare_files LF NNO_attr_auto_aeol_lf_false_LF.txt

expecting success of 0027.300 'compare_files CRLF NNO_attr_auto_aeol_lf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 300 - compare_files CRLF NNO_attr_auto_aeol_lf_false_CRLF.txt

expecting success of 0027.301 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 301 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_false_CRLF_mix_LF.txt

expecting success of 0027.302 'compare_files LF_mix_CR NNO_attr_auto_aeol_lf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 302 - compare_files LF_mix_CR NNO_attr_auto_aeol_lf_false_LF_mix_CR.txt

expecting success of 0027.303 'compare_files CRLF_nul NNO_attr_auto_aeol_lf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 303 - compare_files CRLF_nul NNO_attr_auto_aeol_lf_false_CRLF_nul.txt

expecting success of 0027.304 'compare_files LF NNO_attr_auto_aeol_crlf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 304 - compare_files LF NNO_attr_auto_aeol_crlf_false_LF.txt

expecting success of 0027.305 'compare_files CRLF NNO_attr_auto_aeol_crlf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 305 - compare_files CRLF NNO_attr_auto_aeol_crlf_false_CRLF.txt

expecting success of 0027.306 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 306 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_false_CRLF_mix_LF.txt

expecting success of 0027.307 'compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 307 - compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_false_LF_mix_CR.txt

expecting success of 0027.308 'compare_files CRLF_nul NNO_attr_auto_aeol_crlf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 308 - compare_files CRLF_nul NNO_attr_auto_aeol_crlf_false_CRLF_nul.txt

expecting success of 0027.309 'compare_files LF NNO_attr_text_aeol__false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 309 - compare_files LF NNO_attr_text_aeol__false_LF.txt

expecting success of 0027.310 'compare_files LF NNO_attr_text_aeol__false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 310 - compare_files LF NNO_attr_text_aeol__false_CRLF.txt

expecting success of 0027.311 'compare_files LF NNO_attr_text_aeol__false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 311 - compare_files LF NNO_attr_text_aeol__false_CRLF_mix_LF.txt

expecting success of 0027.312 'compare_files LF_mix_CR NNO_attr_text_aeol__false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 312 - compare_files LF_mix_CR NNO_attr_text_aeol__false_LF_mix_CR.txt

expecting success of 0027.313 'compare_files LF_nul NNO_attr_text_aeol__false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 313 - compare_files LF_nul NNO_attr_text_aeol__false_CRLF_nul.txt

expecting success of 0027.314 'compare_files LF NNO_attr_text_aeol_lf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 314 - compare_files LF NNO_attr_text_aeol_lf_false_LF.txt

expecting success of 0027.315 'compare_files LF NNO_attr_text_aeol_lf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 315 - compare_files LF NNO_attr_text_aeol_lf_false_CRLF.txt

expecting success of 0027.316 'compare_files LF NNO_attr_text_aeol_lf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 316 - compare_files LF NNO_attr_text_aeol_lf_false_CRLF_mix_LF.txt

expecting success of 0027.317 'compare_files LF_mix_CR NNO_attr_text_aeol_lf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 317 - compare_files LF_mix_CR NNO_attr_text_aeol_lf_false_LF_mix_CR.txt

expecting success of 0027.318 'compare_files LF_nul NNO_attr_text_aeol_lf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 318 - compare_files LF_nul NNO_attr_text_aeol_lf_false_CRLF_nul.txt

expecting success of 0027.319 'compare_files LF NNO_attr_text_aeol_crlf_false_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 319 - compare_files LF NNO_attr_text_aeol_crlf_false_LF.txt

expecting success of 0027.320 'compare_files LF NNO_attr_text_aeol_crlf_false_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 320 - compare_files LF NNO_attr_text_aeol_crlf_false_CRLF.txt

expecting success of 0027.321 'compare_files LF NNO_attr_text_aeol_crlf_false_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 321 - compare_files LF NNO_attr_text_aeol_crlf_false_CRLF_mix_LF.txt

expecting success of 0027.322 'compare_files LF_mix_CR NNO_attr_text_aeol_crlf_false_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 322 - compare_files LF_mix_CR NNO_attr_text_aeol_crlf_false_LF_mix_CR.txt

expecting success of 0027.323 'compare_files LF_nul NNO_attr_text_aeol_crlf_false_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 323 - compare_files LF_nul NNO_attr_text_aeol_crlf_false_CRLF_nul.txt

expecting success of 0027.324 'compare_files LF NNO_attr__aeol__input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 324 - compare_files LF NNO_attr__aeol__input_LF.txt

expecting success of 0027.325 'compare_files CRLF NNO_attr__aeol__input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 325 - compare_files CRLF NNO_attr__aeol__input_CRLF.txt

expecting success of 0027.326 'compare_files CRLF_mix_LF NNO_attr__aeol__input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 326 - compare_files CRLF_mix_LF NNO_attr__aeol__input_CRLF_mix_LF.txt

expecting success of 0027.327 'compare_files LF_mix_CR NNO_attr__aeol__input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 327 - compare_files LF_mix_CR NNO_attr__aeol__input_LF_mix_CR.txt

expecting success of 0027.328 'compare_files CRLF_nul NNO_attr__aeol__input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 328 - compare_files CRLF_nul NNO_attr__aeol__input_CRLF_nul.txt

expecting success of 0027.329 'compare_files LF NNO_attr_-text_aeol__input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 329 - compare_files LF NNO_attr_-text_aeol__input_LF.txt

expecting success of 0027.330 'compare_files CRLF NNO_attr_-text_aeol__input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 330 - compare_files CRLF NNO_attr_-text_aeol__input_CRLF.txt

expecting success of 0027.331 'compare_files CRLF_mix_LF NNO_attr_-text_aeol__input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 331 - compare_files CRLF_mix_LF NNO_attr_-text_aeol__input_CRLF_mix_LF.txt

expecting success of 0027.332 'compare_files LF_mix_CR NNO_attr_-text_aeol__input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 332 - compare_files LF_mix_CR NNO_attr_-text_aeol__input_LF_mix_CR.txt

expecting success of 0027.333 'compare_files CRLF_nul NNO_attr_-text_aeol__input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 333 - compare_files CRLF_nul NNO_attr_-text_aeol__input_CRLF_nul.txt

expecting success of 0027.334 'compare_files LF NNO_attr_-text_aeol_lf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 334 - compare_files LF NNO_attr_-text_aeol_lf_input_LF.txt

expecting success of 0027.335 'compare_files CRLF NNO_attr_-text_aeol_lf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 335 - compare_files CRLF NNO_attr_-text_aeol_lf_input_CRLF.txt

expecting success of 0027.336 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 336 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_lf_input_CRLF_mix_LF.txt

expecting success of 0027.337 'compare_files LF_mix_CR NNO_attr_-text_aeol_lf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 337 - compare_files LF_mix_CR NNO_attr_-text_aeol_lf_input_LF_mix_CR.txt

expecting success of 0027.338 'compare_files CRLF_nul NNO_attr_-text_aeol_lf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 338 - compare_files CRLF_nul NNO_attr_-text_aeol_lf_input_CRLF_nul.txt

expecting success of 0027.339 'compare_files LF NNO_attr_-text_aeol_crlf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 339 - compare_files LF NNO_attr_-text_aeol_crlf_input_LF.txt

expecting success of 0027.340 'compare_files CRLF NNO_attr_-text_aeol_crlf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 340 - compare_files CRLF NNO_attr_-text_aeol_crlf_input_CRLF.txt

expecting success of 0027.341 'compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 341 - compare_files CRLF_mix_LF NNO_attr_-text_aeol_crlf_input_CRLF_mix_LF.txt

expecting success of 0027.342 'compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 342 - compare_files LF_mix_CR NNO_attr_-text_aeol_crlf_input_LF_mix_CR.txt

expecting success of 0027.343 'compare_files CRLF_nul NNO_attr_-text_aeol_crlf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 343 - compare_files CRLF_nul NNO_attr_-text_aeol_crlf_input_CRLF_nul.txt

expecting success of 0027.344 'compare_files LF NNO_attr_auto_aeol__input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 344 - compare_files LF NNO_attr_auto_aeol__input_LF.txt

expecting success of 0027.345 'compare_files CRLF NNO_attr_auto_aeol__input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 345 - compare_files CRLF NNO_attr_auto_aeol__input_CRLF.txt

expecting success of 0027.346 'compare_files CRLF_mix_LF NNO_attr_auto_aeol__input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 346 - compare_files CRLF_mix_LF NNO_attr_auto_aeol__input_CRLF_mix_LF.txt

expecting success of 0027.347 'compare_files LF_mix_CR NNO_attr_auto_aeol__input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 347 - compare_files LF_mix_CR NNO_attr_auto_aeol__input_LF_mix_CR.txt

expecting success of 0027.348 'compare_files CRLF_nul NNO_attr_auto_aeol__input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 348 - compare_files CRLF_nul NNO_attr_auto_aeol__input_CRLF_nul.txt

expecting success of 0027.349 'compare_files LF NNO_attr_auto_aeol_lf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 349 - compare_files LF NNO_attr_auto_aeol_lf_input_LF.txt

expecting success of 0027.350 'compare_files CRLF NNO_attr_auto_aeol_lf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 350 - compare_files CRLF NNO_attr_auto_aeol_lf_input_CRLF.txt

expecting success of 0027.351 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 351 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_lf_input_CRLF_mix_LF.txt

expecting success of 0027.352 'compare_files LF_mix_CR NNO_attr_auto_aeol_lf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 352 - compare_files LF_mix_CR NNO_attr_auto_aeol_lf_input_LF_mix_CR.txt

expecting success of 0027.353 'compare_files CRLF_nul NNO_attr_auto_aeol_lf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 353 - compare_files CRLF_nul NNO_attr_auto_aeol_lf_input_CRLF_nul.txt

expecting success of 0027.354 'compare_files LF NNO_attr_auto_aeol_crlf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 354 - compare_files LF NNO_attr_auto_aeol_crlf_input_LF.txt

expecting success of 0027.355 'compare_files CRLF NNO_attr_auto_aeol_crlf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 355 - compare_files CRLF NNO_attr_auto_aeol_crlf_input_CRLF.txt

expecting success of 0027.356 'compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 356 - compare_files CRLF_mix_LF NNO_attr_auto_aeol_crlf_input_CRLF_mix_LF.txt

expecting success of 0027.357 'compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 357 - compare_files LF_mix_CR NNO_attr_auto_aeol_crlf_input_LF_mix_CR.txt

expecting success of 0027.358 'compare_files CRLF_nul NNO_attr_auto_aeol_crlf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 358 - compare_files CRLF_nul NNO_attr_auto_aeol_crlf_input_CRLF_nul.txt

expecting success of 0027.359 'compare_files LF NNO_attr_text_aeol__input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 359 - compare_files LF NNO_attr_text_aeol__input_LF.txt

expecting success of 0027.360 'compare_files LF NNO_attr_text_aeol__input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 360 - compare_files LF NNO_attr_text_aeol__input_CRLF.txt

expecting success of 0027.361 'compare_files LF NNO_attr_text_aeol__input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 361 - compare_files LF NNO_attr_text_aeol__input_CRLF_mix_LF.txt

expecting success of 0027.362 'compare_files LF_mix_CR NNO_attr_text_aeol__input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 362 - compare_files LF_mix_CR NNO_attr_text_aeol__input_LF_mix_CR.txt

expecting success of 0027.363 'compare_files LF_nul NNO_attr_text_aeol__input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 363 - compare_files LF_nul NNO_attr_text_aeol__input_CRLF_nul.txt

expecting success of 0027.364 'compare_files LF NNO_attr_text_aeol_lf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 364 - compare_files LF NNO_attr_text_aeol_lf_input_LF.txt

expecting success of 0027.365 'compare_files LF NNO_attr_text_aeol_lf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 365 - compare_files LF NNO_attr_text_aeol_lf_input_CRLF.txt

expecting success of 0027.366 'compare_files LF NNO_attr_text_aeol_lf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 366 - compare_files LF NNO_attr_text_aeol_lf_input_CRLF_mix_LF.txt

expecting success of 0027.367 'compare_files LF_mix_CR NNO_attr_text_aeol_lf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 367 - compare_files LF_mix_CR NNO_attr_text_aeol_lf_input_LF_mix_CR.txt

expecting success of 0027.368 'compare_files LF_nul NNO_attr_text_aeol_lf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 368 - compare_files LF_nul NNO_attr_text_aeol_lf_input_CRLF_nul.txt

expecting success of 0027.369 'compare_files LF NNO_attr_text_aeol_crlf_input_LF.txt': 
		compare_files $lfname ${pfx}_LF.txt
	
ok 369 - compare_files LF NNO_attr_text_aeol_crlf_input_LF.txt

expecting success of 0027.370 'compare_files LF NNO_attr_text_aeol_crlf_input_CRLF.txt': 
		compare_files $crlfname ${pfx}_CRLF.txt
	
ok 370 - compare_files LF NNO_attr_text_aeol_crlf_input_CRLF.txt

expecting success of 0027.371 'compare_files LF NNO_attr_text_aeol_crlf_input_CRLF_mix_LF.txt': 
		compare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt
	
ok 371 - compare_files LF NNO_attr_text_aeol_crlf_input_CRLF_mix_LF.txt

expecting success of 0027.372 'compare_files LF_mix_CR NNO_attr_text_aeol_crlf_input_LF_mix_CR.txt': 
		compare_files $lfmixcr ${pfx}_LF_mix_CR.txt
	
ok 372 - compare_files LF_mix_CR NNO_attr_text_aeol_crlf_input_LF_mix_CR.txt

expecting success of 0027.373 'compare_files LF_nul NNO_attr_text_aeol_crlf_input_CRLF_nul.txt': 
		compare_files $crlfnul ${pfx}_CRLF_nul.txt
	
ok 373 - compare_files LF_nul NNO_attr_text_aeol_crlf_input_CRLF_nul.txt

expecting success of 0027.374 'ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 374 - ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.375 'checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 375 - checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.376 'checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 376 - checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.377 'checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 377 - checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.378 'checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 378 - checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.379 'checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 379 - checkout attr=-text  aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.380 'ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 380 - ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.381 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 381 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.382 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 382 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.383 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 383 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.384 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 384 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.385 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 385 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.386 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 386 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.387 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 387 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.388 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 388 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.389 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 389 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.390 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 390 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.391 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 391 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.392 'ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 392 - ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.393 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 393 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.394 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 394 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.395 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 395 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.396 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 396 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.397 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 397 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.398 'ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 398 - ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.399 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 399 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.400 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 400 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.401 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 401 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.402 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 402 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.403 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 403 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.404 'ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 404 - ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.405 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 405 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.406 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 406 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.407 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 407 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.408 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 408 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.409 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 409 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.410 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 410 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.411 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 411 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.412 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 412 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.413 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 413 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.414 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 414 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.415 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 415 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.416 'ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 416 - ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.417 'checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 417 - checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.418 'checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 418 - checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.419 'checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 419 - checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.420 'checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 420 - checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.421 'checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 421 - checkout attr=-text  aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.422 'ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 422 - ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.423 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 423 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.424 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 424 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.425 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 425 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.426 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 426 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.427 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 427 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.428 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 428 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.429 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 429 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.430 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 430 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.431 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 431 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.432 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 432 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.433 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 433 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.434 'ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 434 - ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.435 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 435 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.436 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 436 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.437 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 437 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.438 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 438 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.439 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 439 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.440 'ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 440 - ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.441 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 441 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.442 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 442 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.443 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 443 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.444 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 444 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.445 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 445 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.446 'ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 446 - ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.447 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 447 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.448 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 448 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.449 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 449 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.450 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 450 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.451 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 451 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.452 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 452 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.453 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 453 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.454 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 454 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.455 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 455 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.456 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 456 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.457 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 457 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.458 'ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 458 - ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.459 'checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 459 - checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.460 'checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 460 - checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.461 'checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 461 - checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.462 'checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 462 - checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.463 'checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 463 - checkout attr=-text  aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.464 'ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 464 - ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.465 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 465 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.466 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 466 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.467 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 467 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.468 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 468 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.469 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 469 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.470 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 470 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.471 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 471 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.472 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 472 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.473 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 473 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.474 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 474 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.475 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 475 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.476 'ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 476 - ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.477 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 477 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.478 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 478 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.479 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 479 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.480 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 480 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.481 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 481 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.482 'ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 482 - ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.483 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 483 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.484 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 484 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.485 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 485 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.486 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 486 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.487 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 487 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.488 'ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 488 - ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.489 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 489 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.490 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 490 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.491 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 491 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.492 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 492 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.493 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 493 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.494 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 494 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.495 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 495 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.496 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 496 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.497 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 497 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.498 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 498 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.499 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 499 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.500 'ls-files --eol attr=  aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 500 - ls-files --eol attr=  aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.501 'checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 501 - checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.502 'checkout attr=  aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 502 - checkout attr=  aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.503 'checkout attr=  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 503 - checkout attr=  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.504 'checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 504 - checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.505 'checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 505 - checkout attr=  aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.506 'ls-files --eol attr=  aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 506 - ls-files --eol attr=  aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.507 'checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 507 - checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.508 'checkout attr=  aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 508 - checkout attr=  aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.509 'checkout attr=  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 509 - checkout attr=  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.510 'checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 510 - checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.511 'checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 511 - checkout attr=  aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.512 'ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 512 - ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.513 'checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 513 - checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.514 'checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 514 - checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.515 'checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 515 - checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.516 'checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 516 - checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.517 'checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 517 - checkout attr=auto  aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.518 'ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 518 - ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.519 'checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 519 - checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.520 'checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 520 - checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.521 'checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 521 - checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.522 'checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 522 - checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.523 'checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 523 - checkout attr=text  aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.524 'ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 524 - ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.525 'checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 525 - checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.526 'checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 526 - checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.527 'checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 527 - checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.528 'checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 528 - checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.529 'checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 529 - checkout attr=text  aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.530 'ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 530 - ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.531 'checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 531 - checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.532 'checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 532 - checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.533 'checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 533 - checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.534 'checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 534 - checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.535 'checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 535 - checkout attr=auto  aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.536 'ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 536 - ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.537 'checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 537 - checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.538 'checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 538 - checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.539 'checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 539 - checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.540 'checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 540 - checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.541 'checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 541 - checkout attr=-text  aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.542 'ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 542 - ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.543 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 543 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.544 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 544 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.545 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 545 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.546 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 546 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.547 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 547 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.548 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 548 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.549 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 549 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.550 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 550 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.551 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 551 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.552 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 552 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.553 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 553 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.554 'ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 554 - ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.555 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 555 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.556 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 556 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.557 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 557 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.558 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 558 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.559 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 559 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.560 'ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 560 - ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.561 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 561 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.562 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 562 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.563 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 563 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.564 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 564 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.565 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 565 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.566 'ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 566 - ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.567 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 567 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.568 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 568 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.569 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 569 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.570 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 570 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.571 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 571 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.572 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 572 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.573 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 573 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.574 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 574 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.575 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 575 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.576 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 576 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.577 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 577 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.578 'ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 578 - ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.579 'checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 579 - checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.580 'checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 580 - checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.581 'checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 581 - checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.582 'checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 582 - checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.583 'checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 583 - checkout attr=-text  aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.584 'ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 584 - ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.585 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 585 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.586 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 586 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.587 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 587 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.588 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 588 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.589 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 589 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.590 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 590 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.591 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 591 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.592 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 592 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.593 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 593 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.594 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 594 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.595 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 595 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.596 'ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 596 - ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.597 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 597 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.598 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 598 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.599 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 599 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.600 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 600 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.601 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 601 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.602 'ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 602 - ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.603 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 603 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.604 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 604 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.605 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 605 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.606 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 606 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.607 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 607 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.608 'ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 608 - ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.609 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 609 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.610 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 610 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.611 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 611 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.612 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 612 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.613 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 613 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.614 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 614 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.615 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 615 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.616 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 616 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.617 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 617 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.618 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 618 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.619 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 619 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.620 'ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 620 - ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.621 'checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 621 - checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.622 'checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 622 - checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.623 'checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 623 - checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.624 'checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 624 - checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.625 'checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 625 - checkout attr=-text  aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.626 'ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 626 - ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.627 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 627 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.628 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 628 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.629 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 629 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.630 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 630 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.631 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 631 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.632 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 632 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.633 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 633 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.634 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 634 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.635 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 635 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.636 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 636 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.637 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 637 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.638 'ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 638 - ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.639 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 639 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.640 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 640 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.641 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 641 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.642 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 642 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.643 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 643 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.644 'ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 644 - ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.645 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 645 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.646 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 646 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.647 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 647 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.648 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 648 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.649 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 649 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.650 'ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 650 - ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.651 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 651 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.652 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 652 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.653 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 653 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.654 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 654 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.655 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 655 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.656 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 656 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.657 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 657 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.658 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 658 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.659 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 659 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.660 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 660 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.661 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 661 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.662 'ls-files --eol attr=  aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 662 - ls-files --eol attr=  aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.663 'checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 663 - checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.664 'checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 664 - checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.665 'checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 665 - checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.666 'checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 666 - checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.667 'checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 667 - checkout attr=  aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.668 'ls-files --eol attr=  aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 668 - ls-files --eol attr=  aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.669 'checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 669 - checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.670 'checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 670 - checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.671 'checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 671 - checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.672 'checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 672 - checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.673 'checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 673 - checkout attr=  aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.674 'ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 674 - ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.675 'checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 675 - checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.676 'checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 676 - checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.677 'checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 677 - checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.678 'checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 678 - checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.679 'checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 679 - checkout attr=auto  aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.680 'ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 680 - ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.681 'checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 681 - checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.682 'checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 682 - checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.683 'checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 683 - checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.684 'checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 684 - checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.685 'checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 685 - checkout attr=text  aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.686 'ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 686 - ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.687 'checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 687 - checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.688 'checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 688 - checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.689 'checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 689 - checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.690 'checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 690 - checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.691 'checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 691 - checkout attr=text  aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.692 'ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 692 - ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.693 'checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 693 - checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.694 'checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 694 - checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.695 'checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 695 - checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.696 'checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 696 - checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.697 'checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 697 - checkout attr=auto  aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.698 'ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 698 - ls-files --eol attr=-text  aeol= core.autocrlf=true core.eol=native

expecting success of 0027.699 'checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 699 - checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.700 'checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 700 - checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.701 'checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 701 - checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.702 'checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 702 - checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.703 'checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 703 - checkout attr=-text  aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.704 'ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 704 - ls-files --eol attr=-text  aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.705 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 705 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.706 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 706 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.707 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 707 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.708 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 708 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.709 'checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 709 - checkout attr=-text  aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.710 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 710 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.711 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 711 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.712 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 712 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.713 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 713 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.714 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 714 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.715 'checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 715 - checkout attr=-text  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.716 'ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 716 - ls-files --eol attr=text  aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.717 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 717 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.718 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 718 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.719 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 719 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.720 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 720 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.721 'checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 721 - checkout attr=text  aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.722 'ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 722 - ls-files --eol attr=text  aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.723 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 723 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.724 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 724 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.725 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 725 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.726 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 726 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.727 'checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 727 - checkout attr=text  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.728 'ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 728 - ls-files --eol attr=auto  aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.729 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 729 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.730 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 730 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.731 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 731 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.732 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 732 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.733 'checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 733 - checkout attr=auto  aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.734 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 734 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.735 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 735 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.736 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 736 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.737 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 737 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.738 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 738 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.739 'checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 739 - checkout attr=auto  aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.740 'ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 740 - ls-files --eol attr=-text  aeol= core.autocrlf=false core.eol=native

expecting success of 0027.741 'checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 741 - checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.742 'checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 742 - checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.743 'checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 743 - checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.744 'checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 744 - checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.745 'checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 745 - checkout attr=-text  aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.746 'ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 746 - ls-files --eol attr=-text  aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.747 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 747 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.748 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 748 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.749 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 749 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.750 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 750 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.751 'checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 751 - checkout attr=-text  aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.752 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 752 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.753 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 753 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.754 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 754 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.755 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 755 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.756 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 756 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.757 'checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 757 - checkout attr=-text  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.758 'ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 758 - ls-files --eol attr=text  aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.759 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 759 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.760 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 760 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.761 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 761 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.762 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 762 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.763 'checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 763 - checkout attr=text  aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.764 'ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 764 - ls-files --eol attr=text  aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.765 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 765 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.766 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 766 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.767 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 767 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.768 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 768 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.769 'checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 769 - checkout attr=text  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.770 'ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 770 - ls-files --eol attr=auto  aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.771 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 771 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.772 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 772 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.773 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 773 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.774 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 774 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.775 'checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 775 - checkout attr=auto  aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.776 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 776 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.777 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 777 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.778 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 778 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.779 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 779 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.780 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 780 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.781 'checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 781 - checkout attr=auto  aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.782 'ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 782 - ls-files --eol attr=-text  aeol= core.autocrlf=input core.eol=native

expecting success of 0027.783 'checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 783 - checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.784 'checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 784 - checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.785 'checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 785 - checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.786 'checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 786 - checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.787 'checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 787 - checkout attr=-text  aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.788 'ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 788 - ls-files --eol attr=-text  aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.789 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 789 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.790 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 790 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.791 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 791 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.792 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 792 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.793 'checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 793 - checkout attr=-text  aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.794 'ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 794 - ls-files --eol attr=-text  aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.795 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 795 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.796 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 796 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.797 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 797 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.798 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 798 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.799 'checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 799 - checkout attr=-text  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.800 'ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 800 - ls-files --eol attr=text  aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.801 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 801 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.802 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 802 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.803 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 803 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.804 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 804 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.805 'checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 805 - checkout attr=text  aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.806 'ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 806 - ls-files --eol attr=text  aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.807 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 807 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.808 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 808 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.809 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 809 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.810 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 810 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.811 'checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 811 - checkout attr=text  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.812 'ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 812 - ls-files --eol attr=auto  aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.813 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 813 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.814 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 814 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.815 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 815 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.816 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 816 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.817 'checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 817 - checkout attr=auto  aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.818 'ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 818 - ls-files --eol attr=auto  aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.819 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 819 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.820 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 820 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.821 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 821 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.822 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 822 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.823 'checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 823 - checkout attr=auto  aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.824 'ls-files --eol attr=  aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 824 - ls-files --eol attr=  aeol= core.autocrlf=false core.eol=native

expecting success of 0027.825 'checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 825 - checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.826 'checkout attr=  aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 826 - checkout attr=  aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.827 'checkout attr=  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 827 - checkout attr=  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.828 'checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 828 - checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.829 'checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 829 - checkout attr=  aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.830 'ls-files --eol attr=  aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 830 - ls-files --eol attr=  aeol= core.autocrlf=true core.eol=native

expecting success of 0027.831 'checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 831 - checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.832 'checkout attr=  aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 832 - checkout attr=  aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.833 'checkout attr=  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 833 - checkout attr=  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.834 'checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 834 - checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.835 'checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 835 - checkout attr=  aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.836 'ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 836 - ls-files --eol attr=auto  aeol= core.autocrlf=true core.eol=native

expecting success of 0027.837 'checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 837 - checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.838 'checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 838 - checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.839 'checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 839 - checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.840 'checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 840 - checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.841 'checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 841 - checkout attr=auto  aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.842 'ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 842 - ls-files --eol attr=text  aeol= core.autocrlf=true core.eol=native

expecting success of 0027.843 'checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 843 - checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.844 'checkout attr=text  aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 844 - checkout attr=text  aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.845 'checkout attr=text  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 845 - checkout attr=text  aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.846 'checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 846 - checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.847 'checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 847 - checkout attr=text  aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.848 'ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 848 - ls-files --eol attr=text  aeol= core.autocrlf=input core.eol=native

expecting success of 0027.849 'checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 849 - checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.850 'checkout attr=text  aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 850 - checkout attr=text  aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.851 'checkout attr=text  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 851 - checkout attr=text  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.852 'checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 852 - checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.853 'checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 853 - checkout attr=text  aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.854 'ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 854 - ls-files --eol attr=auto  aeol= core.autocrlf=input core.eol=native

expecting success of 0027.855 'checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 855 - checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.856 'checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 856 - checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.857 'checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 857 - checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.858 'checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 858 - checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.859 'checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 859 - checkout attr=auto  aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.860 'ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 860 - ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.861 'checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 861 - checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.862 'checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 862 - checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.863 'checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 863 - checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.864 'checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 864 - checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.865 'checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 865 - checkout attr=text  aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.866 'ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 866 - ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.867 'checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 867 - checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.868 'checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 868 - checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.869 'checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 869 - checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.870 'checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 870 - checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.871 'checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 871 - checkout attr=text  aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.872 'ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 872 - ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=

expecting success of 0027.873 'checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 873 - checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF

expecting success of 0027.874 'checkout attr=text  aeol= core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 874 - checkout attr=text  aeol= core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.875 'checkout attr=text  aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 875 - checkout attr=text  aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.876 'checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 876 - checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.877 'checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 877 - checkout attr=text  aeol= core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.878 'ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 878 - ls-files --eol attr=text  aeol= core.autocrlf=false core.eol=native

expecting success of 0027.879 'checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 879 - checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.880 'checkout attr=text  aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 880 - checkout attr=text  aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.881 'checkout attr=text  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 881 - checkout attr=text  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.882 'checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 882 - checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.883 'checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 883 - checkout attr=text  aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.884 'ls-files --eol attr=auto  aeol= core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 884 - ls-files --eol attr=auto  aeol= core.autocrlf=false core.eol=

expecting success of 0027.885 'checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 885 - checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF

expecting success of 0027.886 'checkout attr=auto  aeol= core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 886 - checkout attr=auto  aeol= core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.887 'checkout attr=auto  aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 887 - checkout attr=auto  aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.888 'checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 888 - checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.889 'checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 889 - checkout attr=auto  aeol= core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.890 'ls-files --eol attr=auto  aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 890 - ls-files --eol attr=auto  aeol= core.autocrlf=false core.eol=native

expecting success of 0027.891 'checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 891 - checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.892 'checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 892 - checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.893 'checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 893 - checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.894 'checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 894 - checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.895 'checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 895 - checkout attr=auto  aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.896 'ls-files --eol attr=  aeol=lf core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 896 - ls-files --eol attr=  aeol=lf core.autocrlf=false core.eol=

expecting success of 0027.897 'checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 897 - checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF

expecting success of 0027.898 'checkout attr=  aeol=lf core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 898 - checkout attr=  aeol=lf core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.899 'checkout attr=  aeol=lf core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 899 - checkout attr=  aeol=lf core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.900 'checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 900 - checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.901 'checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 901 - checkout attr=  aeol=lf core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.902 'ls-files --eol attr=  aeol=crlf core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 902 - ls-files --eol attr=  aeol=crlf core.autocrlf=false core.eol=

expecting success of 0027.903 'checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 903 - checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF

expecting success of 0027.904 'checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 904 - checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.905 'checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 905 - checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.906 'checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr__ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 906 - checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.907 'checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr__ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 907 - checkout attr=  aeol=crlf core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.908 'ls-files --eol attr=  aeol=lf core.autocrlf=true core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 908 - ls-files --eol attr=  aeol=lf core.autocrlf=true core.eol=

expecting success of 0027.909 'checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF': 
		compare_ws_file eol__crlf_true_attr__ LF    crlf_false_attr__LF.txt
	
ok 909 - checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF

expecting success of 0027.910 'checkout attr=  aeol=lf core.autocrlf=true core.eol= file=CRLF': 
		compare_ws_file eol__crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 910 - checkout attr=  aeol=lf core.autocrlf=true core.eol= file=CRLF

expecting success of 0027.911 'checkout attr=  aeol=lf core.autocrlf=true core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 911 - checkout attr=  aeol=lf core.autocrlf=true core.eol= file=CRLF_mix_LF

expecting success of 0027.912 'checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 912 - checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF_mix_CR

expecting success of 0027.913 'checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 913 - checkout attr=  aeol=lf core.autocrlf=true core.eol= file=LF_nul

expecting success of 0027.914 'ls-files --eol attr=  aeol=crlf core.autocrlf=true core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 914 - ls-files --eol attr=  aeol=crlf core.autocrlf=true core.eol=

expecting success of 0027.915 'checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 915 - checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF

expecting success of 0027.916 'checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=CRLF': 
		compare_ws_file eol__crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 916 - checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=CRLF

expecting success of 0027.917 'checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 917 - checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=CRLF_mix_LF

expecting success of 0027.918 'checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_true_attr__ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 918 - checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF_mix_CR

expecting success of 0027.919 'checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_true_attr__ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 919 - checkout attr=  aeol=crlf core.autocrlf=true core.eol= file=LF_nul

expecting success of 0027.920 'ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 920 - ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.921 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 921 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.922 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 922 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.923 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 923 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.924 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 924 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.925 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 925 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.926 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 926 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.927 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 927 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.928 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 928 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.929 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 929 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.930 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 930 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.931 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 931 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.932 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 932 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.933 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 933 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.934 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 934 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.935 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 935 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.936 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 936 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.937 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 937 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.938 'ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 938 - ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.939 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 939 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.940 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 940 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.941 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 941 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.942 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 942 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.943 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 943 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.944 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 944 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.945 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 945 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.946 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 946 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.947 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 947 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.948 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 948 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.949 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 949 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.950 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 950 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=lf

expecting success of 0027.951 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 951 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.952 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 952 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.953 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 953 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.954 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 954 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.955 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 955 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.956 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 956 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf

expecting success of 0027.957 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 957 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.958 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 958 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.959 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 959 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.960 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 960 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.961 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 961 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.962 'ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 962 - ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.963 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 963 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.964 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 964 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.965 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 965 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.966 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 966 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.967 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 967 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.968 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 968 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.969 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 969 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.970 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 970 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.971 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 971 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.972 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 972 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.973 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 973 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.974 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 974 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.975 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 975 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.976 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 976 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.977 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 977 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.978 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 978 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.979 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 979 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.980 'ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 980 - ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.981 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 981 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.982 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 982 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.983 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 983 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.984 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 984 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.985 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 985 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.986 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 986 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.987 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 987 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.988 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 988 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.989 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 989 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.990 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 990 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.991 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 991 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.992 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 992 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=lf

expecting success of 0027.993 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 993 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.994 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 994 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.995 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 995 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.996 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 996 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.997 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 997 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.998 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 998 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf

expecting success of 0027.999 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 999 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.1000 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1000 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.1001 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1001 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1002 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1002 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.1003 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1003 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.1004 'ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1004 - ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.1005 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1005 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1006 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1006 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1007 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1007 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1008 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1008 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1009 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1009 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1010 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1010 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.1011 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1011 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1012 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1012 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1013 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1013 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1014 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1014 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1015 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1015 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1016 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1016 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.1017 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1017 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1018 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1018 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1019 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1019 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1020 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1020 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1021 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1021 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1022 'ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1022 - ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.1023 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1023 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1024 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1024 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1025 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1025 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1026 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1026 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1027 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1027 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1028 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1028 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.1029 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1029 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1030 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1030 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1031 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1031 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1032 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1032 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1033 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1033 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1034 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1034 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=lf

expecting success of 0027.1035 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1035 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1036 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1036 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1037 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1037 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1038 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1038 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1039 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1039 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1040 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1040 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf

expecting success of 0027.1041 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1041 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1042 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1042 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1043 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1043 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1044 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1044 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1045 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1045 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1046 'ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1046 - ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.1047 'checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 1047 - checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.1048 'checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1048 - checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.1049 'checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1049 - checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1050 'checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1050 - checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.1051 'checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1051 - checkout attr= ident aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.1052 'ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1052 - ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.1053 'checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 1053 - checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.1054 'checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1054 - checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.1055 'checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1055 - checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1056 'checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1056 - checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.1057 'checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1057 - checkout attr= ident aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.1058 'ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1058 - ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.1059 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1059 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.1060 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1060 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.1061 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1061 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1062 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1062 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.1063 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1063 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.1064 'ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1064 - ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=lf

expecting success of 0027.1065 'checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1065 - checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF

expecting success of 0027.1066 'checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1066 - checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=CRLF

expecting success of 0027.1067 'checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1067 - checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1068 'checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1068 - checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF_mix_CR

expecting success of 0027.1069 'checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1069 - checkout attr=text ident aeol= core.autocrlf=true core.eol=lf file=LF_nul

expecting success of 0027.1070 'ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1070 - ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.1071 'checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1071 - checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1072 'checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1072 - checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1073 'checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1073 - checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1074 'checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1074 - checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1075 'checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1075 - checkout attr=text ident aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1076 'ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1076 - ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=lf

expecting success of 0027.1077 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1077 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF

expecting success of 0027.1078 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1078 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=CRLF

expecting success of 0027.1079 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1079 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1080 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1080 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF_mix_CR

expecting success of 0027.1081 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1081 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=lf file=LF_nul

expecting success of 0027.1082 'ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1082 - ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.1083 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1083 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1084 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1084 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1085 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1085 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1086 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1086 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1087 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1087 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1088 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1088 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.1089 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1089 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1090 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1090 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1091 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1091 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1092 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1092 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1093 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1093 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1094 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1094 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.1095 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1095 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1096 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1096 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1097 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1097 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1098 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1098 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1099 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1099 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1100 'ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1100 - ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.1101 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1101 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1102 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1102 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1103 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1103 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1104 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1104 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1105 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1105 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1106 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1106 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.1107 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1107 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1108 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1108 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1109 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1109 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1110 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1110 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1111 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1111 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1112 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1112 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf

expecting success of 0027.1113 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1113 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1114 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1114 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1115 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1115 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1116 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1116 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1117 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1117 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1118 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1118 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf

expecting success of 0027.1119 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1119 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1120 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1120 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1121 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1121 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1122 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1122 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1123 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1123 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1124 'ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1124 - ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.1125 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1125 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1126 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1126 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1127 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1127 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1128 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1128 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1129 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1129 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1130 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1130 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.1131 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1131 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1132 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1132 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1133 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1133 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1134 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1134 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1135 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1135 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1136 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1136 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.1137 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1137 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1138 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1138 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1139 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1139 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1140 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1140 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1141 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1141 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1142 'ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1142 - ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.1143 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1143 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1144 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1144 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1145 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1145 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1146 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1146 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1147 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1147 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1148 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1148 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.1149 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1149 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1150 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1150 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1151 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1151 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1152 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1152 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1153 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1153 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1154 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1154 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf

expecting success of 0027.1155 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1155 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1156 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1156 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1157 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1157 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1158 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1158 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1159 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1159 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1160 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1160 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf

expecting success of 0027.1161 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1161 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1162 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1162 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1163 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1163 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1164 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1164 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1165 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1165 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1166 'ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1166 - ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.1167 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1167 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1168 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1168 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1169 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1169 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1170 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1170 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1171 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1171 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1172 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1172 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.1173 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1173 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1174 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1174 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1175 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1175 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1176 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1176 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1177 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1177 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1178 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1178 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.1179 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1179 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1180 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1180 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1181 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1181 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1182 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1182 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1183 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1183 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1184 'ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1184 - ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.1185 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1185 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1186 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1186 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1187 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1187 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1188 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1188 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1189 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1189 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1190 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1190 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.1191 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1191 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1192 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1192 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1193 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1193 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1194 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1194 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1195 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1195 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1196 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1196 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf

expecting success of 0027.1197 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1197 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1198 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1198 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1199 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1199 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1200 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1200 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1201 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1201 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1202 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1202 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf

expecting success of 0027.1203 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1203 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1204 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1204 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1205 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1205 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1206 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1206 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1207 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1207 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1208 'ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1208 - ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.1209 'checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 1209 - checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1210 'checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1210 - checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1211 'checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1211 - checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1212 'checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1212 - checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1213 'checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1213 - checkout attr= ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1214 'ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1214 - ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.1215 'checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 1215 - checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1216 'checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1216 - checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1217 'checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1217 - checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1218 'checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1218 - checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1219 'checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1219 - checkout attr= ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1220 'ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1220 - ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.1221 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1221 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1222 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1222 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1223 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1223 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1224 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1224 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1225 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1225 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1226 'ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1226 - ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=crlf

expecting success of 0027.1227 'checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1227 - checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF

expecting success of 0027.1228 'checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1228 - checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF

expecting success of 0027.1229 'checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1229 - checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1230 'checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1230 - checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF_mix_CR

expecting success of 0027.1231 'checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1231 - checkout attr=text ident aeol= core.autocrlf=true core.eol=crlf file=LF_nul

expecting success of 0027.1232 'ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1232 - ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.1233 'checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1233 - checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1234 'checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1234 - checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1235 'checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1235 - checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1236 'checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1236 - checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1237 'checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1237 - checkout attr=text ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1238 'ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1238 - ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=crlf

expecting success of 0027.1239 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1239 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF

expecting success of 0027.1240 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1240 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=CRLF

expecting success of 0027.1241 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1241 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1242 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1242 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF_mix_CR

expecting success of 0027.1243 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1243 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=crlf file=LF_nul

expecting success of 0027.1244 'ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1244 - ls-files --eol attr=-text ident aeol= core.autocrlf=true core.eol=native

expecting success of 0027.1245 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1245 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1246 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1246 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1247 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1247 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1248 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1248 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1249 'checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1249 - checkout attr=-text ident aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1250 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1250 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.1251 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1251 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1252 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1252 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1253 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1253 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1254 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1254 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1255 'checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1255 - checkout attr=-text ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1256 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1256 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.1257 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1257 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1258 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1258 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1259 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1259 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1260 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1260 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1261 'checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1261 - checkout attr=-text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1262 'ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1262 - ls-files --eol attr=text ident aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.1263 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1263 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1264 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1264 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1265 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1265 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1266 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1266 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1267 'checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1267 - checkout attr=text ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1268 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1268 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.1269 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1269 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1270 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1270 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1271 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1271 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1272 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1272 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1273 'checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1273 - checkout attr=text ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1274 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1274 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=true core.eol=native

expecting success of 0027.1275 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1275 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1276 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1276 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1277 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1277 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1278 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1278 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1279 'checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1279 - checkout attr=auto ident aeol=lf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1280 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1280 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=true core.eol=native

expecting success of 0027.1281 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1281 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1282 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1282 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1283 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1283 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1284 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1284 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1285 'checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1285 - checkout attr=auto ident aeol=crlf core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1286 'ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1286 - ls-files --eol attr=-text ident aeol= core.autocrlf=false core.eol=native

expecting success of 0027.1287 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1287 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1288 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1288 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1289 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1289 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1290 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1290 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1291 'checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1291 - checkout attr=-text ident aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1292 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1292 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.1293 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1293 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1294 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1294 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1295 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1295 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1296 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1296 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1297 'checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1297 - checkout attr=-text ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1298 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1298 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.1299 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1299 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1300 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1300 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1301 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1301 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1302 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1302 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1303 'checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1303 - checkout attr=-text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1304 'ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1304 - ls-files --eol attr=text ident aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.1305 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1305 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1306 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1306 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1307 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1307 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1308 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1308 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1309 'checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1309 - checkout attr=text ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1310 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1310 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.1311 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1311 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1312 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1312 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1313 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1313 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1314 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1314 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1315 'checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1315 - checkout attr=text ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1316 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1316 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=false core.eol=native

expecting success of 0027.1317 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1317 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1318 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1318 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1319 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1319 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1320 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1320 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1321 'checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1321 - checkout attr=auto ident aeol=lf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1322 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1322 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=false core.eol=native

expecting success of 0027.1323 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1323 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1324 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1324 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1325 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1325 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1326 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1326 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1327 'checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1327 - checkout attr=auto ident aeol=crlf core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1328 'ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1328 - ls-files --eol attr=-text ident aeol= core.autocrlf=input core.eol=native

expecting success of 0027.1329 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1329 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1330 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1330 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1331 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1331 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1332 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1332 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1333 'checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1333 - checkout attr=-text ident aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1334 'ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1334 - ls-files --eol attr=-text ident aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.1335 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1335 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1336 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1336 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1337 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1337 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1338 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1338 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1339 'checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1339 - checkout attr=-text ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1340 'ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1340 - ls-files --eol attr=-text ident aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.1341 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF    crlf_false_attr__LF.txt
	
ok 1341 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1342 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1342 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1343 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_-text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1343 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1344 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1344 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1345 'checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_-text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1345 - checkout attr=-text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1346 'ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1346 - ls-files --eol attr=text ident aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.1347 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1347 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1348 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1348 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1349 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1349 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1350 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1350 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1351 'checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1351 - checkout attr=text ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1352 'ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1352 - ls-files --eol attr=text ident aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.1353 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1353 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1354 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1354 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1355 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1355 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1356 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1356 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1357 'checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1357 - checkout attr=text ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1358 'ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1358 - ls-files --eol attr=auto ident aeol=lf core.autocrlf=input core.eol=native

expecting success of 0027.1359 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1359 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1360 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1360 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1361 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1361 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1362 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1362 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1363 'checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1363 - checkout attr=auto ident aeol=lf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1364 'ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1364 - ls-files --eol attr=auto ident aeol=crlf core.autocrlf=input core.eol=native

expecting success of 0027.1365 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1365 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1366 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1366 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1367 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1367 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1368 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1368 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1369 'checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1369 - checkout attr=auto ident aeol=crlf core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1370 'ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1370 - ls-files --eol attr= ident aeol= core.autocrlf=false core.eol=native

expecting success of 0027.1371 'checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 1371 - checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1372 'checkout attr= ident aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1372 - checkout attr= ident aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1373 'checkout attr= ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1373 - checkout attr= ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1374 'checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1374 - checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1375 'checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1375 - checkout attr= ident aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1376 'ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1376 - ls-files --eol attr= ident aeol= core.autocrlf=true core.eol=native

expecting success of 0027.1377 'checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 1377 - checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1378 'checkout attr= ident aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1378 - checkout attr= ident aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1379 'checkout attr= ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1379 - checkout attr= ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1380 'checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1380 - checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1381 'checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1381 - checkout attr= ident aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1382 'ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1382 - ls-files --eol attr=auto ident aeol= core.autocrlf=true core.eol=native

expecting success of 0027.1383 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF    crlf_false_attr__LF.txt
	
ok 1383 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1384 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1384 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1385 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1385 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1386 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1386 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1387 'checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1387 - checkout attr=auto ident aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1388 'ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1388 - ls-files --eol attr=text ident aeol= core.autocrlf=true core.eol=native

expecting success of 0027.1389 'checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1389 - checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF

expecting success of 0027.1390 'checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1390 - checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=CRLF

expecting success of 0027.1391 'checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1391 - checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=CRLF_mix_LF

expecting success of 0027.1392 'checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1392 - checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF_mix_CR

expecting success of 0027.1393 'checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_true_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1393 - checkout attr=text ident aeol= core.autocrlf=true core.eol=native file=LF_nul

expecting success of 0027.1394 'ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1394 - ls-files --eol attr=text ident aeol= core.autocrlf=input core.eol=native

expecting success of 0027.1395 'checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1395 - checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1396 'checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1396 - checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1397 'checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1397 - checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1398 'checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1398 - checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1399 'checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1399 - checkout attr=text ident aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1400 'ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1400 - ls-files --eol attr=auto ident aeol= core.autocrlf=input core.eol=native

expecting success of 0027.1401 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1401 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF

expecting success of 0027.1402 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1402 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=CRLF

expecting success of 0027.1403 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_input_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1403 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=CRLF_mix_LF

expecting success of 0027.1404 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1404 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF_mix_CR

expecting success of 0027.1405 'checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_input_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1405 - checkout attr=auto ident aeol= core.autocrlf=input core.eol=native file=LF_nul

expecting success of 0027.1406 'ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=crlf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1406 - ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=crlf

expecting success of 0027.1407 'checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF    crlf_false_attr__LF.txt
	
ok 1407 - checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF

expecting success of 0027.1408 'checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1408 - checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF

expecting success of 0027.1409 'checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1409 - checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=CRLF_mix_LF

expecting success of 0027.1410 'checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1410 - checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF_mix_CR

expecting success of 0027.1411 'checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul': 
		compare_ws_file eol_crlf_crlf_false_attr_text_ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1411 - checkout attr=text ident aeol= core.autocrlf=false core.eol=crlf file=LF_nul

expecting success of 0027.1412 'ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=lf': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1412 - ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=lf

expecting success of 0027.1413 'checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1413 - checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF

expecting success of 0027.1414 'checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=CRLF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1414 - checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=CRLF

expecting success of 0027.1415 'checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF': 
		compare_ws_file eol_lf_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1415 - checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=CRLF_mix_LF

expecting success of 0027.1416 'checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1416 - checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF_mix_CR

expecting success of 0027.1417 'checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF_nul': 
		compare_ws_file eol_lf_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1417 - checkout attr=text ident aeol= core.autocrlf=false core.eol=lf file=LF_nul

expecting success of 0027.1418 'ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1418 - ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=

expecting success of 0027.1419 'checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1419 - checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF

expecting success of 0027.1420 'checkout attr=text ident aeol= core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1420 - checkout attr=text ident aeol= core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.1421 'checkout attr=text ident aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1421 - checkout attr=text ident aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.1422 'checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1422 - checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.1423 'checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1423 - checkout attr=text ident aeol= core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.1424 'ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1424 - ls-files --eol attr=text ident aeol= core.autocrlf=false core.eol=native

expecting success of 0027.1425 'checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF    crlf_false_attr__LF.txt
	
ok 1425 - checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1426 'checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1426 - checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1427 'checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_text_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1427 - checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1428 'checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1428 - checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1429 'checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_text_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1429 - checkout attr=text ident aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1430 'ls-files --eol attr=auto ident aeol= core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1430 - ls-files --eol attr=auto ident aeol= core.autocrlf=false core.eol=

expecting success of 0027.1431 'checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1431 - checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF

expecting success of 0027.1432 'checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1432 - checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.1433 'checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1433 - checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.1434 'checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1434 - checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.1435 'checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1435 - checkout attr=auto ident aeol= core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.1436 'ls-files --eol attr=auto ident aeol= core.autocrlf=false core.eol=native': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1436 - ls-files --eol attr=auto ident aeol= core.autocrlf=false core.eol=native

expecting success of 0027.1437 'checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF    crlf_false_attr__LF.txt
	
ok 1437 - checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF

expecting success of 0027.1438 'checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=CRLF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF  crlf_false_attr__CRLF.txt
	
ok 1438 - checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=CRLF

expecting success of 0027.1439 'checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF': 
		compare_ws_file eol_native_crlf_false_attr_auto_ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1439 - checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=CRLF_mix_LF

expecting success of 0027.1440 'checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1440 - checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF_mix_CR

expecting success of 0027.1441 'checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF_nul': 
		compare_ws_file eol_native_crlf_false_attr_auto_ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1441 - checkout attr=auto ident aeol= core.autocrlf=false core.eol=native file=LF_nul

expecting success of 0027.1442 'ls-files --eol attr= ident aeol=lf core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1442 - ls-files --eol attr= ident aeol=lf core.autocrlf=false core.eol=

expecting success of 0027.1443 'checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr__ LF    crlf_false_attr__LF.txt
	
ok 1443 - checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF

expecting success of 0027.1444 'checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1444 - checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.1445 'checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1445 - checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.1446 'checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1446 - checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.1447 'checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1447 - checkout attr= ident aeol=lf core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.1448 'ls-files --eol attr= ident aeol=crlf core.autocrlf=false core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1448 - ls-files --eol attr= ident aeol=crlf core.autocrlf=false core.eol=

expecting success of 0027.1449 'checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 1449 - checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF

expecting success of 0027.1450 'checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=CRLF': 
		compare_ws_file eol__crlf_false_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1450 - checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=CRLF

expecting success of 0027.1451 'checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_false_attr__ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1451 - checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=CRLF_mix_LF

expecting success of 0027.1452 'checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_false_attr__ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1452 - checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF_mix_CR

expecting success of 0027.1453 'checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_false_attr__ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1453 - checkout attr= ident aeol=crlf core.autocrlf=false core.eol= file=LF_nul

expecting success of 0027.1454 'ls-files --eol attr= ident aeol=lf core.autocrlf=true core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1454 - ls-files --eol attr= ident aeol=lf core.autocrlf=true core.eol=

expecting success of 0027.1455 'checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF': 
		compare_ws_file eol__crlf_true_attr__ LF    crlf_false_attr__LF.txt
	
ok 1455 - checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF

expecting success of 0027.1456 'checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=CRLF': 
		compare_ws_file eol__crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1456 - checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=CRLF

expecting success of 0027.1457 'checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF_mix_LF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1457 - checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=CRLF_mix_LF

expecting success of 0027.1458 'checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_true_attr__ LF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1458 - checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF_mix_CR

expecting success of 0027.1459 'checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_true_attr__ LF_nul   crlf_false_attr__LF_nul.txt
	
ok 1459 - checkout attr= ident aeol=lf core.autocrlf=true core.eol= file=LF_nul

expecting success of 0027.1460 'ls-files --eol attr= ident aeol=crlf core.autocrlf=true core.eol=': 
		test_when_finished "rm expect actual" &&
		sort <<-EOF >expect &&
		i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
		i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
		i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
		i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
		i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
		EOF
		git ls-files --eol crlf_false_attr__* >tmp &&
		sed -e "s/	/ /g" -e "s/  */ /g" tmp |
		sort >actual &&
		test_cmp expect actual
	
ok 1460 - ls-files --eol attr= ident aeol=crlf core.autocrlf=true core.eol=

expecting success of 0027.1461 'checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF    crlf_false_attr__LF.txt
	
ok 1461 - checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF

expecting success of 0027.1462 'checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=CRLF': 
		compare_ws_file eol__crlf_true_attr__ CRLF  crlf_false_attr__CRLF.txt
	
ok 1462 - checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=CRLF

expecting success of 0027.1463 'checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=CRLF_mix_LF': 
		compare_ws_file eol__crlf_true_attr__ CRLF crlf_false_attr__CRLF_mix_LF.txt
	
ok 1463 - checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=CRLF_mix_LF

expecting success of 0027.1464 'checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF_mix_CR': 
		compare_ws_file eol__crlf_true_attr__ CRLF_mix_CR   crlf_false_attr__LF_mix_CR.txt
	
ok 1464 - checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF_mix_CR

expecting success of 0027.1465 'checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF_nul': 
		compare_ws_file eol__crlf_true_attr__ CRLF_nul   crlf_false_attr__LF_nul.txt
	
ok 1465 - checkout attr= ident aeol=crlf core.autocrlf=true core.eol= file=LF_nul

expecting success of 0027.1466 'ls-files --eol -d -z': 
	rm crlf_false_attr__CRLF.txt crlf_false_attr__CRLF_mix_LF.txt crlf_false_attr__LF.txt .gitattributes &&
	cat >expect <<-\EOF &&
	i/crlf w/ crlf_false_attr__CRLF.txt
	i/lf w/ .gitattributes
	i/lf w/ crlf_false_attr__LF.txt
	i/mixed w/ crlf_false_attr__CRLF_mix_LF.txt
	EOF
	git ls-files --eol -d >tmp &&
	sed -e "s!attr/[^	]*!!g" -e "s/	/ /g" -e "s/  */ /g" tmp |
	sort >actual &&
	test_cmp expect actual

ok 1466 - ls-files --eol -d -z

# passed all 1466 test(s)
1..1466
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1401-symbolic-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1401-symbolic-ref/.git/
expecting success of 1401.1 'setup': 
	git symbolic-ref HEAD refs/heads/foo &&
	test_commit file &&
	"$TAR" cf .git.tar .git/

[foo (root-commit) 4c1911f] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
ok 1 - setup

expecting success of 1401.2 'symbolic-ref read/write roundtrip': 
	git symbolic-ref HEAD refs/heads/read-write-roundtrip &&
	echo refs/heads/read-write-roundtrip >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual

ok 2 - symbolic-ref read/write roundtrip

expecting success of 1401.3 'symbolic-ref refuses non-ref for HEAD': 
	test_must_fail git symbolic-ref HEAD foo

fatal: Refusing to point HEAD outside of refs/
ok 3 - symbolic-ref refuses non-ref for HEAD

expecting success of 1401.4 'symbolic-ref refuses bare sha1': 
	test_must_fail git symbolic-ref HEAD $(git rev-parse HEAD)

fatal: Refusing to point HEAD outside of refs/
ok 4 - symbolic-ref refuses bare sha1

expecting success of 1401.5 'HEAD cannot be removed': 
	test_must_fail git symbolic-ref -d HEAD

fatal: deleting 'HEAD' is not allowed
ok 5 - HEAD cannot be removed

expecting success of 1401.6 'symbolic-ref can be deleted': 
	git symbolic-ref NOTHEAD refs/heads/foo &&
	git symbolic-ref -d NOTHEAD &&
	git rev-parse refs/heads/foo &&
	test_must_fail git symbolic-ref NOTHEAD

4c1911ffa61819af2268cf7c64ef8f9aa3c96d97
fatal: ref NOTHEAD is not a symbolic ref
ok 6 - symbolic-ref can be deleted

expecting success of 1401.7 'symbolic-ref can delete dangling symref': 
	git symbolic-ref NOTHEAD refs/heads/missing &&
	git symbolic-ref -d NOTHEAD &&
	test_must_fail git rev-parse refs/heads/missing &&
	test_must_fail git symbolic-ref NOTHEAD

fatal: ambiguous argument 'refs/heads/missing': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/missing
fatal: ref NOTHEAD is not a symbolic ref
ok 7 - symbolic-ref can delete dangling symref

expecting success of 1401.8 'symbolic-ref fails to delete missing FOO': 
	echo "fatal: Cannot delete FOO, not a symbolic ref" >expect &&
	test_must_fail git symbolic-ref -d FOO >actual 2>&1 &&
	test_cmp expect actual

ok 8 - symbolic-ref fails to delete missing FOO

expecting success of 1401.9 'symbolic-ref fails to delete real ref': 
	echo "fatal: Cannot delete refs/heads/foo, not a symbolic ref" >expect &&
	test_must_fail git symbolic-ref -d refs/heads/foo >actual 2>&1 &&
	git rev-parse --verify refs/heads/foo &&
	test_cmp expect actual

4c1911ffa61819af2268cf7c64ef8f9aa3c96d97
ok 9 - symbolic-ref fails to delete real ref

expecting success of 1401.10 'create large ref name': 
	# make 256+ character ref; some systems may not handle that,
	# so be gentle
	long=0123456789abcdef &&
	long=$long/$long/$long/$long &&
	long=$long/$long/$long/$long &&
	long_ref=refs/heads/$long &&
	tree=$(git write-tree) &&
	commit=$(echo foo | git commit-tree $tree) &&
	if git update-ref $long_ref $commit; then
		test_set_prereq LONG_REF
	else
		echo >&2 "long refs not supported"
	fi

ok 10 - create large ref name

expecting success of 1401.11 'symbolic-ref can point to large ref name': 
	git symbolic-ref HEAD $long_ref &&
	echo $long_ref >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual

ok 11 - symbolic-ref can point to large ref name

expecting success of 1401.12 'we can parse long symbolic ref': 
	echo $commit >expect &&
	git rev-parse --verify HEAD >actual &&
	test_cmp expect actual

ok 12 - we can parse long symbolic ref

expecting success of 1401.13 'symbolic-ref reports failure in exit code': 
	test_when_finished "rm -f .git/HEAD.lock" &&
	>.git/HEAD.lock &&
	test_must_fail git symbolic-ref HEAD refs/heads/whatever

error: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t1401-symbolic-ref/.git/HEAD.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
ok 13 - symbolic-ref reports failure in exit code

expecting success of 1401.14 'symbolic-ref writes reflog entry': 
	git checkout -b log1 &&
	test_commit one &&
	git checkout -b log2  &&
	test_commit two &&
	git checkout --orphan orphan &&
	git symbolic-ref -m create HEAD refs/heads/log1 &&
	git symbolic-ref -m update HEAD refs/heads/log2 &&
	cat >expect <<-\EOF &&
	update
	create
	EOF
	git log --format=%gs -g -2 >actual &&
	test_cmp expect actual

Switched to a new branch 'log1'
[log1 aaba2f7] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'log2'
[log2 a5e11db] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to a new branch 'orphan'
ok 14 - symbolic-ref writes reflog entry

expecting success of 1401.15 'symbolic-ref does not create ref d/f conflicts': 
	git checkout -b df &&
	test_commit df &&
	test_must_fail git symbolic-ref refs/heads/df/conflict refs/heads/df &&
	git pack-refs --all --prune &&
	test_must_fail git symbolic-ref refs/heads/df/conflict refs/heads/df

Switched to a new branch 'df'
[df b4cb97a] df
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 df.t
error: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t1401-symbolic-ref/.git/refs/heads/df/conflict.lock': Not a directory
error: 'refs/heads/df' exists; cannot create 'refs/heads/df/conflict'
ok 15 - symbolic-ref does not create ref d/f conflicts

expecting success of 1401.16 'symbolic-ref can overwrite pointer to invalid name': 
	test_when_finished reset_to_sane &&
	head=$(git rev-parse HEAD) &&
	git symbolic-ref HEAD refs/heads/outer &&
	test_when_finished "git update-ref -d refs/heads/outer/inner" &&
	git update-ref refs/heads/outer/inner $head &&
	git symbolic-ref HEAD refs/heads/unrelated

ok 16 - symbolic-ref can overwrite pointer to invalid name

expecting success of 1401.17 'symbolic-ref can resolve d/f name (EISDIR)': 
	test_when_finished reset_to_sane &&
	head=$(git rev-parse HEAD) &&
	git symbolic-ref HEAD refs/heads/outer/inner &&
	test_when_finished "git update-ref -d refs/heads/outer" &&
	git update-ref refs/heads/outer $head &&
	echo refs/heads/outer/inner >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual

ok 17 - symbolic-ref can resolve d/f name (EISDIR)

expecting success of 1401.18 'symbolic-ref can resolve d/f name (ENOTDIR)': 
	test_when_finished reset_to_sane &&
	head=$(git rev-parse HEAD) &&
	git symbolic-ref HEAD refs/heads/outer &&
	test_when_finished "git update-ref -d refs/heads/outer/inner" &&
	git update-ref refs/heads/outer/inner $head &&
	echo refs/heads/outer >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual

ok 18 - symbolic-ref can resolve d/f name (ENOTDIR)

expecting success of 1401.19 'symbolic-ref refuses invalid target for non-HEAD': 
	test_must_fail git symbolic-ref refs/heads/invalid foo..bar

fatal: Refusing to set 'refs/heads/invalid' to invalid ref 'foo..bar'
ok 19 - symbolic-ref refuses invalid target for non-HEAD

expecting success of 1401.20 'symbolic-ref allows top-level target for non-HEAD': 
	git symbolic-ref refs/heads/top-level FETCH_HEAD &&
	git update-ref FETCH_HEAD HEAD &&
	test_cmp_rev top-level HEAD

ok 20 - symbolic-ref allows top-level target for non-HEAD

expecting success of 1401.21 'symbolic-ref pointing at another': 
	git update-ref refs/heads/maint-2.37 HEAD &&
	git symbolic-ref refs/heads/maint refs/heads/maint-2.37 &&
	git checkout maint &&

	git symbolic-ref HEAD >actual &&
	echo refs/heads/maint-2.37 >expect &&
	test_cmp expect actual &&

	git symbolic-ref --no-recurse HEAD >actual &&
	echo refs/heads/maint >expect &&
	test_cmp expect actual

Switched to branch 'maint'
ok 21 - symbolic-ref pointing at another

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1402-check-ref-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1402-check-ref-format/.git/
expecting success of 1402.1 'ref name '' is invalid': 
		test_must_fail git check-ref-format  ''
	
ok 1 - ref name '' is invalid

expecting success of 1402.2 'ref name '/' is invalid': 
		test_must_fail git check-ref-format  '/'
	
ok 2 - ref name '/' is invalid

expecting success of 1402.3 'ref name '/' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel '/'
	
ok 3 - ref name '/' is invalid with options --allow-onelevel

expecting success of 1402.4 'ref name '/' is invalid with options --normalize': 
		test_must_fail git check-ref-format --normalize '/'
	
ok 4 - ref name '/' is invalid with options --normalize

expecting success of 1402.5 'ref name '/' is invalid with options --allow-onelevel --normalize': 
		test_must_fail git check-ref-format --allow-onelevel --normalize '/'
	
ok 5 - ref name '/' is invalid with options --allow-onelevel --normalize

expecting success of 1402.6 'ref name 'foo/bar/baz' is valid': 
		git check-ref-format  'foo/bar/baz'
	
ok 6 - ref name 'foo/bar/baz' is valid

expecting success of 1402.7 'ref name 'foo/bar/baz' is valid with options --normalize': 
		git check-ref-format --normalize 'foo/bar/baz'
	
foo/bar/baz
ok 7 - ref name 'foo/bar/baz' is valid with options --normalize

expecting success of 1402.8 'ref name 'refs///heads/foo' is invalid': 
		test_must_fail git check-ref-format  'refs///heads/foo'
	
ok 8 - ref name 'refs///heads/foo' is invalid

expecting success of 1402.9 'ref name 'refs///heads/foo' is valid with options --normalize': 
		git check-ref-format --normalize 'refs///heads/foo'
	
refs/heads/foo
ok 9 - ref name 'refs///heads/foo' is valid with options --normalize

expecting success of 1402.10 'ref name 'heads/foo/' is invalid': 
		test_must_fail git check-ref-format  'heads/foo/'
	
ok 10 - ref name 'heads/foo/' is invalid

expecting success of 1402.11 'ref name '/heads/foo' is invalid': 
		test_must_fail git check-ref-format  '/heads/foo'
	
ok 11 - ref name '/heads/foo' is invalid

expecting success of 1402.12 'ref name '/heads/foo' is valid with options --normalize': 
		git check-ref-format --normalize '/heads/foo'
	
heads/foo
ok 12 - ref name '/heads/foo' is valid with options --normalize

expecting success of 1402.13 'ref name '///heads/foo' is invalid': 
		test_must_fail git check-ref-format  '///heads/foo'
	
ok 13 - ref name '///heads/foo' is invalid

expecting success of 1402.14 'ref name '///heads/foo' is valid with options --normalize': 
		git check-ref-format --normalize '///heads/foo'
	
heads/foo
ok 14 - ref name '///heads/foo' is valid with options --normalize

expecting success of 1402.15 'ref name './foo' is invalid': 
		test_must_fail git check-ref-format  './foo'
	
ok 15 - ref name './foo' is invalid

expecting success of 1402.16 'ref name './foo/bar' is invalid': 
		test_must_fail git check-ref-format  './foo/bar'
	
ok 16 - ref name './foo/bar' is invalid

expecting success of 1402.17 'ref name 'foo/./bar' is invalid': 
		test_must_fail git check-ref-format  'foo/./bar'
	
ok 17 - ref name 'foo/./bar' is invalid

expecting success of 1402.18 'ref name 'foo/bar/.' is invalid': 
		test_must_fail git check-ref-format  'foo/bar/.'
	
ok 18 - ref name 'foo/bar/.' is invalid

expecting success of 1402.19 'ref name '.refs/foo' is invalid': 
		test_must_fail git check-ref-format  '.refs/foo'
	
ok 19 - ref name '.refs/foo' is invalid

expecting success of 1402.20 'ref name 'refs/heads/foo.' is invalid': 
		test_must_fail git check-ref-format  'refs/heads/foo.'
	
ok 20 - ref name 'refs/heads/foo.' is invalid

expecting success of 1402.21 'ref name 'heads/foo..bar' is invalid': 
		test_must_fail git check-ref-format  'heads/foo..bar'
	
ok 21 - ref name 'heads/foo..bar' is invalid

expecting success of 1402.22 'ref name 'heads/foo?bar' is invalid': 
		test_must_fail git check-ref-format  'heads/foo?bar'
	
ok 22 - ref name 'heads/foo?bar' is invalid

expecting success of 1402.23 'ref name 'foo./bar' is valid': 
		git check-ref-format  'foo./bar'
	
ok 23 - ref name 'foo./bar' is valid

expecting success of 1402.24 'ref name 'heads/foo.lock' is invalid': 
		test_must_fail git check-ref-format  'heads/foo.lock'
	
ok 24 - ref name 'heads/foo.lock' is invalid

expecting success of 1402.25 'ref name 'heads///foo.lock' is invalid': 
		test_must_fail git check-ref-format  'heads///foo.lock'
	
ok 25 - ref name 'heads///foo.lock' is invalid

expecting success of 1402.26 'ref name 'foo.lock/bar' is invalid': 
		test_must_fail git check-ref-format  'foo.lock/bar'
	
ok 26 - ref name 'foo.lock/bar' is invalid

expecting success of 1402.27 'ref name 'foo.lock///bar' is invalid': 
		test_must_fail git check-ref-format  'foo.lock///bar'
	
ok 27 - ref name 'foo.lock///bar' is invalid

expecting success of 1402.28 'ref name 'heads/foo@bar' is valid': 
		git check-ref-format  'heads/foo@bar'
	
ok 28 - ref name 'heads/foo@bar' is valid

expecting success of 1402.29 'ref name 'heads/v@{ation' is invalid': 
		test_must_fail git check-ref-format  'heads/v@{ation'
	
ok 29 - ref name 'heads/v@{ation' is invalid

expecting success of 1402.30 'ref name 'heads/foo\bar' is invalid': 
		test_must_fail git check-ref-format  'heads/foo\bar'
	
ok 30 - ref name 'heads/foo\bar' is invalid

expecting success of 1402.31 'ref name 'heads/foo	' is invalid': 
		test_must_fail git check-ref-format  'heads/foo	'
	
ok 31 - ref name 'heads/foo	' is invalid

expecting success of 1402.32 'ref name 'heads/foo' is invalid': 
		test_must_fail git check-ref-format  'heads/foo'
	
ok 32 - ref name 'heads/foo' is invalid

expecting success of 1402.33 'ref name 'heads/fuß' is valid': 
		git check-ref-format  'heads/fuß'
	
ok 33 - ref name 'heads/fuß' is valid

expecting success of 1402.34 'ref name 'heads/*foo/bar' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'heads/*foo/bar'
	
ok 34 - ref name 'heads/*foo/bar' is valid with options --refspec-pattern

expecting success of 1402.35 'ref name 'heads/foo*/bar' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'heads/foo*/bar'
	
ok 35 - ref name 'heads/foo*/bar' is valid with options --refspec-pattern

expecting success of 1402.36 'ref name 'heads/f*o/bar' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'heads/f*o/bar'
	
ok 36 - ref name 'heads/f*o/bar' is valid with options --refspec-pattern

expecting success of 1402.37 'ref name 'heads/f*o*/bar' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern 'heads/f*o*/bar'
	
ok 37 - ref name 'heads/f*o*/bar' is invalid with options --refspec-pattern

expecting success of 1402.38 'ref name 'heads/foo*/bar*' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern 'heads/foo*/bar*'
	
ok 38 - ref name 'heads/foo*/bar*' is invalid with options --refspec-pattern

expecting success of 1402.39 'ref name 'foo' is invalid': 
		test_must_fail git check-ref-format  'foo'
	
ok 39 - ref name 'foo' is invalid

expecting success of 1402.40 'ref name 'foo' is valid with options --allow-onelevel': 
		git check-ref-format --allow-onelevel 'foo'
	
ok 40 - ref name 'foo' is valid with options --allow-onelevel

expecting success of 1402.41 'ref name 'foo' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern 'foo'
	
ok 41 - ref name 'foo' is invalid with options --refspec-pattern

expecting success of 1402.42 'ref name 'foo' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel 'foo'
	
ok 42 - ref name 'foo' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.43 'ref name 'foo' is invalid with options --normalize': 
		test_must_fail git check-ref-format --normalize 'foo'
	
ok 43 - ref name 'foo' is invalid with options --normalize

expecting success of 1402.44 'ref name 'foo' is valid with options --allow-onelevel --normalize': 
		git check-ref-format --allow-onelevel --normalize 'foo'
	
foo
ok 44 - ref name 'foo' is valid with options --allow-onelevel --normalize

expecting success of 1402.45 'ref name 'foo/bar' is valid': 
		git check-ref-format  'foo/bar'
	
ok 45 - ref name 'foo/bar' is valid

expecting success of 1402.46 'ref name 'foo/bar' is valid with options --allow-onelevel': 
		git check-ref-format --allow-onelevel 'foo/bar'
	
ok 46 - ref name 'foo/bar' is valid with options --allow-onelevel

expecting success of 1402.47 'ref name 'foo/bar' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'foo/bar'
	
ok 47 - ref name 'foo/bar' is valid with options --refspec-pattern

expecting success of 1402.48 'ref name 'foo/bar' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel 'foo/bar'
	
ok 48 - ref name 'foo/bar' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.49 'ref name 'foo/bar' is valid with options --normalize': 
		git check-ref-format --normalize 'foo/bar'
	
foo/bar
ok 49 - ref name 'foo/bar' is valid with options --normalize

expecting success of 1402.50 'ref name 'foo/*' is invalid': 
		test_must_fail git check-ref-format  'foo/*'
	
ok 50 - ref name 'foo/*' is invalid

expecting success of 1402.51 'ref name 'foo/*' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel 'foo/*'
	
ok 51 - ref name 'foo/*' is invalid with options --allow-onelevel

expecting success of 1402.52 'ref name 'foo/*' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'foo/*'
	
ok 52 - ref name 'foo/*' is valid with options --refspec-pattern

expecting success of 1402.53 'ref name 'foo/*' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel 'foo/*'
	
ok 53 - ref name 'foo/*' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.54 'ref name '*/foo' is invalid': 
		test_must_fail git check-ref-format  '*/foo'
	
ok 54 - ref name '*/foo' is invalid

expecting success of 1402.55 'ref name '*/foo' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel '*/foo'
	
ok 55 - ref name '*/foo' is invalid with options --allow-onelevel

expecting success of 1402.56 'ref name '*/foo' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern '*/foo'
	
ok 56 - ref name '*/foo' is valid with options --refspec-pattern

expecting success of 1402.57 'ref name '*/foo' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel '*/foo'
	
ok 57 - ref name '*/foo' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.58 'ref name '*/foo' is invalid with options --normalize': 
		test_must_fail git check-ref-format --normalize '*/foo'
	
ok 58 - ref name '*/foo' is invalid with options --normalize

expecting success of 1402.59 'ref name '*/foo' is valid with options --refspec-pattern --normalize': 
		git check-ref-format --refspec-pattern --normalize '*/foo'
	
*/foo
ok 59 - ref name '*/foo' is valid with options --refspec-pattern --normalize

expecting success of 1402.60 'ref name 'foo/*/bar' is invalid': 
		test_must_fail git check-ref-format  'foo/*/bar'
	
ok 60 - ref name 'foo/*/bar' is invalid

expecting success of 1402.61 'ref name 'foo/*/bar' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel 'foo/*/bar'
	
ok 61 - ref name 'foo/*/bar' is invalid with options --allow-onelevel

expecting success of 1402.62 'ref name 'foo/*/bar' is valid with options --refspec-pattern': 
		git check-ref-format --refspec-pattern 'foo/*/bar'
	
ok 62 - ref name 'foo/*/bar' is valid with options --refspec-pattern

expecting success of 1402.63 'ref name 'foo/*/bar' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel 'foo/*/bar'
	
ok 63 - ref name 'foo/*/bar' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.64 'ref name '*' is invalid': 
		test_must_fail git check-ref-format  '*'
	
ok 64 - ref name '*' is invalid

expecting success of 1402.65 'ref name '*' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel '*'
	
ok 65 - ref name '*' is invalid with options --allow-onelevel

expecting success of 1402.66 'ref name '*' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern '*'
	
ok 66 - ref name '*' is invalid with options --refspec-pattern

expecting success of 1402.67 'ref name '*' is valid with options --refspec-pattern --allow-onelevel': 
		git check-ref-format --refspec-pattern --allow-onelevel '*'
	
ok 67 - ref name '*' is valid with options --refspec-pattern --allow-onelevel

expecting success of 1402.68 'ref name 'foo/*/*' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern 'foo/*/*'
	
ok 68 - ref name 'foo/*/*' is invalid with options --refspec-pattern

expecting success of 1402.69 'ref name 'foo/*/*' is invalid with options --refspec-pattern --allow-onelevel': 
		test_must_fail git check-ref-format --refspec-pattern --allow-onelevel 'foo/*/*'
	
ok 69 - ref name 'foo/*/*' is invalid with options --refspec-pattern --allow-onelevel

expecting success of 1402.70 'ref name '*/foo/*' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern '*/foo/*'
	
ok 70 - ref name '*/foo/*' is invalid with options --refspec-pattern

expecting success of 1402.71 'ref name '*/foo/*' is invalid with options --refspec-pattern --allow-onelevel': 
		test_must_fail git check-ref-format --refspec-pattern --allow-onelevel '*/foo/*'
	
ok 71 - ref name '*/foo/*' is invalid with options --refspec-pattern --allow-onelevel

expecting success of 1402.72 'ref name '*/*/foo' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern '*/*/foo'
	
ok 72 - ref name '*/*/foo' is invalid with options --refspec-pattern

expecting success of 1402.73 'ref name '*/*/foo' is invalid with options --refspec-pattern --allow-onelevel': 
		test_must_fail git check-ref-format --refspec-pattern --allow-onelevel '*/*/foo'
	
ok 73 - ref name '*/*/foo' is invalid with options --refspec-pattern --allow-onelevel

expecting success of 1402.74 'ref name '/foo' is invalid': 
		test_must_fail git check-ref-format  '/foo'
	
ok 74 - ref name '/foo' is invalid

expecting success of 1402.75 'ref name '/foo' is invalid with options --allow-onelevel': 
		test_must_fail git check-ref-format --allow-onelevel '/foo'
	
ok 75 - ref name '/foo' is invalid with options --allow-onelevel

expecting success of 1402.76 'ref name '/foo' is invalid with options --refspec-pattern': 
		test_must_fail git check-ref-format --refspec-pattern '/foo'
	
ok 76 - ref name '/foo' is invalid with options --refspec-pattern

expecting success of 1402.77 'ref name '/foo' is invalid with options --refspec-pattern --allow-onelevel': 
		test_must_fail git check-ref-format --refspec-pattern --allow-onelevel '/foo'
	
ok 77 - ref name '/foo' is invalid with options --refspec-pattern --allow-onelevel

expecting success of 1402.78 'ref name '/foo' is invalid with options --normalize': 
		test_must_fail git check-ref-format --normalize '/foo'
	
ok 78 - ref name '/foo' is invalid with options --normalize

expecting success of 1402.79 'ref name '/foo' is valid with options --allow-onelevel --normalize': 
		git check-ref-format --allow-onelevel --normalize '/foo'
	
foo
ok 79 - ref name '/foo' is valid with options --allow-onelevel --normalize

expecting success of 1402.80 'ref name '/foo' is invalid with options --refspec-pattern --normalize': 
		test_must_fail git check-ref-format --refspec-pattern --normalize '/foo'
	
ok 80 - ref name '/foo' is invalid with options --refspec-pattern --normalize

expecting success of 1402.81 'ref name '/foo' is valid with options --refspec-pattern --allow-onelevel --normalize': 
		git check-ref-format --refspec-pattern --allow-onelevel --normalize '/foo'
	
foo
ok 81 - ref name '/foo' is valid with options --refspec-pattern --allow-onelevel --normalize

expecting success of 1402.82 'check-ref-format --branch @{-1}': 
	T=$(git write-tree) &&
	sha1=$(echo A | git commit-tree $T) &&
	git update-ref refs/heads/main $sha1 &&
	git update-ref refs/remotes/origin/main $sha1 &&
	git checkout main &&
	git checkout origin/main &&
	git checkout main &&
	refname=$(git check-ref-format --branch @{-1}) &&
	test "$refname" = "$sha1" &&
	refname2=$(git check-ref-format --branch @{-2}) &&
	test "$refname2" = main
Switched to branch 'main'
Note: switching to 'origin/main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 58052da A
Switched to branch 'main'
ok 82 - check-ref-format --branch @{-1}

expecting success of 1402.83 'check-ref-format --branch -nain': 
	test_must_fail git check-ref-format --branch -nain >actual &&
	test_must_be_empty actual

fatal: '-nain' is not a valid branch name
ok 83 - check-ref-format --branch -nain

expecting success of 1402.84 'check-ref-format --branch from subdir': 
	mkdir subdir &&

	T=$(git write-tree) &&
	sha1=$(echo A | git commit-tree $T) &&
	git update-ref refs/heads/main $sha1 &&
	git update-ref refs/remotes/origin/main $sha1 &&
	git checkout main &&
	git checkout origin/main &&
	git checkout main &&
	refname=$(
		cd subdir &&
		git check-ref-format --branch @{-1}
	) &&
	test "$refname" = "$sha1"

Already on 'main'
Note: switching to 'origin/main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 58052da A
Switched to branch 'main'
ok 84 - check-ref-format --branch from subdir

expecting success of 1402.85 'check-ref-format --branch @{-1} from non-repo': 
	nongit test_must_fail git check-ref-format --branch @{-1} >actual &&
	test_must_be_empty actual

fatal: '@{-1}' is not a valid branch name
ok 85 - check-ref-format --branch @{-1} from non-repo

expecting success of 1402.86 'check-ref-format --branch main from non-repo': 
	echo main >expect &&
	nongit git check-ref-format --branch main >actual &&
	test_cmp expect actual

ok 86 - check-ref-format --branch main from non-repo

expecting success of 1402.87 'ref name 'heads/foo' simplifies to 'heads/foo'': 
		refname=$(git check-ref-format --normalize 'heads/foo') &&
		test "$refname" = 'heads/foo'
	
ok 87 - ref name 'heads/foo' simplifies to 'heads/foo'

expecting success of 1402.88 'ref name 'refs///heads/foo' simplifies to 'refs/heads/foo'': 
		refname=$(git check-ref-format --normalize 'refs///heads/foo') &&
		test "$refname" = 'refs/heads/foo'
	
ok 88 - ref name 'refs///heads/foo' simplifies to 'refs/heads/foo'

expecting success of 1402.89 'ref name '/heads/foo' simplifies to 'heads/foo'': 
		refname=$(git check-ref-format --normalize '/heads/foo') &&
		test "$refname" = 'heads/foo'
	
ok 89 - ref name '/heads/foo' simplifies to 'heads/foo'

expecting success of 1402.90 'ref name '///heads/foo' simplifies to 'heads/foo'': 
		refname=$(git check-ref-format --normalize '///heads/foo') &&
		test "$refname" = 'heads/foo'
	
ok 90 - ref name '///heads/foo' simplifies to 'heads/foo'

expecting success of 1402.91 'check-ref-format --normalize rejects 'foo'': 
		test_must_fail git check-ref-format --normalize 'foo'
	
ok 91 - check-ref-format --normalize rejects 'foo'

expecting success of 1402.92 'check-ref-format --normalize rejects '/foo'': 
		test_must_fail git check-ref-format --normalize '/foo'
	
ok 92 - check-ref-format --normalize rejects '/foo'

expecting success of 1402.93 'check-ref-format --normalize rejects 'heads/foo/../bar'': 
		test_must_fail git check-ref-format --normalize 'heads/foo/../bar'
	
ok 93 - check-ref-format --normalize rejects 'heads/foo/../bar'

expecting success of 1402.94 'check-ref-format --normalize rejects 'heads/./foo'': 
		test_must_fail git check-ref-format --normalize 'heads/./foo'
	
ok 94 - check-ref-format --normalize rejects 'heads/./foo'

expecting success of 1402.95 'check-ref-format --normalize rejects 'heads\foo'': 
		test_must_fail git check-ref-format --normalize 'heads\foo'
	
ok 95 - check-ref-format --normalize rejects 'heads\foo'

expecting success of 1402.96 'check-ref-format --normalize rejects 'heads/foo.lock'': 
		test_must_fail git check-ref-format --normalize 'heads/foo.lock'
	
ok 96 - check-ref-format --normalize rejects 'heads/foo.lock'

expecting success of 1402.97 'check-ref-format --normalize rejects 'heads///foo.lock'': 
		test_must_fail git check-ref-format --normalize 'heads///foo.lock'
	
ok 97 - check-ref-format --normalize rejects 'heads///foo.lock'

expecting success of 1402.98 'check-ref-format --normalize rejects 'foo.lock/bar'': 
		test_must_fail git check-ref-format --normalize 'foo.lock/bar'
	
ok 98 - check-ref-format --normalize rejects 'foo.lock/bar'

expecting success of 1402.99 'check-ref-format --normalize rejects 'foo.lock///bar'': 
		test_must_fail git check-ref-format --normalize 'foo.lock///bar'
	
ok 99 - check-ref-format --normalize rejects 'foo.lock///bar'

# passed all 99 test(s)
1..99
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1400-update-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1400-update-ref/.git/
expecting success of 1400.1 'setup': 
	git checkout --orphan main &&
	create_test_commits "" &&
	mkdir $bare &&
	cd $bare &&
	git init --bare -b main &&
	create_test_commits "bare" &&
	cd -

Switched to a new branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1400-update-ref/bare-repo/
/<<PKGBUILDDIR>>/t/trash directory.t1400-update-ref
ok 1 - setup

expecting success of 1400.2 'create refs/heads/main': 
	git update-ref $m $A &&
	test $A = $(git show-ref -s --verify $m)

ok 2 - create refs/heads/main

expecting success of 1400.3 'create refs/heads/main with oldvalue verification': 
	git update-ref $m $B $A &&
	test $B = $(git show-ref -s --verify $m)

ok 3 - create refs/heads/main with oldvalue verification

expecting success of 1400.4 'fail to delete refs/heads/main with stale ref': 
	test_must_fail git update-ref -d $m $A &&
	test $B = "$(git show-ref -s --verify $m)"

error: cannot lock ref 'refs/heads/main': is at 56d5c1374e8028a1e122ab046ab7b98165342dc4 but expected 102939797ab91a4f201d131418d2c9d919dcdd2c
ok 4 - fail to delete refs/heads/main with stale ref

expecting success of 1400.5 'delete refs/heads/main': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref -d $m $B &&
	test_must_fail git show-ref --verify -q $m

ok 5 - delete refs/heads/main

expecting success of 1400.6 'delete refs/heads/main without oldvalue verification': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref $m $A &&
	test $A = $(git show-ref -s --verify $m) &&
	git update-ref -d $m &&
	test_must_fail git show-ref --verify -q $m

ok 6 - delete refs/heads/main without oldvalue verification

expecting success of 1400.7 'fail to create refs/heads/gu/fixes': 
	test_when_finished "rm -f .git/$n_dir" &&
	touch .git/$n_dir &&
	test_must_fail git update-ref $n $A

fatal: update_ref failed for ref 'refs/heads/gu/fixes': cannot lock ref 'refs/heads/gu/fixes': unable to create lock file .git/refs/heads/gu/fixes.lock; non-directory in the way
ok 7 - fail to create refs/heads/gu/fixes

expecting success of 1400.8 'create refs/heads/main (by HEAD)': 
	git update-ref HEAD $A &&
	test $A = $(git show-ref -s --verify $m)

ok 8 - create refs/heads/main (by HEAD)

expecting success of 1400.9 'create refs/heads/main (by HEAD) with oldvalue verification': 
	git update-ref HEAD $B $A &&
	test $B = $(git show-ref -s --verify $m)

ok 9 - create refs/heads/main (by HEAD) with oldvalue verification

expecting success of 1400.10 'fail to delete refs/heads/main (by HEAD) with stale ref': 
	test_must_fail git update-ref -d HEAD $A &&
	test $B = $(git show-ref -s --verify $m)

error: cannot lock ref 'HEAD': is at 56d5c1374e8028a1e122ab046ab7b98165342dc4 but expected 102939797ab91a4f201d131418d2c9d919dcdd2c
ok 10 - fail to delete refs/heads/main (by HEAD) with stale ref

expecting success of 1400.11 'delete refs/heads/main (by HEAD)': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref -d HEAD $B &&
	test_must_fail git show-ref --verify -q $m

ok 11 - delete refs/heads/main (by HEAD)

expecting success of 1400.12 'deleting current branch adds message to HEAD's log': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref $m $A &&
	git symbolic-ref HEAD $m &&
	git update-ref -m delete-$m -d $m &&
	test_must_fail git show-ref --verify -q $m &&
	grep "delete-$m$" .git/logs/HEAD

102939797ab91a4f201d131418d2c9d919dcdd2c 0000000000000000000000000000000000000000 C O Mitter <committer@example.com> 1112912653 -0700	delete-refs/heads/main
ok 12 - deleting current branch adds message to HEAD's log

expecting success of 1400.13 'deleting by HEAD adds message to HEAD's log': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref $m $A &&
	git symbolic-ref HEAD $m &&
	git update-ref -m delete-by-head -d HEAD &&
	test_must_fail git show-ref --verify -q $m &&
	grep "delete-by-head$" .git/logs/HEAD

102939797ab91a4f201d131418d2c9d919dcdd2c 0000000000000000000000000000000000000000 C O Mitter <committer@example.com> 1112912653 -0700	delete-by-head
ok 13 - deleting by HEAD adds message to HEAD's log

expecting success of 1400.14 'update-ref does not create reflogs by default': 
	test_when_finished "git update-ref -d $outside" &&
	git update-ref $outside $A &&
	git rev-parse $A >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	test_must_fail git reflog exists $outside

ok 14 - update-ref does not create reflogs by default

expecting success of 1400.15 'update-ref creates reflogs with --create-reflog': 
	test_when_finished "git update-ref -d $outside" &&
	git update-ref --create-reflog $outside $A &&
	git rev-parse $A >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	git reflog exists $outside

ok 15 - update-ref creates reflogs with --create-reflog

expecting success of 1400.16 'creates no reflog in bare repository': 
	git -C $bare update-ref $m $bareA &&
	git -C $bare rev-parse $bareA >expect &&
	git -C $bare rev-parse $m >actual &&
	test_cmp expect actual &&
	test_must_fail git -C $bare reflog exists $m

ok 16 - creates no reflog in bare repository

expecting success of 1400.17 'core.logAllRefUpdates=true creates reflog in bare repository': 
	test_when_finished "git -C $bare config --unset core.logAllRefUpdates && \
		rm $bare/logs/$m" &&
	git -C $bare config core.logAllRefUpdates true &&
	git -C $bare update-ref $m $bareB &&
	git -C $bare rev-parse $bareB >expect &&
	git -C $bare rev-parse $m >actual &&
	test_cmp expect actual &&
	git -C $bare reflog exists $m

ok 17 - core.logAllRefUpdates=true creates reflog in bare repository

expecting success of 1400.18 'core.logAllRefUpdates=true does not create reflog by default': 
	test_config core.logAllRefUpdates true &&
	test_when_finished "git update-ref -d $outside" &&
	git update-ref $outside $A &&
	git rev-parse $A >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	test_must_fail git reflog exists $outside

ok 18 - core.logAllRefUpdates=true does not create reflog by default

expecting success of 1400.19 'core.logAllRefUpdates=always creates reflog by default': 
	test_config core.logAllRefUpdates always &&
	test_when_finished "git update-ref -d $outside" &&
	git update-ref $outside $A &&
	git rev-parse $A >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	git reflog exists $outside

ok 19 - core.logAllRefUpdates=always creates reflog by default

expecting success of 1400.20 'core.logAllRefUpdates=always creates reflog for ORIG_HEAD': 
	test_config core.logAllRefUpdates always &&
	git update-ref ORIG_HEAD $A &&
	git reflog exists ORIG_HEAD

ok 20 - core.logAllRefUpdates=always creates reflog for ORIG_HEAD

expecting success of 1400.21 '--no-create-reflog overrides core.logAllRefUpdates=always': 
	test_config core.logAllRefUpdates true &&
	test_when_finished "git update-ref -d $outside" &&
	git update-ref --no-create-reflog $outside $A &&
	git rev-parse $A >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	test_must_fail git reflog exists $outside

ok 21 - --no-create-reflog overrides core.logAllRefUpdates=always

expecting success of 1400.22 'create refs/heads/main (by HEAD)': 
	git update-ref HEAD $A &&
	test $A = $(git show-ref -s --verify $m)

ok 22 - create refs/heads/main (by HEAD)

expecting success of 1400.23 'pack refs': 
	git pack-refs --all

ok 23 - pack refs

expecting success of 1400.24 'move refs/heads/main (by HEAD)': 
	git update-ref HEAD $B $A &&
	test $B = $(git show-ref -s --verify $m)

ok 24 - move refs/heads/main (by HEAD)

expecting success of 1400.25 'delete refs/heads/main (by HEAD) should remove both packed and loose refs/heads/main': 
	test_when_finished "git update-ref -d $m" &&
	git update-ref -d HEAD $B &&
	! grep "$m" .git/packed-refs &&
	test_must_fail git show-ref --verify -q $m

ok 25 - delete refs/heads/main (by HEAD) should remove both packed and loose refs/heads/main

expecting success of 1400.26 'delete symref without dereference': 
	test_when_finished "git update-ref -d $m" &&
	echo foo >foo.c &&
	git add foo.c &&
	git commit -m foo &&
	git symbolic-ref SYMREF $m &&
	git update-ref --no-deref -d SYMREF &&
	git show-ref --verify -q $m &&
	test_must_fail git show-ref --verify -q SYMREF &&
	test_must_fail git symbolic-ref SYMREF

[main (root-commit) fc83d41] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.c
fatal: ref SYMREF is not a symbolic ref
ok 26 - delete symref without dereference

expecting success of 1400.27 'delete symref without dereference when the referred ref is packed': 
	test_when_finished "git update-ref -d $m" &&
	echo foo >foo.c &&
	git add foo.c &&
	git commit -m foo &&
	git symbolic-ref SYMREF $m &&
	git pack-refs --all &&
	git update-ref --no-deref -d SYMREF &&
	git show-ref --verify -q $m &&
	test_must_fail git show-ref --verify -q SYMREF &&
	test_must_fail git symbolic-ref SYMREF

[main (root-commit) fc83d41] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.c
fatal: ref SYMREF is not a symbolic ref
ok 27 - delete symref without dereference when the referred ref is packed

expecting success of 1400.28 'update-ref -d is not confused by self-reference': 
	git symbolic-ref refs/heads/self refs/heads/self &&
	test_when_finished "rm -f .git/refs/heads/self" &&
	test_path_is_file .git/refs/heads/self &&
	test_must_fail git update-ref -d refs/heads/self &&
	test_path_is_file .git/refs/heads/self

error: multiple updates for 'refs/heads/self' (including one via symref 'refs/heads/self') are not allowed
ok 28 - update-ref -d is not confused by self-reference

expecting success of 1400.29 'update-ref --no-deref -d can delete self-reference': 
	git symbolic-ref refs/heads/self refs/heads/self &&
	test_when_finished "rm -f .git/refs/heads/self" &&
	test_path_is_file .git/refs/heads/self &&
	git update-ref --no-deref -d refs/heads/self &&
	test_must_fail git show-ref --verify -q refs/heads/self

ok 29 - update-ref --no-deref -d can delete self-reference

expecting success of 1400.30 'update-ref --no-deref -d can delete reference to bad ref': 
	>.git/refs/heads/bad &&
	test_when_finished "rm -f .git/refs/heads/bad" &&
	git symbolic-ref refs/heads/ref-to-bad refs/heads/bad &&
	test_when_finished "git update-ref -d refs/heads/ref-to-bad" &&
	test_path_is_file .git/refs/heads/ref-to-bad &&
	git update-ref --no-deref -d refs/heads/ref-to-bad &&
	test_must_fail git show-ref --verify -q refs/heads/ref-to-bad

ok 30 - update-ref --no-deref -d can delete reference to bad ref

expecting success of 1400.31 '(not) create HEAD with old sha1': 
	test_must_fail git update-ref HEAD $A $B

fatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/main'
ok 31 - (not) create HEAD with old sha1

expecting success of 1400.32 '(not) prior created .git/refs/heads/main': 
	test_when_finished "git update-ref -d $m" &&
	test_must_fail git show-ref --verify -q $m

ok 32 - (not) prior created .git/refs/heads/main

expecting success of 1400.33 'create HEAD': 
	git update-ref HEAD $A

ok 33 - create HEAD

expecting success of 1400.34 '(not) change HEAD with wrong SHA1': 
	test_must_fail git update-ref HEAD $B $Z

fatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': reference already exists
ok 34 - (not) change HEAD with wrong SHA1

expecting success of 1400.35 '(not) changed .git/refs/heads/main': 
	test_when_finished "git update-ref -d $m" &&
	! test $B = $(git show-ref -s --verify $m)

ok 35 - (not) changed .git/refs/heads/main

expecting success of 1400.36 'create refs/heads/main (logged by touch)': 
	test_config core.logAllRefUpdates false &&
	GIT_COMMITTER_DATE="2005-05-26 23:30" \
	git update-ref --create-reflog HEAD $A -m "Initial Creation" &&
	test $A = $(git show-ref -s --verify $m)

ok 36 - create refs/heads/main (logged by touch)

expecting success of 1400.37 'update refs/heads/main (logged by touch)': 
	test_config core.logAllRefUpdates false &&
	GIT_COMMITTER_DATE="2005-05-26 23:31" \
	git update-ref HEAD $B $A -m "Switch" &&
	test $B = $(git show-ref -s --verify $m)

ok 37 - update refs/heads/main (logged by touch)

expecting success of 1400.38 'set refs/heads/main (logged by touch)': 
	test_config core.logAllRefUpdates false &&
	GIT_COMMITTER_DATE="2005-05-26 23:41" \
	git update-ref HEAD $A &&
	test $A = $(git show-ref -s --verify $m)

ok 38 - set refs/heads/main (logged by touch)

expecting success of 1400.39 'empty directory removal': 
	git branch d1/d2/r1 HEAD &&
	git branch d1/r2 HEAD &&
	test_path_is_file .git/refs/heads/d1/d2/r1 &&
	test_path_is_file .git/logs/refs/heads/d1/d2/r1 &&
	git branch -d d1/d2/r1 &&
	test_must_fail git show-ref --verify -q refs/heads/d1/d2 &&
	test_must_fail git show-ref --verify -q logs/refs/heads/d1/d2 &&
	test_path_is_file .git/refs/heads/d1/r2 &&
	test_path_is_file .git/logs/refs/heads/d1/r2

Deleted branch d1/d2/r1 (was 1029397).
ok 39 - empty directory removal

expecting success of 1400.40 'symref empty directory removal': 
	git branch e1/e2/r1 HEAD &&
	git branch e1/r2 HEAD &&
	git checkout e1/e2/r1 &&
	test_when_finished "git checkout main" &&
	test_path_is_file .git/refs/heads/e1/e2/r1 &&
	test_path_is_file .git/logs/refs/heads/e1/e2/r1 &&
	git update-ref -d HEAD &&
	test_must_fail git show-ref --verify -q refs/heads/e1/e2 &&
	test_must_fail git show-ref --verify -q logs/refs/heads/e1/e2 &&
	test_path_is_file .git/refs/heads/e1/r2 &&
	test_path_is_file .git/logs/refs/heads/e1/r2 &&
	test_path_is_file .git/logs/HEAD

Switched to branch 'e1/e2/r1'
A	foo.c
Switched to branch 'main'
A	foo.c
ok 40 - symref empty directory removal

expecting success of 1400.41 'verifying refs/heads/main's log (logged by touch)': 
	test_when_finished "git update-ref -d $m && rm -rf .git/logs actual expect" &&
	test-tool ref-store main for-each-reflog-ent $m >actual &&
	test_cmp actual expect

ok 41 - verifying refs/heads/main's log (logged by touch)

expecting success of 1400.42 'create refs/heads/main (logged by config)': 
	test_config core.logAllRefUpdates true &&
	GIT_COMMITTER_DATE="2005-05-26 23:32" \
	git update-ref HEAD $A -m "Initial Creation" &&
	test $A = $(git show-ref -s --verify $m)

ok 42 - create refs/heads/main (logged by config)

expecting success of 1400.43 'update refs/heads/main (logged by config)': 
	test_config core.logAllRefUpdates true &&
	GIT_COMMITTER_DATE="2005-05-26 23:33" \
	git update-ref HEAD $B $A -m "Switch" &&
	test $B = $(git show-ref -s --verify $m)

ok 43 - update refs/heads/main (logged by config)

expecting success of 1400.44 'set refs/heads/main (logged by config)': 
	test_config core.logAllRefUpdates true &&
	GIT_COMMITTER_DATE="2005-05-26 23:43" \
	git update-ref HEAD $A &&
	test $A = $(git show-ref -s --verify $m)

ok 44 - set refs/heads/main (logged by config)

expecting success of 1400.45 'verifying refs/heads/main's log (logged by config)': 
	test_when_finished "git update-ref -d $m && rm -rf .git/logs actual expect" &&
	test-tool ref-store main for-each-reflog-ent $m >actual &&
	test_cmp actual expect

ok 45 - verifying refs/heads/main's log (logged by config)

expecting success of 1400.46 'set up for querying the reflog': 
	git update-ref $m $D &&
	cat >.git/logs/$m <<-EOF
	$Z $C $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500
	$C $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150350 -0500
	$A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 -0500
	$F $Z $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150680 -0500
	$Z $E $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150980 -0500
	EOF

ok 46 - set up for querying the reflog

expecting success of 1400.47 'Query "main@{May 25 2005}" (before history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{May 25 2005}" >o 2>e &&
	echo "$C" >expect &&
	test_cmp expect o &&
	echo "warning: log for 'main' only goes back to $ed" >expect &&
	test_cmp expect e

ok 47 - Query "main@{May 25 2005}" (before history)

expecting success of 1400.48 'Query main@{2005-05-25} (before history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify main@{2005-05-25} >o 2>e &&
	echo "$C" >expect &&
	test_cmp expect o &&
	echo "warning: log for 'main' only goes back to $ed" >expect &&
	test_cmp expect e

ok 48 - Query main@{2005-05-25} (before history)

expecting success of 1400.49 'Query "main@{May 26 2005 23:31:59}" (1 second before history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{May 26 2005 23:31:59}" >o 2>e &&
	echo "$C" >expect &&
	test_cmp expect o &&
	echo "warning: log for 'main' only goes back to $ed" >expect &&
	test_cmp expect e

ok 49 - Query "main@{May 26 2005 23:31:59}" (1 second before history)

expecting success of 1400.50 'Query "main@{May 26 2005 23:32:00}" (exactly history start)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{May 26 2005 23:32:00}" >o 2>e &&
	echo "$C" >expect &&
	test_cmp expect o &&
	test_must_be_empty e

ok 50 - Query "main@{May 26 2005 23:32:00}" (exactly history start)

expecting success of 1400.51 'Query "main@{May 26 2005 23:32:30}" (first non-creation change)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{May 26 2005 23:32:30}" >o 2>e &&
	echo "$A" >expect &&
	test_cmp expect o &&
	test_must_be_empty e

ok 51 - Query "main@{May 26 2005 23:32:30}" (first non-creation change)

expecting success of 1400.52 'Query "main@{2005-05-26 23:33:01}" (middle of history with gap)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{2005-05-26 23:33:01}" >o 2>e &&
	echo "$B" >expect &&
	test_cmp expect o &&
	test_i18ngrep -F "warning: log for ref $m has gap after $gd" e

warning: log for ref refs/heads/main has gap after Thu, 26 May 2005 18:33:00 -0500
ok 52 - Query "main@{2005-05-26 23:33:01}" (middle of history with gap)

expecting success of 1400.53 'Query "main@{2005-05-26 23:38:00}" (middle of history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{2005-05-26 23:38:00}" >o 2>e &&
	echo "$Z" >expect &&
	test_cmp expect o &&
	test_must_be_empty e

ok 53 - Query "main@{2005-05-26 23:38:00}" (middle of history)

expecting success of 1400.54 'Query "main@{2005-05-26 23:43:00}" (exact end of history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{2005-05-26 23:43:00}" >o 2>e &&
	echo "$E" >expect &&
	test_cmp expect o &&
	test_must_be_empty e

ok 54 - Query "main@{2005-05-26 23:43:00}" (exact end of history)

expecting success of 1400.55 'Query "main@{2005-05-28}" (past end of history)': 
	test_when_finished "rm -f o e" &&
	git rev-parse --verify "main@{2005-05-28}" >o 2>e &&
	echo "$D" >expect &&
	test_cmp expect o &&
	test_i18ngrep -F "warning: log for ref $m unexpectedly ended on $ld" e

warning: log for ref refs/heads/main unexpectedly ended on Thu, 26 May 2005 18:43:00 -0500
ok 55 - Query "main@{2005-05-28}" (past end of history)

expecting success of 1400.56 'creating initial files': 
	test_when_finished rm -f M &&
	echo TEST >F &&
	git add F &&
	GIT_AUTHOR_DATE="2005-05-26 23:30" \
	GIT_COMMITTER_DATE="2005-05-26 23:30" git commit -m add -a &&
	h_TEST=$(git rev-parse --verify HEAD) &&
	echo The other day this did not work. >M &&
	echo And then Bob told me how to fix it. >>M &&
	echo OTHER >F &&
	GIT_AUTHOR_DATE="2005-05-26 23:41" \
	GIT_COMMITTER_DATE="2005-05-26 23:41" git commit -F M -a &&
	h_OTHER=$(git rev-parse --verify HEAD) &&
	GIT_AUTHOR_DATE="2005-05-26 23:44" \
	GIT_COMMITTER_DATE="2005-05-26 23:44" git commit --amend &&
	h_FIXED=$(git rev-parse --verify HEAD) &&
	echo Merged initial commit and a later commit. >M &&
	echo $h_TEST >.git/MERGE_HEAD &&
	GIT_AUTHOR_DATE="2005-05-26 23:45" \
	GIT_COMMITTER_DATE="2005-05-26 23:45" git commit -F M &&
	h_MERGED=$(git rev-parse --verify HEAD)

[main (root-commit) 0c23f5f] add
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 F
 create mode 100644 foo.c
[main d3968db] The other day this did not work. And then Bob told me how to fix it.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main e66de33] The other day this did not work. And then Bob told me how to fix it.
 Author: A U Thor <author@example.com>
 Date: Thu May 26 23:41:00 2005 +0000
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 29d1ccd] Merged initial commit and a later commit.
 Author: A U Thor <author@example.com>
ok 56 - creating initial files

expecting success of 1400.57 'git commit logged updates': 
	test-tool ref-store main for-each-reflog-ent $m >actual &&
	test_cmp expect actual

ok 57 - git commit logged updates

expecting success of 1400.58 'git cat-file blob main:F (expect OTHER)': 
	test OTHER = $(git cat-file blob main:F)

ok 58 - git cat-file blob main:F (expect OTHER)

expecting success of 1400.59 'git cat-file blob main@{2005-05-26 23:30}:F (expect TEST)': 
	test TEST = $(git cat-file blob "main@{2005-05-26 23:30}:F")

ok 59 - git cat-file blob main@{2005-05-26 23:30}:F (expect TEST)

expecting success of 1400.60 'git cat-file blob main@{2005-05-26 23:42}:F (expect OTHER)': 
	test OTHER = $(git cat-file blob "main@{2005-05-26 23:42}:F")

ok 60 - git cat-file blob main@{2005-05-26 23:42}:F (expect OTHER)

expecting success of 1400.61 'given old value for missing pseudoref, do not create': 
	test_must_fail git update-ref PSEUDOREF $A $B 2>err &&
	test_must_fail git rev-parse PSEUDOREF &&
	test_i18ngrep "unable to resolve reference" err

fatal: ambiguous argument 'PSEUDOREF': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
PSEUDOREF
fatal: update_ref failed for ref 'PSEUDOREF': cannot lock ref 'PSEUDOREF': unable to resolve reference 'PSEUDOREF'
ok 61 - given old value for missing pseudoref, do not create

expecting success of 1400.62 'create pseudoref': 
	git update-ref PSEUDOREF $A &&
	test $A = $(git rev-parse PSEUDOREF)

ok 62 - create pseudoref

expecting success of 1400.63 'overwrite pseudoref with no old value given': 
	git update-ref PSEUDOREF $B &&
	test $B = $(git rev-parse PSEUDOREF)

ok 63 - overwrite pseudoref with no old value given

expecting success of 1400.64 'overwrite pseudoref with correct old value': 
	git update-ref PSEUDOREF $C $B &&
	test $C = $(git rev-parse PSEUDOREF)

ok 64 - overwrite pseudoref with correct old value

expecting success of 1400.65 'do not overwrite pseudoref with wrong old value': 
	test_must_fail git update-ref PSEUDOREF $D $E 2>err &&
	test $C = $(git rev-parse PSEUDOREF) &&
	test_i18ngrep "cannot lock ref.*expected" err

fatal: update_ref failed for ref 'PSEUDOREF': cannot lock ref 'PSEUDOREF': is at 3cceb89b690679aecbe1db39079f99221f1aaaa6 but expected a6166d2809963b1da1148e6922729c21214390c8
ok 65 - do not overwrite pseudoref with wrong old value

expecting success of 1400.66 'delete pseudoref': 
	git update-ref -d PSEUDOREF &&
	test_must_fail git rev-parse PSEUDOREF

fatal: ambiguous argument 'PSEUDOREF': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
PSEUDOREF
ok 66 - delete pseudoref

expecting success of 1400.67 'do not delete pseudoref with wrong old value': 
	git update-ref PSEUDOREF $A &&
	test_must_fail git update-ref -d PSEUDOREF $B 2>err &&
	test $A = $(git rev-parse PSEUDOREF) &&
	test_i18ngrep "cannot lock ref.*expected" err

error: cannot lock ref 'PSEUDOREF': is at 102939797ab91a4f201d131418d2c9d919dcdd2c but expected 56d5c1374e8028a1e122ab046ab7b98165342dc4
ok 67 - do not delete pseudoref with wrong old value

expecting success of 1400.68 'delete pseudoref with correct old value': 
	git update-ref -d PSEUDOREF $A &&
	test_must_fail git rev-parse PSEUDOREF

fatal: ambiguous argument 'PSEUDOREF': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
PSEUDOREF
ok 68 - delete pseudoref with correct old value

expecting success of 1400.69 'create pseudoref with old OID zero': 
	git update-ref PSEUDOREF $A $Z &&
	test $A = $(git rev-parse PSEUDOREF)

ok 69 - create pseudoref with old OID zero

expecting success of 1400.70 'do not overwrite pseudoref with old OID zero': 
	test_when_finished git update-ref -d PSEUDOREF &&
	test_must_fail git update-ref PSEUDOREF $B $Z 2>err &&
	test $A = $(git rev-parse PSEUDOREF) &&
	test_i18ngrep "already exists" err

fatal: update_ref failed for ref 'PSEUDOREF': cannot lock ref 'PSEUDOREF': reference already exists
ok 70 - do not overwrite pseudoref with old OID zero

expecting success of 1400.71 'stdin test setup': 
	echo "$pws" >"$pws" &&
	git add -- "$pws" &&
	git commit -m "$pws"

[main 536da9b] path with space
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 path with space
ok 71 - stdin test setup

expecting success of 1400.72 '-z fails without --stdin': 
	test_must_fail git update-ref -z $m $m $m 2>err &&
	test_i18ngrep "usage: git update-ref" err

usage: git update-ref [<options>] -d <refname> [<old-val>]
ok 72 - -z fails without --stdin

expecting success of 1400.73 'stdin works with no input': 
	>stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse --verify -q $m

536da9bc9e8e6d0baf01b41cf3cc49bb819559e6
ok 73 - stdin works with no input

expecting success of 1400.74 'stdin fails on empty line': 
	echo "" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: empty command in input" err

fatal: empty command in input
ok 74 - stdin fails on empty line

expecting success of 1400.75 'stdin fails on only whitespace': 
	echo " " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: whitespace before command:  " err

fatal: whitespace before command:  
ok 75 - stdin fails on only whitespace

expecting success of 1400.76 'stdin fails on leading whitespace': 
	echo " create $a $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: whitespace before command:  create $a $m" err

fatal: whitespace before command:  create refs/heads/a refs/heads/main
ok 76 - stdin fails on leading whitespace

expecting success of 1400.77 'stdin fails on unknown command': 
	echo "unknown $a" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: unknown command: unknown $a" err

fatal: unknown command: unknown refs/heads/a
ok 77 - stdin fails on unknown command

expecting success of 1400.78 'stdin fails on unbalanced quotes': 
	echo "create $a \"main" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: badly quoted argument: \\\"main" err

fatal: badly quoted argument: "main
ok 78 - stdin fails on unbalanced quotes

expecting success of 1400.79 'stdin fails on invalid escape': 
	echo "create $a \"ma\zn\"" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: badly quoted argument: \\\"ma\\\\zn\\\"" err

fatal: badly quoted argument: "ma\zn"
ok 79 - stdin fails on invalid escape

expecting success of 1400.80 'stdin fails on junk after quoted argument': 
	echo "create \"$a\"main" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: unexpected character after quoted argument: \\\"$a\\\"main" err

fatal: unexpected character after quoted argument: "refs/heads/a"main
ok 80 - stdin fails on junk after quoted argument

expecting success of 1400.81 'stdin fails create with no ref': 
	echo "create " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: create: missing <ref>" err

fatal: create: missing <ref>
ok 81 - stdin fails create with no ref

expecting success of 1400.82 'stdin fails create with no new value': 
	echo "create $a" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: create $a: missing <newvalue>" err

fatal: create refs/heads/a: missing <newvalue>
ok 82 - stdin fails create with no new value

expecting success of 1400.83 'stdin fails create with too many arguments': 
	echo "create $a $m $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: create $a: extra input:  $m" err

fatal: create refs/heads/a: extra input:  refs/heads/main
ok 83 - stdin fails create with too many arguments

expecting success of 1400.84 'stdin fails update with no ref': 
	echo "update " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: update: missing <ref>" err

fatal: update: missing <ref>
ok 84 - stdin fails update with no ref

expecting success of 1400.85 'stdin fails update with no new value': 
	echo "update $a" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: update $a: missing <newvalue>" err

fatal: update refs/heads/a: missing <newvalue>
ok 85 - stdin fails update with no new value

expecting success of 1400.86 'stdin fails update with too many arguments': 
	echo "update $a $m $m $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: update $a: extra input:  $m" err

fatal: update refs/heads/a: extra input:  refs/heads/main
ok 86 - stdin fails update with too many arguments

expecting success of 1400.87 'stdin fails delete with no ref': 
	echo "delete " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: delete: missing <ref>" err

fatal: delete: missing <ref>
ok 87 - stdin fails delete with no ref

expecting success of 1400.88 'stdin fails delete with too many arguments': 
	echo "delete $a $m $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: delete $a: extra input:  $m" err

fatal: delete refs/heads/a: extra input:  refs/heads/main
ok 88 - stdin fails delete with too many arguments

expecting success of 1400.89 'stdin fails verify with too many arguments': 
	echo "verify $a $m $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: verify $a: extra input:  $m" err

fatal: verify refs/heads/a: extra input:  refs/heads/main
ok 89 - stdin fails verify with too many arguments

expecting success of 1400.90 'stdin fails option with unknown name': 
	echo "option unknown" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: option unknown: unknown" err

fatal: option unknown: unknown
ok 90 - stdin fails option with unknown name

expecting success of 1400.91 'stdin fails with duplicate refs': 
	cat >stdin <<-EOF &&
	create $a $m
	create $b $m
	create $a $m
	EOF
	test_must_fail git update-ref --stdin <stdin 2>err &&
	test_i18ngrep "fatal: multiple updates for ref '$a' not allowed" err

fatal: multiple updates for ref 'refs/heads/a' not allowed
ok 91 - stdin fails with duplicate refs

expecting success of 1400.92 'stdin create ref works': 
	echo "create $a $m" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

ok 92 - stdin create ref works

expecting success of 1400.93 'stdin does not create reflogs by default': 
	test_when_finished "git update-ref -d $outside" &&
	echo "create $outside $m" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	test_must_fail git reflog exists $outside

ok 93 - stdin does not create reflogs by default

expecting success of 1400.94 'stdin creates reflogs with --create-reflog': 
	test_when_finished "git update-ref -d $outside" &&
	echo "create $outside $m" >stdin &&
	git update-ref --create-reflog --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $outside >actual &&
	test_cmp expect actual &&
	git reflog exists $outside

ok 94 - stdin creates reflogs with --create-reflog

expecting success of 1400.95 'stdin succeeds with quoted argument': 
	git update-ref -d $a &&
	echo "create $a \"$m\"" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

ok 95 - stdin succeeds with quoted argument

expecting success of 1400.96 'stdin succeeds with escaped character': 
	git update-ref -d $a &&
	echo "create $a \"ma\\151n\"" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

ok 96 - stdin succeeds with escaped character

expecting success of 1400.97 'stdin update ref creates with zero old value': 
	echo "update $b $m $Z" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	git update-ref -d $b

ok 97 - stdin update ref creates with zero old value

expecting success of 1400.98 'stdin update ref creates with empty old value': 
	echo "update $b $m $E" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 98 - stdin update ref creates with empty old value

expecting success of 1400.99 'stdin create ref works with path with space to blob': 
	echo "create refs/blobs/pws \"$m:$pws\"" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse "$m:$pws" >expect &&
	git rev-parse refs/blobs/pws >actual &&
	test_cmp expect actual &&
	git update-ref -d refs/blobs/pws

ok 99 - stdin create ref works with path with space to blob

expecting success of 1400.100 'stdin update ref fails with wrong old value': 
	echo "update $c $m $m~1" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$c'" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: cannot lock ref 'refs/heads/c': unable to resolve reference 'refs/heads/c'
ok 100 - stdin update ref fails with wrong old value

expecting success of 1400.101 'stdin update ref fails with bad old value': 
	echo "update $c $m does-not-exist" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: update $c: invalid <oldvalue>: does-not-exist" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: update refs/heads/c: invalid <oldvalue>: does-not-exist
ok 101 - stdin update ref fails with bad old value

expecting success of 1400.102 'stdin create ref fails with bad new value': 
	echo "create $c does-not-exist" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: create $c: invalid <newvalue>: does-not-exist" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: create refs/heads/c: invalid <newvalue>: does-not-exist
ok 102 - stdin create ref fails with bad new value

expecting success of 1400.103 'stdin create ref fails with zero new value': 
	echo "create $c " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: create $c: zero <newvalue>" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: create refs/heads/c: zero <newvalue>
ok 103 - stdin create ref fails with zero new value

expecting success of 1400.104 'stdin update ref works with right old value': 
	echo "update $b $m~1 $m" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 104 - stdin update ref works with right old value

expecting success of 1400.105 'stdin delete ref fails with wrong old value': 
	echo "delete $a $m~1" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$a'" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/a': is at 536da9bc9e8e6d0baf01b41cf3cc49bb819559e6 but expected 29d1ccdc7ee9fe415beb2415b6206b8a20f76b1c
ok 105 - stdin delete ref fails with wrong old value

expecting success of 1400.106 'stdin delete ref fails with zero old value': 
	echo "delete $a " >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: delete $a: zero <oldvalue>" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

fatal: delete refs/heads/a: zero <oldvalue>
ok 106 - stdin delete ref fails with zero old value

expecting success of 1400.107 'stdin update symref works option no-deref': 
	git symbolic-ref TESTSYMREF $b &&
	cat >stdin <<-EOF &&
	option no-deref
	update TESTSYMREF $a $b
	EOF
	git update-ref --stdin <stdin &&
	git rev-parse TESTSYMREF >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 107 - stdin update symref works option no-deref

expecting success of 1400.108 'stdin delete symref works option no-deref': 
	git symbolic-ref TESTSYMREF $b &&
	cat >stdin <<-EOF &&
	option no-deref
	delete TESTSYMREF $b
	EOF
	git update-ref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q TESTSYMREF &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 108 - stdin delete symref works option no-deref

expecting success of 1400.109 'stdin update symref works flag --no-deref': 
	git symbolic-ref TESTSYMREFONE $b &&
	git symbolic-ref TESTSYMREFTWO $b &&
	cat >stdin <<-EOF &&
	update TESTSYMREFONE $a $b
	update TESTSYMREFTWO $a $b
	EOF
	git update-ref --no-deref --stdin <stdin &&
	git rev-parse TESTSYMREFONE TESTSYMREFTWO >expect &&
	git rev-parse $a $a >actual &&
	test_cmp expect actual &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 109 - stdin update symref works flag --no-deref

expecting success of 1400.110 'stdin delete symref works flag --no-deref': 
	git symbolic-ref TESTSYMREFONE $b &&
	git symbolic-ref TESTSYMREFTWO $b &&
	cat >stdin <<-EOF &&
	delete TESTSYMREFONE $b
	delete TESTSYMREFTWO $b
	EOF
	git update-ref --no-deref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q TESTSYMREFONE &&
	test_must_fail git rev-parse --verify -q TESTSYMREFTWO &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 110 - stdin delete symref works flag --no-deref

expecting success of 1400.111 'stdin delete ref works with right old value': 
	echo "delete $b $m~1" >stdin &&
	git update-ref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q $b

ok 111 - stdin delete ref works with right old value

expecting success of 1400.112 'stdin update/create/verify combination works': 
	cat >stdin <<-EOF &&
	update $a $m
	create $b $m
	verify $c
	EOF
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	test_must_fail git rev-parse --verify -q $c

ok 112 - stdin update/create/verify combination works

expecting success of 1400.113 'stdin verify succeeds for correct value': 
	git rev-parse $m >expect &&
	echo "verify $m $m" >stdin &&
	git update-ref --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

ok 113 - stdin verify succeeds for correct value

expecting success of 1400.114 'stdin verify succeeds for missing reference': 
	echo "verify refs/heads/missing $Z" >stdin &&
	git update-ref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q refs/heads/missing

ok 114 - stdin verify succeeds for missing reference

expecting success of 1400.115 'stdin verify treats no value as missing': 
	echo "verify refs/heads/missing" >stdin &&
	git update-ref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q refs/heads/missing

ok 115 - stdin verify treats no value as missing

expecting success of 1400.116 'stdin verify fails for wrong value': 
	git rev-parse $m >expect &&
	echo "verify $m $m~1" >stdin &&
	test_must_fail git update-ref --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': is at 536da9bc9e8e6d0baf01b41cf3cc49bb819559e6 but expected 29d1ccdc7ee9fe415beb2415b6206b8a20f76b1c
ok 116 - stdin verify fails for wrong value

expecting success of 1400.117 'stdin verify fails for mistaken null value': 
	git rev-parse $m >expect &&
	echo "verify $m $Z" >stdin &&
	test_must_fail git update-ref --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': reference already exists
ok 117 - stdin verify fails for mistaken null value

expecting success of 1400.118 'stdin verify fails for mistaken empty value': 
	M=$(git rev-parse $m) &&
	test_when_finished "git update-ref $m $M" &&
	git rev-parse $m >expect &&
	echo "verify $m" >stdin &&
	test_must_fail git update-ref --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': reference already exists
ok 118 - stdin verify fails for mistaken empty value

expecting success of 1400.119 'stdin update refs works with identity updates': 
	cat >stdin <<-EOF &&
	update $a $m $m
	update $b $m $m
	update $c $Z $E
	EOF
	git update-ref --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	test_must_fail git rev-parse --verify -q $c

ok 119 - stdin update refs works with identity updates

expecting success of 1400.120 'stdin update refs fails with wrong old value': 
	git update-ref $c $m &&
	cat >stdin <<-EOF &&
	update $a $m $m
	update $b $m $m
	update $c  
	EOF
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$c'" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	git rev-parse $c >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/c': reference already exists
ok 120 - stdin update refs fails with wrong old value

expecting success of 1400.121 'stdin delete refs works with packed and loose refs': 
	git pack-refs --all &&
	git update-ref $c $m~1 &&
	cat >stdin <<-EOF &&
	delete $a $m
	update $b $Z $m
	update $c $E $m~1
	EOF
	git update-ref --stdin <stdin &&
	test_must_fail git rev-parse --verify -q $a &&
	test_must_fail git rev-parse --verify -q $b &&
	test_must_fail git rev-parse --verify -q $c

ok 121 - stdin delete refs works with packed and loose refs

expecting success of 1400.122 'stdin -z works on empty input': 
	>stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse --verify -q $m

536da9bc9e8e6d0baf01b41cf3cc49bb819559e6
ok 122 - stdin -z works on empty input

expecting success of 1400.123 'stdin -z fails on empty line': 
	echo "" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: whitespace before command: " err

fatal: whitespace before command: 
ok 123 - stdin -z fails on empty line

expecting success of 1400.124 'stdin -z fails on empty command': 
	printf $F "" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: empty command in input" err

fatal: empty command in input
ok 124 - stdin -z fails on empty command

expecting success of 1400.125 'stdin -z fails on only whitespace': 
	printf $F " " >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: whitespace before command:  " err

fatal: whitespace before command:  
ok 125 - stdin -z fails on only whitespace

expecting success of 1400.126 'stdin -z fails on leading whitespace': 
	printf $F " create $a" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: whitespace before command:  create $a" err

fatal: whitespace before command:  create refs/heads/a
ok 126 - stdin -z fails on leading whitespace

expecting success of 1400.127 'stdin -z fails on unknown command': 
	printf $F "unknown $a" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: unknown command: unknown $a" err

fatal: unknown command: unknown refs/heads/a
ok 127 - stdin -z fails on unknown command

expecting success of 1400.128 'stdin -z fails create with no ref': 
	printf $F "create " >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: create: missing <ref>" err

fatal: create: missing <ref>
ok 128 - stdin -z fails create with no ref

expecting success of 1400.129 'stdin -z fails create with no new value': 
	printf $F "create $a" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: create $a: unexpected end of input when reading <newvalue>" err

fatal: create refs/heads/a: unexpected end of input when reading <newvalue>
ok 129 - stdin -z fails create with no new value

expecting success of 1400.130 'stdin -z fails create with too many arguments': 
	printf $F "create $a" "$m" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: unknown command: $m" err

fatal: unknown command: refs/heads/main
ok 130 - stdin -z fails create with too many arguments

expecting success of 1400.131 'stdin -z fails update with no ref': 
	printf $F "update " >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: update: missing <ref>" err

fatal: update: missing <ref>
ok 131 - stdin -z fails update with no ref

expecting success of 1400.132 'stdin -z fails update with too few args': 
	printf $F "update $a" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: update $a: unexpected end of input when reading <oldvalue>" err

fatal: update refs/heads/a: unexpected end of input when reading <oldvalue>
ok 132 - stdin -z fails update with too few args

expecting success of 1400.133 'stdin -z emits warning with empty new value': 
	git update-ref $a $m &&
	printf $F "update $a" "" "" >stdin &&
	git update-ref -z --stdin <stdin 2>err &&
	grep "warning: update $a: missing <newvalue>, treating as zero" err &&
	test_must_fail git rev-parse --verify -q $a

warning: update refs/heads/a: missing <newvalue>, treating as zero
ok 133 - stdin -z emits warning with empty new value

expecting success of 1400.134 'stdin -z fails update with no new value': 
	printf $F "update $a" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: update $a: unexpected end of input when reading <newvalue>" err

fatal: update refs/heads/a: unexpected end of input when reading <newvalue>
ok 134 - stdin -z fails update with no new value

expecting success of 1400.135 'stdin -z fails update with no old value': 
	printf $F "update $a" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: update $a: unexpected end of input when reading <oldvalue>" err

fatal: update refs/heads/a: unexpected end of input when reading <oldvalue>
ok 135 - stdin -z fails update with no old value

expecting success of 1400.136 'stdin -z fails update with too many arguments': 
	printf $F "update $a" "$m" "$m" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: unknown command: $m" err

fatal: unknown command: refs/heads/main
ok 136 - stdin -z fails update with too many arguments

expecting success of 1400.137 'stdin -z fails delete with no ref': 
	printf $F "delete " >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: delete: missing <ref>" err

fatal: delete: missing <ref>
ok 137 - stdin -z fails delete with no ref

expecting success of 1400.138 'stdin -z fails delete with no old value': 
	printf $F "delete $a" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: delete $a: unexpected end of input when reading <oldvalue>" err

fatal: delete refs/heads/a: unexpected end of input when reading <oldvalue>
ok 138 - stdin -z fails delete with no old value

expecting success of 1400.139 'stdin -z fails delete with too many arguments': 
	printf $F "delete $a" "$m" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: unknown command: $m" err

fatal: unknown command: refs/heads/main
ok 139 - stdin -z fails delete with too many arguments

expecting success of 1400.140 'stdin -z fails verify with too many arguments': 
	printf $F "verify $a" "$m" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: unknown command: $m" err

fatal: unknown command: refs/heads/main
ok 140 - stdin -z fails verify with too many arguments

expecting success of 1400.141 'stdin -z fails verify with no old value': 
	printf $F "verify $a" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: verify $a: unexpected end of input when reading <oldvalue>" err

fatal: verify refs/heads/a: unexpected end of input when reading <oldvalue>
ok 141 - stdin -z fails verify with no old value

expecting success of 1400.142 'stdin -z fails option with unknown name': 
	printf $F "option unknown" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: option unknown: unknown" err

fatal: option unknown: unknown
ok 142 - stdin -z fails option with unknown name

expecting success of 1400.143 'stdin -z fails with duplicate refs': 
	printf $F "create $a" "$m" "create $b" "$m" "create $a" "$m" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	test_i18ngrep "fatal: multiple updates for ref '$a' not allowed" err

fatal: multiple updates for ref 'refs/heads/a' not allowed
ok 143 - stdin -z fails with duplicate refs

expecting success of 1400.144 'stdin -z create ref works': 
	printf $F "create $a" "$m" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

ok 144 - stdin -z create ref works

expecting success of 1400.145 'stdin -z update ref creates with zero old value': 
	printf $F "update $b" "$m" "$Z" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	git update-ref -d $b

ok 145 - stdin -z update ref creates with zero old value

expecting success of 1400.146 'stdin -z update ref creates with empty old value': 
	printf $F "update $b" "$m" "" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 146 - stdin -z update ref creates with empty old value

expecting success of 1400.147 'stdin -z create ref works with path with space to blob': 
	printf $F "create refs/blobs/pws" "$m:$pws" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse "$m:$pws" >expect &&
	git rev-parse refs/blobs/pws >actual &&
	test_cmp expect actual &&
	git update-ref -d refs/blobs/pws

ok 147 - stdin -z create ref works with path with space to blob

expecting success of 1400.148 'stdin -z update ref fails with wrong old value': 
	printf $F "update $c" "$m" "$m~1" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$c'" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: cannot lock ref 'refs/heads/c': unable to resolve reference 'refs/heads/c'
ok 148 - stdin -z update ref fails with wrong old value

expecting success of 1400.149 'stdin -z update ref fails with bad old value': 
	printf $F "update $c" "$m" "does-not-exist" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: update $c: invalid <oldvalue>: does-not-exist" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: update refs/heads/c: invalid <oldvalue>: does-not-exist
ok 149 - stdin -z update ref fails with bad old value

expecting success of 1400.150 'stdin -z create ref fails when ref exists': 
	git update-ref $c $m &&
	git rev-parse "$c" >expect &&
	printf $F "create $c" "$m~1" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$c'" err &&
	git rev-parse "$c" >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/c': reference already exists
ok 150 - stdin -z create ref fails when ref exists

expecting success of 1400.151 'stdin -z create ref fails with bad new value': 
	git update-ref -d "$c" &&
	printf $F "create $c" "does-not-exist" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: create $c: invalid <newvalue>: does-not-exist" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: create refs/heads/c: invalid <newvalue>: does-not-exist
ok 151 - stdin -z create ref fails with bad new value

expecting success of 1400.152 'stdin -z create ref fails with empty new value': 
	printf $F "create $c" "" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: create $c: missing <newvalue>" err &&
	test_must_fail git rev-parse --verify -q $c

fatal: create refs/heads/c: missing <newvalue>
ok 152 - stdin -z create ref fails with empty new value

expecting success of 1400.153 'stdin -z update ref works with right old value': 
	printf $F "update $b" "$m~1" "$m" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 153 - stdin -z update ref works with right old value

expecting success of 1400.154 'stdin -z delete ref fails with wrong old value': 
	printf $F "delete $a" "$m~1" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$a'" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/a': is at 536da9bc9e8e6d0baf01b41cf3cc49bb819559e6 but expected 29d1ccdc7ee9fe415beb2415b6206b8a20f76b1c
ok 154 - stdin -z delete ref fails with wrong old value

expecting success of 1400.155 'stdin -z delete ref fails with zero old value': 
	printf $F "delete $a" "$Z" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: delete $a: zero <oldvalue>" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

fatal: delete refs/heads/a: zero <oldvalue>
ok 155 - stdin -z delete ref fails with zero old value

expecting success of 1400.156 'stdin -z update symref works option no-deref': 
	git symbolic-ref TESTSYMREF $b &&
	printf $F "option no-deref" "update TESTSYMREF" "$a" "$b" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse TESTSYMREF >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 156 - stdin -z update symref works option no-deref

expecting success of 1400.157 'stdin -z delete symref works option no-deref': 
	git symbolic-ref TESTSYMREF $b &&
	printf $F "option no-deref" "delete TESTSYMREF" "$b" >stdin &&
	git update-ref -z --stdin <stdin &&
	test_must_fail git rev-parse --verify -q TESTSYMREF &&
	git rev-parse $m~1 >expect &&
	git rev-parse $b >actual &&
	test_cmp expect actual

ok 157 - stdin -z delete symref works option no-deref

expecting success of 1400.158 'stdin -z delete ref works with right old value': 
	printf $F "delete $b" "$m~1" >stdin &&
	git update-ref -z --stdin <stdin &&
	test_must_fail git rev-parse --verify -q $b

ok 158 - stdin -z delete ref works with right old value

expecting success of 1400.159 'stdin -z update/create/verify combination works': 
	printf $F "update $a" "$m" "" "create $b" "$m" "verify $c" "" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	test_must_fail git rev-parse --verify -q $c

ok 159 - stdin -z update/create/verify combination works

expecting success of 1400.160 'stdin -z verify succeeds for correct value': 
	git rev-parse $m >expect &&
	printf $F "verify $m" "$m" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

ok 160 - stdin -z verify succeeds for correct value

expecting success of 1400.161 'stdin -z verify succeeds for missing reference': 
	printf $F "verify refs/heads/missing" "$Z" >stdin &&
	git update-ref -z --stdin <stdin &&
	test_must_fail git rev-parse --verify -q refs/heads/missing

ok 161 - stdin -z verify succeeds for missing reference

expecting success of 1400.162 'stdin -z verify treats no value as missing': 
	printf $F "verify refs/heads/missing" "" >stdin &&
	git update-ref -z --stdin <stdin &&
	test_must_fail git rev-parse --verify -q refs/heads/missing

ok 162 - stdin -z verify treats no value as missing

expecting success of 1400.163 'stdin -z verify fails for wrong value': 
	git rev-parse $m >expect &&
	printf $F "verify $m" "$m~1" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': is at 536da9bc9e8e6d0baf01b41cf3cc49bb819559e6 but expected 29d1ccdc7ee9fe415beb2415b6206b8a20f76b1c
ok 163 - stdin -z verify fails for wrong value

expecting success of 1400.164 'stdin -z verify fails for mistaken null value': 
	git rev-parse $m >expect &&
	printf $F "verify $m" "$Z" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': reference already exists
ok 164 - stdin -z verify fails for mistaken null value

expecting success of 1400.165 'stdin -z verify fails for mistaken empty value': 
	M=$(git rev-parse $m) &&
	test_when_finished "git update-ref $m $M" &&
	git rev-parse $m >expect &&
	printf $F "verify $m" "" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin &&
	git rev-parse $m >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/main': reference already exists
ok 165 - stdin -z verify fails for mistaken empty value

expecting success of 1400.166 'stdin -z update refs works with identity updates': 
	printf $F "update $a" "$m" "$m" "update $b" "$m" "$m" "update $c" "$Z" "" >stdin &&
	git update-ref -z --stdin <stdin &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	test_must_fail git rev-parse --verify -q $c

ok 166 - stdin -z update refs works with identity updates

expecting success of 1400.167 'stdin -z update refs fails with wrong old value': 
	git update-ref $c $m &&
	printf $F "update $a" "$m" "$m" "update $b" "$m" "$m" "update $c" "$m" "$Z" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: cannot lock ref '$c'" err &&
	git rev-parse $m >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual &&
	git rev-parse $b >actual &&
	test_cmp expect actual &&
	git rev-parse $c >actual &&
	test_cmp expect actual

fatal: cannot lock ref 'refs/heads/c': reference already exists
ok 167 - stdin -z update refs fails with wrong old value

expecting success of 1400.168 'stdin -z delete refs works with packed and loose refs': 
	git pack-refs --all &&
	git update-ref $c $m~1 &&
	printf $F "delete $a" "$m" "update $b" "$Z" "$m" "update $c" "" "$m~1" >stdin &&
	git update-ref -z --stdin <stdin &&
	test_must_fail git rev-parse --verify -q $a &&
	test_must_fail git rev-parse --verify -q $b &&
	test_must_fail git rev-parse --verify -q $c

warning: update refs/heads/c: missing <newvalue>, treating as zero
ok 168 - stdin -z delete refs works with packed and loose refs

expecting success of 1400.169 'fails with duplicate HEAD update': 
	git branch target1 $A &&
	git checkout target1 &&
	cat >stdin <<-EOF &&
	update refs/heads/target1 $C
	option no-deref
	update HEAD $B
	EOF
	test_must_fail git update-ref --stdin <stdin 2>err &&
	test_i18ngrep "fatal: multiple updates for 'HEAD' (including one via its referent .refs/heads/target1.) are not allowed" err &&
	echo "refs/heads/target1" >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual &&
	echo "$A" >expect &&
	git rev-parse refs/heads/target1 >actual &&
	test_cmp expect actual

Switched to branch 'target1'
fatal: multiple updates for 'HEAD' (including one via its referent 'refs/heads/target1') are not allowed
ok 169 - fails with duplicate HEAD update

expecting success of 1400.170 'fails with duplicate ref update via symref': 
	git branch target2 $A &&
	git symbolic-ref refs/heads/symref2 refs/heads/target2 &&
	cat >stdin <<-EOF &&
	update refs/heads/target2 $C
	update refs/heads/symref2 $B
	EOF
	test_must_fail git update-ref --stdin <stdin 2>err &&
	test_i18ngrep "fatal: multiple updates for 'refs/heads/target2' (including one via symref .refs/heads/symref2.) are not allowed" err &&
	echo "refs/heads/target2" >expect &&
	git symbolic-ref refs/heads/symref2 >actual &&
	test_cmp expect actual &&
	echo "$A" >expect &&
	git rev-parse refs/heads/target2 >actual &&
	test_cmp expect actual

fatal: multiple updates for 'refs/heads/target2' (including one via symref 'refs/heads/symref2') are not allowed
ok 170 - fails with duplicate ref update via symref

checking prerequisite: ULIMIT_FILE_DESCRIPTORS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_FILE_DESCRIPTORS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_FILE_DESCRIPTORS" &&
	test_have_prereq !MINGW,!CYGWIN &&
	run_with_limited_open_files true

)
prerequisite ULIMIT_FILE_DESCRIPTORS ok
expecting success of 1400.171 'large transaction creating branches does not burst open file limit': 
(
	for i in $(test_seq 33)
	do
		echo "create refs/heads/$i HEAD" || exit 1
	done >large_input &&
	run_with_limited_open_files git update-ref --stdin <large_input &&
	git rev-parse --verify -q refs/heads/33
)

102939797ab91a4f201d131418d2c9d919dcdd2c
ok 171 - large transaction creating branches does not burst open file limit

expecting success of 1400.172 'large transaction deleting branches does not burst open file limit': 
(
	for i in $(test_seq 33)
	do
		echo "delete refs/heads/$i HEAD" || exit 1
	done >large_input &&
	run_with_limited_open_files git update-ref --stdin <large_input &&
	test_must_fail git rev-parse --verify -q refs/heads/33
)

ok 172 - large transaction deleting branches does not burst open file limit

expecting success of 1400.173 'handle per-worktree refs in refs/bisect': 
	git commit --allow-empty -m "initial commit" &&
	git worktree add -b branch worktree &&
	(
		cd worktree &&
		git commit --allow-empty -m "test commit"  &&
		git for-each-ref >for-each-ref.out &&
		! grep refs/bisect for-each-ref.out &&
		git update-ref refs/bisect/something HEAD &&
		git rev-parse refs/bisect/something >../worktree-head &&
		git for-each-ref | grep refs/bisect/something
	) &&
	git show-ref >actual &&
	! grep refs/bisect actual &&
	test_must_fail git rev-parse refs/bisect/something &&
	git update-ref refs/bisect/something HEAD &&
	git rev-parse refs/bisect/something >main-head &&
	! test_cmp main-head worktree-head

[target1 58a0522] initial commit
 Author: A U Thor <author@example.com>
Preparing worktree (new branch 'branch')
HEAD is now at 58a0522 initial commit
[branch b62e0cb] test commit
 Author: A U Thor <author@example.com>
b62e0cb4990da3244885da90fe7d493334cca9f5 commit	refs/bisect/something
fatal: ambiguous argument 'refs/bisect/something': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/bisect/something
--- main-head	2022-12-28 07:33:49.173928857 +0000
+++ worktree-head	2022-12-28 07:33:49.028923494 +0000
@@ -1 +1 @@
-58a052250c09f010b95ad9bfe32f35d704eda1a0
+b62e0cb4990da3244885da90fe7d493334cca9f5
ok 173 - handle per-worktree refs in refs/bisect

expecting success of 1400.174 'transaction handles empty commit': 
	cat >stdin <<-EOF &&
	start
	prepare
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start prepare commit >expect &&
	test_cmp expect actual

ok 174 - transaction handles empty commit

expecting success of 1400.175 'transaction handles empty commit with missing prepare': 
	cat >stdin <<-EOF &&
	start
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start commit >expect &&
	test_cmp expect actual

ok 175 - transaction handles empty commit with missing prepare

expecting success of 1400.176 'transaction handles sole commit': 
	cat >stdin <<-EOF &&
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" commit >expect &&
	test_cmp expect actual

ok 176 - transaction handles sole commit

expecting success of 1400.177 'transaction handles empty abort': 
	cat >stdin <<-EOF &&
	start
	prepare
	abort
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start prepare abort >expect &&
	test_cmp expect actual

ok 177 - transaction handles empty abort

expecting success of 1400.178 'transaction exits on multiple aborts': 
	cat >stdin <<-EOF &&
	abort
	abort
	EOF
	test_must_fail git update-ref --stdin <stdin >actual 2>err &&
	printf "%s: ok\n" abort >expect &&
	test_cmp expect actual &&
	grep "fatal: transaction is closed" err

fatal: transaction is closed
ok 178 - transaction exits on multiple aborts

expecting success of 1400.179 'transaction exits on start after prepare': 
	cat >stdin <<-EOF &&
	prepare
	start
	EOF
	test_must_fail git update-ref --stdin <stdin 2>err >actual &&
	printf "%s: ok\n" prepare >expect &&
	test_cmp expect actual &&
	grep "fatal: prepared transactions can only be closed" err

fatal: prepared transactions can only be closed
ok 179 - transaction exits on start after prepare

expecting success of 1400.180 'transaction handles empty abort with missing prepare': 
	cat >stdin <<-EOF &&
	start
	abort
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start abort >expect &&
	test_cmp expect actual

ok 180 - transaction handles empty abort with missing prepare

expecting success of 1400.181 'transaction handles sole abort': 
	cat >stdin <<-EOF &&
	abort
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" abort >expect &&
	test_cmp expect actual

ok 181 - transaction handles sole abort

expecting success of 1400.182 'transaction can handle commit': 
	cat >stdin <<-EOF &&
	start
	create $a HEAD
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start commit >expect &&
	test_cmp expect actual &&
	git rev-parse HEAD >expect &&
	git rev-parse $a >actual &&
	test_cmp expect actual

ok 182 - transaction can handle commit

expecting success of 1400.183 'transaction can handle abort': 
	cat >stdin <<-EOF &&
	start
	create $b HEAD
	abort
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start abort >expect &&
	test_cmp expect actual &&
	test_must_fail git show-ref --verify -q $b

ok 183 - transaction can handle abort

expecting success of 1400.184 'transaction aborts by default': 
	cat >stdin <<-EOF &&
	start
	create $b HEAD
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start >expect &&
	test_cmp expect actual &&
	test_must_fail git show-ref --verify -q $b

ok 184 - transaction aborts by default

expecting success of 1400.185 'transaction with prepare aborts by default': 
	cat >stdin <<-EOF &&
	start
	create $b HEAD
	prepare
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start prepare >expect &&
	test_cmp expect actual &&
	test_must_fail git show-ref --verify -q $b

ok 185 - transaction with prepare aborts by default

expecting success of 1400.186 'transaction can commit multiple times': 
	cat >stdin <<-EOF &&
	start
	create refs/heads/branch-1 $A
	commit
	start
	create refs/heads/branch-2 $B
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start commit start commit >expect &&
	test_cmp expect actual &&
	echo "$A" >expect &&
	git rev-parse refs/heads/branch-1 >actual &&
	test_cmp expect actual &&
	echo "$B" >expect &&
	git rev-parse refs/heads/branch-2 >actual &&
	test_cmp expect actual

ok 186 - transaction can commit multiple times

expecting success of 1400.187 'transaction can create and delete': 
	cat >stdin <<-EOF &&
	start
	create refs/heads/create-and-delete $A
	commit
	start
	delete refs/heads/create-and-delete $A
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start commit start commit >expect &&
	test_must_fail git show-ref --verify refs/heads/create-and-delete

fatal: 'refs/heads/create-and-delete' - not a valid ref
ok 187 - transaction can create and delete

expecting success of 1400.188 'transaction can commit after abort': 
	cat >stdin <<-EOF &&
	start
	create refs/heads/abort $A
	abort
	start
	create refs/heads/abort $A
	commit
	EOF
	git update-ref --stdin <stdin >actual &&
	printf "%s: ok\n" start abort start commit >expect &&
	echo "$A" >expect &&
	git rev-parse refs/heads/abort >actual &&
	test_cmp expect actual

ok 188 - transaction can commit after abort

expecting success of 1400.189 'transaction cannot restart ongoing transaction': 
	cat >stdin <<-EOF &&
	start
	create refs/heads/restart $A
	start
	commit
	EOF
	test_must_fail git update-ref --stdin <stdin >actual &&
	test_must_fail git show-ref --verify refs/heads/restart

fatal: cannot restart ongoing transaction
fatal: 'refs/heads/restart' - not a valid ref
ok 189 - transaction cannot restart ongoing transaction

checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
expecting success of 1400.190 'transaction flushes status updates': 
	mkfifo in out &&
	(git update-ref --stdin <in >out &) &&

	exec 9>in &&
	exec 8<out &&
	test_when_finished "exec 9>&-" &&
	test_when_finished "exec 8<&-" &&

	echo "start" >&9 &&
	echo "start: ok" >expected &&
	read line <&8 &&
	echo "$line" >actual &&
	test_cmp expected actual &&

	echo "create refs/heads/flush $A" >&9 &&

	echo prepare >&9 &&
	echo "prepare: ok" >expected &&
	read line <&8 &&
	echo "$line" >actual &&
	test_cmp expected actual &&

	# This must now fail given that we have locked the ref.
	test_must_fail git update-ref refs/heads/flush $B 2>stderr &&
	grep "fatal: update_ref failed for ref ${SQ}refs/heads/flush${SQ}: cannot lock ref" stderr &&

	echo commit >&9 &&
	echo "commit: ok" >expected &&
	read line <&8 &&
	echo "$line" >actual &&
	test_cmp expected actual

fatal: update_ref failed for ref 'refs/heads/flush': cannot lock ref 'refs/heads/flush': Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t1400-update-ref/.git/refs/heads/flush.lock': File exists.
ok 190 - transaction flushes status updates

expecting success of 1400.191 'directory not created deleting packed ref': 
	git branch d1/d2/r1 HEAD &&
	git pack-refs --all &&
	test_path_is_missing .git/refs/heads/d1/d2 &&
	git update-ref -d refs/heads/d1/d2/r1 &&
	test_path_is_missing .git/refs/heads/d1/d2 &&
	test_path_is_missing .git/refs/heads/d1

ok 191 - directory not created deleting packed ref

# passed all 191 test(s)
1..191
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1403-show-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1403-show-ref/.git/
expecting success of 1403.1 'setup': 
	test_commit --annotate A &&
	git checkout -b side &&
	test_commit --annotate B &&
	git checkout main &&
	test_commit C &&
	git branch B A^0

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'side'
[side 72702e6] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to branch 'main'
[main b75428b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
ok 1 - setup

expecting success of 1403.2 'show-ref': 
	echo $(git rev-parse refs/tags/A) refs/tags/A >expect &&

	git show-ref A >actual &&
	test_cmp expect actual &&

	git show-ref tags/A >actual &&
	test_cmp expect actual &&

	git show-ref refs/tags/A >actual &&
	test_cmp expect actual &&

	test_must_fail git show-ref D >actual &&
	test_must_be_empty actual

ok 2 - show-ref

expecting success of 1403.3 'show-ref -q': 
	git show-ref -q A >actual &&
	test_must_be_empty actual &&

	git show-ref -q tags/A >actual &&
	test_must_be_empty actual &&

	git show-ref -q refs/tags/A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref -q D >actual &&
	test_must_be_empty actual

ok 3 - show-ref -q

expecting success of 1403.4 'show-ref --verify': 
	echo $(git rev-parse refs/tags/A) refs/tags/A >expect &&

	git show-ref --verify refs/tags/A >actual &&
	test_cmp expect actual &&

	test_must_fail git show-ref --verify A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify tags/A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify D >actual &&
	test_must_be_empty actual

fatal: 'A' - not a valid ref
fatal: 'tags/A' - not a valid ref
fatal: 'D' - not a valid ref
ok 4 - show-ref --verify

expecting success of 1403.5 'show-ref --verify -q': 
	git show-ref --verify -q refs/tags/A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify -q A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify -q tags/A >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify -q D >actual &&
	test_must_be_empty actual

ok 5 - show-ref --verify -q

expecting success of 1403.6 'show-ref -d': 
	{
		echo $(git rev-parse refs/tags/A) refs/tags/A &&
		echo $(git rev-parse refs/tags/A^0) "refs/tags/A^{}" &&
		echo $(git rev-parse refs/tags/C) refs/tags/C
	} >expect &&
	git show-ref -d A C >actual &&
	test_cmp expect actual &&

	git show-ref -d tags/A tags/C >actual &&
	test_cmp expect actual &&

	git show-ref -d refs/tags/A refs/tags/C >actual &&
	test_cmp expect actual &&

	git show-ref --verify -d refs/tags/A refs/tags/C >actual &&
	test_cmp expect actual &&

	echo $(git rev-parse refs/heads/main) refs/heads/main >expect &&
	git show-ref -d main >actual &&
	test_cmp expect actual &&

	git show-ref -d heads/main >actual &&
	test_cmp expect actual &&

	git show-ref -d refs/heads/main >actual &&
	test_cmp expect actual &&

	git show-ref -d --verify refs/heads/main >actual &&
	test_cmp expect actual &&

	test_must_fail git show-ref -d --verify main >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref -d --verify heads/main >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify -d A C >actual &&
	test_must_be_empty actual &&

	test_must_fail git show-ref --verify -d tags/A tags/C >actual &&
	test_must_be_empty actual


fatal: 'main' - not a valid ref
fatal: 'heads/main' - not a valid ref
fatal: 'A' - not a valid ref
fatal: 'tags/A' - not a valid ref
ok 6 - show-ref -d

expecting success of 1403.7 'show-ref --heads, --tags, --head, pattern': 
	for branch in B main side
	do
		echo $(git rev-parse refs/heads/$branch) refs/heads/$branch || return 1
	done >expect.heads &&
	git show-ref --heads >actual &&
	test_cmp expect.heads actual &&

	for tag in A B C
	do
		echo $(git rev-parse refs/tags/$tag) refs/tags/$tag || return 1
	done >expect.tags &&
	git show-ref --tags >actual &&
	test_cmp expect.tags actual &&

	cat expect.heads expect.tags >expect &&
	git show-ref --heads --tags >actual &&
	test_cmp expect actual &&

	{
		echo $(git rev-parse HEAD) HEAD &&
		cat expect.heads expect.tags
	} >expect &&
	git show-ref --heads --tags --head >actual &&
	test_cmp expect actual &&

	{
		echo $(git rev-parse HEAD) HEAD &&
		echo $(git rev-parse refs/heads/B) refs/heads/B &&
		echo $(git rev-parse refs/tags/B) refs/tags/B
	} >expect &&
	git show-ref --head B >actual &&
	test_cmp expect actual &&

	{
		echo $(git rev-parse HEAD) HEAD &&
		echo $(git rev-parse refs/heads/B) refs/heads/B &&
		echo $(git rev-parse refs/tags/B) refs/tags/B &&
		echo $(git rev-parse refs/tags/B^0) "refs/tags/B^{}"
	} >expect &&
	git show-ref --head -d B >actual &&
	test_cmp expect actual

ok 7 - show-ref --heads, --tags, --head, pattern

expecting success of 1403.8 'show-ref --verify HEAD': 
	echo $(git rev-parse HEAD) HEAD >expect &&
	git show-ref --verify HEAD >actual &&
	test_cmp expect actual &&

	git show-ref --verify -q HEAD >actual &&
	test_must_be_empty actual

ok 8 - show-ref --verify HEAD

expecting success of 1403.9 'show-ref --verify with dangling ref': 
	sha1_file() {
		echo "$*" | sed "s#..#.git/objects/&/#"
	} &&

	remove_object() {
		file=$(sha1_file "$*") &&
		test -e "$file" &&
		rm -f "$file"
	} &&

	test_when_finished "rm -rf dangling" &&
	(
		git init dangling &&
		cd dangling &&
		test_commit dangling &&
		sha=$(git rev-parse refs/tags/dangling) &&
		remove_object $sha &&
		test_must_fail git show-ref --verify refs/tags/dangling
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1403-show-ref/dangling/.git/
[main (root-commit) 7b6c85a] dangling
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dangling.t
fatal: git show-ref: bad ref refs/tags/dangling (7b6c85aed8ac906de9f4214d9c12b4d66316df20)
ok 9 - show-ref --verify with dangling ref

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1405-main-ref-store.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1405-main-ref-store/.git/
expecting success of 1405.1 'setup': 
	test_commit one

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - setup

expecting success of 1405.2 'pack_refs(PACK_REFS_ALL | PACK_REFS_PRUNE)': 
	N=`find .git/refs -type f | wc -l` &&
	test "$N" != 0 &&
	$RUN pack-refs PACK_REFS_PRUNE,PACK_REFS_ALL &&
	N=`find .git/refs -type f` &&
	test -z "$N"

ok 2 - pack_refs(PACK_REFS_ALL | PACK_REFS_PRUNE)

expecting success of 1405.3 'create_symref(FOO, refs/heads/main)': 
	$RUN create-symref FOO refs/heads/main nothing &&
	echo refs/heads/main >expected &&
	git symbolic-ref FOO >actual &&
	test_cmp expected actual

ok 3 - create_symref(FOO, refs/heads/main)

expecting success of 1405.4 'delete_refs(FOO, refs/tags/new-tag)': 
	git tag -a -m new-tag new-tag HEAD &&
	git rev-parse FOO -- &&
	git rev-parse refs/tags/new-tag -- &&
	m=$(git rev-parse main) &&
	$RUN delete-refs REF_NO_DEREF nothing FOO refs/tags/new-tag &&
	test_must_fail git rev-parse --symbolic-full-name FOO &&
	test_must_fail git rev-parse FOO -- &&
	test_must_fail git rev-parse refs/tags/new-tag --

d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
--
407ffbd56c168afa4e9302a7cdfe469155f84482
--
fatal: ambiguous argument 'FOO': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
FOO
fatal: bad revision 'FOO'
fatal: bad revision 'refs/tags/new-tag'
ok 4 - delete_refs(FOO, refs/tags/new-tag)

ok 5 # skip delete-reflog(FOO, refs/tags/new-tag) (missing !REFFILES)

expecting success of 1405.6 'rename_refs(main, new-main)': 
	git rev-parse main >expected &&
	$RUN rename-ref refs/heads/main refs/heads/new-main &&
	git rev-parse new-main >actual &&
	test_cmp expected actual &&
	test_commit recreate-main

[main (root-commit) ff283f4] recreate-main
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one.t
 create mode 100644 recreate-main.t
ok 6 - rename_refs(main, new-main)

expecting success of 1405.7 'for_each_ref(refs/heads/)': 
	$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
	cat >expected <<-\EOF &&
	main 0x0
	new-main 0x0
	EOF
	test_cmp expected actual

ok 7 - for_each_ref(refs/heads/)

expecting success of 1405.8 'for_each_ref() is sorted': 
	$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
	sort actual > expected &&
	test_cmp expected actual

ok 8 - for_each_ref() is sorted

expecting success of 1405.9 'resolve_ref(new-main)': 
	SHA1=`git rev-parse new-main` &&
	echo "$SHA1 refs/heads/new-main 0x0" >expected &&
	$RUN resolve-ref refs/heads/new-main 0 >actual &&
	test_cmp expected actual

ok 9 - resolve_ref(new-main)

expecting success of 1405.10 'verify_ref(new-main)': 
	$RUN verify-ref refs/heads/new-main

ok 10 - verify_ref(new-main)

expecting success of 1405.11 'for_each_reflog()': 
	$RUN for-each-reflog | sort -k2 | cut -d" " -f 2- >actual &&
	cat >expected <<-\EOF &&
	HEAD 0x1
	refs/heads/main 0x0
	refs/heads/new-main 0x0
	EOF
	test_cmp expected actual

ok 11 - for_each_reflog()

expecting success of 1405.12 'for_each_reflog_ent()': 
	$RUN for-each-reflog-ent HEAD >actual &&
	head -n1 actual | grep one &&
	tail -n1 actual | grep recreate-main

0000000000000000000000000000000000000000 d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 C O Mitter <committer@example.com> 1112911993 -0700	commit (initial): one
0000000000000000000000000000000000000000 ff283f48d5b4f118f57230316ac4d562b4a6eed7 C O Mitter <committer@example.com> 1112912053 -0700	commit (initial): recreate-main
ok 12 - for_each_reflog_ent()

expecting success of 1405.13 'for_each_reflog_ent_reverse()': 
	$RUN for-each-reflog-ent-reverse HEAD >actual &&
	head -n1 actual | grep recreate-main &&
	tail -n1 actual | grep one

0000000000000000000000000000000000000000 ff283f48d5b4f118f57230316ac4d562b4a6eed7 C O Mitter <committer@example.com> 1112912053 -0700	commit (initial): recreate-main
0000000000000000000000000000000000000000 d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 C O Mitter <committer@example.com> 1112911993 -0700	commit (initial): one
ok 13 - for_each_reflog_ent_reverse()

expecting success of 1405.14 'reflog_exists(HEAD)': 
	$RUN reflog-exists HEAD

ok 14 - reflog_exists(HEAD)

expecting success of 1405.15 'delete_reflog(HEAD)': 
	$RUN delete-reflog HEAD &&
	test_must_fail git reflog exists HEAD

ok 15 - delete_reflog(HEAD)

expecting success of 1405.16 'create-reflog(HEAD)': 
	$RUN create-reflog HEAD &&
	git reflog exists HEAD

ok 16 - create-reflog(HEAD)

expecting success of 1405.17 'delete_ref(refs/heads/foo)': 
	git checkout -b foo &&
	FOO_SHA1=`git rev-parse foo` &&
	git checkout --detach &&
	test_commit bar-commit &&
	git checkout -b bar &&
	BAR_SHA1=`git rev-parse bar` &&
	$RUN update-ref updating refs/heads/foo $BAR_SHA1 $FOO_SHA1 0 &&
	echo $BAR_SHA1 >expected &&
	git rev-parse refs/heads/foo >actual &&
	test_cmp expected actual

Switched to a new branch 'foo'
HEAD is now at ff283f4 recreate-main
[detached HEAD 12c332b] bar-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar-commit.t
Switched to a new branch 'bar'
ok 17 - delete_ref(refs/heads/foo)

expecting success of 1405.18 'delete_ref(refs/heads/foo)': 
	SHA1=`git rev-parse foo` &&
	git checkout --detach &&
	$RUN delete-ref msg refs/heads/foo $SHA1 0 &&
	test_must_fail git rev-parse refs/heads/foo --

HEAD is now at 12c332b bar-commit
fatal: bad revision 'refs/heads/foo'
ok 18 - delete_ref(refs/heads/foo)

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1406-submodule-ref-store.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1406-submodule-ref-store/.git/
expecting success of 1406.1 'setup': 
	git init sub &&
	(
		cd sub &&
		test_commit first &&
		git checkout -b new-main &&
		git tag -a -m new-tag new-tag HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1406-submodule-ref-store/sub/.git/
[main (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Switched to a new branch 'new-main'
ok 1 - setup

expecting success of 1406.2 'pack_refs() not allowed': 
	test_must_fail $RUN pack-refs 3

fatal: unknown flag "3"
ok 2 - pack_refs() not allowed

expecting success of 1406.3 'create_symref() not allowed': 
	test_must_fail $RUN create-symref FOO refs/heads/main nothing

BUG: refs/files-backend.c:135: operation create_symref requires abilities 0x2, but only have 0x5
ok 3 - create_symref() not allowed

expecting success of 1406.4 'delete_refs() not allowed': 
	test_must_fail $RUN delete-refs 0 nothing FOO refs/tags/new-tag

BUG: refs/files-backend.c:135: operation delete_refs requires abilities 0x2, but only have 0x5
ok 4 - delete_refs() not allowed

expecting success of 1406.5 'rename_refs() not allowed': 
	test_must_fail $RUN rename-ref refs/heads/main refs/heads/new-main

BUG: refs/files-backend.c:135: operation rename_ref requires abilities 0x2, but only have 0x5
ok 5 - rename_refs() not allowed

expecting success of 1406.6 'for_each_ref(refs/heads/)': 
	$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
	cat >expected <<-\EOF &&
	main 0x0
	new-main 0x0
	EOF
	test_cmp expected actual

ok 6 - for_each_ref(refs/heads/)

expecting success of 1406.7 'for_each_ref() is sorted': 
	$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
	sort actual > expected &&
	test_cmp expected actual

ok 7 - for_each_ref() is sorted

expecting success of 1406.8 'resolve_ref(main)': 
	SHA1=`git -C sub rev-parse main` &&
	echo "$SHA1 refs/heads/main 0x0" >expected &&
	$RUN resolve-ref refs/heads/main 0 >actual &&
	test_cmp expected actual

ok 8 - resolve_ref(main)

expecting success of 1406.9 'verify_ref(new-main)': 
	$RUN verify-ref refs/heads/new-main

ok 9 - verify_ref(new-main)

expecting success of 1406.10 'for_each_reflog()': 
	$RUN for-each-reflog | sort | cut -d" " -f 2- >actual &&
	cat >expected <<-\EOF &&
	HEAD 0x1
	refs/heads/main 0x0
	refs/heads/new-main 0x0
	EOF
	test_cmp expected actual

ok 10 - for_each_reflog()

expecting success of 1406.11 'for_each_reflog_ent()': 
	$RUN for-each-reflog-ent HEAD >actual &&
	head -n1 actual | grep first &&
	tail -n1 actual | grep main.to.new

0000000000000000000000000000000000000000 50e526bb426771f6036ad3a8b0c81d511d91fc2a C O Mitter <committer@example.com> 1112911993 -0700	commit (initial): first
50e526bb426771f6036ad3a8b0c81d511d91fc2a 50e526bb426771f6036ad3a8b0c81d511d91fc2a C O Mitter <committer@example.com> 1112911993 -0700	checkout: moving from main to new-main
ok 11 - for_each_reflog_ent()

expecting success of 1406.12 'for_each_reflog_ent_reverse()': 
	$RUN for-each-reflog-ent-reverse HEAD >actual &&
	head -n1 actual | grep main.to.new &&
	tail -n1 actual | grep first

50e526bb426771f6036ad3a8b0c81d511d91fc2a 50e526bb426771f6036ad3a8b0c81d511d91fc2a C O Mitter <committer@example.com> 1112911993 -0700	checkout: moving from main to new-main
0000000000000000000000000000000000000000 50e526bb426771f6036ad3a8b0c81d511d91fc2a C O Mitter <committer@example.com> 1112911993 -0700	commit (initial): first
ok 12 - for_each_reflog_ent_reverse()

expecting success of 1406.13 'reflog_exists(HEAD)': 
	$RUN reflog-exists HEAD

ok 13 - reflog_exists(HEAD)

expecting success of 1406.14 'delete_reflog() not allowed': 
	test_must_fail $RUN delete-reflog HEAD

BUG: refs/files-backend.c:135: operation delete_reflog requires abilities 0x2, but only have 0x5
ok 14 - delete_reflog() not allowed

expecting success of 1406.15 'create-reflog() not allowed': 
	test_must_fail $RUN create-reflog HEAD

BUG: refs/files-backend.c:135: operation create_reflog requires abilities 0x2, but only have 0x5
ok 15 - create-reflog() not allowed

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1407-worktree-ref-store.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1407-worktree-ref-store/.git/
expecting success of 1407.1 'setup': 
	test_commit first &&
	git worktree add -b wt-main wt &&
	(
		cd wt &&
		test_commit second
	)

[main (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Preparing worktree (new branch 'wt-main')
HEAD is now at 50e526b first
[wt-main d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
ok 1 - setup

expecting success of 1407.2 'resolve_ref(<shared-ref>)': 
	SHA1=`git rev-parse main` &&
	echo "$SHA1 refs/heads/main 0x0" >expected &&
	$RWT resolve-ref refs/heads/main 0 >actual &&
	test_cmp expected actual &&
	$RMAIN resolve-ref refs/heads/main 0 >actual &&
	test_cmp expected actual

ok 2 - resolve_ref(<shared-ref>)

expecting success of 1407.3 'resolve_ref(<per-worktree-ref>)': 
	SHA1=`git -C wt rev-parse HEAD` &&
	echo "$SHA1 refs/heads/wt-main 0x1" >expected &&
	$RWT resolve-ref HEAD 0 >actual &&
	test_cmp expected actual &&

	SHA1=`git rev-parse HEAD` &&
	echo "$SHA1 refs/heads/main 0x1" >expected &&
	$RMAIN resolve-ref HEAD 0 >actual &&
	test_cmp expected actual

ok 3 - resolve_ref(<per-worktree-ref>)

expecting success of 1407.4 'create_symref(FOO, refs/heads/main)': 
	$RWT create-symref FOO refs/heads/main nothing &&
	echo refs/heads/main >expected &&
	git -C wt symbolic-ref FOO >actual &&
	test_cmp expected actual &&

	$RMAIN create-symref FOO refs/heads/wt-main nothing &&
	echo refs/heads/wt-main >expected &&
	git symbolic-ref FOO >actual &&
	test_cmp expected actual

ok 4 - create_symref(FOO, refs/heads/main)

expecting success of 1407.5 'for_each_reflog()': 
	echo $ZERO_OID > .git/logs/PSEUDO-MAIN &&
	mkdir -p     .git/logs/refs/bisect &&
	echo $ZERO_OID > .git/logs/refs/bisect/random &&

	echo $ZERO_OID > .git/worktrees/wt/logs/PSEUDO-WT &&
	mkdir -p     .git/worktrees/wt/logs/refs/bisect &&
	echo $ZERO_OID > .git/worktrees/wt/logs/refs/bisect/wt-random &&

	$RWT for-each-reflog | cut -d" " -f 2- | sort >actual &&
	cat >expected <<-\EOF &&
	HEAD 0x1
	PSEUDO-WT 0x0
	refs/bisect/wt-random 0x0
	refs/heads/main 0x0
	refs/heads/wt-main 0x0
	EOF
	test_cmp expected actual &&

	$RMAIN for-each-reflog | cut -d" " -f 2- | sort >actual &&
	cat >expected <<-\EOF &&
	HEAD 0x1
	PSEUDO-MAIN 0x0
	refs/bisect/random 0x0
	refs/heads/main 0x0
	refs/heads/wt-main 0x0
	EOF
	test_cmp expected actual

ok 5 - for_each_reflog()

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1408-packed-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1408-packed-refs/.git/
expecting success of 1408.1 'setup': 
	test_tick &&
	git commit --allow-empty -m one &&
	one=$(git rev-parse HEAD) &&
	git for-each-ref >actual &&
	echo "$one commit	refs/heads/main" >expect &&
	test_cmp expect actual &&

	git pack-refs --all &&
	git for-each-ref >actual &&
	echo "$one commit	refs/heads/main" >expect &&
	test_cmp expect actual &&

	git checkout --orphan another &&
	test_tick &&
	git commit --allow-empty -m two &&
	two=$(git rev-parse HEAD) &&
	git checkout -B main &&
	git branch -D another &&

	git for-each-ref >actual &&
	echo "$two commit	refs/heads/main" >expect &&
	test_cmp expect actual &&

	git reflog expire --expire=now --all &&
	git prune &&
	git tag -m v1.0 v1.0 main

[main (root-commit) 76a57ce] one
 Author: A U Thor <author@example.com>
Switched to a new branch 'another'
[another (root-commit) 169e1dc] two
 Author: A U Thor <author@example.com>
Switched to and reset branch 'main'
Deleted branch another (was 169e1dc).
ok 1 - setup

expecting success of 1408.2 'no error from stale entry in packed-refs': 
	git describe main >actual 2>&1 &&
	echo "v1.0" >expect &&
	test_cmp expect actual

ok 2 - no error from stale entry in packed-refs

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1409-avoid-packing-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1409-avoid-packing-refs/.git/
expecting success of 1409.1 'setup': 
	git commit --allow-empty -m "Commit A" &&
	A=$(git rev-parse HEAD) &&
	git commit --allow-empty -m "Commit B" &&
	B=$(git rev-parse HEAD) &&
	git commit --allow-empty -m "Commit C" &&
	C=$(git rev-parse HEAD)

[master (root-commit) 8d09622] Commit A
 Author: A U Thor <author@example.com>
[master 241b9d6] Commit B
 Author: A U Thor <author@example.com>
[master 8d1dbac] Commit C
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 1409.2 'do not create packed-refs file gratuitously': 
	test_path_is_missing .git/packed-refs &&
	git update-ref refs/heads/foo $A &&
	test_path_is_missing .git/packed-refs &&
	git update-ref refs/heads/foo $B &&
	test_path_is_missing .git/packed-refs &&
	git update-ref refs/heads/foo $C $B &&
	test_path_is_missing .git/packed-refs &&
	git update-ref -d refs/heads/foo &&
	test_path_is_missing .git/packed-refs

ok 2 - do not create packed-refs file gratuitously

expecting success of 1409.3 'check that marking the packed-refs file works': 
	git for-each-ref >expected &&
	git pack-refs --all &&
	mark_packed_refs &&
	check_packed_refs_marked &&
	git for-each-ref >actual &&
	test_cmp expected actual &&
	git pack-refs --all &&
	! check_packed_refs_marked &&
	git for-each-ref >actual2 &&
	test_cmp expected actual2

ok 3 - check that marking the packed-refs file works

expecting success of 1409.4 'leave packed-refs untouched on update of packed': 
	git update-ref refs/heads/packed-update $A &&
	git pack-refs --all &&
	mark_packed_refs &&
	git update-ref refs/heads/packed-update $B &&
	check_packed_refs_marked

ok 4 - leave packed-refs untouched on update of packed

expecting success of 1409.5 'leave packed-refs untouched on checked update of packed': 
	git update-ref refs/heads/packed-checked-update $A &&
	git pack-refs --all &&
	mark_packed_refs &&
	git update-ref refs/heads/packed-checked-update $B $A &&
	check_packed_refs_marked

ok 5 - leave packed-refs untouched on checked update of packed

expecting success of 1409.6 'leave packed-refs untouched on verify of packed': 
	git update-ref refs/heads/packed-verify $A &&
	git pack-refs --all &&
	mark_packed_refs &&
	echo "verify refs/heads/packed-verify $A" | git update-ref --stdin &&
	check_packed_refs_marked

ok 6 - leave packed-refs untouched on verify of packed

expecting success of 1409.7 'touch packed-refs on delete of packed': 
	git update-ref refs/heads/packed-delete $A &&
	git pack-refs --all &&
	mark_packed_refs &&
	git update-ref -d refs/heads/packed-delete &&
	! check_packed_refs_marked

ok 7 - touch packed-refs on delete of packed

expecting success of 1409.8 'leave packed-refs untouched on update of loose': 
	git pack-refs --all &&
	git update-ref refs/heads/loose-update $A &&
	mark_packed_refs &&
	git update-ref refs/heads/loose-update $B &&
	check_packed_refs_marked

ok 8 - leave packed-refs untouched on update of loose

expecting success of 1409.9 'leave packed-refs untouched on checked update of loose': 
	git pack-refs --all &&
	git update-ref refs/heads/loose-checked-update $A &&
	mark_packed_refs &&
	git update-ref refs/heads/loose-checked-update $B $A &&
	check_packed_refs_marked

ok 9 - leave packed-refs untouched on checked update of loose

expecting success of 1409.10 'leave packed-refs untouched on verify of loose': 
	git pack-refs --all &&
	git update-ref refs/heads/loose-verify $A &&
	mark_packed_refs &&
	echo "verify refs/heads/loose-verify $A" | git update-ref --stdin &&
	check_packed_refs_marked

ok 10 - leave packed-refs untouched on verify of loose

expecting success of 1409.11 'leave packed-refs untouched on delete of loose': 
	git pack-refs --all &&
	git update-ref refs/heads/loose-delete $A &&
	mark_packed_refs &&
	git update-ref -d refs/heads/loose-delete &&
	check_packed_refs_marked

ok 11 - leave packed-refs untouched on delete of loose

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1404-update-ref-errors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1404-update-ref-errors/.git/
expecting success of 1404.1 'setup': 

	git commit --allow-empty -m Initial &&
	C=$(git rev-parse HEAD) &&
	git commit --allow-empty -m Second &&
	D=$(git rev-parse HEAD) &&
	git commit --allow-empty -m Third &&
	E=$(git rev-parse HEAD)

[master (root-commit) d31adcd] Initial
 Author: A U Thor <author@example.com>
[master e6940ad] Second
 Author: A U Thor <author@example.com>
[master c2327cb] Third
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 1404.2 'existing loose ref is a simple prefix of new': 

	prefix=refs/1l &&
	test_update_rejected "a c e" false "b c/x d" \
		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x$SQ"


fatal: cannot lock ref 'refs/1l/c/x': 'refs/1l/c' exists; cannot create 'refs/1l/c/x'
ok 2 - existing loose ref is a simple prefix of new

expecting success of 1404.3 'existing packed ref is a simple prefix of new': 

	prefix=refs/1p &&
	test_update_rejected "a c e" true "b c/x d" \
		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x$SQ"


fatal: cannot lock ref 'refs/1p/c/x': 'refs/1p/c' exists; cannot create 'refs/1p/c/x'
ok 3 - existing packed ref is a simple prefix of new

expecting success of 1404.4 'existing loose ref is a deeper prefix of new': 

	prefix=refs/2l &&
	test_update_rejected "a c e" false "b c/x/y d" \
		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x/y$SQ"


fatal: cannot lock ref 'refs/2l/c/x/y': 'refs/2l/c' exists; cannot create 'refs/2l/c/x/y'
ok 4 - existing loose ref is a deeper prefix of new

expecting success of 1404.5 'existing packed ref is a deeper prefix of new': 

	prefix=refs/2p &&
	test_update_rejected "a c e" true "b c/x/y d" \
		"$SQ$prefix/c$SQ exists; cannot create $SQ$prefix/c/x/y$SQ"


fatal: cannot lock ref 'refs/2p/c/x/y': 'refs/2p/c' exists; cannot create 'refs/2p/c/x/y'
ok 5 - existing packed ref is a deeper prefix of new

expecting success of 1404.6 'new ref is a simple prefix of existing loose': 

	prefix=refs/3l &&
	test_update_rejected "a c/x e" false "b c d" \
		"$SQ$prefix/c/x$SQ exists; cannot create $SQ$prefix/c$SQ"


fatal: cannot lock ref 'refs/3l/c': 'refs/3l/c/x' exists; cannot create 'refs/3l/c'
ok 6 - new ref is a simple prefix of existing loose

expecting success of 1404.7 'new ref is a simple prefix of existing packed': 

	prefix=refs/3p &&
	test_update_rejected "a c/x e" true "b c d" \
		"$SQ$prefix/c/x$SQ exists; cannot create $SQ$prefix/c$SQ"


fatal: cannot lock ref 'refs/3p/c': 'refs/3p/c/x' exists; cannot create 'refs/3p/c'
ok 7 - new ref is a simple prefix of existing packed

expecting success of 1404.8 'new ref is a deeper prefix of existing loose': 

	prefix=refs/4l &&
	test_update_rejected "a c/x/y e" false "b c d" \
		"$SQ$prefix/c/x/y$SQ exists; cannot create $SQ$prefix/c$SQ"


fatal: cannot lock ref 'refs/4l/c': 'refs/4l/c/x/y' exists; cannot create 'refs/4l/c'
ok 8 - new ref is a deeper prefix of existing loose

expecting success of 1404.9 'new ref is a deeper prefix of existing packed': 

	prefix=refs/4p &&
	test_update_rejected "a c/x/y e" true "b c d" \
		"$SQ$prefix/c/x/y$SQ exists; cannot create $SQ$prefix/c$SQ"


fatal: cannot lock ref 'refs/4p/c': 'refs/4p/c/x/y' exists; cannot create 'refs/4p/c'
ok 9 - new ref is a deeper prefix of existing packed

expecting success of 1404.10 'one new ref is a simple prefix of another': 

	prefix=refs/5 &&
	test_update_rejected "a e" false "b c c/x d" \
		"cannot process $SQ$prefix/c$SQ and $SQ$prefix/c/x$SQ at the same time"


fatal: cannot lock ref 'refs/5/c': cannot process 'refs/5/c' and 'refs/5/c/x' at the same time
ok 10 - one new ref is a simple prefix of another

expecting success of 1404.11 'empty directory should not fool rev-parse': 
	prefix=refs/e-rev-parse &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	echo "$C" >expected &&
	git rev-parse $prefix/foo >actual &&
	test_cmp expected actual

ok 11 - empty directory should not fool rev-parse

expecting success of 1404.12 'empty directory should not fool for-each-ref': 
	prefix=refs/e-for-each-ref &&
	git update-ref $prefix/foo $C &&
	git for-each-ref $prefix >expected &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	git for-each-ref $prefix >actual &&
	test_cmp expected actual

ok 12 - empty directory should not fool for-each-ref

expecting success of 1404.13 'empty directory should not fool create': 
	prefix=refs/e-create &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "create %s $C\n" $prefix/foo |
	git update-ref --stdin

ok 13 - empty directory should not fool create

expecting success of 1404.14 'empty directory should not fool verify': 
	prefix=refs/e-verify &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "verify %s $C\n" $prefix/foo |
	git update-ref --stdin

ok 14 - empty directory should not fool verify

expecting success of 1404.15 'empty directory should not fool 1-arg update': 
	prefix=refs/e-update-1 &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "update %s $D\n" $prefix/foo |
	git update-ref --stdin

ok 15 - empty directory should not fool 1-arg update

expecting success of 1404.16 'empty directory should not fool 2-arg update': 
	prefix=refs/e-update-2 &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "update %s $D $C\n" $prefix/foo |
	git update-ref --stdin

ok 16 - empty directory should not fool 2-arg update

expecting success of 1404.17 'empty directory should not fool 0-arg delete': 
	prefix=refs/e-delete-0 &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "delete %s\n" $prefix/foo |
	git update-ref --stdin

ok 17 - empty directory should not fool 0-arg delete

expecting success of 1404.18 'empty directory should not fool 1-arg delete': 
	prefix=refs/e-delete-1 &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	mkdir -p .git/$prefix/foo/bar/baz &&
	printf "delete %s $C\n" $prefix/foo |
	git update-ref --stdin

ok 18 - empty directory should not fool 1-arg delete

expecting success of 1404.19 'D/F conflict prevents add long + delete short': 
	df_test refs/df-al-ds --add-del foo/bar foo

ok 19 - D/F conflict prevents add long + delete short

expecting success of 1404.20 'D/F conflict prevents add short + delete long': 
	df_test refs/df-as-dl --add-del foo foo/bar

ok 20 - D/F conflict prevents add short + delete long

expecting success of 1404.21 'D/F conflict prevents delete long + add short': 
	df_test refs/df-dl-as --del-add foo/bar foo

ok 21 - D/F conflict prevents delete long + add short

expecting success of 1404.22 'D/F conflict prevents delete short + add long': 
	df_test refs/df-ds-al --del-add foo foo/bar

ok 22 - D/F conflict prevents delete short + add long

expecting success of 1404.23 'D/F conflict prevents add long + delete short packed': 
	df_test refs/df-al-dsp --pack --add-del foo/bar foo

ok 23 - D/F conflict prevents add long + delete short packed

expecting success of 1404.24 'D/F conflict prevents add short + delete long packed': 
	df_test refs/df-as-dlp --pack --add-del foo foo/bar

ok 24 - D/F conflict prevents add short + delete long packed

expecting success of 1404.25 'D/F conflict prevents delete long packed + add short': 
	df_test refs/df-dlp-as --pack --del-add foo/bar foo

ok 25 - D/F conflict prevents delete long packed + add short

expecting success of 1404.26 'D/F conflict prevents delete short packed + add long': 
	df_test refs/df-dsp-al --pack --del-add foo foo/bar

ok 26 - D/F conflict prevents delete short packed + add long

expecting success of 1404.27 'D/F conflict prevents indirect add long + delete short': 
	df_test refs/df-ial-ds --sym-add --add-del foo/bar foo

ok 27 - D/F conflict prevents indirect add long + delete short

expecting success of 1404.28 'D/F conflict prevents indirect add long + indirect delete short': 
	df_test refs/df-ial-ids --sym-add --sym-del --add-del foo/bar foo

ok 28 - D/F conflict prevents indirect add long + indirect delete short

expecting success of 1404.29 'D/F conflict prevents indirect add short + indirect delete long': 
	df_test refs/df-ias-idl --sym-add --sym-del --add-del foo foo/bar

ok 29 - D/F conflict prevents indirect add short + indirect delete long

expecting success of 1404.30 'D/F conflict prevents indirect delete long + indirect add short': 
	df_test refs/df-idl-ias --sym-add --sym-del --del-add foo/bar foo

ok 30 - D/F conflict prevents indirect delete long + indirect add short

expecting success of 1404.31 'D/F conflict prevents indirect add long + delete short packed': 
	df_test refs/df-ial-dsp --sym-add --pack --add-del foo/bar foo

ok 31 - D/F conflict prevents indirect add long + delete short packed

expecting success of 1404.32 'D/F conflict prevents indirect add long + indirect delete short packed': 
	df_test refs/df-ial-idsp --sym-add --sym-del --pack --add-del foo/bar foo

ok 32 - D/F conflict prevents indirect add long + indirect delete short packed

expecting success of 1404.33 'D/F conflict prevents add long + indirect delete short packed': 
	df_test refs/df-al-idsp --sym-del --pack --add-del foo/bar foo

ok 33 - D/F conflict prevents add long + indirect delete short packed

expecting success of 1404.34 'D/F conflict prevents indirect delete long packed + indirect add short': 
	df_test refs/df-idlp-ias --sym-add --sym-del --pack --del-add foo/bar foo

ok 34 - D/F conflict prevents indirect delete long packed + indirect add short

expecting success of 1404.35 'missing old value blocks update': 
	prefix=refs/missing-update &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/foo $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 35 - missing old value blocks update

expecting success of 1404.36 'incorrect old value blocks update': 
	prefix=refs/incorrect-update &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "update $prefix/foo $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 36 - incorrect old value blocks update

expecting success of 1404.37 'existing old value blocks create': 
	prefix=refs/existing-create &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: reference already exists
	EOF
	printf "%s\n" "create $prefix/foo $E" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 37 - existing old value blocks create

expecting success of 1404.38 'incorrect old value blocks delete': 
	prefix=refs/incorrect-delete &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "delete $prefix/foo $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 38 - incorrect old value blocks delete

expecting success of 1404.39 'missing old value blocks indirect update': 
	prefix=refs/missing-indirect-update &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/symref $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 39 - missing old value blocks indirect update

expecting success of 1404.40 'incorrect old value blocks indirect update': 
	prefix=refs/incorrect-indirect-update &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "update $prefix/symref $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 40 - incorrect old value blocks indirect update

expecting success of 1404.41 'existing old value blocks indirect create': 
	prefix=refs/existing-indirect-create &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference already exists
	EOF
	printf "%s\n" "create $prefix/symref $E" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 41 - existing old value blocks indirect create

expecting success of 1404.42 'incorrect old value blocks indirect delete': 
	prefix=refs/incorrect-indirect-delete &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "delete $prefix/symref $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 42 - incorrect old value blocks indirect delete

expecting success of 1404.43 'missing old value blocks indirect no-deref update': 
	prefix=refs/missing-noderef-update &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference is missing but expected $D
	EOF
	printf "%s\n" "option no-deref" "update $prefix/symref $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 43 - missing old value blocks indirect no-deref update

expecting success of 1404.44 'incorrect old value blocks indirect no-deref update': 
	prefix=refs/incorrect-noderef-update &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "option no-deref" "update $prefix/symref $E $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 44 - incorrect old value blocks indirect no-deref update

expecting success of 1404.45 'existing old value blocks indirect no-deref create': 
	prefix=refs/existing-noderef-create &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: reference already exists
	EOF
	printf "%s\n" "option no-deref" "create $prefix/symref $E" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 45 - existing old value blocks indirect no-deref create

expecting success of 1404.46 'incorrect old value blocks indirect no-deref delete': 
	prefix=refs/incorrect-noderef-delete &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	git update-ref $prefix/foo $C &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: is at $C but expected $D
	EOF
	printf "%s\n" "option no-deref" "delete $prefix/symref $D" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 46 - incorrect old value blocks indirect no-deref delete

expecting success of 1404.47 'non-empty directory blocks create': 
	prefix=refs/ne-create &&
	mkdir -p .git/$prefix/foo/bar &&
	: >.git/$prefix/foo/bar/baz.lock &&
	test_when_finished "rm -f .git/$prefix/foo/bar/baz.lock" &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: there is a non-empty directory $SQ.git/$prefix/foo$SQ blocking reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/foo $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/foo $D $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 47 - non-empty directory blocks create

expecting success of 1404.48 'broken reference blocks create': 
	prefix=refs/broken-create &&
	mkdir -p .git/$prefix &&
	echo "gobbledigook" >.git/$prefix/foo &&
	test_when_finished "rm -f .git/$prefix/foo" &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
	EOF
	printf "%s\n" "update $prefix/foo $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/foo$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
	EOF
	printf "%s\n" "update $prefix/foo $D $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 48 - broken reference blocks create

expecting success of 1404.49 'non-empty directory blocks indirect create': 
	prefix=refs/ne-indirect-create &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	mkdir -p .git/$prefix/foo/bar &&
	: >.git/$prefix/foo/bar/baz.lock &&
	test_when_finished "rm -f .git/$prefix/foo/bar/baz.lock" &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: there is a non-empty directory $SQ.git/$prefix/foo$SQ blocking reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/symref $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ
	EOF
	printf "%s\n" "update $prefix/symref $D $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 49 - non-empty directory blocks indirect create

expecting success of 1404.50 'broken reference blocks indirect create': 
	prefix=refs/broken-indirect-create &&
	git symbolic-ref $prefix/symref $prefix/foo &&
	echo "gobbledigook" >.git/$prefix/foo &&
	test_when_finished "rm -f .git/$prefix/foo" &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
	EOF
	printf "%s\n" "update $prefix/symref $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err &&
	cat >expected <<-EOF &&
	fatal: cannot lock ref $SQ$prefix/symref$SQ: unable to resolve reference $SQ$prefix/foo$SQ: reference broken
	EOF
	printf "%s\n" "update $prefix/symref $D $C" |
	test_must_fail git update-ref --stdin 2>output.err &&
	test_cmp expected output.err

ok 50 - broken reference blocks indirect create

expecting success of 1404.51 'no bogus intermediate values during delete': 
	prefix=refs/slow-transaction &&
	# Set up a reference with differing loose and packed versions:
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	git update-ref $prefix/foo $D &&
	git for-each-ref $prefix >unchanged &&
	# Now try to update the reference, but hold the `packed-refs` lock
	# for a while to see what happens while the process is blocked:
	: >.git/packed-refs.lock &&
	test_when_finished "rm -f .git/packed-refs.lock" &&
	{
		# Note: the following command is intentionally run in the
		# background. We increase the timeout so that `update-ref`
		# attempts to acquire the `packed-refs` lock for much longer
		# than it takes for us to do the check then delete it:
		git -c core.packedrefstimeout=30000 update-ref -d $prefix/foo &
	} &&
	pid2=$! &&
	# Give update-ref plenty of time to get to the point where it tries
	# to lock packed-refs:
	sleep 1 &&
	# Make sure that update-ref did not complete despite the lock:
	kill -0 $pid2 &&
	# Verify that the reference still has its old value:
	sha1=$(git rev-parse --verify --quiet $prefix/foo || echo undefined) &&
	case "$sha1" in
	$D)
		# This is what we hope for; it means that nothing
		# user-visible has changed yet.
		: ;;
	undefined)
		# This is not correct; it means the deletion has happened
		# already even though update-ref should not have been
		# able to acquire the lock yet.
		echo "$prefix/foo deleted prematurely" &&
		break
		;;
	$C)
		# This value should never be seen. Probably the loose
		# reference has been deleted but the packed reference
		# is still there:
		echo "$prefix/foo incorrectly observed to be C" &&
		break
		;;
	*)
		# WTF?
		echo "unexpected value observed for $prefix/foo: $sha1" &&
		break
		;;
	esac >out &&
	rm -f .git/packed-refs.lock &&
	wait $pid2 &&
	test_must_be_empty out &&
	test_must_fail git rev-parse --verify --quiet $prefix/foo

ok 51 - no bogus intermediate values during delete

expecting success of 1404.52 'delete fails cleanly if packed-refs file is locked': 
	prefix=refs/locked-packed-refs &&
	# Set up a reference with differing loose and packed versions:
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	git update-ref $prefix/foo $D &&
	git for-each-ref $prefix >unchanged &&
	# Now try to delete it while the `packed-refs` lock is held:
	: >.git/packed-refs.lock &&
	test_when_finished "rm -f .git/packed-refs.lock" &&
	test_must_fail git update-ref -d $prefix/foo >out 2>err &&
	git for-each-ref $prefix >actual &&
	test_i18ngrep "Unable to create $SQ.*packed-refs.lock$SQ: " err &&
	test_cmp unchanged actual

error: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t1404-update-ref-errors/.git/packed-refs.lock': File exists.
ok 52 - delete fails cleanly if packed-refs file is locked

expecting success of 1404.53 'delete fails cleanly if packed-refs.new write fails': 
	# Setup and expectations are similar to the test above.
	prefix=refs/failed-packed-refs &&
	git update-ref $prefix/foo $C &&
	git pack-refs --all &&
	git update-ref $prefix/foo $D &&
	git for-each-ref $prefix >unchanged &&
	# This should not happen in practice, but it is an easy way to get a
	# reliable error (we open with create_tempfile(), which uses O_EXCL).
	: >.git/packed-refs.new &&
	test_when_finished "rm -f .git/packed-refs.new" &&
	test_must_fail git update-ref -d $prefix/foo &&
	git for-each-ref $prefix >actual &&
	test_cmp unchanged actual

error: unable to create file /<<PKGBUILDDIR>>/t/trash directory.t1404-update-ref-errors/.git/packed-refs.new: File exists
ok 53 - delete fails cleanly if packed-refs.new write fails

# passed all 53 test(s)
1..53
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1411-reflog-show.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1411-reflog-show/.git/
expecting success of 1411.1 'setup': 
	echo content >file &&
	git add file &&
	test_tick &&
	git commit -m one

[main (root-commit) e46513e] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 1411.2 'log -g shows reflog headers': 
	git log -g -1 >tmp &&
	grep ^Reflog <tmp >actual &&
	test_cmp expect actual

ok 2 - log -g shows reflog headers

expecting success of 1411.3 'oneline reflog format': 
	git log -g -1 --oneline >actual &&
	test_cmp expect actual

ok 3 - oneline reflog format

expecting success of 1411.4 'reflog default format': 
	git reflog -1 >actual &&
	test_cmp expect actual

ok 4 - reflog default format

expecting success of 1411.5 'override reflog default format': 
	git reflog --format=short -1 >actual &&
	test_cmp expect actual

ok 5 - override reflog default format

expecting success of 1411.6 'using @{now} syntax shows reflog date (multiline)': 
	git log -g -1 HEAD@{now} >tmp &&
	grep ^Reflog <tmp >actual &&
	test_cmp expect actual

ok 6 - using @{now} syntax shows reflog date (multiline)

expecting success of 1411.7 'using @{now} syntax shows reflog date (oneline)': 
	git log -g -1 --oneline HEAD@{now} >actual &&
	test_cmp expect actual

ok 7 - using @{now} syntax shows reflog date (oneline)

expecting success of 1411.8 'using @{now} syntax shows reflog date (format=%gd)': 
	git log -g -1 --format=%gd HEAD@{now} >actual &&
	test_cmp expect actual

ok 8 - using @{now} syntax shows reflog date (format=%gd)

expecting success of 1411.9 'using --date= shows reflog date (multiline)': 
	git log -g -1 --date=default >tmp &&
	grep ^Reflog <tmp >actual &&
	test_cmp expect actual

ok 9 - using --date= shows reflog date (multiline)

expecting success of 1411.10 'using --date= shows reflog date (oneline)': 
	git log -g -1 --oneline --date=default >actual &&
	test_cmp expect actual

ok 10 - using --date= shows reflog date (oneline)

expecting success of 1411.11 'using --date= shows reflog date (format=%gd)': 
	git log -g -1 --format=%gd --date=raw >actual &&
	test_cmp expect actual

ok 11 - using --date= shows reflog date (format=%gd)

expecting success of 1411.12 'log.date does not invoke "--date" magic (multiline)': 
	test_config log.date raw &&
	git log -g -1 >tmp &&
	grep ^Reflog <tmp >actual &&
	test_cmp expect actual

ok 12 - log.date does not invoke "--date" magic (multiline)

expecting success of 1411.13 'log.date does not invoke "--date" magic (oneline)': 
	test_config log.date raw &&
	git log -g -1 --oneline >actual &&
	test_cmp expect actual

ok 13 - log.date does not invoke "--date" magic (oneline)

expecting success of 1411.14 'log.date does not invoke "--date" magic (format=%gd)': 
	test_config log.date raw &&
	git log -g -1 --format=%gd >actual &&
	test_cmp expect actual

ok 14 - log.date does not invoke "--date" magic (format=%gd)

expecting success of 1411.15 '--date magic does not override explicit @{0} syntax': 
	git log -g -1 --format=%gd --date=raw HEAD@{0} >actual &&
	test_cmp expect actual

ok 15 - --date magic does not override explicit @{0} syntax

expecting success of 1411.16 'empty reflog file': 
	git branch empty &&
	git reflog expire --expire=all refs/heads/empty &&

	git log -g empty >actual &&
	test_must_be_empty actual

ok 16 - empty reflog file

expecting success of 1411.17 'git log -g -p shows diffs vs. parents': 
	test_commit two &&
	git branch flipflop &&
	git update-ref refs/heads/flipflop -m flip1 HEAD^ &&
	git update-ref refs/heads/flipflop -m flop1 HEAD &&
	git update-ref refs/heads/flipflop -m flip2 HEAD^ &&
	git log -g -p flipflop >reflog &&
	grep -v ^Reflog reflog >actual &&
	git log -1 -p HEAD^ >log.one &&
	git log -1 -p HEAD >log.two &&
	(
		cat log.one && echo &&
		cat log.two && echo &&
		cat log.one && echo &&
		cat log.two
	) >expect &&
	test_cmp expect actual

[main fc3e0aa] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 17 - git log -g -p shows diffs vs. parents

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1412-reflog-loop.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1412-reflog-loop/.git/
expecting success of 1412.1 'setup commits': 
	test_commit one file content &&
	test_commit --append two file content

[master (root-commit) e46513e] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 98995b2] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup commits

expecting success of 1412.2 'setup reflog with alternating commits': 
	git checkout -b topic &&
	git reset one &&
	git reset two &&
	git reset one &&
	git reset two

Switched to a new branch 'topic'
Unstaged changes after reset:
M	file
Unstaged changes after reset:
M	file
ok 2 - setup reflog with alternating commits

expecting success of 1412.3 'reflog shows all entries': 
	cat >expect <<-\EOF &&
		topic@{0} reset: moving to two
		topic@{1} reset: moving to one
		topic@{2} reset: moving to two
		topic@{3} reset: moving to one
		topic@{4} branch: Created from HEAD
	EOF
	git log -g --format="%gd %gs" topic >actual &&
	test_cmp expect actual

ok 3 - reflog shows all entries

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1413-reflog-detach.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1413-reflog-detach/.git/
expecting success of 1413.1 'setup': 
	test_tick &&
	git commit --allow-empty -m initial &&
	git branch side &&
	test_tick &&
	git commit --allow-empty -m second &&
	"$TAR" cf .git-saved.tar .git

[main (root-commit) 66fe8b3] initial
 Author: A U Thor <author@example.com>
[main 5ce2b00] second
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 1413.2 'baseline': 
	reset_state &&
	git rev-parse main main^ >expect &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

ok 2 - baseline

expecting success of 1413.3 'switch to branch': 
	reset_state &&
	git rev-parse side main main^ >expect &&
	git checkout side &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

Switched to branch 'side'
ok 3 - switch to branch

expecting success of 1413.4 'detach to other': 
	reset_state &&
	git rev-parse main side main main^ >expect &&
	git checkout side &&
	git checkout main^0 &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

Switched to branch 'side'
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ce2b00 second
ok 4 - detach to other

expecting success of 1413.5 'detach to self': 
	reset_state &&
	git rev-parse main main main^ >expect &&
	git checkout main^0 &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ce2b00 second
ok 5 - detach to self

expecting success of 1413.6 'attach to self': 
	reset_state &&
	git rev-parse main main main main^ >expect &&
	git checkout main^0 &&
	git checkout main &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ce2b00 second
Switched to branch 'main'
ok 6 - attach to self

expecting success of 1413.7 'attach to other': 
	reset_state &&
	git rev-parse side main main main^ >expect &&
	git checkout main^0 &&
	git checkout side &&
	git log -g --format=%H >actual &&
	test_cmp expect actual

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ce2b00 second
Previous HEAD position was 5ce2b00 second
Switched to branch 'side'
ok 7 - attach to other

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1414-reflog-walk.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1414-reflog-walk/.git/
expecting success of 1414.1 'set up some reflog entries': 
	test_commit one &&
	test_commit two &&
	git checkout -b side HEAD^ &&
	test_commit three &&
	git merge --no-commit main &&
	echo evil-merge-content >>one.t &&
	test_tick &&
	git commit --no-edit -a

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to a new branch 'side'
[side 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Automatic merge went well; stopped before committing as requested
[side 6635cc5] Merge branch 'main' into side
 Author: A U Thor <author@example.com>
ok 1 - set up some reflog entries

expecting success of 1414.2 'set up expected reflog': 
	cat >expect.all <<-EOF
	HEAD@{0} commit (merge): Merge branch ${SQ}main${SQ} into side
	HEAD@{1} commit: three
	HEAD@{2} checkout: moving from main to side
	HEAD@{3} commit: two
	HEAD@{4} commit (initial): one
	EOF

ok 2 - set up expected reflog

expecting success of 1414.3 'reflog walk shows expected logs': 
	do_walk >actual &&
	test_cmp expect.all actual

ok 3 - reflog walk shows expected logs

expecting success of 1414.4 'reflog can limit with --no-merges': 
	grep -v merge expect.all >expect &&
	do_walk --no-merges >actual &&
	test_cmp expect actual

ok 4 - reflog can limit with --no-merges

expecting success of 1414.5 'reflog can limit with pathspecs': 
	grep two expect.all >expect &&
	do_walk -- two.t >actual &&
	test_cmp expect actual

ok 5 - reflog can limit with pathspecs

expecting success of 1414.6 'pathspec limiting handles merges': 
	# we pick up:
	#   - the initial commit of one
	#   - the checkout back to commit one
	#   - the evil merge which touched one
	sed -n "1p;3p;5p" expect.all >expect &&
	do_walk -- one.t >actual &&
	test_cmp expect actual

ok 6 - pathspec limiting handles merges

expecting success of 1414.7 '--parents shows true parents': 
	# convert newlines to spaces
	echo $(git rev-parse HEAD HEAD^1 HEAD^2) >expect &&
	git rev-list -g --parents -1 HEAD >actual &&
	test_cmp expect actual

ok 7 - --parents shows true parents

expecting success of 1414.8 'walking multiple reflogs shows all': 
	# We expect to see all entries for all reflogs, but interleaved by
	# date, with order on the command line breaking ties. We
	# can use "sort" on the separate lists to generate this,
	# but note two tricks:
	#
	#   1. We use "{" as the delimiter, which lets us skip to the reflog
	#      date specifier as our second field, and then our "-n" numeric
	#      sort ignores the bits after the timestamp.
	#
	#   2. POSIX leaves undefined whether this is a stable sort or not. So
	#      we use "-k 1" to ensure that we see HEAD before main before
	#      side when breaking ties.
	{
		do_walk --date=unix HEAD &&
		do_walk --date=unix side &&
		do_walk --date=unix main
	} >expect.raw &&
	sort -t "{" -k 2nr -k 1 <expect.raw >expect &&
	do_walk --date=unix HEAD main side >actual &&
	test_cmp expect actual

ok 8 - walking multiple reflogs shows all

expecting success of 1414.9 'date-limiting does not interfere with other logs': 
	do_walk HEAD@{1979-01-01} HEAD >actual &&
	test_cmp expect.all actual

warning: log for 'HEAD' only goes back to Thu, 7 Apr 2005 15:13:13 -0700
ok 9 - date-limiting does not interfere with other logs

expecting success of 1414.10 'min/max age uses entry date to limit': 
	# Flip between commits one and two so each ref update actually
	# does something (and does not get optimized out). We know
	# that the timestamps of those commits will be before our "min".

	git update-ref -m before refs/heads/minmax one &&

	test_tick &&
	min=$test_tick &&
	git update-ref -m min refs/heads/minmax two &&

	test_tick &&
	max=$test_tick &&
	git update-ref -m max refs/heads/minmax one &&

	test_tick &&
	git update-ref -m after refs/heads/minmax two &&

	cat >expect <<-\EOF &&
	max
	min
	EOF
	git log -g --since=$min --until=$max --format=%gs minmax >actual &&
	test_cmp expect actual

ok 10 - min/max age uses entry date to limit

expecting success of 1414.11 'walk prefers reflog to ref tip': 
	head=$(git rev-parse HEAD) &&
	one=$(git rev-parse one) &&
	ident="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE" &&
	echo "$head $one $ident	broken reflog entry" >>.git/logs/HEAD &&

	echo $one >expect &&
	git log -g --format=%H -1 >actual &&
	test_cmp expect actual

ok 11 - walk prefers reflog to ref tip

expecting success of 1414.12 'rev-list -g complains when there are no reflogs': 
	test_must_fail git rev-list -g

usage: git rev-list [<options>] <commit>... [--] [<path>...]

  limiting output:
    --max-count=<n>
    --max-age=<epoch>
    --min-age=<epoch>
    --sparse
    --no-merges
    --min-parents=<n>
    --no-min-parents
    --max-parents=<n>
    --no-max-parents
    --remove-empty
    --all
    --branches
    --tags
    --remotes
    --stdin
    --exclude-hidden=[receive|uploadpack]
    --quiet
  ordering output:
    --topo-order
    --date-order
    --reverse
  formatting output:
    --parents
    --children
    --objects | --objects-edge
    --disk-usage[=human]
    --unpacked
    --header | --pretty
    --[no-]object-names
    --abbrev=<n> | --no-abbrev
    --abbrev-commit
    --left-right
    --count
  special purpose:
    --bisect
    --bisect-vars
    --bisect-all
ok 12 - rev-list -g complains when there are no reflogs

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1410-reflog.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1410-reflog/.git/
expecting success of 1410.1 'setup': 
	mkdir -p A/B &&
	echo rat >C &&
	echo ox >A/D &&
	echo tiger >A/B/E &&
	git add . &&

	test_tick && git commit -m rabbit &&
	H=$(git rev-parse --verify HEAD) &&
	A=$(git rev-parse --verify HEAD:A) &&
	B=$(git rev-parse --verify HEAD:A/B) &&
	C=$(git rev-parse --verify HEAD:C) &&
	D=$(git rev-parse --verify HEAD:A/D) &&
	E=$(git rev-parse --verify HEAD:A/B/E) &&
	check_fsck &&

	test_chmod +x C &&
	git add C &&
	test_tick && git commit -m dragon &&
	L=$(git rev-parse --verify HEAD) &&
	check_fsck &&

	rm -f C A/B/E &&
	echo snake >F &&
	echo horse >A/G &&
	git add F A/G &&
	test_tick && git commit -a -m sheep &&
	F=$(git rev-parse --verify HEAD:F) &&
	G=$(git rev-parse --verify HEAD:A/G) &&
	I=$(git rev-parse --verify HEAD:A) &&
	J=$(git rev-parse --verify HEAD) &&
	check_fsck &&

	rm -f A/G &&
	test_tick && git commit -a -m monkey &&
	K=$(git rev-parse --verify HEAD) &&
	check_fsck &&

	check_have A B C D E F G H I J K L &&

	git prune &&

	check_have A B C D E F G H I J K L &&

	check_fsck &&

	git reflog refs/heads/main >output &&
	test_line_count = 4 output

[main (root-commit) 07fcc4f] rabbit
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 A/B/E
 create mode 100644 A/D
 create mode 100644 C
[main 7d1a0b8] dragon
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 C
[main 15ab5f0] sheep
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 A/B/E
 create mode 100644 A/G
 delete mode 100755 C
 create mode 100644 F
[main 3ac530f] monkey
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 A/G
tree
tree
blob
blob
blob
blob
blob
commit
tree
commit
commit
commit
tree
tree
blob
blob
blob
blob
blob
commit
tree
commit
commit
commit
ok 1 - setup

expecting success of 1410.2 'correct usage on sub-command -h': 
	test_expect_code 129 git reflog expire -h >err &&
	grep "git reflog expire" err

usage: git reflog expire [--expire=<time>] [--expire-unreachable=<time>]
ok 2 - correct usage on sub-command -h

expecting success of 1410.3 'correct usage on "git reflog show -h"': 
	test_expect_code 129 git reflog show -h >err &&
	grep -F "git reflog [show]" err

usage: git reflog [show] [<log-options>] [<ref>]
ok 3 - correct usage on "git reflog show -h"

expecting success of 1410.4 'pass through -- to sub-command': 
	test_when_finished "rm -rf repo" &&
	git init repo &&
	test_commit -C repo message --a-file contents dash-tag &&

	git -C repo reflog show -- --does-not-exist >out &&
	test_must_be_empty out &&
	git -C repo reflog show >expect &&
	git -C repo reflog show -- --a-file >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1410-reflog/repo/.git/
[main (root-commit) 85b7e86] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 --a-file
ok 4 - pass through -- to sub-command

expecting success of 1410.5 'rewind': 
	test_tick && git reset --hard HEAD~2 &&
	test -f C &&
	test -f A/B/E &&
	! test -f F &&
	! test -f A/G &&

	check_have A B C D E F G H I J K L &&

	git prune &&

	check_have A B C D E F G H I J K L &&

	git reflog refs/heads/main >output &&
	test_line_count = 5 output

HEAD is now at 7d1a0b8 dragon
tree
tree
blob
blob
blob
blob
blob
commit
tree
commit
commit
commit
tree
tree
blob
blob
blob
blob
blob
commit
tree
commit
commit
commit
ok 5 - rewind

expecting success of 1410.6 'corrupt and check': 

	corrupt $F &&
	check_fsck "missing blob $F"


missing blob 9ae84adb2704cbd49549e52169b4043871e13432
ok 6 - corrupt and check

expecting success of 1410.7 'reflog expire --dry-run should not touch reflog': 

	git reflog expire --dry-run \
		--expire=$(($test_tick - 10000)) \
		--expire-unreachable=$(($test_tick - 10000)) \
		--stale-fix \
		--all &&

	git reflog refs/heads/main >output &&
	test_line_count = 5 output &&

	check_fsck "missing blob $F"

missing blob 9ae84adb2704cbd49549e52169b4043871e13432
ok 7 - reflog expire --dry-run should not touch reflog

expecting success of 1410.8 'reflog expire': 

	git reflog expire --verbose \
		--expire=$(($test_tick - 10000)) \
		--expire-unreachable=$(($test_tick - 10000)) \
		--stale-fix \
		--all &&

	git reflog refs/heads/main >output &&
	test_line_count = 2 output &&

	check_fsck "dangling commit $K"

Marking reachable objects...
keep commit (initial): rabbit
keep commit: dragon
prune commit: sheep
prune commit: monkey
prune reset: moving to HEAD~2
keep commit (initial): rabbit
keep commit: dragon
prune commit: sheep
prune commit: monkey
prune reset: moving to HEAD~2
dangling commit 3ac530f2f6c3a45206a6b2d455baf89d1c8f672d
ok 8 - reflog expire

expecting success of 1410.9 '--stale-fix handles missing objects generously': 
	git -c core.logAllRefUpdates=false fast-import --date-format=now <<-EOS &&
	commit refs/heads/stale-fix
	mark :1
	committer Author <a@uth.or> now
	data <<EOF
	start stale fix
	EOF
	M 100644 inline file
	data <<EOF
	contents
	EOF
	commit refs/heads/stale-fix
	committer Author <a@uth.or> now
	data <<EOF
	stale fix branch tip
	EOF
	from :1
	EOS

	parent_oid=$(git rev-parse stale-fix^) &&
	test_when_finished "recover $parent_oid" &&
	corrupt $parent_oid &&
	git reflog expire --stale-fix

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 9 - --stale-fix handles missing objects generously

expecting success of 1410.10 'prune and fsck': 

	git prune &&
	check_fsck &&

	check_have A B C D E H L &&
	check_dont_have F G I J K


tree
tree
blob
blob
blob
commit
commit
fatal: git cat-file: could not get object info
fatal: git cat-file: could not get object info
fatal: git cat-file: could not get object info
fatal: git cat-file: could not get object info
fatal: git cat-file: could not get object info
ok 10 - prune and fsck

expecting success of 1410.11 'recover and check': 

	recover $F &&
	check_fsck "dangling blob $F"


dangling blob 9ae84adb2704cbd49549e52169b4043871e13432
ok 11 - recover and check

expecting success of 1410.12 'delete': 
	echo 1 > C &&
	test_tick &&
	git commit -m rat C &&

	echo 2 > C &&
	test_tick &&
	git commit -m ox C &&

	echo 3 > C &&
	test_tick &&
	git commit -m tiger C &&

	HEAD_entry_count=$(git reflog | wc -l) &&
	main_entry_count=$(git reflog show main | wc -l) &&

	test $HEAD_entry_count = 5 &&
	test $main_entry_count = 5 &&


	git reflog delete main@{1} &&
	git reflog show main > output &&
	test_line_count = $(($main_entry_count - 1)) output &&
	test $HEAD_entry_count = $(git reflog | wc -l) &&
	! grep ox < output &&

	main_entry_count=$(wc -l < output) &&

	git reflog delete HEAD@{1} &&
	test $(($HEAD_entry_count -1)) = $(git reflog | wc -l) &&
	test $main_entry_count = $(git reflog show main | wc -l) &&

	HEAD_entry_count=$(git reflog | wc -l) &&

	git reflog delete main@{07.04.2005.15:15:00.-0700} &&
	git reflog show main > output &&
	test_line_count = $(($main_entry_count - 1)) output &&
	! grep dragon < output


[main f392752] rat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 7e525ff] ox
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3740c00] tiger
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - delete

expecting success of 1410.13 'rewind2': 

	test_tick && git reset --hard HEAD~2 &&
	git reflog refs/heads/main >output &&
	test_line_count = 4 output

HEAD is now at f392752 rat
ok 13 - rewind2

expecting success of 1410.14 '--expire=never': 

	git reflog expire --verbose \
		--expire=never \
		--expire-unreachable=never \
		--all &&
	git reflog refs/heads/main >output &&
	test_line_count = 4 output

keep commit (initial): rabbit
keep commit: rat
keep commit: tiger
keep reset: moving to HEAD~2
keep commit (initial): rabbit
keep commit: dragon
keep commit: rat
keep commit: tiger
keep reset: moving to HEAD~2
ok 14 - --expire=never

expecting success of 1410.15 'gc.reflogexpire=never': 
	test_config gc.reflogexpire never &&
	test_config gc.reflogexpireunreachable never &&

	git reflog expire --verbose --all >output &&
	test_line_count = 9 output &&

	git reflog refs/heads/main >output &&
	test_line_count = 4 output

ok 15 - gc.reflogexpire=never

expecting success of 1410.16 'gc.reflogexpire=false': 
	test_config gc.reflogexpire false &&
	test_config gc.reflogexpireunreachable false &&

	git reflog expire --verbose --all &&
	git reflog refs/heads/main >output &&
	test_line_count = 4 output


keep commit (initial): rabbit
keep commit: rat
keep commit: tiger
keep reset: moving to HEAD~2
keep commit (initial): rabbit
keep commit: dragon
keep commit: rat
keep commit: tiger
keep reset: moving to HEAD~2
ok 16 - gc.reflogexpire=false

expecting success of 1410.17 'git reflog expire unknown reference': 
	test_config gc.reflogexpire never &&
	test_config gc.reflogexpireunreachable never &&

	test_must_fail git reflog expire main@{123} 2>stderr &&
	test_i18ngrep "points nowhere" stderr &&
	test_must_fail git reflog expire does-not-exist 2>stderr &&
	test_i18ngrep "points nowhere" stderr

error: main@{123} points nowhere!
error: does-not-exist points nowhere!
ok 17 - git reflog expire unknown reference

expecting success of 1410.18 'checkout should not delete log for packed ref': 
	test $(git reflog main | wc -l) = 4 &&
	git branch foo &&
	git pack-refs --all &&
	git checkout foo &&
	test $(git reflog main | wc -l) = 4

Switched to branch 'foo'
ok 18 - checkout should not delete log for packed ref

expecting success of 1410.19 'stale dirs do not cause d/f conflicts (reflogs on)': 
	test_when_finished "git branch -d one || git branch -d one/two" &&

	git branch one/two main &&
	echo "one/two@{0} branch: Created from main" >expect &&
	git log -g --format="%gd %gs" one/two >actual &&
	test_cmp expect actual &&
	git branch -d one/two &&

	# now logs/refs/heads/one is a stale directory, but
	# we should move it out of the way to create "one" reflog
	git branch one main &&
	echo "one@{0} branch: Created from main" >expect &&
	git log -g --format="%gd %gs" one >actual &&
	test_cmp expect actual

Deleted branch one/two (was f392752).
Deleted branch one (was f392752).
ok 19 - stale dirs do not cause d/f conflicts (reflogs on)

expecting success of 1410.20 'stale dirs do not cause d/f conflicts (reflogs off)': 
	test_when_finished "git branch -d one || git branch -d one/two" &&

	git branch one/two main &&
	echo "one/two@{0} branch: Created from main" >expect &&
	git log -g --format="%gd %gs" one/two >actual &&
	test_cmp expect actual &&
	git branch -d one/two &&

	# same as before, but we only create a reflog for "one" if
	# it already exists, which it does not
	git -c core.logallrefupdates=false branch one main &&
	git log -g --format="%gd %gs" one >actual &&
	test_must_be_empty actual

Deleted branch one/two (was f392752).
Deleted branch one (was f392752).
ok 20 - stale dirs do not cause d/f conflicts (reflogs off)

checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
expecting success of 1410.21 'parsing reverse reflogs at BUFSIZ boundaries': 
	git checkout -b reflogskip &&
	zf=$(test_oid zero_2) &&
	ident="abc <xyz> 0000000001 +0000" &&
	for i in $(test_seq 1 75); do
		printf "$zf%02d $zf%02d %s\t" $i $(($i+1)) "$ident" &&
		if test $i = 75; then
			for j in $(test_seq 1 89); do
				printf X || return 1
			done
		else
			printf X
		fi &&
		printf "\n" || return 1
	done >.git/logs/refs/heads/reflogskip &&
	git rev-parse reflogskip@{73} >actual &&
	echo ${zf}03 >expect &&
	test_cmp expect actual

Switched to a new branch 'reflogskip'
ok 21 - parsing reverse reflogs at BUFSIZ boundaries

expecting success of 1410.22 'no segfaults for reflog containing non-commit sha1s': 
	git update-ref --create-reflog -m "Creating ref" \
		refs/tests/tree-in-reflog HEAD &&
	git update-ref -m "Forcing tree" refs/tests/tree-in-reflog HEAD^{tree} &&
	git update-ref -m "Restoring to commit" refs/tests/tree-in-reflog HEAD &&
	git reflog refs/tests/tree-in-reflog

f392752 refs/tests/tree-in-reflog@{0}: Restoring to commit
f392752 refs/tests/tree-in-reflog@{2}: Creating ref
ok 22 - no segfaults for reflog containing non-commit sha1s

checking known breakage of 1410.23 'reflog with non-commit entries displays all entries': 
	git reflog refs/tests/tree-in-reflog >actual &&
	test_line_count = 3 actual

test_line_count: line count for actual != 3
f392752 refs/tests/tree-in-reflog@{0}: Restoring to commit
f392752 refs/tests/tree-in-reflog@{2}: Creating ref
not ok 23 - reflog with non-commit entries displays all entries # TODO known breakage

expecting success of 1410.24 'reflog expire operates on symref not referrent': 
	git branch --create-reflog the_symref &&
	git branch --create-reflog referrent &&
	git update-ref referrent HEAD &&
	git symbolic-ref refs/heads/the_symref refs/heads/referrent &&
	test_when_finished "rm -f .git/refs/heads/referrent.lock" &&
	touch .git/refs/heads/referrent.lock &&
	git reflog expire --expire=all the_symref

ok 24 - reflog expire operates on symref not referrent

expecting success of 1410.25 'continue walking past root commits': 
	git init orphanage &&
	(
		cd orphanage &&
		cat >expect <<-\EOF &&
		HEAD@{0} commit (initial): orphan2-1
		HEAD@{1} commit: orphan1-2
		HEAD@{2} commit (initial): orphan1-1
		HEAD@{3} commit (initial): initial
		EOF
		test_commit initial &&
		git checkout --orphan orphan1 &&
		test_commit orphan1-1 &&
		test_commit orphan1-2 &&
		git checkout --orphan orphan2 &&
		test_commit orphan2-1 &&
		git log -g --format="%gd %gs" >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1410-reflog/orphanage/.git/
[main (root-commit) 3805046] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'orphan1'
[orphan1 (root-commit) 5906753] orphan1-1
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 initial.t
 create mode 100644 orphan1-1.t
[orphan1 4e641d7] orphan1-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 orphan1-2.t
Switched to a new branch 'orphan2'
[orphan2 (root-commit) 593a89b] orphan2-1
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 initial.t
 create mode 100644 orphan1-1.t
 create mode 100644 orphan1-2.t
 create mode 100644 orphan2-1.t
ok 25 - continue walking past root commits

expecting success of 1410.26 'expire with multiple worktrees': 
	git init main-wt &&
	(
		cd main-wt &&
		test_tick &&
		test_commit foo &&
		git  worktree add link-wt &&
		test_tick &&
		test_commit -C link-wt foobar &&
		test_tick &&
		git reflog expire --verbose --all --expire=$test_tick &&
		test-tool ref-store worktree:link-wt for-each-reflog-ent HEAD >actual &&
		test_must_be_empty actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1410-reflog/main-wt/.git/
[main (root-commit) 7745948] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Preparing worktree (new branch 'link-wt')
HEAD is now at 7745948 foo
[link-wt 25ae450] foobar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foobar.t
prune commit (initial): foo
prune commit (initial): foo
prune branch: Created from HEAD
prune commit: foobar
prune 
prune reset: moving to HEAD
prune commit: foobar
ok 26 - expire with multiple worktrees

expecting success of 1410.27 'empty reflog': 
	test_when_finished "rm -rf empty" &&
	git init empty &&
	test_commit -C empty A &&
	>empty/.git/logs/refs/heads/foo &&
	git -C empty reflog expire --all 2>err &&
	test_must_be_empty err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1410-reflog/empty/.git/
[main (root-commit) d4404d5] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
ok 27 - empty reflog

# still have 1 known breakage(s)
# passed all remaining 26 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1416-ref-transaction-hooks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1416-ref-transaction-hooks/.git/
expecting success of 1416.1 'setup': 
	test_commit PRE &&
	PRE_OID=$(git rev-parse PRE) &&
	test_commit POST &&
	POST_OID=$(git rev-parse POST)

[main (root-commit) 63ac8e7] PRE
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 PRE.t
[main 99d5316] POST
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 POST.t
ok 1 - setup

expecting success of 1416.2 'hook allows updating ref if successful': 
	git reset --hard PRE &&
	test_hook reference-transaction <<-\EOF &&
		echo "$*" >>actual
	EOF
	cat >expect <<-EOF &&
		prepared
		committed
	EOF
	git update-ref HEAD POST &&
	test_cmp expect actual

HEAD is now at 63ac8e7 PRE
ok 2 - hook allows updating ref if successful

expecting success of 1416.3 'hook aborts updating ref in prepared state': 
	git reset --hard PRE &&
	test_hook reference-transaction <<-\EOF &&
		if test "$1" = prepared
		then
			exit 1
		fi
	EOF
	test_must_fail git update-ref HEAD POST 2>err &&
	test_i18ngrep "ref updates aborted by hook" err

HEAD is now at 63ac8e7 PRE
fatal: ref updates aborted by hook
ok 3 - hook aborts updating ref in prepared state

expecting success of 1416.4 'hook gets all queued updates in prepared state': 
	test_when_finished "rm actual" &&
	git reset --hard PRE &&
	test_hook reference-transaction <<-\EOF &&
		if test "$1" = prepared
		then
			while read -r line
			do
				printf "%s\n" "$line"
			done >actual
		fi
	EOF
	cat >expect <<-EOF &&
		$ZERO_OID $POST_OID HEAD
		$ZERO_OID $POST_OID refs/heads/main
	EOF
	git update-ref HEAD POST <<-EOF &&
		update HEAD $ZERO_OID $POST_OID
		update refs/heads/main $ZERO_OID $POST_OID
	EOF
	test_cmp expect actual

HEAD is now at 63ac8e7 PRE
ok 4 - hook gets all queued updates in prepared state

expecting success of 1416.5 'hook gets all queued updates in committed state': 
	test_when_finished "rm actual" &&
	git reset --hard PRE &&
	test_hook reference-transaction <<-\EOF &&
		if test "$1" = committed
		then
			while read -r line
			do
				printf "%s\n" "$line"
			done >actual
		fi
	EOF
	cat >expect <<-EOF &&
		$ZERO_OID $POST_OID HEAD
		$ZERO_OID $POST_OID refs/heads/main
	EOF
	git update-ref HEAD POST &&
	test_cmp expect actual

HEAD is now at 63ac8e7 PRE
ok 5 - hook gets all queued updates in committed state

expecting success of 1416.6 'hook gets all queued updates in aborted state': 
	test_when_finished "rm actual" &&
	git reset --hard PRE &&
	test_hook reference-transaction <<-\EOF &&
		if test "$1" = aborted
		then
			while read -r line
			do
				printf "%s\n" "$line"
			done >actual
		fi
	EOF
	cat >expect <<-EOF &&
		$ZERO_OID $POST_OID HEAD
		$ZERO_OID $POST_OID refs/heads/main
	EOF
	git update-ref --stdin <<-EOF &&
		start
		update HEAD POST $ZERO_OID
		update refs/heads/main POST $ZERO_OID
		abort
	EOF
	test_cmp expect actual

HEAD is now at 63ac8e7 PRE
start: ok
abort: ok
ok 6 - hook gets all queued updates in aborted state

expecting success of 1416.7 'interleaving hook calls succeed': 
	test_when_finished "rm -r target-repo.git" &&

	git init --bare target-repo.git &&

	test_hook -C target-repo.git reference-transaction <<-\EOF &&
		echo $0 "$@" >>actual
	EOF

	test_hook -C target-repo.git update <<-\EOF &&
		echo $0 "$@" >>actual
	EOF

	cat >expect <<-EOF &&
		hooks/update refs/tags/PRE $ZERO_OID $PRE_OID
		hooks/reference-transaction prepared
		hooks/reference-transaction committed
		hooks/update refs/tags/POST $ZERO_OID $POST_OID
		hooks/reference-transaction prepared
		hooks/reference-transaction committed
	EOF

	git push ./target-repo.git PRE POST &&
	test_cmp expect target-repo.git/actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1416-ref-transaction-hooks/target-repo.git/
To ./target-repo.git
 * [new tag]         PRE -> PRE
 * [new tag]         POST -> POST
ok 7 - interleaving hook calls succeed

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1415-worktree-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1415-worktree-refs/.git/
expecting success of 1415.1 'setup': 
	test_commit initial &&
	test_commit wt1 &&
	test_commit wt2 &&
	git worktree add wt1 wt1 &&
	git worktree add wt2 wt2 &&
	git checkout initial &&
	git update-ref refs/worktree/foo HEAD &&
	git -C wt1 update-ref refs/worktree/foo HEAD &&
	git -C wt2 update-ref refs/worktree/foo HEAD

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[master 42fba42] wt1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 wt1.t
[master 83df652] wt2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 wt2.t
Preparing worktree (detached HEAD 42fba42)
HEAD is now at 42fba42 wt1
Preparing worktree (detached HEAD 83df652)
HEAD is now at 83df652 wt2
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 24b24cf initial
ok 1 - setup

expecting success of 1415.2 'refs/worktree must not be packed': 
	git pack-refs --all &&
	test_path_is_missing .git/refs/tags/wt1 &&
	test_path_is_file .git/refs/worktree/foo &&
	test_path_is_file .git/worktrees/wt1/refs/worktree/foo &&
	test_path_is_file .git/worktrees/wt2/refs/worktree/foo

ok 2 - refs/worktree must not be packed

expecting success of 1415.3 'refs/worktree are per-worktree': 
	test_cmp_rev worktree/foo initial &&
	( cd wt1 && test_cmp_rev worktree/foo wt1 ) &&
	( cd wt2 && test_cmp_rev worktree/foo wt2 )

ok 3 - refs/worktree are per-worktree

expecting success of 1415.4 'resolve main-worktree/HEAD': 
	test_cmp_rev main-worktree/HEAD initial &&
	( cd wt1 && test_cmp_rev main-worktree/HEAD initial ) &&
	( cd wt2 && test_cmp_rev main-worktree/HEAD initial )

ok 4 - resolve main-worktree/HEAD

expecting success of 1415.5 'ambiguous main-worktree/HEAD': 
	test_when_finished git update-ref -d refs/heads/main-worktree/HEAD &&
	git update-ref refs/heads/main-worktree/HEAD $(git rev-parse HEAD) &&
	git rev-parse main-worktree/HEAD 2>warn &&
	grep "main-worktree/HEAD.*ambiguous" warn

24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
warning: refname 'main-worktree/HEAD' is ambiguous.
ok 5 - ambiguous main-worktree/HEAD

expecting success of 1415.6 'resolve worktrees/xx/HEAD': 
	test_cmp_rev worktrees/wt1/HEAD wt1 &&
	( cd wt1 && test_cmp_rev worktrees/wt1/HEAD wt1 ) &&
	( cd wt2 && test_cmp_rev worktrees/wt1/HEAD wt1 )

ok 6 - resolve worktrees/xx/HEAD

expecting success of 1415.7 'ambiguous worktrees/xx/HEAD': 
	git update-ref refs/heads/worktrees/wt1/HEAD $(git rev-parse HEAD) &&
	test_when_finished git update-ref -d refs/heads/worktrees/wt1/HEAD &&
	git rev-parse worktrees/wt1/HEAD 2>warn &&
	grep "worktrees/wt1/HEAD.*ambiguous" warn

42fba42569eaa325aaade18832dfa5432d54ffd1
warning: refname 'worktrees/wt1/HEAD' is ambiguous.
ok 7 - ambiguous worktrees/xx/HEAD

expecting success of 1415.8 'reflog of main-worktree/HEAD': 
	git reflog HEAD | sed "s/HEAD/main-worktree\/HEAD/" >expected &&
	git reflog main-worktree/HEAD >actual &&
	test_cmp expected actual &&
	git -C wt1 reflog main-worktree/HEAD >actual.wt1 &&
	test_cmp expected actual.wt1

ok 8 - reflog of main-worktree/HEAD

expecting success of 1415.9 'reflog of worktrees/xx/HEAD': 
	git -C wt2 reflog HEAD | sed "s/HEAD/worktrees\/wt2\/HEAD/" >expected &&
	git reflog worktrees/wt2/HEAD >actual &&
	test_cmp expected actual &&
	git -C wt1 reflog worktrees/wt2/HEAD >actual.wt1 &&
	test_cmp expected actual.wt1 &&
	git -C wt2 reflog worktrees/wt2/HEAD >actual.wt2 &&
	test_cmp expected actual.wt2

ok 9 - reflog of worktrees/xx/HEAD

expecting success of 1415.10 'for-each-ref from main worktree': 
	mkdir fer1 &&
	git -C fer1 init repo &&
	test_commit -C fer1/repo initial &&
	git -C fer1/repo worktree add ../second &&
	git -C fer1/repo update-ref refs/bisect/first HEAD &&
	git -C fer1/repo update-ref refs/rewritten/first HEAD &&
	git -C fer1/repo update-ref refs/worktree/first HEAD &&
	git -C fer1/repo for-each-ref --format="%(refname)" | grep first >actual &&
	cat >expected <<-\EOF &&
	refs/bisect/first
	refs/rewritten/first
	refs/worktree/first
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1415-worktree-refs/fer1/repo/.git/
[master (root-commit) 1935181] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Preparing worktree (new branch 'second')
HEAD is now at 1935181 initial
ok 10 - for-each-ref from main worktree

expecting success of 1415.11 'for-each-ref from linked worktree': 
	mkdir fer2 &&
	git -C fer2 init repo &&
	test_commit -C fer2/repo initial &&
	git -C fer2/repo worktree add ../second &&
	git -C fer2/second update-ref refs/bisect/second HEAD &&
	git -C fer2/second update-ref refs/rewritten/second HEAD &&
	git -C fer2/second update-ref refs/worktree/second HEAD &&
	git -C fer2/second for-each-ref --format="%(refname)" | grep second >actual &&
	cat >expected <<-\EOF &&
	refs/bisect/second
	refs/heads/second
	refs/rewritten/second
	refs/worktree/second
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1415-worktree-refs/fer2/repo/.git/
[master (root-commit) 23fa7ba] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Preparing worktree (new branch 'second')
HEAD is now at 23fa7ba initial
ok 11 - for-each-ref from linked worktree

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1418-reflog-exists.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1418-reflog-exists/.git/
expecting success of 1418.1 'setup': 
	test_commit A

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
ok 1 - setup

expecting success of 1418.2 'usage': 
	test_expect_code 129 git reflog exists &&
	test_expect_code 129 git reflog exists -h

usage: git reflog exists <ref>

usage: git reflog exists <ref>

ok 2 - usage

expecting success of 1418.3 'usage: unknown option': 
	test_expect_code 129 git reflog exists --unknown-option

error: unknown option `unknown-option'
usage: git reflog exists <ref>

ok 3 - usage: unknown option

expecting success of 1418.4 'reflog exists works': 
	git reflog exists refs/heads/main &&
	test_must_fail git reflog exists refs/heads/nonexistent

ok 4 - reflog exists works

expecting success of 1418.5 'reflog exists works with a "--" delimiter': 
	git reflog exists -- refs/heads/main &&
	test_must_fail git reflog exists -- refs/heads/nonexistent

ok 5 - reflog exists works with a "--" delimiter

expecting success of 1418.6 'reflog exists works with a "--end-of-options" delimiter': 
	git reflog exists --end-of-options refs/heads/main &&
	test_must_fail git reflog exists --end-of-options refs/heads/nonexistent

ok 6 - reflog exists works with a "--end-of-options" delimiter

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1420-lost-found.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1420-lost-found/.git/
expecting success of 1420.1 'setup': 
	git config core.logAllRefUpdates 0 &&
	: > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m initial &&
	echo 1 > file1 &&
	echo 2 > file2 &&
	git add file1 file2 &&
	test_tick &&
	git commit -m second &&
	echo 3 > file3 &&
	git add file3

[master (root-commit) 9bb1ae9] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
[master 8ad33be] second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file2
ok 1 - setup

expecting success of 1420.2 'lost and found something': 
	git rev-parse HEAD > lost-commit &&
	git rev-parse :file3 > lost-other &&
	test_tick &&
	git reset --hard HEAD^ &&
	git fsck --lost-found &&
	test 2 = $(ls .git/lost-found/*/* | wc -l) &&
	test -f .git/lost-found/commit/$(cat lost-commit) &&
	test -f .git/lost-found/other/$(cat lost-other)

HEAD is now at 9bb1ae9 initial
dangling blob 00750edc07d6415dcc07ae0351e9397b0222b7ba
dangling commit 8ad33beea8de8e15812274614acd0a26d73b60f8
ok 2 - lost and found something

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1417-reflog-updateref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1417-reflog-updateref/.git/
expecting success of 1417.1 'setup': 
	git init -b main repo &&
	(
		cd repo &&

		test_commit A &&
		test_commit B &&
		test_commit C &&

		cp .git/logs/HEAD HEAD.old &&
		git reset --hard HEAD~ &&
		cp HEAD.old .git/logs/HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1417-reflog-updateref/repo/.git/
[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
HEAD is now at d9df450 B
ok 1 - setup

expecting success of 1417.2 'get 'B' with 'git reflog delete --updateref HEAD@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 2 - get 'B' with 'git reflog delete --updateref HEAD@{0}'

expecting success of 1417.3 'get 'B' with 'git reflog delete --updateref HEAD@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 3 - get 'B' with 'git reflog delete --updateref HEAD@{1}'

expecting success of 1417.4 'get 'C' with 'git reflog delete --updateref main@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 4 - get 'C' with 'git reflog delete --updateref main@{0}'

expecting success of 1417.5 'get 'B' with 'git reflog delete --updateref main@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 5 - get 'B' with 'git reflog delete --updateref main@{1}'

expecting success of 1417.6 'get 'B' with 'git reflog delete --updateref --rewrite HEAD@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 6 - get 'B' with 'git reflog delete --updateref --rewrite HEAD@{0}'

expecting success of 1417.7 'get 'B' with 'git reflog delete --updateref --rewrite HEAD@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 7 - get 'B' with 'git reflog delete --updateref --rewrite HEAD@{1}'

expecting success of 1417.8 'get 'C' with 'git reflog delete --updateref --rewrite main@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 8 - get 'C' with 'git reflog delete --updateref --rewrite main@{0}'

expecting success of 1417.9 'get 'B' with 'git reflog delete --updateref --rewrite main@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
ok 9 - get 'B' with 'git reflog delete --updateref --rewrite main@{1}'

expecting success of 1417.10 'get 'B' with 'test_must_fail git reflog expire HEAD@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{0} points nowhere!
ok 10 - get 'B' with 'test_must_fail git reflog expire HEAD@{0}'

expecting success of 1417.11 'get 'B' with 'test_must_fail git reflog expire HEAD@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{1} points nowhere!
ok 11 - get 'B' with 'test_must_fail git reflog expire HEAD@{1}'

expecting success of 1417.12 'get 'B' with 'test_must_fail git reflog expire main@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{0} points nowhere!
ok 12 - get 'B' with 'test_must_fail git reflog expire main@{0}'

expecting success of 1417.13 'get 'B' with 'test_must_fail git reflog expire main@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{1} points nowhere!
ok 13 - get 'B' with 'test_must_fail git reflog expire main@{1}'

expecting success of 1417.14 'get 'B' with 'test_must_fail git reflog expire --updateref HEAD@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{0} points nowhere!
ok 14 - get 'B' with 'test_must_fail git reflog expire --updateref HEAD@{0}'

expecting success of 1417.15 'get 'B' with 'test_must_fail git reflog expire --updateref HEAD@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{1} points nowhere!
ok 15 - get 'B' with 'test_must_fail git reflog expire --updateref HEAD@{1}'

expecting success of 1417.16 'get 'B' with 'test_must_fail git reflog expire --updateref main@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{0} points nowhere!
ok 16 - get 'B' with 'test_must_fail git reflog expire --updateref main@{0}'

expecting success of 1417.17 'get 'B' with 'test_must_fail git reflog expire --updateref main@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{1} points nowhere!
ok 17 - get 'B' with 'test_must_fail git reflog expire --updateref main@{1}'

expecting success of 1417.18 'get 'B' with 'test_must_fail git reflog expire --updateref --rewrite HEAD@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{0} points nowhere!
ok 18 - get 'B' with 'test_must_fail git reflog expire --updateref --rewrite HEAD@{0}'

expecting success of 1417.19 'get 'B' with 'test_must_fail git reflog expire --updateref --rewrite HEAD@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: HEAD@{1} points nowhere!
ok 19 - get 'B' with 'test_must_fail git reflog expire --updateref --rewrite HEAD@{1}'

expecting success of 1417.20 'get 'B' with 'test_must_fail git reflog expire --updateref --rewrite main@{0}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{0} points nowhere!
ok 20 - get 'B' with 'test_must_fail git reflog expire --updateref --rewrite main@{0}'

expecting success of 1417.21 'get 'B' with 'test_must_fail git reflog expire --updateref --rewrite main@{1}'': 
		test_when_finished "rm -rf copy" &&
		cp -R repo copy &&

		(
			cd copy &&

			$args &&
			git rev-parse $exp >expect &&
			git rev-parse HEAD >actual &&

			test_cmp expect actual
		)
	
error: main@{1} points nowhere!
ok 21 - get 'B' with 'test_must_fail git reflog expire --updateref --rewrite main@{1}'

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1013-read-tree-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/.git/
expecting success of 1013.1 'git read-tree -u -m --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 1 - git read-tree -u -m --recurse-submodules: added submodule is checked out

expecting success of 1013.2 'git read-tree -u -m --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 2 - git read-tree -u -m --recurse-submodules: added submodule is checked out in empty dir

expecting success of 1013.3 'git read-tree -u -m --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
ok 3 - git read-tree -u -m --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 1013.4 'git read-tree -u -m --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
ok 4 - git read-tree -u -m --recurse-submodules: replace directory with submodule

expecting success of 1013.5 'git read-tree -u -m --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
ok 5 - git read-tree -u -m --recurse-submodules: nested submodules are checked out

expecting success of 1013.6 'git read-tree -u -m --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
ok 6 - git read-tree -u -m --recurse-submodules: removed submodule removes submodules working tree

expecting success of 1013.7 'git read-tree -u -m --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/.git/modules/sub1'
ok 7 - git read-tree -u -m --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 1013.8 'git read-tree -u -m --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 8 - git read-tree -u -m --recurse-submodules: replace submodule with a file

checking known breakage of 1013.9 'git read-tree -u -m --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u -m --recurse-submodules replace_sub1_with_file
not ok 9 - git read-tree -u -m --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 1013.10 'git read-tree -u -m --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'no_submodule' set up to track 'origin/no_submodule'.
Directory sub1 doesn't exist
ok 10 - git read-tree -u -m --recurse-submodules: worktrees of nested submodules are removed

expecting success of 1013.11 'git read-tree -u -m --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 11 - git read-tree -u -m --recurse-submodules: modified submodule updates submodule work tree

expecting success of 1013.12 'git read-tree -u -m --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
error: Submodule 'sub1' cannot checkout new HEAD.
ok 12 - git read-tree -u -m --recurse-submodules: updating to a missing submodule commit fails

expecting success of 1013.13 'git read-tree -u -m --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
fatal: ref HEAD is not a symbolic ref
ok 13 - git read-tree -u -m --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 1013.14 'git read-tree -u -m --recurse-submodules: added submodule doesn't remove untracked file with same name': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			test_must_fail $command add_sub1 &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
ok 14 - git read-tree -u -m --recurse-submodules: added submodule doesn't remove untracked file with same name

expecting success of 1013.15 'git read-tree -u -m --recurse-submodules: added submodule removes an untracked ignored file': 
		test_when_finished "rm -rf submodule_update/.git/info" &&
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			mkdir .git/info &&
			echo sub1 >.git/info/exclude &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 15 - git read-tree -u -m --recurse-submodules: added submodule removes an untracked ignored file

checking known breakage of 1013.16 'git read-tree -u -m --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_submodule_content sub1 origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
not ok 16 - git read-tree -u -m --recurse-submodules: replace submodule with a directory # TODO known breakage

checking known breakage of 1013.17 'git read-tree -u -m --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
not ok 17 - git read-tree -u -m --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir # TODO known breakage

expecting success of 1013.18 'git read-tree -u -m --recurse-submodules: replace submodule with a file works ignores ignored files in submodule': 
		test_when_finished "rm submodule_update/.git/modules/sub1/info/exclude" &&
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm -rf .git/modules/sub1/info &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			mkdir .git/modules/sub1/info &&
			echo ignored >.git/modules/sub1/info/exclude &&
			: >sub1/ignored &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 18 - git read-tree -u -m --recurse-submodules: replace submodule with a file works ignores ignored files in submodule

expecting success of 1013.19 'git -c submodule.recurse=true read-tree -u -m: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			git -c submodule.recurse=true $cmd_args modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 19 - git -c submodule.recurse=true read-tree -u -m: modified submodule updates submodule work tree

expecting success of 1013.20 'git read-tree -u -m --recurse-submodules: modified submodule updates submodule recursively': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
ok 20 - git read-tree -u -m --recurse-submodules: modified submodule updates submodule recursively

expecting success of 1013.21 'git read-tree -u --reset --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 21 - git read-tree -u --reset --recurse-submodules: added submodule is checked out

expecting success of 1013.22 'git read-tree -u --reset --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 22 - git read-tree -u --reset --recurse-submodules: added submodule is checked out in empty dir

expecting success of 1013.23 'git read-tree -u --reset --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
ok 23 - git read-tree -u --reset --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 1013.24 'git read-tree -u --reset --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
ok 24 - git read-tree -u --reset --recurse-submodules: replace directory with submodule

expecting success of 1013.25 'git read-tree -u --reset --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
ok 25 - git read-tree -u --reset --recurse-submodules: nested submodules are checked out

expecting success of 1013.26 'git read-tree -u --reset --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
ok 26 - git read-tree -u --reset --recurse-submodules: removed submodule removes submodules working tree

expecting success of 1013.27 'git read-tree -u --reset --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/.git/modules/sub1'
ok 27 - git read-tree -u --reset --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 1013.28 'git read-tree -u --reset --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 28 - git read-tree -u --reset --recurse-submodules: replace submodule with a file

checking known breakage of 1013.29 'git read-tree -u --reset --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u --reset --recurse-submodules replace_sub1_with_file
not ok 29 - git read-tree -u --reset --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 1013.30 'git read-tree -u --reset --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'no_submodule' set up to track 'origin/no_submodule'.
Directory sub1 doesn't exist
ok 30 - git read-tree -u --reset --recurse-submodules: worktrees of nested submodules are removed

expecting success of 1013.31 'git read-tree -u --reset --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 31 - git read-tree -u --reset --recurse-submodules: modified submodule updates submodule work tree

expecting success of 1013.32 'git read-tree -u --reset --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
error: Submodule 'sub1' cannot checkout new HEAD.
ok 32 - git read-tree -u --reset --recurse-submodules: updating to a missing submodule commit fails

expecting success of 1013.33 'git read-tree -u --reset --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
fatal: ref HEAD is not a symbolic ref
ok 33 - git read-tree -u --reset --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 1013.34 'git read-tree -u --reset --recurse-submodules: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 34 - git read-tree -u --reset --recurse-submodules: added submodule does remove untracked unignored file with same name when forced

expecting success of 1013.35 'git read-tree -u --reset --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
ok 35 - git read-tree -u --reset --recurse-submodules: replace submodule with a directory

expecting success of 1013.36 'git read-tree -u --reset --recurse-submodules: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules/sub1 &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/.git/modules/sub1'
ok 36 - git read-tree -u --reset --recurse-submodules: replace submodule containing a .git directory with a directory must fail

expecting success of 1013.37 'git read-tree -u --reset --recurse-submodules: replace submodule with a file ignoring ignored files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/expect &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 37 - git read-tree -u --reset --recurse-submodules: replace submodule with a file ignoring ignored files

expecting success of 1013.38 'git read-tree -u --reset --recurse-submodules: modified submodule does update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to_interested invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
ok 38 - git read-tree -u --reset --recurse-submodules: modified submodule does update submodule work tree from invalid commit

expecting success of 1013.39 'git read-tree -u --reset --recurse-submodules: updating submodules fixes .git links': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			echo "gitdir: bogus/path" >sub1/.git &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 39 - git read-tree -u --reset --recurse-submodules: updating submodules fixes .git links

expecting success of 1013.40 'git read-tree -u --reset --recurse-submodules: changed submodule worktree is reset': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm sub1/file1 &&
			: >sub1/new_file &&
			git -C sub1 add new_file &&
			$command HEAD &&
			test_path_is_file sub1/file1 &&
			test_path_is_missing sub1/new_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 40 - git read-tree -u --reset --recurse-submodules: changed submodule worktree is reset

expecting success of 1013.41 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 41 - git_test_func: added submodule creates empty directory

expecting success of 1013.42 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 42 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 1013.43 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 43 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 1013.44 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 44 - git_test_func: replace directory with submodule

expecting success of 1013.45 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 45 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 1013.46 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 46 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 1013.47 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
ok 47 - git_test_func: replace submodule with a directory must fail

expecting success of 1013.48 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
ok 48 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 1013.49 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u -m replace_sub1_with_file
not ok 49 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 1013.50 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u -m replace_sub1_with_file
not ok 50 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 1013.51 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 51 - git_test_func: modified submodule does not update submodule work tree

expecting success of 1013.52 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 52 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 1013.53 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 53 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 1013.54 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
ok 54 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 1013.55 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 55 - git_test_func: added submodule creates empty directory

expecting success of 1013.56 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 56 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 1013.57 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 57 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 1013.58 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 58 - git_test_func: replace directory with submodule

expecting success of 1013.59 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 59 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 1013.60 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 60 - git_test_func: removed submodule leaves submodule containing a .git directory alone

checking known breakage of 1013.61 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
test_must_fail: command succeeded: git read-tree -u --reset replace_sub1_with_directory
not ok 61 - git_test_func: replace submodule with a directory must fail # TODO known breakage

checking known breakage of 1013.62 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
test_must_fail: command succeeded: git read-tree -u --reset replace_sub1_with_directory
not ok 62 - git_test_func: replace submodule containing a .git directory with a directory must fail # TODO known breakage

checking known breakage of 1013.63 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u --reset replace_sub1_with_file
not ok 63 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 1013.64 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u --reset replace_sub1_with_file
not ok 64 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 1013.65 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 65 - git_test_func: modified submodule does not update submodule work tree

expecting success of 1013.66 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 66 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 1013.67 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1013-read-tree-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 67 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 1013.68 'git_test_func: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 68 - git_test_func: added submodule does remove untracked unignored file with same name when forced

# still have 10 known breakage(s)
# passed all remaining 58 test(s)
1..68
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1430-bad-ref-name.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1430-bad-ref-name/.git/
expecting success of 1430.1 'setup': 
	test_commit one &&
	test_commit two &&
	main_sha1=$(git rev-parse refs/heads/main)

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - setup

expecting success of 1430.2 'fast-import: fail on invalid branch name ".badbranchname"': 
	test_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&
	cat >input <<-INPUT_END &&
		commit .badbranchname
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		corrupt
		COMMIT

		from refs/heads/main

	INPUT_END
	test_must_fail git fast-import <input

fatal: Branch name doesn't conform to GIT standards: .badbranchname
fast-import: dumping crash report to .git/fast_import_crash_30437
ok 2 - fast-import: fail on invalid branch name ".badbranchname"

expecting success of 1430.3 'fast-import: fail on invalid branch name "bad[branch]name"': 
	test_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&
	cat >input <<-INPUT_END &&
		commit bad[branch]name
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		corrupt
		COMMIT

		from refs/heads/main

	INPUT_END
	test_must_fail git fast-import <input

fatal: Branch name doesn't conform to GIT standards: bad[branch]name
fast-import: dumping crash report to .git/fast_import_crash_30449
ok 3 - fast-import: fail on invalid branch name "bad[branch]name"

expecting success of 1430.4 'git branch shows badly named ref as warning': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch >output 2>error &&
	test_i18ngrep -e "ignoring ref with broken name refs/heads/broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

warning: ignoring ref with broken name refs/heads/broken...ref
ok 4 - git branch shows badly named ref as warning

expecting success of 1430.5 'branch -d can delete badly named ref': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch -d broken...ref &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

Deleted branch broken...ref (was broken).
ok 5 - branch -d can delete badly named ref

expecting success of 1430.6 'branch -D can delete badly named ref': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch -D broken...ref &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

Deleted branch broken...ref (was broken).
ok 6 - branch -D can delete badly named ref

expecting success of 1430.7 'branch -D cannot delete non-ref in .git dir': 
	echo precious >.git/my-private-file &&
	echo precious >expect &&
	test_must_fail git branch -D ../../my-private-file &&
	test_cmp expect .git/my-private-file

error: branch '../../my-private-file' not found.
ok 7 - branch -D cannot delete non-ref in .git dir

expecting success of 1430.8 'branch -D cannot delete ref in .git dir': 
	git rev-parse HEAD >.git/my-private-file &&
	git rev-parse HEAD >expect &&
	git branch foo/legit &&
	test_must_fail git branch -D foo////./././../../../my-private-file &&
	test_cmp expect .git/my-private-file

error: branch 'foo////./././../../../my-private-file' not found.
ok 8 - branch -D cannot delete ref in .git dir

expecting success of 1430.9 'branch -D cannot delete absolute path': 
	git branch -f extra &&
	test_must_fail git branch -D "$(pwd)/.git/refs/heads/extra" &&
	test_cmp_rev HEAD extra

error: branch '/<<PKGBUILDDIR>>/t/trash directory.t1430-bad-ref-name/.git/refs/heads/extra' not found.
ok 9 - branch -D cannot delete absolute path

expecting success of 1430.10 'git branch cannot create a badly named ref': 
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test_must_fail git branch broken...ref &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

fatal: 'broken...ref' is not a valid branch name
ok 10 - git branch cannot create a badly named ref

expecting success of 1430.11 'branch -m cannot rename to a bad ref name': 
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test_might_fail git branch -D goodref &&
	git branch goodref &&
	test_must_fail git branch -m goodref broken...ref &&
	test_cmp_rev main goodref &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

error: branch 'goodref' not found.
fatal: 'broken...ref' is not a valid branch name
ok 11 - branch -m cannot rename to a bad ref name

checking known breakage of 1430.12 'branch -m can rename from a bad ref name': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&

	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch -m broken...ref renamed &&
	test_cmp_rev main renamed &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

fatal: Invalid branch name: 'broken...ref'
not ok 12 - branch -m can rename from a bad ref name # TODO known breakage

expecting success of 1430.13 'push cannot create a badly named ref': 
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test_must_fail git push "file://$(pwd)" HEAD:refs/heads/broken...ref &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

fatal: invalid refspec 'HEAD:refs/heads/broken...ref'
ok 13 - push cannot create a badly named ref

checking known breakage of 1430.14 'push --mirror can delete badly named ref': 
	top=$(pwd) &&
	git init src &&
	git init dest &&

	(
		cd src &&
		test_commit one
	) &&
	(
		cd dest &&
		test_commit two &&
		git checkout --detach &&
		test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION
	) &&
	git -C src push --mirror "file://$top/dest" &&
	git -C dest branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1430-bad-ref-name/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1430-bad-ref-name/dest/.git/
[main (root-commit) 4331c28] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main (root-commit) 9db02ea] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
HEAD is now at 9db02ea two
fatal: update_ref failed for ref 'refs/heads/broken...ref': cannot update ref 'refs/heads/broken...ref': trying to write ref 'refs/heads/broken...ref' with nonexistent object 139b20d8e6c5b496de61f033f642d0e3dbff528d
not ok 14 - push --mirror can delete badly named ref # TODO known breakage

expecting success of 1430.15 'rev-parse skips symref pointing to broken name': 
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch shadow one &&
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test-tool ref-store main create-symref refs/tags/shadow refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/tags/shadow" &&
	git rev-parse --verify one >expect &&
	git rev-parse --verify shadow >actual 2>err &&
	test_cmp expect actual &&
	test_i18ngrep "ignoring dangling symref refs/tags/shadow" err

warning: ignoring dangling symref refs/tags/shadow
ok 15 - rev-parse skips symref pointing to broken name

expecting success of 1430.16 'for-each-ref emits warnings for broken names': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	printf "ref: refs/heads/broken...ref\n" >.git/refs/heads/badname &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
	git for-each-ref >output 2>error &&
	! grep -e "broken\.\.\.ref" output &&
	! grep -e "badname" output &&
	! grep -e "broken\.\.\.symref" output &&
	test_i18ngrep "ignoring ref with broken name refs/heads/broken\.\.\.ref" error &&
	test_i18ngrep ! "ignoring broken ref refs/heads/badname" error &&
	test_i18ngrep "ignoring ref with broken name refs/heads/broken\.\.\.symref" error

warning: ignoring ref with broken name refs/heads/broken...ref
warning: ignoring ref with broken name refs/heads/broken...symref
ok 16 - for-each-ref emits warnings for broken names

expecting success of 1430.17 'update-ref -d can delete broken name': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git update-ref -d refs/heads/broken...ref >output 2>error &&
	test_must_be_empty output &&
	test_must_be_empty error &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

ok 17 - update-ref -d can delete broken name

expecting success of 1430.18 'branch -d can delete broken name': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	git branch -d broken...ref >output 2>error &&
	test_i18ngrep "Deleted branch broken...ref (was broken)" output &&
	test_must_be_empty error &&
	git branch >output 2>error &&
	! grep -e "broken\.\.\.ref" error &&
	! grep -e "broken\.\.\.ref" output

Deleted branch broken...ref (was broken).
ok 18 - branch -d can delete broken name

expecting success of 1430.19 'update-ref --no-deref -d can delete symref to broken name': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&

	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	git update-ref --no-deref -d refs/heads/badname >output 2>error &&
	test_path_is_missing .git/refs/heads/badname &&
	test_must_be_empty output &&
	test_must_be_empty error

ok 19 - update-ref --no-deref -d can delete symref to broken name

expecting success of 1430.20 'branch -d can delete symref to broken name': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	git branch -d badname >output 2>error &&
	test_path_is_missing .git/refs/heads/badname &&
	test_i18ngrep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output &&
	test_must_be_empty error

Deleted branch badname (was refs/heads/broken...ref).
ok 20 - branch -d can delete symref to broken name

expecting success of 1430.21 'update-ref --no-deref -d can delete dangling symref to broken name': 
	test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	git update-ref --no-deref -d refs/heads/badname >output 2>error &&
	test_path_is_missing .git/refs/heads/badname &&
	test_must_be_empty output &&
	test_must_be_empty error

ok 21 - update-ref --no-deref -d can delete dangling symref to broken name

expecting success of 1430.22 'branch -d can delete dangling symref to broken name': 
	test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	git branch -d badname >output 2>error &&
	test_path_is_missing .git/refs/heads/badname &&
	test_i18ngrep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output &&
	test_must_be_empty error

Deleted branch badname (was refs/heads/broken...ref).
ok 22 - branch -d can delete dangling symref to broken name

expecting success of 1430.23 'update-ref -d can delete broken name through symref': 
	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
	test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref msg &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
	git update-ref -d refs/heads/badname >output 2>error &&
	test_path_is_missing .git/refs/heads/broken...ref &&
	test_must_be_empty output &&
	test_must_be_empty error

ok 23 - update-ref -d can delete broken name through symref

expecting success of 1430.24 'update-ref --no-deref -d can delete symref with broken name': 
	printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
	git update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&
	test_path_is_missing .git/refs/heads/broken...symref &&
	test_must_be_empty output &&
	test_must_be_empty error

ok 24 - update-ref --no-deref -d can delete symref with broken name

expecting success of 1430.25 'branch -d can delete symref with broken name': 
	printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
	git branch -d broken...symref >output 2>error &&
	test_path_is_missing .git/refs/heads/broken...symref &&
	test_i18ngrep "Deleted branch broken...symref (was refs/heads/main)" output &&
	test_must_be_empty error

Deleted branch broken...symref (was refs/heads/main).
ok 25 - branch -d can delete symref with broken name

expecting success of 1430.26 'update-ref --no-deref -d can delete dangling symref with broken name': 
	printf "ref: refs/heads/idonotexist\n" >.git/refs/heads/broken...symref &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
	git update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&
	test_path_is_missing .git/refs/heads/broken...symref &&
	test_must_be_empty output &&
	test_must_be_empty error

ok 26 - update-ref --no-deref -d can delete dangling symref with broken name

expecting success of 1430.27 'branch -d can delete dangling symref with broken name': 
	printf "ref: refs/heads/idonotexist\n" >.git/refs/heads/broken...symref &&
	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
	git branch -d broken...symref >output 2>error &&
	test_path_is_missing .git/refs/heads/broken...symref &&
	test_i18ngrep "Deleted branch broken...symref (was refs/heads/idonotexist)" output &&
	test_must_be_empty error

Deleted branch broken...symref (was refs/heads/idonotexist).
ok 27 - branch -d can delete dangling symref with broken name

expecting success of 1430.28 'update-ref -d cannot delete non-ref in .git dir': 
	echo precious >.git/my-private-file &&
	echo precious >expect &&
	test_must_fail git update-ref -d my-private-file >output 2>error &&
	test_must_be_empty output &&
	test_i18ngrep -e "refusing to update ref with bad name" error &&
	test_cmp expect .git/my-private-file

error: refusing to update ref with bad name 'my-private-file'
ok 28 - update-ref -d cannot delete non-ref in .git dir

expecting success of 1430.29 'update-ref -d cannot delete absolute path': 
	git branch -f extra &&
	test_must_fail git update-ref -d "$(pwd)/.git/refs/heads/extra" &&
	test_cmp_rev HEAD extra

error: refusing to update ref with bad name '/<<PKGBUILDDIR>>/t/trash directory.t1430-bad-ref-name/.git/refs/heads/extra'
ok 29 - update-ref -d cannot delete absolute path

expecting success of 1430.30 'update-ref --stdin fails create with bad ref name': 
	echo "create ~a refs/heads/main" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a" err

fatal: invalid ref format: ~a
ok 30 - update-ref --stdin fails create with bad ref name

expecting success of 1430.31 'update-ref --stdin fails update with bad ref name': 
	echo "update ~a refs/heads/main" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a" err

fatal: invalid ref format: ~a
ok 31 - update-ref --stdin fails update with bad ref name

expecting success of 1430.32 'update-ref --stdin fails delete with bad ref name': 
	echo "delete ~a refs/heads/main" >stdin &&
	test_must_fail git update-ref --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a" err

fatal: invalid ref format: ~a
ok 32 - update-ref --stdin fails delete with bad ref name

expecting success of 1430.33 'update-ref --stdin -z fails create with bad ref name': 
	printf "%s\0" "create ~a " refs/heads/main >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a " err

fatal: invalid ref format: ~a 
ok 33 - update-ref --stdin -z fails create with bad ref name

expecting success of 1430.34 'update-ref --stdin -z fails update with bad ref name': 
	printf "%s\0" "update ~a" refs/heads/main "" >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a" err

fatal: invalid ref format: ~a
ok 34 - update-ref --stdin -z fails update with bad ref name

expecting success of 1430.35 'update-ref --stdin -z fails delete with bad ref name': 
	printf "%s\0" "delete ~a" refs/heads/main >stdin &&
	test_must_fail git update-ref -z --stdin <stdin 2>err &&
	grep "fatal: invalid ref format: ~a" err

fatal: invalid ref format: ~a
ok 35 - update-ref --stdin -z fails delete with bad ref name

expecting success of 1430.36 'branch rejects HEAD as a branch name': 
	test_must_fail git branch HEAD HEAD^ &&
	test_must_fail git show-ref refs/heads/HEAD

fatal: 'HEAD' is not a valid branch name
ok 36 - branch rejects HEAD as a branch name

expecting success of 1430.37 'checkout -b rejects HEAD as a branch name': 
	test_must_fail git checkout -B HEAD HEAD^ &&
	test_must_fail git show-ref refs/heads/HEAD

fatal: 'HEAD' is not a valid branch name
ok 37 - checkout -b rejects HEAD as a branch name

expecting success of 1430.38 'update-ref can operate on refs/heads/HEAD': 
	git update-ref refs/heads/HEAD HEAD^ &&
	git show-ref refs/heads/HEAD &&
	git update-ref -d refs/heads/HEAD &&
	test_must_fail git show-ref refs/heads/HEAD

d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 refs/heads/HEAD
ok 38 - update-ref can operate on refs/heads/HEAD

expecting success of 1430.39 'branch -d can remove refs/heads/HEAD': 
	git update-ref refs/heads/HEAD HEAD^ &&
	git branch -d HEAD &&
	test_must_fail git show-ref refs/heads/HEAD

Deleted branch HEAD (was d79ce16).
ok 39 - branch -d can remove refs/heads/HEAD

expecting success of 1430.40 'branch -m can rename refs/heads/HEAD': 
	git update-ref refs/heads/HEAD HEAD^ &&
	git branch -m HEAD tail &&
	test_must_fail git show-ref refs/heads/HEAD &&
	git show-ref refs/heads/tail

warning: Renamed a misnamed branch 'HEAD' away
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 refs/heads/tail
ok 40 - branch -m can rename refs/heads/HEAD

expecting success of 1430.41 'branch -d can remove refs/heads/-dash': 
	git update-ref refs/heads/-dash HEAD^ &&
	git branch -d -- -dash &&
	test_must_fail git show-ref refs/heads/-dash

Deleted branch -dash (was d79ce16).
ok 41 - branch -d can remove refs/heads/-dash

expecting success of 1430.42 'branch -m can rename refs/heads/-dash': 
	git update-ref refs/heads/-dash HEAD^ &&
	git branch -m -- -dash dash &&
	test_must_fail git show-ref refs/heads/-dash &&
	git show-ref refs/heads/dash

warning: Renamed a misnamed branch '-dash' away
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 refs/heads/dash
ok 42 - branch -m can rename refs/heads/-dash

# still have 2 known breakage(s)
# passed all remaining 40 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1501-work-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1501-work-tree/.git/
expecting success of 1501.1 'setup': 
	EMPTY_TREE=$(git write-tree) &&
	EMPTY_BLOB=$(git hash-object -t blob --stdin </dev/null) &&
	CHANGED_BLOB=$(echo changed | git hash-object -t blob --stdin) &&
	EMPTY_BLOB7=$(echo $EMPTY_BLOB | sed "s/\(.......\).*/\1/") &&
	CHANGED_BLOB7=$(echo $CHANGED_BLOB | sed "s/\(.......\).*/\1/") &&

	mkdir -p work/sub/dir &&
	mkdir -p work2 &&
	mv .git repo.git

ok 1 - setup

expecting success of 1501.2 'setup: helper for testing rev-parse': 
	test_rev_parse() {
		echo $1 >expected.bare &&
		echo $2 >expected.inside-git &&
		echo $3 >expected.inside-worktree &&
		if test $# -ge 4
		then
			echo $4 >expected.prefix
		fi &&

		git rev-parse --is-bare-repository >actual.bare &&
		git rev-parse --is-inside-git-dir >actual.inside-git &&
		git rev-parse --is-inside-work-tree >actual.inside-worktree &&
		if test $# -ge 4
		then
			git rev-parse --show-prefix >actual.prefix
		fi &&

		test_cmp expected.bare actual.bare &&
		test_cmp expected.inside-git actual.inside-git &&
		test_cmp expected.inside-worktree actual.inside-worktree &&
		if test $# -ge 4
		then
			# rev-parse --show-prefix should output
			# a single newline when at the top of the work tree,
			# but we test for that separately.
			test -z "$4" && test_must_be_empty actual.prefix ||
			test_cmp expected.prefix actual.prefix
		fi
	}

ok 2 - setup: helper for testing rev-parse

expecting success of 1501.3 'setup: core.worktree = relative path': 
	sane_unset GIT_WORK_TREE &&
	GIT_DIR=repo.git &&
	GIT_CONFIG="$(pwd)"/$GIT_DIR/config &&
	export GIT_DIR GIT_CONFIG &&
	git config core.worktree ../work

ok 3 - setup: core.worktree = relative path

expecting success of 1501.4 'outside': 
	test_rev_parse false false false

ok 4 - outside

expecting success of 1501.5 'inside work tree': 
	(
		cd work &&
		GIT_DIR=../repo.git &&
		GIT_CONFIG="$(pwd)"/$GIT_DIR/config &&
		test_rev_parse false false true ""
	)

'actual.prefix' is not empty, it contains:

ok 5 - inside work tree

expecting success of 1501.6 'empty prefix is actually written out': 
	echo >expected &&
	(
		cd work &&
		GIT_DIR=../repo.git &&
		GIT_CONFIG="$(pwd)"/$GIT_DIR/config &&
		git rev-parse --show-prefix >../actual
	) &&
	test_cmp expected actual

ok 6 - empty prefix is actually written out

expecting success of 1501.7 'subdir of work tree': 
	(
		cd work/sub/dir &&
		GIT_DIR=../../../repo.git &&
		GIT_CONFIG="$(pwd)"/$GIT_DIR/config &&
		test_rev_parse false false true sub/dir/
	)

ok 7 - subdir of work tree

expecting success of 1501.8 'setup: core.worktree = absolute path': 
	sane_unset GIT_WORK_TREE &&
	GIT_DIR=$(pwd)/repo.git &&
	GIT_CONFIG=$GIT_DIR/config &&
	export GIT_DIR GIT_CONFIG &&
	git config core.worktree "$(pwd)/work"

ok 8 - setup: core.worktree = absolute path

expecting success of 1501.9 'outside': 
	test_rev_parse false false false &&
	(
		cd work2 &&
		test_rev_parse false false false
	)

ok 9 - outside

expecting success of 1501.10 'inside work tree': 
	(
		cd work &&
		test_rev_parse false false true ""
	)

'actual.prefix' is not empty, it contains:

ok 10 - inside work tree

expecting success of 1501.11 'subdir of work tree': 
	(
		cd work/sub/dir &&
		test_rev_parse false false true sub/dir/
	)

ok 11 - subdir of work tree

expecting success of 1501.12 'setup: GIT_WORK_TREE=relative (override core.worktree)': 
	GIT_DIR=$(pwd)/repo.git &&
	GIT_CONFIG=$GIT_DIR/config &&
	git config core.worktree non-existent &&
	GIT_WORK_TREE=work &&
	export GIT_DIR GIT_CONFIG GIT_WORK_TREE

ok 12 - setup: GIT_WORK_TREE=relative (override core.worktree)

expecting success of 1501.13 'outside': 
	test_rev_parse false false false &&
	(
		cd work2 &&
		test_rev_parse false false false
	)

ok 13 - outside

expecting success of 1501.14 'inside work tree': 
	(
		cd work &&
		GIT_WORK_TREE=. &&
		test_rev_parse false false true ""
	)

'actual.prefix' is not empty, it contains:

ok 14 - inside work tree

expecting success of 1501.15 'subdir of work tree': 
	(
		cd work/sub/dir &&
		GIT_WORK_TREE=../.. &&
		test_rev_parse false false true sub/dir/
	)

ok 15 - subdir of work tree

expecting success of 1501.16 'setup: GIT_WORK_TREE=absolute, below git dir': 
	mv work repo.git/work &&
	mv work2 repo.git/work2 &&
	GIT_DIR=$(pwd)/repo.git &&
	GIT_CONFIG=$GIT_DIR/config &&
	GIT_WORK_TREE=$(pwd)/repo.git/work &&
	export GIT_DIR GIT_CONFIG GIT_WORK_TREE

ok 16 - setup: GIT_WORK_TREE=absolute, below git dir

expecting success of 1501.17 'outside': 
	echo outside &&
	test_rev_parse false false false

outside
ok 17 - outside

expecting success of 1501.18 'in repo.git': 
	(
		cd repo.git &&
		test_rev_parse false true false
	) &&
	(
		cd repo.git/objects &&
		test_rev_parse false true false
	) &&
	(
		cd repo.git/work2 &&
		test_rev_parse false true false
	)

ok 18 - in repo.git

expecting success of 1501.19 'inside work tree': 
	(
		cd repo.git/work &&
		test_rev_parse false true true ""
	)

'actual.prefix' is not empty, it contains:

ok 19 - inside work tree

expecting success of 1501.20 'subdir of work tree': 
	(
		cd repo.git/work/sub/dir &&
		test_rev_parse false true true sub/dir/
	)

ok 20 - subdir of work tree

expecting success of 1501.21 'find work tree from repo': 
	echo sub/dir/untracked >expected &&
	cat <<-\EOF >repo.git/work/.gitignore &&
	expected.*
	actual.*
	.gitignore
	EOF
	>repo.git/work/sub/dir/untracked &&
	(
		cd repo.git &&
		git ls-files --others --exclude-standard >../actual
	) &&
	test_cmp expected actual

ok 21 - find work tree from repo

expecting success of 1501.22 'find work tree from work tree': 
	echo sub/dir/tracked >expected &&
	>repo.git/work/sub/dir/tracked &&
	(
		cd repo.git/work/sub/dir &&
		git --git-dir=../../.. add tracked
	) &&
	(
		cd repo.git &&
		git ls-files >../actual
	) &&
	test_cmp expected actual

ok 22 - find work tree from work tree

expecting success of 1501.23 '_gently() groks relative GIT_DIR & GIT_WORK_TREE': 
	(
		cd repo.git/work/sub/dir &&
		GIT_DIR=../../.. &&
		GIT_WORK_TREE=../.. &&
		GIT_PAGER= &&
		export GIT_DIR GIT_WORK_TREE GIT_PAGER &&

		git diff --exit-code tracked &&
		echo changed >tracked &&
		test_must_fail git diff --exit-code tracked
	)

diff --git a/sub/dir/tracked b/sub/dir/tracked
index e69de29..5ea2ed4 100644
--- a/sub/dir/tracked
+++ b/sub/dir/tracked
@@ -0,0 +1 @@
+changed
ok 23 - _gently() groks relative GIT_DIR & GIT_WORK_TREE

expecting success of 1501.24 'diff-index respects work tree under .git dir': 
	cat >diff-index-cached.expected <<-EOF &&
	:000000 100644 $ZERO_OID $EMPTY_BLOB A	sub/dir/tracked
	EOF
	cat >diff-index.expected <<-EOF &&
	:000000 100644 $ZERO_OID $ZERO_OID A	sub/dir/tracked
	EOF

	(
		GIT_DIR=repo.git &&
		GIT_WORK_TREE=repo.git/work &&
		export GIT_DIR GIT_WORK_TREE &&
		git diff-index $EMPTY_TREE >diff-index.actual &&
		git diff-index --cached $EMPTY_TREE >diff-index-cached.actual
	) &&
	test_cmp diff-index.expected diff-index.actual &&
	test_cmp diff-index-cached.expected diff-index-cached.actual

ok 24 - diff-index respects work tree under .git dir

expecting success of 1501.25 'diff-files respects work tree under .git dir': 
	cat >diff-files.expected <<-EOF &&
	:100644 100644 $EMPTY_BLOB $ZERO_OID M	sub/dir/tracked
	EOF

	(
		GIT_DIR=repo.git &&
		GIT_WORK_TREE=repo.git/work &&
		export GIT_DIR GIT_WORK_TREE &&
		git diff-files >diff-files.actual
	) &&
	test_cmp diff-files.expected diff-files.actual

ok 25 - diff-files respects work tree under .git dir

expecting success of 1501.26 'git diff respects work tree under .git dir': 
	cat >diff-TREE.expected <<-EOF &&
	diff --git a/sub/dir/tracked b/sub/dir/tracked
	new file mode 100644
	index 0000000..$CHANGED_BLOB7
	--- /dev/null
	+++ b/sub/dir/tracked
	@@ -0,0 +1 @@
	+changed
	EOF
	cat >diff-TREE-cached.expected <<-EOF &&
	diff --git a/sub/dir/tracked b/sub/dir/tracked
	new file mode 100644
	index 0000000..$EMPTY_BLOB7
	EOF
	cat >diff-FILES.expected <<-EOF &&
	diff --git a/sub/dir/tracked b/sub/dir/tracked
	index $EMPTY_BLOB7..$CHANGED_BLOB7 100644
	--- a/sub/dir/tracked
	+++ b/sub/dir/tracked
	@@ -0,0 +1 @@
	+changed
	EOF

	(
		GIT_DIR=repo.git &&
		GIT_WORK_TREE=repo.git/work &&
		export GIT_DIR GIT_WORK_TREE &&
		git diff $EMPTY_TREE >diff-TREE.actual &&
		git diff --cached $EMPTY_TREE >diff-TREE-cached.actual &&
		git diff >diff-FILES.actual
	) &&
	test_cmp diff-TREE.expected diff-TREE.actual &&
	test_cmp diff-TREE-cached.expected diff-TREE-cached.actual &&
	test_cmp diff-FILES.expected diff-FILES.actual

ok 26 - git diff respects work tree under .git dir

expecting success of 1501.27 'git grep': 
	echo dir/tracked >expected.grep &&
	(
		cd repo.git/work/sub &&
		GIT_DIR=../.. &&
		GIT_WORK_TREE=.. &&
		export GIT_DIR GIT_WORK_TREE &&
		git grep -l changed >../../../actual.grep
	) &&
	test_cmp expected.grep actual.grep

ok 27 - git grep

expecting success of 1501.28 'git commit': 
	(
		cd repo.git &&
		GIT_DIR=. GIT_WORK_TREE=work git commit -a -m done
	)

[master (root-commit) 271ed29] done
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/dir/tracked
ok 28 - git commit

expecting success of 1501.29 'absolute pathspec should fail gracefully': 
	(
		cd repo.git &&
		test_might_fail git config --unset core.worktree &&
		test_must_fail git log HEAD -- /home
	)

fatal: /home: '/home' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t1501-work-tree/repo.git/work'
ok 29 - absolute pathspec should fail gracefully

expecting success of 1501.30 'make_relative_path handles double slashes in GIT_DIR': 
	>dummy_file &&
	echo git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file &&
	git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file

git --git-dir=/<<PKGBUILDDIR>>/t/trash directory.t1501-work-tree//repo.git --work-tree=/<<PKGBUILDDIR>>/t/trash directory.t1501-work-tree add dummy_file
ok 30 - make_relative_path handles double slashes in GIT_DIR

expecting success of 1501.31 'relative $GIT_WORK_TREE and git subprocesses': 
	GIT_DIR=repo.git GIT_WORK_TREE=repo.git/work \
	test-tool subprocess --setup-work-tree rev-parse --show-toplevel >actual &&
	echo "$(pwd)/repo.git/work" >expected &&
	test_cmp expected actual

ok 31 - relative $GIT_WORK_TREE and git subprocesses

expecting success of 1501.32 'Multi-worktree setup': 
	mkdir work &&
	mkdir -p repo.git/repos/foo &&
	cp repo.git/HEAD repo.git/index repo.git/repos/foo &&
	{ cp repo.git/sharedindex.* repo.git/repos/foo || :; } &&
	sane_unset GIT_DIR GIT_CONFIG GIT_WORK_TREE

cp: cannot stat 'repo.git/sharedindex.*': No such file or directory
ok 32 - Multi-worktree setup

expecting success of 1501.33 'GIT_DIR set (1)': 
	echo "gitdir: repo.git/repos/foo" >gitfile &&
	echo ../.. >repo.git/repos/foo/commondir &&
	(
		cd work &&
		GIT_DIR=../gitfile git rev-parse --git-common-dir >actual &&
		test-tool path-utils real_path "$TRASH_DIRECTORY/repo.git" >expect &&
		test_cmp expect actual
	)

ok 33 - GIT_DIR set (1)

expecting success of 1501.34 'GIT_DIR set (2)': 
	echo "gitdir: repo.git/repos/foo" >gitfile &&
	echo "$(pwd)/repo.git" >repo.git/repos/foo/commondir &&
	(
		cd work &&
		GIT_DIR=../gitfile git rev-parse --git-common-dir >actual &&
		test-tool path-utils real_path "$TRASH_DIRECTORY/repo.git" >expect &&
		test_cmp expect actual
	)

ok 34 - GIT_DIR set (2)

expecting success of 1501.35 'Auto discovery': 
	echo "gitdir: repo.git/repos/foo" >.git &&
	echo ../.. >repo.git/repos/foo/commondir &&
	(
		cd work &&
		git rev-parse --git-common-dir >actual &&
		test-tool path-utils real_path "$TRASH_DIRECTORY/repo.git" >expect &&
		test_cmp expect actual &&
		echo haha >data1 &&
		git add data1 &&
		git ls-files --full-name :/ | grep data1 >actual &&
		echo work/data1 >expect &&
		test_cmp expect actual
	)

ok 35 - Auto discovery

expecting success of 1501.36 '$GIT_DIR/common overrides core.worktree': 
	mkdir elsewhere &&
	git --git-dir=repo.git config core.worktree "$TRASH_DIRECTORY/elsewhere" &&
	echo "gitdir: repo.git/repos/foo" >.git &&
	echo ../.. >repo.git/repos/foo/commondir &&
	(
		cd work &&
		git rev-parse --git-common-dir >actual &&
		test-tool path-utils real_path "$TRASH_DIRECTORY/repo.git" >expect &&
		test_cmp expect actual &&
		echo haha >data2 &&
		git add data2 &&
		git ls-files --full-name :/ | grep data2 >actual &&
		echo work/data2 >expect &&
		test_cmp expect actual
	)

ok 36 - $GIT_DIR/common overrides core.worktree

expecting success of 1501.37 '$GIT_WORK_TREE overrides $GIT_DIR/common': 
	echo "gitdir: repo.git/repos/foo" >.git &&
	echo ../.. >repo.git/repos/foo/commondir &&
	(
		cd work &&
		echo haha >data3 &&
		git --git-dir=../.git --work-tree=. add data3 &&
		git ls-files --full-name -- :/ | grep data3 >actual &&
		echo data3 >expect &&
		test_cmp expect actual
	)

ok 37 - $GIT_WORK_TREE overrides $GIT_DIR/common

expecting success of 1501.38 'error out gracefully on invalid $GIT_WORK_TREE': 
	(
		GIT_WORK_TREE=/.invalid/work/tree &&
		export GIT_WORK_TREE &&
		test_expect_code 128 git rev-parse
	)

fatal: Invalid path '/.invalid': No such file or directory
ok 38 - error out gracefully on invalid $GIT_WORK_TREE

expecting success of 1501.39 'refs work with relative gitdir and work tree': 
	git init relative &&
	git -C relative commit --allow-empty -m one &&
	git -C relative commit --allow-empty -m two &&

	GIT_DIR=relative/.git GIT_WORK_TREE=relative git reset HEAD^ &&

	git -C relative log -1 --format=%s >actual &&
	echo one >expect &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1501-work-tree/relative/.git/
[master (root-commit) 61ba98b] one
 Author: A U Thor <author@example.com>
[master 2b4e70d] two
 Author: A U Thor <author@example.com>
ok 39 - refs work with relative gitdir and work tree

# passed all 39 test(s)
1..39
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1500-rev-parse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1500-rev-parse/.git/
expecting success of 1500.1 'setup': 
	mkdir -p sub/dir work &&
	cp -R .git repo.git &&
	git checkout -B main &&
	test_commit abc &&
	git checkout -b side &&
	test_commit def &&
	git checkout main &&
	git worktree add worktree side

Switched to a new branch 'main'
[main (root-commit) 4decab4] abc
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abc.t
Switched to a new branch 'side'
[side 0620bdf] def
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 def.t
Switched to branch 'main'
Preparing worktree (checking out 'side')
HEAD is now at 0620bdf def
ok 1 - setup

expecting success of 1500.2 'toplevel: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 2 - toplevel: --is-bare-repository

expecting success of 1500.3 'toplevel: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 3 - toplevel: --is-inside-git-dir

expecting success of 1500.4 'toplevel: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 4 - toplevel: --is-inside-work-tree

expecting success of 1500.5 'toplevel: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 5 - toplevel: --show-prefix

expecting success of 1500.6 'toplevel: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 6 - toplevel: --git-dir

expecting success of 1500.7 'toplevel: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 7 - toplevel: --absolute-git-dir

expecting success of 1500.8 '.git/: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 8 - .git/: --is-bare-repository

expecting success of 1500.9 '.git/: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 9 - .git/: --is-inside-git-dir

expecting success of 1500.10 '.git/: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 10 - .git/: --is-inside-work-tree

expecting success of 1500.11 '.git/: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 11 - .git/: --show-prefix

expecting success of 1500.12 '.git/: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 12 - .git/: --git-dir

expecting success of 1500.13 '.git/: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 13 - .git/: --absolute-git-dir

expecting success of 1500.14 '.git/objects/: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 14 - .git/objects/: --is-bare-repository

expecting success of 1500.15 '.git/objects/: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 15 - .git/objects/: --is-inside-git-dir

expecting success of 1500.16 '.git/objects/: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 16 - .git/objects/: --is-inside-work-tree

expecting success of 1500.17 '.git/objects/: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 17 - .git/objects/: --show-prefix

expecting success of 1500.18 '.git/objects/: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 18 - .git/objects/: --git-dir

expecting success of 1500.19 '.git/objects/: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 19 - .git/objects/: --absolute-git-dir

expecting success of 1500.20 'subdirectory: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 20 - subdirectory: --is-bare-repository

expecting success of 1500.21 'subdirectory: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 21 - subdirectory: --is-inside-git-dir

expecting success of 1500.22 'subdirectory: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 22 - subdirectory: --is-inside-work-tree

expecting success of 1500.23 'subdirectory: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 23 - subdirectory: --show-prefix

expecting success of 1500.24 'subdirectory: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 24 - subdirectory: --git-dir

expecting success of 1500.25 'subdirectory: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 25 - subdirectory: --absolute-git-dir

expecting success of 1500.26 'core.bare = true: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 26 - core.bare = true: --is-bare-repository

expecting success of 1500.27 'core.bare = true: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 27 - core.bare = true: --is-inside-git-dir

expecting success of 1500.28 'core.bare = true: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 28 - core.bare = true: --is-inside-work-tree

expecting success of 1500.29 'core.bare undefined: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 29 - core.bare undefined: --is-bare-repository

expecting success of 1500.30 'core.bare undefined: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 30 - core.bare undefined: --is-inside-git-dir

expecting success of 1500.31 'core.bare undefined: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 31 - core.bare undefined: --is-inside-work-tree

expecting success of 1500.32 'GIT_DIR=../.git, core.bare = false: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 32 - GIT_DIR=../.git, core.bare = false: --is-bare-repository

expecting success of 1500.33 'GIT_DIR=../.git, core.bare = false: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 33 - GIT_DIR=../.git, core.bare = false: --is-inside-git-dir

expecting success of 1500.34 'GIT_DIR=../.git, core.bare = false: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 34 - GIT_DIR=../.git, core.bare = false: --is-inside-work-tree

expecting success of 1500.35 'GIT_DIR=../.git, core.bare = false: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 35 - GIT_DIR=../.git, core.bare = false: --show-prefix

expecting success of 1500.36 'GIT_DIR=../.git, core.bare = false: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 36 - GIT_DIR=../.git, core.bare = false: --git-dir

expecting success of 1500.37 'GIT_DIR=../.git, core.bare = false: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 37 - GIT_DIR=../.git, core.bare = false: --absolute-git-dir

expecting success of 1500.38 'GIT_DIR=../.git, core.bare = true: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 38 - GIT_DIR=../.git, core.bare = true: --is-bare-repository

expecting success of 1500.39 'GIT_DIR=../.git, core.bare = true: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 39 - GIT_DIR=../.git, core.bare = true: --is-inside-git-dir

expecting success of 1500.40 'GIT_DIR=../.git, core.bare = true: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 40 - GIT_DIR=../.git, core.bare = true: --is-inside-work-tree

expecting success of 1500.41 'GIT_DIR=../.git, core.bare = true: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 41 - GIT_DIR=../.git, core.bare = true: --show-prefix

expecting success of 1500.42 'GIT_DIR=../.git, core.bare undefined: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 42 - GIT_DIR=../.git, core.bare undefined: --is-bare-repository

expecting success of 1500.43 'GIT_DIR=../.git, core.bare undefined: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 43 - GIT_DIR=../.git, core.bare undefined: --is-inside-git-dir

expecting success of 1500.44 'GIT_DIR=../.git, core.bare undefined: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 44 - GIT_DIR=../.git, core.bare undefined: --is-inside-work-tree

expecting success of 1500.45 'GIT_DIR=../.git, core.bare undefined: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 45 - GIT_DIR=../.git, core.bare undefined: --show-prefix

expecting success of 1500.46 'GIT_DIR=../repo.git, core.bare = false: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 46 - GIT_DIR=../repo.git, core.bare = false: --is-bare-repository

expecting success of 1500.47 'GIT_DIR=../repo.git, core.bare = false: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 47 - GIT_DIR=../repo.git, core.bare = false: --is-inside-git-dir

expecting success of 1500.48 'GIT_DIR=../repo.git, core.bare = false: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 48 - GIT_DIR=../repo.git, core.bare = false: --is-inside-work-tree

expecting success of 1500.49 'GIT_DIR=../repo.git, core.bare = false: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 49 - GIT_DIR=../repo.git, core.bare = false: --show-prefix

expecting success of 1500.50 'GIT_DIR=../repo.git, core.bare = false: --git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 50 - GIT_DIR=../repo.git, core.bare = false: --git-dir

expecting success of 1500.51 'GIT_DIR=../repo.git, core.bare = false: --absolute-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 51 - GIT_DIR=../repo.git, core.bare = false: --absolute-git-dir

expecting success of 1500.52 'GIT_DIR=../repo.git, core.bare = true: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 52 - GIT_DIR=../repo.git, core.bare = true: --is-bare-repository

expecting success of 1500.53 'GIT_DIR=../repo.git, core.bare = true: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 53 - GIT_DIR=../repo.git, core.bare = true: --is-inside-git-dir

expecting success of 1500.54 'GIT_DIR=../repo.git, core.bare = true: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 54 - GIT_DIR=../repo.git, core.bare = true: --is-inside-work-tree

expecting success of 1500.55 'GIT_DIR=../repo.git, core.bare = true: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 55 - GIT_DIR=../repo.git, core.bare = true: --show-prefix

expecting success of 1500.56 'GIT_DIR=../repo.git, core.bare undefined: --is-bare-repository': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 56 - GIT_DIR=../repo.git, core.bare undefined: --is-bare-repository

expecting success of 1500.57 'GIT_DIR=../repo.git, core.bare undefined: --is-inside-git-dir': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 57 - GIT_DIR=../repo.git, core.bare undefined: --is-inside-git-dir

expecting success of 1500.58 'GIT_DIR=../repo.git, core.bare undefined: --is-inside-work-tree': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 58 - GIT_DIR=../repo.git, core.bare undefined: --is-inside-work-tree

expecting success of 1500.59 'GIT_DIR=../repo.git, core.bare undefined: --show-prefix': 
			if test -n "$gitdir"
			then
				test_when_finished "unset GIT_DIR" &&
				GIT_DIR="$gitdir" &&
				export GIT_DIR
			fi &&

			case "$bare" in
			t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
			f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
			u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
			esac &&

			echo "$expect" >expect &&
			git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
			test_cmp expect actual
		
ok 59 - GIT_DIR=../repo.git, core.bare undefined: --show-prefix

expecting success of 1500.60 'rev-parse --path-format=absolute': 
	test_one "." "$ROOT/.git" --path-format=absolute --git-dir &&
	test_one "." "$ROOT/.git" --path-format=absolute --git-common-dir &&
	test_one "sub/dir" "$ROOT/.git" --path-format=absolute --git-dir &&
	test_one "sub/dir" "$ROOT/.git" --path-format=absolute --git-common-dir &&
	test_one "worktree" "$ROOT/.git/worktrees/worktree" --path-format=absolute --git-dir &&
	test_one "worktree" "$ROOT/.git" --path-format=absolute --git-common-dir &&
	test_one "." "$ROOT" --path-format=absolute --show-toplevel &&
	test_one "." "$ROOT/.git/objects" --path-format=absolute --git-path objects &&
	test_one "." "$ROOT/.git/objects/foo/bar/baz" --path-format=absolute --git-path objects/foo/bar/baz

ok 60 - rev-parse --path-format=absolute

expecting success of 1500.61 'rev-parse --path-format=relative': 
	test_one "." ".git" --path-format=relative --git-dir &&
	test_one "." ".git" --path-format=relative --git-common-dir &&
	test_one "sub/dir" "../../.git" --path-format=relative --git-dir &&
	test_one "sub/dir" "../../.git" --path-format=relative --git-common-dir &&
	test_one "worktree" "../.git/worktrees/worktree" --path-format=relative --git-dir &&
	test_one "worktree" "../.git" --path-format=relative --git-common-dir &&
	test_one "." "./" --path-format=relative --show-toplevel &&
	test_one "." ".git/objects" --path-format=relative --git-path objects &&
	test_one "." ".git/objects/foo/bar/baz" --path-format=relative --git-path objects/foo/bar/baz

ok 61 - rev-parse --path-format=relative

expecting success of 1500.62 '--path-format=relative does not affect --absolute-git-dir': 
	git rev-parse --path-format=relative --absolute-git-dir >actual &&
	echo "$ROOT/.git" >expect &&
	test_cmp expect actual

ok 62 - --path-format=relative does not affect --absolute-git-dir

expecting success of 1500.63 '--path-format can change in the middle of the command line': 
	git rev-parse --path-format=absolute --git-dir --path-format=relative --git-path objects/foo/bar >actual &&
	cat >expect <<-EOF &&
	$ROOT/.git
	.git/objects/foo/bar
	EOF
	test_cmp expect actual

ok 63 - --path-format can change in the middle of the command line

expecting success of 1500.64 '--path-format does not segfault without an argument': 
	test_must_fail git rev-parse --path-format

fatal: --path-format requires an argument
ok 64 - --path-format does not segfault without an argument

expecting success of 1500.65 'git-common-dir from worktree root': 
	echo .git >expect &&
	git rev-parse --git-common-dir >actual &&
	test_cmp expect actual

ok 65 - git-common-dir from worktree root

expecting success of 1500.66 'git-common-dir inside sub-dir': 
	mkdir -p path/to/child &&
	test_when_finished "rm -rf path" &&
	echo "$(git -C path/to/child rev-parse --show-cdup).git" >expect &&
	git -C path/to/child rev-parse --git-common-dir >actual &&
	test_cmp expect actual

ok 66 - git-common-dir inside sub-dir

expecting success of 1500.67 'git-path from worktree root': 
	echo .git/objects >expect &&
	git rev-parse --git-path objects >actual &&
	test_cmp expect actual

ok 67 - git-path from worktree root

expecting success of 1500.68 'git-path inside sub-dir': 
	mkdir -p path/to/child &&
	test_when_finished "rm -rf path" &&
	echo "$(git -C path/to/child rev-parse --show-cdup).git/objects" >expect &&
	git -C path/to/child rev-parse --git-path objects >actual &&
	test_cmp expect actual

ok 68 - git-path inside sub-dir

expecting success of 1500.69 'rev-parse --is-shallow-repository in shallow repo': 
	test_commit test_commit &&
	echo true >expect &&
	git clone --depth 1 --no-local . shallow &&
	test_when_finished "rm -rf shallow" &&
	git -C shallow rev-parse --is-shallow-repository >actual &&
	test_cmp expect actual

[main b250333] test_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test_commit.t
Cloning into 'shallow'...
ok 69 - rev-parse --is-shallow-repository in shallow repo

expecting success of 1500.70 'rev-parse --is-shallow-repository in non-shallow repo': 
	echo false >expect &&
	git rev-parse --is-shallow-repository >actual &&
	test_cmp expect actual

ok 70 - rev-parse --is-shallow-repository in non-shallow repo

expecting success of 1500.71 'rev-parse --show-object-format in repo': 
	echo "$(test_oid algo)" >expect &&
	git rev-parse --show-object-format >actual &&
	test_cmp expect actual &&
	git rev-parse --show-object-format=storage >actual &&
	test_cmp expect actual &&
	git rev-parse --show-object-format=input >actual &&
	test_cmp expect actual &&
	git rev-parse --show-object-format=output >actual &&
	test_cmp expect actual &&
	test_must_fail git rev-parse --show-object-format=squeamish-ossifrage 2>err &&
	grep "unknown mode for --show-object-format: squeamish-ossifrage" err

fatal: unknown mode for --show-object-format: squeamish-ossifrage
ok 71 - rev-parse --show-object-format in repo

expecting success of 1500.72 '--show-toplevel from subdir of working tree': 
	pwd >expect &&
	git -C sub/dir rev-parse --show-toplevel >actual &&
	test_cmp expect actual

ok 72 - --show-toplevel from subdir of working tree

expecting success of 1500.73 '--show-toplevel from inside .git': 
	test_must_fail git -C .git rev-parse --show-toplevel

fatal: this operation must be run in a work tree
ok 73 - --show-toplevel from inside .git

expecting success of 1500.74 'showing the superproject correctly': 
	git rev-parse --show-superproject-working-tree >out &&
	test_must_be_empty out &&

	test_create_repo super &&
	test_commit -C super test_commit &&
	test_create_repo sub &&
	test_commit -C sub test_commit &&
	git -c protocol.file.allow=always \
		-C super submodule add ../sub dir/sub &&
	echo $(pwd)/super >expect  &&
	git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
	test_cmp expect out &&

	test_commit -C super submodule_add &&
	git -C super checkout -b branch1 &&
	git -C super/dir/sub checkout -b branch1 &&
	test_commit -C super/dir/sub branch1_commit &&
	git -C super add dir/sub &&
	test_commit -C super branch1_commit &&
	git -C super checkout -b branch2 main &&
	git -C super/dir/sub checkout -b branch2 main &&
	test_commit -C super/dir/sub branch2_commit &&
	git -C super add dir/sub &&
	test_commit -C super branch2_commit &&
	test_must_fail git -C super merge branch1 &&

	git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
	test_cmp expect out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1500-rev-parse/super/.git/
[main (root-commit) 6703cdc] test_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test_commit.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1500-rev-parse/sub/.git/
[main (root-commit) 5c184ab] test_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test_commit.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t1500-rev-parse/super/dir/sub'...
done.
[main b28d39e] submodule_add
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 dir/sub
 create mode 100644 submodule_add.t
Switched to a new branch 'branch1'
Switched to a new branch 'branch1'
[branch1 7018b5f] branch1_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch1_commit.t
[branch1 e08f379] branch1_commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 branch1_commit.t
Switched to a new branch 'branch2'
M	dir/sub
Switched to a new branch 'branch2'
[branch2 6aad707] branch2_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch2_commit.t
[branch2 32c6339] branch2_commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 branch2_commit.t
Failed to merge submodule dir/sub
CONFLICT (submodule): Merge conflict in dir/sub
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (dir/sub), and either merge commit 7018b5f
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add dir/sub

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
ok 74 - showing the superproject correctly

expecting success of 1500.75 'rev-parse --since= unsqueezed ordering': 
	x1=--since=1970-01-01T00:00:01Z &&
	x2=--since=1970-01-01T00:00:02Z &&
	x3=--since=1970-01-01T00:00:03Z &&
	git rev-parse $x1 $x1 $x3 $x2 >actual &&
	cat >expect <<-EOF &&
	--max-age=1
	--max-age=1
	--max-age=3
	--max-age=2
	EOF
	test_cmp expect actual

ok 75 - rev-parse --since= unsqueezed ordering

# passed all 75 test(s)
1..75
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1502-rev-parse-parseopt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1502-rev-parse-parseopt/.git/
expecting success of 1502.1 'setup optionspec': 
	sed -e "s/^|//" >optionspec <<\EOF
|some-command [options] <args>...
|
|some-command does foo and bar!
|--
|h,help    show the help
|
|foo       some nifty option --foo
|bar=      some cool option --bar with an argument
|b,baz     a short and long option
|
| An option group Header
|C?        option C with an optional argument
|d,data?   short and long option with an optional argument
|
| Argument hints
|B=arg     short option required argument
|bar2=arg  long option required argument
|e,fuz=with-space  short and long option required argument
|s?some    short option optional argument
|long?data long option optional argument
|g,fluf?path     short and long option optional argument
|longest=very-long-argument-hint  a very long argument hint
|pair=key=value  with an equals sign in the hint
|aswitch help te=t contains? fl*g characters!`
|bswitch=hint	 hint has trailing tab character
|cswitch	 switch has trailing tab character
|short-hint=a    with a one symbol hint
|
|Extras
|extra1    line above used to cause a segfault but no longer does
EOF

ok 1 - setup optionspec

expecting success of 1502.2 'setup optionspec-no-switches': 
	sed -e "s/^|//" >optionspec_no_switches <<\EOF
|some-command [options] <args>...
|
|some-command does foo and bar!
|--
EOF

ok 2 - setup optionspec-no-switches

expecting success of 1502.3 'setup optionspec-only-hidden-switches': 
	sed -e "s/^|//" >optionspec_only_hidden_switches <<\EOF
|some-command [options] <args>...
|
|some-command does foo and bar!
|--
|hidden1* A hidden switch
EOF

ok 3 - setup optionspec-only-hidden-switches

expecting success of 1502.4 'test --parseopt help output': 
	sed -e "s/^|//" >expect <<\END_EXPECT &&
|cat <<\EOF
|usage: some-command [options] <args>...
|
|    some-command does foo and bar!
|
|    -h, --help            show the help
|    --foo                 some nifty option --foo
|    --bar ...             some cool option --bar with an argument
|    -b, --baz             a short and long option
|
|An option group Header
|    -C[...]               option C with an optional argument
|    -d, --data[=...]      short and long option with an optional argument
|
|Argument hints
|    -B <arg>              short option required argument
|    --bar2 <arg>          long option required argument
|    -e, --fuz <with-space>
|                          short and long option required argument
|    -s[<some>]            short option optional argument
|    --long[=<data>]       long option optional argument
|    -g, --fluf[=<path>]   short and long option optional argument
|    --longest <very-long-argument-hint>
|                          a very long argument hint
|    --pair <key=value>    with an equals sign in the hint
|    --aswitch             help te=t contains? fl*g characters!`
|    --bswitch <hint>      hint has trailing tab character
|    --cswitch             switch has trailing tab character
|    --short-hint <a>      with a one symbol hint
|
|Extras
|    --extra1              line above used to cause a segfault but no longer does
|
|EOF
END_EXPECT
	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
	test_cmp expect output

ok 4 - test --parseopt help output

expecting success of 1502.5 'test --parseopt help output no switches': 
	sed -e "s/^|//" >expect <<\END_EXPECT &&
|cat <<\EOF
|usage: some-command [options] <args>...
|
|    some-command does foo and bar!
|
|EOF
END_EXPECT
	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_no_switches &&
	test_cmp expect output

ok 5 - test --parseopt help output no switches

expecting success of 1502.6 'test --parseopt help output hidden switches': 
	sed -e "s/^|//" >expect <<\END_EXPECT &&
|cat <<\EOF
|usage: some-command [options] <args>...
|
|    some-command does foo and bar!
|
|EOF
END_EXPECT
	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_only_hidden_switches &&
	test_cmp expect output

ok 6 - test --parseopt help output hidden switches

expecting success of 1502.7 'test --parseopt help-all output hidden switches': 
	sed -e "s/^|//" >expect <<\END_EXPECT &&
|cat <<\EOF
|usage: some-command [options] <args>...
|
|    some-command does foo and bar!
|
|    --hidden1             A hidden switch
|
|EOF
END_EXPECT
	test_expect_code 129 git rev-parse --parseopt -- --help-all > output < optionspec_only_hidden_switches &&
	test_cmp expect output

ok 7 - test --parseopt help-all output hidden switches

expecting success of 1502.8 'test --parseopt invalid switch help output': 
	sed -e "s/^|//" >expect <<\END_EXPECT &&
|error: unknown option `does-not-exist'
|usage: some-command [options] <args>...
|
|    some-command does foo and bar!
|
|    -h, --help            show the help
|    --foo                 some nifty option --foo
|    --bar ...             some cool option --bar with an argument
|    -b, --baz             a short and long option
|
|An option group Header
|    -C[...]               option C with an optional argument
|    -d, --data[=...]      short and long option with an optional argument
|
|Argument hints
|    -B <arg>              short option required argument
|    --bar2 <arg>          long option required argument
|    -e, --fuz <with-space>
|                          short and long option required argument
|    -s[<some>]            short option optional argument
|    --long[=<data>]       long option optional argument
|    -g, --fluf[=<path>]   short and long option optional argument
|    --longest <very-long-argument-hint>
|                          a very long argument hint
|    --pair <key=value>    with an equals sign in the hint
|    --aswitch             help te=t contains? fl*g characters!`
|    --bswitch <hint>      hint has trailing tab character
|    --cswitch             switch has trailing tab character
|    --short-hint <a>      with a one symbol hint
|
|Extras
|    --extra1              line above used to cause a segfault but no longer does
|
END_EXPECT
	test_expect_code 129 git rev-parse --parseopt -- --does-not-exist 1>/dev/null 2>output < optionspec &&
	test_cmp expect output

ok 8 - test --parseopt invalid switch help output

expecting success of 1502.9 'setup expect.1': 
	cat > expect <<EOF
set -- --foo --bar 'ham' -b --aswitch -- 'arg'
EOF

ok 9 - setup expect.1

expecting success of 1502.10 'test --parseopt': 
	git rev-parse --parseopt -- --foo --bar=ham --baz --aswitch arg < optionspec > output &&
	test_cmp expect output

ok 10 - test --parseopt

expecting success of 1502.11 'test --parseopt with mixed options and arguments': 
	git rev-parse --parseopt -- --foo arg --bar=ham --baz --aswitch < optionspec > output &&
	test_cmp expect output

ok 11 - test --parseopt with mixed options and arguments

expecting success of 1502.12 'setup expect.2': 
	cat > expect <<EOF
set -- --foo -- 'arg' '--bar=ham'
EOF

ok 12 - setup expect.2

expecting success of 1502.13 'test --parseopt with --': 
	git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
	test_cmp expect output

ok 13 - test --parseopt with --

expecting success of 1502.14 'test --parseopt --stop-at-non-option': 
	git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output &&
	test_cmp expect output

ok 14 - test --parseopt --stop-at-non-option

expecting success of 1502.15 'setup expect.3': 
	cat > expect <<EOF
set -- --foo -- '--' 'arg' '--bar=ham'
EOF

ok 15 - setup expect.3

expecting success of 1502.16 'test --parseopt --keep-dashdash': 
	git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output &&
	test_cmp expect output

ok 16 - test --parseopt --keep-dashdash

expecting success of 1502.17 'setup expect.4': 
	cat >expect <<EOF
set -- --foo -- '--' 'arg' '--spam=ham'
EOF

ok 17 - setup expect.4

expecting success of 1502.18 'test --parseopt --keep-dashdash --stop-at-non-option with --': 
	git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
	test_cmp expect output

ok 18 - test --parseopt --keep-dashdash --stop-at-non-option with --

expecting success of 1502.19 'setup expect.5': 
	cat > expect <<EOF
set -- --foo -- 'arg' '--spam=ham'
EOF

ok 19 - setup expect.5

expecting success of 1502.20 'test --parseopt --keep-dashdash --stop-at-non-option without --': 
	git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
	test_cmp expect output

ok 20 - test --parseopt --keep-dashdash --stop-at-non-option without --

expecting success of 1502.21 'setup expect.6': 
	cat > expect <<EOF
set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg'
EOF

ok 21 - setup expect.6

expecting success of 1502.22 'test --parseopt --stuck-long': 
	git rev-parse --parseopt --stuck-long -- --foo --bar=z -b arg -CZ -dA <optionspec >output &&
	test_cmp expect output

ok 22 - test --parseopt --stuck-long

expecting success of 1502.23 'setup expect.7': 
	cat > expect <<EOF
set -- --data='' -C --baz -- 'arg'
EOF

ok 23 - setup expect.7

expecting success of 1502.24 'test --parseopt --stuck-long and empty optional argument': 
	git rev-parse --parseopt --stuck-long -- --data= arg -C -b <optionspec >output &&
	test_cmp expect output

ok 24 - test --parseopt --stuck-long and empty optional argument

expecting success of 1502.25 'setup expect.8': 
	cat > expect <<EOF
set -- --data --baz -- 'arg'
EOF

ok 25 - setup expect.8

expecting success of 1502.26 'test --parseopt --stuck-long and long option with unset optional argument': 
	git rev-parse --parseopt --stuck-long -- --data arg -b <optionspec >output &&
	test_cmp expect output

ok 26 - test --parseopt --stuck-long and long option with unset optional argument

expecting success of 1502.27 'test --parseopt --stuck-long and short option with unset optional argument': 
	git rev-parse --parseopt --stuck-long -- -d arg -b <optionspec >output &&
	test_cmp expect output

ok 27 - test --parseopt --stuck-long and short option with unset optional argument

expecting success of 1502.28 'test --parseopt help output: "wrapped" options normal "or:" lines': 
	sed -e "s/^|//" >spec <<-\EOF &&
	|cmd [--some-option]
	|    [--another-option]
	|cmd [--yet-another-option]
	|--
	|h,help    show the help
	EOF

	sed -e "s/^|//" >expect <<-\END_EXPECT &&
	|cat <<\EOF
	|usage: cmd [--some-option]
	|   or:     [--another-option]
	|   or: cmd [--yet-another-option]
	|
	|    -h, --help            show the help
	|
	|EOF
	END_EXPECT

	test_must_fail git rev-parse --parseopt -- -h >out <spec >actual &&
	test_cmp expect actual

ok 28 - test --parseopt help output: "wrapped" options normal "or:" lines

expecting success of 1502.29 'test --parseopt invalid opt-spec': 
	test_write_lines x -- "=, x" >spec &&
	echo "fatal: missing opt-spec before option flags" >expect &&
	test_must_fail git rev-parse --parseopt -- >out <spec 2>err &&
	test_cmp expect err

ok 29 - test --parseopt invalid opt-spec

expecting success of 1502.30 'test --parseopt help output: multi-line blurb after empty line': 
	sed -e "s/^|//" >spec <<-\EOF &&
	|cmd [--some-option]
	|    [--another-option]
	|
	|multi
	|line
	|blurb
	|--
	|h,help    show the help
	EOF

	sed -e "s/^|//" >expect <<-\END_EXPECT &&
	|cat <<\EOF
	|usage: cmd [--some-option]
	|   or:     [--another-option]
	|
	|    multi
	|    line
	|    blurb
	|
	|    -h, --help            show the help
	|
	|EOF
	END_EXPECT

	test_must_fail git rev-parse --parseopt -- -h >out <spec >actual &&
	test_cmp expect actual

ok 30 - test --parseopt help output: multi-line blurb after empty line

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1504-ceiling-dirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1504-ceiling-dirs/.git/
expecting success of 1504.1 'no_ceil': test '' = "$(git rev-parse --show-prefix)"
ok 1 - no_ceil

expecting success of 1504.2 'ceil_empty': test '' = "$(git rev-parse --show-prefix)"
ok 2 - ceil_empty

expecting success of 1504.3 'ceil_at_parent': test '' = "$(git rev-parse --show-prefix)"
ok 3 - ceil_at_parent

expecting success of 1504.4 'ceil_at_parent_slash': test '' = "$(git rev-parse --show-prefix)"
ok 4 - ceil_at_parent_slash

expecting success of 1504.5 'ceil_at_trash': test '' = "$(git rev-parse --show-prefix)"
ok 5 - ceil_at_trash

expecting success of 1504.6 'ceil_at_trash_slash': test '' = "$(git rev-parse --show-prefix)"
ok 6 - ceil_at_trash_slash

expecting success of 1504.7 'ceil_at_sub': test '' = "$(git rev-parse --show-prefix)"
ok 7 - ceil_at_sub

expecting success of 1504.8 'ceil_at_sub_slash': test '' = "$(git rev-parse --show-prefix)"
ok 8 - ceil_at_sub_slash

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1504.9 'subdir_no_ceil': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 9 - subdir_no_ceil

expecting success of 1504.10 'subdir_ceil_empty': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 10 - subdir_ceil_empty

expecting success of 1504.11 'subdir_ceil_at_trash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 11 - subdir_ceil_at_trash: prefix

expecting success of 1504.12 'subdir_ceil_at_trash_slash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 12 - subdir_ceil_at_trash_slash: prefix

expecting success of 1504.13 'subdir_ceil_at_sub: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 13 - subdir_ceil_at_sub: prefix

expecting success of 1504.14 'subdir_ceil_at_sub_slash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 14 - subdir_ceil_at_sub_slash: prefix

expecting success of 1504.15 'subdir_ceil_at_top: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 15 - subdir_ceil_at_top: prefix

expecting success of 1504.16 'subdir_ceil_at_top_slash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 16 - subdir_ceil_at_top_slash: prefix

expecting success of 1504.17 'subdir_ceil_at_top_no_resolve': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 17 - subdir_ceil_at_top_no_resolve

expecting success of 1504.18 'subdir_ceil_at_top_slash_no_resolve': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 18 - subdir_ceil_at_top_slash_no_resolve

expecting success of 1504.19 'subdir_ceil_at_subdir': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 19 - subdir_ceil_at_subdir

expecting success of 1504.20 'subdir_ceil_at_subdir_slash': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 20 - subdir_ceil_at_subdir_slash

expecting success of 1504.21 'subdir_ceil_at_su': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 21 - subdir_ceil_at_su

expecting success of 1504.22 'subdir_ceil_at_su_slash': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 22 - subdir_ceil_at_su_slash

expecting success of 1504.23 'subdir_ceil_at_sub_di': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 23 - subdir_ceil_at_sub_di

expecting success of 1504.24 'subdir_ceil_at_sub_di_slash': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 24 - subdir_ceil_at_sub_di_slash

expecting success of 1504.25 'subdir_ceil_at_subdi': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 25 - subdir_ceil_at_subdi

expecting success of 1504.26 'subdir_ceil_at_subdi_slash': test 'sub/dir/' = "$(git rev-parse --show-prefix)"
ok 26 - subdir_ceil_at_subdi_slash

expecting success of 1504.27 'second_of_two: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 27 - second_of_two: prefix

expecting success of 1504.28 'first_of_two: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 28 - first_of_two: prefix

expecting success of 1504.29 'second_of_three: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 29 - second_of_three: prefix

expecting success of 1504.30 'git_dir_specified': test '' = "$(git rev-parse --show-prefix)"
ok 30 - git_dir_specified

expecting success of 1504.31 'sd_no_ceil': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 31 - sd_no_ceil

expecting success of 1504.32 'sd_ceil_empty': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 32 - sd_ceil_empty

expecting success of 1504.33 'sd_ceil_at_trash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 33 - sd_ceil_at_trash: prefix

expecting success of 1504.34 'sd_ceil_at_trash_slash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 34 - sd_ceil_at_trash_slash: prefix

expecting success of 1504.35 'sd_ceil_at_s: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 35 - sd_ceil_at_s: prefix

expecting success of 1504.36 'sd_ceil_at_s_slash: prefix': 
		test_expect_code 128 git rev-parse --show-prefix
	
fatal: not a git repository (or any of the parent directories): .git
ok 36 - sd_ceil_at_s_slash: prefix

expecting success of 1504.37 'sd_ceil_at_sd': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 37 - sd_ceil_at_sd

expecting success of 1504.38 'sd_ceil_at_sd_slash': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 38 - sd_ceil_at_sd_slash

expecting success of 1504.39 'sd_ceil_at_su': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 39 - sd_ceil_at_su

expecting success of 1504.40 'sd_ceil_at_su_slash': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 40 - sd_ceil_at_su_slash

expecting success of 1504.41 'sd_ceil_at_s_di': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 41 - sd_ceil_at_s_di

expecting success of 1504.42 'sd_ceil_at_s_di_slash': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 42 - sd_ceil_at_s_di_slash

expecting success of 1504.43 'sd_ceil_at_sdi': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 43 - sd_ceil_at_sdi

expecting success of 1504.44 'sd_ceil_at_sdi_slash': test 's/d/' = "$(git rev-parse --show-prefix)"
ok 44 - sd_ceil_at_sdi_slash

# passed all 44 test(s)
1..44
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1503-rev-parse-verify.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1503-rev-parse-verify/.git/
expecting success of 1503.1 'set up basic repo with 1 file (hello) and 4 commits': 
	add_line_into_file "1: Hello World" hello &&
	HASH1=$(git rev-parse --verify HEAD) &&
	add_line_into_file "2: A new day for git" hello &&
	HASH2=$(git rev-parse --verify HEAD) &&
	add_line_into_file "3: Another new day for git" hello &&
	HASH3=$(git rev-parse --verify HEAD) &&
	add_line_into_file "4: Ciao for now" hello &&
	HASH4=$(git rev-parse --verify HEAD)

ok 1 - set up basic repo with 1 file (hello) and 4 commits

expecting success of 1503.2 'works with one good rev': 
	rev_hash1=$(git rev-parse --verify $HASH1) &&
	test "$rev_hash1" = "$HASH1" &&
	rev_hash2=$(git rev-parse --verify $HASH2) &&
	test "$rev_hash2" = "$HASH2" &&
	rev_hash3=$(git rev-parse --verify $HASH3) &&
	test "$rev_hash3" = "$HASH3" &&
	rev_hash4=$(git rev-parse --verify $HASH4) &&
	test "$rev_hash4" = "$HASH4" &&
	rev_main=$(git rev-parse --verify main) &&
	test "$rev_main" = "$HASH4" &&
	rev_head=$(git rev-parse --verify HEAD) &&
	test "$rev_head" = "$HASH4"

ok 2 - works with one good rev

expecting success of 1503.3 'fails with any bad rev or many good revs': 
	test_must_fail git rev-parse --verify 2>error &&
	grep "single revision" error &&
	test_must_fail git rev-parse --verify foo 2>error &&
	grep "single revision" error &&
	test_must_fail git rev-parse --verify HEAD bar 2>error &&
	grep "single revision" error &&
	test_must_fail git rev-parse --verify baz HEAD 2>error &&
	grep "single revision" error &&
	test_must_fail git rev-parse --verify $HASH2 HEAD 2>error &&
	grep "single revision" error

fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
ok 3 - fails with any bad rev or many good revs

expecting success of 1503.4 'fails silently when using -q': 
	test_must_fail git rev-parse --verify --quiet 2>error &&
	test_must_be_empty error &&
	test_must_fail git rev-parse -q --verify foo 2>error &&
	test_must_be_empty error &&
	test_must_fail git rev-parse --verify -q HEAD bar 2>error &&
	test_must_be_empty error &&
	test_must_fail git rev-parse --quiet --verify baz HEAD 2>error &&
	test_must_be_empty error &&
	test_must_fail git rev-parse -q --verify $HASH2 HEAD 2>error &&
	test_must_be_empty error

ok 4 - fails silently when using -q

expecting success of 1503.5 'fails silently when using -q with deleted reflogs': 
	ref=$(git rev-parse HEAD) &&
	git update-ref --create-reflog -m "message for refs/test" refs/test "$ref" &&
	git reflog delete --updateref --rewrite refs/test@{1} &&
	test_must_fail git rev-parse -q --verify refs/test@{1} >error 2>&1 &&
	test_must_be_empty error

ok 5 - fails silently when using -q with deleted reflogs

expecting success of 1503.6 'fails silently when using -q with not enough reflogs': 
	ref=$(git rev-parse HEAD) &&
	git update-ref --create-reflog -m "message for refs/test2" refs/test2 "$ref" &&
	test_must_fail git rev-parse -q --verify refs/test2@{999} >error 2>&1 &&
	test_must_be_empty error

ok 6 - fails silently when using -q with not enough reflogs

expecting success of 1503.7 'succeeds silently with -q and reflogs that do not go far back enough in time': 
	ref=$(git rev-parse HEAD) &&
	git update-ref --create-reflog -m "message for refs/test3" refs/test3 "$ref" &&
	git rev-parse -q --verify refs/test3@{1.year.ago} >actual 2>error &&
	test_must_be_empty error &&
	echo "$ref" >expect &&
	test_cmp expect actual

ok 7 - succeeds silently with -q and reflogs that do not go far back enough in time

expecting success of 1503.8 'no stdout output on error': 
	test -z "$(git rev-parse --verify)" &&
	test -z "$(git rev-parse --verify foo)" &&
	test -z "$(git rev-parse --verify baz HEAD)" &&
	test -z "$(git rev-parse --verify HEAD bar)" &&
	test -z "$(git rev-parse --verify $HASH2 HEAD)"

fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
ok 8 - no stdout output on error

expecting success of 1503.9 'use --default': 
	git rev-parse --verify --default main &&
	git rev-parse --verify --default main HEAD &&
	git rev-parse --default main --verify &&
	git rev-parse --default main --verify HEAD &&
	git rev-parse --verify HEAD --default main &&
	test_must_fail git rev-parse --verify foo --default main &&
	test_must_fail git rev-parse --default HEAD --verify bar &&
	test_must_fail git rev-parse --verify --default HEAD baz &&
	test_must_fail git rev-parse --default foo --verify &&
	test_must_fail git rev-parse --verify --default bar

32a594a3fdac2d57cf6d02987e30eec68511498c
32a594a3fdac2d57cf6d02987e30eec68511498c
32a594a3fdac2d57cf6d02987e30eec68511498c
32a594a3fdac2d57cf6d02987e30eec68511498c
32a594a3fdac2d57cf6d02987e30eec68511498c
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
fatal: Needed a single revision
ok 9 - use --default

expecting success of 1503.10 'main@{n} for various n': 
	git reflog >out &&
	N=$(wc -l <out) &&
	Nm1=$(($N-1)) &&
	Np1=$(($N+1)) &&
	git rev-parse --verify main@{0} &&
	git rev-parse --verify main@{1} &&
	git rev-parse --verify main@{$Nm1} &&
	test_must_fail git rev-parse --verify main@{$N} &&
	test_must_fail git rev-parse --verify main@{$Np1}

32a594a3fdac2d57cf6d02987e30eec68511498c
3de952f2416b6084f557ec417709eac740c6818c
88bcdc1839f0ad191ffdd65cae2a2a862d682151
fatal: log for 'main' only has 4 entries
fatal: log for 'main' only has 4 entries
ok 10 - main@{n} for various n

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 1503.11 'ref resolution not confused by broken symlinks': 
	ln -s does-not-exist .git/refs/heads/broken &&
	test_must_fail git rev-parse --verify broken

fatal: Needed a single revision
ok 11 - ref resolution not confused by broken symlinks

expecting success of 1503.12 'options can appear after --verify': 
	git rev-parse --verify HEAD >expect &&
	git rev-parse --verify -q HEAD >actual &&
	test_cmp expect actual

ok 12 - options can appear after --verify

expecting success of 1503.13 'verify respects --end-of-options': 
	git update-ref refs/heads/-tricky HEAD &&
	git rev-parse --verify HEAD >expect &&
	git rev-parse --verify --end-of-options -tricky >actual &&
	test_cmp expect actual

ok 13 - verify respects --end-of-options

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1505-rev-parse-last.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1505-rev-parse-last/.git/
expecting success of 1505.1 'setup': 

	make_commit 1 &&
	git branch side &&
	make_commit 2 &&
	make_commit 3 &&
	git checkout side &&
	make_commit 4 &&
	git merge main &&
	git checkout main


[main (root-commit) c11cd10] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
[main ba98451] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2
[main aefd701] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3
Switched to branch 'side'
[side 1d4df77] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4
Merge made by the 'ort' strategy.
 2 | 1 +
 3 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 2
 create mode 100644 3
Switched to branch 'main'
ok 1 - setup

expecting success of 1505.2 '@{-1} works': 
	test_cmp_rev side @{-1}

ok 2 - @{-1} works

expecting success of 1505.3 '@{-1}~2 works': 
	test_cmp_rev side~2 @{-1}~2

ok 3 - @{-1}~2 works

expecting success of 1505.4 '@{-1}^2 works': 
	test_cmp_rev side^2 @{-1}^2

ok 4 - @{-1}^2 works

expecting success of 1505.5 '@{-1}@{1} works': 
	test_cmp_rev side@{1} @{-1}@{1}

ok 5 - @{-1}@{1} works

expecting success of 1505.6 '@{-2} works': 
	test_cmp_rev main @{-2}

ok 6 - @{-2} works

expecting success of 1505.7 '@{-3} fails': 
	test_must_fail git rev-parse @{-3}

fatal: ambiguous argument '@{-3}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
@{-3}
ok 7 - @{-3} fails

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1506-rev-parse-diagnosis.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1506-rev-parse-diagnosis/.git/
expecting success of 1506.1 'set up basic repo': 
	echo one > file.txt &&
	mkdir subdir &&
	echo two > subdir/file.txt &&
	echo three > subdir/file2.txt &&
	git add . &&
	git commit -m init &&
	echo four > index-only.txt &&
	git add index-only.txt &&
	echo five > disk-only.txt

[main (root-commit) 724c7fc] init
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 file.txt
 create mode 100644 subdir/file.txt
 create mode 100644 subdir/file2.txt
ok 1 - set up basic repo

expecting success of 1506.2 'correct file objects': 
	HASH_file=$(git rev-parse HEAD:file.txt) &&
	git rev-parse HEAD:subdir/file.txt &&
	git rev-parse :index-only.txt &&
	(cd subdir &&
	 git rev-parse HEAD:subdir/file2.txt &&
	 test $HASH_file = $(git rev-parse HEAD:file.txt) &&
	 test $HASH_file = $(git rev-parse :file.txt) &&
	 test $HASH_file = $(git rev-parse :0:file.txt) )

f719efd430d52bcfc8566a43b2eb655688d38871
8510665149157c2bc901848c3e0b746954e9cbd9
2bdf67abb163a4ffb2d7f3f0880c9fe5068ce782
ok 2 - correct file objects

expecting success of 1506.3 'correct relative file objects (0)': 
	git rev-parse :file.txt >expected &&
	git rev-parse :./file.txt >result &&
	test_cmp expected result &&
	git rev-parse :0:./file.txt >result &&
	test_cmp expected result

ok 3 - correct relative file objects (0)

expecting success of 1506.4 'correct relative file objects (1)': 
	git rev-parse HEAD:file.txt >expected &&
	git rev-parse HEAD:./file.txt >result &&
	test_cmp expected result

ok 4 - correct relative file objects (1)

expecting success of 1506.5 'correct relative file objects (2)': 
	(
		cd subdir &&
		git rev-parse HEAD:../file.txt >result &&
		test_cmp ../expected result
	)

ok 5 - correct relative file objects (2)

expecting success of 1506.6 'correct relative file objects (3)': 
	(
		cd subdir &&
		git rev-parse HEAD:../subdir/../file.txt >result &&
		test_cmp ../expected result
	)

ok 6 - correct relative file objects (3)

expecting success of 1506.7 'correct relative file objects (4)': 
	git rev-parse HEAD:subdir/file.txt >expected &&
	(
		cd subdir &&
		git rev-parse HEAD:./file.txt >result &&
		test_cmp ../expected result
	)

ok 7 - correct relative file objects (4)

expecting success of 1506.8 'correct relative file objects (5)': 
	git rev-parse :subdir/file.txt >expected &&
	(
		cd subdir &&
		git rev-parse :./file.txt >result &&
		test_cmp ../expected result &&
		git rev-parse :0:./file.txt >result &&
		test_cmp ../expected result
	)

ok 8 - correct relative file objects (5)

expecting success of 1506.9 'correct relative file objects (6)': 
	git rev-parse :file.txt >expected &&
	(
		cd subdir &&
		git rev-parse :../file.txt >result &&
		test_cmp ../expected result &&
		git rev-parse :0:../file.txt >result &&
		test_cmp ../expected result
	)

ok 9 - correct relative file objects (6)

expecting success of 1506.10 'incorrect revision id': 
	test_must_fail git rev-parse foobar:file.txt 2>error &&
	test_i18ngrep "invalid object name .foobar." error &&
	test_must_fail git rev-parse foobar 2>error &&
	test_i18ngrep "unknown revision or path not in the working tree." error

foobar:file.txt
fatal: invalid object name 'foobar'.
foobar
fatal: ambiguous argument 'foobar': unknown revision or path not in the working tree.
ok 10 - incorrect revision id

expecting success of 1506.11 'incorrect file in sha1:path': 
	test_must_fail git rev-parse HEAD:nothing.txt 2>error &&
	test_i18ngrep "path .nothing.txt. does not exist in .HEAD." error &&
	test_must_fail git rev-parse HEAD:index-only.txt 2>error &&
	test_i18ngrep "path .index-only.txt. exists on disk, but not in .HEAD." error &&
	(cd subdir &&
	 test_must_fail git rev-parse HEAD:file2.txt 2>error &&
	 test_did_you_mean HEAD subdir/ file2.txt exists )

HEAD:nothing.txt
fatal: path 'nothing.txt' does not exist in 'HEAD'
HEAD:index-only.txt
fatal: path 'index-only.txt' exists on disk, but not in 'HEAD'
HEAD:file2.txt
ok 11 - incorrect file in sha1:path

expecting success of 1506.12 'incorrect file in :path and :N:path': 
	test_must_fail git rev-parse :nothing.txt 2>error &&
	test_i18ngrep "path .nothing.txt. does not exist (neither on disk nor in the index)" error &&
	test_must_fail git rev-parse :1:nothing.txt 2>error &&
	test_i18ngrep "path .nothing.txt. does not exist (neither on disk nor in the index)" error &&
	test_must_fail git rev-parse :1:file.txt 2>error &&
	test_did_you_mean ":0" "" file.txt "is in the index" "at stage 1" &&
	(cd subdir &&
	 test_must_fail git rev-parse :1:file.txt 2>error &&
	 test_did_you_mean ":0" "" file.txt "is in the index" "at stage 1" &&
	 test_must_fail git rev-parse :file2.txt 2>error &&
	 test_did_you_mean ":0" subdir/ file2.txt "is in the index" &&
	 test_must_fail git rev-parse :2:file2.txt 2>error &&
	 test_did_you_mean :0 subdir/ file2.txt "is in the index") &&
	test_must_fail git rev-parse :disk-only.txt 2>error &&
	test_i18ngrep "path .disk-only.txt. exists on disk, but not in the index" error

:nothing.txt
fatal: path 'nothing.txt' does not exist (neither on disk nor in the index)
:1:nothing.txt
fatal: path 'nothing.txt' does not exist (neither on disk nor in the index)
:1:file.txt
:1:file.txt
:file2.txt
:2:file2.txt
:disk-only.txt
fatal: path 'disk-only.txt' exists on disk, but not in the index
ok 12 - incorrect file in :path and :N:path

expecting success of 1506.13 'invalid @{n} reference': 
	test_must_fail git rev-parse main@{99999} >output 2>error &&
	test_must_be_empty output &&
	test_i18ngrep "log for [^ ]* only has [0-9][0-9]* entries" error  &&
	test_must_fail git rev-parse --verify main@{99999} >output 2>error &&
	test_must_be_empty output &&
	test_i18ngrep "log for [^ ]* only has [0-9][0-9]* entries" error

fatal: log for 'main' only has 1 entries
fatal: log for 'main' only has 1 entries
ok 13 - invalid @{n} reference

expecting success of 1506.14 'relative path not found': 
	(
		cd subdir &&
		test_must_fail git rev-parse HEAD:./nonexistent.txt 2>error &&
		test_i18ngrep subdir/nonexistent.txt error
	)

HEAD:./nonexistent.txt
fatal: path 'subdir/nonexistent.txt' does not exist in 'HEAD'
ok 14 - relative path not found

expecting success of 1506.15 'relative path outside worktree': 
	test_must_fail git rev-parse HEAD:../file.txt >output 2>error &&
	test_must_be_empty output &&
	test_i18ngrep "outside repository" error

fatal: '../file.txt' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t1506-rev-parse-diagnosis'
ok 15 - relative path outside worktree

expecting success of 1506.16 'relative path when cwd is outside worktree': 
	test_must_fail git --git-dir=.git --work-tree=subdir rev-parse HEAD:./file.txt >output 2>error &&
	test_must_be_empty output &&
	test_i18ngrep "relative path syntax can.t be used outside working tree" error

fatal: relative path syntax can't be used outside working tree
ok 16 - relative path when cwd is outside worktree

expecting success of 1506.17 '<commit>:file correctly diagnosed after a pathname': 
	test_must_fail git rev-parse file.txt HEAD:file.txt 1>actual 2>error &&
	test_i18ngrep ! "exists on disk" error &&
	test_i18ngrep "no such path in the working tree" error &&
	cat >expect <<-\EOF &&
	file.txt
	HEAD:file.txt
	EOF
	test_cmp expect actual

fatal: HEAD:file.txt: no such path in the working tree.
ok 17 - <commit>:file correctly diagnosed after a pathname

expecting success of 1506.18 'dotdot is not an empty set': 
	( H=$(git rev-parse HEAD) && echo $H && echo ^$H ) >expect &&

	git rev-parse HEAD.. >actual &&
	test_cmp expect actual &&

	git rev-parse ..HEAD >actual &&
	test_cmp expect actual &&

	echo .. >expect &&
	git rev-parse .. >actual &&
	test_cmp expect actual

ok 18 - dotdot is not an empty set

expecting success of 1506.19 'dotdot does not peel endpoints': 
	git tag -a -m "annote" annotated HEAD &&
	A=$(git rev-parse annotated) &&
	H=$(git rev-parse annotated^0) &&
	{
		echo $A && echo ^$A
	} >expect-with-two-dots &&
	{
		echo $A && echo $A && echo ^$H
	} >expect-with-merge-base &&

	git rev-parse annotated..annotated >actual-with-two-dots &&
	test_cmp expect-with-two-dots actual-with-two-dots &&

	git rev-parse annotated...annotated >actual-with-merge-base &&
	test_cmp expect-with-merge-base actual-with-merge-base

ok 19 - dotdot does not peel endpoints

expecting success of 1506.20 'arg before dashdash must be a revision (missing)': 
	test_must_fail git rev-parse foobar -- 2>stderr &&
	test_i18ngrep "bad revision" stderr

fatal: bad revision 'foobar'
ok 20 - arg before dashdash must be a revision (missing)

expecting success of 1506.21 'arg before dashdash must be a revision (file)': 
	>foobar &&
	test_must_fail git rev-parse foobar -- 2>stderr &&
	test_i18ngrep "bad revision" stderr

fatal: bad revision 'foobar'
ok 21 - arg before dashdash must be a revision (file)

expecting success of 1506.22 'arg before dashdash must be a revision (ambiguous)': 
	>foobar &&
	git update-ref refs/heads/foobar HEAD &&
	{
		# we do not want to use rev-parse here, because
		# we are testing it
		git show-ref -s refs/heads/foobar &&
		printf "%s\n" --
	} >expect &&
	git rev-parse foobar -- >actual &&
	test_cmp expect actual

ok 22 - arg before dashdash must be a revision (ambiguous)

expecting success of 1506.23 'reject Nth parent if N is too high': 
	test_must_fail git rev-parse HEAD^100000000000000000000000000000000

fatal: ambiguous argument 'HEAD^100000000000000000000000000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
HEAD^100000000000000000000000000000000
ok 23 - reject Nth parent if N is too high

expecting success of 1506.24 'reject Nth ancestor if N is too high': 
	test_must_fail git rev-parse HEAD~100000000000000000000000000000000

fatal: ambiguous argument 'HEAD~100000000000000000000000000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
HEAD~100000000000000000000000000000000
ok 24 - reject Nth ancestor if N is too high

expecting success of 1506.25 'pathspecs with wildcards are not ambiguous': 
	echo "*.c" >expect &&
	git rev-parse "*.c" >actual &&
	test_cmp expect actual

ok 25 - pathspecs with wildcards are not ambiguous

expecting success of 1506.26 'backslash does not trigger wildcard rule': 
	test_must_fail git rev-parse "foo\\bar"

fatal: ambiguous argument 'foo\bar': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
foo\bar
ok 26 - backslash does not trigger wildcard rule

expecting success of 1506.27 'escaped char does not trigger wildcard rule': 
	test_must_fail git rev-parse "foo\\*bar"

fatal: ambiguous argument 'foo\*bar': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
foo\*bar
ok 27 - escaped char does not trigger wildcard rule

expecting success of 1506.28 'arg after dashdash not interpreted as option': 
	cat >expect <<-\EOF &&
	--
	--local-env-vars
	EOF
	git rev-parse -- --local-env-vars >actual &&
	test_cmp expect actual

ok 28 - arg after dashdash not interpreted as option

expecting success of 1506.29 'arg after end-of-options not interpreted as option': 
	test_must_fail git rev-parse --end-of-options --not-real -- 2>err &&
	test_i18ngrep bad.revision.*--not-real err

--end-of-options
fatal: bad revision '--not-real'
ok 29 - arg after end-of-options not interpreted as option

expecting success of 1506.30 'end-of-options still allows --': 
	cat >expect <<-EOF &&
	--end-of-options
	$(git rev-parse --verify HEAD)
	--
	path
	EOF
	git rev-parse --end-of-options HEAD -- path >actual &&
	test_cmp expect actual

ok 30 - end-of-options still allows --

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1507-rev-parse-upstream.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1507-rev-parse-upstream/.git/
expecting success of 1507.1 'setup': 

	test_commit 1 &&
	git checkout -b side &&
	test_commit 2 &&
	git checkout main &&
	git clone . clone &&
	test_commit 3 &&
	(cd clone &&
	 test_commit 4 &&
	 git branch --track my-side origin/side &&
	 git branch --track local-main main &&
	 git branch --track fun@ny origin/side &&
	 git branch --track @funny origin/side &&
	 git branch --track funny@ origin/side &&
	 git remote add -t main main-only .. &&
	 git fetch main-only &&
	 git branch bad-upstream &&
	 git config branch.bad-upstream.remote main-only &&
	 git config branch.bad-upstream.merge refs/heads/side
	)

[main (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Switched to a new branch 'side'
[side 82335b2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Switched to branch 'main'
Cloning into 'clone'...
done.
[main 8f489d0] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[main 6efda21] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
branch 'my-side' set up to track 'origin/side'.
branch 'local-main' set up to track 'main'.
branch 'fun@ny' set up to track 'origin/side'.
branch '@funny' set up to track 'origin/side'.
branch 'funny@' set up to track 'origin/side'.
From ..
 * [new branch]      main       -> main-only/main
 * [new tag]         3          -> 3
ok 1 - setup

expecting success of 1507.2 '@{upstream} resolves to correct full name': 
	echo refs/remotes/origin/main >expect &&
	git -C clone rev-parse --symbolic-full-name @{upstream} >actual &&
	test_cmp expect actual &&
	git -C clone rev-parse --symbolic-full-name @{UPSTREAM} >actual &&
	test_cmp expect actual &&
	git -C clone rev-parse --symbolic-full-name @{UpSTReam} >actual &&
	test_cmp expect actual

ok 2 - @{upstream} resolves to correct full name

expecting success of 1507.3 '@{u} resolves to correct full name': 
	echo refs/remotes/origin/main >expect &&
	git -C clone rev-parse --symbolic-full-name @{u} >actual &&
	test_cmp expect actual &&
	git -C clone rev-parse --symbolic-full-name @{U} >actual &&
	test_cmp expect actual

ok 3 - @{u} resolves to correct full name

expecting success of 1507.4 'my-side@{upstream} resolves to correct full name': 
	echo refs/remotes/origin/side >expect &&
	git -C clone rev-parse --symbolic-full-name my-side@{u} >actual &&
	test_cmp expect actual

ok 4 - my-side@{upstream} resolves to correct full name

expecting success of 1507.5 'upstream of branch with @ in middle': 
	git -C clone rev-parse --symbolic-full-name fun@ny@{u} >actual &&
	echo refs/remotes/origin/side >expect &&
	test_cmp expect actual &&
	git -C clone rev-parse --symbolic-full-name fun@ny@{U} >actual &&
	test_cmp expect actual

ok 5 - upstream of branch with @ in middle

expecting success of 1507.6 'upstream of branch with @ at start': 
	git -C clone rev-parse --symbolic-full-name @funny@{u} >actual &&
	echo refs/remotes/origin/side >expect &&
	test_cmp expect actual

ok 6 - upstream of branch with @ at start

expecting success of 1507.7 'upstream of branch with @ at end': 
	git -C clone rev-parse --symbolic-full-name funny@@{u} >actual &&
	echo refs/remotes/origin/side >expect &&
	test_cmp expect actual

ok 7 - upstream of branch with @ at end

expecting success of 1507.8 'refs/heads/my-side@{upstream} does not resolve to my-side{upstream}': 
	test_must_fail git -C clone rev-parse --symbolic-full-name refs/heads/my-side@{upstream}

fatal: no such branch: 'refs/heads/my-side'
ok 8 - refs/heads/my-side@{upstream} does not resolve to my-side{upstream}

expecting success of 1507.9 'my-side@{u} resolves to correct commit': 
	git checkout side &&
	test_commit 5 &&
	(cd clone && git fetch) &&
	echo 2 >expect &&
	commit_subject my-side >actual &&
	test_cmp expect actual &&
	echo 5 >expect &&
	commit_subject my-side@{u} >actual

Switched to branch 'side'
[side e3f9627] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
From /<<PKGBUILDDIR>>/t/trash directory.t1507-rev-parse-upstream/.
   d0dcf97..8f489d0  main       -> origin/main
   82335b2..e3f9627  side       -> origin/side
 * [new tag]         5          -> 5
ok 9 - my-side@{u} resolves to correct commit

expecting success of 1507.10 'not-tracking@{u} fails': 
	test_must_fail git -C clone rev-parse --symbolic-full-name non-tracking@{u} &&
	(cd clone && git checkout --no-track -b non-tracking) &&
	test_must_fail git -C clone rev-parse --symbolic-full-name non-tracking@{u}

fatal: no such branch: 'non-tracking'
Switched to a new branch 'non-tracking'
fatal: no upstream configured for branch 'non-tracking'
ok 10 - not-tracking@{u} fails

expecting success of 1507.11 '<branch>@{u}@{1} resolves correctly': 
	test_commit 6 &&
	(cd clone && git fetch) &&
	echo 5 >expect &&
	commit_subject my-side@{u}@{1} >actual &&
	test_cmp expect actual &&
	commit_subject my-side@{U}@{1} >actual &&
	test_cmp expect actual

[side 8bf5882] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
From /<<PKGBUILDDIR>>/t/trash directory.t1507-rev-parse-upstream/.
   e3f9627..8bf5882  side       -> origin/side
 * [new tag]         6          -> 6
ok 11 - <branch>@{u}@{1} resolves correctly

expecting success of 1507.12 '@{u} without specifying branch fails on a detached HEAD': 
	git checkout HEAD^0 &&
	test_must_fail git rev-parse @{u} &&
	test_must_fail git rev-parse @{U}

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8bf5882 6
fatal: HEAD does not point to a branch
fatal: HEAD does not point to a branch
ok 12 - @{u} without specifying branch fails on a detached HEAD

expecting success of 1507.13 'checkout -b new my-side@{u} forks from the same': 
(
	cd clone &&
	git checkout -b new my-side@{u} &&
	git rev-parse --symbolic-full-name my-side@{u} >expect &&
	git rev-parse --symbolic-full-name new@{u} >actual &&
	test_cmp expect actual
)

Switched to a new branch 'new'
branch 'new' set up to track 'origin/side'.
ok 13 - checkout -b new my-side@{u} forks from the same

expecting success of 1507.14 'merge my-side@{u} records the correct name': 
(
	cd clone &&
	git checkout main &&
	test_might_fail git branch -D new &&
	git branch -t new my-side@{u} &&
	git merge -s ours new@{u} &&
	git show -s --pretty=tformat:%s >actual &&
	echo "Merge remote-tracking branch ${SQ}origin/side${SQ}" >expect &&
	test_cmp expect actual
)

Switched to branch 'main'
Your branch and 'origin/main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch new (was 8bf5882).
branch 'new' set up to track 'origin/side'.
Merge made by the 'ours' strategy.
ok 14 - merge my-side@{u} records the correct name

expecting success of 1507.15 'branch -d other@{u}': 
	git checkout -t -b other main &&
	git branch -d @{u} &&
	git for-each-ref refs/heads/main >actual &&
	test_must_be_empty actual

Previous HEAD position was 8bf5882 6
Switched to a new branch 'other'
branch 'other' set up to track 'main'.
Deleted branch main (was 8f489d0).
ok 15 - branch -d other@{u}

expecting success of 1507.16 'checkout other@{u}': 
	git branch -f main HEAD &&
	git checkout -t -b another main &&
	git checkout @{u} &&
	git symbolic-ref HEAD >actual &&
	echo refs/heads/main >expect &&
	test_cmp expect actual

Switched to a new branch 'another'
branch 'another' set up to track 'main'.
Switched to branch 'main'
ok 16 - checkout other@{u}

expecting success of 1507.17 'branch@{u} works when tracking a local branch': 
	echo refs/heads/main >expect &&
	git -C clone rev-parse --symbolic-full-name local-main@{u} >actual &&
	test_cmp expect actual

ok 17 - branch@{u} works when tracking a local branch

expecting success of 1507.18 'branch@{u} error message when no upstream': 
	cat >expect <<-EOF &&
	fatal: no upstream configured for branch ${SQ}non-tracking${SQ}
	EOF
	error_message non-tracking@{u} &&
	test_cmp expect error

ok 18 - branch@{u} error message when no upstream

expecting success of 1507.19 '@{u} error message when no upstream': 
	cat >expect <<-EOF &&
	fatal: no upstream configured for branch ${SQ}main${SQ}
	EOF
	test_must_fail git rev-parse --verify @{u} 2>actual &&
	test_cmp expect actual

ok 19 - @{u} error message when no upstream

expecting success of 1507.20 'branch@{u} error message with misspelt branch': 
	cat >expect <<-EOF &&
	fatal: no such branch: ${SQ}no-such-branch${SQ}
	EOF
	error_message no-such-branch@{u} &&
	test_cmp expect error

ok 20 - branch@{u} error message with misspelt branch

expecting success of 1507.21 '@{u} error message when not on a branch': 
	cat >expect <<-EOF &&
	fatal: HEAD does not point to a branch
	EOF
	git checkout HEAD^0 &&
	test_must_fail git rev-parse --verify @{u} 2>actual &&
	test_cmp expect actual

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8f489d0 3
ok 21 - @{u} error message when not on a branch

expecting success of 1507.22 'branch@{u} error message if upstream branch not fetched': 
	cat >expect <<-EOF &&
	fatal: upstream branch ${SQ}refs/heads/side${SQ} not stored as a remote-tracking branch
	EOF
	error_message bad-upstream@{u} &&
	test_cmp expect error

ok 22 - branch@{u} error message if upstream branch not fetched

expecting success of 1507.23 'pull works when tracking a local branch': 
(
	cd clone &&
	git checkout local-main &&
	git pull
)

Switched to branch 'local-main'
Your branch is behind 'main' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
From .
 * branch            main       -> FETCH_HEAD
Updating 6efda21..ac35135
Fast-forward
ok 23 - pull works when tracking a local branch

expecting success of 1507.24 '@{u} works when tracking a local branch': 
	echo refs/heads/main >expect &&
	git -C clone rev-parse --symbolic-full-name @{u} >actual &&
	test_cmp expect actual

ok 24 - @{u} works when tracking a local branch

expecting success of 1507.25 'log -g other@{u}': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
	commit $commit
	Reflog: main@{0} (C O Mitter <committer@example.com>)
	Reflog message: branch: Created from HEAD
	Author: A U Thor <author@example.com>
	Date:   Thu Apr 7 15:15:13 2005 -0700

	    3
	EOF
	git log -1 -g other@{u} >actual &&
	test_cmp expect actual

ok 25 - log -g other@{u}

expecting success of 1507.26 'log -g other@{u}@{now}': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
	commit $commit
	Reflog: main@{Thu Apr 7 15:17:13 2005 -0700} (C O Mitter <committer@example.com>)
	Reflog message: branch: Created from HEAD
	Author: A U Thor <author@example.com>
	Date:   Thu Apr 7 15:15:13 2005 -0700

	    3
	EOF
	git log -1 -g other@{u}@{now} >actual &&
	test_cmp expect actual

ok 26 - log -g other@{u}@{now}

expecting success of 1507.27 '@{reflog}-parsing does not look beyond colon': 
	echo content >@{yesterday} &&
	git add @{yesterday} &&
	git commit -m "funny reflog file" &&
	git hash-object @{yesterday} >expect &&
	git rev-parse HEAD:@{yesterday} >actual

[detached HEAD eae0df2] funny reflog file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 @{yesterday}
ok 27 - @{reflog}-parsing does not look beyond colon

expecting success of 1507.28 '@{upstream}-parsing does not look beyond colon': 
	echo content >@{upstream} &&
	git add @{upstream} &&
	git commit -m "funny upstream file" &&
	git hash-object @{upstream} >expect &&
	git rev-parse HEAD:@{upstream} >actual

[detached HEAD c358789] funny upstream file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 @{upstream}
ok 28 - @{upstream}-parsing does not look beyond colon

# passed all 28 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1508-at-combinations.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1508-at-combinations/.git/
expecting success of 1508.1 'setup': 
	test_commit main-one &&
	test_commit main-two &&
	git checkout -b upstream-branch &&
	test_commit upstream-one &&
	test_commit upstream-two &&
	if test_have_prereq !MINGW
	then
		git checkout -b @/at-test
	fi &&
	git checkout -b @@/at-test &&
	git checkout -b @at-test &&
	git checkout -b old-branch &&
	test_commit old-one &&
	test_commit old-two &&
	git checkout -b new-branch &&
	test_commit new-one &&
	test_commit new-two &&
	git branch -u main old-branch &&
	git branch -u upstream-branch new-branch

[main (root-commit) 1b49f74] main-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-one.t
[main 6d5691d] main-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-two.t
Switched to a new branch 'upstream-branch'
[upstream-branch 6d93ee3] upstream-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream-one.t
[upstream-branch 2bb3c5b] upstream-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream-two.t
Switched to a new branch '@/at-test'
Switched to a new branch '@@/at-test'
Switched to a new branch '@at-test'
Switched to a new branch 'old-branch'
[old-branch a935743] old-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old-one.t
[old-branch 2c577ae] old-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old-two.t
Switched to a new branch 'new-branch'
[new-branch d3599bb] new-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-one.t
[new-branch 8a88a27] new-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-two.t
branch 'old-branch' set up to track 'main'.
branch 'new-branch' set up to track 'upstream-branch'.
ok 1 - setup

expecting success of 1508.2 'HEAD = refs/heads/new-branch': 
		echo 'refs/heads/new-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s 'HEAD' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD' >actual
		else
			git cat-file -p 'HEAD' >actual
		fi &&
		test_cmp expect actual
	
ok 2 - HEAD = refs/heads/new-branch

expecting success of 1508.3 '@{1} = new-one': 
		echo 'new-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{1}' >actual
		else
			git cat-file -p '@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 3 - @{1} = new-one

expecting success of 1508.4 'HEAD@{1} = new-one': 
		echo 'new-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s 'HEAD@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD@{1}' >actual
		else
			git cat-file -p 'HEAD@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 4 - HEAD@{1} = new-one

expecting success of 1508.5 '@{now} = new-two': 
		echo 'new-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{now}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{now}' >actual
		else
			git cat-file -p '@{now}' >actual
		fi &&
		test_cmp expect actual
	
ok 5 - @{now} = new-two

expecting success of 1508.6 'HEAD@{now} = new-two': 
		echo 'new-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s 'HEAD@{now}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD@{now}' >actual
		else
			git cat-file -p 'HEAD@{now}' >actual
		fi &&
		test_cmp expect actual
	
ok 6 - HEAD@{now} = new-two

expecting success of 1508.7 '@{-1} = refs/heads/old-branch': 
		echo 'refs/heads/old-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@{-1}' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{-1}' >actual
		else
			git cat-file -p '@{-1}' >actual
		fi &&
		test_cmp expect actual
	
ok 7 - @{-1} = refs/heads/old-branch

expecting success of 1508.8 '@{-1}@{0} = old-two': 
		echo 'old-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{-1}@{0}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{-1}@{0}' >actual
		else
			git cat-file -p '@{-1}@{0}' >actual
		fi &&
		test_cmp expect actual
	
ok 8 - @{-1}@{0} = old-two

expecting success of 1508.9 '@{-1}@{1} = old-one': 
		echo 'old-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{-1}@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{-1}@{1}' >actual
		else
			git cat-file -p '@{-1}@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 9 - @{-1}@{1} = old-one

expecting success of 1508.10 '@{u} = refs/heads/upstream-branch': 
		echo 'refs/heads/upstream-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@{u}' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{u}' >actual
		else
			git cat-file -p '@{u}' >actual
		fi &&
		test_cmp expect actual
	
ok 10 - @{u} = refs/heads/upstream-branch

expecting success of 1508.11 'HEAD@{u} = refs/heads/upstream-branch': 
		echo 'refs/heads/upstream-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s 'HEAD@{u}' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD@{u}' >actual
		else
			git cat-file -p 'HEAD@{u}' >actual
		fi &&
		test_cmp expect actual
	
ok 11 - HEAD@{u} = refs/heads/upstream-branch

expecting success of 1508.12 '@{u}@{1} = upstream-one': 
		echo 'upstream-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{u}@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{u}@{1}' >actual
		else
			git cat-file -p '@{u}@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 12 - @{u}@{1} = upstream-one

expecting success of 1508.13 '@{-1}@{u} = refs/heads/main': 
		echo 'refs/heads/main' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@{-1}@{u}' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{-1}@{u}' >actual
		else
			git cat-file -p '@{-1}@{u}' >actual
		fi &&
		test_cmp expect actual
	
ok 13 - @{-1}@{u} = refs/heads/main

expecting success of 1508.14 '@{-1}@{u}@{1} = main-one': 
		echo 'main-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{-1}@{u}@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{-1}@{u}@{1}' >actual
		else
			git cat-file -p '@{-1}@{u}@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 14 - @{-1}@{u}@{1} = main-one

expecting success of 1508.15 '@ = new-two': 
		echo 'new-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@' >actual
		else
			git cat-file -p '@' >actual
		fi &&
		test_cmp expect actual
	
ok 15 - @ = new-two

expecting success of 1508.16 '@@{u} = refs/heads/upstream-branch': 
		echo 'refs/heads/upstream-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@@{u}' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@@{u}' >actual
		else
			git cat-file -p '@@{u}' >actual
		fi &&
		test_cmp expect actual
	
ok 16 - @@{u} = refs/heads/upstream-branch

expecting success of 1508.17 '@@/at-test = refs/heads/@@/at-test': 
		echo 'refs/heads/@@/at-test' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@@/at-test' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@@/at-test' >actual
		else
			git cat-file -p '@@/at-test' >actual
		fi &&
		test_cmp expect actual
	
ok 17 - @@/at-test = refs/heads/@@/at-test

expecting success of 1508.18 '@/at-test = refs/heads/@/at-test': 
		echo 'refs/heads/@/at-test' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@/at-test' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@/at-test' >actual
		else
			git cat-file -p '@/at-test' >actual
		fi &&
		test_cmp expect actual
	
ok 18 - @/at-test = refs/heads/@/at-test

expecting success of 1508.19 '@at-test = refs/heads/@at-test': 
		echo 'refs/heads/@at-test' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s '@at-test' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name '@at-test' >actual
		else
			git cat-file -p '@at-test' >actual
		fi &&
		test_cmp expect actual
	
ok 19 - @at-test = refs/heads/@at-test

expecting success of 1508.20 '@{u}@{-1} is nonsensical': 
		test_must_fail git rev-parse --verify '@{u}@{-1}'
	
fatal: Needed a single revision
ok 20 - @{u}@{-1} is nonsensical

expecting success of 1508.21 '@{0}@{0} is nonsensical': 
		test_must_fail git rev-parse --verify '@{0}@{0}'
	
fatal: Needed a single revision
ok 21 - @{0}@{0} is nonsensical

expecting success of 1508.22 '@{1}@{u} is nonsensical': 
		test_must_fail git rev-parse --verify '@{1}@{u}'
	
fatal: no such branch: '@{1}'
ok 22 - @{1}@{u} is nonsensical

expecting success of 1508.23 'HEAD@{-1} is nonsensical': 
		test_must_fail git rev-parse --verify 'HEAD@{-1}'
	
fatal: Needed a single revision
ok 23 - HEAD@{-1} is nonsensical

expecting success of 1508.24 '@{-1}@{-1} is nonsensical': 
		test_must_fail git rev-parse --verify '@{-1}@{-1}'
	
fatal: Needed a single revision
ok 24 - @{-1}@{-1} is nonsensical

expecting success of 1508.25 'HEAD@{3} = old-two': 
		echo 'old-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s 'HEAD@{3}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD@{3}' >actual
		else
			git cat-file -p 'HEAD@{3}' >actual
		fi &&
		test_cmp expect actual
	
ok 25 - HEAD@{3} = old-two

expecting success of 1508.26 '@{3} is nonsensical': 
		test_must_fail git rev-parse --verify '@{3}'
	
fatal: log for 'new-branch' only has 3 entries
ok 26 - @{3} is nonsensical

expecting success of 1508.27 'switch to old-branch': 
	git checkout old-branch

Switched to branch 'old-branch'
Your branch is ahead of 'main' by 4 commits.
  (use "git push" to publish your local commits)
ok 27 - switch to old-branch

expecting success of 1508.28 'HEAD = refs/heads/old-branch': 
		echo 'refs/heads/old-branch' >expect &&
		if test 'ref' = 'commit'
		then
			git log -1 --format=%s 'HEAD' >actual
		elif test 'ref' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD' >actual
		else
			git cat-file -p 'HEAD' >actual
		fi &&
		test_cmp expect actual
	
ok 28 - HEAD = refs/heads/old-branch

expecting success of 1508.29 'HEAD@{1} = new-two': 
		echo 'new-two' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s 'HEAD@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name 'HEAD@{1}' >actual
		else
			git cat-file -p 'HEAD@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 29 - HEAD@{1} = new-two

expecting success of 1508.30 '@{1} = old-one': 
		echo 'old-one' >expect &&
		if test 'commit' = 'commit'
		then
			git log -1 --format=%s '@{1}' >actual
		elif test 'commit' = 'ref'
		then
			git rev-parse --symbolic-full-name '@{1}' >actual
		else
			git cat-file -p '@{1}' >actual
		fi &&
		test_cmp expect actual
	
ok 30 - @{1} = old-one

expecting success of 1508.31 'create path with @': 
	echo content >normal &&
	echo content >fun@ny &&
	git add normal fun@ny &&
	git commit -m "funny path"

[old-branch 7240585] funny path
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fun@ny
 create mode 100644 normal
ok 31 - create path with @

expecting success of 1508.32 '@:normal = content': 
		echo 'content' >expect &&
		if test 'blob' = 'commit'
		then
			git log -1 --format=%s '@:normal' >actual
		elif test 'blob' = 'ref'
		then
			git rev-parse --symbolic-full-name '@:normal' >actual
		else
			git cat-file -p '@:normal' >actual
		fi &&
		test_cmp expect actual
	
ok 32 - @:normal = content

expecting success of 1508.33 '@:fun@ny = content': 
		echo 'content' >expect &&
		if test 'blob' = 'commit'
		then
			git log -1 --format=%s '@:fun@ny' >actual
		elif test 'blob' = 'ref'
		then
			git rev-parse --symbolic-full-name '@:fun@ny' >actual
		else
			git cat-file -p '@:fun@ny' >actual
		fi &&
		test_cmp expect actual
	
ok 33 - @:fun@ny = content

expecting success of 1508.34 '@{1} works with only one reflog entry': 
	git checkout -B newbranch main &&
	git reflog expire --expire=now refs/heads/newbranch &&
	git commit --allow-empty -m "first after expiration" &&
	test_cmp_rev newbranch~ newbranch@{1}

Switched to a new branch 'newbranch'
[newbranch b4bdce6] first after expiration
 Author: A U Thor <author@example.com>
ok 34 - @{1} works with only one reflog entry

expecting success of 1508.35 '@{0} works with empty reflog': 
	git checkout -B newbranch main &&
	git reflog expire --expire=now refs/heads/newbranch &&
	test_cmp_rev newbranch newbranch@{0}

Reset branch 'newbranch'
ok 35 - @{0} works with empty reflog

# passed all 35 test(s)
1..35
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1509-root-work-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1509-root-work-tree/.git/
1..0 # SKIP Test requiring writable / skipped. Read this test if you want to run it
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1511-rev-parse-caret.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1511-rev-parse-caret/.git/
expecting success of 1511.1 'setup': 
	echo blob >a-blob &&
	git tag -a -m blob blob-tag $(git hash-object -w a-blob) &&
	mkdir a-tree &&
	echo moreblobs >a-tree/another-blob &&
	git add . &&
	TREE_SHA1=$(git write-tree) &&
	git tag -a -m tree tree-tag "$TREE_SHA1" &&
	git commit -m Initial &&
	git tag -a -m commit commit-tag &&
	git branch ref &&
	git checkout main &&
	echo modified >>a-blob &&
	git add -u &&
	git commit -m Modified &&
	git branch modref &&
	echo changed! >>a-blob &&
	git add -u &&
	git commit -m !Exp &&
	git branch expref &&
	echo changed >>a-blob &&
	git add -u &&
	git commit -m Changed &&
	echo changed-again >>a-blob &&
	git add -u &&
	git commit -m Changed-again

[main (root-commit) 543146a] Initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a-blob
 create mode 100644 a-tree/another-blob
Already on 'main'
[main 921b76a] Modified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main e6ae3e8] !Exp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main ee9e0b8] Changed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 8f5adaa] Changed-again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 1511.2 'ref^{non-existent}': 
	test_must_fail git rev-parse ref^{non-existent}

fatal: ambiguous argument 'ref^{non-existent}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ref^{non-existent}
ok 2 - ref^{non-existent}

expecting success of 1511.3 'ref^{}': 
	git rev-parse ref >expected &&
	git rev-parse ref^{} >actual &&
	test_cmp expected actual &&
	git rev-parse commit-tag^{} >actual &&
	test_cmp expected actual

ok 3 - ref^{}

expecting success of 1511.4 'ref^{commit}': 
	git rev-parse ref >expected &&
	git rev-parse ref^{commit} >actual &&
	test_cmp expected actual &&
	git rev-parse commit-tag^{commit} >actual &&
	test_cmp expected actual &&
	test_must_fail git rev-parse tree-tag^{commit} &&
	test_must_fail git rev-parse blob-tag^{commit}

error: tree-tag^{commit}: expected commit type, but the object dereferences to tree type
error: tree-tag^{commit}: expected commit type, but the object dereferences to tree type
fatal: ambiguous argument 'tree-tag^{commit}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
tree-tag^{commit}
error: blob-tag^{commit}: expected commit type, but the object dereferences to blob type
error: blob-tag^{commit}: expected commit type, but the object dereferences to blob type
fatal: ambiguous argument 'blob-tag^{commit}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
blob-tag^{commit}
ok 4 - ref^{commit}

expecting success of 1511.5 'ref^{tree}': 
	echo $TREE_SHA1 >expected &&
	git rev-parse ref^{tree} >actual &&
	test_cmp expected actual &&
	git rev-parse commit-tag^{tree} >actual &&
	test_cmp expected actual &&
	git rev-parse tree-tag^{tree} >actual &&
	test_cmp expected actual &&
	test_must_fail git rev-parse blob-tag^{tree}

error: blob-tag^{tree}: expected tree type, but the object dereferences to blob type
error: blob-tag^{tree}: expected tree type, but the object dereferences to blob type
fatal: ambiguous argument 'blob-tag^{tree}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
blob-tag^{tree}
ok 5 - ref^{tree}

expecting success of 1511.6 'ref^{tag}': 
	test_must_fail git rev-parse HEAD^{tag} &&
	git rev-parse commit-tag >expected &&
	git rev-parse commit-tag^{tag} >actual &&
	test_cmp expected actual

error: HEAD^{tag}: expected tag type, but the object dereferences to tree type
error: HEAD^{tag}: expected tag type, but the object dereferences to tree type
fatal: ambiguous argument 'HEAD^{tag}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
HEAD^{tag}
ok 6 - ref^{tag}

expecting success of 1511.7 'ref^{/.}': 
	git rev-parse main >expected &&
	git rev-parse main^{/.} >actual &&
	test_cmp expected actual

ok 7 - ref^{/.}

expecting success of 1511.8 'ref^{/non-existent}': 
	test_must_fail git rev-parse main^{/non-existent}

fatal: ambiguous argument 'main^{/non-existent}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
main^{/non-existent}
ok 8 - ref^{/non-existent}

expecting success of 1511.9 'ref^{/Initial}': 
	git rev-parse ref >expected &&
	git rev-parse main^{/Initial} >actual &&
	test_cmp expected actual

ok 9 - ref^{/Initial}

expecting success of 1511.10 'ref^{/!Exp}': 
	test_must_fail git rev-parse main^{/!Exp}

fatal: ambiguous argument 'main^{/!Exp}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
main^{/!Exp}
ok 10 - ref^{/!Exp}

expecting success of 1511.11 'ref^{/!}': 
	test_must_fail git rev-parse main^{/!}

fatal: ambiguous argument 'main^{/!}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
main^{/!}
ok 11 - ref^{/!}

expecting success of 1511.12 'ref^{/!!Exp}': 
	git rev-parse expref >expected &&
	git rev-parse main^{/!!Exp} >actual &&
	test_cmp expected actual

ok 12 - ref^{/!!Exp}

expecting success of 1511.13 'ref^{/!-}': 
	test_must_fail git rev-parse main^{/!-}

fatal: ambiguous argument 'main^{/!-}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
main^{/!-}
ok 13 - ref^{/!-}

expecting success of 1511.14 'ref^{/!-.}': 
	test_must_fail git rev-parse main^{/!-.}

fatal: ambiguous argument 'main^{/!-.}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
main^{/!-.}
ok 14 - ref^{/!-.}

expecting success of 1511.15 'ref^{/!-non-existent}': 
	git rev-parse main >expected &&
	git rev-parse main^{/!-non-existent} >actual &&
	test_cmp expected actual

ok 15 - ref^{/!-non-existent}

expecting success of 1511.16 'ref^{/!-Changed}': 
	git rev-parse expref >expected &&
	git rev-parse main^{/!-Changed} >actual &&
	test_cmp expected actual

ok 16 - ref^{/!-Changed}

expecting success of 1511.17 'ref^{/!-!Exp}': 
	git rev-parse modref >expected &&
	git rev-parse expref^{/!-!Exp} >actual &&
	test_cmp expected actual

ok 17 - ref^{/!-!Exp}

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1512-rev-parse-disambiguation.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1512-rev-parse-disambiguation/.git/
expecting success of 1512.1 'ambiguous blob output': 
	git init --bare blob.prefix &&
	(
		cd blob.prefix &&

		# Both start with "dead..", under both SHA-1 and SHA-256
		echo brocdnra | git hash-object -w --stdin &&
		echo brigddsv | git hash-object -w --stdin &&

		# Both start with "beef.."
		echo 1agllotbh | git hash-object -w --stdin &&
		echo 1bbfctrkc | git hash-object -w --stdin
	) &&

	test_must_fail git -C blob.prefix rev-parse dead &&
	test_cmp_failed_rev_parse blob.prefix beef <<-\EOF
	error: short object ID beef... is ambiguous
	hint: The candidates are:
	hint:   beef... blob
	hint:   beef... blob
	fatal: ambiguous argument 'beef...': unknown revision or path not in the working tree.
	Use '--' to separate paths from revisions, like this:
	'git <command> [<revision>...] -- [<file>...]'
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1512-rev-parse-disambiguation/blob.prefix/
dead7b21a85f6dc7a24cbc4bb04a008db70bc04a
dead9d36640e108d9eb449ed5966fd0c6d4e6b7f
beefc9be42a87abd92326257a995bf20a24c788f
beef2b0b99a5a8a36d91ea9ecd766af6352eafd9
error: short object ID dead is ambiguous
hint: The candidates are:
hint:   dead7b2 blob
hint:   dead9d3 blob
fatal: ambiguous argument 'dead': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
dead
beef
ok 1 - ambiguous blob output

expecting success of 1512.2 'ambiguous loose bad object parsed as OBJ_BAD': 
	git init --bare blob.bad &&
	(
		cd blob.bad &&

		# Both have the prefix "bad0"
		echo xyzfaowcoh | git hash-object -t bad -w --stdin --literally &&
		echo xyzhjpyvwl | git hash-object -t bad -w --stdin --literally
	) &&

	test_cmp_failed_rev_parse blob.bad bad0 <<-\EOF
	error: short object ID bad0... is ambiguous
	fatal: invalid object type
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1512-rev-parse-disambiguation/blob.bad/
bad0bd4672dee1b4d3b8088534ed5a0362bc8d59
bad0853730d9d114ac789f0ce89039d224bf66c9
ok 2 - ambiguous loose bad object parsed as OBJ_BAD

expecting success of 1512.3 'ambigous zlib corrupt loose blob': 
	git init --bare blob.corrupt &&
	(
		cd blob.corrupt &&

		# Both have the prefix "cafe"
		echo bnkxmdwz | git hash-object -w --stdin &&
		oid=$(echo bmwsjxzi | git hash-object -w --stdin) &&

		oidf=objects/$(test_oid_to_path "$oid") &&
		chmod 755 $oidf &&
		echo broken >$oidf
	) &&

	test_cmp_failed_rev_parse blob.corrupt cafe <<-\EOF
	error: short object ID cafe... is ambiguous
	error: inflate: data stream error (incorrect header check)
	error: unable to unpack cafe... header
	error: inflate: data stream error (incorrect header check)
	error: unable to unpack cafe... header
	hint: The candidates are:
	hint:   cafe... [bad object]
	hint:   cafe... blob
	fatal: ambiguous argument 'cafe...': unknown revision or path not in the working tree.
	Use '--' to separate paths from revisions, like this:
	'git <command> [<revision>...] -- [<file>...]'
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1512-rev-parse-disambiguation/blob.corrupt/
cafe3f2e27174acdf9aa3a394d73714cdcf533d9
cafe
ok 3 - ambigous zlib corrupt loose blob

checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
expecting success of 1512.4 'blob and tree': 
	test_tick &&
	(
		test_write_lines 0 1 2 3 4 5 6 7 8 9 &&
		echo &&
		echo b1rwzyc3
	) >a0blgqsjc &&

	# create one blob 0000000000b36
	git add a0blgqsjc &&

	# create one tree 0000000000cdc
	git write-tree

0000000000cdcf04beb2fab69e65622616294984
ok 4 - blob and tree

expecting success of 1512.5 'warn ambiguity when no candidate matches type hint': 
	test_must_fail git rev-parse --verify 000000000^{commit} 2>actual &&
	test_i18ngrep "short object ID 000000000 is ambiguous" actual

error: short object ID 000000000 is ambiguous
ok 5 - warn ambiguity when no candidate matches type hint

expecting success of 1512.6 'disambiguate tree-ish': 
	# feed tree-ish in an unambiguous way
	git rev-parse --verify 0000000000cdc:a0blgqsjc &&

	# ambiguous at the object name level, but there is only one
	# such tree-ish (the other is a blob)
	git rev-parse --verify 000000000:a0blgqsjc

0000000000b36b6aa7ea4b75318ed078f55505c3
0000000000b36b6aa7ea4b75318ed078f55505c3
ok 6 - disambiguate tree-ish

expecting success of 1512.7 'disambiguate blob': 
	sed -e "s/|$//" >patch <<-EOF &&
	diff --git a/frotz b/frotz
	index 000000000..ffffff 100644
	--- a/frotz
	+++ b/frotz
	@@ -10,3 +10,4 @@
	 9
	 |
	 b1rwzyc3
	+irwry
	EOF
	(
		GIT_INDEX_FILE=frotz &&
		export GIT_INDEX_FILE &&
		git apply --build-fake-ancestor frotz patch &&
		git cat-file blob :frotz >actual
	) &&
	test_cmp a0blgqsjc actual

ok 7 - disambiguate blob

expecting success of 1512.8 'disambiguate tree': 
	commit=$(echo "d7xm" | git commit-tree 000000000) &&
	# this commit is fffff2e and not ambiguous with the 00000* objects
	test $(git rev-parse $commit^{tree}) = $(git rev-parse 0000000000cdc)

ok 8 - disambiguate tree

expecting success of 1512.9 'first commit': 
	# create one commit 0000000000e4f
	git commit -m a2onsxbvj

[main (root-commit) 0000000000e] a2onsxbvj
 Author: A U Thor <author@example.com>
 1 file changed, 12 insertions(+)
 create mode 100644 a0blgqsjc
ok 9 - first commit

expecting success of 1512.10 'disambiguate commit-ish': 
	# feed commit-ish in an unambiguous way
	git rev-parse --verify 0000000000e4f^{commit} &&

	# ambiguous at the object name level, but there is only one
	# such commit (the others are tree and blob)
	git rev-parse --verify 000000000^{commit} &&

	# likewise
	git rev-parse --verify 000000000^0

0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
ok 10 - disambiguate commit-ish

expecting success of 1512.11 'disambiguate commit': 
	commit=$(echo "hoaxj" | git commit-tree 0000000000cdc -p 000000000) &&
	# this commit is ffffffd8 and not ambiguous with the 00000* objects
	test $(git rev-parse $commit^) = $(git rev-parse 0000000000e4f)

ok 11 - disambiguate commit

expecting success of 1512.12 'log name1..name2 takes only commit-ishes on both ends': 
	# These are underspecified from the prefix-length point of view
	# to disambiguate the commit with other objects, but there is only
	# one commit that has 00000* prefix at this point.
	git log 000000000..000000000 &&
	git log ..000000000 &&
	git log 000000000.. &&
	git log 000000000...000000000 &&
	git log ...000000000 &&
	git log 000000000...

ok 12 - log name1..name2 takes only commit-ishes on both ends

expecting success of 1512.13 'rev-parse name1..name2 takes only commit-ishes on both ends': 
	# Likewise.
	git rev-parse 000000000..000000000 &&
	git rev-parse ..000000000 &&
	git rev-parse 000000000..

0000000000e4f9fbd19cf1e932319e5ad0d1d00b
^0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
^0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
^0000000000e4f9fbd19cf1e932319e5ad0d1d00b
ok 13 - rev-parse name1..name2 takes only commit-ishes on both ends

expecting success of 1512.14 'git log takes only commit-ish': 
	# Likewise.
	git log 000000000

commit 0000000000e4f9fbd19cf1e932319e5ad0d1d00b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    a2onsxbvj
ok 14 - git log takes only commit-ish

expecting success of 1512.15 'git reset takes only commit-ish': 
	# Likewise.
	git reset 000000000

ok 15 - git reset takes only commit-ish

expecting success of 1512.16 'first tag': 
	# create one tag 0000000000f8f
	git tag -a -m j7cp83um v1.0.0

ok 16 - first tag

checking known breakage of 1512.17 'two semi-ambiguous commit-ish': 
	# At this point, we have a tag 0000000000f8f that points
	# at a commit 0000000000e4f, and a tree and a blob that
	# share 0000000000 prefix with these tag and commit.
	#
	# Once the parser becomes ultra-smart, it could notice that
	# 0000000000 before ^{commit} name many different objects, but
	# that only two (HEAD and v1.0.0 tag) can be peeled to commit,
	# and that peeling them down to commit yield the same commit
	# without ambiguity.
	git rev-parse --verify 0000000000^{commit} &&

	# likewise
	git log 0000000000..0000000000 &&
	git log ..0000000000 &&
	git log 0000000000.. &&
	git log 0000000000...0000000000 &&
	git log ...0000000000 &&
	git log 0000000000...

error: short object ID 0000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f tag 2005-04-07 - v1.0.0
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
fatal: Needed a single revision
not ok 17 - two semi-ambiguous commit-ish # TODO known breakage

checking known breakage of 1512.18 'three semi-ambiguous tree-ish': 
	# Likewise for tree-ish.  HEAD, v1.0.0 and HEAD^{tree} share
	# the prefix but peeling them to tree yields the same thing
	git rev-parse --verify 0000000000^{tree}

error: short object ID 0000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f tag 2005-04-07 - v1.0.0
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000000c tree
fatal: Needed a single revision
not ok 18 - three semi-ambiguous tree-ish # TODO known breakage

expecting success of 1512.19 'parse describe name': 
	# feed an unambiguous describe name
	git rev-parse --verify v1.0.0-0-g0000000000e4f &&

	# ambiguous at the object name level, but there is only one
	# such commit (others are blob, tree and tag)
	git rev-parse --verify v1.0.0-0-g000000000

0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
ok 19 - parse describe name

expecting success of 1512.20 'more history': 
	# commit 0000000000043
	git mv a0blgqsjc d12cr3h8t &&
	echo h62xsjeu >>d12cr3h8t &&
	git add d12cr3h8t &&

	test_tick &&
	git commit -m czy8f73t &&

	# commit 00000000008ec
	git mv d12cr3h8t j000jmpzn &&
	echo j08bekfvt >>j000jmpzn &&
	git add j000jmpzn &&

	test_tick &&
	git commit -m ioiley5o &&

	# commit 0000000005b0
	git checkout v1.0.0^0 &&
	git mv a0blgqsjc f5518nwu &&

	test_write_lines h62xsjeu j08bekfvt kg7xflhm >>f5518nwu &&
	git add f5518nwu &&

	test_tick &&
	git commit -m b3wettvi &&
	side=$(git rev-parse HEAD) &&

	# commit 000000000066
	git checkout main &&

	# If you use recursive, merge will fail and you will need to
	# clean up a0blgqsjc as well.  If you use resolve, merge will
	# succeed.
	test_might_fail git merge --no-commit -s recursive $side &&
	git rm -f f5518nwu j000jmpzn &&

	test_might_fail git rm -f a0blgqsjc &&
	(
		git cat-file blob $side:f5518nwu &&
		echo j3l0i9s6
	) >ab2gs879 &&
	git add ab2gs879 &&

	test_tick &&
	git commit -m ad2uee


[main 00000000000] czy8f73t
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename a0blgqsjc => d12cr3h8t (76%)
[main 00000000008] ioiley5o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename d12cr3h8t => j000jmpzn (79%)
Note: switching to 'v1.0.0^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0000000000e a2onsxbvj
[detached HEAD 0000000005] b3wettvi
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 rename a0blgqsjc => f5518nwu (51%)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0000000005 b3wettvi

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 0000000005

Switched to branch 'main'
Auto-merging a0blgqsjc
CONFLICT (rename/rename): a0blgqsjc renamed to j000jmpzn in HEAD and to f5518nwu in 0000000005b0d85f595e1a98533157ea161798da.
Automatic merge failed; fix conflicts and then commit the result.
rm 'f5518nwu'
rm 'j000jmpzn'
rm 'a0blgqsjc'
[main 00000000006] ad2uee
 Author: A U Thor <author@example.com>
ok 20 - more history

checking known breakage of 1512.21 'parse describe name taking advantage of generation': 
	# ambiguous at the object name level, but there is only one
	# such commit at generation 0
	git rev-parse --verify v1.0.0-0-g000000000 &&

	# likewise for generation 2 and 4
	git rev-parse --verify v1.0.0-2-g000000000 &&
	git rev-parse --verify v1.0.0-4-g000000000

fatal: Needed a single revision
not ok 21 - parse describe name taking advantage of generation # TODO known breakage

expecting success of 1512.22 'parse describe name not ignoring ambiguity': 
	# ambiguous at the object name level, and there are two such
	# commits at generation 1
	test_must_fail git rev-parse --verify v1.0.0-1-g000000000

fatal: Needed a single revision
ok 22 - parse describe name not ignoring ambiguity

expecting success of 1512.23 'ambiguous commit-ish': 
	# Now there are many commits that begin with the
	# common prefix, none of these should pick one at
	# random.  They all should result in ambiguity errors.
	test_must_fail git rev-parse --verify 00000000^{commit} &&

	# likewise
	test_must_fail git log 000000000..000000000 &&
	test_must_fail git log ..000000000 &&
	test_must_fail git log 000000000.. &&
	test_must_fail git log 000000000...000000000 &&
	test_must_fail git log ...000000000 &&
	test_must_fail git log 000000000...

error: short object ID 00000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: Needed a single revision
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '000000000..000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '..000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '000000000..': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '000000000...000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '...000000000': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: short object ID 000000000 is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
fatal: ambiguous argument '000000000...': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 23 - ambiguous commit-ish

expecting success of 1512.24 'ambiguous tags peel to treeish': 
	test_must_fail git rev-parse 0000000000f^{tree}

error: short object ID 0000000000f is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   0000000000fd tree
fatal: ambiguous argument '0000000000f^{tree}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
0000000000f^{tree}
ok 24 - ambiguous tags peel to treeish

expecting success of 1512.25 'rev-parse --disambiguate': 
	# The test creates 16 objects that share the prefix and two
	# commits created by commit-tree in earlier tests share a
	# different prefix.
	git rev-parse --disambiguate=000000000 >actual &&
	test_line_count = 16 actual &&
	test "$(sed -e "s/^\(.........\).*/\1/" actual | sort -u)" = 000000000

ok 25 - rev-parse --disambiguate

expecting success of 1512.26 'rev-parse --disambiguate drops duplicates': 
	git rev-parse --disambiguate=000000000 >expect &&
	git pack-objects .git/objects/pack/pack <expect &&
	git rev-parse --disambiguate=000000000 >actual &&
	test_cmp expect actual

bdfb78b16a1cd3c3b1ebf4cca29330c92a46fc43
ok 26 - rev-parse --disambiguate drops duplicates

expecting success of 1512.27 'ambiguous 40-hex ref': 
	TREE=$(git mktree </dev/null) &&
	REF=$(git rev-parse HEAD) &&
	VAL=$(git commit-tree $TREE </dev/null) &&
	git update-ref refs/heads/$REF $VAL &&
	test $(git rev-parse $REF 2>err) = $REF &&
	grep "refname.*${REF}.*ambiguous" err

warning: refname '0000000000663a70a94c2b280b575855256220fa' is ambiguous.
ok 27 - ambiguous 40-hex ref

expecting success of 1512.28 'ambiguous short sha1 ref': 
	TREE=$(git mktree </dev/null) &&
	REF=$(git rev-parse --short HEAD) &&
	VAL=$(git commit-tree $TREE </dev/null) &&
	git update-ref refs/heads/$REF $VAL &&
	test $(git rev-parse $REF 2>err) = $VAL &&
	grep "refname.*${REF}.*ambiguous" err

warning: refname '00000000006' is ambiguous.
ok 28 - ambiguous short sha1 ref

expecting success of 1512.29 'ambiguity errors are not repeated (raw)': 
	test_must_fail git rev-parse 00000 2>stderr &&
	grep "is ambiguous" stderr >errors &&
	test_line_count = 1 errors

00000
ok 29 - ambiguity errors are not repeated (raw)

expecting success of 1512.30 'ambiguity errors are not repeated (treeish)': 
	test_must_fail git rev-parse 00000:foo 2>stderr &&
	grep "is ambiguous" stderr >errors &&
	test_line_count = 1 errors

00000:foo
ok 30 - ambiguity errors are not repeated (treeish)

expecting success of 1512.31 'ambiguity errors are not repeated (peel)': 
	test_must_fail git rev-parse 00000^{commit} 2>stderr &&
	grep "is ambiguous" stderr >errors &&
	test_line_count = 1 errors

00000^{commit}
ok 31 - ambiguity errors are not repeated (peel)

expecting success of 1512.32 'ambiguity hints': 
	test_must_fail git rev-parse 000000000 2>stderr &&
	grep ^hint: stderr >hints &&
	# 16 candidates, plus one intro line
	test_line_count = 17 hints

000000000
ok 32 - ambiguity hints

expecting success of 1512.33 'ambiguity hints respect type': 
	test_must_fail git rev-parse 000000000^{commit} 2>stderr &&
	grep ^hint: stderr >hints &&
	# 5 commits, 1 tag (which is a committish), plus intro line
	test_line_count = 7 hints

000000000^{commit}
ok 33 - ambiguity hints respect type

expecting success of 1512.34 'failed type-selector still shows hint': 
	# these two blobs share the same prefix "ee3d", but neither
	# will pass for a commit
	echo 851 | git hash-object --stdin -w &&
	echo 872 | git hash-object --stdin -w &&
	test_must_fail git rev-parse ee3d^{commit} 2>stderr &&
	grep ^hint: stderr >hints &&
	test_line_count = 3 hints

ee3de9906b5e9a4a369e91cba4235487a7e10351
ee3d8abaa95a7395b373892b2593de2f426814e2
ee3d^{commit}
ok 34 - failed type-selector still shows hint

expecting success of 1512.35 'core.disambiguate config can prefer types': 
	# ambiguous between tree and tag
	sha1=0000000000f &&
	test_must_fail git rev-parse $sha1 &&
	git rev-parse $sha1^{commit} &&
	git -c core.disambiguate=committish rev-parse $sha1

error: short object ID 0000000000f is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   0000000000fd tree
hint:   0000000000f2 blob
fatal: ambiguous argument '0000000000f': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
0000000000f
0000000000e4f9fbd19cf1e932319e5ad0d1d00b
0000000000f8f5507ab27a0d7bd3c75c0f64ffe0
ok 35 - core.disambiguate config can prefer types

expecting success of 1512.36 'core.disambiguate does not override context': 
	# treeish ambiguous between tag and tree
	test_must_fail \
		git -c core.disambiguate=committish rev-parse $sha1^{tree}

error: short object ID 0000000000f is ambiguous
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   0000000000fd tree
fatal: ambiguous argument '0000000000f^{tree}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
0000000000f^{tree}
ok 36 - core.disambiguate does not override context

expecting success of 1512.37 'ambiguous commits are printed by type first, then hash order': 
	test_must_fail git rev-parse 0000 2>stderr &&
	grep ^hint: stderr >hints &&
	grep 0000 hints >objects &&
	cat >expected <<-\EOF &&
	tag
	commit
	tree
	blob
	EOF
	awk "{print \$3}" <objects >objects.types &&
	uniq <objects.types >objects.types.uniq &&
	test_cmp expected objects.types.uniq &&
	for type in tag commit tree blob
	do
		grep $type objects >$type.objects &&
		sort $type.objects >$type.objects.sorted &&
		test_cmp $type.objects.sorted $type.objects || return 1
	done

0000
ok 37 - ambiguous commits are printed by type first, then hash order

expecting success of 1512.38 'cat-file --batch and --batch-check show ambiguous': 
	echo "0000 ambiguous" >expect &&
	echo 0000 | git cat-file --batch-check >actual 2>err &&
	test_cmp expect actual &&
	test_i18ngrep hint: err &&
	echo 0000 | git cat-file --batch >actual 2>err &&
	test_cmp expect actual &&
	test_i18ngrep hint: err

hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
hint:   000000000002 tree
hint:   00000000005 tree
hint:   00000000009 tree
hint:   0000000000c tree
hint:   0000000000fd tree
hint:   00000000001 blob
hint:   00000000003 blob
hint:   0000000000a blob
hint:   0000000000b blob
hint:   0000000000f2 blob
hint: The candidates are:
hint:   0000000000f8 tag 2005-04-07 - v1.0.0
hint:   000000000004 commit 2005-04-07 - czy8f73t
hint:   00000000006 commit 2005-04-07 - ad2uee
hint:   00000000008 commit 2005-04-07 - ioiley5o
hint:   0000000000e commit 2005-04-07 - a2onsxbvj
hint:   0000000005 commit 2005-04-07 - b3wettvi
hint:   000000000002 tree
hint:   00000000005 tree
hint:   00000000009 tree
hint:   0000000000c tree
hint:   0000000000fd tree
hint:   00000000001 blob
hint:   00000000003 blob
hint:   0000000000a blob
hint:   0000000000b blob
hint:   0000000000f2 blob
ok 38 - cat-file --batch and --batch-check show ambiguous

# still have 3 known breakage(s)
# passed all remaining 35 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1513-rev-parse-prefix.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1513-rev-parse-prefix/.git/
expecting success of 1513.1 'setup': 
	mkdir -p sub1/sub2 &&
	echo top >top &&
	echo file1 >sub1/file1 &&
	echo file2 >sub1/sub2/file2 &&
	git add top sub1/file1 sub1/sub2/file2 &&
	git commit -m commit

[main (root-commit) 2a70803] commit
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 sub1/file1
 create mode 100644 sub1/sub2/file2
 create mode 100644 top
ok 1 - setup

expecting success of 1513.2 'empty prefix -- file': 
	git rev-parse --prefix "" -- top sub1/file1 >actual &&
	cat <<-\EOF >expected &&
	--
	top
	sub1/file1
	EOF
	test_cmp expected actual

ok 2 - empty prefix -- file

expecting success of 1513.3 'valid prefix -- file': 
	git rev-parse --prefix sub1/ -- file1 sub2/file2 >actual &&
	cat <<-\EOF >expected &&
	--
	sub1/file1
	sub1/sub2/file2
	EOF
	test_cmp expected actual

ok 3 - valid prefix -- file

expecting success of 1513.4 'valid prefix -- ../file': 
	git rev-parse --prefix sub1/ -- ../top sub2/file2 >actual &&
	cat <<-\EOF >expected &&
	--
	sub1/../top
	sub1/sub2/file2
	EOF
	test_cmp expected actual

ok 4 - valid prefix -- ../file

expecting success of 1513.5 'empty prefix HEAD:./path': 
	git rev-parse --prefix "" HEAD:./top >actual &&
	git rev-parse HEAD:top >expected &&
	test_cmp expected actual

ok 5 - empty prefix HEAD:./path

expecting success of 1513.6 'valid prefix HEAD:./path': 
	git rev-parse --prefix sub1/ HEAD:./file1 >actual &&
	git rev-parse HEAD:sub1/file1 >expected &&
	test_cmp expected actual

ok 6 - valid prefix HEAD:./path

expecting success of 1513.7 'valid prefix HEAD:../path': 
	git rev-parse --prefix sub1/ HEAD:../top >actual &&
	git rev-parse HEAD:top >expected &&
	test_cmp expected actual

ok 7 - valid prefix HEAD:../path

expecting success of 1513.8 'prefix ignored with HEAD:top': 
	git rev-parse --prefix sub1/ HEAD:top >actual &&
	git rev-parse HEAD:top >expected &&
	test_cmp expected actual

ok 8 - prefix ignored with HEAD:top

expecting success of 1513.9 'disambiguate path with valid prefix': 
	git rev-parse --prefix sub1/ file1 >actual &&
	cat <<-\EOF >expected &&
	sub1/file1
	EOF
	test_cmp expected actual

ok 9 - disambiguate path with valid prefix

expecting success of 1513.10 'file and refs with prefix': 
	git rev-parse --prefix sub1/ main file1 >actual &&
	cat <<-EOF >expected &&
	$(git rev-parse main)
	sub1/file1
	EOF
	test_cmp expected actual

ok 10 - file and refs with prefix

expecting success of 1513.11 'two-levels deep': 
	git rev-parse --prefix sub1/sub2/ -- file2 >actual &&
	cat <<-\EOF >expected &&
	--
	sub1/sub2/file2
	EOF
	test_cmp expected actual

ok 11 - two-levels deep

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1450-fsck.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/.git/
expecting success of 1450.1 'setup': 
	git config gc.auto 0 &&
	git config i18n.commitencoding ISO-8859-1 &&
	test_commit A fileA one &&
	git config --unset i18n.commitencoding &&
	git checkout HEAD^0 &&
	test_commit B fileB two &&
	git tag -d A B &&
	git reflog expire --expire=now --all

[master (root-commit) 1347563] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileA
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1347563 A
[detached HEAD c9145d6] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileB
Deleted tag 'A' (was 1347563)
Deleted tag 'B' (was c9145d6)
ok 1 - setup

expecting success of 1450.2 'loose objects borrowed from alternate are not missing': 
	mkdir another &&
	(
		cd another &&
		git init &&
		echo ../../../.git/objects >.git/objects/info/alternates &&
		test_commit C fileC one &&
		git fsck --no-dangling >../actual 2>&1
	) &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/another/.git/
[master (root-commit) 1aac250] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileC
ok 2 - loose objects borrowed from alternate are not missing

expecting success of 1450.3 'HEAD is part of refs, valid objects appear valid': 
	git fsck >actual 2>&1 &&
	test_must_be_empty actual

ok 3 - HEAD is part of refs, valid objects appear valid

expecting success of 1450.4 'object with hash mismatch': 
	git init --bare hash-mismatch &&
	(
		cd hash-mismatch &&

		oid=$(echo blob | git hash-object -w --stdin) &&
		oldoid=$oid &&
		old=$(test_oid_to_path "$oid") &&
		new=$(dirname $old)/$(test_oid ff_2) &&
		oid="$(dirname $new)$(basename $new)" &&

		mv objects/$old objects/$new &&
		git update-index --add --cacheinfo 100644 $oid foo &&
		tree=$(git write-tree) &&
		cmt=$(echo bogus | git commit-tree $tree) &&
		git update-ref refs/heads/bogus $cmt &&

		test_must_fail git fsck 2>out &&
		grep "$oldoid: hash-path mismatch, found at: .*$new" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/hash-mismatch/
missing blob 63ffffffffffffffffffffffffffffffffffffff
error: 63499e4ea8e096b831515ceb1d5a7593e4d87ae5: hash-path mismatch, found at: ./objects/63/ffffffffffffffffffffffffffffffffffffff
ok 4 - object with hash mismatch

expecting success of 1450.5 'object with hash and type mismatch': 
	git init --bare hash-type-mismatch &&
	(
		cd hash-type-mismatch &&

		oid=$(echo blob | git hash-object -w --stdin -t garbage --literally) &&
		oldoid=$oid &&
		old=$(test_oid_to_path "$oid") &&
		new=$(dirname $old)/$(test_oid ff_2) &&
		oid="$(dirname $new)$(basename $new)" &&

		mv objects/$old objects/$new &&
		git update-index --add --cacheinfo 100644 $oid foo &&
		tree=$(git write-tree) &&
		cmt=$(echo bogus | git commit-tree $tree) &&
		git update-ref refs/heads/bogus $cmt &&


		test_must_fail git fsck 2>out &&
		grep "^error: $oldoid: hash-path mismatch, found at: .*$new" out &&
		grep "^error: $oldoid: object is of unknown type 'garbage'" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/hash-type-mismatch/
missing blob 12ffffffffffffffffffffffffffffffffffffff
error: 121824d811d9a92c73a9c42ea7ee683e758723ce: hash-path mismatch, found at: ./objects/12/ffffffffffffffffffffffffffffffffffffff
error: 121824d811d9a92c73a9c42ea7ee683e758723ce: object is of unknown type 'garbage': ./objects/12/ffffffffffffffffffffffffffffffffffffff
ok 5 - object with hash and type mismatch

expecting success of 1450.6 'zlib corrupt loose object output ': 
	git init --bare corrupt-loose-output &&
	(
		cd corrupt-loose-output &&
		oid=$(git hash-object -w --stdin --literally </dev/null) &&
		oidf=objects/$(test_oid_to_path "$oid") &&
		chmod +w $oidf &&
		echo extra garbage >>$oidf &&

		cat >expect.error <<-EOF &&
		error: garbage at end of loose object '$oid'
		error: unable to unpack contents of ./$oidf
		error: $oid: object corrupt or missing: ./$oidf
		EOF
		test_must_fail git fsck 2>actual &&
		grep ^error: actual >error &&
		test_cmp expect.error error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/corrupt-loose-output/
ok 6 - zlib corrupt loose object output 

expecting success of 1450.7 'branch pointing to non-commit': 
	git rev-parse HEAD^{tree} >.git/refs/heads/invalid &&
	test_when_finished "git update-ref -d refs/heads/invalid" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "not a commit" out

error: refs/heads/invalid: not a commit
ok 7 - branch pointing to non-commit

expecting success of 1450.8 'HEAD link pointing at a funny object': 
	test_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&
	mv .git/HEAD .git/SAVED_HEAD &&
	echo $ZERO_OID >.git/HEAD &&
	# avoid corrupt/broken HEAD from interfering with repo discovery
	test_must_fail env GIT_DIR=.git git fsck 2>out &&
	test_i18ngrep "detached HEAD points" out

dangling commit c9145d6720f85544cc4bb6009a2e541660aa156b
error: HEAD: detached HEAD points at nothing
ok 8 - HEAD link pointing at a funny object

expecting success of 1450.9 'HEAD link pointing at a funny place': 
	test_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&
	mv .git/HEAD .git/SAVED_HEAD &&
	echo "ref: refs/funny/place" >.git/HEAD &&
	# avoid corrupt/broken HEAD from interfering with repo discovery
	test_must_fail env GIT_DIR=.git git fsck 2>out &&
	test_i18ngrep "HEAD points to something strange" out

dangling commit c9145d6720f85544cc4bb6009a2e541660aa156b
error: HEAD points to something strange (refs/funny/place)
ok 9 - HEAD link pointing at a funny place

expecting success of 1450.10 'HEAD link pointing at a funny object (from different wt)': 
	test_when_finished "mv .git/SAVED_HEAD .git/HEAD" &&
	test_when_finished "rm -rf .git/worktrees wt" &&
	git worktree add wt &&
	mv .git/HEAD .git/SAVED_HEAD &&
	echo $ZERO_OID >.git/HEAD &&
	# avoid corrupt/broken HEAD from interfering with repo discovery
	test_must_fail git -C wt fsck 2>out &&
	test_i18ngrep "main-worktree/HEAD: detached HEAD points" out

Preparing worktree (new branch 'wt')
HEAD is now at c9145d6 B
error: main-worktree/HEAD: detached HEAD points at nothing
ok 10 - HEAD link pointing at a funny object (from different wt)

expecting success of 1450.11 'other worktree HEAD link pointing at a funny object': 
	test_when_finished "rm -rf .git/worktrees other" &&
	git worktree add other &&
	echo $ZERO_OID >.git/worktrees/other/HEAD &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "worktrees/other/HEAD: detached HEAD points" out

Preparing worktree (new branch 'other')
HEAD is now at c9145d6 B
error: worktrees/other/HEAD: detached HEAD points at nothing
ok 11 - other worktree HEAD link pointing at a funny object

expecting success of 1450.12 'other worktree HEAD link pointing at missing object': 
	test_when_finished "rm -rf .git/worktrees other" &&
	git worktree add other &&
	echo "Contents missing from repo" | git hash-object --stdin >.git/worktrees/other/HEAD &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "worktrees/other/HEAD: invalid sha1 pointer" out

Preparing worktree (checking out 'other')
HEAD is now at c9145d6 B
error: worktrees/other/HEAD: invalid sha1 pointer 45ea5fdbd862b3f0e413a6c2c951347efa0bb114
ok 12 - other worktree HEAD link pointing at missing object

expecting success of 1450.13 'other worktree HEAD link pointing at a funny place': 
	test_when_finished "rm -rf .git/worktrees other" &&
	git worktree add other &&
	echo "ref: refs/funny/place" >.git/worktrees/other/HEAD &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "worktrees/other/HEAD points to something strange" out

Preparing worktree (checking out 'other')
HEAD is now at c9145d6 B
error: worktrees/other/HEAD points to something strange (refs/funny/place)
ok 13 - other worktree HEAD link pointing at a funny place

expecting success of 1450.14 'commit with multiple signatures is okay': 
	git cat-file commit HEAD >basis &&
	cat >sigs <<-EOF &&
	gpgsig -----BEGIN PGP SIGNATURE-----
	  VGhpcyBpcyBub3QgcmVhbGx5IGEgc2lnbmF0dXJlLg==
	  -----END PGP SIGNATURE-----
	gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
	  VGhpcyBpcyBub3QgcmVhbGx5IGEgc2lnbmF0dXJlLg==
	  -----END PGP SIGNATURE-----
	EOF
	sed -e "/^committer/q" basis >okay &&
	cat sigs >>okay &&
	echo >>okay &&
	sed -e "1,/^$/d" basis >>okay &&
	cat okay &&
	new=$(git hash-object -t commit -w --stdin <okay) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	git fsck 2>out &&
	cat out &&
	! grep "commit $new" out

tree c9176b0dd1a95c80ad8de21784b1eeffd3681f49
parent 134756353796a5439d93586be27999eea3807a34
author A U Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
  VGhpcyBpcyBub3QgcmVhbGx5IGEgc2lnbmF0dXJlLg==
  -----END PGP SIGNATURE-----
gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
  VGhpcyBpcyBub3QgcmVhbGx5IGEgc2lnbmF0dXJlLg==
  -----END PGP SIGNATURE-----

B
ok 14 - commit with multiple signatures is okay

expecting success of 1450.15 'email without @ is okay': 
	git cat-file commit HEAD >basis &&
	sed "s/@/AT/" basis >okay &&
	new=$(git hash-object -t commit -w --stdin <okay) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	git fsck 2>out &&
	! grep "commit $new" out

ok 15 - email without @ is okay

expecting success of 1450.16 'email with embedded > is not okay': 
	git cat-file commit HEAD >basis &&
	sed "s/@[a-z]/&>/" basis >bad-email &&
	new=$(git hash-object -t commit -w --stdin <bad-email) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new" out

error in commit af421232fcba11d582d625f9041afbe3fccc01d9: missingSpaceBeforeDate: invalid author/committer line - missing space before date
ok 16 - email with embedded > is not okay

expecting success of 1450.17 'missing < email delimiter is reported nicely': 
	git cat-file commit HEAD >basis &&
	sed "s/<//" basis >bad-email-2 &&
	new=$(git hash-object -t commit -w --stdin <bad-email-2) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new.* - bad name" out

error in commit c4b6d356e934be1cc10cb58c734fbcc5fa3a5285: badName: invalid author/committer line - bad name
ok 17 - missing < email delimiter is reported nicely

expecting success of 1450.18 'missing email is reported nicely': 
	git cat-file commit HEAD >basis &&
	sed "s/[a-z]* <[^>]*>//" basis >bad-email-3 &&
	new=$(git hash-object -t commit -w --stdin <bad-email-3) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new.* - missing email" out

error in commit 35319efb0a67194811f8583362d460866d58b499: missingEmail: invalid author/committer line - missing email
ok 18 - missing email is reported nicely

expecting success of 1450.19 '> in name is reported': 
	git cat-file commit HEAD >basis &&
	sed "s/ </> </" basis >bad-email-4 &&
	new=$(git hash-object -t commit -w --stdin <bad-email-4) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new" out

error in commit 301380051321b3e224015eea93b0ebc550c88198: badName: invalid author/committer line - bad name
ok 19 - > in name is reported

expecting success of 1450.20 'integer overflow in timestamps is reported': 
	git cat-file commit HEAD >basis &&
	sed "s/^\\(author .*>\\) [0-9]*/\\1 18446744073709551617/" \
		<basis >bad-timestamp &&
	new=$(git hash-object -t commit -w --stdin <bad-timestamp) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new.*integer overflow" out

error in commit c8453435c3587d0404f88f925c28a5944b73be1a: badDateOverflow: invalid author/committer line - date causes integer overflow
ok 20 - integer overflow in timestamps is reported

expecting success of 1450.21 'commit with NUL in header': 
	git cat-file commit HEAD >basis &&
	sed "s/author ./author Q/" <basis | q_to_nul >commit-NUL-header &&
	new=$(git hash-object -t commit -w --stdin <commit-NUL-header) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $new.*unterminated header: NUL at offset" out

error in commit b70520fa0e6346c648b4013350096f65f49946eb: nulInHeader: unterminated header: NUL at offset 101
ok 21 - commit with NUL in header

expecting success of 1450.22 'tree object with duplicate entries': 
	test_when_finished "for i in \$T; do remove_object \$i; done" &&
	T=$(
		GIT_INDEX_FILE=test-index &&
		export GIT_INDEX_FILE &&
		rm -f test-index &&
		>x &&
		git add x &&
		git rev-parse :x &&
		T=$(git write-tree) &&
		echo $T &&
		(
			git cat-file tree $T &&
			git cat-file tree $T
		) |
		git hash-object -w -t tree --stdin
	) &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in tree .*contains duplicate file entries" out

dangling tree 5805b676e247eb9a8046ad0c4d249cd2fb2513df
dangling tree 7997631de77b8a212b5c3e01eff5e9cf1d3c7580
error in tree 7997631de77b8a212b5c3e01eff5e9cf1d3c7580: duplicateEntries: contains duplicate file entries
ok 22 - tree object with duplicate entries

expecting success of 1450.23 'tree object with duplicate names: x x.1 x/': 
		test_when_finished "remove_object \$blob" &&
		test_when_finished "remove_object \$tree" &&
		test_when_finished "remove_object \$badtree" &&
		blob=$(echo blob | git hash-object -w --stdin) &&
		printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
		tree=$(git mktree <tree) &&
		for name in $names
		do
			case "$name" in
			*/) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
			*)  printf "100644 blob %s\t%s\n" $blob "$name" ;;
			esac
		done >badtree &&
		badtree=$(git mktree <badtree) &&
		test_must_fail git fsck 2>out &&
		test_i18ngrep "$badtree" out &&
		test_i18ngrep "error in tree .*contains duplicate file entries" out
	
dangling tree 26c966b0589aae52be2c311b1ffbdd28e9ba7d67
error in tree 26c966b0589aae52be2c311b1ffbdd28e9ba7d67: duplicateEntries: contains duplicate file entries
error in tree 26c966b0589aae52be2c311b1ffbdd28e9ba7d67: duplicateEntries: contains duplicate file entries
ok 23 - tree object with duplicate names: x x.1 x/

expecting success of 1450.24 'tree object with duplicate names: x x.1.2 x.1/ x/': 
		test_when_finished "remove_object \$blob" &&
		test_when_finished "remove_object \$tree" &&
		test_when_finished "remove_object \$badtree" &&
		blob=$(echo blob | git hash-object -w --stdin) &&
		printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
		tree=$(git mktree <tree) &&
		for name in $names
		do
			case "$name" in
			*/) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
			*)  printf "100644 blob %s\t%s\n" $blob "$name" ;;
			esac
		done >badtree &&
		badtree=$(git mktree <badtree) &&
		test_must_fail git fsck 2>out &&
		test_i18ngrep "$badtree" out &&
		test_i18ngrep "error in tree .*contains duplicate file entries" out
	
dangling tree 464b70bd0f13c75cfbde739fe1ba074454b55bdb
error in tree 464b70bd0f13c75cfbde739fe1ba074454b55bdb: duplicateEntries: contains duplicate file entries
error in tree 464b70bd0f13c75cfbde739fe1ba074454b55bdb: duplicateEntries: contains duplicate file entries
ok 24 - tree object with duplicate names: x x.1.2 x.1/ x/

expecting success of 1450.25 'tree object with duplicate names: x x.1 x.1.2 x/': 
		test_when_finished "remove_object \$blob" &&
		test_when_finished "remove_object \$tree" &&
		test_when_finished "remove_object \$badtree" &&
		blob=$(echo blob | git hash-object -w --stdin) &&
		printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
		tree=$(git mktree <tree) &&
		for name in $names
		do
			case "$name" in
			*/) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
			*)  printf "100644 blob %s\t%s\n" $blob "$name" ;;
			esac
		done >badtree &&
		badtree=$(git mktree <badtree) &&
		test_must_fail git fsck 2>out &&
		test_i18ngrep "$badtree" out &&
		test_i18ngrep "error in tree .*contains duplicate file entries" out
	
dangling tree bfbeecf396ef7aaf4d8c67e3615296a445358420
error in tree bfbeecf396ef7aaf4d8c67e3615296a445358420: duplicateEntries: contains duplicate file entries
error in tree bfbeecf396ef7aaf4d8c67e3615296a445358420: duplicateEntries: contains duplicate file entries
ok 25 - tree object with duplicate names: x x.1 x.1.2 x/

expecting success of 1450.26 'unparseable tree object': 
	test_oid_cache <<-\EOF &&
	junk sha1:twenty-bytes-of-junk
	junk sha256:twenty-bytes-of-junk-twelve-more
	EOF

	test_when_finished "git update-ref -d refs/heads/wrong" &&
	test_when_finished "remove_object \$tree_sha1" &&
	test_when_finished "remove_object \$commit_sha1" &&
	junk=$(test_oid junk) &&
	tree_sha1=$(printf "100644 \0$junk" | git hash-object -t tree --stdin -w --literally) &&
	commit_sha1=$(git commit-tree $tree_sha1) &&
	git update-ref refs/heads/wrong $commit_sha1 &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error: empty filename in tree entry" out &&
	test_i18ngrep "$tree_sha1" out &&
	test_i18ngrep ! "fatal: empty filename in tree entry" out

error: empty filename in tree entry
error: empty filename in tree entry
error: empty filename in tree entry
error in tree b1b45dcb979335e5f09d3b756c4639cab166c243: broken links
error in tree b1b45dcb979335e5f09d3b756c4639cab166c243: badTree: cannot be parsed as a tree
ok 26 - unparseable tree object

expecting success of 1450.27 'tree entry with type mismatch': 
	test_when_finished "remove_object \$blob" &&
	test_when_finished "remove_object \$tree" &&
	test_when_finished "remove_object \$commit" &&
	test_when_finished "git update-ref -d refs/heads/type_mismatch" &&
	blob=$(echo blob | git hash-object -w --stdin) &&
	blob_bin=$(echo $blob | hex2oct) &&
	tree=$(
		printf "40000 dir\0${blob_bin}100644 file\0${blob_bin}" |
		git hash-object -t tree --stdin -w --literally
	) &&
	commit=$(git commit-tree $tree) &&
	git update-ref refs/heads/type_mismatch $commit &&
	test_must_fail git fsck >out 2>&1 &&
	test_i18ngrep "is a blob, not a tree" out &&
	test_i18ngrep ! "dangling blob" out

error: object 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 is a blob, not a tree
error: object 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 is a blob, not a tree
ok 27 - tree entry with type mismatch

expecting success of 1450.28 'tree entry with bogus mode': 
	test_when_finished "remove_object \$blob" &&
	test_when_finished "remove_object \$tree" &&
	blob=$(echo blob | git hash-object -w --stdin) &&
	blob_oct=$(echo $blob | hex2oct) &&
	tree=$(printf "100000 foo\0${blob_oct}" |
	       git hash-object -t tree --stdin -w --literally) &&
	git fsck 2>err &&
	cat >expect <<-EOF &&
	warning in tree $tree: badFilemode: contains bad file modes
	EOF
	test_cmp expect err

dangling tree fa6222e05ba24eb3b839e1bd1298d82db50e5d2c
ok 28 - tree entry with bogus mode

expecting success of 1450.29 'tag pointing to nonexistent': 
	badoid=$(test_oid deadbeef) &&
	cat >invalid-tag <<-EOF &&
	object $badoid
	type commit
	tag invalid
	tagger T A Gger <tagger@example.com> 1234567890 -0000

	This is an invalid tag.
	EOF

	tag=$(git hash-object -t tag -w --stdin <invalid-tag) &&
	test_when_finished "remove_object $tag" &&
	echo $tag >.git/refs/tags/invalid &&
	test_when_finished "git update-ref -d refs/tags/invalid" &&
	test_must_fail git fsck --tags >out &&
	test_i18ngrep "broken link" out

broken link from     tag 5248b3501322f3dd3ac19713bbbe83f70183da53
ok 29 - tag pointing to nonexistent

expecting success of 1450.30 'tag pointing to something else than its type': 
	sha=$(echo blob | git hash-object -w --stdin) &&
	test_when_finished "remove_object $sha" &&
	cat >wrong-tag <<-EOF &&
	object $sha
	type commit
	tag wrong
	tagger T A Gger <tagger@example.com> 1234567890 -0000

	This is an invalid tag.
	EOF

	tag=$(git hash-object -t tag -w --stdin <wrong-tag) &&
	test_when_finished "remove_object $tag" &&
	echo $tag >.git/refs/tags/wrong &&
	test_when_finished "git update-ref -d refs/tags/wrong" &&
	test_must_fail git fsck --tags

error: object 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 is a blob, not a commit
error: bad tag pointer to 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 in 66f6581d549f70e05ca586bc2df5c15a95662c36
error: 66f6581d549f70e05ca586bc2df5c15a95662c36: object could not be parsed: .git/objects/66/f6581d549f70e05ca586bc2df5c15a95662c36
error: object 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 is a blob, not a commit
error: bad tag pointer to 63499e4ea8e096b831515ceb1d5a7593e4d87ae5 in 66f6581d549f70e05ca586bc2df5c15a95662c36
error: refs/tags/wrong: invalid sha1 pointer 66f6581d549f70e05ca586bc2df5c15a95662c36
dangling blob 63499e4ea8e096b831515ceb1d5a7593e4d87ae5
ok 30 - tag pointing to something else than its type

expecting success of 1450.31 'tag with incorrect tag name & missing tagger': 
	sha=$(git rev-parse HEAD) &&
	cat >wrong-tag <<-EOF &&
	object $sha
	type commit
	tag wrong name format

	This is an invalid tag.
	EOF

	tag=$(git hash-object -t tag -w --stdin <wrong-tag) &&
	test_when_finished "remove_object $tag" &&
	echo $tag >.git/refs/tags/wrong &&
	test_when_finished "git update-ref -d refs/tags/wrong" &&
	git fsck --tags 2>out &&

	cat >expect <<-EOF &&
	warning in tag $tag: badTagName: invalid 'tag' name: wrong name format
	warning in tag $tag: missingTaggerEntry: invalid format - expected 'tagger' line
	EOF
	test_cmp expect out

tagged commit c9145d6720f85544cc4bb6009a2e541660aa156b (wrong name format) in 6d73f1b4d41e4fdac4ba717a11e7409876bb75c3
ok 31 - tag with incorrect tag name & missing tagger

expecting success of 1450.32 'tag with bad tagger': 
	sha=$(git rev-parse HEAD) &&
	cat >wrong-tag <<-EOF &&
	object $sha
	type commit
	tag not-quite-wrong
	tagger Bad Tagger Name

	This is an invalid tag.
	EOF

	tag=$(git hash-object --literally -t tag -w --stdin <wrong-tag) &&
	test_when_finished "remove_object $tag" &&
	echo $tag >.git/refs/tags/wrong &&
	test_when_finished "git update-ref -d refs/tags/wrong" &&
	test_must_fail git fsck --tags 2>out &&
	test_i18ngrep "error in tag .*: invalid author/committer" out

error in tag d037dcc834669cc0c5d3416130c899572cb1aedd: missingEmail: invalid author/committer line - missing email
ok 32 - tag with bad tagger

expecting success of 1450.33 'tag with NUL in header': 
	sha=$(git rev-parse HEAD) &&
	q_to_nul >tag-NUL-header <<-EOF &&
	object $sha
	type commit
	tag contains-Q-in-header
	tagger T A Gger <tagger@example.com> 1234567890 -0000

	This is an invalid tag.
	EOF

	tag=$(git hash-object --literally -t tag -w --stdin <tag-NUL-header) &&
	test_when_finished "remove_object $tag" &&
	echo $tag >.git/refs/tags/wrong &&
	test_when_finished "git update-ref -d refs/tags/wrong" &&
	test_must_fail git fsck --tags 2>out &&
	test_i18ngrep "error in tag $tag.*unterminated header: NUL at offset" out

error in tag 6251166df5b0f4b7f840db1a9af555089418c925: nulInHeader: unterminated header: NUL at offset 73
ok 33 - tag with NUL in header

expecting success of 1450.34 'cleaned up': 
	git fsck >actual 2>&1 &&
	test_must_be_empty actual

ok 34 - cleaned up

expecting success of 1450.35 'rev-list --verify-objects': 
	git rev-list --verify-objects --all >/dev/null 2>out &&
	test_must_be_empty out

ok 35 - rev-list --verify-objects

expecting success of 1450.36 'rev-list --verify-objects with bad sha1': 
	sha=$(echo blob | git hash-object -w --stdin) &&
	old=$(test_oid_to_path $sha) &&
	new=$(dirname $old)/$(test_oid ff_2) &&
	sha="$(dirname $new)$(basename $new)" &&
	mv .git/objects/$old .git/objects/$new &&
	test_when_finished "remove_object $sha" &&
	git update-index --add --cacheinfo 100644 $sha foo &&
	test_when_finished "git read-tree -u --reset HEAD" &&
	tree=$(git write-tree) &&
	test_when_finished "remove_object $tree" &&
	cmt=$(echo bogus | git commit-tree $tree) &&
	test_when_finished "remove_object $cmt" &&
	git update-ref refs/heads/bogus $cmt &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&

	test_might_fail git rev-list --verify-objects refs/heads/bogus >/dev/null 2>out &&
	test_i18ngrep -q "error: hash mismatch $(dirname $new)$(test_oid ff_2)" out

ok 36 - rev-list --verify-objects with bad sha1

expecting success of 1450.37 'rev-list --verify-objects notices swapped commits': 
	git init swapped-commits &&
	(
		cd swapped-commits &&
		test_commit one &&
		test_commit two &&
		one_oid=$(git rev-parse HEAD) &&
		two_oid=$(git rev-parse HEAD^) &&
		one=.git/objects/$(test_oid_to_path $one_oid) &&
		two=.git/objects/$(test_oid_to_path $two_oid) &&
		mv $one tmp &&
		mv $two $one &&
		mv tmp $two &&
		test_must_fail git rev-list --verify-objects HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/swapped-commits/.git/
[master (root-commit) 4331c28] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 00bbe3d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
error: hash mismatch 00bbe3d52a615188595aba57d395b47d615da292
fatal: bad object HEAD
ok 37 - rev-list --verify-objects notices swapped commits

expecting success of 1450.38 'set up repository with commit-graph': 
	git init corrupt-graph &&
	(
		cd corrupt-graph &&
		test_commit one &&
		test_commit two &&
		git commit-graph write --reachable
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/corrupt-graph/.git/
[master (root-commit) 4331c28] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 00bbe3d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 38 - set up repository with commit-graph

expecting success of 1450.39 'rev-list --verify-objects with commit graph (tip)': 
	corrupt_graph_obj HEAD &&
	test_must_fail git -C corrupt-graph rev-list --verify-objects HEAD

error: inflate: data stream error (incorrect header check)
error: unable to unpack 00bbe3d52a615188595aba57d395b47d615da292 header
error: inflate: data stream error (incorrect header check)
error: unable to unpack 00bbe3d52a615188595aba57d395b47d615da292 header
fatal: loose object 00bbe3d52a615188595aba57d395b47d615da292 (stored in .git/objects/00/bbe3d52a615188595aba57d395b47d615da292) is corrupt
ok 39 - rev-list --verify-objects with commit graph (tip)

expecting success of 1450.40 'rev-list --verify-objects with commit graph (parent)': 
	corrupt_graph_obj HEAD^ &&
	test_must_fail git -C corrupt-graph rev-list --verify-objects HEAD

error: inflate: data stream error (incorrect header check)
error: unable to unpack 4331c280ae8691e937f22f78e998805a89a91a07 header
fatal: loose object 4331c280ae8691e937f22f78e998805a89a91a07 (stored in .git/objects/43/31c280ae8691e937f22f78e998805a89a91a07) is corrupt
ok 40 - rev-list --verify-objects with commit graph (parent)

expecting success of 1450.41 'force fsck to ignore double author': 
	git cat-file commit HEAD >basis &&
	sed "s/^author .*/&,&/" <basis | tr , \\n >multiple-authors &&
	new=$(git hash-object -t commit -w --stdin <multiple-authors) &&
	test_when_finished "remove_object $new" &&
	git update-ref refs/heads/bogus "$new" &&
	test_when_finished "git update-ref -d refs/heads/bogus" &&
	test_must_fail git fsck &&
	git -c fsck.multipleAuthors=ignore fsck

error in commit 3d94ae45b63882b239b90285e1f253e2d4cd5e9f: multipleAuthors: invalid format - multiple 'author' lines
ok 41 - force fsck to ignore double author

expecting success of 1450.42 'fsck notices blob entry pointing to null sha1': 
	(git init null-blob &&
	 cd null-blob &&
	 sha=$(printf "100644 file$_bz$_bzoid" |
	       git hash-object -w --stdin -t tree) &&
	  git fsck 2>out &&
	  test_i18ngrep "warning.*null sha1" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/null-blob/.git/
dangling tree aaf928e9279b56c88bcc8d79f881e5c820ea23e8
warning in tree aaf928e9279b56c88bcc8d79f881e5c820ea23e8: nullSha1: contains entries pointing to null sha1
ok 42 - fsck notices blob entry pointing to null sha1

expecting success of 1450.43 'fsck notices submodule entry pointing to null sha1': 
	(git init null-commit &&
	 cd null-commit &&
	 sha=$(printf "160000 submodule$_bz$_bzoid" |
	       git hash-object -w --stdin -t tree) &&
	  git fsck 2>out &&
	  test_i18ngrep "warning.*null sha1" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/null-commit/.git/
dangling tree f87f3eabd15018382578c00e3a71a46c842e17e6
warning in tree f87f3eabd15018382578c00e3a71a46c842e17e6: nullSha1: contains entries pointing to null sha1
ok 43 - fsck notices submodule entry pointing to null sha1

expecting success of 1450.44 'fsck notices . as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dot-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 4d6a3deda84474ed5f701962ea9bf83c5fe08185
warning in tree 4d6a3deda84474ed5f701962ea9bf83c5fe08185: hasDot: contains '.'
ok 44 - fsck notices . as blob

expecting success of 1450.45 'fsck notices . as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dot-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 8984d55df404e56c99a9c5a2e5a168084a913e8f
warning in tree 8984d55df404e56c99a9c5a2e5a168084a913e8f: hasDot: contains '.'
ok 45 - fsck notices . as tree

expecting success of 1450.46 'fsck notices .. as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotdot-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 879560d9e3297f45ca9c25d4eea563f8dd179a32
warning in tree 879560d9e3297f45ca9c25d4eea563f8dd179a32: hasDotdot: contains '..'
ok 46 - fsck notices .. as blob

expecting success of 1450.47 'fsck notices .. as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotdot-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree e704ff9811f799e752c8894dbc145bc74e4561fa
warning in tree e704ff9811f799e752c8894dbc145bc74e4561fa: hasDotdot: contains '..'
ok 47 - fsck notices .. as tree

expecting success of 1450.48 'fsck notices .git as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 8ac5f64528d35de17a03755d2f3387af1de58b5a
warning in tree 8ac5f64528d35de17a03755d2f3387af1de58b5a: hasDotgit: contains '.git'
ok 48 - fsck notices .git as blob

expecting success of 1450.49 'fsck notices .git as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 69237360529ca48e6b6c1af14e753faabe339fb7
warning in tree 69237360529ca48e6b6c1af14e753faabe339fb7: hasDotgit: contains '.git'
ok 49 - fsck notices .git as tree

expecting success of 1450.50 'fsck notices .GIT as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 56bac0d7a0a3c1451521352e3d40117e5ffc602e
warning in tree 56bac0d7a0a3c1451521352e3d40117e5ffc602e: hasDotgit: contains '.git'
ok 50 - fsck notices .GIT as blob

expecting success of 1450.51 'fsck notices .GIT as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 968a2dfde1e164e0513456c00ef656b2497434a3
warning in tree 968a2dfde1e164e0513456c00ef656b2497434a3: hasDotgit: contains '.git'
ok 51 - fsck notices .GIT as tree

expecting success of 1450.52 'fsck notices .gI{u200c}T as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-unicode-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 2b65491a1b39699fb2bffda8e997c85fcb9c7beb
warning in tree 2b65491a1b39699fb2bffda8e997c85fcb9c7beb: hasDotgit: contains '.git'
ok 52 - fsck notices .gI{u200c}T as blob

expecting success of 1450.53 'fsck notices .gI{u200c}T as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-unicode-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 6a547d921721f1cf91601a53fcc7aae232947d23
warning in tree 6a547d921721f1cf91601a53fcc7aae232947d23: hasDotgit: contains '.git'
ok 53 - fsck notices .gI{u200c}T as tree

expecting success of 1450.54 'fsck notices .Git as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case2-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 3e29dd65f814deffead951c60da749fdf8a668c8
warning in tree 3e29dd65f814deffead951c60da749fdf8a668c8: hasDotgit: contains '.git'
ok 54 - fsck notices .Git as blob

expecting success of 1450.55 'fsck notices .Git as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case2-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 50c7c9624762f2fe0d4efe5cba98835f58822ef4
warning in tree 50c7c9624762f2fe0d4efe5cba98835f58822ef4: hasDotgit: contains '.git'
ok 55 - fsck notices .Git as tree

expecting success of 1450.56 'fsck notices git~1 as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/git-tilde1-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 1206e1b64fcedc2a9e7b8195c1c4c1a278285b20
warning in tree 1206e1b64fcedc2a9e7b8195c1c4c1a278285b20: hasDotgit: contains '.git'
ok 56 - fsck notices git~1 as blob

expecting success of 1450.57 'fsck notices git~1 as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/git-tilde1-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 06f99accfb778f3318c72f3ae1c809cca146d27c
warning in tree 06f99accfb778f3318c72f3ae1c809cca146d27c: hasDotgit: contains '.git'
ok 57 - fsck notices git~1 as tree

expecting success of 1450.58 'fsck notices .git. as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgitdot-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 08554698725ae2bc2c2ae0172779111c62bda7a2
warning in tree 08554698725ae2bc2c2ae0172779111c62bda7a2: hasDotgit: contains '.git'
ok 58 - fsck notices .git. as blob

expecting success of 1450.59 'fsck notices .git. as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgitdot-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 4d7df7e65b79aeef4640dbfba95705b94a2bc266
warning in tree 4d7df7e65b79aeef4640dbfba95705b94a2bc266: hasDotgit: contains '.git'
ok 59 - fsck notices .git. as tree

expecting success of 1450.60 'fsck notices .\.GIT\foobar as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dot-backslash-case-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 4447c608c557aa9e2d0d226c7af1f06937133ea1
warning in tree 4447c608c557aa9e2d0d226c7af1f06937133ea1: hasDotgit: contains '.git'
ok 60 - fsck notices .\.GIT\foobar as blob

expecting success of 1450.61 'fsck notices .\.GIT\foobar as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dot-backslash-case-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree a8562dc6d26106f039fc8af6b2aa6fed2b1e14d4
warning in tree a8562dc6d26106f039fc8af6b2aa6fed2b1e14d4: hasDotgit: contains '.git'
ok 61 - fsck notices .\.GIT\foobar as tree

expecting success of 1450.62 'fsck notices .git\foobar as blob': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case-backslash-blob/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree 707c253cde8e3742e9f02a3cf02fdc4ca0f55652
warning in tree 707c253cde8e3742e9f02a3cf02fdc4ca0f55652: hasDotgit: contains '.git'
ok 62 - fsck notices .git\foobar as blob

expecting success of 1450.63 'fsck notices .git\foobar as tree': 
		(
			git init $name-$type &&
			cd $name-$type &&
			git config core.protectNTFS false &&
			echo content >file &&
			git add file &&
			git commit -m base &&
			blob=$(git rev-parse :file) &&
			tree=$(git rev-parse HEAD^{tree}) &&
			value=$(eval "echo \$$type") &&
			printf "$mode $type %s\t%s" "$value" "$path" >bad &&
			bad_tree=$(git mktree <bad) &&
			git fsck 2>out &&
			test_i18ngrep "warning.*tree $bad_tree" out
		)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dotgit-case-backslash-tree/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree caa586f8ddde64c3fc9157a3a262c9bd6a6a41ff
warning in tree caa586f8ddde64c3fc9157a3a262c9bd6a6a41ff: hasDotgit: contains '.git'
ok 63 - fsck notices .git\foobar as tree

expecting success of 1450.64 'fsck allows .Ňit': 
	(
		git init not-dotgit &&
		cd not-dotgit &&
		echo content >file &&
		git add file &&
		git commit -m base &&
		blob=$(git rev-parse :file) &&
		printf "100644 blob $blob\t.\\305\\207it" >tree &&
		tree=$(git mktree <tree) &&
		git fsck 2>err &&
		test_line_count = 0 err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/not-dotgit/.git/
[master (root-commit) ebd6d19] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
dangling tree b6cf3d0dca284724c6c6a7005056d573f86157d7
ok 64 - fsck allows .Ňit

expecting success of 1450.65 'NUL in commit': 
	rm -fr nul-in-commit &&
	git init nul-in-commit &&
	(
		cd nul-in-commit &&
		git commit --allow-empty -m "initial commitQNUL after message" &&
		git cat-file commit HEAD >original &&
		q_to_nul <original >munged &&
		git hash-object -w -t commit --stdin <munged >name &&
		git branch bad $(cat name) &&

		test_must_fail git -c fsck.nulInCommit=error fsck 2>warn.1 &&
		test_i18ngrep nulInCommit warn.1 &&
		git fsck 2>warn.2 &&
		test_i18ngrep nulInCommit warn.2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/nul-in-commit/.git/
[master (root-commit) c31a7f2] initial commitQNUL after message
 Author: A U Thor <author@example.com>
error in commit f2f2305a657f7e4cfa7cd358e43c37ab0394720d: nulInCommit: NUL byte in the commit object body
warning in commit f2f2305a657f7e4cfa7cd358e43c37ab0394720d: nulInCommit: NUL byte in the commit object body
ok 65 - NUL in commit

expecting success of 1450.66 'fsck notices missing blob': 
	create_repo_missing HEAD:subdir/file &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
missing blob d95f3ad14dee633a758d2e331151e950dd13e4ed
ok 66 - fsck notices missing blob

expecting success of 1450.67 'fsck notices missing subtree': 
	create_repo_missing HEAD:subdir &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
error: 07753f428765ac1afe2020b24e40785869bd4a85: invalid sha1 pointer in cache-tree
broken link from    tree 5f9d5fe4279246e5b2ddcd446efc2aed53a52304
              to    tree 07753f428765ac1afe2020b24e40785869bd4a85
missing tree 07753f428765ac1afe2020b24e40785869bd4a85
ok 67 - fsck notices missing subtree

expecting success of 1450.68 'fsck notices missing root tree': 
	create_repo_missing HEAD^{tree} &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
error: 5f9d5fe4279246e5b2ddcd446efc2aed53a52304: invalid sha1 pointer in cache-tree
broken link from  commit ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
              to    tree 5f9d5fe4279246e5b2ddcd446efc2aed53a52304
dangling tree 07753f428765ac1afe2020b24e40785869bd4a85
missing tree 5f9d5fe4279246e5b2ddcd446efc2aed53a52304
ok 68 - fsck notices missing root tree

expecting success of 1450.69 'fsck notices missing parent': 
	create_repo_missing HEAD^ &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
error: HEAD: invalid reflog entry d38f542f2d868bcbbb09173528a3bb403f53a0f0
error: HEAD: invalid reflog entry d38f542f2d868bcbbb09173528a3bb403f53a0f0
error: refs/heads/master: invalid reflog entry d38f542f2d868bcbbb09173528a3bb403f53a0f0
error: refs/heads/master: invalid reflog entry d38f542f2d868bcbbb09173528a3bb403f53a0f0
broken link from  commit ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
              to  commit d38f542f2d868bcbbb09173528a3bb403f53a0f0
dangling tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
missing commit d38f542f2d868bcbbb09173528a3bb403f53a0f0
ok 69 - fsck notices missing parent

expecting success of 1450.70 'fsck notices missing tagged object': 
	create_repo_missing tag^{blob} &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
broken link from     tag 7c115056e13b1f41142fe9e6f6cb98a1c077facd
              to    blob c21c9352f7526e9576892a6631e0e8cf1fccd34d
missing blob c21c9352f7526e9576892a6631e0e8cf1fccd34d
ok 70 - fsck notices missing tagged object

expecting success of 1450.71 'fsck notices ref pointing to missing commit': 
	create_repo_missing HEAD &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
error: refs/heads/master: invalid sha1 pointer ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
error: HEAD: invalid sha1 pointer ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
error: HEAD: invalid reflog entry ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
error: refs/heads/master: invalid reflog entry ca32bdaaf4ee9eab00bafa6471c9a2fa98fc42c3
ok 71 - fsck notices ref pointing to missing commit

expecting success of 1450.72 'fsck notices ref pointing to missing tag': 
	create_repo_missing tag &&
	test_must_fail git -C missing fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/missing/.git/
[master (root-commit) d38f542] one
 Author: A U Thor <author@example.com>
[master ca32bda] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file
error: refs/tags/tag: invalid sha1 pointer 7c115056e13b1f41142fe9e6f6cb98a1c077facd
dangling blob c21c9352f7526e9576892a6631e0e8cf1fccd34d
ok 72 - fsck notices ref pointing to missing tag

expecting success of 1450.73 'fsck --connectivity-only': 
	rm -rf connectivity-only &&
	git init connectivity-only &&
	(
		cd connectivity-only &&
		touch empty &&
		git add empty &&
		test_commit empty &&

		# Drop the index now; we want to be sure that we
		# recursively notice the broken objects
		# because they are reachable from refs, not because
		# they are in the index.
		rm -f .git/index &&

		# corrupt the blob, but in a way that we can still identify
		# its type. That lets us see that --connectivity-only is
		# not actually looking at the contents, but leaves it
		# free to examine the type if it chooses.
		empty=.git/objects/$(test_oid_to_path $EMPTY_BLOB) &&
		blob=$(echo unrelated | git hash-object -w --stdin) &&
		mv -f $(sha1_file $blob) $empty &&

		test_must_fail git fsck --strict &&
		git fsck --strict --connectivity-only &&
		tree=$(git rev-parse HEAD:) &&
		suffix=${tree#??} &&
		tree=.git/objects/${tree%$suffix}/$suffix &&
		rm -f $tree &&
		echo invalid >$tree &&
		test_must_fail git fsck --strict --connectivity-only
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/connectivity-only/.git/
[master (root-commit) 86520b7] empty
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 empty
 create mode 100644 empty.t
error: c21c9352f7526e9576892a6631e0e8cf1fccd34d: hash-path mismatch, found at: .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
missing blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
error: inflate: data stream error (incorrect header check)
error: unable to unpack 0d3d3508cb204b9201d016862e6025a49e8c01d6 header
fatal: loose object 0d3d3508cb204b9201d016862e6025a49e8c01d6 (stored in .git/objects/0d/3d3508cb204b9201d016862e6025a49e8c01d6) is corrupt
ok 73 - fsck --connectivity-only

expecting success of 1450.74 'fsck --connectivity-only with explicit head': 
	rm -rf connectivity-only &&
	git init connectivity-only &&
	(
		cd connectivity-only &&
		test_commit foo &&
		rm -f .git/index &&
		tree=$(git rev-parse HEAD^{tree}) &&
		remove_object $(git rev-parse HEAD:foo.t) &&
		test_must_fail git fsck --connectivity-only $tree
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/connectivity-only/.git/
[master (root-commit) 31f3b95] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
broken link from    tree 64fd3796c57084e7b8cbae358ce37970b8e954f6
              to    blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99
missing blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99
dangling commit 31f3b953b325df75c7b6fbf854b59ac67382ac3b
ok 74 - fsck --connectivity-only with explicit head

expecting success of 1450.75 'fsck --name-objects': 
	rm -rf name-objects &&
	git init name-objects &&
	(
		cd name-objects &&
		git config core.logAllRefUpdates false &&
		test_commit julius caesar.t &&
		test_commit augustus44 &&
		test_commit caesar  &&
		remove_object $(git rev-parse julius:caesar.t) &&
		tree=$(git rev-parse --verify julius:) &&
		git tag -d julius &&
		test_must_fail git fsck --name-objects >out &&
		test_i18ngrep "$tree (refs/tags/augustus44\\^:" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/name-objects/.git/
[master (root-commit) 6ab43a8] julius
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 caesar.t
[master d65fd68] augustus44
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 augustus44.t
[master 6d0b31d] caesar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Deleted tag 'julius' (was 6ab43a8)
broken link from    tree c2fab98f409a47394d992eca10a20e0b22377c0c (refs/tags/augustus44^:)
ok 75 - fsck --name-objects

expecting success of 1450.76 'alternate objects are correctly blamed': 
	test_when_finished "rm -rf alt.git .git/objects/info/alternates" &&
	name=$(test_oid numeric) &&
	path=$(test_oid_to_path "$name") &&
	git init --bare alt.git &&
	echo "../../alt.git/objects" >.git/objects/info/alternates &&
	mkdir alt.git/objects/$(dirname $path) &&
	>alt.git/objects/$(dirname $path)/$(basename $path) &&
	test_must_fail git fsck >out 2>&1 &&
	test_i18ngrep alt.git out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/alt.git/
error: object file /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/alt.git/objects/01/23456789012345678901234567890123456789 is empty
error: unable to mmap /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/alt.git/objects/01/23456789012345678901234567890123456789: No such file or directory
error: 0123456789012345678901234567890123456789: object corrupt or missing: /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/alt.git/objects/01/23456789012345678901234567890123456789
ok 76 - alternate objects are correctly blamed

expecting success of 1450.77 'fsck errors in packed objects': 
	git cat-file commit HEAD >basis &&
	sed "s/</one/" basis >one &&
	sed "s/</foo/" basis >two &&
	one=$(git hash-object -t commit -w one) &&
	two=$(git hash-object -t commit -w two) &&
	pack=$(
		{
			echo $one &&
			echo $two
		} | git pack-objects .git/objects/pack/pack
	) &&
	test_when_finished "rm -f .git/objects/pack/pack-$pack.*" &&
	remove_object $one &&
	remove_object $two &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "error in commit $one.* - bad name" out &&
	test_i18ngrep "error in commit $two.* - bad name" out &&
	! grep corrupt out

dangling commit a55646b2b4c741ed105e2e5c54365a5b4051c7e2
dangling commit e705fceb9d8aec1503002ea31f4f68ea707e88ef
error in commit e705fceb9d8aec1503002ea31f4f68ea707e88ef: badName: invalid author/committer line - bad name
error in commit a55646b2b4c741ed105e2e5c54365a5b4051c7e2: badName: invalid author/committer line - bad name
ok 77 - fsck errors in packed objects

expecting success of 1450.78 'fsck fails on corrupt packfile': 
	hsh=$(git commit-tree -m mycommit HEAD^{tree}) &&
	pack=$(echo $hsh | git pack-objects .git/objects/pack/pack) &&

	# Corrupt the first byte of the first object. (It contains 3 type bits,
	# at least one of which is not zero, so setting the first byte to 0 is
	# sufficient.)
	chmod a+w .git/objects/pack/pack-$pack.pack &&
	printf "\0" | dd of=.git/objects/pack/pack-$pack.pack bs=1 conv=notrunc seek=12 &&

	test_when_finished "rm -f .git/objects/pack/pack-$pack.*" &&
	remove_object $hsh &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "checksum mismatch" out

1+0 records in
1+0 records out
1 byte copied, 0.000520019 s, 1.9 kB/s
error: .git/objects/pack/pack-8be9f6a4139bcddd74c3d2ed343bb71e87863c4b.pack pack checksum mismatch
ok 78 - fsck fails on corrupt packfile

expecting success of 1450.79 'fsck finds problems in duplicate loose objects': 
	rm -rf broken-duplicate &&
	git init broken-duplicate &&
	(
		cd broken-duplicate &&
		test_commit duplicate &&
		# no "-d" here, so we end up with duplicates
		git repack &&
		# now corrupt the loose copy
		oid="$(git rev-parse HEAD)" &&
		file=$(sha1_file "$oid") &&
		rm "$file" &&
		echo broken >"$file" &&
		test_must_fail git fsck 2>err &&

		cat >expect <<-EOF &&
		error: inflate: data stream error (incorrect header check)
		error: unable to unpack header of $file
		error: $oid: object corrupt or missing: $file
		EOF
		grep "^error: " err >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/broken-duplicate/.git/
[master (root-commit) d19e0e2] duplicate
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 duplicate.t
ok 79 - fsck finds problems in duplicate loose objects

expecting success of 1450.80 'fsck detects trailing loose garbage (commit)': 
	git cat-file commit HEAD >basis &&
	echo bump-commit-sha1 >>basis &&
	commit=$(git hash-object -w -t commit basis) &&
	file=$(sha1_file $commit) &&
	test_when_finished "remove_object $commit" &&
	chmod +w "$file" &&
	echo garbage >>"$file" &&
	test_must_fail git fsck 2>out &&
	test_i18ngrep "garbage.*$commit" out

error: garbage at end of loose object '59ac8713639e31797addb7a886b8f5f6637bda3c'
ok 80 - fsck detects trailing loose garbage (commit)

expecting success of 1450.81 'fsck detects trailing loose garbage (large blob)': 
	blob=$(echo trailing | git hash-object -w --stdin) &&
	file=$(sha1_file $blob) &&
	test_when_finished "remove_object $blob" &&
	chmod +w "$file" &&
	echo garbage >>"$file" &&
	test_must_fail git -c core.bigfilethreshold=5 fsck 2>out &&
	test_i18ngrep "garbage.*$blob" out

error: garbage at end of loose object '1e285548b47be8577f0549b6ebcecb242e692df3'
ok 81 - fsck detects trailing loose garbage (large blob)

expecting success of 1450.82 'fsck detects truncated loose object': 
	# make it big enough that we know we will truncate in the data
	# portion, not the header
	test-tool genrandom truncate 4096 >file &&
	blob=$(git hash-object -w file) &&
	file=$(sha1_file $blob) &&
	test_when_finished "remove_object $blob" &&
	test_copy_bytes 1024 <"$file" >tmp &&
	rm "$file" &&
	mv -f tmp "$file" &&

	# check both regular and streaming code paths
	test_must_fail git fsck 2>out &&
	test_i18ngrep corrupt.*$blob out &&

	test_must_fail git -c core.bigfilethreshold=128 fsck 2>out &&
	test_i18ngrep corrupt.*$blob out

error: corrupt loose object 'a56f9fb3e06dcfb3e5088f319ee1d4ccd1e05098'
error: corrupt loose object 'a56f9fb3e06dcfb3e5088f319ee1d4ccd1e05098'
ok 82 - fsck detects truncated loose object

expecting success of 1450.83 'create dangling-object repository': 
	git init dangling &&
	(
		cd dangling &&
		blob=$(echo not-dangling | git hash-object -w --stdin) &&
		dblob=$(echo dangling | git hash-object -w --stdin) &&
		tree=$(printf "100644 blob %s\t%s\n" $blob one | git mktree) &&
		dtree=$(printf "100644 blob %s\t%s\n" $blob two | git mktree) &&
		commit=$(git commit-tree $tree) &&
		dcommit=$(git commit-tree -p $commit $tree) &&

		cat >expect <<-EOF
		dangling blob $dblob
		dangling commit $dcommit
		dangling tree $dtree
		EOF
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/dangling/.git/
ok 83 - create dangling-object repository

expecting success of 1450.84 'fsck notices dangling objects': 
	(
		cd dangling &&
		git fsck >actual &&
		# the output order is non-deterministic, as it comes from a hash
		sort <actual >actual.sorted &&
		test_cmp expect actual.sorted
	)

notice: HEAD points to an unborn branch (master)
notice: No default references
ok 84 - fsck notices dangling objects

expecting success of 1450.85 'fsck --connectivity-only notices dangling objects': 
	(
		cd dangling &&
		git fsck --connectivity-only >actual &&
		# the output order is non-deterministic, as it comes from a hash
		sort <actual >actual.sorted &&
		test_cmp expect actual.sorted
	)

notice: HEAD points to an unborn branch (master)
notice: No default references
ok 85 - fsck --connectivity-only notices dangling objects

expecting success of 1450.86 'fsck $name notices bogus $name': 
	test_must_fail git fsck bogus &&
	test_must_fail git fsck $ZERO_OID

error: invalid parameter: expected sha1, got 'bogus'
dangling commit c9145d6720f85544cc4bb6009a2e541660aa156b
error: 0000000000000000000000000000000000000000: object missing
dangling commit c9145d6720f85544cc4bb6009a2e541660aa156b
ok 86 - fsck $name notices bogus $name

expecting success of 1450.87 'bogus head does not fallback to all heads': 
	# set up a case that will cause a reachability complaint
	echo to-be-deleted >foo &&
	git add foo &&
	blob=$(git rev-parse :foo) &&
	test_when_finished "git rm --cached foo" &&
	remove_object $blob &&
	test_must_fail git fsck $ZERO_OID >out 2>&1 &&
	! grep $blob out

rm 'foo'
ok 87 - bogus head does not fallback to all heads

expecting success of 1450.88 'detect corrupt index file in fsck': 
	cp .git/index .git/index.backup &&
	test_when_finished "mv .git/index.backup .git/index" &&
	corrupt_index_checksum &&
	test_must_fail git fsck --cache 2>errors &&
	test_i18ngrep "bad index file" errors

error: bad index file sha1 signature
ok 88 - detect corrupt index file in fsck

expecting success of 1450.89 'fsck error and recovery on invalid object type': 
	git init --bare garbage-type &&
	(
		cd garbage-type &&

		garbage_blob=$(git hash-object --stdin -w -t garbage --literally </dev/null) &&

		cat >err.expect <<-\EOF &&
		fatal: invalid object type
		EOF
		test_must_fail git fsck >out 2>err &&
		grep -e "^error" -e "^fatal" err >errors &&
		test_line_count = 1 errors &&
		grep "$garbage_blob: object is of unknown type 'garbage':" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1450-fsck/garbage-type/
error: 8315a83d2acc4c174aed59430f9a9c4ed926440f: object is of unknown type 'garbage': ./objects/83/15a83d2acc4c174aed59430f9a9c4ed926440f
ok 89 - fsck error and recovery on invalid object type

# passed all 89 test(s)
1..89
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1515-rev-parse-outside-repo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1515-rev-parse-outside-repo/.git/
expecting success of 1515.1 'set up non-repo directory': 
	GIT_CEILING_DIRECTORIES=$(pwd) &&
	export GIT_CEILING_DIRECTORIES &&
	mkdir non-repo &&
	cd non-repo &&
	# confirm that git does not find a repo
	test_must_fail git rev-parse --git-dir

fatal: not a git repository (or any of the parent directories): .git
ok 1 - set up non-repo directory

expecting success of 1515.2 'rev-parse --sq-quote': 
	dump_args "$tricky" easy >expect &&
	eval "dump_args $(git rev-parse --sq-quote "$tricky" easy)" >actual &&
	test_cmp expect actual

ok 2 - rev-parse --sq-quote

expecting success of 1515.3 'rev-parse --local-env-vars': 
	git rev-parse --local-env-vars >actual &&
	# we do not want to depend on the complete list here,
	# so just look for something plausible
	grep ^GIT_DIR actual

GIT_DIR
ok 3 - rev-parse --local-env-vars

expecting success of 1515.4 'rev-parse --resolve-git-dir': 
	git init --separate-git-dir repo dir &&
	test_must_fail git rev-parse --resolve-git-dir . &&
	echo "$(pwd)/repo" >expect &&
	git rev-parse --resolve-git-dir dir/.git >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1515-rev-parse-outside-repo/non-repo/repo/
fatal: not a gitdir '.'
ok 4 - rev-parse --resolve-git-dir

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1514-rev-parse-push.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1514-rev-parse-push/.git/
expecting success of 1514.1 'setup': 
	git init --bare parent.git &&
	git init --bare other.git &&
	git remote add origin parent.git &&
	git remote add other other.git &&
	test_commit base &&
	git push origin HEAD &&
	git branch --set-upstream-to=origin/main main &&
	git branch --track topic origin/main &&
	git push origin topic &&
	git push other topic

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1514-rev-parse-push/parent.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1514-rev-parse-push/other.git/
[main (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
To parent.git
 * [new branch]      HEAD -> main
branch 'main' set up to track 'origin/main'.
branch 'topic' set up to track 'origin/main'.
To parent.git
 * [new branch]      topic -> topic
To other.git
 * [new branch]      topic -> topic
ok 1 - setup

expecting success of 1514.2 '@{push} with default=nothing': 
	test_config push.default nothing &&
	test_must_fail git rev-parse main@{push} &&
	test_must_fail git rev-parse main@{PUSH} &&
	test_must_fail git rev-parse main@{PuSH}

fatal: push has no destination (push.default is 'nothing')
fatal: push has no destination (push.default is 'nothing')
fatal: push has no destination (push.default is 'nothing')
ok 2 - @{push} with default=nothing

expecting success of 1514.3 '@{push} with default=simple': 
	test_config push.default simple &&
	resolve main@{push} refs/remotes/origin/main &&
	resolve main@{PUSH} refs/remotes/origin/main &&
	resolve main@{pUSh} refs/remotes/origin/main

ok 3 - @{push} with default=simple

expecting success of 1514.4 'triangular @{push} fails with default=simple': 
	test_config push.default simple &&
	test_must_fail git rev-parse topic@{push}

fatal: cannot resolve 'simple' push to a single destination
ok 4 - triangular @{push} fails with default=simple

expecting success of 1514.5 '@{push} with default=current': 
	test_config push.default current &&
	resolve topic@{push} refs/remotes/origin/topic

ok 5 - @{push} with default=current

expecting success of 1514.6 '@{push} with default=matching': 
	test_config push.default matching &&
	resolve topic@{push} refs/remotes/origin/topic

ok 6 - @{push} with default=matching

expecting success of 1514.7 '@{push} with pushremote defined': 
	test_config push.default current &&
	test_config branch.topic.pushremote other &&
	resolve topic@{push} refs/remotes/other/topic

ok 7 - @{push} with pushremote defined

expecting success of 1514.8 '@{push} with push refspecs': 
	test_config push.default nothing &&
	test_config remote.origin.push refs/heads/*:refs/heads/magic/* &&
	git push &&
	resolve topic@{push} refs/remotes/origin/magic/topic

To parent.git
 * [new branch]      main -> magic/main
 * [new branch]      topic -> magic/topic
ok 8 - @{push} with push refspecs

expecting success of 1514.9 'resolving @{push} fails with a detached HEAD': 
	git checkout HEAD^0 &&
	test_when_finished "git checkout -" &&
	test_must_fail git rev-parse @{push}

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d1ff1c9 base
fatal: HEAD does not point to a branch
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
ok 9 - resolving @{push} fails with a detached HEAD

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1601-index-bogus.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1601-index-bogus/.git/
expecting success of 1601.1 'create tree with null sha1': 
	tree=$(printf "160000 commit $ZERO_OID\\tbroken\\n" | git mktree)

ok 1 - create tree with null sha1

expecting success of 1601.2 'read-tree refuses to read null sha1': 
	test_must_fail git read-tree $tree

error: cache entry has null sha1: broken
fatal: unable to write new index file
ok 2 - read-tree refuses to read null sha1

expecting success of 1601.3 'GIT_ALLOW_NULL_SHA1 overrides refusal': 
	GIT_ALLOW_NULL_SHA1=1 git read-tree $tree

warning: cache entry has null sha1: broken
ok 3 - GIT_ALLOW_NULL_SHA1 overrides refusal

expecting success of 1601.4 'git write-tree refuses to write null sha1': 
	test_must_fail git write-tree

error: invalid object 160000 0000000000000000000000000000000000000000 for 'broken'
fatal: git-write-tree: error building trees
ok 4 - git write-tree refuses to write null sha1

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1600-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1600-index/.git/
expecting success of 1600.1 'setup': 
	echo 1 >a

ok 1 - setup

expecting success of 1600.2 'bogus GIT_INDEX_VERSION issues warning': 
	(
		rm -f .git/index &&
		GIT_INDEX_VERSION=2bogus &&
		export GIT_INDEX_VERSION &&
		git add a 2>err &&
		sed "s/[0-9]//" err >actual.err &&
		sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
			warning: GIT_INDEX_VERSION set, but the value is invalid.
			Using version Z
		EOF
		test_cmp expect.err actual.err
	)

ok 2 - bogus GIT_INDEX_VERSION issues warning

expecting success of 1600.3 'out of bounds GIT_INDEX_VERSION issues warning': 
	(
		rm -f .git/index &&
		GIT_INDEX_VERSION=1 &&
		export GIT_INDEX_VERSION &&
		git add a 2>err &&
		sed "s/[0-9]//" err >actual.err &&
		sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
			warning: GIT_INDEX_VERSION set, but the value is invalid.
			Using version Z
		EOF
		test_cmp expect.err actual.err
	)

ok 3 - out of bounds GIT_INDEX_VERSION issues warning

expecting success of 1600.4 'no warning with bogus GIT_INDEX_VERSION and existing index': 
	(
		GIT_INDEX_VERSION=1 &&
		export GIT_INDEX_VERSION &&
		git add a 2>actual.err &&
		test_must_be_empty actual.err
	)

ok 4 - no warning with bogus GIT_INDEX_VERSION and existing index

expecting success of 1600.5 'out of bounds index.version issues warning': 
	(
		sane_unset GIT_INDEX_VERSION &&
		rm -f .git/index &&
		git config --add index.version 1 &&
		git add a 2>err &&
		sed "s/[0-9]//" err >actual.err &&
		sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
			warning: index.version set, but the value is invalid.
			Using version Z
		EOF
		test_cmp expect.err actual.err
	)

ok 5 - out of bounds index.version issues warning

expecting success of 1600.6 'index version config precedence': 
	test_index_version 0 false 0 2 &&
	test_index_version 2 false 0 2 &&
	test_index_version 3 false 0 2 &&
	test_index_version 4 false 0 4 &&
	test_index_version 2 false 4 4 &&
	test_index_version 2 true 0 2 &&
	test_index_version 0 true 0 4 &&
	test_index_version 0 true 2 2

ok 6 - index version config precedence

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1700-split-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/.git/
expecting success of 1700.1 'setup': 
	test_oid_cache <<-EOF
	own_v3 sha1:8299b0bcd1ac364e5f1d7768efb62fa2da79a339
	own_v3 sha256:38a6d2925e3eceec33ad7b34cbff4e0086caa0daf28f31e51f5bd94b4a7af86b

	base_v3 sha1:39d890139ee5356c7ef572216cebcd27aa41f9df
	base_v3 sha256:c9baeadf905112bf6c17aefbd7d02267afd70ded613c30cafed2d40cb506e1ed

	own_v4 sha1:432ef4b63f32193984f339431fd50ca796493569
	own_v4 sha256:6738ac6319c25b694afa7bcc313deb182d1a59b68bf7a47b4296de83478c0420

	base_v4 sha1:508851a7f0dfa8691e9f69c7f055865389012491
	base_v4 sha256:3177d4adfdd4b6904f7e921d91d715a471c0dde7cf6a4bba574927f02b699508
	EOF

ok 1 - setup

expecting success of 1700.2 'enable split index': 
	git config splitIndex.maxPercentChange 100 &&
	git update-index --split-index &&
	test-tool dump-split-index .git/index >actual &&
	indexversion=$(test-tool index-version <.git/index) &&

	# NEEDSWORK: Stop hard-coding checksums.
	if test "$indexversion" = "4"
	then
		own=$(test_oid own_v4) &&
		base=$(test_oid base_v4)
	else
		own=$(test_oid own_v3) &&
		base=$(test_oid base_v3)
	fi &&

	cat >expect <<-EOF &&
	own $own
	base $base
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 2 - enable split index

expecting success of 1700.3 'add one file': 
	create_non_racy_file one &&
	git update-index --add one &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	base $base
	100644 $EMPTY_BLOB 0	one
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 3 - add one file

expecting success of 1700.4 'disable split index': 
	git update-index --no-split-index &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	BASE=$(test-tool dump-split-index .git/index | sed -n "s/^own/base/p") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	not a split index
	EOF
	test_cmp expect actual

ok 4 - disable split index

expecting success of 1700.5 'enable split index again, "one" now belongs to base index"': 
	git update-index --split-index &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 5 - enable split index again, "one" now belongs to base index"

expecting success of 1700.6 'modify original file, base index untouched': 
	echo modified | create_non_racy_file one &&
	file1_blob=$(git hash-object one) &&
	git update-index one &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $file1_blob 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 $file1_blob 0Q
	replacements: 0
	deletions:
	EOF
	test_cmp expect actual

ok 6 - modify original file, base index untouched

expecting success of 1700.7 'add another file, which stays index': 
	create_non_racy_file two &&
	git update-index --add two &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $file1_blob 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 $file1_blob 0Q
	100644 $EMPTY_BLOB 0	two
	replacements: 0
	deletions:
	EOF
	test_cmp expect actual

ok 7 - add another file, which stays index

expecting success of 1700.8 'remove file not in base index': 
	git update-index --force-remove two &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $file1_blob 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 $file1_blob 0Q
	replacements: 0
	deletions:
	EOF
	test_cmp expect actual

ok 8 - remove file not in base index

expecting success of 1700.9 'remove file in base index': 
	git update-index --force-remove one &&
	git ls-files --stage >ls-files.actual &&
	test_must_be_empty ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions: 0
	EOF
	test_cmp expect actual

ok 9 - remove file in base index

expecting success of 1700.10 'add original file back': 
	create_non_racy_file one &&
	git update-index --add one &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	100644 $EMPTY_BLOB 0	one
	replacements:
	deletions: 0
	EOF
	test_cmp expect actual

ok 10 - add original file back

expecting success of 1700.11 'add new file': 
	create_non_racy_file two &&
	git update-index --add two &&
	git ls-files --stage >actual &&
	cat >expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
	test_cmp expect actual

ok 11 - add new file

expecting success of 1700.12 'unify index, two files remain': 
	git update-index --no-split-index &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
	test_cmp ls-files.expect ls-files.actual &&

	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	not a split index
	EOF
	test_cmp expect actual

ok 12 - unify index, two files remain

expecting success of 1700.13 'rev-parse --shared-index-path': 
	test_create_repo split-index &&
	(
		cd split-index &&
		git update-index --split-index &&
		echo .git/sharedindex* >expect &&
		git rev-parse --shared-index-path >actual &&
		test_cmp expect actual &&
		mkdir subdirectory &&
		cd subdirectory &&
		echo ../.git/sharedindex* >expect &&
		git rev-parse --shared-index-path >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/split-index/.git/
ok 13 - rev-parse --shared-index-path

expecting success of 1700.14 'set core.splitIndex config variable to true': 
	git config core.splitIndex true &&
	create_non_racy_file three &&
	git update-index --add three &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	three
	100644 $EMPTY_BLOB 0	two
	EOF
	test_cmp ls-files.expect ls-files.actual &&
	BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 14 - set core.splitIndex config variable to true

expecting success of 1700.15 'set core.splitIndex config variable to false': 
	git config core.splitIndex false &&
	git update-index --force-remove three &&
	git ls-files --stage >ls-files.actual &&
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
	test_cmp ls-files.expect ls-files.actual &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	not a split index
	EOF
	test_cmp expect actual

ok 15 - set core.splitIndex config variable to false

expecting success of 1700.16 'set core.splitIndex config variable back to true': 
	git config core.splitIndex true &&
	create_non_racy_file three &&
	git update-index --add three &&
	BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual &&
	create_non_racy_file four &&
	git update-index --add four &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	100644 $EMPTY_BLOB 0	four
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 16 - set core.splitIndex config variable back to true

expecting success of 1700.17 'check behavior with splitIndex.maxPercentChange unset': 
	git config --unset splitIndex.maxPercentChange &&
	create_non_racy_file five &&
	git update-index --add five &&
	BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual &&
	create_non_racy_file six &&
	git update-index --add six &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	100644 $EMPTY_BLOB 0	six
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 17 - check behavior with splitIndex.maxPercentChange unset

expecting success of 1700.18 'check splitIndex.maxPercentChange set to 0': 
	git config splitIndex.maxPercentChange 0 &&
	create_non_racy_file seven &&
	git update-index --add seven &&
	BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual &&
	create_non_racy_file eight &&
	git update-index --add eight &&
	BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
	test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
	test_cmp expect actual

ok 18 - check splitIndex.maxPercentChange set to 0

expecting success of 1700.19 'shared index files expire after 2 weeks by default': 
	create_non_racy_file ten &&
	git update-index --add ten &&
	test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
	just_under_2_weeks_ago=$((5-14*86400)) &&
	test-tool chmtime =$just_under_2_weeks_ago .git/sharedindex.* &&
	create_non_racy_file eleven &&
	git update-index --add eleven &&
	test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
	just_over_2_weeks_ago=$((-1-14*86400)) &&
	test-tool chmtime =$just_over_2_weeks_ago .git/sharedindex.* &&
	create_non_racy_file twelve &&
	git update-index --add twelve &&
	test $(ls .git/sharedindex.* | wc -l) -le 2

ok 19 - shared index files expire after 2 weeks by default

expecting success of 1700.20 'check splitIndex.sharedIndexExpire set to 16 days': 
	git config splitIndex.sharedIndexExpire "16.days.ago" &&
	test-tool chmtime =$just_over_2_weeks_ago .git/sharedindex.* &&
	create_non_racy_file thirteen &&
	git update-index --add thirteen &&
	test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
	just_over_16_days_ago=$((-1-16*86400)) &&
	test-tool chmtime =$just_over_16_days_ago .git/sharedindex.* &&
	create_non_racy_file fourteen &&
	git update-index --add fourteen &&
	test $(ls .git/sharedindex.* | wc -l) -le 2

ok 20 - check splitIndex.sharedIndexExpire set to 16 days

expecting success of 1700.21 'check splitIndex.sharedIndexExpire set to "never" and "now"': 
	git config splitIndex.sharedIndexExpire never &&
	just_10_years_ago=$((-365*10*86400)) &&
	test-tool chmtime =$just_10_years_ago .git/sharedindex.* &&
	create_non_racy_file fifteen &&
	git update-index --add fifteen &&
	test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
	git config splitIndex.sharedIndexExpire now &&
	just_1_second_ago=-1 &&
	test-tool chmtime =$just_1_second_ago .git/sharedindex.* &&
	create_non_racy_file sixteen &&
	git update-index --add sixteen &&
	test $(ls .git/sharedindex.* | wc -l) -le 2

ok 21 - check splitIndex.sharedIndexExpire set to "never" and "now"

expecting success of 1700.22 'same mode for index & split index': 
	git init same-mode &&
	(
		cd same-mode &&
		test_commit A &&
		test_modebits .git/index >index_mode &&
		test_must_fail git config core.sharedRepository &&
		git -c core.splitIndex=true status &&
		shared=$(ls .git/sharedindex.*) &&
		case "$shared" in
		*" "*)
			# we have more than one???
			false ;;
		*)
			test_modebits "$shared" >split_index_mode &&
			test_cmp index_mode split_index_mode ;;
		esac
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/same-mode/.git/
[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	index_mode

nothing added to commit but untracked files present (use "git add" to track)
ok 22 - same mode for index & split index

expecting success of 1700.23 'split index respects core.sharedrepository 0666': 
		# Remove existing shared index files
		git config core.splitIndex false &&
		git update-index --force-remove one &&
		rm -f .git/sharedindex.* &&
		# Create one new shared index file
		git config core.sharedrepository "$mode" &&
		git config core.splitIndex true &&
		create_non_racy_file one &&
		git update-index --add one &&
		echo "$modebits" >expect &&
		test_modebits .git/index >actual &&
		test_cmp expect actual &&
		shared=$(ls .git/sharedindex.*) &&
		case "$shared" in
		*" "*)
			# we have more than one???
			false ;;
		*)
			test_modebits "$shared" >actual &&
			test_cmp expect actual ;;
		esac
	
ok 23 - split index respects core.sharedrepository 0666

expecting success of 1700.24 'split index respects core.sharedrepository 0642': 
		# Remove existing shared index files
		git config core.splitIndex false &&
		git update-index --force-remove one &&
		rm -f .git/sharedindex.* &&
		# Create one new shared index file
		git config core.sharedrepository "$mode" &&
		git config core.splitIndex true &&
		create_non_racy_file one &&
		git update-index --add one &&
		echo "$modebits" >expect &&
		test_modebits .git/index >actual &&
		test_cmp expect actual &&
		shared=$(ls .git/sharedindex.*) &&
		case "$shared" in
		*" "*)
			# we have more than one???
			false ;;
		*)
			test_modebits "$shared" >actual &&
			test_cmp expect actual ;;
		esac
	
ok 24 - split index respects core.sharedrepository 0642

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 1700.25 'graceful handling when splitting index is not allowed': 
	test_create_repo ro &&
	(
		cd ro &&
		test_commit initial &&
		git update-index --split-index &&
		test -f .git/sharedindex.*
	) &&
	cp ro/.git/index new-index &&
	test_when_finished "chmod u+w ro/.git" &&
	chmod u-w ro/.git &&
	GIT_INDEX_FILE="$(pwd)/new-index" git -C ro update-index --split-index &&
	chmod u+w ro/.git &&
	rm ro/.git/sharedindex.* &&
	GIT_INDEX_FILE=new-index git ls-files >actual &&
	echo initial.t >expected &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/ro/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 25 - graceful handling when splitting index is not allowed

expecting success of 1700.26 'writing split index with null sha1 does not write cache tree': 
	git config core.splitIndex true &&
	git config splitIndex.maxPercentChange 0 &&
	git commit -m "commit" &&
	{
		git ls-tree HEAD &&
		printf "160000 commit $ZERO_OID\\tbroken\\n"
	} >broken-tree &&
	echo "add broken entry" >msg &&

	tree=$(git mktree <broken-tree) &&
	test_tick &&
	commit=$(git commit-tree $tree -p HEAD <msg) &&
	git update-ref HEAD "$commit" &&
	GIT_ALLOW_NULL_SHA1=1 git reset --hard &&
	test_might_fail test-tool dump-cache-tree >cache-tree.out &&
	test_line_count = 0 cache-tree.out

[main (root-commit) 57c62fa] commit
 Author: A U Thor <author@example.com>
 15 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 eight
 create mode 100644 eleven
 create mode 100644 fifteen
 create mode 100644 five
 create mode 100644 four
 create mode 100644 fourteen
 create mode 100644 one
 create mode 100644 seven
 create mode 100644 six
 create mode 100644 sixteen
 create mode 100644 ten
 create mode 100644 thirteen
 create mode 100644 three
 create mode 100644 twelve
 create mode 100644 two
warning: cache entry has null sha1: broken
HEAD is now at 57cc685 add broken entry
error: invalid object 160000 0000000000000000000000000000000000000000 for 'broken'
ok 26 - writing split index with null sha1 does not write cache tree

expecting success of 1700.27 'do not refresh null base index': 
	test_create_repo merge &&
	(
		cd merge &&
		test_commit initial &&
		git checkout -b side-branch &&
		test_commit extra &&
		git checkout main &&
		git update-index --split-index &&
		test_commit more &&
		# must not write a new shareindex, or we wont catch the problem
		git -c splitIndex.maxPercentChange=100 merge --no-edit side-branch 2>err &&
		# i.e. do not expect warnings like
		# could not freshen shared index .../shareindex.00000...
		test_must_be_empty err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/merge/.git/
[main (root-commit) 5e30013] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'side-branch'
[side-branch 678a87c] extra
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 extra.t
Switched to branch 'main'
[main 34c8267] more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 more.t
Merge made by the 'ort' strategy.
 extra.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 extra.t
ok 27 - do not refresh null base index

expecting success of 1700.28 'reading split index at alternate location': 
	git init reading-alternate-location &&
	(
		cd reading-alternate-location &&
		>file-in-alternate &&
		git update-index --split-index --add file-in-alternate
	) &&
	echo file-in-alternate >expect &&

	# Should be able to find the shared index both right next to
	# the specified split index file ...
	GIT_INDEX_FILE=./reading-alternate-location/.git/index \
	git ls-files --cached >actual &&
	test_cmp expect actual &&

	# ... and, for backwards compatibility, in the current GIT_DIR
	# as well.
	mv -v ./reading-alternate-location/.git/sharedindex.* .git &&
	GIT_INDEX_FILE=./reading-alternate-location/.git/index \
	git ls-files --cached >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/reading-alternate-location/.git/
renamed './reading-alternate-location/.git/sharedindex.9ce5da57c6e3a9860f1cf68b225acaa8e5653a59' -> '.git/sharedindex.9ce5da57c6e3a9860f1cf68b225acaa8e5653a59'
ok 28 - reading split index at alternate location

expecting success of 1700.29 'GIT_TEST_SPLIT_INDEX works': 
	git init git-test-split-index &&
	(
		cd git-test-split-index &&
		>file &&
		GIT_TEST_SPLIT_INDEX=1 git update-index --add file &&
		ls -l .git/sharedindex.* >actual &&
		test_line_count = 1 actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1700-split-index/git-test-split-index/.git/
ok 29 - GIT_TEST_SPLIT_INDEX works

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1800-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1800-hook/.git/
expecting success of 1800.1 'git hook usage': 
	test_expect_code 129 git hook &&
	test_expect_code 129 git hook run &&
	test_expect_code 129 git hook run -h &&
	test_expect_code 129 git hook run --unknown 2>err &&
	grep "unknown option" err

error: need a subcommand
usage: git hook run [--ignore-missing] <hook-name> [-- <hook-args>]

usage: git hook run [--ignore-missing] <hook-name> [-- <hook-args>]

    --ignore-missing      silently ignore missing requested <hook-name>

usage: git hook run [--ignore-missing] <hook-name> [-- <hook-args>]

    --ignore-missing      silently ignore missing requested <hook-name>

error: unknown option `unknown'
ok 1 - git hook usage

expecting success of 1800.2 'git hook run: nonexistent hook': 
	cat >stderr.expect <<-\EOF &&
	error: cannot find a hook named test-hook
	EOF
	test_expect_code 1 git hook run test-hook 2>stderr.actual &&
	test_cmp stderr.expect stderr.actual

ok 2 - git hook run: nonexistent hook

expecting success of 1800.3 'git hook run: nonexistent hook with --ignore-missing': 
	git hook run --ignore-missing does-not-exist 2>stderr.actual &&
	test_must_be_empty stderr.actual

ok 3 - git hook run: nonexistent hook with --ignore-missing

expecting success of 1800.4 'git hook run: basic': 
	test_hook test-hook <<-EOF &&
	echo Test hook
	EOF

	cat >expect <<-\EOF &&
	Test hook
	EOF
	git hook run test-hook 2>actual &&
	test_cmp expect actual

ok 4 - git hook run: basic

expecting success of 1800.5 'git hook run: stdout and stderr both write to our stderr': 
	test_hook test-hook <<-EOF &&
	echo >&1 Will end up on stderr
	echo >&2 Will end up on stderr
	EOF

	cat >stderr.expect <<-\EOF &&
	Will end up on stderr
	Will end up on stderr
	EOF
	git hook run test-hook >stdout.actual 2>stderr.actual &&
	test_cmp stderr.expect stderr.actual &&
	test_must_be_empty stdout.actual

ok 5 - git hook run: stdout and stderr both write to our stderr

expecting success of 1800.6 'git hook run: exit code 1 is passed along': 
		test_hook test-hook <<-EOF &&
		exit $code
		EOF

		test_expect_code $code git hook run test-hook
	
ok 6 - git hook run: exit code 1 is passed along

expecting success of 1800.7 'git hook run: exit code 2 is passed along': 
		test_hook test-hook <<-EOF &&
		exit $code
		EOF

		test_expect_code $code git hook run test-hook
	
ok 7 - git hook run: exit code 2 is passed along

expecting success of 1800.8 'git hook run: exit code 128 is passed along': 
		test_hook test-hook <<-EOF &&
		exit $code
		EOF

		test_expect_code $code git hook run test-hook
	
ok 8 - git hook run: exit code 128 is passed along

expecting success of 1800.9 'git hook run: exit code 129 is passed along': 
		test_hook test-hook <<-EOF &&
		exit $code
		EOF

		test_expect_code $code git hook run test-hook
	
ok 9 - git hook run: exit code 129 is passed along

expecting success of 1800.10 'git hook run arg u ments without -- is not allowed': 
	test_expect_code 129 git hook run test-hook arg u ments

usage: git hook run [--ignore-missing] <hook-name> [-- <hook-args>]

    --ignore-missing      silently ignore missing requested <hook-name>

ok 10 - git hook run arg u ments without -- is not allowed

expecting success of 1800.11 'git hook run -- pass arguments': 
	test_hook test-hook <<-\EOF &&
	echo $1
	echo $2
	EOF

	cat >expect <<-EOF &&
	arg
	u ments
	EOF

	git hook run test-hook -- arg "u ments" 2>actual &&
	test_cmp expect actual

ok 11 - git hook run -- pass arguments

expecting success of 1800.12 'git hook run -- out-of-repo runs excluded': 
	test_hook test-hook <<-EOF &&
	echo Test hook
	EOF

	nongit test_must_fail git hook run test-hook

fatal: not a git repository (or any of the parent directories): .git
ok 12 - git hook run -- out-of-repo runs excluded

expecting success of 1800.13 'git -c core.hooksPath=<PATH> hook run': 
	mkdir my-hooks &&
	write_script my-hooks/test-hook <<-\EOF &&
	echo Hook ran $1
	EOF

	cat >expect <<-\EOF &&
	Test hook
	Hook ran one
	Hook ran two
	Hook ran three
	Hook ran four
	EOF

	test_hook test-hook <<-EOF &&
	echo Test hook
	EOF

	# Test various ways of specifying the path. See also
	# t1350-config-hooks-path.sh
	>actual &&
	git hook run test-hook -- ignored 2>>actual &&
	git -c core.hooksPath=my-hooks hook run test-hook -- one 2>>actual &&
	git -c core.hooksPath=my-hooks/ hook run test-hook -- two 2>>actual &&
	git -c core.hooksPath="$PWD/my-hooks" hook run test-hook -- three 2>>actual &&
	git -c core.hooksPath="$PWD/my-hooks/" hook run test-hook -- four 2>>actual &&
	test_cmp expect actual

ok 13 - git -c core.hooksPath=<PATH> hook run

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 1800.14 'git hook run: stdout and stderr are connected to a TTY': 
	test_hook_tty hook run pre-commit

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1800-hook/repo/.git/
[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ok 14 - git hook run: stdout and stderr are connected to a TTY

expecting success of 1800.15 'git commit: stdout and stderr are connected to a TTY': 
	test_hook_tty commit -m"B.new"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1800-hook/repo/.git/
[master (root-commit) a3899a0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master 7763d60] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[master 990192d] B.new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ok 15 - git commit: stdout and stderr are connected to a TTY

expecting success of 1800.16 'git hook run a hook with a bad shebang': 
	test_when_finished "rm -rf bad-hooks" &&
	mkdir bad-hooks &&
	write_script bad-hooks/test-hook "/bad/path/no/spaces" </dev/null &&

	# TODO: We should emit the same (or at least a more similar)
	# error on MINGW (essentially Git for Windows) and all other
	# platforms.. See the OS-specific code in start_command()
	if test_have_prereq !MINGW
	then
		cat >expect <<-\EOF
		fatal: cannot run bad-hooks/test-hook: ...
		EOF
	else
		cat >expect <<-\EOF
		error: cannot spawn bad-hooks/test-hook: ...
		EOF
	fi &&
	test_expect_code 1 git \
		-c core.hooksPath=bad-hooks \
		hook run test-hook >out 2>err &&
	test_must_be_empty out &&
	sed -e "s/test-hook: .*/test-hook: .../" <err >actual &&
	test_cmp expect actual

ok 16 - git hook run a hook with a bad shebang

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2000-conflict-when-checking-files-out.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2000-conflict-when-checking-files-out/.git/
expecting success of 2000.1 'git update-index --add various paths.': git update-index --add path0 path1/file1
ok 1 - git update-index --add various paths.

expecting success of 2000.2 'git checkout-index without -f should fail on conflicting work tree.': test_must_fail git checkout-index -a
path0 already exists, no checkout
fatal: cannot create directory at 'path1': File exists
ok 2 - git checkout-index without -f should fail on conflicting work tree.

expecting success of 2000.3 'git checkout-index with -f should succeed.': git checkout-index -f -a
ok 3 - git checkout-index with -f should succeed.

expecting success of 2000.4 'git checkout-index conflicting paths.': test -f path0 && test -d path1 && test -f path1/file1
ok 4 - git checkout-index conflicting paths.

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2000.5 'checkout-index -f twice with --prefix': 
	mkdir -p tar/get &&
	ln -s tar/get there &&
	echo first &&
	git checkout-index -a -f --prefix=there/ &&
	echo second &&
	git checkout-index -a -f --prefix=there/

first
second
ok 5 - checkout-index -f twice with --prefix

expecting success of 2000.6 'git update-index --add path2/file0': git update-index --add path2/file0
ok 6 - git update-index --add path2/file0

expecting success of 2000.7 'writing tree out with git write-tree': tree1=$(git write-tree)
ok 7 - writing tree out with git write-tree

expecting success of 2000.8 'git update-index --add path3/file1': git update-index --add path3/file1
ok 8 - git update-index --add path3/file1

expecting success of 2000.9 'writing tree out with git write-tree': tree2=$(git write-tree)
ok 9 - writing tree out with git write-tree

expecting success of 2000.10 'read previously written tree and checkout.': git read-tree -m $tree1 && git checkout-index -f -a
ok 10 - read previously written tree and checkout.

expecting success of 2000.11 'add a symlink': test_ln_s_add path2 path3
ok 11 - add a symlink

expecting success of 2000.12 'writing tree out with git write-tree': tree3=$(git write-tree)
ok 12 - writing tree out with git write-tree

expecting success of 2000.13 'read previously written tree and checkout.': git read-tree $tree2 && git checkout-index -f -a
ok 13 - read previously written tree and checkout.

expecting success of 2000.14 'checking out conflicting path with -f': test ! -h path2 && test -d path2 &&
     test ! -h path3 && test -d path3 &&
     test ! -h path2/file0 && test -f path2/file0 &&
     test ! -h path3/file1 && test -f path3/file1
ok 14 - checking out conflicting path with -f

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2002-checkout-cache-u.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2002-checkout-cache-u/.git/
expecting success of 2002.1 'preparation': 
echo frotz >path0 &&
git update-index --add path0 &&
t=$(git write-tree)
ok 1 - preparation

expecting success of 2002.2 'without -u, git checkout-index smudges stat information.': 
rm -f path0 &&
git read-tree $t &&
git checkout-index -f -a &&
test_must_fail git diff-files --exit-code
:100644 100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0000000000000000000000000000000000000000 M	path0
ok 2 - without -u, git checkout-index smudges stat information.

expecting success of 2002.3 'with -u, git checkout-index picks up stat information from new files.': 
rm -f path0 &&
git read-tree $t &&
git checkout-index -u -f -a &&
git diff-files --exit-code
ok 3 - with -u, git checkout-index picks up stat information from new files.

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2003-checkout-cache-mkdir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2003-checkout-cache-mkdir/.git/
expecting success of 2003.1 'setup': 
	mkdir path1 &&
	echo frotz >path0 &&
	echo rezrov >path1/file1 &&
	git update-index --add path0 path1/file1

ok 1 - setup

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2003.2 'have symlink in place where dir is expected.': 
	rm -fr path0 path1 &&
	mkdir path2 &&
	ln -s path2 path1 &&
	git checkout-index -f -a &&
	test ! -h path1 && test -d path1 &&
	test -f path1/file1 && test ! -f path2/file1

ok 2 - have symlink in place where dir is expected.

expecting success of 2003.3 'use --prefix=path2/': 
	rm -fr path0 path1 path2 &&
	mkdir path2 &&
	git checkout-index --prefix=path2/ -f -a &&
	test -f path2/path0 &&
	test -f path2/path1/file1 &&
	test ! -f path0 &&
	test ! -f path1/file1

ok 3 - use --prefix=path2/

expecting success of 2003.4 'use --prefix=tmp-': 
	rm -fr path0 path1 path2 tmp* &&
	git checkout-index --prefix=tmp- -f -a &&
	test -f tmp-path0 &&
	test -f tmp-path1/file1 &&
	test ! -f path0 &&
	test ! -f path1/file1

ok 4 - use --prefix=tmp-

expecting success of 2003.5 'use --prefix=tmp- but with a conflicting file and dir': 
	rm -fr path0 path1 path2 tmp* &&
	echo nitfol >tmp-path1 &&
	mkdir tmp-path0 &&
	git checkout-index --prefix=tmp- -f -a &&
	test -f tmp-path0 &&
	test -f tmp-path1/file1 &&
	test ! -f path0 &&
	test ! -f path1/file1

ok 5 - use --prefix=tmp- but with a conflicting file and dir

expecting success of 2003.6 'use --prefix=tmp/orary/ where tmp is a symlink': 
	rm -fr path0 path1 path2 tmp* &&
	mkdir tmp1 tmp1/orary &&
	ln -s tmp1 tmp &&
	git checkout-index --prefix=tmp/orary/ -f -a &&
	test -d tmp1/orary &&
	test -f tmp1/orary/path0 &&
	test -f tmp1/orary/path1/file1 &&
	test -h tmp

ok 6 - use --prefix=tmp/orary/ where tmp is a symlink

expecting success of 2003.7 'use --prefix=tmp/orary- where tmp is a symlink': 
	rm -fr path0 path1 path2 tmp* &&
	mkdir tmp1 &&
	ln -s tmp1 tmp &&
	git checkout-index --prefix=tmp/orary- -f -a &&
	test -f tmp1/orary-path0 &&
	test -f tmp1/orary-path1/file1 &&
	test -h tmp

ok 7 - use --prefix=tmp/orary- where tmp is a symlink

expecting success of 2003.8 'use --prefix=tmp- where tmp-path1 is a symlink': 
	rm -fr path0 path1 path2 tmp* &&
	mkdir tmp1 &&
	ln -s tmp1 tmp-path1 &&
	git checkout-index --prefix=tmp- -f -a &&
	test -f tmp-path0 &&
	test ! -h tmp-path1 &&
	test -d tmp-path1 &&
	test -f tmp-path1/file1

ok 8 - use --prefix=tmp- where tmp-path1 is a symlink

expecting success of 2003.9 'apply filter from working tree .gitattributes with --prefix': 
	rm -fr path0 path1 path2 tmp* &&
	mkdir path1 &&
	mkdir tmp &&
	git config filter.replace-all.smudge "sed -e s/./,/g" &&
	git config filter.replace-all.clean cat &&
	git config filter.replace-all.required true &&
	echo "file1 filter=replace-all" >path1/.gitattributes &&
	git checkout-index --prefix=tmp/ -f -a &&
	echo frotz >expected &&
	test_cmp expected tmp/path0 &&
	echo ,,,,,, >expected &&
	test_cmp expected tmp/path1/file1

ok 9 - apply filter from working tree .gitattributes with --prefix

expecting success of 2003.10 'apply CRLF filter from working tree .gitattributes with --prefix': 
	rm -fr path0 path1 path2 tmp* &&
	mkdir path1 &&
	mkdir tmp &&
	echo "file1 eol=crlf" >path1/.gitattributes &&
	git checkout-index --prefix=tmp/ -f -a &&
	echo rezrovQ >expected &&
	tr \\015 Q <tmp/path1/file1 >actual &&
	test_cmp expected actual

ok 10 - apply CRLF filter from working tree .gitattributes with --prefix

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2004-checkout-cache-temp.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2004-checkout-cache-temp/.git/
expecting success of 2004.1 'setup': 
	mkdir asubdir &&
	echo tree1path0 >path0 &&
	echo tree1path1 >path1 &&
	echo tree1path3 >path3 &&
	echo tree1path4 >path4 &&
	echo tree1asubdir/path5 >asubdir/path5 &&
	git update-index --add path0 path1 path3 path4 asubdir/path5 &&
	t1=$(git write-tree) &&
	rm -f path* .merge_* actual .git/index &&
	echo tree2path0 >path0 &&
	echo tree2path1 >path1 &&
	echo tree2path2 >path2 &&
	echo tree2path4 >path4 &&
	git update-index --add path0 path1 path2 path4 &&
	t2=$(git write-tree) &&
	rm -f path* .merge_* actual .git/index &&
	echo tree2path0 >path0 &&
	echo tree3path1 >path1 &&
	echo tree3path2 >path2 &&
	echo tree3path3 >path3 &&
	git update-index --add path0 path1 path2 path3 &&
	t3=$(git write-tree)

ok 1 - setup

expecting success of 2004.2 'checkout one stage 0 to temporary file': 
	rm -f path* .merge_* actual .git/index &&
	git read-tree $t1 &&
	git checkout-index --temp -- path1 >actual &&
	test_line_count = 1 actual &&
	test $(cut "-d	" -f2 actual) = path1 &&
	p=$(cut "-d	" -f1 actual) &&
	test -f $p &&
	test $(cat $p) = tree1path1

ok 2 - checkout one stage 0 to temporary file

expecting success of 2004.3 'checkout all stage 0 to temporary files': 
	rm -f path* .merge_* actual .git/index &&
	git read-tree $t1 &&
	git checkout-index -a --temp >actual &&
	test_line_count = 5 actual &&
	for f in path0 path1 path3 path4 asubdir/path5
	do
		test $(grep $f actual | cut "-d	" -f2) = $f &&
		p=$(grep $f actual | cut "-d	" -f1) &&
		test -f $p &&
		test $(cat $p) = tree1$f || return 1
	done

ok 3 - checkout all stage 0 to temporary files

expecting success of 2004.4 'setup 3-way merge': 
	rm -f path* .merge_* actual .git/index &&
	git read-tree -m $t1 $t2 $t3

ok 4 - setup 3-way merge

expecting success of 2004.5 'checkout one stage 2 to temporary file': 
	rm -f path* .merge_* actual &&
	git checkout-index --stage=2 --temp -- path1 >actual &&
	test_line_count = 1 actual &&
	test $(cut "-d	" -f2 actual) = path1 &&
	p=$(cut "-d	" -f1 actual) &&
	test -f $p &&
	test $(cat $p) = tree2path1

ok 5 - checkout one stage 2 to temporary file

expecting success of 2004.6 'checkout all stage 2 to temporary files': 
	rm -f path* .merge_* actual &&
	git checkout-index --all --stage=2 --temp >actual &&
	test_line_count = 3 actual &&
	for f in path1 path2 path4
	do
		test $(grep $f actual | cut "-d	" -f2) = $f &&
		p=$(grep $f actual | cut "-d	" -f1) &&
		test -f $p &&
		test $(cat $p) = tree2$f || return 1
	done

ok 6 - checkout all stage 2 to temporary files

expecting success of 2004.7 'checkout all stages of unknown path': 
	rm -f path* .merge_* actual &&
	test_must_fail git checkout-index --stage=all --temp \
		-- does-not-exist 2>stderr &&
	test_i18ngrep not.in.the.cache stderr

git checkout-index: does-not-exist is not in the cache
ok 7 - checkout all stages of unknown path

expecting success of 2004.8 'checkout all stages/one file to nothing': 
	rm -f path* .merge_* actual &&
	git checkout-index --stage=all --temp -- path0 >actual 2>stderr &&
	test_must_be_empty stderr &&
	test_line_count = 0 actual

ok 8 - checkout all stages/one file to nothing

expecting success of 2004.9 'checkout all stages/one file to temporary files': 
	rm -f path* .merge_* actual &&
	git checkout-index --stage=all --temp -- path1 >actual &&
	test_line_count = 1 actual &&
	test $(cut "-d	" -f2 actual) = path1 &&
	cut "-d	" -f1 actual | (read s1 s2 s3 &&
	test -f $s1 &&
	test -f $s2 &&
	test -f $s3 &&
	test $(cat $s1) = tree1path1 &&
	test $(cat $s2) = tree2path1 &&
	test $(cat $s3) = tree3path1)

ok 9 - checkout all stages/one file to temporary files

expecting success of 2004.10 'checkout some stages/one file to temporary files': 
	rm -f path* .merge_* actual &&
	git checkout-index --stage=all --temp -- path2 >actual &&
	test_line_count = 1 actual &&
	test $(cut "-d	" -f2 actual) = path2 &&
	cut "-d	" -f1 actual | (read s1 s2 s3 &&
	test $s1 = . &&
	test -f $s2 &&
	test -f $s3 &&
	test $(cat $s2) = tree2path2 &&
	test $(cat $s3) = tree3path2)

ok 10 - checkout some stages/one file to temporary files

expecting success of 2004.11 'checkout all stages/all files to temporary files': 
	rm -f path* .merge_* actual &&
	git checkout-index -a --stage=all --temp >actual &&
	test_line_count = 5 actual

ok 11 - checkout all stages/all files to temporary files

expecting success of 2004.12 '-- path0: no entry': 
	test x$(grep path0 actual | cut "-d	" -f2) = x

ok 12 - -- path0: no entry

expecting success of 2004.13 '-- path1: all 3 stages': 
	test $(grep path1 actual | cut "-d	" -f2) = path1 &&
	grep path1 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
	test -f $s1 &&
	test -f $s2 &&
	test -f $s3 &&
	test $(cat $s1) = tree1path1 &&
	test $(cat $s2) = tree2path1 &&
	test $(cat $s3) = tree3path1)

ok 13 - -- path1: all 3 stages

expecting success of 2004.14 '-- path2: no stage 1, have stage 2 and 3': 
	test $(grep path2 actual | cut "-d	" -f2) = path2 &&
	grep path2 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
	test $s1 = . &&
	test -f $s2 &&
	test -f $s3 &&
	test $(cat $s2) = tree2path2 &&
	test $(cat $s3) = tree3path2)

ok 14 - -- path2: no stage 1, have stage 2 and 3

expecting success of 2004.15 '-- path3: no stage 2, have stage 1 and 3': 
	test $(grep path3 actual | cut "-d	" -f2) = path3 &&
	grep path3 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
	test -f $s1 &&
	test $s2 = . &&
	test -f $s3 &&
	test $(cat $s1) = tree1path3 &&
	test $(cat $s3) = tree3path3)

ok 15 - -- path3: no stage 2, have stage 1 and 3

expecting success of 2004.16 '-- path4: no stage 3, have stage 1 and 3': 
	test $(grep path4 actual | cut "-d	" -f2) = path4 &&
	grep path4 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
	test -f $s1 &&
	test -f $s2 &&
	test $s3 = . &&
	test $(cat $s1) = tree1path4 &&
	test $(cat $s2) = tree2path4)

ok 16 - -- path4: no stage 3, have stage 1 and 3

expecting success of 2004.17 '-- asubdir/path5: no stage 2 and 3 have stage 1': 
	test $(grep asubdir/path5 actual | cut "-d	" -f2) = asubdir/path5 &&
	grep asubdir/path5 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
	test -f $s1 &&
	test $s2 = . &&
	test $s3 = . &&
	test $(cat $s1) = tree1asubdir/path5)

ok 17 - -- asubdir/path5: no stage 2 and 3 have stage 1

expecting success of 2004.18 'checkout --temp within subdir': 
	(
		cd asubdir &&
		git checkout-index -a --stage=all >actual &&
		test_line_count = 1 actual &&
		test $(grep path5 actual | cut "-d	" -f2) = path5 &&
		grep path5 actual | cut "-d	" -f1 | (read s1 s2 s3 &&
		test -f ../$s1 &&
		test $s2 = . &&
		test $s3 = . &&
		test $(cat ../$s1) = tree1asubdir/path5)
	)

ok 18 - checkout --temp within subdir

expecting success of 2004.19 'checkout --temp symlink': 
	rm -f path* .merge_* actual .git/index &&
	test_ln_s_add path7 path6 &&
	git checkout-index --temp -a >actual &&
	test_line_count = 1 actual &&
	test $(cut "-d	" -f2 actual) = path6 &&
	p=$(cut "-d	" -f1 actual) &&
	test -f $p &&
	test $(cat $p) = path7

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 19 - checkout --temp symlink

expecting success of 2004.20 'emit well-formed relative path': 
	rm -f path* .merge_* actual .git/index &&
	>path0123456789 &&
	git update-index --add path0123456789 &&
	(
		cd asubdir &&
		git checkout-index --temp -- ../path0123456789 >actual &&
		test_line_count = 1 actual &&
		test $(cut "-d	" -f2 actual) = ../path0123456789
	)

ok 20 - emit well-formed relative path

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1510-repo-setup.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/.git/
expecting success of 1510.1 '#0: nonbare repo, no explicit configuration': 
	try_repo 0 unset unset unset "" unset \
		.git "$here/0" "$here/0" "(null)" \
		.git "$here/0" "$here/0" sub/ 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/0/.git/
ok 1 - #0: nonbare repo, no explicit configuration

expecting success of 1510.2 '#1: GIT_WORK_TREE without explicit GIT_DIR is accepted': 
	try_repo 1 "$here" unset unset "" unset \
		"$here/1/.git" "$here" "$here" 1/ \
		"$here/1/.git" "$here" "$here" 1/sub/ 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/1/.git/
ok 2 - #1: GIT_WORK_TREE without explicit GIT_DIR is accepted

expecting success of 1510.3 '#2: worktree defaults to cwd with explicit GIT_DIR': 
	try_repo 2 unset "$here/2/.git" unset "" unset \
		"$here/2/.git" "$here/2" "$here/2" "(null)" \
		"$here/2/.git" "$here/2/sub" "$here/2/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/2/.git/
ok 3 - #2: worktree defaults to cwd with explicit GIT_DIR

expecting success of 1510.4 '#2b: relative GIT_DIR': 
	try_repo 2b unset ".git" unset "" unset \
		".git" "$here/2b" "$here/2b" "(null)" \
		"../.git" "$here/2b/sub" "$here/2b/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/2b/.git/
ok 4 - #2b: relative GIT_DIR

expecting success of 1510.5 '#3: setup': 
	setup_repo 3 unset "" unset &&
	mkdir -p 3/sub/sub 3/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/3/.git/
ok 5 - #3: setup

expecting success of 1510.6 '#3: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 6 - #3: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.7 '#3: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 7 - #3: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.8 '#3: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 8 - #3: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.9 '#3: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 9 - #3: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.10 '#3: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 10 - #3: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.11 '#3: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 11 - #3: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.12 '#4: core.worktree without GIT_DIR set is accepted': 
	setup_repo 4 ../sub "" unset &&
	mkdir -p 4/sub sub &&
	try_case 4 unset unset \
		.git "$here/4/sub" "$here/4" "(null)" \
		"$here/4/.git" "$here/4/sub" "$here/4/sub" "(null)" 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/4/.git/
ok 12 - #4: core.worktree without GIT_DIR set is accepted

expecting success of 1510.13 '#5: core.worktree + GIT_WORK_TREE is accepted': 
	# or: you cannot intimidate away the lack of GIT_DIR setting
	try_repo 5 "$here" unset "$here/5" "" unset \
		"$here/5/.git" "$here" "$here" 5/ \
		"$here/5/.git" "$here" "$here" 5/sub/ 2>message &&
	try_repo 5a .. unset "$here/5a" "" unset \
		"$here/5a/.git" "$here" "$here" 5a/ \
		"$here/5a/.git" "$here/5a" "$here/5a" sub/ &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/5/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/5a/.git/
ok 13 - #5: core.worktree + GIT_WORK_TREE is accepted

expecting success of 1510.14 '#6: setting GIT_DIR brings core.worktree to life': 
	setup_repo 6 "$here/6" "" unset &&
	try_case 6 unset .git \
		.git "$here/6" "$here/6" "(null)" &&
	try_case 6 unset "$here/6/.git" \
		"$here/6/.git" "$here/6" "$here/6" "(null)" &&
	try_case 6/sub/sub unset ../../.git \
		"$here/6/.git" "$here/6" "$here/6" sub/sub/ &&
	try_case 6/sub/sub unset "$here/6/.git" \
		"$here/6/.git" "$here/6" "$here/6" sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6/.git/
ok 14 - #6: setting GIT_DIR brings core.worktree to life

expecting success of 1510.15 '#6b: GIT_DIR set, core.worktree relative': 
	setup_repo 6b .. "" unset &&
	try_case 6b unset .git \
		.git "$here/6b" "$here/6b" "(null)" &&
	try_case 6b unset "$here/6b/.git" \
		"$here/6b/.git" "$here/6b" "$here/6b" "(null)" &&
	try_case 6b/sub/sub unset ../../.git \
		"$here/6b/.git" "$here/6b" "$here/6b" sub/sub/ &&
	try_case 6b/sub/sub unset "$here/6b/.git" \
		"$here/6b/.git" "$here/6b" "$here/6b" sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6b/.git/
ok 15 - #6b: GIT_DIR set, core.worktree relative

expecting success of 1510.16 '#6c: GIT_DIR set, core.worktree=../wt (absolute)': 
	setup_repo 6c "$here/6c/wt" "" unset &&
	mkdir -p 6c/wt/sub &&

	try_case 6c unset .git \
		.git "$here/6c/wt" "$here/6c" "(null)" &&
	try_case 6c unset "$here/6c/.git" \
		"$here/6c/.git" "$here/6c/wt" "$here/6c" "(null)" &&
	try_case 6c/sub/sub unset ../../.git \
		../../.git "$here/6c/wt" "$here/6c/sub/sub" "(null)" &&
	try_case 6c/sub/sub unset "$here/6c/.git" \
		"$here/6c/.git" "$here/6c/wt" "$here/6c/sub/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6c/.git/
ok 16 - #6c: GIT_DIR set, core.worktree=../wt (absolute)

expecting success of 1510.17 '#6d: GIT_DIR set, core.worktree=../wt (relative)': 
	setup_repo 6d "$here/6d/wt" "" unset &&
	mkdir -p 6d/wt/sub &&

	try_case 6d unset .git \
		.git "$here/6d/wt" "$here/6d" "(null)" &&
	try_case 6d unset "$here/6d/.git" \
		"$here/6d/.git" "$here/6d/wt" "$here/6d" "(null)" &&
	try_case 6d/sub/sub unset ../../.git \
		../../.git "$here/6d/wt" "$here/6d/sub/sub" "(null)" &&
	try_case 6d/sub/sub unset "$here/6d/.git" \
		"$here/6d/.git" "$here/6d/wt" "$here/6d/sub/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6d/.git/
ok 17 - #6d: GIT_DIR set, core.worktree=../wt (relative)

expecting success of 1510.18 '#6e: GIT_DIR set, core.worktree=../.. (absolute)': 
	setup_repo 6e "$here" "" unset &&
	try_case 6e unset .git \
		"$here/6e/.git" "$here" "$here" 6e/ &&
	try_case 6e unset "$here/6e/.git" \
		"$here/6e/.git" "$here" "$here" 6e/ &&
	try_case 6e/sub/sub unset ../../.git \
		"$here/6e/.git" "$here" "$here" 6e/sub/sub/ &&
	try_case 6e/sub/sub unset "$here/6e/.git" \
		"$here/6e/.git" "$here" "$here" 6e/sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6e/.git/
ok 18 - #6e: GIT_DIR set, core.worktree=../.. (absolute)

expecting success of 1510.19 '#6f: GIT_DIR set, core.worktree=../.. (relative)': 
	setup_repo 6f ../../ "" unset &&
	try_case 6f unset .git \
		"$here/6f/.git" "$here" "$here" 6f/ &&
	try_case 6f unset "$here/6f/.git" \
		"$here/6f/.git" "$here" "$here" 6f/ &&
	try_case 6f/sub/sub unset ../../.git \
		"$here/6f/.git" "$here" "$here" 6f/sub/sub/ &&
	try_case 6f/sub/sub unset "$here/6f/.git" \
		"$here/6f/.git" "$here" "$here" 6f/sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/6f/.git/
ok 19 - #6f: GIT_DIR set, core.worktree=../.. (relative)

expecting success of 1510.20 '#7: setup': 
	setup_repo 7 non-existent "" unset &&
	mkdir -p 7/sub/sub 7/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/7/.git/
ok 20 - #7: setup

expecting success of 1510.21 '#7: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 21 - #7: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.22 '#7: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 22 - #7: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.23 '#7: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 23 - #7: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.24 '#7: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 24 - #7: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.25 '#7: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 25 - #7: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.26 '#7: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 26 - #7: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.27 '#8: gitfile, easy case': 
	try_repo 8 unset unset unset gitfile unset \
		"$here/8.git" "$here/8" "$here/8" "(null)" \
		"$here/8.git" "$here/8" "$here/8" sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/8/.git/
ok 27 - #8: gitfile, easy case

expecting success of 1510.28 '#9: GIT_WORK_TREE accepted with gitfile': 
	mkdir -p 9/wt &&
	try_repo 9 wt unset unset gitfile unset \
		"$here/9.git" "$here/9/wt" "$here/9" "(null)" \
		"$here/9.git" "$here/9/sub/wt" "$here/9/sub" "(null)" 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/9/.git/
ok 28 - #9: GIT_WORK_TREE accepted with gitfile

expecting success of 1510.29 '#10: GIT_DIR can point to gitfile': 
	try_repo 10 unset "$here/10/.git" unset gitfile unset \
		"$here/10.git" "$here/10" "$here/10" "(null)" \
		"$here/10.git" "$here/10/sub" "$here/10/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/10/.git/
ok 29 - #10: GIT_DIR can point to gitfile

expecting success of 1510.30 '#10b: relative GIT_DIR can point to gitfile': 
	try_repo 10b unset .git unset gitfile unset \
		"$here/10b.git" "$here/10b" "$here/10b" "(null)" \
		"$here/10b.git" "$here/10b/sub" "$here/10b/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/10b/.git/
ok 30 - #10b: relative GIT_DIR can point to gitfile

expecting success of 1510.31 '#11: setup': 
	setup_repo 11 unset gitfile unset &&
	mkdir -p 11/sub/sub 11/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/11/.git/
ok 31 - #11: setup

expecting success of 1510.32 '#11: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 32 - #11: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.33 '#11: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 33 - #11: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.34 '#11: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 34 - #11: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.35 '#11: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 35 - #11: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.36 '#11: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 36 - #11: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.37 '#11: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 37 - #11: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.38 '#12: core.worktree with gitfile is accepted': 
	try_repo 12 unset unset "$here/12" gitfile unset \
		"$here/12.git" "$here/12" "$here/12" "(null)" \
		"$here/12.git" "$here/12" "$here/12" sub/ 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/12/.git/
ok 38 - #12: core.worktree with gitfile is accepted

expecting success of 1510.39 '#13: core.worktree+GIT_WORK_TREE accepted (with gitfile)': 
	# or: you cannot intimidate away the lack of GIT_DIR setting
	try_repo 13 non-existent-too unset non-existent gitfile unset \
		"$here/13.git" "$here/13/non-existent-too" "$here/13" "(null)" \
		"$here/13.git" "$here/13/sub/non-existent-too" "$here/13/sub" "(null)" 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/13/.git/
ok 39 - #13: core.worktree+GIT_WORK_TREE accepted (with gitfile)

expecting success of 1510.40 '#14: core.worktree with GIT_DIR pointing to gitfile': 
	setup_repo 14 "$here/14" gitfile unset &&
	try_case 14 unset .git \
		"$here/14.git" "$here/14" "$here/14" "(null)" &&
	try_case 14 unset "$here/14/.git" \
		"$here/14.git" "$here/14" "$here/14" "(null)" &&
	try_case 14/sub/sub unset ../../.git \
		"$here/14.git" "$here/14" "$here/14" sub/sub/ &&
	try_case 14/sub/sub unset "$here/14/.git" \
		"$here/14.git" "$here/14" "$here/14" sub/sub/ &&

	setup_repo 14c "$here/14c/wt" gitfile unset &&
	mkdir -p 14c/wt/sub &&

	try_case 14c unset .git \
		"$here/14c.git" "$here/14c/wt" "$here/14c" "(null)" &&
	try_case 14c unset "$here/14c/.git" \
		"$here/14c.git" "$here/14c/wt" "$here/14c" "(null)" &&
	try_case 14c/sub/sub unset ../../.git \
		"$here/14c.git" "$here/14c/wt" "$here/14c/sub/sub" "(null)" &&
	try_case 14c/sub/sub unset "$here/14c/.git" \
		"$here/14c.git" "$here/14c/wt" "$here/14c/sub/sub" "(null)" &&

	setup_repo 14d "$here/14d/wt" gitfile unset &&
	mkdir -p 14d/wt/sub &&

	try_case 14d unset .git \
		"$here/14d.git" "$here/14d/wt" "$here/14d" "(null)" &&
	try_case 14d unset "$here/14d/.git" \
		"$here/14d.git" "$here/14d/wt" "$here/14d" "(null)" &&
	try_case 14d/sub/sub unset ../../.git \
		"$here/14d.git" "$here/14d/wt" "$here/14d/sub/sub" "(null)" &&
	try_case 14d/sub/sub unset "$here/14d/.git" \
		"$here/14d.git" "$here/14d/wt" "$here/14d/sub/sub" "(null)" &&

	setup_repo 14e "$here" gitfile unset &&
	try_case 14e unset .git \
		"$here/14e.git" "$here" "$here" 14e/ &&
	try_case 14e unset "$here/14e/.git" \
		"$here/14e.git" "$here" "$here" 14e/ &&
	try_case 14e/sub/sub unset ../../.git \
		"$here/14e.git" "$here" "$here" 14e/sub/sub/ &&
	try_case 14e/sub/sub unset "$here/14e/.git" \
		"$here/14e.git" "$here" "$here" 14e/sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14c/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14d/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14e/.git/
ok 40 - #14: core.worktree with GIT_DIR pointing to gitfile

expecting success of 1510.41 '#14b: core.worktree is relative to actual git dir': 
	setup_repo 14b ../14b gitfile unset &&
	try_case 14b unset .git \
		"$here/14b.git" "$here/14b" "$here/14b" "(null)" &&
	try_case 14b unset "$here/14b/.git" \
		"$here/14b.git" "$here/14b" "$here/14b" "(null)" &&
	try_case 14b/sub/sub unset ../../.git \
		"$here/14b.git" "$here/14b" "$here/14b" sub/sub/ &&
	try_case 14b/sub/sub unset "$here/14b/.git" \
		"$here/14b.git" "$here/14b" "$here/14b" sub/sub/ &&

	setup_repo 14f ../ gitfile unset &&
	try_case 14f unset .git \
		"$here/14f.git" "$here" "$here" 14f/ &&
	try_case 14f unset "$here/14f/.git" \
		"$here/14f.git" "$here" "$here" 14f/ &&
	try_case 14f/sub/sub unset ../../.git \
		"$here/14f.git" "$here" "$here" 14f/sub/sub/ &&
	try_case 14f/sub/sub unset "$here/14f/.git" \
		"$here/14f.git" "$here" "$here" 14f/sub/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14b/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/14f/.git/
ok 41 - #14b: core.worktree is relative to actual git dir

expecting success of 1510.42 '#15: setup': 
	setup_repo 15 non-existent gitfile unset &&
	mkdir -p 15/sub/sub 15/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/15/.git/
ok 42 - #15: setup

expecting success of 1510.43 '#15: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 43 - #15: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.44 '#15: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 44 - #15: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.45 '#15: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 45 - #15: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.46 '#15: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 46 - #15: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.47 '#15: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 47 - #15: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.48 '#15: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 48 - #15: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.49 '#16a: implicitly bare repo (cwd inside .git dir)': 
	setup_repo 16a unset "" unset &&
	mkdir -p 16a/.git/wt/sub &&

	try_case 16a/.git unset unset \
		. "(null)" "$here/16a/.git" "(null)" &&
	try_case 16a/.git/wt unset unset \
		"$here/16a/.git" "(null)" "$here/16a/.git/wt" "(null)" &&
	try_case 16a/.git/wt/sub unset unset \
		"$here/16a/.git" "(null)" "$here/16a/.git/wt/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/16a/.git/
ok 49 - #16a: implicitly bare repo (cwd inside .git dir)

expecting success of 1510.50 '#16b: bare .git (cwd inside .git dir)': 
	setup_repo 16b unset "" true &&
	mkdir -p 16b/.git/wt/sub &&

	try_case 16b/.git unset unset \
		. "(null)" "$here/16b/.git" "(null)" &&
	try_case 16b/.git/wt unset unset \
		"$here/16b/.git" "(null)" "$here/16b/.git/wt" "(null)" &&
	try_case 16b/.git/wt/sub unset unset \
		"$here/16b/.git" "(null)" "$here/16b/.git/wt/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/16b/.git/
ok 50 - #16b: bare .git (cwd inside .git dir)

expecting success of 1510.51 '#16c: bare .git has no worktree': 
	try_repo 16c unset unset unset "" true \
		.git "(null)" "$here/16c" "(null)" \
		"$here/16c/.git" "(null)" "$here/16c/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/16c/.git/
ok 51 - #16c: bare .git has no worktree

expecting success of 1510.52 '#16d: bareness preserved across alias': 
	setup_repo 16d unset "" unset &&
	(
		cd 16d/.git &&
		test_must_fail git status &&
		git config alias.st status &&
		test_must_fail git st
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/16d/.git/
fatal: this operation must be run in a work tree
fatal: this operation must be run in a work tree
ok 52 - #16d: bareness preserved across alias

expecting success of 1510.53 '#16e: bareness preserved by --bare': 
	setup_repo 16e unset "" unset &&
	(
		cd 16e/.git &&
		test_must_fail git status &&
		test_must_fail git --bare status
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/16e/.git/
fatal: this operation must be run in a work tree
fatal: this operation must be run in a work tree
ok 53 - #16e: bareness preserved by --bare

expecting success of 1510.54 '#17: GIT_WORK_TREE without explicit GIT_DIR is accepted (bare case)': 
	# Just like #16.
	setup_repo 17a unset "" true &&
	setup_repo 17b unset "" true &&
	mkdir -p 17a/.git/wt/sub &&
	mkdir -p 17b/.git/wt/sub &&

	try_case 17a/.git "$here/17a" unset \
		"$here/17a/.git" "$here/17a" "$here/17a" .git/ \
		2>message &&
	try_case 17a/.git/wt "$here/17a" unset \
		"$here/17a/.git" "$here/17a" "$here/17a" .git/wt/ &&
	try_case 17a/.git/wt/sub "$here/17a" unset \
		"$here/17a/.git" "$here/17a" "$here/17a" .git/wt/sub/ &&

	try_case 17b/.git "$here/17b" unset \
		"$here/17b/.git" "$here/17b" "$here/17b" .git/ &&
	try_case 17b/.git/wt "$here/17b" unset \
		"$here/17b/.git" "$here/17b" "$here/17b" .git/wt/ &&
	try_case 17b/.git/wt/sub "$here/17b" unset \
		"$here/17b/.git" "$here/17b" "$here/17b" .git/wt/sub/ &&

	try_repo 17c "$here/17c" unset unset "" true \
		.git "$here/17c" "$here/17c" "(null)" \
		"$here/17c/.git" "$here/17c" "$here/17c" sub/ 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/17a/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/17b/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/17c/.git/
ok 54 - #17: GIT_WORK_TREE without explicit GIT_DIR is accepted (bare case)

expecting success of 1510.55 '#18: bare .git named by GIT_DIR has no worktree': 
	try_repo 18 unset .git unset "" true \
		.git "(null)" "$here/18" "(null)" \
		../.git "(null)" "$here/18/sub" "(null)" &&
	try_repo 18b unset "$here/18b/.git" unset "" true \
		"$here/18b/.git" "(null)" "$here/18b" "(null)" \
		"$here/18b/.git" "(null)" "$here/18b/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/18/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/18b/.git/
ok 55 - #18: bare .git named by GIT_DIR has no worktree

expecting success of 1510.56 '#19: setup': 
	setup_repo 19 unset "" true &&
	mkdir -p 19/sub/sub 19/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/19/.git/
ok 56 - #19: setup

expecting success of 1510.57 '#19: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 57 - #19: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.58 '#19: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 58 - #19: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.59 '#19: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 59 - #19: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.60 '#19: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 60 - #19: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.61 '#19: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 61 - #19: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.62 '#19: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 62 - #19: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.63 '#20a: core.worktree without GIT_DIR accepted (inside .git)': 
	# Unlike case #16a.
	setup_repo 20a "$here/20a" "" unset &&
	mkdir -p 20a/.git/wt/sub &&
	try_case 20a/.git unset unset \
		"$here/20a/.git" "$here/20a" "$here/20a" .git/ 2>message &&
	try_case 20a/.git/wt unset unset \
		"$here/20a/.git" "$here/20a" "$here/20a" .git/wt/ &&
	try_case 20a/.git/wt/sub unset unset \
		"$here/20a/.git" "$here/20a" "$here/20a" .git/wt/sub/ &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/20a/.git/
ok 63 - #20a: core.worktree without GIT_DIR accepted (inside .git)

expecting success of 1510.64 '#20b/c: core.worktree and core.bare conflict': 
	setup_repo 20b non-existent "" true &&
	mkdir -p 20b/.git/wt/sub &&
	(
		cd 20b/.git &&
		test_must_fail git status >/dev/null
	) 2>message &&
	grep "core.bare and core.worktree" message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/20b/.git/
warning: core.bare and core.worktree do not make sense
ok 64 - #20b/c: core.worktree and core.bare conflict

expecting success of 1510.65 '#20d: core.worktree and core.bare OK when working tree not needed': 
	setup_repo 20d non-existent "" true &&
	mkdir -p 20d/.git/wt/sub &&
	(
		cd 20d/.git &&
		git config foo.bar value
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/20d/.git/
warning: core.bare and core.worktree do not make sense
ok 65 - #20d: core.worktree and core.bare OK when working tree not needed

expecting success of 1510.66 '#21: setup, core.worktree warns before overriding core.bare': 
	setup_repo 21 non-existent "" unset &&
	mkdir -p 21/.git/wt/sub &&
	(
		cd 21/.git &&
		GIT_WORK_TREE="$here/21" &&
		export GIT_WORK_TREE &&
		git status >/dev/null
	) 2>message &&
	test_must_be_empty message


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/21/.git/
ok 66 - #21: setup, core.worktree warns before overriding core.bare

expecting success of 1510.67 '#21: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 67 - #21: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.68 '#21: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 68 - #21: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.69 '#21: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 69 - #21: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.70 '#21: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 70 - #21: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.71 '#21: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 71 - #21: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.72 '#21: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 72 - #21: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.73 '#22a: core.worktree = GIT_DIR = .git dir': 
	# like case #6.

	setup_repo 22a "$here/22a/.git" "" unset &&
	setup_repo 22ab . "" unset &&
	mkdir -p 22a/.git/sub 22a/sub &&
	mkdir -p 22ab/.git/sub 22ab/sub &&
	try_case 22a/.git unset . \
		. "$here/22a/.git" "$here/22a/.git" "(null)" &&
	try_case 22a/.git unset "$here/22a/.git" \
		"$here/22a/.git" "$here/22a/.git" "$here/22a/.git" "(null)" &&
	try_case 22a/.git/sub unset .. \
		"$here/22a/.git" "$here/22a/.git" "$here/22a/.git" sub/ &&
	try_case 22a/.git/sub unset "$here/22a/.git" \
		"$here/22a/.git" "$here/22a/.git" "$here/22a/.git" sub/ &&

	try_case 22ab/.git unset . \
		. "$here/22ab/.git" "$here/22ab/.git" "(null)" &&
	try_case 22ab/.git unset "$here/22ab/.git" \
		"$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" "(null)" &&
	try_case 22ab/.git/sub unset .. \
		"$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" sub/ &&
	try_case 22ab/.git unset "$here/22ab/.git" \
		"$here/22ab/.git" "$here/22ab/.git" "$here/22ab/.git" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22a/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22ab/.git/
ok 73 - #22a: core.worktree = GIT_DIR = .git dir

expecting success of 1510.74 '#22b: core.worktree child of .git, GIT_DIR=.git': 
	setup_repo 22b "$here/22b/.git/wt" "" unset &&
	setup_repo 22bb wt "" unset &&
	mkdir -p 22b/.git/sub 22b/sub 22b/.git/wt/sub 22b/wt/sub &&
	mkdir -p 22bb/.git/sub 22bb/sub 22bb/.git/wt 22bb/wt &&

	try_case 22b/.git unset . \
		. "$here/22b/.git/wt" "$here/22b/.git" "(null)" &&
	try_case 22b/.git unset "$here/22b/.git" \
		"$here/22b/.git" "$here/22b/.git/wt" "$here/22b/.git" "(null)" &&
	try_case 22b/.git/sub unset .. \
		.. "$here/22b/.git/wt" "$here/22b/.git/sub" "(null)" &&
	try_case 22b/.git/sub unset "$here/22b/.git" \
		"$here/22b/.git" "$here/22b/.git/wt" "$here/22b/.git/sub" "(null)" &&

	try_case 22bb/.git unset . \
		. "$here/22bb/.git/wt" "$here/22bb/.git" "(null)" &&
	try_case 22bb/.git unset "$here/22bb/.git" \
		"$here/22bb/.git" "$here/22bb/.git/wt" "$here/22bb/.git" "(null)" &&
	try_case 22bb/.git/sub unset .. \
		.. "$here/22bb/.git/wt" "$here/22bb/.git/sub" "(null)" &&
	try_case 22bb/.git/sub unset "$here/22bb/.git" \
		"$here/22bb/.git" "$here/22bb/.git/wt" "$here/22bb/.git/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22b/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22bb/.git/
ok 74 - #22b: core.worktree child of .git, GIT_DIR=.git

expecting success of 1510.75 '#22c: core.worktree = .git/.., GIT_DIR=.git': 
	setup_repo 22c "$here/22c" "" unset &&
	setup_repo 22cb .. "" unset &&
	mkdir -p 22c/.git/sub 22c/sub &&
	mkdir -p 22cb/.git/sub 22cb/sub &&

	try_case 22c/.git unset . \
		"$here/22c/.git" "$here/22c" "$here/22c" .git/ &&
	try_case 22c/.git unset "$here/22c/.git" \
		"$here/22c/.git" "$here/22c" "$here/22c" .git/ &&
	try_case 22c/.git/sub unset .. \
		"$here/22c/.git" "$here/22c" "$here/22c" .git/sub/ &&
	try_case 22c/.git/sub unset "$here/22c/.git" \
		"$here/22c/.git" "$here/22c" "$here/22c" .git/sub/ &&

	try_case 22cb/.git unset . \
		"$here/22cb/.git" "$here/22cb" "$here/22cb" .git/ &&
	try_case 22cb/.git unset "$here/22cb/.git" \
		"$here/22cb/.git" "$here/22cb" "$here/22cb" .git/ &&
	try_case 22cb/.git/sub unset .. \
		"$here/22cb/.git" "$here/22cb" "$here/22cb" .git/sub/ &&
	try_case 22cb/.git/sub unset "$here/22cb/.git" \
		"$here/22cb/.git" "$here/22cb" "$here/22cb" .git/sub/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22c/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22cb/.git/
ok 75 - #22c: core.worktree = .git/.., GIT_DIR=.git

expecting success of 1510.76 '#22.2: core.worktree and core.bare conflict': 
	setup_repo 22 "$here/22" "" true &&
	(
		cd 22/.git &&
		GIT_DIR=. &&
		export GIT_DIR &&
		test_must_fail git status 2>result
	) &&
	(
		cd 22 &&
		GIT_DIR=.git &&
		export GIT_DIR &&
		test_must_fail git status 2>result
	) &&
	grep "core.bare and core.worktree" 22/.git/result &&
	grep "core.bare and core.worktree" 22/result

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/22/.git/
warning: core.bare and core.worktree do not make sense
warning: core.bare and core.worktree do not make sense
ok 76 - #22.2: core.worktree and core.bare conflict

expecting success of 1510.77 '#23: setup': 
	setup_repo 23 non-existent "" true &&
	mkdir -p 23/sub/sub 23/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/23/.git/
ok 77 - #23: setup

expecting success of 1510.78 '#23: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 78 - #23: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.79 '#23: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 79 - #23: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.80 '#23: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 80 - #23: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.81 '#23: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 81 - #23: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.82 '#23: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 82 - #23: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.83 '#23: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 83 - #23: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.84 '#24: bare repo has no worktree (gitfile case)': 
	try_repo 24 unset unset unset gitfile true \
		"$here/24.git" "(null)" "$here/24" "(null)" \
		"$here/24.git" "(null)" "$here/24/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/24/.git/
ok 84 - #24: bare repo has no worktree (gitfile case)

expecting success of 1510.85 '#25: GIT_WORK_TREE accepted if GIT_DIR unset (bare gitfile case)': 
	try_repo 25 "$here/25" unset unset gitfile true \
		"$here/25.git" "$here/25" "$here/25" "(null)"  \
		"$here/25.git" "$here/25" "$here/25" "sub/" 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/25/.git/
ok 85 - #25: GIT_WORK_TREE accepted if GIT_DIR unset (bare gitfile case)

expecting success of 1510.86 '#26: bare repo has no worktree (GIT_DIR -> gitfile case)': 
	try_repo 26 unset "$here/26/.git" unset gitfile true \
		"$here/26.git" "(null)" "$here/26" "(null)" \
		"$here/26.git" "(null)" "$here/26/sub" "(null)" &&
	try_repo 26b unset .git unset gitfile true \
		"$here/26b.git" "(null)" "$here/26b" "(null)" \
		"$here/26b.git" "(null)" "$here/26b/sub" "(null)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/26/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/26b/.git/
ok 86 - #26: bare repo has no worktree (GIT_DIR -> gitfile case)

expecting success of 1510.87 '#27: setup': 
	setup_repo 27 unset gitfile true &&
	mkdir -p 27/sub/sub 27/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/27/.git/
ok 87 - #27: setup

expecting success of 1510.88 '#27: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 88 - #27: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.89 '#27: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 89 - #27: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.90 '#27: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 90 - #27: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.91 '#27: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 91 - #27: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.92 '#27: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 92 - #27: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.93 '#27: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 93 - #27: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.94 '#28: core.worktree and core.bare conflict (gitfile case)': 
	setup_repo 28 "$here/28" gitfile true &&
	(
		cd 28 &&
		test_must_fail git status
	) 2>message &&
	grep "core.bare and core.worktree" message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/28/.git/
warning: core.bare and core.worktree do not make sense
ok 94 - #28: core.worktree and core.bare conflict (gitfile case)

expecting success of 1510.95 '#29: setup': 
	setup_repo 29 non-existent gitfile true &&
	mkdir -p 29/sub/sub 29/wt/sub &&
	(
		cd 29 &&
		GIT_WORK_TREE="$here/29" &&
		export GIT_WORK_TREE &&
		git status
	) 2>message &&
	test_must_be_empty message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/29/.git/
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
ok 95 - #29: setup

expecting success of 1510.96 '#29: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 96 - #29: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.97 '#29: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 97 - #29: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.98 '#29: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 98 - #29: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.99 '#29: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 99 - #29: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.100 '#29: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 100 - #29: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.101 '#29: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 101 - #29: chdir_to_toplevel uses worktree (from subdir)

expecting success of 1510.102 '#30: core.worktree and core.bare conflict (gitfile version)': 
	# Just like case #22.
	setup_repo 30 "$here/30" gitfile true &&
	(
		cd 30 &&
		test_must_fail env GIT_DIR=.git git status 2>result
	) &&
	grep "core.bare and core.worktree" 30/result

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/30/.git/
warning: core.bare and core.worktree do not make sense
ok 102 - #30: core.worktree and core.bare conflict (gitfile version)

expecting success of 1510.103 '#31: setup': 
	setup_repo 31 non-existent gitfile true &&
	mkdir -p 31/sub/sub 31/wt/sub

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1510-repo-setup/31/.git/
ok 103 - #31: setup

expecting success of 1510.104 '#31: explicit GIT_WORK_TREE and GIT_DIR at toplevel': 
		try_case $N "$here/$N" .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . .git \
			"$dotgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)" &&
		try_case $N . "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" "(null)"
	
ok 104 - #31: explicit GIT_WORK_TREE and GIT_DIR at toplevel

expecting success of 1510.105 '#31: explicit GIT_WORK_TREE and GIT_DIR in subdir': 
		try_case $N/sub/sub "$here/$N" ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. ../../.git \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub "$here/$N" "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/ &&
		try_case $N/sub/sub ../.. "$here/$N/.git" \
			"$absgit" "$here/$N" "$here/$N" sub/sub/
	
ok 105 - #31: explicit GIT_WORK_TREE and GIT_DIR in subdir

expecting success of 1510.106 '#31: explicit GIT_WORK_TREE from parent of worktree': 
		try_case $N "$here/$N/wt" .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt .git \
			"$dotgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)" &&
		try_case $N "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N" "(null)"
	
ok 106 - #31: explicit GIT_WORK_TREE from parent of worktree

expecting success of 1510.107 '#31: explicit GIT_WORK_TREE from nephew of worktree': 
		try_case $N/sub/sub "$here/$N/wt" ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt ../../.git \
			"$dotdotgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub ../../wt "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)" &&
		try_case $N/sub/sub "$here/$N/wt" "$here/$N/.git" \
			"$absgit" "$here/$N/wt" "$here/$N/sub/sub" "(null)"
	
ok 107 - #31: explicit GIT_WORK_TREE from nephew of worktree

expecting success of 1510.108 '#31: chdir_to_toplevel uses worktree, not git dir': 
		try_case $N "$here" .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. .git \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N .. "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/ &&
		try_case $N "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/
	
ok 108 - #31: chdir_to_toplevel uses worktree, not git dir

expecting success of 1510.109 '#31: chdir_to_toplevel uses worktree (from subdir)': 
		try_case $N/sub/sub "$here" ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../.. ../../.git \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub ../../../ "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/ &&
		try_case $N/sub/sub "$here" "$here/$N/.git" \
			"$absgit" "$here" "$here" $N/sub/sub/
	
ok 109 - #31: chdir_to_toplevel uses worktree (from subdir)

# passed all 109 test(s)
1..109
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2005-checkout-index-symlinks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2005-checkout-index-symlinks/.git/
expecting success of 2005.1 'preparation': 
git config core.symlinks false &&
l=$(printf file | git hash-object -t blob -w --stdin) &&
echo "120000 $l	symlink" | git update-index --index-info
ok 1 - preparation

expecting success of 2005.2 'the checked-out symlink must be a file': 
git checkout-index symlink &&
test -f symlink
ok 2 - the checked-out symlink must be a file

expecting success of 2005.3 'the file must be the blob we added during the setup': 
test "$(git hash-object -t blob symlink)" = $l
ok 3 - the file must be the blob we added during the setup

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2007-checkout-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2007-checkout-symlink/.git/
expecting success of 2007.1 'setup': 

	mkdir frotz &&
	echo hello >frotz/filfre &&
	git add frotz/filfre &&
	test_tick &&
	git commit -m "main has file frotz/filfre" &&

	git branch side &&

	echo goodbye >nitfol &&
	git add nitfol &&
	test_tick &&
	git commit -m "main adds file nitfol" &&

	git checkout side &&

	git rm --cached frotz/filfre &&
	mv frotz xyzzy &&
	test_ln_s_add xyzzy frotz &&
	git add xyzzy/filfre &&
	test_tick &&
	git commit -m "side moves frotz/ to xyzzy/ and adds frotz->xyzzy/"


[main (root-commit) 608bc3a] main has file frotz/filfre
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 frotz/filfre
[main f539081] main adds file nitfol
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 nitfol
Switched to branch 'side'
rm 'frotz/filfre'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[side dc669bf] side moves frotz/ to xyzzy/ and adds frotz->xyzzy/
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 frotz
 rename {frotz => xyzzy}/filfre (100%)
ok 1 - setup

expecting success of 2007.2 'switch from symlink to dir': 

	git checkout main


Switched to branch 'main'
ok 2 - switch from symlink to dir

expecting success of 2007.3 'Remove temporary directories & switch to main': 
	rm -fr frotz xyzzy nitfol &&
	git checkout -f main

Already on 'main'
ok 3 - Remove temporary directories & switch to main

expecting success of 2007.4 'switch from dir to symlink': 

	git checkout side


Switched to branch 'side'
ok 4 - switch from dir to symlink

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2006-checkout-index-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2006-checkout-index-basic/.git/
expecting success of 2006.1 'checkout-index --gobbledegook': 
	test_expect_code 129 git checkout-index --gobbledegook 2>err &&
	test_i18ngrep "[Uu]sage" err

usage: git checkout-index [<options>] [--] [<file>...]
ok 1 - checkout-index --gobbledegook

expecting success of 2006.2 'checkout-index -h in broken repository': 
	mkdir broken &&
	(
		cd broken &&
		git init &&
		>.git/index &&
		test_expect_code 129 git checkout-index -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2006-checkout-index-basic/broken/.git/
usage: git checkout-index [<options>] [--] [<file>...]
ok 2 - checkout-index -h in broken repository

expecting success of 2006.3 'checkout-index reports errors (cmdline)': 
	test_must_fail git checkout-index -- does-not-exist 2>stderr &&
	test_i18ngrep not.in.the.cache stderr

git checkout-index: does-not-exist is not in the cache
ok 3 - checkout-index reports errors (cmdline)

expecting success of 2006.4 'checkout-index reports errors (stdin)': 
	echo does-not-exist |
	test_must_fail git checkout-index --stdin 2>stderr &&
	test_i18ngrep not.in.the.cache stderr

git checkout-index: does-not-exist is not in the cache
ok 4 - checkout-index reports errors (stdin)

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 5 # skip checkout-index with case-collision don't write to the wrong place (missing CASE_INSENSITIVE_FS of SYMLINKS,CASE_INSENSITIVE_FS)

checking prerequisite: UTF8_NFD_TO_NFC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
	# check whether FS converts nfd unicode to nfc
	auml=$(printf "\303\244")
	aumlcdiar=$(printf "\141\314\210")
	>"$auml" &&
	test -f "$aumlcdiar"

)
prerequisite UTF8_NFD_TO_NFC not satisfied
ok 6 # skip checkout-index with utf-8-collision don't write to the wrong place (missing UTF8_NFD_TO_NFC of SYMLINKS,UTF8_NFD_TO_NFC)

expecting success of 2006.7 'checkout-index --temp correctly reports error on missing blobs': 
	test_when_finished git reset --hard &&
	missing_blob=$(echo "no such blob here" | git hash-object --stdin) &&
	cat >objs <<-EOF &&
	100644 $missing_blob	file
	120000 $missing_blob	symlink
	EOF
	git update-index --index-info <objs &&

	test_must_fail git checkout-index --temp symlink file 2>stderr &&
	test_i18ngrep "unable to read sha1 file of file ($missing_blob)" stderr &&
	test_i18ngrep "unable to read sha1 file of symlink ($missing_blob)" stderr

.merge_file_uKtgQd	file
error: unable to read sha1 file of file (3685f0bc3974902b137f7dc59ac799c006cdec92)
error: unable to read sha1 file of symlink (3685f0bc3974902b137f7dc59ac799c006cdec92)
ok 7 - checkout-index --temp correctly reports error on missing blobs

expecting success of 2006.8 'checkout-index --temp correctly reports error for submodules': 
	git init sub &&
	test_commit -C sub file &&
	git submodule add ./sub &&
	git commit -m sub &&
	test_must_fail git checkout-index --temp sub 2>stderr &&
	test_i18ngrep "cannot create temporary submodule sub" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2006-checkout-index-basic/sub/.git/
[master (root-commit) 4c1911f] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
Adding existing repo at 'sub' to the index
[master (root-commit) c4df02a] sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
error: cannot create temporary submodule sub
ok 8 - checkout-index --temp correctly reports error for submodules

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2009-checkout-statinfo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2009-checkout-statinfo/.git/
expecting success of 2009.1 'setup': 

	echo hello >world &&
	git update-index --add world &&
	git commit -m initial &&
	git branch side &&
	echo goodbye >world &&
	git update-index --add world &&
	git commit -m second


[main (root-commit) b8cd0f7] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
[main 5892dcd] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 2009.2 'branch switching': 

	git reset --hard &&
	test "$(git diff-files --raw)" = "" &&

	git checkout main &&
	test "$(git diff-files --raw)" = "" &&

	git checkout side &&
	test "$(git diff-files --raw)" = "" &&

	git checkout main &&
	test "$(git diff-files --raw)" = ""


HEAD is now at 5892dcd second
Already on 'main'
Switched to branch 'side'
Switched to branch 'main'
ok 2 - branch switching

expecting success of 2009.3 'path checkout': 

	git reset --hard &&
	test "$(git diff-files --raw)" = "" &&

	git checkout main world &&
	test "$(git diff-files --raw)" = "" &&

	git checkout side world &&
	test "$(git diff-files --raw)" = "" &&

	git checkout main world &&
	test "$(git diff-files --raw)" = ""


HEAD is now at 5892dcd second
Updated 0 paths from c356a2a
Updated 1 path from dbd05ee
Updated 1 path from c356a2a
ok 3 - path checkout

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2008-checkout-subdir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2008-checkout-subdir/.git/
expecting success of 2008.1 'setup': 

	echo "base" > file0 &&
	git add file0 &&
	mkdir dir1 &&
	echo "hello" > dir1/file1 &&
	git add dir1/file1 &&
	mkdir dir2 &&
	echo "bonjour" > dir2/file2 &&
	git add dir2/file2 &&
	test_tick &&
	git commit -m "populate tree"


[master (root-commit) 15793b3] populate tree
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 dir1/file1
 create mode 100644 dir2/file2
 create mode 100644 file0
ok 1 - setup

expecting success of 2008.2 'remove and restore with relative path': 

	(
		cd dir1 &&
		rm ../file0 &&
		git checkout HEAD -- ../file0 &&
		test "base" = "$(cat ../file0)" &&
		rm ../dir2/file2 &&
		git checkout HEAD -- ../dir2/file2 &&
		test "bonjour" = "$(cat ../dir2/file2)" &&
		rm ../file0 ./file1 &&
		git checkout HEAD -- .. &&
		test "base" = "$(cat ../file0)" &&
		test "hello" = "$(cat file1)"
	)


ok 2 - remove and restore with relative path

expecting success of 2008.3 'checkout with empty prefix': 

	rm file0 &&
	git checkout HEAD -- file0 &&
	test "base" = "$(cat file0)"


ok 3 - checkout with empty prefix

expecting success of 2008.4 'checkout with simple prefix': 

	rm dir1/file1 &&
	git checkout HEAD -- dir1 &&
	test "hello" = "$(cat dir1/file1)" &&
	rm dir1/file1 &&
	git checkout HEAD -- dir1/file1 &&
	test "hello" = "$(cat dir1/file1)"


ok 4 - checkout with simple prefix

expecting success of 2008.5 'checkout with complex relative path': 
	(
		cd dir1 &&
		rm file1 &&
		git checkout HEAD -- ../dir1/../dir1/file1 &&
		test "hello" = "$(cat file1)"
	)

ok 5 - checkout with complex relative path

expecting success of 2008.6 'relative path outside tree should fail': test_must_fail git checkout HEAD -- ../../Makefile
fatal: ../../Makefile: '../../Makefile' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t2008-checkout-subdir'
ok 6 - relative path outside tree should fail

expecting success of 2008.7 'incorrect relative path to file should fail (1)': test_must_fail git checkout HEAD -- ../file0
fatal: ../file0: '../file0' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t2008-checkout-subdir'
ok 7 - incorrect relative path to file should fail (1)

expecting success of 2008.8 'incorrect relative path should fail (2)': ( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )
error: pathspec './file0' did not match any file(s) known to git
ok 8 - incorrect relative path should fail (2)

expecting success of 2008.9 'incorrect relative path should fail (3)': ( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )
fatal: ../../file0: '../../file0' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t2008-checkout-subdir'
ok 9 - incorrect relative path should fail (3)

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2010-checkout-ambiguous.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2010-checkout-ambiguous/.git/
expecting success of 2010.1 'setup': 
	echo hello >world &&
	echo hello >all &&
	git add all world &&
	git commit -m initial &&
	git branch world

[main (root-commit) c5e2eee] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 all
 create mode 100644 world
ok 1 - setup

expecting success of 2010.2 'reference must be a tree': 
	test_must_fail git checkout $(git hash-object ./all) --

fatal: reference is not a tree: ce013625030ba8dba906f756967f9e9ca394464a
ok 2 - reference must be a tree

expecting success of 2010.3 'branch switching': 
	test "refs/heads/main" = "$(git symbolic-ref HEAD)" &&
	git checkout world -- &&
	test "refs/heads/world" = "$(git symbolic-ref HEAD)"

Switched to branch 'world'
ok 3 - branch switching

expecting success of 2010.4 'checkout world from the index': 
	echo bye > world &&
	git checkout -- world &&
	git diff --exit-code --quiet

ok 4 - checkout world from the index

expecting success of 2010.5 'non ambiguous call': 
	git checkout all

Updated 0 paths from the index
ok 5 - non ambiguous call

expecting success of 2010.6 'allow the most common case': 
	git checkout world &&
	test "refs/heads/world" = "$(git symbolic-ref HEAD)"

Already on 'world'
ok 6 - allow the most common case

expecting success of 2010.7 'check ambiguity': 
	test_must_fail git checkout world all

fatal: ambiguous argument 'world': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 7 - check ambiguity

expecting success of 2010.8 'check ambiguity in subdir': 
	mkdir sub &&
	# not ambiguous because sub/world does not exist
	git -C sub checkout world ../all &&
	echo hello >sub/world &&
	# ambiguous because sub/world does exist
	test_must_fail git -C sub checkout world ../all

Updated 0 paths from dd4e7a7
fatal: ambiguous argument 'world': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 8 - check ambiguity in subdir

expecting success of 2010.9 'disambiguate checking out from a tree-ish': 
	echo bye > world &&
	git checkout world -- world &&
	git diff --exit-code --quiet

ok 9 - disambiguate checking out from a tree-ish

expecting success of 2010.10 'accurate error message with more than one ref': 
	test_must_fail git checkout HEAD main -- 2>actual &&
	test_i18ngrep 2 actual &&
	test_i18ngrep "one reference expected, 2 given" actual

fatal: only one reference expected, 2 given.
fatal: only one reference expected, 2 given.
ok 10 - accurate error message with more than one ref

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2011-checkout-invalid-head.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2011-checkout-invalid-head/.git/
expecting success of 2011.1 'setup': 
	echo hello >world &&
	git add world &&
	git commit -m initial

[main (root-commit) b8cd0f7] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
ok 1 - setup

expecting success of 2011.2 'checkout should not start branch from a tree': 
	test_must_fail git checkout -b newbranch main^{tree}

fatal: Cannot switch branch to a non-commit 'main^{tree}'
ok 2 - checkout should not start branch from a tree

expecting success of 2011.3 'checkout main from invalid HEAD': 
	echo $ZERO_OID >.git/HEAD &&
	git checkout main --

Switched to branch 'main'
ok 3 - checkout main from invalid HEAD

expecting success of 2011.4 'checkout notices failure to lock HEAD': 
	test_when_finished "rm -f .git/HEAD.lock" &&
	>.git/HEAD.lock &&
	test_must_fail git checkout -b other

error: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t2011-checkout-invalid-head/.git/HEAD.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
fatal: unable to update HEAD
ok 4 - checkout notices failure to lock HEAD

expecting success of 2011.5 'create ref directory/file conflict scenario': 
	git update-ref refs/heads/outer/inner main &&

	# do not rely on symbolic-ref to get a known state,
	# as it may use the same code we are testing
	reset_to_df () {
		echo "ref: refs/heads/outer" >.git/HEAD
	}

ok 5 - create ref directory/file conflict scenario

expecting success of 2011.6 'checkout away from d/f HEAD (unpacked, to branch)': 
	reset_to_df &&
	git checkout main

Switched to branch 'main'
ok 6 - checkout away from d/f HEAD (unpacked, to branch)

expecting success of 2011.7 'checkout away from d/f HEAD (unpacked, to detached)': 
	reset_to_df &&
	git checkout --detach main

HEAD is now at b8cd0f7 initial
ok 7 - checkout away from d/f HEAD (unpacked, to detached)

expecting success of 2011.8 'pack refs': 
	git pack-refs --all --prune

ok 8 - pack refs

expecting success of 2011.9 'checkout away from d/f HEAD (packed, to branch)': 
	reset_to_df &&
	git checkout main

Switched to branch 'main'
ok 9 - checkout away from d/f HEAD (packed, to branch)

expecting success of 2011.10 'checkout away from d/f HEAD (packed, to detached)': 
	reset_to_df &&
	git checkout --detach main

HEAD is now at b8cd0f7 initial
ok 10 - checkout away from d/f HEAD (packed, to detached)

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1701-racy-split-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1701-racy-split-index/.git/
expecting success of 1701.1 'setup': 
	# Only split the index when the test explicitly says so.
	sane_unset GIT_TEST_SPLIT_INDEX &&
	git config splitIndex.maxPercentChange 100 &&

	echo "cached content" >racy-file &&
	git add racy-file &&
	git commit -m initial &&

	echo something >other-file &&
	# No raciness with this file.
	test-tool chmtime =-20 other-file &&

	echo "+cached content" >expect

[master (root-commit) a4904a4] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 racy-file
ok 1 - setup

expecting success of 1701.2 'split the index while adding a racily clean file #0': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second (so both writes to racy-file result in the same
		# mtime) to create the interesting racy situation.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 2 - split the index while adding a racily clean file #0

expecting success of 1701.3 'split the index while adding a racily clean file #1': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second (so both writes to racy-file result in the same
		# mtime) to create the interesting racy situation.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 3 - split the index while adding a racily clean file #1

expecting success of 1701.4 'split the index while adding a racily clean file #2': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second (so both writes to racy-file result in the same
		# mtime) to create the interesting racy situation.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 4 - split the index while adding a racily clean file #2

expecting success of 1701.5 'split the index while adding a racily clean file #3': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second (so both writes to racy-file result in the same
		# mtime) to create the interesting racy situation.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 5 - split the index while adding a racily clean file #3

expecting success of 1701.6 'split the index while adding a racily clean file #4': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second (so both writes to racy-file result in the same
		# mtime) to create the interesting racy situation.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 6 - split the index while adding a racily clean file #4

expecting success of 1701.7 'add a racily clean file to an already split index #0': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 7 - add a racily clean file to an already split index #0

expecting success of 1701.8 'add a racily clean file to an already split index #1': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 8 - add a racily clean file to an already split index #1

expecting success of 1701.9 'add a racily clean file to an already split index #2': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 9 - add a racily clean file to an already split index #2

expecting success of 1701.10 'add a racily clean file to an already split index #3': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 10 - add a racily clean file to an already split index #3

expecting success of 1701.11 'add a racily clean file to an already split index #4': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Subsequent git commands should notice that racy-file
		# and the split index have the same mtime, and check
		# the content of the file to see if it is actually
		# clean.
		check_cached_diff
	
ok 11 - add a racily clean file to an already split index #4

expecting success of 1701.12 'split the index when the index contains a racily clean cache entry #0': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update and split the index when the index contains
		# the racily clean cache entry of racy-file.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --split-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data in the replacement cache entry and that it
		# doesnt match with the file the worktree.
		check_cached_diff
	
ok 12 - split the index when the index contains a racily clean cache entry #0

expecting success of 1701.13 'split the index when the index contains a racily clean cache entry #1': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update and split the index when the index contains
		# the racily clean cache entry of racy-file.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --split-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data in the replacement cache entry and that it
		# doesnt match with the file the worktree.
		check_cached_diff
	
ok 13 - split the index when the index contains a racily clean cache entry #1

expecting success of 1701.14 'split the index when the index contains a racily clean cache entry #2': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update and split the index when the index contains
		# the racily clean cache entry of racy-file.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --split-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data in the replacement cache entry and that it
		# doesnt match with the file the worktree.
		check_cached_diff
	
ok 14 - split the index when the index contains a racily clean cache entry #2

expecting success of 1701.15 'split the index when the index contains a racily clean cache entry #3': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update and split the index when the index contains
		# the racily clean cache entry of racy-file.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --split-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data in the replacement cache entry and that it
		# doesnt match with the file the worktree.
		check_cached_diff
	
ok 15 - split the index when the index contains a racily clean cache entry #3

expecting success of 1701.16 'split the index when the index contains a racily clean cache entry #4': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update and split the index when the index contains
		# the racily clean cache entry of racy-file.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --split-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data in the replacement cache entry and that it
		# doesnt match with the file the worktree.
		check_cached_diff
	
ok 16 - split the index when the index contains a racily clean cache entry #4

expecting success of 1701.17 'update the split index when it contains a new racily clean cache entry #0': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the split index.
		# An updated cache entry with smudged stat data should
		# be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 17 - update the split index when it contains a new racily clean cache entry #0

expecting success of 1701.18 'update the split index when it contains a new racily clean cache entry #1': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the split index.
		# An updated cache entry with smudged stat data should
		# be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 18 - update the split index when it contains a new racily clean cache entry #1

expecting success of 1701.19 'update the split index when it contains a new racily clean cache entry #2': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the split index.
		# An updated cache entry with smudged stat data should
		# be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 19 - update the split index when it contains a new racily clean cache entry #2

expecting success of 1701.20 'update the split index when it contains a new racily clean cache entry #3': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the split index.
		# An updated cache entry with smudged stat data should
		# be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 20 - update the split index when it contains a new racily clean cache entry #3

expecting success of 1701.21 'update the split index when it contains a new racily clean cache entry #4': 
		rm -f .git/index .git/sharedindex.* &&

		git update-index --split-index &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update the split index.  The cache entry of racy-file
		# will be stored only in the split index.
		git update-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the split index.
		# An updated cache entry with smudged stat data should
		# be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 21 - update the split index when it contains a new racily clean cache entry #4

expecting success of 1701.22 'update the split index when a racily clean cache entry is stored only in the shared index #0': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the shared index.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 22 - update the split index when a racily clean cache entry is stored only in the shared index #0

expecting success of 1701.23 'update the split index when a racily clean cache entry is stored only in the shared index #1': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the shared index.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 23 - update the split index when a racily clean cache entry is stored only in the shared index #1

expecting success of 1701.24 'update the split index when a racily clean cache entry is stored only in the shared index #2': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the shared index.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 24 - update the split index when a racily clean cache entry is stored only in the shared index #2

expecting success of 1701.25 'update the split index when a racily clean cache entry is stored only in the shared index #3': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the shared index.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 25 - update the split index when a racily clean cache entry is stored only in the shared index #3

expecting success of 1701.26 'update the split index when a racily clean cache entry is stored only in the shared index #4': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index when the racily clean cache
		# entry of racy-file is only stored in the shared index.
		# A corresponding replacement cache entry with smudged
		# stat data should be added to the new split index.
		git update-index --add other-file &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 26 - update the split index when a racily clean cache entry is stored only in the shared index #4

expecting success of 1701.27 'update the split index after unpack trees() copied a racily clean cache entry from the shared index #0': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index after unpack_trees() copied the
		# racily clean cache entry of racy-file from the shared
		# index.  A corresponding replacement cache entry
		# with smudged stat data should be added to the new
		# split index.
		git read-tree -m HEAD &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 27 - update the split index after unpack trees() copied a racily clean cache entry from the shared index #0

expecting success of 1701.28 'update the split index after unpack trees() copied a racily clean cache entry from the shared index #1': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index after unpack_trees() copied the
		# racily clean cache entry of racy-file from the shared
		# index.  A corresponding replacement cache entry
		# with smudged stat data should be added to the new
		# split index.
		git read-tree -m HEAD &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 28 - update the split index after unpack trees() copied a racily clean cache entry from the shared index #1

expecting success of 1701.29 'update the split index after unpack trees() copied a racily clean cache entry from the shared index #2': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index after unpack_trees() copied the
		# racily clean cache entry of racy-file from the shared
		# index.  A corresponding replacement cache entry
		# with smudged stat data should be added to the new
		# split index.
		git read-tree -m HEAD &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 29 - update the split index after unpack trees() copied a racily clean cache entry from the shared index #2

expecting success of 1701.30 'update the split index after unpack trees() copied a racily clean cache entry from the shared index #3': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index after unpack_trees() copied the
		# racily clean cache entry of racy-file from the shared
		# index.  A corresponding replacement cache entry
		# with smudged stat data should be added to the new
		# split index.
		git read-tree -m HEAD &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 30 - update the split index after unpack trees() copied a racily clean cache entry from the shared index #3

expecting success of 1701.31 'update the split index after unpack trees() copied a racily clean cache entry from the shared index #4': 
		rm -f .git/index .git/sharedindex.* &&

		# The next three commands must be run within the same
		# second.
		echo "cached content" >racy-file &&

		# Update and split the index.  The cache entry of
		# racy-file will be stored only in the shared index.
		git update-index --split-index --add racy-file &&

		# File size must stay the same.
		echo "dirty worktree" >racy-file &&

		# Now wait a bit to ensure that the split index written
		# below will get a more recent mtime than racy-file.
		sleep 1 &&

		# Update the split index after unpack_trees() copied the
		# racily clean cache entry of racy-file from the shared
		# index.  A corresponding replacement cache entry
		# with smudged stat data should be added to the new
		# split index.
		git read-tree -m HEAD &&

		# Subsequent git commands should notice the smudged
		# stat data.
		check_cached_diff
	
ok 31 - update the split index after unpack trees() copied a racily clean cache entry from the shared index #4

# passed all 31 test(s)
1..31
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2014-checkout-switch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2014-checkout-switch/.git/
expecting success of 2014.1 'setup': 
	echo Hello >file &&
	git add file &&
	test_tick &&
	git commit -m V1 &&
	echo Hello world >file &&
	git add file &&
	git checkout -b other

[master (root-commit) 68a43dc] V1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'other'
ok 1 - setup

expecting success of 2014.2 'check all changes are staged': 
	git diff --exit-code

ok 2 - check all changes are staged

expecting success of 2014.3 'second commit': 
	git commit -m V2

[other c55967b] V2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - second commit

expecting success of 2014.4 'check': 
	git diff --cached --exit-code

ok 4 - check

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2015-checkout-unborn.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2015-checkout-unborn/.git/
expecting success of 2015.1 'setup': 
	mkdir parent &&
	(cd parent &&
	 git init &&
	 echo content >file &&
	 git add file &&
	 git commit -m base
	) &&
	git fetch parent main:origin

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2015-checkout-unborn/parent/.git/
[main (root-commit) 5d770fe] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
From parent
 * [new branch]      main       -> origin
ok 1 - setup

expecting success of 2015.2 'checkout from unborn preserves untracked files': 
	echo precious >expect &&
	echo precious >file &&
	test_must_fail git checkout -b new origin &&
	test_cmp expect file

error: The following untracked working tree files would be overwritten by checkout:
	file
Please move or remove them before you switch branches.
Aborting
ok 2 - checkout from unborn preserves untracked files

expecting success of 2015.3 'checkout from unborn preserves index contents': 
	echo precious >expect &&
	echo precious >file &&
	git add file &&
	test_must_fail git checkout -b new origin &&
	test_cmp expect file &&
	git show :file >file &&
	test_cmp expect file

error: Your local changes to the following files would be overwritten by checkout:
	file
Please commit your changes or stash them before you switch branches.
Aborting
ok 3 - checkout from unborn preserves index contents

expecting success of 2015.4 'checkout from unborn merges identical index contents': 
	echo content >file &&
	git add file &&
	git checkout -b new origin

Switched to a new branch 'new'
ok 4 - checkout from unborn merges identical index contents

expecting success of 2015.5 'checking out another branch from unborn state': 
	git checkout --orphan newroot &&
	git checkout -b anothername &&
	test_must_fail git show-ref --verify refs/heads/newroot &&
	git symbolic-ref HEAD >actual &&
	echo refs/heads/anothername >expect &&
	test_cmp expect actual

Switched to a new branch 'newroot'
Switched to a new branch 'anothername'
fatal: 'refs/heads/newroot' - not a valid ref
ok 5 - checking out another branch from unborn state

expecting success of 2015.6 'checking out in a newly created repo': 
	test_create_repo empty &&
	(
		cd empty &&
		git symbolic-ref HEAD >expect &&
		test_must_fail git checkout &&
		git symbolic-ref HEAD >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2015-checkout-unborn/empty/.git/
fatal: You are on a branch yet to be born
ok 6 - checking out in a newly created repo

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2012-checkout-last.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2012-checkout-last/.git/
expecting success of 2012.1 'setup': 
	test_commit initial world hello &&
	git branch other &&
	test_commit --append second world "hello again"

[main (root-commit) b77667e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
[main 5146e8d] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 2012.2 '"checkout -" does not work initially': 
	test_must_fail git checkout -

error: pathspec '-' did not match any file(s) known to git
ok 2 - "checkout -" does not work initially

expecting success of 2012.3 'first branch switch': 
	git checkout other

Switched to branch 'other'
ok 3 - first branch switch

expecting success of 2012.4 '"checkout -" switches back': 
	git checkout - &&
	test_cmp_symbolic_HEAD_ref main

Switched to branch 'main'
ok 4 - "checkout -" switches back

expecting success of 2012.5 '"checkout -" switches forth': 
	git checkout - &&
	test_cmp_symbolic_HEAD_ref other

Switched to branch 'other'
ok 5 - "checkout -" switches forth

expecting success of 2012.6 'detach HEAD': 
	git checkout $(git rev-parse HEAD)

Note: switching to 'b77667e36f2efc50d31c716f0d5e6db09fe4a8e9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b77667e initial
ok 6 - detach HEAD

expecting success of 2012.7 '"checkout -" attaches again': 
	git checkout - &&
	test_cmp_symbolic_HEAD_ref other

Switched to branch 'other'
ok 7 - "checkout -" attaches again

expecting success of 2012.8 '"checkout -" detaches again': 
	git checkout - &&

	git rev-parse other >expect &&
	git rev-parse HEAD >actual &&
	test_cmp expect actual &&

	test_must_fail git symbolic-ref HEAD

Note: switching to 'b77667e36f2efc50d31c716f0d5e6db09fe4a8e9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b77667e initial
fatal: ref HEAD is not a symbolic ref
ok 8 - "checkout -" detaches again

expecting success of 2012.9 'more switches': 
	for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
	do
		git checkout -b branch$i || return 1
	done

Switched to a new branch 'branch16'
Switched to a new branch 'branch15'
Switched to a new branch 'branch14'
Switched to a new branch 'branch13'
Switched to a new branch 'branch12'
Switched to a new branch 'branch11'
Switched to a new branch 'branch10'
Switched to a new branch 'branch9'
Switched to a new branch 'branch8'
Switched to a new branch 'branch7'
Switched to a new branch 'branch6'
Switched to a new branch 'branch5'
Switched to a new branch 'branch4'
Switched to a new branch 'branch3'
Switched to a new branch 'branch2'
Switched to a new branch 'branch1'
ok 9 - more switches

expecting success of 2012.10 'switch to the last': 
	more_switches &&
	git checkout @{-1} &&
	test_cmp_symbolic_HEAD_ref branch2

Switched to branch 'branch16'
Switched to branch 'branch15'
Switched to branch 'branch14'
Switched to branch 'branch13'
Switched to branch 'branch12'
Switched to branch 'branch11'
Switched to branch 'branch10'
Switched to branch 'branch9'
Switched to branch 'branch8'
Switched to branch 'branch7'
Switched to branch 'branch6'
Switched to branch 'branch5'
Switched to branch 'branch4'
Switched to branch 'branch3'
Switched to branch 'branch2'
Switched to branch 'branch1'
Switched to branch 'branch2'
ok 10 - switch to the last

expecting success of 2012.11 'switch to second from the last': 
	more_switches &&
	git checkout @{-2} &&
	test_cmp_symbolic_HEAD_ref branch3

Switched to branch 'branch16'
Switched to branch 'branch15'
Switched to branch 'branch14'
Switched to branch 'branch13'
Switched to branch 'branch12'
Switched to branch 'branch11'
Switched to branch 'branch10'
Switched to branch 'branch9'
Switched to branch 'branch8'
Switched to branch 'branch7'
Switched to branch 'branch6'
Switched to branch 'branch5'
Switched to branch 'branch4'
Switched to branch 'branch3'
Switched to branch 'branch2'
Switched to branch 'branch1'
Switched to branch 'branch3'
ok 11 - switch to second from the last

expecting success of 2012.12 'switch to third from the last': 
	more_switches &&
	git checkout @{-3} &&
	test_cmp_symbolic_HEAD_ref branch4

Switched to branch 'branch16'
Switched to branch 'branch15'
Switched to branch 'branch14'
Switched to branch 'branch13'
Switched to branch 'branch12'
Switched to branch 'branch11'
Switched to branch 'branch10'
Switched to branch 'branch9'
Switched to branch 'branch8'
Switched to branch 'branch7'
Switched to branch 'branch6'
Switched to branch 'branch5'
Switched to branch 'branch4'
Switched to branch 'branch3'
Switched to branch 'branch2'
Switched to branch 'branch1'
Switched to branch 'branch4'
ok 12 - switch to third from the last

expecting success of 2012.13 'switch to fourth from the last': 
	more_switches &&
	git checkout @{-4} &&
	test_cmp_symbolic_HEAD_ref branch5

Switched to branch 'branch16'
Switched to branch 'branch15'
Switched to branch 'branch14'
Switched to branch 'branch13'
Switched to branch 'branch12'
Switched to branch 'branch11'
Switched to branch 'branch10'
Switched to branch 'branch9'
Switched to branch 'branch8'
Switched to branch 'branch7'
Switched to branch 'branch6'
Switched to branch 'branch5'
Switched to branch 'branch4'
Switched to branch 'branch3'
Switched to branch 'branch2'
Switched to branch 'branch1'
Switched to branch 'branch5'
ok 13 - switch to fourth from the last

expecting success of 2012.14 'switch to twelfth from the last': 
	more_switches &&
	git checkout @{-12} &&
	test_cmp_symbolic_HEAD_ref branch13

Switched to branch 'branch16'
Switched to branch 'branch15'
Switched to branch 'branch14'
Switched to branch 'branch13'
Switched to branch 'branch12'
Switched to branch 'branch11'
Switched to branch 'branch10'
Switched to branch 'branch9'
Switched to branch 'branch8'
Switched to branch 'branch7'
Switched to branch 'branch6'
Switched to branch 'branch5'
Switched to branch 'branch4'
Switched to branch 'branch3'
Switched to branch 'branch2'
Switched to branch 'branch1'
Switched to branch 'branch13'
ok 14 - switch to twelfth from the last

expecting success of 2012.15 'merge base test setup': 
	git checkout -b another other &&
	test_commit --append third world "hello again"

Switched to a new branch 'another'
[another d04d7df] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 15 - merge base test setup

expecting success of 2012.16 'another...main': 
	git checkout another &&
	git checkout another...main &&

	git rev-parse --verify main^ >expect &&
	git rev-parse --verify HEAD >actual &&
	test_cmp expect actual

Already on 'another'
Note: switching to 'another...main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b77667e initial
ok 16 - another...main

expecting success of 2012.17 '...main': 
	git checkout another &&
	git checkout ...main &&

	git rev-parse --verify main^ >expect &&
	git rev-parse --verify HEAD >actual &&
	test_cmp expect actual

Previous HEAD position was b77667e initial
Switched to branch 'another'
Note: switching to '...main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b77667e initial
ok 17 - ...main

expecting success of 2012.18 'main...': 
	git checkout another &&
	git checkout main... &&

	git rev-parse --verify main^ >expect &&
	git rev-parse --verify HEAD >actual &&
	test_cmp expect actual

Previous HEAD position was b77667e initial
Switched to branch 'another'
Note: switching to 'main...'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b77667e initial
ok 18 - main...

expecting success of 2012.19 '"checkout -" works after a rebase A': 
	git checkout main &&
	git checkout other &&
	git rebase main &&
	git checkout - &&
	test_cmp_symbolic_HEAD_ref main

Previous HEAD position was b77667e initial
Switched to branch 'main'
Switched to branch 'other'

                                                                                
Successfully rebased and updated refs/heads/other.
Switched to branch 'main'
ok 19 - "checkout -" works after a rebase A

expecting success of 2012.20 '"checkout -" works after a rebase A B': 
	git branch moodle main~1 &&
	git checkout main &&
	git checkout other &&
	git rebase main moodle &&
	git checkout - &&
	test_cmp_symbolic_HEAD_ref main

Already on 'main'
Switched to branch 'other'

                                                                                
Successfully rebased and updated refs/heads/moodle.
Switched to branch 'main'
ok 20 - "checkout -" works after a rebase A B

expecting success of 2012.21 '"checkout -" works after a rebase -i A': 
	git checkout main &&
	git checkout other &&
	git rebase -i main &&
	git checkout - &&
	test_cmp_symbolic_HEAD_ref main

Already on 'main'
Switched to branch 'other'

                                                                                
Successfully rebased and updated refs/heads/other.
Switched to branch 'main'
ok 21 - "checkout -" works after a rebase -i A

expecting success of 2012.22 '"checkout -" works after a rebase -i A B': 
	git branch foodle main~1 &&
	git checkout main &&
	git checkout other &&
	git rebase main foodle &&
	git checkout - &&
	test_cmp_symbolic_HEAD_ref main

Already on 'main'
Switched to branch 'other'

                                                                                
Successfully rebased and updated refs/heads/foodle.
Switched to branch 'main'
ok 22 - "checkout -" works after a rebase -i A B

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2016-checkout-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2016-checkout-patch/.git/
checking prerequisite: ADD_I_USE_BUILTIN

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
	test_bool_env GIT_TEST_ADD_I_USE_BUILTIN true

)
prerequisite ADD_I_USE_BUILTIN ok
expecting success of 2016.1 'setup': 
	mkdir dir &&
	echo parent > dir/foo &&
	echo dummy > bar &&
	git add bar dir/foo &&
	git commit -m initial &&
	test_tick &&
	test_commit second dir/foo head &&
	set_and_save_state bar bar_work bar_index &&
	save_head

[master (root-commit) 758b165] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 dir/foo
[master 3319288] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 2016.2 'saying "n" does nothing': 
	set_and_save_state dir/foo work head &&
	test_write_lines n n | git checkout -p &&
	verify_saved_state bar &&
	verify_saved_state dir/foo

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 2 - saying "n" does nothing

expecting success of 2016.3 'git checkout -p': 
	test_write_lines n y | git checkout -p &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 3 - git checkout -p

expecting success of 2016.4 'git checkout -p with staged changes': 
	set_state dir/foo work index &&
	test_write_lines n y | git checkout -p &&
	verify_saved_state bar &&
	verify_state dir/foo index index

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 9015a7a..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-index
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 4 - git checkout -p with staged changes

expecting success of 2016.5 'git checkout -p HEAD with NO staged changes: abort': 
	set_and_save_state dir/foo work head &&
	test_write_lines n y n | git checkout -p HEAD &&
	verify_saved_state bar &&
	verify_saved_state dir/foo

diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? error: patch failed: dir/foo:1
error: dir/foo: patch does not apply
The selected hunks do not apply to the index!
Apply them to the worktree anyway? Nothing was applied.


ok 5 - git checkout -p HEAD with NO staged changes: abort

expecting success of 2016.6 'git checkout -p HEAD with NO staged changes: apply': 
	test_write_lines n y y | git checkout -p HEAD &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? error: patch failed: dir/foo:1
error: dir/foo: patch does not apply
The selected hunks do not apply to the index!
Apply them to the worktree anyway? 
ok 6 - git checkout -p HEAD with NO staged changes: apply

expecting success of 2016.7 'git checkout -p HEAD with change already staged': 
	set_state dir/foo index index &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git checkout -p HEAD &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..9015a7a 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+index
(1/1) Discard this hunk from index and worktree [y,n,q,a,d,e,?]? 
ok 7 - git checkout -p HEAD with change already staged

expecting success of 2016.8 'git checkout -p HEAD^...': 
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git checkout -p HEAD^... &&
	verify_saved_state bar &&
	verify_state dir/foo parent parent

diff --git b/bar a/bar
index 8c999e6..421376d 100644
--- b/bar
+++ a/bar
@@ -1 +1 @@
-bar_work
+dummy
(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? 
diff --git b/dir/foo a/dir/foo
index 564b12f..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-head
+parent
(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? 
ok 8 - git checkout -p HEAD^...

expecting success of 2016.9 'git checkout -p HEAD^': 
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git checkout -p HEAD^ &&
	verify_saved_state bar &&
	verify_state dir/foo parent parent

diff --git b/bar a/bar
index 8c999e6..421376d 100644
--- b/bar
+++ a/bar
@@ -1 +1 @@
-bar_work
+dummy
(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? 
ok 9 - git checkout -p HEAD^

expecting success of 2016.10 'git checkout -p handles deletion': 
	set_state dir/foo work index &&
	rm dir/foo &&
	test_write_lines n y | git checkout -p &&
	verify_saved_state bar &&
	verify_state dir/foo index index

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
deleted file mode 100644
index 9015a7a..0000000
--- a/dir/foo
+++ /dev/null
@@ -1 +0,0 @@
-index
(1/1) Discard deletion from worktree [y,n,q,a,d,?]? 
ok 10 - git checkout -p handles deletion

expecting success of 2016.11 'path limiting works: dir': 
	set_state dir/foo work head &&
	test_write_lines y n | git checkout -p dir &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 11 - path limiting works: dir

expecting success of 2016.12 'path limiting works: -- dir': 
	set_state dir/foo work head &&
	test_write_lines y n | git checkout -p -- dir &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 12 - path limiting works: -- dir

expecting success of 2016.13 'path limiting works: HEAD^ -- dir': 
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines y n n | git checkout -p HEAD^ -- dir &&
	verify_saved_state bar &&
	verify_state dir/foo parent parent

diff --git b/dir/foo a/dir/foo
index 564b12f..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-head
+parent
(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? 
ok 13 - path limiting works: HEAD^ -- dir

expecting success of 2016.14 'path limiting works: foo inside dir': 
	set_state dir/foo work head &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines y n n | (cd dir && git checkout -p foo) &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 14 - path limiting works: foo inside dir

expecting success of 2016.15 'none of this moved HEAD': 
	verify_saved_head

ok 15 - none of this moved HEAD

expecting success of 2016.16 'empty tree can be handled': 
	test_when_finished "git reset --hard" &&
	git checkout -p $(test_oid empty_tree) --

diff --git b/bar a/bar
deleted file mode 100644
index 8c999e6..0000000
--- b/bar
+++ /dev/null
@@ -1 +0,0 @@
-bar_work
(1/1) Apply deletion to index and worktree [y,n,q,a,d,?]? 
diff --git b/dir/foo a/dir/foo
deleted file mode 100644
index 564b12f..0000000
--- b/dir/foo
+++ /dev/null
@@ -1 +0,0 @@
-head
(1/1) Apply deletion to index and worktree [y,n,q,a,d,?]? 
HEAD is now at 3319288 second
ok 16 - empty tree can be handled

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2017-checkout-orphan.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2017-checkout-orphan/.git/
expecting success of 2017.1 'Setup': 
	echo "Initial" >"$TEST_FILE" &&
	git add "$TEST_FILE" &&
	git commit -m "First Commit" &&
	test_tick &&
	echo "State 1" >>"$TEST_FILE" &&
	git add "$TEST_FILE" &&
	test_tick &&
	git commit -m "Second Commit"

[main (root-commit) df316c6] First Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main 8c3f362] Second Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - Setup

expecting success of 2017.2 '--orphan creates a new orphan branch from HEAD': 
	git checkout --orphan alpha &&
	test_must_fail git rev-parse --verify HEAD &&
	test "refs/heads/alpha" = "$(git symbolic-ref HEAD)" &&
	test_tick &&
	git commit -m "Third Commit" &&
	test_must_fail git rev-parse --verify HEAD^ &&
	git diff-tree --quiet main alpha

Switched to a new branch 'alpha'
fatal: Needed a single revision
[alpha (root-commit) 6f20c32] Third Commit
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 foo
fatal: Needed a single revision
ok 2 - --orphan creates a new orphan branch from HEAD

expecting success of 2017.3 '--orphan creates a new orphan branch from <start_point>': 
	git checkout main &&
	git checkout --orphan beta main^ &&
	test_must_fail git rev-parse --verify HEAD &&
	test "refs/heads/beta" = "$(git symbolic-ref HEAD)" &&
	test_tick &&
	git commit -m "Fourth Commit" &&
	test_must_fail git rev-parse --verify HEAD^ &&
	git diff-tree --quiet main^ beta

Switched to branch 'main'
Switched to a new branch 'beta'
fatal: Needed a single revision
[beta (root-commit) 530edda] Fourth Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
fatal: Needed a single revision
ok 3 - --orphan creates a new orphan branch from <start_point>

expecting success of 2017.4 '--orphan must be rejected with -b': 
	git checkout main &&
	test_must_fail git checkout --orphan new -b newer &&
	test refs/heads/main = "$(git symbolic-ref HEAD)"

Switched to branch 'main'
fatal: options '-b', '-B', and '--orphan' cannot be used together
ok 4 - --orphan must be rejected with -b

expecting success of 2017.5 '--orphan must be rejected with -t': 
	git checkout main &&
	test_must_fail git checkout --orphan new -t main &&
	test refs/heads/main = "$(git symbolic-ref HEAD)"

Already on 'main'
fatal: '--orphan' cannot be used with '-t'
ok 5 - --orphan must be rejected with -t

expecting success of 2017.6 '--orphan ignores branch.autosetupmerge': 
	git checkout main &&
	git config branch.autosetupmerge always &&
	git checkout --orphan gamma &&
	test_cmp_config "" --default "" branch.gamma.merge &&
	test refs/heads/gamma = "$(git symbolic-ref HEAD)" &&
	test_must_fail git rev-parse --verify HEAD^ &&
	git checkout main &&
	git config branch.autosetupmerge inherit &&
	git checkout --orphan eta &&
	test_cmp_config "" --default "" branch.eta.merge &&
	test_cmp_config "" --default "" branch.eta.remote &&
	echo refs/heads/eta >expected &&
	git symbolic-ref HEAD >actual &&
	test_cmp expected actual &&
	test_must_fail git rev-parse --verify HEAD^

Already on 'main'
Switched to a new branch 'gamma'
fatal: Needed a single revision
Switched to branch 'main'
Switched to a new branch 'eta'
fatal: Needed a single revision
ok 6 - --orphan ignores branch.autosetupmerge

expecting success of 2017.7 '--orphan makes reflog by default': 
	git checkout main &&
	git config --unset core.logAllRefUpdates &&
	git checkout --orphan delta &&
	test_must_fail git rev-parse --verify delta@{0} &&
	git commit -m Delta &&
	git rev-parse --verify delta@{0}

Switched to branch 'main'
Switched to a new branch 'delta'
fatal: Needed a single revision
[delta (root-commit) 9beee35] Delta
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 foo
9beee35744aee191f8186ef0a6ab78f710cdd57c
ok 7 - --orphan makes reflog by default

expecting success of 2017.8 '--orphan does not make reflog when core.logAllRefUpdates = false': 
	git checkout main &&
	git config core.logAllRefUpdates false &&
	git checkout --orphan epsilon &&
	test_must_fail git rev-parse --verify epsilon@{0} &&
	git commit -m Epsilon &&
	test_must_fail git rev-parse --verify epsilon@{0}

Switched to branch 'main'
Switched to a new branch 'epsilon'
fatal: Needed a single revision
[epsilon (root-commit) c5e7701] Epsilon
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 foo
fatal: Needed a single revision
ok 8 - --orphan does not make reflog when core.logAllRefUpdates = false

expecting success of 2017.9 '--orphan with -l makes reflog when core.logAllRefUpdates = false': 
	git checkout main &&
	git checkout -l --orphan zeta &&
	test_must_fail git rev-parse --verify zeta@{0} &&
	git commit -m Zeta &&
	git rev-parse --verify zeta@{0}

Switched to branch 'main'
Switched to a new branch 'zeta'
fatal: Needed a single revision
[zeta (root-commit) 1b23595] Zeta
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 foo
1b235958474dccc5c8f228713c620d22e7d1825d
ok 9 - --orphan with -l makes reflog when core.logAllRefUpdates = false

expecting success of 2017.10 'giving up --orphan not committed when -l and core.logAllRefUpdates = false deletes reflog': 
	git checkout main &&
	git checkout -l --orphan eta &&
	test_must_fail git rev-parse --verify eta@{0} &&
	git checkout main &&
	test_must_fail git rev-parse --verify eta@{0}

Switched to branch 'main'
Switched to a new branch 'eta'
fatal: Needed a single revision
Switched to branch 'main'
fatal: Needed a single revision
ok 10 - giving up --orphan not committed when -l and core.logAllRefUpdates = false deletes reflog

expecting success of 2017.11 '--orphan is rejected with an existing name': 
	git checkout main &&
	test_must_fail git checkout --orphan main &&
	test refs/heads/main = "$(git symbolic-ref HEAD)"

Already on 'main'
fatal: a branch named 'main' already exists
ok 11 - --orphan is rejected with an existing name

expecting success of 2017.12 '--orphan refuses to switch if a merge is needed': 
	git checkout main &&
	git reset --hard &&
	echo local >>"$TEST_FILE" &&
	cat "$TEST_FILE" >"$TEST_FILE.saved" &&
	test_must_fail git checkout --orphan new main^ &&
	test refs/heads/main = "$(git symbolic-ref HEAD)" &&
	test_cmp "$TEST_FILE" "$TEST_FILE.saved" &&
	git diff-index --quiet --cached HEAD &&
	git reset --hard

Already on 'main'
HEAD is now at 8c3f362 Second Commit
error: Your local changes to the following files would be overwritten by checkout:
	foo
Please commit your changes or stash them before you switch branches.
Aborting
HEAD is now at 8c3f362 Second Commit
ok 12 - --orphan refuses to switch if a merge is needed

expecting success of 2017.13 'cannot --detach on an unborn branch': 
	git checkout main &&
	git checkout --orphan new &&
	test_must_fail git checkout --detach

Already on 'main'
Switched to a new branch 'new'
fatal: You are on a branch yet to be born
ok 13 - cannot --detach on an unborn branch

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2019-checkout-ambiguous-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2019-checkout-ambiguous-ref/.git/
expecting success of 2019.1 'setup ambiguous refs': 
	test_commit branch file &&
	git branch ambiguity &&
	git branch vagueness &&
	test_commit tag file &&
	git tag ambiguity &&
	git tag vagueness HEAD:file &&
	test_commit other file

[master (root-commit) c291a6e] branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master a40f7cf] tag
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 3b61e26] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup ambiguous refs

expecting success of 2019.2 'checkout ambiguous ref succeeds': 
	git checkout ambiguity >stdout 2>stderr

ok 2 - checkout ambiguous ref succeeds

expecting success of 2019.3 'checkout produces ambiguity warning': 
	grep "warning.*ambiguous" stderr

warning: refname 'ambiguity' is ambiguous.
ok 3 - checkout produces ambiguity warning

expecting success of 2019.4 'checkout chooses branch over tag': 
	echo refs/heads/ambiguity >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual &&
	echo branch >expect &&
	test_cmp expect file

ok 4 - checkout chooses branch over tag

expecting success of 2019.5 'checkout reports switch to branch': 
	test_i18ngrep "Switched to branch" stderr &&
	test_i18ngrep ! "^HEAD is now at" stderr

Switched to branch 'ambiguity'
ok 5 - checkout reports switch to branch

expecting success of 2019.6 'checkout vague ref succeeds': 
	git checkout vagueness >stdout 2>stderr &&
	test_set_prereq VAGUENESS_SUCCESS

ok 6 - checkout vague ref succeeds

expecting success of 2019.7 'checkout produces ambiguity warning': 
	grep "warning.*ambiguous" stderr

warning: refname 'vagueness' is ambiguous.
ok 7 - checkout produces ambiguity warning

expecting success of 2019.8 'checkout chooses branch over tag': 
	echo refs/heads/vagueness >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual &&
	echo branch >expect &&
	test_cmp expect file

ok 8 - checkout chooses branch over tag

expecting success of 2019.9 'checkout reports switch to branch': 
	test_i18ngrep "Switched to branch" stderr &&
	test_i18ngrep ! "^HEAD is now at" stderr

Switched to branch 'vagueness'
ok 9 - checkout reports switch to branch

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2018-checkout-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2018-checkout-branch/.git/
expecting success of 2018.1 'setup': 
	test_commit initial file1 &&
	HEAD1=$(git rev-parse --verify HEAD) &&

	test_commit change1 file1 &&
	HEAD2=$(git rev-parse --verify HEAD) &&

	git branch -m branch1

[master (root-commit) ee02a18] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[master 5be17a9] change1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 2018.2 'checkout a branch without refs/heads/* prefix': 
	git clone --no-tags . repo-odd-prefix &&
	(
		cd repo-odd-prefix &&

		origin=$(git symbolic-ref refs/remotes/origin/HEAD) &&
		git symbolic-ref refs/heads/a-branch "$origin" &&

		git checkout -f a-branch &&
		git checkout -f a-branch
	)

Cloning into 'repo-odd-prefix'...
done.
Switched to branch 'a-branch'
Switched to branch 'a-branch'
ok 2 - checkout a branch without refs/heads/* prefix

expecting success of 2018.3 'checkout -b to a new branch, set to HEAD': 
	test_when_finished "
		git checkout branch1 &&
		test_might_fail git branch -D branch2" &&
	do_checkout branch2

Switched to a new branch 'branch2'
Switched to branch 'branch1'
Deleted branch branch2 (was 5be17a9).
ok 3 - checkout -b to a new branch, set to HEAD

expecting success of 2018.4 'checkout -b to a merge base': 
	test_when_finished "
		git checkout branch1 &&
		test_might_fail git branch -D branch2" &&
	git checkout -b branch2 branch1...

Switched to a new branch 'branch2'
Switched to branch 'branch1'
Deleted branch branch2 (was 5be17a9).
ok 4 - checkout -b to a merge base

expecting success of 2018.5 'checkout -b to a new branch, set to an explicit ref': 
	test_when_finished "
		git checkout branch1 &&
		test_might_fail git branch -D branch2" &&
	do_checkout branch2 $HEAD1

Switched to a new branch 'branch2'
Switched to branch 'branch1'
Deleted branch branch2 (was ee02a18).
ok 5 - checkout -b to a new branch, set to an explicit ref

expecting success of 2018.6 'checkout -b to a new branch with unmergeable changes fails': 
	setup_dirty_unmergeable &&
	do_checkout ! branch2 $HEAD1 &&
	test_dirty_unmergeable

error: Your local changes to the following files would be overwritten by checkout:
	file1
Please commit your changes or stash them before you switch branches.
Aborting
diff --git a/file1 b/file1
index 5be4a41..1725fe9 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 change1
+change2
ok 6 - checkout -b to a new branch with unmergeable changes fails

expecting success of 2018.7 'checkout -f -b to a new branch with unmergeable changes discards changes': 
	test_when_finished "
		git checkout branch1 &&
		test_might_fail git branch -D branch2" &&

	# still dirty and on branch1
	do_checkout branch2 $HEAD1 "-f -b" &&
	test_dirty_unmergeable_discards_changes

Switched to a new branch 'branch2'
Switched to branch 'branch1'
Deleted branch branch2 (was ee02a18).
ok 7 - checkout -f -b to a new branch with unmergeable changes discards changes

expecting success of 2018.8 'checkout -b to a new branch preserves mergeable changes': 
	test_when_finished "
		git reset --hard &&
		git checkout branch1 &&
		test_might_fail git branch -D branch2" &&

	setup_dirty_mergeable &&
	do_checkout branch2 $HEAD1 &&
	test_dirty_mergeable

Switched to a new branch 'branch2'
A	file2
diff --git a/file2 b/file2
new file mode 100644
index 0000000..6c493ff
--- /dev/null
+++ b/file2
@@ -0,0 +1 @@
+file2
HEAD is now at ee02a18 initial
Switched to branch 'branch1'
Deleted branch branch2 (was ee02a18).
ok 8 - checkout -b to a new branch preserves mergeable changes

expecting success of 2018.9 'checkout -f -b to a new branch with mergeable changes discards changes': 
	test_when_finished git reset --hard HEAD &&
	setup_dirty_mergeable &&
	do_checkout branch2 $HEAD1 "-f -b" &&
	test_dirty_mergeable_discards_changes

Switched to a new branch 'branch2'
HEAD is now at ee02a18 initial
ok 9 - checkout -f -b to a new branch with mergeable changes discards changes

expecting success of 2018.10 'checkout -b to an existing branch fails': 
	test_when_finished git reset --hard HEAD &&
	do_checkout ! branch2 $HEAD2

fatal: a branch named 'branch2' already exists
HEAD is now at ee02a18 initial
ok 10 - checkout -b to an existing branch fails

expecting success of 2018.11 'checkout -b to @{-1} fails with the right branch name': 
	git checkout branch1 &&
	git checkout branch2 &&
	echo  >expect "fatal: a branch named 'branch1' already exists" &&
	test_must_fail git checkout -b @{-1} 2>actual &&
	test_cmp expect actual

Switched to branch 'branch1'
Switched to branch 'branch2'
ok 11 - checkout -b to @{-1} fails with the right branch name

expecting success of 2018.12 'checkout -B to an existing branch resets branch to HEAD': 
	git checkout branch1 &&

	do_checkout branch2 "" -B

Switched to branch 'branch1'
Switched to and reset branch 'branch2'
ok 12 - checkout -B to an existing branch resets branch to HEAD

expecting success of 2018.13 'checkout -B to a merge base': 
	git checkout branch1 &&

	git checkout -B branch2 branch1...

Switched to branch 'branch1'
Switched to and reset branch 'branch2'
ok 13 - checkout -B to a merge base

expecting success of 2018.14 'checkout -B to an existing branch from detached HEAD resets branch to HEAD': 
	head=$(git rev-parse --verify HEAD) &&
	git checkout "$head" &&

	do_checkout branch2 "" -B

Note: switching to '5be17a9503605cbff49376bccdc74acb1ebd9160'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5be17a9 change1
Switched to and reset branch 'branch2'
ok 14 - checkout -B to an existing branch from detached HEAD resets branch to HEAD

expecting success of 2018.15 'checkout -B to an existing branch with an explicit ref resets branch to that ref': 
	git checkout branch1 &&

	do_checkout branch2 $HEAD1 -B

Switched to branch 'branch1'
Switched to and reset branch 'branch2'
ok 15 - checkout -B to an existing branch with an explicit ref resets branch to that ref

expecting success of 2018.16 'checkout -B to an existing branch with unmergeable changes fails': 
	git checkout branch1 &&

	setup_dirty_unmergeable &&
	do_checkout ! branch2 $HEAD1 -B &&
	test_dirty_unmergeable

Switched to branch 'branch1'
error: Your local changes to the following files would be overwritten by checkout:
	file1
Please commit your changes or stash them before you switch branches.
Aborting
diff --git a/file1 b/file1
index 5be4a41..1725fe9 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 change1
+change2
ok 16 - checkout -B to an existing branch with unmergeable changes fails

expecting success of 2018.17 'checkout -f -B to an existing branch with unmergeable changes discards changes': 
	# still dirty and on branch1
	do_checkout branch2 $HEAD1 "-f -B" &&
	test_dirty_unmergeable_discards_changes

Switched to and reset branch 'branch2'
ok 17 - checkout -f -B to an existing branch with unmergeable changes discards changes

expecting success of 2018.18 'checkout -B to an existing branch preserves mergeable changes': 
	test_when_finished git reset --hard &&
	git checkout branch1 &&

	setup_dirty_mergeable &&
	do_checkout branch2 $HEAD1 -B &&
	test_dirty_mergeable

Switched to branch 'branch1'
Switched to and reset branch 'branch2'
A	file2
diff --git a/file2 b/file2
new file mode 100644
index 0000000..6c493ff
--- /dev/null
+++ b/file2
@@ -0,0 +1 @@
+file2
HEAD is now at ee02a18 initial
ok 18 - checkout -B to an existing branch preserves mergeable changes

expecting success of 2018.19 'checkout -f -B to an existing branch with mergeable changes discards changes': 
	git checkout branch1 &&

	setup_dirty_mergeable &&
	do_checkout branch2 $HEAD1 "-f -B" &&
	test_dirty_mergeable_discards_changes

Switched to branch 'branch1'
Switched to and reset branch 'branch2'
ok 19 - checkout -f -B to an existing branch with mergeable changes discards changes

expecting success of 2018.20 'checkout -b <describe>': 
	git tag -f -m "First commit" initial initial &&
	git checkout -f change1 &&
	name=$(git describe) &&
	git checkout -b $name &&
	git diff --exit-code change1 &&
	echo "refs/heads/$name" >expect &&
	git symbolic-ref HEAD >actual &&
	test_cmp expect actual

Updated tag 'initial' (was ee02a18)
Note: switching to 'change1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5be17a9 change1
Switched to a new branch 'initial-1-g5be17a9'
ok 20 - checkout -b <describe>

expecting success of 2018.21 'checkout -B to the current branch works': 
	git checkout branch1 &&
	git checkout -B branch1-scratch &&

	setup_dirty_mergeable &&
	git checkout -B branch1-scratch initial &&
	test_dirty_mergeable

Switched to branch 'branch1'
Switched to a new branch 'branch1-scratch'
Reset branch 'branch1-scratch'
A	file2
diff --git a/file2 b/file2
new file mode 100644
index 0000000..6c493ff
--- /dev/null
+++ b/file2
@@ -0,0 +1 @@
+file2
ok 21 - checkout -B to the current branch works

expecting success of 2018.22 'checkout -b after clone --no-checkout does a checkout of HEAD': 
	git init src &&
	test_commit -C src a &&
	rev="$(git -C src rev-parse HEAD)" &&
	git clone --no-checkout src dest &&
	git -C dest checkout "$rev" -b branch &&
	test_path_is_file dest/a.t

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2018-checkout-branch/src/.git/
[master (root-commit) 7f0b538] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Cloning into 'dest'...
done.
Switched to a new branch 'branch'
ok 22 - checkout -b after clone --no-checkout does a checkout of HEAD

expecting success of 2018.23 'checkout -b to a new branch preserves mergeable changes despite sparse-checkout': 
	test_when_finished "
		git reset --hard &&
		git checkout branch1-scratch &&
		test_might_fail git branch -D branch3 &&
		git config core.sparseCheckout false &&
		rm -rf .git/info" &&

	test_commit file2 &&

	echo stuff >>file1 &&
	mkdir .git/info &&
	echo file2 >.git/info/sparse-checkout &&
	git config core.sparseCheckout true &&

	CURHEAD=$(git rev-parse HEAD) &&
	do_checkout branch3 $CURHEAD &&

	echo file1 >expect &&
	git diff --name-only >actual &&
	test_cmp expect actual

[branch1-scratch b9d73e8] file2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file2
 create mode 100644 file2.t
warning: The following paths are not up to date and were left despite sparse patterns:
	file1

After fixing the above paths, you may want to run `git sparse-checkout reapply`.
Switched to a new branch 'branch3'
M	file1
HEAD is now at b9d73e8 file2
Switched to branch 'branch1-scratch'
Deleted branch branch3 (was b9d73e8).
ok 23 - checkout -b to a new branch preserves mergeable changes despite sparse-checkout

expecting success of 2018.24 'checkout -b rejects an invalid start point': 
	test_must_fail git checkout -b branch4 file1 2>err &&
	test_i18ngrep "is not a commit" err

fatal: 'file1' is not a commit and a branch 'branch4' cannot be created from it
ok 24 - checkout -b rejects an invalid start point

expecting success of 2018.25 'checkout -b rejects an extra path argument': 
	test_must_fail git checkout -b branch5 branch1 file1 2>err &&
	test_i18ngrep "Cannot update paths and switch to branch" err

fatal: Cannot update paths and switch to branch 'branch5' at the same time.
ok 25 - checkout -b rejects an extra path argument

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2021-checkout-overwrite.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2021-checkout-overwrite/.git/
expecting success of 2021.1 'setup': 

	mkdir -p a/b/c &&
	>a/b/c/d &&
	git add -A &&
	git commit -m base &&
	git tag start

[master (root-commit) 6ef9cb1] base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/b/c/d
ok 1 - setup

expecting success of 2021.2 'create a commit where dir a/b changed to file': 

	git checkout -b file &&
	rm -rf a/b &&
	>a/b &&
	git add -A &&
	git commit -m "dir to file"

Switched to a new branch 'file'
[file ef05f50] dir to file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a/{b/c/d => b} (100%)
ok 2 - create a commit where dir a/b changed to file

expecting success of 2021.3 'checkout commit with dir must not remove untracked a/b': 

	git rm --cached a/b &&
	git commit -m "un-track the file" &&
	test_must_fail git checkout start &&
	test -f a/b

rm 'a/b'
[file 1d595a3] un-track the file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 a/b
error: The following untracked working tree files would be overwritten by checkout:
	a/b
Please move or remove them before you switch branches.
Aborting
ok 3 - checkout commit with dir must not remove untracked a/b

expecting success of 2021.4 'create a commit where dir a/b changed to symlink': 

	rm -rf a/b &&	# cleanup if previous test failed
	git checkout -f -b symlink start &&
	rm -rf a/b &&
	git add -A &&
	test_ln_s_add foo a/b &&
	git commit -m "dir to symlink"

Switched to a new branch 'symlink'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[symlink 6de6f3e] dir to symlink
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 a/b
 delete mode 100644 a/b/c/d
ok 4 - create a commit where dir a/b changed to symlink

expecting success of 2021.5 'checkout commit with dir must not remove untracked a/b': 

	git rm --cached a/b &&
	git commit -m "un-track the symlink" &&
	test_must_fail git checkout start

rm 'a/b'
[symlink 43da882] un-track the symlink
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 120000 a/b
error: The following untracked working tree files would be overwritten by checkout:
	a/b
Please move or remove them before you switch branches.
Aborting
ok 5 - checkout commit with dir must not remove untracked a/b

expecting success of 2021.6 'the symlink remained': 

	test_when_finished "rm a/b" &&
	test -h a/b

ok 6 - the symlink remained

expecting success of 2021.7 'checkout -f must not follow symlinks when removing entries': 
	git checkout -f start &&
	mkdir dir &&
	>dir/f &&
	git add dir/f &&
	git commit -m "add dir/f" &&
	mv dir untracked &&
	ln -s untracked dir &&
	git checkout -f HEAD~ &&
	test_path_is_file untracked/f

Note: switching to 'start'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6ef9cb1 base
[detached HEAD 63af845] add dir/f
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir/f
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  63af845 add dir/f

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 63af845

HEAD is now at 6ef9cb1 base
ok 7 - checkout -f must not follow symlinks when removing entries

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2020-checkout-detach.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2020-checkout-detach/.git/
expecting success of 2020.1 'setup': 
	test_commit one &&
	test_commit two &&
	test_commit three && git tag -d three &&
	test_commit four && git tag -d four &&
	git branch branch &&
	git tag tag

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Deleted tag 'three' (was 7c7cd71)
[main fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
Deleted tag 'four' (was fd8d77e)
ok 1 - setup

expecting success of 2020.2 'checkout branch does not detach': 
	reset &&
	git checkout branch &&
	check_not_detached

Already on 'main'
Switched to branch 'branch'
ok 2 - checkout branch does not detach

expecting success of 2020.3 'checkout tag detaches': 
	reset &&
	git checkout tag &&
	check_detached

Switched to branch 'main'
Note: switching to 'tag'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fd8d77e four
ok 3 - checkout tag detaches

expecting success of 2020.4 'checkout branch by full name detaches': 
	reset &&
	git checkout refs/heads/branch &&
	check_detached

Switched to branch 'main'
Note: switching to 'refs/heads/branch'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fd8d77e four
ok 4 - checkout branch by full name detaches

expecting success of 2020.5 'checkout non-ref detaches': 
	reset &&
	git checkout branch^ &&
	check_detached

Switched to branch 'main'
Note: switching to 'branch^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7c7cd71 three
ok 5 - checkout non-ref detaches

expecting success of 2020.6 'checkout ref^0 detaches': 
	reset &&
	git checkout branch^0 &&
	check_detached

Previous HEAD position was 7c7cd71 three
Switched to branch 'main'
Note: switching to 'branch^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fd8d77e four
ok 6 - checkout ref^0 detaches

expecting success of 2020.7 'checkout --detach detaches': 
	reset &&
	git checkout --detach branch &&
	check_detached

Switched to branch 'main'
HEAD is now at fd8d77e four
ok 7 - checkout --detach detaches

expecting success of 2020.8 'checkout --detach without branch name': 
	reset &&
	git checkout --detach &&
	check_detached

Switched to branch 'main'
HEAD is now at fd8d77e four
ok 8 - checkout --detach without branch name

expecting success of 2020.9 'checkout --detach errors out for non-commit': 
	reset &&
	test_must_fail git checkout --detach one^{tree} &&
	check_not_detached

Switched to branch 'main'
fatal: Cannot switch branch to a non-commit 'one^{tree}'
ok 9 - checkout --detach errors out for non-commit

expecting success of 2020.10 'checkout --detach errors out for extra argument': 
	reset &&
	git checkout main &&
	test_must_fail git checkout --detach tag one.t &&
	check_not_detached

Already on 'main'
Already on 'main'
fatal: git checkout: --detach does not take a path argument 'one.t'
ok 10 - checkout --detach errors out for extra argument

expecting success of 2020.11 'checkout --detached and -b are incompatible': 
	reset &&
	test_must_fail git checkout --detach -b newbranch tag &&
	check_not_detached

Already on 'main'
fatal: '--detach' cannot be used with '-b/-B/--orphan'
ok 11 - checkout --detached and -b are incompatible

expecting success of 2020.12 'checkout --detach moves HEAD': 
	reset &&
	git checkout one &&
	git checkout --detach two &&
	git diff --exit-code HEAD &&
	git diff --exit-code two

Already on 'main'
Note: switching to 'one'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d79ce16 one
Previous HEAD position was d79ce16 one
HEAD is now at 139b20d two
ok 12 - checkout --detach moves HEAD

expecting success of 2020.13 'checkout warns on orphan commits': 
	reset &&
	git checkout --detach two &&
	echo content >orphan &&
	git add orphan &&
	git commit -a -m orphan1 &&
	echo new content >orphan &&
	git commit -a -m orphan2 &&
	orphan2=$(git rev-parse HEAD) &&
	git checkout main 2>stderr

Previous HEAD position was 139b20d two
Switched to branch 'main'
HEAD is now at 139b20d two
[detached HEAD 61e8031] orphan1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 orphan
[detached HEAD bfea71d] orphan2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - checkout warns on orphan commits

expecting success of 2020.14 'checkout warns on orphan commits: output': 
	check_orphan_warning stderr "2 commits"

Warning: you are leaving 2 commits behind, not connected to
ok 14 - checkout warns on orphan commits: output

expecting success of 2020.15 'checkout warns orphaning 1 of 2 commits': 
	git checkout "$orphan2" &&
	git checkout HEAD^ 2>stderr

Note: switching to 'bfea71df3731158d55fcf7b9d1ae214132b90e2b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bfea71d orphan2
ok 15 - checkout warns orphaning 1 of 2 commits

expecting success of 2020.16 'checkout warns orphaning 1 of 2 commits: output': 
	check_orphan_warning stderr "1 commit"

Warning: you are leaving 1 commit behind, not connected to
ok 16 - checkout warns orphaning 1 of 2 commits: output

expecting success of 2020.17 'checkout does not warn leaving ref tip': 
	reset &&
	git checkout --detach two &&
	git checkout main 2>stderr

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  61e8031 orphan1

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 61e8031

Switched to branch 'main'
HEAD is now at 139b20d two
ok 17 - checkout does not warn leaving ref tip

expecting success of 2020.18 'checkout does not warn leaving ref tip': 
	check_no_orphan_warning stderr

Previous HEAD position was 139b20d two
ok 18 - checkout does not warn leaving ref tip

expecting success of 2020.19 'checkout does not warn leaving reachable commit': 
	reset &&
	git checkout --detach HEAD^ &&
	git checkout main 2>stderr

Already on 'main'
HEAD is now at 7c7cd71 three
ok 19 - checkout does not warn leaving reachable commit

expecting success of 2020.20 'checkout does not warn leaving reachable commit': 
	check_no_orphan_warning stderr

Previous HEAD position was 7c7cd71 three
ok 20 - checkout does not warn leaving reachable commit

expecting success of 2020.21 'tracking count is accurate after orphan check': 
	reset &&
	git branch child main^ &&
	git config branch.child.remote . &&
	git config branch.child.merge refs/heads/main &&
	git checkout child^ &&
	git checkout child >stdout &&
	test_cmp expect stdout

Already on 'main'
Note: switching to 'child^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
Previous HEAD position was 139b20d two
Switched to branch 'child'
ok 21 - tracking count is accurate after orphan check

expecting success of 2020.22 'no advice given for explicit detached head state': 
	# baseline
	test_config advice.detachedHead true &&
	git checkout child && git checkout HEAD^0 >expect.advice 2>&1 &&
	test_config advice.detachedHead false &&
	git checkout child && git checkout HEAD^0 >expect.no-advice 2>&1 &&
	test_unconfig advice.detachedHead &&
	# without configuration, the advice.* variables default to true
	git checkout child && git checkout HEAD^0 >actual 2>&1 &&
	test_cmp expect.advice actual &&

	# with explicit --detach
	# no configuration
	test_unconfig advice.detachedHead &&
	git checkout child && git checkout --detach HEAD^0 >actual 2>&1 &&
	test_cmp expect.no-advice actual &&

	# explicitly decline advice
	test_config advice.detachedHead false &&
	git checkout child && git checkout --detach HEAD^0 >actual 2>&1 &&
	test_cmp expect.no-advice actual

Already on 'child'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Switched to branch 'child'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Switched to branch 'child'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Switched to branch 'child'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Switched to branch 'child'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
ok 22 - no advice given for explicit detached head state

expecting success of 2020.23 'describe_detached_head prints no SHA-1 ellipsis when not asked to': 

	commit=7c7cd714e262 &&
	commit2=139b20d8e6c5 &&
	commit3=d79ce1670bdc &&

	# The first detach operation is more chatty than the following ones.
	cat >1st_detach <<-EOF &&
	Note: switching to 'HEAD^'.

	You are in 'detached HEAD' state. You can look around, make experimental
	changes and commit them, and you can discard any commits you make in this
	state without impacting any branches by switching back to a branch.

	If you want to create a new branch to retain commits you create, you may
	do so (now or later) by using -c with the switch command. Example:

	  git switch -c <new-branch-name>

	Or undo this operation with:

	  git switch -

	Turn off this advice by setting config variable advice.detachedHead to false

	HEAD is now at $commit three
	EOF

	# The remaining ones just show info about previous and current HEADs.
	cat >2nd_detach <<-EOF &&
	Previous HEAD position was $commit three
	HEAD is now at $commit2 two
	EOF

	cat >3rd_detach <<-EOF &&
	Previous HEAD position was $commit2 two
	HEAD is now at $commit3 one
	EOF

	reset &&
	check_not_detached &&

	# Various ways of *not* asking for ellipses

	sane_unset GIT_PRINT_SHA1_ELLIPSIS &&
	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 1st_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS=no git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 2nd_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS= git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 3rd_detach actual &&

	sane_unset GIT_PRINT_SHA1_ELLIPSIS &&

	# We only have four commits, but we can re-use them
	reset &&
	check_not_detached &&

	# Make no mention of the env var at all
	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 1st_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS='nope' &&
	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 2nd_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS=nein &&
	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 3rd_detach actual &&

	true

Previous HEAD position was 7c7cd71 three
Switched to branch 'main'
Previous HEAD position was d79ce16 one
Switched to branch 'main'
ok 23 - describe_detached_head prints no SHA-1 ellipsis when not asked to

expecting success of 2020.24 'describe_detached_head does print SHA-1 ellipsis when asked to': 

	commit=7c7cd714e262 &&
	commit2=139b20d8e6c5 &&
	commit3=d79ce1670bdc &&

	# The first detach operation is more chatty than the following ones.
	cat >1st_detach <<-EOF &&
	Note: switching to 'HEAD^'.

	You are in 'detached HEAD' state. You can look around, make experimental
	changes and commit them, and you can discard any commits you make in this
	state without impacting any branches by switching back to a branch.

	If you want to create a new branch to retain commits you create, you may
	do so (now or later) by using -c with the switch command. Example:

	  git switch -c <new-branch-name>

	Or undo this operation with:

	  git switch -

	Turn off this advice by setting config variable advice.detachedHead to false

	HEAD is now at $commit... three
	EOF

	# The remaining ones just show info about previous and current HEADs.
	cat >2nd_detach <<-EOF &&
	Previous HEAD position was $commit... three
	HEAD is now at $commit2... two
	EOF

	cat >3rd_detach <<-EOF &&
	Previous HEAD position was $commit2... two
	HEAD is now at $commit3... one
	EOF

	reset &&
	check_not_detached &&

	# Various ways of asking for ellipses...
	# The user can just use any kind of quoting (including none).

	GIT_PRINT_SHA1_ELLIPSIS=yes git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 1st_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS=Yes git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 2nd_detach actual &&

	GIT_PRINT_SHA1_ELLIPSIS=YES git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
	check_detached &&
	test_cmp 3rd_detach actual &&

	true

Previous HEAD position was d79ce16 one
Switched to branch 'main'
ok 24 - describe_detached_head does print SHA-1 ellipsis when asked to

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2022-checkout-paths.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2022-checkout-paths/.git/
expecting success of 2022.1 'setup': 
	mkdir dir &&
	>dir/main &&
	echo common >dir/common &&
	git add dir/main dir/common &&
	test_tick && git commit -m "main has dir/main" &&
	git checkout -b next &&
	git mv dir/main dir/next0 &&
	echo next >dir/next1 &&
	git add dir &&
	test_tick && git commit -m "next has dir/next but not dir/main"

[main (root-commit) 0ea9f56] main has dir/main
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 dir/common
 create mode 100644 dir/main
Switched to a new branch 'next'
[next 30942f7] next has dir/next but not dir/main
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename dir/{main => next0} (100%)
 create mode 100644 dir/next1
ok 1 - setup

expecting success of 2022.2 'checking out paths out of a tree does not clobber unrelated paths': 
	git checkout next &&
	git reset --hard &&
	rm dir/next0 &&
	cat dir/common >expect.common &&
	echo modified >expect.next1 &&
	cat expect.next1 >dir/next1 &&
	echo untracked >expect.next2 &&
	cat expect.next2 >dir/next2 &&

	git checkout main dir &&

	test_cmp expect.common dir/common &&
	test_path_is_file dir/main &&
	git diff --exit-code main dir/main &&

	test_path_is_missing dir/next0 &&
	test_cmp expect.next1 dir/next1 &&
	test_path_is_file dir/next2 &&
	test_must_fail git ls-files --error-unmatch dir/next2 &&
	test_cmp expect.next2 dir/next2

Already on 'next'
HEAD is now at 30942f7 next has dir/next but not dir/main
Updated 1 path from 4e95d5f
error: pathspec 'dir/next2' did not match any file(s) known to git
Did you forget to 'git add'?
ok 2 - checking out paths out of a tree does not clobber unrelated paths

expecting success of 2022.3 'do not touch unmerged entries matching $path but not in $tree': 
	git checkout next &&
	git reset --hard &&

	cat dir/common >expect.common &&
	EMPTY_SHA1=$(git hash-object -w --stdin </dev/null) &&
	git rm dir/next0 &&
	cat >expect.next0 <<-EOF &&
	100644 $EMPTY_SHA1 1	dir/next0
	100644 $EMPTY_SHA1 2	dir/next0
	EOF
	git update-index --index-info <expect.next0 &&

	git checkout main dir &&

	test_cmp expect.common dir/common &&
	test_path_is_file dir/main &&
	git diff --exit-code main dir/main &&
	git ls-files -s dir/next0 >actual.next0 &&
	test_cmp expect.next0 actual.next0

Already on 'next'
A	dir/main
D	dir/next0
M	dir/next1
HEAD is now at 30942f7 next has dir/next but not dir/main
rm 'dir/next0'
Updated 1 path from 4e95d5f
ok 3 - do not touch unmerged entries matching $path but not in $tree

expecting success of 2022.4 'do not touch files that are already up-to-date': 
	git reset --hard &&
	echo one >file1 &&
	echo two >file2 &&
	git add file1 file2 &&
	git commit -m base &&
	echo modified >file1 &&
	test-tool chmtime =1000000000 file2 &&
	git update-index -q --refresh &&
	git checkout HEAD -- file1 file2 &&
	echo one >expect &&
	test_cmp expect file1 &&
	echo "1000000000" >expect &&
	test-tool chmtime --get file2 >actual &&
	test_cmp expect actual

HEAD is now at 30942f7 next has dir/next but not dir/main
[next 567e06c] base
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
ok 4 - do not touch files that are already up-to-date

expecting success of 2022.5 'checkout HEAD adds deleted intent-to-add file back to index': 
	echo "nonempty" >nonempty &&
	>empty &&
	git add nonempty empty &&
	git commit -m "create files to be deleted" &&
	git rm --cached nonempty empty &&
	git add -N nonempty empty &&
	git checkout HEAD nonempty empty &&
	git diff --cached --exit-code

[next 6bd1da2] create files to be deleted
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 empty
 create mode 100644 nonempty
rm 'empty'
rm 'nonempty'
Updated 2 paths from cb321d9
ok 5 - checkout HEAD adds deleted intent-to-add file back to index

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2023-checkout-m.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2023-checkout-m/.git/
expecting success of 2023.1 'setup': 
	test_tick &&
	test_commit both.txt both.txt initial &&
	git branch topic &&
	test_commit modified_in_main both.txt in_main &&
	test_commit added_in_main each.txt in_main &&
	git checkout topic &&
	test_commit modified_in_topic both.txt in_topic &&
	test_commit added_in_topic each.txt in_topic

[main (root-commit) 7a8c5bf] both.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 both.txt
[main caa44c2] modified_in_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 8422e32] added_in_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 each.txt
Switched to branch 'topic'
[topic 33542d7] modified_in_topic
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[topic d46615c] added_in_topic
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 each.txt
ok 1 - setup

expecting success of 2023.2 'git merge main': 
    test_must_fail git merge main

Auto-merging both.txt
CONFLICT (content): Merge conflict in both.txt
Auto-merging each.txt
CONFLICT (add/add): Merge conflict in each.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - git merge main

expecting success of 2023.3 '-m restores 2-way conflicted+resolved file': 
	cp each.txt each.txt.conflicted &&
	echo resolved >each.txt &&
	git add each.txt &&
	git checkout -m -- each.txt &&
	clean_branchnames <each.txt >each.txt.cleaned &&
	clean_branchnames <each.txt.conflicted >each.txt.conflicted.cleaned &&
	test_cmp each.txt.conflicted.cleaned each.txt.cleaned

ok 3 - -m restores 2-way conflicted+resolved file

expecting success of 2023.4 '-m restores 3-way conflicted+resolved file': 
	cp both.txt both.txt.conflicted &&
	echo resolved >both.txt &&
	git add both.txt &&
	git checkout -m -- both.txt &&
	clean_branchnames <both.txt >both.txt.cleaned &&
	clean_branchnames <both.txt.conflicted >both.txt.conflicted.cleaned &&
	test_cmp both.txt.conflicted.cleaned both.txt.cleaned

ok 4 - -m restores 3-way conflicted+resolved file

expecting success of 2023.5 'force checkout a conflict file creates stage zero entry': 
	git init co-force &&
	(
		cd co-force &&
		echo a >a &&
		git add a &&
		git commit -ama &&
		A_OBJ=$(git rev-parse :a) &&
		git branch topic &&
		echo b >a &&
		git commit -amb &&
		B_OBJ=$(git rev-parse :a) &&
		git checkout topic &&
		echo c >a &&
		C_OBJ=$(git hash-object a) &&
		git checkout -m main &&
		test_cmp_rev :1:a $A_OBJ &&
		test_cmp_rev :2:a $B_OBJ &&
		test_cmp_rev :3:a $C_OBJ &&
		git checkout -f topic &&
		test_cmp_rev :0:a $A_OBJ
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2023-checkout-m/co-force/.git/
[main (root-commit) b7442a0] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main 7529dfa] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'topic'
Switched to branch 'main'
M	a
Switched to branch 'topic'
ok 5 - force checkout a conflict file creates stage zero entry

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2025-checkout-no-overlay.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2025-checkout-no-overlay/.git/
expecting success of 2025.1 'setup': 
	git commit --allow-empty -m "initial"

[master (root-commit) 8b2b4f6] initial
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 2025.2 'checkout --no-overlay deletes files not in <tree-ish>': 
	>file &&
	mkdir dir &&
	>dir/file1 &&
	git add file dir/file1 &&
	git checkout --no-overlay HEAD -- file &&
	test_path_is_missing file &&
	test_path_is_file dir/file1

ok 2 - checkout --no-overlay deletes files not in <tree-ish>

expecting success of 2025.3 'checkout --no-overlay removing last file from directory': 
	git checkout --no-overlay HEAD -- dir/file1 &&
	test_path_is_missing dir

ok 3 - checkout --no-overlay removing last file from directory

expecting success of 2025.4 'checkout -p --overlay is disallowed': 
	test_must_fail git checkout -p --overlay HEAD 2>actual &&
	test_i18ngrep "fatal: options .-p. and .--overlay. cannot be used together" actual

fatal: options '-p' and '--overlay' cannot be used together
ok 4 - checkout -p --overlay is disallowed

expecting success of 2025.5 '--no-overlay --theirs with D/F conflict deletes file': 
	test_commit file1 file1 &&
	test_commit file2 file2 &&
	git rm --cached file1 &&
	echo 1234 >file1 &&
	F1=$(git rev-parse HEAD:file1) &&
	F2=$(git rev-parse HEAD:file2) &&
	{
		echo "100644 $F1 1	file1" &&
		echo "100644 $F2 2	file1"
	} | git update-index --index-info &&
	test_path_is_file file1 &&
	git checkout --theirs --no-overlay -- file1 &&
	test_path_is_missing file1

[master a11d2b7] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[master 1c03fe1] file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
rm 'file1'
ok 5 - --no-overlay --theirs with D/F conflict deletes file

expecting success of 2025.6 'wildcard pathspec matches file in subdirectory': 
	git reset --hard &&
	mkdir subdir &&
	test_commit file3-1 subdir/file3 &&
	test_commit file3-2 subdir/file3 &&

	git checkout --no-overlay file3-1 "*file3" &&
	echo file3-1 >expect &&
	test_path_is_file subdir/file3 &&
	test_cmp expect subdir/file3

HEAD is now at 1c03fe1 file2
[master 78da8bb] file3-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file3
[master cac8ac6] file3-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Updated 1 path from e1fb72e
ok 6 - wildcard pathspec matches file in subdirectory

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2026-checkout-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2026-checkout-pathspec-file/.git/
expecting success of 2026.1 'setup': 
	test_commit file0 &&

	echo 1 >fileA.t &&
	echo 1 >fileB.t &&
	echo 1 >fileC.t &&
	echo 1 >fileD.t &&
	git add fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "files 1" &&

	echo 2 >fileA.t &&
	echo 2 >fileB.t &&
	echo 2 >fileC.t &&
	echo 2 >fileD.t &&
	git add fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "files 2" &&

	git tag checkpoint

[master (root-commit) ad2e047] file0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0.t
[master 46ee160] files 1
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
 create mode 100644 fileC.t
 create mode 100644 fileD.t
[master 774eb8e] files 2
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+), 4 deletions(-)
ok 1 - setup

expecting success of 2026.2 '--pathspec-from-file from stdin': 
	restore_checkpoint &&

	echo fileA.t | git checkout --pathspec-from-file=- HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 1 path from 0465292
ok 2 - --pathspec-from-file from stdin

expecting success of 2026.3 '--pathspec-from-file from file': 
	restore_checkpoint &&

	echo fileA.t >list &&
	git checkout --pathspec-from-file=list HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 1 path from 0465292
ok 3 - --pathspec-from-file from file

expecting success of 2026.4 'NUL delimiters': 
	restore_checkpoint &&

	printf "fileA.t\0fileB.t\0" | git checkout --pathspec-from-file=- --pathspec-file-nul HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	M  fileB.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 2 paths from 0465292
ok 4 - NUL delimiters

expecting success of 2026.5 'LF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t\n" | git checkout --pathspec-from-file=- HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	M  fileB.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 2 paths from 0465292
ok 5 - LF delimiters

expecting success of 2026.6 'no trailing delimiter': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t" | git checkout --pathspec-from-file=- HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	M  fileB.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 2 paths from 0465292
ok 6 - no trailing delimiter

expecting success of 2026.7 'CRLF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\r\nfileB.t\r\n" | git checkout --pathspec-from-file=- HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	M  fileB.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 2 paths from 0465292
ok 7 - CRLF delimiters

expecting success of 2026.8 'quotes': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	git checkout --pathspec-from-file=list HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileA.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 1 path from 0465292
ok 8 - quotes

expecting success of 2026.9 'quotes not compatible with --pathspec-file-nul': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test_must_fail git checkout --pathspec-from-file=list --pathspec-file-nul HEAD^1

HEAD is now at 774eb8e files 2
error: pathspec '"file\101.t"
' did not match any file(s) known to git
ok 9 - quotes not compatible with --pathspec-file-nul

expecting success of 2026.10 'only touches what was listed': 
	restore_checkpoint &&

	printf "fileB.t\nfileC.t\n" | git checkout --pathspec-from-file=- HEAD^1 &&

	cat >expect <<-\EOF &&
	M  fileB.t
	M  fileC.t
	EOF
	verify_expect

HEAD is now at 774eb8e files 2
Updated 2 paths from 0465292
ok 10 - only touches what was listed

expecting success of 2026.11 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&

	test_must_fail git checkout --pathspec-from-file=list --detach 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--detach. cannot be used together" err &&

	test_must_fail git checkout --pathspec-from-file=list --patch 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--patch. cannot be used together" err &&

	test_must_fail git checkout --pathspec-from-file=list -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git checkout --pathspec-file-nul 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err

HEAD is now at 774eb8e files 2
fatal: options '--pathspec-from-file' and '--detach' cannot be used together
fatal: options '--pathspec-from-file' and '--patch' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
ok 11 - error conditions

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2027-checkout-track.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2027-checkout-track/.git/
expecting success of 2027.1 'setup': 
	test_commit one &&
	test_commit two

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - setup

expecting success of 2027.2 'checkout --track -b creates a new tracking branch': 
	git checkout --track -b branch1 main &&
	test $(git rev-parse --abbrev-ref HEAD) = branch1 &&
	test $(git config --get branch.branch1.remote) = . &&
	test $(git config --get branch.branch1.merge) = refs/heads/main

Switched to a new branch 'branch1'
branch 'branch1' set up to track 'main'.
ok 2 - checkout --track -b creates a new tracking branch

expecting success of 2027.3 'checkout --track -b rejects an extra path argument': 
	test_must_fail git checkout --track -b branch2 main one.t 2>err &&
	test_i18ngrep "cannot be used with updating paths" err

fatal: '--track' cannot be used with updating paths
ok 3 - checkout --track -b rejects an extra path argument

expecting success of 2027.4 'checkout --track -b overrides autoSetupMerge=inherit': 
	# Set up tracking config on main
	test_config branch.main.remote origin &&
	test_config branch.main.merge refs/heads/some-branch &&
	test_config branch.autoSetupMerge inherit &&
	# With --track=inherit, we copy the tracking config from main
	git checkout --track=inherit -b b1 main &&
	test_cmp_config origin branch.b1.remote &&
	test_cmp_config refs/heads/some-branch branch.b1.merge &&
	# With branch.autoSetupMerge=inherit, we do the same
	git checkout -b b2 main &&
	test_cmp_config origin branch.b2.remote &&
	test_cmp_config refs/heads/some-branch branch.b2.merge &&
	# But --track overrides this
	git checkout --track -b b3 main &&
	test_cmp_config . branch.b3.remote &&
	test_cmp_config refs/heads/main branch.b3.merge &&
	# And --track=direct does as well
	git checkout --track=direct -b b4 main &&
	test_cmp_config . branch.b4.remote &&
	test_cmp_config refs/heads/main branch.b4.merge

Switched to a new branch 'b1'
branch 'b1' set up to track 'origin/some-branch'.
Switched to a new branch 'b2'
branch 'b2' set up to track 'origin/some-branch'.
Switched to a new branch 'b3'
branch 'b3' set up to track 'main'.
Switched to a new branch 'b4'
branch 'b4' set up to track 'main'.
ok 4 - checkout --track -b overrides autoSetupMerge=inherit

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2024-checkout-dwim.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2024-checkout-dwim/.git/
expecting success of 2024.1 'setup': 
	test_commit my_main &&
	git init repo_a &&
	(
		cd repo_a &&
		test_commit a_main &&
		git checkout -b foo &&
		test_commit a_foo &&
		git checkout -b bar &&
		test_commit a_bar &&
		git checkout -b ambiguous_branch_and_file &&
		test_commit a_ambiguous_branch_and_file
	) &&
	git init repo_b &&
	(
		cd repo_b &&
		test_commit b_main &&
		git checkout -b foo &&
		test_commit b_foo &&
		git checkout -b baz &&
		test_commit b_baz &&
		git checkout -b ambiguous_branch_and_file &&
		test_commit b_ambiguous_branch_and_file
	) &&
	git remote add repo_a repo_a &&
	git remote add repo_b repo_b &&
	git config remote.repo_b.fetch \
		"+refs/heads/*:refs/remotes/other_b/*" &&
	git fetch --all

[master (root-commit) 476f86c] my_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 my_main.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2024-checkout-dwim/repo_a/.git/
[master (root-commit) d6d6851] a_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a_main.t
Switched to a new branch 'foo'
[foo e2c25ec] a_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a_foo.t
Switched to a new branch 'bar'
[bar bfd2f16] a_bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a_bar.t
Switched to a new branch 'ambiguous_branch_and_file'
[ambiguous_branch_and_file 225901c] a_ambiguous_branch_and_file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a_ambiguous_branch_and_file.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2024-checkout-dwim/repo_b/.git/
[master (root-commit) 272258e] b_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b_main.t
Switched to a new branch 'foo'
[foo 7eb022a] b_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b_foo.t
Switched to a new branch 'baz'
[baz 8ac57c7] b_baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b_baz.t
Switched to a new branch 'ambiguous_branch_and_file'
[ambiguous_branch_and_file 1b5c299] b_ambiguous_branch_and_file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b_ambiguous_branch_and_file.t
Fetching repo_a
From repo_a
 * [new branch]      ambiguous_branch_and_file   -> repo_a/ambiguous_branch_and_file
 * [new branch]      bar                         -> repo_a/bar
 * [new branch]      foo                         -> repo_a/foo
 * [new branch]      master                      -> repo_a/master
 * [new tag]         a_ambiguous_branch_and_file -> a_ambiguous_branch_and_file
 * [new tag]         a_bar                       -> a_bar
 * [new tag]         a_foo                       -> a_foo
 * [new tag]         a_main                      -> a_main
Fetching repo_b
From repo_b
 * [new branch]      ambiguous_branch_and_file   -> other_b/ambiguous_branch_and_file
 * [new branch]      baz                         -> other_b/baz
 * [new branch]      foo                         -> other_b/foo
 * [new branch]      master                      -> other_b/master
 * [new tag]         b_ambiguous_branch_and_file -> b_ambiguous_branch_and_file
 * [new tag]         b_baz                       -> b_baz
 * [new tag]         b_foo                       -> b_foo
 * [new tag]         b_main                      -> b_main
ok 1 - setup

expecting success of 2024.2 'checkout of non-existing branch fails': 
	git checkout -B main &&
	test_might_fail git branch -D xyzzy &&

	test_must_fail git checkout xyzzy &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/xyzzy &&
	test_branch main

Switched to a new branch 'main'
error: branch 'xyzzy' not found.
error: pathspec 'xyzzy' did not match any file(s) known to git
fatal: Needed a single revision
ok 2 - checkout of non-existing branch fails

expecting success of 2024.3 'checkout of branch from multiple remotes fails #1': 
	git checkout -B main &&
	test_might_fail git branch -D foo &&

	test_must_fail git checkout foo &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/foo &&
	test_branch main

Reset branch 'main'
error: branch 'foo' not found.
hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
hint: you can do so by fully qualifying the name with the --track option:
hint: 
hint:     git checkout --track origin/<name>
hint: 
hint: If you'd like to always have checkouts of an ambiguous <name> prefer
hint: one remote, e.g. the 'origin' remote, consider setting
hint: checkout.defaultRemote=origin in your config.
fatal: 'foo' matched multiple (2) remote tracking branches
fatal: Needed a single revision
ok 3 - checkout of branch from multiple remotes fails #1

expecting success of 2024.4 'when arg matches multiple remotes, do not fallback to interpreting as pathspec': 
	# create a file with name matching remote branch name
	git checkout -b t_ambiguous_branch_and_file &&
	>ambiguous_branch_and_file &&
	git add ambiguous_branch_and_file &&
	git commit -m "ambiguous_branch_and_file" &&

	# modify file to verify that it will not be touched by checkout
	test_when_finished "git checkout -- ambiguous_branch_and_file" &&
	echo "file contents" >ambiguous_branch_and_file &&
	cp ambiguous_branch_and_file expect &&

	test_must_fail git checkout ambiguous_branch_and_file 2>err &&

	test_i18ngrep "matched multiple (2) remote tracking branches" err &&

	# file must not be altered
	test_cmp expect ambiguous_branch_and_file

Switched to a new branch 't_ambiguous_branch_and_file'
[t_ambiguous_branch_and_file 8830e76] ambiguous_branch_and_file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ambiguous_branch_and_file
fatal: 'ambiguous_branch_and_file' matched multiple (2) remote tracking branches
ok 4 - when arg matches multiple remotes, do not fallback to interpreting as pathspec

expecting success of 2024.5 'checkout of branch from multiple remotes fails with advice': 
	git checkout -B main &&
	test_might_fail git branch -D foo &&
	test_must_fail git checkout foo 2>stderr &&
	test_branch main &&
	status_uno_is_clean &&
	test_i18ngrep "^hint: " stderr &&
	test_must_fail git -c advice.checkoutAmbiguousRemoteBranchName=false \
		checkout foo 2>stderr &&
	test_branch main &&
	status_uno_is_clean &&
	test_i18ngrep ! "^hint: " stderr

Switched to and reset branch 'main'
error: branch 'foo' not found.
hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
hint: you can do so by fully qualifying the name with the --track option:
hint: 
hint:     git checkout --track origin/<name>
hint: 
hint: If you'd like to always have checkouts of an ambiguous <name> prefer
hint: one remote, e.g. the 'origin' remote, consider setting
hint: checkout.defaultRemote=origin in your config.
ok 5 - checkout of branch from multiple remotes fails with advice

expecting success of 2024.6 'checkout -p with multiple remotes does not print advice': 
	git checkout -B main &&
	test_might_fail git branch -D foo &&

	git checkout -p foo 2>stderr &&
	test_i18ngrep ! "^hint: " stderr &&
	status_uno_is_clean

Reset branch 'main'
error: branch 'foo' not found.
ok 6 - checkout -p with multiple remotes does not print advice

expecting success of 2024.7 'checkout of branch from multiple remotes succeeds with checkout.defaultRemote #1': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D foo &&

	git -c checkout.defaultRemote=repo_a checkout foo &&
	status_uno_is_clean &&
	test_branch foo &&
	test_cmp_rev remotes/repo_a/foo HEAD &&
	test_branch_upstream foo repo_a foo

Reset branch 'main'
error: branch 'foo' not found.
Switched to a new branch 'foo'
branch 'foo' set up to track 'repo_a/foo'.
ok 7 - checkout of branch from multiple remotes succeeds with checkout.defaultRemote #1

expecting success of 2024.8 'checkout of branch from a single remote succeeds #1': 
	git checkout -B main &&
	test_might_fail git branch -D bar &&

	git checkout bar &&
	status_uno_is_clean &&
	test_branch bar &&
	test_cmp_rev remotes/repo_a/bar HEAD &&
	test_branch_upstream bar repo_a bar

Switched to and reset branch 'main'
error: branch 'bar' not found.
Switched to a new branch 'bar'
branch 'bar' set up to track 'repo_a/bar'.
ok 8 - checkout of branch from a single remote succeeds #1

expecting success of 2024.9 'checkout of branch from a single remote succeeds #2': 
	git checkout -B main &&
	test_might_fail git branch -D baz &&

	git checkout baz &&
	status_uno_is_clean &&
	test_branch baz &&
	test_cmp_rev remotes/other_b/baz HEAD &&
	test_branch_upstream baz repo_b baz

Switched to and reset branch 'main'
error: branch 'baz' not found.
Switched to a new branch 'baz'
branch 'baz' set up to track 'repo_b/baz'.
ok 9 - checkout of branch from a single remote succeeds #2

expecting success of 2024.10 '--no-guess suppresses branch auto-vivification': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D bar &&

	test_must_fail git checkout --no-guess bar &&
	test_must_fail git rev-parse --verify refs/heads/bar &&
	test_branch main

Switched to and reset branch 'main'
Deleted branch bar (was bfd2f16).
error: pathspec 'bar' did not match any file(s) known to git
fatal: Needed a single revision
ok 10 - --no-guess suppresses branch auto-vivification

expecting success of 2024.11 'checkout.guess = false suppresses branch auto-vivification': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D bar &&

	test_config checkout.guess false &&
	test_must_fail git checkout bar &&
	test_must_fail git rev-parse --verify refs/heads/bar &&
	test_branch main

Reset branch 'main'
error: branch 'bar' not found.
error: pathspec 'bar' did not match any file(s) known to git
fatal: Needed a single revision
ok 11 - checkout.guess = false suppresses branch auto-vivification

expecting success of 2024.12 'setup more remotes with unconventional refspecs': 
	git checkout -B main &&
	status_uno_is_clean &&
	git init repo_c &&
	(
		cd repo_c &&
		test_commit c_main &&
		git checkout -b bar &&
		test_commit c_bar &&
		git checkout -b spam &&
		test_commit c_spam
	) &&
	git init repo_d &&
	(
		cd repo_d &&
		test_commit d_main &&
		git checkout -b baz &&
		test_commit d_baz &&
		git checkout -b eggs &&
		test_commit d_eggs
	) &&
	git remote add repo_c repo_c &&
	git config remote.repo_c.fetch \
		"+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&
	git remote add repo_d repo_d &&
	git config remote.repo_d.fetch \
		"+refs/heads/*:refs/repo_d/*" &&
	git fetch --all

Reset branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2024-checkout-dwim/repo_c/.git/
[master (root-commit) cdfe1c8] c_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c_main.t
Switched to a new branch 'bar'
[bar b017b41] c_bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c_bar.t
Switched to a new branch 'spam'
[spam 449823f] c_spam
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c_spam.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2024-checkout-dwim/repo_d/.git/
[master (root-commit) b0e85f1] d_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d_main.t
Switched to a new branch 'baz'
[baz b83c7c6] d_baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d_baz.t
Switched to a new branch 'eggs'
[eggs e1ffd37] d_eggs
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d_eggs.t
Fetching repo_a
Fetching repo_b
Fetching repo_c
From repo_c
 * [new branch]      bar        -> extra_dir/repo_c/extra_dir/bar
 * [new branch]      master     -> extra_dir/repo_c/extra_dir/master
 * [new branch]      spam       -> extra_dir/repo_c/extra_dir/spam
 * [new tag]         c_bar      -> c_bar
 * [new tag]         c_main     -> c_main
 * [new tag]         c_spam     -> c_spam
Fetching repo_d
From repo_d
 * [new branch]      baz        -> refs/repo_d/baz
 * [new branch]      eggs       -> refs/repo_d/eggs
 * [new branch]      master     -> refs/repo_d/master
 * [new tag]         d_baz      -> d_baz
 * [new tag]         d_eggs     -> d_eggs
 * [new tag]         d_main     -> d_main
ok 12 - setup more remotes with unconventional refspecs

expecting success of 2024.13 'checkout of branch from multiple remotes fails #2': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D bar &&

	test_must_fail git checkout bar &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/bar &&
	test_branch main

Reset branch 'main'
error: branch 'bar' not found.
hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
hint: you can do so by fully qualifying the name with the --track option:
hint: 
hint:     git checkout --track origin/<name>
hint: 
hint: If you'd like to always have checkouts of an ambiguous <name> prefer
hint: one remote, e.g. the 'origin' remote, consider setting
hint: checkout.defaultRemote=origin in your config.
fatal: 'bar' matched multiple (2) remote tracking branches
fatal: Needed a single revision
ok 13 - checkout of branch from multiple remotes fails #2

expecting success of 2024.14 'checkout of branch from multiple remotes fails #3': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D baz &&

	test_must_fail git checkout baz &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/baz &&
	test_branch main

Reset branch 'main'
Deleted branch baz (was 8ac57c7).
hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
hint: you can do so by fully qualifying the name with the --track option:
hint: 
hint:     git checkout --track origin/<name>
hint: 
hint: If you'd like to always have checkouts of an ambiguous <name> prefer
hint: one remote, e.g. the 'origin' remote, consider setting
hint: checkout.defaultRemote=origin in your config.
fatal: 'baz' matched multiple (2) remote tracking branches
fatal: Needed a single revision
ok 14 - checkout of branch from multiple remotes fails #3

expecting success of 2024.15 'checkout of branch from a single remote succeeds #3': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D spam &&

	git checkout spam &&
	status_uno_is_clean &&
	test_branch spam &&
	test_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&
	test_branch_upstream spam repo_c spam

Reset branch 'main'
error: branch 'spam' not found.
Switched to a new branch 'spam'
branch 'spam' set up to track 'repo_c/spam'.
ok 15 - checkout of branch from a single remote succeeds #3

expecting success of 2024.16 'checkout of branch from a single remote succeeds #4': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D eggs &&

	git checkout eggs &&
	status_uno_is_clean &&
	test_branch eggs &&
	test_cmp_rev refs/repo_d/eggs HEAD &&
	test_branch_upstream eggs repo_d eggs

Switched to and reset branch 'main'
error: branch 'eggs' not found.
Switched to a new branch 'eggs'
branch 'eggs' set up to track 'repo_d/eggs'.
ok 16 - checkout of branch from a single remote succeeds #4

expecting success of 2024.17 'checkout of branch with a file having the same name fails': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D spam &&

	>spam &&
	test_must_fail git checkout spam &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/spam &&
	test_branch main

Switched to and reset branch 'main'
Deleted branch spam (was 449823f).
fatal: 'spam' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
fatal: Needed a single revision
ok 17 - checkout of branch with a file having the same name fails

expecting success of 2024.18 'checkout of branch with a file in subdir having the same name fails': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D spam &&

	>spam &&
	mkdir sub &&
	mv spam sub/spam &&
	test_must_fail git -C sub checkout spam &&
	status_uno_is_clean &&
	test_must_fail git rev-parse --verify refs/heads/spam &&
	test_branch main

Reset branch 'main'
error: branch 'spam' not found.
fatal: 'spam' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
fatal: Needed a single revision
ok 18 - checkout of branch with a file in subdir having the same name fails

expecting success of 2024.19 'checkout <branch> -- succeeds, even if a file with the same name exists': 
	git checkout -B main &&
	status_uno_is_clean &&
	test_might_fail git branch -D spam &&

	>spam &&
	git checkout spam -- &&
	status_uno_is_clean &&
	test_branch spam &&
	test_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&
	test_branch_upstream spam repo_c spam

Reset branch 'main'
error: branch 'spam' not found.
Switched to a new branch 'spam'
branch 'spam' set up to track 'repo_c/spam'.
ok 19 - checkout <branch> -- succeeds, even if a file with the same name exists

expecting success of 2024.20 'loosely defined local base branch is reported correctly': 

	git checkout main &&
	status_uno_is_clean &&
	git branch strict &&
	git branch loose &&
	git commit --allow-empty -m "a bit more" &&

	test_config branch.strict.remote . &&
	test_config branch.loose.remote . &&
	test_config branch.strict.merge refs/heads/main &&
	test_config branch.loose.merge main &&

	git checkout strict | sed -e "s/strict/BRANCHNAME/g" >expect &&
	status_uno_is_clean &&
	git checkout loose | sed -e "s/loose/BRANCHNAME/g" >actual &&
	status_uno_is_clean &&

	test_cmp expect actual

Switched to branch 'main'
[main 0b0f2ce] a bit more
 Author: A U Thor <author@example.com>
Switched to branch 'strict'
Switched to branch 'loose'
ok 20 - loosely defined local base branch is reported correctly

expecting success of 2024.21 'reject when arg could be part of dwim branch': 
	git remote add foo file://non-existent-place &&
	git update-ref refs/remotes/foo/dwim-arg HEAD &&
	echo foo >dwim-arg &&
	git add dwim-arg &&
	echo bar >dwim-arg &&
	test_must_fail git checkout dwim-arg &&
	test_must_fail git rev-parse refs/heads/dwim-arg -- &&
	grep bar dwim-arg

fatal: 'dwim-arg' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
fatal: bad revision 'refs/heads/dwim-arg'
bar
ok 21 - reject when arg could be part of dwim branch

expecting success of 2024.22 'disambiguate dwim branch and checkout path (1)': 
	git update-ref refs/remotes/foo/dwim-arg1 HEAD &&
	echo foo >dwim-arg1 &&
	git add dwim-arg1 &&
	echo bar >dwim-arg1 &&
	git checkout -- dwim-arg1 &&
	test_must_fail git rev-parse refs/heads/dwim-arg1 -- &&
	grep foo dwim-arg1

fatal: bad revision 'refs/heads/dwim-arg1'
foo
ok 22 - disambiguate dwim branch and checkout path (1)

expecting success of 2024.23 'disambiguate dwim branch and checkout path (2)': 
	git update-ref refs/remotes/foo/dwim-arg2 HEAD &&
	echo foo >dwim-arg2 &&
	git add dwim-arg2 &&
	echo bar >dwim-arg2 &&
	git checkout dwim-arg2 -- &&
	git rev-parse refs/heads/dwim-arg2 -- &&
	grep bar dwim-arg2

Switched to a new branch 'dwim-arg2'
A	dwim-arg
A	dwim-arg1
A	dwim-arg2
branch 'dwim-arg2' set up to track 'foo/dwim-arg2'.
e1ffd376e093970186efb2074ec16dcb57d23789
--
bar
ok 23 - disambiguate dwim branch and checkout path (2)

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2050-git-dir-relative.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2050-git-dir-relative/.git/
expecting success of 2050.1 'Setting up post-commit hook': 
mkdir -p .git/hooks &&
echo >.git/hooks/post-commit "#!/bin/sh
touch \"\${COMMIT_FILE}\"
echo Post commit hook was called." &&
chmod +x .git/hooks/post-commit
ok 1 - Setting up post-commit hook

expecting success of 2050.2 'post-commit hook used ordinarily': 
echo initial >top &&
git add top &&
git commit -m initial &&
test -r "${COMMIT_FILE}"

Post commit hook was called.
[master (root-commit) 0619340] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 top
ok 2 - post-commit hook used ordinarily

expecting success of 2050.3 'post-commit-hook created and used from top dir': 
echo changed >top &&
git --git-dir subdir/.git add top &&
git --git-dir subdir/.git commit -m topcommit &&
test -r "${COMMIT_FILE}"

Post commit hook was called.
[master fc38a58] topcommit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - post-commit-hook created and used from top dir

expecting success of 2050.4 'post-commit-hook from sub dir': 
echo changed again >top &&
cd subdir &&
git --git-dir .git --work-tree .. add ../top &&
git --git-dir .git --work-tree .. commit -m subcommit &&
test -r "${COMMIT_FILE}"

Post commit hook was called.
[master ca7703f] subcommit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - post-commit-hook from sub dir

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2060-switch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2060-switch/.git/
expecting success of 2060.1 'setup': 
	test_commit first &&
	git branch first-branch &&
	test_commit second &&
	test_commit third &&
	git remote add origin nohost:/nopath &&
	git update-ref refs/remotes/origin/foo first-branch

[main (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[main d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[main cd7036d] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third.t
ok 1 - setup

expecting success of 2060.2 'switch branch no arguments': 
	test_must_fail git switch

fatal: missing branch or commit argument
ok 2 - switch branch no arguments

expecting success of 2060.3 'switch branch': 
	git switch first-branch &&
	test_path_is_missing second.t

Switched to branch 'first-branch'
ok 3 - switch branch

expecting success of 2060.4 'switch and detach': 
	test_when_finished git switch main &&
	test_must_fail git switch main^{commit} &&
	git switch --detach main^{commit} &&
	test_must_fail git symbolic-ref HEAD

fatal: a branch is expected, got commit 'main^{commit}'
hint: If you want to detach HEAD at the commit, try again with the --detach option.
HEAD is now at cd7036d third
fatal: ref HEAD is not a symbolic ref
Switched to branch 'main'
ok 4 - switch and detach

expecting success of 2060.5 'suggestion to detach': 
	test_must_fail git switch main^{commit} 2>stderr &&
	grep "try again with the --detach option" stderr

hint: If you want to detach HEAD at the commit, try again with the --detach option.
ok 5 - suggestion to detach

expecting success of 2060.6 'suggestion to detach is suppressed with advice.suggestDetachingHead=false': 
	test_config advice.suggestDetachingHead false &&
	test_must_fail git switch main^{commit} 2>stderr &&
	! grep "try again with the --detach option" stderr

ok 6 - suggestion to detach is suppressed with advice.suggestDetachingHead=false

expecting success of 2060.7 'switch and detach current branch': 
	test_when_finished git switch main &&
	git switch main &&
	git switch --detach &&
	test_must_fail git symbolic-ref HEAD

Already on 'main'
HEAD is now at cd7036d third
fatal: ref HEAD is not a symbolic ref
Switched to branch 'main'
ok 7 - switch and detach current branch

expecting success of 2060.8 'switch and create branch': 
	test_when_finished git switch main &&
	git switch -c temp main^ &&
	test_cmp_rev main^ refs/heads/temp &&
	echo refs/heads/temp >expected-branch &&
	git symbolic-ref HEAD >actual-branch &&
	test_cmp expected-branch actual-branch

Switched to a new branch 'temp'
Switched to branch 'main'
ok 8 - switch and create branch

expecting success of 2060.9 'force create branch from HEAD': 
	test_when_finished git switch main &&
	git switch --detach main &&
	test_must_fail git switch -c temp &&
	git switch -C temp &&
	test_cmp_rev main refs/heads/temp &&
	echo refs/heads/temp >expected-branch &&
	git symbolic-ref HEAD >actual-branch &&
	test_cmp expected-branch actual-branch

HEAD is now at cd7036d third
fatal: a branch named 'temp' already exists
Switched to and reset branch 'temp'
Switched to branch 'main'
ok 9 - force create branch from HEAD

expecting success of 2060.10 'new orphan branch from empty': 
	test_when_finished git switch main &&
	test_must_fail git switch --orphan new-orphan HEAD &&
	git switch --orphan new-orphan &&
	test_commit orphan &&
	git cat-file commit refs/heads/new-orphan >commit &&
	! grep ^parent commit &&
	git ls-files >tracked-files &&
	echo orphan.t >expected &&
	test_cmp expected tracked-files

fatal: '--orphan' cannot take <start-point>
Switched to a new branch 'new-orphan'
[new-orphan (root-commit) 11bb70e] orphan
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 orphan.t
Switched to branch 'main'
ok 10 - new orphan branch from empty

expecting success of 2060.11 'orphan branch works with --discard-changes': 
	test_when_finished git switch main &&
	echo foo >foo.txt &&
	git switch --discard-changes --orphan new-orphan2 &&
	git ls-files >tracked-files &&
	test_must_be_empty tracked-files

Switched to a new branch 'new-orphan2'
Switched to branch 'main'
ok 11 - orphan branch works with --discard-changes

expecting success of 2060.12 'switching ignores file of same branch name': 
	test_when_finished git switch main &&
	: >first-branch &&
	git switch first-branch &&
	echo refs/heads/first-branch >expected &&
	git symbolic-ref HEAD >actual &&
	test_cmp expected actual

Switched to branch 'first-branch'
Switched to branch 'main'
ok 12 - switching ignores file of same branch name

expecting success of 2060.13 'guess and create branch': 
	test_when_finished git switch main &&
	test_must_fail git switch --no-guess foo &&
	test_config checkout.guess false &&
	test_must_fail git switch foo &&
	test_config checkout.guess true &&
	git switch foo &&
	echo refs/heads/foo >expected &&
	git symbolic-ref HEAD >actual &&
	test_cmp expected actual

fatal: invalid reference: foo
fatal: invalid reference: foo
Switched to a new branch 'foo'
branch 'foo' set up to track 'origin/foo'.
Switched to branch 'main'
ok 13 - guess and create branch

expecting success of 2060.14 'not switching when something is in progress': 
	test_when_finished rm -f .git/MERGE_HEAD &&
	# fake a merge-in-progress
	cp .git/HEAD .git/MERGE_HEAD &&
	test_must_fail git switch -d @^

fatal: cannot switch branch while merging
Consider "git merge --quit" or "git worktree add".
ok 14 - not switching when something is in progress

expecting success of 2060.15 'tracking info copied with autoSetupMerge=inherit': 
	# default config does not copy tracking info
	git switch -c foo-no-inherit foo &&
	test_cmp_config "" --default "" branch.foo-no-inherit.remote &&
	test_cmp_config "" --default "" branch.foo-no-inherit.merge &&
	# with --track=inherit, we copy tracking info from foo
	git switch --track=inherit -c foo2 foo &&
	test_cmp_config origin branch.foo2.remote &&
	test_cmp_config refs/heads/foo branch.foo2.merge &&
	# with autoSetupMerge=inherit, we do the same
	test_config branch.autoSetupMerge inherit &&
	git switch -c foo3 foo &&
	test_cmp_config origin branch.foo3.remote &&
	test_cmp_config refs/heads/foo branch.foo3.merge &&
	# with --track, we override autoSetupMerge
	git switch --track -c foo4 foo &&
	test_cmp_config . branch.foo4.remote &&
	test_cmp_config refs/heads/foo branch.foo4.merge &&
	# and --track=direct does as well
	git switch --track=direct -c foo5 foo &&
	test_cmp_config . branch.foo5.remote &&
	test_cmp_config refs/heads/foo branch.foo5.merge &&
	# no tracking info to inherit from main
	git switch -c main2 main &&
	test_cmp_config "" --default "" branch.main2.remote &&
	test_cmp_config "" --default "" branch.main2.merge

Switched to a new branch 'foo-no-inherit'
Switched to a new branch 'foo2'
branch 'foo2' set up to track 'origin/foo'.
Switched to a new branch 'foo3'
branch 'foo3' set up to track 'origin/foo'.
Switched to a new branch 'foo4'
branch 'foo4' set up to track 'foo'.
Switched to a new branch 'foo5'
branch 'foo5' set up to track 'foo'.
warning: asked to inherit tracking from 'main', but no remote is set
Switched to a new branch 'main2'
ok 15 - tracking info copied with autoSetupMerge=inherit

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2030-unresolve-info.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2030-unresolve-info/.git/
expecting success of 2030.1 'setup': 
	mkdir fi &&
	printf "a\0a" >binary &&
	git add binary &&
	test_commit initial fi/le first &&
	git branch side &&
	git branch another &&
	printf "a\0b" >binary &&
	git add binary &&
	test_commit second fi/le second &&
	git checkout side &&
	test_commit third fi/le third &&
	git branch add-add &&
	git checkout another &&
	test_commit fourth fi/le fourth &&
	git checkout add-add &&
	test_commit fifth add-differently &&
	git checkout main

[main (root-commit) 7b271e3] initial
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 binary
 create mode 100644 fi/le
[main 9a00f99] second
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'side'
[side b18340d] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'another'
[another cf4d985] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'add-add'
[add-add b851e77] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 add-differently
Switched to branch 'main'
ok 1 - setup

expecting success of 2030.2 'add records switch clears': 
	prime_resolve_undo &&
	test_tick &&
	git commit -m merged &&
	echo committing keeps &&
	check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
	git checkout second^0 &&
	echo switching clears &&
	check_resolve_undo cleared

HEAD is now at 9a00f99 second
Note: switching to 'second^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
[detached HEAD b3a51df] merged
 Author: A U Thor <author@example.com>
committing keeps
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b3a51df merged

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> b3a51df

HEAD is now at 9a00f99 second
switching clears
ok 2 - add records switch clears

expecting success of 2030.3 'rm records reset clears': 
	prime_resolve_undo &&
	test_tick &&
	git commit -m merged &&
	echo committing keeps &&
	check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&

	echo merge clears upfront &&
	test_must_fail git merge fourth^0 &&
	check_resolve_undo nuked &&

	git rm -f fi/le &&
	echo resolving records &&
	check_resolve_undo recorded fi/le initial:fi/le HEAD:fi/le fourth:fi/le &&

	git reset --hard &&
	echo resetting discards &&
	check_resolve_undo discarded

HEAD is now at 9a00f99 second
HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
[detached HEAD 70d285e] merged
 Author: A U Thor <author@example.com>
committing keeps
merge clears upfront
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
rm 'fi/le'
resolving records
HEAD is now at 70d285e merged
resetting discards
ok 3 - rm records reset clears

expecting success of 2030.4 'plumbing clears': 
	prime_resolve_undo &&
	test_tick &&
	git commit -m merged &&
	echo committing keeps &&
	check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&

	echo plumbing clear &&
	git update-index --clear-resolve-undo &&
	check_resolve_undo cleared

HEAD is now at 70d285e merged
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  70d285e merged

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 70d285e

HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
[detached HEAD 894de51] merged
 Author: A U Thor <author@example.com>
committing keeps
plumbing clear
ok 4 - plumbing clears

expecting success of 2030.5 'add records checkout -m undoes': 
	prime_resolve_undo &&
	git diff HEAD &&
	git checkout --conflict=merge fi/le &&
	echo checkout used the record and removed it &&
	check_resolve_undo removed &&
	echo the index and the work tree is unmerged again &&
	git diff >actual &&
	grep "^++<<<<<<<" actual

HEAD is now at 894de51 merged
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  894de51 merged

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 894de51

HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
diff --git a/fi/le b/fi/le
index e019be0..8dca2f8 100644
--- a/fi/le
+++ b/fi/le
@@ -1 +1 @@
-second
+different
Recreated 1 merge conflict
checkout used the record and removed it
the index and the work tree is unmerged again
++<<<<<<< ours
ok 5 - add records checkout -m undoes

expecting success of 2030.6 'unmerge with plumbing': 
	prime_resolve_undo &&
	git update-index --unresolve fi/le &&
	git ls-files -u >actual &&
	test_line_count = 3 actual

HEAD is now at 9a00f99 second
HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
ok 6 - unmerge with plumbing

expecting success of 2030.7 'rerere and rerere forget': 
	mkdir .git/rr-cache &&
	prime_resolve_undo &&
	echo record the resolution &&
	git rerere &&
	rerere_id=$(cd .git/rr-cache && echo */postimage) &&
	rerere_id=${rerere_id%/postimage} &&
	test -f .git/rr-cache/$rerere_id/postimage &&
	git checkout -m fi/le &&
	echo resurrect the conflict &&
	grep "^=======" fi/le &&
	echo reresolve the conflict &&
	git rerere &&
	test "z$(cat fi/le)" = zdifferent &&
	echo register the resolution again &&
	git add fi/le &&
	check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
	test -z "$(git ls-files -u)" &&
	git rerere forget fi/le &&
	! test -f .git/rr-cache/$rerere_id/postimage &&
	tr "\0" "\n" <.git/MERGE_RR >actual &&
	echo "$rerere_id	fi/le" >expect &&
	test_cmp expect actual

HEAD is now at 9a00f99 second
HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Recorded preimage for 'fi/le'
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
record the resolution
Recorded resolution for 'fi/le'.
Recreated 1 merge conflict
resurrect the conflict
=======
reresolve the conflict
Resolved 'fi/le' using previous resolution.
register the resolution again
Updated preimage for 'fi/le'
Forgot resolution for 'fi/le'
ok 7 - rerere and rerere forget

expecting success of 2030.8 'rerere and rerere forget (subdirectory)': 
	rm -fr .git/rr-cache &&
	mkdir .git/rr-cache &&
	prime_resolve_undo &&
	echo record the resolution &&
	(cd fi && git rerere) &&
	rerere_id=$(cd .git/rr-cache && echo */postimage) &&
	rerere_id=${rerere_id%/postimage} &&
	test -f .git/rr-cache/$rerere_id/postimage &&
	(cd fi && git checkout -m le) &&
	echo resurrect the conflict &&
	grep "^=======" fi/le &&
	echo reresolve the conflict &&
	(cd fi && git rerere) &&
	test "z$(cat fi/le)" = zdifferent &&
	echo register the resolution again &&
	(cd fi && git add le) &&
	check_resolve_undo kept fi/le initial:fi/le second:fi/le third:fi/le &&
	test -z "$(git ls-files -u)" &&
	(cd fi && git rerere forget le) &&
	! test -f .git/rr-cache/$rerere_id/postimage &&
	tr "\0" "\n" <.git/MERGE_RR >actual &&
	echo "$rerere_id	fi/le" >expect &&
	test_cmp expect actual

HEAD is now at 9a00f99 second
HEAD is now at 9a00f99 second
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Recorded preimage for 'fi/le'
Automatic merge failed; fix conflicts and then commit the result.
merge does not leave anything
resolving records
record the resolution
Recorded resolution for 'fi/le'.
Recreated 1 merge conflict
resurrect the conflict
=======
reresolve the conflict
Resolved 'fi/le' using previous resolution.
register the resolution again
Updated preimage for 'fi/le'
Forgot resolution for 'fi/le'
ok 8 - rerere and rerere forget (subdirectory)

expecting success of 2030.9 'rerere forget (binary)': 
	git checkout -f side &&
	test_commit --printf binary binary "a\0c" &&
	test_must_fail git merge second &&
	git rerere forget binary

Previous HEAD position was 9a00f99 second
Switched to branch 'side'
[side d884667] binary
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
warning: Cannot merge binary files: binary (HEAD vs. second)
Auto-merging binary
CONFLICT (content): Merge conflict in binary
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Recorded preimage for 'fi/le'
Automatic merge failed; fix conflicts and then commit the result.
error: could not parse conflict hunks in 'binary'
ok 9 - rerere forget (binary)

expecting success of 2030.10 'rerere forget (add-add conflict)': 
	git checkout -f main &&
	echo main >add-differently &&
	git add add-differently &&
	git commit -m "add differently" &&
	test_must_fail git merge fifth &&
	git rerere forget add-differently 2>actual &&
	test_i18ngrep "no remembered" actual

Switched to branch 'main'
[main 8751f38] add differently
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 add-differently
Auto-merging add-differently
CONFLICT (add/add): Merge conflict in add-differently
Auto-merging fi/le
CONFLICT (content): Merge conflict in fi/le
Recorded preimage for 'add-differently'
Recorded preimage for 'fi/le'
Automatic merge failed; fix conflicts and then commit the result.
error: no remembered resolution for 'add-differently'
ok 10 - rerere forget (add-add conflict)

expecting success of 2030.11 'resolve-undo keeps blobs from gc': 
	git checkout -f main &&

	# First make sure we do not have any cruft left in the object store
	git repack -a -d &&
	git prune --expire=now &&
	git prune-packed &&
	git gc --prune=now &&
	git fsck --unreachable >cruft &&
	test_must_be_empty cruft &&

	# Now add three otherwise unreferenced blob objects to the index
	git reset --hard &&
	B1=$(echo "resolve undo test data 1" | git hash-object -w --stdin) &&
	B2=$(echo "resolve undo test data 2" | git hash-object -w --stdin) &&
	B3=$(echo "resolve undo test data 3" | git hash-object -w --stdin) &&
	git update-index --add --index-info <<-EOF &&
	100644 $B1 1	frotz
	100644 $B2 2	frotz
	100644 $B3 3	frotz
	EOF

	# These three blob objects are reachable (only) from the index
	git fsck --unreachable >cruft &&
	test_must_be_empty cruft &&
	# and they should be protected from GC
	git gc --prune=now &&
	git cat-file -e $B1 &&
	git cat-file -e $B2 &&
	git cat-file -e $B3 &&

	# Now resolve the conflicted path
	B0=$(echo "resolve undo test data 0" | git hash-object -w --stdin) &&
	git update-index --add --cacheinfo 100644,$B0,frotz &&

	# These three blob objects are now reachable only from the resolve-undo
	git fsck --unreachable >cruft &&
	test_must_be_empty cruft &&

	# and they should survive GC
	git gc --prune=now &&
	git cat-file -e $B0 &&
	git cat-file -e $B1 &&
	git cat-file -e $B2 &&
	git cat-file -e $B3 &&

	# Now we switch away, which nukes resolve-undo, and
	# blobs B0..B3 would become dangling.  fsck should
	# notice that they are now unreachable.
	git checkout -f side &&
	git fsck --unreachable >cruft &&
	sort cruft >actual &&
	sort <<-EOF >expect &&
	unreachable blob $B0
	unreachable blob $B1
	unreachable blob $B2
	unreachable blob $B3
	EOF
	test_cmp expect actual &&

	# And they should go away when gc runs.
	git gc --prune=now &&
	git fsck --unreachable >cruft &&
	test_must_be_empty cruft &&

	test_must_fail git cat-file -e $B0 &&
	test_must_fail git cat-file -e $B1 &&
	test_must_fail git cat-file -e $B2 &&
	test_must_fail git cat-file -e $B3

Already on 'main'
HEAD is now at 8751f38 add differently
Switched to branch 'side'
ok 11 - resolve-undo keeps blobs from gc

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2070-restore.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2070-restore/.git/
expecting success of 2070.1 'setup': 
	test_commit first &&
	echo first-and-a-half >>first.t &&
	git add first.t &&
	test_commit second &&
	echo one >one &&
	echo two >two &&
	echo untracked >untracked &&
	echo ignored >ignored &&
	echo /ignored >.gitignore &&
	git add one two .gitignore &&
	git update-ref refs/heads/one main

[main (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[main a46c920] second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 second.t
ok 1 - setup

expecting success of 2070.2 'restore without pathspec is not ok': 
	test_must_fail git restore &&
	test_must_fail git restore --source=first

fatal: you must specify path(s) to restore
fatal: you must specify path(s) to restore
ok 2 - restore without pathspec is not ok

expecting success of 2070.3 'restore a file, ignoring branch of same name': 
	cat one >expected &&
	echo dirty >>one &&
	git restore one &&
	test_cmp expected one

ok 3 - restore a file, ignoring branch of same name

expecting success of 2070.4 'restore a file on worktree from another ref': 
	test_when_finished git reset --hard &&
	git cat-file blob first:./first.t >expected &&
	git restore --source=first first.t &&
	test_cmp expected first.t &&
	git cat-file blob HEAD:./first.t >expected &&
	git show :first.t >actual &&
	test_cmp expected actual

HEAD is now at a46c920 second
ok 4 - restore a file on worktree from another ref

expecting success of 2070.5 'restore a file in the index from another ref': 
	test_when_finished git reset --hard &&
	git cat-file blob first:./first.t >expected &&
	git restore --source=first --staged first.t &&
	git show :first.t >actual &&
	test_cmp expected actual &&
	git cat-file blob HEAD:./first.t >expected &&
	test_cmp expected first.t

HEAD is now at a46c920 second
ok 5 - restore a file in the index from another ref

expecting success of 2070.6 'restore a file in both the index and worktree from another ref': 
	test_when_finished git reset --hard &&
	git cat-file blob first:./first.t >expected &&
	git restore --source=first --staged --worktree first.t &&
	git show :first.t >actual &&
	test_cmp expected actual &&
	test_cmp expected first.t

HEAD is now at a46c920 second
ok 6 - restore a file in both the index and worktree from another ref

expecting success of 2070.7 'restore --staged uses HEAD as source': 
	test_when_finished git reset --hard &&
	git cat-file blob :./first.t >expected &&
	echo index-dirty >>first.t &&
	git add first.t &&
	git restore --staged first.t &&
	git cat-file blob :./first.t >actual &&
	test_cmp expected actual

HEAD is now at a46c920 second
ok 7 - restore --staged uses HEAD as source

expecting success of 2070.8 'restore --worktree --staged uses HEAD as source': 
	test_when_finished git reset --hard &&
	git show HEAD:./first.t >expected &&
	echo dirty >>first.t &&
	git add first.t &&
	git restore --worktree --staged first.t &&
	git show :./first.t >actual &&
	test_cmp expected actual &&
	test_cmp expected first.t

HEAD is now at a46c920 second
ok 8 - restore --worktree --staged uses HEAD as source

expecting success of 2070.9 'restore --ignore-unmerged ignores unmerged entries': 
	git init unmerged &&
	(
		cd unmerged &&
		echo one >unmerged &&
		echo one >common &&
		git add unmerged common &&
		git commit -m common &&
		git switch -c first &&
		echo first >unmerged &&
		git commit -am first &&
		git switch -c second main &&
		echo second >unmerged &&
		git commit -am second &&
		test_must_fail git merge first &&

		echo dirty >>common &&
		test_must_fail git restore . &&

		git restore --ignore-unmerged --quiet . >output 2>&1 &&
		git diff common >diff-output &&
		test_must_be_empty output &&
		test_must_be_empty diff-output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2070-restore/unmerged/.git/
[main (root-commit) b83edd8] common
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 common
 create mode 100644 unmerged
Switched to a new branch 'first'
[first 753ae86] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'second'
[second 06de6fa] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging unmerged
CONFLICT (content): Merge conflict in unmerged
Automatic merge failed; fix conflicts and then commit the result.
error: path 'unmerged' is unmerged
ok 9 - restore --ignore-unmerged ignores unmerged entries

expecting success of 2070.10 'restore --staged adds deleted intent-to-add file back to index': 
	echo "nonempty" >nonempty &&
	>empty &&
	git add nonempty empty &&
	git commit -m "create files to be deleted" &&
	git rm --cached nonempty empty &&
	git add -N nonempty empty &&
	git restore --staged nonempty empty &&
	git diff --cached --exit-code

[main 94e3084] create files to be deleted
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 empty
 create mode 100644 nonempty
rm 'empty'
rm 'nonempty'
ok 10 - restore --staged adds deleted intent-to-add file back to index

expecting success of 2070.11 'restore --staged invalidates cache tree for deletions': 
	test_when_finished git reset --hard &&
	>new1 &&
	>new2 &&
	git add new1 new2 &&

	# It is important to commit and then reset here, so that the index
	# contains a valid cache-tree for the "both" tree.
	git commit -m both &&
	git reset --soft HEAD^ &&

	git restore --staged new1 &&
	git commit -m "just new2" &&
	git rev-parse HEAD:new2 &&
	test_must_fail git rev-parse HEAD:new1

[main 19f4790] both
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new1
 create mode 100644 new2
[main 2c4724a] just new2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new2
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
fatal: path 'new1' exists on disk, but not in 'HEAD'
HEAD:new1
HEAD is now at 2c4724a just new2
ok 11 - restore --staged invalidates cache tree for deletions

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2071-restore-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2071-restore-patch/.git/
expecting success of 2071.1 'setup': 
	mkdir dir &&
	echo parent >dir/foo &&
	echo dummy >bar &&
	git add bar dir/foo &&
	git commit -m initial &&
	test_tick &&
	test_commit second dir/foo head &&
	set_and_save_state bar bar_work bar_index &&
	save_head

[master (root-commit) 758b165] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 dir/foo
[master 3319288] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 2071.2 'restore -p without pathspec is fine': 
	echo q >cmd &&
	git restore -p <cmd

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 2 - restore -p without pathspec is fine

expecting success of 2071.3 'saying "n" does nothing': 
	set_and_save_state dir/foo work head &&
	test_write_lines n n | git restore -p &&
	verify_saved_state bar &&
	verify_saved_state dir/foo

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 3 - saying "n" does nothing

expecting success of 2071.4 'git restore -p': 
	set_and_save_state dir/foo work head &&
	test_write_lines n y | git restore -p &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 4 - git restore -p

expecting success of 2071.5 'git restore -p with staged changes': 
	set_state dir/foo work index &&
	test_write_lines n y | git restore -p &&
	verify_saved_state bar &&
	verify_state dir/foo index index

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 9015a7a..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-index
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 5 - git restore -p with staged changes

expecting success of 2071.6 'git restore -p --source=HEAD': 
	set_state dir/foo work index &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git restore -p --source=HEAD &&
	verify_saved_state bar &&
	verify_state dir/foo head index

diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 6 - git restore -p --source=HEAD

expecting success of 2071.7 'git restore -p --source=HEAD^': 
	set_state dir/foo work index &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git restore -p --source=HEAD^ &&
	verify_saved_state bar &&
	verify_state dir/foo parent index

diff --git b/bar a/bar
index 8c999e6..421376d 100644
--- b/bar
+++ a/bar
@@ -1 +1 @@
-bar_work
+dummy
(1/1) Apply this hunk to worktree [y,n,q,a,d,e,?]? 
diff --git b/dir/foo a/dir/foo
index b8f99f5..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-work
+parent
(1/1) Apply this hunk to worktree [y,n,q,a,d,e,?]? 
ok 7 - git restore -p --source=HEAD^

expecting success of 2071.8 'git restore -p --source=HEAD^...': 
	set_state dir/foo work index &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines n y n | git restore -p --source=HEAD^... &&
	verify_saved_state bar &&
	verify_state dir/foo parent index

diff --git b/bar a/bar
index 8c999e6..421376d 100644
--- b/bar
+++ a/bar
@@ -1 +1 @@
-bar_work
+dummy
(1/1) Apply this hunk to worktree [y,n,q,a,d,e,?]? 
diff --git b/dir/foo a/dir/foo
index b8f99f5..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-work
+parent
(1/1) Apply this hunk to worktree [y,n,q,a,d,e,?]? 
ok 8 - git restore -p --source=HEAD^...

expecting success of 2071.9 'git restore -p handles deletion': 
	set_state dir/foo work index &&
	rm dir/foo &&
	test_write_lines n y | git restore -p &&
	verify_saved_state bar &&
	verify_state dir/foo index index

diff --git a/bar b/bar
index 7780244..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-bar_index
+bar_work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
deleted file mode 100644
index 9015a7a..0000000
--- a/dir/foo
+++ /dev/null
@@ -1 +0,0 @@
-index
(1/1) Discard deletion from worktree [y,n,q,a,d,?]? 
ok 9 - git restore -p handles deletion

expecting success of 2071.10 'path limiting works: dir': 
	set_state dir/foo work head &&
	test_write_lines y n | git restore -p dir &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 10 - path limiting works: dir

expecting success of 2071.11 'path limiting works: -- dir': 
	set_state dir/foo work head &&
	test_write_lines y n | git restore -p -- dir &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 11 - path limiting works: -- dir

expecting success of 2071.12 'path limiting works: HEAD^ -- dir': 
	set_state dir/foo work head &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines y n n | git restore -p --source=HEAD^ -- dir &&
	verify_saved_state bar &&
	verify_state dir/foo parent head

diff --git b/dir/foo a/dir/foo
index b8f99f5..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-work
+parent
(1/1) Apply this hunk to worktree [y,n,q,a,d,e,?]? 
ok 12 - path limiting works: HEAD^ -- dir

expecting success of 2071.13 'path limiting works: foo inside dir': 
	set_state dir/foo work head &&
	# the third n is to get out in case it mistakenly does not apply
	test_write_lines y n n | (cd dir && git restore -p foo) &&
	verify_saved_state bar &&
	verify_state dir/foo head head

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Discard this hunk from worktree [y,n,q,a,d,e,?]? 
ok 13 - path limiting works: foo inside dir

expecting success of 2071.14 'none of this moved HEAD': 
	verify_saved_head

ok 14 - none of this moved HEAD

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2072-restore-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2072-restore-pathspec-file/.git/
expecting success of 2072.1 'setup': 
	test_commit file0 &&

	mkdir dir1 &&
	echo 1 >dir1/file &&
	echo 1 >fileA.t &&
	echo 1 >fileB.t &&
	echo 1 >fileC.t &&
	echo 1 >fileD.t &&
	git add dir1 fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "files 1" &&

	echo 2 >dir1/file &&
	echo 2 >fileA.t &&
	echo 2 >fileB.t &&
	echo 2 >fileC.t &&
	echo 2 >fileD.t &&
	git add dir1 fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "files 2" &&

	git tag checkpoint

[master (root-commit) ad2e047] file0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0.t
[master 17aa47d] files 1
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 dir1/file
 create mode 100644 fileA.t
 create mode 100644 fileB.t
 create mode 100644 fileC.t
 create mode 100644 fileD.t
[master 4c6d82b] files 2
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
ok 1 - setup

expecting success of 2072.2 '--pathspec-from-file from stdin': 
	restore_checkpoint &&

	echo fileA.t | git restore --pathspec-from-file=- --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 2 - --pathspec-from-file from stdin

expecting success of 2072.3 '--pathspec-from-file from file': 
	restore_checkpoint &&

	echo fileA.t >list &&
	git restore --pathspec-from-file=list --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 3 - --pathspec-from-file from file

expecting success of 2072.4 'NUL delimiters': 
	restore_checkpoint &&

	printf "fileA.t\0fileB.t\0" | git restore --pathspec-from-file=- --pathspec-file-nul --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	 M fileB.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 4 - NUL delimiters

expecting success of 2072.5 'LF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t\n" | git restore --pathspec-from-file=- --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	 M fileB.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 5 - LF delimiters

expecting success of 2072.6 'no trailing delimiter': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t" | git restore --pathspec-from-file=- --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	 M fileB.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 6 - no trailing delimiter

expecting success of 2072.7 'CRLF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\r\nfileB.t\r\n" | git restore --pathspec-from-file=- --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	 M fileB.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 7 - CRLF delimiters

expecting success of 2072.8 'quotes': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	git restore --pathspec-from-file=list --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileA.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 8 - quotes

expecting success of 2072.9 'quotes not compatible with --pathspec-file-nul': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test_must_fail git restore --pathspec-from-file=list --pathspec-file-nul --source=HEAD^1

HEAD is now at 4c6d82b files 2
error: pathspec '"file\101.t"
' did not match any file(s) known to git
ok 9 - quotes not compatible with --pathspec-file-nul

expecting success of 2072.10 'only touches what was listed': 
	restore_checkpoint &&

	printf "fileB.t\nfileC.t\n" | git restore --pathspec-from-file=- --source=HEAD^1 &&

	cat >expect <<-\EOF &&
	 M fileB.t
	 M fileC.t
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 10 - only touches what was listed

expecting success of 2072.11 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&
	>empty_list &&

	test_must_fail git restore --pathspec-from-file=list --patch --source=HEAD^1 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--patch. cannot be used together" err &&

	test_must_fail git restore --pathspec-from-file=list --source=HEAD^1 -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git restore --pathspec-file-nul --source=HEAD^1 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err &&

	test_must_fail git restore --pathspec-from-file=empty_list --source=HEAD^1 2>err &&
	test_i18ngrep -e "you must specify path(s) to restore" err

HEAD is now at 4c6d82b files 2
fatal: options '--pathspec-from-file' and '--patch' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
fatal: you must specify path(s) to restore
ok 11 - error conditions

expecting success of 2072.12 'wildcard pathspec matches file in subdirectory': 
	restore_checkpoint &&

	echo "*file" | git restore --pathspec-from-file=- --source=HEAD^1 &&
	cat >expect <<-\EOF &&
	 M dir1/file
	EOF
	verify_expect

HEAD is now at 4c6d82b files 2
ok 12 - wildcard pathspec matches file in subdirectory

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2081-parallel-checkout-collisions.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2081-parallel-checkout-collisions/.git/
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 1 # skip setup (missing CASE_INSENSITIVE_FS)

ok 2 # skip worker detects basename collision (missing CASE_INSENSITIVE_FS)

ok 3 # skip worker detects dirname collision (missing CASE_INSENSITIVE_FS)

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 4 # skip do not follow symlinks colliding with leading dir (missing CASE_INSENSITIVE_FS of SYMLINKS,CASE_INSENSITIVE_FS)

ok 5 # skip collision report on clone (w/ racy file creation) (missing CASE_INSENSITIVE_FS)

ok 6 # skip collision report on clone (w/ colliding peer after the detected entry) (missing CASE_INSENSITIVE_FS of CASE_INSENSITIVE_FS,!MINGW,!CYGWIN)

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2082-parallel-checkout-attributes.sh ***
expecting success of 2082.1 'parallel-checkout with ident': 
	set_checkout_config 2 0 &&
	git init ident &&
	(
		cd ident &&
		echo "A ident" >.gitattributes &&
		echo "\$Id\$" >A &&
		echo "\$Id\$" >B &&
		git add -A &&
		git commit -m id &&

		rm A B &&
		test_checkout_workers 2 git reset --hard &&
		hexsz=$(test_oid hexsz) &&
		grep -E "\\\$Id: [0-9a-f]{$hexsz} \\\$" A &&
		grep "\\\$Id\\\$" B
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2082-parallel-checkout-attributes/ident/.git/
[master (root-commit) f770bc4] id
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 A
 create mode 100644 B
HEAD is now at f770bc4 id
$Id: 055c8729cdcc372500a08db659c045e16c4409fb $
$Id$
ok 1 - parallel-checkout with ident

expecting success of 2082.2 'parallel-checkout with re-encoding': 
	set_checkout_config 2 0 &&
	git init encoding &&
	(
		cd encoding &&
		echo text >utf8-text &&
		write_utf16 <utf8-text >utf16-text &&

		echo "A working-tree-encoding=UTF-16" >.gitattributes &&
		cp utf16-text A &&
		cp utf8-text B &&
		git add A B .gitattributes &&
		git commit -m encoding &&

		# Check that A is stored in UTF-8
		git cat-file -p :A >A.internal &&
		test_cmp_bin utf8-text A.internal &&

		rm A B &&
		test_checkout_workers 2 git checkout A B &&

		# Check that A (and only A) is re-encoded during checkout
		test_cmp_bin utf16-text A &&
		test_cmp_bin utf8-text B
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2082-parallel-checkout-attributes/encoding/.git/
checking prerequisite: NO_UTF16_BOM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NO_UTF16_BOM" &&
	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6

)
prerequisite NO_UTF16_BOM not satisfied
[master (root-commit) eb6a843] encoding
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 A
 create mode 100644 B
Updated 2 paths from the index
ok 2 - parallel-checkout with re-encoding

expecting success of 2082.3 'parallel-checkout with eol conversions': 
	set_checkout_config 2 0 &&
	git init eol &&
	(
		cd eol &&
		printf "multi\r\nline\r\ntext" >crlf-text &&
		printf "multi\nline\ntext" >lf-text &&

		git config core.autocrlf false &&
		echo "A eol=crlf" >.gitattributes &&
		cp crlf-text A &&
		cp lf-text B &&
		git add A B .gitattributes &&
		git commit -m eol &&

		# Check that A is stored with LF format
		git cat-file -p :A >A.internal &&
		test_cmp_bin lf-text A.internal &&

		rm A B &&
		test_checkout_workers 2 git checkout A B &&

		# Check that A (and only A) is converted to CRLF during checkout
		test_cmp_bin crlf-text A &&
		test_cmp_bin lf-text B
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2082-parallel-checkout-attributes/eol/.git/
[master (root-commit) cd8ac0d] eol
 Author: A U Thor <author@example.com>
 3 files changed, 7 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 A
 create mode 100644 B
Updated 2 paths from the index
ok 3 - parallel-checkout with eol conversions

expecting success of 2082.4 'parallel-checkout and external filter': 
	set_checkout_config 2 0 &&
	git init filter &&
	(
		cd filter &&
		write_script <<-\EOF rot13.sh &&
		tr \
		  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
		  "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
		EOF

		git config filter.rot13.clean "\"$(pwd)/rot13.sh\"" &&
		git config filter.rot13.smudge "\"$(pwd)/rot13.sh\"" &&
		git config filter.rot13.required true &&

		echo abcd >original &&
		echo nopq >rot13 &&

		echo "A filter=rot13" >.gitattributes &&
		cp original A &&
		cp original B &&
		cp original C &&
		git add A B C .gitattributes &&
		git commit -m filter &&

		# Check that A (and only A) was cleaned
		git cat-file -p :A >A.internal &&
		test_cmp rot13 A.internal &&
		git cat-file -p :B >B.internal &&
		test_cmp original B.internal &&
		git cat-file -p :C >C.internal &&
		test_cmp original C.internal &&

		rm A B C *.internal &&
		test_checkout_workers 2 git checkout A B C &&

		# Check that A (and only A) was smudged during checkout
		test_cmp original A &&
		test_cmp original B &&
		test_cmp original C
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2082-parallel-checkout-attributes/filter/.git/
[master (root-commit) 9fb524e] filter
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 A
 create mode 100644 B
 create mode 100644 C
Updated 3 paths from the index
ok 4 - parallel-checkout and external filter

expecting success of 2082.5 'parallel-checkout and delayed checkout': 
	test_config_global filter.delay.process \
		"test-tool rot13-filter --always-delay --log=\"$(pwd)/delayed.log\" clean smudge delay" &&
	test_config_global filter.delay.required true &&

	echo "abcd" >original &&
	echo "nopq" >rot13 &&

	git init delayed &&
	(
		cd delayed &&
		echo "*.d filter=delay" >.gitattributes &&
		cp ../original W.d &&
		cp ../original X.d &&
		cp ../original Y &&
		cp ../original Z &&
		git add -A &&
		git commit -m delayed &&

		# Check that *.d files were cleaned
		git cat-file -p :W.d >W.d.internal &&
		test_cmp W.d.internal ../rot13 &&
		git cat-file -p :X.d >X.d.internal &&
		test_cmp X.d.internal ../rot13 &&
		git cat-file -p :Y >Y.internal &&
		test_cmp Y.internal ../original &&
		git cat-file -p :Z >Z.internal &&
		test_cmp Z.internal ../original &&

		rm *
	) &&

	set_checkout_config 2 0 &&
	test_checkout_workers 2 git -C delayed checkout -f &&
	verify_checkout delayed &&

	# Check that the *.d files got to the delay queue and were filtered
	grep "smudge W.d .* \[DELAYED\]" delayed.log &&
	grep "smudge X.d .* \[DELAYED\]" delayed.log &&
	test_cmp delayed/W.d original &&
	test_cmp delayed/X.d original &&

	# Check that the parallel-eligible entries went to the right queue and
	# were not filtered
	! grep "smudge Y .* \[DELAYED\]" delayed.log &&
	! grep "smudge Z .* \[DELAYED\]" delayed.log &&
	test_cmp delayed/Y original &&
	test_cmp delayed/Z original

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2082-parallel-checkout-attributes/delayed/.git/
[master (root-commit) 73aa10e] delayed
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 W.d
 create mode 100644 X.d
 create mode 100644 Y
 create mode 100644 Z
IN: smudge W.d treeish=73aa10e96740aa088d4dcea378e1df6a64c5577d blob=0c362bbfebfbae31b3762aada18b9d0119486316 5 [OK] -- [DELAYED]
IN: smudge X.d treeish=73aa10e96740aa088d4dcea378e1df6a64c5577d blob=0c362bbfebfbae31b3762aada18b9d0119486316 5 [OK] -- [DELAYED]
ok 5 - parallel-checkout and delayed checkout

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2100-update-cache-badpath.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2100-update-cache-badpath/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2100.1 'git update-index --add to add various paths.': git update-index --add -- path0 path1 path2/file2 path3/file3
ok 1 - git update-index --add to add various paths.

expecting success of 2100.2 'git update-index to add conflicting path path0/file0 should fail.': test_must_fail git update-index --add -- path0/file0
error: 'path0/file0' appears as both a file and as a directory
error: path0/file0: cannot add to the index - missing --add option?
fatal: Unable to process path path0/file0
ok 2 - git update-index to add conflicting path path0/file0 should fail.

expecting success of 2100.3 'git update-index to add conflicting path path1/file1 should fail.': test_must_fail git update-index --add -- path1/file1
error: 'path1/file1' appears as both a file and as a directory
error: path1/file1: cannot add to the index - missing --add option?
fatal: Unable to process path path1/file1
ok 3 - git update-index to add conflicting path path1/file1 should fail.

expecting success of 2100.4 'git update-index to add conflicting path path2 should fail.': test_must_fail git update-index --add -- path2
error: 'path2' appears as both a file and as a directory
error: path2: cannot add to the index - missing --add option?
fatal: Unable to process path path2
ok 4 - git update-index to add conflicting path path2 should fail.

expecting success of 2100.5 'git update-index to add conflicting path path3 should fail.': test_must_fail git update-index --add -- path3
error: 'path3' appears as both a file and as a directory
error: path3: cannot add to the index - missing --add option?
fatal: Unable to process path path3
ok 5 - git update-index to add conflicting path path3 should fail.

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2101-update-index-reupdate.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2101-update-index-reupdate/.git/
expecting success of 2101.1 'update-index --add': 
	echo hello world >file1 &&
	echo goodbye people >file2 &&
	git update-index --add file1 file2 &&
	git ls-files -s >current &&
	cat >expected <<-EOF &&
	100644 $(git hash-object file1) 0	file1
	100644 $(git hash-object file2) 0	file2
	EOF
	cmp current expected

ok 1 - update-index --add

expecting success of 2101.2 'update-index --again': 
	rm -f file1 &&
	echo hello everybody >file2 &&
	if git update-index --again
	then
		echo should have refused to remove file1
		exit 1
	else
		echo happy - failed as expected
	fi &&
	git ls-files -s >current &&
	cmp current expected

error: file1: does not exist and --remove not passed
fatal: Unable to process path file1
happy - failed as expected
ok 2 - update-index --again

expecting success of 2101.3 'update-index --remove --again': 
	git update-index --remove --again &&
	git ls-files -s >current &&
	cat >expected <<-EOF &&
	100644 $(git hash-object file2) 0	file2
	EOF
	cmp current expected

ok 3 - update-index --remove --again

expecting success of 2101.4 'first commit': git commit -m initial
[master (root-commit) 823d2a7] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 4 - first commit

expecting success of 2101.5 'update-index again': 
	mkdir -p dir1 &&
	echo hello world >dir1/file3 &&
	echo goodbye people >file2 &&
	git update-index --add file2 dir1/file3 &&
	echo hello everybody >file2 &&
	echo happy >dir1/file3 &&
	git update-index --again &&
	git ls-files -s >current &&
	cat >expected <<-EOF &&
	100644 $(git hash-object dir1/file3) 0	dir1/file3
	100644 $(git hash-object file2) 0	file2
	EOF
	cmp current expected

ok 5 - update-index again

expecting success of 2101.6 'update-index --update from subdir': 
	echo not so happy >file2 &&
	(cd dir1 &&
	cat ../file2 >file3 &&
	git update-index --again
	) &&
	git ls-files -s >current &&
	cat >expected <<-EOF &&
	100644 $(git hash-object dir1/file3) 0	dir1/file3
	100644 $file2 0	file2
	EOF
	test_cmp expected current

ok 6 - update-index --update from subdir

expecting success of 2101.7 'update-index --update with pathspec': 
	echo very happy >file2 &&
	cat file2 >dir1/file3 &&
	git update-index --again dir1/ &&
	git ls-files -s >current &&
	cat >expected <<-EOF &&
	100644 $(git hash-object dir1/file3) 0	dir1/file3
	100644 $file2 0	file2
	EOF
	cmp current expected

ok 7 - update-index --update with pathspec

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2102-update-index-symlinks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2102-update-index-symlinks/.git/
expecting success of 2102.1 'preparation': 
git config core.symlinks false &&
l=$(printf file | git hash-object -t blob -w --stdin) &&
echo "120000 $l	symlink" | git update-index --index-info
ok 1 - preparation

expecting success of 2102.2 'modify the symbolic link': 
printf new-file > symlink &&
git update-index symlink
ok 2 - modify the symbolic link

expecting success of 2102.3 'the index entry must still be a symbolic link': 
case "$(git ls-files --stage --cached symlink)" in
120000" "*symlink) echo pass;;
*) echo fail; git ls-files --stage --cached symlink; false;;
esac
pass
ok 3 - the index entry must still be a symbolic link

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2103-update-index-ignore-missing.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2103-update-index-ignore-missing/.git/
expecting success of 2103.1 'basics': 
	>one &&
	>two &&
	>three &&

	# need --add when adding
	test_must_fail git update-index one &&
	test -z "$(git ls-files)" &&
	git update-index --add one &&
	test zone = "z$(git ls-files)" &&

	# update-index is atomic
	echo 1 >one &&
	test_must_fail git update-index one two &&
	echo "M	one" >expect &&
	git diff-files --name-status >actual &&
	test_cmp expect actual &&

	git update-index --add one two three &&
	test_write_lines one three two >expect &&
	git ls-files >actual &&
	test_cmp expect actual &&

	test_tick &&
	(
		test_create_repo xyzzy &&
		cd xyzzy &&
		>file &&
		git add file &&
		git commit -m "sub initial"
	) &&
	git add xyzzy &&

	test_tick &&
	git commit -m initial &&
	git tag initial

error: one: cannot add to the index - missing --add option?
fatal: Unable to process path one
error: two: cannot add to the index - missing --add option?
fatal: Unable to process path two
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2103-update-index-ignore-missing/xyzzy/.git/
[master (root-commit) a40d181] sub initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
warning: adding embedded git repository: xyzzy
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> xyzzy
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached xyzzy
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) ce14d7f] initial
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 create mode 100644 one
 create mode 100644 three
 create mode 100644 two
 create mode 160000 xyzzy
ok 1 - basics

expecting success of 2103.2 '--ignore-missing --refresh': 
	git reset --hard initial &&
	echo 2 >one &&
	test_must_fail git update-index --refresh &&
	echo 1 >one &&
	git update-index --refresh &&
	rm -f two &&
	test_must_fail git update-index --refresh &&
	git update-index --ignore-missing --refresh


HEAD is now at ce14d7f initial
one: needs update
two: needs update
ok 2 - --ignore-missing --refresh

expecting success of 2103.3 '--unmerged --refresh': 
	git reset --hard initial &&
	info=$(git ls-files -s one | sed -e "s/ 0	/ 1	/") &&
	git rm --cached one &&
	echo "$info" | git update-index --index-info &&
	test_must_fail git update-index --refresh &&
	git update-index --unmerged --refresh &&
	echo 2 >two &&
	test_must_fail git update-index --unmerged --refresh >actual &&
	grep two actual &&
	! grep one actual &&
	! grep three actual

HEAD is now at ce14d7f initial
rm 'one'
one: needs merge
two: needs update
ok 3 - --unmerged --refresh

expecting success of 2103.4 '--ignore-submodules --refresh (1)': 
	git reset --hard initial &&
	rm -f two &&
	test_must_fail git update-index --ignore-submodules --refresh

HEAD is now at ce14d7f initial
two: needs update
ok 4 - --ignore-submodules --refresh (1)

expecting success of 2103.5 '--ignore-submodules --refresh (2)': 
	git reset --hard initial &&
	test_tick &&
	(
		cd xyzzy &&
		git commit -m "sub second" --allow-empty
	) &&
	test_must_fail git update-index --refresh &&
	test_must_fail git update-index --ignore-missing --refresh &&
	git update-index --ignore-submodules --refresh

HEAD is now at ce14d7f initial
[master 66f0d66] sub second
 Author: A U Thor <author@example.com>
xyzzy: needs update
xyzzy: needs update
ok 5 - --ignore-submodules --refresh (2)

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2104-update-index-skip-worktree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2104-update-index-skip-worktree/.git/
expecting success of 2104.1 'setup': 
	mkdir sub &&
	touch ./1 ./2 sub/1 sub/2 &&
	git add 1 2 sub/1 sub/2 &&
	git ls-files -t | test_cmp expect.full -

ok 1 - setup

expecting success of 2104.2 'index is at version 2': 
	test "$(test-tool index-version < .git/index)" = 2

ok 2 - index is at version 2

expecting success of 2104.3 'update-index --skip-worktree': 
	git update-index --skip-worktree 1 sub/1 &&
	git ls-files -t | test_cmp expect.skip -

ok 3 - update-index --skip-worktree

expecting success of 2104.4 'index is at version 3 after having some skip-worktree entries': 
	test "$(test-tool index-version < .git/index)" = 3

ok 4 - index is at version 3 after having some skip-worktree entries

expecting success of 2104.5 'ls-files -t': 
	git ls-files -t | test_cmp expect.skip -

ok 5 - ls-files -t

expecting success of 2104.6 'update-index --no-skip-worktree': 
	git update-index --no-skip-worktree 1 sub/1 &&
	git ls-files -t | test_cmp expect.full -

ok 6 - update-index --no-skip-worktree

expecting success of 2104.7 'index version is back to 2 when there is no skip-worktree entry': 
	test "$(test-tool index-version < .git/index)" = 2

ok 7 - index version is back to 2 when there is no skip-worktree entry

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2105-update-index-gitfile.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2105-update-index-gitfile/.git/
expecting success of 2105.1 'submodule with absolute .git file': 
	mkdir sub1 &&
	(cd sub1 &&
	 git init &&
	 REAL="$(pwd)/.real" &&
	 mv .git "$REAL" &&
	 echo "gitdir: $REAL" >.git &&
	 test_commit first)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2105-update-index-gitfile/sub1/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
ok 1 - submodule with absolute .git file

expecting success of 2105.2 'add gitlink to absolute .git file': 
	git update-index --add -- sub1

ok 2 - add gitlink to absolute .git file

expecting success of 2105.3 'submodule with relative .git file': 
	mkdir sub2 &&
	(cd sub2 &&
	 git init &&
	 mv .git .real &&
	 echo "gitdir: .real" >.git &&
	 test_commit first)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2105-update-index-gitfile/sub2/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
ok 3 - submodule with relative .git file

expecting success of 2105.4 'add gitlink to relative .git file': 
	git update-index --add -- sub2

ok 4 - add gitlink to relative .git file

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2106-update-index-assume-unchanged.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2106-update-index-assume-unchanged/.git/
expecting success of 2106.1 'setup': 
	: >file &&
	git add file &&
	git commit -m initial &&
	git branch other &&
	echo upstream >file &&
	git add file &&
	git commit -m upstream

[master (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[master fbda113] upstream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 2106.2 'do not switch branches with dirty file': 
	git reset --hard &&
	git checkout other &&
	echo dirt >file &&
	git update-index --assume-unchanged file &&
	test_must_fail git checkout - 2>err &&
	test_i18ngrep overwritten err

HEAD is now at fbda113 upstream
Switched to branch 'other'
error: Your local changes to the following files would be overwritten by checkout:
ok 2 - do not switch branches with dirty file

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2107-update-index-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2107-update-index-basic/.git/
expecting success of 2107.1 'update-index --nonsense fails': 
	test_must_fail git update-index --nonsense 2>msg &&
	test -s msg

ok 1 - update-index --nonsense fails

expecting success of 2107.2 'update-index --nonsense dumps usage': 
	test_expect_code 129 git update-index --nonsense 2>err &&
	test_i18ngrep "[Uu]sage: git update-index" err

usage: git update-index [<options>] [--] [<file>...]
ok 2 - update-index --nonsense dumps usage

expecting success of 2107.3 'update-index -h with corrupt index': 
	mkdir broken &&
	(
		cd broken &&
		git init &&
		>.git/index &&
		test_expect_code 129 git update-index -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage: git update-index" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2107-update-index-basic/broken/.git/
usage: git update-index [<options>] [--] [<file>...]
ok 3 - update-index -h with corrupt index

expecting success of 2107.4 '--cacheinfo complains of missing arguments': 
	test_must_fail git update-index --cacheinfo

error: option 'cacheinfo' expects <mode>,<sha1>,<path>
ok 4 - --cacheinfo complains of missing arguments

expecting success of 2107.5 '--cacheinfo does not accept blob null sha1': 
	echo content >file &&
	git add file &&
	git rev-parse :file >expect &&
	test_must_fail git update-index --verbose --cacheinfo 100644 $ZERO_OID file >out &&
	git rev-parse :file >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	add 'file'
	EOF
	test_cmp expect out

error: cache entry has null sha1: file
fatal: Unable to write new index file
ok 5 - --cacheinfo does not accept blob null sha1

expecting success of 2107.6 '--cacheinfo does not accept gitlink null sha1': 
	git init submodule &&
	(cd submodule && test_commit foo) &&
	git add submodule &&
	git rev-parse :submodule >expect &&
	test_must_fail git update-index --cacheinfo 160000 $ZERO_OID submodule &&
	git rev-parse :submodule >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2107-update-index-basic/submodule/.git/
[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
warning: adding embedded git repository: submodule
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submodule
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submodule
hint: 
hint: See "git help submodule" for more information.
error: cache entry has null sha1: submodule
fatal: Unable to write new index file
ok 6 - --cacheinfo does not accept gitlink null sha1

expecting success of 2107.7 '--cacheinfo mode,sha1,path (new syntax)': 
	echo content >file &&
	git hash-object -w --stdin <file >expect &&

	git update-index --add --cacheinfo 100644 "$(cat expect)" file &&
	git rev-parse :file >actual &&
	test_cmp expect actual &&

	git update-index --add --verbose --cacheinfo "100644,$(cat expect),elif" >out &&
	git rev-parse :elif >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	add 'elif'
	EOF
	test_cmp expect out

ok 7 - --cacheinfo mode,sha1,path (new syntax)

expecting success of 2107.8 '.lock files cleaned up': 
	mkdir cleanup &&
	(
	cd cleanup &&
	mkdir worktree &&
	git init repo &&
	cd repo &&
	git config core.worktree ../../worktree &&
	# --refresh triggers late setup_work_tree,
	# active_cache_changed is zero, rollback_lock_file fails
	git update-index --refresh --verbose >out &&
	test_must_be_empty out &&
	! test -f .git/index.lock
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2107-update-index-basic/cleanup/repo/.git/
ok 8 - .lock files cleaned up

expecting success of 2107.9 '--chmod=+x and chmod=-x in the same argument list': 
	>A &&
	>B &&
	git add A B &&
	git update-index --verbose --chmod=+x A --chmod=-x B >out &&
	cat >expect <<-\EOF &&
	add 'A'
	chmod +x 'A'
	add 'B'
	chmod -x 'B'
	EOF
	test_cmp expect out &&

	cat >expect <<-EOF &&
	100755 $EMPTY_BLOB 0	A
	100644 $EMPTY_BLOB 0	B
	EOF
	git ls-files --stage A B >actual &&
	test_cmp expect actual

ok 9 - --chmod=+x and chmod=-x in the same argument list

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2108-update-index-refresh-racy.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2108-update-index-refresh-racy/.git/
expecting success of 2108.1 'setup': 
	reset_files &&
	# we are calling reset_files() a couple of times during tests;
	# test-tool chmtime does not change the ctime; to not weaken
	# or even break our tests, disable ctime-checks entirely
	git config core.trustctime false &&
	git add file other &&
	git commit -m "initial import"

[master (root-commit) 4c25839] initial import
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file
 create mode 100644 other
ok 1 - setup

expecting success of 2108.2 '--refresh has no racy timestamps to fix': 
	reset_files &&
	# set the index time far enough to the future;
	# it must be at least 3 seconds for VFAT
	test_set_magic_mtime .git/index +60 &&
	git update-index --refresh &&
	test_is_magic_mtime .git/index +60

ok 2 - --refresh has no racy timestamps to fix

expecting success of 2108.3 '--refresh should fix racy timestamp': 
	reset_files &&
	update_assert_changed --refresh

--- .git/test-mtime-expect	2022-12-28 07:36:11.939207802 +0000
+++ .git/test-mtime-actual	2022-12-28 07:36:11.954208356 +0000
@@ -1 +1 @@
-1234567890
+1672212971
ok 3 - --refresh should fix racy timestamp

expecting success of 2108.4 '--really-refresh should fix racy timestamp': 
	reset_files &&
	update_assert_changed --really-refresh

--- .git/test-mtime-expect	2022-12-28 07:36:12.189217043 +0000
+++ .git/test-mtime-actual	2022-12-28 07:36:12.204217598 +0000
@@ -1 +1 @@
-1234567890
+1672212972
ok 4 - --really-refresh should fix racy timestamp

expecting success of 2108.5 '--refresh should fix racy timestamp if other file needs update': 
	reset_files &&
	echo content2 >other &&
	test_set_magic_mtime other &&
	update_assert_changed --refresh

other: needs update
--- .git/test-mtime-expect	2022-12-28 07:36:12.504228688 +0000
+++ .git/test-mtime-actual	2022-12-28 07:36:12.524229427 +0000
@@ -1 +1 @@
-1234567890
+1672212972
ok 5 - --refresh should fix racy timestamp if other file needs update

expecting success of 2108.6 '--refresh should fix racy timestamp if racy file needs update': 
	reset_files &&
	echo content2 >file &&
	test_set_magic_mtime file &&
	update_assert_changed --refresh

file: needs update
--- .git/test-mtime-expect	2022-12-28 07:36:12.814240148 +0000
+++ .git/test-mtime-actual	2022-12-28 07:36:12.829240702 +0000
@@ -1 +1 @@
-1234567890
+1672212972
ok 6 - --refresh should fix racy timestamp if racy file needs update

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2200-add-update.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2200-add-update/.git/
expecting success of 2200.1 'setup': 
	echo initial >check &&
	echo initial >top &&
	echo initial >foo &&
	mkdir dir1 dir2 &&
	echo initial >dir1/sub1 &&
	echo initial >dir1/sub2 &&
	echo initial >dir2/sub3 &&
	git add check dir1 dir2 top foo &&
	test_tick &&
	git commit -m initial &&

	echo changed >check &&
	echo changed >top &&
	echo changed >dir2/sub3 &&
	rm -f dir1/sub1 &&
	echo other >dir2/other

[master (root-commit) ec46c19] initial
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 check
 create mode 100644 dir1/sub1
 create mode 100644 dir1/sub2
 create mode 100644 dir2/sub3
 create mode 100644 foo
 create mode 100644 top
ok 1 - setup

expecting success of 2200.2 'update': 
	git add -u dir1 dir2

ok 2 - update

expecting success of 2200.3 'update noticed a removal': 
	git ls-files dir1/sub1 >out &&
	test_must_be_empty out

ok 3 - update noticed a removal

expecting success of 2200.4 'update touched correct path': 
	git diff-files --name-status dir2/sub3 >out &&
	test_must_be_empty out

ok 4 - update touched correct path

expecting success of 2200.5 'update did not touch other tracked files': 
	echo "M	check" >expect &&
	git diff-files --name-status check >actual &&
	test_cmp expect actual &&

	echo "M	top" >expect &&
	git diff-files --name-status top >actual &&
	test_cmp expect actual

ok 5 - update did not touch other tracked files

expecting success of 2200.6 'update did not touch untracked files': 
	git ls-files dir2/other >out &&
	test_must_be_empty out

ok 6 - update did not touch untracked files

expecting success of 2200.7 'cache tree has not been corrupted': 

	git ls-files -s |
	sed -e "s/ 0	/	/" >expect &&
	git ls-tree -r $(git write-tree) |
	sed -e "s/ blob / /" >current &&
	test_cmp expect current


ok 7 - cache tree has not been corrupted

expecting success of 2200.8 'update from a subdirectory': 
	(
		cd dir1 &&
		echo more >sub2 &&
		git add -u sub2
	)

ok 8 - update from a subdirectory

expecting success of 2200.9 'change gets noticed': 
	git diff-files --name-status dir1 >out &&
	test_must_be_empty out

ok 9 - change gets noticed

expecting success of 2200.10 'non-qualified update in subdir updates from the root': 
	(
		cd dir1 &&
		echo even more >>sub2 &&
		git --literal-pathspecs add -u &&
		echo even more >>sub2 &&
		git add -u
	) &&
	git diff-files --name-only >actual &&
	test_must_be_empty actual

ok 10 - non-qualified update in subdir updates from the root

expecting success of 2200.11 'replace a file with a symlink': 

	rm foo &&
	test_ln_s_add top foo


checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 11 - replace a file with a symlink

expecting success of 2200.12 'add everything changed': 

	git add -u &&
	git diff-files >out &&
	test_must_be_empty out


ok 12 - add everything changed

expecting success of 2200.13 'touch and then add -u': 

	touch check &&
	git add -u &&
	git diff-files >out &&
	test_must_be_empty out


ok 13 - touch and then add -u

expecting success of 2200.14 'touch and then add explicitly': 

	touch check &&
	git add check &&
	git diff-files >out &&
	test_must_be_empty out


ok 14 - touch and then add explicitly

expecting success of 2200.15 'add -n -u should not add but just report': 

	(
		echo "add 'check'" &&
		echo "remove 'top'"
	) >expect &&
	before=$(git ls-files -s check top) &&
	git count-objects -v >objects_before &&
	echo changed >>check &&
	rm -f top &&
	git add -n -u >actual &&
	after=$(git ls-files -s check top) &&
	git count-objects -v >objects_after &&

	test "$before" = "$after" &&
	test_cmp objects_before objects_after &&
	test_cmp expect actual


ok 15 - add -n -u should not add but just report

expecting success of 2200.16 'add -u resolves unmerged paths': 
	git reset --hard &&
	one=$(echo 1 | git hash-object -w --stdin) &&
	two=$(echo 2 | git hash-object -w --stdin) &&
	three=$(echo 3 | git hash-object -w --stdin) &&
	{
		for path in path1 path2
		do
			echo "100644 $one 1	$path" &&
			echo "100644 $two 2	$path" &&
			echo "100644 $three 3	$path" || return 1
		done &&
		echo "100644 $one 1	path3" &&
		echo "100644 $one 1	path4" &&
		echo "100644 $one 3	path5" &&
		echo "100644 $one 3	path6"
	} |
	git update-index --index-info &&
	echo 3 >path1 &&
	echo 2 >path3 &&
	echo 2 >path5 &&

	# Fail to explicitly resolve removed paths with "git add"
	test_must_fail git add --no-all path4 &&
	test_must_fail git add --no-all path6 &&

	# "add -u" should notice removals no matter what stages
	# the index entries are in.
	git add -u &&
	git ls-files -s path1 path2 path3 path4 path5 path6 >actual &&
	{
		echo "100644 $three 0	path1" &&
		echo "100644 $two 0	path3" &&
		echo "100644 $two 0	path5"
	} >expect &&
	test_cmp expect actual

HEAD is now at ec46c19 initial
fatal: unable to stat 'path4': No such file or directory
fatal: unable to stat 'path6': No such file or directory
ok 16 - add -u resolves unmerged paths

expecting success of 2200.17 '"add -u non-existent" should fail': 
	test_must_fail git add -u non-existent &&
	git ls-files >actual &&
	! grep "non-existent" actual

fatal: pathspec 'non-existent' did not match any files
ok 17 - "add -u non-existent" should fail

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2201-add-update-typechange.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2201-add-update-typechange/.git/
expecting success of 2201.1 'setup': 
	>xyzzy &&
	_empty=$(git hash-object --stdin <xyzzy) &&
	>yomin &&
	>caskly &&
	if test_have_prereq SYMLINKS; then
		ln -s frotz nitfol &&
		T_letter=T
	else
		printf %s frotz > nitfol &&
		T_letter=M
	fi &&
	mkdir rezrov &&
	>rezrov/bozbar &&
	git add caskly xyzzy yomin nitfol rezrov/bozbar &&

	test_tick &&
	git commit -m initial


checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master (root-commit) 8dc0761] initial
 Author: A U Thor <author@example.com>
 5 files changed, 1 insertion(+)
 create mode 100644 caskly
 create mode 120000 nitfol
 create mode 100644 rezrov/bozbar
 create mode 100644 xyzzy
 create mode 100644 yomin
ok 1 - setup

expecting success of 2201.2 'modify': 
	rm -f xyzzy yomin nitfol caskly &&
	# caskly disappears (not a submodule)
	mkdir caskly &&
	# nitfol changes from symlink to regular
	>nitfol &&
	# rezrov/bozbar disappears
	rm -fr rezrov &&
	if test_have_prereq SYMLINKS; then
		ln -s xyzzy rezrov
	else
		printf %s xyzzy > rezrov
	fi &&
	# xyzzy disappears (not a submodule)
	mkdir xyzzy &&
	echo gnusto >xyzzy/bozbar &&
	# yomin gets replaced with a submodule
	mkdir yomin &&
	>yomin/yomin &&
	(
		cd yomin &&
		git init &&
		git add yomin &&
		git commit -m "sub initial"
	) &&
	yomin=$(GIT_DIR=yomin/.git git rev-parse HEAD) &&
	# yonk is added and then turned into a submodule
	# this should appear as T in diff-files and as A in diff-index
	>yonk &&
	git add yonk &&
	rm -f yonk &&
	mkdir yonk &&
	>yonk/yonk &&
	(
		cd yonk &&
		git init &&
		git add yonk &&
		git commit -m "sub initial"
	) &&
	yonk=$(GIT_DIR=yonk/.git git rev-parse HEAD) &&
	# zifmia is added and then removed
	# this should appear in diff-files but not in diff-index.
	>zifmia &&
	git add zifmia &&
	rm -f zifmia &&
	mkdir zifmia &&
	{
		git ls-tree -r HEAD |
		sed -e "s/^/:/" -e "
			/	caskly/{
				s/	caskly/ $ZERO_OID D&/
				s/blob/000000/
			}
			/	nitfol/{
				s/	nitfol/ $ZERO_OID $T_letter&/
				s/blob/100644/
			}
			/	rezrov.bozbar/{
				s/	rezrov.bozbar/ $ZERO_OID D&/
				s/blob/000000/
			}
			/	xyzzy/{
				s/	xyzzy/ $ZERO_OID D&/
				s/blob/000000/
			}
			/	yomin/{
			    s/	yomin/ $ZERO_OID T&/
				s/blob/160000/
			}
		"
	} >expect &&
	{
		cat expect &&
		echo ":100644 160000 $_empty $ZERO_OID T	yonk" &&
		echo ":100644 000000 $_empty $ZERO_OID D	zifmia"
	} >expect-files &&
	{
		cat expect &&
		echo ":000000 160000 $ZERO_OID $ZERO_OID A	yonk"
	} >expect-index &&
	{
		echo "100644 $_empty 0	nitfol" &&
		echo "160000 $yomin 0	yomin" &&
		echo "160000 $yonk 0	yonk"
	} >expect-final

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2201-add-update-typechange/yomin/.git/
[master (root-commit) 9da2848] sub initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 yomin
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2201-add-update-typechange/yonk/.git/
[master (root-commit) 9cc3160] sub initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 yonk
ok 2 - modify

expecting success of 2201.3 'diff-files': 
	git diff-files --raw >actual &&
	test_cmp expect-files actual

ok 3 - diff-files

expecting success of 2201.4 'diff-index': 
	git diff-index --raw HEAD -- >actual &&
	test_cmp expect-index actual

ok 4 - diff-index

expecting success of 2201.5 'add -u': 
	rm -f ".git/saved-index" &&
	cp -p ".git/index" ".git/saved-index" &&
	git add -u &&
	git ls-files -s >actual &&
	test_cmp expect-final actual

ok 5 - add -u

expecting success of 2201.6 'commit -a': 
	if test -f ".git/saved-index"
	then
		rm -f ".git/index" &&
		mv ".git/saved-index" ".git/index"
	fi &&
	git commit -m "second" -a &&
	git ls-files -s >actual &&
	test_cmp expect-final actual &&
	rm -f .git/index &&
	git read-tree HEAD &&
	git ls-files -s >actual &&
	test_cmp expect-final actual

[master 0f3d2ce] second
 Author: A U Thor <author@example.com>
 6 files changed, 2 insertions(+), 1 deletion(-)
 delete mode 100644 caskly
 mode change 120000 => 100644 nitfol
 delete mode 100644 rezrov/bozbar
 delete mode 100644 xyzzy
 mode change 100644 => 160000 yomin
 create mode 160000 yonk
ok 6 - commit -a

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2202-add-addremove.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2202-add-addremove/.git/
expecting success of 2202.1 'setup': 
	(
		echo .gitignore &&
		echo will-remove
	) >expect &&
	(
		echo actual &&
		echo expect &&
		echo ignored
	) >.gitignore &&
	git --literal-pathspecs add --all &&
	>will-remove &&
	git add --all &&
	test_tick &&
	git commit -m initial &&
	git ls-files >actual &&
	test_cmp expect actual

[master (root-commit) 50dd5d8] initial
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 will-remove
ok 1 - setup

expecting success of 2202.2 'git add --all': 
	(
		echo .gitignore &&
		echo not-ignored &&
		echo "M	.gitignore" &&
		echo "A	not-ignored" &&
		echo "D	will-remove"
	) >expect &&
	>ignored &&
	>not-ignored &&
	echo modification >>.gitignore &&
	rm -f will-remove &&
	git add --all &&
	git update-index --refresh &&
	git ls-files >actual &&
	git diff-index --name-status --cached HEAD >>actual &&
	test_cmp expect actual

ok 2 - git add --all

expecting success of 2202.3 'Just "git add" is a no-op': 
	git reset --hard &&
	echo >will-remove &&
	>will-not-be-added &&
	git add &&
	git diff-index --name-status --cached HEAD >actual &&
	test_must_be_empty actual

HEAD is now at 50dd5d8 initial
Nothing specified, nothing added.
hint: Maybe you wanted to say 'git add .'?
hint: Turn this message off by running
hint: "git config advice.addEmptyPathspec false"
ok 3 - Just "git add" is a no-op

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2080-parallel-checkout-basics.sh ***
expecting success of 2080.1 'setup repo for checkout with various types of changes': 
	test_config_global protocol.file.allow always &&

	git init sub &&
	(
		cd sub &&
		git checkout -b B2 &&
		echo B2 >file &&
		git add file &&
		git commit -m file &&

		git checkout -b B1 &&
		echo B1 >file &&
		git add file &&
		git commit -m file
	) &&

	git init various &&
	(
		cd various &&

		git checkout -b B1 &&
		mkdir a c e &&
		echo a/a >a/a &&
		echo b >b &&
		echo c/c >c/c &&
		test_ln_s_add c d &&
		echo e/e >e/e &&
		git submodule add ../sub f &&
		git submodule add ../sub g &&
		test_ln_s_add c h &&

		echo "B1 i" >i &&
		test_ln_s_add c j &&
		git submodule add -b B1 ../sub k &&
		mkdir l &&
		echo l/l >l/l &&

		git add . &&
		git commit -m B1 &&

		git checkout -b B2 &&
		git rm -rf :^.gitmodules :^k &&
		mkdir b d f &&
		echo a >a &&
		echo b/b >b/b &&
		test_ln_s_add b c &&
		echo d/d >d/d &&
		git submodule add ../sub e &&
		echo f/f >f/f &&
		test_ln_s_add b g &&
		git submodule add ../sub h &&

		echo "B2 i" >i &&
		test_ln_s_add b j &&
		git -C k checkout B2 &&
		mkdir m &&
		echo m/m >m/m &&

		git add . &&
		git commit -m B2 &&

		git checkout --recurse-submodules B1
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub/.git/
Switched to a new branch 'B2'
[B2 (root-commit) 880a0eb] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'B1'
[B1 0f06b39] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/.git/
Switched to a new branch 'B1'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/f'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/g'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/k'...
done.
[B1 (root-commit) 46a23ce] B1
 Author: A U Thor <author@example.com>
 13 files changed, 22 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 a/a
 create mode 100644 b
 create mode 100644 c/c
 create mode 120000 d
 create mode 100644 e/e
 create mode 160000 f
 create mode 160000 g
 create mode 120000 h
 create mode 100644 i
 create mode 120000 j
 create mode 160000 k
 create mode 100644 l/l
Switched to a new branch 'B2'
rm 'a/a'
rm 'b'
rm 'c/c'
rm 'd'
rm 'e/e'
rm 'f'
rm 'g'
rm 'h'
rm 'i'
rm 'j'
rm 'l/l'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/e'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various/h'...
done.
Switched to a new branch 'B2'
branch 'B2' set up to track 'origin/B2'.
[B2 176cae8] B2
 Author: A U Thor <author@example.com>
 19 files changed, 17 insertions(+), 17 deletions(-)
 create mode 100644 a
 delete mode 100644 a/a
 delete mode 100644 b
 create mode 100644 b/b
 create mode 120000 c
 delete mode 100644 c/c
 delete mode 120000 d
 create mode 100644 d/d
 rename f => e (100%)
 delete mode 100644 e/e
 create mode 100644 f/f
 mode change 160000 => 120000 g
 mode change 120000 => 160000 h
 delete mode 100644 l/l
 create mode 100644 m/m
Switched to branch 'B1'
ok 1 - setup repo for checkout with various types of changes

expecting success of 2080.2 'sequential checkout': 
		repo=various_$mode &&
		cp -R -P various $repo &&

		# The just copied files have more recent timestamps than their
		# associated index entries. So refresh the cached timestamps
		# to avoid an "entry not up-to-date" error from `git checkout`.
		# We only have to do this for the submodules as `git checkout`
		# will already refresh the superproject index before performing
		# the up-to-date check.
		#
		git -C $repo submodule foreach "git update-index --refresh" &&

		set_checkout_config $workers $threshold &&
		test_checkout_workers $expected_workers \
			git -C $repo checkout --recurse-submodules B2 &&
		verify_checkout $repo
	
Entering 'f'
Entering 'g'
Entering 'k'
Switched to branch 'B2'
ok 2 - sequential checkout

expecting success of 2080.3 'parallel checkout': 
		repo=various_$mode &&
		cp -R -P various $repo &&

		# The just copied files have more recent timestamps than their
		# associated index entries. So refresh the cached timestamps
		# to avoid an "entry not up-to-date" error from `git checkout`.
		# We only have to do this for the submodules as `git checkout`
		# will already refresh the superproject index before performing
		# the up-to-date check.
		#
		git -C $repo submodule foreach "git update-index --refresh" &&

		set_checkout_config $workers $threshold &&
		test_checkout_workers $expected_workers \
			git -C $repo checkout --recurse-submodules B2 &&
		verify_checkout $repo
	
Entering 'f'
Entering 'g'
Entering 'k'
Switched to branch 'B2'
ok 3 - parallel checkout

expecting success of 2080.4 'sequential-fallback checkout': 
		repo=various_$mode &&
		cp -R -P various $repo &&

		# The just copied files have more recent timestamps than their
		# associated index entries. So refresh the cached timestamps
		# to avoid an "entry not up-to-date" error from `git checkout`.
		# We only have to do this for the submodules as `git checkout`
		# will already refresh the superproject index before performing
		# the up-to-date check.
		#
		git -C $repo submodule foreach "git update-index --refresh" &&

		set_checkout_config $workers $threshold &&
		test_checkout_workers $expected_workers \
			git -C $repo checkout --recurse-submodules B2 &&
		verify_checkout $repo
	
Entering 'f'
Entering 'g'
Entering 'k'
Switched to branch 'B2'
ok 4 - sequential-fallback checkout

expecting success of 2080.5 'parallel checkout on clone': 
		test_config_global protocol.file.allow always &&
		repo=various_${mode}_clone &&
		set_checkout_config $workers $threshold &&
		test_checkout_workers $expected_workers \
			git clone --recurse-submodules --branch B2 various $repo &&
		verify_checkout $repo
	
Cloning into 'various_parallel_clone'...
done.
Submodule 'e' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'e'
Submodule 'h' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'h'
Submodule 'k' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'k'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_parallel_clone/e'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_parallel_clone/h'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_parallel_clone/k'...
done.
Submodule path 'e': checked out '0f06b39781e370351121d9fbfe1aed95ed7794c8'
Submodule path 'h': checked out '0f06b39781e370351121d9fbfe1aed95ed7794c8'
Submodule path 'k': checked out '880a0ebc1b2c60184bf29ea8f144cd7c40ab60f8'
ok 5 - parallel checkout on clone

expecting success of 2080.6 'sequential-fallback checkout on clone': 
		test_config_global protocol.file.allow always &&
		repo=various_${mode}_clone &&
		set_checkout_config $workers $threshold &&
		test_checkout_workers $expected_workers \
			git clone --recurse-submodules --branch B2 various $repo &&
		verify_checkout $repo
	
Cloning into 'various_sequential-fallback_clone'...
done.
Submodule 'e' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'e'
Submodule 'h' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'h'
Submodule 'k' (/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/sub) registered for path 'k'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_sequential-fallback_clone/e'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_sequential-fallback_clone/h'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/various_sequential-fallback_clone/k'...
done.
Submodule path 'e': checked out '0f06b39781e370351121d9fbfe1aed95ed7794c8'
Submodule path 'h': checked out '0f06b39781e370351121d9fbfe1aed95ed7794c8'
Submodule path 'k': checked out '880a0ebc1b2c60184bf29ea8f144cd7c40ab60f8'
ok 6 - sequential-fallback checkout on clone

expecting success of 2080.7 'compare the working trees': 
	rm -rf various_*/.git &&
	rm -rf various_*/*/.git &&

	# We use `git diff` instead of `diff -r` because the latter would
	# follow symlinks, and not all `diff` implementations support the
	# `--no-dereference` option.
	#
	git diff --no-index various_sequential various_parallel &&
	git diff --no-index various_sequential various_parallel_clone &&
	git diff --no-index various_sequential various_sequential-fallback &&
	git diff --no-index various_sequential various_sequential-fallback_clone

ok 7 - compare the working trees

expecting success of 2080.8 'submodules can use parallel checkout': 
	set_checkout_config 2 0 &&
	git init super &&
	(
		cd super &&
		git init sub &&
		test_commit -C sub A &&
		test_commit -C sub B &&
		git submodule add ./sub &&
		git commit -m sub &&
		rm sub/* &&
		test_checkout_workers 2 git checkout --recurse-submodules .
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/super/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/super/sub/.git/
[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Adding existing repo at 'sub' to the index
[master (root-commit) 00b6c10] sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Migrating git directory of 'sub' from
'/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/super/sub/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/super/.git/modules/sub'
Updated 0 paths from the index
ok 8 - submodules can use parallel checkout

expecting success of 2080.9 'parallel checkout respects --[no]-force': 
	set_checkout_config 2 0 &&
	git init dirty &&
	(
		cd dirty &&
		mkdir D &&
		test_commit D/F &&
		test_commit F &&

		rm -rf D &&
		echo changed >D &&
		echo changed >F.t &&

		# We expect 0 workers because there is nothing to be done
		test_checkout_workers 0 git checkout HEAD &&
		test_path_is_file D &&
		grep changed D &&
		grep changed F.t &&

		test_checkout_workers 2 git checkout --force HEAD &&
		test_path_is_dir D &&
		grep D/F D/F.t &&
		grep F F.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/dirty/.git/
[master (root-commit) e516e44] D/F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D/F.t
[master a9126ab] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
D	D/F.t
M	F.t
changed
changed
D/F
F
ok 9 - parallel checkout respects --[no]-force

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2080.10 'parallel checkout checks for symlinks in leading dirs': 
	set_checkout_config 2 0 &&
	git init symlinks &&
	(
		cd symlinks &&
		mkdir D untracked &&
		# Commit 2 files to have enough work for 2 parallel workers
		test_commit D/A &&
		test_commit D/B &&
		rm -rf D &&
		ln -s untracked D &&

		test_checkout_workers 2 git checkout --force HEAD &&
		! test -h D &&
		grep D/A D/A.t &&
		grep D/B D/B.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/symlinks/.git/
[master (root-commit) dce6a14] D/A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D/A.t
[master 59586d4] D/B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D/B.t
D/A
D/B
ok 10 - parallel checkout checks for symlinks in leading dirs

expecting success of 2080.11 '"git checkout ." report should not include failed entries': 
	test_config_global filter.delay.process \
		"test-tool rot13-filter --always-delay --log=delayed.log clean smudge delay" &&
	test_config_global filter.delay.required true &&
	test_config_global filter.cat.clean cat  &&
	test_config_global filter.cat.smudge cat  &&
	test_config_global filter.cat.required true  &&

	set_checkout_config 2 0 &&
	git init failed_entries &&
	(
		cd failed_entries &&
		cat >.gitattributes <<-EOF &&
		*delay*              filter=delay
		parallel-ineligible* filter=cat
		EOF
		echo a >missing-delay.a &&
		echo a >parallel-ineligible.a &&
		echo a >parallel-eligible.a &&
		echo b >success-delay.b &&
		echo b >parallel-ineligible.b &&
		echo b >parallel-eligible.b &&
		git add -A &&
		git commit -m files &&

		a_blob="$(git rev-parse :parallel-ineligible.a)" &&
		rm .git/objects/$(test_oid_to_path $a_blob) &&
		rm *.a *.b &&

		test_checkout_workers 2 test_must_fail git checkout . 2>err &&

		# All *.b entries should succeed and all *.a entries should fail:
		#  - missing-delay.a: the delay filter will drop this path
		#  - parallel-*.a: the blob will be missing
		#
		grep "Updated 3 paths from the index" err &&
		test_stdout_line_count = 3 ls *.b &&
		! ls *.a
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2080-parallel-checkout-basics/failed_entries/.git/
[master (root-commit) d1e22ca] files
 Author: A U Thor <author@example.com>
 7 files changed, 8 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 missing-delay.a
 create mode 100644 parallel-eligible.a
 create mode 100644 parallel-eligible.b
 create mode 100644 parallel-ineligible.a
 create mode 100644 parallel-ineligible.b
 create mode 100644 success-delay.b
Updated 3 paths from the index
ls: cannot access '*.a': No such file or directory
ok 11 - "git checkout ." report should not include failed entries

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2204-add-ignored.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2204-add-ignored/.git/
expecting success of 2204.1 'setup': 
	mkdir sub dir dir/sub &&
	echo sub >.gitignore &&
	echo ign >>.gitignore &&
	for p in . sub dir dir/sub
	do
		>"$p/ign" &&
		>"$p/file" || exit 1
	done

ok 1 - setup

expecting success of 2204.2 'no complaints for unignored file': 
		rm -f .git/index &&
		git add "$i" &&
		git ls-files "$i" >out &&
		test -s out
	
ok 2 - no complaints for unignored file

expecting success of 2204.3 'no complaints for unignored dir/file': 
		rm -f .git/index &&
		git add "$i" &&
		git ls-files "$i" >out &&
		test -s out
	
ok 3 - no complaints for unignored dir/file

expecting success of 2204.4 'no complaints for unignored dir': 
		rm -f .git/index &&
		git add "$i" &&
		git ls-files "$i" >out &&
		test -s out
	
ok 4 - no complaints for unignored dir

expecting success of 2204.5 'no complaints for unignored d*': 
		rm -f .git/index &&
		git add "$i" &&
		git ls-files "$i" >out &&
		test -s out
	
ok 5 - no complaints for unignored d*

expecting success of 2204.6 'complaints for ignored ign': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 6 - complaints for ignored ign

expecting success of 2204.7 'complaints for ignored ign output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 7 - complaints for ignored ign output

expecting success of 2204.8 'complaints for ignored ign with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 8 - complaints for ignored ign with unignored file

expecting success of 2204.9 'complaints for ignored ign with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 9 - complaints for ignored ign with unignored file output

expecting success of 2204.10 'complaints for ignored dir/ign': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 10 - complaints for ignored dir/ign

expecting success of 2204.11 'complaints for ignored dir/ign output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 11 - complaints for ignored dir/ign output

expecting success of 2204.12 'complaints for ignored dir/ign with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 12 - complaints for ignored dir/ign with unignored file

expecting success of 2204.13 'complaints for ignored dir/ign with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 13 - complaints for ignored dir/ign with unignored file output

expecting success of 2204.14 'complaints for ignored dir/sub': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 14 - complaints for ignored dir/sub

expecting success of 2204.15 'complaints for ignored dir/sub output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 15 - complaints for ignored dir/sub output

expecting success of 2204.16 'complaints for ignored dir/sub with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 16 - complaints for ignored dir/sub with unignored file

expecting success of 2204.17 'complaints for ignored dir/sub with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 17 - complaints for ignored dir/sub with unignored file output

expecting success of 2204.18 'complaints for ignored dir/sub/ign': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 18 - complaints for ignored dir/sub/ign

expecting success of 2204.19 'complaints for ignored dir/sub/ign output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 19 - complaints for ignored dir/sub/ign output

expecting success of 2204.20 'complaints for ignored dir/sub/ign with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 20 - complaints for ignored dir/sub/ign with unignored file

expecting success of 2204.21 'complaints for ignored dir/sub/ign with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 21 - complaints for ignored dir/sub/ign with unignored file output

expecting success of 2204.22 'complaints for ignored sub/file': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 22 - complaints for ignored sub/file

expecting success of 2204.23 'complaints for ignored sub/file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 23 - complaints for ignored sub/file output

expecting success of 2204.24 'complaints for ignored sub/file with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 24 - complaints for ignored sub/file with unignored file

expecting success of 2204.25 'complaints for ignored sub/file with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 25 - complaints for ignored sub/file with unignored file output

expecting success of 2204.26 'complaints for ignored sub': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 26 - complaints for ignored sub

expecting success of 2204.27 'complaints for ignored sub output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 27 - complaints for ignored sub output

expecting success of 2204.28 'complaints for ignored sub with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 28 - complaints for ignored sub with unignored file

expecting success of 2204.29 'complaints for ignored sub with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 29 - complaints for ignored sub with unignored file output

expecting success of 2204.30 'complaints for ignored sub/file': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 30 - complaints for ignored sub/file

expecting success of 2204.31 'complaints for ignored sub/file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 31 - complaints for ignored sub/file output

expecting success of 2204.32 'complaints for ignored sub/file with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 32 - complaints for ignored sub/file with unignored file

expecting success of 2204.33 'complaints for ignored sub/file with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 33 - complaints for ignored sub/file with unignored file output

expecting success of 2204.34 'complaints for ignored sub/ign': 
		rm -f .git/index &&
		test_must_fail git add "$i" 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 34 - complaints for ignored sub/ign

expecting success of 2204.35 'complaints for ignored sub/ign output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 35 - complaints for ignored sub/ign output

expecting success of 2204.36 'complaints for ignored sub/ign with unignored file': 
		rm -f .git/index &&
		test_must_fail git add "$i" file 2>err &&
		git ls-files "$i" >out &&
		test_must_be_empty out
	
ok 36 - complaints for ignored sub/ign with unignored file

expecting success of 2204.37 'complaints for ignored sub/ign with unignored file output': 
		test_i18ngrep -e "Use -f if" err
	
hint: Use -f if you really want to add them.
ok 37 - complaints for ignored sub/ign with unignored file output

expecting success of 2204.38 'complaints for ignored sub in dir': 
		rm -f .git/index &&
		(
			cd dir &&
			test_must_fail git add "$i" 2>err &&
			git ls-files "$i" >out &&
			test_must_be_empty out
		)
	
ok 38 - complaints for ignored sub in dir

expecting success of 2204.39 'complaints for ignored sub in dir output': 
		(
			cd dir &&
			test_i18ngrep -e "Use -f if" err
		)
	
hint: Use -f if you really want to add them.
ok 39 - complaints for ignored sub in dir output

expecting success of 2204.40 'complaints for ignored sub/file in dir': 
		rm -f .git/index &&
		(
			cd dir &&
			test_must_fail git add "$i" 2>err &&
			git ls-files "$i" >out &&
			test_must_be_empty out
		)
	
ok 40 - complaints for ignored sub/file in dir

expecting success of 2204.41 'complaints for ignored sub/file in dir output': 
		(
			cd dir &&
			test_i18ngrep -e "Use -f if" err
		)
	
hint: Use -f if you really want to add them.
ok 41 - complaints for ignored sub/file in dir output

expecting success of 2204.42 'complaints for ignored sub/ign in dir': 
		rm -f .git/index &&
		(
			cd dir &&
			test_must_fail git add "$i" 2>err &&
			git ls-files "$i" >out &&
			test_must_be_empty out
		)
	
ok 42 - complaints for ignored sub/ign in dir

expecting success of 2204.43 'complaints for ignored sub/ign in dir output': 
		(
			cd dir &&
			test_i18ngrep -e "Use -f if" err
		)
	
hint: Use -f if you really want to add them.
ok 43 - complaints for ignored sub/ign in dir output

expecting success of 2204.44 'complaints for ignored ign in sub': 
		rm -f .git/index &&
		(
			cd sub &&
			test_must_fail git add "$i" 2>err &&
			git ls-files "$i" >out &&
			test_must_be_empty out
		)
	
ok 44 - complaints for ignored ign in sub

expecting success of 2204.45 'complaints for ignored ign in sub output': 
		(
			cd sub &&
			test_i18ngrep -e "Use -f if" err
		)
	
hint: Use -f if you really want to add them.
ok 45 - complaints for ignored ign in sub output

expecting success of 2204.46 'complaints for ignored file in sub': 
		rm -f .git/index &&
		(
			cd sub &&
			test_must_fail git add "$i" 2>err &&
			git ls-files "$i" >out &&
			test_must_be_empty out
		)
	
ok 46 - complaints for ignored file in sub

expecting success of 2204.47 'complaints for ignored file in sub output': 
		(
			cd sub &&
			test_i18ngrep -e "Use -f if" err
		)
	
hint: Use -f if you really want to add them.
ok 47 - complaints for ignored file in sub output

# passed all 47 test(s)
1..47
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2205-add-worktree-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/.git/
expecting success of 2205.1 '1a: setup--config worktree': 
	mkdir test1 &&
	(
	cd test1 &&
	test_create_repo repo &&
	git --git-dir="repo/.git" config core.worktree "$(pwd)" &&

	mkdir -p outside-tracked outside-untracked &&
	mkdir -p repo/inside-tracked repo/inside-untracked &&
	>file-tracked &&
	>file-untracked &&
	>outside-tracked/file &&
	>outside-untracked/file &&
	>repo/file-tracked &&
	>repo/file-untracked &&
	>repo/inside-tracked/file &&
	>repo/inside-untracked/file &&

	cat >expect-tracked-unsorted <<-EOF &&
	../file-tracked
	../outside-tracked/file
	file-tracked
	inside-tracked/file
	EOF

	cat >expect-untracked-unsorted <<-EOF &&
	../file-untracked
	../outside-untracked/file
	file-untracked
	inside-untracked/file
	EOF

	cat >expect-all-dir-unsorted <<-EOF &&
	../file-untracked
	../file-tracked
	../outside-untracked/
	../outside-tracked/
	./
	EOF

	cat expect-tracked-unsorted expect-untracked-unsorted >expect-all-unsorted &&

	cat >.gitignore <<-EOF
	.gitignore
	actual-*
	expect-*
	EOF
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/test1/repo/.git/
ok 1 - 1a: setup--config worktree

expecting success of 2205.2 '1b: pre-add all': 
	(
	cd test1 &&
	local parent_dir="$(pwd)" &&
	git -C repo ls-files -o --exclude-standard "$parent_dir" >actual-all-unsorted &&
	sort actual-all-unsorted >actual-all &&
	sort expect-all-unsorted >expect-all &&
	test_cmp expect-all actual-all
	)

ok 2 - 1b: pre-add all

expecting success of 2205.3 '1c: pre-add dir all': 
	(
	cd test1 &&
	local parent_dir="$(pwd)" &&
	git -C repo ls-files -o --directory --exclude-standard "$parent_dir" >actual-all-dir-unsorted &&
	sort actual-all-dir-unsorted >actual-all &&
	sort expect-all-dir-unsorted >expect-all &&
	test_cmp expect-all actual-all
	)

ok 3 - 1c: pre-add dir all

expecting success of 2205.4 '1d: post-add tracked': 
	(
	cd test1 &&
	local parent_dir="$(pwd)" &&
	(
		cd repo &&
		git add file-tracked &&
		git add inside-tracked &&
		git add ../outside-tracked &&
		git add "$parent_dir/file-tracked" &&
		git ls-files "$parent_dir" >../actual-tracked-unsorted
	) &&
	sort actual-tracked-unsorted >actual-tracked &&
	sort expect-tracked-unsorted >expect-tracked &&
	test_cmp expect-tracked actual-tracked
	)

ok 4 - 1d: post-add tracked

expecting success of 2205.5 '1e: post-add untracked': 
	(
	cd test1 &&
	local parent_dir="$(pwd)" &&
	git -C repo ls-files -o --exclude-standard "$parent_dir" >actual-untracked-unsorted &&
	sort actual-untracked-unsorted >actual-untracked &&
	sort expect-untracked-unsorted >expect-untracked &&
	test_cmp expect-untracked actual-untracked
	)

ok 5 - 1e: post-add untracked

expecting success of 2205.6 '2a: setup--set git-dir': 
	mkdir test2 &&
	(
	cd test2 &&
	test_create_repo repo &&
	# create two foreign repositories that should remain untracked
	test_create_repo repo-outside &&
	test_create_repo repo/repo-inside &&

	mkdir -p repo/inside-tracked repo/inside-untracked &&
	>repo/file-tracked &&
	>repo/file-untracked &&
	>repo/inside-tracked/file &&
	>repo/inside-untracked/file &&
	>repo-outside/file &&
	>repo/repo-inside/file &&

	cat >expect-tracked-unsorted <<-EOF &&
	repo/file-tracked
	repo/inside-tracked/file
	EOF

	cat >expect-untracked-unsorted <<-EOF &&
	repo/file-untracked
	repo/inside-untracked/file
	repo/repo-inside/
	repo-outside/
	EOF

	cat >expect-all-dir-unsorted <<-EOF &&
	repo/
	repo-outside/
	EOF

	cat expect-tracked-unsorted expect-untracked-unsorted >expect-all-unsorted &&

	cat >.gitignore <<-EOF
	.gitignore
	actual-*
	expect-*
	EOF
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/test2/repo/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/test2/repo-outside/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/test2/repo/repo-inside/.git/
ok 6 - 2a: setup--set git-dir

expecting success of 2205.7 '2b: pre-add all': 
	(
	cd test2 &&
	git --git-dir=repo/.git ls-files -o --exclude-standard >actual-all-unsorted &&
	sort actual-all-unsorted >actual-all &&
	sort expect-all-unsorted >expect-all &&
	test_cmp expect-all actual-all
	)

ok 7 - 2b: pre-add all

expecting success of 2205.8 '2c: pre-add dir all': 
	(
	cd test2 &&
	git --git-dir=repo/.git ls-files -o --directory --exclude-standard >actual-all-dir-unsorted &&
	sort actual-all-dir-unsorted >actual-all &&
	sort expect-all-dir-unsorted >expect-all &&
	test_cmp expect-all actual-all
	)

ok 8 - 2c: pre-add dir all

expecting success of 2205.9 '2d: post-add tracked': 
	(
	cd test2 &&
	git --git-dir=repo/.git add repo/file-tracked &&
	git --git-dir=repo/.git add repo/inside-tracked &&
	git --git-dir=repo/.git ls-files >actual-tracked-unsorted &&
	sort actual-tracked-unsorted >actual-tracked &&
	sort expect-tracked-unsorted >expect-tracked &&
	test_cmp expect-tracked actual-tracked
	)

ok 9 - 2d: post-add tracked

expecting success of 2205.10 '2e: post-add untracked': 
	(
	cd test2 &&
	git --git-dir=repo/.git ls-files -o --exclude-standard >actual-untracked-unsorted &&
	sort actual-untracked-unsorted >actual-untracked &&
	sort expect-untracked-unsorted >expect-untracked &&
	test_cmp expect-untracked actual-untracked
	)

ok 10 - 2e: post-add untracked

expecting success of 2205.11 '3a: setup--add repo dir': 
	mkdir test3 &&
	(
	cd test3 &&
	test_create_repo repo &&

	mkdir -p repo/inside-tracked repo/inside-ignored &&
	>repo/file-tracked &&
	>repo/file-ignored &&
	>repo/inside-tracked/file &&
	>repo/inside-ignored/file &&

	cat >.gitignore <<-EOF &&
	.gitignore
	actual-*
	expect-*
	*ignored
	EOF

	cat >expect-tracked-unsorted <<-EOF &&
	repo/file-tracked
	repo/inside-tracked/file
	EOF

	cat >expect-ignored-unsorted <<-EOF
	repo/file-ignored
	repo/inside-ignored/
	.gitignore
	actual-ignored-unsorted
	expect-ignored-unsorted
	expect-tracked-unsorted
	EOF
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2205-add-worktree-config/test3/repo/.git/
ok 11 - 3a: setup--add repo dir

expecting success of 2205.12 '3b: ignored': 
	(
	cd test3 &&
	git --git-dir=repo/.git ls-files -io --directory --exclude-standard >actual-ignored-unsorted &&
	sort actual-ignored-unsorted >actual-ignored &&
	sort expect-ignored-unsorted >expect-ignored &&
	test_cmp expect-ignored actual-ignored
	)

ok 12 - 3b: ignored

expecting success of 2205.13 '3c: add repo': 
	(
	cd test3 &&
	git --git-dir=repo/.git add repo &&
	git --git-dir=repo/.git ls-files >actual-tracked-unsorted &&
	sort actual-tracked-unsorted >actual-tracked &&
	sort expect-tracked-unsorted >expect-tracked &&
	test_cmp expect-tracked actual-tracked
	)

ok 13 - 3c: add repo

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2203-add-intent.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/.git/
expecting success of 2203.1 'intent to add': 
	test_commit 1 &&
	git rm 1.t &&
	echo hello >1.t &&
	echo hello >file &&
	echo hello >elif &&
	git add -N file &&
	git add elif &&
	git add -N 1.t

[master (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
rm '1.t'
ok 1 - intent to add

expecting success of 2203.2 'git status': 
	git status --porcelain | grep -v actual >actual &&
	cat >expect <<-\EOF &&
	DA 1.t
	A  elif
	 A file
	EOF
	test_cmp expect actual

ok 2 - git status

expecting success of 2203.3 'git status with porcelain v2': 
	git status --porcelain=v2 | grep -v "^?" >actual &&
	nam1=$(echo 1 | git hash-object --stdin) &&
	nam2=$(git hash-object elif) &&
	cat >expect <<-EOF &&
	1 DA N... 100644 000000 100644 $nam1 $ZERO_OID 1.t
	1 A. N... 000000 100644 100644 $ZERO_OID $nam2 elif
	1 .A N... 000000 000000 100644 $ZERO_OID $ZERO_OID file
	EOF
	test_cmp expect actual

ok 3 - git status with porcelain v2

expecting success of 2203.4 'check result of "add -N"': 
	git ls-files -s file >actual &&
	empty=$(git hash-object --stdin </dev/null) &&
	echo "100644 $empty 0	file" >expect &&
	test_cmp expect actual

ok 4 - check result of "add -N"

expecting success of 2203.5 'intent to add is just an ordinary empty blob': 
	git add -u &&
	git ls-files -s file >actual &&
	git ls-files -s elif | sed -e "s/elif/file/" >expect &&
	test_cmp expect actual

ok 5 - intent to add is just an ordinary empty blob

expecting success of 2203.6 'intent to add does not clobber existing paths': 
	git add -N file elif &&
	empty=$(git hash-object --stdin </dev/null) &&
	git ls-files -s >actual &&
	! grep "$empty" actual

ok 6 - intent to add does not clobber existing paths

expecting success of 2203.7 'i-t-a entry is simply ignored': 
	test_tick &&
	git commit -a -m initial &&
	git reset --hard &&

	echo xyzzy >rezrov &&
	echo frotz >nitfol &&
	git add rezrov &&
	git add -N nitfol &&
	git commit -m second &&
	test $(git ls-tree HEAD -- nitfol | wc -l) = 0 &&
	test $(git diff --name-only HEAD -- nitfol | wc -l) = 1 &&
	test $(git diff --name-only -- nitfol | wc -l) = 1

[master b7cca08] initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 elif
 create mode 100644 file
HEAD is now at b7cca08 initial
[master b70ad0b] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 rezrov
ok 7 - i-t-a entry is simply ignored

expecting success of 2203.8 'can commit with an unrelated i-t-a entry in index': 
	git reset --hard &&
	echo bozbar >rezrov &&
	echo frotz >nitfol &&
	git add rezrov &&
	git add -N nitfol &&
	git commit -m partial rezrov

HEAD is now at b70ad0b second
[master 1ed15b5] partial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 8 - can commit with an unrelated i-t-a entry in index

expecting success of 2203.9 'can "commit -a" with an i-t-a entry': 
	git reset --hard &&
	: >nitfol &&
	git add -N nitfol &&
	git commit -a -m all

HEAD is now at 1ed15b5 partial
[master 415f3ad] all
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 nitfol
ok 9 - can "commit -a" with an i-t-a entry

expecting success of 2203.10 'cache-tree invalidates i-t-a paths': 
	git reset --hard &&
	mkdir dir &&
	: >dir/foo &&
	git add dir/foo &&
	git commit -m foo &&

	: >dir/bar &&
	git add -N dir/bar &&
	git diff --name-only >actual &&
	echo dir/bar >expect &&
	test_cmp expect actual &&

	git write-tree >/dev/null &&

	git diff --name-only >actual &&
	echo dir/bar >expect &&
	test_cmp expect actual

HEAD is now at 415f3ad all
[master 03f6a20] foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir/foo
ok 10 - cache-tree invalidates i-t-a paths

expecting success of 2203.11 'cache-tree does not ignore dir that has i-t-a entries': 
	git init ita-in-dir &&
	(
		cd ita-in-dir &&
		mkdir 2 &&
		for f in 1 2/1 2/2 3
		do
			echo "$f" >"$f" || return 1
		done &&
		git add 1 2/2 3 &&
		git add -N 2/1 &&
		git commit -m committed &&
		git ls-tree -r HEAD >actual &&
		grep 2/2 actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/ita-in-dir/.git/
[master (root-commit) 7b0eb4f] committed
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 1
 create mode 100644 2/2
 create mode 100644 3
100644 blob 6b8a6f549c42bad0c52be670caa297a269052aa7	2/2
ok 11 - cache-tree does not ignore dir that has i-t-a entries

expecting success of 2203.12 'cache-tree does skip dir that becomes empty': 
	rm -fr ita-in-dir &&
	git init ita-in-dir &&
	(
		cd ita-in-dir &&
		mkdir -p 1/2/3 &&
		echo 4 >1/2/3/4 &&
		git add -N 1/2/3/4 &&
		git write-tree >actual &&
		echo $EMPTY_TREE >expected &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/ita-in-dir/.git/
ok 12 - cache-tree does skip dir that becomes empty

expecting success of 2203.13 'commit: ita entries ignored in empty initial commit check': 
	git init empty-initial-commit &&
	(
		cd empty-initial-commit &&
		: >one &&
		git add -N one &&
		test_must_fail git commit -m nothing-new-here
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/empty-initial-commit/.git/
On branch master

Initial commit

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	new file:   one

no changes added to commit (use "git add" and/or "git commit -a")
ok 13 - commit: ita entries ignored in empty initial commit check

expecting success of 2203.14 'commit: ita entries ignored in empty commit check': 
	git init empty-subsequent-commit &&
	(
		cd empty-subsequent-commit &&
		test_commit one &&
		: >two &&
		git add -N two &&
		test_must_fail git commit -m nothing-new-here
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/empty-subsequent-commit/.git/
[master (root-commit) 4331c28] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	new file:   two

no changes added to commit (use "git add" and/or "git commit -a")
ok 14 - commit: ita entries ignored in empty commit check

expecting success of 2203.15 'rename detection finds the right names': 
	git init rename-detection &&
	(
		cd rename-detection &&
		echo contents >first &&
		git add first &&
		git commit -m first &&
		mv first third &&
		git add -N third &&

		git status | grep -v "^?" >actual.1 &&
		test_i18ngrep "renamed: *first -> third" actual.1 &&

		git status --porcelain | grep -v "^?" >actual.2 &&
		cat >expected.2 <<-\EOF &&
		 R first -> third
		EOF
		test_cmp expected.2 actual.2 &&

		hash=$(git hash-object third) &&
		git status --porcelain=v2 | grep -v "^?" >actual.3 &&
		cat >expected.3 <<-EOF &&
		2 .R N... 100644 100644 100644 $hash $hash R100 third	first
		EOF
		test_cmp expected.3 actual.3 &&

		git diff --stat >actual.4 &&
		cat >expected.4 <<-EOF &&
		 first => third | 0
		 1 file changed, 0 insertions(+), 0 deletions(-)
		EOF
		test_cmp expected.4 actual.4 &&

		git diff --cached --stat >actual.5 &&
		test_must_be_empty actual.5

	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/rename-detection/.git/
[master (root-commit) 0bad72c] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first
	renamed:    first -> third
ok 15 - rename detection finds the right names

expecting success of 2203.16 'double rename detection in status': 
	git init rename-detection-2 &&
	(
		cd rename-detection-2 &&
		echo contents >first &&
		git add first &&
		git commit -m first &&
		git mv first second &&
		mv second third &&
		git add -N third &&

		git status | grep -v "^?" >actual.1 &&
		test_i18ngrep "renamed: *first -> second" actual.1 &&
		test_i18ngrep "renamed: *second -> third" actual.1 &&

		git status --porcelain | grep -v "^?" >actual.2 &&
		cat >expected.2 <<-\EOF &&
		R  first -> second
		 R second -> third
		EOF
		test_cmp expected.2 actual.2 &&

		hash=$(git hash-object third) &&
		git status --porcelain=v2 | grep -v "^?" >actual.3 &&
		cat >expected.3 <<-EOF &&
		2 R. N... 100644 100644 100644 $hash $hash R100 second	first
		2 .R N... 100644 100644 100644 $hash $hash R100 third	second
		EOF
		test_cmp expected.3 actual.3
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2203-add-intent/rename-detection-2/.git/
[master (root-commit) 0bad72c] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first
	renamed:    first -> second
	renamed:    second -> third
ok 16 - double rename detection in status

expecting success of 2203.17 'i-t-a files shown as new for "diff", "diff-files"; not-new for "diff --cached"': 
	git reset --hard &&
	: >empty &&
	content="foo" &&
	echo "$content" >not-empty &&

	hash_e=$(git hash-object empty) &&
	hash_n=$(git hash-object not-empty) &&

	cat >expect.diff_p <<-EOF &&
	diff --git a/empty b/empty
	new file mode 100644
	index 0000000..$(git rev-parse --short $hash_e)
	diff --git a/not-empty b/not-empty
	new file mode 100644
	index 0000000..$(git rev-parse --short $hash_n)
	--- /dev/null
	+++ b/not-empty
	@@ -0,0 +1 @@
	+$content
	EOF
	cat >expect.diff_s <<-EOF &&
	 create mode 100644 empty
	 create mode 100644 not-empty
	EOF
	cat >expect.diff_a <<-EOF &&
	:000000 100644 0000000 0000000 A$(printf "\t")empty
	:000000 100644 0000000 0000000 A$(printf "\t")not-empty
	EOF

	git add -N empty not-empty &&

	git diff >actual &&
	test_cmp expect.diff_p actual &&

	git diff --summary >actual &&
	test_cmp expect.diff_s actual &&

	git diff-files -p >actual &&
	test_cmp expect.diff_p actual &&

	git diff-files --abbrev >actual &&
	test_cmp expect.diff_a actual &&

	git diff --cached >actual &&
	test_must_be_empty actual

HEAD is now at 03f6a20 foo
ok 17 - i-t-a files shown as new for "diff", "diff-files"; not-new for "diff --cached"

expecting success of 2203.18 '"diff HEAD" includes ita as new files': 
	git reset --hard &&
	echo new >new-ita &&
	oid=$(git hash-object new-ita) &&
	oid=$(git rev-parse --short $oid) &&
	git add -N new-ita &&
	git diff HEAD >actual &&
	cat >expected <<-EOF &&
	diff --git a/new-ita b/new-ita
	new file mode 100644
	index 0000000..$oid
	--- /dev/null
	+++ b/new-ita
	@@ -0,0 +1 @@
	+new
	EOF
	test_cmp expected actual

HEAD is now at 03f6a20 foo
ok 18 - "diff HEAD" includes ita as new files

expecting success of 2203.19 'apply --intent-to-add': 
	git reset --hard &&
	echo new >new-ita &&
	git add -N new-ita &&
	git diff >expected &&
	grep "new file" expected &&
	git reset --hard &&
	git apply --intent-to-add expected &&
	git diff >actual &&
	test_cmp expected actual

HEAD is now at 03f6a20 foo
new file mode 100644
HEAD is now at 03f6a20 foo
ok 19 - apply --intent-to-add

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2300-cd-to-toplevel.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2300-cd-to-toplevel/.git/
expecting success of 2300.1 'at physical root': 
		(
			cd 'repo' &&
			PATH="$EXEC_PATH:$PATH" &&
			. git-sh-setup &&
			cd_to_toplevel &&
			[ "$(pwd -P)" = "$TOPLEVEL" ]
		)
	
ok 1 - at physical root

expecting success of 2300.2 'at physical subdir': 
		(
			cd 'repo/sub/dir' &&
			PATH="$EXEC_PATH:$PATH" &&
			. git-sh-setup &&
			cd_to_toplevel &&
			[ "$(pwd -P)" = "$TOPLEVEL" ]
		)
	
ok 2 - at physical subdir

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2300.3 'at symbolic root': 
		(
			cd 'symrepo' &&
			PATH="$EXEC_PATH:$PATH" &&
			. git-sh-setup &&
			cd_to_toplevel &&
			[ "$(pwd -P)" = "$TOPLEVEL" ]
		)
	
ok 3 - at symbolic root

expecting success of 2300.4 'at symbolic subdir': 
		(
			cd 'subdir-link' &&
			PATH="$EXEC_PATH:$PATH" &&
			. git-sh-setup &&
			cd_to_toplevel &&
			[ "$(pwd -P)" = "$TOPLEVEL" ]
		)
	
ok 4 - at symbolic subdir

expecting success of 2300.5 'at internal symbolic subdir': 
		(
			cd 'internal-link' &&
			PATH="$EXEC_PATH:$PATH" &&
			. git-sh-setup &&
			cd_to_toplevel &&
			[ "$(pwd -P)" = "$TOPLEVEL" ]
		)
	
ok 5 - at internal symbolic subdir

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2401-worktree-prune.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2401-worktree-prune/.git/
expecting success of 2401.1 'initialize': 
	git commit --allow-empty -m init

[main (root-commit) 50572bf] init
 Author: A U Thor <author@example.com>
ok 1 - initialize

expecting success of 2401.2 'worktree prune on normal repo': 
	git worktree prune &&
	test_must_fail git worktree prune abc

usage: git worktree prune [-n] [-v] [--expire <expire>]

    -n, --dry-run         do not remove, show only
    -v, --verbose         report pruned working trees
    --expire <expiry-date>
                          expire working trees older than <time>

ok 2 - worktree prune on normal repo

expecting success of 2401.3 'prune files inside $GIT_DIR/worktrees': 
	mkdir .git/worktrees &&
	: >.git/worktrees/abc &&
	git worktree prune --verbose 2>actual &&
	cat >expect <<EOF &&
Removing worktrees/abc: not a valid directory
EOF
	test_cmp expect actual &&
	! test -f .git/worktrees/abc &&
	! test -d .git/worktrees

ok 3 - prune files inside $GIT_DIR/worktrees

expecting success of 2401.4 'prune directories without gitdir': 
	mkdir -p .git/worktrees/def/abc &&
	: >.git/worktrees/def/def &&
	cat >expect <<EOF &&
Removing worktrees/def: gitdir file does not exist
EOF
	git worktree prune --verbose 2>actual &&
	test_cmp expect actual &&
	! test -d .git/worktrees/def &&
	! test -d .git/worktrees

ok 4 - prune directories without gitdir

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 2401.5 'prune directories with unreadable gitdir': 
	mkdir -p .git/worktrees/def/abc &&
	: >.git/worktrees/def/def &&
	: >.git/worktrees/def/gitdir &&
	chmod u-r .git/worktrees/def/gitdir &&
	git worktree prune --verbose 2>actual &&
	test_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&
	! test -d .git/worktrees/def &&
	! test -d .git/worktrees

Removing worktrees/def: unable to read gitdir file (Permission denied)
ok 5 - prune directories with unreadable gitdir

expecting success of 2401.6 'prune directories with invalid gitdir': 
	mkdir -p .git/worktrees/def/abc &&
	: >.git/worktrees/def/def &&
	: >.git/worktrees/def/gitdir &&
	git worktree prune --verbose 2>actual &&
	test_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&
	! test -d .git/worktrees/def &&
	! test -d .git/worktrees

Removing worktrees/def: invalid gitdir file
ok 6 - prune directories with invalid gitdir

expecting success of 2401.7 'prune directories with gitdir pointing to nowhere': 
	mkdir -p .git/worktrees/def/abc &&
	: >.git/worktrees/def/def &&
	echo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&
	git worktree prune --verbose 2>actual &&
	test_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&
	! test -d .git/worktrees/def &&
	! test -d .git/worktrees

Removing worktrees/def: gitdir file points to non-existent location
ok 7 - prune directories with gitdir pointing to nowhere

expecting success of 2401.8 'not prune locked checkout': 
	test_when_finished rm -r .git/worktrees &&
	mkdir -p .git/worktrees/ghi &&
	: >.git/worktrees/ghi/locked &&
	git worktree prune &&
	test -d .git/worktrees/ghi

ok 8 - not prune locked checkout

expecting success of 2401.9 'not prune recent checkouts': 
	test_when_finished rm -r .git/worktrees &&
	git worktree add jlm HEAD &&
	test -d .git/worktrees/jlm &&
	rm -rf jlm &&
	git worktree prune --verbose --expire=2.days.ago &&
	test -d .git/worktrees/jlm

Preparing worktree (detached HEAD 50572bf)
HEAD is now at 50572bf init
ok 9 - not prune recent checkouts

expecting success of 2401.10 'not prune proper checkouts': 
	test_when_finished rm -r .git/worktrees &&
	git worktree add --detach "$PWD/nop" main &&
	git worktree prune &&
	test -d .git/worktrees/nop

Preparing worktree (detached HEAD 50572bf)
HEAD is now at 50572bf init
ok 10 - not prune proper checkouts

expecting success of 2401.11 'prune duplicate (linked/linked)': 
	test_when_finished rm -fr .git/worktrees w1 w2 &&
	git worktree add --detach w1 &&
	git worktree add --detach w2 &&
	sed "s/w2/w1/" .git/worktrees/w2/gitdir >.git/worktrees/w2/gitdir.new &&
	mv .git/worktrees/w2/gitdir.new .git/worktrees/w2/gitdir &&
	git worktree prune --verbose 2>actual &&
	test_i18ngrep "duplicate entry" actual &&
	test -d .git/worktrees/w1 &&
	! test -d .git/worktrees/w2

Preparing worktree (detached HEAD 50572bf)
HEAD is now at 50572bf init
Preparing worktree (detached HEAD 50572bf)
HEAD is now at 50572bf init
Removing worktrees/w2: duplicate entry
ok 11 - prune duplicate (linked/linked)

expecting success of 2401.12 'prune duplicate (main/linked)': 
	test_when_finished rm -fr repo wt &&
	test_create_repo repo &&
	test_commit -C repo x &&
	git -C repo worktree add --detach ../wt &&
	rm -fr wt &&
	mv repo wt &&
	git -C wt worktree prune --verbose 2>actual &&
	test_i18ngrep "duplicate entry" actual &&
	! test -d .git/worktrees/wt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2401-worktree-prune/repo/.git/
[main (root-commit) cb85766] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
Preparing worktree (detached HEAD cb85766)
HEAD is now at cb85766 x
Removing worktrees/wt: duplicate entry
ok 12 - prune duplicate (main/linked)

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2402-worktree-list.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/.git/
expecting success of 2402.1 'setup': 
	test_commit init

[main (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
ok 1 - setup

expecting success of 2402.2 'rev-parse --git-common-dir on main worktree': 
	git rev-parse --git-common-dir >actual &&
	echo .git >expected &&
	test_cmp expected actual &&
	mkdir sub &&
	git -C sub rev-parse --git-common-dir >actual2 &&
	echo ../.git >expected2 &&
	test_cmp expected2 actual2

ok 2 - rev-parse --git-common-dir on main worktree

expecting success of 2402.3 'rev-parse --git-path objects linked worktree': 
	echo "$(git rev-parse --show-toplevel)/.git/objects" >expect &&
	test_when_finished "rm -rf linked-tree actual expect && git worktree prune" &&
	git worktree add --detach linked-tree main &&
	git -C linked-tree rev-parse --git-path objects >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 3 - rev-parse --git-path objects linked worktree

expecting success of 2402.4 '"list" all worktrees from main': 
	echo "$(git rev-parse --show-toplevel) $(git rev-parse --short HEAD) [$(git symbolic-ref --short HEAD)]" >expect &&
	test_when_finished "rm -rf here out actual expect && git worktree prune" &&
	git worktree add --detach here main &&
	echo "$(git -C here rev-parse --show-toplevel) $(git rev-parse --short HEAD) (detached HEAD)" >>expect &&
	git worktree list >out &&
	sed "s/  */ /g" <out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 4 - "list" all worktrees from main

expecting success of 2402.5 '"list" all worktrees from linked': 
	echo "$(git rev-parse --show-toplevel) $(git rev-parse --short HEAD) [$(git symbolic-ref --short HEAD)]" >expect &&
	test_when_finished "rm -rf here out actual expect && git worktree prune" &&
	git worktree add --detach here main &&
	echo "$(git -C here rev-parse --show-toplevel) $(git rev-parse --short HEAD) (detached HEAD)" >>expect &&
	git -C here worktree list >out &&
	sed "s/  */ /g" <out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 5 - "list" all worktrees from linked

expecting success of 2402.6 '"list" all worktrees --porcelain': 
	echo "worktree $(git rev-parse --show-toplevel)" >expect &&
	echo "HEAD $(git rev-parse HEAD)" >>expect &&
	echo "branch $(git symbolic-ref HEAD)" >>expect &&
	echo >>expect &&
	test_when_finished "rm -rf here actual expect && git worktree prune" &&
	git worktree add --detach here main &&
	echo "worktree $(git -C here rev-parse --show-toplevel)" >>expect &&
	echo "HEAD $(git rev-parse HEAD)" >>expect &&
	echo "detached" >>expect &&
	echo >>expect &&
	git worktree list --porcelain >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 6 - "list" all worktrees --porcelain

expecting success of 2402.7 '"list" all worktrees --porcelain -z': 
	test_when_finished "rm -rf here _actual actual expect &&
				git worktree prune" &&
	printf "worktree %sQHEAD %sQbranch %sQQ" \
		"$(git rev-parse --show-toplevel)" \
		$(git rev-parse HEAD --symbolic-full-name HEAD) >expect &&
	git worktree add --detach here main &&
	printf "worktree %sQHEAD %sQdetachedQQ" \
		"$(git -C here rev-parse --show-toplevel)" \
		"$(git rev-parse HEAD)" >>expect &&
	git worktree list --porcelain -z >_actual &&
	nul_to_q <_actual >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 7 - "list" all worktrees --porcelain -z

expecting success of 2402.8 '"list" -z fails without --porcelain': 
	test_must_fail git worktree list -z

fatal: the option '-z' requires '--porcelain'
ok 8 - "list" -z fails without --porcelain

expecting success of 2402.9 '"list" all worktrees with locked annotation': 
	test_when_finished "rm -rf locked unlocked out && git worktree prune" &&
	git worktree add --detach locked main &&
	git worktree add --detach unlocked main &&
	git worktree lock locked &&
	test_when_finished "git worktree unlock locked" &&
	git worktree list >out &&
	grep "/locked  *[0-9a-f].* locked$" out &&
	! grep "/unlocked  *[0-9a-f].* locked$" out

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/locked    2519212 (detached HEAD) locked
ok 9 - "list" all worktrees with locked annotation

expecting success of 2402.10 '"list" all worktrees --porcelain with locked': 
	test_when_finished "rm -rf locked1 locked2 unlocked out actual expect && git worktree prune" &&
	echo "locked" >expect &&
	echo "locked with reason" >>expect &&
	git worktree add --detach locked1 &&
	git worktree add --detach locked2 &&
	# unlocked worktree should not be annotated with "locked"
	git worktree add --detach unlocked &&
	git worktree lock locked1 &&
	test_when_finished "git worktree unlock locked1" &&
	git worktree lock locked2 --reason "with reason" &&
	test_when_finished "git worktree unlock locked2" &&
	git worktree list --porcelain >out &&
	grep "^locked" out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 10 - "list" all worktrees --porcelain with locked

expecting success of 2402.11 '"list" all worktrees --porcelain with locked reason newline escaped': 
	test_when_finished "rm -rf locked_lf locked_crlf out actual expect && git worktree prune" &&
	printf "locked \"locked\\\\r\\\\nreason\"\n" >expect &&
	printf "locked \"locked\\\\nreason\"\n" >>expect &&
	git worktree add --detach locked_lf &&
	git worktree add --detach locked_crlf &&
	git worktree lock locked_lf --reason "$(printf "locked\nreason")" &&
	test_when_finished "git worktree unlock locked_lf" &&
	git worktree lock locked_crlf --reason "$(printf "locked\r\nreason")" &&
	test_when_finished "git worktree unlock locked_crlf" &&
	git worktree list --porcelain >out &&
	grep "^locked" out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 11 - "list" all worktrees --porcelain with locked reason newline escaped

expecting success of 2402.12 '"list" all worktrees with prunable annotation': 
	test_when_finished "rm -rf prunable unprunable out && git worktree prune" &&
	git worktree add --detach prunable &&
	git worktree add --detach unprunable &&
	rm -rf prunable &&
	git worktree list >out &&
	grep "/prunable  *[0-9a-f].* prunable$" out &&
	! grep "/unprunable  *[0-9a-f].* prunable$"

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/prunable    2519212 (detached HEAD) prunable
ok 12 - "list" all worktrees with prunable annotation

expecting success of 2402.13 '"list" all worktrees --porcelain with prunable': 
	test_when_finished "rm -rf prunable out && git worktree prune" &&
	git worktree add --detach prunable &&
	rm -rf prunable &&
	git worktree list --porcelain >out &&
	sed -n "/^worktree .*\/prunable$/,/^$/p" <out >only_prunable &&
	test_i18ngrep "^prunable gitdir file points to non-existent location$" only_prunable

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
prunable gitdir file points to non-existent location
ok 13 - "list" all worktrees --porcelain with prunable

expecting success of 2402.14 '"list" all worktrees with prunable consistent with "prune"': 
	test_when_finished "rm -rf prunable unprunable out && git worktree prune" &&
	git worktree add --detach prunable &&
	git worktree add --detach unprunable &&
	rm -rf prunable &&
	git worktree list >out &&
	grep "/prunable  *[0-9a-f].* prunable$" out &&
	! grep "/unprunable  *[0-9a-f].* unprunable$" out &&
	git worktree prune --verbose 2>out &&
	test_i18ngrep "^Removing worktrees/prunable" out &&
	test_i18ngrep ! "^Removing worktrees/unprunable" out

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/prunable    2519212 (detached HEAD) prunable
Removing worktrees/prunable: gitdir file points to non-existent location
ok 14 - "list" all worktrees with prunable consistent with "prune"

expecting success of 2402.15 '"list" --verbose and --porcelain mutually exclusive': 
	test_must_fail git worktree list --verbose --porcelain

fatal: options '--verbose' and '--porcelain' cannot be used together
ok 15 - "list" --verbose and --porcelain mutually exclusive

expecting success of 2402.16 '"list" all worktrees --verbose with locked': 
	test_when_finished "rm -rf locked1 locked2 out actual expect && git worktree prune" &&
	git worktree add locked1 --detach &&
	git worktree add locked2 --detach &&
	git worktree lock locked1 &&
	test_when_finished "git worktree unlock locked1" &&
	git worktree lock locked2 --reason "with reason" &&
	test_when_finished "git worktree unlock locked2" &&
	echo "$(git -C locked2 rev-parse --show-toplevel) $(git rev-parse --short HEAD) (detached HEAD)" >expect &&
	printf "\tlocked: with reason\n" >>expect &&
	git worktree list --verbose >out &&
	grep "/locked1  *[0-9a-f].* locked$" out &&
	sed -n "s/  */ /g;/\/locked2  *[0-9a-f].*$/,/locked: .*$/p" <out >actual &&
	test_cmp actual expect

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/locked1  2519212 (detached HEAD) locked
ok 16 - "list" all worktrees --verbose with locked

expecting success of 2402.17 '"list" all worktrees --verbose with prunable': 
	test_when_finished "rm -rf prunable out actual expect && git worktree prune" &&
	git worktree add prunable --detach &&
	echo "$(git -C prunable rev-parse --show-toplevel) $(git rev-parse --short HEAD) (detached HEAD)" >expect &&
	printf "\tprunable: gitdir file points to non-existent location\n" >>expect &&
	rm -rf prunable &&
	git worktree list --verbose >out &&
	sed -n "s/  */ /g;/\/prunable  *[0-9a-f].*$/,/prunable: .*$/p" <out >actual &&
	test_cmp actual expect

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 17 - "list" all worktrees --verbose with prunable

expecting success of 2402.18 'bare repo setup': 
	git init --bare bare1 &&
	echo "data" >file1 &&
	git add file1 &&
	git commit -m"File1: add data" &&
	git push bare1 main &&
	git reset --hard HEAD^

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/bare1/
[main 7c81006] File1: add data
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
To bare1
 * [new branch]      main -> main
HEAD is now at 2519212 init
ok 18 - bare repo setup

expecting success of 2402.19 '"list" all worktrees from bare main': 
	test_when_finished "rm -rf there out actual expect && git -C bare1 worktree prune" &&
	git -C bare1 worktree add --detach ../there main &&
	echo "$(pwd)/bare1 (bare)" >expect &&
	echo "$(git -C there rev-parse --show-toplevel) $(git -C there rev-parse --short HEAD) (detached HEAD)" >>expect &&
	git -C bare1 worktree list >out &&
	sed "s/  */ /g" <out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 7c81006)
HEAD is now at 7c81006 File1: add data
ok 19 - "list" all worktrees from bare main

expecting success of 2402.20 '"list" all worktrees --porcelain from bare main': 
	test_when_finished "rm -rf there actual expect && git -C bare1 worktree prune" &&
	git -C bare1 worktree add --detach ../there main &&
	echo "worktree $(pwd)/bare1" >expect &&
	echo "bare" >>expect &&
	echo >>expect &&
	echo "worktree $(git -C there rev-parse --show-toplevel)" >>expect &&
	echo "HEAD $(git -C there rev-parse HEAD)" >>expect &&
	echo "detached" >>expect &&
	echo >>expect &&
	git -C bare1 worktree list --porcelain >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 7c81006)
HEAD is now at 7c81006 File1: add data
ok 20 - "list" all worktrees --porcelain from bare main

expecting success of 2402.21 '"list" all worktrees from linked with a bare main': 
	test_when_finished "rm -rf there out actual expect && git -C bare1 worktree prune" &&
	git -C bare1 worktree add --detach ../there main &&
	echo "$(pwd)/bare1 (bare)" >expect &&
	echo "$(git -C there rev-parse --show-toplevel) $(git -C there rev-parse --short HEAD) (detached HEAD)" >>expect &&
	git -C there worktree list >out &&
	sed "s/  */ /g" <out >actual &&
	test_cmp expect actual

Preparing worktree (detached HEAD 7c81006)
HEAD is now at 7c81006 File1: add data
ok 21 - "list" all worktrees from linked with a bare main

expecting success of 2402.22 'bare repo cleanup': 
	rm -rf bare1

ok 22 - bare repo cleanup

expecting success of 2402.23 'broken main worktree still at the top': 
	git init broken-main &&
	(
		cd broken-main &&
		test_commit new &&
		git worktree add linked &&
		cat >expected <<-EOF &&
		worktree $(pwd)
		HEAD $ZERO_OID

		EOF
		cd linked &&
		echo "worktree $(pwd)" >expected &&
		(cd ../ && test-tool ref-store main create-symref HEAD .broken ) &&
		git worktree list --porcelain >out &&
		head -n 3 out >actual &&
		test_cmp ../expected actual &&
		git worktree list >out &&
		head -n 1 out >actual.2 &&
		grep -F "(error)" actual.2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/broken-main/.git/
[main (root-commit) 3325ee1] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
Preparing worktree (new branch 'linked')
HEAD is now at 3325ee1 new
/<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/broken-main         0000000 (error)
ok 23 - broken main worktree still at the top

expecting success of 2402.24 'linked worktrees are sorted': 
	mkdir sorted &&
	git init sorted/main &&
	(
		cd sorted/main &&
		test_tick &&
		test_commit new &&
		git worktree add ../first &&
		git worktree add ../second &&
		git worktree list --porcelain >out &&
		grep ^worktree out >actual
	) &&
	cat >expected <<-EOF &&
	worktree $(pwd)/sorted/main
	worktree $(pwd)/sorted/first
	worktree $(pwd)/sorted/second
	EOF
	test_cmp expected sorted/main/actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2402-worktree-list/sorted/main/.git/
[main (root-commit) d8ef111] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
Preparing worktree (new branch 'first')
HEAD is now at d8ef111 new
Preparing worktree (new branch 'second')
HEAD is now at d8ef111 new
ok 24 - linked worktrees are sorted

expecting success of 2402.25 'worktree path when called in .git directory': 
	git worktree list >list1 &&
	git -C .git worktree list >list2 &&
	test_cmp list1 list2

ok 25 - worktree path when called in .git directory

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2403-worktree-move.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/.git/
expecting success of 2403.1 'setup': 
	test_commit init &&
	git worktree add source &&
	git worktree list --porcelain >out &&
	grep "^worktree" out >actual &&
	cat <<-EOF >expected &&
	worktree $(pwd)
	worktree $(pwd)/source
	EOF
	test_cmp expected actual

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Preparing worktree (new branch 'source')
HEAD is now at 2519212 init
ok 1 - setup

expecting success of 2403.2 'lock main worktree': 
	test_must_fail git worktree lock .

fatal: The main working tree cannot be locked or unlocked
ok 2 - lock main worktree

expecting success of 2403.3 'lock linked worktree': 
	git worktree lock --reason hahaha source &&
	echo hahaha >expected &&
	test_cmp expected .git/worktrees/source/locked

ok 3 - lock linked worktree

expecting success of 2403.4 'lock linked worktree from another worktree': 
	rm .git/worktrees/source/locked &&
	git worktree add elsewhere &&
	git -C elsewhere worktree lock --reason hahaha ../source &&
	echo hahaha >expected &&
	test_cmp expected .git/worktrees/source/locked

Preparing worktree (new branch 'elsewhere')
HEAD is now at 2519212 init
ok 4 - lock linked worktree from another worktree

expecting success of 2403.5 'lock worktree twice': 
	test_must_fail git worktree lock source &&
	echo hahaha >expected &&
	test_cmp expected .git/worktrees/source/locked

fatal: 'source' is already locked, reason: hahaha
ok 5 - lock worktree twice

expecting success of 2403.6 'lock worktree twice (from the locked worktree)': 
	test_must_fail git -C source worktree lock . &&
	echo hahaha >expected &&
	test_cmp expected .git/worktrees/source/locked

fatal: '.' is already locked, reason: hahaha
ok 6 - lock worktree twice (from the locked worktree)

expecting success of 2403.7 'unlock main worktree': 
	test_must_fail git worktree unlock .

fatal: The main working tree cannot be locked or unlocked
ok 7 - unlock main worktree

expecting success of 2403.8 'unlock linked worktree': 
	git worktree unlock source &&
	test_path_is_missing .git/worktrees/source/locked

ok 8 - unlock linked worktree

expecting success of 2403.9 'unlock worktree twice': 
	test_must_fail git worktree unlock source &&
	test_path_is_missing .git/worktrees/source/locked

fatal: 'source' is not locked
ok 9 - unlock worktree twice

expecting success of 2403.10 'move non-worktree': 
	mkdir abc &&
	test_must_fail git worktree move abc def

fatal: 'abc' is not a working tree
ok 10 - move non-worktree

expecting success of 2403.11 'move locked worktree': 
	git worktree lock source &&
	test_when_finished "git worktree unlock source" &&
	test_must_fail git worktree move source destination

fatal: cannot move a locked working tree;
use 'move -f -f' to override or unlock first
ok 11 - move locked worktree

expecting success of 2403.12 'move worktree': 
	git worktree move source destination &&
	test_path_is_missing source &&
	git worktree list --porcelain >out &&
	grep "^worktree.*/destination$" out &&
	! grep "^worktree.*/source$" out &&
	git -C destination log --format=%s >actual2 &&
	echo init >expected2 &&
	test_cmp expected2 actual2

worktree /<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/destination
ok 12 - move worktree

expecting success of 2403.13 'move main worktree': 
	test_must_fail git worktree move . def

fatal: '.' is a main working tree
ok 13 - move main worktree

expecting success of 2403.14 'move worktree to another dir': 
	mkdir some-dir &&
	git worktree move destination some-dir &&
	test_when_finished "git worktree move some-dir/destination destination" &&
	test_path_is_missing destination &&
	git worktree list --porcelain >out &&
	grep "^worktree.*/some-dir/destination$" out &&
	git -C some-dir/destination log --format=%s >actual2 &&
	echo init >expected2 &&
	test_cmp expected2 actual2

worktree /<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/some-dir/destination
ok 14 - move worktree to another dir

expecting success of 2403.15 'move locked worktree (force)': 
	test_when_finished "
		git worktree unlock flump || :
		git worktree remove flump || :
		git worktree unlock ploof || :
		git worktree remove ploof || :
		" &&
	git worktree add --detach flump &&
	git worktree lock flump &&
	test_must_fail git worktree move flump ploof" &&
	test_must_fail git worktree move --force flump ploof" &&
	git worktree move --force --force flump ploof

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: cannot move a locked working tree;
use 'move -f -f' to override or unlock first
fatal: 'flump' is not a working tree
fatal: 'flump' is not a working tree
ok 15 - move locked worktree (force)

expecting success of 2403.16 'refuse to move worktree atop existing path': 
	>bobble &&
	git worktree add --detach beeble &&
	test_must_fail git worktree move beeble bobble

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: 'bobble' already exists
ok 16 - refuse to move worktree atop existing path

expecting success of 2403.17 'move atop existing but missing worktree': 
	git worktree add --detach gnoo &&
	git worktree add --detach pneu &&
	rm -fr pneu &&
	test_must_fail git worktree move gnoo pneu &&
	git worktree move --force gnoo pneu &&

	git worktree add --detach nu &&
	git worktree lock nu &&
	rm -fr nu &&
	test_must_fail git worktree move pneu nu &&
	test_must_fail git worktree --force move pneu nu &&
	git worktree move --force --force pneu nu

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: 'pneu' is a missing but already registered worktree;
use 'move -f' to override, or 'prune' or 'remove' to clear
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: 'nu' is a missing but locked worktree;
use 'move -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear
error: unknown option `force'
usage: git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]]
                        [-b <new-branch>] <path> [<commit-ish>]
   or: git worktree list [-v | --porcelain [-z]]
   or: git worktree lock [--reason <string>] <worktree>
   or: git worktree move <worktree> <new-path>
   or: git worktree prune [-n] [-v] [--expire <expire>]
   or: git worktree remove [-f] <worktree>
   or: git worktree repair [<path>...]
   or: git worktree unlock <worktree>

ok 17 - move atop existing but missing worktree

expecting success of 2403.18 'move a repo with uninitialized submodule': 
	git init withsub &&
	(
		cd withsub &&
		test_commit initial &&
		git -c protocol.file.allow=always \
			submodule add "$PWD"/.git sub &&
		git commit -m withsub &&
		git worktree add second HEAD &&
		git worktree move second third
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/withsub/.git/
[master (root-commit) 5e30013] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/withsub/sub'...
done.
[master 50bdabe] withsub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Preparing worktree (detached HEAD 50bdabe)
HEAD is now at 50bdabe withsub
ok 18 - move a repo with uninitialized submodule

expecting success of 2403.19 'not move a repo with initialized submodule': 
	(
		cd withsub &&
		git -c protocol.file.allow=always -C third submodule update &&
		test_must_fail git worktree move third forth
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/withsub/third/sub'...
done.
Submodule path 'sub': checked out '5e3001300c8a533bee3e24efd70fbfae3dfa27e3'
fatal: working trees containing submodules cannot be moved or removed
ok 19 - not move a repo with initialized submodule

expecting success of 2403.20 'remove main worktree': 
	test_must_fail git worktree remove .

fatal: '.' is a main working tree
ok 20 - remove main worktree

expecting success of 2403.21 'remove locked worktree': 
	git worktree lock destination &&
	test_when_finished "git worktree unlock destination" &&
	test_must_fail git worktree remove destination

fatal: cannot remove a locked working tree;
use 'remove -f -f' to override or unlock first
ok 21 - remove locked worktree

expecting success of 2403.22 'remove worktree with dirty tracked file': 
	echo dirty >>destination/init.t &&
	test_when_finished "git -C destination checkout init.t" &&
	test_must_fail git worktree remove destination

fatal: 'destination' contains modified or untracked files, use --force to delete it
Updated 1 path from the index
ok 22 - remove worktree with dirty tracked file

expecting success of 2403.23 'remove worktree with untracked file': 
	: >destination/untracked &&
	test_must_fail git worktree remove destination

fatal: 'destination' contains modified or untracked files, use --force to delete it
ok 23 - remove worktree with untracked file

expecting success of 2403.24 'force remove worktree with untracked file': 
	git worktree remove --force destination &&
	test_path_is_missing destination

ok 24 - force remove worktree with untracked file

expecting success of 2403.25 'remove missing worktree': 
	git worktree add to-be-gone &&
	test -d .git/worktrees/to-be-gone &&
	mv to-be-gone gone &&
	git worktree remove to-be-gone &&
	test_path_is_missing .git/worktrees/to-be-gone

Preparing worktree (new branch 'to-be-gone')
HEAD is now at 2519212 init
ok 25 - remove missing worktree

expecting success of 2403.26 'NOT remove missing-but-locked worktree': 
	git worktree add gone-but-locked &&
	git worktree lock gone-but-locked &&
	test -d .git/worktrees/gone-but-locked &&
	mv gone-but-locked really-gone-now &&
	test_must_fail git worktree remove gone-but-locked &&
	test_path_is_dir .git/worktrees/gone-but-locked

Preparing worktree (new branch 'gone-but-locked')
HEAD is now at 2519212 init
fatal: cannot remove a locked working tree;
use 'remove -f -f' to override or unlock first
ok 26 - NOT remove missing-but-locked worktree

expecting success of 2403.27 'proper error when worktree not found': 
	for i in noodle noodle/bork
	do
		test_must_fail git worktree lock $i 2>err &&
		test_i18ngrep "not a working tree" err || return 1
	done

fatal: 'noodle' is not a working tree
fatal: 'noodle/bork' is not a working tree
ok 27 - proper error when worktree not found

expecting success of 2403.28 'remove locked worktree (force)': 
	git worktree add --detach gumby &&
	test_when_finished "git worktree remove gumby || :" &&
	git worktree lock gumby &&
	test_when_finished "git worktree unlock gumby || :" &&
	test_must_fail git worktree remove gumby &&
	test_must_fail git worktree remove --force gumby &&
	git worktree remove --force --force gumby

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: cannot remove a locked working tree;
use 'remove -f -f' to override or unlock first
fatal: cannot remove a locked working tree;
use 'remove -f -f' to override or unlock first
fatal: 'gumby' is not a working tree
fatal: 'gumby' is not a working tree
ok 28 - remove locked worktree (force)

expecting success of 2403.29 'remove cleans up .git/worktrees when empty': 
	git init moog &&
	(
		cd moog &&
		test_commit bim &&
		git worktree add --detach goom &&
		test_path_exists .git/worktrees &&
		git worktree remove goom &&
		test_path_is_missing .git/worktrees
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/moog/.git/
[master (root-commit) 89d547b] bim
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bim.t
Preparing worktree (detached HEAD 89d547b)
HEAD is now at 89d547b bim
ok 29 - remove cleans up .git/worktrees when empty

expecting success of 2403.30 'remove a repo with uninitialized submodule': 
	test_config_global protocol.file.allow always &&
	(
		cd withsub &&
		git worktree add to-remove HEAD &&
		git worktree remove to-remove
	)

Preparing worktree (detached HEAD 50bdabe)
HEAD is now at 50bdabe withsub
ok 30 - remove a repo with uninitialized submodule

expecting success of 2403.31 'not remove a repo with initialized submodule': 
	test_config_global protocol.file.allow always &&
	(
		cd withsub &&
		git worktree add to-remove HEAD &&
		git -C to-remove submodule update &&
		test_must_fail git worktree remove to-remove
	)

Preparing worktree (detached HEAD 50bdabe)
HEAD is now at 50bdabe withsub
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2403-worktree-move/withsub/to-remove/sub'...
done.
Submodule path 'sub': checked out '5e3001300c8a533bee3e24efd70fbfae3dfa27e3'
fatal: working trees containing submodules cannot be moved or removed
ok 31 - not remove a repo with initialized submodule

# passed all 31 test(s)
1..31
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2404-worktree-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2404-worktree-config/.git/
expecting success of 2404.1 'setup': 
	test_commit start

[master (root-commit) bb4ab09] start
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 start.t
ok 1 - setup

expecting success of 2404.2 'config --worktree in single worktree': 
	git config --worktree foo.bar true &&
	test_cmp_config true foo.bar

ok 2 - config --worktree in single worktree

expecting success of 2404.3 'add worktrees': 
	git worktree add wt1 &&
	git worktree add wt2

Preparing worktree (new branch 'wt1')
HEAD is now at bb4ab09 start
Preparing worktree (new branch 'wt2')
HEAD is now at bb4ab09 start
ok 3 - add worktrees

expecting success of 2404.4 'config --worktree without extension': 
	test_must_fail git config --worktree foo.bar false

fatal: --worktree cannot be used with multiple working trees unless the config
extension worktreeConfig is enabled. Please read "CONFIGURATION FILE"
section in "git help worktree" for details
ok 4 - config --worktree without extension

expecting success of 2404.5 'enable worktreeConfig extension': 
	git config core.repositoryformatversion 1 &&
	git config extensions.worktreeConfig true &&
	test_cmp_config true extensions.worktreeConfig &&
	test_cmp_config 1 core.repositoryformatversion

ok 5 - enable worktreeConfig extension

expecting success of 2404.6 'config is shared as before': 
	git config this.is shared &&
	test_cmp_config shared this.is &&
	test_cmp_config -C wt1 shared this.is &&
	test_cmp_config -C wt2 shared this.is

ok 6 - config is shared as before

expecting success of 2404.7 'config is shared (set from another worktree)': 
	git -C wt1 config that.is also-shared &&
	test_cmp_config also-shared that.is &&
	test_cmp_config -C wt1 also-shared that.is &&
	test_cmp_config -C wt2 also-shared that.is

ok 7 - config is shared (set from another worktree)

expecting success of 2404.8 'config private to main worktree': 
	git config --worktree this.is for-main &&
	test_cmp_config for-main this.is &&
	test_cmp_config -C wt1 shared this.is &&
	test_cmp_config -C wt2 shared this.is

ok 8 - config private to main worktree

expecting success of 2404.9 'config private to linked worktree': 
	git -C wt1 config --worktree this.is for-wt1 &&
	test_cmp_config for-main this.is &&
	test_cmp_config -C wt1 for-wt1 this.is &&
	test_cmp_config -C wt2 shared this.is

ok 9 - config private to linked worktree

expecting success of 2404.10 'core.bare no longer for main only': 
	test_config core.bare true &&
	test "$(git rev-parse --is-bare-repository)" = true &&
	test "$(git -C wt1 rev-parse --is-bare-repository)" = true &&
	test "$(git -C wt2 rev-parse --is-bare-repository)" = true

ok 10 - core.bare no longer for main only

expecting success of 2404.11 'per-worktree core.bare is picked up': 
	git -C wt1 config --worktree core.bare true &&
	test "$(git rev-parse --is-bare-repository)" = false &&
	test "$(git -C wt1 rev-parse --is-bare-repository)" = true &&
	test "$(git -C wt2 rev-parse --is-bare-repository)" = false

ok 11 - per-worktree core.bare is picked up

expecting success of 2404.12 'config.worktree no longer read without extension': 
	git config --unset extensions.worktreeConfig &&
	test_cmp_config shared this.is &&
	test_cmp_config -C wt1 shared this.is &&
	test_cmp_config -C wt2 shared this.is

ok 12 - config.worktree no longer read without extension

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2400-worktree-add.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/.git/
expecting success of 2400.1 'setup': 
	test_commit init

[main (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
ok 1 - setup

expecting success of 2400.2 '"add" an existing worktree': 
	mkdir -p existing/subtree &&
	test_must_fail git worktree add --detach existing main

Preparing worktree (detached HEAD 2519212)
fatal: 'existing' already exists
ok 2 - "add" an existing worktree

expecting success of 2400.3 '"add" an existing empty worktree': 
	mkdir existing_empty &&
	git worktree add --detach existing_empty main

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 3 - "add" an existing empty worktree

expecting success of 2400.4 '"add" using shorthand - fails when no previous branch': 
	test_must_fail git worktree add existing_short -

fatal: invalid reference: @{-1}
ok 4 - "add" using shorthand - fails when no previous branch

expecting success of 2400.5 '"add" using - shorthand': 
	git checkout -b newbranch &&
	echo hello >myworld &&
	git add myworld &&
	git commit -m myworld &&
	git checkout main &&
	git worktree add short-hand - &&
	echo refs/heads/newbranch >expect &&
	git -C short-hand rev-parse --symbolic-full-name HEAD >actual &&
	test_cmp expect actual

Switched to a new branch 'newbranch'
[newbranch 5ae2ce4] myworld
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 myworld
Switched to branch 'main'
Preparing worktree (checking out '@{-1}')
HEAD is now at 5ae2ce4 myworld
ok 5 - "add" using - shorthand

expecting success of 2400.6 '"add" refuses to checkout locked branch': 
	test_must_fail git worktree add zere main &&
	! test -d zere &&
	! test -d .git/worktrees/zere

Preparing worktree (checking out 'main')
fatal: 'main' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add'
ok 6 - "add" refuses to checkout locked branch

expecting success of 2400.7 'checking out paths not complaining about linked checkouts': 
	(
	cd existing_empty &&
	echo dirty >>init.t &&
	git checkout main -- init.t
	)

ok 7 - checking out paths not complaining about linked checkouts

expecting success of 2400.8 '"add" worktree': 
	git rev-parse HEAD >expect &&
	git worktree add --detach here main &&
	(
		cd here &&
		test_cmp ../init.t init.t &&
		test_must_fail git symbolic-ref HEAD &&
		git rev-parse HEAD >actual &&
		test_cmp ../expect actual &&
		git fsck
	)

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
fatal: ref HEAD is not a symbolic ref
ok 8 - "add" worktree

expecting success of 2400.9 '"add" worktree with lock': 
	git worktree add --detach --lock here-with-lock main &&
	test_when_finished "git worktree unlock here-with-lock || :" &&
	test -f .git/worktrees/here-with-lock/locked

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 9 - "add" worktree with lock

expecting success of 2400.10 '"add" worktree with lock and reason': 
	lock_reason="why not" &&
	git worktree add --detach --lock --reason "$lock_reason" here-with-lock-reason main &&
	test_when_finished "git worktree unlock here-with-lock-reason || :" &&
	test -f .git/worktrees/here-with-lock-reason/locked &&
	echo "$lock_reason" >expect &&
	test_cmp expect .git/worktrees/here-with-lock-reason/locked

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 10 - "add" worktree with lock and reason

expecting success of 2400.11 '"add" worktree with reason but no lock': 
	test_must_fail git worktree add --detach --reason "why not" here-with-reason-only main &&
	test_path_is_missing .git/worktrees/here-with-reason-only/locked

fatal: the option '--reason' requires '--lock'
ok 11 - "add" worktree with reason but no lock

expecting success of 2400.12 '"add" worktree from a subdir': 
	(
		mkdir sub &&
		cd sub &&
		git worktree add --detach here main &&
		cd here &&
		test_cmp ../../init.t init.t
	)

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 12 - "add" worktree from a subdir

expecting success of 2400.13 '"add" from a linked checkout': 
	(
		cd here &&
		git worktree add --detach nested-here main &&
		cd nested-here &&
		git fsck
	)

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 13 - "add" from a linked checkout

expecting success of 2400.14 '"add" worktree creating new branch': 
	git worktree add -b newmain there main &&
	(
		cd there &&
		test_cmp ../init.t init.t &&
		git symbolic-ref HEAD >actual &&
		echo refs/heads/newmain >expect &&
		test_cmp expect actual &&
		git fsck
	)

Preparing worktree (new branch 'newmain')
HEAD is now at 2519212 init
ok 14 - "add" worktree creating new branch

expecting success of 2400.15 'die the same branch is already checked out': 
	(
		cd here &&
		test_must_fail git checkout newmain
	)

fatal: 'newmain' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/there'
ok 15 - die the same branch is already checked out

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 2400.16 'die the same branch is already checked out (symlink)': 
	head=$(git -C there rev-parse --git-path HEAD) &&
	ref=$(git -C there symbolic-ref HEAD) &&
	rm "$head" &&
	ln -s "$ref" "$head" &&
	test_must_fail git -C here checkout newmain

fatal: 'newmain' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/there'
ok 16 - die the same branch is already checked out (symlink)

expecting success of 2400.17 'not die the same branch is already checked out': 
	(
		cd here &&
		git worktree add --force anothernewmain newmain
	)

Preparing worktree (checking out 'newmain')
HEAD is now at 2519212 init
ok 17 - not die the same branch is already checked out

expecting success of 2400.18 'not die on re-checking out current branch': 
	(
		cd there &&
		git checkout newmain
	)

Already on 'newmain'
ok 18 - not die on re-checking out current branch

expecting success of 2400.19 '"add" from a bare repo': 
	(
		git clone --bare . bare &&
		cd bare &&
		git worktree add -b bare-main ../there2 main
	)

Cloning into bare repository 'bare'...
done.
Preparing worktree (new branch 'bare-main')
HEAD is now at 2519212 init
ok 19 - "add" from a bare repo

expecting success of 2400.20 'checkout from a bare repo without "add"': 
	(
		cd bare &&
		test_must_fail git checkout main
	)

fatal: this operation must be run in a work tree
ok 20 - checkout from a bare repo without "add"

expecting success of 2400.21 '"add" default branch of a bare repo': 
	(
		git clone --bare . bare2 &&
		cd bare2 &&
		git worktree add ../there3 main &&
		cd ../there3 &&
		# Simple check that a Git command does not
		# immediately fail with the current setup
		git status
	) &&
	cat >expect <<-EOF &&
	init.t
	EOF
	ls there3 >actual &&
	test_cmp expect actual

Cloning into bare repository 'bare2'...
done.
Preparing worktree (checking out 'main')
HEAD is now at 2519212 init
On branch main
nothing to commit, working tree clean
ok 21 - "add" default branch of a bare repo

expecting success of 2400.22 '"add" to bare repo with worktree config': 
	(
		git clone --bare . bare3 &&
		cd bare3 &&
		git config extensions.worktreeconfig true &&

		# Add config values that are erroneous to have in
		# a config.worktree file outside of the main
		# working tree, to check that Git filters them out
		# when copying config during "git worktree add".
		git config --worktree core.bare true &&
		git config --worktree core.worktree "$(pwd)" &&

		# We want to check that bogus.key is copied
		git config --worktree bogus.key value &&
		git config --unset core.bare &&
		git worktree add ../there4 main &&
		cd ../there4 &&

		# Simple check that a Git command does not
		# immediately fail with the current setup
		git status &&
		git worktree add --detach ../there5 &&
		cd ../there5 &&
		git status
	) &&

	# the worktree has the arbitrary value copied.
	test_cmp_config -C there4 value bogus.key &&
	test_cmp_config -C there5 value bogus.key &&

	# however, core.bare and core.worktree were removed.
	test_must_fail git -C there4 config core.bare &&
	test_must_fail git -C there4 config core.worktree &&

	cat >expect <<-EOF &&
	init.t
	EOF

	ls there4 >actual &&
	test_cmp expect actual &&
	ls there5 >actual &&
	test_cmp expect actual

Cloning into bare repository 'bare3'...
done.
warning: core.bare and core.worktree do not make sense
warning: core.bare and core.worktree do not make sense
warning: core.bare and core.worktree do not make sense
Preparing worktree (checking out 'main')
HEAD is now at 2519212 init
On branch main
nothing to commit, working tree clean
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Not currently on any branch.
nothing to commit, working tree clean
ok 22 - "add" to bare repo with worktree config

expecting success of 2400.23 'checkout with grafts': 
	test_when_finished rm .git/info/grafts &&
	test_commit abc &&
	SHA1=$(git rev-parse HEAD) &&
	test_commit def &&
	test_commit xyz &&
	mkdir .git/info &&
	echo "$(git rev-parse HEAD) $SHA1" >.git/info/grafts &&
	cat >expected <<-\EOF &&
	xyz
	abc
	EOF
	git log --format=%s -2 >actual &&
	test_cmp expected actual &&
	git worktree add --detach grafted main &&
	git --git-dir=grafted/.git log --format=%s -2 >actual &&
	test_cmp expected actual

[main 6d278e0] abc
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abc.t
[main 3c13a14] def
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 def.t
[main a51b5be] xyz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 xyz.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Preparing worktree (detached HEAD a51b5be)
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
HEAD is now at a51b5be xyz
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 23 - checkout with grafts

expecting success of 2400.24 '"add" from relative HEAD': 
	test_commit a &&
	test_commit b &&
	test_commit c &&
	git rev-parse HEAD~1 >expected &&
	git worktree add relhead HEAD~1 &&
	git -C relhead rev-parse HEAD >actual &&
	test_cmp expected actual

[main e9a6308] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
[main 15d3bfc] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[main 179a9e0] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Preparing worktree (detached HEAD 15d3bfc)
HEAD is now at 15d3bfc b
ok 24 - "add" from relative HEAD

expecting success of 2400.25 '"add -b" with <branch> omitted': 
	git worktree add -b burble flornk &&
	test_cmp_rev HEAD burble

Preparing worktree (new branch 'burble')
HEAD is now at 179a9e0 c
ok 25 - "add -b" with <branch> omitted

expecting success of 2400.26 '"add --detach" with <branch> omitted': 
	git worktree add --detach fishhook &&
	git rev-parse HEAD >expected &&
	git -C fishhook rev-parse HEAD >actual &&
	test_cmp expected actual &&
	test_must_fail git -C fishhook symbolic-ref HEAD

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
fatal: ref HEAD is not a symbolic ref
ok 26 - "add --detach" with <branch> omitted

expecting success of 2400.27 '"add" with <branch> omitted': 
	git worktree add wiffle/bat &&
	test_cmp_rev HEAD bat

Preparing worktree (new branch 'bat')
HEAD is now at 179a9e0 c
ok 27 - "add" with <branch> omitted

expecting success of 2400.28 '"add" checks out existing branch of dwimd name': 
	git branch dwim HEAD~1 &&
	git worktree add dwim &&
	test_cmp_rev HEAD~1 dwim &&
	(
		cd dwim &&
		test_cmp_rev HEAD dwim
	)

Preparing worktree (checking out 'dwim')
HEAD is now at 15d3bfc b
ok 28 - "add" checks out existing branch of dwimd name

expecting success of 2400.29 '"add <path>" dwim fails with checked out branch': 
	git checkout -b test-branch &&
	test_must_fail git worktree add test-branch &&
	test_path_is_missing test-branch

Switched to a new branch 'test-branch'
Preparing worktree (checking out 'test-branch')
fatal: 'test-branch' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add'
ok 29 - "add <path>" dwim fails with checked out branch

expecting success of 2400.30 '"add --force" with existing dwimd name doesnt die': 
	git checkout test-branch &&
	git worktree add --force test-branch

Already on 'test-branch'
Preparing worktree (checking out 'test-branch')
HEAD is now at 179a9e0 c
ok 30 - "add --force" with existing dwimd name doesnt die

expecting success of 2400.31 '"add" no auto-vivify with --detach and <branch> omitted': 
	git worktree add --detach mish/mash &&
	test_must_fail git rev-parse mash -- &&
	test_must_fail git -C mish/mash symbolic-ref HEAD

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
fatal: bad revision 'mash'
fatal: ref HEAD is not a symbolic ref
ok 31 - "add" no auto-vivify with --detach and <branch> omitted

expecting success of 2400.32 '"add" -b/-B mutually exclusive': 
	test_must_fail git worktree add -b poodle -B poodle bamboo main

fatal: options '-b', '-B', and '--detach' cannot be used together
ok 32 - "add" -b/-B mutually exclusive

expecting success of 2400.33 '"add" -b/--detach mutually exclusive': 
	test_must_fail git worktree add -b poodle --detach bamboo main

fatal: options '-b', '-B', and '--detach' cannot be used together
ok 33 - "add" -b/--detach mutually exclusive

expecting success of 2400.34 '"add" -B/--detach mutually exclusive': 
	test_must_fail git worktree add -B poodle --detach bamboo main

fatal: options '-b', '-B', and '--detach' cannot be used together
ok 34 - "add" -B/--detach mutually exclusive

expecting success of 2400.35 '"add -B" fails if the branch is checked out': 
	git rev-parse newmain >before &&
	test_must_fail git worktree add -B newmain bamboo main &&
	git rev-parse newmain >after &&
	test_cmp before after

fatal: 'newmain' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/there'
ok 35 - "add -B" fails if the branch is checked out

expecting success of 2400.36 'add -B': 
	git worktree add -B poodle bamboo2 main^ &&
	git -C bamboo2 symbolic-ref HEAD >actual &&
	echo refs/heads/poodle >expected &&
	test_cmp expected actual &&
	test_cmp_rev main^ poodle

Preparing worktree (new branch 'poodle')
HEAD is now at 15d3bfc b
ok 36 - add -B

expecting success of 2400.37 'add --quiet': 
	git worktree add --quiet another-worktree main 2>actual &&
	test_must_be_empty actual

ok 37 - add --quiet

expecting success of 2400.38 'local clone from linked checkout': 
	git clone --local here here-clone &&
	( cd here-clone && git fsck )

Cloning into 'here-clone'...
done.
ok 38 - local clone from linked checkout

expecting success of 2400.39 'local clone --shared from linked checkout': 
	git -C bare worktree add --detach ../baretree &&
	git clone --local --shared baretree bare-clone &&
	grep /bare/ bare-clone/.git/objects/info/alternates

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Cloning into 'bare-clone'...
done.
/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/bare/objects
ok 39 - local clone --shared from linked checkout

expecting success of 2400.40 '"add" worktree with --no-checkout': 
	git worktree add --no-checkout -b swamp swamp &&
	! test -e swamp/init.t &&
	git -C swamp reset --hard &&
	test_cmp init.t swamp/init.t

Preparing worktree (new branch 'swamp')
HEAD is now at 179a9e0 c
ok 40 - "add" worktree with --no-checkout

expecting success of 2400.41 '"add" worktree with --checkout': 
	git worktree add --checkout -b swmap2 swamp2 &&
	test_cmp init.t swamp2/init.t

Preparing worktree (new branch 'swmap2')
HEAD is now at 179a9e0 c
ok 41 - "add" worktree with --checkout

expecting success of 2400.42 'put a worktree under rebase': 
	git worktree add under-rebase &&
	(
		cd under-rebase &&
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i HEAD^ &&
		git worktree list | grep "under-rebase.*detached HEAD"
	)

Preparing worktree (new branch 'under-rebase')
HEAD is now at 179a9e0 c
rebase -i script before editing:
pick 179a9e0 c

rebase -i script after editing:
edit 179a9e0 c
Rebasing (1/1)

                                                                                
Stopped at 179a9e0...  c
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-rebase           179a9e0 (detached HEAD)
ok 42 - put a worktree under rebase

expecting success of 2400.43 'add a worktree, checking out a rebased branch': 
	test_must_fail git worktree add new-rebase under-rebase &&
	! test -d new-rebase

Preparing worktree (checking out 'under-rebase')
fatal: 'under-rebase' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-rebase'
ok 43 - add a worktree, checking out a rebased branch

expecting success of 2400.44 'checking out a rebased branch from another worktree': 
	git worktree add new-place &&
	test_must_fail git -C new-place checkout under-rebase

Preparing worktree (new branch 'new-place')
HEAD is now at 179a9e0 c
fatal: 'under-rebase' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-rebase'
ok 44 - checking out a rebased branch from another worktree

expecting success of 2400.45 'not allow to delete a branch under rebase': 
	(
		cd under-rebase &&
		test_must_fail git branch -D under-rebase
	)

error: Cannot delete branch 'under-rebase' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-rebase'
ok 45 - not allow to delete a branch under rebase

expecting success of 2400.46 'rename a branch under rebase not allowed': 
	test_must_fail git branch -M under-rebase rebase-with-new-name

fatal: Branch refs/heads/under-rebase is being rebased at /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-rebase
ok 46 - rename a branch under rebase not allowed

expecting success of 2400.47 'check out from current worktree branch ok': 
	(
		cd under-rebase &&
		git checkout under-rebase &&
		git checkout - &&
		git rebase --abort
	)

Switched to branch 'under-rebase'
Note: switching to '179a9e09a27c48c73ff2a192ec62ebcd60fedd6a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 179a9e0 c
ok 47 - check out from current worktree branch ok

expecting success of 2400.48 'checkout a branch under bisect': 
	git worktree add under-bisect &&
	(
		cd under-bisect &&
		git bisect start &&
		git bisect bad &&
		git bisect good HEAD~2 &&
		git worktree list | grep "under-bisect.*detached HEAD" &&
		test_must_fail git worktree add new-bisect under-bisect &&
		! test -d new-bisect
	)

Preparing worktree (new branch 'under-bisect')
HEAD is now at 179a9e0 c
status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[15d3bfcc767862b6abd36db671feb8356eb7d7d7] b
/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-bisect           15d3bfc (detached HEAD)
Preparing worktree (checking out 'under-bisect')
fatal: 'under-bisect' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-bisect'
ok 48 - checkout a branch under bisect

expecting success of 2400.49 'rename a branch under bisect not allowed': 
	test_must_fail git branch -M under-bisect bisect-with-new-name

fatal: Branch refs/heads/under-bisect is being bisected at /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/under-bisect
ok 49 - rename a branch under bisect not allowed

expecting success of 2400.50 '--track sets up tracking': 
	test_when_finished rm -rf track &&
	git worktree add --track -b track track main &&
	test_branch_upstream track . main

Preparing worktree (new branch 'track')
branch 'track' set up to track 'main'.
HEAD is now at 179a9e0 c
ok 50 - --track sets up tracking

expecting success of 2400.51 '--no-track avoids setting up tracking': 
	test_when_finished rm -rf repo_upstream repo_local foo &&
	setup_remote_repo repo_upstream repo_local &&
	(
		cd repo_local &&
		git worktree add --no-track -b foo ../foo repo_upstream/foo
	) &&
	(
		cd foo &&
		test_must_fail git config "branch.foo.remote" &&
		test_must_fail git config "branch.foo.merge" &&
		test_cmp_rev refs/remotes/repo_upstream/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_upstream/.git/
[main (root-commit) 135732a] repo_upstream_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_upstream_main.t
Switched to a new branch 'foo'
[foo 7502c9e] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_local/.git/
[main (root-commit) d4b0dca] repo_local_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_local_main.t
From ../repo_upstream
 * [new branch]      foo                -> repo_upstream/foo
 * [new branch]      main               -> repo_upstream/main
 * [new tag]         repo_upstream_main -> repo_upstream_main
 * [new tag]         upstream_foo       -> upstream_foo
Preparing worktree (new branch 'foo')
HEAD is now at 7502c9e upstream_foo
ok 51 - --no-track avoids setting up tracking

expecting success of 2400.52 '"add" <path> <non-existent-branch> fails': 
	test_must_fail git worktree add foo non-existent

fatal: invalid reference: non-existent
ok 52 - "add" <path> <non-existent-branch> fails

expecting success of 2400.53 '"add" <path> <branch> dwims': 
	test_when_finished rm -rf repo_upstream repo_dwim foo &&
	setup_remote_repo repo_upstream repo_dwim &&
	git init repo_dwim &&
	(
		cd repo_dwim &&
		git worktree add ../foo foo
	) &&
	(
		cd foo &&
		test_branch_upstream foo repo_upstream foo &&
		test_cmp_rev refs/remotes/repo_upstream/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_upstream/.git/
[main (root-commit) 135732a] repo_upstream_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_upstream_main.t
Switched to a new branch 'foo'
[foo 7502c9e] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_dwim/.git/
[main (root-commit) 9838263] repo_dwim_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_dwim_main.t
From ../repo_upstream
 * [new branch]      foo                -> repo_upstream/foo
 * [new branch]      main               -> repo_upstream/main
 * [new tag]         repo_upstream_main -> repo_upstream_main
 * [new tag]         upstream_foo       -> upstream_foo
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_dwim/.git/
Preparing worktree (new branch 'foo')
branch 'foo' set up to track 'repo_upstream/foo'.
HEAD is now at 7502c9e upstream_foo
ok 53 - "add" <path> <branch> dwims

expecting success of 2400.54 '"add" <path> <branch> dwims with checkout.defaultRemote': 
	test_when_finished rm -rf repo_upstream repo_dwim foo &&
	setup_remote_repo repo_upstream repo_dwim &&
	git init repo_dwim &&
	(
		cd repo_dwim &&
		git remote add repo_upstream2 ../repo_upstream &&
		git fetch repo_upstream2 &&
		test_must_fail git worktree add ../foo foo &&
		git -c checkout.defaultRemote=repo_upstream worktree add ../foo foo &&
		git status -uno --porcelain >status.actual &&
		test_must_be_empty status.actual
	) &&
	(
		cd foo &&
		test_branch_upstream foo repo_upstream foo &&
		test_cmp_rev refs/remotes/repo_upstream/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_upstream/.git/
[main (root-commit) 135732a] repo_upstream_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_upstream_main.t
Switched to a new branch 'foo'
[foo 7502c9e] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_dwim/.git/
[main (root-commit) 9838263] repo_dwim_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_dwim_main.t
From ../repo_upstream
 * [new branch]      foo                -> repo_upstream/foo
 * [new branch]      main               -> repo_upstream/main
 * [new tag]         repo_upstream_main -> repo_upstream_main
 * [new tag]         upstream_foo       -> upstream_foo
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_dwim/.git/
From ../repo_upstream
 * [new branch]      foo        -> repo_upstream2/foo
 * [new branch]      main       -> repo_upstream2/main
fatal: invalid reference: foo
Preparing worktree (new branch 'foo')
branch 'foo' set up to track 'repo_upstream/foo'.
HEAD is now at 7502c9e upstream_foo
ok 54 - "add" <path> <branch> dwims with checkout.defaultRemote

expecting success of 2400.55 'git worktree add does not match remote': 
	test_when_finished rm -rf repo_a repo_b foo &&
	setup_remote_repo repo_a repo_b &&
	(
		cd repo_b &&
		git worktree add ../foo
	) &&
	(
		cd foo &&
		test_must_fail git config "branch.foo.remote" &&
		test_must_fail git config "branch.foo.merge" &&
		test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_a/.git/
[main (root-commit) dcba593] repo_a_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_a_main.t
Switched to a new branch 'foo'
[foo 9855f4b] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_b/.git/
[main (root-commit) 49eaa9c] repo_b_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_b_main.t
From ../repo_a
 * [new branch]      foo          -> repo_a/foo
 * [new branch]      main         -> repo_a/main
 * [new tag]         repo_a_main  -> repo_a_main
 * [new tag]         upstream_foo -> upstream_foo
Preparing worktree (new branch 'foo')
HEAD is now at 49eaa9c repo_b_main
ok 55 - git worktree add does not match remote

expecting success of 2400.56 'git worktree add --guess-remote sets up tracking': 
	test_when_finished rm -rf repo_a repo_b foo &&
	setup_remote_repo repo_a repo_b &&
	(
		cd repo_b &&
		git worktree add --guess-remote ../foo
	) &&
	(
		cd foo &&
		test_branch_upstream foo repo_a foo &&
		test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_a/.git/
[main (root-commit) dcba593] repo_a_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_a_main.t
Switched to a new branch 'foo'
[foo 9855f4b] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_b/.git/
[main (root-commit) 49eaa9c] repo_b_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_b_main.t
From ../repo_a
 * [new branch]      foo          -> repo_a/foo
 * [new branch]      main         -> repo_a/main
 * [new tag]         repo_a_main  -> repo_a_main
 * [new tag]         upstream_foo -> upstream_foo
Preparing worktree (new branch 'foo')
branch 'foo' set up to track 'repo_a/foo'.
HEAD is now at 9855f4b upstream_foo
ok 56 - git worktree add --guess-remote sets up tracking

expecting success of 2400.57 'git worktree add with worktree.guessRemote sets up tracking': 
	test_when_finished rm -rf repo_a repo_b foo &&
	setup_remote_repo repo_a repo_b &&
	(
		cd repo_b &&
		git config worktree.guessRemote true &&
		git worktree add ../foo
	) &&
	(
		cd foo &&
		test_branch_upstream foo repo_a foo &&
		test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_a/.git/
[main (root-commit) dcba593] repo_a_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_a_main.t
Switched to a new branch 'foo'
[foo 9855f4b] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_b/.git/
[main (root-commit) 49eaa9c] repo_b_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_b_main.t
From ../repo_a
 * [new branch]      foo          -> repo_a/foo
 * [new branch]      main         -> repo_a/main
 * [new tag]         repo_a_main  -> repo_a_main
 * [new tag]         upstream_foo -> upstream_foo
Preparing worktree (new branch 'foo')
branch 'foo' set up to track 'repo_a/foo'.
HEAD is now at 9855f4b upstream_foo
ok 57 - git worktree add with worktree.guessRemote sets up tracking

expecting success of 2400.58 'git worktree --no-guess-remote option overrides config': 
	test_when_finished rm -rf repo_a repo_b foo &&
	setup_remote_repo repo_a repo_b &&
	(
		cd repo_b &&
		git config worktree.guessRemote true &&
		git worktree add --no-guess-remote ../foo
	) &&
	(
		cd foo &&
		test_must_fail git config "branch.foo.remote" &&
		test_must_fail git config "branch.foo.merge" &&
		test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_a/.git/
[main (root-commit) dcba593] repo_a_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_a_main.t
Switched to a new branch 'foo'
[foo 9855f4b] upstream_foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/repo_b/.git/
[main (root-commit) 49eaa9c] repo_b_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repo_b_main.t
From ../repo_a
 * [new branch]      foo          -> repo_a/foo
 * [new branch]      main         -> repo_a/main
 * [new tag]         repo_a_main  -> repo_a_main
 * [new tag]         upstream_foo -> upstream_foo
Preparing worktree (new branch 'foo')
HEAD is now at 49eaa9c repo_b_main
ok 58 - git worktree --no-guess-remote option overrides config

expecting success of 2400.59 '"add" invokes post-checkout hook (branch)': 
	post_checkout_hook &&
	{
		echo $ZERO_OID $(git rev-parse HEAD) 1 &&
		echo $(pwd)/.git/worktrees/gumby &&
		echo $(pwd)/gumby
	} >hook.expect &&
	git worktree add gumby &&
	test_cmp hook.expect gumby/hook.actual

Preparing worktree (new branch 'gumby')
HEAD is now at 179a9e0 c
ok 59 - "add" invokes post-checkout hook (branch)

expecting success of 2400.60 '"add" invokes post-checkout hook (detached)': 
	post_checkout_hook &&
	{
		echo $ZERO_OID $(git rev-parse HEAD) 1 &&
		echo $(pwd)/.git/worktrees/grumpy &&
		echo $(pwd)/grumpy
	} >hook.expect &&
	git worktree add --detach grumpy &&
	test_cmp hook.expect grumpy/hook.actual

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 60 - "add" invokes post-checkout hook (detached)

expecting success of 2400.61 '"add --no-checkout" suppresses post-checkout hook': 
	post_checkout_hook &&
	rm -f hook.actual &&
	git worktree add --no-checkout gloopy &&
	test_path_is_missing gloopy/hook.actual

Preparing worktree (new branch 'gloopy')
ok 61 - "add --no-checkout" suppresses post-checkout hook

expecting success of 2400.62 '"add" in other worktree invokes post-checkout hook': 
	post_checkout_hook &&
	{
		echo $ZERO_OID $(git rev-parse HEAD) 1 &&
		echo $(pwd)/.git/worktrees/guppy &&
		echo $(pwd)/guppy
	} >hook.expect &&
	git -C gloopy worktree add --detach ../guppy &&
	test_cmp hook.expect guppy/hook.actual

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 62 - "add" in other worktree invokes post-checkout hook

expecting success of 2400.63 '"add" in bare repo invokes post-checkout hook': 
	rm -rf bare &&
	git clone --bare . bare &&
	{
		echo $ZERO_OID $(git --git-dir=bare rev-parse HEAD) 1 &&
		echo $(pwd)/bare/worktrees/goozy &&
		echo $(pwd)/goozy
	} >hook.expect &&
	post_checkout_hook bare &&
	git -C bare worktree add --detach ../goozy &&
	test_cmp hook.expect goozy/hook.actual

Cloning into bare repository 'bare'...
done.
Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 63 - "add" in bare repo invokes post-checkout hook

expecting success of 2400.64 '"add" an existing but missing worktree': 
	git worktree add --detach pneu &&
	test_must_fail git worktree add --detach pneu &&
	rm -fr pneu &&
	test_must_fail git worktree add --detach pneu &&
	git worktree add --force --detach pneu

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
Preparing worktree (detached HEAD 179a9e0)
fatal: 'pneu' already exists
Preparing worktree (detached HEAD 179a9e0)
fatal: 'pneu' is a missing but already registered worktree;
use 'add -f' to override, or 'prune' or 'remove' to clear
Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 64 - "add" an existing but missing worktree

expecting success of 2400.65 '"add" an existing locked but missing worktree': 
	git worktree add --detach gnoo &&
	git worktree lock gnoo &&
	test_when_finished "git worktree unlock gnoo || :" &&
	rm -fr gnoo &&
	test_must_fail git worktree add --detach gnoo &&
	test_must_fail git worktree add --force --detach gnoo &&
	git worktree add --force --force --detach gnoo

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
Preparing worktree (detached HEAD 179a9e0)
fatal: 'gnoo' is a missing but locked worktree;
use 'add -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear
Preparing worktree (detached HEAD 179a9e0)
fatal: 'gnoo' is a missing but locked worktree;
use 'add -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear
Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
fatal: 'gnoo' is not locked
ok 65 - "add" an existing locked but missing worktree

expecting success of 2400.66 '"add" not tripped up by magic worktree matching"': 
	# if worktree "sub1/bar" exists, "git worktree add bar" in distinct
	# directory `sub2` should not mistakenly complain that `bar` is an
	# already-registered worktree
	mkdir sub1 sub2 &&
	git -C sub1 --git-dir=../.git worktree add --detach bozo &&
	git -C sub2 --git-dir=../.git worktree add --detach bozo

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 66 - "add" not tripped up by magic worktree matching"

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 2400.67 'sanitize generated worktree name': 
	git worktree add --detach ".  weird*..?.lock.lock" &&
	test -d .git/worktrees/---weird-.-

Preparing worktree (detached HEAD 179a9e0)
HEAD is now at 179a9e0 c
ok 67 - sanitize generated worktree name

expecting success of 2400.68 '"add" should not fail because of another bad worktree': 
	git init add-fail &&
	(
		cd add-fail &&
		test_commit first &&
		mkdir sub &&
		git worktree add sub/to-be-deleted &&
		rm -rf sub &&
		git worktree add second
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/add-fail/.git/
[main (root-commit) 264aca7] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Preparing worktree (new branch 'to-be-deleted')
HEAD is now at 264aca7 first
Preparing worktree (new branch 'second')
HEAD is now at 264aca7 first
ok 68 - "add" should not fail because of another bad worktree

expecting success of 2400.69 '"add" with uninitialized submodule, with submodule.recurse unset': 
	test_config_global protocol.file.allow always &&
	test_create_repo submodule &&
	test_commit -C submodule first &&
	test_create_repo project &&
	git -C project submodule add ../submodule &&
	git -C project add submodule &&
	test_tick &&
	git -C project commit -m add_sub &&
	git clone project project-clone &&
	git -C project-clone worktree add ../project-2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/submodule/.git/
[main (root-commit) 264aca7] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/project/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/project/submodule'...
done.
[main (root-commit) 57eb801] add_sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into 'project-clone'...
done.
Preparing worktree (new branch 'project-2')
HEAD is now at 57eb801 add_sub
ok 69 - "add" with uninitialized submodule, with submodule.recurse unset

expecting success of 2400.70 '"add" with uninitialized submodule, with submodule.recurse set': 
	git -C project-clone -c submodule.recurse worktree add ../project-3

Preparing worktree (new branch 'project-3')
HEAD is now at 57eb801 add_sub
ok 70 - "add" with uninitialized submodule, with submodule.recurse set

expecting success of 2400.71 '"add" with initialized submodule, with submodule.recurse unset': 
	test_config_global protocol.file.allow always &&
	git -C project-clone submodule update --init &&
	git -C project-clone worktree add ../project-4

Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2400-worktree-add/project-clone/submodule'...
done.
Submodule path 'submodule': checked out '264aca7c7b40ec0269cc15ea29c2bdbebfea2e3a'
Preparing worktree (new branch 'project-4')
HEAD is now at 57eb801 add_sub
ok 71 - "add" with initialized submodule, with submodule.recurse unset

expecting success of 2400.72 '"add" with initialized submodule, with submodule.recurse set': 
	git -C project-clone -c submodule.recurse worktree add ../project-5

Preparing worktree (new branch 'project-5')
HEAD is now at 57eb801 add_sub
ok 72 - "add" with initialized submodule, with submodule.recurse set

# passed all 72 test(s)
1..72
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2405-worktree-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/.git/
expecting success of 2405.1 'setup: create origin repos': 
	git config --global protocol.file.allow always &&
	git init origin/sub &&
	test_commit -C origin/sub file1 &&
	git init origin/main &&
	test_commit -C origin/main first &&
	git -C origin/main submodule add ../sub &&
	git -C origin/main commit -m "add sub" &&
	test_commit -C origin/sub "file1 updated" file1 file1updated file1updated &&
	git -C origin/main/sub pull &&
	git -C origin/main add sub &&
	git -C origin/main commit -m "sub updated"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/origin/sub/.git/
[main (root-commit) 69af168] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/origin/main/.git/
[main (root-commit) 1e96f59] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/origin/main/sub'...
done.
[main 322c452] add sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[main 7829796] file1 updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
From /<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/origin/sub
   69af168..7829796  main         -> origin/main
 * [new tag]         file1updated -> file1updated
Updating 69af168..7829796
Fast-forward
 file1 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[main d717f19] sub updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup: create origin repos

expecting success of 2405.2 'setup: clone superproject to create main worktree': 
	git clone --recursive "$base_path/origin/main" main

Cloning into 'main'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/origin/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/main/sub'...
done.
Submodule path 'sub': checked out '782979677c1932d3806e9adc80194f805c02f4f3'
ok 2 - setup: clone superproject to create main worktree

expecting success of 2405.3 'add superproject worktree': 
	git -C main worktree add "$base_path/worktree" "$rev1_hash_main"

Preparing worktree (detached HEAD 322c452)
HEAD is now at 322c452 add sub
ok 3 - add superproject worktree

checking known breakage of 2405.4 'submodule is checked out just after worktree add': 
	git -C worktree diff --submodule main"^!" >out &&
	grep "file1 updated" out

not ok 4 - submodule is checked out just after worktree add # TODO known breakage

expecting success of 2405.5 'add superproject worktree and initialize submodules': 
	git -C main worktree add "$base_path/worktree-submodule-update" "$rev1_hash_main" &&
	git -C worktree-submodule-update submodule update

Preparing worktree (detached HEAD 322c452)
HEAD is now at 322c452 add sub
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/worktree-submodule-update/sub'...
done.
Submodule path 'sub': checked out '69af1687b671131ed0cfa61b7fcdc907a4c21f2c'
ok 5 - add superproject worktree and initialize submodules

expecting success of 2405.6 'submodule is checked out just after submodule update in linked worktree': 
	git -C worktree-submodule-update diff --submodule main"^!" >out &&
	grep "file1 updated" out

  > file1 updated
ok 6 - submodule is checked out just after submodule update in linked worktree

expecting success of 2405.7 'add superproject worktree and manually add submodule worktree': 
	git -C main worktree add "$base_path/linked_submodule" "$rev1_hash_main" &&
	git -C main/sub worktree add "$base_path/linked_submodule/sub" "$rev1_hash_sub"

Preparing worktree (detached HEAD 322c452)
HEAD is now at 322c452 add sub
Preparing worktree (detached HEAD 69af168)
HEAD is now at 69af168 file1
ok 7 - add superproject worktree and manually add submodule worktree

expecting success of 2405.8 'submodule is checked out after manually adding submodule worktree': 
	git -C linked_submodule diff --submodule main"^!" >out &&
	grep "file1 updated" out

  > file1 updated
ok 8 - submodule is checked out after manually adding submodule worktree

expecting success of 2405.9 'checkout --recurse-submodules uses $GIT_DIR for submodules in a linked worktree': 
	git -C main worktree add "$base_path/checkout-recurse" --detach  &&
	git -C checkout-recurse submodule update --init &&
	echo "gitdir: ../../main/.git/worktrees/checkout-recurse/modules/sub" >expect-gitfile &&
	cat checkout-recurse/sub/.git >actual-gitfile &&
	test_cmp expect-gitfile actual-gitfile &&
	git -C main/sub rev-parse HEAD >expect-head-main &&
	git -C checkout-recurse checkout --recurse-submodules HEAD~1 &&
	cat checkout-recurse/sub/.git >actual-gitfile &&
	git -C main/sub rev-parse HEAD >actual-head-main &&
	test_cmp expect-gitfile actual-gitfile &&
	test_cmp expect-head-main actual-head-main

Preparing worktree (detached HEAD d717f19)
HEAD is now at d717f19 sub updated
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2405-worktree-submodule/checkout-recurse/sub'...
done.
Submodule path 'sub': checked out '782979677c1932d3806e9adc80194f805c02f4f3'
Previous HEAD position was d717f19 sub updated
HEAD is now at 322c452 add sub
ok 9 - checkout --recurse-submodules uses $GIT_DIR for submodules in a linked worktree

expecting success of 2405.10 'core.worktree is removed in $GIT_DIR/modules/<name>/config, not in $GIT_COMMON_DIR/modules/<name>/config': 
	echo "../../../sub" >expect-main &&
	git -C main/sub config --get core.worktree >actual-main &&
	test_cmp expect-main actual-main &&
	echo "../../../../../../checkout-recurse/sub" >expect-linked &&
	git -C checkout-recurse/sub config --get core.worktree >actual-linked &&
	test_cmp expect-linked actual-linked &&
	git -C checkout-recurse checkout --recurse-submodules first &&
	test_expect_code 1 git -C main/.git/worktrees/checkout-recurse/modules/sub config --get core.worktree >linked-config &&
	test_must_be_empty linked-config &&
	git -C main/sub config --get core.worktree >actual-main &&
	test_cmp expect-main actual-main

Previous HEAD position was 322c452 add sub
HEAD is now at 1e96f59 first
ok 10 - core.worktree is removed in $GIT_DIR/modules/<name>/config, not in $GIT_COMMON_DIR/modules/<name>/config

expecting success of 2405.11 'unsetting core.worktree does not prevent running commands directly against the submodule repository': 
	git -C main/.git/worktrees/checkout-recurse/modules/sub log

commit 69af1687b671131ed0cfa61b7fcdc907a4c21f2c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    file1
ok 11 - unsetting core.worktree does not prevent running commands directly against the submodule repository

# still have 1 known breakage(s)
# passed all remaining 10 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2406-worktree-repair.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/
expecting success of 2406.1 'setup': 
	test_commit init

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
ok 1 - setup

expecting success of 2406.2 'skip missing worktree': 
	test_when_finished "git worktree prune" &&
	git worktree add --detach missing &&
	rm -rf missing &&
	git worktree repair >out 2>err &&
	test_must_be_empty out &&
	test_must_be_empty err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 2 - skip missing worktree

expecting success of 2406.3 'worktree path not directory': 
	test_when_finished "git worktree prune" &&
	git worktree add --detach notdir &&
	rm -rf notdir &&
	>notdir &&
	test_must_fail git worktree repair >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep "not a directory" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
error: not a directory: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/notdir
ok 3 - worktree path not directory

expecting success of 2406.4 'don't clobber .git repo': 
	test_when_finished "rm -rf repo && git worktree prune" &&
	git worktree add --detach repo &&
	rm -rf repo &&
	test_create_repo repo &&
	test_must_fail git worktree repair >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep ".git is not a file" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/repo/.git/
error: .git is not a file: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/repo
ok 4 - don't clobber .git repo

expecting success of 2406.5 'repair missing .git file': 
	test_corrupt_gitfile "rm -f corrupt/.git" ".git file broken"

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 5 - repair missing .git file

expecting success of 2406.6 'repair bogus .git file': 
	test_corrupt_gitfile "echo \"gitdir: /nowhere\" >corrupt/.git" \
		".git file broken"

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 6 - repair bogus .git file

expecting success of 2406.7 'repair incorrect .git file': 
	test_when_finished "rm -rf other && git worktree prune" &&
	test_create_repo other &&
	other=$(git -C other rev-parse --absolute-git-dir) &&
	test_corrupt_gitfile "echo \"gitdir: $other\" >corrupt/.git" \
		".git file incorrect"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/other/.git/
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file incorrect: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 7 - repair incorrect .git file

expecting success of 2406.8 'repair .git file from main/.git': 
	test_corrupt_gitfile "rm -f corrupt/.git" ".git file broken" .git

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 8 - repair .git file from main/.git

expecting success of 2406.9 'repair .git file from linked worktree': 
	test_when_finished "rm -rf other && git worktree prune" &&
	git worktree add --detach other &&
	test_corrupt_gitfile "rm -f corrupt/.git" ".git file broken" other

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 9 - repair .git file from linked worktree

expecting success of 2406.10 'repair .git file from bare.git': 
	test_when_finished "rm -rf bare.git corrupt && git worktree prune" &&
	git clone --bare . bare.git &&
	git -C bare.git worktree add --detach ../corrupt &&
	git -C corrupt rev-parse --absolute-git-dir >expect &&
	rm -f corrupt/.git &&
	git -C bare.git worktree repair &&
	git -C corrupt rev-parse --absolute-git-dir >actual &&
	test_cmp expect actual

Cloning into bare repository 'bare.git'...
done.
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/corrupt
ok 10 - repair .git file from bare.git

expecting success of 2406.11 'invalid worktree path': 
	test_must_fail git worktree repair /notvalid >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep "not a valid path" err

error: not a valid path: /notvalid
ok 11 - invalid worktree path

expecting success of 2406.12 'repo not found; .git not file': 
	test_when_finished "rm -rf not-a-worktree" &&
	test_create_repo not-a-worktree &&
	test_must_fail git worktree repair not-a-worktree >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep ".git is not a file" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/not-a-worktree/.git/
error: unable to locate repository; .git is not a file: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/not-a-worktree/.git
ok 12 - repo not found; .git not file

expecting success of 2406.13 'repo not found; .git not referencing repo': 
	test_when_finished "rm -rf side not-a-repo && git worktree prune" &&
	git worktree add --detach side &&
	sed s,\.git/worktrees/side$,not-a-repo, side/.git >side/.newgit &&
	mv side/.newgit side/.git &&
	mkdir not-a-repo &&
	test_must_fail git worktree repair side 2>err &&
	test_i18ngrep ".git file does not reference a repository" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
error: unable to locate repository; .git file does not reference a repository: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/side/.git
ok 13 - repo not found; .git not referencing repo

expecting success of 2406.14 'repo not found; .git file broken': 
	test_when_finished "rm -rf orig moved && git worktree prune" &&
	git worktree add --detach orig &&
	echo /invalid >orig/.git &&
	mv orig moved &&
	test_must_fail git worktree repair moved >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep ".git file broken" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
error: unable to locate repository; .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/moved/.git
ok 14 - repo not found; .git file broken

expecting success of 2406.15 'repair broken gitdir': 
	test_when_finished "rm -rf orig moved && git worktree prune" &&
	git worktree add --detach orig &&
	sed s,orig/\.git$,moved/.git, .git/worktrees/orig/gitdir >expect &&
	rm .git/worktrees/orig/gitdir &&
	mv orig moved &&
	git worktree repair moved 2>err &&
	test_cmp expect .git/worktrees/orig/gitdir &&
	test_i18ngrep "gitdir unreadable" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: gitdir unreadable: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/worktrees/orig/gitdir
ok 15 - repair broken gitdir

expecting success of 2406.16 'repair incorrect gitdir': 
	test_when_finished "rm -rf orig moved && git worktree prune" &&
	git worktree add --detach orig &&
	sed s,orig/\.git$,moved/.git, .git/worktrees/orig/gitdir >expect &&
	mv orig moved &&
	git worktree repair moved 2>err &&
	test_cmp expect .git/worktrees/orig/gitdir &&
	test_i18ngrep "gitdir incorrect" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: gitdir incorrect: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/worktrees/orig/gitdir
ok 16 - repair incorrect gitdir

expecting success of 2406.17 'repair gitdir (implicit) from linked worktree': 
	test_when_finished "rm -rf orig moved && git worktree prune" &&
	git worktree add --detach orig &&
	sed s,orig/\.git$,moved/.git, .git/worktrees/orig/gitdir >expect &&
	mv orig moved &&
	git -C moved worktree repair 2>err &&
	test_cmp expect .git/worktrees/orig/gitdir &&
	test_i18ngrep "gitdir incorrect" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: gitdir incorrect: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/worktrees/orig/gitdir
ok 17 - repair gitdir (implicit) from linked worktree

expecting success of 2406.18 'unable to repair gitdir (implicit) from main worktree': 
	test_when_finished "rm -rf orig moved && git worktree prune" &&
	git worktree add --detach orig &&
	cat .git/worktrees/orig/gitdir >expect &&
	mv orig moved &&
	git worktree repair 2>err &&
	test_cmp expect .git/worktrees/orig/gitdir &&
	test_must_be_empty err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
ok 18 - unable to repair gitdir (implicit) from main worktree

expecting success of 2406.19 'repair multiple gitdir files': 
	test_when_finished "rm -rf orig1 orig2 moved1 moved2 &&
		git worktree prune" &&
	git worktree add --detach orig1 &&
	git worktree add --detach orig2 &&
	sed s,orig1/\.git$,moved1/.git, .git/worktrees/orig1/gitdir >expect1 &&
	sed s,orig2/\.git$,moved2/.git, .git/worktrees/orig2/gitdir >expect2 &&
	mv orig1 moved1 &&
	mv orig2 moved2 &&
	git worktree repair moved1 moved2 2>err &&
	test_cmp expect1 .git/worktrees/orig1/gitdir &&
	test_cmp expect2 .git/worktrees/orig2/gitdir &&
	test_i18ngrep "gitdir incorrect:.*orig1/gitdir$" err &&
	test_i18ngrep "gitdir incorrect:.*orig2/gitdir$" err

Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
Preparing worktree (detached HEAD 2519212)
HEAD is now at 2519212 init
repair: gitdir incorrect: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/worktrees/orig1/gitdir
repair: gitdir incorrect: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/.git/worktrees/orig2/gitdir
ok 19 - repair multiple gitdir files

expecting success of 2406.20 'repair moved main and linked worktrees': 
	test_when_finished "rm -rf main side mainmoved sidemoved" &&
	test_create_repo main &&
	test_commit -C main init &&
	git -C main worktree add --detach ../side &&
	sed "s,side/\.git$,sidemoved/.git," \
		main/.git/worktrees/side/gitdir >expect-gitdir &&
	sed "s,main/.git/worktrees/side$,mainmoved/.git/worktrees/side," \
		side/.git >expect-gitfile &&
	mv main mainmoved &&
	mv side sidemoved &&
	git -C mainmoved worktree repair ../sidemoved &&
	test_cmp expect-gitdir mainmoved/.git/worktrees/side/gitdir &&
	test_cmp expect-gitfile sidemoved/.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/main/.git/
[master (root-commit) f54694c] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Preparing worktree (detached HEAD f54694c)
HEAD is now at f54694c init
repair: gitdir incorrect: .git/worktrees/side/gitdir
repair: .git file broken: /<<PKGBUILDDIR>>/t/trash directory.t2406-worktree-repair/sidemoved
ok 20 - repair moved main and linked worktrees

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2407-worktree-heads.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/.git/
expecting success of 2407.1 'setup': 
	test_commit init &&

	for i in 1 2 3 4
	do
		git checkout -b conflict-$i &&
		echo "not I" >$i.t &&
		git add $i.t &&
		git commit -m "will conflict" &&

		git checkout - &&
		test_commit $i &&
		git branch wt-$i &&
		git branch fake-$i &&
		git worktree add wt-$i wt-$i || return 1
	done &&

	# Create a server that updates each branch by one commit
	git init server &&
	test_commit -C server initial &&
	git remote add server ./server &&
	for i in 1 2 3 4
	do
		git -C server checkout -b wt-$i &&
		test_commit -C server A-$i || return 1
	done &&
	for i in 1 2
	do
		git -C server checkout -b fake-$i &&
		test_commit -C server f-$i || return 1
	done

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Switched to a new branch 'conflict-1'
[conflict-1 0bd9076] will conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Switched to branch 'master'
[master dd232bf] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Preparing worktree (checking out 'wt-1')
HEAD is now at dd232bf 1
Switched to a new branch 'conflict-2'
[conflict-2 881ff7f] will conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Switched to branch 'master'
[master 8f55bc3] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Preparing worktree (checking out 'wt-2')
HEAD is now at 8f55bc3 2
Switched to a new branch 'conflict-3'
[conflict-3 016e7ca] will conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
Switched to branch 'master'
[master 4c93b0a] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
Preparing worktree (checking out 'wt-3')
HEAD is now at 4c93b0a 3
Switched to a new branch 'conflict-4'
[conflict-4 11365f4] will conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
Switched to branch 'master'
[master 3fbd4b0] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
Preparing worktree (checking out 'wt-4')
HEAD is now at 3fbd4b0 4
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/server/.git/
[master (root-commit) 31243c6] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'wt-1'
[wt-1 4e3ca6d] A-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A-1.t
Switched to a new branch 'wt-2'
[wt-2 3582f45] A-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A-2.t
Switched to a new branch 'wt-3'
[wt-3 b62f76d] A-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A-3.t
Switched to a new branch 'wt-4'
[wt-4 5e1557d] A-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A-4.t
Switched to a new branch 'fake-1'
[fake-1 ae0524d] f-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f-1.t
Switched to a new branch 'fake-2'
[fake-2 8b85f46] f-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f-2.t
ok 1 - setup

expecting success of 2407.2 'refuse to overwrite: checked out in worktree': 
	for i in 1 2 3 4
	do
		test_must_fail git branch -f wt-$i HEAD 2>err &&
		grep "cannot force update the branch" err &&

		test_must_fail git branch -D wt-$i 2>err &&
		grep "Cannot delete branch" err || return 1
	done

fatal: cannot force update the branch 'wt-1' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-1'
error: Cannot delete branch 'wt-1' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-1'
fatal: cannot force update the branch 'wt-2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-2'
error: Cannot delete branch 'wt-2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-2'
fatal: cannot force update the branch 'wt-3' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
error: Cannot delete branch 'wt-3' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
fatal: cannot force update the branch 'wt-4' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-4'
error: Cannot delete branch 'wt-4' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-4'
ok 2 - refuse to overwrite: checked out in worktree

expecting success of 2407.3 'refuse to overwrite: worktree in bisect': 
	test_when_finished git -C wt-4 bisect reset &&

	# Set up a bisect so HEAD no longer points to wt-4.
	git -C wt-4 bisect start &&
	git -C wt-4 bisect bad wt-4 &&
	git -C wt-4 bisect good wt-1 &&

	test_must_fail git branch -f wt-4 HEAD 2>err &&
	grep "cannot force update the branch 'wt-4' checked out at.*wt-4" err

status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[4c93b0a8594e03729f8d4346495db54cf8d767e9] 3
fatal: cannot force update the branch 'wt-4' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-4'
Previous HEAD position was 4c93b0a 3
Switched to branch 'wt-4'
ok 3 - refuse to overwrite: worktree in bisect

expecting success of 2407.4 'refuse to overwrite: worktree in rebase (apply)': 
	test_when_finished git -C wt-2 rebase --abort &&

	# This will fail part-way through due to a conflict.
	test_must_fail git -C wt-2 rebase --apply conflict-2 &&

	test_must_fail git branch -f wt-2 HEAD 2>err &&
	grep "cannot force update the branch 'wt-2' checked out at.*wt-2" err

First, rewinding head to replay your work on top of it...
Applying: 2
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
881ff7f will conflict
virtual 2
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in 2.t
Auto-merging 2.t
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 2
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
fatal: cannot force update the branch 'wt-2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-2'
ok 4 - refuse to overwrite: worktree in rebase (apply)

expecting success of 2407.5 'refuse to overwrite: worktree in rebase (merge)': 
	test_when_finished git -C wt-2 rebase --abort &&

	# This will fail part-way through due to a conflict.
	test_must_fail git -C wt-2 rebase conflict-2 &&

	test_must_fail git branch -f wt-2 HEAD 2>err &&
	grep "cannot force update the branch 'wt-2' checked out at.*wt-2" err

Rebasing (1/1)
Auto-merging 2.t
CONFLICT (add/add): Merge conflict in 2.t
error: could not apply 8f55bc3... 2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 8f55bc3... 2
fatal: cannot force update the branch 'wt-2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-2'
ok 5 - refuse to overwrite: worktree in rebase (merge)

expecting success of 2407.6 'refuse to overwrite: worktree in rebase with --update-refs': 
	test_when_finished git -C wt-3 rebase --abort &&

	git branch -f can-be-updated wt-3 &&
	test_must_fail git -C wt-3 rebase --update-refs conflict-3 &&

	for i in 3 4
	do
		test_must_fail git branch -f can-be-updated HEAD 2>err &&
		grep "cannot force update the branch 'can-be-updated' checked out at.*wt-3" err ||
			return 1
	done

Rebasing (1/4)
Auto-merging 3.t
CONFLICT (add/add): Merge conflict in 3.t
error: could not apply 4c93b0a... 3
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4c93b0a... 3
fatal: cannot force update the branch 'can-be-updated' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
fatal: cannot force update the branch 'can-be-updated' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
ok 6 - refuse to overwrite: worktree in rebase with --update-refs

expecting success of 2407.7 'refuse to fetch over ref: checked out': 
	test_must_fail git fetch server +refs/heads/wt-3:refs/heads/wt-3 2>err &&
	grep "refusing to fetch into branch 'refs/heads/wt-3'" err &&

	# General fetch into refs/heads/ will fail on first ref,
	# so use a generic error message check.
	test_must_fail git fetch server +refs/heads/*:refs/heads/* 2>err &&
	grep "refusing to fetch into branch" err

fatal: refusing to fetch into branch 'refs/heads/wt-3' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
fatal: refusing to fetch into branch 'refs/heads/master' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads'
ok 7 - refuse to fetch over ref: checked out

expecting success of 2407.8 'refuse to fetch over ref: worktree in bisect': 
	test_when_finished git -C wt-4 bisect reset &&

	# Set up a bisect so HEAD no longer points to wt-4.
	git -C wt-4 bisect start &&
	git -C wt-4 bisect bad wt-4 &&
	git -C wt-4 bisect good wt-1 &&

	test_must_fail git fetch server +refs/heads/wt-4:refs/heads/wt-4 2>err &&
	grep "refusing to fetch into branch" err

status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[4c93b0a8594e03729f8d4346495db54cf8d767e9] 3
fatal: refusing to fetch into branch 'refs/heads/wt-4' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-4'
Previous HEAD position was 4c93b0a 3
Switched to branch 'wt-4'
ok 8 - refuse to fetch over ref: worktree in bisect

expecting success of 2407.9 'refuse to fetch over ref: worktree in rebase': 
	test_when_finished git -C wt-3 rebase --abort &&

	# This will fail part-way through due to a conflict.
	test_must_fail git -C wt-3 rebase conflict-3 &&

	test_must_fail git fetch server +refs/heads/wt-3:refs/heads/wt-3 2>err &&
	grep "refusing to fetch into branch" err

Rebasing (1/1)
Auto-merging 3.t
CONFLICT (add/add): Merge conflict in 3.t
error: could not apply 4c93b0a... 3
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4c93b0a... 3
fatal: refusing to fetch into branch 'refs/heads/wt-3' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
ok 9 - refuse to fetch over ref: worktree in rebase

expecting success of 2407.10 'refuse to overwrite when in error states': 
	test_when_finished rm -rf .git/worktrees/wt-*/rebase-merge &&
	test_when_finished rm -rf .git/worktrees/wt-*/BISECT_* &&

	# Both branches are currently under rebase.
	mkdir -p .git/worktrees/wt-3/rebase-merge &&
	touch .git/worktrees/wt-3/rebase-merge/interactive &&
	echo refs/heads/fake-1 >.git/worktrees/wt-3/rebase-merge/head-name &&
	echo refs/heads/fake-2 >.git/worktrees/wt-3/rebase-merge/onto &&
	mkdir -p .git/worktrees/wt-4/rebase-merge &&
	touch .git/worktrees/wt-4/rebase-merge/interactive &&
	echo refs/heads/fake-2 >.git/worktrees/wt-4/rebase-merge/head-name &&
	echo refs/heads/fake-1 >.git/worktrees/wt-4/rebase-merge/onto &&

	# Both branches are currently under bisect.
	touch .git/worktrees/wt-4/BISECT_LOG &&
	echo refs/heads/fake-2 >.git/worktrees/wt-4/BISECT_START &&
	touch .git/worktrees/wt-1/BISECT_LOG &&
	echo refs/heads/fake-1 >.git/worktrees/wt-1/BISECT_START &&

	for i in 1 2
	do
		test_must_fail git branch -f fake-$i HEAD 2>err &&
		grep "cannot force update the branch 'fake-$i' checked out at" err ||
			return 1
	done

fatal: cannot force update the branch 'fake-1' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-3'
fatal: cannot force update the branch 'fake-2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t2407-worktree-heads/wt-4'
ok 10 - refuse to overwrite when in error states

expecting success of 2407.11 'refuse to overwrite during rebase with --update-refs': 
	git commit --fixup HEAD~2 --allow-empty &&
	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i --update-refs HEAD~3 >todo &&
		! grep "update-refs" todo
	) &&
	git branch -f allow-update HEAD~2 &&
	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i --update-refs HEAD~3 >todo &&
		grep "update-ref refs/heads/allow-update" todo
	)

[master 3e1ca9c] fixup! 2
 Author: A U Thor <author@example.com>
error: There was a problem with the editor '"$FAKE_EDITOR"'.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
update-ref refs/heads/allow-update
ok 11 - refuse to overwrite during rebase with --update-refs

expecting success of 2407.12 '$EDITOR and friends are unchanged': 
	test_editor_unchanged

ok 12 - $EDITOR and friends are unchanged

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2500-untracked-overwriting.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/.git/
expecting success of 2500.1 'reset --hard will nuke untracked files/dirs': 
	test_setup_reset hard &&
	(
		cd reset_hard &&
		git ls-tree -r stable &&
		git log --all --name-status --oneline &&
		git ls-tree -r work &&

		mkdir foo.t &&
		echo precious >foo.t/file &&
		echo foo >expect &&

		git reset --hard work &&

		# check that untracked directory foo.t/ was nuked
		test_path_is_file foo.t &&
		test_cmp expect foo.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/reset_hard/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Switched to branch 'work'
[work cb1b896] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Switched to branch 'stable'
100644 blob b1b716105590454bfc4c0247f193a04088f39c7f	init.t
cb1b896 foo
A	foo.t
2519212 init
A	init.t
100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99	foo.t
100644 blob b1b716105590454bfc4c0247f193a04088f39c7f	init.t
HEAD is now at cb1b896 foo
ok 1 - reset --hard will nuke untracked files/dirs

expecting success of 2500.2 'reset --merge will preserve untracked files/dirs': 
	test_setup_reset merge &&
	(
		cd reset_merge &&

		mkdir foo.t &&
		echo precious >foo.t/file &&
		cp foo.t/file expect &&

		test_must_fail git reset --merge work 2>error &&
		test_cmp expect foo.t/file &&
		grep "Updating .foo.t. would lose untracked files" error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/reset_merge/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Switched to branch 'work'
[work cb1b896] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Switched to branch 'stable'
error: Updating 'foo.t' would lose untracked files in it
ok 2 - reset --merge will preserve untracked files/dirs

expecting success of 2500.3 'reset --keep will preserve untracked files/dirs': 
	test_setup_reset keep &&
	(
		cd reset_keep &&

		mkdir foo.t &&
		echo precious >foo.t/file &&
		cp foo.t/file expect &&

		test_must_fail git reset --merge work 2>error &&
		test_cmp expect foo.t/file &&
		grep "Updating.*foo.t.*would lose untracked files" error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/reset_keep/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
Switched to branch 'work'
[work cb1b896] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Switched to branch 'stable'
error: Updating 'foo.t' would lose untracked files in it
ok 3 - reset --keep will preserve untracked files/dirs

expecting success of 2500.4 'checkout -m does not nuke untracked file': 
	test_setup_checkout_m &&
	(
		cd checkout &&

		# Tweak filler
		test_write_lines this file has some >filler &&
		# Make an untracked file, save its contents in "expect"
		echo precious >notes.txt &&
		cp notes.txt expect &&

		test_must_fail git checkout -m work &&
		test_cmp expect notes.txt
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/checkout/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 7d7f42a] filler
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 filler
Switched to a new branch 'work'
[work bac6a98] filler
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 notes.txt
Switched to branch 'stable'
error: Untracked working tree file 'notes.txt' would be overwritten by merge.
ok 4 - checkout -m does not nuke untracked file

expecting success of 2500.5 'git rebase --abort and untracked files': 
	test_setup_sequencing rebase_abort_and_untracked &&
	(
		cd sequencing_rebase_abort_and_untracked &&
		git checkout fooey &&
		test_must_fail git rebase simple &&

		cat init.t &&
		git rm init.t &&
		echo precious >init.t &&
		cp init.t expect &&
		git status --porcelain &&
		test_must_fail git rebase --abort &&
		test_cmp expect init.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_rebase_abort_and_untracked/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Switched to branch 'fooey'
Rebasing (1/1)
Auto-merging filler
CONFLICT (content): Merge conflict in filler
error: could not apply d39f842... changes
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply d39f842... changes
init
rm 'init.t'
UU filler
D  foo/bar/baz.t
D  init.t
?? expect
?? init.t
error: The following untracked working tree files would be overwritten by reset:
	init.t
Please move or remove them before you reset.
Aborting
fatal: could not move back to d39f842c8a54822614a71d9e503b01b89b57e3bf
ok 5 - git rebase --abort and untracked files

expecting success of 2500.6 'git rebase fast forwarding and untracked files': 
	test_setup_sequencing rebase_fast_forward_and_untracked &&
	(
		cd sequencing_rebase_fast_forward_and_untracked &&
		git checkout init &&
		echo precious >filler &&
		cp filler expect &&
		test_must_fail git rebase init simple &&
		test_cmp expect filler
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_rebase_fast_forward_and_untracked/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Note: switching to 'init'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2519212 init
error: The following untracked working tree files would be overwritten by checkout:
	filler
Please move or remove them before you switch branches.
Aborting
error: could not switch to simple
ok 6 - git rebase fast forwarding and untracked files

checking known breakage of 2500.7 'git rebase --autostash and untracked files': 
	test_setup_sequencing rebase_autostash_and_untracked &&
	(
		cd sequencing_rebase_autostash_and_untracked &&
		git checkout simple &&
		git rm filler &&
		mkdir filler &&
		echo precious >filler/file &&
		cp filler/file expect &&
		git rebase --autostash init &&
		test_path_is_file filler/file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_rebase_autostash_and_untracked/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Already on 'simple'
rm 'filler'
error: Updating the following directories would lose untracked files in them:
	filler

Aborting
fatal: could not reset --hard
Created autostash: ae7ed59
not ok 7 - git rebase --autostash and untracked files # TODO known breakage

checking known breakage of 2500.8 'git stash and untracked files': 
	test_setup_sequencing stash_and_untracked_files &&
	(
		cd sequencing_stash_and_untracked_files &&
		git checkout simple &&
		git rm filler &&
		mkdir filler &&
		echo precious >filler/file &&
		cp filler/file expect &&
		git status --porcelain &&
		git stash push &&
		git status --porcelain &&
		test_path_is_file filler/file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_stash_and_untracked_files/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Already on 'simple'
rm 'filler'
D  filler
?? expect
?? filler/
Saved working directory and index state WIP on simple: 15a37e4 another
?? expect
File filler/file doesn't exist
not ok 8 - git stash and untracked files # TODO known breakage

expecting success of 2500.9 'git am --abort and untracked dir vs. unmerged file': 
	test_setup_sequencing am_abort_and_untracked &&
	(
		cd sequencing_am_abort_and_untracked &&
		git format-patch -1 --stdout fooey >changes.mbox &&
		test_must_fail git am --3way changes.mbox &&

		# Delete the conflicted file; we will stage and commit it later
		rm filler &&

		# Put an unrelated untracked directory there
		mkdir filler &&
		echo foo >filler/file1 &&
		echo bar >filler/file2 &&

		test_must_fail git am --abort 2>errors &&
		test_path_is_dir filler &&
		grep "Updating .filler. would lose untracked files in it" errors
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_am_abort_and_untracked/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Applying: changes
Using index info to reconstruct a base tree...
M	filler
Falling back to patching base and 3-way merge...
Merging:
15a37e4 another
virtual changes
found 1 common ancestor:
virtual 3f7dfa0c5a54951d5d8082a6eda7692dfeb9ce47
Removing foo/bar/baz.t
Auto-merging filler
CONFLICT (content): Merge conflict in filler
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 changes
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
error: Updating 'filler' would lose untracked files in it
ok 9 - git am --abort and untracked dir vs. unmerged file

expecting success of 2500.10 'git am --skip and untracked dir vs deleted file': 
	test_setup_sequencing am_skip_and_untracked &&
	(
		cd sequencing_am_skip_and_untracked &&
		git checkout fooey &&
		git format-patch -1 --stdout simple >changes.mbox &&
		test_must_fail git am --3way changes.mbox &&

		# Delete newfile
		rm newfile &&

		# Put an unrelated untracked directory there
		mkdir newfile &&
		echo foo >newfile/file1 &&
		echo bar >newfile/file2 &&

		# Change our mind about resolutions, just skip this patch
		test_must_fail git am --skip 2>errors &&
		test_path_is_dir newfile &&
		grep "Updating .newfile. would lose untracked files in it" errors
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2500-untracked-overwriting/sequencing_am_skip_and_untracked/.git/
[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master 8220a2b] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
[master 4cfedf0] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
Switched to branch 'fooey'
rm 'foo/bar/baz.t'
[fooey d39f842] changes
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'simple'
[simple 15a37e4] another
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile
Switched to branch 'fooey'
Applying: another
Using index info to reconstruct a base tree...
M	filler
Falling back to patching base and 3-way merge...
Merging:
d39f842 changes
virtual another
found 1 common ancestor:
virtual a4566c4813b6ad70d63b32fcd2dda30547574648
Auto-merging filler
CONFLICT (content): Merge conflict in filler
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 another
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
error: Updating 'newfile' would lose untracked files in it
ok 10 - git am --skip and untracked dir vs deleted file

# still have 2 known breakage(s)
# passed all remaining 8 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3000-ls-files-others.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3000-ls-files-others/.git/
expecting success of 3000.1 'setup ': 
	date >path0 &&
	if test_have_prereq SYMLINKS
	then
		ln -s xyzzy path1
	else
		date >path1
	fi &&
	mkdir path2 path3 path4 &&
	date >path2/file2 &&
	date >path2-junk &&
	date >path3/file3 &&
	date >path3-junk &&
	git update-index --add path3-junk path3/file3

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 1 - setup 

expecting success of 3000.2 'setup: expected output': 
	cat >expected1 <<-\EOF &&
	expected1
	expected2
	expected3
	output
	path0
	path1
	path2-junk
	path2/file2
	EOF

	sed -e "s|path2/file2|path2/|" <expected1 >expected2 &&
	cp expected2 expected3 &&
	echo path4/ >>expected2

ok 2 - setup: expected output

expecting success of 3000.3 'ls-files --others': 
	git ls-files --others >output &&
	test_cmp expected1 output

ok 3 - ls-files --others

expecting success of 3000.4 'ls-files --others --directory': 
	git ls-files --others --directory >output &&
	test_cmp expected2 output

ok 4 - ls-files --others --directory

expecting success of 3000.5 '--no-empty-directory hides empty directory': 
	git ls-files --others --directory --no-empty-directory >output &&
	test_cmp expected3 output

ok 5 - --no-empty-directory hides empty directory

expecting success of 3000.6 'ls-files --others handles non-submodule .git': 
	mkdir not-a-submodule &&
	echo foo >not-a-submodule/.git &&
	git ls-files -o >output &&
	test_cmp expected1 output

ok 6 - ls-files --others handles non-submodule .git

expecting success of 3000.7 'ls-files --others with symlinked submodule': 
	git init super &&
	git init sub &&
	(
		cd sub &&
		>a &&
		git add a &&
		git commit -m sub &&
		git pack-refs --all
	) &&
	(
		cd super &&
		"$SHELL_PATH" "$TEST_DIRECTORY/../contrib/workdir/git-new-workdir" ../sub sub &&
		git ls-files --others --exclude-standard >../actual
	) &&
	echo sub/ >expect &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3000-ls-files-others/super/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3000-ls-files-others/sub/.git/
[master (root-commit) 8c0a349] sub
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
ok 7 - ls-files --others with symlinked submodule

expecting success of 3000.8 'setup nested pathspec search': 
	test_create_repo nested &&
	(
		cd nested &&

		mkdir -p partially_tracked/untracked_dir &&
		> partially_tracked/content &&
		> partially_tracked/untracked_dir/file &&

		mkdir -p untracked/deep &&
		> untracked/deep/path &&
		> untracked/deep/foo.c &&

		git add partially_tracked/content
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3000-ls-files-others/nested/.git/
ok 8 - setup nested pathspec search

expecting success of 3000.9 'ls-files -o --directory with single deep dir pathspec': 
	(
		cd nested &&

		git ls-files -o --directory untracked/deep/ >actual &&

		cat <<-EOF >expect &&
		untracked/deep/
		EOF

		test_cmp expect actual
	)

ok 9 - ls-files -o --directory with single deep dir pathspec

expecting success of 3000.10 'ls-files -o --directory with multiple dir pathspecs': 
	(
		cd nested &&

		git ls-files -o --directory partially_tracked/ untracked/ >actual &&

		cat <<-EOF >expect &&
		partially_tracked/untracked_dir/
		untracked/
		EOF

		test_cmp expect actual
	)

ok 10 - ls-files -o --directory with multiple dir pathspecs

expecting success of 3000.11 'ls-files -o --directory with mix dir/file pathspecs': 
	(
		cd nested &&

		git ls-files -o --directory partially_tracked/ untracked/deep/path >actual &&

		cat <<-EOF >expect &&
		partially_tracked/untracked_dir/
		untracked/deep/path
		EOF

		test_cmp expect actual
	)

ok 11 - ls-files -o --directory with mix dir/file pathspecs

expecting success of 3000.12 'ls-files -o --directory with glob filetype match': 
	(
		cd nested &&

		# globs kinda defeat --directory, but only for that pathspec
		git ls-files --others --directory partially_tracked "untracked/*.c" >actual &&

		cat <<-EOF >expect &&
		partially_tracked/untracked_dir/
		untracked/deep/foo.c
		EOF

		test_cmp expect actual
	)

ok 12 - ls-files -o --directory with glob filetype match

expecting success of 3000.13 'ls-files -o --directory with mix of tracked states': 
	(
		cd nested &&

		# globs kinda defeat --directory, but only for that pathspec
		git ls-files --others --directory partially_tracked/ "untracked/?*" >actual &&

		cat <<-EOF >expect &&
		partially_tracked/untracked_dir/
		untracked/deep/
		EOF

		test_cmp expect actual
	)

ok 13 - ls-files -o --directory with mix of tracked states

expecting success of 3000.14 'ls-files -o --directory with glob filetype match only': 
	(
		cd nested &&

		git ls-files --others --directory "untracked/*.c" >actual &&

		cat <<-EOF >expect &&
		untracked/deep/foo.c
		EOF

		test_cmp expect actual
	)

ok 14 - ls-files -o --directory with glob filetype match only

expecting success of 3000.15 'ls-files -o --directory to get immediate paths under one dir only': 
	(
		cd nested &&

		git ls-files --others --directory "untracked/?*" >actual &&

		cat <<-EOF >expect &&
		untracked/deep/
		EOF

		test_cmp expect actual
	)

ok 15 - ls-files -o --directory to get immediate paths under one dir only

expecting success of 3000.16 'ls-files -o avoids listing untracked non-matching gitdir': 
	test_when_finished "rm -rf nested/untracked/deep/empty" &&
	(
		cd nested &&

		git init untracked/deep/empty &&
		git ls-files --others "untracked/*.c" >actual &&

		cat <<-EOF >expect &&
		untracked/deep/foo.c
		EOF

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3000-ls-files-others/nested/untracked/deep/empty/.git/
ok 16 - ls-files -o avoids listing untracked non-matching gitdir

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2501-cwd-empty.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/.git/
expecting success of 2501.1 'setup': 
	test_commit init &&

	git branch fd_conflict &&

	mkdir -p foo/bar &&
	test_commit foo/bar/baz &&

	git revert HEAD &&
	git tag reverted &&

	git checkout fd_conflict &&
	mkdir dirORfile &&
	test_commit dirORfile/foo &&

	git rm -r dirORfile &&
	echo not-a-directory >dirORfile &&
	git add dirORfile &&
	git commit -m dirORfile &&

	git switch -c df_conflict HEAD~1 &&
	test_commit random_file &&

	git switch -c undo_fd_conflict fd_conflict &&
	git revert HEAD

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master f4c5aab] foo/bar/baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
[master 968d1fe] Revert "foo/bar/baz"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
Switched to branch 'fd_conflict'
[fd_conflict d7f9e78] dirORfile/foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dirORfile/foo.t
rm 'dirORfile/foo.t'
[fd_conflict 9658629] dirORfile
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 dirORfile
 delete mode 100644 dirORfile/foo.t
Switched to a new branch 'df_conflict'
[df_conflict d90d7a3] random_file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 random_file.t
Switched to a new branch 'undo_fd_conflict'
[undo_fd_conflict 46c1835] Revert "dirORfile"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 dirORfile
 create mode 100644 dirORfile/foo.t
ok 1 - setup

expecting success of 2501.2 'checkout does not clean cwd incidentally': 
	test_incidental_dir_removal git checkout init

Note: switching to 'foo/bar/baz^{commit}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f4c5aab foo/bar/baz
Previous HEAD position was f4c5aab foo/bar/baz
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at 2519212 init
ok 2 - checkout does not clean cwd incidentally

expecting success of 2501.3 'checkout fails if cwd needs to be removed': 
	test_required_dir_removal git checkout fd_conflict

Previous HEAD position was 2519212 init
HEAD is now at d90d7a3 random_file
error: Refusing to remove the current working directory:
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
Removing foo/
ok 3 - checkout fails if cwd needs to be removed

expecting success of 2501.4 'reset --hard does not clean cwd incidentally': 
	test_incidental_dir_removal git reset --hard init

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz
HEAD is now at 2519212 init
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at 2519212 init
ok 4 - reset --hard does not clean cwd incidentally

expecting success of 2501.5 'reset --hard fails if cwd needs to be removed': 
	test_required_dir_removal git reset --hard fd_conflict

Previous HEAD position was 2519212 init
HEAD is now at d90d7a3 random_file
error: Refusing to remove 'dirORfile' since it is the current working directory.
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
Removing foo/
ok 5 - reset --hard fails if cwd needs to be removed

expecting success of 2501.6 'merge does not clean cwd incidentally': 
	test_incidental_dir_removal git merge reverted

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz
Updating f4c5aab..968d1fe
Fast-forward
 foo/bar/baz.t | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at 968d1fe Revert "foo/bar/baz"
ok 6 - merge does not clean cwd incidentally

expecting success of 2501.7 'merge fails if cwd needs to be removed; recursive friendly': 
	git checkout foo/bar/baz &&
	test_when_finished "git clean -fdx" &&

	mkdir dirORfile &&
	(
		cd dirORfile &&

		test_must_fail git merge fd_conflict 2>../error
	) &&

	test_path_is_dir dirORfile &&
	grep "Refusing to remove the current working directory" error

Previous HEAD position was 968d1fe Revert "foo/bar/baz"
HEAD is now at f4c5aab foo/bar/baz
error: Refusing to remove the current working directory:
Removing dirORfile/
Removing error
ok 7 - merge fails if cwd needs to be removed; recursive friendly

expecting success of 2501.8 'merge fails if cwd needs to be removed': 
	test_required_dir_removal git merge fd_conflict

Previous HEAD position was f4c5aab foo/bar/baz
HEAD is now at d90d7a3 random_file
error: Refusing to remove the current working directory:
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
ok 8 - merge fails if cwd needs to be removed

expecting success of 2501.9 'cherry-pick does not clean cwd incidentally': 
	test_incidental_dir_removal git cherry-pick reverted

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz
[detached HEAD d0d1a1f] Revert "foo/bar/baz"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at d0d1a1f Revert "foo/bar/baz"
ok 9 - cherry-pick does not clean cwd incidentally

expecting success of 2501.10 'cherry-pick fails if cwd needs to be removed': 
	test_required_dir_removal git cherry-pick fd_conflict

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  d0d1a1f Revert "foo/bar/baz"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> d0d1a1f

HEAD is now at d90d7a3 random_file
error: Refusing to remove the current working directory:
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
Removing foo/
ok 10 - cherry-pick fails if cwd needs to be removed

expecting success of 2501.11 'rebase does not clean cwd incidentally': 
	test_incidental_dir_removal git rebase reverted

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz

                                                                                
Successfully rebased and updated detached HEAD.
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at 968d1fe Revert "foo/bar/baz"
ok 11 - rebase does not clean cwd incidentally

expecting success of 2501.12 'rebase fails if cwd needs to be removed': 
	test_required_dir_removal git rebase fd_conflict

Previous HEAD position was 968d1fe Revert "foo/bar/baz"
HEAD is now at d90d7a3 random_file
error: Refusing to remove the current working directory:
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
Removing foo/
ok 12 - rebase fails if cwd needs to be removed

expecting success of 2501.13 'revert does not clean cwd incidentally': 
	test_incidental_dir_removal git revert HEAD

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz
[detached HEAD f0f8756] Revert "foo/bar/baz"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 foo/bar/baz.t
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
HEAD is now at f0f8756 Revert "foo/bar/baz"
ok 13 - revert does not clean cwd incidentally

expecting success of 2501.14 'revert fails if cwd needs to be removed': 
	test_required_dir_removal git revert undo_fd_conflict

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  f0f8756 Revert "foo/bar/baz"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> f0f8756

HEAD is now at d90d7a3 random_file
error: Refusing to remove the current working directory:
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/dirORfile
?? error
Removing error
Removing foo/
ok 14 - revert fails if cwd needs to be removed

expecting success of 2501.15 'rm does not clean cwd incidentally': 
	test_incidental_dir_removal git rm bar/baz.t

Previous HEAD position was d90d7a3 random_file
HEAD is now at f4c5aab foo/bar/baz
rm 'foo/bar/baz.t'
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
D  foo/bar/baz.t
HEAD is now at f4c5aab foo/bar/baz
ok 15 - rm does not clean cwd incidentally

expecting success of 2501.16 'apply does not remove cwd incidentally': 
	git diff HEAD HEAD~1 >patch &&
	test_incidental_dir_removal git apply ../patch

HEAD is now at f4c5aab foo/bar/baz
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/foo
 D foo/bar/baz.t
?? patch
HEAD is now at f4c5aab foo/bar/baz
ok 16 - apply does not remove cwd incidentally

expecting success of 2501.17 'clean does not remove cwd incidentally': 
	test_incidental_untracked_dir_removal \
		git -C .. clean -fd -e warnings . >warnings &&
	grep "Refusing to remove current working directory" warnings

HEAD is now at f4c5aab foo/bar/baz
Refusing to remove current working directory
HEAD is now at f4c5aab foo/bar/baz
ok 17 - clean does not remove cwd incidentally

expecting success of 2501.18 'stash does not remove cwd incidentally': 
	test_incidental_untracked_dir_removal \
		git stash --include-untracked

HEAD is now at f4c5aab foo/bar/baz
Saved working directory and index state WIP on (no branch): f4c5aab foo/bar/baz
Refusing to remove current working directory
/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/untracked
HEAD is now at f4c5aab foo/bar/baz
ok 18 - stash does not remove cwd incidentally

expecting success of 2501.19 '`rm -rf dir` only removes a subset of dir': 
	test_when_finished "rm -rf a/" &&

	mkdir -p a/b/c &&
	>a/b/c/untracked &&
	>a/b/c/tracked &&
	git add a/b/c/tracked &&

	(
		cd a/b &&
		git rm -rf ../b
	) &&

	test_path_is_dir a/b &&
	test_path_is_missing a/b/c/tracked &&
	test_path_is_file a/b/c/untracked

rm 'a/b/c/tracked'
ok 19 - `rm -rf dir` only removes a subset of dir

expecting success of 2501.20 '`rm -rf dir` even with only tracked files will remove something else': 
	test_when_finished "rm -rf a/" &&

	mkdir -p a/b/c &&
	>a/b/c/tracked &&
	git add a/b/c/tracked &&

	(
		cd a/b &&
		git rm -rf ../b
	) &&

	test_path_is_missing a/b/c/tracked &&
	test_path_is_missing a/b/c &&
	test_path_is_dir a/b

rm 'a/b/c/tracked'
ok 20 - `rm -rf dir` even with only tracked files will remove something else

expecting success of 2501.21 'git version continues working from a deleted dir': 
	mkdir tmp &&
	(
		cd tmp &&
		rm -rf ../tmp &&
		git version
	)

sh: 0: getcwd() failed: No such file or directory
git version 2.39.0
ok 21 - git version continues working from a deleted dir

expecting success of 2501.22 'rm -r with -C leaves submodule if cwd inside': 
	test_submodule_removal dir git -C .. rm -r my_submodule/

HEAD is now at f4c5aab foo/bar/baz
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git/
[master (root-commit) f132c27] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Adding existing repo at 'my_submodule' to the index
[detached HEAD 629a5d0] Add the submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 my_submodule
Migrating git directory of 'my_submodule' from
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/.git/modules/my_submodule'
fatal: could not remove 'my_submodule'
rm 'my_submodule'
HEAD is now at f4c5aab foo/bar/baz
ok 22 - rm -r with -C leaves submodule if cwd inside

expecting success of 2501.23 'rm -r leaves submodule if cwd inside': 
	test_submodule_removal dir \
		git --git-dir=../.git --work-tree=.. rm -r ../my_submodule/

HEAD is now at f4c5aab foo/bar/baz
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git/
[master (root-commit) f132c27] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Adding existing repo at 'my_submodule' to the index
[detached HEAD 629a5d0] Add the submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 my_submodule
Migrating git directory of 'my_submodule' from
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/.git/modules/my_submodule'
fatal: could not remove 'my_submodule'
rm 'my_submodule'
HEAD is now at f4c5aab foo/bar/baz
ok 23 - rm -r leaves submodule if cwd inside

expecting success of 2501.24 'rm -rf removes submodule even if cwd inside': 
	test_submodule_removal missing \
		git --git-dir=../.git --work-tree=.. rm -rf ../my_submodule/

HEAD is now at f4c5aab foo/bar/baz
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git/
[master (root-commit) f132c27] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Adding existing repo at 'my_submodule' to the index
[detached HEAD 629a5d0] Add the submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 my_submodule
Migrating git directory of 'my_submodule' from
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/my_submodule/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2501-cwd-empty/.git/modules/my_submodule'
rm 'my_submodule'
HEAD is now at f4c5aab foo/bar/baz
ok 24 - rm -rf removes submodule even if cwd inside

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3002-ls-files-dashpath.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3002-ls-files-dashpath/.git/
expecting success of 3002.1 'setup': 
	echo frotz >path0 &&
	echo frotz >./-foo &&
	echo frotz >./--

ok 1 - setup

expecting success of 3002.2 'git ls-files without path restriction.': 
	test_when_finished "rm -f expect" &&
	git ls-files --others >output &&
	cat >expect <<-\EOF &&
	--
	-foo
	output
	path0
	EOF
	test_cmp output expect

ok 2 - git ls-files without path restriction.

expecting success of 3002.3 'git ls-files with path restriction.': 
	test_when_finished "rm -f expect" &&
	git ls-files --others path0 >output &&
	cat >expect <<-\EOF &&
	path0
	EOF
	test_cmp output expect

ok 3 - git ls-files with path restriction.

expecting success of 3002.4 'git ls-files with path restriction with --.': 
	test_when_finished "rm -f expect" &&
	git ls-files --others -- path0 >output &&
	cat >expect <<-\EOF &&
	path0
	EOF
	test_cmp output expect

ok 4 - git ls-files with path restriction with --.

expecting success of 3002.5 'git ls-files with path restriction with -- --.': 
	test_when_finished "rm -f expect" &&
	git ls-files --others -- -- >output &&
	cat >expect <<-\EOF &&
	--
	EOF
	test_cmp output expect

ok 5 - git ls-files with path restriction with -- --.

expecting success of 3002.6 'git ls-files with no path restriction.': 
	test_when_finished "rm -f expect" &&
	git ls-files --others -- >output &&
	cat >expect <<-\EOF &&
	--
	-foo
	output
	path0
	EOF
	test_cmp output expect


ok 6 - git ls-files with no path restriction.

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3001-ls-files-others-exclude.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3001-ls-files-others-exclude/.git/
expecting success of 3001.1 'git ls-files --others with various exclude options.': 
	git ls-files --others \
       --exclude=\*.6 \
       --exclude-per-directory=.gitignore \
       --exclude-from=.git/ignore \
	>output &&
	test_cmp expect output

ok 1 - git ls-files --others with various exclude options.

expecting success of 3001.2 'git ls-files --others with \r\n line endings.': 
	git ls-files --others \
       --exclude=\*.6 \
       --exclude-per-directory=.gitignore \
       --exclude-from=.git/ignore \
	>output &&
	test_cmp expect output

ok 2 - git ls-files --others with \r\n line endings.

expecting success of 3001.3 'setup skip-worktree gitignore': 
	git add $allignores &&
	git update-index --skip-worktree $allignores &&
	rm $allignores

ok 3 - setup skip-worktree gitignore

expecting success of 3001.4 'git ls-files --others with various exclude options.': 
	git ls-files --others \
       --exclude=\*.6 \
       --exclude-per-directory=.gitignore \
       --exclude-from=.git/ignore \
	>output &&
	test_cmp expect output

ok 4 - git ls-files --others with various exclude options.

expecting success of 3001.5 'restore gitignore': 
	git checkout --ignore-skip-worktree-bits $allignores &&
	rm .git/index

Updated 3 paths from the index
ok 5 - restore gitignore

expecting success of 3001.6 'git status honors core.excludesfile': test_cmp expect output
ok 6 - git status honors core.excludesfile

expecting success of 3001.7 'trailing slash in exclude allows directory match(1)': 

	git ls-files --others --exclude=one/ >output &&
	if grep "^one/" output
	then
		echo Ooops
		false
	else
		: happy
	fi


ok 7 - trailing slash in exclude allows directory match(1)

expecting success of 3001.8 'trailing slash in exclude allows directory match (2)': 

	git ls-files --others --exclude=one/two/ >output &&
	if grep "^one/two/" output
	then
		echo Ooops
		false
	else
		: happy
	fi


ok 8 - trailing slash in exclude allows directory match (2)

expecting success of 3001.9 'trailing slash in exclude forces directory match (1)': 

	>two &&
	git ls-files --others --exclude=two/ >output &&
	grep "^two" output


two
ok 9 - trailing slash in exclude forces directory match (1)

expecting success of 3001.10 'trailing slash in exclude forces directory match (2)': 

	git ls-files --others --exclude=one/a.1/ >output &&
	grep "^one/a.1" output


one/a.1
ok 10 - trailing slash in exclude forces directory match (2)

expecting success of 3001.11 'negated exclude matches can override previous ones': 

	git ls-files --others --exclude="a.*" --exclude="!a.1" >output &&
	grep "^a.1" output

a.1
ok 11 - negated exclude matches can override previous ones

expecting success of 3001.12 'excluded directory overrides content patterns': 

	git ls-files --others --exclude="one" --exclude="!one/a.1" >output &&
	if grep "^one/a.1" output
	then
		false
	fi

ok 12 - excluded directory overrides content patterns

expecting success of 3001.13 'negated directory doesn't affect content patterns': 

	git ls-files --others --exclude="!one" --exclude="one/a.1" >output &&
	if grep "^one/a.1" output
	then
		false
	fi

ok 13 - negated directory doesn't affect content patterns

expecting success of 3001.14 'subdirectory ignore (setup)': 
	mkdir -p top/l1/l2 &&
	(
		cd top &&
		git init &&
		echo /.gitignore >.gitignore &&
		echo l1 >>.gitignore &&
		echo l2 >l1/.gitignore &&
		>l1/l2/l1
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3001-ls-files-others-exclude/top/.git/
ok 14 - subdirectory ignore (setup)

expecting success of 3001.15 'subdirectory ignore (toplevel)': 
	(
		cd top &&
		git ls-files -o --exclude-standard
	) >actual &&
	test_must_be_empty actual

ok 15 - subdirectory ignore (toplevel)

expecting success of 3001.16 'subdirectory ignore (l1/l2)': 
	(
		cd top/l1/l2 &&
		git ls-files -o --exclude-standard
	) >actual &&
	test_must_be_empty actual

ok 16 - subdirectory ignore (l1/l2)

expecting success of 3001.17 'subdirectory ignore (l1)': 
	(
		cd top/l1 &&
		git ls-files -o --exclude-standard
	) >actual &&
	test_must_be_empty actual

ok 17 - subdirectory ignore (l1)

expecting success of 3001.18 'show/hide empty ignored directory (setup)': 
	rm top/l1/l2/l1 &&
	rm top/l1/.gitignore

ok 18 - show/hide empty ignored directory (setup)

expecting success of 3001.19 'show empty ignored directory with --directory': 
	(
		cd top &&
		git ls-files -o -i --exclude l1 --directory
	) >actual &&
	echo l1/ >expect &&
	test_cmp expect actual

ok 19 - show empty ignored directory with --directory

expecting success of 3001.20 'hide empty ignored directory with --no-empty-directory': 
	(
		cd top &&
		git ls-files -o -i --exclude l1 --directory --no-empty-directory
	) >actual &&
	test_must_be_empty actual

ok 20 - hide empty ignored directory with --no-empty-directory

expecting success of 3001.21 'show/hide empty ignored sub-directory (setup)': 
	> top/l1/tracked &&
	(
		cd top &&
		git add -f l1/tracked
	)

ok 21 - show/hide empty ignored sub-directory (setup)

expecting success of 3001.22 'show empty ignored sub-directory with --directory': 
	(
		cd top &&
		git ls-files -o -i --exclude l1 --directory
	) >actual &&
	echo l1/l2/ >expect &&
	test_cmp expect actual

ok 22 - show empty ignored sub-directory with --directory

expecting success of 3001.23 'hide empty ignored sub-directory with --no-empty-directory': 
	(
		cd top &&
		git ls-files -o -i --exclude l1 --directory --no-empty-directory
	) >actual &&
	test_must_be_empty actual

ok 23 - hide empty ignored sub-directory with --no-empty-directory

expecting success of 3001.24 'pattern matches prefix completely': 
	git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
	test_must_be_empty actual

ok 24 - pattern matches prefix completely

expecting success of 3001.25 'ls-files with "**" patterns': 
	cat <<-\EOF >expect &&
	a.1
	one/a.1
	one/two/a.1
	three/a.1
	EOF
	git ls-files -o -i --exclude "**/a.1" >actual &&
	test_cmp expect actual

ok 25 - ls-files with "**" patterns

expecting success of 3001.26 'ls-files with "**" patterns and --directory': 
	# Expectation same as previous test
	git ls-files --directory -o -i --exclude "**/a.1" >actual &&
	test_cmp expect actual

ok 26 - ls-files with "**" patterns and --directory

expecting success of 3001.27 'ls-files with "**" patterns and no slashes': 
	git ls-files -o -i --exclude "one**a.1" >actual &&
	test_must_be_empty actual

ok 27 - ls-files with "**" patterns and no slashes

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3003-ls-files-exclude.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3003-ls-files-exclude/.git/
expecting success of 3003.1 'create repo with file': 
	echo content >file &&
	git add file &&
	git commit -m file &&
	echo modification >file

[master (root-commit) 39caa03] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - create repo with file

expecting success of 3003.2 'ls-files output contains file (cached)': 
	echo 'file' >expect &&
	git ls-files --exclude-standard --cached >output &&
	test_cmp expect output

ok 2 - ls-files output contains file (cached)

expecting success of 3003.3 'ls-files output contains file (modified)': 
	echo 'file' >expect &&
	git ls-files --exclude-standard --modified >output &&
	test_cmp expect output

ok 3 - ls-files output contains file (modified)

expecting success of 3003.4 'add file to gitignore': 
	echo file >.gitignore

ok 4 - add file to gitignore

expecting success of 3003.5 'ls-files output contains file (cached)': 
	echo 'file' >expect &&
	git ls-files --exclude-standard --cached >output &&
	test_cmp expect output

ok 5 - ls-files output contains file (cached)

expecting success of 3003.6 'ls-files output contains file (modified)': 
	echo 'file' >expect &&
	git ls-files --exclude-standard --modified >output &&
	test_cmp expect output

ok 6 - ls-files output contains file (modified)

expecting success of 3003.7 'ls-files -i -c lists only tracked-but-ignored files': 
	echo content >other-file &&
	git add other-file &&
	echo file >expect &&
	git ls-files -i -c --exclude-standard >output &&
	test_cmp expect output

ok 7 - ls-files -i -c lists only tracked-but-ignored files

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3004-ls-files-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3004-ls-files-basic/.git/
expecting success of 3004.1 'ls-files in empty repository': 
	git ls-files >actual &&
	test_must_be_empty actual

ok 1 - ls-files in empty repository

expecting success of 3004.2 'ls-files with nonexistent path': 
	git ls-files doesnotexist >actual &&
	test_must_be_empty actual

ok 2 - ls-files with nonexistent path

expecting success of 3004.3 'ls-files with nonsense option': 
	test_expect_code 129 git ls-files --nonsense 2>actual &&
	test_i18ngrep "[Uu]sage: git ls-files" actual

usage: git ls-files [<options>] [<file>...]
ok 3 - ls-files with nonsense option

expecting success of 3004.4 'ls-files -h in corrupt repository': 
	mkdir broken &&
	(
		cd broken &&
		git init &&
		>.git/index &&
		test_expect_code 129 git ls-files -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage: git ls-files " broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3004-ls-files-basic/broken/.git/
usage: git ls-files [<options>] [<file>...]
ok 4 - ls-files -h in corrupt repository

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 3004.5 'ls-files with absolute paths to symlinks': 
	mkdir subs &&
	ln -s nosuch link &&
	ln -s ../nosuch subs/link &&
	git add link subs/link &&
	git ls-files -s link subs/link >expect &&
	git ls-files -s "$(pwd)/link" "$(pwd)/subs/link" >actual &&
	test_cmp expect actual &&

	(
		cd subs &&
		git ls-files -s link >../expect &&
		git ls-files -s "$(pwd)/link" >../actual
	) &&
	test_cmp expect actual

ok 5 - ls-files with absolute paths to symlinks

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t2013-checkout-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/.git/
expecting success of 2013.1 'setup': 
	mkdir submodule &&
	(cd submodule &&
	 git init &&
	 test_commit first) &&
	git add submodule &&
	test_tick &&
	git commit -m superproject &&
	(cd submodule &&
	 test_commit second) &&
	git add submodule &&
	test_tick &&
	git commit -m updated.superproject

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
warning: adding embedded git repository: submodule
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submodule
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submodule
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) 1844aa5] superproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 submodule
[master d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[master 14e674f] updated.superproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 2013.2 '"reset <submodule>" updates the index': 
	git update-index --refresh &&
	git diff-files --quiet &&
	git diff-index --quiet --cached HEAD &&
	git reset HEAD^ submodule &&
	test_must_fail git diff-files --quiet &&
	git reset submodule &&
	git diff-files --quiet

Unstaged changes after reset:
M	submodule
ok 2 - "reset <submodule>" updates the index

expecting success of 2013.3 '"checkout <submodule>" updates the index only': 
	git update-index --refresh &&
	git diff-files --quiet &&
	git diff-index --quiet --cached HEAD &&
	git checkout HEAD^ submodule &&
	test_must_fail git diff-files --quiet &&
	git checkout HEAD submodule &&
	git diff-files --quiet

Updated 0 paths from f0404a9
Updated 0 paths from 29aef3d
ok 3 - "checkout <submodule>" updates the index only

expecting success of 2013.4 '"checkout <submodule>" honors diff.ignoreSubmodules': 
	git config diff.ignoreSubmodules dirty &&
	echo x> submodule/untracked &&
	git checkout HEAD >actual 2>&1 &&
	test_must_be_empty actual

ok 4 - "checkout <submodule>" honors diff.ignoreSubmodules

expecting success of 2013.5 '"checkout <submodule>" honors submodule.*.ignore from .gitmodules': 
	git config diff.ignoreSubmodules none &&
	git config -f .gitmodules submodule.submodule.path submodule &&
	git config -f .gitmodules submodule.submodule.ignore untracked &&
	git checkout HEAD >actual 2>&1 &&
	test_must_be_empty actual

ok 5 - "checkout <submodule>" honors submodule.*.ignore from .gitmodules

expecting success of 2013.6 '"checkout <submodule>" honors submodule.*.ignore from .git/config': 
	git config -f .gitmodules submodule.submodule.ignore none &&
	git config submodule.submodule.path submodule &&
	git config submodule.submodule.ignore all &&
	git checkout HEAD >actual 2>&1 &&
	test_must_be_empty actual

ok 6 - "checkout <submodule>" honors submodule.*.ignore from .git/config

expecting success of 2013.7 'git checkout --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1/.git/
[master (root-commit) f401f36] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub2/.git/
[master (root-commit) f2c1bb9] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_repo/.git/
[master (root-commit) 3950f7e] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 30024d7] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6f9aa6] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications e6d8148] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 1f84fbc] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 50491a1] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 6797720] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively 6788ca3] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 6cc4170] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 934e1af] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Previous HEAD position was f401f36 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory 43c94e1] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 2061bb3] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file d4861a4] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 cf98843] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 cea73c0] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 f248045] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 7 - git checkout --recurse-submodules: added submodule is checked out

expecting success of 2013.8 'git checkout --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 8 - git checkout --recurse-submodules: added submodule is checked out in empty dir

expecting success of 2013.9 'git checkout --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
ok 9 - git checkout --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 2013.10 'git checkout --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
ok 10 - git checkout --recurse-submodules: replace directory with submodule

expecting success of 2013.11 'git checkout --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
Switched to branch 'modify_sub1_recursively'
Your branch is up to date with 'origin/modify_sub1_recursively'.
ok 11 - git checkout --recurse-submodules: nested submodules are checked out

expecting success of 2013.12 'git checkout --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 12 - git checkout --recurse-submodules: removed submodule removes submodules working tree

expecting success of 2013.13 'git checkout --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/.git/modules/sub1'
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 13 - git checkout --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 2013.14 'git checkout --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
ok 14 - git checkout --recurse-submodules: replace submodule with a file

checking known breakage of 2013.15 'git checkout --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout --recurse-submodules replace_sub1_with_file
not ok 15 - git checkout --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 2013.16 'git checkout --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '50491a1d91d7be663c2f0e01632adafaa8ad1784'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out 'f2c1bb97d8342b3950c464bac1b708b05cb363c0'
branch 'no_submodule' set up to track 'origin/no_submodule'.
Switched to branch 'no_submodule'
Your branch is up to date with 'origin/no_submodule'.
Directory sub1 doesn't exist
ok 16 - git checkout --recurse-submodules: worktrees of nested submodules are removed

expecting success of 2013.17 'git checkout --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
ok 17 - git checkout --recurse-submodules: modified submodule updates submodule work tree

expecting success of 2013.18 'git checkout --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
	sub1
ok 18 - git checkout --recurse-submodules: updating to a missing submodule commit fails

expecting success of 2013.19 'git checkout --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
fatal: ref HEAD is not a symbolic ref
ok 19 - git checkout --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 2013.20 'git checkout --recurse-submodules: added submodule doesn't remove untracked file with same name': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			test_must_fail $command add_sub1 &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
ok 20 - git checkout --recurse-submodules: added submodule doesn't remove untracked file with same name

expecting success of 2013.21 'git checkout --recurse-submodules: added submodule removes an untracked ignored file': 
		test_when_finished "rm -rf submodule_update/.git/info" &&
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			mkdir .git/info &&
			echo sub1 >.git/info/exclude &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 21 - git checkout --recurse-submodules: added submodule removes an untracked ignored file

checking known breakage of 2013.22 'git checkout --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_submodule_content sub1 origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
not ok 22 - git checkout --recurse-submodules: replace submodule with a directory # TODO known breakage

checking known breakage of 2013.23 'git checkout --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
not ok 23 - git checkout --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir # TODO known breakage

expecting success of 2013.24 'git checkout --recurse-submodules: replace submodule with a file works ignores ignored files in submodule': 
		test_when_finished "rm submodule_update/.git/modules/sub1/info/exclude" &&
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm -rf .git/modules/sub1/info &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			mkdir .git/modules/sub1/info &&
			echo ignored >.git/modules/sub1/info/exclude &&
			: >sub1/ignored &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
ok 24 - git checkout --recurse-submodules: replace submodule with a file works ignores ignored files in submodule

expecting success of 2013.25 'git -c submodule.recurse=true checkout: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			git -c submodule.recurse=true $cmd_args modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
ok 25 - git -c submodule.recurse=true checkout: modified submodule updates submodule work tree

expecting success of 2013.26 'git checkout --recurse-submodules: modified submodule updates submodule recursively': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '50491a1d91d7be663c2f0e01632adafaa8ad1784'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out 'f2c1bb97d8342b3950c464bac1b708b05cb363c0'
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
Switched to branch 'modify_sub1_recursively'
Your branch is up to date with 'origin/modify_sub1_recursively'.
ok 26 - git checkout --recurse-submodules: modified submodule updates submodule recursively

expecting success of 2013.27 'git checkout -f --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 27 - git checkout -f --recurse-submodules: added submodule is checked out

expecting success of 2013.28 'git checkout -f --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 28 - git checkout -f --recurse-submodules: added submodule is checked out in empty dir

expecting success of 2013.29 'git checkout -f --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
ok 29 - git checkout -f --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 2013.30 'git checkout -f --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
ok 30 - git checkout -f --recurse-submodules: replace directory with submodule

expecting success of 2013.31 'git checkout -f --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
Switched to branch 'modify_sub1_recursively'
Your branch is up to date with 'origin/modify_sub1_recursively'.
ok 31 - git checkout -f --recurse-submodules: nested submodules are checked out

expecting success of 2013.32 'git checkout -f --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 32 - git checkout -f --recurse-submodules: removed submodule removes submodules working tree

expecting success of 2013.33 'git checkout -f --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/.git/modules/sub1'
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 33 - git checkout -f --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 2013.34 'git checkout -f --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
ok 34 - git checkout -f --recurse-submodules: replace submodule with a file

checking known breakage of 2013.35 'git checkout -f --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout -f --recurse-submodules replace_sub1_with_file
not ok 35 - git checkout -f --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 2013.36 'git checkout -f --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '50491a1d91d7be663c2f0e01632adafaa8ad1784'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out 'f2c1bb97d8342b3950c464bac1b708b05cb363c0'
branch 'no_submodule' set up to track 'origin/no_submodule'.
Switched to branch 'no_submodule'
Your branch is up to date with 'origin/no_submodule'.
Directory sub1 doesn't exist
ok 36 - git checkout -f --recurse-submodules: worktrees of nested submodules are removed

expecting success of 2013.37 'git checkout -f --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
ok 37 - git checkout -f --recurse-submodules: modified submodule updates submodule work tree

expecting success of 2013.38 'git checkout -f --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
error: Submodule 'sub1' cannot checkout new HEAD.
ok 38 - git checkout -f --recurse-submodules: updating to a missing submodule commit fails

expecting success of 2013.39 'git checkout -f --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
fatal: ref HEAD is not a symbolic ref
ok 39 - git checkout -f --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 2013.40 'git checkout -f --recurse-submodules: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 40 - git checkout -f --recurse-submodules: added submodule does remove untracked unignored file with same name when forced

expecting success of 2013.41 'git checkout -f --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Switched to branch 'replace_sub1_with_directory'
Your branch is up to date with 'origin/replace_sub1_with_directory'.
ok 41 - git checkout -f --recurse-submodules: replace submodule with a directory

expecting success of 2013.42 'git checkout -f --recurse-submodules: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules/sub1 &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/.git/modules/sub1'
Switched to branch 'replace_sub1_with_directory'
Your branch is up to date with 'origin/replace_sub1_with_directory'.
ok 42 - git checkout -f --recurse-submodules: replace submodule containing a .git directory with a directory must fail

expecting success of 2013.43 'git checkout -f --recurse-submodules: replace submodule with a file ignoring ignored files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/expect &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
ok 43 - git checkout -f --recurse-submodules: replace submodule with a file ignoring ignored files

expecting success of 2013.44 'git checkout -f --recurse-submodules: modified submodule does update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to_interested invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to branch 'valid_sub1'
Your branch is up to date with 'origin/valid_sub1'.
ok 44 - git checkout -f --recurse-submodules: modified submodule does update submodule work tree from invalid commit

expecting success of 2013.45 'git checkout -f --recurse-submodules: updating submodules fixes .git links': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			echo "gitdir: bogus/path" >sub1/.git &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
ok 45 - git checkout -f --recurse-submodules: updating submodules fixes .git links

expecting success of 2013.46 'git checkout -f --recurse-submodules: changed submodule worktree is reset': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm sub1/file1 &&
			: >sub1/new_file &&
			git -C sub1 add new_file &&
			$command HEAD &&
			test_path_is_file sub1/file1 &&
			test_path_is_missing sub1/new_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Your branch is up to date with 'origin/add_sub1'.
ok 46 - git checkout -f --recurse-submodules: changed submodule worktree is reset

expecting success of 2013.47 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 47 - git_test_func: added submodule creates empty directory

expecting success of 2013.48 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 48 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 2013.49 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 49 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 2013.50 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 50 - git_test_func: replace directory with submodule

expecting success of 2013.51 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 51 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 2013.52 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 52 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 2013.53 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 53 - git_test_func: replace submodule with a directory must fail

expecting success of 2013.54 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 54 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 2013.55 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 55 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 2013.56 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 56 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 2013.57 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
Submodule path 'sub1': checked out 'e6d8148a306c904a34344fac267f4613e698d228'
ok 57 - git_test_func: modified submodule does not update submodule work tree

expecting success of 2013.58 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to branch 'invalid_sub1'
Your branch is up to date with 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 58 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 2013.59 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to branch 'valid_sub1'
Your branch is up to date with 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 59 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 2013.60 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
ok 60 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 2013.61 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 61 - git_test_func: added submodule creates empty directory

expecting success of 2013.62 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 62 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 2013.63 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 63 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 2013.64 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 64 - git_test_func: replace directory with submodule

expecting success of 2013.65 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 65 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 2013.66 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
ok 66 - git_test_func: removed submodule leaves submodule containing a .git directory alone

checking known breakage of 2013.67 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'replace_sub1_with_directory'
Your branch is up to date with 'origin/replace_sub1_with_directory'.
test_must_fail: command succeeded: git checkout -f replace_sub1_with_directory
not ok 67 - git_test_func: replace submodule with a directory must fail # TODO known breakage

checking known breakage of 2013.68 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'replace_sub1_with_directory'
Your branch is up to date with 'origin/replace_sub1_with_directory'.
test_must_fail: command succeeded: git checkout -f replace_sub1_with_directory
not ok 68 - git_test_func: replace submodule containing a .git directory with a directory must fail # TODO known breakage

checking known breakage of 2013.69 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout -f replace_sub1_with_file
not ok 69 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 2013.70 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout -f replace_sub1_with_file
not ok 70 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 2013.71 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
Submodule path 'sub1': checked out 'e6d8148a306c904a34344fac267f4613e698d228'
ok 71 - git_test_func: modified submodule does not update submodule work tree

expecting success of 2013.72 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to branch 'invalid_sub1'
Your branch is up to date with 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 72 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 2013.73 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to branch 'valid_sub1'
Your branch is up to date with 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t2013-checkout-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
Submodule path 'uninitialized_sub': checked out 'f401f36f47a708c55a44c7f28d8948e9f8abac9f'
ok 73 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 2013.74 'git_test_func: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
ok 74 - git_test_func: added submodule does remove untracked unignored file with same name when forced

# still have 10 known breakage(s)
# passed all remaining 64 test(s)
1..74
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3005-ls-files-relative.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3005-ls-files-relative/.git/
expecting success of 3005.1 'prepare': 
	: >never-mind-me &&
	git add never-mind-me &&
	mkdir top &&
	(
		cd top &&
		mkdir sub &&
		x="x xa xbc xdef xghij xklmno" &&
		y=$(echo "$x" | tr x y) &&
		touch $x &&
		touch $y &&
		cd sub &&
		git add ../x*
	)

ok 1 - prepare

expecting success of 3005.2 'ls-files with mixed levels': 
	(
		cd top/sub &&
		cat >expect <<-EOF &&
		../../never-mind-me
		../x
		EOF
		git ls-files $(cat expect) >actual &&
		test_cmp expect actual
	)

ok 2 - ls-files with mixed levels

expecting success of 3005.3 'ls-files -c': 
	(
		cd top/sub &&
		printf "error: pathspec $SQ%s$SQ did not match any file(s) known to git\n" ../y* >expect.err &&
		echo "Did you forget to ${SQ}git add${SQ}?" >>expect.err &&
		ls ../x* >expect.out &&
		test_must_fail git ls-files -c --error-unmatch ../[xy]* >actual.out 2>actual.err &&
		test_cmp expect.out actual.out &&
		test_cmp expect.err actual.err
	)

ok 3 - ls-files -c

expecting success of 3005.4 'ls-files -o': 
	(
		cd top/sub &&
		printf "error: pathspec $SQ%s$SQ did not match any file(s) known to git\n" ../x* >expect.err &&
		echo "Did you forget to ${SQ}git add${SQ}?" >>expect.err &&
		ls ../y* >expect.out &&
		test_must_fail git ls-files -o --error-unmatch ../[xy]* >actual.out 2>actual.err &&
		test_cmp expect.out actual.out &&
		test_cmp expect.err actual.err
	)

ok 4 - ls-files -o

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3006-ls-files-long.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3006-ls-files-long/.git/
expecting success of 3006.1 'setup': 
	p=filefilefilefilefilefilefilefile &&
	p=$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p &&
	p=$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p$p &&

	path_a=${p}_a &&
	path_z=${p}_z &&

	blob_a=$(echo frotz | git hash-object -w --stdin) &&
	blob_z=$(echo nitfol | git hash-object -w --stdin) &&

	pat="100644 %s 0\t%s\n"

ok 1 - setup

expecting success of 3006.2 'overly-long path by itself is not a problem': 
	printf "$pat" "$blob_a" "$path_a" |
	git update-index --add --index-info &&
	echo "$path_a" >expect &&
	git ls-files >actual &&
	test_cmp expect actual

ok 2 - overly-long path by itself is not a problem

expecting success of 3006.3 'overly-long path does not replace another by mistake': 
	printf "$pat" "$blob_a" "$path_a" "$blob_z" "$path_z" |
	git update-index --add --index-info &&
	(
		echo "$path_a" &&
		echo "$path_z"
	) >expect &&
	git ls-files >actual &&
	test_cmp expect actual

ok 3 - overly-long path does not replace another by mistake

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3008-ls-files-lazy-init-name-hash.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3008-ls-files-lazy-init-name-hash/.git/
expecting success of 3008.1 'no buffer overflow in lazy_init_name_hash': 
	(
	    test_seq $LAZY_THREAD_COST | sed "s/^/a_/" &&
	    echo b/b/b &&
	    test_seq $LAZY_THREAD_COST | sed "s/^/c_/" &&
	    test_seq 50 | sed "s/^/d_/" | tr "\n" "/" && echo d
	) |
	sed "s/^/100644 $EMPTY_BLOB	/" |
	git update-index --index-info &&
	test-tool lazy-init-name-hash -m

0.008715 0.007062 4002 multi 2
ok 1 - no buffer overflow in lazy_init_name_hash

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3009-ls-files-others-nonsubmodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3009-ls-files-others-nonsubmodule/.git/
expecting success of 3009.1 'setup: directories': 
	mkdir nonrepo-no-files/ &&
	mkdir nonrepo-untracked-file &&
	: >nonrepo-untracked-file/untracked &&
	git init repo-no-commit-no-files &&
	git init repo-no-commit-untracked-file &&
	: >repo-no-commit-untracked-file/untracked &&
	git init repo-with-commit-no-files &&
	git -C repo-with-commit-no-files commit --allow-empty -mmsg &&
	git init repo-with-commit-untracked-file &&
	test_commit -C repo-with-commit-untracked-file msg &&
	: >repo-with-commit-untracked-file/untracked

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3009-ls-files-others-nonsubmodule/repo-no-commit-no-files/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3009-ls-files-others-nonsubmodule/repo-no-commit-untracked-file/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3009-ls-files-others-nonsubmodule/repo-with-commit-no-files/.git/
[master (root-commit) b4b9816] msg
 Author: A U Thor <author@example.com>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3009-ls-files-others-nonsubmodule/repo-with-commit-untracked-file/.git/
[master (root-commit) c24fc06] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 msg.t
ok 1 - setup: directories

expecting success of 3009.2 'ls-files --others handles untracked git repositories': 
	git ls-files -o >output &&
	cat >expect <<-EOF &&
	nonrepo-untracked-file/untracked
	output
	repo-no-commit-no-files/
	repo-no-commit-untracked-file/
	repo-with-commit-no-files/
	repo-with-commit-untracked-file/
	EOF
	test_cmp expect output

ok 2 - ls-files --others handles untracked git repositories

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3010-ls-files-killed-modified.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3010-ls-files-killed-modified/.git/
expecting success of 3010.1 'git update-index --add to add various paths.': 
	date >path0 &&
	test_ln_s_add xyzzy path1 &&
	mkdir path2 path3 pathx &&
	date >path2/file2 &&
	date >path3/file3 &&
	>pathx/ju &&
	: >path7 &&
	date >path8 &&
	: >path9 &&
	date >path10 &&
	git update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 &&
	git init submod1 &&
	git -C submod1 commit --allow-empty -m "empty 1" &&
	git init submod2 &&
	git -C submod2 commit --allow-empty -m "empty 2" &&
	git update-index --add submod[12] &&
	(
		cd submod1 &&
		git commit --allow-empty -m "empty 1 (updated)"
	) &&
	rm -fr path?	# leave path10 alone

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3010-ls-files-killed-modified/submod1/.git/
[master (root-commit) 4da6488] empty 1
 Author: A U Thor <author@example.com>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3010-ls-files-killed-modified/submod2/.git/
[master (root-commit) 2720aba] empty 2
 Author: A U Thor <author@example.com>
[master c92551b] empty 1 (updated)
 Author: A U Thor <author@example.com>
ok 1 - git update-index --add to add various paths.

expecting success of 3010.2 'git ls-files -k to show killed files.': 
	date >path2 &&
	if test_have_prereq SYMLINKS
	then
		ln -s frotz path3 &&
		ln -s nitfol path5
	else
		date >path3 &&
		date >path5
	fi &&
	mkdir -p path0 path1 path6 pathx/ju &&
	date >path0/file0 &&
	date >path1/file1 &&
	date >path6/file6 &&
	date >path7 &&
	: >path8 &&
	: >path9 &&
	touch path10 &&
	>pathx/ju/nk &&
	cat >.expected <<-\EOF
	path0/file0
	path1/file1
	path2
	path3
	pathx/ju/nk
	EOF

ok 2 - git ls-files -k to show killed files.

expecting success of 3010.3 'git ls-files -k output (w/o icase)': 
	git ls-files -k >.output &&
	test_cmp .expected .output

ok 3 - git ls-files -k output (w/o icase)

expecting success of 3010.4 'git ls-files -k output (w/ icase)': 
	git -c core.ignorecase=true ls-files -k >.output &&
	test_cmp .expected .output

ok 4 - git ls-files -k output (w/ icase)

expecting success of 3010.5 'git ls-files -m to show modified files.': 
	git ls-files -m >.output

ok 5 - git ls-files -m to show modified files.

expecting success of 3010.6 'validate git ls-files -m output.': 
	cat >.expected <<-\EOF &&
	path0
	path1
	path2/file2
	path3/file3
	path7
	path8
	pathx/ju
	submod1
	EOF
	test_cmp .expected .output

ok 6 - validate git ls-files -m output.

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3011-common-prefixes-and-directory-traversal.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3011-common-prefixes-and-directory-traversal/.git/
expecting success of 3011.1 'setup': 
	test_commit hello &&

	>empty &&
	mkdir untracked_dir &&
	>untracked_dir/empty &&
	git init untracked_repo &&
	>untracked_repo/empty &&

	cat <<-EOF >.gitignore &&
	ignored
	an_ignored_dir/
	EOF
	mkdir an_ignored_dir &&
	mkdir an_untracked_dir &&
	>an_ignored_dir/ignored &&
	>an_ignored_dir/untracked &&
	>an_untracked_dir/ignored &&
	>an_untracked_dir/untracked

[master (root-commit) 7dd16e1] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3011-common-prefixes-and-directory-traversal/untracked_repo/.git/
ok 1 - setup

expecting success of 3011.2 'git ls-files -o shows the right entries': 
	cat <<-EOF >expect &&
	.gitignore
	actual
	an_ignored_dir/ignored
	an_ignored_dir/untracked
	an_untracked_dir/ignored
	an_untracked_dir/untracked
	empty
	expect
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o >actual &&
	test_cmp expect actual

ok 2 - git ls-files -o shows the right entries

expecting success of 3011.3 'git ls-files -o --exclude-standard shows the right entries': 
	cat <<-EOF >expect &&
	.gitignore
	actual
	an_untracked_dir/untracked
	empty
	expect
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o --exclude-standard >actual &&
	test_cmp expect actual

ok 3 - git ls-files -o --exclude-standard shows the right entries

expecting success of 3011.4 'git ls-files -o untracked_dir recurses': 
	echo untracked_dir/empty >expect &&
	git ls-files -o untracked_dir >actual &&
	test_cmp expect actual

ok 4 - git ls-files -o untracked_dir recurses

expecting success of 3011.5 'git ls-files -o untracked_dir/ recurses': 
	echo untracked_dir/empty >expect &&
	git ls-files -o untracked_dir/ >actual &&
	test_cmp expect actual

ok 5 - git ls-files -o untracked_dir/ recurses

expecting success of 3011.6 'git ls-files -o --directory untracked_dir does not recurse': 
	echo untracked_dir/ >expect &&
	git ls-files -o --directory untracked_dir >actual &&
	test_cmp expect actual

ok 6 - git ls-files -o --directory untracked_dir does not recurse

expecting success of 3011.7 'git ls-files -o --directory untracked_dir/ does not recurse': 
	echo untracked_dir/ >expect &&
	git ls-files -o --directory untracked_dir/ >actual &&
	test_cmp expect actual

ok 7 - git ls-files -o --directory untracked_dir/ does not recurse

expecting success of 3011.8 'git ls-files -o untracked_repo does not recurse': 
	echo untracked_repo/ >expect &&
	git ls-files -o untracked_repo >actual &&
	test_cmp expect actual

ok 8 - git ls-files -o untracked_repo does not recurse

expecting success of 3011.9 'git ls-files -o untracked_repo/ does not recurse': 
	echo untracked_repo/ >expect &&
	git ls-files -o untracked_repo/ >actual &&
	test_cmp expect actual

ok 9 - git ls-files -o untracked_repo/ does not recurse

expecting success of 3011.10 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only': 
	cat <<-EOF >expect &&
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o untracked_dir untracked_repo >actual &&
	test_cmp expect actual

ok 10 - git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only

expecting success of 3011.11 'git ls-files -o untracked_dir/ untracked_repo/ recurses into untracked_dir only': 
	cat <<-EOF >expect &&
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o untracked_dir/ untracked_repo/ >actual &&
	test_cmp expect actual

ok 11 - git ls-files -o untracked_dir/ untracked_repo/ recurses into untracked_dir only

expecting success of 3011.12 'git ls-files -o --directory untracked_dir untracked_repo does not recurse': 
	cat <<-EOF >expect &&
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory untracked_dir untracked_repo >actual &&
	test_cmp expect actual

ok 12 - git ls-files -o --directory untracked_dir untracked_repo does not recurse

expecting success of 3011.13 'git ls-files -o --directory untracked_dir/ untracked_repo/ does not recurse': 
	cat <<-EOF >expect &&
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory untracked_dir/ untracked_repo/ >actual &&
	test_cmp expect actual

ok 13 - git ls-files -o --directory untracked_dir/ untracked_repo/ does not recurse

expecting success of 3011.14 'git ls-files -o .git shows nothing': 
	git ls-files -o .git >actual &&
	test_must_be_empty actual

ok 14 - git ls-files -o .git shows nothing

expecting success of 3011.15 'git ls-files -o .git/ shows nothing': 
	git ls-files -o .git/ >actual &&
	test_must_be_empty actual

ok 15 - git ls-files -o .git/ shows nothing

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 3011.16 'git ls-files -o untracked_* recurses appropriately': 
	mkdir "untracked_*" &&
	>"untracked_*/empty" &&

	cat <<-EOF >expect &&
	untracked_*/empty
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o "untracked_*" >actual &&
	test_cmp expect actual

ok 16 - git ls-files -o untracked_* recurses appropriately

checking known breakage of 3011.17 'git ls-files -o untracked_*/ recurses appropriately': 
	cat <<-EOF >expect &&
	untracked_*/empty
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o "untracked_*/" >actual &&
	test_cmp expect actual

--- expect	2022-12-28 07:37:14.421517218 +0000
+++ actual	2022-12-28 07:37:14.446518142 +0000
@@ -1,3 +1,2 @@
 untracked_*/empty
-untracked_dir/empty
 untracked_repo/
not ok 17 - git ls-files -o untracked_*/ recurses appropriately # TODO known breakage

expecting success of 3011.18 'git ls-files -o --directory untracked_* does not recurse': 
	cat <<-EOF >expect &&
	untracked_*/
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory "untracked_*" >actual &&
	test_cmp expect actual

ok 18 - git ls-files -o --directory untracked_* does not recurse

expecting success of 3011.19 'git ls-files -o --directory untracked_*/ does not recurse': 
	cat <<-EOF >expect &&
	untracked_*/
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory "untracked_*/" >actual &&
	test_cmp expect actual

ok 19 - git ls-files -o --directory untracked_*/ does not recurse

expecting success of 3011.20 'git ls-files -o consistent between one or two dirs': 
	git ls-files -o --exclude-standard an_ignored_dir/ an_untracked_dir/ >tmp &&
	! grep ^an_ignored_dir/ tmp >expect &&
	git ls-files -o --exclude-standard an_ignored_dir/ >actual &&
	test_cmp expect actual

ok 20 - git ls-files -o consistent between one or two dirs

expecting success of 3011.21 'git status --ignored shows same files under dir with or without pathspec': 
	cat <<-EOF >expect &&
	?? an_untracked_dir/
	!! an_untracked_dir/ignored
	EOF
	git status --porcelain --ignored >output &&
	grep an_untracked_dir output >expect &&
	git status --porcelain --ignored an_untracked_dir/ >actual &&
	test_cmp expect actual

ok 21 - git status --ignored shows same files under dir with or without pathspec

# still have 1 known breakage(s)
# passed all remaining 20 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3012-ls-files-dedup.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3012-ls-files-dedup/.git/
expecting success of 3012.1 'setup': 
	>a.txt &&
	>b.txt &&
	>delete.txt &&
	git add a.txt b.txt delete.txt &&
	git commit -m base &&
	echo a >a.txt &&
	echo b >b.txt &&
	echo delete >delete.txt &&
	git add a.txt b.txt delete.txt &&
	git commit -m tip &&
	git tag tip &&
	git reset --hard HEAD^ &&
	echo change >a.txt &&
	git commit -a -m side &&
	git tag side

[master (root-commit) 211e5bc] base
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a.txt
 create mode 100644 b.txt
 create mode 100644 delete.txt
[master 8a0f78f] tip
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
HEAD is now at 211e5bc base
[master 692b228] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3012.2 'git ls-files --deduplicate to show unique unmerged path': 
	test_must_fail git merge tip &&
	git ls-files --deduplicate >actual &&
	cat >expect <<-\EOF &&
	a.txt
	b.txt
	delete.txt
	EOF
	test_cmp expect actual &&
	git merge --abort

Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - git ls-files --deduplicate to show unique unmerged path

expecting success of 3012.3 'git ls-files -d -m --deduplicate with different display options': 
	git reset --hard side &&
	test_must_fail git merge tip &&
	rm delete.txt &&
	git ls-files -d -m --deduplicate >actual &&
	cat >expect <<-\EOF &&
	a.txt
	delete.txt
	EOF
	test_cmp expect actual &&
	git ls-files -d -m -t --deduplicate >actual &&
	cat >expect <<-\EOF &&
	C a.txt
	C a.txt
	C a.txt
	R delete.txt
	C delete.txt
	EOF
	test_cmp expect actual &&
	git ls-files -d -m -c --deduplicate >actual &&
	cat >expect <<-\EOF &&
	a.txt
	b.txt
	delete.txt
	EOF
	test_cmp expect actual &&
	git merge --abort

HEAD is now at 692b228 side
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 3 - git ls-files -d -m --deduplicate with different display options

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3007-ls-files-recurse-submodules.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/.git/
expecting success of 3007.1 'setup directory structure and submodules': 
	echo a >a &&
	mkdir b &&
	echo b >b/b &&
	git add a b &&
	git commit -m "add a and b" &&
	git init submodule &&
	echo c >submodule/c &&
	git -C submodule add c &&
	git -C submodule commit -m "add c" &&
	git submodule add ./submodule &&
	git commit -m "added submodule"

[master (root-commit) f320cab] add a and b
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b/b
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/submodule/.git/
[master (root-commit) 3281629] add c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
Adding existing repo at 'submodule' to the index
[master 14616f7] added submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 1 - setup directory structure and submodules

expecting success of 3007.2 'ls-files correctly outputs files in submodule': 
	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	submodule/c
	EOF

	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual

ok 2 - ls-files correctly outputs files in submodule

expecting success of 3007.3 '--stage': 
	GITMODULES_HASH=$(git rev-parse HEAD:.gitmodules) &&
	A_HASH=$(git rev-parse HEAD:a) &&
	B_HASH=$(git rev-parse HEAD:b/b) &&
	C_HASH=$(git -C submodule rev-parse HEAD:c) &&

	cat >expect <<-EOF &&
	100644 $GITMODULES_HASH 0	.gitmodules
	100644 $A_HASH 0	a
	100644 $B_HASH 0	b/b
	100644 $C_HASH 0	submodule/c
	EOF

	git ls-files --stage --recurse-submodules >actual &&
	test_cmp expect actual

ok 3 - --stage

expecting success of 3007.4 'ls-files correctly outputs files in submodule with -z': 
	lf_to_nul >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	submodule/c
	EOF

	git ls-files --recurse-submodules -z >actual &&
	test_cmp expect actual

ok 4 - ls-files correctly outputs files in submodule with -z

expecting success of 3007.5 'ls-files does not output files not added to a repo': 
	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	submodule/c
	EOF

	echo a >not_added &&
	echo b >b/not_added &&
	echo c >submodule/not_added &&
	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual

ok 5 - ls-files does not output files not added to a repo

expecting success of 3007.6 'ls-files recurses more than 1 level': 
	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	submodule/.gitmodules
	submodule/c
	submodule/subsub/d
	EOF

	git init submodule/subsub &&
	echo d >submodule/subsub/d &&
	git -C submodule/subsub add d &&
	git -C submodule/subsub commit -m "add d" &&
	git -C submodule submodule add ./subsub &&
	git -C submodule commit -m "added subsub" &&
	git submodule absorbgitdirs &&
	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/submodule/subsub/.git/
[master (root-commit) 0cb03c9] add d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d
Adding existing repo at 'subsub' to the index
[master 83d4bc1] added subsub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subsub
Migrating git directory of 'submodule' from
'/<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/submodule/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/.git/modules/submodule'
Migrating git directory of 'submodule/subsub' from
'/<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/submodule/subsub/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/.git/modules/submodule/modules/subsub'
ok 6 - ls-files recurses more than 1 level

expecting success of 3007.7 'ls-files works with GIT_DIR': 
	cat >expect <<-\EOF &&
	.gitmodules
	c
	subsub/d
	EOF

	git --git-dir=submodule/.git ls-files --recurse-submodules >actual &&
	test_cmp expect actual

ok 7 - ls-files works with GIT_DIR

expecting success of 3007.8 '--recurse-submodules and pathspecs setup': 
	echo e >submodule/subsub/e.txt &&
	git -C submodule/subsub add e.txt &&
	git -C submodule/subsub commit -m "adding e.txt" &&
	echo f >submodule/f.TXT &&
	echo g >submodule/g.txt &&
	git -C submodule add f.TXT g.txt &&
	git -C submodule commit -m "add f and g" &&
	echo h >h.txt &&
	mkdir sib &&
	echo sib >sib/file &&
	git add h.txt sib/file &&
	git commit -m "add h and sib/file" &&
	git init sub &&
	echo sub >sub/file &&
	git -C sub add file &&
	git -C sub commit -m "add file" &&
	git submodule add ./sub &&
	git commit -m "added sub" &&

	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	h.txt
	sib/file
	sub/file
	submodule/.gitmodules
	submodule/c
	submodule/f.TXT
	submodule/g.txt
	submodule/subsub/d
	submodule/subsub/e.txt
	EOF

	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "*" >actual &&
	test_cmp expect actual

[master 562fffb] adding e.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e.txt
[master f284b88] add f and g
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 f.TXT
 create mode 100644 g.txt
[master ad13f14] add h and sib/file
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 h.txt
 create mode 100644 sib/file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3007-ls-files-recurse-submodules/sub/.git/
[master (root-commit) e443189] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Adding existing repo at 'sub' to the index
[master 4a68fc6] added sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub
ok 8 - --recurse-submodules and pathspecs setup

expecting success of 3007.9 'inactive submodule': 
	test_when_finished "git config --bool submodule.submodule.active true" &&
	test_when_finished "git -C submodule config --bool submodule.subsub.active true" &&
	git config --bool submodule.submodule.active "false" &&

	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	h.txt
	sib/file
	sub/file
	submodule
	EOF

	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual &&

	git config --bool submodule.submodule.active "true" &&
	git -C submodule config --bool submodule.subsub.active "false" &&

	cat >expect <<-\EOF &&
	.gitmodules
	a
	b/b
	h.txt
	sib/file
	sub/file
	submodule/.gitmodules
	submodule/c
	submodule/f.TXT
	submodule/g.txt
	submodule/subsub
	EOF

	git ls-files --recurse-submodules >actual &&
	test_cmp expect actual

ok 9 - inactive submodule

expecting success of 3007.10 '--recurse-submodules and pathspecs': 
	cat >expect <<-\EOF &&
	h.txt
	submodule/g.txt
	submodule/subsub/e.txt
	EOF

	git ls-files --recurse-submodules "*.txt" >actual &&
	test_cmp expect actual

ok 10 - --recurse-submodules and pathspecs

expecting success of 3007.11 '--recurse-submodules and pathspecs': 
	cat >expect <<-\EOF &&
	h.txt
	submodule/f.TXT
	submodule/g.txt
	submodule/subsub/e.txt
	EOF

	git ls-files --recurse-submodules ":(icase)*.txt" >actual &&
	test_cmp expect actual

ok 11 - --recurse-submodules and pathspecs

expecting success of 3007.12 '--recurse-submodules and pathspecs': 
	cat >expect <<-\EOF &&
	h.txt
	submodule/f.TXT
	submodule/g.txt
	EOF

	git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual &&
	test_cmp expect actual

ok 12 - --recurse-submodules and pathspecs

expecting success of 3007.13 '--recurse-submodules and pathspecs': 
	cat >expect <<-\EOF &&
	sub/file
	EOF

	git ls-files --recurse-submodules "sub" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "sub/" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "sub/file" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "su*/file" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "su?/file" >actual &&
	test_cmp expect actual

ok 13 - --recurse-submodules and pathspecs

expecting success of 3007.14 '--recurse-submodules and pathspecs': 
	cat >expect <<-\EOF &&
	sib/file
	sub/file
	EOF

	git ls-files --recurse-submodules "s??/file" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "s???file" >actual &&
	test_cmp expect actual &&
	git ls-files --recurse-submodules "s*file" >actual &&
	test_cmp expect actual

ok 14 - --recurse-submodules and pathspecs

expecting success of 3007.15 '--recurse-submodules and relative paths': 
	# From subdir
	cat >expect <<-\EOF &&
	b
	EOF
	git -C b ls-files --recurse-submodules >actual &&
	test_cmp expect actual &&

	# Relative path to top
	cat >expect <<-\EOF &&
	../.gitmodules
	../a
	b
	../h.txt
	../sib/file
	../sub/file
	../submodule/.gitmodules
	../submodule/c
	../submodule/f.TXT
	../submodule/g.txt
	../submodule/subsub/d
	../submodule/subsub/e.txt
	EOF
	git -C b ls-files --recurse-submodules -- .. >actual &&
	test_cmp expect actual &&

	# Relative path to submodule
	cat >expect <<-\EOF &&
	../submodule/.gitmodules
	../submodule/c
	../submodule/f.TXT
	../submodule/g.txt
	../submodule/subsub/d
	../submodule/subsub/e.txt
	EOF
	git -C b ls-files --recurse-submodules -- ../submodule >actual &&
	test_cmp expect actual

ok 15 - --recurse-submodules and relative paths

expecting success of 3007.16 '--recurse-submodules does not support --error-unmatch': 
	test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
	test_i18ngrep "does not support --error-unmatch" actual

fatal: ls-files --recurse-submodules does not support --error-unmatch
ok 16 - --recurse-submodules does not support --error-unmatch

expecting success of 3007.17 '--recurse-submodules and --deleted are incompatible': 
		test_must_fail git ls-files --recurse-submodules --deleted 2>actual &&
		test_i18ngrep 'unsupported mode' actual
	
fatal: ls-files --recurse-submodules unsupported mode
ok 17 - --recurse-submodules and --deleted are incompatible

expecting success of 3007.18 '--recurse-submodules and --modified are incompatible': 
		test_must_fail git ls-files --recurse-submodules --modified 2>actual &&
		test_i18ngrep 'unsupported mode' actual
	
fatal: ls-files --recurse-submodules unsupported mode
ok 18 - --recurse-submodules and --modified are incompatible

expecting success of 3007.19 '--recurse-submodules and --others are incompatible': 
		test_must_fail git ls-files --recurse-submodules --others 2>actual &&
		test_i18ngrep 'unsupported mode' actual
	
fatal: ls-files --recurse-submodules unsupported mode
ok 19 - --recurse-submodules and --others are incompatible

expecting success of 3007.20 '--recurse-submodules and --killed are incompatible': 
		test_must_fail git ls-files --recurse-submodules --killed 2>actual &&
		test_i18ngrep 'unsupported mode' actual
	
fatal: ls-files --recurse-submodules unsupported mode
ok 20 - --recurse-submodules and --killed are incompatible

expecting success of 3007.21 '--recurse-submodules and --unmerged are incompatible': 
		test_must_fail git ls-files --recurse-submodules --unmerged 2>actual &&
		test_i18ngrep 'unsupported mode' actual
	
fatal: ls-files --recurse-submodules unsupported mode
ok 21 - --recurse-submodules and --unmerged are incompatible

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3020-ls-files-error-unmatch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3020-ls-files-error-unmatch/.git/
expecting success of 3020.1 'setup': 
	touch foo bar &&
	git update-index --add foo bar &&
	git commit -m "add foo bar"

[master (root-commit) 6c59e8c] add foo bar
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
 create mode 100644 foo
ok 1 - setup

expecting success of 3020.2 'git ls-files --error-unmatch should fail with unmatched path.': 
	test_must_fail git ls-files --error-unmatch foo bar-does-not-match

error: pathspec 'bar-does-not-match' did not match any file(s) known to git
Did you forget to 'git add'?
foo
ok 2 - git ls-files --error-unmatch should fail with unmatched path.

expecting success of 3020.3 'git ls-files --error-unmatch should succeed with matched paths.': 
	git ls-files --error-unmatch foo bar

bar
foo
ok 3 - git ls-files --error-unmatch should succeed with matched paths.

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3013-ls-files-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3013-ls-files-format/.git/
expecting success of 3013.1 'usage: --format is incompatible with -s': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 1 - usage: --format is incompatible with -s

expecting success of 3013.2 'usage: --format is incompatible with -o': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 2 - usage: --format is incompatible with -o

expecting success of 3013.3 'usage: --format is incompatible with -k': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 3 - usage: --format is incompatible with -k

expecting success of 3013.4 'usage: --format is incompatible with -t': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 4 - usage: --format is incompatible with -t

expecting success of 3013.5 'usage: --format is incompatible with --resolve-undo': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 5 - usage: --format is incompatible with --resolve-undo

expecting success of 3013.6 'usage: --format is incompatible with --deduplicate': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 6 - usage: --format is incompatible with --deduplicate

expecting success of 3013.7 'usage: --format is incompatible with --eol': 
		test_expect_code 129 git ls-files --format="%(objectname)" $flag
	
fatal: --format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, --eol

usage: git ls-files [<options>] [<file>...]

    -z                    separate paths with the NUL character
    -t                    identify the file status with tags
    -v                    use lowercase letters for 'assume unchanged' files
    -f                    use lowercase letters for 'fsmonitor clean' files
    -c, --cached          show cached files in the output (default)
    -d, --deleted         show deleted files in the output
    -m, --modified        show modified files in the output
    -o, --others          show other files in the output
    -i, --ignored         show ignored files in the output
    -s, --stage           show staged contents' object name in the output
    -k, --killed          show files on the filesystem that need to be removed
    --directory           show 'other' directories' names only
    --eol                 show line endings of files
    --empty-directory     don't show empty directories
    -u, --unmerged        show unmerged files in the output
    --resolve-undo        show resolve-undo information
    -x, --exclude <pattern>
                          skip files matching pattern
    -X, --exclude-from <file>
                          read exclude patterns from <file>
    --exclude-per-directory <file>
                          read additional per-directory exclude patterns in <file>
    --exclude-standard    add the standard git exclusions
    --full-name           make the output relative to the project top directory
    --recurse-submodules  recurse through submodules
    --error-unmatch       if any <file> is not in the index, treat this as an error
    --with-tree <tree-ish>
                          pretend that paths removed since <tree-ish> are still present
    --abbrev[=<n>]        use <n> digits to display object names
    --debug               show debugging data
    --deduplicate         suppress duplicate entries
    --sparse              show sparse directories in the presence of a sparse index
    --format <format>     format to use for the output

ok 7 - usage: --format is incompatible with --eol

expecting success of 3013.8 'setup': 
	printf "LINEONE\nLINETWO\nLINETHREE\n" >o1.txt &&
	printf "LINEONE\r\nLINETWO\r\nLINETHREE\r\n" >o2.txt &&
	printf "LINEONE\r\nLINETWO\nLINETHREE\n" >o3.txt &&
	git add o?.txt &&
	oid=$(git hash-object o1.txt) &&
	git update-index --add --cacheinfo 120000 $oid o4.txt &&
	git update-index --add --cacheinfo 160000 $oid o5.txt &&
	git update-index --add --cacheinfo 100755 $oid o6.txt &&
	git commit -m base

[master (root-commit) 8422806] base
 Author: A U Thor <author@example.com>
 6 files changed, 16 insertions(+)
 create mode 100644 o1.txt
 create mode 100644 o2.txt
 create mode 100644 o3.txt
 create mode 120000 o4.txt
 create mode 160000 o5.txt
 create mode 100755 o6.txt
ok 8 - setup

expecting success of 3013.9 'git ls-files --format objectmode v.s. -s': 
	git ls-files -s >files &&
	cut -d" " -f1 files >expect &&
	git ls-files --format="%(objectmode)" >actual &&
	test_cmp expect actual

ok 9 - git ls-files --format objectmode v.s. -s

expecting success of 3013.10 'git ls-files --format objectname v.s. -s': 
	git ls-files -s >files &&
	cut -d" " -f2 files >expect &&
	git ls-files --format="%(objectname)" >actual &&
	test_cmp expect actual

ok 10 - git ls-files --format objectname v.s. -s

expecting success of 3013.11 'git ls-files --format v.s. --eol': 
	git ls-files --eol >tmp &&
	sed -e "s/	/ /g" -e "s/  */ /g" tmp >expect 2>err &&
	test_must_be_empty err &&
	git ls-files --format="i/%(eolinfo:index) w/%(eolinfo:worktree) attr/%(eolattr) %(path)" >actual 2>err &&
	test_must_be_empty err &&
	test_cmp expect actual

ok 11 - git ls-files --format v.s. --eol

expecting success of 3013.12 'git ls-files --format path v.s. -s': 
	git ls-files -s >files &&
	cut -f2 files >expect &&
	git ls-files --format="%(path)" >actual &&
	test_cmp expect actual

ok 12 - git ls-files --format path v.s. -s

expecting success of 3013.13 'git ls-files --format with -m': 
	echo change >o1.txt &&
	cat >expect <<-\EOF &&
	o1.txt
	o4.txt
	o5.txt
	o6.txt
	EOF
	git ls-files --format="%(path)" -m >actual &&
	test_cmp expect actual

ok 13 - git ls-files --format with -m

expecting success of 3013.14 'git ls-files --format with -d': 
	echo o7 >o7.txt &&
	git add o7.txt &&
	rm o7.txt &&
	cat >expect <<-\EOF &&
	o4.txt
	o5.txt
	o6.txt
	o7.txt
	EOF
	git ls-files --format="%(path)" -d >actual &&
	test_cmp expect actual

ok 14 - git ls-files --format with -d

expecting success of 3013.15 'git ls-files --format v.s -s': 
	git ls-files --stage >expect &&
	git ls-files --format="%(objectmode) %(objectname) %(stage)%x09%(path)" >actual &&
	test_cmp expect actual

ok 15 - git ls-files --format v.s -s

expecting success of 3013.16 'git ls-files --format with --debug': 
	git ls-files --debug >expect &&
	git ls-files --format="%(path)" --debug >actual &&
	test_cmp expect actual

ok 16 - git ls-files --format with --debug

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3040-subprojects-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3040-subprojects-basic/.git/
expecting success of 3040.1 'setup: create superproject': 
	: >Makefile &&
	git add Makefile &&
	git commit -m "Superproject created"

[master (root-commit) 0075abc] Superproject created
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Makefile
ok 1 - setup: create superproject

expecting success of 3040.2 'setup: create subprojects': 
	mkdir sub1 &&
	( cd sub1 && git init && : >Makefile && git add * &&
	git commit -q -m "subproject 1" ) &&
	mkdir sub2 &&
	( cd sub2 && git init && : >Makefile && git add * &&
	git commit -q -m "subproject 2" ) &&
	git update-index --add sub1 &&
	git add sub2 &&
	git commit -q -m "subprojects added" &&
	GIT_PRINT_SHA1_ELLIPSIS="yes" git diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current &&
	git branch save HEAD &&
	cat >expected <<-\EOF &&
	:000000 160000 00000... A	sub1
	:000000 160000 00000... A	sub2
	EOF
	test_cmp expected current

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3040-subprojects-basic/sub1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3040-subprojects-basic/sub2/.git/
warning: adding embedded git repository: sub2
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub2
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub2
hint: 
hint: See "git help submodule" for more information.
ok 2 - setup: create subprojects

expecting success of 3040.3 'check if fsck ignores the subprojects': 
	git fsck --full

ok 3 - check if fsck ignores the subprojects

expecting success of 3040.4 'check if commit in a subproject detected': 
	( cd sub1 &&
	echo "all:" >>Makefile &&
	echo "	true" >>Makefile &&
	git commit -q -a -m "make all" ) &&
	test_expect_code 1 git diff-files --exit-code

:160000 160000 1220b9f3ace6404f5c782bba5e262aaaf38310fb 0000000000000000000000000000000000000000 M	sub1
ok 4 - check if commit in a subproject detected

expecting success of 3040.5 'check if a changed subproject HEAD can be committed': 
	git commit -q -a -m "sub1 changed" &&
	test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD

:160000 160000 1220b9f3ace6404f5c782bba5e262aaaf38310fb 487e23047a2a8ed2c84b1478b3e52375e3ae3334 M	sub1
ok 5 - check if a changed subproject HEAD can be committed

expecting success of 3040.6 'check if diff-index works for subproject elements': 
	test_expect_code 1 git diff-index --exit-code --cached save -- sub1

:160000 160000 1220b9f3ace6404f5c782bba5e262aaaf38310fb 487e23047a2a8ed2c84b1478b3e52375e3ae3334 M	sub1
ok 6 - check if diff-index works for subproject elements

expecting success of 3040.7 'check if diff-tree works for subproject elements': 
	test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- sub1

:160000 160000 1220b9f3ace6404f5c782bba5e262aaaf38310fb 487e23047a2a8ed2c84b1478b3e52375e3ae3334 M	sub1
ok 7 - check if diff-tree works for subproject elements

expecting success of 3040.8 'check if git diff works for subproject elements': 
	test_expect_code 1 git diff --exit-code HEAD^ HEAD

diff --git a/sub1 b/sub1
index 1220b9f..487e230 160000
--- a/sub1
+++ b/sub1
@@ -1 +1 @@
-Subproject commit 1220b9f3ace6404f5c782bba5e262aaaf38310fb
+Subproject commit 487e23047a2a8ed2c84b1478b3e52375e3ae3334
ok 8 - check if git diff works for subproject elements

expecting success of 3040.9 'check if clone works': 
	git ls-files -s >expected &&
	git clone -l -s . cloned &&
	( cd cloned && git ls-files -s ) >current &&
	test_cmp expected current

Cloning into 'cloned'...
done.
ok 9 - check if clone works

expecting success of 3040.10 'removing and adding subproject': 
	git update-index --force-remove -- sub2 &&
	mv sub2 sub3 &&
	git add sub3 &&
	git commit -q -m "renaming a subproject" &&
	test_expect_code 1 git diff -M --name-status --exit-code HEAD^ HEAD

warning: adding embedded git repository: sub3
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub3
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub3
hint: 
hint: See "git help submodule" for more information.
R100	sub2	sub3
ok 10 - removing and adding subproject

expecting success of 3040.11 'checkout in superproject': 
	git checkout save &&
	git diff-index --exit-code --raw --cached save -- sub1

warning: unable to rmdir 'sub3': Directory not empty
Switched to branch 'save'
M	sub1
ok 11 - checkout in superproject

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3050-subprojects-fetch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3050-subprojects-fetch/.git/
expecting success of 3050.1 'setup': 
	test_tick &&
	mkdir -p sub && (
		cd sub &&
		git init &&
		>subfile &&
		git add subfile &&
		git commit -m "subproject commit #1"
	) &&
	>mainfile &&
	git add sub mainfile &&
	test_tick &&
	git commit -m "superproject commit #1"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3050-subprojects-fetch/sub/.git/
[master (root-commit) 4c0c877] subproject commit #1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 subfile
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) 1226c2e] superproject commit #1
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 mainfile
 create mode 160000 sub
ok 1 - setup

expecting success of 3050.2 'clone': 
	git clone "file://$(pwd)/.git" cloned &&
	(git rev-parse HEAD && git ls-files -s) >expected &&
	(
		cd cloned &&
		(git rev-parse HEAD && git ls-files -s) >../actual
	) &&
	test_cmp expected actual

Cloning into 'cloned'...
ok 2 - clone

expecting success of 3050.3 'advance': 
	echo more >mainfile &&
	git update-index --force-remove sub &&
	mv sub/.git sub/.git-disabled &&
	git add sub/subfile mainfile &&
	mv sub/.git-disabled sub/.git &&
	test_tick &&
	git commit -m "superproject commit #2"

[master 1548ecd] superproject commit #2
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 160000 sub
 create mode 100644 sub/subfile
ok 3 - advance

expecting success of 3050.4 'fetch': 
	(git rev-parse HEAD && git ls-files -s) >expected &&
	(
		cd cloned &&
		git pull &&
		(git rev-parse HEAD && git ls-files -s) >../actual
	) &&
	test_cmp expected actual

From file:///<<PKGBUILDDIR>>/t/trash directory.t3050-subprojects-fetch/
   1226c2e..1548ecd  master     -> origin/master
Updating 1226c2e..1548ecd
Fast-forward
 mainfile    | 1 +
 sub         | 1 -
 sub/subfile | 0
 3 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 160000 sub
 create mode 100644 sub/subfile
ok 4 - fetch

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t1092-sparse-checkout-compatibility.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1092-sparse-checkout-compatibility/.git/
expecting success of 1092.1 'setup': 
	git init initial-repo &&
	(
		GIT_TEST_SPARSE_INDEX=0 &&
		cd initial-repo &&
		echo a >a &&
		echo "after deep" >e &&
		echo "after folder1" >g &&
		echo "after x" >z &&
		mkdir folder1 folder2 deep before x &&
		echo "before deep" >before/a &&
		echo "before deep again" >before/b &&
		mkdir deep/deeper1 deep/deeper2 deep/before deep/later &&
		mkdir deep/deeper1/deepest &&
		mkdir deep/deeper1/deepest2 &&
		mkdir deep/deeper1/deepest3 &&
		echo "after deeper1" >deep/e &&
		echo "after deepest" >deep/deeper1/e &&
		cp a folder1 &&
		cp a folder2 &&
		cp a x &&
		cp a deep &&
		cp a deep/before &&
		cp a deep/deeper1 &&
		cp a deep/deeper2 &&
		cp a deep/later &&
		cp a deep/deeper1/deepest &&
		cp a deep/deeper1/deepest2 &&
		cp a deep/deeper1/deepest3 &&
		cp -r deep/deeper1/ deep/deeper2 &&
		mkdir deep/deeper1/0 &&
		mkdir deep/deeper1/0/0 &&
		touch deep/deeper1/0/1 &&
		touch deep/deeper1/0/0/0 &&
		>folder1- &&
		>folder1.x &&
		>folder10 &&
		cp -r deep/deeper1/0 folder1 &&
		cp -r deep/deeper1/0 folder2 &&
		echo >>folder1/0/0/0 &&
		echo >>folder2/0/1 &&
		git add . &&
		git commit -m "initial commit" &&
		git checkout -b base &&
		for dir in folder1 folder2 deep
		do
			git checkout -b update-$dir base &&
			echo "updated $dir" >$dir/a &&
			git commit -a -m "update $dir" || return 1
		done &&

		git checkout -b rename-base base &&
		cat >folder1/larger-content <<-\EOF &&
		matching
		lines
		help
		inexact
		renames
		EOF
		cp folder1/larger-content folder2/ &&
		cp folder1/larger-content deep/deeper1/ &&
		git add . &&
		git commit -m "add interesting rename content" &&

		git checkout -b rename-out-to-out rename-base &&
		mv folder1/a folder2/b &&
		mv folder1/larger-content folder2/edited-content &&
		echo >>folder2/edited-content &&
		echo >>folder2/0/1 &&
		echo stuff >>deep/deeper1/a &&
		git add . &&
		git commit -m "rename folder1/... to folder2/..." &&

		git checkout -b rename-out-to-in rename-base &&
		mv folder1/a deep/deeper1/b &&
		echo more stuff >>deep/deeper1/a &&
		rm folder2/0/1 &&
		mkdir folder2/0/1 &&
		echo >>folder2/0/1/1 &&
		mv folder1/larger-content deep/deeper1/edited-content &&
		echo >>deep/deeper1/edited-content &&
		git add . &&
		git commit -m "rename folder1/... to deep/deeper1/..." &&

		git checkout -b rename-in-to-out rename-base &&
		mv deep/deeper1/a folder1/b &&
		echo >>folder2/0/1 &&
		rm -rf folder1/0/0 &&
		echo >>folder1/0/0 &&
		mv deep/deeper1/larger-content folder1/edited-content &&
		echo >>folder1/edited-content &&
		git add . &&
		git commit -m "rename deep/deeper1/... to folder1/..." &&

		git checkout -b df-conflict-1 base &&
		rm -rf folder1 &&
		echo content >folder1 &&
		git add . &&
		git commit -m "dir to file" &&

		git checkout -b df-conflict-2 base &&
		rm -rf folder2 &&
		echo content >folder2 &&
		git add . &&
		git commit -m "dir to file" &&

		git checkout -b fd-conflict base &&
		rm a &&
		mkdir a &&
		echo content >a/a &&
		git add . &&
		git commit -m "file to dir" &&

		for side in left right
		do
			git checkout -b merge-$side base &&
			echo $side >>deep/deeper2/a &&
			echo $side >>folder1/a &&
			echo $side >>folder2/a &&
			git add . &&
			git commit -m "$side" || return 1
		done &&

		git checkout -b deepest base &&
		echo "updated deepest" >deep/deeper1/deepest/a &&
		echo "updated deepest2" >deep/deeper1/deepest2/a &&
		echo "updated deepest3" >deep/deeper1/deepest3/a &&
		git commit -a -m "update deepest" &&

		git checkout -f base &&
		git reset --hard
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t1092-sparse-checkout-compatibility/initial-repo/.git/
[master (root-commit) 703fd3e] initial commit
 Author: A U Thor <author@example.com>
 33 files changed, 26 insertions(+)
 create mode 100644 a
 create mode 100644 before/a
 create mode 100644 before/b
 create mode 100644 deep/a
 create mode 100644 deep/before/a
 create mode 100644 deep/deeper1/0/0/0
 create mode 100644 deep/deeper1/0/1
 create mode 100644 deep/deeper1/a
 create mode 100644 deep/deeper1/deepest/a
 create mode 100644 deep/deeper1/deepest2/a
 create mode 100644 deep/deeper1/deepest3/a
 create mode 100644 deep/deeper1/e
 create mode 100644 deep/deeper2/a
 create mode 100644 deep/deeper2/deeper1/a
 create mode 100644 deep/deeper2/deeper1/deepest/a
 create mode 100644 deep/deeper2/deeper1/deepest2/a
 create mode 100644 deep/deeper2/deeper1/deepest3/a
 create mode 100644 deep/deeper2/deeper1/e
 create mode 100644 deep/e
 create mode 100644 deep/later/a
 create mode 100644 e
 create mode 100644 folder1-
 create mode 100644 folder1.x
 create mode 100644 folder1/0/0/0
 create mode 100644 folder1/0/1
 create mode 100644 folder1/a
 create mode 100644 folder10
 create mode 100644 folder2/0/0/0
 create mode 100644 folder2/0/1
 create mode 100644 folder2/a
 create mode 100644 g
 create mode 100644 x/a
 create mode 100644 z
Switched to a new branch 'base'
Switched to a new branch 'update-folder1'
[update-folder1 fa14324] update folder1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'update-folder2'
[update-folder2 2805da4] update folder2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'update-deep'
[update-deep ac61adf] update deep
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'rename-base'
[rename-base 5914bd8] add interesting rename content
 Author: A U Thor <author@example.com>
 3 files changed, 15 insertions(+)
 create mode 100644 deep/deeper1/larger-content
 create mode 100644 folder1/larger-content
 create mode 100644 folder2/larger-content
Switched to a new branch 'rename-out-to-out'
[rename-out-to-out 4a04e79] rename folder1/... to folder2/...
 Author: A U Thor <author@example.com>
 4 files changed, 3 insertions(+)
 rename folder1/a => folder2/b (100%)
 rename folder1/larger-content => folder2/edited-content (97%)
Switched to a new branch 'rename-out-to-in'
[rename-out-to-in d11c5fe] rename folder1/... to deep/deeper1/...
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 rename folder1/a => deep/deeper1/b (100%)
 rename folder1/larger-content => deep/deeper1/edited-content (97%)
 rename folder2/0/{ => 1}/1 (100%)
Switched to a new branch 'rename-in-to-out'
[rename-in-to-out e5d0f8e] rename deep/deeper1/... to folder1/...
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 rename folder1/0/{0 => }/0 (100%)
 rename deep/deeper1/a => folder1/b (100%)
 rename deep/deeper1/larger-content => folder1/edited-content (97%)
Switched to a new branch 'df-conflict-1'
[df-conflict-1 974b58d] dir to file
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 folder1
 delete mode 100644 folder1/0/0/0
 delete mode 100644 folder1/0/1
 delete mode 100644 folder1/a
Switched to a new branch 'df-conflict-2'
[df-conflict-2 bef3412] dir to file
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 folder2
 delete mode 100644 folder2/0/0/0
 delete mode 100644 folder2/0/1
 delete mode 100644 folder2/a
Switched to a new branch 'fd-conflict'
[fd-conflict 40c717f] file to dir
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 a
 create mode 100644 a/a
Switched to a new branch 'merge-left'
[merge-left 9721a77] left
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
Switched to a new branch 'merge-right'
[merge-right 4f73b62] right
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
Switched to a new branch 'deepest'
[deepest cb037bf] update deepest
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+), 3 deletions(-)
Switched to branch 'base'
HEAD is now at 703fd3e initial commit
ok 1 - setup

expecting success of 1092.2 'sparse-index contents': 
	init_repos &&

	# Remove deep, add three other directories.
	test_sparse_checkout_set \
		"folder1 folder2 x" \
		"before deep" &&

	# Remove folder1, add deep
	test_sparse_checkout_set \
		"deep folder2 x" \
		"before folder1" &&

	# Replace deep with deep/deeper2 (dropping deep/deeper1)
	# Add folder1
	test_sparse_checkout_set \
		"deep/deeper2 folder1 folder2 x" \
		"before deep/deeper1" &&

	# Replace deep/deeper2 with deep/deeper1
	# Replace folder1 with folder1/0/0
	# Replace folder2 with non-existent folder2/2/3
	# Add non-existent "bogus"
	test_sparse_checkout_set \
		"bogus deep/deeper1 folder1/0/0 folder2/2/3 x" \
		"before deep/deeper2 folder2/0" &&

	# Drop down to only files at root
	test_sparse_checkout_set \
		"" \
		"before deep folder1 folder2 x" &&

	# Disabling the sparse-index replaces tree entries with full ones
	git -C sparse-index sparse-checkout init --no-sparse-index &&
	test_sparse_match git ls-files --stage --sparse

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
040000 4499610892bdc57d5ebd35ebf695a57cd82ffe0e 0	before/
040000 ce536cb5137cec414526564049b9b175d835cde1 0	deep/
040000 4499610892bdc57d5ebd35ebf695a57cd82ffe0e 0	before/
040000 e0f2d30b633eb781d675fedd78808135103fe1a0 0	folder1/
040000 4499610892bdc57d5ebd35ebf695a57cd82ffe0e 0	before/
040000 10c8564bace86d48e22963bebe92e40ba8cfd937 0	deep/deeper1/
040000 4499610892bdc57d5ebd35ebf695a57cd82ffe0e 0	before/
040000 ca1fa788550e1b7b99256573687bd1dd7994e072 0	deep/deeper2/
040000 cb4007891397aa2a451037d1c69e57f0cf498c24 0	folder2/0/
fatal: path 'bogus' does not exist in 'HEAD'
fatal: path 'folder2/2/3' does not exist in 'HEAD'
040000 4499610892bdc57d5ebd35ebf695a57cd82ffe0e 0	before/
040000 ce536cb5137cec414526564049b9b175d835cde1 0	deep/
040000 e0f2d30b633eb781d675fedd78808135103fe1a0 0	folder1/
040000 123706f6fc38949628eaf0483edbf97ba21123ae 0	folder2/
040000 aaff74984cccd156a469afa7d9ab10e4777beb24 0	x/
ok 2 - sparse-index contents

expecting success of 1092.3 'expanded in-memory index matches full index': 
	init_repos &&
	test_sparse_match git ls-files --stage

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 3 - expanded in-memory index matches full index

expecting success of 1092.4 'root directory cannot be sparse': 
	init_repos &&

	# Remove all in-cone files and directories from the index, collapse index
	# with `git sparse-checkout reapply`
	git -C sparse-index rm -r . &&
	git -C sparse-index sparse-checkout reapply &&

	# Verify sparse directories still present, root directory is not sparse
	cat >expect <<-EOF &&
	before/
	folder1/
	folder2/
	x/
	EOF
	git -C sparse-index ls-files --sparse >actual &&
	test_cmp expect actual

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
rm 'a'
rm 'deep/a'
rm 'deep/before/a'
rm 'deep/deeper1/0/0/0'
rm 'deep/deeper1/0/1'
rm 'deep/deeper1/a'
rm 'deep/deeper1/deepest/a'
rm 'deep/deeper1/deepest2/a'
rm 'deep/deeper1/deepest3/a'
rm 'deep/deeper1/e'
rm 'deep/deeper2/a'
rm 'deep/deeper2/deeper1/a'
rm 'deep/deeper2/deeper1/deepest/a'
rm 'deep/deeper2/deeper1/deepest2/a'
rm 'deep/deeper2/deeper1/deepest3/a'
rm 'deep/deeper2/deeper1/e'
rm 'deep/e'
rm 'deep/later/a'
rm 'e'
rm 'folder1-'
rm 'folder1.x'
rm 'folder10'
rm 'g'
rm 'z'
ok 4 - root directory cannot be sparse

expecting success of 1092.5 'status with options': 
	init_repos &&
	test_sparse_match ls &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git status --porcelain=v2 -z -u &&
	test_all_match git status --porcelain=v2 -uno &&
	run_on_all touch README.md &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git status --porcelain=v2 -z -u &&
	test_all_match git status --porcelain=v2 -uno &&
	test_all_match git add README.md &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git status --porcelain=v2 -z -u &&
	test_all_match git status --porcelain=v2 -uno

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 5 - status with options

expecting success of 1092.6 'status with diff in unexpanded sparse directory': 
	init_repos &&
	test_all_match git checkout rename-base &&
	test_all_match git reset --soft rename-out-to-out &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 6 - status with diff in unexpanded sparse directory

expecting success of 1092.7 'status reports sparse-checkout': 
	init_repos &&
	git -C sparse-checkout status >full &&
	git -C sparse-index status >sparse &&
	test_i18ngrep "You are in a sparse checkout with " full &&
	test_i18ngrep "You are in a sparse checkout." sparse

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
You are in a sparse checkout with 73% of tracked files present.
You are in a sparse checkout.
ok 7 - status reports sparse-checkout

expecting success of 1092.8 'add, commit, checkout': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF
	run_on_all ../edit-contents README.md &&

	test_all_match git add README.md &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m "Add README.md" &&

	test_all_match git checkout HEAD~1 &&
	test_all_match git checkout - &&

	run_on_all ../edit-contents README.md &&

	test_all_match git add -A &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m "Extend README.md" &&

	test_all_match git checkout HEAD~1 &&
	test_all_match git checkout - &&

	run_on_all ../edit-contents deep/newfile &&

	test_all_match git status --porcelain=v2 -uno &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git add . &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m "add deep/newfile" &&

	test_all_match git checkout HEAD~1 &&
	test_all_match git checkout -

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 8 - add, commit, checkout

expecting success of 1092.9 'deep changes during checkout': 
	init_repos &&

	test_sparse_match git sparse-checkout set deep/deeper1/deepest &&
	test_all_match git checkout deepest &&
	test_all_match git checkout base

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 9 - deep changes during checkout

expecting success of 1092.10 'checkout with modified sparse directory': 
	init_repos &&

	test_all_match git checkout rename-in-to-out -- . &&
	test_sparse_match git sparse-checkout reapply &&
	test_all_match git checkout base

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 10 - checkout with modified sparse directory

expecting success of 1092.11 'checkout orphan then non-orphan': 
	init_repos &&

	test_all_match git checkout --orphan test-orphan &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git checkout base &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 11 - checkout orphan then non-orphan

expecting success of 1092.12 'add outside sparse cone': 
	init_repos &&

	run_on_sparse mkdir folder1 &&
	run_on_sparse ../edit-contents folder1/a &&
	run_on_sparse ../edit-contents folder1/newfile &&
	test_sparse_match test_must_fail git add folder1/a &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder1/a &&
	test_sparse_match test_must_fail git add folder1/newfile &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder1/newfile

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
ok 12 - add outside sparse cone

expecting success of 1092.13 'commit including unstaged changes': 
	init_repos &&

	write_script edit-file <<-\EOF &&
	echo $1 >$2
	EOF

	run_on_all ../edit-file 1 a &&
	run_on_all ../edit-file 1 deep/a &&

	test_all_match git commit -m "-a" -a &&
	test_all_match git status --porcelain=v2 &&

	run_on_all ../edit-file 2 a &&
	run_on_all ../edit-file 2 deep/a &&

	test_all_match git commit -m "--include" --include deep/a &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m "--include" --include a &&
	test_all_match git status --porcelain=v2 &&

	run_on_all ../edit-file 3 a &&
	run_on_all ../edit-file 3 deep/a &&

	test_all_match git commit -m "--amend" -a --amend &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 13 - commit including unstaged changes

expecting success of 1092.14 'status/add: outside sparse cone': 
	init_repos &&

	# folder1 is at HEAD, but outside the sparse cone
	run_on_sparse mkdir folder1 &&
	cp initial-repo/folder1/a sparse-checkout/folder1/a &&
	cp initial-repo/folder1/a sparse-index/folder1/a &&

	test_sparse_match git status &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF
	run_on_all ../edit-contents folder1/a &&
	run_on_all ../edit-contents folder1/new &&

	test_sparse_match git status --porcelain=v2 &&

	# Adding the path outside of the sparse-checkout cone should fail.
	test_sparse_match test_must_fail git add folder1/a &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder1/a &&
	test_all_match git add --refresh folder1/a &&
	test_must_be_empty sparse-checkout-err &&
	test_sparse_unstaged folder1/a &&
	test_sparse_match test_must_fail git add folder1/new &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder1/new &&
	test_sparse_match git add --sparse folder1/a &&
	test_sparse_match git add --sparse folder1/new &&

	test_all_match git add --sparse . &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m folder1/new &&
	test_all_match git rev-parse HEAD^{tree} &&

	run_on_all ../edit-contents folder1/newer &&
	test_all_match git add --sparse folder1/ &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git commit -m folder1/newer &&
	test_all_match git rev-parse HEAD^{tree}

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
ok 14 - status/add: outside sparse cone

expecting success of 1092.15 'checkout and reset --hard': 
	init_repos &&

	test_all_match git checkout update-folder1 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git checkout update-deep &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git checkout -b reset-test &&
	test_all_match git reset --hard deepest &&
	test_all_match git reset --hard update-folder1 &&
	test_all_match git reset --hard update-folder2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 15 - checkout and reset --hard

expecting success of 1092.16 'diff --cached': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>README.md
	EOF
	run_on_all ../edit-contents &&

	test_all_match git diff &&
	test_all_match git diff --cached &&
	test_all_match git add README.md &&
	test_all_match git diff &&
	test_all_match git diff --cached

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 16 - diff --cached

expecting success of 1092.17 'diff with renames and conflicts': 
	init_repos &&

	for branch in rename-out-to-out \
		      rename-out-to-in \
		      rename-in-to-out \
		      df-conflict-1 \
		      fd-conflict
	do
		test_all_match git checkout rename-base &&
		test_all_match git checkout $branch -- . &&
		test_all_match git status --porcelain=v2 &&
		test_all_match git diff --cached --no-renames &&
		test_all_match git diff --cached --find-renames || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 17 - diff with renames and conflicts

expecting success of 1092.18 'diff with directory/file conflicts': 
	init_repos &&

	for branch in rename-out-to-out \
		      rename-out-to-in \
		      rename-in-to-out \
		      df-conflict-1 \
		      df-conflict-2 \
		      fd-conflict
	do
		git -C full-checkout reset --hard &&
		test_sparse_match git reset --hard &&
		test_all_match git checkout $branch &&
		test_all_match git checkout rename-base -- . &&
		test_all_match git status --porcelain=v2 &&
		test_all_match git diff --cached --no-renames &&
		test_all_match git diff --cached --find-renames || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 4a04e79 rename folder1/... to folder2/...
HEAD is now at d11c5fe rename folder1/... to deep/deeper1/...
HEAD is now at e5d0f8e rename deep/deeper1/... to folder1/...
HEAD is now at 974b58d dir to file
HEAD is now at bef3412 dir to file
ok 18 - diff with directory/file conflicts

expecting success of 1092.19 'log with pathspec outside sparse definition': 
	init_repos &&

	test_all_match git log -- a &&
	test_all_match git log -- folder1/a &&
	test_all_match git log -- folder2/a &&
	test_all_match git log -- deep/a &&
	test_all_match git log -- deep/deeper1/a &&
	test_all_match git log -- deep/deeper1/deepest/a &&

	test_all_match git checkout update-folder1 &&
	test_all_match git log -- folder1/a

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 19 - log with pathspec outside sparse definition

expecting success of 1092.20 'blame with pathspec inside sparse definition': 
	init_repos &&

	for file in a \
			deep/a \
			deep/deeper1/a \
			deep/deeper1/deepest/a
	do
		test_all_match git blame $file || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 20 - blame with pathspec inside sparse definition

expecting success of 1092.21 'blame with pathspec outside sparse definition': 
	init_repos &&
	test_sparse_match git sparse-checkout set &&

	for file in \
			deep/a \
			deep/deeper1/a \
			deep/deeper1/deepest/a
	do
		test_sparse_match test_must_fail git blame $file &&
		cat >expect <<-EOF &&
		fatal: Cannot lstat '$file': No such file or directory
		EOF
		# We compare sparse-checkout-err and sparse-index-err in
		# `test_sparse_match`. Given we know they are the same, we
		# only check the content of sparse-index-err here.
		test_cmp expect sparse-index-err || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 21 - blame with pathspec outside sparse definition

expecting success of 1092.22 'checkout and reset (mixed)': 
	init_repos &&

	test_all_match git checkout -b reset-test update-deep &&
	test_all_match git reset deepest &&

	# Because skip-worktree is preserved, resetting to update-folder1
	# will show worktree changes for folder1/a in full-checkout, but not
	# in sparse-checkout or sparse-index.
	git -C full-checkout reset update-folder1 >full-checkout-out &&
	test_sparse_match git reset update-folder1 &&
	grep "M	folder1/a" full-checkout-out &&
	! grep "M	folder1/a" sparse-checkout-out &&
	run_on_sparse test_path_is_missing folder1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
M	folder1/a
ok 22 - checkout and reset (mixed)

expecting success of 1092.23 'checkout and reset (merge)': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	test_all_match git checkout -b reset-test update-deep &&
	run_on_all ../edit-contents a &&
	test_all_match git reset --merge deepest &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset --hard update-deep &&
	run_on_all ../edit-contents deep/a &&
	test_all_match test_must_fail git reset --merge deepest

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 23 - checkout and reset (merge)

expecting success of 1092.24 'checkout and reset (keep)': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	test_all_match git checkout -b reset-test update-deep &&
	run_on_all ../edit-contents a &&
	test_all_match git reset --keep deepest &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset --hard update-deep &&
	run_on_all ../edit-contents deep/a &&
	test_all_match test_must_fail git reset --keep deepest

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 24 - checkout and reset (keep)

expecting success of 1092.25 'reset with pathspecs inside sparse definition': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	test_all_match git checkout -b reset-test update-deep &&
	run_on_all ../edit-contents deep/a &&

	test_all_match git reset base -- deep/a &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset base -- nonexistent-file &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset deepest -- deep &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 25 - reset with pathspecs inside sparse definition

expecting success of 1092.26 'reset with pathspecs outside sparse definition': 
	init_repos &&
	test_all_match git checkout -b reset-test base &&

	test_sparse_match git reset update-folder1 -- folder1 &&
	git -C full-checkout reset update-folder1 -- folder1 &&
	test_all_match git ls-files -s -- folder1 &&

	test_sparse_match git reset update-folder2 -- folder2/a &&
	git -C full-checkout reset update-folder2 -- folder2/a &&
	test_all_match git ls-files -s -- folder2/a

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Unstaged changes after reset:
M	folder1/a
Unstaged changes after reset:
M	folder1/a
M	folder2/a
ok 26 - reset with pathspecs outside sparse definition

expecting success of 1092.27 'reset with wildcard pathspec': 
	init_repos &&

	test_all_match git reset update-deep -- deep\* &&
	test_all_match git ls-files -s -- deep &&

	test_all_match git reset deepest -- deep\*\*\* &&
	test_all_match git ls-files -s -- deep &&

	# The following `git reset`s result in updating the index on files with
	# `skip-worktree` enabled. To avoid failing due to discrepencies in reported
	# "modified" files, `test_sparse_match` reset is performed separately from
	# "full-checkout" reset, then the index contents of all repos are verified.

	test_sparse_match git reset update-folder1 -- \*/a &&
	git -C full-checkout reset update-folder1 -- \*/a &&
	test_all_match git ls-files -s -- deep/a folder1/a &&

	test_sparse_match git reset update-folder2 -- folder\* &&
	git -C full-checkout reset update-folder2 -- folder\* &&
	test_all_match git ls-files -s -- folder10 folder1 folder2 &&

	test_sparse_match git reset base -- folder1/\* &&
	git -C full-checkout reset base -- folder1/\* &&
	test_all_match git ls-files -s -- folder1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Unstaged changes after reset:
M	folder1/a
Unstaged changes after reset:
M	folder2/a
Unstaged changes after reset:
M	folder2/a
ok 27 - reset with wildcard pathspec

expecting success of 1092.28 'reset hard with removed sparse dir': 
	init_repos &&

	run_on_all git rm -r --sparse folder1 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset --hard &&
	test_all_match git status --porcelain=v2 &&

	cat >expect <<-\EOF &&
	folder1/
	EOF

	git -C sparse-index ls-files --sparse folder1 >out &&
	test_cmp expect out

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 28 - reset hard with removed sparse dir

expecting success of 1092.29 'update-index modify outside sparse definition': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	# Create & modify folder1/a
	# Note that this setup is a manual way of reaching the erroneous
	# condition in which a `skip-worktree` enabled, outside-of-cone file
	# exists on disk. It is used here to ensure `update-index` is stable
	# and behaves predictably if such a condition occurs.
	run_on_sparse mkdir -p folder1 &&
	run_on_sparse cp ../initial-repo/folder1/a folder1/a &&
	run_on_all ../edit-contents folder1/a &&

	# If file has skip-worktree enabled, but the file is present, it is
	# treated the same as if skip-worktree is disabled
	test_all_match git status --porcelain=v2 &&
	test_all_match git update-index folder1/a &&
	test_all_match git status --porcelain=v2 &&

	# When skip-worktree is disabled (even on files outside sparse cone), file
	# is updated in the index
	test_sparse_match git update-index --no-skip-worktree folder1/a &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git update-index folder1/a &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 29 - update-index modify outside sparse definition

expecting success of 1092.30 'update-index --add outside sparse definition': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	# Create folder1, add new file
	run_on_sparse mkdir -p folder1 &&
	run_on_all ../edit-contents folder1/b &&

	# The *untracked* out-of-cone file is added to the index because it does
	# not have a `skip-worktree` bit to signal that it should be ignored
	# (unlike in `git add`, which will fail due to the file being outside
	# the sparse checkout definition).
	test_all_match git update-index --add folder1/b &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 30 - update-index --add outside sparse definition

expecting success of 1092.31 'update-index --remove outside sparse definition': 
	init_repos &&

	# When --ignore-skip-worktree-entries is _not_ specified:
	# out-of-cone, not-on-disk files are removed from the index
	test_sparse_match git update-index --remove folder1/a &&
	cat >expect <<-EOF &&
	D	folder1/a
	EOF
	test_sparse_match git diff --cached --name-status &&
	test_cmp expect sparse-checkout-out &&

	# Reset the state
	test_all_match git reset --hard &&

	# When --ignore-skip-worktree-entries is specified, out-of-cone
	# (skip-worktree) files are ignored
	test_sparse_match git update-index --remove --ignore-skip-worktree-entries folder1/a &&
	test_sparse_match git diff --cached --name-status &&
	test_must_be_empty sparse-checkout-out &&

	# Reset the state
	test_all_match git reset --hard &&

	# --force-remove supercedes --ignore-skip-worktree-entries, removing
	# a skip-worktree file from the index (and disk) when both are specified
	# with --remove
	test_sparse_match git update-index --force-remove --ignore-skip-worktree-entries folder1/a &&
	cat >expect <<-EOF &&
	D	folder1/a
	EOF
	test_sparse_match git diff --cached --name-status &&
	test_cmp expect sparse-checkout-out

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 31 - update-index --remove outside sparse definition

expecting success of 1092.32 'update-index with directories': 
	init_repos &&

	# update-index will exit silently when provided with a directory name
	# containing a trailing slash
	test_all_match git update-index deep/ folder1/ &&
	grep "Ignoring path deep/" sparse-checkout-err &&
	grep "Ignoring path folder1/" sparse-checkout-err &&

	# When update-index is given a directory name WITHOUT a trailing slash, it will
	# behave in different ways depending on the status of the directory on disk:
	# * if it exists, the command exits with an error ("add individual files instead")
	# * if it does NOT exist (e.g., in a sparse-checkout), it is assumed to be a
	#   file and either triggers an error ("does not exist  and --remove not passed")
	#   or is ignored completely (when using --remove)
	test_all_match test_must_fail git update-index deep &&
	run_on_all test_must_fail git update-index folder1 &&
	test_must_fail git -C full-checkout update-index --remove folder1 &&
	test_sparse_match git update-index --remove folder1 &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Ignoring path deep/
Ignoring path folder1/
error: folder1: is a directory - add individual files instead
fatal: Unable to process path folder1
ok 32 - update-index with directories

expecting success of 1092.33 'update-index --again file outside sparse definition': 
	init_repos &&

	test_all_match git checkout -b test-reupdate &&

	# Update HEAD without modifying the index to introduce a difference in
	# folder1/a
	test_sparse_match git reset --soft update-folder1 &&

	# Because folder1/a differs in the index vs HEAD,
	# `git update-index --no-skip-worktree --again` will effectively perform
	# `git update-index --no-skip-worktree folder1/a` and remove the skip-worktree
	# flag from folder1/a
	test_sparse_match git update-index --no-skip-worktree --again &&
	test_sparse_match git status --porcelain=v2 &&

	cat >expect <<-EOF &&
	D	folder1/a
	EOF
	test_sparse_match git diff --name-status &&
	test_cmp expect sparse-checkout-out

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 33 - update-index --again file outside sparse definition

expecting success of 1092.34 'update-index --cacheinfo': 
	init_repos &&

	deep_a_oid=$(git -C full-checkout rev-parse update-deep:deep/a) &&
	folder2_oid=$(git -C full-checkout rev-parse update-folder2:folder2) &&
	folder1_a_oid=$(git -C full-checkout rev-parse update-folder1:folder1/a) &&

	test_all_match git update-index --cacheinfo 100644 $deep_a_oid deep/a &&
	test_all_match git status --porcelain=v2 &&

	# Cannot add sparse directory, even in sparse index case
	test_all_match test_must_fail git update-index --add --cacheinfo 040000 $folder2_oid folder2/ &&

	# Sparse match only: the new outside-of-cone entry is added *without* skip-worktree,
	# so `git status` reports it as "deleted" in the worktree
	test_sparse_match git update-index --add --cacheinfo 100644 $folder1_a_oid folder1/a &&
	test_sparse_match git status --porcelain=v2 &&
	cat >expect <<-EOF &&
	MD folder1/a
	EOF
	test_sparse_match git status --short -- folder1/a &&
	test_cmp expect sparse-checkout-out &&

	# To return folder1/a to "normal" for a sparse checkout (ignored &
	# outside-of-cone), add the skip-worktree flag.
	test_sparse_match git update-index --skip-worktree folder1/a &&
	cat >expect <<-EOF &&
	S folder1/a
	EOF
	test_sparse_match git ls-files -t -- folder1/a &&
	test_cmp expect sparse-checkout-out

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 34 - update-index --cacheinfo

expecting success of 1092.35 ''read-tree -mu base HEAD update-folder2' with files outside sparse definition': 
		init_repos &&

		# Although the index matches, without --no-sparse-checkout, outside-of-
		# definition files will not exist on disk for sparse checkouts
		test_all_match git read-tree -mu $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_path_is_missing sparse-checkout/folder2 &&
		test_path_is_missing sparse-index/folder2 &&

		test_all_match git read-tree --reset -u HEAD &&
		test_all_match git status --porcelain=v2 &&

		test_all_match git read-tree -mu --no-sparse-checkout $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_cmp sparse-checkout/folder2/a sparse-index/folder2/a &&
		test_cmp sparse-checkout/folder2/a full-checkout/folder2/a

	
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 35 - 'read-tree -mu base HEAD update-folder2' with files outside sparse definition

expecting success of 1092.36 ''read-tree -mu update-folder1 update-folder2' with files outside sparse definition': 
		init_repos &&

		# Although the index matches, without --no-sparse-checkout, outside-of-
		# definition files will not exist on disk for sparse checkouts
		test_all_match git read-tree -mu $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_path_is_missing sparse-checkout/folder2 &&
		test_path_is_missing sparse-index/folder2 &&

		test_all_match git read-tree --reset -u HEAD &&
		test_all_match git status --porcelain=v2 &&

		test_all_match git read-tree -mu --no-sparse-checkout $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_cmp sparse-checkout/folder2/a sparse-index/folder2/a &&
		test_cmp sparse-checkout/folder2/a full-checkout/folder2/a

	
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 36 - 'read-tree -mu update-folder1 update-folder2' with files outside sparse definition

expecting success of 1092.37 ''read-tree -mu update-folder2' with files outside sparse definition': 
		init_repos &&

		# Although the index matches, without --no-sparse-checkout, outside-of-
		# definition files will not exist on disk for sparse checkouts
		test_all_match git read-tree -mu $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_path_is_missing sparse-checkout/folder2 &&
		test_path_is_missing sparse-index/folder2 &&

		test_all_match git read-tree --reset -u HEAD &&
		test_all_match git status --porcelain=v2 &&

		test_all_match git read-tree -mu --no-sparse-checkout $MERGE_TREES &&
		test_all_match git status --porcelain=v2 &&
		test_cmp sparse-checkout/folder2/a sparse-index/folder2/a &&
		test_cmp sparse-checkout/folder2/a full-checkout/folder2/a

	
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 37 - 'read-tree -mu update-folder2' with files outside sparse definition

expecting success of 1092.38 'read-tree --merge with edit/edit conflicts in sparse directories': 
	init_repos &&

	# Merge of multiple changes to same directory (but not same files) should
	# succeed
	test_all_match git read-tree -mu base rename-base update-folder1 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset --hard &&

	test_all_match git read-tree -mu rename-base update-folder2 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git reset --hard &&

	test_all_match test_must_fail git read-tree -mu base update-folder1 rename-out-to-in &&
	test_all_match test_must_fail git read-tree -mu rename-out-to-in update-folder1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 38 - read-tree --merge with edit/edit conflicts in sparse directories

expecting success of 1092.39 'read-tree --prefix': 
	init_repos &&

	# If files differing between the index and target <commit-ish> exist
	# inside the prefix, `read-tree --prefix` should fail
	test_all_match test_must_fail git read-tree --prefix=deep/ deepest &&
	test_all_match test_must_fail git read-tree --prefix=folder1/ update-folder1 &&

	# If no differing index entries exist matching the prefix,
	# `read-tree --prefix` updates the index successfully
	test_all_match git rm -rf deep/deeper1/deepest/ &&
	test_all_match git read-tree --prefix=deep/deeper1/deepest -u deepest &&
	test_all_match git status --porcelain=v2 &&

	run_on_all git rm -rf --sparse folder1/ &&
	test_all_match git read-tree --prefix=folder1/ -u update-folder1 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git rm -rf --sparse folder2/0 &&
	test_all_match git read-tree --prefix=folder2/0/ -u rename-out-to-out &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 39 - read-tree --prefix

expecting success of 1092.40 'read-tree --merge with directory-file conflicts': 
	init_repos &&

	test_all_match git checkout -b test-branch rename-base &&

	# Although the index matches, without --no-sparse-checkout, outside-of-
	# definition files will not exist on disk for sparse checkouts
	test_sparse_match git read-tree -mu rename-out-to-out &&
	test_sparse_match git status --porcelain=v2 &&
	test_path_is_missing sparse-checkout/folder2 &&
	test_path_is_missing sparse-index/folder2 &&

	test_sparse_match git read-tree --reset -u HEAD &&
	test_sparse_match git status --porcelain=v2 &&

	test_sparse_match git read-tree -mu --no-sparse-checkout rename-out-to-out &&
	test_sparse_match git status --porcelain=v2 &&
	test_cmp sparse-checkout/folder2/0/1 sparse-index/folder2/0/1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 40 - read-tree --merge with directory-file conflicts

expecting success of 1092.41 'merge, cherry-pick, and rebase': 
	init_repos &&

	for OPERATION in "merge -m merge" cherry-pick "rebase --apply" "rebase --merge"
	do
		test_all_match git checkout -B temp update-deep &&
		test_all_match git $OPERATION update-folder1 &&
		test_all_match git rev-parse HEAD^{tree} &&
		test_all_match git $OPERATION update-folder2 &&
		test_all_match git rev-parse HEAD^{tree} || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 41 - merge, cherry-pick, and rebase

expecting success of 1092.42 'merge with conflict outside cone': 
	init_repos &&

	test_all_match git checkout -b merge-tip merge-left &&
	test_all_match git status --porcelain=v2 &&
	test_all_match test_must_fail git merge -m merge merge-right &&
	test_all_match git status --porcelain=v2 &&

	# Resolve the conflict in different ways:
	# 1. Revert to the base
	test_all_match git checkout base -- deep/deeper2/a &&
	test_all_match git status --porcelain=v2 &&

	# 2. Add the file with conflict markers
	test_sparse_match test_must_fail git add folder1/a &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder1/a &&
	test_all_match git add --sparse folder1/a &&
	test_all_match git status --porcelain=v2 &&

	# 3. Rename the file to another sparse filename and
	#    accept conflict markers as resolved content.
	run_on_all mv folder2/a folder2/z &&
	test_sparse_match test_must_fail git add folder2 &&
	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
	test_sparse_unstaged folder2/z &&
	test_all_match git add --sparse folder2 &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git merge --continue &&
	test_all_match git status --porcelain=v2 &&
	test_all_match git rev-parse HEAD^{tree}

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
ok 42 - merge with conflict outside cone

expecting success of 1092.43 'cherry-pick/rebase with conflict outside cone': 
	init_repos &&

	for OPERATION in cherry-pick rebase
	do
		test_all_match git checkout -B tip &&
		test_all_match git reset --hard merge-left &&
		test_all_match git status --porcelain=v2 &&
		test_all_match test_must_fail git $OPERATION merge-right &&
		test_all_match git status --porcelain=v2 &&

		# Resolve the conflict in different ways:
		# 1. Revert to the base
		test_all_match git checkout base -- deep/deeper2/a &&
		test_all_match git status --porcelain=v2 &&

		# 2. Add the file with conflict markers
		# NEEDSWORK: Even though the merge conflict removed the
		# SKIP_WORKTREE bit from the index entry for folder1/a, we should
		# warn that this is a problematic add.
		test_sparse_match test_must_fail git add folder1/a &&
		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
		test_sparse_unstaged folder1/a &&
		test_all_match git add --sparse folder1/a &&
		test_all_match git status --porcelain=v2 &&

		# 3. Rename the file to another sparse filename and
		#    accept conflict markers as resolved content.
		# NEEDSWORK: This mode now fails, because folder2/z is
		# outside of the sparse-checkout cone and does not match an
		# existing index entry with the SKIP_WORKTREE bit cleared.
		run_on_all mv folder2/a folder2/z &&
		test_sparse_match test_must_fail git add folder2 &&
		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
		test_sparse_unstaged folder2/z &&
		test_all_match git add --sparse folder2 &&
		test_all_match git status --porcelain=v2 &&

		test_all_match git $OPERATION --continue &&
		test_all_match git status --porcelain=v2 &&
		test_all_match git rev-parse HEAD^{tree} || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
hint: * Disable or modify the sparsity rules.
ok 43 - cherry-pick/rebase with conflict outside cone

expecting success of 1092.44 'merge with outside renames': 
	init_repos &&

	for type in out-to-out out-to-in in-to-out
	do
		test_all_match git reset --hard &&
		test_all_match git checkout -f -b merge-$type update-deep &&
		test_all_match git merge -m "$type" rename-$type &&
		test_all_match git rev-parse HEAD^{tree} || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 44 - merge with outside renames

expecting success of 1092.45 'cherry-pick with conflicts': 
	init_repos &&

	write_script edit-conflict <<-\EOF &&
	echo $1 >conflict
	EOF

	test_all_match git checkout -b to-cherry-pick &&
	run_on_all ../edit-conflict ABC &&
	test_all_match git add conflict &&
	test_all_match git commit -m "conflict to pick" &&

	test_all_match git checkout -B base HEAD~1 &&
	run_on_all ../edit-conflict DEF &&
	test_all_match git add conflict &&
	test_all_match git commit -m "conflict in base" &&

	test_all_match test_must_fail git cherry-pick to-cherry-pick

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 45 - cherry-pick with conflicts

expecting success of 1092.46 'stash': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	# Stash a sparse directory (folder1)
	test_all_match git checkout -b test-branch rename-base &&
	test_all_match git reset --soft rename-out-to-out &&
	test_all_match git stash &&
	test_all_match git status --porcelain=v2 &&

	# Apply the sparse directory stash without reinstating the index
	test_all_match git stash apply -q &&
	test_all_match git status --porcelain=v2 &&

	# Reset to state where stash can be applied
	test_sparse_match git sparse-checkout reapply &&
	test_all_match git reset --hard rename-out-to-out &&

	# Apply the sparse directory stash *with* reinstating the index
	test_all_match git stash apply --index -q &&
	test_all_match git status --porcelain=v2 &&

	# Reset to state where we will get a conflict applying the stash
	test_sparse_match git sparse-checkout reapply &&
	test_all_match git reset --hard update-folder1 &&

	# Apply the sparse directory stash with conflicts
	test_all_match test_must_fail git stash apply --index -q &&
	test_all_match test_must_fail git stash apply -q &&
	test_all_match git status --porcelain=v2 &&

	# Reset to base branch
	test_sparse_match git sparse-checkout reapply &&
	test_all_match git reset --hard base &&

	# Stash & unstash an untracked file outside of the sparse checkout
	# definition.
	run_on_sparse mkdir -p folder1 &&
	run_on_all ../edit-contents folder1/new &&
	test_all_match git stash -u &&
	test_all_match git status --porcelain=v2 &&

	test_all_match git stash pop -q &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 46 - stash

expecting success of 1092.47 'checkout-index inside sparse definition': 
	init_repos &&

	run_on_all rm -f deep/a &&
	test_all_match git checkout-index -- deep/a &&
	test_all_match git status --porcelain=v2 &&

	echo test >>new-a &&
	run_on_all cp ../new-a a &&
	test_all_match test_must_fail git checkout-index -- a &&
	test_all_match git checkout-index -f -- a &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 47 - checkout-index inside sparse definition

expecting success of 1092.48 'checkout-index outside sparse definition': 
	init_repos &&

	# Without --ignore-skip-worktree-bits, outside-of-cone files will trigger
	# an error
	test_sparse_match test_must_fail git checkout-index -- folder1/a &&
	test_i18ngrep "folder1/a has skip-worktree enabled" sparse-checkout-err &&
	test_path_is_missing folder1/a &&

	# With --ignore-skip-worktree-bits, outside-of-cone files are checked out
	test_sparse_match git checkout-index --ignore-skip-worktree-bits -- folder1/a &&
	test_cmp sparse-checkout/folder1/a sparse-index/folder1/a &&
	test_cmp sparse-checkout/folder1/a full-checkout/folder1/a &&

	run_on_sparse rm -rf folder1 &&
	echo test >new-a &&
	run_on_sparse mkdir -p folder1 &&
	run_on_all cp ../new-a folder1/a &&

	test_all_match test_must_fail git checkout-index --ignore-skip-worktree-bits -- folder1/a &&
	test_all_match git checkout-index -f --ignore-skip-worktree-bits -- folder1/a &&
	test_cmp sparse-checkout/folder1/a sparse-index/folder1/a &&
	test_cmp sparse-checkout/folder1/a full-checkout/folder1/a

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
git checkout-index: folder1/a has skip-worktree enabled; use '--ignore-skip-worktree-bits' to checkout
ok 48 - checkout-index outside sparse definition

expecting success of 1092.49 'checkout-index with folders': 
	init_repos &&

	# Inside checkout definition
	test_all_match test_must_fail git checkout-index -f -- deep/ &&

	# Outside checkout definition
	# Note: although all tests fail (as expected), the messaging differs. For
	# non-sparse index checkouts, the error is that the "file" does not appear
	# in the index; for sparse checkouts, the error is explicitly that the
	# entry is a sparse directory.
	run_on_all test_must_fail git checkout-index -f -- folder1/ &&
	test_cmp full-checkout-err sparse-checkout-err &&
	! test_cmp full-checkout-err sparse-index-err &&
	grep "is a sparse directory" sparse-index-err

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
--- full-checkout-err	2022-12-28 07:35:40.683052323 +0000
+++ sparse-index-err	2022-12-28 07:35:40.738054356 +0000
@@ -1 +1 @@
-git checkout-index: folder1/ is not in the cache
+git checkout-index: folder1/ is a sparse directory
git checkout-index: folder1/ is a sparse directory
ok 49 - checkout-index with folders

expecting success of 1092.50 'checkout-index --all': 
	init_repos &&

	test_all_match git checkout-index --all &&
	test_sparse_match test_path_is_missing folder1 &&

	# --ignore-skip-worktree-bits will cause `skip-worktree` files to be
	# checked out, causing the outside-of-cone `folder1` to exist on-disk
	test_all_match git checkout-index --ignore-skip-worktree-bits --all &&
	test_all_match test_path_exists folder1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 50 - checkout-index --all

expecting success of 1092.51 'clean': 
	init_repos &&

	echo bogus >>.gitignore &&
	run_on_all cp ../.gitignore . &&
	test_all_match git add .gitignore &&
	test_all_match git commit -m "ignore bogus files" &&

	run_on_sparse mkdir folder1 &&
	run_on_all mkdir -p deep/untracked-deep &&
	run_on_all touch folder1/bogus &&
	run_on_all touch folder1/untracked &&
	run_on_all touch deep/untracked-deep/bogus &&
	run_on_all touch deep/untracked-deep/untracked &&

	test_all_match git status --porcelain=v2 &&
	test_all_match git clean -f &&
	test_all_match git status --porcelain=v2 &&
	test_sparse_match ls &&
	test_sparse_match ls folder1 &&
	run_on_all test_path_exists folder1/bogus &&
	run_on_all test_path_is_missing folder1/untracked &&
	run_on_all test_path_exists deep/untracked-deep/bogus &&
	run_on_all test_path_exists deep/untracked-deep/untracked &&

	test_all_match git clean -fd &&
	test_all_match git status --porcelain=v2 &&
	test_sparse_match ls &&
	test_sparse_match ls folder1 &&
	run_on_all test_path_exists folder1/bogus &&
	run_on_all test_path_exists deep/untracked-deep/bogus &&
	run_on_all test_path_is_missing deep/untracked-deep/untracked &&

	test_all_match git clean -xf &&
	test_all_match git status --porcelain=v2 &&
	test_sparse_match ls &&
	test_sparse_match ls folder1 &&
	run_on_all test_path_is_missing folder1/bogus &&
	run_on_all test_path_exists deep/untracked-deep/bogus &&

	test_all_match git clean -xdf &&
	test_all_match git status --porcelain=v2 &&
	test_sparse_match ls &&
	test_sparse_match ls folder1 &&
	run_on_all test_path_is_missing deep/untracked-deep/bogus &&

	test_sparse_match test_path_is_dir folder1

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 51 - clean

expecting success of 1092.52 'show (cached blobs/trees)': 
		init_repos &&

		test_all_match git show :a &&
		test_all_match git show :deep/a &&
		test_sparse_match git show :folder1/a &&

		# The error message differs depending on whether
		# the directory exists in the worktree.
		test_all_match test_must_fail git show :deep/ &&
		test_must_fail git -C full-checkout show :folder1/ &&
		test_sparse_match test_must_fail git show :folder1/ &&

		# Change the sparse cone for an extra case:
		run_on_sparse git sparse-checkout set deep/deeper1 &&

		# deep/deeper2 is a sparse directory in the sparse index.
		test_sparse_match test_must_fail git show :deep/deeper2/ &&

		# deep/deeper2/deepest is not in the sparse index, but
		# will trigger an index expansion.
		test_sparse_match test_must_fail git show :deep/deeper2/deepest/
	
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
fatal: path 'folder1/' exists on disk, but not in the index
ok 52 - show (cached blobs/trees)

expecting success of 1092.53 'rev-parse (cached blobs/trees)': 
		init_repos &&

		test_all_match git rev-parse :a &&
		test_all_match git rev-parse :deep/a &&
		test_sparse_match git rev-parse :folder1/a &&

		# The error message differs depending on whether
		# the directory exists in the worktree.
		test_all_match test_must_fail git rev-parse :deep/ &&
		test_must_fail git -C full-checkout rev-parse :folder1/ &&
		test_sparse_match test_must_fail git rev-parse :folder1/ &&

		# Change the sparse cone for an extra case:
		run_on_sparse git sparse-checkout set deep/deeper1 &&

		# deep/deeper2 is a sparse directory in the sparse index.
		test_sparse_match test_must_fail git rev-parse :deep/deeper2/ &&

		# deep/deeper2/deepest is not in the sparse index, but
		# will trigger an index expansion.
		test_sparse_match test_must_fail git rev-parse :deep/deeper2/deepest/
	
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
fatal: path 'folder1/' exists on disk, but not in the index
:folder1/
ok 53 - rev-parse (cached blobs/trees)

expecting success of 1092.54 'submodule handling': 
	init_repos &&

	test_sparse_match git sparse-checkout add modules &&
	test_all_match mkdir modules &&
	test_all_match touch modules/a &&
	test_all_match git add modules &&
	test_all_match git commit -m "add modules directory" &&

	test_config_global protocol.file.allow always &&

	run_on_all git submodule add "$(pwd)/initial-repo" modules/sub &&
	test_all_match git commit -m "add submodule" &&

	# having a submodule prevents "modules" from collapse
	test_sparse_match git sparse-checkout set deep/deeper1 &&
	git -C sparse-index ls-files --sparse --stage >cache &&
	grep "100644 .*	modules/a" cache &&
	grep "160000 $(git -C initial-repo rev-parse HEAD) 0	modules/sub" cache

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	modules/a
160000 703fd3e56687611d5c0264e6f007e18e96f794bf 0	modules/sub
ok 54 - submodule handling

expecting success of 1092.55 'sparse-index is expanded and converted back': 
	init_repos &&

	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" \
		git -C sparse-index reset -- folder1/a &&
	test_region index convert_to_sparse trace2.txt &&
	test_region index ensure_full_index trace2.txt &&

	# ls-files expands on read, but does not write.
	rm trace2.txt &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
		git -C sparse-index ls-files &&
	test_region index ensure_full_index trace2.txt

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
{"event":"region_enter","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.716037Z","file":"sparse-index.c","line":209,"repo":1,"nesting":1,"category":"index","label":"convert_to_sparse"}
{"event":"region_leave","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.719042Z","file":"sparse-index.c","line":223,"repo":1,"t_rel":0.003010,"nesting":1,"category":"index","label":"convert_to_sparse"}
{"event":"region_enter","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.699282Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.725378Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.708807Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.009460,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T073600.678593Z-Hc64317c2-P000047d3","thread":"main","time":"2022-12-28T07:36:00.729694Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.004314,"nesting":1,"category":"index","label":"ensure_full_index"}
a
before/a
before/b
deep/a
deep/before/a
deep/deeper1/0/0/0
deep/deeper1/0/1
deep/deeper1/a
deep/deeper1/deepest/a
deep/deeper1/deepest2/a
deep/deeper1/deepest3/a
deep/deeper1/e
deep/deeper2/a
deep/deeper2/deeper1/a
deep/deeper2/deeper1/deepest/a
deep/deeper2/deeper1/deepest2/a
deep/deeper2/deeper1/deepest3/a
deep/deeper2/deeper1/e
deep/e
deep/later/a
e
folder1-
folder1.x
folder1/0/0/0
folder1/0/1
folder1/a
folder10
folder2/0/0/0
folder2/0/1
folder2/a
g
x/a
z
{"event":"region_enter","sid":"20221228T073600.805669Z-Hc64317c2-P000047f8","thread":"main","time":"2022-12-28T07:36:00.820011Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T073600.805669Z-Hc64317c2-P000047f8","thread":"main","time":"2022-12-28T07:36:00.832717Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.012711,"nesting":1,"category":"index","label":"ensure_full_index"}
ok 55 - sparse-index is expanded and converted back

expecting success of 1092.56 'index.sparse disabled inline uses full index': 
	init_repos &&

	# When index.sparse is disabled inline with `git status`, the
	# index is expanded at the beginning of the execution then never
	# converted back to sparse. It is then written to disk as a full index.
	rm -f trace2.txt &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
		git -C sparse-index -c index.sparse=false status &&
	! test_region index convert_to_sparse trace2.txt &&
	test_region index ensure_full_index trace2.txt &&

	# Since index.sparse is set to true at a repo level, the index
	# is converted from full to sparse when read, then never expanded
	# over the course of `git status`. It is written to disk as a sparse
	# index.
	rm -f trace2.txt &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
		git -C sparse-index status &&
	test_region index convert_to_sparse trace2.txt &&
	! test_region index ensure_full_index trace2.txt &&

	# Now that the index has been written to disk as sparse, it is not
	# converted to sparse (or expanded to full) when read by `git status`.
	rm -f trace2.txt &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
		git -C sparse-index status &&
	! test_region index convert_to_sparse trace2.txt &&
	! test_region index ensure_full_index trace2.txt

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
On branch base
You are in a sparse checkout with 73% of tracked files present.

nothing to commit, working tree clean
{"event":"region_enter","sid":"20221228T073603.350013Z-Hc64317c2-P000049d2","thread":"main","time":"2022-12-28T07:36:03.364159Z","file":"sparse-index.c","line":340,"repo":1,"nesting":2,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T073603.350013Z-Hc64317c2-P000049d2","thread":"main","time":"2022-12-28T07:36:03.377858Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.013701,"nesting":2,"category":"index","label":"ensure_full_index"}
On branch base
You are in a sparse checkout.

nothing to commit, working tree clean
{"event":"region_enter","sid":"20221228T073603.475012Z-Hc64317c2-P000049ee","thread":"main","time":"2022-12-28T07:36:03.485329Z","file":"sparse-index.c","line":209,"repo":1,"nesting":2,"category":"index","label":"convert_to_sparse"}
{"event":"region_leave","sid":"20221228T073603.475012Z-Hc64317c2-P000049ee","thread":"main","time":"2022-12-28T07:36:03.492237Z","file":"sparse-index.c","line":223,"repo":1,"t_rel":0.006910,"nesting":2,"category":"index","label":"convert_to_sparse"}
On branch base
You are in a sparse checkout.

nothing to commit, working tree clean
ok 56 - index.sparse disabled inline uses full index

expecting success of 1092.57 'sparse-index is not expanded': 
	init_repos &&

	ensure_not_expanded status &&
	ensure_not_expanded ls-files --sparse &&
	ensure_not_expanded commit --allow-empty -m empty &&
	echo >>sparse-index/a &&
	ensure_not_expanded commit -a -m a &&
	echo >>sparse-index/a &&
	ensure_not_expanded commit --include a -m a &&
	echo >>sparse-index/deep/deeper1/a &&
	ensure_not_expanded commit --include deep/deeper1/a -m deeper &&
	ensure_not_expanded checkout rename-out-to-out &&
	ensure_not_expanded checkout - &&
	ensure_not_expanded switch rename-out-to-out &&
	ensure_not_expanded switch - &&
	ensure_not_expanded reset --hard &&
	ensure_not_expanded checkout rename-out-to-out -- deep/deeper1 &&
	ensure_not_expanded reset --hard &&
	ensure_not_expanded restore -s rename-out-to-out -- deep/deeper1 &&

	echo >>sparse-index/README.md &&
	ensure_not_expanded add -A &&
	echo >>sparse-index/extra.txt &&
	ensure_not_expanded add extra.txt &&
	echo >>sparse-index/untracked.txt &&
	ensure_not_expanded add . &&

	ensure_not_expanded checkout-index -f a &&
	ensure_not_expanded checkout-index -f --all &&
	for ref in update-deep update-folder1 update-folder2 update-deep
	do
		echo >>sparse-index/README.md &&
		ensure_not_expanded reset --hard $ref || return 1
	done &&

	ensure_not_expanded reset --mixed base &&
	ensure_not_expanded reset --hard update-deep &&
	ensure_not_expanded reset --keep base &&
	ensure_not_expanded reset --merge update-deep &&
	ensure_not_expanded reset --hard &&

	ensure_not_expanded reset base -- deep/a &&
	ensure_not_expanded reset base -- nonexistent-file &&
	ensure_not_expanded reset deepest -- deep &&

	# Although folder1 is outside the sparse definition, it exists as a
	# directory entry in the index, so the pathspec will not force the
	# index to be expanded.
	ensure_not_expanded reset deepest -- folder1 &&
	ensure_not_expanded reset deepest -- folder1/ &&

	# Wildcard identifies only in-cone files, no index expansion
	ensure_not_expanded reset deepest -- deep/\* &&

	# Wildcard identifies only full sparse directories, no index expansion
	ensure_not_expanded reset deepest -- folder\* &&

	ensure_not_expanded clean -fd &&

	ensure_not_expanded checkout -f update-deep &&
	test_config -C sparse-index pull.twohead ort &&
	(
		sane_unset GIT_TEST_MERGE_ALGORITHM &&
		for OPERATION in "merge -m merge" cherry-pick rebase
		do
			ensure_not_expanded merge -m merge update-folder1 &&
			ensure_not_expanded merge -m merge update-folder2 || return 1
		done
	)

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 57 - sparse-index is not expanded

expecting success of 1092.58 'sparse-index is not expanded: merge conflict in cone': 
	init_repos &&

	for side in right left
	do
		git -C sparse-index checkout -b expand-$side base &&
		echo $side >sparse-index/deep/a &&
		git -C sparse-index commit -a -m "$side" || return 1
	done &&

	(
		sane_unset GIT_TEST_MERGE_ALGORITHM &&
		git -C sparse-index config pull.twohead ort &&
		ensure_not_expanded ! merge -m merged expand-right
	)

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Switched to a new branch 'expand-right'
[expand-right 5ebbff9] right
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'expand-left'
[expand-left 9bcd6b8] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 58 - sparse-index is not expanded: merge conflict in cone

expecting success of 1092.59 'sparse-index is not expanded: stash': 
	init_repos &&

	echo >>sparse-index/a &&
	ensure_not_expanded stash &&
	ensure_not_expanded stash list &&
	ensure_not_expanded stash show stash@{0} &&
	ensure_not_expanded stash apply stash@{0} &&
	ensure_not_expanded stash drop stash@{0} &&

	echo >>sparse-index/deep/new &&
	ensure_not_expanded stash -u &&
	(
		WITHOUT_UNTRACKED_TXT=1 &&
		ensure_not_expanded stash pop
	) &&

	ensure_not_expanded stash create &&
	oid=$(git -C sparse-index stash create) &&
	ensure_not_expanded stash store -m "test" $oid &&
	ensure_not_expanded reset --hard &&
	ensure_not_expanded stash pop

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 59 - sparse-index is not expanded: stash

expecting success of 1092.60 'sparse index is not expanded: diff': 
	init_repos &&

	write_script edit-contents <<-\EOF &&
	echo text >>$1
	EOF

	# Add file within cone
	test_sparse_match git sparse-checkout set deep &&
	run_on_all ../edit-contents deep/testfile &&
	test_all_match git add deep/testfile &&
	run_on_all ../edit-contents deep/testfile &&

	test_all_match git diff &&
	test_all_match git diff --cached &&
	ensure_not_expanded diff &&
	ensure_not_expanded diff --cached &&

	# Add file outside cone
	test_all_match git reset --hard &&
	run_on_all mkdir newdirectory &&
	run_on_all ../edit-contents newdirectory/testfile &&
	test_sparse_match git sparse-checkout set newdirectory &&
	test_all_match git add newdirectory/testfile &&
	run_on_all ../edit-contents newdirectory/testfile &&
	test_sparse_match git sparse-checkout set &&

	test_all_match git diff &&
	test_all_match git diff --cached &&
	ensure_not_expanded diff &&
	ensure_not_expanded diff --cached &&

	# Merge conflict outside cone
	# The sparse checkout will report a warning that is not in the
	# full checkout, so we use `run_on_all` instead of
	# `test_all_match`
	run_on_all git reset --hard &&
	test_all_match git checkout merge-left &&
	test_all_match test_must_fail git merge merge-right &&

	test_all_match git diff &&
	test_all_match git diff --cached &&
	ensure_not_expanded diff &&
	ensure_not_expanded diff --cached

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 60 - sparse index is not expanded: diff

expecting success of 1092.61 'sparse index is not expanded: show and rev-parse': 
	init_repos &&

	ensure_not_expanded show :a &&
	ensure_not_expanded show :deep/a &&
	ensure_not_expanded rev-parse :a &&
	ensure_not_expanded rev-parse :deep/a

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 61 - sparse index is not expanded: show and rev-parse

expecting success of 1092.62 'sparse index is not expanded: update-index': 
	init_repos &&

	deep_a_oid=$(git -C full-checkout rev-parse update-deep:deep/a) &&
	ensure_not_expanded update-index --cacheinfo 100644 $deep_a_oid deep/a &&

	echo "test" >sparse-index/README.md &&
	echo "test2" >sparse-index/a &&
	rm -f sparse-index/deep/a &&

	ensure_not_expanded update-index --add README.md &&
	ensure_not_expanded update-index a &&
	ensure_not_expanded update-index --remove deep/a &&

	ensure_not_expanded reset --soft update-deep &&
	ensure_not_expanded update-index --add --remove --again

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 62 - sparse index is not expanded: update-index

expecting success of 1092.63 'sparse index is not expanded: blame': 
	init_repos &&

	for file in a \
			deep/a \
			deep/deeper1/a \
			deep/deeper1/deepest/a
	do
		ensure_not_expanded blame $file || return 1
	done

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 63 - sparse index is not expanded: blame

expecting success of 1092.64 'sparse index is not expanded: fetch/pull': 
	init_repos &&

	git -C sparse-index remote add full "file://$(pwd)/full-checkout" &&
	ensure_not_expanded fetch full &&
	git -C full-checkout commit --allow-empty -m "for pull merge" &&
	git -C sparse-index commit --allow-empty -m "for pull merge" &&
	ensure_not_expanded pull full base

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
[base f236285] for pull merge
 Author: A U Thor <author@example.com>
[base f236285] for pull merge
 Author: A U Thor <author@example.com>
ok 64 - sparse index is not expanded: fetch/pull

expecting success of 1092.65 'sparse index is not expanded: read-tree': 
	init_repos &&

	ensure_not_expanded checkout -b test-branch update-folder1 &&
	for MERGE_TREES in "base HEAD update-folder2" \
			   "base HEAD rename-base" \
			   "base update-folder2" \
			   "base rename-base" \
			   "update-folder2"
	do
		ensure_not_expanded read-tree -mu $MERGE_TREES &&
		ensure_not_expanded reset --hard || return 1
	done &&

	rm -rf sparse-index/deep/deeper2 &&
	ensure_not_expanded add . &&
	ensure_not_expanded commit -m "test" &&

	ensure_not_expanded read-tree --prefix=deep/deeper2 -u deepest

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 65 - sparse index is not expanded: read-tree

expecting success of 1092.66 'ls-files': 
	init_repos &&

	# Use a smaller sparse-checkout for reduced output
	test_sparse_match git sparse-checkout set &&

	# Behavior agrees by default. Sparse index is expanded.
	test_all_match git ls-files &&

	# With --sparse, the sparse index data changes behavior.
	git -C sparse-index ls-files --sparse >actual &&

	cat >expect <<-\EOF &&
	a
	before/
	deep/
	e
	folder1-
	folder1.x
	folder1/
	folder10
	folder2/
	g
	x/
	z
	EOF

	test_cmp expect actual &&

	# With --sparse and no sparse index, nothing changes.
	git -C sparse-checkout ls-files >dense &&
	git -C sparse-checkout ls-files --sparse >sparse &&
	test_cmp dense sparse &&

	# Set up a strange condition of having a file edit
	# outside of the sparse-checkout cone. We want to verify
	# that all modes handle this the same, and detect the
	# modification.
	write_script edit-content <<-\EOF &&
	mkdir -p folder1 &&
	echo content >>folder1/a
	EOF
	run_on_all ../edit-content &&

	test_all_match git ls-files --modified &&

	git -C sparse-index ls-files --sparse --modified >sparse-index-out &&
	cat >expect <<-\EOF &&
	folder1/a
	EOF
	test_cmp expect sparse-index-out &&

	# Add folder1 to the sparse-checkout cone and
	# check that ls-files shows the expanded files.
	test_sparse_match git sparse-checkout add folder1 &&
	test_all_match git ls-files --modified &&

	test_all_match git ls-files &&
	git -C sparse-index ls-files --sparse >actual &&

	cat >expect <<-\EOF &&
	a
	before/
	deep/
	e
	folder1-
	folder1.x
	folder1/0/0/0
	folder1/0/1
	folder1/a
	folder10
	folder2/
	g
	x/
	z
	EOF

	test_cmp expect actual &&

	# Double-check index expansion is avoided
	ensure_not_expanded ls-files --sparse

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 66 - ls-files

expecting success of 1092.67 'sparse index is not expanded: sparse-checkout': 
	init_repos &&

	ensure_not_expanded sparse-checkout set deep/deeper2 &&
	ensure_not_expanded sparse-checkout set deep/deeper1 &&
	ensure_not_expanded sparse-checkout set deep &&
	ensure_not_expanded sparse-checkout add folder1 &&
	ensure_not_expanded sparse-checkout set deep/deeper1 &&
	ensure_not_expanded sparse-checkout set folder2 &&

	# Demonstrate that the checks that "folder1/a" is a file
	# do not cause a sparse-index expansion (since it is in the
	# sparse-checkout cone).
	echo >>sparse-index/folder2/a &&
	git -C sparse-index add folder2/a &&

	ensure_not_expanded sparse-checkout add folder1 &&

	# Skip checks here, since deep/deeper1 is inside a sparse directory
	# that must be expanded to check whether `deep/deeper1` is a file
	# or not.
	ensure_not_expanded sparse-checkout set --skip-checks deep/deeper1 &&
	ensure_not_expanded sparse-checkout set

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 67 - sparse index is not expanded: sparse-checkout

expecting success of 1092.68 'reset mixed and checkout orphan': 
	init_repos &&

	test_all_match git checkout rename-out-to-in &&

	# Sparse checkouts do not agree with full checkouts about
	# how to report a directory/file conflict during a reset.
	# This command would fail with test_all_match because the
	# full checkout reports "T folder1/0/1" while a sparse
	# checkout reports "D folder1/0/1". This matches because
	# the sparse checkouts skip "adding" the other side of
	# the conflict.
	test_sparse_match git reset --mixed HEAD~1 &&
	test_sparse_match git ls-files --stage &&
	test_sparse_match git status --porcelain=v2 &&

	# At this point, sparse-checkouts behave differently
	# from the full-checkout.
	test_sparse_match git checkout --orphan new-branch &&
	test_sparse_match git ls-files --stage &&
	test_sparse_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 68 - reset mixed and checkout orphan

expecting success of 1092.69 'add everything with deep new file': 
	init_repos &&

	run_on_sparse git sparse-checkout set deep/deeper1/deepest &&

	run_on_all touch deep/deeper1/x &&
	test_all_match git add . &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 69 - add everything with deep new file

expecting success of 1092.70 'checkout behaves oddly with df-conflict-1': 
	init_repos &&

	test_sparse_match git sparse-checkout disable &&

	write_script edit-content <<-\EOF &&
	echo content >>folder1/larger-content
	git add folder1
	EOF

	run_on_all ../edit-content &&
	test_all_match git status --porcelain=v2 &&

	git -C sparse-checkout sparse-checkout init --cone &&
	git -C sparse-index sparse-checkout init --cone --sparse-index &&

	test_all_match git status --porcelain=v2 &&

	# This checkout command should fail, because we have a staged
	# change to folder1/larger-content, but the destination changes
	# folder1 to a file.
	git -C full-checkout checkout df-conflict-1 \
		1>full-checkout-out \
		2>full-checkout-err &&
	git -C sparse-checkout checkout df-conflict-1 \
		1>sparse-checkout-out \
		2>sparse-checkout-err &&
	git -C sparse-index checkout df-conflict-1 \
		1>sparse-index-out \
		2>sparse-index-err &&

	# Instead, the checkout deletes the folder1 file and adds the
	# folder1/larger-content file, leaving all other paths that were
	# in folder1/ as deleted (without any warning).
	cat >expect <<-EOF &&
	D	folder1
	A	folder1/larger-content
	EOF
	test_cmp expect full-checkout-out &&
	test_cmp expect sparse-checkout-out &&

	# The sparse-index reports no output
	test_must_be_empty sparse-index-out &&

	# stderr: Switched to branch df-conflict-1
	test_cmp full-checkout-err sparse-checkout-err &&
	test_cmp full-checkout-err sparse-checkout-err

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 70 - checkout behaves oddly with df-conflict-1

expecting success of 1092.71 'checkout behaves oddly with df-conflict-2': 
	init_repos &&

	test_sparse_match git sparse-checkout disable &&

	write_script edit-content <<-\EOF &&
	echo content >>folder2/larger-content
	git add folder2
	EOF

	run_on_all ../edit-content &&
	test_all_match git status --porcelain=v2 &&

	git -C sparse-checkout sparse-checkout init --cone &&
	git -C sparse-index sparse-checkout init --cone --sparse-index &&

	test_all_match git status --porcelain=v2 &&

	# This checkout command should fail, because we have a staged
	# change to folder1/larger-content, but the destination changes
	# folder1 to a file.
	git -C full-checkout checkout df-conflict-2 \
		1>full-checkout-out \
		2>full-checkout-err &&
	git -C sparse-checkout checkout df-conflict-2 \
		1>sparse-checkout-out \
		2>sparse-checkout-err &&
	git -C sparse-index checkout df-conflict-2 \
		1>sparse-index-out \
		2>sparse-index-err &&

	# The full checkout deviates from the df-conflict-1 case here!
	# It drops the change to folder1/larger-content and leaves the
	# folder1 path as-is on disk. The sparse-index behaves the same.
	test_must_be_empty full-checkout-out &&
	test_must_be_empty sparse-index-out &&

	# In the sparse-checkout case, the checkout deletes the folder1
	# file and adds the folder1/larger-content file, leaving all other
	# paths that were in folder1/ as deleted (without any warning).
	cat >expect <<-EOF &&
	D	folder2
	A	folder2/larger-content
	EOF
	test_cmp expect sparse-checkout-out &&

	# Switched to branch df-conflict-1
	test_cmp full-checkout-err sparse-checkout-err &&
	test_cmp full-checkout-err sparse-index-err

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 71 - checkout behaves oddly with df-conflict-2

expecting success of 1092.72 'mv directory from out-of-cone to in-cone': 
	init_repos &&

	# <source> as a sparse directory (or SKIP_WORKTREE_DIR without enabling
	# sparse index).
	test_all_match git mv --sparse folder1 deep &&
	test_all_match git status --porcelain=v2 &&
	test_sparse_match git ls-files -t &&
	git -C sparse-checkout ls-files -t >actual &&
	grep -e "H deep/folder1/0/0/0" actual &&
	grep -e "H deep/folder1/0/1" actual &&
	grep -e "H deep/folder1/a" actual &&

	test_all_match git reset --hard &&

	# <source> as a directory deeper than sparse index boundary (where
	# sparse index will expand).
	test_sparse_match git mv --sparse folder1/0 deep &&
	test_sparse_match git status --porcelain=v2 &&
	test_sparse_match git ls-files -t &&
	git -C sparse-checkout ls-files -t >actual &&
	grep -e "H deep/0/0/0" actual &&
	grep -e "H deep/0/1" actual

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
H deep/folder1/0/0/0
H deep/folder1/0/1
H deep/folder1/a
H deep/0/0/0
H deep/0/1
ok 72 - mv directory from out-of-cone to in-cone

expecting success of 1092.73 'rm pathspec inside sparse definition': 
	init_repos &&

	test_all_match git rm deep/a &&
	test_all_match git status --porcelain=v2 &&

	# test wildcard
	run_on_all git reset --hard &&
	test_all_match git rm deep/* &&
	test_all_match git status --porcelain=v2 &&

	# test recursive rm
	run_on_all git reset --hard &&
	test_all_match git rm -r deep &&
	test_all_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 73 - rm pathspec inside sparse definition

expecting success of 1092.74 'rm pathspec outside sparse definition': 
	init_repos &&

	for file in folder1/a folder1/0/1
	do
		test_sparse_match test_must_fail git rm $file &&
		test_sparse_match test_must_fail git rm --cached $file &&
		test_sparse_match git rm --sparse $file &&
		test_sparse_match git status --porcelain=v2 || return 1
	done &&

	cat >folder1-full <<-EOF &&
	rm ${SQ}folder1/0/0/0${SQ}
	rm ${SQ}folder1/0/1${SQ}
	rm ${SQ}folder1/a${SQ}
	EOF

	cat >folder1-sparse <<-EOF &&
	rm ${SQ}folder1/${SQ}
	EOF

	# test wildcard
	run_on_sparse git reset --hard &&
	run_on_sparse git sparse-checkout reapply &&
	test_sparse_match test_must_fail git rm folder1/* &&
	run_on_sparse git rm --sparse folder1/* &&
	test_cmp folder1-full sparse-checkout-out &&
	test_cmp folder1-sparse sparse-index-out &&
	test_sparse_match git status --porcelain=v2 &&

	# test recursive rm
	run_on_sparse git reset --hard &&
	run_on_sparse git sparse-checkout reapply &&
	test_sparse_match test_must_fail git rm --sparse folder1 &&
	run_on_sparse git rm --sparse -r folder1 &&
	test_cmp folder1-full sparse-checkout-out &&
	test_cmp folder1-sparse sparse-index-out &&
	test_sparse_match git status --porcelain=v2

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 74 - rm pathspec outside sparse definition

expecting success of 1092.75 'rm pathspec expands index when necessary': 
	init_repos &&

	# in-cone pathspec (do not expand)
	ensure_not_expanded rm "deep/deep*" &&
	test_must_be_empty sparse-index-err &&

	# out-of-cone pathspec (expand)
	! ensure_not_expanded rm --sparse "folder1/a*" &&
	test_must_be_empty sparse-index-err &&

	# pathspec that should expand index
	! ensure_not_expanded rm "*/a" &&
	test_must_be_empty sparse-index-err &&

	! ensure_not_expanded rm "**a" &&
	test_must_be_empty sparse-index-err

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
{"event":"region_enter","sid":"20221228T073702.815702Z-Hc64317c2-P00007215","thread":"main","time":"2022-12-28T07:37:02.835923Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073702.815702Z-Hc64317c2-P00007215","thread":"main","time":"2022-12-28T07:37:02.866820Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073702.942459Z-Hc64317c2-P00007228","thread":"main","time":"2022-12-28T07:37:02.961546Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073702.942459Z-Hc64317c2-P00007228","thread":"main","time":"2022-12-28T07:37:03.015010Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073703.069524Z-Hc64317c2-P00007243","thread":"main","time":"2022-12-28T07:37:03.084047Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T073703.069524Z-Hc64317c2-P00007243","thread":"main","time":"2022-12-28T07:37:03.109463Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
ok 75 - rm pathspec expands index when necessary

expecting success of 1092.76 'sparse index is not expanded: rm': 
	init_repos &&

	ensure_not_expanded rm deep/a &&

	# test in-cone wildcard
	git -C sparse-index reset --hard &&
	ensure_not_expanded rm deep/* &&

	# test recursive rm
	git -C sparse-index reset --hard &&
	ensure_not_expanded rm -r deep

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 76 - sparse index is not expanded: rm

expecting success of 1092.77 'grep with and --cached': 
	init_repos &&

	test_all_match git grep --cached a &&
	test_all_match git grep --cached a -- "folder1/*"

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 77 - grep with and --cached

expecting success of 1092.78 'grep is not expanded': 
	init_repos &&

	ensure_not_expanded grep a &&
	ensure_not_expanded grep a -- deep/* &&

	# All files within the folder1/* pathspec are sparse,
	# so this command does not find any matches
	ensure_not_expanded ! grep a -- folder1/* &&

	# test out-of-cone pathspec with or without wildcard
	ensure_not_expanded grep --cached a -- "folder1/a" &&
	ensure_not_expanded grep --cached a -- "folder1/*" &&

	# test in-cone pathspec with or without wildcard
	ensure_not_expanded grep --cached a -- "deep/a" &&
	ensure_not_expanded grep --cached a -- "deep/*"

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
ok 78 - grep is not expanded

checking known breakage of 1092.79 'grep within submodules is not expanded': 
	init_repos_as_submodules &&

	# do not use ensure_not_expanded() here, becasue `grep` should be
	# run in the superproject, not in "./sparse-index"
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" \
	git grep --cached --recurse-submodules a -- "*/folder1/*" &&
	test_region ! index ensure_full_index trace2.txt

HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Adding existing repo at 'full-checkout' to the index
Adding existing repo at 'sparse-checkout' to the index
Adding existing repo at 'sparse-index' to the index
 703fd3e56687611d5c0264e6f007e18e96f794bf full-checkout (heads/base)
 703fd3e56687611d5c0264e6f007e18e96f794bf sparse-checkout (heads/base)
 703fd3e56687611d5c0264e6f007e18e96f794bf sparse-index (heads/base)
full-checkout/folder1/a:a
sparse-checkout/folder1/a:a
sparse-index/folder1/a:a
{"event":"region_enter","sid":"20221228T073714.086501Z-Hc64317c2-P00007bd1","thread":"main","time":"2022-12-28T07:37:14.123204Z","file":"sparse-index.c","line":340,"repo":4,"nesting":2,"category":"index","label":"ensure_full_index"}
not ok 79 - grep within submodules is not expanded # TODO known breakage

expecting success of 1092.80 'grep sparse directory within submodules': 
	init_repos_as_submodules &&

	cat >expect <<-\EOF &&
	full-checkout/folder1/a:a
	sparse-checkout/folder1/a:a
	sparse-index/folder1/a:a
	EOF
	git grep --cached --recurse-submodules a -- "*/folder1/*" >actual &&
	test_cmp actual expect

warning: unable to rmdir 'full-checkout': Directory not empty
warning: unable to rmdir 'sparse-checkout': Directory not empty
warning: unable to rmdir 'sparse-index': Directory not empty
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
HEAD is now at 703fd3e initial commit
Adding existing repo at 'full-checkout' to the index
Adding existing repo at 'sparse-checkout' to the index
Adding existing repo at 'sparse-index' to the index
 703fd3e56687611d5c0264e6f007e18e96f794bf full-checkout (heads/base)
 703fd3e56687611d5c0264e6f007e18e96f794bf sparse-checkout (heads/base)
 703fd3e56687611d5c0264e6f007e18e96f794bf sparse-index (heads/base)
ok 80 - grep sparse directory within submodules

# still have 1 known breakage(s)
# passed all remaining 79 test(s)
1..80
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3060-ls-files-with-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3060-ls-files-with-tree/.git/
expecting success of 3060.1 'setup': 

	# The bug we are exercising requires a fair number of entries
	# in a sub-directory so that add_index_entry will trigger a
	# realloc.

	echo file >expected &&
	mkdir sub &&
	for n in 0 1 2 3 4 5
	do
		for m in 0 1 2 3 4 5 6 7 8 9
		do
			num=00$n$m &&
			>sub/file-$num &&
			echo file-$num >>expected ||
			return 1
		done
	done &&
	git add . &&
	git commit -m "add a bunch of files" &&

	# We remove them all so that we will have something to add
	# back with --with-tree and so that we will definitely be
	# under the realloc size to trigger the bug.
	rm -rf sub &&
	git commit -a -m "remove them all" &&

	# The bug also requires some entry before our directory so that
	# prune_path will modify the_index.cache

	mkdir a_directory_that_sorts_before_sub &&
	>a_directory_that_sorts_before_sub/file &&
	mkdir sub &&
	>sub/file &&
	git add .

[master (root-commit) 853a03d] add a bunch of files
 Author: A U Thor <author@example.com>
 61 files changed, 61 insertions(+)
 create mode 100644 expected
 create mode 100644 sub/file-0000
 create mode 100644 sub/file-0001
 create mode 100644 sub/file-0002
 create mode 100644 sub/file-0003
 create mode 100644 sub/file-0004
 create mode 100644 sub/file-0005
 create mode 100644 sub/file-0006
 create mode 100644 sub/file-0007
 create mode 100644 sub/file-0008
 create mode 100644 sub/file-0009
 create mode 100644 sub/file-0010
 create mode 100644 sub/file-0011
 create mode 100644 sub/file-0012
 create mode 100644 sub/file-0013
 create mode 100644 sub/file-0014
 create mode 100644 sub/file-0015
 create mode 100644 sub/file-0016
 create mode 100644 sub/file-0017
 create mode 100644 sub/file-0018
 create mode 100644 sub/file-0019
 create mode 100644 sub/file-0020
 create mode 100644 sub/file-0021
 create mode 100644 sub/file-0022
 create mode 100644 sub/file-0023
 create mode 100644 sub/file-0024
 create mode 100644 sub/file-0025
 create mode 100644 sub/file-0026
 create mode 100644 sub/file-0027
 create mode 100644 sub/file-0028
 create mode 100644 sub/file-0029
 create mode 100644 sub/file-0030
 create mode 100644 sub/file-0031
 create mode 100644 sub/file-0032
 create mode 100644 sub/file-0033
 create mode 100644 sub/file-0034
 create mode 100644 sub/file-0035
 create mode 100644 sub/file-0036
 create mode 100644 sub/file-0037
 create mode 100644 sub/file-0038
 create mode 100644 sub/file-0039
 create mode 100644 sub/file-0040
 create mode 100644 sub/file-0041
 create mode 100644 sub/file-0042
 create mode 100644 sub/file-0043
 create mode 100644 sub/file-0044
 create mode 100644 sub/file-0045
 create mode 100644 sub/file-0046
 create mode 100644 sub/file-0047
 create mode 100644 sub/file-0048
 create mode 100644 sub/file-0049
 create mode 100644 sub/file-0050
 create mode 100644 sub/file-0051
 create mode 100644 sub/file-0052
 create mode 100644 sub/file-0053
 create mode 100644 sub/file-0054
 create mode 100644 sub/file-0055
 create mode 100644 sub/file-0056
 create mode 100644 sub/file-0057
 create mode 100644 sub/file-0058
 create mode 100644 sub/file-0059
[master 80af29e] remove them all
 Author: A U Thor <author@example.com>
 60 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 sub/file-0000
 delete mode 100644 sub/file-0001
 delete mode 100644 sub/file-0002
 delete mode 100644 sub/file-0003
 delete mode 100644 sub/file-0004
 delete mode 100644 sub/file-0005
 delete mode 100644 sub/file-0006
 delete mode 100644 sub/file-0007
 delete mode 100644 sub/file-0008
 delete mode 100644 sub/file-0009
 delete mode 100644 sub/file-0010
 delete mode 100644 sub/file-0011
 delete mode 100644 sub/file-0012
 delete mode 100644 sub/file-0013
 delete mode 100644 sub/file-0014
 delete mode 100644 sub/file-0015
 delete mode 100644 sub/file-0016
 delete mode 100644 sub/file-0017
 delete mode 100644 sub/file-0018
 delete mode 100644 sub/file-0019
 delete mode 100644 sub/file-0020
 delete mode 100644 sub/file-0021
 delete mode 100644 sub/file-0022
 delete mode 100644 sub/file-0023
 delete mode 100644 sub/file-0024
 delete mode 100644 sub/file-0025
 delete mode 100644 sub/file-0026
 delete mode 100644 sub/file-0027
 delete mode 100644 sub/file-0028
 delete mode 100644 sub/file-0029
 delete mode 100644 sub/file-0030
 delete mode 100644 sub/file-0031
 delete mode 100644 sub/file-0032
 delete mode 100644 sub/file-0033
 delete mode 100644 sub/file-0034
 delete mode 100644 sub/file-0035
 delete mode 100644 sub/file-0036
 delete mode 100644 sub/file-0037
 delete mode 100644 sub/file-0038
 delete mode 100644 sub/file-0039
 delete mode 100644 sub/file-0040
 delete mode 100644 sub/file-0041
 delete mode 100644 sub/file-0042
 delete mode 100644 sub/file-0043
 delete mode 100644 sub/file-0044
 delete mode 100644 sub/file-0045
 delete mode 100644 sub/file-0046
 delete mode 100644 sub/file-0047
 delete mode 100644 sub/file-0048
 delete mode 100644 sub/file-0049
 delete mode 100644 sub/file-0050
 delete mode 100644 sub/file-0051
 delete mode 100644 sub/file-0052
 delete mode 100644 sub/file-0053
 delete mode 100644 sub/file-0054
 delete mode 100644 sub/file-0055
 delete mode 100644 sub/file-0056
 delete mode 100644 sub/file-0057
 delete mode 100644 sub/file-0058
 delete mode 100644 sub/file-0059
ok 1 - setup

expecting success of 3060.2 'usage': 
	test_expect_code 128 git ls-files --with-tree=HEAD -u &&
	test_expect_code 128 git ls-files --with-tree=HEAD -s &&
	test_expect_code 128 git ls-files --recurse-submodules --with-tree=HEAD

fatal: options 'ls-files --with-tree' and '-s/-u' cannot be used together
fatal: options 'ls-files --with-tree' and '-s/-u' cannot be used together
fatal: ls-files --recurse-submodules unsupported mode
ok 2 - usage

expecting success of 3060.3 'git ls-files --with-tree should succeed from subdir': 
	# We have to run from a sub-directory to trigger prune_path
	# Then we finally get to run our --with-tree test
	(
		cd sub &&
		git ls-files --with-tree=HEAD~1 >../output
	)

ok 3 - git ls-files --with-tree should succeed from subdir

expecting success of 3060.4 'git ls-files --with-tree should add entries from named tree.': 
	test_cmp expected output

ok 4 - git ls-files --with-tree should add entries from named tree.

expecting success of 3060.5 'no duplicates in --with-tree output': 
	git ls-files --with-tree=HEAD >actual &&
	sort -u actual >expected &&
	test_cmp expected actual

ok 5 - no duplicates in --with-tree output

expecting success of 3060.6 'setup: output in a conflict': 
	test_create_repo conflict &&
	test_commit -C conflict BASE file &&
	test_commit -C conflict A file foo &&
	git -C conflict reset --hard BASE &&
	test_commit -C conflict B file bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3060-ls-files-with-tree/conflict/.git/
[master (root-commit) 7955b49] BASE
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 67d38f3] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 7955b49 BASE
[master f8636b1] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - setup: output in a conflict

expecting success of 3060.7 'output in a conflict': 
	test_must_fail git -C conflict merge A B &&
	cat >expected <<-\EOF &&
	file
	file
	file
	file
	EOF
	git -C conflict ls-files --with-tree=HEAD >actual &&
	test_cmp expected actual

Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
ok 7 - output in a conflict

expecting success of 3060.8 'output with removed .git/index': 
	cat >expected <<-\EOF &&
	file
	EOF
	rm conflict/.git/index &&
	git -C conflict ls-files --with-tree=HEAD >actual &&
	test_cmp expected actual

ok 8 - output with removed .git/index

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3102-ls-tree-wildcards.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3102-ls-tree-wildcards/.git/
expecting success of 3102.1 'setup': 
	mkdir a aa "a[a]" &&
	touch a/one aa/two "a[a]/three" &&
	git add a/one aa/two "a[a]/three" &&
	git commit -m test

[master (root-commit) a832b10] test
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/one
 create mode 100644 a[a]/three
 create mode 100644 aa/two
ok 1 - setup

expecting success of 3102.2 'ls-tree a[a] matches literally': 
	cat >expect <<-EOF &&
	100644 blob $EMPTY_BLOB	a[a]/three
	EOF
	git ls-tree -r HEAD "a[a]" >actual &&
	test_cmp expect actual

ok 2 - ls-tree a[a] matches literally

expecting success of 3102.3 'ls-tree outside prefix': 
	cat >expect <<-EOF &&
	100644 blob $EMPTY_BLOB	../a[a]/three
	EOF
	( cd aa && git ls-tree -r HEAD "../a[a]" ) >actual &&
	test_cmp expect actual

ok 3 - ls-tree outside prefix

checking known breakage of 3102.4 'ls-tree does not yet support negated pathspec': 
	git ls-files ":(exclude)a" "a*" >expect &&
	git ls-tree --name-only -r HEAD ":(exclude)a" "a*" >actual &&
	test_cmp expect actual

fatal: :(exclude)a: pathspec magic not supported by this command: 'exclude' (mnemonic: '!')
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
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3100-ls-tree-restrict.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3100-ls-tree-restrict/.git/
expecting success of 3100.1 'setup': mkdir path2 path2/baz &&
     echo Hi >path0 &&
     test_ln_s_add path0 path1 &&
     test_ln_s_add ../path1 path2/bazbo &&
     echo Lo >path2/foo &&
     echo Mi >path2/baz/b &&
     find path? \( -type f -o -type l \) -print |
     xargs git update-index --add &&
     tree=$(git write-tree) &&
     echo $tree
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
a384d4f8dd786f29d6da4705dee4c2c0bc6b5049
ok 1 - setup

expecting success of 3100.2 'ls-tree plain': git ls-tree $tree >current &&
     cat >expected <<\EOF &&
100644 blob X	path0
120000 blob X	path1
040000 tree X	path2
EOF
     test_output
ok 2 - ls-tree plain

expecting success of 3100.3 'ls-tree recursive': git ls-tree -r $tree >current &&
     cat >expected <<\EOF &&
100644 blob X	path0
120000 blob X	path1
100644 blob X	path2/baz/b
120000 blob X	path2/bazbo
100644 blob X	path2/foo
EOF
     test_output
ok 3 - ls-tree recursive

expecting success of 3100.4 'ls-tree recursive with -t': git ls-tree -r -t $tree >current &&
     cat >expected <<\EOF &&
100644 blob X	path0
120000 blob X	path1
040000 tree X	path2
040000 tree X	path2/baz
100644 blob X	path2/baz/b
120000 blob X	path2/bazbo
100644 blob X	path2/foo
EOF
     test_output
ok 4 - ls-tree recursive with -t

expecting success of 3100.5 'ls-tree recursive with -d': git ls-tree -r -d $tree >current &&
     cat >expected <<\EOF &&
040000 tree X	path2
040000 tree X	path2/baz
EOF
     test_output
ok 5 - ls-tree recursive with -d

expecting success of 3100.6 'ls-tree filtered with path': git ls-tree $tree path >current &&
     cat >expected <<\EOF &&
EOF
     test_output
ok 6 - ls-tree filtered with path

expecting success of 3100.7 'ls-tree filtered with path1 path0': git ls-tree $tree path1 path0 >current &&
     cat >expected <<\EOF &&
100644 blob X	path0
120000 blob X	path1
EOF
     test_output
ok 7 - ls-tree filtered with path1 path0

expecting success of 3100.8 'ls-tree filtered with path0/': git ls-tree $tree path0/ >current &&
     cat >expected <<\EOF &&
EOF
     test_output
ok 8 - ls-tree filtered with path0/

expecting success of 3100.9 'ls-tree filtered with path2': git ls-tree $tree path2 >current &&
     cat >expected <<\EOF &&
040000 tree X	path2
EOF
     test_output
ok 9 - ls-tree filtered with path2

expecting success of 3100.10 'ls-tree filtered with path2/': git ls-tree $tree path2/ >current &&
     cat >expected <<\EOF &&
040000 tree X	path2/baz
120000 blob X	path2/bazbo
100644 blob X	path2/foo
EOF
     test_output
ok 10 - ls-tree filtered with path2/

expecting success of 3100.11 'ls-tree filtered with path2/baz': git ls-tree $tree path2/baz >current &&
     cat >expected <<\EOF &&
040000 tree X	path2/baz
EOF
     test_output
ok 11 - ls-tree filtered with path2/baz

expecting success of 3100.12 'ls-tree filtered with path2/bak': git ls-tree $tree path2/bak >current &&
     cat >expected <<\EOF &&
EOF
     test_output
ok 12 - ls-tree filtered with path2/bak

expecting success of 3100.13 'ls-tree -t filtered with path2/bak': git ls-tree -t $tree path2/bak >current &&
     cat >expected <<\EOF &&
040000 tree X	path2
EOF
     test_output
ok 13 - ls-tree -t filtered with path2/bak

expecting success of 3100.14 'ls-tree with one path a prefix of the other': git ls-tree $tree path2/baz path2/bazbo >current &&
     cat >expected <<\EOF &&
040000 tree X	path2/baz
120000 blob X	path2/bazbo
EOF
     test_output
ok 14 - ls-tree with one path a prefix of the other

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3101-ls-tree-dirname.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3101-ls-tree-dirname/.git/
expecting success of 3101.1 'setup': 
	echo 111 >1.txt &&
	echo 222 >2.txt &&
	mkdir path0 path0/a path0/a/b path0/a/b/c &&
	echo 111 >path0/a/b/c/1.txt &&
	mkdir path1 path1/b path1/b/c &&
	echo 111 >path1/b/c/1.txt &&
	mkdir path2 &&
	echo 111 >path2/1.txt &&
	mkdir path3 &&
	echo 111 >path3/1.txt &&
	echo 222 >path3/2.txt &&
	find *.txt path* \( -type f -o -type l \) -print |
	xargs git update-index --add &&
	tree=$(git write-tree) &&
	echo $tree

ef2ea4d6de8ec0863f430e4cad7468ce74f60aa7
ok 1 - setup

expecting success of 3101.2 'ls-tree plain': 
	git ls-tree $tree >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
040000 tree X	path0
040000 tree X	path1
040000 tree X	path2
040000 tree X	path3
EOF
	test_output

ok 2 - ls-tree plain

expecting success of 3101.3 'ls-tree recursive': 
	git ls-tree -r $tree >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
100644 blob X	path0/a/b/c/1.txt
100644 blob X	path1/b/c/1.txt
100644 blob X	path2/1.txt
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
EOF
	test_output

ok 3 - ls-tree recursive

expecting success of 3101.4 'ls-tree filter 1.txt': 
	git ls-tree $tree 1.txt >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
EOF
	test_output

ok 4 - ls-tree filter 1.txt

expecting success of 3101.5 'ls-tree filter path1/b/c/1.txt': 
	git ls-tree $tree path1/b/c/1.txt >current &&
	cat >expected <<\EOF &&
100644 blob X	path1/b/c/1.txt
EOF
	test_output

ok 5 - ls-tree filter path1/b/c/1.txt

expecting success of 3101.6 'ls-tree filter all 1.txt files': 
	git ls-tree $tree 1.txt path0/a/b/c/1.txt \
		path1/b/c/1.txt path2/1.txt path3/1.txt >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	path0/a/b/c/1.txt
100644 blob X	path1/b/c/1.txt
100644 blob X	path2/1.txt
100644 blob X	path3/1.txt
EOF
	test_output

ok 6 - ls-tree filter all 1.txt files

expecting success of 3101.7 'ls-tree filter directories': 
	git ls-tree $tree path3 path2 path0/a/b/c path1/b/c path0/a >current &&
	cat >expected <<\EOF &&
040000 tree X	path0/a/b/c
040000 tree X	path1/b/c
040000 tree X	path2
040000 tree X	path3
EOF
	test_output

ok 7 - ls-tree filter directories

expecting success of 3101.8 'ls-tree filter odd names': 
	git ls-tree $tree 1.txt ./1.txt .//1.txt \
		path3/1.txt path3/./1.txt path3 path3// >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
EOF
	test_output

ok 8 - ls-tree filter odd names

expecting success of 3101.9 'ls-tree filter missing files and extra slashes': 
	git ls-tree $tree 1.txt/ abc.txt \
		path3//23.txt path3/2.txt/// >current &&
	>expected &&
	test_output

ok 9 - ls-tree filter missing files and extra slashes

expecting success of 3101.10 'ls-tree filter is leading path match': 
	git ls-tree $tree pa path3/a >current &&
	>expected &&
	test_output

ok 10 - ls-tree filter is leading path match

expecting success of 3101.11 'ls-tree --full-name': 
	(
		cd path0 &&
		git ls-tree --full-name $tree a
	) >current &&
	cat >expected <<\EOF &&
040000 tree X	path0/a
EOF
	test_output

ok 11 - ls-tree --full-name

expecting success of 3101.12 'ls-tree --full-tree': 
	(
		cd path1/b/c &&
		git ls-tree --full-tree $tree
	) >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
040000 tree X	path0
040000 tree X	path1
040000 tree X	path2
040000 tree X	path3
EOF
	test_output

ok 12 - ls-tree --full-tree

expecting success of 3101.13 'ls-tree --full-tree -r': 
	(
		cd path3/ &&
		git ls-tree --full-tree -r $tree
	) >current &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
100644 blob X	path0/a/b/c/1.txt
100644 blob X	path1/b/c/1.txt
100644 blob X	path2/1.txt
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
EOF
	test_output

ok 13 - ls-tree --full-tree -r

expecting success of 3101.14 'ls-tree --abbrev=5': 
	git ls-tree --abbrev=5 $tree >current &&
	sed -e "s/ $_x05[0-9a-f]*	/ X	/" <current >check &&
	cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
040000 tree X	path0
040000 tree X	path1
040000 tree X	path2
040000 tree X	path3
EOF
	test_cmp expected check

ok 14 - ls-tree --abbrev=5

expecting success of 3101.15 'ls-tree --name-only': 
		git ls-tree $opt $tree >current &&
		cat >expected <<-\EOF &&
		1.txt
		2.txt
		path0
		path1
		path2
		path3
		EOF
		test_output
	
ok 15 - ls-tree --name-only

expecting success of 3101.16 'ls-tree --name-only -r': 
		git ls-tree $opt -r $tree >current &&
		cat >expected <<-\EOF &&
		1.txt
		2.txt
		path0/a/b/c/1.txt
		path1/b/c/1.txt
		path2/1.txt
		path3/1.txt
		path3/2.txt
		EOF
		test_output
	
ok 16 - ls-tree --name-only -r

expecting success of 3101.17 'ls-tree --name-status': 
		git ls-tree $opt $tree >current &&
		cat >expected <<-\EOF &&
		1.txt
		2.txt
		path0
		path1
		path2
		path3
		EOF
		test_output
	
ok 17 - ls-tree --name-status

expecting success of 3101.18 'ls-tree --name-status -r': 
		git ls-tree $opt -r $tree >current &&
		cat >expected <<-\EOF &&
		1.txt
		2.txt
		path0/a/b/c/1.txt
		path1/b/c/1.txt
		path2/1.txt
		path3/1.txt
		path3/2.txt
		EOF
		test_output
	
ok 18 - ls-tree --name-status -r

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3103-ls-tree-misc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3103-ls-tree-misc/.git/
expecting success of 3103.1 'setup': 
	mkdir a &&
	touch a/one &&
	git add a/one &&
	git commit -m test

[master (root-commit) 687a3e0] test
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/one
ok 1 - setup

expecting success of 3103.2 'ls-tree fails with non-zero exit code on broken tree': 
	tree=$(git rev-parse HEAD:a) &&
	rm -f .git/objects/$(echo $tree | sed -e "s,^\(..\),\1/,") &&
	test_must_fail git ls-tree -r HEAD

error: Could not read 5fcffbd6e4c5c5b8d81f5e9314b20e338e3ffff5
ok 2 - ls-tree fails with non-zero exit code on broken tree

expecting success of 3103.3 'usage: incompatible options: --long --name-only': 
		test_expect_code 129 git ls-tree $opts $tree
	
error: option `name-only' is incompatible with --long
ok 3 - usage: incompatible options: --long --name-only

expecting success of 3103.4 'usage: incompatible options: --long and --format': 
		test_expect_code 129 git ls-tree $one_opt --format=fmt $tree
	
fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 4 - usage: incompatible options: --long and --format

expecting success of 3103.5 'usage: incompatible options: --name-only --name-status': 
		test_expect_code 129 git ls-tree $opts $tree
	
error: option `name-status' is incompatible with --name-only
ok 5 - usage: incompatible options: --name-only --name-status

expecting success of 3103.6 'usage: incompatible options: --name-only and --format': 
		test_expect_code 129 git ls-tree $one_opt --format=fmt $tree
	
fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 6 - usage: incompatible options: --name-only and --format

expecting success of 3103.7 'usage: incompatible options: --name-status --object-only': 
		test_expect_code 129 git ls-tree $opts $tree
	
error: option `object-only' is incompatible with --name-status
ok 7 - usage: incompatible options: --name-status --object-only

expecting success of 3103.8 'usage: incompatible options: --name-status and --format': 
		test_expect_code 129 git ls-tree $one_opt --format=fmt $tree
	
fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 8 - usage: incompatible options: --name-status and --format

expecting success of 3103.9 'usage: incompatible options: --object-only --long': 
		test_expect_code 129 git ls-tree $opts $tree
	
error: option `long' is incompatible with --object-only
ok 9 - usage: incompatible options: --object-only --long

expecting success of 3103.10 'usage: incompatible options: --object-only and --format': 
		test_expect_code 129 git ls-tree $one_opt --format=fmt $tree
	
fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 10 - usage: incompatible options: --object-only and --format

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3104-ls-tree-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3104-ls-tree-format/.git/
expecting success of 3104.1 'ls-tree --format usage': 
	test_expect_code 129 git ls-tree --format=fmt -l HEAD &&
	test_expect_code 129 git ls-tree --format=fmt --name-only HEAD &&
	test_expect_code 129 git ls-tree --format=fmt --name-status HEAD

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 1 - ls-tree --format usage

expecting success of 3104.2 'setup': 
	setup_basic_ls_tree_data

[master (root-commit) 921915e] dir/sub-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/sub-file.t
[master 61a63ac] top-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 top-file.t
Cloning into 'submodule'...
done.
Adding existing repo at 'submodule' to the index
[master 9ac950e] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 2 - setup

expecting success of 3104.3 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options ' '': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 3 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options ' '

expecting success of 3104.4 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 4 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path

expecting success of 3104.5 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)>' is like options '--long '': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 5 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)>' is like options '--long '

expecting success of 3104.6 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 6 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)>' on optimized v.s. non-optimized path

expecting success of 3104.7 'ls-tree '--format=<%(path)>' is like options '--name-only '': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 7 - ls-tree '--format=<%(path)>' is like options '--name-only '

expecting success of 3104.8 'ls-tree '--format=<%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 8 - ls-tree '--format=<%(path)>' on optimized v.s. non-optimized path

expecting success of 3104.9 'ls-tree '--format=<%(objectname)>' is like options '--object-only '': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 9 - ls-tree '--format=<%(objectname)>' is like options '--object-only '

expecting success of 3104.10 'ls-tree '--format=<%(objectname)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 10 - ls-tree '--format=<%(objectname)>' on optimized v.s. non-optimized path

expecting success of 3104.11 'ls-tree '--format=<%(objectname)>' is like options '--object-only --abbrev --abbrev'': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 11 - ls-tree '--format=<%(objectname)>' is like options '--object-only --abbrev --abbrev'

expecting success of 3104.12 'ls-tree '--format=<%(objectname)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 12 - ls-tree '--format=<%(objectname)>' on optimized v.s. non-optimized path

expecting success of 3104.13 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '-t -t'': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 13 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '-t -t'

expecting success of 3104.14 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 14 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path

expecting success of 3104.15 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '--full-name --full-name'': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 15 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '--full-name --full-name'

expecting success of 3104.16 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 16 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path

expecting success of 3104.17 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '--full-tree --full-tree'': 
		git ls-tree $opts -r HEAD >expect &&
		git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
		test_cmp expect actual
	
ok 17 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' is like options '--full-tree --full-tree'

expecting success of 3104.18 'ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path': 
		git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
		git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
		sed "s/^> //" >actual <actual.raw &&
		test_cmp expect actual
	
ok 18 - ls-tree '--format=<%(objectmode) %(objecttype) %(objectname)%x09%(path)>' on optimized v.s. non-optimized path

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3105-ls-tree-output.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3105-ls-tree-output/.git/
expecting success of 3105.1 'ls-tree --format usage': 
	test_expect_code 129 git ls-tree --format=fmt -l HEAD &&
	test_expect_code 129 git ls-tree --format=fmt --name-only HEAD &&
	test_expect_code 129 git ls-tree --format=fmt --name-status HEAD

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

fatal: --format can't be combined with other format-altering options

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --full-name           use full path names
    --full-tree           list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --abbrev[=<n>]        use <n> digits to display object names

ok 1 - ls-tree --format usage

expecting success of 3105.2 'setup': 
	setup_basic_ls_tree_data

[master (root-commit) 921915e] dir/sub-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/sub-file.t
[master 61a63ac] top-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 top-file.t
Cloning into 'submodule'...
done.
Adding existing repo at 'submodule' to the index
[master 9ac950e] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 2 - setup

expecting success of 3105.3 'setup: HEAD_* variables': 
	HEAD_gitmodules=$(git rev-parse HEAD:.gitmodules) &&
	HEAD_dir=$(git rev-parse HEAD:dir) &&
	HEAD_top_file=$(git rev-parse HEAD:top-file.t) &&
	HEAD_submodule=$(git rev-parse HEAD:submodule) &&
	HEAD_dir_sub_file=$(git rev-parse HEAD:dir/sub-file.t)

ok 3 - setup: HEAD_* variables

expecting success of 3105.4 ''ls-tree ' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 4 - 'ls-tree ' output

expecting success of 3105.5 ''ls-tree ' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 5 - 'ls-tree ' output (via subdir)

expecting success of 3105.6 ''ls-tree  -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 6 - 'ls-tree  -t' output

expecting success of 3105.7 ''ls-tree  -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 7 - 'ls-tree  -t' output (via subdir)

expecting success of 3105.8 ''ls-tree  -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 8 - 'ls-tree  -d' output

expecting success of 3105.9 ''ls-tree  -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 9 - 'ls-tree  -d' output (via subdir)

expecting success of 3105.10 ''ls-tree  -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 10 - 'ls-tree  -r' output

expecting success of 3105.11 ''ls-tree  -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 11 - 'ls-tree  -r' output (via subdir)

expecting success of 3105.12 ''ls-tree --long' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 12 - 'ls-tree --long' output

expecting success of 3105.13 ''ls-tree --long' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 13 - 'ls-tree --long' output (via subdir)

expecting success of 3105.14 ''ls-tree --long -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 14 - 'ls-tree --long -t' output

expecting success of 3105.15 ''ls-tree --long -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 15 - 'ls-tree --long -t' output (via subdir)

expecting success of 3105.16 ''ls-tree --long -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 16 - 'ls-tree --long -d' output

expecting success of 3105.17 ''ls-tree --long -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 17 - 'ls-tree --long -d' output (via subdir)

expecting success of 3105.18 ''ls-tree --long -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 18 - 'ls-tree --long -r' output

expecting success of 3105.19 ''ls-tree --long -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 19 - 'ls-tree --long -r' output (via subdir)

expecting success of 3105.20 ''ls-tree --name-only' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 20 - 'ls-tree --name-only' output

expecting success of 3105.21 ''ls-tree --name-only' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 21 - 'ls-tree --name-only' output (via subdir)

expecting success of 3105.22 ''ls-tree --name-only -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 22 - 'ls-tree --name-only -t' output

expecting success of 3105.23 ''ls-tree --name-only -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 23 - 'ls-tree --name-only -t' output (via subdir)

expecting success of 3105.24 ''ls-tree --name-only -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 24 - 'ls-tree --name-only -d' output

expecting success of 3105.25 ''ls-tree --name-only -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 25 - 'ls-tree --name-only -d' output (via subdir)

expecting success of 3105.26 ''ls-tree --name-only -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 26 - 'ls-tree --name-only -r' output

expecting success of 3105.27 ''ls-tree --name-only -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 27 - 'ls-tree --name-only -r' output (via subdir)

expecting success of 3105.28 ''ls-tree --object-only' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 28 - 'ls-tree --object-only' output

expecting success of 3105.29 ''ls-tree --object-only' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 29 - 'ls-tree --object-only' output (via subdir)

expecting success of 3105.30 ''ls-tree --object-only -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 30 - 'ls-tree --object-only -t' output

expecting success of 3105.31 ''ls-tree --object-only -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 31 - 'ls-tree --object-only -t' output (via subdir)

expecting success of 3105.32 ''ls-tree --object-only -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 32 - 'ls-tree --object-only -d' output

expecting success of 3105.33 ''ls-tree --object-only -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 33 - 'ls-tree --object-only -d' output (via subdir)

expecting success of 3105.34 ''ls-tree --object-only -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 34 - 'ls-tree --object-only -r' output

expecting success of 3105.35 ''ls-tree --object-only -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 35 - 'ls-tree --object-only -r' output (via subdir)

expecting success of 3105.36 'setup: HEAD_short_* variables': 
	HEAD_short_gitmodules=$(git rev-parse --short HEAD:.gitmodules) &&
	HEAD_short_dir=$(git rev-parse --short HEAD:dir) &&
	HEAD_short_top_file=$(git rev-parse --short HEAD:top-file.t) &&
	HEAD_short_submodule=$(git rev-parse --short HEAD:submodule) &&
	HEAD_short_dir_sub_file=$(git rev-parse --short HEAD:dir/sub-file.t)

ok 36 - setup: HEAD_short_* variables

expecting success of 3105.37 ''ls-tree --object-only --abbrev' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 37 - 'ls-tree --object-only --abbrev' output

expecting success of 3105.38 ''ls-tree --object-only --abbrev' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 38 - 'ls-tree --object-only --abbrev' output (via subdir)

expecting success of 3105.39 ''ls-tree --object-only --abbrev -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 39 - 'ls-tree --object-only --abbrev -t' output

expecting success of 3105.40 ''ls-tree --object-only --abbrev -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 40 - 'ls-tree --object-only --abbrev -t' output (via subdir)

expecting success of 3105.41 ''ls-tree --object-only --abbrev -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 41 - 'ls-tree --object-only --abbrev -d' output

expecting success of 3105.42 ''ls-tree --object-only --abbrev -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 42 - 'ls-tree --object-only --abbrev -d' output (via subdir)

expecting success of 3105.43 ''ls-tree --object-only --abbrev -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 43 - 'ls-tree --object-only --abbrev -r' output

expecting success of 3105.44 ''ls-tree --object-only --abbrev -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 44 - 'ls-tree --object-only --abbrev -r' output (via subdir)

expecting success of 3105.45 ''ls-tree --full-name' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 45 - 'ls-tree --full-name' output

expecting success of 3105.46 ''ls-tree --full-name' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 46 - 'ls-tree --full-name' output (via subdir)

expecting success of 3105.47 ''ls-tree --full-name -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 47 - 'ls-tree --full-name -d' output

expecting success of 3105.48 ''ls-tree --full-name -d' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 48 - 'ls-tree --full-name -d' output (via subdir)

expecting success of 3105.49 ''ls-tree --full-name -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 49 - 'ls-tree --full-name -r' output

expecting success of 3105.50 ''ls-tree --full-name -r' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 50 - 'ls-tree --full-name -r' output (via subdir)

expecting success of 3105.51 ''ls-tree --full-name -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 51 - 'ls-tree --full-name -t' output

expecting success of 3105.52 ''ls-tree --full-name -t' output (via subdir)': 
				git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
				test_cmp expect actual
			
ok 52 - 'ls-tree --full-name -t' output (via subdir)

expecting success of 3105.53 ''ls-tree --full-tree' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 53 - 'ls-tree --full-tree' output

expecting success of 3105.54 ''ls-tree --full-tree' output (via subdir, fails)': 
				test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../
			
fatal: ../: '../' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t3105-ls-tree-output'
ok 54 - 'ls-tree --full-tree' output (via subdir, fails)

expecting success of 3105.55 ''ls-tree --full-tree -t' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 55 - 'ls-tree --full-tree -t' output

expecting success of 3105.56 ''ls-tree --full-tree -t' output (via subdir, fails)': 
				test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../
			
fatal: ../: '../' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t3105-ls-tree-output'
ok 56 - 'ls-tree --full-tree -t' output (via subdir, fails)

expecting success of 3105.57 ''ls-tree --full-tree -d' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 57 - 'ls-tree --full-tree -d' output

expecting success of 3105.58 ''ls-tree --full-tree -d' output (via subdir, fails)': 
				test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../
			
fatal: ../: '../' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t3105-ls-tree-output'
ok 58 - 'ls-tree --full-tree -d' output (via subdir, fails)

expecting success of 3105.59 ''ls-tree --full-tree -r' output': 
			git ls-tree ${mode:+$mode }$opts HEAD >actual &&
			test_cmp expect actual
		
ok 59 - 'ls-tree --full-tree -r' output

expecting success of 3105.60 ''ls-tree --full-tree -r' output (via subdir, fails)': 
				test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../
			
fatal: ../: '../' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t3105-ls-tree-output'
ok 60 - 'ls-tree --full-tree -r' output (via subdir, fails)

# passed all 60 test(s)
1..60
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3201-branch-contains.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3201-branch-contains/.git/
expecting success of 3201.1 'setup': 

	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git branch -M main &&
	git branch side &&

	echo 1 >file &&
	test_tick &&
	git commit -a -m "second on main" &&

	git checkout side &&
	echo 1 >file &&
	test_tick &&
	git commit -a -m "second on side" &&

	git merge main


[master (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[main f254a9d] second on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'side'
[side 5a0fd8a] second on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Merge made by the 'ort' strategy.
ok 1 - setup

expecting success of 3201.2 'branch --contains=main': 

	git branch --contains=main >actual &&
	{
		echo "  main" && echo "* side"
	} >expect &&
	test_cmp expect actual


ok 2 - branch --contains=main

expecting success of 3201.3 'branch --contains main': 

	git branch --contains main >actual &&
	{
		echo "  main" && echo "* side"
	} >expect &&
	test_cmp expect actual


ok 3 - branch --contains main

expecting success of 3201.4 'branch --no-contains=main': 

	git branch --no-contains=main >actual &&
	test_must_be_empty actual


ok 4 - branch --no-contains=main

expecting success of 3201.5 'branch --no-contains main': 

	git branch --no-contains main >actual &&
	test_must_be_empty actual


ok 5 - branch --no-contains main

expecting success of 3201.6 'branch --contains=side': 

	git branch --contains=side >actual &&
	{
		echo "* side"
	} >expect &&
	test_cmp expect actual


ok 6 - branch --contains=side

expecting success of 3201.7 'branch --no-contains=side': 

	git branch --no-contains=side >actual &&
	{
		echo "  main"
	} >expect &&
	test_cmp expect actual


ok 7 - branch --no-contains=side

expecting success of 3201.8 'branch --contains with pattern implies --list': 

	git branch --contains=main main >actual &&
	{
		echo "  main"
	} >expect &&
	test_cmp expect actual


ok 8 - branch --contains with pattern implies --list

expecting success of 3201.9 'branch --no-contains with pattern implies --list': 

	git branch --no-contains=main main >actual &&
	test_must_be_empty actual


ok 9 - branch --no-contains with pattern implies --list

expecting success of 3201.10 'side: branch --merged': 

	git branch --merged >actual &&
	{
		echo "  main" &&
		echo "* side"
	} >expect &&
	test_cmp expect actual


ok 10 - side: branch --merged

expecting success of 3201.11 'branch --merged with pattern implies --list': 

	git branch --merged=side main >actual &&
	{
		echo "  main"
	} >expect &&
	test_cmp expect actual


ok 11 - branch --merged with pattern implies --list

expecting success of 3201.12 'side: branch --no-merged': 

	git branch --no-merged >actual &&
	test_must_be_empty actual


ok 12 - side: branch --no-merged

expecting success of 3201.13 'main: branch --merged': 

	git checkout main &&
	git branch --merged >actual &&
	{
		echo "* main"
	} >expect &&
	test_cmp expect actual


Switched to branch 'main'
ok 13 - main: branch --merged

expecting success of 3201.14 'main: branch --no-merged': 

	git branch --no-merged >actual &&
	{
		echo "  side"
	} >expect &&
	test_cmp expect actual


ok 14 - main: branch --no-merged

expecting success of 3201.15 'branch --no-merged with pattern implies --list': 

	git branch --no-merged=main main >actual &&
	test_must_be_empty actual


ok 15 - branch --no-merged with pattern implies --list

expecting success of 3201.16 'implicit --list conflicts with modification options': 

	test_must_fail git branch --contains=main -d &&
	test_must_fail git branch --contains=main -m foo &&
	test_must_fail git branch --no-contains=main -d &&
	test_must_fail git branch --no-contains=main -m foo


usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

ok 16 - implicit --list conflicts with modification options

expecting success of 3201.17 'Assert that --contains only works on commits, not trees & blobs': 
	test_must_fail git branch --contains main^{tree} &&
	blob=$(git hash-object -w --stdin <<-\EOF
	Some blob
	EOF
	) &&
	test_must_fail git branch --contains $blob &&
	test_must_fail git branch --no-contains $blob

error: object f27c6ae26adb8396d3861976ba268f87ad8afa0b is a tree, not a commit
error: no such commit main^{tree}
error: object cfb9f2866bfe62c278d75e8c33f020ccc27b5829 is a blob, not a commit
error: no such commit cfb9f2866bfe62c278d75e8c33f020ccc27b5829
error: object cfb9f2866bfe62c278d75e8c33f020ccc27b5829 is a blob, not a commit
error: no such commit cfb9f2866bfe62c278d75e8c33f020ccc27b5829
ok 17 - Assert that --contains only works on commits, not trees & blobs

expecting success of 3201.18 'multiple branch --contains': 
	git checkout -b side2 main &&
	>feature &&
	git add feature &&
	git commit -m "add feature" &&
	git checkout -b next main &&
	git merge side &&
	git branch --contains side --contains side2 >actual &&
	cat >expect <<-\EOF &&
	* next
	  side
	  side2
	EOF
	test_cmp expect actual

Switched to a new branch 'side2'
[side2 08dccf0] add feature
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 feature
Switched to a new branch 'next'
Updating f254a9d..8b329c6
Fast-forward
ok 18 - multiple branch --contains

expecting success of 3201.19 'multiple branch --merged': 
	git branch --merged next --merged main >actual &&
	cat >expect <<-\EOF &&
	  main
	* next
	  side
	EOF
	test_cmp expect actual

ok 19 - multiple branch --merged

expecting success of 3201.20 'multiple branch --no-contains': 
	git branch --no-contains side --no-contains side2 >actual &&
	cat >expect <<-\EOF &&
	  main
	EOF
	test_cmp expect actual

ok 20 - multiple branch --no-contains

expecting success of 3201.21 'multiple branch --no-merged': 
	git branch --no-merged next --no-merged main >actual &&
	cat >expect <<-\EOF &&
	  side2
	EOF
	test_cmp expect actual

ok 21 - multiple branch --no-merged

expecting success of 3201.22 'branch --contains combined with --no-contains': 
	git checkout -b seen main &&
	git merge side &&
	git merge side2 &&
	git branch --contains side --no-contains side2 >actual &&
	cat >expect <<-\EOF &&
	  next
	  side
	EOF
	test_cmp expect actual

Switched to a new branch 'seen'
Updating f254a9d..8b329c6
Fast-forward
Merge made by the 'ort' strategy.
 feature | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 feature
ok 22 - branch --contains combined with --no-contains

expecting success of 3201.23 'branch --merged combined with --no-merged': 
	git branch --merged seen --no-merged next >actual &&
	cat >expect <<-\EOF &&
	* seen
	  side2
	EOF
	test_cmp expect actual

ok 23 - branch --merged combined with --no-merged

expecting success of 3201.24 'branch --merged with --verbose': 
	git branch --track topic main &&
	git branch zzz topic &&
	git checkout topic &&
	test_commit foo &&
	git branch --merged topic >actual &&
	cat >expect <<-\EOF &&
	  main
	* topic
	  zzz
	EOF
	test_cmp expect actual &&
	git branch --verbose --merged topic >actual &&
	cat >expect <<-EOF &&
	  main  $(git rev-parse --short main) second on main
	* topic $(git rev-parse --short topic ) [ahead 1] foo
	  zzz   $(git rev-parse --short zzz   ) second on main
	EOF
	test_cmp expect actual

branch 'topic' set up to track 'main'.
Switched to branch 'topic'
Your branch is up to date with 'main'.
[topic 67f297f] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 24 - branch --merged with --verbose

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3202-show-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3202-show-branch/.git/
expecting success of 3202.1 'error descriptions on empty repository': 
	current=$(git branch --show-current) &&
	cat >expect <<-EOF &&
	error: No commit on branch '$current' yet.
	EOF
	test_must_fail git branch --edit-description 2>actual &&
	test_cmp expect actual &&
	test_must_fail git branch --edit-description $current 2>actual &&
	test_cmp expect actual

ok 1 - error descriptions on empty repository

expecting success of 3202.2 'fatal descriptions on empty repository': 
	current=$(git branch --show-current) &&
	cat >expect <<-EOF &&
	fatal: No commit on branch '$current' yet.
	EOF
	test_must_fail git branch --set-upstream-to=non-existent 2>actual &&
	test_cmp expect actual &&
	test_must_fail git branch -c new-branch 2>actual &&
	test_cmp expect actual

ok 2 - fatal descriptions on empty repository

expecting success of 3202.3 'setup': 
	test_commit initial &&
	for i in $(test_seq 1 10)
	do
		git checkout -b branch$i initial &&
		test_commit --no-tag branch$i || return 1
	done &&
	git for-each-ref \
		--sort=version:refname \
		--format="%(refname:strip=2)" \
		"refs/heads/branch*" >branches.sorted &&
	sed "s/^> //" >expect <<-\EOF
	> ! [branch1] branch1
	>  ! [branch2] branch2
	>   ! [branch3] branch3
	>    ! [branch4] branch4
	>     ! [branch5] branch5
	>      ! [branch6] branch6
	>       ! [branch7] branch7
	>        ! [branch8] branch8
	>         ! [branch9] branch9
	>          * [branch10] branch10
	> ----------
	>          * [branch10] branch10
	>         +  [branch9] branch9
	>        +   [branch8] branch8
	>       +    [branch7] branch7
	>      +     [branch6] branch6
	>     +      [branch5] branch5
	>    +       [branch4] branch4
	>   +        [branch3] branch3
	>  +         [branch2] branch2
	> +          [branch1] branch1
	> +++++++++* [branch10^] initial
	EOF

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'branch1'
[branch1 39d0a3f] branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch1.t
Switched to a new branch 'branch2'
[branch2 bcd9857] branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch2.t
Switched to a new branch 'branch3'
[branch3 6401a40] branch3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch3.t
Switched to a new branch 'branch4'
[branch4 831d58d] branch4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch4.t
Switched to a new branch 'branch5'
[branch5 d4d852d] branch5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch5.t
Switched to a new branch 'branch6'
[branch6 3af5e35] branch6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch6.t
Switched to a new branch 'branch7'
[branch7 0cecb11] branch7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch7.t
Switched to a new branch 'branch8'
[branch8 48b5688] branch8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch8.t
Switched to a new branch 'branch9'
[branch9 b82e556] branch9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch9.t
Switched to a new branch 'branch10'
[branch10 3b327e0] branch10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch10.t
ok 3 - setup

expecting success of 3202.4 'show-branch with more than 8 branches': 
	git show-branch $(cat branches.sorted) >actual &&
	test_cmp expect actual

ok 4 - show-branch with more than 8 branches

expecting success of 3202.5 'show-branch with showbranch.default': 
	for branch in $(cat branches.sorted)
	do
		test_config showbranch.default $branch --add || return 1
	done &&
	git show-branch >actual &&
	test_cmp expect actual

ok 5 - show-branch with showbranch.default

expecting success of 3202.6 'show-branch --color output': 
	sed "s/^> //" >expect <<-\EOF &&
	> <RED>!<RESET> [branch1] branch1
	>  <GREEN>!<RESET> [branch2] branch2
	>   <YELLOW>!<RESET> [branch3] branch3
	>    <BLUE>!<RESET> [branch4] branch4
	>     <MAGENTA>!<RESET> [branch5] branch5
	>      <CYAN>!<RESET> [branch6] branch6
	>       <BOLD;RED>!<RESET> [branch7] branch7
	>        <BOLD;GREEN>!<RESET> [branch8] branch8
	>         <BOLD;YELLOW>!<RESET> [branch9] branch9
	>          <BOLD;BLUE>*<RESET> [branch10] branch10
	> ----------
	>          <BOLD;BLUE>*<RESET> [branch10] branch10
	>         <BOLD;YELLOW>+<RESET>  [branch9] branch9
	>        <BOLD;GREEN>+<RESET>   [branch8] branch8
	>       <BOLD;RED>+<RESET>    [branch7] branch7
	>      <CYAN>+<RESET>     [branch6] branch6
	>     <MAGENTA>+<RESET>      [branch5] branch5
	>    <BLUE>+<RESET>       [branch4] branch4
	>   <YELLOW>+<RESET>        [branch3] branch3
	>  <GREEN>+<RESET>         [branch2] branch2
	> <RED>+<RESET>          [branch1] branch1
	> <RED>+<RESET><GREEN>+<RESET><YELLOW>+<RESET><BLUE>+<RESET><MAGENTA>+<RESET><CYAN>+<RESET><BOLD;RED>+<RESET><BOLD;GREEN>+<RESET><BOLD;YELLOW>+<RESET><BOLD;BLUE>*<RESET> [branch10^] initial
	EOF
	git show-branch --color=always $(cat branches.sorted) >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 6 - show-branch --color output

expecting success of 3202.7 'show branch --remotes': 
	cat >expect.err <<-\EOF &&
	No revs to be shown.
	EOF
	git show-branch -r 2>actual.err >actual.out &&
	test_cmp expect.err actual.err &&
	test_must_be_empty actual.out

ok 7 - show branch --remotes

expecting success of 3202.8 'setup show branch --list': 
	sed "s/^> //" >expect <<-\EOF
	>   [branch1] branch1
	>   [branch2] branch2
	>   [branch3] branch3
	>   [branch4] branch4
	>   [branch5] branch5
	>   [branch6] branch6
	>   [branch7] branch7
	>   [branch8] branch8
	>   [branch9] branch9
	> * [branch10] branch10
	EOF

ok 8 - setup show branch --list

expecting success of 3202.9 'show branch --list': 
	git show-branch --list $(cat branches.sorted) >actual &&
	test_cmp expect actual

ok 9 - show branch --list

expecting success of 3202.10 'show branch --list has no --color output': 
	git show-branch --color=always --list $(cat branches.sorted) >actual &&
	test_cmp expect actual

ok 10 - show branch --list has no --color output

expecting success of 3202.11 'show branch --merge-base with one argument': 
	for branch in $(cat branches.sorted)
	do
		git rev-parse $branch >expect &&
		git show-branch --merge-base $branch >actual &&
		test_cmp expect actual || return 1
	done

ok 11 - show branch --merge-base with one argument

expecting success of 3202.12 'show branch --merge-base with two arguments': 
	for branch in $(cat branches.sorted)
	do
		git rev-parse initial >expect &&
		git show-branch --merge-base initial $branch >actual &&
		test_cmp expect actual || return 1
	done

ok 12 - show branch --merge-base with two arguments

expecting success of 3202.13 'show branch --merge-base with N arguments': 
	git rev-parse initial >expect &&
	git show-branch --merge-base $(cat branches.sorted) >actual &&
	test_cmp expect actual &&

	git merge-base $(cat branches.sorted) >actual &&
	test_cmp expect actual

ok 13 - show branch --merge-base with N arguments

expecting success of 3202.14 'show branch --reflog=2': 
	sed "s/^>	//" >expect <<-\EOF &&
	>	! [refs/heads/branch10@{0}] (4 years, 5 months ago) commit: branch10
	>	 ! [refs/heads/branch10@{1}] (4 years, 5 months ago) commit: branch10
	>	--
	>	+  [refs/heads/branch10@{0}] branch10
	>	++ [refs/heads/branch10@{1}] initial
	EOF
	git show-branch --reflog=2 >actual &&
	test_cmp actual expect

ok 14 - show branch --reflog=2

expecting success of 3202.15 'show-branch --all --reflog (should fail)': 
		test_must_fail git show-branch $combo 2>error &&
		grep -e "cannot be used together" -e "usage:" error
	
fatal: options '--reflog' and '--all/--remotes/--independent/--merge-base' cannot be used together
ok 15 - show-branch --all --reflog (should fail)

expecting success of 3202.16 'show-branch --merge-base --reflog (should fail)': 
		test_must_fail git show-branch $combo 2>error &&
		grep -e "cannot be used together" -e "usage:" error
	
usage: git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]
ok 16 - show-branch --merge-base --reflog (should fail)

expecting success of 3202.17 'show-branch --list --merge-base (should fail)': 
		test_must_fail git show-branch $combo 2>error &&
		grep -e "cannot be used together" -e "usage:" error
	
usage: git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]
ok 17 - show-branch --list --merge-base (should fail)

expecting success of 3202.18 'show-branch --reflog --current (should fail)': 
		test_must_fail git show-branch $combo 2>error &&
		grep -e "cannot be used together" -e "usage:" error
	
fatal: options '--reflog' and '--current' cannot be used together
ok 18 - show-branch --reflog --current (should fail)

expecting success of 3202.19 'error descriptions on non-existent branch': 
	cat >expect <<-EOF &&
	error: No branch named 'non-existent'.
	EOF
	test_must_fail git branch --edit-description non-existent 2>actual &&
	test_cmp expect actual

ok 19 - error descriptions on non-existent branch

expecting success of 3202.20 'fatal descriptions on non-existent branch': 
	cat >expect <<-EOF &&
	fatal: branch 'non-existent' does not exist
	EOF
	test_must_fail git branch --set-upstream-to=non-existent non-existent 2>actual &&
	test_cmp expect actual &&

	cat >expect <<-EOF &&
	fatal: No branch named 'non-existent'.
	EOF
	test_must_fail git branch -c non-existent new-branch 2>actual &&
	test_cmp expect actual &&
	test_must_fail git branch -m non-existent new-branch 2>actual &&
	test_cmp expect actual

ok 20 - fatal descriptions on non-existent branch

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3203-branch-output.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3203-branch-output/.git/
expecting success of 3203.1 'make commits': 
	echo content >file &&
	git add file &&
	git commit -m one &&
	git branch -M main &&
	echo content >>file &&
	git commit -a -m two

[master (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 5647d5f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - make commits

expecting success of 3203.2 'make branches': 
	git branch branch-one &&
	git branch branch-two HEAD^

ok 2 - make branches

expecting success of 3203.3 'make remote branches': 
	git update-ref refs/remotes/origin/branch-one branch-one &&
	git update-ref refs/remotes/origin/branch-two branch-two &&
	git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/branch-one

ok 3 - make remote branches

expecting success of 3203.4 'git branch shows local branches': 
	git branch >actual &&
	test_cmp expect actual

ok 4 - git branch shows local branches

expecting success of 3203.5 'git branch --list shows local branches': 
	git branch --list >actual &&
	test_cmp expect actual

ok 5 - git branch --list shows local branches

expecting success of 3203.6 'git branch --list pattern shows matching local branches': 
	git branch --list branch* >actual &&
	test_cmp expect actual

ok 6 - git branch --list pattern shows matching local branches

expecting success of 3203.7 'git branch -r shows remote branches': 
	git branch -r >actual &&
	test_cmp expect actual

ok 7 - git branch -r shows remote branches

expecting success of 3203.8 'git branch -a shows local and remote branches': 
	git branch -a >actual &&
	test_cmp expect actual

ok 8 - git branch -a shows local and remote branches

expecting success of 3203.9 'git branch -v shows branch summaries': 
	git branch -v >tmp &&
	awk "{print \$NF}" <tmp >actual &&
	test_cmp expect actual

ok 9 - git branch -v shows branch summaries

expecting success of 3203.10 'git branch --list -v pattern shows branch summaries': 
	git branch --list -v branch* >tmp &&
	awk "{print \$NF}" <tmp >actual &&
	test_cmp expect actual

ok 10 - git branch --list -v pattern shows branch summaries

expecting success of 3203.11 'git branch --ignore-case --list -v pattern shows branch summaries': 
	git branch --list --ignore-case -v BRANCH* >tmp &&
	awk "{print \$NF}" <tmp >actual &&
	test_cmp expect actual

ok 11 - git branch --ignore-case --list -v pattern shows branch summaries

expecting success of 3203.12 'git branch -v pattern does not show branch summaries': 
	test_must_fail git branch -v branch*

fatal: 'branch*' is not a valid branch name
ok 12 - git branch -v pattern does not show branch summaries

expecting success of 3203.13 'git branch `--show-current` shows current branch': 
	cat >expect <<-\EOF &&
	branch-two
	EOF
	git checkout branch-two &&
	git branch --show-current >actual &&
	test_cmp expect actual

Switched to branch 'branch-two'
ok 13 - git branch `--show-current` shows current branch

expecting success of 3203.14 'git branch `--show-current` is silent when detached HEAD': 
	git checkout HEAD^0 &&
	git branch --show-current >actual &&
	test_must_be_empty actual

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f39a923 one
ok 14 - git branch `--show-current` is silent when detached HEAD

expecting success of 3203.15 'git branch `--show-current` works properly when tag exists': 
	cat >expect <<-\EOF &&
	branch-and-tag-name
	EOF
	test_when_finished "
		git checkout branch-one
		git branch -D branch-and-tag-name
	" &&
	git checkout -b branch-and-tag-name &&
	test_when_finished "git tag -d branch-and-tag-name" &&
	git tag branch-and-tag-name &&
	git branch --show-current >actual &&
	test_cmp expect actual

Switched to a new branch 'branch-and-tag-name'
Deleted tag 'branch-and-tag-name' (was f39a923)
Switched to branch 'branch-one'
Deleted branch branch-and-tag-name (was f39a923).
ok 15 - git branch `--show-current` works properly when tag exists

expecting success of 3203.16 'git branch `--show-current` works properly with worktrees': 
	cat >expect <<-\EOF &&
	branch-one
	branch-two
	EOF
	git checkout branch-one &&
	test_when_finished "
		git worktree remove worktree_dir
	" &&
	git worktree add worktree_dir branch-two &&
	{
		git branch --show-current &&
		git -C worktree_dir branch --show-current
	} >actual &&
	test_cmp expect actual

Already on 'branch-one'
Preparing worktree (checking out 'branch-two')
HEAD is now at f39a923 one
ok 16 - git branch `--show-current` works properly with worktrees

expecting success of 3203.17 'git branch shows detached HEAD properly': 
	cat >expect <<EOF &&
* (HEAD detached at $(git rev-parse --short HEAD^0))
  branch-one
  branch-two
  main
EOF
	git checkout HEAD^0 &&
	git branch >actual &&
	test_cmp expect actual

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5647d5f two
ok 17 - git branch shows detached HEAD properly

expecting success of 3203.18 'git branch shows detached HEAD properly after checkout --detach': 
	git checkout main &&
	cat >expect <<EOF &&
* (HEAD detached at $(git rev-parse --short HEAD^0))
  branch-one
  branch-two
  main
EOF
	git checkout --detach &&
	git branch >actual &&
	test_cmp expect actual

Switched to branch 'main'
HEAD is now at 5647d5f two
ok 18 - git branch shows detached HEAD properly after checkout --detach

expecting success of 3203.19 'git branch shows detached HEAD properly after moving': 
	cat >expect <<EOF &&
* (HEAD detached from $(git rev-parse --short HEAD))
  branch-one
  branch-two
  main
EOF
	git reset --hard HEAD^1 &&
	git branch >actual &&
	test_cmp expect actual

HEAD is now at f39a923 one
ok 19 - git branch shows detached HEAD properly after moving

expecting success of 3203.20 'git branch shows detached HEAD properly from tag': 
	cat >expect <<EOF &&
* (HEAD detached at fromtag)
  branch-one
  branch-two
  main
EOF
	git tag fromtag main &&
	git checkout fromtag &&
	git branch >actual &&
	test_cmp expect actual

Previous HEAD position was f39a923 one
HEAD is now at 5647d5f two
ok 20 - git branch shows detached HEAD properly from tag

expecting success of 3203.21 'git branch shows detached HEAD properly after moving from tag': 
	cat >expect <<EOF &&
* (HEAD detached from fromtag)
  branch-one
  branch-two
  main
EOF
	git reset --hard HEAD^1 &&
	git branch >actual &&
	test_cmp expect actual

HEAD is now at f39a923 one
ok 21 - git branch shows detached HEAD properly after moving from tag

expecting success of 3203.22 'git branch `--sort=[-]objectsize` option': 
	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  branch-two
	  branch-one
	  main
	EOF
	git branch --sort=objectsize >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  branch-one
	  main
	  branch-two
	EOF
	git branch --sort=-objectsize >actual &&
	test_cmp expect actual

ok 22 - git branch `--sort=[-]objectsize` option

expecting success of 3203.23 'git branch `--sort=[-]type` option': 
	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  branch-one
	  branch-two
	  main
	EOF
	git branch --sort=type >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  branch-one
	  branch-two
	  main
	EOF
	git branch --sort=-type >actual &&
	test_cmp expect actual

ok 23 - git branch `--sort=[-]type` option

expecting success of 3203.24 'git branch `--sort=[-]version:refname` option': 
	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  branch-one
	  branch-two
	  main
	EOF
	git branch --sort=version:refname >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	* (HEAD detached from fromtag)
	  main
	  branch-two
	  branch-one
	EOF
	git branch --sort=-version:refname >actual &&
	test_cmp expect actual

ok 24 - git branch `--sort=[-]version:refname` option

expecting success of 3203.25 'git branch --points-at option': 
	cat >expect <<-\EOF &&
	  branch-one
	  main
	EOF
	git branch --points-at=branch-one >actual &&
	test_cmp expect actual

ok 25 - git branch --points-at option

expecting success of 3203.26 'ambiguous branch/tag not marked': 
	git tag ambiguous &&
	git branch ambiguous &&
	echo "  ambiguous" >expect &&
	git branch --list ambiguous >actual &&
	test_cmp expect actual

ok 26 - ambiguous branch/tag not marked

expecting success of 3203.27 'local-branch symrefs shortened properly': 
	git symbolic-ref refs/heads/ref-to-branch refs/heads/branch-one &&
	git symbolic-ref refs/heads/ref-to-remote refs/remotes/origin/branch-one &&
	cat >expect <<-\EOF &&
	  ref-to-branch -> branch-one
	  ref-to-remote -> origin/branch-one
	EOF
	git branch >actual.raw &&
	grep ref-to <actual.raw >actual &&
	test_cmp expect actual

ok 27 - local-branch symrefs shortened properly

expecting success of 3203.28 'sort branches, ignore case': 
	(
		git init -b main sort-icase &&
		cd sort-icase &&
		test_commit initial &&
		git branch branch-one &&
		git branch BRANCH-two &&
		git branch --list | awk "{print \$NF}" >actual &&
		cat >expected <<-\EOF &&
		BRANCH-two
		branch-one
		main
		EOF
		test_cmp expected actual &&
		git branch --list -i | awk "{print \$NF}" >actual &&
		cat >expected <<-\EOF &&
		branch-one
		BRANCH-two
		main
		EOF
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3203-branch-output/sort-icase/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 28 - sort branches, ignore case

expecting success of 3203.29 'git branch --format option': 
	cat >expect <<-\EOF &&
	Refname is (HEAD detached from fromtag)
	Refname is refs/heads/ambiguous
	Refname is refs/heads/branch-one
	Refname is refs/heads/branch-two
	Refname is refs/heads/main
	Refname is refs/heads/ref-to-branch
	Refname is refs/heads/ref-to-remote
	EOF
	git branch --format="Refname is %(refname)" >actual &&
	test_cmp expect actual

ok 29 - git branch --format option

expecting success of 3203.30 'git branch with --format=%(rest) must fail': 
	test_must_fail git branch --format="%(rest)" >actual

fatal: this command reject atom %(rest)
ok 30 - git branch with --format=%(rest) must fail

expecting success of 3203.31 'worktree colors correct': 
	cat >expect <<-EOF &&
	* <GREEN>(HEAD detached from fromtag)<RESET>
	  ambiguous<RESET>
	  branch-one<RESET>
	+ <CYAN>branch-two<RESET>
	  main<RESET>
	  ref-to-branch<RESET> -> branch-one
	  ref-to-remote<RESET> -> origin/branch-one
	EOF
	git worktree add worktree_dir branch-two &&
	git branch --color >actual.raw &&
	rm -r worktree_dir &&
	git worktree prune &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

Preparing worktree (checking out 'branch-two')
HEAD is now at f39a923 one
ok 31 - worktree colors correct

expecting success of 3203.32 'set up color tests': 
	echo "<RED>main<RESET>" >expect.color &&
	echo "main" >expect.bare &&
	color_args="--format=%(color:red)%(refname:short) --list main"

ok 32 - set up color tests

expecting success of 3203.33 '%(color) omitted without tty': 
	TERM=vt100 git branch $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.bare actual

ok 33 - %(color) omitted without tty

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 3203.34 '%(color) present with tty': 
	test_terminal git branch $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.color actual

ok 34 - %(color) present with tty

expecting success of 3203.35 '--color overrides auto-color': 
	git branch --color $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.color actual

ok 35 - --color overrides auto-color

expecting success of 3203.36 'verbose output lists worktree path': 
	one=$(git rev-parse --short HEAD) &&
	two=$(git rev-parse --short main) &&
	cat >expect <<-EOF &&
	* (HEAD detached from fromtag) $one one
	  ambiguous                    $one one
	  branch-one                   $two two
	+ branch-two                   $one ($(pwd)/worktree_dir) one
	  main                         $two two
	  ref-to-branch                $two two
	  ref-to-remote                $two two
	EOF
	git worktree add worktree_dir branch-two &&
	git branch -vv >actual &&
	rm -r worktree_dir &&
	git worktree prune &&
	test_cmp expect actual

Preparing worktree (checking out 'branch-two')
HEAD is now at f39a923 one
ok 36 - verbose output lists worktree path

# passed all 36 test(s)
1..36
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3204-branch-name-interpretation.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3204-branch-name-interpretation/.git/
expecting success of 3204.1 'set up repo': 
	test_commit one &&
	test_commit two &&
	git remote add origin foo.git

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - set up repo

expecting success of 3204.2 'update branch via @{-1}': 
	git branch previous one &&

	git checkout previous &&
	git checkout main &&

	git branch -f @{-1} two &&
	expect_branch previous two

Switched to branch 'previous'
Switched to branch 'main'
ok 2 - update branch via @{-1}

expecting success of 3204.3 'update branch via local @{upstream}': 
	git branch local one &&
	git branch --set-upstream-to=local &&

	git branch -f @{upstream} two &&
	expect_branch local two

branch 'main' set up to track 'local'.
ok 3 - update branch via local @{upstream}

expecting success of 3204.4 'disallow updating branch via remote @{upstream}': 
	git update-ref refs/remotes/origin/remote one &&
	git branch --set-upstream-to=origin/remote &&

	test_must_fail git branch -f @{upstream} two

branch 'main' set up to track 'origin/remote'.
fatal: '@{upstream}' is not a valid branch name
ok 4 - disallow updating branch via remote @{upstream}

expecting success of 3204.5 'create branch with pseudo-qualified name': 
	git branch refs/heads/qualified two &&
	expect_branch refs/heads/refs/heads/qualified two

ok 5 - create branch with pseudo-qualified name

expecting success of 3204.6 'delete branch via @{-1}': 
	git branch previous-del &&

	git checkout previous-del &&
	git checkout main &&

	git branch -D @{-1} &&
	expect_deleted previous-del

Switched to branch 'previous-del'
Switched to branch 'main'
Your branch is ahead of 'origin/remote' by 1 commit.
  (use "git push" to publish your local commits)
Deleted branch previous-del (was 139b20d).
fatal: Needed a single revision
ok 6 - delete branch via @{-1}

expecting success of 3204.7 'delete branch via local @{upstream}': 
	git branch local-del &&
	git branch --set-upstream-to=local-del &&

	git branch -D @{upstream} &&
	expect_deleted local-del

branch 'main' set up to track 'local-del'.
Deleted branch local-del (was 139b20d).
fatal: Needed a single revision
ok 7 - delete branch via local @{upstream}

expecting success of 3204.8 'delete branch via remote @{upstream}': 
	git update-ref refs/remotes/origin/remote-del two &&
	git branch --set-upstream-to=origin/remote-del &&

	git branch -r -D @{upstream} &&
	expect_deleted origin/remote-del

branch 'main' set up to track 'origin/remote-del'.
Deleted remote-tracking branch origin/remote-del (was 139b20d).
fatal: Needed a single revision
ok 8 - delete branch via remote @{upstream}

expecting success of 3204.9 'delete @{upstream} expansion matches -r option': 
	git update-ref refs/remotes/origin/remote-del two &&
	git branch --set-upstream-to=origin/remote-del &&
	git update-ref refs/heads/origin/remote-del two &&
	git update-ref refs/heads/remotes/origin/remote-del two &&

	test_must_fail git branch -D @{upstream} &&
	expect_branch refs/heads/origin/remote-del two &&
	expect_branch refs/heads/remotes/origin/remote-del two

branch 'main' set up to track 'origin/remote-del'.
error: branch '@{upstream}' not found.
ok 9 - delete @{upstream} expansion matches -r option

expecting success of 3204.10 'disallow deleting remote branch via @{-1}': 
	git update-ref refs/remotes/origin/previous one &&

	git checkout -b origin/previous two &&
	git checkout main &&

	test_must_fail git branch -r -D @{-1} &&
	expect_branch refs/remotes/origin/previous one &&
	expect_branch refs/heads/origin/previous two

Switched to a new branch 'origin/previous'
Switched to branch 'main'
Your branch is up to date with 'remotes/origin/remote-del'.
error: remote-tracking branch '@{-1}' not found.
ok 10 - disallow deleting remote branch via @{-1}

expecting success of 3204.11 'create branch named "@"': 
	git branch -f @ one &&
	expect_branch refs/heads/@ one

ok 11 - create branch named "@"

expecting success of 3204.12 'delete branch named "@"': 
	git update-ref refs/heads/@ two &&
	git branch -D @ &&
	expect_deleted refs/heads/@

Deleted branch @ (was 139b20d).
fatal: Needed a single revision
ok 12 - delete branch named "@"

expecting success of 3204.13 'checkout does not treat remote @{upstream} as a branch': 
	git update-ref refs/remotes/origin/checkout one &&
	git branch --set-upstream-to=origin/checkout &&
	git update-ref refs/heads/origin/checkout two &&
	git update-ref refs/heads/remotes/origin/checkout two &&

	git checkout @{upstream} &&
	expect_branch HEAD one

branch 'main' set up to track 'origin/checkout'.
warning: refname '@{upstream}' is ambiguous.
Note: switching to '@{upstream}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d79ce16 one
ok 13 - checkout does not treat remote @{upstream} as a branch

expecting success of 3204.14 'edit-description via @{-1}': 
	git checkout -b desc-branch &&
	git checkout -b non-desc-branch &&
	write_script editor <<-\EOF &&
		echo "Branch description" >"$1"
	EOF
	EDITOR=./editor git branch --edit-description @{-1} &&
	test_must_fail git config branch.non-desc-branch.description &&
	git config branch.desc-branch.description >actual &&
	printf "Branch description\n\n" >expect &&
	test_cmp expect actual

Switched to a new branch 'desc-branch'
Switched to a new branch 'non-desc-branch'
ok 14 - edit-description via @{-1}

expecting success of 3204.15 'modify branch upstream via "@{-1}" and "@{-1}@{upstream}"': 
	git checkout -b upstream-branch &&
	git checkout -b upstream-other -t upstream-branch &&
	git branch --set-upstream-to upstream-other @{-1} &&
	git config branch.upstream-branch.merge >actual &&
	echo "refs/heads/upstream-other" >expect &&
	test_cmp expect actual &&
	git branch --unset-upstream @{-1}@{upstream} &&
	test_must_fail git config branch.upstream-other.merge

Switched to a new branch 'upstream-branch'
Switched to a new branch 'upstream-other'
branch 'upstream-other' set up to track 'upstream-branch'.
branch 'upstream-branch' set up to track 'upstream-other'.
ok 15 - modify branch upstream via "@{-1}" and "@{-1}@{upstream}"

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3205-branch-color.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3205-branch-color/.git/
expecting success of 3205.1 'set up some sample branches': 
	test_commit foo &&
	git branch -M main &&
	git update-ref refs/remotes/origin/main HEAD &&
	git update-ref refs/heads/other HEAD

[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 1 - set up some sample branches

expecting success of 3205.2 'set up some color config': 
	git config color.branch.local blue &&
	git config color.branch.remote yellow &&
	git config color.branch.current cyan

ok 2 - set up some color config

expecting success of 3205.3 'regular output shows colors': 
	cat >expect <<-\EOF &&
	* <CYAN>main<RESET>
	  <BLUE>other<RESET>
	  <YELLOW>remotes/origin/main<RESET>
	EOF
	git branch --color -a >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 3 - regular output shows colors

expecting success of 3205.4 'verbose output shows colors': 
	oid=$(git rev-parse --short HEAD) &&
	cat >expect <<-EOF &&
	* <CYAN>main               <RESET> $oid foo
	  <BLUE>other              <RESET> $oid foo
	  <YELLOW>remotes/origin/main<RESET> $oid foo
	EOF
	git branch --color -v -a >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 4 - verbose output shows colors

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3206-range-diff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3206-range-diff/.git/
expecting success of 3206.1 'setup': 
	git fast-import <"$TEST_DIRECTORY"/t3206/history.export &&
	test_oid_cache <<-\EOF
	# topic
	t1 sha1:4de457d
	t2 sha1:fccce22
	t3 sha1:147e64e
	t4 sha1:a63e992
	t1 sha256:b89f8b9
	t2 sha256:5f12aad
	t3 sha256:ea8b273
	t4 sha256:14b7336

	# unmodified
	u1 sha1:35b9b25
	u2 sha1:de345ab
	u3 sha1:9af6654
	u4 sha1:2901f77
	u1 sha256:e3731be
	u2 sha256:14fadf8
	u3 sha256:736c4bc
	u4 sha256:673e77d

	# reordered
	r1 sha1:aca177a
	r2 sha1:14ad629
	r3 sha1:ee58208
	r4 sha1:307b27a
	r1 sha256:f59d3aa
	r2 sha256:fb261a8
	r3 sha256:cb2649b
	r4 sha256:958577e

	# removed (deleted)
	d1 sha1:7657159
	d2 sha1:43d84d3
	d3 sha1:a740396
	d1 sha256:e312513
	d2 sha256:eb19258
	d3 sha256:1ccb3c1

	# added
	a1 sha1:2716022
	a2 sha1:b62accd
	a3 sha1:df46cfa
	a4 sha1:3e64548
	a5 sha1:12b4063
	a1 sha256:d724f4d
	a2 sha256:1de7762
	a3 sha256:e159431
	a4 sha256:b3e483c
	a5 sha256:90866a7

	# rebased
	b1 sha1:cc9c443
	b2 sha1:c5d9641
	b3 sha1:28cc2b6
	b4 sha1:5628ab7
	b5 sha1:a31b12e
	b1 sha256:a1a8717
	b2 sha256:20a5862
	b3 sha256:587172a
	b4 sha256:2721c5d
	b5 sha256:7b57864

	# changed
	c1 sha1:a4b3333
	c2 sha1:f51d370
	c3 sha1:0559556
	c4 sha1:d966c5c
	c1 sha256:f8c2b9d
	c2 sha256:3fb6318
	c3 sha256:168ab68
	c4 sha256:3526539

	# changed-message
	m1 sha1:f686024
	m2 sha1:4ab067d
	m3 sha1:b9cb956
	m4 sha1:8add5f1
	m1 sha256:31e6281
	m2 sha256:a06bf1b
	m3 sha256:82dc654
	m4 sha256:48470c5

	# renamed
	n1 sha1:f258d75
	n2 sha1:017b62d
	n3 sha1:3ce7af6
	n4 sha1:1e6226b
	n1 sha256:ad52114
	n2 sha256:3b54c8f
	n3 sha256:3b0a644
	n4 sha256:e461653

	# mode change
	o1 sha1:4d39cb3
	o2 sha1:26c107f
	o3 sha1:4c1e0f5
	o1 sha256:d0dd598
	o2 sha256:c4a279e
	o3 sha256:78459d7

	# added and removed
	s1 sha1:096b1ba
	s2 sha1:d92e698
	s3 sha1:9a1db4d
	s4 sha1:fea3b5c
	s1 sha256:a7f9134
	s2 sha256:b4c2580
	s3 sha256:1d62aa2
	s4 sha256:48160e8

	# Empty delimiter (included so lines match neatly)
	__ sha1:-------
	__ sha256:-------
	EOF

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           83 (        21 duplicates                  )
      blobs  :           14 (         0 duplicates          0 deltas of         11 attempts)
      trees  :           24 (        21 duplicates          1 deltas of         23 attempts)
      commits:           45 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:          12 (        14 loads     )
      marks:           1024 (        59 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         23
pack_report: pack_mmap_calls          =         13
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       8521
---------------------------------------------------------------------

ok 1 - setup

expecting success of 3206.2 'simple A..B A..C (unmodified)': 
	git range-diff --no-color main..topic main..unmodified \
		>actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid u1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid u2) s/4/A/
	3:  $(test_oid t3) = 3:  $(test_oid u3) s/11/B/
	4:  $(test_oid t4) = 4:  $(test_oid u4) s/12/B/
	EOF
	test_cmp expect actual

ok 2 - simple A..B A..C (unmodified)

expecting success of 3206.3 'simple B...C (unmodified)': 
	git range-diff --no-color topic...unmodified >actual &&
	# same "expect" as above
	test_cmp expect actual

ok 3 - simple B...C (unmodified)

expecting success of 3206.4 'simple A B C (unmodified)': 
	git range-diff --no-color main topic unmodified >actual &&
	# same "expect" as above
	test_cmp expect actual

ok 4 - simple A B C (unmodified)

expecting success of 3206.5 'A^! and A^-<n> (unmodified)': 
	git range-diff --no-color topic^! unmodified^-1 >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t4) = 1:  $(test_oid u4) s/12/B/
	EOF
	test_cmp expect actual

ok 5 - A^! and A^-<n> (unmodified)

expecting success of 3206.6 'A^{/..} is not mistaken for a range': 
	test_must_fail git range-diff topic^.. topic^{/..} -- 2>error &&
	test_i18ngrep "not a commit range" error

fatal: not a commit range: 'topic^{/..}'
ok 6 - A^{/..} is not mistaken for a range

expecting success of 3206.7 'trivial reordering': 
	git range-diff --no-color main topic reordered >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid r1) s/5/A/
	3:  $(test_oid t3) = 2:  $(test_oid r2) s/11/B/
	4:  $(test_oid t4) = 3:  $(test_oid r3) s/12/B/
	2:  $(test_oid t2) = 4:  $(test_oid r4) s/4/A/
	EOF
	test_cmp expect actual

ok 7 - trivial reordering

expecting success of 3206.8 'removed a commit': 
	git range-diff --no-color main topic removed >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid d1) s/5/A/
	2:  $(test_oid t2) < -:  $(test_oid __) s/4/A/
	3:  $(test_oid t3) = 2:  $(test_oid d2) s/11/B/
	4:  $(test_oid t4) = 3:  $(test_oid d3) s/12/B/
	EOF
	test_cmp expect actual

ok 8 - removed a commit

expecting success of 3206.9 'added a commit': 
	git range-diff --no-color main topic added >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid a1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid a2) s/4/A/
	-:  $(test_oid __) > 3:  $(test_oid a3) s/6/A/
	3:  $(test_oid t3) = 4:  $(test_oid a4) s/11/B/
	4:  $(test_oid t4) = 5:  $(test_oid a5) s/12/B/
	EOF
	test_cmp expect actual

ok 9 - added a commit

expecting success of 3206.10 'new base, A B C': 
	git range-diff --no-color main topic rebased >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid b1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid b2) s/4/A/
	3:  $(test_oid t3) = 3:  $(test_oid b3) s/11/B/
	4:  $(test_oid t4) = 4:  $(test_oid b4) s/12/B/
	EOF
	test_cmp expect actual

ok 10 - new base, A B C

expecting success of 3206.11 'new base, B...C': 
	# this syntax includes the commits from main!
	git range-diff --no-color topic...rebased >actual &&
	cat >expect <<-EOF &&
	-:  $(test_oid __) > 1:  $(test_oid b5) unrelated
	1:  $(test_oid t1) = 2:  $(test_oid b1) s/5/A/
	2:  $(test_oid t2) = 3:  $(test_oid b2) s/4/A/
	3:  $(test_oid t3) = 4:  $(test_oid b3) s/11/B/
	4:  $(test_oid t4) = 5:  $(test_oid b4) s/12/B/
	EOF
	test_cmp expect actual

ok 11 - new base, B...C

expecting success of 3206.12 'changed commit': 
	git range-diff --no-color topic...changed >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
	    @@ file: A
	      9
	      10
	     -11
	    -+B
	    ++BB
	      12
	      13
	      14
	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
	    @@ file
	     @@ file: A
	      9
	      10
	    - B
	    + BB
	     -12
	     +B
	      13
	EOF
	test_cmp expect actual

ok 12 - changed commit

expecting success of 3206.13 'changed commit with --no-patch diff option': 
	git range-diff --no-color --no-patch topic...changed >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
	EOF
	test_cmp expect actual

ok 13 - changed commit with --no-patch diff option

expecting success of 3206.14 'changed commit with --stat diff option': 
	git range-diff --no-color --stat topic...changed >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
	     a => b | 2 +-
	     1 file changed, 1 insertion(+), 1 deletion(-)
	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
	     a => b | 2 +-
	     1 file changed, 1 insertion(+), 1 deletion(-)
	EOF
	test_cmp expect actual

ok 14 - changed commit with --stat diff option

expecting success of 3206.15 'changed commit with sm config': 
	git range-diff --no-color --submodule=log topic...changed >actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid c1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid c2) s/4/A/
	3:  $(test_oid t3) ! 3:  $(test_oid c3) s/11/B/
	    @@ file: A
	      9
	      10
	     -11
	    -+B
	    ++BB
	      12
	      13
	      14
	4:  $(test_oid t4) ! 4:  $(test_oid c4) s/12/B/
	    @@ file
	     @@ file: A
	      9
	      10
	    - B
	    + BB
	     -12
	     +B
	      13
	EOF
	test_cmp expect actual

ok 15 - changed commit with sm config

expecting success of 3206.16 'renamed file': 
	git range-diff --no-color --submodule=log topic...renamed-file >actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid n1) s/5/A/
	2:  $(test_oid t2) ! 2:  $(test_oid n2) s/4/A/
	    @@ Metadata
	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
	    Z
	    Z ## Commit message ##
	    -    s/4/A/
	    +    s/4/A/ + rename file
	    Z
	    - ## file ##
	    + ## file => renamed-file ##
	    Z@@
	    Z 1
	    Z 2
	3:  $(test_oid t3) ! 3:  $(test_oid n3) s/11/B/
	    @@ Metadata
	    Z ## Commit message ##
	    Z    s/11/B/
	    Z
	    - ## file ##
	    -@@ file: A
	    + ## renamed-file ##
	    +@@ renamed-file: A
	    Z 8
	    Z 9
	    Z 10
	4:  $(test_oid t4) ! 4:  $(test_oid n4) s/12/B/
	    @@ Metadata
	    Z ## Commit message ##
	    Z    s/12/B/
	    Z
	    - ## file ##
	    -@@ file: A
	    + ## renamed-file ##
	    +@@ renamed-file: A
	    Z 9
	    Z 10
	    Z B
	EOF
	test_cmp expect actual

ok 16 - renamed file

expecting success of 3206.17 'file with mode only change': 
	git range-diff --no-color --submodule=log topic...mode-only-change >actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t2) ! 1:  $(test_oid o1) s/4/A/
	    @@ Metadata
	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
	    Z
	    Z ## Commit message ##
	    -    s/4/A/
	    +    s/4/A/ + add other-file
	    Z
	    Z ## file ##
	    Z@@
	    @@ file
	    Z A
	    Z 6
	    Z 7
	    +
	    + ## other-file (new) ##
	2:  $(test_oid t3) ! 2:  $(test_oid o2) s/11/B/
	    @@ Metadata
	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
	    Z
	    Z ## Commit message ##
	    -    s/11/B/
	    +    s/11/B/ + mode change other-file
	    Z
	    Z ## file ##
	    Z@@ file: A
	    @@ file: A
	    Z 12
	    Z 13
	    Z 14
	    +
	    + ## other-file (mode change 100644 => 100755) ##
	3:  $(test_oid t4) = 3:  $(test_oid o3) s/12/B/
	EOF
	test_cmp expect actual

ok 17 - file with mode only change

expecting success of 3206.18 'file added and later removed': 
	git range-diff --no-color --submodule=log topic...added-removed >actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid s1) s/5/A/
	2:  $(test_oid t2) ! 2:  $(test_oid s2) s/4/A/
	    @@ Metadata
	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
	    Z
	    Z ## Commit message ##
	    -    s/4/A/
	    +    s/4/A/ + new-file
	    Z
	    Z ## file ##
	    Z@@
	    @@ file
	    Z A
	    Z 6
	    Z 7
	    +
	    + ## new-file (new) ##
	3:  $(test_oid t3) ! 3:  $(test_oid s3) s/11/B/
	    @@ Metadata
	    ZAuthor: Thomas Rast <trast@inf.ethz.ch>
	    Z
	    Z ## Commit message ##
	    -    s/11/B/
	    +    s/11/B/ + remove file
	    Z
	    Z ## file ##
	    Z@@ file: A
	    @@ file: A
	    Z 12
	    Z 13
	    Z 14
	    +
	    + ## new-file (deleted) ##
	4:  $(test_oid t4) = 4:  $(test_oid s4) s/12/B/
	EOF
	test_cmp expect actual

ok 18 - file added and later removed

expecting success of 3206.19 'no commits on one side': 
	git commit --amend -m "new message" &&
	git range-diff main HEAD@{1} HEAD

[main b4b08e4] new message
 Author: Thomas Rast <trast@inf.ethz.ch>
 Date: Mon Jul 22 11:25:27 2013 +0200
 1 file changed, 20 deletions(-)
 delete mode 100644 file
1:  a31b12e < -:  ------- unrelated
ok 19 - no commits on one side

expecting success of 3206.20 'changed message': 
	git range-diff --no-color topic...changed-message >actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid m1) s/5/A/
	2:  $(test_oid t2) ! 2:  $(test_oid m2) s/4/A/
	    @@ Metadata
	    Z ## Commit message ##
	    Z    s/4/A/
	    Z
	    +    Also a silly comment here!
	    +
	    Z ## file ##
	    Z@@
	    Z 1
	3:  $(test_oid t3) = 3:  $(test_oid m3) s/11/B/
	4:  $(test_oid t4) = 4:  $(test_oid m4) s/12/B/
	EOF
	test_cmp expect actual

ok 20 - changed message

expecting success of 3206.21 'dual-coloring': 
	sed -e "s|^:||" >expect <<-EOF &&
	:<YELLOW>1:  $(test_oid c1) = 1:  $(test_oid m1) s/5/A/<RESET>
	:<RED>2:  $(test_oid c2) <RESET><YELLOW>!<RESET><GREEN> 2:  $(test_oid m2)<RESET><YELLOW> s/4/A/<RESET>
	:    <REVERSE><CYAN>@@<RESET> <RESET>Metadata<RESET>
	:      ## Commit message ##<RESET>
	:         s/4/A/<RESET>
	:     <RESET>
	:    <REVERSE><GREEN>+<RESET><BOLD>    Also a silly comment here!<RESET>
	:    <REVERSE><GREEN>+<RESET>
	:      ## file ##<RESET>
	:    <CYAN> @@<RESET>
	:      1<RESET>
	:<RED>3:  $(test_oid c3) <RESET><YELLOW>!<RESET><GREEN> 3:  $(test_oid m3)<RESET><YELLOW> s/11/B/<RESET>
	:    <REVERSE><CYAN>@@<RESET> <RESET>file: A<RESET>
	:      9<RESET>
	:      10<RESET>
	:    <RED> -11<RESET>
	:    <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET>
	:    <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET>
	:      12<RESET>
	:      13<RESET>
	:      14<RESET>
	:<RED>4:  $(test_oid c4) <RESET><YELLOW>!<RESET><GREEN> 4:  $(test_oid m4)<RESET><YELLOW> s/12/B/<RESET>
	:    <REVERSE><CYAN>@@<RESET> <RESET>file<RESET>
	:    <CYAN> @@ file: A<RESET>
	:      9<RESET>
	:      10<RESET>
	:    <REVERSE><RED>-<RESET><FAINT> BB<RESET>
	:    <REVERSE><GREEN>+<RESET><BOLD> B<RESET>
	:    <RED> -12<RESET>
	:    <GREEN> +B<RESET>
	:      13<RESET>
	EOF
	git range-diff changed...changed-message --color --dual-color >actual.raw &&
	test_decode_color >actual <actual.raw &&
	test_cmp expect actual

ok 21 - dual-coloring

expecting success of 3206.22 'format-patch --range-diff=topic': 
		git format-patch --cover-letter --range-diff=$prev \
			main..unmodified >actual &&
		test_when_finished "rm 000?-*" &&
		test_line_count = 5 actual &&
		test_i18ngrep "^Range-diff:$" 0000-* &&
		grep "= 1: .* s/5/A" 0000-* &&
		grep "= 2: .* s/4/A" 0000-* &&
		grep "= 3: .* s/11/B" 0000-* &&
		grep "= 4: .* s/12/B" 0000-*
	
Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
ok 22 - format-patch --range-diff=topic

expecting success of 3206.23 'format-patch --range-diff=main..topic': 
		git format-patch --cover-letter --range-diff=$prev \
			main..unmodified >actual &&
		test_when_finished "rm 000?-*" &&
		test_line_count = 5 actual &&
		test_i18ngrep "^Range-diff:$" 0000-* &&
		grep "= 1: .* s/5/A" 0000-* &&
		grep "= 2: .* s/4/A" 0000-* &&
		grep "= 3: .* s/11/B" 0000-* &&
		grep "= 4: .* s/12/B" 0000-*
	
Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
ok 23 - format-patch --range-diff=main..topic

expecting success of 3206.24 'format-patch --range-diff as commentary': 
	git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
	test_when_finished "rm 0001-*" &&
	test_line_count = 1 actual &&
	test_i18ngrep "^Range-diff:$" 0001-* &&
	grep "> 1: .* new message" 0001-*

Range-diff:
-:  ------- > 1:  b4b08e4 new message
ok 24 - format-patch --range-diff as commentary

expecting success of 3206.25 'format-patch --range-diff reroll-count with a non-integer': 
	git format-patch --range-diff=HEAD~1 -v2.9 HEAD~1 >actual &&
	test_when_finished "rm v2.9-0001-*" &&
	test_line_count = 1 actual &&
	test_i18ngrep "^Range-diff:$" v2.9-0001-* &&
	grep "> 1: .* new message" v2.9-0001-*

Range-diff:
-:  ------- > 1:  b4b08e4 new message
ok 25 - format-patch --range-diff reroll-count with a non-integer

expecting success of 3206.26 'format-patch --range-diff reroll-count with a integer': 
	git format-patch --range-diff=HEAD~1 -v2 HEAD~1 >actual &&
	test_when_finished "rm v2-0001-*" &&
	test_line_count = 1 actual &&
	test_i18ngrep "^Range-diff ..* v1:$" v2-0001-* &&
	grep "> 1: .* new message" v2-0001-*

Range-diff against v1:
-:  ------- > 1:  b4b08e4 new message
ok 26 - format-patch --range-diff reroll-count with a integer

expecting success of 3206.27 'format-patch --range-diff with v0': 
	git format-patch --range-diff=HEAD~1 -v0 HEAD~1 >actual &&
	test_when_finished "rm v0-0001-*" &&
	test_line_count = 1 actual &&
	test_i18ngrep "^Range-diff:$" v0-0001-* &&
	grep "> 1: .* new message" v0-0001-*

Range-diff:
-:  ------- > 1:  b4b08e4 new message
ok 27 - format-patch --range-diff with v0

expecting success of 3206.28 'range-diff overrides diff.noprefix internally': 
	git -c diff.noprefix=true range-diff HEAD^...

-:  ------- > 1:  b4b08e4 new message
ok 28 - range-diff overrides diff.noprefix internally

expecting success of 3206.29 'basic with modified format.pretty with suffix': 
	git -c format.pretty="format:commit %H%d%n" range-diff \
		main..topic main..unmodified

1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
ok 29 - basic with modified format.pretty with suffix

expecting success of 3206.30 'basic with modified format.pretty without "commit "': 
	git -c format.pretty="format:%H%n" range-diff \
		main..topic main..unmodified

1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
ok 30 - basic with modified format.pretty without "commit "

expecting success of 3206.31 'range-diff compares notes by default': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	git range-diff --no-color main..topic main..unmodified \
		>actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid u1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid u2) s/4/A/
	3:  $(test_oid t3) = 3:  $(test_oid u3) s/11/B/
	4:  $(test_oid t4) ! 4:  $(test_oid u4) s/12/B/
	    @@ Commit message
	    Z
	    Z
	    Z ## Notes ##
	    -    topic note
	    +    unmodified note
	    Z
	    Z ## file ##
	    Z@@ file: A
	EOF
	test_cmp expect actual

Removing note for object topic
Removing note for object unmodified
ok 31 - range-diff compares notes by default

expecting success of 3206.32 'range-diff with --no-notes': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	git range-diff --no-color --no-notes main..topic main..unmodified \
		>actual &&
	cat >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid u1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid u2) s/4/A/
	3:  $(test_oid t3) = 3:  $(test_oid u3) s/11/B/
	4:  $(test_oid t4) = 4:  $(test_oid u4) s/12/B/
	EOF
	test_cmp expect actual

Removing note for object topic
Removing note for object unmodified
ok 32 - range-diff with --no-notes

expecting success of 3206.33 'range-diff with multiple --notes': 
	git notes --ref=note1 add -m "topic note1" topic &&
	git notes --ref=note1 add -m "unmodified note1" unmodified &&
	test_when_finished git notes --ref=note1 remove topic unmodified &&
	git notes --ref=note2 add -m "topic note2" topic &&
	git notes --ref=note2 add -m "unmodified note2" unmodified &&
	test_when_finished git notes --ref=note2 remove topic unmodified &&
	git range-diff --no-color --notes=note1 --notes=note2 main..topic main..unmodified \
		>actual &&
	sed s/Z/\ /g >expect <<-EOF &&
	1:  $(test_oid t1) = 1:  $(test_oid u1) s/5/A/
	2:  $(test_oid t2) = 2:  $(test_oid u2) s/4/A/
	3:  $(test_oid t3) = 3:  $(test_oid u3) s/11/B/
	4:  $(test_oid t4) ! 4:  $(test_oid u4) s/12/B/
	    @@ Commit message
	    Z
	    Z
	    Z ## Notes (note1) ##
	    -    topic note1
	    +    unmodified note1
	    Z
	    Z
	    Z ## Notes (note2) ##
	    -    topic note2
	    +    unmodified note2
	    Z
	    Z ## file ##
	    Z@@ file: A
	EOF
	test_cmp expect actual

Removing note for object topic
Removing note for object unmodified
Removing note for object topic
Removing note for object unmodified
ok 33 - range-diff with multiple --notes

expecting success of 3206.34 'format-patch --range-diff does not compare notes by default': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	git format-patch --cover-letter --range-diff=$prev \
		main..unmodified >actual &&
	test_when_finished "rm 000?-*" &&
	test_line_count = 5 actual &&
	test_i18ngrep "^Range-diff:$" 0000-* &&
	grep "= 1: .* s/5/A" 0000-* &&
	grep "= 2: .* s/4/A" 0000-* &&
	grep "= 3: .* s/11/B" 0000-* &&
	grep "= 4: .* s/12/B" 0000-* &&
	! grep "Notes" 0000-* &&
	! grep "note" 0000-*

Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
Removing note for object topic
Removing note for object unmodified
ok 34 - format-patch --range-diff does not compare notes by default

expecting success of 3206.35 'format-patch --range-diff with --no-notes': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	git format-patch --no-notes --cover-letter --range-diff=$prev \
		main..unmodified >actual &&
	test_when_finished "rm 000?-*" &&
	test_line_count = 5 actual &&
	test_i18ngrep "^Range-diff:$" 0000-* &&
	grep "= 1: .* s/5/A" 0000-* &&
	grep "= 2: .* s/4/A" 0000-* &&
	grep "= 3: .* s/11/B" 0000-* &&
	grep "= 4: .* s/12/B" 0000-* &&
	! grep "Notes" 0000-* &&
	! grep "note" 0000-*

Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 = 4:  2901f77 s/12/B/
Removing note for object topic
Removing note for object unmodified
ok 35 - format-patch --range-diff with --no-notes

expecting success of 3206.36 'format-patch --range-diff with --notes': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	git format-patch --notes --cover-letter --range-diff=$prev \
		main..unmodified >actual &&
	test_when_finished "rm 000?-*" &&
	test_line_count = 5 actual &&
	test_i18ngrep "^Range-diff:$" 0000-* &&
	grep "= 1: .* s/5/A" 0000-* &&
	grep "= 2: .* s/4/A" 0000-* &&
	grep "= 3: .* s/11/B" 0000-* &&
	grep "! 4: .* s/12/B" 0000-* &&
	sed s/Z/\ /g >expect <<-EOF &&
	    @@ Commit message
	    Z
	    Z
	    Z ## Notes ##
	    -    topic note
	    +    unmodified note
	    Z
	    Z ## file ##
	    Z@@ file: A
	EOF
	sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
	test_cmp expect actual

Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 ! 4:  2901f77 s/12/B/
Removing note for object topic
Removing note for object unmodified
ok 36 - format-patch --range-diff with --notes

expecting success of 3206.37 'format-patch --range-diff with format.notes config': 
	git notes add -m "topic note" topic &&
	git notes add -m "unmodified note" unmodified &&
	test_when_finished git notes remove topic unmodified &&
	test_config format.notes true &&
	git format-patch --cover-letter --range-diff=$prev \
		main..unmodified >actual &&
	test_when_finished "rm 000?-*" &&
	test_line_count = 5 actual &&
	test_i18ngrep "^Range-diff:$" 0000-* &&
	grep "= 1: .* s/5/A" 0000-* &&
	grep "= 2: .* s/4/A" 0000-* &&
	grep "= 3: .* s/11/B" 0000-* &&
	grep "! 4: .* s/12/B" 0000-* &&
	sed s/Z/\ /g >expect <<-EOF &&
	    @@ Commit message
	    Z
	    Z
	    Z ## Notes ##
	    -    topic note
	    +    unmodified note
	    Z
	    Z ## file ##
	    Z@@ file: A
	EOF
	sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
	test_cmp expect actual

Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 ! 4:  2901f77 s/12/B/
Removing note for object topic
Removing note for object unmodified
ok 37 - format-patch --range-diff with format.notes config

expecting success of 3206.38 'format-patch --range-diff with multiple notes': 
	git notes --ref=note1 add -m "topic note1" topic &&
	git notes --ref=note1 add -m "unmodified note1" unmodified &&
	test_when_finished git notes --ref=note1 remove topic unmodified &&
	git notes --ref=note2 add -m "topic note2" topic &&
	git notes --ref=note2 add -m "unmodified note2" unmodified &&
	test_when_finished git notes --ref=note2 remove topic unmodified &&
	git format-patch --notes=note1 --notes=note2 --cover-letter --range-diff=$prev \
		main..unmodified >actual &&
	test_when_finished "rm 000?-*" &&
	test_line_count = 5 actual &&
	test_i18ngrep "^Range-diff:$" 0000-* &&
	grep "= 1: .* s/5/A" 0000-* &&
	grep "= 2: .* s/4/A" 0000-* &&
	grep "= 3: .* s/11/B" 0000-* &&
	grep "! 4: .* s/12/B" 0000-* &&
	sed s/Z/\ /g >expect <<-EOF &&
	    @@ Commit message
	    Z
	    Z
	    Z ## Notes (note1) ##
	    -    topic note1
	    +    unmodified note1
	    Z
	    Z
	    Z ## Notes (note2) ##
	    -    topic note2
	    +    unmodified note2
	    Z
	    Z ## file ##
	    Z@@ file: A
	EOF
	sed "/@@ Commit message/,/@@ file: A/!d" 0000-* >actual &&
	test_cmp expect actual

Range-diff:
1:  4de457d = 1:  35b9b25 s/5/A/
2:  fccce22 = 2:  de345ab s/4/A/
3:  147e64e = 3:  9af6654 s/11/B/
4:  a63e992 ! 4:  2901f77 s/12/B/
Removing note for object topic
Removing note for object unmodified
Removing note for object topic
Removing note for object unmodified
ok 38 - format-patch --range-diff with multiple notes

expecting success of 3206.39 '--left-only/--right-only': 
	git switch --orphan left-right &&
	test_commit first &&
	test_commit unmatched &&
	test_commit common &&
	git switch -C left-right first &&
	git cherry-pick common &&

	git range-diff -s --left-only ...common >actual &&
	head_oid=$(git rev-parse --short HEAD) &&
	common_oid=$(git rev-parse --short common) &&
	echo "1:  $head_oid = 2:  $common_oid common" >expect &&
	test_cmp expect actual

Switched to a new branch 'left-right'
[left-right (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[left-right 8b3efcc] unmatched
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unmatched.t
[left-right 66efeb1] common
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 common.t
Reset branch 'left-right'
[left-right a6d113e] common
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 common.t
ok 39 - --left-only/--right-only

expecting success of 3206.40 'ranges with pathspecs': 
	git range-diff topic...mode-only-change -- other-file >actual &&
	test_line_count = 2 actual &&
	topic_oid=$(git rev-parse --short topic) &&
	mode_change_oid=$(git rev-parse --short mode-only-change^) &&
	file_change_oid=$(git rev-parse --short mode-only-change) &&
	grep "$mode_change_oid" actual &&
	! grep "$file_change_oid" actual &&
	! grep "$topic_oid" actual

-:  ------- > 2:  26c107f s/11/B/ + mode change other-file
ok 40 - ranges with pathspecs

expecting success of 3206.41 'submodule changes are shown irrespective of diff.submodule': 
	git init sub-repo &&
	test_commit -C sub-repo sub-first &&
	sub_oid1=$(git -C sub-repo rev-parse HEAD) &&
	test_commit -C sub-repo sub-second &&
	sub_oid2=$(git -C sub-repo rev-parse HEAD) &&
	test_commit -C sub-repo sub-third &&
	sub_oid3=$(git -C sub-repo rev-parse HEAD) &&

	git checkout -b main-sub topic &&
	git -c protocol.file.allow=always submodule add ./sub-repo sub &&
	git -C sub checkout --detach sub-first &&
	git commit -m "add sub" sub &&
	sup_oid1=$(git rev-parse --short HEAD) &&
	git checkout -b topic-sub &&
	git -C sub checkout sub-second &&
	git commit -m "change sub" sub &&
	sup_oid2=$(git rev-parse --short HEAD) &&
	git checkout -b modified-sub main-sub &&
	git -C sub checkout sub-third &&
	git commit -m "change sub" sub &&
	sup_oid3=$(git rev-parse --short HEAD) &&
	sup_oid0=$(test_oid __) &&

	test_config diff.submodule log &&
	git range-diff topic topic-sub modified-sub >actual &&
	cat >expect <<-EOF &&
	1:  $sup_oid1 = 1:  $sup_oid1 add sub
	2:  $sup_oid2 < -:  $sup_oid0 change sub
	-:  $sup_oid0 > 2:  $sup_oid3 change sub
	EOF
	test_cmp expect actual &&
	test_config diff.submodule diff &&
	git range-diff topic topic-sub modified-sub >actual &&
	git range-diff --creation-factor=100 topic topic-sub modified-sub >actual &&
	cat >expect <<-EOF &&
	1:  $sup_oid1 = 1:  $sup_oid1 add sub
	2:  $sup_oid2 ! 2:  $sup_oid3 change sub
	    @@ Commit message
	      ## sub ##
	     @@
	     -Subproject commit $sub_oid1
	    -+Subproject commit $sub_oid2
	    ++Subproject commit $sub_oid3
	EOF
	test_cmp expect actual &&
	test_config diff.submodule diff &&
	git range-diff --creation-factor=100 topic topic-sub modified-sub >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3206-range-diff/sub-repo/.git/
[main (root-commit) 0dd48dc] sub-first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub-first.t
[main 5aa4e7e] sub-second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub-second.t
[main 57c2aa9] sub-third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub-third.t
Switched to a new branch 'main-sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3206-range-diff/sub'...
done.
HEAD is now at 0dd48dc sub-first
[main-sub 3424d3a] add sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
Switched to a new branch 'topic-sub'
Previous HEAD position was 0dd48dc sub-first
HEAD is now at 5aa4e7e sub-second
[topic-sub f8a571b] change sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'modified-sub'
A	.gitmodules
M	sub
Previous HEAD position was 5aa4e7e sub-second
HEAD is now at 57c2aa9 sub-third
[modified-sub 3bd1f61] change sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 41 - submodule changes are shown irrespective of diff.submodule

# passed all 41 test(s)
1..41
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3210-pack-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3210-pack-refs/.git/
expecting success of 3210.1 'enable reflogs': 
	git config core.logallrefupdates true

ok 1 - enable reflogs

expecting success of 3210.2 'prepare a trivial repository': echo Hello > A &&
     git update-index --add A &&
     git commit -m "Initial commit." &&
     HEAD=$(git rev-parse --verify HEAD)
[main (root-commit) 2daebe9] Initial commit.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
ok 2 - prepare a trivial repository

expecting success of 3210.3 'see if git show-ref works as expected': git branch a &&
     SHA1=$(cat .git/refs/heads/a) &&
     echo "$SHA1 refs/heads/a" >expect &&
     git show-ref a >result &&
     test_cmp expect result
ok 3 - see if git show-ref works as expected

expecting success of 3210.4 'see if a branch still exists when packed': git branch b &&
     git pack-refs --all &&
     rm -f .git/refs/heads/b &&
     echo "$SHA1 refs/heads/b" >expect &&
     git show-ref b >result &&
     test_cmp expect result
ok 4 - see if a branch still exists when packed

expecting success of 3210.5 'git branch c/d should barf if branch c exists': 
     git branch c &&
     git pack-refs --all &&
     rm -f .git/refs/heads/c &&
     test_must_fail git branch c/d

fatal: cannot lock ref 'refs/heads/c/d': 'refs/heads/c' exists; cannot create 'refs/heads/c/d'
ok 5 - git branch c/d should barf if branch c exists

expecting success of 3210.6 'see if a branch still exists after git pack-refs --prune': git branch e &&
     git pack-refs --all --prune &&
     echo "$SHA1 refs/heads/e" >expect &&
     git show-ref e >result &&
     test_cmp expect result
ok 6 - see if a branch still exists after git pack-refs --prune

expecting success of 3210.7 'see if git pack-refs --prune remove ref files': 
     git branch f &&
     git pack-refs --all --prune &&
     ! test -f .git/refs/heads/f

ok 7 - see if git pack-refs --prune remove ref files

expecting success of 3210.8 'see if git pack-refs --prune removes empty dirs': 
     git branch r/s/t &&
     git pack-refs --all --prune &&
     ! test -e .git/refs/heads/r

ok 8 - see if git pack-refs --prune removes empty dirs

expecting success of 3210.9 'git branch g should work when git branch g/h has been deleted': git branch g/h &&
     git pack-refs --all --prune &&
     git branch -d g/h &&
     git branch g &&
     git pack-refs --all &&
     git branch -d g
Deleted branch g/h (was 2daebe9).
Deleted branch g (was 2daebe9).
ok 9 - git branch g should work when git branch g/h has been deleted

expecting success of 3210.10 'git branch i/j/k should barf if branch i exists': 
     git branch i &&
     git pack-refs --all --prune &&
     test_must_fail git branch i/j/k

fatal: cannot lock ref 'refs/heads/i/j/k': 'refs/heads/i' exists; cannot create 'refs/heads/i/j/k'
ok 10 - git branch i/j/k should barf if branch i exists

expecting success of 3210.11 'test git branch k after branch k/l/m and k/lm have been deleted': git branch k/l &&
     git branch k/lm &&
     git branch -d k/l &&
     git branch k/l/m &&
     git branch -d k/l/m &&
     git branch -d k/lm &&
     git branch k
Deleted branch k/l (was 2daebe9).
Deleted branch k/l/m (was 2daebe9).
Deleted branch k/lm (was 2daebe9).
ok 11 - test git branch k after branch k/l/m and k/lm have been deleted

expecting success of 3210.12 'test git branch n after some branch deletion and pruning': git branch n/o &&
     git branch n/op &&
     git branch -d n/o &&
     git branch n/o/p &&
     git branch -d n/op &&
     git pack-refs --all --prune &&
     git branch -d n/o/p &&
     git branch n
Deleted branch n/o (was 2daebe9).
Deleted branch n/op (was 2daebe9).
Deleted branch n/o/p (was 2daebe9).
ok 12 - test git branch n after some branch deletion and pruning

expecting success of 3210.13 'see if up-to-date packed refs are preserved': git branch q &&
	 git pack-refs --all --prune &&
	 git update-ref refs/heads/q refs/heads/q &&
	 ! test -f .git/refs/heads/q
ok 13 - see if up-to-date packed refs are preserved

expecting success of 3210.14 'pack, prune and repack': 
	git tag foo &&
	git pack-refs --all --prune &&
	git show-ref >all-of-them &&
	git pack-refs &&
	git show-ref >again &&
	test_cmp all-of-them again

ok 14 - pack, prune and repack

expecting success of 3210.15 'explicit pack-refs with dangling packed reference': 
	git commit --allow-empty -m "soon to be garbage-collected" &&
	git pack-refs --all &&
	git reset --hard HEAD^ &&
	git reflog expire --expire=all --all &&
	git prune --expire=all &&
	git pack-refs --all 2>result &&
	test_must_be_empty result

[main 6d2fc87] soon to be garbage-collected
 Author: A U Thor <author@example.com>
HEAD is now at 2daebe9 Initial commit.
ok 15 - explicit pack-refs with dangling packed reference

expecting success of 3210.16 'delete ref with dangling packed version': 
	git checkout -b lamb &&
	git commit --allow-empty -m "future garbage" &&
	git pack-refs --all &&
	git reset --hard HEAD^ &&
	git checkout main &&
	git reflog expire --expire=all --all &&
	git prune --expire=all &&
	git branch -d lamb 2>result &&
	test_must_be_empty result

Switched to a new branch 'lamb'
[lamb ce057e0] future garbage
 Author: A U Thor <author@example.com>
HEAD is now at 2daebe9 Initial commit.
Switched to branch 'main'
Deleted branch lamb (was 2daebe9).
ok 16 - delete ref with dangling packed version

expecting success of 3210.17 'delete ref while another dangling packed ref': 
	git branch lamb &&
	git commit --allow-empty -m "future garbage" &&
	git pack-refs --all &&
	git reset --hard HEAD^ &&
	git reflog expire --expire=all --all &&
	git prune --expire=all &&
	git branch -d lamb 2>result &&
	test_must_be_empty result

[main ce057e0] future garbage
 Author: A U Thor <author@example.com>
HEAD is now at 2daebe9 Initial commit.
Deleted branch lamb (was 2daebe9).
ok 17 - delete ref while another dangling packed ref

expecting success of 3210.18 'pack ref directly below refs/': 
	git update-ref refs/top HEAD &&
	git pack-refs --all --prune &&
	grep refs/top .git/packed-refs &&
	test_path_is_missing .git/refs/top

2daebe96d7fd03d28875d852f87c06a18f4a6639 refs/top
ok 18 - pack ref directly below refs/

expecting success of 3210.19 'do not pack ref in refs/bisect': 
	git update-ref refs/bisect/local HEAD &&
	git pack-refs --all --prune &&
	! grep refs/bisect/local .git/packed-refs >/dev/null &&
	test_path_is_file .git/refs/bisect/local

ok 19 - do not pack ref in refs/bisect

expecting success of 3210.20 'disable reflogs': 
	git config core.logallrefupdates false &&
	rm -rf .git/logs

ok 20 - disable reflogs

expecting success of 3210.21 'create packed foo/bar/baz branch': 
	git branch foo/bar/baz &&
	git pack-refs --all --prune &&
	test_path_is_missing .git/refs/heads/foo/bar/baz &&
	test_must_fail git reflog exists refs/heads/foo/bar/baz

ok 21 - create packed foo/bar/baz branch

expecting success of 3210.22 'notice d/f conflict with existing directory': 
	test_must_fail git branch foo &&
	test_must_fail git branch foo/bar

fatal: cannot lock ref 'refs/heads/foo': 'refs/heads/foo/bar/baz' exists; cannot create 'refs/heads/foo'
fatal: cannot lock ref 'refs/heads/foo/bar': 'refs/heads/foo/bar/baz' exists; cannot create 'refs/heads/foo/bar'
ok 22 - notice d/f conflict with existing directory

expecting success of 3210.23 'existing directory reports concrete ref': 
	test_must_fail git branch foo 2>stderr &&
	test_i18ngrep refs/heads/foo/bar/baz stderr

fatal: cannot lock ref 'refs/heads/foo': 'refs/heads/foo/bar/baz' exists; cannot create 'refs/heads/foo'
ok 23 - existing directory reports concrete ref

expecting success of 3210.24 'notice d/f conflict with existing ref': 
	test_must_fail git branch foo/bar/baz/extra &&
	test_must_fail git branch foo/bar/baz/lots/of/extra/components

fatal: cannot lock ref 'refs/heads/foo/bar/baz/extra': 'refs/heads/foo/bar/baz' exists; cannot create 'refs/heads/foo/bar/baz/extra'
fatal: cannot lock ref 'refs/heads/foo/bar/baz/lots/of/extra/components': 'refs/heads/foo/bar/baz' exists; cannot create 'refs/heads/foo/bar/baz/lots/of/extra/components'
ok 24 - notice d/f conflict with existing ref

expecting success of 3210.25 'reject packed-refs with unterminated line': 
	cp .git/packed-refs .git/packed-refs.bak &&
	test_when_finished "mv .git/packed-refs.bak .git/packed-refs" &&
	printf "%s" "$HEAD refs/zzzzz" >>.git/packed-refs &&
	echo "fatal: unterminated line in .git/packed-refs: $HEAD refs/zzzzz" >expected_err &&
	test_must_fail git for-each-ref >out 2>err &&
	test_cmp expected_err err

ok 25 - reject packed-refs with unterminated line

expecting success of 3210.26 'reject packed-refs containing junk': 
	cp .git/packed-refs .git/packed-refs.bak &&
	test_when_finished "mv .git/packed-refs.bak .git/packed-refs" &&
	printf "%s\n" "bogus content" >>.git/packed-refs &&
	echo "fatal: unexpected line in .git/packed-refs: bogus content" >expected_err &&
	test_must_fail git for-each-ref >out 2>err &&
	test_cmp expected_err err

ok 26 - reject packed-refs containing junk

expecting success of 3210.27 'reject packed-refs with a short SHA-1': 
	cp .git/packed-refs .git/packed-refs.bak &&
	test_when_finished "mv .git/packed-refs.bak .git/packed-refs" &&
	printf "%.7s %s\n" $HEAD refs/zzzzz >>.git/packed-refs &&
	printf "fatal: unexpected line in .git/packed-refs: %.7s %s\n" $HEAD refs/zzzzz >expected_err &&
	test_must_fail git for-each-ref >out 2>err &&
	test_cmp expected_err err

ok 27 - reject packed-refs with a short SHA-1

expecting success of 3210.28 'timeout if packed-refs.lock exists': 
	LOCK=.git/packed-refs.lock &&
	>"$LOCK" &&
	test_when_finished "rm -f $LOCK" &&
	test_must_fail git pack-refs --all --prune

fatal: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t3210-pack-refs/.git/packed-refs.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
ok 28 - timeout if packed-refs.lock exists

expecting success of 3210.29 'retry acquiring packed-refs.lock': 
	LOCK=.git/packed-refs.lock &&
	>"$LOCK" &&
	test_when_finished "wait && rm -f $LOCK" &&
	{
		( sleep 1 && rm -f $LOCK ) &
	} &&
	git -c core.packedrefstimeout=3000 pack-refs --all --prune

ok 29 - retry acquiring packed-refs.lock

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 3210.30 'pack symlinked packed-refs': 
	# First make sure that symlinking works when reading:
	git update-ref refs/heads/lossy refs/heads/main &&
	git for-each-ref >all-refs-before &&
	mv .git/packed-refs .git/my-deviant-packed-refs &&
	ln -s my-deviant-packed-refs .git/packed-refs &&
	git for-each-ref >all-refs-linked &&
	test_cmp all-refs-before all-refs-linked &&
	git pack-refs --all --prune &&
	git for-each-ref >all-refs-packed &&
	test_cmp all-refs-before all-refs-packed &&
	test -h .git/packed-refs &&
	test "$(test_readlink .git/packed-refs)" = "my-deviant-packed-refs"

ok 30 - pack symlinked packed-refs

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3200-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/.git/
expecting success of 3200.1 'prepare a trivial repository': 
	echo Hello >A &&
	git update-index --add A &&
	git commit -m "Initial commit." &&
	git branch -M main &&
	echo World >>A &&
	git update-index --add A &&
	git commit -m "Second commit." &&
	HEAD=$(git rev-parse --verify HEAD)

[main (root-commit) 2daebe9] Initial commit.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
[main da664a6] Second commit.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - prepare a trivial repository

expecting success of 3200.2 'git branch --help should not have created a bogus branch': 
	test_might_fail git branch --man --help </dev/null >/dev/null 2>&1 &&
	test_path_is_missing .git/refs/heads/--help

ok 2 - git branch --help should not have created a bogus branch

expecting success of 3200.3 'branch -h in broken repository': 
	mkdir broken &&
	(
		cd broken &&
		git init -b main &&
		>.git/refs/heads/main &&
		test_expect_code 129 git branch -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/broken/.git/
usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
ok 3 - branch -h in broken repository

expecting success of 3200.4 'git branch abc should create a branch': 
	git branch abc && test_path_is_file .git/refs/heads/abc

ok 4 - git branch abc should create a branch

expecting success of 3200.5 'git branch abc should fail when abc exists': 
	test_must_fail git branch abc

fatal: a branch named 'abc' already exists
ok 5 - git branch abc should fail when abc exists

expecting success of 3200.6 'git branch --force abc should fail when abc is checked out': 
	test_when_finished git switch main &&
	git switch abc &&
	test_must_fail git branch --force abc HEAD~1

Switched to branch 'abc'
fatal: cannot force update the branch 'abc' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch'
Switched to branch 'main'
ok 6 - git branch --force abc should fail when abc is checked out

expecting success of 3200.7 'git branch --force abc should succeed when abc exists': 
	git rev-parse HEAD~1 >expect &&
	git branch --force abc HEAD~1 &&
	git rev-parse abc >actual &&
	test_cmp expect actual

ok 7 - git branch --force abc should succeed when abc exists

expecting success of 3200.8 'git branch a/b/c should create a branch': 
	git branch a/b/c && test_path_is_file .git/refs/heads/a/b/c

ok 8 - git branch a/b/c should create a branch

expecting success of 3200.9 'git branch mb main... should create a branch': 
	git branch mb main... && test_path_is_file .git/refs/heads/mb

ok 9 - git branch mb main... should create a branch

expecting success of 3200.10 'git branch HEAD should fail': 
	test_must_fail git branch HEAD

fatal: 'HEAD' is not a valid branch name
ok 10 - git branch HEAD should fail

expecting success of 3200.11 'git branch --create-reflog d/e/f should create a branch and a log': 
	GIT_COMMITTER_DATE="2005-05-26 23:30" \
	git -c core.logallrefupdates=false branch --create-reflog d/e/f &&
	test_path_is_file .git/refs/heads/d/e/f &&
	test_path_is_file .git/logs/refs/heads/d/e/f &&
	test_cmp expect .git/logs/refs/heads/d/e/f

ok 11 - git branch --create-reflog d/e/f should create a branch and a log

expecting success of 3200.12 'git branch -d d/e/f should delete a branch and a log': 
	git branch -d d/e/f &&
	test_path_is_missing .git/refs/heads/d/e/f &&
	test_must_fail git reflog exists refs/heads/d/e/f

Deleted branch d/e/f (was da664a6).
ok 12 - git branch -d d/e/f should delete a branch and a log

expecting success of 3200.13 'git branch j/k should work after branch j has been deleted': 
	git branch j &&
	git branch -d j &&
	git branch j/k

Deleted branch j (was da664a6).
ok 13 - git branch j/k should work after branch j has been deleted

expecting success of 3200.14 'git branch l should work after branch l/m has been deleted': 
	git branch l/m &&
	git branch -d l/m &&
	git branch l

Deleted branch l/m (was da664a6).
ok 14 - git branch l should work after branch l/m has been deleted

expecting success of 3200.15 'git branch -m dumps usage': 
	test_expect_code 128 git branch -m 2>err &&
	test_i18ngrep "branch name required" err

fatal: branch name required
ok 15 - git branch -m dumps usage

expecting success of 3200.16 'git branch -m m broken_symref should work': 
	test_when_finished "git branch -D broken_symref" &&
	git branch --create-reflog m &&
	git symbolic-ref refs/heads/broken_symref refs/heads/i_am_broken &&
	git branch -m m broken_symref &&
	git reflog exists refs/heads/broken_symref &&
	test_must_fail git reflog exists refs/heads/i_am_broken

Deleted branch broken_symref (was da664a6).
ok 16 - git branch -m m broken_symref should work

expecting success of 3200.17 'git branch -m m m/m should work': 
	git branch --create-reflog m &&
	git branch -m m m/m &&
	git reflog exists refs/heads/m/m

ok 17 - git branch -m m m/m should work

expecting success of 3200.18 'git branch -m n/n n should work': 
	git branch --create-reflog n/n &&
	git branch -m n/n n &&
	git reflog exists refs/heads/n

ok 18 - git branch -m n/n n should work

expecting success of 3200.19 'git branch -m bbb should rename checked out branch': 
	test_when_finished git branch -D bbb &&
	test_when_finished git checkout main &&
	git checkout -b aaa &&
	git commit --allow-empty -m "a new commit" &&
	git rev-parse aaa@{0} >expect &&
	git branch -m bbb &&
	git rev-parse bbb@{1} >actual &&
	test_cmp expect actual &&
	git symbolic-ref HEAD >actual &&
	echo refs/heads/bbb >expect &&
	test_cmp expect actual

Switched to a new branch 'aaa'
[aaa a533b01] a new commit
 Author: A U Thor <author@example.com>
Switched to branch 'main'
Deleted branch bbb (was a533b01).
ok 19 - git branch -m bbb should rename checked out branch

expecting success of 3200.20 'renaming checked out branch works with d/f conflict': 
	test_when_finished "git branch -D foo/bar || git branch -D foo" &&
	test_when_finished git checkout main &&
	git checkout -b foo &&
	git branch -m foo/bar &&
	git symbolic-ref HEAD >actual &&
	echo refs/heads/foo/bar >expect &&
	test_cmp expect actual

Switched to a new branch 'foo'
Switched to branch 'main'
Deleted branch foo/bar (was da664a6).
ok 20 - renaming checked out branch works with d/f conflict

expecting success of 3200.21 'git branch -m o/o o should fail when o/p exists': 
	git branch o/o &&
	git branch o/p &&
	test_must_fail git branch -m o/o o

error: 'refs/heads/o/p' exists; cannot create 'refs/heads/o'
fatal: Branch rename failed
ok 21 - git branch -m o/o o should fail when o/p exists

expecting success of 3200.22 'git branch -m o/q o/p should fail when o/p exists': 
	git branch o/q &&
	test_must_fail git branch -m o/q o/p

fatal: a branch named 'o/p' already exists
ok 22 - git branch -m o/q o/p should fail when o/p exists

expecting success of 3200.23 'git branch -M o/q o/p should work when o/p exists': 
	git branch -M o/q o/p

ok 23 - git branch -M o/q o/p should work when o/p exists

expecting success of 3200.24 'git branch -m -f o/q o/p should work when o/p exists': 
	git branch o/q &&
	git branch -m -f o/q o/p

ok 24 - git branch -m -f o/q o/p should work when o/p exists

expecting success of 3200.25 'git branch -m q r/q should fail when r exists': 
	git branch q &&
	git branch r &&
	test_must_fail git branch -m q r/q

error: 'refs/heads/r' exists; cannot create 'refs/heads/r/q'
fatal: Branch rename failed
ok 25 - git branch -m q r/q should fail when r exists

expecting success of 3200.26 'git branch -M foo bar should fail when bar is checked out': 
	git branch bar &&
	git checkout -b foo &&
	test_must_fail git branch -M bar foo

Switched to a new branch 'foo'
fatal: cannot force update the branch 'foo' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch'
ok 26 - git branch -M foo bar should fail when bar is checked out

expecting success of 3200.27 'git branch -M foo bar should fail when bar is checked out in worktree': 
	git branch -f bar &&
	test_when_finished "git worktree remove wt && git branch -D wt" &&
	git worktree add wt &&
	test_must_fail git branch -M bar wt

Preparing worktree (new branch 'wt')
HEAD is now at da664a6 Second commit.
fatal: cannot force update the branch 'wt' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/wt'
Deleted branch wt (was da664a6).
ok 27 - git branch -M foo bar should fail when bar is checked out in worktree

expecting success of 3200.28 'git branch -M baz bam should succeed when baz is checked out': 
	git checkout -b baz &&
	git branch bam &&
	git branch -M baz bam &&
	test $(git rev-parse --abbrev-ref HEAD) = bam

Switched to a new branch 'baz'
ok 28 - git branch -M baz bam should succeed when baz is checked out

expecting success of 3200.29 'git branch -M baz bam should add entries to .git/logs/HEAD': 
	msg="Branch: renamed refs/heads/baz to refs/heads/bam" &&
	grep " $ZERO_OID.*$msg$" .git/logs/HEAD &&
	grep "^$ZERO_OID.*$msg$" .git/logs/HEAD

da664a6b0bffeb0904609e9e14e1beeecfe55c4a 0000000000000000000000000000000000000000 C O Mitter <committer@example.com> 1112354055 +0200	Branch: renamed refs/heads/baz to refs/heads/bam
0000000000000000000000000000000000000000 da664a6b0bffeb0904609e9e14e1beeecfe55c4a C O Mitter <committer@example.com> 1112354055 +0200	Branch: renamed refs/heads/baz to refs/heads/bam
ok 29 - git branch -M baz bam should add entries to .git/logs/HEAD

expecting success of 3200.30 'git branch -M should leave orphaned HEAD alone': 
	git init -b main orphan &&
	(
		cd orphan &&
		test_commit initial &&
		git checkout --orphan lonely &&
		grep lonely .git/HEAD &&
		test_path_is_missing .git/refs/head/lonely &&
		git branch -M main mistress &&
		grep lonely .git/HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/orphan/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'lonely'
ref: refs/heads/lonely
ref: refs/heads/lonely
ok 30 - git branch -M should leave orphaned HEAD alone

expecting success of 3200.31 'resulting reflog can be shown by log -g': 
	oid=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
	HEAD@{0} $oid $msg
	HEAD@{2} $oid checkout: moving from foo to baz
	EOF
	git log -g --format="%gd %H %gs" -2 HEAD >actual &&
	test_cmp expect actual

ok 31 - resulting reflog can be shown by log -g

expecting success of 3200.32 'git branch -M baz bam should succeed when baz is checked out as linked working tree': 
	git checkout main &&
	git worktree add -b baz bazdir &&
	git worktree add -f bazdir2 baz &&
	git branch -M baz bam &&
	test $(git -C bazdir rev-parse --abbrev-ref HEAD) = bam &&
	test $(git -C bazdir2 rev-parse --abbrev-ref HEAD) = bam &&
	rm -r bazdir bazdir2 &&
	git worktree prune

Switched to branch 'main'
Preparing worktree (new branch 'baz')
HEAD is now at da664a6 Second commit.
Preparing worktree (checking out 'baz')
HEAD is now at da664a6 Second commit.
ok 32 - git branch -M baz bam should succeed when baz is checked out as linked working tree

expecting success of 3200.33 'git branch -M baz bam should succeed within a worktree in which baz is checked out': 
	git checkout -b baz &&
	git worktree add -f bazdir baz &&
	(
		cd bazdir &&
		git branch -M baz bam &&
		test $(git rev-parse --abbrev-ref HEAD) = bam
	) &&
	test $(git rev-parse --abbrev-ref HEAD) = bam &&
	rm -r bazdir &&
	git worktree prune

Switched to a new branch 'baz'
Preparing worktree (checking out 'baz')
HEAD is now at da664a6 Second commit.
ok 33 - git branch -M baz bam should succeed within a worktree in which baz is checked out

expecting success of 3200.34 'git branch -M main should work when main is checked out': 
	git checkout main &&
	git branch -M main

Switched to branch 'main'
ok 34 - git branch -M main should work when main is checked out

expecting success of 3200.35 'git branch -M main main should work when main is checked out': 
	git checkout main &&
	git branch -M main main

Already on 'main'
ok 35 - git branch -M main main should work when main is checked out

expecting success of 3200.36 'git branch -M topic topic should work when main is checked out': 
	git checkout main &&
	git branch topic &&
	git branch -M topic topic

Already on 'main'
ok 36 - git branch -M topic topic should work when main is checked out

expecting success of 3200.37 'git branch -M and -C fail on detached HEAD': 
	git checkout HEAD^{} &&
	test_when_finished git checkout - &&
	echo "fatal: cannot rename the current branch while not on any." >expect &&
	test_must_fail git branch -M must-fail 2>err &&
	test_cmp expect err &&
	echo "fatal: cannot copy the current branch while not on any." >expect &&
	test_must_fail git branch -C must-fail 2>err &&
	test_cmp expect err

Note: switching to 'HEAD^{}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at da664a6 Second commit.
Switched to branch 'main'
ok 37 - git branch -M and -C fail on detached HEAD

expecting success of 3200.38 'git branch -d on orphan HEAD (merged)': 
	test_when_finished git checkout main &&
	git checkout --orphan orphan &&
	test_when_finished "rm -rf .git/objects/commit-graph*" &&
	git commit-graph write --reachable &&
	git branch --track to-delete main &&
	git branch -d to-delete

Switched to a new branch 'orphan'
branch 'to-delete' set up to track 'main'.
warning: deleting branch 'to-delete' that has been merged to
         'refs/heads/main', but not yet merged to HEAD.
Deleted branch to-delete (was da664a6).
Switched to branch 'main'
ok 38 - git branch -d on orphan HEAD (merged)

expecting success of 3200.39 'git branch -d on orphan HEAD (merged, graph)': 
	test_when_finished git checkout main &&
	git checkout --orphan orphan &&
	git branch --track to-delete main &&
	git branch -d to-delete

Switched to a new branch 'orphan'
branch 'to-delete' set up to track 'main'.
warning: deleting branch 'to-delete' that has been merged to
         'refs/heads/main', but not yet merged to HEAD.
Deleted branch to-delete (was da664a6).
Switched to branch 'main'
ok 39 - git branch -d on orphan HEAD (merged, graph)

expecting success of 3200.40 'git branch -d on orphan HEAD (unmerged)': 
	test_when_finished git checkout main &&
	git checkout --orphan orphan &&
	test_when_finished "git branch -D to-delete" &&
	git branch to-delete main &&
	test_must_fail git branch -d to-delete 2>err &&
	grep "not fully merged" err

Switched to a new branch 'orphan'
error: The branch 'to-delete' is not fully merged.
Deleted branch to-delete (was da664a6).
Switched to branch 'main'
ok 40 - git branch -d on orphan HEAD (unmerged)

expecting success of 3200.41 'git branch -d on orphan HEAD (unmerged, graph)': 
	test_when_finished git checkout main &&
	git checkout --orphan orphan &&
	test_when_finished "git branch -D to-delete" &&
	git branch to-delete main &&
	test_when_finished "rm -rf .git/objects/commit-graph*" &&
	git commit-graph write --reachable &&
	test_must_fail git branch -d to-delete 2>err &&
	grep "not fully merged" err

Switched to a new branch 'orphan'
error: The branch 'to-delete' is not fully merged.
Deleted branch to-delete (was da664a6).
Switched to branch 'main'
ok 41 - git branch -d on orphan HEAD (unmerged, graph)

expecting success of 3200.42 'git branch -v -d t should work': 
	git branch t &&
	git rev-parse --verify refs/heads/t &&
	git branch -v -d t &&
	test_must_fail git rev-parse --verify refs/heads/t

da664a6b0bffeb0904609e9e14e1beeecfe55c4a
Deleted branch t (was da664a6).
fatal: Needed a single revision
ok 42 - git branch -v -d t should work

expecting success of 3200.43 'git branch -v -m t s should work': 
	git branch t &&
	git rev-parse --verify refs/heads/t &&
	git branch -v -m t s &&
	test_must_fail git rev-parse --verify refs/heads/t &&
	git rev-parse --verify refs/heads/s &&
	git branch -d s

da664a6b0bffeb0904609e9e14e1beeecfe55c4a
fatal: Needed a single revision
da664a6b0bffeb0904609e9e14e1beeecfe55c4a
Deleted branch s (was da664a6).
ok 43 - git branch -v -m t s should work

expecting success of 3200.44 'git branch -m -d t s should fail': 
	git branch t &&
	git rev-parse refs/heads/t &&
	test_must_fail git branch -m -d t s &&
	git branch -d t &&
	test_must_fail git rev-parse refs/heads/t

da664a6b0bffeb0904609e9e14e1beeecfe55c4a
usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

Deleted branch t (was da664a6).
fatal: ambiguous argument 'refs/heads/t': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/t
ok 44 - git branch -m -d t s should fail

expecting success of 3200.45 'git branch --list -d t should fail': 
	git branch t &&
	git rev-parse refs/heads/t &&
	test_must_fail git branch --list -d t &&
	git branch -d t &&
	test_must_fail git rev-parse refs/heads/t

da664a6b0bffeb0904609e9e14e1beeecfe55c4a
usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --verbose         show hash and subject, give twice for upstream branch
    -q, --quiet           suppress informational messages
    -t, --track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --set-upstream-to <upstream>
                          change the upstream info
    --unset-upstream      unset the upstream info
    --color[=<when>]      use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --abbrev[=<n>]        use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --delete          delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --move            move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    -c, --copy            copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --list            list branch names
    --show-current        show current branch name
    --create-reflog       create the branch's reflog
    --edit-description    edit the description for the branch
    -f, --force           force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --column[=<style>]    list branches in columns
    --sort <key>          field name to sort on
    --points-at <object>  print only branches of the object
    -i, --ignore-case     sorting and filtering are case insensitive
    --recurse-submodules  recurse through submodules
    --format <format>     format to use for the output

Deleted branch t (was da664a6).
fatal: ambiguous argument 'refs/heads/t': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/t
ok 45 - git branch --list -d t should fail

expecting success of 3200.46 'deleting checked-out branch from repo that is a submodule': 
	test_when_finished "rm -rf repo1 repo2" &&

	git init repo1 &&
	git init repo1/sub &&
	test_commit -C repo1/sub x &&
	test_config_global protocol.file.allow always &&
	git -C repo1 submodule add ./sub &&
	git -C repo1 commit -m "adding sub" &&

	git clone --recurse-submodules repo1 repo2 &&
	git -C repo2/sub checkout -b work &&
	test_must_fail git -C repo2/sub branch -D work

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/repo1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/repo1/sub/.git/
[main (root-commit) cb85766] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
Adding existing repo at 'sub' to the index
[main (root-commit) 0e407d8] adding sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'repo2'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/repo1/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/repo2/sub'...
done.
Submodule path 'sub': checked out 'cb85766717df318a47d35b1ec7b43b1040fdc133'
Switched to a new branch 'work'
error: Cannot delete branch 'work' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/repo2/.git/modules/sub'
ok 46 - deleting checked-out branch from repo that is a submodule

expecting success of 3200.47 'bare main worktree has HEAD at branch deleted by secondary worktree': 
	test_when_finished "rm -rf nonbare base secondary" &&

	git init -b main nonbare &&
	test_commit -C nonbare x &&
	git clone --bare nonbare bare &&
	git -C bare worktree add --detach ../secondary main &&
	git -C secondary branch -D main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/nonbare/.git/
[main (root-commit) 6f481db] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
Cloning into bare repository 'bare'...
done.
Preparing worktree (detached HEAD 6f481db)
HEAD is now at 6f481db x
Deleted branch main (was 6f481db).
ok 47 - bare main worktree has HEAD at branch deleted by secondary worktree

expecting success of 3200.48 'git branch --list -v with --abbrev': 
	test_when_finished "git branch -D t" &&
	git branch t &&
	git branch -v --list t >actual.default &&
	git branch -v --list --abbrev t >actual.abbrev &&
	test_cmp actual.default actual.abbrev &&

	git branch -v --list --no-abbrev t >actual.noabbrev &&
	git branch -v --list --abbrev=0 t >actual.0abbrev &&
	git -c core.abbrev=no branch -v --list t >actual.noabbrev-conf &&
	test_cmp actual.noabbrev actual.0abbrev &&
	test_cmp actual.noabbrev actual.noabbrev-conf &&

	git branch -v --list --abbrev=36 t >actual.36abbrev &&
	# how many hexdigits are used?
	read name objdefault rest <actual.abbrev &&
	read name obj36 rest <actual.36abbrev &&
	objfull=$(git rev-parse --verify t) &&

	# are we really getting abbreviations?
	test "$obj36" != "$objdefault" &&
	expr "$obj36" : "$objdefault" >/dev/null &&
	test "$objfull" != "$obj36" &&
	expr "$objfull" : "$obj36" >/dev/null


Deleted branch t (was da664a6).
ok 48 - git branch --list -v with --abbrev

expecting success of 3200.49 'git branch --column': 
	COLUMNS=81 git branch --column=column >actual &&
	cat >expect <<\EOF &&
  a/b/c   bam     foo     l     * main    n       o/p     r
  abc     bar     j/k     m/m     mb      o/o     q       topic
EOF
	test_cmp expect actual

ok 49 - git branch --column

expecting success of 3200.50 'git branch --column with an extremely long branch name': 
	long=this/is/a/part/of/long/branch/name &&
	long=z$long/$long/$long/$long &&
	test_when_finished "git branch -d $long" &&
	git branch $long &&
	COLUMNS=80 git branch --column=column >actual &&
	cat >expect <<EOF &&
  a/b/c
  abc
  bam
  bar
  foo
  j/k
  l
  m/m
* main
  mb
  n
  o/o
  o/p
  q
  r
  topic
  $long
EOF
	test_cmp expect actual

Deleted branch zthis/is/a/part/of/long/branch/name/this/is/a/part/of/long/branch/name/this/is/a/part/of/long/branch/name/this/is/a/part/of/long/branch/name (was da664a6).
ok 50 - git branch --column with an extremely long branch name

expecting success of 3200.51 'git branch with column.*': 
	git config column.ui column &&
	git config column.branch "dense" &&
	COLUMNS=80 git branch >actual &&
	git config --unset column.branch &&
	git config --unset column.ui &&
	cat >expect <<\EOF &&
  a/b/c   bam   foo   l   * main   n     o/p   r
  abc     bar   j/k   m/m   mb     o/o   q     topic
EOF
	test_cmp expect actual

ok 51 - git branch with column.*

expecting success of 3200.52 'git branch --column -v should fail': 
	test_must_fail git branch --column -v

fatal: options '--column' and '--verbose' cannot be used together
ok 52 - git branch --column -v should fail

expecting success of 3200.53 'git branch -v with column.ui ignored': 
	git config column.ui column &&
	COLUMNS=80 git branch -v | cut -c -8 | sed "s/ *$//" >actual &&
	git config --unset column.ui &&
	cat >expect <<\EOF &&
  a/b/c
  abc
  bam
  bar
  foo
  j/k
  l
  m/m
* main
  mb
  n
  o/o
  o/p
  q
  r
  topic
EOF
	test_cmp expect actual

ok 53 - git branch -v with column.ui ignored

checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
expecting success of 3200.54 'git branch -m q q2 without config should succeed': 
	git branch -m q q2 &&
	git branch -m q2 q

ok 54 - git branch -m q q2 without config should succeed

expecting success of 3200.55 'git branch -m s/s s should work when s/t is deleted': 
	git branch --create-reflog s/s &&
	git reflog exists refs/heads/s/s &&
	git branch --create-reflog s/t &&
	git reflog exists refs/heads/s/t &&
	git branch -d s/t &&
	git branch -m s/s s &&
	git reflog exists refs/heads/s

Deleted branch s/t (was da664a6).
ok 55 - git branch -m s/s s should work when s/t is deleted

expecting success of 3200.56 'config information was renamed, too': 
	test $(git config branch.s.dummy) = Hello &&
	test_must_fail git config branch.s/s.dummy

ok 56 - config information was renamed, too

expecting success of 3200.57 'git branch -m correctly renames multiple config sections': 
	test_when_finished "git checkout main" &&
	git checkout -b source main &&

	# Assert that a config file with multiple config sections has
	# those sections preserved...
	cat >expect <<-\EOF &&
	branch.dest.key1=value1
	some.gar.b=age
	branch.dest.key2=value2
	EOF
	cat >config.branch <<\EOF &&
;; Note the lack of -\EOF above & mixed indenting here. This is
;; intentional, we are also testing that the formatting of copied
;; sections is preserved.

;; Comment for source. Tabs
[branch "source"]
	;; Comment for the source value
	key1 = value1
;; Comment for some.gar. Spaces
[some "gar"]
    ;; Comment for the some.gar value
    b = age
;; Comment for source, again. Mixed tabs/spaces.
[branch "source"]
    ;; Comment for the source value, again
	key2 = value2
EOF
	cat config.branch >>.git/config &&
	git branch -m source dest &&
	git config -f .git/config -l | grep -F -e source -e dest -e some.gar >actual &&
	test_cmp expect actual &&

	# ...and that the comments for those sections are also
	# preserved.
	cat config.branch | sed "s/\"source\"/\"dest\"/" >expect &&
	sed -n -e "/Note the lack/,\$p" .git/config >actual &&
	test_cmp expect actual

Switched to a new branch 'source'
Switched to branch 'main'
ok 57 - git branch -m correctly renames multiple config sections

expecting success of 3200.58 'git branch -c dumps usage': 
	test_expect_code 128 git branch -c 2>err &&
	test_i18ngrep "branch name required" err

fatal: branch name required
ok 58 - git branch -c dumps usage

expecting success of 3200.59 'git branch --copy dumps usage': 
	test_expect_code 128 git branch --copy 2>err &&
	test_i18ngrep "branch name required" err

fatal: branch name required
ok 59 - git branch --copy dumps usage

expecting success of 3200.60 'git branch -c d e should work': 
	git branch --create-reflog d &&
	git reflog exists refs/heads/d &&
	git config branch.d.dummy Hello &&
	git branch -c d e &&
	git reflog exists refs/heads/d &&
	git reflog exists refs/heads/e &&
	echo Hello >expect &&
	git config branch.e.dummy >actual &&
	test_cmp expect actual &&
	echo Hello >expect &&
	git config branch.d.dummy >actual &&
	test_cmp expect actual

ok 60 - git branch -c d e should work

expecting success of 3200.61 'git branch --copy is a synonym for -c': 
	git branch --create-reflog copy &&
	git reflog exists refs/heads/copy &&
	git config branch.copy.dummy Hello &&
	git branch --copy copy copy-to &&
	git reflog exists refs/heads/copy &&
	git reflog exists refs/heads/copy-to &&
	echo Hello >expect &&
	git config branch.copy.dummy >actual &&
	test_cmp expect actual &&
	echo Hello >expect &&
	git config branch.copy-to.dummy >actual &&
	test_cmp expect actual

ok 61 - git branch --copy is a synonym for -c

expecting success of 3200.62 'git branch -c ee ef should copy ee to create branch ef': 
	git checkout -b ee &&
	git reflog exists refs/heads/ee &&
	git config branch.ee.dummy Hello &&
	git branch -c ee ef &&
	git reflog exists refs/heads/ee &&
	git reflog exists refs/heads/ef &&
	test $(git config branch.ee.dummy) = Hello &&
	test $(git config branch.ef.dummy) = Hello &&
	test $(git rev-parse --abbrev-ref HEAD) = ee

Switched to a new branch 'ee'
ok 62 - git branch -c ee ef should copy ee to create branch ef

expecting success of 3200.63 'git branch -c f/f g/g should work': 
	git branch --create-reflog f/f &&
	git reflog exists refs/heads/f/f &&
	git config branch.f/f.dummy Hello &&
	git branch -c f/f g/g &&
	git reflog exists refs/heads/f/f &&
	git reflog exists refs/heads/g/g &&
	test $(git config branch.f/f.dummy) = Hello &&
	test $(git config branch.g/g.dummy) = Hello

ok 63 - git branch -c f/f g/g should work

expecting success of 3200.64 'git branch -c m2 m2 should work': 
	git branch --create-reflog m2 &&
	git reflog exists refs/heads/m2 &&
	git config branch.m2.dummy Hello &&
	git branch -c m2 m2 &&
	git reflog exists refs/heads/m2 &&
	test $(git config branch.m2.dummy) = Hello

ok 64 - git branch -c m2 m2 should work

expecting success of 3200.65 'git branch -c zz zz/zz should fail': 
	git branch --create-reflog zz &&
	git reflog exists refs/heads/zz &&
	test_must_fail git branch -c zz zz/zz

error: directory not empty: .git/logs/refs/heads/zz/zz
fatal: Branch copy failed
ok 65 - git branch -c zz zz/zz should fail

expecting success of 3200.66 'git branch -c b/b b should fail': 
	git branch --create-reflog b/b &&
	test_must_fail git branch -c b/b b

error: directory not empty: .git/logs/refs/heads/b
fatal: Branch copy failed
ok 66 - git branch -c b/b b should fail

expecting success of 3200.67 'git branch -C o/q o/p should work when o/p exists': 
	git branch --create-reflog o/q &&
	git reflog exists refs/heads/o/q &&
	git reflog exists refs/heads/o/p &&
	git branch -C o/q o/p

ok 67 - git branch -C o/q o/p should work when o/p exists

expecting success of 3200.68 'git branch -c -f o/q o/p should work when o/p exists': 
	git reflog exists refs/heads/o/q &&
	git reflog exists refs/heads/o/p &&
	git branch -c -f o/q o/p

ok 68 - git branch -c -f o/q o/p should work when o/p exists

expecting success of 3200.69 'git branch -c qq rr/qq should fail when rr exists': 
	git branch qq &&
	git branch rr &&
	test_must_fail git branch -c qq rr/qq

error: 'refs/heads/rr' exists; cannot create 'refs/heads/rr/qq'
fatal: Branch copy failed
ok 69 - git branch -c qq rr/qq should fail when rr exists

expecting success of 3200.70 'git branch -C b1 b2 should fail when b2 is checked out': 
	git branch b1 &&
	git checkout -b b2 &&
	test_must_fail git branch -C b1 b2

Switched to a new branch 'b2'
fatal: cannot force update the branch 'b2' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch'
ok 70 - git branch -C b1 b2 should fail when b2 is checked out

expecting success of 3200.71 'git branch -C c1 c2 should succeed when c1 is checked out': 
	git checkout -b c1 &&
	git branch c2 &&
	git branch -C c1 c2 &&
	test $(git rev-parse --abbrev-ref HEAD) = c1

Switched to a new branch 'c1'
ok 71 - git branch -C c1 c2 should succeed when c1 is checked out

expecting success of 3200.72 'git branch -C c1 c2 should never touch HEAD': 
	msg="Branch: copied refs/heads/c1 to refs/heads/c2" &&
	! grep "$msg$" .git/logs/HEAD

ok 72 - git branch -C c1 c2 should never touch HEAD

expecting success of 3200.73 'git branch -C main should work when main is checked out': 
	git checkout main &&
	git branch -C main

Switched to branch 'main'
ok 73 - git branch -C main should work when main is checked out

expecting success of 3200.74 'git branch -C main main should work when main is checked out': 
	git checkout main &&
	git branch -C main main

Already on 'main'
ok 74 - git branch -C main main should work when main is checked out

expecting success of 3200.75 'git branch -C main5 main5 should work when main is checked out': 
	git checkout main &&
	git branch main5 &&
	git branch -C main5 main5

Already on 'main'
ok 75 - git branch -C main5 main5 should work when main is checked out

expecting success of 3200.76 'git branch -C ab cd should overwrite existing config for cd': 
	git branch --create-reflog cd &&
	git reflog exists refs/heads/cd &&
	git config branch.cd.dummy CD &&
	git branch --create-reflog ab &&
	git reflog exists refs/heads/ab &&
	git config branch.ab.dummy AB &&
	git branch -C ab cd &&
	git reflog exists refs/heads/ab &&
	git reflog exists refs/heads/cd &&
	test $(git config branch.ab.dummy) = AB &&
	test $(git config branch.cd.dummy) = AB

ok 76 - git branch -C ab cd should overwrite existing config for cd

expecting success of 3200.77 'git branch -c correctly copies multiple config sections': 
	FOO=1 &&
	export FOO &&
	test_when_finished "git checkout main" &&
	git checkout -b source2 main &&

	# Assert that a config file with multiple config sections has
	# those sections preserved...
	cat >expect <<-\EOF &&
	branch.source2.key1=value1
	branch.dest2.key1=value1
	more.gar.b=age
	branch.source2.key2=value2
	branch.dest2.key2=value2
	EOF
	cat >config.branch <<\EOF &&
;; Note the lack of -\EOF above & mixed indenting here. This is
;; intentional, we are also testing that the formatting of copied
;; sections is preserved.

;; Comment for source2. Tabs
[branch "source2"]
	;; Comment for the source2 value
	key1 = value1
;; Comment for more.gar. Spaces
[more "gar"]
    ;; Comment for the more.gar value
    b = age
;; Comment for source2, again. Mixed tabs/spaces.
[branch "source2"]
    ;; Comment for the source2 value, again
	key2 = value2
EOF
	cat config.branch >>.git/config &&
	git branch -c source2 dest2 &&
	git config -f .git/config -l | grep -F -e source2 -e dest2 -e more.gar >actual &&
	test_cmp expect actual &&

	# ...and that the comments and formatting for those sections
	# is also preserved.
	cat >expect <<\EOF &&
;; Comment for source2. Tabs
[branch "source2"]
	;; Comment for the source2 value
	key1 = value1
;; Comment for more.gar. Spaces
[branch "dest2"]
	;; Comment for the source2 value
	key1 = value1
;; Comment for more.gar. Spaces
[more "gar"]
    ;; Comment for the more.gar value
    b = age
;; Comment for source2, again. Mixed tabs/spaces.
[branch "source2"]
    ;; Comment for the source2 value, again
	key2 = value2
[branch "dest2"]
    ;; Comment for the source2 value, again
	key2 = value2
EOF
	sed -n -e "/Comment for source2/,\$p" .git/config >actual &&
	test_cmp expect actual

Switched to a new branch 'source2'
Switched to branch 'main'
ok 77 - git branch -c correctly copies multiple config sections

expecting success of 3200.78 'deleting a symref': 
	git branch target &&
	git symbolic-ref refs/heads/symref refs/heads/target &&
	echo "Deleted branch symref (was refs/heads/target)." >expect &&
	git branch -d symref >actual &&
	test_path_is_file .git/refs/heads/target &&
	test_path_is_missing .git/refs/heads/symref &&
	test_cmp expect actual

ok 78 - deleting a symref

expecting success of 3200.79 'deleting a dangling symref': 
	git symbolic-ref refs/heads/dangling-symref nowhere &&
	test_path_is_file .git/refs/heads/dangling-symref &&
	echo "Deleted branch dangling-symref (was nowhere)." >expect &&
	git branch -d dangling-symref >actual &&
	test_path_is_missing .git/refs/heads/dangling-symref &&
	test_cmp expect actual

ok 79 - deleting a dangling symref

expecting success of 3200.80 'deleting a self-referential symref': 
	git symbolic-ref refs/heads/self-reference refs/heads/self-reference &&
	test_path_is_file .git/refs/heads/self-reference &&
	echo "Deleted branch self-reference (was refs/heads/self-reference)." >expect &&
	git branch -d self-reference >actual &&
	test_path_is_missing .git/refs/heads/self-reference &&
	test_cmp expect actual

ok 80 - deleting a self-referential symref

expecting success of 3200.81 'renaming a symref is not allowed': 
	git symbolic-ref refs/heads/topic refs/heads/main &&
	test_must_fail git branch -m topic new-topic &&
	git symbolic-ref refs/heads/topic &&
	test_path_is_file .git/refs/heads/main &&
	test_path_is_missing .git/refs/heads/new-topic

error: refname refs/heads/topic is a symbolic ref, renaming it is not supported
fatal: Branch rename failed
refs/heads/main
ok 81 - renaming a symref is not allowed

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 3200.82 'git branch -m u v should fail when the reflog for u is a symlink': 
	git branch --create-reflog u &&
	mv .git/logs/refs/heads/u real-u &&
	ln -s real-u .git/logs/refs/heads/u &&
	test_must_fail git branch -m u v

error: reflog for refs/heads/u is a symlink
fatal: Branch rename failed
ok 82 - git branch -m u v should fail when the reflog for u is a symlink

expecting success of 3200.83 'git branch -m with symlinked .git/refs': 
	test_when_finished "rm -rf subdir" &&
	git init --bare subdir &&

	rm -rfv subdir/refs subdir/objects subdir/packed-refs &&
	ln -s ../.git/refs subdir/refs &&
	ln -s ../.git/objects subdir/objects &&
	ln -s ../.git/packed-refs subdir/packed-refs &&

	git -C subdir rev-parse --absolute-git-dir >subdir.dir &&
	git rev-parse --absolute-git-dir >our.dir &&
	! test_cmp subdir.dir our.dir &&

	git -C subdir log &&
	git -C subdir branch rename-src &&
	git rev-parse rename-src >expect &&
	git -C subdir branch -m rename-src rename-dest &&
	git rev-parse rename-dest >actual &&
	test_cmp expect actual &&
	git branch -D rename-dest

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/subdir/
removed directory 'subdir/refs/heads'
removed directory 'subdir/refs/tags'
removed directory 'subdir/refs'
removed directory 'subdir/objects/pack'
removed directory 'subdir/objects/info'
removed directory 'subdir/objects'
--- subdir.dir	2022-12-28 07:37:35.192284803 +0000
+++ our.dir	2022-12-28 07:37:35.217285727 +0000
@@ -1 +1 @@
-/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/subdir
+/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/.git
commit da664a6b0bffeb0904609e9e14e1beeecfe55c4a
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    Second commit.

commit 2daebe96d7fd03d28875d852f87c06a18f4a6639
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    Initial commit.
Deleted branch rename-dest (was da664a6).
ok 83 - git branch -m with symlinked .git/refs

expecting success of 3200.84 'test tracking setup via --track': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track my1 local/main &&
	test $(git config branch.my1.remote) = local &&
	test $(git config branch.my1.merge) = refs/heads/main

From .
 * [new branch]      a/b/c      -> local/a/b/c
 * [new branch]      ab         -> local/ab
 * [new branch]      abc        -> local/abc
 * [new branch]      b/b        -> local/b/b
 * [new branch]      b1         -> local/b1
 * [new branch]      b2         -> local/b2
 * [new branch]      bam        -> local/bam
 * [new branch]      bar        -> local/bar
 * [new branch]      c1         -> local/c1
 * [new branch]      c2         -> local/c2
 * [new branch]      cd         -> local/cd
 * [new branch]      copy       -> local/copy
 * [new branch]      copy-to    -> local/copy-to
 * [new branch]      d          -> local/d
 * [new branch]      dest       -> local/dest
 * [new branch]      dest2      -> local/dest2
 * [new branch]      e          -> local/e
 * [new branch]      ee         -> local/ee
 * [new branch]      ef         -> local/ef
 * [new branch]      f/f        -> local/f/f
 * [new branch]      foo        -> local/foo
 * [new branch]      g/g        -> local/g/g
 * [new branch]      j/k        -> local/j/k
 * [new branch]      l          -> local/l
 * [new branch]      m/m        -> local/m/m
 * [new branch]      m2         -> local/m2
 * [new branch]      main       -> local/main
 * [new branch]      main5      -> local/main5
 * [new branch]      mb         -> local/mb
 * [new branch]      n          -> local/n
 * [new branch]      o/o        -> local/o/o
 * [new branch]      o/p        -> local/o/p
 * [new branch]      o/q        -> local/o/q
 * [new branch]      q          -> local/q
 * [new branch]      qq         -> local/qq
 * [new branch]      r          -> local/r
 * [new branch]      rr         -> local/rr
 * [new branch]      s          -> local/s
 * [new branch]      source2    -> local/source2
 * [new branch]      target     -> local/target
 * [new branch]      topic      -> local/topic
 * [new branch]      u          -> local/u
 * [new branch]      zz         -> local/zz
branch 'my1' set up to track 'local/main'.
ok 84 - test tracking setup via --track

expecting success of 3200.85 'test tracking setup (non-wildcard, matching)': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/main:refs/remotes/local/main &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track my4 local/main &&
	test $(git config branch.my4.remote) = local &&
	test $(git config branch.my4.merge) = refs/heads/main

branch 'my4' set up to track 'local/main'.
ok 85 - test tracking setup (non-wildcard, matching)

expecting success of 3200.86 'tracking setup fails on non-matching refspec': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git config remote.local.fetch refs/heads/s:refs/remotes/local/s &&
	test_must_fail git branch --track my5 local/main &&
	test_must_fail git config branch.my5.remote &&
	test_must_fail git config branch.my5.merge

fatal: cannot set up tracking information; starting point 'local/main' is not a branch
ok 86 - tracking setup fails on non-matching refspec

expecting success of 3200.87 'test tracking setup via config': 
	git config branch.autosetupmerge true &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch my3 local/main &&
	test $(git config branch.my3.remote) = local &&
	test $(git config branch.my3.merge) = refs/heads/main

branch 'my3' set up to track 'local/main'.
ok 87 - test tracking setup via config

expecting success of 3200.88 'test overriding tracking setup via --no-track': 
	git config branch.autosetupmerge true &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track my2 local/main &&
	git config branch.autosetupmerge false &&
	! test "$(git config branch.my2.remote)" = local &&
	! test "$(git config branch.my2.merge)" = refs/heads/main

ok 88 - test overriding tracking setup via --no-track

expecting success of 3200.89 'no tracking without .fetch entries': 
	git config branch.autosetupmerge true &&
	git branch my6 s &&
	git config branch.autosetupmerge false &&
	test -z "$(git config branch.my6.remote)" &&
	test -z "$(git config branch.my6.merge)"

ok 89 - no tracking without .fetch entries

expecting success of 3200.90 'test tracking setup via --track but deeper': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/o/o || git fetch local) &&
	git branch --track my7 local/o/o &&
	test "$(git config branch.my7.remote)" = local &&
	test "$(git config branch.my7.merge)" = refs/heads/o/o

branch 'my7' set up to track 'local/o/o'.
ok 90 - test tracking setup via --track but deeper

expecting success of 3200.91 'test deleting branch deletes branch config': 
	git branch -d my7 &&
	test -z "$(git config branch.my7.remote)" &&
	test -z "$(git config branch.my7.merge)"

Deleted branch my7 (was da664a6).
ok 91 - test deleting branch deletes branch config

expecting success of 3200.92 'test deleting branch without config': 
	git branch my7 s &&
	sha1=$(git rev-parse my7 | cut -c 1-7) &&
	echo "Deleted branch my7 (was $sha1)." >expect &&
	git branch -d my7 >actual 2>&1 &&
	test_cmp expect actual

ok 92 - test deleting branch without config

expecting success of 3200.93 'deleting currently checked out branch fails': 
	git worktree add -b my7 my7 &&
	test_must_fail git -C my7 branch -d my7 &&
	test_must_fail git branch -d my7 &&
	rm -r my7 &&
	git worktree prune

Preparing worktree (new branch 'my7')
HEAD is now at da664a6 Second commit.
error: Cannot delete branch 'my7' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/my7'
error: Cannot delete branch 'my7' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3200-branch/my7'
ok 93 - deleting currently checked out branch fails

expecting success of 3200.94 'test --track without .fetch entries': 
	git branch --track my8 &&
	test "$(git config branch.my8.remote)" &&
	test "$(git config branch.my8.merge)"

branch 'my8' set up to track 'main'.
ok 94 - test --track without .fetch entries

expecting success of 3200.95 'branch from non-branch HEAD w/autosetupmerge=always': 
	git config branch.autosetupmerge always &&
	git branch my9 HEAD^ &&
	git config branch.autosetupmerge false

ok 95 - branch from non-branch HEAD w/autosetupmerge=always

expecting success of 3200.96 'branch from non-branch HEAD w/--track causes failure': 
	test_must_fail git branch --track my10 HEAD^

fatal: cannot set up tracking information; starting point 'HEAD^' is not a branch
ok 96 - branch from non-branch HEAD w/--track causes failure

expecting success of 3200.97 'branch from tag w/--track causes failure': 
	git tag foobar &&
	test_must_fail git branch --track my11 foobar

fatal: cannot set up tracking information; starting point 'foobar' is not a branch
ok 97 - branch from tag w/--track causes failure

expecting success of 3200.98 'simple tracking works when remote branch name matches': 
	test_when_finished "rm -rf otherserver" &&
	git init otherserver &&
	test_commit -C otherserver my_commit 1 &&
	git -C otherserver branch feature &&
	test_config branch.autosetupmerge simple &&
	test_config remote.otherserver.url otherserver &&
	test_config remote.otherserver.fetch refs/heads/*:refs/remotes/otherserver/* &&
	git fetch otherserver &&
	git branch feature otherserver/feature &&
	test_cmp_config otherserver branch.feature.remote &&
	test_cmp_config refs/heads/feature branch.feature.merge

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/otherserver/.git/
[main (root-commit) 593c6ee] my_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
From otherserver
 * [new branch]      feature    -> otherserver/feature
 * [new branch]      main       -> otherserver/main
 * [new tag]         my_commit  -> my_commit
branch 'feature' set up to track 'otherserver/feature'.
ok 98 - simple tracking works when remote branch name matches

expecting success of 3200.99 'simple tracking skips when remote branch name does not match': 
	test_config branch.autosetupmerge simple &&
	test_config remote.local.url . &&
	test_config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git fetch local &&
	git branch my-other local/main &&
	test_cmp_config "" --default "" branch.my-other.remote &&
	test_cmp_config "" --default "" branch.my-other.merge

From .
 * [new branch]      feature    -> local/feature
 * [new branch]      my1        -> local/my1
 * [new branch]      my2        -> local/my2
 * [new branch]      my3        -> local/my3
 * [new branch]      my4        -> local/my4
 * [new branch]      my6        -> local/my6
 * [new branch]      my7        -> local/my7
 * [new branch]      my8        -> local/my8
 * [new branch]      my9        -> local/my9
ok 99 - simple tracking skips when remote branch name does not match

expecting success of 3200.100 'simple tracking skips when remote ref is not a branch': 
	test_config branch.autosetupmerge simple &&
	test_config remote.localtags.url . &&
	test_config remote.localtags.fetch refs/tags/*:refs/remotes/localtags/* &&
	git tag mytag12 main &&
	git fetch localtags &&
	git branch mytag12 localtags/mytag12 &&
	test_cmp_config "" --default "" branch.mytag12.remote &&
	test_cmp_config "" --default "" branch.mytag12.merge

From .
 * [new tag]         foobar     -> localtags/foobar
 * [new tag]         my_commit  -> localtags/my_commit
 * [new tag]         mytag12    -> localtags/mytag12
ok 100 - simple tracking skips when remote ref is not a branch

expecting success of 3200.101 '--set-upstream-to fails on multiple branches': 
	echo "fatal: too many arguments to set new upstream" >expect &&
	test_must_fail git branch --set-upstream-to main a b c 2>err &&
	test_cmp expect err

ok 101 - --set-upstream-to fails on multiple branches

expecting success of 3200.102 '--set-upstream-to fails on detached HEAD': 
	git checkout HEAD^{} &&
	test_when_finished git checkout - &&
	echo "fatal: could not set upstream of HEAD to main when it does not point to any branch." >expect &&
	test_must_fail git branch --set-upstream-to main 2>err &&
	test_cmp expect err

Note: switching to 'HEAD^{}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at da664a6 Second commit.
Switched to branch 'main'
ok 102 - --set-upstream-to fails on detached HEAD

expecting success of 3200.103 '--set-upstream-to fails on a missing dst branch': 
	echo "fatal: branch 'does-not-exist' does not exist" >expect &&
	test_must_fail git branch --set-upstream-to main does-not-exist 2>err &&
	test_cmp expect err

ok 103 - --set-upstream-to fails on a missing dst branch

expecting success of 3200.104 '--set-upstream-to fails on a missing src branch': 
	test_must_fail git branch --set-upstream-to does-not-exist main 2>err &&
	test_i18ngrep "the requested upstream branch 'does-not-exist' does not exist" err

fatal: the requested upstream branch 'does-not-exist' does not exist
ok 104 - --set-upstream-to fails on a missing src branch

expecting success of 3200.105 '--set-upstream-to fails on a non-ref': 
	echo "fatal: cannot set up tracking information; starting point 'HEAD^{}' is not a branch" >expect &&
	test_must_fail git branch --set-upstream-to HEAD^{} 2>err &&
	test_cmp expect err

ok 105 - --set-upstream-to fails on a non-ref

expecting success of 3200.106 '--set-upstream-to fails on locked config': 
	test_when_finished "rm -f .git/config.lock" &&
	>.git/config.lock &&
	git branch locked &&
	test_must_fail git branch --set-upstream-to locked 2>err &&
	test_i18ngrep "could not lock config file .git/config" err

error: could not lock config file .git/config: File exists
ok 106 - --set-upstream-to fails on locked config

expecting success of 3200.107 'use --set-upstream-to modify HEAD': 
	test_config branch.main.remote foo &&
	test_config branch.main.merge foo &&
	git branch my12 &&
	git branch --set-upstream-to my12 &&
	test "$(git config branch.main.remote)" = "." &&
	test "$(git config branch.main.merge)" = "refs/heads/my12"

branch 'main' set up to track 'my12'.
ok 107 - use --set-upstream-to modify HEAD

expecting success of 3200.108 'use --set-upstream-to modify a particular branch': 
	git branch my13 &&
	git branch --set-upstream-to main my13 &&
	test_when_finished "git branch --unset-upstream my13" &&
	test "$(git config branch.my13.remote)" = "." &&
	test "$(git config branch.my13.merge)" = "refs/heads/main"

branch 'my13' set up to track 'main'.
ok 108 - use --set-upstream-to modify a particular branch

expecting success of 3200.109 '--unset-upstream should fail if given a non-existent branch': 
	echo "fatal: Branch 'i-dont-exist' has no upstream information" >expect &&
	test_must_fail git branch --unset-upstream i-dont-exist 2>err &&
	test_cmp expect err

ok 109 - --unset-upstream should fail if given a non-existent branch

expecting success of 3200.110 '--unset-upstream should fail if config is locked': 
	test_when_finished "rm -f .git/config.lock" &&
	git branch --set-upstream-to locked &&
	>.git/config.lock &&
	test_must_fail git branch --unset-upstream 2>err &&
	test_i18ngrep "could not lock config file .git/config" err

branch 'main' set up to track 'locked'.
error: could not lock config file .git/config: File exists
ok 110 - --unset-upstream should fail if config is locked

expecting success of 3200.111 'test --unset-upstream on HEAD': 
	git branch my14 &&
	test_config branch.main.remote foo &&
	test_config branch.main.merge foo &&
	git branch --set-upstream-to my14 &&
	git branch --unset-upstream &&
	test_must_fail git config branch.main.remote &&
	test_must_fail git config branch.main.merge &&
	# fail for a branch without upstream set
	echo "fatal: Branch 'main' has no upstream information" >expect &&
	test_must_fail git branch --unset-upstream 2>err &&
	test_cmp expect err

branch 'main' set up to track 'my14'.
ok 111 - test --unset-upstream on HEAD

expecting success of 3200.112 '--unset-upstream should fail on multiple branches': 
	echo "fatal: too many arguments to unset upstream" >expect &&
	test_must_fail git branch --unset-upstream a b c 2>err &&
	test_cmp expect err

ok 112 - --unset-upstream should fail on multiple branches

expecting success of 3200.113 '--unset-upstream should fail on detached HEAD': 
	git checkout HEAD^{} &&
	test_when_finished git checkout - &&
	echo "fatal: could not unset upstream of HEAD when it does not point to any branch." >expect &&
	test_must_fail git branch --unset-upstream 2>err &&
	test_cmp expect err

Note: switching to 'HEAD^{}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at da664a6 Second commit.
Switched to branch 'main'
ok 113 - --unset-upstream should fail on detached HEAD

expecting success of 3200.114 'test --unset-upstream on a particular branch': 
	git branch my15 &&
	git branch --set-upstream-to main my14 &&
	git branch --unset-upstream my14 &&
	test_must_fail git config branch.my14.remote &&
	test_must_fail git config branch.my14.merge

branch 'my14' set up to track 'main'.
ok 114 - test --unset-upstream on a particular branch

expecting success of 3200.115 'disabled option --set-upstream fails': 
	test_must_fail git branch --set-upstream origin/main

fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
ok 115 - disabled option --set-upstream fails

expecting success of 3200.116 '--set-upstream-to notices an error to set branch as own upstream': 
	git branch --set-upstream-to refs/heads/my13 my13 2>actual &&
	cat >expect <<-\EOF &&
	warning: not setting branch 'my13' as its own upstream
	EOF
	test_expect_code 1 git config branch.my13.remote &&
	test_expect_code 1 git config branch.my13.merge &&
	test_cmp expect actual

ok 116 - --set-upstream-to notices an error to set branch as own upstream

expecting success of 3200.117 'git checkout -b g/h/i -l should create a branch and a log': 
	GIT_COMMITTER_DATE="2005-05-26 23:30" \
	git checkout -b g/h/i -l main &&
	test_path_is_file .git/refs/heads/g/h/i &&
	test_path_is_file .git/logs/refs/heads/g/h/i &&
	test_cmp expect .git/logs/refs/heads/g/h/i

Switched to a new branch 'g/h/i'
ok 117 - git checkout -b g/h/i -l should create a branch and a log

expecting success of 3200.118 'checkout -b makes reflog by default': 
	git checkout main &&
	git config --unset core.logAllRefUpdates &&
	git checkout -b alpha &&
	git rev-parse --verify alpha@{0}

Switched to branch 'main'
Switched to a new branch 'alpha'
da664a6b0bffeb0904609e9e14e1beeecfe55c4a
ok 118 - checkout -b makes reflog by default

expecting success of 3200.119 'checkout -b does not make reflog when core.logAllRefUpdates = false': 
	git checkout main &&
	git config core.logAllRefUpdates false &&
	git checkout -b beta &&
	test_must_fail git rev-parse --verify beta@{0}

Switched to branch 'main'
Switched to a new branch 'beta'
fatal: Needed a single revision
ok 119 - checkout -b does not make reflog when core.logAllRefUpdates = false

expecting success of 3200.120 'checkout -b with -l makes reflog when core.logAllRefUpdates = false': 
	git checkout main &&
	git checkout -lb gamma &&
	git config --unset core.logAllRefUpdates &&
	git rev-parse --verify gamma@{0}

Switched to branch 'main'
Switched to a new branch 'gamma'
da664a6b0bffeb0904609e9e14e1beeecfe55c4a
ok 120 - checkout -b with -l makes reflog when core.logAllRefUpdates = false

expecting success of 3200.121 'avoid ambiguous track and advise': 
	git config branch.autosetupmerge true &&
	git config remote.ambi1.url lalala &&
	git config remote.ambi1.fetch refs/heads/lalala:refs/heads/main &&
	git config remote.ambi2.url lilili &&
	git config remote.ambi2.fetch refs/heads/lilili:refs/heads/main &&
	cat <<-EOF >expected &&
	fatal: not tracking: ambiguous information for ref 'refs/heads/main'
	hint: There are multiple remotes whose fetch refspecs map to the remote
	hint: tracking ref 'refs/heads/main':
	hint:   ambi1
	hint:   ambi2
	hint: 
	hint: This is typically a configuration error.
	hint: 
	hint: To support setting up tracking branches, ensure that
	hint: different remotes' fetch refspecs map into different
	hint: tracking namespaces.
	EOF
	test_must_fail git branch all1 main 2>actual &&
	test_cmp expected actual &&
	test -z "$(git config branch.all1.merge)"

ok 121 - avoid ambiguous track and advise

expecting success of 3200.122 'autosetuprebase local on a tracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase local &&
	(git show-ref -q refs/remotes/local/o || git fetch local) &&
	git branch mybase &&
	git branch --track myr1 mybase &&
	test "$(git config branch.myr1.remote)" = . &&
	test "$(git config branch.myr1.merge)" = refs/heads/mybase &&
	test "$(git config branch.myr1.rebase)" = true

From .
 * [new branch]      all1       -> local/all1
 * [new branch]      alpha      -> local/alpha
 * [new branch]      beta       -> local/beta
 * [new branch]      g/h/i      -> local/g/h/i
 * [new branch]      gamma      -> local/gamma
 * [new branch]      locked     -> local/locked
 * [new branch]      my-other   -> local/my-other
 * [new branch]      my12       -> local/my12
 * [new branch]      my13       -> local/my13
 * [new branch]      my14       -> local/my14
 * [new branch]      my15       -> local/my15
 * [new branch]      mytag12    -> local/mytag12
branch 'myr1' set up to track 'mybase' by rebasing.
ok 122 - autosetuprebase local on a tracked local branch

expecting success of 3200.123 'autosetuprebase always on a tracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase always &&
	(git show-ref -q refs/remotes/local/o || git fetch local) &&
	git branch mybase2 &&
	git branch --track myr2 mybase &&
	test "$(git config branch.myr2.remote)" = . &&
	test "$(git config branch.myr2.merge)" = refs/heads/mybase &&
	test "$(git config branch.myr2.rebase)" = true

From .
 * [new branch]      mybase     -> local/mybase
 * [new branch]      myr1       -> local/myr1
branch 'myr2' set up to track 'mybase' by rebasing.
ok 123 - autosetuprebase always on a tracked local branch

expecting success of 3200.124 'autosetuprebase remote on a tracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase remote &&
	(git show-ref -q refs/remotes/local/o || git fetch local) &&
	git branch mybase3 &&
	git branch --track myr3 mybase2 &&
	test "$(git config branch.myr3.remote)" = . &&
	test "$(git config branch.myr3.merge)" = refs/heads/mybase2 &&
	! test "$(git config branch.myr3.rebase)" = true

From .
 * [new branch]      mybase2    -> local/mybase2
 * [new branch]      myr2       -> local/myr2
branch 'myr3' set up to track 'mybase2'.
ok 124 - autosetuprebase remote on a tracked local branch

expecting success of 3200.125 'autosetuprebase never on a tracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase never &&
	(git show-ref -q refs/remotes/local/o || git fetch local) &&
	git branch mybase4 &&
	git branch --track myr4 mybase2 &&
	test "$(git config branch.myr4.remote)" = . &&
	test "$(git config branch.myr4.merge)" = refs/heads/mybase2 &&
	! test "$(git config branch.myr4.rebase)" = true

From .
 * [new branch]      mybase3    -> local/mybase3
 * [new branch]      myr3       -> local/myr3
branch 'myr4' set up to track 'mybase2'.
ok 125 - autosetuprebase never on a tracked local branch

expecting success of 3200.126 'autosetuprebase local on a tracked remote branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase local &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track myr5 local/main &&
	test "$(git config branch.myr5.remote)" = local &&
	test "$(git config branch.myr5.merge)" = refs/heads/main &&
	! test "$(git config branch.myr5.rebase)" = true

branch 'myr5' set up to track 'local/main'.
ok 126 - autosetuprebase local on a tracked remote branch

expecting success of 3200.127 'autosetuprebase never on a tracked remote branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase never &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track myr6 local/main &&
	test "$(git config branch.myr6.remote)" = local &&
	test "$(git config branch.myr6.merge)" = refs/heads/main &&
	! test "$(git config branch.myr6.rebase)" = true

branch 'myr6' set up to track 'local/main'.
ok 127 - autosetuprebase never on a tracked remote branch

expecting success of 3200.128 'autosetuprebase remote on a tracked remote branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase remote &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track myr7 local/main &&
	test "$(git config branch.myr7.remote)" = local &&
	test "$(git config branch.myr7.merge)" = refs/heads/main &&
	test "$(git config branch.myr7.rebase)" = true

branch 'myr7' set up to track 'local/main' by rebasing.
ok 128 - autosetuprebase remote on a tracked remote branch

expecting success of 3200.129 'autosetuprebase always on a tracked remote branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	git config branch.autosetuprebase remote &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track myr8 local/main &&
	test "$(git config branch.myr8.remote)" = local &&
	test "$(git config branch.myr8.merge)" = refs/heads/main &&
	test "$(git config branch.myr8.rebase)" = true

branch 'myr8' set up to track 'local/main' by rebasing.
ok 129 - autosetuprebase always on a tracked remote branch

expecting success of 3200.130 'autosetuprebase unconfigured on a tracked remote branch': 
	git config --unset branch.autosetuprebase &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --track myr9 local/main &&
	test "$(git config branch.myr9.remote)" = local &&
	test "$(git config branch.myr9.merge)" = refs/heads/main &&
	test "z$(git config branch.myr9.rebase)" = z

branch 'myr9' set up to track 'local/main'.
ok 130 - autosetuprebase unconfigured on a tracked remote branch

expecting success of 3200.131 'autosetuprebase unconfigured on a tracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/o || git fetch local) &&
	git branch mybase10 &&
	git branch --track myr10 mybase2 &&
	test "$(git config branch.myr10.remote)" = . &&
	test "$(git config branch.myr10.merge)" = refs/heads/mybase2 &&
	test "z$(git config branch.myr10.rebase)" = z

From .
 * [new branch]      mybase4    -> local/mybase4
 * [new branch]      myr4       -> local/myr4
 * [new branch]      myr5       -> local/myr5
 * [new branch]      myr6       -> local/myr6
 * [new branch]      myr7       -> local/myr7
 * [new branch]      myr8       -> local/myr8
 * [new branch]      myr9       -> local/myr9
branch 'myr10' set up to track 'mybase2'.
ok 131 - autosetuprebase unconfigured on a tracked local branch

expecting success of 3200.132 'autosetuprebase unconfigured on untracked local branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr11 mybase2 &&
	test "z$(git config branch.myr11.remote)" = z &&
	test "z$(git config branch.myr11.merge)" = z &&
	test "z$(git config branch.myr11.rebase)" = z

ok 132 - autosetuprebase unconfigured on untracked local branch

expecting success of 3200.133 'autosetuprebase unconfigured on untracked remote branch': 
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr12 local/main &&
	test "z$(git config branch.myr12.remote)" = z &&
	test "z$(git config branch.myr12.merge)" = z &&
	test "z$(git config branch.myr12.rebase)" = z

ok 133 - autosetuprebase unconfigured on untracked remote branch

expecting success of 3200.134 'autosetuprebase never on an untracked local branch': 
	git config branch.autosetuprebase never &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr13 mybase2 &&
	test "z$(git config branch.myr13.remote)" = z &&
	test "z$(git config branch.myr13.merge)" = z &&
	test "z$(git config branch.myr13.rebase)" = z

ok 134 - autosetuprebase never on an untracked local branch

expecting success of 3200.135 'autosetuprebase local on an untracked local branch': 
	git config branch.autosetuprebase local &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr14 mybase2 &&
	test "z$(git config branch.myr14.remote)" = z &&
	test "z$(git config branch.myr14.merge)" = z &&
	test "z$(git config branch.myr14.rebase)" = z

ok 135 - autosetuprebase local on an untracked local branch

expecting success of 3200.136 'autosetuprebase remote on an untracked local branch': 
	git config branch.autosetuprebase remote &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr15 mybase2 &&
	test "z$(git config branch.myr15.remote)" = z &&
	test "z$(git config branch.myr15.merge)" = z &&
	test "z$(git config branch.myr15.rebase)" = z

ok 136 - autosetuprebase remote on an untracked local branch

expecting success of 3200.137 'autosetuprebase always on an untracked local branch': 
	git config branch.autosetuprebase always &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr16 mybase2 &&
	test "z$(git config branch.myr16.remote)" = z &&
	test "z$(git config branch.myr16.merge)" = z &&
	test "z$(git config branch.myr16.rebase)" = z

ok 137 - autosetuprebase always on an untracked local branch

expecting success of 3200.138 'autosetuprebase never on an untracked remote branch': 
	git config branch.autosetuprebase never &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr17 local/main &&
	test "z$(git config branch.myr17.remote)" = z &&
	test "z$(git config branch.myr17.merge)" = z &&
	test "z$(git config branch.myr17.rebase)" = z

ok 138 - autosetuprebase never on an untracked remote branch

expecting success of 3200.139 'autosetuprebase local on an untracked remote branch': 
	git config branch.autosetuprebase local &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr18 local/main &&
	test "z$(git config branch.myr18.remote)" = z &&
	test "z$(git config branch.myr18.merge)" = z &&
	test "z$(git config branch.myr18.rebase)" = z

ok 139 - autosetuprebase local on an untracked remote branch

expecting success of 3200.140 'autosetuprebase remote on an untracked remote branch': 
	git config branch.autosetuprebase remote &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr19 local/main &&
	test "z$(git config branch.myr19.remote)" = z &&
	test "z$(git config branch.myr19.merge)" = z &&
	test "z$(git config branch.myr19.rebase)" = z

ok 140 - autosetuprebase remote on an untracked remote branch

expecting success of 3200.141 'autosetuprebase always on an untracked remote branch': 
	git config branch.autosetuprebase always &&
	git config remote.local.url . &&
	git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
	(git show-ref -q refs/remotes/local/main || git fetch local) &&
	git branch --no-track myr20 local/main &&
	test "z$(git config branch.myr20.remote)" = z &&
	test "z$(git config branch.myr20.merge)" = z &&
	test "z$(git config branch.myr20.rebase)" = z

ok 141 - autosetuprebase always on an untracked remote branch

expecting success of 3200.142 'autosetuprebase always on detached HEAD': 
	git config branch.autosetupmerge always &&
	test_when_finished git checkout main &&
	git checkout HEAD^0 &&
	git branch my11 &&
	test -z "$(git config branch.my11.remote)" &&
	test -z "$(git config branch.my11.merge)"

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at da664a6 Second commit.
Switched to branch 'main'
ok 142 - autosetuprebase always on detached HEAD

expecting success of 3200.143 'detect misconfigured autosetuprebase (bad value)': 
	git config branch.autosetuprebase garbage &&
	test_must_fail git branch

error: malformed value for branch.autosetuprebase
fatal: bad config variable 'branch.autosetuprebase' in file '.git/config' at line 87
ok 143 - detect misconfigured autosetuprebase (bad value)

expecting success of 3200.144 'detect misconfigured autosetuprebase (no value)': 
	git config --unset branch.autosetuprebase &&
	echo "[branch] autosetuprebase" >>.git/config &&
	test_must_fail git branch &&
	git config --unset branch.autosetuprebase

error: missing value for 'branch.autosetuprebase'
fatal: bad config variable 'branch.autosetuprebase' in file '.git/config' at line 130
ok 144 - detect misconfigured autosetuprebase (no value)

expecting success of 3200.145 'attempt to delete a branch without base and unmerged to HEAD': 
	git checkout my9 &&
	git config --unset branch.my8.merge &&
	test_must_fail git branch -d my8

Switched to branch 'my9'
error: The branch 'my8' is not fully merged.
If you are sure you want to delete it, run 'git branch -D my8'.
ok 145 - attempt to delete a branch without base and unmerged to HEAD

expecting success of 3200.146 'attempt to delete a branch merged to its base': 
	# we are on my9 which is the initial commit; traditionally
	# we would not have allowed deleting my8 that is not merged
	# to my9, but it is set to track main that already has my8
	git config branch.my8.merge refs/heads/main &&
	git branch -d my8

warning: deleting branch 'my8' that has been merged to
         'refs/heads/main', but not yet merged to HEAD.
Deleted branch my8 (was da664a6).
ok 146 - attempt to delete a branch merged to its base

expecting success of 3200.147 'attempt to delete a branch merged to its base': 
	git checkout main &&
	echo Third >>A &&
	git commit -m "Third commit" A &&
	git branch -t my10 my9 &&
	git branch -f my10 HEAD^ &&
	# we are on main which is at the third commit, and my10
	# is behind us, so traditionally we would have allowed deleting
	# it; but my10 is set to track my9 that is further behind.
	test_must_fail git branch -d my10

Switched to branch 'main'
[main 16fbf09] Third commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
branch 'my10' set up to track 'my9'.
warning: not deleting branch 'my10' that is not yet merged to
         'refs/heads/my9', even though it is merged to HEAD.
error: The branch 'my10' is not fully merged.
If you are sure you want to delete it, run 'git branch -D my10'.
ok 147 - attempt to delete a branch merged to its base

expecting success of 3200.148 'branch --delete --force removes dangling branch': 
	git checkout main &&
	test_commit unstable &&
	hash=$(git rev-parse HEAD) &&
	objpath=$(echo $hash | sed -e "s|^..|.git/objects/&/|") &&
	git branch --no-track dangling &&
	mv $objpath $objpath.x &&
	test_when_finished "mv $objpath.x $objpath" &&
	git branch --delete --force dangling &&
	git for-each-ref refs/heads/dangling >actual &&
	test_must_be_empty actual

Already on 'main'
[main d984d0c] unstable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unstable.t
Deleted branch dangling (was d984d0c).
ok 148 - branch --delete --force removes dangling branch

expecting success of 3200.149 'use --edit-description': 
	EDITOR=: git branch --edit-description &&
	test_expect_code 1 git config branch.main.description &&

	write_script editor <<-\EOF &&
		echo "New contents" >"$1"
	EOF
	EDITOR=./editor git branch --edit-description &&
		write_script editor <<-\EOF &&
		git stripspace -s <"$1" >"EDITOR_OUTPUT"
	EOF
	EDITOR=./editor git branch --edit-description &&
	echo "New contents" >expect &&
	test_cmp expect EDITOR_OUTPUT

ok 149 - use --edit-description

expecting success of 3200.150 'detect typo in branch name when using --edit-description': 
	write_script editor <<-\EOF &&
		echo "New contents" >"$1"
	EOF
	test_must_fail env EDITOR=./editor git branch --edit-description no-such-branch

error: No branch named 'no-such-branch'.
ok 150 - detect typo in branch name when using --edit-description

expecting success of 3200.151 'refuse --edit-description on unborn branch for now': 
	test_when_finished "git checkout main" &&
	write_script editor <<-\EOF &&
		echo "New contents" >"$1"
	EOF
	git checkout --orphan unborn &&
	test_must_fail env EDITOR=./editor git branch --edit-description

Switched to a new branch 'unborn'
error: No commit on branch 'unborn' yet.
Switched to branch 'main'
ok 151 - refuse --edit-description on unborn branch for now

expecting success of 3200.152 '--merged catches invalid object names': 
	test_must_fail git branch --merged 0000000000000000000000000000000000000000

error: option `merged' must point to a commit
ok 152 - --merged catches invalid object names

expecting success of 3200.153 '--list during rebase': 
	test_when_finished "reset_rebase" &&
	git checkout main &&
	FAKE_LINES="1 edit 2" &&
	export FAKE_LINES &&
	set_fake_editor &&
	git rebase -i HEAD~2 &&
	git branch --list >actual &&
	test_i18ngrep "rebasing main" actual

Already on 'main'
rebase -i script before editing:
pick 16fbf09 Third commit
pick d984d0c unstable

rebase -i script after editing:
pick 16fbf09 Third commit
edit d984d0c unstable
Rebasing (2/2)

                                                                                
Stopped at d984d0c...  unstable
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
* (no branch, rebasing main)
HEAD is now at d984d0c unstable
Removing .gitconfig
Removing EDITOR_OUTPUT
Removing actual
Removing actual.0abbrev
Removing actual.36abbrev
Removing actual.abbrev
Removing actual.config
Removing actual.default
Removing actual.noabbrev
Removing actual.noabbrev-conf
Removing config.branch
Removing editor
Removing err
Removing expect
Removing expect.config
Removing expected
Removing fake-editor.sh
Removing our.dir
Removing real-u
Removing subdir.dir
ok 153 - --list during rebase

expecting success of 3200.154 '--list during rebase from detached HEAD': 
	test_when_finished "reset_rebase && git checkout main" &&
	git checkout main^0 &&
	oid=$(git rev-parse --short HEAD) &&
	FAKE_LINES="1 edit 2" &&
	export FAKE_LINES &&
	set_fake_editor &&
	git rebase -i HEAD~2 &&
	git branch --list >actual &&
	test_i18ngrep "rebasing detached HEAD $oid" actual

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d984d0c unstable
rebase -i script before editing:
pick 16fbf09 Third commit
pick d984d0c unstable

rebase -i script after editing:
pick 16fbf09 Third commit
edit d984d0c unstable
Rebasing (2/2)

                                                                                
Stopped at d984d0c...  unstable
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
* (no branch, rebasing detached HEAD d984d0c)
HEAD is now at d984d0c unstable
Removing actual
Removing fake-editor.sh
Switched to branch 'main'
ok 154 - --list during rebase from detached HEAD

expecting success of 3200.155 'tracking with unexpected .fetch refspec': 
	rm -rf a b c d &&
	git init -b main a &&
	(
		cd a &&
		test_commit a
	) &&
	git init -b main b &&
	(
		cd b &&
		test_commit b
	) &&
	git init -b main c &&
	(
		cd c &&
		test_commit c &&
		git remote add a ../a &&
		git remote add b ../b &&
		git fetch --all
	) &&
	git init -b main d &&
	(
		cd d &&
		git remote add c ../c &&
		git config remote.c.fetch "+refs/remotes/*:refs/remotes/*" &&
		git fetch c &&
		git branch --track local/a/main remotes/a/main &&
		test "$(git config branch.local/a/main.remote)" = "c" &&
		test "$(git config branch.local/a/main.merge)" = "refs/remotes/a/main" &&
		git rev-parse --verify a >expect &&
		git rev-parse --verify local/a/main >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/a/.git/
[main (root-commit) 7f32f40] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/b/.git/
[main (root-commit) 47d9752] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/c/.git/
[main (root-commit) 7a0a759] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Fetching a
From ../a
 * [new branch]      main       -> a/main
 * [new tag]         a          -> a
Fetching b
From ../b
 * [new branch]      main       -> b/main
 * [new tag]         b          -> b
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/d/.git/
From ../c
 * [new ref]         a/main     -> a/main
 * [new ref]         b/main     -> b/main
 * [new tag]         a          -> a
 * [new tag]         b          -> b
branch 'local/a/main' set up to track 'c/refs/remotes/a/main'.
ok 155 - tracking with unexpected .fetch refspec

expecting success of 3200.156 'configured committerdate sort': 
	git init -b main sort &&
	(
		cd sort &&
		git config branch.sort committerdate &&
		test_commit initial &&
		git checkout -b a &&
		test_commit a &&
		git checkout -b c &&
		test_commit c &&
		git checkout -b b &&
		test_commit b &&
		git branch >actual &&
		cat >expect <<-\EOF &&
		  main
		  a
		  c
		* b
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3200-branch/sort/.git/
[main (root-commit) 23fa7ba] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'a'
[a 6ed220f] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Switched to a new branch 'c'
[c f87a5d9] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Switched to a new branch 'b'
[b 6691410] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
ok 156 - configured committerdate sort

expecting success of 3200.157 'option override configured sort': 
	(
		cd sort &&
		git config branch.sort committerdate &&
		git branch --sort=refname >actual &&
		cat >expect <<-\EOF &&
		  a
		* b
		  c
		  main
		EOF
		test_cmp expect actual
	)

ok 157 - option override configured sort

expecting success of 3200.158 'invalid sort parameter in configuration': 
	(
		cd sort &&
		git config branch.sort "v:notvalid" &&

		# this works in the "listing" mode, so bad sort key
		# is a dying offence.
		test_must_fail git branch &&

		# these do not need to use sorting, and should all
		# succeed
		git branch newone main &&
		git branch -c newone newerone &&
		git branch -m newone newestone &&
		git branch -d newerone newestone
	)

fatal: unknown field name: notvalid
Deleted branch newerone (was 23fa7ba).
Deleted branch newestone (was 23fa7ba).
ok 158 - invalid sort parameter in configuration

expecting success of 3200.159 'tracking info copied with --track=inherit': 
	git branch --track=inherit foo2 my1 &&
	test_cmp_config local branch.foo2.remote &&
	test_cmp_config refs/heads/main branch.foo2.merge

branch 'foo2' set up to track 'local/main'.
ok 159 - tracking info copied with --track=inherit

expecting success of 3200.160 'tracking info copied with autoSetupMerge=inherit': 
	test_unconfig branch.autoSetupMerge &&
	# default config does not copy tracking info
	git branch foo-no-inherit my1 &&
	test_cmp_config "" --default "" branch.foo-no-inherit.remote &&
	test_cmp_config "" --default "" branch.foo-no-inherit.merge &&
	# with autoSetupMerge=inherit, we copy tracking info from my1
	test_config branch.autoSetupMerge inherit &&
	git branch foo3 my1 &&
	test_cmp_config local branch.foo3.remote &&
	test_cmp_config refs/heads/main branch.foo3.merge &&
	# no tracking info to inherit from main
	git branch main2 main &&
	test_cmp_config "" --default "" branch.main2.remote &&
	test_cmp_config "" --default "" branch.main2.merge

branch 'foo3' set up to track 'local/main'.
warning: asked to inherit tracking from 'main', but no remote is set
ok 160 - tracking info copied with autoSetupMerge=inherit

expecting success of 3200.161 '--track overrides branch.autoSetupMerge': 
	test_config branch.autoSetupMerge inherit &&
	git branch --track=direct foo4 my1 &&
	test_cmp_config . branch.foo4.remote &&
	test_cmp_config refs/heads/my1 branch.foo4.merge &&
	git branch --no-track foo5 my1 &&
	test_cmp_config "" --default "" branch.foo5.remote &&
	test_cmp_config "" --default "" branch.foo5.merge

branch 'foo4' set up to track 'my1'.
ok 161 - --track overrides branch.autoSetupMerge

# passed all 161 test(s)
1..161
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3211-peel-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3211-peel-ref/.git/
expecting success of 3211.1 'create annotated tag in refs/tags': 
	test_commit base &&
	git tag -m annotated foo

[main (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 1 - create annotated tag in refs/tags

expecting success of 3211.2 'create annotated tag outside of refs/tags': 
	git update-ref refs/outside/foo refs/tags/foo

ok 2 - create annotated tag outside of refs/tags

expecting success of 3211.3 'set up expected show-ref output': 
	{
		print_ref "refs/heads/main" &&
		print_ref "refs/outside/foo" &&
		print_ref "refs/outside/foo^{}" &&
		print_ref "refs/tags/base" &&
		print_ref "refs/tags/foo" &&
		print_ref "refs/tags/foo^{}"
	} >expect

ok 3 - set up expected show-ref output

expecting success of 3211.4 'refs are peeled outside of refs/tags (loose)': 
	git show-ref -d >actual &&
	test_cmp expect actual

ok 4 - refs are peeled outside of refs/tags (loose)

expecting success of 3211.5 'refs are peeled outside of refs/tags (packed)': 
	git pack-refs --all &&
	git show-ref -d >actual &&
	test_cmp expect actual

ok 5 - refs are peeled outside of refs/tags (packed)

expecting success of 3211.6 'create old-style pack-refs without fully-peeled': 
	# Git no longer writes without fully-peeled, so we just write our own
	# from scratch; we could also munge the existing file to remove the
	# fully-peeled bits, but that seems even more prone to failure,
	# especially if the format ever changes again. At least this way we
	# know we are emulating exactly what an older git would have written.
	{
		echo "# pack-refs with: peeled " &&
		print_ref "refs/heads/main" &&
		print_ref "refs/outside/foo" &&
		print_ref "refs/tags/base" &&
		print_ref "refs/tags/foo" &&
		echo "^$(git rev-parse "refs/tags/foo^{}")"
	} >tmp &&
	mv tmp .git/packed-refs

ok 6 - create old-style pack-refs without fully-peeled

expecting success of 3211.7 'refs are peeled outside of refs/tags (old packed)': 
	git show-ref -d >actual &&
	test_cmp expect actual

ok 7 - refs are peeled outside of refs/tags (old packed)

expecting success of 3211.8 'peeled refs survive deletion of packed ref': 
	git pack-refs --all &&
	cp .git/packed-refs fully-peeled &&
	git branch yadda &&
	git pack-refs --all &&
	git branch -d yadda &&
	test_cmp fully-peeled .git/packed-refs

Deleted branch yadda (was d1ff1c9).
ok 8 - peeled refs survive deletion of packed ref

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3300-funny-names.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3300-funny-names/.git/
expecting success of 3300.1 'setup': 
	cat >"$p0" <<-\EOF &&
	1. A quick brown fox jumps over the lazy cat, oops dog.
	2. A quick brown fox jumps over the lazy cat, oops dog.
	3. A quick brown fox jumps over the lazy cat, oops dog.
	EOF

	{ cat "$p0" >"$p1" || :; } &&
	{ echo "Foo Bar Baz" >"$p2" || :; }

ok 1 - setup

expecting success of 3300.2 'setup: populate index and tree': 
	git update-index --add "$p0" "$p2" &&
	t0=$(git write-tree)

ok 2 - setup: populate index and tree

expecting success of 3300.3 'ls-files prints space in filename verbatim': 
	printf "%s\n" "just space" no-funny >expected &&
	git ls-files >current &&
	test_cmp expected current

ok 3 - ls-files prints space in filename verbatim

expecting success of 3300.4 'setup: add funny filename': 
	git update-index --add "$p1" &&
	t1=$(git write-tree)

ok 4 - setup: add funny filename

expecting success of 3300.5 'ls-files quotes funny filename': 
	cat >expected <<-\EOF &&
	just space
	no-funny
	"tabs\t,\" (dq) and spaces"
	EOF
	git ls-files >current &&
	test_cmp expected current

ok 5 - ls-files quotes funny filename

expecting success of 3300.6 'ls-files -z does not quote funny filename': 
	cat >expected <<-\EOF &&
	just space
	no-funny
	tabs	," (dq) and spaces
	EOF
	git ls-files -z >ls-files.z &&
	perl -pe "y/\000/\012/" <ls-files.z >current &&
	test_cmp expected current

ok 6 - ls-files -z does not quote funny filename

expecting success of 3300.7 'ls-tree quotes funny filename': 
	cat >expected <<-\EOF &&
	just space
	no-funny
	"tabs\t,\" (dq) and spaces"
	EOF
	git ls-tree -r $t1 >ls-tree &&
	sed -e "s/^[^	]*	//" <ls-tree >current &&
	test_cmp expected current

ok 7 - ls-tree quotes funny filename

expecting success of 3300.8 'diff-index --name-status quotes funny filename': 
	cat >expected <<-\EOF &&
	A	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-index --name-status $t0 >current &&
	test_cmp expected current

ok 8 - diff-index --name-status quotes funny filename

expecting success of 3300.9 'diff-tree --name-status quotes funny filename': 
	cat >expected <<-\EOF &&
	A	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-tree --name-status $t0 $t1 >current &&
	test_cmp expected current

ok 9 - diff-tree --name-status quotes funny filename

expecting success of 3300.10 'diff-index -z does not quote funny filename': 
	cat >expected <<-\EOF &&
	A
	tabs	," (dq) and spaces
	EOF
	git diff-index -z --name-status $t0 >diff-index.z &&
	perl -pe "y/\000/\012/" <diff-index.z >current &&
	test_cmp expected current

ok 10 - diff-index -z does not quote funny filename

expecting success of 3300.11 'diff-tree -z does not quote funny filename': 
	cat >expected <<-\EOF &&
	A
	tabs	," (dq) and spaces
	EOF
	git diff-tree -z --name-status $t0 $t1 >diff-tree.z &&
	perl -pe y/\\000/\\012/ <diff-tree.z >current &&
	test_cmp expected current

ok 11 - diff-tree -z does not quote funny filename

expecting success of 3300.12 'diff-tree --find-copies-harder quotes funny filename': 
	cat >expected <<-\EOF &&
	CNUM	no-funny	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-tree -C --find-copies-harder --name-status $t0 $t1 >out &&
	sed -e "s/^C[0-9]*/CNUM/" <out >current &&
	test_cmp expected current

ok 12 - diff-tree --find-copies-harder quotes funny filename

expecting success of 3300.13 'setup: remove unfunny index entry': 
	git update-index --force-remove "$p0"

ok 13 - setup: remove unfunny index entry

expecting success of 3300.14 'diff-tree -M quotes funny filename': 
	cat >expected <<-\EOF &&
	RNUM	no-funny	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -M --name-status $t0 >out &&
	sed -e "s/^R[0-9]*/RNUM/" <out >current &&
	test_cmp expected current

ok 14 - diff-tree -M quotes funny filename

expecting success of 3300.15 'diff-index -M -p quotes funny filename': 
	cat >expected <<-\EOF &&
	diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
	similarity index NUM%
	rename from no-funny
	rename to "tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -M -p $t0 >diff &&
	sed -e "s/index [0-9]*%/index NUM%/" <diff >current &&
	test_cmp expected current

ok 15 - diff-index -M -p quotes funny filename

expecting success of 3300.16 'setup: mode change': 
	chmod +x "$p1"

ok 16 - setup: mode change

expecting success of 3300.17 'diff-index -M -p with mode change quotes funny filename': 
	cat >expected <<-\EOF &&
	diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
	old mode 100644
	new mode 100755
	similarity index NUM%
	rename from no-funny
	rename to "tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -M -p $t0 >diff &&
	sed -e "s/index [0-9]*%/index NUM%/" <diff >current &&
	test_cmp expected current

ok 17 - diff-index -M -p with mode change quotes funny filename

expecting success of 3300.18 'diffstat for rename quotes funny filename': 
	cat >expected <<-\EOF &&
	 "tabs\t,\" (dq) and spaces"
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	git diff-index -M -p $t0 >diff &&
	git apply --stat <diff >diffstat &&
	sed -e "s/|.*//" -e "s/ *\$//" <diffstat >current &&
	test_cmp expected current

ok 18 - diffstat for rename quotes funny filename

expecting success of 3300.19 'numstat for rename quotes funny filename': 
	cat >expected <<-\EOF &&
	0	0	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -M -p $t0 >diff &&
	git apply --numstat <diff >current &&
	test_cmp expected current

ok 19 - numstat for rename quotes funny filename

expecting success of 3300.20 'numstat without -M quotes funny filename': 
	cat >expected <<-\EOF &&
	0	3	no-funny
	3	0	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -p $t0 >diff &&
	git apply --numstat <diff >current &&
	test_cmp expected current

ok 20 - numstat without -M quotes funny filename

expecting success of 3300.21 'numstat for non-git rename diff quotes funny filename': 
	cat >expected <<-\EOF &&
	0	3	no-funny
	3	0	"tabs\t,\" (dq) and spaces"
	EOF
	git diff-index -p $t0 >git-diff &&
	sed -ne "/^[-+@]/p" <git-diff >diff &&
	git apply --numstat <diff >current &&
	test_cmp expected current

ok 21 - numstat for non-git rename diff quotes funny filename

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3302-notes-index-expensive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3302-notes-index-expensive/.git/
expecting success of 3302.1 'setup 10': 
		mkdir "$count" &&
		(
			cd "$count" &&
			create_repo "$count"
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3302-notes-index-expensive/10/.git/
ok 1 - setup 10

expecting success of 3302.2 'notes work': 
		(
			cd "$count" &&
			test_notes "$count"
		)
	
ok 2 - notes work

checking prerequisite: USR_BIN_TIME

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-USR_BIN_TIME" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-USR_BIN_TIME" &&
	test -x /usr/bin/time

)
prerequisite USR_BIN_TIME not satisfied
ok 3 # skip notes timing with /usr/bin/time (missing USR_BIN_TIME)

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
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,USR_BIN_TIME 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,USR_BIN_TIME of USR_BIN_TIME,EXPENSIVE)

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,USR_BIN_TIME of USR_BIN_TIME,EXPENSIVE)

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3207-branch-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/.git/
expecting success of 3207.1 'setup superproject and submodule': 
	git config --global protocol.file.allow always &&
	mkdir test_dirs &&
	(
		cd test_dirs &&
		git init super &&
		test_commit -C super foo &&
		git init sub-sub-upstream &&
		test_commit -C sub-sub-upstream foo &&
		git init sub-upstream &&
		# Submodule in a submodule
		git -C sub-upstream submodule add "${pwd}/test_dirs/sub-sub-upstream" sub-sub &&
		git -C sub-upstream commit -m "add submodule" &&
		# Regular submodule
		git -C super submodule add "${pwd}/test_dirs/sub-upstream" sub &&
		# Submodule in a subdirectory
		git -C super submodule add "${pwd}/test_dirs/sub-sub-upstream" second/sub &&
		git -C super commit -m "add submodule" &&
		git -C super config submodule.propagateBranches true &&
		git -C super/sub submodule update --init
	) &&
	reset_test

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super/.git/
[main (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream/.git/
[main (root-commit) 946e985] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-upstream/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-upstream/sub-sub'...
done.
[main (root-commit) aa719a8] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub-sub
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super/sub'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super/second/sub'...
done.
[main efe8ac8] add submodule
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 second/sub
 create mode 160000 sub
Submodule 'sub-sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream) registered for path 'sub-sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super/sub/sub-sub'...
done.
Submodule path 'sub-sub': checked out '946e985ab20de757ca5b872b16d64e92ff3803a9'
ok 1 - setup superproject and submodule

expecting success of 3207.2 '--recurse-submodules should create branches': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --recurse-submodules branch-a &&
		git rev-parse branch-a &&
		git -C sub rev-parse branch-a &&
		git -C sub/sub-sub rev-parse branch-a &&
		git -C second/sub rev-parse branch-a
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
946e985ab20de757ca5b872b16d64e92ff3803a9
946e985ab20de757ca5b872b16d64e92ff3803a9
ok 2 - --recurse-submodules should create branches

expecting success of 3207.3 '--recurse-submodules should die if submodule.propagateBranches is false': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		echo "fatal: branch with --recurse-submodules can only be used if submodule.propagateBranches is enabled" >expected &&
		test_must_fail git -c submodule.propagateBranches=false branch --recurse-submodules branch-a 2>actual &&
		test_cmp expected actual
	)

ok 3 - --recurse-submodules should die if submodule.propagateBranches is false

expecting success of 3207.4 '--recurse-submodules should fail when not creating branches': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --recurse-submodules branch-a &&
		echo "fatal: --recurse-submodules can only be used to create branches" >expected &&
		test_must_fail git branch --recurse-submodules -D branch-a 2>actual &&
		test_cmp expected actual &&
		# Assert that the branches were not deleted
		git rev-parse branch-a &&
		git -C sub rev-parse branch-a
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 4 - --recurse-submodules should fail when not creating branches

expecting success of 3207.5 'should respect submodule.recurse when creating branches': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git -c submodule.recurse=true branch branch-a &&
		git rev-parse branch-a &&
		git -C sub rev-parse branch-a
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 5 - should respect submodule.recurse when creating branches

expecting success of 3207.6 'should ignore submodule.recurse when not creating branches': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --recurse-submodules branch-a &&
		git -c submodule.recurse=true branch -D branch-a &&
		test_no_branch . branch-a &&
		git -C sub rev-parse branch-a
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
Deleted branch branch-a (was efe8ac8).
branch-a
fatal: ambiguous argument 'branch-a': unknown revision or path not in the working tree.
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 6 - should ignore submodule.recurse when not creating branches

expecting success of 3207.7 'should create branches based off commit id in superproject': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --recurse-submodules branch-a &&
		git checkout --recurse-submodules branch-a &&
		git -C sub rev-parse HEAD >expected &&
		# Move the tip of sub:branch-a so that it no longer matches the commit in super:branch-a
		git -C sub checkout branch-a &&
		test_commit -C sub bar &&
		# Create a new branch-b branch with start-point=branch-a
		git branch --recurse-submodules branch-b branch-a &&
		git rev-parse branch-b &&
		git -C sub rev-parse branch-b >actual &&
		# Assert that the commit id of sub:second-branch matches super:branch-a and not sub:branch-a
		test_cmp expected actual
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
Switched to branch 'branch-a'
Switched to branch 'branch-a'
[branch-a 34411e5] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
submodule 'second/sub': creating branch 'branch-b'
submodule 'sub': creating branch 'branch-b'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-b'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
ok 7 - should create branches based off commit id in superproject

expecting success of 3207.8 'should not create any branches if branch is not valid for all repos': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git -C sub branch branch-a &&
		test_must_fail git branch --recurse-submodules branch-a 2>actual &&
		test_no_branch . branch-a &&
		grep "submodule .sub.: fatal: a branch named .branch-a. already exists" actual
	)

branch-a
fatal: ambiguous argument 'branch-a': unknown revision or path not in the working tree.
submodule 'sub': fatal: a branch named 'branch-a' already exists
ok 8 - should not create any branches if branch is not valid for all repos

expecting success of 3207.9 'should create branches if branch exists and --force is given': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git -C sub rev-parse HEAD >expected &&
		test_commit -C sub baz &&
		# branch-a in sub now points to a newer commit.
		git -C sub branch branch-a HEAD &&
		git -C sub rev-parse branch-a >actual-old-branch-a &&
		git branch --recurse-submodules --force branch-a &&
		git rev-parse branch-a &&
		git -C sub rev-parse branch-a >actual-new-branch-a &&
		test_cmp expected actual-new-branch-a &&
		# assert that branch --force actually moved the sub
		# branch
		! test_cmp expected actual-old-branch-a
	)

[main 9a9267a] baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz.t
submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
--- expected	2022-12-28 07:37:44.032611479 +0000
+++ actual-old-branch-a	2022-12-28 07:37:44.262619978 +0000
@@ -1 +1 @@
-aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
+9a9267a27b975edc5788147e61eaaf3a233c7fd5
ok 9 - should create branches if branch exists and --force is given

expecting success of 3207.10 'should create branch when submodule is not in HEAD:.gitmodules': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch branch-a &&
		git checkout -b branch-b &&
		git submodule add ../sub-upstream sub2 &&
		git -C sub2 submodule update --init &&
		# branch-b now has a committed submodule not in branch-a
		git commit -m "add second submodule" &&
		git checkout branch-a &&
		git branch --recurse-submodules branch-c branch-b &&
		git checkout --recurse-submodules branch-c &&
		git -C sub2 rev-parse branch-c &&
		git -C sub2/sub-sub rev-parse branch-c
	)

Switched to a new branch 'branch-b'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/super/sub2'...
done.
Submodule 'sub-sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream) registered for path 'sub-sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/super/sub2/sub-sub'...
done.
Submodule path 'sub-sub': checked out '946e985ab20de757ca5b872b16d64e92ff3803a9'
[branch-b 5ed70ad] add second submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub2
warning: unable to rmdir 'sub2': Directory not empty
Switched to branch 'branch-a'
submodule 'second/sub': creating branch 'branch-c'
submodule 'sub': creating branch 'branch-c'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-c'
submodule 'sub2': creating branch 'branch-c'
submodule 'sub2': submodule 'sub-sub': creating branch 'branch-c'
Switched to branch 'branch-c'
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
946e985ab20de757ca5b872b16d64e92ff3803a9
ok 10 - should create branch when submodule is not in HEAD:.gitmodules

expecting success of 3207.11 'should not create branches in inactive submodules': 
	test_when_finished "reset_test" &&
	test_config -C super submodule.sub.active false &&
	(
		cd super &&
		git branch --recurse-submodules branch-a &&
		git rev-parse branch-a &&
		test_no_branch sub branch-a
	)

submodule 'second/sub': creating branch 'branch-a'
efe8ac855d6cdec9ef324f7aa3db8db5e89d0294
branch-a
fatal: ambiguous argument 'branch-a': unknown revision or path not in the working tree.
ok 11 - should not create branches in inactive submodules

expecting success of 3207.12 'should set up tracking of local branches with track=always': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git -c branch.autoSetupMerge=always branch --recurse-submodules branch-a main &&
		git -C sub rev-parse main &&
		test_cmp_config -C sub . branch.branch-a.remote &&
		test_cmp_config -C sub refs/heads/main branch.branch-a.merge
	)

branch 'branch-a' set up to track 'main'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'second/sub': branch 'branch-a' set up to track 'main'.
submodule 'sub': creating branch 'branch-a'
submodule 'sub': branch 'branch-a' set up to track 'main'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': branch 'branch-a' set up to track 'main'.
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 12 - should set up tracking of local branches with track=always

expecting success of 3207.13 'should set up tracking of local branches with explicit track': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --track --recurse-submodules branch-a main &&
		git -C sub rev-parse main &&
		test_cmp_config -C sub . branch.branch-a.remote &&
		test_cmp_config -C sub refs/heads/main branch.branch-a.merge
	)

branch 'branch-a' set up to track 'main'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'second/sub': branch 'branch-a' set up to track 'main'.
submodule 'sub': creating branch 'branch-a'
submodule 'sub': branch 'branch-a' set up to track 'main'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': branch 'branch-a' set up to track 'main'.
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 13 - should set up tracking of local branches with explicit track

expecting success of 3207.14 'should not set up unnecessary tracking of local branches': 
	test_when_finished "reset_test" &&
	(
		cd super &&
		git branch --recurse-submodules branch-a main &&
		git -C sub rev-parse main &&
		test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
		test_cmp_config -C sub "" --default "" branch.branch-a.merge
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
aa719a89eb3abe87bf823ad44ccb4e36c6b2a658
ok 14 - should not set up unnecessary tracking of local branches

expecting success of 3207.15 'setup tests with remotes': 
	(
		cd test_dirs &&
		(
			cd super &&
			git branch branch-a &&
			git checkout -b branch-b &&
			git submodule add ../sub-upstream sub2 &&
			# branch-b now has a committed submodule not in branch-a
			git commit -m "add second submodule"
		) &&
		git clone --branch main --recurse-submodules super super-clone &&
		git -C super-clone config submodule.propagateBranches true
	) &&
	reset_remote_test

Switched to a new branch 'branch-b'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super/sub2'...
done.
[branch-b 5ed70ad] add second submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub2
Cloning into 'super-clone'...
done.
Submodule 'second/sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream) registered for path 'second/sub'
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-upstream) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super-clone/second/sub'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super-clone/sub'...
done.
Submodule path 'second/sub': checked out '946e985ab20de757ca5b872b16d64e92ff3803a9'
Submodule path 'sub': checked out 'aa719a89eb3abe87bf823ad44ccb4e36c6b2a658'
Submodule 'sub-sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream) registered for path 'sub/sub-sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/super-clone/sub/sub-sub'...
done.
Submodule path 'sub/sub-sub': checked out '946e985ab20de757ca5b872b16d64e92ff3803a9'
ok 15 - setup tests with remotes

expecting success of 3207.16 'should get fatal error upon branch creation when submodule is not in .git/modules': 
	test_when_finished "reset_remote_test" &&
	(
		cd super-clone &&
		# This should succeed because super-clone has sub in .git/modules
		git branch --recurse-submodules branch-a origin/branch-a &&
		# This should fail because super-clone does not have sub2 .git/modules
		test_must_fail git branch --recurse-submodules branch-b origin/branch-b 2>actual &&
		grep "fatal: submodule .sub2.: unable to find submodule" actual &&
		test_no_branch . branch-b &&
		test_no_branch sub branch-b &&
		# User can fix themselves by initializing the submodule
		git checkout origin/branch-b &&
		git submodule update --init --recursive &&
		git branch --recurse-submodules branch-b origin/branch-b
	)

branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'second/sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': creating branch 'branch-a'
submodule 'sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': branch 'branch-a' set up to track 'origin/branch-a'.
fatal: submodule 'sub2': unable to find submodule
branch-b
fatal: ambiguous argument 'branch-b': unknown revision or path not in the working tree.
branch-b
fatal: ambiguous argument 'branch-b': unknown revision or path not in the working tree.
Note: switching to 'origin/branch-b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ed70ad add second submodule
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-upstream) registered for path 'sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/super-clone/sub2'...
done.
Submodule path 'sub2': checked out 'aa719a89eb3abe87bf823ad44ccb4e36c6b2a658'
Submodule 'sub-sub' (/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/test_dirs/sub-sub-upstream) registered for path 'sub2/sub-sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3207-branch-submodule/super-clone/sub2/sub-sub'...
done.
Submodule path 'sub2/sub-sub': checked out '946e985ab20de757ca5b872b16d64e92ff3803a9'
branch 'branch-b' set up to track 'origin/branch-b'.
submodule 'second/sub': creating branch 'branch-b'
submodule 'second/sub': branch 'branch-b' set up to track 'origin/branch-b'.
submodule 'sub': creating branch 'branch-b'
submodule 'sub': branch 'branch-b' set up to track 'origin/branch-b'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-b'
submodule 'sub': submodule 'sub-sub': branch 'branch-b' set up to track 'origin/branch-b'.
submodule 'sub2': creating branch 'branch-b'
submodule 'sub2': branch 'branch-b' set up to track 'origin/branch-b'.
submodule 'sub2': submodule 'sub-sub': creating branch 'branch-b'
submodule 'sub2': submodule 'sub-sub': branch 'branch-b' set up to track 'origin/branch-b'.
ok 16 - should get fatal error upon branch creation when submodule is not in .git/modules

expecting success of 3207.17 'should set up tracking of remote-tracking branches by default': 
	test_when_finished "reset_remote_test" &&
	(
		cd super-clone &&
		git branch --recurse-submodules branch-a origin/branch-a &&
		test_cmp_config origin branch.branch-a.remote &&
		test_cmp_config refs/heads/branch-a branch.branch-a.merge &&
		# "origin/branch-a" does not exist for "sub", but it matches the refspec
		# so tracking should be set up
		test_cmp_config -C sub origin branch.branch-a.remote &&
		test_cmp_config -C sub refs/heads/branch-a branch.branch-a.merge &&
		test_cmp_config -C sub/sub-sub origin branch.branch-a.remote &&
		test_cmp_config -C sub/sub-sub refs/heads/branch-a branch.branch-a.merge
	)

branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'second/sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': creating branch 'branch-a'
submodule 'sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': branch 'branch-a' set up to track 'origin/branch-a'.
ok 17 - should set up tracking of remote-tracking branches by default

expecting success of 3207.18 'should not fail when unable to set up tracking in submodule': 
	test_when_finished "reset_remote_test" &&
	(
		cd super-clone &&
		git remote rename origin ex-origin &&
		git branch --recurse-submodules branch-a ex-origin/branch-a &&
		test_cmp_config ex-origin branch.branch-a.remote &&
		test_cmp_config refs/heads/branch-a branch.branch-a.merge &&
		test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
		test_cmp_config -C sub "" --default "" branch.branch-a.merge
	)

branch 'branch-a' set up to track 'ex-origin/branch-a'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
ok 18 - should not fail when unable to set up tracking in submodule

expecting success of 3207.19 '--track=inherit should set up tracking correctly': 
	test_when_finished "reset_remote_test" &&
	(
		cd super-clone &&
		git branch --recurse-submodules branch-a origin/branch-a &&
		# Set this manually instead of using branch --set-upstream-to
		# to circumvent the "nonexistent upstream" check.
		git -C sub config branch.branch-a.remote origin &&
		git -C sub config branch.branch-a.merge refs/heads/sub-branch-a &&
		git -C sub/sub-sub config branch.branch-a.remote other &&
		git -C sub/sub-sub config branch.branch-a.merge refs/heads/sub-sub-branch-a &&

		git branch --recurse-submodules --track=inherit branch-b branch-a &&
		test_cmp_config origin branch.branch-b.remote &&
		test_cmp_config refs/heads/branch-a branch.branch-b.merge &&
		test_cmp_config -C sub origin branch.branch-b.remote &&
		test_cmp_config -C sub refs/heads/sub-branch-a branch.branch-b.merge &&
		test_cmp_config -C sub/sub-sub other branch.branch-b.remote &&
		test_cmp_config -C sub/sub-sub refs/heads/sub-sub-branch-a branch.branch-b.merge
	)

branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'second/sub': creating branch 'branch-a'
submodule 'second/sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': creating branch 'branch-a'
submodule 'sub': branch 'branch-a' set up to track 'origin/branch-a'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': branch 'branch-a' set up to track 'origin/branch-a'.
branch 'branch-b' set up to track 'origin/branch-a'.
submodule 'second/sub': creating branch 'branch-b'
submodule 'second/sub': branch 'branch-b' set up to track 'origin/branch-a'.
submodule 'sub': creating branch 'branch-b'
submodule 'sub': branch 'branch-b' set up to track 'origin/sub-branch-a'.
submodule 'sub': submodule 'sub-sub': creating branch 'branch-b'
submodule 'sub': submodule 'sub-sub': branch 'branch-b' set up to track 'other/sub-sub-branch-a'.
ok 19 - --track=inherit should set up tracking correctly

expecting success of 3207.20 '--no-track should not set up tracking': 
	test_when_finished "reset_remote_test" &&
	(
		cd super-clone &&
		git branch --recurse-submodules --no-track branch-a origin/branch-a &&
		test_cmp_config "" --default "" branch.branch-a.remote &&
		test_cmp_config "" --default "" branch.branch-a.merge &&
		test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
		test_cmp_config -C sub "" --default "" branch.branch-a.merge &&
		test_cmp_config -C sub/sub-sub "" --default "" branch.branch-a.remote &&
		test_cmp_config -C sub/sub-sub "" --default "" branch.branch-a.merge
	)

submodule 'second/sub': creating branch 'branch-a'
submodule 'sub': creating branch 'branch-a'
submodule 'sub': submodule 'sub-sub': creating branch 'branch-a'
ok 20 - --no-track should not set up tracking

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3304-notes-mixed.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3304-notes-mixed/.git/
expecting success of 3304.1 'setup: create a couple of commits': 

	test_tick &&
	cat <<INPUT_END >input &&
commit refs/heads/main
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
commit #1
COMMIT

M 644 inline file
data <<EOF
file in commit #1
EOF

INPUT_END

	test_tick &&
	cat <<INPUT_END >>input &&
commit refs/heads/main
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
commit #2
COMMIT

M 644 inline file
data <<EOF
file in commit #2
EOF

INPUT_END
	git fast-import --quiet <input

ok 1 - setup: create a couple of commits

expecting success of 3304.2 'create a notes tree with both notes and non-notes': 

	commit1=$(git rev-parse refs/heads/main^) &&
	commit2=$(git rev-parse refs/heads/main) &&
	test_tick &&
	cat <<INPUT_END >input &&
commit refs/notes/commits
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
notes commit #1
COMMIT

N inline $commit1
data <<EOF
note for commit #1
EOF

N inline $commit2
data <<EOF
note for commit #2
EOF

INPUT_END
	test_tick &&
	cat <<INPUT_END >>input &&
commit refs/notes/commits
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
notes commit #2
COMMIT

M 644 inline foobar/non-note.txt
data <<EOF
A non-note in a notes tree
EOF

N inline $commit2
data <<EOF
edited note for commit #2
EOF

INPUT_END
	test_tick &&
	cat <<INPUT_END >>input &&
commit refs/notes/commits
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
notes commit #3
COMMIT

N inline $commit1
data <<EOF
edited note for commit #1
EOF

M 644 inline deadbeef
data <<EOF
non-note with SHA1-like name
EOF

M 644 inline de/adbeef
data <<EOF
another non-note with SHA1-like name
EOF

M 644 inline de/adbeefdeadbeefdeadbeefdeadbeefdeadbeef
data <<EOF
This is actually a valid note, albeit to a non-existing object.
It is needed in order to trigger the "mishandling" of the dead/beef non-note.
EOF

M 644 inline dead/beef
data <<EOF
yet another non-note with SHA1-like name
EOF

INPUT_END
	git fast-import --quiet <input &&
	git config core.notesRef refs/notes/commits

ok 2 - create a notes tree with both notes and non-notes

expecting success of 3304.3 'verify contents of notes': 

	git log | grep "^    " > actual &&
	test_cmp expect actual

ok 3 - verify contents of notes

expecting success of 3304.4 'verify contents of non-notes': 

	git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
	test_cmp expect_nn1 actual_nn1 &&
	git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
	test_cmp expect_nn2 actual_nn2 &&
	git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
	test_cmp expect_nn3 actual_nn3 &&
	git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
	test_cmp expect_nn4 actual_nn4

ok 4 - verify contents of non-notes

expecting success of 3304.5 'git-notes preserves non-notes': 

	test_tick &&
	git notes add -f -m "foo bar"

Overwriting existing notes for object 5f8b8322f6a2c6d36eb6d42312d2393900ab7b81
ok 5 - git-notes preserves non-notes

expecting success of 3304.6 'verify contents of non-notes after git-notes': 

	git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
	test_cmp expect_nn1 actual_nn1 &&
	git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
	test_cmp expect_nn2 actual_nn2 &&
	git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
	test_cmp expect_nn3 actual_nn3 &&
	git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
	test_cmp expect_nn4 actual_nn4

ok 6 - verify contents of non-notes after git-notes

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3301-notes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3301-notes/.git/
expecting success of 3301.1 'cannot annotate non-existing HEAD': 
	test_must_fail env MSG=3 git notes add

fatal: failed to resolve 'HEAD' as a valid ref.
ok 1 - cannot annotate non-existing HEAD

expecting success of 3301.2 'setup': 
	test_commit 1st &&
	test_commit 2nd

[master (root-commit) 04ed9a0] 1st
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1st.t
[master 7a4ca6e] 2nd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2nd.t
ok 2 - setup

expecting success of 3301.3 'need valid notes ref': 
	test_must_fail env MSG=1 GIT_NOTES_REF=/ git notes show &&
	test_must_fail env MSG=2 GIT_NOTES_REF=/ git notes show

fatal: refusing to show notes in / (outside of refs/notes/)
fatal: refusing to show notes in / (outside of refs/notes/)
ok 3 - need valid notes ref

expecting success of 3301.4 'refusing to add notes in refs/heads/': 
	test_must_fail env MSG=1 GIT_NOTES_REF=refs/heads/bogus git notes add

fatal: refusing to add notes in refs/heads/bogus (outside of refs/notes/)
ok 4 - refusing to add notes in refs/heads/

expecting success of 3301.5 'refusing to edit notes in refs/remotes/': 
	test_must_fail env MSG=1 GIT_NOTES_REF=refs/heads/bogus git notes edit

fatal: refusing to edit notes in refs/heads/bogus (outside of refs/notes/)
ok 5 - refusing to edit notes in refs/remotes/

expecting success of 3301.6 'handle empty notes gracefully': 
	test_expect_code 1 git notes show

error: no note found for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691.
ok 6 - handle empty notes gracefully

expecting success of 3301.7 'show non-existent notes entry with %N': 
	test_write_lines A B >expect &&
	git show -s --format="A%n%NB" >actual &&
	test_cmp expect actual

ok 7 - show non-existent notes entry with %N

expecting success of 3301.8 'create notes': 
	MSG=b4 git notes add &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b4 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

b4
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 8 - create notes

expecting success of 3301.9 'show notes entry with %N': 
	test_write_lines A b4 B >expect &&
	git show -s --format="A%n%NB" >actual &&
	test_cmp expect actual

ok 9 - show notes entry with %N

expecting success of 3301.10 'create reflog entry': 
	ref=$(git rev-parse --short refs/notes/commits) &&
	cat <<-EOF >expect &&
		$ref refs/notes/commits@{0}: notes: Notes added by 'git notes add'
	EOF
	git reflog show refs/notes/commits >actual &&
	test_cmp expect actual

ok 10 - create reflog entry

expecting success of 3301.11 'edit existing notes': 
	MSG=b3 git notes edit &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b3 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

b3
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 11 - edit existing notes

expecting success of 3301.12 'show notes from treeish': 
	echo b3 >expect &&
	git notes --ref commits^{tree} show >actual &&
	test_cmp expect actual &&

	echo b4 >expect &&
	git notes --ref commits@{1} show >actual &&
	test_cmp expect actual

ok 12 - show notes from treeish

expecting success of 3301.13 'cannot edit notes from non-ref': 
	test_must_fail git notes --ref commits^{tree} edit &&
	test_must_fail git notes --ref commits@{1} edit

fatal: Cannot use notes ref refs/notes/commits^{tree}
fatal: Cannot use notes ref refs/notes/commits@{1}
ok 13 - cannot edit notes from non-ref

expecting success of 3301.14 'cannot "git notes add -m" where notes already exists': 
	test_must_fail git notes add -m "b2" &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b3 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

error: Cannot add notes. Found existing notes for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691. Use '-f' to overwrite existing notes
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 14 - cannot "git notes add -m" where notes already exists

expecting success of 3301.15 'can overwrite existing note with "git notes add -f -m"': 
	git notes add -f -m "b1" &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b1 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

Overwriting existing notes for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 15 - can overwrite existing note with "git notes add -f -m"

expecting success of 3301.16 'add w/no options on existing note morphs into edit': 
	MSG=b2 git notes add &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b2 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

b2
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 16 - add w/no options on existing note morphs into edit

expecting success of 3301.17 'can overwrite existing note with "git notes add -f"': 
	MSG=b1 git notes add -f &&
	test_path_is_missing .git/NOTES_EDITMSG &&
	git ls-tree -r refs/notes/commits >actual &&
	test_line_count = 1 actual &&
	echo b1 >expect &&
	git notes show >actual &&
	test_cmp expect actual &&
	git show HEAD^ &&
	test_must_fail git notes show HEAD^

Overwriting existing notes for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
b1
commit 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    1st

diff --git a/1st.t b/1st.t
new file mode 100644
index 0000000..2a5d015
--- /dev/null
+++ b/1st.t
@@ -0,0 +1 @@
+1st
error: no note found for object 04ed9a0bbe0285f41c913e2002cb09ef8449d4a6.
ok 17 - can overwrite existing note with "git notes add -f"

expecting success of 3301.18 'show notes': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:14:13 2005 -0700

		${indent}2nd

		Notes:
		${indent}b1
	EOF
	git cat-file commit HEAD >commits &&
	! grep b1 commits &&
	git log -1 >actual &&
	test_cmp expect actual

ok 18 - show notes

expecting success of 3301.19 'show multi-line notes': 
	test_commit 3rd &&
	MSG="b3${LF}c3c3c3c3${LF}d3d3d3" git notes add &&
	commit=$(git rev-parse HEAD) &&
	cat >expect-multiline <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:15:13 2005 -0700

		${indent}3rd

		Notes:
		${indent}b3
		${indent}c3c3c3c3
		${indent}d3d3d3

	EOF
	cat expect >>expect-multiline &&
	git log -2 >actual &&
	test_cmp expect-multiline actual

[master d07d62e] 3rd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3rd.t
b3
c3c3c3c3
d3d3d3
ok 19 - show multi-line notes

expecting success of 3301.20 'show -F notes': 
	test_commit 4th &&
	echo "xyzzy" >note5 &&
	git notes add -F note5 &&
	commit=$(git rev-parse HEAD) &&
	cat >expect-F <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:16:13 2005 -0700

		${indent}4th

		Notes:
		${indent}xyzzy

	EOF
	cat expect-multiline >>expect-F &&
	git log -3 >actual &&
	test_cmp expect-F actual

[master 0f7aa3e] 4th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4th.t
ok 20 - show -F notes

expecting success of 3301.21 'Re-adding -F notes without -f fails': 
	echo "zyxxy" >note5 &&
	test_must_fail git notes add -F note5 &&
	git log -3 >actual &&
	test_cmp expect-F actual

error: Cannot add notes. Found existing notes for object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11. Use '-f' to overwrite existing notes
ok 21 - Re-adding -F notes without -f fails

expecting success of 3301.22 'git log --pretty=raw does not show notes': 
	commit=$(git rev-parse HEAD) &&
	tree=$(git rev-parse HEAD^{tree}) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect <<-EOF &&
		commit $commit
		tree $tree
		parent $parent
		author A U Thor <author@example.com> 1112912173 -0700
		committer C O Mitter <committer@example.com> 1112912173 -0700

		${indent}4th
	EOF
	git log -1 --pretty=raw >actual &&
	test_cmp expect actual

ok 22 - git log --pretty=raw does not show notes

expecting success of 3301.23 'git log --show-notes': 
	cat >>expect <<-EOF &&

	Notes:
	${indent}xyzzy
	EOF
	git log -1 --pretty=raw --show-notes >actual &&
	test_cmp expect actual

ok 23 - git log --show-notes

expecting success of 3301.24 'git log --no-notes': 
	git log -1 --no-notes >actual &&
	! grep xyzzy actual

ok 24 - git log --no-notes

expecting success of 3301.25 'git format-patch does not show notes': 
	git format-patch -1 --stdout >actual &&
	! grep xyzzy actual

ok 25 - git format-patch does not show notes

expecting success of 3301.26 'git format-patch --show-notes does show notes': 
	git format-patch --show-notes -1 --stdout >actual &&
	grep xyzzy actual

    xyzzy
ok 26 - git format-patch --show-notes does show notes

expecting success of 3301.27 'git show  does show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
    xyzzy
ok 27 - git show  does show notes

expecting success of 3301.28 'git show --pretty does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 28 - git show --pretty does not show notes

expecting success of 3301.29 'git show --pretty=raw does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 29 - git show --pretty=raw does not show notes

expecting success of 3301.30 'git show --pretty=short does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 30 - git show --pretty=short does not show notes

expecting success of 3301.31 'git show --pretty=medium does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 31 - git show --pretty=medium does not show notes

expecting success of 3301.32 'git show --pretty=full does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 32 - git show --pretty=full does not show notes

expecting success of 3301.33 'git show --pretty=fuller does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 33 - git show --pretty=fuller does not show notes

expecting success of 3301.34 'git show --pretty=format:%s does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 34 - git show --pretty=format:%s does not show notes

expecting success of 3301.35 'git show --oneline does not show notes': 
		git show $p >actual &&
		eval "$negate grep xyzzy actual"
	
ok 35 - git show --oneline does not show notes

expecting success of 3301.36 'setup alternate notes ref': 
	git notes --ref=alternate add -m alternate

ok 36 - setup alternate notes ref

expecting success of 3301.37 'git log --notes shows default notes': 
	git log -1 --notes >actual &&
	grep xyzzy actual &&
	! grep alternate actual

    xyzzy
ok 37 - git log --notes shows default notes

expecting success of 3301.38 'git log --notes=X shows only X': 
	git log -1 --notes=alternate >actual &&
	! grep xyzzy actual &&
	grep alternate actual

Notes (alternate):
    alternate
ok 38 - git log --notes=X shows only X

expecting success of 3301.39 'git log --notes --notes=X shows both': 
	git log -1 --notes --notes=alternate >actual &&
	grep xyzzy actual &&
	grep alternate actual

    xyzzy
Notes (alternate):
    alternate
ok 39 - git log --notes --notes=X shows both

expecting success of 3301.40 'git log --no-notes resets default state': 
	git log -1 --notes --notes=alternate \
		--no-notes --notes=alternate \
		>actual &&
	! grep xyzzy actual &&
	grep alternate actual

Notes (alternate):
    alternate
ok 40 - git log --no-notes resets default state

expecting success of 3301.41 'git log --no-notes resets ref list': 
	git log -1 --notes --notes=alternate \
		--no-notes --notes \
		>actual &&
	grep xyzzy actual &&
	! grep alternate actual

    xyzzy
ok 41 - git log --no-notes resets ref list

expecting success of 3301.42 'show -m notes': 
	test_commit 5th &&
	git notes add -m spam -m "foo${LF}bar${LF}baz" &&
	commit=$(git rev-parse HEAD) &&
	cat >expect-m <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:17:13 2005 -0700

		${indent}5th

		Notes:
		${indent}spam
		${indent}
		${indent}foo
		${indent}bar
		${indent}baz

	EOF
	cat expect-F >>expect-m &&
	git log -4 >actual &&
	test_cmp expect-m actual

[master 7f9ad88] 5th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5th.t
ok 42 - show -m notes

expecting success of 3301.43 'remove note with add -f -F /dev/null': 
	git notes add -f -F /dev/null &&
	commit=$(git rev-parse HEAD) &&
	cat >expect-rm-F <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:17:13 2005 -0700

		${indent}5th

	EOF
	cat expect-F >>expect-rm-F &&
	git log -4 >actual &&
	test_cmp expect-rm-F actual &&
	test_must_fail git notes show

Overwriting existing notes for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Removing note for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
ok 43 - remove note with add -f -F /dev/null

expecting success of 3301.44 'do not create empty note with -m ""': 
	git notes add -m "" &&
	git log -4 >actual &&
	test_cmp expect-rm-F actual &&
	test_must_fail git notes show

Removing note for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
ok 44 - do not create empty note with -m ""

expecting success of 3301.45 'create note with combination of -m and -F': 
	cat >expect-combine_m_and_F <<-EOF &&
		foo

		xyzzy

		bar

		zyxxy

		baz
	EOF
	echo "xyzzy" >note_a &&
	echo "zyxxy" >note_b &&
	git notes add -m "foo" -F note_a -m "bar" -F note_b -m "baz" &&
	git notes show >actual &&
	test_cmp expect-combine_m_and_F actual

ok 45 - create note with combination of -m and -F

expecting success of 3301.46 'remove note with "git notes remove"': 
	git notes remove HEAD^ &&
	git notes remove &&
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect-rm-remove <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:17:13 2005 -0700

		${indent}5th

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:16:13 2005 -0700

		${indent}4th

	EOF
	cat expect-multiline >>expect-rm-remove &&
	git log -4 >actual &&
	test_cmp expect-rm-remove actual &&
	test_must_fail git notes show HEAD^

Removing note for object HEAD^
Removing note for object HEAD
error: no note found for object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11.
ok 46 - remove note with "git notes remove"

expecting success of 3301.47 'removing non-existing note should not create new commit': 
	git rev-parse --verify refs/notes/commits >before_commit &&
	test_must_fail git notes remove HEAD^ &&
	git rev-parse --verify refs/notes/commits >after_commit &&
	test_cmp before_commit after_commit

Object HEAD^ has no note
ok 47 - removing non-existing note should not create new commit

expecting success of 3301.48 'removing more than one': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&

	# We have only two -- add another and make sure it stays
	git notes add -m "extra" &&
	git notes list HEAD >after-removal-expect &&
	git notes remove HEAD^^ HEAD^^^ &&
	git notes list | sed -e "s/ .*//" >actual &&
	test_cmp after-removal-expect actual

Removing note for object HEAD^^
Removing note for object HEAD^^^
ok 48 - removing more than one

expecting success of 3301.49 'removing is atomic': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&
	test_must_fail git notes remove HEAD^^ HEAD^^^ HEAD^ &&
	after=$(git rev-parse --verify refs/notes/commits) &&
	test "$before" = "$after"

Removing note for object HEAD^^
Removing note for object HEAD^^^
Object HEAD^ has no note
ok 49 - removing is atomic

expecting success of 3301.50 'removing with --ignore-missing': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&

	# We have only two -- add another and make sure it stays
	git notes add -m "extra" &&
	git notes list HEAD >after-removal-expect &&
	git notes remove --ignore-missing HEAD^^ HEAD^^^ HEAD^ &&
	git notes list | sed -e "s/ .*//" >actual &&
	test_cmp after-removal-expect actual

Removing note for object HEAD^^
Removing note for object HEAD^^^
Object HEAD^ has no note
ok 50 - removing with --ignore-missing

expecting success of 3301.51 'removing with --ignore-missing but bogus ref': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&
	test_must_fail git notes remove --ignore-missing HEAD^^ HEAD^^^ NO-SUCH-COMMIT &&
	after=$(git rev-parse --verify refs/notes/commits) &&
	test "$before" = "$after"

Removing note for object HEAD^^
Removing note for object HEAD^^^
error: Failed to resolve 'NO-SUCH-COMMIT' as a valid ref.
ok 51 - removing with --ignore-missing but bogus ref

expecting success of 3301.52 'remove reads from --stdin': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&

	# We have only two -- add another and make sure it stays
	git notes add -m "extra" &&
	git notes list HEAD >after-removal-expect &&
	git rev-parse HEAD^^ HEAD^^^ >input &&
	git notes remove --stdin <input &&
	git notes list | sed -e "s/ .*//" >actual &&
	test_cmp after-removal-expect actual

Removing note for object d07d62e5208f22eb5695e7eb47667dc8b9860290
Removing note for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
ok 52 - remove reads from --stdin

expecting success of 3301.53 'remove --stdin is also atomic': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&
	git rev-parse HEAD^^ HEAD^^^ HEAD^ >input &&
	test_must_fail git notes remove --stdin <input &&
	after=$(git rev-parse --verify refs/notes/commits) &&
	test "$before" = "$after"

Removing note for object d07d62e5208f22eb5695e7eb47667dc8b9860290
Removing note for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
Object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11 has no note
ok 53 - remove --stdin is also atomic

expecting success of 3301.54 'removing with --stdin --ignore-missing': 
	before=$(git rev-parse --verify refs/notes/commits) &&
	test_when_finished "git update-ref refs/notes/commits $before" &&

	# We have only two -- add another and make sure it stays
	git notes add -m "extra" &&
	git notes list HEAD >after-removal-expect &&
	git rev-parse HEAD^^ HEAD^^^ HEAD^ >input &&
	git notes remove --ignore-missing --stdin <input &&
	git notes list | sed -e "s/ .*//" >actual &&
	test_cmp after-removal-expect actual

Removing note for object d07d62e5208f22eb5695e7eb47667dc8b9860290
Removing note for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
Object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11 has no note
ok 54 - removing with --stdin --ignore-missing

expecting success of 3301.55 'list notes with "git notes list"': 
	commit_2=$(git rev-parse 2nd) &&
	commit_3=$(git rev-parse 3rd) &&
	note_2=$(git rev-parse refs/notes/commits:$commit_2) &&
	note_3=$(git rev-parse refs/notes/commits:$commit_3) &&
	sort -t" " -k2 >expect <<-EOF &&
		$note_2 $commit_2
		$note_3 $commit_3
	EOF
	git notes list >actual &&
	test_cmp expect actual

ok 55 - list notes with "git notes list"

expecting success of 3301.56 'list notes with "git notes"': 
	git notes >actual &&
	test_cmp expect actual

ok 56 - list notes with "git notes"

expecting success of 3301.57 '"git notes" without subcommand does not take arguments': 
	test_expect_code 129 git notes HEAD^^ 2>err &&
	grep "^error: unknown subcommand" err

error: unknown subcommand: `HEAD^^'
ok 57 - "git notes" without subcommand does not take arguments

expecting success of 3301.58 'list specific note with "git notes list <object>"': 
	git rev-parse refs/notes/commits:$commit_3 >expect &&
	git notes list HEAD^^ >actual &&
	test_cmp expect actual

ok 58 - list specific note with "git notes list <object>"

expecting success of 3301.59 'listing non-existing notes fails': 
	test_must_fail git notes list HEAD >actual &&
	test_must_be_empty actual

error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
ok 59 - listing non-existing notes fails

expecting success of 3301.60 'append to existing note with "git notes append"': 
	cat >expect <<-EOF &&
		Initial set of notes

		More notes appended with git notes append
	EOF
	git notes add -m "Initial set of notes" &&
	git notes append -m "More notes appended with git notes append" &&
	git notes show >actual &&
	test_cmp expect actual

ok 60 - append to existing note with "git notes append"

expecting success of 3301.61 '"git notes list" does not expand to "git notes list HEAD"': 
	commit_5=$(git rev-parse 5th) &&
	note_5=$(git rev-parse refs/notes/commits:$commit_5) &&
	sort -t" " -k2 >expect_list <<-EOF &&
		$note_2 $commit_2
		$note_3 $commit_3
		$note_5 $commit_5
	EOF
	git notes list >actual &&
	test_cmp expect_list actual

ok 61 - "git notes list" does not expand to "git notes list HEAD"

expecting success of 3301.62 'appending empty string does not change existing note': 
	git notes append -m "" &&
	git notes show >actual &&
	test_cmp expect actual

ok 62 - appending empty string does not change existing note

expecting success of 3301.63 'git notes append == add when there is no existing note': 
	git notes remove HEAD &&
	test_must_fail git notes list HEAD &&
	git notes append -m "Initial set of notes${LF}${LF}More notes appended with git notes append" &&
	git notes show >actual &&
	test_cmp expect actual

Removing note for object HEAD
error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
ok 63 - git notes append == add when there is no existing note

expecting success of 3301.64 'appending empty string to non-existing note does not create note': 
	git notes remove HEAD &&
	test_must_fail git notes list HEAD &&
	git notes append -m "" &&
	test_must_fail git notes list HEAD

Removing note for object HEAD
error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
Removing note for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
error: no note found for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361.
ok 64 - appending empty string to non-existing note does not create note

expecting success of 3301.65 'create other note on a different notes ref (setup)': 
	test_commit 6th &&
	GIT_NOTES_REF="refs/notes/other" git notes add -m "other note" &&
	commit=$(git rev-parse HEAD) &&
	cat >expect-not-other <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:18:13 2005 -0700

		${indent}6th
	EOF
	cp expect-not-other expect-other &&
	cat >>expect-other <<-EOF

		Notes (other):
		${indent}other note
	EOF

[master 2c12533] 6th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6th.t
ok 65 - create other note on a different notes ref (setup)

expecting success of 3301.66 'Do not show note on other ref by default': 
	git log -1 >actual &&
	test_cmp expect-not-other actual

ok 66 - Do not show note on other ref by default

expecting success of 3301.67 'Do show note when ref is given in GIT_NOTES_REF': 
	GIT_NOTES_REF="refs/notes/other" git log -1 >actual &&
	test_cmp expect-other actual

ok 67 - Do show note when ref is given in GIT_NOTES_REF

expecting success of 3301.68 'Do show note when ref is given in core.notesRef config': 
	test_config core.notesRef "refs/notes/other" &&
	git log -1 >actual &&
	test_cmp expect-other actual

ok 68 - Do show note when ref is given in core.notesRef config

expecting success of 3301.69 'Do not show note when core.notesRef is overridden': 
	test_config core.notesRef "refs/notes/other" &&
	GIT_NOTES_REF="refs/notes/wrong" git log -1 >actual &&
	test_cmp expect-not-other actual

ok 69 - Do not show note when core.notesRef is overridden

expecting success of 3301.70 'Show all notes when notes.displayRef=refs/notes/*': 
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect-both <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:18:13 2005 -0700

		${indent}6th

		Notes:
		${indent}order test

		Notes (other):
		${indent}other note

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:17:13 2005 -0700

		${indent}5th

		Notes:
		${indent}replacement for deleted note
	EOF
	GIT_NOTES_REF=refs/notes/commits git notes add \
		-m"replacement for deleted note" HEAD^ &&
	GIT_NOTES_REF=refs/notes/commits git notes add -m"order test" &&
	test_unconfig core.notesRef &&
	test_config notes.displayRef "refs/notes/*" &&
	git log -2 >actual &&
	test_cmp expect-both actual

ok 70 - Show all notes when notes.displayRef=refs/notes/*

expecting success of 3301.71 'core.notesRef is implicitly in notes.displayRef': 
	test_config core.notesRef refs/notes/commits &&
	test_config notes.displayRef refs/notes/other &&
	git log -2 >actual &&
	test_cmp expect-both actual

ok 71 - core.notesRef is implicitly in notes.displayRef

expecting success of 3301.72 'notes.displayRef can be given more than once': 
	test_unconfig core.notesRef &&
	test_config notes.displayRef refs/notes/commits &&
	git config --add notes.displayRef refs/notes/other &&
	git log -2 >actual &&
	test_cmp expect-both actual

ok 72 - notes.displayRef can be given more than once

expecting success of 3301.73 'notes.displayRef respects order': 
	commit=$(git rev-parse HEAD) &&
	cat >expect-both-reversed <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:18:13 2005 -0700

		${indent}6th

		Notes (other):
		${indent}other note

		Notes:
		${indent}order test
	EOF
	test_config core.notesRef refs/notes/other &&
	test_config notes.displayRef refs/notes/commits &&
	git log -1 >actual &&
	test_cmp expect-both-reversed actual

ok 73 - notes.displayRef respects order

expecting success of 3301.74 'notes.displayRef with no value handled gracefully': 
	test_must_fail git -c notes.displayRef log -0 --notes &&
	test_must_fail git -c notes.displayRef diff-tree --notes HEAD

error: missing value for 'notes.displayref'
fatal: unable to parse 'notes.displayref' from command-line config
error: missing value for 'notes.displayref'
fatal: unable to parse 'notes.displayref' from command-line config
ok 74 - notes.displayRef with no value handled gracefully

expecting success of 3301.75 'GIT_NOTES_DISPLAY_REF works': 
	GIT_NOTES_DISPLAY_REF=refs/notes/commits:refs/notes/other \
		git log -2 >actual &&
	test_cmp expect-both actual

ok 75 - GIT_NOTES_DISPLAY_REF works

expecting success of 3301.76 'GIT_NOTES_DISPLAY_REF overrides config': 
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect-none <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:18:13 2005 -0700

		${indent}6th

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:17:13 2005 -0700

		${indent}5th
	EOF
	test_config notes.displayRef "refs/notes/*" &&
	GIT_NOTES_REF= GIT_NOTES_DISPLAY_REF= git log -2 >actual &&
	test_cmp expect-none actual

ok 76 - GIT_NOTES_DISPLAY_REF overrides config

expecting success of 3301.77 '--show-notes=* adds to GIT_NOTES_DISPLAY_REF': 
	GIT_NOTES_REF= GIT_NOTES_DISPLAY_REF= git log --show-notes=* -2 >actual &&
	test_cmp expect-both actual

ok 77 - --show-notes=* adds to GIT_NOTES_DISPLAY_REF

expecting success of 3301.78 '--no-standard-notes': 
	commit=$(git rev-parse HEAD) &&
	cat >expect-commits <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:18:13 2005 -0700

		${indent}6th

		Notes:
		${indent}order test
	EOF
	git log --no-standard-notes --show-notes=commits -1 >actual &&
	test_cmp expect-commits actual

ok 78 - --no-standard-notes

expecting success of 3301.79 '--standard-notes': 
	test_config notes.displayRef "refs/notes/*" &&
	git log --no-standard-notes --show-notes=commits \
		--standard-notes -2 >actual &&
	test_cmp expect-both actual

ok 79 - --standard-notes

expecting success of 3301.80 '--show-notes=ref accumulates': 
	git log --show-notes=other --show-notes=commits \
		 --no-standard-notes -1 >actual &&
	test_cmp expect-both-reversed actual

ok 80 - --show-notes=ref accumulates

expecting success of 3301.81 'Allow notes on non-commits (trees, blobs, tags)': 
	test_config core.notesRef refs/notes/other &&
	echo "Note on a tree" >expect &&
	git notes add -m "Note on a tree" HEAD: &&
	git notes show HEAD: >actual &&
	test_cmp expect actual &&
	echo "Note on a blob" >expect &&
	git ls-tree --name-only HEAD >files &&
	filename=$(head -n1 files) &&
	git notes add -m "Note on a blob" HEAD:$filename &&
	git notes show HEAD:$filename >actual &&
	test_cmp expect actual &&
	echo "Note on a tag" >expect &&
	git tag -a -m "This is an annotated tag" foobar HEAD^ &&
	git notes add -m "Note on a tag" foobar &&
	git notes show foobar >actual &&
	test_cmp expect actual

ok 81 - Allow notes on non-commits (trees, blobs, tags)

expecting success of 3301.82 'create note from other note with "git notes add -C"': 
	test_commit 7th &&
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:19:13 2005 -0700

		${indent}7th

		Notes:
		${indent}order test
	EOF
	note=$(git notes list HEAD^) &&
	git notes add -C $note &&
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD^ >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual

[master fb01e0c] 7th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7th.t
ok 82 - create note from other note with "git notes add -C"

expecting success of 3301.83 'create note from non-existing note with "git notes add -C" fails': 
	test_commit 8th &&
	test_must_fail git notes add -C deadbeef &&
	test_must_fail git notes list HEAD

[master 9a4c31c] 8th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8th.t
fatal: failed to resolve 'deadbeef' as a valid ref.
error: no note found for object 9a4c31c7f722b5d517e92c64e932dd751e1413bf.
ok 83 - create note from non-existing note with "git notes add -C" fails

expecting success of 3301.84 'create note from non-blob with "git notes add -C" fails': 
	commit=$(git rev-parse --verify HEAD) &&
	tree=$(git rev-parse --verify HEAD:) &&
	test_must_fail git notes add -C $commit &&
	test_must_fail git notes add -C $tree &&
	test_must_fail git notes list HEAD

fatal: cannot read note data from non-blob object '9a4c31c7f722b5d517e92c64e932dd751e1413bf'.
fatal: cannot read note data from non-blob object '37f6454412e4ed89ae47782f956ed0fb573892f6'.
error: no note found for object 9a4c31c7f722b5d517e92c64e932dd751e1413bf.
ok 84 - create note from non-blob with "git notes add -C" fails

expecting success of 3301.85 'create note from blob with "git notes add -C" reuses blob id': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:20:13 2005 -0700

		${indent}8th

		Notes:
		${indent}This is a blob object
	EOF
	echo "This is a blob object" | git hash-object -w --stdin >blob &&
	git notes add -C $(cat blob) &&
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD >actual &&
	test_cmp blob actual

ok 85 - create note from blob with "git notes add -C" reuses blob id

expecting success of 3301.86 'create note from other note with "git notes add -c"': 
	test_commit 9th &&
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:21:13 2005 -0700

		${indent}9th

		Notes:
		${indent}yet another note
	EOF
	note=$(git notes list HEAD^^) &&
	MSG="yet another note" git notes add -c $note &&
	git log -1 >actual &&
	test_cmp expect actual

[master 2e0db4b] 9th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9th.t
yet another note
ok 86 - create note from other note with "git notes add -c"

expecting success of 3301.87 'create note from non-existing note with "git notes add -c" fails': 
	test_commit 10th &&
	test_must_fail env MSG="yet another note" git notes add -c deadbeef &&
	test_must_fail git notes list HEAD

[master 7c3b87a] 10th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10th.t
fatal: failed to resolve 'deadbeef' as a valid ref.
error: no note found for object 7c3b87ab368f81e11b1ea87b2ab99a71ccd25406.
ok 87 - create note from non-existing note with "git notes add -c" fails

expecting success of 3301.88 'append to note from other note with "git notes append -C"': 
	commit=$(git rev-parse HEAD^) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:21:13 2005 -0700

		${indent}9th

		Notes:
		${indent}yet another note
		${indent}
		${indent}yet another note
	EOF
	note=$(git notes list HEAD^) &&
	git notes append -C $note HEAD^ &&
	git log -1 HEAD^ >actual &&
	test_cmp expect actual

ok 88 - append to note from other note with "git notes append -C"

expecting success of 3301.89 'create note from other note with "git notes append -c"': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:22:13 2005 -0700

		${indent}10th

		Notes:
		${indent}other note
	EOF
	note=$(git notes list HEAD^) &&
	MSG="other note" git notes append -c $note &&
	git log -1 >actual &&
	test_cmp expect actual

other note
ok 89 - create note from other note with "git notes append -c"

expecting success of 3301.90 'append to note from other note with "git notes append -c"': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:22:13 2005 -0700

		${indent}10th

		Notes:
		${indent}other note
		${indent}
		${indent}yet another note
	EOF
	note=$(git notes list HEAD) &&
	MSG="yet another note" git notes append -c $note &&
	git log -1 >actual &&
	test_cmp expect actual

yet another note
ok 90 - append to note from other note with "git notes append -c"

expecting success of 3301.91 'copy note with "git notes copy"': 
	commit=$(git rev-parse 4th) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:16:13 2005 -0700

		${indent}4th

		Notes:
		${indent}This is a blob object
	EOF
	git notes copy 8th 4th &&
	git log 3rd..4th >actual &&
	test_cmp expect actual &&
	git notes list 4th >expect &&
	git notes list 8th >actual &&
	test_cmp expect actual

ok 91 - copy note with "git notes copy"

expecting success of 3301.92 'copy note with "git notes copy" with default': 
	test_commit 11th &&
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:23:13 2005 -0700

		${indent}11th

		Notes:
		${indent}other note
		${indent}
		${indent}yet another note
	EOF
	git notes copy HEAD^ &&
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD^ >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual

[master a446fff] 11th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11th.t
ok 92 - copy note with "git notes copy" with default

expecting success of 3301.93 'prevent overwrite with "git notes copy"': 
	test_must_fail git notes copy HEAD~2 HEAD &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:23:13 2005 -0700

		${indent}11th

		Notes:
		${indent}other note
		${indent}
		${indent}yet another note
	EOF
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD^ >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual

error: Cannot copy notes. Found existing notes for object a446fff8777efdc6eb8f4b7c8a5ff699484df0d5. Use '-f' to overwrite existing notes
ok 93 - prevent overwrite with "git notes copy"

expecting success of 3301.94 'allow overwrite with "git notes copy -f"': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:23:13 2005 -0700

		${indent}11th

		Notes:
		${indent}This is a blob object
	EOF
	git notes copy -f HEAD~3 HEAD &&
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD~3 >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual

Overwriting existing notes for object a446fff8777efdc6eb8f4b7c8a5ff699484df0d5
ok 94 - allow overwrite with "git notes copy -f"

expecting success of 3301.95 'allow overwrite with "git notes copy -f" with default': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:23:13 2005 -0700

		${indent}11th

		Notes:
		${indent}yet another note
		${indent}
		${indent}yet another note
	EOF
	git notes copy -f HEAD~2 &&
	git log -1 >actual &&
	test_cmp expect actual &&
	git notes list HEAD~2 >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual

Overwriting existing notes for object a446fff8777efdc6eb8f4b7c8a5ff699484df0d5
ok 95 - allow overwrite with "git notes copy -f" with default

expecting success of 3301.96 'cannot copy note from object without notes': 
	test_commit 12th &&
	test_commit 13th &&
	test_must_fail git notes copy HEAD^ HEAD

[master 65e263d] 12th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12th.t
[master e871aa6] 13th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13th.t
error: missing notes on source object 65e263ded02ae4e8839bc151095113737579dc12. Cannot copy.
ok 96 - cannot copy note from object without notes

expecting success of 3301.97 'git notes copy --stdin': 
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:25:13 2005 -0700

		${indent}13th

		Notes:
		${indent}yet another note
		${indent}
		${indent}yet another note

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:24:13 2005 -0700

		${indent}12th

		Notes:
		${indent}other note
		${indent}
		${indent}yet another note
	EOF
	from=$(git rev-parse HEAD~3) &&
	to=$(git rev-parse HEAD^) &&
	echo "$from" "$to" >copy &&
	from=$(git rev-parse HEAD~2) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >>copy &&
	git notes copy --stdin <copy &&
	git log -2 >actual &&
	test_cmp expect actual &&
	git notes list HEAD~2 >expect &&
	git notes list HEAD >actual &&
	test_cmp expect actual &&
	git notes list HEAD~3 >expect &&
	git notes list HEAD^ >actual &&
	test_cmp expect actual

ok 97 - git notes copy --stdin

expecting success of 3301.98 'git notes copy --for-rewrite (unconfigured)': 
	test_commit 14th &&
	test_commit 15th &&
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:26:13 2005 -0700

		${indent}14th
	EOF
	from=$(git rev-parse HEAD~3) &&
	to=$(git rev-parse HEAD^) &&
	echo "$from" "$to" >copy &&
	from=$(git rev-parse HEAD~2) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >>copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -2 >actual &&
	test_cmp expect actual

[master 07c85d7] 14th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14th.t
[master 4acf42e] 15th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15th.t
ok 98 - git notes copy --for-rewrite (unconfigured)

expecting success of 3301.99 'git notes copy --for-rewrite (enabled)': 
	commit=$(git rev-parse HEAD) &&
	parent=$(git rev-parse HEAD^) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}yet another note
		${indent}
		${indent}yet another note

		commit $parent
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:26:13 2005 -0700

		${indent}14th

		Notes:
		${indent}other note
		${indent}
		${indent}yet another note
	EOF
	test_config notes.rewriteMode overwrite &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD~3) &&
	to=$(git rev-parse HEAD^) &&
	echo "$from" "$to" >copy &&
	from=$(git rev-parse HEAD~2) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >>copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -2 >actual &&
	test_cmp expect actual

ok 99 - git notes copy --for-rewrite (enabled)

expecting success of 3301.100 'git notes copy --for-rewrite (disabled)': 
	test_config notes.rewrite.bar false &&
	from=$(git rev-parse HEAD~3) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	git notes copy --for-rewrite=bar <copy &&
	git log -2 >actual &&
	test_cmp expect actual

ok 100 - git notes copy --for-rewrite (disabled)

expecting success of 3301.101 'git notes copy --for-rewrite (overwrite)': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}a fresh note
	EOF
	git notes add -f -m"a fresh note" HEAD^ &&
	test_config notes.rewriteMode overwrite &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
ok 101 - git notes copy --for-rewrite (overwrite)

expecting success of 3301.102 'git notes copy --for-rewrite (ignore)': 
	test_config notes.rewriteMode ignore &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

ok 102 - git notes copy --for-rewrite (ignore)

expecting success of 3301.103 'git notes copy --for-rewrite (append)': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}a fresh note
		${indent}
		${indent}another fresh note
	EOF
	git notes add -f -m"another fresh note" HEAD^ &&
	test_config notes.rewriteMode concatenate &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
ok 103 - git notes copy --for-rewrite (append)

expecting success of 3301.104 'git notes copy --for-rewrite (append two to one)': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}a fresh note
		${indent}
		${indent}another fresh note
		${indent}
		${indent}append 1
		${indent}
		${indent}append 2
	EOF
	git notes add -f -m"append 1" HEAD^ &&
	git notes add -f -m"append 2" HEAD^^ &&
	test_config notes.rewriteMode concatenate &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	from=$(git rev-parse HEAD^^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >>copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
Overwriting existing notes for object e871aa61182b1d95d0a6fb75445d891722863b6b
ok 104 - git notes copy --for-rewrite (append two to one)

expecting success of 3301.105 'git notes copy --for-rewrite (append empty)': 
	git notes remove HEAD^ &&
	test_config notes.rewriteMode concatenate &&
	test_config notes.rewriteRef "refs/notes/*" &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

Removing note for object HEAD^
ok 105 - git notes copy --for-rewrite (append empty)

expecting success of 3301.106 'GIT_NOTES_REWRITE_MODE works': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}replacement note 1
	EOF
	test_config notes.rewriteMode concatenate &&
	test_config notes.rewriteRef "refs/notes/*" &&
	git notes add -f -m"replacement note 1" HEAD^ &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	GIT_NOTES_REWRITE_MODE=overwrite git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

ok 106 - GIT_NOTES_REWRITE_MODE works

expecting success of 3301.107 'GIT_NOTES_REWRITE_REF works': 
	commit=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
		commit $commit
		Author: A U Thor <author@example.com>
		Date:   Thu Apr 7 15:27:13 2005 -0700

		${indent}15th

		Notes:
		${indent}replacement note 2
	EOF
	git notes add -f -m"replacement note 2" HEAD^ &&
	test_config notes.rewriteMode overwrite &&
	test_unconfig notes.rewriteRef &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	GIT_NOTES_REWRITE_REF=refs/notes/commits:refs/notes/other \
		git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	test_cmp expect actual

Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
ok 107 - GIT_NOTES_REWRITE_REF works

expecting success of 3301.108 'GIT_NOTES_REWRITE_REF overrides config': 
	git notes add -f -m"replacement note 3" HEAD^ &&
	test_config notes.rewriteMode overwrite &&
	test_config notes.rewriteRef refs/notes/other &&
	from=$(git rev-parse HEAD^) &&
	to=$(git rev-parse HEAD) &&
	echo "$from" "$to" >copy &&
	GIT_NOTES_REWRITE_REF=refs/notes/commits \
		git notes copy --for-rewrite=foo <copy &&
	git log -1 >actual &&
	grep "replacement note 3" actual

Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
    replacement note 3
ok 108 - GIT_NOTES_REWRITE_REF overrides config

expecting success of 3301.109 'git notes copy diagnoses too many or too few arguments': 
	test_must_fail git notes copy 2>error &&
	test_i18ngrep "too few arguments" error &&
	test_must_fail git notes copy one two three 2>error &&
	test_i18ngrep "too many arguments" error

error: too few arguments
error: too many arguments
ok 109 - git notes copy diagnoses too many or too few arguments

expecting success of 3301.110 'git notes get-ref expands refs/heads/main to refs/notes/refs/heads/main': 
	test_unconfig core.notesRef &&
	sane_unset GIT_NOTES_REF &&
	echo refs/notes/refs/heads/main >expect &&
	git notes --ref=refs/heads/main get-ref >actual &&
	test_cmp expect actual

ok 110 - git notes get-ref expands refs/heads/main to refs/notes/refs/heads/main

expecting success of 3301.111 'git notes get-ref (no overrides)': 
	test_unconfig core.notesRef &&
	sane_unset GIT_NOTES_REF &&
	echo refs/notes/commits >expect &&
	git notes get-ref >actual &&
	test_cmp expect actual

ok 111 - git notes get-ref (no overrides)

expecting success of 3301.112 'git notes get-ref (core.notesRef)': 
	test_config core.notesRef refs/notes/foo &&
	echo refs/notes/foo >expect &&
	git notes get-ref >actual &&
	test_cmp expect actual

ok 112 - git notes get-ref (core.notesRef)

expecting success of 3301.113 'git notes get-ref (GIT_NOTES_REF)': 
	echo refs/notes/bar >expect &&
	GIT_NOTES_REF=refs/notes/bar git notes get-ref >actual &&
	test_cmp expect actual

ok 113 - git notes get-ref (GIT_NOTES_REF)

expecting success of 3301.114 'git notes get-ref (--ref)': 
	echo refs/notes/baz >expect &&
	GIT_NOTES_REF=refs/notes/bar git notes --ref=baz get-ref >actual &&
	test_cmp expect actual

ok 114 - git notes get-ref (--ref)

expecting success of 3301.115 'setup testing of empty notes': 
	test_unconfig core.notesRef &&
	test_commit 16th &&
	empty_blob=$(git hash-object -w /dev/null) &&
	echo "$empty_blob" >expect_empty

[master 21d0abc] 16th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16th.t
ok 115 - setup testing of empty notes

expecting success of 3301.116 ''git notes add' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add &&
		test_must_fail git notes list HEAD
	
Object HEAD has no note

Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 116 - 'git notes add' removes empty note

expecting success of 3301.117 ''git notes add --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note

ok 117 - 'git notes add --allow-empty' stores empty note

expecting success of 3301.118 ''git notes add -F /dev/null' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -F /dev/null &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 118 - 'git notes add -F /dev/null' removes empty note

expecting success of 3301.119 ''git notes add -F /dev/null --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -F /dev/null --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 119 - 'git notes add -F /dev/null --allow-empty' stores empty note

expecting success of 3301.120 ''git notes add -m ""' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -m "" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 120 - 'git notes add -m ""' removes empty note

expecting success of 3301.121 ''git notes add -m "" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -m "" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 121 - 'git notes add -m "" --allow-empty' stores empty note

expecting success of 3301.122 ''git notes add -c "$empty_blob"' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -c "$empty_blob" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD

Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 122 - 'git notes add -c "$empty_blob"' removes empty note

expecting success of 3301.123 ''git notes add -c "$empty_blob" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -c "$empty_blob" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note

ok 123 - 'git notes add -c "$empty_blob" --allow-empty' stores empty note

expecting success of 3301.124 ''git notes add -C "$empty_blob"' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -C "$empty_blob" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 124 - 'git notes add -C "$empty_blob"' removes empty note

expecting success of 3301.125 ''git notes add -C "$empty_blob" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes add -C "$empty_blob" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 125 - 'git notes add -C "$empty_blob" --allow-empty' stores empty note

expecting success of 3301.126 ''git notes append' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD

Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 126 - 'git notes append' removes empty note

expecting success of 3301.127 ''git notes append --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note

ok 127 - 'git notes append --allow-empty' stores empty note

expecting success of 3301.128 ''git notes append -F /dev/null' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -F /dev/null &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 128 - 'git notes append -F /dev/null' removes empty note

expecting success of 3301.129 ''git notes append -F /dev/null --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -F /dev/null --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 129 - 'git notes append -F /dev/null --allow-empty' stores empty note

expecting success of 3301.130 ''git notes append -m ""' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -m "" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 130 - 'git notes append -m ""' removes empty note

expecting success of 3301.131 ''git notes append -m "" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -m "" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 131 - 'git notes append -m "" --allow-empty' stores empty note

expecting success of 3301.132 ''git notes append -c "$empty_blob"' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -c "$empty_blob" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD

Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 132 - 'git notes append -c "$empty_blob"' removes empty note

expecting success of 3301.133 ''git notes append -c "$empty_blob" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -c "$empty_blob" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note

ok 133 - 'git notes append -c "$empty_blob" --allow-empty' stores empty note

expecting success of 3301.134 ''git notes append -C "$empty_blob"' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -C "$empty_blob" &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD
Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 134 - 'git notes append -C "$empty_blob"' removes empty note

expecting success of 3301.135 ''git notes append -C "$empty_blob" --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes append -C "$empty_blob" --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note
ok 135 - 'git notes append -C "$empty_blob" --allow-empty' stores empty note

expecting success of 3301.136 ''git notes edit' removes empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes edit &&
		test_must_fail git notes list HEAD
	
Removing note for object HEAD

Removing note for object 21d0abcd10f591529d5148ae8bc7703fc1f73398
error: no note found for object 21d0abcd10f591529d5148ae8bc7703fc1f73398.
ok 136 - 'git notes edit' removes empty note

expecting success of 3301.137 ''git notes edit --allow-empty' stores empty note': 
		test_might_fail git notes remove HEAD &&
		MSG= git notes edit --allow-empty &&
		git notes list HEAD >actual &&
		test_cmp expect_empty actual
	
Object HEAD has no note

ok 137 - 'git notes edit --allow-empty' stores empty note

expecting success of 3301.138 'empty notes are displayed by git log': 
	test_commit 17th &&
	git log -1 >expect &&
	cat >>expect <<-EOF &&

		Notes:
	EOF
	git notes add -C "$empty_blob" --allow-empty &&
	git log -1 >actual &&
	test_cmp expect actual

[master 27a79f3] 17th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 17th.t
ok 138 - empty notes are displayed by git log

# passed all 138 test(s)
1..138
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3306-notes-prune.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3306-notes-prune/.git/
expecting success of 3306.1 'setup: create a few commits with notes': 

	: > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m 1st &&
	git notes add -m "Note #1" &&
	first=$(git rev-parse HEAD) &&
	: > file2 &&
	git add file2 &&
	test_tick &&
	git commit -m 2nd &&
	git notes add -m "Note #2" &&
	second=$(git rev-parse HEAD) &&
	: > file3 &&
	git add file3 &&
	test_tick &&
	git commit -m 3rd &&
	third=$(git rev-parse HEAD) &&
	COMMIT_FILE=$(echo $third | sed "s!^..!.git/objects/&/!") &&
	test -f $COMMIT_FILE &&
	test-tool chmtime =+0 $COMMIT_FILE &&
	git notes add -m "Note #3"

[master (root-commit) ab5f302] 1st
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
[master 08341ad] 2nd
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
[master 5ee1c35] 3rd
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file3
ok 1 - setup: create a few commits with notes

expecting success of 3306.2 'verify commits and notes': 

	git log > actual &&
	test_cmp expect actual

ok 2 - verify commits and notes

expecting success of 3306.3 'remove some commits': 

	git reset --hard HEAD~1 &&
	git reflog expire --expire=now HEAD &&
	git gc --prune=now

HEAD is now at 08341ad 2nd
ok 3 - remove some commits

expecting success of 3306.4 'verify that commits are gone': 

	test_must_fail git cat-file -p $third &&
	git cat-file -p $second &&
	git cat-file -p $first

fatal: Not a valid object name 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29
tree aefde3a01f6e10d72fd4899ce14c8b2654d3eb45
parent ab5f302035f2e7aaf04265f08b42034c23256e1f
author A U Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700

2nd
tree ad24149d789e59d4b5f9ce41cda90110ca0f98b7
author A U Thor <author@example.com> 1112911993 -0700
committer C O Mitter <committer@example.com> 1112911993 -0700

1st
ok 4 - verify that commits are gone

expecting success of 3306.5 'verify that notes are still present': 

	git notes show $third &&
	git notes show $second &&
	git notes show $first

Note #3
Note #2
Note #1
ok 5 - verify that notes are still present

expecting success of 3306.6 'prune -n does not remove notes': 

	git notes list > expect &&
	git notes prune -n &&
	git notes list > actual &&
	test_cmp expect actual

5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29
ok 6 - prune -n does not remove notes

expecting success of 3306.7 'prune -n lists prunable notes': 

	echo $third >expect &&
	git notes prune -n > actual &&
	test_cmp expect actual

ok 7 - prune -n lists prunable notes

expecting success of 3306.8 'prune notes': 

	git notes prune

ok 8 - prune notes

expecting success of 3306.9 'verify that notes are gone': 

	test_must_fail git notes show $third &&
	git notes show $second &&
	git notes show $first

error: no note found for object 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29.
Note #2
Note #1
ok 9 - verify that notes are gone

expecting success of 3306.10 'remove some commits': 

	git reset --hard HEAD~1 &&
	git reflog expire --expire=now HEAD &&
	git gc --prune=now

HEAD is now at ab5f302 1st
ok 10 - remove some commits

expecting success of 3306.11 'prune -v notes': 

	echo $second >expect &&
	git notes prune -v > actual &&
	test_cmp expect actual

ok 11 - prune -v notes

expecting success of 3306.12 'verify that notes are gone': 

	test_must_fail git notes show $third &&
	test_must_fail git notes show $second &&
	git notes show $first

error: no note found for object 5ee1c35e83ea47cd3cc4f8cbee0568915fbbbd29.
error: no note found for object 08341ad9e94faa089d60fd3f523affb25c6da189.
Note #1
ok 12 - verify that notes are gone

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3307-notes-man.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3307-notes-man/.git/
expecting success of 3307.1 'setup': 
	test_commit A &&
	test_commit B &&
	test_commit C

[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[master 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
ok 1 - setup

expecting success of 3307.2 'example 1: notes to add an Acked-by line': 
	cat <<-\EOF >expect &&
	    B

	Notes:
	    Acked-by: A C Ker <acker@example.com>
	EOF
	git notes add -m "Acked-by: A C Ker <acker@example.com>" B &&
	git show -s B^{commit} >log &&
	tail -n 4 log >actual &&
	test_cmp expect actual

ok 2 - example 1: notes to add an Acked-by line

expecting success of 3307.3 'example 2: binary notes': 
	cp "$TEST_DIRECTORY"/test-binary-1.png . &&
	git checkout B &&
	blob=$(git hash-object -w test-binary-1.png) &&
	git notes --ref=logo add -C "$blob" &&
	git notes --ref=logo copy B C &&
	git notes --ref=logo show C >actual &&
	test_cmp test-binary-1.png actual

Note: switching to 'B'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d9df450 B
ok 3 - example 2: binary notes

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3308-notes-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3308-notes-merge/.git/
expecting success of 3308.1 'setup': 
	test_commit 1st &&
	test_commit 2nd &&
	test_commit 3rd &&
	test_commit 4th &&
	test_commit 5th &&
	# Create notes on 4 first commits
	git config core.notesRef refs/notes/x &&
	git notes add -m "Notes on 1st commit" 1st &&
	git notes add -m "Notes on 2nd commit" 2nd &&
	git notes add -m "Notes on 3rd commit" 3rd &&
	git notes add -m "Notes on 4th commit" 4th &&
	# Copy notes to remote-notes
	git fetch . refs/notes/*:refs/remote-notes/origin/* &&

	test_oid_cache <<-EOF
	hash4a sha1:5e93d24084d32e1cb61f7070505b9d2530cca987
	hash3a sha1:8366731eeee53787d2bdf8fc1eff7d94757e8da0
	hash2a sha1:eede89064cd42441590d6afec6c37b321ada3389
	hash1a sha1:daa55ffad6cb99bf64226532147ffcaf5ce8bdd1
	hash5b sha1:0f2efbd00262f2fd41dfae33df8765618eeacd99
	hash4b sha1:dec2502dac3ea161543f71930044deff93fa945c
	hash3b sha1:4069cdb399fd45463ec6eef8e051a16a03592d91
	hash2c sha1:d000d30e6ddcfce3a8122c403226a2ce2fd04d9d
	hash1c sha1:43add6bd0c8c0bc871ac7991e0f5573cfba27804
	hash4d sha1:1f257a3a90328557c452f0817d6cc50c89d315d4
	hash3d sha1:05a4927951bcef347f51486575b878b2b60137f2

	hash4a sha256:eef876be1d32ac2e2e42240e0429325cec116e55e88cb2969899fac695aa762f
	hash3a sha256:cf7cd1bc091d7ba4166a86df864110e42087cd893a5ae96bc50d637e0290939d
	hash2a sha256:21ddde7ebce2c285213898cb04deca0fd3209610cf7aaf8222e4e2f45262fae2
	hash1a sha256:f9fe0eda16c6027732ed9d4295689a03abd16f893be69b3dcbf4037ddb191921
	hash5b sha256:20046f2244577797a9e3d3f790ea9eca4d8a6bafb2a5570bcb0e03aa02ce100b
	hash4b sha256:f90563d134c61a95bb88afbd45d48ccc9e919c62aa6fbfcd483302b3e4d8dbcb
	hash3b sha256:988f2aca9f2d87e93e6a73197c2bb99560cc44a2f92d18653968f956f01221e0
	hash2c sha256:84153b777b4d42827a756c6578dcdb59d8ae5d1360b874fb37c430150c825c26
	hash1c sha256:9beb2bc4eef72e4c4087be168a20573e34d993d9ab1883055f23e322afa06567
	hash4d sha256:32de39dc06e679a7abb2d4a55ede7709b3124340a4a90aa305971b1c72ac319d
	hash3d sha256:fa73b20e41cbb7541c4c81d1535016131dbfbeb05bf6a71f6115e9cad31c7af5
	EOF

[master (root-commit) 04ed9a0] 1st
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1st.t
[master 7a4ca6e] 2nd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2nd.t
[master d07d62e] 3rd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3rd.t
[master 0f7aa3e] 4th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4th.t
[master 7f9ad88] 5th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5th.t
From .
 * [new ref]         refs/notes/x -> refs/remote-notes/origin/x
ok 1 - setup

expecting success of 3308.2 'verify initial notes (x)': 
	verify_notes x

ok 2 - verify initial notes (x)

expecting success of 3308.3 'fail to merge empty notes ref into empty notes ref (z => y)': 
	test_must_fail git -c "core.notesRef=refs/notes/y" notes merge z

fatal: Cannot merge empty notes ref (refs/notes/z) into empty notes ref (refs/notes/y)
ok 3 - fail to merge empty notes ref into empty notes ref (z => y)

expecting success of 3308.4 'fail to merge into various non-notes refs': 
	test_must_fail git -c "core.notesRef=refs/notes" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/notes/" notes merge x &&
	git update-ref refs/notes/dir/foo HEAD &&
	test_must_fail git -c "core.notesRef=refs/notes/dir" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/notes/dir/" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/heads/main" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/notes/y:" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/notes/y:foo" notes merge x &&
	test_must_fail git -c "core.notesRef=refs/notes/foo^{bar" notes merge x

fatal: refusing to merge notes in refs/notes (outside of refs/notes/)
fatal: Failed to resolve local notes ref 'refs/notes/'
fatal: update_ref failed for ref 'refs/notes/dir': cannot lock ref 'refs/notes/dir': 'refs/notes/dir/foo' exists; cannot create 'refs/notes/dir'
fatal: Failed to resolve local notes ref 'refs/notes/dir/'
fatal: refusing to merge notes in refs/heads/main (outside of refs/notes/)
fatal: Failed to resolve local notes ref 'refs/notes/y:'
fatal: Failed to resolve local notes ref 'refs/notes/y:foo'
fatal: Failed to resolve local notes ref 'refs/notes/foo^{bar'
ok 4 - fail to merge into various non-notes refs

expecting success of 3308.5 'merge non-notes ref into empty notes ref (remote-notes/origin/x => v)': 
	git config core.notesRef refs/notes/v &&
	git notes merge refs/remote-notes/origin/x &&
	verify_notes v &&
	# refs/remote-notes/origin/x and v should point to the same notes commit
	test "$(git rev-parse refs/remote-notes/origin/x)" = "$(git rev-parse refs/notes/v)"

ok 5 - merge non-notes ref into empty notes ref (remote-notes/origin/x => v)

expecting success of 3308.6 'merge notes into empty notes ref (x => y)': 
	git config core.notesRef refs/notes/y &&
	git notes merge x &&
	verify_notes y &&
	# x and y should point to the same notes commit
	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"

ok 6 - merge notes into empty notes ref (x => y)

expecting success of 3308.7 'merge empty notes ref (z => y)': 
	git notes merge z &&
	# y should not change (still == x)
	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"

ok 7 - merge empty notes ref (z => y)

expecting success of 3308.8 'change notes on other notes ref (y)': 
	# Not touching notes to 1st commit
	git notes remove 2nd &&
	git notes append -m "More notes on 3rd commit" 3rd &&
	git notes add -f -m "New notes on 4th commit" 4th &&
	git notes add -m "Notes on 5th commit" 5th

Removing note for object 2nd
Overwriting existing notes for object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
ok 8 - change notes on other notes ref (y)

expecting success of 3308.9 'merge previous notes commit (y^ => y) => No-op': 
	pre_state="$(git rev-parse refs/notes/y)" &&
	git notes merge y^ &&
	# y should not move
	test "$pre_state" = "$(git rev-parse refs/notes/y)"

Already up to date.
ok 9 - merge previous notes commit (y^ => y) => No-op

expecting success of 3308.10 'verify changed notes on other notes ref (y)': 
	verify_notes y

ok 10 - verify changed notes on other notes ref (y)

expecting success of 3308.11 'verify unchanged notes on original notes ref (x)': 
	verify_notes x

ok 11 - verify unchanged notes on original notes ref (x)

expecting success of 3308.12 'merge original notes (x) into changed notes (y) => No-op': 
	git notes merge -vvv x &&
	verify_notes y &&
	verify_notes x

One merge base found (bf2877f)
Merging remote commit bf2877f into local commit 21b8c5e with merge-base bf2877f
Already up to date.
ok 12 - merge original notes (x) into changed notes (y) => No-op

expecting success of 3308.13 'merge changed (y) into original (x) => Fast-forward': 
	git config core.notesRef refs/notes/x &&
	git notes merge y &&
	verify_notes x &&
	verify_notes y &&
	# x and y should point to same the notes commit
	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"

Fast-forward
ok 13 - merge changed (y) into original (x) => Fast-forward

expecting success of 3308.14 'merge empty notes ref (z => y)': 
	# Prepare empty (but valid) notes ref (z)
	git config core.notesRef refs/notes/z &&
	git notes add -m "foo" &&
	git notes remove &&
	git notes >output_notes_z &&
	test_must_be_empty output_notes_z &&
	# Do the merge (z => y)
	git config core.notesRef refs/notes/y &&
	git notes merge z &&
	verify_notes y &&
	# y should no longer point to the same notes commit as x
	test "$(git rev-parse refs/notes/x)" != "$(git rev-parse refs/notes/y)"

Removing note for object HEAD
ok 14 - merge empty notes ref (z => y)

expecting success of 3308.15 'change notes on other notes ref (y)': 
	# Append to 1st commit notes
	git notes append -m "More notes on 1st commit" 1st &&
	# Add new notes to 2nd commit
	git notes add -m "New notes on 2nd commit" 2nd &&
	verify_notes y

ok 15 - change notes on other notes ref (y)

expecting success of 3308.16 'change notes on notes ref (x)': 
	git config core.notesRef refs/notes/x &&
	git notes remove 3rd &&
	git notes append -m "More notes on 4th commit" 4th &&
	verify_notes x

Removing note for object 3rd
ok 16 - change notes on notes ref (x)

expecting success of 3308.17 'merge y into x => Non-conflicting 3-way merge': 
	git notes merge y &&
	verify_notes x &&
	verify_notes y

ok 17 - merge y into x => Non-conflicting 3-way merge

expecting success of 3308.18 'create notes on new, separate notes ref (w)': 
	git config core.notesRef refs/notes/w &&
	# Add same note as refs/notes/y on 2nd commit
	git notes add -m "New notes on 2nd commit" 2nd &&
	# Add new note on 3rd commit (non-conflicting)
	git notes add -m "New notes on 3rd commit" 3rd &&
	# Verify state of notes on new, separate notes ref (w)
	verify_notes w

ok 18 - create notes on new, separate notes ref (w)

expecting success of 3308.19 'merge w into x => Non-conflicting history-less merge': 
	git config core.notesRef refs/notes/x &&
	git notes merge w &&
	# Verify new state of notes on other notes ref (x)
	verify_notes x &&
	# Also verify that nothing changed on other notes refs (y and w)
	verify_notes y &&
	verify_notes w

ok 19 - merge w into x => Non-conflicting history-less merge

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3309-notes-merge-auto-resolve.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3309-notes-merge-auto-resolve/.git/
expecting success of 3309.1 'setup commits': 
	test_commit 1st &&
	test_commit 2nd &&
	test_commit 3rd &&
	test_commit 4th &&
	test_commit 5th &&
	test_commit 6th &&
	test_commit 7th &&
	test_commit 8th &&
	test_commit 9th &&
	test_commit 10th &&
	test_commit 11th &&
	test_commit 12th &&
	test_commit 13th &&
	test_commit 14th &&
	test_commit 15th &&

	test_oid_cache <<-EOF
	hash15a sha1:457a85d6c814ea208550f15fcc48f804ac8dc023
	hash14a sha1:b0c95b954301d69da2bc3723f4cb1680d355937c
	hash13a sha1:5d30216a129eeffa97d9694ffe8c74317a560315
	hash12a sha1:dd161bc149470fd890dd4ab52a4cbd79bbd18c36
	hash11a sha1:7abbc45126d680336fb24294f013a7cdfa3ed545
	hash10a sha1:b8d03e173f67f6505a76f6e00cf93440200dd9be
	hash09a sha1:20c613c835011c48a5abe29170a2402ca6354910
	hash08a sha1:a3daf8a1e4e5dc3409a303ad8481d57bfea7f5d6
	hash07a sha1:897003322b53bc6ca098e9324ee508362347e734
	hash06a sha1:11d97fdebfa5ceee540a3da07bce6fa0222bc082
	hash15b sha1:68b8630d25516028bed862719855b3d6768d7833
	hash14b sha1:5de7ea7ad4f47e7ff91989fb82234634730f75df
	hash13b sha1:3a631fdb6f41b05b55d8f4baf20728ba8f6fccbc
	hash12b sha1:a66055fa82f7a03fe0c02a6aba3287a85abf7c62
	hash05b sha1:154508c7a0bcad82b6fe4b472bc4c26b3bf0825b
	hash04b sha1:e2bfd06a37dd2031684a59a6e2b033e212239c78
	hash03b sha1:5772f42408c0dd6f097a7ca2d24de0e78d1c46b1
	hash15c sha1:9b4b2c61f0615412da3c10f98ff85b57c04ec765
	hash11c sha1:7e3c53503a3db8dd996cb62e37c66e070b44b54d
	hash08c sha1:851e1638784a884c7dd26c5d41f3340f6387413a
	hash05c sha1:99fc34adfc400b95c67b013115e37e31aa9a6d23
	hash02c sha1:283b48219aee9a4105f6cab337e789065c82c2b9
	hash15d sha1:7c4e546efd0fe939f876beb262ece02797880b54
	hash05d sha1:6c841cc36ea496027290967ca96bd2bef54dbb47
	hash15e sha1:d682107b8bf7a7aea1e537a8d5cb6a12b60135f1
	hash05e sha1:357b6ca14c7afd59b7f8b8aaaa6b8b723771135b
	hash15f sha1:6be90240b5f54594203e25d9f2f64b7567175aee
	hash05f sha1:660311d7f78dc53db12ac373a43fca7465381a7e

	hash15a sha256:45b1558e5c1b75f570010fa48aaa67bb2289fcd431b34ad81cb4c8b95f4f872a
	hash14a sha256:6e7af179ea4dd28afdc83ae6912ba0098cdeff764b26a8b750b157dd81749092
	hash13a sha256:7353089961baf555388e1bac68c67c8ea94b08ccbd97532201cf7f6790703052
	hash12a sha256:5863e4521689ee1879ceab3b38d39e93ab5b51ec70aaf6a96ad388fbdedfa25e
	hash11a sha256:82a0ec0338b4ecf8b44304badf4ad38d7469dc41827f38d7ba6c42e3bae3ee98
	hash10a sha256:e84f2564e92de9792c93b8d197262c735d7ccb1de6025cef8759af8f6c3308eb
	hash09a sha256:4dd07764bcec696f195c0ea71ae89e174876403af1637e4642b8f4453fd23028
	hash08a sha256:02132c4546cd88a1d0aa5854dd55da120927f7904ba16afe36fe03e91a622067
	hash07a sha256:369baf7d00c6720efdc10273493555f943051f84a4706fb24caeb353fa4789db
	hash06a sha256:52d32c10353583b2d96a5849b1f1f43c8018e76f3e8ef1b0d46eb5cff7cdefaf
	hash15b sha256:345e6660b345fa174738a31a7a59423c394bdf414804e200bc510c65d971ae96
	hash14b sha256:7653a6596021c52e405cba979eea15a729993e7102b9a61ba4667e34f0ead4a1
	hash13b sha256:0f202a0b6b9690de2349c173dfd766a37e82744f61c14f1c389306f1d69f470b
	hash12b sha256:eb00f219c026136ea6535b16ff8ec3efa510e6bf50098ca041e1a2a1d4b79840
	hash05b sha256:993b2290cd0c24c27c849d99f1904f3b590f77af0f539932734ad05679ac5a2f
	hash04b sha256:c7fba0d6104917fbf35258f40b9fa4fc697cfa992deecd1570a3b08d0a5587a9
	hash03b sha256:7287a2d78a3766c181b08df38951d784b08b72a44f571ed6d855bd0be22c70f6
	hash15c sha256:62316660a22bf97857dc4a16709ec4d93a224e8c9f37d661ef91751e1f4c4166
	hash11c sha256:51c3763de9b08309370adc5036d58debb331980e73097902957c444602551daa
	hash08c sha256:22cf1fa29599898a7218c51135d66ed85d22aad584f77db3305dedce4c3d4798
	hash05c sha256:2508fd86db980f0508893a1c1571bdf3b2ee113dc25ddb1a3a2fb94bd6cd0d58
	hash02c sha256:63bb527e0b4e1c8e1dd0d54dd778ca7c3718689fd6e37c473044cfbcf1cacfdb
	hash15d sha256:667acb4e2d5f8df15e5aea4506dfd16d25bc7feca70fdb0d965a7222f983bb88
	hash05d sha256:09e6b5a6fe666c4a027674b6611a254b7d2528cd211c6b5288d1b4db6c741dfa
	hash15e sha256:e8cbf52f6fcadc6de3c7761e64a89e9fe38d19a03d3e28ef6ca8596d93fc4f3a
	hash05e sha256:cdb1e19f7ba1539f95af51a57edeb88a7ecc97d3c2f52da8c4c86af308595607
	hash15f sha256:29c14cb92da448a923963b8a43994268b19c2e57913de73f3667421fd2c0eeec
	hash05f sha256:14a6e641b2c0a9f398ebac6b4d34afa5efea4c52d2631382f45f8f662266903b
	EOF

[master (root-commit) 04ed9a0] 1st
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1st.t
[master 7a4ca6e] 2nd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2nd.t
[master d07d62e] 3rd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3rd.t
[master 0f7aa3e] 4th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4th.t
[master 7f9ad88] 5th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5th.t
[master 2c12533] 6th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6th.t
[master fb01e0c] 7th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7th.t
[master 9a4c31c] 8th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8th.t
[master 2e0db4b] 9th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9th.t
[master 7c3b87a] 10th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10th.t
[master a446fff] 11th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11th.t
[master 65e263d] 12th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12th.t
[master e871aa6] 13th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13th.t
[master 07c85d7] 14th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14th.t
[master 4acf42e] 15th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15th.t
ok 1 - setup commits

expecting success of 3309.2 'setup merge base (x)': 
	git config core.notesRef refs/notes/x &&
	git notes add -m "x notes on 6th commit" 6th &&
	git notes add -m "x notes on 7th commit" 7th &&
	git notes add -m "x notes on 8th commit" 8th &&
	git notes add -m "x notes on 9th commit" 9th &&
	git notes add -m "x notes on 10th commit" 10th &&
	git notes add -m "x notes on 11th commit" 11th &&
	git notes add -m "x notes on 12th commit" 12th &&
	git notes add -m "x notes on 13th commit" 13th &&
	git notes add -m "x notes on 14th commit" 14th &&
	git notes add -m "x notes on 15th commit" 15th

ok 2 - setup merge base (x)

expecting success of 3309.3 'verify state of merge base (x)': verify_notes x x
ok 3 - verify state of merge base (x)

expecting success of 3309.4 'setup local branch (y)': 
	git update-ref refs/notes/y refs/notes/x &&
	git config core.notesRef refs/notes/y &&
	git notes add -f -m "y notes on 3rd commit" 3rd &&
	git notes add -f -m "y notes on 4th commit" 4th &&
	git notes add -f -m "y notes on 5th commit" 5th &&
	git notes remove 6th &&
	git notes remove 7th &&
	git notes remove 8th &&
	git notes add -f -m "y notes on 12th commit" 12th &&
	git notes add -f -m "y notes on 13th commit" 13th &&
	git notes add -f -m "y notes on 14th commit" 14th &&
	git notes add -f -m "y notes on 15th commit" 15th

Removing note for object 6th
Removing note for object 7th
Removing note for object 8th
Overwriting existing notes for object 65e263ded02ae4e8839bc151095113737579dc12
Overwriting existing notes for object e871aa61182b1d95d0a6fb75445d891722863b6b
Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
Overwriting existing notes for object 4acf42e847e7fffbbf89ee365c20ac7caf40de89
ok 4 - setup local branch (y)

expecting success of 3309.5 'verify state of local branch (y)': verify_notes y y
ok 5 - verify state of local branch (y)

expecting success of 3309.6 'setup remote branch (z)': 
	git update-ref refs/notes/z refs/notes/x &&
	git config core.notesRef refs/notes/z &&
	git notes add -f -m "z notes on 2nd commit" 2nd &&
	git notes add -f -m "y notes on 4th commit" 4th &&
	git notes add -f -m "z notes on 5th commit" 5th &&
	git notes remove 6th &&
	git notes add -f -m "z notes on 8th commit" 8th &&
	git notes remove 9th &&
	git notes add -f -m "z notes on 11th commit" 11th &&
	git notes remove 12th &&
	git notes add -f -m "y notes on 14th commit" 14th &&
	git notes add -f -m "z notes on 15th commit" 15th

Removing note for object 6th
Overwriting existing notes for object 9a4c31c7f722b5d517e92c64e932dd751e1413bf
Removing note for object 9th
Overwriting existing notes for object a446fff8777efdc6eb8f4b7c8a5ff699484df0d5
Removing note for object 12th
Overwriting existing notes for object 07c85d77059393ed0154b8c96906547a59dfcddd
Overwriting existing notes for object 4acf42e847e7fffbbf89ee365c20ac7caf40de89
ok 6 - setup remote branch (z)

expecting success of 3309.7 'verify state of remote branch (z)': verify_notes z z
ok 7 - verify state of remote branch (z)

expecting success of 3309.8 'merge z into y with invalid strategy => Fail/No changes': 
	git config core.notesRef refs/notes/y &&
	test_must_fail git notes merge --strategy=foo z &&
	# Verify no changes (y)
	verify_notes y y

error: unknown -s/--strategy: foo
usage: git notes merge [<options>] <notes-ref>
   or: git notes merge --commit [<options>]
   or: git notes merge --abort [<options>]

General options
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet

Merge options
    -s, --strategy <strategy>
                          resolve notes conflicts using the given strategy (manual/ours/theirs/union/cat_sort_uniq)

Committing unmerged notes
    --commit              finalize notes merge by committing unmerged notes

Aborting notes merge resolution
    --abort               abort notes merge

ok 8 - merge z into y with invalid strategy => Fail/No changes

expecting success of 3309.9 'merge z into y with invalid configuration option => Fail/No changes': 
	git config core.notesRef refs/notes/y &&
	test_must_fail git -c notes.mergeStrategy="foo" notes merge z &&
	# Verify no changes (y)
	verify_notes y y

error: unknown notes merge strategy foo
fatal: unable to parse 'notes.mergeStrategy' from command-line config
ok 9 - merge z into y with invalid configuration option => Fail/No changes

expecting success of 3309.10 'merge z into y with "ours" strategy => Non-conflicting 3-way merge': 
	git notes merge --strategy=ours z &&
	verify_notes y ours

Using local notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Using local notes for 65e263ded02ae4e8839bc151095113737579dc12
Using local notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Using local notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 10 - merge z into y with "ours" strategy => Non-conflicting 3-way merge

expecting success of 3309.11 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 11 - reset to pre-merge state (y)

expecting success of 3309.12 'merge z into y with "ours" configuration option => Non-conflicting 3-way merge': 
	git -c notes.mergeStrategy="ours" notes merge z &&
	verify_notes y ours

Using local notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Using local notes for 65e263ded02ae4e8839bc151095113737579dc12
Using local notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Using local notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 12 - merge z into y with "ours" configuration option => Non-conflicting 3-way merge

expecting success of 3309.13 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 13 - reset to pre-merge state (y)

expecting success of 3309.14 'merge z into y with "ours" per-ref configuration option => Non-conflicting 3-way merge': 
	git -c notes.y.mergeStrategy="ours" notes merge z &&
	verify_notes y ours

Using local notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Using local notes for 65e263ded02ae4e8839bc151095113737579dc12
Using local notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Using local notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 14 - merge z into y with "ours" per-ref configuration option => Non-conflicting 3-way merge

expecting success of 3309.15 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 15 - reset to pre-merge state (y)

expecting success of 3309.16 'merge z into y with "theirs" strategy => Non-conflicting 3-way merge': 
	git notes merge --strategy=theirs z &&
	verify_notes y theirs

Using remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Using remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Using remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Using remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 16 - merge z into y with "theirs" strategy => Non-conflicting 3-way merge

expecting success of 3309.17 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 17 - reset to pre-merge state (y)

expecting success of 3309.18 'merge z into y with "theirs" strategy overriding configuration option "ours" => Non-conflicting 3-way merge': 
	git -c notes.mergeStrategy="ours" notes merge --strategy=theirs z &&
	verify_notes y theirs

Using remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Using remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Using remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Using remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 18 - merge z into y with "theirs" strategy overriding configuration option "ours" => Non-conflicting 3-way merge

expecting success of 3309.19 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 19 - reset to pre-merge state (y)

expecting success of 3309.20 'merge z into y with "union" strategy => Non-conflicting 3-way merge': 
	git notes merge --strategy=union z &&
	verify_notes y union

Concatenating local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 20 - merge z into y with "union" strategy => Non-conflicting 3-way merge

expecting success of 3309.21 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 21 - reset to pre-merge state (y)

expecting success of 3309.22 'merge z into y with "union" strategy overriding per-ref configuration => Non-conflicting 3-way merge': 
	git -c notes.y.mergeStrategy="theirs" notes merge --strategy=union z &&
	verify_notes y union

Concatenating local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 22 - merge z into y with "union" strategy overriding per-ref configuration => Non-conflicting 3-way merge

expecting success of 3309.23 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 23 - reset to pre-merge state (y)

expecting success of 3309.24 'merge z into y with "union" per-ref overriding general configuration => Non-conflicting 3-way merge': 
	git -c notes.y.mergeStrategy="union" -c notes.mergeStrategy="theirs" notes merge z &&
	verify_notes y union

Concatenating local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 24 - merge z into y with "union" per-ref overriding general configuration => Non-conflicting 3-way merge

expecting success of 3309.25 'reset to pre-merge state (y)': 
	git update-ref refs/notes/y refs/notes/y^1 &&
	# Verify pre-merge state
	verify_notes y y

ok 25 - reset to pre-merge state (y)

expecting success of 3309.26 'merge z into y with "manual" per-ref only checks specific ref configuration => Conflicting 3-way merge': 
	test_must_fail git -c notes.z.mergeStrategy="union" notes merge z &&
	git notes merge --abort &&
	verify_notes y y

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Auto-merging notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
CONFLICT (content): Merge conflict in notes for object 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Auto-merging notes for 65e263ded02ae4e8839bc151095113737579dc12
CONFLICT (delete/modify): Notes for object 65e263ded02ae4e8839bc151095113737579dc12 deleted in refs/notes/z and modified in refs/notes/y. Version from refs/notes/y left in tree.
Auto-merging notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
CONFLICT (add/add): Merge conflict in notes for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Auto-merging notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
CONFLICT (delete/modify): Notes for object 9a4c31c7f722b5d517e92c64e932dd751e1413bf deleted in refs/notes/y and modified in refs/notes/z. Version from refs/notes/z left in tree.
ok 26 - merge z into y with "manual" per-ref only checks specific ref configuration => Conflicting 3-way merge

expecting success of 3309.27 'merge y into z with "union" strategy => Non-conflicting 3-way merge': 
	git config core.notesRef refs/notes/z &&
	git notes merge --strategy=union y &&
	verify_notes z union2

Concatenating local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 27 - merge y into z with "union" strategy => Non-conflicting 3-way merge

expecting success of 3309.28 'reset to pre-merge state (z)': 
	git update-ref refs/notes/z refs/notes/z^1 &&
	# Verify pre-merge state
	verify_notes z z

ok 28 - reset to pre-merge state (z)

expecting success of 3309.29 'merge y into z with "cat_sort_uniq" strategy => Non-conflicting 3-way merge': 
	git notes merge --strategy=cat_sort_uniq y &&
	verify_notes z cat_sort_uniq

Concatenating unique lines in local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating unique lines in local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating unique lines in local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating unique lines in local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
ok 29 - merge y into z with "cat_sort_uniq" strategy => Non-conflicting 3-way merge

expecting success of 3309.30 'reset to pre-merge state (z)': 
	git update-ref refs/notes/z refs/notes/z^1 &&
	# Verify pre-merge state
	verify_notes z z

ok 30 - reset to pre-merge state (z)

expecting success of 3309.31 'merge y into z with "cat_sort_uniq" strategy configuration option => Non-conflicting 3-way merge': 
	git -c notes.mergeStrategy="cat_sort_uniq" notes merge y &&
	verify_notes z cat_sort_uniq

Concatenating unique lines in local and remote notes for 4acf42e847e7fffbbf89ee365c20ac7caf40de89
Concatenating unique lines in local and remote notes for 65e263ded02ae4e8839bc151095113737579dc12
Concatenating unique lines in local and remote notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
Concatenating unique lines in local and remote notes for 9a4c31c7f722b5d517e92c64e932dd751e1413bf
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
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3070-wildmatch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3070-wildmatch/.git/
checking prerequisite: EXPENSIVE_ON_WINDOWS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE_ON_WINDOWS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE_ON_WINDOWS" &&
	test_have_prereq EXPENSIVE || test_have_prereq !MINGW,!CYGWIN

)
checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
prerequisite EXPENSIVE_ON_WINDOWS ok
expecting success of 3070.1 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 1 - cleanup after previous file test

expecting success of 3070.2 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 2 - setup match file test for foo

expecting success of 3070.3 'wildmatch: match 'foo' 'foo'': 
			test-tool wildmatch wildmatch 'foo' 'foo'
		
ok 3 - wildmatch: match 'foo' 'foo'

expecting success of 3070.4 'wildmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 4 - wildmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.5 'iwildmatch: match 'foo' 'foo'': 
			test-tool wildmatch iwildmatch 'foo' 'foo'
		
ok 5 - iwildmatch: match 'foo' 'foo'

expecting success of 3070.6 'iwildmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 6 - iwildmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.7 'pathmatch: match 'foo' 'foo'': 
			test-tool wildmatch pathmatch 'foo' 'foo'
		
ok 7 - pathmatch: match 'foo' 'foo'

expecting success of 3070.8 'pathmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 8 - pathmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.9 'ipathmatch: match 'foo' 'foo'': 
			test-tool wildmatch ipathmatch 'foo' 'foo'
		
ok 9 - ipathmatch: match 'foo' 'foo'

expecting success of 3070.10 'ipathmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 10 - ipathmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.11 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 11 - cleanup after previous file test

expecting success of 3070.12 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 12 - setup match file test for foo

expecting success of 3070.13 'wildmatch: no match 'foo' 'bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' 'bar'
		
ok 13 - wildmatch: no match 'foo' 'bar'

expecting success of 3070.14 'wildmatch (via ls-files): no match 'bar' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 14 - wildmatch (via ls-files): no match 'bar' 'foo'

expecting success of 3070.15 'iwildmatch: no match 'foo' 'bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' 'bar'
		
ok 15 - iwildmatch: no match 'foo' 'bar'

expecting success of 3070.16 'iwildmatch (via ls-files): no match 'bar' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 16 - iwildmatch (via ls-files): no match 'bar' 'foo'

expecting success of 3070.17 'pathmatch: no match 'foo' 'bar'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' 'bar'
		
ok 17 - pathmatch: no match 'foo' 'bar'

expecting success of 3070.18 'pathmatch (via ls-files): no match 'bar' 'foo'': 
				>expect &&
				git ls-files -z -- 'bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 18 - pathmatch (via ls-files): no match 'bar' 'foo'

expecting success of 3070.19 'ipathmatch: no match 'foo' 'bar'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' 'bar'
		
ok 19 - ipathmatch: no match 'foo' 'bar'

expecting success of 3070.20 'ipathmatch (via ls-files): no match 'bar' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 20 - ipathmatch (via ls-files): no match 'bar' 'foo'

expecting success of 3070.21 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 21 - cleanup after previous file test

expecting success of 3070.22 'setup match file test for ': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 22 - setup match file test for 

expecting success of 3070.23 'wildmatch: match '' ''': 
			test-tool wildmatch wildmatch '' ''
		
ok 23 - wildmatch: match '' ''

checking known breakage of 3070.24 'wildmatch (via ls-files): match skip '' ''': false
not ok 24 - wildmatch (via ls-files): match skip '' '' # TODO known breakage

expecting success of 3070.25 'iwildmatch: match '' ''': 
			test-tool wildmatch iwildmatch '' ''
		
ok 25 - iwildmatch: match '' ''

checking known breakage of 3070.26 'iwildmatch (via ls-files): match skip '' ''': false
not ok 26 - iwildmatch (via ls-files): match skip '' '' # TODO known breakage

expecting success of 3070.27 'pathmatch: match '' ''': 
			test-tool wildmatch pathmatch '' ''
		
ok 27 - pathmatch: match '' ''

checking known breakage of 3070.28 'pathmatch (via ls-files): match skip '' ''': false
not ok 28 - pathmatch (via ls-files): match skip '' '' # TODO known breakage

expecting success of 3070.29 'ipathmatch: match '' ''': 
			test-tool wildmatch ipathmatch '' ''
		
ok 29 - ipathmatch: match '' ''

checking known breakage of 3070.30 'ipathmatch (via ls-files): match skip '' ''': false
not ok 30 - ipathmatch (via ls-files): match skip '' '' # TODO known breakage

expecting success of 3070.31 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 31 - cleanup after previous file test

expecting success of 3070.32 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 32 - setup match file test for foo

expecting success of 3070.33 'wildmatch: match 'foo' '???'': 
			test-tool wildmatch wildmatch 'foo' '???'
		
ok 33 - wildmatch: match 'foo' '???'

expecting success of 3070.34 'wildmatch (via ls-files): match '???' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- '???' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 34 - wildmatch (via ls-files): match '???' 'foo'

expecting success of 3070.35 'iwildmatch: match 'foo' '???'': 
			test-tool wildmatch iwildmatch 'foo' '???'
		
ok 35 - iwildmatch: match 'foo' '???'

expecting success of 3070.36 'iwildmatch (via ls-files): match '???' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '???' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 36 - iwildmatch (via ls-files): match '???' 'foo'

expecting success of 3070.37 'pathmatch: match 'foo' '???'': 
			test-tool wildmatch pathmatch 'foo' '???'
		
ok 37 - pathmatch: match 'foo' '???'

expecting success of 3070.38 'pathmatch (via ls-files): match '???' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- '???' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 38 - pathmatch (via ls-files): match '???' 'foo'

expecting success of 3070.39 'ipathmatch: match 'foo' '???'': 
			test-tool wildmatch ipathmatch 'foo' '???'
		
ok 39 - ipathmatch: match 'foo' '???'

expecting success of 3070.40 'ipathmatch (via ls-files): match '???' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- '???' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 40 - ipathmatch (via ls-files): match '???' 'foo'

expecting success of 3070.41 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 41 - cleanup after previous file test

expecting success of 3070.42 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 42 - setup match file test for foo

expecting success of 3070.43 'wildmatch: no match 'foo' '??'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' '??'
		
ok 43 - wildmatch: no match 'foo' '??'

expecting success of 3070.44 'wildmatch (via ls-files): no match '??' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '??' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 44 - wildmatch (via ls-files): no match '??' 'foo'

expecting success of 3070.45 'iwildmatch: no match 'foo' '??'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' '??'
		
ok 45 - iwildmatch: no match 'foo' '??'

expecting success of 3070.46 'iwildmatch (via ls-files): no match '??' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '??' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 46 - iwildmatch (via ls-files): no match '??' 'foo'

expecting success of 3070.47 'pathmatch: no match 'foo' '??'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' '??'
		
ok 47 - pathmatch: no match 'foo' '??'

expecting success of 3070.48 'pathmatch (via ls-files): no match '??' 'foo'': 
				>expect &&
				git ls-files -z -- '??' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 48 - pathmatch (via ls-files): no match '??' 'foo'

expecting success of 3070.49 'ipathmatch: no match 'foo' '??'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' '??'
		
ok 49 - ipathmatch: no match 'foo' '??'

expecting success of 3070.50 'ipathmatch (via ls-files): no match '??' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '??' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 50 - ipathmatch (via ls-files): no match '??' 'foo'

expecting success of 3070.51 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 51 - cleanup after previous file test

expecting success of 3070.52 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 52 - setup match file test for foo

expecting success of 3070.53 'wildmatch: match 'foo' '*'': 
			test-tool wildmatch wildmatch 'foo' '*'
		
ok 53 - wildmatch: match 'foo' '*'

expecting success of 3070.54 'wildmatch (via ls-files): match '*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- '*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 54 - wildmatch (via ls-files): match '*' 'foo'

expecting success of 3070.55 'iwildmatch: match 'foo' '*'': 
			test-tool wildmatch iwildmatch 'foo' '*'
		
ok 55 - iwildmatch: match 'foo' '*'

expecting success of 3070.56 'iwildmatch (via ls-files): match '*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 56 - iwildmatch (via ls-files): match '*' 'foo'

expecting success of 3070.57 'pathmatch: match 'foo' '*'': 
			test-tool wildmatch pathmatch 'foo' '*'
		
ok 57 - pathmatch: match 'foo' '*'

expecting success of 3070.58 'pathmatch (via ls-files): match '*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- '*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 58 - pathmatch (via ls-files): match '*' 'foo'

expecting success of 3070.59 'ipathmatch: match 'foo' '*'': 
			test-tool wildmatch ipathmatch 'foo' '*'
		
ok 59 - ipathmatch: match 'foo' '*'

expecting success of 3070.60 'ipathmatch (via ls-files): match '*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- '*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 60 - ipathmatch (via ls-files): match '*' 'foo'

expecting success of 3070.61 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 61 - cleanup after previous file test

expecting success of 3070.62 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 62 - setup match file test for foo

expecting success of 3070.63 'wildmatch: match 'foo' 'f*'': 
			test-tool wildmatch wildmatch 'foo' 'f*'
		
ok 63 - wildmatch: match 'foo' 'f*'

expecting success of 3070.64 'wildmatch (via ls-files): match 'f*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- 'f*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 64 - wildmatch (via ls-files): match 'f*' 'foo'

expecting success of 3070.65 'iwildmatch: match 'foo' 'f*'': 
			test-tool wildmatch iwildmatch 'foo' 'f*'
		
ok 65 - iwildmatch: match 'foo' 'f*'

expecting success of 3070.66 'iwildmatch (via ls-files): match 'f*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'f*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 66 - iwildmatch (via ls-files): match 'f*' 'foo'

expecting success of 3070.67 'pathmatch: match 'foo' 'f*'': 
			test-tool wildmatch pathmatch 'foo' 'f*'
		
ok 67 - pathmatch: match 'foo' 'f*'

expecting success of 3070.68 'pathmatch (via ls-files): match 'f*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- 'f*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 68 - pathmatch (via ls-files): match 'f*' 'foo'

expecting success of 3070.69 'ipathmatch: match 'foo' 'f*'': 
			test-tool wildmatch ipathmatch 'foo' 'f*'
		
ok 69 - ipathmatch: match 'foo' 'f*'

expecting success of 3070.70 'ipathmatch (via ls-files): match 'f*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- 'f*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 70 - ipathmatch (via ls-files): match 'f*' 'foo'

expecting success of 3070.71 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 71 - cleanup after previous file test

expecting success of 3070.72 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 72 - setup match file test for foo

expecting success of 3070.73 'wildmatch: no match 'foo' '*f'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' '*f'
		
ok 73 - wildmatch: no match 'foo' '*f'

expecting success of 3070.74 'wildmatch (via ls-files): no match '*f' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*f' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 74 - wildmatch (via ls-files): no match '*f' 'foo'

expecting success of 3070.75 'iwildmatch: no match 'foo' '*f'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' '*f'
		
ok 75 - iwildmatch: no match 'foo' '*f'

expecting success of 3070.76 'iwildmatch (via ls-files): no match '*f' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*f' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 76 - iwildmatch (via ls-files): no match '*f' 'foo'

expecting success of 3070.77 'pathmatch: no match 'foo' '*f'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' '*f'
		
ok 77 - pathmatch: no match 'foo' '*f'

expecting success of 3070.78 'pathmatch (via ls-files): no match '*f' 'foo'': 
				>expect &&
				git ls-files -z -- '*f' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 78 - pathmatch (via ls-files): no match '*f' 'foo'

expecting success of 3070.79 'ipathmatch: no match 'foo' '*f'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' '*f'
		
ok 79 - ipathmatch: no match 'foo' '*f'

expecting success of 3070.80 'ipathmatch (via ls-files): no match '*f' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '*f' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 80 - ipathmatch (via ls-files): no match '*f' 'foo'

expecting success of 3070.81 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 81 - cleanup after previous file test

expecting success of 3070.82 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 82 - setup match file test for foo

expecting success of 3070.83 'wildmatch: match 'foo' '*foo*'': 
			test-tool wildmatch wildmatch 'foo' '*foo*'
		
ok 83 - wildmatch: match 'foo' '*foo*'

expecting success of 3070.84 'wildmatch (via ls-files): match '*foo*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- '*foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 84 - wildmatch (via ls-files): match '*foo*' 'foo'

expecting success of 3070.85 'iwildmatch: match 'foo' '*foo*'': 
			test-tool wildmatch iwildmatch 'foo' '*foo*'
		
ok 85 - iwildmatch: match 'foo' '*foo*'

expecting success of 3070.86 'iwildmatch (via ls-files): match '*foo*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 86 - iwildmatch (via ls-files): match '*foo*' 'foo'

expecting success of 3070.87 'pathmatch: match 'foo' '*foo*'': 
			test-tool wildmatch pathmatch 'foo' '*foo*'
		
ok 87 - pathmatch: match 'foo' '*foo*'

expecting success of 3070.88 'pathmatch (via ls-files): match '*foo*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- '*foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 88 - pathmatch (via ls-files): match '*foo*' 'foo'

expecting success of 3070.89 'ipathmatch: match 'foo' '*foo*'': 
			test-tool wildmatch ipathmatch 'foo' '*foo*'
		
ok 89 - ipathmatch: match 'foo' '*foo*'

expecting success of 3070.90 'ipathmatch (via ls-files): match '*foo*' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- '*foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 90 - ipathmatch (via ls-files): match '*foo*' 'foo'

expecting success of 3070.91 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 91 - cleanup after previous file test

expecting success of 3070.92 'setup match file test for foobar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 92 - setup match file test for foobar

expecting success of 3070.93 'wildmatch: match 'foobar' '*ob*a*r*'': 
			test-tool wildmatch wildmatch 'foobar' '*ob*a*r*'
		
ok 93 - wildmatch: match 'foobar' '*ob*a*r*'

expecting success of 3070.94 'wildmatch (via ls-files): match '*ob*a*r*' 'foobar'': 
				printf '%s' 'foobar' >expect &&
				git --glob-pathspecs ls-files -z -- '*ob*a*r*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 94 - wildmatch (via ls-files): match '*ob*a*r*' 'foobar'

expecting success of 3070.95 'iwildmatch: match 'foobar' '*ob*a*r*'': 
			test-tool wildmatch iwildmatch 'foobar' '*ob*a*r*'
		
ok 95 - iwildmatch: match 'foobar' '*ob*a*r*'

expecting success of 3070.96 'iwildmatch (via ls-files): match '*ob*a*r*' 'foobar'': 
				printf '%s' 'foobar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*ob*a*r*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 96 - iwildmatch (via ls-files): match '*ob*a*r*' 'foobar'

expecting success of 3070.97 'pathmatch: match 'foobar' '*ob*a*r*'': 
			test-tool wildmatch pathmatch 'foobar' '*ob*a*r*'
		
ok 97 - pathmatch: match 'foobar' '*ob*a*r*'

expecting success of 3070.98 'pathmatch (via ls-files): match '*ob*a*r*' 'foobar'': 
				printf '%s' 'foobar' >expect &&
				git ls-files -z -- '*ob*a*r*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 98 - pathmatch (via ls-files): match '*ob*a*r*' 'foobar'

expecting success of 3070.99 'ipathmatch: match 'foobar' '*ob*a*r*'': 
			test-tool wildmatch ipathmatch 'foobar' '*ob*a*r*'
		
ok 99 - ipathmatch: match 'foobar' '*ob*a*r*'

expecting success of 3070.100 'ipathmatch (via ls-files): match '*ob*a*r*' 'foobar'': 
				printf '%s' 'foobar' >expect &&
				git --icase-pathspecs ls-files -z -- '*ob*a*r*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 100 - ipathmatch (via ls-files): match '*ob*a*r*' 'foobar'

expecting success of 3070.101 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foobar
ok 101 - cleanup after previous file test

expecting success of 3070.102 'setup match file test for aaaaaaabababab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 102 - setup match file test for aaaaaaabababab

expecting success of 3070.103 'wildmatch: match 'aaaaaaabababab' '*ab'': 
			test-tool wildmatch wildmatch 'aaaaaaabababab' '*ab'
		
ok 103 - wildmatch: match 'aaaaaaabababab' '*ab'

expecting success of 3070.104 'wildmatch (via ls-files): match '*ab' 'aaaaaaabababab'': 
				printf '%s' 'aaaaaaabababab' >expect &&
				git --glob-pathspecs ls-files -z -- '*ab' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 104 - wildmatch (via ls-files): match '*ab' 'aaaaaaabababab'

expecting success of 3070.105 'iwildmatch: match 'aaaaaaabababab' '*ab'': 
			test-tool wildmatch iwildmatch 'aaaaaaabababab' '*ab'
		
ok 105 - iwildmatch: match 'aaaaaaabababab' '*ab'

expecting success of 3070.106 'iwildmatch (via ls-files): match '*ab' 'aaaaaaabababab'': 
				printf '%s' 'aaaaaaabababab' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*ab' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 106 - iwildmatch (via ls-files): match '*ab' 'aaaaaaabababab'

expecting success of 3070.107 'pathmatch: match 'aaaaaaabababab' '*ab'': 
			test-tool wildmatch pathmatch 'aaaaaaabababab' '*ab'
		
ok 107 - pathmatch: match 'aaaaaaabababab' '*ab'

expecting success of 3070.108 'pathmatch (via ls-files): match '*ab' 'aaaaaaabababab'': 
				printf '%s' 'aaaaaaabababab' >expect &&
				git ls-files -z -- '*ab' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 108 - pathmatch (via ls-files): match '*ab' 'aaaaaaabababab'

expecting success of 3070.109 'ipathmatch: match 'aaaaaaabababab' '*ab'': 
			test-tool wildmatch ipathmatch 'aaaaaaabababab' '*ab'
		
ok 109 - ipathmatch: match 'aaaaaaabababab' '*ab'

expecting success of 3070.110 'ipathmatch (via ls-files): match '*ab' 'aaaaaaabababab'': 
				printf '%s' 'aaaaaaabababab' >expect &&
				git --icase-pathspecs ls-files -z -- '*ab' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 110 - ipathmatch (via ls-files): match '*ab' 'aaaaaaabababab'

expecting success of 3070.111 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing aaaaaaabababab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 111 - cleanup after previous file test

expecting success of 3070.112 'setup match file test for foo*': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 112 - setup match file test for foo*

expecting success of 3070.113 'wildmatch: match 'foo*' 'foo\*'': 
			test-tool wildmatch wildmatch 'foo*' 'foo\*'
		
ok 113 - wildmatch: match 'foo*' 'foo\*'

expecting success of 3070.114 'wildmatch (via ls-files): match 'foo\*' 'foo*'': 
				printf '%s' 'foo*' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo\*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 114 - wildmatch (via ls-files): match 'foo\*' 'foo*'

expecting success of 3070.115 'iwildmatch: match 'foo*' 'foo\*'': 
			test-tool wildmatch iwildmatch 'foo*' 'foo\*'
		
ok 115 - iwildmatch: match 'foo*' 'foo\*'

expecting success of 3070.116 'iwildmatch (via ls-files): match 'foo\*' 'foo*'': 
				printf '%s' 'foo*' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo\*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 116 - iwildmatch (via ls-files): match 'foo\*' 'foo*'

expecting success of 3070.117 'pathmatch: match 'foo*' 'foo\*'': 
			test-tool wildmatch pathmatch 'foo*' 'foo\*'
		
ok 117 - pathmatch: match 'foo*' 'foo\*'

expecting success of 3070.118 'pathmatch (via ls-files): match 'foo\*' 'foo*'': 
				printf '%s' 'foo*' >expect &&
				git ls-files -z -- 'foo\*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 118 - pathmatch (via ls-files): match 'foo\*' 'foo*'

expecting success of 3070.119 'ipathmatch: match 'foo*' 'foo\*'': 
			test-tool wildmatch ipathmatch 'foo*' 'foo\*'
		
ok 119 - ipathmatch: match 'foo*' 'foo\*'

expecting success of 3070.120 'ipathmatch (via ls-files): match 'foo\*' 'foo*'': 
				printf '%s' 'foo*' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo\*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 120 - ipathmatch (via ls-files): match 'foo\*' 'foo*'

expecting success of 3070.121 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo*
ok 121 - cleanup after previous file test

expecting success of 3070.122 'setup match file test for foobar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 122 - setup match file test for foobar

expecting success of 3070.123 'wildmatch: no match 'foobar' 'foo\*bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foobar' 'foo\*bar'
		
ok 123 - wildmatch: no match 'foobar' 'foo\*bar'

expecting success of 3070.124 'wildmatch (via ls-files): no match 'foo\*bar' 'foobar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo\*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 124 - wildmatch (via ls-files): no match 'foo\*bar' 'foobar'

expecting success of 3070.125 'iwildmatch: no match 'foobar' 'foo\*bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foobar' 'foo\*bar'
		
ok 125 - iwildmatch: no match 'foobar' 'foo\*bar'

expecting success of 3070.126 'iwildmatch (via ls-files): no match 'foo\*bar' 'foobar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo\*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 126 - iwildmatch (via ls-files): no match 'foo\*bar' 'foobar'

expecting success of 3070.127 'pathmatch: no match 'foobar' 'foo\*bar'': 
			test_must_fail test-tool wildmatch pathmatch 'foobar' 'foo\*bar'
		
ok 127 - pathmatch: no match 'foobar' 'foo\*bar'

expecting success of 3070.128 'pathmatch (via ls-files): no match 'foo\*bar' 'foobar'': 
				>expect &&
				git ls-files -z -- 'foo\*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 128 - pathmatch (via ls-files): no match 'foo\*bar' 'foobar'

expecting success of 3070.129 'ipathmatch: no match 'foobar' 'foo\*bar'': 
			test_must_fail test-tool wildmatch ipathmatch 'foobar' 'foo\*bar'
		
ok 129 - ipathmatch: no match 'foobar' 'foo\*bar'

expecting success of 3070.130 'ipathmatch (via ls-files): no match 'foo\*bar' 'foobar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo\*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 130 - ipathmatch (via ls-files): no match 'foo\*bar' 'foobar'

expecting success of 3070.131 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foobar
ok 131 - cleanup after previous file test

expecting success of 3070.132 'setup match file test for f\oo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 132 - setup match file test for f\oo

expecting success of 3070.133 'wildmatch: match 'f\oo' 'f\\oo'': 
			test-tool wildmatch wildmatch 'f\oo' 'f\\oo'
		
ok 133 - wildmatch: match 'f\oo' 'f\\oo'

expecting success of 3070.134 'wildmatch (via ls-files): match 'f\\oo' 'f\oo'': 
				printf '%s' 'f\oo' >expect &&
				git --glob-pathspecs ls-files -z -- 'f\\oo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 134 - wildmatch (via ls-files): match 'f\\oo' 'f\oo'

expecting success of 3070.135 'iwildmatch: match 'f\oo' 'f\\oo'': 
			test-tool wildmatch iwildmatch 'f\oo' 'f\\oo'
		
ok 135 - iwildmatch: match 'f\oo' 'f\\oo'

expecting success of 3070.136 'iwildmatch (via ls-files): match 'f\\oo' 'f\oo'': 
				printf '%s' 'f\oo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'f\\oo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 136 - iwildmatch (via ls-files): match 'f\\oo' 'f\oo'

expecting success of 3070.137 'pathmatch: match 'f\oo' 'f\\oo'': 
			test-tool wildmatch pathmatch 'f\oo' 'f\\oo'
		
ok 137 - pathmatch: match 'f\oo' 'f\\oo'

expecting success of 3070.138 'pathmatch (via ls-files): match 'f\\oo' 'f\oo'': 
				printf '%s' 'f\oo' >expect &&
				git ls-files -z -- 'f\\oo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 138 - pathmatch (via ls-files): match 'f\\oo' 'f\oo'

expecting success of 3070.139 'ipathmatch: match 'f\oo' 'f\\oo'': 
			test-tool wildmatch ipathmatch 'f\oo' 'f\\oo'
		
ok 139 - ipathmatch: match 'f\oo' 'f\\oo'

expecting success of 3070.140 'ipathmatch (via ls-files): match 'f\\oo' 'f\oo'': 
				printf '%s' 'f\oo' >expect &&
				git --icase-pathspecs ls-files -z -- 'f\\oo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 140 - ipathmatch (via ls-files): match 'f\\oo' 'f\oo'

expecting success of 3070.141 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing "f\\oo"
ok 141 - cleanup after previous file test

expecting success of 3070.142 'setup match file test for ball': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 142 - setup match file test for ball

expecting success of 3070.143 'wildmatch: match 'ball' '*[al]?'': 
			test-tool wildmatch wildmatch 'ball' '*[al]?'
		
ok 143 - wildmatch: match 'ball' '*[al]?'

expecting success of 3070.144 'wildmatch (via ls-files): match '*[al]?' 'ball'': 
				printf '%s' 'ball' >expect &&
				git --glob-pathspecs ls-files -z -- '*[al]?' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 144 - wildmatch (via ls-files): match '*[al]?' 'ball'

expecting success of 3070.145 'iwildmatch: match 'ball' '*[al]?'': 
			test-tool wildmatch iwildmatch 'ball' '*[al]?'
		
ok 145 - iwildmatch: match 'ball' '*[al]?'

expecting success of 3070.146 'iwildmatch (via ls-files): match '*[al]?' 'ball'': 
				printf '%s' 'ball' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*[al]?' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 146 - iwildmatch (via ls-files): match '*[al]?' 'ball'

expecting success of 3070.147 'pathmatch: match 'ball' '*[al]?'': 
			test-tool wildmatch pathmatch 'ball' '*[al]?'
		
ok 147 - pathmatch: match 'ball' '*[al]?'

expecting success of 3070.148 'pathmatch (via ls-files): match '*[al]?' 'ball'': 
				printf '%s' 'ball' >expect &&
				git ls-files -z -- '*[al]?' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 148 - pathmatch (via ls-files): match '*[al]?' 'ball'

expecting success of 3070.149 'ipathmatch: match 'ball' '*[al]?'': 
			test-tool wildmatch ipathmatch 'ball' '*[al]?'
		
ok 149 - ipathmatch: match 'ball' '*[al]?'

expecting success of 3070.150 'ipathmatch (via ls-files): match '*[al]?' 'ball'': 
				printf '%s' 'ball' >expect &&
				git --icase-pathspecs ls-files -z -- '*[al]?' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 150 - ipathmatch (via ls-files): match '*[al]?' 'ball'

expecting success of 3070.151 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing ball
Removing expect
ok 151 - cleanup after previous file test

expecting success of 3070.152 'setup match file test for ten': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 152 - setup match file test for ten

expecting success of 3070.153 'wildmatch: no match 'ten' '[ten]'': 
			test_must_fail test-tool wildmatch wildmatch 'ten' '[ten]'
		
ok 153 - wildmatch: no match 'ten' '[ten]'

expecting success of 3070.154 'wildmatch (via ls-files): no match '[ten]' 'ten'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 154 - wildmatch (via ls-files): no match '[ten]' 'ten'

expecting success of 3070.155 'iwildmatch: no match 'ten' '[ten]'': 
			test_must_fail test-tool wildmatch iwildmatch 'ten' '[ten]'
		
ok 155 - iwildmatch: no match 'ten' '[ten]'

expecting success of 3070.156 'iwildmatch (via ls-files): no match '[ten]' 'ten'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 156 - iwildmatch (via ls-files): no match '[ten]' 'ten'

expecting success of 3070.157 'pathmatch: no match 'ten' '[ten]'': 
			test_must_fail test-tool wildmatch pathmatch 'ten' '[ten]'
		
ok 157 - pathmatch: no match 'ten' '[ten]'

expecting success of 3070.158 'pathmatch (via ls-files): no match '[ten]' 'ten'': 
				>expect &&
				git ls-files -z -- '[ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 158 - pathmatch (via ls-files): no match '[ten]' 'ten'

expecting success of 3070.159 'ipathmatch: no match 'ten' '[ten]'': 
			test_must_fail test-tool wildmatch ipathmatch 'ten' '[ten]'
		
ok 159 - ipathmatch: no match 'ten' '[ten]'

expecting success of 3070.160 'ipathmatch (via ls-files): no match '[ten]' 'ten'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 160 - ipathmatch (via ls-files): no match '[ten]' 'ten'

expecting success of 3070.161 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ten
ok 161 - cleanup after previous file test

expecting success of 3070.162 'setup match file test for ten': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 162 - setup match file test for ten

expecting success of 3070.163 'wildmatch: match 'ten' '**[!te]'': 
			test-tool wildmatch wildmatch 'ten' '**[!te]'
		
ok 163 - wildmatch: match 'ten' '**[!te]'

expecting success of 3070.164 'wildmatch (via ls-files): match '**[!te]' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --glob-pathspecs ls-files -z -- '**[!te]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 164 - wildmatch (via ls-files): match '**[!te]' 'ten'

expecting success of 3070.165 'iwildmatch: match 'ten' '**[!te]'': 
			test-tool wildmatch iwildmatch 'ten' '**[!te]'
		
ok 165 - iwildmatch: match 'ten' '**[!te]'

expecting success of 3070.166 'iwildmatch (via ls-files): match '**[!te]' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**[!te]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 166 - iwildmatch (via ls-files): match '**[!te]' 'ten'

expecting success of 3070.167 'pathmatch: match 'ten' '**[!te]'': 
			test-tool wildmatch pathmatch 'ten' '**[!te]'
		
ok 167 - pathmatch: match 'ten' '**[!te]'

expecting success of 3070.168 'pathmatch (via ls-files): match '**[!te]' 'ten'': 
				printf '%s' 'ten' >expect &&
				git ls-files -z -- '**[!te]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 168 - pathmatch (via ls-files): match '**[!te]' 'ten'

expecting success of 3070.169 'ipathmatch: match 'ten' '**[!te]'': 
			test-tool wildmatch ipathmatch 'ten' '**[!te]'
		
ok 169 - ipathmatch: match 'ten' '**[!te]'

expecting success of 3070.170 'ipathmatch (via ls-files): match '**[!te]' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --icase-pathspecs ls-files -z -- '**[!te]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 170 - ipathmatch (via ls-files): match '**[!te]' 'ten'

expecting success of 3070.171 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ten
ok 171 - cleanup after previous file test

expecting success of 3070.172 'setup match file test for ten': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 172 - setup match file test for ten

expecting success of 3070.173 'wildmatch: no match 'ten' '**[!ten]'': 
			test_must_fail test-tool wildmatch wildmatch 'ten' '**[!ten]'
		
ok 173 - wildmatch: no match 'ten' '**[!ten]'

expecting success of 3070.174 'wildmatch (via ls-files): no match '**[!ten]' 'ten'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '**[!ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 174 - wildmatch (via ls-files): no match '**[!ten]' 'ten'

expecting success of 3070.175 'iwildmatch: no match 'ten' '**[!ten]'': 
			test_must_fail test-tool wildmatch iwildmatch 'ten' '**[!ten]'
		
ok 175 - iwildmatch: no match 'ten' '**[!ten]'

expecting success of 3070.176 'iwildmatch (via ls-files): no match '**[!ten]' 'ten'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**[!ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 176 - iwildmatch (via ls-files): no match '**[!ten]' 'ten'

expecting success of 3070.177 'pathmatch: no match 'ten' '**[!ten]'': 
			test_must_fail test-tool wildmatch pathmatch 'ten' '**[!ten]'
		
ok 177 - pathmatch: no match 'ten' '**[!ten]'

expecting success of 3070.178 'pathmatch (via ls-files): no match '**[!ten]' 'ten'': 
				>expect &&
				git ls-files -z -- '**[!ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 178 - pathmatch (via ls-files): no match '**[!ten]' 'ten'

expecting success of 3070.179 'ipathmatch: no match 'ten' '**[!ten]'': 
			test_must_fail test-tool wildmatch ipathmatch 'ten' '**[!ten]'
		
ok 179 - ipathmatch: no match 'ten' '**[!ten]'

expecting success of 3070.180 'ipathmatch (via ls-files): no match '**[!ten]' 'ten'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '**[!ten]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 180 - ipathmatch (via ls-files): no match '**[!ten]' 'ten'

expecting success of 3070.181 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ten
ok 181 - cleanup after previous file test

expecting success of 3070.182 'setup match file test for ten': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 182 - setup match file test for ten

expecting success of 3070.183 'wildmatch: match 'ten' 't[a-g]n'': 
			test-tool wildmatch wildmatch 'ten' 't[a-g]n'
		
ok 183 - wildmatch: match 'ten' 't[a-g]n'

expecting success of 3070.184 'wildmatch (via ls-files): match 't[a-g]n' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --glob-pathspecs ls-files -z -- 't[a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 184 - wildmatch (via ls-files): match 't[a-g]n' 'ten'

expecting success of 3070.185 'iwildmatch: match 'ten' 't[a-g]n'': 
			test-tool wildmatch iwildmatch 'ten' 't[a-g]n'
		
ok 185 - iwildmatch: match 'ten' 't[a-g]n'

expecting success of 3070.186 'iwildmatch (via ls-files): match 't[a-g]n' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 't[a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 186 - iwildmatch (via ls-files): match 't[a-g]n' 'ten'

expecting success of 3070.187 'pathmatch: match 'ten' 't[a-g]n'': 
			test-tool wildmatch pathmatch 'ten' 't[a-g]n'
		
ok 187 - pathmatch: match 'ten' 't[a-g]n'

expecting success of 3070.188 'pathmatch (via ls-files): match 't[a-g]n' 'ten'': 
				printf '%s' 'ten' >expect &&
				git ls-files -z -- 't[a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 188 - pathmatch (via ls-files): match 't[a-g]n' 'ten'

expecting success of 3070.189 'ipathmatch: match 'ten' 't[a-g]n'': 
			test-tool wildmatch ipathmatch 'ten' 't[a-g]n'
		
ok 189 - ipathmatch: match 'ten' 't[a-g]n'

expecting success of 3070.190 'ipathmatch (via ls-files): match 't[a-g]n' 'ten'': 
				printf '%s' 'ten' >expect &&
				git --icase-pathspecs ls-files -z -- 't[a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 190 - ipathmatch (via ls-files): match 't[a-g]n' 'ten'

expecting success of 3070.191 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ten
ok 191 - cleanup after previous file test

expecting success of 3070.192 'setup match file test for ten': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 192 - setup match file test for ten

expecting success of 3070.193 'wildmatch: no match 'ten' 't[!a-g]n'': 
			test_must_fail test-tool wildmatch wildmatch 'ten' 't[!a-g]n'
		
ok 193 - wildmatch: no match 'ten' 't[!a-g]n'

expecting success of 3070.194 'wildmatch (via ls-files): no match 't[!a-g]n' 'ten'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 194 - wildmatch (via ls-files): no match 't[!a-g]n' 'ten'

expecting success of 3070.195 'iwildmatch: no match 'ten' 't[!a-g]n'': 
			test_must_fail test-tool wildmatch iwildmatch 'ten' 't[!a-g]n'
		
ok 195 - iwildmatch: no match 'ten' 't[!a-g]n'

expecting success of 3070.196 'iwildmatch (via ls-files): no match 't[!a-g]n' 'ten'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 196 - iwildmatch (via ls-files): no match 't[!a-g]n' 'ten'

expecting success of 3070.197 'pathmatch: no match 'ten' 't[!a-g]n'': 
			test_must_fail test-tool wildmatch pathmatch 'ten' 't[!a-g]n'
		
ok 197 - pathmatch: no match 'ten' 't[!a-g]n'

expecting success of 3070.198 'pathmatch (via ls-files): no match 't[!a-g]n' 'ten'': 
				>expect &&
				git ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 198 - pathmatch (via ls-files): no match 't[!a-g]n' 'ten'

expecting success of 3070.199 'ipathmatch: no match 'ten' 't[!a-g]n'': 
			test_must_fail test-tool wildmatch ipathmatch 'ten' 't[!a-g]n'
		
ok 199 - ipathmatch: no match 'ten' 't[!a-g]n'

expecting success of 3070.200 'ipathmatch (via ls-files): no match 't[!a-g]n' 'ten'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 200 - ipathmatch (via ls-files): no match 't[!a-g]n' 'ten'

expecting success of 3070.201 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ten
ok 201 - cleanup after previous file test

expecting success of 3070.202 'setup match file test for ton': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 202 - setup match file test for ton

expecting success of 3070.203 'wildmatch: match 'ton' 't[!a-g]n'': 
			test-tool wildmatch wildmatch 'ton' 't[!a-g]n'
		
ok 203 - wildmatch: match 'ton' 't[!a-g]n'

expecting success of 3070.204 'wildmatch (via ls-files): match 't[!a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --glob-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 204 - wildmatch (via ls-files): match 't[!a-g]n' 'ton'

expecting success of 3070.205 'iwildmatch: match 'ton' 't[!a-g]n'': 
			test-tool wildmatch iwildmatch 'ton' 't[!a-g]n'
		
ok 205 - iwildmatch: match 'ton' 't[!a-g]n'

expecting success of 3070.206 'iwildmatch (via ls-files): match 't[!a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 206 - iwildmatch (via ls-files): match 't[!a-g]n' 'ton'

expecting success of 3070.207 'pathmatch: match 'ton' 't[!a-g]n'': 
			test-tool wildmatch pathmatch 'ton' 't[!a-g]n'
		
ok 207 - pathmatch: match 'ton' 't[!a-g]n'

expecting success of 3070.208 'pathmatch (via ls-files): match 't[!a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 208 - pathmatch (via ls-files): match 't[!a-g]n' 'ton'

expecting success of 3070.209 'ipathmatch: match 'ton' 't[!a-g]n'': 
			test-tool wildmatch ipathmatch 'ton' 't[!a-g]n'
		
ok 209 - ipathmatch: match 'ton' 't[!a-g]n'

expecting success of 3070.210 'ipathmatch (via ls-files): match 't[!a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --icase-pathspecs ls-files -z -- 't[!a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 210 - ipathmatch (via ls-files): match 't[!a-g]n' 'ton'

expecting success of 3070.211 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ton
ok 211 - cleanup after previous file test

expecting success of 3070.212 'setup match file test for ton': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 212 - setup match file test for ton

expecting success of 3070.213 'wildmatch: match 'ton' 't[^a-g]n'': 
			test-tool wildmatch wildmatch 'ton' 't[^a-g]n'
		
ok 213 - wildmatch: match 'ton' 't[^a-g]n'

expecting success of 3070.214 'wildmatch (via ls-files): match 't[^a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --glob-pathspecs ls-files -z -- 't[^a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 214 - wildmatch (via ls-files): match 't[^a-g]n' 'ton'

expecting success of 3070.215 'iwildmatch: match 'ton' 't[^a-g]n'': 
			test-tool wildmatch iwildmatch 'ton' 't[^a-g]n'
		
ok 215 - iwildmatch: match 'ton' 't[^a-g]n'

expecting success of 3070.216 'iwildmatch (via ls-files): match 't[^a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 't[^a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 216 - iwildmatch (via ls-files): match 't[^a-g]n' 'ton'

expecting success of 3070.217 'pathmatch: match 'ton' 't[^a-g]n'': 
			test-tool wildmatch pathmatch 'ton' 't[^a-g]n'
		
ok 217 - pathmatch: match 'ton' 't[^a-g]n'

expecting success of 3070.218 'pathmatch (via ls-files): match 't[^a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git ls-files -z -- 't[^a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 218 - pathmatch (via ls-files): match 't[^a-g]n' 'ton'

expecting success of 3070.219 'ipathmatch: match 'ton' 't[^a-g]n'': 
			test-tool wildmatch ipathmatch 'ton' 't[^a-g]n'
		
ok 219 - ipathmatch: match 'ton' 't[^a-g]n'

expecting success of 3070.220 'ipathmatch (via ls-files): match 't[^a-g]n' 'ton'': 
				printf '%s' 'ton' >expect &&
				git --icase-pathspecs ls-files -z -- 't[^a-g]n' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 220 - ipathmatch (via ls-files): match 't[^a-g]n' 'ton'

expecting success of 3070.221 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing ton
ok 221 - cleanup after previous file test

expecting success of 3070.222 'setup match file test for a]b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 222 - setup match file test for a]b

expecting success of 3070.223 'wildmatch: match 'a]b' 'a[]]b'': 
			test-tool wildmatch wildmatch 'a]b' 'a[]]b'
		
ok 223 - wildmatch: match 'a]b' 'a[]]b'

expecting success of 3070.224 'wildmatch (via ls-files): match 'a[]]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[]]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 224 - wildmatch (via ls-files): match 'a[]]b' 'a]b'

expecting success of 3070.225 'iwildmatch: match 'a]b' 'a[]]b'': 
			test-tool wildmatch iwildmatch 'a]b' 'a[]]b'
		
ok 225 - iwildmatch: match 'a]b' 'a[]]b'

expecting success of 3070.226 'iwildmatch (via ls-files): match 'a[]]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 226 - iwildmatch (via ls-files): match 'a[]]b' 'a]b'

expecting success of 3070.227 'pathmatch: match 'a]b' 'a[]]b'': 
			test-tool wildmatch pathmatch 'a]b' 'a[]]b'
		
ok 227 - pathmatch: match 'a]b' 'a[]]b'

expecting success of 3070.228 'pathmatch (via ls-files): match 'a[]]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git ls-files -z -- 'a[]]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 228 - pathmatch (via ls-files): match 'a[]]b' 'a]b'

expecting success of 3070.229 'ipathmatch: match 'a]b' 'a[]]b'': 
			test-tool wildmatch ipathmatch 'a]b' 'a[]]b'
		
ok 229 - ipathmatch: match 'a]b' 'a[]]b'

expecting success of 3070.230 'ipathmatch (via ls-files): match 'a[]]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[]]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 230 - ipathmatch (via ls-files): match 'a[]]b' 'a]b'

expecting success of 3070.231 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a]b
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 231 - cleanup after previous file test

expecting success of 3070.232 'setup match file test for a-b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 232 - setup match file test for a-b

expecting success of 3070.233 'wildmatch: match 'a-b' 'a[]-]b'': 
			test-tool wildmatch wildmatch 'a-b' 'a[]-]b'
		
ok 233 - wildmatch: match 'a-b' 'a[]-]b'

expecting success of 3070.234 'wildmatch (via ls-files): match 'a[]-]b' 'a-b'': 
				printf '%s' 'a-b' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 234 - wildmatch (via ls-files): match 'a[]-]b' 'a-b'

expecting success of 3070.235 'iwildmatch: match 'a-b' 'a[]-]b'': 
			test-tool wildmatch iwildmatch 'a-b' 'a[]-]b'
		
ok 235 - iwildmatch: match 'a-b' 'a[]-]b'

expecting success of 3070.236 'iwildmatch (via ls-files): match 'a[]-]b' 'a-b'': 
				printf '%s' 'a-b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 236 - iwildmatch (via ls-files): match 'a[]-]b' 'a-b'

expecting success of 3070.237 'pathmatch: match 'a-b' 'a[]-]b'': 
			test-tool wildmatch pathmatch 'a-b' 'a[]-]b'
		
ok 237 - pathmatch: match 'a-b' 'a[]-]b'

expecting success of 3070.238 'pathmatch (via ls-files): match 'a[]-]b' 'a-b'': 
				printf '%s' 'a-b' >expect &&
				git ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 238 - pathmatch (via ls-files): match 'a[]-]b' 'a-b'

expecting success of 3070.239 'ipathmatch: match 'a-b' 'a[]-]b'': 
			test-tool wildmatch ipathmatch 'a-b' 'a[]-]b'
		
ok 239 - ipathmatch: match 'a-b' 'a[]-]b'

expecting success of 3070.240 'ipathmatch (via ls-files): match 'a[]-]b' 'a-b'': 
				printf '%s' 'a-b' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 240 - ipathmatch (via ls-files): match 'a[]-]b' 'a-b'

expecting success of 3070.241 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a-b
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 241 - cleanup after previous file test

expecting success of 3070.242 'setup match file test for a]b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 242 - setup match file test for a]b

expecting success of 3070.243 'wildmatch: match 'a]b' 'a[]-]b'': 
			test-tool wildmatch wildmatch 'a]b' 'a[]-]b'
		
ok 243 - wildmatch: match 'a]b' 'a[]-]b'

expecting success of 3070.244 'wildmatch (via ls-files): match 'a[]-]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 244 - wildmatch (via ls-files): match 'a[]-]b' 'a]b'

expecting success of 3070.245 'iwildmatch: match 'a]b' 'a[]-]b'': 
			test-tool wildmatch iwildmatch 'a]b' 'a[]-]b'
		
ok 245 - iwildmatch: match 'a]b' 'a[]-]b'

expecting success of 3070.246 'iwildmatch (via ls-files): match 'a[]-]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 246 - iwildmatch (via ls-files): match 'a[]-]b' 'a]b'

expecting success of 3070.247 'pathmatch: match 'a]b' 'a[]-]b'': 
			test-tool wildmatch pathmatch 'a]b' 'a[]-]b'
		
ok 247 - pathmatch: match 'a]b' 'a[]-]b'

expecting success of 3070.248 'pathmatch (via ls-files): match 'a[]-]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 248 - pathmatch (via ls-files): match 'a[]-]b' 'a]b'

expecting success of 3070.249 'ipathmatch: match 'a]b' 'a[]-]b'': 
			test-tool wildmatch ipathmatch 'a]b' 'a[]-]b'
		
ok 249 - ipathmatch: match 'a]b' 'a[]-]b'

expecting success of 3070.250 'ipathmatch (via ls-files): match 'a[]-]b' 'a]b'': 
				printf '%s' 'a]b' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 250 - ipathmatch (via ls-files): match 'a[]-]b' 'a]b'

expecting success of 3070.251 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a]b
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 251 - cleanup after previous file test

expecting success of 3070.252 'setup match file test for aab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 252 - setup match file test for aab

expecting success of 3070.253 'wildmatch: no match 'aab' 'a[]-]b'': 
			test_must_fail test-tool wildmatch wildmatch 'aab' 'a[]-]b'
		
ok 253 - wildmatch: no match 'aab' 'a[]-]b'

expecting success of 3070.254 'wildmatch (via ls-files): no match 'a[]-]b' 'aab'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 254 - wildmatch (via ls-files): no match 'a[]-]b' 'aab'

expecting success of 3070.255 'iwildmatch: no match 'aab' 'a[]-]b'': 
			test_must_fail test-tool wildmatch iwildmatch 'aab' 'a[]-]b'
		
ok 255 - iwildmatch: no match 'aab' 'a[]-]b'

expecting success of 3070.256 'iwildmatch (via ls-files): no match 'a[]-]b' 'aab'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 256 - iwildmatch (via ls-files): no match 'a[]-]b' 'aab'

expecting success of 3070.257 'pathmatch: no match 'aab' 'a[]-]b'': 
			test_must_fail test-tool wildmatch pathmatch 'aab' 'a[]-]b'
		
ok 257 - pathmatch: no match 'aab' 'a[]-]b'

expecting success of 3070.258 'pathmatch (via ls-files): no match 'a[]-]b' 'aab'': 
				>expect &&
				git ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 258 - pathmatch (via ls-files): no match 'a[]-]b' 'aab'

expecting success of 3070.259 'ipathmatch: no match 'aab' 'a[]-]b'': 
			test_must_fail test-tool wildmatch ipathmatch 'aab' 'a[]-]b'
		
ok 259 - ipathmatch: no match 'aab' 'a[]-]b'

expecting success of 3070.260 'ipathmatch (via ls-files): no match 'a[]-]b' 'aab'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'a[]-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 260 - ipathmatch (via ls-files): no match 'a[]-]b' 'aab'

expecting success of 3070.261 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing aab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 261 - cleanup after previous file test

expecting success of 3070.262 'setup match file test for aab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 262 - setup match file test for aab

expecting success of 3070.263 'wildmatch: match 'aab' 'a[]a-]b'': 
			test-tool wildmatch wildmatch 'aab' 'a[]a-]b'
		
ok 263 - wildmatch: match 'aab' 'a[]a-]b'

expecting success of 3070.264 'wildmatch (via ls-files): match 'a[]a-]b' 'aab'': 
				printf '%s' 'aab' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[]a-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 264 - wildmatch (via ls-files): match 'a[]a-]b' 'aab'

expecting success of 3070.265 'iwildmatch: match 'aab' 'a[]a-]b'': 
			test-tool wildmatch iwildmatch 'aab' 'a[]a-]b'
		
ok 265 - iwildmatch: match 'aab' 'a[]a-]b'

expecting success of 3070.266 'iwildmatch (via ls-files): match 'a[]a-]b' 'aab'': 
				printf '%s' 'aab' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]a-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 266 - iwildmatch (via ls-files): match 'a[]a-]b' 'aab'

expecting success of 3070.267 'pathmatch: match 'aab' 'a[]a-]b'': 
			test-tool wildmatch pathmatch 'aab' 'a[]a-]b'
		
ok 267 - pathmatch: match 'aab' 'a[]a-]b'

expecting success of 3070.268 'pathmatch (via ls-files): match 'a[]a-]b' 'aab'': 
				printf '%s' 'aab' >expect &&
				git ls-files -z -- 'a[]a-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 268 - pathmatch (via ls-files): match 'a[]a-]b' 'aab'

expecting success of 3070.269 'ipathmatch: match 'aab' 'a[]a-]b'': 
			test-tool wildmatch ipathmatch 'aab' 'a[]a-]b'
		
ok 269 - ipathmatch: match 'aab' 'a[]a-]b'

expecting success of 3070.270 'ipathmatch (via ls-files): match 'a[]a-]b' 'aab'': 
				printf '%s' 'aab' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[]a-]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 270 - ipathmatch (via ls-files): match 'a[]a-]b' 'aab'

expecting success of 3070.271 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing aab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 271 - cleanup after previous file test

expecting success of 3070.272 'setup match file test for ]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 272 - setup match file test for ]

expecting success of 3070.273 'wildmatch: match ']' ']'': 
			test-tool wildmatch wildmatch ']' ']'
		
ok 273 - wildmatch: match ']' ']'

expecting success of 3070.274 'wildmatch (via ls-files): match ']' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs ls-files -z -- ']' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 274 - wildmatch (via ls-files): match ']' ']'

expecting success of 3070.275 'iwildmatch: match ']' ']'': 
			test-tool wildmatch iwildmatch ']' ']'
		
ok 275 - iwildmatch: match ']' ']'

expecting success of 3070.276 'iwildmatch (via ls-files): match ']' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- ']' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 276 - iwildmatch (via ls-files): match ']' ']'

expecting success of 3070.277 'pathmatch: match ']' ']'': 
			test-tool wildmatch pathmatch ']' ']'
		
ok 277 - pathmatch: match ']' ']'

expecting success of 3070.278 'pathmatch (via ls-files): match ']' ']'': 
				printf '%s' ']' >expect &&
				git ls-files -z -- ']' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 278 - pathmatch (via ls-files): match ']' ']'

expecting success of 3070.279 'ipathmatch: match ']' ']'': 
			test-tool wildmatch ipathmatch ']' ']'
		
ok 279 - ipathmatch: match ']' ']'

expecting success of 3070.280 'ipathmatch (via ls-files): match ']' ']'': 
				printf '%s' ']' >expect &&
				git --icase-pathspecs ls-files -z -- ']' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 280 - ipathmatch (via ls-files): match ']' ']'

expecting success of 3070.281 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 281 - cleanup after previous file test

expecting success of 3070.282 'setup match file test for foo/baz/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 282 - setup match file test for foo/baz/bar

expecting success of 3070.283 'wildmatch: no match 'foo/baz/bar' 'foo*bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/baz/bar' 'foo*bar'
		
ok 283 - wildmatch: no match 'foo/baz/bar' 'foo*bar'

expecting success of 3070.284 'wildmatch (via ls-files): no match 'foo*bar' 'foo/baz/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 284 - wildmatch (via ls-files): no match 'foo*bar' 'foo/baz/bar'

expecting success of 3070.285 'iwildmatch: no match 'foo/baz/bar' 'foo*bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/baz/bar' 'foo*bar'
		
ok 285 - iwildmatch: no match 'foo/baz/bar' 'foo*bar'

expecting success of 3070.286 'iwildmatch (via ls-files): no match 'foo*bar' 'foo/baz/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 286 - iwildmatch (via ls-files): no match 'foo*bar' 'foo/baz/bar'

expecting success of 3070.287 'pathmatch: match 'foo/baz/bar' 'foo*bar'': 
			test-tool wildmatch pathmatch 'foo/baz/bar' 'foo*bar'
		
ok 287 - pathmatch: match 'foo/baz/bar' 'foo*bar'

expecting success of 3070.288 'pathmatch (via ls-files): match 'foo*bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git ls-files -z -- 'foo*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 288 - pathmatch (via ls-files): match 'foo*bar' 'foo/baz/bar'

expecting success of 3070.289 'ipathmatch: match 'foo/baz/bar' 'foo*bar'': 
			test-tool wildmatch ipathmatch 'foo/baz/bar' 'foo*bar'
		
ok 289 - ipathmatch: match 'foo/baz/bar' 'foo*bar'

expecting success of 3070.290 'ipathmatch (via ls-files): match 'foo*bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo*bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 290 - ipathmatch (via ls-files): match 'foo*bar' 'foo/baz/bar'

expecting success of 3070.291 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 291 - cleanup after previous file test

expecting success of 3070.292 'setup match file test for foo/baz/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 292 - setup match file test for foo/baz/bar

expecting success of 3070.293 'wildmatch: no match 'foo/baz/bar' 'foo**bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/baz/bar' 'foo**bar'
		
ok 293 - wildmatch: no match 'foo/baz/bar' 'foo**bar'

expecting success of 3070.294 'wildmatch (via ls-files): no match 'foo**bar' 'foo/baz/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 294 - wildmatch (via ls-files): no match 'foo**bar' 'foo/baz/bar'

expecting success of 3070.295 'iwildmatch: no match 'foo/baz/bar' 'foo**bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/baz/bar' 'foo**bar'
		
ok 295 - iwildmatch: no match 'foo/baz/bar' 'foo**bar'

expecting success of 3070.296 'iwildmatch (via ls-files): no match 'foo**bar' 'foo/baz/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 296 - iwildmatch (via ls-files): no match 'foo**bar' 'foo/baz/bar'

expecting success of 3070.297 'pathmatch: match 'foo/baz/bar' 'foo**bar'': 
			test-tool wildmatch pathmatch 'foo/baz/bar' 'foo**bar'
		
ok 297 - pathmatch: match 'foo/baz/bar' 'foo**bar'

expecting success of 3070.298 'pathmatch (via ls-files): match 'foo**bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 298 - pathmatch (via ls-files): match 'foo**bar' 'foo/baz/bar'

expecting success of 3070.299 'ipathmatch: match 'foo/baz/bar' 'foo**bar'': 
			test-tool wildmatch ipathmatch 'foo/baz/bar' 'foo**bar'
		
ok 299 - ipathmatch: match 'foo/baz/bar' 'foo**bar'

expecting success of 3070.300 'ipathmatch (via ls-files): match 'foo**bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 300 - ipathmatch (via ls-files): match 'foo**bar' 'foo/baz/bar'

expecting success of 3070.301 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 301 - cleanup after previous file test

expecting success of 3070.302 'setup match file test for foobazbar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 302 - setup match file test for foobazbar

expecting success of 3070.303 'wildmatch: match 'foobazbar' 'foo**bar'': 
			test-tool wildmatch wildmatch 'foobazbar' 'foo**bar'
		
ok 303 - wildmatch: match 'foobazbar' 'foo**bar'

expecting success of 3070.304 'wildmatch (via ls-files): match 'foo**bar' 'foobazbar'': 
				printf '%s' 'foobazbar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 304 - wildmatch (via ls-files): match 'foo**bar' 'foobazbar'

expecting success of 3070.305 'iwildmatch: match 'foobazbar' 'foo**bar'': 
			test-tool wildmatch iwildmatch 'foobazbar' 'foo**bar'
		
ok 305 - iwildmatch: match 'foobazbar' 'foo**bar'

expecting success of 3070.306 'iwildmatch (via ls-files): match 'foo**bar' 'foobazbar'': 
				printf '%s' 'foobazbar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 306 - iwildmatch (via ls-files): match 'foo**bar' 'foobazbar'

expecting success of 3070.307 'pathmatch: match 'foobazbar' 'foo**bar'': 
			test-tool wildmatch pathmatch 'foobazbar' 'foo**bar'
		
ok 307 - pathmatch: match 'foobazbar' 'foo**bar'

expecting success of 3070.308 'pathmatch (via ls-files): match 'foo**bar' 'foobazbar'': 
				printf '%s' 'foobazbar' >expect &&
				git ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 308 - pathmatch (via ls-files): match 'foo**bar' 'foobazbar'

expecting success of 3070.309 'ipathmatch: match 'foobazbar' 'foo**bar'': 
			test-tool wildmatch ipathmatch 'foobazbar' 'foo**bar'
		
ok 309 - ipathmatch: match 'foobazbar' 'foo**bar'

expecting success of 3070.310 'ipathmatch (via ls-files): match 'foo**bar' 'foobazbar'': 
				printf '%s' 'foobazbar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo**bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 310 - ipathmatch (via ls-files): match 'foo**bar' 'foobazbar'

expecting success of 3070.311 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foobazbar
ok 311 - cleanup after previous file test

expecting success of 3070.312 'setup match file test for foo/baz/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 312 - setup match file test for foo/baz/bar

expecting success of 3070.313 'wildmatch: match 'foo/baz/bar' 'foo/**/bar'': 
			test-tool wildmatch wildmatch 'foo/baz/bar' 'foo/**/bar'
		
ok 313 - wildmatch: match 'foo/baz/bar' 'foo/**/bar'

expecting success of 3070.314 'wildmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 314 - wildmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'

expecting success of 3070.315 'iwildmatch: match 'foo/baz/bar' 'foo/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/baz/bar' 'foo/**/bar'
		
ok 315 - iwildmatch: match 'foo/baz/bar' 'foo/**/bar'

expecting success of 3070.316 'iwildmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 316 - iwildmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'

expecting success of 3070.317 'pathmatch: match 'foo/baz/bar' 'foo/**/bar'': 
			test-tool wildmatch pathmatch 'foo/baz/bar' 'foo/**/bar'
		
ok 317 - pathmatch: match 'foo/baz/bar' 'foo/**/bar'

expecting success of 3070.318 'pathmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 318 - pathmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'

expecting success of 3070.319 'ipathmatch: match 'foo/baz/bar' 'foo/**/bar'': 
			test-tool wildmatch ipathmatch 'foo/baz/bar' 'foo/**/bar'
		
ok 319 - ipathmatch: match 'foo/baz/bar' 'foo/**/bar'

expecting success of 3070.320 'ipathmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 320 - ipathmatch (via ls-files): match 'foo/**/bar' 'foo/baz/bar'

expecting success of 3070.321 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 321 - cleanup after previous file test

expecting success of 3070.322 'setup match file test for foo/baz/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 322 - setup match file test for foo/baz/bar

expecting success of 3070.323 'wildmatch: match 'foo/baz/bar' 'foo/**/**/bar'': 
			test-tool wildmatch wildmatch 'foo/baz/bar' 'foo/**/**/bar'
		
ok 323 - wildmatch: match 'foo/baz/bar' 'foo/**/**/bar'

expecting success of 3070.324 'wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 324 - wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/baz/bar'

expecting success of 3070.325 'iwildmatch: match 'foo/baz/bar' 'foo/**/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/baz/bar' 'foo/**/**/bar'
		
ok 325 - iwildmatch: match 'foo/baz/bar' 'foo/**/**/bar'

expecting success of 3070.326 'iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/baz/bar'': 
				printf '%s' 'foo/baz/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 326 - iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/baz/bar'

expecting success of 3070.327 'pathmatch: no match 'foo/baz/bar' 'foo/**/**/bar'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/baz/bar' 'foo/**/**/bar'
		
ok 327 - pathmatch: no match 'foo/baz/bar' 'foo/**/**/bar'

expecting success of 3070.328 'pathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/baz/bar'': 
				>expect &&
				git ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 328 - pathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/baz/bar'

expecting success of 3070.329 'ipathmatch: no match 'foo/baz/bar' 'foo/**/**/bar'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/baz/bar' 'foo/**/**/bar'
		
ok 329 - ipathmatch: no match 'foo/baz/bar' 'foo/**/**/bar'

expecting success of 3070.330 'ipathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/baz/bar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 330 - ipathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/baz/bar'

expecting success of 3070.331 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 331 - cleanup after previous file test

expecting success of 3070.332 'setup match file test for foo/b/a/z/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 332 - setup match file test for foo/b/a/z/bar

expecting success of 3070.333 'wildmatch: match 'foo/b/a/z/bar' 'foo/**/bar'': 
			test-tool wildmatch wildmatch 'foo/b/a/z/bar' 'foo/**/bar'
		
ok 333 - wildmatch: match 'foo/b/a/z/bar' 'foo/**/bar'

expecting success of 3070.334 'wildmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 334 - wildmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.335 'iwildmatch: match 'foo/b/a/z/bar' 'foo/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/b/a/z/bar' 'foo/**/bar'
		
ok 335 - iwildmatch: match 'foo/b/a/z/bar' 'foo/**/bar'

expecting success of 3070.336 'iwildmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 336 - iwildmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.337 'pathmatch: match 'foo/b/a/z/bar' 'foo/**/bar'': 
			test-tool wildmatch pathmatch 'foo/b/a/z/bar' 'foo/**/bar'
		
ok 337 - pathmatch: match 'foo/b/a/z/bar' 'foo/**/bar'

expecting success of 3070.338 'pathmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 338 - pathmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.339 'ipathmatch: match 'foo/b/a/z/bar' 'foo/**/bar'': 
			test-tool wildmatch ipathmatch 'foo/b/a/z/bar' 'foo/**/bar'
		
ok 339 - ipathmatch: match 'foo/b/a/z/bar' 'foo/**/bar'

expecting success of 3070.340 'ipathmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 340 - ipathmatch (via ls-files): match 'foo/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.341 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 341 - cleanup after previous file test

expecting success of 3070.342 'setup match file test for foo/b/a/z/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 342 - setup match file test for foo/b/a/z/bar

expecting success of 3070.343 'wildmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'': 
			test-tool wildmatch wildmatch 'foo/b/a/z/bar' 'foo/**/**/bar'
		
ok 343 - wildmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'

expecting success of 3070.344 'wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 344 - wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.345 'iwildmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/b/a/z/bar' 'foo/**/**/bar'
		
ok 345 - iwildmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'

expecting success of 3070.346 'iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 346 - iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.347 'pathmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'': 
			test-tool wildmatch pathmatch 'foo/b/a/z/bar' 'foo/**/**/bar'
		
ok 347 - pathmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'

expecting success of 3070.348 'pathmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 348 - pathmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.349 'ipathmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'': 
			test-tool wildmatch ipathmatch 'foo/b/a/z/bar' 'foo/**/**/bar'
		
ok 349 - ipathmatch: match 'foo/b/a/z/bar' 'foo/**/**/bar'

expecting success of 3070.350 'ipathmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'': 
				printf '%s' 'foo/b/a/z/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 350 - ipathmatch (via ls-files): match 'foo/**/**/bar' 'foo/b/a/z/bar'

expecting success of 3070.351 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 351 - cleanup after previous file test

expecting success of 3070.352 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 352 - setup match file test for foo/bar

expecting success of 3070.353 'wildmatch: match 'foo/bar' 'foo/**/bar'': 
			test-tool wildmatch wildmatch 'foo/bar' 'foo/**/bar'
		
ok 353 - wildmatch: match 'foo/bar' 'foo/**/bar'

expecting success of 3070.354 'wildmatch (via ls-files): match 'foo/**/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 354 - wildmatch (via ls-files): match 'foo/**/bar' 'foo/bar'

expecting success of 3070.355 'iwildmatch: match 'foo/bar' 'foo/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/bar' 'foo/**/bar'
		
ok 355 - iwildmatch: match 'foo/bar' 'foo/**/bar'

expecting success of 3070.356 'iwildmatch (via ls-files): match 'foo/**/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 356 - iwildmatch (via ls-files): match 'foo/**/bar' 'foo/bar'

expecting success of 3070.357 'pathmatch: no match 'foo/bar' 'foo/**/bar'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/bar' 'foo/**/bar'
		
ok 357 - pathmatch: no match 'foo/bar' 'foo/**/bar'

expecting success of 3070.358 'pathmatch (via ls-files): no match 'foo/**/bar' 'foo/bar'': 
				>expect &&
				git ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 358 - pathmatch (via ls-files): no match 'foo/**/bar' 'foo/bar'

expecting success of 3070.359 'ipathmatch: no match 'foo/bar' 'foo/**/bar'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/bar' 'foo/**/bar'
		
ok 359 - ipathmatch: no match 'foo/bar' 'foo/**/bar'

expecting success of 3070.360 'ipathmatch (via ls-files): no match 'foo/**/bar' 'foo/bar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 360 - ipathmatch (via ls-files): no match 'foo/**/bar' 'foo/bar'

expecting success of 3070.361 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 361 - cleanup after previous file test

expecting success of 3070.362 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 362 - setup match file test for foo/bar

expecting success of 3070.363 'wildmatch: match 'foo/bar' 'foo/**/**/bar'': 
			test-tool wildmatch wildmatch 'foo/bar' 'foo/**/**/bar'
		
ok 363 - wildmatch: match 'foo/bar' 'foo/**/**/bar'

expecting success of 3070.364 'wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 364 - wildmatch (via ls-files): match 'foo/**/**/bar' 'foo/bar'

expecting success of 3070.365 'iwildmatch: match 'foo/bar' 'foo/**/**/bar'': 
			test-tool wildmatch iwildmatch 'foo/bar' 'foo/**/**/bar'
		
ok 365 - iwildmatch: match 'foo/bar' 'foo/**/**/bar'

expecting success of 3070.366 'iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 366 - iwildmatch (via ls-files): match 'foo/**/**/bar' 'foo/bar'

expecting success of 3070.367 'pathmatch: no match 'foo/bar' 'foo/**/**/bar'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/bar' 'foo/**/**/bar'
		
ok 367 - pathmatch: no match 'foo/bar' 'foo/**/**/bar'

expecting success of 3070.368 'pathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/bar'': 
				>expect &&
				git ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 368 - pathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/bar'

expecting success of 3070.369 'ipathmatch: no match 'foo/bar' 'foo/**/**/bar'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/bar' 'foo/**/**/bar'
		
ok 369 - ipathmatch: no match 'foo/bar' 'foo/**/**/bar'

expecting success of 3070.370 'ipathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/bar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**/**/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 370 - ipathmatch (via ls-files): no match 'foo/**/**/bar' 'foo/bar'

expecting success of 3070.371 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 371 - cleanup after previous file test

expecting success of 3070.372 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 372 - setup match file test for foo/bar

expecting success of 3070.373 'wildmatch: no match 'foo/bar' 'foo?bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo?bar'
		
ok 373 - wildmatch: no match 'foo/bar' 'foo?bar'

expecting success of 3070.374 'wildmatch (via ls-files): no match 'foo?bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 374 - wildmatch (via ls-files): no match 'foo?bar' 'foo/bar'

expecting success of 3070.375 'iwildmatch: no match 'foo/bar' 'foo?bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo?bar'
		
ok 375 - iwildmatch: no match 'foo/bar' 'foo?bar'

expecting success of 3070.376 'iwildmatch (via ls-files): no match 'foo?bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 376 - iwildmatch (via ls-files): no match 'foo?bar' 'foo/bar'

expecting success of 3070.377 'pathmatch: match 'foo/bar' 'foo?bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo?bar'
		
ok 377 - pathmatch: match 'foo/bar' 'foo?bar'

expecting success of 3070.378 'pathmatch (via ls-files): match 'foo?bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 378 - pathmatch (via ls-files): match 'foo?bar' 'foo/bar'

expecting success of 3070.379 'ipathmatch: match 'foo/bar' 'foo?bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo?bar'
		
ok 379 - ipathmatch: match 'foo/bar' 'foo?bar'

expecting success of 3070.380 'ipathmatch (via ls-files): match 'foo?bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 380 - ipathmatch (via ls-files): match 'foo?bar' 'foo/bar'

expecting success of 3070.381 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 381 - cleanup after previous file test

expecting success of 3070.382 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 382 - setup match file test for foo/bar

expecting success of 3070.383 'wildmatch: no match 'foo/bar' 'foo[/]bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo[/]bar'
		
ok 383 - wildmatch: no match 'foo/bar' 'foo[/]bar'

expecting success of 3070.384 'wildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 384 - wildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'

expecting success of 3070.385 'iwildmatch: no match 'foo/bar' 'foo[/]bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo[/]bar'
		
ok 385 - iwildmatch: no match 'foo/bar' 'foo[/]bar'

expecting success of 3070.386 'iwildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 386 - iwildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'

expecting success of 3070.387 'pathmatch: match 'foo/bar' 'foo[/]bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo[/]bar'
		
ok 387 - pathmatch: match 'foo/bar' 'foo[/]bar'

expecting success of 3070.388 'pathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 388 - pathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'

expecting success of 3070.389 'ipathmatch: match 'foo/bar' 'foo[/]bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo[/]bar'
		
ok 389 - ipathmatch: match 'foo/bar' 'foo[/]bar'

expecting success of 3070.390 'ipathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 390 - ipathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'

expecting success of 3070.391 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 391 - cleanup after previous file test

expecting success of 3070.392 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 392 - setup match file test for foo/bar

expecting success of 3070.393 'wildmatch: no match 'foo/bar' 'foo[^a-z]bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 393 - wildmatch: no match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.394 'wildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 394 - wildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.395 'iwildmatch: no match 'foo/bar' 'foo[^a-z]bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 395 - iwildmatch: no match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.396 'iwildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 396 - iwildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.397 'pathmatch: match 'foo/bar' 'foo[^a-z]bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 397 - pathmatch: match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.398 'pathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 398 - pathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.399 'ipathmatch: match 'foo/bar' 'foo[^a-z]bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 399 - ipathmatch: match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.400 'ipathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 400 - ipathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.401 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 401 - cleanup after previous file test

expecting success of 3070.402 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 402 - setup match file test for foo/bar

expecting success of 3070.403 'wildmatch: no match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 403 - wildmatch: no match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.404 'wildmatch (via ls-files): no match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 404 - wildmatch (via ls-files): no match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'

expecting success of 3070.405 'iwildmatch: no match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 405 - iwildmatch: no match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.406 'iwildmatch (via ls-files): no match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 406 - iwildmatch (via ls-files): no match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'

expecting success of 3070.407 'pathmatch: match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch pathmatch 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 407 - pathmatch: match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.408 'pathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 408 - pathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'

expecting success of 3070.409 'ipathmatch: match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 409 - ipathmatch: match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.410 'ipathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 410 - ipathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo/bar'

expecting success of 3070.411 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 411 - cleanup after previous file test

expecting success of 3070.412 'setup match file test for foo-bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 412 - setup match file test for foo-bar

expecting success of 3070.413 'wildmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch wildmatch 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 413 - wildmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.414 'wildmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'': 
				printf '%s' 'foo-bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 414 - wildmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'

expecting success of 3070.415 'iwildmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch iwildmatch 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 415 - iwildmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.416 'iwildmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'': 
				printf '%s' 'foo-bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 416 - iwildmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'

expecting success of 3070.417 'pathmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch pathmatch 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 417 - pathmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.418 'pathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'': 
				printf '%s' 'foo-bar' >expect &&
				git ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 418 - pathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'

expecting success of 3070.419 'ipathmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'': 
			test-tool wildmatch ipathmatch 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
		
ok 419 - ipathmatch: match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'

expecting success of 3070.420 'ipathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'': 
				printf '%s' 'foo-bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 420 - ipathmatch (via ls-files): match 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' 'foo-bar'

expecting success of 3070.421 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo-bar
ok 421 - cleanup after previous file test

expecting success of 3070.422 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 422 - setup match file test for foo

expecting success of 3070.423 'wildmatch: match 'foo' '**/foo'': 
			test-tool wildmatch wildmatch 'foo' '**/foo'
		
ok 423 - wildmatch: match 'foo' '**/foo'

expecting success of 3070.424 'wildmatch (via ls-files): match '**/foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 424 - wildmatch (via ls-files): match '**/foo' 'foo'

expecting success of 3070.425 'iwildmatch: match 'foo' '**/foo'': 
			test-tool wildmatch iwildmatch 'foo' '**/foo'
		
ok 425 - iwildmatch: match 'foo' '**/foo'

expecting success of 3070.426 'iwildmatch (via ls-files): match '**/foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 426 - iwildmatch (via ls-files): match '**/foo' 'foo'

expecting success of 3070.427 'pathmatch: no match 'foo' '**/foo'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' '**/foo'
		
ok 427 - pathmatch: no match 'foo' '**/foo'

expecting success of 3070.428 'pathmatch (via ls-files): no match '**/foo' 'foo'': 
				>expect &&
				git ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 428 - pathmatch (via ls-files): no match '**/foo' 'foo'

expecting success of 3070.429 'ipathmatch: no match 'foo' '**/foo'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' '**/foo'
		
ok 429 - ipathmatch: no match 'foo' '**/foo'

expecting success of 3070.430 'ipathmatch (via ls-files): no match '**/foo' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 430 - ipathmatch (via ls-files): no match '**/foo' 'foo'

expecting success of 3070.431 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 431 - cleanup after previous file test

expecting success of 3070.432 'setup match file test for XXX/foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 432 - setup match file test for XXX/foo

expecting success of 3070.433 'wildmatch: match 'XXX/foo' '**/foo'': 
			test-tool wildmatch wildmatch 'XXX/foo' '**/foo'
		
ok 433 - wildmatch: match 'XXX/foo' '**/foo'

expecting success of 3070.434 'wildmatch (via ls-files): match '**/foo' 'XXX/foo'': 
				printf '%s' 'XXX/foo' >expect &&
				git --glob-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 434 - wildmatch (via ls-files): match '**/foo' 'XXX/foo'

expecting success of 3070.435 'iwildmatch: match 'XXX/foo' '**/foo'': 
			test-tool wildmatch iwildmatch 'XXX/foo' '**/foo'
		
ok 435 - iwildmatch: match 'XXX/foo' '**/foo'

expecting success of 3070.436 'iwildmatch (via ls-files): match '**/foo' 'XXX/foo'': 
				printf '%s' 'XXX/foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 436 - iwildmatch (via ls-files): match '**/foo' 'XXX/foo'

expecting success of 3070.437 'pathmatch: match 'XXX/foo' '**/foo'': 
			test-tool wildmatch pathmatch 'XXX/foo' '**/foo'
		
ok 437 - pathmatch: match 'XXX/foo' '**/foo'

expecting success of 3070.438 'pathmatch (via ls-files): match '**/foo' 'XXX/foo'': 
				printf '%s' 'XXX/foo' >expect &&
				git ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 438 - pathmatch (via ls-files): match '**/foo' 'XXX/foo'

expecting success of 3070.439 'ipathmatch: match 'XXX/foo' '**/foo'': 
			test-tool wildmatch ipathmatch 'XXX/foo' '**/foo'
		
ok 439 - ipathmatch: match 'XXX/foo' '**/foo'

expecting success of 3070.440 'ipathmatch (via ls-files): match '**/foo' 'XXX/foo'': 
				printf '%s' 'XXX/foo' >expect &&
				git --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 440 - ipathmatch (via ls-files): match '**/foo' 'XXX/foo'

expecting success of 3070.441 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing XXX/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 441 - cleanup after previous file test

expecting success of 3070.442 'setup match file test for bar/baz/foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 442 - setup match file test for bar/baz/foo

expecting success of 3070.443 'wildmatch: match 'bar/baz/foo' '**/foo'': 
			test-tool wildmatch wildmatch 'bar/baz/foo' '**/foo'
		
ok 443 - wildmatch: match 'bar/baz/foo' '**/foo'

expecting success of 3070.444 'wildmatch (via ls-files): match '**/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git --glob-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 444 - wildmatch (via ls-files): match '**/foo' 'bar/baz/foo'

expecting success of 3070.445 'iwildmatch: match 'bar/baz/foo' '**/foo'': 
			test-tool wildmatch iwildmatch 'bar/baz/foo' '**/foo'
		
ok 445 - iwildmatch: match 'bar/baz/foo' '**/foo'

expecting success of 3070.446 'iwildmatch (via ls-files): match '**/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 446 - iwildmatch (via ls-files): match '**/foo' 'bar/baz/foo'

expecting success of 3070.447 'pathmatch: match 'bar/baz/foo' '**/foo'': 
			test-tool wildmatch pathmatch 'bar/baz/foo' '**/foo'
		
ok 447 - pathmatch: match 'bar/baz/foo' '**/foo'

expecting success of 3070.448 'pathmatch (via ls-files): match '**/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 448 - pathmatch (via ls-files): match '**/foo' 'bar/baz/foo'

expecting success of 3070.449 'ipathmatch: match 'bar/baz/foo' '**/foo'': 
			test-tool wildmatch ipathmatch 'bar/baz/foo' '**/foo'
		
ok 449 - ipathmatch: match 'bar/baz/foo' '**/foo'

expecting success of 3070.450 'ipathmatch (via ls-files): match '**/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git --icase-pathspecs ls-files -z -- '**/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 450 - ipathmatch (via ls-files): match '**/foo' 'bar/baz/foo'

expecting success of 3070.451 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing bar/
Removing expect
ok 451 - cleanup after previous file test

expecting success of 3070.452 'setup match file test for bar/baz/foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 452 - setup match file test for bar/baz/foo

expecting success of 3070.453 'wildmatch: no match 'bar/baz/foo' '*/foo'': 
			test_must_fail test-tool wildmatch wildmatch 'bar/baz/foo' '*/foo'
		
ok 453 - wildmatch: no match 'bar/baz/foo' '*/foo'

expecting success of 3070.454 'wildmatch (via ls-files): no match '*/foo' 'bar/baz/foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 454 - wildmatch (via ls-files): no match '*/foo' 'bar/baz/foo'

expecting success of 3070.455 'iwildmatch: no match 'bar/baz/foo' '*/foo'': 
			test_must_fail test-tool wildmatch iwildmatch 'bar/baz/foo' '*/foo'
		
ok 455 - iwildmatch: no match 'bar/baz/foo' '*/foo'

expecting success of 3070.456 'iwildmatch (via ls-files): no match '*/foo' 'bar/baz/foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 456 - iwildmatch (via ls-files): no match '*/foo' 'bar/baz/foo'

expecting success of 3070.457 'pathmatch: match 'bar/baz/foo' '*/foo'': 
			test-tool wildmatch pathmatch 'bar/baz/foo' '*/foo'
		
ok 457 - pathmatch: match 'bar/baz/foo' '*/foo'

expecting success of 3070.458 'pathmatch (via ls-files): match '*/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git ls-files -z -- '*/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 458 - pathmatch (via ls-files): match '*/foo' 'bar/baz/foo'

expecting success of 3070.459 'ipathmatch: match 'bar/baz/foo' '*/foo'': 
			test-tool wildmatch ipathmatch 'bar/baz/foo' '*/foo'
		
ok 459 - ipathmatch: match 'bar/baz/foo' '*/foo'

expecting success of 3070.460 'ipathmatch (via ls-files): match '*/foo' 'bar/baz/foo'': 
				printf '%s' 'bar/baz/foo' >expect &&
				git --icase-pathspecs ls-files -z -- '*/foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 460 - ipathmatch (via ls-files): match '*/foo' 'bar/baz/foo'

expecting success of 3070.461 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing bar/
Removing expect
ok 461 - cleanup after previous file test

expecting success of 3070.462 'setup match file test for foo/bar/baz': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 462 - setup match file test for foo/bar/baz

expecting success of 3070.463 'wildmatch: no match 'foo/bar/baz' '**/bar*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar/baz' '**/bar*'
		
ok 463 - wildmatch: no match 'foo/bar/baz' '**/bar*'

expecting success of 3070.464 'wildmatch (via ls-files): no match '**/bar*' 'foo/bar/baz'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '**/bar*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 464 - wildmatch (via ls-files): no match '**/bar*' 'foo/bar/baz'

expecting success of 3070.465 'iwildmatch: no match 'foo/bar/baz' '**/bar*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar/baz' '**/bar*'
		
ok 465 - iwildmatch: no match 'foo/bar/baz' '**/bar*'

expecting success of 3070.466 'iwildmatch (via ls-files): no match '**/bar*' 'foo/bar/baz'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/bar*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 466 - iwildmatch (via ls-files): no match '**/bar*' 'foo/bar/baz'

expecting success of 3070.467 'pathmatch: match 'foo/bar/baz' '**/bar*'': 
			test-tool wildmatch pathmatch 'foo/bar/baz' '**/bar*'
		
ok 467 - pathmatch: match 'foo/bar/baz' '**/bar*'

expecting success of 3070.468 'pathmatch (via ls-files): match '**/bar*' 'foo/bar/baz'': 
				printf '%s' 'foo/bar/baz' >expect &&
				git ls-files -z -- '**/bar*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 468 - pathmatch (via ls-files): match '**/bar*' 'foo/bar/baz'

expecting success of 3070.469 'ipathmatch: match 'foo/bar/baz' '**/bar*'': 
			test-tool wildmatch ipathmatch 'foo/bar/baz' '**/bar*'
		
ok 469 - ipathmatch: match 'foo/bar/baz' '**/bar*'

expecting success of 3070.470 'ipathmatch (via ls-files): match '**/bar*' 'foo/bar/baz'': 
				printf '%s' 'foo/bar/baz' >expect &&
				git --icase-pathspecs ls-files -z -- '**/bar*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 470 - ipathmatch (via ls-files): match '**/bar*' 'foo/bar/baz'

expecting success of 3070.471 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 471 - cleanup after previous file test

expecting success of 3070.472 'setup match file test for deep/foo/bar/baz': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 472 - setup match file test for deep/foo/bar/baz

expecting success of 3070.473 'wildmatch: match 'deep/foo/bar/baz' '**/bar/*'': 
			test-tool wildmatch wildmatch 'deep/foo/bar/baz' '**/bar/*'
		
ok 473 - wildmatch: match 'deep/foo/bar/baz' '**/bar/*'

expecting success of 3070.474 'wildmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'': 
				printf '%s' 'deep/foo/bar/baz' >expect &&
				git --glob-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 474 - wildmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'

expecting success of 3070.475 'iwildmatch: match 'deep/foo/bar/baz' '**/bar/*'': 
			test-tool wildmatch iwildmatch 'deep/foo/bar/baz' '**/bar/*'
		
ok 475 - iwildmatch: match 'deep/foo/bar/baz' '**/bar/*'

expecting success of 3070.476 'iwildmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'': 
				printf '%s' 'deep/foo/bar/baz' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 476 - iwildmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'

expecting success of 3070.477 'pathmatch: match 'deep/foo/bar/baz' '**/bar/*'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/baz' '**/bar/*'
		
ok 477 - pathmatch: match 'deep/foo/bar/baz' '**/bar/*'

expecting success of 3070.478 'pathmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'': 
				printf '%s' 'deep/foo/bar/baz' >expect &&
				git ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 478 - pathmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'

expecting success of 3070.479 'ipathmatch: match 'deep/foo/bar/baz' '**/bar/*'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/baz' '**/bar/*'
		
ok 479 - ipathmatch: match 'deep/foo/bar/baz' '**/bar/*'

expecting success of 3070.480 'ipathmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'': 
				printf '%s' 'deep/foo/bar/baz' >expect &&
				git --icase-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 480 - ipathmatch (via ls-files): match '**/bar/*' 'deep/foo/bar/baz'

expecting success of 3070.481 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing deep/
Removing expect
ok 481 - cleanup after previous file test

expecting success of 3070.482 'setup match file test for deep/foo/bar/baz/': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 482 - setup match file test for deep/foo/bar/baz/

expecting success of 3070.483 'wildmatch: no match 'deep/foo/bar/baz/' '**/bar/*'': 
			test_must_fail test-tool wildmatch wildmatch 'deep/foo/bar/baz/' '**/bar/*'
		
ok 483 - wildmatch: no match 'deep/foo/bar/baz/' '**/bar/*'

checking known breakage of 3070.484 'wildmatch (via ls-files): no match skip '**/bar/*' 'deep/foo/bar/baz/'': false
not ok 484 - wildmatch (via ls-files): no match skip '**/bar/*' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.485 'iwildmatch: no match 'deep/foo/bar/baz/' '**/bar/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'deep/foo/bar/baz/' '**/bar/*'
		
ok 485 - iwildmatch: no match 'deep/foo/bar/baz/' '**/bar/*'

checking known breakage of 3070.486 'iwildmatch (via ls-files): no match skip '**/bar/*' 'deep/foo/bar/baz/'': false
not ok 486 - iwildmatch (via ls-files): no match skip '**/bar/*' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.487 'pathmatch: match 'deep/foo/bar/baz/' '**/bar/*'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/baz/' '**/bar/*'
		
ok 487 - pathmatch: match 'deep/foo/bar/baz/' '**/bar/*'

checking known breakage of 3070.488 'pathmatch (via ls-files): match skip '**/bar/*' 'deep/foo/bar/baz/'': false
not ok 488 - pathmatch (via ls-files): match skip '**/bar/*' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.489 'ipathmatch: match 'deep/foo/bar/baz/' '**/bar/*'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/baz/' '**/bar/*'
		
ok 489 - ipathmatch: match 'deep/foo/bar/baz/' '**/bar/*'

checking known breakage of 3070.490 'ipathmatch (via ls-files): match skip '**/bar/*' 'deep/foo/bar/baz/'': false
not ok 490 - ipathmatch (via ls-files): match skip '**/bar/*' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.491 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 491 - cleanup after previous file test

expecting success of 3070.492 'setup match file test for deep/foo/bar/baz/': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 492 - setup match file test for deep/foo/bar/baz/

expecting success of 3070.493 'wildmatch: match 'deep/foo/bar/baz/' '**/bar/**'': 
			test-tool wildmatch wildmatch 'deep/foo/bar/baz/' '**/bar/**'
		
ok 493 - wildmatch: match 'deep/foo/bar/baz/' '**/bar/**'

checking known breakage of 3070.494 'wildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/'': false
not ok 494 - wildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.495 'iwildmatch: match 'deep/foo/bar/baz/' '**/bar/**'': 
			test-tool wildmatch iwildmatch 'deep/foo/bar/baz/' '**/bar/**'
		
ok 495 - iwildmatch: match 'deep/foo/bar/baz/' '**/bar/**'

checking known breakage of 3070.496 'iwildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/'': false
not ok 496 - iwildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.497 'pathmatch: match 'deep/foo/bar/baz/' '**/bar/**'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/baz/' '**/bar/**'
		
ok 497 - pathmatch: match 'deep/foo/bar/baz/' '**/bar/**'

checking known breakage of 3070.498 'pathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/'': false
not ok 498 - pathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.499 'ipathmatch: match 'deep/foo/bar/baz/' '**/bar/**'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/baz/' '**/bar/**'
		
ok 499 - ipathmatch: match 'deep/foo/bar/baz/' '**/bar/**'

checking known breakage of 3070.500 'ipathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/'': false
not ok 500 - ipathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/baz/' # TODO known breakage

expecting success of 3070.501 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 501 - cleanup after previous file test

expecting success of 3070.502 'setup match file test for deep/foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 502 - setup match file test for deep/foo/bar

expecting success of 3070.503 'wildmatch: no match 'deep/foo/bar' '**/bar/*'': 
			test_must_fail test-tool wildmatch wildmatch 'deep/foo/bar' '**/bar/*'
		
ok 503 - wildmatch: no match 'deep/foo/bar' '**/bar/*'

expecting success of 3070.504 'wildmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 504 - wildmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'

expecting success of 3070.505 'iwildmatch: no match 'deep/foo/bar' '**/bar/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'deep/foo/bar' '**/bar/*'
		
ok 505 - iwildmatch: no match 'deep/foo/bar' '**/bar/*'

expecting success of 3070.506 'iwildmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 506 - iwildmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'

expecting success of 3070.507 'pathmatch: no match 'deep/foo/bar' '**/bar/*'': 
			test_must_fail test-tool wildmatch pathmatch 'deep/foo/bar' '**/bar/*'
		
ok 507 - pathmatch: no match 'deep/foo/bar' '**/bar/*'

expecting success of 3070.508 'pathmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'': 
				>expect &&
				git ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 508 - pathmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'

expecting success of 3070.509 'ipathmatch: no match 'deep/foo/bar' '**/bar/*'': 
			test_must_fail test-tool wildmatch ipathmatch 'deep/foo/bar' '**/bar/*'
		
ok 509 - ipathmatch: no match 'deep/foo/bar' '**/bar/*'

expecting success of 3070.510 'ipathmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '**/bar/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 510 - ipathmatch (via ls-files): no match '**/bar/*' 'deep/foo/bar'

expecting success of 3070.511 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing deep/
Removing expect
ok 511 - cleanup after previous file test

expecting success of 3070.512 'setup match file test for deep/foo/bar/': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 512 - setup match file test for deep/foo/bar/

expecting success of 3070.513 'wildmatch: match 'deep/foo/bar/' '**/bar/**'': 
			test-tool wildmatch wildmatch 'deep/foo/bar/' '**/bar/**'
		
ok 513 - wildmatch: match 'deep/foo/bar/' '**/bar/**'

checking known breakage of 3070.514 'wildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/'': false
not ok 514 - wildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/' # TODO known breakage

expecting success of 3070.515 'iwildmatch: match 'deep/foo/bar/' '**/bar/**'': 
			test-tool wildmatch iwildmatch 'deep/foo/bar/' '**/bar/**'
		
ok 515 - iwildmatch: match 'deep/foo/bar/' '**/bar/**'

checking known breakage of 3070.516 'iwildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/'': false
not ok 516 - iwildmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/' # TODO known breakage

expecting success of 3070.517 'pathmatch: match 'deep/foo/bar/' '**/bar/**'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/' '**/bar/**'
		
ok 517 - pathmatch: match 'deep/foo/bar/' '**/bar/**'

checking known breakage of 3070.518 'pathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/'': false
not ok 518 - pathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/' # TODO known breakage

expecting success of 3070.519 'ipathmatch: match 'deep/foo/bar/' '**/bar/**'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/' '**/bar/**'
		
ok 519 - ipathmatch: match 'deep/foo/bar/' '**/bar/**'

checking known breakage of 3070.520 'ipathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/'': false
not ok 520 - ipathmatch (via ls-files): match skip '**/bar/**' 'deep/foo/bar/' # TODO known breakage

expecting success of 3070.521 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 521 - cleanup after previous file test

expecting success of 3070.522 'setup match file test for foo/bar/baz': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 522 - setup match file test for foo/bar/baz

expecting success of 3070.523 'wildmatch: no match 'foo/bar/baz' '**/bar**'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar/baz' '**/bar**'
		
ok 523 - wildmatch: no match 'foo/bar/baz' '**/bar**'

expecting success of 3070.524 'wildmatch (via ls-files): no match '**/bar**' 'foo/bar/baz'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '**/bar**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 524 - wildmatch (via ls-files): no match '**/bar**' 'foo/bar/baz'

expecting success of 3070.525 'iwildmatch: no match 'foo/bar/baz' '**/bar**'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar/baz' '**/bar**'
		
ok 525 - iwildmatch: no match 'foo/bar/baz' '**/bar**'

expecting success of 3070.526 'iwildmatch (via ls-files): no match '**/bar**' 'foo/bar/baz'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/bar**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 526 - iwildmatch (via ls-files): no match '**/bar**' 'foo/bar/baz'

expecting success of 3070.527 'pathmatch: match 'foo/bar/baz' '**/bar**'': 
			test-tool wildmatch pathmatch 'foo/bar/baz' '**/bar**'
		
ok 527 - pathmatch: match 'foo/bar/baz' '**/bar**'

expecting success of 3070.528 'pathmatch (via ls-files): match '**/bar**' 'foo/bar/baz'': 
				printf '%s' 'foo/bar/baz' >expect &&
				git ls-files -z -- '**/bar**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 528 - pathmatch (via ls-files): match '**/bar**' 'foo/bar/baz'

expecting success of 3070.529 'ipathmatch: match 'foo/bar/baz' '**/bar**'': 
			test-tool wildmatch ipathmatch 'foo/bar/baz' '**/bar**'
		
ok 529 - ipathmatch: match 'foo/bar/baz' '**/bar**'

expecting success of 3070.530 'ipathmatch (via ls-files): match '**/bar**' 'foo/bar/baz'': 
				printf '%s' 'foo/bar/baz' >expect &&
				git --icase-pathspecs ls-files -z -- '**/bar**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 530 - ipathmatch (via ls-files): match '**/bar**' 'foo/bar/baz'

expecting success of 3070.531 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 531 - cleanup after previous file test

expecting success of 3070.532 'setup match file test for foo/bar/baz/x': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 532 - setup match file test for foo/bar/baz/x

expecting success of 3070.533 'wildmatch: match 'foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch wildmatch 'foo/bar/baz/x' '*/bar/**'
		
ok 533 - wildmatch: match 'foo/bar/baz/x' '*/bar/**'

expecting success of 3070.534 'wildmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'': 
				printf '%s' 'foo/bar/baz/x' >expect &&
				git --glob-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 534 - wildmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'

expecting success of 3070.535 'iwildmatch: match 'foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch iwildmatch 'foo/bar/baz/x' '*/bar/**'
		
ok 535 - iwildmatch: match 'foo/bar/baz/x' '*/bar/**'

expecting success of 3070.536 'iwildmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'': 
				printf '%s' 'foo/bar/baz/x' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 536 - iwildmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'

expecting success of 3070.537 'pathmatch: match 'foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch pathmatch 'foo/bar/baz/x' '*/bar/**'
		
ok 537 - pathmatch: match 'foo/bar/baz/x' '*/bar/**'

expecting success of 3070.538 'pathmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'': 
				printf '%s' 'foo/bar/baz/x' >expect &&
				git ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 538 - pathmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'

expecting success of 3070.539 'ipathmatch: match 'foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch ipathmatch 'foo/bar/baz/x' '*/bar/**'
		
ok 539 - ipathmatch: match 'foo/bar/baz/x' '*/bar/**'

expecting success of 3070.540 'ipathmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'': 
				printf '%s' 'foo/bar/baz/x' >expect &&
				git --icase-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 540 - ipathmatch (via ls-files): match '*/bar/**' 'foo/bar/baz/x'

expecting success of 3070.541 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 541 - cleanup after previous file test

expecting success of 3070.542 'setup match file test for deep/foo/bar/baz/x': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 542 - setup match file test for deep/foo/bar/baz/x

expecting success of 3070.543 'wildmatch: no match 'deep/foo/bar/baz/x' '*/bar/**'': 
			test_must_fail test-tool wildmatch wildmatch 'deep/foo/bar/baz/x' '*/bar/**'
		
ok 543 - wildmatch: no match 'deep/foo/bar/baz/x' '*/bar/**'

expecting success of 3070.544 'wildmatch (via ls-files): no match '*/bar/**' 'deep/foo/bar/baz/x'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 544 - wildmatch (via ls-files): no match '*/bar/**' 'deep/foo/bar/baz/x'

expecting success of 3070.545 'iwildmatch: no match 'deep/foo/bar/baz/x' '*/bar/**'': 
			test_must_fail test-tool wildmatch iwildmatch 'deep/foo/bar/baz/x' '*/bar/**'
		
ok 545 - iwildmatch: no match 'deep/foo/bar/baz/x' '*/bar/**'

expecting success of 3070.546 'iwildmatch (via ls-files): no match '*/bar/**' 'deep/foo/bar/baz/x'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 546 - iwildmatch (via ls-files): no match '*/bar/**' 'deep/foo/bar/baz/x'

expecting success of 3070.547 'pathmatch: match 'deep/foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/baz/x' '*/bar/**'
		
ok 547 - pathmatch: match 'deep/foo/bar/baz/x' '*/bar/**'

expecting success of 3070.548 'pathmatch (via ls-files): match '*/bar/**' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 548 - pathmatch (via ls-files): match '*/bar/**' 'deep/foo/bar/baz/x'

expecting success of 3070.549 'ipathmatch: match 'deep/foo/bar/baz/x' '*/bar/**'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/baz/x' '*/bar/**'
		
ok 549 - ipathmatch: match 'deep/foo/bar/baz/x' '*/bar/**'

expecting success of 3070.550 'ipathmatch (via ls-files): match '*/bar/**' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git --icase-pathspecs ls-files -z -- '*/bar/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 550 - ipathmatch (via ls-files): match '*/bar/**' 'deep/foo/bar/baz/x'

expecting success of 3070.551 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing deep/
Removing expect
ok 551 - cleanup after previous file test

expecting success of 3070.552 'setup match file test for deep/foo/bar/baz/x': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 552 - setup match file test for deep/foo/bar/baz/x

expecting success of 3070.553 'wildmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'': 
			test-tool wildmatch wildmatch 'deep/foo/bar/baz/x' '**/bar/*/*'
		
ok 553 - wildmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'

expecting success of 3070.554 'wildmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git --glob-pathspecs ls-files -z -- '**/bar/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 554 - wildmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'

expecting success of 3070.555 'iwildmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'': 
			test-tool wildmatch iwildmatch 'deep/foo/bar/baz/x' '**/bar/*/*'
		
ok 555 - iwildmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'

expecting success of 3070.556 'iwildmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/bar/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 556 - iwildmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'

expecting success of 3070.557 'pathmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'': 
			test-tool wildmatch pathmatch 'deep/foo/bar/baz/x' '**/bar/*/*'
		
ok 557 - pathmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'

expecting success of 3070.558 'pathmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git ls-files -z -- '**/bar/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 558 - pathmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'

expecting success of 3070.559 'ipathmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'': 
			test-tool wildmatch ipathmatch 'deep/foo/bar/baz/x' '**/bar/*/*'
		
ok 559 - ipathmatch: match 'deep/foo/bar/baz/x' '**/bar/*/*'

expecting success of 3070.560 'ipathmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'': 
				printf '%s' 'deep/foo/bar/baz/x' >expect &&
				git --icase-pathspecs ls-files -z -- '**/bar/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 560 - ipathmatch (via ls-files): match '**/bar/*/*' 'deep/foo/bar/baz/x'

expecting success of 3070.561 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing deep/
Removing expect
ok 561 - cleanup after previous file test

expecting success of 3070.562 'setup match file test for acrt': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 562 - setup match file test for acrt

expecting success of 3070.563 'wildmatch: no match 'acrt' 'a[c-c]st'': 
			test_must_fail test-tool wildmatch wildmatch 'acrt' 'a[c-c]st'
		
ok 563 - wildmatch: no match 'acrt' 'a[c-c]st'

expecting success of 3070.564 'wildmatch (via ls-files): no match 'a[c-c]st' 'acrt'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'a[c-c]st' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 564 - wildmatch (via ls-files): no match 'a[c-c]st' 'acrt'

expecting success of 3070.565 'iwildmatch: no match 'acrt' 'a[c-c]st'': 
			test_must_fail test-tool wildmatch iwildmatch 'acrt' 'a[c-c]st'
		
ok 565 - iwildmatch: no match 'acrt' 'a[c-c]st'

expecting success of 3070.566 'iwildmatch (via ls-files): no match 'a[c-c]st' 'acrt'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[c-c]st' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 566 - iwildmatch (via ls-files): no match 'a[c-c]st' 'acrt'

expecting success of 3070.567 'pathmatch: no match 'acrt' 'a[c-c]st'': 
			test_must_fail test-tool wildmatch pathmatch 'acrt' 'a[c-c]st'
		
ok 567 - pathmatch: no match 'acrt' 'a[c-c]st'

expecting success of 3070.568 'pathmatch (via ls-files): no match 'a[c-c]st' 'acrt'': 
				>expect &&
				git ls-files -z -- 'a[c-c]st' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 568 - pathmatch (via ls-files): no match 'a[c-c]st' 'acrt'

expecting success of 3070.569 'ipathmatch: no match 'acrt' 'a[c-c]st'': 
			test_must_fail test-tool wildmatch ipathmatch 'acrt' 'a[c-c]st'
		
ok 569 - ipathmatch: no match 'acrt' 'a[c-c]st'

expecting success of 3070.570 'ipathmatch (via ls-files): no match 'a[c-c]st' 'acrt'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'a[c-c]st' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 570 - ipathmatch (via ls-files): no match 'a[c-c]st' 'acrt'

expecting success of 3070.571 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing acrt
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 571 - cleanup after previous file test

expecting success of 3070.572 'setup match file test for acrt': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 572 - setup match file test for acrt

expecting success of 3070.573 'wildmatch: match 'acrt' 'a[c-c]rt'': 
			test-tool wildmatch wildmatch 'acrt' 'a[c-c]rt'
		
ok 573 - wildmatch: match 'acrt' 'a[c-c]rt'

expecting success of 3070.574 'wildmatch (via ls-files): match 'a[c-c]rt' 'acrt'': 
				printf '%s' 'acrt' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[c-c]rt' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 574 - wildmatch (via ls-files): match 'a[c-c]rt' 'acrt'

expecting success of 3070.575 'iwildmatch: match 'acrt' 'a[c-c]rt'': 
			test-tool wildmatch iwildmatch 'acrt' 'a[c-c]rt'
		
ok 575 - iwildmatch: match 'acrt' 'a[c-c]rt'

expecting success of 3070.576 'iwildmatch (via ls-files): match 'a[c-c]rt' 'acrt'': 
				printf '%s' 'acrt' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[c-c]rt' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 576 - iwildmatch (via ls-files): match 'a[c-c]rt' 'acrt'

expecting success of 3070.577 'pathmatch: match 'acrt' 'a[c-c]rt'': 
			test-tool wildmatch pathmatch 'acrt' 'a[c-c]rt'
		
ok 577 - pathmatch: match 'acrt' 'a[c-c]rt'

expecting success of 3070.578 'pathmatch (via ls-files): match 'a[c-c]rt' 'acrt'': 
				printf '%s' 'acrt' >expect &&
				git ls-files -z -- 'a[c-c]rt' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 578 - pathmatch (via ls-files): match 'a[c-c]rt' 'acrt'

expecting success of 3070.579 'ipathmatch: match 'acrt' 'a[c-c]rt'': 
			test-tool wildmatch ipathmatch 'acrt' 'a[c-c]rt'
		
ok 579 - ipathmatch: match 'acrt' 'a[c-c]rt'

expecting success of 3070.580 'ipathmatch (via ls-files): match 'a[c-c]rt' 'acrt'': 
				printf '%s' 'acrt' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[c-c]rt' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 580 - ipathmatch (via ls-files): match 'a[c-c]rt' 'acrt'

expecting success of 3070.581 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing acrt
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 581 - cleanup after previous file test

expecting success of 3070.582 'setup match file test for ]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 582 - setup match file test for ]

expecting success of 3070.583 'wildmatch: no match ']' '[!]-]'': 
			test_must_fail test-tool wildmatch wildmatch ']' '[!]-]'
		
ok 583 - wildmatch: no match ']' '[!]-]'

expecting success of 3070.584 'wildmatch (via ls-files): no match '[!]-]' ']'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 584 - wildmatch (via ls-files): no match '[!]-]' ']'

expecting success of 3070.585 'iwildmatch: no match ']' '[!]-]'': 
			test_must_fail test-tool wildmatch iwildmatch ']' '[!]-]'
		
ok 585 - iwildmatch: no match ']' '[!]-]'

expecting success of 3070.586 'iwildmatch (via ls-files): no match '[!]-]' ']'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 586 - iwildmatch (via ls-files): no match '[!]-]' ']'

expecting success of 3070.587 'pathmatch: no match ']' '[!]-]'': 
			test_must_fail test-tool wildmatch pathmatch ']' '[!]-]'
		
ok 587 - pathmatch: no match ']' '[!]-]'

expecting success of 3070.588 'pathmatch (via ls-files): no match '[!]-]' ']'': 
				>expect &&
				git ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 588 - pathmatch (via ls-files): no match '[!]-]' ']'

expecting success of 3070.589 'ipathmatch: no match ']' '[!]-]'': 
			test_must_fail test-tool wildmatch ipathmatch ']' '[!]-]'
		
ok 589 - ipathmatch: no match ']' '[!]-]'

expecting success of 3070.590 'ipathmatch (via ls-files): no match '[!]-]' ']'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 590 - ipathmatch (via ls-files): no match '[!]-]' ']'

expecting success of 3070.591 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 591 - cleanup after previous file test

expecting success of 3070.592 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 592 - setup match file test for a

expecting success of 3070.593 'wildmatch: match 'a' '[!]-]'': 
			test-tool wildmatch wildmatch 'a' '[!]-]'
		
ok 593 - wildmatch: match 'a' '[!]-]'

expecting success of 3070.594 'wildmatch (via ls-files): match '[!]-]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 594 - wildmatch (via ls-files): match '[!]-]' 'a'

expecting success of 3070.595 'iwildmatch: match 'a' '[!]-]'': 
			test-tool wildmatch iwildmatch 'a' '[!]-]'
		
ok 595 - iwildmatch: match 'a' '[!]-]'

expecting success of 3070.596 'iwildmatch (via ls-files): match '[!]-]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 596 - iwildmatch (via ls-files): match '[!]-]' 'a'

expecting success of 3070.597 'pathmatch: match 'a' '[!]-]'': 
			test-tool wildmatch pathmatch 'a' '[!]-]'
		
ok 597 - pathmatch: match 'a' '[!]-]'

expecting success of 3070.598 'pathmatch (via ls-files): match '[!]-]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 598 - pathmatch (via ls-files): match '[!]-]' 'a'

expecting success of 3070.599 'ipathmatch: match 'a' '[!]-]'': 
			test-tool wildmatch ipathmatch 'a' '[!]-]'
		
ok 599 - ipathmatch: match 'a' '[!]-]'

expecting success of 3070.600 'ipathmatch (via ls-files): match '[!]-]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[!]-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 600 - ipathmatch (via ls-files): match '[!]-]' 'a'

expecting success of 3070.601 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 601 - cleanup after previous file test

expecting success of 3070.602 'setup match file test for ': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 602 - setup match file test for 

expecting success of 3070.603 'wildmatch: no match '' '\'': 
			test_must_fail test-tool wildmatch wildmatch '' '\'
		
ok 603 - wildmatch: no match '' '\'

checking known breakage of 3070.604 'wildmatch (via ls-files): no match skip '\' ''': false
not ok 604 - wildmatch (via ls-files): no match skip '\' '' # TODO known breakage

expecting success of 3070.605 'iwildmatch: no match '' '\'': 
			test_must_fail test-tool wildmatch iwildmatch '' '\'
		
ok 605 - iwildmatch: no match '' '\'

checking known breakage of 3070.606 'iwildmatch (via ls-files): no match skip '\' ''': false
not ok 606 - iwildmatch (via ls-files): no match skip '\' '' # TODO known breakage

expecting success of 3070.607 'pathmatch: no match '' '\'': 
			test_must_fail test-tool wildmatch pathmatch '' '\'
		
ok 607 - pathmatch: no match '' '\'

checking known breakage of 3070.608 'pathmatch (via ls-files): no match skip '\' ''': false
not ok 608 - pathmatch (via ls-files): no match skip '\' '' # TODO known breakage

expecting success of 3070.609 'ipathmatch: no match '' '\'': 
			test_must_fail test-tool wildmatch ipathmatch '' '\'
		
ok 609 - ipathmatch: no match '' '\'

checking known breakage of 3070.610 'ipathmatch (via ls-files): no match skip '\' ''': false
not ok 610 - ipathmatch (via ls-files): no match skip '\' '' # TODO known breakage

expecting success of 3070.611 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 611 - cleanup after previous file test

expecting success of 3070.612 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 612 - setup match file test for \

expecting success of 3070.613 'wildmatch: no match '\' '\'': 
			test_must_fail test-tool wildmatch wildmatch '\' '\'
		
ok 613 - wildmatch: no match '\' '\'

expecting success of 3070.614 'wildmatch (via ls-files): match '\' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs ls-files -z -- '\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 614 - wildmatch (via ls-files): match '\' '\'

expecting success of 3070.615 'iwildmatch: no match '\' '\'': 
			test_must_fail test-tool wildmatch iwildmatch '\' '\'
		
ok 615 - iwildmatch: no match '\' '\'

expecting success of 3070.616 'iwildmatch (via ls-files): match '\' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 616 - iwildmatch (via ls-files): match '\' '\'

expecting success of 3070.617 'pathmatch: no match '\' '\'': 
			test_must_fail test-tool wildmatch pathmatch '\' '\'
		
ok 617 - pathmatch: no match '\' '\'

expecting success of 3070.618 'pathmatch (via ls-files): match '\' '\'': 
				printf '%s' '\' >expect &&
				git ls-files -z -- '\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 618 - pathmatch (via ls-files): match '\' '\'

expecting success of 3070.619 'ipathmatch: no match '\' '\'': 
			test_must_fail test-tool wildmatch ipathmatch '\' '\'
		
ok 619 - ipathmatch: no match '\' '\'

expecting success of 3070.620 'ipathmatch (via ls-files): match '\' '\'': 
				printf '%s' '\' >expect &&
				git --icase-pathspecs ls-files -z -- '\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 620 - ipathmatch (via ls-files): match '\' '\'

expecting success of 3070.621 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 621 - cleanup after previous file test

expecting success of 3070.622 'setup match file test for XXX/\': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 622 - setup match file test for XXX/\

expecting success of 3070.623 'wildmatch: no match 'XXX/\' '*/\'': 
			test_must_fail test-tool wildmatch wildmatch 'XXX/\' '*/\'
		
ok 623 - wildmatch: no match 'XXX/\' '*/\'

expecting success of 3070.624 'wildmatch (via ls-files): no match '*/\' 'XXX/\'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 624 - wildmatch (via ls-files): no match '*/\' 'XXX/\'

expecting success of 3070.625 'iwildmatch: no match 'XXX/\' '*/\'': 
			test_must_fail test-tool wildmatch iwildmatch 'XXX/\' '*/\'
		
ok 625 - iwildmatch: no match 'XXX/\' '*/\'

expecting success of 3070.626 'iwildmatch (via ls-files): no match '*/\' 'XXX/\'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 626 - iwildmatch (via ls-files): no match '*/\' 'XXX/\'

expecting success of 3070.627 'pathmatch: no match 'XXX/\' '*/\'': 
			test_must_fail test-tool wildmatch pathmatch 'XXX/\' '*/\'
		
ok 627 - pathmatch: no match 'XXX/\' '*/\'

expecting success of 3070.628 'pathmatch (via ls-files): no match '*/\' 'XXX/\'': 
				>expect &&
				git ls-files -z -- '*/\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 628 - pathmatch (via ls-files): no match '*/\' 'XXX/\'

expecting success of 3070.629 'ipathmatch: no match 'XXX/\' '*/\'': 
			test_must_fail test-tool wildmatch ipathmatch 'XXX/\' '*/\'
		
ok 629 - ipathmatch: no match 'XXX/\' '*/\'

expecting success of 3070.630 'ipathmatch (via ls-files): no match '*/\' 'XXX/\'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '*/\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 630 - ipathmatch (via ls-files): no match '*/\' 'XXX/\'

expecting success of 3070.631 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing XXX/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 631 - cleanup after previous file test

expecting success of 3070.632 'setup match file test for XXX/\': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 632 - setup match file test for XXX/\

expecting success of 3070.633 'wildmatch: match 'XXX/\' '*/\\'': 
			test-tool wildmatch wildmatch 'XXX/\' '*/\\'
		
ok 633 - wildmatch: match 'XXX/\' '*/\\'

expecting success of 3070.634 'wildmatch (via ls-files): match '*/\\' 'XXX/\'': 
				printf '%s' 'XXX/\' >expect &&
				git --glob-pathspecs ls-files -z -- '*/\\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 634 - wildmatch (via ls-files): match '*/\\' 'XXX/\'

expecting success of 3070.635 'iwildmatch: match 'XXX/\' '*/\\'': 
			test-tool wildmatch iwildmatch 'XXX/\' '*/\\'
		
ok 635 - iwildmatch: match 'XXX/\' '*/\\'

expecting success of 3070.636 'iwildmatch (via ls-files): match '*/\\' 'XXX/\'': 
				printf '%s' 'XXX/\' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/\\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 636 - iwildmatch (via ls-files): match '*/\\' 'XXX/\'

expecting success of 3070.637 'pathmatch: match 'XXX/\' '*/\\'': 
			test-tool wildmatch pathmatch 'XXX/\' '*/\\'
		
ok 637 - pathmatch: match 'XXX/\' '*/\\'

expecting success of 3070.638 'pathmatch (via ls-files): match '*/\\' 'XXX/\'': 
				printf '%s' 'XXX/\' >expect &&
				git ls-files -z -- '*/\\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 638 - pathmatch (via ls-files): match '*/\\' 'XXX/\'

expecting success of 3070.639 'ipathmatch: match 'XXX/\' '*/\\'': 
			test-tool wildmatch ipathmatch 'XXX/\' '*/\\'
		
ok 639 - ipathmatch: match 'XXX/\' '*/\\'

expecting success of 3070.640 'ipathmatch (via ls-files): match '*/\\' 'XXX/\'': 
				printf '%s' 'XXX/\' >expect &&
				git --icase-pathspecs ls-files -z -- '*/\\' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 640 - ipathmatch (via ls-files): match '*/\\' 'XXX/\'

expecting success of 3070.641 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing XXX/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 641 - cleanup after previous file test

expecting success of 3070.642 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 642 - setup match file test for foo

expecting success of 3070.643 'wildmatch: match 'foo' 'foo'': 
			test-tool wildmatch wildmatch 'foo' 'foo'
		
ok 643 - wildmatch: match 'foo' 'foo'

expecting success of 3070.644 'wildmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 644 - wildmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.645 'iwildmatch: match 'foo' 'foo'': 
			test-tool wildmatch iwildmatch 'foo' 'foo'
		
ok 645 - iwildmatch: match 'foo' 'foo'

expecting success of 3070.646 'iwildmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 646 - iwildmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.647 'pathmatch: match 'foo' 'foo'': 
			test-tool wildmatch pathmatch 'foo' 'foo'
		
ok 647 - pathmatch: match 'foo' 'foo'

expecting success of 3070.648 'pathmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 648 - pathmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.649 'ipathmatch: match 'foo' 'foo'': 
			test-tool wildmatch ipathmatch 'foo' 'foo'
		
ok 649 - ipathmatch: match 'foo' 'foo'

expecting success of 3070.650 'ipathmatch (via ls-files): match 'foo' 'foo'': 
				printf '%s' 'foo' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 650 - ipathmatch (via ls-files): match 'foo' 'foo'

expecting success of 3070.651 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 651 - cleanup after previous file test

expecting success of 3070.652 'setup match file test for @foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 652 - setup match file test for @foo

expecting success of 3070.653 'wildmatch: match '@foo' '@foo'': 
			test-tool wildmatch wildmatch '@foo' '@foo'
		
ok 653 - wildmatch: match '@foo' '@foo'

expecting success of 3070.654 'wildmatch (via ls-files): match '@foo' '@foo'': 
				printf '%s' '@foo' >expect &&
				git --glob-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 654 - wildmatch (via ls-files): match '@foo' '@foo'

expecting success of 3070.655 'iwildmatch: match '@foo' '@foo'': 
			test-tool wildmatch iwildmatch '@foo' '@foo'
		
ok 655 - iwildmatch: match '@foo' '@foo'

expecting success of 3070.656 'iwildmatch (via ls-files): match '@foo' '@foo'': 
				printf '%s' '@foo' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 656 - iwildmatch (via ls-files): match '@foo' '@foo'

expecting success of 3070.657 'pathmatch: match '@foo' '@foo'': 
			test-tool wildmatch pathmatch '@foo' '@foo'
		
ok 657 - pathmatch: match '@foo' '@foo'

expecting success of 3070.658 'pathmatch (via ls-files): match '@foo' '@foo'': 
				printf '%s' '@foo' >expect &&
				git ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 658 - pathmatch (via ls-files): match '@foo' '@foo'

expecting success of 3070.659 'ipathmatch: match '@foo' '@foo'': 
			test-tool wildmatch ipathmatch '@foo' '@foo'
		
ok 659 - ipathmatch: match '@foo' '@foo'

expecting success of 3070.660 'ipathmatch (via ls-files): match '@foo' '@foo'': 
				printf '%s' '@foo' >expect &&
				git --icase-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 660 - ipathmatch (via ls-files): match '@foo' '@foo'

expecting success of 3070.661 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing @foo
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 661 - cleanup after previous file test

expecting success of 3070.662 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 662 - setup match file test for foo

expecting success of 3070.663 'wildmatch: no match 'foo' '@foo'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' '@foo'
		
ok 663 - wildmatch: no match 'foo' '@foo'

expecting success of 3070.664 'wildmatch (via ls-files): no match '@foo' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 664 - wildmatch (via ls-files): no match '@foo' 'foo'

expecting success of 3070.665 'iwildmatch: no match 'foo' '@foo'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' '@foo'
		
ok 665 - iwildmatch: no match 'foo' '@foo'

expecting success of 3070.666 'iwildmatch (via ls-files): no match '@foo' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 666 - iwildmatch (via ls-files): no match '@foo' 'foo'

expecting success of 3070.667 'pathmatch: no match 'foo' '@foo'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' '@foo'
		
ok 667 - pathmatch: no match 'foo' '@foo'

expecting success of 3070.668 'pathmatch (via ls-files): no match '@foo' 'foo'': 
				>expect &&
				git ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 668 - pathmatch (via ls-files): no match '@foo' 'foo'

expecting success of 3070.669 'ipathmatch: no match 'foo' '@foo'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' '@foo'
		
ok 669 - ipathmatch: no match 'foo' '@foo'

expecting success of 3070.670 'ipathmatch (via ls-files): no match '@foo' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '@foo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 670 - ipathmatch (via ls-files): no match '@foo' 'foo'

expecting success of 3070.671 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 671 - cleanup after previous file test

expecting success of 3070.672 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 672 - setup match file test for [ab]

expecting success of 3070.673 'wildmatch: match '[ab]' '\[ab]'': 
			test-tool wildmatch wildmatch '[ab]' '\[ab]'
		
ok 673 - wildmatch: match '[ab]' '\[ab]'

expecting success of 3070.674 'wildmatch (via ls-files): match '\[ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs ls-files -z -- '\[ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 674 - wildmatch (via ls-files): match '\[ab]' '[ab]'

expecting success of 3070.675 'iwildmatch: match '[ab]' '\[ab]'': 
			test-tool wildmatch iwildmatch '[ab]' '\[ab]'
		
ok 675 - iwildmatch: match '[ab]' '\[ab]'

expecting success of 3070.676 'iwildmatch (via ls-files): match '\[ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '\[ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 676 - iwildmatch (via ls-files): match '\[ab]' '[ab]'

expecting success of 3070.677 'pathmatch: match '[ab]' '\[ab]'': 
			test-tool wildmatch pathmatch '[ab]' '\[ab]'
		
ok 677 - pathmatch: match '[ab]' '\[ab]'

expecting success of 3070.678 'pathmatch (via ls-files): match '\[ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git ls-files -z -- '\[ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 678 - pathmatch (via ls-files): match '\[ab]' '[ab]'

expecting success of 3070.679 'ipathmatch: match '[ab]' '\[ab]'': 
			test-tool wildmatch ipathmatch '[ab]' '\[ab]'
		
ok 679 - ipathmatch: match '[ab]' '\[ab]'

expecting success of 3070.680 'ipathmatch (via ls-files): match '\[ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --icase-pathspecs ls-files -z -- '\[ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 680 - ipathmatch (via ls-files): match '\[ab]' '[ab]'

expecting success of 3070.681 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 681 - cleanup after previous file test

expecting success of 3070.682 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 682 - setup match file test for [ab]

expecting success of 3070.683 'wildmatch: match '[ab]' '[[]ab]'': 
			test-tool wildmatch wildmatch '[ab]' '[[]ab]'
		
ok 683 - wildmatch: match '[ab]' '[[]ab]'

expecting success of 3070.684 'wildmatch (via ls-files): match '[[]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs ls-files -z -- '[[]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 684 - wildmatch (via ls-files): match '[[]ab]' '[ab]'

expecting success of 3070.685 'iwildmatch: match '[ab]' '[[]ab]'': 
			test-tool wildmatch iwildmatch '[ab]' '[[]ab]'
		
ok 685 - iwildmatch: match '[ab]' '[[]ab]'

expecting success of 3070.686 'iwildmatch (via ls-files): match '[[]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 686 - iwildmatch (via ls-files): match '[[]ab]' '[ab]'

expecting success of 3070.687 'pathmatch: match '[ab]' '[[]ab]'': 
			test-tool wildmatch pathmatch '[ab]' '[[]ab]'
		
ok 687 - pathmatch: match '[ab]' '[[]ab]'

expecting success of 3070.688 'pathmatch (via ls-files): match '[[]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git ls-files -z -- '[[]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 688 - pathmatch (via ls-files): match '[[]ab]' '[ab]'

expecting success of 3070.689 'ipathmatch: match '[ab]' '[[]ab]'': 
			test-tool wildmatch ipathmatch '[ab]' '[[]ab]'
		
ok 689 - ipathmatch: match '[ab]' '[[]ab]'

expecting success of 3070.690 'ipathmatch (via ls-files): match '[[]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --icase-pathspecs ls-files -z -- '[[]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 690 - ipathmatch (via ls-files): match '[[]ab]' '[ab]'

expecting success of 3070.691 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 691 - cleanup after previous file test

expecting success of 3070.692 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 692 - setup match file test for [ab]

expecting success of 3070.693 'wildmatch: match '[ab]' '[[:]ab]'': 
			test-tool wildmatch wildmatch '[ab]' '[[:]ab]'
		
ok 693 - wildmatch: match '[ab]' '[[:]ab]'

expecting success of 3070.694 'wildmatch (via ls-files): match '[[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 694 - wildmatch (via ls-files): match '[[:]ab]' '[ab]'

expecting success of 3070.695 'iwildmatch: match '[ab]' '[[:]ab]'': 
			test-tool wildmatch iwildmatch '[ab]' '[[:]ab]'
		
ok 695 - iwildmatch: match '[ab]' '[[:]ab]'

expecting success of 3070.696 'iwildmatch (via ls-files): match '[[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 696 - iwildmatch (via ls-files): match '[[:]ab]' '[ab]'

expecting success of 3070.697 'pathmatch: match '[ab]' '[[:]ab]'': 
			test-tool wildmatch pathmatch '[ab]' '[[:]ab]'
		
ok 697 - pathmatch: match '[ab]' '[[:]ab]'

expecting success of 3070.698 'pathmatch (via ls-files): match '[[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git ls-files -z -- '[[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 698 - pathmatch (via ls-files): match '[[:]ab]' '[ab]'

expecting success of 3070.699 'ipathmatch: match '[ab]' '[[:]ab]'': 
			test-tool wildmatch ipathmatch '[ab]' '[[:]ab]'
		
ok 699 - ipathmatch: match '[ab]' '[[:]ab]'

expecting success of 3070.700 'ipathmatch (via ls-files): match '[[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 700 - ipathmatch (via ls-files): match '[[:]ab]' '[ab]'

expecting success of 3070.701 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 701 - cleanup after previous file test

expecting success of 3070.702 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 702 - setup match file test for [ab]

expecting success of 3070.703 'wildmatch: no match '[ab]' '[[::]ab]'': 
			test_must_fail test-tool wildmatch wildmatch '[ab]' '[[::]ab]'
		
ok 703 - wildmatch: no match '[ab]' '[[::]ab]'

expecting success of 3070.704 'wildmatch (via ls-files): no match '[[::]ab]' '[ab]'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[::]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 704 - wildmatch (via ls-files): no match '[[::]ab]' '[ab]'

expecting success of 3070.705 'iwildmatch: no match '[ab]' '[[::]ab]'': 
			test_must_fail test-tool wildmatch iwildmatch '[ab]' '[[::]ab]'
		
ok 705 - iwildmatch: no match '[ab]' '[[::]ab]'

expecting success of 3070.706 'iwildmatch (via ls-files): no match '[[::]ab]' '[ab]'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[::]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 706 - iwildmatch (via ls-files): no match '[[::]ab]' '[ab]'

expecting success of 3070.707 'pathmatch: no match '[ab]' '[[::]ab]'': 
			test_must_fail test-tool wildmatch pathmatch '[ab]' '[[::]ab]'
		
ok 707 - pathmatch: no match '[ab]' '[[::]ab]'

expecting success of 3070.708 'pathmatch (via ls-files): no match '[[::]ab]' '[ab]'': 
				>expect &&
				git ls-files -z -- '[[::]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 708 - pathmatch (via ls-files): no match '[[::]ab]' '[ab]'

expecting success of 3070.709 'ipathmatch: no match '[ab]' '[[::]ab]'': 
			test_must_fail test-tool wildmatch ipathmatch '[ab]' '[[::]ab]'
		
ok 709 - ipathmatch: no match '[ab]' '[[::]ab]'

expecting success of 3070.710 'ipathmatch (via ls-files): no match '[[::]ab]' '[ab]'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[[::]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 710 - ipathmatch (via ls-files): no match '[[::]ab]' '[ab]'

expecting success of 3070.711 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 711 - cleanup after previous file test

expecting success of 3070.712 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 712 - setup match file test for [ab]

expecting success of 3070.713 'wildmatch: match '[ab]' '[[:digit]ab]'': 
			test-tool wildmatch wildmatch '[ab]' '[[:digit]ab]'
		
ok 713 - wildmatch: match '[ab]' '[[:digit]ab]'

expecting success of 3070.714 'wildmatch (via ls-files): match '[[:digit]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 714 - wildmatch (via ls-files): match '[[:digit]ab]' '[ab]'

expecting success of 3070.715 'iwildmatch: match '[ab]' '[[:digit]ab]'': 
			test-tool wildmatch iwildmatch '[ab]' '[[:digit]ab]'
		
ok 715 - iwildmatch: match '[ab]' '[[:digit]ab]'

expecting success of 3070.716 'iwildmatch (via ls-files): match '[[:digit]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 716 - iwildmatch (via ls-files): match '[[:digit]ab]' '[ab]'

expecting success of 3070.717 'pathmatch: match '[ab]' '[[:digit]ab]'': 
			test-tool wildmatch pathmatch '[ab]' '[[:digit]ab]'
		
ok 717 - pathmatch: match '[ab]' '[[:digit]ab]'

expecting success of 3070.718 'pathmatch (via ls-files): match '[[:digit]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git ls-files -z -- '[[:digit]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 718 - pathmatch (via ls-files): match '[[:digit]ab]' '[ab]'

expecting success of 3070.719 'ipathmatch: match '[ab]' '[[:digit]ab]'': 
			test-tool wildmatch ipathmatch '[ab]' '[[:digit]ab]'
		
ok 719 - ipathmatch: match '[ab]' '[[:digit]ab]'

expecting success of 3070.720 'ipathmatch (via ls-files): match '[[:digit]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 720 - ipathmatch (via ls-files): match '[[:digit]ab]' '[ab]'

expecting success of 3070.721 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 721 - cleanup after previous file test

expecting success of 3070.722 'setup match file test for [ab]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 722 - setup match file test for [ab]

expecting success of 3070.723 'wildmatch: match '[ab]' '[\[:]ab]'': 
			test-tool wildmatch wildmatch '[ab]' '[\[:]ab]'
		
ok 723 - wildmatch: match '[ab]' '[\[:]ab]'

expecting success of 3070.724 'wildmatch (via ls-files): match '[\[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs ls-files -z -- '[\[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 724 - wildmatch (via ls-files): match '[\[:]ab]' '[ab]'

expecting success of 3070.725 'iwildmatch: match '[ab]' '[\[:]ab]'': 
			test-tool wildmatch iwildmatch '[ab]' '[\[:]ab]'
		
ok 725 - iwildmatch: match '[ab]' '[\[:]ab]'

expecting success of 3070.726 'iwildmatch (via ls-files): match '[\[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 726 - iwildmatch (via ls-files): match '[\[:]ab]' '[ab]'

expecting success of 3070.727 'pathmatch: match '[ab]' '[\[:]ab]'': 
			test-tool wildmatch pathmatch '[ab]' '[\[:]ab]'
		
ok 727 - pathmatch: match '[ab]' '[\[:]ab]'

expecting success of 3070.728 'pathmatch (via ls-files): match '[\[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git ls-files -z -- '[\[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 728 - pathmatch (via ls-files): match '[\[:]ab]' '[ab]'

expecting success of 3070.729 'ipathmatch: match '[ab]' '[\[:]ab]'': 
			test-tool wildmatch ipathmatch '[ab]' '[\[:]ab]'
		
ok 729 - ipathmatch: match '[ab]' '[\[:]ab]'

expecting success of 3070.730 'ipathmatch (via ls-files): match '[\[:]ab]' '[ab]'': 
				printf '%s' '[ab]' >expect &&
				git --icase-pathspecs ls-files -z -- '[\[:]ab]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 730 - ipathmatch (via ls-files): match '[\[:]ab]' '[ab]'

expecting success of 3070.731 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [ab]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 731 - cleanup after previous file test

expecting success of 3070.732 'setup match file test for ?a?b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 732 - setup match file test for ?a?b

expecting success of 3070.733 'wildmatch: match '?a?b' '\??\?b'': 
			test-tool wildmatch wildmatch '?a?b' '\??\?b'
		
ok 733 - wildmatch: match '?a?b' '\??\?b'

expecting success of 3070.734 'wildmatch (via ls-files): match '\??\?b' '?a?b'': 
				printf '%s' '?a?b' >expect &&
				git --glob-pathspecs ls-files -z -- '\??\?b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 734 - wildmatch (via ls-files): match '\??\?b' '?a?b'

expecting success of 3070.735 'iwildmatch: match '?a?b' '\??\?b'': 
			test-tool wildmatch iwildmatch '?a?b' '\??\?b'
		
ok 735 - iwildmatch: match '?a?b' '\??\?b'

expecting success of 3070.736 'iwildmatch (via ls-files): match '\??\?b' '?a?b'': 
				printf '%s' '?a?b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '\??\?b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 736 - iwildmatch (via ls-files): match '\??\?b' '?a?b'

expecting success of 3070.737 'pathmatch: match '?a?b' '\??\?b'': 
			test-tool wildmatch pathmatch '?a?b' '\??\?b'
		
ok 737 - pathmatch: match '?a?b' '\??\?b'

expecting success of 3070.738 'pathmatch (via ls-files): match '\??\?b' '?a?b'': 
				printf '%s' '?a?b' >expect &&
				git ls-files -z -- '\??\?b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 738 - pathmatch (via ls-files): match '\??\?b' '?a?b'

expecting success of 3070.739 'ipathmatch: match '?a?b' '\??\?b'': 
			test-tool wildmatch ipathmatch '?a?b' '\??\?b'
		
ok 739 - ipathmatch: match '?a?b' '\??\?b'

expecting success of 3070.740 'ipathmatch (via ls-files): match '\??\?b' '?a?b'': 
				printf '%s' '?a?b' >expect &&
				git --icase-pathspecs ls-files -z -- '\??\?b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 740 - ipathmatch (via ls-files): match '\??\?b' '?a?b'

expecting success of 3070.741 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ?a?b
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 741 - cleanup after previous file test

expecting success of 3070.742 'setup match file test for abc': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 742 - setup match file test for abc

expecting success of 3070.743 'wildmatch: match 'abc' '\a\b\c'': 
			test-tool wildmatch wildmatch 'abc' '\a\b\c'
		
ok 743 - wildmatch: match 'abc' '\a\b\c'

expecting success of 3070.744 'wildmatch (via ls-files): match '\a\b\c' 'abc'': 
				printf '%s' 'abc' >expect &&
				git --glob-pathspecs ls-files -z -- '\a\b\c' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 744 - wildmatch (via ls-files): match '\a\b\c' 'abc'

expecting success of 3070.745 'iwildmatch: match 'abc' '\a\b\c'': 
			test-tool wildmatch iwildmatch 'abc' '\a\b\c'
		
ok 745 - iwildmatch: match 'abc' '\a\b\c'

expecting success of 3070.746 'iwildmatch (via ls-files): match '\a\b\c' 'abc'': 
				printf '%s' 'abc' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '\a\b\c' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 746 - iwildmatch (via ls-files): match '\a\b\c' 'abc'

expecting success of 3070.747 'pathmatch: match 'abc' '\a\b\c'': 
			test-tool wildmatch pathmatch 'abc' '\a\b\c'
		
ok 747 - pathmatch: match 'abc' '\a\b\c'

expecting success of 3070.748 'pathmatch (via ls-files): match '\a\b\c' 'abc'': 
				printf '%s' 'abc' >expect &&
				git ls-files -z -- '\a\b\c' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 748 - pathmatch (via ls-files): match '\a\b\c' 'abc'

expecting success of 3070.749 'ipathmatch: match 'abc' '\a\b\c'': 
			test-tool wildmatch ipathmatch 'abc' '\a\b\c'
		
ok 749 - ipathmatch: match 'abc' '\a\b\c'

expecting success of 3070.750 'ipathmatch (via ls-files): match '\a\b\c' 'abc'': 
				printf '%s' 'abc' >expect &&
				git --icase-pathspecs ls-files -z -- '\a\b\c' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 750 - ipathmatch (via ls-files): match '\a\b\c' 'abc'

expecting success of 3070.751 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing abc
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 751 - cleanup after previous file test

expecting success of 3070.752 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 752 - setup match file test for foo

expecting success of 3070.753 'wildmatch: no match 'foo' ''': 
			test_must_fail test-tool wildmatch wildmatch 'foo' ''
		
ok 753 - wildmatch: no match 'foo' ''

expecting success of 3070.754 'wildmatch (via ls-files): match dies on '' 'foo'': 
				printf '%s' 'foo' >expect &&
				test_must_fail git --glob-pathspecs ls-files -z -- ''
			
fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 754 - wildmatch (via ls-files): match dies on '' 'foo'

expecting success of 3070.755 'iwildmatch: no match 'foo' ''': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' ''
		
ok 755 - iwildmatch: no match 'foo' ''

expecting success of 3070.756 'iwildmatch (via ls-files): match dies on '' 'foo'': 
				printf '%s' 'foo' >expect &&
				test_must_fail git --glob-pathspecs --icase-pathspecs ls-files -z -- ''
			
fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 756 - iwildmatch (via ls-files): match dies on '' 'foo'

expecting success of 3070.757 'pathmatch: no match 'foo' ''': 
			test_must_fail test-tool wildmatch pathmatch 'foo' ''
		
ok 757 - pathmatch: no match 'foo' ''

expecting success of 3070.758 'pathmatch (via ls-files): match dies on '' 'foo'': 
				printf '%s' 'foo' >expect &&
				test_must_fail git ls-files -z -- ''
			
fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 758 - pathmatch (via ls-files): match dies on '' 'foo'

expecting success of 3070.759 'ipathmatch: no match 'foo' ''': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' ''
		
ok 759 - ipathmatch: no match 'foo' ''

expecting success of 3070.760 'ipathmatch (via ls-files): match dies on '' 'foo'': 
				printf '%s' 'foo' >expect &&
				test_must_fail git --icase-pathspecs ls-files -z -- ''
			
fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 760 - ipathmatch (via ls-files): match dies on '' 'foo'

expecting success of 3070.761 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing expect
Removing foo
ok 761 - cleanup after previous file test

expecting success of 3070.762 'setup match file test for foo/bar/baz/to': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 762 - setup match file test for foo/bar/baz/to

expecting success of 3070.763 'wildmatch: match 'foo/bar/baz/to' '**/t[o]'': 
			test-tool wildmatch wildmatch 'foo/bar/baz/to' '**/t[o]'
		
ok 763 - wildmatch: match 'foo/bar/baz/to' '**/t[o]'

expecting success of 3070.764 'wildmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'': 
				printf '%s' 'foo/bar/baz/to' >expect &&
				git --glob-pathspecs ls-files -z -- '**/t[o]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 764 - wildmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'

expecting success of 3070.765 'iwildmatch: match 'foo/bar/baz/to' '**/t[o]'': 
			test-tool wildmatch iwildmatch 'foo/bar/baz/to' '**/t[o]'
		
ok 765 - iwildmatch: match 'foo/bar/baz/to' '**/t[o]'

expecting success of 3070.766 'iwildmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'': 
				printf '%s' 'foo/bar/baz/to' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/t[o]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 766 - iwildmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'

expecting success of 3070.767 'pathmatch: match 'foo/bar/baz/to' '**/t[o]'': 
			test-tool wildmatch pathmatch 'foo/bar/baz/to' '**/t[o]'
		
ok 767 - pathmatch: match 'foo/bar/baz/to' '**/t[o]'

expecting success of 3070.768 'pathmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'': 
				printf '%s' 'foo/bar/baz/to' >expect &&
				git ls-files -z -- '**/t[o]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 768 - pathmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'

expecting success of 3070.769 'ipathmatch: match 'foo/bar/baz/to' '**/t[o]'': 
			test-tool wildmatch ipathmatch 'foo/bar/baz/to' '**/t[o]'
		
ok 769 - ipathmatch: match 'foo/bar/baz/to' '**/t[o]'

expecting success of 3070.770 'ipathmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'': 
				printf '%s' 'foo/bar/baz/to' >expect &&
				git --icase-pathspecs ls-files -z -- '**/t[o]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 770 - ipathmatch (via ls-files): match '**/t[o]' 'foo/bar/baz/to'

expecting success of 3070.771 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 771 - cleanup after previous file test

expecting success of 3070.772 'setup match file test for a1B': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 772 - setup match file test for a1B

expecting success of 3070.773 'wildmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'': 
			test-tool wildmatch wildmatch 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'
		
ok 773 - wildmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'

expecting success of 3070.774 'wildmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'': 
				printf '%s' 'a1B' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:alpha:]][[:digit:]][[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 774 - wildmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'

expecting success of 3070.775 'iwildmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'': 
			test-tool wildmatch iwildmatch 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'
		
ok 775 - iwildmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'

expecting success of 3070.776 'iwildmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'': 
				printf '%s' 'a1B' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:alpha:]][[:digit:]][[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 776 - iwildmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'

expecting success of 3070.777 'pathmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'': 
			test-tool wildmatch pathmatch 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'
		
ok 777 - pathmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'

expecting success of 3070.778 'pathmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'': 
				printf '%s' 'a1B' >expect &&
				git ls-files -z -- '[[:alpha:]][[:digit:]][[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 778 - pathmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'

expecting success of 3070.779 'ipathmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'': 
			test-tool wildmatch ipathmatch 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'
		
ok 779 - ipathmatch: match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'

expecting success of 3070.780 'ipathmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'': 
				printf '%s' 'a1B' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:alpha:]][[:digit:]][[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 780 - ipathmatch (via ls-files): match '[[:alpha:]][[:digit:]][[:upper:]]' 'a1B'

expecting success of 3070.781 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a1B
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 781 - cleanup after previous file test

expecting success of 3070.782 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 782 - setup match file test for a

expecting success of 3070.783 'wildmatch: no match 'a' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch wildmatch 'a' '[[:digit:][:upper:][:space:]]'
		
ok 783 - wildmatch: no match 'a' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.784 'wildmatch (via ls-files): no match '[[:digit:][:upper:][:space:]]' 'a'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 784 - wildmatch (via ls-files): no match '[[:digit:][:upper:][:space:]]' 'a'

expecting success of 3070.785 'iwildmatch: match 'a' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch iwildmatch 'a' '[[:digit:][:upper:][:space:]]'
		
ok 785 - iwildmatch: match 'a' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.786 'iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 786 - iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'a'

expecting success of 3070.787 'pathmatch: no match 'a' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch pathmatch 'a' '[[:digit:][:upper:][:space:]]'
		
ok 787 - pathmatch: no match 'a' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.788 'pathmatch (via ls-files): no match '[[:digit:][:upper:][:space:]]' 'a'': 
				>expect &&
				git ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 788 - pathmatch (via ls-files): no match '[[:digit:][:upper:][:space:]]' 'a'

expecting success of 3070.789 'ipathmatch: match 'a' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch ipathmatch 'a' '[[:digit:][:upper:][:space:]]'
		
ok 789 - ipathmatch: match 'a' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.790 'ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 790 - ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'a'

expecting success of 3070.791 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 791 - cleanup after previous file test

expecting success of 3070.792 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 792 - setup match file test for A

expecting success of 3070.793 'wildmatch: match 'A' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch wildmatch 'A' '[[:digit:][:upper:][:space:]]'
		
ok 793 - wildmatch: match 'A' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.794 'wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 794 - wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'

expecting success of 3070.795 'iwildmatch: match 'A' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch iwildmatch 'A' '[[:digit:][:upper:][:space:]]'
		
ok 795 - iwildmatch: match 'A' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.796 'iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 796 - iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'

expecting success of 3070.797 'pathmatch: match 'A' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch pathmatch 'A' '[[:digit:][:upper:][:space:]]'
		
ok 797 - pathmatch: match 'A' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.798 'pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 798 - pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'

expecting success of 3070.799 'ipathmatch: match 'A' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch ipathmatch 'A' '[[:digit:][:upper:][:space:]]'
		
ok 799 - ipathmatch: match 'A' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.800 'ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 800 - ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' 'A'

expecting success of 3070.801 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 801 - cleanup after previous file test

expecting success of 3070.802 'setup match file test for 1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 802 - setup match file test for 1

expecting success of 3070.803 'wildmatch: match '1' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch wildmatch '1' '[[:digit:][:upper:][:space:]]'
		
ok 803 - wildmatch: match '1' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.804 'wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'': 
				printf '%s' '1' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 804 - wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'

expecting success of 3070.805 'iwildmatch: match '1' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch iwildmatch '1' '[[:digit:][:upper:][:space:]]'
		
ok 805 - iwildmatch: match '1' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.806 'iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'': 
				printf '%s' '1' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 806 - iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'

expecting success of 3070.807 'pathmatch: match '1' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch pathmatch '1' '[[:digit:][:upper:][:space:]]'
		
ok 807 - pathmatch: match '1' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.808 'pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'': 
				printf '%s' '1' >expect &&
				git ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 808 - pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'

expecting success of 3070.809 'ipathmatch: match '1' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch ipathmatch '1' '[[:digit:][:upper:][:space:]]'
		
ok 809 - ipathmatch: match '1' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.810 'ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'': 
				printf '%s' '1' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 810 - ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' '1'

expecting success of 3070.811 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 1
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 811 - cleanup after previous file test

expecting success of 3070.812 'setup match file test for 1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 812 - setup match file test for 1

expecting success of 3070.813 'wildmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'': 
			test_must_fail test-tool wildmatch wildmatch '1' '[[:digit:][:upper:][:spaci:]]'
		
ok 813 - wildmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'

expecting success of 3070.814 'wildmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit:][:upper:][:spaci:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 814 - wildmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'

expecting success of 3070.815 'iwildmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'': 
			test_must_fail test-tool wildmatch iwildmatch '1' '[[:digit:][:upper:][:spaci:]]'
		
ok 815 - iwildmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'

expecting success of 3070.816 'iwildmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:spaci:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 816 - iwildmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'

expecting success of 3070.817 'pathmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'': 
			test_must_fail test-tool wildmatch pathmatch '1' '[[:digit:][:upper:][:spaci:]]'
		
ok 817 - pathmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'

expecting success of 3070.818 'pathmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'': 
				>expect &&
				git ls-files -z -- '[[:digit:][:upper:][:spaci:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 818 - pathmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'

expecting success of 3070.819 'ipathmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'': 
			test_must_fail test-tool wildmatch ipathmatch '1' '[[:digit:][:upper:][:spaci:]]'
		
ok 819 - ipathmatch: no match '1' '[[:digit:][:upper:][:spaci:]]'

expecting success of 3070.820 'ipathmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:spaci:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 820 - ipathmatch (via ls-files): no match '[[:digit:][:upper:][:spaci:]]' '1'

expecting success of 3070.821 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 1
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 821 - cleanup after previous file test

expecting success of 3070.822 'setup match file test for  ': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 822 - setup match file test for  

expecting success of 3070.823 'wildmatch: match ' ' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch wildmatch ' ' '[[:digit:][:upper:][:space:]]'
		
ok 823 - wildmatch: match ' ' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.824 'wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '': 
				printf '%s' ' ' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 824 - wildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '

expecting success of 3070.825 'iwildmatch: match ' ' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch iwildmatch ' ' '[[:digit:][:upper:][:space:]]'
		
ok 825 - iwildmatch: match ' ' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.826 'iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '': 
				printf '%s' ' ' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 826 - iwildmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '

expecting success of 3070.827 'pathmatch: match ' ' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch pathmatch ' ' '[[:digit:][:upper:][:space:]]'
		
ok 827 - pathmatch: match ' ' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.828 'pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '': 
				printf '%s' ' ' >expect &&
				git ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 828 - pathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '

expecting success of 3070.829 'ipathmatch: match ' ' '[[:digit:][:upper:][:space:]]'': 
			test-tool wildmatch ipathmatch ' ' '[[:digit:][:upper:][:space:]]'
		
ok 829 - ipathmatch: match ' ' '[[:digit:][:upper:][:space:]]'

expecting success of 3070.830 'ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '': 
				printf '%s' ' ' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:digit:][:upper:][:space:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 830 - ipathmatch (via ls-files): match '[[:digit:][:upper:][:space:]]' ' '

expecting success of 3070.831 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing  
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 831 - cleanup after previous file test

expecting success of 3070.832 'setup match file test for .': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 832 - setup match file test for .

expecting success of 3070.833 'wildmatch: no match '.' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch wildmatch '.' '[[:digit:][:upper:][:space:]]'
		
ok 833 - wildmatch: no match '.' '[[:digit:][:upper:][:space:]]'

checking known breakage of 3070.834 'wildmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.'': false
not ok 834 - wildmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.' # TODO known breakage

expecting success of 3070.835 'iwildmatch: no match '.' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch iwildmatch '.' '[[:digit:][:upper:][:space:]]'
		
ok 835 - iwildmatch: no match '.' '[[:digit:][:upper:][:space:]]'

checking known breakage of 3070.836 'iwildmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.'': false
not ok 836 - iwildmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.' # TODO known breakage

expecting success of 3070.837 'pathmatch: no match '.' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch pathmatch '.' '[[:digit:][:upper:][:space:]]'
		
ok 837 - pathmatch: no match '.' '[[:digit:][:upper:][:space:]]'

checking known breakage of 3070.838 'pathmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.'': false
not ok 838 - pathmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.' # TODO known breakage

expecting success of 3070.839 'ipathmatch: no match '.' '[[:digit:][:upper:][:space:]]'': 
			test_must_fail test-tool wildmatch ipathmatch '.' '[[:digit:][:upper:][:space:]]'
		
ok 839 - ipathmatch: no match '.' '[[:digit:][:upper:][:space:]]'

checking known breakage of 3070.840 'ipathmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.'': false
not ok 840 - ipathmatch (via ls-files): no match skip '[[:digit:][:upper:][:space:]]' '.' # TODO known breakage

expecting success of 3070.841 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 841 - cleanup after previous file test

expecting success of 3070.842 'setup match file test for .': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 842 - setup match file test for .

expecting success of 3070.843 'wildmatch: match '.' '[[:digit:][:punct:][:space:]]'': 
			test-tool wildmatch wildmatch '.' '[[:digit:][:punct:][:space:]]'
		
ok 843 - wildmatch: match '.' '[[:digit:][:punct:][:space:]]'

checking known breakage of 3070.844 'wildmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.'': false
not ok 844 - wildmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.' # TODO known breakage

expecting success of 3070.845 'iwildmatch: match '.' '[[:digit:][:punct:][:space:]]'': 
			test-tool wildmatch iwildmatch '.' '[[:digit:][:punct:][:space:]]'
		
ok 845 - iwildmatch: match '.' '[[:digit:][:punct:][:space:]]'

checking known breakage of 3070.846 'iwildmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.'': false
not ok 846 - iwildmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.' # TODO known breakage

expecting success of 3070.847 'pathmatch: match '.' '[[:digit:][:punct:][:space:]]'': 
			test-tool wildmatch pathmatch '.' '[[:digit:][:punct:][:space:]]'
		
ok 847 - pathmatch: match '.' '[[:digit:][:punct:][:space:]]'

checking known breakage of 3070.848 'pathmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.'': false
not ok 848 - pathmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.' # TODO known breakage

expecting success of 3070.849 'ipathmatch: match '.' '[[:digit:][:punct:][:space:]]'': 
			test-tool wildmatch ipathmatch '.' '[[:digit:][:punct:][:space:]]'
		
ok 849 - ipathmatch: match '.' '[[:digit:][:punct:][:space:]]'

checking known breakage of 3070.850 'ipathmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.'': false
not ok 850 - ipathmatch (via ls-files): match skip '[[:digit:][:punct:][:space:]]' '.' # TODO known breakage

expecting success of 3070.851 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 851 - cleanup after previous file test

expecting success of 3070.852 'setup match file test for 5': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 852 - setup match file test for 5

expecting success of 3070.853 'wildmatch: match '5' '[[:xdigit:]]'': 
			test-tool wildmatch wildmatch '5' '[[:xdigit:]]'
		
ok 853 - wildmatch: match '5' '[[:xdigit:]]'

expecting success of 3070.854 'wildmatch (via ls-files): match '[[:xdigit:]]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 854 - wildmatch (via ls-files): match '[[:xdigit:]]' '5'

expecting success of 3070.855 'iwildmatch: match '5' '[[:xdigit:]]'': 
			test-tool wildmatch iwildmatch '5' '[[:xdigit:]]'
		
ok 855 - iwildmatch: match '5' '[[:xdigit:]]'

expecting success of 3070.856 'iwildmatch (via ls-files): match '[[:xdigit:]]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 856 - iwildmatch (via ls-files): match '[[:xdigit:]]' '5'

expecting success of 3070.857 'pathmatch: match '5' '[[:xdigit:]]'': 
			test-tool wildmatch pathmatch '5' '[[:xdigit:]]'
		
ok 857 - pathmatch: match '5' '[[:xdigit:]]'

expecting success of 3070.858 'pathmatch (via ls-files): match '[[:xdigit:]]' '5'': 
				printf '%s' '5' >expect &&
				git ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 858 - pathmatch (via ls-files): match '[[:xdigit:]]' '5'

expecting success of 3070.859 'ipathmatch: match '5' '[[:xdigit:]]'': 
			test-tool wildmatch ipathmatch '5' '[[:xdigit:]]'
		
ok 859 - ipathmatch: match '5' '[[:xdigit:]]'

expecting success of 3070.860 'ipathmatch (via ls-files): match '[[:xdigit:]]' '5'': 
				printf '%s' '5' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 860 - ipathmatch (via ls-files): match '[[:xdigit:]]' '5'

expecting success of 3070.861 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 5
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 861 - cleanup after previous file test

expecting success of 3070.862 'setup match file test for f': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 862 - setup match file test for f

expecting success of 3070.863 'wildmatch: match 'f' '[[:xdigit:]]'': 
			test-tool wildmatch wildmatch 'f' '[[:xdigit:]]'
		
ok 863 - wildmatch: match 'f' '[[:xdigit:]]'

expecting success of 3070.864 'wildmatch (via ls-files): match '[[:xdigit:]]' 'f'': 
				printf '%s' 'f' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 864 - wildmatch (via ls-files): match '[[:xdigit:]]' 'f'

expecting success of 3070.865 'iwildmatch: match 'f' '[[:xdigit:]]'': 
			test-tool wildmatch iwildmatch 'f' '[[:xdigit:]]'
		
ok 865 - iwildmatch: match 'f' '[[:xdigit:]]'

expecting success of 3070.866 'iwildmatch (via ls-files): match '[[:xdigit:]]' 'f'': 
				printf '%s' 'f' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 866 - iwildmatch (via ls-files): match '[[:xdigit:]]' 'f'

expecting success of 3070.867 'pathmatch: match 'f' '[[:xdigit:]]'': 
			test-tool wildmatch pathmatch 'f' '[[:xdigit:]]'
		
ok 867 - pathmatch: match 'f' '[[:xdigit:]]'

expecting success of 3070.868 'pathmatch (via ls-files): match '[[:xdigit:]]' 'f'': 
				printf '%s' 'f' >expect &&
				git ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 868 - pathmatch (via ls-files): match '[[:xdigit:]]' 'f'

expecting success of 3070.869 'ipathmatch: match 'f' '[[:xdigit:]]'': 
			test-tool wildmatch ipathmatch 'f' '[[:xdigit:]]'
		
ok 869 - ipathmatch: match 'f' '[[:xdigit:]]'

expecting success of 3070.870 'ipathmatch (via ls-files): match '[[:xdigit:]]' 'f'': 
				printf '%s' 'f' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 870 - ipathmatch (via ls-files): match '[[:xdigit:]]' 'f'

expecting success of 3070.871 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing f
ok 871 - cleanup after previous file test

expecting success of 3070.872 'setup match file test for D': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 872 - setup match file test for D

expecting success of 3070.873 'wildmatch: match 'D' '[[:xdigit:]]'': 
			test-tool wildmatch wildmatch 'D' '[[:xdigit:]]'
		
ok 873 - wildmatch: match 'D' '[[:xdigit:]]'

expecting success of 3070.874 'wildmatch (via ls-files): match '[[:xdigit:]]' 'D'': 
				printf '%s' 'D' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 874 - wildmatch (via ls-files): match '[[:xdigit:]]' 'D'

expecting success of 3070.875 'iwildmatch: match 'D' '[[:xdigit:]]'': 
			test-tool wildmatch iwildmatch 'D' '[[:xdigit:]]'
		
ok 875 - iwildmatch: match 'D' '[[:xdigit:]]'

expecting success of 3070.876 'iwildmatch (via ls-files): match '[[:xdigit:]]' 'D'': 
				printf '%s' 'D' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 876 - iwildmatch (via ls-files): match '[[:xdigit:]]' 'D'

expecting success of 3070.877 'pathmatch: match 'D' '[[:xdigit:]]'': 
			test-tool wildmatch pathmatch 'D' '[[:xdigit:]]'
		
ok 877 - pathmatch: match 'D' '[[:xdigit:]]'

expecting success of 3070.878 'pathmatch (via ls-files): match '[[:xdigit:]]' 'D'': 
				printf '%s' 'D' >expect &&
				git ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 878 - pathmatch (via ls-files): match '[[:xdigit:]]' 'D'

expecting success of 3070.879 'ipathmatch: match 'D' '[[:xdigit:]]'': 
			test-tool wildmatch ipathmatch 'D' '[[:xdigit:]]'
		
ok 879 - ipathmatch: match 'D' '[[:xdigit:]]'

expecting success of 3070.880 'ipathmatch (via ls-files): match '[[:xdigit:]]' 'D'': 
				printf '%s' 'D' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 880 - ipathmatch (via ls-files): match '[[:xdigit:]]' 'D'

expecting success of 3070.881 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing D
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 881 - cleanup after previous file test

expecting success of 3070.882 'setup match file test for _': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 882 - setup match file test for _

expecting success of 3070.883 'wildmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch wildmatch '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
		
ok 883 - wildmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'

expecting success of 3070.884 'wildmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'': 
				printf '%s' '_' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 884 - wildmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'

expecting success of 3070.885 'iwildmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch iwildmatch '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
		
ok 885 - iwildmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'

expecting success of 3070.886 'iwildmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'': 
				printf '%s' '_' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 886 - iwildmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'

expecting success of 3070.887 'pathmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch pathmatch '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
		
ok 887 - pathmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'

expecting success of 3070.888 'pathmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'': 
				printf '%s' '_' >expect &&
				git ls-files -z -- '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 888 - pathmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'

expecting success of 3070.889 'ipathmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch ipathmatch '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
		
ok 889 - ipathmatch: match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'

expecting success of 3070.890 'ipathmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'': 
				printf '%s' '_' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 890 - ipathmatch (via ls-files): match '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' '_'

expecting success of 3070.891 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing _
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 891 - cleanup after previous file test

expecting success of 3070.892 'setup match file test for .': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 892 - setup match file test for .

expecting success of 3070.893 'wildmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch wildmatch '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'
		
ok 893 - wildmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'

checking known breakage of 3070.894 'wildmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.'': false
not ok 894 - wildmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.' # TODO known breakage

expecting success of 3070.895 'iwildmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch iwildmatch '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'
		
ok 895 - iwildmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'

checking known breakage of 3070.896 'iwildmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.'': false
not ok 896 - iwildmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.' # TODO known breakage

expecting success of 3070.897 'pathmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch pathmatch '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'
		
ok 897 - pathmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'

checking known breakage of 3070.898 'pathmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.'': false
not ok 898 - pathmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.' # TODO known breakage

expecting success of 3070.899 'ipathmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'': 
			test-tool wildmatch ipathmatch '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'
		
ok 899 - ipathmatch: match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'

checking known breakage of 3070.900 'ipathmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.'': false
not ok 900 - ipathmatch (via ls-files): match skip '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]' '.' # TODO known breakage

expecting success of 3070.901 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 901 - cleanup after previous file test

expecting success of 3070.902 'setup match file test for 5': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 902 - setup match file test for 5

expecting success of 3070.903 'wildmatch: match '5' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch wildmatch '5' '[a-c[:digit:]x-z]'
		
ok 903 - wildmatch: match '5' '[a-c[:digit:]x-z]'

expecting success of 3070.904 'wildmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 904 - wildmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'

expecting success of 3070.905 'iwildmatch: match '5' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch iwildmatch '5' '[a-c[:digit:]x-z]'
		
ok 905 - iwildmatch: match '5' '[a-c[:digit:]x-z]'

expecting success of 3070.906 'iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 906 - iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'

expecting success of 3070.907 'pathmatch: match '5' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch pathmatch '5' '[a-c[:digit:]x-z]'
		
ok 907 - pathmatch: match '5' '[a-c[:digit:]x-z]'

expecting success of 3070.908 'pathmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'': 
				printf '%s' '5' >expect &&
				git ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 908 - pathmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'

expecting success of 3070.909 'ipathmatch: match '5' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch ipathmatch '5' '[a-c[:digit:]x-z]'
		
ok 909 - ipathmatch: match '5' '[a-c[:digit:]x-z]'

expecting success of 3070.910 'ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'': 
				printf '%s' '5' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 910 - ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' '5'

expecting success of 3070.911 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 5
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 911 - cleanup after previous file test

expecting success of 3070.912 'setup match file test for b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 912 - setup match file test for b

expecting success of 3070.913 'wildmatch: match 'b' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch wildmatch 'b' '[a-c[:digit:]x-z]'
		
ok 913 - wildmatch: match 'b' '[a-c[:digit:]x-z]'

expecting success of 3070.914 'wildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'': 
				printf '%s' 'b' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 914 - wildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'

expecting success of 3070.915 'iwildmatch: match 'b' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch iwildmatch 'b' '[a-c[:digit:]x-z]'
		
ok 915 - iwildmatch: match 'b' '[a-c[:digit:]x-z]'

expecting success of 3070.916 'iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'': 
				printf '%s' 'b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 916 - iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'

expecting success of 3070.917 'pathmatch: match 'b' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch pathmatch 'b' '[a-c[:digit:]x-z]'
		
ok 917 - pathmatch: match 'b' '[a-c[:digit:]x-z]'

expecting success of 3070.918 'pathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'': 
				printf '%s' 'b' >expect &&
				git ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 918 - pathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'

expecting success of 3070.919 'ipathmatch: match 'b' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch ipathmatch 'b' '[a-c[:digit:]x-z]'
		
ok 919 - ipathmatch: match 'b' '[a-c[:digit:]x-z]'

expecting success of 3070.920 'ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'': 
				printf '%s' 'b' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 920 - ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'b'

expecting success of 3070.921 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing b
Removing expect
ok 921 - cleanup after previous file test

expecting success of 3070.922 'setup match file test for y': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 922 - setup match file test for y

expecting success of 3070.923 'wildmatch: match 'y' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch wildmatch 'y' '[a-c[:digit:]x-z]'
		
ok 923 - wildmatch: match 'y' '[a-c[:digit:]x-z]'

expecting success of 3070.924 'wildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'': 
				printf '%s' 'y' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 924 - wildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'

expecting success of 3070.925 'iwildmatch: match 'y' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch iwildmatch 'y' '[a-c[:digit:]x-z]'
		
ok 925 - iwildmatch: match 'y' '[a-c[:digit:]x-z]'

expecting success of 3070.926 'iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'': 
				printf '%s' 'y' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 926 - iwildmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'

expecting success of 3070.927 'pathmatch: match 'y' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch pathmatch 'y' '[a-c[:digit:]x-z]'
		
ok 927 - pathmatch: match 'y' '[a-c[:digit:]x-z]'

expecting success of 3070.928 'pathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'': 
				printf '%s' 'y' >expect &&
				git ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 928 - pathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'

expecting success of 3070.929 'ipathmatch: match 'y' '[a-c[:digit:]x-z]'': 
			test-tool wildmatch ipathmatch 'y' '[a-c[:digit:]x-z]'
		
ok 929 - ipathmatch: match 'y' '[a-c[:digit:]x-z]'

expecting success of 3070.930 'ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'': 
				printf '%s' 'y' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 930 - ipathmatch (via ls-files): match '[a-c[:digit:]x-z]' 'y'

expecting success of 3070.931 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing y
ok 931 - cleanup after previous file test

expecting success of 3070.932 'setup match file test for q': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 932 - setup match file test for q

expecting success of 3070.933 'wildmatch: no match 'q' '[a-c[:digit:]x-z]'': 
			test_must_fail test-tool wildmatch wildmatch 'q' '[a-c[:digit:]x-z]'
		
ok 933 - wildmatch: no match 'q' '[a-c[:digit:]x-z]'

expecting success of 3070.934 'wildmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 934 - wildmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'

expecting success of 3070.935 'iwildmatch: no match 'q' '[a-c[:digit:]x-z]'': 
			test_must_fail test-tool wildmatch iwildmatch 'q' '[a-c[:digit:]x-z]'
		
ok 935 - iwildmatch: no match 'q' '[a-c[:digit:]x-z]'

expecting success of 3070.936 'iwildmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 936 - iwildmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'

expecting success of 3070.937 'pathmatch: no match 'q' '[a-c[:digit:]x-z]'': 
			test_must_fail test-tool wildmatch pathmatch 'q' '[a-c[:digit:]x-z]'
		
ok 937 - pathmatch: no match 'q' '[a-c[:digit:]x-z]'

expecting success of 3070.938 'pathmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'': 
				>expect &&
				git ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 938 - pathmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'

expecting success of 3070.939 'ipathmatch: no match 'q' '[a-c[:digit:]x-z]'': 
			test_must_fail test-tool wildmatch ipathmatch 'q' '[a-c[:digit:]x-z]'
		
ok 939 - ipathmatch: no match 'q' '[a-c[:digit:]x-z]'

expecting success of 3070.940 'ipathmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[a-c[:digit:]x-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 940 - ipathmatch (via ls-files): no match '[a-c[:digit:]x-z]' 'q'

expecting success of 3070.941 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing q
ok 941 - cleanup after previous file test

expecting success of 3070.942 'setup match file test for ]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 942 - setup match file test for ]

expecting success of 3070.943 'wildmatch: match ']' '[\\-^]'': 
			test-tool wildmatch wildmatch ']' '[\\-^]'
		
ok 943 - wildmatch: match ']' '[\\-^]'

expecting success of 3070.944 'wildmatch (via ls-files): match '[\\-^]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 944 - wildmatch (via ls-files): match '[\\-^]' ']'

expecting success of 3070.945 'iwildmatch: match ']' '[\\-^]'': 
			test-tool wildmatch iwildmatch ']' '[\\-^]'
		
ok 945 - iwildmatch: match ']' '[\\-^]'

expecting success of 3070.946 'iwildmatch (via ls-files): match '[\\-^]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 946 - iwildmatch (via ls-files): match '[\\-^]' ']'

expecting success of 3070.947 'pathmatch: match ']' '[\\-^]'': 
			test-tool wildmatch pathmatch ']' '[\\-^]'
		
ok 947 - pathmatch: match ']' '[\\-^]'

expecting success of 3070.948 'pathmatch (via ls-files): match '[\\-^]' ']'': 
				printf '%s' ']' >expect &&
				git ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 948 - pathmatch (via ls-files): match '[\\-^]' ']'

expecting success of 3070.949 'ipathmatch: match ']' '[\\-^]'': 
			test-tool wildmatch ipathmatch ']' '[\\-^]'
		
ok 949 - ipathmatch: match ']' '[\\-^]'

expecting success of 3070.950 'ipathmatch (via ls-files): match '[\\-^]' ']'': 
				printf '%s' ']' >expect &&
				git --icase-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 950 - ipathmatch (via ls-files): match '[\\-^]' ']'

expecting success of 3070.951 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 951 - cleanup after previous file test

expecting success of 3070.952 'setup match file test for [': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 952 - setup match file test for [

expecting success of 3070.953 'wildmatch: no match '[' '[\\-^]'': 
			test_must_fail test-tool wildmatch wildmatch '[' '[\\-^]'
		
ok 953 - wildmatch: no match '[' '[\\-^]'

expecting success of 3070.954 'wildmatch (via ls-files): no match '[\\-^]' '['': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 954 - wildmatch (via ls-files): no match '[\\-^]' '['

expecting success of 3070.955 'iwildmatch: no match '[' '[\\-^]'': 
			test_must_fail test-tool wildmatch iwildmatch '[' '[\\-^]'
		
ok 955 - iwildmatch: no match '[' '[\\-^]'

expecting success of 3070.956 'iwildmatch (via ls-files): no match '[\\-^]' '['': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 956 - iwildmatch (via ls-files): no match '[\\-^]' '['

expecting success of 3070.957 'pathmatch: no match '[' '[\\-^]'': 
			test_must_fail test-tool wildmatch pathmatch '[' '[\\-^]'
		
ok 957 - pathmatch: no match '[' '[\\-^]'

expecting success of 3070.958 'pathmatch (via ls-files): no match '[\\-^]' '['': 
				>expect &&
				git ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 958 - pathmatch (via ls-files): no match '[\\-^]' '['

expecting success of 3070.959 'ipathmatch: no match '[' '[\\-^]'': 
			test_must_fail test-tool wildmatch ipathmatch '[' '[\\-^]'
		
ok 959 - ipathmatch: no match '[' '[\\-^]'

expecting success of 3070.960 'ipathmatch (via ls-files): no match '[\\-^]' '['': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[\\-^]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 960 - ipathmatch (via ls-files): no match '[\\-^]' '['

expecting success of 3070.961 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 961 - cleanup after previous file test

expecting success of 3070.962 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 962 - setup match file test for -

expecting success of 3070.963 'wildmatch: match '-' '[\-_]'': 
			test-tool wildmatch wildmatch '-' '[\-_]'
		
ok 963 - wildmatch: match '-' '[\-_]'

expecting success of 3070.964 'wildmatch (via ls-files): match '[\-_]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[\-_]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 964 - wildmatch (via ls-files): match '[\-_]' '-'

expecting success of 3070.965 'iwildmatch: match '-' '[\-_]'': 
			test-tool wildmatch iwildmatch '-' '[\-_]'
		
ok 965 - iwildmatch: match '-' '[\-_]'

expecting success of 3070.966 'iwildmatch (via ls-files): match '[\-_]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\-_]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 966 - iwildmatch (via ls-files): match '[\-_]' '-'

expecting success of 3070.967 'pathmatch: match '-' '[\-_]'': 
			test-tool wildmatch pathmatch '-' '[\-_]'
		
ok 967 - pathmatch: match '-' '[\-_]'

expecting success of 3070.968 'pathmatch (via ls-files): match '[\-_]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[\-_]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 968 - pathmatch (via ls-files): match '[\-_]' '-'

expecting success of 3070.969 'ipathmatch: match '-' '[\-_]'': 
			test-tool wildmatch ipathmatch '-' '[\-_]'
		
ok 969 - ipathmatch: match '-' '[\-_]'

expecting success of 3070.970 'ipathmatch (via ls-files): match '[\-_]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[\-_]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 970 - ipathmatch (via ls-files): match '[\-_]' '-'

expecting success of 3070.971 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 971 - cleanup after previous file test

expecting success of 3070.972 'setup match file test for ]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 972 - setup match file test for ]

expecting success of 3070.973 'wildmatch: match ']' '[\]]'': 
			test-tool wildmatch wildmatch ']' '[\]]'
		
ok 973 - wildmatch: match ']' '[\]]'

expecting success of 3070.974 'wildmatch (via ls-files): match '[\]]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 974 - wildmatch (via ls-files): match '[\]]' ']'

expecting success of 3070.975 'iwildmatch: match ']' '[\]]'': 
			test-tool wildmatch iwildmatch ']' '[\]]'
		
ok 975 - iwildmatch: match ']' '[\]]'

expecting success of 3070.976 'iwildmatch (via ls-files): match '[\]]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 976 - iwildmatch (via ls-files): match '[\]]' ']'

expecting success of 3070.977 'pathmatch: match ']' '[\]]'': 
			test-tool wildmatch pathmatch ']' '[\]]'
		
ok 977 - pathmatch: match ']' '[\]]'

expecting success of 3070.978 'pathmatch (via ls-files): match '[\]]' ']'': 
				printf '%s' ']' >expect &&
				git ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 978 - pathmatch (via ls-files): match '[\]]' ']'

expecting success of 3070.979 'ipathmatch: match ']' '[\]]'': 
			test-tool wildmatch ipathmatch ']' '[\]]'
		
ok 979 - ipathmatch: match ']' '[\]]'

expecting success of 3070.980 'ipathmatch (via ls-files): match '[\]]' ']'': 
				printf '%s' ']' >expect &&
				git --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 980 - ipathmatch (via ls-files): match '[\]]' ']'

expecting success of 3070.981 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 981 - cleanup after previous file test

expecting success of 3070.982 'setup match file test for \]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 982 - setup match file test for \]

expecting success of 3070.983 'wildmatch: no match '\]' '[\]]'': 
			test_must_fail test-tool wildmatch wildmatch '\]' '[\]]'
		
ok 983 - wildmatch: no match '\]' '[\]]'

expecting success of 3070.984 'wildmatch (via ls-files): no match '[\]]' '\]'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 984 - wildmatch (via ls-files): no match '[\]]' '\]'

expecting success of 3070.985 'iwildmatch: no match '\]' '[\]]'': 
			test_must_fail test-tool wildmatch iwildmatch '\]' '[\]]'
		
ok 985 - iwildmatch: no match '\]' '[\]]'

expecting success of 3070.986 'iwildmatch (via ls-files): no match '[\]]' '\]'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 986 - iwildmatch (via ls-files): no match '[\]]' '\]'

expecting success of 3070.987 'pathmatch: no match '\]' '[\]]'': 
			test_must_fail test-tool wildmatch pathmatch '\]' '[\]]'
		
ok 987 - pathmatch: no match '\]' '[\]]'

expecting success of 3070.988 'pathmatch (via ls-files): no match '[\]]' '\]'': 
				>expect &&
				git ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 988 - pathmatch (via ls-files): no match '[\]]' '\]'

expecting success of 3070.989 'ipathmatch: no match '\]' '[\]]'': 
			test_must_fail test-tool wildmatch ipathmatch '\]' '[\]]'
		
ok 989 - ipathmatch: no match '\]' '[\]]'

expecting success of 3070.990 'ipathmatch (via ls-files): no match '[\]]' '\]'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 990 - ipathmatch (via ls-files): no match '[\]]' '\]'

expecting success of 3070.991 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\]"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 991 - cleanup after previous file test

expecting success of 3070.992 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 992 - setup match file test for \

expecting success of 3070.993 'wildmatch: no match '\' '[\]]'': 
			test_must_fail test-tool wildmatch wildmatch '\' '[\]]'
		
ok 993 - wildmatch: no match '\' '[\]]'

expecting success of 3070.994 'wildmatch (via ls-files): no match '[\]]' '\'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 994 - wildmatch (via ls-files): no match '[\]]' '\'

expecting success of 3070.995 'iwildmatch: no match '\' '[\]]'': 
			test_must_fail test-tool wildmatch iwildmatch '\' '[\]]'
		
ok 995 - iwildmatch: no match '\' '[\]]'

expecting success of 3070.996 'iwildmatch (via ls-files): no match '[\]]' '\'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 996 - iwildmatch (via ls-files): no match '[\]]' '\'

expecting success of 3070.997 'pathmatch: no match '\' '[\]]'': 
			test_must_fail test-tool wildmatch pathmatch '\' '[\]]'
		
ok 997 - pathmatch: no match '\' '[\]]'

expecting success of 3070.998 'pathmatch (via ls-files): no match '[\]]' '\'': 
				>expect &&
				git ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 998 - pathmatch (via ls-files): no match '[\]]' '\'

expecting success of 3070.999 'ipathmatch: no match '\' '[\]]'': 
			test_must_fail test-tool wildmatch ipathmatch '\' '[\]]'
		
ok 999 - ipathmatch: no match '\' '[\]]'

expecting success of 3070.1000 'ipathmatch (via ls-files): no match '[\]]' '\'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1000 - ipathmatch (via ls-files): no match '[\]]' '\'

expecting success of 3070.1001 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1001 - cleanup after previous file test

expecting success of 3070.1002 'setup match file test for ab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1002 - setup match file test for ab

expecting success of 3070.1003 'wildmatch: no match 'ab' 'a[]b'': 
			test_must_fail test-tool wildmatch wildmatch 'ab' 'a[]b'
		
ok 1003 - wildmatch: no match 'ab' 'a[]b'

expecting success of 3070.1004 'wildmatch (via ls-files): no match 'a[]b' 'ab'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1004 - wildmatch (via ls-files): no match 'a[]b' 'ab'

expecting success of 3070.1005 'iwildmatch: no match 'ab' 'a[]b'': 
			test_must_fail test-tool wildmatch iwildmatch 'ab' 'a[]b'
		
ok 1005 - iwildmatch: no match 'ab' 'a[]b'

expecting success of 3070.1006 'iwildmatch (via ls-files): no match 'a[]b' 'ab'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1006 - iwildmatch (via ls-files): no match 'a[]b' 'ab'

expecting success of 3070.1007 'pathmatch: no match 'ab' 'a[]b'': 
			test_must_fail test-tool wildmatch pathmatch 'ab' 'a[]b'
		
ok 1007 - pathmatch: no match 'ab' 'a[]b'

expecting success of 3070.1008 'pathmatch (via ls-files): no match 'a[]b' 'ab'': 
				>expect &&
				git ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1008 - pathmatch (via ls-files): no match 'a[]b' 'ab'

expecting success of 3070.1009 'ipathmatch: no match 'ab' 'a[]b'': 
			test_must_fail test-tool wildmatch ipathmatch 'ab' 'a[]b'
		
ok 1009 - ipathmatch: no match 'ab' 'a[]b'

expecting success of 3070.1010 'ipathmatch (via ls-files): no match 'a[]b' 'ab'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1010 - ipathmatch (via ls-files): no match 'a[]b' 'ab'

expecting success of 3070.1011 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1011 - cleanup after previous file test

expecting success of 3070.1012 'setup match file test for a[]b': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1012 - setup match file test for a[]b

expecting success of 3070.1013 'wildmatch: no match 'a[]b' 'a[]b'': 
			test_must_fail test-tool wildmatch wildmatch 'a[]b' 'a[]b'
		
ok 1013 - wildmatch: no match 'a[]b' 'a[]b'

expecting success of 3070.1014 'wildmatch (via ls-files): match 'a[]b' 'a[]b'': 
				printf '%s' 'a[]b' >expect &&
				git --glob-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1014 - wildmatch (via ls-files): match 'a[]b' 'a[]b'

expecting success of 3070.1015 'iwildmatch: no match 'a[]b' 'a[]b'': 
			test_must_fail test-tool wildmatch iwildmatch 'a[]b' 'a[]b'
		
ok 1015 - iwildmatch: no match 'a[]b' 'a[]b'

expecting success of 3070.1016 'iwildmatch (via ls-files): match 'a[]b' 'a[]b'': 
				printf '%s' 'a[]b' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1016 - iwildmatch (via ls-files): match 'a[]b' 'a[]b'

expecting success of 3070.1017 'pathmatch: no match 'a[]b' 'a[]b'': 
			test_must_fail test-tool wildmatch pathmatch 'a[]b' 'a[]b'
		
ok 1017 - pathmatch: no match 'a[]b' 'a[]b'

expecting success of 3070.1018 'pathmatch (via ls-files): match 'a[]b' 'a[]b'': 
				printf '%s' 'a[]b' >expect &&
				git ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1018 - pathmatch (via ls-files): match 'a[]b' 'a[]b'

expecting success of 3070.1019 'ipathmatch: no match 'a[]b' 'a[]b'': 
			test_must_fail test-tool wildmatch ipathmatch 'a[]b' 'a[]b'
		
ok 1019 - ipathmatch: no match 'a[]b' 'a[]b'

expecting success of 3070.1020 'ipathmatch (via ls-files): match 'a[]b' 'a[]b'': 
				printf '%s' 'a[]b' >expect &&
				git --icase-pathspecs ls-files -z -- 'a[]b' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1020 - ipathmatch (via ls-files): match 'a[]b' 'a[]b'

expecting success of 3070.1021 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a[]b
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1021 - cleanup after previous file test

expecting success of 3070.1022 'setup match file test for ab[': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1022 - setup match file test for ab[

expecting success of 3070.1023 'wildmatch: no match 'ab[' 'ab['': 
			test_must_fail test-tool wildmatch wildmatch 'ab[' 'ab['
		
ok 1023 - wildmatch: no match 'ab[' 'ab['

expecting success of 3070.1024 'wildmatch (via ls-files): match 'ab[' 'ab['': 
				printf '%s' 'ab[' >expect &&
				git --glob-pathspecs ls-files -z -- 'ab[' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1024 - wildmatch (via ls-files): match 'ab[' 'ab['

expecting success of 3070.1025 'iwildmatch: no match 'ab[' 'ab['': 
			test_must_fail test-tool wildmatch iwildmatch 'ab[' 'ab['
		
ok 1025 - iwildmatch: no match 'ab[' 'ab['

expecting success of 3070.1026 'iwildmatch (via ls-files): match 'ab[' 'ab['': 
				printf '%s' 'ab[' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'ab[' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1026 - iwildmatch (via ls-files): match 'ab[' 'ab['

expecting success of 3070.1027 'pathmatch: no match 'ab[' 'ab['': 
			test_must_fail test-tool wildmatch pathmatch 'ab[' 'ab['
		
ok 1027 - pathmatch: no match 'ab[' 'ab['

expecting success of 3070.1028 'pathmatch (via ls-files): match 'ab[' 'ab['': 
				printf '%s' 'ab[' >expect &&
				git ls-files -z -- 'ab[' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1028 - pathmatch (via ls-files): match 'ab[' 'ab['

expecting success of 3070.1029 'ipathmatch: no match 'ab[' 'ab['': 
			test_must_fail test-tool wildmatch ipathmatch 'ab[' 'ab['
		
ok 1029 - ipathmatch: no match 'ab[' 'ab['

expecting success of 3070.1030 'ipathmatch (via ls-files): match 'ab[' 'ab['': 
				printf '%s' 'ab[' >expect &&
				git --icase-pathspecs ls-files -z -- 'ab[' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1030 - ipathmatch (via ls-files): match 'ab[' 'ab['

expecting success of 3070.1031 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab[
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1031 - cleanup after previous file test

expecting success of 3070.1032 'setup match file test for ab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1032 - setup match file test for ab

expecting success of 3070.1033 'wildmatch: no match 'ab' '[!'': 
			test_must_fail test-tool wildmatch wildmatch 'ab' '[!'
		
ok 1033 - wildmatch: no match 'ab' '[!'

expecting success of 3070.1034 'wildmatch (via ls-files): no match '[!' 'ab'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[!' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1034 - wildmatch (via ls-files): no match '[!' 'ab'

expecting success of 3070.1035 'iwildmatch: no match 'ab' '[!'': 
			test_must_fail test-tool wildmatch iwildmatch 'ab' '[!'
		
ok 1035 - iwildmatch: no match 'ab' '[!'

expecting success of 3070.1036 'iwildmatch (via ls-files): no match '[!' 'ab'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1036 - iwildmatch (via ls-files): no match '[!' 'ab'

expecting success of 3070.1037 'pathmatch: no match 'ab' '[!'': 
			test_must_fail test-tool wildmatch pathmatch 'ab' '[!'
		
ok 1037 - pathmatch: no match 'ab' '[!'

expecting success of 3070.1038 'pathmatch (via ls-files): no match '[!' 'ab'': 
				>expect &&
				git ls-files -z -- '[!' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1038 - pathmatch (via ls-files): no match '[!' 'ab'

expecting success of 3070.1039 'ipathmatch: no match 'ab' '[!'': 
			test_must_fail test-tool wildmatch ipathmatch 'ab' '[!'
		
ok 1039 - ipathmatch: no match 'ab' '[!'

expecting success of 3070.1040 'ipathmatch (via ls-files): no match '[!' 'ab'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[!' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1040 - ipathmatch (via ls-files): no match '[!' 'ab'

expecting success of 3070.1041 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1041 - cleanup after previous file test

expecting success of 3070.1042 'setup match file test for ab': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1042 - setup match file test for ab

expecting success of 3070.1043 'wildmatch: no match 'ab' '[-'': 
			test_must_fail test-tool wildmatch wildmatch 'ab' '[-'
		
ok 1043 - wildmatch: no match 'ab' '[-'

expecting success of 3070.1044 'wildmatch (via ls-files): no match '[-' 'ab'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1044 - wildmatch (via ls-files): no match '[-' 'ab'

expecting success of 3070.1045 'iwildmatch: no match 'ab' '[-'': 
			test_must_fail test-tool wildmatch iwildmatch 'ab' '[-'
		
ok 1045 - iwildmatch: no match 'ab' '[-'

expecting success of 3070.1046 'iwildmatch (via ls-files): no match '[-' 'ab'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1046 - iwildmatch (via ls-files): no match '[-' 'ab'

expecting success of 3070.1047 'pathmatch: no match 'ab' '[-'': 
			test_must_fail test-tool wildmatch pathmatch 'ab' '[-'
		
ok 1047 - pathmatch: no match 'ab' '[-'

expecting success of 3070.1048 'pathmatch (via ls-files): no match '[-' 'ab'': 
				>expect &&
				git ls-files -z -- '[-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1048 - pathmatch (via ls-files): no match '[-' 'ab'

expecting success of 3070.1049 'ipathmatch: no match 'ab' '[-'': 
			test_must_fail test-tool wildmatch ipathmatch 'ab' '[-'
		
ok 1049 - ipathmatch: no match 'ab' '[-'

expecting success of 3070.1050 'ipathmatch (via ls-files): no match '[-' 'ab'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1050 - ipathmatch (via ls-files): no match '[-' 'ab'

expecting success of 3070.1051 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1051 - cleanup after previous file test

expecting success of 3070.1052 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1052 - setup match file test for -

expecting success of 3070.1053 'wildmatch: match '-' '[-]'': 
			test-tool wildmatch wildmatch '-' '[-]'
		
ok 1053 - wildmatch: match '-' '[-]'

expecting success of 3070.1054 'wildmatch (via ls-files): match '[-]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1054 - wildmatch (via ls-files): match '[-]' '-'

expecting success of 3070.1055 'iwildmatch: match '-' '[-]'': 
			test-tool wildmatch iwildmatch '-' '[-]'
		
ok 1055 - iwildmatch: match '-' '[-]'

expecting success of 3070.1056 'iwildmatch (via ls-files): match '[-]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1056 - iwildmatch (via ls-files): match '[-]' '-'

expecting success of 3070.1057 'pathmatch: match '-' '[-]'': 
			test-tool wildmatch pathmatch '-' '[-]'
		
ok 1057 - pathmatch: match '-' '[-]'

expecting success of 3070.1058 'pathmatch (via ls-files): match '[-]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1058 - pathmatch (via ls-files): match '[-]' '-'

expecting success of 3070.1059 'ipathmatch: match '-' '[-]'': 
			test-tool wildmatch ipathmatch '-' '[-]'
		
ok 1059 - ipathmatch: match '-' '[-]'

expecting success of 3070.1060 'ipathmatch (via ls-files): match '[-]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[-]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1060 - ipathmatch (via ls-files): match '[-]' '-'

expecting success of 3070.1061 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1061 - cleanup after previous file test

expecting success of 3070.1062 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1062 - setup match file test for -

expecting success of 3070.1063 'wildmatch: no match '-' '[a-'': 
			test_must_fail test-tool wildmatch wildmatch '-' '[a-'
		
ok 1063 - wildmatch: no match '-' '[a-'

expecting success of 3070.1064 'wildmatch (via ls-files): no match '[a-' '-'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1064 - wildmatch (via ls-files): no match '[a-' '-'

expecting success of 3070.1065 'iwildmatch: no match '-' '[a-'': 
			test_must_fail test-tool wildmatch iwildmatch '-' '[a-'
		
ok 1065 - iwildmatch: no match '-' '[a-'

expecting success of 3070.1066 'iwildmatch (via ls-files): no match '[a-' '-'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1066 - iwildmatch (via ls-files): no match '[a-' '-'

expecting success of 3070.1067 'pathmatch: no match '-' '[a-'': 
			test_must_fail test-tool wildmatch pathmatch '-' '[a-'
		
ok 1067 - pathmatch: no match '-' '[a-'

expecting success of 3070.1068 'pathmatch (via ls-files): no match '[a-' '-'': 
				>expect &&
				git ls-files -z -- '[a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1068 - pathmatch (via ls-files): no match '[a-' '-'

expecting success of 3070.1069 'ipathmatch: no match '-' '[a-'': 
			test_must_fail test-tool wildmatch ipathmatch '-' '[a-'
		
ok 1069 - ipathmatch: no match '-' '[a-'

expecting success of 3070.1070 'ipathmatch (via ls-files): no match '[a-' '-'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1070 - ipathmatch (via ls-files): no match '[a-' '-'

expecting success of 3070.1071 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1071 - cleanup after previous file test

expecting success of 3070.1072 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1072 - setup match file test for -

expecting success of 3070.1073 'wildmatch: no match '-' '[!a-'': 
			test_must_fail test-tool wildmatch wildmatch '-' '[!a-'
		
ok 1073 - wildmatch: no match '-' '[!a-'

expecting success of 3070.1074 'wildmatch (via ls-files): no match '[!a-' '-'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[!a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1074 - wildmatch (via ls-files): no match '[!a-' '-'

expecting success of 3070.1075 'iwildmatch: no match '-' '[!a-'': 
			test_must_fail test-tool wildmatch iwildmatch '-' '[!a-'
		
ok 1075 - iwildmatch: no match '-' '[!a-'

expecting success of 3070.1076 'iwildmatch (via ls-files): no match '[!a-' '-'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1076 - iwildmatch (via ls-files): no match '[!a-' '-'

expecting success of 3070.1077 'pathmatch: no match '-' '[!a-'': 
			test_must_fail test-tool wildmatch pathmatch '-' '[!a-'
		
ok 1077 - pathmatch: no match '-' '[!a-'

expecting success of 3070.1078 'pathmatch (via ls-files): no match '[!a-' '-'': 
				>expect &&
				git ls-files -z -- '[!a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1078 - pathmatch (via ls-files): no match '[!a-' '-'

expecting success of 3070.1079 'ipathmatch: no match '-' '[!a-'': 
			test_must_fail test-tool wildmatch ipathmatch '-' '[!a-'
		
ok 1079 - ipathmatch: no match '-' '[!a-'

expecting success of 3070.1080 'ipathmatch (via ls-files): no match '[!a-' '-'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[!a-' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1080 - ipathmatch (via ls-files): no match '[!a-' '-'

expecting success of 3070.1081 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1081 - cleanup after previous file test

expecting success of 3070.1082 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1082 - setup match file test for -

expecting success of 3070.1083 'wildmatch: match '-' '[--A]'': 
			test-tool wildmatch wildmatch '-' '[--A]'
		
ok 1083 - wildmatch: match '-' '[--A]'

expecting success of 3070.1084 'wildmatch (via ls-files): match '[--A]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1084 - wildmatch (via ls-files): match '[--A]' '-'

expecting success of 3070.1085 'iwildmatch: match '-' '[--A]'': 
			test-tool wildmatch iwildmatch '-' '[--A]'
		
ok 1085 - iwildmatch: match '-' '[--A]'

expecting success of 3070.1086 'iwildmatch (via ls-files): match '[--A]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1086 - iwildmatch (via ls-files): match '[--A]' '-'

expecting success of 3070.1087 'pathmatch: match '-' '[--A]'': 
			test-tool wildmatch pathmatch '-' '[--A]'
		
ok 1087 - pathmatch: match '-' '[--A]'

expecting success of 3070.1088 'pathmatch (via ls-files): match '[--A]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1088 - pathmatch (via ls-files): match '[--A]' '-'

expecting success of 3070.1089 'ipathmatch: match '-' '[--A]'': 
			test-tool wildmatch ipathmatch '-' '[--A]'
		
ok 1089 - ipathmatch: match '-' '[--A]'

expecting success of 3070.1090 'ipathmatch (via ls-files): match '[--A]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1090 - ipathmatch (via ls-files): match '[--A]' '-'

expecting success of 3070.1091 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1091 - cleanup after previous file test

expecting success of 3070.1092 'setup match file test for 5': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1092 - setup match file test for 5

expecting success of 3070.1093 'wildmatch: match '5' '[--A]'': 
			test-tool wildmatch wildmatch '5' '[--A]'
		
ok 1093 - wildmatch: match '5' '[--A]'

expecting success of 3070.1094 'wildmatch (via ls-files): match '[--A]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1094 - wildmatch (via ls-files): match '[--A]' '5'

expecting success of 3070.1095 'iwildmatch: match '5' '[--A]'': 
			test-tool wildmatch iwildmatch '5' '[--A]'
		
ok 1095 - iwildmatch: match '5' '[--A]'

expecting success of 3070.1096 'iwildmatch (via ls-files): match '[--A]' '5'': 
				printf '%s' '5' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1096 - iwildmatch (via ls-files): match '[--A]' '5'

expecting success of 3070.1097 'pathmatch: match '5' '[--A]'': 
			test-tool wildmatch pathmatch '5' '[--A]'
		
ok 1097 - pathmatch: match '5' '[--A]'

expecting success of 3070.1098 'pathmatch (via ls-files): match '[--A]' '5'': 
				printf '%s' '5' >expect &&
				git ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1098 - pathmatch (via ls-files): match '[--A]' '5'

expecting success of 3070.1099 'ipathmatch: match '5' '[--A]'': 
			test-tool wildmatch ipathmatch '5' '[--A]'
		
ok 1099 - ipathmatch: match '5' '[--A]'

expecting success of 3070.1100 'ipathmatch (via ls-files): match '[--A]' '5'': 
				printf '%s' '5' >expect &&
				git --icase-pathspecs ls-files -z -- '[--A]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1100 - ipathmatch (via ls-files): match '[--A]' '5'

expecting success of 3070.1101 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 5
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1101 - cleanup after previous file test

expecting success of 3070.1102 'setup match file test for  ': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1102 - setup match file test for  

expecting success of 3070.1103 'wildmatch: match ' ' '[ --]'': 
			test-tool wildmatch wildmatch ' ' '[ --]'
		
ok 1103 - wildmatch: match ' ' '[ --]'

expecting success of 3070.1104 'wildmatch (via ls-files): match '[ --]' ' '': 
				printf '%s' ' ' >expect &&
				git --glob-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1104 - wildmatch (via ls-files): match '[ --]' ' '

expecting success of 3070.1105 'iwildmatch: match ' ' '[ --]'': 
			test-tool wildmatch iwildmatch ' ' '[ --]'
		
ok 1105 - iwildmatch: match ' ' '[ --]'

expecting success of 3070.1106 'iwildmatch (via ls-files): match '[ --]' ' '': 
				printf '%s' ' ' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1106 - iwildmatch (via ls-files): match '[ --]' ' '

expecting success of 3070.1107 'pathmatch: match ' ' '[ --]'': 
			test-tool wildmatch pathmatch ' ' '[ --]'
		
ok 1107 - pathmatch: match ' ' '[ --]'

expecting success of 3070.1108 'pathmatch (via ls-files): match '[ --]' ' '': 
				printf '%s' ' ' >expect &&
				git ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1108 - pathmatch (via ls-files): match '[ --]' ' '

expecting success of 3070.1109 'ipathmatch: match ' ' '[ --]'': 
			test-tool wildmatch ipathmatch ' ' '[ --]'
		
ok 1109 - ipathmatch: match ' ' '[ --]'

expecting success of 3070.1110 'ipathmatch (via ls-files): match '[ --]' ' '': 
				printf '%s' ' ' >expect &&
				git --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1110 - ipathmatch (via ls-files): match '[ --]' ' '

expecting success of 3070.1111 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing  
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1111 - cleanup after previous file test

expecting success of 3070.1112 'setup match file test for $': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1112 - setup match file test for $

expecting success of 3070.1113 'wildmatch: match '$' '[ --]'': 
			test-tool wildmatch wildmatch '$' '[ --]'
		
ok 1113 - wildmatch: match '$' '[ --]'

expecting success of 3070.1114 'wildmatch (via ls-files): match '[ --]' '$'': 
				printf '%s' '$' >expect &&
				git --glob-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1114 - wildmatch (via ls-files): match '[ --]' '$'

expecting success of 3070.1115 'iwildmatch: match '$' '[ --]'': 
			test-tool wildmatch iwildmatch '$' '[ --]'
		
ok 1115 - iwildmatch: match '$' '[ --]'

expecting success of 3070.1116 'iwildmatch (via ls-files): match '[ --]' '$'': 
				printf '%s' '$' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1116 - iwildmatch (via ls-files): match '[ --]' '$'

expecting success of 3070.1117 'pathmatch: match '$' '[ --]'': 
			test-tool wildmatch pathmatch '$' '[ --]'
		
ok 1117 - pathmatch: match '$' '[ --]'

expecting success of 3070.1118 'pathmatch (via ls-files): match '[ --]' '$'': 
				printf '%s' '$' >expect &&
				git ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1118 - pathmatch (via ls-files): match '[ --]' '$'

expecting success of 3070.1119 'ipathmatch: match '$' '[ --]'': 
			test-tool wildmatch ipathmatch '$' '[ --]'
		
ok 1119 - ipathmatch: match '$' '[ --]'

expecting success of 3070.1120 'ipathmatch (via ls-files): match '[ --]' '$'': 
				printf '%s' '$' >expect &&
				git --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1120 - ipathmatch (via ls-files): match '[ --]' '$'

expecting success of 3070.1121 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing $
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1121 - cleanup after previous file test

expecting success of 3070.1122 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1122 - setup match file test for -

expecting success of 3070.1123 'wildmatch: match '-' '[ --]'': 
			test-tool wildmatch wildmatch '-' '[ --]'
		
ok 1123 - wildmatch: match '-' '[ --]'

expecting success of 3070.1124 'wildmatch (via ls-files): match '[ --]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1124 - wildmatch (via ls-files): match '[ --]' '-'

expecting success of 3070.1125 'iwildmatch: match '-' '[ --]'': 
			test-tool wildmatch iwildmatch '-' '[ --]'
		
ok 1125 - iwildmatch: match '-' '[ --]'

expecting success of 3070.1126 'iwildmatch (via ls-files): match '[ --]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1126 - iwildmatch (via ls-files): match '[ --]' '-'

expecting success of 3070.1127 'pathmatch: match '-' '[ --]'': 
			test-tool wildmatch pathmatch '-' '[ --]'
		
ok 1127 - pathmatch: match '-' '[ --]'

expecting success of 3070.1128 'pathmatch (via ls-files): match '[ --]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1128 - pathmatch (via ls-files): match '[ --]' '-'

expecting success of 3070.1129 'ipathmatch: match '-' '[ --]'': 
			test-tool wildmatch ipathmatch '-' '[ --]'
		
ok 1129 - ipathmatch: match '-' '[ --]'

expecting success of 3070.1130 'ipathmatch (via ls-files): match '[ --]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1130 - ipathmatch (via ls-files): match '[ --]' '-'

expecting success of 3070.1131 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1131 - cleanup after previous file test

expecting success of 3070.1132 'setup match file test for 0': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1132 - setup match file test for 0

expecting success of 3070.1133 'wildmatch: no match '0' '[ --]'': 
			test_must_fail test-tool wildmatch wildmatch '0' '[ --]'
		
ok 1133 - wildmatch: no match '0' '[ --]'

expecting success of 3070.1134 'wildmatch (via ls-files): no match '[ --]' '0'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1134 - wildmatch (via ls-files): no match '[ --]' '0'

expecting success of 3070.1135 'iwildmatch: no match '0' '[ --]'': 
			test_must_fail test-tool wildmatch iwildmatch '0' '[ --]'
		
ok 1135 - iwildmatch: no match '0' '[ --]'

expecting success of 3070.1136 'iwildmatch (via ls-files): no match '[ --]' '0'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1136 - iwildmatch (via ls-files): no match '[ --]' '0'

expecting success of 3070.1137 'pathmatch: no match '0' '[ --]'': 
			test_must_fail test-tool wildmatch pathmatch '0' '[ --]'
		
ok 1137 - pathmatch: no match '0' '[ --]'

expecting success of 3070.1138 'pathmatch (via ls-files): no match '[ --]' '0'': 
				>expect &&
				git ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1138 - pathmatch (via ls-files): no match '[ --]' '0'

expecting success of 3070.1139 'ipathmatch: no match '0' '[ --]'': 
			test_must_fail test-tool wildmatch ipathmatch '0' '[ --]'
		
ok 1139 - ipathmatch: no match '0' '[ --]'

expecting success of 3070.1140 'ipathmatch (via ls-files): no match '[ --]' '0'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[ --]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1140 - ipathmatch (via ls-files): no match '[ --]' '0'

expecting success of 3070.1141 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 0
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1141 - cleanup after previous file test

expecting success of 3070.1142 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1142 - setup match file test for -

expecting success of 3070.1143 'wildmatch: match '-' '[---]'': 
			test-tool wildmatch wildmatch '-' '[---]'
		
ok 1143 - wildmatch: match '-' '[---]'

expecting success of 3070.1144 'wildmatch (via ls-files): match '[---]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[---]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1144 - wildmatch (via ls-files): match '[---]' '-'

expecting success of 3070.1145 'iwildmatch: match '-' '[---]'': 
			test-tool wildmatch iwildmatch '-' '[---]'
		
ok 1145 - iwildmatch: match '-' '[---]'

expecting success of 3070.1146 'iwildmatch (via ls-files): match '[---]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[---]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1146 - iwildmatch (via ls-files): match '[---]' '-'

expecting success of 3070.1147 'pathmatch: match '-' '[---]'': 
			test-tool wildmatch pathmatch '-' '[---]'
		
ok 1147 - pathmatch: match '-' '[---]'

expecting success of 3070.1148 'pathmatch (via ls-files): match '[---]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[---]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1148 - pathmatch (via ls-files): match '[---]' '-'

expecting success of 3070.1149 'ipathmatch: match '-' '[---]'': 
			test-tool wildmatch ipathmatch '-' '[---]'
		
ok 1149 - ipathmatch: match '-' '[---]'

expecting success of 3070.1150 'ipathmatch (via ls-files): match '[---]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[---]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1150 - ipathmatch (via ls-files): match '[---]' '-'

expecting success of 3070.1151 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1151 - cleanup after previous file test

expecting success of 3070.1152 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1152 - setup match file test for -

expecting success of 3070.1153 'wildmatch: match '-' '[------]'': 
			test-tool wildmatch wildmatch '-' '[------]'
		
ok 1153 - wildmatch: match '-' '[------]'

expecting success of 3070.1154 'wildmatch (via ls-files): match '[------]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1154 - wildmatch (via ls-files): match '[------]' '-'

expecting success of 3070.1155 'iwildmatch: match '-' '[------]'': 
			test-tool wildmatch iwildmatch '-' '[------]'
		
ok 1155 - iwildmatch: match '-' '[------]'

expecting success of 3070.1156 'iwildmatch (via ls-files): match '[------]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1156 - iwildmatch (via ls-files): match '[------]' '-'

expecting success of 3070.1157 'pathmatch: match '-' '[------]'': 
			test-tool wildmatch pathmatch '-' '[------]'
		
ok 1157 - pathmatch: match '-' '[------]'

expecting success of 3070.1158 'pathmatch (via ls-files): match '[------]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1158 - pathmatch (via ls-files): match '[------]' '-'

expecting success of 3070.1159 'ipathmatch: match '-' '[------]'': 
			test-tool wildmatch ipathmatch '-' '[------]'
		
ok 1159 - ipathmatch: match '-' '[------]'

expecting success of 3070.1160 'ipathmatch (via ls-files): match '[------]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1160 - ipathmatch (via ls-files): match '[------]' '-'

expecting success of 3070.1161 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1161 - cleanup after previous file test

expecting success of 3070.1162 'setup match file test for j': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1162 - setup match file test for j

expecting success of 3070.1163 'wildmatch: no match 'j' '[a-e-n]'': 
			test_must_fail test-tool wildmatch wildmatch 'j' '[a-e-n]'
		
ok 1163 - wildmatch: no match 'j' '[a-e-n]'

expecting success of 3070.1164 'wildmatch (via ls-files): no match '[a-e-n]' 'j'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1164 - wildmatch (via ls-files): no match '[a-e-n]' 'j'

expecting success of 3070.1165 'iwildmatch: no match 'j' '[a-e-n]'': 
			test_must_fail test-tool wildmatch iwildmatch 'j' '[a-e-n]'
		
ok 1165 - iwildmatch: no match 'j' '[a-e-n]'

expecting success of 3070.1166 'iwildmatch (via ls-files): no match '[a-e-n]' 'j'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1166 - iwildmatch (via ls-files): no match '[a-e-n]' 'j'

expecting success of 3070.1167 'pathmatch: no match 'j' '[a-e-n]'': 
			test_must_fail test-tool wildmatch pathmatch 'j' '[a-e-n]'
		
ok 1167 - pathmatch: no match 'j' '[a-e-n]'

expecting success of 3070.1168 'pathmatch (via ls-files): no match '[a-e-n]' 'j'': 
				>expect &&
				git ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1168 - pathmatch (via ls-files): no match '[a-e-n]' 'j'

expecting success of 3070.1169 'ipathmatch: no match 'j' '[a-e-n]'': 
			test_must_fail test-tool wildmatch ipathmatch 'j' '[a-e-n]'
		
ok 1169 - ipathmatch: no match 'j' '[a-e-n]'

expecting success of 3070.1170 'ipathmatch (via ls-files): no match '[a-e-n]' 'j'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1170 - ipathmatch (via ls-files): no match '[a-e-n]' 'j'

expecting success of 3070.1171 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing j
ok 1171 - cleanup after previous file test

expecting success of 3070.1172 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1172 - setup match file test for -

expecting success of 3070.1173 'wildmatch: match '-' '[a-e-n]'': 
			test-tool wildmatch wildmatch '-' '[a-e-n]'
		
ok 1173 - wildmatch: match '-' '[a-e-n]'

expecting success of 3070.1174 'wildmatch (via ls-files): match '[a-e-n]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1174 - wildmatch (via ls-files): match '[a-e-n]' '-'

expecting success of 3070.1175 'iwildmatch: match '-' '[a-e-n]'': 
			test-tool wildmatch iwildmatch '-' '[a-e-n]'
		
ok 1175 - iwildmatch: match '-' '[a-e-n]'

expecting success of 3070.1176 'iwildmatch (via ls-files): match '[a-e-n]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1176 - iwildmatch (via ls-files): match '[a-e-n]' '-'

expecting success of 3070.1177 'pathmatch: match '-' '[a-e-n]'': 
			test-tool wildmatch pathmatch '-' '[a-e-n]'
		
ok 1177 - pathmatch: match '-' '[a-e-n]'

expecting success of 3070.1178 'pathmatch (via ls-files): match '[a-e-n]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1178 - pathmatch (via ls-files): match '[a-e-n]' '-'

expecting success of 3070.1179 'ipathmatch: match '-' '[a-e-n]'': 
			test-tool wildmatch ipathmatch '-' '[a-e-n]'
		
ok 1179 - ipathmatch: match '-' '[a-e-n]'

expecting success of 3070.1180 'ipathmatch (via ls-files): match '[a-e-n]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-e-n]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1180 - ipathmatch (via ls-files): match '[a-e-n]' '-'

expecting success of 3070.1181 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1181 - cleanup after previous file test

expecting success of 3070.1182 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1182 - setup match file test for a

expecting success of 3070.1183 'wildmatch: match 'a' '[!------]'': 
			test-tool wildmatch wildmatch 'a' '[!------]'
		
ok 1183 - wildmatch: match 'a' '[!------]'

expecting success of 3070.1184 'wildmatch (via ls-files): match '[!------]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[!------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1184 - wildmatch (via ls-files): match '[!------]' 'a'

expecting success of 3070.1185 'iwildmatch: match 'a' '[!------]'': 
			test-tool wildmatch iwildmatch 'a' '[!------]'
		
ok 1185 - iwildmatch: match 'a' '[!------]'

expecting success of 3070.1186 'iwildmatch (via ls-files): match '[!------]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1186 - iwildmatch (via ls-files): match '[!------]' 'a'

expecting success of 3070.1187 'pathmatch: match 'a' '[!------]'': 
			test-tool wildmatch pathmatch 'a' '[!------]'
		
ok 1187 - pathmatch: match 'a' '[!------]'

expecting success of 3070.1188 'pathmatch (via ls-files): match '[!------]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[!------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1188 - pathmatch (via ls-files): match '[!------]' 'a'

expecting success of 3070.1189 'ipathmatch: match 'a' '[!------]'': 
			test-tool wildmatch ipathmatch 'a' '[!------]'
		
ok 1189 - ipathmatch: match 'a' '[!------]'

expecting success of 3070.1190 'ipathmatch (via ls-files): match '[!------]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[!------]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1190 - ipathmatch (via ls-files): match '[!------]' 'a'

expecting success of 3070.1191 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1191 - cleanup after previous file test

expecting success of 3070.1192 'setup match file test for [': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1192 - setup match file test for [

expecting success of 3070.1193 'wildmatch: no match '[' '[]-a]'': 
			test_must_fail test-tool wildmatch wildmatch '[' '[]-a]'
		
ok 1193 - wildmatch: no match '[' '[]-a]'

expecting success of 3070.1194 'wildmatch (via ls-files): no match '[]-a]' '['': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1194 - wildmatch (via ls-files): no match '[]-a]' '['

expecting success of 3070.1195 'iwildmatch: no match '[' '[]-a]'': 
			test_must_fail test-tool wildmatch iwildmatch '[' '[]-a]'
		
ok 1195 - iwildmatch: no match '[' '[]-a]'

expecting success of 3070.1196 'iwildmatch (via ls-files): no match '[]-a]' '['': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1196 - iwildmatch (via ls-files): no match '[]-a]' '['

expecting success of 3070.1197 'pathmatch: no match '[' '[]-a]'': 
			test_must_fail test-tool wildmatch pathmatch '[' '[]-a]'
		
ok 1197 - pathmatch: no match '[' '[]-a]'

expecting success of 3070.1198 'pathmatch (via ls-files): no match '[]-a]' '['': 
				>expect &&
				git ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1198 - pathmatch (via ls-files): no match '[]-a]' '['

expecting success of 3070.1199 'ipathmatch: no match '[' '[]-a]'': 
			test_must_fail test-tool wildmatch ipathmatch '[' '[]-a]'
		
ok 1199 - ipathmatch: no match '[' '[]-a]'

expecting success of 3070.1200 'ipathmatch (via ls-files): no match '[]-a]' '['': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1200 - ipathmatch (via ls-files): no match '[]-a]' '['

expecting success of 3070.1201 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1201 - cleanup after previous file test

expecting success of 3070.1202 'setup match file test for ^': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1202 - setup match file test for ^

expecting success of 3070.1203 'wildmatch: match '^' '[]-a]'': 
			test-tool wildmatch wildmatch '^' '[]-a]'
		
ok 1203 - wildmatch: match '^' '[]-a]'

expecting success of 3070.1204 'wildmatch (via ls-files): match '[]-a]' '^'': 
				printf '%s' '^' >expect &&
				git --glob-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1204 - wildmatch (via ls-files): match '[]-a]' '^'

expecting success of 3070.1205 'iwildmatch: match '^' '[]-a]'': 
			test-tool wildmatch iwildmatch '^' '[]-a]'
		
ok 1205 - iwildmatch: match '^' '[]-a]'

expecting success of 3070.1206 'iwildmatch (via ls-files): match '[]-a]' '^'': 
				printf '%s' '^' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1206 - iwildmatch (via ls-files): match '[]-a]' '^'

expecting success of 3070.1207 'pathmatch: match '^' '[]-a]'': 
			test-tool wildmatch pathmatch '^' '[]-a]'
		
ok 1207 - pathmatch: match '^' '[]-a]'

expecting success of 3070.1208 'pathmatch (via ls-files): match '[]-a]' '^'': 
				printf '%s' '^' >expect &&
				git ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1208 - pathmatch (via ls-files): match '[]-a]' '^'

expecting success of 3070.1209 'ipathmatch: match '^' '[]-a]'': 
			test-tool wildmatch ipathmatch '^' '[]-a]'
		
ok 1209 - ipathmatch: match '^' '[]-a]'

expecting success of 3070.1210 'ipathmatch (via ls-files): match '[]-a]' '^'': 
				printf '%s' '^' >expect &&
				git --icase-pathspecs ls-files -z -- '[]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1210 - ipathmatch (via ls-files): match '[]-a]' '^'

expecting success of 3070.1211 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ^
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1211 - cleanup after previous file test

expecting success of 3070.1212 'setup match file test for ^': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1212 - setup match file test for ^

expecting success of 3070.1213 'wildmatch: no match '^' '[!]-a]'': 
			test_must_fail test-tool wildmatch wildmatch '^' '[!]-a]'
		
ok 1213 - wildmatch: no match '^' '[!]-a]'

expecting success of 3070.1214 'wildmatch (via ls-files): no match '[!]-a]' '^'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1214 - wildmatch (via ls-files): no match '[!]-a]' '^'

expecting success of 3070.1215 'iwildmatch: no match '^' '[!]-a]'': 
			test_must_fail test-tool wildmatch iwildmatch '^' '[!]-a]'
		
ok 1215 - iwildmatch: no match '^' '[!]-a]'

expecting success of 3070.1216 'iwildmatch (via ls-files): no match '[!]-a]' '^'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1216 - iwildmatch (via ls-files): no match '[!]-a]' '^'

expecting success of 3070.1217 'pathmatch: no match '^' '[!]-a]'': 
			test_must_fail test-tool wildmatch pathmatch '^' '[!]-a]'
		
ok 1217 - pathmatch: no match '^' '[!]-a]'

expecting success of 3070.1218 'pathmatch (via ls-files): no match '[!]-a]' '^'': 
				>expect &&
				git ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1218 - pathmatch (via ls-files): no match '[!]-a]' '^'

expecting success of 3070.1219 'ipathmatch: no match '^' '[!]-a]'': 
			test_must_fail test-tool wildmatch ipathmatch '^' '[!]-a]'
		
ok 1219 - ipathmatch: no match '^' '[!]-a]'

expecting success of 3070.1220 'ipathmatch (via ls-files): no match '[!]-a]' '^'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1220 - ipathmatch (via ls-files): no match '[!]-a]' '^'

expecting success of 3070.1221 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ^
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1221 - cleanup after previous file test

expecting success of 3070.1222 'setup match file test for [': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1222 - setup match file test for [

expecting success of 3070.1223 'wildmatch: match '[' '[!]-a]'': 
			test-tool wildmatch wildmatch '[' '[!]-a]'
		
ok 1223 - wildmatch: match '[' '[!]-a]'

expecting success of 3070.1224 'wildmatch (via ls-files): match '[!]-a]' '['': 
				printf '%s' '[' >expect &&
				git --glob-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1224 - wildmatch (via ls-files): match '[!]-a]' '['

expecting success of 3070.1225 'iwildmatch: match '[' '[!]-a]'': 
			test-tool wildmatch iwildmatch '[' '[!]-a]'
		
ok 1225 - iwildmatch: match '[' '[!]-a]'

expecting success of 3070.1226 'iwildmatch (via ls-files): match '[!]-a]' '['': 
				printf '%s' '[' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1226 - iwildmatch (via ls-files): match '[!]-a]' '['

expecting success of 3070.1227 'pathmatch: match '[' '[!]-a]'': 
			test-tool wildmatch pathmatch '[' '[!]-a]'
		
ok 1227 - pathmatch: match '[' '[!]-a]'

expecting success of 3070.1228 'pathmatch (via ls-files): match '[!]-a]' '['': 
				printf '%s' '[' >expect &&
				git ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1228 - pathmatch (via ls-files): match '[!]-a]' '['

expecting success of 3070.1229 'ipathmatch: match '[' '[!]-a]'': 
			test-tool wildmatch ipathmatch '[' '[!]-a]'
		
ok 1229 - ipathmatch: match '[' '[!]-a]'

expecting success of 3070.1230 'ipathmatch (via ls-files): match '[!]-a]' '['': 
				printf '%s' '[' >expect &&
				git --icase-pathspecs ls-files -z -- '[!]-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1230 - ipathmatch (via ls-files): match '[!]-a]' '['

expecting success of 3070.1231 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1231 - cleanup after previous file test

expecting success of 3070.1232 'setup match file test for ^': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1232 - setup match file test for ^

expecting success of 3070.1233 'wildmatch: match '^' '[a^bc]'': 
			test-tool wildmatch wildmatch '^' '[a^bc]'
		
ok 1233 - wildmatch: match '^' '[a^bc]'

expecting success of 3070.1234 'wildmatch (via ls-files): match '[a^bc]' '^'': 
				printf '%s' '^' >expect &&
				git --glob-pathspecs ls-files -z -- '[a^bc]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1234 - wildmatch (via ls-files): match '[a^bc]' '^'

expecting success of 3070.1235 'iwildmatch: match '^' '[a^bc]'': 
			test-tool wildmatch iwildmatch '^' '[a^bc]'
		
ok 1235 - iwildmatch: match '^' '[a^bc]'

expecting success of 3070.1236 'iwildmatch (via ls-files): match '[a^bc]' '^'': 
				printf '%s' '^' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a^bc]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1236 - iwildmatch (via ls-files): match '[a^bc]' '^'

expecting success of 3070.1237 'pathmatch: match '^' '[a^bc]'': 
			test-tool wildmatch pathmatch '^' '[a^bc]'
		
ok 1237 - pathmatch: match '^' '[a^bc]'

expecting success of 3070.1238 'pathmatch (via ls-files): match '[a^bc]' '^'': 
				printf '%s' '^' >expect &&
				git ls-files -z -- '[a^bc]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1238 - pathmatch (via ls-files): match '[a^bc]' '^'

expecting success of 3070.1239 'ipathmatch: match '^' '[a^bc]'': 
			test-tool wildmatch ipathmatch '^' '[a^bc]'
		
ok 1239 - ipathmatch: match '^' '[a^bc]'

expecting success of 3070.1240 'ipathmatch (via ls-files): match '[a^bc]' '^'': 
				printf '%s' '^' >expect &&
				git --icase-pathspecs ls-files -z -- '[a^bc]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1240 - ipathmatch (via ls-files): match '[a^bc]' '^'

expecting success of 3070.1241 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ^
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1241 - cleanup after previous file test

expecting success of 3070.1242 'setup match file test for -b]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1242 - setup match file test for -b]

expecting success of 3070.1243 'wildmatch: match '-b]' '[a-]b]'': 
			test-tool wildmatch wildmatch '-b]' '[a-]b]'
		
ok 1243 - wildmatch: match '-b]' '[a-]b]'

expecting success of 3070.1244 'wildmatch (via ls-files): match '[a-]b]' '-b]'': 
				printf '%s' '-b]' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-]b]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1244 - wildmatch (via ls-files): match '[a-]b]' '-b]'

expecting success of 3070.1245 'iwildmatch: match '-b]' '[a-]b]'': 
			test-tool wildmatch iwildmatch '-b]' '[a-]b]'
		
ok 1245 - iwildmatch: match '-b]' '[a-]b]'

expecting success of 3070.1246 'iwildmatch (via ls-files): match '[a-]b]' '-b]'': 
				printf '%s' '-b]' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-]b]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1246 - iwildmatch (via ls-files): match '[a-]b]' '-b]'

expecting success of 3070.1247 'pathmatch: match '-b]' '[a-]b]'': 
			test-tool wildmatch pathmatch '-b]' '[a-]b]'
		
ok 1247 - pathmatch: match '-b]' '[a-]b]'

expecting success of 3070.1248 'pathmatch (via ls-files): match '[a-]b]' '-b]'': 
				printf '%s' '-b]' >expect &&
				git ls-files -z -- '[a-]b]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1248 - pathmatch (via ls-files): match '[a-]b]' '-b]'

expecting success of 3070.1249 'ipathmatch: match '-b]' '[a-]b]'': 
			test-tool wildmatch ipathmatch '-b]' '[a-]b]'
		
ok 1249 - ipathmatch: match '-b]' '[a-]b]'

expecting success of 3070.1250 'ipathmatch (via ls-files): match '[a-]b]' '-b]'': 
				printf '%s' '-b]' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-]b]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1250 - ipathmatch (via ls-files): match '[a-]b]' '-b]'

expecting success of 3070.1251 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -b]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1251 - cleanup after previous file test

expecting success of 3070.1252 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1252 - setup match file test for \

expecting success of 3070.1253 'wildmatch: no match '\' '[\]'': 
			test_must_fail test-tool wildmatch wildmatch '\' '[\]'
		
ok 1253 - wildmatch: no match '\' '[\]'

expecting success of 3070.1254 'wildmatch (via ls-files): no match '[\]' '\'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1254 - wildmatch (via ls-files): no match '[\]' '\'

expecting success of 3070.1255 'iwildmatch: no match '\' '[\]'': 
			test_must_fail test-tool wildmatch iwildmatch '\' '[\]'
		
ok 1255 - iwildmatch: no match '\' '[\]'

expecting success of 3070.1256 'iwildmatch (via ls-files): no match '[\]' '\'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1256 - iwildmatch (via ls-files): no match '[\]' '\'

expecting success of 3070.1257 'pathmatch: no match '\' '[\]'': 
			test_must_fail test-tool wildmatch pathmatch '\' '[\]'
		
ok 1257 - pathmatch: no match '\' '[\]'

expecting success of 3070.1258 'pathmatch (via ls-files): no match '[\]' '\'': 
				>expect &&
				git ls-files -z -- '[\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1258 - pathmatch (via ls-files): no match '[\]' '\'

expecting success of 3070.1259 'ipathmatch: no match '\' '[\]'': 
			test_must_fail test-tool wildmatch ipathmatch '\' '[\]'
		
ok 1259 - ipathmatch: no match '\' '[\]'

expecting success of 3070.1260 'ipathmatch (via ls-files): no match '[\]' '\'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1260 - ipathmatch (via ls-files): no match '[\]' '\'

expecting success of 3070.1261 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1261 - cleanup after previous file test

expecting success of 3070.1262 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1262 - setup match file test for \

expecting success of 3070.1263 'wildmatch: match '\' '[\\]'': 
			test-tool wildmatch wildmatch '\' '[\\]'
		
ok 1263 - wildmatch: match '\' '[\\]'

expecting success of 3070.1264 'wildmatch (via ls-files): match '[\\]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs ls-files -z -- '[\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1264 - wildmatch (via ls-files): match '[\\]' '\'

expecting success of 3070.1265 'iwildmatch: match '\' '[\\]'': 
			test-tool wildmatch iwildmatch '\' '[\\]'
		
ok 1265 - iwildmatch: match '\' '[\\]'

expecting success of 3070.1266 'iwildmatch (via ls-files): match '[\\]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1266 - iwildmatch (via ls-files): match '[\\]' '\'

expecting success of 3070.1267 'pathmatch: match '\' '[\\]'': 
			test-tool wildmatch pathmatch '\' '[\\]'
		
ok 1267 - pathmatch: match '\' '[\\]'

expecting success of 3070.1268 'pathmatch (via ls-files): match '[\\]' '\'': 
				printf '%s' '\' >expect &&
				git ls-files -z -- '[\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1268 - pathmatch (via ls-files): match '[\\]' '\'

expecting success of 3070.1269 'ipathmatch: match '\' '[\\]'': 
			test-tool wildmatch ipathmatch '\' '[\\]'
		
ok 1269 - ipathmatch: match '\' '[\\]'

expecting success of 3070.1270 'ipathmatch (via ls-files): match '[\\]' '\'': 
				printf '%s' '\' >expect &&
				git --icase-pathspecs ls-files -z -- '[\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1270 - ipathmatch (via ls-files): match '[\\]' '\'

expecting success of 3070.1271 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1271 - cleanup after previous file test

expecting success of 3070.1272 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1272 - setup match file test for \

expecting success of 3070.1273 'wildmatch: no match '\' '[!\\]'': 
			test_must_fail test-tool wildmatch wildmatch '\' '[!\\]'
		
ok 1273 - wildmatch: no match '\' '[!\\]'

expecting success of 3070.1274 'wildmatch (via ls-files): no match '[!\\]' '\'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[!\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1274 - wildmatch (via ls-files): no match '[!\\]' '\'

expecting success of 3070.1275 'iwildmatch: no match '\' '[!\\]'': 
			test_must_fail test-tool wildmatch iwildmatch '\' '[!\\]'
		
ok 1275 - iwildmatch: no match '\' '[!\\]'

expecting success of 3070.1276 'iwildmatch (via ls-files): no match '[!\\]' '\'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[!\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1276 - iwildmatch (via ls-files): no match '[!\\]' '\'

expecting success of 3070.1277 'pathmatch: no match '\' '[!\\]'': 
			test_must_fail test-tool wildmatch pathmatch '\' '[!\\]'
		
ok 1277 - pathmatch: no match '\' '[!\\]'

expecting success of 3070.1278 'pathmatch (via ls-files): no match '[!\\]' '\'': 
				>expect &&
				git ls-files -z -- '[!\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1278 - pathmatch (via ls-files): no match '[!\\]' '\'

expecting success of 3070.1279 'ipathmatch: no match '\' '[!\\]'': 
			test_must_fail test-tool wildmatch ipathmatch '\' '[!\\]'
		
ok 1279 - ipathmatch: no match '\' '[!\\]'

expecting success of 3070.1280 'ipathmatch (via ls-files): no match '[!\\]' '\'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[!\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1280 - ipathmatch (via ls-files): no match '[!\\]' '\'

expecting success of 3070.1281 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1281 - cleanup after previous file test

expecting success of 3070.1282 'setup match file test for G': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1282 - setup match file test for G

expecting success of 3070.1283 'wildmatch: match 'G' '[A-\\]'': 
			test-tool wildmatch wildmatch 'G' '[A-\\]'
		
ok 1283 - wildmatch: match 'G' '[A-\\]'

expecting success of 3070.1284 'wildmatch (via ls-files): match '[A-\\]' 'G'': 
				printf '%s' 'G' >expect &&
				git --glob-pathspecs ls-files -z -- '[A-\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1284 - wildmatch (via ls-files): match '[A-\\]' 'G'

expecting success of 3070.1285 'iwildmatch: match 'G' '[A-\\]'': 
			test-tool wildmatch iwildmatch 'G' '[A-\\]'
		
ok 1285 - iwildmatch: match 'G' '[A-\\]'

expecting success of 3070.1286 'iwildmatch (via ls-files): match '[A-\\]' 'G'': 
				printf '%s' 'G' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[A-\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1286 - iwildmatch (via ls-files): match '[A-\\]' 'G'

expecting success of 3070.1287 'pathmatch: match 'G' '[A-\\]'': 
			test-tool wildmatch pathmatch 'G' '[A-\\]'
		
ok 1287 - pathmatch: match 'G' '[A-\\]'

expecting success of 3070.1288 'pathmatch (via ls-files): match '[A-\\]' 'G'': 
				printf '%s' 'G' >expect &&
				git ls-files -z -- '[A-\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1288 - pathmatch (via ls-files): match '[A-\\]' 'G'

expecting success of 3070.1289 'ipathmatch: match 'G' '[A-\\]'': 
			test-tool wildmatch ipathmatch 'G' '[A-\\]'
		
ok 1289 - ipathmatch: match 'G' '[A-\\]'

expecting success of 3070.1290 'ipathmatch (via ls-files): match '[A-\\]' 'G'': 
				printf '%s' 'G' >expect &&
				git --icase-pathspecs ls-files -z -- '[A-\\]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1290 - ipathmatch (via ls-files): match '[A-\\]' 'G'

expecting success of 3070.1291 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing G
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1291 - cleanup after previous file test

expecting success of 3070.1292 'setup match file test for aaabbb': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1292 - setup match file test for aaabbb

expecting success of 3070.1293 'wildmatch: no match 'aaabbb' 'b*a'': 
			test_must_fail test-tool wildmatch wildmatch 'aaabbb' 'b*a'
		
ok 1293 - wildmatch: no match 'aaabbb' 'b*a'

expecting success of 3070.1294 'wildmatch (via ls-files): no match 'b*a' 'aaabbb'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'b*a' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1294 - wildmatch (via ls-files): no match 'b*a' 'aaabbb'

expecting success of 3070.1295 'iwildmatch: no match 'aaabbb' 'b*a'': 
			test_must_fail test-tool wildmatch iwildmatch 'aaabbb' 'b*a'
		
ok 1295 - iwildmatch: no match 'aaabbb' 'b*a'

expecting success of 3070.1296 'iwildmatch (via ls-files): no match 'b*a' 'aaabbb'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'b*a' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1296 - iwildmatch (via ls-files): no match 'b*a' 'aaabbb'

expecting success of 3070.1297 'pathmatch: no match 'aaabbb' 'b*a'': 
			test_must_fail test-tool wildmatch pathmatch 'aaabbb' 'b*a'
		
ok 1297 - pathmatch: no match 'aaabbb' 'b*a'

expecting success of 3070.1298 'pathmatch (via ls-files): no match 'b*a' 'aaabbb'': 
				>expect &&
				git ls-files -z -- 'b*a' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1298 - pathmatch (via ls-files): no match 'b*a' 'aaabbb'

expecting success of 3070.1299 'ipathmatch: no match 'aaabbb' 'b*a'': 
			test_must_fail test-tool wildmatch ipathmatch 'aaabbb' 'b*a'
		
ok 1299 - ipathmatch: no match 'aaabbb' 'b*a'

expecting success of 3070.1300 'ipathmatch (via ls-files): no match 'b*a' 'aaabbb'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'b*a' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1300 - ipathmatch (via ls-files): no match 'b*a' 'aaabbb'

expecting success of 3070.1301 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing aaabbb
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1301 - cleanup after previous file test

expecting success of 3070.1302 'setup match file test for aabcaa': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1302 - setup match file test for aabcaa

expecting success of 3070.1303 'wildmatch: no match 'aabcaa' '*ba*'': 
			test_must_fail test-tool wildmatch wildmatch 'aabcaa' '*ba*'
		
ok 1303 - wildmatch: no match 'aabcaa' '*ba*'

expecting success of 3070.1304 'wildmatch (via ls-files): no match '*ba*' 'aabcaa'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*ba*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1304 - wildmatch (via ls-files): no match '*ba*' 'aabcaa'

expecting success of 3070.1305 'iwildmatch: no match 'aabcaa' '*ba*'': 
			test_must_fail test-tool wildmatch iwildmatch 'aabcaa' '*ba*'
		
ok 1305 - iwildmatch: no match 'aabcaa' '*ba*'

expecting success of 3070.1306 'iwildmatch (via ls-files): no match '*ba*' 'aabcaa'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*ba*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1306 - iwildmatch (via ls-files): no match '*ba*' 'aabcaa'

expecting success of 3070.1307 'pathmatch: no match 'aabcaa' '*ba*'': 
			test_must_fail test-tool wildmatch pathmatch 'aabcaa' '*ba*'
		
ok 1307 - pathmatch: no match 'aabcaa' '*ba*'

expecting success of 3070.1308 'pathmatch (via ls-files): no match '*ba*' 'aabcaa'': 
				>expect &&
				git ls-files -z -- '*ba*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1308 - pathmatch (via ls-files): no match '*ba*' 'aabcaa'

expecting success of 3070.1309 'ipathmatch: no match 'aabcaa' '*ba*'': 
			test_must_fail test-tool wildmatch ipathmatch 'aabcaa' '*ba*'
		
ok 1309 - ipathmatch: no match 'aabcaa' '*ba*'

expecting success of 3070.1310 'ipathmatch (via ls-files): no match '*ba*' 'aabcaa'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '*ba*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1310 - ipathmatch (via ls-files): no match '*ba*' 'aabcaa'

expecting success of 3070.1311 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing aabcaa
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1311 - cleanup after previous file test

expecting success of 3070.1312 'setup match file test for ,': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1312 - setup match file test for ,

expecting success of 3070.1313 'wildmatch: match ',' '[,]'': 
			test-tool wildmatch wildmatch ',' '[,]'
		
ok 1313 - wildmatch: match ',' '[,]'

expecting success of 3070.1314 'wildmatch (via ls-files): match '[,]' ','': 
				printf '%s' ',' >expect &&
				git --glob-pathspecs ls-files -z -- '[,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1314 - wildmatch (via ls-files): match '[,]' ','

expecting success of 3070.1315 'iwildmatch: match ',' '[,]'': 
			test-tool wildmatch iwildmatch ',' '[,]'
		
ok 1315 - iwildmatch: match ',' '[,]'

expecting success of 3070.1316 'iwildmatch (via ls-files): match '[,]' ','': 
				printf '%s' ',' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1316 - iwildmatch (via ls-files): match '[,]' ','

expecting success of 3070.1317 'pathmatch: match ',' '[,]'': 
			test-tool wildmatch pathmatch ',' '[,]'
		
ok 1317 - pathmatch: match ',' '[,]'

expecting success of 3070.1318 'pathmatch (via ls-files): match '[,]' ','': 
				printf '%s' ',' >expect &&
				git ls-files -z -- '[,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1318 - pathmatch (via ls-files): match '[,]' ','

expecting success of 3070.1319 'ipathmatch: match ',' '[,]'': 
			test-tool wildmatch ipathmatch ',' '[,]'
		
ok 1319 - ipathmatch: match ',' '[,]'

expecting success of 3070.1320 'ipathmatch (via ls-files): match '[,]' ','': 
				printf '%s' ',' >expect &&
				git --icase-pathspecs ls-files -z -- '[,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1320 - ipathmatch (via ls-files): match '[,]' ','

expecting success of 3070.1321 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ,
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1321 - cleanup after previous file test

expecting success of 3070.1322 'setup match file test for ,': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1322 - setup match file test for ,

expecting success of 3070.1323 'wildmatch: match ',' '[\\,]'': 
			test-tool wildmatch wildmatch ',' '[\\,]'
		
ok 1323 - wildmatch: match ',' '[\\,]'

expecting success of 3070.1324 'wildmatch (via ls-files): match '[\\,]' ','': 
				printf '%s' ',' >expect &&
				git --glob-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1324 - wildmatch (via ls-files): match '[\\,]' ','

expecting success of 3070.1325 'iwildmatch: match ',' '[\\,]'': 
			test-tool wildmatch iwildmatch ',' '[\\,]'
		
ok 1325 - iwildmatch: match ',' '[\\,]'

expecting success of 3070.1326 'iwildmatch (via ls-files): match '[\\,]' ','': 
				printf '%s' ',' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1326 - iwildmatch (via ls-files): match '[\\,]' ','

expecting success of 3070.1327 'pathmatch: match ',' '[\\,]'': 
			test-tool wildmatch pathmatch ',' '[\\,]'
		
ok 1327 - pathmatch: match ',' '[\\,]'

expecting success of 3070.1328 'pathmatch (via ls-files): match '[\\,]' ','': 
				printf '%s' ',' >expect &&
				git ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1328 - pathmatch (via ls-files): match '[\\,]' ','

expecting success of 3070.1329 'ipathmatch: match ',' '[\\,]'': 
			test-tool wildmatch ipathmatch ',' '[\\,]'
		
ok 1329 - ipathmatch: match ',' '[\\,]'

expecting success of 3070.1330 'ipathmatch (via ls-files): match '[\\,]' ','': 
				printf '%s' ',' >expect &&
				git --icase-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1330 - ipathmatch (via ls-files): match '[\\,]' ','

expecting success of 3070.1331 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ,
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1331 - cleanup after previous file test

expecting success of 3070.1332 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1332 - setup match file test for \

expecting success of 3070.1333 'wildmatch: match '\' '[\\,]'': 
			test-tool wildmatch wildmatch '\' '[\\,]'
		
ok 1333 - wildmatch: match '\' '[\\,]'

expecting success of 3070.1334 'wildmatch (via ls-files): match '[\\,]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1334 - wildmatch (via ls-files): match '[\\,]' '\'

expecting success of 3070.1335 'iwildmatch: match '\' '[\\,]'': 
			test-tool wildmatch iwildmatch '\' '[\\,]'
		
ok 1335 - iwildmatch: match '\' '[\\,]'

expecting success of 3070.1336 'iwildmatch (via ls-files): match '[\\,]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1336 - iwildmatch (via ls-files): match '[\\,]' '\'

expecting success of 3070.1337 'pathmatch: match '\' '[\\,]'': 
			test-tool wildmatch pathmatch '\' '[\\,]'
		
ok 1337 - pathmatch: match '\' '[\\,]'

expecting success of 3070.1338 'pathmatch (via ls-files): match '[\\,]' '\'': 
				printf '%s' '\' >expect &&
				git ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1338 - pathmatch (via ls-files): match '[\\,]' '\'

expecting success of 3070.1339 'ipathmatch: match '\' '[\\,]'': 
			test-tool wildmatch ipathmatch '\' '[\\,]'
		
ok 1339 - ipathmatch: match '\' '[\\,]'

expecting success of 3070.1340 'ipathmatch (via ls-files): match '[\\,]' '\'': 
				printf '%s' '\' >expect &&
				git --icase-pathspecs ls-files -z -- '[\\,]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1340 - ipathmatch (via ls-files): match '[\\,]' '\'

expecting success of 3070.1341 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1341 - cleanup after previous file test

expecting success of 3070.1342 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1342 - setup match file test for -

expecting success of 3070.1343 'wildmatch: match '-' '[,-.]'': 
			test-tool wildmatch wildmatch '-' '[,-.]'
		
ok 1343 - wildmatch: match '-' '[,-.]'

expecting success of 3070.1344 'wildmatch (via ls-files): match '[,-.]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1344 - wildmatch (via ls-files): match '[,-.]' '-'

expecting success of 3070.1345 'iwildmatch: match '-' '[,-.]'': 
			test-tool wildmatch iwildmatch '-' '[,-.]'
		
ok 1345 - iwildmatch: match '-' '[,-.]'

expecting success of 3070.1346 'iwildmatch (via ls-files): match '[,-.]' '-'': 
				printf '%s' '-' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1346 - iwildmatch (via ls-files): match '[,-.]' '-'

expecting success of 3070.1347 'pathmatch: match '-' '[,-.]'': 
			test-tool wildmatch pathmatch '-' '[,-.]'
		
ok 1347 - pathmatch: match '-' '[,-.]'

expecting success of 3070.1348 'pathmatch (via ls-files): match '[,-.]' '-'': 
				printf '%s' '-' >expect &&
				git ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1348 - pathmatch (via ls-files): match '[,-.]' '-'

expecting success of 3070.1349 'ipathmatch: match '-' '[,-.]'': 
			test-tool wildmatch ipathmatch '-' '[,-.]'
		
ok 1349 - ipathmatch: match '-' '[,-.]'

expecting success of 3070.1350 'ipathmatch (via ls-files): match '[,-.]' '-'': 
				printf '%s' '-' >expect &&
				git --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1350 - ipathmatch (via ls-files): match '[,-.]' '-'

expecting success of 3070.1351 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1351 - cleanup after previous file test

expecting success of 3070.1352 'setup match file test for +': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1352 - setup match file test for +

expecting success of 3070.1353 'wildmatch: no match '+' '[,-.]'': 
			test_must_fail test-tool wildmatch wildmatch '+' '[,-.]'
		
ok 1353 - wildmatch: no match '+' '[,-.]'

expecting success of 3070.1354 'wildmatch (via ls-files): no match '[,-.]' '+'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1354 - wildmatch (via ls-files): no match '[,-.]' '+'

expecting success of 3070.1355 'iwildmatch: no match '+' '[,-.]'': 
			test_must_fail test-tool wildmatch iwildmatch '+' '[,-.]'
		
ok 1355 - iwildmatch: no match '+' '[,-.]'

expecting success of 3070.1356 'iwildmatch (via ls-files): no match '[,-.]' '+'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1356 - iwildmatch (via ls-files): no match '[,-.]' '+'

expecting success of 3070.1357 'pathmatch: no match '+' '[,-.]'': 
			test_must_fail test-tool wildmatch pathmatch '+' '[,-.]'
		
ok 1357 - pathmatch: no match '+' '[,-.]'

expecting success of 3070.1358 'pathmatch (via ls-files): no match '[,-.]' '+'': 
				>expect &&
				git ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1358 - pathmatch (via ls-files): no match '[,-.]' '+'

expecting success of 3070.1359 'ipathmatch: no match '+' '[,-.]'': 
			test_must_fail test-tool wildmatch ipathmatch '+' '[,-.]'
		
ok 1359 - ipathmatch: no match '+' '[,-.]'

expecting success of 3070.1360 'ipathmatch (via ls-files): no match '[,-.]' '+'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1360 - ipathmatch (via ls-files): no match '[,-.]' '+'

expecting success of 3070.1361 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing +
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1361 - cleanup after previous file test

expecting success of 3070.1362 'setup match file test for -.]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1362 - setup match file test for -.]

expecting success of 3070.1363 'wildmatch: no match '-.]' '[,-.]'': 
			test_must_fail test-tool wildmatch wildmatch '-.]' '[,-.]'
		
ok 1363 - wildmatch: no match '-.]' '[,-.]'

expecting success of 3070.1364 'wildmatch (via ls-files): no match '[,-.]' '-.]'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1364 - wildmatch (via ls-files): no match '[,-.]' '-.]'

expecting success of 3070.1365 'iwildmatch: no match '-.]' '[,-.]'': 
			test_must_fail test-tool wildmatch iwildmatch '-.]' '[,-.]'
		
ok 1365 - iwildmatch: no match '-.]' '[,-.]'

expecting success of 3070.1366 'iwildmatch (via ls-files): no match '[,-.]' '-.]'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1366 - iwildmatch (via ls-files): no match '[,-.]' '-.]'

expecting success of 3070.1367 'pathmatch: no match '-.]' '[,-.]'': 
			test_must_fail test-tool wildmatch pathmatch '-.]' '[,-.]'
		
ok 1367 - pathmatch: no match '-.]' '[,-.]'

expecting success of 3070.1368 'pathmatch (via ls-files): no match '[,-.]' '-.]'': 
				>expect &&
				git ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1368 - pathmatch (via ls-files): no match '[,-.]' '-.]'

expecting success of 3070.1369 'ipathmatch: no match '-.]' '[,-.]'': 
			test_must_fail test-tool wildmatch ipathmatch '-.]' '[,-.]'
		
ok 1369 - ipathmatch: no match '-.]' '[,-.]'

expecting success of 3070.1370 'ipathmatch (via ls-files): no match '[,-.]' '-.]'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[,-.]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1370 - ipathmatch (via ls-files): no match '[,-.]' '-.]'

expecting success of 3070.1371 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -.]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1371 - cleanup after previous file test

expecting success of 3070.1372 'setup match file test for 2': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1372 - setup match file test for 2

expecting success of 3070.1373 'wildmatch: match '2' '[\1-\3]'': 
			test-tool wildmatch wildmatch '2' '[\1-\3]'
		
ok 1373 - wildmatch: match '2' '[\1-\3]'

expecting success of 3070.1374 'wildmatch (via ls-files): match '[\1-\3]' '2'': 
				printf '%s' '2' >expect &&
				git --glob-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1374 - wildmatch (via ls-files): match '[\1-\3]' '2'

expecting success of 3070.1375 'iwildmatch: match '2' '[\1-\3]'': 
			test-tool wildmatch iwildmatch '2' '[\1-\3]'
		
ok 1375 - iwildmatch: match '2' '[\1-\3]'

expecting success of 3070.1376 'iwildmatch (via ls-files): match '[\1-\3]' '2'': 
				printf '%s' '2' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1376 - iwildmatch (via ls-files): match '[\1-\3]' '2'

expecting success of 3070.1377 'pathmatch: match '2' '[\1-\3]'': 
			test-tool wildmatch pathmatch '2' '[\1-\3]'
		
ok 1377 - pathmatch: match '2' '[\1-\3]'

expecting success of 3070.1378 'pathmatch (via ls-files): match '[\1-\3]' '2'': 
				printf '%s' '2' >expect &&
				git ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1378 - pathmatch (via ls-files): match '[\1-\3]' '2'

expecting success of 3070.1379 'ipathmatch: match '2' '[\1-\3]'': 
			test-tool wildmatch ipathmatch '2' '[\1-\3]'
		
ok 1379 - ipathmatch: match '2' '[\1-\3]'

expecting success of 3070.1380 'ipathmatch (via ls-files): match '[\1-\3]' '2'': 
				printf '%s' '2' >expect &&
				git --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1380 - ipathmatch (via ls-files): match '[\1-\3]' '2'

expecting success of 3070.1381 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 2
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1381 - cleanup after previous file test

expecting success of 3070.1382 'setup match file test for 3': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1382 - setup match file test for 3

expecting success of 3070.1383 'wildmatch: match '3' '[\1-\3]'': 
			test-tool wildmatch wildmatch '3' '[\1-\3]'
		
ok 1383 - wildmatch: match '3' '[\1-\3]'

expecting success of 3070.1384 'wildmatch (via ls-files): match '[\1-\3]' '3'': 
				printf '%s' '3' >expect &&
				git --glob-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1384 - wildmatch (via ls-files): match '[\1-\3]' '3'

expecting success of 3070.1385 'iwildmatch: match '3' '[\1-\3]'': 
			test-tool wildmatch iwildmatch '3' '[\1-\3]'
		
ok 1385 - iwildmatch: match '3' '[\1-\3]'

expecting success of 3070.1386 'iwildmatch (via ls-files): match '[\1-\3]' '3'': 
				printf '%s' '3' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1386 - iwildmatch (via ls-files): match '[\1-\3]' '3'

expecting success of 3070.1387 'pathmatch: match '3' '[\1-\3]'': 
			test-tool wildmatch pathmatch '3' '[\1-\3]'
		
ok 1387 - pathmatch: match '3' '[\1-\3]'

expecting success of 3070.1388 'pathmatch (via ls-files): match '[\1-\3]' '3'': 
				printf '%s' '3' >expect &&
				git ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1388 - pathmatch (via ls-files): match '[\1-\3]' '3'

expecting success of 3070.1389 'ipathmatch: match '3' '[\1-\3]'': 
			test-tool wildmatch ipathmatch '3' '[\1-\3]'
		
ok 1389 - ipathmatch: match '3' '[\1-\3]'

expecting success of 3070.1390 'ipathmatch (via ls-files): match '[\1-\3]' '3'': 
				printf '%s' '3' >expect &&
				git --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1390 - ipathmatch (via ls-files): match '[\1-\3]' '3'

expecting success of 3070.1391 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 3
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1391 - cleanup after previous file test

expecting success of 3070.1392 'setup match file test for 4': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1392 - setup match file test for 4

expecting success of 3070.1393 'wildmatch: no match '4' '[\1-\3]'': 
			test_must_fail test-tool wildmatch wildmatch '4' '[\1-\3]'
		
ok 1393 - wildmatch: no match '4' '[\1-\3]'

expecting success of 3070.1394 'wildmatch (via ls-files): no match '[\1-\3]' '4'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1394 - wildmatch (via ls-files): no match '[\1-\3]' '4'

expecting success of 3070.1395 'iwildmatch: no match '4' '[\1-\3]'': 
			test_must_fail test-tool wildmatch iwildmatch '4' '[\1-\3]'
		
ok 1395 - iwildmatch: no match '4' '[\1-\3]'

expecting success of 3070.1396 'iwildmatch (via ls-files): no match '[\1-\3]' '4'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1396 - iwildmatch (via ls-files): no match '[\1-\3]' '4'

expecting success of 3070.1397 'pathmatch: no match '4' '[\1-\3]'': 
			test_must_fail test-tool wildmatch pathmatch '4' '[\1-\3]'
		
ok 1397 - pathmatch: no match '4' '[\1-\3]'

expecting success of 3070.1398 'pathmatch (via ls-files): no match '[\1-\3]' '4'': 
				>expect &&
				git ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1398 - pathmatch (via ls-files): no match '[\1-\3]' '4'

expecting success of 3070.1399 'ipathmatch: no match '4' '[\1-\3]'': 
			test_must_fail test-tool wildmatch ipathmatch '4' '[\1-\3]'
		
ok 1399 - ipathmatch: no match '4' '[\1-\3]'

expecting success of 3070.1400 'ipathmatch (via ls-files): no match '[\1-\3]' '4'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[\1-\3]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1400 - ipathmatch (via ls-files): no match '[\1-\3]' '4'

expecting success of 3070.1401 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing 4
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1401 - cleanup after previous file test

expecting success of 3070.1402 'setup match file test for \': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1402 - setup match file test for \

expecting success of 3070.1403 'wildmatch: match '\' '[[-\]]'': 
			test-tool wildmatch wildmatch '\' '[[-\]]'
		
ok 1403 - wildmatch: match '\' '[[-\]]'

expecting success of 3070.1404 'wildmatch (via ls-files): match '[[-\]]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1404 - wildmatch (via ls-files): match '[[-\]]' '\'

expecting success of 3070.1405 'iwildmatch: match '\' '[[-\]]'': 
			test-tool wildmatch iwildmatch '\' '[[-\]]'
		
ok 1405 - iwildmatch: match '\' '[[-\]]'

expecting success of 3070.1406 'iwildmatch (via ls-files): match '[[-\]]' '\'': 
				printf '%s' '\' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1406 - iwildmatch (via ls-files): match '[[-\]]' '\'

expecting success of 3070.1407 'pathmatch: match '\' '[[-\]]'': 
			test-tool wildmatch pathmatch '\' '[[-\]]'
		
ok 1407 - pathmatch: match '\' '[[-\]]'

expecting success of 3070.1408 'pathmatch (via ls-files): match '[[-\]]' '\'': 
				printf '%s' '\' >expect &&
				git ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1408 - pathmatch (via ls-files): match '[[-\]]' '\'

expecting success of 3070.1409 'ipathmatch: match '\' '[[-\]]'': 
			test-tool wildmatch ipathmatch '\' '[[-\]]'
		
ok 1409 - ipathmatch: match '\' '[[-\]]'

expecting success of 3070.1410 'ipathmatch (via ls-files): match '[[-\]]' '\'': 
				printf '%s' '\' >expect &&
				git --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1410 - ipathmatch (via ls-files): match '[[-\]]' '\'

expecting success of 3070.1411 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing "\\"
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1411 - cleanup after previous file test

expecting success of 3070.1412 'setup match file test for [': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1412 - setup match file test for [

expecting success of 3070.1413 'wildmatch: match '[' '[[-\]]'': 
			test-tool wildmatch wildmatch '[' '[[-\]]'
		
ok 1413 - wildmatch: match '[' '[[-\]]'

expecting success of 3070.1414 'wildmatch (via ls-files): match '[[-\]]' '['': 
				printf '%s' '[' >expect &&
				git --glob-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1414 - wildmatch (via ls-files): match '[[-\]]' '['

expecting success of 3070.1415 'iwildmatch: match '[' '[[-\]]'': 
			test-tool wildmatch iwildmatch '[' '[[-\]]'
		
ok 1415 - iwildmatch: match '[' '[[-\]]'

expecting success of 3070.1416 'iwildmatch (via ls-files): match '[[-\]]' '['': 
				printf '%s' '[' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1416 - iwildmatch (via ls-files): match '[[-\]]' '['

expecting success of 3070.1417 'pathmatch: match '[' '[[-\]]'': 
			test-tool wildmatch pathmatch '[' '[[-\]]'
		
ok 1417 - pathmatch: match '[' '[[-\]]'

expecting success of 3070.1418 'pathmatch (via ls-files): match '[[-\]]' '['': 
				printf '%s' '[' >expect &&
				git ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1418 - pathmatch (via ls-files): match '[[-\]]' '['

expecting success of 3070.1419 'ipathmatch: match '[' '[[-\]]'': 
			test-tool wildmatch ipathmatch '[' '[[-\]]'
		
ok 1419 - ipathmatch: match '[' '[[-\]]'

expecting success of 3070.1420 'ipathmatch (via ls-files): match '[[-\]]' '['': 
				printf '%s' '[' >expect &&
				git --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1420 - ipathmatch (via ls-files): match '[[-\]]' '['

expecting success of 3070.1421 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing [
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1421 - cleanup after previous file test

expecting success of 3070.1422 'setup match file test for ]': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1422 - setup match file test for ]

expecting success of 3070.1423 'wildmatch: match ']' '[[-\]]'': 
			test-tool wildmatch wildmatch ']' '[[-\]]'
		
ok 1423 - wildmatch: match ']' '[[-\]]'

expecting success of 3070.1424 'wildmatch (via ls-files): match '[[-\]]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1424 - wildmatch (via ls-files): match '[[-\]]' ']'

expecting success of 3070.1425 'iwildmatch: match ']' '[[-\]]'': 
			test-tool wildmatch iwildmatch ']' '[[-\]]'
		
ok 1425 - iwildmatch: match ']' '[[-\]]'

expecting success of 3070.1426 'iwildmatch (via ls-files): match '[[-\]]' ']'': 
				printf '%s' ']' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1426 - iwildmatch (via ls-files): match '[[-\]]' ']'

expecting success of 3070.1427 'pathmatch: match ']' '[[-\]]'': 
			test-tool wildmatch pathmatch ']' '[[-\]]'
		
ok 1427 - pathmatch: match ']' '[[-\]]'

expecting success of 3070.1428 'pathmatch (via ls-files): match '[[-\]]' ']'': 
				printf '%s' ']' >expect &&
				git ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1428 - pathmatch (via ls-files): match '[[-\]]' ']'

expecting success of 3070.1429 'ipathmatch: match ']' '[[-\]]'': 
			test-tool wildmatch ipathmatch ']' '[[-\]]'
		
ok 1429 - ipathmatch: match ']' '[[-\]]'

expecting success of 3070.1430 'ipathmatch (via ls-files): match '[[-\]]' ']'': 
				printf '%s' ']' >expect &&
				git --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1430 - ipathmatch (via ls-files): match '[[-\]]' ']'

expecting success of 3070.1431 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ]
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1431 - cleanup after previous file test

expecting success of 3070.1432 'setup match file test for -': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1432 - setup match file test for -

expecting success of 3070.1433 'wildmatch: no match '-' '[[-\]]'': 
			test_must_fail test-tool wildmatch wildmatch '-' '[[-\]]'
		
ok 1433 - wildmatch: no match '-' '[[-\]]'

expecting success of 3070.1434 'wildmatch (via ls-files): no match '[[-\]]' '-'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1434 - wildmatch (via ls-files): no match '[[-\]]' '-'

expecting success of 3070.1435 'iwildmatch: no match '-' '[[-\]]'': 
			test_must_fail test-tool wildmatch iwildmatch '-' '[[-\]]'
		
ok 1435 - iwildmatch: no match '-' '[[-\]]'

expecting success of 3070.1436 'iwildmatch (via ls-files): no match '[[-\]]' '-'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1436 - iwildmatch (via ls-files): no match '[[-\]]' '-'

expecting success of 3070.1437 'pathmatch: no match '-' '[[-\]]'': 
			test_must_fail test-tool wildmatch pathmatch '-' '[[-\]]'
		
ok 1437 - pathmatch: no match '-' '[[-\]]'

expecting success of 3070.1438 'pathmatch (via ls-files): no match '[[-\]]' '-'': 
				>expect &&
				git ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1438 - pathmatch (via ls-files): no match '[[-\]]' '-'

expecting success of 3070.1439 'ipathmatch: no match '-' '[[-\]]'': 
			test_must_fail test-tool wildmatch ipathmatch '-' '[[-\]]'
		
ok 1439 - ipathmatch: no match '-' '[[-\]]'

expecting success of 3070.1440 'ipathmatch (via ls-files): no match '[[-\]]' '-'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '[[-\]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1440 - ipathmatch (via ls-files): no match '[[-\]]' '-'

expecting success of 3070.1441 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1441 - cleanup after previous file test

expecting success of 3070.1442 'setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1442 - setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1

expecting success of 3070.1443 'wildmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test-tool wildmatch wildmatch '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1443 - wildmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1444 'wildmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'': 
				printf '%s' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' >expect &&
				git --glob-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1444 - wildmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'

expecting success of 3070.1445 'iwildmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test-tool wildmatch iwildmatch '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1445 - iwildmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1446 'iwildmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'': 
				printf '%s' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1446 - iwildmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'

expecting success of 3070.1447 'pathmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test-tool wildmatch pathmatch '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1447 - pathmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1448 'pathmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'': 
				printf '%s' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' >expect &&
				git ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1448 - pathmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'

expecting success of 3070.1449 'ipathmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test-tool wildmatch ipathmatch '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1449 - ipathmatch: match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1450 'ipathmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'': 
				printf '%s' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' >expect &&
				git --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1450 - ipathmatch (via ls-files): match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1'

expecting success of 3070.1451 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1451 - cleanup after previous file test

expecting success of 3070.1452 'setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1452 - setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1

expecting success of 3070.1453 'wildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch wildmatch '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1453 - wildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1454 'wildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1454 - wildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'

expecting success of 3070.1455 'iwildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch iwildmatch '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1455 - iwildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1456 'iwildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1456 - iwildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'

expecting success of 3070.1457 'pathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch pathmatch '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1457 - pathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1458 'pathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'': 
				>expect &&
				git ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1458 - pathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'

expecting success of 3070.1459 'ipathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch ipathmatch '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1459 - ipathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1460 'ipathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1460 - ipathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1'

expecting success of 3070.1461 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1461 - cleanup after previous file test

expecting success of 3070.1462 'setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1462 - setup match file test for -adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1

expecting success of 3070.1463 'wildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch wildmatch '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1463 - wildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1464 'wildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1464 - wildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'

expecting success of 3070.1465 'iwildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch iwildmatch '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1465 - iwildmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1466 'iwildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1466 - iwildmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'

expecting success of 3070.1467 'pathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch pathmatch '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1467 - pathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1468 'pathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'': 
				>expect &&
				git ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1468 - pathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'

expecting success of 3070.1469 'ipathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'': 
			test_must_fail test-tool wildmatch ipathmatch '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
		
ok 1469 - ipathmatch: no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'

expecting success of 3070.1470 'ipathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1470 - ipathmatch (via ls-files): no match '-*-*-*-*-*-*-12-*-*-*-m-*-*-*' '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1'

expecting success of 3070.1471 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing -adobe-courier-bold-o-normal--12-120-75-75-/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1471 - cleanup after previous file test

expecting success of 3070.1472 'setup match file test for XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1472 - setup match file test for XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1

expecting success of 3070.1473 'wildmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test-tool wildmatch wildmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1473 - wildmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1474 'wildmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1'': false
not ok 1474 - wildmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' # TODO known breakage

expecting success of 3070.1475 'iwildmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test-tool wildmatch iwildmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1475 - iwildmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1476 'iwildmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1'': false
not ok 1476 - iwildmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' # TODO known breakage

expecting success of 3070.1477 'pathmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test-tool wildmatch pathmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1477 - pathmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1478 'pathmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1'': false
not ok 1478 - pathmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' # TODO known breakage

expecting success of 3070.1479 'ipathmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test-tool wildmatch ipathmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1479 - ipathmatch: match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1480 'ipathmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1'': false
not ok 1480 - ipathmatch (via ls-files): match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' # TODO known breakage

expecting success of 3070.1481 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 1481 - cleanup after previous file test

expecting success of 3070.1482 'setup match file test for XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1482 - setup match file test for XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1

expecting success of 3070.1483 'wildmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test_must_fail test-tool wildmatch wildmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1483 - wildmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1484 'wildmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1'': false
not ok 1484 - wildmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' # TODO known breakage

expecting success of 3070.1485 'iwildmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1485 - iwildmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1486 'iwildmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1'': false
not ok 1486 - iwildmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' # TODO known breakage

expecting success of 3070.1487 'pathmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test_must_fail test-tool wildmatch pathmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1487 - pathmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1488 'pathmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1'': false
not ok 1488 - pathmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' # TODO known breakage

expecting success of 3070.1489 'ipathmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'': 
			test_must_fail test-tool wildmatch ipathmatch 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
		
ok 1489 - ipathmatch: no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'

checking known breakage of 3070.1490 'ipathmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1'': false
not ok 1490 - ipathmatch (via ls-files): no match skip 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*' 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' # TODO known breakage

expecting success of 3070.1491 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
ok 1491 - cleanup after previous file test

expecting success of 3070.1492 'setup match file test for abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1492 - setup match file test for abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt

expecting success of 3070.1493 'wildmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'': 
			test-tool wildmatch wildmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'
		
ok 1493 - wildmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'

expecting success of 3070.1494 'wildmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'': 
				printf '%s' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' >expect &&
				git --glob-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1494 - wildmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'

expecting success of 3070.1495 'iwildmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'': 
			test-tool wildmatch iwildmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'
		
ok 1495 - iwildmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'

expecting success of 3070.1496 'iwildmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'': 
				printf '%s' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1496 - iwildmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'

expecting success of 3070.1497 'pathmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'': 
			test-tool wildmatch pathmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'
		
ok 1497 - pathmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'

expecting success of 3070.1498 'pathmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'': 
				printf '%s' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' >expect &&
				git ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1498 - pathmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'

expecting success of 3070.1499 'ipathmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'': 
			test-tool wildmatch ipathmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'
		
ok 1499 - ipathmatch: match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'

expecting success of 3070.1500 'ipathmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'': 
				printf '%s' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' >expect &&
				git --icase-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1500 - ipathmatch (via ls-files): match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt'

expecting success of 3070.1501 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing abcd/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1501 - cleanup after previous file test

expecting success of 3070.1502 'setup match file test for abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1502 - setup match file test for abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz

expecting success of 3070.1503 'wildmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'': 
			test_must_fail test-tool wildmatch wildmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'
		
ok 1503 - wildmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'

expecting success of 3070.1504 'wildmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1504 - wildmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'

expecting success of 3070.1505 'iwildmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'': 
			test_must_fail test-tool wildmatch iwildmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'
		
ok 1505 - iwildmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'

expecting success of 3070.1506 'iwildmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1506 - iwildmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'

expecting success of 3070.1507 'pathmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'': 
			test_must_fail test-tool wildmatch pathmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'
		
ok 1507 - pathmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'

expecting success of 3070.1508 'pathmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'': 
				>expect &&
				git ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1508 - pathmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'

expecting success of 3070.1509 'ipathmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'': 
			test_must_fail test-tool wildmatch ipathmatch 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'
		
ok 1509 - ipathmatch: no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'

expecting success of 3070.1510 'ipathmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '**/*a*b*g*n*t' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1510 - ipathmatch (via ls-files): no match '**/*a*b*g*n*t' 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz'

expecting success of 3070.1511 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing abcd/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1511 - cleanup after previous file test

expecting success of 3070.1512 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1512 - setup match file test for foo

expecting success of 3070.1513 'wildmatch: no match 'foo' '*/*/*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' '*/*/*'
		
ok 1513 - wildmatch: no match 'foo' '*/*/*'

expecting success of 3070.1514 'wildmatch (via ls-files): no match '*/*/*' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1514 - wildmatch (via ls-files): no match '*/*/*' 'foo'

expecting success of 3070.1515 'iwildmatch: no match 'foo' '*/*/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' '*/*/*'
		
ok 1515 - iwildmatch: no match 'foo' '*/*/*'

expecting success of 3070.1516 'iwildmatch (via ls-files): no match '*/*/*' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1516 - iwildmatch (via ls-files): no match '*/*/*' 'foo'

expecting success of 3070.1517 'pathmatch: no match 'foo' '*/*/*'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' '*/*/*'
		
ok 1517 - pathmatch: no match 'foo' '*/*/*'

expecting success of 3070.1518 'pathmatch (via ls-files): no match '*/*/*' 'foo'': 
				>expect &&
				git ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1518 - pathmatch (via ls-files): no match '*/*/*' 'foo'

expecting success of 3070.1519 'ipathmatch: no match 'foo' '*/*/*'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' '*/*/*'
		
ok 1519 - ipathmatch: no match 'foo' '*/*/*'

expecting success of 3070.1520 'ipathmatch (via ls-files): no match '*/*/*' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1520 - ipathmatch (via ls-files): no match '*/*/*' 'foo'

expecting success of 3070.1521 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 1521 - cleanup after previous file test

expecting success of 3070.1522 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1522 - setup match file test for foo/bar

expecting success of 3070.1523 'wildmatch: no match 'foo/bar' '*/*/*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' '*/*/*'
		
ok 1523 - wildmatch: no match 'foo/bar' '*/*/*'

expecting success of 3070.1524 'wildmatch (via ls-files): no match '*/*/*' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1524 - wildmatch (via ls-files): no match '*/*/*' 'foo/bar'

expecting success of 3070.1525 'iwildmatch: no match 'foo/bar' '*/*/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' '*/*/*'
		
ok 1525 - iwildmatch: no match 'foo/bar' '*/*/*'

expecting success of 3070.1526 'iwildmatch (via ls-files): no match '*/*/*' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1526 - iwildmatch (via ls-files): no match '*/*/*' 'foo/bar'

expecting success of 3070.1527 'pathmatch: no match 'foo/bar' '*/*/*'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/bar' '*/*/*'
		
ok 1527 - pathmatch: no match 'foo/bar' '*/*/*'

expecting success of 3070.1528 'pathmatch (via ls-files): no match '*/*/*' 'foo/bar'': 
				>expect &&
				git ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1528 - pathmatch (via ls-files): no match '*/*/*' 'foo/bar'

expecting success of 3070.1529 'ipathmatch: no match 'foo/bar' '*/*/*'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/bar' '*/*/*'
		
ok 1529 - ipathmatch: no match 'foo/bar' '*/*/*'

expecting success of 3070.1530 'ipathmatch (via ls-files): no match '*/*/*' 'foo/bar'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1530 - ipathmatch (via ls-files): no match '*/*/*' 'foo/bar'

expecting success of 3070.1531 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1531 - cleanup after previous file test

expecting success of 3070.1532 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1532 - setup match file test for foo/bba/arr

expecting success of 3070.1533 'wildmatch: match 'foo/bba/arr' '*/*/*'': 
			test-tool wildmatch wildmatch 'foo/bba/arr' '*/*/*'
		
ok 1533 - wildmatch: match 'foo/bba/arr' '*/*/*'

expecting success of 3070.1534 'wildmatch (via ls-files): match '*/*/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1534 - wildmatch (via ls-files): match '*/*/*' 'foo/bba/arr'

expecting success of 3070.1535 'iwildmatch: match 'foo/bba/arr' '*/*/*'': 
			test-tool wildmatch iwildmatch 'foo/bba/arr' '*/*/*'
		
ok 1535 - iwildmatch: match 'foo/bba/arr' '*/*/*'

expecting success of 3070.1536 'iwildmatch (via ls-files): match '*/*/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1536 - iwildmatch (via ls-files): match '*/*/*' 'foo/bba/arr'

expecting success of 3070.1537 'pathmatch: match 'foo/bba/arr' '*/*/*'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' '*/*/*'
		
ok 1537 - pathmatch: match 'foo/bba/arr' '*/*/*'

expecting success of 3070.1538 'pathmatch (via ls-files): match '*/*/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1538 - pathmatch (via ls-files): match '*/*/*' 'foo/bba/arr'

expecting success of 3070.1539 'ipathmatch: match 'foo/bba/arr' '*/*/*'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' '*/*/*'
		
ok 1539 - ipathmatch: match 'foo/bba/arr' '*/*/*'

expecting success of 3070.1540 'ipathmatch (via ls-files): match '*/*/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1540 - ipathmatch (via ls-files): match '*/*/*' 'foo/bba/arr'

expecting success of 3070.1541 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1541 - cleanup after previous file test

expecting success of 3070.1542 'setup match file test for foo/bb/aa/rr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1542 - setup match file test for foo/bb/aa/rr

expecting success of 3070.1543 'wildmatch: no match 'foo/bb/aa/rr' '*/*/*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bb/aa/rr' '*/*/*'
		
ok 1543 - wildmatch: no match 'foo/bb/aa/rr' '*/*/*'

expecting success of 3070.1544 'wildmatch (via ls-files): no match '*/*/*' 'foo/bb/aa/rr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1544 - wildmatch (via ls-files): no match '*/*/*' 'foo/bb/aa/rr'

expecting success of 3070.1545 'iwildmatch: no match 'foo/bb/aa/rr' '*/*/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bb/aa/rr' '*/*/*'
		
ok 1545 - iwildmatch: no match 'foo/bb/aa/rr' '*/*/*'

expecting success of 3070.1546 'iwildmatch (via ls-files): no match '*/*/*' 'foo/bb/aa/rr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1546 - iwildmatch (via ls-files): no match '*/*/*' 'foo/bb/aa/rr'

expecting success of 3070.1547 'pathmatch: match 'foo/bb/aa/rr' '*/*/*'': 
			test-tool wildmatch pathmatch 'foo/bb/aa/rr' '*/*/*'
		
ok 1547 - pathmatch: match 'foo/bb/aa/rr' '*/*/*'

expecting success of 3070.1548 'pathmatch (via ls-files): match '*/*/*' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1548 - pathmatch (via ls-files): match '*/*/*' 'foo/bb/aa/rr'

expecting success of 3070.1549 'ipathmatch: match 'foo/bb/aa/rr' '*/*/*'': 
			test-tool wildmatch ipathmatch 'foo/bb/aa/rr' '*/*/*'
		
ok 1549 - ipathmatch: match 'foo/bb/aa/rr' '*/*/*'

expecting success of 3070.1550 'ipathmatch (via ls-files): match '*/*/*' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git --icase-pathspecs ls-files -z -- '*/*/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1550 - ipathmatch (via ls-files): match '*/*/*' 'foo/bb/aa/rr'

expecting success of 3070.1551 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1551 - cleanup after previous file test

expecting success of 3070.1552 'setup match file test for foo/bb/aa/rr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1552 - setup match file test for foo/bb/aa/rr

expecting success of 3070.1553 'wildmatch: match 'foo/bb/aa/rr' '**/**/**'': 
			test-tool wildmatch wildmatch 'foo/bb/aa/rr' '**/**/**'
		
ok 1553 - wildmatch: match 'foo/bb/aa/rr' '**/**/**'

expecting success of 3070.1554 'wildmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git --glob-pathspecs ls-files -z -- '**/**/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1554 - wildmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'

expecting success of 3070.1555 'iwildmatch: match 'foo/bb/aa/rr' '**/**/**'': 
			test-tool wildmatch iwildmatch 'foo/bb/aa/rr' '**/**/**'
		
ok 1555 - iwildmatch: match 'foo/bb/aa/rr' '**/**/**'

expecting success of 3070.1556 'iwildmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/**/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1556 - iwildmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'

expecting success of 3070.1557 'pathmatch: match 'foo/bb/aa/rr' '**/**/**'': 
			test-tool wildmatch pathmatch 'foo/bb/aa/rr' '**/**/**'
		
ok 1557 - pathmatch: match 'foo/bb/aa/rr' '**/**/**'

expecting success of 3070.1558 'pathmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git ls-files -z -- '**/**/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1558 - pathmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'

expecting success of 3070.1559 'ipathmatch: match 'foo/bb/aa/rr' '**/**/**'': 
			test-tool wildmatch ipathmatch 'foo/bb/aa/rr' '**/**/**'
		
ok 1559 - ipathmatch: match 'foo/bb/aa/rr' '**/**/**'

expecting success of 3070.1560 'ipathmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'': 
				printf '%s' 'foo/bb/aa/rr' >expect &&
				git --icase-pathspecs ls-files -z -- '**/**/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1560 - ipathmatch (via ls-files): match '**/**/**' 'foo/bb/aa/rr'

expecting success of 3070.1561 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1561 - cleanup after previous file test

expecting success of 3070.1562 'setup match file test for abcXdefXghi': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1562 - setup match file test for abcXdefXghi

expecting success of 3070.1563 'wildmatch: match 'abcXdefXghi' '*X*i'': 
			test-tool wildmatch wildmatch 'abcXdefXghi' '*X*i'
		
ok 1563 - wildmatch: match 'abcXdefXghi' '*X*i'

expecting success of 3070.1564 'wildmatch (via ls-files): match '*X*i' 'abcXdefXghi'': 
				printf '%s' 'abcXdefXghi' >expect &&
				git --glob-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1564 - wildmatch (via ls-files): match '*X*i' 'abcXdefXghi'

expecting success of 3070.1565 'iwildmatch: match 'abcXdefXghi' '*X*i'': 
			test-tool wildmatch iwildmatch 'abcXdefXghi' '*X*i'
		
ok 1565 - iwildmatch: match 'abcXdefXghi' '*X*i'

expecting success of 3070.1566 'iwildmatch (via ls-files): match '*X*i' 'abcXdefXghi'': 
				printf '%s' 'abcXdefXghi' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1566 - iwildmatch (via ls-files): match '*X*i' 'abcXdefXghi'

expecting success of 3070.1567 'pathmatch: match 'abcXdefXghi' '*X*i'': 
			test-tool wildmatch pathmatch 'abcXdefXghi' '*X*i'
		
ok 1567 - pathmatch: match 'abcXdefXghi' '*X*i'

expecting success of 3070.1568 'pathmatch (via ls-files): match '*X*i' 'abcXdefXghi'': 
				printf '%s' 'abcXdefXghi' >expect &&
				git ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1568 - pathmatch (via ls-files): match '*X*i' 'abcXdefXghi'

expecting success of 3070.1569 'ipathmatch: match 'abcXdefXghi' '*X*i'': 
			test-tool wildmatch ipathmatch 'abcXdefXghi' '*X*i'
		
ok 1569 - ipathmatch: match 'abcXdefXghi' '*X*i'

expecting success of 3070.1570 'ipathmatch (via ls-files): match '*X*i' 'abcXdefXghi'': 
				printf '%s' 'abcXdefXghi' >expect &&
				git --icase-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1570 - ipathmatch (via ls-files): match '*X*i' 'abcXdefXghi'

expecting success of 3070.1571 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing abcXdefXghi
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1571 - cleanup after previous file test

expecting success of 3070.1572 'setup match file test for ab/cXd/efXg/hi': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1572 - setup match file test for ab/cXd/efXg/hi

expecting success of 3070.1573 'wildmatch: no match 'ab/cXd/efXg/hi' '*X*i'': 
			test_must_fail test-tool wildmatch wildmatch 'ab/cXd/efXg/hi' '*X*i'
		
ok 1573 - wildmatch: no match 'ab/cXd/efXg/hi' '*X*i'

expecting success of 3070.1574 'wildmatch (via ls-files): no match '*X*i' 'ab/cXd/efXg/hi'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1574 - wildmatch (via ls-files): no match '*X*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1575 'iwildmatch: no match 'ab/cXd/efXg/hi' '*X*i'': 
			test_must_fail test-tool wildmatch iwildmatch 'ab/cXd/efXg/hi' '*X*i'
		
ok 1575 - iwildmatch: no match 'ab/cXd/efXg/hi' '*X*i'

expecting success of 3070.1576 'iwildmatch (via ls-files): no match '*X*i' 'ab/cXd/efXg/hi'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1576 - iwildmatch (via ls-files): no match '*X*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1577 'pathmatch: match 'ab/cXd/efXg/hi' '*X*i'': 
			test-tool wildmatch pathmatch 'ab/cXd/efXg/hi' '*X*i'
		
ok 1577 - pathmatch: match 'ab/cXd/efXg/hi' '*X*i'

expecting success of 3070.1578 'pathmatch (via ls-files): match '*X*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1578 - pathmatch (via ls-files): match '*X*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1579 'ipathmatch: match 'ab/cXd/efXg/hi' '*X*i'': 
			test-tool wildmatch ipathmatch 'ab/cXd/efXg/hi' '*X*i'
		
ok 1579 - ipathmatch: match 'ab/cXd/efXg/hi' '*X*i'

expecting success of 3070.1580 'ipathmatch (via ls-files): match '*X*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --icase-pathspecs ls-files -z -- '*X*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1580 - ipathmatch (via ls-files): match '*X*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1581 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1581 - cleanup after previous file test

expecting success of 3070.1582 'setup match file test for ab/cXd/efXg/hi': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1582 - setup match file test for ab/cXd/efXg/hi

expecting success of 3070.1583 'wildmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'': 
			test-tool wildmatch wildmatch 'ab/cXd/efXg/hi' '*/*X*/*/*i'
		
ok 1583 - wildmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'

expecting success of 3070.1584 'wildmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --glob-pathspecs ls-files -z -- '*/*X*/*/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1584 - wildmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1585 'iwildmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'': 
			test-tool wildmatch iwildmatch 'ab/cXd/efXg/hi' '*/*X*/*/*i'
		
ok 1585 - iwildmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'

expecting success of 3070.1586 'iwildmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*/*X*/*/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1586 - iwildmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1587 'pathmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'': 
			test-tool wildmatch pathmatch 'ab/cXd/efXg/hi' '*/*X*/*/*i'
		
ok 1587 - pathmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'

expecting success of 3070.1588 'pathmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git ls-files -z -- '*/*X*/*/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1588 - pathmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1589 'ipathmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'': 
			test-tool wildmatch ipathmatch 'ab/cXd/efXg/hi' '*/*X*/*/*i'
		
ok 1589 - ipathmatch: match 'ab/cXd/efXg/hi' '*/*X*/*/*i'

expecting success of 3070.1590 'ipathmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --icase-pathspecs ls-files -z -- '*/*X*/*/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1590 - ipathmatch (via ls-files): match '*/*X*/*/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1591 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1591 - cleanup after previous file test

expecting success of 3070.1592 'setup match file test for ab/cXd/efXg/hi': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1592 - setup match file test for ab/cXd/efXg/hi

expecting success of 3070.1593 'wildmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'': 
			test-tool wildmatch wildmatch 'ab/cXd/efXg/hi' '**/*X*/**/*i'
		
ok 1593 - wildmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'

expecting success of 3070.1594 'wildmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --glob-pathspecs ls-files -z -- '**/*X*/**/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1594 - wildmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1595 'iwildmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'': 
			test-tool wildmatch iwildmatch 'ab/cXd/efXg/hi' '**/*X*/**/*i'
		
ok 1595 - iwildmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'

expecting success of 3070.1596 'iwildmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '**/*X*/**/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1596 - iwildmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1597 'pathmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'': 
			test-tool wildmatch pathmatch 'ab/cXd/efXg/hi' '**/*X*/**/*i'
		
ok 1597 - pathmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'

expecting success of 3070.1598 'pathmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git ls-files -z -- '**/*X*/**/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1598 - pathmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1599 'ipathmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'': 
			test-tool wildmatch ipathmatch 'ab/cXd/efXg/hi' '**/*X*/**/*i'
		
ok 1599 - ipathmatch: match 'ab/cXd/efXg/hi' '**/*X*/**/*i'

expecting success of 3070.1600 'ipathmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --icase-pathspecs ls-files -z -- '**/*X*/**/*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1600 - ipathmatch (via ls-files): match '**/*X*/**/*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1601 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1601 - cleanup after previous file test

expecting success of 3070.1602 'setup match file test for foo': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1602 - setup match file test for foo

expecting success of 3070.1603 'wildmatch: no match 'foo' 'fo'': 
			test_must_fail test-tool wildmatch wildmatch 'foo' 'fo'
		
ok 1603 - wildmatch: no match 'foo' 'fo'

expecting success of 3070.1604 'wildmatch (via ls-files): no match 'fo' 'foo'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'fo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1604 - wildmatch (via ls-files): no match 'fo' 'foo'

expecting success of 3070.1605 'iwildmatch: no match 'foo' 'fo'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo' 'fo'
		
ok 1605 - iwildmatch: no match 'foo' 'fo'

expecting success of 3070.1606 'iwildmatch (via ls-files): no match 'fo' 'foo'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'fo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1606 - iwildmatch (via ls-files): no match 'fo' 'foo'

expecting success of 3070.1607 'pathmatch: no match 'foo' 'fo'': 
			test_must_fail test-tool wildmatch pathmatch 'foo' 'fo'
		
ok 1607 - pathmatch: no match 'foo' 'fo'

expecting success of 3070.1608 'pathmatch (via ls-files): no match 'fo' 'foo'': 
				>expect &&
				git ls-files -z -- 'fo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1608 - pathmatch (via ls-files): no match 'fo' 'foo'

expecting success of 3070.1609 'ipathmatch: no match 'foo' 'fo'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo' 'fo'
		
ok 1609 - ipathmatch: no match 'foo' 'fo'

expecting success of 3070.1610 'ipathmatch (via ls-files): no match 'fo' 'foo'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'fo' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1610 - ipathmatch (via ls-files): no match 'fo' 'foo'

expecting success of 3070.1611 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo
ok 1611 - cleanup after previous file test

expecting success of 3070.1612 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1612 - setup match file test for foo/bar

expecting success of 3070.1613 'wildmatch: match 'foo/bar' 'foo/bar'': 
			test-tool wildmatch wildmatch 'foo/bar' 'foo/bar'
		
ok 1613 - wildmatch: match 'foo/bar' 'foo/bar'

expecting success of 3070.1614 'wildmatch (via ls-files): match 'foo/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1614 - wildmatch (via ls-files): match 'foo/bar' 'foo/bar'

expecting success of 3070.1615 'iwildmatch: match 'foo/bar' 'foo/bar'': 
			test-tool wildmatch iwildmatch 'foo/bar' 'foo/bar'
		
ok 1615 - iwildmatch: match 'foo/bar' 'foo/bar'

expecting success of 3070.1616 'iwildmatch (via ls-files): match 'foo/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1616 - iwildmatch (via ls-files): match 'foo/bar' 'foo/bar'

expecting success of 3070.1617 'pathmatch: match 'foo/bar' 'foo/bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo/bar'
		
ok 1617 - pathmatch: match 'foo/bar' 'foo/bar'

expecting success of 3070.1618 'pathmatch (via ls-files): match 'foo/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1618 - pathmatch (via ls-files): match 'foo/bar' 'foo/bar'

expecting success of 3070.1619 'ipathmatch: match 'foo/bar' 'foo/bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo/bar'
		
ok 1619 - ipathmatch: match 'foo/bar' 'foo/bar'

expecting success of 3070.1620 'ipathmatch (via ls-files): match 'foo/bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1620 - ipathmatch (via ls-files): match 'foo/bar' 'foo/bar'

expecting success of 3070.1621 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1621 - cleanup after previous file test

expecting success of 3070.1622 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1622 - setup match file test for foo/bar

expecting success of 3070.1623 'wildmatch: match 'foo/bar' 'foo/*'': 
			test-tool wildmatch wildmatch 'foo/bar' 'foo/*'
		
ok 1623 - wildmatch: match 'foo/bar' 'foo/*'

expecting success of 3070.1624 'wildmatch (via ls-files): match 'foo/*' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1624 - wildmatch (via ls-files): match 'foo/*' 'foo/bar'

expecting success of 3070.1625 'iwildmatch: match 'foo/bar' 'foo/*'': 
			test-tool wildmatch iwildmatch 'foo/bar' 'foo/*'
		
ok 1625 - iwildmatch: match 'foo/bar' 'foo/*'

expecting success of 3070.1626 'iwildmatch (via ls-files): match 'foo/*' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1626 - iwildmatch (via ls-files): match 'foo/*' 'foo/bar'

expecting success of 3070.1627 'pathmatch: match 'foo/bar' 'foo/*'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo/*'
		
ok 1627 - pathmatch: match 'foo/bar' 'foo/*'

expecting success of 3070.1628 'pathmatch (via ls-files): match 'foo/*' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1628 - pathmatch (via ls-files): match 'foo/*' 'foo/bar'

expecting success of 3070.1629 'ipathmatch: match 'foo/bar' 'foo/*'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo/*'
		
ok 1629 - ipathmatch: match 'foo/bar' 'foo/*'

expecting success of 3070.1630 'ipathmatch (via ls-files): match 'foo/*' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1630 - ipathmatch (via ls-files): match 'foo/*' 'foo/bar'

expecting success of 3070.1631 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1631 - cleanup after previous file test

expecting success of 3070.1632 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1632 - setup match file test for foo/bba/arr

expecting success of 3070.1633 'wildmatch: no match 'foo/bba/arr' 'foo/*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/*'
		
ok 1633 - wildmatch: no match 'foo/bba/arr' 'foo/*'

expecting success of 3070.1634 'wildmatch (via ls-files): no match 'foo/*' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1634 - wildmatch (via ls-files): no match 'foo/*' 'foo/bba/arr'

expecting success of 3070.1635 'iwildmatch: no match 'foo/bba/arr' 'foo/*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/*'
		
ok 1635 - iwildmatch: no match 'foo/bba/arr' 'foo/*'

expecting success of 3070.1636 'iwildmatch (via ls-files): no match 'foo/*' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1636 - iwildmatch (via ls-files): no match 'foo/*' 'foo/bba/arr'

expecting success of 3070.1637 'pathmatch: match 'foo/bba/arr' 'foo/*'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/*'
		
ok 1637 - pathmatch: match 'foo/bba/arr' 'foo/*'

expecting success of 3070.1638 'pathmatch (via ls-files): match 'foo/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1638 - pathmatch (via ls-files): match 'foo/*' 'foo/bba/arr'

expecting success of 3070.1639 'ipathmatch: match 'foo/bba/arr' 'foo/*'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/*'
		
ok 1639 - ipathmatch: match 'foo/bba/arr' 'foo/*'

expecting success of 3070.1640 'ipathmatch (via ls-files): match 'foo/*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1640 - ipathmatch (via ls-files): match 'foo/*' 'foo/bba/arr'

expecting success of 3070.1641 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1641 - cleanup after previous file test

expecting success of 3070.1642 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1642 - setup match file test for foo/bba/arr

expecting success of 3070.1643 'wildmatch: match 'foo/bba/arr' 'foo/**'': 
			test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/**'
		
ok 1643 - wildmatch: match 'foo/bba/arr' 'foo/**'

expecting success of 3070.1644 'wildmatch (via ls-files): match 'foo/**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1644 - wildmatch (via ls-files): match 'foo/**' 'foo/bba/arr'

expecting success of 3070.1645 'iwildmatch: match 'foo/bba/arr' 'foo/**'': 
			test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/**'
		
ok 1645 - iwildmatch: match 'foo/bba/arr' 'foo/**'

expecting success of 3070.1646 'iwildmatch (via ls-files): match 'foo/**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1646 - iwildmatch (via ls-files): match 'foo/**' 'foo/bba/arr'

expecting success of 3070.1647 'pathmatch: match 'foo/bba/arr' 'foo/**'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/**'
		
ok 1647 - pathmatch: match 'foo/bba/arr' 'foo/**'

expecting success of 3070.1648 'pathmatch (via ls-files): match 'foo/**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1648 - pathmatch (via ls-files): match 'foo/**' 'foo/bba/arr'

expecting success of 3070.1649 'ipathmatch: match 'foo/bba/arr' 'foo/**'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/**'
		
ok 1649 - ipathmatch: match 'foo/bba/arr' 'foo/**'

expecting success of 3070.1650 'ipathmatch (via ls-files): match 'foo/**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1650 - ipathmatch (via ls-files): match 'foo/**' 'foo/bba/arr'

expecting success of 3070.1651 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1651 - cleanup after previous file test

expecting success of 3070.1652 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1652 - setup match file test for foo/bba/arr

expecting success of 3070.1653 'wildmatch: no match 'foo/bba/arr' 'foo*'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo*'
		
ok 1653 - wildmatch: no match 'foo/bba/arr' 'foo*'

expecting success of 3070.1654 'wildmatch (via ls-files): no match 'foo*' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1654 - wildmatch (via ls-files): no match 'foo*' 'foo/bba/arr'

expecting success of 3070.1655 'iwildmatch: no match 'foo/bba/arr' 'foo*'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo*'
		
ok 1655 - iwildmatch: no match 'foo/bba/arr' 'foo*'

expecting success of 3070.1656 'iwildmatch (via ls-files): no match 'foo*' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1656 - iwildmatch (via ls-files): no match 'foo*' 'foo/bba/arr'

expecting success of 3070.1657 'pathmatch: match 'foo/bba/arr' 'foo*'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo*'
		
ok 1657 - pathmatch: match 'foo/bba/arr' 'foo*'

expecting success of 3070.1658 'pathmatch (via ls-files): match 'foo*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1658 - pathmatch (via ls-files): match 'foo*' 'foo/bba/arr'

expecting success of 3070.1659 'ipathmatch: match 'foo/bba/arr' 'foo*'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo*'
		
ok 1659 - ipathmatch: match 'foo/bba/arr' 'foo*'

expecting success of 3070.1660 'ipathmatch (via ls-files): match 'foo*' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo*' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1660 - ipathmatch (via ls-files): match 'foo*' 'foo/bba/arr'

expecting success of 3070.1661 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1661 - cleanup after previous file test

expecting success of 3070.1662 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1662 - setup match file test for foo/bba/arr

expecting success of 3070.1663 'wildmatch: no match 'foo/bba/arr' 'foo**'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo**'
		
ok 1663 - wildmatch: no match 'foo/bba/arr' 'foo**'

expecting success of 3070.1664 'wildmatch (via ls-files): match 'foo**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs ls-files -z -- 'foo**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1664 - wildmatch (via ls-files): match 'foo**' 'foo/bba/arr'

expecting success of 3070.1665 'iwildmatch: no match 'foo/bba/arr' 'foo**'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo**'
		
ok 1665 - iwildmatch: no match 'foo/bba/arr' 'foo**'

expecting success of 3070.1666 'iwildmatch (via ls-files): match 'foo**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1666 - iwildmatch (via ls-files): match 'foo**' 'foo/bba/arr'

expecting success of 3070.1667 'pathmatch: match 'foo/bba/arr' 'foo**'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo**'
		
ok 1667 - pathmatch: match 'foo/bba/arr' 'foo**'

expecting success of 3070.1668 'pathmatch (via ls-files): match 'foo**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1668 - pathmatch (via ls-files): match 'foo**' 'foo/bba/arr'

expecting success of 3070.1669 'ipathmatch: match 'foo/bba/arr' 'foo**'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo**'
		
ok 1669 - ipathmatch: match 'foo/bba/arr' 'foo**'

expecting success of 3070.1670 'ipathmatch (via ls-files): match 'foo**' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo**' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1670 - ipathmatch (via ls-files): match 'foo**' 'foo/bba/arr'

expecting success of 3070.1671 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1671 - cleanup after previous file test

expecting success of 3070.1672 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1672 - setup match file test for foo/bba/arr

expecting success of 3070.1673 'wildmatch: no match 'foo/bba/arr' 'foo/*arr'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/*arr'
		
ok 1673 - wildmatch: no match 'foo/bba/arr' 'foo/*arr'

expecting success of 3070.1674 'wildmatch (via ls-files): no match 'foo/*arr' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo/*arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1674 - wildmatch (via ls-files): no match 'foo/*arr' 'foo/bba/arr'

expecting success of 3070.1675 'iwildmatch: no match 'foo/bba/arr' 'foo/*arr'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/*arr'
		
ok 1675 - iwildmatch: no match 'foo/bba/arr' 'foo/*arr'

expecting success of 3070.1676 'iwildmatch (via ls-files): no match 'foo/*arr' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/*arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1676 - iwildmatch (via ls-files): no match 'foo/*arr' 'foo/bba/arr'

expecting success of 3070.1677 'pathmatch: match 'foo/bba/arr' 'foo/*arr'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/*arr'
		
ok 1677 - pathmatch: match 'foo/bba/arr' 'foo/*arr'

expecting success of 3070.1678 'pathmatch (via ls-files): match 'foo/*arr' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo/*arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1678 - pathmatch (via ls-files): match 'foo/*arr' 'foo/bba/arr'

expecting success of 3070.1679 'ipathmatch: match 'foo/bba/arr' 'foo/*arr'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/*arr'
		
ok 1679 - ipathmatch: match 'foo/bba/arr' 'foo/*arr'

expecting success of 3070.1680 'ipathmatch (via ls-files): match 'foo/*arr' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/*arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1680 - ipathmatch (via ls-files): match 'foo/*arr' 'foo/bba/arr'

expecting success of 3070.1681 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1681 - cleanup after previous file test

expecting success of 3070.1682 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1682 - setup match file test for foo/bba/arr

expecting success of 3070.1683 'wildmatch: no match 'foo/bba/arr' 'foo/**arr'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/**arr'
		
ok 1683 - wildmatch: no match 'foo/bba/arr' 'foo/**arr'

expecting success of 3070.1684 'wildmatch (via ls-files): no match 'foo/**arr' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1684 - wildmatch (via ls-files): no match 'foo/**arr' 'foo/bba/arr'

expecting success of 3070.1685 'iwildmatch: no match 'foo/bba/arr' 'foo/**arr'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/**arr'
		
ok 1685 - iwildmatch: no match 'foo/bba/arr' 'foo/**arr'

expecting success of 3070.1686 'iwildmatch (via ls-files): no match 'foo/**arr' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1686 - iwildmatch (via ls-files): no match 'foo/**arr' 'foo/bba/arr'

expecting success of 3070.1687 'pathmatch: match 'foo/bba/arr' 'foo/**arr'': 
			test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/**arr'
		
ok 1687 - pathmatch: match 'foo/bba/arr' 'foo/**arr'

expecting success of 3070.1688 'pathmatch (via ls-files): match 'foo/**arr' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git ls-files -z -- 'foo/**arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1688 - pathmatch (via ls-files): match 'foo/**arr' 'foo/bba/arr'

expecting success of 3070.1689 'ipathmatch: match 'foo/bba/arr' 'foo/**arr'': 
			test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/**arr'
		
ok 1689 - ipathmatch: match 'foo/bba/arr' 'foo/**arr'

expecting success of 3070.1690 'ipathmatch (via ls-files): match 'foo/**arr' 'foo/bba/arr'': 
				printf '%s' 'foo/bba/arr' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**arr' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1690 - ipathmatch (via ls-files): match 'foo/**arr' 'foo/bba/arr'

expecting success of 3070.1691 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1691 - cleanup after previous file test

expecting success of 3070.1692 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1692 - setup match file test for foo/bba/arr

expecting success of 3070.1693 'wildmatch: no match 'foo/bba/arr' 'foo/*z'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/*z'
		
ok 1693 - wildmatch: no match 'foo/bba/arr' 'foo/*z'

expecting success of 3070.1694 'wildmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo/*z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1694 - wildmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'

expecting success of 3070.1695 'iwildmatch: no match 'foo/bba/arr' 'foo/*z'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/*z'
		
ok 1695 - iwildmatch: no match 'foo/bba/arr' 'foo/*z'

expecting success of 3070.1696 'iwildmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/*z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1696 - iwildmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'

expecting success of 3070.1697 'pathmatch: no match 'foo/bba/arr' 'foo/*z'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/*z'
		
ok 1697 - pathmatch: no match 'foo/bba/arr' 'foo/*z'

expecting success of 3070.1698 'pathmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'': 
				>expect &&
				git ls-files -z -- 'foo/*z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1698 - pathmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'

expecting success of 3070.1699 'ipathmatch: no match 'foo/bba/arr' 'foo/*z'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/*z'
		
ok 1699 - ipathmatch: no match 'foo/bba/arr' 'foo/*z'

expecting success of 3070.1700 'ipathmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo/*z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1700 - ipathmatch (via ls-files): no match 'foo/*z' 'foo/bba/arr'

expecting success of 3070.1701 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1701 - cleanup after previous file test

expecting success of 3070.1702 'setup match file test for foo/bba/arr': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1702 - setup match file test for foo/bba/arr

expecting success of 3070.1703 'wildmatch: no match 'foo/bba/arr' 'foo/**z'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bba/arr' 'foo/**z'
		
ok 1703 - wildmatch: no match 'foo/bba/arr' 'foo/**z'

expecting success of 3070.1704 'wildmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo/**z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1704 - wildmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'

expecting success of 3070.1705 'iwildmatch: no match 'foo/bba/arr' 'foo/**z'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bba/arr' 'foo/**z'
		
ok 1705 - iwildmatch: no match 'foo/bba/arr' 'foo/**z'

expecting success of 3070.1706 'iwildmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo/**z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1706 - iwildmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'

expecting success of 3070.1707 'pathmatch: no match 'foo/bba/arr' 'foo/**z'': 
			test_must_fail test-tool wildmatch pathmatch 'foo/bba/arr' 'foo/**z'
		
ok 1707 - pathmatch: no match 'foo/bba/arr' 'foo/**z'

expecting success of 3070.1708 'pathmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'': 
				>expect &&
				git ls-files -z -- 'foo/**z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1708 - pathmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'

expecting success of 3070.1709 'ipathmatch: no match 'foo/bba/arr' 'foo/**z'': 
			test_must_fail test-tool wildmatch ipathmatch 'foo/bba/arr' 'foo/**z'
		
ok 1709 - ipathmatch: no match 'foo/bba/arr' 'foo/**z'

expecting success of 3070.1710 'ipathmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'': 
				>expect &&
				git --icase-pathspecs ls-files -z -- 'foo/**z' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1710 - ipathmatch (via ls-files): no match 'foo/**z' 'foo/bba/arr'

expecting success of 3070.1711 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1711 - cleanup after previous file test

expecting success of 3070.1712 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1712 - setup match file test for foo/bar

expecting success of 3070.1713 'wildmatch: no match 'foo/bar' 'foo?bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo?bar'
		
ok 1713 - wildmatch: no match 'foo/bar' 'foo?bar'

expecting success of 3070.1714 'wildmatch (via ls-files): no match 'foo?bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1714 - wildmatch (via ls-files): no match 'foo?bar' 'foo/bar'

expecting success of 3070.1715 'iwildmatch: no match 'foo/bar' 'foo?bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo?bar'
		
ok 1715 - iwildmatch: no match 'foo/bar' 'foo?bar'

expecting success of 3070.1716 'iwildmatch (via ls-files): no match 'foo?bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1716 - iwildmatch (via ls-files): no match 'foo?bar' 'foo/bar'

expecting success of 3070.1717 'pathmatch: match 'foo/bar' 'foo?bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo?bar'
		
ok 1717 - pathmatch: match 'foo/bar' 'foo?bar'

expecting success of 3070.1718 'pathmatch (via ls-files): match 'foo?bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1718 - pathmatch (via ls-files): match 'foo?bar' 'foo/bar'

expecting success of 3070.1719 'ipathmatch: match 'foo/bar' 'foo?bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo?bar'
		
ok 1719 - ipathmatch: match 'foo/bar' 'foo?bar'

expecting success of 3070.1720 'ipathmatch (via ls-files): match 'foo?bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo?bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1720 - ipathmatch (via ls-files): match 'foo?bar' 'foo/bar'

expecting success of 3070.1721 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1721 - cleanup after previous file test

expecting success of 3070.1722 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1722 - setup match file test for foo/bar

expecting success of 3070.1723 'wildmatch: no match 'foo/bar' 'foo[/]bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo[/]bar'
		
ok 1723 - wildmatch: no match 'foo/bar' 'foo[/]bar'

expecting success of 3070.1724 'wildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1724 - wildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'

expecting success of 3070.1725 'iwildmatch: no match 'foo/bar' 'foo[/]bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo[/]bar'
		
ok 1725 - iwildmatch: no match 'foo/bar' 'foo[/]bar'

expecting success of 3070.1726 'iwildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1726 - iwildmatch (via ls-files): no match 'foo[/]bar' 'foo/bar'

expecting success of 3070.1727 'pathmatch: match 'foo/bar' 'foo[/]bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo[/]bar'
		
ok 1727 - pathmatch: match 'foo/bar' 'foo[/]bar'

expecting success of 3070.1728 'pathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1728 - pathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'

expecting success of 3070.1729 'ipathmatch: match 'foo/bar' 'foo[/]bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo[/]bar'
		
ok 1729 - ipathmatch: match 'foo/bar' 'foo[/]bar'

expecting success of 3070.1730 'ipathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo[/]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1730 - ipathmatch (via ls-files): match 'foo[/]bar' 'foo/bar'

expecting success of 3070.1731 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1731 - cleanup after previous file test

expecting success of 3070.1732 'setup match file test for foo/bar': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1732 - setup match file test for foo/bar

expecting success of 3070.1733 'wildmatch: no match 'foo/bar' 'foo[^a-z]bar'': 
			test_must_fail test-tool wildmatch wildmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 1733 - wildmatch: no match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.1734 'wildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1734 - wildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.1735 'iwildmatch: no match 'foo/bar' 'foo[^a-z]bar'': 
			test_must_fail test-tool wildmatch iwildmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 1735 - iwildmatch: no match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.1736 'iwildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1736 - iwildmatch (via ls-files): no match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.1737 'pathmatch: match 'foo/bar' 'foo[^a-z]bar'': 
			test-tool wildmatch pathmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 1737 - pathmatch: match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.1738 'pathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1738 - pathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.1739 'ipathmatch: match 'foo/bar' 'foo[^a-z]bar'': 
			test-tool wildmatch ipathmatch 'foo/bar' 'foo[^a-z]bar'
		
ok 1739 - ipathmatch: match 'foo/bar' 'foo[^a-z]bar'

expecting success of 3070.1740 'ipathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'': 
				printf '%s' 'foo/bar' >expect &&
				git --icase-pathspecs ls-files -z -- 'foo[^a-z]bar' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1740 - ipathmatch (via ls-files): match 'foo[^a-z]bar' 'foo/bar'

expecting success of 3070.1741 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing foo/
ok 1741 - cleanup after previous file test

expecting success of 3070.1742 'setup match file test for ab/cXd/efXg/hi': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1742 - setup match file test for ab/cXd/efXg/hi

expecting success of 3070.1743 'wildmatch: no match 'ab/cXd/efXg/hi' '*Xg*i'': 
			test_must_fail test-tool wildmatch wildmatch 'ab/cXd/efXg/hi' '*Xg*i'
		
ok 1743 - wildmatch: no match 'ab/cXd/efXg/hi' '*Xg*i'

expecting success of 3070.1744 'wildmatch (via ls-files): no match '*Xg*i' 'ab/cXd/efXg/hi'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '*Xg*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1744 - wildmatch (via ls-files): no match '*Xg*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1745 'iwildmatch: no match 'ab/cXd/efXg/hi' '*Xg*i'': 
			test_must_fail test-tool wildmatch iwildmatch 'ab/cXd/efXg/hi' '*Xg*i'
		
ok 1745 - iwildmatch: no match 'ab/cXd/efXg/hi' '*Xg*i'

expecting success of 3070.1746 'iwildmatch (via ls-files): no match '*Xg*i' 'ab/cXd/efXg/hi'': 
				>expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '*Xg*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1746 - iwildmatch (via ls-files): no match '*Xg*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1747 'pathmatch: match 'ab/cXd/efXg/hi' '*Xg*i'': 
			test-tool wildmatch pathmatch 'ab/cXd/efXg/hi' '*Xg*i'
		
ok 1747 - pathmatch: match 'ab/cXd/efXg/hi' '*Xg*i'

expecting success of 3070.1748 'pathmatch (via ls-files): match '*Xg*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git ls-files -z -- '*Xg*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1748 - pathmatch (via ls-files): match '*Xg*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1749 'ipathmatch: match 'ab/cXd/efXg/hi' '*Xg*i'': 
			test-tool wildmatch ipathmatch 'ab/cXd/efXg/hi' '*Xg*i'
		
ok 1749 - ipathmatch: match 'ab/cXd/efXg/hi' '*Xg*i'

expecting success of 3070.1750 'ipathmatch (via ls-files): match '*Xg*i' 'ab/cXd/efXg/hi'': 
				printf '%s' 'ab/cXd/efXg/hi' >expect &&
				git --icase-pathspecs ls-files -z -- '*Xg*i' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1750 - ipathmatch (via ls-files): match '*Xg*i' 'ab/cXd/efXg/hi'

expecting success of 3070.1751 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing ab/
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1751 - cleanup after previous file test

expecting success of 3070.1752 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1752 - setup match file test for a

expecting success of 3070.1753 'wildmatch: no match 'a' '[A-Z]'': 
			test_must_fail test-tool wildmatch wildmatch 'a' '[A-Z]'
		
ok 1753 - wildmatch: no match 'a' '[A-Z]'

expecting success of 3070.1754 'wildmatch (via ls-files): no match '[A-Z]' 'a'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1754 - wildmatch (via ls-files): no match '[A-Z]' 'a'

expecting success of 3070.1755 'iwildmatch: match 'a' '[A-Z]'': 
			test-tool wildmatch iwildmatch 'a' '[A-Z]'
		
ok 1755 - iwildmatch: match 'a' '[A-Z]'

expecting success of 3070.1756 'iwildmatch (via ls-files): match '[A-Z]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1756 - iwildmatch (via ls-files): match '[A-Z]' 'a'

expecting success of 3070.1757 'pathmatch: no match 'a' '[A-Z]'': 
			test_must_fail test-tool wildmatch pathmatch 'a' '[A-Z]'
		
ok 1757 - pathmatch: no match 'a' '[A-Z]'

expecting success of 3070.1758 'pathmatch (via ls-files): no match '[A-Z]' 'a'': 
				>expect &&
				git ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1758 - pathmatch (via ls-files): no match '[A-Z]' 'a'

expecting success of 3070.1759 'ipathmatch: match 'a' '[A-Z]'': 
			test-tool wildmatch ipathmatch 'a' '[A-Z]'
		
ok 1759 - ipathmatch: match 'a' '[A-Z]'

expecting success of 3070.1760 'ipathmatch (via ls-files): match '[A-Z]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1760 - ipathmatch (via ls-files): match '[A-Z]' 'a'

expecting success of 3070.1761 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1761 - cleanup after previous file test

expecting success of 3070.1762 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1762 - setup match file test for A

expecting success of 3070.1763 'wildmatch: match 'A' '[A-Z]'': 
			test-tool wildmatch wildmatch 'A' '[A-Z]'
		
ok 1763 - wildmatch: match 'A' '[A-Z]'

expecting success of 3070.1764 'wildmatch (via ls-files): match '[A-Z]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1764 - wildmatch (via ls-files): match '[A-Z]' 'A'

expecting success of 3070.1765 'iwildmatch: match 'A' '[A-Z]'': 
			test-tool wildmatch iwildmatch 'A' '[A-Z]'
		
ok 1765 - iwildmatch: match 'A' '[A-Z]'

expecting success of 3070.1766 'iwildmatch (via ls-files): match '[A-Z]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1766 - iwildmatch (via ls-files): match '[A-Z]' 'A'

expecting success of 3070.1767 'pathmatch: match 'A' '[A-Z]'': 
			test-tool wildmatch pathmatch 'A' '[A-Z]'
		
ok 1767 - pathmatch: match 'A' '[A-Z]'

expecting success of 3070.1768 'pathmatch (via ls-files): match '[A-Z]' 'A'': 
				printf '%s' 'A' >expect &&
				git ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1768 - pathmatch (via ls-files): match '[A-Z]' 'A'

expecting success of 3070.1769 'ipathmatch: match 'A' '[A-Z]'': 
			test-tool wildmatch ipathmatch 'A' '[A-Z]'
		
ok 1769 - ipathmatch: match 'A' '[A-Z]'

expecting success of 3070.1770 'ipathmatch (via ls-files): match '[A-Z]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[A-Z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1770 - ipathmatch (via ls-files): match '[A-Z]' 'A'

expecting success of 3070.1771 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1771 - cleanup after previous file test

expecting success of 3070.1772 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1772 - setup match file test for A

expecting success of 3070.1773 'wildmatch: no match 'A' '[a-z]'': 
			test_must_fail test-tool wildmatch wildmatch 'A' '[a-z]'
		
ok 1773 - wildmatch: no match 'A' '[a-z]'

expecting success of 3070.1774 'wildmatch (via ls-files): no match '[a-z]' 'A'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1774 - wildmatch (via ls-files): no match '[a-z]' 'A'

expecting success of 3070.1775 'iwildmatch: match 'A' '[a-z]'': 
			test-tool wildmatch iwildmatch 'A' '[a-z]'
		
ok 1775 - iwildmatch: match 'A' '[a-z]'

expecting success of 3070.1776 'iwildmatch (via ls-files): match '[a-z]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1776 - iwildmatch (via ls-files): match '[a-z]' 'A'

expecting success of 3070.1777 'pathmatch: no match 'A' '[a-z]'': 
			test_must_fail test-tool wildmatch pathmatch 'A' '[a-z]'
		
ok 1777 - pathmatch: no match 'A' '[a-z]'

expecting success of 3070.1778 'pathmatch (via ls-files): no match '[a-z]' 'A'': 
				>expect &&
				git ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1778 - pathmatch (via ls-files): no match '[a-z]' 'A'

expecting success of 3070.1779 'ipathmatch: match 'A' '[a-z]'': 
			test-tool wildmatch ipathmatch 'A' '[a-z]'
		
ok 1779 - ipathmatch: match 'A' '[a-z]'

expecting success of 3070.1780 'ipathmatch (via ls-files): match '[a-z]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1780 - ipathmatch (via ls-files): match '[a-z]' 'A'

expecting success of 3070.1781 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1781 - cleanup after previous file test

expecting success of 3070.1782 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1782 - setup match file test for a

expecting success of 3070.1783 'wildmatch: match 'a' '[a-z]'': 
			test-tool wildmatch wildmatch 'a' '[a-z]'
		
ok 1783 - wildmatch: match 'a' '[a-z]'

expecting success of 3070.1784 'wildmatch (via ls-files): match '[a-z]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1784 - wildmatch (via ls-files): match '[a-z]' 'a'

expecting success of 3070.1785 'iwildmatch: match 'a' '[a-z]'': 
			test-tool wildmatch iwildmatch 'a' '[a-z]'
		
ok 1785 - iwildmatch: match 'a' '[a-z]'

expecting success of 3070.1786 'iwildmatch (via ls-files): match '[a-z]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1786 - iwildmatch (via ls-files): match '[a-z]' 'a'

expecting success of 3070.1787 'pathmatch: match 'a' '[a-z]'': 
			test-tool wildmatch pathmatch 'a' '[a-z]'
		
ok 1787 - pathmatch: match 'a' '[a-z]'

expecting success of 3070.1788 'pathmatch (via ls-files): match '[a-z]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1788 - pathmatch (via ls-files): match '[a-z]' 'a'

expecting success of 3070.1789 'ipathmatch: match 'a' '[a-z]'': 
			test-tool wildmatch ipathmatch 'a' '[a-z]'
		
ok 1789 - ipathmatch: match 'a' '[a-z]'

expecting success of 3070.1790 'ipathmatch (via ls-files): match '[a-z]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[a-z]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1790 - ipathmatch (via ls-files): match '[a-z]' 'a'

expecting success of 3070.1791 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1791 - cleanup after previous file test

expecting success of 3070.1792 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1792 - setup match file test for a

expecting success of 3070.1793 'wildmatch: no match 'a' '[[:upper:]]'': 
			test_must_fail test-tool wildmatch wildmatch 'a' '[[:upper:]]'
		
ok 1793 - wildmatch: no match 'a' '[[:upper:]]'

expecting success of 3070.1794 'wildmatch (via ls-files): no match '[[:upper:]]' 'a'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1794 - wildmatch (via ls-files): no match '[[:upper:]]' 'a'

expecting success of 3070.1795 'iwildmatch: match 'a' '[[:upper:]]'': 
			test-tool wildmatch iwildmatch 'a' '[[:upper:]]'
		
ok 1795 - iwildmatch: match 'a' '[[:upper:]]'

expecting success of 3070.1796 'iwildmatch (via ls-files): match '[[:upper:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1796 - iwildmatch (via ls-files): match '[[:upper:]]' 'a'

expecting success of 3070.1797 'pathmatch: no match 'a' '[[:upper:]]'': 
			test_must_fail test-tool wildmatch pathmatch 'a' '[[:upper:]]'
		
ok 1797 - pathmatch: no match 'a' '[[:upper:]]'

expecting success of 3070.1798 'pathmatch (via ls-files): no match '[[:upper:]]' 'a'': 
				>expect &&
				git ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1798 - pathmatch (via ls-files): no match '[[:upper:]]' 'a'

expecting success of 3070.1799 'ipathmatch: match 'a' '[[:upper:]]'': 
			test-tool wildmatch ipathmatch 'a' '[[:upper:]]'
		
ok 1799 - ipathmatch: match 'a' '[[:upper:]]'

expecting success of 3070.1800 'ipathmatch (via ls-files): match '[[:upper:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1800 - ipathmatch (via ls-files): match '[[:upper:]]' 'a'

expecting success of 3070.1801 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1801 - cleanup after previous file test

expecting success of 3070.1802 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1802 - setup match file test for A

expecting success of 3070.1803 'wildmatch: match 'A' '[[:upper:]]'': 
			test-tool wildmatch wildmatch 'A' '[[:upper:]]'
		
ok 1803 - wildmatch: match 'A' '[[:upper:]]'

expecting success of 3070.1804 'wildmatch (via ls-files): match '[[:upper:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1804 - wildmatch (via ls-files): match '[[:upper:]]' 'A'

expecting success of 3070.1805 'iwildmatch: match 'A' '[[:upper:]]'': 
			test-tool wildmatch iwildmatch 'A' '[[:upper:]]'
		
ok 1805 - iwildmatch: match 'A' '[[:upper:]]'

expecting success of 3070.1806 'iwildmatch (via ls-files): match '[[:upper:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1806 - iwildmatch (via ls-files): match '[[:upper:]]' 'A'

expecting success of 3070.1807 'pathmatch: match 'A' '[[:upper:]]'': 
			test-tool wildmatch pathmatch 'A' '[[:upper:]]'
		
ok 1807 - pathmatch: match 'A' '[[:upper:]]'

expecting success of 3070.1808 'pathmatch (via ls-files): match '[[:upper:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1808 - pathmatch (via ls-files): match '[[:upper:]]' 'A'

expecting success of 3070.1809 'ipathmatch: match 'A' '[[:upper:]]'': 
			test-tool wildmatch ipathmatch 'A' '[[:upper:]]'
		
ok 1809 - ipathmatch: match 'A' '[[:upper:]]'

expecting success of 3070.1810 'ipathmatch (via ls-files): match '[[:upper:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:upper:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1810 - ipathmatch (via ls-files): match '[[:upper:]]' 'A'

expecting success of 3070.1811 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1811 - cleanup after previous file test

expecting success of 3070.1812 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1812 - setup match file test for A

expecting success of 3070.1813 'wildmatch: no match 'A' '[[:lower:]]'': 
			test_must_fail test-tool wildmatch wildmatch 'A' '[[:lower:]]'
		
ok 1813 - wildmatch: no match 'A' '[[:lower:]]'

expecting success of 3070.1814 'wildmatch (via ls-files): no match '[[:lower:]]' 'A'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1814 - wildmatch (via ls-files): no match '[[:lower:]]' 'A'

expecting success of 3070.1815 'iwildmatch: match 'A' '[[:lower:]]'': 
			test-tool wildmatch iwildmatch 'A' '[[:lower:]]'
		
ok 1815 - iwildmatch: match 'A' '[[:lower:]]'

expecting success of 3070.1816 'iwildmatch (via ls-files): match '[[:lower:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1816 - iwildmatch (via ls-files): match '[[:lower:]]' 'A'

expecting success of 3070.1817 'pathmatch: no match 'A' '[[:lower:]]'': 
			test_must_fail test-tool wildmatch pathmatch 'A' '[[:lower:]]'
		
ok 1817 - pathmatch: no match 'A' '[[:lower:]]'

expecting success of 3070.1818 'pathmatch (via ls-files): no match '[[:lower:]]' 'A'': 
				>expect &&
				git ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1818 - pathmatch (via ls-files): no match '[[:lower:]]' 'A'

expecting success of 3070.1819 'ipathmatch: match 'A' '[[:lower:]]'': 
			test-tool wildmatch ipathmatch 'A' '[[:lower:]]'
		
ok 1819 - ipathmatch: match 'A' '[[:lower:]]'

expecting success of 3070.1820 'ipathmatch (via ls-files): match '[[:lower:]]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1820 - ipathmatch (via ls-files): match '[[:lower:]]' 'A'

expecting success of 3070.1821 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1821 - cleanup after previous file test

expecting success of 3070.1822 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1822 - setup match file test for a

expecting success of 3070.1823 'wildmatch: match 'a' '[[:lower:]]'': 
			test-tool wildmatch wildmatch 'a' '[[:lower:]]'
		
ok 1823 - wildmatch: match 'a' '[[:lower:]]'

expecting success of 3070.1824 'wildmatch (via ls-files): match '[[:lower:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1824 - wildmatch (via ls-files): match '[[:lower:]]' 'a'

expecting success of 3070.1825 'iwildmatch: match 'a' '[[:lower:]]'': 
			test-tool wildmatch iwildmatch 'a' '[[:lower:]]'
		
ok 1825 - iwildmatch: match 'a' '[[:lower:]]'

expecting success of 3070.1826 'iwildmatch (via ls-files): match '[[:lower:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1826 - iwildmatch (via ls-files): match '[[:lower:]]' 'a'

expecting success of 3070.1827 'pathmatch: match 'a' '[[:lower:]]'': 
			test-tool wildmatch pathmatch 'a' '[[:lower:]]'
		
ok 1827 - pathmatch: match 'a' '[[:lower:]]'

expecting success of 3070.1828 'pathmatch (via ls-files): match '[[:lower:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1828 - pathmatch (via ls-files): match '[[:lower:]]' 'a'

expecting success of 3070.1829 'ipathmatch: match 'a' '[[:lower:]]'': 
			test-tool wildmatch ipathmatch 'a' '[[:lower:]]'
		
ok 1829 - ipathmatch: match 'a' '[[:lower:]]'

expecting success of 3070.1830 'ipathmatch (via ls-files): match '[[:lower:]]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[[:lower:]]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1830 - ipathmatch (via ls-files): match '[[:lower:]]' 'a'

expecting success of 3070.1831 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1831 - cleanup after previous file test

expecting success of 3070.1832 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1832 - setup match file test for A

expecting success of 3070.1833 'wildmatch: no match 'A' '[B-Za]'': 
			test_must_fail test-tool wildmatch wildmatch 'A' '[B-Za]'
		
ok 1833 - wildmatch: no match 'A' '[B-Za]'

expecting success of 3070.1834 'wildmatch (via ls-files): no match '[B-Za]' 'A'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1834 - wildmatch (via ls-files): no match '[B-Za]' 'A'

expecting success of 3070.1835 'iwildmatch: match 'A' '[B-Za]'': 
			test-tool wildmatch iwildmatch 'A' '[B-Za]'
		
ok 1835 - iwildmatch: match 'A' '[B-Za]'

expecting success of 3070.1836 'iwildmatch (via ls-files): match '[B-Za]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1836 - iwildmatch (via ls-files): match '[B-Za]' 'A'

expecting success of 3070.1837 'pathmatch: no match 'A' '[B-Za]'': 
			test_must_fail test-tool wildmatch pathmatch 'A' '[B-Za]'
		
ok 1837 - pathmatch: no match 'A' '[B-Za]'

expecting success of 3070.1838 'pathmatch (via ls-files): no match '[B-Za]' 'A'': 
				>expect &&
				git ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1838 - pathmatch (via ls-files): no match '[B-Za]' 'A'

expecting success of 3070.1839 'ipathmatch: match 'A' '[B-Za]'': 
			test-tool wildmatch ipathmatch 'A' '[B-Za]'
		
ok 1839 - ipathmatch: match 'A' '[B-Za]'

expecting success of 3070.1840 'ipathmatch (via ls-files): match '[B-Za]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1840 - ipathmatch (via ls-files): match '[B-Za]' 'A'

expecting success of 3070.1841 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1841 - cleanup after previous file test

expecting success of 3070.1842 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1842 - setup match file test for a

expecting success of 3070.1843 'wildmatch: match 'a' '[B-Za]'': 
			test-tool wildmatch wildmatch 'a' '[B-Za]'
		
ok 1843 - wildmatch: match 'a' '[B-Za]'

expecting success of 3070.1844 'wildmatch (via ls-files): match '[B-Za]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1844 - wildmatch (via ls-files): match '[B-Za]' 'a'

expecting success of 3070.1845 'iwildmatch: match 'a' '[B-Za]'': 
			test-tool wildmatch iwildmatch 'a' '[B-Za]'
		
ok 1845 - iwildmatch: match 'a' '[B-Za]'

expecting success of 3070.1846 'iwildmatch (via ls-files): match '[B-Za]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1846 - iwildmatch (via ls-files): match '[B-Za]' 'a'

expecting success of 3070.1847 'pathmatch: match 'a' '[B-Za]'': 
			test-tool wildmatch pathmatch 'a' '[B-Za]'
		
ok 1847 - pathmatch: match 'a' '[B-Za]'

expecting success of 3070.1848 'pathmatch (via ls-files): match '[B-Za]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1848 - pathmatch (via ls-files): match '[B-Za]' 'a'

expecting success of 3070.1849 'ipathmatch: match 'a' '[B-Za]'': 
			test-tool wildmatch ipathmatch 'a' '[B-Za]'
		
ok 1849 - ipathmatch: match 'a' '[B-Za]'

expecting success of 3070.1850 'ipathmatch (via ls-files): match '[B-Za]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[B-Za]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1850 - ipathmatch (via ls-files): match '[B-Za]' 'a'

expecting success of 3070.1851 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1851 - cleanup after previous file test

expecting success of 3070.1852 'setup match file test for A': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1852 - setup match file test for A

expecting success of 3070.1853 'wildmatch: no match 'A' '[B-a]'': 
			test_must_fail test-tool wildmatch wildmatch 'A' '[B-a]'
		
ok 1853 - wildmatch: no match 'A' '[B-a]'

expecting success of 3070.1854 'wildmatch (via ls-files): no match '[B-a]' 'A'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1854 - wildmatch (via ls-files): no match '[B-a]' 'A'

expecting success of 3070.1855 'iwildmatch: match 'A' '[B-a]'': 
			test-tool wildmatch iwildmatch 'A' '[B-a]'
		
ok 1855 - iwildmatch: match 'A' '[B-a]'

expecting success of 3070.1856 'iwildmatch (via ls-files): match '[B-a]' 'A'': 
				printf '%s' 'A' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1856 - iwildmatch (via ls-files): match '[B-a]' 'A'

expecting success of 3070.1857 'pathmatch: no match 'A' '[B-a]'': 
			test_must_fail test-tool wildmatch pathmatch 'A' '[B-a]'
		
ok 1857 - pathmatch: no match 'A' '[B-a]'

expecting success of 3070.1858 'pathmatch (via ls-files): no match '[B-a]' 'A'': 
				>expect &&
				git ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1858 - pathmatch (via ls-files): no match '[B-a]' 'A'

expecting success of 3070.1859 'ipathmatch: match 'A' '[B-a]'': 
			test-tool wildmatch ipathmatch 'A' '[B-a]'
		
ok 1859 - ipathmatch: match 'A' '[B-a]'

expecting success of 3070.1860 'ipathmatch (via ls-files): match '[B-a]' 'A'': 
				printf '%s' 'A' >expect &&
				git --icase-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1860 - ipathmatch (via ls-files): match '[B-a]' 'A'

expecting success of 3070.1861 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing A
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1861 - cleanup after previous file test

expecting success of 3070.1862 'setup match file test for a': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1862 - setup match file test for a

expecting success of 3070.1863 'wildmatch: match 'a' '[B-a]'': 
			test-tool wildmatch wildmatch 'a' '[B-a]'
		
ok 1863 - wildmatch: match 'a' '[B-a]'

expecting success of 3070.1864 'wildmatch (via ls-files): match '[B-a]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1864 - wildmatch (via ls-files): match '[B-a]' 'a'

expecting success of 3070.1865 'iwildmatch: match 'a' '[B-a]'': 
			test-tool wildmatch iwildmatch 'a' '[B-a]'
		
ok 1865 - iwildmatch: match 'a' '[B-a]'

expecting success of 3070.1866 'iwildmatch (via ls-files): match '[B-a]' 'a'': 
				printf '%s' 'a' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1866 - iwildmatch (via ls-files): match '[B-a]' 'a'

expecting success of 3070.1867 'pathmatch: match 'a' '[B-a]'': 
			test-tool wildmatch pathmatch 'a' '[B-a]'
		
ok 1867 - pathmatch: match 'a' '[B-a]'

expecting success of 3070.1868 'pathmatch (via ls-files): match '[B-a]' 'a'': 
				printf '%s' 'a' >expect &&
				git ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1868 - pathmatch (via ls-files): match '[B-a]' 'a'

expecting success of 3070.1869 'ipathmatch: match 'a' '[B-a]'': 
			test-tool wildmatch ipathmatch 'a' '[B-a]'
		
ok 1869 - ipathmatch: match 'a' '[B-a]'

expecting success of 3070.1870 'ipathmatch (via ls-files): match '[B-a]' 'a'': 
				printf '%s' 'a' >expect &&
				git --icase-pathspecs ls-files -z -- '[B-a]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1870 - ipathmatch (via ls-files): match '[B-a]' 'a'

expecting success of 3070.1871 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing a
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
ok 1871 - cleanup after previous file test

expecting success of 3070.1872 'setup match file test for z': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1872 - setup match file test for z

expecting success of 3070.1873 'wildmatch: no match 'z' '[Z-y]'': 
			test_must_fail test-tool wildmatch wildmatch 'z' '[Z-y]'
		
ok 1873 - wildmatch: no match 'z' '[Z-y]'

expecting success of 3070.1874 'wildmatch (via ls-files): no match '[Z-y]' 'z'': 
				>expect &&
				git --glob-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1874 - wildmatch (via ls-files): no match '[Z-y]' 'z'

expecting success of 3070.1875 'iwildmatch: match 'z' '[Z-y]'': 
			test-tool wildmatch iwildmatch 'z' '[Z-y]'
		
ok 1875 - iwildmatch: match 'z' '[Z-y]'

expecting success of 3070.1876 'iwildmatch (via ls-files): match '[Z-y]' 'z'': 
				printf '%s' 'z' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1876 - iwildmatch (via ls-files): match '[Z-y]' 'z'

expecting success of 3070.1877 'pathmatch: no match 'z' '[Z-y]'': 
			test_must_fail test-tool wildmatch pathmatch 'z' '[Z-y]'
		
ok 1877 - pathmatch: no match 'z' '[Z-y]'

expecting success of 3070.1878 'pathmatch (via ls-files): no match '[Z-y]' 'z'': 
				>expect &&
				git ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1878 - pathmatch (via ls-files): no match '[Z-y]' 'z'

expecting success of 3070.1879 'ipathmatch: match 'z' '[Z-y]'': 
			test-tool wildmatch ipathmatch 'z' '[Z-y]'
		
ok 1879 - ipathmatch: match 'z' '[Z-y]'

expecting success of 3070.1880 'ipathmatch (via ls-files): match '[Z-y]' 'z'': 
				printf '%s' 'z' >expect &&
				git --icase-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1880 - ipathmatch (via ls-files): match '[Z-y]' 'z'

expecting success of 3070.1881 'cleanup after previous file test': 
		if test -e .git/created_test_file
		then
			git reset &&
			git clean -df
		fi
	
Removing actual
Removing actual.err
Removing actual.raw
Removing expect
Removing z
ok 1881 - cleanup after previous file test

expecting success of 3070.1882 'setup match file test for Z': 
		file=$(cat .git/expected_test_file) &&
		if should_create_test_file "$file"
		then
			dirs=${file%/*} &&
			if test "$file" != "$dirs"
			then
				mkdir -p -- "$dirs" &&
				touch -- "./$text"
			else
				touch -- "./$file"
			fi &&
			git add -A &&
			printf "%s" "$file" >.git/created_test_file
		elif test -e .git/created_test_file
		then
			rm .git/created_test_file
		fi
	
ok 1882 - setup match file test for Z

expecting success of 3070.1883 'wildmatch: match 'Z' '[Z-y]'': 
			test-tool wildmatch wildmatch 'Z' '[Z-y]'
		
ok 1883 - wildmatch: match 'Z' '[Z-y]'

expecting success of 3070.1884 'wildmatch (via ls-files): match '[Z-y]' 'Z'': 
				printf '%s' 'Z' >expect &&
				git --glob-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1884 - wildmatch (via ls-files): match '[Z-y]' 'Z'

expecting success of 3070.1885 'iwildmatch: match 'Z' '[Z-y]'': 
			test-tool wildmatch iwildmatch 'Z' '[Z-y]'
		
ok 1885 - iwildmatch: match 'Z' '[Z-y]'

expecting success of 3070.1886 'iwildmatch (via ls-files): match '[Z-y]' 'Z'': 
				printf '%s' 'Z' >expect &&
				git --glob-pathspecs --icase-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1886 - iwildmatch (via ls-files): match '[Z-y]' 'Z'

expecting success of 3070.1887 'pathmatch: match 'Z' '[Z-y]'': 
			test-tool wildmatch pathmatch 'Z' '[Z-y]'
		
ok 1887 - pathmatch: match 'Z' '[Z-y]'

expecting success of 3070.1888 'pathmatch (via ls-files): match '[Z-y]' 'Z'': 
				printf '%s' 'Z' >expect &&
				git ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1888 - pathmatch (via ls-files): match '[Z-y]' 'Z'

expecting success of 3070.1889 'ipathmatch: match 'Z' '[Z-y]'': 
			test-tool wildmatch ipathmatch 'Z' '[Z-y]'
		
ok 1889 - ipathmatch: match 'Z' '[Z-y]'

expecting success of 3070.1890 'ipathmatch (via ls-files): match '[Z-y]' 'Z'': 
				printf '%s' 'Z' >expect &&
				git --icase-pathspecs ls-files -z -- '[Z-y]' >actual.raw 2>actual.err &&
				
		tr -d '\0' <actual.raw >actual &&
		test_must_be_empty actual.err &&
		test_cmp expect actual
			
ok 1890 - ipathmatch (via ls-files): match '[Z-y]' 'Z'

# still have 40 known breakage(s)
# passed all remaining 1850 test(s)
1..1890
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3310-notes-merge-manual-resolve.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3310-notes-merge-manual-resolve/.git/
expecting success of 3310.1 'setup commits': 
	test_commit 1st &&
	test_commit 2nd &&
	test_commit 3rd &&
	test_commit 4th &&
	test_commit 5th &&

	test_oid_cache <<-EOF
	hash04a sha1:6e8e3febca3c2bb896704335cc4d0c34cb2f8715
	hash03a sha1:e5388c10860456ee60673025345fe2e153eb8cf8
	hash02a sha1:ceefa674873670e7ecd131814d909723cce2b669
	hash04b sha1:e2bfd06a37dd2031684a59a6e2b033e212239c78
	hash03b sha1:5772f42408c0dd6f097a7ca2d24de0e78d1c46b1
	hash01b sha1:b0a6021ec006d07e80e9b20ec9b444cbd9d560d3
	hash04c sha1:cff59c793c20bb49a4e01bc06fb06bad642e0d54
	hash02c sha1:283b48219aee9a4105f6cab337e789065c82c2b9
	hash01c sha1:0a81da8956346e19bcb27a906f04af327e03e31b
	hash04d sha1:00494adecf2d9635a02fa431308d67993f853968
	hash01e sha1:f75d1df88cbfe4258d49852f26cfc83f2ad4494b
	hash04f sha1:021faa20e931fb48986ffc6282b4bb05553ac946
	hash01f sha1:0a59e787e6d688aa6309e56e8c1b89431a0fc1c1
	hash05g sha1:304dfb4325cf243025b9957486eb605a9b51c199

	hash04a	sha256:f18a935e65866345098b3b754071dbf9f3aa3520eb27a7b036b278c5e2f1ed7e
	hash03a	sha256:713035dc94067a64e5fa6e4e1821b7c3bde49a77c7cb3f80eaadefa1ca41b3d2
	hash02a	sha256:f160a67e048b6fa75bec3952184154045076692cf5dccd3da21e3fd34b7a3f0f
	hash04b sha256:c7fba0d6104917fbf35258f40b9fa4fc697cfa992deecd1570a3b08d0a5587a9
	hash03b sha256:7287a2d78a3766c181b08df38951d784b08b72a44f571ed6d855bd0be22c70f6
	hash01b sha256:da96cf778c15d0a2bb76f98b2a62f6c9c01730fa7030e8f08ef0191048e7d620
	hash04c sha256:cb615d2def4b834d5f55b2351df97dc92bee4f5009d285201427f349081c8aca
	hash02c sha256:63bb527e0b4e1c8e1dd0d54dd778ca7c3718689fd6e37c473044cfbcf1cacfdb
	hash01c sha256:5b87237ac1fbae0246256fed9f9a1f077c4140fb7e6444925f8dbfa5ae406cd8
	hash04d sha256:eeddc9f9f6cb3d6b39b861659853f10891dc373e0b6eecb09e03e39b6ce64714
	hash01e sha256:108f521b1a74c2e6d0b52a4eda87e09162bf847f7d190cfce496ee1af0b29a5a
	hash04f sha256:901acda0454502b3bbd281f130c419e6c8de78afcf72a8def8d45ad31462bce4
	hash01f sha256:a2d99d1b8bf23c8af7d9d91368454adc110dfd5cc068a4cebb486ee8f5a1e16c
	hash05g sha256:4fef015b01da8efe929a68e3bb9b8fbad81f53995f097befe8ebc93f12ab98ec
	EOF

[master (root-commit) 04ed9a0] 1st
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1st.t
[master 7a4ca6e] 2nd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2nd.t
[master d07d62e] 3rd
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3rd.t
[master 0f7aa3e] 4th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4th.t
[master 7f9ad88] 5th
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5th.t
ok 1 - setup commits

expecting success of 3310.2 'setup merge base (x)': 
	git config core.notesRef refs/notes/x &&
	git notes add -m "x notes on 2nd commit" 2nd &&
	git notes add -m "x notes on 3rd commit" 3rd &&
	git notes add -m "x notes on 4th commit" 4th &&
	verify_notes x

ok 2 - setup merge base (x)

expecting success of 3310.3 'setup local branch (y)': 
	git update-ref refs/notes/y refs/notes/x &&
	git config core.notesRef refs/notes/y &&
	git notes add -f -m "y notes on 1st commit" 1st &&
	git notes remove 2nd &&
	git notes add -f -m "y notes on 3rd commit" 3rd &&
	git notes add -f -m "y notes on 4th commit" 4th &&
	verify_notes y

Removing note for object 2nd
Overwriting existing notes for object d07d62e5208f22eb5695e7eb47667dc8b9860290
Overwriting existing notes for object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
ok 3 - setup local branch (y)

expecting success of 3310.4 'setup remote branch (z)': 
	git update-ref refs/notes/z refs/notes/x &&
	git config core.notesRef refs/notes/z &&
	git notes add -f -m "z notes on 1st commit" 1st &&
	git notes add -f -m "z notes on 2nd commit" 2nd &&
	git notes remove 3rd &&
	git notes add -f -m "z notes on 4th commit" 4th &&
	verify_notes z

Overwriting existing notes for object 7a4ca6ee52a974a66cbaa78e33214535dff1d691
Removing note for object 3rd
Overwriting existing notes for object 0f7aa3ec6325aeb88b910453bb3eb37c49d75c11
ok 4 - setup remote branch (z)

expecting success of 3310.5 'merge z into m (== y) with default ("manual") resolver => Conflicting 3-way merge': 
	git update-ref refs/notes/m refs/notes/y &&
	git config core.notesRef refs/notes/m &&
	test_must_fail git notes merge z >output 2>&1 &&
	# Output should point to where to resolve conflicts
	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
	# Inspect merge conflicts
	ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
	test_cmp expect_conflicts output_conflicts &&
	( for f in $(cat expect_conflicts); do
		test_cmp "expect_conflict_$f" ".git/NOTES_MERGE_WORKTREE/$f" ||
		exit 1
	done ) &&
	# Verify that current notes tree (pre-merge) has not changed (m == y)
	verify_notes y &&
	verify_notes m &&
	test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)"

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
ok 5 - merge z into m (== y) with default ("manual") resolver => Conflicting 3-way merge

expecting success of 3310.6 'change notes in z': 
	git notes --ref z append -m "More z notes on 4th commit" 4th &&
	verify_notes z

ok 6 - change notes in z

expecting success of 3310.7 'cannot do merge w/conflicts when previous merge is unfinished': 
	test -d .git/NOTES_MERGE_WORKTREE &&
	test_must_fail git notes merge z >output 2>&1 &&
	# Output should indicate what is wrong
	test_i18ngrep -q "\\.git/NOTES_MERGE_\\* exists" output

ok 7 - cannot do merge w/conflicts when previous merge is unfinished

expecting success of 3310.8 'setup unrelated notes ref (w)': 
	git config core.notesRef refs/notes/w &&
	git notes add -m "w notes on 1st commit" 1st &&
	git notes add -m "x notes on 2nd commit" 2nd &&
	verify_notes w

ok 8 - setup unrelated notes ref (w)

expecting success of 3310.9 'can do merge without conflicts even if previous merge is unfinished (x => w)': 
	test -d .git/NOTES_MERGE_WORKTREE &&
	git notes merge x &&
	verify_notes w &&
	# Verify that other notes refs has not changed (x and y)
	verify_notes x &&
	verify_notes y

ok 9 - can do merge without conflicts even if previous merge is unfinished (x => w)

expecting success of 3310.10 'do not allow mixing --commit and --abort': 
	test_must_fail git notes merge --commit --abort

error: cannot mix --commit, --abort or -s/--strategy
usage: git notes merge [<options>] <notes-ref>
   or: git notes merge --commit [<options>]
   or: git notes merge --abort [<options>]

General options
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet

Merge options
    -s, --strategy <strategy>
                          resolve notes conflicts using the given strategy (manual/ours/theirs/union/cat_sort_uniq)

Committing unmerged notes
    --commit              finalize notes merge by committing unmerged notes

Aborting notes merge resolution
    --abort               abort notes merge

ok 10 - do not allow mixing --commit and --abort

expecting success of 3310.11 'do not allow mixing --commit and --strategy': 
	test_must_fail git notes merge --commit --strategy theirs

error: cannot mix --commit, --abort or -s/--strategy
usage: git notes merge [<options>] <notes-ref>
   or: git notes merge --commit [<options>]
   or: git notes merge --abort [<options>]

General options
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet

Merge options
    -s, --strategy <strategy>
                          resolve notes conflicts using the given strategy (manual/ours/theirs/union/cat_sort_uniq)

Committing unmerged notes
    --commit              finalize notes merge by committing unmerged notes

Aborting notes merge resolution
    --abort               abort notes merge

ok 11 - do not allow mixing --commit and --strategy

expecting success of 3310.12 'do not allow mixing --abort and --strategy': 
	test_must_fail git notes merge --abort --strategy theirs

error: cannot mix --commit, --abort or -s/--strategy
usage: git notes merge [<options>] <notes-ref>
   or: git notes merge --commit [<options>]
   or: git notes merge --abort [<options>]

General options
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet

Merge options
    -s, --strategy <strategy>
                          resolve notes conflicts using the given strategy (manual/ours/theirs/union/cat_sort_uniq)

Committing unmerged notes
    --commit              finalize notes merge by committing unmerged notes

Aborting notes merge resolution
    --abort               abort notes merge

ok 12 - do not allow mixing --abort and --strategy

expecting success of 3310.13 'finalize conflicting merge (z => m)': 
	# Resolve conflicts and finalize merge
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha1 <<EOF &&
y and z notes on 1st commit
EOF
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha4 <<EOF &&
y and z notes on 4th commit
EOF
	git notes merge --commit &&
	notes_merge_files_gone &&
	# Merge commit has pre-merge y and pre-merge z as parents
	test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
	test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
	# Merge commit mentions the notes refs merged
	git log -1 --format=%B refs/notes/m > merge_commit_msg &&
	grep -q refs/notes/m merge_commit_msg &&
	grep -q refs/notes/z merge_commit_msg &&
	# Merge commit mentions conflicting notes
	grep -q "Conflicts" merge_commit_msg &&
	( for sha1 in $(cat expect_conflicts); do
		grep -q "$sha1" merge_commit_msg ||
		exit 1
	done ) &&
	# Verify contents of merge result
	verify_notes m &&
	# Verify that other notes refs has not changed (w, x, y and z)
	verify_notes w &&
	verify_notes x &&
	verify_notes y &&
	verify_notes z

ok 13 - finalize conflicting merge (z => m)

expecting success of 3310.14 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge': 
	git update-ref refs/notes/m refs/notes/y &&
	git config core.notesRef refs/notes/m &&
	test_must_fail git notes merge z >output 2>&1 &&
	# Output should point to where to resolve conflicts
	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
	# Inspect merge conflicts
	ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
	test_cmp expect_conflicts output_conflicts &&
	( for f in $(cat expect_conflicts); do
		test_cmp "expect_conflict_$f" ".git/NOTES_MERGE_WORKTREE/$f" ||
		exit 1
	done ) &&
	# Verify that current notes tree (pre-merge) has not changed (m == y)
	verify_notes y &&
	verify_notes m &&
	test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)"

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
ok 14 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge

expecting success of 3310.15 'abort notes merge': 
	git notes merge --abort &&
	notes_merge_files_gone &&
	# m has not moved (still == y)
	test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)" &&
	# Verify that other notes refs has not changed (w, x, y and z)
	verify_notes w &&
	verify_notes x &&
	verify_notes y &&
	verify_notes z

ok 15 - abort notes merge

expecting success of 3310.16 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge': 
	test_must_fail git notes merge z >output 2>&1 &&
	# Output should point to where to resolve conflicts
	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
	# Inspect merge conflicts
	ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
	test_cmp expect_conflicts output_conflicts &&
	( for f in $(cat expect_conflicts); do
		test_cmp "expect_conflict_$f" ".git/NOTES_MERGE_WORKTREE/$f" ||
		exit 1
	done ) &&
	# Verify that current notes tree (pre-merge) has not changed (m == y)
	verify_notes y &&
	verify_notes m &&
	test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)"

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
ok 16 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge

expecting success of 3310.17 'add + remove notes in finalized merge (z => m)': 
	# Resolve one conflict
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha1 <<EOF &&
y and z notes on 1st commit
EOF
	# Remove another conflict
	rm .git/NOTES_MERGE_WORKTREE/$commit_sha4 &&
	# Remove a D/F conflict
	rm .git/NOTES_MERGE_WORKTREE/$commit_sha3 &&
	# Add a new note
	echo "new note on 5th commit" > .git/NOTES_MERGE_WORKTREE/$commit_sha5 &&
	# Finalize merge
	git notes merge --commit &&
	notes_merge_files_gone &&
	# Merge commit has pre-merge y and pre-merge z as parents
	test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
	test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
	# Merge commit mentions the notes refs merged
	git log -1 --format=%B refs/notes/m > merge_commit_msg &&
	grep -q refs/notes/m merge_commit_msg &&
	grep -q refs/notes/z merge_commit_msg &&
	# Merge commit mentions conflicting notes
	grep -q "Conflicts" merge_commit_msg &&
	( for sha1 in $(cat expect_conflicts); do
		grep -q "$sha1" merge_commit_msg ||
		exit 1
	done ) &&
	# Verify contents of merge result
	verify_notes m &&
	# Verify that other notes refs has not changed (w, x, y and z)
	verify_notes w &&
	verify_notes x &&
	verify_notes y &&
	verify_notes z

ok 17 - add + remove notes in finalized merge (z => m)

expecting success of 3310.18 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge': 
	git update-ref refs/notes/m refs/notes/y &&
	test_must_fail git notes merge z >output 2>&1 &&
	# Output should point to where to resolve conflicts
	test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
	# Inspect merge conflicts
	ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
	test_cmp expect_conflicts output_conflicts &&
	( for f in $(cat expect_conflicts); do
		test_cmp "expect_conflict_$f" ".git/NOTES_MERGE_WORKTREE/$f" ||
		exit 1
	done ) &&
	# Verify that current notes tree (pre-merge) has not changed (m == y)
	verify_notes y &&
	verify_notes m &&
	test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)"

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
ok 18 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge

expecting success of 3310.19 'reset notes ref m to somewhere else (w)': 
	git update-ref refs/notes/m refs/notes/w &&
	verify_notes m &&
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)"

ok 19 - reset notes ref m to somewhere else (w)

expecting success of 3310.20 'fail to finalize conflicting merge if underlying ref has moved in the meantime (m != NOTES_MERGE_PARTIAL^1)': 
	# Resolve conflicts
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha1 <<EOF &&
y and z notes on 1st commit
EOF
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha4 <<EOF &&
y and z notes on 4th commit
EOF
	# Fail to finalize merge
	test_must_fail git notes merge --commit >output 2>&1 &&
	# .git/NOTES_MERGE_* must remain
	test -f .git/NOTES_MERGE_PARTIAL &&
	test -f .git/NOTES_MERGE_REF &&
	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha1 &&
	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha2 &&
	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha3 &&
	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha4 &&
	# Refs are unchanged
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
	test "$(git rev-parse refs/notes/y)" = "$(git rev-parse NOTES_MERGE_PARTIAL^1)" &&
	test "$(git rev-parse refs/notes/m)" != "$(git rev-parse NOTES_MERGE_PARTIAL^1)" &&
	# Mention refs/notes/m, and its current and expected value in output
	test_i18ngrep -q "refs/notes/m" output &&
	test_i18ngrep -q "$(git rev-parse refs/notes/m)" output &&
	test_i18ngrep -q "$(git rev-parse NOTES_MERGE_PARTIAL^1)" output &&
	# Verify that other notes refs has not changed (w, x, y and z)
	verify_notes w &&
	verify_notes x &&
	verify_notes y &&
	verify_notes z

ok 20 - fail to finalize conflicting merge if underlying ref has moved in the meantime (m != NOTES_MERGE_PARTIAL^1)

expecting success of 3310.21 'resolve situation by aborting the notes merge': 
	git notes merge --abort &&
	notes_merge_files_gone &&
	# m has not moved (still == w)
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
	# Verify that other notes refs has not changed (w, x, y and z)
	verify_notes w &&
	verify_notes x &&
	verify_notes y &&
	verify_notes z

ok 21 - resolve situation by aborting the notes merge

expecting success of 3310.22 'switch cwd before committing notes merge': 
	git notes add -m foo HEAD &&
	git notes --ref=other add -m bar HEAD &&
	test_must_fail git notes merge refs/notes/other &&
	(
		cd .git/NOTES_MERGE_WORKTREE &&
		echo "foo" > $(git rev-parse HEAD) &&
		echo "bar" >> $(git rev-parse HEAD) &&
		git notes merge --commit
	) &&
	git notes show HEAD > actual_notes &&
	test_cmp expect_notes actual_notes

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Auto-merging notes for 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
CONFLICT (add/add): Merge conflict in notes for object 7f9ad8836c775acb134c0a055fc55fb4cd1ba361
ok 22 - switch cwd before committing notes merge

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3320-notes-merge-worktrees.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3320-notes-merge-worktrees/.git/
expecting success of 3320.1 'setup commit': 
	test_commit tantrum

[main (root-commit) 02f8a63] tantrum
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tantrum.t
ok 1 - setup commit

expecting success of 3320.2 'setup notes ref (x)': 
	git config core.notesRef refs/notes/x &&
	git notes add -m "x notes on tantrum" tantrum

ok 2 - setup notes ref (x)

expecting success of 3320.3 'setup local branch (y)': 
	git update-ref refs/notes/y refs/notes/x &&
	git config core.notesRef refs/notes/y &&
	git notes remove tantrum

Removing note for object tantrum
ok 3 - setup local branch (y)

expecting success of 3320.4 'setup remote branch (z)': 
	git update-ref refs/notes/z refs/notes/x &&
	git config core.notesRef refs/notes/z &&
	git notes add -f -m "conflicting notes on tantrum" tantrum

Overwriting existing notes for object 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
ok 4 - setup remote branch (z)

expecting success of 3320.5 'modify notes ref ourselves (x)': 
	git config core.notesRef refs/notes/x &&
	git notes add -f -m "more conflicting notes on tantrum" tantrum

Overwriting existing notes for object 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
ok 5 - modify notes ref ourselves (x)

expecting success of 3320.6 'create some new worktrees': 
	git worktree add -b newbranch worktree main &&
	git worktree add -b newbranch2 worktree2 main

Preparing worktree (new branch 'newbranch')
HEAD is now at 02f8a63 tantrum
Preparing worktree (new branch 'newbranch2')
HEAD is now at 02f8a63 tantrum
ok 6 - create some new worktrees

expecting success of 3320.7 'merge z into y fails and sets NOTES_MERGE_REF': 
	git config core.notesRef refs/notes/y &&
	test_must_fail git notes merge z &&
	echo "refs/notes/y" >expect &&
	git symbolic-ref NOTES_MERGE_REF >actual &&
	test_cmp expect actual

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Auto-merging notes for 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
CONFLICT (delete/modify): Notes for object 02f8a63df5a5eb7863e18dffcbc422a31a01d39e deleted in refs/notes/y and modified in refs/notes/z. Version from refs/notes/z left in tree.
ok 7 - merge z into y fails and sets NOTES_MERGE_REF

expecting success of 3320.8 'merge z into y while mid-merge in another workdir fails': 
	(
		cd worktree &&
		git config core.notesRef refs/notes/y &&
		test_must_fail git notes merge z 2>err &&
		test_i18ngrep "a notes merge into refs/notes/y is already in-progress at" err
	) &&
	test_must_fail git -C worktree symbolic-ref NOTES_MERGE_REF

Auto-merging notes for 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
CONFLICT (delete/modify): Notes for object 02f8a63df5a5eb7863e18dffcbc422a31a01d39e deleted in refs/notes/y and modified in refs/notes/z. Version from refs/notes/z left in tree.
fatal: a notes merge into refs/notes/y is already in-progress at /<<PKGBUILDDIR>>/t/trash directory.t3320-notes-merge-worktrees
fatal: ref NOTES_MERGE_REF is not a symbolic ref
ok 8 - merge z into y while mid-merge in another workdir fails

expecting success of 3320.9 'merge z into x while mid-merge on y succeeds': 
	(
		cd worktree2 &&
		git config core.notesRef refs/notes/x &&
		test_must_fail git notes merge z >out 2>&1 &&
		test_i18ngrep "Automatic notes merge failed" out &&
		grep -v "A notes merge into refs/notes/x is already in-progress in" out
	) &&
	echo "refs/notes/x" >expect &&
	git -C worktree2 symbolic-ref NOTES_MERGE_REF >actual &&
	test_cmp expect actual

Automatic notes merge failed. Fix conflicts in /<<PKGBUILDDIR>>/t/trash directory.t3320-notes-merge-worktrees/.git/worktrees/worktree2/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Automatic notes merge failed. Fix conflicts in /<<PKGBUILDDIR>>/t/trash directory.t3320-notes-merge-worktrees/.git/worktrees/worktree2/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Auto-merging notes for 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
CONFLICT (content): Merge conflict in notes for object 02f8a63df5a5eb7863e18dffcbc422a31a01d39e
ok 9 - merge z into x while mid-merge on y succeeds

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3303-notes-subtrees.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3303-notes-subtrees/.git/
expecting success of 3303.1 'setup: create 100 commits': 

	(
		nr=0 &&
		while [ $nr -lt $number_of_commits ]; do
			nr=$(($nr+1)) &&
			test_tick &&
			cat <<INPUT_END || return 1
commit refs/heads/main
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
commit #$nr
COMMIT

M 644 inline file
data <<EOF
file in commit #$nr
EOF

INPUT_END

		done &&
		test_tick &&
		cat <<INPUT_END
commit refs/notes/commits
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
data <<COMMIT
no notes
COMMIT

deleteall

INPUT_END

	) |
	git fast-import --quiet &&
	git config core.notesRef refs/notes/commits

ok 1 - setup: create 100 commits

expecting success of 3303.2 'test notes in 2/38-fanout': test_sha1_based "s|^..|&/|"
ok 2 - test notes in 2/38-fanout

expecting success of 3303.3 'verify notes in 2/38-fanout': verify_notes
ok 3 - verify notes in 2/38-fanout

expecting success of 3303.4 'test notes in 2/2/36-fanout': test_sha1_based "s|^\(..\)\(..\)|\1/\2/|"
ok 4 - test notes in 2/2/36-fanout

expecting success of 3303.5 'verify notes in 2/2/36-fanout': verify_notes
ok 5 - verify notes in 2/2/36-fanout

expecting success of 3303.6 'test notes in 2/2/2/34-fanout': test_sha1_based "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|"
ok 6 - test notes in 2/2/2/34-fanout

expecting success of 3303.7 'verify notes in 2/2/2/34-fanout': verify_notes
ok 7 - verify notes in 2/2/2/34-fanout

expecting success of 3303.8 'test same notes in no fanout and 2/38-fanout': test_same_notes "s|^..|&/|" ""
ok 8 - test same notes in no fanout and 2/38-fanout

expecting success of 3303.9 'verify same notes in no fanout and 2/38-fanout': verify_notes
ok 9 - verify same notes in no fanout and 2/38-fanout

expecting success of 3303.10 'test same notes in no fanout and 2/2/36-fanout': test_same_notes "s|^\(..\)\(..\)|\1/\2/|" ""
ok 10 - test same notes in no fanout and 2/2/36-fanout

expecting success of 3303.11 'verify same notes in no fanout and 2/2/36-fanout': verify_notes
ok 11 - verify same notes in no fanout and 2/2/36-fanout

expecting success of 3303.12 'test same notes in 2/38-fanout and 2/2/36-fanout': test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"
ok 12 - test same notes in 2/38-fanout and 2/2/36-fanout

expecting success of 3303.13 'verify same notes in 2/38-fanout and 2/2/36-fanout': verify_notes
ok 13 - verify same notes in 2/38-fanout and 2/2/36-fanout

expecting success of 3303.14 'test same notes in 2/2/2/34-fanout and 2/2/36-fanout': test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|"
ok 14 - test same notes in 2/2/2/34-fanout and 2/2/36-fanout

expecting success of 3303.15 'verify same notes in 2/2/2/34-fanout and 2/2/36-fanout': verify_notes
ok 15 - verify same notes in 2/2/2/34-fanout and 2/2/36-fanout

expecting success of 3303.16 'test notes in no fanout concatenated with 2/38-fanout': test_concatenated_notes "s|^..|&/|" ""
ok 16 - test notes in no fanout concatenated with 2/38-fanout

expecting success of 3303.17 'verify notes in no fanout concatenated with 2/38-fanout': verify_concatenated_notes
ok 17 - verify notes in no fanout concatenated with 2/38-fanout

expecting success of 3303.18 'test notes in no fanout concatenated with 2/2/36-fanout': test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" ""
ok 18 - test notes in no fanout concatenated with 2/2/36-fanout

expecting success of 3303.19 'verify notes in no fanout concatenated with 2/2/36-fanout': verify_concatenated_notes
ok 19 - verify notes in no fanout concatenated with 2/2/36-fanout

expecting success of 3303.20 'test notes in 2/38-fanout concatenated with 2/2/36-fanout': test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"
ok 20 - test notes in 2/38-fanout concatenated with 2/2/36-fanout

expecting success of 3303.21 'verify notes in 2/38-fanout concatenated with 2/2/36-fanout': verify_concatenated_notes
ok 21 - verify notes in 2/38-fanout concatenated with 2/2/36-fanout

expecting success of 3303.22 'test notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout': test_concatenated_notes "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|" "s|^\(..\)\(..\)|\1/\2/|"
ok 22 - test notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout

expecting success of 3303.23 'verify notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout': verify_concatenated_notes
ok 23 - verify notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3401-rebase-and-am-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3401-rebase-and-am-rename/.git/
expecting success of 3401.1 'setup testcase where directory rename should be detected': 
	test_create_repo dir-rename &&
	(
		cd dir-rename &&

		mkdir x &&
		test_seq  1 10 >x/a &&
		test_seq 11 20 >x/b &&
		test_seq 21 30 >x/c &&
		test_write_lines a b c d e f g h i >l &&
		git add x l &&
		git commit -m "Initial" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		git mv x y &&
		git mv l letters &&
		git commit -m "Rename x to y, l to letters" &&

		git checkout B &&
		echo j >>l &&
		test_seq 31 40 >x/d &&
		git add l x/d &&
		git commit -m "Modify l, add x/d"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3401-rebase-and-am-rename/dir-rename/.git/
[master (root-commit) 79c153a] Initial
 Author: A U Thor <author@example.com>
 4 files changed, 39 insertions(+)
 create mode 100644 l
 create mode 100644 x/a
 create mode 100644 x/b
 create mode 100644 x/c
Switched to branch 'A'
[A cc01e42] Rename x to y, l to letters
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 rename l => letters (100%)
 rename {x => y}/a (100%)
 rename {x => y}/b (100%)
 rename {x => y}/c (100%)
Switched to branch 'B'
[B 6c5e67f] Modify l, add x/d
 Author: A U Thor <author@example.com>
 2 files changed, 11 insertions(+)
 create mode 100644 x/d
ok 1 - setup testcase where directory rename should be detected

expecting success of 3401.2 'rebase --interactive: directory rename detected': 
	(
		cd dir-rename &&

		git checkout B^0 &&

		set_fake_editor &&
		FAKE_LINES="1" git -c merge.directoryRenames=true rebase --interactive A &&

		git ls-files -s >out &&
		test_line_count = 5 out &&

		test_path_is_file y/d &&
		test_path_is_missing x/d
	)

Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6c5e67f Modify l, add x/d
rebase -i script before editing:
pick 6c5e67f Modify l, add x/d

rebase -i script after editing:
pick 6c5e67f Modify l, add x/d
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 2 - rebase --interactive: directory rename detected

checking known breakage of 3401.3 'rebase --apply: directory rename detected': 
	(
		cd dir-rename &&

		git checkout B^0 &&

		git -c merge.directoryRenames=true rebase --apply A &&

		git ls-files -s >out &&
		test_line_count = 5 out &&

		test_path_is_file y/d &&
		test_path_is_missing x/d
	)

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2e986bc Modify l, add x/d

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2e986bc

HEAD is now at 6c5e67f Modify l, add x/d
First, rewinding head to replay your work on top of it...
Applying: Modify l, add x/d
Using index info to reconstruct a base tree...
A	l
Falling back to patching base and 3-way merge...
Merging:
cc01e42 Rename x to y, l to letters
virtual Modify l, add x/d
found 1 common ancestor:
virtual 4f45812d96b9febe1d7595b91de345b0a05fb0d4
File y/d doesn't exist
not ok 3 - rebase --apply: directory rename detected # TODO known breakage

expecting success of 3401.4 'rebase --merge: directory rename detected': 
	(
		cd dir-rename &&

		git checkout B^0 &&

		git -c merge.directoryRenames=true rebase --merge A &&

		git ls-files -s >out &&
		test_line_count = 5 out &&

		test_path_is_file y/d &&
		test_path_is_missing x/d
	)

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7f699cd Modify l, add x/d

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7f699cd

HEAD is now at 6c5e67f Modify l, add x/d
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 4 - rebase --merge: directory rename detected

checking known breakage of 3401.5 'am: directory rename detected': 
	(
		cd dir-rename &&

		git checkout A^0 &&

		git format-patch -1 B &&

		git -c merge.directoryRenames=true am --3way 0001*.patch &&

		git ls-files -s >out &&
		test_line_count = 5 out &&

		test_path_is_file y/d &&
		test_path_is_missing x/d
	)

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2e986bc Modify l, add x/d

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2e986bc

HEAD is now at cc01e42 Rename x to y, l to letters
0001-Modify-l-add-x-d.patch
Applying: Modify l, add x/d
Using index info to reconstruct a base tree...
A	l
Falling back to patching base and 3-way merge...
Merging:
cc01e42 Rename x to y, l to letters
virtual Modify l, add x/d
found 1 common ancestor:
virtual 4f45812d96b9febe1d7595b91de345b0a05fb0d4
File y/d doesn't exist
not ok 5 - am: directory rename detected # TODO known breakage

expecting success of 3401.6 'setup testcase where directory rename should NOT be detected': 
	test_create_repo no-dir-rename &&
	(
		cd no-dir-rename &&

		mkdir x &&
		test_seq  1 10 >x/a &&
		test_seq 11 20 >x/b &&
		test_seq 21 30 >x/c &&
		echo original >project_info &&
		git add x project_info &&
		git commit -m "Initial" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		echo v2 >project_info &&
		git add project_info &&
		git commit -m "Modify project_info" &&

		git checkout B &&
		mkdir y &&
		git mv x/c y/c &&
		echo v1 >project_info &&
		git add project_info &&
		git commit -m "Rename x/c to y/c, modify project_info"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3401-rebase-and-am-rename/no-dir-rename/.git/
[master (root-commit) 229b7b2] Initial
 Author: A U Thor <author@example.com>
 4 files changed, 31 insertions(+)
 create mode 100644 project_info
 create mode 100644 x/a
 create mode 100644 x/b
 create mode 100644 x/c
Switched to branch 'A'
[A 5e95ce3] Modify project_info
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'B'
[B 1f2a3f5] Rename x/c to y/c, modify project_info
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename {x => y}/c (100%)
ok 6 - setup testcase where directory rename should NOT be detected

expecting success of 3401.7 'rebase --interactive: NO directory rename': 
	test_when_finished "git -C no-dir-rename rebase --abort" &&
	(
		cd no-dir-rename &&

		git checkout B^0 &&

		set_fake_editor &&
		test_must_fail env FAKE_LINES="1" git rebase --interactive A &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		test_path_is_file x/a &&
		test_path_is_file x/b &&
		test_path_is_missing x/c
	)

Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1f2a3f5 Rename x/c to y/c, modify project_info
rebase -i script before editing:
pick 1f2a3f5 Rename x/c to y/c, modify project_info

rebase -i script after editing:
pick 1f2a3f5 Rename x/c to y/c, modify project_info
Rebasing (1/1)
Auto-merging project_info
CONFLICT (content): Merge conflict in project_info
error: could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
ok 7 - rebase --interactive: NO directory rename

expecting success of 3401.8 'rebase (am): NO directory rename': 
	test_when_finished "git -C no-dir-rename rebase --abort" &&
	(
		cd no-dir-rename &&

		git checkout B^0 &&

		set_fake_editor &&
		test_must_fail git rebase A &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		test_path_is_file x/a &&
		test_path_is_file x/b &&
		test_path_is_missing x/c
	)

HEAD is now at 1f2a3f5 Rename x/c to y/c, modify project_info
Rebasing (1/1)
Auto-merging project_info
CONFLICT (content): Merge conflict in project_info
error: could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
ok 8 - rebase (am): NO directory rename

expecting success of 3401.9 'rebase --merge: NO directory rename': 
	test_when_finished "git -C no-dir-rename rebase --abort" &&
	(
		cd no-dir-rename &&

		git checkout B^0 &&

		set_fake_editor &&
		test_must_fail git rebase --merge A &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		test_path_is_file x/a &&
		test_path_is_file x/b &&
		test_path_is_missing x/c
	)

HEAD is now at 1f2a3f5 Rename x/c to y/c, modify project_info
Rebasing (1/1)
Auto-merging project_info
CONFLICT (content): Merge conflict in project_info
error: could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1f2a3f5... Rename x/c to y/c, modify project_info
ok 9 - rebase --merge: NO directory rename

expecting success of 3401.10 'am: NO directory rename': 
	test_when_finished "git -C no-dir-rename am --abort" &&
	(
		cd no-dir-rename &&

		git checkout A^0 &&

		git format-patch -1 B &&

		test_must_fail git am --3way 0001*.patch &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		test_path_is_file x/a &&
		test_path_is_file x/b &&
		test_path_is_missing x/c
	)

Previous HEAD position was 1f2a3f5 Rename x/c to y/c, modify project_info
HEAD is now at 5e95ce3 Modify project_info
0001-Rename-x-c-to-y-c-modify-project_info.patch
Applying: Rename x/c to y/c, modify project_info
Using index info to reconstruct a base tree...
M	project_info
Falling back to patching base and 3-way merge...
Merging:
5e95ce3 Modify project_info
virtual Rename x/c to y/c, modify project_info
found 1 common ancestor:
virtual 70041a03917eeabc905137ab5853aed716a92bc6
Auto-merging project_info
CONFLICT (content): Merge conflict in project_info
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Rename x/c to y/c, modify project_info
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 10 - am: NO directory rename

# still have 2 known breakage(s)
# passed all remaining 8 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3402-rebase-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3402-rebase-merge/.git/
expecting success of 3402.1 'setup': 
	git add original &&
	git commit -m"initial" &&
	git branch side &&
	echo "11 $T" >>original &&
	git commit -a -m"main updates a bit." &&

	echo "12 $T" >>original &&
	git commit -a -m"main updates a bit more." &&

	git checkout side &&
	(echo "0 $T" && cat original) >renamed &&
	git add renamed &&
	git update-index --force-remove original &&
	git commit -a -m"side renames and edits." &&

	tr "[a-z]" "[A-Z]" <original >newfile &&
	git add newfile &&
	git commit -a -m"side edits further." &&
	git branch second-side &&

	tr "[a-m]" "[A-M]" <original >newfile &&
	rm -f original &&
	git commit -a -m"side edits once again." &&

	git branch test-rebase side &&
	git branch test-rebase-pick side &&
	git branch test-reference-pick side &&
	git branch test-conflicts side &&
	git checkout -b test-merge side

[main (root-commit) ea140ad] initial
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+)
 create mode 100644 original
[main 3fbedc5] main updates a bit.
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[main 9d5d029] main updates a bit more.
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'side'
[side 2f3019a] side renames and edits.
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename original => renamed (90%)
[side e99fe16] side edits further.
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+)
 create mode 100644 newfile
[side 5203c39] side edits once again.
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+), 20 deletions(-)
Switched to a new branch 'test-merge'
ok 1 - setup

expecting success of 3402.2 'reference merge': 
	git merge -s recursive -m "reference merge" main

Auto-merging renamed
Merge made by the 'ort' strategy.
 renamed | 4 ++++
 1 file changed, 4 insertions(+)
ok 2 - reference merge

expecting success of 3402.3 'rebase': 
	git checkout test-rebase &&
	GIT_TRACE=1 git rebase --merge main

Switched to branch 'test-rebase'
trace: built-in: git rebase --merge main
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)
trace: run_command: git notes copy --for-rewrite=rebase
trace: built-in: git notes copy --for-rewrite=rebase

                                                                                
Successfully rebased and updated refs/heads/test-rebase.
ok 3 - rebase

expecting success of 3402.4 'test-rebase@{1} is pre rebase': 
	test $PRE_REBASE = $(git rev-parse test-rebase@{1})

ok 4 - test-rebase@{1} is pre rebase

expecting success of 3402.5 'merge and rebase should match': 
	git diff-tree -r test-rebase test-merge >difference &&
	if test -s difference
	then
		cat difference
		false
	else
		echo happy
	fi

happy
ok 5 - merge and rebase should match

expecting success of 3402.6 'rebase the other way': 
	git reset --hard main &&
	git rebase --merge side

HEAD is now at 9d5d029 main updates a bit more.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test-rebase.
ok 6 - rebase the other way

expecting success of 3402.7 'rebase -Xtheirs': 
	git checkout -b conflicting main~2 &&
	echo "AB $T" >> original &&
	git commit -mconflicting original &&
	git rebase -Xtheirs main &&
	grep AB original &&
	! grep 11 original

Switched to a new branch 'conflicting'
[conflicting 0a8644e] conflicting
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/conflicting.
AB A quick brown fox
ok 7 - rebase -Xtheirs

expecting success of 3402.8 'rebase -Xtheirs from orphan': 
	git checkout --orphan orphan-conflicting main~2 &&
	echo "AB $T" >> original &&
	git commit -morphan-conflicting original &&
	git rebase -Xtheirs main &&
	grep AB original &&
	! grep 11 original

Switched to a new branch 'orphan-conflicting'
[orphan-conflicting (root-commit) 9b6ca42] orphan-conflicting
 Author: A U Thor <author@example.com>
 1 file changed, 22 insertions(+)
 create mode 100644 original
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/orphan-conflicting.
AB A quick brown fox
ok 8 - rebase -Xtheirs from orphan

expecting success of 3402.9 'merge and rebase should match': 
	git diff-tree -r test-rebase test-merge >difference &&
	if test -s difference
	then
		cat difference
		false
	else
		echo happy
	fi

happy
ok 9 - merge and rebase should match

expecting success of 3402.10 'picking rebase': 
	git reset --hard side &&
	git rebase --merge --onto main side^^ &&
	mb=$(git merge-base main HEAD) &&
	if test "$mb" = "$(git rev-parse main)"
	then
		echo happy
	else
		git show-branch
		false
	fi &&
	f=$(git diff-tree --name-only HEAD^ HEAD) &&
	g=$(git diff-tree --name-only HEAD^^ HEAD^) &&
	case "$f,$g" in
	newfile,newfile)
		echo happy ;;
	*)
		echo "$f"
		echo "$g"
		false
	esac

HEAD is now at 5203c39 side edits once again.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/orphan-conflicting.
happy
happy
ok 10 - picking rebase

expecting success of 3402.11 'rebase -s funny -Xopt': 
	test_when_finished "rm -fr test-bin funny.was.run" &&
	mkdir test-bin &&
	cat >test-bin/git-merge-funny <<-EOF &&
	#!$SHELL_PATH
	case "\$1" in --opt) ;; *) exit 2 ;; esac
	shift &&
	>funny.was.run &&
	exec git merge-recursive "\$@"
	EOF
	chmod +x test-bin/git-merge-funny &&
	git reset --hard &&
	git checkout -b test-funny main^ &&
	test_commit funny &&
	(
		PATH=./test-bin:$PATH &&
		git rebase -s funny -Xopt main
	) &&
	test -f funny.was.run

HEAD is now at c6a3604 side edits once again.
Switched to a new branch 'test-funny'
[test-funny 3e859a0] funny
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 funny.t
Rebasing (1/1)
Merging 9d5d0292f991670abc6efc3f67fe41ebfaa0ea9b with 3e859a016484dfe902e88263b0829401bb2256df
Merging:
9d5d029 main updates a bit more.
3e859a0 funny
found 1 common ancestor:
3fbedc5 main updates a bit.

                                                                                
Successfully rebased and updated refs/heads/test-funny.
ok 11 - rebase -s funny -Xopt

expecting success of 3402.12 'rebase --skip works with two conflicts in a row': 
	git checkout second-side  &&
	tr "[A-Z]" "[a-z]" <newfile >tmp &&
	mv tmp newfile &&
	git commit -a -m"edit conflicting with side" &&
	tr "[d-f]" "[D-F]" <newfile >tmp &&
	mv tmp newfile &&
	git commit -a -m"another edit conflicting with side" &&
	test_must_fail git rebase --merge test-conflicts &&
	test_must_fail git rebase --skip &&
	git rebase --skip

Switched to branch 'second-side'
[second-side 9ce8800] edit conflicting with side
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+), 20 deletions(-)
[second-side 821c677] another edit conflicting with side
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+), 20 deletions(-)
Rebasing (1/2)
Auto-merging newfile
CONFLICT (content): Merge conflict in newfile
error: could not apply 9ce8800... edit conflicting with side
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 9ce8800... edit conflicting with side
Rebasing (2/2)
Auto-merging newfile
CONFLICT (content): Merge conflict in newfile
error: could not apply 821c677... another edit conflicting with side
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 821c677... another edit conflicting with side

                                                                                
Successfully rebased and updated refs/heads/second-side.
ok 12 - rebase --skip works with two conflicts in a row

expecting success of 3402.13 '--reapply-cherry-picks': 
	git init repo &&

	# O(1-10) -- O(1-11) -- O(0-10) main
	#        \
	#         -- O(1-11) -- O(1-12) otherbranch

	printf "Line %d\n" $(test_seq 1 10) >repo/file.txt &&
	git -C repo add file.txt &&
	git -C repo commit -m "base commit" &&

	printf "Line %d\n" $(test_seq 1 11) >repo/file.txt &&
	git -C repo commit -a -m "add 11" &&

	printf "Line %d\n" $(test_seq 0 10) >repo/file.txt &&
	git -C repo commit -a -m "add 0 delete 11" &&

	git -C repo checkout -b otherbranch HEAD^^ &&
	printf "Line %d\n" $(test_seq 1 11) >repo/file.txt &&
	git -C repo commit -a -m "add 11 in another branch" &&

	printf "Line %d\n" $(test_seq 1 12) >repo/file.txt &&
	git -C repo commit -a -m "add 12 in another branch" &&

	# Regular rebase fails, because the 1-11 commit is deduplicated
	test_must_fail git -C repo rebase --merge main 2> err &&
	test_i18ngrep "error: could not apply.*add 12 in another branch" err &&
	git -C repo rebase --abort &&

	# With --reapply-cherry-picks, it works
	git -C repo rebase --merge --reapply-cherry-picks main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3402-rebase-merge/repo/.git/
[main (root-commit) b8e39df] base commit
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 file.txt
[main 8299f6d] add 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 1bb0804] add 0 delete 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'otherbranch'
[otherbranch 0c54cd5] add 11 in another branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[otherbranch e97b80f] add 12 in another branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Rebasing (1/1)
error: could not apply e97b80f... add 12 in another branch
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/otherbranch.
ok 13 - --reapply-cherry-picks

expecting success of 3402.14 '--reapply-cherry-picks refrains from reading unneeded blobs': 
	git init server &&

	# O(1-10) -- O(1-11) -- O(1-12) main
	#        \
	#         -- O(0-10) otherbranch

	printf "Line %d\n" $(test_seq 1 10) >server/file.txt &&
	git -C server add file.txt &&
	git -C server commit -m "merge base" &&

	printf "Line %d\n" $(test_seq 1 11) >server/file.txt &&
	git -C server commit -a -m "add 11" &&

	printf "Line %d\n" $(test_seq 1 12) >server/file.txt &&
	git -C server commit -a -m "add 12" &&

	git -C server checkout -b otherbranch HEAD^^ &&
	printf "Line %d\n" $(test_seq 0 10) >server/file.txt &&
	git -C server commit -a -m "add 0" &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&

	git clone --filter=blob:none "file://$(pwd)/server" client &&
	git -C client checkout origin/main &&
	git -C client checkout origin/otherbranch &&

	# Sanity check to ensure that the blobs from the merge base and "add
	# 11" are missing
	git -C client rev-list --objects --all --missing=print >missing_list &&
	MERGE_BASE_BLOB=$(git -C server rev-parse main^^:file.txt) &&
	ADD_11_BLOB=$(git -C server rev-parse main^:file.txt) &&
	grep "[?]$MERGE_BASE_BLOB" missing_list &&
	grep "[?]$ADD_11_BLOB" missing_list &&

	git -C client rebase --merge --reapply-cherry-picks origin/main &&

	# The blob from the merge base had to be fetched, but not "add 11"
	git -C client rev-list --objects --all --missing=print >missing_list &&
	! grep "[?]$MERGE_BASE_BLOB" missing_list &&
	grep "[?]$ADD_11_BLOB" missing_list

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3402-rebase-merge/server/.git/
[main (root-commit) 1995021] merge base
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 file.txt
[main 75d8da0] add 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main a380afa] add 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'otherbranch'
[otherbranch d365b26] add 0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Cloning into 'client'...
Note: switching to 'origin/main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at a380afa add 12
Previous HEAD position was a380afa add 12
HEAD is now at d365b26 add 0
?00935f183cbd9243998bd3f84ac67e18eff726a4
?8bf8891e216480d36945027a1d30bdbba5c96d90
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
?8bf8891e216480d36945027a1d30bdbba5c96d90
ok 14 - --reapply-cherry-picks refrains from reading unneeded blobs

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3400-rebase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3400-rebase/.git/
expecting success of 3400.1 'prepare repository with topic branches': 
	test_commit "Add A." A First First &&
	git checkout -b force-3way &&
	echo Dummy >Y &&
	git update-index --add Y &&
	git commit -m "Add Y." &&
	git checkout -b filemove &&
	git reset --soft main &&
	mkdir D &&
	git mv A D/A &&
	git commit -m "Move A." &&
	git checkout -b my-topic-branch main &&
	test_commit "Add B." B Second Second &&
	git checkout -f main &&
	echo Third >>A &&
	git update-index A &&
	git commit -m "Modify A." &&
	git checkout -b side my-topic-branch &&
	echo Side >>C &&
	git add C &&
	git commit -m "Add C" &&
	git checkout -f my-topic-branch &&
	git tag topic

[main (root-commit) fefbb15] Add A.
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 A
Switched to a new branch 'force-3way'
[force-3way 779feee] Add Y.
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 Y
Switched to a new branch 'filemove'
[filemove 4b62ea1] Move A.
 Author: author@name <bogus@email@address>
 2 files changed, 1 insertion(+)
 rename A => D/A (100%)
 create mode 100644 Y
Switched to a new branch 'my-topic-branch'
[my-topic-branch 5d79b4b] Add B.
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 B
Switched to branch 'main'
[main 79095e6] Modify A.
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
Switched to a new branch 'side'
[side af81839] Add C
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 C
Switched to branch 'my-topic-branch'
ok 1 - prepare repository with topic branches

expecting success of 3400.2 'rebase on dirty worktree': 
	echo dirty >>A &&
	test_must_fail git rebase main

error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
ok 2 - rebase on dirty worktree

expecting success of 3400.3 'rebase on dirty cache': 
	git add A &&
	test_must_fail git rebase main

error: cannot rebase: Your index contains uncommitted changes.
error: Please commit or stash them.
ok 3 - rebase on dirty cache

expecting success of 3400.4 'rebase against main': 
	git reset --hard HEAD &&
	git rebase main

HEAD is now at 5d79b4b Add B.
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/my-topic-branch.
ok 4 - rebase against main

expecting success of 3400.5 'rebase sets ORIG_HEAD to pre-rebase state': 
	git checkout -b orig-head topic &&
	pre="$(git rev-parse --verify HEAD)" &&
	git rebase main &&
	test_cmp_rev "$pre" ORIG_HEAD &&
	test_cmp_rev ! "$pre" HEAD

Switched to a new branch 'orig-head'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/orig-head.
ok 5 - rebase sets ORIG_HEAD to pre-rebase state

expecting success of 3400.6 'rebase, with <onto> and <upstream> specified as :/quuxery': 
	test_when_finished "git branch -D torebase" &&
	git checkout -b torebase my-topic-branch^ &&
	upstream=$(git rev-parse ":/Add B") &&
	onto=$(git rev-parse ":/Add A") &&
	git rebase --onto $onto $upstream &&
	git reset --hard my-topic-branch^ &&
	git rebase --onto ":/Add A" ":/Add B" &&
	git checkout my-topic-branch

Switched to a new branch 'torebase'
Current branch torebase is up to date.
HEAD is now at 79095e6 Modify A.
Current branch torebase is up to date.
Switched to branch 'my-topic-branch'
Deleted branch torebase (was 79095e6).
ok 6 - rebase, with <onto> and <upstream> specified as :/quuxery

expecting success of 3400.7 'the rebase operation should not have destroyed author information': 
	! (git log | grep "Author:" | grep "<>")

ok 7 - the rebase operation should not have destroyed author information

expecting success of 3400.8 'the rebase operation should not have destroyed author information (2)': 
	git log -1 |
	grep 'Author: author@name <bogus@email@address>'

Author: author@name <bogus@email@address>
ok 8 - the rebase operation should not have destroyed author information (2)

expecting success of 3400.9 'HEAD was detached during rebase': 
	test $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1})

ok 9 - HEAD was detached during rebase

expecting success of 3400.10 'rebase from ambiguous branch name': 
	git checkout -b topic side &&
	git rebase main

Switched to a new branch 'topic'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 10 - rebase from ambiguous branch name

expecting success of 3400.11 'rebase off of the previous branch using "-"': 
	git checkout main &&
	git checkout HEAD^ &&
	git rebase @{-1} >expect.messages &&
	git merge-base main HEAD >expect.forkpoint &&

	git checkout main &&
	git checkout HEAD^ &&
	git rebase - >actual.messages &&
	git merge-base main HEAD >actual.forkpoint &&

	test_cmp expect.forkpoint actual.forkpoint &&
	# the next one is dubious---we may want to say "-",
	# instead of @{-1}, in the message
	test_cmp expect.messages actual.messages

Switched to branch 'main'
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fefbb15 Add A.

                                                                                
Successfully rebased and updated detached HEAD.
Switched to branch 'main'
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fefbb15 Add A.

                                                                                
Successfully rebased and updated detached HEAD.
ok 11 - rebase off of the previous branch using "-"

expecting success of 3400.12 'rebase a single mode change': 
	git checkout main &&
	git branch -D topic &&
	echo 1 >X &&
	git add X &&
	test_tick &&
	git commit -m prepare &&
	git checkout -b modechange HEAD^ &&
	echo 1 >X &&
	git add X &&
	test_chmod +x A &&
	test_tick &&
	git commit -m modechange &&
	GIT_TRACE=1 git rebase main

Switched to branch 'main'
Deleted branch topic (was 93c5c54).
[main 1fb901f] prepare
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 X
Switched to a new branch 'modechange'
[modechange 0e9b7fa] modechange
 Author: author@name <bogus@email@address>
 2 files changed, 1 insertion(+)
 mode change 100644 => 100755 A
 create mode 100644 X
trace: built-in: git rebase main
Rebasing (1/1)
trace: run_command: git notes copy --for-rewrite=rebase
trace: built-in: git notes copy --for-rewrite=rebase

                                                                                
Successfully rebased and updated refs/heads/modechange.
ok 12 - rebase a single mode change

expecting success of 3400.13 'rebase is not broken by diff.renames': 
	test_config diff.renames copies &&
	git checkout filemove &&
	GIT_TRACE=1 git rebase force-3way

Switched to branch 'filemove'
trace: built-in: git rebase force-3way
Rebasing (1/1)
trace: run_command: git notes copy --for-rewrite=rebase
trace: built-in: git notes copy --for-rewrite=rebase

                                                                                
Successfully rebased and updated refs/heads/filemove.
ok 13 - rebase is not broken by diff.renames

expecting success of 3400.14 'setup: recover': 
	test_might_fail git rebase --abort &&
	git reset --hard &&
	git checkout modechange

fatal: No rebase in progress?
HEAD is now at 6359119 Move A.
Switched to branch 'modechange'
ok 14 - setup: recover

expecting success of 3400.15 'Show verbose error when HEAD could not be detached': 
	>B &&
	test_when_finished "rm -f B" &&
	test_must_fail git rebase topic 2>output.err >output.out &&
	test_i18ngrep "The following untracked working tree files would be overwritten by checkout:" output.err &&
	test_i18ngrep B output.err

error: The following untracked working tree files would be overwritten by checkout:
	B
ok 15 - Show verbose error when HEAD could not be detached

expecting success of 3400.16 'fail when upstream arg is missing and not on branch': 
	git checkout topic &&
	test_must_fail git rebase

Note: switching to 'topic'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5d79b4b Add B.
You are not currently on a branch.
Please specify which branch you want to rebase against.
See git-rebase(1) for details.

    git rebase '<branch>'

ok 16 - fail when upstream arg is missing and not on branch

expecting success of 3400.17 'fail when upstream arg is missing and not configured': 
	git checkout -b no-config topic &&
	test_must_fail git rebase

Switched to a new branch 'no-config'
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-rebase(1) for details.

    git rebase '<branch>'

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> no-config

ok 17 - fail when upstream arg is missing and not configured

expecting success of 3400.18 'rebase works with format.useAutoBase': 
	test_config format.useAutoBase true &&
	git checkout topic &&
	git rebase main

Note: switching to 'topic'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5d79b4b Add B.
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 18 - rebase works with format.useAutoBase

expecting success of 3400.19 'default to common base in @{upstream}s reflog if no upstream arg (--merge)': 
	git checkout -b default-base main &&
	git checkout -b default topic &&
	git config branch.default.remote . &&
	git config branch.default.merge refs/heads/default-base &&
	git rebase --merge &&
	git rev-parse --verify default-base >expect &&
	git rev-parse default~1 >actual &&
	test_cmp expect actual &&
	git checkout default-base &&
	git reset --hard HEAD^ &&
	git checkout default &&
	git rebase --merge &&
	git rev-parse --verify default-base >expect &&
	git rev-parse default~1 >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b86b84f Add B.

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> b86b84f

Switched to a new branch 'default-base'
Switched to a new branch 'default'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/default.
Switched to branch 'default-base'
HEAD is now at 79095e6 Modify A.
Switched to branch 'default'
Your branch is ahead of 'default-base' by 2 commits.
  (use "git push" to publish your local commits)
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/default.
ok 19 - default to common base in @{upstream}s reflog if no upstream arg (--merge)

expecting success of 3400.20 'default to common base in @{upstream}s reflog if no upstream arg (--apply)': 
	git checkout -B default-base main &&
	git checkout -B default topic &&
	git config branch.default.remote . &&
	git config branch.default.merge refs/heads/default-base &&
	git rebase --apply &&
	git rev-parse --verify default-base >expect &&
	git rev-parse default~1 >actual &&
	test_cmp expect actual &&
	git checkout default-base &&
	git reset --hard HEAD^ &&
	git checkout default &&
	git rebase --apply &&
	git rev-parse --verify default-base >expect &&
	git rev-parse default~1 >actual &&
	test_cmp expect actual

Switched to and reset branch 'default-base'
Switched to and reset branch 'default'
Your branch and 'default-base' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
First, rewinding head to replay your work on top of it...
Applying: Add B.
Switched to branch 'default-base'
HEAD is now at 79095e6 Modify A.
Switched to branch 'default'
Your branch is ahead of 'default-base' by 2 commits.
  (use "git push" to publish your local commits)
First, rewinding head to replay your work on top of it...
Applying: Add B.
ok 20 - default to common base in @{upstream}s reflog if no upstream arg (--apply)

expecting success of 3400.21 'cherry-picked commits and fork-point work together': 
	git checkout default-base &&
	echo Amended >A &&
	git commit -a --no-edit --amend &&
	test_commit B B &&
	test_commit new_B B "New B" &&
	test_commit C C &&
	git checkout default &&
	git reset --hard default-base@{4} &&
	test_commit D D &&
	git cherry-pick -2 default-base^ &&
	test_commit final_B B "Final B" &&
	git rebase &&
	echo Amended >expect &&
	test_cmp expect A &&
	echo "Final B" >expect &&
	test_cmp expect B &&
	echo C >expect &&
	test_cmp expect C &&
	echo D >expect &&
	test_cmp expect D

Switched to branch 'default-base'
[default-base 10c1269] Modify A.
 Author: author@name <bogus@email@address>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[default-base 33daa44] B
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 B
[default-base bb1e483] new_B
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+), 1 deletion(-)
[default-base 6fcaab7] C
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 C
Switched to branch 'default'
Your branch and 'default-base' have diverged,
and have 2 and 4 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at 79095e6 Modify A.
[default 25c877f] D
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 D
[default c1600f1] B
 Author: author@name <bogus@email@address>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 B
[default a9d4b07] new_B
 Author: author@name <bogus@email@address>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[default 26a2977] final_B
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: skipped previously applied commit c1600f1
warning: skipped previously applied commit a9d4b07
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/default.
ok 21 - cherry-picked commits and fork-point work together

expecting success of 3400.22 'rebase --apply -q is quiet': 
	git checkout -b quiet topic &&
	git rebase --apply -q main >output.out 2>&1 &&
	test_must_be_empty output.out

Switched to a new branch 'quiet'
ok 22 - rebase --apply -q is quiet

expecting success of 3400.23 'rebase --merge -q is quiet': 
	git checkout -B quiet topic &&
	git rebase --merge -q main >output.out 2>&1 &&
	test_must_be_empty output.out

Reset branch 'quiet'
ok 23 - rebase --merge -q is quiet

expecting success of 3400.24 'Rebase a commit that sprinkles CRs in': 
	(
		echo "One" &&
		echo "TwoQ" &&
		echo "Three" &&
		echo "FQur" &&
		echo "Five"
	) | q_to_cr >CR &&
	git add CR &&
	test_tick &&
	git commit -a -m "A file with a line with CR" &&
	git tag file-with-cr &&
	git checkout HEAD^0 &&
	git rebase --onto HEAD^^ HEAD^ &&
	git diff --exit-code file-with-cr:CR HEAD:CR

[quiet bdc63e2] A file with a line with CR
 Author: author@name <bogus@email@address>
 1 file changed, 5 insertions(+)
 create mode 100644 CR
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bdc63e2 A file with a line with CR
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 24 - Rebase a commit that sprinkles CRs in

expecting success of 3400.25 'rebase can copy notes': 
	git config notes.rewrite.rebase true &&
	git config notes.rewriteRef "refs/notes/*" &&
	test_commit n1 &&
	test_commit n2 &&
	test_commit n3 &&
	git notes add -m"a note" n3 &&
	git rebase --onto n1 n2 &&
	test "a note" = "$(git notes show HEAD)"

[detached HEAD 6c4c424] n1
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 n1.t
[detached HEAD 2a7c249] n2
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 n2.t
[detached HEAD a23b9cc] n3
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 n3.t
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 25 - rebase can copy notes

expecting success of 3400.26 'rebase -m can copy notes': 
	git reset --hard n3 &&
	git rebase -m --onto n1 n2 &&
	test "a note" = "$(git notes show HEAD)"

HEAD is now at a23b9cc n3
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 26 - rebase -m can copy notes

expecting success of 3400.27 'rebase commit with an ancient timestamp': 
	git reset --hard &&

	>old.one && git add old.one && test_tick &&
	git commit --date="@12345 +0400" -m "Old one" &&
	>old.two && git add old.two && test_tick &&
	git commit --date="@23456 +0500" -m "Old two" &&
	>old.three && git add old.three && test_tick &&
	git commit --date="@34567 +0600" -m "Old three" &&

	git cat-file commit HEAD^^ >actual &&
	grep "author .* 12345 +0400$" actual &&
	git cat-file commit HEAD^ >actual &&
	grep "author .* 23456 +0500$" actual &&
	git cat-file commit HEAD >actual &&
	grep "author .* 34567 +0600$" actual &&

	git rebase --onto HEAD^^ HEAD^ &&

	git cat-file commit HEAD >actual &&
	grep "author .* 34567 +0600$" actual

HEAD is now at 8512196 n3
[detached HEAD 672de63] Old one
 Author: author@name <bogus@email@address>
 Date: Thu Jan 1 07:25:45 1970 +0400
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 old.one
[detached HEAD bcd1a5d] Old two
 Author: author@name <bogus@email@address>
 Date: Thu Jan 1 11:30:56 1970 +0500
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 old.two
[detached HEAD e1aec6b] Old three
 Author: author@name <bogus@email@address>
 Date: Thu Jan 1 15:36:07 1970 +0600
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 old.three
author author@name <bogus@email@address> 12345 +0400
author author@name <bogus@email@address> 23456 +0500
author author@name <bogus@email@address> 34567 +0600
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
author author@name <bogus@email@address> 34567 +0600
ok 27 - rebase commit with an ancient timestamp

expecting success of 3400.28 'rebase with "From " line in commit message': 
	git checkout -b preserve-from main~1 &&
	cat >From_.msg <<EOF &&
Somebody embedded an mbox in a commit message

This is from so-and-so:

From a@b Mon Sep 17 00:00:00 2001
From: John Doe <nobody@example.com>
Date: Sat, 11 Nov 2017 00:00:00 +0000
Subject: not this message

something
EOF
	>From_ &&
	git add From_ &&
	git commit -F From_.msg &&
	git rebase main &&
	git log -1 --pretty=format:%B >out &&
	test_cmp From_.msg out

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  2aa280f Old three
  672de63 Old one
  8512196 n3

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2aa280f

Switched to a new branch 'preserve-from'
[preserve-from 6a4c2b7] Somebody embedded an mbox in a commit message
 Author: author@name <bogus@email@address>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 From_
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/preserve-from.
ok 28 - rebase with "From " line in commit message

expecting success of 3400.29 'rebase --apply and --show-current-patch': 
	test_create_repo conflict-apply &&
	(
		cd conflict-apply &&
		test_commit init &&
		echo one >>init.t &&
		git commit -a -m one &&
		echo two >>init.t &&
		git commit -a -m two &&
		git tag two &&
		test_must_fail git rebase --apply -f --onto init HEAD^ &&
		GIT_TRACE=1 git rebase --show-current-patch >/dev/null 2>stderr &&
		grep "show.*$(git rev-parse two)" stderr
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3400-rebase/conflict-apply/.git/
[main (root-commit) 4ee1594] init
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 7f4d086] one
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
[main 4a30746] two
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
First, rewinding head to replay your work on top of it...
Applying: two
Using index info to reconstruct a base tree...
M	init.t
Falling back to patching base and 3-way merge...
Merging:
4ee1594 init
virtual two
found 1 common ancestor:
virtual 24619c19508a6b9b476e2c46f4889f730a371ef0
Auto-merging init.t
CONFLICT (content): Merge conflict in init.t
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 two
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
trace: run_command: git show 4a30746df05d63c1ff544efc981f6dc849632f55 --
trace: built-in: git show 4a30746df05d63c1ff544efc981f6dc849632f55 --
ok 29 - rebase --apply and --show-current-patch

expecting success of 3400.30 'rebase --apply and .gitattributes': 
	test_create_repo attributes &&
	(
		cd attributes &&
		test_commit init &&
		git config filter.test.clean "sed -e 's/smudged/clean/g'" &&
		git config filter.test.smudge "sed -e 's/clean/smudged/g'" &&

		test_commit second &&
		git checkout -b test HEAD^ &&

		echo "*.txt filter=test" >.gitattributes &&
		git add .gitattributes &&
		test_commit third &&

		echo "This text is smudged." >a.txt &&
		git add a.txt &&
		test_commit fourth &&

		git checkout -b removal HEAD^ &&
		git rm .gitattributes &&
		git add -u &&
		test_commit fifth &&
		git cherry-pick test &&

		git checkout test &&
		git rebase main &&
		grep "smudged" a.txt &&

		git checkout removal &&
		git reset --hard &&
		git rebase main &&
		grep "clean" a.txt
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3400-rebase/attributes/.git/
[main (root-commit) 4ee1594] init
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 68fd476] second
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
Switched to a new branch 'test'
[test 3071d72] third
 Author: author@name <bogus@email@address>
 2 files changed, 2 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 third.t
[test 5339e6c] fourth
 Author: author@name <bogus@email@address>
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 fourth.t
Switched to a new branch 'removal'
rm '.gitattributes'
[removal f95b76e] fifth
 Author: author@name <bogus@email@address>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 .gitattributes
 create mode 100644 fifth.t
[removal 5932438] fourth
 Author: author@name <bogus@email@address>
 Date: Thu Apr 7 15:32:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 fourth.t
Switched to branch 'test'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
This text is smudged.
Switched to branch 'removal'
HEAD is now at 5932438 fourth
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/removal.
This text is clean.
ok 30 - rebase --apply and .gitattributes

expecting success of 3400.31 'rebase--merge.sh and --show-current-patch': 
	test_create_repo conflict-merge &&
	(
		cd conflict-merge &&
		test_commit init &&
		echo one >>init.t &&
		git commit -a -m one &&
		echo two >>init.t &&
		git commit -a -m two &&
		git tag two &&
		test_must_fail git rebase --merge --onto init HEAD^ &&
		git rebase --show-current-patch >actual.patch &&
		GIT_TRACE=1 git rebase --show-current-patch >/dev/null 2>stderr &&
		grep "show.*REBASE_HEAD" stderr &&
		test "$(git rev-parse REBASE_HEAD)" = "$(git rev-parse two)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3400-rebase/conflict-merge/.git/
[main (root-commit) 4ee1594] init
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 7f4d086] one
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
[main 4a30746] two
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
Rebasing (1/1)
Auto-merging init.t
CONFLICT (content): Merge conflict in init.t
error: could not apply 4a30746... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4a30746... two
trace: run_command: git show REBASE_HEAD --
trace: built-in: git show REBASE_HEAD --
ok 31 - rebase--merge.sh and --show-current-patch

expecting success of 3400.32 'switch to branch checked out here': 
	git checkout main &&
	git rebase main main

Switched to branch 'main'
Current branch main is up to date.
ok 32 - switch to branch checked out here

expecting success of 3400.33 'switch to branch not checked out': 
	git checkout main &&
	git branch other &&
	git rebase main other

Already on 'main'
Current branch other is up to date.
ok 33 - switch to branch not checked out

expecting success of 3400.34 'switch to non-branch detaches HEAD': 
	git checkout main &&
	old_main=$(git rev-parse HEAD) &&
	git rebase First Second^0 &&
	test_cmp_rev HEAD Second &&
	test_cmp_rev main $old_main &&
	test_must_fail git symbolic-ref HEAD

Switched to branch 'main'
Current branch Second^0 is up to date.
fatal: ref HEAD is not a symbolic ref
ok 34 - switch to non-branch detaches HEAD

expecting success of 3400.35 'refuse to switch to branch checked out elsewhere': 
	git checkout main &&
	git worktree add wt &&
	test_must_fail git -C wt rebase main main 2>err &&
	test_i18ngrep "already checked out" err

Previous HEAD position was 5d79b4b Add B.
Switched to branch 'main'
Preparing worktree (new branch 'wt')
HEAD is now at 1fb901f prepare
fatal: 'main' is already checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3400-rebase'
ok 35 - refuse to switch to branch checked out elsewhere

checking prerequisite: SYMLINKS_WINDOWS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS_WINDOWS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS_WINDOWS" &&
	# test whether symbolic links are enabled on Windows
	test_have_prereq MINGW &&
	cmd //c "mklink y x" &> /dev/null && test -h y

)
prerequisite SYMLINKS_WINDOWS not satisfied
ok 36 # skip rebase when .git/logs is a symlink (missing SYMLINKS_WINDOWS,MINGW of MINGW,SYMLINKS_WINDOWS)

expecting success of 3400.37 'rebase when inside worktree subdirectory': 
	git init main-wt &&
	(
		cd main-wt &&
		git commit --allow-empty -m "initial" &&
		mkdir -p foo/bar &&
		test_commit foo/bar/baz &&
		mkdir -p a/b &&
		test_commit a/b/c &&
		# create another branch for our other worktree
		git branch other &&
		git worktree add ../other-wt other &&
		cd ../other-wt &&
		# create and cd into a subdirectory
		mkdir -p random/dir &&
		cd random/dir &&
		# now do the rebase
		git rebase --onto HEAD^^ HEAD^  # drops the HEAD^ commit
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3400-rebase/main-wt/.git/
[main (root-commit) 18c3868] initial
 Author: author@name <bogus@email@address>
[main ab220b2] foo/bar/baz
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar/baz.t
[main c2b5a42] a/b/c
 Author: author@name <bogus@email@address>
 1 file changed, 1 insertion(+)
 create mode 100644 a/b/c.t
Preparing worktree (checking out 'other')
HEAD is now at c2b5a42 a/b/c
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/other.
ok 37 - rebase when inside worktree subdirectory

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3403-rebase-skip.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3403-rebase-skip/.git/
expecting success of 3403.1 'setup': 
	echo hello > hello &&
	git add hello &&
	git commit -m "hello" &&
	git branch skip-reference &&
	git tag hello &&

	echo world >> hello &&
	git commit -a -m "hello world" &&
	echo goodbye >> hello &&
	git commit -a -m "goodbye" &&
	git tag goodbye &&

	git checkout --detach &&
	git checkout HEAD^ . &&
	test_tick &&
	git commit -m reverted-goodbye &&
	git tag reverted-goodbye &&
	git checkout goodbye &&
	test_tick &&
	GIT_AUTHOR_NAME="Another Author" \
		GIT_AUTHOR_EMAIL="another.author@example.com" \
		git commit --amend --no-edit -m amended-goodbye \
			--reset-author &&
	test_tick &&
	git tag amended-goodbye &&

	git checkout -f skip-reference &&
	echo moo > hello &&
	git commit -a -m "we should skip this" &&
	echo moo > cow &&
	git add cow &&
	git commit -m "this should not be skipped" &&
	git branch pre-rebase skip-reference &&
	git branch skip-merge skip-reference
	
[main (root-commit) 7b3be24] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello
[main 5a0b053] hello world
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 64bec18] goodbye
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at 64bec18 goodbye
Updated 1 path from f7e12fd
[detached HEAD 1f15beb] reverted-goodbye
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
Previous HEAD position was 1f15beb reverted-goodbye
HEAD is now at 64bec18 goodbye
[detached HEAD d66ccab] amended-goodbye
 Author: Another Author <another.author@example.com>
 1 file changed, 1 insertion(+)
Previous HEAD position was d66ccab amended-goodbye
Switched to branch 'skip-reference'
[skip-reference 847c4cd] we should skip this
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[skip-reference c443746] this should not be skipped
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cow
ok 1 - setup

expecting success of 3403.2 'rebase with git am -3 (default)': 
	test_must_fail git rebase --apply main

First, rewinding head to replay your work on top of it...
Applying: we should skip this
Using index info to reconstruct a base tree...
M	hello
Falling back to patching base and 3-way merge...
Merging:
64bec18 goodbye
virtual we should skip this
found 1 common ancestor:
virtual b4d01e9b0c4a9356736dfddf8830ba9a54f5271c
Auto-merging hello
CONFLICT (content): Merge conflict in hello
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 we should skip this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 2 - rebase with git am -3 (default)

expecting success of 3403.3 'rebase --skip can not be used with other options': 
	test_must_fail git rebase -v --skip &&
	test_must_fail git rebase --skip -v

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 3 - rebase --skip can not be used with other options

expecting success of 3403.4 'rebase --skip with am -3': 
	git rebase --skip
	
Applying: this should not be skipped
ok 4 - rebase --skip with am -3

expecting success of 3403.5 'rebase moves back to skip-reference': 
	test refs/heads/skip-reference = $(git symbolic-ref HEAD) &&
	git branch post-rebase &&
	git reset --hard pre-rebase &&
	test_must_fail git rebase main &&
	echo "hello" > hello &&
	git add hello &&
	git rebase --continue &&
	test refs/heads/skip-reference = $(git symbolic-ref HEAD) &&
	git reset --hard post-rebase

HEAD is now at c443746 this should not be skipped
Rebasing (1/2)
Auto-merging hello
CONFLICT (content): Merge conflict in hello
error: could not apply 847c4cd... we should skip this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 847c4cd... we should skip this
[detached HEAD 0283955] we should skip this
 Author: A U Thor <author@example.com>
 1 file changed, 2 deletions(-)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/skip-reference.
HEAD is now at 86a691d this should not be skipped
ok 5 - rebase moves back to skip-reference

expecting success of 3403.6 'checkout skip-merge': git checkout -f skip-merge
Switched to branch 'skip-merge'
ok 6 - checkout skip-merge

expecting success of 3403.7 'rebase with --merge': 
	test_must_fail git rebase --merge main

Rebasing (1/2)
Auto-merging hello
CONFLICT (content): Merge conflict in hello
error: could not apply 847c4cd... we should skip this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 847c4cd... we should skip this
ok 7 - rebase with --merge

expecting success of 3403.8 'rebase --skip with --merge': 
	git rebase --skip

Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/skip-merge.
ok 8 - rebase --skip with --merge

expecting success of 3403.9 'merge and reference trees equal': 
	test -z "$(git diff-tree skip-merge skip-reference)"

ok 9 - merge and reference trees equal

expecting success of 3403.10 'moved back to branch correctly': 
	test refs/heads/skip-merge = $(git symbolic-ref HEAD)

ok 10 - moved back to branch correctly

expecting success of 3403.11 'skipping final pick removes .git/MERGE_MSG': 
	test_must_fail git rebase --onto hello reverted-goodbye^ \
		reverted-goodbye &&
	git rebase --skip &&
	test_path_is_missing .git/MERGE_MSG

Rebasing (1/1)
Auto-merging hello
CONFLICT (content): Merge conflict in hello
error: could not apply 1f15beb... reverted-goodbye
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1f15beb... reverted-goodbye

                                                                                
Successfully rebased and updated detached HEAD.
ok 11 - skipping final pick removes .git/MERGE_MSG

expecting success of 3403.12 'correct advice upon picking empty commit': 
	test_when_finished "git rebase --abort" &&
	test_must_fail git rebase -i --onto goodbye \
		amended-goodbye^ amended-goodbye 2>err &&
	test_i18ngrep "previous cherry-pick is now empty" err &&
	test_i18ngrep "git rebase --skip" err &&
	test_must_fail git commit &&
	test_i18ngrep "git rebase --skip" err

Rebasing (1/1)
The previous cherry-pick is now empty, possibly due to conflict resolution.
Otherwise, please use 'git rebase --skip'
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 64bec18
Last command done (1 command done):
   pick d66ccab amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git rebase --skip'
ok 12 - correct advice upon picking empty commit

expecting success of 3403.13 'correct authorship when committing empty pick': 
	test_when_finished "git rebase --abort" &&
	test_must_fail git rebase -i --onto goodbye \
		amended-goodbye^ amended-goodbye &&
	git commit --allow-empty &&
	git log --pretty=format:"%an <%ae>%n%ad%B" -1 amended-goodbye >expect &&
	git log --pretty=format:"%an <%ae>%n%ad%B" -1 HEAD >actual &&
	test_cmp expect actual

Rebasing (1/1)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 64bec18
Last command done (1 command done):
   pick d66ccab amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
Could not apply d66ccab... amended-goodbye
[detached HEAD 046fc51] amended-goodbye
 Author: Another Author <another.author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
ok 13 - correct authorship when committing empty pick

expecting success of 3403.14 'correct advice upon rewording empty commit': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="reword 1" git rebase -i \
			--onto goodbye amended-goodbye^ amended-goodbye 2>err
	) &&
	test_i18ngrep "previous cherry-pick is now empty" err &&
	test_i18ngrep "git rebase --skip" err &&
	test_must_fail git commit &&
	test_i18ngrep "git rebase --skip" err

rebase -i script before editing:
pick d66ccab amended-goodbye

rebase -i script after editing:
reword d66ccab amended-goodbye
Rebasing (1/1)
The previous cherry-pick is now empty, possibly due to conflict resolution.
Otherwise, please use 'git rebase --skip'
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 64bec18
Last command done (1 command done):
   reword d66ccab amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git rebase --skip'
ok 14 - correct advice upon rewording empty commit

expecting success of 3403.15 'correct advice upon editing empty commit': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="edit 1" git rebase -i \
			--onto goodbye amended-goodbye^ amended-goodbye 2>err
	) &&
	test_i18ngrep "previous cherry-pick is now empty" err &&
	test_i18ngrep "git rebase --skip" err &&
	test_must_fail git commit &&
	test_i18ngrep "git rebase --skip" err

rebase -i script before editing:
pick d66ccab amended-goodbye

rebase -i script after editing:
edit d66ccab amended-goodbye
Rebasing (1/1)
The previous cherry-pick is now empty, possibly due to conflict resolution.
Otherwise, please use 'git rebase --skip'
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 64bec18
Last command done (1 command done):
   edit d66ccab amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git rebase --skip'
ok 15 - correct advice upon editing empty commit

expecting success of 3403.16 'correct advice upon cherry-picking an empty commit during a rebase': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 exec_git_cherry-pick_amended-goodbye" \
			git rebase -i goodbye^ goodbye 2>err
	) &&
	test_i18ngrep "previous cherry-pick is now empty" err &&
	test_i18ngrep "git cherry-pick --skip" err &&
	test_must_fail git commit 2>err &&
	test_i18ngrep "git cherry-pick --skip" err

rebase -i script before editing:
pick 64bec18 goodbye

rebase -i script after editing:
pick 64bec18 goodbye
exec git cherry-pick amended-goodbye
interactive rebase in progress; onto 5a0b053
Last commands done (2 commands done):
   pick 64bec18 goodbye
   exec git cherry-pick amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
The previous cherry-pick is now empty, possibly due to conflict resolution.
Otherwise, please use 'git cherry-pick --skip'
interactive rebase in progress; onto 5a0b053
Last commands done (2 commands done):
   pick 64bec18 goodbye
   exec git cherry-pick amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git cherry-pick --skip'
ok 16 - correct advice upon cherry-picking an empty commit during a rebase

expecting success of 3403.17 'correct advice upon multi cherry-pick picking an empty commit during a rebase': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 exec_git_cherry-pick_goodbye_amended-goodbye" \
			git rebase -i goodbye^^ goodbye 2>err
	) &&
	test_i18ngrep "previous cherry-pick is now empty" err &&
	test_i18ngrep "git cherry-pick --skip" err &&
	test_must_fail git commit 2>err &&
	test_i18ngrep "git cherry-pick --skip" err

rebase -i script before editing:
pick 5a0b053 hello world
pick 64bec18 goodbye

rebase -i script after editing:
pick 5a0b053 hello world
exec git cherry-pick goodbye amended-goodbye
[detached HEAD 67e8618] goodbye
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
interactive rebase in progress; onto 7b3be24
Last commands done (2 commands done):
   pick 5a0b053 hello world
   exec git cherry-pick goodbye amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
The previous cherry-pick is now empty, possibly due to conflict resolution.
Otherwise, please use 'git cherry-pick --skip'
interactive rebase in progress; onto 7b3be24
Last commands done (2 commands done):
   pick 5a0b053 hello world
   exec git cherry-pick goodbye amended-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git cherry-pick --skip'
ok 17 - correct advice upon multi cherry-pick picking an empty commit during a rebase

expecting success of 3403.18 'fixup that empties commit fails': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 fixup 2" git rebase -i \
			goodbye^ reverted-goodbye
	)

rebase -i script before editing:
pick 64bec18 goodbye
pick 1f15beb reverted-goodbye

rebase -i script after editing:
pick 64bec18 goodbye
fixup 1f15beb reverted-goodbye
Rebasing (2/2)
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
interactive rebase in progress; onto 5a0b053
Last commands done (2 commands done):
   pick 64bec18 goodbye
   fixup 1f15beb reverted-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

No changes
Could not apply 1f15beb... reverted-goodbye
ok 18 - fixup that empties commit fails

expecting success of 3403.19 'squash that empties commit fails': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 squash 2" git rebase -i \
			goodbye^ reverted-goodbye
	)

rebase -i script before editing:
pick 64bec18 goodbye
pick 1f15beb reverted-goodbye

rebase -i script after editing:
pick 64bec18 goodbye
squash 1f15beb reverted-goodbye
Rebasing (2/2)
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
interactive rebase in progress; onto 5a0b053
Last commands done (2 commands done):
   pick 64bec18 goodbye
   squash 1f15beb reverted-goodbye
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	fake-editor.sh

No changes
Could not apply 1f15beb... reverted-goodbye
ok 19 - squash that empties commit fails

expecting success of 3403.20 '$EDITOR and friends are unchanged': 
	test_editor_unchanged

ok 20 - $EDITOR and friends are unchanged

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3405-rebase-malformed.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3405-rebase-malformed/.git/
expecting success of 3405.1 'setup': 

	>file1 &&
	>file2 &&
	git add file1 file2 &&
	test_tick &&
	git commit -m "Initial commit" &&
	git branch diff-in-message &&
	git branch empty-message-merge &&

	git checkout -b multi-line-subject &&
	cat F >file2 &&
	git add file2 &&
	test_tick &&
	git commit -F F &&

	git cat-file commit HEAD | sed -e "1,/^\$/d" >F0 &&

	git checkout diff-in-message &&
	echo "commit log message containing a diff" >G &&
	echo "" >>G &&
	cat G >file2 &&
	git add file2 &&
	git diff --cached >>G &&
	test_tick &&
	git commit -F G &&

	git cat-file commit HEAD | sed -e "1,/^\$/d" >G0 &&

	git checkout empty-message-merge &&
	echo file3 >file3 &&
	git add file3 &&
	git commit --allow-empty-message -m "" &&

	git checkout main &&

	echo One >file1 &&
	test_tick &&
	git add file1 &&
	git commit -m "Second commit"

[main (root-commit) a8d727e] Initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'multi-line-subject'
[multi-line-subject 5037af6] This is an example of a commit log message that does not  conform to git commit convention.
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Switched to branch 'diff-in-message'
[diff-in-message 132c17c] commit log message containing a diff
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'empty-message-merge'
[empty-message-merge 942c0ff] 
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Switched to branch 'main'
[main d5181bc] Second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3405.2 'rebase commit with multi-line subject': 

	git rebase main multi-line-subject &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >F1 &&

	test_cmp F0 F1 &&
	test_cmp F F0

Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/multi-line-subject.
ok 2 - rebase commit with multi-line subject

expecting success of 3405.3 'rebase commit with diff in message': 
	git rebase main diff-in-message &&
	git cat-file commit HEAD | sed -e "1,/^$/d" >G1 &&
	test_cmp G0 G1 &&
	test_cmp G G0

Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/diff-in-message.
ok 3 - rebase commit with diff in message

expecting success of 3405.4 'rebase -m commit with empty message': 
	git rebase -m main empty-message-merge

Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/empty-message-merge.
ok 4 - rebase -m commit with empty message

expecting success of 3405.5 'rebase -i commit with empty message': 
	git checkout diff-in-message &&
	set_fake_editor &&
	test_must_fail env FAKE_COMMIT_MESSAGE=" " FAKE_LINES="reword 1" \
		git rebase -i HEAD^

Switched to branch 'diff-in-message'
rebase -i script before editing:
pick 87b000b commit log message containing a diff

rebase -i script after editing:
reword 87b000b commit log message containing a diff
Rebasing (1/1)
Aborting commit due to empty commit message.
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
ok 5 - rebase -i commit with empty message

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3406-rebase-message.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3406-rebase-message/.git/
expecting success of 3406.1 'setup': 
	test_commit O fileO &&
	test_commit X fileX &&
	git branch fast-forward &&
	test_commit A fileA &&
	test_commit B fileB &&
	test_commit Y fileY &&

	git checkout -b conflicts O &&
	test_commit P &&
	test_commit conflict-X fileX &&
	test_commit Q &&

	git checkout -b topic O &&
	git cherry-pick A B &&
	test_commit Z fileZ &&
	git tag start

[main (root-commit) 3749684] O
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileO
[main a2df67f] X
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileX
[main 9491ce3] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileA
[main 83a6553] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileB
[main 545b0d0] Y
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileY
Switched to a new branch 'conflicts'
[conflicts bd906e8] P
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 P.t
[conflicts f31fbd6] conflict-X
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileX
[conflicts f39a215] Q
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 Q.t
Switched to a new branch 'topic'
[topic 731bf4a] A
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 fileA
[topic bd8c9c9] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 fileB
[topic dd54835] Z
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileZ
ok 1 - setup

expecting success of 3406.2 'rebase -m': 
	git rebase -m main >actual &&
	test_must_be_empty actual

warning: skipped previously applied commit 731bf4a
warning: skipped previously applied commit bd8c9c9
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 2 - rebase -m

expecting success of 3406.3 'rebase against main twice': 
	git rebase --apply main >out &&
	test_i18ngrep "Current branch topic is up to date" out

Current branch topic is up to date.
ok 3 - rebase against main twice

expecting success of 3406.4 'rebase against main twice with --force': 
	git rebase --force-rebase --apply main >out &&
	test_i18ngrep "Current branch topic is up to date, rebase forced" out

Current branch topic is up to date, rebase forced.
ok 4 - rebase against main twice with --force

expecting success of 3406.5 'rebase against main twice from another branch': 
	git checkout topic^ &&
	git rebase --apply main topic >out &&
	test_i18ngrep "Current branch topic is up to date" out

Note: switching to 'topic^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 545b0d0 Y
Current branch topic is up to date.
ok 5 - rebase against main twice from another branch

expecting success of 3406.6 'rebase fast-forward to main': 
	git checkout topic^ &&
	git rebase --apply topic >out &&
	test_i18ngrep "Fast-forwarded HEAD to topic" out

Note: switching to 'topic^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 545b0d0 Y
Fast-forwarded HEAD to topic.
ok 6 - rebase fast-forward to main

expecting success of 3406.7 'rebase --stat': 
	git reset --hard start &&
	git rebase --stat main >diffstat.txt &&
	grep "^ fileX |  *1 +$" diffstat.txt

HEAD is now at dd54835 Z
warning: skipped previously applied commit 731bf4a
warning: skipped previously applied commit bd8c9c9
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
 fileX | 1 +
ok 7 - rebase --stat

expecting success of 3406.8 'rebase w/config rebase.stat': 
	git reset --hard start &&
	git config rebase.stat true &&
	git rebase main >diffstat.txt &&
	grep "^ fileX |  *1 +$" diffstat.txt

HEAD is now at dd54835 Z
warning: skipped previously applied commit 731bf4a
warning: skipped previously applied commit bd8c9c9
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
 fileX | 1 +
ok 8 - rebase w/config rebase.stat

expecting success of 3406.9 'rebase -n overrides config rebase.stat config': 
	git reset --hard start &&
	git config rebase.stat true &&
	git rebase -n main >diffstat.txt &&
	! grep "^ fileX |  *1 +$" diffstat.txt

HEAD is now at dd54835 Z
warning: skipped previously applied commit 731bf4a
warning: skipped previously applied commit bd8c9c9
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 9 - rebase -n overrides config rebase.stat config

expecting success of 3406.10 'rebase --onto outputs the invalid ref': 
	test_must_fail git rebase --onto invalid-ref HEAD HEAD 2>err &&
	test_i18ngrep "invalid-ref" err

fatal: Does not point to a valid commit 'invalid-ref'
ok 10 - rebase --onto outputs the invalid ref

expecting success of 3406.11 'error out early upon -C<n> or --whitespace=<bad>': 
	test_must_fail git rebase -Cnot-a-number HEAD 2>err &&
	test_i18ngrep "numerical value" err &&
	test_must_fail git rebase --whitespace=bad HEAD 2>err &&
	test_i18ngrep "Invalid whitespace option" err

fatal: switch `C' expects a numerical value
fatal: Invalid whitespace option: 'bad'
ok 11 - error out early upon -C<n> or --whitespace=<bad>

expecting success of 3406.12 'rebase --merge reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		echo resolved >fileX &&
		git add fileX &&
		git rebase --continue
	) &&

	git log -g --format=%gs -5 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (continue): conflict-X
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 conflicts >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/conflicts onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev conflicts@{1} Q
	
Previous HEAD position was c4441bc Z
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
[detached HEAD 57e508d] conflict-X
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/conflicts.
HEAD is now at f39a215 Q
ok 12 - rebase --merge reflog

expecting success of 3406.13 'rebase --merge fast-forward reflog': 
	git checkout fast-forward &&
	test_when_finished "git reset --hard X" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		git rebase $mode main
	) &&

	git log -g --format=%gs -2 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/fast-forward
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 fast-forward >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/fast-forward onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev fast-forward@{1} X
	
Switched to branch 'fast-forward'
 fileA | 1 +
 fileB | 1 +
 fileY | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileY

                                                                                
Successfully rebased and updated refs/heads/fast-forward.
HEAD is now at a2df67f X
ok 13 - rebase --merge fast-forward reflog

expecting success of 3406.14 'rebase --merge --skip reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --skip
	) &&

	git log -g --format=%gs -4 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/conflicts.
HEAD is now at f39a215 Q
ok 14 - rebase --merge --skip reflog

expecting success of 3406.15 'rebase --merge --abort reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	git log -g -1 conflicts >branch-expect &&
	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	# check branch reflog is unchanged
	git log -g -1 conflicts >branch-actual &&
	test_cmp branch-expect branch-actual
	
Already on 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
HEAD is now at f39a215 Q
ok 15 - rebase --merge --abort reflog

expecting success of 3406.16 'rebase --merge --abort detached HEAD reflog': 
	git checkout Q &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to $(git rev-parse Q)
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Note: switching to 'Q'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f39a215 Q
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
HEAD is now at f39a215 Q
ok 16 - rebase --merge --abort detached HEAD reflog

expecting success of 3406.17 'rebase --merge reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		echo resolved >fileX &&
		git add fileX &&
		git rebase --continue
	) &&

	git log -g --format=%gs -5 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (continue): conflict-X
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 conflicts >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/conflicts onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev conflicts@{1} Q
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
[detached HEAD 57e508d] conflict-X
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/conflicts.
HEAD is now at f39a215 Q
ok 17 - rebase --merge reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.18 'rebase --merge fast-forward reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout fast-forward &&
	test_when_finished "git reset --hard X" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		git rebase $mode main
	) &&

	git log -g --format=%gs -2 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/fast-forward
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 fast-forward >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/fast-forward onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev fast-forward@{1} X
	
Switched to branch 'fast-forward'
 fileA | 1 +
 fileB | 1 +
 fileY | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileY

                                                                                
Successfully rebased and updated refs/heads/fast-forward.
HEAD is now at a2df67f X
ok 18 - rebase --merge fast-forward reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.19 'rebase --merge --skip reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --skip
	) &&

	git log -g --format=%gs -4 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/conflicts.
HEAD is now at f39a215 Q
ok 19 - rebase --merge --skip reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.20 'rebase --merge --abort reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	git log -g -1 conflicts >branch-expect &&
	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	# check branch reflog is unchanged
	git log -g -1 conflicts >branch-actual &&
	test_cmp branch-expect branch-actual
	
Already on 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
HEAD is now at f39a215 Q
ok 20 - rebase --merge --abort reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.21 'rebase --merge --abort detached HEAD reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout Q &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to $(git rev-parse Q)
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Note: switching to 'Q'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f39a215 Q
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
Rebasing (1/3)
Rebasing (2/3)
Auto-merging fileX
CONFLICT (add/add): Merge conflict in fileX
error: could not apply f31fbd6... conflict-X
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f31fbd6... conflict-X
HEAD is now at f39a215 Q
ok 21 - rebase --merge --abort detached HEAD reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.22 'rebase --apply reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		echo resolved >fileX &&
		git add fileX &&
		git rebase --continue
	) &&

	git log -g --format=%gs -5 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (continue): conflict-X
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 conflicts >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/conflicts onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev conflicts@{1} Q
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: conflict-X
Applying: Q
HEAD is now at f39a215 Q
ok 22 - rebase --apply reflog

expecting success of 3406.23 'rebase --apply fast-forward reflog': 
	git checkout fast-forward &&
	test_when_finished "git reset --hard X" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		git rebase $mode main
	) &&

	git log -g --format=%gs -2 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/fast-forward
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 fast-forward >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/fast-forward onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev fast-forward@{1} X
	
Switched to branch 'fast-forward'
 fileA | 1 +
 fileB | 1 +
 fileY | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Fast-forwarded fast-forward to main.
HEAD is now at a2df67f X
ok 23 - rebase --apply fast-forward reflog

expecting success of 3406.24 'rebase --apply --skip reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --skip
	) &&

	git log -g --format=%gs -4 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: Q
HEAD is now at f39a215 Q
ok 24 - rebase --apply --skip reflog

expecting success of 3406.25 'rebase --apply --abort reflog': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	git log -g -1 conflicts >branch-expect &&
	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	# check branch reflog is unchanged
	git log -g -1 conflicts >branch-actual &&
	test_cmp branch-expect branch-actual
	
Already on 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
HEAD is now at f39a215 Q
ok 25 - rebase --apply --abort reflog

expecting success of 3406.26 'rebase --apply --abort detached HEAD reflog': 
	git checkout Q &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to $(git rev-parse Q)
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Note: switching to 'Q'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f39a215 Q
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
HEAD is now at f39a215 Q
ok 26 - rebase --apply --abort detached HEAD reflog

expecting success of 3406.27 'rebase --apply reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		echo resolved >fileX &&
		git add fileX &&
		git rebase --continue
	) &&

	git log -g --format=%gs -5 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (continue): conflict-X
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 conflicts >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/conflicts onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev conflicts@{1} Q
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: conflict-X
Applying: Q
HEAD is now at f39a215 Q
ok 27 - rebase --apply reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.28 'rebase --apply fast-forward reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout fast-forward &&
	test_when_finished "git reset --hard X" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		git rebase $mode main
	) &&

	git log -g --format=%gs -2 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/fast-forward
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	git log -g --format=%gs -1 fast-forward >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): refs/heads/fast-forward onto $(git rev-parse main)
	EOF
	test_cmp expect actual &&

	# check there is only one new entry in the branch reflog
	test_cmp_rev fast-forward@{1} X
	
Switched to branch 'fast-forward'
 fileA | 1 +
 fileB | 1 +
 fileY | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Fast-forwarded fast-forward to main.
HEAD is now at a2df67f X
ok 28 - rebase --apply fast-forward reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.29 'rebase --apply --skip reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --skip
	) &&

	git log -g --format=%gs -4 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (finish): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): Q
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Switched to branch 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: Q
HEAD is now at f39a215 Q
ok 29 - rebase --apply --skip reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.30 'rebase --apply --abort reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout conflicts &&
	test_when_finished "git reset --hard Q" &&

	git log -g -1 conflicts >branch-expect &&
	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to refs/heads/conflicts
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual &&

	# check branch reflog is unchanged
	git log -g -1 conflicts >branch-actual &&
	test_cmp branch-expect branch-actual
	
Already on 'conflicts'
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
HEAD is now at f39a215 Q
ok 30 - rebase --apply --abort reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.31 'rebase --apply --abort detached HEAD reflog GIT_REFLOG_ACTION=my-reflog-action': 
	git checkout Q &&
	test_when_finished "git reset --hard Q" &&

	(
		if test -n "$reflog_action"
		then
			GIT_REFLOG_ACTION="$reflog_action" &&
			export GIT_REFLOG_ACTION
		fi &&
		test_must_fail git rebase $mode main &&
		git rebase --abort
	) &&

	git log -g --format=%gs -3 >actual &&
	write_reflog_expect <<-EOF &&
	${reflog_action:-rebase} (abort): returning to $(git rev-parse Q)
	${reflog_action:-rebase} (pick): P
	${reflog_action:-rebase} (start): checkout main
	EOF
	test_cmp expect actual
	
Note: switching to 'Q'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f39a215 Q
 fileA | 1 +
 fileB | 1 +
 fileX | 1 +
 fileY | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileB
 create mode 100644 fileX
 create mode 100644 fileY
First, rewinding head to replay your work on top of it...
Applying: P
Applying: conflict-X
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
866f7e4 P
virtual conflict-X
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in fileX
Auto-merging fileX
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 conflict-X
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
HEAD is now at f39a215 Q
ok 31 - rebase --apply --abort detached HEAD reflog GIT_REFLOG_ACTION=my-reflog-action

expecting success of 3406.32 'rebase -i onto unrelated history': 
	git init unrelated &&
	test_commit -C unrelated 1 &&
	git -C unrelated remote add -f origin "$PWD" &&
	git -C unrelated branch --set-upstream-to=origin/main &&
	git -C unrelated -c core.editor=true rebase -i -v --stat >actual &&
	test_i18ngrep "Changes to " actual &&
	test_i18ngrep "5 files changed" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3406-rebase-message/unrelated/.git/
[main (root-commit) 925a26a] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Updating origin
From /<<PKGBUILDDIR>>/t/trash directory.t3406-rebase-message
 * [new branch]      conflicts    -> origin/conflicts
 * [new branch]      fast-forward -> origin/fast-forward
 * [new branch]      main         -> origin/main
 * [new branch]      topic        -> origin/topic
 * [new tag]         Q            -> Q
 * [new tag]         X            -> X
 * [new tag]         Y            -> Y
 * [new tag]         A            -> A
 * [new tag]         B            -> B
 * [new tag]         O            -> O
 * [new tag]         P            -> P
 * [new tag]         conflict-X   -> conflict-X
branch 'main' set up to track 'origin/main'.
Rebasing (1/1)
Successfully rebased and updated refs/heads/main.
Changes to 545b0d0a5d2af9b721d265dc5293dbb3418ab768:
 5 files changed, 5 insertions(+)
 5 files changed, 5 insertions(+)
ok 32 - rebase -i onto unrelated history

# passed all 32 test(s)
1..32
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3407-rebase-abort.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3407-rebase-abort/.git/
expecting success of 3407.1 'setup': 
	test_commit a a a &&
	git branch to-rebase &&

	test_commit --annotate b a b &&
	test_commit --annotate c a c &&

	git checkout to-rebase &&
	test_commit "merge should fail on this" a d d &&
	test_commit --annotate "merge should fail on this, too" a e pre-rebase

[main (root-commit) cc33353] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main 9c12280] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main deaaf55] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'to-rebase'
[to-rebase 3e1f4f7] merge should fail on this
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[to-rebase 1c3a3e2] merge should fail on this, too
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3407.2 'rebase --apply --abort': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 2 - rebase --apply --abort

expecting success of 3407.3 'rebase --apply --abort after --skip': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		test_must_fail git rebase --skip &&
		test_cmp_rev HEAD main &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: merge should fail on this, too
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this, too
found 1 common ancestor:
virtual f788de73cfc81f8d734fa7efc658cc63ca083f50
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 merge should fail on this, too
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 3 - rebase --apply --abort after --skip

expecting success of 3407.4 'rebase --apply --abort after --continue': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		echo c > a &&
		echo d >> a &&
		git add a &&
		test_must_fail git rebase --continue &&
		test_cmp_rev ! HEAD main &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: merge should fail on this
Applying: merge should fail on this, too
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
670eb71 merge should fail on this
virtual merge should fail on this, too
found 1 common ancestor:
virtual f788de73cfc81f8d734fa7efc658cc63ca083f50
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 merge should fail on this, too
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 4 - rebase --apply --abort after --continue

expecting success of 3407.5 'rebase --apply --abort when checking out a tag': 
		test_when_finished "git symbolic-ref HEAD refs/heads/to-rebase" &&
		git reset --hard a -- &&
		test_must_fail git rebase$type --onto b c pre-rebase &&
		test_cmp_rev HEAD b^{commit} &&
		git rebase --abort &&
		test_cmp_rev HEAD pre-rebase^{commit} &&
		! git symbolic-ref HEAD
	
HEAD is now at cc33353 a
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
9c12280 b
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
fatal: ref HEAD is not a symbolic ref
ok 5 - rebase --apply --abort when checking out a tag

expecting success of 3407.6 'rebase --apply --abort does not update reflog': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		git reflog show to-rebase > reflog_before &&
		test_must_fail git rebase$type main &&
		git rebase --abort &&
		git reflog show to-rebase > reflog_after &&
		test_cmp reflog_before reflog_after &&
		rm reflog_before reflog_after
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 6 - rebase --apply --abort does not update reflog

expecting success of 3407.7 'rebase --abort can not be used with other options': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_must_fail git rebase -v --abort &&
		test_must_fail git rebase --abort -v &&
		git rebase --abort
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 7 - rebase --abort can not be used with other options

expecting success of 3407.8 'rebase --apply --quit': 
		test_when_finished "git symbolic-ref HEAD refs/heads/to-rebase" &&
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir $state_dir &&
		head_before=$(git rev-parse HEAD) &&
		git rebase --quit &&
		test_cmp_rev HEAD $head_before &&
		test_path_is_missing .git/rebase-apply
	
HEAD is now at 1c3a3e2 merge should fail on this, too
First, rewinding head to replay your work on top of it...
Applying: merge should fail on this
Using index info to reconstruct a base tree...
M	a
Falling back to patching base and 3-way merge...
Merging:
deaaf55 c
virtual merge should fail on this
found 1 common ancestor:
virtual aaff74984cccd156a469afa7d9ab10e4777beb24
Auto-merging a
CONFLICT (content): Merge conflict in a
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 merge should fail on this
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 8 - rebase --apply --quit

expecting success of 3407.9 'rebase --merge --abort': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
ok 9 - rebase --merge --abort

expecting success of 3407.10 'rebase --merge --abort after --skip': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		test_must_fail git rebase --skip &&
		test_cmp_rev HEAD main &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
Rebasing (2/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 1c3a3e2... merge should fail on this, too
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1c3a3e2... merge should fail on this, too
ok 10 - rebase --merge --abort after --skip

expecting success of 3407.11 'rebase --merge --abort after --continue': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir "$state_dir" &&
		echo c > a &&
		echo d >> a &&
		git add a &&
		test_must_fail git rebase --continue &&
		test_cmp_rev ! HEAD main &&
		git rebase --abort &&
		check_head &&
		test_path_is_missing "$state_dir"
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
[detached HEAD 670eb71] merge should fail on this
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 1c3a3e2... merge should fail on this, too
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1c3a3e2... merge should fail on this, too
ok 11 - rebase --merge --abort after --continue

expecting success of 3407.12 'rebase --merge --abort when checking out a tag': 
		test_when_finished "git symbolic-ref HEAD refs/heads/to-rebase" &&
		git reset --hard a -- &&
		test_must_fail git rebase$type --onto b c pre-rebase &&
		test_cmp_rev HEAD b^{commit} &&
		git rebase --abort &&
		test_cmp_rev HEAD pre-rebase^{commit} &&
		! git symbolic-ref HEAD
	
HEAD is now at cc33353 a
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
fatal: ref HEAD is not a symbolic ref
ok 12 - rebase --merge --abort when checking out a tag

expecting success of 3407.13 'rebase --merge --abort does not update reflog': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		git reflog show to-rebase > reflog_before &&
		test_must_fail git rebase$type main &&
		git rebase --abort &&
		git reflog show to-rebase > reflog_after &&
		test_cmp reflog_before reflog_after &&
		rm reflog_before reflog_after
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
ok 13 - rebase --merge --abort does not update reflog

expecting success of 3407.14 'rebase --abort can not be used with other options': 
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_must_fail git rebase -v --abort &&
		test_must_fail git rebase --abort -v &&
		git rebase --abort
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 14 - rebase --abort can not be used with other options

expecting success of 3407.15 'rebase --merge --quit': 
		test_when_finished "git symbolic-ref HEAD refs/heads/to-rebase" &&
		# Clean up the state from the previous one
		git reset --hard pre-rebase &&
		test_must_fail git rebase$type main &&
		test_path_is_dir $state_dir &&
		head_before=$(git rev-parse HEAD) &&
		git rebase --quit &&
		test_cmp_rev HEAD $head_before &&
		test_path_is_missing .git/rebase-apply
	
HEAD is now at 1c3a3e2 merge should fail on this, too
Rebasing (1/2)
Auto-merging a
CONFLICT (content): Merge conflict in a
error: could not apply 3e1f4f7... merge should fail on this
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3e1f4f7... merge should fail on this
ok 15 - rebase --merge --quit

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3408-rebase-multi-line.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3408-rebase-multi-line/.git/
expecting success of 3408.1 'setup': 

	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&

	echo hello >file &&
	test_tick &&
	git commit -a -m "A sample commit log message that has a long
summary that spills over multiple lines.

But otherwise with a sane description." &&

	git branch side &&

	git reset --hard HEAD^ &&
	>elif &&
	git add elif &&
	test_tick &&
	git commit -m second &&

	git checkout -b side2 &&
	>afile &&
	git add afile &&
	test_tick &&
	git commit -m third &&
	echo hello >afile &&
	test_tick &&
	git commit -a -m fourth &&
	git checkout -b side-merge &&
	git reset --hard HEAD^^ &&
	git merge --no-ff -m "A merge commit log message that has a long
summary that spills over multiple lines.

But otherwise with a sane description." side2 &&
	git branch side-merge-original

[main (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[main 1708bf0] A sample commit log message that has a long summary that spills over multiple lines.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at 1bd44cb initial
[main e79e348] second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
Switched to a new branch 'side2'
[side2 0c9638e] third
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 afile
[side2 5efd714] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'side-merge'
HEAD is now at e79e348 second
Merge made by the 'ort' strategy.
 afile | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 afile
ok 1 - setup

expecting success of 3408.2 'rebase': 

	git checkout side &&
	git rebase main &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	git cat-file commit side@{1} | sed -e "1,/^\$/d" >expect &&
	test_cmp expect actual


Switched to branch 'side'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 2 - rebase

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3409-rebase-environ.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3409-rebase-environ/.git/
expecting success of 3409.1 'setup': 
	test_commit one &&
	test_commit two &&
	test_commit three

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 1 - setup

expecting success of 3409.2 'rebase --exec does not muck with GIT_DIR': 
	git rebase --exec "printf %s \$GIT_DIR >environ" HEAD~1 &&
	test_must_be_empty environ

Rebasing (2/2)

                                                                                
Executing: printf %s $GIT_DIR >environ

                                                                                
Successfully rebased and updated refs/heads/master.
ok 2 - rebase --exec does not muck with GIT_DIR

expecting success of 3409.3 'rebase --exec does not muck with GIT_WORK_TREE': 
	git rebase --exec "printf %s \$GIT_WORK_TREE >environ" HEAD~1 &&
	test_must_be_empty environ

Rebasing (2/2)

                                                                                
Executing: printf %s $GIT_WORK_TREE >environ

                                                                                
Successfully rebased and updated refs/heads/master.
ok 3 - rebase --exec does not muck with GIT_WORK_TREE

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3412-rebase-root.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3412-rebase-root/.git/
expecting success of 3412.1 'prepare repository': 
	test_commit 1 A &&
	test_commit 2 A &&
	git symbolic-ref HEAD refs/heads/other &&
	rm .git/index &&
	test_commit 3 B &&
	test_commit 1b A 1 &&
	test_commit 4 B

[main (root-commit) c746ea0] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
[main 46611ad] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other (root-commit) 2c64091] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B
[other 1c4476a] 1b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
[other 41e7797] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - prepare repository

expecting success of 3412.2 'rebase --root fails with too many args': 
	git checkout -B fail other &&
	test_must_fail git rebase --onto main --root fail fail

Switched to a new branch 'fail'
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 2 - rebase --root fails with too many args

expecting success of 3412.3 'setup pre-rebase hook': 
	test_hook --setup pre-rebase <<-\EOF
	echo "$1,$2" >.git/PRE-REBASE-INPUT
	EOF

ok 3 - setup pre-rebase hook

expecting success of 3412.4 'rebase --root --onto <newbase>': 
	git checkout -b work other &&
	git rebase --root --onto main &&
	git log --pretty=tformat:"%s" > rebased &&
	test_cmp expect rebased

Switched to a new branch 'work'
warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/work.
ok 4 - rebase --root --onto <newbase>

expecting success of 3412.5 'pre-rebase got correct input (1)': 
	test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,

ok 5 - pre-rebase got correct input (1)

expecting success of 3412.6 'rebase --root --onto <newbase> <branch>': 
	git branch work2 other &&
	git rebase --root --onto main work2 &&
	git log --pretty=tformat:"%s" > rebased2 &&
	test_cmp expect rebased2

warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/work2.
ok 6 - rebase --root --onto <newbase> <branch>

expecting success of 3412.7 'pre-rebase got correct input (2)': 
	test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work2

ok 7 - pre-rebase got correct input (2)

expecting success of 3412.8 'rebase -i --root --onto <newbase>': 
	git checkout -b work3 other &&
	git rebase -i --root --onto main &&
	git log --pretty=tformat:"%s" > rebased3 &&
	test_cmp expect rebased3

Switched to a new branch 'work3'
warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/work3.
ok 8 - rebase -i --root --onto <newbase>

expecting success of 3412.9 'pre-rebase got correct input (3)': 
	test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,

ok 9 - pre-rebase got correct input (3)

expecting success of 3412.10 'rebase -i --root --onto <newbase> <branch>': 
	git branch work4 other &&
	git rebase -i --root --onto main work4 &&
	git log --pretty=tformat:"%s" > rebased4 &&
	test_cmp expect rebased4

warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/work4.
ok 10 - rebase -i --root --onto <newbase> <branch>

expecting success of 3412.11 'pre-rebase got correct input (4)': 
	test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work4

ok 11 - pre-rebase got correct input (4)

expecting success of 3412.12 'set up merge history': 
	git checkout other^ &&
	git checkout -b side &&
	test_commit 5 C &&
	git checkout other &&
	git merge side

Note: switching to 'other^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1c4476a 1b
Switched to a new branch 'side'
[side 0c9a4e9] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C
Switched to branch 'other'
Merge made by the 'ort' strategy.
 C | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C
ok 12 - set up merge history

expecting success of 3412.13 'set up second root and merge': 
	git symbolic-ref HEAD refs/heads/third &&
	rm .git/index &&
	rm A B C &&
	test_commit 6 D &&
	git checkout other &&
	git merge --allow-unrelated-histories third

[third (root-commit) 00ac2af] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D
Switched to branch 'other'
Merge made by the 'ort' strategy.
 D | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 D
ok 13 - set up second root and merge

expecting success of 3412.14 'setup pre-rebase hook that fails': 
	test_hook --setup --clobber pre-rebase <<-\EOF
	false
	EOF

ok 14 - setup pre-rebase hook that fails

expecting success of 3412.15 'pre-rebase hook stops rebase': 
	git checkout -b stops1 other &&
	test_must_fail git rebase --root --onto main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops1 &&
	test 0 = $(git rev-list other...stops1 | wc -l)

Switched to a new branch 'stops1'
fatal: The pre-rebase hook refused to rebase.
ok 15 - pre-rebase hook stops rebase

expecting success of 3412.16 'pre-rebase hook stops rebase -i': 
	git checkout -b stops2 other &&
	test_must_fail git rebase --root --onto main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops2 &&
	test 0 = $(git rev-list other...stops2 | wc -l)

Switched to a new branch 'stops2'
fatal: The pre-rebase hook refused to rebase.
ok 16 - pre-rebase hook stops rebase -i

expecting success of 3412.17 'remove pre-rebase hook': 
	rm -f .git/hooks/pre-rebase

ok 17 - remove pre-rebase hook

expecting success of 3412.18 'set up a conflict': 
	git checkout main &&
	echo conflict > B &&
	git add B &&
	git commit -m conflict

Switched to branch 'main'
[main f80eebe] conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B
ok 18 - set up a conflict

expecting success of 3412.19 'rebase --root with conflict (first part)': 
	git checkout -b conflict1 other &&
	test_must_fail git rebase --root --onto main &&
	git ls-files -u | grep "B$"

Switched to a new branch 'conflict1'
warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/4)
Auto-merging B
CONFLICT (add/add): Merge conflict in B
error: could not apply 2c64091... 3
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2c64091... 3
100644 9b1719f5cf069568785080a0bbabbe7c377e22ae 2	B
100644 00750edc07d6415dcc07ae0351e9397b0222b7ba 3	B
ok 19 - rebase --root with conflict (first part)

expecting success of 3412.20 'fix the conflict': 
	echo 3 > B &&
	git add B

ok 20 - fix the conflict

expecting success of 3412.21 'rebase --root with conflict (second part)': 
	git rebase --continue &&
	git log --pretty=tformat:"%s" > conflict1 &&
	test_cmp expect-conflict conflict1

[detached HEAD 308ae33] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/conflict1.
ok 21 - rebase --root with conflict (second part)

expecting success of 3412.22 'rebase -i --root with conflict (first part)': 
	git checkout -b conflict2 other &&
	test_must_fail git rebase -i --root --onto main &&
	git ls-files -u | grep "B$"

Switched to a new branch 'conflict2'
warning: skipped previously applied commit 1c4476a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/4)
Auto-merging B
CONFLICT (add/add): Merge conflict in B
error: could not apply 2c64091... 3
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2c64091... 3
100644 9b1719f5cf069568785080a0bbabbe7c377e22ae 2	B
100644 00750edc07d6415dcc07ae0351e9397b0222b7ba 3	B
ok 22 - rebase -i --root with conflict (first part)

expecting success of 3412.23 'fix the conflict': 
	echo 3 > B &&
	git add B

ok 23 - fix the conflict

expecting success of 3412.24 'rebase -i --root with conflict (second part)': 
	git rebase --continue &&
	git log --pretty=tformat:"%s" > conflict2 &&
	test_cmp expect-conflict conflict2

[detached HEAD 308ae33] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/conflict2.
ok 24 - rebase -i --root with conflict (second part)

expecting success of 3412.25 'fix the conflict': 
	echo 3 > B &&
	git add B

ok 25 - fix the conflict

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3413-rebase-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3413-rebase-hook/.git/
expecting success of 3413.1 'setup': 
	echo hello >file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	echo goodbye >file &&
	git add file &&
	test_tick &&
	git commit -m second &&
	git checkout -b side HEAD^ &&
	echo world >git &&
	git add git &&
	test_tick &&
	git commit -m side &&
	git checkout main &&
	git log --pretty=oneline --abbrev-commit --graph --all &&
	git branch test side

[main (root-commit) 6637599] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 20a11a4] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
[side c847452] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 git
Switched to branch 'main'
* c847452 side
| * 20a11a4 second
|/  
* 6637599 initial
ok 1 - setup

expecting success of 3413.2 'rebase': 
	git checkout test &&
	git reset --hard side &&
	git rebase main &&
	test "z$(cat git)" = zworld

Switched to branch 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 2 - rebase

expecting success of 3413.3 'rebase -i': 
	git checkout test &&
	git reset --hard side &&
	EDITOR=true git rebase -i main &&
	test "z$(cat git)" = zworld

Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 3 - rebase -i

expecting success of 3413.4 'setup pre-rebase hook': 
	test_hook --setup pre-rebase <<-\EOF
	echo "$1,$2" >.git/PRE-REBASE-INPUT
	EOF

ok 4 - setup pre-rebase hook

expecting success of 3413.5 'pre-rebase hook gets correct input (1)': 
	git checkout test &&
	git reset --hard side &&
	git rebase main &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,


Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 5 - pre-rebase hook gets correct input (1)

expecting success of 3413.6 'pre-rebase hook gets correct input (2)': 
	git checkout test &&
	git reset --hard side &&
	git rebase main test &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test

Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 6 - pre-rebase hook gets correct input (2)

expecting success of 3413.7 'pre-rebase hook gets correct input (3)': 
	git checkout test &&
	git reset --hard side &&
	git checkout main &&
	git rebase main test &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test

Already on 'test'
HEAD is now at c847452 side
Switched to branch 'main'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 7 - pre-rebase hook gets correct input (3)

expecting success of 3413.8 'pre-rebase hook gets correct input (4)': 
	git checkout test &&
	git reset --hard side &&
	EDITOR=true git rebase -i main &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,


Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 8 - pre-rebase hook gets correct input (4)

expecting success of 3413.9 'pre-rebase hook gets correct input (5)': 
	git checkout test &&
	git reset --hard side &&
	EDITOR=true git rebase -i main test &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test

Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 9 - pre-rebase hook gets correct input (5)

expecting success of 3413.10 'pre-rebase hook gets correct input (6)': 
	git checkout test &&
	git reset --hard side &&
	git checkout main &&
	EDITOR=true git rebase -i main test &&
	test "z$(cat git)" = zworld &&
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test

Already on 'test'
HEAD is now at c847452 side
Switched to branch 'main'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 10 - pre-rebase hook gets correct input (6)

expecting success of 3413.11 'setup pre-rebase hook that fails': 
	test_hook --setup --clobber pre-rebase <<-\EOF
	false
	EOF

ok 11 - setup pre-rebase hook that fails

expecting success of 3413.12 'pre-rebase hook stops rebase (1)': 
	git checkout test &&
	git reset --hard side &&
	test_must_fail git rebase main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
	test 0 = $(git rev-list HEAD...side | wc -l)

Already on 'test'
HEAD is now at c847452 side
fatal: The pre-rebase hook refused to rebase.
ok 12 - pre-rebase hook stops rebase (1)

expecting success of 3413.13 'pre-rebase hook stops rebase (2)': 
	git checkout test &&
	git reset --hard side &&
	test_must_fail env EDITOR=: git rebase -i main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
	test 0 = $(git rev-list HEAD...side | wc -l)

Already on 'test'
HEAD is now at c847452 side
fatal: The pre-rebase hook refused to rebase.
ok 13 - pre-rebase hook stops rebase (2)

expecting success of 3413.14 'rebase --no-verify overrides pre-rebase (1)': 
	git checkout test &&
	git reset --hard side &&
	git rebase --no-verify main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
	test "z$(cat git)" = zworld

Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 14 - rebase --no-verify overrides pre-rebase (1)

expecting success of 3413.15 'rebase --no-verify overrides pre-rebase (2)': 
	git checkout test &&
	git reset --hard side &&
	EDITOR=true git rebase --no-verify -i main &&
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
	test "z$(cat git)" = zworld

Already on 'test'
HEAD is now at c847452 side
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test.
ok 15 - rebase --no-verify overrides pre-rebase (2)

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3311-notes-merge-fanout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3311-notes-merge-fanout/.git/
expecting success of 3311.1 'setup a few initial commits with notes (notes ref: x)': 
	git config core.notesRef refs/notes/x &&
	for i in 1 2 3 4 5
	do
		test_commit "commit$i" >/dev/null &&
		git notes add -m "notes for commit$i" || return 1
	done &&

	git log --format=oneline &&

	test_oid_cache <<-EOF
	hash05a sha1:aed91155c7a72c2188e781fdf40e0f3761b299db
	hash04a sha1:99fab268f9d7ee7b011e091a436c78def8eeee69
	hash03a sha1:953c20ae26c7aa0b428c20693fe38bc687f9d1a9
	hash02a sha1:6358796131b8916eaa2dde6902642942a1cb37e1
	hash01a sha1:b02d459c32f0e68f2fe0981033bb34f38776ba47
	hash03b sha1:9f506ee70e20379d7f78204c77b334f43d77410d
	hash02b sha1:23a47d6ea7d589895faf800752054818e1e7627b

	hash05a sha256:3aae5d26619d96dba93795f66325716e4cbc486884f95a6adee8fb0615a76d12
	hash04a sha256:07e43dd3d89fe634d3252e253b426aacc7285a995dcdbcf94ac284060a1122cf
	hash03a sha256:26fb52eaa7f4866bf735254587be7b31209ec10e525912ffd8e8ba549ba892ff
	hash02a sha256:b57ebdf23634e750dcbc4b9a37991d70f90830d568a0e4529ce9de0a3f8d605c
	hash01a sha256:377903b1572bd5117087a5518fcb1011b5053cccbc59e3c7c823a8615204173b
	hash03b sha256:04e7b392fda7c185bfa17c9179b56db732edc2dc2b3bf887308dcaabb717270d
	hash02b sha256:66099aaaec49a485ed990acadd9a9b81232ea592079964113d8f581ff69ef50b
	EOF

f6db73397fcc379ea00d1fc17a35abb42027a69a commit5
157e8cc0aeac5befb302d276f2e706112bf6e413 commit4
e0851358fb6b4703f23d74ef964bc4491bec7ab9 commit3
94955c5cd7e5662c6ab40c323ecdfac458c47435 commit2
ef004cfa88883bb87e030b6196934dd90e3548d2 commit1
ok 1 - setup a few initial commits with notes (notes ref: x)

expecting success of 3311.2 'sanity check (x)': 
	verify_notes x commit5 &&
	verify_no_fanout x

157e8cc0aeac5befb302d276f2e706112bf6e413
94955c5cd7e5662c6ab40c323ecdfac458c47435
e0851358fb6b4703f23d74ef964bc4491bec7ab9
ef004cfa88883bb87e030b6196934dd90e3548d2
f6db73397fcc379ea00d1fc17a35abb42027a69a
ok 2 - sanity check (x)

expecting success of 3311.3 'Add a few hundred commits w/notes to trigger fanout (x -> y)': 
	git update-ref refs/notes/y refs/notes/x &&
	git config core.notesRef refs/notes/y &&
	test_commit_bulk --start=6 --id=commit $((num - 5)) &&
	i=0 &&
	while test $i -lt $((num - 5))
	do
		git notes add -m "notes for commit$i" HEAD~$i || return 1
		i=$((i + 1))
	done &&
	test "$(git rev-parse refs/notes/y)" != "$(git rev-parse refs/notes/x)" &&
	# Expected number of commits and notes
	test $(git rev-list HEAD | wc -l) = $num &&
	test $(git notes list | wc -l) = $num &&
	# 5 first notes unchanged
	verify_notes y commit5

f6db73397fcc379ea00d1fc17a35abb42027a69a
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          885 (         0 duplicates                  )
      blobs  :          295 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          295 (         0 duplicates        289 deltas of        289 attempts)
      commits:          295 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            300
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        296
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      86456 /      86456
---------------------------------------------------------------------

ok 3 - Add a few hundred commits w/notes to trigger fanout (x -> y)

expecting success of 3311.4 'notes tree has fanout (y)': verify_fanout y
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f6/db73397fcc379ea00d1fc17a35abb42027a69a
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 4 - notes tree has fanout (y)

expecting success of 3311.5 'No-op merge (already included) (x => y)': 
	git update-ref refs/notes/m refs/notes/y &&
	git config core.notesRef refs/notes/m &&
	git notes merge x &&
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/y)"

Already up to date.
ok 5 - No-op merge (already included) (x => y)

expecting success of 3311.6 'Fast-forward merge (y => x)': 
	git update-ref refs/notes/m refs/notes/x &&
	git notes merge y &&
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/y)"

Fast-forward
ok 6 - Fast-forward merge (y => x)

expecting success of 3311.7 'change some of the initial 5 notes (x -> z)': 
	git update-ref refs/notes/z refs/notes/x &&
	git config core.notesRef refs/notes/z &&
	git notes add -f -m "new notes for commit2" commit2 &&
	git notes append -m "appended notes for commit3" commit3 &&
	git notes remove commit4 &&
	git notes remove commit5 &&
	verify_notes z commit5

Overwriting existing notes for object 94955c5cd7e5662c6ab40c323ecdfac458c47435
Removing note for object commit4
Removing note for object commit5
ok 7 - change some of the initial 5 notes (x -> z)

expecting success of 3311.8 'notes tree has no fanout (z)': verify_no_fanout z
94955c5cd7e5662c6ab40c323ecdfac458c47435
e0851358fb6b4703f23d74ef964bc4491bec7ab9
ef004cfa88883bb87e030b6196934dd90e3548d2
ok 8 - notes tree has no fanout (z)

expecting success of 3311.9 'successful merge without conflicts (y => z)': 
	git update-ref refs/notes/m refs/notes/z &&
	git config core.notesRef refs/notes/m &&
	git notes merge y &&
	verify_notes m commit5 &&
	# x/y/z unchanged
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

ok 9 - successful merge without conflicts (y => z)

expecting success of 3311.10 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 10 - notes tree still has fanout after merge (m)

expecting success of 3311.11 'introduce conflicting changes (y -> w)': 
	git update-ref refs/notes/w refs/notes/y &&
	git config core.notesRef refs/notes/w &&
	git notes add -f -m "other notes for commit1" commit1 &&
	git notes add -f -m "other notes for commit3" commit3 &&
	git notes add -f -m "other notes for commit4" commit4 &&
	git notes remove commit5 &&
	verify_notes w commit5

Overwriting existing notes for object ef004cfa88883bb87e030b6196934dd90e3548d2
Overwriting existing notes for object e0851358fb6b4703f23d74ef964bc4491bec7ab9
Overwriting existing notes for object 157e8cc0aeac5befb302d276f2e706112bf6e413
Removing note for object commit5
ok 11 - introduce conflicting changes (y -> w)

expecting success of 3311.12 'successful merge using "ours" strategy (z => w)': 
	git update-ref refs/notes/m refs/notes/w &&
	git config core.notesRef refs/notes/m &&
	git notes merge -s ours z &&
	verify_notes m commit5 &&
	# w/x/y/z unchanged
	verify_notes w commit5 &&
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

Using local notes for 157e8cc0aeac5befb302d276f2e706112bf6e413
Using local notes for e0851358fb6b4703f23d74ef964bc4491bec7ab9
ok 12 - successful merge using "ours" strategy (z => w)

expecting success of 3311.13 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 13 - notes tree still has fanout after merge (m)

expecting success of 3311.14 'successful merge using "theirs" strategy (z => w)': 
	git update-ref refs/notes/m refs/notes/w &&
	git notes merge -s theirs z &&
	verify_notes m commit5 &&
	# w/x/y/z unchanged
	verify_notes w commit5 &&
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

Using remote notes for 157e8cc0aeac5befb302d276f2e706112bf6e413
Using remote notes for e0851358fb6b4703f23d74ef964bc4491bec7ab9
ok 14 - successful merge using "theirs" strategy (z => w)

expecting success of 3311.15 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 15 - notes tree still has fanout after merge (m)

expecting success of 3311.16 'successful merge using "union" strategy (z => w)': 
	git update-ref refs/notes/m refs/notes/w &&
	git notes merge -s union z &&
	verify_notes m commit5 &&
	# w/x/y/z unchanged
	verify_notes w commit5 &&
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

Concatenating local and remote notes for 157e8cc0aeac5befb302d276f2e706112bf6e413
Concatenating local and remote notes for e0851358fb6b4703f23d74ef964bc4491bec7ab9
ok 16 - successful merge using "union" strategy (z => w)

expecting success of 3311.17 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 17 - notes tree still has fanout after merge (m)

expecting success of 3311.18 'successful merge using "cat_sort_uniq" strategy (z => w)': 
	git update-ref refs/notes/m refs/notes/w &&
	git notes merge -s cat_sort_uniq z &&
	verify_notes m commit5 &&
	# w/x/y/z unchanged
	verify_notes w commit5 &&
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

Concatenating unique lines in local and remote notes for 157e8cc0aeac5befb302d276f2e706112bf6e413
Concatenating unique lines in local and remote notes for e0851358fb6b4703f23d74ef964bc4491bec7ab9
ok 18 - successful merge using "cat_sort_uniq" strategy (z => w)

expecting success of 3311.19 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 19 - notes tree still has fanout after merge (m)

expecting success of 3311.20 'fails to merge using "manual" strategy (z => w)': 
	git update-ref refs/notes/m refs/notes/w &&
	test_must_fail git notes merge z

Automatic notes merge failed. Fix conflicts in .git/NOTES_MERGE_WORKTREE and commit the result with 'git notes merge --commit', or abort the merge with 'git notes merge --abort'.
Auto-merging notes for 157e8cc0aeac5befb302d276f2e706112bf6e413
CONFLICT (delete/modify): Notes for object 157e8cc0aeac5befb302d276f2e706112bf6e413 deleted in refs/notes/z and modified in refs/notes/m. Version from refs/notes/m left in tree.
Auto-merging notes for e0851358fb6b4703f23d74ef964bc4491bec7ab9
CONFLICT (content): Merge conflict in notes for object e0851358fb6b4703f23d74ef964bc4491bec7ab9
ok 20 - fails to merge using "manual" strategy (z => w)

expecting success of 3311.21 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 21 - notes tree still has fanout after merge (m)

expecting success of 3311.22 'verify conflict entries (with no fanout)': 
	ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
	test_cmp expect_conflicts output_conflicts &&
	( for f in $(cat expect_conflicts); do
		test_cmp "expect_conflict_$f" ".git/NOTES_MERGE_WORKTREE/$f" ||
		exit 1
	done ) &&
	# Verify that current notes tree (pre-merge) has not changed (m == w)
	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)"

ok 22 - verify conflict entries (with no fanout)

expecting success of 3311.23 'resolve and finalize merge (z => w)': 
	cat >.git/NOTES_MERGE_WORKTREE/$commit_sha3 <<EOF &&
other notes for commit3

appended notes for commit3
EOF
	git notes merge --commit &&
	verify_notes m commit5 &&
	# w/x/y/z unchanged
	verify_notes w commit5 &&
	verify_notes x commit5 &&
	verify_notes y commit5 &&
	verify_notes z commit5

ok 23 - resolve and finalize merge (z => w)

expecting success of 3311.24 'notes tree still has fanout after merge (m)': verify_fanout m
00/59a2ff8988844dd700659efccfd6743632f608
00/f8b74df8cda7203edb38223fe6e88ccf9e4867
02/96deddcaab6e784e59aa39dd1a8d20aefd16b7
02/e82a8dbc4055adb9de6a9659582c396e5a405c
03/0053ed24c57da4943b57df551d320cda39d301
04/fa40d6837978ceac40e98a0477254b79ff6109
05/a2ed5d9c61c6cf4ba308a0e07cac2a429aff65
06/a01ff41646bc048a05917f15e10fee340f767c
06/c14dad0e5fd835685f33ad970d094a43e1cedc
06/e1bb3951a38f7376405b778091cd7eadec203c
09/9a5404b8f2c60ab4b2a7cf1ebc9cdd69fd1fa9
0a/9e6cecb44350f1408a06cd59686b5cb1fa4d79
0c/9e3b6f605491b12a1cde5ec246115233f0f5fd
0e/77e9a284277632ab6590d1f9b0f86d399c461e
0e/7bc46a7af0b651a90cd01852eefac5d764dbc1
0f/63b6e81d3b18fb134161f627844e9e5a2d942a
0f/d39fd6ef715bb3a0b6c163199e572a7daa7af2
0f/dfaad743779a13fea86b5092855460a1d063fe
11/4fc5a9d7890b4a2d5ec8276dda69e37e5e616c
11/768aa383e7caa89f5a859593052eda5782f73c
11/906a39ecfe8796cae0e0853f06c2c335868843
12/5a36192dc2255282d7d1800dec2a340d236a9b
12/907a70732802196c1a0ca807a108eaa29adec5
13/42db3bf0da6aed591bc732c1746073ff06b0f3
15/7e8cc0aeac5befb302d276f2e706112bf6e413
15/b9d90d3c3c6f73deacc4d9c171752b6b0d581f
17/7c1b213fa7ebafc44c50a935e6c176b79360df
18/9334c4b88d99963170854583fc084397152338
19/8490da44fc075db7c29686ed3d75f9eced094a
19/eab2791c316642c620b2494c2dce003beee3d4
1a/50d1559b52e47799dce956a3ef59427b529e48
1a/98e69358bfe77335598c444880178786f250f3
1b/09302a3d79221b5923891bbdecdf6bf5c32dc4
1c/256bbec2954ce4bbd3aa1ec894b00619c87d59
1c/ec8d2b2103afe07295972d513c3f4abc898607
1d/22d9f08076b2a7fc11d1df4fbf5dbb1bc5f77f
1e/1532b6aee517f7d4fbfbc9635d18a10b12fde2
1f/4329544f45b3a5ed56c5a1aca07b22a4999fbb
1f/7c2e169ef55c9e168464bfe083076dbfb6690f
1f/80b24e9c4875cbd559fb8d9434de1850c52c7e
21/eb95433c63f657f4feb61b78b91ed2fe53574c
22/66ca4aaa709bb00bf269087d8e13a54042a93d
22/a8913746147a11a5828aa70482fa6fc1fff2a1
23/6aa09ca3248e4bcde6ed9780fe1e0e17f4e62c
23/c51031b7b5ff34b5cd75bdae5a21bb8dc387ae
23/e92f35ff959ee71439822b19c93027ce677bc8
24/f5d4d513327acad4f00462fe39bc96ed9aec9f
28/fca858f4bdf40159e4fa5a63846b0aceb7431a
29/38a35e6813c7205e7ad62ee37e2a6cc9d36a1f
2b/a7acefc08f3462eb12453a8bb5521544905334
2c/75f53ac534a324324b1ff15cefcd70e7afa646
2d/65622d1ffee087504b1cf59a6d6bdbb9552760
2d/9e37898a0e742a0163855935118ab9af5951a8
2d/c1daa14d2d350677e34ef5fe76509f6e55063d
2d/d18e98a3cc782944a568636289c160d81fd5a1
30/45340fd90419dd2f5690d1c4d8633c70248bd9
32/011ba8b26d0e39c354091b5d18b640bdaa9ec0
32/39026a8940b414239faf0d77e274112d68d96d
32/5dab4afdab3a8b7e7b3691f9e5623d72e6ba95
32/67715033f21dbf69f361ad1f2373e78065949d
34/40ffcbed4ba8626e99d1fd5de37486e336c4fa
35/56cd79d6de9c14ac5e790317e96b48cf28a6e5
35/e40ca1583f193dfb98af23e284a80de6fb7484
36/63d047011bfa8f85a3503c9f54deb1a09d5adf
37/e9a73943fb52b3af6afd3eaa0901992a63cfff
38/07896e9e661a2e84151e396d31fd34796d1f6f
39/65ddde0fd33b440db683e8802fe0ebcb64094c
39/916af9733548bdbf3c7899a97969fdc1ef2e99
39/afd70fce5e8eb6d92a041f1339d96655f2b0f6
39/c5f743e3dc9758a4ac40bfee0fa1d1dcfda822
3b/64761fbc713b657deb969b9855343c0d7eaa2f
3c/066e203e841ea3c7efc4be6d87b5f719704acb
3c/e86c1beb71106283a293ac353ce61ab3096736
3e/c22ce4f6c24d44b2a0a1410a39d1218c184b50
3f/28341a483b5f2d01ffdee0cc680f79f3f7e571
40/b1ffbbe7a0ddad705c9897a8548a62e1f4876a
41/a3870799c63de3688b300bdbaaaa6355ff24fb
42/a4892a296f36eadfceb9d264f6e600703bf688
43/15150561c443e54ab895a121e3c59ee39ff170
43/da7a31eba4b4d3108e782c779cdf94b6bec116
44/e3b4af0aa9e1af2f6db328754f45ac7726948c
46/4aeb5723c1062fc6ad55e3205f956e8a3ef3c5
46/59a8862a02c5227f122d894c2a001eca0d84f9
47/dd87a8e555bd925c86bc96989593e08968b7b1
48/14470a784d66e0318a74ab08ea7202fc3fd4cc
4a/39c901540457bb249c18a4f94a8a0e59f0e6d1
4b/6059c8f1c9b70b70cfcfb4614f49b3c922ca6e
4b/87d5e91601208385a412a90deedaf14279452f
4b/ba369e6095f2c452c4d09f1358acdeaafeae76
4c/236aea851217323502e86ecc922143018837b0
4d/f312eda5f4fe7f8f4a2d9d9ca7b8d0c1fa64f5
4d/f5539d13cfe269d6558fbe78b1329b361b9590
4f/9fd239f6237bbe9dc0cc0949bc09ba2e0a71de
51/7516b737a8c858f54b5ce20ccdf922a9376cfa
51/ce3b9fc8560b53c1e3881e94b2a0c876f18031
52/0400c47b7fe950cac0119f3e0f39f77ea91f48
52/24d3a5dee327bf2df46d0439e377af58e4e4b7
54/6ad61cfdb3824e53156bc95274f47c52009d87
54/95af5c04ccbe4967c06508a4a30fe6944c3178
57/701dee98362e6576ba16ebb0f05c9b9e6c5c41
58/61ff7dcb74969510aa40908555fdfd43e9a607
59/6cfc19975cea95d3f9af95d3ec3822394d17c3
5c/bad73a40be1ee94eebf156cf3f1945aa3dad8d
5d/9d49249a3f5e6f8a2667ab2ef98bd873ea033f
60/1e442f4370db50da9a9266fb36f1df1855da4b
60/e04cb7f2669b592f1197d087b348f6eca6ff2a
62/151fb4b555eb4c92c1942da6b0717af8ba787a
64/fd88beb2d2d9f73e1a90d63c5e5bac131a540f
65/86726dc4df291efa46b1e2587f52c80a3ddbf6
66/2e2425a4c465e97a7dae3a3b7fab0d654ae315
66/babe5b113fb7a4290b198c980240154b392203
67/f28897fa34cf457d8e880b8a60a19bdc771239
67/f6dbb066bdb6658a3ca6f582c9fca2cb8a4b7e
68/bd8cd66f30a076bd6e9f67e9ab51fcca2a4e1b
68/e1d1c671c6161d8e2c149e748ef92bb5cfa665
68/fc05bece2383b55c77ece5900b5f4e4c40ba62
69/d6c2a2fbd139aba6359a9ccbfc0fe6efcdd690
6b/d2133f11f05075526130cb2a97c810b11bcb5e
6b/d2e279447bd40bd32b1a438dfd52a6fe2cf14b
6c/131adc529e2d3a59b7034ced7f99f169598411
6c/616feca94f10bf561251a17c16b7db4b1dbdde
6c/7461a7db47fab144addf95b814379832f4230c
6d/6c8808dfa5be2487402591dded1ad67d908a85
70/3dc5647be0fa24abf8ac8d5e9faed118ea31e6
70/e91c0fd3c8a7c524c051b8e8531c8286523915
72/80e9c59bbfcf7288d0df9636df54527880ee79
73/939a765953cbb48cb8cb1df6ccd062919eded1
74/c28b460bc1f4fc488ae27c0c767c90088ddbcb
74/deae17ac1eecf64f405e05e8e14e0dd6b30543
75/331eaadf68c823f6bc36873b625be470fdb9da
75/337f6597d6a984ce72b370db7ac08b11115954
76/1dedb54cfa4a530d2a8b6f0108b3630536d51c
79/64a617c4a2d1bb45850b48f774fc57b28fea5b
7a/0703d54958925e09013e04bd35cd19a078a90b
7a/a80f07beae9a2f0b8ccd703c32de6744fd051e
7b/21836a584eb1ee8ffecafa2d2ba02109ea2273
7d/815ea015cd551ab5de80879760defb47acea6c
7e/41915dad67d1585d33b56abf2c129432fcf426
7f/78a61938b36a24fd4431a12b22e3dd26702757
81/1322f632d38d635a20a148bb4c5f98b8c31d8c
81/83a1e8450e209464100603f2a9a0b8e574ca43
82/6d4be181ec8e60d819f4ff350dee4e501a4efa
82/85ee71b3bd8ffe7402db5940ebc2da7234a1c4
84/94e16f2929306d0a205b4a9cf34789ec5b52fe
85/94f94aaed77d8365eef9f0ff37e7da9c05d50c
86/700c1d3f3a0a31f2f954bb4188d398af2181db
86/dcde95eebb062f0ccf716c0d3b70614cdb16a6
88/7ac411f4b1bcc710eb561c61d18e3960e817cf
8a/015ae1ae0dac611406357e7e2b7d3b29b51447
8a/2d13657445f6056804c992cd8b46d1f2d9e08e
8a/788640a312a8bbc5bbd1d35b4fedacbcc0c00a
8a/a7d423d5a3e120d4d8c80980791ec2f209f131
8b/36d47cabd9aa85b7a7673e43c603ce6ba76df6
8c/e581e0bef54e004db3bc40b2f1079d24efdb96
8d/7f0f041fa3cb769b4f5f7ab8dea329e031971d
8d/b5bd40cac5f2043a94733d67313e392b5d9dc6
8e/50afaa02fd9bd744f061730cb8eedef4997d5d
8e/c3d3b6b7ee56e23a709f47db60f8561a9698ed
8f/ef91e52599676addb79aba4224c2c0eb8601a3
8f/f04a0672b445210fcb364650d74111c2fd82f5
8f/f5663227734a920cf085f0e0b76d5db14172f4
90/a84eeab5e3ce60421da43a623db6540b688a62
93/28a88723298c70ca14eaaa241613c9574e8b44
93/5152afbc3b4f67bb8d9ccd01b601c89a48e69e
94/1e1bccbf627604ca6af86ad3541dee480aab0e
94/2d87c0b27dd02c55b0112dab49b9be254473d2
94/955c5cd7e5662c6ab40c323ecdfac458c47435
96/3df12cc741f3004f8870a52fc5877bf9ca6013
96/7dd7f09c2f55dfb393c021ab6000a283cf068e
96/939443f19f5d8926e78e906c965b418d4c46d5
96/d5867ce179d5146ed9163e8eba2acabab83122
97/4217f2644a6e6fe401523c4f459f7c3689f9dd
99/decb49e0f56074881831727b906117a326be85
99/f6460ce4758ef60eff7abf0366f7bbfc9a8206
9a/492e74e1d2afda3d4043b8b9968a29c3c13bcc
9b/f30d1676260b8fc8bf519a4af4bc628402e95a
9e/4729bfc0f6b9b5aee0d630bafc299a19fdedf7
9e/aacc50711e24a8d7fb5734444338752cc979a5
9e/ca7d34b36ad5bfcd80ff2ac0b0b9a8fae850c6
9e/f8c372f29f8131739dc8eeab08f4323c54c47a
a2/0d16b51cc9287469c4a2f246acb5f0c21fc098
a2/16dcf6b46f5260b6cfff5721847e010c681e40
a3/60d5a1639d70627543138385781dbee95812c8
a4/d7fcdbcbac2799f0e87a5654df1e4c12345282
a6/f7090037e529277612903dde135889721b8d24
a7/01072f88f0fec15902916cbce38f3549cac0e6
a7/94f10e293f1434fe75766203a47d7e3d4d8c1d
a7/b062b1589ea7e3385124521c2d4751b44b0a4b
a8/60edaf1326a590c32dd4ddf4ea754b8ef5be34
ab/2db5d6e0a134ba2693c7cb74d0f41a95dbf5f3
ac/11791a26f4a82c2d1e2b068c5d9be6564aa2d1
ad/788402e4b81bd4f0fc8d3beba876ac30f2e801
ad/b50ff206b638bb35775e4d8134314a4b669ee0
ae/6bddbb17144c925e1dd30b156fd014e4a5af5e
af/e58fc3dc97f83b97fc5cc4c0bcdc8a2923a536
b3/5c8895207c15e1d8d64ade08db059efd46d634
b3/a6e1262d902a183b6810d77969091aeaa8605c
b4/0c02d0c9d21ad75a00143d3eecb1aae1683c25
b4/a7e9c293e3b1160418b9c2652bdcd028e75742
b8/03a8226968f1f155ebabff1429026ba58ecf94
ba/000ce7dfaa53436a12fcb6f32cb730bc999c58
ba/c54e6b25f59ad97e0be4e6fcda6e53dca6607d
ba/e7d71c1c40d6670a1dfc290c7aba2deea204b6
bb/78195e8b2beb0c006980fb5c6e7e2641524167
bc/4c742dc1b8d1f09af2c510b3dfd730a99e6a8c
bf/a45c5b38c41145cb203209f5bc3dc16599a5e3
c1/06288c0595c7f2acb761e8fcdb39dd3fec3b6f
c1/a639c2cd71f92376aba8b0cdfb7eb42fff1f54
c1/c44c75783ebaad6ce903072e5b14af8f444bd8
c2/1b7a79d2b2746f946b0f5be42fd3e3b59d4544
c2/5b912bd08de3cefe1a673f2f2ca3016d1c1258
c2/9802df7ad706dff5dc666219b1b15e53db20fb
c3/348a7184dbff866f4c5f2f9a82deaa6f93763b
c3/bce4b541feff853989c57fd2dc42c9f99e5f21
c5/b7b50e501d98c810248b15cad01e4f8c3d00d8
c6/1ad84c67d08df0fd04c00b62de24091c9b7383
c7/2685d485e402e73f8cd1cae86797c8eecc8d20
c8/7dbe3c22f24fdf0e49cfaa43508cd524c494f0
c9/3aa29c5e69c1f8c67d2b33f0b5a330d1788526
ca/d27fba7ca666bbd050e21373ad07c0a71b10bc
cd/6aef36b96ac7dbbd94a30646d2cfe45ee8c620
ce/5e3a94a1b9a8e2bb3ea69bc6276ff80b753db3
cf/056ec152b13f4a4eafa61f1499b9beaec3f2c6
cf/b2d40d0416c7b0b60db8199e1b79f640093f72
cf/f68c1b7ed135ab19f2b95c318dc6357ddfdaa2
d0/a377c848e3a37146acd4a8a9b891a5152a9d48
d1/4356539993fb4c70ff4f4deb91eb9097740832
d1/46fd69423d2f3b505d145e67afe5aca02dfe09
d1/7af66ed98bd2bd2e18daa94c6689773993770c
d1/9a07455999d2ab16493ec101e0dbc825206007
d1/b856326cd5454fac386a758ed8c8918f66ba26
d2/5789d47eb4c16b85bf9e39d9d2369a0d855d92
d2/9e6b7e73240371022068cdec11d2d45cc0fc1a
d2/df6c6b7335d4a71baa92177cb78cb13a71bd6c
d3/07d48abf7d014f2adf792ab48e95dd77b3fd66
d4/a19a929357505d72d64fc595a543b2215c39d4
d5/6359cf0df8b4541ccbcad8e0c0a44f822eccf7
d6/1ac6b65471750febac7d69bca2475ad7f39617
d6/1f3c9d16964b53d020e8c21f9ecf7d791fd314
d6/88dc5b7b307160fe01c92bc80fd608bafa923f
d6/e2c3490a50f68c0599b1bfad824631648bfe57
d7/3e59672de81d623318c96702bafe79ca3b01b9
d7/5fa8b23e1610b8f3a1ab1d43e4e6bbe9848d99
d7/944f2f885b1e976e1fd1c0b30b6c172bb52466
d8/425743f77600e4165b653f22ae6fd38027d2b4
d8/5974bb6248f39e51abd6d00737edd6256ee103
da/865c12818c8ef15fc031f832d4399997476a64
db/c93987a2f41d29e7d9ce170c4a66f31ba21a2b
dd/336f1f082af04276827925fc2ad27560e584f4
dd/a5e2303dc0efb1ce21091ac9609ce05f95ca11
dd/f7332ecf611c9ea9b21b96c61b9508c8630258
e0/2dcc2a7fc0426363d2380175ca08cd564bfa1e
e0/59ccd2bf35dbc599e5ce5d39674d926445fc3e
e0/851358fb6b4703f23d74ef964bc4491bec7ab9
e0/9816883b166284284a2848821c7787a74b8170
e2/09a0d469e26a06ce87bb3bbc3429a911e94879
e2/7052bb2c8bb2fd16e0d235c24ca5aad3270e38
e3/640f4f8c0e046c3cd59acdd41e9fbbee959579
e5/4161d6eb21566f231627f845a14c312482ed8a
e5/ce71a5e89216984d0334e19f0b86ee734b2419
e6/405b88cddb9dfa524a7372b58e615bf4cdc730
e6/83dd479d771604c993c307404be2aa9ac45b7d
e7/f1a6cd9114a0ef87ba8fb5e0ff89d05796e059
e9/4fa527e4420309ff4e420897749f95cb552444
e9/cc8b7606e0f912773c1c6aa425319858643ae1
ea/c6e96d764b0c25841dcea3cf4f77b7f889f215
eb/11d8290f638dc8b3b4da8b4a56bb7f5192d80c
eb/91b96510d8485576da96507503e779dece1777
eb/ac41b793d2de79fc57bf0e2215785122c6fbfb
eb/f639d1f0d2f8350a8f8efe5fce50f9387d900e
ec/11fc9e3653f03f1c82ab32ceca3fe90c89a169
ec/55ada1019c2cd250bec8af82e999356d32c713
ee/79ede3b931d2796f1d48176d4859b4dde8add5
ee/e7846fd37a3b6a89d1248e46c9bbc770bfea28
ef/004cfa88883bb87e030b6196934dd90e3548d2
ef/3d66358c62d9f97f72b96ea6b9848414fa8101
ef/8596ac1ab699d85f0de0a3f9be55b2c9876078
ef/cec8d750faa2610959fc2fb4bfd8fc095031ef
ef/f8361a8dab5eb9b5532706575896f3953c3da8
f0/ad20627099424af1d5c762cc2e6975fedc4325
f1/d588e48db9e3d4239673d5030b47b08f849eea
f3/d4332f46fb8d6a96f6cace0fe55fd3a7062258
f3/e3510e3dc4a81d486bd077cb68e2dbb843553e
f4/8cff0f2465f3ea3ad67d6a477c9dafe09b971a
f4/b273648f727cd5f0f92bd3c5cdd67cfed10892
f4/f9a1dc653674c0f7c877dda961925b1515e053
f5/4ef3b60b96982e057642bfcff04ed29caf1207
f5/bf3719d5450931e3979d1b9b140618fe042e22
f7/1f7801a7ff5b40d6e346cd7ddeb492d1d83224
f8/18a85408d9343660a7403290cd483de65f28fe
f8/469687aceb346b06adb42f065dfd586013636d
f8/b4f860379fcc1e6256494d4931ff46ea5852de
f8/fea46bf5bb6034aa77d9c8c8c55953bd694594
fa/37685cddf33cbf37404cb5314ea362557da4c5
fa/e1e08aeadada773d1eb10851e985c808cdf655
fb/209c09b61273835f23b39ce0d07171ab872311
fb/480ccedc5dd98024c22a41e717fcb0ae7fca67
fe/4314bf42a6930ab23ad01b86ba887257ccb576
fe/9977c6f7294face7e7987f2c53bd016d035089
ok 24 - notes tree still has fanout after merge (m)

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3416-rebase-onto-threedots.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3416-rebase-onto-threedots/.git/
expecting success of 3416.1 'setup': 
	test_commit A &&
	test_commit B &&
	git branch side &&
	test_commit C &&
	git branch topic &&
	git checkout side &&
	test_commit H &&
	git checkout main &&
	test_tick &&
	git merge H &&
	git tag D &&
	test_commit E &&
	git checkout topic &&
	test_commit F &&
	test_commit G &&
	git checkout side &&
	test_tick &&
	git merge C &&
	git tag I &&
	test_commit J &&
	test_commit K

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to branch 'side'
[side e9f30f6] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 H.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
[main 0cd72fb] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
Switched to branch 'topic'
[topic 0fb828b] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[topic a08c965] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'side'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[side 9eed7bf] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
[side 4d3c411] K
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 K.t
ok 1 - setup

expecting success of 3416.2 'rebase --onto main...topic': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&

	git rebase --onto main...topic F &&
	git rev-parse HEAD^1 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at 4d3c411 K
Switched to branch 'topic'
HEAD is now at a08c965 G
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 2 - rebase --onto main...topic

expecting success of 3416.3 'rebase --onto main...': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&

	git rebase --onto main... F &&
	git rev-parse HEAD^1 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at f576ef2 G
Already on 'topic'
HEAD is now at a08c965 G
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 3 - rebase --onto main...

expecting success of 3416.4 'rebase --onto main...side': 
	git reset --hard &&
	git checkout side &&
	git reset --hard K &&

	test_must_fail git rebase --onto main...side J

HEAD is now at f576ef2 G
Switched to branch 'side'
HEAD is now at 4d3c411 K
fatal: 'main...side': need exactly one merge base
ok 4 - rebase --onto main...side

expecting success of 3416.5 'rebase -i --onto main...topic': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&
	(
		set_fake_editor &&
		EXPECT_COUNT=1 git rebase -i --onto main...topic F
	) &&
	git rev-parse HEAD^1 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at 4d3c411 K
Switched to branch 'topic'
HEAD is now at a08c965 G
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 5 - rebase -i --onto main...topic

expecting success of 3416.6 'rebase -i --onto main...': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&
	(
		set_fake_editor &&
		EXPECT_COUNT=1 git rebase -i --onto main... F
	) &&
	git rev-parse HEAD^1 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at f576ef2 G
Already on 'topic'
HEAD is now at a08c965 G
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 6 - rebase -i --onto main...

expecting success of 3416.7 'rebase --onto main...side requires a single merge-base': 
	git reset --hard &&
	git checkout side &&
	git reset --hard K &&

	test_must_fail git rebase -i --onto main...side J 2>err &&
	grep "need exactly one merge base" err

HEAD is now at f576ef2 G
Switched to branch 'side'
HEAD is now at 4d3c411 K
fatal: 'main...side': need exactly one merge base
ok 7 - rebase --onto main...side requires a single merge-base

expecting success of 3416.8 'rebase --keep-base --onto incompatible': 
	test_must_fail git rebase --keep-base --onto main...

fatal: options '--keep-base' and '--onto' cannot be used together
ok 8 - rebase --keep-base --onto incompatible

expecting success of 3416.9 'rebase --keep-base --root incompatible': 
	test_must_fail git rebase --keep-base --root

fatal: options '--keep-base' and '--root' cannot be used together
ok 9 - rebase --keep-base --root incompatible

expecting success of 3416.10 'rebase --keep-base main from topic': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&

	git rebase --keep-base main &&
	git rev-parse C >base.expect &&
	git merge-base main HEAD >base.actual &&
	test_cmp base.expect base.actual &&

	git rev-parse HEAD~2 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at 4d3c411 K
Switched to branch 'topic'
HEAD is now at a08c965 G
Current branch topic is up to date.
ok 10 - rebase --keep-base main from topic

expecting success of 3416.11 'rebase --keep-base main topic from main': 
	git checkout main &&
	git branch -f topic G &&

	git rebase --keep-base main topic &&
	git rev-parse C >base.expect &&
	git merge-base main HEAD >base.actual &&
	test_cmp base.expect base.actual &&

	git rev-parse HEAD~2 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

Switched to branch 'main'
Current branch topic is up to date.
ok 11 - rebase --keep-base main topic from main

expecting success of 3416.12 'rebase --keep-base main from side': 
	git reset --hard &&
	git checkout side &&
	git reset --hard K &&

	test_must_fail git rebase --keep-base main

HEAD is now at a08c965 G
Switched to branch 'side'
HEAD is now at 4d3c411 K
fatal: 'main': need exactly one merge base with branch
ok 12 - rebase --keep-base main from side

expecting success of 3416.13 'rebase -i --keep-base main from topic': 
	git reset --hard &&
	git checkout topic &&
	git reset --hard G &&

	(
		set_fake_editor &&
		EXPECT_COUNT=2 git rebase -i --keep-base main
	) &&
	git rev-parse C >base.expect &&
	git merge-base main HEAD >base.actual &&
	test_cmp base.expect base.actual &&

	git rev-parse HEAD~2 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

HEAD is now at 4d3c411 K
Switched to branch 'topic'
HEAD is now at a08c965 G

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 13 - rebase -i --keep-base main from topic

expecting success of 3416.14 'rebase -i --keep-base main topic from main': 
	git checkout main &&
	git branch -f topic G &&

	(
		set_fake_editor &&
		EXPECT_COUNT=2 git rebase -i --keep-base main topic
	) &&
	git rev-parse C >base.expect &&
	git merge-base main HEAD >base.actual &&
	test_cmp base.expect base.actual &&

	git rev-parse HEAD~2 >actual &&
	git rev-parse C^0 >expect &&
	test_cmp expect actual

Switched to branch 'main'

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 14 - rebase -i --keep-base main topic from main

expecting success of 3416.15 'rebase --keep-base requires a single merge base': 
	git reset --hard &&
	git checkout side &&
	git reset --hard K &&

	test_must_fail git rebase -i --keep-base main 2>err &&
	grep "need exactly one merge base with branch" err

HEAD is now at a08c965 G
Switched to branch 'side'
HEAD is now at 4d3c411 K
fatal: 'main': need exactly one merge base with branch
ok 15 - rebase --keep-base requires a single merge base

expecting success of 3416.16 'rebase --keep-base keeps cherry picks': 
	git checkout -f -B main E &&
	git cherry-pick F &&
	(
		set_fake_editor &&
		EXPECT_COUNT=2 git rebase -i --keep-base HEAD G
	) &&
	test_cmp_rev HEAD G

Switched to and reset branch 'main'
[main 3dacdd2] F
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 F.t

                                                                                
Successfully rebased and updated detached HEAD.
ok 16 - rebase --keep-base keeps cherry picks

expecting success of 3416.17 'rebase --keep-base --no-reapply-cherry-picks': 
	git checkout -f -B main E &&
	git cherry-pick F &&
	(
		set_fake_editor &&
		EXPECT_COUNT=1 git rebase -i --keep-base \
					--no-reapply-cherry-picks HEAD G
	) &&
	test_cmp_rev HEAD^ C

Previous HEAD position was a08c965 G
Switched to and reset branch 'main'
[main 3dacdd2] F
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
warning: skipped previously applied commit 0fb828b
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 17 - rebase --keep-base --no-reapply-cherry-picks

expecting success of 3416.18 '$EDITOR and friends are unchanged': 
	test_editor_unchanged

ok 18 - $EDITOR and friends are unchanged

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3417-rebase-whitespace-fix.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3417-rebase-whitespace-fix/.git/
expecting success of 3417.1 'blank line at end of file; extend at end of file': 
	git commit --allow-empty -m "Initial empty commit" &&
	git add file && git commit -m first &&
	mv second file &&
	git add file && git commit -m second &&
	git rebase --whitespace=fix HEAD^^ &&
	git diff --exit-code HEAD^:file expect-first &&
	test_cmp expect-second file

[master (root-commit) 6c54391] Initial empty commit
 Author: A U Thor <author@example.com>
[master e2d0a8f] first
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 file
[master 14cb724] second
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
First, rewinding head to replay your work on top of it...
Applying: first
Applying: second
ok 1 - blank line at end of file; extend at end of file

expecting success of 3417.2 'two blanks line at end of file; extend at end of file': 
	cp third file && git add file && git commit -m third &&
	git rebase --whitespace=fix HEAD^^ &&
	git diff --exit-code HEAD^:file expect-second &&
	test_cmp expect-third file

[master c2f1416] third
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
First, rewinding head to replay your work on top of it...
Applying: second
Applying: third
ok 2 - two blanks line at end of file; extend at end of file

expecting success of 3417.3 'same, but do not remove trailing spaces': 
	git config core.whitespace "-blank-at-eol" &&
	git reset --hard HEAD^ &&
	cp third file && git add file && git commit -m third &&
	git rebase --whitespace=fix HEAD^^ &&
	git diff --exit-code HEAD^:file expect-second &&
	test_cmp file third

HEAD is now at 0c4819a second
[master c2f1416] third
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
First, rewinding head to replay your work on top of it...
Applying: second
Applying: third
ok 3 - same, but do not remove trailing spaces

expecting success of 3417.4 'at beginning of file': 
	git config core.whitespace "blank-at-eol" &&
	cp beginning file &&
	git commit -m beginning file &&
	test_write_lines 1 2 3 4 5 >>file &&
	git commit -m more file &&
	git rebase --whitespace=fix HEAD^^ &&
	test_cmp expect-beginning file

[master 5eeec3e] beginning
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 13 deletions(-)
[master b2ce110] more
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
First, rewinding head to replay your work on top of it...
Applying: beginning
Applying: more
ok 4 - at beginning of file

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3415-rebase-autosquash.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3415-rebase-autosquash/.git/
expecting success of 3415.1 'setup': 
	echo 0 >file0 &&
	git add . &&
	test_tick &&
	git commit -m "initial commit" &&
	echo 0 >file1 &&
	echo 2 >file2 &&
	git add . &&
	test_tick &&
	git commit -m "first commit" &&
	git tag first-commit &&
	echo 3 >file3 &&
	git add . &&
	test_tick &&
	git commit -m "second commit" &&
	git tag base

[main (root-commit) d78c915] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0
[main 244a0fe] first commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
[main f0c2a7e] second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 1 - setup

expecting success of 3415.2 'auto fixup (option)': 
	test_auto_fixup final-fixup-option --autosquash

HEAD is now at f0c2a7e second commit
[main e17f730] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 2 - auto fixup (option)

expecting success of 3415.3 'auto fixup (config)': 
	git config rebase.autosquash true &&
	test_auto_fixup final-fixup-config-true &&
	test_auto_fixup ! fixup-config-true-no --no-autosquash &&
	git config rebase.autosquash false &&
	test_auto_fixup ! final-fixup-config-false

HEAD is now at f0c2a7e second commit
[main f84b6d6] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
HEAD is now at f0c2a7e second commit
[main 03041cb] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
HEAD is now at f0c2a7e second commit
[main bee11d3] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 3 - auto fixup (config)

expecting success of 3415.4 'auto squash (option)': 
	test_auto_squash final-squash --autosquash

HEAD is now at f0c2a7e second commit
[main 4ca9b0d] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
[detached HEAD a9dc0c0] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 4 - auto squash (option)

expecting success of 3415.5 'auto squash (config)': 
	git config rebase.autosquash true &&
	test_auto_squash final-squash-config-true &&
	test_auto_squash ! squash-config-true-no --no-autosquash &&
	git config rebase.autosquash false &&
	test_auto_squash ! final-squash-config-false

HEAD is now at f0c2a7e second commit
[main 8624afd] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
[detached HEAD fdaaec7] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
HEAD is now at f0c2a7e second commit
[main 8332ea0] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
HEAD is now at f0c2a7e second commit
[main 6c41d27] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 5 - auto squash (config)

expecting success of 3415.6 'misspelled auto squash': 
	git reset --hard base &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	git commit -m "squash! forst" &&
	git tag final-missquash &&
	test_tick &&
	git rebase --autosquash -i HEAD^^^ &&
	git log --oneline >actual &&
	test_line_count = 4 actual &&
	git diff --exit-code final-missquash &&
	git rev-list final-missquash...HEAD >list &&
	test_must_be_empty list

HEAD is now at f0c2a7e second commit
[main bdc406a] squash! forst
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 6 - misspelled auto squash

expecting success of 3415.7 'auto squash that matches 2 commits': 
	git reset --hard base &&
	echo 4 >file4 &&
	git add file4 &&
	test_tick &&
	git commit -m "first new commit" &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	git commit -m "squash! first" -m "extra para for first" &&
	git tag final-multisquash &&
	test_tick &&
	git rebase --autosquash -i HEAD~4 &&
	git log --oneline >actual &&
	test_line_count = 4 actual &&
	git diff --exit-code final-multisquash &&
	echo 1 >expect &&
	git cat-file blob HEAD^^:file1 >actual &&
	test_cmp expect actual &&
	git cat-file commit HEAD^^ >commit &&
	grep first commit >actual &&
	test_line_count = 2 actual &&
	git cat-file commit HEAD >commit &&
	grep first commit >actual &&
	test_line_count = 1 actual

HEAD is now at f0c2a7e second commit
[main 671d0de] first new commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
[main b63d836] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/4)
[detached HEAD 8957d3c] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 7 - auto squash that matches 2 commits

expecting success of 3415.8 'auto squash that matches a commit after the squash': 
	git reset --hard base &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	git commit -m "squash! third" &&
	echo 4 >file4 &&
	git add file4 &&
	test_tick &&
	git commit -m "third commit" &&
	git tag final-presquash &&
	test_tick &&
	git rebase --autosquash -i HEAD~4 &&
	git log --oneline >actual &&
	test_line_count = 5 actual &&
	git diff --exit-code final-presquash &&
	echo 0 >expect &&
	git cat-file blob HEAD^^:file1 >actual &&
	test_cmp expect actual &&
	echo 1 >expect &&
	git cat-file blob HEAD^:file1 >actual &&
	test_cmp expect actual &&
	git cat-file commit HEAD >commit &&
	grep third commit >actual &&
	test_line_count = 1 actual &&
	git cat-file commit HEAD^ >commit &&
	grep third commit >actual &&
	test_line_count = 1 actual

HEAD is now at f0c2a7e second commit
[main 3a205cd] squash! third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 76ae28b] third commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4

                                                                                
Successfully rebased and updated refs/heads/main.
ok 8 - auto squash that matches a commit after the squash

expecting success of 3415.9 'auto squash that matches a sha1': 
	git reset --hard base &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	oid=$(git rev-parse --short HEAD^) &&
	git commit -m "squash! $oid" -m "extra para" &&
	git tag final-shasquash &&
	test_tick &&
	git rebase --autosquash -i HEAD^^^ &&
	git log --oneline >actual &&
	test_line_count = 3 actual &&
	git diff --exit-code final-shasquash &&
	echo 1 >expect &&
	git cat-file blob HEAD^:file1 >actual &&
	test_cmp expect actual &&
	git cat-file commit HEAD^ >commit &&
	! grep "squash" commit &&
	grep "^extra para" commit >actual &&
	test_line_count = 1 actual

HEAD is now at f0c2a7e second commit
[main ac978ca] squash! 244a0fe
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
[detached HEAD 8384e84] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 9 - auto squash that matches a sha1

expecting success of 3415.10 'auto squash that matches longer sha1': 
	git reset --hard base &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	oid=$(git rev-parse --short=11 HEAD^) &&
	git commit -m "squash! $oid" -m "extra para" &&
	git tag final-longshasquash &&
	test_tick &&
	git rebase --autosquash -i HEAD^^^ &&
	git log --oneline >actual &&
	test_line_count = 3 actual &&
	git diff --exit-code final-longshasquash &&
	echo 1 >expect &&
	git cat-file blob HEAD^:file1 >actual &&
	test_cmp expect actual &&
	git cat-file commit HEAD^ >commit &&
	! grep "squash" commit &&
	grep "^extra para" commit >actual &&
	test_line_count = 1 actual

HEAD is now at f0c2a7e second commit
[main c752805] squash! 244a0fe611d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
[detached HEAD 41eda95] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 10 - auto squash that matches longer sha1

expecting success of 3415.11 'auto squash of fixup commit that matches branch name which points back to fixup commit': 
	git reset --hard base &&
	git commit --allow-empty -m "fixup! self-cycle" &&
	git branch self-cycle &&
	GIT_SEQUENCE_EDITOR="cat >tmp" git rebase --autosquash -i HEAD^^ &&
	sed -ne "/^[^#]/{s/[0-9a-f]\{7,\}/HASH/g;p;}" tmp >actual &&
	cat <<-EOF >expect &&
	pick HASH second commit
	pick HASH fixup! self-cycle # empty
	EOF
	test_cmp expect actual

HEAD is now at f0c2a7e second commit
[main ddf01ec] fixup! self-cycle
 Author: A U Thor <author@example.com>

                                                                                
Successfully rebased and updated refs/heads/main.
ok 11 - auto squash of fixup commit that matches branch name which points back to fixup commit

expecting success of 3415.12 'use commit --fixup': 
	test_auto_commit_flags fixup 1

HEAD is now at f0c2a7e second commit
[main ea6eb03] fixup! first commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 12 - use commit --fixup

expecting success of 3415.13 'use commit --squash': 
	test_auto_commit_flags squash 2

HEAD is now at f0c2a7e second commit
[main f47aded] squash! first commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)
[detached HEAD 37ab917] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 13 - use commit --squash

expecting success of 3415.14 'fixup! fixup!': 
	test_auto_fixup_fixup fixup fixup

HEAD is now at f0c2a7e second commit
[main 29e8c7e] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 5ead991] fixup! fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 14 - fixup! fixup!

expecting success of 3415.15 'fixup! squash!': 
	test_auto_fixup_fixup fixup squash

HEAD is now at f0c2a7e second commit
[main 4e87fff] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 80022e7] fixup! squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 15 - fixup! squash!

expecting success of 3415.16 'squash! squash!': 
	test_auto_fixup_fixup squash squash

HEAD is now at f0c2a7e second commit
[main f78136a] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6cda8a5] squash! squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Rebasing (2/4)
Rebasing (3/4)
[detached HEAD c2bc347] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 16 - squash! squash!

expecting success of 3415.17 'squash! fixup!': 
	test_auto_fixup_fixup squash fixup

HEAD is now at f0c2a7e second commit
[main 1a59862] squash! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 133d461] squash! fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Rebasing (2/4)
Rebasing (3/4)
[detached HEAD 54cdfab] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 17 - squash! fixup!

expecting success of 3415.18 'autosquash with custom inst format': 
	git reset --hard base &&
	git config --add rebase.instructionFormat "[%an @ %ar] %s"  &&
	echo 2 >file1 &&
	git add -u &&
	test_tick &&
	oid=$(git rev-parse --short HEAD^) &&
	git commit -m "squash! $oid" -m "extra para for first" &&
	echo 1 >file1 &&
	git add -u &&
	test_tick &&
	subject=$(git log -n 1 --format=%s HEAD~2) &&
	git commit -m "squash! $subject" -m "second extra para for first" &&
	git tag final-squash-instFmt &&
	test_tick &&
	git rebase --autosquash -i HEAD~4 &&
	git log --oneline >actual &&
	test_line_count = 3 actual &&
	git diff --exit-code final-squash-instFmt &&
	echo 1 >expect &&
	git cat-file blob HEAD^:file1 >actual &&
	test_cmp expect actual &&
	git cat-file commit HEAD^ >commit &&
	! grep "squash" commit &&
	grep first commit >actual &&
	test_line_count = 3 actual

HEAD is now at f0c2a7e second commit
[main 971af5d] squash! 244a0fe
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 362ab58] squash! first commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/4)
Rebasing (3/4)
[detached HEAD 7af53d8] first commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 18 - autosquash with custom inst format

expecting success of 3415.19 'autosquash with empty custom instructionFormat': 
	git reset --hard base &&
	test_commit empty-instructionFormat-test &&
	(
		set_cat_todo_editor &&
		test_must_fail git -c rebase.instructionFormat= \
			rebase --autosquash  --force-rebase -i HEAD^ >actual &&
		git log -1 --format="pick %h %s" >expect &&
		test_cmp expect actual
	)

HEAD is now at f0c2a7e second commit
[main c73d304] empty-instructionFormat-test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 empty-instructionFormat-test.t
error: There was a problem with the editor '"$FAKE_EDITOR"'.
ok 19 - autosquash with empty custom instructionFormat

expecting success of 3415.20 'autosquash with multiple empty patches': 
	test_tick &&
	git commit --allow-empty -m "empty" &&
	test_tick &&
	git commit --allow-empty -m "empty2" &&
	test_tick &&
	>fixup &&
	git add fixup &&
	git commit --fixup HEAD^^ &&
	(
		set_backup_editor &&
		GIT_USE_REBASE_HELPER=false \
		git rebase -i --force-rebase --autosquash HEAD~4 &&
		grep empty2 .git/backup-git-rebase-todo
	)

[main f0b00cc] empty
 Author: A U Thor <author@example.com>
[main 57d336e] empty2
 Author: A U Thor <author@example.com>
[main 214c1c2] fixup! empty-instructionFormat-test
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 fixup
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/main.
pick 57d336e [A U Thor @ 18 years ago] empty2 # empty
ok 20 - autosquash with multiple empty patches

expecting success of 3415.21 'extra spaces after fixup!': 
	base=$(git rev-parse HEAD) &&
	test_commit to-fixup &&
	git commit --allow-empty -m "fixup!  to-fixup" &&
	git rebase -i --autosquash --keep-empty HEAD~2 &&
	parent=$(git rev-parse HEAD^) &&
	test $base = $parent

[main 0584c83] to-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-fixup.t
[main 25cc60b] fixup!  to-fixup
 Author: A U Thor <author@example.com>
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 21 - extra spaces after fixup!

expecting success of 3415.22 'wrapped original subject': 
	if test -d .git/rebase-merge; then git rebase --abort; fi &&
	base=$(git rev-parse HEAD) &&
	echo "wrapped subject" >wrapped &&
	git add wrapped &&
	test_tick &&
	git commit --allow-empty -m "$(printf "To\nfixup")" &&
	test_tick &&
	git commit --allow-empty -m "fixup! To fixup" &&
	git rebase -i --autosquash --keep-empty HEAD~2 &&
	parent=$(git rev-parse HEAD^) &&
	test $base = $parent

[main 0e6e19d] To fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 wrapped
[main 8874732] fixup! To fixup
 Author: A U Thor <author@example.com>
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 22 - wrapped original subject

expecting success of 3415.23 'abort last squash': 
	test_when_finished "test_might_fail git rebase --abort" &&
	test_when_finished "git checkout main" &&

	git checkout -b some-squashes &&
	git commit --allow-empty -m first &&
	git commit --allow-empty --squash HEAD &&
	git commit --allow-empty -m second &&
	git commit --allow-empty --squash HEAD &&

	test_must_fail git -c core.editor="grep -q ^pick" \
		rebase -ki --autosquash HEAD~4 &&
	: do not finish the squash, but resolve it manually &&
	git commit --allow-empty --amend -m edited-first &&
	git rebase --skip &&
	git show >actual &&
	! grep first actual

Switched to a new branch 'some-squashes'
[some-squashes f124f9c] first
 Author: A U Thor <author@example.com>
[some-squashes 1adce10] squash! first
 Author: A U Thor <author@example.com>
[some-squashes dbd878b] second
 Author: A U Thor <author@example.com>
[some-squashes 57e67c3] squash! second
 Author: A U Thor <author@example.com>
Rebasing (2/4)
error: There was a problem with the editor 'grep -q ^pick'.
Please supply the message using either -m or -F option.
Could not apply 1adce10... [A U Thor @ 18 years ago] squash! first # empty
[detached HEAD 7723319] edited-first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 16:09:13 2005 -0700
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD d77d711] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 16:09:13 2005 -0700

                                                                                
Successfully rebased and updated refs/heads/some-squashes.
Switched to branch 'main'
fatal: No rebase in progress?
ok 23 - abort last squash

expecting success of 3415.24 'fixup a fixup': 
	echo 0to-fixup >file0 &&
	test_tick &&
	git commit -m "to-fixup" file0 &&
	test_tick &&
	git commit --squash HEAD -m X --allow-empty &&
	test_tick &&
	git commit --squash HEAD^ -m Y --allow-empty &&
	test_tick &&
	git commit -m "squash! $(git rev-parse HEAD^)" -m Z --allow-empty &&
	test_tick &&
	git commit -m "squash! $(git rev-parse HEAD^^)" -m W --allow-empty &&
	git rebase -ki --autosquash HEAD~5 &&
	test XZWY = $(git show | tr -cd W-Z)

[main 8b8914f] to-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d639a09] squash! to-fixup
 Author: A U Thor <author@example.com>
[main d15a015] squash! to-fixup
 Author: A U Thor <author@example.com>
[main 46ee2c5] squash! d639a0930479ded42c578b382731e0c4be6ca4c3
 Author: A U Thor <author@example.com>
[main 2d365fb] squash! d639a0930479ded42c578b382731e0c4be6ca4c3
 Author: A U Thor <author@example.com>
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)
[detached HEAD fe38ed4] to-fixup
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 16:10:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 24 - fixup a fixup

expecting success of 3415.25 'fixup does not clean up commit message': 
	oneline="#818" &&
	git commit --allow-empty -m "$oneline" &&
	git commit --fixup HEAD --allow-empty &&
	git -c commit.cleanup=strip rebase -ki --autosquash HEAD~2 &&
	test "$oneline" = "$(git show -s --format=%s)"

[main c250b58] #818
 Author: A U Thor <author@example.com>
[main b6ca56d] fixup! #818
 Author: A U Thor <author@example.com>
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 25 - fixup does not clean up commit message

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3419-rebase-patch-id.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3419-rebase-patch-id/.git/
expecting success of 3419.1 'setup': 
	git commit --allow-empty -m initial &&
	git tag root

[main (root-commit) 8b2b4f6] initial
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 3419.2 'setup: 500 lines': 
	rm -f .gitattributes &&
	git checkout -q -f main &&
	git reset --hard root &&
	test_seq 500 >file &&
	git add file &&
	git commit -q -m initial &&
	git branch -f other &&

	scramble file &&
	git add file &&
	git commit -q -m "change big file" &&

	git checkout -q other &&
	: >newfile &&
	git add newfile &&
	git commit -q -m "add small file" &&

	git cherry-pick main >/dev/null 2>&1 &&

	git branch -f squashed main &&
	git checkout -q -f squashed &&
	git reset -q --soft HEAD~2 &&
	git commit -q -m squashed &&

	git branch -f mode main &&
	git checkout -q -f mode &&
	test_chmod +x file &&
	git commit -q -a --amend &&

	git branch -f modeother other &&
	git checkout -q -f modeother &&
	test_chmod +x file &&
	git commit -q -a --amend

HEAD is now at 8b2b4f6 initial
ok 2 - setup: 500 lines

expecting success of 3419.3 'detect upstream patch': 
	git checkout -q main^{} &&
	scramble file &&
	git add file &&
	git commit -q -m "change big file again" &&
	git checkout -q other^{} &&
	git rebase main &&
	git rev-list main...HEAD~ >revs &&
	test_must_be_empty revs

warning: skipped previously applied commit 463cec6
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 3 - detect upstream patch

expecting success of 3419.4 'detect upstream patch binary': 
	echo "file binary" >.gitattributes &&
	git checkout -q other^{} &&
	git rebase main &&
	git rev-list main...HEAD~ >revs &&
	test_must_be_empty revs &&
	test_when_finished "rm .gitattributes"

warning: skipped previously applied commit 463cec6
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 4 - detect upstream patch binary

expecting success of 3419.5 'detect upstream patch modechange': 
	git checkout -q modeother^{} &&
	git rebase mode &&
	git rev-list mode...HEAD~ >revs &&
	test_must_be_empty revs

warning: skipped previously applied commit 471e427
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 5 - detect upstream patch modechange

expecting success of 3419.6 'do not drop patch': 
	git checkout -q other^{} &&
	test_must_fail git rebase squashed &&
	test_when_finished "git rebase --abort"

Rebasing (1/3)
Auto-merging file
CONFLICT (add/add): Merge conflict in file
error: could not apply bb8cb29... initial
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply bb8cb29... initial
ok 6 - do not drop patch

expecting success of 3419.7 'do not drop patch binary': 
	echo "file binary" >.gitattributes &&
	git checkout -q other^{} &&
	test_must_fail git rebase squashed &&
	test_when_finished "git rebase --abort" &&
	test_when_finished "rm .gitattributes"

Rebasing (1/3)
warning: Cannot merge binary files: file (HEAD vs. bb8cb29 (initial))
Auto-merging file
CONFLICT (add/add): Merge conflict in file
error: could not apply bb8cb29... initial
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply bb8cb29... initial
ok 7 - do not drop patch binary

expecting success of 3419.8 'do not drop patch modechange': 
	git checkout -q modeother^{} &&
	git rebase other &&
	cat >expected <<-\EOF &&
	diff --git a/file b/file
	old mode 100644
	new mode 100755
	EOF
	git diff HEAD~ >modediff &&
	test_cmp expected modediff

Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 8 - do not drop patch modechange

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3305-notes-fanout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3305-notes-fanout/.git/
expecting success of 3305.1 'tweak test environment': 
	git checkout -b nondeterminism &&
	test_commit A &&
	git checkout --orphan with_notes;

Switched to a new branch 'nondeterminism'
[nondeterminism (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'with_notes'
ok 1 - tweak test environment

expecting success of 3305.2 'creating many notes with git-notes': 
	num_notes=300 &&
	i=0 &&
	while test $i -lt $num_notes
	do
		i=$(($i + 1)) &&
		test_tick &&
		echo "file for commit #$i" > file &&
		git add file &&
		git commit -q -m "commit #$i" &&
		git notes add -m "note #$i" || return 1
	done

ok 2 - creating many notes with git-notes

expecting success of 3305.3 'many notes created correctly with git-notes': 
	git log >output.raw &&
	grep "^    " output.raw >output &&
	i=$num_notes &&
	while test $i -gt 0
	do
		echo "    commit #$i" &&
		echo "    note #$i" &&
		i=$(($i - 1)) || return 1
	done > expect &&
	test_cmp expect output

ok 3 - many notes created correctly with git-notes

expecting success of 3305.4 'stable fanout 0 is followed by stable fanout 1': 
	i=$num_notes &&
	fanout=0 &&
	while test $i -gt 0
	do
		i=$(($i - 1)) &&
		if touched_one_note_with_fanout refs/notes/commits~$i A $fanout
		then
			continue
		elif test $fanout -eq 0
		then
			fanout=1 &&
			if all_notes_have_fanout refs/notes/commits~$i $fanout
			then
				echo "Fanout 0 -> 1 at refs/notes/commits~$i" &&
				continue
			fi
		fi &&
		echo "Failed fanout=$fanout check at refs/notes/commits~$i" &&
		git ls-tree -r --name-only refs/notes/commits~$i &&
		return 1
	done &&
	all_notes_have_fanout refs/notes/commits 1

Fanout 0 -> 1 at refs/notes/commits~202
ok 4 - stable fanout 0 is followed by stable fanout 1

expecting success of 3305.5 'deleting most notes with git-notes': 
	remove_notes=285 &&
	i=0 &&
	git rev-list HEAD >revs &&
	while test $i -lt $remove_notes && read sha1
	do
		i=$(($i + 1)) &&
		test_tick &&
		git notes remove "$sha1" || return 1
	done <revs

Removing note for object 294487610d9e2f1885f32c5aa8c40e1feae544e6
Removing note for object 264d6d5a375b9b4a748e868f8887139e144dd9ac
Removing note for object f4791ca4424bf830c9c4c2fae376f8c17584ecfc
Removing note for object 04413ee0c628c2149ce195709e68ba9739cecaeb
Removing note for object 2cba5326a57bff88235ffe0d680843c3a875fdc6
Removing note for object 98c3a61e7f6474b9edadcd9fd0e2c580fbff9f8c
Removing note for object 69dd6f05596ba7dd52aece2e66312d72193f2404
Removing note for object 06faaf7ec015a9d97368c2529bdc8cf31baf70bf
Removing note for object 95a7e3e972db58539e6ef3cc361cd61e31b17db7
Removing note for object 136b29822535a2e998f2926ee16b1f3802c88b3f
Removing note for object a9d5012931c30040ee5e7b0b8ab8eaa87dd2df9e
Removing note for object 34b0e5146919d1b0b079f4685de49d08d602c765
Removing note for object ba8e5e2e75a66e54fa2a999671e3d602548b0fad
Removing note for object 84773486b2f3c371913c2745322c02efe920976c
Removing note for object 30f4912988cb9df51d6bbec5796642f1b1a9a2fc
Removing note for object 18b7dd8f1690e8cb8399edd2d469cebf6051c8fb
Removing note for object 80a8f06bff8197866fb6c2b10e529a67b1d0ed57
Removing note for object 88d59face24312f906679c56c1c00f41a57aed81
Removing note for object e591b6658f32d09dc92aaab7f518076d7219baa1
Removing note for object 7194f853be5be737ab89c55ed8ef76999c694cfb
Removing note for object 785a3db61beba59185813dd72a4f49cb960ba939
Removing note for object 3dbbb4bfb12466f2662430857727af32dc37b30b
Removing note for object a7e4d6ced9493bec81fa7a326a50a053b7dd8e47
Removing note for object 17d18cf173f34f0c977c7d7410432c4c052e9a35
Removing note for object 0efe5818f127e837f8c49e7ee292f2e3827b5d8c
Removing note for object 1329c14017e18f7f75c56c6132d5070386191590
Removing note for object 4fad07113f4b21f3d3aba2033c13576d74ed0159
Removing note for object fd7060211fed315790db481cca508f2a59cd33fa
Removing note for object 24bcc65e72949c7aad1e00a0ae648eb27b94a801
Removing note for object 74017d116189d350e027f6a2fa197d76a98cb90c
Removing note for object 829520f74568ec4a7daa4344d4e53612e8e449c6
Removing note for object fc9c45687e413c9199ed2e2dc13732b0eee1417e
Removing note for object 68f9d6e536ae8b39e2be3687534f96fb0cedd413
Removing note for object 85492e5692be8052265ab35b1fb32bd632d7a034
Removing note for object ed3b17f5fea5faec967aea73fab660c3caa4ec11
Removing note for object c0038d5ca05de0848b621fe56fa32a95f56ac8bb
Removing note for object 5805c46d394e6f09d122e29bfc8bc4677227c959
Removing note for object 82a44ee370b37d4fcd2955c7dd4f59f66bb85055
Removing note for object bebeed1d6e5df5f8e4519c02be6e36baef2a2b9f
Removing note for object 84489b9c59967356c347b503e7be812344bec157
Removing note for object de6bce36f8dbcebae05182254f9839ae88a89519
Removing note for object 028084dc54b6b3a96adb0db4447c0befbfaf0f77
Removing note for object b8f0c408564c037d30c51346cc54e5bf9b39a223
Removing note for object 2ca369ce379b96c92fd48802bf5ca62c31495871
Removing note for object 6c623624f0cfa64dcf5e0670626a9af249ce8fce
Removing note for object d07926d68d5ea629bdfca003fd6dd71f4efdde8a
Removing note for object 6160cde4d6c969e42f949a8d975e72f82ec65ff9
Removing note for object 73b405a748dba3b757b1c4cfbca475d1a66a1396
Removing note for object 8bfca76ecc8ffdd1c73e247e20dfc380deec169b
Removing note for object 49d5b21b59db4b0d7e92d8d58b548c7c7f3ceab3
Removing note for object 092fdff4f714d2ade8c2a5e0b7230b96e58fa202
Removing note for object 8e716f1f338b7cde850738a7bcb8fc08458f6da8
Removing note for object cbbd557f18677bca5328466c4649d42ca38ecd0b
Removing note for object 3b5f892711e112d1ffe60cc652782db8f5436172
Removing note for object d00c7dd01101c3f61fa408d9609bd0f34189ca0e
Removing note for object 2d5dfff9582df22365e988c1dbf26f310ac11018
Removing note for object b081e0909ddc4f0cd0f880a4151b7a0f93ff7c02
Removing note for object 72db531cec33db2b935aeefaf533d7cdc8e1e498
Removing note for object 863bdd410c7d0f81d93dadbb5129004563987cdd
Removing note for object 53c002754b07b01a6c7b0f25e55ce49452e78998
Removing note for object 37d37991e387d94d7470e8e1f6d2554e027eb040
Removing note for object c2a4ca4a2728846813f90dd0f36f5dd413572e53
Removing note for object c4b7e09bd15665daf91c5a420a56dd3721ca8c09
Removing note for object a14371c8166385886904c730e0a531b5ac0dc1d4
Removing note for object 3595eeb0316642224135dda2d7f4e2571d13f960
Removing note for object b7d693fa9562fb10a24385800b92e21d77158cab
Removing note for object 0b55bd97fdaa73e8998658138997750f9204f709
Removing note for object 7581409289445aac9cad5685242225b69438bdb5
Removing note for object 63e0354a05c6f2bd3ee0454b7c8a1b6ad55bbb39
Removing note for object e122ffa8e4b75eca6c0a6138dbbbbd8fd90db924
Removing note for object 12b5dbefaa4c85ef26c42c14bb3a48493fd79aed
Removing note for object 6187ce5edf2f7d4d97721c6a195e9085ee0b75e0
Removing note for object 0b29c48dd6f47ab350c0268424c5912ca68eec05
Removing note for object 00225fa0566873e04cf85786bfcdfc8d5a1fb68b
Removing note for object e46b064f913b6c0ec92bdb2e3cdc956a9ad929d8
Removing note for object da6a0c7b416f1929e37ad4ab7aa9a43e40bba3a4
Removing note for object 0e7679756bda78bcb761a92425082d33ae2eabd6
Removing note for object 3d884933f1ff6c4b8d3ffffb2c1985295ffc7578
Removing note for object eb5fad11a1860cbc711e7aae5f815d49739027f9
Removing note for object 6c5b7cca48d408e6597aae06ac190bf435eea0af
Removing note for object 9ae6abb2dd899f3453bd4a42c6083d29e5ee2c25
Removing note for object 1c2be6e6b8a1512b49e2d0ce4f320ac62663bd7c
Removing note for object 91ba16e88693278bac6ea5b6652be27d519c6284
Removing note for object 04891a4865ab739593d7f5d934906d805027dcbd
Removing note for object b727600ac1fd560a92140c46077ce7f8a20f8db2
Removing note for object 29b24dcd761b95b975c46ffa137d98f74d956875
Removing note for object b1a3d0c9ddc40d03b3d59b6c7930df4012a61d0a
Removing note for object 3698be91e4a9197cfefba28d171e52fc0fb571fa
Removing note for object 85388b2ffc9342b1a9237c75f3f7cb79cc410e64
Removing note for object 0aed77a3e97c3854fcd751b1f94ecb6756725974
Removing note for object 011539f0b7e8e95c22436d224695aae6c48bb3db
Removing note for object 43aa9d033a8bbfa9f3e8b0d7c9a715d1d0096c05
Removing note for object c35ea1a727952227b88357433be4bdfb30e55856
Removing note for object 46f4a82d64902ab63e4d7de6c78da677c3b20f8e
Removing note for object 695cbdb56848e3e0e403da2ea9ef18d665481c3c
Removing note for object 7c7ef41170927a3a7999968540534c70f68ce2c9
Removing note for object e48a2c3b1b9c23598053a0416d31f9935be4ce83
Removing note for object 6c66c6ef6b7c907f347fca51f1dc779eee27f35e
Removing note for object 1e436c8a45959f2f4dfda6256f00caab47c79e7b
Removing note for object 28a86738bc402f34c2b895820e4710f9b7517ce1
Removing note for object a4075445b64d0bfb6d601a08598d4c346391ba6e
Removing note for object 5136d8fd93d2016a0d59ea94013508fc771d7412
Removing note for object 581964916f22d8ed9e54c42a5f02ebeeff208a54
Removing note for object 408b845562d9579cac992b13dcf78c7bc351b83c
Removing note for object f6606205b38996de225eb0d20a4436613226c5b4
Removing note for object 69ad0c3f89c0348adaeb2b245f24678ff8fc73ef
Removing note for object 16d4da4076e02831d14264341b46adc23de10d31
Removing note for object 61245559e67f9f9ed73efe2bc7ba05c3b0dc61a3
Removing note for object f5fc94c753f4fd9f47311e9a96823508fdf12867
Removing note for object 4bf49ef5b8de8cf570854c1c5249b17dbac4da6d
Removing note for object 2b5e34f8ec5a967a8c118b504cb7c9f82425d307
Removing note for object 71feadd9546a386bba0956643a7618130275ca2d
Removing note for object c435f7d2da121e6ca478542d81a09b4cfb1e6d40
Removing note for object 83b6710b31fe03be8147f88d5679dc1e7d6b93e7
Removing note for object a5cec4217c4c9459acd08946a5936109f92b234a
Removing note for object 3466f2562096ec7fee77cfcaf975e045d5ba8bd8
Removing note for object 0356dbfd30b5c8109865b192297b202b8d4b93b5
Removing note for object ef04490e0dd39166aa62f7be4cbb8a42c9e9b876
Removing note for object c6251d973d7136acf8b2817e8275fba9e0bb102d
Removing note for object a18e024b9c635d261c2f54612b342a67928b8068
Removing note for object 9d03e90800a10023bd868e1e7fee6a0d54bdb972
Removing note for object 41d89def92a9052d7cc2ae1c673e807f7ee2bc15
Removing note for object c1c691f1ee137258e216986125ad7169bbc9944b
Removing note for object 5536984fddffdfdad3a5007221f3b08dc46e32eb
Removing note for object cd905ab02b0fbdec5407cc7c454d959645e4fabb
Removing note for object 8b33d27218a7e8cab8a6d2ff5eddd348c36029ba
Removing note for object 81491394bf0249b2639a9f4f6bfc43c0e38370d4
Removing note for object 76bff28d5965aaff4f7ba16e4b7a4bfb05bdc334
Removing note for object e3504135096a7ca00095a761fcf71ecdd2794043
Removing note for object 74125e7e86a34c7385ea36bff5c5e8f481b423c5
Removing note for object 5fed9794bc006a7326587300052cb7e44639412a
Removing note for object 3510fb1bd504c9221f9679da3fdc2845cf21e140
Removing note for object bf473ccfa7fdc1e61f62f9c874238a0de5fc513d
Removing note for object fc327306de924737f321c9baeefdcca0df16d2bc
Removing note for object 2c10f7b0afac72972ec95cb4d308ba7421755512
Removing note for object 297d6cb08dee5d25ce9ba83eecdeaf449da865bb
Removing note for object 545c4c1b43dcc4d0a99cd98fcda0bae1005a78b2
Removing note for object 4a996de24e1ffe26f732c854882697c1ad516386
Removing note for object 844420c079e48a5166c01a85a790ce6bdeb873bd
Removing note for object 023515e4ad959899e29b27f5c5f83c8a1a2de28c
Removing note for object 7585ebad749b486c7ebf9f8e0855ac3099d09a38
Removing note for object 413376f50b0489aaecbce66bf7b54b98e6550e03
Removing note for object 2873e3beec9c3d56bad8f485e61d6a2cf9a16c8c
Removing note for object 61f865b2efc1072fdb8ed9fe06118feae86e84f7
Removing note for object 1ea06f1458f13efee0b785253f989b694f938edb
Removing note for object ce8b86ae2c160f88e1c799aa6837f6c773956227
Removing note for object e3306eaa12a31c691d43bbca19f98a2d9dab4ba9
Removing note for object c2fb991d7ec9543b161f4f98c624929675ff4c5d
Removing note for object d11385ba15c9c5e331981f68dd6bd7164ccf3f85
Removing note for object 6f891e8ffe677a4c89d16dd2c665ee0e14c7a299
Removing note for object ed339d1d371f85637989f68d0eb557f351577a21
Removing note for object 4750ac4f1a2e220c1e8f6640294532c98d99f200
Removing note for object f292c7df6101b6388f4d124dd0e359f53665aeb9
Removing note for object 6457f18ae180c94ff5f7e0ea32f5d33194813bd5
Removing note for object 80dca81cb5b833d22335d913b49a273d34062db9
Removing note for object c4a04fb500fde0e2ec185ceef5e830841ef81190
Removing note for object 37f7f6d33ccea935fd3052dcf56f0702a5688a56
Removing note for object b174abe99a10da71c24f307c4be43b8fd13ddd81
Removing note for object 521324fde746e0ed1d52d3da451c3d5ce0a51853
Removing note for object 22145dda21dc965767c9837a456e045b0b905d72
Removing note for object 65cd0782f778269cac585ca0cfceb3b65b4b0136
Removing note for object 9f0e002cb37dba666555cb19d9825d53bc1efc7e
Removing note for object ff7230819570fd6ca726ec2870c7acdbc33475eb
Removing note for object fdf030fde5370388b806af92806e62e2bfb1bb11
Removing note for object 5bbfd9a6221cce07357876e6702a17e7a96faae5
Removing note for object 5863cde659f7dda95d24a43459f482038bbe8eba
Removing note for object dcbb95084ba98cb6a950efc8a6f340b84dee87c7
Removing note for object 2f60ea03c053734f2cde5a7f31ace9bac1ee19da
Removing note for object 7dea3506366b9b27f57bafeb6e5bd508b00c5923
Removing note for object 589a50a5e7daf7983baf43177e3fab221b3f0781
Removing note for object 9a87326a7e4fec8672ce330e076fc6dba7c23366
Removing note for object 177838d572b4628311ae9ba649a598c0627c2088
Removing note for object b00c6f3383767d26b6b6af4057c6c9e56ec72803
Removing note for object d856441fdb792888b635d1f62bfba9e64b772960
Removing note for object 3f023909b06329744f931861ebb9c9bd12da1b84
Removing note for object b161b8a0267657e40c21ea0a7637c9da05cb6234
Removing note for object c3f42ce00ec78e8c5653eee37687d86870c1d2c5
Removing note for object fc070b682384d45f45798cb8883f6f779a8d105f
Removing note for object 794e608cc670532a53e521b37080ac4fb39e5775
Removing note for object ce4d96ea40482e50d733d943d3aa1326c5f27f20
Removing note for object 93d93d194fd2c9309ad75ba0ac36eed962540471
Removing note for object f5ddfa52c42f3fe5bc24b1d7436d269718fb4ec6
Removing note for object 84e47a901d70a1b913359a59b0eb4128921d6764
Removing note for object 54a943437a41a035ae36187788f7863a14677754
Removing note for object 6a28e6066c6213cc0535eb58ea15cc26cc0cb17d
Removing note for object 7d8ba8659bb15e61daf37be731562cafc8701af4
Removing note for object c2a06db27f237154cdf5ae99e9336ad7ac101c75
Removing note for object ebcbe749543cb23055bfad287b08edd5dd506e49
Removing note for object 22e47c76aa2449f554aa282f61ce8005a9da279e
Removing note for object 81090cc10824f5f6a229195d061d5a062241f64e
Removing note for object 27437784483a95ad6a86161d4e6082efa3fc4b99
Removing note for object 1becd0970add28104ec7023fa8660f59c8dc85e5
Removing note for object 975edfc698cb84099be9cd6f54b94c6b0bdfbf3e
Removing note for object 698172dcc506d88c5d745f6b441ce316e908ac25
Removing note for object 6c5035c5f925f25c4081fe33bea2e87bd4344eeb
Removing note for object 7a1b8459367f67da01cbd0852e27aafa063eae5b
Removing note for object 34a270c65107179578d5cf71f88997941cfceb68
Removing note for object e1ca3debff6d7f8751a0c43f8e649c37c39ddcff
Removing note for object f2cd69f72028b7f0334dc46c677dbf6e34c64ff9
Removing note for object b5b96cb5f658ff89cad9d65d3fe90935741d4280
Removing note for object 3d231f1ae4643fde656b5195e8a44598a524346c
Removing note for object 92aff6e6403899d4467dca0759a5f9ca9f6083e8
Removing note for object d7d8923b4e4c23a1f6a66f072403269416d7bdc5
Removing note for object f5dbbac5c21c898c8673760bc67123f9ca551f62
Removing note for object 671b9a1a077aafd0194137ce810e99e8e17aabf7
Removing note for object cf858fab0fd223f87642d61c2dec71777d597370
Removing note for object 404b958c22b0eec12dd009d4e6bc043a995096ad
Removing note for object 30e25d85636fbb5a3962893e97204525d507fe5b
Removing note for object 68fdee2a017d2b19536a79794a90ac13ad3c9120
Removing note for object 2beb65e939af69464e8ed5dcdd4c10f8ab65110e
Removing note for object ae862168e1774f973a69502c447480f81c035c00
Removing note for object 422f97df0f1f254299575475841c717032a6ca32
Removing note for object f7b9f4caf310f040a99a8117be5928e95be0b97e
Removing note for object 7bb335e0bde4008652eb5f427a4a7390ae288309
Removing note for object f17072c2db1767d4e1c41e0411294506f014c2af
Removing note for object 99c50e745458fd2faf1c0f55273b7512348d2ddc
Removing note for object 9aa56e0371ac9a4a4f10b34878d53d83ca8190ca
Removing note for object 8738fb580d364e7645f0f7e0206dd1f000f03c84
Removing note for object 2db58456e56e9ee9f425944d1c7743519a24784d
Removing note for object a33d485949f214abc9fbb192ff36632eaa4cf0b3
Removing note for object 8e59f0f4fc11cc909b24f15a6ef1b6e1a3fa7bc8
Removing note for object cd604ed04d960a2e7fead48dd5d1e3fd9ca7886d
Removing note for object 0c320249ca0ddd30c6fc90374656f6331633280a
Removing note for object f15d09c23da1e142fd85798fbd4ac0b29cb858f3
Removing note for object 0a256346bb1c2687845aca1e06c2dcb5d1ac9cf3
Removing note for object 03a07cdc62a571762b99320c43428698b2d3d91b
Removing note for object 86b4ee723d450722f69493786dc1a1b3c85f456b
Removing note for object 5ef6c6a2209bc341ee9300945ee24397668600e9
Removing note for object eee7b5e88db8d2f4eeff2bfd4ced42dc2b77576c
Removing note for object 331c2d29861aa09a00a73056e70f156650ef1b4a
Removing note for object bb32de951ad1f794e77afa53a31aa9433bfdb121
Removing note for object fe8c44ed3546c964bd8398f5fc0c8d5ee01c08dd
Removing note for object ac00acde313fa0157a4805bdbce2f22d7e57750a
Removing note for object 1adc2b3c4610b4da4b2c00cbf153395bb5f72ed0
Removing note for object 59238cad6edee95b454423e535876306852f6b93
Removing note for object 4f5bde2686729dfaa60e10051820409fc7102027
Removing note for object 07db9a697feba6bacfc603c13c8c184c376c1fde
Removing note for object acd7eec9dcc24a3fda4a46d9cf11056f9fb51592
Removing note for object 198c967016d1d00e0fc01d66d500fec19cb672e2
Removing note for object 6d7b633c45a92a296093e657ced14d46d8e86970
Removing note for object 8f6653f2c207619ceba3794249d8bac152454b16
Removing note for object c04389fb08740d6a3df7158a5e4843bdc07d2539
Removing note for object 77cd9bf11d2a4b1577dbcb65eafef24ca5f8d64c
Removing note for object 4d2fca6077788dcdecd4ef82eb45155d3d3c6ae9
Removing note for object 7f5b0d2394f7a4410784788eb55a86357795e0ee
Removing note for object 77c91abace28d046f8f08482515dd4d0ee20e771
Removing note for object 407c31999146268ab83d71891c905685839800c9
Removing note for object eb3c3aede523d729990ac25c62a93eb47c21e2e3
Removing note for object 7d116c2f10b15fa50a8e9f229b3b81c5be8980fa
Removing note for object 8b658fffa694c94a228bd277048256f1ede590d1
Removing note for object 0cb7eabc69f7cd5f3859906e5aa190bf6a0080dc
Removing note for object 1270dedbb9873b651b7661f6fd7f20eca25dcce9
Removing note for object b944dbe8ce8fa4df89750bdf3a6cd8828ff2f1b9
Removing note for object a8b0b847225e38e28d972bb583db100457dbf2c0
Removing note for object 46dcf25ab1fb7b08d57dfef57c2d4ef9cdea0368
Removing note for object 1ef946fbe3fce53728ce0f4e3f3b686f29783ea9
Removing note for object 9fb987e1900004b51a70d9945feb70d1a26c5db9
Removing note for object 697e0a1102060a6a7f0e78c614e6e088e22a746d
Removing note for object 5c65b7962b5bb7291f385885ae0fe5dc5dd1f9f9
Removing note for object bdeafb301e44b0e4db0f738a2d2a7beefdb70b70
Removing note for object 51b4081b24cd2ae32dda79a6bf89c6ca47cd0e19
Removing note for object 6699f4279478278b1b456670806c5114e5b94cd3
Removing note for object 24a6294035c71abc89705f20573835a048058e48
Removing note for object 68e303067eaade6915640259529f90f06a3d723f
Removing note for object 47797ab742998acf558ec5ecd8f73a170767322d
Removing note for object a68559cad834c4bf10f897cacff96708fd4c9a06
Removing note for object 257cfeaa5d3091ff76387dc6129e83307e8ec0c5
Removing note for object f133b89cb79d15f0d85a19317b2dbc5a871c2039
Removing note for object bff2d39b4f7122bd4c5caee3de353a774d1e632a
Removing note for object b2f9acae37b0cff7904de95d05e6077d318696c2
Removing note for object 46f7cc54c0193d02dc4dff1c8f998cfebb8c17b8
Removing note for object d38ec8f851adf470131178085bfbaab4b12ad2a7
Removing note for object 597947c97e89280e1eddffc4c30e36c1cb5e8882
Removing note for object f297f34cfbd904559c0d202b578b112ef5ae50c2
Removing note for object edd7609018ee7927fd1f8604ea3223e98a44a245
Removing note for object 03f8530d6eb3617ab8c874b47651509115d54b5e
Removing note for object ae3ed93531b892b72e7ae1125b3c0e266df4ab70
Removing note for object ac647561477b7eddb3807defcb481b30af7db978
Removing note for object 3f096680dbfb873aa9008e9e22559cc94c4a634e
Removing note for object 7d50e571ffcb9d83478504d8fdd403aecd8df6a3
Removing note for object 19eb0d4282bc5d4e46ec80864a71cd2e48bcf18c
Removing note for object 5a50ba526cb7a741e3736b33e111cd5a35e68d3f
Removing note for object 90911a48f69e3d23142660e2e658bb72d6bb30d2
Removing note for object 382d7647311957adb8d7feccfbfddfd6d092d875
Removing note for object ab5f23d01513db15925fbc0d19e07dc67bb7695d
ok 5 - deleting most notes with git-notes

expecting success of 3305.6 'most notes deleted correctly with git-notes': 
	git log HEAD~$remove_notes | grep "^    " > output &&
	i=$(($num_notes - $remove_notes)) &&
	while test $i -gt 0
	do
		echo "    commit #$i" &&
		echo "    note #$i" &&
		i=$(($i - 1)) || return 1
	done > expect &&
	test_cmp expect output

ok 6 - most notes deleted correctly with git-notes

expecting success of 3305.7 'stable fanout 1 is followed by stable fanout 0': 
	i=$remove_notes &&
	fanout=1 &&
	while test $i -gt 0
	do
		i=$(($i - 1)) &&
		if touched_one_note_with_fanout refs/notes/commits~$i D $fanout
		then
			continue
		elif test $fanout -eq 1
		then
			fanout=0 &&
			if all_notes_have_fanout refs/notes/commits~$i $fanout
			then
				echo "Fanout 1 -> 0 at refs/notes/commits~$i" &&
				continue
			fi
		fi &&
		echo "Failed fanout=$fanout check at refs/notes/commits~$i" &&
		git ls-tree -r --name-only refs/notes/commits~$i &&
		return 1
	done &&
	all_notes_have_fanout refs/notes/commits 0

Fanout 1 -> 0 at refs/notes/commits~43
ok 7 - stable fanout 1 is followed by stable fanout 0

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3418-rebase-continue.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3418-rebase-continue/.git/
expecting success of 3418.1 'setup': 
	test_commit "commit-new-file-F1" F1 1 &&
	test_commit "commit-new-file-F2" F2 2 &&

	git checkout -b topic HEAD^ &&
	test_commit "commit-new-file-F2-on-topic-branch" F2 22 &&

	git checkout main

[main (root-commit) dac1376] commit-new-file-F1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F1
[main 953b3db] commit-new-file-F2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F2
Switched to a new branch 'topic'
[topic 24c5d85] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F2
Switched to branch 'main'
ok 1 - setup

expecting success of 3418.2 'merge based rebase --continue with works with touched file': 
	rm -fr .git/rebase-* &&
	git reset --hard &&
	git checkout main &&

	FAKE_LINES="edit 1" git rebase -i HEAD^ &&
	test-tool chmtime =-60 F1 &&
	git rebase --continue

HEAD is now at 953b3db commit-new-file-F2
Already on 'main'
rebase -i script before editing:
pick 953b3db commit-new-file-F2

rebase -i script after editing:
edit 953b3db commit-new-file-F2
Rebasing (1/1)

                                                                                
Stopped at 953b3db...  commit-new-file-F2
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue

                                                                                
Successfully rebased and updated refs/heads/main.
ok 2 - merge based rebase --continue with works with touched file

expecting success of 3418.3 'merge based rebase --continue removes .git/MERGE_MSG': 
	git checkout -f --detach topic &&

	test_must_fail git rebase --onto main HEAD^ &&
	git read-tree --reset -u HEAD &&
	test_path_is_file .git/MERGE_MSG &&
	git rebase --continue &&
	test_path_is_missing .git/MERGE_MSG

HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
Rebasing (1/1)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch

                                                                                
Successfully rebased and updated detached HEAD.
ok 3 - merge based rebase --continue removes .git/MERGE_MSG

expecting success of 3418.4 'apply based rebase --continue works with touched file': 
	rm -fr .git/rebase-* &&
	git reset --hard &&
	git checkout main &&

	test_must_fail git rebase --apply --onto main main topic &&
	echo "Resolved" >F2 &&
	git add F2 &&
	test-tool chmtime =-60 F1 &&
	git rebase --continue

HEAD is now at 953b3db commit-new-file-F2
Switched to branch 'main'
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
953b3db commit-new-file-F2
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F2-on-topic-branch
ok 4 - apply based rebase --continue works with touched file

expecting success of 3418.5 'rebase --continue can not be used with other options': 
	test_must_fail git rebase -v --continue &&
	test_must_fail git rebase --continue -v

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 5 - rebase --continue can not be used with other options

expecting success of 3418.6 'rebase --continue remembers merge strategy and options': 
	rm -fr .git/rebase-* &&
	git reset --hard commit-new-file-F2-on-topic-branch &&
	test_commit "commit-new-file-F3-on-topic-branch" F3 32 &&
	test_when_finished "rm -fr test-bin funny.was.run" &&
	mkdir test-bin &&
	cat >test-bin/git-merge-funny <<-EOF &&
	#!$SHELL_PATH
	case "\$1" in --opt) ;; *) exit 2 ;; esac
	shift &&
	>funny.was.run &&
	exec git merge-recursive "\$@"
	EOF
	chmod +x test-bin/git-merge-funny &&
	(
		PATH=./test-bin:$PATH &&
		test_must_fail git rebase -s funny -Xopt main topic
	) &&
	test -f funny.was.run &&
	rm funny.was.run &&
	echo "Resolved" >F2 &&
	git add F2 &&
	(
		PATH=./test-bin:$PATH &&
		git rebase --continue
	) &&
	test -f funny.was.run

HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
[topic 39de9a1] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F3
Rebasing (1/2)
Merging 953b3db31f61f8fc41bbcb85a1c76eadc748cf75 with 24c5d85f362d6c25d316c040586afc3e0548165a
Merging:
953b3db commit-new-file-F2
24c5d85 commit-new-file-F2-on-topic-branch
found 1 common ancestor:
dac1376 commit-new-file-F1
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD 6396a51] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Merging 6396a513d945e21e13de4128c5f8af13443529d5 with 39de9a17650c52c96f2d6848fba0d846df88a78f
Merging:
6396a51 commit-new-file-F2-on-topic-branch
39de9a1 commit-new-file-F3-on-topic-branch
found 1 common ancestor:
24c5d85 commit-new-file-F2-on-topic-branch

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 6 - rebase --continue remembers merge strategy and options

expecting success of 3418.7 'rebase -i --continue handles merge strategy and options': 
	rm -fr .git/rebase-* &&
	git reset --hard commit-new-file-F2-on-topic-branch &&
	test_commit "commit-new-file-F3-on-topic-branch-for-dash-i" F3 32 &&
	test_when_finished "rm -fr test-bin funny.was.run funny.args" &&
	mkdir test-bin &&
	cat >test-bin/git-merge-funny <<-EOF &&
	#!$SHELL_PATH
	echo "\$@" >>funny.args
	case "\$1" in --opt) ;; *) exit 2 ;; esac
	case "\$2" in --foo) ;; *) exit 2 ;; esac
	case "\$4" in --) ;; *) exit 2 ;; esac
	shift 2 &&
	>funny.was.run &&
	exec git merge-recursive "\$@"
	EOF
	chmod +x test-bin/git-merge-funny &&
	(
		PATH=./test-bin:$PATH &&
		test_must_fail git rebase -i -s funny -Xopt -Xfoo main topic
	) &&
	test -f funny.was.run &&
	rm funny.was.run &&
	echo "Resolved" >F2 &&
	git add F2 &&
	(
		PATH=./test-bin:$PATH &&
		git rebase --continue
	) &&
	test -f funny.was.run

HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
[topic 963eb48] commit-new-file-F3-on-topic-branch-for-dash-i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F3
Rebasing (1/2)
Merging 953b3db31f61f8fc41bbcb85a1c76eadc748cf75 with 24c5d85f362d6c25d316c040586afc3e0548165a
Merging:
953b3db commit-new-file-F2
24c5d85 commit-new-file-F2-on-topic-branch
found 1 common ancestor:
dac1376 commit-new-file-F1
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD 84ceed5] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Merging 84ceed57d34824df114c1313ed936f74d03a6be0 with 963eb48ce133debc7d85d334a2a2342cde830c00
Merging:
84ceed5 commit-new-file-F2-on-topic-branch
963eb48 commit-new-file-F3-on-topic-branch-for-dash-i
found 1 common ancestor:
24c5d85 commit-new-file-F2-on-topic-branch

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 7 - rebase -i --continue handles merge strategy and options

expecting success of 3418.8 'rebase -r passes merge strategy options correctly': 
	rm -fr .git/rebase-* &&
	git reset --hard commit-new-file-F3-on-topic-branch &&
	test_commit merge-theirs &&
	git reset --hard HEAD^ &&
	test_commit some-other-commit &&
	test_tick &&
	git merge --no-ff merge-theirs &&
	FAKE_LINES="1 3 edit 4 5 7 8 9" git rebase -i -f -r -m \
		-s recursive --strategy-option=theirs HEAD~2 &&
	test_commit force-change-ours &&
	git rebase --continue

HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
[topic acd8157] merge-theirs
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge-theirs.t
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
[topic ed61e7b] some-other-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 some-other-commit.t
Merge made by the 'ort' strategy.
 merge-theirs.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 merge-theirs.t
rebase -i script before editing:
label onto

reset onto
pick acd8157 merge-theirs
label merge-theirs

reset onto
pick ed61e7b some-other-commit
merge -C 085a6b6 merge-theirs # Merge tag 'merge-theirs' into topic

rebase -i script after editing:
label onto
reset onto
edit acd8157 merge-theirs
label merge-theirs
reset onto
pick ed61e7b some-other-commit
merge -C 085a6b6 merge-theirs # Merge tag 'merge-theirs' into topic
Rebasing (1/7)
Rebasing (2/7)
Rebasing (3/7)

                                                                                
Stopped at acd8157...  merge-theirs
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD a2945c1] force-change-ours
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 force-change-ours.t
Rebasing (4/7)
Rebasing (5/7)
Rebasing (6/7)
Rebasing (7/7)
Merge made by the 'ort' strategy.

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 8 - rebase -r passes merge strategy options correctly

expecting success of 3418.9 '--skip after failed fixup cleans commit message': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout -b with-conflicting-fixup &&
	test_commit wants-fixup &&
	test_commit "fixup! wants-fixup" wants-fixup.t 1 wants-fixup-1 &&
	test_commit "fixup! wants-fixup" wants-fixup.t 2 wants-fixup-2 &&
	test_commit "fixup! wants-fixup" wants-fixup.t 3 wants-fixup-3 &&
	test_must_fail env FAKE_LINES="1 fixup 2 squash 4" \
		git rebase -i HEAD~4 &&

	: now there is a conflict, and comments in the commit message &&
	git show HEAD >out &&
	grep "fixup! wants-fixup" out &&

	: skip and continue &&
	echo "cp \"\$1\" .git/copy.txt" | write_script copy-editor.sh &&
	(test_set_editor "$PWD/copy-editor.sh" && git rebase --skip) &&

	: the user should not have had to edit the commit message &&
	test_path_is_missing .git/copy.txt &&

	: now the comments in the commit message should have been cleaned up &&
	git show HEAD >out &&
	! grep "fixup! wants-fixup" out &&

	: now, let us ensure that "squash" is handled correctly &&
	git reset --hard wants-fixup-3 &&
	test_must_fail env FAKE_LINES="1 squash 4 squash 2 squash 4" \
		git rebase -i HEAD~4 &&

	: the first squash failed, but there are two more in the chain &&
	(test_set_editor "$PWD/copy-editor.sh" &&
	 test_must_fail git rebase --skip) &&

	: not the final squash, no need to edit the commit message &&
	test_path_is_missing .git/copy.txt &&

	: The first squash was skipped, therefore: &&
	git show HEAD >out &&
	test_i18ngrep "# This is a combination of 2 commits" out &&
	test_i18ngrep "# This is the commit message #2:" out &&

	(test_set_editor "$PWD/copy-editor.sh" && git rebase --skip) &&
	git show HEAD >out &&
	test_i18ngrep ! "# This is a combination" out &&

	: Final squash failed, but there was still a squash &&
	test_i18ngrep "# This is a combination of 2 commits" .git/copy.txt &&
	test_i18ngrep "# This is the commit message #2:" .git/copy.txt

Switched to a new branch 'with-conflicting-fixup'
[with-conflicting-fixup 4a54d65] wants-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 wants-fixup.t
[with-conflicting-fixup 62b850b] fixup! wants-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[with-conflicting-fixup 95a741f] fixup! wants-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[with-conflicting-fixup b0491d6] fixup! wants-fixup
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick 4a54d65 wants-fixup
pick 62b850b fixup! wants-fixup
pick 95a741f fixup! wants-fixup
pick b0491d6 fixup! wants-fixup

rebase -i script after editing:
pick 4a54d65 wants-fixup
fixup 62b850b fixup! wants-fixup
squash b0491d6 fixup! wants-fixup
Rebasing (2/3)
Rebasing (3/3)
Auto-merging wants-fixup.t
CONFLICT (content): Merge conflict in wants-fixup.t
error: could not apply b0491d6... fixup! wants-fixup
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b0491d6... fixup! wants-fixup
    # fixup! wants-fixup

                                                                                
Successfully rebased and updated refs/heads/with-conflicting-fixup.
HEAD is now at b0491d6 fixup! wants-fixup
rebase -i script before editing:
pick 4a54d65 wants-fixup
pick 62b850b fixup! wants-fixup
pick 95a741f fixup! wants-fixup
pick b0491d6 fixup! wants-fixup

rebase -i script after editing:
pick 4a54d65 wants-fixup
squash b0491d6 fixup! wants-fixup
squash 62b850b fixup! wants-fixup
squash b0491d6 fixup! wants-fixup
Rebasing (2/4)
Auto-merging wants-fixup.t
CONFLICT (content): Merge conflict in wants-fixup.t
error: could not apply b0491d6... fixup! wants-fixup
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b0491d6... fixup! wants-fixup
Rebasing (3/4)
Rebasing (4/4)
Auto-merging wants-fixup.t
CONFLICT (content): Merge conflict in wants-fixup.t
error: could not apply b0491d6... fixup! wants-fixup
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b0491d6... fixup! wants-fixup
    # This is a combination of 2 commits.
    # This is the commit message #2:
[detached HEAD 065b966] wants-fixup
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 wants-fixup.t

                                                                                
Successfully rebased and updated refs/heads/with-conflicting-fixup.
# This is a combination of 2 commits.
# This is the commit message #2:
fatal: No rebase in progress?
ok 9 - --skip after failed fixup cleans commit message

expecting success of 3418.10 'setup rerere database': 
	rm -fr .git/rebase-* &&
	git reset --hard commit-new-file-F3-on-topic-branch &&
	git checkout main &&
	test_commit "commit-new-file-F3" F3 3 &&
	test_config rerere.enabled true &&
	git update-ref refs/heads/topic commit-new-file-F3-on-topic-branch &&
	test_must_fail git rebase -m main topic &&
	echo "Resolved" >F2 &&
	cp F2 expected-F2 &&
	git add F2 &&
	test_must_fail git rebase --continue &&
	echo "Resolved" >F3 &&
	cp F3 expected-F3 &&
	git add F3 &&
	git rebase --continue &&
	git reset --hard topic@{1}

HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
[main 822b3db] commit-new-file-F3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F3
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Recorded preimage for 'F2'
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
Recorded resolution for 'F2'.
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Recorded preimage for 'F3'
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
Recorded resolution for 'F3'.
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
ok 10 - setup rerere database

expecting success of 3418.11 'rebase --apply --continue remembers --rerere-autoupdate': 
		prepare &&
		test_must_fail git rebase $action --rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
822b3db commit-new-file-F3
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
Staged 'F2' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F2-on-topic-branch
Applying: commit-new-file-F3-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c75c6da commit-new-file-F2-on-topic-branch
virtual commit-new-file-F3-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F3
Auto-merging F3
Staged 'F3' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 commit-new-file-F3-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F3-on-topic-branch
ok 11 - rebase --apply --continue remembers --rerere-autoupdate

expecting success of 3418.12 'rebase --apply --continue honors rerere.autoUpdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
822b3db commit-new-file-F3
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
Staged 'F2' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F2-on-topic-branch
Applying: commit-new-file-F3-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c75c6da commit-new-file-F2-on-topic-branch
virtual commit-new-file-F3-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F3
Auto-merging F3
Staged 'F3' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 commit-new-file-F3-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F3-on-topic-branch
ok 12 - rebase --apply --continue honors rerere.autoUpdate

expecting success of 3418.13 'rebase --apply --continue remembers --no-rerere-autoupdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action --no-rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		test_must_fail git diff-files --quiet &&
		git add F2 &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		test_must_fail git diff-files --quiet &&
		git add F3 &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
822b3db commit-new-file-F3
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
Resolved 'F2' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F2-on-topic-branch
Applying: commit-new-file-F3-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c75c6da commit-new-file-F2-on-topic-branch
virtual commit-new-file-F3-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F3
Auto-merging F3
Resolved 'F3' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 commit-new-file-F3-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: commit-new-file-F3-on-topic-branch
ok 13 - rebase --apply --continue remembers --no-rerere-autoupdate

expecting success of 3418.14 'rebase -m --continue remembers --rerere-autoupdate': 
		prepare &&
		test_must_fail git rebase $action --rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 14 - rebase -m --continue remembers --rerere-autoupdate

expecting success of 3418.15 'rebase -m --continue honors rerere.autoUpdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 15 - rebase -m --continue honors rerere.autoUpdate

expecting success of 3418.16 'rebase -m --continue remembers --no-rerere-autoupdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action --no-rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		test_must_fail git diff-files --quiet &&
		git add F2 &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		test_must_fail git diff-files --quiet &&
		git add F3 &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 16 - rebase -m --continue remembers --no-rerere-autoupdate

expecting success of 3418.17 'rebase -i --continue remembers --rerere-autoupdate': 
		prepare &&
		test_must_fail git rebase $action --rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 17 - rebase -i --continue remembers --rerere-autoupdate

expecting success of 3418.18 'rebase -i --continue honors rerere.autoUpdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action main topic &&
		test_cmp expected-F2 F2 &&
		git diff-files --quiet &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		git diff-files --quiet &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Staged 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 18 - rebase -i --continue honors rerere.autoUpdate

expecting success of 3418.19 'rebase -i --continue remembers --no-rerere-autoupdate': 
		prepare &&
		test_config rerere.autoupdate true &&
		test_must_fail git rebase $action --no-rerere-autoupdate main topic &&
		test_cmp expected-F2 F2 &&
		test_must_fail git diff-files --quiet &&
		git add F2 &&
		test_must_fail git rebase --continue &&
		test_cmp expected-F3 F3 &&
		test_must_fail git diff-files --quiet &&
		git add F3 &&
		git rebase --continue
	
HEAD is now at 39de9a1 commit-new-file-F3-on-topic-branch
Switched to branch 'main'
Rebasing (1/2)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
[detached HEAD c75c6da] commit-new-file-F2-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
Auto-merging F3
CONFLICT (add/add): Merge conflict in F3
error: could not apply 39de9a1... commit-new-file-F3-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F3' using previous resolution.
Could not apply 39de9a1... commit-new-file-F3-on-topic-branch
[detached HEAD df6a131] commit-new-file-F3-on-topic-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 19 - rebase -i --continue remembers --no-rerere-autoupdate

expecting success of 3418.20 'the todo command "break" works': 
	rm -f execed &&
	FAKE_LINES="break b exec_>execed" git rebase -i HEAD &&
	test_path_is_missing execed &&
	git rebase --continue &&
	test_path_is_missing execed &&
	git rebase --continue &&
	test_path_is_file execed

rebase -i script before editing:
noop

rebase -i script after editing:
break
b
exec >execed
Rebasing (1/3)

                                                                                
Stopped at df6a131 (commit-new-file-F3-on-topic-branch)
Rebasing (2/3)

                                                                                
Stopped at df6a131 (commit-new-file-F3-on-topic-branch)
Rebasing (3/3)

                                                                                
Executing: >execed

                                                                                
Successfully rebased and updated refs/heads/topic.
ok 20 - the todo command "break" works

expecting success of 3418.21 '--reschedule-failed-exec': 
	test_when_finished "git rebase --abort" &&
	test_must_fail git rebase -x false --reschedule-failed-exec HEAD^ &&
	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
	git rebase --abort &&
	test_must_fail git -c rebase.rescheduleFailedExec=true \
		rebase -x false HEAD^ 2>err &&
	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
	test_i18ngrep "has been rescheduled" err

Rebasing (2/2)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


hint: Could not execute the todo command
hint: 
hint:     exec false
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
exec false
exec false
hint: It has been rescheduled; To edit the command before continuing, please
ok 21 - --reschedule-failed-exec

expecting success of 3418.22 'rebase.rescheduleFailedExec only affects `rebase -i`': 
	test_config rebase.rescheduleFailedExec true &&
	test_must_fail git rebase -x false HEAD^ &&
	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
	git rebase --abort &&
	git rebase HEAD^

Rebasing (2/2)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


hint: Could not execute the todo command
hint: 
hint:     exec false
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
exec false
Current branch topic is up to date.
ok 22 - rebase.rescheduleFailedExec only affects `rebase -i`

expecting success of 3418.23 'rebase.rescheduleFailedExec=true & --no-reschedule-failed-exec': 
	test_when_finished "git rebase --abort" &&
	test_config rebase.rescheduleFailedExec true &&
	test_must_fail git rebase -x false --no-reschedule-failed-exec HEAD~2 &&
	test_must_fail git rebase --continue 2>err &&
	! grep "has been rescheduled" err

Rebasing (2/4)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


ok 23 - rebase.rescheduleFailedExec=true & --no-reschedule-failed-exec

expecting success of 3418.24 'new rebase.rescheduleFailedExec=true setting in an ongoing rebase is ignored': 
	test_when_finished "git rebase --abort" &&
	test_must_fail git rebase -x false HEAD~2 &&
	test_config rebase.rescheduleFailedExec true &&
	test_must_fail git rebase --continue 2>err &&
	! grep "has been rescheduled" err

Rebasing (2/4)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


ok 24 - new rebase.rescheduleFailedExec=true setting in an ongoing rebase is ignored

expecting success of 3418.25 'there is no --no-reschedule-failed-exec in an ongoing rebase': 
	test_when_finished "git rebase --abort" &&
	test_must_fail git rebase -x false HEAD~2 &&
	test_expect_code 129 git rebase --continue --no-reschedule-failed-exec &&
	test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec

Rebasing (2/4)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]
   or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
   or: git rebase --continue | --abort | --skip | --edit-todo

    --onto <revision>     rebase onto given branch instead of upstream
    --keep-base           use the merge-base of upstream and branch as the current base
    --no-verify           allow pre-rebase hook to run
    -q, --quiet           be quiet. implies --no-stat
    -v, --verbose         display a diffstat of what changed upstream
    -n, --no-stat         do not show diffstat of what changed upstream
    --signoff             add a Signed-off-by trailer to each commit
    --committer-date-is-author-date
                          make committer date match author date
    --reset-author-date   ignore author date and use current date
    -C <n>                passed to 'git apply'
    --ignore-whitespace   ignore changes in whitespace
    --whitespace <action>
                          passed to 'git apply'
    -f, --force-rebase    cherry-pick all commits, even if unchanged
    --no-ff               cherry-pick all commits, even if unchanged
    --continue            continue
    --skip                skip current patch and continue
    --abort               abort and check out the original branch
    --quit                abort but keep HEAD where it is
    --edit-todo           edit the todo list during an interactive rebase
    --show-current-patch  show the patch file being applied or merged
    --apply               use apply strategies to rebase
    -m, --merge           use merging strategies to rebase
    -i, --interactive     let the user edit the list of commits to rebase
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --empty <{drop,keep,ask}>
                          how to handle commits that become empty
    --autosquash          move commits that begin with squash!/fixup! under -i
    --update-refs         update branches that point to commits that are being rebased
    -S, --gpg-sign[=<key-id>]
                          GPG-sign commits
    --autostash           automatically stash/stash pop before and after
    -x, --exec <exec>     add exec lines after each commit of the editable list
    -r, --rebase-merges[=<mode>]
                          try to rebase merges instead of skipping them
    --fork-point          use 'merge-base --fork-point' to refine upstream
    -s, --strategy <strategy>
                          use the given merge strategy
    -X, --strategy-option <option>
                          pass the argument through to the merge strategy
    --root                rebase all reachable commits up to the root(s)
    --reschedule-failed-exec
                          automatically re-schedule any `exec` that fails
    --reapply-cherry-picks
                          apply all changes, even those already present upstream

ok 25 - there is no --no-reschedule-failed-exec in an ongoing rebase

expecting success of 3418.26 'rebase --apply sets ORIG_HEAD correctly': 
		git checkout topic &&
		git reset --hard commit-new-file-F2-on-topic-branch &&
		test_orig_head_helper $type main
	
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
822b3db commit-new-file-F3
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
Resolved 'F2' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
ok 26 - rebase --apply sets ORIG_HEAD correctly

expecting success of 3418.27 'rebase --apply <upstream> <branch> sets ORIG_HEAD correctly': 
		git checkout main &&
		test_orig_head_helper $type main topic
	
Switched to branch 'main'
First, rewinding head to replay your work on top of it...
Applying: commit-new-file-F2-on-topic-branch
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
822b3db commit-new-file-F3
virtual commit-new-file-F2-on-topic-branch
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in F2
Auto-merging F2
Resolved 'F2' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 commit-new-file-F2-on-topic-branch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
ok 27 - rebase --apply <upstream> <branch> sets ORIG_HEAD correctly

expecting success of 3418.28 'rebase --merge sets ORIG_HEAD correctly': 
		git checkout topic &&
		git reset --hard commit-new-file-F2-on-topic-branch &&
		test_orig_head_helper $type main
	
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
Rebasing (1/1)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
ok 28 - rebase --merge sets ORIG_HEAD correctly

expecting success of 3418.29 'rebase --merge <upstream> <branch> sets ORIG_HEAD correctly': 
		git checkout main &&
		test_orig_head_helper $type main topic
	
Switched to branch 'main'
Rebasing (1/1)
Auto-merging F2
CONFLICT (add/add): Merge conflict in F2
error: could not apply 24c5d85... commit-new-file-F2-on-topic-branch
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Resolved 'F2' using previous resolution.
Could not apply 24c5d85... commit-new-file-F2-on-topic-branch
Already on 'topic'
HEAD is now at 24c5d85 commit-new-file-F2-on-topic-branch
ok 29 - rebase --merge <upstream> <branch> sets ORIG_HEAD correctly

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3422-rebase-incompatible-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3422-rebase-incompatible-options/.git/
expecting success of 3422.1 'setup': 
	test_seq 2 9 >foo &&
	git add foo &&
	git commit -m orig &&

	git branch A &&
	git branch B &&

	git checkout A &&
	test_seq 1 9 >foo &&
	git add foo &&
	git commit -m A &&

	git checkout B &&
	echo "q qfoo();" | q_to_tab >>foo &&
	git add foo &&
	git commit -m B

[master (root-commit) 3639f03] orig
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 foo
Switched to branch 'A'
[A ef5b704] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 079b709] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3422.2 '--whitespace=fix incompatible with --merge': 
		git checkout B^0 &&
		test_must_fail git rebase --whitespace=fix --merge A
	
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 2 - --whitespace=fix incompatible with --merge

expecting success of 3422.3 '--whitespace=fix incompatible with --strategy=ours': 
		git checkout B^0 &&
		test_must_fail git rebase --whitespace=fix --strategy=ours A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 3 - --whitespace=fix incompatible with --strategy=ours

expecting success of 3422.4 '--whitespace=fix incompatible with --strategy-option=ours': 
		git checkout B^0 &&
		test_must_fail git rebase --whitespace=fix --strategy-option=ours A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 4 - --whitespace=fix incompatible with --strategy-option=ours

expecting success of 3422.5 '--whitespace=fix incompatible with --interactive': 
		git checkout B^0 &&
		test_must_fail git rebase --whitespace=fix --interactive A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 5 - --whitespace=fix incompatible with --interactive

expecting success of 3422.6 '--whitespace=fix incompatible with --exec': 
		git checkout B^0 &&
		test_must_fail git rebase --whitespace=fix --exec 'true' A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 6 - --whitespace=fix incompatible with --exec

expecting success of 3422.7 '-C4 incompatible with --merge': 
		git checkout B^0 &&
		test_must_fail git rebase -C4 --merge A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 7 - -C4 incompatible with --merge

expecting success of 3422.8 '-C4 incompatible with --strategy=ours': 
		git checkout B^0 &&
		test_must_fail git rebase -C4 --strategy=ours A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 8 - -C4 incompatible with --strategy=ours

expecting success of 3422.9 '-C4 incompatible with --strategy-option=ours': 
		git checkout B^0 &&
		test_must_fail git rebase -C4 --strategy-option=ours A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 9 - -C4 incompatible with --strategy-option=ours

expecting success of 3422.10 '-C4 incompatible with --interactive': 
		git checkout B^0 &&
		test_must_fail git rebase -C4 --interactive A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 10 - -C4 incompatible with --interactive

expecting success of 3422.11 '-C4 incompatible with --exec': 
		git checkout B^0 &&
		test_must_fail git rebase -C4 --exec 'true' A
	
HEAD is now at 079b709 B
fatal: apply options and merge options cannot be used together
ok 11 - -C4 incompatible with --exec

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3404-rebase-interactive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive/.git/
expecting success of 3404.1 'setup': 
	git switch -C primary &&
	test_commit A file1 &&
	test_commit B file1 &&
	test_commit C file2 &&
	test_commit D file1 &&
	test_commit E file3 &&
	git checkout -b branch1 A &&
	test_commit F file4 &&
	test_commit G file1 &&
	test_commit H file5 &&
	git checkout -b branch2 F &&
	test_commit I file6 &&
	git checkout -b conflict-branch A &&
	test_commit one conflict &&
	test_commit two conflict &&
	test_commit three conflict &&
	test_commit four conflict &&
	git checkout -b no-conflict-branch A &&
	test_commit J fileJ &&
	test_commit K fileK &&
	test_commit L fileL &&
	test_commit M fileM &&
	git checkout -b no-ff-branch A &&
	test_commit N fileN &&
	test_commit O fileO &&
	test_commit P fileP

Switched to a new branch 'primary'
[primary (root-commit) 6e62bf8] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[primary 313fe96] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[primary d0f65f2] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[primary 0547e3f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[primary 8f99a4f] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Switched to a new branch 'branch1'
[branch1 cfefd94] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
[branch1 83751a6] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[branch1 4373208] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file5
Switched to a new branch 'branch2'
[branch2 615be62] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file6
Switched to a new branch 'conflict-branch'
[conflict-branch b895952] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict
[conflict-branch 766a798] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[conflict-branch 1eadf03] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[conflict-branch f91a2b3] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'no-conflict-branch'
[no-conflict-branch 808874f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileJ
[no-conflict-branch 265b89e] K
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileK
[no-conflict-branch 6b0f5e6] L
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileL
[no-conflict-branch 3389558] M
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileM
Switched to a new branch 'no-ff-branch'
[no-ff-branch 53b4423] N
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileN
[no-ff-branch cc47714] O
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileO
[no-ff-branch faef1a5] P
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileP
ok 1 - setup

expecting success of 3404.2 'rebase --keep-empty': 
	git checkout -b emptybranch primary &&
	git commit --allow-empty -m "empty" &&
	git rebase --keep-empty -i HEAD~2 &&
	git log --oneline >actual &&
	test_line_count = 6 actual

Switched to a new branch 'emptybranch'
[emptybranch da33401] empty
 Author: A U Thor <author@example.com>

                                                                                
Successfully rebased and updated refs/heads/emptybranch.
ok 2 - rebase --keep-empty

expecting success of 3404.3 'rebase -i with empty todo list': 
	cat >expect <<-\EOF &&
	error: nothing to do
	EOF
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="#" \
			git rebase -i HEAD^ >output 2>&1
	) &&
	tail -n 1 output >actual &&  # Ignore output about changing todo list
	test_cmp expect actual

ok 3 - rebase -i with empty todo list

expecting success of 3404.4 'rebase -i with the exec command': 
	git checkout primary &&
	(
	set_fake_editor &&
	FAKE_LINES="1 exec_>touch-one
		2 exec_>touch-two exec_false exec_>touch-three
		3 4 exec_>\"touch-file__name_with_spaces\";_>touch-after-semicolon 5" &&
	export FAKE_LINES &&
	test_must_fail git rebase -i A
	) &&
	test_path_is_file touch-one &&
	test_path_is_file touch-two &&
	# Missing because we should have stopped by now.
	test_path_is_missing touch-three &&
	test_cmp_rev C HEAD &&
	git rebase --continue &&
	test_path_is_file touch-three &&
	test_path_is_file "touch-file  name with spaces" &&
	test_path_is_file touch-after-semicolon &&
	test_cmp_rev primary HEAD &&
	rm -f touch-*

Switched to branch 'primary'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
pick 313fe96 B
exec >touch-one
pick d0f65f2 C
exec >touch-two
exec false
exec >touch-three
pick 0547e3f D
pick 8f99a4f E
exec >"touch-file  name with spaces"; >touch-after-semicolon
Rebasing (2/9)

                                                                                
Executing: >touch-one
Rebasing (3/9)
Rebasing (4/9)

                                                                                
Executing: >touch-two
Rebasing (5/9)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


Rebasing (6/9)

                                                                                
Executing: >touch-three
Rebasing (7/9)
Rebasing (8/9)
Rebasing (9/9)

                                                                                
Executing: >"touch-file  name with spaces"; >touch-after-semicolon

                                                                                
Successfully rebased and updated refs/heads/primary.
ok 4 - rebase -i with the exec command

expecting success of 3404.5 'rebase -i with the exec command runs from tree root': 
	git checkout primary &&
	mkdir subdir && (cd subdir &&
	set_fake_editor &&
	FAKE_LINES="1 exec_>touch-subdir" \
		git rebase -i HEAD^
	) &&
	test_path_is_file touch-subdir &&
	rm -fr subdir

Already on 'primary'
rebase -i script before editing:
pick 8f99a4f E

rebase -i script after editing:
pick 8f99a4f E
exec >touch-subdir
Rebasing (2/2)

                                                                                
Executing: >touch-subdir

                                                                                
Successfully rebased and updated refs/heads/primary.
ok 5 - rebase -i with the exec command runs from tree root

expecting success of 3404.6 'rebase -i with exec allows git commands in subdirs': 
	test_when_finished "rm -rf subdir" &&
	test_when_finished "git rebase --abort ||:" &&
	git checkout primary &&
	mkdir subdir && (cd subdir &&
	set_fake_editor &&
	FAKE_LINES="1 x_cd_subdir_&&_git_rev-parse_--is-inside-work-tree" \
		git rebase -i HEAD^
	)

Already on 'primary'
rebase -i script before editing:
pick 8f99a4f E

rebase -i script after editing:
pick 8f99a4f E
x cd subdir && git rev-parse --is-inside-work-tree
Rebasing (2/2)

                                                                                
Executing: cd subdir && git rev-parse --is-inside-work-tree
true

                                                                                
Successfully rebased and updated refs/heads/primary.
fatal: No rebase in progress?
ok 6 - rebase -i with exec allows git commands in subdirs

expecting success of 3404.7 'rebase -i sets work tree properly': 
	test_when_finished "rm -rf subdir" &&
	test_when_finished "test_might_fail git rebase --abort" &&
	mkdir subdir &&
	git rebase -x "(cd subdir && git rev-parse --show-toplevel)" HEAD^ \
		>actual &&
	! grep "/subdir$" actual

Rebasing (2/2)

                                                                                
Executing: (cd subdir && git rev-parse --show-toplevel)

                                                                                
Successfully rebased and updated refs/heads/primary.
fatal: No rebase in progress?
ok 7 - rebase -i sets work tree properly

expecting success of 3404.8 'rebase -i with the exec command checks tree cleanness': 
	git checkout primary &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="exec_echo_foo_>file1 1" \
			git rebase -i HEAD^
	) &&
	test_cmp_rev primary^ HEAD &&
	git reset --hard &&
	git rebase --continue

Already on 'primary'
rebase -i script before editing:
pick 8f99a4f E

rebase -i script after editing:
exec echo foo >file1
pick 8f99a4f E
Rebasing (1/2)

                                                                                
Executing: echo foo >file1
error: cannot rebase: You have unstaged changes.
warning: execution succeeded: echo foo >file1
but left changes to the index and/or the working tree
Commit or stash your changes, and then run

  git rebase --continue


HEAD is now at 0547e3f D
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/primary.
ok 8 - rebase -i with the exec command checks tree cleanness

expecting success of 3404.9 'rebase -x with empty command fails': 
	test_when_finished "git rebase --abort ||:" &&
	test_must_fail env git rebase -x "" @ 2>actual &&
	test_write_lines "error: empty exec command" >expected &&
	test_cmp expected actual &&
	test_must_fail env git rebase -x " " @ 2>actual &&
	test_cmp expected actual

fatal: No rebase in progress?
ok 9 - rebase -x with empty command fails

expecting success of 3404.10 'rebase -x with newline in command fails': 
	test_when_finished "git rebase --abort ||:" &&
	test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
	test_write_lines "error: exec commands cannot contain newlines" \
			 >expected &&
	test_cmp expected actual

fatal: No rebase in progress?
ok 10 - rebase -x with newline in command fails

expecting success of 3404.11 'rebase -i with exec of inexistent command': 
	git checkout primary &&
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="exec_this-command-does-not-exist 1" \
			git rebase -i HEAD^ >actual 2>&1
	) &&
	! grep "Maybe git-rebase is broken" actual

Already on 'primary'
ok 11 - rebase -i with exec of inexistent command

expecting success of 3404.12 'implicit interactive rebase does not invoke sequence editor': 
	test_when_finished "git rebase --abort ||:" &&
	GIT_SEQUENCE_EDITOR="echo bad >" git rebase -x"echo one" @^

Rebasing (2/2)

                                                                                
Executing: echo one
one

                                                                                
Successfully rebased and updated refs/heads/primary.
fatal: No rebase in progress?
ok 12 - implicit interactive rebase does not invoke sequence editor

expecting success of 3404.13 'no changes are a nop': 
	git checkout branch2 &&
	git rebase -i F &&
	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch2" &&
	test_cmp_rev I HEAD

Switched to branch 'branch2'

                                                                                
Successfully rebased and updated refs/heads/branch2.
ok 13 - no changes are a nop

expecting success of 3404.14 'test the [branch] option': 
	git checkout -b dead-end &&
	git rm file6 &&
	git commit -m "stop here" &&
	git rebase -i F branch2 &&
	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch2" &&
	test_cmp_rev I branch2 &&
	test_cmp_rev I HEAD

Switched to a new branch 'dead-end'
rm 'file6'
[dead-end f814f58] stop here
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file6

                                                                                
Successfully rebased and updated refs/heads/branch2.
ok 14 - test the [branch] option

expecting success of 3404.15 'test --onto <branch>': 
	git checkout -b test-onto branch2 &&
	git rebase -i --onto branch1 F &&
	test "$(git symbolic-ref -q HEAD)" = "refs/heads/test-onto" &&
	test_cmp_rev HEAD^ branch1 &&
	test_cmp_rev I branch2

Switched to a new branch 'test-onto'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/test-onto.
ok 15 - test --onto <branch>

expecting success of 3404.16 'rebase on top of a non-conflicting commit': 
	git checkout branch1 &&
	git tag original-branch1 &&
	git rebase -i branch2 &&
	test file6 = $(git diff --name-only original-branch1) &&
	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch1" &&
	test_cmp_rev I branch2 &&
	test_cmp_rev I HEAD~2

Switched to branch 'branch1'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch1.
ok 16 - rebase on top of a non-conflicting commit

expecting success of 3404.17 'reflog for the branch shows state before rebase': 
	test_cmp_rev branch1@{1} original-branch1

ok 17 - reflog for the branch shows state before rebase

expecting success of 3404.18 'reflog for the branch shows correct finish message': 
	printf "rebase (finish): refs/heads/branch1 onto %s\n" \
		"$(git rev-parse branch2)" >expected &&
	git log -g --pretty=%gs -1 refs/heads/branch1 >actual &&
	test_cmp expected actual

ok 18 - reflog for the branch shows correct finish message

expecting success of 3404.19 'exchange two commits': 
	(
		set_fake_editor &&
		FAKE_LINES="2 1" git rebase -i HEAD~2
	) &&
	test H = $(git cat-file commit HEAD^ | sed -ne \$p) &&
	test G = $(git cat-file commit HEAD | sed -ne \$p) &&
	blob1=$(git rev-parse --short HEAD^:file1) &&
	blob2=$(git rev-parse --short HEAD:file1) &&
	commit=$(git rev-parse --short HEAD)

rebase -i script before editing:
pick ae8f65e G
pick f5f5249 H

rebase -i script after editing:
pick f5f5249 H
pick ae8f65e G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch1.
ok 19 - exchange two commits

expecting success of 3404.20 'stop on conflicting pick': 
	cat >expect <<-EOF &&
	diff --git a/file1 b/file1
	index $blob1..$blob2 100644
	--- a/file1
	+++ b/file1
	@@ -1 +1 @@
	-A
	+G
	EOF
	cat >expect2 <<-EOF &&
	<<<<<<< HEAD
	D
	=======
	G
	>>>>>>> $commit (G)
	EOF
	git tag new-branch1 &&
	test_must_fail git rebase -i primary &&
	test "$(git rev-parse HEAD~3)" = "$(git rev-parse primary)" &&
	test_cmp expect .git/rebase-merge/patch &&
	test_cmp expect2 file1 &&
	test "$(git diff --name-status |
		sed -n -e "/^U/s/^U[^a-z]*//p")" = file1 &&
	test 4 = $(grep -v "^#" < .git/rebase-merge/done | wc -l) &&
	test 0 = $(grep -c "^[^#]" < .git/rebase-merge/git-rebase-todo)

Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
Auto-merging file1
CONFLICT (content): Merge conflict in file1
error: could not apply 5d18e54... G
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 5d18e54... G
ok 20 - stop on conflicting pick

expecting success of 3404.21 'show conflicted patch': 
	GIT_TRACE=1 git rebase --show-current-patch >/dev/null 2>stderr &&
	grep "show.*REBASE_HEAD" stderr &&
	# the original stopped-sha1 is abbreviated
	stopped_sha1="$(git rev-parse $(cat ".git/rebase-merge/stopped-sha"))" &&
	test "$(git rev-parse REBASE_HEAD)" = "$stopped_sha1"

trace: run_command: git show REBASE_HEAD --
trace: built-in: git show REBASE_HEAD --
ok 21 - show conflicted patch

expecting success of 3404.22 'abort': 
	git rebase --abort &&
	test_cmp_rev new-branch1 HEAD &&
	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch1" &&
	test_path_is_missing .git/rebase-merge

ok 22 - abort

expecting success of 3404.23 'abort with error when new base cannot be checked out': 
	git rm --cached file1 &&
	git commit -m "remove file in base" &&
	test_must_fail git rebase -i primary > output 2>&1 &&
	test_i18ngrep "The following untracked working tree files would be overwritten by checkout:" \
		output &&
	test_i18ngrep "file1" output &&
	test_path_is_missing .git/rebase-merge &&
	rm file1 &&
	git reset --hard HEAD^

rm 'file1'
[branch1 2dd5570] remove file in base
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file1
error: The following untracked working tree files would be overwritten by checkout:
	file1
HEAD is now at 5d18e54 G
ok 23 - abort with error when new base cannot be checked out

expecting success of 3404.24 'retain authorship': 
	echo A > file7 &&
	git add file7 &&
	test_tick &&
	GIT_AUTHOR_NAME="Twerp Snog" git commit -m "different author" &&
	git tag twerp &&
	git rebase -i --onto primary HEAD^ &&
	git show HEAD | grep "^Author: Twerp Snog"

[branch1 2596307] different author
 Author: Twerp Snog <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file7
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/branch1.
Author: Twerp Snog <author@example.com>
ok 24 - retain authorship

expecting success of 3404.25 'retain authorship w/ conflicts': 
	oGIT_AUTHOR_NAME=$GIT_AUTHOR_NAME &&
	test_when_finished "GIT_AUTHOR_NAME=\$oGIT_AUTHOR_NAME" &&

	git reset --hard twerp &&
	test_commit a conflict a conflict-a &&
	git reset --hard twerp &&

	GIT_AUTHOR_NAME=AttributeMe &&
	export GIT_AUTHOR_NAME &&
	test_commit b conflict b conflict-b &&
	GIT_AUTHOR_NAME=$oGIT_AUTHOR_NAME &&

	test_must_fail git rebase -i conflict-a &&
	echo resolved >conflict &&
	git add conflict &&
	git rebase --continue &&
	test_cmp_rev conflict-a^0 HEAD^ &&
	git show >out &&
	grep AttributeMe out

HEAD is now at 2596307 different author
[branch1 748a43d] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict
HEAD is now at 2596307 different author
[branch1 34d1a6c] b
 Author: AttributeMe <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict
Rebasing (1/1)
Auto-merging conflict
CONFLICT (add/add): Merge conflict in conflict
error: could not apply 34d1a6c... b
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 34d1a6c... b
[detached HEAD 7866b12] b
 Author: AttributeMe <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/branch1.
Author: AttributeMe <author@example.com>
ok 25 - retain authorship w/ conflicts

expecting success of 3404.26 'squash': 
	git reset --hard twerp &&
	echo B > file7 &&
	test_tick &&
	GIT_AUTHOR_NAME="Nitfol" git commit -m "nitfol" file7 &&
	echo "******************************" &&
	(
		set_fake_editor &&
		FAKE_LINES="1 squash 2" EXPECT_HEADER_COUNT=2 \
			git rebase -i --onto primary HEAD~2
	) &&
	test B = $(cat file7) &&
	test_cmp_rev HEAD^ primary

HEAD is now at 2596307 different author
[branch1 cdf577a] nitfol
 Author: Nitfol <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
******************************
rebase -i script before editing:
pick 2596307 different author
pick cdf577a nitfol

rebase -i script after editing:
pick 2596307 different author
squash cdf577a nitfol
Rebasing (1/2)
Rebasing (2/2)
[detached HEAD d2d5ba7] different author
 Author: Twerp Snog <author@example.com>
 Date: Thu Apr 7 15:33:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file7

                                                                                
Successfully rebased and updated refs/heads/branch1.
ok 26 - squash

expecting success of 3404.27 'retain authorship when squashing': 
	git show HEAD | grep "^Author: Twerp Snog"

Author: Twerp Snog <author@example.com>
ok 27 - retain authorship when squashing

expecting success of 3404.28 '--continue tries to commit': 
	git reset --hard D &&
	test_tick &&
	(
		set_fake_editor &&
		test_must_fail git rebase -i --onto new-branch1 HEAD^ &&
		echo resolved > file1 &&
		git add file1 &&
		FAKE_COMMIT_MESSAGE="chouette!" git rebase --continue
	) &&
	test_cmp_rev HEAD^ new-branch1 &&
	git show HEAD | grep chouette

HEAD is now at 0547e3f D
Rebasing (1/1)
Auto-merging file1
CONFLICT (content): Merge conflict in file1
error: could not apply 0547e3f... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 0547e3f... D
[detached HEAD e986ac9] chouette!
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/branch1.
    chouette!
ok 28 - --continue tries to commit

expecting success of 3404.29 'verbose flag is heeded, even after --continue': 
	git reset --hard primary@{1} &&
	test_tick &&
	test_must_fail git rebase -v -i --onto new-branch1 HEAD^ &&
	echo resolved > file1 &&
	git add file1 &&
	git rebase --continue > output &&
	grep "^ file1 | 2 +-$" output

HEAD is now at 0547e3f D
Changes from 6e62bf890e21973b771e4e6fc28f5ade62edb4bc to 5d18e5414f663da21d1363c271f2d684aeda7b5b:
 file1 | 2 +-
 file4 | 1 +
 file5 | 1 +
 file6 | 1 +
 4 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 file4
 create mode 100644 file5
 create mode 100644 file6
Rebasing (1/1)
Auto-merging file1
CONFLICT (content): Merge conflict in file1
error: could not apply 0547e3f... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 0547e3f... D
Successfully rebased and updated refs/heads/branch1.
 file1 | 2 +-
ok 29 - verbose flag is heeded, even after --continue

expecting success of 3404.30 'multi-squash only fires up editor once': 
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="ONCE" \
			FAKE_LINES="1 squash 2 squash 3 squash 4" \
			EXPECT_HEADER_COUNT=4 \
			git rebase -i $base
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 1 = $(git show | grep ONCE | wc -l)

rebase -i script before editing:
pick 615be62 I
pick 0626e8d H
pick 5d18e54 G
pick 7384ee8 D

rebase -i script after editing:
pick 615be62 I
squash 0626e8d H
squash 5d18e54 G
squash 7384ee8 D
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD 450e393] I
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 file5
 create mode 100644 file6

                                                                                
Successfully rebased and updated refs/heads/branch1.
ok 30 - multi-squash only fires up editor once

expecting success of 3404.31 'multi-fixup does not fire up editor': 
	git checkout -b multi-fixup E &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="NEVER" \
			FAKE_LINES="1 fixup 2 fixup 3 fixup 4" \
			git rebase -i $base
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 0 = $(git show | grep NEVER | wc -l) &&
	git checkout @{-1} &&
	git branch -D multi-fixup

Switched to a new branch 'multi-fixup'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
pick 313fe96 B
fixup d0f65f2 C
fixup 0547e3f D
fixup 8f99a4f E
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/multi-fixup.
Switched to branch 'branch1'
Deleted branch multi-fixup (was b72b875).
ok 31 - multi-fixup does not fire up editor

expecting success of 3404.32 'commit message used after conflict': 
	git checkout -b conflict-fixup conflict-branch &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 fixup 3 fixup 4" \
			git rebase -i $base &&
		echo three > conflict &&
		git add conflict &&
		FAKE_COMMIT_AMEND="ONCE" EXPECT_HEADER_COUNT=2 \
			git rebase --continue
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 1 = $(git show | grep ONCE | wc -l) &&
	git checkout @{-1} &&
	git branch -D conflict-fixup

Switched to a new branch 'conflict-fixup'
rebase -i script before editing:
pick b895952 one
pick 766a798 two
pick 1eadf03 three
pick f91a2b3 four

rebase -i script after editing:
pick b895952 one
fixup 1eadf03 three
fixup f91a2b3 four
Rebasing (2/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply 1eadf03... three
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1eadf03... three
[detached HEAD 0894a89] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 conflict
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/conflict-fixup.
Switched to branch 'branch1'
Deleted branch conflict-fixup (was 72b9a95).
ok 32 - commit message used after conflict

expecting success of 3404.33 'commit message retained after conflict': 
	git checkout -b conflict-squash conflict-branch &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 fixup 3 squash 4" \
			git rebase -i $base &&
		echo three > conflict &&
		git add conflict &&
		FAKE_COMMIT_AMEND="TWICE" EXPECT_HEADER_COUNT=2 \
			git rebase --continue
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 2 = $(git show | grep TWICE | wc -l) &&
	git checkout @{-1} &&
	git branch -D conflict-squash

Switched to a new branch 'conflict-squash'
rebase -i script before editing:
pick b895952 one
pick 766a798 two
pick 1eadf03 three
pick f91a2b3 four

rebase -i script after editing:
pick b895952 one
fixup 1eadf03 three
squash f91a2b3 four
Rebasing (2/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply 1eadf03... three
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1eadf03... three
[detached HEAD f044f69] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 conflict
Rebasing (3/3)
[detached HEAD e98a2cf] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 conflict

                                                                                
Successfully rebased and updated refs/heads/conflict-squash.
Switched to branch 'branch1'
Deleted branch conflict-squash (was e98a2cf).
ok 33 - commit message retained after conflict

expecting success of 3404.34 'squash and fixup generate correct log messages': 
	cat >expect-squash-fixup <<-\EOF &&
	B

	D

	ONCE
	EOF
	git checkout -b squash-fixup E &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="ONCE" \
			FAKE_LINES="1 fixup 2 squash 3 fixup 4" \
			EXPECT_HEADER_COUNT=4 \
			git rebase -i $base
	) &&
	git cat-file commit HEAD | sed -e 1,/^\$/d > actual-squash-fixup &&
	test_cmp expect-squash-fixup actual-squash-fixup &&
	git cat-file commit HEAD@{2} |
		grep "^# This is a combination of 3 commits\."  &&
	git cat-file commit HEAD@{3} |
		grep "^# This is a combination of 2 commits\."  &&
	git checkout @{-1} &&
	git branch -D squash-fixup

Switched to a new branch 'squash-fixup'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
pick 313fe96 B
fixup d0f65f2 C
squash 0547e3f D
fixup 8f99a4f E
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD 2e14af9] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 file2
 create mode 100644 file3

                                                                                
Successfully rebased and updated refs/heads/squash-fixup.
# This is a combination of 3 commits.
# This is a combination of 2 commits.
Switched to branch 'branch1'
Deleted branch squash-fixup (was 2e14af9).
ok 34 - squash and fixup generate correct log messages

expecting success of 3404.35 'squash ignores comments': 
	git checkout -b skip-comments E &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="ONCE" \
			FAKE_LINES="# 1 # squash 2 # squash 3 # squash 4 #" \
			EXPECT_HEADER_COUNT=4 \
			git rebase -i $base
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 1 = $(git show | grep ONCE | wc -l) &&
	git checkout @{-1} &&
	git branch -D skip-comments

Switched to a new branch 'skip-comments'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
# comment
pick 313fe96 B
# comment
squash d0f65f2 C
# comment
squash 0547e3f D
# comment
squash 8f99a4f E
# comment
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD c7441e9] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 file2
 create mode 100644 file3

                                                                                
Successfully rebased and updated refs/heads/skip-comments.
Switched to branch 'branch1'
Deleted branch skip-comments (was c7441e9).
ok 35 - squash ignores comments

expecting success of 3404.36 'squash ignores blank lines': 
	git checkout -b skip-blank-lines E &&
	base=$(git rev-parse HEAD~4) &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="ONCE" \
			FAKE_LINES="> 1 > squash 2 > squash 3 > squash 4 >" \
			EXPECT_HEADER_COUNT=4 \
			git rebase -i $base
	) &&
	test $base = $(git rev-parse HEAD^) &&
	test 1 = $(git show | grep ONCE | wc -l) &&
	git checkout @{-1} &&
	git branch -D skip-blank-lines

Switched to a new branch 'skip-blank-lines'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:

pick 313fe96 B

squash d0f65f2 C

squash 0547e3f D

squash 8f99a4f E

Rebasing (3/7)
Rebasing (4/7)
Rebasing (5/7)
[detached HEAD c7441e9] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 file2
 create mode 100644 file3

                                                                                
Successfully rebased and updated refs/heads/skip-blank-lines.
Switched to branch 'branch1'
Deleted branch skip-blank-lines (was c7441e9).
ok 36 - squash ignores blank lines

expecting success of 3404.37 'squash works as expected': 
	git checkout -b squash-works no-conflict-branch &&
	one=$(git rev-parse HEAD~3) &&
	(
		set_fake_editor &&
		FAKE_LINES="1 s 3 2" EXPECT_HEADER_COUNT=2 git rebase -i HEAD~3
	) &&
	test $one = $(git rev-parse HEAD~2)

Switched to a new branch 'squash-works'
rebase -i script before editing:
pick 265b89e K
pick 6b0f5e6 L
pick 3389558 M

rebase -i script after editing:
pick 265b89e K
s 3389558 M
pick 6b0f5e6 L
Rebasing (2/3)
[detached HEAD b352334] K
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:27:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 fileK
 create mode 100644 fileM
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/squash-works.
ok 37 - squash works as expected

expecting success of 3404.38 'interrupted squash works as expected': 
	git checkout -b interrupted-squash conflict-branch &&
	one=$(git rev-parse HEAD~3) &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 squash 3 2" \
			git rebase -i HEAD~3
	) &&
	test_write_lines one two four > conflict &&
	git add conflict &&
	test_must_fail git rebase --continue &&
	echo resolved > conflict &&
	git add conflict &&
	git rebase --continue &&
	test $one = $(git rev-parse HEAD~2)

Switched to a new branch 'interrupted-squash'
rebase -i script before editing:
pick 766a798 two
pick 1eadf03 three
pick f91a2b3 four

rebase -i script after editing:
pick 766a798 two
squash f91a2b3 four
pick 1eadf03 three
Rebasing (2/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply f91a2b3... four
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f91a2b3... four
[detached HEAD a2f4578] two
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 2 insertions(+)
Rebasing (3/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply 1eadf03... three
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1eadf03... three
[detached HEAD 6b76c65] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 3 deletions(-)

                                                                                
Successfully rebased and updated refs/heads/interrupted-squash.
ok 38 - interrupted squash works as expected

expecting success of 3404.39 'interrupted squash works as expected (case 2)': 
	git checkout -b interrupted-squash2 conflict-branch &&
	one=$(git rev-parse HEAD~3) &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="3 squash 1 2" \
			git rebase -i HEAD~3
	) &&
	test_write_lines one four > conflict &&
	git add conflict &&
	test_must_fail git rebase --continue &&
	test_write_lines one two four > conflict &&
	git add conflict &&
	test_must_fail git rebase --continue &&
	echo resolved > conflict &&
	git add conflict &&
	git rebase --continue &&
	test $one = $(git rev-parse HEAD~2)

Switched to a new branch 'interrupted-squash2'
rebase -i script before editing:
pick 766a798 two
pick 1eadf03 three
pick f91a2b3 four

rebase -i script after editing:
pick f91a2b3 four
squash 766a798 two
pick 1eadf03 three
Rebasing (1/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply f91a2b3... four
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f91a2b3... four
[detached HEAD d1badcc] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply 766a798... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 766a798... two
[detached HEAD 13f7405] four
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:25:13 2005 -0700
 1 file changed, 2 insertions(+)
Rebasing (3/3)
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: could not apply 1eadf03... three
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 1eadf03... three
[detached HEAD 6785ad5] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 3 deletions(-)

                                                                                
Successfully rebased and updated refs/heads/interrupted-squash2.
ok 39 - interrupted squash works as expected (case 2)

expecting success of 3404.40 '--continue tries to commit, even for "edit"': 
	echo unrelated > file7 &&
	git add file7 &&
	test_tick &&
	git commit -m "unrelated change" &&
	parent=$(git rev-parse HEAD^) &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i HEAD^ &&
		echo edited > file7 &&
		git add file7 &&
		FAKE_COMMIT_MESSAGE="chouette!" git rebase --continue
	) &&
	test edited = $(git show HEAD:file7) &&
	git show HEAD | grep chouette &&
	test $parent = $(git rev-parse HEAD^)

[interrupted-squash2 98947cc] unrelated change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file7
rebase -i script before editing:
pick 98947cc unrelated change

rebase -i script after editing:
edit 98947cc unrelated change
Rebasing (1/1)

                                                                                
Stopped at 98947cc...  unrelated change
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 9483ccd] chouette!
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:39:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file7

                                                                                
Successfully rebased and updated refs/heads/interrupted-squash2.
    chouette!
ok 40 - --continue tries to commit, even for "edit"

expecting success of 3404.41 'aborted --continue does not squash commits after "edit"': 
	old=$(git rev-parse HEAD) &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i HEAD^ &&
		echo "edited again" > file7 &&
		git add file7 &&
		test_must_fail env FAKE_COMMIT_MESSAGE=" " git rebase --continue
	) &&
	test $old = $(git rev-parse HEAD) &&
	git rebase --abort

rebase -i script before editing:
pick 9483ccd chouette!

rebase -i script after editing:
edit 9483ccd chouette!
Rebasing (1/1)

                                                                                
Stopped at 9483ccd...  chouette!
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Aborting commit due to empty commit message.
error: could not commit staged changes.
ok 41 - aborted --continue does not squash commits after "edit"

expecting success of 3404.42 'auto-amend only edited commits after "edit"': 
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i HEAD^ &&
		echo "edited again" > file7 &&
		git add file7 &&
		FAKE_COMMIT_MESSAGE="edited file7 again" git commit &&
		echo "and again" > file7 &&
		git add file7 &&
		test_tick &&
		test_must_fail env FAKE_COMMIT_MESSAGE="and again" \
			git rebase --continue
	) &&
	git rebase --abort

rebase -i script before editing:
pick 9483ccd chouette!

rebase -i script after editing:
edit 9483ccd chouette!
Rebasing (1/1)

                                                                                
Stopped at 9483ccd...  chouette!
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 9b7064d] edited file7 again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: 
You have uncommitted changes in your working tree. Please, commit them
first and then run 'git rebase --continue' again.
ok 42 - auto-amend only edited commits after "edit"

expecting success of 3404.43 'clean error after failed "exec"': 
	test_tick &&
	test_when_finished "git rebase --abort || :" &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 exec_false" git rebase -i HEAD^
	) &&
	echo "edited again" > file7 &&
	git add file7 &&
	test_must_fail git rebase --continue 2>error &&
	test_i18ngrep "you have staged changes in your working tree" error

rebase -i script before editing:
pick 9483ccd chouette!

rebase -i script after editing:
pick 9483ccd chouette!
exec false
Rebasing (2/2)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


error: you have staged changes in your working tree
ok 43 - clean error after failed "exec"

expecting success of 3404.44 'rebase a detached HEAD': 
	grandparent=$(git rev-parse HEAD~2) &&
	git checkout $(git rev-parse HEAD) &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="2 1" git rebase -i HEAD~2
	) &&
	test $grandparent = $(git rev-parse HEAD~2)

Note: switching to '9483ccdd3462028242a62a4b10b5300681f344d7'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9483ccd chouette!
rebase -i script before editing:
pick 6785ad5 three
pick 9483ccd chouette!

rebase -i script after editing:
pick 9483ccd chouette!
pick 6785ad5 three
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 44 - rebase a detached HEAD

expecting success of 3404.45 'rebase a commit violating pre-commit': 
	test_hook pre-commit <<-\EOF &&
	test -z "$(git diff --cached --check)"
	EOF
	echo "monde! " >> file1 &&
	test_tick &&
	test_must_fail git commit -m doesnt-verify file1 &&
	git commit -m doesnt-verify --no-verify file1 &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES=2 git rebase -i HEAD~2
	)

[detached HEAD c2de550] doesnt-verify
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
rebase -i script before editing:
pick 2a5c937 three
pick c2de550 doesnt-verify

rebase -i script after editing:
pick c2de550 doesnt-verify
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 45 - rebase a commit violating pre-commit

expecting success of 3404.46 'rebase with a file named HEAD in worktree': 
	git reset --hard &&
	git checkout -b branch3 A &&

	(
		GIT_AUTHOR_NAME="Squashed Away" &&
		export GIT_AUTHOR_NAME &&
		>HEAD &&
		git add HEAD &&
		git commit -m "Add head" &&
		>BODY &&
		git add BODY &&
		git commit -m "Add body"
	) &&

	(
		set_fake_editor &&
		FAKE_LINES="1 squash 2" git rebase -i @{-1}
	) &&
	test "$(git show -s --pretty=format:%an)" = "Squashed Away"


HEAD is now at 772e3c6 doesnt-verify
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  772e3c6 doesnt-verify
  82d2839 chouette!

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 772e3c6

Switched to a new branch 'branch3'
[branch3 838aee5] Add head
 Author: Squashed Away <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 HEAD
[branch3 271c26d] Add body
 Author: Squashed Away <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 BODY
rebase -i script before editing:
pick 838aee5 Add head
pick 271c26d Add body

rebase -i script after editing:
pick 838aee5 Add head
squash 271c26d Add body
Rebasing (1/2)
Rebasing (2/2)
[detached HEAD b224944] Add head
 Author: Squashed Away <author@example.com>
 Date: Thu Apr 7 15:46:13 2005 -0700
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 BODY
 create mode 100644 HEAD

                                                                                
Successfully rebased and updated refs/heads/branch3.
ok 46 - rebase with a file named HEAD in worktree

expecting success of 3404.47 'do "noop" when there is nothing to cherry-pick': 

	git checkout -b branch4 HEAD &&
	GIT_EDITOR=: git commit --amend \
		--author="Somebody else <somebody@else.com>" &&
	test $(git rev-parse branch3) != $(git rev-parse branch4) &&
	git rebase -i branch3 &&
	test_cmp_rev branch3 branch4


Switched to a new branch 'branch4'
[branch4 beb8dd6] Add head
 Author: Somebody else <somebody@else.com>
 Date: Thu Apr 7 15:46:13 2005 -0700
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 BODY
 create mode 100644 HEAD
warning: skipped previously applied commit beb8dd6
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"

                                                                                
Successfully rebased and updated refs/heads/branch4.
ok 47 - do "noop" when there is nothing to cherry-pick

expecting success of 3404.48 'submodule rebase setup': 
	git checkout A &&
	mkdir sub &&
	(
		cd sub && git init && >elif &&
		git add elif && git commit -m "submodule initial"
	) &&
	echo 1 >file1 &&
	git add file1 sub &&
	test_tick &&
	git commit -m "One" &&
	echo 2 >file1 &&
	test_tick &&
	git commit -a -m "Two" &&
	(
		cd sub && echo 3 >elif &&
		git commit -a -m "submodule second"
	) &&
	test_tick &&
	git commit -a -m "Three changes submodule"

Note: switching to 'A'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6e62bf8 A
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive/sub/.git/
[master (root-commit) 6795896] submodule initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[detached HEAD 068ccfe] One
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 160000 sub
[detached HEAD 8cd1639] Two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 628e79e] submodule second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD d80ae32] Three changes submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 48 - submodule rebase setup

expecting success of 3404.49 'submodule rebase -i': 
	(
		set_fake_editor &&
		FAKE_LINES="1 squash 2 3" git rebase -i A
	)

rebase -i script before editing:
pick 068ccfe One
pick 8cd1639 Two
pick d80ae32 Three changes submodule

rebase -i script after editing:
pick 068ccfe One
squash 8cd1639 Two
pick d80ae32 Three changes submodule
Rebasing (2/3)
[detached HEAD 1dab715] One
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:47:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 160000 sub
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 49 - submodule rebase -i

expecting success of 3404.50 'submodule conflict setup': 
	git tag submodule-base &&
	git checkout HEAD^ &&
	(
		cd sub && git checkout HEAD^ && echo 4 >elif &&
		git add elif && git commit -m "submodule conflict"
	) &&
	git add sub &&
	test_tick &&
	git commit -m "Conflict in submodule" &&
	git tag submodule-topic

Previous HEAD position was b1c1bea Three changes submodule
HEAD is now at 1dab715 One
M	sub
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6795896 submodule initial
[detached HEAD c3aa4c8] submodule conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD 2f8239b] Conflict in submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 50 - submodule conflict setup

expecting success of 3404.51 'rebase -i continue with only submodule staged': 
	test_must_fail git rebase -i submodule-base &&
	git add sub &&
	git rebase --continue &&
	test $(git rev-parse submodule-base) != $(git rev-parse HEAD)

Rebasing (1/1)
Failed to merge submodule sub
CONFLICT (submodule): Merge conflict in sub
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (sub), and either merge commit c3aa4c8
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add sub

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
error: could not apply 2f8239b... Conflict in submodule
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2f8239b... Conflict in submodule
[detached HEAD e05ea42] Conflict in submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated detached HEAD.
ok 51 - rebase -i continue with only submodule staged

expecting success of 3404.52 'rebase -i continue with unstaged submodule': 
	git checkout submodule-topic &&
	git reset --hard &&
	test_must_fail git rebase -i submodule-base &&
	git reset &&
	git rebase --continue &&
	test_cmp_rev submodule-base HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  e05ea42 Conflict in submodule

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> e05ea42

HEAD is now at 2f8239b Conflict in submodule
HEAD is now at 2f8239b Conflict in submodule
Rebasing (1/1)
Failed to merge submodule sub
CONFLICT (submodule): Merge conflict in sub
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (sub), and either merge commit c3aa4c8
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add sub

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
error: could not apply 2f8239b... Conflict in submodule
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2f8239b... Conflict in submodule
Unstaged changes after reset:
M	sub

                                                                                
Successfully rebased and updated detached HEAD.
ok 52 - rebase -i continue with unstaged submodule

expecting success of 3404.53 'avoid unnecessary reset': 
	git checkout primary &&
	git reset --hard &&
	test-tool chmtime =123456789 file3 &&
	git update-index --refresh &&
	HEAD=$(git rev-parse HEAD) &&
	git rebase -i HEAD~4 &&
	test $HEAD = $(git rev-parse HEAD) &&
	MTIME=$(test-tool chmtime --get file3) &&
	test 123456789 = $MTIME

warning: unable to rmdir 'sub': Directory not empty
Previous HEAD position was b1c1bea Three changes submodule
Switched to branch 'primary'
HEAD is now at 8f99a4f E

                                                                                
Successfully rebased and updated refs/heads/primary.
ok 53 - avoid unnecessary reset

expecting success of 3404.54 'reword': 
	git checkout -b reword-branch primary &&
	(
		set_fake_editor &&
		FAKE_LINES="1 2 3 reword 4" FAKE_COMMIT_MESSAGE="E changed" \
			git rebase -i A &&
		git show HEAD | grep "E changed" &&
		test $(git rev-parse primary) != $(git rev-parse HEAD) &&
		test_cmp_rev primary^ HEAD^ &&
		FAKE_LINES="1 2 reword 3 4" FAKE_COMMIT_MESSAGE="D changed" \
			git rebase -i A &&
		git show HEAD^ | grep "D changed" &&
		FAKE_LINES="reword 1 2 3 4" FAKE_COMMIT_MESSAGE="B changed" \
			git rebase -i A &&
		git show HEAD~3 | grep "B changed" &&
		FAKE_LINES="1 r 2 pick 3 p 4" FAKE_COMMIT_MESSAGE="C changed" \
			git rebase -i A
	) &&
	git show HEAD~2 | grep "C changed"

Switched to a new branch 'reword-branch'
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
reword 8f99a4f E
Rebasing (4/4)
[detached HEAD 7045bc0] E changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file3

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
    E changed
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 7045bc0 E changed

rebase -i script after editing:
pick 313fe96 B
pick d0f65f2 C
reword 0547e3f D
pick 7045bc0 E changed
Rebasing (3/4)
[detached HEAD ffc34d0] D changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
    D changed
rebase -i script before editing:
pick 313fe96 B
pick d0f65f2 C
pick ffc34d0 D changed
pick 4804c05 E changed

rebase -i script after editing:
reword 313fe96 B
pick d0f65f2 C
pick ffc34d0 D changed
pick 4804c05 E changed
Rebasing (1/4)
[detached HEAD ff0628d] B changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
    B changed
rebase -i script before editing:
pick ff0628d B changed
pick e73c68c C
pick fb271b0 D changed
pick a55d41c E changed

rebase -i script after editing:
pick ff0628d B changed
r e73c68c C
pick fb271b0 D changed
p a55d41c E changed
Rebasing (2/4)
[detached HEAD 234d360] C changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
    C changed
ok 54 - reword

expecting success of 3404.55 'no uncommited changes when rewording the todo list is reloaded': 
	git checkout E &&
	test_when_finished "git checkout @{-1}" &&
	(
		set_fake_editor &&
		GIT_SEQUENCE_EDITOR="\"$PWD/fake-editor.sh\"" &&
		export GIT_SEQUENCE_EDITOR &&
		set_reword_editor &&
		FAKE_LINES="reword 1 reword 2" git rebase -i C
	) &&
	check_reworded_commits D E

Note: switching to 'E'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8f99a4f E
rebase -i script before editing:
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
reword 0547e3f D
reword 8f99a4f E
Rebasing (1/2)
[detached HEAD af7a1e6] D
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Executing: git log -1 --pretty=format:'%an <%ae> %at%n%B%n' >>reword-actual
Rebasing (3/3)
[detached HEAD d9fff5f] E
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Rebasing (4/4)

                                                                                
Executing: git log -1 --pretty=format:'%an <%ae> %at%n%B%n' >>reword-actual

                                                                                
Successfully rebased and updated detached HEAD.
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  d9fff5f E
  af7a1e6 D

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> d9fff5f

Switched to branch 'reword-branch'
ok 55 - no uncommited changes when rewording the todo list is reloaded

expecting success of 3404.56 'rebase -i can copy notes': 
	git config notes.rewrite.rebase true &&
	git config notes.rewriteRef "refs/notes/*" &&
	test_commit n1 &&
	test_commit n2 &&
	test_commit n3 &&
	git notes add -m"a note" n3 &&
	git rebase -i --onto n1 n2 &&
	test "a note" = "$(git notes show HEAD)"

[reword-branch aa5df09] n1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 n1.t
[reword-branch 20afda8] n2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 n2.t
[reword-branch 9a71079] n3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 n3.t
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
ok 56 - rebase -i can copy notes

expecting success of 3404.57 'rebase -i can copy notes over a fixup': 
	cat >expect <<-\EOF &&
	an earlier note

	a note
	EOF
	git reset --hard n3 &&
	git notes add -m"an earlier note" n2 &&
	(
		set_fake_editor &&
		GIT_NOTES_REWRITE_MODE=concatenate FAKE_LINES="1 f 2" \
			git rebase -i n1
	) &&
	git notes show > output &&
	test_cmp expect output

HEAD is now at 9a71079 n3
rebase -i script before editing:
pick 20afda8 n2
pick 9a71079 n3

rebase -i script after editing:
pick 20afda8 n2
f 9a71079 n3
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/reword-branch.
ok 57 - rebase -i can copy notes over a fixup

expecting success of 3404.58 'rebase while detaching HEAD': 
	git symbolic-ref HEAD &&
	grandparent=$(git rev-parse HEAD~2) &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="2 1" git rebase -i HEAD~2 HEAD^0
	) &&
	test $grandparent = $(git rev-parse HEAD~2) &&
	test_must_fail git symbolic-ref HEAD

refs/heads/reword-branch
rebase -i script before editing:
pick aa5df09 n1
pick 5b2df83 n2

rebase -i script after editing:
pick 5b2df83 n2
pick aa5df09 n1
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
fatal: ref HEAD is not a symbolic ref
ok 58 - rebase while detaching HEAD

expecting success of 3404.59 'always cherry-pick with --no-ff': 
	git checkout no-ff-branch &&
	git tag original-no-ff-branch &&
	git rebase -i --no-ff A &&
	for p in 0 1 2
	do
		test ! $(git rev-parse HEAD~$p) = $(git rev-parse original-no-ff-branch~$p) &&
		git diff HEAD~$p original-no-ff-branch~$p > out &&
		test_must_be_empty out || return 1
	done &&
	test_cmp_rev HEAD~3 original-no-ff-branch~3 &&
	git diff HEAD~3 original-no-ff-branch~3 > out &&
	test_must_be_empty out

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  9689317 n1
  a0bd0ac n2

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9689317

Switched to branch 'no-ff-branch'
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/no-ff-branch.
ok 59 - always cherry-pick with --no-ff

expecting success of 3404.60 'set up commits with funny messages': 
	git checkout -b funny A &&
	echo >>file1 &&
	test_tick &&
	git commit -a -m "end with slash\\" &&
	echo >>file1 &&
	test_tick &&
	git commit -a -m "something (\000) that looks like octal" &&
	echo >>file1 &&
	test_tick &&
	git commit -a -m "something (\n) that looks like a newline" &&
	echo >>file1 &&
	test_tick &&
	git commit -a -m "another commit"

Switched to a new branch 'funny'
[funny f317e30] end with slash\
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[funny d68f8aa] something (\000) that looks like octal
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[funny 495c640] something (\n) that looks like a newline
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[funny 3a6cc5d] another commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 60 - set up commits with funny messages

expecting success of 3404.61 'rebase-i history with funny messages': 
	git rev-list A..funny >expect &&
	test_tick &&
	(
		set_fake_editor &&
		FAKE_LINES="1 2 3 4" git rebase -i A
	) &&
	git rev-list A.. >actual &&
	test_cmp expect actual

rebase -i script before editing:
pick f317e30 end with slash\
pick d68f8aa something (\000) that looks like octal
pick 495c640 something (\n) that looks like a newline
pick 3a6cc5d another commit

rebase -i script after editing:
pick f317e30 end with slash\
pick d68f8aa something (\000) that looks like octal
pick 495c640 something (\n) that looks like a newline
pick 3a6cc5d another commit

                                                                                
Successfully rebased and updated refs/heads/funny.
ok 61 - rebase-i history with funny messages

expecting success of 3404.62 'prepare for rebase -i --exec': 
	git checkout primary &&
	git checkout -b execute &&
	test_commit one_exec main.txt one_exec &&
	test_commit two_exec main.txt two_exec &&
	test_commit three_exec main.txt three_exec

Switched to branch 'primary'
Switched to a new branch 'execute'
[execute 1983bb3] one_exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.txt
[execute 2efd8a2] two_exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[execute 66ac40d] three_exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 62 - prepare for rebase -i --exec

expecting success of 3404.63 'running "git rebase -i --exec git show HEAD"': 
	(
		set_fake_editor &&
		git rebase -i --exec "git show HEAD" HEAD~2 >actual &&
		FAKE_LINES="1 exec_git_show_HEAD 2 exec_git_show_HEAD" &&
		export FAKE_LINES &&
		git rebase -i HEAD~2 >expect
	) &&
	sed -e "1,9d" expect >expected &&
	test_cmp expected actual

Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
ok 63 - running "git rebase -i --exec git show HEAD"

expecting success of 3404.64 'running "git rebase --exec git show HEAD -i"': 
	git reset --hard execute &&
	(
		set_fake_editor &&
		git rebase --exec "git show HEAD" -i HEAD~2 >actual &&
		FAKE_LINES="1 exec_git_show_HEAD 2 exec_git_show_HEAD" &&
		export FAKE_LINES &&
		git rebase -i HEAD~2 >expect
	) &&
	sed -e "1,9d" expect >expected &&
	test_cmp expected actual

HEAD is now at 66ac40d three_exec
Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
ok 64 - running "git rebase --exec git show HEAD -i"

expecting success of 3404.65 'running "git rebase -ix git show HEAD"': 
	git reset --hard execute &&
	(
		set_fake_editor &&
		git rebase -ix "git show HEAD" HEAD~2 >actual &&
		FAKE_LINES="1 exec_git_show_HEAD 2 exec_git_show_HEAD" &&
		export FAKE_LINES &&
		git rebase -i HEAD~2 >expect
	) &&
	sed -e "1,9d" expect >expected &&
	test_cmp expected actual

HEAD is now at 66ac40d three_exec
Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
Rebasing (2/4)

                                                                                
Executing: git show HEAD
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/execute.
ok 65 - running "git rebase -ix git show HEAD"

expecting success of 3404.66 'rebase -ix with several <CMD>': 
	git reset --hard execute &&
	(
		set_fake_editor &&
		git rebase -ix "git show HEAD; pwd" HEAD~2 >actual &&
		FAKE_LINES="1 exec_git_show_HEAD;_pwd 2 exec_git_show_HEAD;_pwd" &&
		export FAKE_LINES &&
		git rebase -i HEAD~2 >expect
	) &&
	sed -e "1,9d" expect >expected &&
	test_cmp expected actual

HEAD is now at 66ac40d three_exec
Rebasing (2/4)

                                                                                
Executing: git show HEAD; pwd
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD; pwd

                                                                                
Successfully rebased and updated refs/heads/execute.
Rebasing (2/4)

                                                                                
Executing: git show HEAD; pwd
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: git show HEAD; pwd

                                                                                
Successfully rebased and updated refs/heads/execute.
ok 66 - rebase -ix with several <CMD>

expecting success of 3404.67 'rebase -ix with several instances of --exec': 
	git reset --hard execute &&
	(
		set_fake_editor &&
		git rebase -i --exec "git show HEAD" --exec "pwd" HEAD~2 >actual &&
		FAKE_LINES="1 exec_git_show_HEAD exec_pwd 2
				exec_git_show_HEAD exec_pwd" &&
		export FAKE_LINES &&
		git rebase -i HEAD~2 >expect
	) &&
	sed -e "1,11d" expect >expected &&
	test_cmp expected actual

HEAD is now at 66ac40d three_exec
Rebasing (2/6)

                                                                                
Executing: git show HEAD
Rebasing (3/6)

                                                                                
Executing: pwd
Rebasing (4/6)
Rebasing (5/6)

                                                                                
Executing: git show HEAD
Rebasing (6/6)

                                                                                
Executing: pwd

                                                                                
Successfully rebased and updated refs/heads/execute.
Rebasing (2/6)

                                                                                
Executing: git show HEAD
Rebasing (3/6)

                                                                                
Executing: pwd
Rebasing (4/6)
Rebasing (5/6)

                                                                                
Executing: git show HEAD
Rebasing (6/6)

                                                                                
Executing: pwd

                                                                                
Successfully rebased and updated refs/heads/execute.
ok 67 - rebase -ix with several instances of --exec

expecting success of 3404.68 'rebase -ix with --autosquash': 
	git reset --hard execute &&
	git checkout -b autosquash &&
	echo second >second.txt &&
	git add second.txt &&
	git commit -m "fixup! two_exec" &&
	echo bis >bis.txt &&
	git add bis.txt &&
	git commit -m "fixup! two_exec" &&
	git checkout -b autosquash_actual &&
	git rebase -i --exec "git show HEAD" --autosquash HEAD~4 >actual &&
	git checkout autosquash &&
	(
		set_fake_editor &&
		git checkout -b autosquash_expected &&
		FAKE_LINES="1 fixup 3 fixup 4 exec_git_show_HEAD 2 exec_git_show_HEAD" &&
		export FAKE_LINES &&
		git rebase -i HEAD~4 >expect
	) &&
	sed -e "1,13d" expect >expected &&
	test_cmp expected actual

HEAD is now at 66ac40d three_exec
Switched to a new branch 'autosquash'
[autosquash 1da6bea] fixup! two_exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.txt
[autosquash 280ba53] fixup! two_exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bis.txt
Switched to a new branch 'autosquash_actual'
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)

                                                                                
Executing: git show HEAD
Rebasing (5/6)
Rebasing (6/6)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/autosquash_actual.
Switched to branch 'autosquash'
Switched to a new branch 'autosquash_expected'
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)

                                                                                
Executing: git show HEAD
Rebasing (5/6)
Rebasing (6/6)

                                                                                
Executing: git show HEAD

                                                                                
Successfully rebased and updated refs/heads/autosquash_expected.
ok 68 - rebase -ix with --autosquash

expecting success of 3404.69 'rebase --exec works without -i ': 
	git reset --hard execute &&
	rm -rf exec_output &&
	EDITOR="echo >invoked_editor" git rebase --exec "echo a line >>exec_output"  HEAD~2 2>actual &&
	test_i18ngrep  "Successfully rebased and updated" actual &&
	test_line_count = 2 exec_output &&
	test_path_is_missing invoked_editor

HEAD is now at 66ac40d three_exec

                                                                                
Successfully rebased and updated refs/heads/autosquash_expected.
ok 69 - rebase --exec works without -i 

expecting success of 3404.70 'rebase -i --exec without <CMD>': 
	git reset --hard execute &&
	test_must_fail git rebase -i --exec 2>actual &&
	test_i18ngrep "requires a value" actual &&
	git checkout primary

HEAD is now at 66ac40d three_exec
error: option `exec' requires a value
Switched to branch 'primary'
ok 70 - rebase -i --exec without <CMD>

expecting success of 3404.71 'rebase -i --root re-order and drop commits': 
	git checkout E &&
	(
		set_fake_editor &&
		FAKE_LINES="3 1 2 5" git rebase -i --root
	) &&
	test E = $(git cat-file commit HEAD | sed -ne \$p) &&
	test B = $(git cat-file commit HEAD^ | sed -ne \$p) &&
	test A = $(git cat-file commit HEAD^^ | sed -ne \$p) &&
	test C = $(git cat-file commit HEAD^^^ | sed -ne \$p) &&
	test 0 = $(git cat-file commit HEAD^^^ | grep -c ^parent\ )

Note: switching to 'E'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8f99a4f E
rebase -i script before editing:
pick 6e62bf8 A
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
pick d0f65f2 C
pick 6e62bf8 A
pick 313fe96 B
pick 8f99a4f E
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 71 - rebase -i --root re-order and drop commits

expecting success of 3404.72 'rebase -i --root retain root commit author and message': 
	git checkout A &&
	echo B >file7 &&
	git add file7 &&
	GIT_AUTHOR_NAME="Twerp Snog" git commit -m "different author" &&
	(
		set_fake_editor &&
		FAKE_LINES="2" git rebase -i --root
	) &&
	git cat-file commit HEAD | grep -q "^author Twerp Snog" &&
	git cat-file commit HEAD | grep -q "^different author$"

Warning: you are leaving 4 commits behind, not connected to
any of your branches:

  8ec5b24 E
  0680f3e B
  2e95b98 A
  8676e2e C

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 8ec5b24

HEAD is now at 6e62bf8 A
[detached HEAD 419a8fd] different author
 Author: Twerp Snog <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file7
rebase -i script before editing:
pick 6e62bf8 A
pick 419a8fd different author

rebase -i script after editing:
pick 419a8fd different author
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 72 - rebase -i --root retain root commit author and message

expecting success of 3404.73 'rebase -i --root temporary sentinel commit': 
	git checkout B &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="2" git rebase -i --root
	) &&
	git cat-file commit HEAD | grep "^tree $EMPTY_TREE" &&
	git rebase --abort

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2b113fb different author

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2b113fb

HEAD is now at 313fe96 B
rebase -i script before editing:
pick 6e62bf8 A
pick 313fe96 B

rebase -i script after editing:
pick 313fe96 B
Rebasing (1/1)
CONFLICT (modify/delete): file1 deleted in HEAD and modified in 313fe96 (B).  Version 313fe96 (B) of file1 left in tree.
error: could not apply 313fe96... B
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 313fe96... B
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
ok 73 - rebase -i --root temporary sentinel commit

expecting success of 3404.74 'rebase -i --root fixup root commit': 
	git checkout B &&
	(
		set_fake_editor &&
		FAKE_LINES="1 fixup 2" git rebase -i --root
	) &&
	test A = $(git cat-file commit HEAD | sed -ne \$p) &&
	test B = $(git show HEAD:file1) &&
	test 0 = $(git cat-file commit HEAD | grep -c ^parent\ )

HEAD is now at 313fe96 B
rebase -i script before editing:
pick 6e62bf8 A
pick 313fe96 B

rebase -i script after editing:
pick 6e62bf8 A
fixup 313fe96 B
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 74 - rebase -i --root fixup root commit

expecting success of 3404.75 'rebase -i --root reword original root commit': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout -b reword-original-root-branch primary &&
	(
		set_fake_editor &&
		FAKE_LINES="reword 1 2" FAKE_COMMIT_MESSAGE="A changed" \
			git rebase -i --root
	) &&
	git show HEAD^ | grep "A changed" &&
	test -z "$(git show -s --format=%p HEAD^)"

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  558b876 A

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 558b876

Switched to a new branch 'reword-original-root-branch'
rebase -i script before editing:
pick 6e62bf8 A
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
reword 6e62bf8 A
pick 313fe96 B
Rebasing (1/2)
[detached HEAD 903b38e] A changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/reword-original-root-branch.
    A changed
fatal: No rebase in progress?
ok 75 - rebase -i --root reword original root commit

expecting success of 3404.76 'rebase -i --root reword new root commit': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout -b reword-now-root-branch primary &&
	(
		set_fake_editor &&
		FAKE_LINES="reword 3 1" FAKE_COMMIT_MESSAGE="C changed" \
		git rebase -i --root
	) &&
	git show HEAD^ | grep "C changed" &&
	test -z "$(git show -s --format=%p HEAD^)"

Switched to a new branch 'reword-now-root-branch'
rebase -i script before editing:
pick 6e62bf8 A
pick 313fe96 B
pick d0f65f2 C
pick 0547e3f D
pick 8f99a4f E

rebase -i script after editing:
reword d0f65f2 C
pick 6e62bf8 A
Rebasing (1/2)
[detached HEAD a808654] C changed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/reword-now-root-branch.
    C changed
fatal: No rebase in progress?
ok 76 - rebase -i --root reword new root commit

expecting success of 3404.77 'rebase -i --root when root has untracked file conflict': 
	test_when_finished "reset_rebase" &&
	git checkout -b failing-root-pick A &&
	echo x >file2 &&
	git rm file1 &&
	git commit -m "remove file 1 add file 2" &&
	echo z >file1 &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 2" git rebase -i --root
	) &&
	rm file1 &&
	git rebase --continue &&
	test "$(git log -1 --format=%B)" = "remove file 1 add file 2" &&
	test "$(git rev-list --count HEAD)" = 2

Switched to a new branch 'failing-root-pick'
rm 'file1'
[failing-root-pick 71adfbc] remove file 1 add file 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file1
rebase -i script before editing:
pick 6e62bf8 A
pick 71adfbc remove file 1 add file 2

rebase -i script after editing:
pick 6e62bf8 A
pick 71adfbc remove file 1 add file 2
Rebasing (1/2)
error: The following untracked working tree files would be overwritten by merge:
	file1
Please move or remove them before you merge.
Aborting
hint: Could not execute the todo command
hint: 
hint:     pick 6e62bf890e21973b771e4e6fc28f5ade62edb4bc A
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Could not apply 6e62bf8... A
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/failing-root-pick.
fatal: No rebase in progress?
HEAD is now at 71adfbc remove file 1 add file 2
Removing actual
Removing actual-squash-fixup
Removing error
Removing exec_output
Removing expect
Removing expect-squash-fixup
Removing expect2
Removing expected
Removing fake-editor.sh
Removing file2
Removing out
Removing output
Removing reword-actual
Removing reword-editor.sh
Removing reword-expected
Removing reword-log
Removing reword-oid
Removing reword-sequence-editor.sh
Removing stderr
Removing touch-subdir
ok 77 - rebase -i --root when root has untracked file conflict

expecting success of 3404.78 'rebase -i --root reword root when root has untracked file conflict': 
	test_when_finished "reset_rebase" &&
	echo z>file1 &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="reword 1 2" \
			FAKE_COMMIT_MESSAGE="Modified A" git rebase -i --root &&
		rm file1 &&
		FAKE_COMMIT_MESSAGE="Reworded A" git rebase --continue
	) &&
	test "$(git log -1 --format=%B HEAD^)" = "Reworded A" &&
	test "$(git rev-list --count HEAD)" = 2

rebase -i script before editing:
pick 6e62bf8 A
pick 71adfbc remove file 1 add file 2

rebase -i script after editing:
reword 6e62bf8 A
pick 71adfbc remove file 1 add file 2
Rebasing (1/2)
error: The following untracked working tree files would be overwritten by merge:
	file1
Please move or remove them before you merge.
Aborting
hint: Could not execute the todo command
hint: 
hint:     reword 6e62bf890e21973b771e4e6fc28f5ade62edb4bc A
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/3)
[detached HEAD 1b0ccef] Reworded A
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/failing-root-pick.
fatal: No rebase in progress?
HEAD is now at 847f077 remove file 1 add file 2
Removing fake-editor.sh
ok 78 - rebase -i --root reword root when root has untracked file conflict

expecting success of 3404.79 'rebase --edit-todo does not work on non-interactive rebase': 
	git checkout reword-original-root-branch &&
	git reset --hard &&
	git checkout conflict-branch &&
	(
		set_fake_editor &&
		test_must_fail git rebase -f --apply --onto HEAD~2 HEAD~ &&
		test_must_fail git rebase --edit-todo
	) &&
	git rebase --abort

Switched to branch 'reword-original-root-branch'
HEAD is now at c9dc22b B
Switched to branch 'conflict-branch'
First, rewinding head to replay your work on top of it...
Applying: four
Using index info to reconstruct a base tree...
M	conflict
Falling back to patching base and 3-way merge...
Merging:
766a798 two
virtual four
found 1 common ancestor:
virtual 3d3da6c4fe4fab218d150e2af365b8b07d465a22
Auto-merging conflict
CONFLICT (content): Merge conflict in conflict
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 four
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
fatal: The --edit-todo action can only be used during interactive rebase.
ok 79 - rebase --edit-todo does not work on non-interactive rebase

expecting success of 3404.80 'rebase --edit-todo can be used to modify todo': 
	git reset --hard &&
	git checkout no-conflict-branch^0 &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1 2 3" git rebase -i HEAD~3 &&
		FAKE_LINES="2 1" git rebase --edit-todo &&
		git rebase --continue
	) &&
	test M = $(git cat-file commit HEAD^ | sed -ne \$p) &&
	test L = $(git cat-file commit HEAD | sed -ne \$p)

HEAD is now at f91a2b3 four
Note: switching to 'no-conflict-branch^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 3389558 M
rebase -i script before editing:
pick 265b89e K
pick 6b0f5e6 L
pick 3389558 M

rebase -i script after editing:
edit 265b89e K
pick 6b0f5e6 L
pick 3389558 M
Rebasing (1/3)

                                                                                
Stopped at 265b89e...  K
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
rebase -i script before editing:
pick 6b0f5e6 L
pick 3389558 M
rebase -i script after editing:
pick 3389558 M
pick 6b0f5e6 L
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 80 - rebase --edit-todo can be used to modify todo

expecting success of 3404.81 'rebase -i produces readable reflog': 
	git reset --hard &&
	git branch -f branch-reflog-test H &&
	git rebase -i --onto I F branch-reflog-test &&
	cat >expect <<-\EOF &&
	rebase (finish): returning to refs/heads/branch-reflog-test
	rebase (pick): H
	rebase (pick): G
	rebase (start): checkout I
	EOF
	git reflog -n4 HEAD |
	sed "s/[^:]*: //" >actual &&
	test_cmp expect actual

HEAD is now at e7ab20b L
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch-reflog-test.
ok 81 - rebase -i produces readable reflog

expecting success of 3404.82 'rebase -i respects core.commentchar': 
	git reset --hard &&
	git checkout E^0 &&
	test_config core.commentchar "\\" &&
	write_script remove-all-but-first.sh <<-\EOF &&
	sed -e "2,\$s/^/\\\\/" "$1" >"$1.tmp" &&
	mv "$1.tmp" "$1"
	EOF
	(
		test_set_editor "$(pwd)/remove-all-but-first.sh" &&
		git rebase -i B
	) &&
	test B = $(git cat-file commit HEAD^ | sed -ne \$p)

HEAD is now at d98957c H
Note: switching to 'E^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8f99a4f E

                                                                                
Successfully rebased and updated detached HEAD.
ok 82 - rebase -i respects core.commentchar

expecting success of 3404.83 'rebase -i respects core.commentchar=auto': 
	test_config core.commentchar auto &&
	write_script copy-edit-script.sh <<-\EOF &&
	cp "$1" edit-script
	EOF
	test_when_finished "git rebase --abort || :" &&
	(
		test_set_editor "$(pwd)/copy-edit-script.sh" &&
		git rebase -i HEAD^
	) &&
	test -z "$(grep -ve "^#" -e "^\$" -e "^pick" edit-script)"


                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 83 - rebase -i respects core.commentchar=auto

expecting success of 3404.84 'rebase -i, with <onto> and <upstream> specified as :/quuxery': 
	test_when_finished "git branch -D torebase" &&
	git checkout -b torebase branch1 &&
	upstream=$(git rev-parse ":/J") &&
	onto=$(git rev-parse ":/A") &&
	git rebase --onto $onto $upstream &&
	git reset --hard branch1 &&
	git rebase --onto ":/A" ":/J" &&
	git checkout branch1

Previous HEAD position was d0f65f2 C
Switched to a new branch 'torebase'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/torebase.
HEAD is now at 450e393 I
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/torebase.
Switched to branch 'branch1'
Deleted branch torebase (was 08e872c).
ok 84 - rebase -i, with <onto> and <upstream> specified as :/quuxery

expecting success of 3404.85 'rebase -i with --strategy and -X': 
	git checkout -b conflict-merge-use-theirs conflict-branch &&
	git reset --hard HEAD^ &&
	echo five >conflict &&
	echo Z >file1 &&
	git commit -a -m "one file conflict" &&
	EDITOR=true git rebase -i --strategy=recursive -Xours conflict-branch &&
	test $(git show conflict-branch:conflict) = $(cat conflict) &&
	test $(cat file1) = Z

Switched to a new branch 'conflict-merge-use-theirs'
HEAD is now at 1eadf03 three
[conflict-merge-use-theirs 1808efd] one file conflict
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/conflict-merge-use-theirs.
ok 85 - rebase -i with --strategy and -X

expecting success of 3404.86 'interrupted rebase -i with --strategy and -X': 
	git checkout -b conflict-merge-use-theirs-interrupted conflict-branch &&
	git reset --hard HEAD^ &&
	>breakpoint &&
	git add breakpoint &&
	git commit -m "breakpoint for interactive mode" &&
	echo five >conflict &&
	echo Z >file1 &&
	git commit -a -m "one file conflict" &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1 2" git rebase -i --strategy=recursive \
			-Xours conflict-branch
	) &&
	git rebase --continue &&
	test $(git show conflict-branch:conflict) = $(cat conflict) &&
	test $(cat file1) = Z

Switched to a new branch 'conflict-merge-use-theirs-interrupted'
HEAD is now at 1eadf03 three
[conflict-merge-use-theirs-interrupted 661680f] breakpoint for interactive mode
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 breakpoint
[conflict-merge-use-theirs-interrupted 14f789b] one file conflict
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
rebase -i script before editing:
pick 661680f breakpoint for interactive mode
pick 14f789b one file conflict

rebase -i script after editing:
edit 661680f breakpoint for interactive mode
pick 14f789b one file conflict
Rebasing (1/2)

                                                                                
Stopped at 661680f...  breakpoint for interactive mode
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/conflict-merge-use-theirs-interrupted.
ok 86 - interrupted rebase -i with --strategy and -X

expecting success of 3404.87 'rebase -i error on commits with \ in message': 
	current_head=$(git rev-parse HEAD) &&
	test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" &&
	test_commit TO-REMOVE will-conflict old-content &&
	test_commit "\temp" will-conflict new-content dummy &&
	test_must_fail env EDITOR=true git rebase -i HEAD^ --onto HEAD^^ 2>error &&
	test_expect_code 1 grep  "	emp" error

[conflict-merge-use-theirs-interrupted 77c3fb4] TO-REMOVE
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 will-conflict
[conflict-merge-use-theirs-interrupted 34a4968] \temp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
CONFLICT (modify/delete): will-conflict deleted in HEAD and modified in 34a4968 (\temp).  Version 34a4968 (\temp) of will-conflict left in tree.
HEAD is now at f36c680 one file conflict
ok 87 - rebase -i error on commits with \ in message

expecting success of 3404.88 'short commit ID setup': 
	test_when_finished "git checkout primary" &&
	git checkout --orphan collide &&
	git rm -rf . &&
	(
	unset test_tick &&
	test_commit collide1 collide &&
	test_commit --notick collide2 collide &&
	test_commit --notick collide3 collide
	)

Switched to a new branch 'collide'
rm 'breakpoint'
rm 'conflict'
rm 'file1'
[collide (root-commit) 674fc94] collide1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 collide
[collide 0b53f45] collide2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[collide 6bcda37] collide3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'primary'
ok 88 - short commit ID setup

expecting success of 3404.89 'short commit ID collide': 
	test_oid_cache <<-EOF &&
	# collision-related constants
	t3404_collision	sha1:6bcd
	t3404_collision	sha256:0161
	t3404_collider	sha1:ac4f2ee
	t3404_collider	sha256:16697
	EOF
	test_when_finished "reset_rebase && git checkout primary" &&
	git checkout collide &&
	colliding_id=$(test_oid t3404_collision) &&
	hexsz=$(test_oid hexsz) &&
	test $colliding_id = "$(git rev-parse HEAD | cut -c 1-4)" &&
	test_config core.abbrev 4 &&
	(
		unset test_tick &&
		test_tick &&
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE="collide2 $(test_oid t3404_collider)" \
		FAKE_LINES="reword 1 break 2" git rebase -i HEAD~2 &&
		test $colliding_id = "$(git rev-parse HEAD | cut -c 1-4)" &&
		grep "^pick $colliding_id " \
			.git/rebase-merge/git-rebase-todo.tmp &&
		grep -E "^pick [0-9a-f]{$hexsz}" \
			.git/rebase-merge/git-rebase-todo &&
		grep -E "^pick [0-9a-f]{$hexsz}" \
			.git/rebase-merge/git-rebase-todo.backup &&
		git rebase --continue
	) &&
	collide2="$(git rev-parse HEAD~1 | cut -c 1-4)" &&
	collide3="$(git rev-parse collide3 | cut -c 1-4)" &&
	test "$collide2" = "$collide3"

Switched to branch 'collide'
rebase -i script before editing:
pick 0b53 collide2
pick 6bcd collide3

rebase -i script after editing:
reword 0b53 collide2
break
pick 6bcd collide3
Rebasing (1/3)
[detached HEAD 6bcda37f] collide2 ac4f2ee
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at 6bcda37f (collide2 ac4f2ee)
pick 6bcd collide3
pick 6bcda372b23d641debbf943e0b709349f72dcd92 collide3
pick 0b53f4541f74116336854697b0278cb818c448e2 collide2
pick 6bcda372b23d641debbf943e0b709349f72dcd92 collide3
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/collide.
fatal: No rebase in progress?
HEAD is now at fbe3cf5 collide3
Removing actual
Removing copy-edit-script.sh
Removing edit-script
Removing expect
Removing fake-editor.sh
Removing remove-all-but-first.sh
Switched to branch 'primary'
ok 89 - short commit ID collide

expecting success of 3404.90 'respect core.abbrev': 
	git config core.abbrev 12 &&
	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i HEAD~4 >todo-list
	) &&
	test 4 = $(grep -c -E "pick [0-9a-f]{12,}" todo-list)

error: There was a problem with the editor '"$FAKE_EDITOR"'.
ok 90 - respect core.abbrev

expecting success of 3404.91 'todo count': 
	write_script dump-raw.sh <<-\EOF &&
		cat "$1"
	EOF
	(
		test_set_editor "$(pwd)/dump-raw.sh" &&
		git rebase -i HEAD~4 >actual
	) &&
	test_i18ngrep "^# Rebase ..* onto ..* ([0-9]" actual


                                                                                
Successfully rebased and updated refs/heads/primary.
# Rebase 6e62bf890e21..8f99a4f1fbbd onto 6e62bf890e21 (4 commands)
ok 91 - todo count

expecting success of 3404.92 'rebase -i commits that overwrite untracked files (pick)': 
	git checkout --force branch2 &&
	git clean -f &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1 2" git rebase -i A
	) &&
	test_cmp_rev HEAD F &&
	test_path_is_missing file6 &&
	>file6 &&
	test_must_fail git rebase --continue &&
	test_cmp_rev HEAD F &&
	rm file6 &&
	git rebase --continue &&
	test_cmp_rev HEAD I

Switched to branch 'branch2'
Removing actual
Removing dump-raw.sh
Removing fake-editor.sh
Removing todo-list
rebase -i script before editing:
pick cfefd94ba3b7 F
pick 615be62cadc1 I

rebase -i script after editing:
edit cfefd94ba3b7 F
pick 615be62cadc1 I
Rebasing (1/2)

                                                                                
Stopped at cfefd94ba3b7...  F
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/2)
error: The following untracked working tree files would be overwritten by merge:
	file6
Please move or remove them before you merge.
Aborting
hint: Could not execute the todo command
hint: 
hint:     pick 615be62cadc1c85c6ac7d6974210b1aa1721c98f I
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Could not apply 615be62cadc1... I
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/branch2.
ok 92 - rebase -i commits that overwrite untracked files (pick)

expecting success of 3404.93 'rebase -i commits that overwrite untracked files (squash)': 
	git checkout --force branch2 &&
	git clean -f &&
	git tag original-branch2 &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1 squash 2" git rebase -i A
	) &&
	test_cmp_rev HEAD F &&
	test_path_is_missing file6 &&
	>file6 &&
	test_must_fail git rebase --continue &&
	test_cmp_rev HEAD F &&
	rm file6 &&
	git rebase --continue &&
	test $(git cat-file commit HEAD | sed -ne \$p) = I &&
	git reset --hard original-branch2

Already on 'branch2'
Removing fake-editor.sh
rebase -i script before editing:
pick cfefd94ba3b7 F
pick 615be62cadc1 I

rebase -i script after editing:
edit cfefd94ba3b7 F
squash 615be62cadc1 I
Rebasing (1/2)

                                                                                
Stopped at cfefd94ba3b7...  F
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/2)
error: The following untracked working tree files would be overwritten by merge:
	file6
Please move or remove them before you merge.
Aborting
hint: Could not execute the todo command
hint: 
hint:     squash 615be62cadc1c85c6ac7d6974210b1aa1721c98f I
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Could not apply 615be62cadc1... I
Rebasing (3/3)
[detached HEAD 393f3ba68ddf] F
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 file4
 create mode 100644 file6

                                                                                
Successfully rebased and updated refs/heads/branch2.
HEAD is now at 615be62cadc1 I
ok 93 - rebase -i commits that overwrite untracked files (squash)

expecting success of 3404.94 'rebase -i commits that overwrite untracked files (no ff)': 
	git checkout --force branch2 &&
	git clean -f &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1 2" git rebase -i --no-ff A
	) &&
	test $(git cat-file commit HEAD | sed -ne \$p) = F &&
	test_path_is_missing file6 &&
	>file6 &&
	test_must_fail git rebase --continue &&
	test $(git cat-file commit HEAD | sed -ne \$p) = F &&
	rm file6 &&
	git rebase --continue &&
	test $(git cat-file commit HEAD | sed -ne \$p) = I

Already on 'branch2'
Removing fake-editor.sh
rebase -i script before editing:
pick cfefd94ba3b7 F
pick 615be62cadc1 I

rebase -i script after editing:
edit cfefd94ba3b7 F
pick 615be62cadc1 I
Rebasing (1/2)

                                                                                
Stopped at cfefd94ba3b7...  F
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/2)
error: The following untracked working tree files would be overwritten by merge:
	file6
Please move or remove them before you merge.
Aborting
hint: Could not execute the todo command
hint: 
hint:     pick 615be62cadc1c85c6ac7d6974210b1aa1721c98f I
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Could not apply 615be62cadc1... I
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/branch2.
ok 94 - rebase -i commits that overwrite untracked files (no ff)

expecting success of 3404.95 'rebase --continue removes CHERRY_PICK_HEAD': 
	git checkout -b commit-to-skip &&
	for double in X 3 1
	do
		test_seq 5 | sed "s/$double/&&/" >seq &&
		git add seq &&
		test_tick &&
		git commit -m seq-$double || return 1
	done &&
	git tag seq-onto &&
	git reset --hard HEAD~2 &&
	git cherry-pick seq-onto &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES= git rebase -i seq-onto
	) &&
	test -d .git/rebase-merge &&
	git rebase --continue &&
	git diff --exit-code seq-onto &&
	test ! -d .git/rebase-merge &&
	test ! -f .git/CHERRY_PICK_HEAD

Switched to a new branch 'commit-to-skip'
[commit-to-skip 91baae341a52] seq-X
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 seq
[commit-to-skip c6f9618a0f9b] seq-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[commit-to-skip 76d13d56f0bb] seq-1
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
HEAD is now at 91baae341a52 seq-X
Auto-merging seq
[commit-to-skip 43bbefaabe73] seq-1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 16:08:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/1)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 76d13d56f0bb
Last command done (1 command done):
   pick 43bbefaabe73 seq-1
No commands remaining.
You are currently rebasing branch 'commit-to-skip' on '76d13d56f0bb'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	fake-editor.sh
	sub/

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 43bbefaabe73... seq-1

                                                                                
Successfully rebased and updated refs/heads/commit-to-skip.
ok 95 - rebase --continue removes CHERRY_PICK_HEAD

expecting success of 3404.96 'drop': 
	rebase_setup_and_clean drop-test &&
	(
		set_fake_editor &&
		FAKE_LINES="1 drop 2 3 d 4 5" git rebase -i --root
	) &&
	test E = $(git cat-file commit HEAD | sed -ne \$p) &&
	test C = $(git cat-file commit HEAD^ | sed -ne \$p) &&
	test A = $(git cat-file commit HEAD^^ | sed -ne \$p)

Switched to a new branch 'drop-test'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
drop 313fe965c048 B
pick d0f65f2f81ee C
d 0547e3f1350d D
pick 8f99a4f1fbbd E
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/drop-test.
Switched to branch 'primary'
Deleted branch drop-test (was 51a089e089a8).
fatal: No rebase in progress?
ok 96 - drop

expecting success of 3404.97 'rebase -i respects rebase.missingCommitsCheck = ignore': 
	test_config rebase.missingCommitsCheck ignore &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		FAKE_LINES="1 2 3 4" git rebase -i --root 2>actual
	) &&
	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
	test_i18ngrep \
		"Successfully rebased and updated refs/heads/missing-commit" \
		actual

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/missing-commit.
Switched to branch 'primary'
Deleted branch missing-commit (was 0547e3f1350d).
fatal: No rebase in progress?
ok 97 - rebase -i respects rebase.missingCommitsCheck = ignore

expecting success of 3404.98 'rebase -i respects rebase.missingCommitsCheck = warn': 
	cat >expect <<-EOF &&
	Warning: some commits may have been dropped accidentally.
	Dropped commits (newer to older):
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary)
	To avoid this message, use "drop" to explicitly remove a commit.
	EOF
	test_config rebase.missingCommitsCheck warn &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		FAKE_LINES="1 2 3 4" git rebase -i --root 2>actual.2
	) &&
	head -n4 actual.2 >actual &&
	test_cmp expect actual &&
	test D = $(git cat-file commit HEAD | sed -ne \$p)

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
Switched to branch 'primary'
Deleted branch missing-commit (was 0547e3f1350d).
fatal: No rebase in progress?
ok 98 - rebase -i respects rebase.missingCommitsCheck = warn

expecting success of 3404.99 'rebase -i respects rebase.missingCommitsCheck = error': 
	cat >expect <<-EOF &&
	Warning: some commits may have been dropped accidentally.
	Dropped commits (newer to older):
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary)
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary~2)
	To avoid this message, use "drop" to explicitly remove a commit.

	Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
	The possible behaviours are: ignore, warn, error.

	You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
	Or you can abort the rebase with 'git rebase --abort'.
	EOF
	test_config rebase.missingCommitsCheck error &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 2 4" \
			git rebase -i --root 2>actual &&
		test_cmp expect actual &&
		cp .git/rebase-merge/git-rebase-todo.backup \
			.git/rebase-merge/git-rebase-todo &&
		FAKE_LINES="1 2 drop 3 4 drop 5" git rebase --edit-todo
	) &&
	git rebase --continue &&
	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
	test B = $(git cat-file commit HEAD^ | sed -ne \$p)

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick 0547e3f1350d D
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
drop d0f65f2f81ee C
pick 0547e3f1350d D
drop 8f99a4f1fbbd E
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/missing-commit.
Switched to branch 'primary'
Deleted branch missing-commit (was 1c17f6d7b75f).
fatal: No rebase in progress?
ok 99 - rebase -i respects rebase.missingCommitsCheck = error

expecting success of 3404.100 'rebase --edit-todo respects rebase.missingCommitsCheck = ignore': 
	test_config rebase.missingCommitsCheck ignore &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		FAKE_LINES="break 1 2 3 4 5" git rebase -i --root &&
		FAKE_LINES="1 2 3 4" git rebase --edit-todo &&
		git rebase --continue 2>actual
	) &&
	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
	test_i18ngrep \
		"Successfully rebased and updated refs/heads/missing-commit" \
		actual

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
break
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
Rebasing (1/6)

                                                                                
Stopped at e64c99ec4da8 ()
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/missing-commit.
Switched to branch 'primary'
Deleted branch missing-commit (was 0547e3f1350d).
fatal: No rebase in progress?
ok 100 - rebase --edit-todo respects rebase.missingCommitsCheck = ignore

expecting success of 3404.101 'rebase --edit-todo respects rebase.missingCommitsCheck = warn': 
	cat >expect <<-EOF &&
	error: invalid line 1: badcmd $(git rev-list --pretty=oneline --abbrev-commit -1 primary~4)
	Warning: some commits may have been dropped accidentally.
	Dropped commits (newer to older):
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary)
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary~4)
	To avoid this message, use "drop" to explicitly remove a commit.
	EOF
	head -n4 expect >expect.2 &&
	tail -n1 expect >>expect.2 &&
	tail -n4 expect.2 >expect.3 &&
	test_config rebase.missingCommitsCheck warn &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="bad 1 2 3 4 5" \
			git rebase -i --root &&
		cp .git/rebase-merge/git-rebase-todo.backup orig &&
		FAKE_LINES="2 3 4" git rebase --edit-todo 2>actual.2 &&
		head -n6 actual.2 >actual &&
		test_cmp expect actual &&
		cp orig .git/rebase-merge/git-rebase-todo &&
		FAKE_LINES="1 2 3 4" git rebase --edit-todo 2>actual.2 &&
		head -n4 actual.2 >actual &&
		test_cmp expect.3 actual &&
		git rebase --continue 2>actual
	) &&
	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
	test_i18ngrep \
		"Successfully rebased and updated refs/heads/missing-commit" \
		actual

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
badcmd 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
error: invalid line 1: badcmd 6e62bf890e21 A
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
rebase -i script before editing:
badcmd 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/missing-commit.
Switched to branch 'primary'
Deleted branch missing-commit (was 0547e3f1350d).
fatal: No rebase in progress?
ok 101 - rebase --edit-todo respects rebase.missingCommitsCheck = warn

expecting success of 3404.102 'rebase --edit-todo respects rebase.missingCommitsCheck = error': 
	cat >expect <<-EOF &&
	error: invalid line 1: badcmd $(git rev-list --pretty=oneline --abbrev-commit -1 primary~4)
	Warning: some commits may have been dropped accidentally.
	Dropped commits (newer to older):
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary)
	 - $(git rev-list --pretty=oneline --abbrev-commit -1 primary~4)
	To avoid this message, use "drop" to explicitly remove a commit.

	Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
	The possible behaviours are: ignore, warn, error.

	You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
	Or you can abort the rebase with 'git rebase --abort'.
	EOF
	tail -n11 expect >expect.2 &&
	head -n3 expect.2 >expect.3 &&
	tail -n7 expect.2 >>expect.3 &&
	test_config rebase.missingCommitsCheck error &&
	rebase_setup_and_clean missing-commit &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="bad 1 2 3 4 5" \
			git rebase -i --root &&
		cp .git/rebase-merge/git-rebase-todo.backup orig &&
		test_must_fail env FAKE_LINES="2 3 4" \
			git rebase --edit-todo 2>actual &&
		test_cmp expect actual &&
		test_must_fail git rebase --continue 2>actual &&
		test_cmp expect.2 actual &&
		test_must_fail git rebase --edit-todo &&
		cp orig .git/rebase-merge/git-rebase-todo &&
		test_must_fail env FAKE_LINES="1 2 3 4" \
			git rebase --edit-todo 2>actual &&
		test_cmp expect.3 actual &&
		test_must_fail git rebase --continue 2>actual &&
		test_cmp expect.3 actual &&
		cp orig .git/rebase-merge/git-rebase-todo &&
		FAKE_LINES="1 2 3 4 drop 5" git rebase --edit-todo &&
		git rebase --continue 2>actual
	) &&
	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
	test_i18ngrep \
		"Successfully rebased and updated refs/heads/missing-commit" \
		actual

Switched to a new branch 'missing-commit'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
badcmd 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
error: invalid line 1: badcmd 6e62bf890e21 A
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
rebase -i script before editing:
badcmd 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
Warning: some commits may have been dropped accidentally.
Dropped commits (newer to older):
 - 8f99a4f1fbbd E
 - 6e62bf890e21 A
To avoid this message, use "drop" to explicitly remove a commit.

Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
The possible behaviours are: ignore, warn, error.

You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
drop 8f99a4f1fbbd E
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/missing-commit.
Switched to branch 'primary'
Deleted branch missing-commit (was 0547e3f1350d).
fatal: No rebase in progress?
ok 102 - rebase --edit-todo respects rebase.missingCommitsCheck = error

expecting success of 3404.103 'rebase.missingCommitsCheck = error after resolving conflicts': 
	test_config rebase.missingCommitsCheck error &&
	(
		set_fake_editor &&
		FAKE_LINES="drop 1 break 2 3 4" git rebase -i A E
	) &&
	git rebase --edit-todo &&
	test_must_fail git rebase --continue &&
	echo x >file1 &&
	git add file1 &&
	git rebase --continue

rebase -i script before editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
drop 313fe965c048 B
break
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
Rebasing (2/5)

                                                                                
Stopped at 6e62bf890e21 (A)
Rebasing (3/5)
Rebasing (4/5)
Auto-merging file1
CONFLICT (content): Merge conflict in file1
error: could not apply 0547e3f1350d... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 0547e3f1350d... D
[detached HEAD c2dad584937b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (5/5)

                                                                                
Successfully rebased and updated detached HEAD.
ok 103 - rebase.missingCommitsCheck = error after resolving conflicts

expecting success of 3404.104 'rebase.missingCommitsCheck = error when editing for a second time': 
	test_config rebase.missingCommitsCheck error &&
	(
		set_fake_editor &&
		FAKE_LINES="1 break 2 3" git rebase -i A D &&
		cp .git/rebase-merge/git-rebase-todo todo &&
		test_must_fail env FAKE_LINES=2 git rebase --edit-todo &&
		GIT_SEQUENCE_EDITOR="cp todo" git rebase --edit-todo &&
		git rebase --continue
	)

rebase -i script before editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D

rebase -i script after editing:
pick 313fe965c048 B
break
pick d0f65f2f81ee C
pick 0547e3f1350d D
Rebasing (2/4)

                                                                                
Stopped at 313fe965c048 (B)
rebase -i script before editing:
pick d0f65f2f81ee C
pick 0547e3f1350d D
rebase -i script after editing:
pick 0547e3f1350d D
Warning: some commits may have been dropped accidentally.
Dropped commits (newer to older):
 - d0f65f2f81ee C
To avoid this message, use "drop" to explicitly remove a commit.

Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
The possible behaviours are: ignore, warn, error.

You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 104 - rebase.missingCommitsCheck = error when editing for a second time

expecting success of 3404.105 'respects rebase.abbreviateCommands with fixup, squash and exec': 
	rebase_setup_and_clean abbrevcmd &&
	test_commit "first" file1.txt "first line" first &&
	test_commit "second" file1.txt "another line" second &&
	test_commit "fixup! first" file2.txt "first line again" first_fixup &&
	test_commit "squash! second" file1.txt "another line here" second_squash &&
	cat >expected <<-EOF &&
	p $(git rev-list --abbrev-commit -1 first) first
	f $(git rev-list --abbrev-commit -1 first_fixup) fixup! first
	x git show HEAD
	p $(git rev-list --abbrev-commit -1 second) second
	s $(git rev-list --abbrev-commit -1 second_squash) squash! second
	x git show HEAD
	EOF
	git checkout abbrevcmd &&
	test_config rebase.abbreviateCommands true &&
	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i --exec "git show HEAD" \
			--autosquash primary >actual
	) &&
	test_cmp expected actual

Previous HEAD position was 0547e3f1350d D
Switched to a new branch 'abbrevcmd'
[abbrevcmd 42b8f159a432] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1.txt
[abbrevcmd 4d77de6c05df] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[abbrevcmd ecff34393bc3] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2.txt
[abbrevcmd f772e337e29f] squash! second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Already on 'abbrevcmd'
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Switched to branch 'primary'
Deleted branch abbrevcmd (was f772e337e29f).
fatal: No rebase in progress?
ok 105 - respects rebase.abbreviateCommands with fixup, squash and exec

expecting success of 3404.106 'static check of bad command': 
	rebase_setup_and_clean bad-cmd &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 2 3 bad 4 5" \
		git rebase -i --root 2>actual &&
		test_i18ngrep "badcmd $(git rev-list --oneline -1 primary~1)" \
				actual &&
		test_i18ngrep "You can fix this with .git rebase --edit-todo.." \
				actual &&
		FAKE_LINES="1 2 3 drop 4 5" git rebase --edit-todo
	) &&
	git rebase --continue &&
	test E = $(git cat-file commit HEAD | sed -ne \$p) &&
	test C = $(git cat-file commit HEAD^ | sed -ne \$p)

Switched to a new branch 'bad-cmd'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
badcmd 0547e3f1350d D
pick 8f99a4f1fbbd E
error: invalid line 4: badcmd 0547e3f1350d D
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
error: invalid line 4: badcmd 0547e3f1350d D
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
badcmd 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
drop 0547e3f1350d D
pick 8f99a4f1fbbd E
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/bad-cmd.
Switched to branch 'primary'
Deleted branch bad-cmd (was 1c8ce10ab787).
fatal: No rebase in progress?
ok 106 - static check of bad command

expecting success of 3404.107 'tabs and spaces are accepted in the todolist': 
	rebase_setup_and_clean indented-comment &&
	write_script add-indent.sh <<-\EOF &&
	(
		# Turn single spaces into space/tab mix
		sed "1s/ /	/g; 2s/ /  /g; 3s/ / 	/g" "$1"
		printf "\n\t# comment\n #more\n\t # comment\n"
	) >"$1.new"
	mv "$1.new" "$1"
	EOF
	(
		test_set_editor "$(pwd)/add-indent.sh" &&
		git rebase -i HEAD^^^
	) &&
	test E = $(git cat-file commit HEAD | sed -ne \$p)

Switched to a new branch 'indented-comment'

                                                                                
Successfully rebased and updated refs/heads/indented-comment.
Switched to branch 'primary'
Deleted branch indented-comment (was 8f99a4f1fbbd).
fatal: No rebase in progress?
ok 107 - tabs and spaces are accepted in the todolist

expecting success of 3404.108 'static check of bad SHA-1': 
	rebase_setup_and_clean bad-sha &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_LINES="1 2 edit fakesha 3 4 5 #" \
			git rebase -i --root 2>actual &&
			test_i18ngrep "edit XXXXXXX False commit" actual &&
			test_i18ngrep "You can fix this with .git rebase --edit-todo.." \
					actual &&
		FAKE_LINES="1 2 4 5 6" git rebase --edit-todo
	) &&
	git rebase --continue &&
	test E = $(git cat-file commit HEAD | sed -ne \$p)

Switched to a new branch 'bad-sha'
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
edit XXXXXXX False commit
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
# comment
error: invalid line 3: edit XXXXXXX False commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
error: could not parse 'XXXXXXX'
error: invalid line 3: edit XXXXXXX False commit
rebase -i script before editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
edit XXXXXXX False commit
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
rebase -i script after editing:
pick 6e62bf890e21 A
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)

                                                                                
Successfully rebased and updated refs/heads/bad-sha.
Switched to branch 'primary'
Deleted branch bad-sha (was 8f99a4f1fbbd).
fatal: No rebase in progress?
ok 108 - static check of bad SHA-1

expecting success of 3404.109 'editor saves as CR/LF': 
	git checkout -b with-crlf &&
	write_script add-crs.sh <<-\EOF &&
	sed -e "s/\$/Q/" <"$1" | tr Q "\\015" >"$1".new &&
	mv -f "$1".new "$1"
	EOF
	(
		test_set_editor "$(pwd)/add-crs.sh" &&
		git rebase -i HEAD^
	)

Switched to a new branch 'with-crlf'

                                                                                
Successfully rebased and updated refs/heads/with-crlf.
ok 109 - editor saves as CR/LF

expecting success of 3404.110 'rebase -i --gpg-sign=<key-id>': 
	test_when_finished "test_might_fail git rebase --abort" &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i --gpg-sign="\"S I Gner\"" \
			HEAD^ >out 2>err
	) &&
	test_i18ngrep "$SQ-S\"S I Gner\"$SQ" err

  git commit --amend '-S"S I Gner"'
ok 110 - rebase -i --gpg-sign=<key-id>

expecting success of 3404.111 'rebase -i --gpg-sign=<key-id> overrides commit.gpgSign': 
	test_when_finished "test_might_fail git rebase --abort" &&
	test_config commit.gpgsign true &&
	(
		set_fake_editor &&
		FAKE_LINES="edit 1" git rebase -i --gpg-sign="\"S I Gner\"" \
			HEAD^ >out 2>err
	) &&
	test_i18ngrep "$SQ-S\"S I Gner\"$SQ" err

  git commit --amend '-S"S I Gner"'
ok 111 - rebase -i --gpg-sign=<key-id> overrides commit.gpgSign

expecting success of 3404.112 'valid author header after --root swap': 
	rebase_setup_and_clean author-header no-conflict-branch &&
	git commit --amend --author="Au ${SQ}thor <author@example.com>" --no-edit &&
	git cat-file commit HEAD | grep ^author >expected &&
	(
		set_fake_editor &&
		FAKE_LINES="5 1" git rebase -i --root
	) &&
	git cat-file commit HEAD^ | grep ^author >actual &&
	test_cmp expected actual

Switched to a new branch 'author-header'
[author-header d4dcc6d22bff] M
 Author: Au 'thor <author@example.com>
 Date: Thu Apr 7 15:29:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 fileM
rebase -i script before editing:
pick 6e62bf890e21 A
pick 808874f7b187 J
pick 265b89e813d4 K
pick 6b0f5e6c3e83 L
pick d4dcc6d22bff M

rebase -i script after editing:
pick d4dcc6d22bff M
pick 6e62bf890e21 A
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/author-header.
Switched to branch 'primary'
Deleted branch author-header (was 141d57bb9b25).
fatal: No rebase in progress?
ok 112 - valid author header after --root swap

expecting success of 3404.113 'valid author header when author contains single quote': 
	rebase_setup_and_clean author-header no-conflict-branch &&
	git commit --amend --author="Au ${SQ}thor <author@example.com>" --no-edit &&
	git cat-file commit HEAD | grep ^author >expected &&
	(
		set_fake_editor &&
		FAKE_LINES="2" git rebase -i HEAD~2
	) &&
	git cat-file commit HEAD | grep ^author >actual &&
	test_cmp expected actual

Switched to a new branch 'author-header'
[author-header d4dcc6d22bff] M
 Author: Au 'thor <author@example.com>
 Date: Thu Apr 7 15:29:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 fileM
rebase -i script before editing:
pick 6b0f5e6c3e83 L
pick d4dcc6d22bff M

rebase -i script after editing:
pick d4dcc6d22bff M
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/author-header.
Switched to branch 'primary'
Deleted branch author-header (was b929a6a72971).
fatal: No rebase in progress?
ok 113 - valid author header when author contains single quote

expecting success of 3404.114 'post-commit hook is called': 
	>actual &&
	test_hook post-commit <<-\EOS &&
	git rev-parse HEAD >>actual
	EOS
	(
		set_fake_editor &&
		FAKE_LINES="edit 4 1 reword 2 fixup 3" git rebase -i A E &&
		echo x>file3 &&
		git add file3 &&
		FAKE_COMMIT_MESSAGE=edited git rebase --continue
	) &&
	git rev-parse HEAD@{5} HEAD@{4} HEAD@{3} HEAD@{2} HEAD@{1} HEAD \
		>expect &&
	test_cmp expect actual

rebase -i script before editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D
pick 8f99a4f1fbbd E

rebase -i script after editing:
edit 8f99a4f1fbbd E
pick 313fe965c048 B
reword d0f65f2f81ee C
fixup 0547e3f1350d D
Rebasing (1/4)

                                                                                
Stopped at 8f99a4f1fbbd...  E
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD bc867d3a07fd] edited
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Rebasing (2/4)
Rebasing (3/4)
[detached HEAD d54e5ab0b586] edited
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 114 - post-commit hook is called

expecting success of 3404.115 'correct error message for partial commit after empty pick': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		FAKE_LINES="2 1 1" &&
		export FAKE_LINES &&
		test_must_fail git rebase -i A D
	) &&
	echo x >file1 &&
	test_must_fail git commit file1 2>err &&
	test_i18ngrep "cannot do a partial commit during a rebase." err

rebase -i script before editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D

rebase -i script after editing:
pick d0f65f2f81ee C
pick 313fe965c048 B
pick 313fe965c048 B
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 6e62bf890e21
Last commands done (3 commands done):
   pick 313fe965c048 B
   pick 313fe965c048 B
  (see more in file .git/rebase-merge/done)
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual.2
	add-crs.sh
	add-indent.sh
	err
	expect
	expect.2
	expect.3
	expected
	fake-editor.sh
	orig
	out
	sub/
	todo

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 313fe965c048... B
fatal: cannot do a partial commit during a rebase.
ok 115 - correct error message for partial commit after empty pick

expecting success of 3404.116 'correct error message for commit --amend after empty pick': 
	test_when_finished "git rebase --abort" &&
	(
		set_fake_editor &&
		FAKE_LINES="1 1" &&
		export FAKE_LINES &&
		test_must_fail git rebase -i A D
	) &&
	echo x>file1 &&
	test_must_fail git commit -a --amend 2>err &&
	test_i18ngrep "middle of a rebase -- cannot amend." err

rebase -i script before editing:
pick 313fe965c048 B
pick d0f65f2f81ee C
pick 0547e3f1350d D

rebase -i script after editing:
pick 313fe965c048 B
pick 313fe965c048 B
Rebasing (2/2)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 6e62bf890e21
Last commands done (2 commands done):
   pick 313fe965c048 B
   pick 313fe965c048 B
No commands remaining.
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual.2
	add-crs.sh
	add-indent.sh
	err
	expect
	expect.2
	expect.3
	expected
	fake-editor.sh
	orig
	out
	sub/
	todo

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 313fe965c048... B
fatal: You are in the middle of a rebase -- cannot amend.
ok 116 - correct error message for commit --amend after empty pick

expecting success of 3404.117 'todo has correct onto hash': 
	GIT_SEQUENCE_EDITOR=cat git rebase -i no-conflict-branch~4 no-conflict-branch >actual &&
	onto=$(git rev-parse --short HEAD~4) &&
	test_i18ngrep "^# Rebase ..* onto $onto" actual


                                                                                
Successfully rebased and updated refs/heads/no-conflict-branch.
# Rebase 6e62bf890e21..33895580a3f9 onto 6e62bf890e21 (4 commands)
ok 117 - todo has correct onto hash

expecting success of 3404.118 'ORIG_HEAD is updated correctly': 
	test_when_finished "git checkout primary && git branch -D test-orig-head" &&
	git checkout -b test-orig-head A &&
	git commit --allow-empty -m A1 &&
	git commit --allow-empty -m A2 &&
	git commit --allow-empty -m A3 &&
	git commit --allow-empty -m A4 &&
	git rebase primary &&
	test_cmp_rev ORIG_HEAD test-orig-head@{1}

Switched to a new branch 'test-orig-head'
[test-orig-head 988a45cf7c4d] A1
 Author: A U Thor <author@example.com>
[test-orig-head 001994977a57] A2
 Author: A U Thor <author@example.com>
[test-orig-head f8b037fdfd3c] A3
 Author: A U Thor <author@example.com>
[test-orig-head dee0c985c630] A4
 Author: A U Thor <author@example.com>
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/test-orig-head.
Switched to branch 'primary'
Deleted branch test-orig-head (was 25c72c815b0c).
ok 118 - ORIG_HEAD is updated correctly

expecting success of 3404.119 '--update-refs adds label and update-ref commands': 
	git checkout -b update-refs no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git commit --allow-empty --fixup=third &&
	git branch -f is-not-reordered &&
	git commit --allow-empty --fixup=HEAD~4 &&
	git branch -f shared-tip &&
	(
		set_cat_todo_editor &&

		cat >expect <<-EOF &&
		pick $(git log -1 --format=%h J) J
		fixup $(git log -1 --format=%h update-refs) fixup! J # empty
		update-ref refs/heads/second
		update-ref refs/heads/first
		pick $(git log -1 --format=%h K) K
		pick $(git log -1 --format=%h L) L
		fixup $(git log -1 --format=%h is-not-reordered) fixup! L # empty
		update-ref refs/heads/third
		pick $(git log -1 --format=%h M) M
		update-ref refs/heads/no-conflict-branch
		update-ref refs/heads/is-not-reordered
		update-ref refs/heads/shared-tip
		EOF

		test_must_fail git rebase -i --autosquash --update-refs primary >todo &&
		test_cmp expect todo &&

		test_must_fail git -c rebase.autosquash=true \
				   -c rebase.updaterefs=true \
				   rebase -i primary >todo &&

		test_cmp expect todo
	)

Switched to a new branch 'update-refs'
[update-refs d580aa243c5a] fixup! L
 Author: A U Thor <author@example.com>
[update-refs 5921e09cdb84] fixup! J
 Author: A U Thor <author@example.com>
error: There was a problem with the editor '"$FAKE_EDITOR"'.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
ok 119 - --update-refs adds label and update-ref commands

expecting success of 3404.120 '--update-refs adds commands with --rebase-merges': 
	git checkout -b update-refs-with-merge no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git merge -m merge branch2 &&
	git branch -f merge-branch &&
	git commit --fixup=third --allow-empty &&
	(
		set_cat_todo_editor &&

		cat >expect <<-EOF &&
		label onto
		reset onto
		pick $(git log -1 --format=%h branch2~1) F
		pick $(git log -1 --format=%h branch2) I
		update-ref refs/heads/branch2
		label merge
		reset onto
		pick $(git log -1 --format=%h refs/heads/second) J
		update-ref refs/heads/second
		update-ref refs/heads/first
		pick $(git log -1 --format=%h refs/heads/third~1) K
		pick $(git log -1 --format=%h refs/heads/third) L
		fixup $(git log -1 --format=%h update-refs-with-merge) fixup! L # empty
		update-ref refs/heads/third
		pick $(git log -1 --format=%h HEAD~2) M
		update-ref refs/heads/no-conflict-branch
		merge -C $(git log -1 --format=%h HEAD~1) merge # merge
		update-ref refs/heads/merge-branch
		EOF

		test_must_fail git rebase -i --autosquash \
				   --rebase-merges=rebase-cousins \
				   --update-refs primary >todo &&

		test_cmp expect todo &&

		test_must_fail git -c rebase.autosquash=true \
				   -c rebase.updaterefs=true \
				   rebase -i \
				   --rebase-merges=rebase-cousins \
				   primary >todo &&

		test_cmp expect todo
	)

Switched to a new branch 'update-refs-with-merge'
Merge made by the 'ort' strategy.
 file4 | 1 +
 file6 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 file4
 create mode 100644 file6
[update-refs-with-merge 29fba79037a4] fixup! L
 Author: A U Thor <author@example.com>
error: There was a problem with the editor '"$FAKE_EDITOR"'.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
ok 120 - --update-refs adds commands with --rebase-merges

expecting success of 3404.121 '--update-refs updates refs correctly': 
	git checkout -B update-refs no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	test_commit extra2 fileX &&
	git commit --amend --fixup=L &&

	git rebase -i --autosquash --update-refs primary 2>err &&

	test_cmp_rev HEAD~3 refs/heads/first &&
	test_cmp_rev HEAD~3 refs/heads/second &&
	test_cmp_rev HEAD~1 refs/heads/third &&
	test_cmp_rev HEAD refs/heads/no-conflict-branch &&

	cat >expect <<-\EOF &&
	Successfully rebased and updated refs/heads/update-refs.
	Updated the following refs with --update-refs:
		refs/heads/first
		refs/heads/no-conflict-branch
		refs/heads/second
		refs/heads/third
	EOF

	# Clear "Rebasing (X/Y)" progress lines and drop leading tabs.
	sed -e "s/Rebasing.*Successfully/Successfully/g" -e "s/^\t//g" \
		<err >err.trimmed &&
	test_cmp expect err.trimmed

Switched to and reset branch 'update-refs'
[update-refs 9da56b161557] extra2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileX
[update-refs c4f48e9a00f5] fixup! L
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileX
ok 121 - --update-refs updates refs correctly

expecting success of 3404.122 'respect user edits to update-ref steps': 
	git checkout -B update-refs-break no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git branch -f unseen base &&

	# First, we will add breaks to the expected todo file
	cat >fake-todo-1 <<-EOF &&
	pick $(git rev-parse HEAD~3)
	break
	update-ref refs/heads/second
	update-ref refs/heads/first

	pick $(git rev-parse HEAD~2)
	pick $(git rev-parse HEAD~1)
	update-ref refs/heads/third

	pick $(git rev-parse HEAD)
	update-ref refs/heads/no-conflict-branch
	EOF

	# Second, we will drop some update-refs commands (and move one)
	cat >fake-todo-2 <<-EOF &&
	update-ref refs/heads/second

	pick $(git rev-parse HEAD~2)
	update-ref refs/heads/third
	pick $(git rev-parse HEAD~1)
	break

	pick $(git rev-parse HEAD)
	EOF

	# Third, we will:
	# * insert a new one (new-branch),
	# * re-add an old one (first), and
	# * add a second instance of a previously-stored one (second)
	cat >fake-todo-3 <<-EOF &&
	update-ref refs/heads/unseen
	update-ref refs/heads/new-branch
	pick $(git rev-parse HEAD)
	update-ref refs/heads/first
	update-ref refs/heads/second
	EOF

	(
		set_replace_editor fake-todo-1 &&
		git rebase -i --update-refs primary &&

		# These branches are currently locked.
		for b in first second third no-conflict-branch
		do
			test_must_fail git branch -f $b base || return 1
		done &&

		set_replace_editor fake-todo-2 &&
		git rebase --edit-todo &&

		# These branches are currently locked.
		for b in second third
		do
			test_must_fail git branch -f $b base || return 1
		done &&

		# These branches are currently unlocked for checkout.
		for b in first no-conflict-branch
		do
			git worktree add wt-$b $b &&
			git worktree remove wt-$b || return 1
		done &&

		git rebase --continue &&

		set_replace_editor fake-todo-3 &&
		git rebase --edit-todo &&

		# These branches are currently locked.
		for b in second third first unseen
		do
			test_must_fail git branch -f $b base || return 1
		done &&

		# These branches are currently unlocked for checkout.
		for b in no-conflict-branch
		do
			git worktree add wt-$b $b &&
			git worktree remove wt-$b || return 1
		done &&

		git rebase --continue
	) &&

	test_cmp_rev HEAD~2 refs/heads/third &&
	test_cmp_rev HEAD~1 refs/heads/unseen &&
	test_cmp_rev HEAD~1 refs/heads/new-branch &&
	test_cmp_rev HEAD refs/heads/first &&
	test_cmp_rev HEAD refs/heads/second &&
	test_cmp_rev HEAD refs/heads/no-conflict-branch

Switched to a new branch 'update-refs-break'
rebase -i script after editing:
pick c49b6574f4e9659c4aef3cc10be848348dc1a0ee
break
update-ref refs/heads/second
update-ref refs/heads/first

pick e31be72ab52d740527956c171d40a832b63e68ca
pick 34033109e5a0def540b16172943d8a7e2a8a712e
update-ref refs/heads/third

pick fb069ba3d9b13031500b5a75939ff4162b7cb13a
update-ref refs/heads/no-conflict-branch
Rebasing (2/11)

                                                                                
Stopped at c49b6574f4e9 (J)
fatal: cannot force update the branch 'first' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'second' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'third' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'no-conflict-branch' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
rebase -i script after editing:
update-ref refs/heads/second

pick e31be72ab52d740527956c171d40a832b63e68ca
update-ref refs/heads/third
pick 34033109e5a0def540b16172943d8a7e2a8a712e
break

pick fb069ba3d9b13031500b5a75939ff4162b7cb13a
fatal: cannot force update the branch 'second' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'third' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
warning: refname 'first' is ambiguous.
Preparing worktree (checking out 'first')
warning: refname 'first' is ambiguous.
HEAD is now at c49b6574f4e9 J
Preparing worktree (checking out 'no-conflict-branch')
HEAD is now at fb069ba3d9b1 M
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)
Rebasing (7/8)

                                                                                
Stopped at 34033109e5a0 (L)
rebase -i script after editing:
update-ref refs/heads/unseen
update-ref refs/heads/new-branch
pick fb069ba3d9b13031500b5a75939ff4162b7cb13a
update-ref refs/heads/first
update-ref refs/heads/second
fatal: cannot force update the branch 'second' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'third' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'first' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
fatal: cannot force update the branch 'unseen' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t3404-rebase-interactive'
Preparing worktree (checking out 'no-conflict-branch')
HEAD is now at fb069ba3d9b1 M
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)
Rebasing (11/12)
Rebasing (12/12)

                                                                                
Successfully rebased and updated refs/heads/update-refs-break.
Updated the following refs with --update-refs:
	refs/heads/first
	refs/heads/new-branch
	refs/heads/second
	refs/heads/third
	refs/heads/unseen
ok 122 - respect user edits to update-ref steps

expecting success of 3404.123 '--update-refs: all update-ref lines removed': 
	git checkout -b test-refs-not-removed no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git branch -f tip &&

	test_commit test-refs-not-removed &&
	git commit --amend --fixup first &&

	git rev-parse first second third tip no-conflict-branch >expect-oids &&

	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i --update-refs base >todo.raw &&
		sed -e "/^update-ref/d" <todo.raw >todo
	) &&
	(
		set_replace_editor todo &&
		git rebase -i --update-refs base
	) &&

	# Ensure refs are not deleted and their OIDs have not changed
	git rev-parse first second third tip no-conflict-branch >actual-oids &&
	test_cmp expect-oids actual-oids

Switched to a new branch 'test-refs-not-removed'
[test-refs-not-removed adbf713ec8f3] test-refs-not-removed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed.t
warning: refname 'first' is ambiguous.
[test-refs-not-removed 5ca2ca8d583e] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed.t
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
rebase -i script after editing:
pick c49b6574f4e9 J
pick e31be72ab52d K
pick 34033109e5a0 L
pick fb069ba3d9b1 M
pick 5ca2ca8d583e fixup! first

                                                                                
Successfully rebased and updated refs/heads/test-refs-not-removed.
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
ok 123 - --update-refs: all update-ref lines removed

expecting success of 3404.124 '--update-refs: all update-ref lines removed, then some re-added': 
	git checkout -b test-refs-not-removed2 no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git branch -f tip &&

	test_commit test-refs-not-removed2 &&
	git commit --amend --fixup first &&

	git rev-parse first second third >expect-oids &&

	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i \
			--autosquash --update-refs \
			base >todo.raw &&
		sed -e "/^update-ref/d" <todo.raw >todo
	) &&

	# Add a break to the end of the todo so we can edit later
	echo "break" >>todo &&

	(
		set_replace_editor todo &&
		git rebase -i --autosquash --update-refs base &&
		echo "update-ref refs/heads/tip" >todo &&
		git rebase --edit-todo &&
		git rebase --continue
	) &&

	# Ensure first/second/third are unchanged, but tip is updated
	git rev-parse first second third >actual-oids &&
	test_cmp expect-oids actual-oids &&
	test_cmp_rev HEAD tip

Switched to a new branch 'test-refs-not-removed2'
[test-refs-not-removed2 67d47c6fa009] test-refs-not-removed2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed2.t
warning: refname 'first' is ambiguous.
[test-refs-not-removed2 04193a2c3f06] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed2.t
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
warning: refname 'first' is ambiguous.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
warning: refname 'first' is ambiguous.
rebase -i script after editing:
pick c49b6574f4e9 J
pick e31be72ab52d K
pick 34033109e5a0 L
pick fb069ba3d9b1 M
pick 04193a2c3f06 fixup! first
break
Rebasing (6/6)

                                                                                
Stopped at 04193a2c3f06 (fixup! first)
rebase -i script after editing:
update-ref refs/heads/tip
Rebasing (7/7)

                                                                                
Successfully rebased and updated refs/heads/test-refs-not-removed2.
Updated the following refs with --update-refs:
	refs/heads/tip
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
ok 124 - --update-refs: all update-ref lines removed, then some re-added

expecting success of 3404.125 '--update-refs: --edit-todo with no update-ref lines': 
	git checkout -b test-refs-not-removed3 no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~3 &&
	git branch -f third HEAD~1 &&
	git branch -f tip &&

	test_commit test-refs-not-removed3 &&
	git commit --amend --fixup first &&

	git rev-parse first second third tip no-conflict-branch >expect-oids &&

	(
		set_cat_todo_editor &&
		test_must_fail git rebase -i \
			--autosquash --update-refs \
			base >todo.raw &&
		sed -e "/^update-ref/d" <todo.raw >todo
	) &&

	# Add a break to the beginning of the todo so we can resume with no
	# update-ref lines
	echo "break" >todo.new &&
	cat todo >>todo.new &&

	(
		set_replace_editor todo.new &&
		git rebase -i --autosquash --update-refs base &&

		# Make no changes when editing so update-refs is still empty
		cat todo >todo.new &&
		git rebase --edit-todo &&
		git rebase --continue
	) &&

	# Ensure refs are not deleted and their OIDs have not changed
	git rev-parse first second third tip no-conflict-branch >actual-oids &&
	test_cmp expect-oids actual-oids

Switched to a new branch 'test-refs-not-removed3'
[test-refs-not-removed3 0495d4feaa2b] test-refs-not-removed3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed3.t
warning: refname 'first' is ambiguous.
[test-refs-not-removed3 6fcb3c6ba86d] fixup! first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-refs-not-removed3.t
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
warning: refname 'first' is ambiguous.
error: There was a problem with the editor '"$FAKE_EDITOR"'.
warning: refname 'first' is ambiguous.
rebase -i script after editing:
break
pick c49b6574f4e9 J
pick e31be72ab52d K
pick 34033109e5a0 L
pick fb069ba3d9b1 M
pick 6fcb3c6ba86d fixup! first
Rebasing (1/6)

                                                                                
Stopped at 8f99a4f1fbbd (E)
rebase -i script after editing:
pick c49b6574f4e9 J
pick e31be72ab52d K
pick 34033109e5a0 L
pick fb069ba3d9b1 M
pick 6fcb3c6ba86d fixup! first
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)
Rebasing (5/6)
Rebasing (6/6)

                                                                                
Successfully rebased and updated refs/heads/test-refs-not-removed3.
warning: refname 'first' is ambiguous.
warning: refname 'second' is ambiguous.
ok 125 - --update-refs: --edit-todo with no update-ref lines

expecting success of 3404.126 '--update-refs: check failed ref update': 
	git checkout -B update-refs-error no-conflict-branch &&
	git branch -f base HEAD~4 &&
	git branch -f first HEAD~3 &&
	git branch -f second HEAD~2 &&
	git branch -f third HEAD~1 &&

	cat >fake-todo <<-EOF &&
	pick $(git rev-parse HEAD~3)
	break
	update-ref refs/heads/first

	pick $(git rev-parse HEAD~2)
	update-ref refs/heads/second

	pick $(git rev-parse HEAD~1)
	update-ref refs/heads/third

	pick $(git rev-parse HEAD)
	update-ref refs/heads/no-conflict-branch
	EOF

	(
		set_replace_editor fake-todo &&
		git rebase -i --update-refs base
	) &&

	# At this point, the values of first, second, and third are
	# recorded in the update-refs file. We will force-update the
	# "second" ref, but "git branch -f" will not work because of
	# the lock in the update-refs file.
	git rev-parse third >.git/refs/heads/second &&

	test_must_fail git rebase --continue 2>err &&
	grep "update_ref failed for ref 'refs/heads/second'" err &&

	cat >expect <<-\EOF &&
	Updated the following refs with --update-refs:
		refs/heads/first
		refs/heads/no-conflict-branch
		refs/heads/third
	Failed to update the following refs with --update-refs:
		refs/heads/second
	EOF

	# Clear "Rebasing (X/Y)" progress lines and drop leading tabs.
	tail -n 6 err >err.last &&
	sed -e "s/Rebasing.*Successfully/Successfully/g" -e "s/^\t//g" \
		<err.last >err.trimmed &&
	test_cmp expect err.trimmed

Switched to a new branch 'update-refs-error'
rebase -i script after editing:
pick c49b6574f4e9659c4aef3cc10be848348dc1a0ee
break
update-ref refs/heads/first

pick e31be72ab52d740527956c171d40a832b63e68ca
update-ref refs/heads/second

pick 34033109e5a0def540b16172943d8a7e2a8a712e
update-ref refs/heads/third

pick fb069ba3d9b13031500b5a75939ff4162b7cb13a
update-ref refs/heads/no-conflict-branch
Rebasing (2/12)

                                                                                
Stopped at c49b6574f4e9 (J)
error: update_ref failed for ref 'refs/heads/second': cannot lock ref 'refs/heads/second': is at 34033109e5a0def540b16172943d8a7e2a8a712e but expected e31be72ab52d740527956c171d40a832b63e68ca
ok 126 - --update-refs: check failed ref update

expecting success of 3404.127 '$EDITOR and friends are unchanged': 
	test_editor_unchanged

ok 127 - $EDITOR and friends are unchanged

# passed all 127 test(s)
1..127
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3423-rebase-reword.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3423-rebase-reword/.git/
expecting success of 3423.1 'setup': 
	test_commit main file-1 test &&

	git checkout -b stuff &&

	test_commit feature_a file-2 aaa &&
	test_commit feature_b file-2 ddd

[master (root-commit) 2fc88f2] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-1
Switched to a new branch 'stuff'
[stuff bfc518c] feature_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-2
[stuff 6975fa1] feature_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3423.2 'reword without issues functions as intended': 
	test_when_finished "reset_rebase" &&

	git checkout stuff^0 &&

	set_fake_editor &&
	FAKE_LINES="pick 1 reword 2" FAKE_COMMIT_MESSAGE="feature_b_reworded" \
		git rebase -i -v main &&

	test "$(git log -1 --format=%B)" = "feature_b_reworded" &&
	test $(git rev-list --count HEAD) = 3

Note: switching to 'stuff^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6975fa1 feature_b
Changes from 2fc88f2741a214c6daa29c1ac97d0376c9cd858d to 2fc88f2741a214c6daa29c1ac97d0376c9cd858d:
rebase -i script before editing:
pick bfc518c feature_a
pick 6975fa1 feature_b

rebase -i script after editing:
pick bfc518c feature_a
reword 6975fa1 feature_b
Rebasing (2/2)
[detached HEAD 7179cda] feature_b_reworded
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
HEAD is now at 7179cda feature_b_reworded
Removing fake-editor.sh
ok 2 - reword without issues functions as intended

expecting success of 3423.3 'reword after a conflict preserves commit': 
	test_when_finished "reset_rebase" &&

	git checkout stuff^0 &&

	set_fake_editor &&
	test_must_fail env FAKE_LINES="reword 2" \
		git rebase -i -v main &&

	git checkout --theirs file-2 &&
	git add file-2 &&
	FAKE_COMMIT_MESSAGE="feature_b_reworded" git rebase --continue &&

	test "$(git log -1 --format=%B)" = "feature_b_reworded" &&
	test $(git rev-list --count HEAD) = 2

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7179cda feature_b_reworded

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7179cda

HEAD is now at 6975fa1 feature_b
Changes from 2fc88f2741a214c6daa29c1ac97d0376c9cd858d to 2fc88f2741a214c6daa29c1ac97d0376c9cd858d:
rebase -i script before editing:
pick bfc518c feature_a
pick 6975fa1 feature_b

rebase -i script after editing:
reword 6975fa1 feature_b
Rebasing (1/1)
CONFLICT (modify/delete): file-2 deleted in HEAD and modified in 6975fa1 (feature_b).  Version 6975fa1 (feature_b) of file-2 left in tree.
error: could not apply 6975fa1... feature_b
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6975fa1... feature_b
Updated 1 path from the index
[detached HEAD 2e9e381] feature_b_reworded
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-2
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
HEAD is now at 2e9e381 feature_b_reworded
Removing fake-editor.sh
ok 3 - reword after a conflict preserves commit

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3424-rebase-empty.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3424-rebase-empty/.git/
expecting success of 3424.1 'setup test repository': 
	test_write_lines 1 2 3 4 5 6 7 8 9 10 >numbers &&
	test_write_lines A B C D E F G H I J >letters &&
	git add numbers letters &&
	git commit -m A &&

	git branch upstream &&
	git branch localmods &&

	git checkout upstream &&
	test_write_lines A B C D E >letters &&
	git add letters &&
	git commit -m B &&

	test_write_lines 1 2 3 4 five 6 7 8 9 ten >numbers &&
	git add numbers &&
	git commit -m C &&

	git checkout localmods &&
	test_write_lines 1 2 3 4 five 6 7 8 9 10 >numbers &&
	git add numbers &&
	git commit -m C2 &&

	git commit --allow-empty -m D &&

	test_write_lines A B C D E >letters &&
	git add letters &&
	git commit -m "Five letters ought to be enough for anybody"

[master (root-commit) 5bccb87] A
 Author: A U Thor <author@example.com>
 2 files changed, 20 insertions(+)
 create mode 100644 letters
 create mode 100644 numbers
Switched to branch 'upstream'
[upstream 830e295] B
 Author: A U Thor <author@example.com>
 1 file changed, 5 deletions(-)
[upstream 028eb0a] C
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Switched to branch 'localmods'
[localmods 48a48e4] C2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[localmods 7a36fb1] D
 Author: A U Thor <author@example.com>
[localmods 4a67a39] Five letters ought to be enough for anybody
 Author: A U Thor <author@example.com>
 1 file changed, 5 deletions(-)
ok 1 - setup test repository

checking known breakage of 3424.2 'rebase (apply-backend)': 
	test_when_finished "git rebase --abort" &&
	git checkout -B testing localmods &&
	# rebase (--apply) should not drop commits that start empty
	git rebase --apply upstream &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Switched to a new branch 'testing'
First, rewinding head to replay your work on top of it...
Applying: C2
Using index info to reconstruct a base tree...
M	numbers
Falling back to patching base and 3-way merge...
Merging:
028eb0a C
virtual C2
found 1 common ancestor:
virtual 75a3e2be4ba4a7062d21fba0206758f5518d6ead
Auto-merging numbers
Skipped numbers (merged same as existing)
No changes -- Patch already applied.
--- expect	2022-12-28 07:40:31.793808631 +0000
+++ actual	2022-12-28 07:40:31.818809554 +0000
@@ -1,4 +1,3 @@
-D
 C
 B
 A
fatal: No rebase in progress?
not ok 2 - rebase (apply-backend) # TODO known breakage

expecting success of 3424.3 'rebase --merge --empty=drop': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=drop upstream &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 3 - rebase --merge --empty=drop

expecting success of 3424.4 'rebase --merge uses default of --empty=drop': 
	git checkout -B testing localmods &&
	git rebase --merge upstream &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 4 - rebase --merge uses default of --empty=drop

expecting success of 3424.5 'rebase --merge --empty=keep': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=keep upstream &&

	test_write_lines D C2 C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 5 - rebase --merge --empty=keep

expecting success of 3424.6 'rebase --merge --empty=ask': 
	git checkout -B testing localmods &&
	test_must_fail git rebase --merge --empty=ask upstream &&

	git rebase --skip &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 028eb0a
Last command done (1 command done):
   pick 48a48e4 C2
Next command to do (1 remaining command):
   pick 7a36fb1 D # empty
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'testing' on '028eb0a'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 48a48e4... C2
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 6 - rebase --merge --empty=ask

expecting success of 3424.7 'rebase --interactive --empty=drop': 
	git checkout -B testing localmods &&
	git rebase --interactive --empty=drop upstream &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 7 - rebase --interactive --empty=drop

expecting success of 3424.8 'rebase --interactive --empty=keep': 
	git checkout -B testing localmods &&
	git rebase --interactive --empty=keep upstream &&

	test_write_lines D C2 C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 8 - rebase --interactive --empty=keep

expecting success of 3424.9 'rebase --interactive --empty=ask': 
	git checkout -B testing localmods &&
	test_must_fail git rebase --interactive --empty=ask upstream &&

	git rebase --skip &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 028eb0a
Last command done (1 command done):
   pick 48a48e4 C2
Next command to do (1 remaining command):
   pick 7a36fb1 D # empty
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'testing' on '028eb0a'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 48a48e4... C2
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 9 - rebase --interactive --empty=ask

expecting success of 3424.10 'rebase --interactive uses default of --empty=ask': 
	git checkout -B testing localmods &&
	test_must_fail git rebase --interactive upstream &&

	git rebase --skip &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 028eb0a
Last command done (1 command done):
   pick 48a48e4 C2
Next command to do (1 remaining command):
   pick 7a36fb1 D # empty
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'testing' on '028eb0a'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 48a48e4... C2
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 10 - rebase --interactive uses default of --empty=ask

expecting success of 3424.11 'rebase --merge --empty=drop --keep-empty': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=drop --keep-empty upstream &&

	test_write_lines D C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 11 - rebase --merge --empty=drop --keep-empty

expecting success of 3424.12 'rebase --merge --empty=drop --no-keep-empty': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=drop --no-keep-empty upstream &&

	test_write_lines C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 12 - rebase --merge --empty=drop --no-keep-empty

expecting success of 3424.13 'rebase --merge --empty=keep --keep-empty': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=keep --keep-empty upstream &&

	test_write_lines D C2 C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 13 - rebase --merge --empty=keep --keep-empty

expecting success of 3424.14 'rebase --merge --empty=keep --no-keep-empty': 
	git checkout -B testing localmods &&
	git rebase --merge --empty=keep --no-keep-empty upstream &&

	test_write_lines C2 C B A >expect &&
	git log --format=%s >actual &&
	test_cmp expect actual

Reset branch 'testing'
warning: skipped previously applied commit 4a67a39
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 14 - rebase --merge --empty=keep --no-keep-empty

expecting success of 3424.15 'rebase --merge does not leave state laying around': 
	git checkout -B testing localmods~2 &&
	git rebase --merge upstream &&

	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_path_is_missing .git/MERGE_MSG

Reset branch 'testing'
Rebasing (1/1)
dropping 48a48e47ff77cc6b4e5b3599268e1a217b1955dc C2 -- patch contents already upstream

                                                                                
Successfully rebased and updated refs/heads/testing.
ok 15 - rebase --merge does not leave state laying around

# still have 1 known breakage(s)
# passed all remaining 14 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3425-rebase-topology-merges.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3425-rebase-topology-merges/.git/
expecting success of 3425.1 'setup of non-linear-history': 
	test_commit a &&
	test_commit b &&
	test_commit c &&
	git checkout b &&
	test_commit d &&
	test_commit e &&

	git checkout c &&
	test_commit g &&
	revert h g &&
	git checkout d &&
	cherry_pick gp g &&
	test_commit i &&
	git checkout b &&
	test_commit f &&

	git checkout d &&
	test_commit n &&
	test_commit o &&
	test_merge w e &&
	test_merge v c &&
	git checkout o &&
	test_commit z

[master (root-commit) ce450c7] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
[master 020ea9b] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[master d9ea348] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Note: switching to 'b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 020ea9b b
[detached HEAD 1bd0260] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
[detached HEAD 67a7211] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e.t
Previous HEAD position was 67a7211 e
HEAD is now at d9ea348 c
[detached HEAD 5573dba] g
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g.t
[detached HEAD 09e6546] h
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 g.t
Previous HEAD position was 09e6546 h
HEAD is now at 1bd0260 d
[detached HEAD 00eccdb] gp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g.t
[detached HEAD 3317c29] i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 i.t
Previous HEAD position was 3317c29 i
HEAD is now at 020ea9b b
[detached HEAD 09e072f] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f.t
Previous HEAD position was 09e072f f
HEAD is now at 1bd0260 d
[detached HEAD 35a5a4f] n
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 n.t
[detached HEAD a60ff6b] o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 o.t
Merge made by the 'ort' strategy.
 e.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 e.t
Merge made by the 'ort' strategy.
 c.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Previous HEAD position was 253142b v
HEAD is now at a60ff6b o
[detached HEAD 6fadda8] z
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z.t
ok 1 - setup of non-linear-history

expecting success of 3425.2 'rebase --apply after merge from upstream': 
		reset_rebase &&
		git rebase --apply e w &&
		test_cmp_rev e HEAD~2 &&
		test_linear_range 'n o' e..
	
fatal: No rebase in progress?
HEAD is now at 6fadda8 z
First, rewinding head to replay your work on top of it...
Applying: n
Applying: o
ok 2 - rebase --apply after merge from upstream

expecting success of 3425.3 'rebase -m after merge from upstream': 
		reset_rebase &&
		git rebase -m e w &&
		test_cmp_rev e HEAD~2 &&
		test_linear_range 'n o' e..
	
fatal: No rebase in progress?
HEAD is now at 4cd4d2a o
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 3 - rebase -m after merge from upstream

expecting success of 3425.4 'rebase -i after merge from upstream': 
		reset_rebase &&
		git rebase -i e w &&
		test_cmp_rev e HEAD~2 &&
		test_linear_range 'n o' e..
	
fatal: No rebase in progress?
HEAD is now at 4cd4d2a o
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 4 - rebase -i after merge from upstream

expecting success of 3425.5 'rebase --apply of non-linear history is linearized in place': 
		reset_rebase &&
		git rebase --apply d w &&
		test_cmp_rev d HEAD~3 &&
		test_linear_range 'n o e' d..
	
fatal: No rebase in progress?
HEAD is now at 4cd4d2a o
First, rewinding head to replay your work on top of it...
Applying: n
Applying: o
Applying: e
ok 5 - rebase --apply of non-linear history is linearized in place

expecting success of 3425.6 'rebase -m of non-linear history is linearized in place': 
		reset_rebase &&
		git rebase -m d w &&
		test_cmp_rev d HEAD~3 &&
		test_linear_range 'n o e' d..
	
fatal: No rebase in progress?
HEAD is now at 9e9424c e
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 6 - rebase -m of non-linear history is linearized in place

expecting success of 3425.7 'rebase -i of non-linear history is linearized in place': 
		reset_rebase &&
		git rebase -i d w &&
		test_cmp_rev d HEAD~3 &&
		test_linear_range 'n o e' d..
	
fatal: No rebase in progress?
HEAD is now at ef67882 e
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 7 - rebase -i of non-linear history is linearized in place

expecting success of 3425.8 'rebase --apply of non-linear history is linearized upstream': 
		reset_rebase &&
		git rebase --apply c w &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at ef67882 e
First, rewinding head to replay your work on top of it...
Applying: d
Applying: n
Applying: o
Applying: e
ok 8 - rebase --apply of non-linear history is linearized upstream

expecting success of 3425.9 'rebase -m of non-linear history is linearized upstream': 
		reset_rebase &&
		git rebase -m c w &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at 7946025 e
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 9 - rebase -m of non-linear history is linearized upstream

expecting success of 3425.10 'rebase -i of non-linear history is linearized upstream': 
		reset_rebase &&
		git rebase -i c w &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at 7946025 e
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 10 - rebase -i of non-linear history is linearized upstream

expecting success of 3425.11 'rebase --apply of non-linear history with merges after upstream merge is linearized': 
		reset_rebase &&
		git rebase --apply c v &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at 7946025 e
First, rewinding head to replay your work on top of it...
Applying: d
Applying: n
Applying: o
Applying: e
ok 11 - rebase --apply of non-linear history with merges after upstream merge is linearized

expecting success of 3425.12 'rebase -m of non-linear history with merges after upstream merge is linearized': 
		reset_rebase &&
		git rebase -m c v &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at 7946025 e
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 12 - rebase -m of non-linear history with merges after upstream merge is linearized

expecting success of 3425.13 'rebase -i of non-linear history with merges after upstream merge is linearized': 
		reset_rebase &&
		git rebase -i c v &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'd n o e' c..
	
fatal: No rebase in progress?
HEAD is now at 7946025 e
Rebasing (1/4)
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
ok 13 - rebase -i of non-linear history with merges after upstream merge is linearized

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3420-rebase-autostash.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3420-rebase-autostash/.git/
expecting success of 3420.1 'setup': 
	echo hello-world >file0 &&
	git add . &&
	test_tick &&
	git commit -m "initial commit" &&
	git checkout -b feature-branch &&
	echo another-hello >file1 &&
	echo goodbye >file2 &&
	git add . &&
	test_tick &&
	git commit -m "second commit" &&
	echo final-goodbye >file3 &&
	git add . &&
	test_tick &&
	git commit -m "third commit" &&
	git checkout -b unrelated-onto-branch main &&
	echo unrelated >file4 &&
	git add . &&
	test_tick &&
	git commit -m "unrelated commit" &&
	git checkout -b related-onto-branch main &&
	echo conflicting-change >file2 &&
	git add . &&
	test_tick &&
	git commit -m "related commit" &&
	remove_progress_re="$(printf "s/.*\\r//")"

[main (root-commit) bfa4f02] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0
Switched to a new branch 'feature-branch'
[feature-branch 6fe95e2] second commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
[feature-branch 0c4d2f1] third commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Switched to a new branch 'unrelated-onto-branch'
[unrelated-onto-branch 4aede2f] unrelated commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
Switched to a new branch 'related-onto-branch'
[related-onto-branch c57d250] related commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 1 - setup

expecting success of 3420.2 'rebase: fast-forward rebase': 
	test_config rebase.autostash true &&
	git reset --hard &&
	git checkout -b behind-feature-branch feature-branch~1 &&
	test_when_finished git branch -D behind-feature-branch &&
	echo dirty >>file1 &&
	git rebase feature-branch &&
	grep dirty file1 &&
	git checkout feature-branch

HEAD is now at c57d250 related commit
Switched to a new branch 'behind-feature-branch'
Created autostash: b346341
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/behind-feature-branch.
dirty
Switched to branch 'feature-branch'
M	file1
Deleted branch behind-feature-branch (was 0c4d2f1).
ok 2 - rebase: fast-forward rebase

expecting success of 3420.3 'rebase: noop rebase': 
	test_config rebase.autostash true &&
	git reset --hard &&
	git checkout -b same-feature-branch feature-branch &&
	test_when_finished git branch -D same-feature-branch &&
	echo dirty >>file1 &&
	git rebase feature-branch &&
	grep dirty file1 &&
	git checkout feature-branch

HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'same-feature-branch'
Created autostash: 925afbd
Current branch same-feature-branch is up to date.
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file1
Deleted branch same-feature-branch (was 0c4d2f1).
ok 3 - rebase: noop rebase

expecting success of 3420.4 'rebase --apply: dirty worktree, --no-autostash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		test_when_finished git checkout feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type --no-autostash unrelated-onto-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 4 - rebase --apply: dirty worktree, --no-autostash

expecting success of 3420.5 'rebase --apply: dirty worktree, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >>file3 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
ok 5 - rebase --apply: dirty worktree, non-conflicting rebase

expecting success of 3420.6 'rebase --apply --autostash: check output': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_success_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 6 - rebase --apply --autostash: check output

expecting success of 3420.7 'rebase --apply: dirty index, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git add file3 &&
		git rebase$type unrelated-onto-branch &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: 7305f55
First, rewinding head to replay your work on top of it...
Applying: second commit
Applying: third commit
Applied autostash.
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was b607b14).
ok 7 - rebase --apply: dirty index, non-conflicting rebase

expecting success of 3420.8 'rebase --apply: conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		rm -rf $dotest &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
First, rewinding head to replay your work on top of it...
Applying: second commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c57d250 related commit
virtual second commit
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in file2
Auto-merging file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second commit
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 8 - rebase --apply: conflicting rebase

expecting success of 3420.9 'rebase --apply: --continue': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		echo "conflicting-plus-goodbye" >file2 &&
		git add file2 &&
		git rebase --continue &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
First, rewinding head to replay your work on top of it...
Applying: second commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c57d250 related commit
virtual second commit
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in file2
Auto-merging file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second commit
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: second commit
Applying: third commit
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 51f2c81).
ok 9 - rebase --apply: --continue

expecting success of 3420.10 'rebase --apply: --skip': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --skip &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
First, rewinding head to replay your work on top of it...
Applying: second commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c57d250 related commit
virtual second commit
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in file2
Auto-merging file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second commit
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: third commit
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was fa02356).
ok 10 - rebase --apply: --skip

expecting success of 3420.11 'rebase --apply: --abort': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --abort &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
First, rewinding head to replay your work on top of it...
Applying: second commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c57d250 related commit
virtual second commit
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in file2
Auto-merging file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second commit
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 11 - rebase --apply: --abort

expecting success of 3420.12 'rebase --apply: --quit': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git diff >expect &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --quit &&
		test_when_finished git stash drop &&
		test_path_is_missing $dotest/autostash &&
		! grep dirty file3 &&
		git stash show -p >actual &&
		test_cmp expect actual &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
First, rewinding head to replay your work on top of it...
Applying: second commit
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
c57d250 related commit
virtual second commit
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in file2
Auto-merging file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second commit
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Autostash exists; creating a new stash entry.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
grep: file3: No such file or directory
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Dropped refs/stash@{0} (ce96636712fc38300c1f0f777cc2fac6dee041c0)
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 12 - rebase --apply: --quit

expecting success of 3420.13 'rebase --apply: non-conflicting rebase, conflicting stash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >file4 &&
		git add file4 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		test_path_is_missing $dotest &&
		git reset --hard &&
		grep unrelated file4 &&
		! grep dirty file4 &&
		git checkout feature-branch &&
		git stash pop &&
		grep dirty file4
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
HEAD is now at b607b14 third commit
unrelated
Switched to branch 'feature-branch'
Merging Version stash was based on with Stashed changes
On branch feature-branch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file4

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual2
	expect
	expected

Dropped refs/stash@{0} (1b6501f85530697b9c800b37ca0a8c6ef37e954c)
dirty
ok 13 - rebase --apply: non-conflicting rebase, conflicting stash

expecting success of 3420.14 'rebase --apply: check output with conflicting stash': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_failure_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 14 - rebase --apply: check output with conflicting stash

expecting success of 3420.15 'rebase --merge: dirty worktree, --no-autostash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		test_when_finished git checkout feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type --no-autostash unrelated-onto-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 15 - rebase --merge: dirty worktree, --no-autostash

expecting success of 3420.16 'rebase --merge: dirty worktree, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >>file3 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
ok 16 - rebase --merge: dirty worktree, non-conflicting rebase

expecting success of 3420.17 'rebase --merge --autostash: check output': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_success_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 17 - rebase --merge --autostash: check output

expecting success of 3420.18 'rebase --merge: dirty index, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git add file3 &&
		git rebase$type unrelated-onto-branch &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: 7305f55
Rebasing (1/2)
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was b607b14).
ok 18 - rebase --merge: dirty index, non-conflicting rebase

expecting success of 3420.19 'rebase --merge: conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		rm -rf $dotest &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 19 - rebase --merge: conflicting rebase

expecting success of 3420.20 'rebase --merge: --continue': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		echo "conflicting-plus-goodbye" >file2 &&
		git add file2 &&
		git rebase --continue &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
[detached HEAD 62edf38] second commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file1
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 51f2c81).
ok 20 - rebase --merge: --continue

expecting success of 3420.21 'rebase --merge: --skip': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --skip &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was fa02356).
ok 21 - rebase --merge: --skip

expecting success of 3420.22 'rebase --merge: --abort': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --abort &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 22 - rebase --merge: --abort

expecting success of 3420.23 'rebase --merge: --quit': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git diff >expect &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --quit &&
		test_when_finished git stash drop &&
		test_path_is_missing $dotest/autostash &&
		! grep dirty file3 &&
		git stash show -p >actual &&
		test_cmp expect actual &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Autostash exists; creating a new stash entry.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
grep: file3: No such file or directory
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Dropped refs/stash@{0} (ce96636712fc38300c1f0f777cc2fac6dee041c0)
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 23 - rebase --merge: --quit

expecting success of 3420.24 'rebase --merge: non-conflicting rebase, conflicting stash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >file4 &&
		git add file4 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		test_path_is_missing $dotest &&
		git reset --hard &&
		grep unrelated file4 &&
		! grep dirty file4 &&
		git checkout feature-branch &&
		git stash pop &&
		grep dirty file4
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
HEAD is now at b607b14 third commit
unrelated
Switched to branch 'feature-branch'
Merging Version stash was based on with Stashed changes
On branch feature-branch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file4

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual2
	expect
	expected

Dropped refs/stash@{0} (1b6501f85530697b9c800b37ca0a8c6ef37e954c)
dirty
ok 24 - rebase --merge: non-conflicting rebase, conflicting stash

expecting success of 3420.25 'rebase --merge: check output with conflicting stash': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_failure_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 25 - rebase --merge: check output with conflicting stash

expecting success of 3420.26 'rebase --interactive: dirty worktree, --no-autostash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		test_when_finished git checkout feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type --no-autostash unrelated-onto-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 26 - rebase --interactive: dirty worktree, --no-autostash

expecting success of 3420.27 'rebase --interactive: dirty worktree, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >>file3 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
ok 27 - rebase --interactive: dirty worktree, non-conflicting rebase

expecting success of 3420.28 'rebase --interactive --autostash: check output': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_success_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 28 - rebase --interactive --autostash: check output

expecting success of 3420.29 'rebase --interactive: dirty index, non-conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git add file3 &&
		git rebase$type unrelated-onto-branch &&
		grep unrelated file4 &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: 7305f55
Rebasing (1/2)
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
unrelated
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was b607b14).
ok 29 - rebase --interactive: dirty index, non-conflicting rebase

expecting success of 3420.30 'rebase --interactive: conflicting rebase': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		rm -rf $dotest &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 30 - rebase --interactive: conflicting rebase

expecting success of 3420.31 'rebase --interactive: --continue': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		echo "conflicting-plus-goodbye" >file2 &&
		git add file2 &&
		git rebase --continue &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
[detached HEAD 62edf38] second commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file1
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 51f2c81).
ok 31 - rebase --interactive: --continue

expecting success of 3420.32 'rebase --interactive: --skip': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --skip &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/rebased-feature-branch.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was fa02356).
ok 32 - rebase --interactive: --skip

expecting success of 3420.33 'rebase --interactive: --abort': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --abort &&
		test_path_is_missing $dotest/autostash &&
		grep dirty file3 &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Applied autostash.
dirty
Switched to branch 'feature-branch'
M	file3
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 33 - rebase --interactive: --abort

expecting success of 3420.34 'rebase --interactive: --quit': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		test_when_finished git branch -D rebased-feature-branch &&
		echo dirty >>file3 &&
		git diff >expect &&
		test_must_fail git rebase$type related-onto-branch &&
		test_path_is_file $dotest/autostash &&
		test_path_is_missing file3 &&
		git rebase --quit &&
		test_when_finished git stash drop &&
		test_path_is_missing $dotest/autostash &&
		! grep dirty file3 &&
		git stash show -p >actual &&
		test_cmp expect actual &&
		git reset --hard &&
		git checkout feature-branch
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
Created autostash: ce96636
Rebasing (1/2)
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
error: could not apply 6fe95e2... second commit
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6fe95e2... second commit
Autostash exists; creating a new stash entry.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
grep: file3: No such file or directory
HEAD is now at c57d250 related commit
Previous HEAD position was c57d250 related commit
Switched to branch 'feature-branch'
Dropped refs/stash@{0} (ce96636712fc38300c1f0f777cc2fac6dee041c0)
Deleted branch rebased-feature-branch (was 0c4d2f1).
ok 34 - rebase --interactive: --quit

expecting success of 3420.35 'rebase --interactive: non-conflicting rebase, conflicting stash': 
		test_config rebase.autostash true &&
		git reset --hard &&
		git checkout -b rebased-feature-branch feature-branch &&
		echo dirty >file4 &&
		git add file4 &&
		git rebase$type unrelated-onto-branch >actual 2>&1 &&
		test_path_is_missing $dotest &&
		git reset --hard &&
		grep unrelated file4 &&
		! grep dirty file4 &&
		git checkout feature-branch &&
		git stash pop &&
		grep dirty file4
	
HEAD is now at 0c4d2f1 third commit
Switched to a new branch 'rebased-feature-branch'
HEAD is now at b607b14 third commit
unrelated
Switched to branch 'feature-branch'
Merging Version stash was based on with Stashed changes
On branch feature-branch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file4

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual2
	expect
	expected

Dropped refs/stash@{0} (1b6501f85530697b9c800b37ca0a8c6ef37e954c)
dirty
ok 35 - rebase --interactive: non-conflicting rebase, conflicting stash

expecting success of 3420.36 'rebase --interactive: check output with conflicting stash': 
		test_when_finished git branch -D rebased-feature-branch &&
		suffix=${type#\ --} && suffix=${suffix:-apply} &&
		if test ${suffix} = "interactive"; then
			suffix=merge
		fi &&
		create_expected_failure_$suffix &&
		sed "$remove_progress_re" <actual >actual2 &&
		test_cmp expected actual2
	
Deleted branch rebased-feature-branch (was b607b14).
ok 36 - rebase --interactive: check output with conflicting stash

expecting success of 3420.37 'abort rebase -i with --autostash': 
	test_when_finished "git reset --hard" &&
	echo uncommitted-content >file0 &&
	(
		write_script abort-editor.sh <<-\EOF &&
			echo >"$1"
		EOF
		test_set_editor "$(pwd)/abort-editor.sh" &&
		test_must_fail git rebase -i --autostash HEAD^ &&
		rm -f abort-editor.sh
	) &&
	echo uncommitted-content >expected &&
	test_cmp expected file0

Created autostash: d9b9f3e
Applied autostash.
error: nothing to do
HEAD is now at 0c4d2f1 third commit
ok 37 - abort rebase -i with --autostash

expecting success of 3420.38 'restore autostash on editor failure': 
	test_when_finished "git reset --hard" &&
	echo uncommitted-content >file0 &&
	(
		test_set_editor "false" &&
		test_must_fail git rebase -i --autostash HEAD^
	) &&
	echo uncommitted-content >expected &&
	test_cmp expected file0

Created autostash: 083685b
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Applied autostash.
HEAD is now at 0c4d2f1 third commit
ok 38 - restore autostash on editor failure

expecting success of 3420.39 'autostash is saved on editor failure with conflict': 
	test_when_finished "git reset --hard" &&
	echo uncommitted-content >file0 &&
	(
		write_script abort-editor.sh <<-\EOF &&
			echo conflicting-content >file0
			exit 1
		EOF
		test_set_editor "$(pwd)/abort-editor.sh" &&
		test_must_fail git rebase -i --autostash HEAD^ &&
		rm -f abort-editor.sh
	) &&
	echo conflicting-content >expected &&
	test_cmp expected file0 &&
	git checkout file0 &&
	git stash pop &&
	echo uncommitted-content >expected &&
	test_cmp expected file0

Created autostash: 083685b
error: There was a problem with the editor '"$FAKE_EDITOR"'.
Applying autostash resulted in conflicts.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
Updated 1 path from the index
Merging Version stash was based on with Stashed changes
On branch feature-branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file0

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	actual2
	expect
	expected

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (083685bba8c747d8dec51b2a5ffc97733bf5a961)
HEAD is now at 0c4d2f1 third commit
ok 39 - autostash is saved on editor failure with conflict

expecting success of 3420.40 'autostash with dirty submodules': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b with-submodule &&
	git -c protocol.file.allow=always submodule add ./ sub &&
	test_tick &&
	git commit -m add-submodule &&
	echo changed >sub/file0 &&
	git rebase -i --autostash HEAD

Switched to a new branch 'with-submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3420-rebase-autostash/sub'...
done.
[with-submodule 42dcd38] add-submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub

                                                                                
Successfully rebased and updated refs/heads/with-submodule.
HEAD is now at 42dcd38 add-submodule
warning: unable to rmdir 'sub': Directory not empty
Switched to branch 'main'
ok 40 - autostash with dirty submodules

expecting success of 3420.41 'branch is left alone when possible': 
	git checkout -b unchanged-branch &&
	echo changed >file0 &&
	git rebase --autostash unchanged-branch &&
	test changed = "$(cat file0)" &&
	test unchanged-branch = "$(git rev-parse --abbrev-ref HEAD)"

Switched to a new branch 'unchanged-branch'
Created autostash: 84b1204
Current branch unchanged-branch is up to date.
Applied autostash.
ok 41 - branch is left alone when possible

expecting success of 3420.42 'never change active branch': 
	git checkout -b not-the-feature-branch unrelated-onto-branch &&
	test_when_finished "git reset --hard && git checkout main" &&
	echo changed >file0 &&
	git rebase --autostash not-the-feature-branch feature-branch &&
	test_cmp_rev not-the-feature-branch unrelated-onto-branch

Switched to a new branch 'not-the-feature-branch'
M	file0
Created autostash: 37b7cba
Rebasing (1/2)
Rebasing (2/2)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/feature-branch.
HEAD is now at 543b47f third commit
Switched to branch 'main'
ok 42 - never change active branch

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3427-rebase-subtree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3427-rebase-subtree/.git/
expecting success of 3427.1 'setup': 
	test_commit README &&

	git init files &&
	test_commit -C files topic_1 &&
	test_commit -C files topic_2 &&
	test_commit -C files topic_3 &&

	: perform subtree merge into files_subtree/ &&
	git fetch files refs/heads/main:refs/heads/files-main &&
	git merge -s ours --no-commit --allow-unrelated-histories \
		files-main &&
	git read-tree --prefix=files_subtree -u files-main &&
	git commit -m "Add subproject main" &&

	: add two extra commits to rebase &&
	test_commit -C files_subtree topic_4 &&
	test_commit files_subtree/topic_5 &&

	git checkout -b to-rebase &&
	git fast-export --no-data HEAD -- files_subtree/ |
		sed -e "s%\([0-9a-f]\{40\} \)files_subtree/%\1%" |
		git fast-import --force --quiet &&
	git reset --hard &&
	git commit -m "Empty commit" --allow-empty

[main (root-commit) 9b47b78] README
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 README.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3427-rebase-subtree/files/.git/
[main (root-commit) 8d5ac37] topic_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 topic_1.t
[main e30c5d3] topic_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 topic_2.t
[main 152af92] topic_3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 topic_3.t
From files
 * [new branch]      main       -> files-main
 * [new tag]         topic_3    -> topic_3
 * [new tag]         topic_1    -> topic_1
 * [new tag]         topic_2    -> topic_2
Automatic merge went well; stopped before committing as requested
[main 90609d1] Add subproject main
 Author: A U Thor <author@example.com>
[main 9e13d1d] topic_4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 files_subtree/topic_4.t
[main 76d9147] files_subtree/topic_5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 files_subtree/topic_5.t
Switched to a new branch 'to-rebase'
HEAD is now at e6c9414 files_subtree/topic_5
[to-rebase f09580c] Empty commit
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 3427.2 'Rebase -Xsubtree --empty=ask --onto commit': 
	reset_rebase &&
	git checkout -b rebase-onto to-rebase &&
	test_must_fail git rebase -Xsubtree=files_subtree --empty=ask --onto files-main main &&
	: first pick results in no changes &&
	git rebase --skip &&
	verbose test "$(commit_message HEAD~2)" = "topic_4" &&
	verbose test "$(commit_message HEAD~)" = "files_subtree/topic_5" &&
	verbose test "$(commit_message HEAD)" = "Empty commit"

fatal: No rebase in progress?
HEAD is now at f09580c Empty commit
Switched to a new branch 'rebase-onto'
Rebasing (1/4)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 152af92
Last command done (1 command done):
   pick 4b9884c Add subproject main
Next commands to do (3 remaining commands):
   pick a622443 topic_4
   pick e6c9414 files_subtree/topic_5
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'rebase-onto' on '152af92'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	files/

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 4b9884c... Add subproject main
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated refs/heads/rebase-onto.
ok 2 - Rebase -Xsubtree --empty=ask --onto commit

expecting success of 3427.3 'Rebase -Xsubtree --empty=ask --rebase-merges --onto commit': 
	reset_rebase &&
	git checkout -b rebase-merges-onto to-rebase &&
	test_must_fail git rebase -Xsubtree=files_subtree --empty=ask --rebase-merges --onto files-main --root &&
	: first pick results in no changes &&
	git rebase --skip &&
	verbose test "$(commit_message HEAD~2)" = "topic_4" &&
	verbose test "$(commit_message HEAD~)" = "files_subtree/topic_5" &&
	verbose test "$(commit_message HEAD)" = "Empty commit"

fatal: No rebase in progress?
HEAD is now at d6e246a Empty commit
Switched to a new branch 'rebase-merges-onto'
Rebasing (1/7)
Rebasing (2/7)
Rebasing (3/7)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git rebase --skip'
interactive rebase in progress; onto 152af92
Last commands done (3 commands done):
   reset onto
   pick 4b9884c Add subproject main
  (see more in file .git/rebase-merge/done)
Next commands to do (3 remaining commands):
   pick a622443 topic_4
   pick e6c9414 files_subtree/topic_5
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'rebase-merges-onto' on '152af92'.
  (all conflicts fixed: run "git rebase --continue")

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	files/

nothing added to commit but untracked files present (use "git add" to track)
Could not apply 4b9884c... Add subproject main
Rebasing (4/6)
Rebasing (5/6)
Rebasing (6/6)

                                                                                
Successfully rebased and updated refs/heads/rebase-merges-onto.
ok 3 - Rebase -Xsubtree --empty=ask --rebase-merges --onto commit

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3428-rebase-signoff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3428-rebase-signoff/.git/
expecting success of 3428.1 'rebase --signoff adds a sign-off line': 
	git commit --allow-empty -m "Initial empty commit" &&
	git add file && git commit -m first &&
	git config alias.rbs "rebase --signoff" &&
	git rbs HEAD^ &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
	test_cmp expected-signed actual

[master (root-commit) 6c54391] Initial empty commit
 Author: A U Thor <author@example.com>
[master e748c15] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Current branch master is up to date, rebase forced.
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 1 - rebase --signoff adds a sign-off line

expecting success of 3428.2 'rebase --no-signoff does not add a sign-off line': 
	git commit --amend -m "first" &&
	git rbs --no-signoff HEAD^ &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
	test_cmp expected-unsigned actual

[master e748c15] first
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
Current branch master is up to date.
ok 2 - rebase --no-signoff does not add a sign-off line

expecting success of 3428.3 'rebase --exec --signoff adds a sign-off line': 
	test_when_finished "rm exec" &&
	git commit --amend -m "first" &&
	git rebase --exec "touch exec" --signoff HEAD^ &&
	test_path_is_file exec &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-signed actual

[master e748c15] first
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Executing: touch exec

                                                                                
Successfully rebased and updated refs/heads/master.
ok 3 - rebase --exec --signoff adds a sign-off line

expecting success of 3428.4 'rebase --root --signoff adds a sign-off line': 
	git commit --amend -m "first" &&
	git rebase --root --keep-empty --signoff &&
	git cat-file commit HEAD^ | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-initial-signed actual &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-signed actual

[master e748c15] first
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 4 - rebase --root --signoff adds a sign-off line

expecting success of 3428.5 'rebase -i --signoff fails': 
	git commit --amend -m "first" &&
	git rebase -i --signoff HEAD^ &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-signed actual

[master f83e174] first
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 5 - rebase -i --signoff fails

expecting success of 3428.6 'rebase -m --signoff fails': 
	git commit --amend -m "first" &&
	git rebase -m --signoff HEAD^ &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-signed actual

[master f83e174] first
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
Current branch master is up to date, rebase forced.
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 6 - rebase -m --signoff fails

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3429-rebase-edit-todo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3429-rebase-edit-todo/.git/
expecting success of 3429.1 'setup': 
	test_commit first file &&
	test_commit second file &&
	test_commit third file

[master (root-commit) 07e65e0] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master fa10d42] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master ba0a06e] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3429.2 'rebase exec modifies rebase-todo': 
	todo=.git/rebase-merge/git-rebase-todo &&
	git rebase HEAD~1 -x "echo exec touch F >>$todo" &&
	test -e F

Rebasing (2/2)

                                                                                
Executing: echo exec touch F >>.git/rebase-merge/git-rebase-todo
Rebasing (3/3)

                                                                                
Executing: touch F

                                                                                
Successfully rebased and updated refs/heads/master.
ok 2 - rebase exec modifies rebase-todo

expecting success of 3429.3 'rebase exec with an empty list does not exec anything': 
	git rebase HEAD -x "true" 2>output &&
	! grep "Executing: true" output

ok 3 - rebase exec with an empty list does not exec anything

expecting success of 3429.4 'loose object cache vs re-reading todo list': 
	GIT_REBASE_TODO=.git/rebase-merge/git-rebase-todo &&
	export GIT_REBASE_TODO &&
	write_script append-todo.sh <<-\EOS &&
	# For values 5 and 6, this yields SHA-1s with the same first two digits
	echo "pick $(git rev-parse --short \
		$(printf "%s\\n" \
			"tree $EMPTY_TREE" \
			"author A U Thor <author@example.org> $1 +0000" \
			"committer A U Thor <author@example.org> $1 +0000" \
			"" \
			"$1" |
		  git hash-object -t commit -w --stdin))" >>$GIT_REBASE_TODO

	shift
	test -z "$*" ||
	echo "exec $0 $*" >>$GIT_REBASE_TODO
	EOS

	git rebase HEAD -x "./append-todo.sh 5 6"


                                                                                
Successfully rebased and updated refs/heads/master.
ok 4 - loose object cache vs re-reading todo list

expecting success of 3429.5 'todo is re-read after reword and squash': 
	write_script reword-editor.sh <<-\EOS &&
	GIT_SEQUENCE_EDITOR="echo \"exec echo $(cat file) >>actual\" >>" \
		git rebase --edit-todo
	EOS

	test_write_lines first third >expected &&
	set_fake_editor &&
	GIT_SEQUENCE_EDITOR="$EDITOR" FAKE_LINES="reword 1 squash 2 fixup 3" \
		GIT_EDITOR=./reword-editor.sh git rebase -i --root third &&
	test_cmp expected actual

rebase -i script before editing:
pick 07e65e0 first
pick fa10d42 second
pick ba0a06e third

rebase -i script after editing:
reword 07e65e0 first
squash fa10d42 second
fixup ba0a06e third
Rebasing (1/3)
[detached HEAD 67746ec] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file
Rebasing (2/4)
Rebasing (3/4)
[detached HEAD 15dd5e0] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file
Rebasing (4/5)

                                                                                
Executing: echo first >>actual
Rebasing (5/5)

                                                                                
Executing: echo third >>actual

                                                                                
Successfully rebased and updated detached HEAD.
ok 5 - todo is re-read after reword and squash

expecting success of 3429.6 're-reading todo doesnt interfere with revert --edit': 
	git reset --hard third &&

	git revert --edit third second &&

	cat >expect <<-\EOF &&
	Revert "second"
	Revert "third"
	third
	second
	first
	EOF
	git log --format="%s" >actual &&
	test_cmp expect actual

HEAD is now at ba0a06e third
[detached HEAD 2d8e437] Revert "third"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 60853ee] Revert "second"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - re-reading todo doesnt interfere with revert --edit

expecting success of 3429.7 're-reading todo doesnt interfere with cherry-pick --edit': 
	git reset --hard first &&

	git cherry-pick --edit second third &&

	cat >expect <<-\EOF &&
	third
	second
	first
	EOF
	git log --format="%s" >actual &&
	test_cmp expect actual

HEAD is now at 07e65e0 first
[detached HEAD e619899] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD c9a7b60] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - re-reading todo doesnt interfere with cherry-pick --edit

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3421-rebase-topology-linear.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3421-rebase-topology-linear/.git/
expecting success of 3421.1 'setup': 
	test_commit a &&
	test_commit b &&
	test_commit c &&
	git checkout b &&
	test_commit d &&
	test_commit e

[master (root-commit) ce450c7] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
[master 020ea9b] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[master d9ea348] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Note: switching to 'b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 020ea9b b
[detached HEAD 1bd0260] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
[detached HEAD 67a7211] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e.t
ok 1 - setup

expecting success of 3421.2 'simple rebase --apply': 
		reset_rebase &&
		git rebase --apply c e &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'd e' c..
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e
First, rewinding head to replay your work on top of it...
Applying: d
Applying: e
ok 2 - simple rebase --apply

expecting success of 3421.3 'simple rebase -m': 
		reset_rebase &&
		git rebase -m c e &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'd e' c..
	
fatal: No rebase in progress?
HEAD is now at 7d728d6 e
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 3 - simple rebase -m

expecting success of 3421.4 'simple rebase -i': 
		reset_rebase &&
		git rebase -i c e &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'd e' c..
	
fatal: No rebase in progress?
HEAD is now at 7d728d6 e
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 4 - simple rebase -i

expecting success of 3421.5 'setup branches and remote tracking': 
	git tag -l >tags &&
	for tag in $(cat tags)
	do
		git branch branch-$tag $tag || return 1
	done &&
	git remote add origin "file://$PWD" &&
	git fetch origin

From file:///<<PKGBUILDDIR>>/t/trash directory.t3421-rebase-topology-linear
 * [new branch]      branch-a   -> origin/branch-a
 * [new branch]      branch-b   -> origin/branch-b
 * [new branch]      branch-c   -> origin/branch-c
 * [new branch]      branch-d   -> origin/branch-d
 * [new branch]      branch-e   -> origin/branch-e
 * [new branch]      master     -> origin/master
ok 5 - setup branches and remote tracking

expecting success of 3421.6 'rebase --apply is no-op if upstream is an ancestor': 
		reset_rebase &&
		git rebase --apply b e &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 7d728d6 e
Removing tags
Current branch e is up to date.
ok 6 - rebase --apply is no-op if upstream is an ancestor

expecting success of 3421.7 'rebase -m is no-op if upstream is an ancestor': 
		reset_rebase &&
		git rebase -m b e &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e
Current branch e is up to date.
ok 7 - rebase -m is no-op if upstream is an ancestor

expecting success of 3421.8 'rebase -i is no-op if upstream is an ancestor': 
		reset_rebase &&
		git rebase -i b e &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e

                                                                                
Successfully rebased and updated detached HEAD.
ok 8 - rebase -i is no-op if upstream is an ancestor

expecting success of 3421.9 'rebase --apply -f rewrites even if upstream is an ancestor': 
		reset_rebase &&
		git rebase --apply -f b e &&
		test_cmp_rev ! e HEAD &&
		test_cmp_rev b HEAD~2 &&
		test_linear_range 'd e' b..
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e
Current branch e is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: d
Applying: e
ok 9 - rebase --apply -f rewrites even if upstream is an ancestor

expecting success of 3421.10 'rebase --fork-point -f rewrites even if upstream is an ancestor': 
		reset_rebase &&
		git rebase --fork-point -f b e &&
		test_cmp_rev ! e HEAD &&
		test_cmp_rev b HEAD~2 &&
		test_linear_range 'd e' b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Current branch e is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 10 - rebase --fork-point -f rewrites even if upstream is an ancestor

expecting success of 3421.11 'rebase -m -f rewrites even if upstream is an ancestor': 
		reset_rebase &&
		git rebase -m -f b e &&
		test_cmp_rev ! e HEAD &&
		test_cmp_rev b HEAD~2 &&
		test_linear_range 'd e' b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Current branch e is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 11 - rebase -m -f rewrites even if upstream is an ancestor

expecting success of 3421.12 'rebase -i -f rewrites even if upstream is an ancestor': 
		reset_rebase &&
		git rebase -i -f b e &&
		test_cmp_rev ! e HEAD &&
		test_cmp_rev b HEAD~2 &&
		test_linear_range 'd e' b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 12 - rebase -i -f rewrites even if upstream is an ancestor

expecting success of 3421.13 'rebase --apply -f rewrites even if remote upstream is an ancestor': 
		reset_rebase &&
		git rebase --apply -f branch-b branch-e &&
		test_cmp_rev ! branch-e origin/branch-e &&
		test_cmp_rev branch-b HEAD~2 &&
		test_linear_range 'd e' branch-b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Current branch branch-e is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: d
Applying: e
ok 13 - rebase --apply -f rewrites even if remote upstream is an ancestor

expecting success of 3421.14 'rebase --fork-point -f rewrites even if remote upstream is an ancestor': 
		reset_rebase &&
		git rebase --fork-point -f branch-b branch-e &&
		test_cmp_rev ! branch-e origin/branch-e &&
		test_cmp_rev branch-b HEAD~2 &&
		test_linear_range 'd e' branch-b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Current branch branch-e is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch-e.
ok 14 - rebase --fork-point -f rewrites even if remote upstream is an ancestor

expecting success of 3421.15 'rebase -m -f rewrites even if remote upstream is an ancestor': 
		reset_rebase &&
		git rebase -m -f branch-b branch-e &&
		test_cmp_rev ! branch-e origin/branch-e &&
		test_cmp_rev branch-b HEAD~2 &&
		test_linear_range 'd e' branch-b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Current branch branch-e is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch-e.
ok 15 - rebase -m -f rewrites even if remote upstream is an ancestor

expecting success of 3421.16 'rebase -i -f rewrites even if remote upstream is an ancestor': 
		reset_rebase &&
		git rebase -i -f branch-b branch-e &&
		test_cmp_rev ! branch-e origin/branch-e &&
		test_cmp_rev branch-b HEAD~2 &&
		test_linear_range 'd e' branch-b..
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/branch-e.
ok 16 - rebase -i -f rewrites even if remote upstream is an ancestor

expecting success of 3421.17 'rebase --apply fast-forwards from ancestor of upstream': 
		reset_rebase &&
		git rebase --apply e b &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 354afb0 e
First, rewinding head to replay your work on top of it...
Fast-forwarded b to e.
ok 17 - rebase --apply fast-forwards from ancestor of upstream

expecting success of 3421.18 'rebase --fork-point fast-forwards from ancestor of upstream': 
		reset_rebase &&
		git rebase --fork-point e b &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e

                                                                                
Successfully rebased and updated detached HEAD.
ok 18 - rebase --fork-point fast-forwards from ancestor of upstream

expecting success of 3421.19 'rebase -m fast-forwards from ancestor of upstream': 
		reset_rebase &&
		git rebase -m e b &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e

                                                                                
Successfully rebased and updated detached HEAD.
ok 19 - rebase -m fast-forwards from ancestor of upstream

expecting success of 3421.20 'rebase -i fast-forwards from ancestor of upstream': 
		reset_rebase &&
		git rebase -i e b &&
		test_cmp_rev e HEAD
	
fatal: No rebase in progress?
HEAD is now at 67a7211 e

                                                                                
Successfully rebased and updated detached HEAD.
ok 20 - rebase -i fast-forwards from ancestor of upstream

expecting success of 3421.21 'setup of linear history for range selection tests': 
	git checkout c &&
	test_commit g &&
	revert h g &&
	git checkout d &&
	cherry_pick gp g &&
	test_commit i &&
	git checkout b &&
	test_commit f

Previous HEAD position was 67a7211 e
HEAD is now at d9ea348 c
[detached HEAD 5573dba] g
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g.t
[detached HEAD 09e6546] h
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 g.t
Previous HEAD position was 09e6546 h
HEAD is now at 1bd0260 d
[detached HEAD 00eccdb] gp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g.t
[detached HEAD 3317c29] i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 i.t
Previous HEAD position was 3317c29 i
HEAD is now at 020ea9b b
[detached HEAD 09e072f] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f.t
ok 21 - setup of linear history for range selection tests

expecting success of 3421.22 'rebase --apply drops patches in upstream': 
		reset_rebase &&
		git rebase --apply h i &&
		test_cmp_rev h HEAD~2 &&
		test_linear_range 'd i' h..
	
fatal: No rebase in progress?
HEAD is now at 09e072f f
First, rewinding head to replay your work on top of it...
Applying: d
Applying: i
ok 22 - rebase --apply drops patches in upstream

expecting success of 3421.23 'rebase -m drops patches in upstream': 
		reset_rebase &&
		git rebase -m h i &&
		test_cmp_rev h HEAD~2 &&
		test_linear_range 'd i' h..
	
fatal: No rebase in progress?
HEAD is now at 5c158e9 i
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 23 - rebase -m drops patches in upstream

expecting success of 3421.24 'rebase -i drops patches in upstream': 
		reset_rebase &&
		git rebase -i h i &&
		test_cmp_rev h HEAD~2 &&
		test_linear_range 'd i' h..
	
fatal: No rebase in progress?
HEAD is now at 5c158e9 i
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 24 - rebase -i drops patches in upstream

expecting success of 3421.25 'rebase --apply can drop last patch if in upstream': 
		reset_rebase &&
		git rebase --apply h gp &&
		test_cmp_rev h HEAD^ &&
		test_linear_range 'd' h..
	
fatal: No rebase in progress?
HEAD is now at 5c158e9 i
First, rewinding head to replay your work on top of it...
Applying: d
ok 25 - rebase --apply can drop last patch if in upstream

expecting success of 3421.26 'rebase -m can drop last patch if in upstream': 
		reset_rebase &&
		git rebase -m h gp &&
		test_cmp_rev h HEAD^ &&
		test_linear_range 'd' h..
	
fatal: No rebase in progress?
HEAD is now at e937a8e d
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 26 - rebase -m can drop last patch if in upstream

expecting success of 3421.27 'rebase -i can drop last patch if in upstream': 
		reset_rebase &&
		git rebase -i h gp &&
		test_cmp_rev h HEAD^ &&
		test_linear_range 'd' h..
	
fatal: No rebase in progress?
HEAD is now at e937a8e d
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 27 - rebase -i can drop last patch if in upstream

expecting success of 3421.28 'rebase --apply --onto drops patches in upstream': 
		reset_rebase &&
		git rebase --apply --onto f h i &&
		test_cmp_rev f HEAD~2 &&
		test_linear_range 'd i' f..
	
fatal: No rebase in progress?
HEAD is now at e937a8e d
First, rewinding head to replay your work on top of it...
Applying: d
Applying: i
ok 28 - rebase --apply --onto drops patches in upstream

expecting success of 3421.29 'rebase -m --onto drops patches in upstream': 
		reset_rebase &&
		git rebase -m --onto f h i &&
		test_cmp_rev f HEAD~2 &&
		test_linear_range 'd i' f..
	
fatal: No rebase in progress?
HEAD is now at bcc98eb i
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 29 - rebase -m --onto drops patches in upstream

expecting success of 3421.30 'rebase -i --onto drops patches in upstream': 
		reset_rebase &&
		git rebase -i --onto f h i &&
		test_cmp_rev f HEAD~2 &&
		test_linear_range 'd i' f..
	
fatal: No rebase in progress?
HEAD is now at bcc98eb i
warning: skipped previously applied commit 00eccdb
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 30 - rebase -i --onto drops patches in upstream

expecting success of 3421.31 'rebase --apply --onto does not drop patches in onto': 
		reset_rebase &&
		git rebase --apply --onto h f i &&
		test_cmp_rev h HEAD~3 &&
		test_linear_range 'd gp i' h..
	
fatal: No rebase in progress?
HEAD is now at bcc98eb i
First, rewinding head to replay your work on top of it...
Applying: d
Applying: gp
Applying: i
ok 31 - rebase --apply --onto does not drop patches in onto

expecting success of 3421.32 'rebase -m --onto does not drop patches in onto': 
		reset_rebase &&
		git rebase -m --onto h f i &&
		test_cmp_rev h HEAD~3 &&
		test_linear_range 'd gp i' h..
	
fatal: No rebase in progress?
HEAD is now at bbe8f41 i
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 32 - rebase -m --onto does not drop patches in onto

expecting success of 3421.33 'rebase -i --onto does not drop patches in onto': 
		reset_rebase &&
		git rebase -i --onto h f i &&
		test_cmp_rev h HEAD~3 &&
		test_linear_range 'd gp i' h..
	
fatal: No rebase in progress?
HEAD is now at bbe8f41 i
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 33 - rebase -i --onto does not drop patches in onto

expecting success of 3421.34 'setup of linear history for empty commit tests': 
	git checkout c &&
	make_empty j &&
	git checkout d &&
	make_empty k &&
	test_commit l

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  bbe8f41 i
  4a12efe gp
  e937a8e d

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> bbe8f41

HEAD is now at d9ea348 c
[detached HEAD 5b67321] j
 Author: A U Thor <author@example.com>
Previous HEAD position was 5b67321 j
HEAD is now at 1bd0260 d
[detached HEAD 753370d] k
 Author: A U Thor <author@example.com>
[detached HEAD 49cf309] l
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 l.t
ok 34 - setup of linear history for empty commit tests

checking known breakage of 3421.35 'rebase --apply keeps begin-empty commits': 
		reset_rebase &&
		git rebase --apply j l &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'j d k l' c..
	
fatal: No rebase in progress?
HEAD is now at 49cf309 l
First, rewinding head to replay your work on top of it...
Applying: d
Applying: l
error: two revisions point to different objects:
  'c': d9ea348e0fe8827f205c231ed0a5b8258841fd37
  'HEAD~4': 020ea9b5b2051d958f4737afacdc8821a33ac9a9
not ok 35 - rebase --apply keeps begin-empty commits # TODO known breakage

expecting success of 3421.36 'rebase -m keeps begin-empty commits': 
		reset_rebase &&
		git rebase -m j l &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'j d k l' c..
	
fatal: No rebase in progress?
HEAD is now at 1612308 l
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 36 - rebase -m keeps begin-empty commits

expecting success of 3421.37 'rebase -i keeps begin-empty commits': 
		reset_rebase &&
		git rebase -i j l &&
		test_cmp_rev c HEAD~4 &&
		test_linear_range 'j d k l' c..
	
fatal: No rebase in progress?
HEAD is now at 5395ede l
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 37 - rebase -i keeps begin-empty commits

expecting success of 3421.38 'rebase -m --no-keep-empty drops begin-empty commits': 
		reset_rebase &&
		git rebase -m --no-keep-empty c l &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'd l' c..
	
fatal: No rebase in progress?
HEAD is now at 5395ede l
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 38 - rebase -m --no-keep-empty drops begin-empty commits

expecting success of 3421.39 'rebase -i --no-keep-empty drops begin-empty commits': 
		reset_rebase &&
		git rebase -i --no-keep-empty c l &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'd l' c..
	
fatal: No rebase in progress?
HEAD is now at ef60b8d l
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 39 - rebase -i --no-keep-empty drops begin-empty commits

expecting success of 3421.40 'rebase -m --keep-empty keeps empty even if already in upstream': 
		reset_rebase &&
		git rebase -m --keep-empty j l &&
		test_cmp_rev j HEAD~3 &&
		test_linear_range 'd k l' j..
	
fatal: No rebase in progress?
HEAD is now at ef60b8d l
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 40 - rebase -m --keep-empty keeps empty even if already in upstream

expecting success of 3421.41 'rebase -i --keep-empty keeps empty even if already in upstream': 
		reset_rebase &&
		git rebase -i --keep-empty j l &&
		test_cmp_rev j HEAD~3 &&
		test_linear_range 'd k l' j..
	
fatal: No rebase in progress?
HEAD is now at 5395ede l
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 41 - rebase -i --keep-empty keeps empty even if already in upstream

expecting success of 3421.42 'rebase --rebase-merges --keep-empty keeps empty even if already in upstream': 
		reset_rebase &&
		git rebase --rebase-merges --keep-empty j l &&
		test_cmp_rev j HEAD~3 &&
		test_linear_range 'd k l' j..
	
fatal: No rebase in progress?
HEAD is now at 5395ede l
Rebasing (1/6)
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)
Rebasing (5/6)

                                                                                
Successfully rebased and updated detached HEAD.
ok 42 - rebase --rebase-merges --keep-empty keeps empty even if already in upstream

expecting success of 3421.43 'setup of linear history for test involving root': 
	git checkout b &&
	revert m b &&
	git checkout --orphan disjoint &&
	git rm -rf . &&
	test_commit x &&
	test_commit y &&
	cherry_pick bp b

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  5395ede l
  9a731c2 k
  60768b3 d

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5395ede

HEAD is now at 020ea9b b
[detached HEAD 6db5543] m
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 b.t
Switched to a new branch 'disjoint'
rm 'a.t'
[disjoint (root-commit) 059091f] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
[disjoint be1e399] y
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 y.t
[disjoint b7cb922] bp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
ok 43 - setup of linear history for test involving root

expecting success of 3421.44 'rebase --apply --onto --root': 
		reset_rebase &&
		git rebase --apply --onto c --root y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at b7cb922 bp
First, rewinding head to replay your work on top of it...
Applying: x
Applying: y
ok 44 - rebase --apply --onto --root

expecting success of 3421.45 'rebase -m --onto --root': 
		reset_rebase &&
		git rebase -m --onto c --root y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 45 - rebase -m --onto --root

expecting success of 3421.46 'rebase -i --onto --root': 
		reset_rebase &&
		git rebase -i --onto c --root y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 46 - rebase -i --onto --root

expecting success of 3421.47 'rebase --apply without --onto --root with disjoint history': 
		reset_rebase &&
		git rebase --apply c y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
First, rewinding head to replay your work on top of it...
Applying: x
Applying: y
ok 47 - rebase --apply without --onto --root with disjoint history

expecting success of 3421.48 'rebase -m without --onto --root with disjoint history': 
		reset_rebase &&
		git rebase -m c y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 48 - rebase -m without --onto --root with disjoint history

expecting success of 3421.49 'rebase -i without --onto --root with disjoint history': 
		reset_rebase &&
		git rebase -i c y &&
		test_cmp_rev c HEAD~2 &&
		test_linear_range 'x y' c..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 49 - rebase -i without --onto --root with disjoint history

expecting success of 3421.50 'rebase --apply --onto --root drops patch in onto': 
		reset_rebase &&
		git rebase --apply --onto m --root bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 7e2f0ad y
First, rewinding head to replay your work on top of it...
Applying: x
Applying: y
ok 50 - rebase --apply --onto --root drops patch in onto

expecting success of 3421.51 'rebase -m --onto --root drops patch in onto': 
		reset_rebase &&
		git rebase -m --onto m --root bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
warning: skipped previously applied commit b7cb922
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 51 - rebase -m --onto --root drops patch in onto

expecting success of 3421.52 'rebase -i --onto --root drops patch in onto': 
		reset_rebase &&
		git rebase -i --onto m --root bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
warning: skipped previously applied commit b7cb922
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 52 - rebase -i --onto --root drops patch in onto

expecting success of 3421.53 'rebase --apply --onto --root with merge-base does not go to root': 
		reset_rebase &&
		git rebase --apply --onto m --root g &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'c g' m..
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
First, rewinding head to replay your work on top of it...
Applying: c
Applying: g
ok 53 - rebase --apply --onto --root with merge-base does not go to root

expecting success of 3421.54 'rebase -m --onto --root with merge-base does not go to root': 
		reset_rebase &&
		git rebase -m --onto m --root g &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'c g' m..
	
fatal: No rebase in progress?
HEAD is now at 9921398 g
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 54 - rebase -m --onto --root with merge-base does not go to root

expecting success of 3421.55 'rebase -i --onto --root with merge-base does not go to root': 
		reset_rebase &&
		git rebase -i --onto m --root g &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'c g' m..
	
fatal: No rebase in progress?
HEAD is now at 9921398 g
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 55 - rebase -i --onto --root with merge-base does not go to root

expecting success of 3421.56 'rebase --apply without --onto --root with disjoint history drops patch in onto': 
		reset_rebase &&
		git rebase --apply m bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 9921398 g
First, rewinding head to replay your work on top of it...
Applying: x
Applying: y
ok 56 - rebase --apply without --onto --root with disjoint history drops patch in onto

expecting success of 3421.57 'rebase -m without --onto --root with disjoint history drops patch in onto': 
		reset_rebase &&
		git rebase -m m bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
warning: skipped previously applied commit b7cb922
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 57 - rebase -m without --onto --root with disjoint history drops patch in onto

expecting success of 3421.58 'rebase -i without --onto --root with disjoint history drops patch in onto': 
		reset_rebase &&
		git rebase -i m bp &&
		test_cmp_rev m HEAD~2 &&
		test_linear_range 'x y' m..
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
warning: skipped previously applied commit b7cb922
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 58 - rebase -i without --onto --root with disjoint history drops patch in onto

expecting success of 3421.59 'rebase  --root on linear history is a no-op': 
		reset_rebase &&
		git rebase  --root c &&
		test_cmp_rev c HEAD
	
fatal: No rebase in progress?
HEAD is now at 1daea3a y
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 59 - rebase  --root on linear history is a no-op

expecting success of 3421.60 'rebase -m --root on linear history is a no-op': 
		reset_rebase &&
		git rebase -m --root c &&
		test_cmp_rev c HEAD
	
fatal: No rebase in progress?
HEAD is now at d9ea348 c
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 60 - rebase -m --root on linear history is a no-op

expecting success of 3421.61 'rebase -i --root on linear history is a no-op': 
		reset_rebase &&
		git rebase -i --root c &&
		test_cmp_rev c HEAD
	
fatal: No rebase in progress?
HEAD is now at d9ea348 c
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 61 - rebase -i --root on linear history is a no-op

expecting success of 3421.62 'rebase  -f --root on linear history causes re-write': 
		reset_rebase &&
		git rebase  -f --root c &&
		test_cmp_rev ! a HEAD~2 &&
		test_linear_range 'a b c' HEAD
	
fatal: No rebase in progress?
HEAD is now at d9ea348 c
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 62 - rebase  -f --root on linear history causes re-write

expecting success of 3421.63 'rebase -m -f --root on linear history causes re-write': 
		reset_rebase &&
		git rebase -m -f --root c &&
		test_cmp_rev ! a HEAD~2 &&
		test_linear_range 'a b c' HEAD
	
fatal: No rebase in progress?
HEAD is now at 8b0b08f c
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 63 - rebase -m -f --root on linear history causes re-write

expecting success of 3421.64 'rebase -i -f --root on linear history causes re-write': 
		reset_rebase &&
		git rebase -i -f --root c &&
		test_cmp_rev ! a HEAD~2 &&
		test_linear_range 'a b c' HEAD
	
fatal: No rebase in progress?
HEAD is now at 8b0b08f c
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated detached HEAD.
ok 64 - rebase -i -f --root on linear history causes re-write

# still have 1 known breakage(s)
# passed all remaining 63 test(s)
1..64
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3431-rebase-fork-point.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3431-rebase-fork-point/.git/
expecting success of 3431.1 'setup': 
	test_commit A &&
	test_commit B &&
	test_commit C &&
	git branch -t side &&
	git reset --hard HEAD^ &&
	test_commit D &&
	test_commit E &&
	git checkout side &&
	test_commit F &&
	test_commit G

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
branch 'side' set up to track 'main'.
HEAD is now at d9df450 B
[main 3e6e33e] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[main dc25130] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
[side f231f7a] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[side d8775ba] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
ok 1 - setup

expecting success of 3431.2 'git rebase ': do_test_rebase 'G F E D B A' 
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 2 - git rebase 

expecting success of 3431.3 'git rebase --onto D': do_test_rebase 'G F D B A' --onto D
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 2 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 3 - git rebase --onto D

expecting success of 3431.4 'git rebase --keep-base': do_test_rebase 'G F C B A' --keep-base
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Current branch side is up to date.
ok 4 - git rebase --keep-base

expecting success of 3431.5 'git rebase --no-fork-point': do_test_rebase 'G F C E D B A' --no-fork-point
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 5 - git rebase --no-fork-point

expecting success of 3431.6 'git rebase --no-fork-point --onto D': do_test_rebase 'G F C D B A' --no-fork-point --onto D
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 3 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 6 - git rebase --no-fork-point --onto D

expecting success of 3431.7 'git rebase --no-fork-point --keep-base': do_test_rebase 'G F C B A' --no-fork-point --keep-base
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Current branch side is up to date.
ok 7 - git rebase --no-fork-point --keep-base

expecting success of 3431.8 'git rebase --fork-point refs/heads/main': do_test_rebase 'G F E D B A' --fork-point refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 8 - git rebase --fork-point refs/heads/main

expecting success of 3431.9 'git rebase --fork-point main': do_test_rebase 'G F E D B A' --fork-point main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 2 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 9 - git rebase --fork-point main

expecting success of 3431.10 'git rebase --fork-point --onto D refs/heads/main': do_test_rebase 'G F D B A' --fork-point --onto D refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 2 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 10 - git rebase --fork-point --onto D refs/heads/main

expecting success of 3431.11 'git rebase --fork-point --onto D main': do_test_rebase 'G F D B A' --fork-point --onto D main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 11 - git rebase --fork-point --onto D main

expecting success of 3431.12 'git rebase --fork-point --keep-base refs/heads/main': do_test_rebase 'G F B A' --fork-point --keep-base refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 12 - git rebase --fork-point --keep-base refs/heads/main

expecting success of 3431.13 'git rebase --fork-point --keep-base main': do_test_rebase 'G F B A' --fork-point --keep-base main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 13 - git rebase --fork-point --keep-base main

expecting success of 3431.14 'git rebase refs/heads/main': do_test_rebase 'G F C E D B A' refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 14 - git rebase refs/heads/main

expecting success of 3431.15 'git rebase main': do_test_rebase 'G F C E D B A' main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 3 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 15 - git rebase main

expecting success of 3431.16 'git rebase --onto D refs/heads/main': do_test_rebase 'G F C D B A' --onto D refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 3 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 16 - git rebase --onto D refs/heads/main

expecting success of 3431.17 'git rebase --onto D main': do_test_rebase 'G F C D B A' --onto D main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 17 - git rebase --onto D main

expecting success of 3431.18 'git rebase --keep-base refs/heads/main': do_test_rebase 'G F C B A' --keep-base refs/heads/main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Current branch side is up to date.
ok 18 - git rebase --keep-base refs/heads/main

expecting success of 3431.19 'git rebase --keep-base main': do_test_rebase 'G F C B A' --keep-base main
Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Current branch side is up to date.
ok 19 - git rebase --keep-base main

expecting success of 3431.20 'git rebase --fork-point with ambigous refname': 
	git checkout main &&
	git checkout -b one &&
	git checkout side &&
	git tag one &&
	test_must_fail git rebase --fork-point --onto D one

Switched to branch 'main'
Switched to a new branch 'one'
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
warning: refname 'one' is ambiguous.
fatal: Ambiguous refname: 'one'
ok 20 - git rebase --fork-point with ambigous refname

expecting success of 3431.21 '--fork-point and --root both given': 
	test_must_fail git rebase --fork-point --root 2>err &&
	test_i18ngrep "cannot be used together" err

fatal: options '--root' and '--fork-point' cannot be used together
ok 21 - --fork-point and --root both given

expecting success of 3431.22 'rebase.forkPoint set to false': 
	test_config rebase.forkPoint false &&
	do_test_rebase "G F C E D B A"

Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 22 - rebase.forkPoint set to false

expecting success of 3431.23 'rebase.forkPoint set to false and then to true': 
	test_config_global rebase.forkPoint false &&
	test_config rebase.forkPoint true &&
	do_test_rebase "G F E D B A"

Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 3 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 23 - rebase.forkPoint set to false and then to true

expecting success of 3431.24 'rebase.forkPoint set to false and command line says --fork-point': 
	test_config rebase.forkPoint false &&
	do_test_rebase "G F E D B A" --fork-point

Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 2 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 24 - rebase.forkPoint set to false and command line says --fork-point

expecting success of 3431.25 'rebase.forkPoint set to true and command line says --no-fork-point': 
	test_config rebase.forkPoint true &&
	do_test_rebase "G F C E D B A" --no-fork-point

Switched to branch 'main'
HEAD is now at dc25130 E
Switched to branch 'side'
Your branch is ahead of 'main' by 2 commits.
  (use "git push" to publish your local commits)
HEAD is now at d8775ba G
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 25 - rebase.forkPoint set to true and command line says --no-fork-point

expecting success of 3431.26 'rebase.forkPoint set to true and --root given': 
	test_config rebase.forkPoint true &&
	git rebase --root

Rebasing (1/7)
Rebasing (2/7)
Rebasing (3/7)
Rebasing (4/7)
Rebasing (5/7)
Rebasing (6/7)
Rebasing (7/7)

                                                                                
Successfully rebased and updated refs/heads/side.
ok 26 - rebase.forkPoint set to true and --root given

# passed all 26 test(s)
1..26
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3433-rebase-across-mode-change.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3433-rebase-across-mode-change/.git/
expecting success of 3433.1 'setup': 
	mkdir DS &&
	>DS/whatever &&
	git add DS &&
	git commit -m base &&

	git branch side1 &&
	git branch side2 &&

	git checkout side1 &&
	git rm -rf DS &&
	test_ln_s_add unrelated DS &&
	git commit -m side1 &&

	git checkout side2 &&
	>unrelated &&
	git add unrelated &&
	git commit -m commit1 &&

	echo >>unrelated &&
	git commit -am commit2

[master (root-commit) ba9279b] base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 DS/whatever
Switched to branch 'side1'
rm 'DS/whatever'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[side1 0a05486] side1
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 DS
 delete mode 100644 DS/whatever
Switched to branch 'side2'
[side2 e75512e] commit1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 unrelated
[side2 e22f82a] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3433.2 'rebase changes with the apply backend': 
	test_when_finished "git rebase --abort || true" &&
	git checkout -b apply-backend side2 &&
	git rebase side1

Switched to a new branch 'apply-backend'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/apply-backend.
fatal: No rebase in progress?
ok 2 - rebase changes with the apply backend

expecting success of 3433.3 'rebase changes with the merge backend': 
	test_when_finished "git rebase --abort || true" &&
	git checkout -b merge-backend side2 &&
	git rebase -m side1

Switched to a new branch 'merge-backend'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/merge-backend.
fatal: No rebase in progress?
ok 3 - rebase changes with the merge backend

expecting success of 3433.4 'rebase changes with the merge backend with a delay': 
	test_when_finished "git rebase --abort || true" &&
	git checkout -b merge-delay-backend side2 &&
	git rebase -m --exec "sleep 1" side1

Switched to a new branch 'merge-delay-backend'
Rebasing (1/4)
Rebasing (2/4)

                                                                                
Executing: sleep 1
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Executing: sleep 1

                                                                                
Successfully rebased and updated refs/heads/merge-delay-backend.
fatal: No rebase in progress?
ok 4 - rebase changes with the merge backend with a delay

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3430-rebase-merges.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3430-rebase-merges/.git/
expecting success of 3430.1 'setup': 
	write_script replace-editor.sh <<-\EOF &&
	mv "$1" "$(git rev-parse --git-path ORIGINAL-TODO)"
	cp script-from-scratch "$1"
	EOF

	test_commit A &&
	git checkout -b first &&
	test_commit B &&
	b=$(git rev-parse --short HEAD) &&
	git checkout main &&
	test_commit C &&
	c=$(git rev-parse --short HEAD) &&
	test_commit D &&
	d=$(git rev-parse --short HEAD) &&
	git merge --no-commit B &&
	test_tick &&
	git commit -m E &&
	git tag -m E E &&
	e=$(git rev-parse --short HEAD) &&
	git checkout -b second C &&
	test_commit F &&
	f=$(git rev-parse --short HEAD) &&
	test_commit G &&
	g=$(git rev-parse --short HEAD) &&
	git checkout main &&
	git merge --no-commit G &&
	test_tick &&
	git commit -m H &&
	h=$(git rev-parse --short HEAD) &&
	git tag -m H H &&
	git checkout A &&
	test_commit conflicting-G G.t

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'first'
[first d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to branch 'main'
[main 5dee784] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main 12bd07b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Automatic merge went well; stopped before committing as requested
[main 2051b56] E
 Author: A U Thor <author@example.com>
Switched to a new branch 'second'
[second ca2c861] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[second 088b00a] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'main'
Automatic merge went well; stopped before committing as requested
[main 233d48a] H
 Author: A U Thor <author@example.com>
Note: switching to 'A'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0ddfaf1 A
[detached HEAD 82776a5] conflicting-G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
ok 1 - setup

expecting success of 3430.2 'create completely different structure': 
	cat >script-from-scratch <<-\EOF &&
	label onto

	# onebranch
	pick G
	pick D
	label onebranch

	# second
	reset onto
	pick B
	label second

	reset onto
	merge -C H second
	merge onebranch # Merge the topic branch 'onebranch'
	EOF
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	git rebase -i -r A main &&
	test_cmp_graph <<-\EOF
	*   Merge the topic branch 'onebranch'
	|\
	| * D
	| * G
	* |   H
	|\ \
	| |/
	|/|
	| * B
	|/
	* A
	EOF

Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Rebasing (4/13)
Rebasing (5/13)
Rebasing (6/13)
Rebasing (7/13)
Rebasing (8/13)
Rebasing (9/13)
Rebasing (10/13)
[detached HEAD c2c3fe3] Merge the topic branch 'onebranch'
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700

                                                                                
Successfully rebased and updated refs/heads/main.
ok 2 - create completely different structure

expecting success of 3430.3 'generate correct todo list': 
	cat >expect <<-EOF &&
	label onto

	reset onto
	pick $b B
	label E

	reset onto
	pick $c C
	label branch-point
	pick $f F
	pick $g G
	label H

	reset branch-point # C
	pick $d D
	merge -C $e E # E
	merge -C $h H # H

	EOF

	grep -v "^#" <.git/ORIGINAL-TODO >output &&
	test_cmp expect output

ok 3 - generate correct todo list

expecting success of 3430.4 '`reset` refuses to overwrite untracked files': 
	git checkout -b refuse-to-reset &&
	test_commit dont-overwrite-untracked &&
	git checkout @{-1} &&
	: >dont-overwrite-untracked.t &&
	echo "reset refs/tags/dont-overwrite-untracked" >script-from-scratch &&
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_must_fail git rebase -ir HEAD &&
	git rebase --abort

Switched to a new branch 'refuse-to-reset'
[refuse-to-reset 5f910bb] dont-overwrite-untracked
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dont-overwrite-untracked.t
Switched to branch 'main'
Rebasing (1/1)
error: The following untracked working tree files would be overwritten by reset:
	dont-overwrite-untracked.t
Please move or remove them before you reset.
Aborting
hint: Could not execute the todo command
hint: 
hint:     reset refs/tags/dont-overwrite-untracked
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
ok 4 - `reset` refuses to overwrite untracked files

expecting success of 3430.5 '`reset` rejects trees': 
	test_when_finished "test_might_fail git rebase --abort" &&
	test_must_fail env GIT_SEQUENCE_EDITOR="echo reset A^{tree} >" \
		git rebase -i B C >out 2>err &&
	grep "object .* is a tree" err &&
	test_must_be_empty out

Rebasing (1/1)
error: object da5497437fd67ca928333aab79c4b4b55036ea66 is a tree, not a commit
ok 5 - `reset` rejects trees

expecting success of 3430.6 '`reset` only looks for labels under refs/rewritten/': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git branch refs/rewritten/my-label A &&
	test_must_fail env GIT_SEQUENCE_EDITOR="echo reset my-label >" \
		git rebase -i B C >out 2>err &&
	grep "could not resolve ${SQ}my-label${SQ}" err &&
	test_must_be_empty out

Rebasing (1/1)
error: could not resolve 'my-label'
ok 6 - `reset` only looks for labels under refs/rewritten/

expecting success of 3430.7 'failed `merge -C` writes patch (may be rescheduled, too)': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout -b conflicting-merge A &&

	: fail because of conflicting untracked file &&
	>G.t &&
	echo "merge -C H G" >script-from-scratch &&
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	test_must_fail git rebase -ir HEAD &&
	grep "^merge -C .* G$" .git/rebase-merge/done &&
	grep "^merge -C .* G$" .git/rebase-merge/git-rebase-todo &&
	test_path_is_file .git/rebase-merge/patch &&

	: fail because of merge conflict &&
	rm G.t .git/rebase-merge/patch &&
	git reset --hard conflicting-G &&
	test_must_fail git rebase --continue &&
	! grep "^merge -C .* G$" .git/rebase-merge/git-rebase-todo &&
	test_path_is_file .git/rebase-merge/patch

Previous HEAD position was 5dee784 C
Switched to a new branch 'conflicting-merge'
Rebasing (1/1)
error: The following untracked working tree files would be overwritten by merge:
	G.t
Please move or remove them before you merge.
Aborting
error: could not even attempt to merge 'G'
hint: Could not execute the todo command
hint: 
hint:     merge -C 233d48a5caa0e14494fac2553a0b1179ff65b118 G
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Could not apply 233d48a... G
merge -C 233d48a5caa0e14494fac2553a0b1179ff65b118 G
merge -C 233d48a5caa0e14494fac2553a0b1179ff65b118 G
HEAD is now at 82776a5 conflicting-G
Rebasing (2/2)
Auto-merging G.t
CONFLICT (add/add): Merge conflict in G.t
Could not apply 233d48a... G
ok 7 - failed `merge -C` writes patch (may be rescheduled, too)

expecting success of 3430.8 'failed `merge <branch>` does not crash': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout conflicting-G &&

	echo "merge G" >script-from-scratch &&
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	test_must_fail git rebase -ir HEAD &&
	! grep "^merge G$" .git/rebase-merge/git-rebase-todo &&
	grep "^Merge branch ${SQ}G${SQ}$" .git/rebase-merge/message

Note: switching to 'conflicting-G'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 82776a5 conflicting-G
Rebasing (1/1)
Auto-merging G.t
CONFLICT (add/add): Merge conflict in G.t
Could not merge G
Merge branch 'G'
ok 8 - failed `merge <branch>` does not crash

expecting success of 3430.9 'merge -c commits before rewording and reloads todo-list': 
	cat >script-from-scratch <<-\EOF &&
	merge -c E B
	merge -c H G
	EOF

	git checkout -b merge-c H &&
	(
		set_reword_editor &&
		GIT_SEQUENCE_EDITOR="\"$PWD/replace-editor.sh\"" \
			git rebase -i -r D
	) &&
	check_reworded_commits E H

Previous HEAD position was 82776a5 conflicting-G
Switched to a new branch 'merge-c'
Rebasing (1/2)
[detached HEAD 3d66115] E
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
Rebasing (2/3)

                                                                                
Executing: git log -1 --pretty=format:'%an <%ae> %at%n%B%n' >>reword-actual
Rebasing (3/3)
[detached HEAD 790085d] H
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
Rebasing (4/4)

                                                                                
Executing: git log -1 --pretty=format:'%an <%ae> %at%n%B%n' >>reword-actual

                                                                                
Successfully rebased and updated refs/heads/merge-c.
ok 9 - merge -c commits before rewording and reloads todo-list

expecting success of 3430.10 'merge -c rewords when a strategy is given': 
	git checkout -b merge-c-with-strategy H &&
	write_script git-merge-override <<-\EOF &&
	echo overridden$1 >G.t
	git add G.t
	EOF

	PATH="$PWD:$PATH" \
	GIT_SEQUENCE_EDITOR="echo merge -c H G >" \
	GIT_EDITOR="echo edited >>" \
		git rebase --no-ff -ir -s override -Xxopt E &&
	test_write_lines overridden--xopt >expect &&
	test_cmp expect G.t &&
	test_write_lines H "" edited "" >expect &&
	git log --format=%B -1 >actual &&
	test_cmp expect actual


Switched to a new branch 'merge-c-with-strategy'
Rebasing (1/1)
Merge made by the 'override' strategy.

                                                                                
Successfully rebased and updated refs/heads/merge-c-with-strategy.
ok 10 - merge -c rewords when a strategy is given

expecting success of 3430.11 'with a branch tip that was cherry-picked already': 
	git checkout -b already-upstream main &&
	base="$(git rev-parse --verify HEAD)" &&

	test_commit A1 &&
	test_commit A2 &&
	git reset --hard $base &&
	test_commit B1 &&
	test_tick &&
	git merge -m "Merge branch A" A2 &&

	git checkout -b upstream-with-a2 $base &&
	test_tick &&
	git cherry-pick A2 &&

	git checkout already-upstream &&
	test_tick &&
	git rebase -i -r upstream-with-a2 &&
	test_cmp_graph upstream-with-a2.. <<-\EOF
	*   Merge branch A
	|\
	| * A1
	* | B1
	|/
	o A2
	EOF

Switched to a new branch 'already-upstream'
[already-upstream cac3b13] A1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A1.t
[already-upstream 0466126] A2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A2.t
HEAD is now at c2c3fe3 Merge the topic branch 'onebranch'
[already-upstream fa07690] B1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B1.t
Merge made by the 'ort' strategy.
 A1.t | 1 +
 A2.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 A1.t
 create mode 100644 A2.t
Switched to a new branch 'upstream-with-a2'
[upstream-with-a2 071ab27] A2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:27:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 A2.t
Switched to branch 'already-upstream'
warning: skipped previously applied commit 0466126
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/already-upstream.
ok 11 - with a branch tip that was cherry-picked already

expecting success of 3430.12 'do not rebase cousins unless asked for': 
	git checkout -b cousins main &&
	before="$(git rev-parse --verify HEAD)" &&
	test_tick &&
	git rebase -r HEAD^ &&
	test_cmp_rev HEAD $before &&
	test_tick &&
	git rebase --rebase-merges=rebase-cousins HEAD^ &&
	test_cmp_graph HEAD^.. <<-\EOF
	*   Merge the topic branch 'onebranch'
	|\
	| * D
	| * G
	|/
	o H
	EOF

Switched to a new branch 'cousins'
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/cousins.
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/cousins.
ok 12 - do not rebase cousins unless asked for

expecting success of 3430.13 'refs/rewritten/* is worktree-local': 
	git worktree add wt &&
	cat >wt/script-from-scratch <<-\EOF &&
	label xyz
	exec GIT_DIR=../.git git rev-parse --verify refs/rewritten/xyz >a || :
	exec git rev-parse --verify refs/rewritten/xyz >b
	EOF

	test_config -C wt sequence.editor \""$PWD"/replace-editor.sh\" &&
	git -C wt rebase -i HEAD &&
	test_must_be_empty wt/a &&
	test_cmp_rev HEAD "$(cat wt/b)"

Preparing worktree (new branch 'wt')
HEAD is now at 28125a1 Merge the topic branch 'onebranch'
Rebasing (1/3)
Rebasing (2/3)

                                                                                
Executing: GIT_DIR=../.git git rev-parse --verify refs/rewritten/xyz >a || :
fatal: Needed a single revision
Rebasing (3/3)

                                                                                
Executing: git rev-parse --verify refs/rewritten/xyz >b

                                                                                
Successfully rebased and updated refs/heads/wt.
ok 13 - refs/rewritten/* is worktree-local

expecting success of 3430.14 '--abort cleans up refs/rewritten': 
	git checkout -b abort-cleans-refs-rewritten H &&
	GIT_SEQUENCE_EDITOR="echo break >>" git rebase -ir @^ &&
	git rev-parse --verify refs/rewritten/onto &&
	git rebase --abort &&
	test_must_fail git rev-parse --verify refs/rewritten/onto

Switched to a new branch 'abort-cleans-refs-rewritten'
Rebasing (1/11)
Rebasing (2/11)
Rebasing (3/11)
Rebasing (4/11)
Rebasing (5/11)
Rebasing (6/11)
Rebasing (7/11)
Rebasing (8/11)

                                                                                
Stopped at 233d48a (H)
2051b561a3f30f5455d33a5269d3851790a86f42
fatal: Needed a single revision
ok 14 - --abort cleans up refs/rewritten

expecting success of 3430.15 '--quit cleans up refs/rewritten': 
	git checkout -b quit-cleans-refs-rewritten H &&
	GIT_SEQUENCE_EDITOR="echo break >>" git rebase -ir @^ &&
	git rev-parse --verify refs/rewritten/onto &&
	git rebase --quit &&
	test_must_fail git rev-parse --verify refs/rewritten/onto

Switched to a new branch 'quit-cleans-refs-rewritten'
Rebasing (1/11)
Rebasing (2/11)
Rebasing (3/11)
Rebasing (4/11)
Rebasing (5/11)
Rebasing (6/11)
Rebasing (7/11)
Rebasing (8/11)

                                                                                
Stopped at 233d48a (H)
2051b561a3f30f5455d33a5269d3851790a86f42
fatal: Needed a single revision
ok 15 - --quit cleans up refs/rewritten

expecting success of 3430.16 'post-rewrite hook and fixups work for merges': 
	git checkout -b post-rewrite H &&
	test_commit same1 &&
	git reset --hard HEAD^ &&
	test_commit same2 &&
	git merge -m "to fix up" same1 &&
	echo same old same old >same2.t &&
	test_tick &&
	git commit --fixup HEAD same2.t &&
	fixup="$(git rev-parse HEAD)" &&

	test_hook post-rewrite <<-\EOF &&
	cat >actual
	EOF

	test_tick &&
	git rebase -i --autosquash -r HEAD^^^ &&
	printf "%s %s\n%s %s\n%s %s\n%s %s\n" >expect $(git rev-parse \
		$fixup^^2 HEAD^2 \
		$fixup^^ HEAD^ \
		$fixup^ HEAD \
		$fixup HEAD) &&
	test_cmp expect actual

Switched to a new branch 'post-rewrite'
[post-rewrite 8ccf841] same1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 same1.t
HEAD is now at 233d48a H
[post-rewrite 30f9b1b] same2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 same2.t
Merge made by the 'ort' strategy.
 same1.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 same1.t
[post-rewrite 62ae8be] fixup! to fix up
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/10)
Rebasing (2/10)
Rebasing (3/10)
Rebasing (4/10)
Rebasing (5/10)
Rebasing (6/10)
Rebasing (7/10)
Rebasing (8/10)

                                                                                
Successfully rebased and updated refs/heads/post-rewrite.
ok 16 - post-rewrite hook and fixups work for merges

expecting success of 3430.17 'refuse to merge ancestors of HEAD': 
	echo "merge HEAD^" >script-from-scratch &&
	test_config -C wt sequence.editor \""$PWD"/replace-editor.sh\" &&
	before="$(git rev-parse HEAD)" &&
	git rebase -i HEAD &&
	test_cmp_rev HEAD $before

Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/post-rewrite.
ok 17 - refuse to merge ancestors of HEAD

expecting success of 3430.18 'root commits': 
	git checkout --orphan unrelated &&
	(GIT_AUTHOR_NAME="Parsnip" GIT_AUTHOR_EMAIL="root@example.com" \
	 test_commit second-root) &&
	test_commit third-root &&
	cat >script-from-scratch <<-\EOF &&
	pick third-root
	label first-branch
	reset [new root]
	pick second-root
	merge first-branch # Merge the 3rd root
	EOF
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	git rebase -i --force-rebase --root -r &&
	test "Parsnip" = "$(git show -s --format=%an HEAD^)" &&
	test $(git rev-parse second-root^0) != $(git rev-parse HEAD^) &&
	test $(git rev-parse second-root:second-root.t) = \
		$(git rev-parse HEAD^:second-root.t) &&
	test_cmp_graph HEAD <<-\EOF &&
	*   Merge the 3rd root
	|\
	| * third-root
	* second-root
	EOF

	: fast forward if possible &&
	before="$(git rev-parse --verify HEAD)" &&
	test_might_fail git config --unset sequence.editor &&
	test_tick &&
	git rebase -i --root -r &&
	test_cmp_rev HEAD $before

Switched to a new branch 'unrelated'
[unrelated (root-commit) ca4bbbb] second-root
 Author: Parsnip <root@example.com>
 9 files changed, 9 insertions(+)
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
 create mode 100644 G.t
 create mode 100644 same1.t
 create mode 100644 same2.t
 create mode 100644 second-root.t
[unrelated 2d056ae] third-root
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third-root.t
Rebasing (1/5)
Rebasing (2/5)
Rebasing (3/5)
Rebasing (4/5)
Rebasing (5/5)
[detached HEAD 9d9ec48] Merge the 3rd root
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:39:13 2005 -0700

                                                                                
Successfully rebased and updated refs/heads/unrelated.
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/unrelated.
ok 18 - root commits

expecting success of 3430.19 'a "merge" into a root commit is a fast-forward': 
	head=$(git rev-parse HEAD) &&
	cat >script-from-scratch <<-EOF &&
	reset [new root]
	merge $head
	EOF
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	git rebase -i -r HEAD^ &&
	test_cmp_rev HEAD $head

Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/unrelated.
ok 19 - a "merge" into a root commit is a fast-forward

expecting success of 3430.20 'A root commit can be a cousin, treat it that way': 
	git checkout --orphan khnum &&
	test_commit yama &&
	git checkout -b asherah main &&
	test_commit shamkat &&
	git merge --allow-unrelated-histories khnum &&
	test_tick &&
	git rebase -f -r HEAD^ &&
	test_cmp_rev ! HEAD^2 khnum &&
	test_cmp_graph HEAD^.. <<-\EOF &&
	*   Merge branch 'khnum' into asherah
	|\
	| * yama
	o shamkat
	EOF
	test_tick &&
	git rebase --rebase-merges=rebase-cousins HEAD^ &&
	test_cmp_graph HEAD^.. <<-\EOF
	*   Merge branch 'khnum' into asherah
	|\
	| * yama
	|/
	o shamkat
	EOF

Switched to a new branch 'khnum'
[khnum (root-commit) 1c2c8c9] yama
 Author: A U Thor <author@example.com>
 11 files changed, 11 insertions(+)
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
 create mode 100644 G.t
 create mode 100644 same1.t
 create mode 100644 same2.t
 create mode 100644 second-root.t
 create mode 100644 third-root.t
 create mode 100644 yama.t
Switched to a new branch 'asherah'
[asherah c0fbd4e] shamkat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 shamkat.t
Merge made by the 'ort' strategy.
 C.t           | 1 +
 F.t           | 1 +
 same1.t       | 1 +
 same2.t       | 1 +
 second-root.t | 1 +
 third-root.t  | 1 +
 yama.t        | 1 +
 7 files changed, 7 insertions(+)
 create mode 100644 C.t
 create mode 100644 F.t
 create mode 100644 same1.t
 create mode 100644 same2.t
 create mode 100644 second-root.t
 create mode 100644 third-root.t
 create mode 100644 yama.t
Rebasing (1/8)
Rebasing (2/8)
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)

                                                                                
Successfully rebased and updated refs/heads/asherah.
Rebasing (1/8)
Rebasing (2/8)
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)

                                                                                
Successfully rebased and updated refs/heads/asherah.
ok 20 - A root commit can be a cousin, treat it that way

expecting success of 3430.21 'labels that are object IDs are rewritten': 
	git checkout -b third B &&
	test_commit I &&
	third=$(git rev-parse HEAD) &&
	git checkout -b labels main &&
	git merge --no-commit third &&
	test_tick &&
	git commit -m "Merge commit '$third' into labels" &&
	echo noop >script-from-scratch &&
	test_config sequence.editor \""$PWD"/replace-editor.sh\" &&
	test_tick &&
	git rebase -i -r A &&
	grep "^label $third-" .git/ORIGINAL-TODO &&
	! grep "^label $third$" .git/ORIGINAL-TODO

Switched to a new branch 'third'
[third 2c3fb7c] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to a new branch 'labels'
Automatic merge went well; stopped before committing as requested
[labels 965a0f1] Merge commit '2c3fb7c3b5ab0c436e798f81257c51ea0bfd64a7' into labels
 Author: A U Thor <author@example.com>

                                                                                
Successfully rebased and updated refs/heads/labels.
label 2c3fb7c3b5ab0c436e798f81257c51ea0bfd64a7-2
ok 21 - labels that are object IDs are rewritten

expecting success of 3430.22 'octopus merges': 
	git checkout -b three &&
	test_commit before-octopus &&
	test_commit three &&
	git checkout -b two HEAD^ &&
	test_commit two &&
	git checkout -b one HEAD^ &&
	test_commit one &&
	test_tick &&
	(GIT_AUTHOR_NAME="Hank" GIT_AUTHOR_EMAIL="hank@sea.world" \
	 git merge -m "Tüntenfüsch" two three) &&

	: fast forward if possible &&
	before="$(git rev-parse --verify HEAD)" &&
	test_tick &&
	git rebase -i -r HEAD^^ &&
	test_cmp_rev HEAD $before &&

	test_tick &&
	git rebase -i --force-rebase -r HEAD^^ &&
	test "Hank" = "$(git show -s --format=%an HEAD)" &&
	test "$before" != $(git rev-parse HEAD) &&
	test_cmp_graph HEAD^^.. <<-\EOF
	*-.   Tüntenfüsch
	|\ \
	| | * three
	| * | two
	| |/
	* / one
	|/
	o before-octopus
	EOF

Switched to a new branch 'three'
[three ae5e7b4] before-octopus
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 before-octopus.t
[three c52c521] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to a new branch 'two'
[two 0af080b] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to a new branch 'one'
[one 444e548] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
warning: refname 'two' is ambiguous.
warning: refname 'three' is ambiguous.
Trying simple merge with two
Trying simple merge with three
Merge made by the 'octopus' strategy.
 three.t | 1 +
 two.t   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 three.t
 create mode 100644 two.t
Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Rebasing (4/13)
Rebasing (5/13)
Rebasing (6/13)
Rebasing (7/13)
Rebasing (8/13)
Rebasing (9/13)
Rebasing (10/13)

                                                                                
Successfully rebased and updated refs/heads/one.
Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Rebasing (4/13)
Rebasing (5/13)
Rebasing (6/13)
Rebasing (7/13)
Rebasing (8/13)
Rebasing (9/13)
Rebasing (10/13)
Trying simple merge with 80e7b2bd8db0484fa486b62748fb047f4feea1bc
Trying simple merge with 2ad64730bee2c244a75542ad0813d60731471629
Merge made by the 'octopus' strategy.

                                                                                
Successfully rebased and updated refs/heads/one.
ok 22 - octopus merges

expecting success of 3430.23 'with --autosquash and --exec': 
	git checkout -b with-exec H &&
	echo Booh >B.t &&
	test_tick &&
	git commit --fixup B B.t &&
	write_script show.sh <<-\EOF &&
	subject="$(git show -s --format=%s HEAD)"
	content="$(git diff HEAD^ HEAD | tail -n 1)"
	echo "$subject: $content"
	EOF
	test_tick &&
	git rebase -ir --autosquash --exec ./show.sh A >actual &&
	grep "B: +Booh" actual &&
	grep "E: +Booh" actual &&
	grep "G: +G" actual

Switched to a new branch 'with-exec'
[with-exec 9c716d0] fixup! B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/25)
Rebasing (2/25)
Rebasing (3/25)
Rebasing (4/25)
Rebasing (5/25)

                                                                                
Executing: ./show.sh
Rebasing (6/25)
Rebasing (7/25)
Rebasing (8/25)
Rebasing (9/25)

                                                                                
Executing: ./show.sh
Rebasing (10/25)
Rebasing (11/25)
Rebasing (12/25)

                                                                                
Executing: ./show.sh
Rebasing (13/25)
Rebasing (14/25)

                                                                                
Executing: ./show.sh
Rebasing (15/25)
Rebasing (16/25)
Rebasing (17/25)
Rebasing (18/25)

                                                                                
Executing: ./show.sh
Rebasing (19/25)
Rebasing (20/25)

                                                                                
Executing: ./show.sh
Rebasing (21/25)
Rebasing (22/25)

                                                                                
Executing: ./show.sh

                                                                                
Successfully rebased and updated refs/heads/with-exec.
B: +Booh
E: +Booh
G: +G
ok 23 - with --autosquash and --exec

expecting success of 3430.24 '--continue after resolving conflicts after a merge': 
	git checkout -b already-has-g E &&
	git cherry-pick E..G &&
	test_commit H2 &&

	git checkout -b conflicts-in-merge H &&
	test_commit H2 H2.t conflicts H2-conflict &&
	test_must_fail git rebase -r already-has-g &&
	grep conflicts H2.t &&
	echo resolved >H2.t &&
	git add -u &&
	git rebase --continue &&
	test_must_fail git rev-parse --verify HEAD^2 &&
	test_path_is_missing .git/MERGE_HEAD

Switched to a new branch 'already-has-g'
[already-has-g 24dad35] F
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[already-has-g 2d3f054] G
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
[already-has-g 71891ff] H2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H2.t
Switched to a new branch 'conflicts-in-merge'
[conflicts-in-merge 6a8cc62] H2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H2.t
warning: skipped previously applied commit ca2c861
warning: skipped previously applied commit 088b00a
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/8)
Rebasing (2/8)
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)
Auto-merging H2.t
CONFLICT (add/add): Merge conflict in H2.t
error: could not apply 6a8cc62... H2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 6a8cc62... H2
conflicts
[detached HEAD 393eca8] H2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/conflicts-in-merge.
fatal: Needed a single revision
ok 24 - --continue after resolving conflicts after a merge

expecting success of 3430.25 '--rebase-merges with strategies': 
	git checkout -b with-a-strategy F &&
	test_tick &&
	git merge -m "Merge conflicting-G" conflicting-G &&

	: first, test with a merge strategy option &&
	git rebase -ir -Xtheirs G &&
	echo conflicting-G >expect &&
	test_cmp expect G.t &&

	: now, try with a merge strategy other than recursive &&
	git reset --hard @{1} &&
	write_script git-merge-override <<-\EOF &&
	echo overridden$1 >>G.t
	git add G.t
	EOF
	PATH="$PWD:$PATH" git rebase -ir -s override -Xxopt G &&
	test_write_lines G overridden--xopt >expect &&
	test_cmp expect G.t

Switched to a new branch 'with-a-strategy'
Merge made by the 'ort' strategy.
 G.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Rebasing (1/8)
Rebasing (2/8)
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)
Auto-merging G.t
Merge made by the 'ort' strategy.

                                                                                
Successfully rebased and updated refs/heads/with-a-strategy.
HEAD is now at 2045cf9 Merge conflicting-G
Rebasing (1/8)
Rebasing (2/8)
Rebasing (3/8)
Rebasing (4/8)
Rebasing (5/8)
Rebasing (6/8)
Merge made by the 'override' strategy.

                                                                                
Successfully rebased and updated refs/heads/with-a-strategy.
ok 25 - --rebase-merges with strategies

expecting success of 3430.26 '--rebase-merges with commit that can generate bad characters for filename': 
	git checkout -b colon-in-label E &&
	git merge -m "colon: this should work" G &&
	git rebase --rebase-merges --force-rebase E

Switched to a new branch 'colon-in-label'
Merge made by the 'ort' strategy.
 F.t | 1 +
 G.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 F.t
 create mode 100644 G.t
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/colon-in-label.
ok 26 - --rebase-merges with commit that can generate bad characters for filename

expecting success of 3430.27 '--rebase-merges with message matched with onto label': 
	git checkout -b onto-label E &&
	git merge -m onto G &&
	git rebase --rebase-merges --force-rebase E &&
	test_cmp_graph <<-\EOF
	*   onto
	|\
	| * G
	| * F
	* |   E
	|\ \
	| * | B
	* | | D
	| |/
	|/|
	* | C
	|/
	* A
	EOF

Switched to a new branch 'onto-label'
Merge made by the 'ort' strategy.
 F.t | 1 +
 G.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 F.t
 create mode 100644 G.t
Rebasing (1/9)
Rebasing (2/9)
Rebasing (3/9)
Rebasing (4/9)
Rebasing (5/9)
Rebasing (6/9)
Rebasing (7/9)

                                                                                
Successfully rebased and updated refs/heads/onto-label.
ok 27 - --rebase-merges with message matched with onto label

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3434-rebase-i18n.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3434-rebase-i18n/.git/
expecting success of 3434.1 'setup': 
	test_commit one &&
	git branch first &&
	test_commit two &&
	git switch first &&
	test_commit three &&
	git branch second &&
	test_commit four &&
	git switch second &&
	test_commit five &&
	test_commit six

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to branch 'first'
[first 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[first 6f2ec4d] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
Switched to branch 'second'
[second e2eded9] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
[second 666e62f] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 six.t
ok 1 - setup

expecting success of 3434.2 'rebase --rebase-merges update encoding eucJP to UTF-8': 
	git switch -c merge-eucJP-UTF-8 first &&
	git config i18n.commitencoding eucJP &&
	git merge -F "$TEST_DIRECTORY/t3434/eucJP.txt" second &&
	git config i18n.commitencoding UTF-8 &&
	git rebase --rebase-merges main &&
	compare_msg eucJP.txt eucJP UTF-8

Switched to a new branch 'merge-eucJP-UTF-8'
Merge made by the 'ort' strategy.
 five.t | 1 +
 six.t  | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 five.t
 create mode 100644 six.t
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/merge-eucJP-UTF-8.
ok 2 - rebase --rebase-merges update encoding eucJP to UTF-8

expecting success of 3434.3 'rebase --rebase-merges update encoding eucJP to ISO-2022-JP': 
	git switch -c merge-eucJP-ISO-2022-JP first &&
	git config i18n.commitencoding eucJP &&
	git merge -F "$TEST_DIRECTORY/t3434/eucJP.txt" second &&
	git config i18n.commitencoding ISO-2022-JP &&
	git rebase --rebase-merges main &&
	compare_msg eucJP.txt eucJP ISO-2022-JP

Switched to a new branch 'merge-eucJP-ISO-2022-JP'
Merge made by the 'ort' strategy.
 five.t | 1 +
 six.t  | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 five.t
 create mode 100644 six.t
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/merge-eucJP-ISO-2022-JP.
ok 3 - rebase --rebase-merges update encoding eucJP to ISO-2022-JP

expecting success of 3434.4 'rebase --continue update from ISO-8859-1 to UTF-8': 
		(git rebase --abort || : abort current git-rebase failure) &&
		git switch -c conflict-$old-$new one &&
		echo for-conflict >two.t &&
		git add two.t &&
		git config i18n.commitencoding $old &&
		git commit -F "$TEST_DIRECTORY/t3434/$msgfile" &&
		git config i18n.commitencoding $new &&
		test_must_fail git rebase -m main &&
		test -f .git/rebase-merge/message &&
		git stripspace <.git/rebase-merge/message >two.t &&
		git add two.t &&
		git rebase --continue &&
		compare_msg $msgfile $old $new &&
		: git-commit assume invalid utf-8 is latin1 &&
		test_cmp expect two.t
	
fatal: No rebase in progress?
Switched to a new branch 'conflict-ISO-8859-1-UTF-8'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Rebasing (1/1)
Auto-merging two.t
CONFLICT (add/add): Merge conflict in two.t
error: could not apply 7f6df7e... ÄËÑÏÖ
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 7f6df7e... ÄËÑÏÖ
[detached HEAD 2d1ef83] ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/conflict-ISO-8859-1-UTF-8.
ok 4 - rebase --continue update from ISO-8859-1 to UTF-8

expecting success of 3434.5 'rebase --continue update from eucJP to UTF-8': 
		(git rebase --abort || : abort current git-rebase failure) &&
		git switch -c conflict-$old-$new one &&
		echo for-conflict >two.t &&
		git add two.t &&
		git config i18n.commitencoding $old &&
		git commit -F "$TEST_DIRECTORY/t3434/$msgfile" &&
		git config i18n.commitencoding $new &&
		test_must_fail git rebase -m main &&
		test -f .git/rebase-merge/message &&
		git stripspace <.git/rebase-merge/message >two.t &&
		git add two.t &&
		git rebase --continue &&
		compare_msg $msgfile $old $new &&
		: git-commit assume invalid utf-8 is latin1 &&
		test_cmp expect two.t
	
fatal: No rebase in progress?
Switched to a new branch 'conflict-eucJP-UTF-8'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Rebasing (1/1)
Auto-merging two.t
CONFLICT (add/add): Merge conflict in two.t
error: could not apply 4850d3a... はれひほふ
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4850d3a... はれひほふ
[detached HEAD 52bcbd9] はれひほふ
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/conflict-eucJP-UTF-8.
ok 5 - rebase --continue update from eucJP to UTF-8

expecting success of 3434.6 'rebase --continue update from eucJP to ISO-2022-JP': 
		(git rebase --abort || : abort current git-rebase failure) &&
		git switch -c conflict-$old-$new one &&
		echo for-conflict >two.t &&
		git add two.t &&
		git config i18n.commitencoding $old &&
		git commit -F "$TEST_DIRECTORY/t3434/$msgfile" &&
		git config i18n.commitencoding $new &&
		test_must_fail git rebase -m main &&
		test -f .git/rebase-merge/message &&
		git stripspace <.git/rebase-merge/message >two.t &&
		git add two.t &&
		git rebase --continue &&
		compare_msg $msgfile $old $new &&
		: git-commit assume invalid utf-8 is latin1 &&
		test_cmp expect two.t
	
fatal: No rebase in progress?
Switched to a new branch 'conflict-eucJP-ISO-2022-JP'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Rebasing (1/1)
Auto-merging two.t
CONFLICT (add/add): Merge conflict in two.t
error: could not apply 4850d3a... ?$B$O$l$R$[$U?(B
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4850d3a... $B$O$l$R$[$U
[detached HEAD d0ef7c0] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/conflict-eucJP-ISO-2022-JP.
ok 6 - rebase --continue update from eucJP to ISO-2022-JP

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3436-rebase-more-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3436-rebase-more-options/.git/
expecting success of 3436.1 'setup': 
	git checkout -b topic &&
	test_write_lines "line 1" "	line 2" "line 3" >file &&
	git add file &&
	git commit -m "add file" &&

	test_write_lines "line 1" "new line 2" "line 3" >file &&
	git commit -am "update file" &&
	git tag side &&
	test_commit commit1 foo foo1 &&
	test_commit commit2 foo foo2 &&
	test_commit commit3 foo foo3 &&

	git checkout --orphan main &&
	rm foo &&
	test_write_lines "line 1" "        line 2" "line 3" >file &&
	git commit -am "add file" &&
	git tag main &&

	mkdir test-bin &&
	write_script test-bin/git-merge-test <<-\EOF
	exec git merge-recursive "$@"
	EOF

Switched to a new branch 'topic'
[topic (root-commit) c24e627] add file
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 file
[topic 139b464] update file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[topic 7c57c40] commit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[topic bd08fd4] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[topic eda6f49] commit3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'main'
[main (root-commit) 3ada4af] add file
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 file
ok 1 - setup

expecting success of 3436.2 '--ignore-whitespace works with apply backend': 
	test_must_fail git rebase --apply main side &&
	git rebase --abort &&
	git rebase --apply --ignore-whitespace main side &&
	git diff --exit-code side

warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
First, rewinding head to replay your work on top of it...
Applying: update file
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
3ada4af add file
virtual update file
found 1 common ancestor:
virtual cea075e2ce716201e60e4bbadc9a40706c56c362
Auto-merging file
CONFLICT (content): Merge conflict in file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 update file
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
First, rewinding head to replay your work on top of it...
Applying: update file
ok 2 - --ignore-whitespace works with apply backend

expecting success of 3436.3 '--ignore-whitespace works with merge backend': 
	test_must_fail git rebase --merge main side &&
	git rebase --abort &&
	git rebase --merge --ignore-whitespace main side &&
	git diff --exit-code side

warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
warning: skipped previously applied commit c24e627
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 139b464... update file
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 139b464... update file
warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
warning: skipped previously applied commit c24e627
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 3 - --ignore-whitespace works with merge backend

expecting success of 3436.4 '--ignore-whitespace is remembered when continuing': 
	(
		set_fake_editor &&
		FAKE_LINES="break 1" git rebase -i --ignore-whitespace \
			main side &&
		git rebase --continue
	) &&
	git diff --exit-code side

warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
warning: skipped previously applied commit c24e627
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
rebase -i script before editing:
pick 139b464 update file

rebase -i script after editing:
break
pick 139b464 update file
Rebasing (1/2)

                                                                                
Stopped at 3ada4af (add file)
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 4 - --ignore-whitespace is remembered when continuing

expecting success of 3436.5 '--committer-date-is-author-date works with apply backend': 
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	git rebase --apply --committer-date-is-author-date HEAD^ &&
	test_ctime_is_atime -1

[detached HEAD 6184e8b] update file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: update file
ok 5 - --committer-date-is-author-date works with apply backend

expecting success of 3436.6 '--committer-date-is-author-date works with merge backend': 
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	git rebase -m --committer-date-is-author-date HEAD^ &&
	test_ctime_is_atime -1

[detached HEAD 6184e8b] update file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is up to date, rebase forced.
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 6 - --committer-date-is-author-date works with merge backend

expecting success of 3436.7 '--committer-date-is-author-date works when rewording': 
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	(
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE=edited \
			FAKE_LINES="reword 1" \
			git rebase -i --committer-date-is-author-date HEAD^
	) &&
	test_write_lines edited "" >expect &&
	git log --format="%B" -1 >actual &&
	test_cmp expect actual &&
	test_ctime_is_atime -1

[detached HEAD 6184e8b] update file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick 6184e8b update file

rebase -i script after editing:
reword 6184e8b update file
Rebasing (1/1)
[detached HEAD 5c38296] edited
 Author: A U Thor <author@example.com>
 Date: Thu Jan 1 03:20:34 1970 +0300
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated detached HEAD.
ok 7 - --committer-date-is-author-date works when rewording

expecting success of 3436.8 '--committer-date-is-author-date works with rebase -r': 
	git checkout side &&
	GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 &&
	git rebase -r --root --committer-date-is-author-date &&
	test_ctime_is_atime

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  5c38296 edited

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5c38296

HEAD is now at 139b464 update file
Merge made by the 'ort' strategy.
 foo | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Rebasing (4/13)
Rebasing (5/13)
Rebasing (6/13)
Rebasing (7/13)
Rebasing (8/13)
Rebasing (9/13)
Rebasing (10/13)
Rebasing (11/13)

                                                                                
Successfully rebased and updated detached HEAD.
ok 8 - --committer-date-is-author-date works with rebase -r

expecting success of 3436.9 '--committer-date-is-author-date works when forking merge': 
	git checkout side &&
	GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 &&
	PATH="./test-bin:$PATH" git rebase -r --root --strategy=test \
					--committer-date-is-author-date &&
	test_ctime_is_atime

Warning: you are leaving 6 commits behind, not connected to
any of your branches:

  aa07736 Merge tag 'commit3' into HEAD
  54193eb commit3
  a2d9c2e commit2
  8251e18 commit1
 ... and 2 more.

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> aa07736

HEAD is now at 139b464 update file
Merge made by the 'ort' strategy.
 foo | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Merging 2a85097a58eecaad11df374857a87fbc0e47e389 with c24e62700f83d7b12297f45d1ce1e9689ebb2b1f
Merging:
2a85097 c24e627 add file
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Rebasing (4/13)
Merging eaa553d7eb7c0d13b95960e348a77332601bbc3e with 139b46443e355afd5f438ac2849d41f3a53b8c77
Merging:
eaa553d add file
139b464 update file
found 1 common ancestor:
c24e627 add file
Rebasing (5/13)
Rebasing (6/13)
Merging 34dfd6c233143884ddd9180be88112657b590d86 with 7c57c40ccd2483ccea76831595c0e232d40560c7
Merging:
34dfd6c update file
7c57c40 commit1
found 1 common ancestor:
139b464 update file
Rebasing (7/13)
Merging 8251e18d67ff84cb7aa93676b4cb93be15ef6810 with bd08fd48eeadc218177587a9f467f39ac4b51d49
Merging:
8251e18 commit1
bd08fd4 commit2
found 1 common ancestor:
7c57c40 commit1
Rebasing (8/13)
Merging a2d9c2ebb6808fff81a49a500b865fbf8f4fcbf5 with eda6f49c7ee63a956ad612b98a03b92c19face55
Merging:
a2d9c2e commit2
eda6f49 commit3
found 1 common ancestor:
bd08fd4 commit2
Rebasing (9/13)
Rebasing (10/13)
Rebasing (11/13)
Merging HEAD with 54193ebc0e463528ab8c3f723f89752960c98304
Merging:
34dfd6c update file
54193eb commit3
found 1 common ancestor:
34dfd6c update file
Merge made by the 'test' strategy.

                                                                                
Successfully rebased and updated detached HEAD.
ok 9 - --committer-date-is-author-date works when forking merge

expecting success of 3436.10 '--committer-date-is-author-date works when committing conflict resolution': 
	git checkout commit2 &&
	GIT_AUTHOR_DATE="@1980 +0000" git commit --amend --only --reset-author &&
	test_must_fail git rebase -m --committer-date-is-author-date \
		--onto HEAD^^ HEAD^ &&
	echo resolved > foo &&
	git add foo &&
	git rebase --continue &&
	test_ctime_is_atime -1

Warning: you are leaving 6 commits behind, not connected to
any of your branches:

  aa07736 Merge tag 'commit3' into HEAD
  54193eb commit3
  a2d9c2e commit2
  8251e18 commit1
 ... and 2 more.

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> aa07736

HEAD is now at bd08fd4 commit2
[detached HEAD 832d950] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/1)
CONFLICT (modify/delete): foo deleted in HEAD and modified in 832d950 (commit2).  Version 832d950 (commit2) of foo left in tree.
error: could not apply 832d950... commit2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 832d950... commit2
[detached HEAD 3bf7cf9] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo

                                                                                
Successfully rebased and updated detached HEAD.
ok 10 - --committer-date-is-author-date works when committing conflict resolution

expecting success of 3436.11 '--reset-author-date works with apply backend': 
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --apply --reset-author-date HEAD^ &&
	test_atime_is_ignored -1

[detached HEAD 70e7180] commit2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 foo
HEAD is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: commit2
ok 11 - --reset-author-date works with apply backend

expecting success of 3436.12 '--reset-author-date works with merge backend': 
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --reset-author-date -m HEAD^ &&
	test_atime_is_ignored -1

[detached HEAD 70e7180] commit2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 foo
HEAD is up to date, rebase forced.
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 12 - --reset-author-date works with merge backend

expecting success of 3436.13 '--reset-author-date works after conflict resolution': 
	test_must_fail git rebase --reset-author-date -m \
		--onto commit2^^ commit2^ commit2 &&
	echo resolved >foo &&
	git add foo &&
	git rebase --continue &&
	test_atime_is_ignored -1

Rebasing (1/1)
CONFLICT (modify/delete): foo deleted in HEAD and modified in bd08fd4 (commit2).  Version bd08fd4 (commit2) of foo left in tree.
error: could not apply bd08fd4... commit2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply bd08fd4... commit2
[detached HEAD 945f08d] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo

                                                                                
Successfully rebased and updated detached HEAD.
ok 13 - --reset-author-date works after conflict resolution

expecting success of 3436.14 '--reset-author-date works with rebase -r': 
	git checkout side &&
	git merge --no-ff commit3 &&
	git rebase -r --root --reset-author-date &&
	test_atime_is_ignored

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  945f08d commit2

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 945f08d

HEAD is now at 139b464 update file
Merge made by the 'ort' strategy.
 foo | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Rebasing (1/13)
Rebasing (2/13)
Rebasing (3/13)
Rebasing (4/13)
Rebasing (5/13)
Rebasing (6/13)
Rebasing (7/13)
Rebasing (8/13)
Rebasing (9/13)
Rebasing (10/13)
Rebasing (11/13)

                                                                                
Successfully rebased and updated detached HEAD.
ok 14 - --reset-author-date works with rebase -r

expecting success of 3436.15 '--reset-author-date with --committer-date-is-author-date works': 
	test_must_fail git rebase -m --committer-date-is-author-date \
		--reset-author-date --onto commit2^^ commit2^ commit3 &&
	git checkout --theirs foo &&
	git add foo &&
	git rebase --continue &&
	test_ctime_is_atime -2 &&
	test_atime_is_ignored -2

Rebasing (1/2)
CONFLICT (modify/delete): foo deleted in HEAD and modified in bd08fd4 (commit2).  Version bd08fd4 (commit2) of foo left in tree.
error: could not apply bd08fd4... commit2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply bd08fd4... commit2
Updated 1 path from the index
[detached HEAD adf067f] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
ok 15 - --reset-author-date with --committer-date-is-author-date works

expecting success of 3436.16 'reset-author-date with --committer-date-is-author-date works when rewording': 
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	(
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE=edited \
			FAKE_LINES="reword 1" \
			git rebase -i --committer-date-is-author-date \
				--reset-author-date HEAD^
	) &&
	test_write_lines edited "" >expect &&
	git log --format="%B" -1 >actual &&
	test_cmp expect actual &&
	test_atime_is_ignored -1

[detached HEAD 469c296] commit3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick 469c296 commit3

rebase -i script after editing:
reword 469c296 commit3
Rebasing (1/1)
[detached HEAD 5b79a0c] edited
 Author: A U Thor <author@example.com>
 Date: Wed Dec 28 07:41:17 2022 +0000
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated detached HEAD.
ok 16 - reset-author-date with --committer-date-is-author-date works when rewording

expecting success of 3436.17 '--reset-author-date --committer-date-is-author-date works when forking merge': 
	GIT_SEQUENCE_EDITOR="echo \"merge -C $(git rev-parse HEAD) commit3\">" \
		PATH="./test-bin:$PATH" git rebase -i --strategy=test \
				--reset-author-date \
				--committer-date-is-author-date side side &&
	test_ctime_is_atime -1 &&
	test_atime_is_ignored -1
 
Rebasing (1/1)
Merging HEAD with eda6f49c7ee63a956ad612b98a03b92c19face55
Merging:
139b464 update file
eda6f49 commit3
found 1 common ancestor:
139b464 update file
Merge made by the 'test' strategy.

                                                                                
Successfully rebased and updated detached HEAD.
ok 17 - --reset-author-date --committer-date-is-author-date works when forking merge

expecting success of 3436.18 '--ignore-date is an alias for --reset-author-date': 
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --apply --ignore-date HEAD^ &&
	git commit --allow-empty -m empty --date="$GIT_AUTHOR_DATE" &&
	git rebase -m --ignore-date HEAD^ &&
	test_atime_is_ignored -2

[detached HEAD 09e9cd3] edited
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
First, rewinding head to replay your work on top of it...
Applying: commit1
Applying: commit2
Applying: commit3
[detached HEAD bd39a0a] empty
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
HEAD is up to date, rebase forced.
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
ok 18 - --ignore-date is an alias for --reset-author-date

expecting success of 3436.19 '$EDITOR and friends are unchanged': 
	test_editor_unchanged

ok 19 - $EDITOR and friends are unchanged

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3435-rebase-gpg-sign.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3435-rebase-gpg-sign/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t3435-rebase-gpg-sign/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t3435-rebase-gpg-sign/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 3435.1 'setup': 
	test_commit one &&
	test_commit two &&
	test_must_fail git verify-commit HEAD &&
	test_must_fail git verify-commit HEAD^

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - setup

expecting success of 3435.2 'setup: merge commit': 
	test_commit fork-point &&
	git switch -c side &&
	test_commit three &&
	git switch main &&
	git merge --no-ff side &&
	git tag merged

[main c5321ad] fork-point
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fork-point.t
Switched to a new branch 'side'
[side cb830c0] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 three.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 2 - setup: merge commit

expecting success of 3435.3 'rebase  with commit.gpgsign=false won't sign commit': 
		git reset two &&
		git config commit.gpgsign false &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root  &&
		test_must_fail git verify-commit HEAD^ &&
		test_must_fail git verify-commit HEAD
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 3 - rebase  with commit.gpgsign=false won't sign commit

expecting success of 3435.4 'rebase  with commit.gpgsign=true will sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root  &&
		 git verify-commit HEAD^ &&
		 git verify-commit HEAD
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:09 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:41:09 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 4 - rebase  with commit.gpgsign=true will sign commit

expecting success of 3435.5 'rebase --no-gpg-sign with commit.gpgsign=true won't sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root --no-gpg-sign &&
		test_must_fail git verify-commit HEAD^ &&
		test_must_fail git verify-commit HEAD
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 5 - rebase --no-gpg-sign with commit.gpgsign=true won't sign commit

expecting success of 3435.6 'rebase --gpg-sign --no-gpg-sign with commit.gpgsign=true won't sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root --gpg-sign --no-gpg-sign &&
		test_must_fail git verify-commit HEAD^ &&
		test_must_fail git verify-commit HEAD
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 6 - rebase --gpg-sign --no-gpg-sign with commit.gpgsign=true won't sign commit

expecting success of 3435.7 'rebase --no-gpg-sign --gpg-sign with commit.gpgsign=false will sign commit': 
		git reset two &&
		git config commit.gpgsign false &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root --no-gpg-sign --gpg-sign &&
		 git verify-commit HEAD^ &&
		 git verify-commit HEAD
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:10 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:41:11 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 7 - rebase --no-gpg-sign --gpg-sign with commit.gpgsign=false will sign commit

expecting success of 3435.8 'rebase -i with commit.gpgsign=true will sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root -i &&
		 git verify-commit HEAD^ &&
		 git verify-commit HEAD
	
rebase -i script before editing:
pick d79ce16 one
pick 139b20d two

rebase -i script after editing:
r d79ce16 one
p 139b20d two
Rebasing (1/2)
[detached HEAD 6ec93fb] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:11 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:41:11 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 8 - rebase -i with commit.gpgsign=true will sign commit

expecting success of 3435.9 'rebase -i --no-gpg-sign with commit.gpgsign=true won't sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root -i --no-gpg-sign &&
		test_must_fail git verify-commit HEAD^ &&
		test_must_fail git verify-commit HEAD
	
rebase -i script before editing:
pick d79ce16 one
pick 139b20d two

rebase -i script after editing:
r d79ce16 one
p 139b20d two
Rebasing (1/2)
[detached HEAD 94ecfb8] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 9 - rebase -i --no-gpg-sign with commit.gpgsign=true won't sign commit

expecting success of 3435.10 'rebase -i --gpg-sign --no-gpg-sign with commit.gpgsign=true won't sign commit': 
		git reset two &&
		git config commit.gpgsign true &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root -i --gpg-sign --no-gpg-sign &&
		test_must_fail git verify-commit HEAD^ &&
		test_must_fail git verify-commit HEAD
	
rebase -i script before editing:
pick d79ce16 one
pick 139b20d two

rebase -i script after editing:
r d79ce16 one
p 139b20d two
Rebasing (1/2)
[detached HEAD 94ecfb8] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 10 - rebase -i --gpg-sign --no-gpg-sign with commit.gpgsign=true won't sign commit

expecting success of 3435.11 'rebase -i --no-gpg-sign --gpg-sign with commit.gpgsign=false will sign commit': 
		git reset two &&
		git config commit.gpgsign false &&
		set_fake_editor &&
		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root -i --no-gpg-sign --gpg-sign &&
		 git verify-commit HEAD^ &&
		 git verify-commit HEAD
	
rebase -i script before editing:
pick d79ce16 one
pick 139b20d two

rebase -i script after editing:
r d79ce16 one
p 139b20d two
Rebasing (1/2)
[detached HEAD 5746f9d] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:13 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:41:13 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 11 - rebase -i --no-gpg-sign --gpg-sign with commit.gpgsign=false will sign commit

expecting success of 3435.12 'rebase -r, merge strategy, --gpg-sign will sign commit': 
	git reset --hard merged &&
	test_unconfig commit.gpgsign &&
	git rebase -fr --gpg-sign -s resolve --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Trying simple merge.
Rebasing (4/12)
Trying simple merge.
Rebasing (5/12)
Trying simple merge.
Rebasing (6/12)
Rebasing (7/12)
Trying simple merge.
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)
Trying really trivial in-index merge...
Wonderful.
In-index merge

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:15 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 12 - rebase -r, merge strategy, --gpg-sign will sign commit

expecting success of 3435.13 'rebase -r, merge strategy, commit.gpgsign=true will sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign true &&
	git rebase -fr -s resolve --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Trying simple merge.
Rebasing (4/12)
Trying simple merge.
Rebasing (5/12)
Trying simple merge.
Rebasing (6/12)
Rebasing (7/12)
Trying simple merge.
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)
Trying really trivial in-index merge...
Wonderful.
In-index merge

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:17 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 13 - rebase -r, merge strategy, commit.gpgsign=true will sign commit

expecting success of 3435.14 'rebase -r, merge strategy, commit.gpgsign=false --gpg-sign will sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign false &&
	git rebase -fr --gpg-sign -s resolve --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Trying simple merge.
Rebasing (4/12)
Trying simple merge.
Rebasing (5/12)
Trying simple merge.
Rebasing (6/12)
Rebasing (7/12)
Trying simple merge.
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)
Trying really trivial in-index merge...
Wonderful.
In-index merge

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:19 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 14 - rebase -r, merge strategy, commit.gpgsign=false --gpg-sign will sign commit

expecting success of 3435.15 'rebase -r, merge strategy, commit.gpgsign=true --no-gpg-sign won't sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign true &&
	git rebase -fr --no-gpg-sign -s resolve --root &&
	test_must_fail git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Trying simple merge.
Rebasing (4/12)
Trying simple merge.
Rebasing (5/12)
Trying simple merge.
Rebasing (6/12)
Rebasing (7/12)
Trying simple merge.
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)
Trying really trivial in-index merge...
Wonderful.
In-index merge

                                                                                
Successfully rebased and updated refs/heads/main.
ok 15 - rebase -r, merge strategy, commit.gpgsign=true --no-gpg-sign won't sign commit

expecting success of 3435.16 'rebase -r --gpg-sign will sign commit': 
	git reset --hard merged &&
	test_unconfig commit.gpgsign &&
	git rebase -fr --gpg-sign --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:21 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 16 - rebase -r --gpg-sign will sign commit

expecting success of 3435.17 'rebase -r with commit.gpgsign=true will sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign true &&
	git rebase -fr --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:22 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 17 - rebase -r with commit.gpgsign=true will sign commit

expecting success of 3435.18 'rebase -r --gpg-sign with commit.gpgsign=false will sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign false &&
	git rebase -fr --gpg-sign --root &&
	git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/main.
gpg: Signature made Wed Dec 28 07:41:23 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 18 - rebase -r --gpg-sign with commit.gpgsign=false will sign commit

expecting success of 3435.19 'rebase -r --no-gpg-sign with commit.gpgsign=true won't sign commit': 
	git reset --hard merged &&
	git config commit.gpgsign true &&
	git rebase -fr --no-gpg-sign --root &&
	test_must_fail git verify-commit HEAD

HEAD is now at 6a9f02a Merge branch 'side'
Rebasing (1/12)
Rebasing (2/12)
Rebasing (3/12)
Rebasing (4/12)
Rebasing (5/12)
Rebasing (6/12)
Rebasing (7/12)
Rebasing (8/12)
Rebasing (9/12)
Rebasing (10/12)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 19 - rebase -r --no-gpg-sign with commit.gpgsign=true won't sign commit

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3438-rebase-broken-files.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3438-rebase-broken-files/.git/
expecting success of 3438.1 'set up conflicting branches': 
	test_commit base file &&
	git checkout -b branch1 &&
	test_commit one file &&
	git checkout -b branch2 HEAD^ &&
	test_commit two file

[master (root-commit) 215235d] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'branch1'
[branch1 92a1cb8] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch2'
[branch2 638f6ad] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - set up conflicting branches

expecting success of 3438.2 'detect missing GIT_AUTHOR_NAME': 
		create_conflict &&

		grep -v $item .git/rebase-merge/author-script >tmp &&
		mv tmp .git/rebase-merge/author-script &&

		check_resolve_fails
	
Switched to a new branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: missing 'GIT_AUTHOR_NAME'
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 2 - detect missing GIT_AUTHOR_NAME

expecting success of 3438.3 'detect missing GIT_AUTHOR_EMAIL': 
		create_conflict &&

		grep -v $item .git/rebase-merge/author-script >tmp &&
		mv tmp .git/rebase-merge/author-script &&

		check_resolve_fails
	
Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: missing 'GIT_AUTHOR_EMAIL'
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 3 - detect missing GIT_AUTHOR_EMAIL

expecting success of 3438.4 'detect missing GIT_AUTHOR_DATE': 
		create_conflict &&

		grep -v $item .git/rebase-merge/author-script >tmp &&
		mv tmp .git/rebase-merge/author-script &&

		check_resolve_fails
	
Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: missing 'GIT_AUTHOR_DATE'
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 4 - detect missing GIT_AUTHOR_DATE

expecting success of 3438.5 'detect duplicate GIT_AUTHOR_NAME': 
		create_conflict &&

		grep -i $item .git/rebase-merge/author-script >tmp &&
		cat tmp >>.git/rebase-merge/author-script &&

		check_resolve_fails
	
Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: 'GIT_AUTHOR_NAME' already given
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 5 - detect duplicate GIT_AUTHOR_NAME

expecting success of 3438.6 'detect duplicate GIT_AUTHOR_EMAIL': 
		create_conflict &&

		grep -i $item .git/rebase-merge/author-script >tmp &&
		cat tmp >>.git/rebase-merge/author-script &&

		check_resolve_fails
	
Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: 'GIT_AUTHOR_EMAIL' already given
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 6 - detect duplicate GIT_AUTHOR_EMAIL

expecting success of 3438.7 'detect duplicate GIT_AUTHOR_DATE': 
		create_conflict &&

		grep -i $item .git/rebase-merge/author-script >tmp &&
		cat tmp >>.git/rebase-merge/author-script &&

		check_resolve_fails
	
Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: 'GIT_AUTHOR_DATE' already given
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 7 - detect duplicate GIT_AUTHOR_DATE

expecting success of 3438.8 'unknown key in author-script': 
	create_conflict &&

	echo "GIT_AUTHOR_BOGUS=${SQ}whatever${SQ}" \
		>>.git/rebase-merge/author-script &&

	check_resolve_fails

Reset branch 'tmp'
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 638f6ad... two
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 638f6ad... two
error: unknown variable 'GIT_AUTHOR_BOGUS'
error: you have staged changes in your working tree
If these changes are meant to be squashed into the previous commit, run:

  git commit --amend 

If they are meant to go into a new commit, run:

  git commit 

In both cases, once you're done, continue with:

  git rebase --continue

error: could not commit staged changes.
ok 8 - unknown key in author-script

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3437-rebase-fixup-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3437-rebase-fixup-options/.git/
expecting success of 3437.1 'setup': 
	cat >message <<-EOF &&
	amend! B
	$EMPTY
	new subject
	$EMPTY
	new
	body
	EOF

	test_commit A A &&
	test_commit B B &&
	get_author HEAD >expected-author &&
	ORIG_AUTHOR_NAME="$GIT_AUTHOR_NAME" &&
	ORIG_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" &&
	GIT_AUTHOR_NAME="Amend Author" &&
	GIT_AUTHOR_EMAIL="amend@example.com" &&
	test_commit "$(cat message)" A A1 A1 &&
	test_commit A2 A &&
	test_commit A3 A &&
	GIT_AUTHOR_NAME="$ORIG_AUTHOR_NAME" &&
	GIT_AUTHOR_EMAIL="$ORIG_AUTHOR_EMAIL" &&
	git checkout -b conflicts-branch A &&
	test_commit conflicts A &&

	set_fake_editor &&
	git checkout -b branch B &&
	echo B1 >B &&
	test_tick &&
	git commit --fixup=HEAD -a &&
	git tag B1 &&
	test_tick &&
	FAKE_COMMIT_AMEND="edited 1" git commit --fixup=reword:B &&
	test_tick &&
	FAKE_COMMIT_AMEND="edited 2" git commit --fixup=reword:HEAD &&
	echo B2 >B &&
	test_tick &&
	FAKE_COMMIT_AMEND="edited squash" git commit --squash=HEAD -a &&
	git tag B2 &&
	echo B3 >B &&
	test_tick &&
	FAKE_COMMIT_AMEND="edited 3" git commit -a --fixup=amend:HEAD^ &&
	git tag B3 &&

	GIT_AUTHOR_NAME="Rebase Author" &&
	GIT_AUTHOR_EMAIL="rebase.author@example.com" &&
	GIT_COMMITTER_NAME="Rebase Committer" &&
	GIT_COMMITTER_EMAIL="rebase.committer@example.com"

[master (root-commit) fe77af8] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
[master b475dff] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B
[master 8b4b61c] amend! B
 Author: Amend Author <amend@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 0449f76] A2
 Author: Amend Author <amend@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 43d13b1] A3
 Author: Amend Author <amend@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'conflicts-branch'
[conflicts-branch 5486fab] conflicts
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch'
[branch b26476e] fixup! B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[branch e63d187] amend! B
 Author: A U Thor <author@example.com>
[branch fa07b2d] amend! amend! B
 Author: A U Thor <author@example.com>
[branch 7bbbf51] squash! amend! amend! B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[branch cb2fa71] amend! amend! amend! B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3437.2 'simple fixup -C works': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A2 &&
	FAKE_LINES="1 fixup_-C 2" git rebase -i B &&
	test_cmp_rev HEAD^ B &&
	test_cmp_rev HEAD^{tree} A2^{tree} &&
	test_commit_message HEAD -m "A2"

HEAD is now at 0449f76 A2
rebase -i script before editing:
pick 8b4b61c amend! B
pick 0449f76 A2

rebase -i script after editing:
pick 8b4b61c amend! B
fixup -C 0449f76 A2
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 2 - simple fixup -C works

expecting success of 3437.3 'simple fixup -c works': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A2 &&
	git log -1 --pretty=format:%B >expected-fixup-message &&
	test_write_lines "" "Modified A2" >>expected-fixup-message &&
	FAKE_LINES="1 fixup_-c 2" \
		FAKE_COMMIT_AMEND="Modified A2" \
		git rebase -i B &&
	test_cmp_rev HEAD^ B &&
	test_cmp_rev HEAD^{tree} A2^{tree} &&
	test_commit_message HEAD expected-fixup-message

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  14d3d88 A2

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 14d3d88

HEAD is now at 0449f76 A2
rebase -i script before editing:
pick 8b4b61c amend! B
pick 0449f76 A2

rebase -i script after editing:
pick 8b4b61c amend! B
fixup -c 0449f76 A2
Rebasing (2/2)
[detached HEAD 52685d6] A2
 Author: Amend Author <amend@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 3 - simple fixup -c works

expecting success of 3437.4 'fixup -C removes amend! from message': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A1 &&
	git log -1 --pretty=format:%b >expected-message &&
	FAKE_LINES="1 fixup_-C 2" git rebase -i A &&
	test_cmp_rev HEAD^ A &&
	test_cmp_rev HEAD^{tree} A1^{tree} &&
	test_commit_message HEAD expected-message &&
	get_author HEAD >actual-author &&
	test_cmp expected-author actual-author

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  52685d6 A2

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 52685d6

HEAD is now at 8b4b61c amend! B
rebase -i script before editing:
pick b475dff B
pick 8b4b61c amend! B

rebase -i script after editing:
pick b475dff B
fixup -C 8b4b61c amend! B
Rebasing (2/2)

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 4 - fixup -C removes amend! from message

expecting success of 3437.5 'fixup -C with conflicts gives correct message': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A1 &&
	git log -1 --pretty=format:%b >expected-message &&
	test_write_lines "" "edited" >>expected-message &&
	test_must_fail env FAKE_LINES="1 fixup_-C 2" git rebase -i conflicts &&
	git checkout --theirs -- A &&
	git add A &&
	FAKE_COMMIT_AMEND=edited git rebase --continue &&
	test_cmp_rev HEAD^ conflicts &&
	test_cmp_rev HEAD^{tree} A1^{tree} &&
	test_commit_message HEAD expected-message &&
	get_author HEAD >actual-author &&
	test_cmp expected-author actual-author

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  4d725c1 new subject

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 4d725c1

HEAD is now at 8b4b61c amend! B
rebase -i script before editing:
pick b475dff B
pick 8b4b61c amend! B

rebase -i script after editing:
pick b475dff B
fixup -C 8b4b61c amend! B
Rebasing (1/2)
Rebasing (2/2)
Auto-merging A
CONFLICT (content): Merge conflict in A
error: could not apply 8b4b61c... amend! B
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 8b4b61c... amend! B
[detached HEAD ac7569b] new subject
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 B

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 5 - fixup -C with conflicts gives correct message

expecting success of 3437.6 'skipping fixup -C after fixup gives correct message': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A3 &&
	test_must_fail env FAKE_LINES="1 fixup 2 fixup_-C 4" git rebase -i A &&
	git reset --hard &&
	FAKE_COMMIT_AMEND=edited git rebase --continue &&
	test_commit_message HEAD -m "B"

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ac7569b new subject

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> ac7569b

HEAD is now at 43d13b1 A3
rebase -i script before editing:
pick b475dff B
pick 8b4b61c amend! B
pick 0449f76 A2
pick 43d13b1 A3

rebase -i script after editing:
pick b475dff B
fixup 8b4b61c amend! B
fixup -C 43d13b1 A3
Rebasing (2/3)
Rebasing (3/3)
Auto-merging A
CONFLICT (content): Merge conflict in A
error: could not apply 43d13b1... A3
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 43d13b1... A3
HEAD is now at 9a3fb84 # This is a combination of 2 commits. # This is the 1st commit message:

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 6 - skipping fixup -C after fixup gives correct message

expecting success of 3437.7 'sequence of fixup, fixup -C & squash --signoff works': 
	git checkout --detach B3 &&
	FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4 squash 5 fixup_-C 6" \
		FAKE_COMMIT_AMEND=squashed \
		FAKE_MESSAGE_COPY=actual-squash-message \
		git -c commit.status=false rebase -ik --signoff A &&
	git diff-tree --exit-code --patch HEAD B3 -- &&
	test_cmp_rev HEAD^ A &&
	test_cmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
		actual-squash-message

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  a45ffe2 B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> a45ffe2

HEAD is now at cb2fa71 amend! amend! amend! B
rebase -i script before editing:
pick b475dff B
pick b26476e fixup! B
pick e63d187 amend! B # empty
pick fa07b2d amend! amend! B # empty
pick 7bbbf51 squash! amend! amend! B
pick cb2fa71 amend! amend! amend! B

rebase -i script after editing:
pick b475dff B
fixup b26476e fixup! B
fixup -C e63d187 amend! B # empty
fixup -C fa07b2d amend! amend! B # empty
squash 7bbbf51 squash! amend! amend! B
fixup -C cb2fa71 amend! amend! amend! B
Rebasing (1/6)
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)
Rebasing (5/6)
Rebasing (6/6)
[detached HEAD 3a70cb6] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 B

                                                                                
Successfully rebased and updated detached HEAD.
ok 7 - sequence of fixup, fixup -C & squash --signoff works

expecting success of 3437.8 'first fixup -C commented out in sequence fixup fixup -C fixup -C': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach B2~ &&
	git log -1 --pretty=format:%b >expected-message &&
	FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4" git rebase -i A &&
	test_cmp_rev HEAD^ A &&
	test_commit_message HEAD expected-message

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  3a70cb6 B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 3a70cb6

HEAD is now at fa07b2d amend! amend! B
rebase -i script before editing:
pick b475dff B
pick b26476e fixup! B
pick e63d187 amend! B # empty
pick fa07b2d amend! amend! B # empty

rebase -i script after editing:
pick b475dff B
fixup b26476e fixup! B
fixup -C e63d187 amend! B # empty
fixup -C fa07b2d amend! amend! B # empty
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 8 - first fixup -C commented out in sequence fixup fixup -C fixup -C

expecting success of 3437.9 'multiple fixup -c opens editor once': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A3 &&
	git log -1 --pretty=format:%B >expected-message &&
	test_write_lines "" "Modified-A3" >>expected-message &&
	FAKE_COMMIT_AMEND="Modified-A3" \
		FAKE_LINES="1 fixup_-C 2 fixup_-c 3 fixup_-c 4" \
		EXPECT_HEADER_COUNT=4 \
		git rebase -i A &&
	test_cmp_rev HEAD^ A &&
	get_author HEAD >actual-author &&
	test_cmp expected-author actual-author &&
	test_commit_message HEAD expected-message

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  21e5698 B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 21e5698

HEAD is now at 43d13b1 A3
rebase -i script before editing:
pick b475dff B
pick 8b4b61c amend! B
pick 0449f76 A2
pick 43d13b1 A3

rebase -i script after editing:
pick b475dff B
fixup -C 8b4b61c amend! B
fixup -c 0449f76 A2
fixup -c 43d13b1 A3
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD c0f1fd2] A3
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 B

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 9 - multiple fixup -c opens editor once

expecting success of 3437.10 'sequence squash, fixup & fixup -c gives combined message': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git checkout --detach A3 &&
	FAKE_LINES="1 squash 2 fixup 3 fixup_-c 4" \
		FAKE_MESSAGE_COPY=actual-combined-message \
		git -c commit.status=false rebase -i A &&
	test_cmp "$TEST_DIRECTORY/t3437/expected-combined-message" \
		actual-combined-message &&
	test_cmp_rev HEAD^ A

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c0f1fd2 A3

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> c0f1fd2

HEAD is now at 43d13b1 A3
rebase -i script before editing:
pick b475dff B
pick 8b4b61c amend! B
pick 0449f76 A2
pick 43d13b1 A3

rebase -i script after editing:
pick b475dff B
squash 8b4b61c amend! B
fixup 0449f76 A2
fixup -c 43d13b1 A3
Rebasing (2/4)
Rebasing (3/4)
Rebasing (4/4)
[detached HEAD 2900374] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 B

                                                                                
Successfully rebased and updated detached HEAD.
fatal: No rebase in progress?
ok 10 - sequence squash, fixup & fixup -c gives combined message

expecting success of 3437.11 'fixup -C works upon --autosquash with amend!': 
	git checkout --detach B3 &&
	FAKE_COMMIT_AMEND=squashed \
		FAKE_MESSAGE_COPY=actual-squash-message \
		git -c commit.status=false rebase -ik --autosquash \
						--signoff A &&
	git diff-tree --exit-code --patch HEAD B3 -- &&
	test_cmp_rev HEAD^ A &&
	test_cmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
		actual-squash-message

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2900374 B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2900374

HEAD is now at cb2fa71 amend! amend! amend! B
Rebasing (1/6)
Rebasing (2/6)
Rebasing (3/6)
Rebasing (4/6)
Rebasing (5/6)
Rebasing (6/6)
[detached HEAD 3a70cb6] B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 B

                                                                                
Successfully rebased and updated detached HEAD.
ok 11 - fixup -C works upon --autosquash with amend!

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3500-cherry.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3500-cherry/.git/
expecting success of 3500.1 'prepare repository with topic branch, and check cherry finds the 2 patches from there': echo First > A &&
     git update-index --add A &&
     test_tick &&
     git commit -m "Add A." &&

     git checkout -b my-topic-branch &&

     echo Second > B &&
     git update-index --add B &&
     test_tick &&
     git commit -m "Add B." &&

     echo AnotherSecond > C &&
     git update-index --add C &&
     test_tick &&
     git commit -m "Add C." &&

     git checkout -f main &&
     rm -f B C &&

     echo Third >> A &&
     git update-index A &&
     test_tick &&
     git commit -m "Modify A." &&

     expr "$(echo $(git cherry main my-topic-branch) )" : "+ [^ ]* + .*"

[main (root-commit) 4655d1a] Add A.
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+)
 create mode 100644 A
Switched to a new branch 'my-topic-branch'
[my-topic-branch 75dd694] Add B.
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+)
 create mode 100644 B
[my-topic-branch c8d60d2] Add C.
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+)
 create mode 100644 C
Switched to branch 'main'
[main 90cb8ed] Modify A.
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+)
85
ok 1 - prepare repository with topic branch, and check cherry finds the 2 patches from there

expecting success of 3500.2 'check that cherry with limit returns only the top patch': expr "$(echo $(git cherry main my-topic-branch my-topic-branch^1) )" : "+ [^ ]*"

42
ok 2 - check that cherry with limit returns only the top patch

expecting success of 3500.3 'cherry-pick one of the 2 patches, and check cherry recognized one and only one as new': git cherry-pick my-topic-branch^0 &&
     echo $(git cherry main my-topic-branch) &&
     expr "$(echo $(git cherry main my-topic-branch) )" : "+ [^ ]* - .*"

[main 3a1a38a] Add C.
 Author: A U Thor <bogus_email_address>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 C
+ 75dd694131e593dac8cf8ea0a377f1b73a80c1ad - c8d60d26f42936e7a055747f5412d41a6bce7d77
85
ok 3 - cherry-pick one of the 2 patches, and check cherry recognized one and only one as new

expecting success of 3500.4 'cherry ignores whitespace': 
	git switch --orphan=upstream-with-space &&
	test_commit initial file &&
	>expect &&
	git switch --create=feature-without-space &&

	# A spaceless file on the feature branch.  Expect a match upstream.
	printf space >file &&
	git add file &&
	git commit -m"file without space" &&
	git log --format="- %H" -1 >>expect &&

	# A further change.  Should not match upstream.
	test_commit change file &&
	git log --format="+ %H" -1 >>expect &&

	git switch upstream-with-space &&
	# Same as the spaceless file, just with spaces and on upstream.
	test_commit "file with space" file "s p a c e" file-with-space &&
	git cherry upstream-with-space feature-without-space >actual &&
	test_cmp expect actual

Switched to a new branch 'upstream-with-space'
[upstream-with-space (root-commit) 42825d6] initial
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'feature-without-space'
[feature-without-space 21e64a6] file without space
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+), 1 deletion(-)
[feature-without-space efc65e3] change
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'upstream-with-space'
[upstream-with-space 2ae2c61] file with space
 Author: A U Thor <bogus_email_address>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - cherry ignores whitespace

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3502-cherry-pick-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3502-cherry-pick-merge/.git/
expecting success of 3502.1 'setup': 

	>A &&
	>B &&
	git add A B &&
	git commit -m "Initial" &&
	git tag initial &&
	git branch side &&
	echo new line >A &&
	git commit -m "add line to A" A &&
	git tag a &&
	git checkout side &&
	echo new line >B &&
	git commit -m "add line to B" B &&
	git tag b &&
	git checkout main &&
	git merge side &&
	git tag c


[main (root-commit) 5c8827d] Initial
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 A
 create mode 100644 B
[main 6e41539] add line to A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'side'
[side 4fb21f2] add line to B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Merge made by the 'ort' strategy.
 B | 1 +
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3502.2 'cherry-pick -m complains of bogus numbers': 
	# expect 129 here to distinguish between cases where
	# there was nothing to cherry-pick
	test_expect_code 129 git cherry-pick -m &&
	test_expect_code 129 git cherry-pick -m foo b &&
	test_expect_code 129 git cherry-pick -m -1 b &&
	test_expect_code 129 git cherry-pick -m 0 b

error: switch `m' requires a value
error: option `mainline' expects a number greater than zero
error: option `mainline' expects a number greater than zero
error: option `mainline' expects a number greater than zero
ok 2 - cherry-pick -m complains of bogus numbers

expecting success of 3502.3 'cherry-pick explicit first parent of a non-merge': 

	git reset --hard &&
	git checkout a^0 &&
	git cherry-pick -m 1 b &&
	git diff --exit-code c --


HEAD is now at c81ef52 Merge branch 'side'
Note: switching to 'a^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6e41539 add line to A
[detached HEAD 99ce4f9] add line to B
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 3 - cherry-pick explicit first parent of a non-merge

expecting success of 3502.4 'cherry pick a merge without -m should fail': 

	git reset --hard &&
	git checkout a^0 &&
	test_must_fail git cherry-pick c &&
	git diff --exit-code a --


HEAD is now at 99ce4f9 add line to B
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  99ce4f9 add line to B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 99ce4f9

HEAD is now at 6e41539 add line to A
error: commit c81ef52706f2522fbbe43a852f8cf2995e7bd8a1 is a merge but no -m option was given.
fatal: cherry-pick failed
ok 4 - cherry pick a merge without -m should fail

expecting success of 3502.5 'cherry pick a merge (1)': 

	git reset --hard &&
	git checkout a^0 &&
	git cherry-pick -m 1 c &&
	git diff --exit-code c


HEAD is now at 6e41539 add line to A
HEAD is now at 6e41539 add line to A
[detached HEAD 9d31cba] Merge branch 'side'
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 5 - cherry pick a merge (1)

expecting success of 3502.6 'cherry pick a merge (2)': 

	git reset --hard &&
	git checkout b^0 &&
	git cherry-pick -m 2 c &&
	git diff --exit-code c


HEAD is now at 9d31cba Merge branch 'side'
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9d31cba Merge branch 'side'

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9d31cba

HEAD is now at 4fb21f2 add line to B
[detached HEAD 9554515] Merge branch 'side'
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 6 - cherry pick a merge (2)

expecting success of 3502.7 'cherry pick a merge relative to nonexistent parent should fail': 

	git reset --hard &&
	git checkout b^0 &&
	test_must_fail git cherry-pick -m 3 c


HEAD is now at 9554515 Merge branch 'side'
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9554515 Merge branch 'side'

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9554515

HEAD is now at 4fb21f2 add line to B
error: commit c81ef52706f2522fbbe43a852f8cf2995e7bd8a1 does not have parent 3
fatal: cherry-pick failed
ok 7 - cherry pick a merge relative to nonexistent parent should fail

expecting success of 3502.8 'revert explicit first parent of a non-merge': 

	git reset --hard &&
	git checkout c^0 &&
	git revert -m 1 b &&
	git diff --exit-code a --


HEAD is now at 4fb21f2 add line to B
Previous HEAD position was 4fb21f2 add line to B
HEAD is now at c81ef52 Merge branch 'side'
[detached HEAD 1b3e5cc] Revert "add line to B"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
ok 8 - revert explicit first parent of a non-merge

expecting success of 3502.9 'revert a merge without -m should fail': 

	git reset --hard &&
	git checkout c^0 &&
	test_must_fail git revert c &&
	git diff --exit-code c


HEAD is now at 1b3e5cc Revert "add line to B"
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  1b3e5cc Revert "add line to B"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 1b3e5cc

HEAD is now at c81ef52 Merge branch 'side'
error: commit c81ef52706f2522fbbe43a852f8cf2995e7bd8a1 is a merge but no -m option was given.
fatal: revert failed
ok 9 - revert a merge without -m should fail

expecting success of 3502.10 'revert a merge (1)': 

	git reset --hard &&
	git checkout c^0 &&
	git revert -m 1 c &&
	git diff --exit-code a --


HEAD is now at c81ef52 Merge branch 'side'
HEAD is now at c81ef52 Merge branch 'side'
[detached HEAD ab594ec] Revert "Merge branch 'side'"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
ok 10 - revert a merge (1)

expecting success of 3502.11 'revert a merge (2)': 

	git reset --hard &&
	git checkout c^0 &&
	git revert -m 2 c &&
	git diff --exit-code b --


HEAD is now at ab594ec Revert "Merge branch 'side'"
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ab594ec Revert "Merge branch 'side'"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> ab594ec

HEAD is now at c81ef52 Merge branch 'side'
[detached HEAD 3f41b61] Revert "Merge branch 'side'"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
ok 11 - revert a merge (2)

expecting success of 3502.12 'revert a merge relative to nonexistent parent should fail': 

	git reset --hard &&
	git checkout c^0 &&
	test_must_fail git revert -m 3 c &&
	git diff --exit-code c


HEAD is now at 3f41b61 Revert "Merge branch 'side'"
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  3f41b61 Revert "Merge branch 'side'"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 3f41b61

HEAD is now at c81ef52 Merge branch 'side'
error: commit c81ef52706f2522fbbe43a852f8cf2995e7bd8a1 does not have parent 3
fatal: revert failed
ok 12 - revert a merge relative to nonexistent parent should fail

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3501-revert-cherry-pick.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3501-revert-cherry-pick/.git/
expecting success of 3501.1 'setup': 

	for l in a b c d e f g h i j k l m n o
	do
		echo $l$l$l$l$l$l$l$l$l || return 1
	done >oops &&

	test_tick &&
	git add oops &&
	git commit -m initial &&
	git tag initial &&

	test_tick &&
	echo "Add extra line at the end" >>oops &&
	git commit -a -m added &&
	git tag added &&

	test_tick &&
	git mv oops spoo &&
	git commit -m rename1 &&
	git tag rename1 &&

	test_tick &&
	git checkout -b side initial &&
	git mv oops opos &&
	git commit -m rename2 &&
	git tag rename2

[main (root-commit) a242c62] initial
 Author: A U Thor <author@example.com>
 1 file changed, 15 insertions(+)
 create mode 100644 oops
[main 4399171] added
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 31df260] rename1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename oops => spoo (100%)
Switched to a new branch 'side'
[side f6d0551] rename2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename oops => opos (100%)
ok 1 - setup

expecting success of 3501.2 'cherry-pick --nonsense': 

	pos=$(git rev-parse HEAD) &&
	git diff --exit-code HEAD &&
	test_must_fail git cherry-pick --nonsense 2>msg &&
	git diff --exit-code HEAD "$pos" &&
	test_i18ngrep "[Uu]sage:" msg

usage: git cherry-pick [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff]
ok 2 - cherry-pick --nonsense

expecting success of 3501.3 'revert --nonsense': 

	pos=$(git rev-parse HEAD) &&
	git diff --exit-code HEAD &&
	test_must_fail git revert --nonsense 2>msg &&
	git diff --exit-code HEAD "$pos" &&
	test_i18ngrep "[Uu]sage:" msg

usage: git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>...
ok 3 - revert --nonsense

expecting success of 3501.4 'cherry-pick after renaming branch': 

	git checkout rename2 &&
	git cherry-pick added &&
	test_cmp_rev rename2 HEAD^ &&
	grep "Add extra line at the end" opos &&
	git reflog -1 | grep cherry-pick


Note: switching to 'rename2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f6d0551 rename2
[detached HEAD 2da2754] added
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
Add extra line at the end
2da2754 HEAD@{0}: cherry-pick: added
ok 4 - cherry-pick after renaming branch

expecting success of 3501.5 'revert after renaming branch': 

	git checkout rename1 &&
	git revert added &&
	test_cmp_rev rename1 HEAD^ &&
	test_path_is_file spoo &&
	test_cmp_rev initial:oops HEAD:spoo &&
	git reflog -1 | grep revert


Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2da2754 added

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2da2754

HEAD is now at 31df260 rename1
[detached HEAD 9990ddc] Revert "added"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
9990ddc HEAD@{0}: revert: Revert "added"
ok 5 - revert after renaming branch

expecting success of 3501.6 'cherry-pick on stat-dirty working tree': 
	git clone . copy &&
	(
		cd copy &&
		git checkout initial &&
		test-tool chmtime +40 oops &&
		git cherry-pick added
	)

Cloning into 'copy'...
done.
Note: switching to '9990ddca844ef3875d864da986dfd141d1a88865'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9990ddc Revert "added"

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9990ddc

HEAD is now at a242c62 initial
[detached HEAD 096ed54] added
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 6 - cherry-pick on stat-dirty working tree

expecting success of 3501.7 'revert forbidden on dirty working tree': 

	echo content >extra_file &&
	git add extra_file &&
	test_must_fail git revert HEAD 2>errors &&
	test_i18ngrep "your local changes would be overwritten by " errors


error: your local changes would be overwritten by revert.
ok 7 - revert forbidden on dirty working tree

expecting success of 3501.8 'cherry-pick on unborn branch': 
	git checkout --orphan unborn &&
	git rm --cached -r . &&
	rm -rf * &&
	git cherry-pick initial &&
	git diff --quiet initial &&
	test_cmp_rev ! initial HEAD

Switched to a new branch 'unborn'
A	extra_file
rm 'extra_file'
rm 'spoo'
[unborn 38e6d75] initial
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 15 insertions(+)
 create mode 100644 oops
ok 8 - cherry-pick on unborn branch

expecting success of 3501.9 'cherry-pick "-" to pick from previous branch': 
	git checkout unborn &&
	test_commit to-pick actual content &&
	git checkout main &&
	git cherry-pick - &&
	echo content >expect &&
	test_cmp expect actual

Already on 'unborn'
[unborn d9ba711] to-pick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 actual
Switched to branch 'main'
[main 7c68b81] to-pick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 actual
ok 9 - cherry-pick "-" to pick from previous branch

expecting success of 3501.10 'cherry-pick "-" is meaningless without checkout': 
	test_create_repo afresh &&
	(
		cd afresh &&
		test_commit one &&
		test_commit two &&
		test_commit three &&
		test_must_fail git cherry-pick -
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3501-revert-cherry-pick/afresh/.git/
[main (root-commit) 26cc6ba] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 776892e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 6c11eb3] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
fatal: bad revision '@{-1}'
ok 10 - cherry-pick "-" is meaningless without checkout

expecting success of 3501.11 'cherry-pick "-" works with arguments': 
	git checkout -b side-branch &&
	test_commit change actual change &&
	git checkout main &&
	git cherry-pick -s - &&
	echo "Signed-off-by: C O Mitter <committer@example.com>" >expect &&
	git cat-file commit HEAD | grep ^Signed-off-by: >signoff &&
	test_cmp expect signoff &&
	echo change >expect &&
	test_cmp expect actual

Switched to a new branch 'side-branch'
[side-branch 94f7852] change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main a524e05] change
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 11 - cherry-pick "-" works with arguments

expecting success of 3501.12 'cherry-pick works with dirty renamed file': 
	test_commit to-rename &&
	git checkout -b unrelated &&
	test_commit unrelated &&
	git checkout @{-1} &&
	git mv to-rename.t renamed &&
	test_tick &&
	git commit -m renamed &&
	echo modified >renamed &&
	git cherry-pick refs/heads/unrelated &&
	test $(git rev-parse :0:renamed) = $(git rev-parse HEAD~2:to-rename.t) &&
	grep -q "^modified$" renamed

[main 035700e] to-rename
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-rename.t
Switched to a new branch 'unrelated'
[unrelated ef4075f] unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated.t
Switched to branch 'main'
[main 356b685] renamed
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename to-rename.t => renamed (100%)
[main d1730b0] unrelated
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated.t
ok 12 - cherry-pick works with dirty renamed file

expecting success of 3501.13 'advice from failed revert': 
	test_when_finished "git reset --hard" &&
	test_commit --no-tag "add dream" dream dream &&
	dream_oid=$(git rev-parse --short HEAD) &&
	cat <<-EOF >expected &&
	error: could not revert $dream_oid... add dream
	hint: After resolving the conflicts, mark them with
	hint: "git add/rm <pathspec>", then run
	hint: "git revert --continue".
	hint: You can instead skip this commit with "git revert --skip".
	hint: To abort and get back to the state before "git revert",
	hint: run "git revert --abort".
	EOF
	test_commit --append --no-tag "double-add dream" dream dream &&
	test_must_fail git revert HEAD^ 2>actual &&
	test_cmp expected actual

[main 10ebfde] add dream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dream
[main 9bf0a53] double-add dream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
CONFLICT (modify/delete): dream deleted in parent of 10ebfde (add dream) and modified in HEAD.  Version HEAD of dream left in tree.
HEAD is now at 9bf0a53 double-add dream
ok 13 - advice from failed revert

expecting success of 3501.14 'identification of reverted commit (default)': 
	test_commit to-ident &&
	test_when_finished "git reset --hard to-ident" &&
	git checkout --detach to-ident &&
	git revert --no-edit HEAD &&
	git cat-file commit HEAD >actual.raw &&
	grep "^This reverts " actual.raw >actual &&
	echo "This reverts commit $(git rev-parse HEAD^)." >expect &&
	test_cmp expect actual

[main cf6fdeb] to-ident
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-ident.t
HEAD is now at cf6fdeb to-ident
[detached HEAD c920115] Revert "to-ident"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:24:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 to-ident.t
HEAD is now at cf6fdeb to-ident
ok 14 - identification of reverted commit (default)

expecting success of 3501.15 'identification of reverted commit (--reference)': 
	git checkout --detach to-ident &&
	git revert --reference --no-edit HEAD &&
	git cat-file commit HEAD >actual.raw &&
	grep "^This reverts " actual.raw >actual &&
	echo "This reverts commit $(git show -s --pretty=reference HEAD^)." >expect &&
	test_cmp expect actual

HEAD is now at cf6fdeb to-ident
[detached HEAD 7f489d3] # *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:24:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 to-ident.t
ok 15 - identification of reverted commit (--reference)

expecting success of 3501.16 'identification of reverted commit (revert.reference)': 
	git checkout --detach to-ident &&
	git -c revert.reference=true revert --no-edit HEAD &&
	git cat-file commit HEAD >actual.raw &&
	grep "^This reverts " actual.raw >actual &&
	echo "This reverts commit $(git show -s --pretty=reference HEAD^)." >expect &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7f489d3 # *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7f489d3

HEAD is now at cf6fdeb to-ident
M	actual
[detached HEAD 7f489d3] # *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:24:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 to-ident.t
ok 16 - identification of reverted commit (revert.reference)

expecting success of 3501.17 'cherry-pick is unaware of --reference (for now)': 
	test_when_finished "git reset --hard" &&
	test_must_fail git cherry-pick --reference HEAD 2>actual &&
	grep "^usage: git cherry-pick" actual

usage: git cherry-pick [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff]
HEAD is now at 7f489d3 # *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***
ok 17 - cherry-pick is unaware of --reference (for now)

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3503-cherry-pick-root.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3503-cherry-pick-root/.git/
expecting success of 3503.1 'setup': 

	echo first > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m "first" &&

	git symbolic-ref HEAD refs/heads/second &&
	rm .git/index file1 &&
	echo second > file2 &&
	git add file2 &&
	test_tick &&
	git commit -m "second" &&

	git symbolic-ref HEAD refs/heads/third &&
	rm .git/index file2 &&
	echo third > file3 &&
	git add file3 &&
	test_tick &&
	git commit -m "third"


[main (root-commit) 0c72e4f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[second (root-commit) bbcd39a] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[third (root-commit) 4911fa6] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 1 - setup

expecting success of 3503.2 'cherry-pick a root commit': 

	git checkout second^0 &&
	git cherry-pick main &&
	echo first >expect &&
	test_cmp expect file1


Note: switching to 'second^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bbcd39a second
[detached HEAD 3e6f574] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 2 - cherry-pick a root commit

expecting success of 3503.3 'revert a root commit': 

	git revert main &&
	test_path_is_missing file1


[detached HEAD 3eb7e0d] Revert "first"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 file1
ok 3 - revert a root commit

expecting success of 3503.4 'cherry-pick a root commit with an external strategy': 

	git cherry-pick --strategy=resolve main &&
	echo first >expect &&
	test_cmp expect file1


Trying simple merge.
[detached HEAD 54587e2] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 4 - cherry-pick a root commit with an external strategy

expecting success of 3503.5 'revert a root commit with an external strategy': 

	git revert --strategy=resolve main &&
	test_path_is_missing file1


Removing file1
[detached HEAD a457399] Revert "first"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 file1
ok 5 - revert a root commit with an external strategy

expecting success of 3503.6 'cherry-pick two root commits': 

	echo first >expect.file1 &&
	echo second >expect.file2 &&
	echo third >expect.file3 &&

	git checkout second^0 &&
	git cherry-pick main third &&

	test_cmp expect.file1 file1 &&
	test_cmp expect.file2 file2 &&
	test_cmp expect.file3 file3 &&
	git rev-parse --verify HEAD^^ &&
	test_must_fail git rev-parse --verify HEAD^^^


Warning: you are leaving 4 commits behind, not connected to
any of your branches:

  a457399 Revert "first"
  54587e2 first
  3eb7e0d Revert "first"
  3e6f574 first

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> a457399

HEAD is now at bbcd39a second
[detached HEAD 3e6f574] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[detached HEAD 2069bd1] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file3
bbcd39af5b7918b8e79c884f958eeddbace1fd46
fatal: Needed a single revision
ok 6 - cherry-pick two root commits

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3504-cherry-pick-rerere.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3504-cherry-pick-rerere/.git/
expecting success of 3504.1 'setup': 
	test_commit foo &&
	test_commit foo-main foo &&
	test_commit bar-main bar &&

	git checkout -b dev foo &&
	test_commit foo-dev foo &&
	test_commit bar-dev bar &&
	git config rerere.enabled true

[main (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[main b0605b8] foo-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main f55d303] bar-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'dev'
[dev 1d8ba7e] foo-dev
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[dev 5392a79] bar-dev
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
ok 1 - setup

expecting success of 3504.2 'conflicting merge': 
	test_must_fail git merge main

Auto-merging bar
CONFLICT (add/add): Merge conflict in bar
Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
Recorded preimage for 'bar'
Recorded preimage for 'foo'
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - conflicting merge

expecting success of 3504.3 'fixup': 
	echo foo-resolved >foo &&
	echo bar-resolved >bar &&
	git commit -am resolved &&
	cp foo foo-expect &&
	cp bar bar-expect &&
	git reset --hard HEAD^

Recorded resolution for 'bar'.
Recorded resolution for 'foo'.
[dev 85492e3] resolved
 Author: A U Thor <author@example.com>
HEAD is now at 5392a79 bar-dev
ok 3 - fixup

expecting success of 3504.4 'cherry-pick conflict with --rerere-autoupdate': 
	test_must_fail git cherry-pick --rerere-autoupdate foo..bar-main &&
	test_cmp foo-expect foo &&
	git diff-files --quiet &&
	test_must_fail git cherry-pick --continue &&
	test_cmp bar-expect bar &&
	git diff-files --quiet &&
	git cherry-pick --continue &&
	git reset --hard bar-dev

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'foo' using previous resolution.
[dev 41ff336] foo-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging bar
CONFLICT (add/add): Merge conflict in bar
error: could not apply f55d303... bar-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'bar' using previous resolution.
[dev c0de054] bar-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 5392a79 bar-dev
ok 4 - cherry-pick conflict with --rerere-autoupdate

expecting success of 3504.5 'cherry-pick conflict repsects rerere.autoUpdate': 
	test_config rerere.autoUpdate true &&
	test_must_fail git cherry-pick foo..bar-main &&
	test_cmp foo-expect foo &&
	git diff-files --quiet &&
	test_must_fail git cherry-pick --continue &&
	test_cmp bar-expect bar &&
	git diff-files --quiet &&
	git cherry-pick --continue &&
	git reset --hard bar-dev

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'foo' using previous resolution.
[dev 41ff336] foo-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging bar
CONFLICT (add/add): Merge conflict in bar
error: could not apply f55d303... bar-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'bar' using previous resolution.
[dev c0de054] bar-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 5392a79 bar-dev
ok 5 - cherry-pick conflict repsects rerere.autoUpdate

expecting success of 3504.6 'cherry-pick conflict with --no-rerere-autoupdate': 
	test_config rerere.autoUpdate true &&
	test_must_fail git cherry-pick --no-rerere-autoupdate foo..bar-main &&
	test_cmp foo-expect foo &&
	test_must_fail git diff-files --quiet &&
	git add foo &&
	test_must_fail git cherry-pick --continue &&
	test_cmp bar-expect bar &&
	test_must_fail git diff-files --quiet &&
	git add bar &&
	git cherry-pick --continue &&
	git reset --hard bar-dev

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Resolved 'foo' using previous resolution.
[dev 41ff336] foo-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging bar
CONFLICT (add/add): Merge conflict in bar
error: could not apply f55d303... bar-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Resolved 'bar' using previous resolution.
[dev c0de054] bar-main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 5392a79 bar-dev
ok 6 - cherry-pick conflict with --no-rerere-autoupdate

expecting success of 3504.7 'cherry-pick --continue rejects --rerere-autoupdate': 
	test_must_fail git cherry-pick --rerere-autoupdate foo..bar-main &&
	test_cmp foo-expect foo &&
	git diff-files --quiet &&
	test_must_fail git cherry-pick --continue --rerere-autoupdate >actual 2>&1 &&
	echo "fatal: cherry-pick: --rerere-autoupdate cannot be used with --continue" >expect &&
	test_cmp expect actual &&
	test_must_fail git cherry-pick --continue --no-rerere-autoupdate >actual 2>&1 &&
	echo "fatal: cherry-pick: --no-rerere-autoupdate cannot be used with --continue" >expect &&
	test_cmp expect actual &&
	git cherry-pick --abort

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'foo' using previous resolution.
ok 7 - cherry-pick --continue rejects --rerere-autoupdate

expecting success of 3504.8 'cherry-pick --rerere-autoupdate more than once': 
	test_must_fail git cherry-pick --rerere-autoupdate --rerere-autoupdate foo..bar-main &&
	test_cmp foo-expect foo &&
	git diff-files --quiet &&
	git cherry-pick --abort &&
	test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate foo..bar-main &&
	test_cmp foo-expect foo &&
	git diff-files --quiet &&
	git cherry-pick --abort &&
	test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate foo..bar-main &&
	test_must_fail git diff-files --quiet &&
	git cherry-pick --abort

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'foo' using previous resolution.
Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Staged 'foo' using previous resolution.
Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Resolved 'foo' using previous resolution.
ok 8 - cherry-pick --rerere-autoupdate more than once

expecting success of 3504.9 'cherry-pick conflict without rerere': 
	test_config rerere.enabled false &&
	test_must_fail git cherry-pick foo-main &&
	grep ===== foo &&
	grep foo-dev foo &&
	grep foo-main foo

Auto-merging foo
CONFLICT (add/add): Merge conflict in foo
error: could not apply b0605b8... foo-main
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
=======
foo-dev
foo-main
>>>>>>> b0605b8 (foo-main)
ok 9 - cherry-pick conflict without rerere

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3505-cherry-pick-empty.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3505-cherry-pick-empty/.git/
expecting success of 3505.1 'setup': 

	echo first > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m "first" &&

	git checkout -b empty-message-branch &&
	echo third >> file1 &&
	git add file1 &&
	test_tick &&
	git commit --allow-empty-message -m "" &&

	git checkout main &&
	git checkout -b empty-change-branch &&
	test_tick &&
	git commit --allow-empty -m "empty"


[main (root-commit) 0c72e4f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Switched to a new branch 'empty-message-branch'
[empty-message-branch d6aa1e8] 
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Switched to a new branch 'empty-change-branch'
[empty-change-branch 0f51a27] empty
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 3505.2 'cherry-pick an empty commit': 
	git checkout main &&
	test_expect_code 1 git cherry-pick empty-change-branch

Switched to branch 'main'
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
On branch main
You are currently cherry-picking commit 0f51a27.
  (all conflicts fixed: run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

nothing to commit, working tree clean
ok 2 - cherry-pick an empty commit

expecting success of 3505.3 'index lockfile was removed': 
	test ! -f .git/index.lock

ok 3 - index lockfile was removed

expecting success of 3505.4 'cherry-pick a commit with an empty message': 
	test_when_finished "git reset --hard empty-message-branch~1" &&
	git checkout main &&
	git cherry-pick empty-message-branch

Already on 'main'
warning: cancelling a cherry picking in progress
[main d800ed2] 
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
HEAD is now at 0c72e4f first
ok 4 - cherry-pick a commit with an empty message

expecting success of 3505.5 'index lockfile was removed': 
	test ! -f .git/index.lock

ok 5 - index lockfile was removed

expecting success of 3505.6 'cherry-pick a commit with an empty message with --allow-empty-message': 
	git checkout -f main &&
	git cherry-pick --allow-empty-message empty-message-branch

Already on 'main'
[main d800ed2] 
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 6 - cherry-pick a commit with an empty message with --allow-empty-message

expecting success of 3505.7 'cherry pick an empty non-ff commit without --allow-empty': 
	git checkout main &&
	echo fourth >>file2 &&
	git add file2 &&
	git commit -m "fourth" &&
	test_must_fail git cherry-pick empty-change-branch

Already on 'main'
[main 36c19c0] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
On branch main
You are currently cherry-picking commit 0f51a27.
  (all conflicts fixed: run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

nothing to commit, working tree clean
ok 7 - cherry pick an empty non-ff commit without --allow-empty

expecting success of 3505.8 'cherry pick an empty non-ff commit with --allow-empty': 
	git checkout main &&
	git cherry-pick --allow-empty empty-change-branch

Already on 'main'
warning: cancelling a cherry picking in progress
[main 72a973f] empty
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
ok 8 - cherry pick an empty non-ff commit with --allow-empty

expecting success of 3505.9 'cherry pick with --keep-redundant-commits': 
	git checkout main &&
	git cherry-pick --keep-redundant-commits HEAD^

Already on 'main'
[main 938d13f] fourth
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
ok 9 - cherry pick with --keep-redundant-commits

expecting success of 3505.10 'cherry-pick a commit that becomes no-op (prep)': 
	git checkout main &&
	git branch fork &&
	echo foo >file2 &&
	git add file2 &&
	test_tick &&
	git commit -m "add file2 on main" &&

	git checkout fork &&
	echo foo >file2 &&
	git add file2 &&
	test_tick &&
	git commit -m "add file2 on the side"

Already on 'main'
[main aa68455] add file2 on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'fork'
[fork 521fc70] add file2 on the side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 10 - cherry-pick a commit that becomes no-op (prep)

expecting success of 3505.11 'cherry-pick a no-op without --keep-redundant': 
	git reset --hard &&
	git checkout fork^0 &&
	test_must_fail git cherry-pick main

HEAD is now at 521fc70 add file2 on the side
Note: switching to 'fork^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 521fc70 add file2 on the side
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
HEAD detached at 521fc70
You are currently cherry-picking commit aa68455.
  (all conflicts fixed: run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

nothing to commit, working tree clean
ok 11 - cherry-pick a no-op without --keep-redundant

expecting success of 3505.12 'cherry-pick a no-op with --keep-redundant': 
	git reset --hard &&
	git checkout fork^0 &&
	git cherry-pick --keep-redundant-commits main &&
	git show -s --format=%s >actual &&
	echo "add file2 on main" >expect &&
	test_cmp expect actual

HEAD is now at 521fc70 add file2 on the side
HEAD is now at 521fc70 add file2 on the side
[detached HEAD ffffb2b] add file2 on main
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
ok 12 - cherry-pick a no-op with --keep-redundant

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3506-cherry-pick-ff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3506-cherry-pick-ff/.git/
expecting success of 3506.1 'setup': 
	echo first > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m "first" &&
	git tag first &&

	git checkout -b other &&
	echo second >> file1 &&
	git add file1 &&
	test_tick &&
	git commit -m "second" &&
	git tag second &&
	test_oid_cache <<-EOF
	cp_ff sha1:1df192cd8bc58a2b275d842cede4d221ad9000d1
	cp_ff sha256:e70d6b7fc064bddb516b8d512c9057094b96ce6ff08e12080acc4fe7f1d60a1d
	EOF

[main (root-commit) 0c72e4f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Switched to a new branch 'other'
[other 453a047] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3506.2 'cherry-pick using --ff fast forwards': 
	git checkout main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick --ff second &&
	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify second)"

Switched to branch 'main'
HEAD is now at 0c72e4f first
ok 2 - cherry-pick using --ff fast forwards

expecting success of 3506.3 'cherry-pick not using --ff does not fast forwards': 
	git checkout main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick second &&
	test "$(git rev-parse --verify HEAD)" != "$(git rev-parse --verify second)"

Already on 'main'
HEAD is now at 0c72e4f first
[main 43e4ff7] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 3 - cherry-pick not using --ff does not fast forwards

expecting success of 3506.4 'merge setup': 
	git checkout main &&
	git reset --hard first &&
	echo new line >A &&
	git add A &&
	test_tick &&
	git commit -m "add line to A" A &&
	git tag A &&
	git checkout -b side first &&
	echo new line >B &&
	git add B &&
	test_tick &&
	git commit -m "add line to B" B &&
	git tag B &&
	git checkout main &&
	git merge side &&
	git tag C &&
	git checkout -b new A

Already on 'main'
HEAD is now at 0c72e4f first
[main e3ca70e] add line to A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
Switched to a new branch 'side'
[side 5faaf2e] add line to B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B
Switched to branch 'main'
Merge made by the 'ort' strategy.
 B | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 B
Switched to a new branch 'new'
ok 4 - merge setup

expecting success of 3506.5 'cherry-pick explicit first parent of a non-merge with --ff': 
	git reset --hard A -- &&
	git cherry-pick --ff -m 1 B &&
	git diff --exit-code C --

HEAD is now at e3ca70e add line to A
[new d859d20] add line to B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 B
ok 5 - cherry-pick explicit first parent of a non-merge with --ff

expecting success of 3506.6 'cherry pick a merge with --ff but without -m should fail': 
	git reset --hard A -- &&
	test_must_fail git cherry-pick --ff C &&
	git diff --exit-code A --

HEAD is now at e3ca70e add line to A
error: commit 17345dd7218a0fc4dc087d5aacc6be7192e4fa2a is a merge but no -m option was given.
fatal: cherry-pick failed
ok 6 - cherry pick a merge with --ff but without -m should fail

expecting success of 3506.7 'cherry pick with --ff a merge (1)': 
	git reset --hard A -- &&
	git cherry-pick --ff -m 1 C &&
	git diff --exit-code C &&
	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify C)"

HEAD is now at e3ca70e add line to A
ok 7 - cherry pick with --ff a merge (1)

expecting success of 3506.8 'cherry pick with --ff a merge (2)': 
	git reset --hard B -- &&
	git cherry-pick --ff -m 2 C &&
	git diff --exit-code C &&
	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify C)"

HEAD is now at 5faaf2e add line to B
ok 8 - cherry pick with --ff a merge (2)

expecting success of 3506.9 'cherry pick a merge relative to nonexistent parent with --ff should fail': 
	git reset --hard B -- &&
	test_must_fail git cherry-pick --ff -m 3 C

HEAD is now at 5faaf2e add line to B
error: commit 17345dd7218a0fc4dc087d5aacc6be7192e4fa2a does not have parent 3
fatal: cherry-pick failed
ok 9 - cherry pick a merge relative to nonexistent parent with --ff should fail

expecting success of 3506.10 'cherry pick a root commit with --ff': 
	git reset --hard first -- &&
	git rm file1 &&
	echo first >file2 &&
	git add file2 &&
	git commit --amend -m "file2" &&
	git cherry-pick --ff first &&
	test "$(git rev-parse --verify HEAD)" = "$(test_oid cp_ff)"

HEAD is now at 0c72e4f first
rm 'file1'
[new 1654ff9] file2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[new 1df192c] first
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 10 - cherry pick a root commit with --ff

expecting success of 3506.11 'cherry-pick --ff on unborn branch': 
	git checkout --orphan unborn &&
	git rm --cached -r . &&
	rm -rf * &&
	git cherry-pick --ff first &&
	test_cmp_rev first HEAD

Switched to a new branch 'unborn'
rm 'file1'
rm 'file2'
ok 11 - cherry-pick --ff on unborn branch

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3426-rebase-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/.git/
expecting success of 3426.1 'git_rebase: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_rebase: added submodule creates empty directory

expecting success of 3426.2 'git_rebase: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_rebase: added submodule leaves existing empty directory alone

expecting success of 3426.3 'git_rebase: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to a new branch 'ours'
[ours db2b5c3] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours d7a6c40] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_rebase: replace tracked file with submodule creates empty directory

expecting success of 3426.4 'git_rebase: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to a new branch 'ours'
[ours c876b15] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 86f2b1a] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_rebase: replace directory with submodule

expecting success of 3426.5 'git_rebase: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
warning: unable to rmdir 'sub1': Directory not empty
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
ok 5 - git_rebase: removed submodule leaves submodule directory and its contents in place

expecting success of 3426.6 'git_rebase: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
warning: unable to rmdir 'sub1': Directory not empty
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
ok 6 - git_rebase: removed submodule leaves submodule containing a .git directory alone

expecting success of 3426.7 'git_rebase: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 7 - git_rebase: replace submodule with a directory must fail

expecting success of 3426.8 'git_rebase: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 8 - git_rebase: replace submodule containing a .git directory with a directory must fail

checking known breakage of 3426.9 'git_rebase: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
test_must_fail: command succeeded: git rebase replace_sub1_with_file
not ok 9 - git_rebase: replace submodule with a file must fail # TODO known breakage

checking known breakage of 3426.10 'git_rebase: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
test_must_fail: command succeeded: git rebase replace_sub1_with_file
not ok 10 - git_rebase: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 3426.11 'git_rebase: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_rebase: modified submodule does not update submodule work tree

expecting success of 3426.12 'git_rebase: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_rebase: modified submodule does not update submodule work tree to invalid commit

expecting success of 3426.13 'git_rebase: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to a new branch 'ours'
[ours 8fb6209] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 1145b44] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_rebase: modified submodule does not update submodule work tree from invalid commit

expecting success of 3426.14 'git_rebase: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 14 - git_rebase: added submodule doesn't remove untracked unignored file with same name

expecting success of 3426.15 'git_rebase_interactive: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 15 - git_rebase_interactive: added submodule creates empty directory

expecting success of 3426.16 'git_rebase_interactive: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 16 - git_rebase_interactive: added submodule leaves existing empty directory alone

expecting success of 3426.17 'git_rebase_interactive: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to a new branch 'ours'
[ours db2b5c3] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours d7a6c40] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 17 - git_rebase_interactive: replace tracked file with submodule creates empty directory

expecting success of 3426.18 'git_rebase_interactive: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to a new branch 'ours'
[ours c876b15] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 86f2b1a] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 18 - git_rebase_interactive: replace directory with submodule

expecting success of 3426.19 'git_rebase_interactive: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
warning: unable to rmdir 'sub1': Directory not empty
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
ok 19 - git_rebase_interactive: removed submodule leaves submodule directory and its contents in place

expecting success of 3426.20 'git_rebase_interactive: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
warning: unable to rmdir 'sub1': Directory not empty
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
ok 20 - git_rebase_interactive: removed submodule leaves submodule containing a .git directory alone

expecting success of 3426.21 'git_rebase_interactive: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 21 - git_rebase_interactive: replace submodule with a directory must fail

expecting success of 3426.22 'git_rebase_interactive: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 22 - git_rebase_interactive: replace submodule containing a .git directory with a directory must fail

checking known breakage of 3426.23 'git_rebase_interactive: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
test_must_fail: command succeeded: git rebase -i replace_sub1_with_file
not ok 23 - git_rebase_interactive: replace submodule with a file must fail # TODO known breakage

checking known breakage of 3426.24 'git_rebase_interactive: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
test_must_fail: command succeeded: git rebase -i replace_sub1_with_file
not ok 24 - git_rebase_interactive: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 3426.25 'git_rebase_interactive: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 25 - git_rebase_interactive: modified submodule does not update submodule work tree

expecting success of 3426.26 'git_rebase_interactive: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to a new branch 'ours'
[ours 506db5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 9ad3499] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 26 - git_rebase_interactive: modified submodule does not update submodule work tree to invalid commit

expecting success of 3426.27 'git_rebase_interactive: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to a new branch 'ours'
[ours 8fb6209] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 1145b44] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/ours.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 27 - git_rebase_interactive: modified submodule does not update submodule work tree from invalid commit

expecting success of 3426.28 'git_rebase_interactive: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to a new branch 'ours'
[ours dddfb5c] add_x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ours 2a5884b] Revert "add_x"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
error: could not detach HEAD
ok 28 - git_rebase_interactive: added submodule doesn't remove untracked unignored file with same name

expecting success of 3426.29 'rebase interactive ignores modified submodules': 
	test_when_finished "rm -rf super sub" &&
	git init sub &&
	git -C sub commit --allow-empty -m "Initial commit" &&
	git init super &&
	git -c protocol.file.allow=always \
		-C super submodule add ../sub &&
	git -C super config submodule.sub.ignore dirty &&
	>super/foo &&
	git -C super add foo &&
	git -C super commit -m "Initial commit" &&
	test_commit -C super a &&
	test_commit -C super b &&
	test_commit -C super/sub c &&
	set_fake_editor &&
	git -C super rebase -i HEAD^^

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/sub/.git/
[master (root-commit) b8cea33] Initial commit
 Author: A U Thor <author@example.com>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/super/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3426-rebase-submodule/super/sub'...
done.
[master (root-commit) f377606] Initial commit
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 foo
 create mode 160000 sub
[master 4e30919] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
[master 41aa191] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[master a61c667] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t

                                                                                
Successfully rebased and updated refs/heads/master.
ok 29 - rebase interactive ignores modified submodules

# still have 4 known breakage(s)
# passed all remaining 25 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3509-cherry-pick-merge-df.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3509-cherry-pick-merge-df/.git/
expecting success of 3509.1 'Initialize repository': 
	mkdir a &&
	>a/f &&
	git add a &&
	git commit -m a

[main (root-commit) 8938fef] a
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/f
ok 1 - Initialize repository

expecting success of 3509.2 'Setup rename across paths each below D/F conflicts': 
	mkdir b &&
	test_ln_s_add ../a b/a &&
	git commit -m b &&

	git checkout -b branch &&
	rm b/a &&
	git mv a b/a &&
	test_ln_s_add b/a a &&
	git commit -m swap &&

	>f1 &&
	git add f1 &&
	git commit -m f1

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[main 6c20241] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 b/a
Switched to a new branch 'branch'
[branch 138a745] swap
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 create mode 120000 a
 delete mode 120000 b/a
 rename {a => b/a}/f (100%)
[branch b71b76f] f1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 f1
ok 2 - Setup rename across paths each below D/F conflicts

expecting success of 3509.3 'Cherry-pick succeeds with rename across D/F conflicts': 
	git reset --hard &&
	git checkout main^0 &&
	git cherry-pick branch

HEAD is now at b71b76f f1
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6c20241 b
[detached HEAD 1b1aec6] f1
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 f1
ok 3 - Cherry-pick succeeds with rename across D/F conflicts

expecting success of 3509.4 'Setup rename with file on one side matching directory name on other': 
	git checkout --orphan nick-testcase &&
	git rm -rf . &&

	>empty &&
	git add empty &&
	git commit -m "Empty file" &&

	git checkout -b simple &&
	mv empty file &&
	mkdir empty &&
	mv file empty &&
	git add empty/file &&
	git commit -m "Empty file under empty dir" &&

	echo content >newfile &&
	git add newfile &&
	git commit -m "New file"

Switched to a new branch 'nick-testcase'
rm 'a/f'
rm 'b/a'
rm 'f1'
[nick-testcase (root-commit) f619bd8] Empty file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty
Switched to a new branch 'simple'
[simple 735003f] Empty file under empty dir
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename empty => empty/file (100%)
[simple 2eb2ba1] New file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 newfile
ok 4 - Setup rename with file on one side matching directory name on other

expecting success of 3509.5 'Cherry-pick succeeds with was_a_dir/file -> was_a_dir (resolve)': 
	git reset --hard &&
	git checkout -q nick-testcase^0 &&
	git cherry-pick --strategy=resolve simple

HEAD is now at 2eb2ba1 New file
Trying simple merge.
Simple merge failed, trying Automatic merge.
[detached HEAD 072269c] New file
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 newfile
ok 5 - Cherry-pick succeeds with was_a_dir/file -> was_a_dir (resolve)

expecting success of 3509.6 'Cherry-pick succeeds with was_a_dir/file -> was_a_dir (recursive)': 
	git reset --hard &&
	git checkout -q nick-testcase^0 &&
	git cherry-pick --strategy=recursive simple

HEAD is now at 072269c New file
Adding empty
[detached HEAD 072269c] New file
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 newfile
ok 6 - Cherry-pick succeeds with was_a_dir/file -> was_a_dir (recursive)

expecting success of 3509.7 'Setup rename with file on one side matching different dirname on other': 
	git reset --hard &&
	git checkout --orphan mergeme &&
	git rm -rf . &&

	mkdir sub &&
	mkdir othersub &&
	echo content > sub/file &&
	echo foo > othersub/whatever &&
	git add -A &&
	git commit -m "Common commit" &&

	git rm -rf othersub &&
	git mv sub/file othersub &&
	git commit -m "Commit to merge" &&

	git checkout -b newhead mergeme~1 &&
	>independent-change &&
	git add independent-change &&
	git commit -m "Completely unrelated change"

HEAD is now at 072269c New file
Switched to a new branch 'mergeme'
rm 'empty'
rm 'newfile'
[mergeme (root-commit) 220cb6a] Common commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 othersub/whatever
 create mode 100644 sub/file
rm 'othersub/whatever'
[mergeme 73ee5a0] Commit to merge
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename sub/file => othersub (100%)
 delete mode 100644 othersub/whatever
Switched to a new branch 'newhead'
[newhead dec5ebc] Completely unrelated change
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 independent-change
ok 7 - Setup rename with file on one side matching different dirname on other

expecting success of 3509.8 'Cherry-pick with rename to different D/F conflict succeeds (resolve)': 
	git reset --hard &&
	git checkout -q newhead^0 &&
	git cherry-pick --strategy=resolve mergeme

HEAD is now at dec5ebc Completely unrelated change
Trying simple merge.
Simple merge failed, trying Automatic merge.
Adding othersub
[detached HEAD 8d9f455] Commit to merge
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 1 deletion(-)
 rename sub/file => othersub (100%)
 delete mode 100644 othersub/whatever
ok 8 - Cherry-pick with rename to different D/F conflict succeeds (resolve)

expecting success of 3509.9 'Cherry-pick with rename to different D/F conflict succeeds (recursive)': 
	git reset --hard &&
	git checkout -q newhead^0 &&
	git cherry-pick --strategy=recursive mergeme

HEAD is now at 8d9f455 Commit to merge
Removing othersub/whatever
[detached HEAD 8d9f455] Commit to merge
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 1 deletion(-)
 rename sub/file => othersub (100%)
 delete mode 100644 othersub/whatever
ok 9 - Cherry-pick with rename to different D/F conflict succeeds (recursive)

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3508-cherry-pick-many-commits.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3508-cherry-pick-many-commits/.git/
expecting success of 3508.1 'setup': 
	echo first > file1 &&
	git add file1 &&
	test_tick &&
	git commit -m "first" &&
	git tag first &&

	git checkout -b other &&
	for val in second third fourth
	do
		echo $val >> file1 &&
		git add file1 &&
		test_tick &&
		git commit -m "$val" &&
		git tag $val || return 1
	done

[main (root-commit) 0c72e4f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Switched to a new branch 'other'
[other 453a047] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[other e85abe2] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[other 94d3184] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 3508.2 'cherry-pick first..fourth works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick first..fourth &&
	git diff --quiet other &&
	git diff --quiet HEAD other &&
	check_head_differs_from fourth

Switched to branch 'main'
HEAD is now at 0c72e4f first
[main 9589776] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
[main 7ef563c] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
[main 105ac0a] fourth
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 2 - cherry-pick first..fourth works

expecting success of 3508.3 'cherry-pick three one two works': 
	git checkout -f first &&
	test_commit one &&
	test_commit two &&
	test_commit three &&
	git checkout -f main &&
	git reset --hard first &&
	git cherry-pick three one two &&
	git diff --quiet three &&
	git diff --quiet HEAD three &&
	test "$(git log --reverse --format=%s first..)" = "three
one
two"

Note: switching to 'first'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0c72e4f first
[detached HEAD 08ada56] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[detached HEAD 556e4fe] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[detached HEAD a4e9322] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Previous HEAD position was a4e9322 three
Switched to branch 'main'
HEAD is now at 0c72e4f first
[main 124d016] three
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[main 6e6e64d] one
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 54c7896] two
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 3 - cherry-pick three one two works

expecting success of 3508.4 'cherry-pick three one two: fails': 
	git checkout -f main &&
	git reset --hard first &&
	test_must_fail git cherry-pick three one two:

Already on 'main'
HEAD is now at 0c72e4f first
error: two:: can't cherry-pick a tree
fatal: cherry-pick failed
ok 4 - cherry-pick three one two: fails

expecting success of 3508.5 'output to keep user entertained during multi-pick': 
	cat <<-\EOF >expected &&
	[main OBJID] second
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:14:13 2005 -0700
	 1 file changed, 1 insertion(+)
	[main OBJID] third
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:15:13 2005 -0700
	 1 file changed, 1 insertion(+)
	[main OBJID] fourth
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:16:13 2005 -0700
	 1 file changed, 1 insertion(+)
	EOF

	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick first..fourth >actual &&
	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
	test_line_count -ge 3 actual.fuzzy &&
	test_cmp expected actual.fuzzy

Already on 'main'
HEAD is now at 0c72e4f first
ok 5 - output to keep user entertained during multi-pick

expecting success of 3508.6 'cherry-pick --strategy resolve first..fourth works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick --strategy resolve first..fourth &&
	git diff --quiet other &&
	git diff --quiet HEAD other &&
	check_head_differs_from fourth

Already on 'main'
HEAD is now at 0c72e4f first
Trying simple merge.
[main 48c207c] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
Trying simple merge.
[main 9dcf789] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
Trying simple merge.
[main 1f7167d] fourth
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 6 - cherry-pick --strategy resolve first..fourth works

expecting success of 3508.7 'output during multi-pick indicates merge strategy': 
	cat <<-\EOF >expected &&
	Trying simple merge.
	[main OBJID] second
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:14:13 2005 -0700
	 1 file changed, 1 insertion(+)
	Trying simple merge.
	[main OBJID] third
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:15:13 2005 -0700
	 1 file changed, 1 insertion(+)
	Trying simple merge.
	[main OBJID] fourth
	 Author: A U Thor <author@example.com>
	 Date: Thu Apr 7 15:16:13 2005 -0700
	 1 file changed, 1 insertion(+)
	EOF

	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick --strategy resolve first..fourth >actual &&
	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
	test_cmp expected actual.fuzzy

Already on 'main'
HEAD is now at 0c72e4f first
ok 7 - output during multi-pick indicates merge strategy

expecting success of 3508.8 'cherry-pick --ff first..fourth works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick --ff first..fourth &&
	git diff --quiet other &&
	git diff --quiet HEAD other &&
	check_head_equals fourth

Already on 'main'
HEAD is now at 0c72e4f first
ok 8 - cherry-pick --ff first..fourth works

expecting success of 3508.9 'cherry-pick -n first..fourth works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick -n first..fourth &&
	git diff --quiet other &&
	git diff --cached --quiet other &&
	git diff --quiet HEAD first

Already on 'main'
HEAD is now at 0c72e4f first
ok 9 - cherry-pick -n first..fourth works

expecting success of 3508.10 'revert first..fourth works': 
	git checkout -f main &&
	git reset --hard fourth &&
	test_tick &&
	git revert first..fourth &&
	git diff --quiet first &&
	git diff --cached --quiet first &&
	git diff --quiet HEAD first

Already on 'main'
HEAD is now at 94d3184 fourth
[main 9fd86ee] Revert "fourth"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:26:13 2005 -0700
 1 file changed, 1 deletion(-)
[main bcb892c] Revert "third"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:26:13 2005 -0700
 1 file changed, 1 deletion(-)
[main 6e2dda4] Revert "second"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:26:13 2005 -0700
 1 file changed, 1 deletion(-)
ok 10 - revert first..fourth works

expecting success of 3508.11 'revert ^first fourth works': 
	git checkout -f main &&
	git reset --hard fourth &&
	test_tick &&
	git revert ^first fourth &&
	git diff --quiet first &&
	git diff --cached --quiet first &&
	git diff --quiet HEAD first

Already on 'main'
HEAD is now at 94d3184 fourth
[main e6761b3] Revert "fourth"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:27:13 2005 -0700
 1 file changed, 1 deletion(-)
[main 4940ca7] Revert "third"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:27:13 2005 -0700
 1 file changed, 1 deletion(-)
[main e06156e] Revert "second"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:27:13 2005 -0700
 1 file changed, 1 deletion(-)
ok 11 - revert ^first fourth works

expecting success of 3508.12 'revert fourth fourth~1 fourth~2 works': 
	git checkout -f main &&
	git reset --hard fourth &&
	test_tick &&
	git revert fourth fourth~1 fourth~2 &&
	git diff --quiet first &&
	git diff --cached --quiet first &&
	git diff --quiet HEAD first

Already on 'main'
HEAD is now at 94d3184 fourth
[main 8d9417a] Revert "fourth"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:28:13 2005 -0700
 1 file changed, 1 deletion(-)
[main 210e986] Revert "third"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:28:13 2005 -0700
 1 file changed, 1 deletion(-)
[main f77c534] Revert "second"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:28:13 2005 -0700
 1 file changed, 1 deletion(-)
ok 12 - revert fourth fourth~1 fourth~2 works

expecting success of 3508.13 'cherry-pick -3 fourth works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git cherry-pick -3 fourth &&
	git diff --quiet other &&
	git diff --quiet HEAD other &&
	check_head_differs_from fourth

Already on 'main'
HEAD is now at 0c72e4f first
[main 0b92961] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
[main e4ba54b] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
[main bb3aa41] fourth
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 13 - cherry-pick -3 fourth works

expecting success of 3508.14 'cherry-pick --stdin works': 
	git checkout -f main &&
	git reset --hard first &&
	test_tick &&
	git rev-list --reverse first..fourth | git cherry-pick --stdin &&
	git diff --quiet other &&
	git diff --quiet HEAD other &&
	check_head_differs_from fourth

Already on 'main'
HEAD is now at 0c72e4f first
[main 026fdf1] second
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
[main 56d3171] third
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
[main 2cef6d1] fourth
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 14 - cherry-pick --stdin works

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3507-cherry-pick-conflict.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3507-cherry-pick-conflict/.git/
expecting success of 3507.1 'setup': 

	echo unrelated >unrelated &&
	git add unrelated &&
	test_commit initial foo a &&
	test_commit base foo b &&
	test_commit picked foo c &&
	test_commit --signoff picked-signed foo d &&
	git checkout -b topic initial &&
	test_commit redundant-pick foo c redundant &&
	git commit --allow-empty --allow-empty-message &&
	git tag empty &&
	git checkout main &&
	git config advice.detachedhead false


[main (root-commit) df2a63d] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 foo
 create mode 100644 unrelated
[main dc0113b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 7e6d412] picked
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main e4ca149] picked-signed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'topic'
[topic 2aaca37] redundant-pick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[topic c0ecbf1] 
 Author: A U Thor <author@example.com>
Switched to branch 'main'
ok 1 - setup

expecting success of 3507.2 'failed cherry-pick does not advance HEAD': 
	pristine_detach initial &&

	head=$(git rev-parse HEAD) &&
	test_must_fail git cherry-pick picked &&
	newhead=$(git rev-parse HEAD) &&

	test "$head" = "$newhead"

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 2 - failed cherry-pick does not advance HEAD

expecting success of 3507.3 'advice from failed cherry-pick': 
	pristine_detach initial &&

	picked=$(git rev-parse --short picked) &&
	cat <<-EOF >expected &&
	error: could not apply $picked... picked
	hint: After resolving the conflicts, mark them with
	hint: "git add/rm <pathspec>", then run
	hint: "git cherry-pick --continue".
	hint: You can instead skip this commit with "git cherry-pick --skip".
	hint: To abort and get back to the state before "git cherry-pick",
	hint: run "git cherry-pick --abort".
	EOF
	test_must_fail git cherry-pick picked 2>actual &&

	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
ok 3 - advice from failed cherry-pick

expecting success of 3507.4 'advice from failed cherry-pick --no-commit': 
	pristine_detach initial &&

	picked=$(git rev-parse --short picked) &&
	cat <<-EOF >expected &&
	error: could not apply $picked... picked
	hint: after resolving the conflicts, mark the corrected paths
	hint: with 'git add <paths>' or 'git rm <paths>'
	EOF
	test_must_fail git cherry-pick --no-commit picked 2>actual &&

	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
ok 4 - advice from failed cherry-pick --no-commit

expecting success of 3507.5 'failed cherry-pick sets CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	test_must_fail git cherry-pick picked &&
	test_cmp_rev picked CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 5 - failed cherry-pick sets CHERRY_PICK_HEAD

expecting success of 3507.6 'successful cherry-pick does not set CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	git cherry-pick base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
[detached HEAD ccd9cfc] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 6 - successful cherry-pick does not set CHERRY_PICK_HEAD

expecting success of 3507.7 'cherry-pick --no-commit does not set CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	git cherry-pick --no-commit base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ccd9cfc base

HEAD is now at df2a63d initial
fatal: Needed a single revision
ok 7 - cherry-pick --no-commit does not set CHERRY_PICK_HEAD

expecting success of 3507.8 'cherry-pick w/dirty tree does not set CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	echo foo >foo &&
	test_must_fail git cherry-pick base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
error: Your local changes to the following files would be overwritten by merge:
	foo
Please commit your changes or stash them before you merge.
Aborting
fatal: cherry-pick failed
fatal: Needed a single revision
ok 8 - cherry-pick w/dirty tree does not set CHERRY_PICK_HEAD

expecting success of 3507.9 'cherry-pick --strategy=resolve w/dirty tree does not set CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	echo foo >foo &&
	test_must_fail git cherry-pick --strategy=resolve base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
error: Entry 'foo' not uptodate. Cannot merge.
error: could not apply dc0113b... base
fatal: Needed a single revision
ok 9 - cherry-pick --strategy=resolve w/dirty tree does not set CHERRY_PICK_HEAD

expecting success of 3507.10 'GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD': 
	pristine_detach initial &&
	(
		GIT_CHERRY_PICK_HELP="and then do something else" &&
		export GIT_CHERRY_PICK_HELP &&
		test_must_fail git cherry-pick picked
	) &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: and then do something else
fatal: Needed a single revision
ok 10 - GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD

expecting success of 3507.11 'git reset clears CHERRY_PICK_HEAD': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	git reset &&

	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Unstaged changes after reset:
M	foo
fatal: Needed a single revision
ok 11 - git reset clears CHERRY_PICK_HEAD

expecting success of 3507.12 'failed commit does not clear CHERRY_PICK_HEAD': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	test_must_fail git commit &&

	test_cmp_rev picked CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
U	foo
ok 12 - failed commit does not clear CHERRY_PICK_HEAD

expecting success of 3507.13 'cancelled commit does not clear CHERRY_PICK_HEAD': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	echo resolved >foo &&
	git add foo &&
	git update-index --refresh -q &&
	test_must_fail git diff-index --exit-code HEAD &&
	(
		GIT_EDITOR=false &&
		export GIT_EDITOR &&
		test_must_fail git commit
	) &&

	test_cmp_rev picked CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
:100644 100644 78981922613b2afb6025042ff6bd878ac1994e85 2ab19ae607aabda796309682e0448237aab03047 M	foo
error: There was a problem with the editor 'false'.
Please supply the message using either -m or -F option.
ok 13 - cancelled commit does not clear CHERRY_PICK_HEAD

expecting success of 3507.14 'successful commit clears CHERRY_PICK_HEAD': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	echo resolved >foo &&
	git add foo &&
	git commit &&

	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD a8c44c9] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 14 - successful commit clears CHERRY_PICK_HEAD

expecting success of 3507.15 'partial commit of cherry-pick fails': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	echo resolved >foo &&
	git add foo &&
	test_must_fail git commit foo 2>err &&

	test_i18ngrep "cannot do a partial commit during a cherry-pick." err

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  a8c44c9 picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
fatal: cannot do a partial commit during a cherry-pick.
ok 15 - partial commit of cherry-pick fails

expecting success of 3507.16 'commit --amend of cherry-pick fails': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&
	echo resolved >foo &&
	git add foo &&
	test_must_fail git commit --amend 2>err &&

	test_i18ngrep "in the middle of a cherry-pick -- cannot amend." err

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
fatal: You are in the middle of a cherry-pick -- cannot amend.
ok 16 - commit --amend of cherry-pick fails

expecting success of 3507.17 'successful final commit clears cherry-pick state': 
	pristine_detach initial &&

	test_must_fail git cherry-pick base picked-signed &&
	echo resolved >foo &&
	test_path_is_file .git/sequencer/todo &&
	git commit -a &&
	test_path_is_missing .git/sequencer

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
[detached HEAD ccd9cfc] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply e4ca149... picked-signed
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 53c8c73] picked-signed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 17 - successful final commit clears cherry-pick state

expecting success of 3507.18 'reset after final pick clears cherry-pick state': 
	pristine_detach initial &&

	test_must_fail git cherry-pick base picked-signed &&
	echo resolved >foo &&
	test_path_is_file .git/sequencer/todo &&
	git reset &&
	test_path_is_missing .git/sequencer

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  53c8c73 picked-signed
  ccd9cfc base

HEAD is now at df2a63d initial
[detached HEAD ccd9cfc] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply e4ca149... picked-signed
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Unstaged changes after reset:
M	foo
ok 18 - reset after final pick clears cherry-pick state

expecting success of 3507.19 'failed cherry-pick produces dirty index': 
	pristine_detach initial &&

	test_must_fail git cherry-pick picked &&

	test_must_fail git update-index --refresh -q &&
	test_must_fail git diff-index --exit-code HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ccd9cfc base

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
foo: needs merge
:100644 100644 78981922613b2afb6025042ff6bd878ac1994e85 0000000000000000000000000000000000000000 M	foo
ok 19 - failed cherry-pick produces dirty index

expecting success of 3507.20 'failed cherry-pick registers participants in index': 
	pristine_detach initial &&
	{
		git checkout base -- foo &&
		git ls-files --stage foo &&
		git checkout initial -- foo &&
		git ls-files --stage foo &&
		git checkout picked -- foo &&
		git ls-files --stage foo
	} >stages &&
	sed "
		1 s/ 0	/ 1	/
		2 s/ 0	/ 2	/
		3 s/ 0	/ 3	/
	" stages >expected &&
	git read-tree -u --reset HEAD &&

	test_must_fail git cherry-pick picked &&
	git ls-files --stage --unmerged >actual &&

	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 20 - failed cherry-pick registers participants in index

expecting success of 3507.21 'cherry-pick conflict, ensure commit.cleanup = scissors places scissors line properly': 
	pristine_detach initial &&
	git config commit.cleanup scissors &&
	cat <<-EOF >expected &&
		picked

		# ------------------------ >8 ------------------------
		# Do not modify or remove the line above.
		# Everything below it will be ignored.
		#
		# Conflicts:
		#	foo
		EOF

	test_must_fail git cherry-pick picked &&

	test_cmp expected .git/MERGE_MSG

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 21 - cherry-pick conflict, ensure commit.cleanup = scissors places scissors line properly

expecting success of 3507.22 'cherry-pick conflict, ensure cleanup=scissors places scissors line properly': 
	pristine_detach initial &&
	git config --unset commit.cleanup &&
	cat <<-EOF >expected &&
		picked

		# ------------------------ >8 ------------------------
		# Do not modify or remove the line above.
		# Everything below it will be ignored.
		#
		# Conflicts:
		#	foo
		EOF

	test_must_fail git cherry-pick --cleanup=scissors picked &&

	test_cmp expected .git/MERGE_MSG

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 22 - cherry-pick conflict, ensure cleanup=scissors places scissors line properly

expecting success of 3507.23 'failed cherry-pick describes conflict in work tree': 
	pristine_detach initial &&
	cat <<-EOF >expected &&
	<<<<<<< HEAD
	a
	=======
	c
	>>>>>>> objid (picked)
	EOF

	test_must_fail git cherry-pick picked &&

	sed "s/[a-f0-9]* (/objid (/" foo >actual &&
	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 23 - failed cherry-pick describes conflict in work tree

expecting success of 3507.24 'diff3 -m style': 
	pristine_detach initial &&
	git config merge.conflictstyle diff3 &&
	cat <<-EOF >expected &&
	<<<<<<< HEAD
	a
	||||||| parent of objid (picked)
	b
	=======
	c
	>>>>>>> objid (picked)
	EOF

	test_must_fail git cherry-pick picked &&

	sed "s/[a-f0-9]* (/objid (/" foo >actual &&
	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 24 - diff3 -m style

expecting success of 3507.25 'revert also handles conflicts sanely': 
	git config --unset merge.conflictstyle &&
	pristine_detach initial &&
	cat <<-EOF >expected &&
	<<<<<<< HEAD
	a
	=======
	b
	>>>>>>> parent of objid (picked)
	EOF
	{
		git checkout picked -- foo &&
		git ls-files --stage foo &&
		git checkout initial -- foo &&
		git ls-files --stage foo &&
		git checkout base -- foo &&
		git ls-files --stage foo
	} >stages &&
	sed "
		1 s/ 0	/ 1	/
		2 s/ 0	/ 2	/
		3 s/ 0	/ 3	/
	" stages >expected-stages &&
	git read-tree -u --reset HEAD &&

	head=$(git rev-parse HEAD) &&
	test_must_fail git revert picked &&
	newhead=$(git rev-parse HEAD) &&
	git ls-files --stage --unmerged >actual-stages &&

	test "$head" = "$newhead" &&
	test_must_fail git update-index --refresh -q &&
	test_must_fail git diff-index --exit-code HEAD &&
	test_cmp expected-stages actual-stages &&
	sed "s/[a-f0-9]* (/objid (/" foo >actual &&
	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
foo: needs merge
:100644 100644 78981922613b2afb6025042ff6bd878ac1994e85 0000000000000000000000000000000000000000 M	foo
ok 25 - revert also handles conflicts sanely

expecting success of 3507.26 'failed revert sets REVERT_HEAD': 
	pristine_detach initial &&
	test_must_fail git revert picked &&
	test_cmp_rev picked REVERT_HEAD

HEAD is now at df2a63d initial
warning: cancelling a revert in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 26 - failed revert sets REVERT_HEAD

expecting success of 3507.27 'successful revert does not set REVERT_HEAD': 
	pristine_detach base &&
	git revert base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&
	test_must_fail git rev-parse --verify REVERT_HEAD

Previous HEAD position was df2a63d initial
HEAD is now at dc0113b base
warning: cancelling a revert in progress
[detached HEAD feb2983] Revert "base"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
fatal: Needed a single revision
ok 27 - successful revert does not set REVERT_HEAD

expecting success of 3507.28 'revert --no-commit sets REVERT_HEAD': 
	pristine_detach base &&
	git revert --no-commit base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&
	test_cmp_rev base REVERT_HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  feb2983 Revert "base"

HEAD is now at dc0113b base
fatal: Needed a single revision
ok 28 - revert --no-commit sets REVERT_HEAD

expecting success of 3507.29 'revert w/dirty tree does not set REVERT_HEAD': 
	pristine_detach base &&
	echo foo >foo &&
	test_must_fail git revert base &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&
	test_must_fail git rev-parse --verify REVERT_HEAD

HEAD is now at dc0113b base
warning: cancelling a revert in progress
error: Your local changes to the following files would be overwritten by merge:
	foo
Please commit your changes or stash them before you merge.
Aborting
fatal: revert failed
fatal: Needed a single revision
fatal: Needed a single revision
ok 29 - revert w/dirty tree does not set REVERT_HEAD

expecting success of 3507.30 'GIT_CHERRY_PICK_HELP does not suppress REVERT_HEAD': 
	pristine_detach initial &&
	(
		GIT_CHERRY_PICK_HELP="and then do something else" &&
		GIT_REVERT_HELP="and then do something else, again" &&
		export GIT_CHERRY_PICK_HELP GIT_REVERT_HELP &&
		test_must_fail git revert picked
	) &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&
	test_cmp_rev picked REVERT_HEAD

Previous HEAD position was dc0113b base
HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: and then do something else
fatal: Needed a single revision
ok 30 - GIT_CHERRY_PICK_HELP does not suppress REVERT_HEAD

expecting success of 3507.31 'git reset clears REVERT_HEAD': 
	pristine_detach initial &&
	test_must_fail git revert picked &&
	git reset &&
	test_must_fail git rev-parse --verify REVERT_HEAD

HEAD is now at df2a63d initial
warning: cancelling a revert in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
Unstaged changes after reset:
M	foo
fatal: Needed a single revision
ok 31 - git reset clears REVERT_HEAD

expecting success of 3507.32 'failed commit does not clear REVERT_HEAD': 
	pristine_detach initial &&
	test_must_fail git revert picked &&
	test_must_fail git commit &&
	test_cmp_rev picked REVERT_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
U	foo
ok 32 - failed commit does not clear REVERT_HEAD

expecting success of 3507.33 'successful final commit clears revert state': 
	pristine_detach picked-signed &&

	test_must_fail git revert picked-signed base &&
	echo resolved >foo &&
	test_path_is_file .git/sequencer/todo &&
	git commit -a &&
	test_path_is_missing .git/sequencer

Previous HEAD position was df2a63d initial
HEAD is now at e4ca149 picked-signed
warning: cancelling a revert in progress
[detached HEAD b940b09] Revert "picked-signed"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert dc0113b... base
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
[detached HEAD 7342963] Revert "base"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 33 - successful final commit clears revert state

expecting success of 3507.34 'reset after final pick clears revert state': 
	pristine_detach picked-signed &&

	test_must_fail git revert picked-signed base &&
	echo resolved >foo &&
	test_path_is_file .git/sequencer/todo &&
	git reset &&
	test_path_is_missing .git/sequencer

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  7342963 Revert "base"
  b940b09 Revert "picked-signed"

HEAD is now at e4ca149 picked-signed
[detached HEAD b940b09] Revert "picked-signed"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert dc0113b... base
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
Unstaged changes after reset:
M	foo
ok 34 - reset after final pick clears revert state

expecting success of 3507.35 'revert conflict, diff3 -m style': 
	pristine_detach initial &&
	git config merge.conflictstyle diff3 &&
	cat <<-EOF >expected &&
	<<<<<<< HEAD
	a
	||||||| objid (picked)
	c
	=======
	b
	>>>>>>> parent of objid (picked)
	EOF

	test_must_fail git revert picked &&

	sed "s/[a-f0-9]* (/objid (/" foo >actual &&
	test_cmp expected actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b940b09 Revert "picked-signed"

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 35 - revert conflict, diff3 -m style

expecting success of 3507.36 'revert conflict, ensure commit.cleanup = scissors places scissors line properly': 
	pristine_detach initial &&
	git config commit.cleanup scissors &&
	cat >expected <<-EOF &&
		Revert "picked"

		This reverts commit OBJID.

		# ------------------------ >8 ------------------------
		# Do not modify or remove the line above.
		# Everything below it will be ignored.
		#
		# Conflicts:
		#	foo
		EOF

	test_must_fail git revert picked &&

	sed "s/$OID_REGEX/OBJID/" .git/MERGE_MSG >actual &&
	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a revert in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 36 - revert conflict, ensure commit.cleanup = scissors places scissors line properly

expecting success of 3507.37 'revert conflict, ensure cleanup=scissors places scissors line properly': 
	pristine_detach initial &&
	git config --unset commit.cleanup &&
	cat >expected <<-EOF &&
		Revert "picked"

		This reverts commit OBJID.

		# ------------------------ >8 ------------------------
		# Do not modify or remove the line above.
		# Everything below it will be ignored.
		#
		# Conflicts:
		#	foo
		EOF

	test_must_fail git revert --cleanup=scissors picked &&

	sed "s/$OID_REGEX/OBJID/" .git/MERGE_MSG >actual &&
	test_cmp expected actual

HEAD is now at df2a63d initial
warning: cancelling a revert in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 37 - revert conflict, ensure cleanup=scissors places scissors line properly

expecting success of 3507.38 'failed cherry-pick does not forget -s': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -s picked &&
	test_i18ngrep -e "Signed-off-by" .git/MERGE_MSG

HEAD is now at df2a63d initial
warning: cancelling a revert in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Signed-off-by: C O Mitter <committer@example.com>
ok 38 - failed cherry-pick does not forget -s

expecting success of 3507.39 'commit after failed cherry-pick does not add duplicated -s': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -s picked-signed &&
	git commit -a -s &&
	test $(git show -s >tmp && grep -c "Signed-off-by" tmp && rm tmp) = 1

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply e4ca149... picked-signed
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD ae79e40] picked-signed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 6 insertions(+)
ok 39 - commit after failed cherry-pick does not add duplicated -s

expecting success of 3507.40 'commit after failed cherry-pick adds -s at the right place': 
	pristine_detach initial &&
	test_must_fail git cherry-pick picked &&

	git commit -a -s &&

	# Do S-o-b and Conflicts appear in the right order?
	cat <<-\EOF >expect &&
	Signed-off-by: C O Mitter <committer@example.com>
	# Conflicts:
	EOF
	grep -e "^# Conflicts:" -e "^Signed-off-by" .git/COMMIT_EDITMSG >actual &&
	test_cmp expect actual &&

	cat <<-\EOF >expected &&
	picked

	Signed-off-by: C O Mitter <committer@example.com>
	EOF

	git show -s --pretty=format:%B >actual &&
	test_cmp expected actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ae79e40 picked-signed

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 56f790d] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 6 insertions(+)
ok 40 - commit after failed cherry-pick adds -s at the right place

expecting success of 3507.41 'commit --amend -s places the sign-off at the right place': 
	pristine_detach initial &&
	test_must_fail git cherry-pick picked &&

	# emulate old-style conflicts block
	mv .git/MERGE_MSG .git/MERGE_MSG+ &&
	sed -e "/^# Conflicts:/,\$s/^# *//" .git/MERGE_MSG+ >.git/MERGE_MSG &&

	git commit -a &&
	git commit --amend -s &&

	# Do S-o-b and Conflicts appear in the right order?
	cat <<-\EOF >expect &&
	Signed-off-by: C O Mitter <committer@example.com>
	Conflicts:
	EOF
	grep -e "^Conflicts:" -e "^Signed-off-by" .git/COMMIT_EDITMSG >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  56f790d picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD a795bbb] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 6 insertions(+)
[detached HEAD 91df379] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 6 insertions(+)
ok 41 - commit --amend -s places the sign-off at the right place

expecting success of 3507.42 'cherry-pick preserves sparse-checkout': 
	pristine_detach initial &&
	test_config core.sparseCheckout true &&
	test_when_finished "
		echo \"/*\" >.git/info/sparse-checkout
		git read-tree --reset -u HEAD
		rm .git/info/sparse-checkout" &&
	mkdir .git/info &&
	echo /unrelated >.git/info/sparse-checkout &&
	git read-tree --reset -u HEAD &&
	test_must_fail git cherry-pick -Xours picked>actual &&
	test_i18ngrep ! "Changes not staged for commit:" actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  91df379 picked

HEAD is now at df2a63d initial
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
ok 42 - cherry-pick preserves sparse-checkout

expecting success of 3507.43 'cherry-pick --continue remembers --keep-redundant-commits': 
	test_when_finished "git cherry-pick --abort || :" &&
	pristine_detach initial &&
	test_must_fail git cherry-pick --keep-redundant-commits picked redundant &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue

HEAD is now at df2a63d initial
warning: cancelling a cherry picking in progress
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD d9f497e] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 22de78d] redundant-pick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
error: no cherry-pick or revert in progress
fatal: cherry-pick failed
ok 43 - cherry-pick --continue remembers --keep-redundant-commits

expecting success of 3507.44 'cherry-pick --continue remembers --allow-empty and --allow-empty-message': 
	test_when_finished "git cherry-pick --abort || :" &&
	pristine_detach initial &&
	test_must_fail git cherry-pick --allow-empty --allow-empty-message \
				       picked empty &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  22de78d redundant-pick
  d9f497e picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 7e6d412... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD d9f497e] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD d7f7844] 
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
error: no cherry-pick or revert in progress
fatal: cherry-pick failed
ok 44 - cherry-pick --continue remembers --allow-empty and --allow-empty-message

# passed all 44 test(s)
1..44
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3511-cherry-pick-x.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3511-cherry-pick-x/.git/
expecting success of 3511.1 'setup': 
	git config advice.detachedhead false &&
	echo unrelated >unrelated &&
	git add unrelated &&
	test_commit initial foo a &&
	test_commit "$mesg_one_line" foo b mesg-one-line &&
	git reset --hard initial &&
	test_commit "$mesg_no_footer" foo b mesg-no-footer &&
	git reset --hard initial &&
	test_commit "$mesg_broken_footer" foo b mesg-broken-footer &&
	git reset --hard initial &&
	test_commit "$mesg_with_footer" foo b mesg-with-footer &&
	git reset --hard initial &&
	test_commit "$mesg_with_footer_sob" foo b mesg-with-footer-sob &&
	git reset --hard initial &&
	test_commit "$mesg_with_cherry_footer" foo b mesg-with-cherry-footer &&
	git reset --hard initial &&
	test_config commit.cleanup verbatim &&
	test_commit "$mesg_unclean" foo b mesg-unclean &&
	test_unconfig commit.cleanup &&
	pristine_detach initial &&
	test_commit conflicting unrelated

[master (root-commit) df2a63d] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 foo
 create mode 100644 unrelated
[master d18d4f3] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master e073909] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master 0353e8f] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master 3838485] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master d60edf0] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master d7a875c] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[master 860e94a] base: commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[detached HEAD 823a98f] conflicting
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3511.2 'cherry-pick -x inserts blank line after one line subject': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-one-line^0) &&
	git cherry-pick -x mesg-one-line &&
	cat <<-EOF >expect &&
		$mesg_one_line

		(cherry picked from commit $sha1)
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Previous HEAD position was 823a98f conflicting
HEAD is now at df2a63d initial
[detached HEAD 6970a53] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - cherry-pick -x inserts blank line after one line subject

expecting success of 3511.3 'cherry-pick -s inserts blank line after one line subject': 
	pristine_detach initial &&
	git cherry-pick -s mesg-one-line &&
	cat <<-EOF >expect &&
		$mesg_one_line

		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6970a53 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 0fda2e1] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - cherry-pick -s inserts blank line after one line subject

expecting success of 3511.4 'cherry-pick -s inserts blank line after non-conforming footer': 
	pristine_detach initial &&
	git cherry-pick -s mesg-broken-footer &&
	cat <<-EOF >expect &&
		$mesg_broken_footer

		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0fda2e1 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 0cf5261] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - cherry-pick -s inserts blank line after non-conforming footer

expecting success of 3511.5 'cherry-pick -s recognizes trailer config': 
	pristine_detach initial &&
	git -c "trailer.Myfooter.ifexists=add" cherry-pick -s mesg-broken-footer &&
	cat <<-EOF >expect &&
		$mesg_broken_footer
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0cf5261 base: commit message

HEAD is now at df2a63d initial
[detached HEAD b95a0f7] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 5 - cherry-pick -s recognizes trailer config

expecting success of 3511.6 'cherry-pick -x inserts blank line when conforming footer not found': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-no-footer^0) &&
	git cherry-pick -x mesg-no-footer &&
	cat <<-EOF >expect &&
		$mesg_no_footer

		(cherry picked from commit $sha1)
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b95a0f7 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 6f42e54] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - cherry-pick -x inserts blank line when conforming footer not found

expecting success of 3511.7 'cherry-pick -s inserts blank line when conforming footer not found': 
	pristine_detach initial &&
	git cherry-pick -s mesg-no-footer &&
	cat <<-EOF >expect &&
		$mesg_no_footer

		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6f42e54 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 32d2dda] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - cherry-pick -s inserts blank line when conforming footer not found

expecting success of 3511.8 'cherry-pick -x -s inserts blank line when conforming footer not found': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-no-footer^0) &&
	git cherry-pick -x -s mesg-no-footer &&
	cat <<-EOF >expect &&
		$mesg_no_footer

		(cherry picked from commit $sha1)
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  32d2dda base: commit message

HEAD is now at df2a63d initial
[detached HEAD adaaef8] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 8 - cherry-pick -x -s inserts blank line when conforming footer not found

expecting success of 3511.9 'cherry-pick -s adds sob when last sob doesnt match committer': 
	pristine_detach initial &&
	git cherry-pick -s mesg-with-footer &&
	cat <<-EOF >expect &&
		$mesg_with_footer
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  adaaef8 base: commit message

HEAD is now at df2a63d initial
[detached HEAD b62bd75] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - cherry-pick -s adds sob when last sob doesnt match committer

expecting success of 3511.10 'cherry-pick -x -s adds sob when last sob doesnt match committer': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-with-footer^0) &&
	git cherry-pick -x -s mesg-with-footer &&
	cat <<-EOF >expect &&
		$mesg_with_footer
		(cherry picked from commit $sha1)
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b62bd75 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 94e740a] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 10 - cherry-pick -x -s adds sob when last sob doesnt match committer

expecting success of 3511.11 'cherry-pick -s refrains from adding duplicate trailing sob': 
	pristine_detach initial &&
	git cherry-pick -s mesg-with-footer-sob &&
	cat <<-EOF >expect &&
		$mesg_with_footer_sob
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  94e740a base: commit message

HEAD is now at df2a63d initial
[detached HEAD a836c16] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 11 - cherry-pick -s refrains from adding duplicate trailing sob

expecting success of 3511.12 'cherry-pick -x -s adds sob even when trailing sob exists for committer': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-with-footer-sob^0) &&
	git cherry-pick -x -s mesg-with-footer-sob &&
	cat <<-EOF >expect &&
		$mesg_with_footer_sob
		(cherry picked from commit $sha1)
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  a836c16 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 2d6e386] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - cherry-pick -x -s adds sob even when trailing sob exists for committer

expecting success of 3511.13 'cherry-pick -x handles commits with no NL at end of message': 
	pristine_detach initial &&
	printf "title\n\nSigned-off-by: A <a@example.com>" >msg &&
	sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
	git cherry-pick -x $sha1 &&
	git log -1 --pretty=format:%B >actual &&

	printf "\n(cherry picked from commit %s)\n" $sha1 >>msg &&
	test_cmp msg actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2d6e386 base: commit message

HEAD is now at df2a63d initial
[detached HEAD 96716be] title
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - cherry-pick -x handles commits with no NL at end of message

expecting success of 3511.14 'cherry-pick -x handles commits with no footer and no NL at end of message': 
	pristine_detach initial &&
	printf "title\n\nnot a footer" >msg &&
	sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
	git cherry-pick -x $sha1 &&
	git log -1 --pretty=format:%B >actual &&

	printf "\n\n(cherry picked from commit %s)\n" $sha1 >>msg &&
	test_cmp msg actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  96716be title

HEAD is now at df2a63d initial
[detached HEAD 8c5d63f] title
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 14 - cherry-pick -x handles commits with no footer and no NL at end of message

expecting success of 3511.15 'cherry-pick -s handles commits with no NL at end of message': 
	pristine_detach initial &&
	printf "title\n\nSigned-off-by: A <a@example.com>" >msg &&
	sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
	git cherry-pick -s $sha1 &&
	git log -1 --pretty=format:%B >actual &&

	printf "\nSigned-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\n" >>msg &&
	test_cmp msg actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  8c5d63f title

HEAD is now at df2a63d initial
[detached HEAD 6671fda] title
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - cherry-pick -s handles commits with no NL at end of message

expecting success of 3511.16 'cherry-pick -s handles commits with no footer and no NL at end of message': 
	pristine_detach initial &&
	printf "title\n\nnot a footer" >msg &&
	sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
	git cherry-pick -s $sha1 &&
	git log -1 --pretty=format:%B >actual &&

	printf "\n\nSigned-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\n" >>msg &&
	test_cmp msg actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6671fda title

HEAD is now at df2a63d initial
[detached HEAD 19f481d] title
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 16 - cherry-pick -s handles commits with no footer and no NL at end of message

expecting success of 3511.17 'cherry-pick -x treats "(cherry picked from..." line as part of footer': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-with-cherry-footer^0) &&
	git cherry-pick -x mesg-with-cherry-footer &&
	cat <<-EOF >expect &&
		$mesg_with_cherry_footer
		(cherry picked from commit $sha1)
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  19f481d title

HEAD is now at df2a63d initial
[detached HEAD 7b5eb6d] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 17 - cherry-pick -x treats "(cherry picked from..." line as part of footer

expecting success of 3511.18 'cherry-pick -s treats "(cherry picked from..." line as part of footer': 
	pristine_detach initial &&
	git cherry-pick -s mesg-with-cherry-footer &&
	cat <<-EOF >expect &&
		$mesg_with_cherry_footer
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7b5eb6d base: commit message

HEAD is now at df2a63d initial
[detached HEAD b468a7b] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 18 - cherry-pick -s treats "(cherry picked from..." line as part of footer

expecting success of 3511.19 'cherry-pick -x -s treats "(cherry picked from..." line as part of footer': 
	pristine_detach initial &&
	sha1=$(git rev-parse mesg-with-cherry-footer^0) &&
	git cherry-pick -x -s mesg-with-cherry-footer &&
	cat <<-EOF >expect &&
		$mesg_with_cherry_footer
		(cherry picked from commit $sha1)
		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b468a7b base: commit message

HEAD is now at df2a63d initial
[detached HEAD c7c741c] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - cherry-pick -x -s treats "(cherry picked from..." line as part of footer

expecting success of 3511.20 'cherry-pick preserves commit message': 
	pristine_detach initial &&
	printf "$mesg_unclean" >expect &&
	git log -1 --pretty=format:%B mesg-unclean >actual &&
	test_cmp expect actual &&
	git cherry-pick mesg-unclean &&
	git log -1 --pretty=format:%B >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c7c741c base: commit message

HEAD is now at df2a63d initial
[detached HEAD 7a2ed43] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 20 - cherry-pick preserves commit message

expecting success of 3511.21 'cherry-pick -x cleans commit message': 
	pristine_detach initial &&
	git cherry-pick -x mesg-unclean &&
	git log -1 --pretty=format:%B >actual &&
	printf "%s\n(cherry picked from commit %s)\n" \
		"$mesg_unclean" $(git rev-parse mesg-unclean) |
			git stripspace >expect &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7a2ed43 base: commit message

HEAD is now at df2a63d initial
[detached HEAD ad2d5bc] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 21 - cherry-pick -x cleans commit message

expecting success of 3511.22 'cherry-pick -x respects commit.cleanup': 
	pristine_detach initial &&
	git -c commit.cleanup=strip cherry-pick -x mesg-unclean &&
	git log -1 --pretty=format:%B >actual &&
	printf "%s\n(cherry picked from commit %s)\n" \
		"$mesg_unclean" $(git rev-parse mesg-unclean) |
			git stripspace -s >expect &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ad2d5bc base: commit message

HEAD is now at df2a63d initial
[detached HEAD fd8c8fa] base: commit message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 22 - cherry-pick -x respects commit.cleanup

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3510-cherry-pick-sequence.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3510-cherry-pick-sequence/.git/
expecting success of 3510.1 'setup': 
	git config advice.detachedhead false &&
	echo unrelated >unrelated &&
	git add unrelated &&
	test_commit initial foo a &&
	test_commit base foo b &&
	test_commit unrelatedpick unrelated reallyunrelated &&
	test_commit picked foo c &&
	test_commit anotherpick foo d &&
	test_commit yetanotherpick foo e &&
	pristine_detach initial &&
	test_commit conflicting unrelated

[master (root-commit) df2a63d] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 foo
 create mode 100644 unrelated
[master dc0113b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 24c5742] unrelatedpick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master fdc0b12] picked
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 965fed4] anotherpick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 55c7d12] yetanotherpick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at df2a63d initial
[detached HEAD d520364] conflicting
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3510.2 'cherry-pick persists data on failure': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick -s base..anotherpick &&
	test_path_is_dir .git/sequencer &&
	test_path_is_file .git/sequencer/head &&
	test_path_is_file .git/sequencer/todo &&
	test_path_is_file .git/sequencer/opts

Previous HEAD position was d520364 conflicting
HEAD is now at df2a63d initial
[detached HEAD 2fa73e8] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 2 - cherry-pick persists data on failure

expecting success of 3510.3 'cherry-pick mid-cherry-pick-sequence': 
	pristine_detach initial &&
	test_must_fail git cherry-pick base..anotherpick &&
	test_cmp_rev picked CHERRY_PICK_HEAD &&
	# "oops, I forgot that these patches rely on the change from base"
	git checkout HEAD foo &&
	git cherry-pick base &&
	git cherry-pick picked &&
	git cherry-pick --continue &&
	git diff --exit-code anotherpick

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2fa73e8 unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD 7fdfeeb] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Updated 1 path from a9867be
[detached HEAD 28eafda] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 4a5cd69] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 49d5115] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - cherry-pick mid-cherry-pick-sequence

expecting success of 3510.4 'cherry-pick persists opts correctly': 
	pristine_detach initial &&
	# to make sure that the session to cherry-pick a sequence
	# gets interrupted, use a high-enough number that is larger
	# than the number of parents of any commit we have created
	mainline=4 &&
	test_expect_code 128 git cherry-pick -s -m $mainline --strategy=recursive -X patience -X ours --edit initial..anotherpick &&
	test_path_is_dir .git/sequencer &&
	test_path_is_file .git/sequencer/head &&
	test_path_is_file .git/sequencer/todo &&
	test_path_is_file .git/sequencer/opts &&
	echo "true" >expect &&
	git config --file=.git/sequencer/opts --get-all options.signoff >actual &&
	test_cmp expect actual &&
	echo "$mainline" >expect &&
	git config --file=.git/sequencer/opts --get-all options.mainline >actual &&
	test_cmp expect actual &&
	echo "recursive" >expect &&
	git config --file=.git/sequencer/opts --get-all options.strategy >actual &&
	test_cmp expect actual &&
	cat >expect <<-\EOF &&
	patience
	ours
	EOF
	git config --file=.git/sequencer/opts --get-all options.strategy-option >actual &&
	test_cmp expect actual &&
	echo "true" >expect &&
	git config --file=.git/sequencer/opts --get-all options.edit >actual &&
	test_cmp expect actual

Warning: you are leaving 4 commits behind, not connected to
any of your branches:

  49d5115 anotherpick
  4a5cd69 picked
  28eafda base
  7fdfeeb unrelatedpick

HEAD is now at df2a63d initial
error: commit dc0113b541050fbc624688af31e35b1d246f20fc does not have parent 4
fatal: cherry-pick failed
ok 4 - cherry-pick persists opts correctly

expecting success of 3510.5 'revert persists opts correctly': 
	pristine_detach initial &&
	# to make sure that the session to revert a sequence
	# gets interrupted, revert commits that are not in the history
	# of HEAD.
	test_expect_code 1 git revert -s --strategy=recursive -X patience -X ours --no-edit picked yetanotherpick &&
	test_path_is_dir .git/sequencer &&
	test_path_is_file .git/sequencer/head &&
	test_path_is_file .git/sequencer/todo &&
	test_path_is_file .git/sequencer/opts &&
	echo "true" >expect &&
	git config --file=.git/sequencer/opts --get-all options.signoff >actual &&
	test_cmp expect actual &&
	echo "recursive" >expect &&
	git config --file=.git/sequencer/opts --get-all options.strategy >actual &&
	test_cmp expect actual &&
	cat >expect <<-\EOF &&
	patience
	ours
	EOF
	git config --file=.git/sequencer/opts --get-all options.strategy-option >actual &&
	test_cmp expect actual &&
	echo "false" >expect &&
	git config --file=.git/sequencer/opts --get-all options.edit >actual &&
	test_cmp expect actual

HEAD is now at df2a63d initial
Auto-merging foo
Skipped foo (merged same as existing)
HEAD detached at df2a63d
Revert currently in progress.
  (run "git revert --continue" to continue)
  (use "git revert --skip" to skip this patch)
  (use "git revert --abort" to cancel the revert operation)

nothing to commit, working tree clean
ok 5 - revert persists opts correctly

expecting success of 3510.6 'cherry-pick cleans up sequencer state upon success': 
	pristine_detach initial &&
	git cherry-pick initial..picked &&
	test_path_is_missing .git/sequencer

HEAD is now at df2a63d initial
[detached HEAD 86ee3fa] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 2b8ae83] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD a222ac0] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - cherry-pick cleans up sequencer state upon success

expecting success of 3510.7 'cherry-pick --skip requires cherry-pick in progress': 
	pristine_detach initial &&
	test_must_fail git cherry-pick --skip

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  a222ac0 picked
  2b8ae83 unrelatedpick
  86ee3fa base

HEAD is now at df2a63d initial
error: no cherry-pick in progress
fatal: cherry-pick failed
ok 7 - cherry-pick --skip requires cherry-pick in progress

expecting success of 3510.8 'revert --skip requires revert in progress': 
	pristine_detach initial &&
	test_must_fail git revert --skip

HEAD is now at df2a63d initial
error: no revert in progress
fatal: revert failed
ok 8 - revert --skip requires revert in progress

expecting success of 3510.9 'cherry-pick --skip to skip commit': 
	pristine_detach initial &&
	test_must_fail git cherry-pick anotherpick &&
	test_must_fail git revert --skip &&
	git cherry-pick --skip &&
	test_cmp_rev initial HEAD &&
	test_path_is_missing .git/CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 965fed4... anotherpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
error: no revert in progress
fatal: revert failed
ok 9 - cherry-pick --skip to skip commit

expecting success of 3510.10 'revert --skip to skip commit': 
	pristine_detach anotherpick &&
	test_must_fail git revert anotherpick~1 &&
	test_must_fail git cherry-pick --skip &&
	git revert --skip &&
	test_cmp_rev anotherpick HEAD

Previous HEAD position was df2a63d initial
HEAD is now at 965fed4 anotherpick
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
error: no cherry-pick in progress
fatal: cherry-pick failed
ok 10 - revert --skip to skip commit

expecting success of 3510.11 'skip "empty" commit': 
	pristine_detach picked &&
	test_commit dummy foo d &&
	test_must_fail git cherry-pick anotherpick 2>err &&
	test_i18ngrep "git cherry-pick --skip" err &&
	git cherry-pick --skip &&
	test_cmp_rev dummy HEAD

Previous HEAD position was 965fed4 anotherpick
HEAD is now at fdc0b12 picked
[detached HEAD 4b36a1c] dummy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD detached from fdc0b12
You are currently cherry-picking commit 965fed4.
  (all conflicts fixed: run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	err

nothing added to commit but untracked files present (use "git add" to track)
Otherwise, please use 'git cherry-pick --skip'
ok 11 - skip "empty" commit

expecting success of 3510.12 'skip a commit and check if rest of sequence is correct': 
	pristine_detach initial &&
	echo e >expect &&
	cat >expect.log <<-EOF &&
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	unrelated
	OBJID
	:000000 100644 OBJID OBJID A	foo
	:000000 100644 OBJID OBJID A	unrelated
	EOF
	test_must_fail git cherry-pick base..yetanotherpick &&
	test_must_fail git cherry-pick --skip &&
	echo d >foo &&
	git add foo &&
	git cherry-pick --continue &&
	{
		git rev-list HEAD |
		git diff-tree --root --stdin |
		sed "s/$OID_REGEX/OBJID/g"
	} >actual.log &&
	test_cmp expect foo &&
	test_cmp expect.log actual.log

Previous HEAD position was 4b36a1c dummy
HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 965fed4... anotherpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 612ff5e] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 61f8ec3] yetanotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - skip a commit and check if rest of sequence is correct

expecting success of 3510.13 'check advice when we move HEAD by committing': 
	pristine_detach initial &&
	cat >expect <<-EOF &&
	error: there is nothing to skip
	hint: have you committed already?
	hint: try "git cherry-pick --continue"
	fatal: cherry-pick failed
	EOF
	test_must_fail git cherry-pick base..yetanotherpick &&
	echo c >foo &&
	git commit -a &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_must_fail git cherry-pick --skip 2>advice &&
	test_cmp expect advice

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  61f8ec3 yetanotherpick
  612ff5e anotherpick
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 43fe10f] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - check advice when we move HEAD by committing

expecting success of 3510.14 'selectively advise --skip while launching another sequence': 
	pristine_detach initial &&
	cat >expect <<-EOF &&
	error: cherry-pick is already in progress
	hint: try "git cherry-pick (--continue | --skip | --abort | --quit)"
	fatal: cherry-pick failed
	EOF
	test_must_fail git cherry-pick picked..yetanotherpick &&
	test_must_fail git cherry-pick picked..yetanotherpick 2>advice &&
	test_cmp expect advice &&
	cat >expect <<-EOF &&
	error: cherry-pick is already in progress
	hint: try "git cherry-pick (--continue | --abort | --quit)"
	fatal: cherry-pick failed
	EOF
	git reset --merge &&
	test_must_fail git cherry-pick picked..yetanotherpick 2>advice &&
	test_cmp expect advice

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  43fe10f picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 965fed4... anotherpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 14 - selectively advise --skip while launching another sequence

expecting success of 3510.15 'allow skipping commit but not abort for a new history': 
	pristine_detach initial &&
	cat >expect <<-EOF &&
	error: cannot abort from a branch yet to be born
	fatal: cherry-pick failed
	EOF
	git checkout --orphan new_disconnected &&
	git reset --hard &&
	test_must_fail git cherry-pick anotherpick &&
	test_must_fail git cherry-pick --abort 2>advice &&
	git cherry-pick --skip &&
	test_cmp expect advice

HEAD is now at df2a63d initial
Switched to a new branch 'new_disconnected'
CONFLICT (modify/delete): foo deleted in HEAD and modified in 965fed4 (anotherpick).  Version 965fed4 (anotherpick) of foo left in tree.
error: could not apply 965fed4... anotherpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 15 - allow skipping commit but not abort for a new history

expecting success of 3510.16 'allow skipping stopped cherry-pick because of untracked file modifications': 
	test_when_finished "rm unrelated" &&
	pristine_detach initial &&
	git rm --cached unrelated &&
	git commit -m "untrack unrelated" &&
	test_must_fail git cherry-pick initial base &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	git cherry-pick --skip

HEAD is now at df2a63d initial
rm 'unrelated'
[detached HEAD 44a5ca1] untrack unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 unrelated
error: The following untracked working tree files would be overwritten by merge:
	unrelated
Please move or remove them before you merge.
Aborting
fatal: cherry-pick failed
[detached HEAD f847cb0] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 16 - allow skipping stopped cherry-pick because of untracked file modifications

expecting success of 3510.17 '--quit does not complain when no cherry-pick is in progress': 
	pristine_detach initial &&
	git cherry-pick --quit

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  f847cb0 base
  44a5ca1 untrack unrelated

HEAD is now at df2a63d initial
ok 17 - --quit does not complain when no cherry-pick is in progress

expecting success of 3510.18 '--abort requires cherry-pick in progress': 
	pristine_detach initial &&
	test_must_fail git cherry-pick --abort

HEAD is now at df2a63d initial
error: no cherry-pick or revert in progress
fatal: cherry-pick failed
ok 18 - --abort requires cherry-pick in progress

expecting success of 3510.19 '--quit cleans up sequencer state': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..picked &&
	git cherry-pick --quit &&
	test_path_is_missing .git/sequencer &&
	test_path_is_missing .git/CHERRY_PICK_HEAD

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 19 - --quit cleans up sequencer state

expecting success of 3510.20 '--quit keeps HEAD and conflicted index intact': 
	pristine_detach initial &&
	cat >expect <<-\EOF &&
	OBJID
	:100644 100644 OBJID OBJID M	unrelated
	OBJID
	:000000 100644 OBJID OBJID A	foo
	:000000 100644 OBJID OBJID A	unrelated
	EOF
	test_expect_code 1 git cherry-pick base..picked &&
	git cherry-pick --quit &&
	test_path_is_missing .git/sequencer &&
	test_must_fail git update-index --refresh &&
	{
		git rev-list HEAD |
		git diff-tree --root --stdin |
		sed "s/$OID_REGEX/OBJID/g"
	} >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
foo: needs merge
ok 20 - --quit keeps HEAD and conflicted index intact

expecting success of 3510.21 '--abort to cancel multiple cherry-pick': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	git cherry-pick --abort &&
	test_path_is_missing .git/sequencer &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_cmp_rev initial HEAD &&
	git update-index --refresh &&
	git diff-index --exit-code HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 21 - --abort to cancel multiple cherry-pick

expecting success of 3510.22 '--abort to cancel single cherry-pick': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick picked &&
	git cherry-pick --abort &&
	test_path_is_missing .git/sequencer &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_cmp_rev initial HEAD &&
	git update-index --refresh &&
	git diff-index --exit-code HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 22 - --abort to cancel single cherry-pick

expecting success of 3510.23 '--abort does not unsafely change HEAD': 
	pristine_detach initial &&
	test_must_fail git cherry-pick picked anotherpick &&
	git reset --hard base &&
	test_must_fail git cherry-pick picked anotherpick &&
	git cherry-pick --abort 2>actual &&
	test_i18ngrep "You seem to have moved HEAD" actual &&
	test_cmp_rev base HEAD

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
HEAD is now at dc0113b base
error: cherry-pick is already in progress
hint: try "git cherry-pick (--continue | --abort | --quit)"
fatal: cherry-pick failed
warning: You seem to have moved HEAD. Not rewinding, check your HEAD!
ok 23 - --abort does not unsafely change HEAD

expecting success of 3510.24 'cherry-pick --abort to cancel multiple revert': 
	pristine_detach anotherpick &&
	test_expect_code 1 git revert base..picked &&
	git cherry-pick --abort &&
	test_path_is_missing .git/sequencer &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_cmp_rev anotherpick HEAD &&
	git update-index --refresh &&
	git diff-index --exit-code HEAD

Previous HEAD position was dc0113b base
HEAD is now at 965fed4 anotherpick
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 24 - cherry-pick --abort to cancel multiple revert

expecting success of 3510.25 'revert --abort works, too': 
	pristine_detach anotherpick &&
	test_expect_code 1 git revert base..picked &&
	git revert --abort &&
	test_path_is_missing .git/sequencer &&
	test_cmp_rev anotherpick HEAD

HEAD is now at 965fed4 anotherpick
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 25 - revert --abort works, too

expecting success of 3510.26 '--abort to cancel single revert': 
	pristine_detach anotherpick &&
	test_expect_code 1 git revert picked &&
	git revert --abort &&
	test_path_is_missing .git/sequencer &&
	test_cmp_rev anotherpick HEAD &&
	git update-index --refresh &&
	git diff-index --exit-code HEAD

HEAD is now at 965fed4 anotherpick
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 26 - --abort to cancel single revert

expecting success of 3510.27 '--abort keeps unrelated change, easy case': 
	pristine_detach unrelatedpick &&
	echo changed >expect &&
	test_expect_code 1 git cherry-pick picked..yetanotherpick &&
	echo changed >unrelated &&
	git cherry-pick --abort &&
	test_cmp expect unrelated

Previous HEAD position was 965fed4 anotherpick
HEAD is now at 24c5742 unrelatedpick
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 965fed4... anotherpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 27 - --abort keeps unrelated change, easy case

expecting success of 3510.28 '--abort refuses to clobber unrelated change, harder case': 
	pristine_detach initial &&
	echo changed >expect &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo changed >unrelated &&
	test_must_fail git cherry-pick --abort &&
	test_cmp expect unrelated &&
	git rev-list HEAD >log &&
	test_line_count = 2 log &&
	test_must_fail git update-index --refresh &&

	git checkout unrelated &&
	git cherry-pick --abort &&
	test_cmp_rev initial HEAD

Previous HEAD position was 24c5742 unrelatedpick
HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
error: Entry 'unrelated' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'df2a63d8a410bba7d3f608203e12bb371c76d4a8'.
fatal: cherry-pick failed
foo: needs merge
unrelated: needs update
Updated 1 path from the index
ok 28 - --abort refuses to clobber unrelated change, harder case

expecting success of 3510.29 'cherry-pick still writes sequencer state when one commit is left': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..picked &&
	test_path_is_dir .git/sequencer &&
	echo "resolved" >foo &&
	git add foo &&
	git commit &&
	{
		git rev-list HEAD |
		git diff-tree --root --stdin |
		sed "s/$OID_REGEX/OBJID/g"
	} >actual &&
	cat >expect <<-\EOF &&
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	unrelated
	OBJID
	:000000 100644 OBJID OBJID A	foo
	:000000 100644 OBJID OBJID A	unrelated
	EOF
	test_cmp expect actual

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 9781982] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 29 - cherry-pick still writes sequencer state when one commit is left

expecting success of 3510.30 '--abort after last commit in sequence': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..picked &&
	git cherry-pick --abort &&
	test_path_is_missing .git/sequencer &&
	test_path_is_missing .git/CHERRY_PICK_HEAD &&
	test_cmp_rev initial HEAD &&
	git update-index --refresh &&
	git diff-index --exit-code HEAD

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  9781982 picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 30 - --abort after last commit in sequence

expecting success of 3510.31 'cherry-pick does not implicitly stomp an existing operation': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	test-tool chmtime --get .git/sequencer >expect &&
	test_expect_code 128 git cherry-pick unrelatedpick &&
	test-tool chmtime --get .git/sequencer >actual &&
	test_cmp expect actual

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
error: Cherry-picking is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: cherry-pick failed
ok 31 - cherry-pick does not implicitly stomp an existing operation

expecting success of 3510.32 '--continue complains when no cherry-pick is in progress': 
	pristine_detach initial &&
	test_expect_code 128 git cherry-pick --continue

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c738c4d unrelatedpick

HEAD is now at df2a63d initial
error: no cherry-pick or revert in progress
fatal: cherry-pick failed
ok 32 - --continue complains when no cherry-pick is in progress

expecting success of 3510.33 '--continue complains when there are unresolved conflicts': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	test_expect_code 128 git cherry-pick --continue

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
U	foo
ok 33 - --continue complains when there are unresolved conflicts

expecting success of 3510.34 '--continue of single cherry-pick': 
	pristine_detach initial &&
	echo c >expect &&
	test_must_fail git cherry-pick picked &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&

	test_cmp expect foo &&
	test_cmp_rev initial HEAD^ &&
	git diff --exit-code HEAD &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c738c4d unrelatedpick

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 9aabd79] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 34 - --continue of single cherry-pick

expecting success of 3510.35 '--continue of single revert': 
	pristine_detach initial &&
	echo resolved >expect &&
	echo "Revert \"picked\"" >expect.msg &&
	test_must_fail git revert picked &&
	echo resolved >foo &&
	git add foo &&
	git cherry-pick --continue &&

	git diff --exit-code HEAD &&
	test_cmp expect foo &&
	test_cmp_rev initial HEAD^ &&
	git diff-tree -s --pretty=tformat:%s HEAD >msg &&
	test_cmp expect.msg msg &&
	test_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&
	test_must_fail git rev-parse --verify REVERT_HEAD

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9aabd79 picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not revert fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
[detached HEAD 267eac8] Revert "picked"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
fatal: Needed a single revision
ok 35 - --continue of single revert

expecting success of 3510.36 '--continue after resolving conflicts': 
	pristine_detach initial &&
	echo d >expect &&
	cat >expect.log <<-\EOF &&
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	unrelated
	OBJID
	:000000 100644 OBJID OBJID A	foo
	:000000 100644 OBJID OBJID A	unrelated
	EOF
	test_must_fail git cherry-pick base..anotherpick &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&
	{
		git rev-list HEAD |
		git diff-tree --root --stdin |
		sed "s/$OID_REGEX/OBJID/g"
	} >actual.log &&
	test_cmp expect foo &&
	test_cmp expect.log actual.log

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  267eac8 Revert "picked"

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 43fe10f] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 3b1768d] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 36 - --continue after resolving conflicts

expecting success of 3510.37 '--continue after resolving conflicts and committing': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "c" >foo &&
	git add foo &&
	git commit &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	{
		git rev-list HEAD |
		git diff-tree --root --stdin |
		sed "s/$OID_REGEX/OBJID/g"
	} >actual &&
	cat >expect <<-\EOF &&
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	foo
	OBJID
	:100644 100644 OBJID OBJID M	unrelated
	OBJID
	:000000 100644 OBJID OBJID A	foo
	:000000 100644 OBJID OBJID A	unrelated
	EOF
	test_cmp expect actual

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  3b1768d anotherpick
  43fe10f picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 43fe10f] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 3b1768d] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 37 - --continue after resolving conflicts and committing

expecting success of 3510.38 '--continue asks for help after resolving patch to nil': 
	pristine_detach conflicting &&
	test_must_fail git cherry-pick initial..picked &&

	test_cmp_rev unrelatedpick CHERRY_PICK_HEAD &&
	git checkout HEAD -- unrelated &&
	test_must_fail git cherry-pick --continue 2>msg &&
	test_i18ngrep "The previous cherry-pick is now empty" msg

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  3b1768d anotherpick
  43fe10f picked
  c738c4d unrelatedpick

HEAD is now at d520364 conflicting
[detached HEAD 838794c] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging unrelated
CONFLICT (content): Merge conflict in unrelated
error: could not apply 24c5742... unrelatedpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
HEAD detached from d520364
Cherry-pick currently in progress.
  (run "git cherry-pick --continue" to continue)
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	msg

nothing added to commit but untracked files present (use "git add" to track)
The previous cherry-pick is now empty, possibly due to conflict resolution.
ok 38 - --continue asks for help after resolving patch to nil

expecting success of 3510.39 'follow advice and skip nil patch': 
	pristine_detach conflicting &&
	test_must_fail git cherry-pick initial..picked &&

	git checkout HEAD -- unrelated &&
	test_must_fail git cherry-pick --continue &&
	git reset &&
	git cherry-pick --continue &&

	git rev-list initial..HEAD >commits &&
	test_line_count = 3 commits

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  838794c base

HEAD is now at d520364 conflicting
[detached HEAD 838794c] base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging unrelated
CONFLICT (content): Merge conflict in unrelated
error: could not apply 24c5742... unrelatedpick
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
HEAD detached from d520364
Cherry-pick currently in progress.
  (run "git cherry-pick --continue" to continue)
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

nothing to commit, working tree clean
[detached HEAD fef14ec] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 39 - follow advice and skip nil patch

expecting success of 3510.40 '--continue respects opts': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick -x base..anotherpick &&
	echo "c" >foo &&
	git add foo &&
	git commit &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	git cat-file commit HEAD >anotherpick_msg &&
	git cat-file commit HEAD~1 >picked_msg &&
	git cat-file commit HEAD~2 >unrelatedpick_msg &&
	git cat-file commit HEAD~3 >initial_msg &&
	! grep "cherry picked from" initial_msg &&
	grep "cherry picked from" unrelatedpick_msg &&
	grep "cherry picked from" picked_msg &&
	grep "cherry picked from" anotherpick_msg

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  fef14ec picked
  838794c base

HEAD is now at df2a63d initial
[detached HEAD a731ebf] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 4d735ac] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 3834c90] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
(cherry picked from commit 24c574226938b210285578b30b436ec6119f7a7d)
(cherry picked from commit fdc0b12b2eb6de44c0df7d41b045ab2b44b6c37c)
(cherry picked from commit 965fed4c41239668ada422bca0c600444cc00e82)
ok 40 - --continue respects opts

expecting success of 3510.41 '--continue of single-pick respects -x': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -x picked &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	git cat-file commit HEAD >msg &&
	grep "cherry picked from" msg

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  3834c90 anotherpick
  4d735ac picked
  a731ebf unrelatedpick

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 775318b] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
(cherry picked from commit fdc0b12b2eb6de44c0df7d41b045ab2b44b6c37c)
ok 41 - --continue of single-pick respects -x

expecting success of 3510.42 '--continue respects -x in first commit in multi-pick': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -x picked anotherpick &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	git cat-file commit HEAD^ >msg &&
	picked=$(git rev-parse --verify picked) &&
	grep "cherry picked from.*$picked" msg

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  775318b picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 775318b] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD d310f74] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
(cherry picked from commit fdc0b12b2eb6de44c0df7d41b045ab2b44b6c37c)
ok 42 - --continue respects -x in first commit in multi-pick

checking known breakage of 3510.43 '--signoff is automatically propagated to resolved conflict': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick --signoff base..anotherpick &&
	echo "c" >foo &&
	git add foo &&
	git commit &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	git cat-file commit HEAD >anotherpick_msg &&
	git cat-file commit HEAD~1 >picked_msg &&
	git cat-file commit HEAD~2 >unrelatedpick_msg &&
	git cat-file commit HEAD~3 >initial_msg &&
	! grep "Signed-off-by:" initial_msg &&
	grep "Signed-off-by:" unrelatedpick_msg &&
	! grep "Signed-off-by:" picked_msg &&
	grep "Signed-off-by:" anotherpick_msg

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  d310f74 anotherpick
  775318b picked

HEAD is now at df2a63d initial
[detached HEAD 9b2cda6] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD f7bab3d] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD cf7cfba] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Signed-off-by: C O Mitter <committer@example.com>
Signed-off-by: C O Mitter <committer@example.com>
not ok 43 - --signoff is automatically propagated to resolved conflict # TODO known breakage

checking known breakage of 3510.44 '--signoff dropped for implicit commit of resolution, multi-pick case': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -s picked anotherpick &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&

	git diff --exit-code HEAD &&
	test_cmp_rev initial HEAD^^ &&
	git cat-file commit HEAD^ >msg &&
	! grep Signed-off-by: msg

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  cf7cfba anotherpick
  f7bab3d picked
  9b2cda6 unrelatedpick

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD c80a680] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD d9a8514] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Signed-off-by: C O Mitter <committer@example.com>
not ok 44 - --signoff dropped for implicit commit of resolution, multi-pick case # TODO known breakage

checking known breakage of 3510.45 'sign-off needs to be reaffirmed after conflict resolution, single-pick case': 
	pristine_detach initial &&
	test_must_fail git cherry-pick -s picked &&
	echo c >foo &&
	git add foo &&
	git cherry-pick --continue &&

	git diff --exit-code HEAD &&
	test_cmp_rev initial HEAD^ &&
	git cat-file commit HEAD >msg &&
	! grep Signed-off-by: msg

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  d9a8514 anotherpick
  c80a680 picked

HEAD is now at df2a63d initial
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD c80a680] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Signed-off-by: C O Mitter <committer@example.com>
not ok 45 - sign-off needs to be reaffirmed after conflict resolution, single-pick case # TODO known breakage

expecting success of 3510.46 'malformed instruction sheet 1': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "resolved" >foo &&
	git add foo &&
	git commit &&
	sed "s/pick /pick/" .git/sequencer/todo >new_sheet &&
	cp new_sheet .git/sequencer/todo &&
	test_expect_code 128 git cherry-pick --continue

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c80a680 picked

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 9781982] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
error: missing arguments for pick
error: invalid line 1: pickfdc0b12 picked
error: missing arguments for pick
error: invalid line 2: pick965fed4 anotherpick
error: unusable instruction sheet: '.git/sequencer/todo'
fatal: cherry-pick failed
ok 46 - malformed instruction sheet 1

expecting success of 3510.47 'malformed instruction sheet 2': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "resolved" >foo &&
	git add foo &&
	git commit &&
	sed "s/pick/revert/" .git/sequencer/todo >new_sheet &&
	cp new_sheet .git/sequencer/todo &&
	test_expect_code 128 git cherry-pick --continue

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  9781982 picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 9781982] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
error: cannot cherry-pick during a revert.
fatal: cherry-pick failed
ok 47 - malformed instruction sheet 2

expecting success of 3510.48 'empty commit set (no commits to walk)': 
	pristine_detach initial &&
	test_expect_code 128 git cherry-pick base..base

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  9781982 picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
error: empty commit set passed
fatal: cherry-pick failed
ok 48 - empty commit set (no commits to walk)

expecting success of 3510.49 'empty commit set (culled during walk)': 
	pristine_detach initial &&
	test_expect_code 128 git cherry-pick -2 --author=no.such.author base

HEAD is now at df2a63d initial
error: empty commit set passed
fatal: cherry-pick failed
ok 49 - empty commit set (culled during walk)

expecting success of 3510.50 'malformed instruction sheet 3': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "resolved" >foo &&
	git add foo &&
	git commit &&
	sed "s/pick \([0-9a-f]*\)/pick $_r10/" .git/sequencer/todo >new_sheet &&
	cp new_sheet .git/sequencer/todo &&
	test_expect_code 128 git cherry-pick --continue

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 9781982] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
error: could not parse 'fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12'
error: invalid line 1: pick fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12fdc0b12 picked
error: could not parse '965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4'
error: invalid line 2: pick 965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4965fed4 anotherpick
error: unusable instruction sheet: '.git/sequencer/todo'
fatal: cherry-pick failed
ok 50 - malformed instruction sheet 3

expecting success of 3510.51 'instruction sheet, fat-fingers version': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "c" >foo &&
	git add foo &&
	git commit &&
	sed "s/pick \([0-9a-f]*\)/pick 	 \1 	/" .git/sequencer/todo >new_sheet &&
	cp new_sheet .git/sequencer/todo &&
	git cherry-pick --continue

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  9781982 picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 43fe10f] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 3b1768d] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 51 - instruction sheet, fat-fingers version

expecting success of 3510.52 'commit descriptions in insn sheet are optional': 
	pristine_detach initial &&
	test_expect_code 1 git cherry-pick base..anotherpick &&
	echo "c" >foo &&
	git add foo &&
	git commit &&
	cut -d" " -f1,2 .git/sequencer/todo >new_sheet &&
	cp new_sheet .git/sequencer/todo &&
	git cherry-pick --continue &&
	test_path_is_missing .git/sequencer &&
	git rev-list HEAD >commits &&
	test_line_count = 4 commits

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  3b1768d anotherpick
  43fe10f picked
  c738c4d unrelatedpick

HEAD is now at df2a63d initial
[detached HEAD c738c4d] unrelatedpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply fdc0b12... picked
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[detached HEAD 43fe10f] picked
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 3b1768d] anotherpick
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 52 - commit descriptions in insn sheet are optional

# still have 3 known breakage(s)
# passed all remaining 49 test(s)
1..52
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3512-cherry-pick-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/.git/
expecting success of 3512.1 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1/.git/
[main (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub2/.git/
[main (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_repo/.git/
[main (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'main'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
[no_submodule 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_test_func: added submodule creates empty directory

expecting success of 3512.2 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
[no_submodule 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 3512.3 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
[replace_sub1_with_file 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 3512.4 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
[replace_sub1_with_directory a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_test_func: replace directory with submodule

expecting success of 3512.5 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
[add_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
ok 5 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 3512.6 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
[add_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
ok 6 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 3512.7 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
fatal: cherry-pick failed
ok 7 - git_test_func: replace submodule with a directory must fail

expecting success of 3512.8 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
fatal: cherry-pick failed
ok 8 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 3512.9 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
[add_sub1 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git cherry-pick replace_sub1_with_file
not ok 9 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 3512.10 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
[add_sub1 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git cherry-pick replace_sub1_with_file
not ok 10 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 3512.11 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
[add_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_test_func: modified submodule does not update submodule work tree

expecting success of 3512.12 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
[add_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 3512.13 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
[invalid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 3512.14 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
fatal: cherry-pick failed
ok 14 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 3512.15 'unrelated submodule/file conflict is ignored': 
	test_config_global protocol.file.allow always &&

	test_create_repo sub &&

	touch sub/file &&
	git -C sub add file &&
	git -C sub commit -m "add a file in a submodule" &&

	test_create_repo a_repo &&
	(
		cd a_repo &&
		>a_file &&
		git add a_file &&
		git commit -m "add a file" &&

		git branch test &&
		git checkout test &&

		mkdir sub &&
		>sub/content &&
		git add sub/content &&
		git commit -m "add a regular folder with name sub" &&

		echo "123" >a_file &&
		git add a_file &&
		git commit -m "modify a file" &&

		git checkout main &&

		git submodule add ../sub sub &&
		git submodule update sub &&
		git commit -m "add a submodule info folder with name sub" &&

		git cherry-pick test
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/sub/.git/
[main (root-commit) 8e92946] add a file in a submodule
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/a_repo/.git/
[main (root-commit) ab27302] add a file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a_file
Switched to branch 'test'
[test 472972d] add a regular folder with name sub
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub/content
[test 32d3b70] modify a file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3512-cherry-pick-submodule/a_repo/sub'...
done.
[main 77c71a9] add a submodule info folder with name sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[main ec77434] modify a file
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 15 - unrelated submodule/file conflict is ignored

# still have 2 known breakage(s)
# passed all remaining 13 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3432-rebase-fast-forward.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3432-rebase-fast-forward/.git/
expecting success of 3432.1 'setup': 
	test_commit A &&
	test_commit B &&
	test_commit C &&
	test_commit D &&
	git checkout -t -b side

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Switched to a new branch 'side'
branch 'side' set up to track 'main'.
ok 1 - setup

expecting success of 3432.2 'git rebase --apply  with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 2 - git rebase --apply  with no changes is noop with same HEAD

expecting success of 3432.3 'git rebase --apply --no-ff  with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 3 - git rebase --apply --no-ff  with no changes is work with same HEAD

expecting success of 3432.4 'git rebase --merge  with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 4 - git rebase --merge  with no changes is noop with same HEAD

expecting success of 3432.5 'git rebase --merge --no-ff  with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 5 - git rebase --merge --no-ff  with no changes is work with same HEAD

expecting success of 3432.6 'git rebase --merge  (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 6 - git rebase --merge  (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.7 'git rebase --merge --no-ff  (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 7 - git rebase --merge --no-ff  (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.8 'git rebase --apply main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 8 - git rebase --apply main with no changes is noop with same HEAD

expecting success of 3432.9 'git rebase --apply --no-ff main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 9 - git rebase --apply --no-ff main with no changes is work with same HEAD

expecting success of 3432.10 'git rebase --merge main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 10 - git rebase --merge main with no changes is noop with same HEAD

expecting success of 3432.11 'git rebase --merge --no-ff main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 11 - git rebase --merge --no-ff main with no changes is work with same HEAD

expecting success of 3432.12 'git rebase --merge main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 12 - git rebase --merge main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.13 'git rebase --merge --no-ff main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 13 - git rebase --merge --no-ff main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.14 'git rebase --apply --onto B B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 14 - git rebase --apply --onto B B with no changes is noop with same HEAD

expecting success of 3432.15 'git rebase --apply --no-ff --onto B B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 15 - git rebase --apply --no-ff --onto B B with no changes is work with diff HEAD

expecting success of 3432.16 'git rebase --merge --onto B B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 16 - git rebase --merge --onto B B with no changes is noop with same HEAD

expecting success of 3432.17 'git rebase --merge --no-ff --onto B B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 17 - git rebase --merge --no-ff --onto B B with no changes is work with diff HEAD

expecting success of 3432.18 'git rebase --merge --onto B B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 18 - git rebase --merge --onto B B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.19 'git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 19 - git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD

expecting success of 3432.20 'git rebase --apply --onto B... B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 20 - git rebase --apply --onto B... B with no changes is noop with same HEAD

expecting success of 3432.21 'git rebase --apply --no-ff --onto B... B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 21 - git rebase --apply --no-ff --onto B... B with no changes is work with diff HEAD

expecting success of 3432.22 'git rebase --merge --onto B... B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 22 - git rebase --merge --onto B... B with no changes is noop with same HEAD

expecting success of 3432.23 'git rebase --merge --no-ff --onto B... B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 23 - git rebase --merge --no-ff --onto B... B with no changes is work with diff HEAD

expecting success of 3432.24 'git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 24 - git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.25 'git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 25 - git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD

expecting success of 3432.26 'git rebase --apply --onto main... main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 26 - git rebase --apply --onto main... main with no changes is noop with same HEAD

expecting success of 3432.27 'git rebase --apply --no-ff --onto main... main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 27 - git rebase --apply --no-ff --onto main... main with no changes is work with same HEAD

expecting success of 3432.28 'git rebase --merge --onto main... main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 28 - git rebase --merge --onto main... main with no changes is noop with same HEAD

expecting success of 3432.29 'git rebase --merge --no-ff --onto main... main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 29 - git rebase --merge --no-ff --onto main... main with no changes is work with same HEAD

expecting success of 3432.30 'git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 30 - git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.31 'git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 31 - git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.32 'git rebase --apply --keep-base main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 32 - git rebase --apply --keep-base main with no changes is noop with same HEAD

expecting success of 3432.33 'git rebase --apply --no-ff --keep-base main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 33 - git rebase --apply --no-ff --keep-base main with no changes is work with same HEAD

expecting success of 3432.34 'git rebase --merge --keep-base main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 34 - git rebase --merge --keep-base main with no changes is noop with same HEAD

expecting success of 3432.35 'git rebase --merge --no-ff --keep-base main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 35 - git rebase --merge --no-ff --keep-base main with no changes is work with same HEAD

expecting success of 3432.36 'git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 36 - git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.37 'git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 37 - git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.38 'git rebase --apply --keep-base with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 38 - git rebase --apply --keep-base with no changes is noop with same HEAD

expecting success of 3432.39 'git rebase --apply --no-ff --keep-base with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 39 - git rebase --apply --no-ff --keep-base with no changes is work with same HEAD

expecting success of 3432.40 'git rebase --merge --keep-base with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 40 - git rebase --merge --keep-base with no changes is noop with same HEAD

expecting success of 3432.41 'git rebase --merge --no-ff --keep-base with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 41 - git rebase --merge --no-ff --keep-base with no changes is work with same HEAD

expecting success of 3432.42 'git rebase --merge --keep-base (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 42 - git rebase --merge --keep-base (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.43 'git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 43 - git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.44 'git rebase --apply --no-fork-point with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 44 - git rebase --apply --no-fork-point with no changes is noop with same HEAD

expecting success of 3432.45 'git rebase --apply --no-ff --no-fork-point with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 45 - git rebase --apply --no-ff --no-fork-point with no changes is work with same HEAD

expecting success of 3432.46 'git rebase --merge --no-fork-point with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 46 - git rebase --merge --no-fork-point with no changes is noop with same HEAD

expecting success of 3432.47 'git rebase --merge --no-ff --no-fork-point with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 47 - git rebase --merge --no-ff --no-fork-point with no changes is work with same HEAD

expecting success of 3432.48 'git rebase --merge --no-fork-point (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 48 - git rebase --merge --no-fork-point (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.49 'git rebase --merge --no-ff --no-fork-point (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 49 - git rebase --merge --no-ff --no-fork-point (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.50 'git rebase --apply --keep-base --no-fork-point with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 50 - git rebase --apply --keep-base --no-fork-point with no changes is noop with same HEAD

expecting success of 3432.51 'git rebase --apply --no-ff --keep-base --no-fork-point with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 51 - git rebase --apply --no-ff --keep-base --no-fork-point with no changes is work with same HEAD

expecting success of 3432.52 'git rebase --merge --keep-base --no-fork-point with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 52 - git rebase --merge --keep-base --no-fork-point with no changes is noop with same HEAD

expecting success of 3432.53 'git rebase --merge --no-ff --keep-base --no-fork-point with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 53 - git rebase --merge --no-ff --keep-base --no-fork-point with no changes is work with same HEAD

expecting success of 3432.54 'git rebase --merge --keep-base --no-fork-point (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 54 - git rebase --merge --keep-base --no-fork-point (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.55 'git rebase --merge --no-ff --keep-base --no-fork-point (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 55 - git rebase --merge --no-ff --keep-base --no-fork-point (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.56 'git rebase --apply --fork-point main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 56 - git rebase --apply --fork-point main with no changes is noop with same HEAD

expecting success of 3432.57 'git rebase --apply --no-ff --fork-point main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 57 - git rebase --apply --no-ff --fork-point main with no changes is work with same HEAD

expecting success of 3432.58 'git rebase --merge --fork-point main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 58 - git rebase --merge --fork-point main with no changes is noop with same HEAD

expecting success of 3432.59 'git rebase --merge --no-ff --fork-point main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 59 - git rebase --merge --no-ff --fork-point main with no changes is work with same HEAD

expecting success of 3432.60 'git rebase --merge --fork-point main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 60 - git rebase --merge --fork-point main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.61 'git rebase --merge --no-ff --fork-point main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 61 - git rebase --merge --no-ff --fork-point main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.62 'git rebase --apply --fork-point --onto B B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 62 - git rebase --apply --fork-point --onto B B with no changes is noop with same HEAD

expecting success of 3432.63 'git rebase --apply --no-ff --fork-point --onto B B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 63 - git rebase --apply --no-ff --fork-point --onto B B with no changes is work with diff HEAD

expecting success of 3432.64 'git rebase --merge --fork-point --onto B B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 64 - git rebase --merge --fork-point --onto B B with no changes is noop with same HEAD

expecting success of 3432.65 'git rebase --merge --no-ff --fork-point --onto B B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 65 - git rebase --merge --no-ff --fork-point --onto B B with no changes is work with diff HEAD

expecting success of 3432.66 'git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 66 - git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.67 'git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 67 - git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD

expecting success of 3432.68 'git rebase --apply --fork-point --onto B... B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 68 - git rebase --apply --fork-point --onto B... B with no changes is noop with same HEAD

expecting success of 3432.69 'git rebase --apply --no-ff --fork-point --onto B... B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 69 - git rebase --apply --no-ff --fork-point --onto B... B with no changes is work with diff HEAD

expecting success of 3432.70 'git rebase --merge --fork-point --onto B... B with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 70 - git rebase --merge --fork-point --onto B... B with no changes is noop with same HEAD

expecting success of 3432.71 'git rebase --merge --no-ff --fork-point --onto B... B with no changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 71 - git rebase --merge --no-ff --fork-point --onto B... B with no changes is work with diff HEAD

expecting success of 3432.72 'git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 72 - git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.73 'git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 73 - git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with no changes is work with diff HEAD

expecting success of 3432.74 'git rebase --apply --fork-point --onto main... main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 74 - git rebase --apply --fork-point --onto main... main with no changes is noop with same HEAD

expecting success of 3432.75 'git rebase --apply --no-ff --fork-point --onto main... main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 75 - git rebase --apply --no-ff --fork-point --onto main... main with no changes is work with same HEAD

expecting success of 3432.76 'git rebase --merge --fork-point --onto main... main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 76 - git rebase --merge --fork-point --onto main... main with no changes is noop with same HEAD

expecting success of 3432.77 'git rebase --merge --no-ff --fork-point --onto main... main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 77 - git rebase --merge --no-ff --fork-point --onto main... main with no changes is work with same HEAD

expecting success of 3432.78 'git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 78 - git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.79 'git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 79 - git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.80 'git rebase --apply --keep-base --keep-base main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 80 - git rebase --apply --keep-base --keep-base main with no changes is noop with same HEAD

expecting success of 3432.81 'git rebase --apply --no-ff --keep-base --keep-base main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 81 - git rebase --apply --no-ff --keep-base --keep-base main with no changes is work with same HEAD

expecting success of 3432.82 'git rebase --merge --keep-base --keep-base main with no changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 82 - git rebase --merge --keep-base --keep-base main with no changes is noop with same HEAD

expecting success of 3432.83 'git rebase --merge --no-ff --keep-base --keep-base main with no changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 83 - git rebase --merge --no-ff --keep-base --keep-base main with no changes is work with same HEAD

expecting success of 3432.84 'git rebase --merge --keep-base --keep-base main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at be8f64f D
ok 84 - git rebase --merge --keep-base --keep-base main (rebase.abbreviateCommands = true) with no changes is noop with same HEAD

expecting success of 3432.85 'git rebase --merge --no-ff --keep-base --keep-base main (rebase.abbreviateCommands = true) with no changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at be8f64f D
ok 85 - git rebase --merge --no-ff --keep-base --keep-base main (rebase.abbreviateCommands = true) with no changes is work with same HEAD

expecting success of 3432.86 'add work same to side': 
	test_commit E

[side ee2ad00] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
ok 86 - add work same to side

expecting success of 3432.87 'git rebase --apply  with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 87 - git rebase --apply  with our changes is noop with same HEAD

expecting success of 3432.88 'git rebase --apply --no-ff  with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 88 - git rebase --apply --no-ff  with our changes is work with same HEAD

expecting success of 3432.89 'git rebase --merge  with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 89 - git rebase --merge  with our changes is noop with same HEAD

expecting success of 3432.90 'git rebase --merge --no-ff  with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 90 - git rebase --merge --no-ff  with our changes is work with same HEAD

expecting success of 3432.91 'git rebase --merge  (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge  >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 91 - git rebase --merge  (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.92 'git rebase --merge --no-ff  (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff  >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 92 - git rebase --merge --no-ff  (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.93 'git rebase --apply main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 93 - git rebase --apply main with our changes is noop with same HEAD

expecting success of 3432.94 'git rebase --apply --no-ff main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 94 - git rebase --apply --no-ff main with our changes is work with same HEAD

expecting success of 3432.95 'git rebase --merge main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 95 - git rebase --merge main with our changes is noop with same HEAD

expecting success of 3432.96 'git rebase --merge --no-ff main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 96 - git rebase --merge --no-ff main with our changes is work with same HEAD

expecting success of 3432.97 'git rebase --merge main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 97 - git rebase --merge main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.98 'git rebase --merge --no-ff main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 98 - git rebase --merge --no-ff main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.99 'git rebase --apply --onto B B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 99 - git rebase --apply --onto B B with our changes is noop with same HEAD

expecting success of 3432.100 'git rebase --apply --no-ff --onto B B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 100 - git rebase --apply --no-ff --onto B B with our changes is work with diff HEAD

expecting success of 3432.101 'git rebase --merge --onto B B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 101 - git rebase --merge --onto B B with our changes is noop with same HEAD

expecting success of 3432.102 'git rebase --merge --no-ff --onto B B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 102 - git rebase --merge --no-ff --onto B B with our changes is work with diff HEAD

expecting success of 3432.103 'git rebase --merge --onto B B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 103 - git rebase --merge --onto B B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.104 'git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 104 - git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD

expecting success of 3432.105 'git rebase --apply --onto B... B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 105 - git rebase --apply --onto B... B with our changes is noop with same HEAD

expecting success of 3432.106 'git rebase --apply --no-ff --onto B... B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 106 - git rebase --apply --no-ff --onto B... B with our changes is work with diff HEAD

expecting success of 3432.107 'git rebase --merge --onto B... B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 107 - git rebase --merge --onto B... B with our changes is noop with same HEAD

expecting success of 3432.108 'git rebase --merge --no-ff --onto B... B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 108 - git rebase --merge --no-ff --onto B... B with our changes is work with diff HEAD

expecting success of 3432.109 'git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 109 - git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.110 'git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 110 - git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD

expecting success of 3432.111 'git rebase --apply --onto main... main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 111 - git rebase --apply --onto main... main with our changes is noop with same HEAD

expecting success of 3432.112 'git rebase --apply --no-ff --onto main... main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 112 - git rebase --apply --no-ff --onto main... main with our changes is work with same HEAD

expecting success of 3432.113 'git rebase --merge --onto main... main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 113 - git rebase --merge --onto main... main with our changes is noop with same HEAD

expecting success of 3432.114 'git rebase --merge --no-ff --onto main... main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 114 - git rebase --merge --no-ff --onto main... main with our changes is work with same HEAD

expecting success of 3432.115 'git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 115 - git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.116 'git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 116 - git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.117 'git rebase --apply --keep-base main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 117 - git rebase --apply --keep-base main with our changes is noop with same HEAD

expecting success of 3432.118 'git rebase --apply --no-ff --keep-base main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 118 - git rebase --apply --no-ff --keep-base main with our changes is work with same HEAD

expecting success of 3432.119 'git rebase --merge --keep-base main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 119 - git rebase --merge --keep-base main with our changes is noop with same HEAD

expecting success of 3432.120 'git rebase --merge --no-ff --keep-base main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 120 - git rebase --merge --no-ff --keep-base main with our changes is work with same HEAD

expecting success of 3432.121 'git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 121 - git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.122 'git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 122 - git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.123 'git rebase --apply --keep-base with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 123 - git rebase --apply --keep-base with our changes is noop with same HEAD

expecting success of 3432.124 'git rebase --apply --no-ff --keep-base with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 124 - git rebase --apply --no-ff --keep-base with our changes is work with same HEAD

expecting success of 3432.125 'git rebase --merge --keep-base with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 125 - git rebase --merge --keep-base with our changes is noop with same HEAD

expecting success of 3432.126 'git rebase --merge --no-ff --keep-base with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 126 - git rebase --merge --no-ff --keep-base with our changes is work with same HEAD

expecting success of 3432.127 'git rebase --merge --keep-base (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 127 - git rebase --merge --keep-base (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.128 'git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 128 - git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.129 'git rebase --apply --no-fork-point with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 129 - git rebase --apply --no-fork-point with our changes is noop with same HEAD

expecting success of 3432.130 'git rebase --apply --no-ff --no-fork-point with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 130 - git rebase --apply --no-ff --no-fork-point with our changes is work with same HEAD

expecting success of 3432.131 'git rebase --merge --no-fork-point with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 131 - git rebase --merge --no-fork-point with our changes is noop with same HEAD

expecting success of 3432.132 'git rebase --merge --no-ff --no-fork-point with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 132 - git rebase --merge --no-ff --no-fork-point with our changes is work with same HEAD

expecting success of 3432.133 'git rebase --merge --no-fork-point (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 133 - git rebase --merge --no-fork-point (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.134 'git rebase --merge --no-ff --no-fork-point (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 134 - git rebase --merge --no-ff --no-fork-point (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.135 'git rebase --apply --keep-base --no-fork-point with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 135 - git rebase --apply --keep-base --no-fork-point with our changes is noop with same HEAD

expecting success of 3432.136 'git rebase --apply --no-ff --keep-base --no-fork-point with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 136 - git rebase --apply --no-ff --keep-base --no-fork-point with our changes is work with same HEAD

expecting success of 3432.137 'git rebase --merge --keep-base --no-fork-point with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 137 - git rebase --merge --keep-base --no-fork-point with our changes is noop with same HEAD

expecting success of 3432.138 'git rebase --merge --no-ff --keep-base --no-fork-point with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 138 - git rebase --merge --no-ff --keep-base --no-fork-point with our changes is work with same HEAD

expecting success of 3432.139 'git rebase --merge --keep-base --no-fork-point (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 139 - git rebase --merge --keep-base --no-fork-point (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.140 'git rebase --merge --no-ff --keep-base --no-fork-point (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base --no-fork-point >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 140 - git rebase --merge --no-ff --keep-base --no-fork-point (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.141 'git rebase --apply --fork-point main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 141 - git rebase --apply --fork-point main with our changes is noop with same HEAD

expecting success of 3432.142 'git rebase --apply --no-ff --fork-point main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 142 - git rebase --apply --no-ff --fork-point main with our changes is work with same HEAD

expecting success of 3432.143 'git rebase --merge --fork-point main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 143 - git rebase --merge --fork-point main with our changes is noop with same HEAD

expecting success of 3432.144 'git rebase --merge --no-ff --fork-point main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 144 - git rebase --merge --no-ff --fork-point main with our changes is work with same HEAD

expecting success of 3432.145 'git rebase --merge --fork-point main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 145 - git rebase --merge --fork-point main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.146 'git rebase --merge --no-ff --fork-point main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 146 - git rebase --merge --no-ff --fork-point main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.147 'git rebase --apply --fork-point --onto B B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 147 - git rebase --apply --fork-point --onto B B with our changes is noop with same HEAD

expecting success of 3432.148 'git rebase --apply --no-ff --fork-point --onto B B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 148 - git rebase --apply --no-ff --fork-point --onto B B with our changes is work with diff HEAD

expecting success of 3432.149 'git rebase --merge --fork-point --onto B B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 149 - git rebase --merge --fork-point --onto B B with our changes is noop with same HEAD

expecting success of 3432.150 'git rebase --merge --no-ff --fork-point --onto B B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 150 - git rebase --merge --no-ff --fork-point --onto B B with our changes is work with diff HEAD

expecting success of 3432.151 'git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 151 - git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.152 'git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 152 - git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD

expecting success of 3432.153 'git rebase --apply --fork-point --onto B... B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 153 - git rebase --apply --fork-point --onto B... B with our changes is noop with same HEAD

expecting success of 3432.154 'git rebase --apply --no-ff --fork-point --onto B... B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 154 - git rebase --apply --no-ff --fork-point --onto B... B with our changes is work with diff HEAD

expecting success of 3432.155 'git rebase --merge --fork-point --onto B... B with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 155 - git rebase --merge --fork-point --onto B... B with our changes is noop with same HEAD

expecting success of 3432.156 'git rebase --merge --no-ff --fork-point --onto B... B with our changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 156 - git rebase --merge --no-ff --fork-point --onto B... B with our changes is work with diff HEAD

expecting success of 3432.157 'git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 157 - git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.158 'git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 158 - git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with our changes is work with diff HEAD

expecting success of 3432.159 'git rebase --apply --fork-point --onto main... main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 159 - git rebase --apply --fork-point --onto main... main with our changes is noop with same HEAD

expecting success of 3432.160 'git rebase --apply --no-ff --fork-point --onto main... main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 160 - git rebase --apply --no-ff --fork-point --onto main... main with our changes is work with same HEAD

expecting success of 3432.161 'git rebase --merge --fork-point --onto main... main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 161 - git rebase --merge --fork-point --onto main... main with our changes is noop with same HEAD

expecting success of 3432.162 'git rebase --merge --no-ff --fork-point --onto main... main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 162 - git rebase --merge --no-ff --fork-point --onto main... main with our changes is work with same HEAD

expecting success of 3432.163 'git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 163 - git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.164 'git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 164 - git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.165 'git rebase --apply --fork-point --keep-base main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 165 - git rebase --apply --fork-point --keep-base main with our changes is noop with same HEAD

expecting success of 3432.166 'git rebase --apply --no-ff --fork-point --keep-base main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 166 - git rebase --apply --no-ff --fork-point --keep-base main with our changes is work with same HEAD

expecting success of 3432.167 'git rebase --merge --fork-point --keep-base main with our changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 167 - git rebase --merge --fork-point --keep-base main with our changes is noop with same HEAD

expecting success of 3432.168 'git rebase --merge --no-ff --fork-point --keep-base main with our changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 168 - git rebase --merge --no-ff --fork-point --keep-base main with our changes is work with same HEAD

expecting success of 3432.169 'git rebase --merge --fork-point --keep-base main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 169 - git rebase --merge --fork-point --keep-base main (rebase.abbreviateCommands = true) with our changes is noop with same HEAD

expecting success of 3432.170 'git rebase --merge --no-ff --fork-point --keep-base main (rebase.abbreviateCommands = true) with our changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 170 - git rebase --merge --no-ff --fork-point --keep-base main (rebase.abbreviateCommands = true) with our changes is work with same HEAD

expecting success of 3432.171 'add work same to upstream': 
	git checkout main &&
	test_commit F &&
	git checkout side

Switched to branch 'main'
[main 71ab28b] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
Switched to branch 'side'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
ok 171 - add work same to upstream

expecting success of 3432.172 'git rebase --apply --onto B B with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 172 - git rebase --apply --onto B B with our and their changes is noop with same HEAD

expecting success of 3432.173 'git rebase --apply --no-ff --onto B B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 173 - git rebase --apply --no-ff --onto B B with our and their changes is work with diff HEAD

expecting success of 3432.174 'git rebase --merge --onto B B with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 174 - git rebase --merge --onto B B with our and their changes is noop with same HEAD

expecting success of 3432.175 'git rebase --merge --no-ff --onto B B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 175 - git rebase --merge --no-ff --onto B B with our and their changes is work with diff HEAD

expecting success of 3432.176 'git rebase --merge --onto B B (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 176 - git rebase --merge --onto B B (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.177 'git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 177 - git rebase --merge --no-ff --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.178 'git rebase --apply --onto B... B with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 178 - git rebase --apply --onto B... B with our and their changes is noop with same HEAD

expecting success of 3432.179 'git rebase --apply --no-ff --onto B... B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 179 - git rebase --apply --no-ff --onto B... B with our and their changes is work with diff HEAD

expecting success of 3432.180 'git rebase --merge --onto B... B with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 180 - git rebase --merge --onto B... B with our and their changes is noop with same HEAD

expecting success of 3432.181 'git rebase --merge --no-ff --onto B... B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 181 - git rebase --merge --no-ff --onto B... B with our and their changes is work with diff HEAD

expecting success of 3432.182 'git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 182 - git rebase --merge --onto B... B (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.183 'git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 183 - git rebase --merge --no-ff --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.184 'git rebase --apply --onto main... main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 184 - git rebase --apply --onto main... main with our and their changes is noop with same HEAD

expecting success of 3432.185 'git rebase --apply --no-ff --onto main... main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 185 - git rebase --apply --no-ff --onto main... main with our and their changes is work with diff HEAD

expecting success of 3432.186 'git rebase --merge --onto main... main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 186 - git rebase --merge --onto main... main with our and their changes is noop with same HEAD

expecting success of 3432.187 'git rebase --merge --no-ff --onto main... main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 187 - git rebase --merge --no-ff --onto main... main with our and their changes is work with diff HEAD

expecting success of 3432.188 'git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 188 - git rebase --merge --onto main... main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.189 'git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 189 - git rebase --merge --no-ff --onto main... main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.190 'git rebase --apply --keep-base main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 190 - git rebase --apply --keep-base main with our and their changes is noop with same HEAD

expecting success of 3432.191 'git rebase --apply --no-ff --keep-base main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 191 - git rebase --apply --no-ff --keep-base main with our and their changes is work with diff HEAD

expecting success of 3432.192 'git rebase --merge --keep-base main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 192 - git rebase --merge --keep-base main with our and their changes is noop with same HEAD

expecting success of 3432.193 'git rebase --merge --no-ff --keep-base main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 193 - git rebase --merge --no-ff --keep-base main with our and their changes is work with diff HEAD

expecting success of 3432.194 'git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 194 - git rebase --merge --keep-base main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.195 'git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 195 - git rebase --merge --no-ff --keep-base main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.196 'git rebase --apply --keep-base with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 196 - git rebase --apply --keep-base with our and their changes is noop with same HEAD

expecting success of 3432.197 'git rebase --apply --no-ff --keep-base with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 197 - git rebase --apply --no-ff --keep-base with our and their changes is work with diff HEAD

expecting success of 3432.198 'git rebase --merge --keep-base with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 198 - git rebase --merge --keep-base with our and their changes is noop with same HEAD

expecting success of 3432.199 'git rebase --merge --no-ff --keep-base with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 199 - git rebase --merge --no-ff --keep-base with our and their changes is work with diff HEAD

expecting success of 3432.200 'git rebase --merge --keep-base (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 200 - git rebase --merge --keep-base (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.201 'git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --keep-base >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 201 - git rebase --merge --no-ff --keep-base (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

checking known breakage of 3432.202 'git rebase --apply --fork-point --onto B B with our and their changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 522
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{1}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{2}: rebase (pick): E
be8f64f HEAD@{3}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{4}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{5}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{6}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{7}: rebase (pick): E
be8f64f HEAD@{8}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{9}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{10}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{11}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{12}: rebase (pick): E
be8f64f HEAD@{13}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{14}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{15}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{16}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{17}: rebase (pick): E
be8f64f HEAD@{18}: rebase (start): checkout main...side
ee2ad00 HEAD@{19}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{20}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{21}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{22}: rebase (pick): E
be8f64f HEAD@{23}: rebase (start): checkout main...side
ee2ad00 HEAD@{24}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{25}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{26}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{27}: rebase (pick): E
be8f64f HEAD@{28}: rebase (start): checkout main...side
ee2ad00 HEAD@{29}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{30}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{31}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{32}: rebase (pick): E
be8f64f HEAD@{33}: rebase (start): checkout main...
ee2ad00 HEAD@{34}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{35}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{36}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{37}: rebase (pick): E
be8f64f HEAD@{38}: rebase (start): checkout main...
ee2ad00 HEAD@{39}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{40}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{41}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{42}: rebase (pick): E
be8f64f HEAD@{43}: rebase (start): checkout main...
ee2ad00 HEAD@{44}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{45}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{46}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{47}: rebase (pick): E
6376ca0 HEAD@{48}: rebase (pick): D
c45f440 HEAD@{49}: rebase (pick): C
d9df450 HEAD@{50}: rebase (start): checkout B...
ee2ad00 HEAD@{51}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{52}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{53}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{54}: rebase (pick): E
6376ca0 HEAD@{55}: rebase (pick): D
c45f440 HEAD@{56}: rebase (pick): C
d9df450 HEAD@{57}: rebase (start): checkout B...
ee2ad00 HEAD@{58}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{59}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{60}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{61}: rebase (pick): E
6376ca0 HEAD@{62}: rebase (pick): D
c45f440 HEAD@{63}: rebase (pick): C
d9df450 HEAD@{64}: rebase (start): checkout B...
ee2ad00 HEAD@{65}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{66}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{67}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{68}: rebase (pick): E
6376ca0 HEAD@{69}: rebase (pick): D
c45f440 HEAD@{70}: rebase (pick): C
d9df450 HEAD@{71}: rebase (start): checkout B
ee2ad00 HEAD@{72}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{73}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{74}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{75}: rebase (pick): E
6376ca0 HEAD@{76}: rebase (pick): D
c45f440 HEAD@{77}: rebase (pick): C
d9df450 HEAD@{78}: rebase (start): checkout B
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: checkout: moving from main to side
71ab28b HEAD@{88}: commit: F
be8f64f HEAD@{89}: checkout: moving from side to main
ee2ad00 HEAD@{90}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{91}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{92}: rebase (pick): E
be8f64f HEAD@{93}: rebase (start): checkout main...side
ee2ad00 HEAD@{94}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{95}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{96}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{97}: rebase (pick): E
be8f64f HEAD@{98}: rebase (start): checkout main...side
ee2ad00 HEAD@{99}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{100}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{101}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{102}: rebase (pick): E
be8f64f HEAD@{103}: rebase (start): checkout main...side
ee2ad00 HEAD@{104}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{105}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{106}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{107}: rebase (pick): E
be8f64f HEAD@{108}: rebase (start): checkout main...
ee2ad00 HEAD@{109}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{110}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{111}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{112}: rebase (pick): E
be8f64f HEAD@{113}: rebase (start): checkout main...
ee2ad00 HEAD@{114}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{115}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{116}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{117}: rebase (pick): E
be8f64f HEAD@{118}: rebase (start): checkout main...
ee2ad00 HEAD@{119}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{120}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{121}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{122}: rebase (pick): E
0e6d3b5 HEAD@{123}: rebase (pick): D
0103ecb HEAD@{124}: rebase (pick): C
d9df450 HEAD@{125}: rebase (start): checkout B...
ee2ad00 HEAD@{126}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{127}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{128}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{129}: rebase (pick): E
0e6d3b5 HEAD@{130}: rebase (pick): D
0103ecb HEAD@{131}: rebase (pick): C
d9df450 HEAD@{132}: rebase (start): checkout B...
ee2ad00 HEAD@{133}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{134}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{135}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{136}: rebase (pick): E
0e6d3b5 HEAD@{137}: rebase (pick): D
0103ecb HEAD@{138}: rebase (pick): C
d9df450 HEAD@{139}: rebase (start): checkout B...
ee2ad00 HEAD@{140}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{141}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{142}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{143}: rebase (pick): E
0e6d3b5 HEAD@{144}: rebase (pick): D
0103ecb HEAD@{145}: rebase (pick): C
d9df450 HEAD@{146}: rebase (start): checkout B
ee2ad00 HEAD@{147}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{148}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{149}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{150}: rebase (pick): E
0e6d3b5 HEAD@{151}: rebase (pick): D
0103ecb HEAD@{152}: rebase (pick): C
d9df450 HEAD@{153}: rebase (start): checkout B
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{163}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{164}: rebase (pick): E
be8f64f HEAD@{165}: rebase (start): checkout main
ee2ad00 HEAD@{166}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{167}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{168}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{169}: rebase (pick): E
be8f64f HEAD@{170}: rebase (start): checkout main
ee2ad00 HEAD@{171}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{172}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{173}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{174}: rebase (pick): E
be8f64f HEAD@{175}: rebase (start): checkout main
ee2ad00 HEAD@{176}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{177}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{178}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{179}: rebase (pick): E
be8f64f HEAD@{180}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{181}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{182}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{183}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{184}: rebase (pick): E
be8f64f HEAD@{185}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{186}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{187}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{188}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{189}: rebase (pick): E
be8f64f HEAD@{190}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{191}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{192}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{193}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{194}: rebase (pick): E
be8f64f HEAD@{195}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{196}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{197}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{198}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{199}: rebase (pick): E
be8f64f HEAD@{200}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{201}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{202}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{203}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{204}: rebase (pick): E
be8f64f HEAD@{205}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{206}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{207}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{208}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{209}: rebase (pick): E
be8f64f HEAD@{210}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{211}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{212}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{213}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{214}: rebase (pick): E
be8f64f HEAD@{215}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{216}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{217}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{218}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{219}: rebase (pick): E
be8f64f HEAD@{220}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{221}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{222}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{223}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{224}: rebase (pick): E
be8f64f HEAD@{225}: rebase (start): checkout main...side
ee2ad00 HEAD@{226}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{227}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{228}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{229}: rebase (pick): E
be8f64f HEAD@{230}: rebase (start): checkout main...side
ee2ad00 HEAD@{231}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{232}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{233}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{234}: rebase (pick): E
be8f64f HEAD@{235}: rebase (start): checkout main...side
ee2ad00 HEAD@{236}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{237}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{238}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{239}: rebase (pick): E
be8f64f HEAD@{240}: rebase (start): checkout main...
ee2ad00 HEAD@{241}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{242}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{243}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{244}: rebase (pick): E
be8f64f HEAD@{245}: rebase (start): checkout main...
ee2ad00 HEAD@{246}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{247}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{248}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{249}: rebase (pick): E
be8f64f HEAD@{250}: rebase (start): checkout main...
ee2ad00 HEAD@{251}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{252}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{253}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{254}: rebase (pick): E
0e6d3b5 HEAD@{255}: rebase (pick): D
0103ecb HEAD@{256}: rebase (pick): C
d9df450 HEAD@{257}: rebase (start): checkout B...
ee2ad00 HEAD@{258}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{259}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{260}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{261}: rebase (pick): E
0e6d3b5 HEAD@{262}: rebase (pick): D
0103ecb HEAD@{263}: rebase (pick): C
d9df450 HEAD@{264}: rebase (start): checkout B...
ee2ad00 HEAD@{265}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{266}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{267}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{268}: rebase (pick): E
0e6d3b5 HEAD@{269}: rebase (pick): D
0103ecb HEAD@{270}: rebase (pick): C
d9df450 HEAD@{271}: rebase (start): checkout B...
ee2ad00 HEAD@{272}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{273}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{274}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{275}: rebase (pick): E
0e6d3b5 HEAD@{276}: rebase (pick): D
0103ecb HEAD@{277}: rebase (pick): C
d9df450 HEAD@{278}: rebase (start): checkout B
ee2ad00 HEAD@{279}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{280}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{281}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{282}: rebase (pick): E
0e6d3b5 HEAD@{283}: rebase (pick): D
0103ecb HEAD@{284}: rebase (pick): C
d9df450 HEAD@{285}: rebase (start): checkout B
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{295}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{296}: rebase (pick): E
be8f64f HEAD@{297}: rebase (start): checkout main
ee2ad00 HEAD@{298}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{299}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{300}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{301}: rebase (pick): E
be8f64f HEAD@{302}: rebase (start): checkout main
ee2ad00 HEAD@{303}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{304}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{305}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{306}: rebase (pick): E
be8f64f HEAD@{307}: rebase (start): checkout main
ee2ad00 HEAD@{308}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{309}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{310}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{311}: rebase (pick): E
be8f64f HEAD@{312}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{313}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{314}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{315}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{316}: rebase (pick): E
be8f64f HEAD@{317}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{318}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{319}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{320}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{321}: rebase (pick): E
be8f64f HEAD@{322}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{323}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{324}: commit: E
be8f64f HEAD@{325}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{326}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{327}: rebase (start): checkout main...side
be8f64f HEAD@{328}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{329}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{330}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{331}: rebase (start): checkout main...side
be8f64f HEAD@{332}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{333}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{334}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{335}: rebase (start): checkout main...side
be8f64f HEAD@{336}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{337}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{338}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{339}: rebase (start): checkout main...
be8f64f HEAD@{340}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{341}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{342}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{343}: rebase (start): checkout main...
be8f64f HEAD@{344}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{345}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{346}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{347}: rebase (start): checkout main...
be8f64f HEAD@{348}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{349}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{350}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{351}: rebase (pick): D
e9ee69b HEAD@{352}: rebase (pick): C
d9df450 HEAD@{353}: rebase (start): checkout B...
be8f64f HEAD@{354}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{355}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{356}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{357}: rebase (pick): D
e9ee69b HEAD@{358}: rebase (pick): C
d9df450 HEAD@{359}: rebase (start): checkout B...
be8f64f HEAD@{360}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{361}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{362}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{363}: rebase (pick): D
e9ee69b HEAD@{364}: rebase (pick): C
d9df450 HEAD@{365}: rebase (start): checkout B...
be8f64f HEAD@{366}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{367}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{368}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{369}: rebase (pick): D
e9ee69b HEAD@{370}: rebase (pick): C
d9df450 HEAD@{371}: rebase (start): checkout B
be8f64f HEAD@{372}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{373}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{374}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{375}: rebase (pick): D
e9ee69b HEAD@{376}: rebase (pick): C
d9df450 HEAD@{377}: rebase (start): checkout B
be8f64f HEAD@{378}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{379}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{380}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{381}: rebase (pick): D
e9ee69b HEAD@{382}: rebase (pick): C
d9df450 HEAD@{383}: rebase (start): checkout B
be8f64f HEAD@{384}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{385}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{386}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{387}: rebase (start): checkout main
be8f64f HEAD@{388}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{389}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{390}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{391}: rebase (start): checkout main
be8f64f HEAD@{392}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{393}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{394}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{395}: rebase (start): checkout main
be8f64f HEAD@{396}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{397}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{398}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{399}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{400}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{401}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{402}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{403}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{404}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{405}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{406}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{407}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{408}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{409}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{410}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{411}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{412}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{413}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{414}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{415}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{416}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{417}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{418}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{419}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{420}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{421}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{422}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{423}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{424}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{425}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{426}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{427}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{428}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{429}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{430}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{431}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{432}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{433}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{434}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{435}: rebase (start): checkout main...side
be8f64f HEAD@{436}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{437}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{438}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{439}: rebase (start): checkout main...side
be8f64f HEAD@{440}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{441}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{442}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{443}: rebase (start): checkout main...side
be8f64f HEAD@{444}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{445}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{446}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{447}: rebase (start): checkout main...
be8f64f HEAD@{448}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{449}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{450}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{451}: rebase (start): checkout main...
be8f64f HEAD@{452}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{453}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{454}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{455}: rebase (start): checkout main...
be8f64f HEAD@{456}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{457}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{458}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{459}: rebase (pick): D
e9ee69b HEAD@{460}: rebase (pick): C
d9df450 HEAD@{461}: rebase (start): checkout B...
be8f64f HEAD@{462}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{463}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{464}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{465}: rebase (pick): D
e9ee69b HEAD@{466}: rebase (pick): C
d9df450 HEAD@{467}: rebase (start): checkout B...
be8f64f HEAD@{468}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{469}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{470}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{471}: rebase (pick): D
e9ee69b HEAD@{472}: rebase (pick): C
d9df450 HEAD@{473}: rebase (start): checkout B...
be8f64f HEAD@{474}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{475}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{476}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{477}: rebase (pick): D
e9ee69b HEAD@{478}: rebase (pick): C
d9df450 HEAD@{479}: rebase (start): checkout B
be8f64f HEAD@{480}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{481}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{482}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{483}: rebase (pick): D
e9ee69b HEAD@{484}: rebase (pick): C
d9df450 HEAD@{485}: rebase (start): checkout B
be8f64f HEAD@{486}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{487}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{488}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{489}: rebase (pick): D
e9ee69b HEAD@{490}: rebase (pick): C
d9df450 HEAD@{491}: rebase (start): checkout B
be8f64f HEAD@{492}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{493}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{494}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{495}: rebase (start): checkout main
be8f64f HEAD@{496}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{497}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{498}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{499}: rebase (start): checkout main
be8f64f HEAD@{500}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{501}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{502}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{503}: rebase (start): checkout main
be8f64f HEAD@{504}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{505}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{506}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{507}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{508}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{509}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{510}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{511}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{512}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{513}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{514}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{515}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{516}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{517}: checkout: moving from main to side
be8f64f HEAD@{518}: commit: D
35a8500 HEAD@{519}: commit: C
d9df450 HEAD@{520}: commit: B
0ddfaf1 HEAD@{521}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 202 - git rebase --apply --fork-point --onto B B with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.203 'git rebase --apply --no-ff --fork-point --onto B B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 203 - git rebase --apply --no-ff --fork-point --onto B B with our and their changes is work with diff HEAD

checking known breakage of 3432.204 'git rebase --merge --fork-point --onto B B with our and their changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 529
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{1}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{2}: rebase (pick): E
6376ca0 HEAD@{3}: rebase (pick): D
c45f440 HEAD@{4}: rebase (pick): C
d9df450 HEAD@{5}: rebase (start): checkout B
ee2ad00 HEAD@{6}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{7}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{8}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{9}: rebase (pick): E
be8f64f HEAD@{10}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{11}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{12}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{13}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{14}: rebase (pick): E
be8f64f HEAD@{15}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{16}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{17}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{18}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{19}: rebase (pick): E
be8f64f HEAD@{20}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{21}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{22}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{23}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{24}: rebase (pick): E
be8f64f HEAD@{25}: rebase (start): checkout main...side
ee2ad00 HEAD@{26}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{27}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{28}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{29}: rebase (pick): E
be8f64f HEAD@{30}: rebase (start): checkout main...side
ee2ad00 HEAD@{31}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{32}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{33}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{34}: rebase (pick): E
be8f64f HEAD@{35}: rebase (start): checkout main...side
ee2ad00 HEAD@{36}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{37}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{38}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{39}: rebase (pick): E
be8f64f HEAD@{40}: rebase (start): checkout main...
ee2ad00 HEAD@{41}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{42}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{43}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{44}: rebase (pick): E
be8f64f HEAD@{45}: rebase (start): checkout main...
ee2ad00 HEAD@{46}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{47}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{48}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{49}: rebase (pick): E
be8f64f HEAD@{50}: rebase (start): checkout main...
ee2ad00 HEAD@{51}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{52}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{53}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{54}: rebase (pick): E
6376ca0 HEAD@{55}: rebase (pick): D
c45f440 HEAD@{56}: rebase (pick): C
d9df450 HEAD@{57}: rebase (start): checkout B...
ee2ad00 HEAD@{58}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{59}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{60}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{61}: rebase (pick): E
6376ca0 HEAD@{62}: rebase (pick): D
c45f440 HEAD@{63}: rebase (pick): C
d9df450 HEAD@{64}: rebase (start): checkout B...
ee2ad00 HEAD@{65}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{66}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{67}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{68}: rebase (pick): E
6376ca0 HEAD@{69}: rebase (pick): D
c45f440 HEAD@{70}: rebase (pick): C
d9df450 HEAD@{71}: rebase (start): checkout B...
ee2ad00 HEAD@{72}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{73}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{74}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{75}: rebase (pick): E
6376ca0 HEAD@{76}: rebase (pick): D
c45f440 HEAD@{77}: rebase (pick): C
d9df450 HEAD@{78}: rebase (start): checkout B
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{88}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{89}: rebase (pick): E
6376ca0 HEAD@{90}: rebase (pick): D
c45f440 HEAD@{91}: rebase (pick): C
d9df450 HEAD@{92}: rebase (start): checkout B
ee2ad00 HEAD@{93}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{94}: checkout: moving from main to side
71ab28b HEAD@{95}: commit: F
be8f64f HEAD@{96}: checkout: moving from side to main
ee2ad00 HEAD@{97}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{98}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{99}: rebase (pick): E
be8f64f HEAD@{100}: rebase (start): checkout main...side
ee2ad00 HEAD@{101}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{102}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{103}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{104}: rebase (pick): E
be8f64f HEAD@{105}: rebase (start): checkout main...side
ee2ad00 HEAD@{106}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{107}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{108}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{109}: rebase (pick): E
be8f64f HEAD@{110}: rebase (start): checkout main...side
ee2ad00 HEAD@{111}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{112}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{113}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{114}: rebase (pick): E
be8f64f HEAD@{115}: rebase (start): checkout main...
ee2ad00 HEAD@{116}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{117}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{118}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{119}: rebase (pick): E
be8f64f HEAD@{120}: rebase (start): checkout main...
ee2ad00 HEAD@{121}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{122}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{123}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{124}: rebase (pick): E
be8f64f HEAD@{125}: rebase (start): checkout main...
ee2ad00 HEAD@{126}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{127}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{128}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{129}: rebase (pick): E
0e6d3b5 HEAD@{130}: rebase (pick): D
0103ecb HEAD@{131}: rebase (pick): C
d9df450 HEAD@{132}: rebase (start): checkout B...
ee2ad00 HEAD@{133}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{134}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{135}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{136}: rebase (pick): E
0e6d3b5 HEAD@{137}: rebase (pick): D
0103ecb HEAD@{138}: rebase (pick): C
d9df450 HEAD@{139}: rebase (start): checkout B...
ee2ad00 HEAD@{140}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{141}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{142}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{143}: rebase (pick): E
0e6d3b5 HEAD@{144}: rebase (pick): D
0103ecb HEAD@{145}: rebase (pick): C
d9df450 HEAD@{146}: rebase (start): checkout B...
ee2ad00 HEAD@{147}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{148}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{149}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{150}: rebase (pick): E
0e6d3b5 HEAD@{151}: rebase (pick): D
0103ecb HEAD@{152}: rebase (pick): C
d9df450 HEAD@{153}: rebase (start): checkout B
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{163}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{164}: rebase (pick): E
0e6d3b5 HEAD@{165}: rebase (pick): D
0103ecb HEAD@{166}: rebase (pick): C
d9df450 HEAD@{167}: rebase (start): checkout B
ee2ad00 HEAD@{168}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{169}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{170}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{171}: rebase (pick): E
be8f64f HEAD@{172}: rebase (start): checkout main
ee2ad00 HEAD@{173}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{174}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{175}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{176}: rebase (pick): E
be8f64f HEAD@{177}: rebase (start): checkout main
ee2ad00 HEAD@{178}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{179}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{180}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{181}: rebase (pick): E
be8f64f HEAD@{182}: rebase (start): checkout main
ee2ad00 HEAD@{183}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{184}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{185}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{186}: rebase (pick): E
be8f64f HEAD@{187}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{188}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{189}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{190}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{191}: rebase (pick): E
be8f64f HEAD@{192}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{193}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{194}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{195}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{196}: rebase (pick): E
be8f64f HEAD@{197}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{198}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{199}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{200}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{201}: rebase (pick): E
be8f64f HEAD@{202}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{203}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{204}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{205}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{206}: rebase (pick): E
be8f64f HEAD@{207}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{208}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{209}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{210}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{211}: rebase (pick): E
be8f64f HEAD@{212}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{213}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{214}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{215}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{216}: rebase (pick): E
be8f64f HEAD@{217}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{218}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{219}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{220}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{221}: rebase (pick): E
be8f64f HEAD@{222}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{223}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{224}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{225}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{226}: rebase (pick): E
be8f64f HEAD@{227}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{228}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{229}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{230}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{231}: rebase (pick): E
be8f64f HEAD@{232}: rebase (start): checkout main...side
ee2ad00 HEAD@{233}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{234}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{235}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{236}: rebase (pick): E
be8f64f HEAD@{237}: rebase (start): checkout main...side
ee2ad00 HEAD@{238}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{239}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{240}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{241}: rebase (pick): E
be8f64f HEAD@{242}: rebase (start): checkout main...side
ee2ad00 HEAD@{243}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{244}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{245}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{246}: rebase (pick): E
be8f64f HEAD@{247}: rebase (start): checkout main...
ee2ad00 HEAD@{248}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{249}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{250}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{251}: rebase (pick): E
be8f64f HEAD@{252}: rebase (start): checkout main...
ee2ad00 HEAD@{253}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{254}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{255}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{256}: rebase (pick): E
be8f64f HEAD@{257}: rebase (start): checkout main...
ee2ad00 HEAD@{258}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{259}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{260}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{261}: rebase (pick): E
0e6d3b5 HEAD@{262}: rebase (pick): D
0103ecb HEAD@{263}: rebase (pick): C
d9df450 HEAD@{264}: rebase (start): checkout B...
ee2ad00 HEAD@{265}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{266}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{267}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{268}: rebase (pick): E
0e6d3b5 HEAD@{269}: rebase (pick): D
0103ecb HEAD@{270}: rebase (pick): C
d9df450 HEAD@{271}: rebase (start): checkout B...
ee2ad00 HEAD@{272}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{273}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{274}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{275}: rebase (pick): E
0e6d3b5 HEAD@{276}: rebase (pick): D
0103ecb HEAD@{277}: rebase (pick): C
d9df450 HEAD@{278}: rebase (start): checkout B...
ee2ad00 HEAD@{279}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{280}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{281}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{282}: rebase (pick): E
0e6d3b5 HEAD@{283}: rebase (pick): D
0103ecb HEAD@{284}: rebase (pick): C
d9df450 HEAD@{285}: rebase (start): checkout B
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{295}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{296}: rebase (pick): E
0e6d3b5 HEAD@{297}: rebase (pick): D
0103ecb HEAD@{298}: rebase (pick): C
d9df450 HEAD@{299}: rebase (start): checkout B
ee2ad00 HEAD@{300}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{301}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{302}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{303}: rebase (pick): E
be8f64f HEAD@{304}: rebase (start): checkout main
ee2ad00 HEAD@{305}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{306}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{307}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{308}: rebase (pick): E
be8f64f HEAD@{309}: rebase (start): checkout main
ee2ad00 HEAD@{310}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{311}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{312}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{313}: rebase (pick): E
be8f64f HEAD@{314}: rebase (start): checkout main
ee2ad00 HEAD@{315}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{316}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{317}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{318}: rebase (pick): E
be8f64f HEAD@{319}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{320}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{321}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{322}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{323}: rebase (pick): E
be8f64f HEAD@{324}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{325}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{326}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{327}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{328}: rebase (pick): E
be8f64f HEAD@{329}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{330}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{331}: commit: E
be8f64f HEAD@{332}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{333}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{334}: rebase (start): checkout main...side
be8f64f HEAD@{335}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{336}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{337}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{338}: rebase (start): checkout main...side
be8f64f HEAD@{339}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{340}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{341}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{342}: rebase (start): checkout main...side
be8f64f HEAD@{343}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{344}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{345}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{346}: rebase (start): checkout main...
be8f64f HEAD@{347}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{348}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{349}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{350}: rebase (start): checkout main...
be8f64f HEAD@{351}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{352}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{353}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{354}: rebase (start): checkout main...
be8f64f HEAD@{355}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{356}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{357}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{358}: rebase (pick): D
e9ee69b HEAD@{359}: rebase (pick): C
d9df450 HEAD@{360}: rebase (start): checkout B...
be8f64f HEAD@{361}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{362}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{363}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{364}: rebase (pick): D
e9ee69b HEAD@{365}: rebase (pick): C
d9df450 HEAD@{366}: rebase (start): checkout B...
be8f64f HEAD@{367}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{368}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{369}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{370}: rebase (pick): D
e9ee69b HEAD@{371}: rebase (pick): C
d9df450 HEAD@{372}: rebase (start): checkout B...
be8f64f HEAD@{373}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{374}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{375}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{376}: rebase (pick): D
e9ee69b HEAD@{377}: rebase (pick): C
d9df450 HEAD@{378}: rebase (start): checkout B
be8f64f HEAD@{379}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{380}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{381}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{382}: rebase (pick): D
e9ee69b HEAD@{383}: rebase (pick): C
d9df450 HEAD@{384}: rebase (start): checkout B
be8f64f HEAD@{385}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{386}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{387}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{388}: rebase (pick): D
e9ee69b HEAD@{389}: rebase (pick): C
d9df450 HEAD@{390}: rebase (start): checkout B
be8f64f HEAD@{391}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{392}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{393}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{394}: rebase (start): checkout main
be8f64f HEAD@{395}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{396}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{397}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{398}: rebase (start): checkout main
be8f64f HEAD@{399}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{400}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{401}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{402}: rebase (start): checkout main
be8f64f HEAD@{403}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{404}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{405}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{406}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{407}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{408}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{409}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{410}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{411}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{412}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{413}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{414}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{415}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{416}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{417}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{418}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{419}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{420}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{421}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{422}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{423}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{424}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{425}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{426}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{427}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{428}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{429}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{430}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{431}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{432}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{433}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{434}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{435}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{436}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{437}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{438}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{439}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{440}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{441}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{442}: rebase (start): checkout main...side
be8f64f HEAD@{443}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{444}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{445}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{446}: rebase (start): checkout main...side
be8f64f HEAD@{447}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{448}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{449}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{450}: rebase (start): checkout main...side
be8f64f HEAD@{451}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{452}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{453}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{454}: rebase (start): checkout main...
be8f64f HEAD@{455}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{456}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{457}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{458}: rebase (start): checkout main...
be8f64f HEAD@{459}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{460}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{461}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{462}: rebase (start): checkout main...
be8f64f HEAD@{463}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{464}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{465}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{466}: rebase (pick): D
e9ee69b HEAD@{467}: rebase (pick): C
d9df450 HEAD@{468}: rebase (start): checkout B...
be8f64f HEAD@{469}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{470}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{471}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{472}: rebase (pick): D
e9ee69b HEAD@{473}: rebase (pick): C
d9df450 HEAD@{474}: rebase (start): checkout B...
be8f64f HEAD@{475}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{476}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{477}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{478}: rebase (pick): D
e9ee69b HEAD@{479}: rebase (pick): C
d9df450 HEAD@{480}: rebase (start): checkout B...
be8f64f HEAD@{481}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{482}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{483}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{484}: rebase (pick): D
e9ee69b HEAD@{485}: rebase (pick): C
d9df450 HEAD@{486}: rebase (start): checkout B
be8f64f HEAD@{487}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{488}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{489}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{490}: rebase (pick): D
e9ee69b HEAD@{491}: rebase (pick): C
d9df450 HEAD@{492}: rebase (start): checkout B
be8f64f HEAD@{493}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{494}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{495}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{496}: rebase (pick): D
e9ee69b HEAD@{497}: rebase (pick): C
d9df450 HEAD@{498}: rebase (start): checkout B
be8f64f HEAD@{499}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{500}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{501}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{502}: rebase (start): checkout main
be8f64f HEAD@{503}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{504}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{505}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{506}: rebase (start): checkout main
be8f64f HEAD@{507}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{508}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{509}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{510}: rebase (start): checkout main
be8f64f HEAD@{511}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{512}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{513}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{514}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{515}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{516}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{517}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{518}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{519}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{520}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{521}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{522}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{523}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{524}: checkout: moving from main to side
be8f64f HEAD@{525}: commit: D
35a8500 HEAD@{526}: commit: C
d9df450 HEAD@{527}: commit: B
0ddfaf1 HEAD@{528}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 204 - git rebase --merge --fork-point --onto B B with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.205 'git rebase --merge --no-ff --fork-point --onto B B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 205 - git rebase --merge --no-ff --fork-point --onto B B with our and their changes is work with diff HEAD

checking known breakage of 3432.206 'git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 536
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{1}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{2}: rebase (pick): E
6376ca0 HEAD@{3}: rebase (pick): D
c45f440 HEAD@{4}: rebase (pick): C
d9df450 HEAD@{5}: rebase (start): checkout B
ee2ad00 HEAD@{6}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{7}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{8}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{9}: rebase (pick): E
6376ca0 HEAD@{10}: rebase (pick): D
c45f440 HEAD@{11}: rebase (pick): C
d9df450 HEAD@{12}: rebase (start): checkout B
ee2ad00 HEAD@{13}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{14}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{15}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{16}: rebase (pick): E
be8f64f HEAD@{17}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{18}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{19}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{20}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{21}: rebase (pick): E
be8f64f HEAD@{22}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{23}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{24}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{25}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{26}: rebase (pick): E
be8f64f HEAD@{27}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{28}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{29}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{30}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{31}: rebase (pick): E
be8f64f HEAD@{32}: rebase (start): checkout main...side
ee2ad00 HEAD@{33}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{34}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{35}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{36}: rebase (pick): E
be8f64f HEAD@{37}: rebase (start): checkout main...side
ee2ad00 HEAD@{38}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{39}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{40}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{41}: rebase (pick): E
be8f64f HEAD@{42}: rebase (start): checkout main...side
ee2ad00 HEAD@{43}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{44}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{45}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{46}: rebase (pick): E
be8f64f HEAD@{47}: rebase (start): checkout main...
ee2ad00 HEAD@{48}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{49}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{50}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{51}: rebase (pick): E
be8f64f HEAD@{52}: rebase (start): checkout main...
ee2ad00 HEAD@{53}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{54}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{55}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{56}: rebase (pick): E
be8f64f HEAD@{57}: rebase (start): checkout main...
ee2ad00 HEAD@{58}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{59}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{60}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{61}: rebase (pick): E
6376ca0 HEAD@{62}: rebase (pick): D
c45f440 HEAD@{63}: rebase (pick): C
d9df450 HEAD@{64}: rebase (start): checkout B...
ee2ad00 HEAD@{65}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{66}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{67}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{68}: rebase (pick): E
6376ca0 HEAD@{69}: rebase (pick): D
c45f440 HEAD@{70}: rebase (pick): C
d9df450 HEAD@{71}: rebase (start): checkout B...
ee2ad00 HEAD@{72}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{73}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{74}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{75}: rebase (pick): E
6376ca0 HEAD@{76}: rebase (pick): D
c45f440 HEAD@{77}: rebase (pick): C
d9df450 HEAD@{78}: rebase (start): checkout B...
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{88}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{89}: rebase (pick): E
6376ca0 HEAD@{90}: rebase (pick): D
c45f440 HEAD@{91}: rebase (pick): C
d9df450 HEAD@{92}: rebase (start): checkout B
ee2ad00 HEAD@{93}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{94}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{95}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{96}: rebase (pick): E
6376ca0 HEAD@{97}: rebase (pick): D
c45f440 HEAD@{98}: rebase (pick): C
d9df450 HEAD@{99}: rebase (start): checkout B
ee2ad00 HEAD@{100}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{101}: checkout: moving from main to side
71ab28b HEAD@{102}: commit: F
be8f64f HEAD@{103}: checkout: moving from side to main
ee2ad00 HEAD@{104}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{105}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{106}: rebase (pick): E
be8f64f HEAD@{107}: rebase (start): checkout main...side
ee2ad00 HEAD@{108}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{109}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{110}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{111}: rebase (pick): E
be8f64f HEAD@{112}: rebase (start): checkout main...side
ee2ad00 HEAD@{113}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{114}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{115}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{116}: rebase (pick): E
be8f64f HEAD@{117}: rebase (start): checkout main...side
ee2ad00 HEAD@{118}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{119}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{120}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{121}: rebase (pick): E
be8f64f HEAD@{122}: rebase (start): checkout main...
ee2ad00 HEAD@{123}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{124}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{125}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{126}: rebase (pick): E
be8f64f HEAD@{127}: rebase (start): checkout main...
ee2ad00 HEAD@{128}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{129}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{130}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{131}: rebase (pick): E
be8f64f HEAD@{132}: rebase (start): checkout main...
ee2ad00 HEAD@{133}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{134}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{135}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{136}: rebase (pick): E
0e6d3b5 HEAD@{137}: rebase (pick): D
0103ecb HEAD@{138}: rebase (pick): C
d9df450 HEAD@{139}: rebase (start): checkout B...
ee2ad00 HEAD@{140}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{141}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{142}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{143}: rebase (pick): E
0e6d3b5 HEAD@{144}: rebase (pick): D
0103ecb HEAD@{145}: rebase (pick): C
d9df450 HEAD@{146}: rebase (start): checkout B...
ee2ad00 HEAD@{147}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{148}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{149}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{150}: rebase (pick): E
0e6d3b5 HEAD@{151}: rebase (pick): D
0103ecb HEAD@{152}: rebase (pick): C
d9df450 HEAD@{153}: rebase (start): checkout B...
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{163}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{164}: rebase (pick): E
0e6d3b5 HEAD@{165}: rebase (pick): D
0103ecb HEAD@{166}: rebase (pick): C
d9df450 HEAD@{167}: rebase (start): checkout B
ee2ad00 HEAD@{168}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{169}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{170}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{171}: rebase (pick): E
0e6d3b5 HEAD@{172}: rebase (pick): D
0103ecb HEAD@{173}: rebase (pick): C
d9df450 HEAD@{174}: rebase (start): checkout B
ee2ad00 HEAD@{175}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{176}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{177}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{178}: rebase (pick): E
be8f64f HEAD@{179}: rebase (start): checkout main
ee2ad00 HEAD@{180}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{181}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{182}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{183}: rebase (pick): E
be8f64f HEAD@{184}: rebase (start): checkout main
ee2ad00 HEAD@{185}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{186}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{187}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{188}: rebase (pick): E
be8f64f HEAD@{189}: rebase (start): checkout main
ee2ad00 HEAD@{190}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{191}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{192}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{193}: rebase (pick): E
be8f64f HEAD@{194}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{195}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{196}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{197}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{198}: rebase (pick): E
be8f64f HEAD@{199}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{200}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{201}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{202}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{203}: rebase (pick): E
be8f64f HEAD@{204}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{205}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{206}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{207}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{208}: rebase (pick): E
be8f64f HEAD@{209}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{210}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{211}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{212}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{213}: rebase (pick): E
be8f64f HEAD@{214}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{215}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{216}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{217}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{218}: rebase (pick): E
be8f64f HEAD@{219}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{220}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{221}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{222}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{223}: rebase (pick): E
be8f64f HEAD@{224}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{225}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{226}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{227}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{228}: rebase (pick): E
be8f64f HEAD@{229}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{230}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{231}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{232}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{233}: rebase (pick): E
be8f64f HEAD@{234}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{235}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{236}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{237}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{238}: rebase (pick): E
be8f64f HEAD@{239}: rebase (start): checkout main...side
ee2ad00 HEAD@{240}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{241}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{242}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{243}: rebase (pick): E
be8f64f HEAD@{244}: rebase (start): checkout main...side
ee2ad00 HEAD@{245}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{246}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{247}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{248}: rebase (pick): E
be8f64f HEAD@{249}: rebase (start): checkout main...side
ee2ad00 HEAD@{250}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{251}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{252}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{253}: rebase (pick): E
be8f64f HEAD@{254}: rebase (start): checkout main...
ee2ad00 HEAD@{255}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{256}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{257}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{258}: rebase (pick): E
be8f64f HEAD@{259}: rebase (start): checkout main...
ee2ad00 HEAD@{260}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{261}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{262}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{263}: rebase (pick): E
be8f64f HEAD@{264}: rebase (start): checkout main...
ee2ad00 HEAD@{265}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{266}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{267}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{268}: rebase (pick): E
0e6d3b5 HEAD@{269}: rebase (pick): D
0103ecb HEAD@{270}: rebase (pick): C
d9df450 HEAD@{271}: rebase (start): checkout B...
ee2ad00 HEAD@{272}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{273}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{274}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{275}: rebase (pick): E
0e6d3b5 HEAD@{276}: rebase (pick): D
0103ecb HEAD@{277}: rebase (pick): C
d9df450 HEAD@{278}: rebase (start): checkout B...
ee2ad00 HEAD@{279}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{280}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{281}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{282}: rebase (pick): E
0e6d3b5 HEAD@{283}: rebase (pick): D
0103ecb HEAD@{284}: rebase (pick): C
d9df450 HEAD@{285}: rebase (start): checkout B...
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{295}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{296}: rebase (pick): E
0e6d3b5 HEAD@{297}: rebase (pick): D
0103ecb HEAD@{298}: rebase (pick): C
d9df450 HEAD@{299}: rebase (start): checkout B
ee2ad00 HEAD@{300}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{301}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{302}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{303}: rebase (pick): E
0e6d3b5 HEAD@{304}: rebase (pick): D
0103ecb HEAD@{305}: rebase (pick): C
d9df450 HEAD@{306}: rebase (start): checkout B
ee2ad00 HEAD@{307}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{308}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{309}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{310}: rebase (pick): E
be8f64f HEAD@{311}: rebase (start): checkout main
ee2ad00 HEAD@{312}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{313}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{314}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{315}: rebase (pick): E
be8f64f HEAD@{316}: rebase (start): checkout main
ee2ad00 HEAD@{317}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{318}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{319}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{320}: rebase (pick): E
be8f64f HEAD@{321}: rebase (start): checkout main
ee2ad00 HEAD@{322}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{323}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{324}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{325}: rebase (pick): E
be8f64f HEAD@{326}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{327}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{328}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{329}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{330}: rebase (pick): E
be8f64f HEAD@{331}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{332}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{333}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{334}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{335}: rebase (pick): E
be8f64f HEAD@{336}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{337}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{338}: commit: E
be8f64f HEAD@{339}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{340}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{341}: rebase (start): checkout main...side
be8f64f HEAD@{342}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{343}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{344}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{345}: rebase (start): checkout main...side
be8f64f HEAD@{346}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{347}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{348}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{349}: rebase (start): checkout main...side
be8f64f HEAD@{350}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{351}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{352}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{353}: rebase (start): checkout main...
be8f64f HEAD@{354}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{355}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{356}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{357}: rebase (start): checkout main...
be8f64f HEAD@{358}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{359}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{360}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{361}: rebase (start): checkout main...
be8f64f HEAD@{362}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{363}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{364}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{365}: rebase (pick): D
e9ee69b HEAD@{366}: rebase (pick): C
d9df450 HEAD@{367}: rebase (start): checkout B...
be8f64f HEAD@{368}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{369}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{370}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{371}: rebase (pick): D
e9ee69b HEAD@{372}: rebase (pick): C
d9df450 HEAD@{373}: rebase (start): checkout B...
be8f64f HEAD@{374}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{375}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{376}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{377}: rebase (pick): D
e9ee69b HEAD@{378}: rebase (pick): C
d9df450 HEAD@{379}: rebase (start): checkout B...
be8f64f HEAD@{380}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{381}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{382}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{383}: rebase (pick): D
e9ee69b HEAD@{384}: rebase (pick): C
d9df450 HEAD@{385}: rebase (start): checkout B
be8f64f HEAD@{386}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{387}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{388}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{389}: rebase (pick): D
e9ee69b HEAD@{390}: rebase (pick): C
d9df450 HEAD@{391}: rebase (start): checkout B
be8f64f HEAD@{392}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{393}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{394}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{395}: rebase (pick): D
e9ee69b HEAD@{396}: rebase (pick): C
d9df450 HEAD@{397}: rebase (start): checkout B
be8f64f HEAD@{398}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{399}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{400}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{401}: rebase (start): checkout main
be8f64f HEAD@{402}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{403}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{404}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{405}: rebase (start): checkout main
be8f64f HEAD@{406}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{407}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{408}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{409}: rebase (start): checkout main
be8f64f HEAD@{410}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{411}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{412}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{413}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{414}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{415}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{416}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{417}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{418}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{419}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{420}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{421}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{422}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{423}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{424}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{425}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{426}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{427}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{428}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{429}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{430}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{431}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{432}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{433}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{434}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{435}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{436}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{437}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{438}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{439}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{440}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{441}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{442}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{443}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{444}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{445}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{446}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{447}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{448}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{449}: rebase (start): checkout main...side
be8f64f HEAD@{450}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{451}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{452}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{453}: rebase (start): checkout main...side
be8f64f HEAD@{454}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{455}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{456}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{457}: rebase (start): checkout main...side
be8f64f HEAD@{458}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{459}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{460}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{461}: rebase (start): checkout main...
be8f64f HEAD@{462}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{463}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{464}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{465}: rebase (start): checkout main...
be8f64f HEAD@{466}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{467}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{468}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{469}: rebase (start): checkout main...
be8f64f HEAD@{470}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{471}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{472}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{473}: rebase (pick): D
e9ee69b HEAD@{474}: rebase (pick): C
d9df450 HEAD@{475}: rebase (start): checkout B...
be8f64f HEAD@{476}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{477}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{478}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{479}: rebase (pick): D
e9ee69b HEAD@{480}: rebase (pick): C
d9df450 HEAD@{481}: rebase (start): checkout B...
be8f64f HEAD@{482}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{483}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{484}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{485}: rebase (pick): D
e9ee69b HEAD@{486}: rebase (pick): C
d9df450 HEAD@{487}: rebase (start): checkout B...
be8f64f HEAD@{488}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{489}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{490}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{491}: rebase (pick): D
e9ee69b HEAD@{492}: rebase (pick): C
d9df450 HEAD@{493}: rebase (start): checkout B
be8f64f HEAD@{494}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{495}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{496}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{497}: rebase (pick): D
e9ee69b HEAD@{498}: rebase (pick): C
d9df450 HEAD@{499}: rebase (start): checkout B
be8f64f HEAD@{500}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{501}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{502}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{503}: rebase (pick): D
e9ee69b HEAD@{504}: rebase (pick): C
d9df450 HEAD@{505}: rebase (start): checkout B
be8f64f HEAD@{506}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{507}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{508}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{509}: rebase (start): checkout main
be8f64f HEAD@{510}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{511}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{512}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{513}: rebase (start): checkout main
be8f64f HEAD@{514}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{515}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{516}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{517}: rebase (start): checkout main
be8f64f HEAD@{518}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{519}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{520}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{521}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{522}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{523}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{524}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{525}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{526}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{527}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{528}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{529}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{530}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{531}: checkout: moving from main to side
be8f64f HEAD@{532}: commit: D
35a8500 HEAD@{533}: commit: C
d9df450 HEAD@{534}: commit: B
0ddfaf1 HEAD@{535}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 206 - git rebase --merge --fork-point --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.207 'git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 207 - git rebase --merge --no-ff --fork-point --onto B B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

checking known breakage of 3432.208 'git rebase --apply --fork-point --onto B... B with our and their changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 543
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{1}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{2}: rebase (pick): E
6376ca0 HEAD@{3}: rebase (pick): D
c45f440 HEAD@{4}: rebase (pick): C
d9df450 HEAD@{5}: rebase (start): checkout B
ee2ad00 HEAD@{6}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{7}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{8}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{9}: rebase (pick): E
6376ca0 HEAD@{10}: rebase (pick): D
c45f440 HEAD@{11}: rebase (pick): C
d9df450 HEAD@{12}: rebase (start): checkout B
ee2ad00 HEAD@{13}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{14}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{15}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{16}: rebase (pick): E
6376ca0 HEAD@{17}: rebase (pick): D
c45f440 HEAD@{18}: rebase (pick): C
d9df450 HEAD@{19}: rebase (start): checkout B
ee2ad00 HEAD@{20}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{21}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{22}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{23}: rebase (pick): E
be8f64f HEAD@{24}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{25}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{26}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{27}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{28}: rebase (pick): E
be8f64f HEAD@{29}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{30}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{31}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{32}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{33}: rebase (pick): E
be8f64f HEAD@{34}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{35}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{36}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{37}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{38}: rebase (pick): E
be8f64f HEAD@{39}: rebase (start): checkout main...side
ee2ad00 HEAD@{40}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{41}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{42}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{43}: rebase (pick): E
be8f64f HEAD@{44}: rebase (start): checkout main...side
ee2ad00 HEAD@{45}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{46}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{47}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{48}: rebase (pick): E
be8f64f HEAD@{49}: rebase (start): checkout main...side
ee2ad00 HEAD@{50}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{51}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{52}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{53}: rebase (pick): E
be8f64f HEAD@{54}: rebase (start): checkout main...
ee2ad00 HEAD@{55}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{56}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{57}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{58}: rebase (pick): E
be8f64f HEAD@{59}: rebase (start): checkout main...
ee2ad00 HEAD@{60}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{61}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{62}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{63}: rebase (pick): E
be8f64f HEAD@{64}: rebase (start): checkout main...
ee2ad00 HEAD@{65}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{66}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{67}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{68}: rebase (pick): E
6376ca0 HEAD@{69}: rebase (pick): D
c45f440 HEAD@{70}: rebase (pick): C
d9df450 HEAD@{71}: rebase (start): checkout B...
ee2ad00 HEAD@{72}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{73}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{74}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{75}: rebase (pick): E
6376ca0 HEAD@{76}: rebase (pick): D
c45f440 HEAD@{77}: rebase (pick): C
d9df450 HEAD@{78}: rebase (start): checkout B...
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B...
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{88}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{89}: rebase (pick): E
6376ca0 HEAD@{90}: rebase (pick): D
c45f440 HEAD@{91}: rebase (pick): C
d9df450 HEAD@{92}: rebase (start): checkout B
ee2ad00 HEAD@{93}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{94}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{95}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{96}: rebase (pick): E
6376ca0 HEAD@{97}: rebase (pick): D
c45f440 HEAD@{98}: rebase (pick): C
d9df450 HEAD@{99}: rebase (start): checkout B
ee2ad00 HEAD@{100}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{101}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{102}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{103}: rebase (pick): E
6376ca0 HEAD@{104}: rebase (pick): D
c45f440 HEAD@{105}: rebase (pick): C
d9df450 HEAD@{106}: rebase (start): checkout B
ee2ad00 HEAD@{107}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{108}: checkout: moving from main to side
71ab28b HEAD@{109}: commit: F
be8f64f HEAD@{110}: checkout: moving from side to main
ee2ad00 HEAD@{111}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{112}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{113}: rebase (pick): E
be8f64f HEAD@{114}: rebase (start): checkout main...side
ee2ad00 HEAD@{115}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{116}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{117}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{118}: rebase (pick): E
be8f64f HEAD@{119}: rebase (start): checkout main...side
ee2ad00 HEAD@{120}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{121}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{122}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{123}: rebase (pick): E
be8f64f HEAD@{124}: rebase (start): checkout main...side
ee2ad00 HEAD@{125}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{126}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{127}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{128}: rebase (pick): E
be8f64f HEAD@{129}: rebase (start): checkout main...
ee2ad00 HEAD@{130}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{131}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{132}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{133}: rebase (pick): E
be8f64f HEAD@{134}: rebase (start): checkout main...
ee2ad00 HEAD@{135}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{136}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{137}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{138}: rebase (pick): E
be8f64f HEAD@{139}: rebase (start): checkout main...
ee2ad00 HEAD@{140}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{141}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{142}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{143}: rebase (pick): E
0e6d3b5 HEAD@{144}: rebase (pick): D
0103ecb HEAD@{145}: rebase (pick): C
d9df450 HEAD@{146}: rebase (start): checkout B...
ee2ad00 HEAD@{147}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{148}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{149}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{150}: rebase (pick): E
0e6d3b5 HEAD@{151}: rebase (pick): D
0103ecb HEAD@{152}: rebase (pick): C
d9df450 HEAD@{153}: rebase (start): checkout B...
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B...
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{163}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{164}: rebase (pick): E
0e6d3b5 HEAD@{165}: rebase (pick): D
0103ecb HEAD@{166}: rebase (pick): C
d9df450 HEAD@{167}: rebase (start): checkout B
ee2ad00 HEAD@{168}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{169}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{170}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{171}: rebase (pick): E
0e6d3b5 HEAD@{172}: rebase (pick): D
0103ecb HEAD@{173}: rebase (pick): C
d9df450 HEAD@{174}: rebase (start): checkout B
ee2ad00 HEAD@{175}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{176}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{177}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{178}: rebase (pick): E
0e6d3b5 HEAD@{179}: rebase (pick): D
0103ecb HEAD@{180}: rebase (pick): C
d9df450 HEAD@{181}: rebase (start): checkout B
ee2ad00 HEAD@{182}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{183}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{184}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{185}: rebase (pick): E
be8f64f HEAD@{186}: rebase (start): checkout main
ee2ad00 HEAD@{187}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{188}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{189}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{190}: rebase (pick): E
be8f64f HEAD@{191}: rebase (start): checkout main
ee2ad00 HEAD@{192}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{193}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{194}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{195}: rebase (pick): E
be8f64f HEAD@{196}: rebase (start): checkout main
ee2ad00 HEAD@{197}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{198}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{199}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{200}: rebase (pick): E
be8f64f HEAD@{201}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{202}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{203}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{204}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{205}: rebase (pick): E
be8f64f HEAD@{206}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{207}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{208}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{209}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{210}: rebase (pick): E
be8f64f HEAD@{211}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{212}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{213}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{214}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{215}: rebase (pick): E
be8f64f HEAD@{216}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{217}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{218}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{219}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{220}: rebase (pick): E
be8f64f HEAD@{221}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{222}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{223}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{224}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{225}: rebase (pick): E
be8f64f HEAD@{226}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{227}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{228}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{229}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{230}: rebase (pick): E
be8f64f HEAD@{231}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{232}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{233}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{234}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{235}: rebase (pick): E
be8f64f HEAD@{236}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{237}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{238}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{239}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{240}: rebase (pick): E
be8f64f HEAD@{241}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{242}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{243}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{244}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{245}: rebase (pick): E
be8f64f HEAD@{246}: rebase (start): checkout main...side
ee2ad00 HEAD@{247}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{248}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{249}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{250}: rebase (pick): E
be8f64f HEAD@{251}: rebase (start): checkout main...side
ee2ad00 HEAD@{252}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{253}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{254}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{255}: rebase (pick): E
be8f64f HEAD@{256}: rebase (start): checkout main...side
ee2ad00 HEAD@{257}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{258}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{259}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{260}: rebase (pick): E
be8f64f HEAD@{261}: rebase (start): checkout main...
ee2ad00 HEAD@{262}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{263}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{264}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{265}: rebase (pick): E
be8f64f HEAD@{266}: rebase (start): checkout main...
ee2ad00 HEAD@{267}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{268}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{269}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{270}: rebase (pick): E
be8f64f HEAD@{271}: rebase (start): checkout main...
ee2ad00 HEAD@{272}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{273}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{274}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{275}: rebase (pick): E
0e6d3b5 HEAD@{276}: rebase (pick): D
0103ecb HEAD@{277}: rebase (pick): C
d9df450 HEAD@{278}: rebase (start): checkout B...
ee2ad00 HEAD@{279}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{280}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{281}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{282}: rebase (pick): E
0e6d3b5 HEAD@{283}: rebase (pick): D
0103ecb HEAD@{284}: rebase (pick): C
d9df450 HEAD@{285}: rebase (start): checkout B...
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B...
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{295}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{296}: rebase (pick): E
0e6d3b5 HEAD@{297}: rebase (pick): D
0103ecb HEAD@{298}: rebase (pick): C
d9df450 HEAD@{299}: rebase (start): checkout B
ee2ad00 HEAD@{300}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{301}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{302}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{303}: rebase (pick): E
0e6d3b5 HEAD@{304}: rebase (pick): D
0103ecb HEAD@{305}: rebase (pick): C
d9df450 HEAD@{306}: rebase (start): checkout B
ee2ad00 HEAD@{307}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{308}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{309}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{310}: rebase (pick): E
0e6d3b5 HEAD@{311}: rebase (pick): D
0103ecb HEAD@{312}: rebase (pick): C
d9df450 HEAD@{313}: rebase (start): checkout B
ee2ad00 HEAD@{314}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{315}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{316}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{317}: rebase (pick): E
be8f64f HEAD@{318}: rebase (start): checkout main
ee2ad00 HEAD@{319}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{320}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{321}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{322}: rebase (pick): E
be8f64f HEAD@{323}: rebase (start): checkout main
ee2ad00 HEAD@{324}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{325}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{326}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{327}: rebase (pick): E
be8f64f HEAD@{328}: rebase (start): checkout main
ee2ad00 HEAD@{329}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{330}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{331}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{332}: rebase (pick): E
be8f64f HEAD@{333}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{334}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{335}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{336}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{337}: rebase (pick): E
be8f64f HEAD@{338}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{339}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{340}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{341}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{342}: rebase (pick): E
be8f64f HEAD@{343}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{344}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{345}: commit: E
be8f64f HEAD@{346}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{347}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{348}: rebase (start): checkout main...side
be8f64f HEAD@{349}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{350}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{351}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{352}: rebase (start): checkout main...side
be8f64f HEAD@{353}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{354}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{355}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{356}: rebase (start): checkout main...side
be8f64f HEAD@{357}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{358}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{359}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{360}: rebase (start): checkout main...
be8f64f HEAD@{361}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{362}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{363}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{364}: rebase (start): checkout main...
be8f64f HEAD@{365}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{366}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{367}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{368}: rebase (start): checkout main...
be8f64f HEAD@{369}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{370}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{371}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{372}: rebase (pick): D
e9ee69b HEAD@{373}: rebase (pick): C
d9df450 HEAD@{374}: rebase (start): checkout B...
be8f64f HEAD@{375}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{376}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{377}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{378}: rebase (pick): D
e9ee69b HEAD@{379}: rebase (pick): C
d9df450 HEAD@{380}: rebase (start): checkout B...
be8f64f HEAD@{381}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{382}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{383}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{384}: rebase (pick): D
e9ee69b HEAD@{385}: rebase (pick): C
d9df450 HEAD@{386}: rebase (start): checkout B...
be8f64f HEAD@{387}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{388}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{389}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{390}: rebase (pick): D
e9ee69b HEAD@{391}: rebase (pick): C
d9df450 HEAD@{392}: rebase (start): checkout B
be8f64f HEAD@{393}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{394}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{395}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{396}: rebase (pick): D
e9ee69b HEAD@{397}: rebase (pick): C
d9df450 HEAD@{398}: rebase (start): checkout B
be8f64f HEAD@{399}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{400}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{401}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{402}: rebase (pick): D
e9ee69b HEAD@{403}: rebase (pick): C
d9df450 HEAD@{404}: rebase (start): checkout B
be8f64f HEAD@{405}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{406}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{407}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{408}: rebase (start): checkout main
be8f64f HEAD@{409}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{410}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{411}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{412}: rebase (start): checkout main
be8f64f HEAD@{413}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{414}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{415}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{416}: rebase (start): checkout main
be8f64f HEAD@{417}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{418}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{419}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{420}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{421}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{422}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{423}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{424}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{425}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{426}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{427}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{428}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{429}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{430}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{431}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{432}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{433}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{434}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{435}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{436}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{437}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{438}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{439}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{440}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{441}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{442}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{443}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{444}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{445}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{446}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{447}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{448}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{449}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{450}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{451}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{452}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{453}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{454}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{455}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{456}: rebase (start): checkout main...side
be8f64f HEAD@{457}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{458}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{459}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{460}: rebase (start): checkout main...side
be8f64f HEAD@{461}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{462}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{463}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{464}: rebase (start): checkout main...side
be8f64f HEAD@{465}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{466}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{467}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{468}: rebase (start): checkout main...
be8f64f HEAD@{469}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{470}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{471}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{472}: rebase (start): checkout main...
be8f64f HEAD@{473}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{474}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{475}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{476}: rebase (start): checkout main...
be8f64f HEAD@{477}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{478}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{479}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{480}: rebase (pick): D
e9ee69b HEAD@{481}: rebase (pick): C
d9df450 HEAD@{482}: rebase (start): checkout B...
be8f64f HEAD@{483}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{484}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{485}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{486}: rebase (pick): D
e9ee69b HEAD@{487}: rebase (pick): C
d9df450 HEAD@{488}: rebase (start): checkout B...
be8f64f HEAD@{489}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{490}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{491}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{492}: rebase (pick): D
e9ee69b HEAD@{493}: rebase (pick): C
d9df450 HEAD@{494}: rebase (start): checkout B...
be8f64f HEAD@{495}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{496}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{497}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{498}: rebase (pick): D
e9ee69b HEAD@{499}: rebase (pick): C
d9df450 HEAD@{500}: rebase (start): checkout B
be8f64f HEAD@{501}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{502}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{503}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{504}: rebase (pick): D
e9ee69b HEAD@{505}: rebase (pick): C
d9df450 HEAD@{506}: rebase (start): checkout B
be8f64f HEAD@{507}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{508}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{509}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{510}: rebase (pick): D
e9ee69b HEAD@{511}: rebase (pick): C
d9df450 HEAD@{512}: rebase (start): checkout B
be8f64f HEAD@{513}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{514}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{515}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{516}: rebase (start): checkout main
be8f64f HEAD@{517}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{518}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{519}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{520}: rebase (start): checkout main
be8f64f HEAD@{521}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{522}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{523}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{524}: rebase (start): checkout main
be8f64f HEAD@{525}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{526}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{527}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{528}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{529}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{530}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{531}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{532}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{533}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{534}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{535}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{536}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{537}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{538}: checkout: moving from main to side
be8f64f HEAD@{539}: commit: D
35a8500 HEAD@{540}: commit: C
d9df450 HEAD@{541}: commit: B
0ddfaf1 HEAD@{542}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 208 - git rebase --apply --fork-point --onto B... B with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.209 'git rebase --apply --no-ff --fork-point --onto B... B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 209 - git rebase --apply --no-ff --fork-point --onto B... B with our and their changes is work with diff HEAD

checking known breakage of 3432.210 'git rebase --merge --fork-point --onto B... B with our and their changes is work with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 550
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{1}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{2}: rebase (pick): E
6376ca0 HEAD@{3}: rebase (pick): D
c45f440 HEAD@{4}: rebase (pick): C
d9df450 HEAD@{5}: rebase (start): checkout B...
ee2ad00 HEAD@{6}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{7}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{8}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{9}: rebase (pick): E
6376ca0 HEAD@{10}: rebase (pick): D
c45f440 HEAD@{11}: rebase (pick): C
d9df450 HEAD@{12}: rebase (start): checkout B
ee2ad00 HEAD@{13}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{14}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{15}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{16}: rebase (pick): E
6376ca0 HEAD@{17}: rebase (pick): D
c45f440 HEAD@{18}: rebase (pick): C
d9df450 HEAD@{19}: rebase (start): checkout B
ee2ad00 HEAD@{20}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{21}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{22}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{23}: rebase (pick): E
6376ca0 HEAD@{24}: rebase (pick): D
c45f440 HEAD@{25}: rebase (pick): C
d9df450 HEAD@{26}: rebase (start): checkout B
ee2ad00 HEAD@{27}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{28}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{29}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{30}: rebase (pick): E
be8f64f HEAD@{31}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{32}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{33}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{34}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{35}: rebase (pick): E
be8f64f HEAD@{36}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{37}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{38}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{39}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{40}: rebase (pick): E
be8f64f HEAD@{41}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{42}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{43}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{44}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{45}: rebase (pick): E
be8f64f HEAD@{46}: rebase (start): checkout main...side
ee2ad00 HEAD@{47}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{48}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{49}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{50}: rebase (pick): E
be8f64f HEAD@{51}: rebase (start): checkout main...side
ee2ad00 HEAD@{52}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{53}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{54}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{55}: rebase (pick): E
be8f64f HEAD@{56}: rebase (start): checkout main...side
ee2ad00 HEAD@{57}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{58}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{59}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{60}: rebase (pick): E
be8f64f HEAD@{61}: rebase (start): checkout main...
ee2ad00 HEAD@{62}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{63}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{64}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{65}: rebase (pick): E
be8f64f HEAD@{66}: rebase (start): checkout main...
ee2ad00 HEAD@{67}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{68}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{69}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{70}: rebase (pick): E
be8f64f HEAD@{71}: rebase (start): checkout main...
ee2ad00 HEAD@{72}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{73}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{74}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{75}: rebase (pick): E
6376ca0 HEAD@{76}: rebase (pick): D
c45f440 HEAD@{77}: rebase (pick): C
d9df450 HEAD@{78}: rebase (start): checkout B...
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B...
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{88}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{89}: rebase (pick): E
6376ca0 HEAD@{90}: rebase (pick): D
c45f440 HEAD@{91}: rebase (pick): C
d9df450 HEAD@{92}: rebase (start): checkout B...
ee2ad00 HEAD@{93}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{94}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{95}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{96}: rebase (pick): E
6376ca0 HEAD@{97}: rebase (pick): D
c45f440 HEAD@{98}: rebase (pick): C
d9df450 HEAD@{99}: rebase (start): checkout B
ee2ad00 HEAD@{100}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{101}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{102}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{103}: rebase (pick): E
6376ca0 HEAD@{104}: rebase (pick): D
c45f440 HEAD@{105}: rebase (pick): C
d9df450 HEAD@{106}: rebase (start): checkout B
ee2ad00 HEAD@{107}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{108}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{109}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{110}: rebase (pick): E
6376ca0 HEAD@{111}: rebase (pick): D
c45f440 HEAD@{112}: rebase (pick): C
d9df450 HEAD@{113}: rebase (start): checkout B
ee2ad00 HEAD@{114}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{115}: checkout: moving from main to side
71ab28b HEAD@{116}: commit: F
be8f64f HEAD@{117}: checkout: moving from side to main
ee2ad00 HEAD@{118}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{119}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{120}: rebase (pick): E
be8f64f HEAD@{121}: rebase (start): checkout main...side
ee2ad00 HEAD@{122}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{123}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{124}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{125}: rebase (pick): E
be8f64f HEAD@{126}: rebase (start): checkout main...side
ee2ad00 HEAD@{127}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{128}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{129}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{130}: rebase (pick): E
be8f64f HEAD@{131}: rebase (start): checkout main...side
ee2ad00 HEAD@{132}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{133}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{134}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{135}: rebase (pick): E
be8f64f HEAD@{136}: rebase (start): checkout main...
ee2ad00 HEAD@{137}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{138}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{139}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{140}: rebase (pick): E
be8f64f HEAD@{141}: rebase (start): checkout main...
ee2ad00 HEAD@{142}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{143}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{144}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{145}: rebase (pick): E
be8f64f HEAD@{146}: rebase (start): checkout main...
ee2ad00 HEAD@{147}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{148}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{149}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{150}: rebase (pick): E
0e6d3b5 HEAD@{151}: rebase (pick): D
0103ecb HEAD@{152}: rebase (pick): C
d9df450 HEAD@{153}: rebase (start): checkout B...
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B...
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{163}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{164}: rebase (pick): E
0e6d3b5 HEAD@{165}: rebase (pick): D
0103ecb HEAD@{166}: rebase (pick): C
d9df450 HEAD@{167}: rebase (start): checkout B...
ee2ad00 HEAD@{168}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{169}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{170}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{171}: rebase (pick): E
0e6d3b5 HEAD@{172}: rebase (pick): D
0103ecb HEAD@{173}: rebase (pick): C
d9df450 HEAD@{174}: rebase (start): checkout B
ee2ad00 HEAD@{175}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{176}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{177}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{178}: rebase (pick): E
0e6d3b5 HEAD@{179}: rebase (pick): D
0103ecb HEAD@{180}: rebase (pick): C
d9df450 HEAD@{181}: rebase (start): checkout B
ee2ad00 HEAD@{182}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{183}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{184}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{185}: rebase (pick): E
0e6d3b5 HEAD@{186}: rebase (pick): D
0103ecb HEAD@{187}: rebase (pick): C
d9df450 HEAD@{188}: rebase (start): checkout B
ee2ad00 HEAD@{189}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{190}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{191}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{192}: rebase (pick): E
be8f64f HEAD@{193}: rebase (start): checkout main
ee2ad00 HEAD@{194}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{195}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{196}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{197}: rebase (pick): E
be8f64f HEAD@{198}: rebase (start): checkout main
ee2ad00 HEAD@{199}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{200}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{201}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{202}: rebase (pick): E
be8f64f HEAD@{203}: rebase (start): checkout main
ee2ad00 HEAD@{204}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{205}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{206}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{207}: rebase (pick): E
be8f64f HEAD@{208}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{209}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{210}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{211}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{212}: rebase (pick): E
be8f64f HEAD@{213}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{214}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{215}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{216}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{217}: rebase (pick): E
be8f64f HEAD@{218}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{219}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{220}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{221}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{222}: rebase (pick): E
be8f64f HEAD@{223}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{224}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{225}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{226}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{227}: rebase (pick): E
be8f64f HEAD@{228}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{229}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{230}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{231}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{232}: rebase (pick): E
be8f64f HEAD@{233}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{234}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{235}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{236}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{237}: rebase (pick): E
be8f64f HEAD@{238}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{239}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{240}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{241}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{242}: rebase (pick): E
be8f64f HEAD@{243}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{244}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{245}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{246}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{247}: rebase (pick): E
be8f64f HEAD@{248}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{249}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{250}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{251}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{252}: rebase (pick): E
be8f64f HEAD@{253}: rebase (start): checkout main...side
ee2ad00 HEAD@{254}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{255}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{256}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{257}: rebase (pick): E
be8f64f HEAD@{258}: rebase (start): checkout main...side
ee2ad00 HEAD@{259}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{260}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{261}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{262}: rebase (pick): E
be8f64f HEAD@{263}: rebase (start): checkout main...side
ee2ad00 HEAD@{264}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{265}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{266}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{267}: rebase (pick): E
be8f64f HEAD@{268}: rebase (start): checkout main...
ee2ad00 HEAD@{269}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{270}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{271}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{272}: rebase (pick): E
be8f64f HEAD@{273}: rebase (start): checkout main...
ee2ad00 HEAD@{274}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{275}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{276}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{277}: rebase (pick): E
be8f64f HEAD@{278}: rebase (start): checkout main...
ee2ad00 HEAD@{279}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{280}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{281}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{282}: rebase (pick): E
0e6d3b5 HEAD@{283}: rebase (pick): D
0103ecb HEAD@{284}: rebase (pick): C
d9df450 HEAD@{285}: rebase (start): checkout B...
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B...
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{295}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{296}: rebase (pick): E
0e6d3b5 HEAD@{297}: rebase (pick): D
0103ecb HEAD@{298}: rebase (pick): C
d9df450 HEAD@{299}: rebase (start): checkout B...
ee2ad00 HEAD@{300}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{301}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{302}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{303}: rebase (pick): E
0e6d3b5 HEAD@{304}: rebase (pick): D
0103ecb HEAD@{305}: rebase (pick): C
d9df450 HEAD@{306}: rebase (start): checkout B
ee2ad00 HEAD@{307}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{308}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{309}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{310}: rebase (pick): E
0e6d3b5 HEAD@{311}: rebase (pick): D
0103ecb HEAD@{312}: rebase (pick): C
d9df450 HEAD@{313}: rebase (start): checkout B
ee2ad00 HEAD@{314}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{315}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{316}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{317}: rebase (pick): E
0e6d3b5 HEAD@{318}: rebase (pick): D
0103ecb HEAD@{319}: rebase (pick): C
d9df450 HEAD@{320}: rebase (start): checkout B
ee2ad00 HEAD@{321}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{322}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{323}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{324}: rebase (pick): E
be8f64f HEAD@{325}: rebase (start): checkout main
ee2ad00 HEAD@{326}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{327}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{328}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{329}: rebase (pick): E
be8f64f HEAD@{330}: rebase (start): checkout main
ee2ad00 HEAD@{331}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{332}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{333}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{334}: rebase (pick): E
be8f64f HEAD@{335}: rebase (start): checkout main
ee2ad00 HEAD@{336}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{337}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{338}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{339}: rebase (pick): E
be8f64f HEAD@{340}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{341}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{342}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{343}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{344}: rebase (pick): E
be8f64f HEAD@{345}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{346}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{347}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{348}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{349}: rebase (pick): E
be8f64f HEAD@{350}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{351}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{352}: commit: E
be8f64f HEAD@{353}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{354}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{355}: rebase (start): checkout main...side
be8f64f HEAD@{356}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{357}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{358}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{359}: rebase (start): checkout main...side
be8f64f HEAD@{360}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{361}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{362}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{363}: rebase (start): checkout main...side
be8f64f HEAD@{364}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{365}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{366}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{367}: rebase (start): checkout main...
be8f64f HEAD@{368}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{369}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{370}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{371}: rebase (start): checkout main...
be8f64f HEAD@{372}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{373}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{374}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{375}: rebase (start): checkout main...
be8f64f HEAD@{376}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{377}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{378}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{379}: rebase (pick): D
e9ee69b HEAD@{380}: rebase (pick): C
d9df450 HEAD@{381}: rebase (start): checkout B...
be8f64f HEAD@{382}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{383}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{384}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{385}: rebase (pick): D
e9ee69b HEAD@{386}: rebase (pick): C
d9df450 HEAD@{387}: rebase (start): checkout B...
be8f64f HEAD@{388}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{389}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{390}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{391}: rebase (pick): D
e9ee69b HEAD@{392}: rebase (pick): C
d9df450 HEAD@{393}: rebase (start): checkout B...
be8f64f HEAD@{394}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{395}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{396}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{397}: rebase (pick): D
e9ee69b HEAD@{398}: rebase (pick): C
d9df450 HEAD@{399}: rebase (start): checkout B
be8f64f HEAD@{400}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{401}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{402}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{403}: rebase (pick): D
e9ee69b HEAD@{404}: rebase (pick): C
d9df450 HEAD@{405}: rebase (start): checkout B
be8f64f HEAD@{406}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{407}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{408}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{409}: rebase (pick): D
e9ee69b HEAD@{410}: rebase (pick): C
d9df450 HEAD@{411}: rebase (start): checkout B
be8f64f HEAD@{412}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{413}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{414}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{415}: rebase (start): checkout main
be8f64f HEAD@{416}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{417}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{418}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{419}: rebase (start): checkout main
be8f64f HEAD@{420}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{421}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{422}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{423}: rebase (start): checkout main
be8f64f HEAD@{424}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{425}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{426}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{427}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{428}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{429}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{430}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{431}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{432}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{433}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{434}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{435}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{436}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{437}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{438}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{439}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{440}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{441}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{442}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{443}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{444}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{445}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{446}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{447}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{448}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{449}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{450}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{451}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{452}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{453}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{454}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{455}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{456}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{457}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{458}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{459}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{460}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{461}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{462}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{463}: rebase (start): checkout main...side
be8f64f HEAD@{464}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{465}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{466}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{467}: rebase (start): checkout main...side
be8f64f HEAD@{468}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{469}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{470}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{471}: rebase (start): checkout main...side
be8f64f HEAD@{472}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{473}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{474}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{475}: rebase (start): checkout main...
be8f64f HEAD@{476}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{477}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{478}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{479}: rebase (start): checkout main...
be8f64f HEAD@{480}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{481}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{482}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{483}: rebase (start): checkout main...
be8f64f HEAD@{484}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{485}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{486}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{487}: rebase (pick): D
e9ee69b HEAD@{488}: rebase (pick): C
d9df450 HEAD@{489}: rebase (start): checkout B...
be8f64f HEAD@{490}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{491}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{492}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{493}: rebase (pick): D
e9ee69b HEAD@{494}: rebase (pick): C
d9df450 HEAD@{495}: rebase (start): checkout B...
be8f64f HEAD@{496}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{497}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{498}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{499}: rebase (pick): D
e9ee69b HEAD@{500}: rebase (pick): C
d9df450 HEAD@{501}: rebase (start): checkout B...
be8f64f HEAD@{502}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{503}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{504}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{505}: rebase (pick): D
e9ee69b HEAD@{506}: rebase (pick): C
d9df450 HEAD@{507}: rebase (start): checkout B
be8f64f HEAD@{508}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{509}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{510}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{511}: rebase (pick): D
e9ee69b HEAD@{512}: rebase (pick): C
d9df450 HEAD@{513}: rebase (start): checkout B
be8f64f HEAD@{514}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{515}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{516}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{517}: rebase (pick): D
e9ee69b HEAD@{518}: rebase (pick): C
d9df450 HEAD@{519}: rebase (start): checkout B
be8f64f HEAD@{520}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{521}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{522}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{523}: rebase (start): checkout main
be8f64f HEAD@{524}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{525}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{526}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{527}: rebase (start): checkout main
be8f64f HEAD@{528}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{529}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{530}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{531}: rebase (start): checkout main
be8f64f HEAD@{532}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{533}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{534}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{535}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{536}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{537}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{538}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{539}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{540}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{541}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{542}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{543}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{544}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{545}: checkout: moving from main to side
be8f64f HEAD@{546}: commit: D
35a8500 HEAD@{547}: commit: C
d9df450 HEAD@{548}: commit: B
0ddfaf1 HEAD@{549}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 210 - git rebase --merge --fork-point --onto B... B with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.211 'git rebase --merge --no-ff --fork-point --onto B... B with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 211 - git rebase --merge --no-ff --fork-point --onto B... B with our and their changes is work with diff HEAD

checking known breakage of 3432.212 'git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
test_line_count: line count for actual !-gt 557
ee2ad00 HEAD@{0}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{1}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{2}: rebase (pick): E
6376ca0 HEAD@{3}: rebase (pick): D
c45f440 HEAD@{4}: rebase (pick): C
d9df450 HEAD@{5}: rebase (start): checkout B...
ee2ad00 HEAD@{6}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{7}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{8}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{9}: rebase (pick): E
6376ca0 HEAD@{10}: rebase (pick): D
c45f440 HEAD@{11}: rebase (pick): C
d9df450 HEAD@{12}: rebase (start): checkout B...
ee2ad00 HEAD@{13}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{14}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{15}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{16}: rebase (pick): E
6376ca0 HEAD@{17}: rebase (pick): D
c45f440 HEAD@{18}: rebase (pick): C
d9df450 HEAD@{19}: rebase (start): checkout B
ee2ad00 HEAD@{20}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{21}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{22}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{23}: rebase (pick): E
6376ca0 HEAD@{24}: rebase (pick): D
c45f440 HEAD@{25}: rebase (pick): C
d9df450 HEAD@{26}: rebase (start): checkout B
ee2ad00 HEAD@{27}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{28}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{29}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{30}: rebase (pick): E
6376ca0 HEAD@{31}: rebase (pick): D
c45f440 HEAD@{32}: rebase (pick): C
d9df450 HEAD@{33}: rebase (start): checkout B
ee2ad00 HEAD@{34}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{35}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{36}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{37}: rebase (pick): E
be8f64f HEAD@{38}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{39}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{40}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{41}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{42}: rebase (pick): E
be8f64f HEAD@{43}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{44}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{45}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{46}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{47}: rebase (pick): E
be8f64f HEAD@{48}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{49}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{50}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{51}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{52}: rebase (pick): E
be8f64f HEAD@{53}: rebase (start): checkout main...side
ee2ad00 HEAD@{54}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{55}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{56}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{57}: rebase (pick): E
be8f64f HEAD@{58}: rebase (start): checkout main...side
ee2ad00 HEAD@{59}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{60}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{61}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{62}: rebase (pick): E
be8f64f HEAD@{63}: rebase (start): checkout main...side
ee2ad00 HEAD@{64}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{65}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{66}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{67}: rebase (pick): E
be8f64f HEAD@{68}: rebase (start): checkout main...
ee2ad00 HEAD@{69}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{70}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{71}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{72}: rebase (pick): E
be8f64f HEAD@{73}: rebase (start): checkout main...
ee2ad00 HEAD@{74}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{75}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
769df17 HEAD@{76}: rebase (finish): returning to refs/heads/side
769df17 HEAD@{77}: rebase (pick): E
be8f64f HEAD@{78}: rebase (start): checkout main...
ee2ad00 HEAD@{79}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{80}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{81}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{82}: rebase (pick): E
6376ca0 HEAD@{83}: rebase (pick): D
c45f440 HEAD@{84}: rebase (pick): C
d9df450 HEAD@{85}: rebase (start): checkout B...
ee2ad00 HEAD@{86}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{87}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{88}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{89}: rebase (pick): E
6376ca0 HEAD@{90}: rebase (pick): D
c45f440 HEAD@{91}: rebase (pick): C
d9df450 HEAD@{92}: rebase (start): checkout B...
ee2ad00 HEAD@{93}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{94}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{95}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{96}: rebase (pick): E
6376ca0 HEAD@{97}: rebase (pick): D
c45f440 HEAD@{98}: rebase (pick): C
d9df450 HEAD@{99}: rebase (start): checkout B...
ee2ad00 HEAD@{100}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{101}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{102}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{103}: rebase (pick): E
6376ca0 HEAD@{104}: rebase (pick): D
c45f440 HEAD@{105}: rebase (pick): C
d9df450 HEAD@{106}: rebase (start): checkout B
ee2ad00 HEAD@{107}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{108}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{109}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{110}: rebase (pick): E
6376ca0 HEAD@{111}: rebase (pick): D
c45f440 HEAD@{112}: rebase (pick): C
d9df450 HEAD@{113}: rebase (start): checkout B
ee2ad00 HEAD@{114}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{115}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
a96c691 HEAD@{116}: rebase (finish): returning to refs/heads/side
a96c691 HEAD@{117}: rebase (pick): E
6376ca0 HEAD@{118}: rebase (pick): D
c45f440 HEAD@{119}: rebase (pick): C
d9df450 HEAD@{120}: rebase (start): checkout B
ee2ad00 HEAD@{121}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{122}: checkout: moving from main to side
71ab28b HEAD@{123}: commit: F
be8f64f HEAD@{124}: checkout: moving from side to main
ee2ad00 HEAD@{125}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{126}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{127}: rebase (pick): E
be8f64f HEAD@{128}: rebase (start): checkout main...side
ee2ad00 HEAD@{129}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{130}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{131}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{132}: rebase (pick): E
be8f64f HEAD@{133}: rebase (start): checkout main...side
ee2ad00 HEAD@{134}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{135}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{136}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{137}: rebase (pick): E
be8f64f HEAD@{138}: rebase (start): checkout main...side
ee2ad00 HEAD@{139}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{140}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{141}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{142}: rebase (pick): E
be8f64f HEAD@{143}: rebase (start): checkout main...
ee2ad00 HEAD@{144}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{145}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{146}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{147}: rebase (pick): E
be8f64f HEAD@{148}: rebase (start): checkout main...
ee2ad00 HEAD@{149}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{150}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{151}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{152}: rebase (pick): E
be8f64f HEAD@{153}: rebase (start): checkout main...
ee2ad00 HEAD@{154}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{155}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{156}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{157}: rebase (pick): E
0e6d3b5 HEAD@{158}: rebase (pick): D
0103ecb HEAD@{159}: rebase (pick): C
d9df450 HEAD@{160}: rebase (start): checkout B...
ee2ad00 HEAD@{161}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{162}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{163}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{164}: rebase (pick): E
0e6d3b5 HEAD@{165}: rebase (pick): D
0103ecb HEAD@{166}: rebase (pick): C
d9df450 HEAD@{167}: rebase (start): checkout B...
ee2ad00 HEAD@{168}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{169}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{170}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{171}: rebase (pick): E
0e6d3b5 HEAD@{172}: rebase (pick): D
0103ecb HEAD@{173}: rebase (pick): C
d9df450 HEAD@{174}: rebase (start): checkout B...
ee2ad00 HEAD@{175}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{176}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{177}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{178}: rebase (pick): E
0e6d3b5 HEAD@{179}: rebase (pick): D
0103ecb HEAD@{180}: rebase (pick): C
d9df450 HEAD@{181}: rebase (start): checkout B
ee2ad00 HEAD@{182}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{183}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{184}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{185}: rebase (pick): E
0e6d3b5 HEAD@{186}: rebase (pick): D
0103ecb HEAD@{187}: rebase (pick): C
d9df450 HEAD@{188}: rebase (start): checkout B
ee2ad00 HEAD@{189}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{190}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{191}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{192}: rebase (pick): E
0e6d3b5 HEAD@{193}: rebase (pick): D
0103ecb HEAD@{194}: rebase (pick): C
d9df450 HEAD@{195}: rebase (start): checkout B
ee2ad00 HEAD@{196}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{197}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{198}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{199}: rebase (pick): E
be8f64f HEAD@{200}: rebase (start): checkout main
ee2ad00 HEAD@{201}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{202}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{203}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{204}: rebase (pick): E
be8f64f HEAD@{205}: rebase (start): checkout main
ee2ad00 HEAD@{206}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{207}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{208}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{209}: rebase (pick): E
be8f64f HEAD@{210}: rebase (start): checkout main
ee2ad00 HEAD@{211}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{212}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{213}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{214}: rebase (pick): E
be8f64f HEAD@{215}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{216}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{217}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{218}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{219}: rebase (pick): E
be8f64f HEAD@{220}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{221}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{222}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{223}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{224}: rebase (pick): E
be8f64f HEAD@{225}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{226}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{227}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{228}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{229}: rebase (pick): E
be8f64f HEAD@{230}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{231}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{232}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{233}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{234}: rebase (pick): E
be8f64f HEAD@{235}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{236}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{237}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{238}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{239}: rebase (pick): E
be8f64f HEAD@{240}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{241}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{242}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{243}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{244}: rebase (pick): E
be8f64f HEAD@{245}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{246}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{247}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{248}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{249}: rebase (pick): E
be8f64f HEAD@{250}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{251}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{252}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{253}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{254}: rebase (pick): E
be8f64f HEAD@{255}: rebase (start): checkout refs/heads/main...side
ee2ad00 HEAD@{256}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{257}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{258}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{259}: rebase (pick): E
be8f64f HEAD@{260}: rebase (start): checkout main...side
ee2ad00 HEAD@{261}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{262}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{263}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{264}: rebase (pick): E
be8f64f HEAD@{265}: rebase (start): checkout main...side
ee2ad00 HEAD@{266}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{267}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{268}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{269}: rebase (pick): E
be8f64f HEAD@{270}: rebase (start): checkout main...side
ee2ad00 HEAD@{271}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{272}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{273}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{274}: rebase (pick): E
be8f64f HEAD@{275}: rebase (start): checkout main...
ee2ad00 HEAD@{276}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{277}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{278}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{279}: rebase (pick): E
be8f64f HEAD@{280}: rebase (start): checkout main...
ee2ad00 HEAD@{281}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{282}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{283}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{284}: rebase (pick): E
be8f64f HEAD@{285}: rebase (start): checkout main...
ee2ad00 HEAD@{286}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{287}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{288}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{289}: rebase (pick): E
0e6d3b5 HEAD@{290}: rebase (pick): D
0103ecb HEAD@{291}: rebase (pick): C
d9df450 HEAD@{292}: rebase (start): checkout B...
ee2ad00 HEAD@{293}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{294}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{295}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{296}: rebase (pick): E
0e6d3b5 HEAD@{297}: rebase (pick): D
0103ecb HEAD@{298}: rebase (pick): C
d9df450 HEAD@{299}: rebase (start): checkout B...
ee2ad00 HEAD@{300}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{301}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{302}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{303}: rebase (pick): E
0e6d3b5 HEAD@{304}: rebase (pick): D
0103ecb HEAD@{305}: rebase (pick): C
d9df450 HEAD@{306}: rebase (start): checkout B...
ee2ad00 HEAD@{307}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{308}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{309}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{310}: rebase (pick): E
0e6d3b5 HEAD@{311}: rebase (pick): D
0103ecb HEAD@{312}: rebase (pick): C
d9df450 HEAD@{313}: rebase (start): checkout B
ee2ad00 HEAD@{314}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{315}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{316}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{317}: rebase (pick): E
0e6d3b5 HEAD@{318}: rebase (pick): D
0103ecb HEAD@{319}: rebase (pick): C
d9df450 HEAD@{320}: rebase (start): checkout B
ee2ad00 HEAD@{321}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{322}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
271ccd1 HEAD@{323}: rebase (finish): returning to refs/heads/side
271ccd1 HEAD@{324}: rebase (pick): E
0e6d3b5 HEAD@{325}: rebase (pick): D
0103ecb HEAD@{326}: rebase (pick): C
d9df450 HEAD@{327}: rebase (start): checkout B
ee2ad00 HEAD@{328}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{329}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{330}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{331}: rebase (pick): E
be8f64f HEAD@{332}: rebase (start): checkout main
ee2ad00 HEAD@{333}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{334}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{335}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{336}: rebase (pick): E
be8f64f HEAD@{337}: rebase (start): checkout main
ee2ad00 HEAD@{338}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{339}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{340}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{341}: rebase (pick): E
be8f64f HEAD@{342}: rebase (start): checkout main
ee2ad00 HEAD@{343}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{344}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{345}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{346}: rebase (pick): E
be8f64f HEAD@{347}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{348}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{349}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{350}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{351}: rebase (pick): E
be8f64f HEAD@{352}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{353}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{354}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{355}: rebase (finish): returning to refs/heads/side
ee2ad00 HEAD@{356}: rebase (pick): E
be8f64f HEAD@{357}: rebase (start): checkout refs/heads/main
ee2ad00 HEAD@{358}: reset: moving to ee2ad00ba5d6f9cffc4462b5b728f61485e3ec67
ee2ad00 HEAD@{359}: commit: E
be8f64f HEAD@{360}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{361}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{362}: rebase (start): checkout main...side
be8f64f HEAD@{363}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{364}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{365}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{366}: rebase (start): checkout main...side
be8f64f HEAD@{367}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{368}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{369}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{370}: rebase (start): checkout main...side
be8f64f HEAD@{371}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{372}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{373}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{374}: rebase (start): checkout main...
be8f64f HEAD@{375}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{376}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{377}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{378}: rebase (start): checkout main...
be8f64f HEAD@{379}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{380}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{381}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{382}: rebase (start): checkout main...
be8f64f HEAD@{383}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{384}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{385}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{386}: rebase (pick): D
e9ee69b HEAD@{387}: rebase (pick): C
d9df450 HEAD@{388}: rebase (start): checkout B...
be8f64f HEAD@{389}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{390}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{391}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{392}: rebase (pick): D
e9ee69b HEAD@{393}: rebase (pick): C
d9df450 HEAD@{394}: rebase (start): checkout B...
be8f64f HEAD@{395}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{396}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{397}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{398}: rebase (pick): D
e9ee69b HEAD@{399}: rebase (pick): C
d9df450 HEAD@{400}: rebase (start): checkout B...
be8f64f HEAD@{401}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{402}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{403}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{404}: rebase (pick): D
e9ee69b HEAD@{405}: rebase (pick): C
d9df450 HEAD@{406}: rebase (start): checkout B
be8f64f HEAD@{407}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{408}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{409}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{410}: rebase (pick): D
e9ee69b HEAD@{411}: rebase (pick): C
d9df450 HEAD@{412}: rebase (start): checkout B
be8f64f HEAD@{413}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{414}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{415}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{416}: rebase (pick): D
e9ee69b HEAD@{417}: rebase (pick): C
d9df450 HEAD@{418}: rebase (start): checkout B
be8f64f HEAD@{419}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{420}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{421}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{422}: rebase (start): checkout main
be8f64f HEAD@{423}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{424}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{425}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{426}: rebase (start): checkout main
be8f64f HEAD@{427}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{428}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{429}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{430}: rebase (start): checkout main
be8f64f HEAD@{431}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{432}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{433}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{434}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{435}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{436}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{437}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{438}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{439}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{440}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{441}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{442}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{443}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{444}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{445}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{446}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{447}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{448}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{449}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{450}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{451}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{452}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{453}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{454}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{455}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{456}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{457}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{458}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{459}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{460}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{461}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{462}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{463}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{464}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{465}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{466}: rebase (start): checkout refs/heads/main...side
be8f64f HEAD@{467}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{468}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{469}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{470}: rebase (start): checkout main...side
be8f64f HEAD@{471}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{472}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{473}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{474}: rebase (start): checkout main...side
be8f64f HEAD@{475}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{476}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{477}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{478}: rebase (start): checkout main...side
be8f64f HEAD@{479}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{480}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{481}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{482}: rebase (start): checkout main...
be8f64f HEAD@{483}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{484}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{485}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{486}: rebase (start): checkout main...
be8f64f HEAD@{487}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{488}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{489}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{490}: rebase (start): checkout main...
be8f64f HEAD@{491}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{492}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{493}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{494}: rebase (pick): D
e9ee69b HEAD@{495}: rebase (pick): C
d9df450 HEAD@{496}: rebase (start): checkout B...
be8f64f HEAD@{497}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{498}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{499}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{500}: rebase (pick): D
e9ee69b HEAD@{501}: rebase (pick): C
d9df450 HEAD@{502}: rebase (start): checkout B...
be8f64f HEAD@{503}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{504}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{505}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{506}: rebase (pick): D
e9ee69b HEAD@{507}: rebase (pick): C
d9df450 HEAD@{508}: rebase (start): checkout B...
be8f64f HEAD@{509}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{510}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{511}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{512}: rebase (pick): D
e9ee69b HEAD@{513}: rebase (pick): C
d9df450 HEAD@{514}: rebase (start): checkout B
be8f64f HEAD@{515}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{516}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{517}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{518}: rebase (pick): D
e9ee69b HEAD@{519}: rebase (pick): C
d9df450 HEAD@{520}: rebase (start): checkout B
be8f64f HEAD@{521}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{522}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
9405860 HEAD@{523}: rebase (finish): returning to refs/heads/side
9405860 HEAD@{524}: rebase (pick): D
e9ee69b HEAD@{525}: rebase (pick): C
d9df450 HEAD@{526}: rebase (start): checkout B
be8f64f HEAD@{527}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{528}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{529}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{530}: rebase (start): checkout main
be8f64f HEAD@{531}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{532}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{533}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{534}: rebase (start): checkout main
be8f64f HEAD@{535}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{536}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{537}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{538}: rebase (start): checkout main
be8f64f HEAD@{539}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{540}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{541}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{542}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{543}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{544}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{545}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{546}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{547}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{548}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{549}: rebase (finish): returning to refs/heads/side
be8f64f HEAD@{550}: rebase (start): checkout refs/heads/main
be8f64f HEAD@{551}: reset: moving to be8f64ffad20e1c23faacd732a7ba726ee6f156d
be8f64f HEAD@{552}: checkout: moving from main to side
be8f64f HEAD@{553}: commit: D
35a8500 HEAD@{554}: commit: C
d9df450 HEAD@{555}: commit: B
0ddfaf1 HEAD@{556}: commit (initial): A
HEAD is now at ee2ad00 E
not ok 212 - git rebase --merge --fork-point --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with same HEAD # TODO known breakage

expecting success of 3432.213 'git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto B... B >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 213 - git rebase --merge --no-ff --fork-point --onto B... B (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.214 'git rebase --apply --fork-point --onto main... main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 214 - git rebase --apply --fork-point --onto main... main with our and their changes is noop with same HEAD

expecting success of 3432.215 'git rebase --apply --no-ff --fork-point --onto main... main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 215 - git rebase --apply --no-ff --fork-point --onto main... main with our and their changes is work with diff HEAD

expecting success of 3432.216 'git rebase --merge --fork-point --onto main... main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 216 - git rebase --merge --fork-point --onto main... main with our and their changes is noop with same HEAD

expecting success of 3432.217 'git rebase --merge --no-ff --fork-point --onto main... main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 217 - git rebase --merge --no-ff --fork-point --onto main... main with our and their changes is work with diff HEAD

expecting success of 3432.218 'git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 218 - git rebase --merge --fork-point --onto main... main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.219 'git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --onto main... main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 219 - git rebase --merge --no-ff --fork-point --onto main... main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

expecting success of 3432.220 'git rebase --apply --fork-point --keep-base main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 220 - git rebase --apply --fork-point --keep-base main with our and their changes is noop with same HEAD

expecting success of 3432.221 'git rebase --apply --no-ff --fork-point --keep-base main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --apply --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 221 - git rebase --apply --no-ff --fork-point --keep-base main with our and their changes is work with diff HEAD

expecting success of 3432.222 'git rebase --merge --fork-point --keep-base main with our and their changes is noop with same HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 222 - git rebase --merge --fork-point --keep-base main with our and their changes is noop with same HEAD

expecting success of 3432.223 'git rebase --merge --no-ff --fork-point --keep-base main with our and their changes is work with diff HEAD': 
		if test 0 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 223 - git rebase --merge --no-ff --fork-point --keep-base main with our and their changes is work with diff HEAD

expecting success of 3432.224 'git rebase --merge --fork-point --keep-base main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test noop = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test noop = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test same = same
		then
			test_cmp_rev $oldhead $newhead
		elif test same = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
HEAD is now at ee2ad00 E
ok 224 - git rebase --merge --fork-point --keep-base main (rebase.abbreviateCommands = true) with our and their changes is noop with same HEAD

expecting success of 3432.225 'git rebase --merge --no-ff --fork-point --keep-base main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD': 
		if test 1 -eq 1
		then
			test_config rebase.abbreviateCommands true
		fi &&
		oldhead=$(git rev-parse HEAD) &&
		test_when_finished 'git reset --hard $oldhead' &&
		git reflog HEAD >expect &&
		git rebase --merge --no-ff --fork-point --keep-base main >stdout &&
		git reflog HEAD >actual &&
		if test work = work
		then
			old=$(wc -l <expect) &&
			test_line_count '-gt' $old actual
		elif test work = noop
		then
			test_cmp expect actual
		fi &&
		newhead=$(git rev-parse HEAD) &&
		if test diff = same
		then
			test_cmp_rev $oldhead $newhead
		elif test diff = diff
		then
			test_cmp_rev ! $oldhead $newhead
		fi
	
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/side.
HEAD is now at ee2ad00 E
ok 225 - git rebase --merge --no-ff --fork-point --keep-base main (rebase.abbreviateCommands = true) with our and their changes is work with diff HEAD

# still have 6 known breakage(s)
# passed all remaining 219 test(s)
1..225
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3514-cherry-pick-revert-gpg.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3514-cherry-pick-revert-gpg/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t3514-cherry-pick-revert-gpg/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t3514-cherry-pick-revert-gpg/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 3514.1 'setup': 
	test_commit one &&
	git switch -c side &&
	test_commit side1 &&
	test_commit side2 &&
	git switch - &&
	test_commit two &&
	test_commit three &&
	test_commit tip

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'side'
[side 280f728] side1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[side 2e6a05f] side2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
Switched to branch 'master'
[master 021da12] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master a0dcc8f] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master ef70922] tip
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tip.t
ok 1 - setup

expecting success of 3514.2 'cherry-pick  side with commit.gpgsign=false won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick  side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master caeb198] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 2 - cherry-pick  side with commit.gpgsign=false won't sign commit

expecting success of 3514.3 'cherry-pick  ..side with commit.gpgsign=false won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick  ..side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 6846999] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 14b3cff] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 3 - cherry-pick  ..side with commit.gpgsign=false won't sign commit

expecting success of 3514.4 'cherry-pick  side with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick  side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 169f01b] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:13 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 4 - cherry-pick  side with commit.gpgsign=true will sign commit

expecting success of 3514.5 'cherry-pick  ..side with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick  ..side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 29e8147] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 30e90e2] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:14 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:14 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 5 - cherry-pick  ..side with commit.gpgsign=true will sign commit

expecting success of 3514.6 'cherry-pick --no-gpg-sign side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --no-gpg-sign side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master caeb198] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 6 - cherry-pick --no-gpg-sign side with commit.gpgsign=true won't sign commit

expecting success of 3514.7 'cherry-pick --no-gpg-sign ..side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --no-gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 6846999] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 14b3cff] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 7 - cherry-pick --no-gpg-sign ..side with commit.gpgsign=true won't sign commit

expecting success of 3514.8 'cherry-pick --gpg-sign --no-gpg-sign side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --gpg-sign --no-gpg-sign side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master caeb198] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 8 - cherry-pick --gpg-sign --no-gpg-sign side with commit.gpgsign=true won't sign commit

expecting success of 3514.9 'cherry-pick --gpg-sign --no-gpg-sign ..side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --gpg-sign --no-gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 6846999] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 14b3cff] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 9 - cherry-pick --gpg-sign --no-gpg-sign ..side with commit.gpgsign=true won't sign commit

expecting success of 3514.10 'cherry-pick --no-gpg-sign --gpg-sign side with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick --no-gpg-sign --gpg-sign side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 15a70c5] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:15 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 10 - cherry-pick --no-gpg-sign --gpg-sign side with commit.gpgsign=false will sign commit

expecting success of 3514.11 'cherry-pick --no-gpg-sign --gpg-sign ..side with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick --no-gpg-sign --gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master bfb6b49] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master db2968f] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:16 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:15 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 11 - cherry-pick --no-gpg-sign --gpg-sign ..side with commit.gpgsign=false will sign commit

expecting success of 3514.12 'cherry-pick --edit side with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master c7744c7] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:16 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 12 - cherry-pick --edit side with commit.gpgsign=true will sign commit

expecting success of 3514.13 'cherry-pick --edit ..side with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit ..side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 7ab2fc9] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 8b37070] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:17 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:16 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 13 - cherry-pick --edit ..side with commit.gpgsign=true will sign commit

expecting success of 3514.14 'cherry-pick --edit --no-gpg-sign side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit --no-gpg-sign side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master caeb198] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 14 - cherry-pick --edit --no-gpg-sign side with commit.gpgsign=true won't sign commit

expecting success of 3514.15 'cherry-pick --edit --no-gpg-sign ..side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit --no-gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 6846999] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 14b3cff] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 15 - cherry-pick --edit --no-gpg-sign ..side with commit.gpgsign=true won't sign commit

expecting success of 3514.16 'cherry-pick --edit --gpg-sign --no-gpg-sign side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit --gpg-sign --no-gpg-sign side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master caeb198] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 16 - cherry-pick --edit --gpg-sign --no-gpg-sign side with commit.gpgsign=true won't sign commit

expecting success of 3514.17 'cherry-pick --edit --gpg-sign --no-gpg-sign ..side with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git cherry-pick --edit --gpg-sign --no-gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 6846999] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master 14b3cff] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
ok 17 - cherry-pick --edit --gpg-sign --no-gpg-sign ..side with commit.gpgsign=true won't sign commit

expecting success of 3514.18 'cherry-pick --edit --no-gpg-sign --gpg-sign side with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick --edit --no-gpg-sign --gpg-sign side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master c63180a] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:18 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 18 - cherry-pick --edit --no-gpg-sign --gpg-sign side with commit.gpgsign=false will sign commit

expecting success of 3514.19 'cherry-pick --edit --no-gpg-sign --gpg-sign ..side with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git cherry-pick --edit --no-gpg-sign --gpg-sign ..side &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master d88865c] side1
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side1.t
[master e0a979e] side2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
gpg: Signature made Wed Dec 28 07:42:19 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:19 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 19 - cherry-pick --edit --no-gpg-sign --gpg-sign ..side with commit.gpgsign=false will sign commit

expecting success of 3514.20 'revert --edit HEAD with commit.gpgsign=false won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git revert --edit HEAD &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
ok 20 - revert --edit HEAD with commit.gpgsign=false won't sign commit

expecting success of 3514.21 'revert --edit two.. with commit.gpgsign=false won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git revert --edit two.. &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 89c0e70] Revert "three"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
ok 21 - revert --edit two.. with commit.gpgsign=false won't sign commit

expecting success of 3514.22 'revert --edit HEAD with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit HEAD &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master f8faed6] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
gpg: Signature made Wed Dec 28 07:42:20 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 22 - revert --edit HEAD with commit.gpgsign=true will sign commit

expecting success of 3514.23 'revert --edit two.. with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit two.. &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master f8faed6] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master bb58dbe] Revert "three"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
gpg: Signature made Wed Dec 28 07:42:21 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:20 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 23 - revert --edit two.. with commit.gpgsign=true will sign commit

expecting success of 3514.24 'revert --edit --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit --no-gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
ok 24 - revert --edit --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit

expecting success of 3514.25 'revert --edit --no-gpg-sign two.. with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit --no-gpg-sign two.. &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 89c0e70] Revert "three"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
ok 25 - revert --edit --no-gpg-sign two.. with commit.gpgsign=true won't sign commit

expecting success of 3514.26 'revert --edit --gpg-sign --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit --gpg-sign --no-gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
ok 26 - revert --edit --gpg-sign --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit

expecting success of 3514.27 'revert --edit --gpg-sign --no-gpg-sign two.. with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --edit --gpg-sign --no-gpg-sign two.. &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 89c0e70] Revert "three"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
ok 27 - revert --edit --gpg-sign --no-gpg-sign two.. with commit.gpgsign=true won't sign commit

expecting success of 3514.28 'revert --edit --no-gpg-sign --gpg-sign HEAD with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git revert --edit --no-gpg-sign --gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master 5a3a3a1] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
gpg: Signature made Wed Dec 28 07:42:22 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 28 - revert --edit --no-gpg-sign --gpg-sign HEAD with commit.gpgsign=false will sign commit

expecting success of 3514.29 'revert --edit --no-gpg-sign --gpg-sign two.. with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git revert --edit --no-gpg-sign --gpg-sign two.. &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ddaea12] Revert "tip"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master dc01922] Revert "three"
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
gpg: Signature made Wed Dec 28 07:42:23 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:23 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 29 - revert --edit --no-gpg-sign --gpg-sign two.. with commit.gpgsign=false will sign commit

expecting success of 3514.30 'revert --no-edit HEAD with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit HEAD &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ddaea12] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
gpg: Signature made Wed Dec 28 07:42:23 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 30 - revert --no-edit HEAD with commit.gpgsign=true will sign commit

expecting success of 3514.31 'revert --no-edit two.. with commit.gpgsign=true will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit two.. &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master a614579] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 5d8ebb4] Revert "three"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
gpg: Signature made Wed Dec 28 07:42:24 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 07:42:24 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 31 - revert --no-edit two.. with commit.gpgsign=true will sign commit

expecting success of 3514.32 'revert --no-edit --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit --no-gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
ok 32 - revert --no-edit --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit

expecting success of 3514.33 'revert --no-edit --no-gpg-sign two.. with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit --no-gpg-sign two.. &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 89c0e70] Revert "three"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
ok 33 - revert --no-edit --no-gpg-sign two.. with commit.gpgsign=true won't sign commit

expecting success of 3514.34 'revert --no-edit --gpg-sign --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit --gpg-sign --no-gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
ok 34 - revert --no-edit --gpg-sign --no-gpg-sign HEAD with commit.gpgsign=true won't sign commit

expecting success of 3514.35 'revert --no-edit --gpg-sign --no-gpg-sign two.. with commit.gpgsign=true won't sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign true &&
		git revert --no-edit --gpg-sign --no-gpg-sign two.. &&
		git rev-list tip.. >rev-list &&
		test_must_fail git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master ef14522] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
[master 89c0e70] Revert "three"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 three.t
ok 35 - revert --no-edit --gpg-sign --no-gpg-sign two.. with commit.gpgsign=true won't sign commit

expecting success of 3514.36 'revert --no-edit --no-gpg-sign --gpg-sign HEAD with commit.gpgsign=false will sign commit': 
		git reset --hard tip &&
		git config commit.gpgsign false &&
		git revert --no-edit --no-gpg-sign --gpg-sign HEAD &&
		git rev-list tip.. >rev-list &&
		 git verify-commit $(cat rev-list)
	
HEAD is now at ef70922 tip
[master bb3a554] Revert "tip"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 tip.t
gpg: Signature made Wed Dec 28 07:42:25 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 36 - revert --no-edit --no-gpg-sign --gpg-sign HEAD with commit.gpgsign=false will sign commit

# passed all 36 test(s)
1..36
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3601-rm-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3601-rm-pathspec-file/.git/
expecting success of 3601.1 'setup': 
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&
	git add fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "files" &&

	git tag checkpoint

[master (root-commit) d32ab08] files
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
 create mode 100644 fileC.t
 create mode 100644 fileD.t
ok 1 - setup

expecting success of 3601.2 'simplest': 
	restore_checkpoint &&

	cat >expect <<-\EOF &&
	D  fileA.t
	EOF

	echo fileA.t | git rm --pathspec-from-file=- &&
	verify_expect

HEAD is now at d32ab08 files
rm 'fileA.t'
ok 2 - simplest

expecting success of 3601.3 '--pathspec-file-nul': 
	restore_checkpoint &&

	cat >expect <<-\EOF &&
	D  fileA.t
	D  fileB.t
	EOF

	printf "fileA.t\0fileB.t\0" | git rm --pathspec-from-file=- --pathspec-file-nul &&
	verify_expect

HEAD is now at d32ab08 files
rm 'fileA.t'
rm 'fileB.t'
ok 3 - --pathspec-file-nul

expecting success of 3601.4 'only touches what was listed': 
	restore_checkpoint &&

	cat >expect <<-\EOF &&
	D  fileB.t
	D  fileC.t
	EOF

	printf "fileB.t\nfileC.t\n" | git rm --pathspec-from-file=- &&
	verify_expect

HEAD is now at d32ab08 files
rm 'fileB.t'
rm 'fileC.t'
ok 4 - only touches what was listed

expecting success of 3601.5 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&

	test_must_fail git rm --pathspec-from-file=list -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git rm --pathspec-file-nul 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err &&

	>empty_list &&
	test_must_fail git rm --pathspec-from-file=empty_list 2>err &&
	test_i18ngrep -e "No pathspec was given. Which files should I remove?" err

HEAD is now at d32ab08 files
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
fatal: No pathspec was given. Which files should I remove?
ok 5 - error conditions

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3513-revert-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/.git/
expecting success of 3513.1 'git_revert: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
[add_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
[add_sub1 b4b80f3] Revert "Revert "Add sub1""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_revert: added submodule creates empty directory

expecting success of 3513.2 'git_revert: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
[add_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
[add_sub1 b4b80f3] Revert "Revert "Add sub1""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_revert: added submodule leaves existing empty directory alone

expecting success of 3513.3 'git_revert: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
[replace_file_with_sub1 8bd0dc0] Revert "Revert "Replace sub1 with file""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
[replace_file_with_sub1 5d93312] Revert "Revert "Revert "Replace sub1 with file"""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_revert: replace tracked file with submodule creates empty directory

expecting success of 3513.4 'git_revert: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
[replace_directory_with_sub1 16e3b33] Revert "Revert "Replace sub1 with directory""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
[replace_directory_with_sub1 fd8532e] Revert "Revert "Revert "Replace sub1 with directory"""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_revert: replace directory with submodule

expecting success of 3513.5 'git_revert: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
[remove_sub1 b4b80f3] Revert "Revert "Add sub1""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
warning: unable to rmdir 'sub1': Directory not empty
[remove_sub1 7a52ac8] Revert "Revert "Revert "Add sub1"""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
ok 5 - git_revert: removed submodule leaves submodule directory and its contents in place

expecting success of 3513.6 'git_revert: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
[remove_sub1 b4b80f3] Revert "Revert "Add sub1""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
warning: unable to rmdir 'sub1': Directory not empty
[remove_sub1 7a52ac8] Revert "Revert "Revert "Add sub1"""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
ok 6 - git_revert: removed submodule leaves submodule containing a .git directory alone

expecting success of 3513.7 'git_revert: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 7 - git_revert: replace submodule with a directory must fail

expecting success of 3513.8 'git_revert: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 8 - git_revert: replace submodule containing a .git directory with a directory must fail

checking known breakage of 3513.9 'git_revert: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 9 - git_revert: replace submodule with a file must fail # TODO known breakage

checking known breakage of 3513.10 'git_revert: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 10 - git_revert: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 3513.11 'git_revert: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
[modify_sub1 d25c1ce] Revert "Modify sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
[modify_sub1 b56a15a] Revert "Revert "Modify sub1""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_revert: modified submodule does not update submodule work tree

expecting success of 3513.12 'git_revert: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to branch 'invalid_sub1'
Your branch is up to date with 'origin/invalid_sub1'.
[invalid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
[invalid_sub1 af7d5fb] Revert "Revert "Invalid sub1 commit""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_revert: modified submodule does not update submodule work tree to invalid commit

expecting success of 3513.13 'git_revert: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to branch 'valid_sub1'
Your branch is up to date with 'origin/valid_sub1'.
[valid_sub1 af7d5fb] Revert "Revert "Invalid sub1 commit""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
[valid_sub1 eb4fc36] Revert "Revert "Revert "Invalid sub1 commit"""
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3513-revert-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_revert: modified submodule does not update submodule work tree from invalid commit

expecting success of 3513.14 'git_revert: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
ok 14 - git_revert: added submodule doesn't remove untracked unignored file with same name

# still have 2 known breakage(s)
# passed all remaining 12 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3602-rm-sparse-checkout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3602-rm-sparse-checkout/.git/
expecting success of 3602.1 'setup': 
	mkdir -p sub/dir &&
	touch a b c sub/d sub/dir/e &&
	git add -A &&
	git commit -m files &&

	cat >sparse_error_header <<-EOF &&
	The following paths and/or pathspecs matched paths that exist
	outside of your sparse-checkout definition, so will not be
	updated in the index:
	EOF

	cat >sparse_hint <<-EOF &&
	hint: If you intend to update such entries, try one of the following:
	hint: * Use the --sparse option.
	hint: * Disable or modify the sparsity rules.
	hint: Disable this message with "git config advice.updateSparsePath false"
	EOF

	echo b | cat sparse_error_header - >sparse_entry_b_error &&
	cat sparse_entry_b_error sparse_hint >b_error_and_hint

[master (root-commit) ff99497] files
 Author: A U Thor <author@example.com>
 5 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 sub/d
 create mode 100644 sub/dir/e
ok 1 - setup

expecting success of 3602.2 'rm does not remove sparse entries': 
		git sparse-checkout set --no-cone a &&
		test_must_fail git rm $opt b 2>stderr &&
		test_cmp b_error_and_hint stderr &&
		git ls-files --error-unmatch b
	
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
b
ok 2 - rm does not remove sparse entries

expecting success of 3602.3 'rm -f does not remove sparse entries': 
		git sparse-checkout set --no-cone a &&
		test_must_fail git rm $opt b 2>stderr &&
		test_cmp b_error_and_hint stderr &&
		git ls-files --error-unmatch b
	
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
b
ok 3 - rm -f does not remove sparse entries

expecting success of 3602.4 'rm --dry-run does not remove sparse entries': 
		git sparse-checkout set --no-cone a &&
		test_must_fail git rm $opt b 2>stderr &&
		test_cmp b_error_and_hint stderr &&
		git ls-files --error-unmatch b
	
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
b
ok 4 - rm --dry-run does not remove sparse entries

expecting success of 3602.5 'recursive rm does not remove sparse entries': 
	git reset --hard &&
	git sparse-checkout set sub/dir &&
	git rm -r sub &&
	git status --porcelain -uno >actual &&
	cat >expected <<-\EOF &&
	D  sub/dir/e
	EOF
	test_cmp expected actual &&

	git rm --sparse -r sub &&
	git status --porcelain -uno >actual2 &&
	cat >expected2 <<-\EOF &&
	D  sub/d
	D  sub/dir/e
	EOF
	test_cmp expected2 actual2

HEAD is now at ff99497 files
rm 'sub/dir/e'
rm 'sub/d'
ok 5 - recursive rm does not remove sparse entries

expecting success of 3602.6 'recursive rm --sparse removes sparse entries': 
	git reset --hard &&
	git sparse-checkout set "sub/dir" &&
	git rm --sparse -r sub &&
	git status --porcelain -uno >actual &&
	cat >expected <<-\EOF &&
	D  sub/d
	D  sub/dir/e
	EOF
	test_cmp expected actual

HEAD is now at ff99497 files
rm 'sub/d'
rm 'sub/dir/e'
ok 6 - recursive rm --sparse removes sparse entries

expecting success of 3602.7 'rm obeys advice.updateSparsePath': 
	git reset --hard &&
	git sparse-checkout set a &&
	test_must_fail git -c advice.updateSparsePath=false rm b 2>stderr &&
	test_cmp sparse_entry_b_error stderr

HEAD is now at ff99497 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 7 - rm obeys advice.updateSparsePath

expecting success of 3602.8 'do not advice about sparse entries when they do not match the pathspec': 
	git reset --hard &&
	git sparse-checkout set a &&
	test_must_fail git rm nonexistent 2>stderr &&
	grep "fatal: pathspec .nonexistent. did not match any files" stderr &&
	! grep -F -f sparse_error_header stderr

HEAD is now at ff99497 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
fatal: pathspec 'nonexistent' did not match any files
ok 8 - do not advice about sparse entries when they do not match the pathspec

expecting success of 3602.9 'do not warn about sparse entries when pathspec matches dense entries': 
	git reset --hard &&
	git sparse-checkout set a &&
	git rm "[ba]" 2>stderr &&
	test_must_be_empty stderr &&
	git ls-files --error-unmatch b &&
	test_must_fail git ls-files --error-unmatch a

HEAD is now at ff99497 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
rm 'a'
b
error: pathspec 'a' did not match any file(s) known to git
Did you forget to 'git add'?
ok 9 - do not warn about sparse entries when pathspec matches dense entries

expecting success of 3602.10 'do not warn about sparse entries with --ignore-unmatch': 
	git reset --hard &&
	git sparse-checkout set a &&
	git rm --ignore-unmatch b 2>stderr &&
	test_must_be_empty stderr &&
	git ls-files --error-unmatch b

HEAD is now at ff99497 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
b
ok 10 - do not warn about sparse entries with --ignore-unmatch

expecting success of 3602.11 'refuse to rm a non-skip-worktree path outside sparse cone': 
	git reset --hard &&
	git sparse-checkout set a &&
	git update-index --no-skip-worktree b &&
	test_must_fail git rm b 2>stderr &&
	test_cmp b_error_and_hint stderr &&
	git rm --sparse b 2>stderr &&
	test_must_be_empty stderr &&
	test_path_is_missing b

HEAD is now at ff99497 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
rm 'b'
ok 11 - refuse to rm a non-skip-worktree path outside sparse cone

expecting success of 3602.12 'can remove files from non-sparse dir': 
	git reset --hard &&
	git sparse-checkout disable &&
	mkdir -p w x/y &&
	test_commit w/f &&
	test_commit x/y/f &&

	git sparse-checkout set --no-cone w !/x y/ &&
	git rm w/f.t x/y/f.t 2>stderr &&
	test_must_be_empty stderr

HEAD is now at ff99497 files
[master 8effd50] w/f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 w/f.t
[master d038d72] x/y/f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x/y/f.t
rm 'w/f.t'
rm 'x/y/f.t'
ok 12 - can remove files from non-sparse dir

expecting success of 3602.13 'refuse to remove non-skip-worktree file from sparse dir': 
	git reset --hard &&
	git sparse-checkout disable &&
	mkdir -p x/y/z &&
	test_commit x/y/z/f &&
	git sparse-checkout set --no-cone !/x y/ !x/y/z &&

	git update-index --no-skip-worktree x/y/z/f.t &&
	test_must_fail git rm x/y/z/f.t 2>stderr &&
	echo x/y/z/f.t | cat sparse_error_header - sparse_hint >expect &&
	test_cmp expect stderr

HEAD is now at d038d72 x/y/f
[master 9387e98] x/y/z/f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x/y/z/f.t
ok 13 - refuse to remove non-skip-worktree file from sparse dir

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3702-add-edit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3702-add-edit/.git/
expecting success of 3702.1 'setup': 

	git add file &&
	test_tick &&
	git commit -m initial file


[master (root-commit) e055285] initial
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 file
ok 1 - setup

expecting success of 3702.2 'add -e': 

	cp second-part file &&
	git add -e &&
	test_cmp second-part file &&
	test_cmp expected-patch orig-patch &&
	git diff --cached >actual &&
	grep -v index actual >out &&
	test_cmp expected out


ok 2 - add -e

expecting success of 3702.3 'add -e notices editor failure': 
	git reset --hard &&
	echo change >>file &&
	test_must_fail env GIT_EDITOR=false git add -e &&
	test_expect_code 1 git diff --exit-code

HEAD is now at e055285 initial
error: There was a problem with the editor 'false'.
fatal: editing patch failed
diff --git a/file b/file
index b9834b5..cce9ee2 100644
--- a/file
+++ b/file
@@ -9,3 +9,4 @@ for he waxed under welkin, in wealth he throve,
 till before him the folk, both far and near,
 who house by the whale-path, heard his mandate,
 gave him gifts:  a good king he!
+change
ok 3 - add -e notices editor failure

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3703-add-magic-pathspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3703-add-magic-pathspec/.git/
expecting success of 3703.1 'setup': 
	mkdir sub anothersub &&
	: >sub/foo &&
	: >anothersub/foo

ok 1 - setup

expecting success of 3703.2 'add :/': 
	cat >expected <<-EOF &&
	add 'anothersub/foo'
	add 'expected'
	add 'sub/actual'
	add 'sub/foo'
	EOF
	(cd sub && git add -n :/ >actual) &&
	test_cmp expected sub/actual

ok 2 - add :/

expecting success of 3703.3 'add :/anothersub': 
	(cd sub && git add -n :/anothersub >actual) &&
	test_cmp expected sub/actual

ok 3 - add :/anothersub

expecting success of 3703.4 'add :/non-existent': 
	(cd sub && test_must_fail git add -n :/non-existent)

fatal: pathspec ':/non-existent' did not match any files
ok 4 - add :/non-existent

expecting success of 3703.5 'a file with the same (long) magic name exists': 
	: >":(icase)ha" &&
	test_must_fail git add -n ":(icase)ha" &&
	git add -n "./:(icase)ha"

fatal: pathspec ':(icase)ha' did not match any files
add ':(icase)ha'
ok 5 - a file with the same (long) magic name exists

expecting success of 3703.6 'a file with the same (short) magic name exists': 
	: >":/bar" &&
	test_must_fail git add -n :/bar &&
	git add -n "./:/bar"

fatal: pathspec ':/bar' did not match any files
add ':/bar'
ok 6 - a file with the same (short) magic name exists

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3704-add-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3704-add-pathspec-file/.git/
expecting success of 3704.1 'setup': 
	test_commit file0 &&
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t

[master (root-commit) ad2e047] file0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0.t
ok 1 - setup

expecting success of 3704.2 '--pathspec-from-file from stdin': 
	restore_checkpoint &&

	echo fileA.t | git add --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	A  fileA.t
	EOF
	verify_expect

ok 2 - --pathspec-from-file from stdin

expecting success of 3704.3 '--pathspec-from-file from file': 
	restore_checkpoint &&

	echo fileA.t >list &&
	git add --pathspec-from-file=list &&

	cat >expect <<-\EOF &&
	A  fileA.t
	EOF
	verify_expect

ok 3 - --pathspec-from-file from file

expecting success of 3704.4 'NUL delimiters': 
	restore_checkpoint &&

	printf "fileA.t\0fileB.t\0" | git add --pathspec-from-file=- --pathspec-file-nul &&

	cat >expect <<-\EOF &&
	A  fileA.t
	A  fileB.t
	EOF
	verify_expect

ok 4 - NUL delimiters

expecting success of 3704.5 'LF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t\n" | git add --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	A  fileA.t
	A  fileB.t
	EOF
	verify_expect

ok 5 - LF delimiters

expecting success of 3704.6 'no trailing delimiter': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t" | git add --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	A  fileA.t
	A  fileB.t
	EOF
	verify_expect

ok 6 - no trailing delimiter

expecting success of 3704.7 'CRLF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\r\nfileB.t\r\n" | git add --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	A  fileA.t
	A  fileB.t
	EOF
	verify_expect

ok 7 - CRLF delimiters

expecting success of 3704.8 'quotes': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	git add --pathspec-from-file=list &&

	cat >expect <<-\EOF &&
	A  fileA.t
	EOF
	verify_expect

ok 8 - quotes

expecting success of 3704.9 'quotes not compatible with --pathspec-file-nul': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test_must_fail git add --pathspec-from-file=list --pathspec-file-nul

fatal: pathspec '"file\101.t"
' did not match any files
ok 9 - quotes not compatible with --pathspec-file-nul

expecting success of 3704.10 'only touches what was listed': 
	restore_checkpoint &&

	printf "fileB.t\nfileC.t\n" | git add --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	A  fileB.t
	A  fileC.t
	EOF
	verify_expect

ok 10 - only touches what was listed

expecting success of 3704.11 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&
	>empty_list &&

	test_must_fail git add --pathspec-from-file=list --interactive 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--interactive/--patch. cannot be used together" err &&

	test_must_fail git add --pathspec-from-file=list --patch 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--interactive/--patch. cannot be used together" err &&

	test_must_fail git add --pathspec-from-file=list --edit 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--edit. cannot be used together" err &&

	test_must_fail git add --pathspec-from-file=list -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git add --pathspec-file-nul 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err &&

	# This case succeeds, but still prints to stderr
	git add --pathspec-from-file=empty_list 2>err &&
	test_i18ngrep -e "Nothing specified, nothing added." err

fatal: options '--pathspec-from-file' and '--interactive/--patch' cannot be used together
fatal: options '--pathspec-from-file' and '--interactive/--patch' cannot be used together
fatal: options '--pathspec-from-file' and '--edit' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
Nothing specified, nothing added.
ok 11 - error conditions

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3700-add.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3700-add/.git/
expecting success of 3700.1 'Test of git add': touch foo && git add foo
ok 1 - Test of git add

expecting success of 3700.2 'Post-check that foo is in the index': git ls-files foo | grep foo
foo
ok 2 - Post-check that foo is in the index

expecting success of 3700.3 'Test that "git add -- -q" works': touch -- -q && git add -- -q
ok 3 - Test that "git add -- -q" works

expecting success of 3700.4 'git add: core.fsyncmethod=batch': 
	test_create_unique_files 2 4 files_base_dir1 &&
	GIT_TEST_FSYNC=1 git -c core.fsync=loose-object -c core.fsyncmethod=batch add -- ./files_base_dir1/ &&
	git ls-files --stage files_base_dir1/ |
	test_parse_ls_files_stage_oids >added_files_oids &&

	# We created 2 subdirs with 4 files each (8 files total) above
	test_line_count = 8 added_files_oids &&
	git cat-file --batch-check='%(objectname)' <added_files_oids >added_files_actual &&
	test_cmp added_files_oids added_files_actual

ok 4 - git add: core.fsyncmethod=batch

expecting success of 3700.5 'git update-index: core.fsyncmethod=batch': 
	test_create_unique_files 2 4 files_base_dir2 &&
	find files_base_dir2 ! -type d -print | xargs git -c core.fsync=loose-object -c core.fsyncmethod=batch update-index --add -- &&
	git ls-files --stage files_base_dir2 |
	test_parse_ls_files_stage_oids >added_files2_oids &&

	# We created 2 subdirs with 4 files each (8 files total) above
	test_line_count = 8 added_files2_oids &&
	git cat-file --batch-check='%(objectname)' <added_files2_oids >added_files2_actual &&
	test_cmp added_files2_oids added_files2_actual

ok 5 - git update-index: core.fsyncmethod=batch

expecting success of 3700.6 'git add: Test that executable bit is not used if core.filemode=0': git config core.filemode 0 &&
	 echo foo >xfoo1 &&
	 chmod 755 xfoo1 &&
	 git add xfoo1 &&
	 test_mode_in_index 100644 xfoo1
pass
ok 6 - git add: Test that executable bit is not used if core.filemode=0

expecting success of 3700.7 'git add: filemode=0 should not get confused by symlink': 
	rm -f xfoo1 &&
	test_ln_s_add foo xfoo1 &&
	test_mode_in_index 120000 xfoo1

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
pass
ok 7 - git add: filemode=0 should not get confused by symlink

expecting success of 3700.8 'git update-index --add: Test that executable bit is not used...': git config core.filemode 0 &&
	 echo foo >xfoo2 &&
	 chmod 755 xfoo2 &&
	 git update-index --add xfoo2 &&
	 test_mode_in_index 100644 xfoo2
pass
ok 8 - git update-index --add: Test that executable bit is not used...

expecting success of 3700.9 'git add: filemode=0 should not get confused by symlink': 
	rm -f xfoo2 &&
	test_ln_s_add foo xfoo2 &&
	test_mode_in_index 120000 xfoo2

pass
ok 9 - git add: filemode=0 should not get confused by symlink

expecting success of 3700.10 'git update-index --add: Test that executable bit is not used...': git config core.filemode 0 &&
	 test_ln_s_add xfoo2 xfoo3 &&	# runs git update-index --add
	 test_mode_in_index 120000 xfoo3
pass
ok 10 - git update-index --add: Test that executable bit is not used...

expecting success of 3700.11 '.gitignore test setup': 
	echo "*.ig" >.gitignore &&
	mkdir c.if d.ig &&
	>a.ig && >b.if &&
	>c.if/c.if && >c.if/c.ig &&
	>d.ig/d.if && >d.ig/d.ig

ok 11 - .gitignore test setup

expecting success of 3700.12 '.gitignore is honored': 
	git add . &&
	! (git ls-files | grep "\\.ig")

ok 12 - .gitignore is honored

expecting success of 3700.13 'error out when attempting to add ignored ones without -f': 
	test_must_fail git add a.?? &&
	! (git ls-files | grep "\\.ig")

The following paths are ignored by one of your .gitignore files:
a.ig
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 13 - error out when attempting to add ignored ones without -f

expecting success of 3700.14 'error out when attempting to add ignored ones without -f': 
	test_must_fail git add d.?? &&
	! (git ls-files | grep "\\.ig")

The following paths are ignored by one of your .gitignore files:
d.ig
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
ok 14 - error out when attempting to add ignored ones without -f

expecting success of 3700.15 'error out when attempting to add ignored ones but add others': 
	touch a.if &&
	test_must_fail git add a.?? &&
	! (git ls-files | grep "\\.ig") &&
	(git ls-files | grep a.if)

The following paths are ignored by one of your .gitignore files:
a.ig
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
a.if
ok 15 - error out when attempting to add ignored ones but add others

expecting success of 3700.16 'add ignored ones with -f': 
	git add -f a.?? &&
	git ls-files --error-unmatch a.ig

a.ig
ok 16 - add ignored ones with -f

expecting success of 3700.17 'add ignored ones with -f': 
	git add -f d.??/* &&
	git ls-files --error-unmatch d.ig/d.if d.ig/d.ig

d.ig/d.if
d.ig/d.ig
ok 17 - add ignored ones with -f

expecting success of 3700.18 'add ignored ones with -f': 
	rm -f .git/index &&
	git add -f d.?? &&
	git ls-files --error-unmatch d.ig/d.if d.ig/d.ig

d.ig/d.if
d.ig/d.ig
ok 18 - add ignored ones with -f

expecting success of 3700.19 '.gitignore with subdirectory': 

	rm -f .git/index &&
	mkdir -p sub/dir &&
	echo "!dir/a.*" >sub/.gitignore &&
	>sub/a.ig &&
	>sub/dir/a.ig &&
	git add sub/dir &&
	git ls-files --error-unmatch sub/dir/a.ig &&
	rm -f .git/index &&
	(
		cd sub/dir &&
		git add .
	) &&
	git ls-files --error-unmatch sub/dir/a.ig

sub/dir/a.ig
sub/dir/a.ig
ok 19 - .gitignore with subdirectory

expecting success of 3700.20 'check correct prefix detection': 
	rm -f .git/index &&
	git add 1/2/a 1/3/b 1/2/c

ok 20 - check correct prefix detection

expecting success of 3700.21 'git add with filemode=0, symlinks=0, and unmerged entries': 
	for s in 1 2 3
	do
		echo $s > stage$s &&
		echo "100755 $(git hash-object -w stage$s) $s	file" &&
		echo "120000 $(printf $s | git hash-object -w -t blob --stdin) $s	symlink" || return 1
	done | git update-index --index-info &&
	git config core.filemode 0 &&
	git config core.symlinks 0 &&
	echo new > file &&
	echo new > symlink &&
	git add file symlink &&
	git ls-files --stage | grep "^100755 .* 0	file$" &&
	git ls-files --stage | grep "^120000 .* 0	symlink$"

100755 3e757656cf36eca53338e520d134963a44f793f8 0	file
120000 3e757656cf36eca53338e520d134963a44f793f8 0	symlink
ok 21 - git add with filemode=0, symlinks=0, and unmerged entries

expecting success of 3700.22 'git add with filemode=0, symlinks=0 prefers stage 2 over stage 1': 
	git rm --cached -f file symlink &&
	(
		echo "100644 $(git hash-object -w stage1) 1	file" &&
		echo "100755 $(git hash-object -w stage2) 2	file" &&
		echo "100644 $(printf 1 | git hash-object -w -t blob --stdin) 1	symlink" &&
		echo "120000 $(printf 2 | git hash-object -w -t blob --stdin) 2	symlink"
	) | git update-index --index-info &&
	git config core.filemode 0 &&
	git config core.symlinks 0 &&
	echo new > file &&
	echo new > symlink &&
	git add file symlink &&
	git ls-files --stage | grep "^100755 .* 0	file$" &&
	git ls-files --stage | grep "^120000 .* 0	symlink$"

rm 'file'
rm 'symlink'
100755 3e757656cf36eca53338e520d134963a44f793f8 0	file
120000 3e757656cf36eca53338e520d134963a44f793f8 0	symlink
ok 22 - git add with filemode=0, symlinks=0 prefers stage 2 over stage 1

expecting success of 3700.23 'git add --refresh': 
	>foo && git add foo && git commit -a -m "commit all" &&
	test -z "$(git diff-index HEAD -- foo)" &&
	git read-tree HEAD &&
	case "$(git diff-index HEAD -- foo)" in
	:100644" "*"M	foo") echo pass;;
	*) echo fail; false;;
	esac &&
	git add --refresh -- foo &&
	test -z "$(git diff-index HEAD -- foo)"

[master (root-commit) 0254e3c] commit all
 Author: A U Thor <author@example.com>
 6 files changed, 2 insertions(+)
 create mode 100644 1/2/a
 create mode 100644 1/2/c
 create mode 100644 1/3/b
 create mode 100755 file
 create mode 100644 foo
 create mode 120000 symlink
pass
ok 23 - git add --refresh

expecting success of 3700.24 'git add --refresh with pathspec': 
	git reset --hard &&
	echo >foo && echo >bar && echo >baz &&
	git add foo bar baz && H=$(git rev-parse :foo) && git rm -f foo &&
	echo "100644 $H 3	foo" | git update-index --index-info &&
	test-tool chmtime -60 bar baz &&
	git add --refresh bar >actual &&
	test_must_be_empty actual &&

	git diff-files --name-only >actual &&
	! grep bar actual &&
	grep baz actual

HEAD is now at 0254e3c commit all
rm 'foo'
baz
ok 24 - git add --refresh with pathspec

expecting success of 3700.25 'git add --refresh correctly reports no match error': 
	echo "fatal: pathspec ':(icase)nonexistent' did not match any files" >expect &&
	test_must_fail git add --refresh ':(icase)nonexistent' 2>actual &&
	test_cmp expect actual

ok 25 - git add --refresh correctly reports no match error

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 3700.26 'git add should fail atomically upon an unreadable file': 
	git reset --hard &&
	date >foo1 &&
	date >foo2 &&
	chmod 0 foo2 &&
	test_must_fail git add --verbose . &&
	! ( git ls-files foo1 | grep foo1 )

HEAD is now at 0254e3c commit all
error: open("foo2"): Permission denied
error: unable to index file 'foo2'
fatal: adding files failed
add '-q'
add '.gitignore'
add 'a.if'
add 'actual'
add 'added_files2_actual'
add 'added_files2_oids'
add 'added_files_actual'
add 'added_files_oids'
add 'b.if'
add 'c.if/c.if'
add 'expect'
add 'files_base_dir1/dir1/file1.txt'
add 'files_base_dir1/dir1/file2.txt'
add 'files_base_dir1/dir1/file3.txt'
add 'files_base_dir1/dir1/file4.txt'
add 'files_base_dir1/dir2/file1.txt'
add 'files_base_dir1/dir2/file2.txt'
add 'files_base_dir1/dir2/file3.txt'
add 'files_base_dir1/dir2/file4.txt'
add 'files_base_dir2/dir1/file1.txt'
add 'files_base_dir2/dir1/file2.txt'
add 'files_base_dir2/dir1/file3.txt'
add 'files_base_dir2/dir1/file4.txt'
add 'files_base_dir2/dir2/file1.txt'
add 'files_base_dir2/dir2/file2.txt'
add 'files_base_dir2/dir2/file3.txt'
add 'files_base_dir2/dir2/file4.txt'
add 'foo1'
ok 26 - git add should fail atomically upon an unreadable file

expecting success of 3700.27 'git add --ignore-errors': 
	git reset --hard &&
	date >foo1 &&
	date >foo2 &&
	chmod 0 foo2 &&
	test_must_fail git add --verbose --ignore-errors . &&
	git ls-files foo1 | grep foo1

HEAD is now at 0254e3c commit all
error: open("foo2"): Permission denied
error: unable to index file 'foo2'
add '-q'
add '.gitignore'
add 'a.if'
add 'actual'
add 'added_files2_actual'
add 'added_files2_oids'
add 'added_files_actual'
add 'added_files_oids'
add 'b.if'
add 'c.if/c.if'
add 'expect'
add 'files_base_dir1/dir1/file1.txt'
add 'files_base_dir1/dir1/file2.txt'
add 'files_base_dir1/dir1/file3.txt'
add 'files_base_dir1/dir1/file4.txt'
add 'files_base_dir1/dir2/file1.txt'
add 'files_base_dir1/dir2/file2.txt'
add 'files_base_dir1/dir2/file3.txt'
add 'files_base_dir1/dir2/file4.txt'
add 'files_base_dir2/dir1/file1.txt'
add 'files_base_dir2/dir1/file2.txt'
add 'files_base_dir2/dir1/file3.txt'
add 'files_base_dir2/dir1/file4.txt'
add 'files_base_dir2/dir2/file1.txt'
add 'files_base_dir2/dir2/file2.txt'
add 'files_base_dir2/dir2/file3.txt'
add 'files_base_dir2/dir2/file4.txt'
add 'foo1'
add 'stage1'
add 'stage2'
add 'stage3'
add 'sub/.gitignore'
add 'sub/dir/a.ig'
add 'xfoo1'
add 'xfoo2'
add 'xfoo3'
foo1
ok 27 - git add --ignore-errors

expecting success of 3700.28 'git add (add.ignore-errors)': 
	git config add.ignore-errors 1 &&
	git reset --hard &&
	date >foo1 &&
	date >foo2 &&
	chmod 0 foo2 &&
	test_must_fail git add --verbose . &&
	git ls-files foo1 | grep foo1

HEAD is now at 0254e3c commit all
error: open("foo2"): Permission denied
error: unable to index file 'foo2'
add 'a.ig'
add 'c.if/c.ig'
add 'd.ig/d.if'
add 'd.ig/d.ig'
add 'foo1'
add 'sub/a.ig'
foo1
ok 28 - git add (add.ignore-errors)

expecting success of 3700.29 'git add (add.ignore-errors = false)': 
	git config add.ignore-errors 0 &&
	git reset --hard &&
	date >foo1 &&
	date >foo2 &&
	chmod 0 foo2 &&
	test_must_fail git add --verbose . &&
	! ( git ls-files foo1 | grep foo1 )

HEAD is now at 0254e3c commit all
error: open("foo2"): Permission denied
error: unable to index file 'foo2'
fatal: adding files failed
add 'foo1'
ok 29 - git add (add.ignore-errors = false)

expecting success of 3700.30 '--no-ignore-errors overrides config': 
       git config add.ignore-errors 1 &&
       git reset --hard &&
       date >foo1 &&
       date >foo2 &&
       chmod 0 foo2 &&
       test_must_fail git add --verbose --no-ignore-errors . &&
       ! ( git ls-files foo1 | grep foo1 ) &&
       git config add.ignore-errors 0

HEAD is now at 0254e3c commit all
error: open("foo2"): Permission denied
error: unable to index file 'foo2'
fatal: adding files failed
add 'foo1'
ok 30 - --no-ignore-errors overrides config

expecting success of 3700.31 'git add 'fo\[ou\]bar' ignores foobar': 
	git reset --hard &&
	touch fo\[ou\]bar foobar &&
	git add 'fo\[ou\]bar' &&
	git ls-files fo\[ou\]bar | grep -F fo\[ou\]bar &&
	! ( git ls-files foobar | grep foobar )

HEAD is now at 0254e3c commit all
fo[ou]bar
ok 31 - git add 'fo\[ou\]bar' ignores foobar

expecting success of 3700.32 'git add to resolve conflicts on otherwise ignored path': 
	git reset --hard &&
	H=$(git rev-parse :1/2/a) &&
	(
		echo "100644 $H 1	track-this" &&
		echo "100644 $H 3	track-this"
	) | git update-index --index-info &&
	echo track-this >>.gitignore &&
	echo resolved >track-this &&
	git add track-this

HEAD is now at 0254e3c commit all
ok 32 - git add to resolve conflicts on otherwise ignored path

expecting success of 3700.33 '"add non-existent" should fail': 
	test_must_fail git add non-existent &&
	! (git ls-files | grep "non-existent")

fatal: pathspec 'non-existent' did not match any files
ok 33 - "add non-existent" should fail

expecting success of 3700.34 'git add -A on empty repo does not error out': 
	rm -fr empty &&
	git init empty &&
	(
		cd empty &&
		git add -A . &&
		git add -A
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3700-add/empty/.git/
ok 34 - git add -A on empty repo does not error out

expecting success of 3700.35 '"git add ." in empty repo': 
	rm -fr empty &&
	git init empty &&
	(
		cd empty &&
		git add .
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3700-add/empty/.git/
ok 35 - "git add ." in empty repo

expecting success of 3700.36 'error on a repository with no commits': 
	rm -fr empty &&
	git init empty &&
	test_must_fail git add empty >actual 2>&1 &&
	cat >expect <<-EOF &&
	error: 'empty/' does not have a commit checked out
	fatal: adding files failed
	EOF
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3700-add/empty/.git/
ok 36 - error on a repository with no commits

expecting success of 3700.37 'git add --dry-run of existing changed file': 
	echo new >>track-this &&
	git add --dry-run track-this >actual 2>&1 &&
	echo "add 'track-this'" | test_cmp - actual

ok 37 - git add --dry-run of existing changed file

expecting success of 3700.38 'git add --dry-run of non-existing file': 
	echo ignored-file >>.gitignore &&
	test_must_fail git add --dry-run track-this ignored-file >actual 2>&1

ok 38 - git add --dry-run of non-existing file

expecting success of 3700.39 'git add --dry-run of an existing file output': 
	echo "fatal: pathspec 'ignored-file' did not match any files" >expect &&
	test_cmp expect actual

ok 39 - git add --dry-run of an existing file output

expecting success of 3700.40 'git add --dry-run --ignore-missing of non-existing file': 
	test_must_fail git add --dry-run --ignore-missing track-this ignored-file >actual.out 2>actual.err

ok 40 - git add --dry-run --ignore-missing of non-existing file

expecting success of 3700.41 'git add --dry-run --ignore-missing of non-existing file output': 
	test_cmp expect.out actual.out &&
	test_cmp expect.err actual.err

ok 41 - git add --dry-run --ignore-missing of non-existing file output

expecting success of 3700.42 'git add --dry-run --interactive should fail': 
	test_must_fail git add --dry-run --interactive

fatal: options '--dry-run' and '--interactive/--patch' cannot be used together
ok 42 - git add --dry-run --interactive should fail

expecting success of 3700.43 'git add empty string should fail': 
	test_must_fail git add ""

fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 43 - git add empty string should fail

expecting success of 3700.44 'git add --chmod=[+-]x stages correctly': 
	rm -f foo1 &&
	echo foo >foo1 &&
	git add --chmod=+x foo1 &&
	test_mode_in_index 100755 foo1 &&
	git add --chmod=-x foo1 &&
	test_mode_in_index 100644 foo1

pass
pass
ok 44 - git add --chmod=[+-]x stages correctly

expecting success of 3700.45 'git add --chmod=+x with symlinks': 
	git config core.filemode 1 &&
	git config core.symlinks 1 &&
	rm -f foo2 &&
	echo foo >foo2 &&
	git add --chmod=+x foo2 &&
	test_mode_in_index 100755 foo2

pass
ok 45 - git add --chmod=+x with symlinks

expecting success of 3700.46 'git add --chmod=[+-]x changes index with already added file': 
	rm -f foo3 xfoo3 &&
	git reset --hard &&
	echo foo >foo3 &&
	git add foo3 &&
	git add --chmod=+x foo3 &&
	test_mode_in_index 100755 foo3 &&
	echo foo >xfoo3 &&
	chmod 755 xfoo3 &&
	git add xfoo3 &&
	git add --chmod=-x xfoo3 &&
	test_mode_in_index 100644 xfoo3

HEAD is now at 0254e3c commit all
pass
pass
ok 46 - git add --chmod=[+-]x changes index with already added file

expecting success of 3700.47 'git add --chmod=[+-]x does not change the working tree': 
	echo foo >foo4 &&
	git add foo4 &&
	git add --chmod=+x foo4 &&
	! test -x foo4

ok 47 - git add --chmod=[+-]x does not change the working tree

expecting success of 3700.48 'git add --chmod fails with non regular files (but updates the other paths)': 
	git reset --hard &&
	test_ln_s_add foo foo3 &&
	touch foo4 &&
	test_must_fail git add --chmod=+x foo3 foo4 2>stderr &&
	test_i18ngrep "cannot chmod +x .foo3." stderr &&
	test_mode_in_index 120000 foo3 &&
	test_mode_in_index 100755 foo4

HEAD is now at 0254e3c commit all
error: cannot chmod +x 'foo3'
pass
pass
ok 48 - git add --chmod fails with non regular files (but updates the other paths)

expecting success of 3700.49 'git add --chmod honors --dry-run': 
	git reset --hard &&
	echo foo >foo4 &&
	git add foo4 &&
	git add --chmod=+x --dry-run foo4 &&
	test_mode_in_index 100644 foo4

HEAD is now at 0254e3c commit all
pass
ok 49 - git add --chmod honors --dry-run

expecting success of 3700.50 'git add --chmod --dry-run reports error for non regular files': 
	git reset --hard &&
	test_ln_s_add foo foo4 &&
	test_must_fail git add --chmod=+x --dry-run foo4 2>stderr &&
	test_i18ngrep "cannot chmod +x .foo4." stderr

HEAD is now at 0254e3c commit all
error: cannot chmod +x 'foo4'
ok 50 - git add --chmod --dry-run reports error for non regular files

expecting success of 3700.51 'git add --chmod --dry-run reports error for unmatched pathspec': 
	test_must_fail git add --chmod=+x --dry-run nonexistent 2>stderr &&
	test_i18ngrep "pathspec .nonexistent. did not match any files" stderr

fatal: pathspec 'nonexistent' did not match any files
ok 51 - git add --chmod --dry-run reports error for unmatched pathspec

expecting success of 3700.52 'no file status change if no pathspec is given': 
	>foo5 &&
	>foo6 &&
	git add foo5 foo6 &&
	git add --chmod=+x &&
	test_mode_in_index 100644 foo5 &&
	test_mode_in_index 100644 foo6

Nothing specified, nothing added.
hint: Maybe you wanted to say 'git add .'?
hint: Turn this message off by running
hint: "git config advice.addEmptyPathspec false"
pass
pass
ok 52 - no file status change if no pathspec is given

expecting success of 3700.53 'no file status change if no pathspec is given in subdir': 
	mkdir -p sub &&
	(
		cd sub &&
		>sub-foo1 &&
		>sub-foo2 &&
		git add . &&
		git add --chmod=+x &&
		test_mode_in_index 100644 sub-foo1 &&
		test_mode_in_index 100644 sub-foo2
	)

Nothing specified, nothing added.
hint: Maybe you wanted to say 'git add .'?
hint: Turn this message off by running
hint: "git config advice.addEmptyPathspec false"
pass
pass
ok 53 - no file status change if no pathspec is given in subdir

expecting success of 3700.54 'all statuses changed in folder if . is given': 
	git init repo &&
	(
		cd repo &&
		mkdir -p sub/dir &&
		touch x y z sub/a sub/dir/b &&
		git add -A &&
		git add --chmod=+x . &&
		test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
		git add --chmod=-x . &&
		test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3700-add/repo/.git/
ok 54 - all statuses changed in folder if . is given

checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 55 # skip path is case-insensitive (missing CASE_INSENSITIVE_FS)

# passed all 55 test(s)
1..55
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3705-add-sparse-checkout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3705-add-sparse-checkout/.git/
expecting success of 3705.1 'setup': 
	cat >sparse_error_header <<-EOF &&
	The following paths and/or pathspecs matched paths that exist
	outside of your sparse-checkout definition, so will not be
	updated in the index:
	EOF

	cat >sparse_hint <<-EOF &&
	hint: If you intend to update such entries, try one of the following:
	hint: * Use the --sparse option.
	hint: * Disable or modify the sparsity rules.
	hint: Disable this message with "git config advice.updateSparsePath false"
	EOF

	echo sparse_entry | cat sparse_error_header - >sparse_entry_error &&
	cat sparse_entry_error sparse_hint >error_and_hint

ok 1 - setup

expecting success of 3705.2 'git add does not remove sparse entries': 
	setup_sparse_entry &&
	rm sparse_entry &&
	test_must_fail git add sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp error_and_hint stderr &&
	test_sparse_entry_unchanged

[master (root-commit) c0e866f] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sparse_entry
ok 2 - git add does not remove sparse entries

expecting success of 3705.3 'git add -A does not remove sparse entries': 
	setup_sparse_entry &&
	rm sparse_entry &&
	setup_gitignore &&
	git add -A 2>stderr &&
	test_must_be_empty stderr &&
	test_sparse_entry_unchanged

[master 5de8edd] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 3 - git add -A does not remove sparse entries

expecting success of 3705.4 'git add . does not remove sparse entries': 
	setup_sparse_entry &&
	rm sparse_entry &&
	setup_gitignore &&
	test_must_fail git add . 2>stderr &&
	test_sparse_entry_unstaged &&

	cat sparse_error_header >expect &&
	echo . >>expect &&
	cat sparse_hint >>expect &&

	test_cmp expect stderr &&
	test_sparse_entry_unchanged

[master e79cbb6] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 4 - git add . does not remove sparse entries

expecting success of 3705.5 'git add does not update sparse entries': 
		setup_sparse_entry &&
		echo modified >sparse_entry &&
		test_must_fail git add $opt sparse_entry 2>stderr &&
		test_sparse_entry_unstaged &&
		test_cmp error_and_hint stderr &&
		test_sparse_entry_unchanged
	
[master 52a8d7c] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 5 - git add does not update sparse entries

expecting success of 3705.6 'git add -f does not update sparse entries': 
		setup_sparse_entry &&
		echo modified >sparse_entry &&
		test_must_fail git add $opt sparse_entry 2>stderr &&
		test_sparse_entry_unstaged &&
		test_cmp error_and_hint stderr &&
		test_sparse_entry_unchanged
	
[master 6e383d3] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 6 - git add -f does not update sparse entries

expecting success of 3705.7 'git add -u does not update sparse entries': 
		setup_sparse_entry &&
		echo modified >sparse_entry &&
		test_must_fail git add $opt sparse_entry 2>stderr &&
		test_sparse_entry_unstaged &&
		test_cmp error_and_hint stderr &&
		test_sparse_entry_unchanged
	
[master bb85fed] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 7 - git add -u does not update sparse entries

expecting success of 3705.8 'git add --ignore-removal does not update sparse entries': 
		setup_sparse_entry &&
		echo modified >sparse_entry &&
		test_must_fail git add $opt sparse_entry 2>stderr &&
		test_sparse_entry_unstaged &&
		test_cmp error_and_hint stderr &&
		test_sparse_entry_unchanged
	
[master 2bced02] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 8 - git add --ignore-removal does not update sparse entries

expecting success of 3705.9 'git add --dry-run does not update sparse entries': 
		setup_sparse_entry &&
		echo modified >sparse_entry &&
		test_must_fail git add $opt sparse_entry 2>stderr &&
		test_sparse_entry_unstaged &&
		test_cmp error_and_hint stderr &&
		test_sparse_entry_unchanged
	
[master 1fb2ac0] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 9 - git add --dry-run does not update sparse entries

expecting success of 3705.10 'git add --refresh does not update sparse entries': 
	setup_sparse_entry &&
	git ls-files --debug sparse_entry | grep mtime >before &&
	test-tool chmtime -60 sparse_entry &&
	test_must_fail git add --refresh sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp error_and_hint stderr &&
	git ls-files --debug sparse_entry | grep mtime >after &&
	test_cmp before after

[master b9f487e] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 10 - git add --refresh does not update sparse entries

expecting success of 3705.11 'git add --chmod does not update sparse entries': 
	setup_sparse_entry &&
	test_must_fail git add --chmod=+x sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp error_and_hint stderr &&
	test_sparse_entry_unchanged &&
	! test -x sparse_entry

[master 46b5fb2] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 11 - git add --chmod does not update sparse entries

expecting success of 3705.12 'git add --renormalize does not update sparse entries': 
	test_when_finished rm .gitattributes &&
	test_config core.autocrlf false &&
	setup_sparse_entry "LINEONE\r\nLINETWO\r\n" &&
	echo "sparse_entry text=auto" >.gitattributes &&
	test_must_fail git add --renormalize sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp error_and_hint stderr &&
	test_sparse_entry_unchanged

[master 18a544d] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
ok 12 - git add --renormalize does not update sparse entries

expecting success of 3705.13 'git add --dry-run --ignore-missing warn on sparse path': 
	setup_sparse_entry &&
	rm sparse_entry &&
	test_must_fail git add --dry-run --ignore-missing sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp error_and_hint stderr &&
	test_sparse_entry_unchanged

[master c192c51] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
 1 file changed, 2 deletions(-)
ok 13 - git add --dry-run --ignore-missing warn on sparse path

expecting success of 3705.14 'do not advice about sparse entries when they do not match the pathspec': 
	setup_sparse_entry &&
	test_must_fail git add nonexistent 2>stderr &&
	grep "fatal: pathspec .nonexistent. did not match any files" stderr &&
	! grep -F -f sparse_error_header stderr

[master f9f36a2] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
fatal: pathspec 'nonexistent' did not match any files
ok 14 - do not advice about sparse entries when they do not match the pathspec

expecting success of 3705.15 'do not warn when pathspec matches dense entries': 
	setup_sparse_entry &&
	echo modified >sparse_entry &&
	>dense_entry &&
	git add "*_entry" 2>stderr &&
	test_must_be_empty stderr &&
	test_sparse_entry_unchanged &&
	git ls-files --error-unmatch dense_entry

[master 8db759d] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
dense_entry
ok 15 - do not warn when pathspec matches dense entries

expecting success of 3705.16 'git add fails outside of sparse-checkout definition': 
	test_when_finished git sparse-checkout disable &&
	test_commit a &&
	git sparse-checkout init --no-cone &&
	git sparse-checkout set a &&
	echo >>sparse_entry &&

	git update-index --no-skip-worktree sparse_entry &&
	test_must_fail git add sparse_entry &&
	test_sparse_entry_unstaged &&

	test_must_fail git add --chmod=+x sparse_entry &&
	test_sparse_entry_unstaged &&

	test_must_fail git add --renormalize sparse_entry &&
	test_sparse_entry_unstaged &&

	# Avoid munging CRLFs to avoid an error message
	git -c core.autocrlf=input add --sparse sparse_entry 2>stderr &&
	test_must_be_empty stderr &&
	git ls-files --stage >actual &&
	grep "^100644 .*sparse_entry\$" actual &&

	git add --sparse --chmod=+x sparse_entry 2>stderr &&
	test_must_be_empty stderr &&
	git ls-files --stage >actual &&
	grep "^100755 .*sparse_entry\$" actual &&

	git reset &&

	# This will print a message over stderr on Windows.
	git add --sparse --renormalize sparse_entry &&
	git status --porcelain >actual &&
	grep "^M  sparse_entry\$" actual

[master 2be48a2] a
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 a.t
 create mode 100644 dense_entry
warning: The following paths were already present and thus not updated despite sparse patterns:
	sparse_entry

After fixing the above paths, you may want to run `git sparse-checkout reapply`.
warning: The following paths are not up to date and were left despite sparse patterns:
	sparse_entry

After fixing the above paths, you may want to run `git sparse-checkout reapply`.
The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
sparse_entry
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
sparse_entry
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
sparse_entry
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
100644 e0c06d45b9d40f6c18a37e4cab8070a0dc4d2ef1 0	sparse_entry
100755 e0c06d45b9d40f6c18a37e4cab8070a0dc4d2ef1 0	sparse_entry
Unstaged changes after reset:
M	sparse_entry
M  sparse_entry
ok 16 - git add fails outside of sparse-checkout definition

expecting success of 3705.17 'add obeys advice.updateSparsePath': 
	setup_sparse_entry &&
	test_must_fail git -c advice.updateSparsePath=false add sparse_entry 2>stderr &&
	test_sparse_entry_unstaged &&
	test_cmp sparse_entry_error stderr


[master 91ae5df] ensure sparse_entry exists at HEAD
 Author: A U Thor <author@example.com>
ok 17 - add obeys advice.updateSparsePath

expecting success of 3705.18 'add allows sparse entries with --sparse': 
	git sparse-checkout set --no-cone a &&
	echo modified >sparse_entry &&
	test_must_fail git add sparse_entry &&
	test_sparse_entry_unchanged &&
	git add --sparse sparse_entry 2>stderr &&
	test_must_be_empty stderr

The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
sparse_entry
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
ok 18 - add allows sparse entries with --sparse

expecting success of 3705.19 'can add files from non-sparse dir': 
	git sparse-checkout set w !/x y/ &&
	mkdir -p w x/y &&
	touch w/f x/y/f &&
	git add w/f x/y/f 2>stderr &&
	test_must_be_empty stderr

ok 19 - can add files from non-sparse dir

expecting success of 3705.20 'refuse to add non-skip-worktree file from sparse dir': 
	git sparse-checkout set !/x y/ !x/y/z &&
	mkdir -p x/y/z &&
	touch x/y/z/f &&
	test_must_fail git add x/y/z/f 2>stderr &&
	echo x/y/z/f | cat sparse_error_header - sparse_hint >expect &&
	test_cmp expect stderr

ok 20 - refuse to add non-skip-worktree file from sparse dir

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3701-add-interactive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3701-add-interactive/.git/
checking prerequisite: ADD_I_USE_BUILTIN

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
	test_bool_env GIT_TEST_ADD_I_USE_BUILTIN true

)
prerequisite ADD_I_USE_BUILTIN ok
expecting success of 3701.1 'setup (initial)': 
	echo content >file &&
	git add file &&
	echo more >>file &&
	echo lines >>file

ok 1 - setup (initial)

expecting success of 3701.2 'status works (initial)': 
	git add -i </dev/null >output &&
	grep "+1/-0 *+2/-0 file" output

  1:        +1/-0        +2/-0 file
ok 2 - status works (initial)

expecting success of 3701.3 'setup expected': 
	cat >expected <<-\EOF
	new file mode 100644
	index 0000000..d95f3ad
	--- /dev/null
	+++ b/file
	@@ -0,0 +1 @@
	+content
	EOF

ok 3 - setup expected

expecting success of 3701.4 'diff works (initial)': 
	test_write_lines d 1 | git add -i >output &&
	sed -ne "/new file/,/content/p" <output >diff &&
	diff_cmp expected diff

ok 4 - diff works (initial)

expecting success of 3701.5 'revert works (initial)': 
	git add file &&
	test_write_lines r 1 | git add -i &&
	git ls-files >output &&
	! grep . output

           staged     unstaged path
  1:        +3/-0      nothing file

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:        +3/-0      nothing [f]ile
Revert>>            staged     unstaged path
* 1:        +3/-0      nothing [f]ile
Revert>> 
note: file is untracked now.
reverted 1 path

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> 
Bye.
ok 5 - revert works (initial)

expecting success of 3701.6 'add untracked (multiple)': 
	test_when_finished "git reset && rm [1-9]" &&
	touch $(test_seq 9) &&
	test_write_lines a "2-5 8-" | git add -i -- [1-9] &&
	test_write_lines 2 3 4 5 8 9 >expected &&
	git ls-files [1-9] >output &&
	test_cmp expected output


*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1: 1
  2: 2
  3: 3
  4: 4
  5: 5
  6: 6
  7: 7
  8: 8
  9: 9
Add untracked>>            staged     unstaged path
  1: 1
* 2: 2
* 3: 3
* 4: 4
* 5: 5
  6: 6
  7: 7
* 8: 8
* 9: 9
Add untracked>> 
added 6 paths

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> 
Bye.
ok 6 - add untracked (multiple)

expecting success of 3701.7 'setup (commit)': 
	echo baseline >file &&
	git add file &&
	git commit -m commit &&
	echo content >>file &&
	git add file &&
	echo more >>file &&
	echo lines >>file

[main (root-commit) 4ef1e3a] commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 7 - setup (commit)

expecting success of 3701.8 'status works (commit)': 
	git add -i </dev/null >output &&
	grep "+1/-0 *+2/-0 file" output

  1:        +1/-0        +2/-0 file
ok 8 - status works (commit)

expecting success of 3701.9 'update can stage deletions': 
	>to-delete &&
	git add to-delete &&
	rm to-delete &&
	test_write_lines u t "" | git add -i &&
	git ls-files to-delete >output &&
	test_must_be_empty output

           staged     unstaged path
  1:        +1/-0        +2/-0 file
  2:        +0/-0        +0/-0 to-delete

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:        +1/-0        +2/-0 [f]ile
  2:        +0/-0        +0/-0 [t]o-delete
Update>>            staged     unstaged path
  1:        +1/-0        +2/-0 [f]ile
* 2:        +0/-0        +0/-0 [t]o-delete
Update>> updated 1 path

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> 
Bye.
ok 9 - update can stage deletions

expecting success of 3701.10 'setup expected': 
	cat >expected <<-\EOF
	index 180b47c..b6f2c08 100644
	--- a/file
	+++ b/file
	@@ -1 +1,2 @@
	 baseline
	+content
	EOF

ok 10 - setup expected

expecting success of 3701.11 'diff works (commit)': 
	test_write_lines d 1 | git add -i >output &&
	sed -ne "/^index/,/content/p" <output >diff &&
	diff_cmp expected diff

ok 11 - diff works (commit)

expecting success of 3701.12 'revert works (commit)': 
	git add file &&
	test_write_lines r 1 | git add -i &&
	git add -i </dev/null >output &&
	grep "unchanged *+3/-0 file" output

           staged     unstaged path
  1:        +3/-0      nothing file

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:        +3/-0      nothing [f]ile
Revert>>            staged     unstaged path
* 1:        +3/-0      nothing [f]ile
Revert>> 
reverted 1 path

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> 
Bye.
  1:    unchanged        +3/-0 file
ok 12 - revert works (commit)

expecting success of 3701.13 'setup expected': 
	cat >expected <<-\EOF
	EOF

ok 13 - setup expected

expecting success of 3701.14 'dummy edit works': 
	test_set_editor : &&
	test_write_lines e a | git add -p &&
	git diff > diff &&
	diff_cmp expected diff

diff --git a/file b/file
index 180b47c..f910ae9 100644
--- a/file
+++ b/file
@@ -1 +1,4 @@
 baseline
+content
+more
+lines
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 14 - dummy edit works

expecting success of 3701.15 'setup patch': 
	cat >patch <<-\EOF
	@@ -1,1 +1,4 @@
	 this
	+patch
	-does not
	 apply
	EOF

ok 15 - setup patch

expecting success of 3701.16 'setup fake editor': 
	write_script "fake_editor.sh" <<-\EOF &&
	mv -f "$1" oldpatch &&
	mv -f patch "$1"
	EOF
	test_set_editor "$(pwd)/fake_editor.sh"

ok 16 - setup fake editor

expecting success of 3701.17 'bad edit rejected': 
	git reset &&
	test_write_lines e n d | git add -p >output &&
	grep "hunk does not apply" output

Unstaged changes after reset:
M	file
error: patch failed: file:1
error: file: patch does not apply
error: 'git apply --cached' failed
(1/1) Stage this hunk [y,n,q,a,d,e,?]? Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]? @@ -1 +1,4 @@
ok 17 - bad edit rejected

expecting success of 3701.18 'setup patch': 
	cat >patch <<-\EOF
	this patch
	is garbage
	EOF

ok 18 - setup patch

expecting success of 3701.19 'garbage edit rejected': 
	git reset &&
	test_write_lines e n d | git add -p >output &&
	grep "hunk does not apply" output

Unstaged changes after reset:
M	file
error: corrupt patch at line 6
error: 'git apply --cached' failed
(1/1) Stage this hunk [y,n,q,a,d,e,?]? Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]? @@ -1 +1,4 @@
ok 19 - garbage edit rejected

expecting success of 3701.20 'setup patch': 
	cat >patch <<-\EOF
	@@ -1,0 +1,0 @@
	 baseline
	+content
	+newcontent
	+lines
	EOF

ok 20 - setup patch

expecting success of 3701.21 'setup expected': 
	cat >expected <<-\EOF
	diff --git a/file b/file
	index b5dd6c9..f910ae9 100644
	--- a/file
	+++ b/file
	@@ -1,4 +1,4 @@
	 baseline
	 content
	-newcontent
	+more
	 lines
	EOF

ok 21 - setup expected

expecting success of 3701.22 'real edit works': 
	test_write_lines e n d | git add -p &&
	git diff >output &&
	diff_cmp expected output

diff --git a/file b/file
index 180b47c..f910ae9 100644
--- a/file
+++ b/file
@@ -1 +1,4 @@
 baseline
+content
+more
+lines
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 22 - real edit works

expecting success of 3701.23 'setup file': 
	test_write_lines a "" b "" c >file &&
	git add file &&
	test_write_lines a "" d "" c >file

ok 23 - setup file

expecting success of 3701.24 'setup patch': 
	SP=" " &&
	NULL="" &&
	cat >patch <<-EOF
	@@ -1,4 +1,4 @@
	 a
	$NULL
	-b
	+f
	$SP
	c
	EOF

ok 24 - setup patch

expecting success of 3701.25 'setup expected': 
	cat >expected <<-EOF
	diff --git a/file b/file
	index b5dd6c9..f910ae9 100644
	--- a/file
	+++ b/file
	@@ -1,5 +1,5 @@
	 a
	$SP
	-f
	+d
	$SP
	 c
	EOF

ok 25 - setup expected

expecting success of 3701.26 'edit can strip spaces from empty context lines': 
	test_write_lines e n q | git add -p 2>error &&
	test_must_be_empty error &&
	git diff >output &&
	diff_cmp expected output

diff --git a/file b/file
index bda3f38..90b7c9d 100644
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
 a
 
-b
+d
 
 c
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 26 - edit can strip spaces from empty context lines

expecting success of 3701.27 'skip files similarly as commit -a': 
	git reset &&
	echo file >.gitignore &&
	echo changed >file &&
	echo y | git add -p file &&
	git diff >output &&
	git reset &&
	git commit -am commit &&
	git diff >expected &&
	diff_cmp expected output &&
	git reset --hard HEAD^

Unstaged changes after reset:
M	file
diff --git a/file b/file
index 180b47c..5ea2ed4 100644
--- a/file
+++ b/file
@@ -1 +1 @@
-baseline
+changed
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
Unstaged changes after reset:
M	file
[main 953db45] commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 4ef1e3a commit
ok 27 - skip files similarly as commit -a

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 3701.28 'patch does not affect mode': 
	git reset --hard &&
	echo content >>file &&
	chmod +x file &&
	printf "n\\ny\\n" | git add -p &&
	git show :file | grep content &&
	git diff file | grep "new mode"

HEAD is now at 4ef1e3a commit
diff --git a/file b/file
index 180b47c..b6f2c08
--- a/file
+++ b/file
old mode 100644
new mode 100755
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]? @@ -1 +1,2 @@
 baseline
+content
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
content
new mode 100755
ok 28 - patch does not affect mode

expecting success of 3701.29 'stage mode but not hunk': 
	git reset --hard &&
	echo content >>file &&
	chmod +x file &&
	printf "y\\nn\\n" | git add -p &&
	git diff --cached file | grep "new mode" &&
	git diff          file | grep "+content"

HEAD is now at 4ef1e3a commit
diff --git a/file b/file
index 180b47c..b6f2c08
--- a/file
+++ b/file
old mode 100644
new mode 100755
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]? @@ -1 +1,2 @@
 baseline
+content
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
new mode 100755
+content
ok 29 - stage mode but not hunk

expecting success of 3701.30 'stage mode and hunk': 
	git reset --hard &&
	echo content >>file &&
	chmod +x file &&
	printf "y\\ny\\n" | git add -p &&
	git diff --cached file | grep "new mode" &&
	git diff --cached file | grep "+content" &&
	test -z "$(git diff file)"

HEAD is now at 4ef1e3a commit
diff --git a/file b/file
index 180b47c..b6f2c08
--- a/file
+++ b/file
old mode 100644
new mode 100755
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]? @@ -1 +1,2 @@
 baseline
+content
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
new mode 100755
+content
ok 30 - stage mode and hunk

expecting success of 3701.31 'different prompts for mode change/deleted': 
	git reset --hard &&
	>file &&
	>deleted &&
	git add --chmod=+x file deleted &&
	echo changed >file &&
	rm deleted &&
	test_write_lines n n n |
	git -c core.filemode=true add -p >actual &&
	sed -n "s/^\(([0-9/]*) Stage .*?\).*/\1/p" actual >actual.filtered &&
	cat >expect <<-\EOF &&
	(1/1) Stage deletion [y,n,q,a,d,?]?
	(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]?
	(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
	EOF
	test_cmp expect actual.filtered

HEAD is now at 4ef1e3a commit
ok 31 - different prompts for mode change/deleted

expecting success of 3701.32 'correct message when there is nothing to do': 
	git reset --hard &&
	git add -p 2>err &&
	test_i18ngrep "No changes" err &&
	printf "\\0123" >binary &&
	git add binary &&
	printf "\\0abc" >binary &&
	git add -p 2>err &&
	test_i18ngrep "Only binary files changed" err

HEAD is now at 4ef1e3a commit
No changes.
Only binary files changed.
ok 32 - correct message when there is nothing to do

expecting success of 3701.33 'setup again': 
	git reset --hard &&
	test_chmod +x file &&
	echo content >>file &&
	test_write_lines A B C D>file2 &&
	git add file2

HEAD is now at 4ef1e3a commit
ok 33 - setup again

expecting success of 3701.34 'setup patch': 
	cat >patch <<-\EOF
	index 180b47c..b6f2c08 100644
	--- a/file
	+++ b/file
	@@ -1,2 +1,4 @@
	+firstline
	 baseline
	 content
	+lastline
	\ No newline at end of file
	diff --git a/file2 b/file2
	index 8422d40..35b930a 100644
	--- a/file2
	+++ b/file2
	@@ -1,4 +1,5 @@
	-A
	+Z
	 B
	+Y
	 C
	-D
	+X
	EOF

ok 34 - setup patch

expecting success of 3701.35 'setup expected': 
	echo diff --git a/file b/file >expected &&
	sed -e "/^index 180b47c/s/ 100644/ 100755/" \
	    -e /1,5/s//1,4/ \
	    -e /Y/d patch >>expected &&
	cat >expected-output <<-\EOF
	--- a/file
	+++ b/file
	@@ -1,2 +1,4 @@
	+firstline
	 baseline
	 content
	+lastline
	\ No newline at end of file
	@@ -1,2 +1,3 @@
	+firstline
	 baseline
	 content
	@@ -1,2 +2,3 @@
	 baseline
	 content
	+lastline
	\ No newline at end of file
	--- a/file2
	+++ b/file2
	@@ -1,4 +1,5 @@
	-A
	+Z
	 B
	+Y
	 C
	-D
	+X
	@@ -1,2 +1,2 @@
	-A
	+Z
	 B
	@@ -2,2 +2,3 @@
	 B
	+Y
	 C
	@@ -3,2 +4,2 @@
	 C
	-D
	+X
	EOF

ok 35 - setup expected

expecting success of 3701.36 'add first line works': 
	git commit -am "clear local changes" &&
	git apply patch &&
	test_write_lines s y y s y n y | git add -p 2>error >raw-output &&
	sed -n -e "s/^([1-9]\/[1-9]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
	       -e "/^[-+@ \\\\]"/p raw-output >output &&
	test_must_be_empty error &&
	git diff --cached >diff &&
	diff_cmp expected diff &&
	test_cmp expected-output output

[main dd8d550] clear local changes
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 mode change 100644 => 100755 file
 create mode 100644 file2
ok 36 - add first line works

expecting success of 3701.37 'setup expected': 
	cat >expected <<-\EOF
	diff --git a/non-empty b/non-empty
	deleted file mode 100644
	index d95f3ad..0000000
	--- a/non-empty
	+++ /dev/null
	@@ -1 +0,0 @@
	-content
	EOF

ok 37 - setup expected

expecting success of 3701.38 'deleting a non-empty file': 
	git reset --hard &&
	echo content >non-empty &&
	git add non-empty &&
	git commit -m non-empty &&
	rm non-empty &&
	echo y | git add -p non-empty &&
	git diff --cached >diff &&
	diff_cmp expected diff

HEAD is now at dd8d550 clear local changes
[main 00556ef] non-empty
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 non-empty
diff --git a/non-empty b/non-empty
deleted file mode 100644
index d95f3ad..0000000
--- a/non-empty
+++ /dev/null
@@ -1 +0,0 @@
-content
(1/1) Stage deletion [y,n,q,a,d,?]? 
ok 38 - deleting a non-empty file

expecting success of 3701.39 'setup expected': 
	cat >expected <<-\EOF
	diff --git a/empty b/empty
	deleted file mode 100644
	index e69de29..0000000
	EOF

ok 39 - setup expected

expecting success of 3701.40 'deleting an empty file': 
	git reset --hard &&
	> empty &&
	git add empty &&
	git commit -m empty &&
	rm empty &&
	echo y | git add -p empty &&
	git diff --cached >diff &&
	diff_cmp expected diff

HEAD is now at 00556ef non-empty
[main 2e6bfc0] empty
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty
diff --git a/empty b/empty
deleted file mode 100644
index e69de29..0000000
(1/1) Stage deletion [y,n,q,a,d,?]? 
ok 40 - deleting an empty file

expecting success of 3701.41 'adding an empty file': 
	git init added &&
	(
		cd added &&
		test_commit initial &&
		>empty &&
		git add empty &&
		test_tick &&
		git commit -m empty &&
		git tag added-file &&
		git reset --hard HEAD^ &&
		test_path_is_missing empty &&

		echo y | git checkout -p added-file -- >actual &&
		test_path_is_file empty &&
		test_i18ngrep "Apply addition to index and worktree" actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3701-add-interactive/added/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[main 47883bc] empty
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty
HEAD is now at 24b24cf initial
(1/1) Apply addition to index and worktree [y,n,q,a,d,?]? 
ok 41 - adding an empty file

expecting success of 3701.42 'split hunk setup': 
	git reset --hard &&
	test_write_lines 10 20 30 40 50 60 >test &&
	git add test &&
	test_tick &&
	git commit -m test &&

	test_write_lines 10 15 20 21 22 23 24 30 40 50 60 >test

HEAD is now at 2e6bfc0 empty
[main 18d1e3e] test
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 test
ok 42 - split hunk setup

expecting success of 3701.43 'goto hunk': 
	test_when_finished "git reset" &&
	tr _ " " >expect <<-EOF &&
	(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? + 1:  -1,2 +1,3          +15
	_ 2:  -2,4 +3,8          +21
	go to which hunk? @@ -1,2 +1,3 @@
	_10
	+15
	_20
	(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_
	EOF
	test_write_lines s y g 1 | git add -p >actual &&
	tail -n 7 <actual >actual.trimmed &&
	test_cmp expect actual.trimmed

Unstaged changes after reset:
M	test
ok 43 - goto hunk

expecting success of 3701.44 'navigate to hunk via regex': 
	test_when_finished "git reset" &&
	tr _ " " >expect <<-EOF &&
	(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? @@ -1,2 +1,3 @@
	_10
	+15
	_20
	(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_
	EOF
	test_write_lines s y /1,2 | git add -p >actual &&
	tail -n 5 <actual >actual.trimmed &&
	test_cmp expect actual.trimmed

Unstaged changes after reset:
M	test
ok 44 - navigate to hunk via regex

expecting success of 3701.45 'split hunk "add -p (edit)"': 
	# Split, say Edit and do nothing.  Then:
	#
	# 1. Broken version results in a patch that does not apply and
	# only takes [y/n] (edit again) so the first q is discarded
	# and then n attempts to discard the edit. Repeat q enough
	# times to get out.
	#
	# 2. Correct version applies the (not)edited version, and asks
	#    about the next hunk, against which we say q and program
	#    exits.
	printf "%s\n" s e     q n q q |
	EDITOR=: git add -p &&
	git diff >actual &&
	! grep "^+15" actual

diff --git a/test b/test
index 0889435..26b5645 100644
--- a/test
+++ b/test
@@ -1,5 +1,10 @@
 10
+15
 20
+21
+22
+23
+24
 30
 40
 50
(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? Split into 2 hunks.
@@ -1,2 +1,3 @@
 10
+15
 20
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -2,4 +3,8 @@
 20
+21
+22
+23
+24
 30
 40
 50
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
ok 45 - split hunk "add -p (edit)"

expecting success of 3701.46 'setup ADD_I_USE_BUILTIN check': 
	result=success &&
	if ! test_have_prereq ADD_I_USE_BUILTIN
	then
		result=failure
	fi

ok 46 - setup ADD_I_USE_BUILTIN check

expecting success of 3701.47 'split hunk "add -p (no, yes, edit)"': 
	test_write_lines 5 10 20 21 30 31 40 50 60 >test &&
	git reset &&
	# test sequence is s(plit), n(o), y(es), e(dit)
	# q n q q is there to make sure we exit at the end.
	printf "%s\n" s n y e   q n q q |
	EDITOR=: git add -p 2>error &&
	test_must_be_empty error &&
	git diff >actual &&
	! grep "^+31" actual

Unstaged changes after reset:
M	test
diff --git a/test b/test
index 0889435..47ab15d 100644
--- a/test
+++ b/test
@@ -1,6 +1,9 @@
+5
 10
 20
+21
 30
+31
 40
 50
 60
(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? Split into 3 hunks.
@@ -1,2 +1,3 @@
+5
 10
 20
(1/3) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -1,3 +2,4 @@
 10
 20
+21
 30
(2/3) Stage this hunk [y,n,q,a,d,K,j,J,g,/,e,?]? @@ -3,4 +5,5 @@
 30
+31
 40
 50
 60
(3/3) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
ok 47 - split hunk "add -p (no, yes, edit)"

expecting success of 3701.48 'split hunk with incomplete line at end': 
	git reset --hard &&
	printf "missing LF" >>test &&
	git add test &&
	test_write_lines before 10 20 30 40 50 60 70 >test &&
	git grep --cached missing &&
	test_write_lines s n y q | git add -p &&
	test_must_fail git grep --cached missing &&
	git grep before &&
	test_must_fail git grep --cached before

HEAD is now at 18d1e3e test
test:missing LF
diff --git a/test b/test
index dd09efb..cdbfd1e 100644
--- a/test
+++ b/test
@@ -1,7 +1,8 @@
+before
 10
 20
 30
 40
 50
 60
-missing LF
\ No newline at end of file
+70
(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? Split into 2 hunks.
@@ -1,6 +1,7 @@
+before
 10
 20
 30
 40
 50
 60
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -1,7 +2,7 @@
 10
 20
 30
 40
 50
 60
-missing LF
\ No newline at end of file
+70
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
test:before
ok 48 - split hunk with incomplete line at end

expecting success of 3701.49 'edit, adding lines to the first hunk': 
	test_write_lines 10 11 20 30 40 50 51 60 >test &&
	git reset &&
	tr _ " " >patch <<-EOF &&
	@@ -1,5 +1,6 @@
	_10
	+11
	+12
	_20
	+21
	+22
	_30
	EOF
	# test sequence is s(plit), e(dit), n(o)
	# q n q q is there to make sure we exit at the end.
	printf "%s\n" s e n   q n q q |
	EDITOR=./fake_editor.sh git add -p 2>error &&
	test_must_be_empty error &&
	git diff --cached >actual &&
	grep "^+22" actual

Unstaged changes after reset:
M	test
diff --git a/test b/test
index 0889435..cf86f12 100644
--- a/test
+++ b/test
@@ -1,6 +1,8 @@
 10
+11
 20
 30
 40
 50
+51
 60
(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? Split into 2 hunks.
@@ -1,5 +1,6 @@
 10
+11
 20
 30
 40
 50
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -2,5 +3,6 @@
 20
 30
 40
 50
+51
 60
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
+22
ok 49 - edit, adding lines to the first hunk

expecting success of 3701.50 'patch mode ignores unmerged entries': 
	git reset --hard &&
	test_commit conflict &&
	test_commit non-conflict &&
	git checkout -b side &&
	test_commit side conflict.t &&
	git checkout main &&
	test_commit main conflict.t &&
	test_must_fail git merge side &&
	echo changed >non-conflict.t &&
	echo y | git add -p >output &&
	! grep a/conflict.t output &&
	cat >expected <<-\EOF &&
	* Unmerged path conflict.t
	diff --git a/non-conflict.t b/non-conflict.t
	index f766221..5ea2ed4 100644
	--- a/non-conflict.t
	+++ b/non-conflict.t
	@@ -1 +1 @@
	-non-conflict
	+changed
	EOF
	git diff --cached >diff &&
	diff_cmp expected diff

HEAD is now at 18d1e3e test
[main 7573f98] conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.t
[main 8e66292] non-conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 non-conflict.t
Switched to a new branch 'side'
[side a0a968f] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main 095e8c6] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: refname 'side' is ambiguous.
warning: refname 'side' is ambiguous.
Auto-merging conflict.t
CONFLICT (content): Merge conflict in conflict.t
Automatic merge failed; fix conflicts and then commit the result.
ok 50 - patch mode ignores unmerged entries

expecting success of 3701.51 'index is refreshed after applying patch': 
	git reset --hard &&
	echo content >test &&
	printf y | git add -p &&
	git diff-files --exit-code

HEAD is now at 095e8c6 main
diff --git a/test b/test
index 0889435..d95f3ad 100644
--- a/test
+++ b/test
@@ -1,6 +1 @@
-10
-20
-30
-40
-50
-60
+content
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 51 - index is refreshed after applying patch

expecting success of 3701.52 'diffs can be colorized': 
	git reset --hard &&

	echo content >test &&
	printf y >y &&
	force_color git add -p >output 2>&1 <y &&
	git diff-files --exit-code &&

	# We do not want to depend on the exact coloring scheme
	# git uses for diffs, so just check that we saw some kind of color.
	grep "$(printf "\\033")" output

HEAD is now at 095e8c6 main
diff --git a/test b/test
index 0889435..d95f3ad 100644
--- a/test
+++ b/test
@@ -1,6 +1 @@
-10
-20
-30
-40
-50
-60
+content
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 52 - diffs can be colorized

expecting success of 3701.53 'colors can be overridden': 
	git reset --hard &&
	test_when_finished "git rm -f color-test" &&
	test_write_lines context old more-context >color-test &&
	git add color-test &&
	test_write_lines context new more-context another-one >color-test &&

	echo trigger an error message >input &&
	force_color git \
		-c color.interactive.error=blue \
		add -i 2>err.raw <input &&
	test_decode_color <err.raw >err &&
	grep "<BLUE>Huh (trigger)?<RESET>" err &&

	test_write_lines help quit >input &&
	force_color git \
		-c color.interactive.header=red \
		-c color.interactive.help=green \
		-c color.interactive.prompt=yellow \
		add -i >actual.raw <input &&
	test_decode_color <actual.raw >actual &&
	cat >expect <<-\EOF &&
	<RED>           staged     unstaged path<RESET>
	  1:        +3/-0        +2/-1 color-test

	<RED>*** Commands ***<RESET>
	  1: <YELLOW>s<RESET>tatus	  2: <YELLOW>u<RESET>pdate	  3: <YELLOW>r<RESET>evert	  4: <YELLOW>a<RESET>dd untracked
	  5: <YELLOW>p<RESET>atch	  6: <YELLOW>d<RESET>iff	  7: <YELLOW>q<RESET>uit	  8: <YELLOW>h<RESET>elp
	<YELLOW>What now<RESET>> <GREEN>status        - show paths with changes<RESET>
	<GREEN>update        - add working tree state to the staged set of changes<RESET>
	<GREEN>revert        - revert staged set of changes back to the HEAD version<RESET>
	<GREEN>patch         - pick hunks and update selectively<RESET>
	<GREEN>diff          - view diff between HEAD and index<RESET>
	<GREEN>add untracked - add contents of untracked files to the staged set of changes<RESET>
	<RED>*** Commands ***<RESET>
	  1: <YELLOW>s<RESET>tatus	  2: <YELLOW>u<RESET>pdate	  3: <YELLOW>r<RESET>evert	  4: <YELLOW>a<RESET>dd untracked
	  5: <YELLOW>p<RESET>atch	  6: <YELLOW>d<RESET>iff	  7: <YELLOW>q<RESET>uit	  8: <YELLOW>h<RESET>elp
	<YELLOW>What now<RESET>> Bye.
	EOF
	test_cmp expect actual &&

	: exercise recolor_hunk by editing and then look at the hunk again &&
	test_write_lines s e K q >input &&
	force_color git \
		-c color.interactive.prompt=yellow \
		-c color.diff.meta=italic \
		-c color.diff.frag=magenta \
		-c color.diff.context=cyan \
		-c color.diff.old=bold \
		-c color.diff.new=blue \
		-c core.editor=touch \
		add -p >actual.raw <input &&
	test_decode_color <actual.raw >actual.decoded &&
	sed "s/index [0-9a-f]*\\.\\.[0-9a-f]* 100644/<INDEX-LINE>/" <actual.decoded >actual &&
	cat >expect <<-\EOF &&
	<ITALIC>diff --git a/color-test b/color-test<RESET>
	<ITALIC><INDEX-LINE><RESET>
	<ITALIC>--- a/color-test<RESET>
	<ITALIC>+++ b/color-test<RESET>
	<MAGENTA>@@ -1,3 +1,4 @@<RESET>
	<CYAN> context<RESET>
	<BOLD>-old<RESET>
	<BLUE>+<RESET><BLUE>new<RESET>
	<CYAN> more-context<RESET>
	<BLUE>+<RESET><BLUE>another-one<RESET>
	<YELLOW>(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? <RESET><BOLD>Split into 2 hunks.<RESET>
	<MAGENTA>@@ -1,3 +1,3 @@<RESET>
	<CYAN> context<RESET>
	<BOLD>-old<RESET>
	<BLUE>+<RESET><BLUE>new<RESET>
	<CYAN> more-context<RESET>
	<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? <RESET><MAGENTA>@@ -3 +3,2 @@<RESET>
	<CYAN> more-context<RESET>
	<BLUE>+<RESET><BLUE>another-one<RESET>
	<YELLOW>(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? <RESET><MAGENTA>@@ -1,3 +1,3 @@<RESET>
	<CYAN> context<RESET>
	<BOLD>-old<RESET>
	<BLUE>+new<RESET>
	<CYAN> more-context<RESET>
	<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? <RESET>
	EOF
	test_cmp expect actual

HEAD is now at 095e8c6 main
           staged     unstaged path
  1:        +3/-0        +2/-1 color-test

*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now> *** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now> 
Bye.
<BLUE>Huh (trigger)?<RESET>
rm 'color-test'
ok 53 - colors can be overridden

expecting success of 3701.54 'colorized diffs respect diff.wsErrorHighlight': 
	git reset --hard &&

	echo "old " >test &&
	git add test &&
	echo "new " >test &&

	printf y >y &&
	force_color git -c diff.wsErrorHighlight=all add -p >output.raw 2>&1 <y &&
	test_decode_color <output.raw >output &&
	grep "old<" output

HEAD is now at 095e8c6 main
<RED>-<RESET><RED>old<RESET><BRED> <RESET>
ok 54 - colorized diffs respect diff.wsErrorHighlight

expecting success of 3701.55 'diffFilter filters diff': 
	git reset --hard &&

	echo content >test &&
	test_config interactive.diffFilter "sed s/^/foo:/" &&
	printf y >y &&
	force_color git add -p >output 2>&1 <y &&

	# avoid depending on the exact coloring or content of the prompts,
	# and just make sure we saw our diff prefixed
	grep foo:.*content output

HEAD is now at 095e8c6 main
foo:+content
ok 55 - diffFilter filters diff

expecting success of 3701.56 'detect bogus diffFilter output': 
	git reset --hard &&

	echo content >test &&
	test_config interactive.diffFilter "sed 6d" &&
	printf y >y &&
	force_color test_must_fail git add -p <y >output 2>&1 &&
	grep "mismatched output" output

HEAD is now at 095e8c6 main
error: mismatched output from interactive.diffFilter
ok 56 - detect bogus diffFilter output

expecting success of 3701.57 'handle iffy colored hunk headers': 
	git reset --hard &&

	echo content >test &&
	printf n >n &&
	force_color git -c interactive.diffFilter="sed s/.*@@.*/XX/" \
		add -p >output 2>&1 <n &&
	grep "^XX$" output

HEAD is now at 095e8c6 main
XX
ok 57 - handle iffy colored hunk headers

expecting success of 3701.58 'handle very large filtered diff': 
	git reset --hard &&
	# The specific number here is not important, but it must
	# be large enough that the output of "git diff --color"
	# fills up the pipe buffer. 10,000 results in ~200k of
	# colored output.
	test_seq 10000 >test &&
	test_config interactive.diffFilter cat &&
	printf y >y &&
	force_color git add -p >output 2>&1 <y &&
	git diff-files --exit-code -- test

HEAD is now at 095e8c6 main
ok 58 - handle very large filtered diff

expecting success of 3701.59 'diff.algorithm is passed to `git diff-files`': 
	git reset --hard &&

	>file &&
	git add file &&
	echo changed >file &&
	test_must_fail git -c diff.algorithm=bogus add -p 2>err &&
	test_i18ngrep "error: option diff-algorithm accepts " err

HEAD is now at 095e8c6 main
error: option diff-algorithm accepts "myers", "minimal", "patience" and "histogram"
ok 59 - diff.algorithm is passed to `git diff-files`

expecting success of 3701.60 'patch-mode via -i prompts for files': 
	git reset --hard &&

	echo one >file &&
	echo two >test &&
	git add -i <<-\EOF &&
	patch
	test

	y
	quit
	EOF

	echo test >expect &&
	git diff --cached --name-only >actual &&
	diff_cmp expect actual

HEAD is now at 095e8c6 main
           staged     unstaged path
  1:    unchanged        +1/-2 file
  2:    unchanged        +1/-6 test

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:    unchanged        +1/-2 [f]ile
  2:    unchanged        +1/-6 [t]est
Patch update>>            staged     unstaged path
  1:    unchanged        +1/-2 [f]ile
* 2:    unchanged        +1/-6 [t]est
Patch update>> diff --git a/test b/test
index 0889435..f719efd 100644
--- a/test
+++ b/test
@@ -1,6 +1 @@
-10
-20
-30
-40
-50
-60
+two
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> Bye.
ok 60 - patch-mode via -i prompts for files

expecting success of 3701.61 'add -p handles globs': 
	git reset --hard &&

	mkdir -p subdir &&
	echo base >one.c &&
	echo base >subdir/two.c &&
	git add "*.c" &&
	git commit -m base &&

	echo change >one.c &&
	echo change >subdir/two.c &&
	git add -p "*.c" <<-\EOF &&
	y
	y
	EOF

	cat >expect <<-\EOF &&
	one.c
	subdir/two.c
	EOF
	git diff --cached --name-only >actual &&
	test_cmp expect actual

HEAD is now at 095e8c6 main
[main 5128550] base
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one.c
 create mode 100644 subdir/two.c
diff --git a/one.c b/one.c
index df967b9..0835e4f 100644
--- a/one.c
+++ b/one.c
@@ -1 +1 @@
-base
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
diff --git a/subdir/two.c b/subdir/two.c
index df967b9..0835e4f 100644
--- a/subdir/two.c
+++ b/subdir/two.c
@@ -1 +1 @@
-base
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 61 - add -p handles globs

expecting success of 3701.62 'add -p handles relative paths': 
	git reset --hard &&

	echo base >relpath.c &&
	git add "*.c" &&
	git commit -m relpath &&

	echo change >relpath.c &&
	mkdir -p subdir &&
	git -C subdir add -p .. 2>error <<-\EOF &&
	y
	EOF

	test_must_be_empty error &&

	cat >expect <<-\EOF &&
	relpath.c
	EOF
	git diff --cached --name-only >actual &&
	test_cmp expect actual

HEAD is now at 5128550 base
[main cad2ca7] relpath
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 relpath.c
diff --git a/relpath.c b/relpath.c
index df967b9..0835e4f 100644
--- a/relpath.c
+++ b/relpath.c
@@ -1 +1 @@
-base
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 62 - add -p handles relative paths

expecting success of 3701.63 'add -p does not expand argument lists': 
	git reset --hard &&

	echo content >not-changed &&
	git add not-changed &&
	git commit -m "add not-changed file" &&

	echo change >file &&
	GIT_TRACE=$(pwd)/trace.out git add -p . <<-\EOF &&
	y
	EOF

	# we know that "file" must be mentioned since we actually
	# update it, but we want to be sure that our "." pathspec
	# was not expanded into the argument list of any command.
	# So look only for "not-changed".
	! grep -E "^trace: (built-in|exec|run_command): .*not-changed" trace.out

HEAD is now at cad2ca7 relpath
[main 86e6db4] add not-changed file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 not-changed
diff --git a/file b/file
index b6f2c08..0835e4f 100755
--- a/file
+++ b/file
@@ -1,2 +1 @@
-baseline
-content
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 63 - add -p does not expand argument lists

expecting success of 3701.64 'hunk-editing handles custom comment char': 
	git reset --hard &&
	echo change >>file &&
	test_config core.commentChar "\$" &&
	echo e | GIT_EDITOR=true git add -p &&
	git diff --exit-code

HEAD is now at 86e6db4 add not-changed file
diff --git a/file b/file
index b6f2c08..59630e0 100755
--- a/file
+++ b/file
@@ -1,2 +1,3 @@
 baseline
 content
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 64 - hunk-editing handles custom comment char

expecting success of 3701.65 'add -p works even with color.ui=always': 
	git reset --hard &&
	echo change >>file &&
	test_config color.ui always &&
	echo y | git add -p &&
	echo file >expect &&
	git diff --cached --name-only >actual &&
	test_cmp expect actual

HEAD is now at 86e6db4 add not-changed file
diff --git a/file b/file
index b6f2c08..59630e0 100755
--- a/file
+++ b/file
@@ -1,2 +1,3 @@
 baseline
 content
+change
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
ok 65 - add -p works even with color.ui=always

expecting success of 3701.66 'setup different kinds of dirty submodules': 
	test_create_repo for-submodules &&
	(
		cd for-submodules &&
		test_commit initial &&
		test_create_repo dirty-head &&
		(
			cd dirty-head &&
			test_commit initial
		) &&
		cp -R dirty-head dirty-otherwise &&
		cp -R dirty-head dirty-both-ways &&
		git add dirty-head &&
		git add dirty-otherwise dirty-both-ways &&
		git commit -m initial &&

		cd dirty-head &&
		test_commit updated &&
		cd ../dirty-both-ways &&
		test_commit updated &&
		echo dirty >>initial &&
		: >untracked &&
		cd ../dirty-otherwise &&
		echo dirty >>initial &&
		: >untracked
	) &&
	git -C for-submodules diff-files --name-only >actual &&
	cat >expected <<-\EOF &&
	dirty-both-ways
	dirty-head
	EOF
	test_cmp expected actual &&
	git -C for-submodules diff-files --name-only --ignore-submodules=none >actual &&
	cat >expected <<-\EOF &&
	dirty-both-ways
	dirty-head
	dirty-otherwise
	EOF
	test_cmp expected actual &&
	git -C for-submodules diff-files --name-only --ignore-submodules=dirty >actual &&
	cat >expected <<-\EOF &&
	dirty-both-ways
	dirty-head
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3701-add-interactive/for-submodules/.git/
[main (root-commit) 31243c6] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3701-add-interactive/for-submodules/dirty-head/.git/
[main (root-commit) 167ffd6] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
warning: adding embedded git repository: dirty-head
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> dirty-head
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached dirty-head
hint: 
hint: See "git help submodule" for more information.
warning: adding embedded git repository: dirty-both-ways
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> dirty-both-ways
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached dirty-both-ways
hint: 
hint: See "git help submodule" for more information.
warning: adding embedded git repository: dirty-otherwise
[main 6489f21] initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 160000 dirty-both-ways
 create mode 160000 dirty-head
 create mode 160000 dirty-otherwise
[main f10ac08] updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 updated.t
[main f86bdf4] updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 updated.t
ok 66 - setup different kinds of dirty submodules

expecting success of 3701.67 'status ignores dirty submodules (except HEAD)': 
	git -C for-submodules add -i </dev/null >output &&
	grep dirty-head output &&
	grep dirty-both-ways output &&
	! grep dirty-otherwise output

  2:    unchanged        +1/-1 dirty-head
  1:    unchanged        +1/-1 dirty-both-ways
ok 67 - status ignores dirty submodules (except HEAD)

expecting success of 3701.68 'handle submodules': 
	echo 123 >>for-submodules/dirty-otherwise/initial.t &&

	force_color git -C for-submodules add -p dirty-otherwise >output 2>&1 &&
	grep "No changes" output &&

	force_color git -C for-submodules add -p dirty-head >output 2>&1 <y &&
	git -C for-submodules ls-files --stage dirty-head >actual &&
	rev="$(git -C for-submodules/dirty-head rev-parse HEAD)" &&
	grep "$rev" actual

No changes.
160000 f10ac08dbe6eaf5e88125c402669e6f9b7076181 0	dirty-head
ok 68 - handle submodules

expecting success of 3701.69 'set up pathological context': 
	git reset --hard &&
	test_write_lines a a a a a a a a a a a >a &&
	git add a &&
	git commit -m a &&
	test_write_lines c b a a a a a a a b a a a a >a &&
	test_write_lines     a a a a a a a b a a a a >expected-1 &&
	test_write_lines   b a a a a a a a b a a a a >expected-2 &&
	# check editing can cope with missing header and deleted context lines
	# as well as changes to other lines
	test_write_lines +b " a" >patch

HEAD is now at 86e6db4 add not-changed file
[main 9e98a5e] a
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 a
ok 69 - set up pathological context

expecting success of 3701.70 'add -p works with pathological context lines': 
	git reset &&
	printf "%s\n" n y |
	git add -p &&
	git cat-file blob :a >actual &&
	test_cmp expected-1 actual

Unstaged changes after reset:
M	a
diff --git a/a b/a
index f04e1e1..f39a0f0 100644
--- a/a
+++ b/a
@@ -1,3 +1,5 @@
+c
+b
 a
 a
 a
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -5,6 +7,7 @@ a
 a
 a
 a
+b
 a
 a
 a
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
ok 70 - add -p works with pathological context lines

expecting success of 3701.71 'add -p patch editing works with pathological context lines': 
	git reset &&
	# n q q below is in case edit fails
	printf "%s\n" e y    n q q |
	git add -p &&
	git cat-file blob :a >actual &&
	test_cmp expected-2 actual

Unstaged changes after reset:
M	a
diff --git a/a b/a
index f04e1e1..f39a0f0 100644
--- a/a
+++ b/a
@@ -1,3 +1,5 @@
+c
+b
 a
 a
 a
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -5,6 +7,7 @@ a
 a
 a
 a
+b
 a
 a
 a
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 
ok 71 - add -p patch editing works with pathological context lines

expecting success of 3701.72 'checkout -p works with pathological context lines': 
	test_write_lines a a a a a a >a &&
	git add a &&
	test_write_lines a b a b a b a b a b a >a &&
	test_write_lines s n n y q | git checkout -p &&
	test_write_lines a b a b a a b a b a >expect &&
	test_cmp expect a

diff --git a/a b/a
index 786e4a7..477d4da 100644
--- a/a
+++ b/a
@@ -1,6 +1,11 @@
 a
+b
 a
+b
 a
+b
 a
+b
 a
+b
 a
(1/1) Discard this hunk from worktree [y,n,q,a,d,s,e,?]? Split into 5 hunks.
@@ -1,2 +1,3 @@
 a
+b
 a
(1/5) Discard this hunk from worktree [y,n,q,a,d,j,J,g,/,e,?]? @@ -2,2 +3,3 @@
 a
+b
 a
(2/5) Discard this hunk from worktree [y,n,q,a,d,K,j,J,g,/,e,?]? @@ -3,2 +5,3 @@
 a
+b
 a
(3/5) Discard this hunk from worktree [y,n,q,a,d,K,j,J,g,/,e,?]? @@ -4,2 +7,3 @@
 a
+b
 a
(4/5) Discard this hunk from worktree [y,n,q,a,d,K,j,J,g,/,e,?]? 
ok 72 - checkout -p works with pathological context lines

expecting success of 3701.73 'add -N followed by add -p patch editing': 
	git reset --hard &&
	(
		setup_new_file &&
		git add -N new-file &&
		test_write_lines e n q | git add -p &&
		git cat-file blob :new-file >actual &&
		test_cmp new-file-expect actual &&
		test_cmp patch-expect patch
	)

HEAD is now at 9e98a5e a
diff --git a/new-file b/new-file
new file mode 100644
index 0000000..0fdf397
--- /dev/null
+++ b/new-file
@@ -0,0 +1,6 @@
+a
+b
+c
+d
+e
+f
(1/1) Stage addition [y,n,q,a,d,e,?]? 
ok 73 - add -N followed by add -p patch editing

expecting success of 3701.74 'checkout -p patch editing of added file': 
	git reset --hard &&
	(
		setup_new_file &&
		git add new-file &&
		git commit -m "add new file" &&
		git rm new-file &&
		git commit -m "remove new file" &&
		test_write_lines e n q | git checkout -p HEAD^ &&
		test_cmp new-file-expect new-file &&
		test_cmp patch-expect patch
	)

HEAD is now at 9e98a5e a
[main 58d499b] add new file
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 new-file
rm 'new-file'
[main 4a33265] remove new file
 Author: A U Thor <author@example.com>
 1 file changed, 6 deletions(-)
 delete mode 100644 new-file
diff --git b/new-file a/new-file
new file mode 100644
index 0000000..0fdf397
--- /dev/null
+++ a/new-file
@@ -0,0 +1,6 @@
+a
+b
+c
+d
+e
+f
(1/1) Apply addition to index and worktree [y,n,q,a,d,e,?]? 
ok 74 - checkout -p patch editing of added file

expecting success of 3701.75 'show help from add--helper': 
	git reset --hard &&
	cat >expect <<-EOF &&

	<BOLD>*** Commands ***<RESET>
	  1: <BOLD;BLUE>s<RESET>tatus	  2: <BOLD;BLUE>u<RESET>pdate	  3: <BOLD;BLUE>r<RESET>evert	  4: <BOLD;BLUE>a<RESET>dd untracked
	  5: <BOLD;BLUE>p<RESET>atch	  6: <BOLD;BLUE>d<RESET>iff	  7: <BOLD;BLUE>q<RESET>uit	  8: <BOLD;BLUE>h<RESET>elp
	<BOLD;BLUE>What now<RESET>> <BOLD;RED>status        - show paths with changes<RESET>
	<BOLD;RED>update        - add working tree state to the staged set of changes<RESET>
	<BOLD;RED>revert        - revert staged set of changes back to the HEAD version<RESET>
	<BOLD;RED>patch         - pick hunks and update selectively<RESET>
	<BOLD;RED>diff          - view diff between HEAD and index<RESET>
	<BOLD;RED>add untracked - add contents of untracked files to the staged set of changes<RESET>
	<BOLD>*** Commands ***<RESET>
	  1: <BOLD;BLUE>s<RESET>tatus	  2: <BOLD;BLUE>u<RESET>pdate	  3: <BOLD;BLUE>r<RESET>evert	  4: <BOLD;BLUE>a<RESET>dd untracked
	  5: <BOLD;BLUE>p<RESET>atch	  6: <BOLD;BLUE>d<RESET>iff	  7: <BOLD;BLUE>q<RESET>uit	  8: <BOLD;BLUE>h<RESET>elp
	<BOLD;BLUE>What now<RESET>>$SP
	Bye.
	EOF
	test_write_lines h | force_color git add -i >actual.colored &&
	test_decode_color <actual.colored >actual &&
	test_cmp expect actual

HEAD is now at 4a33265 remove new file
ok 75 - show help from add--helper

# passed all 75 test(s)
1..75
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3900-i18n-commit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3900-i18n-commit/.git/
expecting success of 3900.1 'setup': 
	: >F &&
	git add F &&
	T=$(git write-tree) &&
	C=$(git commit-tree $T <"$TEST_DIRECTORY"/t3900/1-UTF-8.txt) &&
	git update-ref HEAD $C &&
	git tag C0

ok 1 - setup

expecting success of 3900.2 'no encoding header for base case': 
	E=$(git cat-file commit C0 | sed -ne "s/^encoding //p") &&
	test z = "z$E"

ok 2 - no encoding header for base case

expecting success of 3900.3 'UTF-16 refused because of NULs': 
	echo UTF-16 >F &&
	test_must_fail git commit -a -F "$TEST_DIRECTORY"/t3900/UTF-16.txt

error: a NUL byte in commit log message not allowed.
fatal: failed to write commit object
ok 3 - UTF-16 refused because of NULs

expecting success of 3900.4 'UTF-8 invalid characters refused': 
	test_when_finished "rm -f \"\$HOME/stderr\" \"\$HOME/invalid\"" &&
	echo "UTF-8 characters" >F &&
	printf "Commit message\n\nInvalid surrogate:\355\240\200\n" \
		>"$HOME/invalid" &&
	git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&
	test_i18ngrep "did not conform" "$HOME"/stderr

[master 97e22ab] Commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Warning: commit message did not conform to UTF-8.
ok 4 - UTF-8 invalid characters refused

expecting success of 3900.5 'UTF-8 overlong sequences rejected': 
	test_when_finished "rm -f \"\$HOME/stderr\" \"\$HOME/invalid\"" &&
	rm -f "$HOME/stderr" "$HOME/invalid" &&
	echo "UTF-8 overlong" >F &&
	printf "\340\202\251ommit message\n\nThis is not a space:\300\240\n" \
		>"$HOME/invalid" &&
	git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&
	test_i18ngrep "did not conform" "$HOME"/stderr

[master f17d203] à‚©ommit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: commit message did not conform to UTF-8.
ok 5 - UTF-8 overlong sequences rejected

expecting success of 3900.6 'UTF-8 non-characters refused': 
	test_when_finished "rm -f \"\$HOME/stderr\" \"\$HOME/invalid\"" &&
	echo "UTF-8 non-character 1" >F &&
	printf "Commit message\n\nNon-character:\364\217\277\276\n" \
		>"$HOME/invalid" &&
	git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&
	test_i18ngrep "did not conform" "$HOME"/stderr

[master b54194f] Commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: commit message did not conform to UTF-8.
ok 6 - UTF-8 non-characters refused

expecting success of 3900.7 'UTF-8 non-characters refused': 
	test_when_finished "rm -f \"\$HOME/stderr\" \"\$HOME/invalid\"" &&
	echo "UTF-8 non-character 2." >F &&
	printf "Commit message\n\nNon-character:\357\267\220\n" \
		>"$HOME/invalid" &&
	git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&
	test_i18ngrep "did not conform" "$HOME"/stderr

[master 65f731d] Commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: commit message did not conform to UTF-8.
ok 7 - UTF-8 non-characters refused

expecting success of 3900.8 'ISO8859-1 setup': 
		git config i18n.commitencoding $H &&
		git checkout -b $H C0 &&
		echo $H >F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt
	
Switched to a new branch 'ISO8859-1'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 8 - ISO8859-1 setup

expecting success of 3900.9 'eucJP setup': 
		git config i18n.commitencoding $H &&
		git checkout -b $H C0 &&
		echo $H >F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt
	
Switched to a new branch 'eucJP'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 9 - eucJP setup

expecting success of 3900.10 'ISO-2022-JP setup': 
		git config i18n.commitencoding $H &&
		git checkout -b $H C0 &&
		echo $H >F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt
	
Switched to a new branch 'ISO-2022-JP'
[ISO-2022-JP ae78d6f] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 10 - ISO-2022-JP setup

expecting success of 3900.11 'check encoding header for ISO8859-1': 
		E=$(git cat-file commit ISO8859-1 | sed -ne "s/^encoding //p") &&
		test "z$E" = "zISO8859-1"
	
ok 11 - check encoding header for ISO8859-1

expecting success of 3900.12 'check encoding header for eucJP': 
		E=$(git cat-file commit eucJP | sed -ne "s/^encoding //p") &&
		test "z$E" = "zeucJP"
	
ok 12 - check encoding header for eucJP

expecting success of 3900.13 'check encoding header for ISO-2022-JP': 
		E=$(git cat-file commit ISO-2022-JP | sed -ne "s/^encoding //p") &&
		test "z$E" = "zISO-2022-JP"
	
ok 13 - check encoding header for ISO-2022-JP

expecting success of 3900.14 'config to remove customization': 
	git config --unset-all i18n.commitencoding &&
	if Z=$(git config --get-all i18n.commitencoding)
	then
		echo Oops, should have failed.
		false
	else
		test z = "z$Z"
	fi &&
	git config i18n.commitencoding UTF-8

ok 14 - config to remove customization

expecting success of 3900.15 'ISO8859-1 should be shown in UTF-8 now': 
	compare_with ISO8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt

ok 15 - ISO8859-1 should be shown in UTF-8 now

expecting success of 3900.16 'eucJP should be shown in UTF-8 now': 
		compare_with eucJP "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
	
ok 16 - eucJP should be shown in UTF-8 now

expecting success of 3900.17 'ISO-2022-JP should be shown in UTF-8 now': 
		compare_with ISO-2022-JP "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
	
ok 17 - ISO-2022-JP should be shown in UTF-8 now

expecting success of 3900.18 'config to add customization': 
	git config --unset-all i18n.commitencoding &&
	if Z=$(git config --get-all i18n.commitencoding)
	then
		echo Oops, should have failed.
		false
	else
		test z = "z$Z"
	fi

ok 18 - config to add customization

expecting success of 3900.19 'ISO8859-1 should be shown in itself now': 
		git config i18n.commitencoding ISO8859-1 &&
		compare_with ISO8859-1 "$TEST_DIRECTORY"/t3900/ISO8859-1.txt
	
ok 19 - ISO8859-1 should be shown in itself now

expecting success of 3900.20 'eucJP should be shown in itself now': 
		git config i18n.commitencoding eucJP &&
		compare_with eucJP "$TEST_DIRECTORY"/t3900/eucJP.txt
	
ok 20 - eucJP should be shown in itself now

expecting success of 3900.21 'ISO-2022-JP should be shown in itself now': 
		git config i18n.commitencoding ISO-2022-JP &&
		compare_with ISO-2022-JP "$TEST_DIRECTORY"/t3900/ISO-2022-JP.txt
	
ok 21 - ISO-2022-JP should be shown in itself now

expecting success of 3900.22 'config to tweak customization': 
	git config i18n.logoutputencoding UTF-8

ok 22 - config to tweak customization

expecting success of 3900.23 'ISO8859-1 should be shown in UTF-8 now': 
	compare_with ISO8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt

ok 23 - ISO8859-1 should be shown in UTF-8 now

expecting success of 3900.24 'eucJP should be shown in UTF-8 now': 
		compare_with eucJP "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
	
ok 24 - eucJP should be shown in UTF-8 now

expecting success of 3900.25 'ISO-2022-JP should be shown in UTF-8 now': 
		compare_with ISO-2022-JP "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
	
ok 25 - ISO-2022-JP should be shown in UTF-8 now

expecting success of 3900.26 'eucJP should be shown in eucJP now': 
			compare_with eucJP "$TEST_DIRECTORY"/t3900/eucJP.txt $ICONV
		
ok 26 - eucJP should be shown in eucJP now

expecting success of 3900.27 'ISO-2022-JP should be shown in eucJP now': 
			compare_with ISO-2022-JP "$TEST_DIRECTORY"/t3900/eucJP.txt $ICONV
		
ok 27 - ISO-2022-JP should be shown in eucJP now

expecting success of 3900.28 'eucJP should be shown in ISO-2022-JP now': 
			compare_with eucJP "$TEST_DIRECTORY"/t3900/ISO-2022-JP.txt $ICONV
		
ok 28 - eucJP should be shown in ISO-2022-JP now

expecting success of 3900.29 'ISO-2022-JP should be shown in ISO-2022-JP now': 
			compare_with ISO-2022-JP "$TEST_DIRECTORY"/t3900/ISO-2022-JP.txt $ICONV
		
ok 29 - ISO-2022-JP should be shown in ISO-2022-JP now

expecting success of 3900.30 'No conversion with ISO8859-1': 
		compare_with "--encoding=none ISO8859-1" "$TEST_DIRECTORY"/t3900/ISO8859-1.txt
	
ok 30 - No conversion with ISO8859-1

expecting success of 3900.31 'No conversion with eucJP': 
		compare_with "--encoding=none eucJP" "$TEST_DIRECTORY"/t3900/eucJP.txt
	
ok 31 - No conversion with eucJP

expecting success of 3900.32 'No conversion with ISO-2022-JP': 
		compare_with "--encoding=none ISO-2022-JP" "$TEST_DIRECTORY"/t3900/ISO-2022-JP.txt
	
ok 32 - No conversion with ISO-2022-JP

expecting success of 3900.33 'commit --fixup with eucJP encoding': 
		git config i18n.commitencoding $H &&
		git checkout -b $H-$flag C0 &&
		echo $H >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		echo $H $flag >>F &&
		git commit -a --$flag HEAD~1 &&
		E=$(git cat-file commit eucJP-fixup |
			sed -ne "s/^encoding //p") &&
		test "z$E" = "z$H" &&
		git config --unset-all i18n.commitencoding &&
		git rebase --autosquash -i HEAD^^^ &&
		git log --oneline >actual &&
		test_line_count = 3 actual
	
Switched to a new branch 'eucJP-fixup'
[eucJP-fixup 2d12add] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[eucJP-fixup 4164b89] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[eucJP-fixup 762ea33] fixup! $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/eucJP-fixup.
ok 33 - commit --fixup with eucJP encoding

expecting success of 3900.34 'commit --squash with ISO-2022-JP encoding': 
		git config i18n.commitencoding $H &&
		git checkout -b $H-$flag C0 &&
		echo $H >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		echo $H $flag >>F &&
		git commit -a --$flag HEAD~1 &&
		E=$(git cat-file commit ISO-2022-JP-squash |
			sed -ne "s/^encoding //p") &&
		test "z$E" = "z$H" &&
		git config --unset-all i18n.commitencoding &&
		git rebase --autosquash -i HEAD^^^ &&
		git log --oneline >actual &&
		test_line_count = 3 actual
	
Switched to a new branch 'ISO-2022-JP-squash'
[ISO-2022-JP-squash 73be6f0] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[ISO-2022-JP-squash 358ea4d] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[ISO-2022-JP-squash 31af1e8] squash! $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
[detached HEAD 452b79b] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 2 insertions(+)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/ISO-2022-JP-squash.
ok 34 - commit --squash with ISO-2022-JP encoding

expecting success of 3900.35 'commit --fixup into UTF-8 from ISO-8859-1': 
		git checkout -b $flag-$old-$new C0 &&
		git config i18n.commitencoding $old &&
		echo $old >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$msg &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		git config i18n.commitencoding $new &&
		echo $new-$flag >>F &&
		git commit -a --$flag HEAD^ &&
		git rebase --autosquash -i HEAD^^^ &&
		git rev-list HEAD >actual &&
		test_line_count = 3 actual &&
		iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
		git cat-file commit HEAD^ >raw &&
		(sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
		test_cmp expect actual
	
Switched to a new branch 'fixup-UTF-8-ISO-8859-1'
[fixup-UTF-8-ISO-8859-1 f9ae2e6] ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[fixup-UTF-8-ISO-8859-1 2e63169] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[fixup-UTF-8-ISO-8859-1 c8086ca] fixup! ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/fixup-UTF-8-ISO-8859-1.
ok 35 - commit --fixup into UTF-8 from ISO-8859-1

expecting success of 3900.36 'commit --squash into ISO-8859-1 from UTF-8': 
		git checkout -b $flag-$old-$new C0 &&
		git config i18n.commitencoding $old &&
		echo $old >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$msg &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		git config i18n.commitencoding $new &&
		echo $new-$flag >>F &&
		git commit -a --$flag HEAD^ &&
		git rebase --autosquash -i HEAD^^^ &&
		git rev-list HEAD >actual &&
		test_line_count = 3 actual &&
		iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
		git cat-file commit HEAD^ >raw &&
		(sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
		test_cmp expect actual
	
Switched to a new branch 'squash-ISO-8859-1-UTF-8'
[squash-ISO-8859-1-UTF-8 786be3a] ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[squash-ISO-8859-1-UTF-8 108aa2c] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[squash-ISO-8859-1-UTF-8 1f9565f] squash! ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
[detached HEAD a65b88e] ÄËÑÏÖ
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 2 insertions(+)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/squash-ISO-8859-1-UTF-8.
ok 36 - commit --squash into ISO-8859-1 from UTF-8

expecting success of 3900.37 'commit --squash into eucJP from ISO-2022-JP': 
		git checkout -b $flag-$old-$new C0 &&
		git config i18n.commitencoding $old &&
		echo $old >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$msg &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		git config i18n.commitencoding $new &&
		echo $new-$flag >>F &&
		git commit -a --$flag HEAD^ &&
		git rebase --autosquash -i HEAD^^^ &&
		git rev-list HEAD >actual &&
		test_line_count = 3 actual &&
		iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
		git cat-file commit HEAD^ >raw &&
		(sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
		test_cmp expect actual
	
Switched to a new branch 'squash-eucJP-ISO-2022-JP'
[squash-eucJP-ISO-2022-JP 8154dd2] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[squash-eucJP-ISO-2022-JP ac34524] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[squash-eucJP-ISO-2022-JP 60556dc] squash! $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
[detached HEAD d7dba56] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 2 insertions(+)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/squash-eucJP-ISO-2022-JP.
ok 37 - commit --squash into eucJP from ISO-2022-JP

expecting success of 3900.38 'commit --fixup into ISO-2022-JP from UTF-8': 
		git checkout -b $flag-$old-$new C0 &&
		git config i18n.commitencoding $old &&
		echo $old >>F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$msg &&
		test_tick &&
		echo intermediate stuff >>G &&
		git add G &&
		git commit -a -m "intermediate commit" &&
		test_tick &&
		git config i18n.commitencoding $new &&
		echo $new-$flag >>F &&
		git commit -a --$flag HEAD^ &&
		git rebase --autosquash -i HEAD^^^ &&
		git rev-list HEAD >actual &&
		test_line_count = 3 actual &&
		iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
		git cat-file commit HEAD^ >raw &&
		(sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
		test_cmp expect actual
	
Switched to a new branch 'fixup-ISO-2022-JP-UTF-8'
[fixup-ISO-2022-JP-UTF-8 31ec3d8] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[fixup-ISO-2022-JP-UTF-8 1264baa] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G
[fixup-ISO-2022-JP-UTF-8 7683d37] fixup! $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/fixup-ISO-2022-JP-UTF-8.
ok 38 - commit --fixup into ISO-2022-JP from UTF-8

# passed all 38 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3902-quoted.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3902-quoted/.git/
expecting success of 3902.1 'setup': 

	mkdir "$FN" &&
	for_each_name "echo initial >\"\$name\"" &&
	git add . &&
	git commit -q -m Initial &&

	for_each_name "echo second >\"\$name\"" &&
	git commit -a -m Second &&

	for_each_name "echo modified >\"\$name\""


[master 6e4313d] Second
 Author: A U Thor <author@example.com>
 11 files changed, 11 insertions(+), 11 deletions(-)
ok 1 - setup

expecting success of 3902.2 'setup expected files': 
cat >expect.quoted <<\EOF &&
Name
"Name and a\nLF"
"Name and an\tHT"
"Name\""
With SP in it
"\346\277\261\351\207\216\t\347\264\224"
"\346\277\261\351\207\216\n\347\264\224"
"\346\277\261\351\207\216 \347\264\224"
"\346\277\261\351\207\216\"\347\264\224"
"\346\277\261\351\207\216/file"
"\346\277\261\351\207\216\347\264\224"
EOF

cat >expect.raw <<\EOF
Name
"Name and a\nLF"
"Name and an\tHT"
"Name\""
With SP in it
"濱野\t純"
"濱野\n純"
濱野 純
"濱野\"純"
濱野/file
濱野純
EOF

ok 2 - setup expected files

expecting success of 3902.3 'check fully quoted output from ls-files': 

	git ls-files >current && test_cmp expect.quoted current


ok 3 - check fully quoted output from ls-files

expecting success of 3902.4 'check fully quoted output from diff-files': 

	git diff --name-only >current &&
	test_cmp expect.quoted current


ok 4 - check fully quoted output from diff-files

expecting success of 3902.5 'check fully quoted output from diff-index': 

	git diff --name-only HEAD >current &&
	test_cmp expect.quoted current


ok 5 - check fully quoted output from diff-index

expecting success of 3902.6 'check fully quoted output from diff-tree': 

	git diff --name-only HEAD^ HEAD >current &&
	test_cmp expect.quoted current


ok 6 - check fully quoted output from diff-tree

expecting success of 3902.7 'check fully quoted output from ls-tree': 

	git ls-tree --name-only -r HEAD >current &&
	test_cmp expect.quoted current


ok 7 - check fully quoted output from ls-tree

expecting success of 3902.8 'setting core.quotepath': 

	git config --bool core.quotepath false


ok 8 - setting core.quotepath

expecting success of 3902.9 'check fully quoted output from ls-files': 

	git ls-files >current && test_cmp expect.raw current


ok 9 - check fully quoted output from ls-files

expecting success of 3902.10 'check fully quoted output from diff-files': 

	git diff --name-only >current &&
	test_cmp expect.raw current


ok 10 - check fully quoted output from diff-files

expecting success of 3902.11 'check fully quoted output from diff-index': 

	git diff --name-only HEAD >current &&
	test_cmp expect.raw current


ok 11 - check fully quoted output from diff-index

expecting success of 3902.12 'check fully quoted output from diff-tree': 

	git diff --name-only HEAD^ HEAD >current &&
	test_cmp expect.raw current


ok 12 - check fully quoted output from diff-tree

expecting success of 3902.13 'check fully quoted output from ls-tree': 

	git ls-tree --name-only -r HEAD >current &&
	test_cmp expect.raw current


ok 13 - check fully quoted output from ls-tree

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3800-mktag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/.git/
expecting success of 3800.1 'setup': 
	test_commit A &&
	test_commit B &&
	head=$(git rev-parse --verify HEAD) &&
	head_parent=$(git rev-parse --verify HEAD~) &&
	tree=$(git rev-parse HEAD^{tree}) &&
	blob=$(git rev-parse --verify HEAD:B.t)

[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ok 1 - setup

expecting success of 3800.2 'basic usage': 
	cat >tag.sig <<-EOF &&
	object $head
	type commit
	tag mytag
	tagger T A Gger <tagger@example.com> 1206478233 -0500
	EOF
	git mktag <tag.sig &&
	git mktag --end-of-options <tag.sig &&
	test_expect_code 129 git mktag --unknown-option

03e2668a257938d0a47497d9762e45da6c84c9f8
03e2668a257938d0a47497d9762e45da6c84c9f8
error: unknown option `unknown-option'
usage: git mktag

    --strict              enable more strict checking

ok 2 - basic usage

expecting success of 3800.3 'fail with [--[no-]strict]: Tag object length check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 3 - fail with [--[no-]strict]: Tag object length check

expecting success of 3800.4 'setup: Tag object length check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 4 - setup: Tag object length check

expecting success of 3800.5 'hash-object & fsck unreachable: Tag object length check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: 8d62cb0b066bfbc796d7b3f65e7b88dcff037784: object could not be parsed: ./objects/8d/62cb0b066bfbc796d7b3f65e7b88dcff037784
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 5 - hash-object & fsck unreachable: Tag object length check

expecting success of 3800.6 'update-ref & fsck reachable: Tag object length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
8d62cb0b066bfbc796d7b3f65e7b88dcff037784
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 8d62cb0b066bfbc796d7b3f65e7b88dcff037784
error: 8d62cb0b066bfbc796d7b3f65e7b88dcff037784: object could not be parsed: ./objects/8d/62cb0b066bfbc796d7b3f65e7b88dcff037784
error: refs/tags/bad_tag: invalid sha1 pointer 8d62cb0b066bfbc796d7b3f65e7b88dcff037784
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 6 - update-ref & fsck reachable: Tag object length check

expecting success of 3800.7 'for-each-ref: Tag object length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
8d62cb0b066bfbc796d7b3f65e7b88dcff037784
fatal: parse_object_buffer failed on 8d62cb0b066bfbc796d7b3f65e7b88dcff037784 for refs/tags/bad_tag
ok 7 - for-each-ref: Tag object length check

expecting success of 3800.8 'fast-export & fast-import: Tag object length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
8d62cb0b066bfbc796d7b3f65e7b88dcff037784
fatal: bad object refs/tags/bad_tag
fatal: bad object 8d62cb0b066bfbc796d7b3f65e7b88dcff037784
ok 8 - fast-export & fast-import: Tag object length check

expecting success of 3800.9 'fail with [--[no-]strict]: "object" line label check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 9 - fail with [--[no-]strict]: "object" line label check

expecting success of 3800.10 'setup: "object" line label check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 10 - setup: "object" line label check

expecting success of 3800.11 'hash-object & fsck unreachable: "object" line label check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: b9e0ff26e2bd60ee615c24ca05d8440ef20bca14: object could not be parsed: ./objects/b9/e0ff26e2bd60ee615c24ca05d8440ef20bca14
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 11 - hash-object & fsck unreachable: "object" line label check

expecting success of 3800.12 'update-ref & fsck reachable: "object" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
error: b9e0ff26e2bd60ee615c24ca05d8440ef20bca14: object could not be parsed: ./objects/b9/e0ff26e2bd60ee615c24ca05d8440ef20bca14
error: refs/tags/bad_tag: invalid sha1 pointer b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 12 - update-ref & fsck reachable: "object" line label check

expecting success of 3800.13 'for-each-ref: "object" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
fatal: parse_object_buffer failed on b9e0ff26e2bd60ee615c24ca05d8440ef20bca14 for refs/tags/bad_tag
ok 13 - for-each-ref: "object" line label check

expecting success of 3800.14 'fast-export & fast-import: "object" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
fatal: bad object refs/tags/bad_tag
fatal: bad object b9e0ff26e2bd60ee615c24ca05d8440ef20bca14
ok 14 - fast-export & fast-import: "object" line label check

expecting success of 3800.15 'fail with [--[no-]strict]: "object" line check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 15 - fail with [--[no-]strict]: "object" line check

expecting success of 3800.16 'setup: "object" line check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 16 - setup: "object" line check

expecting success of 3800.17 'hash-object & fsck unreachable: "object" line check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: 7ff15067ef1f3dffae49e370c6032ac7c0148ce3: object could not be parsed: ./objects/7f/f15067ef1f3dffae49e370c6032ac7c0148ce3
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 17 - hash-object & fsck unreachable: "object" line check

expecting success of 3800.18 'update-ref & fsck reachable: "object" line check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
7ff15067ef1f3dffae49e370c6032ac7c0148ce3
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 7ff15067ef1f3dffae49e370c6032ac7c0148ce3
error: 7ff15067ef1f3dffae49e370c6032ac7c0148ce3: object could not be parsed: ./objects/7f/f15067ef1f3dffae49e370c6032ac7c0148ce3
error: refs/tags/bad_tag: invalid sha1 pointer 7ff15067ef1f3dffae49e370c6032ac7c0148ce3
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 18 - update-ref & fsck reachable: "object" line check

expecting success of 3800.19 'for-each-ref: "object" line check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
7ff15067ef1f3dffae49e370c6032ac7c0148ce3
fatal: parse_object_buffer failed on 7ff15067ef1f3dffae49e370c6032ac7c0148ce3 for refs/tags/bad_tag
ok 19 - for-each-ref: "object" line check

expecting success of 3800.20 'fast-export & fast-import: "object" line check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
7ff15067ef1f3dffae49e370c6032ac7c0148ce3
fatal: bad object refs/tags/bad_tag
fatal: bad object 7ff15067ef1f3dffae49e370c6032ac7c0148ce3
ok 20 - fast-export & fast-import: "object" line check

expecting success of 3800.21 'fail with [--[no-]strict]: "type" line label check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 21 - fail with [--[no-]strict]: "type" line label check

expecting success of 3800.22 'setup: "type" line label check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 22 - setup: "type" line label check

expecting success of 3800.23 'hash-object & fsck unreachable: "type" line label check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: 090ab97d1645d040d15bb9e4b20fd6212b886bca: object could not be parsed: ./objects/09/0ab97d1645d040d15bb9e4b20fd6212b886bca
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 23 - hash-object & fsck unreachable: "type" line label check

expecting success of 3800.24 'update-ref & fsck reachable: "type" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
090ab97d1645d040d15bb9e4b20fd6212b886bca
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 090ab97d1645d040d15bb9e4b20fd6212b886bca
error: 090ab97d1645d040d15bb9e4b20fd6212b886bca: object could not be parsed: ./objects/09/0ab97d1645d040d15bb9e4b20fd6212b886bca
error: refs/tags/bad_tag: invalid sha1 pointer 090ab97d1645d040d15bb9e4b20fd6212b886bca
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 24 - update-ref & fsck reachable: "type" line label check

expecting success of 3800.25 'for-each-ref: "type" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
090ab97d1645d040d15bb9e4b20fd6212b886bca
fatal: parse_object_buffer failed on 090ab97d1645d040d15bb9e4b20fd6212b886bca for refs/tags/bad_tag
ok 25 - for-each-ref: "type" line label check

expecting success of 3800.26 'fast-export & fast-import: "type" line label check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
090ab97d1645d040d15bb9e4b20fd6212b886bca
fatal: bad object refs/tags/bad_tag
fatal: bad object 090ab97d1645d040d15bb9e4b20fd6212b886bca
ok 26 - fast-export & fast-import: "type" line label check

expecting success of 3800.27 'fail with [--[no-]strict]: "type" line eol check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 27 - fail with [--[no-]strict]: "type" line eol check

expecting success of 3800.28 'setup: "type" line eol check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 28 - setup: "type" line eol check

expecting success of 3800.29 'hash-object & fsck unreachable: "type" line eol check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: a36dccd49036e007b4d53368115f23136beaf229: object could not be parsed: ./objects/a3/6dccd49036e007b4d53368115f23136beaf229
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 29 - hash-object & fsck unreachable: "type" line eol check

expecting success of 3800.30 'update-ref & fsck reachable: "type" line eol check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
a36dccd49036e007b4d53368115f23136beaf229
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object a36dccd49036e007b4d53368115f23136beaf229
error: a36dccd49036e007b4d53368115f23136beaf229: object could not be parsed: ./objects/a3/6dccd49036e007b4d53368115f23136beaf229
error: refs/tags/bad_tag: invalid sha1 pointer a36dccd49036e007b4d53368115f23136beaf229
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 30 - update-ref & fsck reachable: "type" line eol check

expecting success of 3800.31 'for-each-ref: "type" line eol check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
a36dccd49036e007b4d53368115f23136beaf229
fatal: parse_object_buffer failed on a36dccd49036e007b4d53368115f23136beaf229 for refs/tags/bad_tag
ok 31 - for-each-ref: "type" line eol check

expecting success of 3800.32 'fast-export & fast-import: "type" line eol check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
a36dccd49036e007b4d53368115f23136beaf229
fatal: bad object refs/tags/bad_tag
fatal: bad object a36dccd49036e007b4d53368115f23136beaf229
ok 32 - fast-export & fast-import: "type" line eol check

expecting success of 3800.33 'fail with [--[no-]strict]: "tag" line label check #1': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 33 - fail with [--[no-]strict]: "tag" line label check #1

expecting success of 3800.34 'setup: "tag" line label check #1': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 34 - setup: "tag" line label check #1

expecting success of 3800.35 'hash-object & fsck unreachable: "tag" line label check #1': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08: object could not be parsed: ./objects/37/957fe24f66b0a0c90e24e3e0d1c79c27c66a08
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 35 - hash-object & fsck unreachable: "tag" line label check #1

expecting success of 3800.36 'update-ref & fsck reachable: "tag" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
error: 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08: object could not be parsed: ./objects/37/957fe24f66b0a0c90e24e3e0d1c79c27c66a08
error: refs/tags/bad_tag: invalid sha1 pointer 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 36 - update-ref & fsck reachable: "tag" line label check #1

expecting success of 3800.37 'for-each-ref: "tag" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
fatal: parse_object_buffer failed on 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08 for refs/tags/bad_tag
ok 37 - for-each-ref: "tag" line label check #1

expecting success of 3800.38 'fast-export & fast-import: "tag" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
fatal: bad object refs/tags/bad_tag
fatal: bad object 37957fe24f66b0a0c90e24e3e0d1c79c27c66a08
ok 38 - fast-export & fast-import: "tag" line label check #1

expecting success of 3800.39 'fail with [--[no-]strict]: "tag" line label check #2': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 39 - fail with [--[no-]strict]: "tag" line label check #2

expecting success of 3800.40 'setup: "tag" line label check #2': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 40 - setup: "tag" line label check #2

expecting success of 3800.41 'hash-object & fsck unreachable: "tag" line label check #2': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: c39056bc6fbf6608f8331298eaf035bdb0b551d1: object could not be parsed: ./objects/c3/9056bc6fbf6608f8331298eaf035bdb0b551d1
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 41 - hash-object & fsck unreachable: "tag" line label check #2

expecting success of 3800.42 'update-ref & fsck reachable: "tag" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
c39056bc6fbf6608f8331298eaf035bdb0b551d1
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object c39056bc6fbf6608f8331298eaf035bdb0b551d1
error: c39056bc6fbf6608f8331298eaf035bdb0b551d1: object could not be parsed: ./objects/c3/9056bc6fbf6608f8331298eaf035bdb0b551d1
error: refs/tags/bad_tag: invalid sha1 pointer c39056bc6fbf6608f8331298eaf035bdb0b551d1
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 42 - update-ref & fsck reachable: "tag" line label check #2

expecting success of 3800.43 'for-each-ref: "tag" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
c39056bc6fbf6608f8331298eaf035bdb0b551d1
fatal: parse_object_buffer failed on c39056bc6fbf6608f8331298eaf035bdb0b551d1 for refs/tags/bad_tag
ok 43 - for-each-ref: "tag" line label check #2

expecting success of 3800.44 'fast-export & fast-import: "tag" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
c39056bc6fbf6608f8331298eaf035bdb0b551d1
fatal: bad object refs/tags/bad_tag
fatal: bad object c39056bc6fbf6608f8331298eaf035bdb0b551d1
ok 44 - fast-export & fast-import: "tag" line label check #2

expecting success of 3800.45 'fail with [--[no-]strict]: "type" line type-name length check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 45 - fail with [--[no-]strict]: "type" line type-name length check

expecting success of 3800.46 'setup: "type" line type-name length check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 46 - setup: "type" line type-name length check

expecting success of 3800.47 'hash-object & fsck unreachable: "type" line type-name length check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: c03294b01e3733b92662e0a182bacdaa09e6cd45: object could not be parsed: ./objects/c0/3294b01e3733b92662e0a182bacdaa09e6cd45
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 47 - hash-object & fsck unreachable: "type" line type-name length check

expecting success of 3800.48 'update-ref & fsck reachable: "type" line type-name length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
c03294b01e3733b92662e0a182bacdaa09e6cd45
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object c03294b01e3733b92662e0a182bacdaa09e6cd45
error: c03294b01e3733b92662e0a182bacdaa09e6cd45: object could not be parsed: ./objects/c0/3294b01e3733b92662e0a182bacdaa09e6cd45
error: refs/tags/bad_tag: invalid sha1 pointer c03294b01e3733b92662e0a182bacdaa09e6cd45
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 48 - update-ref & fsck reachable: "type" line type-name length check

expecting success of 3800.49 'for-each-ref: "type" line type-name length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
c03294b01e3733b92662e0a182bacdaa09e6cd45
fatal: parse_object_buffer failed on c03294b01e3733b92662e0a182bacdaa09e6cd45 for refs/tags/bad_tag
ok 49 - for-each-ref: "type" line type-name length check

expecting success of 3800.50 'fast-export & fast-import: "type" line type-name length check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
c03294b01e3733b92662e0a182bacdaa09e6cd45
fatal: bad object refs/tags/bad_tag
fatal: bad object c03294b01e3733b92662e0a182bacdaa09e6cd45
ok 50 - fast-export & fast-import: "type" line type-name length check

expecting success of 3800.51 'fail with [--[no-]strict]: verify object (hash/type) check -- correct type, nonexisting object': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 51 - fail with [--[no-]strict]: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.52 'setup: verify object (hash/type) check -- correct type, nonexisting object': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 52 - setup: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.53 'hash-object & fsck unreachable: verify object (hash/type) check -- correct type, nonexisting object': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 4e3fe4d9567cd5a844c5587aa99cf1b302e7487f
ok 53 - hash-object & fsck unreachable: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.54 'update-ref & fsck reachable: verify object (hash/type) check -- correct type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
4e3fe4d9567cd5a844c5587aa99cf1b302e7487f
notice: HEAD points to an unborn branch (master)
broken link from     tag 4e3fe4d9567cd5a844c5587aa99cf1b302e7487f
              to     tag deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
missing tag deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
ok 54 - update-ref & fsck reachable: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.55 'for-each-ref: verify object (hash/type) check -- correct type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
4e3fe4d9567cd5a844c5587aa99cf1b302e7487f
fatal: missing object deadbeefdeadbeefdeadbeefdeadbeefdeadbeef for refs/tags/bad_tag
ok 55 - for-each-ref: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.56 'fast-export & fast-import: verify object (hash/type) check -- correct type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
4e3fe4d9567cd5a844c5587aa99cf1b302e7487f
fatal: Tag refs/tags/bad_tag points nowhere?
fatal: bad object deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
ok 56 - fast-export & fast-import: verify object (hash/type) check -- correct type, nonexisting object

expecting success of 3800.57 'fail with [--[no-]strict]: verify object (hash/type) check -- made-up type, valid object': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 57 - fail with [--[no-]strict]: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.58 'setup: verify object (hash/type) check -- made-up type, valid object': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 58 - setup: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.59 'hash-object & fsck unreachable: verify object (hash/type) check -- made-up type, valid object': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0: object could not be parsed: ./objects/52/b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 59 - hash-object & fsck unreachable: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.60 'update-ref & fsck reachable: verify object (hash/type) check -- made-up type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0: object could not be parsed: ./objects/52/b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: refs/tags/bad_tag: invalid sha1 pointer 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 60 - update-ref & fsck reachable: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.61 'for-each-ref: verify object (hash/type) check -- made-up type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
fatal: parse_object_buffer failed on 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0 for refs/tags/bad_tag
ok 61 - for-each-ref: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.62 'fast-export & fast-import: verify object (hash/type) check -- made-up type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
fatal: bad object refs/tags/bad_tag
error: unknown tag type 'tagggg' in 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
fatal: bad object 52b3b27f1ab531cc409f48a025c37dbc1f4f6ac0
ok 62 - fast-export & fast-import: verify object (hash/type) check -- made-up type, valid object

expecting success of 3800.63 'fail with [--[no-]strict]: verify object (hash/type) check -- made-up type, nonexisting object': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 63 - fail with [--[no-]strict]: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.64 'setup: verify object (hash/type) check -- made-up type, nonexisting object': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 64 - setup: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.65 'hash-object & fsck unreachable: verify object (hash/type) check -- made-up type, nonexisting object': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
error: 873c7147ca509be00715bfd9f0901c56090b241a: object could not be parsed: ./objects/87/3c7147ca509be00715bfd9f0901c56090b241a
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 65 - hash-object & fsck unreachable: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.66 'update-ref & fsck reachable: verify object (hash/type) check -- made-up type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
873c7147ca509be00715bfd9f0901c56090b241a
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
fatal: update_ref failed for ref 'refs/tags/bad_tag': cannot update ref 'refs/tags/bad_tag': trying to write ref 'refs/tags/bad_tag' with nonexistent object 873c7147ca509be00715bfd9f0901c56090b241a
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
error: 873c7147ca509be00715bfd9f0901c56090b241a: object could not be parsed: ./objects/87/3c7147ca509be00715bfd9f0901c56090b241a
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
error: refs/tags/bad_tag: invalid sha1 pointer 873c7147ca509be00715bfd9f0901c56090b241a
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 66 - update-ref & fsck reachable: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.67 'for-each-ref: verify object (hash/type) check -- made-up type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
873c7147ca509be00715bfd9f0901c56090b241a
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
fatal: parse_object_buffer failed on 873c7147ca509be00715bfd9f0901c56090b241a for refs/tags/bad_tag
ok 67 - for-each-ref: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.68 'fast-export & fast-import: verify object (hash/type) check -- made-up type, nonexisting object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
873c7147ca509be00715bfd9f0901c56090b241a
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
fatal: bad object refs/tags/bad_tag
error: unknown tag type 'tagggg' in 873c7147ca509be00715bfd9f0901c56090b241a
fatal: bad object 873c7147ca509be00715bfd9f0901c56090b241a
ok 68 - fast-export & fast-import: verify object (hash/type) check -- made-up type, nonexisting object

expecting success of 3800.69 'fail with [--[no-]strict]: verify object (hash/type) check -- mismatched type, valid object': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 69 - fail with [--[no-]strict]: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.70 'setup: verify object (hash/type) check -- mismatched type, valid object': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 70 - setup: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.71 'hash-object & fsck unreachable: verify object (hash/type) check -- mismatched type, valid object': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 8eb32de5253d54ed4e9a069073f158738f84be64
ok 71 - hash-object & fsck unreachable: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.72 'update-ref & fsck reachable: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
8eb32de5253d54ed4e9a069073f158738f84be64
notice: HEAD points to an unborn branch (master)
broken link from     tag 8eb32de5253d54ed4e9a069073f158738f84be64
              to    tree d9df4505cb3522088b9e29d6051ac16f1564154a
missing tree d9df4505cb3522088b9e29d6051ac16f1564154a
ok 72 - update-ref & fsck reachable: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.73 'for-each-ref: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
8eb32de5253d54ed4e9a069073f158738f84be64
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 73 - for-each-ref: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.74 'fast-export & fast-import: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
8eb32de5253d54ed4e9a069073f158738f84be64
warning: Tag points to object of unexpected type tree, skipping.
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 74 - fast-export & fast-import: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.75 'setup replacement of commit -> commit and tree -> blob': 
	git replace $head_parent $head &&
	git replace -f $tree $blob

ok 75 - setup replacement of commit -> commit and tree -> blob

expecting success of 3800.76 'tag to a commit replaced by another commit': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
ok 76 - tag to a commit replaced by another commit

expecting success of 3800.77 'fail with [--[no-]strict]: verify object (hash/type) check -- mismatched type, valid object': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 77 - fail with [--[no-]strict]: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.78 'setup: verify object (hash/type) check -- mismatched type, valid object': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 78 - setup: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.79 'hash-object & fsck unreachable: verify object (hash/type) check -- mismatched type, valid object': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 9c31a0046f5d3b4164baf115cc0b69635524bb04
ok 79 - hash-object & fsck unreachable: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.80 'update-ref & fsck reachable: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
9c31a0046f5d3b4164baf115cc0b69635524bb04
notice: HEAD points to an unborn branch (master)
broken link from     tag 9c31a0046f5d3b4164baf115cc0b69635524bb04
              to    tree 0fbca9850869684085d654f9e1380c9780802570
missing tree 0fbca9850869684085d654f9e1380c9780802570
ok 80 - update-ref & fsck reachable: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.81 'for-each-ref: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
9c31a0046f5d3b4164baf115cc0b69635524bb04
fatal: missing object 0fbca9850869684085d654f9e1380c9780802570 for refs/tags/bad_tag
ok 81 - for-each-ref: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.82 'fast-export & fast-import: verify object (hash/type) check -- mismatched type, valid object': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
9c31a0046f5d3b4164baf115cc0b69635524bb04
warning: Tag points to object of unexpected type tree, skipping.
fatal: bad object 0fbca9850869684085d654f9e1380c9780802570
fatal: bad object 0fbca9850869684085d654f9e1380c9780802570
ok 82 - fast-export & fast-import: verify object (hash/type) check -- mismatched type, valid object

expecting success of 3800.83 'fail with [--[no-]strict]: verify tag-name check': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
warning: tag input does not pass fsck: badTagName: invalid 'tag' name: my	tag
3a917b365efe8e0762ae4448ca795035d60fedbe
ok 83 - fail with [--[no-]strict]: verify tag-name check

expecting success of 3800.84 'setup: verify tag-name check': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 84 - setup: verify tag-name check

expecting success of 3800.85 'hash-object & fsck unreachable: verify tag-name check': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
ok 85 - hash-object & fsck unreachable: verify tag-name check

expecting success of 3800.86 'update-ref & fsck reachable: verify tag-name check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
3a917b365efe8e0762ae4448ca795035d60fedbe
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
notice: HEAD points to an unborn branch (master)
broken link from     tag 3a917b365efe8e0762ae4448ca795035d60fedbe
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 86 - update-ref & fsck reachable: verify tag-name check

expecting success of 3800.87 'for-each-ref: verify tag-name check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
3a917b365efe8e0762ae4448ca795035d60fedbe
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 87 - for-each-ref: verify tag-name check

expecting success of 3800.88 'fast-export & fast-import: verify tag-name check': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
3a917b365efe8e0762ae4448ca795035d60fedbe
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 88 - fast-export & fast-import: verify tag-name check

expecting success of 3800.89 'fail with [--[no-]strict]: "tagger" line label check #1': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
warning: tag input does not pass fsck: missingTaggerEntry: invalid format - expected 'tagger' line
c4a19535d7c87120cb5b48094d2cd8e9b0918a03
ok 89 - fail with [--[no-]strict]: "tagger" line label check #1

expecting success of 3800.90 'setup: "tagger" line label check #1': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 90 - setup: "tagger" line label check #1

expecting success of 3800.91 'hash-object & fsck unreachable: "tagger" line label check #1': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
ok 91 - hash-object & fsck unreachable: "tagger" line label check #1

expecting success of 3800.92 'update-ref & fsck reachable: "tagger" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
c4a19535d7c87120cb5b48094d2cd8e9b0918a03
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
notice: HEAD points to an unborn branch (master)
broken link from     tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 92 - update-ref & fsck reachable: "tagger" line label check #1

expecting success of 3800.93 'for-each-ref: "tagger" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
c4a19535d7c87120cb5b48094d2cd8e9b0918a03
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 93 - for-each-ref: "tagger" line label check #1

expecting success of 3800.94 'fast-export & fast-import: "tagger" line label check #1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
c4a19535d7c87120cb5b48094d2cd8e9b0918a03
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 94 - fast-export & fast-import: "tagger" line label check #1

expecting success of 3800.95 'fail with [--[no-]strict]: "tagger" line label check #2': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
warning: tag input does not pass fsck: missingTaggerEntry: invalid format - expected 'tagger' line
warning: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
ok 95 - fail with [--[no-]strict]: "tagger" line label check #2

expecting success of 3800.96 'setup: "tagger" line label check #2': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 96 - setup: "tagger" line label check #2

expecting success of 3800.97 'hash-object & fsck unreachable: "tagger" line label check #2': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
ok 97 - hash-object & fsck unreachable: "tagger" line label check #2

expecting success of 3800.98 'update-ref & fsck reachable: "tagger" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
notice: HEAD points to an unborn branch (master)
broken link from     tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 98 - update-ref & fsck reachable: "tagger" line label check #2

expecting success of 3800.99 'for-each-ref: "tagger" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 99 - for-each-ref: "tagger" line label check #2

expecting success of 3800.100 'fast-export & fast-import: "tagger" line label check #2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 100 - fast-export & fast-import: "tagger" line label check #2

expecting success of 3800.101 'allow missing tag author name': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
ok 101 - allow missing tag author name

expecting success of 3800.102 'fail with [--[no-]strict]: disallow malformed tagger': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
error: tag input does not pass fsck: badEmail: invalid author/committer line - bad email
warning: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
10a38b63369e5f6b0d453612536d13ca970fdf12
ok 102 - fail with [--[no-]strict]: disallow malformed tagger

expecting success of 3800.103 'setup: disallow malformed tagger': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 103 - setup: disallow malformed tagger

expecting success of 3800.104 'hash-object & fsck unreachable: disallow malformed tagger': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
ok 104 - hash-object & fsck unreachable: disallow malformed tagger

expecting success of 3800.105 'update-ref & fsck reachable: disallow malformed tagger': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
10a38b63369e5f6b0d453612536d13ca970fdf12
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
notice: HEAD points to an unborn branch (master)
broken link from     tag 10a38b63369e5f6b0d453612536d13ca970fdf12
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 105 - update-ref & fsck reachable: disallow malformed tagger

expecting success of 3800.106 'for-each-ref: disallow malformed tagger': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
10a38b63369e5f6b0d453612536d13ca970fdf12
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 106 - for-each-ref: disallow malformed tagger

expecting success of 3800.107 'fast-export & fast-import: disallow malformed tagger': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
10a38b63369e5f6b0d453612536d13ca970fdf12
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 107 - fast-export & fast-import: disallow malformed tagger

expecting success of 3800.108 'allow empty tag email': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
ok 108 - allow empty tag email

expecting success of 3800.109 'allow spaces in tag email like fsck': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
ok 109 - allow spaces in tag email like fsck

expecting success of 3800.110 'fail with [--[no-]strict]: disallow missing tag timestamp': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 110 - fail with [--[no-]strict]: disallow missing tag timestamp

expecting success of 3800.111 'setup: disallow missing tag timestamp': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 111 - setup: disallow missing tag timestamp

expecting success of 3800.112 'hash-object & fsck unreachable: disallow missing tag timestamp': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag 86ec28e12f82414dedbbf24955ba3624796ce743: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 86ec28e12f82414dedbbf24955ba3624796ce743
ok 112 - hash-object & fsck unreachable: disallow missing tag timestamp

expecting success of 3800.113 'update-ref & fsck reachable: disallow missing tag timestamp': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
86ec28e12f82414dedbbf24955ba3624796ce743
error in tag 86ec28e12f82414dedbbf24955ba3624796ce743: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
broken link from     tag 86ec28e12f82414dedbbf24955ba3624796ce743
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 113 - update-ref & fsck reachable: disallow missing tag timestamp

expecting success of 3800.114 'for-each-ref: disallow missing tag timestamp': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
86ec28e12f82414dedbbf24955ba3624796ce743
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 114 - for-each-ref: disallow missing tag timestamp

expecting success of 3800.115 'fast-export & fast-import: disallow missing tag timestamp': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
86ec28e12f82414dedbbf24955ba3624796ce743
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 115 - fast-export & fast-import: disallow missing tag timestamp

expecting success of 3800.116 'fail with [--[no-]strict]: detect invalid tag timestamp1': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 116 - fail with [--[no-]strict]: detect invalid tag timestamp1

expecting success of 3800.117 'setup: detect invalid tag timestamp1': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 117 - setup: detect invalid tag timestamp1

expecting success of 3800.118 'hash-object & fsck unreachable: detect invalid tag timestamp1': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag a7154e3a1ebaee50a7858cfa890b4e328ba6eff1: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag a7154e3a1ebaee50a7858cfa890b4e328ba6eff1
ok 118 - hash-object & fsck unreachable: detect invalid tag timestamp1

expecting success of 3800.119 'update-ref & fsck reachable: detect invalid tag timestamp1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
a7154e3a1ebaee50a7858cfa890b4e328ba6eff1
error in tag a7154e3a1ebaee50a7858cfa890b4e328ba6eff1: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
broken link from     tag a7154e3a1ebaee50a7858cfa890b4e328ba6eff1
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 119 - update-ref & fsck reachable: detect invalid tag timestamp1

expecting success of 3800.120 'for-each-ref: detect invalid tag timestamp1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
a7154e3a1ebaee50a7858cfa890b4e328ba6eff1
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 120 - for-each-ref: detect invalid tag timestamp1

expecting success of 3800.121 'fast-export & fast-import: detect invalid tag timestamp1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
a7154e3a1ebaee50a7858cfa890b4e328ba6eff1
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 121 - fast-export & fast-import: detect invalid tag timestamp1

expecting success of 3800.122 'fail with [--[no-]strict]: detect invalid tag timestamp2': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 122 - fail with [--[no-]strict]: detect invalid tag timestamp2

expecting success of 3800.123 'setup: detect invalid tag timestamp2': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 123 - setup: detect invalid tag timestamp2

expecting success of 3800.124 'hash-object & fsck unreachable: detect invalid tag timestamp2': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag 1f6463b89bb8b45e3232dbac638692b2b5d5c962: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 1f6463b89bb8b45e3232dbac638692b2b5d5c962
ok 124 - hash-object & fsck unreachable: detect invalid tag timestamp2

expecting success of 3800.125 'update-ref & fsck reachable: detect invalid tag timestamp2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
1f6463b89bb8b45e3232dbac638692b2b5d5c962
error in tag 1f6463b89bb8b45e3232dbac638692b2b5d5c962: badDate: invalid author/committer line - bad date
notice: HEAD points to an unborn branch (master)
broken link from     tag 1f6463b89bb8b45e3232dbac638692b2b5d5c962
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 125 - update-ref & fsck reachable: detect invalid tag timestamp2

expecting success of 3800.126 'for-each-ref: detect invalid tag timestamp2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
1f6463b89bb8b45e3232dbac638692b2b5d5c962
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 126 - for-each-ref: detect invalid tag timestamp2

expecting success of 3800.127 'fast-export & fast-import: detect invalid tag timestamp2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
1f6463b89bb8b45e3232dbac638692b2b5d5c962
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 127 - fast-export & fast-import: detect invalid tag timestamp2

expecting success of 3800.128 'fail with [--[no-]strict]: detect invalid tag timezone1': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 128 - fail with [--[no-]strict]: detect invalid tag timezone1

expecting success of 3800.129 'setup: detect invalid tag timezone1': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 129 - setup: detect invalid tag timezone1

expecting success of 3800.130 'hash-object & fsck unreachable: detect invalid tag timezone1': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag 1062f3506ae6d34c78d90b80e45b2dc2d3ddff56: badTimezone: invalid author/committer line - bad time zone
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 1062f3506ae6d34c78d90b80e45b2dc2d3ddff56
ok 130 - hash-object & fsck unreachable: detect invalid tag timezone1

expecting success of 3800.131 'update-ref & fsck reachable: detect invalid tag timezone1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
1062f3506ae6d34c78d90b80e45b2dc2d3ddff56
error in tag 1062f3506ae6d34c78d90b80e45b2dc2d3ddff56: badTimezone: invalid author/committer line - bad time zone
notice: HEAD points to an unborn branch (master)
broken link from     tag 1062f3506ae6d34c78d90b80e45b2dc2d3ddff56
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 131 - update-ref & fsck reachable: detect invalid tag timezone1

expecting success of 3800.132 'for-each-ref: detect invalid tag timezone1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
1062f3506ae6d34c78d90b80e45b2dc2d3ddff56
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 132 - for-each-ref: detect invalid tag timezone1

expecting success of 3800.133 'fast-export & fast-import: detect invalid tag timezone1': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
1062f3506ae6d34c78d90b80e45b2dc2d3ddff56
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 133 - fast-export & fast-import: detect invalid tag timezone1

expecting success of 3800.134 'fail with [--[no-]strict]: detect invalid tag timezone2': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
ok 134 - fail with [--[no-]strict]: detect invalid tag timezone2

expecting success of 3800.135 'setup: detect invalid tag timezone2': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 135 - setup: detect invalid tag timezone2

expecting success of 3800.136 'hash-object & fsck unreachable: detect invalid tag timezone2': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
error in tag 30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b: badTimezone: invalid author/committer line - bad time zone
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b
ok 136 - hash-object & fsck unreachable: detect invalid tag timezone2

expecting success of 3800.137 'update-ref & fsck reachable: detect invalid tag timezone2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b
error in tag 30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b: badTimezone: invalid author/committer line - bad time zone
notice: HEAD points to an unborn branch (master)
broken link from     tag 30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 137 - update-ref & fsck reachable: detect invalid tag timezone2

expecting success of 3800.138 'for-each-ref: detect invalid tag timezone2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 138 - for-each-ref: detect invalid tag timezone2

expecting success of 3800.139 'fast-export & fast-import: detect invalid tag timezone2': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
30b2f9b749c26e3847c032f1f8dd41e8d8e29d5b
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 139 - fast-export & fast-import: detect invalid tag timezone2

expecting success of 3800.140 'allow invalid tag timezone': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
ok 140 - allow invalid tag timezone

expecting success of 3800.141 'fail with [--[no-]strict]: detect invalid header entry': 
		test_must_fail git mktag <tag.sig 2>err &&
		if test -z "$no_strict"
		then
			test_must_fail git mktag <tag.sig 2>err2 &&
			test_cmp err err2
		else
			git mktag --no-strict <tag.sig
		fi
	
warning: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
27668aaff16c8e0303faa67823e07d9c4e709bd8
ok 141 - fail with [--[no-]strict]: detect invalid header entry

expecting success of 3800.142 'setup: detect invalid header entry': 
		tag_ref=refs/tags/bad_tag &&

		# Reset any leftover state from the last $subject
		rm -rf bad-tag &&

		git init --bare bad-tag &&
		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3800-mktag/bad-tag/
ok 142 - setup: detect invalid header entry

expecting success of 3800.143 'hash-object & fsck unreachable: detect invalid header entry': 
		if test -n "$fsck_obj_ok"
		then
			git -C bad-tag fsck
		else
			test_must_fail git -C bad-tag fsck
		fi
	
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
ok 143 - hash-object & fsck unreachable: detect invalid header entry

expecting success of 3800.144 'update-ref & fsck reachable: detect invalid header entry': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		# The update-ref of the bad content will fail, do it
		# anyway to see if it segfaults
		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&

		# Manually create the broken, we cannot do it with
		# update-ref
		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		# Unlike fsck-ing unreachable content above, this
		# will always fail.
		test_must_fail git -C bad-tag fsck
	
27668aaff16c8e0303faa67823e07d9c4e709bd8
notice: HEAD points to an unborn branch (master)
broken link from     tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
              to  commit d9df4505cb3522088b9e29d6051ac16f1564154a
missing commit d9df4505cb3522088b9e29d6051ac16f1564154a
ok 144 - update-ref & fsck reachable: detect invalid header entry

expecting success of 3800.145 'for-each-ref: detect invalid header entry': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test-tool -C bad-tag ref-store main delete-refs 0 msg "$tag_ref" &&
		test-tool -C bad-tag ref-store main update-ref msg "$tag_ref" $bad_tag $ZERO_OID REF_SKIP_OID_VERIFICATION &&

		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
		git -C bad-tag for-each-ref "$tag_ref" >actual &&
		test_cmp expected actual &&

		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
	
27668aaff16c8e0303faa67823e07d9c4e709bd8
fatal: missing object d9df4505cb3522088b9e29d6051ac16f1564154a for refs/tags/bad_tag
ok 145 - for-each-ref: detect invalid header entry

expecting success of 3800.146 'fast-export & fast-import: detect invalid header entry': 
		# Make sure the earlier test created it for us
		git rev-parse "$bad_tag" &&

		test_must_fail git -C bad-tag fast-export --all &&
		test_must_fail git -C bad-tag fast-export "$bad_tag"
	
27668aaff16c8e0303faa67823e07d9c4e709bd8
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
fatal: bad object d9df4505cb3522088b9e29d6051ac16f1564154a
ok 146 - fast-export & fast-import: detect invalid header entry

expecting success of 3800.147 'invalid header entry config & fsck': 
	test_must_fail git mktag <tag.sig &&
	git mktag --no-strict <tag.sig &&

	test_must_fail git -c fsck.extraHeaderEntry=error mktag <tag.sig &&
	test_must_fail git -c fsck.extraHeaderEntry=error mktag --no-strict <tag.sig &&

	test_must_fail git -c fsck.extraHeaderEntry=warn mktag <tag.sig &&
	git -c fsck.extraHeaderEntry=warn mktag --no-strict <tag.sig &&

	git -c fsck.extraHeaderEntry=ignore mktag <tag.sig &&
	git -c fsck.extraHeaderEntry=ignore mktag --no-strict <tag.sig &&

	git fsck &&
	git -c fsck.extraHeaderEntry=warn fsck 2>err &&
	grep "warning .*extraHeaderEntry:" err &&
	test_must_fail git -c fsck.extraHeaderEntry=error 2>err fsck &&
	grep "error .* extraHeaderEntry:" err

error: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
fatal: tag on stdin did not pass our strict fsck check
warning: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
27668aaff16c8e0303faa67823e07d9c4e709bd8
error: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
fatal: tag on stdin did not pass our strict fsck check
error: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
fatal: tag on stdin did not pass our strict fsck check
error: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
fatal: tag on stdin did not pass our strict fsck check
warning: tag input does not pass fsck: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
27668aaff16c8e0303faa67823e07d9c4e709bd8
27668aaff16c8e0303faa67823e07d9c4e709bd8
27668aaff16c8e0303faa67823e07d9c4e709bd8
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
warning in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
warning in tag 27668aaff16c8e0303faa67823e07d9c4e709bd8: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
error in tag 27668aaff16c8e0303faa67823e07d9c4e709bd8: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
error in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: extraHeaderEntry: invalid format - extra header(s) after 'tagger'
ok 147 - invalid header entry config & fsck

expecting success of 3800.148 'allow extra newlines at start of body': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
ok 148 - allow extra newlines at start of body

expecting success of 3800.149 'allow a blank line before an empty body (1)': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag 22d42c00ce86208a0273f16e2d5808d17b3792f6
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
ok 149 - allow a blank line before an empty body (1)

expecting success of 3800.150 'allow no blank line before an empty body (2)': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag 22d42c00ce86208a0273f16e2d5808d17b3792f6
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag 22d42c00ce86208a0273f16e2d5808d17b3792f6
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
ok 150 - allow no blank line before an empty body (2)

expecting success of 3800.151 'create valid tag object': 
		git hash-object -t tag -w --stdin <tag.sig >expected &&
		git fsck --strict &&

		git mktag <tag.sig >hash &&
		test_cmp expected hash &&
		test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
		git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
		git fsck --strict
	
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag 03e2668a257938d0a47497d9762e45da6c84c9f8
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag 22d42c00ce86208a0273f16e2d5808d17b3792f6
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
error in tag 10a38b63369e5f6b0d453612536d13ca970fdf12: badEmail: invalid author/committer line - bad email
warning in tag 3a917b365efe8e0762ae4448ca795035d60fedbe: badTagName: invalid 'tag' name: my	tag
warning in tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03: missingTaggerEntry: invalid format - expected 'tagger' line
dangling tag bfa074c29cdc9cc74319502c59a90da165e7113f
dangling tag 0182c9c0d953da2345b39546afbd57e917ee9f4c
dangling tag c4a19535d7c87120cb5b48094d2cd8e9b0918a03
dangling tag 10a38b63369e5f6b0d453612536d13ca970fdf12
dangling tag 93cc22724321522cdcfeced9652268b0eee0ccca
dangling tag 615b33f9ac2defb77a8cc50f373183ebe0a45e4a
dangling tag 22d42c00ce86208a0273f16e2d5808d17b3792f6
dangling tag a10af691a2a6ef23a4f258d9bf97b1a7fc46b0ba
dangling tag 27668aaff16c8e0303faa67823e07d9c4e709bd8
dangling tag 3a917b365efe8e0762ae4448ca795035d60fedbe
dangling tag 7e37723df47e24f0dfc27cec7127fa011bb1843d
dangling tag 3f434bd651bfb4745f87bb9aa462415fddad0546
ok 151 - create valid tag object

# passed all 151 test(s)
1..151
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3901-i18n-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3901-i18n-patch/.git/
expecting success of 3901.1 'setup': 
	git config i18n.commitencoding UTF-8 &&

	# use UTF-8 in author and committer name to match the
	# i18n.commitencoding settings
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	test_tick &&
	echo "$GIT_AUTHOR_NAME" >mine &&
	git add mine &&
	git commit -s -m "Initial commit" &&

	test_tick &&
	echo Hello world >mine &&
	git add mine &&
	git commit -s -m "Second on main" &&

	# the first commit on the side branch is UTF-8
	test_tick &&
	git checkout -b side main^ &&
	echo Another file >yours &&
	git add yours &&
	git commit -s -m "Second on side" &&

	if test_have_prereq !MINGW
	then
		# the second one on the side branch is ISO-8859-1
		git config i18n.commitencoding ISO8859-1 &&
		# use author and committer name in ISO-8859-1 to match it.
		. "$TEST_DIRECTORY"/t3901/8859-1.txt
	fi &&
	test_tick &&
	echo Yet another >theirs &&
	git add theirs &&
	git commit -s -m "Third on side" &&

	# Back to default
	git config i18n.commitencoding UTF-8

[main (root-commit) a751cb4] Initial commit
 Author: Áéí óú <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 mine
[main 1abbfe5] Second on main
 Author: Áéí óú <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
[side 907dc52] Second on side
 Author: Áéí óú <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 yours
[side 717f610] Third on side
 1 file changed, 1 insertion(+)
 create mode 100644 theirs
ok 1 - setup

expecting success of 3901.2 'format-patch output (ISO-8859-1)': 
	git config i18n.logoutputencoding ISO8859-1 &&

	git format-patch --stdout main..HEAD^ >out-l1 &&
	git format-patch --stdout HEAD^ >out-l2 &&
	grep "^Content-Type: text/plain; charset=ISO8859-1" out-l1 &&
	grep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l1 &&
	grep "^Content-Type: text/plain; charset=ISO8859-1" out-l2 &&
	grep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l2

Content-Type: text/plain; charset=ISO8859-1
From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?= <author@example.com>
Content-Type: text/plain; charset=ISO8859-1
From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?= <author@example.com>
ok 2 - format-patch output (ISO-8859-1)

expecting success of 3901.3 'format-patch output (UTF-8)': 
	git config i18n.logoutputencoding UTF-8 &&

	git format-patch --stdout main..HEAD^ >out-u1 &&
	git format-patch --stdout HEAD^ >out-u2 &&
	grep "^Content-Type: text/plain; charset=UTF-8" out-u1 &&
	grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u1 &&
	grep "^Content-Type: text/plain; charset=UTF-8" out-u2 &&
	grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u2

Content-Type: text/plain; charset=UTF-8
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
Content-Type: text/plain; charset=UTF-8
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 3 - format-patch output (UTF-8)

expecting success of 3901.4 'rebase (U/U)': 
	# We want the result of rebase in UTF-8
	git config i18n.commitencoding UTF-8 &&

	# The test is about logoutputencoding not affecting the
	# final outcome -- it is used internally to generate the
	# patch and the log.

	git config i18n.logoutputencoding UTF-8 &&

	# The result will be committed by GIT_COMMITTER_NAME --
	# we want UTF-8 encoded name.
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&
	git checkout -b test &&
	git rebase main &&

	check_encoding 2

Switched to a new branch 'test'
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 4 - rebase (U/U)

expecting success of 3901.5 'rebase (U/L)': 
	git config i18n.commitencoding UTF-8 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard side &&
	git rebase main &&

	check_encoding 2

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 5 - rebase (U/L)

expecting success of 3901.6 'rebase (L/L)': 
	# In this test we want ISO-8859-1 encoded commits as the result
	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard side &&
	git rebase main &&

	check_encoding 2 8859

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 6 - rebase (L/L)

expecting success of 3901.7 'rebase (L/U)': 
	# This is pathological -- use UTF-8 as intermediate form
	# to get ISO-8859-1 results.
	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard side &&
	git rebase main &&

	check_encoding 2 8859

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 7 - rebase (L/U)

expecting success of 3901.8 'cherry-pick(U/U)': 
	# Both the commitencoding and logoutputencoding is set to UTF-8.

	git config i18n.commitencoding UTF-8 &&
	git config i18n.logoutputencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard main &&
	git cherry-pick side^ &&
	git cherry-pick side &&
	git revert HEAD &&

	check_encoding 3

HEAD is now at 1abbfe5 Second on main
[test 226e420] Second on side
 Author: Áéí óú <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 yours
[test 0c82aa3] Third on side
 Author: Áéí óú <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 theirs
[test 267f566] Revert "Third on side"
 Author: Áéí óú <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 theirs
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 8 - cherry-pick(U/U)

expecting success of 3901.9 'cherry-pick(L/L)': 
	# Both the commitencoding and logoutputencoding is set to ISO-8859-1

	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard main &&
	git cherry-pick side^ &&
	git cherry-pick side &&
	git revert HEAD &&

	check_encoding 3 8859

HEAD is now at 1abbfe5 Second on main
[test e1b2855] Second on side
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 yours
[test 37f31da] Third on side
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 theirs
[test 2f88e21] Revert "Third on side"
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 theirs
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 9 - cherry-pick(L/L)

expecting success of 3901.10 'cherry-pick(U/L)': 
	# Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1

	git config i18n.commitencoding UTF-8 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard main &&
	git cherry-pick side^ &&
	git cherry-pick side &&
	git revert HEAD &&

	check_encoding 3

HEAD is now at 1abbfe5 Second on main
[test 226e420] Second on side
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 yours
[test 0c82aa3] Third on side
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 theirs
[test 267f566] Revert "Third on side"
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 theirs
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 10 - cherry-pick(U/L)

expecting success of 3901.11 'cherry-pick(L/U)': 
	# Again, the commitencoding is set to ISO-8859-1 but
	# logoutputencoding is set to UTF-8.

	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard main &&
	git cherry-pick side^ &&
	git cherry-pick side &&
	git revert HEAD &&

	check_encoding 3 8859

HEAD is now at 1abbfe5 Second on main
[test e1b2855] Second on side
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 yours
[test 37f31da] Third on side
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 theirs
[test 2f88e21] Revert "Third on side"
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 theirs
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 11 - cherry-pick(L/U)

expecting success of 3901.12 'rebase --merge (U/U)': 
	git config i18n.commitencoding UTF-8 &&
	git config i18n.logoutputencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard side &&
	git rebase --merge main &&

	check_encoding 2

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 12 - rebase --merge (U/U)

expecting success of 3901.13 'rebase --merge (U/L)': 
	git config i18n.commitencoding UTF-8 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard side &&
	git rebase --merge main &&

	check_encoding 2

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 13 - rebase --merge (U/L)

expecting success of 3901.14 'rebase --merge (L/L)': 
	# In this test we want ISO-8859-1 encoded commits as the result
	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard side &&
	git rebase --merge main &&

	check_encoding 2 8859

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 14 - rebase --merge (L/L)

expecting success of 3901.15 'rebase --merge (L/U)': 
	# This is pathological -- use UTF-8 as intermediate form
	# to get ISO-8859-1 results.
	git config i18n.commitencoding ISO8859-1 &&
	git config i18n.logoutputencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard side &&
	git rebase --merge main &&

	check_encoding 2 8859

HEAD is now at 717f610 Third on side
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/test.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 15 - rebase --merge (L/U)

expecting success of 3901.16 'am (U/U)': 
	# Apply UTF-8 patches with UTF-8 commitencoding
	git config i18n.commitencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard main &&
	git am out-u1 out-u2 &&

	check_encoding 2

HEAD is now at 1abbfe5 Second on main
Applying: Second on side
Applying: Third on side
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 16 - am (U/U)

expecting success of 3901.17 'am (L/L)': 
	# Apply ISO-8859-1 patches with ISO-8859-1 commitencoding
	git config i18n.commitencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard main &&
	git am out-l1 out-l2 &&

	check_encoding 2 8859

HEAD is now at 1abbfe5 Second on main
Applying: Second on side
Applying: Third on side
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 17 - am (L/L)

expecting success of 3901.18 'am (U/L)': 
	# Apply ISO-8859-1 patches with UTF-8 commitencoding
	git config i18n.commitencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&
	git reset --hard main &&

	# am specifies --utf8 by default.
	git am out-l1 out-l2 &&

	check_encoding 2

HEAD is now at 1abbfe5 Second on main
Applying: Second on side
Applying: Third on side
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 18 - am (U/L)

expecting success of 3901.19 'am --no-utf8 (U/L)': 
	# Apply ISO-8859-1 patches with UTF-8 commitencoding
	git config i18n.commitencoding UTF-8 &&
	. "$TEST_DIRECTORY"/t3901/utf8.txt &&

	git reset --hard main &&
	git am --no-utf8 out-l1 out-l2 2>err &&

	# commit-tree will warn that the commit message does not contain valid UTF-8
	# as mailinfo did not convert it
	test_i18ngrep "did not conform" err &&

	check_encoding 2

HEAD is now at 1abbfe5 Second on main
Applying: Second on side
Applying: Third on side
Warning: commit message did not conform to UTF-8.
Warning: commit message did not conform to UTF-8.
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
ok 19 - am --no-utf8 (U/L)

expecting success of 3901.20 'am (L/U)': 
	# Apply UTF-8 patches with ISO-8859-1 commitencoding
	git config i18n.commitencoding ISO8859-1 &&
	. "$TEST_DIRECTORY"/t3901/8859-1.txt &&

	git reset --hard main &&
	# mailinfo will re-code the commit message to the charset specified by
	# i18n.commitencoding
	git am out-u1 out-u2 &&

	check_encoding 2 8859

HEAD is now at 1abbfe5 Second on main
Applying: Second on side
Applying: Third on side
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?= <author@example.com>
encoding ISO8859-1
ok 20 - am (L/U)

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3904-stash-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3904-stash-patch/.git/
expecting success of 3904.1 'setup': 
	mkdir dir &&
	echo parent > dir/foo &&
	echo dummy > bar &&
	echo committed > HEAD &&
	git add bar dir/foo HEAD &&
	git commit -m initial &&
	test_tick &&
	test_commit second dir/foo head &&
	echo index > dir/foo &&
	git add dir/foo &&
	set_and_save_state bar bar_work bar_index &&
	save_head

[master (root-commit) 797253d] initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 HEAD
 create mode 100644 bar
 create mode 100644 dir/foo
[master 1f3a67c] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 3904.2 'saying "n" does nothing': 
	set_state HEAD HEADfile_work HEADfile_index &&
	set_state dir/foo work index &&
	test_write_lines n n n | test_must_fail git stash save -p &&
	verify_state HEAD HEADfile_work HEADfile_index &&
	verify_saved_state bar &&
	verify_state dir/foo work index

diff --git a/HEAD b/HEAD
index d0fe822..e74fca5 100644
--- a/HEAD
+++ b/HEAD
@@ -1 +1 @@
-committed
+HEADfile_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
No changes selected
ok 2 - saying "n" does nothing

expecting success of 3904.3 'git stash -p': 
	test_write_lines y n y | git stash save -p &&
	verify_state HEAD committed HEADfile_index &&
	verify_saved_state bar &&
	verify_state dir/foo head index &&
	git reset --hard &&
	git stash apply &&
	verify_state HEAD HEADfile_work committed &&
	verify_state bar dummy dummy &&
	verify_state dir/foo work head

diff --git a/HEAD b/HEAD
index d0fe822..e74fca5 100644
--- a/HEAD
+++ b/HEAD
@@ -1 +1 @@
-committed
+HEADfile_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
Saved working directory and index state WIP on master: 1f3a67c second
HEAD is now at 1f3a67c second
Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   HEAD
	modified:   dir/foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	_head
	_index_bar
	_worktree_bar

no changes added to commit (use "git add" and/or "git commit -a")
ok 3 - git stash -p

expecting success of 3904.4 'git stash -p --no-keep-index': 
	set_state HEAD HEADfile_work HEADfile_index &&
	set_state bar bar_work bar_index &&
	set_state dir/foo work index &&
	test_write_lines y n y | git stash save -p --no-keep-index &&
	verify_state HEAD committed committed &&
	verify_state bar bar_work dummy &&
	verify_state dir/foo head head &&
	git reset --hard &&
	git stash apply --index &&
	verify_state HEAD HEADfile_work HEADfile_index &&
	verify_state bar dummy bar_index &&
	verify_state dir/foo work index

diff --git a/HEAD b/HEAD
index d0fe822..e74fca5 100644
--- a/HEAD
+++ b/HEAD
@@ -1 +1 @@
-committed
+HEADfile_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
Saved working directory and index state WIP on master: 1f3a67c second
HEAD is now at 1f3a67c second
Merging Version stash was based on with Stashed changes
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   HEAD
	modified:   bar
	modified:   dir/foo

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   HEAD
	modified:   bar
	modified:   dir/foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	_head
	_index_bar
	_worktree_bar

ok 4 - git stash -p --no-keep-index

expecting success of 3904.5 'git stash --no-keep-index -p': 
	set_state HEAD HEADfile_work HEADfile_index &&
	set_state bar bar_work bar_index &&
	set_state dir/foo work index &&
	test_write_lines y n y | git stash save --no-keep-index -p &&
	verify_state HEAD committed committed &&
	verify_state dir/foo head head &&
	verify_state bar bar_work dummy &&
	git reset --hard &&
	git stash apply --index &&
	verify_state HEAD HEADfile_work HEADfile_index &&
	verify_state bar dummy bar_index &&
	verify_state dir/foo work index

diff --git a/HEAD b/HEAD
index d0fe822..e74fca5 100644
--- a/HEAD
+++ b/HEAD
@@ -1 +1 @@
-committed
+HEADfile_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/bar b/bar
index 421376d..8c999e6 100644
--- a/bar
+++ b/bar
@@ -1 +1 @@
-dummy
+bar_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
Saved working directory and index state WIP on master: 1f3a67c second
HEAD is now at 1f3a67c second
Merging Version stash was based on with Stashed changes
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   HEAD
	modified:   bar
	modified:   dir/foo

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   HEAD
	modified:   bar
	modified:   dir/foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	_head
	_index_bar
	_worktree_bar

ok 5 - git stash --no-keep-index -p

expecting success of 3904.6 'stash -p --no-keep-index -- <pathspec> does not unstage other files': 
	set_state HEAD HEADfile_work HEADfile_index &&
	set_state dir/foo work index &&
	echo y | git stash push -p --no-keep-index -- HEAD &&
	verify_state HEAD committed committed &&
	verify_state dir/foo work index

diff --git a/HEAD b/HEAD
index d0fe822..e74fca5 100644
--- a/HEAD
+++ b/HEAD
@@ -1 +1 @@
-committed
+HEADfile_work
(1/1) Stash this hunk [y,n,q,a,d,e,?]? 
Saved working directory and index state WIP on master: 1f3a67c second
ok 6 - stash -p --no-keep-index -- <pathspec> does not unstage other files

expecting success of 3904.7 'none of this moved HEAD': 
	verify_saved_head

ok 7 - none of this moved HEAD

expecting success of 3904.8 'stash -p with split hunk': 
	git reset --hard &&
	cat >test <<-\EOF &&
	aaa
	bbb
	ccc
	EOF
	git add test &&
	git commit -m "initial" &&
	cat >test <<-\EOF &&
	aaa
	added line 1
	bbb
	added line 2
	ccc
	EOF
	printf "%s\n" s n y q |
	git stash -p 2>error &&
	test_must_be_empty error &&
	grep "added line 1" test &&
	! grep "added line 2" test

HEAD is now at 1f3a67c second
[master 97cac8f] initial
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 test
diff --git a/test b/test
index 1802a74..515ff88 100644
--- a/test
+++ b/test
@@ -1,3 +1,5 @@
 aaa
+added line 1
 bbb
+added line 2
 ccc
(1/1) Stash this hunk [y,n,q,a,d,s,e,?]? Split into 2 hunks.
@@ -1,2 +1,3 @@
 aaa
+added line 1
 bbb
(1/2) Stash this hunk [y,n,q,a,d,j,J,g,/,e,?]? @@ -2,2 +3,3 @@
 bbb
+added line 2
 ccc
(2/2) Stash this hunk [y,n,q,a,d,K,g,/,e,?]? 
Saved working directory and index state WIP on master: 97cac8f initial
added line 1
ok 8 - stash -p with split hunk

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3905-stash-include-untracked.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3905-stash-include-untracked/.git/
expecting success of 3905.1 'stash save --include-untracked some dirty working directory': 
	echo 1 >file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	echo 2 >file &&
	git add file &&
	echo 3 >file &&
	test_tick &&
	echo 1 >file2 &&
	echo 1 >HEAD &&
	mkdir untracked &&
	echo untracked >untracked/untracked &&
	git stash --include-untracked &&
	git diff-files --quiet &&
	git diff-index --cached --quiet HEAD

[master (root-commit) 777c62c] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Saved working directory and index state WIP on master: 777c62c initial
ok 1 - stash save --include-untracked some dirty working directory

expecting success of 3905.2 'stash save --include-untracked cleaned the untracked files': 
	cat >expect <<-EOF &&
	?? actual
	?? expect
	EOF

	git status --porcelain >actual &&
	test_cmp expect actual

ok 2 - stash save --include-untracked cleaned the untracked files

expecting success of 3905.3 'stash save --include-untracked stashed the untracked files': 
	one_blob=$(echo 1 | git hash-object --stdin) &&
	tracked=$(git rev-parse --short "$one_blob") &&
	untracked_blob=$(echo untracked | git hash-object --stdin) &&
	untracked=$(git rev-parse --short "$untracked_blob") &&
	cat >expect.diff <<-EOF &&
	diff --git a/HEAD b/HEAD
	new file mode 100644
	index 0000000..$tracked
	--- /dev/null
	+++ b/HEAD
	@@ -0,0 +1 @@
	+1
	diff --git a/file2 b/file2
	new file mode 100644
	index 0000000..$tracked
	--- /dev/null
	+++ b/file2
	@@ -0,0 +1 @@
	+1
	diff --git a/untracked/untracked b/untracked/untracked
	new file mode 100644
	index 0000000..$untracked
	--- /dev/null
	+++ b/untracked/untracked
	@@ -0,0 +1 @@
	+untracked
	EOF
	cat >expect.lstree <<-EOF &&
	HEAD
	file2
	untracked
	EOF

	test_path_is_missing file2 &&
	test_path_is_missing untracked &&
	test_path_is_missing HEAD &&
	git diff HEAD stash^3 -- HEAD file2 untracked >actual &&
	test_cmp expect.diff actual &&
	git ls-tree --name-only stash^3: >actual &&
	test_cmp expect.lstree actual

ok 3 - stash save --include-untracked stashed the untracked files

expecting success of 3905.4 'stash save --patch --include-untracked fails': 
	test_must_fail git stash --patch --include-untracked

Can't use --patch and --include-untracked or --all at the same time
ok 4 - stash save --patch --include-untracked fails

expecting success of 3905.5 'stash save --patch --all fails': 
	test_must_fail git stash --patch --all

Can't use --patch and --include-untracked or --all at the same time
ok 5 - stash save --patch --all fails

expecting success of 3905.6 'clean up untracked/untracked file to prepare for next tests': 
	git clean --force --quiet


ok 6 - clean up untracked/untracked file to prepare for next tests

expecting success of 3905.7 'stash pop after save --include-untracked leaves files untracked again': 
	cat >expect <<-EOF &&
	 M file
	?? HEAD
	?? actual
	?? expect
	?? file2
	?? untracked/
	EOF

	git stash pop &&
	git status --porcelain >actual &&
	test_cmp expect actual &&
	echo 1 >expect_file2 &&
	test_cmp expect_file2 file2 &&
	echo untracked >untracked_expect &&
	test_cmp untracked_expect untracked/untracked

Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	HEAD
	expect
	file2
	untracked/

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (b870f65afe7416482148902ff5b21a724244d053)
ok 7 - stash pop after save --include-untracked leaves files untracked again

expecting success of 3905.8 'clean up untracked/ directory to prepare for next tests': 
	git clean --force --quiet -d

ok 8 - clean up untracked/ directory to prepare for next tests

expecting success of 3905.9 'stash save -u dirty index': 
	echo 4 >file3 &&
	git add file3 &&
	test_tick &&
	git stash -u

Saved working directory and index state WIP on master: 777c62c initial
ok 9 - stash save -u dirty index

expecting success of 3905.10 'stash save --include-untracked dirty index got stashed': 
	four_blob=$(echo 4 | git hash-object --stdin) &&
	blob=$(git rev-parse --short "$four_blob") &&
	cat >expect <<-EOF &&
	diff --git a/file3 b/file3
	new file mode 100644
	index 0000000..$blob
	--- /dev/null
	+++ b/file3
	@@ -0,0 +1 @@
	+4
	EOF

	git stash pop --index &&
	test_when_finished "git reset" &&
	git diff --cached >actual &&
	test_cmp expect actual

Merging Version stash was based on with Stashed changes
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file3

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect

Dropped refs/stash@{0} (6fe995aa91ff10c4e2af89ab165bd888828517d0)
Unstaged changes after reset:
M	file
ok 10 - stash save --include-untracked dirty index got stashed

expecting success of 3905.11 'stash save --include-untracked -q is quiet': 
	echo 1 >file5 &&
	git stash save --include-untracked --quiet >.git/stash-output.out 2>&1 &&
	test_line_count = 0 .git/stash-output.out &&
	rm -f .git/stash-output.out

ok 11 - stash save --include-untracked -q is quiet

expecting success of 3905.12 'stash save --include-untracked removed files': 
	rm -f file &&
	git stash save --include-untracked &&
	echo 1 >expect &&
	test_when_finished "rm -f expect" &&
	test_cmp expect file

Saved working directory and index state WIP on master: 777c62c initial
ok 12 - stash save --include-untracked removed files

expecting success of 3905.13 'stash save --include-untracked removed files got stashed': 
	git stash pop &&
	test_path_is_missing file

Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (909f7032bbeb8f8ef8a3aa293429dac49a9d18ff)
ok 13 - stash save --include-untracked removed files got stashed

expecting success of 3905.14 'stash save --include-untracked respects .gitignore': 
	cat >.gitignore <<-EOF &&
	.gitignore
	ignored
	ignored.d/
	EOF

	echo ignored >ignored &&
	mkdir ignored.d &&
	echo ignored >ignored.d/untracked &&
	git stash -u &&
	test_file_not_empty ignored &&
	test_file_not_empty ignored.d/untracked &&
	test_file_not_empty .gitignore

Saved working directory and index state WIP on master: 777c62c initial
ok 14 - stash save --include-untracked respects .gitignore

expecting success of 3905.15 'stash save -u can stash with only untracked files different': 
	echo 4 >file4 &&
	git stash -u &&
	test_path_is_missing file4

Saved working directory and index state WIP on master: 777c62c initial
ok 15 - stash save -u can stash with only untracked files different

expecting success of 3905.16 'stash save --all does not respect .gitignore': 
	git stash -a &&
	test_path_is_missing ignored &&
	test_path_is_missing ignored.d &&
	test_path_is_missing .gitignore

Saved working directory and index state WIP on master: 777c62c initial
ok 16 - stash save --all does not respect .gitignore

expecting success of 3905.17 'stash save --all is stash poppable': 
	git stash pop &&
	test_file_not_empty ignored &&
	test_file_not_empty ignored.d/untracked &&
	test_file_not_empty .gitignore

Merging Version stash was based on with Stashed changes
Already up to date.
On branch master
nothing to commit, working tree clean
Dropped refs/stash@{0} (7e729995c69630f26ee14cf7ce02b080da67ecd1)
ok 17 - stash save --all is stash poppable

expecting success of 3905.18 'stash push --include-untracked with pathspec': 
	>foo &&
	>bar &&
	git stash push --include-untracked -- foo &&
	test_path_is_file bar &&
	test_path_is_missing foo &&
	git stash pop &&
	test_path_is_file bar &&
	test_path_is_file foo

Saved working directory and index state WIP on master: 777c62c initial
Merging Version stash was based on with Stashed changes
Already up to date.
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	bar
	foo

nothing added to commit but untracked files present (use "git add" to track)
Dropped refs/stash@{0} (8c4436f5c5cee126e0672d6347a425d7e9dcfcdd)
ok 18 - stash push --include-untracked with pathspec

expecting success of 3905.19 'stash push with $IFS character': 
	>"foo bar" &&
	>foo &&
	>bar &&
	git add foo* &&
	git stash push --include-untracked -- "foo b*" &&
	test_path_is_missing "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar &&
	git stash pop &&
	test_path_is_file "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar

Saved working directory and index state WIP on master: 777c62c initial
Merging Updated upstream with Stashed changes
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   foo
	new file:   foo bar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	bar

Dropped refs/stash@{0} (35eb97973117e33f4570df8b356a559959935987)
ok 19 - stash push with $IFS character

expecting success of 3905.20 'stash previously ignored file': 
	cat >.gitignore <<-EOF &&
	ignored
	ignored.d/*
	EOF

	git reset HEAD &&
	git add .gitignore &&
	git commit -m "Add .gitignore" &&
	>ignored.d/foo &&
	echo "!ignored.d/foo" >>.gitignore &&
	git stash save --include-untracked &&
	test_path_is_missing ignored.d/foo &&
	git stash pop &&
	test_path_is_file ignored.d/foo

[master 14579a4] Add .gitignore
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	bar
	foo
	foo bar
	ignored.d/

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (cd3bab6f4eef73edff723219ece7e89ceec0e923)
ok 20 - stash previously ignored file

expecting success of 3905.21 'stash -u -- <untracked> doesnt print error': 
	>untracked &&
	git stash push -u -- untracked 2>actual &&
	test_path_is_missing untracked &&
	test_line_count = 0 actual

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 21 - stash -u -- <untracked> doesnt print error

expecting success of 3905.22 'stash -u -- <untracked> leaves rest of working tree in place': 
	>tracked &&
	git add tracked &&
	>untracked &&
	git stash push -u -- untracked &&
	test_path_is_missing untracked &&
	test_path_is_file tracked

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 22 - stash -u -- <untracked> leaves rest of working tree in place

expecting success of 3905.23 'stash -u -- <tracked> <untracked> clears changes in both': 
	>tracked &&
	git add tracked &&
	>untracked &&
	git stash push -u -- tracked untracked &&
	test_path_is_missing tracked &&
	test_path_is_missing untracked

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 23 - stash -u -- <tracked> <untracked> clears changes in both

expecting success of 3905.24 'stash --all -- <ignored> stashes ignored file': 
	>ignored.d/bar &&
	git stash push --all -- ignored.d/bar &&
	test_path_is_missing ignored.d/bar

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 24 - stash --all -- <ignored> stashes ignored file

expecting success of 3905.25 'stash --all -- <tracked> <ignored> clears changes in both': 
	>tracked &&
	git add tracked &&
	>ignored.d/bar &&
	git stash push --all -- tracked ignored.d/bar &&
	test_path_is_missing tracked &&
	test_path_is_missing ignored.d/bar

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 25 - stash --all -- <tracked> <ignored> clears changes in both

expecting success of 3905.26 'stash -u -- <ignored> leaves ignored file alone': 
	>ignored.d/bar &&
	git stash push -u -- ignored.d/bar &&
	test_path_is_file ignored.d/bar

No local changes to save
ok 26 - stash -u -- <ignored> leaves ignored file alone

expecting success of 3905.27 'stash -u -- <non-existent> shows no changes when there are none': 
	git stash push -u -- non-existent >actual &&
	echo "No local changes to save" >expect &&
	test_cmp expect actual

ok 27 - stash -u -- <non-existent> shows no changes when there are none

expecting success of 3905.28 'stash -u with globs': 
	>untracked.txt &&
	git stash -u -- ":(glob)**/*.txt" &&
	test_path_is_missing untracked.txt

Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 28 - stash -u with globs

expecting success of 3905.29 'stash show --include-untracked shows untracked files': 
	git reset --hard &&
	git clean -xf &&
	>untracked &&
	>tracked &&
	git add tracked &&
	empty_blob_oid=$(git rev-parse --short :tracked) &&
	git stash -u &&

	cat >expect <<-EOF &&
	 tracked   | 0
	 untracked | 0
	 2 files changed, 0 insertions(+), 0 deletions(-)
	EOF
	git stash show --include-untracked >actual &&
	test_cmp expect actual &&
	git stash show -u >actual &&
	test_cmp expect actual &&
	git stash show --no-include-untracked --include-untracked >actual &&
	test_cmp expect actual &&
	git stash show --only-untracked --include-untracked >actual &&
	test_cmp expect actual &&
	git -c stash.showIncludeUntracked=true stash show >actual &&
	test_cmp expect actual &&

	cat >expect <<-EOF &&
	diff --git a/tracked b/tracked
	new file mode 100644
	index 0000000..$empty_blob_oid
	diff --git a/untracked b/untracked
	new file mode 100644
	index 0000000..$empty_blob_oid
	EOF
	git stash show -p --include-untracked >actual &&
	test_cmp expect actual &&
	git stash show --include-untracked -p >actual &&
	test_cmp expect actual &&
	git -c stash.showIncludeUntracked=true stash show -p >actual &&
	test_cmp expect actual

HEAD is now at 14579a4 Add .gitignore
Removing actual
Removing bar
Removing expect
Removing foo
Removing foo bar
Removing ignored
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 29 - stash show --include-untracked shows untracked files

expecting success of 3905.30 'stash show --only-untracked only shows untracked files': 
	git reset --hard &&
	git clean -xf &&
	>untracked &&
	>tracked &&
	git add tracked &&
	empty_blob_oid=$(git rev-parse --short :tracked) &&
	git stash -u &&

	cat >expect <<-EOF &&
	 untracked | 0
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	git stash show --only-untracked >actual &&
	test_cmp expect actual &&
	git stash show --no-include-untracked --only-untracked >actual &&
	test_cmp expect actual &&
	git stash show --include-untracked --only-untracked >actual &&
	test_cmp expect actual &&

	cat >expect <<-EOF &&
	diff --git a/untracked b/untracked
	new file mode 100644
	index 0000000..$empty_blob_oid
	EOF
	git stash show -p --only-untracked >actual &&
	test_cmp expect actual &&
	git stash show --only-untracked -p >actual &&
	test_cmp expect actual

HEAD is now at 14579a4 Add .gitignore
Removing actual
Removing expect
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 30 - stash show --only-untracked only shows untracked files

expecting success of 3905.31 'stash show --no-include-untracked cancels --{include,only}-untracked': 
	git reset --hard &&
	git clean -xf &&
	>untracked &&
	>tracked &&
	git add tracked &&
	git stash -u &&

	cat >expect <<-EOF &&
	 tracked | 0
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	git stash show --only-untracked --no-include-untracked >actual &&
	test_cmp expect actual &&
	git stash show --include-untracked --no-include-untracked >actual &&
	test_cmp expect actual

HEAD is now at 14579a4 Add .gitignore
Removing actual
Removing expect
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 31 - stash show --no-include-untracked cancels --{include,only}-untracked

expecting success of 3905.32 'stash show --include-untracked errors on duplicate files': 
	git reset --hard &&
	git clean -xf &&
	>tracked &&
	git add tracked &&
	tree=$(git write-tree) &&
	i_commit=$(git commit-tree -p HEAD -m "index on any-branch" "$tree") &&
	test_when_finished "rm -f untracked_index" &&
	u_commit=$(
		GIT_INDEX_FILE="untracked_index" &&
		export GIT_INDEX_FILE &&
		git update-index --add tracked &&
		u_tree=$(git write-tree) &&
		git commit-tree -m "untracked files on any-branch" "$u_tree"
	) &&
	w_commit=$(git commit-tree -p HEAD -p "$i_commit" -p "$u_commit" -m "WIP on any-branch" "$tree") &&
	test_must_fail git stash show --include-untracked "$w_commit" 2>err &&
	test_i18ngrep "worktree and untracked commit have duplicate entries: tracked" err

HEAD is now at 14579a4 Add .gitignore
Removing actual
Removing expect
error: worktree and untracked commit have duplicate entries: tracked
ok 32 - stash show --include-untracked errors on duplicate files

expecting success of 3905.33 'stash show --{include,only}-untracked on stashes without untracked entries': 
	git reset --hard &&
	git clean -xf &&
	>tracked &&
	git add tracked &&
	git stash &&

	git stash show >expect &&
	git stash show --include-untracked >actual &&
	test_cmp expect actual &&

	git stash show --only-untracked >actual &&
	test_must_be_empty actual

HEAD is now at 14579a4 Add .gitignore
Removing err
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 33 - stash show --{include,only}-untracked on stashes without untracked entries

expecting success of 3905.34 'stash -u ignores sub-repository': 
	test_when_finished "rm -rf sub-repo" &&
	git init sub-repo &&
	git stash -u

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3905-stash-include-untracked/sub-repo/.git/
Ignoring path sub-repo/
Saved working directory and index state WIP on master: 14579a4 Add .gitignore
ok 34 - stash -u ignores sub-repository

# passed all 34 test(s)
1..34
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3907-stash-show-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3907-stash-show-config/.git/
expecting success of 3907.1 'setup': 
	test_commit file

[master (root-commit) 4c1911f] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
ok 1 - setup

expecting success of 3907.2 'showStat unset showPatch unset': 
	test_stat_and_patch "<unset>" "<unset>" --stat

Saved working directory and index state WIP on master: 4c1911f file
ok 2 - showStat unset showPatch unset

expecting success of 3907.3 'showStat unset showPatch false': 
	test_stat_and_patch "<unset>" false --stat

Saved working directory and index state WIP on master: 4c1911f file
ok 3 - showStat unset showPatch false

expecting success of 3907.4 'showStat unset showPatch true': 
	test_stat_and_patch "<unset>" true --stat -p

Saved working directory and index state WIP on master: 4c1911f file
ok 4 - showStat unset showPatch true

expecting success of 3907.5 'showStat false showPatch unset': 
	test_stat_and_patch false "<unset>"

Saved working directory and index state WIP on master: 4c1911f file
ok 5 - showStat false showPatch unset

expecting success of 3907.6 'showStat false showPatch false': 
	test_stat_and_patch false false

Saved working directory and index state WIP on master: 4c1911f file
ok 6 - showStat false showPatch false

expecting success of 3907.7 'showStat false showPatch true': 
	test_stat_and_patch false true -p

Saved working directory and index state WIP on master: 4c1911f file
ok 7 - showStat false showPatch true

expecting success of 3907.8 'showStat true showPatch unset': 
	test_stat_and_patch true "<unset>" --stat

Saved working directory and index state WIP on master: 4c1911f file
ok 8 - showStat true showPatch unset

expecting success of 3907.9 'showStat true showPatch false': 
	test_stat_and_patch true false --stat

Saved working directory and index state WIP on master: 4c1911f file
ok 9 - showStat true showPatch false

expecting success of 3907.10 'showStat true showPatch true': 
	test_stat_and_patch true true --stat -p

Saved working directory and index state WIP on master: 4c1911f file
ok 10 - showStat true showPatch true

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3908-stash-in-worktree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3908-stash-in-worktree/.git/
expecting success of 3908.1 'setup': 
	test_commit initial &&
	git worktree add wt &&
	test_commit -C wt in-worktree

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Preparing worktree (new branch 'wt')
HEAD is now at 24b24cf initial
[wt a17e291] in-worktree
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 in-worktree.t
ok 1 - setup

expecting success of 3908.2 'apply in subdirectory': 
	mkdir wt/subdir &&
	(
		cd wt/subdir &&
		echo modified >../initial.t &&
		git stash &&
		git stash apply >out
	) &&
	grep "\.\.\/initial\.t" wt/subdir/out

Saved working directory and index state WIP on wt: a17e291 in-worktree
	modified:   ../initial.t
ok 2 - apply in subdirectory

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3909-stash-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3909-stash-pathspec-file/.git/
expecting success of 3909.1 'setup': 
	>fileA.t &&
	>fileB.t &&
	>fileC.t &&
	>fileD.t &&
	git add fileA.t fileB.t fileC.t fileD.t &&
	git commit -m "Files" &&

	git tag checkpoint

[master (root-commit) 2d1bb5b] Files
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
 create mode 100644 fileC.t
 create mode 100644 fileD.t
ok 1 - setup

expecting success of 3909.2 'simplest': 
	restore_checkpoint &&

	# More files are written to make sure that git didnt ignore
	# --pathspec-from-file, stashing everything
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&

	cat >expect <<-\EOF &&
	M	fileA.t
	EOF

	echo fileA.t | git stash push --pathspec-from-file=- &&
	verify_expect

HEAD is now at 2d1bb5b Files
Saved working directory and index state WIP on master: 2d1bb5b Files
ok 2 - simplest

expecting success of 3909.3 '--pathspec-file-nul': 
	restore_checkpoint &&

	# More files are written to make sure that git didnt ignore
	# --pathspec-from-file, stashing everything
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&

	cat >expect <<-\EOF &&
	M	fileA.t
	M	fileB.t
	EOF

	printf "fileA.t\0fileB.t\0" | git stash push --pathspec-from-file=- --pathspec-file-nul &&
	verify_expect

HEAD is now at 2d1bb5b Files
Saved working directory and index state WIP on master: 2d1bb5b Files
ok 3 - --pathspec-file-nul

expecting success of 3909.4 'only touches what was listed': 
	restore_checkpoint &&

	# More files are written to make sure that git didnt ignore
	# --pathspec-from-file, stashing everything
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&

	cat >expect <<-\EOF &&
	M	fileB.t
	M	fileC.t
	EOF

	printf "fileB.t\nfileC.t\n" | git stash push --pathspec-from-file=- &&
	verify_expect

HEAD is now at 2d1bb5b Files
Saved working directory and index state WIP on master: 2d1bb5b Files
ok 4 - only touches what was listed

expecting success of 3909.5 'error conditions': 
	restore_checkpoint &&
	echo A >fileA.t &&
	echo fileA.t >list &&

	test_must_fail git stash push --pathspec-from-file=list --patch 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--patch. cannot be used together" err &&

	test_must_fail git stash push --pathspec-from-file=list -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git stash push --pathspec-file-nul 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err

HEAD is now at 2d1bb5b Files
fatal: options '--pathspec-from-file' and '--patch' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
ok 5 - error conditions

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3910-mac-os-precompose.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3910-mac-os-precompose/.git/
checking prerequisite: UTF8_NFD_TO_NFC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
	# check whether FS converts nfd unicode to nfc
	auml=$(printf "\303\244")
	aumlcdiar=$(printf "\141\314\210")
	>"$auml" &&
	test -f "$aumlcdiar"

)
prerequisite UTF8_NFD_TO_NFC not satisfied
1..0 # SKIP filesystem does not corrupt utf-8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3920-crlf-messages.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3920-crlf-messages/.git/
expecting success of 3920.1 'Setup refs with commit and tag messages using CRLF': 
	test_commit inital &&
	create_crlf_refs

[master (root-commit) b6c1fc7] inital
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 inital.t
ok 1 - Setup refs with commit and tag messages using CRLF

expecting success of 3920.2 'branch: --verbose works with messages using CRLF': 
	rm -f expect &&
	for branch in $LIB_CRLF_BRANCHES
	do
		printf "  " >>expect &&
		cat .crlf-subject-${branch}.txt >>expect &&
		printf "\n" >>expect || return 1
	done &&
	git branch -v >tmp &&
	# Remove first two columns, and the line for the currently checked out branch
	current=$(git branch --show-current) &&
	grep -v $current <tmp | awk "{\$1=\$2=\"\"}1"  >actual &&
	test_cmp expect actual

ok 2 - branch: --verbose works with messages using CRLF

expecting success of 3920.3 'branch: --format='%(contents:subject)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-subject-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git branch --list crlf* --format="%(contents:subject)" >actual &&
			test_cmp expect actual
		
ok 3 - branch: --format='%(contents:subject)' works with messages using CRLF

expecting success of 3920.4 'branch: --format='%(contents:body)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-body-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git branch --list crlf* --format="%(contents:body)" >actual &&
			test_cmp expect actual
		
ok 4 - branch: --format='%(contents:body)' works with messages using CRLF

expecting success of 3920.5 'branch: --format='%(contents)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-message-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git branch --list crlf* --format="%(contents)" >actual &&
			test_cmp expect actual
		
ok 5 - branch: --format='%(contents)' works with messages using CRLF

expecting success of 3920.6 'tag: --format='%(contents:subject)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-subject-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git tag --list tag-crlf* --format="%(contents:subject)" >actual &&
			test_cmp expect actual
		
ok 6 - tag: --format='%(contents:subject)' works with messages using CRLF

expecting success of 3920.7 'tag: --format='%(contents:body)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-body-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git tag --list tag-crlf* --format="%(contents:body)" >actual &&
			test_cmp expect actual
		
ok 7 - tag: --format='%(contents:body)' works with messages using CRLF

expecting success of 3920.8 'tag: --format='%(contents)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-message-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git tag --list tag-crlf* --format="%(contents)" >actual &&
			test_cmp expect actual
		
ok 8 - tag: --format='%(contents)' works with messages using CRLF

expecting success of 3920.9 'for-each-ref: --format='%(contents:subject)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-subject-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git for-each-ref refs/heads/crlf* --format="%(contents:subject)" >actual &&
			test_cmp expect actual
		
ok 9 - for-each-ref: --format='%(contents:subject)' works with messages using CRLF

expecting success of 3920.10 'for-each-ref: --format='%(contents:body)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-body-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git for-each-ref refs/heads/crlf* --format="%(contents:body)" >actual &&
			test_cmp expect actual
		
ok 10 - for-each-ref: --format='%(contents:body)' works with messages using CRLF

expecting success of 3920.11 'for-each-ref: --format='%(contents)' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-message-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git for-each-ref refs/heads/crlf* --format="%(contents)" >actual &&
			test_cmp expect actual
		
ok 11 - for-each-ref: --format='%(contents)' works with messages using CRLF

expecting success of 3920.12 'log: --oneline works with messages using CRLF': 
	for branch in $LIB_CRLF_BRANCHES
	do
		cat .crlf-subject-${branch}.txt >expect &&
		printf "\n" >>expect &&
		git log --oneline -1 ${branch} >tmp-branch &&
		git log --oneline -1 tag-${branch} >tmp-tag &&
		cut -d" " -f2- <tmp-branch >actual-branch &&
		cut -d" " -f2- <tmp-tag >actual-tag &&
		test_cmp expect actual-branch &&
		test_cmp expect actual-tag || return 1
	done

ok 12 - log: --oneline works with messages using CRLF

expecting success of 3920.13 'log: --format='%s' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-subject-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git log --all --reverse --grep Subject --format="%s" >actual &&
			test_cmp expect actual
		
ok 13 - log: --format='%s' works with messages using CRLF

expecting success of 3920.14 'log: --format='%b' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-body-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git log --all --reverse --grep Subject --format="%b" >actual &&
			test_cmp expect actual
		
ok 14 - log: --format='%b' works with messages using CRLF

expecting success of 3920.15 'log: --format='%B' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-message-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git log --all --reverse --grep Subject --format="%B" >actual &&
			test_cmp expect actual
		
ok 15 - log: --format='%B' works with messages using CRLF

expecting success of 3920.16 'show: --format='%s' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-subject-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git show crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline --format="%s" >actual &&
			test_cmp expect actual
		
ok 16 - show: --format='%s' works with messages using CRLF

expecting success of 3920.17 'show: --format='%b' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-body-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git show crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline --format="%b" >actual &&
			test_cmp expect actual
		
ok 17 - show: --format='%b' works with messages using CRLF

expecting success of 3920.18 'show: --format='%B' works with messages using CRLF': 
			rm -f expect &&
			for ref in  crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline
			do
				cat .crlf-message-"${ref}".txt >>expect &&
				printf "\n" >>expect || return 1
			done &&
			git show crlf crlf-empty-lines-after-subject crlf-two-line-subject crlf-two-line-subject-no-body crlf-two-line-subject-no-body-trailing-newline --format="%B" >actual &&
			test_cmp expect actual
		
ok 18 - show: --format='%B' works with messages using CRLF

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4000-diff-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4000-diff-format/.git/
expecting success of 4000.1 'update-index --add two files with and without +x.': 
	git update-index --add path0 path1

ok 1 - update-index --add two files with and without +x.

expecting success of 4000.2 'git diff-files -p after editing work tree.': 
	git diff-files -p >actual

ok 2 - git diff-files -p after editing work tree.

expecting success of 4000.3 'validate git diff-files -p output.': 
	compare_diff_patch expected actual

ok 3 - validate git diff-files -p output.

expecting success of 4000.4 'git diff-files -s after editing work tree': 
	git diff-files -s >actual 2>err &&
	test_must_be_empty actual &&
	test_must_be_empty err

ok 4 - git diff-files -s after editing work tree

expecting success of 4000.5 'git diff-files --no-patch as synonym for -s': 
	git diff-files --no-patch >actual 2>err &&
	test_must_be_empty actual &&
	test_must_be_empty err

ok 5 - git diff-files --no-patch as synonym for -s

expecting success of 4000.6 'git diff-files --no-patch --patch shows the patch': 
	git diff-files --no-patch --patch >actual &&
	compare_diff_patch expected actual

ok 6 - git diff-files --no-patch --patch shows the patch

expecting success of 4000.7 'git diff-files --no-patch --patch-with-raw shows the patch and raw data': 
	git diff-files --no-patch --patch-with-raw >actual &&
	grep -q "^:100644 100755 .* $ZERO_OID M	path0\$" actual &&
	tail -n +4 actual >actual-patch &&
	compare_diff_patch expected actual-patch

ok 7 - git diff-files --no-patch --patch-with-raw shows the patch and raw data

expecting success of 4000.8 'git diff-files --patch --no-patch does not show the patch': 
	git diff-files --patch --no-patch >actual 2>err &&
	test_must_be_empty actual &&
	test_must_be_empty err

ok 8 - git diff-files --patch --no-patch does not show the patch

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3600-rm.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.git/
expecting success of 3600.1 'Initialize test directory': 
	touch -- foo bar baz "space embedded" -q &&
	git add -- foo bar baz "space embedded" -q &&
	git commit -m "add normal files"

[main (root-commit) 27fd14d] add normal files
 Author: A U Thor <author@example.com>
 5 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 -q
 create mode 100644 bar
 create mode 100644 baz
 create mode 100644 foo
 create mode 100644 space embedded
ok 1 - Initialize test directory

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 3600.2 'add files with funny names': 
	touch -- "tab	embedded" "newline${LF}embedded" &&
	git add -- "tab	embedded" "newline${LF}embedded" &&
	git commit -m "add files with tabs and newlines"

[main eaf70aa] add files with tabs and newlines
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "newline\nembedded"
 create mode 100644 "tab\tembedded"
ok 2 - add files with funny names

expecting success of 3600.3 'Pre-check that foo exists and is in index before git rm foo': 
	test_path_is_file foo &&
	git ls-files --error-unmatch foo

foo
ok 3 - Pre-check that foo exists and is in index before git rm foo

expecting success of 3600.4 'Test that git rm foo succeeds': 
	git rm --cached foo

rm 'foo'
ok 4 - Test that git rm foo succeeds

expecting success of 3600.5 'Test that git rm --cached foo succeeds if the index matches the file': 
	echo content >foo &&
	git add foo &&
	git rm --cached foo

rm 'foo'
ok 5 - Test that git rm --cached foo succeeds if the index matches the file

expecting success of 3600.6 'Test that git rm --cached foo succeeds if the index matches the file': 
	echo content >foo &&
	git add foo &&
	git commit -m foo &&
	echo "other content" >foo &&
	git rm --cached foo

[main 774d6a8] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
rm 'foo'
ok 6 - Test that git rm --cached foo succeeds if the index matches the file

expecting success of 3600.7 'Test that git rm --cached foo fails if the index matches neither the file nor HEAD': 
	echo content >foo &&
	git add foo &&
	git commit -m foo --allow-empty &&
	echo "other content" >foo &&
	git add foo &&
	echo "yet another content" >foo &&
	test_must_fail git rm --cached foo

[main 105830b] foo
 Author: A U Thor <author@example.com>
error: the following file has staged content different from both the
file and the HEAD:
    foo
(use -f to force removal)
ok 7 - Test that git rm --cached foo fails if the index matches neither the file nor HEAD

expecting success of 3600.8 'Test that git rm --cached -f foo works in case where --cached only did not': 
	echo content >foo &&
	git add foo &&
	git commit -m foo --allow-empty &&
	echo "other content" >foo &&
	git add foo &&
	echo "yet another content" >foo &&
	git rm --cached -f foo

[main 6fb3ca4] foo
 Author: A U Thor <author@example.com>
rm 'foo'
ok 8 - Test that git rm --cached -f foo works in case where --cached only did not

expecting success of 3600.9 'Post-check that foo exists but is not in index after git rm foo': 
	test_path_is_file foo &&
	test_must_fail git ls-files --error-unmatch foo

error: pathspec 'foo' did not match any file(s) known to git
Did you forget to 'git add'?
ok 9 - Post-check that foo exists but is not in index after git rm foo

expecting success of 3600.10 'Pre-check that bar exists and is in index before "git rm bar"': 
	test_path_is_file bar &&
	git ls-files --error-unmatch bar

bar
ok 10 - Pre-check that bar exists and is in index before "git rm bar"

expecting success of 3600.11 'Test that "git rm bar" succeeds': 
	git rm bar

rm 'bar'
ok 11 - Test that "git rm bar" succeeds

expecting success of 3600.12 'Post-check that bar does not exist and is not in index after "git rm -f bar"': 
	test_path_is_missing bar &&
	test_must_fail git ls-files --error-unmatch bar

error: pathspec 'bar' did not match any file(s) known to git
Did you forget to 'git add'?
ok 12 - Post-check that bar does not exist and is not in index after "git rm -f bar"

expecting success of 3600.13 'Test that "git rm -- -q" succeeds (remove a file that looks like an option)': 
	git rm -- -q

rm '-q'
ok 13 - Test that "git rm -- -q" succeeds (remove a file that looks like an option)

expecting success of 3600.14 'Test that "git rm -f" succeeds with embedded space, tab, or newline characters.': 
	git rm -f "space embedded" "tab	embedded" "newline${LF}embedded"

rm 'newline
embedded'
rm 'space embedded'
rm 'tab	embedded'
ok 14 - Test that "git rm -f" succeeds with embedded space, tab, or newline characters.

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 3600.15 'Test that "git rm -f" fails if its rm fails': 
	test_when_finished "chmod 775 ." &&
	chmod a-w . &&
	test_must_fail git rm -f baz

fatal: git rm: 'baz': Permission denied
rm 'baz'
ok 15 - Test that "git rm -f" fails if its rm fails

expecting success of 3600.16 'When the rm in "git rm -f" fails, it should not remove the file from the index': 
	git ls-files --error-unmatch baz

baz
ok 16 - When the rm in "git rm -f" fails, it should not remove the file from the index

expecting success of 3600.17 'Remove nonexistent file with --ignore-unmatch': 
	git rm --ignore-unmatch nonexistent

ok 17 - Remove nonexistent file with --ignore-unmatch

expecting success of 3600.18 '"rm" command printed': 
	echo frotz >test-file &&
	git add test-file &&
	git commit -m "add file for rm test" &&
	git rm test-file >rm-output.raw &&
	grep "^rm " rm-output.raw >rm-output &&
	test_line_count = 1 rm-output &&
	rm -f test-file rm-output.raw rm-output &&
	git commit -m "remove file from rm test"

[main d86816c] add file for rm test
 Author: A U Thor <author@example.com>
 7 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 -q
 delete mode 100644 bar
 delete mode 100644 foo
 delete mode 100644 "newline\nembedded"
 delete mode 100644 space embedded
 delete mode 100644 "tab\tembedded"
 create mode 100644 test-file
[main 3dc045d] remove file from rm test
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 test-file
ok 18 - "rm" command printed

expecting success of 3600.19 '"rm" command suppressed with --quiet': 
	echo frotz >test-file &&
	git add test-file &&
	git commit -m "add file for rm --quiet test" &&
	git rm --quiet test-file >rm-output &&
	test_must_be_empty rm-output &&
	rm -f test-file rm-output &&
	git commit -m "remove file from rm --quiet test"

[main cd5294c] add file for rm --quiet test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-file
[main 308e36c] remove file from rm --quiet test
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 test-file
ok 19 - "rm" command suppressed with --quiet

expecting success of 3600.20 'Re-add foo and baz': 
	git add foo baz &&
	git ls-files --error-unmatch foo baz

baz
foo
ok 20 - Re-add foo and baz

expecting success of 3600.21 'Modify foo -- rm should refuse': 
	echo >>foo &&
	test_must_fail git rm foo baz &&
	test_path_is_file foo &&
	test_path_is_file baz &&
	git ls-files --error-unmatch foo baz

error: the following file has staged content different from both the
file and the HEAD:
    foo
(use -f to force removal)
baz
foo
ok 21 - Modify foo -- rm should refuse

expecting success of 3600.22 'Modified foo -- rm -f should work': 
	git rm -f foo baz &&
	test_path_is_missing foo &&
	test_path_is_missing baz &&
	test_must_fail git ls-files --error-unmatch foo &&
	test_must_fail git ls-files --error-unmatch bar

rm 'baz'
rm 'foo'
error: pathspec 'foo' did not match any file(s) known to git
Did you forget to 'git add'?
error: pathspec 'bar' did not match any file(s) known to git
Did you forget to 'git add'?
ok 22 - Modified foo -- rm -f should work

expecting success of 3600.23 'Re-add foo and baz for HEAD tests': 
	echo frotz >foo &&
	git checkout HEAD -- baz &&
	git add foo baz &&
	git ls-files --error-unmatch foo baz

baz
foo
ok 23 - Re-add foo and baz for HEAD tests

expecting success of 3600.24 'foo is different in index from HEAD -- rm should refuse': 
	test_must_fail git rm foo baz &&
	test_path_is_file foo &&
	test_path_is_file baz &&
	git ls-files --error-unmatch foo baz

error: the following file has changes staged in the index:
    foo
(use --cached to keep the file, or -f to force removal)
baz
foo
ok 24 - foo is different in index from HEAD -- rm should refuse

expecting success of 3600.25 'but with -f it should work.': 
	git rm -f foo baz &&
	test_path_is_missing foo &&
	test_path_is_missing baz &&
	test_must_fail git ls-files --error-unmatch foo &&
	test_must_fail git ls-files --error-unmatch baz

rm 'baz'
rm 'foo'
error: pathspec 'foo' did not match any file(s) known to git
Did you forget to 'git add'?
error: pathspec 'baz' did not match any file(s) known to git
Did you forget to 'git add'?
ok 25 - but with -f it should work.

expecting success of 3600.26 'refuse to remove cached empty file with modifications': 
	>empty &&
	git add empty &&
	echo content >empty &&
	test_must_fail git rm --cached empty

error: the following file has staged content different from both the
file and the HEAD:
    empty
(use -f to force removal)
ok 26 - refuse to remove cached empty file with modifications

expecting success of 3600.27 'remove intent-to-add file without --force': 
	echo content >intent-to-add &&
	git add -N intent-to-add &&
	git rm --cached intent-to-add

rm 'intent-to-add'
ok 27 - remove intent-to-add file without --force

expecting success of 3600.28 'Recursive test setup': 
	mkdir -p frotz &&
	echo qfwfq >frotz/nitfol &&
	git add frotz &&
	git commit -m "subdir test"

[main 5a08f40] subdir test
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename baz => empty (100%)
 create mode 100644 frotz/nitfol
ok 28 - Recursive test setup

expecting success of 3600.29 'Recursive without -r fails': 
	test_must_fail git rm frotz &&
	test_path_is_dir frotz &&
	test_path_is_file frotz/nitfol

fatal: not removing 'frotz' recursively without -r
ok 29 - Recursive without -r fails

expecting success of 3600.30 'Recursive with -r but dirty': 
	echo qfwfq >>frotz/nitfol &&
	test_must_fail git rm -r frotz &&
	test_path_is_dir frotz &&
	test_path_is_file frotz/nitfol

error: the following file has local modifications:
    frotz/nitfol
(use --cached to keep the file, or -f to force removal)
ok 30 - Recursive with -r but dirty

expecting success of 3600.31 'Recursive with -r -f': 
	git rm -f -r frotz &&
	test_path_is_missing frotz/nitfol &&
	test_path_is_missing frotz

rm 'frotz/nitfol'
ok 31 - Recursive with -r -f

expecting success of 3600.32 'Remove nonexistent file returns nonzero exit status': 
	test_must_fail git rm nonexistent

fatal: pathspec 'nonexistent' did not match any files
ok 32 - Remove nonexistent file returns nonzero exit status

expecting success of 3600.33 'Call "rm" from outside the work tree': 
	mkdir repo &&
	(
		cd repo &&
		git init &&
		echo something >somefile &&
		git add somefile &&
		git commit -m "add a file" &&
		(
			cd .. &&
			git --git-dir=repo/.git --work-tree=repo rm somefile
		) &&
		test_must_fail git ls-files --error-unmatch somefile
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3600-rm/repo/.git/
[main (root-commit) bc24042] add a file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 somefile
rm 'somefile'
error: pathspec 'somefile' did not match any file(s) known to git
Did you forget to 'git add'?
ok 33 - Call "rm" from outside the work tree

expecting success of 3600.34 'refresh index before checking if it is up-to-date': 
	git reset --hard &&
	test-tool chmtime -86400 frotz/nitfol &&
	git rm frotz/nitfol &&
	test_path_is_missing frotz/nitfol

HEAD is now at 5a08f40 subdir test
rm 'frotz/nitfol'
ok 34 - refresh index before checking if it is up-to-date

expecting success of 3600.35 'choking "git rm" should not let it die with cruft (induce SIGPIPE)': 
	choke_git_rm_setup &&
	# git command is intentionally placed upstream of pipe to induce SIGPIPE
	git rm -n "some-file-*" | : &&
	test_path_is_missing .git/index.lock

ok 35 - choking "git rm" should not let it die with cruft (induce SIGPIPE)

expecting success of 3600.36 'choking "git rm" should not let it die with cruft (induce and check SIGPIPE)': 
	choke_git_rm_setup &&
	OUT=$( ((trap "" PIPE && git rm -n "some-file-*"; echo $? 1>&3) | :) 3>&1 ) &&
	test_match_signal 13 "$OUT" &&
	test_path_is_missing .git/index.lock

ok 36 - choking "git rm" should not let it die with cruft (induce and check SIGPIPE)

expecting success of 3600.37 'Resolving by removal is not a warning-worthy event': 
	git reset -q --hard &&
	test_when_finished "rm -f .git/index.lock msg && git reset -q --hard" &&
	blob=$(echo blob | git hash-object -w --stdin) &&
	printf "100644 $blob %d\tblob\n" 1 2 3 | git update-index --index-info &&
	git rm blob >msg 2>&1 &&
	test_i18ngrep ! "needs merge" msg &&
	test_must_fail git ls-files -s --error-unmatch blob

error: pathspec 'blob' did not match any file(s) known to git
Did you forget to 'git add'?
ok 37 - Resolving by removal is not a warning-worthy event

expecting success of 3600.38 'rm removes subdirectories recursively': 
	mkdir -p dir/subdir/subsubdir &&
	echo content >dir/subdir/subsubdir/file &&
	git add dir/subdir/subsubdir/file &&
	git rm -f dir/subdir/subsubdir/file &&
	test_path_is_missing dir

rm 'dir/subdir/subsubdir/file'
ok 38 - rm removes subdirectories recursively

expecting success of 3600.39 'rm removes empty submodules from work tree': 
	mkdir submod &&
	hash=$(git rev-parse HEAD) &&
	git update-index --add --cacheinfo 160000 "$hash" submod &&
	git config -f .gitmodules submodule.sub.url ./. &&
	git config -f .gitmodules submodule.sub.path submod &&
	git submodule init &&
	git add .gitmodules &&
	git commit -m "add submodule" &&
	git rm submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.) registered for path 'submod'
[main 639dc8a] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submod
rm 'submod'
ok 39 - rm removes empty submodules from work tree

expecting success of 3600.40 'rm removes removed submodule from index and .gitmodules': 
	git reset --hard &&
	git -c protocol.file.allow=always submodule update &&
	rm -rf submod &&
	git rm submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

HEAD is now at 639dc8a add submodule
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod'...
done.
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
ok 40 - rm removes removed submodule from index and .gitmodules

expecting success of 3600.41 'rm removes work tree of unmodified submodules': 
	git reset --hard &&
	git submodule update &&
	git rm submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
ok 41 - rm removes work tree of unmodified submodules

expecting success of 3600.42 'rm removes a submodule with a trailing /': 
	git reset --hard &&
	git submodule update &&
	git rm submod/ &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
ok 42 - rm removes a submodule with a trailing /

expecting success of 3600.43 'rm fails when given a file with a trailing /': 
	test_must_fail git rm empty/

fatal: pathspec 'empty/' did not match any files
ok 43 - rm fails when given a file with a trailing /

expecting success of 3600.44 'rm succeeds when given a directory with a trailing /': 
	git rm -r frotz/

rm 'frotz/nitfol'
ok 44 - rm succeeds when given a directory with a trailing /

expecting success of 3600.45 'rm of a populated submodule with different HEAD fails unless forced': 
	git reset --hard &&
	git submodule update &&
	git -C submod checkout HEAD^ &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
Previous HEAD position was 5a08f40 subdir test
HEAD is now at 308e36c remove file from rm --quiet test
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 45 - rm of a populated submodule with different HEAD fails unless forced

expecting success of 3600.46 'rm --cached leaves work tree of populated submodules and .gitmodules alone': 
	git reset --hard &&
	git submodule update &&
	git rm --cached submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno >actual &&
	test_cmp expect.cached actual &&
	git config -f .gitmodules submodule.sub.url &&
	git config -f .gitmodules submodule.sub.path

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
./.
submod
ok 46 - rm --cached leaves work tree of populated submodules and .gitmodules alone

expecting success of 3600.47 'rm --dry-run does not touch the submodule or .gitmodules': 
	git reset --hard &&
	git submodule update &&
	git rm -n submod &&
	test_path_is_file submod/.git &&
	git diff-index --exit-code HEAD

HEAD is now at 639dc8a add submodule
rm 'submod'
ok 47 - rm --dry-run does not touch the submodule or .gitmodules

expecting success of 3600.48 'rm does not complain when no .gitmodules file is found': 
	git reset --hard &&
	git submodule update &&
	git rm .gitmodules &&
	git rm submod >actual 2>actual.err &&
	test_must_be_empty actual.err &&
	test_path_is_missing submod &&
	test_path_is_missing submod/.git &&
	git status -s -uno >actual &&
	test_cmp expect.both_deleted actual

HEAD is now at 639dc8a add submodule
rm '.gitmodules'
ok 48 - rm does not complain when no .gitmodules file is found

expecting success of 3600.49 'rm will error out on a modified .gitmodules file unless staged': 
	git reset --hard &&
	git submodule update &&
	git config -f .gitmodules foo.bar true &&
	test_must_fail git rm submod >actual 2>actual.err &&
	test_file_not_empty actual.err &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git diff-files --quiet -- submod &&
	git add .gitmodules &&
	git rm submod >actual 2>actual.err &&
	test_must_be_empty actual.err &&
	test_path_is_missing submod &&
	test_path_is_missing submod/.git &&
	git status -s -uno >actual &&
	test_cmp expect actual

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
ok 49 - rm will error out on a modified .gitmodules file unless staged

expecting success of 3600.50 'rm will not error out on .gitmodules file with zero stat data': 
	git reset --hard &&
	git submodule update &&
	git read-tree HEAD &&
	git rm submod &&
	test_path_is_missing submod

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
ok 50 - rm will not error out on .gitmodules file with zero stat data

expecting success of 3600.51 'rm issues a warning when section is not found in .gitmodules': 
	git reset --hard &&
	git submodule update &&
	git config -f .gitmodules --remove-section submodule.sub &&
	git add .gitmodules &&
	echo "warning: Could not find section in .gitmodules where path=submod" >expect.err &&
	git rm submod >actual 2>actual.err &&
	test_cmp expect.err actual.err &&
	test_path_is_missing submod &&
	test_path_is_missing submod/.git &&
	git status -s -uno >actual &&
	test_cmp expect actual

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
ok 51 - rm issues a warning when section is not found in .gitmodules

expecting success of 3600.52 'rm of a populated submodule with modifications fails unless forced': 
	git reset --hard &&
	git submodule update &&
	echo X >submod/empty &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified_inside actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 52 - rm of a populated submodule with modifications fails unless forced

expecting success of 3600.53 'rm of a populated submodule with untracked files fails unless forced': 
	git reset --hard &&
	git submodule update &&
	echo X >submod/untracked &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified_untracked actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 53 - rm of a populated submodule with untracked files fails unless forced

expecting success of 3600.54 'setup submodule conflict': 
	git reset --hard &&
	git submodule update &&
	git checkout -b branch1 &&
	echo 1 >nitfol &&
	git add nitfol &&
	git commit -m "added nitfol 1" &&
	git checkout -b branch2 main &&
	echo 2 >nitfol &&
	git add nitfol &&
	git commit -m "added nitfol 2" &&
	git checkout -b conflict1 main &&
	git -C submod fetch &&
	git -C submod checkout branch1 &&
	git add submod &&
	git commit -m "submod 1" &&
	git checkout -b conflict2 main &&
	git -C submod checkout branch2 &&
	git add submod &&
	git commit -m "submod 2"

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
Switched to a new branch 'branch1'
[branch1 d0e7df6] added nitfol 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 nitfol
Switched to a new branch 'branch2'
[branch2 e3f3428] added nitfol 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 nitfol
Switched to a new branch 'conflict1'
From /<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.
 * [new branch]      branch1    -> origin/branch1
 * [new branch]      branch2    -> origin/branch2
 * [new branch]      conflict1  -> origin/conflict1
Previous HEAD position was 5a08f40 subdir test
Switched to a new branch 'branch1'
branch 'branch1' set up to track 'origin/branch1'.
[conflict1 8a835a1] submod 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'conflict2'
M	submod
Switched to a new branch 'branch2'
branch 'branch2' set up to track 'origin/branch2'.
[conflict2 db3aa7b] submod 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 54 - setup submodule conflict

expecting success of 3600.55 'rm removes work tree of unmodified conflicted submodule': 
	git checkout conflict1 &&
	git reset --hard &&
	git submodule update &&
	test_must_fail git merge conflict2 &&
	git rm submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

Switched to branch 'conflict1'
M	submod
HEAD is now at 8a835a1 submod 1
Submodule path 'submod': checked out 'd0e7df645bf4f519acd9bb638b4ba20d14b7a359'
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
rm 'submod'
ok 55 - rm removes work tree of unmodified conflicted submodule

expecting success of 3600.56 'rm of a conflicted populated submodule with different HEAD fails unless forced': 
	git checkout conflict1 &&
	git reset --hard &&
	git submodule update &&
	git -C submod checkout HEAD^ &&
	test_must_fail git merge conflict2 &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.conflict actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

Already on 'conflict1'
M	.gitmodules
D	submod
HEAD is now at 8a835a1 submod 1
Submodule path 'submod': checked out 'd0e7df645bf4f519acd9bb638b4ba20d14b7a359'
Previous HEAD position was d0e7df6 added nitfol 1
HEAD is now at 639dc8a add submodule
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 56 - rm of a conflicted populated submodule with different HEAD fails unless forced

expecting success of 3600.57 'rm of a conflicted populated submodule with modifications fails unless forced': 
	git checkout conflict1 &&
	git reset --hard &&
	git submodule update &&
	echo X >submod/empty &&
	test_must_fail git merge conflict2 &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.conflict actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual &&
	test_must_fail git config -f .gitmodules submodule.sub.url &&
	test_must_fail git config -f .gitmodules submodule.sub.path

Already on 'conflict1'
M	.gitmodules
D	submod
HEAD is now at 8a835a1 submod 1
Submodule path 'submod': checked out 'd0e7df645bf4f519acd9bb638b4ba20d14b7a359'
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 57 - rm of a conflicted populated submodule with modifications fails unless forced

expecting success of 3600.58 'rm of a conflicted populated submodule with untracked files fails unless forced': 
	git checkout conflict1 &&
	git reset --hard &&
	git submodule update &&
	echo X >submod/untracked &&
	test_must_fail git merge conflict2 &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.conflict actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

Already on 'conflict1'
M	.gitmodules
D	submod
HEAD is now at 8a835a1 submod 1
Submodule path 'submod': checked out 'd0e7df645bf4f519acd9bb638b4ba20d14b7a359'
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 58 - rm of a conflicted populated submodule with untracked files fails unless forced

expecting success of 3600.59 'rm of a conflicted populated submodule with a .git directory fails even when forced': 
	git checkout conflict1 &&
	git reset --hard &&
	git submodule update &&
	(
		cd submod &&
		rm .git &&
		cp -R ../.git/modules/sub .git &&
		GIT_WORK_TREE=. git config --unset core.worktree
	) &&
	test_must_fail git merge conflict2 &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_dir submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.conflict actual &&
	test_must_fail git rm -f submod &&
	test_path_is_dir submod &&
	test_path_is_dir submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.conflict actual &&
	git merge --abort &&
	rm -rf submod

Already on 'conflict1'
M	.gitmodules
D	submod
HEAD is now at 8a835a1 submod 1
Submodule path 'submod': checked out 'd0e7df645bf4f519acd9bb638b4ba20d14b7a359'
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Migrating git directory of 'submod' from
'/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.git/modules/sub'
fatal: could not migrate git directory from '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod/.git' to '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.git/modules/sub': Directory not empty
Migrating git directory of 'submod' from
'/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.git/modules/sub'
fatal: could not migrate git directory from '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod/.git' to '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.git/modules/sub': Directory not empty
ok 59 - rm of a conflicted populated submodule with a .git directory fails even when forced

expecting success of 3600.60 'rm of a conflicted unpopulated submodule succeeds': 
	git checkout conflict1 &&
	git reset --hard &&
	test_must_fail git merge conflict2 &&
	git rm submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

Already on 'conflict1'
D	submod
HEAD is now at 8a835a1 submod 1
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit e3f3428
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
rm 'submod'
ok 60 - rm of a conflicted unpopulated submodule succeeds

expecting success of 3600.61 'rm of a populated submodule with a .git directory migrates git dir': 
	git checkout -f main &&
	git reset --hard &&
	git submodule update &&
	(
		cd submod &&
		rm .git &&
		cp -R ../.git/modules/sub .git &&
		GIT_WORK_TREE=. git config --unset core.worktree &&
		rm -r ../.git/modules/sub
	) &&
	git rm submod 2>output.err &&
	test_path_is_missing submod &&
	test_path_is_missing submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_file_not_empty actual &&
	test_i18ngrep Migrating output.err

Switched to branch 'main'
HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
Migrating git directory of 'submod' from
ok 61 - rm of a populated submodule with a .git directory migrates git dir

expecting success of 3600.62 'setup subsubmodule': 
	test_config_global protocol.file.allow always &&
	git reset --hard &&
	git submodule update &&
	(
		cd submod &&
		hash=$(git rev-parse HEAD) &&
		git update-index --add --cacheinfo 160000 "$hash" subsubmod &&
		git config -f .gitmodules submodule.sub.url ../. &&
		git config -f .gitmodules submodule.sub.path subsubmod &&
		git submodule init &&
		git add .gitmodules &&
		git commit -m "add subsubmodule" &&
		git submodule update subsubmod
	) &&
	git commit -a -m "added deep submodule"

HEAD is now at 639dc8a add submodule
Submodule path 'submod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/.) registered for path 'subsubmod'
[detached HEAD b2c2402] add subsubmodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subsubmod
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3600-rm/submod/subsubmod'...
done.
Submodule path 'subsubmod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
[main 3a0be25] added deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 62 - setup subsubmodule

expecting success of 3600.63 'rm recursively removes work tree of unmodified submodules': 
	git rm submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

rm 'submod'
ok 63 - rm recursively removes work tree of unmodified submodules

expecting success of 3600.64 'rm of a populated nested submodule with different nested HEAD fails unless forced': 
	git reset --hard &&
	git submodule update --recursive &&
	git -C submod/subsubmod checkout HEAD^ &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified_inside actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 3a0be25 added deep submodule
Submodule path 'submod': checked out 'b2c2402bd19123bf7a3cf2fb2eb6e8c93e95123e'
Submodule path 'submod/subsubmod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
Previous HEAD position was 5a08f40 subdir test
HEAD is now at 308e36c remove file from rm --quiet test
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 64 - rm of a populated nested submodule with different nested HEAD fails unless forced

expecting success of 3600.65 'rm of a populated nested submodule with nested modifications fails unless forced': 
	git reset --hard &&
	git submodule update --recursive &&
	echo X >submod/subsubmod/empty &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified_inside actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 3a0be25 added deep submodule
Submodule path 'submod': checked out 'b2c2402bd19123bf7a3cf2fb2eb6e8c93e95123e'
Submodule path 'submod/subsubmod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 65 - rm of a populated nested submodule with nested modifications fails unless forced

expecting success of 3600.66 'rm of a populated nested submodule with nested untracked files fails unless forced': 
	git reset --hard &&
	git submodule update --recursive &&
	echo X >submod/subsubmod/untracked &&
	test_must_fail git rm submod &&
	test_path_is_dir submod &&
	test_path_is_file submod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect.modified_untracked actual &&
	git rm -f submod &&
	test_path_is_missing submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_cmp expect actual

HEAD is now at 3a0be25 added deep submodule
Submodule path 'submod': checked out 'b2c2402bd19123bf7a3cf2fb2eb6e8c93e95123e'
Submodule path 'submod/subsubmod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
error: the following file has local modifications:
    submod
(use --cached to keep the file, or -f to force removal)
rm 'submod'
ok 66 - rm of a populated nested submodule with nested untracked files fails unless forced

expecting success of 3600.67 'rm absorbs submodule's nested .git directory': 
	git reset --hard &&
	git submodule update --recursive &&
	(
		cd submod/subsubmod &&
		rm .git &&
		mv ../../.git/modules/sub/modules/sub .git &&
		GIT_WORK_TREE=. git config --unset core.worktree
	) &&
	git rm submod 2>output.err &&
	test_path_is_missing submod &&
	test_path_is_missing submod/subsubmod/.git &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_file_not_empty actual &&
	test_i18ngrep Migrating output.err

HEAD is now at 3a0be25 added deep submodule
Submodule path 'submod': checked out 'b2c2402bd19123bf7a3cf2fb2eb6e8c93e95123e'
Submodule path 'submod/subsubmod': checked out '5a08f409c5f8e886af660c5b2e2d84e5d1021a40'
rm 'submod'
Migrating git directory of 'submod/subsubmod' from
ok 67 - rm absorbs submodule's nested .git directory

expecting success of 3600.68 'checking out a commit after submodule removal needs manual updates': 
	git commit -m "submodule removal" submod .gitmodules &&
	git checkout HEAD^ &&
	git submodule update &&
	git checkout -q HEAD^ &&
	git checkout -q main 2>actual &&
	test_i18ngrep "^warning: unable to rmdir 'submod':" actual &&
	git status -s submod >actual &&
	echo "?? submod/" >expected &&
	test_cmp expected actual &&
	rm -rf submod &&
	git status -s -uno --ignore-submodules=none >actual &&
	test_must_be_empty actual

[main a23000e] submodule removal
 Author: A U Thor <author@example.com>
 2 files changed, 4 deletions(-)
 delete mode 160000 submod
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 3a0be25 added deep submodule
Submodule path 'submod': checked out 'b2c2402bd19123bf7a3cf2fb2eb6e8c93e95123e'
warning: unable to rmdir 'submod': Directory not empty
ok 68 - checking out a commit after submodule removal needs manual updates

expecting success of 3600.69 'rm of d/f when d has become a non-directory': 
	rm -rf d &&
	mkdir d &&
	>d/f &&
	git add d &&
	rm -rf d &&
	>d &&
	git rm d/f &&
	test_must_fail git rev-parse --verify :d/f &&
	test_path_is_file d

rm 'd/f'
fatal: Needed a single revision
ok 69 - rm of d/f when d has become a non-directory

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 3600.70 'rm of d/f when d has become a dangling symlink': 
	rm -rf d &&
	mkdir d &&
	>d/f &&
	git add d &&
	rm -rf d &&
	ln -s nonexistent d &&
	git rm d/f &&
	test_must_fail git rev-parse --verify :d/f &&
	test -h d &&
	test_path_is_missing d

rm 'd/f'
fatal: Needed a single revision
ok 70 - rm of d/f when d has become a dangling symlink

expecting success of 3600.71 'rm of file when it has become a directory': 
	rm -rf d &&
	>d &&
	git add d &&
	rm -f d &&
	mkdir d &&
	>d/f &&
	test_must_fail git rm d &&
	git rev-parse --verify :d &&
	test_path_is_file d/f

fatal: git rm: 'd': Is a directory
rm 'd'
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 71 - rm of file when it has become a directory

expecting success of 3600.72 'rm across a symlinked leading path (no index)': 
	rm -rf d e &&
	mkdir e &&
	echo content >e/f &&
	ln -s e d &&
	git add -A e d &&
	git commit -m "symlink d to e, e/f exists" &&
	test_must_fail git rm d/f &&
	git rev-parse --verify :d &&
	git rev-parse --verify :e/f &&
	test -h d &&
	test_path_is_file e/f

[main 15c6bcf] symlink d to e, e/f exists
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 120000 d
 create mode 100644 e/f
fatal: pathspec 'd/f' did not match any files
9cbe6ea56f225388ae614c419249bfc6d734cc30
d95f3ad14dee633a758d2e331151e950dd13e4ed
ok 72 - rm across a symlinked leading path (no index)

checking known breakage of 3600.73 'rm across a symlinked leading path (w/ index)': 
	rm -rf d e &&
	mkdir d &&
	echo content >d/f &&
	git add -A e d &&
	git commit -m "d/f exists" &&
	mv d e &&
	ln -s e d &&
	test_must_fail git rm d/f &&
	git rev-parse --verify :d/f &&
	test -h d &&
	test_path_is_file e/f

[main 362fe30] d/f exists
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 delete mode 120000 d
 rename {e => d}/f (100%)
rm 'd/f'
test_must_fail: command succeeded: git rm d/f
not ok 73 - rm across a symlinked leading path (w/ index) # TODO known breakage

expecting success of 3600.74 'setup for testing rm messages': 
	>bar.txt &&
	>foo.txt &&
	git add bar.txt foo.txt

ok 74 - setup for testing rm messages

expecting success of 3600.75 'rm files with different staged content': 
	cat >expect <<-\EOF &&
	error: the following files have staged content different from both the
	file and the HEAD:
	    bar.txt
	    foo.txt
	(use -f to force removal)
	EOF
	echo content1 >foo.txt &&
	echo content1 >bar.txt &&
	test_must_fail git rm foo.txt bar.txt 2>actual &&
	test_cmp expect actual

ok 75 - rm files with different staged content

expecting success of 3600.76 'rm files with different staged content without hints': 
	cat >expect <<-\EOF &&
	error: the following files have staged content different from both the
	file and the HEAD:
	    bar.txt
	    foo.txt
	EOF
	echo content2 >foo.txt &&
	echo content2 >bar.txt &&
	test_must_fail git -c advice.rmhints=false rm foo.txt bar.txt 2>actual &&
	test_cmp expect actual

ok 76 - rm files with different staged content without hints

expecting success of 3600.77 'rm file with local modification': 
	cat >expect <<-\EOF &&
	error: the following file has local modifications:
	    foo.txt
	(use --cached to keep the file, or -f to force removal)
	EOF
	git commit -m "testing rm 3" &&
	echo content3 >foo.txt &&
	test_must_fail git rm foo.txt 2>actual &&
	test_cmp expect actual

[main a02d987] testing rm 3
 Author: A U Thor <author@example.com>
 3 files changed, 1 deletion(-)
 create mode 100644 bar.txt
 delete mode 100644 d/f
 create mode 100644 foo.txt
ok 77 - rm file with local modification

expecting success of 3600.78 'rm file with local modification without hints': 
	cat >expect <<-\EOF &&
	error: the following file has local modifications:
	    bar.txt
	EOF
	echo content4 >bar.txt &&
	test_must_fail git -c advice.rmhints=false rm bar.txt 2>actual &&
	test_cmp expect actual

ok 78 - rm file with local modification without hints

expecting success of 3600.79 'rm file with changes in the index': 
	cat >expect <<-\EOF &&
	error: the following file has changes staged in the index:
	    foo.txt
	(use --cached to keep the file, or -f to force removal)
	EOF
	git reset --hard &&
	echo content5 >foo.txt &&
	git add foo.txt &&
	test_must_fail git rm foo.txt 2>actual &&
	test_cmp expect actual

HEAD is now at a02d987 testing rm 3
ok 79 - rm file with changes in the index

expecting success of 3600.80 'rm file with changes in the index without hints': 
	cat >expect <<-\EOF &&
	error: the following file has changes staged in the index:
	    foo.txt
	EOF
	test_must_fail git -c advice.rmhints=false rm foo.txt 2>actual &&
	test_cmp expect actual

ok 80 - rm file with changes in the index without hints

expecting success of 3600.81 'rm files with two different errors': 
	cat >expect <<-\EOF &&
	error: the following file has staged content different from both the
	file and the HEAD:
	    foo1.txt
	(use -f to force removal)
	error: the following file has changes staged in the index:
	    bar1.txt
	(use --cached to keep the file, or -f to force removal)
	EOF
	echo content >foo1.txt &&
	git add foo1.txt &&
	echo content6 >foo1.txt &&
	echo content6 >bar1.txt &&
	git add bar1.txt &&
	test_must_fail git rm bar1.txt foo1.txt 2>actual &&
	test_cmp expect actual

ok 81 - rm files with two different errors

expecting success of 3600.82 'rm empty string should fail': 
	test_must_fail git rm -rf ""

fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths
ok 82 - rm empty string should fail

# still have 1 known breakage(s)
# passed all remaining 81 test(s)
1..82
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4001-diff-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4001-diff-rename/.git/
expecting success of 4001.1 'setup': 
	cat >path0 <<-\EOF &&
	Line 1
	Line 2
	Line 3
	Line 4
	Line 5
	Line 6
	Line 7
	Line 8
	Line 9
	Line 10
	line 11
	Line 12
	Line 13
	Line 14
	Line 15
	EOF
	cat >expected <<-\EOF &&
	diff --git a/path0 b/path1
	rename from path0
	rename to path1
	--- a/path0
	+++ b/path1
	@@ -8,7 +8,7 @@ Line 7
	 Line 8
	 Line 9
	 Line 10
	-line 11
	+Line 11
	 Line 12
	 Line 13
	 Line 14
	EOF
	cat >no-rename <<-\EOF
	diff --git a/path0 b/path0
	deleted file mode 100644
	index fdbec44..0000000
	--- a/path0
	+++ /dev/null
	@@ -1,15 +0,0 @@
	-Line 1
	-Line 2
	-Line 3
	-Line 4
	-Line 5
	-Line 6
	-Line 7
	-Line 8
	-Line 9
	-Line 10
	-line 11
	-Line 12
	-Line 13
	-Line 14
	-Line 15
	diff --git a/path1 b/path1
	new file mode 100644
	index 0000000..752c50e
	--- /dev/null
	+++ b/path1
	@@ -0,0 +1,15 @@
	+Line 1
	+Line 2
	+Line 3
	+Line 4
	+Line 5
	+Line 6
	+Line 7
	+Line 8
	+Line 9
	+Line 10
	+Line 11
	+Line 12
	+Line 13
	+Line 14
	+Line 15
	EOF

ok 1 - setup

expecting success of 4001.2 'update-index --add a file.': git update-index --add path0
ok 2 - update-index --add a file.

expecting success of 4001.3 'write that tree.': tree=$(git write-tree) && echo $tree
ad8378482f032562f72403dd7c5bd607578a3f0e
ok 3 - write that tree.

expecting success of 4001.4 'renamed and edited the file.': git update-index --add --remove path0 path1
ok 4 - renamed and edited the file.

expecting success of 4001.5 'git diff-index -p -M after rename and editing.': git diff-index -p -M $tree >current
ok 5 - git diff-index -p -M after rename and editing.

expecting success of 4001.6 'validate the output.': compare_diff_patch current expected
ok 6 - validate the output.

expecting success of 4001.7 'test diff.renames=true': 
	git -c diff.renames=true diff --cached $tree >current &&
	compare_diff_patch current expected

ok 7 - test diff.renames=true

expecting success of 4001.8 'test diff.renames=false': 
	git -c diff.renames=false diff --cached $tree >current &&
	compare_diff_patch current no-rename

ok 8 - test diff.renames=false

expecting success of 4001.9 'test diff.renames unset': 
	git diff --cached $tree >current &&
	compare_diff_patch current expected

ok 9 - test diff.renames unset

expecting success of 4001.10 'favour same basenames over different ones': 
	cp path1 another-path &&
	git add another-path &&
	git commit -m 1 &&
	git rm path1 &&
	mkdir subdir &&
	git mv another-path subdir/path1 &&
	git status >out &&
	test_i18ngrep "renamed: .*path1 -> subdir/path1" out

[master (root-commit) 7846fdf] 1
 Author: A U Thor <author@example.com>
 2 files changed, 30 insertions(+)
 create mode 100644 another-path
 create mode 100644 path1
rm 'path1'
	renamed:    path1 -> subdir/path1
ok 10 - favour same basenames over different ones

expecting success of 4001.11 'test diff.renames=true for git status': 
	git -c diff.renames=true status >out &&
	test_i18ngrep "renamed: .*path1 -> subdir/path1" out

	renamed:    path1 -> subdir/path1
ok 11 - test diff.renames=true for git status

expecting success of 4001.12 'test diff.renames=false for git status': 
	git -c diff.renames=false status >out &&
	test_i18ngrep ! "renamed: .*path1 -> subdir/path1" out &&
	test_i18ngrep "new file: .*subdir/path1" out &&
	test_i18ngrep "deleted: .*[^/]path1" out

	new file:   subdir/path1
	deleted:    path1
ok 12 - test diff.renames=false for git status

expecting success of 4001.13 'favour same basenames even with minor differences': 
	git show HEAD:path1 | sed "s/15/16/" > subdir/path1 &&
	git status >out &&
	test_i18ngrep "renamed: .*path1 -> subdir/path1" out

	renamed:    path1 -> subdir/path1
ok 13 - favour same basenames even with minor differences

expecting success of 4001.14 'two files with same basename and same content': 
	git reset --hard &&
	mkdir -p dir/A dir/B &&
	cp path1 dir/A/file &&
	cp path1 dir/B/file &&
	git add dir &&
	git commit -m 2 &&
	git mv dir other-dir &&
	git status >out &&
	test_i18ngrep "renamed: .*dir/A/file -> other-dir/A/file" out

HEAD is now at 7846fdf 1
[master 05f0b7a] 2
 Author: A U Thor <author@example.com>
 2 files changed, 30 insertions(+)
 create mode 100644 dir/A/file
 create mode 100644 dir/B/file
	renamed:    dir/A/file -> other-dir/A/file
ok 14 - two files with same basename and same content

expecting success of 4001.15 'setup for many rename source candidates': 
	git reset --hard &&
	for i in 0 1 2 3 4 5 6 7 8 9;
	do
		for j in 0 1 2 3 4 5 6 7 8 9;
		do
			echo "$i$j" >"path$i$j" || return 1
		done
	done &&
	git add "path??" &&
	test_tick &&
	git commit -m "hundred" &&
	(cat path1 && echo new) >new-path &&
	echo old >>path1 &&
	git add new-path path1 &&
	git diff -l 4 -C -C --cached --name-status >actual 2>actual.err &&
	sed -e "s/^\([CM]\)[0-9]*	/\1	/" actual >actual.munged &&
	cat >expect <<-EOF &&
	C	path1	new-path
	M	path1
	EOF
	test_cmp expect actual.munged &&
	grep warning actual.err

HEAD is now at 05f0b7a 2
[master c0eb1c8] hundred
 Author: A U Thor <author@example.com>
 100 files changed, 100 insertions(+)
 create mode 100644 path00
 create mode 100644 path01
 create mode 100644 path02
 create mode 100644 path03
 create mode 100644 path04
 create mode 100644 path05
 create mode 100644 path06
 create mode 100644 path07
 create mode 100644 path08
 create mode 100644 path09
 create mode 100644 path10
 create mode 100644 path11
 create mode 100644 path12
 create mode 100644 path13
 create mode 100644 path14
 create mode 100644 path15
 create mode 100644 path16
 create mode 100644 path17
 create mode 100644 path18
 create mode 100644 path19
 create mode 100644 path20
 create mode 100644 path21
 create mode 100644 path22
 create mode 100644 path23
 create mode 100644 path24
 create mode 100644 path25
 create mode 100644 path26
 create mode 100644 path27
 create mode 100644 path28
 create mode 100644 path29
 create mode 100644 path30
 create mode 100644 path31
 create mode 100644 path32
 create mode 100644 path33
 create mode 100644 path34
 create mode 100644 path35
 create mode 100644 path36
 create mode 100644 path37
 create mode 100644 path38
 create mode 100644 path39
 create mode 100644 path40
 create mode 100644 path41
 create mode 100644 path42
 create mode 100644 path43
 create mode 100644 path44
 create mode 100644 path45
 create mode 100644 path46
 create mode 100644 path47
 create mode 100644 path48
 create mode 100644 path49
 create mode 100644 path50
 create mode 100644 path51
 create mode 100644 path52
 create mode 100644 path53
 create mode 100644 path54
 create mode 100644 path55
 create mode 100644 path56
 create mode 100644 path57
 create mode 100644 path58
 create mode 100644 path59
 create mode 100644 path60
 create mode 100644 path61
 create mode 100644 path62
 create mode 100644 path63
 create mode 100644 path64
 create mode 100644 path65
 create mode 100644 path66
 create mode 100644 path67
 create mode 100644 path68
 create mode 100644 path69
 create mode 100644 path70
 create mode 100644 path71
 create mode 100644 path72
 create mode 100644 path73
 create mode 100644 path74
 create mode 100644 path75
 create mode 100644 path76
 create mode 100644 path77
 create mode 100644 path78
 create mode 100644 path79
 create mode 100644 path80
 create mode 100644 path81
 create mode 100644 path82
 create mode 100644 path83
 create mode 100644 path84
 create mode 100644 path85
 create mode 100644 path86
 create mode 100644 path87
 create mode 100644 path88
 create mode 100644 path89
 create mode 100644 path90
 create mode 100644 path91
 create mode 100644 path92
 create mode 100644 path93
 create mode 100644 path94
 create mode 100644 path95
 create mode 100644 path96
 create mode 100644 path97
 create mode 100644 path98
 create mode 100644 path99
warning: only found copies from modified paths due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 104 and retry the command.
ok 15 - setup for many rename source candidates

expecting success of 4001.16 'rename pretty print with nothing in common': 
	mkdir -p a/b/ &&
	: >a/b/c &&
	git add a/b/c &&
	git commit -m "create a/b/c" &&
	mkdir -p c/b/ &&
	git mv a/b/c c/b/a &&
	git commit -m "a/b/c -> c/b/a" &&
	git diff -M --summary HEAD^ HEAD >output &&
	test_i18ngrep " a/b/c => c/b/a " output &&
	git diff -M --stat HEAD^ HEAD >output &&
	test_i18ngrep " a/b/c => c/b/a " output

[master 5d0663c] create a/b/c
 Author: A U Thor <author@example.com>
 3 files changed, 17 insertions(+)
 create mode 100644 a/b/c
 create mode 100644 new-path
[master 24096e6] a/b/c -> c/b/a
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a/b/c => c/b/a (100%)
 rename a/b/c => c/b/a (100%)
 a/b/c => c/b/a | 0
ok 16 - rename pretty print with nothing in common

expecting success of 4001.17 'rename pretty print with common prefix': 
	mkdir -p c/d &&
	git mv c/b/a c/d/e &&
	git commit -m "c/b/a -> c/d/e" &&
	git diff -M --summary HEAD^ HEAD >output &&
	test_i18ngrep " c/{b/a => d/e} " output &&
	git diff -M --stat HEAD^ HEAD >output &&
	test_i18ngrep " c/{b/a => d/e} " output

[master e15a3a1] c/b/a -> c/d/e
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename c/{b/a => d/e} (100%)
 rename c/{b/a => d/e} (100%)
 c/{b/a => d/e} | 0
ok 17 - rename pretty print with common prefix

expecting success of 4001.18 'rename pretty print with common suffix': 
	mkdir d &&
	git mv c/d/e d/e &&
	git commit -m "c/d/e -> d/e" &&
	git diff -M --summary HEAD^ HEAD >output &&
	test_i18ngrep " {c/d => d}/e " output &&
	git diff -M --stat HEAD^ HEAD >output &&
	test_i18ngrep " {c/d => d}/e " output

[master aafbd77] c/d/e -> d/e
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {c/d => d}/e (100%)
 rename {c/d => d}/e (100%)
 {c/d => d}/e | 0
ok 18 - rename pretty print with common suffix

expecting success of 4001.19 'rename pretty print with common prefix and suffix': 
	mkdir d/f &&
	git mv d/e d/f/e &&
	git commit -m "d/e -> d/f/e" &&
	git diff -M --summary HEAD^ HEAD >output &&
	test_i18ngrep " d/{ => f}/e " output &&
	git diff -M --stat HEAD^ HEAD >output &&
	test_i18ngrep " d/{ => f}/e " output

[master 28b412a] d/e -> d/f/e
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename d/{ => f}/e (100%)
 rename d/{ => f}/e (100%)
 d/{ => f}/e | 0
ok 19 - rename pretty print with common prefix and suffix

expecting success of 4001.20 'rename pretty print common prefix and suffix overlap': 
	mkdir d/f/f &&
	git mv d/f/e d/f/f/e &&
	git commit -m "d/f/e d/f/f/e" &&
	git diff -M --summary HEAD^ HEAD >output &&
	test_i18ngrep " d/f/{ => f}/e " output &&
	git diff -M --stat HEAD^ HEAD >output &&
	test_i18ngrep " d/f/{ => f}/e " output

[master 272fc8d] d/f/e d/f/f/e
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename d/f/{ => f}/e (100%)
 rename d/f/{ => f}/e (100%)
 d/f/{ => f}/e | 0
ok 20 - rename pretty print common prefix and suffix overlap

expecting success of 4001.21 'diff-tree -l0 defaults to a big rename limit, not zero': 
	test_write_lines line1 line2 line3 >myfile &&
	git add myfile &&
	git commit -m x &&

	test_write_lines line1 line2 line4 >myotherfile &&
	git rm myfile &&
	git add myotherfile &&
	git commit -m x &&

	git diff-tree -M -l0 HEAD HEAD^ >actual &&
	# Verify that a rename from myotherfile to myfile was detected
	grep "myotherfile.*myfile" actual

[master a3d2e59] x
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 myfile
rm 'myfile'
[master ff4cac0] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename myfile => myotherfile (66%)
:100644 100644 cc8654bf0610eedacc646edaf4c1cbda59454836 83db48f84ec878fbfb30b46d16630e944e34f205 R066	myotherfile	myfile
ok 21 - diff-tree -l0 defaults to a big rename limit, not zero

expecting success of 4001.22 'basename similarity vs best similarity': 
	mkdir subdir &&
	test_write_lines line1 line2 line3 line4 line5 \
			 line6 line7 line8 line9 line10 >subdir/file.txt &&
	git add subdir/file.txt &&
	git commit -m "base txt" &&

	git rm subdir/file.txt &&
	test_write_lines line1 line2 line3 line4 line5 \
			  line6 line7 line8 >file.txt &&
	test_write_lines line1 line2 line3 line4 line5 \
			  line6 line7 line8 line9 >file.md &&
	git add file.txt file.md &&
	git commit -a -m "rename" &&
	git diff-tree -r -M --name-status HEAD^ HEAD >actual &&
	# subdir/file.txt is 88% similar to file.md, 78% similar to file.txt,
	# but since same basenames are checked first...
	cat >expected <<-\EOF &&
	A	file.md
	R078	subdir/file.txt	file.txt
	EOF
	test_cmp expected actual

[master 09a1aec] base txt
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 subdir/file.txt
rm 'subdir/file.txt'
[master 72a9c67] rename
 Author: A U Thor <author@example.com>
 2 files changed, 9 insertions(+), 2 deletions(-)
 create mode 100644 file.md
 rename subdir/file.txt => file.txt (78%)
ok 22 - basename similarity vs best similarity

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4003-diff-rename-1.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4003-diff-rename-1/.git/
expecting success of 4003.1 'prepare reference tree': COPYING_test_data >COPYING &&
     echo frotz >rezrov &&
    git update-index --add COPYING rezrov &&
    tree=$(git write-tree) &&
    echo $tree
f7f2b494dd94f6acf05bc19174516b590236eb2d
ok 1 - prepare reference tree

expecting success of 4003.2 'prepare work tree': sed -e s/HOWEVER/However/ <COPYING >COPYING.1 &&
    sed -e s/GPL/G.P.L/g <COPYING >COPYING.2 &&
    rm -f COPYING &&
    git update-index --add --remove COPYING COPYING.?
ok 2 - prepare work tree

expecting success of 4003.3 'validate output from rename/copy detection (#1)': compare_diff_patch current expected
ok 3 - validate output from rename/copy detection (#1)

expecting success of 4003.4 'prepare work tree again': mv COPYING.2 COPYING &&
     git update-index --add --remove COPYING COPYING.1 COPYING.2
ok 4 - prepare work tree again

expecting success of 4003.5 'validate output from rename/copy detection (#2)': compare_diff_patch current expected
ok 5 - validate output from rename/copy detection (#2)

expecting success of 4003.6 'prepare work tree once again': COPYING_test_data >COPYING &&
     git update-index --add --remove COPYING COPYING.1
ok 6 - prepare work tree once again

expecting success of 4003.7 'validate output from rename/copy detection (#3)': compare_diff_patch current expected
ok 7 - validate output from rename/copy detection (#3)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4004-diff-rename-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4004-diff-rename-symlink/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4004.1 'prepare reference tree': echo xyzzy | tr -d \\012 >yomin &&
     ln -s xyzzy frotz &&
    git update-index --add frotz yomin &&
    tree=$(git write-tree) &&
    echo $tree
e8a7292168115b2c189b56bd500aa179ca8d69ba
ok 1 - prepare reference tree

expecting success of 4004.2 'prepare work tree': mv frotz rezrov &&
     rm -f yomin &&
     ln -s xyzzy nitfol &&
     ln -s xzzzy bozbar &&
    git update-index --add --remove frotz rezrov nitfol bozbar yomin
ok 2 - prepare work tree

expecting success of 4004.3 'setup diff output': 
    GIT_DIFF_OPTS=--unified=0 git diff-index -C -p e8a7292168115b2c189b56bd500aa179ca8d69ba >current &&
    cat >expected <<\EOF
diff --git a/bozbar b/bozbar
new file mode 120000
--- /dev/null
+++ b/bozbar
@@ -0,0 +1 @@
+xzzzy
\ No newline at end of file
diff --git a/frotz b/nitfol
similarity index 100%
copy from frotz
copy to nitfol
diff --git a/frotz b/rezrov
similarity index 100%
rename from frotz
rename to rezrov
diff --git a/yomin b/yomin
deleted file mode 100644
--- a/yomin
+++ /dev/null
@@ -1 +0,0 @@
-xyzzy
\ No newline at end of file
EOF

ok 3 - setup diff output

expecting success of 4004.4 'validate diff output': compare_diff_patch current expected
ok 4 - validate diff output

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4002-diff-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4002-diff-basic/.git/
expecting success of 4002.1 'adding test file NN and Z/NN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 1 - adding test file NN and Z/NN

expecting success of 4002.2 'adding test file ND and Z/ND': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 2 - adding test file ND and Z/ND

expecting success of 4002.3 'adding test file NM and Z/NM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 3 - adding test file NM and Z/NM

expecting success of 4002.4 'adding test file DN and Z/DN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 4 - adding test file DN and Z/DN

expecting success of 4002.5 'adding test file DD and Z/DD': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 5 - adding test file DD and Z/DD

expecting success of 4002.6 'adding test file DM and Z/DM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 6 - adding test file DM and Z/DM

expecting success of 4002.7 'adding test file MN and Z/MN': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 7 - adding test file MN and Z/MN

expecting success of 4002.8 'adding test file MD and Z/MD': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 8 - adding test file MD and Z/MD

expecting success of 4002.9 'adding test file MM and Z/MM': 
	    git update-index --add $p &&
	    git update-index --add Z/$p
    
ok 9 - adding test file MM and Z/MM

expecting success of 4002.10 'adding test file SS': 
	git update-index --add SS

ok 10 - adding test file SS

expecting success of 4002.11 'adding test file TT': 
	git update-index --add TT

ok 11 - adding test file TT

expecting success of 4002.12 'prepare initial tree': 
	tree_O=$(git write-tree)

ok 12 - prepare initial tree

expecting success of 4002.13 'change in branch A (removal)': 
	git update-index --remove $to_remove

ok 13 - change in branch A (removal)

expecting success of 4002.14 'change in branch A (modification)': 
		git update-index $p
	
ok 14 - change in branch A (modification)

expecting success of 4002.15 'change in branch A (modification)': 
		git update-index $p
	
ok 15 - change in branch A (modification)

expecting success of 4002.16 'change in branch A (modification)': 
		git update-index $p
	
ok 16 - change in branch A (modification)

expecting success of 4002.17 'change in branch A (modification)': 
		git update-index $p
	
ok 17 - change in branch A (modification)

expecting success of 4002.18 'change in branch A (modification)': 
		git update-index $p
	
ok 18 - change in branch A (modification)

expecting success of 4002.19 'change in branch A (modification)': 
		git update-index $p
	
ok 19 - change in branch A (modification)

expecting success of 4002.20 'change in branch A (addition)': 
		git update-index --add $p
	
ok 20 - change in branch A (addition)

expecting success of 4002.21 'change in branch A (addition)': 
		git update-index --add $p
	
ok 21 - change in branch A (addition)

expecting success of 4002.22 'change in branch A (addition)': 
		git update-index --add $p
	
ok 22 - change in branch A (addition)

expecting success of 4002.23 'change in branch A (addition)': 
		git update-index --add $p
	
ok 23 - change in branch A (addition)

expecting success of 4002.24 'change in branch A (addition)': 
	git update-index --add LL &&
	git update-index SS

ok 24 - change in branch A (addition)

expecting success of 4002.25 'change in branch A (edit)': 
	git update-index TT

ok 25 - change in branch A (edit)

expecting success of 4002.26 'change in branch A (change file to directory)': 
	git update-index --add DF/DF

ok 26 - change in branch A (change file to directory)

expecting success of 4002.27 'recording branch A tree': 
	tree_A=$(git write-tree)

ok 27 - recording branch A tree

expecting success of 4002.28 'reading original tree and checking out': 
	git read-tree $tree_O &&
	git checkout-index -a

ok 28 - reading original tree and checking out

expecting success of 4002.29 'change in branch B (removal)': 
	git update-index --remove $to_remove

ok 29 - change in branch B (removal)

expecting success of 4002.30 'change in branch B (modification)': 
		git update-index $p
	
ok 30 - change in branch B (modification)

expecting success of 4002.31 'change in branch B (modification)': 
		git update-index $p
	
ok 31 - change in branch B (modification)

expecting success of 4002.32 'change in branch B (modification)': 
		git update-index $p
	
ok 32 - change in branch B (modification)

expecting success of 4002.33 'change in branch B (modification)': 
		git update-index $p
	
ok 33 - change in branch B (modification)

expecting success of 4002.34 'change in branch B (modification)': 
		git update-index $p
	
ok 34 - change in branch B (modification)

expecting success of 4002.35 'change in branch B (modification)': 
		git update-index $p
	
ok 35 - change in branch B (modification)

expecting success of 4002.36 'change in branch B (addition)': 
		git update-index --add $p
	
ok 36 - change in branch B (addition)

expecting success of 4002.37 'change in branch B (addition)': 
		git update-index --add $p
	
ok 37 - change in branch B (addition)

expecting success of 4002.38 'change in branch B (addition)': 
		git update-index --add $p
	
ok 38 - change in branch B (addition)

expecting success of 4002.39 'change in branch B (addition)': 
		git update-index --add $p
	
ok 39 - change in branch B (addition)

expecting success of 4002.40 'change in branch B (addition and modification)': 
	git update-index --add LL &&
	git update-index SS

ok 40 - change in branch B (addition and modification)

expecting success of 4002.41 'change in branch B (modification)': 
	git update-index TT

ok 41 - change in branch B (modification)

expecting success of 4002.42 'change in branch B (addition of a file to conflict with directory)': 
	git update-index --add DF

ok 42 - change in branch B (addition of a file to conflict with directory)

expecting success of 4002.43 'recording branch B tree': 
	tree_B=$(git write-tree)

ok 43 - recording branch B tree

expecting success of 4002.44 'keep contents of 3 trees for easy access': 
	rm -f .git/index &&
	git read-tree $tree_O &&
	mkdir .orig-O &&
	git checkout-index --prefix=.orig-O/ -f -q -a &&
	rm -f .git/index &&
	git read-tree $tree_A &&
	mkdir .orig-A &&
	git checkout-index --prefix=.orig-A/ -f -q -a &&
	rm -f .git/index &&
	git read-tree $tree_B &&
	mkdir .orig-B &&
	git checkout-index --prefix=.orig-B/ -f -q -a

ok 44 - keep contents of 3 trees for easy access

expecting success of 4002.45 'diff-tree of known trees.': git diff-tree $tree_O $tree_A >.test-a &&
     cmp -s .test-a .test-plain-OA
ok 45 - diff-tree of known trees.

expecting success of 4002.46 'diff-tree of known trees.': git diff-tree -r $tree_O $tree_A >.test-a &&
     cmp -s .test-a .test-recursive-OA
ok 46 - diff-tree of known trees.

expecting success of 4002.47 'diff-tree of known trees.': git diff-tree $tree_O $tree_B >.test-a &&
     cmp -s .test-a .test-plain-OB
ok 47 - diff-tree of known trees.

expecting success of 4002.48 'diff-tree of known trees.': git diff-tree -r $tree_O $tree_B >.test-a &&
     cmp -s .test-a .test-recursive-OB
ok 48 - diff-tree of known trees.

expecting success of 4002.49 'diff-tree of known trees.': git diff-tree $tree_A $tree_B >.test-a &&
     cmp -s .test-a .test-plain-AB
ok 49 - diff-tree of known trees.

expecting success of 4002.50 'diff-tree of known trees.': git diff-tree -r $tree_A $tree_B >.test-a &&
     cmp -s .test-a .test-recursive-AB
ok 50 - diff-tree of known trees.

expecting success of 4002.51 'diff-tree --stdin of known trees.': echo $tree_A $tree_B | git diff-tree --stdin > .test-a &&
     echo $tree_A $tree_B > .test-plain-ABx &&
     cat .test-plain-AB >> .test-plain-ABx &&
     cmp -s .test-a .test-plain-ABx
ok 51 - diff-tree --stdin of known trees.

expecting success of 4002.52 'diff-tree --stdin of known trees.': echo $tree_A $tree_B | git diff-tree -r --stdin > .test-a &&
     echo $tree_A $tree_B > .test-recursive-ABx &&
     cat .test-recursive-AB >> .test-recursive-ABx &&
     cmp -s .test-a .test-recursive-ABx
ok 52 - diff-tree --stdin of known trees.

expecting success of 4002.53 'diff-cache O with A in cache': git read-tree $tree_A &&
     git diff-index --cached $tree_O >.test-a &&
     cmp -s .test-a .test-recursive-OA
ok 53 - diff-cache O with A in cache

expecting success of 4002.54 'diff-cache O with B in cache': git read-tree $tree_B &&
     git diff-index --cached $tree_O >.test-a &&
     cmp -s .test-a .test-recursive-OB
ok 54 - diff-cache O with B in cache

expecting success of 4002.55 'diff-cache A with B in cache': git read-tree $tree_B &&
     git diff-index --cached $tree_A >.test-a &&
     cmp -s .test-a .test-recursive-AB
ok 55 - diff-cache A with B in cache

expecting success of 4002.56 'diff-files with O in cache and A checked out': rm -fr Z [A-Z][A-Z] &&
     git read-tree $tree_A &&
     git checkout-index -f -a &&
     git read-tree --reset $tree_O &&
     test_must_fail git update-index --refresh -q &&
     git diff-files >.test-a &&
     cmp_diff_files_output .test-a .test-recursive-OA
DD: needs update
DM: needs update
DN: needs update
MD: needs update
MM: needs update
MN: needs update
SS: needs update
TT: needs update
Z/DD: needs update
Z/DM: needs update
Z/DN: needs update
Z/MD: needs update
Z/MM: needs update
Z/MN: needs update
ok 56 - diff-files with O in cache and A checked out

expecting success of 4002.57 'diff-files with O in cache and B checked out': rm -fr Z [A-Z][A-Z] &&
     git read-tree $tree_B &&
     git checkout-index -f -a &&
     git read-tree --reset $tree_O &&
     test_must_fail git update-index --refresh -q &&
     git diff-files >.test-a &&
     cmp_diff_files_output .test-a .test-recursive-OB
DD: needs update
DM: needs update
MD: needs update
MM: needs update
ND: needs update
NM: needs update
SS: needs update
TT: needs update
Z/DD: needs update
Z/DM: needs update
Z/MD: needs update
Z/MM: needs update
Z/ND: needs update
Z/NM: needs update
ok 57 - diff-files with O in cache and B checked out

expecting success of 4002.58 'diff-files with A in cache and B checked out': rm -fr Z [A-Z][A-Z] &&
     git read-tree $tree_B &&
     git checkout-index -f -a &&
     git read-tree --reset $tree_A &&
     test_must_fail git update-index --refresh -q &&
     git diff-files >.test-a &&
     cmp_diff_files_output .test-a .test-recursive-AB
AA: needs update
AN: needs update
DF/DF: needs update
MD: needs update
MM: needs update
MN: needs update
ND: needs update
NM: needs update
TT: needs update
Z/AA: needs update
Z/AN: needs update
Z/MD: needs update
Z/MM: needs update
Z/MN: needs update
Z/ND: needs update
Z/NM: needs update
ok 58 - diff-files with A in cache and B checked out

expecting success of 4002.59 'diff-tree O A == diff-tree -R A O': git diff-tree $tree_O $tree_A >.test-a &&
    git diff-tree -R $tree_A $tree_O >.test-b &&
    cmp -s .test-a .test-b
ok 59 - diff-tree O A == diff-tree -R A O

expecting success of 4002.60 'diff-tree -r O A == diff-tree -r -R A O': git diff-tree -r $tree_O $tree_A >.test-a &&
    git diff-tree -r -R $tree_A $tree_O >.test-b &&
    cmp -s .test-a .test-b
ok 60 - diff-tree -r O A == diff-tree -r -R A O

expecting success of 4002.61 'diff-tree B A == diff-tree -R A B': git diff-tree $tree_B $tree_A >.test-a &&
    git diff-tree -R $tree_A $tree_B >.test-b &&
    cmp -s .test-a .test-b
ok 61 - diff-tree B A == diff-tree -R A B

expecting success of 4002.62 'diff-tree -r B A == diff-tree -r -R A B': git diff-tree -r $tree_B $tree_A >.test-a &&
    git diff-tree -r -R $tree_A $tree_B >.test-b &&
    cmp -s .test-a .test-b
ok 62 - diff-tree -r B A == diff-tree -r -R A B

expecting success of 4002.63 'diff can read from stdin': test_must_fail git diff --no-index -- MN - < NN |
        grep -v "^index" | sed "s#/-#/NN#" >.test-a &&
    test_must_fail git diff --no-index -- MN NN |
        grep -v "^index" >.test-b &&
    test_cmp .test-a .test-b
ok 63 - diff can read from stdin

# passed all 63 test(s)
1..63
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4005-diff-rename-2.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4005-diff-rename-2/.git/
expecting success of 4005.1 'setup reference tree': 
	COPYING_test_data >COPYING &&
	echo frotz >rezrov &&
	git update-index --add COPYING rezrov &&
	tree=$(git write-tree) &&
	echo $tree &&
	sed -e "s/HOWEVER/However/" <COPYING >COPYING.1 &&
	sed -e "s/GPL/G.P.L/g" <COPYING >COPYING.2 &&
	origoid=$(git hash-object COPYING) &&
	oid1=$(git hash-object COPYING.1) &&
	oid2=$(git hash-object COPYING.2)

f7f2b494dd94f6acf05bc19174516b590236eb2d
ok 1 - setup reference tree

expecting success of 4005.2 'validate output from rename/copy detection (#1)': 
	rm -f COPYING &&
	git update-index --add --remove COPYING COPYING.? &&

	cat <<-EOF >expected &&
	:100644 100644 $origoid $oid1 C1234	COPYING	COPYING.1
	:100644 100644 $origoid $oid2 R1234	COPYING	COPYING.2
	EOF
	git diff-index -C $tree >current &&
	compare_diff_raw expected current

ok 2 - validate output from rename/copy detection (#1)

expecting success of 4005.3 'validate output from rename/copy detection (#2)': 
	mv COPYING.2 COPYING &&
	git update-index --add --remove COPYING COPYING.1 COPYING.2 &&

	cat <<-EOF >expected &&
	:100644 100644 $origoid $oid2 M	COPYING
	:100644 100644 $origoid $oid1 C1234	COPYING	COPYING.1
	EOF
	git diff-index -C $tree >current &&
	compare_diff_raw current expected

ok 3 - validate output from rename/copy detection (#2)

expecting success of 4005.4 'validate output from rename/copy detection (#3)': 
	COPYING_test_data >COPYING &&
	git update-index --add --remove COPYING COPYING.1 &&

	cat <<-EOF >expected &&
	:100644 100644 $origoid $oid1 C1234	COPYING	COPYING.1
	EOF
	git diff-index -C --find-copies-harder $tree >current &&
	compare_diff_raw current expected

ok 4 - validate output from rename/copy detection (#3)

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4006-diff-mode.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4006-diff-mode/.git/
expecting success of 4006.1 'setup': 
	echo frotz >rezrov &&
	git update-index --add rezrov &&
	tree=$(git write-tree) &&
	echo $tree

5189e2f1ba2c164fa2006e4f8f4e4ec56f15291e
ok 1 - setup

expecting success of 4006.2 'chmod': 
	test_chmod +x rezrov &&
	git diff-index $tree >current &&
	sed -e "$sed_script" <current >check &&
	echo ":100644 100755 X X M	rezrov" >expected &&
	test_cmp expected check

ok 2 - chmod

expecting success of 4006.3 'prepare binary file': 
	git commit -m one &&
	test_commit --printf two binbin "\00\01\02\03\04\05\06"

[master (root-commit) d232af0] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100755 rezrov
[master a89ae18] two
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 binbin
ok 3 - prepare binary file

expecting success of 4006.4 '--stat output after text chmod': 
	test_chmod -x rezrov &&
	cat >expect <<-\EOF &&
	 rezrov | 0
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	git diff HEAD --stat >actual &&
	test_cmp expect actual

ok 4 - --stat output after text chmod

expecting success of 4006.5 '--shortstat output after text chmod': 
	tail -n 1 <expect >expect.short &&
	git diff HEAD --shortstat >actual &&
	test_cmp expect.short actual

ok 5 - --shortstat output after text chmod

expecting success of 4006.6 '--stat output after binary chmod': 
	test_chmod +x binbin &&
	cat >expect <<-EOF &&
	 binbin | Bin
	 rezrov |   0
	 2 files changed, 0 insertions(+), 0 deletions(-)
	EOF
	git diff HEAD --stat >actual &&
	test_cmp expect actual

ok 6 - --stat output after binary chmod

expecting success of 4006.7 '--shortstat output after binary chmod': 
	tail -n 1 <expect >expect.short &&
	git diff HEAD --shortstat >actual &&
	test_cmp expect.short actual

ok 7 - --shortstat output after binary chmod

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4007-rename-3.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4007-rename-3/.git/
expecting success of 4007.1 'prepare reference tree': 
	mkdir path0 path1 &&
	COPYING_test_data >path0/COPYING &&
	git update-index --add path0/COPYING &&
	tree=$(git write-tree) &&
	blob=$(git rev-parse :path0/COPYING)

ok 1 - prepare reference tree

expecting success of 4007.2 'prepare work tree': 
	cp path0/COPYING path1/COPYING &&
	git update-index --add --remove path0/COPYING path1/COPYING

ok 2 - prepare work tree

expecting success of 4007.3 'copy detection': 
	git diff-index -C --find-copies-harder $tree >current &&
	compare_diff_raw current expected

ok 3 - copy detection

expecting success of 4007.4 'copy detection, cached': 
	git diff-index -C --find-copies-harder --cached $tree >current &&
	compare_diff_raw current expected

ok 4 - copy detection, cached

expecting success of 4007.5 'copy, limited to a subtree': 
	git diff-index -C --find-copies-harder $tree path1 >current &&
	compare_diff_raw current expected

ok 5 - copy, limited to a subtree

expecting success of 4007.6 'tweak work tree': 
	rm -f path0/COPYING &&
	git update-index --remove path0/COPYING

ok 6 - tweak work tree

expecting success of 4007.7 'rename detection': 
	git diff-index -C --find-copies-harder $tree >current &&
	compare_diff_raw current expected

ok 7 - rename detection

expecting success of 4007.8 'rename, limited to a subtree': 
	git diff-index -C --find-copies-harder $tree path1 >current &&
	compare_diff_raw current expected

ok 8 - rename, limited to a subtree

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3906-stash-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/.git/
expecting success of 3906.1 'git_stash: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Saved working directory and index state WIP on no_submodule: 27611a5 Base
Merging Version stash was based on with Stashed changes
On branch no_submodule
Your branch is up to date with 'origin/no_submodule'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   .gitmodules
	new file:   sub1
	new file:   uninitialized_sub

Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_stash: added submodule creates empty directory

checking known breakage of 3906.2 'git_stash: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Saved working directory and index state WIP on no_submodule: 27611a5 Base
--- expect	2022-12-28 07:43:13.489763735 +0000
+++ actual	2022-12-28 07:43:13.714772012 +0000
@@ -2,5 +2,3 @@
 expect
 file1
 file2
-
-sub1:
not ok 2 - git_stash: added submodule leaves existing empty directory alone # TODO known breakage

checking known breakage of 3906.3 'git_stash: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Saved working directory and index state WIP on replace_sub1_with_file: 2364f5a Replace sub1 with file
Merging Version stash was based on with Stashed changes
On branch replace_sub1_with_file
Your branch is up to date with 'origin/replace_sub1_with_file'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   .gitmodules
	deleted:    sub1

no changes added to commit (use "git add" and/or "git commit -a")
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 cf8d5939a67bef46c85d0f50732c37b6fac1d92a M	.gitmodules
:160000 100644 63c430421a9604f896526f8a04236bdfe3ac1fc1 d95f3ad14dee633a758d2e331151e950dd13e4ed T	sub1
not ok 3 - git_stash: replace tracked file with submodule creates empty directory # TODO known breakage

checking known breakage of 3906.4 'git_stash: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Saved working directory and index state WIP on replace_sub1_with_directory: cb28587 Replace sub1 with directory
Merging Version stash was based on with Stashed changes
error: 'sub1/file1' appears as both a file and as a directory
error: 'sub1/file2' appears as both a file and as a directory
error: 'sub1/file3' appears as both a file and as a directory
On branch replace_sub1_with_directory
Your branch is up to date with 'origin/replace_sub1_with_directory'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   sub1
	deleted:    sub1/file1
	deleted:    sub1/file2
	deleted:    sub1/file3

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   .gitmodules

'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 cf8d5939a67bef46c85d0f50732c37b6fac1d92a M	.gitmodules
not ok 4 - git_stash: replace directory with submodule # TODO known breakage

checking known breakage of 3906.5 'git_stash: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Saved working directory and index state WIP on add_sub1: 09bcf53 Add sub1
warning: unable to rmdir 'sub1': Directory not empty
Merging Version stash was based on with Stashed changes
On branch add_sub1
Your branch is up to date with 'origin/add_sub1'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    sub1

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    .gitmodules

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sub1/

'actual' is not empty, it contains:
:000000 100644 0000000000000000000000000000000000000000 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 A	.gitmodules
:000000 160000 0000000000000000000000000000000000000000 63c430421a9604f896526f8a04236bdfe3ac1fc1 A	uninitialized_sub
not ok 5 - git_stash: removed submodule leaves submodule directory and its contents in place # TODO known breakage

checking known breakage of 3906.6 'git_stash: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Saved working directory and index state WIP on add_sub1: 09bcf53 Add sub1
warning: unable to rmdir 'sub1': Directory not empty
Merging Version stash was based on with Stashed changes
On branch add_sub1
Your branch is up to date with 'origin/add_sub1'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    sub1

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    .gitmodules

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sub1/

'actual' is not empty, it contains:
:000000 100644 0000000000000000000000000000000000000000 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 A	.gitmodules
:000000 160000 0000000000000000000000000000000000000000 63c430421a9604f896526f8a04236bdfe3ac1fc1 A	uninitialized_sub
not ok 6 - git_stash: removed submodule leaves submodule containing a .git directory alone # TODO known breakage

expecting success of 3906.7 'git_stash: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
ok 7 - git_stash: replace submodule with a directory must fail

expecting success of 3906.8 'git_stash: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
ok 8 - git_stash: replace submodule containing a .git directory with a directory must fail

checking known breakage of 3906.9 'git_stash: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u -m replace_sub1_with_file
not ok 9 - git_stash: replace submodule with a file must fail # TODO known breakage

checking known breakage of 3906.10 'git_stash: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git read-tree -u -m replace_sub1_with_file
not ok 10 - git_stash: replace submodule containing a .git directory with a file must fail # TODO known breakage

checking known breakage of 3906.11 'git_stash: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
No local changes to save
--- expect	2022-12-28 07:43:26.485241759 +0000
+++ actual	2022-12-28 07:43:26.605246173 +0000
@@ -1,3 +1,4 @@
+M  sub1
 actual
 expect
 file1
not ok 11 - git_stash: modified submodule does not update submodule work tree # TODO known breakage

checking known breakage of 3906.12 'git_stash: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
No local changes to save
--- expect	2022-12-28 07:43:27.955295832 +0000
+++ actual	2022-12-28 07:43:28.085300614 +0000
@@ -1,3 +1,4 @@
+M  sub1
 actual
 expect
 file1
not ok 12 - git_stash: modified submodule does not update submodule work tree to invalid commit # TODO known breakage

checking known breakage of 3906.13 'git_stash: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
No local changes to save
--- expect	2022-12-28 07:43:28.730324340 +0000
+++ actual	2022-12-28 07:43:28.855328938 +0000
@@ -1,3 +1,4 @@
+M  sub1
 actual
 expect
 file1
not ok 13 - git_stash: modified submodule does not update submodule work tree from invalid commit # TODO known breakage

expecting success of 3906.14 'git_stash: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
ok 14 - git_stash: added submodule doesn't remove untracked unignored file with same name

expecting success of 3906.15 'stash push with submodule.recurse=true preserves dirty submodule worktree': 
	setup_basic &&
	(
		cd main &&
		git config submodule.recurse true &&
		echo "x" >main_file.t &&
		echo "y" >sub/sub_file.t &&
		git stash push &&
		test_must_fail git -C sub diff --quiet
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/sub/.git/
[master (root-commit) af789f4] sub_file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub_file.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/main/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/main/sub'...
done.
[master (root-commit) d3a5de8] main_file
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 main_file.t
 create mode 160000 sub
Saved working directory and index state WIP on master: d3a5de8 main_file
ok 15 - stash push with submodule.recurse=true preserves dirty submodule worktree

expecting success of 3906.16 'stash push and pop with submodule.recurse=true preserves dirty submodule worktree': 
	setup_basic &&
	(
		cd main &&
		git config submodule.recurse true &&
		echo "x" >main_file.t &&
		echo "y" >sub/sub_file.t &&
		git stash push &&
		git stash pop &&
		test_must_fail git -C sub diff --quiet
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/sub/.git/
[master (root-commit) af789f4] sub_file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub_file.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/main/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t3906-stash-submodule/main/sub'...
done.
[master (root-commit) d3a5de8] main_file
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 main_file.t
 create mode 160000 sub
Saved working directory and index state WIP on master: d3a5de8 main_file
Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
	modified:   main_file.t
	modified:   sub (modified content)

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (ee331cc507c2f3e6ac052edd8b1cc51dc982b38c)
ok 16 - stash push and pop with submodule.recurse=true preserves dirty submodule worktree

# still have 10 known breakage(s)
# passed all remaining 6 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4008-diff-break-rewrite.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4008-diff-break-rewrite/.git/
expecting success of 4008.1 'setup': 
	echo some dissimilar content >file0 &&
	COPYING_test_data >file1 &&
	blob0_id=$(git hash-object file0) &&
	blob1_id=$(git hash-object file1) &&
	git update-index --add file0 file1 &&
	git tag reference $(git write-tree)

ok 1 - setup

expecting success of 4008.2 'change file1 with copy-edit of file0 and remove file0': 
	sed -e "s/git/GIT/" file0 >file1 &&
	blob2_id=$(git hash-object file1) &&
	rm -f file0 &&
	git update-index --remove file0 file1

ok 2 - change file1 with copy-edit of file0 and remove file0

expecting success of 4008.3 'run diff with -B (#1)': 
	git diff-index -B --cached reference >current &&
	cat >expect <<-EOF &&
	:100644 000000 $blob0_id $ZERO_OID D	file0
	:100644 100644 $blob1_id $blob2_id M100	file1
	EOF
	compare_diff_raw expect current

ok 3 - run diff with -B (#1)

expecting success of 4008.4 'run diff with -B and -M (#2)': 
	git diff-index -B -M reference >current &&
	cat >expect <<-EOF &&
	:100644 100644 $blob0_id $blob2_id R100	file0	file1
	EOF
	compare_diff_raw expect current

ok 4 - run diff with -B and -M (#2)

expecting success of 4008.5 'swap file0 and file1': 
	rm -f file0 file1 &&
	git read-tree -m reference &&
	git checkout-index -f -u -a &&
	mv file0 tmp &&
	mv file1 file0 &&
	mv tmp file1 &&
	git update-index file0 file1

ok 5 - swap file0 and file1

expecting success of 4008.6 'run diff with -B (#3)': 
	git diff-index -B reference >current &&
	cat >expect <<-EOF &&
	:100644 100644 $blob0_id $blob1_id M100	file0
	:100644 100644 $blob1_id $blob0_id M100	file1
	EOF
	compare_diff_raw expect current

ok 6 - run diff with -B (#3)

expecting success of 4008.7 'run diff with -B and -M (#4)': 
	git diff-index -B -M reference >current &&
	cat >expect <<-EOF &&
	:100644 100644 $blob1_id $blob1_id R100	file1	file0
	:100644 100644 $blob0_id $blob0_id R100	file0	file1
	EOF
	compare_diff_raw expect current

ok 7 - run diff with -B and -M (#4)

expecting success of 4008.8 'make file0 into something completely different': 
	rm -f file0 &&
	test_ln_s_add frotz file0 &&
	slink_id=$(printf frotz | git hash-object --stdin) &&
	git update-index file1

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 8 - make file0 into something completely different

expecting success of 4008.9 'run diff with -B (#5)': 
	git diff-index -B reference >current &&
	cat >expect <<-EOF &&
	:100644 120000 $blob0_id $slink_id T	file0
	:100644 100644 $blob1_id $blob0_id M100	file1
	EOF
	compare_diff_raw expect current

ok 9 - run diff with -B (#5)

expecting success of 4008.10 'run diff with -B -M (#6)': 
	git diff-index -B -M reference >current &&

	# file0 changed from regular to symlink.  file1 is the same as the preimage
	# of file0.  Because the change does not make file0 disappear, file1 is
	# denoted as a copy of file0
	cat >expect <<-EOF &&
	:100644 120000 $blob0_id $slink_id T	file0
	:100644 100644 $blob0_id $blob0_id C	file0	file1
	EOF
	compare_diff_raw expect current

ok 10 - run diff with -B -M (#6)

expecting success of 4008.11 'run diff with -M (#7)': 
	git diff-index -M reference >current &&

	# This should not mistake file0 as the copy source of new file1
	# due to type differences.
	cat >expect <<-EOF &&
	:100644 120000 $blob0_id $slink_id T	file0
	:100644 100644 $blob1_id $blob0_id M	file1
	EOF
	compare_diff_raw expect current

ok 11 - run diff with -M (#7)

expecting success of 4008.12 'file1 edited to look like file0 and file0 rename-edited to file2': 
	rm -f file0 file1 &&
	git read-tree -m reference &&
	git checkout-index -f -u -a &&
	sed -e "s/git/GIT/" file0 >file1 &&
	sed -e "s/git/GET/" file0 >file2 &&
	blob3_id=$(git hash-object file2) &&
	rm -f file0 &&
	git update-index --add --remove file0 file1 file2

ok 12 - file1 edited to look like file0 and file0 rename-edited to file2

expecting success of 4008.13 'run diff with -B (#8)': 
	git diff-index -B reference >current &&
	cat >expect <<-EOF &&
	:100644 000000 $blob0_id $ZERO_OID D	file0
	:100644 100644 $blob1_id $blob2_id M100	file1
	:000000 100644 $ZERO_OID $blob3_id A	file2
	EOF
	compare_diff_raw expect current

ok 13 - run diff with -B (#8)

expecting success of 4008.14 'run diff with -B -C (#9)': 
	git diff-index -B -C reference >current &&
	cat >expect <<-EOF &&
	:100644 100644 $blob0_id $blob2_id C095	file0	file1
	:100644 100644 $blob0_id $blob3_id R095	file0	file2
	EOF
	compare_diff_raw expect current

ok 14 - run diff with -B -C (#9)

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4009-diff-rename-4.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4009-diff-rename-4/.git/
expecting success of 4009.1 'prepare reference tree': COPYING_test_data >COPYING &&
     echo frotz >rezrov &&
    git update-index --add COPYING rezrov &&
    orig=$(git hash-object COPYING) &&
    tree=$(git write-tree) &&
    echo $tree
f7f2b494dd94f6acf05bc19174516b590236eb2d
ok 1 - prepare reference tree

expecting success of 4009.2 'prepare work tree': sed -e s/HOWEVER/However/ <COPYING >COPYING.1 &&
    sed -e s/GPL/G.P.L/g <COPYING >COPYING.2 &&
    rm -f COPYING &&
    c1=$(git hash-object COPYING.1) &&
    c2=$(git hash-object COPYING.2) &&
    git update-index --add --remove COPYING COPYING.?
ok 2 - prepare work tree

expecting success of 4009.3 'validate output from rename/copy detection (#1)': compare_diff_raw_z current expected
ok 3 - validate output from rename/copy detection (#1)

expecting success of 4009.4 'prepare work tree again': mv COPYING.2 COPYING &&
     git update-index --add --remove COPYING COPYING.1 COPYING.2
ok 4 - prepare work tree again

expecting success of 4009.5 'validate output from rename/copy detection (#2)': compare_diff_raw_z current expected
ok 5 - validate output from rename/copy detection (#2)

expecting success of 4009.6 'prepare work tree once again': COPYING_test_data >COPYING &&
     git update-index --add --remove COPYING COPYING.1
ok 6 - prepare work tree once again

expecting success of 4009.7 'validate output from rename/copy detection (#3)': compare_diff_raw_z current expected
ok 7 - validate output from rename/copy detection (#3)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4011-diff-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4011-diff-symlink/.git/
expecting success of 4011.1 'diff new symlink and file': 
	symlink=$(symlink_oid xyzzy) &&
	cat >expected <<-EOF &&
	diff --git a/frotz b/frotz
	new file mode 120000
	index 0000000..$symlink
	--- /dev/null
	+++ b/frotz
	@@ -0,0 +1 @@
	+xyzzy
	\ No newline at end of file
	diff --git a/nitfol b/nitfol
	new file mode 100644
	index 0000000..$symlink
	--- /dev/null
	+++ b/nitfol
	@@ -0,0 +1 @@
	+xyzzy
	EOF

	# the empty tree
	git update-index &&
	tree=$(git write-tree) &&

	test_ln_s_add xyzzy frotz &&
	echo xyzzy >nitfol &&
	git update-index --add nitfol &&
	GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
	compare_diff_patch expected current

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 1 - diff new symlink and file

expecting success of 4011.2 'diff unchanged symlink and file': 
	tree=$(git write-tree) &&
	git update-index frotz nitfol &&
	test -z "$(git diff-index --name-only $tree)"

ok 2 - diff unchanged symlink and file

expecting success of 4011.3 'diff removed symlink and file': 
	cat >expected <<-EOF &&
	diff --git a/frotz b/frotz
	deleted file mode 120000
	index $symlink..0000000
	--- a/frotz
	+++ /dev/null
	@@ -1 +0,0 @@
	-xyzzy
	\ No newline at end of file
	diff --git a/nitfol b/nitfol
	deleted file mode 100644
	index $symlink..0000000
	--- a/nitfol
	+++ /dev/null
	@@ -1 +0,0 @@
	-xyzzy
	EOF
	mv frotz frotz2 &&
	mv nitfol nitfol2 &&
	git diff-index -M -p $tree >current &&
	compare_diff_patch expected current

ok 3 - diff removed symlink and file

expecting success of 4011.4 'diff identical, but newly created symlink and file': 
	>expected &&
	rm -f frotz nitfol &&
	echo xyzzy >nitfol &&
	test-tool chmtime +10 nitfol &&
	if test_have_prereq SYMLINKS
	then
		ln -s xyzzy frotz
	else
		printf xyzzy >frotz
		# the symlink property propagates from the index
	fi &&
	git diff-index -M -p $tree >current &&
	compare_diff_patch expected current &&

	>expected &&
	git diff-index -M -p -w $tree >current &&
	compare_diff_patch expected current

ok 4 - diff identical, but newly created symlink and file

expecting success of 4011.5 'diff different symlink and file': 
	new=$(symlink_oid yxyyz) &&
	cat >expected <<-EOF &&
	diff --git a/frotz b/frotz
	index $symlink..$new 120000
	--- a/frotz
	+++ b/frotz
	@@ -1 +1 @@
	-xyzzy
	\ No newline at end of file
	+yxyyz
	\ No newline at end of file
	diff --git a/nitfol b/nitfol
	index $symlink..$new 100644
	--- a/nitfol
	+++ b/nitfol
	@@ -1 +1 @@
	-xyzzy
	+yxyyz
	EOF
	rm -f frotz &&
	if test_have_prereq SYMLINKS
	then
		ln -s yxyyz frotz
	else
		printf yxyyz >frotz
		# the symlink property propagates from the index
	fi &&
	echo yxyyz >nitfol &&
	git diff-index -M -p $tree >current &&
	compare_diff_patch expected current

ok 5 - diff different symlink and file

expecting success of 4011.6 'diff symlinks with non-existing targets': 
	ln -s narf pinky &&
	ln -s take\ over brain &&
	test_must_fail git diff --no-index pinky brain >output 2>output.err &&
	grep narf output &&
	test_must_be_empty output.err

-narf
ok 6 - diff symlinks with non-existing targets

expecting success of 4011.7 'setup symlinks with attributes': 
	echo "*.bin diff=bin" >>.gitattributes &&
	echo content >file.bin &&
	ln -s file.bin link.bin &&
	git add -N file.bin link.bin

ok 7 - setup symlinks with attributes

expecting success of 4011.8 'symlinks do not respect userdiff config by path': 
	file=$(short_oid file.bin) &&
	link=$(symlink_oid file.bin) &&
	cat >expect <<-EOF &&
	diff --git a/file.bin b/file.bin
	new file mode 100644
	index 0000000..$file
	Binary files /dev/null and b/file.bin differ
	diff --git a/link.bin b/link.bin
	new file mode 120000
	index 0000000..$link
	--- /dev/null
	+++ b/link.bin
	@@ -0,0 +1 @@
	+file.bin
	\ No newline at end of file
	EOF
	git config diff.bin.binary true &&
	git diff file.bin link.bin >actual &&
	test_cmp expect actual

ok 8 - symlinks do not respect userdiff config by path

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4010-diff-pathspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4010-diff-pathspec/.git/
expecting success of 4010.1 'setup': echo frotz >file0 &&
     mkdir path1 &&
     echo rezrov >path1/file1 &&
     before0=$(git hash-object file0) &&
     before1=$(git hash-object path1/file1) &&
     git update-index --add file0 path1/file1 &&
     tree=$(git write-tree) &&
     echo "$tree" &&
     echo nitfol >file0 &&
     echo yomin >path1/file1 &&
     after0=$(git hash-object file0) &&
     after1=$(git hash-object path1/file1) &&
     git update-index file0 path1/file1
6b4658eda9b6c5385f027bc54abf3276b6effd05
ok 1 - setup

expecting success of 4010.2 'limit to path should show nothing': git diff-index --cached $tree -- path >current &&
     compare_diff_raw current expected
ok 2 - limit to path should show nothing

expecting success of 4010.3 'limit to path1 should show path1/file1': git diff-index --cached $tree -- path1 >current &&
     compare_diff_raw current expected
ok 3 - limit to path1 should show path1/file1

expecting success of 4010.4 'limit to path1/ should show path1/file1': git diff-index --cached $tree -- path1/ >current &&
     compare_diff_raw current expected
ok 4 - limit to path1/ should show path1/file1

expecting success of 4010.5 '"*file1" should show path1/file1': git diff-index --cached $tree -- "*file1" >current &&
     compare_diff_raw current expected
ok 5 - "*file1" should show path1/file1

expecting success of 4010.6 'limit to file0 should show file0': git diff-index --cached $tree -- file0 >current &&
     compare_diff_raw current expected
ok 6 - limit to file0 should show file0

expecting success of 4010.7 'limit to file0/ should emit nothing.': git diff-index --cached $tree -- file0/ >current &&
     compare_diff_raw current expected
ok 7 - limit to file0/ should emit nothing.

expecting success of 4010.8 'diff-tree pathspec': 
	tree2=$(git write-tree) &&
	echo "$tree2" &&
	git diff-tree -r --name-only $tree $tree2 -- pa path1/a >current &&
	test_must_be_empty current

54d8765b122f32157e847ce3924180cb2ec778fc
ok 8 - diff-tree pathspec

expecting success of 4010.9 'diff-tree with wildcard shows dir also matches': 
	git diff-tree --name-only $EMPTY_TREE $tree -- "f*" >result &&
	echo file0 >expected &&
	test_cmp expected result

ok 9 - diff-tree with wildcard shows dir also matches

expecting success of 4010.10 'diff-tree -r with wildcard': 
	git diff-tree -r --name-only $EMPTY_TREE $tree -- "*file1" >result &&
	echo path1/file1 >expected &&
	test_cmp expected result

ok 10 - diff-tree -r with wildcard

expecting success of 4010.11 'diff-tree with wildcard shows dir also matches': 
	git diff-tree --name-only $tree $tree2 -- "path1/f*" >result &&
	echo path1 >expected &&
	test_cmp expected result

ok 11 - diff-tree with wildcard shows dir also matches

expecting success of 4010.12 'diff-tree -r with wildcard from beginning': 
	git diff-tree -r --name-only $tree $tree2 -- "path1/*file1" >result &&
	echo path1/file1 >expected &&
	test_cmp expected result

ok 12 - diff-tree -r with wildcard from beginning

expecting success of 4010.13 'diff-tree -r with wildcard': 
	git diff-tree -r --name-only $tree $tree2 -- "path1/f*" >result &&
	echo path1/file1 >expected &&
	test_cmp expected result

ok 13 - diff-tree -r with wildcard

expecting success of 4010.14 'setup submodules': 
	test_tick &&
	git init submod &&
	( cd submod && test_commit first ) &&
	git add submod &&
	git commit -m first &&
	( cd submod && test_commit second ) &&
	git add submod &&
	git commit -m second

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4010-diff-pathspec/submod/.git/
[master (root-commit) 1e96f59] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
warning: adding embedded git repository: submod
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submod
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submod
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) f9d7654] first
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 file0
 create mode 100644 path1/file1
 create mode 160000 submod
[master 1bf6dc5] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[master f1afec5] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 14 - setup submodules

expecting success of 4010.15 'diff-tree ignores trailing slash on submodule path': 
	git diff --name-only HEAD^ HEAD submod >expect &&
	git diff --name-only HEAD^ HEAD submod/ >actual &&
	test_cmp expect actual &&
	git diff --name-only HEAD^ HEAD -- submod/whatever >actual &&
	test_must_be_empty actual

ok 15 - diff-tree ignores trailing slash on submodule path

expecting success of 4010.16 'diff multiple wildcard pathspecs': 
	mkdir path2 &&
	echo rezrov >path2/file1 &&
	git update-index --add path2/file1 &&
	tree3=$(git write-tree) &&
	git diff --name-only $tree $tree3 -- "path2*1" "path1*1" >actual &&
	cat <<-\EOF >expect &&
	path1/file1
	path2/file1
	EOF
	test_cmp expect actual

ok 16 - diff multiple wildcard pathspecs

expecting success of 4010.17 'diff-cache ignores trailing slash on submodule path': 
	git diff --name-only HEAD^ submod >expect &&
	git diff --name-only HEAD^ submod/ >actual &&
	test_cmp expect actual

ok 17 - diff-cache ignores trailing slash on submodule path

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t3903-stash.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/.git/
expecting success of 3903.1 'usage on cmd and subcommand invalid option': 
	test_expect_code 129 git stash --invalid-option 2>usage &&
	grep "or: git stash" usage &&

	test_expect_code 129 git stash push --invalid-option 2>usage &&
	! grep "or: git stash" usage

   or: git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
   or: git stash drop [-q | --quiet] [<stash>]
   or: git stash pop [--index] [-q | --quiet] [<stash>]
   or: git stash apply [--index] [-q | --quiet] [<stash>]
   or: git stash branch <branchname> [<stash>]
   or: git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
   or: git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
   or: git stash clear
   or: git stash create [<message>]
   or: git stash store [(-m | --message) <message>] [-q | --quiet] <commit>
ok 1 - usage on cmd and subcommand invalid option

expecting success of 3903.2 'usage on main command -h emits a summary of subcommands': 
	test_expect_code 129 git stash -h >usage &&
	grep -F "usage: git stash list" usage &&
	grep -F "or: git stash show" usage

usage: git stash list [<log-options>]
   or: git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
ok 2 - usage on main command -h emits a summary of subcommands

expecting success of 3903.3 'usage for subcommands should emit subcommand usage': 
	test_expect_code 129 git stash push -h >usage &&
	grep -F "usage: git stash [push" usage

usage: git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
ok 3 - usage for subcommands should emit subcommand usage

expecting success of 3903.4 'stash some dirty working directory': 
	setup_stash

[main (root-commit) fe7e97b] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file
 create mode 100644 other-file
Saved working directory and index state WIP on main: fe7e97b initial
ok 4 - stash some dirty working directory

expecting success of 3903.5 'parents of stash': 
	test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
	git diff stash^2..stash >output &&
	diff_cmp expect output

ok 5 - parents of stash

expecting success of 3903.6 'applying bogus stash does nothing': 
	test_must_fail git stash apply stash@{1} &&
	echo 1 >expect &&
	test_cmp expect file

fatal: log for 'stash' only has 1 entries
ok 6 - applying bogus stash does nothing

expecting success of 3903.7 'apply does not need clean working directory': 
	echo 4 >other-file &&
	git stash apply &&
	echo 3 >expect &&
	test_cmp expect file

Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file
	modified:   other-file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 7 - apply does not need clean working directory

expecting success of 3903.8 'apply does not clobber working directory changes': 
	git reset --hard &&
	echo 4 >file &&
	test_must_fail git stash apply &&
	echo 4 >expect &&
	test_cmp expect file

HEAD is now at fe7e97b initial
error: Your local changes to the following files would be overwritten by merge:
	file
Please commit your changes or stash them before you merge.
Aborting
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 8 - apply does not clobber working directory changes

expecting success of 3903.9 'apply stashed changes': 
	git reset --hard &&
	echo 5 >other-file &&
	git add other-file &&
	test_tick &&
	git commit -m other-file &&
	git stash apply &&
	test 3 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file)

HEAD is now at fe7e97b initial
[main 4db481e] other-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 9 - apply stashed changes

expecting success of 3903.10 'apply stashed changes (including index)': 
	git reset --hard HEAD^ &&
	echo 6 >other-file &&
	git add other-file &&
	test_tick &&
	git commit -m other-file &&
	git stash apply --index &&
	test 3 = $(cat file) &&
	test 2 = $(git show :file) &&
	test 1 = $(git show HEAD:file)

HEAD is now at fe7e97b initial
[main da68008] other-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	output
	usage

ok 10 - apply stashed changes (including index)

expecting success of 3903.11 'unstashing in a subdirectory': 
	git reset --hard HEAD &&
	mkdir subdir &&
	(
		cd subdir &&
		git stash apply
	)

HEAD is now at da68008 other-file
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   ../file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	../expect
	../output
	../usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 11 - unstashing in a subdirectory

expecting success of 3903.12 'stash drop complains of extra options': 
	test_must_fail git stash drop --foo

error: unknown option `foo'
usage: git stash drop [-q | --quiet] [<stash>]

    -q, --quiet           be quiet, only report errors

ok 12 - stash drop complains of extra options

expecting success of 3903.13 'drop top stash': 
	git reset --hard &&
	git stash list >expected &&
	echo 7 >file &&
	git stash &&
	git stash drop &&
	git stash list >actual &&
	test_cmp expected actual &&
	git stash apply &&
	test 3 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file)

HEAD is now at da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Dropped refs/stash@{0} (cb250e8e47ab685a401a9258b861903a94581a26)
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 13 - drop top stash

expecting success of 3903.14 'drop middle stash': 
	git reset --hard &&
	echo 8 >file &&
	git stash &&
	echo 9 >file &&
	git stash &&
	git stash drop stash@{1} &&
	test 2 = $(git stash list | wc -l) &&
	git stash apply &&
	test 9 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file) &&
	git reset --hard &&
	git stash drop &&
	git stash apply &&
	test 3 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file)

HEAD is now at da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Dropped stash@{1} (5b715756e7f660ba9dd1619de9e5a4b24a06b7c3)
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at da68008 other-file
Dropped refs/stash@{0} (236c59f58e239e74e90b6832a98fa4b7f4b33647)
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 14 - drop middle stash

expecting success of 3903.15 'drop middle stash by index': 
	git reset --hard &&
	echo 8 >file &&
	git stash &&
	echo 9 >file &&
	git stash &&
	git stash drop 1 &&
	test 2 = $(git stash list | wc -l) &&
	git stash apply &&
	test 9 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file) &&
	git reset --hard &&
	git stash drop &&
	git stash apply &&
	test 3 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file)

HEAD is now at da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Dropped refs/stash@{1} (5b715756e7f660ba9dd1619de9e5a4b24a06b7c3)
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at da68008 other-file
Dropped refs/stash@{0} (236c59f58e239e74e90b6832a98fa4b7f4b33647)
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 15 - drop middle stash by index

expecting success of 3903.16 'drop stash reflog updates refs/stash': 
	git reset --hard &&
	git rev-parse refs/stash >expect &&
	echo 9 >file &&
	git stash &&
	git stash drop stash@{0} &&
	git rev-parse refs/stash >actual &&
	test_cmp expect actual

HEAD is now at da68008 other-file
Saved working directory and index state WIP on main: da68008 other-file
Dropped stash@{0} (236c59f58e239e74e90b6832a98fa4b7f4b33647)
ok 16 - drop stash reflog updates refs/stash

expecting success of 3903.17 'drop stash reflog updates refs/stash with rewrite': 
	git init repo &&
	(
		cd repo &&
		setup_stash
	) &&
	echo 9 >repo/file &&

	old_oid="$(git -C repo rev-parse stash@{0})" &&
	git -C repo stash &&
	new_oid="$(git -C repo rev-parse stash@{0})" &&

	cat >expect <<-EOF &&
	$(test_oid zero) $old_oid
	$old_oid $new_oid
	EOF
	cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
	test_cmp expect actual &&

	git -C repo stash drop stash@{1} &&
	cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
	cat >expect <<-EOF &&
	$(test_oid zero) $new_oid
	EOF
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/repo/.git/
[main (root-commit) c512db6] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file
 create mode 100644 other-file
Saved working directory and index state WIP on main: c512db6 initial
Saved working directory and index state WIP on main: c512db6 initial
Dropped stash@{1} (886689bbf0687da9299458a427fd23c435bce4b1)
ok 17 - drop stash reflog updates refs/stash with rewrite

expecting success of 3903.18 'stash pop': 
	git reset --hard &&
	git stash pop &&
	test 3 = $(cat file) &&
	test 1 = $(git show :file) &&
	test 1 = $(git show HEAD:file) &&
	test 0 = $(git stash list | wc -l)

HEAD is now at da68008 other-file
Merging Updated upstream with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expected
	output
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (5c6ad4ca28e71ae3a007e6c77043d04bc42fa9ee)
ok 18 - stash pop

expecting success of 3903.19 'stash branch': 
	echo foo >file &&
	git commit file -m first &&
	echo bar >file &&
	echo bar2 >file2 &&
	git add file2 &&
	git stash &&
	echo baz >file &&
	git commit file -m second &&
	git stash branch stashbranch &&
	test refs/heads/stashbranch = $(git symbolic-ref HEAD) &&
	test $(git rev-parse HEAD) = $(git rev-parse main^) &&
	git diff --cached >output &&
	diff_cmp expect output &&
	git diff >output &&
	diff_cmp expect1 output &&
	git add file &&
	git commit -m alternate\ second &&
	git diff main..stashbranch >output &&
	diff_cmp output expect2 &&
	test 0 = $(git stash list | wc -l)

[main ce675cf] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Saved working directory and index state WIP on main: ce675cf first
[main 662e8e5] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'stashbranch'
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expect1
	expect2
	expected
	output
	repo/
	usage

Dropped refs/stash@{0} (cdadb37dcdb15029c2bcf635107de6d696bb3ad3)
[stashbranch d3a23d9] alternate second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file2
ok 19 - stash branch

expecting success of 3903.20 'apply -q is quiet': 
	echo foo >file &&
	git stash &&
	git stash apply -q >output.out 2>&1 &&
	test_must_be_empty output.out

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 20 - apply -q is quiet

expecting success of 3903.21 'apply --index -q is quiet': 
	# Added file, deleted file, modified file all staged for commit
	echo foo >new-file &&
	echo test >file &&
	git add new-file file &&
	git rm other-file &&

	git stash &&
	git stash apply --index -q >output.out 2>&1 &&
	test_must_be_empty output.out

rm 'other-file'
Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 21 - apply --index -q is quiet

expecting success of 3903.22 'save -q is quiet': 
	git stash save --quiet >output.out 2>&1 &&
	test_must_be_empty output.out

ok 22 - save -q is quiet

expecting success of 3903.23 'pop -q works and is quiet': 
	git stash pop -q >output.out 2>&1 &&
	echo bar >expect &&
	git show :file >actual &&
	test_cmp expect actual &&
	test_must_be_empty output.out

ok 23 - pop -q works and is quiet

expecting success of 3903.24 'pop -q --index works and is quiet': 
	echo foo >file &&
	git add file &&
	git stash save --quiet &&
	git stash pop -q --index >output.out 2>&1 &&
	git diff-files file2 >file2.diff &&
	test_must_be_empty file2.diff &&
	test foo = "$(git show :file)" &&
	test_must_be_empty output.out

ok 24 - pop -q --index works and is quiet

expecting success of 3903.25 'drop -q is quiet': 
	git stash &&
	git stash drop -q >output.out 2>&1 &&
	test_must_be_empty output.out

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 25 - drop -q is quiet

expecting success of 3903.26 'stash push -q --staged refreshes the index': 
	git reset --hard &&
	echo test >file &&
	git add file &&
	git stash push -q --staged &&
	git diff-files >output.out &&
	test_must_be_empty output.out

HEAD is now at d3a23d9 alternate second
ok 26 - stash push -q --staged refreshes the index

expecting success of 3903.27 'stash apply -q --index refreshes the index': 
	echo test >other-file &&
	git add other-file &&
	echo another-change >other-file &&
	git diff-files >expect &&
	git stash &&

	git stash apply -q --index &&
	git diff-files >actual &&
	test_cmp expect actual

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 27 - stash apply -q --index refreshes the index

expecting success of 3903.28 'stash -k': 
	echo bar3 >file &&
	echo bar4 >file2 &&
	git add file2 &&
	git stash -k &&
	test bar,bar4 = $(cat file),$(cat file2)

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 28 - stash -k

expecting success of 3903.29 'stash --no-keep-index': 
	echo bar33 >file &&
	echo bar44 >file2 &&
	git add file2 &&
	git stash --no-keep-index &&
	test bar,bar2 = $(cat file),$(cat file2)

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
ok 29 - stash --no-keep-index

expecting success of 3903.30 'stash --staged': 
	echo bar3 >file &&
	echo bar4 >file2 &&
	git add file2 &&
	git stash --staged &&
	test bar3,bar2 = $(cat file),$(cat file2) &&
	git reset --hard &&
	git stash pop &&
	test bar,bar4 = $(cat file),$(cat file2)

Saved working directory and index state WIP on stashbranch: d3a23d9 alternate second
HEAD is now at d3a23d9 alternate second
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (87589b9806264bae268601f80dfb73d1e02c4fa4)
ok 30 - stash --staged

expecting success of 3903.31 'dont assume push with non-option args': 
	test_must_fail git stash -q drop 2>err &&
	test_i18ngrep -e "subcommand wasn't specified; 'push' can't be assumed due to unexpected token 'drop'" err

fatal: subcommand wasn't specified; 'push' can't be assumed due to unexpected token 'drop'
ok 31 - dont assume push with non-option args

expecting success of 3903.32 'stash --invalid-option': 
	echo bar5 >file &&
	echo bar6 >file2 &&
	git add file2 &&
	test_must_fail git stash --invalid-option &&
	test_must_fail git stash save --invalid-option &&
	test bar5,bar6 = $(cat file),$(cat file2)

error: unknown option `invalid-option'
usage: git stash list [<log-options>]
   or: git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
   or: git stash drop [-q | --quiet] [<stash>]
   or: git stash pop [--index] [-q | --quiet] [<stash>]
   or: git stash apply [--index] [-q | --quiet] [<stash>]
   or: git stash branch <branchname> [<stash>]
   or: git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
                 [-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
                 [--pathspec-from-file=<file> [--pathspec-file-nul]]
                 [--] [<pathspec>...]]
   or: git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
                 [-u | --include-untracked] [-a | --all] [<message>]
   or: git stash clear
   or: git stash create [<message>]
   or: git stash store [(-m | --message) <message>] [-q | --quiet] <commit>

    -k, --keep-index      keep index
    -S, --staged          stash staged changes only
    -p, --patch           stash in patch mode
    -q, --quiet           quiet mode
    -u, --include-untracked
                          include untracked files in stash
    -a, --all             include ignore files
    -m, --message <message>
                          stash message
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown option `invalid-option'
usage: git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
                 [-u | --include-untracked] [-a | --all] [<message>]

    -k, --keep-index      keep index
    -S, --staged          stash staged changes only
    -p, --patch           stash in patch mode
    -q, --quiet           quiet mode
    -u, --include-untracked
                          include untracked files in stash
    -a, --all             include ignore files
    -m, --message <message>
                          stash message

ok 32 - stash --invalid-option

expecting success of 3903.33 'stash an added file': 
	git reset --hard &&
	echo new >file3 &&
	git add file3 &&
	git stash save "added file" &&
	! test -r file3 &&
	git stash apply &&
	test new = "$(cat file3)"

HEAD is now at d3a23d9 alternate second
Saved working directory and index state On stashbranch: added file
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file3

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

ok 33 - stash an added file

expecting success of 3903.34 'stash --intent-to-add file': 
	git reset --hard &&
	echo new >file4 &&
	git add --intent-to-add file4 &&
	test_when_finished "git rm -f file4" &&
	test_must_fail git stash

HEAD is now at d3a23d9 alternate second
error: Entry 'file4' not uptodate. Cannot merge.
Cannot save the current worktree state
rm 'file4'
ok 34 - stash --intent-to-add file

expecting success of 3903.35 'stash rm then recreate': 
	git reset --hard &&
	git rm file &&
	echo bar7 >file &&
	git stash save "rm then recreate" &&
	test bar = "$(cat file)" &&
	git stash apply &&
	test bar7 = "$(cat file)"

HEAD is now at d3a23d9 alternate second
rm 'file'
Saved working directory and index state On stashbranch: rm then recreate
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 35 - stash rm then recreate

expecting success of 3903.36 'stash rm and ignore': 
	git reset --hard &&
	git rm file &&
	echo file >.gitignore &&
	git stash save "rm and ignore" &&
	test bar = "$(cat file)" &&
	test file = "$(cat .gitignore)" &&
	git stash apply &&
	! test -r file &&
	test file = "$(cat .gitignore)"

HEAD is now at d3a23d9 alternate second
rm 'file'
Saved working directory and index state On stashbranch: rm and ignore
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 36 - stash rm and ignore

expecting success of 3903.37 'stash rm and ignore (stage .gitignore)': 
	git reset --hard &&
	git rm file &&
	echo file >.gitignore &&
	git add .gitignore &&
	git stash save "rm and ignore (stage .gitignore)" &&
	test bar = "$(cat file)" &&
	! test -r .gitignore &&
	git stash apply &&
	! test -r file &&
	test file = "$(cat .gitignore)"

HEAD is now at d3a23d9 alternate second
rm 'file'
Saved working directory and index state On stashbranch: rm and ignore (stage .gitignore)
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   .gitignore

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

ok 37 - stash rm and ignore (stage .gitignore)

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 3903.38 'stash file to symlink': 
	git reset --hard &&
	rm file &&
	ln -s file2 file &&
	git stash save "file to symlink" &&
	test_path_is_file_not_symlink file &&
	test bar = "$(cat file)" &&
	git stash apply &&
	test_path_is_symlink file &&
	test "$(test_readlink file)" = file2

HEAD is now at d3a23d9 alternate second
Saved working directory and index state On stashbranch: file to symlink
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 38 - stash file to symlink

expecting success of 3903.39 'stash file to symlink (stage rm)': 
	git reset --hard &&
	git rm file &&
	ln -s file2 file &&
	git stash save "file to symlink (stage rm)" &&
	test_path_is_file_not_symlink file &&
	test bar = "$(cat file)" &&
	git stash apply &&
	test_path_is_symlink file &&
	test "$(test_readlink file)" = file2

HEAD is now at d3a23d9 alternate second
rm 'file'
Saved working directory and index state On stashbranch: file to symlink (stage rm)
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 39 - stash file to symlink (stage rm)

expecting success of 3903.40 'stash file to symlink (full stage)': 
	git reset --hard &&
	rm file &&
	ln -s file2 file &&
	git add file &&
	git stash save "file to symlink (full stage)" &&
	test_path_is_file_not_symlink file &&
	test bar = "$(cat file)" &&
	git stash apply &&
	test_path_is_symlink file &&
	test "$(test_readlink file)" = file2

HEAD is now at d3a23d9 alternate second
Saved working directory and index state On stashbranch: file to symlink (full stage)
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 40 - stash file to symlink (full stage)

expecting success of 3903.41 'stash symlink to file': 
	git reset --hard &&
	test_ln_s_add file filelink &&
	git commit -m "Add symlink" &&
	rm filelink &&
	cp file filelink &&
	git stash save "symlink to file"

HEAD is now at d3a23d9 alternate second
[stashbranch f202a25] Add symlink
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 filelink
Saved working directory and index state On stashbranch: symlink to file
ok 41 - stash symlink to file

expecting success of 3903.42 'this must have re-created the symlink': 
	test -h filelink &&
	case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac

ok 42 - this must have re-created the symlink

expecting success of 3903.43 'unstash must re-create the file': 
	git stash apply &&
	! test -h filelink &&
	test bar = "$(cat file)"

Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: filelink

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 43 - unstash must re-create the file

expecting success of 3903.44 'stash symlink to file (stage rm)': 
	git reset --hard &&
	git rm filelink &&
	cp file filelink &&
	git stash save "symlink to file (stage rm)"

HEAD is now at f202a25 Add symlink
rm 'filelink'
Saved working directory and index state On stashbranch: symlink to file (stage rm)
ok 44 - stash symlink to file (stage rm)

expecting success of 3903.45 'this must have re-created the symlink': 
	test -h filelink &&
	case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac

ok 45 - this must have re-created the symlink

expecting success of 3903.46 'unstash must re-create the file': 
	git stash apply &&
	! test -h filelink &&
	test bar = "$(cat file)"

Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: filelink

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 46 - unstash must re-create the file

expecting success of 3903.47 'stash symlink to file (full stage)': 
	git reset --hard &&
	rm filelink &&
	cp file filelink &&
	git add filelink &&
	git stash save "symlink to file (full stage)"

HEAD is now at f202a25 Add symlink
Saved working directory and index state On stashbranch: symlink to file (full stage)
ok 47 - stash symlink to file (full stage)

expecting success of 3903.48 'this must have re-created the symlink': 
	test -h filelink &&
	case "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac

ok 48 - this must have re-created the symlink

expecting success of 3903.49 'unstash must re-create the file': 
	git stash apply &&
	! test -h filelink &&
	test bar = "$(cat file)"

Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	typechange: filelink

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 49 - unstash must re-create the file

checking known breakage of 3903.50 'stash directory to file': 
	git reset --hard &&
	mkdir dir &&
	echo foo >dir/file &&
	git add dir/file &&
	git commit -m "Add file in dir" &&
	rm -fr dir &&
	echo bar >dir &&
	git stash save "directory to file" &&
	test_path_is_dir dir &&
	test foo = "$(cat dir/file)" &&
	test_must_fail git stash apply &&
	test bar = "$(cat dir)" &&
	git reset --soft HEAD^

HEAD is now at f202a25 Add symlink
[stashbranch 36c53af] Add file in dir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/file
Saved working directory and index state On stashbranch: directory to file
Merging Version stash was based on with Stashed changes
On branch stashbranch
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    dir/file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
test_must_fail: command succeeded: git stash apply
not ok 50 - stash directory to file # TODO known breakage

checking known breakage of 3903.51 'stash file to directory': 
	git reset --hard &&
	rm file &&
	mkdir file &&
	echo foo >file/file &&
	git stash save "file to directory" &&
	test_path_is_file file &&
	test bar = "$(cat file)" &&
	git stash apply &&
	test_path_is_file file/file &&
	test foo = "$(cat file/file)"

HEAD is now at 36c53af Add file in dir
Saved working directory and index state On stashbranch: file to directory
Merging Version stash was based on with Stashed changes
Already up to date.
On branch stashbranch
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	output
	output.out
	repo/
	usage

nothing added to commit but untracked files present (use "git add" to track)
File file/file doesn't exist
not ok 51 - stash file to directory # TODO known breakage

expecting success of 3903.52 'giving too many ref arguments does not modify files': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	echo foo >file2 &&
	git stash &&
	echo bar >file2 &&
	git stash &&
	test-tool chmtime =123456789 file2 &&
	for type in apply pop "branch stash-branch"
	do
		test_must_fail git stash $type stash@{0} stash@{1} 2>err &&
		test_i18ngrep "Too many revisions" err &&
		test 123456789 = $(test-tool chmtime -g file2) || return 1
	done

Saved working directory and index state WIP on stashbranch: 36c53af Add file in dir
Saved working directory and index state WIP on stashbranch: 36c53af Add file in dir
Too many revisions specified: 'stash@{0}' 'stash@{1}'
Too many revisions specified: 'stash@{0}' 'stash@{1}'
Too many revisions specified: 'stash@{0}' 'stash@{1}'
HEAD is now at 36c53af Add file in dir
ok 52 - giving too many ref arguments does not modify files

expecting success of 3903.53 'drop: too many arguments errors out (does nothing)': 
	git stash list >expect &&
	test_must_fail git stash drop stash@{0} stash@{1} 2>err &&
	test_i18ngrep "Too many revisions" err &&
	git stash list >actual &&
	test_cmp expect actual

Too many revisions specified: 'stash@{0}' 'stash@{1}'
ok 53 - drop: too many arguments errors out (does nothing)

expecting success of 3903.54 'show: too many arguments errors out (does nothing)': 
	test_must_fail git stash show stash@{0} stash@{1} 2>err 1>out &&
	test_i18ngrep "Too many revisions" err &&
	test_must_be_empty out

Too many revisions specified: 'stash@{0}' 'stash@{1}'
ok 54 - show: too many arguments errors out (does nothing)

expecting success of 3903.55 'stash create - no changes': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	git stash create >actual &&
	test_must_be_empty actual

HEAD is now at 36c53af Add file in dir
HEAD is now at 36c53af Add file in dir
ok 55 - stash create - no changes

expecting success of 3903.56 'stash branch - no stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	git stash branch stash-branch ${STASH_ID} &&
	test_when_finished "git reset --hard HEAD && git checkout main &&
	git branch -D stash-branch" &&
	test $(git ls-files --modified | wc -l) -eq 1

HEAD is now at 36c53af Add file in dir
HEAD is now at 36c53af Add file in dir
Switched to a new branch 'stash-branch'
Merging Version stash was based on with Stashed changes
On branch stash-branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at 36c53af Add file in dir
Switched to branch 'main'
Deleted branch stash-branch (was 36c53af).
HEAD is now at 662e8e5 second
ok 56 - stash branch - no stashes on stack, stash-like argument

expecting success of 3903.57 'stash branch - stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	git stash &&
	test_when_finished "git stash drop" &&
	echo bar >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	git stash branch stash-branch ${STASH_ID} &&
	test_when_finished "git reset --hard HEAD && git checkout main &&
	git branch -D stash-branch" &&
	test $(git ls-files --modified | wc -l) -eq 1

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
HEAD is now at 662e8e5 second
Switched to a new branch 'stash-branch'
Merging Version stash was based on with Stashed changes
On branch stash-branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at 662e8e5 second
Switched to branch 'main'
Deleted branch stash-branch (was 662e8e5).
Dropped refs/stash@{0} (52fc03a924a3ab4b9767c1a1db630e729e81e22d)
HEAD is now at 662e8e5 second
ok 57 - stash branch - stashes on stack, stash-like argument

expecting success of 3903.58 'stash branch complains with no arguments': 
	test_must_fail git stash branch 2>err &&
	test_i18ngrep "No branch name specified" err

No branch name specified
ok 58 - stash branch complains with no arguments

expecting success of 3903.59 'stash show format defaults to --stat': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	git stash &&
	test_when_finished "git stash drop" &&
	echo bar >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	cat >expected <<-EOF &&
	 file | 1 +
	 1 file changed, 1 insertion(+)
	EOF
	git stash show ${STASH_ID} >actual &&
	test_cmp expected actual

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
HEAD is now at 662e8e5 second
Dropped refs/stash@{0} (52fc03a924a3ab4b9767c1a1db630e729e81e22d)
HEAD is now at 662e8e5 second
ok 59 - stash show format defaults to --stat

expecting success of 3903.60 'stash show - stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	git stash &&
	test_when_finished "git stash drop" &&
	echo bar >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	echo "1	0	file" >expected &&
	git stash show --numstat ${STASH_ID} >actual &&
	test_cmp expected actual

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
HEAD is now at 662e8e5 second
Dropped refs/stash@{0} (52fc03a924a3ab4b9767c1a1db630e729e81e22d)
HEAD is now at 662e8e5 second
ok 60 - stash show - stashes on stack, stash-like argument

expecting success of 3903.61 'stash show -p - stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	git stash &&
	test_when_finished "git stash drop" &&
	echo bar >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	cat >expected <<-EOF &&
	diff --git a/file b/file
	index 7601807..935fbd3 100644
	--- a/file
	+++ b/file
	@@ -1 +1,2 @@
	 baz
	+bar
	EOF
	git stash show -p ${STASH_ID} >actual &&
	diff_cmp expected actual

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
HEAD is now at 662e8e5 second
Dropped refs/stash@{0} (52fc03a924a3ab4b9767c1a1db630e729e81e22d)
HEAD is now at 662e8e5 second
ok 61 - stash show -p - stashes on stack, stash-like argument

expecting success of 3903.62 'stash show - no stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	echo "1	0	file" >expected &&
	git stash show --numstat ${STASH_ID} >actual &&
	test_cmp expected actual

HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
ok 62 - stash show - no stashes on stack, stash-like argument

expecting success of 3903.63 'stash show -p - no stashes on stack, stash-like argument': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD" &&
	git reset --hard &&
	echo foo >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	cat >expected <<-EOF &&
	diff --git a/file b/file
	index 7601807..71b52c4 100644
	--- a/file
	+++ b/file
	@@ -1 +1,2 @@
	 baz
	+foo
	EOF
	git stash show -p ${STASH_ID} >actual &&
	diff_cmp expected actual

HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
ok 63 - stash show -p - no stashes on stack, stash-like argument

expecting success of 3903.64 'stash show --patience shows diff': 
	git reset --hard &&
	echo foo >>file &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	cat >expected <<-EOF &&
	diff --git a/file b/file
	index 7601807..71b52c4 100644
	--- a/file
	+++ b/file
	@@ -1 +1,2 @@
	 baz
	+foo
	EOF
	git stash show --patience ${STASH_ID} >actual &&
	diff_cmp expected actual

HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
ok 64 - stash show --patience shows diff

expecting success of 3903.65 'drop: fail early if specified stash is not a stash ref': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD && git stash clear" &&
	git reset --hard &&
	echo foo >file &&
	git stash &&
	echo bar >file &&
	git stash &&
	test_must_fail git stash drop $(git rev-parse stash@{0}) &&
	git stash pop &&
	test bar = "$(cat file)" &&
	git reset --hard HEAD

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
error: 'b5efee99e793dd7b06ac07318a9440c7e09b097f' is not a stash reference
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (b5efee99e793dd7b06ac07318a9440c7e09b097f)
HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
ok 65 - drop: fail early if specified stash is not a stash ref

expecting success of 3903.66 'pop: fail early if specified stash is not a stash ref': 
	git stash clear &&
	test_when_finished "git reset --hard HEAD && git stash clear" &&
	git reset --hard &&
	echo foo >file &&
	git stash &&
	echo bar >file &&
	git stash &&
	test_must_fail git stash pop $(git rev-parse stash@{0}) &&
	git stash pop &&
	test bar = "$(cat file)" &&
	git reset --hard HEAD

HEAD is now at 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
Saved working directory and index state WIP on main: 662e8e5 second
error: 'b5efee99e793dd7b06ac07318a9440c7e09b097f' is not a stash reference
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (b5efee99e793dd7b06ac07318a9440c7e09b097f)
HEAD is now at 662e8e5 second
HEAD is now at 662e8e5 second
ok 66 - pop: fail early if specified stash is not a stash ref

expecting success of 3903.67 'ref with non-existent reflog': 
	git stash clear &&
	echo bar5 >file &&
	echo bar6 >file2 &&
	git add file2 &&
	git stash &&
	test_must_fail git rev-parse --quiet --verify does-not-exist &&
	test_must_fail git stash drop does-not-exist &&
	test_must_fail git stash drop does-not-exist@{0} &&
	test_must_fail git stash pop does-not-exist &&
	test_must_fail git stash pop does-not-exist@{0} &&
	test_must_fail git stash apply does-not-exist &&
	test_must_fail git stash apply does-not-exist@{0} &&
	test_must_fail git stash show does-not-exist &&
	test_must_fail git stash show does-not-exist@{0} &&
	test_must_fail git stash branch tmp does-not-exist &&
	test_must_fail git stash branch tmp does-not-exist@{0} &&
	git stash drop

Saved working directory and index state WIP on main: 662e8e5 second
error: does-not-exist is not a valid reference
error: does-not-exist@{0} is not a valid reference
error: does-not-exist is not a valid reference
error: does-not-exist@{0} is not a valid reference
error: does-not-exist is not a valid reference
error: does-not-exist@{0} is not a valid reference
error: does-not-exist is not a valid reference
error: does-not-exist@{0} is not a valid reference
error: does-not-exist is not a valid reference
error: does-not-exist@{0} is not a valid reference
Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
ok 67 - ref with non-existent reflog

expecting success of 3903.68 'invalid ref of the form stash@{n}, n >= N': 
	git stash clear &&
	test_must_fail git stash drop stash@{0} &&
	echo bar5 >file &&
	echo bar6 >file2 &&
	git add file2 &&
	git stash &&
	test_must_fail git stash drop stash@{1} &&
	test_must_fail git stash pop stash@{1} &&
	test_must_fail git stash apply stash@{1} &&
	test_must_fail git stash show stash@{1} &&
	test_must_fail git stash branch tmp stash@{1} &&
	git stash drop

error: stash@{0} is not a valid reference
Saved working directory and index state WIP on main: 662e8e5 second
fatal: log for 'stash' only has 1 entries
fatal: log for 'stash' only has 1 entries
fatal: log for 'stash' only has 1 entries
fatal: log for 'stash' only has 1 entries
fatal: log for 'stash' only has 1 entries
Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
ok 68 - invalid ref of the form stash@{n}, n >= N

expecting success of 3903.69 'invalid ref of the form "n", n >= N': 
	git stash clear &&
	test_must_fail git stash drop 0 &&
	echo bar5 >file &&
	echo bar6 >file2 &&
	git add file2 &&
	git stash &&
	test_must_fail git stash drop 1 &&
	test_must_fail git stash pop 1 &&
	test_must_fail git stash apply 1 &&
	test_must_fail git stash show 1 &&
	test_must_fail git stash branch tmp 1 &&
	git stash drop

error: refs/stash@{0} is not a valid reference
Saved working directory and index state WIP on main: 662e8e5 second
fatal: log for 'refs/stash' only has 1 entries
fatal: log for 'refs/stash' only has 1 entries
fatal: log for 'refs/stash' only has 1 entries
fatal: log for 'refs/stash' only has 1 entries
fatal: log for 'refs/stash' only has 1 entries
Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
ok 69 - invalid ref of the form "n", n >= N

expecting success of 3903.70 'valid ref of the form "n", n < N': 
	git stash clear &&
	echo bar5 >file &&
	echo bar6 >file2 &&
	git add file2 &&
	git stash &&
	git stash show 0 &&
	git stash branch tmp 0 &&
	git checkout main &&
	git stash &&
	git stash apply 0 &&
	git reset --hard &&
	git stash pop 0 &&
	git stash &&
	git stash drop 0 &&
	test_must_fail git stash drop

Saved working directory and index state WIP on main: 662e8e5 second
 file  | 2 +-
 file2 | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
Switched to a new branch 'tmp'
Merging Version stash was based on with Stashed changes
On branch tmp
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
Switched to branch 'main'
M	file
A	file2
Saved working directory and index state WIP on main: 662e8e5 second
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

HEAD is now at 662e8e5 second
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
Saved working directory and index state WIP on main: 662e8e5 second
Dropped refs/stash@{0} (2292019e7bba9714c78c4046916c8d2872d65209)
No stash entries found.
ok 70 - valid ref of the form "n", n < N

expecting success of 3903.71 'branch: do not drop the stash if the branch exists': 
	git stash clear &&
	echo foo >file &&
	git add file &&
	git commit -m initial &&
	echo bar >file &&
	git stash &&
	test_must_fail git stash branch main stash@{0} &&
	git rev-parse stash@{0} --

[main 47d5e0e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Saved working directory and index state WIP on main: 47d5e0e initial
fatal: a branch named 'main' already exists
68902b50f26eb6fc30df10f888c7728c286038c7
--
ok 71 - branch: do not drop the stash if the branch exists

expecting success of 3903.72 'branch: should not drop the stash if the apply fails': 
	git stash clear &&
	git reset HEAD~1 --hard &&
	echo foo >file &&
	git add file &&
	git commit -m initial &&
	echo bar >file &&
	git stash &&
	echo baz >file &&
	test_when_finished "git checkout main" &&
	test_must_fail git stash branch new_branch stash@{0} &&
	git rev-parse stash@{0} --

HEAD is now at 662e8e5 second
[main 47d5e0e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Saved working directory and index state WIP on main: 47d5e0e initial
Switched to a new branch 'new_branch'
M	file
error: Your local changes to the following files would be overwritten by merge:
	file
Please commit your changes or stash them before you merge.
Aborting
Index was not unstashed.
Merging Version stash was based on with Stashed changes
On branch new_branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	usage

no changes added to commit (use "git add" and/or "git commit -a")
68902b50f26eb6fc30df10f888c7728c286038c7
--
Switched to branch 'main'
M	file
ok 72 - branch: should not drop the stash if the apply fails

expecting success of 3903.73 'apply: show same status as git status (relative to ./)': 
	git stash clear &&
	echo 1 >subdir/subfile1 &&
	echo 2 >subdir/subfile2 &&
	git add subdir/subfile1 &&
	git commit -m subdir &&
	(
		cd subdir &&
		echo x >subfile1 &&
		echo x >../file &&
		git status >../expect &&
		git stash &&
		sane_unset GIT_MERGE_VERBOSITY &&
		git stash apply
	) |
	sed -e 1d >actual && # drop "Saved..."
	test_cmp expect actual

[main 307367e] subdir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/subfile1
ok 73 - apply: show same status as git status (relative to ./)

expecting success of 3903.74 'stash where working directory contains "HEAD" file': 
	git stash clear &&
	git reset --hard &&
	echo file-not-a-ref >HEAD &&
	git add HEAD &&
	test_tick &&
	git stash &&
	git diff-files --quiet &&
	git diff-index --cached --quiet HEAD &&
	test "$(git rev-parse stash^)" = "$(git rev-parse HEAD)" &&
	git diff stash^..stash >output &&
	diff_cmp expect output

HEAD is now at 307367e subdir
Saved working directory and index state WIP on main: 307367e subdir
ok 74 - stash where working directory contains "HEAD" file

expecting success of 3903.75 'store called with invalid commit': 
	test_must_fail git stash store foo

Cannot update refs/stash with foo
ok 75 - store called with invalid commit

expecting success of 3903.76 'store updates stash ref and reflog': 
	git stash clear &&
	git reset --hard &&
	echo quux >bazzy &&
	git add bazzy &&
	STASH_ID=$(git stash create) &&
	git reset --hard &&
	test_path_is_missing bazzy &&
	git stash store -m quuxery $STASH_ID &&
	test $(git rev-parse stash) = $STASH_ID &&
	git reflog --format=%H stash| grep $STASH_ID &&
	git stash pop &&
	grep quux bazzy

HEAD is now at 307367e subdir
HEAD is now at 307367e subdir
47ce57b251b2eb978437ea9bbc89e32969254a93
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bazzy

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (47ce57b251b2eb978437ea9bbc89e32969254a93)
quux
ok 76 - store updates stash ref and reflog

expecting success of 3903.77 'handle stash specification with spaces': 
	git stash clear &&
	echo pig >file &&
	git stash &&
	stamp=$(git log -g --format="%cd" -1 refs/stash) &&
	test_tick &&
	echo cow >file &&
	git stash &&
	git stash apply "stash@{$stamp}" &&
	grep pig file

Saved working directory and index state WIP on main: 307367e subdir
Saved working directory and index state WIP on main: 307367e subdir
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bazzy

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

pig
ok 77 - handle stash specification with spaces

expecting success of 3903.78 'setup stash with index and worktree changes': 
	git stash clear &&
	git reset --hard &&
	echo index >file &&
	git add file &&
	echo working >file &&
	git stash

HEAD is now at 307367e subdir
Saved working directory and index state WIP on main: 307367e subdir
ok 78 - setup stash with index and worktree changes

expecting success of 3903.79 'stash list -p shows simple diff': 
	cat >expect <<-EOF &&
	stash@{0}

	diff --git a/file b/file
	index 257cc56..d26b33d 100644
	--- a/file
	+++ b/file
	@@ -1 +1 @@
	-foo
	+working
	EOF
	git stash list --format=%gd -p >actual &&
	diff_cmp expect actual

ok 79 - stash list -p shows simple diff

expecting success of 3903.80 'stash list --cc shows combined diff': 
	cat >expect <<-\EOF &&
	stash@{0}

	diff --cc file
	index 257cc56,9015a7a..d26b33d
	--- a/file
	+++ b/file
	@@@ -1,1 -1,1 +1,1 @@@
	- foo
	 -index
	++working
	EOF
	git stash list --format=%gd -p --cc >actual &&
	diff_cmp expect actual

ok 80 - stash list --cc shows combined diff

expecting success of 3903.81 'stash is not confused by partial renames': 
	mv file renamed &&
	git add renamed &&
	git stash &&
	git stash apply &&
	test_path_is_file renamed &&
	test_path_is_missing file

Saved working directory and index state WIP on main: 307367e subdir
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   renamed

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

ok 81 - stash is not confused by partial renames

expecting success of 3903.82 'push -m shows right message': 
	>foo &&
	git add foo &&
	git stash push -m "test message" &&
	echo "stash@{0}: On main: test message" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: test message
ok 82 - push -m shows right message

expecting success of 3903.83 'push -m also works without space': 
	>foo &&
	git add foo &&
	git stash push -m"unspaced test message" &&
	echo "stash@{0}: On main: unspaced test message" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: unspaced test message
ok 83 - push -m also works without space

expecting success of 3903.84 'store -m foo shows right message': 
	git stash clear &&
	git reset --hard &&
	echo quux >bazzy &&
	git add bazzy &&
	STASH_ID=$(git stash create) &&
	git stash store -m "store m" $STASH_ID &&
	echo "stash@{0}: store m" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

HEAD is now at 307367e subdir
ok 84 - store -m foo shows right message

expecting success of 3903.85 'store -mfoo shows right message': 
	git stash clear &&
	git reset --hard &&
	echo quux >bazzy &&
	git add bazzy &&
	STASH_ID=$(git stash create) &&
	git stash store -m"store mfoo" $STASH_ID &&
	echo "stash@{0}: store mfoo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

HEAD is now at 307367e subdir
ok 85 - store -mfoo shows right message

expecting success of 3903.86 'store --message=foo shows right message': 
	git stash clear &&
	git reset --hard &&
	echo quux >bazzy &&
	git add bazzy &&
	STASH_ID=$(git stash create) &&
	git stash store --message="store message=foo" $STASH_ID &&
	echo "stash@{0}: store message=foo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

HEAD is now at 307367e subdir
ok 86 - store --message=foo shows right message

expecting success of 3903.87 'store --message foo shows right message': 
	git stash clear &&
	git reset --hard &&
	echo quux >bazzy &&
	git add bazzy &&
	STASH_ID=$(git stash create) &&
	git stash store --message "store message foo" $STASH_ID &&
	echo "stash@{0}: store message foo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

HEAD is now at 307367e subdir
ok 87 - store --message foo shows right message

expecting success of 3903.88 'push -mfoo uses right message': 
	>foo &&
	git add foo &&
	git stash push -m"test mfoo" &&
	echo "stash@{0}: On main: test mfoo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: test mfoo
ok 88 - push -mfoo uses right message

expecting success of 3903.89 'push --message foo is synonym for -mfoo': 
	>foo &&
	git add foo &&
	git stash push --message "test message foo" &&
	echo "stash@{0}: On main: test message foo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: test message foo
ok 89 - push --message foo is synonym for -mfoo

expecting success of 3903.90 'push --message=foo is synonym for -mfoo': 
	>foo &&
	git add foo &&
	git stash push --message="test message=foo" &&
	echo "stash@{0}: On main: test message=foo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: test message=foo
ok 90 - push --message=foo is synonym for -mfoo

expecting success of 3903.91 'push -m shows right message': 
	>foo &&
	git add foo &&
	git stash push -m "test m foo" &&
	echo "stash@{0}: On main: test m foo" >expect &&
	git stash list -1 >actual &&
	test_cmp expect actual

Saved working directory and index state On main: test m foo
ok 91 - push -m shows right message

expecting success of 3903.92 'create stores correct message': 
	>foo &&
	git add foo &&
	STASH_ID=$(git stash create "create test message") &&
	echo "On main: create test message" >expect &&
	git show --pretty=%s -s ${STASH_ID} >actual &&
	test_cmp expect actual

ok 92 - create stores correct message

expecting success of 3903.93 'create when branch name has /': 
	test_when_finished "git checkout main" &&
	git checkout -b some/topic &&
	>foo &&
	git add foo &&
	STASH_ID=$(git stash create "create test message") &&
	echo "On some/topic: create test message" >expect &&
	git show --pretty=%s -s ${STASH_ID} >actual &&
	test_cmp expect actual

Switched to a new branch 'some/topic'
Switched to branch 'main'
A	foo
ok 93 - create when branch name has /

expecting success of 3903.94 'create with multiple arguments for the message': 
	>foo &&
	git add foo &&
	STASH_ID=$(git stash create test untracked) &&
	echo "On main: test untracked" >expect &&
	git show --pretty=%s -s ${STASH_ID} >actual &&
	test_cmp expect actual

ok 94 - create with multiple arguments for the message

expecting success of 3903.95 'create in a detached state': 
	test_when_finished "git checkout main" &&
	git checkout HEAD~1 &&
	>foo &&
	git add foo &&
	STASH_ID=$(git stash create) &&
	HEAD_ID=$(git rev-parse --short HEAD) &&
	echo "WIP on (no branch): ${HEAD_ID} initial" >expect &&
	git show --pretty=%s -s ${STASH_ID} >actual &&
	test_cmp expect actual

Note: switching to 'HEAD~1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 47d5e0e initial
A	foo
Previous HEAD position was 47d5e0e initial
Switched to branch 'main'
A	foo
ok 95 - create in a detached state

expecting success of 3903.96 'stash -- <pathspec> stashes and restores the file': 
	>foo &&
	>bar &&
	git add foo bar &&
	git stash push -- foo &&
	test_path_is_file bar &&
	test_path_is_missing foo &&
	git stash pop &&
	test_path_is_file foo &&
	test_path_is_file bar

Saved working directory and index state WIP on main: 307367e subdir
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bar
	new file:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (77cde497b79c4bf69eca6c6f66d3d5d913caa5d5)
ok 96 - stash -- <pathspec> stashes and restores the file

expecting success of 3903.97 'stash -- <pathspec> stashes in subdirectory': 
	mkdir sub &&
	>foo &&
	>bar &&
	git add foo bar &&
	(
		cd sub &&
		git stash push -- ../foo
	) &&
	test_path_is_file bar &&
	test_path_is_missing foo &&
	git stash pop &&
	test_path_is_file foo &&
	test_path_is_file bar

Saved working directory and index state WIP on main: 307367e subdir
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bar
	new file:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (77cde497b79c4bf69eca6c6f66d3d5d913caa5d5)
ok 97 - stash -- <pathspec> stashes in subdirectory

expecting success of 3903.98 'stash with multiple pathspec arguments': 
	>foo &&
	>bar &&
	>extra &&
	git add foo bar extra &&
	git stash push -- foo bar &&
	test_path_is_missing bar &&
	test_path_is_missing foo &&
	test_path_is_file extra &&
	git stash pop &&
	test_path_is_file foo &&
	test_path_is_file bar &&
	test_path_is_file extra

Saved working directory and index state WIP on main: 307367e subdir
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bar
	new file:   extra
	new file:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (39084c1f0c9f714051bc864ea9bde5fe251804e7)
ok 98 - stash with multiple pathspec arguments

expecting success of 3903.99 'stash with file including $IFS character': 
	>"foo bar" &&
	>foo &&
	>bar &&
	git add foo* &&
	git stash push -- "foo b*" &&
	test_path_is_missing "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar &&
	git stash pop &&
	test_path_is_file "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar

Saved working directory and index state WIP on main: 307367e subdir
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bar
	new file:   extra
	new file:   foo
	new file:   foo bar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (a0eb395f4ba4b07852ce751bcb1e058bceeddcd6)
ok 99 - stash with file including $IFS character

expecting success of 3903.100 'stash with pathspec matching multiple paths': 
       echo original >file &&
       echo original >other-file &&
       git commit -m "two" file other-file &&
       echo modified >file &&
       echo modified >other-file &&
       git stash push -- "*file" &&
       echo original >expect &&
       test_cmp expect file &&
       test_cmp expect other-file &&
       git stash pop &&
       echo modified >expect &&
       test_cmp expect file &&
       test_cmp expect other-file

[main 7a1ff97] two
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Saved working directory and index state WIP on main: 7a1ff97 two
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   bar
	new file:   extra
	new file:   foo
	new file:   foo bar

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file
	modified:   other-file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	usage

Dropped refs/stash@{0} (a99e49675f8b387c63ffade2c2dafb4b31242b77)
ok 100 - stash with pathspec matching multiple paths

expecting success of 3903.101 'stash push -p with pathspec shows no changes only once': 
	>foo &&
	git add foo &&
	git commit -m "tmp" &&
	git stash push -p foo >actual &&
	echo "No local changes to save" >expect &&
	git reset --hard HEAD~ &&
	test_cmp expect actual

[main 9c8fc7b] tmp
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
 create mode 100644 extra
 create mode 100644 foo
 create mode 100644 foo bar
HEAD is now at 7a1ff97 two
ok 101 - stash push -p with pathspec shows no changes only once

expecting success of 3903.102 'push <pathspec>: show no changes when there are none': 
	>foo &&
	git add foo &&
	git commit -m "tmp" &&
	git stash push foo >actual &&
	echo "No local changes to save" >expect &&
	git reset --hard HEAD~ &&
	test_cmp expect actual

[main a73bcf2] tmp
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
HEAD is now at 7a1ff97 two
ok 102 - push <pathspec>: show no changes when there are none

expecting success of 3903.103 'push: <pathspec> not in the repository errors out': 
	>untracked &&
	test_must_fail git stash push untracked &&
	test_path_is_file untracked

error: pathspec ':(,prefix:0)untracked' did not match any file(s) known to git
Did you forget to 'git add'?
ok 103 - push: <pathspec> not in the repository errors out

expecting success of 3903.104 'push: -q is quiet with changes': 
	>foo &&
	git add foo &&
	git stash push -q >output 2>&1 &&
	test_must_be_empty output

ok 104 - push: -q is quiet with changes

expecting success of 3903.105 'push: -q is quiet with no changes': 
	git stash push -q >output 2>&1 &&
	test_must_be_empty output

ok 105 - push: -q is quiet with no changes

expecting success of 3903.106 'push: -q is quiet even if there is no initial commit': 
	git init foo_dir &&
	test_when_finished rm -rf foo_dir &&
	(
		cd foo_dir &&
		>bar &&
		test_must_fail git stash push -q >output 2>&1 &&
		test_must_be_empty output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/foo_dir/.git/
ok 106 - push: -q is quiet even if there is no initial commit

expecting success of 3903.107 'untracked files are left in place when -u is not given': 
	>file &&
	git add file &&
	>untracked &&
	git stash push file &&
	test_path_is_file untracked

Saved working directory and index state WIP on main: 7a1ff97 two
ok 107 - untracked files are left in place when -u is not given

expecting success of 3903.108 'stash without verb with pathspec': 
	>"foo bar" &&
	>foo &&
	>bar &&
	git add foo* &&
	git stash -- "foo b*" &&
	test_path_is_missing "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar &&
	git stash pop &&
	test_path_is_file "foo bar" &&
	test_path_is_file foo &&
	test_path_is_file bar

Saved working directory and index state WIP on main: 7a1ff97 two
Merging Updated upstream with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   foo
	new file:   foo bar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	bar
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	out
	output
	output.out
	repo/
	subdir/subfile2
	untracked
	usage

Dropped refs/stash@{0} (ee2f40a7fbffdfcabacf51aaa804cdfb77cbd5cc)
ok 108 - stash without verb with pathspec

expecting success of 3903.109 'stash -k -- <pathspec> leaves unstaged files intact': 
	git reset &&
	>foo &&
	>bar &&
	git add foo bar &&
	git commit -m "test" &&
	echo "foo" >foo &&
	echo "bar" >bar &&
	git stash -k -- foo &&
	test "",bar = $(cat foo),$(cat bar) &&
	git stash pop &&
	test foo,bar = $(cat foo),$(cat bar)

[main f03eb4e] test
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
 create mode 100644 foo
Saved working directory and index state WIP on main: f03eb4e test
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   bar
	modified:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	foo bar
	out
	output
	output.out
	repo/
	subdir/subfile2
	untracked
	usage

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (ba2404f46c158deabdec1768576a3ec717c3bd0e)
ok 109 - stash -k -- <pathspec> leaves unstaged files intact

expecting success of 3903.110 'stash -- <subdir> leaves untracked files in subdir intact': 
	git reset &&
	>subdir/untracked &&
	>subdir/tracked1 &&
	>subdir/tracked2 &&
	git add subdir/tracked* &&
	git stash -- subdir/ &&
	test_path_is_missing subdir/tracked1 &&
	test_path_is_missing subdir/tracked2 &&
	test_path_is_file subdir/untracked &&
	git stash pop &&
	test_path_is_file subdir/tracked1 &&
	test_path_is_file subdir/tracked2 &&
	test_path_is_file subdir/untracked

Unstaged changes after reset:
M	bar
M	foo
Saved working directory and index state WIP on main: f03eb4e test
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   subdir/tracked1
	new file:   subdir/tracked2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   bar
	modified:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	foo bar
	out
	output
	output.out
	repo/
	subdir/subfile2
	subdir/untracked
	untracked
	usage

Dropped refs/stash@{0} (2749eb7e55d7636b47e46aaec96ad1ff54f3d24c)
ok 110 - stash -- <subdir> leaves untracked files in subdir intact

expecting success of 3903.111 'stash -- <subdir> works with binary files': 
	git reset &&
	>subdir/untracked &&
	>subdir/tracked &&
	cp "$TEST_DIRECTORY"/test-binary-1.png subdir/tracked-binary &&
	git add subdir/tracked* &&
	git stash -- subdir/ &&
	test_path_is_missing subdir/tracked &&
	test_path_is_missing subdir/tracked-binary &&
	test_path_is_file subdir/untracked &&
	git stash pop &&
	test_path_is_file subdir/tracked &&
	test_path_is_file subdir/tracked-binary &&
	test_path_is_file subdir/untracked

Unstaged changes after reset:
M	bar
M	foo
Saved working directory and index state WIP on main: f03eb4e test
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   subdir/tracked
	new file:   subdir/tracked-binary
	new file:   subdir/tracked1
	new file:   subdir/tracked2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   bar
	modified:   foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	foo bar
	out
	output
	output.out
	repo/
	subdir/subfile2
	subdir/untracked
	untracked
	usage

Dropped refs/stash@{0} (e57a3ec7bcb89795529c05afe9c1d3759e31605b)
ok 111 - stash -- <subdir> works with binary files

expecting success of 3903.112 'stash with user.name and user.email set works': 
	test_config user.name "A U Thor" &&
	test_config user.email "a.u@thor" &&
	git stash

Saved working directory and index state WIP on main: f03eb4e test
ok 112 - stash with user.name and user.email set works

expecting success of 3903.113 'stash works when user.name and user.email are not set': 
	git reset &&
	>1 &&
	git add 1 &&
	echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" >expect &&
	git stash &&
	git show -s --format="%an <%ae>" refs/stash >actual &&
	test_cmp expect actual &&
	>2 &&
	git add 2 &&
	test_config user.useconfigonly true &&
	(
		sane_unset GIT_AUTHOR_NAME &&
		sane_unset GIT_AUTHOR_EMAIL &&
		sane_unset GIT_COMMITTER_NAME &&
		sane_unset GIT_COMMITTER_EMAIL &&
		test_unconfig user.email &&
		test_unconfig user.name &&
		test_must_fail git commit -m "should fail" &&
		echo "git stash <git@stash>" >expect &&
		>2 &&
		git stash &&
		git show -s --format="%an <%ae>" refs/stash >actual &&
		test_cmp expect actual
	)

Saved working directory and index state WIP on main: f03eb4e test
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
Saved working directory and index state WIP on main: f03eb4e test
ok 113 - stash works when user.name and user.email are not set

expecting success of 3903.114 'stash --keep-index with file deleted in index does not resurrect it on disk': 
	test_commit to-remove to-remove &&
	git rm to-remove &&
	git stash --keep-index &&
	test_path_is_missing to-remove

[main ebe821f] to-remove
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-remove
rm 'to-remove'
Saved working directory and index state WIP on main: ebe821f to-remove
ok 114 - stash --keep-index with file deleted in index does not resurrect it on disk

expecting success of 3903.115 'stash apply should succeed with unmodified file': 
	echo base >file &&
	git add file &&
	git commit -m base &&

	# now stash a modification
	echo modified >file &&
	git stash &&

	# make the file stat dirty
	cp file other &&
	mv other file &&

	git stash apply

[main 618e8ea] base
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 2 deletions(-)
 delete mode 100644 to-remove
Saved working directory and index state WIP on main: 618e8ea base
Merging Version stash was based on with Stashed changes
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	err
	expect
	expect1
	expect2
	expected
	file2.diff
	foo bar
	out
	output
	output.out
	repo/
	subdir/subfile2
	subdir/untracked
	untracked
	usage

no changes added to commit (use "git add" and/or "git commit -a")
ok 115 - stash apply should succeed with unmodified file

expecting success of 3903.116 'stash handles skip-worktree entries nicely': 
	test_commit A &&
	echo changed >A.t &&
	git add A.t &&
	git update-index --skip-worktree A.t &&
	rm A.t &&
	git stash &&

	git rev-parse --verify refs/stash:A.t

[main 3d10817] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Saved working directory and index state WIP on main: 3d10817 A
5ea2ed416fbd4a4cbe227b75fe255dd7fa6bd4d6
ok 116 - stash handles skip-worktree entries nicely

expecting success of 3903.117 'stash with core.fsyncmethod=batch': 
	test_create_unique_files 2 4 files_base_dir &&
	GIT_TEST_FSYNC=1 git -c core.fsync=loose-object -c core.fsyncmethod=batch stash push -u -- ./files_base_dir/ &&

	# The files were untracked, so use the third parent,
	# which contains the untracked files
	git ls-tree -r stash^3 -- ./files_base_dir/ |
	test_parse_ls_tree_oids >stashed_files_oids &&

	# We created 2 dirs with 4 files each (8 files total) above
	test_line_count = 8 stashed_files_oids &&
	git cat-file --batch-check='%(objectname)' <stashed_files_oids >stashed_files_actual &&
	test_cmp stashed_files_oids stashed_files_actual

Saved working directory and index state WIP on main: 3d10817 A
ok 117 - stash with core.fsyncmethod=batch

expecting success of 3903.118 'git stash succeeds despite directory/file change': 
	test_create_repo directory_file_switch_v1 &&
	(
		cd directory_file_switch_v1 &&
		test_commit init &&

		test_write_lines this file has some words >filler &&
		git add filler &&
		git commit -m filler &&

		git rm filler &&
		mkdir filler &&
		echo contents >filler/file &&
		git stash push
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/directory_file_switch_v1/.git/
[main (root-commit) 23406b7] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 90d1f39] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
rm 'filler'
Saved working directory and index state WIP on main: 90d1f39 filler
ok 118 - git stash succeeds despite directory/file change

expecting success of 3903.119 'git stash can pop file -> directory saved changes': 
	test_create_repo directory_file_switch_v2 &&
	(
		cd directory_file_switch_v2 &&
		test_commit init &&

		test_write_lines this file has some words >filler &&
		git add filler &&
		git commit -m filler &&

		git rm filler &&
		mkdir filler &&
		echo contents >filler/file &&
		cp filler/file expect &&
		git stash push --include-untracked &&
		git stash apply --index &&
		test_cmp expect filler/file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/directory_file_switch_v2/.git/
[main (root-commit) 23406b7] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 90d1f39] filler
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 filler
rm 'filler'
Saved working directory and index state WIP on main: 90d1f39 filler
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    filler

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	filler/

ok 119 - git stash can pop file -> directory saved changes

expecting success of 3903.120 'git stash can pop directory -> file saved changes': 
	test_create_repo directory_file_switch_v3 &&
	(
		cd directory_file_switch_v3 &&
		test_commit init &&

		mkdir filler &&
		test_write_lines some words >filler/file1 &&
		test_write_lines and stuff >filler/file2 &&
		git add filler &&
		git commit -m filler &&

		git rm -rf filler &&
		echo contents >filler &&
		cp filler expect &&
		git stash push --include-untracked &&
		git stash apply --index &&
		test_cmp expect filler
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/directory_file_switch_v3/.git/
[main (root-commit) 23406b7] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 7b72c0a] filler
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 filler/file1
 create mode 100644 filler/file2
rm 'filler/file1'
rm 'filler/file2'
Saved working directory and index state WIP on main: 7b72c0a filler
Merging Version stash was based on with Stashed changes
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    filler/file1
	deleted:    filler/file2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	expect
	filler

ok 120 - git stash can pop directory -> file saved changes

expecting success of 3903.121 'restore untracked files even when we hit conflicts': 
	git init restore_untracked_after_conflict &&
	(
		cd restore_untracked_after_conflict &&

		echo hi >a &&
		echo there >b &&
		git add . &&
		git commit -m first &&
		echo hello >a &&
		echo something >c &&

		git stash push --include-untracked &&

		echo conflict >a &&
		git add a &&
		git commit -m second &&

		test_must_fail git stash pop &&

		test_path_is_file c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t3903-stash/restore_untracked_after_conflict/.git/
[main (root-commit) fab7b0e] first
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
Saved working directory and index state WIP on main: fab7b0e first
[main 3101a13] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merging Updated upstream with Stashed changes
Auto-merging a
CONFLICT (content): Merge conflict in a
On branch main
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   a

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	c

no changes added to commit (use "git add" and/or "git commit -a")
The stash entry is kept in case you need it again.
ok 121 - restore untracked files even when we hit conflicts

# still have 2 known breakage(s)
# passed all remaining 119 test(s)
1..121
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4012-diff-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4012-diff-binary/.git/
expecting success of 4012.1 'prepare repository': 
	echo AIT >a && echo BIT >b && echo CIT >c && echo DIT >d &&
	git update-index --add a b c d &&
	echo git >a &&
	cat "$TEST_DIRECTORY"/test-binary-1.png >b &&
	echo git >c &&
	cat b b >d

ok 1 - prepare repository

expecting success of 4012.2 'apply --stat output for binary file change': 
	git diff >diff &&
	git apply --stat --summary <diff >current &&
	test_cmp expected current

ok 2 - apply --stat output for binary file change

expecting success of 4012.3 'diff --shortstat output for binary file change': 
	tail -n 1 expected >expect &&
	git diff --shortstat >current &&
	test_cmp expect current

ok 3 - diff --shortstat output for binary file change

expecting success of 4012.4 'diff --shortstat output for binary file change only': 
	echo " 1 file changed, 0 insertions(+), 0 deletions(-)" >expected &&
	git diff --shortstat -- b >current &&
	test_cmp expected current

ok 4 - diff --shortstat output for binary file change only

expecting success of 4012.5 'apply --numstat notices binary file change': 
	git diff >diff &&
	git apply --numstat <diff >current &&
	test_cmp expect.binary-numstat current

ok 5 - apply --numstat notices binary file change

expecting success of 4012.6 'apply --numstat understands diff --binary format': 
	git diff --binary >diff &&
	git apply --numstat <diff >current &&
	test_cmp expect.binary-numstat current

ok 6 - apply --numstat understands diff --binary format

expecting success of 4012.7 'apply detecting corrupt patch correctly': 
	git diff >output &&
	sed -e "s/-CIT/xCIT/" <output >broken &&
	test_must_fail git apply --stat --summary broken 2>detected &&
	detected=$(cat detected) &&
	detected=$(expr "$detected" : "error.*at line \\([0-9]*\\)\$") &&
	detected=$(sed -ne "${detected}p" broken) &&
	test "$detected" = xCIT

ok 7 - apply detecting corrupt patch correctly

expecting success of 4012.8 'apply detecting corrupt patch correctly': 
	git diff --binary | sed -e "s/-CIT/xCIT/" >broken &&
	test_must_fail git apply --stat --summary broken 2>detected &&
	detected=$(cat detected) &&
	detected=$(expr "$detected" : "error.*at line \\([0-9]*\\)\$") &&
	detected=$(sed -ne "${detected}p" broken) &&
	test "$detected" = xCIT

ok 8 - apply detecting corrupt patch correctly

expecting success of 4012.9 'initial commit': git commit -a -m initial
[master (root-commit) 4ede773] initial
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 d
ok 9 - initial commit

expecting success of 4012.10 'diff-index with --binary': 
	echo AIT >a && mv b e && echo CIT >c && cat e >d &&
	git update-index --add --remove a b c d e &&
	tree0=$(git write-tree) &&
	git diff --cached --binary >current &&
	git apply --stat --summary current

 a |    2 +-
 c |    2 +-
 d |  Bin
 e |    0 
 4 files changed, 2 insertions(+), 2 deletions(-)
 rename b => e (100%)
ok 10 - diff-index with --binary

expecting success of 4012.11 'apply binary patch': 
	git reset --hard &&
	git apply --binary --index <current &&
	tree1=$(git write-tree) &&
	test "$tree1" = "$tree0"

HEAD is now at 4ede773 initial
ok 11 - apply binary patch

expecting success of 4012.12 'diff --no-index with binary creation': 
	echo Q | q_to_nul >binary &&
	# hide error code from diff, which just indicates differences
	test_might_fail git diff --binary --no-index /dev/null binary >current &&
	rm binary &&
	git apply --binary <current &&
	echo Q >expected &&
	nul_to_q <binary >actual &&
	test_cmp expected actual

ok 12 - diff --no-index with binary creation

expecting success of 4012.13 'diff --stat with binary files and big change count': 
	printf "\01\00%1024d" 1 >binfilë &&
	git add binfilë &&
	i=0 &&
	while test $i -lt 10000; do
		echo $i &&
		i=$(($i + 1)) || return 1
	done >tëxtfilë &&
	git add tëxtfilë &&
	git -c core.quotepath=false diff --cached --stat binfilë tëxtfilë >output &&
	grep " | " output >actual &&
	test_cmp expect actual

ok 13 - diff --stat with binary files and big change count

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4016-diff-quote.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4016-diff-quote/.git/
expecting success of 4016.1 'setup': 
	echo P0.0 >"$P0.0" &&
	echo P0.1 >"$P0.1" &&
	echo P0.2 >"$P0.2" &&
	echo P0.3 >"$P0.3" &&
	echo P1.0 >"$P1.0" &&
	echo P1.2 >"$P1.2" &&
	echo P1.3 >"$P1.3" &&
	git add . &&
	git commit -m initial &&
	git mv "$P0.0" "R$P0.0" &&
	git mv "$P0.1" "R$P1.0" &&
	git mv "$P0.2" "R$P2.0" &&
	git mv "$P0.3" "R$P3.0" &&
	git mv "$P1.0" "R$P0.1" &&
	git mv "$P1.2" "R$P2.1" &&
	git mv "$P1.3" "R$P3.1" &&
	:

[master (root-commit) ab09c26] initial
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 create mode 100644 "pathname\twith HT.0"
 create mode 100644 "pathname\twith HT.2"
 create mode 100644 "pathname\twith HT.3"
 create mode 100644 pathname.0
 create mode 100644 pathname.1
 create mode 100644 pathname.2
 create mode 100644 pathname.3
ok 1 - setup

expecting success of 4016.2 'setup expected files': 
cat >expect <<\EOF
 rename pathname.1 => "Rpathname\twith HT.0" (100%)
 rename pathname.3 => "Rpathname\nwith LF.0" (100%)
 rename "pathname\twith HT.3" => "Rpathname\nwith LF.1" (100%)
 rename pathname.2 => Rpathname with SP.0 (100%)
 rename "pathname\twith HT.2" => Rpathname with SP.1 (100%)
 rename pathname.0 => Rpathname.0 (100%)
 rename "pathname\twith HT.0" => Rpathname.1 (100%)
EOF

ok 2 - setup expected files

expecting success of 4016.3 'git diff --summary -M HEAD': 
	git diff --summary -M HEAD >actual &&
	test_cmp expect actual

ok 3 - git diff --summary -M HEAD

expecting success of 4016.4 'git diff --numstat -M HEAD': 
	cat >expect <<-\EOF &&
	0	0	pathname.1 => "Rpathname\twith HT.0"
	0	0	pathname.3 => "Rpathname\nwith LF.0"
	0	0	"pathname\twith HT.3" => "Rpathname\nwith LF.1"
	0	0	pathname.2 => Rpathname with SP.0
	0	0	"pathname\twith HT.2" => Rpathname with SP.1
	0	0	pathname.0 => Rpathname.0
	0	0	"pathname\twith HT.0" => Rpathname.1
	EOF
	git diff --numstat -M HEAD >actual &&
	test_cmp expect actual

ok 4 - git diff --numstat -M HEAD

expecting success of 4016.5 'git diff --stat -M HEAD': 
	cat >expect <<-\EOF &&
	 pathname.1 => "Rpathname\twith HT.0"            | 0
	 pathname.3 => "Rpathname\nwith LF.0"            | 0
	 "pathname\twith HT.3" => "Rpathname\nwith LF.1" | 0
	 pathname.2 => Rpathname with SP.0               | 0
	 "pathname\twith HT.2" => Rpathname with SP.1    | 0
	 pathname.0 => Rpathname.0                       | 0
	 "pathname\twith HT.0" => Rpathname.1            | 0
	 7 files changed, 0 insertions(+), 0 deletions(-)
	EOF
	git diff --stat -M HEAD >actual &&
	test_cmp expect actual

ok 5 - git diff --stat -M HEAD

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4017-diff-retval.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4017-diff-retval/.git/
expecting success of 4017.1 'setup': 
	echo "1 " >a &&
	git add . &&
	git commit -m zeroth &&
	echo 1 >a &&
	git add . &&
	git commit -m first &&
	echo 2 >b &&
	git add . &&
	git commit -a -m second

[main (root-commit) 3122812] zeroth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main 569c22f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 21e8d0a] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
ok 1 - setup

expecting success of 4017.2 'git diff --quiet -w  HEAD^^ HEAD^': 
	git diff --quiet -w HEAD^^ HEAD^

ok 2 - git diff --quiet -w  HEAD^^ HEAD^

expecting success of 4017.3 'git diff --quiet HEAD^^ HEAD^': 
	test_must_fail git diff --quiet HEAD^^ HEAD^

ok 3 - git diff --quiet HEAD^^ HEAD^

expecting success of 4017.4 'git diff --quiet -w  HEAD^ HEAD': 
	test_must_fail git diff --quiet -w HEAD^ HEAD

ok 4 - git diff --quiet -w  HEAD^ HEAD

expecting success of 4017.5 'git diff-tree HEAD^ HEAD': 
	test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD

:000000 100644 0000000000000000000000000000000000000000 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f A	b
ok 5 - git diff-tree HEAD^ HEAD

expecting success of 4017.6 'git diff-tree HEAD^ HEAD -- a': 
	git diff-tree --exit-code HEAD^ HEAD -- a

ok 6 - git diff-tree HEAD^ HEAD -- a

expecting success of 4017.7 'git diff-tree HEAD^ HEAD -- b': 
	test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- b

:000000 100644 0000000000000000000000000000000000000000 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f A	b
ok 7 - git diff-tree HEAD^ HEAD -- b

expecting success of 4017.8 'echo HEAD | git diff-tree --stdin': 
	echo $(git rev-parse HEAD) | test_expect_code 1 git diff-tree --exit-code --stdin

21e8d0a2c6c9e76377a32feaec217a4295c3fd39
:000000 100644 0000000000000000000000000000000000000000 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f A	b
ok 8 - echo HEAD | git diff-tree --stdin

expecting success of 4017.9 'git diff-tree HEAD HEAD': 
	git diff-tree --exit-code HEAD HEAD

ok 9 - git diff-tree HEAD HEAD

expecting success of 4017.10 'git diff-files': 
	git diff-files --exit-code

ok 10 - git diff-files

expecting success of 4017.11 'git diff-index --cached HEAD': 
	git diff-index --exit-code --cached HEAD

ok 11 - git diff-index --cached HEAD

expecting success of 4017.12 'git diff-index --cached HEAD^': 
	test_expect_code 1 git diff-index --exit-code --cached HEAD^

:000000 100644 0000000000000000000000000000000000000000 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f A	b
ok 12 - git diff-index --cached HEAD^

expecting success of 4017.13 'git diff-index --cached HEAD^': 
	echo text >>b &&
	echo 3 >c &&
	git add . &&
	test_expect_code 1 git diff-index --exit-code --cached HEAD^

:000000 100644 0000000000000000000000000000000000000000 6ba94de6433d6530a0fb55e5e6da01023a4bc9e3 A	b
:000000 100644 0000000000000000000000000000000000000000 00750edc07d6415dcc07ae0351e9397b0222b7ba A	c
ok 13 - git diff-index --cached HEAD^

expecting success of 4017.14 'git diff-tree -Stext HEAD^ HEAD -- b': 
	git commit -m "text in b" &&
	test_expect_code 1 git diff-tree -p --exit-code -Stext HEAD^ HEAD -- b

[main afb69a2] text in b
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 c
diff --git a/b b/b
index 0cfbf08..6ba94de 100644
--- a/b
+++ b/b
@@ -1 +1,2 @@
 2
+text
ok 14 - git diff-tree -Stext HEAD^ HEAD -- b

expecting success of 4017.15 'git diff-tree -Snot-found HEAD^ HEAD -- b': 
	git diff-tree -p --exit-code -Snot-found HEAD^ HEAD -- b

ok 15 - git diff-tree -Snot-found HEAD^ HEAD -- b

expecting success of 4017.16 'git diff-files': 
	echo 3 >>c &&
	test_expect_code 1 git diff-files --exit-code

:100644 100644 00750edc07d6415dcc07ae0351e9397b0222b7ba 0000000000000000000000000000000000000000 M	c
ok 16 - git diff-files

expecting success of 4017.17 'git diff-index --cached HEAD': 
	git update-index c &&
	test_expect_code 1 git diff-index --exit-code --cached HEAD

:100644 100644 00750edc07d6415dcc07ae0351e9397b0222b7ba a5c8806279fa7d6b7d04418a47e21b7e89ab18f8 M	c
ok 17 - git diff-index --cached HEAD

expecting success of 4017.18 '--check --exit-code returns 0 for no difference': 

	git diff --check --exit-code


ok 18 - --check --exit-code returns 0 for no difference

expecting success of 4017.19 '--check --exit-code returns 1 for a clean difference': 

	echo "good" > a &&
	test_expect_code 1 git diff --check --exit-code


ok 19 - --check --exit-code returns 1 for a clean difference

expecting success of 4017.20 '--check --exit-code returns 3 for a dirty difference': 

	echo "bad   " >> a &&
	test_expect_code 3 git diff --check --exit-code


a:2: trailing whitespace.
+bad   
ok 20 - --check --exit-code returns 3 for a dirty difference

expecting success of 4017.21 '--check with --no-pager returns 2 for dirty difference': 

	test_expect_code 2 git --no-pager diff --check


a:2: trailing whitespace.
+bad   
ok 21 - --check with --no-pager returns 2 for dirty difference

expecting success of 4017.22 'check should test not just the last line': 
	echo "" >>a &&
	test_expect_code 2 git --no-pager diff --check


a:2: trailing whitespace.
+bad   
a:3: new blank line at EOF.
ok 22 - check should test not just the last line

expecting success of 4017.23 'check detects leftover conflict markers': 
	git reset --hard &&
	git checkout HEAD^ &&
	echo binary >>b &&
	git commit -m "side" b &&
	test_must_fail git merge main &&
	git add b &&
	test_expect_code 2 git --no-pager diff --cached --check >test.out &&
	test 3 = $(grep "conflict marker" test.out | wc -l) &&
	git reset --hard

HEAD is now at afb69a2 text in b
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 21e8d0a second
[detached HEAD f89b959] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging b
CONFLICT (content): Merge conflict in b
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at f89b959 side
ok 23 - check detects leftover conflict markers

expecting success of 4017.24 'check honors conflict marker length': 
	git reset --hard &&
	echo ">>>>>>> boo" >>b &&
	echo "======" >>a &&
	git diff --check a &&
	test_expect_code 2 git diff --check b &&
	git reset --hard &&
	echo ">>>>>>>> boo" >>b &&
	echo "========" >>a &&
	git diff --check &&
	echo "b conflict-marker-size=8" >.gitattributes &&
	test_expect_code 2 git diff --check b &&
	git diff --check a &&
	git reset --hard

HEAD is now at f89b959 side
b:3: leftover conflict marker
HEAD is now at f89b959 side
b:3: leftover conflict marker
HEAD is now at f89b959 side
ok 24 - check honors conflict marker length

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4015-diff-whitespace.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4015-diff-whitespace/.git/
expecting success of 4015.1 'Ray Lehtiniemi's example': 
	cat <<-\EOF >x &&
	do {
	   nothing;
	} while (0);
	EOF
	git update-index --add x &&
	old_hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$old_hash_x") &&

	cat <<-\EOF >x &&
	do
	{
	   nothing;
	}
	while (0);
	EOF
	new_hash_x=$(git hash-object x) &&
	after=$(git rev-parse --short "$new_hash_x") &&

	cat <<-EOF >expect &&
	diff --git a/x b/x
	index $before..$after 100644
	--- a/x
	+++ b/x
	@@ -1,3 +1,5 @@
	-do {
	+do
	+{
	    nothing;
	-} while (0);
	+}
	+while (0);
	EOF

	git diff >out &&
	test_cmp expect out &&

	git diff -w >out &&
	test_cmp expect out &&

	git diff -b >out &&
	test_cmp expect out

ok 1 - Ray Lehtiniemi's example

expecting success of 4015.2 'another test, without options': 
	tr Q "\015" <<-\EOF >x &&
	whitespace at beginning
	whitespace change
	whitespace in the middle
	whitespace at end
	unchanged line
	CR at endQ
	EOF

	git update-index x &&
	old_hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$old_hash_x") &&

	tr "_" " " <<-\EOF >x &&
	_	whitespace at beginning
	whitespace 	 change
	white space in the middle
	whitespace at end__
	unchanged line
	CR at end
	EOF
	new_hash_x=$(git hash-object x) &&
	after=$(git rev-parse --short "$new_hash_x") &&

	tr "Q_" "\015 " <<-EOF >expect &&
	diff --git a/x b/x
	index $before..$after 100644
	--- a/x
	+++ b/x
	@@ -1,6 +1,6 @@
	-whitespace at beginning
	-whitespace change
	-whitespace in the middle
	-whitespace at end
	+ 	whitespace at beginning
	+whitespace 	 change
	+white space in the middle
	+whitespace at end__
	 unchanged line
	-CR at endQ
	+CR at end
	EOF

	git diff >out &&
	test_cmp expect out &&

	git diff -w >out &&
	test_must_be_empty out &&

	git diff -w -b >out &&
	test_must_be_empty out &&

	git diff -w --ignore-space-at-eol >out &&
	test_must_be_empty out &&

	git diff -w -b --ignore-space-at-eol >out &&
	test_must_be_empty out &&

	git diff -w --ignore-cr-at-eol >out &&
	test_must_be_empty out &&

	tr "Q_" "\015 " <<-EOF >expect &&
	diff --git a/x b/x
	index $before..$after 100644
	--- a/x
	+++ b/x
	@@ -1,6 +1,6 @@
	-whitespace at beginning
	+_	whitespace at beginning
	 whitespace 	 change
	-whitespace in the middle
	+white space in the middle
	 whitespace at end__
	 unchanged line
	 CR at end
	EOF
	git diff -b >out &&
	test_cmp expect out &&

	git diff -b --ignore-space-at-eol >out &&
	test_cmp expect out &&

	git diff -b --ignore-cr-at-eol >out &&
	test_cmp expect out &&

	tr "Q_" "\015 " <<-EOF >expect &&
	diff --git a/x b/x
	index $before..$after 100644
	--- a/x
	+++ b/x
	@@ -1,6 +1,6 @@
	-whitespace at beginning
	-whitespace change
	-whitespace in the middle
	+_	whitespace at beginning
	+whitespace 	 change
	+white space in the middle
	 whitespace at end__
	 unchanged line
	 CR at end
	EOF
	git diff --ignore-space-at-eol >out &&
	test_cmp expect out &&

	git diff --ignore-space-at-eol --ignore-cr-at-eol >out &&
	test_cmp expect out &&

	tr "Q_" "\015 " <<-EOF >expect &&
	diff --git a/x b/x
	index_$before..$after 100644
	--- a/x
	+++ b/x
	@@ -1,6 +1,6 @@
	-whitespace at beginning
	-whitespace change
	-whitespace in the middle
	-whitespace at end
	+_	whitespace at beginning
	+whitespace_	_change
	+white space in the middle
	+whitespace at end__
	 unchanged line
	 CR at end
	EOF
	git diff --ignore-cr-at-eol >out &&
	test_cmp expect out

ok 2 - another test, without options

expecting success of 4015.3 'ignore-blank-lines: only new lines': 
	test_seq 5 >x &&
	git update-index x &&
	test_seq 5 | sed "/3/i\\
" >x &&
	git diff --ignore-blank-lines >out &&
	test_must_be_empty out

ok 3 - ignore-blank-lines: only new lines

expecting success of 4015.4 'ignore-blank-lines: only new lines with space': 
	test_seq 5 >x &&
	git update-index x &&
	test_seq 5 | sed "/3/i\\
 " >x &&
	git diff -w --ignore-blank-lines >out &&
	test_must_be_empty out

ok 4 - ignore-blank-lines: only new lines with space

expecting success of 4015.5 'ignore-blank-lines: after change': 
	cat <<-\EOF >x &&
	1
	2

	3
	4
	5

	6
	7
	EOF
	git update-index x &&
	cat <<-\EOF >x &&
	change

	1
	2
	3
	4
	5
	6

	7
	EOF
	git diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,6 +1,7 @@
	+change
	+
	 1
	 2
	-
	 3
	 4
	 5
	EOF
	compare_diff_patch expected out.tmp

ok 5 - ignore-blank-lines: after change

expecting success of 4015.6 'ignore-blank-lines: before change': 
	cat <<-\EOF >x &&
	1
	2

	3
	4
	5
	6
	7
	EOF
	git update-index x &&
	cat <<-\EOF >x &&

	1
	2
	3
	4
	5

	6
	7
	change
	EOF
	git diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -4,5 +4,7 @@
	 3
	 4
	 5
	+
	 6
	 7
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 6 - ignore-blank-lines: before change

expecting success of 4015.7 'ignore-blank-lines: between changes': 
	cat <<-\EOF >x &&
	1
	2
	3
	4
	5


	6
	7
	8
	9
	10
	EOF
	git update-index x &&
	cat <<-\EOF >x &&
	change
	1
	2

	3
	4
	5
	6
	7
	8

	9
	10
	change
	EOF
	git diff --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,5 +1,7 @@
	+change
	 1
	 2
	+
	 3
	 4
	 5
	@@ -8,5 +8,7 @@
	 6
	 7
	 8
	+
	 9
	 10
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 7 - ignore-blank-lines: between changes

expecting success of 4015.8 'ignore-blank-lines: between changes (with interhunkctx)': 
	test_seq 10 >x &&
	git update-index x &&
	cat <<-\EOF >x &&
	change
	1
	2

	3
	4
	5

	6
	7
	8
	9

	10
	change
	EOF
	git diff --inter-hunk-context=2 --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,10 +1,15 @@
	+change
	 1
	 2
	+
	 3
	 4
	 5
	+
	 6
	 7
	 8
	 9
	+
	 10
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 8 - ignore-blank-lines: between changes (with interhunkctx)

expecting success of 4015.9 'ignore-blank-lines: scattered spaces': 
	test_seq 10 >x &&
	git update-index x &&
	cat <<-\EOF >x &&
	change
	1
	2
	3

	4

	5

	6


	7

	8
	9
	10
	change
	EOF
	git diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,3 +1,4 @@
	+change
	 1
	 2
	 3
	@@ -8,3 +15,4 @@
	 8
	 9
	 10
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 9 - ignore-blank-lines: scattered spaces

expecting success of 4015.10 'ignore-blank-lines: spaces coalesce': 
	test_seq 6 >x &&
	git update-index x &&
	cat <<-\EOF >x &&
	change
	1
	2
	3

	4

	5

	6
	change
	EOF
	git diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,6 +1,11 @@
	+change
	 1
	 2
	 3
	+
	 4
	+
	 5
	+
	 6
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 10 - ignore-blank-lines: spaces coalesce

expecting success of 4015.11 'ignore-blank-lines: mix changes and blank lines': 
	test_seq 16 >x &&
	git update-index x &&
	cat <<-\EOF >x &&
	change
	1
	2

	3
	4
	5
	change
	6
	7
	8

	9
	10
	11
	change
	12
	13
	14

	15
	16
	change
	EOF
	git diff --ignore-blank-lines >out.tmp &&
	cat <<-\EOF >expected &&
	diff --git a/x b/x
	--- a/x
	+++ b/x
	@@ -1,8 +1,11 @@
	+change
	 1
	 2
	+
	 3
	 4
	 5
	+change
	 6
	 7
	 8
	@@ -9,8 +13,11 @@
	 9
	 10
	 11
	+change
	 12
	 13
	 14
	+
	 15
	 16
	+change
	EOF
	compare_diff_patch expected out.tmp

ok 11 - ignore-blank-lines: mix changes and blank lines

expecting success of 4015.12 'check mixed spaces and tabs in indent': 
	# This is indented with SP HT SP.
	echo " 	 foo();" >x &&
	test_must_fail git diff --check >check &&
	grep "space before tab in indent" check

x:1: space before tab in indent.
ok 12 - check mixed spaces and tabs in indent

expecting success of 4015.13 'check mixed tabs and spaces in indent': 
	# This is indented with HT SP HT.
	echo "	 	foo();" >x &&
	test_must_fail git diff --check >check &&
	grep "space before tab in indent" check

x:1: space before tab in indent.
ok 13 - check mixed tabs and spaces in indent

expecting success of 4015.14 'check with no whitespace errors': 
	git commit -m "snapshot" &&
	echo "foo();" >x &&
	git diff --check

[master (root-commit) e1e82b5] snapshot
 Author: A U Thor <author@example.com>
 1 file changed, 16 insertions(+)
 create mode 100644 x
ok 14 - check with no whitespace errors

expecting success of 4015.15 'check with trailing whitespace': 
	echo "foo(); " >x &&
	test_must_fail git diff --check

x:1: trailing whitespace.
+foo(); 
ok 15 - check with trailing whitespace

expecting success of 4015.16 'check with space before tab in indent': 
	# indent has space followed by hard tab
	echo " 	foo();" >x &&
	test_must_fail git diff --check

x:1: space before tab in indent.
+ 	foo();
ok 16 - check with space before tab in indent

expecting success of 4015.17 '--check and --exit-code are not exclusive': 
	git checkout x &&
	git diff --check --exit-code

Updated 1 path from the index
ok 17 - --check and --exit-code are not exclusive

expecting success of 4015.18 '--check and --quiet are not exclusive': 
	git diff --check --quiet

ok 18 - --check and --quiet are not exclusive

expecting success of 4015.19 '-w and --exit-code interact sensibly': 
	test_when_finished "git checkout x" &&
	{
		test_seq 15 &&
		echo " 16"
	} >x &&
	test_must_fail git diff --exit-code &&
	git diff -w >actual &&
	test_must_be_empty actual &&
	git diff -w --exit-code

diff --git a/x b/x
index 469c856..bd0db19 100644
--- a/x
+++ b/x
@@ -13,4 +13,4 @@
 13
 14
 15
-16
+ 16
Updated 1 path from the index
ok 19 - -w and --exit-code interact sensibly

expecting success of 4015.20 '-I and --exit-code interact sensibly': 
	test_when_finished "git checkout x" &&
	{
		test_seq 15 &&
		echo " 16"
	} >x &&
	test_must_fail git diff --exit-code &&
	git diff -I. >actual &&
	test_must_be_empty actual &&
	git diff -I. --exit-code

diff --git a/x b/x
index 469c856..bd0db19 100644
--- a/x
+++ b/x
@@ -13,4 +13,4 @@
 13
 14
 15
-16
+ 16
Updated 1 path from the index
ok 20 - -I and --exit-code interact sensibly

expecting success of 4015.21 'check staged with no whitespace errors': 
	echo "foo();" >x &&
	git add x &&
	git diff --cached --check

ok 21 - check staged with no whitespace errors

expecting success of 4015.22 'check staged with trailing whitespace': 
	echo "foo(); " >x &&
	git add x &&
	test_must_fail git diff --cached --check

x:1: trailing whitespace.
+foo(); 
ok 22 - check staged with trailing whitespace

expecting success of 4015.23 'check staged with space before tab in indent': 
	# indent has space followed by hard tab
	echo " 	foo();" >x &&
	git add x &&
	test_must_fail git diff --cached --check

x:1: space before tab in indent.
+ 	foo();
ok 23 - check staged with space before tab in indent

expecting success of 4015.24 'check with no whitespace errors (diff-index)': 
	echo "foo();" >x &&
	git add x &&
	git diff-index --check HEAD

ok 24 - check with no whitespace errors (diff-index)

expecting success of 4015.25 'check with trailing whitespace (diff-index)': 
	echo "foo(); " >x &&
	git add x &&
	test_must_fail git diff-index --check HEAD

x:1: trailing whitespace.
+foo(); 
ok 25 - check with trailing whitespace (diff-index)

expecting success of 4015.26 'check with space before tab in indent (diff-index)': 
	# indent has space followed by hard tab
	echo " 	foo();" >x &&
	git add x &&
	test_must_fail git diff-index --check HEAD

x:1: space before tab in indent.
+ 	foo();
ok 26 - check with space before tab in indent (diff-index)

expecting success of 4015.27 'check staged with no whitespace errors (diff-index)': 
	echo "foo();" >x &&
	git add x &&
	git diff-index --cached --check HEAD

ok 27 - check staged with no whitespace errors (diff-index)

expecting success of 4015.28 'check staged with trailing whitespace (diff-index)': 
	echo "foo(); " >x &&
	git add x &&
	test_must_fail git diff-index --cached --check HEAD

x:1: trailing whitespace.
+foo(); 
ok 28 - check staged with trailing whitespace (diff-index)

expecting success of 4015.29 'check staged with space before tab in indent (diff-index)': 
	# indent has space followed by hard tab
	echo " 	foo();" >x &&
	git add x &&
	test_must_fail git diff-index --cached --check HEAD

x:1: space before tab in indent.
+ 	foo();
ok 29 - check staged with space before tab in indent (diff-index)

expecting success of 4015.30 'check with no whitespace errors (diff-tree)': 
	echo "foo();" >x &&
	git commit -m "new commit" x &&
	git diff-tree --check HEAD^ HEAD

[master 8a0c590] new commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 16 deletions(-)
ok 30 - check with no whitespace errors (diff-tree)

expecting success of 4015.31 'check with trailing whitespace (diff-tree)': 
	echo "foo(); " >x &&
	git commit -m "another commit" x &&
	test_must_fail git diff-tree --check HEAD^ HEAD

[master e1bfb27] another commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
x:1: trailing whitespace.
+foo(); 
ok 31 - check with trailing whitespace (diff-tree)

expecting success of 4015.32 'check with space before tab in indent (diff-tree)': 
	# indent has space followed by hard tab
	echo " 	foo();" >x &&
	git commit -m "yet another" x &&
	test_must_fail git diff-tree --check HEAD^ HEAD

[master 59fa0e9] yet another
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
x:1: space before tab in indent.
+ 	foo();
ok 32 - check with space before tab in indent (diff-tree)

expecting success of 4015.33 'check with ignored trailing whitespace attr (diff-tree)': 
	test_when_finished "git reset --hard HEAD^" &&

	# create a whitespace error that should be ignored
	echo "* -whitespace" >.gitattributes &&
	git add .gitattributes &&
	echo "foo(); " >x &&
	git add x &&
	git commit -m "add trailing space" &&

	# with a worktree diff-tree ignores the whitespace error
	git diff-tree --root --check HEAD &&

	# without a worktree diff-tree still ignores the whitespace error
	git -C .git diff-tree --root --check HEAD

[master fd6b52c] add trailing space
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 .gitattributes
fd6b52cef13aeb6b7f1885c9b07026c3aa5a1035
fd6b52cef13aeb6b7f1885c9b07026c3aa5a1035
HEAD is now at 59fa0e9 yet another
ok 33 - check with ignored trailing whitespace attr (diff-tree)

expecting success of 4015.34 'check trailing whitespace (trailing-space: off)': 
	git config core.whitespace "-trailing-space" &&
	echo "foo ();   " >x &&
	git diff --check

ok 34 - check trailing whitespace (trailing-space: off)

expecting success of 4015.35 'check trailing whitespace (trailing-space: on)': 
	git config core.whitespace "trailing-space" &&
	echo "foo ();   " >x &&
	test_must_fail git diff --check

x:1: trailing whitespace.
+foo ();   
ok 35 - check trailing whitespace (trailing-space: on)

expecting success of 4015.36 'check space before tab in indent (space-before-tab: off)': 
	# indent contains space followed by HT
	git config core.whitespace "-space-before-tab" &&
	echo " 	foo ();" >x &&
	git diff --check

ok 36 - check space before tab in indent (space-before-tab: off)

expecting success of 4015.37 'check space before tab in indent (space-before-tab: on)': 
	# indent contains space followed by HT
	git config core.whitespace "space-before-tab" &&
	echo " 	foo ();   " >x &&
	test_must_fail git diff --check

x:1: trailing whitespace, space before tab in indent.
+ 	foo ();   
ok 37 - check space before tab in indent (space-before-tab: on)

expecting success of 4015.38 'check spaces as indentation (indent-with-non-tab: off)': 
	git config core.whitespace "-indent-with-non-tab" &&
	echo "        foo ();" >x &&
	git diff --check

ok 38 - check spaces as indentation (indent-with-non-tab: off)

expecting success of 4015.39 'check spaces as indentation (indent-with-non-tab: on)': 
	git config core.whitespace "indent-with-non-tab" &&
	echo "        foo ();" >x &&
	test_must_fail git diff --check

x:1: indent with spaces.
+        foo ();
ok 39 - check spaces as indentation (indent-with-non-tab: on)

expecting success of 4015.40 'ditto, but tabwidth=9': 
	git config core.whitespace "indent-with-non-tab,tabwidth=9" &&
	git diff --check

ok 40 - ditto, but tabwidth=9

expecting success of 4015.41 'check tabs and spaces as indentation (indent-with-non-tab: on)': 
	git config core.whitespace "indent-with-non-tab" &&
	echo "	                foo ();" >x &&
	test_must_fail git diff --check

x:1: indent with spaces.
+	                foo ();
ok 41 - check tabs and spaces as indentation (indent-with-non-tab: on)

expecting success of 4015.42 'ditto, but tabwidth=10': 
	git config core.whitespace "indent-with-non-tab,tabwidth=10" &&
	test_must_fail git diff --check

x:1: indent with spaces.
+	                foo ();
ok 42 - ditto, but tabwidth=10

expecting success of 4015.43 'ditto, but tabwidth=20': 
	git config core.whitespace "indent-with-non-tab,tabwidth=20" &&
	git diff --check

ok 43 - ditto, but tabwidth=20

expecting success of 4015.44 'check tabs as indentation (tab-in-indent: off)': 
	git config core.whitespace "-tab-in-indent" &&
	echo "	foo ();" >x &&
	git diff --check

ok 44 - check tabs as indentation (tab-in-indent: off)

expecting success of 4015.45 'check tabs as indentation (tab-in-indent: on)': 
	git config core.whitespace "tab-in-indent" &&
	echo "	foo ();" >x &&
	test_must_fail git diff --check

x:1: tab in indent.
+	foo ();
ok 45 - check tabs as indentation (tab-in-indent: on)

expecting success of 4015.46 'check tabs and spaces as indentation (tab-in-indent: on)': 
	git config core.whitespace "tab-in-indent" &&
	echo "	                foo ();" >x &&
	test_must_fail git diff --check

x:1: tab in indent.
+	                foo ();
ok 46 - check tabs and spaces as indentation (tab-in-indent: on)

expecting success of 4015.47 'ditto, but tabwidth=1 (must be irrelevant)': 
	git config core.whitespace "tab-in-indent,tabwidth=1" &&
	test_must_fail git diff --check

x:1: tab in indent.
+	                foo ();
ok 47 - ditto, but tabwidth=1 (must be irrelevant)

expecting success of 4015.48 'check tab-in-indent and indent-with-non-tab conflict': 
	git config core.whitespace "tab-in-indent,indent-with-non-tab" &&
	echo "foo ();" >x &&
	test_must_fail git diff --check

fatal: cannot enforce both tab-in-indent and indent-with-non-tab
ok 48 - check tab-in-indent and indent-with-non-tab conflict

expecting success of 4015.49 'check tab-in-indent excluded from wildcard whitespace attribute': 
	git config --unset core.whitespace &&
	echo "x whitespace" >.gitattributes &&
	echo "	  foo ();" >x &&
	git diff --check &&
	rm -f .gitattributes

ok 49 - check tab-in-indent excluded from wildcard whitespace attribute

expecting success of 4015.50 'line numbers in --check output are correct': 
	echo "" >x &&
	echo "foo(); " >>x &&
	test_must_fail git diff --check >check &&
	grep "x:2:" check

x:2: trailing whitespace.
ok 50 - line numbers in --check output are correct

expecting success of 4015.51 'checkdiff detects new trailing blank lines (1)': 
	echo "foo();" >x &&
	echo "" >>x &&
	test_must_fail git diff --check >check &&
	grep "new blank line" check

x:2: new blank line at EOF.
ok 51 - checkdiff detects new trailing blank lines (1)

expecting success of 4015.52 'checkdiff detects new trailing blank lines (2)': 
	test_write_lines a b "" "" >x &&
	git add x &&
	test_write_lines a "" "" "" "" >x &&
	test_must_fail git diff --check >check &&
	grep "new blank line" check

x:2: new blank line at EOF.
ok 52 - checkdiff detects new trailing blank lines (2)

expecting success of 4015.53 'checkdiff allows new blank lines': 
	git checkout x &&
	mv x y &&
	(
		echo "/* This is new */" &&
		echo "" &&
		cat y
	) >x &&
	git diff --check

Updated 1 path from the index
ok 53 - checkdiff allows new blank lines

expecting success of 4015.54 'whitespace-only changes not reported (diff)': 
	git reset --hard &&
	echo >x "hello world" &&
	git add x &&
	git commit -m "hello 1" &&
	echo >x "hello  world" &&
	git diff -b >actual &&
	test_must_be_empty actual

HEAD is now at 59fa0e9 yet another
[master 5a2317e] hello 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 54 - whitespace-only changes not reported (diff)

expecting success of 4015.55 'whitespace-only changes not reported (diffstat)': 
	# reuse state from previous test
	git diff --stat -b >actual &&
	test_must_be_empty actual

ok 55 - whitespace-only changes not reported (diffstat)

expecting success of 4015.56 'whitespace changes with modification reported (diffstat)': 
	git reset --hard &&
	echo >x "hello  world" &&
	git update-index --chmod=+x x &&
	git diff --stat --cached -b >actual &&
	cat <<-EOF >expect &&
	 x | 0
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	test_cmp expect actual

HEAD is now at 5a2317e hello 1
ok 56 - whitespace changes with modification reported (diffstat)

expecting success of 4015.57 'whitespace-only changes reported across renames (diffstat)': 
	git reset --hard &&
	for i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i" || return 1; done >x &&
	git add x &&
	git commit -m "base" &&
	sed -e "5s/^/ /" x >z &&
	git rm x &&
	git add z &&
	git diff -w -M --cached --stat >actual &&
	cat <<-EOF >expect &&
	 x => z | 0
	 1 file changed, 0 insertions(+), 0 deletions(-)
	EOF
	test_cmp expect actual

HEAD is now at 5a2317e hello 1
[master bb02800] base
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+), 1 deletion(-)
rm 'x'
ok 57 - whitespace-only changes reported across renames (diffstat)

expecting success of 4015.58 'whitespace-only changes reported across renames': 
	git reset --hard HEAD~1 &&
	for i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i" || return 1; done >x &&
	git add x &&
	hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$hash_x") &&
	git commit -m "base" &&
	sed -e "5s/^/ /" x >z &&
	git rm x &&
	git add z &&
	hash_z=$(git hash-object z) &&
	after=$(git rev-parse --short "$hash_z") &&
	git diff -w -M --cached >actual.raw &&
	sed -e "/^similarity index /s/[0-9][0-9]*/NUM/" actual.raw >actual &&
	cat <<-EOF >expect &&
	diff --git a/x b/z
	similarity index NUM%
	rename from x
	rename to z
	index $before..$after 100644
	EOF
	test_cmp expect actual

HEAD is now at 5a2317e hello 1
[master bb02800] base
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+), 1 deletion(-)
rm 'x'
ok 58 - whitespace-only changes reported across renames

expecting success of 4015.59 'rename empty': 
	git reset --hard &&
	>empty &&
	git add empty &&
	git commit -m empty &&
	git mv empty void &&
	git diff -w --cached -M >current &&
	test_cmp expected current

HEAD is now at bb02800 base
[master c4f276a] empty
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty
ok 59 - rename empty

expecting success of 4015.60 'combined diff with autocrlf conversion': 

	git reset --hard &&
	test_commit "one side" x hello one-side &&
	git checkout HEAD^ &&
	echo >x goodbye &&
	git commit -m "the other side" x &&
	git config core.autocrlf true &&
	test_must_fail git merge one-side >actual &&
	test_i18ngrep "Automatic merge failed" actual &&

	git diff >actual.raw &&
	sed -e "1,/^@@@/d" actual.raw >actual &&
	! grep "^-" actual


HEAD is now at c4f276a empty
[master daf548d] one side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 9 deletions(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at c4f276a empty
[detached HEAD fbb6449] the other side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 9 deletions(-)
Automatic merge failed; fix conflicts and then commit the result.
ok 60 - combined diff with autocrlf conversion

expecting success of 4015.61 'setup diff colors': 
	git config color.diff.plain normal &&
	git config color.diff.meta bold &&
	git config color.diff.frag cyan &&
	git config color.diff.func normal &&
	git config color.diff.old red &&
	git config color.diff.new green &&
	git config color.diff.commit yellow &&
	git config color.diff.whitespace blue &&

	git config core.autocrlf false

ok 61 - setup diff colors

expecting success of 4015.62 'diff that introduces a line with only tabs': 
	git config core.whitespace blank-at-eol &&
	git reset --hard &&
	echo "test" >x &&
	old_hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$old_hash_x") &&
	git commit -m "initial" x &&
	echo "{NTN}" | tr "NT" "\n\t" >>x &&
	new_hash_x=$(git hash-object x) &&
	after=$(git rev-parse --short "$new_hash_x") &&
	git diff --color >current.raw &&
	test_decode_color <current.raw >current &&

	cat >expected <<-EOF &&
	<BOLD>diff --git a/x b/x<RESET>
	<BOLD>index $before..$after 100644<RESET>
	<BOLD>--- a/x<RESET>
	<BOLD>+++ b/x<RESET>
	<CYAN>@@ -1 +1,4 @@<RESET>
	 test<RESET>
	<GREEN>+<RESET><GREEN>{<RESET>
	<GREEN>+<RESET><BLUE>	<RESET>
	<GREEN>+<RESET><GREEN>}<RESET>
	EOF

	test_cmp expected current

HEAD is now at fbb6449 the other side
[detached HEAD b654c4d] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 62 - diff that introduces a line with only tabs

expecting success of 4015.63 'diff that introduces and removes ws breakages': 
	git reset --hard &&
	{
		echo "0. blank-at-eol " &&
		echo "1. blank-at-eol "
	} >x &&
	old_hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$old_hash_x") &&
	git commit -a --allow-empty -m preimage &&
	{
		echo "0. blank-at-eol " &&
		echo "1. still-blank-at-eol " &&
		echo "2. and a new line "
	} >x &&
	new_hash_x=$(git hash-object x) &&
	after=$(git rev-parse --short "$new_hash_x") &&

	git diff --color >current.raw &&
	test_decode_color <current.raw >current &&

	cat >expected <<-EOF &&
	<BOLD>diff --git a/x b/x<RESET>
	<BOLD>index $before..$after 100644<RESET>
	<BOLD>--- a/x<RESET>
	<BOLD>+++ b/x<RESET>
	<CYAN>@@ -1,2 +1,3 @@<RESET>
	 0. blank-at-eol <RESET>
	<RED>-1. blank-at-eol <RESET>
	<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>
	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>
	EOF

	test_cmp expected current

HEAD is now at b654c4d initial
[detached HEAD a8a97bc] preimage
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 1 deletion(-)
ok 63 - diff that introduces and removes ws breakages

expecting success of 4015.64 'ws-error-highlight test setup': 

	git reset --hard &&
	{
		echo "0. blank-at-eol " &&
		echo "1. blank-at-eol "
	} >x &&
	old_hash_x=$(git hash-object x) &&
	before=$(git rev-parse --short "$old_hash_x") &&
	git commit -a --allow-empty -m preimage &&
	{
		echo "0. blank-at-eol " &&
		echo "1. still-blank-at-eol " &&
		echo "2. and a new line "
	} >x &&
	new_hash_x=$(git hash-object x) &&
	after=$(git rev-parse --short "$new_hash_x") &&

	cat >expect.default-old <<-EOF &&
	<BOLD>diff --git a/x b/x<RESET>
	<BOLD>index $before..$after 100644<RESET>
	<BOLD>--- a/x<RESET>
	<BOLD>+++ b/x<RESET>
	<CYAN>@@ -1,2 +1,3 @@<RESET>
	 0. blank-at-eol <RESET>
	<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>
	<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>
	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>
	EOF

	cat >expect.all <<-EOF &&
	<BOLD>diff --git a/x b/x<RESET>
	<BOLD>index $before..$after 100644<RESET>
	<BOLD>--- a/x<RESET>
	<BOLD>+++ b/x<RESET>
	<CYAN>@@ -1,2 +1,3 @@<RESET>
	 <RESET>0. blank-at-eol<RESET><BLUE> <RESET>
	<RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>
	<GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>
	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>
	EOF

	cat >expect.none <<-EOF
	<BOLD>diff --git a/x b/x<RESET>
	<BOLD>index $before..$after 100644<RESET>
	<BOLD>--- a/x<RESET>
	<BOLD>+++ b/x<RESET>
	<CYAN>@@ -1,2 +1,3 @@<RESET>
	 0. blank-at-eol <RESET>
	<RED>-1. blank-at-eol <RESET>
	<GREEN>+1. still-blank-at-eol <RESET>
	<GREEN>+2. and a new line <RESET>
	EOF


HEAD is now at a8a97bc preimage
[detached HEAD 641766e] preimage
 Author: A U Thor <author@example.com>
ok 64 - ws-error-highlight test setup

expecting success of 4015.65 'test --ws-error-highlight option': 

	git diff --color --ws-error-highlight=default,old >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.default-old current &&

	git diff --color --ws-error-highlight=all >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.all current &&

	git diff --color --ws-error-highlight=none >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.none current


ok 65 - test --ws-error-highlight option

expecting success of 4015.66 'test diff.wsErrorHighlight config': 

	git -c diff.wsErrorHighlight=default,old diff --color >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.default-old current &&

	git -c diff.wsErrorHighlight=all diff --color >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.all current &&

	git -c diff.wsErrorHighlight=none diff --color >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.none current


ok 66 - test diff.wsErrorHighlight config

expecting success of 4015.67 'option overrides diff.wsErrorHighlight': 

	git -c diff.wsErrorHighlight=none \
		diff --color --ws-error-highlight=default,old >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.default-old current &&

	git -c diff.wsErrorHighlight=default \
		diff --color --ws-error-highlight=all >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.all current &&

	git -c diff.wsErrorHighlight=all \
		diff --color --ws-error-highlight=none >current.raw &&
	test_decode_color <current.raw >current &&
	test_cmp expect.none current


ok 67 - option overrides diff.wsErrorHighlight

expecting success of 4015.68 'detect moved code, complete file': 
	git reset --hard &&
	cat <<-\EOF >test.c &&
	#include<stdio.h>
	main()
	{
	printf("Hello World");
	}
	EOF
	git add test.c &&
	git commit -m "add main function" &&
	file=$(git rev-parse --short HEAD:test.c) &&
	git mv test.c main.c &&
	test_config color.diff.oldMoved "normal red" &&
	test_config color.diff.newMoved "normal green" &&
	git diff HEAD --color-moved=zebra --color --no-renames >actual.raw &&
	test_decode_color <actual.raw >actual &&
	cat >expected <<-EOF &&
	<BOLD>diff --git a/main.c b/main.c<RESET>
	<BOLD>new file mode 100644<RESET>
	<BOLD>index 0000000..$file<RESET>
	<BOLD>--- /dev/null<RESET>
	<BOLD>+++ b/main.c<RESET>
	<CYAN>@@ -0,0 +1,5 @@<RESET>
	<BGREEN>+<RESET><BGREEN>#include<stdio.h><RESET>
	<BGREEN>+<RESET><BGREEN>main()<RESET>
	<BGREEN>+<RESET><BGREEN>{<RESET>
	<BGREEN>+<RESET><BGREEN>printf("Hello World");<RESET>
	<BGREEN>+<RESET><BGREEN>}<RESET>
	<BOLD>diff --git a/test.c b/test.c<RESET>
	<BOLD>deleted file mode 100644<RESET>
	<BOLD>index $file..0000000<RESET>
	<BOLD>--- a/test.c<RESET>
	<BOLD>+++ /dev/null<RESET>
	<CYAN>@@ -1,5 +0,0 @@<RESET>
	<BRED>-#include<stdio.h><RESET>
	<BRED>-main()<RESET>
	<BRED>-{<RESET>
	<BRED>-printf("Hello World");<RESET>
	<BRED>-}<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 641766e preimage
[detached HEAD 36350aa] add main function
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 test.c
ok 68 - detect moved code, complete file

expecting success of 4015.69 'detect malicious moved code, inside file': 
	test_config color.diff.oldMoved "normal red" &&
	test_config color.diff.newMoved "normal green" &&
	test_config color.diff.oldMovedAlternative "blue" &&
	test_config color.diff.newMovedAlternative "yellow" &&
	git reset --hard &&
	cat <<-\EOF >main.c &&
		#include<stdio.h>
		int stuff()
		{
			printf("Hello ");
			printf("World\n");
		}

		int secure_foo(struct user *u)
		{
			if (!u->is_allowed_foo)
				return;
			foo(u);
		}

		int main()
		{
			foo();
		}
	EOF
	cat <<-\EOF >test.c &&
		#include<stdio.h>
		int bar()
		{
			printf("Hello World, but different\n");
		}

		int another_function()
		{
			bar();
		}
	EOF
	git add main.c test.c &&
	git commit -m "add main and test file" &&
	before_main=$(git rev-parse --short HEAD:main.c) &&
	before_test=$(git rev-parse --short HEAD:test.c) &&
	cat <<-\EOF >main.c &&
		#include<stdio.h>
		int stuff()
		{
			printf("Hello ");
			printf("World\n");
		}

		int main()
		{
			foo();
		}
	EOF
	cat <<-\EOF >test.c &&
		#include<stdio.h>
		int bar()
		{
			printf("Hello World, but different\n");
		}

		int secure_foo(struct user *u)
		{
			foo(u);
			if (!u->is_allowed_foo)
				return;
		}

		int another_function()
		{
			bar();
		}
	EOF
	hash_main=$(git hash-object main.c) &&
	after_main=$(git rev-parse --short "$hash_main") &&
	hash_test=$(git hash-object test.c) &&
	after_test=$(git rev-parse --short "$hash_test") &&
	git diff HEAD --no-renames --color-moved=zebra --color >actual.raw &&
	test_decode_color <actual.raw >actual &&
	cat <<-EOF >expected &&
	<BOLD>diff --git a/main.c b/main.c<RESET>
	<BOLD>index $before_main..$after_main 100644<RESET>
	<BOLD>--- a/main.c<RESET>
	<BOLD>+++ b/main.c<RESET>
	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET>
	 printf("World\n");<RESET>
	 }<RESET>
	 <RESET>
	<BRED>-int secure_foo(struct user *u)<RESET>
	<BRED>-{<RESET>
	<BLUE>-if (!u->is_allowed_foo)<RESET>
	<BLUE>-return;<RESET>
	<RED>-foo(u);<RESET>
	<RED>-}<RESET>
	<RED>-<RESET>
	 int main()<RESET>
	 {<RESET>
	 foo();<RESET>
	<BOLD>diff --git a/test.c b/test.c<RESET>
	<BOLD>index $before_test..$after_test 100644<RESET>
	<BOLD>--- a/test.c<RESET>
	<BOLD>+++ b/test.c<RESET>
	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET>
	 printf("Hello World, but different\n");<RESET>
	 }<RESET>
	 <RESET>
	<BGREEN>+<RESET><BGREEN>int secure_foo(struct user *u)<RESET>
	<BGREEN>+<RESET><BGREEN>{<RESET>
	<GREEN>+<RESET><GREEN>foo(u);<RESET>
	<BGREEN>+<RESET><BGREEN>if (!u->is_allowed_foo)<RESET>
	<BGREEN>+<RESET><BGREEN>return;<RESET>
	<GREEN>+<RESET><GREEN>}<RESET>
	<GREEN>+<RESET>
	 int another_function()<RESET>
	 {<RESET>
	 bar();<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 36350aa add main function
[detached HEAD 727fc3d] add main and test file
 Author: A U Thor <author@example.com>
 2 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 main.c
ok 69 - detect malicious moved code, inside file

expecting success of 4015.70 'plain moved code, inside file': 
	test_config color.diff.oldMoved "normal red" &&
	test_config color.diff.newMoved "normal green" &&
	test_config color.diff.oldMovedAlternative "blue" &&
	test_config color.diff.newMovedAlternative "yellow" &&
	# needs previous test as setup
	git diff HEAD --no-renames --color-moved=plain --color >actual.raw &&
	test_decode_color <actual.raw >actual &&
	cat <<-EOF >expected &&
	<BOLD>diff --git a/main.c b/main.c<RESET>
	<BOLD>index $before_main..$after_main 100644<RESET>
	<BOLD>--- a/main.c<RESET>
	<BOLD>+++ b/main.c<RESET>
	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET>
	 printf("World\n");<RESET>
	 }<RESET>
	 <RESET>
	<BRED>-int secure_foo(struct user *u)<RESET>
	<BRED>-{<RESET>
	<BRED>-if (!u->is_allowed_foo)<RESET>
	<BRED>-return;<RESET>
	<BRED>-foo(u);<RESET>
	<BRED>-}<RESET>
	<BRED>-<RESET>
	 int main()<RESET>
	 {<RESET>
	 foo();<RESET>
	<BOLD>diff --git a/test.c b/test.c<RESET>
	<BOLD>index $before_test..$after_test 100644<RESET>
	<BOLD>--- a/test.c<RESET>
	<BOLD>+++ b/test.c<RESET>
	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET>
	 printf("Hello World, but different\n");<RESET>
	 }<RESET>
	 <RESET>
	<BGREEN>+<RESET><BGREEN>int secure_foo(struct user *u)<RESET>
	<BGREEN>+<RESET><BGREEN>{<RESET>
	<BGREEN>+<RESET><BGREEN>foo(u);<RESET>
	<BGREEN>+<RESET><BGREEN>if (!u->is_allowed_foo)<RESET>
	<BGREEN>+<RESET><BGREEN>return;<RESET>
	<BGREEN>+<RESET><BGREEN>}<RESET>
	<BGREEN>+<RESET>
	 int another_function()<RESET>
	 {<RESET>
	 bar();<RESET>
	EOF

	test_cmp expected actual

ok 70 - plain moved code, inside file

expecting success of 4015.71 'detect blocks of moved code': 
	git reset --hard &&
	cat <<-\EOF >lines.txt &&
		long line 1
		long line 2
		long line 3
		line 4
		line 5
		line 6
		line 7
		line 8
		line 9
		line 10
		line 11
		line 12
		line 13
		long line 14
		long line 15
		long line 16
	EOF
	git add lines.txt &&
	git commit -m "add poetry" &&
	cat <<-\EOF >lines.txt &&
		line 4
		line 5
		line 6
		line 7
		line 8
		line 9
		long line 1
		long line 2
		long line 3
		long line 14
		long line 15
		long line 16
		line 10
		line 11
		line 12
		line 13
	EOF
	test_config color.diff.oldMoved "magenta" &&
	test_config color.diff.newMoved "cyan" &&
	test_config color.diff.oldMovedAlternative "blue" &&
	test_config color.diff.newMovedAlternative "yellow" &&
	test_config color.diff.oldMovedDimmed "normal magenta" &&
	test_config color.diff.newMovedDimmed "normal cyan" &&
	test_config color.diff.oldMovedAlternativeDimmed "normal blue" &&
	test_config color.diff.newMovedAlternativeDimmed "normal yellow" &&
	git diff HEAD --no-renames --color-moved=blocks --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,16 +1,16 @@<RESET>
	<MAGENTA>-long line 1<RESET>
	<MAGENTA>-long line 2<RESET>
	<MAGENTA>-long line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	 line 6<RESET>
	 line 7<RESET>
	 line 8<RESET>
	 line 9<RESET>
	<CYAN>+<RESET><CYAN>long line 1<RESET>
	<CYAN>+<RESET><CYAN>long line 2<RESET>
	<CYAN>+<RESET><CYAN>long line 3<RESET>
	<CYAN>+<RESET><CYAN>long line 14<RESET>
	<CYAN>+<RESET><CYAN>long line 15<RESET>
	<CYAN>+<RESET><CYAN>long line 16<RESET>
	 line 10<RESET>
	 line 11<RESET>
	 line 12<RESET>
	 line 13<RESET>
	<MAGENTA>-long line 14<RESET>
	<MAGENTA>-long line 15<RESET>
	<MAGENTA>-long line 16<RESET>
	EOF
	test_cmp expected actual


HEAD is now at 727fc3d add main and test file
[detached HEAD 0f7fe07] add poetry
 Author: A U Thor <author@example.com>
 1 file changed, 16 insertions(+)
 create mode 100644 lines.txt
ok 71 - detect blocks of moved code

expecting success of 4015.72 'detect permutations inside moved code -- dimmed-zebra': 
	# reuse setup from test before!
	test_config color.diff.oldMoved "magenta" &&
	test_config color.diff.newMoved "cyan" &&
	test_config color.diff.oldMovedAlternative "blue" &&
	test_config color.diff.newMovedAlternative "yellow" &&
	test_config color.diff.oldMovedDimmed "normal magenta" &&
	test_config color.diff.newMovedDimmed "normal cyan" &&
	test_config color.diff.oldMovedAlternativeDimmed "normal blue" &&
	test_config color.diff.newMovedAlternativeDimmed "normal yellow" &&
	git diff HEAD --no-renames --color-moved=dimmed-zebra --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,16 +1,16 @@<RESET>
	<BMAGENTA>-long line 1<RESET>
	<BMAGENTA>-long line 2<RESET>
	<BMAGENTA>-long line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	 line 6<RESET>
	 line 7<RESET>
	 line 8<RESET>
	 line 9<RESET>
	<BCYAN>+<RESET><BCYAN>long line 1<RESET>
	<BCYAN>+<RESET><BCYAN>long line 2<RESET>
	<CYAN>+<RESET><CYAN>long line 3<RESET>
	<YELLOW>+<RESET><YELLOW>long line 14<RESET>
	<BYELLOW>+<RESET><BYELLOW>long line 15<RESET>
	<BYELLOW>+<RESET><BYELLOW>long line 16<RESET>
	 line 10<RESET>
	 line 11<RESET>
	 line 12<RESET>
	 line 13<RESET>
	<BMAGENTA>-long line 14<RESET>
	<BMAGENTA>-long line 15<RESET>
	<BMAGENTA>-long line 16<RESET>
	EOF
	test_cmp expected actual

ok 72 - detect permutations inside moved code -- dimmed-zebra

expecting success of 4015.73 'zebra alternate color is only used when necessary': 
	cat >old.txt <<-\EOF &&
	line 1A should be marked as oldMoved newMovedAlternate
	line 1B should be marked as oldMoved newMovedAlternate
	unchanged
	line 2A should be marked as oldMoved newMovedAlternate
	line 2B should be marked as oldMoved newMovedAlternate
	line 3A should be marked as oldMovedAlternate newMoved
	line 3B should be marked as oldMovedAlternate newMoved
	unchanged
	line 4A should be marked as oldMoved newMovedAlternate
	line 4B should be marked as oldMoved newMovedAlternate
	line 5A should be marked as oldMovedAlternate newMoved
	line 5B should be marked as oldMovedAlternate newMoved
	line 6A should be marked as oldMoved newMoved
	line 6B should be marked as oldMoved newMoved
	EOF
	cat >new.txt <<-\EOF &&
	  line 1A should be marked as oldMoved newMovedAlternate
	  line 1B should be marked as oldMoved newMovedAlternate
	unchanged
	  line 3A should be marked as oldMovedAlternate newMoved
	  line 3B should be marked as oldMovedAlternate newMoved
	  line 2A should be marked as oldMoved newMovedAlternate
	  line 2B should be marked as oldMoved newMovedAlternate
	unchanged
	  line 6A should be marked as oldMoved newMoved
	  line 6B should be marked as oldMoved newMoved
	    line 4A should be marked as oldMoved newMovedAlternate
	    line 4B should be marked as oldMoved newMovedAlternate
	  line 5A should be marked as oldMovedAlternate newMoved
	  line 5B should be marked as oldMovedAlternate newMoved
	EOF
	test_expect_code 1 git diff --no-index --color --color-moved=zebra \
		 --color-moved-ws=allow-indentation-change \
		 old.txt new.txt >output &&
	grep -v index output | test_decode_color >actual &&
	cat >expected <<-\EOF &&
	<BOLD>diff --git a/old.txt b/new.txt<RESET>
	<BOLD>--- a/old.txt<RESET>
	<BOLD>+++ b/new.txt<RESET>
	<CYAN>@@ -1,14 +1,14 @@<RESET>
	<BOLD;MAGENTA>-line 1A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;MAGENTA>-line 1B should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 1A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 1B should be marked as oldMoved newMovedAlternate<RESET>
	 unchanged<RESET>
	<BOLD;MAGENTA>-line 2A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;MAGENTA>-line 2B should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;BLUE>-line 3A should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;BLUE>-line 3B should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 3A should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 3B should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>  line 2A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>  line 2B should be marked as oldMoved newMovedAlternate<RESET>
	 unchanged<RESET>
	<BOLD;MAGENTA>-line 4A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;MAGENTA>-line 4B should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;BLUE>-line 5A should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;BLUE>-line 5B should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;MAGENTA>-line 6A should be marked as oldMoved newMoved<RESET>
	<BOLD;MAGENTA>-line 6B should be marked as oldMoved newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 6A should be marked as oldMoved newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 6B should be marked as oldMoved newMoved<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>    line 4A should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>    line 4B should be marked as oldMoved newMovedAlternate<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 5A should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>  line 5B should be marked as oldMovedAlternate newMoved<RESET>
	EOF
	test_cmp expected actual

ok 73 - zebra alternate color is only used when necessary

expecting success of 4015.74 'short lines of opposite sign do not get marked as moved': 
	cat >old.txt <<-\EOF &&
	this line should be marked as moved
	unchanged
	unchanged
	unchanged
	unchanged
	too short
	this line should be marked as oldMoved newMoved
	this line should be marked as oldMovedAlternate newMoved
	unchanged 1
	unchanged 2
	unchanged 3
	unchanged 4
	this line should be marked as oldMoved newMoved/newMovedAlternate
	EOF
	cat >new.txt <<-\EOF &&
	too short
	unchanged
	unchanged
	this line should be marked as moved
	too short
	unchanged
	unchanged
	this line should be marked as oldMoved newMoved/newMovedAlternate
	unchanged 1
	unchanged 2
	this line should be marked as oldMovedAlternate newMoved
	this line should be marked as oldMoved newMoved/newMovedAlternate
	unchanged 3
	this line should be marked as oldMoved newMoved
	unchanged 4
	EOF
	test_expect_code 1 git diff --no-index --color --color-moved=zebra \
		old.txt new.txt >output && cat output &&
	grep -v index output | test_decode_color >actual &&
	cat >expect <<-\EOF &&
	<BOLD>diff --git a/old.txt b/new.txt<RESET>
	<BOLD>--- a/old.txt<RESET>
	<BOLD>+++ b/new.txt<RESET>
	<CYAN>@@ -1,13 +1,15 @@<RESET>
	<BOLD;MAGENTA>-this line should be marked as moved<RESET>
	<GREEN>+<RESET><GREEN>too short<RESET>
	 unchanged<RESET>
	 unchanged<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>this line should be marked as moved<RESET>
	<GREEN>+<RESET><GREEN>too short<RESET>
	 unchanged<RESET>
	 unchanged<RESET>
	<RED>-too short<RESET>
	<BOLD;MAGENTA>-this line should be marked as oldMoved newMoved<RESET>
	<BOLD;BLUE>-this line should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>this line should be marked as oldMoved newMoved/newMovedAlternate<RESET>
	 unchanged 1<RESET>
	 unchanged 2<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>this line should be marked as oldMovedAlternate newMoved<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>this line should be marked as oldMoved newMoved/newMovedAlternate<RESET>
	 unchanged 3<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>this line should be marked as oldMoved newMoved<RESET>
	 unchanged 4<RESET>
	<BOLD;MAGENTA>-this line should be marked as oldMoved newMoved/newMovedAlternate<RESET>
	EOF
	test_cmp expect actual

diff --git a/old.txt b/new.txt
index b69be6f..7db2c55 100644
--- a/old.txt
+++ b/new.txt
@@ -1,13 +1,15 @@
-this line should be marked as moved
+too short
 unchanged
 unchanged
+this line should be marked as moved
+too short
 unchanged
 unchanged
-too short
-this line should be marked as oldMoved newMoved
-this line should be marked as oldMovedAlternate newMoved
+this line should be marked as oldMoved newMoved/newMovedAlternate
 unchanged 1
 unchanged 2
+this line should be marked as oldMovedAlternate newMoved
+this line should be marked as oldMoved newMoved/newMovedAlternate
 unchanged 3
+this line should be marked as oldMoved newMoved
 unchanged 4
-this line should be marked as oldMoved newMoved/newMovedAlternate
ok 74 - short lines of opposite sign do not get marked as moved

expecting success of 4015.75 'cmd option assumes configured colored-moved': 
	test_config color.diff.oldMoved "magenta" &&
	test_config color.diff.newMoved "cyan" &&
	test_config color.diff.oldMovedAlternative "blue" &&
	test_config color.diff.newMovedAlternative "yellow" &&
	test_config color.diff.oldMovedDimmed "normal magenta" &&
	test_config color.diff.newMovedDimmed "normal cyan" &&
	test_config color.diff.oldMovedAlternativeDimmed "normal blue" &&
	test_config color.diff.newMovedAlternativeDimmed "normal yellow" &&
	test_config diff.colorMoved zebra &&
	git diff HEAD --no-renames --color-moved --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,16 +1,16 @@<RESET>
	<MAGENTA>-long line 1<RESET>
	<MAGENTA>-long line 2<RESET>
	<MAGENTA>-long line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	 line 6<RESET>
	 line 7<RESET>
	 line 8<RESET>
	 line 9<RESET>
	<CYAN>+<RESET><CYAN>long line 1<RESET>
	<CYAN>+<RESET><CYAN>long line 2<RESET>
	<CYAN>+<RESET><CYAN>long line 3<RESET>
	<YELLOW>+<RESET><YELLOW>long line 14<RESET>
	<YELLOW>+<RESET><YELLOW>long line 15<RESET>
	<YELLOW>+<RESET><YELLOW>long line 16<RESET>
	 line 10<RESET>
	 line 11<RESET>
	 line 12<RESET>
	 line 13<RESET>
	<MAGENTA>-long line 14<RESET>
	<MAGENTA>-long line 15<RESET>
	<MAGENTA>-long line 16<RESET>
	EOF
	test_cmp expected actual

ok 75 - cmd option assumes configured colored-moved

expecting success of 4015.76 'no effect on diff from --color-moved with --word-diff': 
	cat <<-\EOF >text.txt &&
	Lorem Ipsum is simply dummy text of the printing and typesetting industry.
	EOF
	git add text.txt &&
	git commit -a -m "clean state" &&
	cat <<-\EOF >text.txt &&
	simply Lorem Ipsum dummy is text of the typesetting and printing industry.
	EOF
	git diff --color-moved --word-diff >actual &&
	git diff --word-diff >expect &&
	test_cmp expect actual

[detached HEAD 17804c5] clean state
 Author: A U Thor <author@example.com>
 2 files changed, 7 insertions(+), 6 deletions(-)
 create mode 100644 text.txt
ok 76 - no effect on diff from --color-moved with --word-diff

expecting success of 4015.77 'no effect on show from --color-moved with --word-diff': 
	git show --color-moved --word-diff >actual &&
	git show --word-diff >expect &&
	test_cmp expect actual

ok 77 - no effect on show from --color-moved with --word-diff

expecting success of 4015.78 'set up whitespace tests': 
	git reset --hard &&
	# Note that these lines have no leading or trailing whitespace.
	cat <<-\EOF >lines.txt &&
	line 1
	line 2
	line 3
	line 4
	line 5
	long line 6
	long line 7
	long line 8
	long line 9
	EOF
	git add lines.txt &&
	git commit -m "add poetry" &&
	git config color.diff.oldMoved "magenta" &&
	git config color.diff.newMoved "cyan"

HEAD is now at 17804c5 clean state
[detached HEAD 20118d6] add poetry
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+), 14 deletions(-)
ok 78 - set up whitespace tests

expecting success of 4015.79 'move detection ignoring whitespace ': 
	q_to_tab <<-\EOF >lines.txt &&
	Qlong line 6
	Qlong line 7
	Qlong line 8
	Qchanged long line 9
	line 1
	line 2
	line 3
	line 4
	line 5
	EOF
	git diff HEAD --no-renames --color-moved --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<GREEN>+<RESET>	<GREEN>long line 6<RESET>
	<GREEN>+<RESET>	<GREEN>long line 7<RESET>
	<GREEN>+<RESET>	<GREEN>long line 8<RESET>
	<GREEN>+<RESET>	<GREEN>changed long line 9<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<RED>-long line 6<RESET>
	<RED>-long line 7<RESET>
	<RED>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual &&

	git diff HEAD --no-renames --color-moved --color \
		--color-moved-ws=ignore-all-space >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<CYAN>+<RESET>	<CYAN>long line 6<RESET>
	<CYAN>+<RESET>	<CYAN>long line 7<RESET>
	<CYAN>+<RESET>	<CYAN>long line 8<RESET>
	<GREEN>+<RESET>	<GREEN>changed long line 9<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<MAGENTA>-long line 6<RESET>
	<MAGENTA>-long line 7<RESET>
	<MAGENTA>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual

ok 79 - move detection ignoring whitespace 

expecting success of 4015.80 'move detection ignoring whitespace changes': 
	git reset --hard &&
	# Lines 6-8 have a space change, but 9 is new whitespace
	q_to_tab <<-\EOF >lines.txt &&
	longQline 6
	longQline 7
	longQline 8
	long liQne 9
	line 1
	line 2
	line 3
	line 4
	line 5
	EOF

	git diff HEAD --no-renames --color-moved --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<GREEN>+<RESET><GREEN>long	line 6<RESET>
	<GREEN>+<RESET><GREEN>long	line 7<RESET>
	<GREEN>+<RESET><GREEN>long	line 8<RESET>
	<GREEN>+<RESET><GREEN>long li	ne 9<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<RED>-long line 6<RESET>
	<RED>-long line 7<RESET>
	<RED>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual &&

	git diff HEAD --no-renames --color-moved --color \
		--color-moved-ws=ignore-space-change >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<CYAN>+<RESET><CYAN>long	line 6<RESET>
	<CYAN>+<RESET><CYAN>long	line 7<RESET>
	<CYAN>+<RESET><CYAN>long	line 8<RESET>
	<GREEN>+<RESET><GREEN>long li	ne 9<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<MAGENTA>-long line 6<RESET>
	<MAGENTA>-long line 7<RESET>
	<MAGENTA>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual

HEAD is now at 20118d6 add poetry
ok 80 - move detection ignoring whitespace changes

expecting success of 4015.81 'move detection ignoring whitespace at eol': 
	git reset --hard &&
	# Lines 6-9 have new eol whitespace, but 9 also has it in the middle
	q_to_tab <<-\EOF >lines.txt &&
	long line 6Q
	long line 7Q
	long line 8Q
	longQline 9Q
	line 1
	line 2
	line 3
	line 4
	line 5
	EOF

	# avoid cluttering the output with complaints about our eol whitespace
	test_config core.whitespace -blank-at-eol &&

	git diff HEAD --no-renames --color-moved --color >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<GREEN>+<RESET><GREEN>long line 6	<RESET>
	<GREEN>+<RESET><GREEN>long line 7	<RESET>
	<GREEN>+<RESET><GREEN>long line 8	<RESET>
	<GREEN>+<RESET><GREEN>long	line 9	<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<RED>-long line 6<RESET>
	<RED>-long line 7<RESET>
	<RED>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual &&

	git diff HEAD --no-renames --color-moved --color \
		--color-moved-ws=ignore-space-at-eol >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat <<-\EOF >expected &&
	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
	<BOLD>--- a/lines.txt<RESET>
	<BOLD>+++ b/lines.txt<RESET>
	<CYAN>@@ -1,9 +1,9 @@<RESET>
	<CYAN>+<RESET><CYAN>long line 6	<RESET>
	<CYAN>+<RESET><CYAN>long line 7	<RESET>
	<CYAN>+<RESET><CYAN>long line 8	<RESET>
	<GREEN>+<RESET><GREEN>long	line 9	<RESET>
	 line 1<RESET>
	 line 2<RESET>
	 line 3<RESET>
	 line 4<RESET>
	 line 5<RESET>
	<MAGENTA>-long line 6<RESET>
	<MAGENTA>-long line 7<RESET>
	<MAGENTA>-long line 8<RESET>
	<RED>-long line 9<RESET>
	EOF
	test_cmp expected actual

HEAD is now at 20118d6 add poetry
ok 81 - move detection ignoring whitespace at eol

expecting success of 4015.82 'clean up whitespace-test colors': 
	git config --unset color.diff.oldMoved &&
	git config --unset color.diff.newMoved

ok 82 - clean up whitespace-test colors

expecting success of 4015.83 '--color-moved block at end of diff output respects MIN_ALNUM_COUNT': 
	git reset --hard &&
	>bar &&
	cat <<-\EOF >foo &&
	irrelevant_line
	line1
	EOF
	git add foo bar &&
	git commit -m x &&

	cat <<-\EOF >bar &&
	line1
	EOF
	cat <<-\EOF >foo &&
	irrelevant_line
	EOF

	git diff HEAD --color-moved=zebra --color --no-renames >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat >expected <<-\EOF &&
	<BOLD>diff --git a/bar b/bar<RESET>
	<BOLD>--- a/bar<RESET>
	<BOLD>+++ b/bar<RESET>
	<CYAN>@@ -0,0 +1 @@<RESET>
	<GREEN>+<RESET><GREEN>line1<RESET>
	<BOLD>diff --git a/foo b/foo<RESET>
	<BOLD>--- a/foo<RESET>
	<BOLD>+++ b/foo<RESET>
	<CYAN>@@ -1,2 +1 @@<RESET>
	 irrelevant_line<RESET>
	<RED>-line1<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 20118d6 add poetry
[detached HEAD 3843ae4] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
ok 83 - --color-moved block at end of diff output respects MIN_ALNUM_COUNT

expecting success of 4015.84 '--color-moved respects MIN_ALNUM_COUNT': 
	git reset --hard &&
	cat <<-\EOF >foo &&
	nineteen chars 456789
	irrelevant_line
	twenty chars 234567890
	EOF
	>bar &&
	git add foo bar &&
	git commit -m x &&

	cat <<-\EOF >foo &&
	irrelevant_line
	EOF
	cat <<-\EOF >bar &&
	twenty chars 234567890
	nineteen chars 456789
	EOF

	git diff HEAD --color-moved=zebra --color --no-renames >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat >expected <<-\EOF &&
	<BOLD>diff --git a/bar b/bar<RESET>
	<BOLD>--- a/bar<RESET>
	<BOLD>+++ b/bar<RESET>
	<CYAN>@@ -0,0 +1,2 @@<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>twenty chars 234567890<RESET>
	<GREEN>+<RESET><GREEN>nineteen chars 456789<RESET>
	<BOLD>diff --git a/foo b/foo<RESET>
	<BOLD>--- a/foo<RESET>
	<BOLD>+++ b/foo<RESET>
	<CYAN>@@ -1,3 +1 @@<RESET>
	<RED>-nineteen chars 456789<RESET>
	 irrelevant_line<RESET>
	<BOLD;MAGENTA>-twenty chars 234567890<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 3843ae4 x
[detached HEAD 2380d1c] x
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 1 deletion(-)
ok 84 - --color-moved respects MIN_ALNUM_COUNT

expecting success of 4015.85 '--color-moved treats adjacent blocks as separate for MIN_ALNUM_COUNT': 
	git reset --hard &&
	cat <<-\EOF >foo &&
	7charsA
	irrelevant_line
	7charsB
	7charsC
	EOF
	>bar &&
	git add foo bar &&
	git commit -m x &&

	cat <<-\EOF >foo &&
	irrelevant_line
	EOF
	cat <<-\EOF >bar &&
	7charsB
	7charsC
	7charsA
	EOF

	git diff HEAD --color-moved=zebra --color --no-renames >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat >expected <<-\EOF &&
	<BOLD>diff --git a/bar b/bar<RESET>
	<BOLD>--- a/bar<RESET>
	<BOLD>+++ b/bar<RESET>
	<CYAN>@@ -0,0 +1,3 @@<RESET>
	<GREEN>+<RESET><GREEN>7charsB<RESET>
	<GREEN>+<RESET><GREEN>7charsC<RESET>
	<GREEN>+<RESET><GREEN>7charsA<RESET>
	<BOLD>diff --git a/foo b/foo<RESET>
	<BOLD>--- a/foo<RESET>
	<BOLD>+++ b/foo<RESET>
	<CYAN>@@ -1,4 +1 @@<RESET>
	<RED>-7charsA<RESET>
	 irrelevant_line<RESET>
	<RED>-7charsB<RESET>
	<RED>-7charsC<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 2380d1c x
[detached HEAD df13bcb] x
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 2 deletions(-)
ok 85 - --color-moved treats adjacent blocks as separate for MIN_ALNUM_COUNT

expecting success of 4015.86 '--color-moved rewinds for MIN_ALNUM_COUNT': 
	git reset --hard &&
	test_write_lines >file \
		A B C one two three four five six seven D E F G H I J &&
	git add file &&
	test_write_lines >file \
		one two A B C D E F G H I J two three four five six seven &&
	git diff --color-moved=zebra -- file &&

	git diff --color-moved=zebra --color -- file >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	cat >expected <<-\EOF &&
	<BOLD>diff --git a/file b/file<RESET>
	<BOLD>--- a/file<RESET>
	<BOLD>+++ b/file<RESET>
	<CYAN>@@ -1,13 +1,8 @@<RESET>
	<GREEN>+<RESET><GREEN>one<RESET>
	<GREEN>+<RESET><GREEN>two<RESET>
	 A<RESET>
	 B<RESET>
	 C<RESET>
	<RED>-one<RESET>
	<BOLD;MAGENTA>-two<RESET>
	<BOLD;MAGENTA>-three<RESET>
	<BOLD;MAGENTA>-four<RESET>
	<BOLD;MAGENTA>-five<RESET>
	<BOLD;MAGENTA>-six<RESET>
	<BOLD;MAGENTA>-seven<RESET>
	 D<RESET>
	 E<RESET>
	 F<RESET>
	<CYAN>@@ -15,3 +10,9 @@<RESET> <RESET>G<RESET>
	 H<RESET>
	 I<RESET>
	 J<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>two<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>three<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>four<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>five<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>six<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>seven<RESET>
	EOF

	test_cmp expected actual

HEAD is now at df13bcb x
diff --git a/file b/file
index 9c6a1c7..fa3558c 100644
--- a/file
+++ b/file
@@ -1,13 +1,8 @@
+one
+two
 A
 B
 C
-one
-two
-three
-four
-five
-six
-seven
 D
 E
 F
@@ -15,3 +10,9 @@ G
 H
 I
 J
+two
+three
+four
+five
+six
+seven
ok 86 - --color-moved rewinds for MIN_ALNUM_COUNT

expecting success of 4015.87 'move detection with submodules': 
	test_create_repo bananas &&
	echo ripe >bananas/recipe &&
	git -C bananas add recipe &&
	test_commit fruit &&
	test_commit -C bananas recipe &&
	git submodule add ./bananas &&
	git add bananas &&
	git commit -a -m "bananas are like a heavy library?" &&
	echo foul >bananas/recipe &&
	echo ripe >fruit.t &&

	git diff --submodule=diff --color-moved --color >actual &&

	# no move detection as the moved line is across repository boundaries.
	test_decode_color <actual >decoded_actual &&
	! grep BGREEN decoded_actual &&
	! grep BRED decoded_actual &&

	# nor did we mess with it another way
	git diff --submodule=diff --color >expect.raw &&
	test_decode_color <expect.raw >expect &&
	test_cmp expect decoded_actual &&
	rm -rf bananas &&
	git submodule deinit bananas

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4015-diff-whitespace/bananas/.git/
[detached HEAD a5c8711] fruit
 Author: A U Thor <author@example.com>
 2 files changed, 18 insertions(+)
 create mode 100644 file
 create mode 100644 fruit.t
[master (root-commit) 9469881] recipe
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 recipe
 create mode 100644 recipe.t
Adding existing repo at 'bananas' to the index
[detached HEAD 82f96c4] bananas are like a heavy library?
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+), 7 deletions(-)
 create mode 100644 .gitmodules
 create mode 160000 bananas
Submodule 'bananas' (./bananas) unregistered for path 'bananas'
ok 87 - move detection with submodules

expecting success of 4015.88 'only move detection ignores white spaces': 
	git reset --hard &&
	q_to_tab <<-\EOF >text.txt &&
		a long line to exceed per-line minimum
		another long line to exceed per-line minimum
		original file
	EOF
	git add text.txt &&
	git commit -m "add text" &&
	q_to_tab <<-\EOF >text.txt &&
		Qa long line to exceed per-line minimum
		Qanother long line to exceed per-line minimum
		new file
	EOF

	# Make sure we get a different diff using -w
	git diff --color --color-moved -w >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	q_to_tab <<-\EOF >expected &&
	<BOLD>diff --git a/text.txt b/text.txt<RESET>
	<BOLD>--- a/text.txt<RESET>
	<BOLD>+++ b/text.txt<RESET>
	<CYAN>@@ -1,3 +1,3 @@<RESET>
	 Qa long line to exceed per-line minimum<RESET>
	 Qanother long line to exceed per-line minimum<RESET>
	<RED>-original file<RESET>
	<GREEN>+<RESET><GREEN>new file<RESET>
	EOF
	test_cmp expected actual &&

	# And now ignoring white space only in the move detection
	git diff --color --color-moved \
		--color-moved-ws=ignore-all-space,ignore-space-change,ignore-space-at-eol >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&
	q_to_tab <<-\EOF >expected &&
	<BOLD>diff --git a/text.txt b/text.txt<RESET>
	<BOLD>--- a/text.txt<RESET>
	<BOLD>+++ b/text.txt<RESET>
	<CYAN>@@ -1,3 +1,3 @@<RESET>
	<BOLD;MAGENTA>-a long line to exceed per-line minimum<RESET>
	<BOLD;MAGENTA>-another long line to exceed per-line minimum<RESET>
	<RED>-original file<RESET>
	<BOLD;CYAN>+<RESET>Q<BOLD;CYAN>a long line to exceed per-line minimum<RESET>
	<BOLD;CYAN>+<RESET>Q<BOLD;CYAN>another long line to exceed per-line minimum<RESET>
	<GREEN>+<RESET><GREEN>new file<RESET>
	EOF
	test_cmp expected actual

HEAD is now at 82f96c4 bananas are like a heavy library?
[detached HEAD 3bfc51e] add text
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 1 deletion(-)
ok 88 - only move detection ignores white spaces

expecting success of 4015.89 'compare whitespace delta across moved blocks': 

	git reset --hard &&
	q_to_tab <<-\EOF >text.txt &&
	QIndented
	QText across
	Qsome lines
	QBut! <- this stands out
	QAdjusting with
	QQdifferent starting
	Qwhite spaces
	QAnother outlier
	QQQIndented
	QQQText across
	QQQfive lines
	QQQthat has similar lines
	QQQto previous blocks, but with different indent
	QQQYetQAnotherQoutlierQ
	QLine with internal w h i t e s p a c e change
	EOF

	git add text.txt &&
	git commit -m "add text.txt" &&

	q_to_tab <<-\EOF >text.txt &&
	QQIndented
	QQText across
	QQsome lines
	QQQBut! <- this stands out
	Adjusting with
	Qdifferent starting
	white spaces
	AnotherQoutlier
	QQIndented
	QQText across
	QQfive lines
	QQthat has similar lines
	QQto previous blocks, but with different indent
	QQYetQAnotherQoutlier
	QLine with internal whitespace change
	EOF

	git diff --color --color-moved --color-moved-ws=allow-indentation-change >actual.raw &&
	grep -v "index" actual.raw | test_decode_color >actual &&

	q_to_tab <<-\EOF >expected &&
		<BOLD>diff --git a/text.txt b/text.txt<RESET>
		<BOLD>--- a/text.txt<RESET>
		<BOLD>+++ b/text.txt<RESET>
		<CYAN>@@ -1,15 +1,15 @@<RESET>
		<BOLD;MAGENTA>-QIndented<RESET>
		<BOLD;MAGENTA>-QText across<RESET>
		<BOLD;MAGENTA>-Qsome lines<RESET>
		<RED>-QBut! <- this stands out<RESET>
		<BOLD;MAGENTA>-QAdjusting with<RESET>
		<BOLD;MAGENTA>-QQdifferent starting<RESET>
		<BOLD;MAGENTA>-Qwhite spaces<RESET>
		<RED>-QAnother outlier<RESET>
		<BOLD;MAGENTA>-QQQIndented<RESET>
		<BOLD;MAGENTA>-QQQText across<RESET>
		<BOLD;MAGENTA>-QQQfive lines<RESET>
		<BOLD;MAGENTA>-QQQthat has similar lines<RESET>
		<BOLD;MAGENTA>-QQQto previous blocks, but with different indent<RESET>
		<RED>-QQQYetQAnotherQoutlierQ<RESET>
		<RED>-QLine with internal w h i t e s p a c e change<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Indented<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Text across<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>some lines<RESET>
		<GREEN>+<RESET>QQQ<GREEN>But! <- this stands out<RESET>
		<BOLD;CYAN>+<RESET><BOLD;CYAN>Adjusting with<RESET>
		<BOLD;CYAN>+<RESET>Q<BOLD;CYAN>different starting<RESET>
		<BOLD;CYAN>+<RESET><BOLD;CYAN>white spaces<RESET>
		<GREEN>+<RESET><GREEN>AnotherQoutlier<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Indented<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Text across<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>five lines<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>that has similar lines<RESET>
		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>to previous blocks, but with different indent<RESET>
		<GREEN>+<RESET>QQ<GREEN>YetQAnotherQoutlier<RESET>
		<GREEN>+<RESET>Q<GREEN>Line with internal whitespace change<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 3bfc51e add text
[detached HEAD 7dd9671] add text.txt
 Author: A U Thor <author@example.com>
 1 file changed, 15 insertions(+), 3 deletions(-)
ok 89 - compare whitespace delta across moved blocks

expecting success of 4015.90 'bogus settings in move detection erroring out': 
	test_must_fail git diff --color-moved=bogus 2>err &&
	test_i18ngrep "must be one of" err &&
	test_i18ngrep bogus err &&

	test_must_fail git -c diff.colormoved=bogus diff 2>err &&
	test_i18ngrep "must be one of" err &&
	test_i18ngrep "from command-line config" err &&

	test_must_fail git diff --color-moved-ws=bogus 2>err &&
	test_i18ngrep "possible values" err &&
	test_i18ngrep bogus err &&

	test_must_fail git -c diff.colormovedws=bogus diff 2>err &&
	test_i18ngrep "possible values" err &&
	test_i18ngrep "from command-line config" err

error: color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'
error: bad --color-moved argument: bogus
error: color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'
fatal: unable to parse 'diff.colormoved' from command-line config
error: unknown color-moved-ws mode 'bogus', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'
error: unknown color-moved-ws mode 'bogus', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'
error: invalid mode 'bogus' in --color-moved-ws
error: unknown color-moved-ws mode 'bogus', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'
fatal: unable to parse 'diff.colormovedws' from command-line config
ok 90 - bogus settings in move detection erroring out

expecting success of 4015.91 'compare whitespace delta incompatible with other space options': 
	test_must_fail git diff \
		--color-moved-ws=allow-indentation-change,ignore-all-space \
		2>err &&
	test_i18ngrep allow-indentation-change err

error: color-moved-ws: allow-indentation-change cannot be combined with other whitespace modes
error: invalid mode 'allow-indentation-change,ignore-all-space' in --color-moved-ws
ok 91 - compare whitespace delta incompatible with other space options

expecting success of 4015.92 'compare mixed whitespace delta across moved blocks': 

	git reset --hard &&
	tr "^|Q_" "\f\v\t " <<-EOF >text.txt &&
	^__
	|____too short without
	^
	___being grouped across blank line
	${EMPTY}
	context
	lines
	to
	anchor
	____Indented text to
	_Q____be further indented by four spaces across
	____Qseveral lines
	QQ____These two lines have had their
	____indentation reduced by four spaces
	Qdifferent indentation change
	____too short
	EOF

	git add text.txt &&
	git commit -m "add text.txt" &&

	tr "^|Q_" "\f\v\t " <<-EOF >text.txt &&
	context
	lines
	to
	anchor
	QIndented text to
	QQbe further indented by four spaces across
	Q____several lines
	${EMPTY}
	QQtoo short without
	${EMPTY}
	^Q_______being grouped across blank line
	${EMPTY}
	Q_QThese two lines have had their
	indentation reduced by four spaces
	QQdifferent indentation change
	__Qtoo short
	EOF

	git -c color.diff.whitespace="normal red" \
		-c core.whitespace=space-before-tab \
		diff --color --color-moved --ws-error-highlight=all \
		--color-moved-ws=allow-indentation-change >actual.raw &&
	grep -v "index" actual.raw | tr "\f\v" "^|" | test_decode_color >actual &&

	cat <<-\EOF >expected &&
	<BOLD>diff --git a/text.txt b/text.txt<RESET>
	<BOLD>--- a/text.txt<RESET>
	<BOLD>+++ b/text.txt<RESET>
	<CYAN>@@ -1,16 +1,16 @@<RESET>
	<BOLD;MAGENTA>-<RESET><BOLD;MAGENTA>^<RESET><BRED>  <RESET>
	<BOLD;MAGENTA>-<RESET><BOLD;MAGENTA>|    too short without<RESET>
	<BOLD;MAGENTA>-<RESET><BOLD;MAGENTA>^<RESET>
	<BOLD;MAGENTA>-<RESET><BOLD;MAGENTA>   being grouped across blank line<RESET>
	<BOLD;MAGENTA>-<RESET>
	 <RESET>context<RESET>
	 <RESET>lines<RESET>
	 <RESET>to<RESET>
	 <RESET>anchor<RESET>
	<BOLD;MAGENTA>-<RESET><BOLD;MAGENTA>    Indented text to<RESET>
	<BOLD;MAGENTA>-<RESET><BRED> <RESET>	<BOLD;MAGENTA>    be further indented by four spaces across<RESET>
	<BOLD;MAGENTA>-<RESET><BRED>    <RESET>	<BOLD;MAGENTA>several lines<RESET>
	<BOLD;BLUE>-<RESET>		<BOLD;BLUE>    These two lines have had their<RESET>
	<BOLD;BLUE>-<RESET><BOLD;BLUE>    indentation reduced by four spaces<RESET>
	<BOLD;MAGENTA>-<RESET>	<BOLD;MAGENTA>different indentation change<RESET>
	<RED>-<RESET><RED>    too short<RESET>
	<BOLD;CYAN>+<RESET>	<BOLD;CYAN>Indented text to<RESET>
	<BOLD;CYAN>+<RESET>		<BOLD;CYAN>be further indented by four spaces across<RESET>
	<BOLD;CYAN>+<RESET>	<BOLD;CYAN>    several lines<RESET>
	<BOLD;YELLOW>+<RESET>
	<BOLD;YELLOW>+<RESET>		<BOLD;YELLOW>too short without<RESET>
	<BOLD;YELLOW>+<RESET>
	<BOLD;YELLOW>+<RESET><BOLD;YELLOW>^	       being grouped across blank line<RESET>
	<BOLD;YELLOW>+<RESET>
	<BOLD;CYAN>+<RESET>	<BRED> <RESET>	<BOLD;CYAN>These two lines have had their<RESET>
	<BOLD;CYAN>+<RESET><BOLD;CYAN>indentation reduced by four spaces<RESET>
	<BOLD;YELLOW>+<RESET>		<BOLD;YELLOW>different indentation change<RESET>
	<GREEN>+<RESET><BRED>  <RESET>	<GREEN>too short<RESET>
	EOF

	test_cmp expected actual

HEAD is now at 7dd9671 add text.txt
[detached HEAD 9fe2176] add text.txt
 Author: A U Thor <author@example.com>
 1 file changed, 16 insertions(+), 15 deletions(-)
ok 92 - compare mixed whitespace delta across moved blocks

expecting success of 4015.93 'combine --ignore-blank-lines with --function-context': 
	test_write_lines 1 "" 2 3 4 5 >a &&
	test_write_lines 1    2 3 4   >b &&
	test_must_fail git diff --no-index \
		--ignore-blank-lines --function-context a b >actual.raw &&
	sed -n "/@@/,\$p" <actual.raw >actual &&
	cat <<-\EOF >expect &&
	@@ -1,6 +1,4 @@
	 1
	-
	 2
	 3
	 4
	-5
	EOF
	test_cmp expect actual

ok 93 - combine --ignore-blank-lines with --function-context

expecting success of 4015.94 'combine --ignore-blank-lines with --function-context 2': 
	test_write_lines    a b c "" function 1 2 3 4 5 "" 6 7 8 9 >a &&
	test_write_lines "" a b c "" function 1 2 3 4 5    6 7 8   >b &&
	test_must_fail git diff --no-index \
		--ignore-blank-lines --function-context a b >actual.raw &&
	sed -n "/@@/,\$p" <actual.raw >actual &&
	cat <<-\EOF >expect &&
	@@ -5,11 +6,9 @@ c
	 function
	 1
	 2
	 3
	 4
	 5
	-
	 6
	 7
	 8
	-9
	EOF
	test_cmp expect actual

ok 94 - combine --ignore-blank-lines with --function-context 2

# passed all 94 test(s)
1..94
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4018-diff-funcname.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4018-diff-funcname/.git/
expecting success of 4018.1 'setup': 
	# a non-trivial custom pattern
	git config diff.custom1.funcname "!static
!String
[^ 	].*s.*" &&

	# a custom pattern which matches to end of line
	git config diff.custom2.funcname "......Beer\$" &&

	# alternation in pattern
	git config diff.custom3.funcname "Beer$" &&
	git config diff.custom3.xfuncname "^[ 	]*((public|static).*)$" &&

	# for regexp compilation tests
	echo A >A.java &&
	echo B >B.java

ok 1 - setup

expecting success of 4018.2 'setup: test-tool userdiff': 
	# Make sure additions to builtin_drivers are sorted
	test_when_finished "rm builtin-drivers.sorted" &&
	test-tool userdiff list-builtin-drivers >builtin-drivers &&
	test_file_not_empty builtin-drivers &&
	sort <builtin-drivers >builtin-drivers.sorted &&
	test_cmp builtin-drivers.sorted builtin-drivers &&

	# Ditto, but "custom" requires the .git directory and config
	# to be setup and read.
	test_when_finished "rm custom-drivers.sorted" &&
	test-tool userdiff list-custom-drivers >custom-drivers &&
	test_file_not_empty custom-drivers &&
	sort <custom-drivers >custom-drivers.sorted &&
	test_cmp custom-drivers.sorted custom-drivers

ok 2 - setup: test-tool userdiff

expecting success of 4018.3 'builtin ada pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 3 - builtin ada pattern compiles

expecting success of 4018.4 'builtin ada wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 4 - builtin ada wordRegex pattern compiles

expecting success of 4018.5 'builtin bash pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 5 - builtin bash pattern compiles

expecting success of 4018.6 'builtin bash wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 6 - builtin bash wordRegex pattern compiles

expecting success of 4018.7 'builtin bibtex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 7 - builtin bibtex pattern compiles

expecting success of 4018.8 'builtin bibtex wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 8 - builtin bibtex wordRegex pattern compiles

expecting success of 4018.9 'builtin cpp pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 9 - builtin cpp pattern compiles

expecting success of 4018.10 'builtin cpp wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 10 - builtin cpp wordRegex pattern compiles

expecting success of 4018.11 'builtin csharp pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 11 - builtin csharp pattern compiles

expecting success of 4018.12 'builtin csharp wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 12 - builtin csharp wordRegex pattern compiles

expecting success of 4018.13 'builtin css pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 13 - builtin css pattern compiles

expecting success of 4018.14 'builtin css wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 14 - builtin css wordRegex pattern compiles

expecting success of 4018.15 'builtin dts pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 15 - builtin dts pattern compiles

expecting success of 4018.16 'builtin dts wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 16 - builtin dts wordRegex pattern compiles

expecting success of 4018.17 'builtin elixir pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 17 - builtin elixir pattern compiles

expecting success of 4018.18 'builtin elixir wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 18 - builtin elixir wordRegex pattern compiles

expecting success of 4018.19 'builtin fortran pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 19 - builtin fortran pattern compiles

expecting success of 4018.20 'builtin fortran wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 20 - builtin fortran wordRegex pattern compiles

expecting success of 4018.21 'builtin fountain pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 21 - builtin fountain pattern compiles

expecting success of 4018.22 'builtin fountain wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 22 - builtin fountain wordRegex pattern compiles

expecting success of 4018.23 'builtin golang pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 23 - builtin golang pattern compiles

expecting success of 4018.24 'builtin golang wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 24 - builtin golang wordRegex pattern compiles

expecting success of 4018.25 'builtin html pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 25 - builtin html pattern compiles

expecting success of 4018.26 'builtin html wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 26 - builtin html wordRegex pattern compiles

expecting success of 4018.27 'builtin java pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 27 - builtin java pattern compiles

expecting success of 4018.28 'builtin java wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 28 - builtin java wordRegex pattern compiles

expecting success of 4018.29 'builtin kotlin pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 29 - builtin kotlin pattern compiles

expecting success of 4018.30 'builtin kotlin wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 30 - builtin kotlin wordRegex pattern compiles

expecting success of 4018.31 'builtin markdown pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 31 - builtin markdown pattern compiles

expecting success of 4018.32 'builtin markdown wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 32 - builtin markdown wordRegex pattern compiles

expecting success of 4018.33 'builtin matlab pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 33 - builtin matlab pattern compiles

expecting success of 4018.34 'builtin matlab wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 34 - builtin matlab wordRegex pattern compiles

expecting success of 4018.35 'builtin objc pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 35 - builtin objc pattern compiles

expecting success of 4018.36 'builtin objc wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 36 - builtin objc wordRegex pattern compiles

expecting success of 4018.37 'builtin pascal pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 37 - builtin pascal pattern compiles

expecting success of 4018.38 'builtin pascal wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 38 - builtin pascal wordRegex pattern compiles

expecting success of 4018.39 'builtin perl pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 39 - builtin perl pattern compiles

expecting success of 4018.40 'builtin perl wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 40 - builtin perl wordRegex pattern compiles

expecting success of 4018.41 'builtin php pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 41 - builtin php pattern compiles

expecting success of 4018.42 'builtin php wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 42 - builtin php wordRegex pattern compiles

expecting success of 4018.43 'builtin python pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 43 - builtin python pattern compiles

expecting success of 4018.44 'builtin python wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 44 - builtin python wordRegex pattern compiles

expecting success of 4018.45 'builtin ruby pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 45 - builtin ruby pattern compiles

expecting success of 4018.46 'builtin ruby wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 46 - builtin ruby wordRegex pattern compiles

expecting success of 4018.47 'builtin rust pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 47 - builtin rust pattern compiles

expecting success of 4018.48 'builtin rust wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 48 - builtin rust wordRegex pattern compiles

expecting success of 4018.49 'builtin scheme pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 49 - builtin scheme pattern compiles

expecting success of 4018.50 'builtin scheme wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 50 - builtin scheme wordRegex pattern compiles

expecting success of 4018.51 'builtin tex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 51 - builtin tex pattern compiles

expecting success of 4018.52 'builtin tex wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 52 - builtin tex wordRegex pattern compiles

expecting success of 4018.53 'builtin custom1 pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 53 - builtin custom1 pattern compiles

expecting success of 4018.54 'builtin custom1 wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 54 - builtin custom1 wordRegex pattern compiles

expecting success of 4018.55 'builtin custom2 pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 55 - builtin custom2 pattern compiles

expecting success of 4018.56 'builtin custom2 wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 56 - builtin custom2 wordRegex pattern compiles

expecting success of 4018.57 'builtin custom3 pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
-A
+B
ok 57 - builtin custom3 pattern compiles

expecting success of 4018.58 'builtin custom3 wordRegex pattern compiles': 
		echo "*.java diff=$p" >.gitattributes &&
		test_expect_code 1 git diff --no-index --word-diff \
			A.java B.java 2>msg &&
		test_i18ngrep ! fatal msg &&
		test_i18ngrep ! error msg
	
diff --git a/A.java b/B.java
index f70f10e..223b783 100644
--- a/A.java
+++ b/B.java
@@ -1 +1 @@
[-A-]{+B+}
ok 58 - builtin custom3 wordRegex pattern compiles

expecting success of 4018.59 'last regexp must not be negated': 
	echo "*.java diff=java" >.gitattributes &&
	test_config diff.java.funcname "!static" &&
	test_expect_code 128 git diff --no-index A.java B.java 2>msg &&
	test_i18ngrep ": Last expression must not be negated:" msg

fatal: Last expression must not be negated: !static
ok 59 - last regexp must not be negated

expecting success of 4018.60 'setup hunk header tests': 
	for i in $diffpatterns
	do
		echo "$i-* diff=$i" || return 1
	done > .gitattributes &&

	# add all test files to the index
	(
		cd "$TEST_DIRECTORY"/t4018 &&
		git --git-dir="$TRASH_DIRECTORY/.git" add .
	) &&

	# place modified files in the worktree
	for i in $(git ls-files)
	do
		sed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1
	done

ok 60 - setup hunk header tests

expecting success of 4018.61 'hunk header: README': 
		git diff -U1 README >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ How to write RIGHT test cases
ok 61 - hunk header: README

expecting success of 4018.62 'hunk header: bash-arithmetic-function': 
		git diff -U1 bash-arithmetic-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 62 - hunk header: bash-arithmetic-function

expecting success of 4018.63 'hunk header: bash-bashism-style-compact': 
		git diff -U1 bash-bashism-style-compact >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ function RIGHT {
ok 63 - hunk header: bash-bashism-style-compact

expecting success of 4018.64 'hunk header: bash-bashism-style-function': 
		git diff -U1 bash-bashism-style-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function RIGHT {
ok 64 - hunk header: bash-bashism-style-function

expecting success of 4018.65 'hunk header: bash-bashism-style-whitespace': 
		git diff -U1 bash-bashism-style-whitespace >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function 	RIGHT 	( 	) 	{
ok 65 - hunk header: bash-bashism-style-whitespace

expecting success of 4018.66 'hunk header: bash-conditional-function': 
		git diff -U1 bash-conditional-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 66 - hunk header: bash-conditional-function

expecting success of 4018.67 'hunk header: bash-missing-parentheses': 
		git diff -U1 bash-missing-parentheses >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ function RIGHT {
ok 67 - hunk header: bash-missing-parentheses

expecting success of 4018.68 'hunk header: bash-mixed-style-compact': 
		git diff -U1 bash-mixed-style-compact >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function RIGHT(){
ok 68 - hunk header: bash-mixed-style-compact

expecting success of 4018.69 'hunk header: bash-mixed-style-function': 
		git diff -U1 bash-mixed-style-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function RIGHT() {
ok 69 - hunk header: bash-mixed-style-function

expecting success of 4018.70 'hunk header: bash-nested-functions': 
		git diff -U1 bash-nested-functions >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT()
ok 70 - hunk header: bash-nested-functions

expecting success of 4018.71 'hunk header: bash-other-characters': 
		git diff -U1 bash-other-characters >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ _RIGHT_0n()
ok 71 - hunk header: bash-other-characters

expecting success of 4018.72 'hunk header: bash-posix-style-compact': 
		git diff -U1 bash-posix-style-compact >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 72 - hunk header: bash-posix-style-compact

expecting success of 4018.73 'hunk header: bash-posix-style-function': 
		git diff -U1 bash-posix-style-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 73 - hunk header: bash-posix-style-function

expecting success of 4018.74 'hunk header: bash-posix-style-whitespace': 
		git diff -U1 bash-posix-style-whitespace >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT 	( 	)
ok 74 - hunk header: bash-posix-style-whitespace

expecting success of 4018.75 'hunk header: bash-subshell-function': 
		git diff -U1 bash-subshell-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 75 - hunk header: bash-subshell-function

expecting success of 4018.76 'hunk header: bash-trailing-comment': 
		git diff -U1 bash-trailing-comment >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT()
ok 76 - hunk header: bash-trailing-comment

expecting success of 4018.77 'hunk header: cpp-c++-function': 
		git diff -U1 cpp-c++-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ Item RIGHT::DoSomething( Args with_spaces )
ok 77 - hunk header: cpp-c++-function

expecting success of 4018.78 'hunk header: cpp-class-constructor': 
		git diff -U1 cpp-class-constructor >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ Item::Item(int RIGHT)
ok 78 - hunk header: cpp-class-constructor

expecting success of 4018.79 'hunk header: cpp-class-constructor-mem-init': 
		git diff -U1 cpp-class-constructor-mem-init >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ Item::Item(int RIGHT) :
ok 79 - hunk header: cpp-class-constructor-mem-init

expecting success of 4018.80 'hunk header: cpp-class-definition': 
		git diff -U1 cpp-class-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ class RIGHT
ok 80 - hunk header: cpp-class-definition

expecting success of 4018.81 'hunk header: cpp-class-definition-derived': 
		git diff -U1 cpp-class-definition-derived >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ class RIGHT :
ok 81 - hunk header: cpp-class-definition-derived

expecting success of 4018.82 'hunk header: cpp-class-destructor': 
		git diff -U1 cpp-class-destructor >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT::~RIGHT()
ok 82 - hunk header: cpp-class-destructor

expecting success of 4018.83 'hunk header: cpp-function-returning-global-type': 
		git diff -U1 cpp-function-returning-global-type >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ ::Item get::it::RIGHT()
ok 83 - hunk header: cpp-function-returning-global-type

expecting success of 4018.84 'hunk header: cpp-function-returning-nested': 
		git diff -U1 cpp-function-returning-nested >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ get::Item get::it::RIGHT()
ok 84 - hunk header: cpp-function-returning-nested

expecting success of 4018.85 'hunk header: cpp-function-returning-pointer': 
		git diff -U1 cpp-function-returning-pointer >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ const char *get_it_RIGHT(char *ptr)
ok 85 - hunk header: cpp-function-returning-pointer

expecting success of 4018.86 'hunk header: cpp-function-returning-reference': 
		git diff -U1 cpp-function-returning-reference >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ string& get::it::RIGHT(char *ptr)
ok 86 - hunk header: cpp-function-returning-reference

expecting success of 4018.87 'hunk header: cpp-gnu-style-function': 
		git diff -U1 cpp-gnu-style-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT(int arg)
ok 87 - hunk header: cpp-gnu-style-function

expecting success of 4018.88 'hunk header: cpp-namespace-definition': 
		git diff -U1 cpp-namespace-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ namespace RIGHT
ok 88 - hunk header: cpp-namespace-definition

expecting success of 4018.89 'hunk header: cpp-operator-definition': 
		git diff -U1 cpp-operator-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ Value operator+(Value LEFT, Value RIGHT)
ok 89 - hunk header: cpp-operator-definition

expecting success of 4018.90 'hunk header: cpp-skip-access-specifiers': 
		git diff -U1 cpp-skip-access-specifiers >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ class RIGHT : public Baseclass
ok 90 - hunk header: cpp-skip-access-specifiers

expecting success of 4018.91 'hunk header: cpp-skip-comment-block': 
		git diff -U1 cpp-skip-comment-block >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -7,3 +7,3 @@ struct item RIGHT(int i)
ok 91 - hunk header: cpp-skip-comment-block

expecting success of 4018.92 'hunk header: cpp-skip-labels': 
		git diff -U1 cpp-skip-labels >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ void RIGHT (void)
ok 92 - hunk header: cpp-skip-labels

expecting success of 4018.93 'hunk header: cpp-struct-definition': 
		git diff -U1 cpp-struct-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -7,3 +7,3 @@ struct RIGHT {
ok 93 - hunk header: cpp-struct-definition

expecting success of 4018.94 'hunk header: cpp-struct-single-line': 
		git diff -U1 cpp-struct-single-line >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,2 +6,2 @@ struct RIGHT_iterator_tag {};
ok 94 - hunk header: cpp-struct-single-line

expecting success of 4018.95 'hunk header: cpp-template-function-definition': 
		git diff -U1 cpp-template-function-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ template<class T> int RIGHT(T arg)
ok 95 - hunk header: cpp-template-function-definition

expecting success of 4018.96 'hunk header: cpp-union-definition': 
		git diff -U1 cpp-union-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ union RIGHT {
ok 96 - hunk header: cpp-union-definition

expecting success of 4018.97 'hunk header: cpp-void-c-function': 
		git diff -U1 cpp-void-c-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ void RIGHT (void)
ok 97 - hunk header: cpp-void-c-function

expecting success of 4018.98 'hunk header: css-attribute-value-selector': 
		git diff -U1 css-attribute-value-selector >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ [class*="RIGHT"] {
ok 98 - hunk header: css-attribute-value-selector

expecting success of 4018.99 'hunk header: css-block-level-@-statements': 
		git diff -U1 css-block-level-@-statements >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ @keyframes RIGHT {
ok 99 - hunk header: css-block-level-@-statements

expecting success of 4018.100 'hunk header: css-brace-in-col-1': 
		git diff -U1 css-brace-in-col-1 >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT label.control-label
ok 100 - hunk header: css-brace-in-col-1

expecting success of 4018.101 'hunk header: css-class-selector': 
		git diff -U1 css-class-selector >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ .RIGHT {
ok 101 - hunk header: css-class-selector

expecting success of 4018.102 'hunk header: css-colon-eol': 
		git diff -U1 css-colon-eol >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT h1 {
ok 102 - hunk header: css-colon-eol

expecting success of 4018.103 'hunk header: css-colon-selector': 
		git diff -U1 css-colon-selector >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT a:hover {
ok 103 - hunk header: css-colon-selector

expecting success of 4018.104 'hunk header: css-common': 
		git diff -U1 css-common >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ RIGHT label.control-label {
ok 104 - hunk header: css-common

expecting success of 4018.105 'hunk header: css-id-selector': 
		git diff -U1 css-id-selector >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ #RIGHT {
ok 105 - hunk header: css-id-selector

expecting success of 4018.106 'hunk header: css-long-selector-list': 
		git diff -U1 css-long-selector-list >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ div ul#RIGHT {
ok 106 - hunk header: css-long-selector-list

expecting success of 4018.107 'hunk header: css-prop-sans-indent': 
		git diff -U1 css-prop-sans-indent >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT, label.control-label {
ok 107 - hunk header: css-prop-sans-indent

expecting success of 4018.108 'hunk header: css-root-selector': 
		git diff -U1 css-root-selector >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ :RIGHT {
ok 108 - hunk header: css-root-selector

expecting success of 4018.109 'hunk header: css-short-selector-list': 
		git diff -U1 css-short-selector-list >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ label.control, div ul#RIGHT {
ok 109 - hunk header: css-short-selector-list

expecting success of 4018.110 'hunk header: css-trailing-space': 
		git diff -U1 css-trailing-space >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ RIGHT label.control-label {
ok 110 - hunk header: css-trailing-space

expecting success of 4018.111 'hunk header: custom1-pattern': 
		git diff -U1 custom1-pattern >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,3 +9,3 @@ int special, RIGHT;
ok 111 - hunk header: custom1-pattern

expecting success of 4018.112 'hunk header: custom2-match-to-end-of-line': 
		git diff -U1 custom2-match-to-end-of-line >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ RIGHT_Beer
ok 112 - hunk header: custom2-match-to-end-of-line

expecting success of 4018.113 'hunk header: custom3-alternation-in-pattern': 
		git diff -U1 custom3-alternation-in-pattern >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,3 +9,3 @@ public static void main(String RIGHT[])
ok 113 - hunk header: custom3-alternation-in-pattern

expecting success of 4018.114 'hunk header: dts-labels': 
		git diff -U1 dts-labels >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ label2: RIGHT {
ok 114 - hunk header: dts-labels

expecting success of 4018.115 'hunk header: dts-node-unitless': 
		git diff -U1 dts-node-unitless >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ RIGHT {
ok 115 - hunk header: dts-node-unitless

expecting success of 4018.116 'hunk header: dts-nodes': 
		git diff -U1 dts-nodes >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ RIGHT@deadf00,4000 {
ok 116 - hunk header: dts-nodes

expecting success of 4018.117 'hunk header: dts-nodes-boolean-prop': 
		git diff -U1 dts-nodes-boolean-prop >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ RIGHT@deadf00,4000 {
ok 117 - hunk header: dts-nodes-boolean-prop

expecting success of 4018.118 'hunk header: dts-nodes-comment1': 
		git diff -U1 dts-nodes-comment1 >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ RIGHT@deadf00,4000 /* &a comment */ {
ok 118 - hunk header: dts-nodes-comment1

expecting success of 4018.119 'hunk header: dts-nodes-comment2': 
		git diff -U1 dts-nodes-comment2 >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ RIGHT@deadf00,4000 { /* a trailing comment */
ok 119 - hunk header: dts-nodes-comment2

expecting success of 4018.120 'hunk header: dts-nodes-multiline-prop': 
		git diff -U1 dts-nodes-multiline-prop >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,3 +9,3 @@ RIGHT@deadf00,4000 {
ok 120 - hunk header: dts-nodes-multiline-prop

expecting success of 4018.121 'hunk header: dts-reference': 
		git diff -U1 dts-reference >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -7,3 +7,3 @@ &RIGHT {
ok 121 - hunk header: dts-reference

expecting success of 4018.122 'hunk header: dts-root': 
		git diff -U1 dts-root >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ / { RIGHT /* Technically just supposed to be a slash and brace */
ok 122 - hunk header: dts-root

expecting success of 4018.123 'hunk header: dts-root-comment': 
		git diff -U1 dts-root-comment >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ / { RIGHT /* Technically just supposed to be a slash and brace */
ok 123 - hunk header: dts-root-comment

expecting success of 4018.124 'hunk header: elixir-do-not-pick-end': 
		git diff -U1 elixir-do-not-pick-end >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,2 +4,2 @@ defmodule RIGHT do
ok 124 - hunk header: elixir-do-not-pick-end

expecting success of 4018.125 'hunk header: elixir-ex-unit-test': 
		git diff -U1 elixir-ex-unit-test >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ test "RIGHT" do
ok 125 - hunk header: elixir-ex-unit-test

expecting success of 4018.126 'hunk header: elixir-function': 
		git diff -U1 elixir-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ def function(RIGHT, arg) do
ok 126 - hunk header: elixir-function

expecting success of 4018.127 'hunk header: elixir-macro': 
		git diff -U1 elixir-macro >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ defmacro foo(RIGHT) do
ok 127 - hunk header: elixir-macro

expecting success of 4018.128 'hunk header: elixir-module': 
		git diff -U1 elixir-module >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ defmodule RIGHT do
ok 128 - hunk header: elixir-module

expecting success of 4018.129 'hunk header: elixir-module-func': 
		git diff -U1 elixir-module-func >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ def fun(RIGHT) do
ok 129 - hunk header: elixir-module-func

expecting success of 4018.130 'hunk header: elixir-nested-module': 
		git diff -U1 elixir-nested-module >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ defmodule MyApp.RIGHT do
ok 130 - hunk header: elixir-nested-module

expecting success of 4018.131 'hunk header: elixir-private-function': 
		git diff -U1 elixir-private-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ defp function(RIGHT, arg) do
ok 131 - hunk header: elixir-private-function

expecting success of 4018.132 'hunk header: elixir-protocol': 
		git diff -U1 elixir-protocol >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ defprotocol RIGHT do
ok 132 - hunk header: elixir-protocol

expecting success of 4018.133 'hunk header: elixir-protocol-implementation': 
		git diff -U1 elixir-protocol-implementation >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ defimpl RIGHT do
ok 133 - hunk header: elixir-protocol-implementation

expecting success of 4018.134 'hunk header: fortran-block-data': 
		git diff -U1 fortran-block-data >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,4 +2,4 @@ BLOCK DATA RIGHT
ok 134 - hunk header: fortran-block-data

expecting success of 4018.135 'hunk header: fortran-comment': 
		git diff -U1 fortran-comment >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -8,3 +8,3 @@ subroutine RIGHT
ok 135 - hunk header: fortran-comment

expecting success of 4018.136 'hunk header: fortran-comment-keyword': 
		git diff -U1 fortran-comment-keyword >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,3 +9,3 @@ subroutine RIGHT (funcA, funcB)
ok 136 - hunk header: fortran-comment-keyword

expecting success of 4018.137 'hunk header: fortran-comment-legacy': 
		git diff -U1 fortran-comment-legacy >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -8,3 +8,3 @@ subroutine RIGHT
ok 137 - hunk header: fortran-comment-legacy

expecting success of 4018.138 'hunk header: fortran-comment-legacy-star': 
		git diff -U1 fortran-comment-legacy-star >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -8,3 +8,3 @@ subroutine RIGHT
ok 138 - hunk header: fortran-comment-legacy-star

expecting success of 4018.139 'hunk header: fortran-external-function': 
		git diff -U1 fortran-external-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function RIGHT(a, b) result(c)
ok 139 - hunk header: fortran-external-function

expecting success of 4018.140 'hunk header: fortran-external-subroutine': 
		git diff -U1 fortran-external-subroutine >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ subroutine RIGHT
ok 140 - hunk header: fortran-external-subroutine

expecting success of 4018.141 'hunk header: fortran-module': 
		git diff -U1 fortran-module >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ module RIGHT
ok 141 - hunk header: fortran-module

expecting success of 4018.142 'hunk header: fortran-module-procedure': 
		git diff -U1 fortran-module-procedure >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -8,3 +8,3 @@ module RIGHT
ok 142 - hunk header: fortran-module-procedure

expecting success of 4018.143 'hunk header: fortran-program': 
		git diff -U1 fortran-program >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ program RIGHT
ok 143 - hunk header: fortran-program

expecting success of 4018.144 'hunk header: fountain-scene': 
		git diff -U1 fountain-scene >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ EXT. STREET RIGHT OUTSIDE - DAY
ok 144 - hunk header: fountain-scene

expecting success of 4018.145 'hunk header: golang-complex-function': 
		git diff -U1 golang-complex-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ func (t *Test) RIGHT(a Type) (Type, error) {
ok 145 - hunk header: golang-complex-function

expecting success of 4018.146 'hunk header: golang-func': 
		git diff -U1 golang-func >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ func RIGHT() {
ok 146 - hunk header: golang-func

expecting success of 4018.147 'hunk header: golang-interface': 
		git diff -U1 golang-interface >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ type RIGHT interface {
ok 147 - hunk header: golang-interface

expecting success of 4018.148 'hunk header: golang-long-func': 
		git diff -U1 golang-long-func >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ func RIGHT(aVeryVeryVeryLongVariableName AVeryVeryVeryLongType,
ok 148 - hunk header: golang-long-func

expecting success of 4018.149 'hunk header: golang-struct': 
		git diff -U1 golang-struct >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ type RIGHT struct {
ok 149 - hunk header: golang-struct

expecting success of 4018.150 'hunk header: java-class-member-function': 
		git diff -U1 java-class-member-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,3 +9,3 @@ public static void main(String RIGHT[])
ok 150 - hunk header: java-class-member-function

expecting success of 4018.151 'hunk header: java-enum-constant': 
		git diff -U1 java-enum-constant >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ private enum RIGHT {
ok 151 - hunk header: java-enum-constant

expecting success of 4018.152 'hunk header: java-method-return-generic-bounded': 
		git diff -U1 java-method-return-generic-bounded >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ public <T extends Bar & Foo<T>, R> Map<T, R[]> foo(String[] RIGHT) {
ok 152 - hunk header: java-method-return-generic-bounded

expecting success of 4018.153 'hunk header: java-method-return-generic-wildcard': 
		git diff -U1 java-method-return-generic-wildcard >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ public List<? extends Comparable> foo(String[] RIGHT) {
ok 153 - hunk header: java-method-return-generic-wildcard

expecting success of 4018.154 'hunk header: java-nested-field': 
		git diff -U1 java-nested-field >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ private static class RIGHT {
ok 154 - hunk header: java-nested-field

expecting success of 4018.155 'hunk header: kotlin-class': 
		git diff -U1 kotlin-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ class RIGHT {
ok 155 - hunk header: kotlin-class

expecting success of 4018.156 'hunk header: kotlin-enum-class': 
		git diff -U1 kotlin-enum-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ enum class RIGHT{
ok 156 - hunk header: kotlin-enum-class

expecting success of 4018.157 'hunk header: kotlin-fun': 
		git diff -U1 kotlin-fun >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ fun RIGHT(){
ok 157 - hunk header: kotlin-fun

expecting success of 4018.158 'hunk header: kotlin-inheritace-class': 
		git diff -U1 kotlin-inheritace-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ open class RIGHT{
ok 158 - hunk header: kotlin-inheritace-class

expecting success of 4018.159 'hunk header: kotlin-inline-class': 
		git diff -U1 kotlin-inline-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ value class RIGHT(Args){
ok 159 - hunk header: kotlin-inline-class

expecting success of 4018.160 'hunk header: kotlin-interface': 
		git diff -U1 kotlin-interface >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ interface RIGHT{
ok 160 - hunk header: kotlin-interface

expecting success of 4018.161 'hunk header: kotlin-nested-fun': 
		git diff -U1 kotlin-nested-fun >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ fun RIGHT(  a:Int){
ok 161 - hunk header: kotlin-nested-fun

expecting success of 4018.162 'hunk header: kotlin-public-class': 
		git diff -U1 kotlin-public-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ public class RIGHT{
ok 162 - hunk header: kotlin-public-class

expecting success of 4018.163 'hunk header: kotlin-sealed-class': 
		git diff -U1 kotlin-sealed-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ sealed class RIGHT {
ok 163 - hunk header: kotlin-sealed-class

expecting success of 4018.164 'hunk header: markdown-heading-indented': 
		git diff -U1 markdown-heading-indented >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,2 +5,2 @@    ### RIGHT
ok 164 - hunk header: markdown-heading-indented

expecting success of 4018.165 'hunk header: markdown-heading-non-headings': 
		git diff -U1 markdown-heading-non-headings >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -16,2 +16,2 @@ # RIGHT
ok 165 - hunk header: markdown-heading-non-headings

expecting success of 4018.166 'hunk header: matlab-class-definition': 
		git diff -U1 matlab-class-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ classdef RIGHT
ok 166 - hunk header: matlab-class-definition

expecting success of 4018.167 'hunk header: matlab-function': 
		git diff -U1 matlab-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function y = RIGHT()
ok 167 - hunk header: matlab-function

expecting success of 4018.168 'hunk header: matlab-octave-section-1': 
		git diff -U1 matlab-octave-section-1 >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,2 +2,2 @@ %%% RIGHT section
ok 168 - hunk header: matlab-octave-section-1

expecting success of 4018.169 'hunk header: matlab-octave-section-2': 
		git diff -U1 matlab-octave-section-2 >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,2 +2,2 @@ ## RIGHT section
ok 169 - hunk header: matlab-octave-section-2

expecting success of 4018.170 'hunk header: matlab-section': 
		git diff -U1 matlab-section >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,2 +2,2 @@ %% RIGHT section
ok 170 - hunk header: matlab-section

expecting success of 4018.171 'hunk header: perl-skip-end-of-heredoc': 
		git diff -U1 perl-skip-end-of-heredoc >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -6,3 +6,3 @@ sub RIGHTwithheredocument {
ok 171 - hunk header: perl-skip-end-of-heredoc

expecting success of 4018.172 'hunk header: perl-skip-forward-decl': 
		git diff -U1 perl-skip-forward-decl >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -9,2 +9,2 @@ package RIGHT;
ok 172 - hunk header: perl-skip-forward-decl

expecting success of 4018.173 'hunk header: perl-skip-sub-in-pod': 
		git diff -U1 perl-skip-sub-in-pod >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -15,3 +15,3 @@ =head1 SYNOPSIS_RIGHT
ok 173 - hunk header: perl-skip-sub-in-pod

expecting success of 4018.174 'hunk header: perl-sub-definition': 
		git diff -U1 perl-sub-definition >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ sub RIGHT {
ok 174 - hunk header: perl-sub-definition

expecting success of 4018.175 'hunk header: perl-sub-definition-kr-brace': 
		git diff -U1 perl-sub-definition-kr-brace >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ sub RIGHT
ok 175 - hunk header: perl-sub-definition-kr-brace

expecting success of 4018.176 'hunk header: php-abstract-class': 
		git diff -U1 php-abstract-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ abstract class RIGHT
ok 176 - hunk header: php-abstract-class

expecting success of 4018.177 'hunk header: php-abstract-method': 
		git diff -U1 php-abstract-method >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ abstract public function RIGHT(): ?string
ok 177 - hunk header: php-abstract-method

expecting success of 4018.178 'hunk header: php-class': 
		git diff -U1 php-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ class RIGHT
ok 178 - hunk header: php-class

expecting success of 4018.179 'hunk header: php-enum': 
		git diff -U1 php-enum >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ enum RIGHT: string
ok 179 - hunk header: php-enum

expecting success of 4018.180 'hunk header: php-final-class': 
		git diff -U1 php-final-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ final class RIGHT
ok 180 - hunk header: php-final-class

expecting success of 4018.181 'hunk header: php-final-method': 
		git diff -U1 php-final-method >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ final public function RIGHT(): string
ok 181 - hunk header: php-final-method

expecting success of 4018.182 'hunk header: php-function': 
		git diff -U1 php-function >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ function RIGHT()
ok 182 - hunk header: php-function

expecting success of 4018.183 'hunk header: php-interface': 
		git diff -U1 php-interface >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ interface RIGHT
ok 183 - hunk header: php-interface

expecting success of 4018.184 'hunk header: php-method': 
		git diff -U1 php-method >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ public static function RIGHT()
ok 184 - hunk header: php-method

expecting success of 4018.185 'hunk header: php-trait': 
		git diff -U1 php-trait >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ trait RIGHT
ok 185 - hunk header: php-trait

expecting success of 4018.186 'hunk header: python-async-def': 
		git diff -U1 python-async-def >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ async def RIGHT(pi: int = 3.14):
ok 186 - hunk header: python-async-def

expecting success of 4018.187 'hunk header: python-class': 
		git diff -U1 python-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ class RIGHT(int, str):
ok 187 - hunk header: python-class

expecting success of 4018.188 'hunk header: python-def': 
		git diff -U1 python-def >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ def RIGHT(pi: int = 3.14):
ok 188 - hunk header: python-def

expecting success of 4018.189 'hunk header: python-indented-async-def': 
		git diff -U1 python-indented-async-def >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ async def RIGHT(self, x: int):
ok 189 - hunk header: python-indented-async-def

expecting success of 4018.190 'hunk header: python-indented-class': 
		git diff -U1 python-indented-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,2 +4,2 @@ class RIGHT:
ok 190 - hunk header: python-indented-class

expecting success of 4018.191 'hunk header: python-indented-def': 
		git diff -U1 python-indented-def >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ def RIGHT(self, x: int):
ok 191 - hunk header: python-indented-def

expecting success of 4018.192 'hunk header: rust-fn': 
		git diff -U1 rust-fn >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ pub(self) fn RIGHT<T>(x: &[T]) where T: Debug {
ok 192 - hunk header: rust-fn

expecting success of 4018.193 'hunk header: rust-impl': 
		git diff -U1 rust-impl >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ impl<'a, T: AsRef<[u8]>>  std::RIGHT for Git<'a> {
ok 193 - hunk header: rust-impl

expecting success of 4018.194 'hunk header: rust-macro-rules': 
		git diff -U1 rust-macro-rules >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ macro_rules! RIGHT {
ok 194 - hunk header: rust-macro-rules

expecting success of 4018.195 'hunk header: rust-struct': 
		git diff -U1 rust-struct >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ pub(super) struct RIGHT<'a> {
ok 195 - hunk header: rust-struct

expecting success of 4018.196 'hunk header: rust-trait': 
		git diff -U1 rust-trait >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ unsafe trait RIGHT<T> {
ok 196 - hunk header: rust-trait

expecting success of 4018.197 'hunk header: scheme-class': 
		git diff -U1 scheme-class >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,3 +3,3 @@ (class* () object% RIGHT
ok 197 - hunk header: scheme-class

expecting success of 4018.198 'hunk header: scheme-def': 
		git diff -U1 scheme-def >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ (def (some-func x y z) RIGHT
ok 198 - hunk header: scheme-def

expecting success of 4018.199 'hunk header: scheme-def-variant': 
		git diff -U1 scheme-def-variant >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ (defmethod {print point} RIGHT
ok 199 - hunk header: scheme-def-variant

expecting success of 4018.200 'hunk header: scheme-define-slash-public': 
		git diff -U1 scheme-define-slash-public >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -5,3 +5,3 @@ (define/public (foo) RIGHT
ok 200 - hunk header: scheme-define-slash-public

expecting success of 4018.201 'hunk header: scheme-define-syntax': 
		git diff -U1 scheme-define-syntax >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ (define-syntax define-test-suite RIGHT
ok 201 - hunk header: scheme-define-syntax

expecting success of 4018.202 'hunk header: scheme-define-variant': 
		git diff -U1 scheme-define-variant >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ (define* (some-func x y z) RIGHT
ok 202 - hunk header: scheme-define-variant

expecting success of 4018.203 'hunk header: scheme-library': 
		git diff -U1 scheme-library >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ (library (my-helpers id-stuff) RIGHT
ok 203 - hunk header: scheme-library

expecting success of 4018.204 'hunk header: scheme-local-define': 
		git diff -U1 scheme-local-define >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ (define local-function RIGHT
ok 204 - hunk header: scheme-local-define

expecting success of 4018.205 'hunk header: scheme-module': 
		git diff -U1 scheme-module >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -2,3 +2,3 @@ (module A RIGHT
ok 205 - hunk header: scheme-module

expecting success of 4018.206 'hunk header: scheme-top-level-define': 
		git diff -U1 scheme-top-level-define >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -3,2 +3,2 @@ (define (some-func x y z) RIGHT
ok 206 - hunk header: scheme-top-level-define

expecting success of 4018.207 'hunk header: scheme-user-defined-define': 
		git diff -U1 scheme-user-defined-define >actual &&
		grep '@@ .* @@.*RIGHT' actual
	
@@ -4,3 +4,3 @@ (define-test-suite record\ case-tests RIGHT
ok 207 - hunk header: scheme-user-defined-define

# passed all 207 test(s)
1..207
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4019-diff-wserror.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4019-diff-wserror/.git/
expecting success of 4019.1 'setup': 

	git config diff.color.whitespace "blue reverse" &&
	>F &&
	git add F &&
	echo "         Eight SP indent" >>F &&
	echo " 	HT and SP indent" >>F &&
	echo "With trailing SP " >>F &&
	echo "Carriage ReturnQ" | tr Q "\015" >>F &&
	echo "No problem" >>F &&
	echo >>F


ok 1 - setup

expecting success of 4019.2 'default': 

	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With error >/dev/null &&
	grep Return error >/dev/null &&
	grep No normal >/dev/null


ok 2 - default

expecting success of 4019.3 'default (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace" >.gitattributes &&
	prepare_output &&

	grep Eight error >/dev/null &&
	grep HT error >/dev/null &&
	grep With error >/dev/null &&
	grep Return error >/dev/null &&
	grep No normal >/dev/null


ok 3 - default (attribute)

expecting success of 4019.4 'default, tabwidth=10 (attribute)': 

	git config core.whitespace "tabwidth=10" &&
	echo "F whitespace" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With error >/dev/null &&
	grep Return error >/dev/null &&
	grep No normal >/dev/null


ok 4 - default, tabwidth=10 (attribute)

expecting success of 4019.5 'no check (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F -whitespace" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 5 - no check (attribute)

expecting success of 4019.6 'no check, tabwidth=10 (attribute), must be irrelevant': 

	git config core.whitespace "tabwidth=10" &&
	echo "F -whitespace" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 6 - no check, tabwidth=10 (attribute), must be irrelevant

expecting success of 4019.7 'without -trail': 

	rm -f .gitattributes &&
	git config core.whitespace -trail &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 7 - without -trail

expecting success of 4019.8 'without -trail (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace=-trail" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 8 - without -trail (attribute)

expecting success of 4019.9 'without -space': 

	rm -f .gitattributes &&
	git config core.whitespace -space &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With error >/dev/null &&
	grep Return error >/dev/null &&
	grep No normal >/dev/null


ok 9 - without -space

expecting success of 4019.10 'without -space (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace=-space" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With error >/dev/null &&
	grep Return error >/dev/null &&
	grep No normal >/dev/null


ok 10 - without -space (attribute)

expecting success of 4019.11 'with indent-non-tab only': 

	rm -f .gitattributes &&
	git config core.whitespace indent,-trailing,-space &&
	prepare_output &&

	grep Eight error >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 11 - with indent-non-tab only

expecting success of 4019.12 'with indent-non-tab only (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace=indent,-trailing,-space" >.gitattributes &&
	prepare_output &&

	grep Eight error >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 12 - with indent-non-tab only (attribute)

expecting success of 4019.13 'with indent-non-tab only, tabwidth=10': 

	rm -f .gitattributes &&
	git config core.whitespace indent,tabwidth=10,-trailing,-space &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 13 - with indent-non-tab only, tabwidth=10

expecting success of 4019.14 'with indent-non-tab only, tabwidth=10 (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT normal >/dev/null &&
	grep With normal >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 14 - with indent-non-tab only, tabwidth=10 (attribute)

expecting success of 4019.15 'with cr-at-eol': 

	rm -f .gitattributes &&
	git config core.whitespace cr-at-eol &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With error >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 15 - with cr-at-eol

expecting success of 4019.16 'with cr-at-eol (attribute)': 

	test_might_fail git config --unset core.whitespace &&
	echo "F whitespace=trailing,cr-at-eol" >.gitattributes &&
	prepare_output &&

	grep Eight normal >/dev/null &&
	grep HT error >/dev/null &&
	grep With error >/dev/null &&
	grep Return normal >/dev/null &&
	grep No normal >/dev/null


ok 16 - with cr-at-eol (attribute)

expecting success of 4019.17 'trailing empty lines (1)': 

	rm -f .gitattributes &&
	test_must_fail git diff --check >output &&
	grep "new blank line at" output &&
	grep "trailing whitespace" output


F:6: new blank line at EOF.
F:3: trailing whitespace.
F:4: trailing whitespace.
ok 17 - trailing empty lines (1)

expecting success of 4019.18 'trailing empty lines (2)': 

	echo "F -whitespace" >.gitattributes &&
	git diff --check >output &&
	test_must_be_empty output


ok 18 - trailing empty lines (2)

expecting success of 4019.19 'checkdiff shows correct line number for trailing blank lines': 

	printf "a\nb\n" > G &&
	git add G &&
	printf "x\nx\nx\na\nb\nc\n\n" > G &&
	[ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]


ok 19 - checkdiff shows correct line number for trailing blank lines

expecting success of 4019.20 'do not color trailing cr in context': 
	test_might_fail git config --unset core.whitespace &&
	rm -f .gitattributes &&
	echo AAAQ | tr Q "\015" >G &&
	git add G &&
	echo BBBQ | tr Q "\015" >>G &&
	git diff --color G | tr "\015" Q >output &&
	grep "BBB.*${blue_grep}Q" output &&
	grep "AAA.*\[mQ" output


+BBBQ
 AAAQ
ok 20 - do not color trailing cr in context

expecting success of 4019.21 'color new trailing blank lines': 
	test_write_lines a b "" "" >x &&
	git add x &&
	test_write_lines a "" "" "" c "" "" "" "" >x &&
	git diff --color x >output &&
	cnt=$($grep_a "${blue_grep}" output | wc -l) &&
	test $cnt = 2

ok 21 - color new trailing blank lines

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4021-format-patch-numbered.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4021-format-patch-numbered/.git/
expecting success of 4021.1 'setup': 

	echo A > file &&
	git add file &&
	git commit -m First &&

	echo B >> file &&
	git commit -a -m Second &&

	echo C >> file &&
	git commit -a -m Third


[master (root-commit) c3fa1f8] First
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master e967d08] Second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 20641e9] Third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 4021.2 'single patch defaults to no numbers': 
	git format-patch --stdout HEAD~1 >patch0.single &&
	test_single_no_numbered patch0.single

ok 2 - single patch defaults to no numbers

expecting success of 4021.3 'multiple patch defaults to numbered': 

	git format-patch --stdout HEAD~2 >patch0.multiple &&
	test_numbered patch0.multiple


Subject: [PATCH 1/2] Second
Subject: [PATCH 2/2] Third
ok 3 - multiple patch defaults to numbered

expecting success of 4021.4 'Use --numbered': 

	git format-patch --numbered --stdout HEAD~1 >patch1 &&
	test_single_numbered patch1


Subject: [PATCH 1/1] Third
ok 4 - Use --numbered

expecting success of 4021.5 'format.numbered = true': 

	git config format.numbered true &&
	git format-patch --stdout HEAD~2 >patch2 &&
	test_numbered patch2


Subject: [PATCH 1/2] Second
Subject: [PATCH 2/2] Third
ok 5 - format.numbered = true

expecting success of 4021.6 'format.numbered && single patch': 

	git format-patch --stdout HEAD^ > patch3 &&
	test_single_numbered patch3


Subject: [PATCH 1/1] Third
ok 6 - format.numbered && single patch

expecting success of 4021.7 'format.numbered && --no-numbered': 

	git format-patch --no-numbered --stdout HEAD~2 >patch4 &&
	test_no_numbered patch4


ok 7 - format.numbered && --no-numbered

expecting success of 4021.8 'format.numbered && --keep-subject': 

	git format-patch --keep-subject --stdout HEAD^ >patch4a &&
	grep "^Subject: Third" patch4a


Subject: Third
ok 8 - format.numbered && --keep-subject

expecting success of 4021.9 'format.numbered = auto': 

	git config format.numbered auto &&
	git format-patch --stdout HEAD~2 > patch5 &&
	test_numbered patch5


Subject: [PATCH 1/2] Second
Subject: [PATCH 2/2] Third
ok 9 - format.numbered = auto

expecting success of 4021.10 'format.numbered = auto && single patch': 

	git format-patch --stdout HEAD^ > patch6 &&
	test_single_no_numbered patch6


ok 10 - format.numbered = auto && single patch

expecting success of 4021.11 'format.numbered = auto && --no-numbered': 

	git format-patch --no-numbered --stdout HEAD~2 > patch7 &&
	test_no_numbered patch7


ok 11 - format.numbered = auto && --no-numbered

expecting success of 4021.12 '--start-number && --numbered': 

	git format-patch --start-number 3 --numbered --stdout HEAD~1 > patch8 &&
	grep "^Subject: \[PATCH 3/3\]" patch8

Subject: [PATCH 3/3] Third
ok 12 - --start-number && --numbered

expecting success of 4021.13 'single patch with cover-letter defaults to numbers': 
	git format-patch --cover-letter --stdout HEAD~1 >patch9.single &&
	test_single_cover_letter_numbered patch9.single

Subject: [PATCH 0/1] *** SUBJECT HERE ***
Subject: [PATCH 1/1] Third
ok 13 - single patch with cover-letter defaults to numbers

expecting success of 4021.14 'Use --no-numbered and --cover-letter single patch': 
	git format-patch --no-numbered --stdout --cover-letter HEAD~1 >patch10 &&
	test_no_numbered patch10

ok 14 - Use --no-numbered and --cover-letter single patch

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4020-diff-external.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4020-diff-external/.git/
expecting success of 4020.1 'setup': 

	test_tick &&
	echo initial >file &&
	git add file &&
	git commit -m initial &&

	test_tick &&
	echo second >file &&
	before=$(git hash-object file) &&
	before=$(git rev-parse --short $before) &&
	git add file &&
	git commit -m second &&

	test_tick &&
	echo third >file

[master (root-commit) b6d2089] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master f3562cd] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4020.2 'GIT_EXTERNAL_DIFF environment': 
	cat >expect <<-EOF &&
	file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
	EOF
	GIT_EXTERNAL_DIFF=echo git diff >out &&
	cut -d" " -f1,3- <out >actual &&
	test_cmp expect actual


ok 2 - GIT_EXTERNAL_DIFF environment

expecting success of 4020.3 'GIT_EXTERNAL_DIFF environment should apply only to diff': 
	GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 3 - GIT_EXTERNAL_DIFF environment should apply only to diff

expecting success of 4020.4 'GIT_EXTERNAL_DIFF environment and --no-ext-diff': 
	GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 4 - GIT_EXTERNAL_DIFF environment and --no-ext-diff

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4020.5 'typechange diff': 
	rm -f file &&
	ln -s elif file &&

	cat >expect <<-EOF &&
	file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 120000
	EOF
	GIT_EXTERNAL_DIFF=echo git diff >out &&
	cut -d" " -f1,3-4,6- <out >actual &&
	test_cmp expect actual &&

	GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >actual &&
	git diff >expect &&
	test_cmp expect actual

ok 5 - typechange diff

expecting success of 4020.6 'diff.external': 
	git reset --hard &&
	echo third >file &&
	test_config diff.external echo &&

	cat >expect <<-EOF &&
	file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
	EOF
	git diff >out &&
	cut -d" " -f1,3-4,6- <out >actual &&
	test_cmp expect actual

HEAD is now at f3562cd second
ok 6 - diff.external

expecting success of 4020.7 'diff.external should apply only to diff': 
	test_config diff.external echo &&
	git log -p -1 HEAD >out &&
	grep "^diff --git a/file b/file" out

diff --git a/file b/file
ok 7 - diff.external should apply only to diff

expecting success of 4020.8 'diff.external and --no-ext-diff': 
	test_config diff.external echo &&
	git diff --no-ext-diff >out &&
	grep "^diff --git a/file b/file" out

diff --git a/file b/file
ok 8 - diff.external and --no-ext-diff

expecting success of 4020.9 'diff attribute': 
	git reset --hard &&
	echo third >file &&

	git config diff.parrot.command echo &&

	echo >.gitattributes "file diff=parrot" &&

	cat >expect <<-EOF &&
	file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
	EOF
	git diff >out &&
	cut -d" " -f1,3-4,6- <out >actual &&
	test_cmp expect actual

HEAD is now at f3562cd second
ok 9 - diff attribute

expecting success of 4020.10 'diff attribute should apply only to diff': 
	git log -p -1 HEAD >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 10 - diff attribute should apply only to diff

expecting success of 4020.11 'diff attribute and --no-ext-diff': 
	git diff --no-ext-diff >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 11 - diff attribute and --no-ext-diff

expecting success of 4020.12 'diff attribute': 

	git config --unset diff.parrot.command &&
	git config diff.color.command echo &&

	echo >.gitattributes "file diff=color" &&

	cat >expect <<-EOF &&
	file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
	EOF
	git diff >out &&
	cut -d" " -f1,3-4,6- <out >actual &&
	test_cmp expect actual

ok 12 - diff attribute

expecting success of 4020.13 'diff attribute should apply only to diff': 
	git log -p -1 HEAD >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 13 - diff attribute should apply only to diff

expecting success of 4020.14 'diff attribute and --no-ext-diff': 
	git diff --no-ext-diff >out &&
	grep "^diff --git a/file b/file" out


diff --git a/file b/file
ok 14 - diff attribute and --no-ext-diff

expecting success of 4020.15 'GIT_EXTERNAL_DIFF trumps diff.external': 
	>.gitattributes &&
	test_config diff.external "echo ext-global" &&

	cat >expect <<-EOF &&
	ext-env file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
	EOF
	GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
	cut -d" " -f1-2,4- <out >actual &&
	test_cmp expect actual

ok 15 - GIT_EXTERNAL_DIFF trumps diff.external

expecting success of 4020.16 'attributes trump GIT_EXTERNAL_DIFF and diff.external': 
	test_config diff.foo.command "echo ext-attribute" &&
	test_config diff.external "echo ext-global" &&
	echo "file diff=foo" >.gitattributes &&

	cat >expect <<-EOF &&
	ext-attribute file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
	EOF
	GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
	cut -d" " -f1-2,4- <out >actual &&
	test_cmp expect actual

ok 16 - attributes trump GIT_EXTERNAL_DIFF and diff.external

expecting success of 4020.17 'no diff with -diff': 
	echo >.gitattributes "file -diff" &&
	git diff >out &&
	grep Binary out

Binary files a/file and b/file differ
ok 17 - no diff with -diff

expecting success of 4020.18 'force diff with "diff"': 
	after=$(git hash-object file) &&
	after=$(git rev-parse --short $after) &&
	echo >.gitattributes "file diff" &&
	git diff >actual &&
	sed -e "s/^index .*/index $before..$after 100644/" \
		"$TEST_DIRECTORY"/t4020/diff.NUL >expected-diff &&
	test_cmp expected-diff actual

ok 18 - force diff with "diff"

expecting success of 4020.19 'GIT_EXTERNAL_DIFF with more than one changed files': 
	echo anotherfile > file2 &&
	git add file2 &&
	git commit -m "added 2nd file" &&
	echo modified >file2 &&
	GIT_EXTERNAL_DIFF=echo git diff

[master 314ec38] added 2nd file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
file /tmp/git-blob-syaf0K/file e019be006cf33489e2d0177a3837a2384eddebc5 100644 file 0000000000000000000000000000000000000000 100644
file2 /tmp/git-blob-HoZsbf/file2 abc9fa522731419e7eaa3d472e3cb3d99e475c49 100644 file2 0000000000000000000000000000000000000000 100644
ok 19 - GIT_EXTERNAL_DIFF with more than one changed files

expecting success of 4020.20 'GIT_EXTERNAL_DIFF path counter/total': 
	write_script external-diff.sh <<-\EOF &&
	echo $GIT_DIFF_PATH_COUNTER of $GIT_DIFF_PATH_TOTAL >>counter.txt
	EOF
	>counter.txt &&
	cat >expect <<-\EOF &&
	1 of 2
	2 of 2
	EOF
	GIT_EXTERNAL_DIFF=./external-diff.sh git diff &&
	test_cmp expect counter.txt

ok 20 - GIT_EXTERNAL_DIFF path counter/total

expecting success of 4020.21 'GIT_EXTERNAL_DIFF generates pretty paths': 
	test_when_finished "git rm -f file.ext" &&
	touch file.ext &&
	git add file.ext &&
	echo with extension > file.ext &&

	cat >expect <<-EOF &&
	file.ext
	EOF
	GIT_EXTERNAL_DIFF=echo git diff file.ext >out &&
	basename $(cut -d" " -f2 <out) >actual &&
	test_cmp expect actual

rm 'file.ext'
ok 21 - GIT_EXTERNAL_DIFF generates pretty paths

expecting success of 4020.22 'external diff with autocrlf = true': 
	test_config core.autocrlf true &&
	GIT_EXTERNAL_DIFF=./fake-diff.sh git diff &&
	test $(wc -l < crlfed.txt) = $(cat crlfed.txt | keep_only_cr | wc -c)

warning: in the working copy of 'file2', LF will be replaced by CRLF the next time Git touches it
ok 22 - external diff with autocrlf = true

expecting success of 4020.23 'diff --cached': 
	test_config core.autocrlf true &&
	git add file &&
	git update-index --assume-unchanged file &&
	echo second >file &&
	git diff --cached >actual &&
	test_cmp expected-diff actual

ok 23 - diff --cached

expecting success of 4020.24 'clean up crlf leftovers': 
	git update-index --no-assume-unchanged file &&
	rm -f file* &&
	git reset --hard

HEAD is now at 314ec38 added 2nd file
ok 24 - clean up crlf leftovers

expecting success of 4020.25 'submodule diff': 
	git init sub &&
	( cd sub && test_commit sub1 ) &&
	git add sub &&
	test_tick &&
	git commit -m "add submodule" &&
	( cd sub && test_commit sub2 ) &&
	write_script gather_pre_post.sh <<-\EOF &&
	echo "$1 $4" # path, mode
	cat "$2" # old file
	cat "$5" # new file
	EOF
	GIT_EXTERNAL_DIFF=./gather_pre_post.sh git diff >actual &&
	cat >expected <<-EOF &&
	sub 160000
	Subproject commit $(git rev-parse HEAD:sub)
	Subproject commit $(cd sub && git rev-parse HEAD)
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4020-diff-external/sub/.git/
[master (root-commit) e2fb92c] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1.t
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[master bcd8781] add submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
[master 6a9164c] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2.t
ok 25 - submodule diff

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4022-diff-rewrite.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4022-diff-rewrite/.git/
expecting success of 4022.1 'setup': 

	COPYING_test_data >test.data &&
	cp test.data test &&
	git add test &&
	tr \
	  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
	  "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" \
	  <test.data >test &&
	echo "to be deleted" >test2 &&
	blob=$(git hash-object test2) &&
	blob=$(git rev-parse --short $blob) &&
	git add test2


ok 1 - setup

expecting success of 4022.2 'detect rewrite': 

	actual=$(git diff-files -B --summary test) &&
	verbose expr "$actual" : " rewrite test ([0-9]*%)$"


19
ok 2 - detect rewrite

expecting success of 4022.3 'show deletion diff without -D': 

	rm test2 &&
	git diff -- test2 >actual &&
	test_cmp expect actual

ok 3 - show deletion diff without -D

expecting success of 4022.4 'suppress deletion diff with -D': 

	git diff -D -- test2 >actual &&
	test_cmp expect actual

ok 4 - suppress deletion diff with -D

expecting success of 4022.5 'show deletion diff with -B': 

	git diff -B -- test >actual &&
	grep "Linus Torvalds" actual

-			Linus Torvalds
ok 5 - show deletion diff with -B

expecting success of 4022.6 'suppress deletion diff with -B -D': 

	git diff -B -D -- test >actual &&
	grep -v "Linus Torvalds" actual

diff --git a/test b/test
dissimilarity index 99%
index 27063eb..f1f2e4d 100644
--- a/test
+++ b/test
@@ -?,? +1,18 @@
+
+ Abgr gung gur bayl inyvq irefvba bs gur TCY nf sne nf guvf cebwrpg
+ vf pbaprearq vf _guvf_ cnegvphyne irefvba bs gur yvprafr (vr i2, abg
+ i2.2 be i3.k be jungrire), hayrff rkcyvpvgyl bgurejvfr fgngrq.
+
+ UBJRIRE, va beqre gb nyybj n zvtengvba gb TCYi3 vs gung frrzf yvxr
+ n tbbq vqrn, V nyfb nfx gung crbcyr vaibyirq jvgu gur cebwrpg znxr
+ gurve cersreraprf xabja. Va cnegvphyne, vs lbh gehfg zr gb znxr gung
+ qrpvfvba, lbh zvtug abgr fb va lbhe pbclevtug zrffntr, vr fbzrguvat
+ yvxr
+
+	Guvf svyr vf yvprafrq haqre gur TCY i2, be n yngre irefvba
+	ng gur qvfpergvba bs Yvahf.
+
+  zvtug nibvq vffhrf. Ohg jr pna nyfb whfg qrpvqr gb flapuebavmr naq
+  pbagnpg nyy pbclevtug ubyqref ba erpbeq vs/jura gur bppnfvba nevfrf.
+
+			Yvahf Gbeinyqf
ok 6 - suppress deletion diff with -B -D

expecting success of 4022.7 'prepare a file that ends with an incomplete line': 
	test_seq 1 99 >seq &&
	printf 100 >>seq &&
	git add seq &&
	git commit seq -m seq

[master (root-commit) 2d6607f] seq
 Author: A U Thor <author@example.com>
 1 file changed, 100 insertions(+)
 create mode 100644 seq
ok 7 - prepare a file that ends with an incomplete line

expecting success of 4022.8 'rewrite the middle 90% of sequence file and terminate with newline': 
	test_seq 1 5 >seq &&
	test_seq 9331 9420 >>seq &&
	test_seq 96 100 >>seq

ok 8 - rewrite the middle 90% of sequence file and terminate with newline

expecting success of 4022.9 'confirm that sequence file is considered a rewrite': 
	git diff -B seq >res &&
	grep "dissimilarity index" res

dissimilarity index 92%
ok 9 - confirm that sequence file is considered a rewrite

expecting success of 4022.10 'no newline at eof is on its own line without -B': 
	git diff seq >res &&
	grep "^\\\\ " res &&
	! grep "^..*\\\\ " res

\ No newline at end of file
ok 10 - no newline at eof is on its own line without -B

expecting success of 4022.11 'no newline at eof is on its own line with -B': 
	git diff -B seq >res &&
	grep "^\\\\ " res &&
	! grep "^..*\\\\ " res

\ No newline at end of file
ok 11 - no newline at eof is on its own line with -B

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4024-diff-optimize-common.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4024-diff-optimize-common/.git/
expecting success of 4024.1 'setup': 

	for n in $sample
	do
		( zs $n && echo a ) >file-a$n &&
		( echo b && zs $n && echo ) >file-b$n &&
		( printf c && zs $n ) >file-c$n &&
		( echo d && zs $n ) >file-d$n &&

		git add file-a$n file-b$n file-c$n file-d$n &&

		( zs $n && echo A ) >file-a$n &&
		( echo B && zs $n && echo ) >file-b$n &&
		( printf C && zs $n ) >file-c$n &&
		( echo D && zs $n ) >file-d$n &&

		expect_pattern $n || return 1

	done >expect

ok 1 - setup

expecting success of 4024.2 'diff -U0': 

	for n in $sample
	do
		git diff -U0 file-?$n || return 1
	done | zc >actual &&
	test_cmp expect actual


ok 2 - diff -U0

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4023-diff-rename-typechange.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4023-diff-rename-typechange/.git/
expecting success of 4023.1 'setup': 

	rm -f foo bar &&
	COPYING_test_data >foo &&
	test_ln_s_add linklink bar &&
	git add foo &&
	git commit -a -m Initial &&
	git tag one &&

	git rm -f foo bar &&
	COPYING_test_data >bar &&
	test_ln_s_add linklink foo &&
	git add bar &&
	git commit -a -m Second &&
	git tag two &&

	git rm -f foo bar &&
	COPYING_test_data >foo &&
	git add foo &&
	git commit -a -m Third &&
	git tag three &&

	mv foo bar &&
	test_ln_s_add linklink foo &&
	git add bar &&
	git commit -a -m Fourth &&
	git tag four &&

	# This is purely for sanity check

	git rm -f foo bar &&
	COPYING_test_data >foo &&
	cat "$TEST_DIRECTORY"/../Makefile >bar &&
	git add foo bar &&
	git commit -a -m Fifth &&
	git tag five &&

	git rm -f foo bar &&
	cat "$TEST_DIRECTORY"/../Makefile >foo &&
	COPYING_test_data >bar &&
	git add foo bar &&
	git commit -a -m Sixth &&
	git tag six


checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master (root-commit) beceffd] Initial
 Author: A U Thor <author@example.com>
 2 files changed, 19 insertions(+)
 create mode 120000 bar
 create mode 100644 foo
rm 'bar'
rm 'foo'
[master b5f6de4] Second
 Author: A U Thor <author@example.com>
 2 files changed, 19 insertions(+), 19 deletions(-)
 mode change 120000 => 100644 bar
 mode change 100644 => 120000 foo
rm 'bar'
rm 'foo'
[master 0e10201] Third
 Author: A U Thor <author@example.com>
 2 files changed, 18 insertions(+), 19 deletions(-)
 delete mode 100644 bar
 mode change 120000 => 100644 foo
[master b788843] Fourth
 Author: A U Thor <author@example.com>
 2 files changed, 19 insertions(+), 18 deletions(-)
 create mode 100644 bar
 mode change 100644 => 120000 foo
rm 'bar'
rm 'foo'
[master ad1ad4a] Fifth
 Author: A U Thor <author@example.com>
 2 files changed, 3845 insertions(+), 14 deletions(-)
 mode change 120000 => 100644 foo
rm 'bar'
rm 'foo'
[master e79fb9f] Sixth
 Author: A U Thor <author@example.com>
 2 files changed, 3840 insertions(+), 3840 deletions(-)
ok 1 - setup

expecting success of 4023.2 'cross renames to be detected for regular files': 

	git diff-tree five six -r --name-status -B -M | sort >actual &&
	{
		echo "R100	foo	bar" &&
		echo "R100	bar	foo"
	} | sort >expect &&
	test_cmp expect actual


ok 2 - cross renames to be detected for regular files

expecting success of 4023.3 'cross renames to be detected for typechange': 

	git diff-tree one two -r --name-status -B -M | sort >actual &&
	{
		echo "R100	foo	bar" &&
		echo "R100	bar	foo"
	} | sort >expect &&
	test_cmp expect actual


ok 3 - cross renames to be detected for typechange

expecting success of 4023.4 'moves and renames': 

	git diff-tree three four -r --name-status -B -M | sort >actual &&
	{
		# see -B -M (#6) in t4008
		echo "C100	foo	bar" &&
		echo "T100	foo"
	} | sort >expect &&
	test_cmp expect actual


ok 4 - moves and renames

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4025-hunk-header.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4025-hunk-header/.git/
expecting success of 4025.1 'setup': 

	(
		echo "A $NS" &&
		printf "  %s\n" B C D E F G H I J K &&
		echo "L  $NS" &&
		printf "  %s\n" M N O P Q R S T U V
	) >file &&
	git add file &&

	sed -e "/^  [EP]/s/$/ modified/" <file >file+ &&
	mv file+ file


ok 1 - setup

expecting success of 4025.2 'hunk header truncation with an overly long line': 

	git diff | sed -n -e "s/^.*@@//p" >actual &&
	(
		echo " A $N$N$N$N$N$N$N$N$N2" &&
		echo " L  $N$N$N$N$N$N$N$N$N1"
	) >expected &&
	test_cmp expected actual


ok 2 - hunk header truncation with an overly long line

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4026-color.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4026-color/.git/
expecting success of 4026.1 'reset': 
	color "reset" "[m"

ok 1 - reset

expecting success of 4026.2 'empty color is empty': 
	color "" ""

ok 2 - empty color is empty

expecting success of 4026.3 'attribute before color name': 
	color "bold red" "[1;31m"

ok 3 - attribute before color name

expecting success of 4026.4 'aixterm bright fg color': 
	color "brightred" "[91m"

ok 4 - aixterm bright fg color

expecting success of 4026.5 'aixterm bright bg color': 
	color "green brightblue" "[32;104m"

ok 5 - aixterm bright bg color

expecting success of 4026.6 'color name before attribute': 
	color "red bold" "[1;31m"

ok 6 - color name before attribute

expecting success of 4026.7 'attr fg bg': 
	color "ul blue red" "[4;34;41m"

ok 7 - attr fg bg

expecting success of 4026.8 'fg attr bg': 
	color "blue ul red" "[4;34;41m"

ok 8 - fg attr bg

expecting success of 4026.9 'fg bg attr': 
	color "blue red ul" "[4;34;41m"

ok 9 - fg bg attr

expecting success of 4026.10 'fg bg attr...': 
	color "blue bold dim ul blink reverse" "[1;2;4;5;7;34m"

ok 10 - fg bg attr...

expecting success of 4026.11 'reset fg bg attr...': 
	color "reset blue bold dim ul blink reverse" "[;1;2;4;5;7;34m"

ok 11 - reset fg bg attr...

expecting success of 4026.12 'attr negation': 
	color "nobold nodim noul noblink noreverse" "[22;24;25;27m"

ok 12 - attr negation

expecting success of 4026.13 '"no-" variant of negation': 
	color "no-bold no-blink" "[22;25m"

ok 13 - "no-" variant of negation

expecting success of 4026.14 'long color specification': 
	color "254 255 bold dim ul blink reverse" "[1;2;4;5;7;38;5;254;48;5;255m"

ok 14 - long color specification

expecting success of 4026.15 'absurdly long color specification': 
	color \
	  "#ffffff #ffffff bold nobold dim nodim italic noitalic
	   ul noul blink noblink reverse noreverse strike nostrike" \
	  "[1;2;3;4;5;7;9;22;23;24;25;27;29;38;2;255;255;255;48;2;255;255;255m"

ok 15 - absurdly long color specification

expecting success of 4026.16 '0-7 are aliases for basic ANSI color names': 
	color "0 7" "[30;47m"

ok 16 - 0-7 are aliases for basic ANSI color names

expecting success of 4026.17 '8-15 are aliases for aixterm color names': 
	color "12 13" "[94;105m"

ok 17 - 8-15 are aliases for aixterm color names

expecting success of 4026.18 '256 colors': 
	color "254 bold 255" "[1;38;5;254;48;5;255m"

ok 18 - 256 colors

expecting success of 4026.19 '24-bit colors': 
	color "#ff00ff black" "[38;2;255;0;255;40m"

ok 19 - 24-bit colors

expecting success of 4026.20 '"default" foreground': 
	color "default" "[39m"

ok 20 - "default" foreground

expecting success of 4026.21 '"normal default" to clear background': 
	color "normal default" "[49m"

ok 21 - "normal default" to clear background

expecting success of 4026.22 '"default" can be combined with attributes': 
	color "default default no-reverse bold" "[1;27;39;49m"

ok 22 - "default" can be combined with attributes

expecting success of 4026.23 '"normal" yields no color at all"': 
	color "normal black" "[40m"

ok 23 - "normal" yields no color at all"

expecting success of 4026.24 '-1 is a synonym for "normal"': 
	color "-1 black" "[40m"

ok 24 - -1 is a synonym for "normal"

expecting success of 4026.25 'color too small': 
	invalid_color "-2"

error: invalid color value: -2
fatal: unable to parse default color value
ok 25 - color too small

expecting success of 4026.26 'color too big': 
	invalid_color "256"

error: invalid color value: 256
fatal: unable to parse default color value
ok 26 - color too big

expecting success of 4026.27 'extra character after color number': 
	invalid_color "3X"

error: invalid color value: 3X
fatal: unable to parse default color value
ok 27 - extra character after color number

expecting success of 4026.28 'extra character after color name': 
	invalid_color "redX"

error: invalid color value: redX
fatal: unable to parse default color value
ok 28 - extra character after color name

expecting success of 4026.29 'extra character after attribute': 
	invalid_color "dimX"

error: invalid color value: dimX
fatal: unable to parse default color value
ok 29 - extra character after attribute

expecting success of 4026.30 'unknown color slots are ignored (diff)': 
	git config color.diff.nosuchslotwilleverbedefined white &&
	git diff --color

ok 30 - unknown color slots are ignored (diff)

expecting success of 4026.31 'unknown color slots are ignored (branch)': 
	git config color.branch.nosuchslotwilleverbedefined white &&
	git branch -a

ok 31 - unknown color slots are ignored (branch)

expecting success of 4026.32 'unknown color slots are ignored (status)': 
	git config color.status.nosuchslotwilleverbedefined white &&
	{ git status; ret=$?; } &&
	case $ret in 0|1) : ok ;; *) false ;; esac

On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
ok 32 - unknown color slots are ignored (status)

# passed all 32 test(s)
1..32
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4028-format-patch-mime-headers.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4028-format-patch-mime-headers/.git/
expecting success of 4028.1 'create commit with utf-8 body': 
	echo content >file &&
	git add file &&
	git commit -m one &&
	echo more >>file &&
	git commit -a -m "two

	utf-8 body: ñ"

[master (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 219a3c6] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - create commit with utf-8 body

expecting success of 4028.2 'patch has mime headers': 
	rm -f 0001-two.patch &&
	git format-patch HEAD^ &&
	grep -i "content-type: text/plain; charset=utf-8" 0001-two.patch

0001-two.patch
Content-Type: text/plain; charset=UTF-8
ok 2 - patch has mime headers

expecting success of 4028.3 'patch has mime and extra headers': 
	rm -f 0001-two.patch &&
	git config format.headers "x-foo: bar" &&
	git format-patch HEAD^ &&
	grep -i "x-foo: bar" 0001-two.patch &&
	grep -i "content-type: text/plain; charset=utf-8" 0001-two.patch

0001-two.patch
x-foo: bar
Content-Type: text/plain; charset=UTF-8
ok 3 - patch has mime and extra headers

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4029-diff-trailing-space.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4029-diff-trailing-space/.git/
expecting success of 4029.1 'diff honors config option, diff.suppressBlankEmpty': 
	printf "\nx\n" > f &&
	before=$(git hash-object f) &&
	before=$(git rev-parse --short $before) &&
	git add f &&
	git commit -q -m. f &&
	printf "\ny\n" > f &&
	after=$(git hash-object f) &&
	after=$(git rev-parse --short $after) &&
	sed -e "s/^index .*/index $before..$after 100644/" expected >exp &&
	git config --bool diff.suppressBlankEmpty true &&
	git diff f > actual &&
	test_cmp exp actual &&
	perl -i.bak -p -e "s/^\$/ /" exp &&
	git config --bool diff.suppressBlankEmpty false &&
	git diff f > actual &&
	test_cmp exp actual &&
	git config --bool --unset diff.suppressBlankEmpty &&
	git diff f > actual &&
	test_cmp exp actual

ok 1 - diff honors config option, diff.suppressBlankEmpty

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4027-diff-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4027-diff-submodule/.git/
expecting success of 4027.1 'setup': 
	test_tick &&
	test_create_repo sub &&
	(
		cd sub &&
		echo hello >world &&
		git add world &&
		git commit -m submodule
	) &&

	test_tick &&
	echo frotz >nitfol &&
	git add nitfol sub &&
	git commit -m superproject &&

	(
		cd sub &&
		echo goodbye >world &&
		git add world &&
		git commit -m "submodule #2"
	) &&

	git -C sub rev-list HEAD >revs &&
	set x $(cat revs) &&
	echo ":160000 160000 $3 $ZERO_OID M	sub" >expect &&
	subtip=$3 subprev=$2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4027-diff-submodule/sub/.git/
[master (root-commit) 4431e0b] submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) 5b035b6] superproject
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 nitfol
 create mode 160000 sub
[master 2dd69d6] submodule #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4027.2 'git diff --raw HEAD': 
	hexsz=$(test_oid hexsz) &&
	git diff --raw --abbrev=$hexsz HEAD >actual &&
	test_cmp expect actual

ok 2 - git diff --raw HEAD

expecting success of 4027.3 'git diff-index --raw HEAD': 
	git diff-index --raw HEAD >actual.index &&
	test_cmp expect actual.index

ok 3 - git diff-index --raw HEAD

expecting success of 4027.4 'git diff-files --raw': 
	git diff-files --raw >actual.files &&
	test_cmp expect actual.files

ok 4 - git diff-files --raw

expecting success of 4027.5 'git diff HEAD': 
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body

ok 5 - git diff HEAD

expecting success of 4027.6 'git diff HEAD with dirty submodule (work tree)': 
	echo >>sub/world &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev-dirty &&
	test_cmp expect.body actual.body

ok 6 - git diff HEAD with dirty submodule (work tree)

expecting success of 4027.7 'git diff HEAD with dirty submodule (index)': 
	(
		cd sub &&
		git reset --hard &&
		echo >>world &&
		git add world
	) &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev-dirty &&
	test_cmp expect.body actual.body

HEAD is now at 2dd69d6 submodule #2
ok 7 - git diff HEAD with dirty submodule (index)

expecting success of 4027.8 'git diff HEAD with dirty submodule (untracked)': 
	(
		cd sub &&
		git reset --hard &&
		git clean -qfdx &&
		>cruft
	) &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body

HEAD is now at 2dd69d6 submodule #2
ok 8 - git diff HEAD with dirty submodule (untracked)

expecting success of 4027.9 'git diff HEAD with dirty submodule (untracked) (none ignored)': 
	test_config diff.ignoreSubmodules none &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev-dirty &&
	test_cmp expect.body actual.body

ok 9 - git diff HEAD with dirty submodule (untracked) (none ignored)

expecting success of 4027.10 'git diff HEAD with dirty submodule (work tree, refs match)': 
	git commit -m "x" sub &&
	echo >>sub/world &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body &&
	git diff --ignore-submodules HEAD >actual2 &&
	test_must_be_empty actual2 &&
	git diff --ignore-submodules=untracked HEAD >actual3 &&
	sed -e "1,/^@@/d" actual3 >actual3.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual3.body &&
	git diff --ignore-submodules=dirty HEAD >actual4 &&
	test_must_be_empty actual4

[master e6ee575] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 10 - git diff HEAD with dirty submodule (work tree, refs match)

expecting success of 4027.11 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]': 
	git config diff.ignoreSubmodules dirty &&
	git diff HEAD >actual &&
	test_must_be_empty actual &&
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sub &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body &&
	git config -f .gitmodules submodule.subname.ignore all &&
	git config -f .gitmodules submodule.subname.path sub &&
	git diff HEAD >actual2 &&
	test_must_be_empty actual2 &&
	git config -f .gitmodules submodule.subname.ignore untracked &&
	git diff HEAD >actual3 &&
	sed -e "1,/^@@/d" actual3 >actual3.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual3.body &&
	git config -f .gitmodules submodule.subname.ignore dirty &&
	git diff HEAD >actual4 &&
	test_must_be_empty actual4 &&
	git config submodule.subname.ignore none &&
	git config submodule.subname.path sub &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body &&
	git config --remove-section submodule.subname &&
	git config --remove-section -f .gitmodules submodule.subname &&
	git config --unset diff.ignoreSubmodules &&
	rm .gitmodules

ok 11 - git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]

expecting success of 4027.12 'git diff HEAD with dirty submodule (index, refs match)': 
	(
		cd sub &&
		git reset --hard &&
		echo >>world &&
		git add world
	) &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body

HEAD is now at 2dd69d6 submodule #2
ok 12 - git diff HEAD with dirty submodule (index, refs match)

expecting success of 4027.13 'git diff HEAD with dirty submodule (untracked, refs match)': 
	(
		cd sub &&
		git reset --hard &&
		git clean -qfdx &&
		>cruft
	) &&
	git diff --ignore-submodules=none HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body &&
	git diff --ignore-submodules=all HEAD >actual2 &&
	test_must_be_empty actual2 &&
	git diff HEAD >actual3 &&
	test_must_be_empty actual3 &&
	git diff --ignore-submodules=dirty HEAD >actual4 &&
	test_must_be_empty actual4

HEAD is now at 2dd69d6 submodule #2
ok 13 - git diff HEAD with dirty submodule (untracked, refs match)

expecting success of 4027.14 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]': 
	git config --add -f .gitmodules submodule.subname.ignore all &&
	git config --add -f .gitmodules submodule.subname.path sub &&
	git diff HEAD >actual2 &&
	test_must_be_empty actual2 &&
	git config -f .gitmodules submodule.subname.ignore untracked &&
	git diff HEAD >actual3 &&
	test_must_be_empty actual3 &&
	git config -f .gitmodules submodule.subname.ignore dirty &&
	git diff HEAD >actual4 &&
	test_must_be_empty actual4 &&
	git config submodule.subname.ignore none &&
	git config submodule.subname.path sub &&
	git diff HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subprev $subprev-dirty &&
	test_cmp expect.body actual.body &&
	git config --remove-section submodule.subname &&
	git config --remove-section -f .gitmodules submodule.subname &&
	rm .gitmodules

ok 14 - git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]

expecting success of 4027.15 'git diff between submodule commits': 
	git diff HEAD^..HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body &&
	git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body &&
	git diff --ignore-submodules HEAD^..HEAD >actual &&
	test_must_be_empty actual

ok 15 - git diff between submodule commits

expecting success of 4027.16 'git diff between submodule commits [.gitmodules]': 
	git diff HEAD^..HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body &&
	git config --add -f .gitmodules submodule.subname.ignore dirty &&
	git config --add -f .gitmodules submodule.subname.path sub &&
	git diff HEAD^..HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	test_cmp expect.body actual.body &&
	git config -f .gitmodules submodule.subname.ignore all &&
	git diff HEAD^..HEAD >actual &&
	test_must_be_empty actual &&
	git config submodule.subname.ignore dirty &&
	git config submodule.subname.path sub &&
	git diff  HEAD^..HEAD >actual &&
	sed -e "1,/^@@/d" actual >actual.body &&
	expect_from_to >expect.body $subtip $subprev &&
	git config --remove-section submodule.subname &&
	git config --remove-section -f .gitmodules submodule.subname &&
	rm .gitmodules

ok 16 - git diff between submodule commits [.gitmodules]

expecting success of 4027.17 'git diff (empty submodule dir)': 
	rm -rf sub/* sub/.git &&
	git diff > actual.empty &&
	test_must_be_empty actual.empty

ok 17 - git diff (empty submodule dir)

expecting success of 4027.18 'conflicted submodule setup': 
	c=$(test_oid ff_1) &&
	(
		echo "000000 $ZERO_OID 0	sub" &&
		echo "160000 1$c 1	sub" &&
		echo "160000 2$c 2	sub" &&
		echo "160000 3$c 3	sub"
	) | git update-index --index-info &&
	echo >expect.nosub "diff --cc sub
index 2ffffff,3ffffff..0000000
--- a/sub
+++ b/sub
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 2$c
 -Subproject commit 3$c
++Subproject commit $ZERO_OID" &&

	hh=$(git rev-parse HEAD) &&
	sed -e "s/$ZERO_OID/$hh/" expect.nosub >expect.withsub


ok 18 - conflicted submodule setup

expecting success of 4027.19 'combined (empty submodule)': 
	rm -fr sub && mkdir sub &&
	git diff >actual &&
	test_cmp expect.nosub actual

ok 19 - combined (empty submodule)

expecting success of 4027.20 'combined (with submodule)': 
	rm -fr sub &&
	git clone --no-checkout . sub &&
	git diff >actual &&
	test_cmp expect.withsub actual

Cloning into 'sub'...
done.
ok 20 - combined (with submodule)

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4031-diff-rewrite-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4031-diff-rewrite-binary/.git/
expecting success of 4031.1 'create binary file with changes': 
	make_file "\\0" &&
	git add file &&
	make_file "\\01"

ok 1 - create binary file with changes

expecting success of 4031.2 'vanilla diff is binary': 
	git diff >diff &&
	grep "Binary files a/file and b/file differ" diff

Binary files a/file and b/file differ
ok 2 - vanilla diff is binary

expecting success of 4031.3 'rewrite diff is binary': 
	git diff -B >diff &&
	grep "dissimilarity index" diff &&
	grep "Binary files a/file and b/file differ" diff

dissimilarity index 99%
Binary files a/file and b/file differ
ok 3 - rewrite diff is binary

expecting success of 4031.4 'rewrite diff can show binary patch': 
	git diff -B --binary >diff &&
	grep "dissimilarity index" diff &&
	grep "GIT binary patch" diff

dissimilarity index 99%
GIT binary patch
ok 4 - rewrite diff can show binary patch

expecting success of 4031.5 'rewrite diff --numstat shows binary changes': 
	git diff -B --numstat --summary >diff &&
	grep -e "-	-	" diff &&
	grep " rewrite file" diff

-	-	file
 rewrite file (99%)
ok 5 - rewrite diff --numstat shows binary changes

expecting success of 4031.6 'diff --stat counts binary rewrite as 0 lines': 
	git diff -B --stat --summary >diff &&
	grep "Bin" diff &&
	test_i18ngrep "0 insertions.*0 deletions" diff &&
	grep " rewrite file" diff

 file | Bin 902 -> 902 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 rewrite file (99%)
ok 6 - diff --stat counts binary rewrite as 0 lines

expecting success of 4031.7 'setup textconv': 
	echo file diff=foo >.gitattributes &&
	git config diff.foo.textconv "\"$(pwd)\""/dump

ok 7 - setup textconv

expecting success of 4031.8 'rewrite diff respects textconv': 
	git diff -B >diff &&
	grep "dissimilarity index" diff &&
	grep "^-61" diff &&
	grep "^-0" diff

dissimilarity index 99%
-61
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
ok 8 - rewrite diff respects textconv

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4030-diff-textconv.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4030-diff-textconv/.git/
expecting success of 4030.1 'setup binary file with history': 
	test_commit --printf one file "\\0\\n" &&
	test_commit --printf --append two file "\\01\\n"

[master (root-commit) f1b27dd] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[master e1c09e5] two
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 1 - setup binary file with history

expecting success of 4030.2 'file is considered binary by porcelain': 
	git diff HEAD^ HEAD >diff &&
	find_diff <diff >actual &&
	test_cmp expect.binary actual

ok 2 - file is considered binary by porcelain

expecting success of 4030.3 'file is considered binary by plumbing': 
	git diff-tree -p HEAD^ HEAD >diff &&
	find_diff <diff >actual &&
	test_cmp expect.binary actual

ok 3 - file is considered binary by plumbing

expecting success of 4030.4 'setup textconv filters': 
	echo file diff=foo >.gitattributes &&
	git config diff.foo.textconv "\"$(pwd)\""/hexdump &&
	git config diff.fail.textconv false

ok 4 - setup textconv filters

expecting success of 4030.5 'diff produces text': 
	git diff HEAD^ HEAD >diff &&
	find_diff <diff >actual &&
	test_cmp expect.text actual

ok 5 - diff produces text

expecting success of 4030.6 'show commit produces text': 
	git show HEAD >diff &&
	find_diff <diff >actual &&
	test_cmp expect.text actual

ok 6 - show commit produces text

expecting success of 4030.7 'diff-tree produces binary': 
	git diff-tree -p HEAD^ HEAD >diff &&
	find_diff <diff >actual &&
	test_cmp expect.binary actual

ok 7 - diff-tree produces binary

expecting success of 4030.8 'log produces text': 
	git log -1 -p >log &&
	find_diff <log >actual &&
	test_cmp expect.text actual

ok 8 - log produces text

expecting success of 4030.9 'format-patch produces binary': 
	git format-patch --no-binary --stdout HEAD^ >patch &&
	find_diff <patch >actual &&
	test_cmp expect.binary actual

ok 9 - format-patch produces binary

expecting success of 4030.10 'status -v produces text': 
	git reset --soft HEAD^ &&
	git status -v >diff &&
	find_diff <diff >actual &&
	test_cmp expect.text actual &&
	git reset --soft HEAD@{1}

ok 10 - status -v produces text

expecting success of 4030.11 'show blob produces binary': 
	git show HEAD:file >actual &&
	printf "\\0\\n\\01\\n" >expect &&
	test_cmp expect actual

ok 11 - show blob produces binary

expecting success of 4030.12 'show --textconv blob produces text': 
	git show --textconv HEAD:file >actual &&
	printf "0\\n1\\n" >expect &&
	test_cmp expect actual

ok 12 - show --textconv blob produces text

expecting success of 4030.13 'show --no-textconv blob produces binary': 
	git show --no-textconv HEAD:file >actual &&
	printf "\\0\\n\\01\\n" >expect &&
	test_cmp expect actual

ok 13 - show --no-textconv blob produces binary

expecting success of 4030.14 'grep-diff (-G) operates on textconv data (add)': 
	echo one >expect &&
	git log --root --format=%s -G0 >actual &&
	test_cmp expect actual

ok 14 - grep-diff (-G) operates on textconv data (add)

expecting success of 4030.15 'grep-diff (-G) operates on textconv data (modification)': 
	echo two >expect &&
	git log --root --format=%s -G1 >actual &&
	test_cmp expect actual

ok 15 - grep-diff (-G) operates on textconv data (modification)

expecting success of 4030.16 'pickaxe (-S) operates on textconv data (add)': 
	echo one >expect &&
	git log --root --format=%s -S0 >actual &&
	test_cmp expect actual

ok 16 - pickaxe (-S) operates on textconv data (add)

expecting success of 4030.17 'pickaxe (-S) operates on textconv data (modification)': 
	echo two >expect &&
	git log --root --format=%s -S1 >actual &&
	test_cmp expect actual

ok 17 - pickaxe (-S) operates on textconv data (modification)

expecting success of 4030.18 'diffstat does not run textconv': 
	echo file diff=fail >.gitattributes &&
	git diff --stat HEAD^ HEAD >actual &&
	test_cmp expect.stat actual &&

	head -n1 <expect.stat >expect.line1 &&
	head -n1 <actual >actual.line1 &&
	test_cmp expect.line1 actual.line1

ok 18 - diffstat does not run textconv

expecting success of 4030.19 'textconv does not act on symlinks': 
	rm -f file &&
	test_ln_s_add frotz file &&
	git commit -m typechange &&
	git show >diff &&
	find_diff <diff >actual &&
	test_cmp expect.typechange actual

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master 552bf47] typechange
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 120000 file
ok 19 - textconv does not act on symlinks

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4033-diff-patience.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4033-diff-patience/.git/
expecting success of 4033.1 '--ignore-space-at-eol with a single appended character': 
	printf "a\nb\nc\n" >pre &&
	printf "a\nbX\nc\n" >post &&
	test_must_fail git diff --no-index \
		--patience --ignore-space-at-eol pre post >diff &&
	grep "^+.*X" diff

+bX
ok 1 - --ignore-space-at-eol with a single appended character

expecting success of 4033.2 'patience diff': 
		test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&
		test_cmp expect output
	
ok 2 - patience diff

expecting success of 4033.3 'patience diff output is valid': 
		mv file2 expect &&
		git apply < output &&
		test_cmp expect file2
	
ok 3 - patience diff output is valid

expecting success of 4033.4 'completely different files': 
		test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&
		test_cmp expect output
	
ok 4 - completely different files

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4032-diff-inter-hunk-context.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4032-diff-inter-hunk-context/.git/
expecting success of 4032.1 'diff -U0, 1 common line: count hunks (2)': 
		test 2 = 2
	
ok 1 - diff -U0, 1 common line: count hunks (2)

expecting success of 4032.2 'diff -U0, 1 common line: check output': 
		git diff -U0 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.2 actual
	
ok 2 - diff -U0, 1 common line: check output

expecting success of 4032.3 'diff -U0 --inter-hunk-context=0, 1 common line: count hunks (2)': 
		test 2 = 2
	
ok 3 - diff -U0 --inter-hunk-context=0, 1 common line: count hunks (2)

expecting success of 4032.4 'diff -U0 --inter-hunk-context=0, 1 common line: check output': 
		git diff -U0 --inter-hunk-context=0 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.2 actual
	
ok 4 - diff -U0 --inter-hunk-context=0, 1 common line: check output

expecting success of 4032.5 'diff -U0 --inter-hunk-context=1, 1 common line: count hunks (1)': 
		test 1 = 1
	
ok 5 - diff -U0 --inter-hunk-context=1, 1 common line: count hunks (1)

expecting success of 4032.6 'diff -U0 --inter-hunk-context=1, 1 common line: check output': 
		git diff -U0 --inter-hunk-context=1 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.1 actual
	
ok 6 - diff -U0 --inter-hunk-context=1, 1 common line: check output

expecting success of 4032.7 'diff -U0 --inter-hunk-context=2, 1 common line: count hunks (1)': 
		test 1 = 1
	
ok 7 - diff -U0 --inter-hunk-context=2, 1 common line: count hunks (1)

expecting success of 4032.8 'diff -U0 --inter-hunk-context=2, 1 common line: check output': 
		git diff -U0 --inter-hunk-context=2 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.1 actual
	
ok 8 - diff -U0 --inter-hunk-context=2, 1 common line: check output

expecting success of 4032.9 'diff -U1, 1 common line: count hunks (1)': 
		test 1 = 1
	
ok 9 - diff -U1, 1 common line: count hunks (1)

expecting success of 4032.10 'diff -U0, 2 common lines: count hunks (2)': 
		test 2 = 2
	
ok 10 - diff -U0, 2 common lines: count hunks (2)

expecting success of 4032.11 'diff -U0 --inter-hunk-context=0, 2 common lines: count hunks (2)': 
		test 2 = 2
	
ok 11 - diff -U0 --inter-hunk-context=0, 2 common lines: count hunks (2)

expecting success of 4032.12 'diff -U0 --inter-hunk-context=1, 2 common lines: count hunks (2)': 
		test 2 = 2
	
ok 12 - diff -U0 --inter-hunk-context=1, 2 common lines: count hunks (2)

expecting success of 4032.13 'diff -U0 --inter-hunk-context=2, 2 common lines: count hunks (1)': 
		test 1 = 1
	
ok 13 - diff -U0 --inter-hunk-context=2, 2 common lines: count hunks (1)

expecting success of 4032.14 'diff -U1, 2 common lines: count hunks (1)': 
		test 1 = 1
	
ok 14 - diff -U1, 2 common lines: count hunks (1)

expecting success of 4032.15 'diff -U1, 3 common lines: count hunks (2)': 
		test 2 = 2
	
ok 15 - diff -U1, 3 common lines: count hunks (2)

expecting success of 4032.16 'diff -U1 --inter-hunk-context=0, 3 common lines: count hunks (2)': 
		test 2 = 2
	
ok 16 - diff -U1 --inter-hunk-context=0, 3 common lines: count hunks (2)

expecting success of 4032.17 'diff -U1 --inter-hunk-context=1, 3 common lines: count hunks (1)': 
		test 1 = 1
	
ok 17 - diff -U1 --inter-hunk-context=1, 3 common lines: count hunks (1)

expecting success of 4032.18 'diff -U1 --inter-hunk-context=2, 3 common lines: count hunks (1)': 
		test 1 = 1
	
ok 18 - diff -U1 --inter-hunk-context=2, 3 common lines: count hunks (1)

expecting success of 4032.19 'diff -U3, 9 common lines: count hunks (2)': 
		test 2 = 2
	
ok 19 - diff -U3, 9 common lines: count hunks (2)

expecting success of 4032.20 'diff -U3 --inter-hunk-context=2, 9 common lines: count hunks (2)': 
		test 2 = 2
	
ok 20 - diff -U3 --inter-hunk-context=2, 9 common lines: count hunks (2)

expecting success of 4032.21 'diff -U3 --inter-hunk-context=3, 9 common lines: count hunks (1)': 
		test 1 = 1
	
ok 21 - diff -U3 --inter-hunk-context=3, 9 common lines: count hunks (1)

expecting success of 4032.22 '(diff.interHunkContext=0) diff -U0, 1 common line: count hunks (2)': 
		test 2 = 2
	
ok 22 - (diff.interHunkContext=0) diff -U0, 1 common line: count hunks (2)

expecting success of 4032.23 '(diff.interHunkContext=0) diff -U0, 1 common line: check output': 
		git diff -U0 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.2 actual
	
ok 23 - (diff.interHunkContext=0) diff -U0, 1 common line: check output

expecting success of 4032.24 '(diff.interHunkContext=1) diff -U0, 1 common line: count hunks (1)': 
		test 1 = 1
	
ok 24 - (diff.interHunkContext=1) diff -U0, 1 common line: count hunks (1)

expecting success of 4032.25 '(diff.interHunkContext=1) diff -U0, 1 common line: check output': 
		git diff -U0 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.1 actual
	
ok 25 - (diff.interHunkContext=1) diff -U0, 1 common line: check output

expecting success of 4032.26 '(diff.interHunkContext=2) diff -U0, 1 common line: count hunks (1)': 
		test 1 = 1
	
ok 26 - (diff.interHunkContext=2) diff -U0, 1 common line: count hunks (1)

expecting success of 4032.27 '(diff.interHunkContext=2) diff -U0, 1 common line: check output': 
		git diff -U0 f1 | grep -v '^index ' >actual &&
		test_cmp expected.f1.0.1 actual
	
ok 27 - (diff.interHunkContext=2) diff -U0, 1 common line: check output

expecting success of 4032.28 '(diff.interHunkContext=3) diff -U3, 9 common lines: count hunks (1)': 
		test 1 = 1
	
ok 28 - (diff.interHunkContext=3) diff -U3, 9 common lines: count hunks (1)

expecting success of 4032.29 '(diff.interHunkContext=0) diff -U0, 2 common lines: count hunks (2)': 
		test 2 = 2
	
ok 29 - (diff.interHunkContext=0) diff -U0, 2 common lines: count hunks (2)

expecting success of 4032.30 '(diff.interHunkContext=1) diff -U0, 2 common lines: count hunks (2)': 
		test 2 = 2
	
ok 30 - (diff.interHunkContext=1) diff -U0, 2 common lines: count hunks (2)

expecting success of 4032.31 '(diff.interHunkContext=2) diff -U0, 2 common lines: count hunks (1)': 
		test 1 = 1
	
ok 31 - (diff.interHunkContext=2) diff -U0, 2 common lines: count hunks (1)

expecting success of 4032.32 '(diff.interHunkContext=0) diff -U1, 3 common lines: count hunks (2)': 
		test 2 = 2
	
ok 32 - (diff.interHunkContext=0) diff -U1, 3 common lines: count hunks (2)

expecting success of 4032.33 '(diff.interHunkContext=1) diff -U1, 3 common lines: count hunks (1)': 
		test 1 = 1
	
ok 33 - (diff.interHunkContext=1) diff -U1, 3 common lines: count hunks (1)

expecting success of 4032.34 '(diff.interHunkContext=2) diff -U1, 3 common lines: count hunks (1)': 
		test 1 = 1
	
ok 34 - (diff.interHunkContext=2) diff -U1, 3 common lines: count hunks (1)

expecting success of 4032.35 '(diff.interHunkContext=2) diff -U3, 9 common lines: count hunks (2)': 
		test 2 = 2
	
ok 35 - (diff.interHunkContext=2) diff -U3, 9 common lines: count hunks (2)

expecting success of 4032.36 '(diff.interHunkContext=3) diff -U3, 9 common lines: count hunks (1)': 
		test 1 = 1
	
ok 36 - (diff.interHunkContext=3) diff -U3, 9 common lines: count hunks (1)

expecting success of 4032.37 'diff.interHunkContext invalid': 
	git config diff.interHunkContext asdf &&
	test_must_fail git diff &&
	git config diff.interHunkContext -1 &&
	test_must_fail git diff

fatal: bad numeric config value 'asdf' for 'diff.interhunkcontext': invalid unit
fatal: bad config variable 'diff.interhunkcontext' in file '.git/config' at line 7
ok 37 - diff.interHunkContext invalid

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4013-diff-various.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4013-diff-various/.git/
expecting success of 4013.1 'setup': 

	GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	mkdir dir &&
	mkdir dir2 &&
	test_write_lines 1 2 3 >file0 &&
	test_write_lines A B >dir/sub &&
	cat file0 >file2 &&
	git add file0 file2 dir/sub &&
	git commit -m Initial &&

	git branch initial &&
	git branch side &&

	GIT_AUTHOR_DATE="2006-06-26 00:01:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:01:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	test_write_lines 4 5 6 >>file0 &&
	test_write_lines C D >>dir/sub &&
	rm -f file2 &&
	git update-index --remove file0 file2 dir/sub &&
	git commit -m "Second${LF}${LF}This is the second commit." &&

	GIT_AUTHOR_DATE="2006-06-26 00:02:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:02:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	test_write_lines A B C >file1 &&
	git add file1 &&
	test_write_lines E F >>dir/sub &&
	git update-index dir/sub &&
	git commit -m Third &&

	GIT_AUTHOR_DATE="2006-06-26 00:03:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:03:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	git checkout side &&
	test_write_lines A B C >>file0 &&
	test_write_lines 1 2 >>dir/sub &&
	cat dir/sub >file3 &&
	git add file3 &&
	git update-index file0 dir/sub &&
	git commit -m Side &&

	GIT_AUTHOR_DATE="2006-06-26 00:04:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:04:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	git checkout master &&
	git pull -s ours --no-rebase . side &&

	GIT_AUTHOR_DATE="2006-06-26 00:05:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:05:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	test_write_lines A B C >>file0 &&
	test_write_lines 1 2 >>dir/sub &&
	git update-index file0 dir/sub &&

	mkdir dir3 &&
	cp dir/sub dir3/sub &&
	test-tool chmtime +1 dir3/sub &&

	git config log.showroot false &&
	git commit --amend &&

	GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
	git checkout -b rearrange initial &&
	test_write_lines B A >dir/sub &&
	git add dir/sub &&
	git commit -m "Rearranged lines in dir/sub" &&
	git checkout master &&

	GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
	git checkout -b mode initial &&
	git update-index --chmod=+x file0 &&
	git commit -m "update mode" &&
	git checkout -f master &&

	GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
	git checkout -b note initial &&
	git update-index --chmod=+x file2 &&
	git commit -m "update mode (file2)" &&
	git notes add -m "note" &&
	git checkout -f master &&

	# Same merge as master, but with parents reversed. Hide it in a
	# pseudo-ref to avoid impacting tests with --all.
	commit=$(echo reverse |
		 git commit-tree -p master^2 -p master^1 master^{tree}) &&
	git update-ref REVERSE $commit &&

	git config diff.renames false &&

	git show-branch

[master (root-commit) 444ac55] Initial
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 dir/sub
 create mode 100644 file0
 create mode 100644 file2
[master 1bde4ae] Second
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+), 3 deletions(-)
 delete mode 100644 file2
[master 9a6d494] Third
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 file1
Switched to branch 'side'
[side c7a2ab9] Side
 Author: A U Thor <author@example.com>
 3 files changed, 9 insertions(+)
 create mode 100644 file3
Switched to branch 'master'
From .
 * branch            side       -> FETCH_HEAD
Merge made by the 'ours' strategy.
[master 59d314a] Merge branch 'side'
 Author: A U Thor <author@example.com>
 Date: Mon Jun 26 00:04:00 2006 +0000
Switched to a new branch 'rearrange'
[rearrange cd4e72f] Rearranged lines in dir/sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'master'
Switched to a new branch 'mode'
[mode b7e0bc6] update mode
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 file0
Switched to branch 'master'
Switched to a new branch 'note'
[note a6f3643] update mode (file2)
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 file2
Switched to branch 'master'
! [initial] Initial
 * [master] Merge branch 'side'
  ! [mode] update mode
   ! [note] update mode (file2)
    ! [rearrange] Rearranged lines in dir/sub
     ! [side] Side
------
    +  [rearrange] Rearranged lines in dir/sub
   +   [note] update mode (file2)
  +    [mode] update mode
 -     [master] Merge branch 'side'
 *   + [side] Side
 *     [master^] Third
 *     [master~2] Second
+*++++ [initial] Initial
ok 1 - setup

expecting success of 4013.2 'git diff-tree initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 2 - git diff-tree initial # magic is (not used)

expecting success of 4013.3 'git diff-tree -r initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 3 - git diff-tree -r initial # magic is (not used)

expecting success of 4013.4 'git diff-tree -r --abbrev initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 4 - git diff-tree -r --abbrev initial # magic is (not used)

expecting success of 4013.5 'git diff-tree -r --abbrev=4 initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 5 - git diff-tree -r --abbrev=4 initial # magic is (not used)

expecting success of 4013.6 'git diff-tree --root initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 6 - git diff-tree --root initial # magic is (not used)

expecting success of 4013.7 'git diff-tree --root --abbrev initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 7 - git diff-tree --root --abbrev initial # magic is (not used)

expecting success of 4013.8 'git diff-tree --root --abbrev initial # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 8 - git diff-tree --root --abbrev initial # magic is noellipses

expecting success of 4013.9 'git diff-tree --root -r initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 9 - git diff-tree --root -r initial # magic is (not used)

expecting success of 4013.10 'git diff-tree --root -r --abbrev initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 10 - git diff-tree --root -r --abbrev initial # magic is (not used)

expecting success of 4013.11 'git diff-tree --root -r --abbrev initial # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 11 - git diff-tree --root -r --abbrev initial # magic is noellipses

expecting success of 4013.12 'git diff-tree --root -r --abbrev=4 initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 12 - git diff-tree --root -r --abbrev=4 initial # magic is (not used)

expecting success of 4013.13 'git diff-tree --root -r --abbrev=4 initial # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 13 - git diff-tree --root -r --abbrev=4 initial # magic is noellipses

expecting success of 4013.14 'git diff-tree -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 14 - git diff-tree -p initial # magic is (not used)

expecting success of 4013.15 'git diff-tree --root -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 15 - git diff-tree --root -p initial # magic is (not used)

expecting success of 4013.16 'git diff-tree --root -p --abbrev=10 initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 16 - git diff-tree --root -p --abbrev=10 initial # magic is (not used)

expecting success of 4013.17 'git diff-tree --root -p --full-index initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 17 - git diff-tree --root -p --full-index initial # magic is (not used)

expecting success of 4013.18 'git diff-tree --root -p --full-index --abbrev=10 initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 18 - git diff-tree --root -p --full-index --abbrev=10 initial # magic is (not used)

expecting success of 4013.19 'git diff-tree --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 19 - git diff-tree --patch-with-stat initial # magic is (not used)

expecting success of 4013.20 'git diff-tree --root --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 20 - git diff-tree --root --patch-with-stat initial # magic is (not used)

expecting success of 4013.21 'git diff-tree --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 21 - git diff-tree --patch-with-raw initial # magic is (not used)

expecting success of 4013.22 'git diff-tree --root --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 22 - git diff-tree --root --patch-with-raw initial # magic is (not used)

expecting success of 4013.23 'git diff-tree --pretty initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 23 - git diff-tree --pretty initial # magic is (not used)

expecting success of 4013.24 'git diff-tree --pretty --root initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 24 - git diff-tree --pretty --root initial # magic is (not used)

expecting success of 4013.25 'git diff-tree --pretty -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 25 - git diff-tree --pretty -p initial # magic is (not used)

expecting success of 4013.26 'git diff-tree --pretty --stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 26 - git diff-tree --pretty --stat initial # magic is (not used)

expecting success of 4013.27 'git diff-tree --pretty --summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 27 - git diff-tree --pretty --summary initial # magic is (not used)

expecting success of 4013.28 'git diff-tree --pretty --stat --summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 28 - git diff-tree --pretty --stat --summary initial # magic is (not used)

expecting success of 4013.29 'git diff-tree --pretty --root -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 29 - git diff-tree --pretty --root -p initial # magic is (not used)

expecting success of 4013.30 'git diff-tree --pretty --root --stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 30 - git diff-tree --pretty --root --stat initial # magic is (not used)

expecting success of 4013.31 'git diff-tree --pretty --root --summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 31 - git diff-tree --pretty --root --summary initial # magic is (not used)

expecting success of 4013.32 'git diff-tree --pretty --root --summary -r initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 32 - git diff-tree --pretty --root --summary -r initial # magic is (not used)

expecting success of 4013.33 'git diff-tree --pretty --root --stat --summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 33 - git diff-tree --pretty --root --stat --summary initial # magic is (not used)

expecting success of 4013.34 'git diff-tree --pretty --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 34 - git diff-tree --pretty --patch-with-stat initial # magic is (not used)

expecting success of 4013.35 'git diff-tree --pretty --root --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 35 - git diff-tree --pretty --root --patch-with-stat initial # magic is (not used)

expecting success of 4013.36 'git diff-tree --pretty --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 36 - git diff-tree --pretty --patch-with-raw initial # magic is (not used)

expecting success of 4013.37 'git diff-tree --pretty --root --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 37 - git diff-tree --pretty --root --patch-with-raw initial # magic is (not used)

expecting success of 4013.38 'git diff-tree --pretty=oneline initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 38 - git diff-tree --pretty=oneline initial # magic is (not used)

expecting success of 4013.39 'git diff-tree --pretty=oneline --root initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 39 - git diff-tree --pretty=oneline --root initial # magic is (not used)

expecting success of 4013.40 'git diff-tree --pretty=oneline -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 40 - git diff-tree --pretty=oneline -p initial # magic is (not used)

expecting success of 4013.41 'git diff-tree --pretty=oneline --root -p initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 41 - git diff-tree --pretty=oneline --root -p initial # magic is (not used)

expecting success of 4013.42 'git diff-tree --pretty=oneline --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 42 - git diff-tree --pretty=oneline --patch-with-stat initial # magic is (not used)

expecting success of 4013.43 'git diff-tree --pretty=oneline --root --patch-with-stat initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 43 - git diff-tree --pretty=oneline --root --patch-with-stat initial # magic is (not used)

expecting success of 4013.44 'git diff-tree --pretty=oneline --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 44 - git diff-tree --pretty=oneline --patch-with-raw initial # magic is (not used)

expecting success of 4013.45 'git diff-tree --pretty=oneline --root --patch-with-raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 45 - git diff-tree --pretty=oneline --root --patch-with-raw initial # magic is (not used)

expecting success of 4013.46 'git diff-tree --pretty side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 46 - git diff-tree --pretty side # magic is (not used)

expecting success of 4013.47 'git diff-tree --pretty -p side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 47 - git diff-tree --pretty -p side # magic is (not used)

expecting success of 4013.48 'git diff-tree --pretty --patch-with-stat side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 48 - git diff-tree --pretty --patch-with-stat side # magic is (not used)

expecting success of 4013.49 'git diff-tree initial mode # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 49 - git diff-tree initial mode # magic is (not used)

expecting success of 4013.50 'git diff-tree --stat initial mode # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 50 - git diff-tree --stat initial mode # magic is (not used)

expecting success of 4013.51 'git diff-tree --summary initial mode # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 51 - git diff-tree --summary initial mode # magic is (not used)

expecting success of 4013.52 'git diff-tree master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 52 - git diff-tree master # magic is (not used)

expecting success of 4013.53 'git diff-tree -m master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 53 - git diff-tree -m master # magic is (not used)

expecting success of 4013.54 'git diff-tree -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 54 - git diff-tree -p master # magic is (not used)

expecting success of 4013.55 'git diff-tree -p -m master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 55 - git diff-tree -p -m master # magic is (not used)

expecting success of 4013.56 'git diff-tree -c master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 56 - git diff-tree -c master # magic is (not used)

expecting success of 4013.57 'git diff-tree -c --abbrev master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 57 - git diff-tree -c --abbrev master # magic is (not used)

expecting success of 4013.58 'git diff-tree -c --abbrev master # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 58 - git diff-tree -c --abbrev master # magic is noellipses

expecting success of 4013.59 'git diff-tree --cc master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 59 - git diff-tree --cc master # magic is (not used)

expecting success of 4013.60 'git diff-tree -c --stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 60 - git diff-tree -c --stat master # magic is (not used)

expecting success of 4013.61 'git diff-tree --cc --stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 61 - git diff-tree --cc --stat master # magic is (not used)

expecting success of 4013.62 'git diff-tree -c --stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 62 - git diff-tree -c --stat --summary master # magic is (not used)

expecting success of 4013.63 'git diff-tree --cc --stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 63 - git diff-tree --cc --stat --summary master # magic is (not used)

expecting success of 4013.64 'git diff-tree -c --stat --summary side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 64 - git diff-tree -c --stat --summary side # magic is (not used)

expecting success of 4013.65 'git diff-tree --cc --stat --summary side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 65 - git diff-tree --cc --stat --summary side # magic is (not used)

expecting success of 4013.66 'git diff-tree --cc --shortstat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 66 - git diff-tree --cc --shortstat master # magic is (not used)

expecting success of 4013.67 'git diff-tree --cc --summary REVERSE # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 67 - git diff-tree --cc --summary REVERSE # magic is (not used)

expecting success of 4013.68 'git diff-tree --cc --patch-with-stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 68 - git diff-tree --cc --patch-with-stat master # magic is (not used)

expecting success of 4013.69 'git diff-tree --cc --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 69 - git diff-tree --cc --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.70 'git diff-tree --cc --patch-with-stat --summary side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 70 - git diff-tree --cc --patch-with-stat --summary side # magic is (not used)

expecting success of 4013.71 'git log master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 71 - git log master # magic is (not used)

expecting success of 4013.72 'git log -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 72 - git log -p master # magic is (not used)

expecting success of 4013.73 'git log --root master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 73 - git log --root master # magic is (not used)

expecting success of 4013.74 'git log --root -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 74 - git log --root -p master # magic is (not used)

expecting success of 4013.75 'git log --patch-with-stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 75 - git log --patch-with-stat master # magic is (not used)

expecting success of 4013.76 'git log --root --patch-with-stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 76 - git log --root --patch-with-stat master # magic is (not used)

expecting success of 4013.77 'git log --root --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 77 - git log --root --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.78 'git log --root -c --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 78 - git log --root -c --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.79 'git log --root --cc --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 79 - git log --root --cc --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.80 'git log --no-diff-merges -p --first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 80 - git log --no-diff-merges -p --first-parent master # magic is (not used)

expecting success of 4013.81 'git log --diff-merges=off -p --first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 81 - git log --diff-merges=off -p --first-parent master # magic is (not used)

expecting success of 4013.82 'git log --first-parent --diff-merges=off -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 82 - git log --first-parent --diff-merges=off -p master # magic is (not used)

expecting success of 4013.83 'git log -p --first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 83 - git log -p --first-parent master # magic is (not used)

expecting success of 4013.84 'git log -p --diff-merges=first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 84 - git log -p --diff-merges=first-parent master # magic is (not used)

expecting success of 4013.85 'git log --diff-merges=first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 85 - git log --diff-merges=first-parent master # magic is (not used)

expecting success of 4013.86 'git log -m -p --first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 86 - git log -m -p --first-parent master # magic is (not used)

expecting success of 4013.87 'git log -m -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 87 - git log -m -p master # magic is (not used)

expecting success of 4013.88 'git log --cc -m -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 88 - git log --cc -m -p master # magic is (not used)

expecting success of 4013.89 'git log -c -m -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 89 - git log -c -m -p master # magic is (not used)

expecting success of 4013.90 'git log -m --raw master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 90 - git log -m --raw master # magic is (not used)

expecting success of 4013.91 'git log -m --stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 91 - git log -m --stat master # magic is (not used)

expecting success of 4013.92 'git log -SF master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 92 - git log -SF master # magic is (not used)

expecting success of 4013.93 'git log -S F master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 93 - git log -S F master # magic is (not used)

expecting success of 4013.94 'git log -SF -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 94 - git log -SF -p master # magic is (not used)

expecting success of 4013.95 'git log -SF master --max-count=0 # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 95 - git log -SF master --max-count=0 # magic is (not used)

expecting success of 4013.96 'git log -SF master --max-count=1 # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 96 - git log -SF master --max-count=1 # magic is (not used)

expecting success of 4013.97 'git log -SF master --max-count=2 # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 97 - git log -SF master --max-count=2 # magic is (not used)

expecting success of 4013.98 'git log -GF master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 98 - git log -GF master # magic is (not used)

expecting success of 4013.99 'git log -GF -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 99 - git log -GF -p master # magic is (not used)

expecting success of 4013.100 'git log -GF -p --pickaxe-all master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 100 - git log -GF -p --pickaxe-all master # magic is (not used)

expecting success of 4013.101 'git log -IA -IB -I1 -I2 -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 101 - git log -IA -IB -I1 -I2 -p master # magic is (not used)

expecting success of 4013.102 'git log --decorate --all # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 102 - git log --decorate --all # magic is (not used)

expecting success of 4013.103 'git log --decorate=full --all # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 103 - git log --decorate=full --all # magic is (not used)

expecting success of 4013.104 'git log --decorate --clear-decorations --all # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 104 - git log --decorate --clear-decorations --all # magic is (not used)

expecting success of 4013.105 'git log --decorate=full --clear-decorations --all # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 105 - git log --decorate=full --clear-decorations --all # magic is (not used)

expecting success of 4013.106 'git rev-list --parents HEAD # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 106 - git rev-list --parents HEAD # magic is (not used)

expecting success of 4013.107 'git rev-list --children HEAD # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 107 - git rev-list --children HEAD # magic is (not used)

expecting success of 4013.108 'git whatchanged master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 108 - git whatchanged master # magic is (not used)

expecting success of 4013.109 'git whatchanged master # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 109 - git whatchanged master # magic is noellipses

expecting success of 4013.110 'git whatchanged -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 110 - git whatchanged -p master # magic is (not used)

expecting success of 4013.111 'git whatchanged --root master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 111 - git whatchanged --root master # magic is (not used)

expecting success of 4013.112 'git whatchanged --root master # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 112 - git whatchanged --root master # magic is noellipses

expecting success of 4013.113 'git whatchanged --root -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 113 - git whatchanged --root -p master # magic is (not used)

expecting success of 4013.114 'git whatchanged --patch-with-stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 114 - git whatchanged --patch-with-stat master # magic is (not used)

expecting success of 4013.115 'git whatchanged --root --patch-with-stat master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 115 - git whatchanged --root --patch-with-stat master # magic is (not used)

expecting success of 4013.116 'git whatchanged --root --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 116 - git whatchanged --root --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.117 'git whatchanged --root -c --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 117 - git whatchanged --root -c --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.118 'git whatchanged --root --cc --patch-with-stat --summary master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 118 - git whatchanged --root --cc --patch-with-stat --summary master # magic is (not used)

expecting success of 4013.119 'git whatchanged -SF master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 119 - git whatchanged -SF master # magic is (not used)

expecting success of 4013.120 'git whatchanged -SF master # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 120 - git whatchanged -SF master # magic is noellipses

expecting success of 4013.121 'git whatchanged -SF -p master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 121 - git whatchanged -SF -p master # magic is (not used)

expecting success of 4013.122 'git log --patch-with-stat master -- dir/ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 122 - git log --patch-with-stat master -- dir/ # magic is (not used)

expecting success of 4013.123 'git whatchanged --patch-with-stat master -- dir/ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 123 - git whatchanged --patch-with-stat master -- dir/ # magic is (not used)

expecting success of 4013.124 'git log --patch-with-stat --summary master -- dir/ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 124 - git log --patch-with-stat --summary master -- dir/ # magic is (not used)

expecting success of 4013.125 'git whatchanged --patch-with-stat --summary master -- dir/ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 125 - git whatchanged --patch-with-stat --summary master -- dir/ # magic is (not used)

expecting success of 4013.126 'git show initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 126 - git show initial # magic is (not used)

expecting success of 4013.127 'git show --root initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 127 - git show --root initial # magic is (not used)

expecting success of 4013.128 'git show side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 128 - git show side # magic is (not used)

expecting success of 4013.129 'git show master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 129 - git show master # magic is (not used)

expecting success of 4013.130 'git show -c master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 130 - git show -c master # magic is (not used)

expecting success of 4013.131 'git show -m master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 131 - git show -m master # magic is (not used)

expecting success of 4013.132 'git show --first-parent master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 132 - git show --first-parent master # magic is (not used)

expecting success of 4013.133 'git show --stat side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 133 - git show --stat side # magic is (not used)

expecting success of 4013.134 'git show --stat --summary side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 134 - git show --stat --summary side # magic is (not used)

expecting success of 4013.135 'git show --patch-with-stat side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 135 - git show --patch-with-stat side # magic is (not used)

expecting success of 4013.136 'git show --patch-with-raw side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 136 - git show --patch-with-raw side # magic is (not used)

expecting success of 4013.137 'git show --patch-with-raw side # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 137 - git show --patch-with-raw side # magic is noellipses

expecting success of 4013.138 'git show --patch-with-stat --summary side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 138 - git show --patch-with-stat --summary side # magic is (not used)

expecting success of 4013.139 'git format-patch --stdout initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 139 - git format-patch --stdout initial..side # magic is (not used)

expecting success of 4013.140 'git format-patch --stdout initial..master^ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 140 - git format-patch --stdout initial..master^ # magic is (not used)

expecting success of 4013.141 'git format-patch --stdout initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 141 - git format-patch --stdout initial..master # magic is (not used)

expecting success of 4013.142 'git format-patch --stdout --no-numbered initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 142 - git format-patch --stdout --no-numbered initial..master # magic is (not used)

expecting success of 4013.143 'git format-patch --stdout --numbered initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 143 - git format-patch --stdout --numbered initial..master # magic is (not used)

expecting success of 4013.144 'git format-patch --attach --stdout initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 144 - git format-patch --attach --stdout initial..side # magic is (not used)

expecting success of 4013.145 'git format-patch --attach --stdout --suffix=.diff initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 145 - git format-patch --attach --stdout --suffix=.diff initial..side # magic is (not used)

expecting success of 4013.146 'git format-patch --attach --stdout initial..master^ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 146 - git format-patch --attach --stdout initial..master^ # magic is (not used)

expecting success of 4013.147 'git format-patch --attach --stdout initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 147 - git format-patch --attach --stdout initial..master # magic is (not used)

expecting success of 4013.148 'git format-patch --inline --stdout initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 148 - git format-patch --inline --stdout initial..side # magic is (not used)

expecting success of 4013.149 'git format-patch --inline --stdout initial..master^ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 149 - git format-patch --inline --stdout initial..master^ # magic is (not used)

expecting success of 4013.150 'git format-patch --inline --stdout --numbered-files initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 150 - git format-patch --inline --stdout --numbered-files initial..master # magic is (not used)

expecting success of 4013.151 'git format-patch --inline --stdout initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 151 - git format-patch --inline --stdout initial..master # magic is (not used)

expecting success of 4013.152 'git format-patch --inline --stdout --subject-prefix=TESTCASE initial..master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 152 - git format-patch --inline --stdout --subject-prefix=TESTCASE initial..master # magic is (not used)

expecting success of 4013.153 'git config format.subjectprefix DIFFERENT_PREFIX # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 153 - git config format.subjectprefix DIFFERENT_PREFIX # magic is (not used)

expecting success of 4013.154 'git format-patch --inline --stdout initial..master^^ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 154 - git format-patch --inline --stdout initial..master^^ # magic is (not used)

expecting success of 4013.155 'git format-patch --stdout --cover-letter -n initial..master^ # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 155 - git format-patch --stdout --cover-letter -n initial..master^ # magic is (not used)

expecting success of 4013.156 'git diff --abbrev initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 156 - git diff --abbrev initial..side # magic is (not used)

expecting success of 4013.157 'git diff -U initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 157 - git diff -U initial..side # magic is (not used)

expecting success of 4013.158 'git diff -U1 initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 158 - git diff -U1 initial..side # magic is (not used)

expecting success of 4013.159 'git diff -r initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 159 - git diff -r initial..side # magic is (not used)

expecting success of 4013.160 'git diff --stat initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 160 - git diff --stat initial..side # magic is (not used)

expecting success of 4013.161 'git diff -r --stat initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 161 - git diff -r --stat initial..side # magic is (not used)

expecting success of 4013.162 'git diff initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 162 - git diff initial..side # magic is (not used)

expecting success of 4013.163 'git diff --patch-with-stat initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 163 - git diff --patch-with-stat initial..side # magic is (not used)

expecting success of 4013.164 'git diff --patch-with-raw initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 164 - git diff --patch-with-raw initial..side # magic is (not used)

expecting success of 4013.165 'git diff --patch-with-raw initial..side # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 165 - git diff --patch-with-raw initial..side # magic is noellipses

expecting success of 4013.166 'git diff --patch-with-stat -r initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 166 - git diff --patch-with-stat -r initial..side # magic is (not used)

expecting success of 4013.167 'git diff --patch-with-raw -r initial..side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 167 - git diff --patch-with-raw -r initial..side # magic is (not used)

expecting success of 4013.168 'git diff --patch-with-raw -r initial..side # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 168 - git diff --patch-with-raw -r initial..side # magic is noellipses

expecting success of 4013.169 'git diff --name-status dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 169 - git diff --name-status dir2 dir # magic is (not used)

expecting success of 4013.170 'git diff --no-index --name-status dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 170 - git diff --no-index --name-status dir2 dir # magic is (not used)

expecting success of 4013.171 'git diff --no-index --name-status -- dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 171 - git diff --no-index --name-status -- dir2 dir # magic is (not used)

expecting success of 4013.172 'git diff --no-index dir dir3 # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 172 - git diff --no-index dir dir3 # magic is (not used)

expecting success of 4013.173 'git diff master master^ side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 173 - git diff master master^ side # magic is (not used)

expecting success of 4013.174 'git diff --line-prefix=abc master master^ side # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 174 - git diff --line-prefix=abc master master^ side # magic is (not used)

expecting success of 4013.175 'git diff --dirstat master~1 master~2 # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 175 - git diff --dirstat master~1 master~2 # magic is (not used)

expecting success of 4013.176 'git diff --dirstat initial rearrange # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 176 - git diff --dirstat initial rearrange # magic is (not used)

expecting success of 4013.177 'git diff --dirstat-by-file initial rearrange # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 177 - git diff --dirstat-by-file initial rearrange # magic is (not used)

expecting success of 4013.178 'git diff --dirstat --cc master~1 master # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 178 - git diff --dirstat --cc master~1 master # magic is (not used)

expecting success of 4013.179 'git diff --raw initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 179 - git diff --raw initial # magic is (not used)

expecting success of 4013.180 'git diff --raw initial # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 180 - git diff --raw initial # magic is noellipses

expecting success of 4013.181 'git diff --raw --abbrev=4 initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 181 - git diff --raw --abbrev=4 initial # magic is (not used)

expecting success of 4013.182 'git diff --raw --abbrev=4 initial # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 182 - git diff --raw --abbrev=4 initial # magic is noellipses

expecting success of 4013.183 'git diff --raw --no-abbrev initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 183 - git diff --raw --no-abbrev initial # magic is (not used)

expecting success of 4013.184 'git diff --no-index --raw dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 184 - git diff --no-index --raw dir2 dir # magic is (not used)

expecting success of 4013.185 'git diff --no-index --raw dir2 dir # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 185 - git diff --no-index --raw dir2 dir # magic is noellipses

expecting success of 4013.186 'git diff --no-index --raw --abbrev=4 dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 186 - git diff --no-index --raw --abbrev=4 dir2 dir # magic is (not used)

expecting success of 4013.187 'git diff --no-index --raw --abbrev=4 dir2 dir # magic is noellipses': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 187 - git diff --no-index --raw --abbrev=4 dir2 dir # magic is noellipses

expecting success of 4013.188 'git diff --no-index --raw --no-abbrev dir2 dir # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 188 - git diff --no-index --raw --no-abbrev dir2 dir # magic is (not used)

expecting success of 4013.189 'git diff-tree --pretty --root --stat --compact-summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 189 - git diff-tree --pretty --root --stat --compact-summary initial # magic is (not used)

expecting success of 4013.190 'git diff-tree --pretty -R --root --stat --compact-summary initial # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 190 - git diff-tree --pretty -R --root --stat --compact-summary initial # magic is (not used)

expecting success of 4013.191 'git diff-tree --pretty note # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 191 - git diff-tree --pretty note # magic is (not used)

expecting success of 4013.192 'git diff-tree --pretty --notes note # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 192 - git diff-tree --pretty --notes note # magic is (not used)

expecting success of 4013.193 'git diff-tree --format=%N note # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 193 - git diff-tree --format=%N note # magic is (not used)

expecting success of 4013.194 'git diff-tree --stat --compact-summary initial mode # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 194 - git diff-tree --stat --compact-summary initial mode # magic is (not used)

expecting success of 4013.195 'git diff-tree -R --stat --compact-summary initial mode # magic is (not used)': 
		{
			echo "$ git $cmd"
			case "$magic" in
			"")
				GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
			noellipses)
				git $cmd ;;
			esac |
			sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
			    -e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
			echo "\$"
		} >"$actual" &&
		if test -f "$expect"
		then
			process_diffs "$actual" >actual &&
			process_diffs "$expect" >expect &&
			case $cmd in
			*format-patch* | *-stat*)
				test_cmp expect actual;;
			*)
				test_cmp expect actual;;
			esac &&
			rm -f "$actual" actual expect
		else
			# this is to help developing new tests.
			cp "$actual" "$expect"
			false
		fi
	
ok 195 - git diff-tree -R --stat --compact-summary initial mode # magic is (not used)

expecting success of 4013.196 'log -m matches pure log': 
	git log master >result &&
	process_diffs result >expected &&
	git log -m >result &&
	process_diffs result >actual &&
	test_cmp expected actual

ok 196 - log -m matches pure log

expecting success of 4013.197 'log --diff-merges=on matches --diff-merges=separate': 
	git log -p --diff-merges=separate master >result &&
	process_diffs result >expected &&
	git log -p --diff-merges=on master >result &&
	process_diffs result >actual &&
	test_cmp expected actual

ok 197 - log --diff-merges=on matches --diff-merges=separate

expecting success of 4013.198 'deny wrong log.diffMerges config': 
	test_config log.diffMerges wrong-value &&
	test_expect_code 128 git log

fatal: bad config variable 'log.diffmerges' in file '.git/config' at line 8
ok 198 - deny wrong log.diffMerges config

expecting success of 4013.199 'git config log.diffMerges first-parent': 
	git log -p --diff-merges=first-parent master >result &&
	process_diffs result >expected &&
	test_config log.diffMerges first-parent &&
	git log -p --diff-merges=on master >result &&
	process_diffs result >actual &&
	test_cmp expected actual

ok 199 - git config log.diffMerges first-parent

expecting success of 4013.200 'git config log.diffMerges first-parent vs -m': 
	git log -p --diff-merges=first-parent master >result &&
	process_diffs result >expected &&
	test_config log.diffMerges first-parent &&
	git log -p -m master >result &&
	process_diffs result >actual &&
	test_cmp expected actual

ok 200 - git config log.diffMerges first-parent vs -m

expecting success of 4013.201 'git diff-index -m': 
	rm -f file1 &&
	git diff-index HEAD >without-m &&
	lines_count=$(wc -l <without-m) &&
	git diff-index -m HEAD >with-m &&
	git restore file1 &&
	test_line_count = $((lines_count - 1)) with-m

ok 201 - git diff-index -m

expecting success of 4013.202 'log -S requires an argument': 
	test_must_fail git log -S

error: switch `S' requires a value
ok 202 - log -S requires an argument

expecting success of 4013.203 'diff --cached on unborn branch': 
	echo ref: refs/heads/unborn >.git/HEAD &&
	git diff --cached >result &&
	process_diffs result >actual &&
	process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--cached" >expected &&
	test_cmp expected actual

ok 203 - diff --cached on unborn branch

expecting success of 4013.204 'diff --cached -- file on unborn branch': 
	git diff --cached -- file0 >result &&
	process_diffs result >actual &&
	process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--cached_--_file0" >expected &&
	test_cmp expected actual

ok 204 - diff --cached -- file on unborn branch

expecting success of 4013.205 'diff --line-prefix with spaces': 
	git diff --line-prefix="| | | " --cached -- file0 >result &&
	process_diffs result >actual &&
	process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--line-prefix_--cached_--_file0" >expected &&
	test_cmp expected actual

ok 205 - diff --line-prefix with spaces

expecting success of 4013.206 'diff-tree --stdin with log formatting': 
	cat >expect <<-\EOF &&
	Side
	Third
	Second
	EOF
	git rev-list master | git diff-tree --stdin --format=%s -s >actual &&
	test_cmp expect actual

ok 206 - diff-tree --stdin with log formatting

expecting success of 4013.207 'diff-tree --stdin with pathspec': 
	cat >expect <<-EOF &&
	Third

	dir/sub
	Second

	dir/sub
	EOF
	git rev-list master^ |
	git diff-tree -r --stdin --name-only --format=%s dir >actual &&
	test_cmp expect actual

ok 207 - diff-tree --stdin with pathspec

expecting success of 4013.208 'show A B ... -- <pathspec>': 
	# side touches dir/sub, file0, and file3
	# master^ touches dir/sub, and file1
	# master^^ touches dir/sub, file0, and file2
	git show --name-only --format="<%s>" side master^ master^^ -- dir >actual &&
	cat >expect <<-\EOF &&
	<Side>

	dir/sub
	<Third>

	dir/sub
	<Second>

	dir/sub
	EOF
	test_cmp expect actual

ok 208 - show A B ... -- <pathspec>

expecting success of 4013.209 'diff -I<regex>: setup': 
	git checkout master &&
	test_seq 50 >file0 &&
	git commit -m "Set up -I<regex> test file" file0 &&
	test_seq 50 | sed -e "s/13/ten and three/" -e "/7\$/d" >file0 &&
	echo >>file0

Switched to branch 'master'
[master 4362559] Set up -I<regex> test file
 Author: A U Thor <author@example.com>
 1 file changed, 44 insertions(+), 3 deletions(-)
ok 209 - diff -I<regex>: setup

expecting success of 4013.210 'diff -I<regex>': 
	git diff --ignore-blank-lines -I"ten.*e" -I"^[124-9]" >actual &&
	cat >expect <<-\EOF &&
	diff --git a/file0 b/file0
	--- a/file0
	+++ b/file0
	@@ -34,7 +31,6 @@
	 34
	 35
	 36
	-37
	 38
	 39
	 40
	EOF
	compare_diff_patch expect actual

ok 210 - diff -I<regex>

expecting success of 4013.211 'diff -I<regex> --stat': 
	git diff --stat --ignore-blank-lines -I"ten.*e" -I"^[124-9]" >actual &&
	cat >expect <<-\EOF &&
	 file0 | 1 -
	 1 file changed, 1 deletion(-)
	EOF
	test_cmp expect actual

ok 211 - diff -I<regex> --stat

expecting success of 4013.212 'diff -I<regex>: detect malformed regex': 
	test_expect_code 129 git diff --ignore-matching-lines="^[124-9" 2>error &&
	test_i18ngrep "invalid regex given to -I: " error

error: invalid regex given to -I: '^[124-9'
ok 212 - diff -I<regex>: detect malformed regex

# passed all 212 test(s)
1..212
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4014-format-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4014-format-patch/.git/
expecting success of 4014.1 'setup': 
	test_write_lines 1 2 3 4 5 6 7 8 9 10 >file &&
	cat file >elif &&
	git add file elif &&
	test_tick &&
	git commit -m Initial &&
	git checkout -b side &&

	test_write_lines 1 2 5 6 A B C 7 8 9 10 >file &&
	test_chmod +x elif &&
	test_tick &&
	git commit -m "Side changes #1" &&

	test_write_lines D E F >>file &&
	git update-index file &&
	test_tick &&
	git commit -m "Side changes #2" &&
	git tag C2 &&

	test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >file &&
	git update-index file &&
	test_tick &&
	git commit -m "Side changes #3 with \\n backslash-n in it." &&

	git checkout main &&
	git diff-tree -p C2 >patch &&
	git apply --index <patch &&
	test_tick &&
	git commit -m "Main accepts moral equivalent of #2" &&

	git checkout side &&
	git checkout -b patchid &&
	test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >file2 &&
	test_write_lines 1 2 3 A 4 B C 7 8 9 10 D E F 5 6 >file3 &&
	test_write_lines 8 9 10 >file &&
	git add file file2 file3 &&
	test_tick &&
	git commit -m "patchid 1" &&
	test_write_lines 4 A B 7 8 9 10 >file2 &&
	test_write_lines 8 9 10 5 6 >file3 &&
	git add file2 file3 &&
	test_tick &&
	git commit -m "patchid 2" &&
	test_write_lines 10 5 6 >file &&
	git add file &&
	test_tick &&
	git commit -m "patchid 3" &&

	git checkout main

[main (root-commit) e27066e] Initial
 Author: A U Thor <author@example.com>
 2 files changed, 20 insertions(+)
 create mode 100644 elif
 create mode 100644 file
Switched to a new branch 'side'
[side 1135adf] Side changes #1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 elif
[side fd00575] Side changes #2
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+), 2 deletions(-)
[side 18ed22a] Side changes #3 with \n backslash-n in it.
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+), 2 deletions(-)
Switched to branch 'main'
[main 333d5cb] Main accepts moral equivalent of #2
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+), 2 deletions(-)
Switched to branch 'side'
Switched to a new branch 'patchid'
[patchid 866b619] patchid 1
 Author: A U Thor <author@example.com>
 3 files changed, 32 insertions(+), 13 deletions(-)
 create mode 100644 file2
 create mode 100644 file3
[patchid b0e76a3] patchid 2
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 21 deletions(-)
[patchid e905b62] patchid 3
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Switched to branch 'main'
ok 1 - setup

expecting success of 4014.2 'format-patch --ignore-if-in-upstream': 
	git format-patch --stdout main..side >patch0 &&
	grep "^From " patch0 >from0 &&
	test_line_count = 3 from0

ok 2 - format-patch --ignore-if-in-upstream

expecting success of 4014.3 'format-patch --ignore-if-in-upstream': 
	git format-patch --stdout \
		--ignore-if-in-upstream main..side >patch1 &&
	grep "^From " patch1 >from1 &&
	test_line_count = 2 from1

ok 3 - format-patch --ignore-if-in-upstream

expecting success of 4014.4 'format-patch --ignore-if-in-upstream handles tags': 
	git tag -a v1 -m tag side &&
	git tag -a v2 -m tag main &&
	git format-patch --stdout --ignore-if-in-upstream v2..v1 >patch1 &&
	grep "^From " patch1 >from1 &&
	test_line_count = 2 from1

ok 4 - format-patch --ignore-if-in-upstream handles tags

expecting success of 4014.5 'format-patch doesn't consider merge commits': 
	git checkout -b feature main &&
	echo "Another line" >>file &&
	test_tick &&
	git commit -am "Feature branch change #1" &&
	echo "Yet another line" >>file &&
	test_tick &&
	git commit -am "Feature branch change #2" &&
	git checkout -b merger main &&
	test_tick &&
	git merge --no-ff feature &&
	git format-patch -3 --stdout >patch &&
	grep "^From " patch >from &&
	test_line_count = 3 from

Switched to a new branch 'feature'
[feature f4bed5a] Feature branch change #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[feature cd3adbe] Feature branch change #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'merger'
Merge made by the 'ort' strategy.
 file | 2 ++
 1 file changed, 2 insertions(+)
ok 5 - format-patch doesn't consider merge commits

expecting success of 4014.6 'format-patch result applies': 
	git checkout -b rebuild-0 main &&
	git am -3 patch0 &&
	git rev-list main.. >list &&
	test_line_count = 2 list

Switched to a new branch 'rebuild-0'
Applying: Side changes #1
Applying: Side changes #2
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
7d3fd2d Side changes #1
virtual Side changes #2
found 1 common ancestor:
virtual 8359489d93991065cdaa748bd96dcb831b3d60ca
No changes -- Patch already applied.
Applying: Side changes #3 with \n backslash-n in it.
ok 6 - format-patch result applies

expecting success of 4014.7 'format-patch --ignore-if-in-upstream result applies': 
	git checkout -b rebuild-1 main &&
	git am -3 patch1 &&
	git rev-list main.. >list &&
	test_line_count = 2 list

Switched to a new branch 'rebuild-1'
Applying: Side changes #1
Applying: Side changes #3 with \n backslash-n in it.
ok 7 - format-patch --ignore-if-in-upstream result applies

expecting success of 4014.8 'commit did not screw up the log message': 
	git cat-file commit side >actual &&
	grep "^Side .* with .* backslash-n" actual

Side changes #3 with \n backslash-n in it.
ok 8 - commit did not screw up the log message

expecting success of 4014.9 'format-patch did not screw up the log message': 
	grep "^Subject: .*Side changes #3 with .* backslash-n" patch0 &&
	grep "^Subject: .*Side changes #3 with .* backslash-n" patch1

Subject: [PATCH 3/3] Side changes #3 with \n backslash-n in it.
Subject: [PATCH 2/2] Side changes #3 with \n backslash-n in it.
ok 9 - format-patch did not screw up the log message

expecting success of 4014.10 'replay did not screw up the log message': 
	git cat-file commit rebuild-1 >actual &&
	grep "^Side .* with .* backslash-n" actual

Side changes #3 with \n backslash-n in it.
ok 10 - replay did not screw up the log message

expecting success of 4014.11 'extra headers': 
	git config format.headers "To: R E Cipient <rcipient@example.com>
" &&
	git config --add format.headers "Cc: S E Cipient <scipient@example.com>
" &&
	git format-patch --stdout main..side >patch2 &&
	sed -e "/^\$/q" patch2 >hdrs2 &&
	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs2 &&
	grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs2

To: R E Cipient <rcipient@example.com>
Cc: S E Cipient <scipient@example.com>
ok 11 - extra headers

expecting success of 4014.12 'extra headers without newlines': 
	git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" &&
	git config --add format.headers "Cc: S E Cipient <scipient@example.com>" &&
	git format-patch --stdout main..side >patch3 &&
	sed -e "/^\$/q" patch3 >hdrs3 &&
	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs3 &&
	grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs3

To: R E Cipient <rcipient@example.com>
Cc: S E Cipient <scipient@example.com>
ok 12 - extra headers without newlines

expecting success of 4014.13 'extra headers with multiple To:s': 
	git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" &&
	git config --add format.headers "To: S E Cipient <scipient@example.com>" &&
	git format-patch --stdout main..side >patch4 &&
	sed -e "/^\$/q" patch4 >hdrs4 &&
	grep "^To: R E Cipient <rcipient@example.com>,\$" hdrs4 &&
	grep "^ *S E Cipient <scipient@example.com>\$" hdrs4

To: R E Cipient <rcipient@example.com>,
    S E Cipient <scipient@example.com>
ok 13 - extra headers with multiple To:s

expecting success of 4014.14 'additional command line cc (ascii)': 
	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
	git format-patch --cc="S E Cipient <scipient@example.com>" --stdout main..side >patch5 &&
	sed -e "/^\$/q" patch5 >hdrs5 &&
	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 &&
	grep "^ *S E Cipient <scipient@example.com>\$" hdrs5

Cc: R E Cipient <rcipient@example.com>,
    S E Cipient <scipient@example.com>
ok 14 - additional command line cc (ascii)

checking known breakage of 4014.15 'additional command line cc (rfc822)': 
	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
	git format-patch --cc="S. E. Cipient <scipient@example.com>" --stdout main..side >patch5 &&
	sed -e "/^\$/q" patch5 >hdrs5 &&
	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 &&
	grep "^ *\"S. E. Cipient\" <scipient@example.com>\$" hdrs5

Cc: R E Cipient <rcipient@example.com>,
not ok 15 - additional command line cc (rfc822) # TODO known breakage

expecting success of 4014.16 'command line headers': 
	git config --unset-all format.headers &&
	git format-patch --add-header="Cc: R E Cipient <rcipient@example.com>" --stdout main..side >patch6 &&
	sed -e "/^\$/q" patch6 >hdrs6 &&
	grep "^Cc: R E Cipient <rcipient@example.com>\$" hdrs6

Cc: R E Cipient <rcipient@example.com>
ok 16 - command line headers

expecting success of 4014.17 'configuration headers and command line headers': 
	git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" &&
	git format-patch --add-header="Cc: S E Cipient <scipient@example.com>" --stdout main..side >patch7 &&
	sed -e "/^\$/q" patch7 >hdrs7 &&
	grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs7 &&
	grep "^ *S E Cipient <scipient@example.com>\$" hdrs7

Cc: R E Cipient <rcipient@example.com>,
    S E Cipient <scipient@example.com>
ok 17 - configuration headers and command line headers

expecting success of 4014.18 'command line To: header (ascii)': 
	git config --unset-all format.headers &&
	git format-patch --to="R E Cipient <rcipient@example.com>" --stdout main..side >patch8 &&
	sed -e "/^\$/q" patch8 >hdrs8 &&
	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs8

To: R E Cipient <rcipient@example.com>
ok 18 - command line To: header (ascii)

checking known breakage of 4014.19 'command line To: header (rfc822)': 
	git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout main..side >patch8 &&
	sed -e "/^\$/q" patch8 >hdrs8 &&
	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs8

not ok 19 - command line To: header (rfc822) # TODO known breakage

checking known breakage of 4014.20 'command line To: header (rfc2047)': 
	git format-patch --to="R Ä Cipient <rcipient@example.com>" --stdout main..side >patch8 &&
	sed -e "/^\$/q" patch8 >hdrs8 &&
	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs8

not ok 20 - command line To: header (rfc2047) # TODO known breakage

expecting success of 4014.21 'configuration To: header (ascii)': 
	git config format.to "R E Cipient <rcipient@example.com>" &&
	git format-patch --stdout main..side >patch9 &&
	sed -e "/^\$/q" patch9 >hdrs9 &&
	grep "^To: R E Cipient <rcipient@example.com>\$" hdrs9

To: R E Cipient <rcipient@example.com>
ok 21 - configuration To: header (ascii)

checking known breakage of 4014.22 'configuration To: header (rfc822)': 
	git config format.to "R. E. Cipient <rcipient@example.com>" &&
	git format-patch --stdout main..side >patch9 &&
	sed -e "/^\$/q" patch9 >hdrs9 &&
	grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs9

not ok 22 - configuration To: header (rfc822) # TODO known breakage

checking known breakage of 4014.23 'configuration To: header (rfc2047)': 
	git config format.to "R Ä Cipient <rcipient@example.com>" &&
	git format-patch --stdout main..side >patch9 &&
	sed -e "/^\$/q" patch9 >hdrs9 &&
	grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs9

not ok 23 - configuration To: header (rfc2047) # TODO known breakage

expecting success of 4014.24 'format.from=false': 
	git -c format.from=false format-patch --stdout main..side >patch &&
	sed -e "/^\$/q" patch >hdrs &&
	check_patch patch &&
	! grep "^From: C O Mitter <committer@example.com>\$" hdrs

From: A U Thor <author@example.com>
From: A U Thor <author@example.com>
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Date: Thu, 7 Apr 2005 15:15:13 -0700
Date: Thu, 7 Apr 2005 15:16:13 -0700
Subject: [PATCH 1/3] Side changes #1
Subject: [PATCH 2/3] Side changes #2
Subject: [PATCH 3/3] Side changes #3 with \n backslash-n in it.
ok 24 - format.from=false

expecting success of 4014.25 'format.from=true': 
	git -c format.from=true format-patch --stdout main..side >patch &&
	sed -e "/^\$/q" patch >hdrs &&
	check_patch hdrs &&
	grep "^From: C O Mitter <committer@example.com>\$" hdrs

From: C O Mitter <committer@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
From: C O Mitter <committer@example.com>
ok 25 - format.from=true

expecting success of 4014.26 'format.from with address': 
	git -c format.from="F R Om <from@example.com>" format-patch --stdout main..side >patch &&
	sed -e "/^\$/q" patch >hdrs &&
	check_patch hdrs &&
	grep "^From: F R Om <from@example.com>\$" hdrs

From: F R Om <from@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
From: F R Om <from@example.com>
ok 26 - format.from with address

expecting success of 4014.27 '--no-from overrides format.from': 
	git -c format.from="F R Om <from@example.com>" format-patch --no-from --stdout main..side >patch &&
	sed -e "/^\$/q" patch >hdrs &&
	check_patch hdrs &&
	! grep "^From: F R Om <from@example.com>\$" hdrs

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
ok 27 - --no-from overrides format.from

expecting success of 4014.28 '--from overrides format.from': 
	git -c format.from="F R Om <from@example.com>" format-patch --from --stdout main..side >patch &&
	sed -e "/^\$/q" patch >hdrs &&
	check_patch hdrs &&
	! grep "^From: F R Om <from@example.com>\$" hdrs

From: C O Mitter <committer@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
ok 28 - --from overrides format.from

expecting success of 4014.29 '--no-to overrides config.to': 
	git config --replace-all format.to \
		"R E Cipient <rcipient@example.com>" &&
	git format-patch --no-to --stdout main..side >patch10 &&
	sed -e "/^\$/q" patch10 >hdrs10 &&
	check_patch hdrs10 &&
	! grep "^To: R E Cipient <rcipient@example.com>\$" hdrs10

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
ok 29 - --no-to overrides config.to

expecting success of 4014.30 '--no-to and --to replaces config.to': 
	git config --replace-all format.to \
		"Someone <someone@out.there>" &&
	git format-patch --no-to --to="Someone Else <else@out.there>" \
		--stdout main..side >patch11 &&
	sed -e "/^\$/q" patch11 >hdrs11 &&
	check_patch hdrs11 &&
	! grep "^To: Someone <someone@out.there>\$" hdrs11 &&
	grep "^To: Someone Else <else@out.there>\$" hdrs11

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
To: Someone Else <else@out.there>
ok 30 - --no-to and --to replaces config.to

expecting success of 4014.31 '--no-cc overrides config.cc': 
	git config --replace-all format.cc \
		"C E Cipient <rcipient@example.com>" &&
	git format-patch --no-cc --stdout main..side >patch12 &&
	sed -e "/^\$/q" patch12 >hdrs12 &&
	check_patch hdrs12 &&
	! grep "^Cc: C E Cipient <rcipient@example.com>\$" hdrs12

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
ok 31 - --no-cc overrides config.cc

expecting success of 4014.32 '--no-add-header overrides config.headers': 
	git config --replace-all format.headers \
		"Header1: B E Cipient <rcipient@example.com>" &&
	git format-patch --no-add-header --stdout main..side >patch13 &&
	sed -e "/^\$/q" patch13 >hdrs13 &&
	check_patch hdrs13 &&
	! grep "^Header1: B E Cipient <rcipient@example.com>\$" hdrs13

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 1/3] Side changes #1
ok 32 - --no-add-header overrides config.headers

expecting success of 4014.33 'multiple files': 
	rm -rf patches/ &&
	git checkout side &&
	git format-patch -o patches/ main &&
	ls patches/0001-Side-changes-1.patch patches/0002-Side-changes-2.patch patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch

Switched to branch 'side'
patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
ok 33 - multiple files

expecting success of 4014.34 'filename length limit': 
	test_when_finished "rm -f 000*" &&
	rm -rf 000[1-9]-*.patch &&
	for len in 15 25 35
	do
		git format-patch --filename-max-length=$len -3 side &&
		max=$(
			for patch in 000[1-9]-*.patch
			do
				echo "$patch" | wc -c || exit 1
			done |
			sort -nr |
			head -n 1
		) &&
		test $max -le $len || return 1
	done

0001-Sid.patch
0002-Sid.patch
0003-Sid.patch
0001-Side-changes-.patch
0002-Side-changes-.patch
0003-Side-changes-.patch
0001-Side-changes-1.patch
0002-Side-changes-2.patch
0003-Side-changes-3-with-n-b.patch
ok 34 - filename length limit

expecting success of 4014.35 'filename length limit from config': 
	test_when_finished "rm -f 000*" &&
	rm -rf 000[1-9]-*.patch &&
	for len in 15 25 35
	do
		git -c format.filenameMaxLength=$len format-patch -3 side &&
		max=$(
			for patch in 000[1-9]-*.patch
			do
				echo "$patch" | wc -c || exit 1
			done |
			sort -nr |
			head -n 1
		) &&
		test $max -le $len || return 1
	done

0001-Sid.patch
0002-Sid.patch
0003-Sid.patch
0001-Side-changes-.patch
0002-Side-changes-.patch
0003-Side-changes-.patch
0001-Side-changes-1.patch
0002-Side-changes-2.patch
0003-Side-changes-3-with-n-b.patch
ok 35 - filename length limit from config

expecting success of 4014.36 'filename limit applies only to basename': 
	test_when_finished "rm -rf patches/" &&
	rm -rf patches/ &&
	for len in 15 25 35
	do
		git format-patch -o patches --filename-max-length=$len -3 side &&
		max=$(
			for patch in patches/000[1-9]-*.patch
			do
				echo "${patch#patches/}" | wc -c || exit 1
			done |
			sort -nr |
			head -n 1
		) &&
		test $max -le $len || return 1
	done

patches/0001-Sid.patch
patches/0002-Sid.patch
patches/0003-Sid.patch
patches/0001-Side-changes-.patch
patches/0002-Side-changes-.patch
patches/0003-Side-changes-.patch
patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-b.patch
ok 36 - filename limit applies only to basename

expecting success of 4014.37 'reroll count': 
	rm -fr patches &&
	git format-patch -o patches --cover-letter --reroll-count 4 main..side >list &&
	! grep -v "^patches/v4-000[0-3]-" list &&
	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
	! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects

ok 37 - reroll count

expecting success of 4014.38 'reroll count (-v)': 
	rm -fr patches &&
	git format-patch -o patches --cover-letter -v4 main..side >list &&
	! grep -v "^patches/v4-000[0-3]-" list &&
	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
	! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects

ok 38 - reroll count (-v)

expecting success of 4014.39 'reroll count (-v) with a fractional number': 
	rm -fr patches &&
	git format-patch -o patches --cover-letter -v4.4 main..side >list &&
	! grep -v "^patches/v4.4-000[0-3]-" list &&
	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
	! grep -v "^Subject: \[PATCH v4.4 [0-3]/3\] " subjects

ok 39 - reroll count (-v) with a fractional number

expecting success of 4014.40 'reroll (-v) count with a non number': 
	rm -fr patches &&
	git format-patch -o patches --cover-letter -v4rev2 main..side >list &&
	! grep -v "^patches/v4rev2-000[0-3]-" list &&
	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
	! grep -v "^Subject: \[PATCH v4rev2 [0-3]/3\] " subjects

ok 40 - reroll (-v) count with a non number

expecting success of 4014.41 'reroll (-v) count with a non-pathname character': 
	rm -fr patches &&
	git format-patch -o patches --cover-letter -v4---..././../--1/.2//  main..side >list &&
	! grep -v "patches/v4-\.-\.-\.-1-\.2-000[0-3]-" list &&
	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
	! grep -v "^Subject: \[PATCH v4---\.\.\./\./\.\./--1/\.2// [0-3]/3\] " subjects

ok 41 - reroll (-v) count with a non-pathname character

expecting success of 4014.42 'no threading': 
	git checkout side &&
	check_threading expect.no-threading main

Already on 'side'
ok 42 - no threading

expecting success of 4014.43 'thread': 
	check_threading expect.thread --thread main

ok 43 - thread

expecting success of 4014.44 'thread in-reply-to': 
	check_threading expect.in-reply-to --in-reply-to="<test.message>" \
		--thread main

ok 44 - thread in-reply-to

expecting success of 4014.45 'thread cover-letter': 
	check_threading expect.cover-letter --cover-letter --thread main

ok 45 - thread cover-letter

expecting success of 4014.46 'thread cover-letter in-reply-to': 
	check_threading expect.cl-irt --cover-letter \
		--in-reply-to="<test.message>" --thread main

ok 46 - thread cover-letter in-reply-to

expecting success of 4014.47 'thread explicit shallow': 
	check_threading expect.cl-irt --cover-letter \
		--in-reply-to="<test.message>" --thread=shallow main

ok 47 - thread explicit shallow

expecting success of 4014.48 'thread deep': 
	check_threading expect.deep --thread=deep main

ok 48 - thread deep

expecting success of 4014.49 'thread deep in-reply-to': 
	check_threading expect.deep-irt  --thread=deep \
		--in-reply-to="<test.message>" main

ok 49 - thread deep in-reply-to

expecting success of 4014.50 'thread deep cover-letter': 
	check_threading expect.deep-cl --cover-letter --thread=deep main

ok 50 - thread deep cover-letter

expecting success of 4014.51 'thread deep cover-letter in-reply-to': 
	check_threading expect.deep-cl-irt --cover-letter \
		--in-reply-to="<test.message>" --thread=deep main

ok 51 - thread deep cover-letter in-reply-to

expecting success of 4014.52 'thread via config': 
	test_config format.thread true &&
	check_threading expect.thread main

ok 52 - thread via config

expecting success of 4014.53 'thread deep via config': 
	test_config format.thread deep &&
	check_threading expect.deep main

ok 53 - thread deep via config

expecting success of 4014.54 'thread config + override': 
	test_config format.thread deep &&
	check_threading expect.thread --thread main

ok 54 - thread config + override

expecting success of 4014.55 'thread config + --no-thread': 
	test_config format.thread deep &&
	check_threading expect.no-threading --no-thread main

ok 55 - thread config + --no-thread

expecting success of 4014.56 'excessive subject': 
	rm -rf patches/ &&
	git checkout side &&
	before=$(git hash-object file) &&
	before=$(git rev-parse --short $before) &&
	test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >>file &&
	after=$(git hash-object file) &&
	after=$(git rev-parse --short $after) &&
	git update-index file &&
	git commit -m "This is an excessively long subject line for a message due to the habit some projects have of not having a short, one-line subject at the start of the commit message, but rather sticking a whole paragraph right at the start as the only thing in the commit message. It had better not become the filename for the patch." &&
	git format-patch -o patches/ main..side &&
	ls patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch

Already on 'side'
[side 24e36c3] This is an excessively long subject line for a message due to the habit some projects have of not having a short, one-line subject at the start of the commit message, but rather sticking a whole paragraph right at the start as the only thing in the commit message. It had better not become the filename for the patch.
 Author: A U Thor <author@example.com>
 1 file changed, 16 insertions(+)
patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
ok 56 - excessive subject

expecting success of 4014.57 'failure to write cover-letter aborts gracefully': 
	test_when_finished "rmdir 0000-cover-letter.patch" &&
	mkdir 0000-cover-letter.patch &&
	test_must_fail git format-patch --no-renames --cover-letter -1

error: cannot open patch file ./0000-cover-letter.patch: Is a directory
fatal: failed to create cover-letter file
0000-cover-letter.patch
ok 57 - failure to write cover-letter aborts gracefully

expecting success of 4014.58 'cover-letter inherits diff options': 
	git mv file foo &&
	git commit -m foo &&
	git format-patch --no-renames --cover-letter -1 &&
	check_patch 0000-cover-letter.patch &&
	! grep "file => foo .* 0 *\$" 0000-cover-letter.patch &&
	git format-patch --cover-letter -1 -M &&
	grep "file => foo .* 0 *\$" 0000-cover-letter.patch

[side fdb9fcf] foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => foo (100%)
0000-cover-letter.patch
0001-foo.patch
From: C O Mitter <committer@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 0/1] *** SUBJECT HERE ***
0000-cover-letter.patch
0001-foo.patch
 file => foo | 0
ok 58 - cover-letter inherits diff options

expecting success of 4014.59 'shortlog of cover-letter wraps overly-long onelines': 
	git format-patch --cover-letter -2 &&
	sed -e "1,/A U Thor/d" -e "/^\$/q" 0000-cover-letter.patch >output &&
	test_cmp expect output

0000-cover-letter.patch
0001-This-is-an-excessively-long-subject-line-for-a-messa.patch
0002-foo.patch
ok 59 - shortlog of cover-letter wraps overly-long onelines

expecting success of 4014.60 'format-patch respects -U': 
	git format-patch -U4 -2 &&
	sed -e "1,/^diff/d" -e "/^+5/q" \
		<0001-This-is-an-excessively-long-subject-line-for-a-messa.patch \
		>output &&
	test_cmp expect output

0001-This-is-an-excessively-long-subject-line-for-a-messa.patch
0002-foo.patch
ok 60 - format-patch respects -U

expecting success of 4014.61 'format-patch -p suppresses stat': 
	git format-patch -p -2 &&
	sed -e "1,/^\$/d" -e "/^+5/q" 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch >output &&
	test_cmp expect output

0001-This-is-an-excessively-long-subject-line-for-a-messa.patch
0002-foo.patch
ok 61 - format-patch -p suppresses stat

expecting success of 4014.62 'format-patch from a subdirectory (1)': 
	filename=$(
		rm -rf sub &&
		mkdir -p sub/dir &&
		cd sub/dir &&
		git format-patch -1
	) &&
	case "$filename" in
	0*)
		;; # ok
	*)
		echo "Oops? $filename"
		false
		;;
	esac &&
	test -f "$filename"

ok 62 - format-patch from a subdirectory (1)

expecting success of 4014.63 'format-patch from a subdirectory (2)': 
	filename=$(
		rm -rf sub &&
		mkdir -p sub/dir &&
		cd sub/dir &&
		git format-patch -1 -o ..
	) &&
	case "$filename" in
	../0*)
		;; # ok
	*)
		echo "Oops? $filename"
		false
		;;
	esac &&
	basename=$(expr "$filename" : ".*/\(.*\)") &&
	test -f "sub/$basename"

ok 63 - format-patch from a subdirectory (2)

expecting success of 4014.64 'format-patch from a subdirectory (3)': 
	rm -f 0* &&
	filename=$(
		rm -rf sub &&
		mkdir -p sub/dir &&
		cd sub/dir &&
		git format-patch -1 -o "$TRASH_DIRECTORY"
	) &&
	basename=$(expr "$filename" : ".*/\(.*\)") &&
	test -f "$basename"

ok 64 - format-patch from a subdirectory (3)

expecting success of 4014.65 'format-patch --in-reply-to': 
	git format-patch -1 --stdout --in-reply-to "baz@foo.bar" >patch8 &&
	grep "^In-Reply-To: <baz@foo.bar>" patch8 &&
	grep "^References: <baz@foo.bar>" patch8

In-Reply-To: <baz@foo.bar>
References: <baz@foo.bar>
ok 65 - format-patch --in-reply-to

expecting success of 4014.66 'format-patch --signoff': 
	git format-patch -1 --signoff --stdout >out &&
	grep "^Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" out

Signed-off-by: C O Mitter <committer@example.com>
ok 66 - format-patch --signoff

expecting success of 4014.67 'format-patch --notes --signoff': 
	git notes --ref test add -m "test message" HEAD &&
	git format-patch -1 --signoff --stdout --notes=test >out &&
	# Three dashes must come after S-o-b
	! sed "/^Signed-off-by: /q" out | grep "test message" &&
	sed "1,/^Signed-off-by: /d" out | grep "test message" &&
	# Notes message must come after three dashes
	! sed "/^---$/q" out | grep "test message" &&
	sed "1,/^---$/d" out | grep "test message"

    test message
    test message
ok 67 - format-patch --notes --signoff

expecting success of 4014.68 'format-patch notes output control': 
	git notes add -m "notes config message" HEAD &&
	test_when_finished git notes remove HEAD &&

	git format-patch -1 --stdout >out &&
	! grep "notes config message" out &&
	git format-patch -1 --stdout --notes >out &&
	grep "notes config message" out &&
	git format-patch -1 --stdout --no-notes >out &&
	! grep "notes config message" out &&
	git format-patch -1 --stdout --notes --no-notes >out &&
	! grep "notes config message" out &&
	git format-patch -1 --stdout --no-notes --notes >out &&
	grep "notes config message" out &&

	test_config format.notes true &&
	git format-patch -1 --stdout >out &&
	grep "notes config message" out &&
	git format-patch -1 --stdout --notes >out &&
	grep "notes config message" out &&
	git format-patch -1 --stdout --no-notes >out &&
	! grep "notes config message" out &&
	git format-patch -1 --stdout --notes --no-notes >out &&
	! grep "notes config message" out &&
	git format-patch -1 --stdout --no-notes --notes >out &&
	grep "notes config message" out

    notes config message
    notes config message
    notes config message
    notes config message
    notes config message
Removing note for object HEAD
ok 68 - format-patch notes output control

expecting success of 4014.69 'format-patch with multiple notes refs': 
	git notes --ref note1 add -m "this is note 1" HEAD &&
	test_when_finished git notes --ref note1 remove HEAD &&
	git notes --ref note2 add -m "this is note 2" HEAD &&
	test_when_finished git notes --ref note2 remove HEAD &&

	git format-patch -1 --stdout >out &&
	! grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git format-patch -1 --stdout --notes=note1 >out &&
	grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git format-patch -1 --stdout --notes=note2 >out &&
	! grep "this is note 1" out &&
	grep "this is note 2" out &&
	git format-patch -1 --stdout --notes=note1 --notes=note2 >out &&
	grep "this is note 1" out &&
	grep "this is note 2" out &&

	test_config format.notes note1 &&
	git format-patch -1 --stdout >out &&
	grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git format-patch -1 --stdout --no-notes >out &&
	! grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git format-patch -1 --stdout --notes=note2 >out &&
	grep "this is note 1" out &&
	grep "this is note 2" out &&
	git format-patch -1 --stdout --no-notes --notes=note2 >out &&
	! grep "this is note 1" out &&
	grep "this is note 2" out &&

	git config --add format.notes note2 &&
	git format-patch -1 --stdout >out &&
	grep "this is note 1" out &&
	grep "this is note 2" out &&
	git format-patch -1 --stdout --no-notes >out &&
	! grep "this is note 1" out &&
	! grep "this is note 2" out

    this is note 1
    this is note 2
    this is note 1
    this is note 2
    this is note 1
    this is note 1
    this is note 2
    this is note 2
    this is note 1
    this is note 2
Removing note for object HEAD
Removing note for object HEAD
ok 69 - format-patch with multiple notes refs

expecting success of 4014.70 'format-patch with multiple notes refs in config': 
	test_when_finished "test_unconfig format.notes" &&

	git notes --ref note1 add -m "this is note 1" HEAD &&
	test_when_finished git notes --ref note1 remove HEAD &&
	git notes --ref note2 add -m "this is note 2" HEAD &&
	test_when_finished git notes --ref note2 remove HEAD &&

	git config format.notes note1 &&
	git format-patch -1 --stdout >out &&
	grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git config format.notes note2 &&
	git format-patch -1 --stdout >out &&
	! grep "this is note 1" out &&
	grep "this is note 2" out &&
	git config --add format.notes note1 &&
	git format-patch -1 --stdout >out &&
	grep "this is note 1" out &&
	grep "this is note 2" out &&

	git config --replace-all format.notes note1 &&
	git config --add format.notes false &&
	git format-patch -1 --stdout >out &&
	! grep "this is note 1" out &&
	! grep "this is note 2" out &&
	git config --add format.notes note2 &&
	git format-patch -1 --stdout >out &&
	! grep "this is note 1" out &&
	grep "this is note 2" out

    this is note 1
    this is note 2
    this is note 1
    this is note 2
    this is note 2
Removing note for object HEAD
Removing note for object HEAD
ok 70 - format-patch with multiple notes refs in config

expecting success of 4014.71 'options no longer allowed for format-patch': 
	test_must_fail git format-patch --name-only 2>output &&
	test_cmp expect.name-only output &&
	test_must_fail git format-patch --name-status 2>output &&
	test_cmp expect.name-status output &&
	test_must_fail git format-patch --check 2>output &&
	test_cmp expect.check output

ok 71 - options no longer allowed for format-patch

expecting success of 4014.72 'format-patch --numstat should produce a patch': 
	git format-patch --numstat --stdout main..side >output &&
	grep "^diff --git a/" output >diff &&
	test_line_count = 5 diff

ok 72 - format-patch --numstat should produce a patch

expecting success of 4014.73 'format-patch -- <path>': 
	rm -f *.patch &&
	git checkout -b pathspec main &&

	echo file_a 1 >file_a &&
	echo file_b 1 >file_b &&
	git add file_a file_b &&
	git commit -m pathspec_initial &&

	echo file_a 2 >>file_a &&
	git add file_a &&
	git commit -m pathspec_a &&

	echo file_b 2 >>file_b &&
	git add file_b &&
	git commit -m pathspec_b &&

	echo file_a 3 >>file_a &&
	echo file_b 3 >>file_b &&
	git add file_a file_b &&
	git commit -m pathspec_ab &&

	cat >expect <<-\EOF &&
	0001-pathspec_initial.patch
	0002-pathspec_a.patch
	0003-pathspec_ab.patch
	EOF

	git format-patch main..pathspec -- file_a >output &&
	test_cmp expect output &&
	! grep file_b *.patch

Switched to a new branch 'pathspec'
[pathspec b23a704] pathspec_initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file_a
 create mode 100644 file_b
[pathspec c8d92ea] pathspec_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[pathspec 0040a8b] pathspec_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[pathspec f56c6d0] pathspec_ab
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
ok 73 - format-patch -- <path>

expecting success of 4014.74 'format-patch --ignore-if-in-upstream HEAD': 
	git checkout side &&
	git format-patch --ignore-if-in-upstream HEAD

Switched to branch 'side'
ok 74 - format-patch --ignore-if-in-upstream HEAD

expecting success of 4014.75 'get git version': 
	git_version=$(git --version) &&
	git_version=${git_version##* }

ok 75 - get git version

expecting success of 4014.76 'format-patch default signature': 
	git format-patch --stdout -1 >patch &&
	tail -n 3 patch >output &&
	signature >expect &&
	test_cmp expect output

ok 76 - format-patch default signature

expecting success of 4014.77 'format-patch --signature': 
	git format-patch --stdout --signature="my sig" -1 >patch &&
	tail -n 3 patch >output &&
	signature "my sig" >expect &&
	test_cmp expect output

ok 77 - format-patch --signature

expecting success of 4014.78 'format-patch with format.signature config': 
	git config format.signature "config sig" &&
	git format-patch --stdout -1 >output &&
	grep "config sig" output

config sig
ok 78 - format-patch with format.signature config

expecting success of 4014.79 'format-patch --signature overrides format.signature': 
	git config format.signature "config sig" &&
	git format-patch --stdout --signature="overrides" -1 >output &&
	! grep "config sig" output &&
	grep "overrides" output

overrides
ok 79 - format-patch --signature overrides format.signature

expecting success of 4014.80 'format-patch --no-signature ignores format.signature': 
	git config format.signature "config sig" &&
	git format-patch --stdout --signature="my sig" --no-signature \
		-1 >output &&
	check_patch output &&
	! grep "config sig" output &&
	! grep "my sig" output &&
	! grep "^-- \$" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 80 - format-patch --no-signature ignores format.signature

expecting success of 4014.81 'format-patch --signature --cover-letter': 
	git config --unset-all format.signature &&
	git format-patch --stdout --signature="my sig" --cover-letter \
		-1 >output &&
	grep "my sig" output >sig &&
	test_line_count = 2 sig

ok 81 - format-patch --signature --cover-letter

expecting success of 4014.82 'format.signature="" suppresses signatures': 
	git config format.signature "" &&
	git format-patch --stdout -1 >output &&
	check_patch output &&
	! grep "^-- \$" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 82 - format.signature="" suppresses signatures

expecting success of 4014.83 'format-patch --no-signature suppresses signatures': 
	git config --unset-all format.signature &&
	git format-patch --stdout --no-signature -1 >output &&
	check_patch output &&
	! grep "^-- \$" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 83 - format-patch --no-signature suppresses signatures

expecting success of 4014.84 'format-patch --signature="" suppresses signatures': 
	git format-patch --stdout --signature="" -1 >output &&
	check_patch output &&
	! grep "^-- \$" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 84 - format-patch --signature="" suppresses signatures

expecting success of 4014.85 'prepare mail-signature input': 
	cat >mail-signature <<-\EOF

	Test User <test.email@kernel.org>
	http://git.kernel.org/cgit/git/git.git

	git.kernel.org/?p=git/git.git;a=summary

	EOF

ok 85 - prepare mail-signature input

expecting success of 4014.86 '--signature-file=file works': 
	git format-patch --stdout --signature-file=mail-signature -1 >output &&
	check_patch output &&
	sed -e "1,/^-- \$/d" output >actual &&
	{
		cat mail-signature && echo
	} >expect &&
	test_cmp expect actual

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 86 - --signature-file=file works

expecting success of 4014.87 'format.signaturefile works': 
	test_config format.signaturefile mail-signature &&
	git format-patch --stdout -1 >output &&
	check_patch output &&
	sed -e "1,/^-- \$/d" output >actual &&
	{
		cat mail-signature && echo
	} >expect &&
	test_cmp expect actual

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 87 - format.signaturefile works

expecting success of 4014.88 '--no-signature suppresses format.signaturefile ': 
	test_config format.signaturefile mail-signature &&
	git format-patch --stdout --no-signature -1 >output &&
	check_patch output &&
	! grep "^-- \$" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 88 - --no-signature suppresses format.signaturefile 

expecting success of 4014.89 '--signature-file overrides format.signaturefile': 
	cat >other-mail-signature <<-\EOF &&
	Use this other signature instead of mail-signature.
	EOF
	test_config format.signaturefile mail-signature &&
	git format-patch --stdout \
			--signature-file=other-mail-signature -1 >output &&
	check_patch output &&
	sed -e "1,/^-- \$/d" output >actual &&
	{
		cat other-mail-signature && echo
	} >expect &&
	test_cmp expect actual

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
ok 89 - --signature-file overrides format.signaturefile

expecting success of 4014.90 '--signature overrides format.signaturefile': 
	test_config format.signaturefile mail-signature &&
	git format-patch --stdout --signature="my sig" -1 >output &&
	check_patch output &&
	grep "my sig" output

From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH] foo
my sig
ok 90 - --signature overrides format.signaturefile

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 4014.91 'format-patch --stdout paginates': 
	rm -f pager_used &&
	test_terminal env GIT_PAGER="wc >pager_used" git format-patch --stdout --all &&
	test_path_is_file pager_used

ok 91 - format-patch --stdout paginates

expecting success of 4014.92 'format-patch --stdout pagination can be disabled': 
	rm -f pager_used &&
	test_terminal env GIT_PAGER="wc >pager_used" git --no-pager format-patch --stdout --all &&
	test_terminal env GIT_PAGER="wc >pager_used" git -c "pager.format-patch=false" format-patch --stdout --all &&
	test_path_is_missing pager_used &&
	test_path_is_missing .git/pager_used

From e27066e74e2522a272f220d17767ef6cab999734 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:13:13 -0700
Subject: [PATCH 01/29] Initial
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 10 ++++++++++
 file | 10 ++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 elif
 create mode 100644 file

diff --git a/elif b/elif
new file mode 100644
index 0000000..f00c965
--- /dev/null
+++ b/elif
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
diff --git a/file b/file
new file mode 100644
index 0000000..f00c965
--- /dev/null
+++ b/file
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
-- 
2.39.0


From 1135adfeed86678c55e1aad7c568046ee8215660 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 02/29] Side changes #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 elif

diff --git a/elif b/elif
old mode 100644
new mode 100755
-- 
2.39.0


From fd00575a8382ce27c62b83730a40bcff1dc2f25f Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:15:13 -0700
Subject: [PATCH 03/29] Side changes #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/file b/file
index f00c965..e5895ff 100644
--- a/file
+++ b/file
@@ -1,10 +1,14 @@
 1
 2
-3
-4
 5
 6
+A
+B
+C
 7
 8
 9
 10
+D
+E
+F
-- 
2.39.0


From 18ed22aae56367787c36a882bd61281e07994f11 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:16:13 -0700
Subject: [PATCH 04/29] Side changes #3 with \n backslash-n in it.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/file b/file
index e5895ff..40f36c6 100644
--- a/file
+++ b/file
@@ -1,8 +1,10 @@
-1
-2
 5
 6
+1
+2
+3
 A
+4
 B
 C
 7
-- 
2.39.0


From 333d5cbbd01bc8841a452d443caa9913971d4ffb Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:17:13 -0700
Subject: [PATCH 05/29] Main accepts moral equivalent of #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/file b/file
index f00c965..e5895ff 100644
--- a/file
+++ b/file
@@ -1,10 +1,14 @@
 1
 2
-3
-4
 5
 6
+A
+B
+C
 7
 8
 9
 10
+D
+E
+F
-- 
2.39.0


From 866b6195304ada3156f0f8c97696b6f862ce5312 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:18:13 -0700
Subject: [PATCH 06/29] patchid 1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file  | 13 -------------
 file2 | 16 ++++++++++++++++
 file3 | 16 ++++++++++++++++
 3 files changed, 32 insertions(+), 13 deletions(-)
 create mode 100644 file2
 create mode 100644 file3

diff --git a/file b/file
index 40f36c6..236483f 100644
--- a/file
+++ b/file
@@ -1,16 +1,3 @@
-5
-6
-1
-2
-3
-A
-4
-B
-C
-7
 8
 9
 10
-D
-E
-F
diff --git a/file2 b/file2
new file mode 100644
index 0000000..40f36c6
--- /dev/null
+++ b/file2
@@ -0,0 +1,16 @@
+5
+6
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
diff --git a/file3 b/file3
new file mode 100644
index 0000000..281fa8c
--- /dev/null
+++ b/file3
@@ -0,0 +1,16 @@
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
+5
+6
-- 
2.39.0


From b0e76a38f7c5ec2ee722c28a446dbba613e87da4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:19:13 -0700
Subject: [PATCH 07/29] patchid 2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file2 | 11 +----------
 file3 | 11 -----------
 2 files changed, 1 insertion(+), 21 deletions(-)

diff --git a/file2 b/file2
index 40f36c6..d082389 100644
--- a/file2
+++ b/file2
@@ -1,16 +1,7 @@
-5
-6
-1
-2
-3
-A
 4
+A
 B
-C
 7
 8
 9
 10
-D
-E
-F
diff --git a/file3 b/file3
index 281fa8c..eb411a6 100644
--- a/file3
+++ b/file3
@@ -1,16 +1,5 @@
-1
-2
-3
-A
-4
-B
-C
-7
 8
 9
 10
-D
-E
-F
 5
 6
-- 
2.39.0


From e905b623a7eaecf172d0a5e51615566d7c1343c2 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:20:13 -0700
Subject: [PATCH 08/29] patchid 3
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/file b/file
index 236483f..478d49a 100644
--- a/file
+++ b/file
@@ -1,3 +1,3 @@
-8
-9
 10
+5
+6
-- 
2.39.0


From f4bed5ab2116dec8ea55e1b13ec208cccf8fc76d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:21:13 -0700
Subject: [PATCH 09/29] Feature branch change #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file b/file
index e5895ff..3cb93e8 100644
--- a/file
+++ b/file
@@ -12,3 +12,4 @@ C
 D
 E
 F
+Another line
-- 
2.39.0


From cd3adbe0b9fbb93b081906068e230f5d3c291ce0 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:22:13 -0700
Subject: [PATCH 10/29] Feature branch change #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file b/file
index 3cb93e8..b43af10 100644
--- a/file
+++ b/file
@@ -13,3 +13,4 @@ D
 E
 F
 Another line
+Yet another line
-- 
2.39.0


From 3bb6dea027a6d06fe694cd3a4bddd4bef126cb2a Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 11/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..a117704
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 2
-- 
2.39.0


From cd80a4db726f25cd65cf846143cace77b2dd1b65 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 12/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..e9404d1
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 1
-- 
2.39.0


From b23a70482b5d14f06949641054b37a57415577e4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 13/29] pathspec_initial
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 file_b | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 file_a
 create mode 100644 file_b

diff --git a/file_a b/file_a
new file mode 100644
index 0000000..fa8d3ba
--- /dev/null
+++ b/file_a
@@ -0,0 +1 @@
+file_a 1
diff --git a/file_b b/file_b
new file mode 100644
index 0000000..ce75531
--- /dev/null
+++ b/file_b
@@ -0,0 +1 @@
+file_b 1
-- 
2.39.0


From 4038a9ac88247a9d9d2582f1a8f5b89c7f33c6bf Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 14/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index a117704..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 2
-- 
2.39.0


From da4f41819a0a73ab79f6809d13275ebd7fe7abf3 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 15/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index e9404d1..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 1
-- 
2.39.0


From c8d92eac7f524764dfb30fb03ac499e1b73e6db7 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 16/29] pathspec_a
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file_a b/file_a
index fa8d3ba..2cab2d9 100644
--- a/file_a
+++ b/file_a
@@ -1 +1,2 @@
 file_a 1
+file_a 2
-- 
2.39.0


From 96189abd93f46568be5dceb1311695a04016d6e3 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 17/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..a117704
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 2
-- 
2.39.0


From 242ffee275c4967610931afe1a9b4460e2368b09 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 18/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..e9404d1
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 1
-- 
2.39.0


From 42b3ce0dccff6ba1f83bd6615570c23eed8de918 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 19/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..b1bf3b6
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+notes config message
-- 
2.39.0


From 24e36c3941a70f7b4b029567b4cbee5557f1c59d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 20/29] This is an excessively long subject line for a message
 due to the habit some projects have of not having a short, one-line subject
 at the start of the commit message, but rather sticking a whole paragraph
 right at the start as the only thing in the commit message. It had better not
 become the filename for the patch.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/file b/file
index 40f36c6..2dc5c23 100644
--- a/file
+++ b/file
@@ -14,3 +14,19 @@ C
 D
 E
 F
+5
+6
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
-- 
2.39.0


From 7d3fd2d2999e2add2e3687ef50c03887c2702349 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 21/29] Side changes #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 elif

diff --git a/elif b/elif
old mode 100644
new mode 100755
-- 
2.39.0


From 0040a8b30c49ccb63f98e6e7ded62cb171c4c6a5 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 22/29] pathspec_b
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_b | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file_b b/file_b
index ce75531..4b46764 100644
--- a/file_b
+++ b/file_b
@@ -1 +1,2 @@
 file_b 1
+file_b 2
-- 
2.39.0


From 4c7f806c98eaa2c7f9a830226fa3b106d8c7df6d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 23/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..da5a1d5
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+test message
-- 
2.39.0


From 0b67fb80b5c5800e9f6b2142e71a1694bb090d0c Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 24/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index a117704..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 2
-- 
2.39.0


From 868b3db620e7e05c0be74d5b61bdf35c5b3991c4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 25/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index e9404d1..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 1
-- 
2.39.0


From c6e6852ae6ec4bd7d75bab2a5681f49fc6486ad9 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 26/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index b1bf3b6..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-notes config message
-- 
2.39.0


From fdb9fcf18a45eb38837e959111188a57ea80c4a8 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 27/29] foo
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file => foo | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => foo (100%)

diff --git a/file b/foo
similarity index 100%
rename from file
rename to foo
-- 
2.39.0


From d22b2e062a8a46b736961022e01ed9e7ce0655d4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:16:13 -0700
Subject: [PATCH 28/29] Side changes #3 with \n backslash-n in it.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/file b/file
index e5895ff..40f36c6 100644
--- a/file
+++ b/file
@@ -1,8 +1,10 @@
-1
-2
 5
 6
+1
+2
+3
 A
+4
 B
 C
 7
-- 
2.39.0


From f56c6d0fb7df8e2aaff84d66511f5863a371a761 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 29/29] pathspec_ab
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 file_b | 1 +
 2 files changed, 2 insertions(+)

diff --git a/file_a b/file_a
index 2cab2d9..81f70dc 100644
--- a/file_a
+++ b/file_a
@@ -1,2 +1,3 @@
 file_a 1
 file_a 2
+file_a 3
diff --git a/file_b b/file_b
index 4b46764..3d9874d 100644
--- a/file_b
+++ b/file_b
@@ -1,2 +1,3 @@
 file_b 1
 file_b 2
+file_b 3
-- 
2.39.0

From e27066e74e2522a272f220d17767ef6cab999734 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:13:13 -0700
Subject: [PATCH 01/29] Initial
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 10 ++++++++++
 file | 10 ++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 elif
 create mode 100644 file

diff --git a/elif b/elif
new file mode 100644
index 0000000..f00c965
--- /dev/null
+++ b/elif
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
diff --git a/file b/file
new file mode 100644
index 0000000..f00c965
--- /dev/null
+++ b/file
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
-- 
2.39.0


From 1135adfeed86678c55e1aad7c568046ee8215660 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 02/29] Side changes #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 elif

diff --git a/elif b/elif
old mode 100644
new mode 100755
-- 
2.39.0


From fd00575a8382ce27c62b83730a40bcff1dc2f25f Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:15:13 -0700
Subject: [PATCH 03/29] Side changes #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/file b/file
index f00c965..e5895ff 100644
--- a/file
+++ b/file
@@ -1,10 +1,14 @@
 1
 2
-3
-4
 5
 6
+A
+B
+C
 7
 8
 9
 10
+D
+E
+F
-- 
2.39.0


From 18ed22aae56367787c36a882bd61281e07994f11 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:16:13 -0700
Subject: [PATCH 04/29] Side changes #3 with \n backslash-n in it.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/file b/file
index e5895ff..40f36c6 100644
--- a/file
+++ b/file
@@ -1,8 +1,10 @@
-1
-2
 5
 6
+1
+2
+3
 A
+4
 B
 C
 7
-- 
2.39.0


From 333d5cbbd01bc8841a452d443caa9913971d4ffb Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:17:13 -0700
Subject: [PATCH 05/29] Main accepts moral equivalent of #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/file b/file
index f00c965..e5895ff 100644
--- a/file
+++ b/file
@@ -1,10 +1,14 @@
 1
 2
-3
-4
 5
 6
+A
+B
+C
 7
 8
 9
 10
+D
+E
+F
-- 
2.39.0


From 866b6195304ada3156f0f8c97696b6f862ce5312 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:18:13 -0700
Subject: [PATCH 06/29] patchid 1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file  | 13 -------------
 file2 | 16 ++++++++++++++++
 file3 | 16 ++++++++++++++++
 3 files changed, 32 insertions(+), 13 deletions(-)
 create mode 100644 file2
 create mode 100644 file3

diff --git a/file b/file
index 40f36c6..236483f 100644
--- a/file
+++ b/file
@@ -1,16 +1,3 @@
-5
-6
-1
-2
-3
-A
-4
-B
-C
-7
 8
 9
 10
-D
-E
-F
diff --git a/file2 b/file2
new file mode 100644
index 0000000..40f36c6
--- /dev/null
+++ b/file2
@@ -0,0 +1,16 @@
+5
+6
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
diff --git a/file3 b/file3
new file mode 100644
index 0000000..281fa8c
--- /dev/null
+++ b/file3
@@ -0,0 +1,16 @@
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
+5
+6
-- 
2.39.0


From b0e76a38f7c5ec2ee722c28a446dbba613e87da4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:19:13 -0700
Subject: [PATCH 07/29] patchid 2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file2 | 11 +----------
 file3 | 11 -----------
 2 files changed, 1 insertion(+), 21 deletions(-)

diff --git a/file2 b/file2
index 40f36c6..d082389 100644
--- a/file2
+++ b/file2
@@ -1,16 +1,7 @@
-5
-6
-1
-2
-3
-A
 4
+A
 B
-C
 7
 8
 9
 10
-D
-E
-F
diff --git a/file3 b/file3
index 281fa8c..eb411a6 100644
--- a/file3
+++ b/file3
@@ -1,16 +1,5 @@
-1
-2
-3
-A
-4
-B
-C
-7
 8
 9
 10
-D
-E
-F
 5
 6
-- 
2.39.0


From e905b623a7eaecf172d0a5e51615566d7c1343c2 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:20:13 -0700
Subject: [PATCH 08/29] patchid 3
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/file b/file
index 236483f..478d49a 100644
--- a/file
+++ b/file
@@ -1,3 +1,3 @@
-8
-9
 10
+5
+6
-- 
2.39.0


From f4bed5ab2116dec8ea55e1b13ec208cccf8fc76d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:21:13 -0700
Subject: [PATCH 09/29] Feature branch change #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file b/file
index e5895ff..3cb93e8 100644
--- a/file
+++ b/file
@@ -12,3 +12,4 @@ C
 D
 E
 F
+Another line
-- 
2.39.0


From cd3adbe0b9fbb93b081906068e230f5d3c291ce0 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:22:13 -0700
Subject: [PATCH 10/29] Feature branch change #2
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file b/file
index 3cb93e8..b43af10 100644
--- a/file
+++ b/file
@@ -13,3 +13,4 @@ D
 E
 F
 Another line
+Yet another line
-- 
2.39.0


From 3bb6dea027a6d06fe694cd3a4bddd4bef126cb2a Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 11/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..a117704
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 2
-- 
2.39.0


From cd80a4db726f25cd65cf846143cace77b2dd1b65 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 12/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..e9404d1
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 1
-- 
2.39.0


From b23a70482b5d14f06949641054b37a57415577e4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 13/29] pathspec_initial
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 file_b | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 file_a
 create mode 100644 file_b

diff --git a/file_a b/file_a
new file mode 100644
index 0000000..fa8d3ba
--- /dev/null
+++ b/file_a
@@ -0,0 +1 @@
+file_a 1
diff --git a/file_b b/file_b
new file mode 100644
index 0000000..ce75531
--- /dev/null
+++ b/file_b
@@ -0,0 +1 @@
+file_b 1
-- 
2.39.0


From 4038a9ac88247a9d9d2582f1a8f5b89c7f33c6bf Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 14/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index a117704..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 2
-- 
2.39.0


From da4f41819a0a73ab79f6809d13275ebd7fe7abf3 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 15/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index e9404d1..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 1
-- 
2.39.0


From c8d92eac7f524764dfb30fb03ac499e1b73e6db7 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 16/29] pathspec_a
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file_a b/file_a
index fa8d3ba..2cab2d9 100644
--- a/file_a
+++ b/file_a
@@ -1 +1,2 @@
 file_a 1
+file_a 2
-- 
2.39.0


From 96189abd93f46568be5dceb1311695a04016d6e3 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 17/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..a117704
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 2
-- 
2.39.0


From 242ffee275c4967610931afe1a9b4460e2368b09 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 18/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..e9404d1
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+this is note 1
-- 
2.39.0


From 42b3ce0dccff6ba1f83bd6615570c23eed8de918 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 19/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..b1bf3b6
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+notes config message
-- 
2.39.0


From 24e36c3941a70f7b4b029567b4cbee5557f1c59d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 20/29] This is an excessively long subject line for a message
 due to the habit some projects have of not having a short, one-line subject
 at the start of the commit message, but rather sticking a whole paragraph
 right at the start as the only thing in the commit message. It had better not
 become the filename for the patch.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/file b/file
index 40f36c6..2dc5c23 100644
--- a/file
+++ b/file
@@ -14,3 +14,19 @@ C
 D
 E
 F
+5
+6
+1
+2
+3
+A
+4
+B
+C
+7
+8
+9
+10
+D
+E
+F
-- 
2.39.0


From 7d3fd2d2999e2add2e3687ef50c03887c2702349 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:14:13 -0700
Subject: [PATCH 21/29] Side changes #1
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 elif | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 elif

diff --git a/elif b/elif
old mode 100644
new mode 100755
-- 
2.39.0


From 0040a8b30c49ccb63f98e6e7ded62cb171c4c6a5 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 22/29] pathspec_b
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_b | 1 +
 1 file changed, 1 insertion(+)

diff --git a/file_b b/file_b
index ce75531..4b46764 100644
--- a/file_b
+++ b/file_b
@@ -1 +1,2 @@
 file_b 1
+file_b 2
-- 
2.39.0


From 4c7f806c98eaa2c7f9a830226fa3b106d8c7df6d Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 23/29] Notes added by 'git notes add'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
new file mode 100644
index 0000000..da5a1d5
--- /dev/null
+++ b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
@@ -0,0 +1 @@
+test message
-- 
2.39.0


From 0b67fb80b5c5800e9f6b2142e71a1694bb090d0c Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 24/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index a117704..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 2
-- 
2.39.0


From 868b3db620e7e05c0be74d5b61bdf35c5b3991c4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 25/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index e9404d1..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-this is note 1
-- 
2.39.0


From c6e6852ae6ec4bd7d75bab2a5681f49fc6486ad9 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 26/29] Notes removed by 'git notes remove'
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 fdb9fcf18a45eb38837e959111188a57ea80c4a8 | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 fdb9fcf18a45eb38837e959111188a57ea80c4a8

diff --git a/fdb9fcf18a45eb38837e959111188a57ea80c4a8 b/fdb9fcf18a45eb38837e959111188a57ea80c4a8
deleted file mode 100644
index b1bf3b6..0000000
--- a/fdb9fcf18a45eb38837e959111188a57ea80c4a8
+++ /dev/null
@@ -1 +0,0 @@
-notes config message
-- 
2.39.0


From fdb9fcf18a45eb38837e959111188a57ea80c4a8 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 27/29] foo
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file => foo | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => foo (100%)

diff --git a/file b/foo
similarity index 100%
rename from file
rename to foo
-- 
2.39.0


From d22b2e062a8a46b736961022e01ed9e7ce0655d4 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:16:13 -0700
Subject: [PATCH 28/29] Side changes #3 with \n backslash-n in it.
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/file b/file
index e5895ff..40f36c6 100644
--- a/file
+++ b/file
@@ -1,8 +1,10 @@
-1
-2
 5
 6
+1
+2
+3
 A
+4
 B
 C
 7
-- 
2.39.0


From f56c6d0fb7df8e2aaff84d66511f5863a371a761 Mon Sep 17 00:00:00 2001
From: A U Thor <author@example.com>
Date: Thu, 7 Apr 2005 15:23:13 -0700
Subject: [PATCH 29/29] pathspec_ab
Header1: B E Cipient <rcipient@example.com>
To: Someone <someone@out.there>
Cc: C E Cipient <rcipient@example.com>

---
 file_a | 1 +
 file_b | 1 +
 2 files changed, 2 insertions(+)

diff --git a/file_a b/file_a
index 2cab2d9..81f70dc 100644
--- a/file_a
+++ b/file_a
@@ -1,2 +1,3 @@
 file_a 1
 file_a 2
+file_a 3
diff --git a/file_b b/file_b
index 4b46764..3d9874d 100644
--- a/file_b
+++ b/file_b
@@ -1,2 +1,3 @@
 file_b 1
 file_b 2
+file_b 3
-- 
2.39.0

ok 92 - format-patch --stdout pagination can be disabled

expecting success of 4014.93 'format-patch handles multi-line subjects': 
	rm -rf patches/ &&
	echo content >>file &&
	test_write_lines one two three >msg &&
	git add file &&
	git commit -F msg &&
	git format-patch -o patches -1 &&
	grep ^Subject: patches/0001-one.patch >actual &&
	echo "Subject: [PATCH] one two three" >expect &&
	test_cmp expect actual

[side 03e88ab] one two three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
patches/0001-one.patch
ok 93 - format-patch handles multi-line subjects

expecting success of 4014.94 'format-patch handles multi-line encoded subjects': 
	rm -rf patches/ &&
	echo content >>file &&
	test_write_lines en två tre >msg &&
	git add file &&
	git commit -F msg &&
	git format-patch -o patches -1 &&
	grep ^Subject: patches/0001-en.patch >actual &&
	echo "Subject: [PATCH] =?UTF-8?q?en=20tv=C3=A5=20tre?=" >expect &&
	test_cmp expect actual

[side 14a7b37] en två tre
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
patches/0001-en.patch
ok 94 - format-patch handles multi-line encoded subjects

expecting success of 4014.95 'format-patch wraps extremely long subject (ascii)': 
	echo content >>file &&
	git add file &&
	git commit -m "$M512" &&
	git format-patch --stdout -1 >patch &&
	sed -n "/^Subject/p; /^ /p; /^$/q" patch >subject &&
	test_cmp expect subject

[side 317404f] foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 95 - format-patch wraps extremely long subject (ascii)

expecting success of 4014.96 'format-patch wraps extremely long subject (rfc2047)': 
	rm -rf patches/ &&
	echo content >>file &&
	git add file &&
	git commit -m "$M512" &&
	git format-patch --stdout -1 >patch &&
	sed -n "/^Subject/p; /^ /p; /^$/q" patch >subject &&
	test_cmp expect subject

[side e8f8f51] föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar föö bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 96 - format-patch wraps extremely long subject (rfc2047)

expecting success of 4014.97 'format-patch quotes dot in from-headers': 
	check_author "Foo B. Bar"

[side 2c79a5e] author-check
 Author: Foo B. Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 97 - format-patch quotes dot in from-headers

expecting success of 4014.98 'format-patch quotes double-quote in from-headers': 
	check_author "Foo \"The Baz\" Bar"

[side 895c191] author-check
 Author: Foo "The Baz" Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 98 - format-patch quotes double-quote in from-headers

expecting success of 4014.99 'format-patch uses rfc2047-encoded from-headers when necessary': 
	check_author "Föo Bar"

[side 474c296] author-check
 Author: Föo Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 99 - format-patch uses rfc2047-encoded from-headers when necessary

expecting success of 4014.100 'rfc2047-encoded from-headers leave no rfc822 specials': 
	check_author "Föo B. Bar"

[side 65e2d1e] author-check
 Author: Föo B. Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 100 - rfc2047-encoded from-headers leave no rfc822 specials

expecting success of 4014.101 'format-patch wraps moderately long from-header (ascii)': 
	check_author "foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_"

[side 2122e1f] author-check
 Author: foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_ <author@example.com>
 1 file changed, 1 insertion(+)
ok 101 - format-patch wraps moderately long from-header (ascii)

expecting success of 4014.102 'format-patch wraps extremely long from-header (ascii)': 
	check_author "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar"

[side e10eeb6] author-check
 Author: Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 102 - format-patch wraps extremely long from-header (ascii)

expecting success of 4014.103 'format-patch wraps extremely long from-header (rfc822)': 
	check_author "Foo.Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar"

[side e4e411c] author-check
 Author: Foo.Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 103 - format-patch wraps extremely long from-header (rfc822)

expecting success of 4014.104 'format-patch wraps extremely long from-header (rfc2047)': 
	check_author "Foö Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar"

[side 683a678] author-check
 Author: Foö Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 104 - format-patch wraps extremely long from-header (rfc2047)

expecting success of 4014.105 'format-patch wraps extremely long from-header (non-ASCII without Q-encoding)': 
	echo content >>file &&
	git add file &&
	GIT_AUTHOR_NAME="Foö Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar" \
	git commit -m author-check &&
	git format-patch --no-encode-email-headers --stdout -1 >patch &&
	sed -n "/^From: /p; /^ /p; /^$/q" patch >actual &&
	test_cmp expect actual

[side f15ac9b] author-check
 Author: Foö Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar <author@example.com>
 1 file changed, 1 insertion(+)
ok 105 - format-patch wraps extremely long from-header (non-ASCII without Q-encoding)

expecting success of 4014.106 'subject lines are unencoded with --no-encode-email-headers': 
	echo content >>file &&
	git add file &&
	git commit -m "Foö" &&
	git format-patch --no-encode-email-headers -1 --stdout >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

[side 0aac8f2] Foö
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 106 - subject lines are unencoded with --no-encode-email-headers

expecting success of 4014.107 'subject lines are unencoded with format.encodeEmailHeaders=false': 
	echo content >>file &&
	git add file &&
	git commit -m "Foö" &&
	git config format.encodeEmailHeaders false &&
	git format-patch -1 --stdout >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

[side 55ab885] Foö
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 107 - subject lines are unencoded with format.encodeEmailHeaders=false

expecting success of 4014.108 '--encode-email-headers overrides format.encodeEmailHeaders': 
	echo content >>file &&
	git add file &&
	git commit -m "Foö" &&
	git config format.encodeEmailHeaders false &&
	git format-patch --encode-email-headers -1 --stdout >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

[side 91c5661] Foö
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 108 - --encode-email-headers overrides format.encodeEmailHeaders

expecting success of 4014.109 'subject lines do not have 822 atom-quoting': 
	echo content >>file &&
	git add file &&
	git commit -m "header with . in it" &&
	git format-patch -k -1 --stdout >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

[side ba025ae] header with . in it
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 109 - subject lines do not have 822 atom-quoting

expecting success of 4014.110 'subject prefixes have space prepended': 
	git format-patch -n -1 --stdout --subject-prefix=PREFIX >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

ok 110 - subject prefixes have space prepended

expecting success of 4014.111 'empty subject prefix does not have extra space': 
	git format-patch -n -1 --stdout --subject-prefix= >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

ok 111 - empty subject prefix does not have extra space

expecting success of 4014.112 '--rfc': 
	cat >expect <<-\EOF &&
	Subject: [RFC PATCH 1/1] header with . in it
	EOF
	git format-patch -n -1 --stdout --rfc >patch &&
	grep ^Subject: patch >actual &&
	test_cmp expect actual

ok 112 - --rfc

expecting success of 4014.113 '--from=ident notices bogus ident': 
	test_must_fail git format-patch -1 --stdout --from=foo >patch

fatal: invalid ident line: foo
ok 113 - --from=ident notices bogus ident

expecting success of 4014.114 '--from=ident replaces author': 
	git format-patch -1 --stdout --from="Me <me@example.com>" >patch &&
	cat >expect <<-\EOF &&
	From: Me <me@example.com>

	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 114 - --from=ident replaces author

expecting success of 4014.115 '--from uses committer ident': 
	git format-patch -1 --stdout --from >patch &&
	cat >expect <<-\EOF &&
	From: C O Mitter <committer@example.com>

	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 115 - --from uses committer ident

expecting success of 4014.116 '--from omits redundant in-body header': 
	git format-patch -1 --stdout --from="A U Thor <author@example.com>" >patch &&
	cat >expect <<-\EOF &&
	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 116 - --from omits redundant in-body header

expecting success of 4014.117 'with --force-in-body-from, redundant in-body from is kept': 
	git format-patch --force-in-body-from \
		-1 --stdout --from="A U Thor <author@example.com>" >patch &&
	cat >expect <<-\EOF &&
	From: A U Thor <author@example.com>

	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 117 - with --force-in-body-from, redundant in-body from is kept

expecting success of 4014.118 'format.forceInBodyFrom, equivalent to --force-in-body-from': 
	git -c format.forceInBodyFrom=yes format-patch \
		-1 --stdout --from="A U Thor <author@example.com>" >patch &&
	cat >expect <<-\EOF &&
	From: A U Thor <author@example.com>

	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 118 - format.forceInBodyFrom, equivalent to --force-in-body-from

expecting success of 4014.119 'format.forceInBodyFrom, equivalent to --force-in-body-from': 
	git -c format.forceInBodyFrom=yes format-patch --no-force-in-body-from \
		-1 --stdout --from="A U Thor <author@example.com>" >patch &&
	cat >expect <<-\EOF &&
	From: A U Thor <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

ok 119 - format.forceInBodyFrom, equivalent to --force-in-body-from

expecting success of 4014.120 'in-body headers trigger content encoding': 
	test_env GIT_AUTHOR_NAME="éxötìc" test_commit exotic &&
	test_when_finished "git reset --hard HEAD^" &&
	git format-patch -1 --stdout --from >patch &&
	cat >expect <<-\EOF &&
	From: C O Mitter <committer@example.com>
	Content-Type: text/plain; charset=UTF-8

	From: éxötìc <author@example.com>

	EOF
	sed -ne "/^From:/p; /^$/p; /^Content-Type/p; /^---$/q" patch >patch.head &&
	test_cmp expect patch.head

[side d11e988] exotic
 Author: éxötìc <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 exotic.t
HEAD is now at ba025ae header with . in it
ok 120 - in-body headers trigger content encoding

expecting success of 4014.121 'signoff: commit with no body': 
	append_signoff </dev/null >actual &&
	cat <<-\EOF | sed "s/EOL$//" >expect &&
	4:Subject: [PATCH] EOL
	8:
	9:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 121 - signoff: commit with no body

expecting success of 4014.122 'signoff: commit with only subject': 
	echo subject | append_signoff >actual &&
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	9:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 122 - signoff: commit with only subject

expecting success of 4014.123 'signoff: commit with only subject that does not end with NL': 
	printf subject | append_signoff >actual &&
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	9:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 123 - signoff: commit with only subject that does not end with NL

expecting success of 4014.124 'signoff: no existing signoffs': 
	append_signoff <<-\EOF >actual &&
	subject

	body
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 124 - signoff: no existing signoffs

expecting success of 4014.125 'signoff: no existing signoffs and no trailing NL': 
	printf "subject\n\nbody" | append_signoff >actual &&
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 125 - signoff: no existing signoffs and no trailing NL

expecting success of 4014.126 'signoff: some random signoff': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Signed-off-by: my@house
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: my@house
	12:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 126 - signoff: some random signoff

expecting success of 4014.127 'signoff: misc conforming footer elements': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Signed-off-by: my@house
	(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
	Tested-by: Some One <someone@example.com>
	Bug: 1234
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: my@house
	15:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 127 - signoff: misc conforming footer elements

expecting success of 4014.128 'signoff: some random signoff-alike': 
	append_signoff <<-\EOF >actual &&
	subject

	body
	Fooled-by-me: my@house
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	11:
	12:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 128 - signoff: some random signoff-alike

expecting success of 4014.129 'signoff: not really a signoff': 
	append_signoff <<-\EOF >actual &&
	subject

	I want to mention about Signed-off-by: here.
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	9:I want to mention about Signed-off-by: here.
	10:
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 129 - signoff: not really a signoff

expecting success of 4014.130 'signoff: not really a signoff (2)': 
	append_signoff <<-\EOF >actual &&
	subject

	My unfortunate
	Signed-off-by: example happens to be wrapped here.
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:Signed-off-by: example happens to be wrapped here.
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 130 - signoff: not really a signoff (2)

expecting success of 4014.131 'signoff: valid S-o-b paragraph in the middle': 
	append_signoff <<-\EOF >actual &&
	subject

	Signed-off-by: my@house
	Signed-off-by: your@house

	A lot of houses.
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	9:Signed-off-by: my@house
	10:Signed-off-by: your@house
	11:
	13:
	14:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 131 - signoff: valid S-o-b paragraph in the middle

expecting success of 4014.132 'signoff: the same signoff at the end': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Signed-off-by: C O Mitter <committer@example.com>
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 132 - signoff: the same signoff at the end

expecting success of 4014.133 'signoff: the same signoff at the end, no trailing NL': 
	printf "subject\n\nSigned-off-by: C O Mitter <committer@example.com>" |
		append_signoff >actual &&
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	9:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 133 - signoff: the same signoff at the end, no trailing NL

expecting success of 4014.134 'signoff: the same signoff NOT at the end': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: my@house
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	11:Signed-off-by: C O Mitter <committer@example.com>
	12:Signed-off-by: my@house
	EOF
	test_cmp expect actual

ok 134 - signoff: the same signoff NOT at the end

expecting success of 4014.135 'signoff: tolerate garbage in conforming footer': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Tested-by: my@house
	Some Trash
	Signed-off-by: C O Mitter <committer@example.com>
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	13:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 135 - signoff: tolerate garbage in conforming footer

expecting success of 4014.136 'signoff: respect trailer config': 
	append_signoff <<-\EOF >actual &&
	subject

	Myfooter: x
	Some Trash
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	11:
	12:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual &&

	test_config trailer.Myfooter.ifexists add &&
	append_signoff <<-\EOF >actual &&
	subject

	Myfooter: x
	Some Trash
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	11:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 136 - signoff: respect trailer config

expecting success of 4014.137 'signoff: footer begins with non-signoff without @ sign': 
	append_signoff <<-\EOF >actual &&
	subject

	body

	Reviewed-id: Noone
	Tested-by: my@house
	Change-id: Ideadbeef
	Signed-off-by: C O Mitter <committer@example.com>
	Bug: 1234
	EOF
	cat >expect <<-\EOF &&
	4:Subject: [PATCH] subject
	8:
	10:
	14:Signed-off-by: C O Mitter <committer@example.com>
	EOF
	test_cmp expect actual

ok 137 - signoff: footer begins with non-signoff without @ sign

expecting success of 4014.138 'format patch ignores color.ui': 
	test_unconfig color.ui &&
	git format-patch --stdout -1 >expect &&
	test_config color.ui always &&
	git format-patch --stdout -1 >actual &&
	test_cmp expect actual

ok 138 - format patch ignores color.ui

expecting success of 4014.139 'format patch respects diff.relative': 
	rm -rf subdir &&
	mkdir subdir &&
	echo other content >subdir/file2 &&
	git add subdir/file2 &&
	git commit -F msg &&
	test_unconfig diff.relative &&
	git format-patch --relative=subdir --stdout -1 >expect &&
	test_config diff.relative true &&
	git -C subdir format-patch --stdout -1 >actual &&
	test_cmp expect actual

[side 5664d8f] en två tre
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file2
ok 139 - format patch respects diff.relative

expecting success of 4014.140 'cover letter with invalid --cover-from-description and config': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_must_fail git format-patch --cover-letter --cover-from-description garbage main &&
	test_config format.coverFromDescription garbage &&
	test_must_fail git format-patch --cover-letter main

fatal: garbage: invalid cover from description mode
fatal: garbage: invalid cover from description mode
ok 140 - cover letter with invalid --cover-from-description and config

expecting success of 4014.141 'cover letter with format.coverFromDescription = default': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription default &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^config subject$" actual &&
	grep "^body$" actual

Switched to branch 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
config subject
body
ok 141 - cover letter with format.coverFromDescription = default

expecting success of 4014.142 'cover letter with --cover-from-description default': 
	test_config branch.rebuild-1.description "config subject

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description default main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
config subject
body
ok 142 - cover letter with --cover-from-description default

expecting success of 4014.143 'cover letter with format.coverFromDescription = none': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription none &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	! grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
*** BLURB HERE ***
ok 143 - cover letter with format.coverFromDescription = none

expecting success of 4014.144 'cover letter with --cover-from-description none': 
	test_config branch.rebuild-1.description "config subject

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description none main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	! grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
*** BLURB HERE ***
ok 144 - cover letter with --cover-from-description none

expecting success of 4014.145 'cover letter with format.coverFromDescription = message': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription message &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
config subject
body
ok 145 - cover letter with format.coverFromDescription = message

expecting success of 4014.146 'cover letter with --cover-from-description message': 
	test_config branch.rebuild-1.description "config subject

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description message main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
config subject
body
ok 146 - cover letter with --cover-from-description message

expecting success of 4014.147 'cover letter with format.coverFromDescription = subject': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription subject &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] config subject$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] config subject
body
ok 147 - cover letter with format.coverFromDescription = subject

expecting success of 4014.148 'cover letter with --cover-from-description subject': 
	test_config branch.rebuild-1.description "config subject

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description subject main >actual &&
	grep "^Subject: \[PATCH 0/2\] config subject$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] config subject
body
ok 148 - cover letter with --cover-from-description subject

expecting success of 4014.149 'cover letter with format.coverFromDescription = auto (short subject line)': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription auto &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] config subject$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] config subject
body
ok 149 - cover letter with format.coverFromDescription = auto (short subject line)

expecting success of 4014.150 'cover letter with --cover-from-description auto (short subject line)': 
	test_config branch.rebuild-1.description "config subject

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description auto main >actual &&
	grep "^Subject: \[PATCH 0/2\] config subject$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] config subject
body
ok 150 - cover letter with --cover-from-description auto (short subject line)

expecting success of 4014.151 'cover letter with format.coverFromDescription = auto (long subject line)': 
	test_config branch.rebuild-1.description "this is a really long first line and it is over 100 characters long which is the threshold for long subjects

body" &&
	test_config format.coverFromDescription auto &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^this is a really long first line and it is over 100 characters long which is the threshold for long subjects$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
this is a really long first line and it is over 100 characters long which is the threshold for long subjects
body
ok 151 - cover letter with format.coverFromDescription = auto (long subject line)

expecting success of 4014.152 'cover letter with --cover-from-description auto (long subject line)': 
	test_config branch.rebuild-1.description "this is a really long first line and it is over 100 characters long which is the threshold for long subjects

body" &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description auto main >actual &&
	grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	grep "^this is a really long first line and it is over 100 characters long which is the threshold for long subjects$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] *** SUBJECT HERE ***
this is a really long first line and it is over 100 characters long which is the threshold for long subjects
body
ok 152 - cover letter with --cover-from-description auto (long subject line)

expecting success of 4014.153 'cover letter with command-line --cover-from-description overrides config': 
	test_config branch.rebuild-1.description "config subject

body" &&
	test_config format.coverFromDescription none &&
	git checkout rebuild-1 &&
	git format-patch --stdout --cover-letter --cover-from-description subject main >actual &&
	grep "^Subject: \[PATCH 0/2\] config subject$" actual &&
	! grep "^\*\*\* BLURB HERE \*\*\*$" actual &&
	! grep "^config subject$" actual &&
	grep "^body$" actual

Already on 'rebuild-1'
Subject: [PATCH 0/2] config subject
body
ok 153 - cover letter with command-line --cover-from-description overrides config

expecting success of 4014.154 'cover letter using branch description (1)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter main >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 154 - cover letter using branch description (1)

expecting success of 4014.155 'cover letter using branch description (2)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter rebuild-1~2..rebuild-1 >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 155 - cover letter using branch description (2)

expecting success of 4014.156 'cover letter using branch description (3)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter ^main rebuild-1 >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 156 - cover letter using branch description (3)

expecting success of 4014.157 'cover letter using branch description (4)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter main.. >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 157 - cover letter using branch description (4)

expecting success of 4014.158 'cover letter using branch description (5)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter -2 HEAD >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 158 - cover letter using branch description (5)

expecting success of 4014.159 'cover letter using branch description (6)': 
	git checkout rebuild-1 &&
	test_config branch.rebuild-1.description hello &&
	git format-patch --stdout --cover-letter -2 >actual &&
	grep hello actual

Already on 'rebuild-1'
hello
ok 159 - cover letter using branch description (6)

expecting success of 4014.160 'cover letter with nothing': 
	git format-patch --stdout --cover-letter >actual &&
	test_line_count = 0 actual

ok 160 - cover letter with nothing

expecting success of 4014.161 'cover letter auto': 
	mkdir -p tmp &&
	test_when_finished "rm -rf tmp;
		git config --unset format.coverletter" &&

	git config format.coverletter auto &&
	git format-patch -o tmp -1 >list &&
	test_line_count = 1 list &&
	git format-patch -o tmp -2 >list &&
	test_line_count = 3 list

ok 161 - cover letter auto

expecting success of 4014.162 'cover letter auto user override': 
	mkdir -p tmp &&
	test_when_finished "rm -rf tmp;
		git config --unset format.coverletter" &&

	git config format.coverletter auto &&
	git format-patch -o tmp --cover-letter -1 >list &&
	test_line_count = 2 list &&
	git format-patch -o tmp --cover-letter -2 >list &&
	test_line_count = 3 list &&
	git format-patch -o tmp --no-cover-letter -1 >list &&
	test_line_count = 1 list &&
	git format-patch -o tmp --no-cover-letter -2 >list &&
	test_line_count = 2 list

ok 162 - cover letter auto user override

expecting success of 4014.163 'format-patch --zero-commit': 
	git format-patch --zero-commit --stdout v2..v1 >patch2 &&
	grep "^From " patch2 | sort | uniq >actual &&
	echo "From $ZERO_OID Mon Sep 17 00:00:00 2001" >expect &&
	test_cmp expect actual

ok 163 - format-patch --zero-commit

expecting success of 4014.164 'From line has expected format': 
	git format-patch --stdout v2..v1 >patch2 &&
	grep "^From " patch2 >from &&
	grep "^From $OID_REGEX Mon Sep 17 00:00:00 2001$" patch2 >filtered &&
	test_cmp from filtered

ok 164 - From line has expected format

expecting success of 4014.165 'format-patch -o with no leading directories': 
	rm -fr patches &&
	git format-patch -o patches main..side &&
	count=$(git rev-list --count main..side) &&
	ls patches >list &&
	test_line_count = $count list

patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
patches/0005-foo.patch
patches/0006-one.patch
patches/0007-en.patch
patches/0008-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-.patch
patches/0009-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-ba.patch
patches/0010-author-check.patch
patches/0011-author-check.patch
patches/0012-author-check.patch
patches/0013-author-check.patch
patches/0014-author-check.patch
patches/0015-author-check.patch
patches/0016-author-check.patch
patches/0017-author-check.patch
patches/0018-author-check.patch
patches/0019-Fo.patch
patches/0020-Fo.patch
patches/0021-Fo.patch
patches/0022-header-with-.-in-it.patch
patches/0023-en.patch
ok 165 - format-patch -o with no leading directories

expecting success of 4014.166 'format-patch -o with leading existing directories': 
	rm -rf existing-dir &&
	mkdir existing-dir &&
	git format-patch -o existing-dir/patches main..side &&
	count=$(git rev-list --count main..side) &&
	ls existing-dir/patches >list &&
	test_line_count = $count list

existing-dir/patches/0001-Side-changes-1.patch
existing-dir/patches/0002-Side-changes-2.patch
existing-dir/patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
existing-dir/patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
existing-dir/patches/0005-foo.patch
existing-dir/patches/0006-one.patch
existing-dir/patches/0007-en.patch
existing-dir/patches/0008-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-.patch
existing-dir/patches/0009-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-ba.patch
existing-dir/patches/0010-author-check.patch
existing-dir/patches/0011-author-check.patch
existing-dir/patches/0012-author-check.patch
existing-dir/patches/0013-author-check.patch
existing-dir/patches/0014-author-check.patch
existing-dir/patches/0015-author-check.patch
existing-dir/patches/0016-author-check.patch
existing-dir/patches/0017-author-check.patch
existing-dir/patches/0018-author-check.patch
existing-dir/patches/0019-Fo.patch
existing-dir/patches/0020-Fo.patch
existing-dir/patches/0021-Fo.patch
existing-dir/patches/0022-header-with-.-in-it.patch
existing-dir/patches/0023-en.patch
ok 166 - format-patch -o with leading existing directories

expecting success of 4014.167 'format-patch -o with leading non-existing directories': 
	rm -rf non-existing-dir &&
	git format-patch -o non-existing-dir/patches main..side &&
	count=$(git rev-list --count main..side) &&
	test_path_is_dir non-existing-dir &&
	ls non-existing-dir/patches >list &&
	test_line_count = $count list

non-existing-dir/patches/0001-Side-changes-1.patch
non-existing-dir/patches/0002-Side-changes-2.patch
non-existing-dir/patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
non-existing-dir/patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
non-existing-dir/patches/0005-foo.patch
non-existing-dir/patches/0006-one.patch
non-existing-dir/patches/0007-en.patch
non-existing-dir/patches/0008-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-.patch
non-existing-dir/patches/0009-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-ba.patch
non-existing-dir/patches/0010-author-check.patch
non-existing-dir/patches/0011-author-check.patch
non-existing-dir/patches/0012-author-check.patch
non-existing-dir/patches/0013-author-check.patch
non-existing-dir/patches/0014-author-check.patch
non-existing-dir/patches/0015-author-check.patch
non-existing-dir/patches/0016-author-check.patch
non-existing-dir/patches/0017-author-check.patch
non-existing-dir/patches/0018-author-check.patch
non-existing-dir/patches/0019-Fo.patch
non-existing-dir/patches/0020-Fo.patch
non-existing-dir/patches/0021-Fo.patch
non-existing-dir/patches/0022-header-with-.-in-it.patch
non-existing-dir/patches/0023-en.patch
ok 167 - format-patch -o with leading non-existing directories

expecting success of 4014.168 'format-patch format.outputDirectory option': 
	test_config format.outputDirectory patches &&
	rm -fr patches &&
	git format-patch main..side &&
	count=$(git rev-list --count main..side) &&
	ls patches >list &&
	test_line_count = $count list

patches/0001-Side-changes-1.patch
patches/0002-Side-changes-2.patch
patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
patches/0005-foo.patch
patches/0006-one.patch
patches/0007-en.patch
patches/0008-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-.patch
patches/0009-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-ba.patch
patches/0010-author-check.patch
patches/0011-author-check.patch
patches/0012-author-check.patch
patches/0013-author-check.patch
patches/0014-author-check.patch
patches/0015-author-check.patch
patches/0016-author-check.patch
patches/0017-author-check.patch
patches/0018-author-check.patch
patches/0019-Fo.patch
patches/0020-Fo.patch
patches/0021-Fo.patch
patches/0022-header-with-.-in-it.patch
patches/0023-en.patch
ok 168 - format-patch format.outputDirectory option

expecting success of 4014.169 'format-patch -o overrides format.outputDirectory': 
	test_config format.outputDirectory patches &&
	rm -fr patches patchset &&
	git format-patch main..side -o patchset &&
	test_path_is_missing patches &&
	test_path_is_dir patchset

patchset/0001-Side-changes-1.patch
patchset/0002-Side-changes-2.patch
patchset/0003-Side-changes-3-with-n-backslash-n-in-it.patch
patchset/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
patchset/0005-foo.patch
patchset/0006-one.patch
patchset/0007-en.patch
patchset/0008-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-.patch
patchset/0009-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-bar-f-ba.patch
patchset/0010-author-check.patch
patchset/0011-author-check.patch
patchset/0012-author-check.patch
patchset/0013-author-check.patch
patchset/0014-author-check.patch
patchset/0015-author-check.patch
patchset/0016-author-check.patch
patchset/0017-author-check.patch
patchset/0018-author-check.patch
patchset/0019-Fo.patch
patchset/0020-Fo.patch
patchset/0021-Fo.patch
patchset/0022-header-with-.-in-it.patch
patchset/0023-en.patch
ok 169 - format-patch -o overrides format.outputDirectory

expecting success of 4014.170 'format-patch forbids multiple outputs': 
	rm -fr outfile outdir &&
	test_must_fail \
		git format-patch --stdout --output-directory=outdir &&
	test_must_fail \
		git format-patch --stdout --output=outfile &&
	test_must_fail \
		git format-patch --output=outfile --output-directory=outdir

fatal: options '--stdout' and '--output-directory' cannot be used together
fatal: options '--stdout' and '--output' cannot be used together
fatal: options '--output' and '--output-directory' cannot be used together
ok 170 - format-patch forbids multiple outputs

expecting success of 4014.171 'configured outdir does not conflict with output options': 
	rm -fr outfile outdir &&
	test_config format.outputDirectory outdir &&
	git format-patch --stdout &&
	test_path_is_missing outdir &&
	git format-patch --output=outfile &&
	test_path_is_missing outdir

ok 171 - configured outdir does not conflict with output options

expecting success of 4014.172 'format-patch --output': 
	rm -fr outfile &&
	git format-patch -3 --stdout HEAD >expect &&
	git format-patch -3 --output=outfile HEAD &&
	test_cmp expect outfile

ok 172 - format-patch --output

expecting success of 4014.173 'format-patch --cover-letter --output': 
	rm -fr outfile &&
	git format-patch --cover-letter -3 --stdout HEAD >expect &&
	git format-patch --cover-letter -3 --output=outfile HEAD &&
	test_cmp expect outfile

ok 173 - format-patch --cover-letter --output

expecting success of 4014.174 'format-patch --base': 
	git checkout patchid &&

	git format-patch --stdout --base=HEAD~3 -1 >patch &&
	tail -n 7 patch >actual1 &&

	git format-patch --stdout --base=HEAD~3 HEAD~.. >patch &&
	tail -n 7 patch >actual2 &&

	echo >expect &&
	git rev-parse HEAD~3 >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >>expect &&

	git show --patch HEAD~2 >patch &&
	git patch-id --stable <patch >patch.id.raw &&
	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>expect &&

	git show --patch HEAD~1 >patch &&
	git patch-id --stable <patch >patch.id.raw &&
	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>expect &&

	signature >>expect &&
	test_cmp expect actual1 &&
	test_cmp expect actual2 &&

	echo >fail &&
	echo "base-commit: $(cat commit-id-base)" >>fail &&

	git show --patch HEAD~2 >patch &&
	git patch-id --unstable <patch >patch.id.raw &&
	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>fail &&

	git show --patch HEAD~1 >patch &&
	git patch-id --unstable <patch >patch.id.raw &&
	awk "{print \"prerequisite-patch-id:\", \$1}" <patch.id.raw >>fail &&

	signature >>fail &&
	! test_cmp fail actual1 &&
	! test_cmp fail actual2

Switched to branch 'patchid'
--- fail	2022-12-28 07:44:09.256814942 +0000
+++ actual1	2022-12-28 07:44:08.791797839 +0000
@@ -1,7 +1,7 @@
 
 base-commit: 18ed22aae56367787c36a882bd61281e07994f11
-prerequisite-patch-id: 28427b5266de797837da09880f31c6774f1acddd
-prerequisite-patch-id: e6bf335459a53de8c1f2e3f7fcfa7f52b48e8a34
+prerequisite-patch-id: f7afebea9c46bbd99ee80c7d77c4ea784d8c29e4
+prerequisite-patch-id: 2617b88e9c5376b5aa36597467a68844063a7501
 -- 
 2.39.0
 
--- fail	2022-12-28 07:44:09.256814942 +0000
+++ actual2	2022-12-28 07:44:08.856800230 +0000
@@ -1,7 +1,7 @@
 
 base-commit: 18ed22aae56367787c36a882bd61281e07994f11
-prerequisite-patch-id: 28427b5266de797837da09880f31c6774f1acddd
-prerequisite-patch-id: e6bf335459a53de8c1f2e3f7fcfa7f52b48e8a34
+prerequisite-patch-id: f7afebea9c46bbd99ee80c7d77c4ea784d8c29e4
+prerequisite-patch-id: 2617b88e9c5376b5aa36597467a68844063a7501
 -- 
 2.39.0
 
ok 174 - format-patch --base

expecting success of 4014.175 'format-patch --base errors out when base commit is in revision list': 
	test_must_fail git format-patch --base=HEAD -2 &&
	test_must_fail git format-patch --base=HEAD~1 -2 &&
	git format-patch --stdout --base=HEAD~2 -2 >patch &&
	grep "^base-commit:" patch >actual &&
	git rev-parse HEAD~2 >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

fatal: base commit should be the ancestor of revision list
fatal: base commit shouldn't be in revision list
ok 175 - format-patch --base errors out when base commit is in revision list

expecting success of 4014.176 'format-patch --base errors out when base commit is not ancestor of revision list': 
	# For history as below:
	#
	#    ---Q---P---Z---Y---*---X
	#	 \             /
	#	  ------------W
	#
	# If "format-patch Z..X" is given, P and Z can not be specified as the base commit
	git checkout -b topic1 main &&
	git rev-parse HEAD >commit-id-base &&
	test_commit P &&
	git rev-parse HEAD >commit-id-P &&
	test_commit Z &&
	git rev-parse HEAD >commit-id-Z &&
	test_commit Y &&
	git checkout -b topic2 main &&
	test_commit W &&
	git merge topic1 &&
	test_commit X &&
	test_must_fail git format-patch --base=$(cat commit-id-P) -3 &&
	test_must_fail git format-patch --base=$(cat commit-id-Z) -3 &&
	git format-patch --stdout --base=$(cat commit-id-base) -3 >patch &&
	grep "^base-commit:" patch >actual &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

Switched to a new branch 'topic1'
[topic1 5112a26] P
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 P.t
[topic1 a7493a4] Z
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 Z.t
[topic1 420b9bb] Y
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 Y.t
Switched to a new branch 'topic2'
[topic2 d51bbb2] W
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 W.t
Merge made by the 'ort' strategy.
 P.t | 1 +
 Y.t | 1 +
 Z.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 P.t
 create mode 100644 Y.t
 create mode 100644 Z.t
[topic2 10a51f9] X
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 X.t
fatal: base commit should be the ancestor of revision list
fatal: base commit should be the ancestor of revision list
ok 176 - format-patch --base errors out when base commit is not ancestor of revision list

expecting success of 4014.177 'format-patch --base=auto': 
	git checkout -b upstream main &&
	git checkout -b local upstream &&
	git branch --set-upstream-to=upstream &&
	test_commit N1 &&
	test_commit N2 &&
	git format-patch --stdout --base=auto -2 >patch &&
	grep "^base-commit:" patch >actual &&
	git rev-parse upstream >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

Switched to a new branch 'upstream'
Switched to a new branch 'local'
branch 'local' set up to track 'upstream'.
[local eb876cb] N1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 N1.t
[local f845e79] N2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 N2.t
ok 177 - format-patch --base=auto

expecting success of 4014.178 'format-patch errors out when history involves criss-cross': 
	# setup criss-cross history
	#
	#   B---M1---D
	#  / \ /
	# A   X
	#  \ / \
	#   C---M2---E
	#
	git checkout main &&
	test_commit A &&
	git checkout -b xb main &&
	test_commit B &&
	git checkout -b xc main &&
	test_commit C &&
	git checkout -b xbc xb -- &&
	git merge xc &&
	git checkout -b xcb xc -- &&
	git branch --set-upstream-to=xbc &&
	git merge xb &&
	git checkout xbc &&
	test_commit D &&
	git checkout xcb &&
	test_commit E &&
	test_must_fail 	git format-patch --base=auto -1

Switched to branch 'main'
[main d058a8b] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'xb'
[xb f22dfec] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'xc'
[xc dd6d709] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch 'xbc'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch 'xcb'
branch 'xcb' set up to track 'xbc'.
Merge made by the 'ort' strategy.
 B.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to branch 'xbc'
[xbc 69c0d87] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Switched to branch 'xcb'
Your branch and 'xbc' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
[xcb 6518961] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
fatal: could not find exact merge base
ok 178 - format-patch errors out when history involves criss-cross

expecting success of 4014.179 'format-patch format.useAutoBase whenAble history involves criss-cross': 
	test_config format.useAutoBase whenAble &&
	git format-patch -1 >patch &&
	! grep "^base-commit:" patch

ok 179 - format-patch format.useAutoBase whenAble history involves criss-cross

expecting success of 4014.180 'format-patch format.useAutoBase option': 
	git checkout local &&
	test_config format.useAutoBase true &&
	git format-patch --stdout -1 >patch &&
	grep "^base-commit:" patch >actual &&
	git rev-parse upstream >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

Switched to branch 'local'
Your branch is ahead of 'upstream' by 2 commits.
  (use "git push" to publish your local commits)
ok 180 - format-patch format.useAutoBase option

expecting success of 4014.181 'format-patch format.useAutoBase option with whenAble': 
	git checkout local &&
	test_config format.useAutoBase whenAble &&
	git format-patch --stdout -1 >patch &&
	grep "^base-commit:" patch >actual &&
	git rev-parse upstream >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

Already on 'local'
Your branch is ahead of 'upstream' by 2 commits.
  (use "git push" to publish your local commits)
ok 181 - format-patch format.useAutoBase option with whenAble

expecting success of 4014.182 'format-patch --base overrides format.useAutoBase': 
	test_config format.useAutoBase true &&
	git format-patch --stdout --base=HEAD~1 -1 >patch &&
	grep "^base-commit:" patch >actual &&
	git rev-parse HEAD~1 >commit-id-base &&
	echo "base-commit: $(cat commit-id-base)" >expect &&
	test_cmp expect actual

ok 182 - format-patch --base overrides format.useAutoBase

expecting success of 4014.183 'format-patch --no-base overrides format.useAutoBase': 
	test_config format.useAutoBase true &&
	git format-patch --stdout --no-base -1 >patch &&
	! grep "^base-commit:" patch

ok 183 - format-patch --no-base overrides format.useAutoBase

expecting success of 4014.184 'format-patch --no-base overrides format.useAutoBase whenAble': 
	test_config format.useAutoBase whenAble &&
	git format-patch --stdout --no-base -1 >patch &&
	! grep "^base-commit:" patch

ok 184 - format-patch --no-base overrides format.useAutoBase whenAble

expecting success of 4014.185 'format-patch --base with --attach': 
	git format-patch --attach=mimemime --stdout --base=HEAD~ -1 >patch &&
	sed -n -e "/^base-commit:/s/.*/1/p" -e "/^---*mimemime--$/s/.*/2/p" \
		patch >actual &&
	test_write_lines 1 2 >expect &&
	test_cmp expect actual

ok 185 - format-patch --base with --attach

expecting success of 4014.186 'format-patch --attach cover-letter only is non-multipart': 
	test_when_finished "rm -fr patches" &&
	git format-patch -o patches --cover-letter --attach=mimemime --base=HEAD~ -1 &&
	! grep -E "^--+mimemime" patches/0000*.patch &&
	grep -E "^--+mimemime$" patches/0001*.patch >output &&
	test_line_count = 2 output &&
	grep -E "^--+mimemime--$" patches/0001*.patch >output &&
	test_line_count = 1 output

patches/0000-cover-letter.patch
patches/0001-N2.patch
ok 186 - format-patch --attach cover-letter only is non-multipart

expecting success of 4014.187 'format-patch --pretty=mboxrd': 
	sp=" " &&
	cat >msg <<-INPUT_END &&
	mboxrd should escape the body

	From could trip up a loose mbox parser
	>From extra escape for reversibility
	>>From extra escape for reversibility 2
	from lower case not escaped
	Fromm bad speling not escaped
	 From with leading space not escaped

	F
	From
	From$sp
	From    $sp
	From	$sp
	INPUT_END

	cat >expect <<-INPUT_END &&
	>From could trip up a loose mbox parser
	>>From extra escape for reversibility
	>>>From extra escape for reversibility 2
	from lower case not escaped
	Fromm bad speling not escaped
	 From with leading space not escaped

	F
	From
	From
	From
	From
	INPUT_END

	C=$(git commit-tree HEAD^^{tree} -p HEAD <msg) &&
	git format-patch --pretty=mboxrd --stdout -1 $C~1..$C >patch &&
	git grep -h --no-index -A11 \
		"^>From could trip up a loose mbox parser" patch >actual &&
	test_cmp expect actual

ok 187 - format-patch --pretty=mboxrd

expecting success of 4014.188 'interdiff: setup': 
	git checkout -b boop main &&
	test_commit fnorp blorp &&
	test_commit fleep blorp

Switched to a new branch 'boop'
[boop 072f39b] fnorp
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 blorp
[boop d76703f] fleep
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 188 - interdiff: setup

expecting success of 4014.189 'interdiff: cover-letter': 
	sed "y/q/ /" >expect <<-\EOF &&
	+fleep
	--q
	EOF
	git format-patch --cover-letter --interdiff=boop~2 -1 boop &&
	test_i18ngrep "^Interdiff:$" 0000-cover-letter.patch &&
	test_i18ngrep ! "^Interdiff:$" 0001-fleep.patch &&
	sed "1,/^@@ /d; /^-- $/q" 0000-cover-letter.patch >actual &&
	test_cmp expect actual

0000-cover-letter.patch
0001-fleep.patch
Interdiff:
ok 189 - interdiff: cover-letter

expecting success of 4014.190 'interdiff: reroll-count': 
	git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop &&
	test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch

v2-0000-cover-letter.patch
v2-0001-fleep.patch
Interdiff against v1:
ok 190 - interdiff: reroll-count

expecting success of 4014.191 'interdiff: reroll-count with a non-integer': 
	git format-patch --cover-letter --interdiff=boop~2 -v2.2 -1 boop &&
	test_i18ngrep "^Interdiff:$" v2.2-0000-cover-letter.patch

v2.2-0000-cover-letter.patch
v2.2-0001-fleep.patch
Interdiff:
ok 191 - interdiff: reroll-count with a non-integer

expecting success of 4014.192 'interdiff: reroll-count with a integer': 
	git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop &&
	test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch

v2-0000-cover-letter.patch
v2-0001-fleep.patch
Interdiff against v1:
ok 192 - interdiff: reroll-count with a integer

expecting success of 4014.193 'interdiff: solo-patch': 
	cat >expect <<-\EOF &&
	  +fleep

	EOF
	git format-patch --interdiff=boop~2 -1 boop &&
	test_i18ngrep "^Interdiff:$" 0001-fleep.patch &&
	sed "1,/^  @@ /d; /^$/q" 0001-fleep.patch >actual &&
	test_cmp expect actual

0001-fleep.patch
Interdiff:
ok 193 - interdiff: solo-patch

# still have 5 known breakage(s)
# passed all remaining 188 test(s)
1..193
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4035-diff-quiet.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4035-diff-quiet/.git/
expecting success of 4035.1 'setup': 
	echo 1 >a &&
	git add . &&
	git commit -m first &&
	echo 2 >b &&
	git add . &&
	git commit -a -m second &&
	mkdir -p test-outside/repo && (
		cd test-outside/repo &&
		git init &&
		echo "1 1" >a &&
		git add . &&
		git commit -m 1
	) &&
	mkdir -p test-outside/non/git && (
		cd test-outside/non/git &&
		echo "1 1" >a &&
		echo "1 1" >matching-file &&
		echo "1 1 " >trailing-space &&
		echo "1   1" >extra-space &&
		echo "2" >never-match
	)

[master (root-commit) 703ec9e] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[master 3476b69] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4035-diff-quiet/test-outside/repo/.git/
[master (root-commit) f9eeef1] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
ok 1 - setup

expecting success of 4035.2 'git diff-tree HEAD^ HEAD': 
	test_expect_code 1 git diff-tree --quiet HEAD^ HEAD >cnt &&
	test_line_count = 0 cnt

ok 2 - git diff-tree HEAD^ HEAD

expecting success of 4035.3 'git diff-tree HEAD^ HEAD -- a': 
	test_expect_code 0 git diff-tree --quiet HEAD^ HEAD -- a >cnt &&
	test_line_count = 0 cnt

ok 3 - git diff-tree HEAD^ HEAD -- a

expecting success of 4035.4 'git diff-tree HEAD^ HEAD -- b': 
	test_expect_code 1 git diff-tree --quiet HEAD^ HEAD -- b >cnt &&
	test_line_count = 0 cnt

ok 4 - git diff-tree HEAD^ HEAD -- b

expecting success of 4035.5 'echo HEAD | git diff-tree --stdin': 
	echo $(git rev-parse HEAD) |
	test_expect_code 1 git diff-tree --quiet --stdin >cnt &&
	test_line_count = 1 cnt

ok 5 - echo HEAD | git diff-tree --stdin

expecting success of 4035.6 'git diff-tree HEAD HEAD': 
	test_expect_code 0 git diff-tree --quiet HEAD HEAD >cnt &&
	test_line_count = 0 cnt

ok 6 - git diff-tree HEAD HEAD

expecting success of 4035.7 'git diff-files': 
	test_expect_code 0 git diff-files --quiet >cnt &&
	test_line_count = 0 cnt

ok 7 - git diff-files

expecting success of 4035.8 'git diff-index --cached HEAD': 
	test_expect_code 0 git diff-index --quiet --cached HEAD >cnt &&
	test_line_count = 0 cnt

ok 8 - git diff-index --cached HEAD

expecting success of 4035.9 'git diff-index --cached HEAD^': 
	test_expect_code 1 git diff-index --quiet --cached HEAD^ >cnt &&
	test_line_count = 0 cnt

ok 9 - git diff-index --cached HEAD^

expecting success of 4035.10 'git diff-index --cached HEAD^': 
	echo text >>b &&
	echo 3 >c &&
	git add . &&
	test_expect_code 1 git diff-index --quiet --cached HEAD^ >cnt &&
	test_line_count = 0 cnt

warning: adding embedded git repository: test-outside/repo
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> test-outside/repo
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached test-outside/repo
hint: 
hint: See "git help submodule" for more information.
ok 10 - git diff-index --cached HEAD^

expecting success of 4035.11 'git diff-tree -Stext HEAD^ HEAD -- b': 
	git commit -m "text in b" &&
	test_expect_code 1 git diff-tree --quiet -Stext HEAD^ HEAD -- b >cnt &&
	test_line_count = 0 cnt

[master b583ee2] text in b
 Author: A U Thor <author@example.com>
 9 files changed, 8 insertions(+)
 create mode 100644 c
 create mode 100644 cnt
 create mode 100644 test-outside/non/git/a
 create mode 100644 test-outside/non/git/extra-space
 create mode 100644 test-outside/non/git/matching-file
 create mode 100644 test-outside/non/git/never-match
 create mode 100644 test-outside/non/git/trailing-space
 create mode 160000 test-outside/repo
ok 11 - git diff-tree -Stext HEAD^ HEAD -- b

expecting success of 4035.12 'git diff-tree -Snot-found HEAD^ HEAD -- b': 
	test_expect_code 0 git diff-tree --quiet -Snot-found HEAD^ HEAD -- b >cnt &&
	test_line_count = 0 cnt

ok 12 - git diff-tree -Snot-found HEAD^ HEAD -- b

expecting success of 4035.13 'git diff-files': 
	echo 3 >>c &&
	test_expect_code 1 git diff-files --quiet >cnt &&
	test_line_count = 0 cnt

ok 13 - git diff-files

expecting success of 4035.14 'git diff-index --cached HEAD': 
	git update-index c &&
	test_expect_code 1 git diff-index --quiet --cached HEAD >cnt &&
	test_line_count = 0 cnt

ok 14 - git diff-index --cached HEAD

expecting success of 4035.15 'git diff, one file outside repo': 
	(
		cd test-outside/repo &&
		test_expect_code 0 git diff --quiet a ../non/git/matching-file &&
		test_expect_code 1 git diff --quiet a ../non/git/extra-space
	)

ok 15 - git diff, one file outside repo

expecting success of 4035.16 'git diff, both files outside repo': 
	(
		GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY/test-outside" &&
		export GIT_CEILING_DIRECTORIES &&
		cd test-outside/non/git &&
		test_expect_code 0 git diff --quiet a matching-file &&
		test_expect_code 1 git diff --quiet a extra-space
	)

ok 16 - git diff, both files outside repo

expecting success of 4035.17 'git diff --ignore-space-at-eol, one file outside repo': 
	(
		cd test-outside/repo &&
		test_expect_code 0 git diff --quiet --ignore-space-at-eol a ../non/git/trailing-space &&
		test_expect_code 1 git diff --quiet --ignore-space-at-eol a ../non/git/extra-space
	)

ok 17 - git diff --ignore-space-at-eol, one file outside repo

expecting success of 4035.18 'git diff --ignore-space-at-eol, both files outside repo': 
	(
		GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY/test-outside" &&
		export GIT_CEILING_DIRECTORIES &&
		cd test-outside/non/git &&
		test_expect_code 0 git diff --quiet --ignore-space-at-eol a trailing-space &&
		test_expect_code 1 git diff --quiet --ignore-space-at-eol a extra-space
	)

ok 18 - git diff --ignore-space-at-eol, both files outside repo

expecting success of 4035.19 'git diff --ignore-all-space, one file outside repo': 
	(
		cd test-outside/repo &&
		test_expect_code 0 git diff --quiet --ignore-all-space a ../non/git/trailing-space &&
		test_expect_code 0 git diff --quiet --ignore-all-space a ../non/git/extra-space &&
		test_expect_code 1 git diff --quiet --ignore-all-space a ../non/git/never-match
	)

ok 19 - git diff --ignore-all-space, one file outside repo

expecting success of 4035.20 'git diff --ignore-all-space, both files outside repo': 
	(
		GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY/test-outside" &&
		export GIT_CEILING_DIRECTORIES &&
		cd test-outside/non/git &&
		test_expect_code 0 git diff --quiet --ignore-all-space a trailing-space &&
		test_expect_code 0 git diff --quiet --ignore-all-space a extra-space &&
		test_expect_code 1 git diff --quiet --ignore-all-space a never-match
	)

ok 20 - git diff --ignore-all-space, both files outside repo

expecting success of 4035.21 'git diff --quiet ignores stat-change only entries': 
	test-tool chmtime +10 a &&
	echo modified >>b &&
	test_expect_code 1 git diff --quiet

ok 21 - git diff --quiet ignores stat-change only entries

expecting success of 4035.22 'git diff --quiet on a path that need conversion': 
	echo "crlf.txt text=auto" >.gitattributes &&
	printf "Hello\r\nWorld\r\n" >crlf.txt &&
	git add .gitattributes crlf.txt &&

	printf "Hello\r\nWorld\n" >crlf.txt &&
	git diff --quiet crlf.txt

warning: in the working copy of 'crlf.txt', CRLF will be replaced by LF the next time Git touches it
warning: in the working copy of 'crlf.txt', CRLF will be replaced by LF the next time Git touches it
ok 22 - git diff --quiet on a path that need conversion

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4037-diff-r-t-dirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4037-diff-r-t-dirs/.git/
expecting success of 4037.1 'setup': 
	mkdir dc dr dt &&
	>dc/1 &&
	>dr/2 &&
	>dt/3 &&
	>fc &&
	>fr &&
	>ft &&
	git add . &&
	test_tick &&
	git commit -m initial &&

	rm -fr dt dr ft fr &&
	mkdir da ft &&
	for p in dc/1 da/4 dt ft/5 fc
	do
		echo hello >$p || exit
	done &&
	git add -u &&
	git add . &&
	test_tick &&
	git commit -m second

[master (root-commit) 26fc746] initial
 Author: A U Thor <author@example.com>
 6 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dc/1
 create mode 100644 dr/2
 create mode 100644 dt/3
 create mode 100644 fc
 create mode 100644 fr
 create mode 100644 ft
[master 25e238e] second
 Author: A U Thor <author@example.com>
 9 files changed, 5 insertions(+)
 create mode 100644 da/4
 delete mode 100644 dr/2
 create mode 100644 dt
 delete mode 100644 dt/3
 delete mode 100644 fr
 delete mode 100644 ft
 create mode 100644 ft/5
ok 1 - setup

expecting success of 4037.2 'verify': 
	git diff-tree -r -t --name-status HEAD^ HEAD >actual &&
	test_cmp expect actual

ok 2 - verify

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4036-format-patch-signer-mime.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4036-format-patch-signer-mime/.git/
expecting success of 4036.1 'setup': 

	>F &&
	git add F &&
	git commit -m initial &&
	echo new line >F &&

	test_tick &&
	git commit -m "This adds some lines to F" F


[master (root-commit) bf01fa7] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 F
[master dc5bbb5] This adds some lines to F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 4036.2 'format normally': 

	git format-patch --stdout -1 >output &&
	! grep Content-Type output


ok 2 - format normally

expecting success of 4036.3 'format with signoff without funny signer name': 

	git format-patch -s --stdout -1 >output &&
	! grep Content-Type output


ok 3 - format with signoff without funny signer name

expecting success of 4036.4 'format with non ASCII signer name': 

	GIT_COMMITTER_NAME="はまの ふにおう" \
	git format-patch -s --stdout -1 >output &&
	grep Content-Type output


Content-Type: text/plain; charset=UTF-8
ok 4 - format with non ASCII signer name

expecting success of 4036.5 'attach and signoff do not duplicate mime headers': 

	GIT_COMMITTER_NAME="はまの ふにおう" \
	git format-patch -s --stdout -1 --attach >output &&
	test $(grep -ci ^MIME-Version: output) = 1


ok 5 - attach and signoff do not duplicate mime headers

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4039-diff-assume-unchanged.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4039-diff-assume-unchanged/.git/
expecting success of 4039.1 'setup': 
	echo zero > zero &&
	git add zero &&
	git commit -m zero &&
	echo one > one &&
	echo two > two &&
	blob=$(git hash-object one) &&
	git add one two &&
	git commit -m onetwo &&
	git update-index --assume-unchanged one &&
	echo borked >> one &&
	test "$(git ls-files -v one)" = "h one"

[master (root-commit) fbf511c] zero
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 zero
[master 3144717] onetwo
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one
 create mode 100644 two
ok 1 - setup

expecting success of 4039.2 'diff-index does not examine assume-unchanged entries': 
	git diff-index HEAD^ -- one | grep -q $blob

ok 2 - diff-index does not examine assume-unchanged entries

expecting success of 4039.3 'diff-files does not examine assume-unchanged entries': 
	rm one &&
	test -z "$(git diff-files -- one)"

ok 3 - diff-files does not examine assume-unchanged entries

expecting success of 4039.4 'find-copies-harder is not confused by mode bits': 
	echo content >exec &&
	chmod +x exec &&
	git add exec &&
	git commit -m exec &&
	git update-index --assume-unchanged exec &&
	git diff-files --find-copies-harder -- exec >actual &&
	test_must_be_empty actual

[master 4cf4df7] exec
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100755 exec
ok 4 - find-copies-harder is not confused by mode bits

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4040-whitespace-status.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4040-whitespace-status/.git/
expecting success of 4040.1 'setup': 
	mkdir a b &&
	echo >c &&
	echo >a/d &&
	echo >b/e &&
	git add . &&
	test_tick &&
	git commit -m initial &&
	echo " " >a/d &&
	test_tick &&
	git commit -a -m second &&
	echo "  " >a/d &&
	echo " " >b/e &&
	git add a/d

[master (root-commit) b80f2e3] initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 a/d
 create mode 100644 b/e
 create mode 100644 c
[master 13a0478] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4040.2 'diff-tree --exit-code': 
	test_must_fail git diff --exit-code HEAD^ HEAD &&
	test_must_fail git diff-tree --exit-code HEAD^ HEAD

diff --git a/a/d b/a/d
index 8b13789..8d1c8b6 100644
--- a/a/d
+++ b/a/d
@@ -1 +1 @@
-
+ 
:040000 040000 13061aad4970f02b314943ec46981e9ef332cae2 ac592974c686387705f2617b895d6585cc0a0d46 M	a
ok 2 - diff-tree --exit-code

expecting success of 4040.3 'diff-tree -b --exit-code': 
	git diff -b --exit-code HEAD^ HEAD &&
	git diff-tree -b -p --exit-code HEAD^ HEAD &&
	git diff-tree -b --exit-code HEAD^ HEAD

:040000 040000 13061aad4970f02b314943ec46981e9ef332cae2 ac592974c686387705f2617b895d6585cc0a0d46 M	a
ok 3 - diff-tree -b --exit-code

expecting success of 4040.4 'diff-index --cached --exit-code': 
	test_must_fail git diff --cached --exit-code HEAD &&
	test_must_fail git diff-index --cached --exit-code HEAD

diff --git a/a/d b/a/d
index 8d1c8b6..1a4baf5 100644
--- a/a/d
+++ b/a/d
@@ -1 +1 @@
- 
+  
:100644 100644 8d1c8b69c3fce7bea45c73efd06983e3c419a92f 1a4baf536d705b9c814847cb7a708a0e63d5b976 M	a/d
ok 4 - diff-index --cached --exit-code

expecting success of 4040.5 'diff-index -b -p --cached --exit-code': 
	git diff -b --cached --exit-code HEAD &&
	git diff-index -b -p --cached --exit-code HEAD

ok 5 - diff-index -b -p --cached --exit-code

expecting success of 4040.6 'diff-index --exit-code': 
	test_must_fail git diff --exit-code HEAD &&
	test_must_fail git diff-index --exit-code HEAD

diff --git a/a/d b/a/d
index 8d1c8b6..1a4baf5 100644
--- a/a/d
+++ b/a/d
@@ -1 +1 @@
- 
+  
diff --git a/b/e b/b/e
index 8b13789..8d1c8b6 100644
--- a/b/e
+++ b/b/e
@@ -1 +1 @@
-
+ 
:100644 100644 8d1c8b69c3fce7bea45c73efd06983e3c419a92f 1a4baf536d705b9c814847cb7a708a0e63d5b976 M	a/d
:100644 100644 8b137891791fe96927ad78e64b0aad7bded08bdc 0000000000000000000000000000000000000000 M	b/e
ok 6 - diff-index --exit-code

expecting success of 4040.7 'diff-index -b -p --exit-code': 
	git diff -b --exit-code HEAD &&
	git diff-index -b -p --exit-code HEAD

ok 7 - diff-index -b -p --exit-code

expecting success of 4040.8 'diff-files --exit-code': 
	test_must_fail git diff --exit-code &&
	test_must_fail git diff-files --exit-code

diff --git a/b/e b/b/e
index 8b13789..8d1c8b6 100644
--- a/b/e
+++ b/b/e
@@ -1 +1 @@
-
+ 
:100644 100644 8b137891791fe96927ad78e64b0aad7bded08bdc 0000000000000000000000000000000000000000 M	b/e
ok 8 - diff-files --exit-code

expecting success of 4040.9 'diff-files -b -p --exit-code': 
	git diff -b --exit-code &&
	git diff-files -b -p --exit-code

ok 9 - diff-files -b -p --exit-code

expecting success of 4040.10 'diff-files --diff-filter --quiet': 
	git reset --hard &&
	rm a/d &&
	echo x >>b/e &&
	test_must_fail git diff-files --diff-filter=M --quiet

HEAD is now at 13a0478 second
ok 10 - diff-files --diff-filter --quiet

expecting success of 4040.11 'diff-tree --diff-filter --quiet': 
	git commit -a -m "worktree state" &&
	test_must_fail git diff-tree --diff-filter=M --quiet HEAD^ HEAD

[master c0a31dc] worktree state
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 a/d
ok 11 - diff-tree --diff-filter --quiet

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4034-diff-words.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4034-diff-words/.git/
expecting success of 4034.1 'setup': 
	git config diff.color.old red &&
	git config diff.color.new green &&
	git config diff.color.func magenta

ok 1 - setup

expecting success of 4034.2 'set up pre and post with runs of whitespace': 
	cp pre.simple pre &&
	cp post.simple post

ok 2 - set up pre and post with runs of whitespace

expecting success of 4034.3 'word diff with runs of whitespace': 
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1,3 +1,7 @@<RESET>
		<RED>h(4)<RESET><GREEN>h(4),hh[44]<RESET>

		a = b + c<RESET>

		<GREEN>aa = a<RESET>

		<GREEN>aeff = aeff * ( aaa )<RESET>
	EOF
	word_diff --color-words &&
	word_diff --word-diff=color &&
	word_diff --color --word-diff=color

ok 3 - word diff with runs of whitespace

expecting success of 4034.4 '--word-diff=porcelain': 
	sed "s/#.*$//" >expect <<-EOF &&
		diff --git a/pre b/post
		index $pre..$post 100644
		--- a/pre
		+++ b/post
		@@ -1,3 +1,7 @@
		-h(4)
		+h(4),hh[44]
		~
		 # significant space
		~
		 a = b + c
		~
		~
		+aa = a
		~
		~
		+aeff = aeff * ( aaa )
		~
	EOF
	word_diff --word-diff=porcelain

ok 4 - --word-diff=porcelain

expecting success of 4034.5 '--word-diff=plain': 
	cat >expect <<-EOF &&
		diff --git a/pre b/post
		index $pre..$post 100644
		--- a/pre
		+++ b/post
		@@ -1,3 +1,7 @@
		[-h(4)-]{+h(4),hh[44]+}

		a = b + c

		{+aa = a+}

		{+aeff = aeff * ( aaa )+}
	EOF
	word_diff --word-diff=plain &&
	word_diff --word-diff=plain --no-color

ok 5 - --word-diff=plain

expecting success of 4034.6 '--word-diff=plain --color': 
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1,3 +1,7 @@<RESET>
		<RED>[-h(4)-]<RESET><GREEN>{+h(4),hh[44]+}<RESET>

		a = b + c<RESET>

		<GREEN>{+aa = a+}<RESET>

		<GREEN>{+aeff = aeff * ( aaa )+}<RESET>
	EOF
	word_diff --word-diff=plain --color

ok 6 - --word-diff=plain --color

expecting success of 4034.7 'word diff without context': 
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1 +1 @@<RESET>
		<RED>h(4)<RESET><GREEN>h(4),hh[44]<RESET>
		<CYAN>@@ -3,0 +4,4 @@<RESET> <RESET><MAGENTA>a = b + c<RESET>

		<GREEN>aa = a<RESET>

		<GREEN>aeff = aeff * ( aaa )<RESET>
	EOF
	word_diff --color-words --unified=0

ok 7 - word diff without context

expecting success of 4034.8 'word diff with a regular expression': 
	cp expect.letter-runs-are-words expect &&
	word_diff --color-words="[a-z]+"

ok 8 - word diff with a regular expression

expecting success of 4034.9 'word diff with zero length matches': 
	cp expect.letter-runs-are-words expect &&
	word_diff --color-words="[a-z${LF}]*"

ok 9 - word diff with zero length matches

expecting success of 4034.10 'set up a diff driver': 
	git config diff.testdriver.wordRegex "[^[:space:]]" &&
	cat <<-\EOF >.gitattributes
		pre diff=testdriver
		post diff=testdriver
	EOF

ok 10 - set up a diff driver

expecting success of 4034.11 'option overrides .gitattributes': 
	cp expect.letter-runs-are-words expect &&
	word_diff --color-words="[a-z]+"

ok 11 - option overrides .gitattributes

expecting success of 4034.12 'use regex supplied by driver': 
	cp expect.non-whitespace-is-word expect &&
	word_diff --color-words

ok 12 - use regex supplied by driver

expecting success of 4034.13 'set up diff.wordRegex option': 
	git config diff.wordRegex "[[:alnum:]]+"

ok 13 - set up diff.wordRegex option

expecting success of 4034.14 'command-line overrides config': 
	cp expect.letter-runs-are-words expect &&
	word_diff --color-words="[a-z]+"

ok 14 - command-line overrides config

expecting success of 4034.15 'command-line overrides config: --word-diff-regex': 
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1,3 +1,7 @@<RESET>
		h(4),<GREEN>{+hh+}<RESET>[44]

		a = b + c<RESET>

		<GREEN>{+aa = a+}<RESET>

		<GREEN>{+aeff = aeff * ( aaa+}<RESET> )
	EOF
	word_diff --color --word-diff-regex="[a-z]+"

ok 15 - command-line overrides config: --word-diff-regex

expecting success of 4034.16 '.gitattributes override config': 
	cp expect.non-whitespace-is-word expect &&
	word_diff --color-words

ok 16 - .gitattributes override config

expecting success of 4034.17 'setup: remove diff driver regex': 
	test_unconfig diff.testdriver.wordRegex

ok 17 - setup: remove diff driver regex

expecting success of 4034.18 'use configured regex': 
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1,3 +1,7 @@<RESET>
		h(4),<GREEN>hh[44<RESET>]

		a = b + c<RESET>

		<GREEN>aa = a<RESET>

		<GREEN>aeff = aeff * ( aaa<RESET> )
	EOF
	word_diff --color-words

ok 18 - use configured regex

expecting success of 4034.19 'test parsing words for newline': 
	echo "aaa (aaa)" >pre &&
	echo "aaa (aaa) aaa" >post &&
	pre=$(git rev-parse --short $(git hash-object pre)) &&
	post=$(git rev-parse --short $(git hash-object post)) &&
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1 +1 @@<RESET>
		aaa (aaa) <GREEN>aaa<RESET>
	EOF
	word_diff --color-words="a+"

ok 19 - test parsing words for newline

expecting success of 4034.20 'test when words are only removed at the end': 
	echo "(:" >pre &&
	echo "(" >post &&
	pre=$(git rev-parse --short $(git hash-object pre)) &&
	post=$(git rev-parse --short $(git hash-object post)) &&
	cat >expect <<-EOF &&
		<BOLD>diff --git a/pre b/post<RESET>
		<BOLD>index $pre..$post 100644<RESET>
		<BOLD>--- a/pre<RESET>
		<BOLD>+++ b/post<RESET>
		<CYAN>@@ -1 +1 @@<RESET>
		(<RED>:<RESET>
	EOF
	word_diff --color-words=.

ok 20 - test when words are only removed at the end

expecting success of 4034.21 '--word-diff=none': 
	echo "(:" >pre &&
	echo "(" >post &&
	pre=$(git rev-parse --short $(git hash-object pre)) &&
	post=$(git rev-parse --short $(git hash-object post)) &&
	cat >expect <<-EOF &&
		diff --git a/pre b/post
		index $pre..$post 100644
		--- a/pre
		+++ b/post
		@@ -1 +1 @@
		-(:
		+(
	EOF
	word_diff --word-diff=plain --word-diff=none

ok 21 - --word-diff=none

expecting success of 4034.22 'unset default driver': 
	test_unconfig diff.wordregex

ok 22 - unset default driver

expecting success of 4034.23 'diff driver 'ada'': 
		cp "$TEST_DIRECTORY/t4034/ada/pre" \
			"$TEST_DIRECTORY/t4034/ada/post" \
			"$TEST_DIRECTORY/t4034/ada/expect" . &&
		echo "* diff=ada" >.gitattributes &&
		word_diff --color-words
	
ok 23 - diff driver 'ada'

expecting success of 4034.24 'diff driver 'bibtex'': 
		cp "$TEST_DIRECTORY/t4034/bibtex/pre" \
			"$TEST_DIRECTORY/t4034/bibtex/post" \
			"$TEST_DIRECTORY/t4034/bibtex/expect" . &&
		echo "* diff=bibtex" >.gitattributes &&
		word_diff --color-words
	
ok 24 - diff driver 'bibtex'

expecting success of 4034.25 'diff driver 'cpp'': 
		cp "$TEST_DIRECTORY/t4034/cpp/pre" \
			"$TEST_DIRECTORY/t4034/cpp/post" \
			"$TEST_DIRECTORY/t4034/cpp/expect" . &&
		echo "* diff=cpp" >.gitattributes &&
		word_diff --color-words
	
ok 25 - diff driver 'cpp'

expecting success of 4034.26 'diff driver 'csharp'': 
		cp "$TEST_DIRECTORY/t4034/csharp/pre" \
			"$TEST_DIRECTORY/t4034/csharp/post" \
			"$TEST_DIRECTORY/t4034/csharp/expect" . &&
		echo "* diff=csharp" >.gitattributes &&
		word_diff --color-words
	
ok 26 - diff driver 'csharp'

expecting success of 4034.27 'diff driver 'css'': 
		cp "$TEST_DIRECTORY/t4034/css/pre" \
			"$TEST_DIRECTORY/t4034/css/post" \
			"$TEST_DIRECTORY/t4034/css/expect" . &&
		echo "* diff=css" >.gitattributes &&
		word_diff --color-words
	
ok 27 - diff driver 'css'

expecting success of 4034.28 'diff driver 'dts'': 
		cp "$TEST_DIRECTORY/t4034/dts/pre" \
			"$TEST_DIRECTORY/t4034/dts/post" \
			"$TEST_DIRECTORY/t4034/dts/expect" . &&
		echo "* diff=dts" >.gitattributes &&
		word_diff --color-words
	
ok 28 - diff driver 'dts'

expecting success of 4034.29 'diff driver 'fortran'': 
		cp "$TEST_DIRECTORY/t4034/fortran/pre" \
			"$TEST_DIRECTORY/t4034/fortran/post" \
			"$TEST_DIRECTORY/t4034/fortran/expect" . &&
		echo "* diff=fortran" >.gitattributes &&
		word_diff --color-words
	
ok 29 - diff driver 'fortran'

expecting success of 4034.30 'diff driver 'html'': 
		cp "$TEST_DIRECTORY/t4034/html/pre" \
			"$TEST_DIRECTORY/t4034/html/post" \
			"$TEST_DIRECTORY/t4034/html/expect" . &&
		echo "* diff=html" >.gitattributes &&
		word_diff --color-words
	
ok 30 - diff driver 'html'

expecting success of 4034.31 'diff driver 'java'': 
		cp "$TEST_DIRECTORY/t4034/java/pre" \
			"$TEST_DIRECTORY/t4034/java/post" \
			"$TEST_DIRECTORY/t4034/java/expect" . &&
		echo "* diff=java" >.gitattributes &&
		word_diff --color-words
	
ok 31 - diff driver 'java'

expecting success of 4034.32 'diff driver 'kotlin'': 
		cp "$TEST_DIRECTORY/t4034/kotlin/pre" \
			"$TEST_DIRECTORY/t4034/kotlin/post" \
			"$TEST_DIRECTORY/t4034/kotlin/expect" . &&
		echo "* diff=kotlin" >.gitattributes &&
		word_diff --color-words
	
ok 32 - diff driver 'kotlin'

expecting success of 4034.33 'diff driver 'matlab'': 
		cp "$TEST_DIRECTORY/t4034/matlab/pre" \
			"$TEST_DIRECTORY/t4034/matlab/post" \
			"$TEST_DIRECTORY/t4034/matlab/expect" . &&
		echo "* diff=matlab" >.gitattributes &&
		word_diff --color-words
	
ok 33 - diff driver 'matlab'

expecting success of 4034.34 'diff driver 'objc'': 
		cp "$TEST_DIRECTORY/t4034/objc/pre" \
			"$TEST_DIRECTORY/t4034/objc/post" \
			"$TEST_DIRECTORY/t4034/objc/expect" . &&
		echo "* diff=objc" >.gitattributes &&
		word_diff --color-words
	
ok 34 - diff driver 'objc'

expecting success of 4034.35 'diff driver 'pascal'': 
		cp "$TEST_DIRECTORY/t4034/pascal/pre" \
			"$TEST_DIRECTORY/t4034/pascal/post" \
			"$TEST_DIRECTORY/t4034/pascal/expect" . &&
		echo "* diff=pascal" >.gitattributes &&
		word_diff --color-words
	
ok 35 - diff driver 'pascal'

expecting success of 4034.36 'diff driver 'perl'': 
		cp "$TEST_DIRECTORY/t4034/perl/pre" \
			"$TEST_DIRECTORY/t4034/perl/post" \
			"$TEST_DIRECTORY/t4034/perl/expect" . &&
		echo "* diff=perl" >.gitattributes &&
		word_diff --color-words
	
ok 36 - diff driver 'perl'

expecting success of 4034.37 'diff driver 'php'': 
		cp "$TEST_DIRECTORY/t4034/php/pre" \
			"$TEST_DIRECTORY/t4034/php/post" \
			"$TEST_DIRECTORY/t4034/php/expect" . &&
		echo "* diff=php" >.gitattributes &&
		word_diff --color-words
	
ok 37 - diff driver 'php'

expecting success of 4034.38 'diff driver 'python'': 
		cp "$TEST_DIRECTORY/t4034/python/pre" \
			"$TEST_DIRECTORY/t4034/python/post" \
			"$TEST_DIRECTORY/t4034/python/expect" . &&
		echo "* diff=python" >.gitattributes &&
		word_diff --color-words
	
ok 38 - diff driver 'python'

expecting success of 4034.39 'diff driver 'ruby'': 
		cp "$TEST_DIRECTORY/t4034/ruby/pre" \
			"$TEST_DIRECTORY/t4034/ruby/post" \
			"$TEST_DIRECTORY/t4034/ruby/expect" . &&
		echo "* diff=ruby" >.gitattributes &&
		word_diff --color-words
	
ok 39 - diff driver 'ruby'

expecting success of 4034.40 'diff driver 'scheme'': 
		cp "$TEST_DIRECTORY/t4034/scheme/pre" \
			"$TEST_DIRECTORY/t4034/scheme/post" \
			"$TEST_DIRECTORY/t4034/scheme/expect" . &&
		echo "* diff=scheme" >.gitattributes &&
		word_diff --color-words
	
ok 40 - diff driver 'scheme'

expecting success of 4034.41 'diff driver 'tex'': 
		cp "$TEST_DIRECTORY/t4034/tex/pre" \
			"$TEST_DIRECTORY/t4034/tex/post" \
			"$TEST_DIRECTORY/t4034/tex/expect" . &&
		echo "* diff=tex" >.gitattributes &&
		word_diff --color-words
	
ok 41 - diff driver 'tex'

expecting success of 4034.42 'word-diff with diff.sbe': 
	cat >pre <<-\EOF &&
	a

	b
	EOF
	cat >post <<-\EOF &&
	a

	c
	EOF
	pre=$(git rev-parse --short $(git hash-object pre)) &&
	post=$(git rev-parse --short $(git hash-object post)) &&
	cat >expect <<-EOF &&
	diff --git a/pre b/post
	index $pre..$post 100644
	--- a/pre
	+++ b/post
	@@ -1,3 +1,3 @@
	a

	[-b-]{+c+}
	EOF
	test_config diff.suppress-blank-empty true &&
	word_diff --word-diff=plain

ok 42 - word-diff with diff.sbe

expecting success of 4034.43 'word-diff with no newline at EOF': 
	printf "%s" "a a a a a" >pre &&
	printf "%s" "a a ab a a" >post &&
	pre=$(git rev-parse --short $(git hash-object pre)) &&
	post=$(git rev-parse --short $(git hash-object post)) &&
	cat >expect <<-EOF &&
	diff --git a/pre b/post
	index $pre..$post 100644
	--- a/pre
	+++ b/post
	@@ -1 +1 @@
	a a [-a-]{+ab+} a a
	EOF
	word_diff --word-diff=plain

ok 43 - word-diff with no newline at EOF

expecting success of 4034.44 'setup history with two files': 
	echo "a b; c" >a.tex &&
	echo "a b; c" >z.txt &&
	git add a.tex z.txt &&
	git commit -minitial &&

	# modify both
	echo "a bx; c" >a.tex &&
	echo "a bx; c" >z.txt &&
	git commit -mmodified -a

[master (root-commit) ec761f8] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a.tex
 create mode 100644 z.txt
[master 475cd11] modified
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 44 - setup history with two files

expecting success of 4034.45 'wordRegex for the first file does not apply to the second': 
	echo "*.tex diff=tex" >.gitattributes &&
	test_config diff.tex.wordRegex "[a-z]+|." &&
	cat >expect <<-\EOF &&
		diff --git a/a.tex b/a.tex
		--- a/a.tex
		+++ b/a.tex
		@@ -1 +1 @@
		a [-b-]{+bx+}; c
		diff --git a/z.txt b/z.txt
		--- a/z.txt
		+++ b/z.txt
		@@ -1 +1 @@
		a [-b;-]{+bx;+} c
	EOF
	git diff --word-diff HEAD~ >actual &&
	compare_diff_patch expect actual

ok 45 - wordRegex for the first file does not apply to the second

# passed all 45 test(s)
1..45
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4043-diff-rename-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4043-diff-rename-binary/.git/
expecting success of 4043.1 'prepare repository': 
	git init &&
	echo foo > foo &&
	echo "barQ" | q_to_nul > bar &&
	git add . &&
	git commit -m "Initial commit"

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4043-diff-rename-binary/.git/
[master (root-commit) 07508f6] Initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 bar
 create mode 100644 foo
ok 1 - prepare repository

expecting success of 4043.2 'move the files into a "sub" directory': 
	mkdir sub &&
	git mv bar foo sub/ &&
	git commit -m "Moved to sub/"

[master ebc8afa] Moved to sub/
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename bar => sub/bar (100%)
 rename foo => sub/foo (100%)
ok 2 - move the files into a "sub" directory

expecting success of 4043.3 'git show -C -C report renames': 
	git show -C -C --raw --binary --numstat >patch-with-stat &&
	tail -n 11 patch-with-stat >current &&
	test_cmp expected current

ok 3 - git show -C -C report renames

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4042-diff-textconv-caching.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4042-diff-textconv-caching/.git/
expecting success of 4042.1 'setup': 
	echo foo content 1 >foo.bin &&
	echo bar content 1 >bar.bin &&
	git add . &&
	git commit -m one &&
	foo1=$(git rev-parse --short HEAD:foo.bin) &&
	bar1=$(git rev-parse --short HEAD:bar.bin) &&
	echo foo content 2 >foo.bin &&
	echo bar content 2 >bar.bin &&
	git commit -a -m two &&
	foo2=$(git rev-parse --short HEAD:foo.bin) &&
	bar2=$(git rev-parse --short HEAD:bar.bin) &&
	echo "*.bin diff=magic" >.gitattributes &&
	git config diff.magic.textconv ./helper &&
	git config diff.magic.cachetextconv true

[master (root-commit) e62c20e] one
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 bar.bin
 create mode 100644 foo.bin
 create mode 100755 helper
[master ea2ff12] two
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 1 - setup

expecting success of 4042.2 'first textconv works': 
	git diff HEAD^ HEAD >actual &&
	test_cmp expect actual

ok 2 - first textconv works

expecting success of 4042.3 'cached textconv produces same output': 
	git diff HEAD^ HEAD >actual &&
	test_cmp expect actual

ok 3 - cached textconv produces same output

expecting success of 4042.4 'cached textconv does not run helper': 
	rm -f helper.out &&
	git diff HEAD^ HEAD >actual &&
	test_cmp expect actual &&
	! test -r helper.out

ok 4 - cached textconv does not run helper

expecting success of 4042.5 'changing textconv invalidates cache': 
	echo other >other &&
	git config diff.magic.textconv "./helper other" &&
	git diff HEAD^ HEAD >actual &&
	test_cmp expect actual

ok 5 - changing textconv invalidates cache

expecting success of 4042.6 'switching diff driver produces correct results': 
	git config diff.moremagic.textconv ./helper &&
	echo foo.bin diff=moremagic >>.gitattributes &&
	git diff HEAD^ HEAD >actual &&
	test_cmp expect actual

ok 6 - switching diff driver produces correct results

expecting success of 4042.7 'log notes cache and still use cache for -p': 
	git log --no-walk -p refs/notes/textconv/magic HEAD

commit 9c639377525bb0485f64e3a844123312ec98541e
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    ./helper other

diff --git a/1345db2c9189a61ef9932f66b656afc986bee58f b/1345db2c9189a61ef9932f66b656afc986bee58f
new file mode 100644
index 0000000..01b25c5
--- /dev/null
+++ b/1345db2c9189a61ef9932f66b656afc986bee58f
@@ -0,0 +1,2 @@
+converted: other
+converted: foo content 2
diff --git a/28283d51eeb71548ff81d02404b90103b494b983 b/28283d51eeb71548ff81d02404b90103b494b983
new file mode 100644
index 0000000..dcd63a4
--- /dev/null
+++ b/28283d51eeb71548ff81d02404b90103b494b983
@@ -0,0 +1,2 @@
+converted: other
+converted: bar content 2
diff --git a/d5b9fe314e6004caf906e730045d20689167b3fb b/d5b9fe314e6004caf906e730045d20689167b3fb
new file mode 100644
index 0000000..7ef0353
--- /dev/null
+++ b/d5b9fe314e6004caf906e730045d20689167b3fb
@@ -0,0 +1,2 @@
+converted: other
+converted: foo content 1
diff --git a/fcf91668044fda4a569b9374589b26dada7adc49 b/fcf91668044fda4a569b9374589b26dada7adc49
new file mode 100644
index 0000000..5ead606
--- /dev/null
+++ b/fcf91668044fda4a569b9374589b26dada7adc49
@@ -0,0 +1,2 @@
+converted: other
+converted: bar content 1

commit ea2ff12718498fa427bb0f1e263e2ba2e26a440d
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    two

diff --git a/bar.bin b/bar.bin
index fcf9166..28283d5 100644
--- a/bar.bin
+++ b/bar.bin
@@ -1,2 +1,2 @@
 converted: other
-converted: bar content 1
+converted: bar content 2
diff --git a/foo.bin b/foo.bin
index d5b9fe3..1345db2 100644
--- a/foo.bin
+++ b/foo.bin
@@ -1 +1 @@
-converted: foo content 1
+converted: foo content 2
ok 7 - log notes cache and still use cache for -p

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4044-diff-index-unique-abbrev.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4044-diff-index-unique-abbrev/.git/
expecting success of 4044.1 'setup': 
	test_oid_cache <<-EOF &&
	val1 sha1:4827
	val1 sha256:5664

	val2 sha1:11742
	val2 sha256:10625

	hash1 sha1:51d2738463ea4ca66f8691c91e33ce64b7d41bb1
	hash1 sha256:ae31dfff0af93b2c62b0098a039b38569c43b0a7e97b873000ca42d128f27350

	hasht1 sha1:51d27384
	hasht1 sha256:ae31dfff

	hash2 sha1:51d2738efb4ad8a1e40bed839ab8e116f0a15e47
	hash2 sha256:ae31dffada88a46fd5f53c7ed5aa25a7a8951f1d5e88456c317c8d5484d263e5

	hasht2 sha1:51d2738e
	hasht2 sha256:ae31dffa
	EOF

	cat >expect_initial <<-EOF &&
	100644 blob $(test_oid hash1)	foo
	EOF

	cat >expect_update <<-EOF &&
	100644 blob $(test_oid hash2)	foo
	EOF

	echo "$(test_oid val1)" > foo &&
	git add foo &&
	git commit -m "initial" &&
	git cat-file -p HEAD: > actual &&
	test_cmp expect_initial actual &&
	echo "$(test_oid val2)" > foo &&
	git commit -a -m "update" &&
	git cat-file -p HEAD: > actual &&
	test_cmp expect_update actual

[master (root-commit) eaa2693] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[master 90cb371] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4044.2 'diff does not produce ambiguous index line': 
	git diff HEAD^..HEAD | grep index > actual &&
	test_cmp expect actual

ok 2 - diff does not produce ambiguous index line

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4046-diff-unmerged.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4046-diff-unmerged/.git/
expecting success of 4046.1 'setup': 
	for i in 0 1 2 3
	do
		blob=$(echo $i | git hash-object --stdin) &&
		eval "blob$i=$blob" &&
		eval "m$i=\"100644 \$blob$i $i\"" || return 1
	done &&
	paths= &&
	for b in o x
	do
		for o in o x
		do
			for t in o x
			do
				path="$b$o$t" &&
				case "$path" in ooo) continue ;; esac &&
				paths="$paths$path " &&
				p="	$path" &&
				case "$b" in x) echo "$m1$p" ;; esac &&
				case "$o" in x) echo "$m2$p" ;; esac &&
				case "$t" in x) echo "$m3$p" ;; esac ||
				return 1
			done
		done
	done >ls-files-s.expect &&
	git update-index --index-info <ls-files-s.expect &&
	git ls-files -s >ls-files-s.actual &&
	test_cmp ls-files-s.expect ls-files-s.actual

ok 1 - setup

expecting success of 4046.2 'diff-files -0': 
	for path in $paths
	do
		>"$path" &&
		echo ":000000 100644 $ZERO_OID $ZERO_OID U	$path" || return 1
	done >diff-files-0.expect &&
	git diff-files -0 >diff-files-0.actual &&
	test_cmp diff-files-0.expect diff-files-0.actual

ok 2 - diff-files -0

expecting success of 4046.3 'diff-files -1': 
	for path in $paths
	do
		>"$path" &&
		echo ":000000 100644 $ZERO_OID $ZERO_OID U	$path" &&
		case "$path" in
		x??) echo ":100644 100644 $blob1 $ZERO_OID M	$path"
		esac || return 1
	done >diff-files-1.expect &&
	git diff-files -1 >diff-files-1.actual &&
	test_cmp diff-files-1.expect diff-files-1.actual

ok 3 - diff-files -1

expecting success of 4046.4 'diff-files -2': 
	for path in $paths
	do
		>"$path" &&
		echo ":000000 100644 $ZERO_OID $ZERO_OID U	$path" &&
		case "$path" in
		?x?) echo ":100644 100644 $blob2 $ZERO_OID M	$path"
		esac || return 1
	done >diff-files-2.expect &&
	git diff-files -2 >diff-files-2.actual &&
	test_cmp diff-files-2.expect diff-files-2.actual &&
	git diff-files >diff-files-default-2.actual &&
	test_cmp diff-files-2.expect diff-files-default-2.actual

ok 4 - diff-files -2

expecting success of 4046.5 'diff-files -3': 
	for path in $paths
	do
		>"$path" &&
		echo ":000000 100644 $ZERO_OID $ZERO_OID U	$path" &&
		case "$path" in
		??x) echo ":100644 100644 $blob3 $ZERO_OID M	$path"
		esac || return 1
	done >diff-files-3.expect &&
	git diff-files -3 >diff-files-3.actual &&
	test_cmp diff-files-3.expect diff-files-3.actual

ok 5 - diff-files -3

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4041-diff-submodule-option.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/sm1/.git/
expecting success of 4041.1 'added submodule': 
	git add sm1 &&
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$head1 (new submodule)
	EOF
	test_cmp expected actual

warning: adding embedded git repository: sm1
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm1
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm1
hint: 
hint: See "git help submodule" for more information.
ok 1 - added submodule

expecting success of 4041.2 'added submodule, set diff.submodule': 
	git config diff.submodule log &&
	git add sm1 &&
	git diff --cached >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$head1 (new submodule)
	EOF
	git config --unset diff.submodule &&
	test_cmp expected actual

ok 2 - added submodule, set diff.submodule

expecting success of 4041.3 '--submodule=short overrides diff.submodule': 
	test_config diff.submodule log &&
	git add sm1 &&
	git diff --submodule=short --cached >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	new file mode 160000
	index 0000000..$head1
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+Subproject commit $fullhead1
	EOF
	test_cmp expected actual

ok 3 - --submodule=short overrides diff.submodule

expecting success of 4041.4 'diff.submodule does not affect plumbing': 
	test_config diff.submodule log &&
	git diff-index -p HEAD >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	new file mode 160000
	index 0000000..$head1
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+Subproject commit $fullhead1
	EOF
	test_cmp expected actual

ok 4 - diff.submodule does not affect plumbing

expecting success of 4041.5 'modified submodule(forward)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	  > Add foo3 ($added foo3)
	EOF
	test_cmp expected actual

ok 5 - modified submodule(forward)

expecting success of 4041.6 'modified submodule(forward)': 
	git diff --submodule=log >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	  > Add foo3 ($added foo3)
	EOF
	test_cmp expected actual

ok 6 - modified submodule(forward)

expecting success of 4041.7 'modified submodule(forward) --submodule': 
	git diff --submodule >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	  > Add foo3 ($added foo3)
	EOF
	test_cmp expected actual

ok 7 - modified submodule(forward) --submodule

expecting success of 4041.8 'modified submodule(forward) --submodule=short': 
	git diff --submodule=short >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	index $head1..$head2 160000
	--- a/sm1
	+++ b/sm1
	@@ -1 +1 @@
	-Subproject commit $fullhead1
	+Subproject commit $fullhead2
	EOF
	test_cmp expected actual

ok 8 - modified submodule(forward) --submodule=short

expecting success of 4041.9 'modified submodule(backward)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head2..$head3 (rewind):
	  < Add foo3 ($added foo3)
	  < Add foo2 ($added foo2)
	EOF
	test_cmp expected actual

ok 9 - modified submodule(backward)

expecting success of 4041.10 'modified submodule(backward and forward)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head2...$head4:
	  > Add foo5 ($added foo5)
	  > Add foo4 ($added foo4)
	  < Add foo3 ($added foo3)
	  < Add foo2 ($added foo2)
	EOF
	test_cmp expected actual

ok 10 - modified submodule(backward and forward)

expecting success of 4041.11 'typechanged submodule(submodule->blob), --cached': 
	git diff --submodule=log --cached >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...0000000 (submodule deleted)
	diff --git a/sm1 b/sm1
	new file mode 100644
	index 0000000..$head5
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+sm1
	EOF
	test_cmp expected actual

ok 11 - typechanged submodule(submodule->blob), --cached

expecting success of 4041.12 'typechanged submodule(submodule->blob)': 
	git diff --submodule=log >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	deleted file mode 100644
	index $head5..0000000
	--- a/sm1
	+++ /dev/null
	@@ -1 +0,0 @@
	-sm1
	Submodule sm1 0000000...$head4 (new submodule)
	EOF
	test_cmp expected actual

ok 12 - typechanged submodule(submodule->blob)

expecting success of 4041.13 'typechanged submodule(submodule->blob)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...0000000 (submodule deleted)
	diff --git a/sm1 b/sm1
	new file mode 100644
	index 0000000..$head5
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+sm1
	EOF
	test_cmp expected actual

ok 13 - typechanged submodule(submodule->blob)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/sm1/.git/
expecting success of 4041.14 'nonexistent commit': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...$head6 (commits not present)
	EOF
	test_cmp expected actual

ok 14 - nonexistent commit

expecting success of 4041.15 'typechanged submodule(blob->submodule)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	deleted file mode 100644
	index $head5..0000000
	--- a/sm1
	+++ /dev/null
	@@ -1 +0,0 @@
	-sm1
	Submodule sm1 0000000...$head6 (new submodule)
	EOF
	test_cmp expected actual

ok 15 - typechanged submodule(blob->submodule)

expecting success of 4041.16 'submodule is up to date': 
	git diff-index -p --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 16 - submodule is up to date

expecting success of 4041.17 'submodule contains untracked content': 
	echo new > sm1/new-file &&
	git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	EOF
	test_cmp expected actual

ok 17 - submodule contains untracked content

expecting success of 4041.18 'submodule contains untracked content (untracked ignored)': 
	git diff-index -p --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 18 - submodule contains untracked content (untracked ignored)

expecting success of 4041.19 'submodule contains untracked content (dirty ignored)': 
	git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 19 - submodule contains untracked content (dirty ignored)

expecting success of 4041.20 'submodule contains untracked content (all ignored)': 
	git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 20 - submodule contains untracked content (all ignored)

expecting success of 4041.21 'submodule contains untracked and modified content': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 contains modified content
	EOF
	test_cmp expected actual

ok 21 - submodule contains untracked and modified content

expecting success of 4041.22 'submodule contains untracked and modified content (untracked ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	EOF
	test_cmp expected actual

ok 22 - submodule contains untracked and modified content (untracked ignored)

expecting success of 4041.23 'submodule contains untracked and modified content (dirty ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 23 - submodule contains untracked and modified content (dirty ignored)

expecting success of 4041.24 'submodule contains untracked and modified content (all ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 24 - submodule contains untracked and modified content (all ignored)

expecting success of 4041.25 'submodule contains modified content': 
	rm -f sm1/new-file &&
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	EOF
	test_cmp expected actual

ok 25 - submodule contains modified content

expecting success of 4041.26 'submodule is modified': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 26 - submodule is modified

expecting success of 4041.27 'modified submodule contains untracked content': 
	echo new > sm1/new-file &&
	git diff-index -p  --ignore-submodules=none --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 27 - modified submodule contains untracked content

expecting success of 4041.28 'modified submodule contains untracked content (untracked ignored)': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 28 - modified submodule contains untracked content (untracked ignored)

expecting success of 4041.29 'modified submodule contains untracked content (dirty ignored)': 
	git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 29 - modified submodule contains untracked content (dirty ignored)

expecting success of 4041.30 'modified submodule contains untracked content (all ignored)': 
	git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 30 - modified submodule contains untracked content (all ignored)

expecting success of 4041.31 'modified submodule contains untracked and modified content': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 contains modified content
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 31 - modified submodule contains untracked and modified content

expecting success of 4041.32 'modified submodule contains untracked and modified content (untracked ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 32 - modified submodule contains untracked and modified content (untracked ignored)

expecting success of 4041.33 'modified submodule contains untracked and modified content (dirty ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 33 - modified submodule contains untracked and modified content (dirty ignored)

expecting success of 4041.34 'modified submodule contains untracked and modified content (all ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
	test_must_be_empty actual

ok 34 - modified submodule contains untracked and modified content (all ignored)

expecting success of 4041.35 'modified submodule contains modified content': 
	rm -f sm1/new-file &&
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	Submodule sm1 $head6..$head8:
	  > change
	EOF
	test_cmp expected actual

ok 35 - modified submodule contains modified content

expecting success of 4041.36 'deleted submodule': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6...0000000 (submodule deleted)
	EOF
	test_cmp expected actual

ok 36 - deleted submodule

expecting success of 4041.37 'create second submodule': 
	test_create_repo sm2 &&
	head7=$(add_file sm2 foo8 foo9) &&
	git add sm2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/sm2/.git/
warning: adding embedded git repository: sm2
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm2
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm2
hint: 
hint: See "git help submodule" for more information.
ok 37 - create second submodule

expecting success of 4041.38 'multiple submodules': 
	git diff-index -p --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6...0000000 (submodule deleted)
	Submodule sm2 0000000...$head7 (new submodule)
	EOF
	test_cmp expected actual

ok 38 - multiple submodules

expecting success of 4041.39 'path filter': 
	git diff-index -p --submodule=log HEAD sm2 >actual &&
	cat >expected <<-EOF &&
	Submodule sm2 0000000...$head7 (new submodule)
	EOF
	test_cmp expected actual

ok 39 - path filter

expecting success of 4041.40 'given commit': 
	git diff-index -p --submodule=log HEAD^ >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6...0000000 (submodule deleted)
	Submodule sm2 0000000...$head7 (new submodule)
	EOF
	test_cmp expected actual

ok 40 - given commit

expecting success of 4041.41 'given commit --submodule': 
	git diff-index -p --submodule HEAD^ >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6...0000000 (submodule deleted)
	Submodule sm2 0000000...$head7 (new submodule)
	EOF
	test_cmp expected actual

ok 41 - given commit --submodule

expecting success of 4041.42 'given commit --submodule=short': 
	git diff-index -p --submodule=short HEAD^ >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	deleted file mode 160000
	index $head6..0000000
	--- a/sm1
	+++ /dev/null
	@@ -1 +0,0 @@
	-Subproject commit $fullhead6
	diff --git a/sm2 b/sm2
	new file mode 160000
	index 0000000..$head7
	--- /dev/null
	+++ b/sm2
	@@ -0,0 +1 @@
	+Subproject commit $fullhead7
	EOF
	test_cmp expected actual

ok 42 - given commit --submodule=short

expecting success of 4041.43 'setup .git file for sm2': 
	(cd sm2 &&
	 REAL="$(pwd)/../.real" &&
	 mv .git "$REAL" &&
	 echo "gitdir: $REAL" >.git)

ok 43 - setup .git file for sm2

expecting success of 4041.44 'diff --submodule with .git file': 
	git diff --submodule HEAD^ >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head6...0000000 (submodule deleted)
	Submodule sm2 0000000...$head7 (new submodule)
	EOF
	test_cmp expected actual

ok 44 - diff --submodule with .git file

expecting success of 4041.45 'diff --submodule with objects referenced by alternates': 
	mkdir sub_alt &&
	(cd sub_alt &&
		git init &&
		echo a >a &&
		git add a &&
		git commit -m a
	) &&
	mkdir super &&
	(cd super &&
		git clone -s ../sub_alt sub &&
		git init &&
		git add sub &&
		git commit -m "sub a"
	) &&
	(cd sub_alt &&
		sha1_before=$(git rev-parse --short HEAD) &&
		echo b >b &&
		git add b &&
		git commit -m b &&
		sha1_after=$(git rev-parse --short HEAD) &&
		{
			echo "Submodule sub $sha1_before..$sha1_after:" &&
			echo "  > b"
		} >../expected
	) &&
	(cd super &&
		(cd sub &&
			git fetch &&
			git checkout origin/main
		) &&
		git diff --submodule > ../actual
	) &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/sub_alt/.git/
[main (root-commit) b7442a0] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Cloning into 'sub'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/super/.git/
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) d9c5753] sub a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
[main 8e02ef5] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
From /<<PKGBUILDDIR>>/t/trash directory.t4041-diff-submodule-option/super/../sub_alt
   b7442a0..8e02ef5  main       -> origin/main
Note: switching to 'origin/main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8e02ef5 b
ok 45 - diff --submodule with objects referenced by alternates

# passed all 45 test(s)
1..45
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4045-diff-relative.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4045-diff-relative/.git/
expecting success of 4045.1 'setup': 
	git commit --allow-empty -m empty &&
	echo content >file1 &&
	mkdir subdir &&
	echo other content >subdir/file2 &&
	blob_file1=$(git hash-object file1) &&
	blob_file2=$(git hash-object subdir/file2) &&
	git add . &&
	git commit -m one

[master (root-commit) f4030cd] empty
 Author: A U Thor <author@example.com>
[master e528d0d] one
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 subdir/file2
ok 1 - setup

expecting success of 4045.2 '-p --relative=subdir/': 
		git -C '.' diff -p --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 2 - -p --relative=subdir/

expecting success of 4045.3 '-p --relative=subdir': 
		git -C '.' diff -p --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 3 - -p --relative=subdir

expecting success of 4045.4 '-p --relative': 
		git -C 'subdir' diff -p --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 4 - -p --relative

expecting success of 4045.5 '-p --relative=sub': 
		git -C '.' diff -p --relative=sub HEAD^ >actual &&
		test_cmp expected actual
	
ok 5 - -p --relative=sub

expecting success of 4045.6 '--numstat --relative=subdir/': 
		echo '1	0	file2' >expected &&
		git -C '.' diff --numstat --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 6 - --numstat --relative=subdir/

expecting success of 4045.7 '--numstat --relative=subdir': 
		echo '1	0	file2' >expected &&
		git -C '.' diff --numstat --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 7 - --numstat --relative=subdir

expecting success of 4045.8 '--numstat --relative': 
		echo '1	0	file2' >expected &&
		git -C 'subdir' diff --numstat --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 8 - --numstat --relative

expecting success of 4045.9 '--numstat --relative=sub': 
		echo '1	0	dir/file2' >expected &&
		git -C '.' diff --numstat --relative=sub HEAD^ >actual &&
		test_cmp expected actual
	
ok 9 - --numstat --relative=sub

expecting success of 4045.10 '--stat --relative=subdir/': 
		git -C '.' diff --stat --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 10 - --stat --relative=subdir/

expecting success of 4045.11 '--stat --relative=subdir': 
		git -C '.' diff --stat --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 11 - --stat --relative=subdir

expecting success of 4045.12 '--stat --relative': 
		git -C 'subdir' diff --stat --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 12 - --stat --relative

expecting success of 4045.13 '--stat --relative=sub': 
		git -C '.' diff --stat --relative=sub HEAD^ >actual &&
		test_cmp expected actual
	
ok 13 - --stat --relative=sub

expecting success of 4045.14 '--raw --relative=subdir/': 
		git -C '.' diff --no-abbrev --raw --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 14 - --raw --relative=subdir/

expecting success of 4045.15 '--raw --relative=subdir': 
		git -C '.' diff --no-abbrev --raw --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 15 - --raw --relative=subdir

expecting success of 4045.16 '--raw --relative': 
		git -C 'subdir' diff --no-abbrev --raw --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 16 - --raw --relative

expecting success of 4045.17 '--raw --relative=sub': 
		git -C '.' diff --no-abbrev --raw --relative=sub HEAD^ >actual &&
		test_cmp expected actual
	
ok 17 - --raw --relative=sub

expecting success of 4045.18 'config diff.relative false -p ': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative false &&
		git -C '.' diff -p  HEAD^ >actual &&
		test_cmp expected actual
	
ok 18 - config diff.relative false -p 

expecting success of 4045.19 'config diff.relative true -p --no-relative': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative true &&
		git -C '.' diff -p --no-relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 19 - config diff.relative true -p --no-relative

expecting success of 4045.20 'config diff.relative false -p --no-relative': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative false &&
		git -C '.' diff -p --no-relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 20 - config diff.relative false -p --no-relative

expecting success of 4045.21 'config diff.relative false -p ': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative false &&
		git -C 'subdir' diff -p  HEAD^ >actual &&
		test_cmp expected actual
	
ok 21 - config diff.relative false -p 

expecting success of 4045.22 'config diff.relative true -p --no-relative': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative true &&
		git -C 'subdir' diff -p --no-relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 22 - config diff.relative true -p --no-relative

expecting success of 4045.23 'config diff.relative false -p --no-relative': 
		short_blob_file1=$(git rev-parse --short d95f3ad14dee633a758d2e331151e950dd13e4ed) &&
		short_blob_file2=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file1 b/file1
		new file mode 100644
		index 0000000..$short_blob_file1
		--- /dev/null
		+++ b/file1
		@@ -0,0 +1 @@
		+content
		diff --git a/subdir/file2 b/subdir/file2
		new file mode 100644
		index 0000000..$short_blob_file2
		--- /dev/null
		+++ b/subdir/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative false &&
		git -C 'subdir' diff -p --no-relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 23 - config diff.relative false -p --no-relative

expecting success of 4045.24 'config diff.relative false -p --relative=subdir/': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative false &&
		git -C '.' diff -p --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 24 - config diff.relative false -p --relative=subdir/

expecting success of 4045.25 'config diff.relative false -p --relative=subdir': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative false &&
		git -C '.' diff -p --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 25 - config diff.relative false -p --relative=subdir

expecting success of 4045.26 'config diff.relative true -p --relative=subdir/': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative true &&
		git -C '.' diff -p --relative=subdir/ HEAD^ >actual &&
		test_cmp expected actual
	
ok 26 - config diff.relative true -p --relative=subdir/

expecting success of 4045.27 'config diff.relative true -p --relative=subdir': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative true &&
		git -C '.' diff -p --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 27 - config diff.relative true -p --relative=subdir

expecting success of 4045.28 'config diff.relative false -p --relative': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative false &&
		git -C 'subdir' diff -p --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 28 - config diff.relative false -p --relative

expecting success of 4045.29 'config diff.relative true -p --relative': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative true &&
		git -C 'subdir' diff -p --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 29 - config diff.relative true -p --relative

expecting success of 4045.30 'config diff.relative true -p ': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative true &&
		git -C 'subdir' diff -p  HEAD^ >actual &&
		test_cmp expected actual
	
ok 30 - config diff.relative true -p 

expecting success of 4045.31 'config diff.relative false -p --no-relative --relative': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative false &&
		git -C 'subdir' diff -p --no-relative --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 31 - config diff.relative false -p --no-relative --relative

expecting success of 4045.32 'config diff.relative true -p --no-relative --relative': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C subdir diff.relative true &&
		git -C 'subdir' diff -p --no-relative --relative HEAD^ >actual &&
		test_cmp expected actual
	
ok 32 - config diff.relative true -p --no-relative --relative

expecting success of 4045.33 'config diff.relative false -p --no-relative --relative=subdir': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative false &&
		git -C '.' diff -p --no-relative --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 33 - config diff.relative false -p --no-relative --relative=subdir

expecting success of 4045.34 'config diff.relative true -p --no-relative --relative=subdir': 
		short_blob=$(git rev-parse --short 25c05ef3639d2d270e7fe765a67668f098092bc5) &&
		cat >expected <<-EOF &&
		diff --git a/file2 b/file2
		new file mode 100644
		index 0000000..$short_blob
		--- /dev/null
		+++ b/file2
		@@ -0,0 +1 @@
		+other content
		EOF
		test_config -C . diff.relative true &&
		git -C '.' diff -p --no-relative --relative=subdir HEAD^ >actual &&
		test_cmp expected actual
	
ok 34 - config diff.relative true -p --no-relative --relative=subdir

expecting success of 4045.35 'setup diff --relative unmerged': 
	test_commit zero file0 &&
	test_commit base subdir/file0 &&
	git switch -c br1 &&
	test_commit one file0 &&
	test_commit sub1 subdir/file0 &&
	git switch -c br2 base &&
	test_commit two file0 &&
	git switch -c br3 &&
	test_commit sub3 subdir/file0

[master 8079767] zero
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0
[master 32ab62b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/file0
Switched to a new branch 'br1'
[br1 02602ea] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[br1 7cf214c] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'br2'
[br2 a52bcea] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'br3'
[br3 b0bcae9] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 35 - setup diff --relative unmerged

expecting success of 4045.36 'diff --relative without change in subdir': 
	git switch br2 &&
	test_when_finished "git merge --abort" &&
	test_must_fail git merge one &&
	git -C subdir diff --relative >out &&
	test_must_be_empty out &&
	git -C subdir diff --relative --name-only >out &&
	test_must_be_empty out

Switched to branch 'br2'
Auto-merging file0
CONFLICT (content): Merge conflict in file0
Automatic merge failed; fix conflicts and then commit the result.
ok 36 - diff --relative without change in subdir

expecting success of 4045.37 'diff --relative --name-only with change in subdir': 
	git switch br3 &&
	test_when_finished "git merge --abort" &&
	test_must_fail git merge sub1 &&
	test_write_lines file0 file0 >expected &&
	git -C subdir diff --relative --name-only >out &&
	test_cmp expected out

Switched to branch 'br3'
Auto-merging file0
CONFLICT (content): Merge conflict in file0
Auto-merging subdir/file0
CONFLICT (content): Merge conflict in subdir/file0
Automatic merge failed; fix conflicts and then commit the result.
ok 37 - diff --relative --name-only with change in subdir

checking known breakage of 4045.38 'diff --relative with change in subdir': 
	git switch br3 &&
	br1_blob=$(git rev-parse --short --verify br1:subdir/file0) &&
	br3_blob=$(git rev-parse --short --verify br3:subdir/file0) &&
	test_when_finished "git merge --abort" &&
	test_must_fail git merge br1 &&
	cat >expected <<-EOF &&
	diff --cc file0
	index $br3_blob,$br1_blob..0000000
	--- a/file0
	+++ b/file0
	@@@ -1,1 -1,1 +1,5 @@@
	++<<<<<<< HEAD
	 +sub3
	++=======
	+ sub1
	++>>>>>>> br1
	EOF
	git -C subdir diff --relative >out &&
	test_cmp expected out

Already on 'br3'
Auto-merging file0
CONFLICT (content): Merge conflict in file0
Auto-merging subdir/file0
CONFLICT (content): Merge conflict in subdir/file0
Automatic merge failed; fix conflicts and then commit the result.
--- expected	2022-12-28 07:44:28.847535447 +0000
+++ out	2022-12-28 07:44:28.882536735 +0000
@@ -1,7 +1,7 @@
-diff --cc file0
+diff --cc subdir/file0
 index b8c2280,48df0cb..0000000
---- a/file0
-+++ b/file0
+--- a/subdir/file0
++++ b/subdir/file0
 @@@ -1,1 -1,1 +1,5 @@@
 ++<<<<<<< HEAD
  +sub3
not ok 38 - diff --relative with change in subdir # TODO known breakage

# still have 1 known breakage(s)
# passed all remaining 37 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4049-diff-stat-count.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4049-diff-stat-count/.git/
expecting success of 4049.1 'setup': 
	>a &&
	>b &&
	>c &&
	>d &&
	git add a b c d &&
	git commit -m initial

[master (root-commit) 000d1c1] initial
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 d
ok 1 - setup

expecting success of 4049.2 'mode-only change show as a 0-line change': 
	git reset --hard &&
	test_chmod +x b d &&
	echo a >a &&
	echo c >c &&
	cat >expect <<-\EOF &&
	 a | 1 +
	 b | 0
	 ...
	 4 files changed, 2 insertions(+)
	EOF
	git diff --stat --stat-count=2 HEAD >actual &&
	test_cmp expect actual

HEAD is now at 000d1c1 initial
ok 2 - mode-only change show as a 0-line change

expecting success of 4049.3 'binary changes do not count in lines': 
	git reset --hard &&
	echo a >a &&
	echo c >c &&
	cat "$TEST_DIRECTORY"/test-binary-1.png >d &&
	cat >expect <<-\EOF &&
	 a | 1 +
	 c | 1 +
	 ...
	 3 files changed, 2 insertions(+)
	EOF
	git diff --stat --stat-count=2 >actual &&
	test_cmp expect actual

HEAD is now at 000d1c1 initial
ok 3 - binary changes do not count in lines

expecting success of 4049.4 'exclude unmerged entries from total file count': 
	git reset --hard &&
	echo a >a &&
	echo b >b &&
	git ls-files -s a >x &&
	git rm -f d &&
	for stage in 1 2 3
	do
		sed -e "s/ 0	a/ $stage	d/" x || return 1
	done |
	git update-index --index-info &&
	echo d >d &&
	cat >expect <<-\EOF &&
	 a | 1 +
	 b | 1 +
	 ...
	 3 files changed, 3 insertions(+)
	EOF
	git diff --stat --stat-count=2 >actual &&
	test_cmp expect actual

HEAD is now at 000d1c1 initial
rm 'd'
ok 4 - exclude unmerged entries from total file count

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4038-diff-combined.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4038-diff-combined/.git/
expecting success of 4038.1 'setup': 
	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&

	git branch withone &&
	git branch sansone &&

	git checkout withone &&
	setup_helper one withone sidewithone &&

	git checkout sansone &&
	setup_helper "" sansone sidesansone

[main (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to branch 'withone'
[withone 61ad3a5] withone
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
Switched to branch 'sidewithone'
[sidewithone 04e7a65] sidewithone
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
[sidewithone 70465e9] merge withone into sidewithone
 Author: A U Thor <author@example.com>
Switched to branch 'sansone'
[sansone e4cdba2] sansone
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
Switched to branch 'sidesansone'
[sidesansone d31bb1b] sidesansone
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
[sidesansone a02eb57] merge sansone into sidesansone
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4038.2 'check combined output (1)': 
	git show sidewithone -- >sidewithone &&
	verify_helper sidewithone

ok 2 - check combined output (1)

expecting success of 4038.3 'check combined output (1) with git diff <rev>^!': 
	git diff sidewithone^! -- >sidewithone &&
	verify_helper sidewithone

ok 3 - check combined output (1) with git diff <rev>^!

expecting success of 4038.4 'check combined output (2)': 
	git show sidesansone -- >sidesansone &&
	verify_helper sidesansone

ok 4 - check combined output (2)

expecting success of 4038.5 'check combined output (2) with git diff <rev>^!': 
	git diff sidesansone^! -- >sidesansone &&
	verify_helper sidesansone

ok 5 - check combined output (2) with git diff <rev>^!

expecting success of 4038.6 'diagnose truncated file': 
	>file &&
	git add file &&
	git commit --amend -C HEAD &&
	git show >out &&
	grep "diff --cc file" out

[sidesansone 3fd518e] merge sansone into sidesansone
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
diff --cc file
ok 6 - diagnose truncated file

expecting success of 4038.7 'setup for --cc --raw': 
	blob=$(echo file | git hash-object --stdin -w) &&
	base_tree=$(echo "100644 blob $blob	file" | git mktree) &&
	trees= &&
	for i in $(test_seq 1 40)
	do
		blob=$(echo file$i | git hash-object --stdin -w) &&
		trees="$trees$(echo "100644 blob $blob	file" | git mktree)$LF" || return 1
	done

ok 7 - setup for --cc --raw

expecting success of 4038.8 'check --cc --raw with four trees': 
	four_trees=$(echo "$trees" | sed -e 4q) &&
	git diff --cc --raw $four_trees $base_tree >out &&
	# Check for four leading colons in the output:
	grep "^::::[^:]" out

::::100644 100644 100644 100644 100644 6c493ff 7c8ac2f bfd6a65 f73f309 e212970 MMMM	file
ok 8 - check --cc --raw with four trees

expecting success of 4038.9 'check --cc --raw with forty trees': 
	git diff --cc --raw $trees $base_tree >out &&
	# Check for forty leading colons in the output:
	grep "^::::::::::::::::::::::::::::::::::::::::[^:]" out

::::::::::::::::::::::::::::::::::::::::100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 100644 6c493ff 7c8ac2f bfd6a65 4806cb9 8d80099 c52d680 efe3974 2050b92 07205b5 e1aa36f dd63810 d7a00d8 b5ac9e5 c76bce1 1d22d08 1b22815 10a5e40 e78cb60 1b9d597 e4c0bb4 536442d 9e692b7 02e835e 4bed7f0 ae12143 7202624 4c12e08 33b3d68 a633d0e a1d5983 c1288dc eb6edd8 769381d 9089a6c 83be741 3a76ef8 67335ff 834f228 62e8e47 f73f309 e212970 MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM	file
ok 9 - check --cc --raw with forty trees

expecting success of 4038.10 'setup combined ignore spaces': 
	git checkout main &&
	>test &&
	git add test &&
	git commit -m initial &&

	tr -d Q <<-\EOF >test &&
	always coalesce
	eol space coalesce Q
	space  change coalesce
	all spa ces coalesce
	eol spaces Q
	space  change
	all spa ces
	EOF
	git commit -m "test space change" -a &&

	git checkout -b side HEAD^ &&
	tr -d Q <<-\EOF >test &&
	always coalesce
	eol space coalesce
	space change coalesce
	all spaces coalesce
	eol spaces
	space change
	all spaces
	EOF
	git commit -m "test other space changes" -a &&

	test_must_fail git merge main &&
	tr -d Q <<-\EOF >test &&
	eol spaces Q
	space  change
	all spa ces
	EOF
	git commit -m merged -a

Switched to branch 'main'
[main ac9d179] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test
[main c5936ee] test space change
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
Switched to a new branch 'side'
[side 29c6253] test other space changes
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
[side 373c494] merged
 Author: A U Thor <author@example.com>
ok 10 - setup combined ignore spaces

expecting success of 4038.11 'check combined output (no ignore space)': 
	git show >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	--always coalesce
	- eol space coalesce
	- space change coalesce
	- all spaces coalesce
	- eol spaces
	- space change
	- all spaces
	 -eol space coalesce Q
	 -space  change coalesce
	 -all spa ces coalesce
	+ eol spaces Q
	+ space  change
	+ all spa ces
	EOF
	compare_diff_patch expected actual

ok 11 - check combined output (no ignore space)

expecting success of 4038.12 'check combined output (ignore space at eol)': 
	git show --ignore-space-at-eol >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	--always coalesce
	--eol space coalesce
	- space change coalesce
	- all spaces coalesce
	 -space  change coalesce
	 -all spa ces coalesce
	  eol spaces Q
	- space change
	- all spaces
	+ space  change
	+ all spa ces
	EOF
	compare_diff_patch expected actual

ok 12 - check combined output (ignore space at eol)

expecting success of 4038.13 'check combined output (ignore space change)': 
	git show -b >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	--always coalesce
	--eol space coalesce
	--space change coalesce
	- all spaces coalesce
	 -all spa ces coalesce
	  eol spaces Q
	  space  change
	- all spaces
	+ all spa ces
	EOF
	compare_diff_patch expected actual

ok 13 - check combined output (ignore space change)

expecting success of 4038.14 'check combined output (ignore all spaces)': 
	git show -w >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	--always coalesce
	--eol space coalesce
	--space change coalesce
	--all spaces coalesce
	  eol spaces Q
	  space  change
	  all spa ces
	EOF
	compare_diff_patch expected actual

ok 14 - check combined output (ignore all spaces)

expecting success of 4038.15 'combine diff coalesce simple': 
	>test &&
	git add test &&
	git commit -m initial &&
	test_seq 4 >test &&
	git commit -a -m empty1 &&
	git branch side1 &&
	git checkout HEAD^ &&
	test_seq 5 >test &&
	git commit -a -m empty2 &&
	test_must_fail git merge side1 &&
	>test &&
	git commit -a -m merge &&
	git show >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	--1
	--2
	--3
	--4
	- 5
	EOF
	compare_diff_patch expected actual

[side ca25ef5] initial
 Author: A U Thor <author@example.com>
 1 file changed, 3 deletions(-)
[side 2f38b7d] empty1
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ca25ef5 initial
[detached HEAD a65ae3c] empty2
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD 8ab2551] merge
 Author: A U Thor <author@example.com>
ok 15 - combine diff coalesce simple

expecting success of 4038.16 'combine diff coalesce tricky': 
	>test &&
	git add test &&
	git commit -m initial --allow-empty &&
	cat <<-\EOF >test &&
	3
	1
	2
	3
	4
	EOF
	git commit -a -m empty1 &&
	git branch -f side1 &&
	git checkout HEAD^ &&
	cat <<-\EOF >test &&
	1
	3
	5
	4
	EOF
	git commit -a -m empty2 &&
	git branch -f side2 &&
	test_must_fail git merge side1 &&
	>test &&
	git commit -a -m merge &&
	git show >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	 -3
	--1
	 -2
	--3
	- 5
	--4
	EOF
	compare_diff_patch expected actual &&
	git checkout -f side1 &&
	test_must_fail git merge side2 &&
	>test &&
	git commit -a -m merge &&
	git show >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	- 3
	--1
	- 2
	--3
	 -5
	--4
	EOF
	compare_diff_patch expected actual

[detached HEAD 567514d] initial
 Author: A U Thor <author@example.com>
[detached HEAD edcd94a] empty1
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Previous HEAD position was edcd94a empty1
HEAD is now at 567514d initial
[detached HEAD 4e10910] empty2
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD 2f37ae9] merge
 Author: A U Thor <author@example.com>
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2f37ae9 merge

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2f37ae9

Switched to branch 'side1'
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
[side1 33886e5] merge
 Author: A U Thor <author@example.com>
ok 16 - combine diff coalesce tricky

checking known breakage of 4038.17 'combine diff coalesce three parents': 
	>test &&
	git add test &&
	git commit -m initial --allow-empty &&
	cat <<-\EOF >test &&
	3
	1
	2
	3
	4
	EOF
	git commit -a -m empty1 &&
	git checkout -B side1 &&
	git checkout HEAD^ &&
	cat <<-\EOF >test &&
	1
	3
	7
	5
	4
	EOF
	git commit -a -m empty2 &&
	git branch -f side2 &&
	git checkout HEAD^ &&
	cat <<-\EOF >test &&
	3
	1
	6
	5
	4
	EOF
	git commit -a -m empty3 &&
	>test &&
	git add test &&
	TREE=$(git write-tree) &&
	COMMIT=$(git commit-tree -p HEAD -p side1 -p side2 -m merge $TREE) &&
	git show $COMMIT >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	-- 3
	---1
	-  6
	 - 2
	 --3
	  -7
	- -5
	---4
	EOF
	compare_diff_patch expected actual

[side1 562f35c] initial
 Author: A U Thor <author@example.com>
[side1 f31b6a2] empty1
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Reset branch 'side1'
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 562f35c initial
[detached HEAD 0cc2d14] empty2
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Previous HEAD position was 0cc2d14 empty2
HEAD is now at 562f35c initial
[detached HEAD 22de592] empty3
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
--- .tmp-1	2022-12-28 07:44:26.732457661 +0000
+++ .tmp-2	2022-12-28 07:44:26.742458029 +0000
@@ -1,8 +1,9 @@
 -- 3
 ---1
 -  6
+-  5
  - 2
  --3
   -7
-- -5
+  -5
 ---4
not ok 17 - combine diff coalesce three parents # TODO known breakage

expecting success of 4038.18 'combine diff missing delete bug': 
	git commit -m initial --allow-empty &&
	cat <<-\EOF >test &&
	1
	2
	3
	4
	EOF
	git add test &&
	git commit -a -m side1 &&
	git checkout -B side1 &&
	git checkout HEAD^ &&
	cat <<-\EOF >test &&
	0
	1
	2
	3
	4modified
	EOF
	git add test &&
	git commit -m side2 &&
	git branch -f side2 &&
	test_must_fail git merge --no-commit side1 &&
	cat <<-\EOF >test &&
	1
	2
	3
	4modified
	EOF
	git add test &&
	git commit -a -m merge &&
	git diff-tree -c -p HEAD >actual.tmp &&
	sed -e "1,/^@@@/d" < actual.tmp >actual &&
	tr -d Q <<-\EOF >expected &&
	- 0
	  1
	  2
	  3
	 -4
	 +4modified
	EOF
	compare_diff_patch expected actual

[detached HEAD 78a948b] initial
 Author: A U Thor <author@example.com>
 1 file changed, 5 deletions(-)
[detached HEAD dd67d51] side1
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
Switched to and reset branch 'side1'
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 78a948b initial
[detached HEAD bb8b62e] side2
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD 9dfd023] merge
 Author: A U Thor <author@example.com>
ok 18 - combine diff missing delete bug

expecting success of 4038.19 'combine diff gets tree sorting right': 
	# create a directory and a file that sort differently in trees
	# versus byte-wise (implied "/" sorts after ".")
	git checkout -f main &&
	mkdir foo &&
	echo base >foo/one &&
	echo base >foo/two &&
	echo base >foo.ext &&
	git add foo foo.ext &&
	git commit -m base &&

	# one side modifies a file in the directory, along with the root
	# file...
	echo main >foo/one &&
	echo main >foo.ext &&
	git commit -a -m main &&

	# the other side modifies the other file in the directory
	git checkout -b other HEAD^ &&
	echo other >foo/two &&
	git commit -a -m other &&

	# And now we merge. The files in the subdirectory will resolve cleanly,
	# meaning that a combined diff will not find them interesting. But it
	# will find the tree itself interesting, because it had to be merged.
	git checkout main &&
	git merge other &&

	printf "MM\tfoo\n" >expect &&
	git diff-tree -c --name-status -t HEAD >actual.tmp &&
	sed 1d <actual.tmp >actual &&
	test_cmp expect actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9dfd023 merge

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9dfd023

Switched to branch 'main'
[main eeef54b] base
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 foo.ext
 create mode 100644 foo/one
 create mode 100644 foo/two
[main 181761f] main
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to a new branch 'other'
[other 387c20f] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Merge made by the 'ort' strategy.
 foo/two | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - combine diff gets tree sorting right

expecting success of 4038.20 'setup for --combined-all-paths': 
	git branch side1c &&
	git branch side2c &&
	git checkout side1c &&
	test_seq 1 10 >filename-side1c &&
	side1cf=$(git hash-object filename-side1c) &&
	git add filename-side1c &&
	git commit -m with &&
	git checkout side2c &&
	test_seq 1 9 >filename-side2c &&
	echo ten >>filename-side2c &&
	side2cf=$(git hash-object filename-side2c) &&
	git add filename-side2c &&
	git commit -m iam &&
	git checkout -b mergery side1c &&
	git merge --no-commit side2c &&
	git rm filename-side1c &&
	echo eleven >>filename-side2c &&
	git mv filename-side2c filename-merged &&
	mergedf=$(git hash-object filename-merged) &&
	git add filename-merged &&
	git commit

Switched to branch 'side1c'
[side1c 7d5dd18] with
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 filename-side1c
Switched to branch 'side2c'
[side2c aa5d645] iam
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 filename-side2c
Switched to a new branch 'mergery'
Automatic merge went well; stopped before committing as requested
rm 'filename-side1c'
[mergery 187df53] Merge branch 'side2c' into mergery
 Author: A U Thor <author@example.com>
ok 20 - setup for --combined-all-paths

expecting success of 4038.21 '--combined-all-paths and --raw': 
	cat <<-EOF >expect &&
	::100644 100644 100644 $side1cf $side2cf $mergedf RR	filename-side1c	filename-side2c	filename-merged
	EOF
	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp &&
	sed 1d <actual.tmp >actual &&
	test_cmp expect actual

ok 21 - --combined-all-paths and --raw

expecting success of 4038.22 '--combined-all-paths and --cc': 
	cat <<-\EOF >expect &&
	--- a/filename-side1c
	--- a/filename-side2c
	+++ b/filename-merged
	EOF
	git diff-tree --cc -M --combined-all-paths HEAD >actual.tmp &&
	grep ^[-+][-+][-+] <actual.tmp >actual &&
	test_cmp expect actual

ok 22 - --combined-all-paths and --cc

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 4038.23 'setup for --combined-all-paths with funny names': 
	git branch side1d &&
	git branch side2d &&
	git checkout side1d &&
	test_seq 1 10 >"$(printf "file\twith\ttabs")" &&
	git add file* &&
	side1df=$(git hash-object *tabs) &&
	git commit -m with &&
	git checkout side2d &&
	test_seq 1 9 >"$(printf "i\tam\ttabbed")" &&
	echo ten >>"$(printf "i\tam\ttabbed")" &&
	git add *tabbed &&
	side2df=$(git hash-object *tabbed) &&
	git commit -m iam &&
	git checkout -b funny-names-mergery side1d &&
	git merge --no-commit side2d &&
	git rm *tabs &&
	echo eleven >>"$(printf "i\tam\ttabbed")" &&
	git mv "$(printf "i\tam\ttabbed")" "$(printf "fickle\tnaming")" &&
	git add fickle* &&
	headf=$(git hash-object fickle*) &&
	git commit &&
	head=$(git rev-parse HEAD)

Switched to branch 'side1d'
[side1d 5a91728] with
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 "file\twith\ttabs"
Switched to branch 'side2d'
[side2d 794a3e3] iam
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 "i\tam\ttabbed"
Switched to a new branch 'funny-names-mergery'
Automatic merge went well; stopped before committing as requested
rm 'file	with	tabs'
[funny-names-mergery 371ce66] Merge branch 'side2d' into funny-names-mergery
 Author: A U Thor <author@example.com>
ok 23 - setup for --combined-all-paths with funny names

expecting success of 4038.24 '--combined-all-paths and --raw and funny names': 
	cat <<-EOF >expect &&
	::100644 100644 100644 $side1df $side2df $headf RR	"file\twith\ttabs"	"i\tam\ttabbed"	"fickle\tnaming"
	EOF
	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp &&
	sed 1d <actual.tmp >actual &&
	test_cmp expect actual

ok 24 - --combined-all-paths and --raw and funny names

expecting success of 4038.25 '--combined-all-paths and --raw -and -z and funny names': 
	printf "$head\0::100644 100644 100644 $side1df $side2df $headf RR\0file\twith\ttabs\0i\tam\ttabbed\0fickle\tnaming\0" >expect &&
	git diff-tree -c -M --raw --combined-all-paths -z HEAD >actual &&
	test_cmp expect actual

ok 25 - --combined-all-paths and --raw -and -z and funny names

expecting success of 4038.26 '--combined-all-paths and --cc and funny names': 
	cat <<-\EOF >expect &&
	--- "a/file\twith\ttabs"
	--- "a/i\tam\ttabbed"
	+++ "b/fickle\tnaming"
	EOF
	git diff-tree --cc -M --combined-all-paths HEAD >actual.tmp &&
	grep ^[-+][-+][-+] <actual.tmp >actual &&
	test_cmp expect actual

ok 26 - --combined-all-paths and --cc and funny names

# still have 1 known breakage(s)
# passed all remaining 25 test(s)
1..26
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4048-diff-combined-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4048-diff-combined-binary/.git/
expecting success of 4048.1 'setup binary merge conflict': 
	echo oneQ1 | q_to_nul >binary &&
	git add binary &&
	git commit -m one &&
	echo twoQ2 | q_to_nul >binary &&
	git commit -a -m two &&
	two=$(git rev-parse --short HEAD:binary) &&
	git checkout -b branch-binary HEAD^ &&
	echo threeQ3 | q_to_nul >binary &&
	git commit -a -m three &&
	three=$(git rev-parse --short HEAD:binary) &&
	test_must_fail git merge main &&
	echo resolvedQhooray | q_to_nul >binary &&
	git commit -a -m resolved &&
	res=$(git rev-parse --short HEAD:binary)

[main (root-commit) 4aaee60] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 binary
[main 37524dd] two
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Switched to a new branch 'branch-binary'
[branch-binary f388a1d] three
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
warning: Cannot merge binary files: binary (HEAD vs. main)
Auto-merging binary
CONFLICT (content): Merge conflict in binary
Automatic merge failed; fix conflicts and then commit the result.
[branch-binary bc3cee3] resolved
 Author: A U Thor <author@example.com>
ok 1 - setup binary merge conflict

expecting success of 4048.2 'diff -m indicates binary-ness': 
	git show --format=%s -m >actual &&
	test_cmp expect actual

ok 2 - diff -m indicates binary-ness

expecting success of 4048.3 'diff -c indicates binary-ness': 
	git show --format=%s -c >actual &&
	test_cmp expect actual

ok 3 - diff -c indicates binary-ness

expecting success of 4048.4 'diff --cc indicates binary-ness': 
	git show --format=%s --cc >actual &&
	test_cmp expect actual

ok 4 - diff --cc indicates binary-ness

expecting success of 4048.5 'setup non-binary with binary attribute': 
	git checkout main &&
	test_commit one text &&
	test_commit two text &&
	two=$(git rev-parse --short HEAD:text) &&
	git checkout -b branch-text HEAD^ &&
	test_commit three text &&
	three=$(git rev-parse --short HEAD:text) &&
	test_must_fail git merge main &&
	test_commit resolved text &&
	res=$(git rev-parse --short HEAD:text) &&
	echo text -diff >.gitattributes

Switched to branch 'main'
[main faa5b8e] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 text
[main 84c76a1] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch-text'
[branch-text 9b74371] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging text
CONFLICT (content): Merge conflict in text
Automatic merge failed; fix conflicts and then commit the result.
[branch-text c916fed] resolved
 Author: A U Thor <author@example.com>
ok 5 - setup non-binary with binary attribute

expecting success of 4048.6 'diff -m respects binary attribute': 
	git show --format=%s -m >actual &&
	test_cmp expect actual

ok 6 - diff -m respects binary attribute

expecting success of 4048.7 'diff -c respects binary attribute': 
	git show --format=%s -c >actual &&
	test_cmp expect actual

ok 7 - diff -c respects binary attribute

expecting success of 4048.8 'diff --cc respects binary attribute': 
	git show --format=%s --cc >actual &&
	test_cmp expect actual

ok 8 - diff --cc respects binary attribute

expecting success of 4048.9 'setup textconv attribute': 
	echo "text diff=upcase" >.gitattributes &&
	git config diff.upcase.textconv "tr a-z A-Z <"

ok 9 - setup textconv attribute

expecting success of 4048.10 'diff -m respects textconv attribute': 
	git show --format=%s -m >actual &&
	test_cmp expect actual

ok 10 - diff -m respects textconv attribute

expecting success of 4048.11 'diff -c respects textconv attribute': 
	git show --format=%s -c >actual &&
	test_cmp expect actual

ok 11 - diff -c respects textconv attribute

expecting success of 4048.12 'diff --cc respects textconv attribute': 
	git show --format=%s --cc >actual &&
	test_cmp expect actual

ok 12 - diff --cc respects textconv attribute

expecting success of 4048.13 'diff-tree plumbing does not respect textconv': 
	git diff-tree HEAD -c -p >full &&
	tail -n +2 full >actual &&
	test_cmp expect actual

ok 13 - diff-tree plumbing does not respect textconv

expecting success of 4048.14 'diff --cc respects textconv on worktree file': 
	git reset --hard HEAD^ &&
	test_must_fail git merge main &&
	git diff >actual &&
	test_cmp expect actual

HEAD is now at 9b74371 three
Auto-merging text
CONFLICT (content): Merge conflict in text
Automatic merge failed; fix conflicts and then commit the result.
ok 14 - diff --cc respects textconv on worktree file

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4050-diff-histogram.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4050-diff-histogram/.git/
expecting success of 4050.1 'histogram diff': 
		test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&
		test_cmp expect output
	
ok 1 - histogram diff

expecting success of 4050.2 'histogram diff output is valid': 
		mv file2 expect &&
		git apply < output &&
		test_cmp expect file2
	
ok 2 - histogram diff output is valid

expecting success of 4050.3 'completely different files': 
		test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&
		test_cmp expect output
	
ok 3 - completely different files

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4047-diff-dirstat.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4047-diff-dirstat/.git/
expecting success of 4047.1 'setup': 
	mkdir unchanged &&
	mkdir changed &&
	mkdir rearranged &&
	mkdir src &&
	mkdir src/copy &&
	mkdir src/copy/unchanged &&
	mkdir src/copy/changed &&
	mkdir src/copy/rearranged &&
	mkdir src/move &&
	mkdir src/move/unchanged &&
	mkdir src/move/changed &&
	mkdir src/move/rearranged &&
	cat <<EOF >unchanged/text &&
unchanged       line #0
unchanged       line #1
unchanged       line #2
unchanged       line #3
unchanged       line #4
unchanged       line #5
unchanged       line #6
unchanged       line #7
unchanged       line #8
unchanged       line #9
EOF
	cat <<EOF >changed/text &&
changed         line #0
changed         line #1
changed         line #2
changed         line #3
changed         line #4
changed         line #5
changed         line #6
changed         line #7
changed         line #8
changed         line #9
EOF
	cat <<EOF >rearranged/text &&
rearranged      line #0
rearranged      line #1
rearranged      line #2
rearranged      line #3
rearranged      line #4
rearranged      line #5
rearranged      line #6
rearranged      line #7
rearranged      line #8
rearranged      line #9
EOF
	cat <<EOF >src/copy/unchanged/text &&
copy  unchanged line #0
copy  unchanged line #1
copy  unchanged line #2
copy  unchanged line #3
copy  unchanged line #4
copy  unchanged line #5
copy  unchanged line #6
copy  unchanged line #7
copy  unchanged line #8
copy  unchanged line #9
EOF
	cat <<EOF >src/copy/changed/text &&
copy    changed line #0
copy    changed line #1
copy    changed line #2
copy    changed line #3
copy    changed line #4
copy    changed line #5
copy    changed line #6
copy    changed line #7
copy    changed line #8
copy    changed line #9
EOF
	cat <<EOF >src/copy/rearranged/text &&
copy rearranged line #0
copy rearranged line #1
copy rearranged line #2
copy rearranged line #3
copy rearranged line #4
copy rearranged line #5
copy rearranged line #6
copy rearranged line #7
copy rearranged line #8
copy rearranged line #9
EOF
	cat <<EOF >src/move/unchanged/text &&
move  unchanged line #0
move  unchanged line #1
move  unchanged line #2
move  unchanged line #3
move  unchanged line #4
move  unchanged line #5
move  unchanged line #6
move  unchanged line #7
move  unchanged line #8
move  unchanged line #9
EOF
	cat <<EOF >src/move/changed/text &&
move    changed line #0
move    changed line #1
move    changed line #2
move    changed line #3
move    changed line #4
move    changed line #5
move    changed line #6
move    changed line #7
move    changed line #8
move    changed line #9
EOF
	cat <<EOF >src/move/rearranged/text &&
move rearranged line #0
move rearranged line #1
move rearranged line #2
move rearranged line #3
move rearranged line #4
move rearranged line #5
move rearranged line #6
move rearranged line #7
move rearranged line #8
move rearranged line #9
EOF
	git add . &&
	git commit -m "initial" &&
	mkdir dst &&
	mkdir dst/copy &&
	mkdir dst/copy/unchanged &&
	mkdir dst/copy/changed &&
	mkdir dst/copy/rearranged &&
	mkdir dst/move &&
	mkdir dst/move/unchanged &&
	mkdir dst/move/changed &&
	mkdir dst/move/rearranged &&
	cat <<EOF >changed/text &&
CHANGED XXXXXXX line #0
changed         line #1
changed         line #2
changed         line #3
changed         line #4
changed         line #5
changed         line #6
changed         line #7
changed         line #8
changed         line #9
EOF
	cat <<EOF >rearranged/text &&
rearranged      line #1
rearranged      line #0
rearranged      line #2
rearranged      line #3
rearranged      line #4
rearranged      line #5
rearranged      line #6
rearranged      line #7
rearranged      line #8
rearranged      line #9
EOF
	cat <<EOF >dst/copy/unchanged/text &&
copy  unchanged line #0
copy  unchanged line #1
copy  unchanged line #2
copy  unchanged line #3
copy  unchanged line #4
copy  unchanged line #5
copy  unchanged line #6
copy  unchanged line #7
copy  unchanged line #8
copy  unchanged line #9
EOF
	cat <<EOF >dst/copy/changed/text &&
copy XXXCHANGED line #0
copy    changed line #1
copy    changed line #2
copy    changed line #3
copy    changed line #4
copy    changed line #5
copy    changed line #6
copy    changed line #7
copy    changed line #8
copy    changed line #9
EOF
	cat <<EOF >dst/copy/rearranged/text &&
copy rearranged line #1
copy rearranged line #0
copy rearranged line #2
copy rearranged line #3
copy rearranged line #4
copy rearranged line #5
copy rearranged line #6
copy rearranged line #7
copy rearranged line #8
copy rearranged line #9
EOF
	cat <<EOF >dst/move/unchanged/text &&
move  unchanged line #0
move  unchanged line #1
move  unchanged line #2
move  unchanged line #3
move  unchanged line #4
move  unchanged line #5
move  unchanged line #6
move  unchanged line #7
move  unchanged line #8
move  unchanged line #9
EOF
	cat <<EOF >dst/move/changed/text &&
move XXXCHANGED line #0
move    changed line #1
move    changed line #2
move    changed line #3
move    changed line #4
move    changed line #5
move    changed line #6
move    changed line #7
move    changed line #8
move    changed line #9
EOF
	cat <<EOF >dst/move/rearranged/text &&
move rearranged line #1
move rearranged line #0
move rearranged line #2
move rearranged line #3
move rearranged line #4
move rearranged line #5
move rearranged line #6
move rearranged line #7
move rearranged line #8
move rearranged line #9
EOF
	git add . &&
	git rm -r src/move/unchanged &&
	git rm -r src/move/changed &&
	git rm -r src/move/rearranged &&
	git commit -m "changes" &&
	git config diff.renames false

[master (root-commit) b34d487] initial
 Author: A U Thor <author@example.com>
 9 files changed, 90 insertions(+)
 create mode 100644 changed/text
 create mode 100644 rearranged/text
 create mode 100644 src/copy/changed/text
 create mode 100644 src/copy/rearranged/text
 create mode 100644 src/copy/unchanged/text
 create mode 100644 src/move/changed/text
 create mode 100644 src/move/rearranged/text
 create mode 100644 src/move/unchanged/text
 create mode 100644 unchanged/text
rm 'src/move/unchanged/text'
rm 'src/move/changed/text'
rm 'src/move/rearranged/text'
[master 3da6c5d] changes
 Author: A U Thor <author@example.com>
 8 files changed, 34 insertions(+), 4 deletions(-)
 create mode 100644 dst/copy/changed/text
 create mode 100644 dst/copy/rearranged/text
 create mode 100644 dst/copy/unchanged/text
 rename {src => dst}/move/changed/text (90%)
 rename {src => dst}/move/rearranged/text (100%)
 rename {src => dst}/move/unchanged/text (100%)
ok 1 - setup

expecting success of 4047.2 'sanity check setup (--numstat)': 
	git diff --numstat HEAD^..HEAD >actual_diff_stat &&
	test_cmp expect_diff_stat actual_diff_stat &&
	git diff --numstat -M HEAD^..HEAD >actual_diff_stat_M &&
	test_cmp expect_diff_stat_M actual_diff_stat_M &&
	git diff --numstat -C -C HEAD^..HEAD >actual_diff_stat_CC &&
	test_cmp expect_diff_stat_CC actual_diff_stat_CC

ok 2 - sanity check setup (--numstat)

expecting success of 4047.3 'various ways to misspell --dirstat': 
	test_must_fail git show --dirstat10 &&
	test_must_fail git show --dirstat10,files &&
	test_must_fail git show -X=20 &&
	test_must_fail git show -X=20,cumulative

fatal: unrecognized argument: --dirstat10
fatal: unrecognized argument: --dirstat10,files
fatal: Failed to parse --dirstat/-X option parameter:
  Unknown dirstat parameter '=20'

fatal: Failed to parse --dirstat/-X option parameter:
  Unknown dirstat parameter '=20'

ok 3 - various ways to misspell --dirstat

expecting success of 4047.4 'vanilla --dirstat': 
	git diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 4 - vanilla --dirstat

expecting success of 4047.5 'vanilla -X': 
	git diff -X HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff -X -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff -X -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 5 - vanilla -X

expecting success of 4047.6 'explicit defaults: --dirstat=changes,noncumulative,3': 
	git diff --dirstat=changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 6 - explicit defaults: --dirstat=changes,noncumulative,3

expecting success of 4047.7 'explicit defaults: -Xchanges,noncumulative,3': 
	git diff -Xchanges,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff -Xchanges,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff -Xchanges,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 7 - explicit defaults: -Xchanges,noncumulative,3

expecting success of 4047.8 'later options override earlier options:': 
	git diff --dirstat=files,10,cumulative,changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC &&
	git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 8 - later options override earlier options:

expecting success of 4047.9 'non-defaults in config overridden by explicit defaults on command line': 
	git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 9 - non-defaults in config overridden by explicit defaults on command line

expecting success of 4047.10 '--dirstat=0': 
	git diff --dirstat=0 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 10 - --dirstat=0

expecting success of 4047.11 '-X0': 
	git diff -X0 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff -X0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff -X0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 11 - -X0

expecting success of 4047.12 'diff.dirstat=0': 
	git -c diff.dirstat=0 diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=0 diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=0 diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 12 - diff.dirstat=0

expecting success of 4047.13 '--dirstat=0 --cumulative': 
	git diff --dirstat=0 --cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=0 --cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=0 --cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 13 - --dirstat=0 --cumulative

expecting success of 4047.14 '--dirstat=0,cumulative': 
	git diff --dirstat=0,cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=0,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=0,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 14 - --dirstat=0,cumulative

expecting success of 4047.15 '-X0,cumulative': 
	git diff -X0,cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff -X0,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff -X0,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 15 - -X0,cumulative

expecting success of 4047.16 'diff.dirstat=0,cumulative': 
	git -c diff.dirstat=0,cumulative diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=0,cumulative diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=0,cumulative diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 16 - diff.dirstat=0,cumulative

expecting success of 4047.17 'diff.dirstat=0 & --dirstat=cumulative': 
	git -c diff.dirstat=0 diff --dirstat=cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=0 diff --dirstat=cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=0 diff --dirstat=cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 17 - diff.dirstat=0 & --dirstat=cumulative

expecting success of 4047.18 '--dirstat-by-file': 
	git diff --dirstat-by-file HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat-by-file -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat-by-file -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 18 - --dirstat-by-file

expecting success of 4047.19 '--dirstat=files': 
	git diff --dirstat=files HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 19 - --dirstat=files

expecting success of 4047.20 'diff.dirstat=files': 
	git -c diff.dirstat=files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 20 - diff.dirstat=files

expecting success of 4047.21 '--dirstat-by-file=10': 
	git diff --dirstat-by-file=10 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat-by-file=10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat-by-file=10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 21 - --dirstat-by-file=10

expecting success of 4047.22 '--dirstat=files,10': 
	git diff --dirstat=files,10 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 22 - --dirstat=files,10

expecting success of 4047.23 'diff.dirstat=10,files': 
	git -c diff.dirstat=10,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=10,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=10,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 23 - diff.dirstat=10,files

expecting success of 4047.24 '--dirstat-by-file --cumulative': 
	git diff --dirstat-by-file --cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat-by-file --cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat-by-file --cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 24 - --dirstat-by-file --cumulative

expecting success of 4047.25 '--dirstat=files,cumulative': 
	git diff --dirstat=files,cumulative HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 25 - --dirstat=files,cumulative

expecting success of 4047.26 'diff.dirstat=cumulative,files': 
	git -c diff.dirstat=cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 26 - diff.dirstat=cumulative,files

expecting success of 4047.27 '--dirstat=files,cumulative,10': 
	git diff --dirstat=files,cumulative,10 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,cumulative,10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,cumulative,10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 27 - --dirstat=files,cumulative,10

expecting success of 4047.28 'diff.dirstat=10,cumulative,files': 
	git -c diff.dirstat=10,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=10,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=10,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 28 - diff.dirstat=10,cumulative,files

expecting success of 4047.29 '--dirstat=files,cumulative,16.7': 
	git diff --dirstat=files,cumulative,16.7 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,cumulative,16.7 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,cumulative,16.7 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 29 - --dirstat=files,cumulative,16.7

expecting success of 4047.30 'diff.dirstat=16.7,cumulative,files': 
	git -c diff.dirstat=16.7,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=16.7,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=16.7,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 30 - diff.dirstat=16.7,cumulative,files

expecting success of 4047.31 'diff.dirstat=16.70,cumulative,files': 
	git -c diff.dirstat=16.70,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=16.70,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=16.70,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 31 - diff.dirstat=16.70,cumulative,files

expecting success of 4047.32 '--dirstat=files,cumulative,27.2': 
	git diff --dirstat=files,cumulative,27.2 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,cumulative,27.2 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,cumulative,27.2 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 32 - --dirstat=files,cumulative,27.2

expecting success of 4047.33 '--dirstat=files,cumulative,27.09': 
	git diff --dirstat=files,cumulative,27.09 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=files,cumulative,27.09 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=files,cumulative,27.09 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 33 - --dirstat=files,cumulative,27.09

expecting success of 4047.34 '--dirstat=lines': 
	git diff --dirstat=lines HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=lines -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=lines -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 34 - --dirstat=lines

expecting success of 4047.35 'diff.dirstat=lines': 
	git -c diff.dirstat=lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 35 - diff.dirstat=lines

expecting success of 4047.36 '--dirstat=lines,0': 
	git diff --dirstat=lines,0 HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git diff --dirstat=lines,0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git diff --dirstat=lines,0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 36 - --dirstat=lines,0

expecting success of 4047.37 'diff.dirstat=0,lines': 
	git -c diff.dirstat=0,lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	git -c diff.dirstat=0,lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	git -c diff.dirstat=0,lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC

ok 37 - diff.dirstat=0,lines

expecting success of 4047.38 '--dirstat=future_param,lines,0 should fail loudly': 
	test_must_fail git diff --dirstat=future_param,lines,0 HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
	test_debug "cat actual_error" &&
	test_must_be_empty actual_diff_dirstat &&
	test_i18ngrep -q "future_param" actual_error &&
	test_i18ngrep -q "\--dirstat" actual_error

ok 38 - --dirstat=future_param,lines,0 should fail loudly

expecting success of 4047.39 '--dirstat=dummy1,cumulative,2dummy should report both unrecognized parameters': 
	test_must_fail git diff --dirstat=dummy1,cumulative,2dummy HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
	test_debug "cat actual_error" &&
	test_must_be_empty actual_diff_dirstat &&
	test_i18ngrep -q "dummy1" actual_error &&
	test_i18ngrep -q "2dummy" actual_error &&
	test_i18ngrep -q "\--dirstat" actual_error

ok 39 - --dirstat=dummy1,cumulative,2dummy should report both unrecognized parameters

expecting success of 4047.40 'diff.dirstat=future_param,0,lines should warn, but still work': 
	git -c diff.dirstat=future_param,0,lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
	test_debug "cat actual_error" &&
	test_cmp expect_diff_dirstat actual_diff_dirstat &&
	test_i18ngrep -q "future_param" actual_error &&
	test_i18ngrep -q "diff\\.dirstat" actual_error &&

	git -c diff.dirstat=future_param,0,lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M 2>actual_error &&
	test_debug "cat actual_error" &&
	test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
	test_i18ngrep -q "future_param" actual_error &&
	test_i18ngrep -q "diff\\.dirstat" actual_error &&

	git -c diff.dirstat=future_param,0,lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC 2>actual_error &&
	test_debug "cat actual_error" &&
	test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC &&
	test_i18ngrep -q "future_param" actual_error &&
	test_i18ngrep -q "diff\\.dirstat" actual_error

ok 40 - diff.dirstat=future_param,0,lines should warn, but still work

expecting success of 4047.41 '--shortstat --dirstat should output only one dirstat': 
	git diff --shortstat --dirstat=changes HEAD^..HEAD >out &&
	grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_changes &&
	test_line_count = 1 actual_diff_shortstat_dirstat_changes &&

	git diff --shortstat --dirstat=lines HEAD^..HEAD >out &&
	grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_lines &&
	test_line_count = 1 actual_diff_shortstat_dirstat_lines &&

	git diff --shortstat --dirstat=files HEAD^..HEAD >out &&
	grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_files &&
	test_line_count = 1 actual_diff_shortstat_dirstat_files

ok 41 - --shortstat --dirstat should output only one dirstat

# passed all 41 test(s)
1..41
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4053-diff-no-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4053-diff-no-index/.git/
expecting success of 4053.1 'setup': 
	mkdir a &&
	mkdir b &&
	echo 1 >a/1 &&
	echo 2 >a/2 &&
	git init repo &&
	echo 1 >repo/a &&
	mkdir -p non/git &&
	echo 1 >non/git/a &&
	echo 1 >non/git/b

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4053-diff-no-index/repo/.git/
ok 1 - setup

expecting success of 4053.2 'git diff --no-index --exit-code': 
	git diff --no-index --exit-code a/1 non/git/a &&
	test_expect_code 1 git diff --no-index --exit-code a/1 a/2

diff --git a/a/1 b/a/2
index d00491f..0cfbf08 100644
--- a/a/1
+++ b/a/2
@@ -1 +1 @@
-1
+2
ok 2 - git diff --no-index --exit-code

expecting success of 4053.3 'git diff --no-index directories': 
	test_expect_code 1 git diff --no-index a b >cnt &&
	test_line_count = 14 cnt

ok 3 - git diff --no-index directories

expecting success of 4053.4 'git diff --no-index relative path outside repo': 
	(
		cd repo &&
		test_expect_code 0 git diff --no-index a ../non/git/a &&
		test_expect_code 0 git diff --no-index ../non/git/a ../non/git/b
	)

ok 4 - git diff --no-index relative path outside repo

expecting success of 4053.5 'git diff --no-index with broken index': 
	(
		cd repo &&
		echo broken >.git/index &&
		git diff --no-index a ../non/git/a
	)

ok 5 - git diff --no-index with broken index

expecting success of 4053.6 'git diff outside repo with broken index': 
	(
		cd repo &&
		git diff ../non/git/a ../non/git/b
	)

ok 6 - git diff outside repo with broken index

expecting success of 4053.7 'git diff --no-index executed outside repo gives correct error message': 
	(
		GIT_CEILING_DIRECTORIES=$TRASH_DIRECTORY/non &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		test_must_fail git diff --no-index a 2>actual.err &&
		test_i18ngrep "usage: git diff --no-index" actual.err
	)

usage: git diff --no-index [<options>] <path> <path>
ok 7 - git diff --no-index executed outside repo gives correct error message

expecting success of 4053.8 'diff D F and diff F D': 
	(
		cd repo &&
		echo in-repo >a &&
		echo non-repo >../non/git/a &&
		mkdir sub &&
		echo sub-repo >sub/a &&

		test_must_fail git diff --no-index sub/a ../non/git/a >expect &&
		test_must_fail git diff --no-index sub/a ../non/git/ >actual &&
		test_cmp expect actual &&

		test_must_fail git diff --no-index a ../non/git/a >expect &&
		test_must_fail git diff --no-index a ../non/git/ >actual &&
		test_cmp expect actual &&

		test_must_fail git diff --no-index ../non/git/a a >expect &&
		test_must_fail git diff --no-index ../non/git a >actual &&
		test_cmp expect actual
	)

ok 8 - diff D F and diff F D

expecting success of 4053.9 'turning a file into a directory': 
	(
		cd non/git &&
		mkdir d e e/sub &&
		echo 1 >d/sub &&
		echo 2 >e/sub/file &&
		printf "D\td/sub\nA\te/sub/file\n" >expect &&
		test_must_fail git diff --no-index --name-status d e >actual &&
		test_cmp expect actual
	)

ok 9 - turning a file into a directory

expecting success of 4053.10 'diff from repo subdir shows real paths (explicit)': 
	echo "diff --git a/../../non/git/a b/../../non/git/b" >expect &&
	test_expect_code 1 \
		git -C repo/sub \
		diff --no-index ../../non/git/a ../../non/git/b >actual &&
	head -n 1 <actual >actual.head &&
	test_cmp expect actual.head

ok 10 - diff from repo subdir shows real paths (explicit)

expecting success of 4053.11 'diff from repo subdir shows real paths (implicit)': 
	echo "diff --git a/../../non/git/a b/../../non/git/b" >expect &&
	test_expect_code 1 \
		git -C repo/sub \
		diff ../../non/git/a ../../non/git/b >actual &&
	head -n 1 <actual >actual.head &&
	test_cmp expect actual.head

ok 11 - diff from repo subdir shows real paths (implicit)

expecting success of 4053.12 'diff --no-index from repo subdir respects config (explicit)': 
	echo "diff --git ../../non/git/a ../../non/git/b" >expect &&
	test_config -C repo diff.noprefix true &&
	test_expect_code 1 \
		git -C repo/sub \
		diff --no-index ../../non/git/a ../../non/git/b >actual &&
	head -n 1 <actual >actual.head &&
	test_cmp expect actual.head

ok 12 - diff --no-index from repo subdir respects config (explicit)

expecting success of 4053.13 'diff --no-index from repo subdir respects config (implicit)': 
	echo "diff --git ../../non/git/a ../../non/git/b" >expect &&
	test_config -C repo diff.noprefix true &&
	test_expect_code 1 \
		git -C repo/sub \
		diff ../../non/git/a ../../non/git/b >actual &&
	head -n 1 <actual >actual.head &&
	test_cmp expect actual.head

ok 13 - diff --no-index from repo subdir respects config (implicit)

expecting success of 4053.14 'diff --no-index from repo subdir with absolute paths': 
	cat <<-EOF >expect &&
	1	1	$(pwd)/non/git/{a => b}
	EOF
	test_expect_code 1 \
		git -C repo/sub diff --numstat \
		"$(pwd)/non/git/a" "$(pwd)/non/git/b" >actual &&
	test_cmp expect actual

ok 14 - diff --no-index from repo subdir with absolute paths

expecting success of 4053.15 'diff --no-index allows external diff': 
	test_expect_code 1 \
		env GIT_EXTERNAL_DIFF="echo external ;:" \
		git diff --no-index non/git/a non/git/b >actual &&
	echo external >expect &&
	test_cmp expect actual

ok 15 - diff --no-index allows external diff

expecting success of 4053.16 'diff --no-index normalizes mode: no changes': 
	echo foo >x &&
	cp x y &&
	git diff --no-index x y >out &&
	test_must_be_empty out

ok 16 - diff --no-index normalizes mode: no changes

expecting success of 4053.17 'diff --no-index normalizes mode: chmod +x': 
	chmod +x y &&
	cat >expected <<-\EOF &&
	diff --git a/x b/y
	old mode 100644
	new mode 100755
	EOF
	test_expect_code 1 git diff --no-index x y >actual &&
	test_cmp expected actual

ok 17 - diff --no-index normalizes mode: chmod +x

expecting success of 4053.18 'diff --no-index normalizes: mode not like git mode': 
	chmod 666 x &&
	chmod 777 y &&
	cat >expected <<-\EOF &&
	diff --git a/x b/y
	old mode 100644
	new mode 100755
	EOF
	test_expect_code 1 git diff --no-index x y >actual &&
	test_cmp expected actual

ok 18 - diff --no-index normalizes: mode not like git mode

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4053.19 'diff --no-index normalizes: mode not like git mode (symlink)': 
	ln -s y z &&
	X_OID=$(git hash-object --stdin <x) &&
	Z_OID=$(printf y | git hash-object --stdin) &&
	cat >expected <<-EOF &&
	diff --git a/x b/x
	deleted file mode 100644
	index $X_OID..$ZERO_OID
	--- a/x
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo
	diff --git a/z b/z
	new file mode 120000
	index $ZERO_OID..$Z_OID
	--- /dev/null
	+++ b/z
	@@ -0,0 +1 @@
	+y
	\ No newline at end of file
	EOF
	test_expect_code 1 git -c core.abbrev=no diff --no-index x z >actual &&
	test_cmp expected actual

ok 19 - diff --no-index normalizes: mode not like git mode (symlink)

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4054-diff-bogus-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4054-diff-bogus-tree/.git/
expecting success of 4054.1 'create bogus tree': 
	name=$(echo $ZERO_OID | sed -e "s/00/Q/g") &&
	bogus_tree=$(
		printf "100644 fooQ$name" |
		q_to_nul |
		git hash-object -w --stdin -t tree
	)

ok 1 - create bogus tree

expecting success of 4054.2 'create tree with matching file': 
	echo bar >foo &&
	git add foo &&
	good_tree=$(git write-tree) &&
	blob=$(git rev-parse :foo)

ok 2 - create tree with matching file

expecting success of 4054.3 'raw diff shows null sha1 (addition)': 
	echo ":000000 100644 $ZERO_OID $ZERO_OID A	foo" >expect &&
	git diff-tree $EMPTY_TREE $bogus_tree >actual &&
	test_cmp expect actual

ok 3 - raw diff shows null sha1 (addition)

expecting success of 4054.4 'raw diff shows null sha1 (removal)': 
	echo ":100644 000000 $ZERO_OID $ZERO_OID D	foo" >expect &&
	git diff-tree $bogus_tree $EMPTY_TREE >actual &&
	test_cmp expect actual

ok 4 - raw diff shows null sha1 (removal)

expecting success of 4054.5 'raw diff shows null sha1 (modification)': 
	echo ":100644 100644 $blob $ZERO_OID M	foo" >expect &&
	git diff-tree $good_tree $bogus_tree >actual &&
	test_cmp expect actual

ok 5 - raw diff shows null sha1 (modification)

expecting success of 4054.6 'raw diff shows null sha1 (other direction)': 
	echo ":100644 100644 $ZERO_OID $blob M	foo" >expect &&
	git diff-tree $bogus_tree $good_tree >actual &&
	test_cmp expect actual

ok 6 - raw diff shows null sha1 (other direction)

expecting success of 4054.7 'raw diff shows null sha1 (reverse)': 
	echo ":100644 100644 $ZERO_OID $blob M	foo" >expect &&
	git diff-tree -R $good_tree $bogus_tree >actual &&
	test_cmp expect actual

ok 7 - raw diff shows null sha1 (reverse)

expecting success of 4054.8 'raw diff shows null sha1 (index)': 
	echo ":100644 100644 $ZERO_OID $blob M	foo" >expect &&
	git diff-index $bogus_tree >actual &&
	test_cmp expect actual

ok 8 - raw diff shows null sha1 (index)

expecting success of 4054.9 'patch fails due to bogus sha1 (addition)': 
	test_must_fail git diff-tree -p $EMPTY_TREE $bogus_tree

fatal: unable to read 0000000000000000000000000000000000000000
ok 9 - patch fails due to bogus sha1 (addition)

expecting success of 4054.10 'patch fails due to bogus sha1 (removal)': 
	test_must_fail git diff-tree -p $bogus_tree $EMPTY_TREE

fatal: unable to read 0000000000000000000000000000000000000000
ok 10 - patch fails due to bogus sha1 (removal)

expecting success of 4054.11 'patch fails due to bogus sha1 (modification)': 
	test_must_fail git diff-tree -p $good_tree $bogus_tree

fatal: unable to read 0000000000000000000000000000000000000000
ok 11 - patch fails due to bogus sha1 (modification)

expecting success of 4054.12 'patch fails due to bogus sha1 (other direction)': 
	test_must_fail git diff-tree -p $bogus_tree $good_tree

fatal: unable to read 0000000000000000000000000000000000000000
ok 12 - patch fails due to bogus sha1 (other direction)

expecting success of 4054.13 'patch fails due to bogus sha1 (reverse)': 
	test_must_fail git diff-tree -R -p $good_tree $bogus_tree

fatal: unable to read 0000000000000000000000000000000000000000
ok 13 - patch fails due to bogus sha1 (reverse)

expecting success of 4054.14 'patch fails due to bogus sha1 (index)': 
	test_must_fail git diff-index -p $bogus_tree

fatal: unable to read 0000000000000000000000000000000000000000
ok 14 - patch fails due to bogus sha1 (index)

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4051-diff-function-context.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4051-diff-function-context/.git/
expecting success of 4051.1 'setup': 
	cat "$dir/includes.c" "$dir/dummy.c" "$dir/dummy.c" "$dir/hello.c" \
		"$dir/dummy.c" "$dir/dummy.c" >file.c &&
	commit_and_tag initial file.c &&

	grep -v "delete me from hello" <file.c >file.c.new &&
	mv file.c.new file.c &&
	commit_and_tag changed_hello file.c &&

	grep -v "delete me from includes" <file.c >file.c.new &&
	mv file.c.new file.c &&
	commit_and_tag changed_includes file.c &&

	cat "$dir/appended1.c" >>file.c &&
	commit_and_tag appended file.c &&

	cat "$dir/appended2.c" >>file.c &&
	commit_and_tag extended file.c &&

	grep -v "Begin of second part" <file.c >file.c.new &&
	mv file.c.new file.c &&
	commit_and_tag long_common_tail file.c &&

	git checkout initial &&
	cat "$dir/hello.c" "$dir/dummy.c" >file.c &&
	commit_and_tag hello_dummy file.c &&

	# overlap function context of 1st change and -u context of 2nd change
	grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
	sed "2a\\
	     extra line" <"$dir/dummy.c" >>file.c &&
	commit_and_tag changed_hello_dummy file.c &&

	git checkout initial &&
	grep -v "delete me from hello" <file.c >file.c.new &&
	mv file.c.new file.c &&
	cat "$dir/appended1.c" >>file.c &&
	commit_and_tag changed_hello_appended file.c

[master (root-commit) 9f6e181] initial
 Author: A U Thor <author@example.com>
 1 file changed, 72 insertions(+)
 create mode 100644 file.c
[master 5e132d0] changed_hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
[master 964b054] changed_includes
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
[master d0cff11] appended
 Author: A U Thor <author@example.com>
 1 file changed, 15 insertions(+)
[master d16114c] extended
 Author: A U Thor <author@example.com>
 1 file changed, 35 insertions(+)
[master fa474ba] long_common_tail
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9f6e181 initial
[detached HEAD cf16009] hello_dummy
 Author: A U Thor <author@example.com>
 1 file changed, 41 deletions(-)
[detached HEAD d307f65] changed_hello_dummy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Previous HEAD position was d307f65 changed_hello_dummy
HEAD is now at 9f6e181 initial
[detached HEAD aca4ec7] changed_hello_appended
 Author: A U Thor <author@example.com>
 1 file changed, 15 insertions(+), 1 deletion(-)
ok 1 - setup

expecting success of 4051.2 'changed function': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 2 - changed function

expecting success of 4051.3 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was aca4ec7 changed_hello_appended
HEAD is now at 9f6e181 initial
HEAD is now at 9f6e181 initial
ok 3 -  diff applies

expecting success of 4051.4 ' context includes comment': 
	grep "^ .*Hello comment" changed_hello.diff

  * Hello comment.
ok 4 -  context includes comment

expecting success of 4051.5 ' context includes begin': 
	grep "^ .*Begin of hello" changed_hello.diff

 static void hello(void)	// Begin of hello
ok 5 -  context includes begin

expecting success of 4051.6 ' context includes end': 
	grep "^ .*End of hello" changed_hello.diff

 }	// End of hello
ok 6 -  context includes end

expecting success of 4051.7 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" changed_hello.diff) -le 1

ok 7 -  context does not include other functions

expecting success of 4051.8 ' context does not include preceding empty lines': 
	test "$(first_context_line <changed_hello.diff)" != " "

ok 8 -  context does not include preceding empty lines

expecting success of 4051.9 ' context does not include trailing empty lines': 
	test "$(last_context_line <changed_hello.diff)" != " "

ok 9 -  context does not include trailing empty lines

expecting success of 4051.10 'changed includes': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 10 - changed includes

expecting success of 4051.11 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was 9f6e181 initial
HEAD is now at 5e132d0 changed_hello
HEAD is now at 5e132d0 changed_hello
ok 11 -  diff applies

expecting success of 4051.12 ' context includes begin': 
	grep "^ .*Begin.h" changed_includes.diff

 #include <Begin.h>
ok 12 -  context includes begin

expecting success of 4051.13 ' context includes end': 
	grep "^ .*End.h" changed_includes.diff

 #include <End.h>
ok 13 -  context includes end

expecting success of 4051.14 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" changed_includes.diff) -le 1

ok 14 -  context does not include other functions

expecting success of 4051.15 ' context does not include trailing empty lines': 
	test "$(last_context_line <changed_includes.diff)" != " "

ok 15 -  context does not include trailing empty lines

expecting success of 4051.16 'appended function': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 16 - appended function

expecting success of 4051.17 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was 5e132d0 changed_hello
HEAD is now at 964b054 changed_includes
HEAD is now at 964b054 changed_includes
ok 17 -  diff applies

expecting success of 4051.18 ' context includes begin': 
	grep "^[+].*Begin of first part" appended.diff

+int appended(void) // Begin of first part
ok 18 -  context includes begin

expecting success of 4051.19 ' context includes end': 
	grep "^[+].*End of first part" appended.diff

+	printf("End of first part\n");
ok 19 -  context includes end

expecting success of 4051.20 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" appended.diff) -le 1

ok 20 -  context does not include other functions

expecting success of 4051.21 'appended function part': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 21 - appended function part

expecting success of 4051.22 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was 964b054 changed_includes
HEAD is now at d0cff11 appended
HEAD is now at d0cff11 appended
ok 22 -  diff applies

expecting success of 4051.23 ' context includes begin': 
	grep "^ .*Begin of first part" extended.diff

 int appended(void) // Begin of first part
ok 23 -  context includes begin

expecting success of 4051.24 ' context includes end': 
	grep "^[+].*End of second part" extended.diff

+}	// End of second part
ok 24 -  context includes end

expecting success of 4051.25 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" extended.diff) -le 2

ok 25 -  context does not include other functions

expecting success of 4051.26 ' context does not include preceding empty lines': 
	test "$(first_context_line <extended.diff)" != " "

ok 26 -  context does not include preceding empty lines

expecting success of 4051.27 'change with long common tail and no context': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 27 - change with long common tail and no context

expecting success of 4051.28 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was d0cff11 appended
HEAD is now at d16114c extended
HEAD is now at d16114c extended
ok 28 -  diff applies

expecting success of 4051.29 ' context includes begin': 
	grep "^ .*Begin of first part" long_common_tail.diff

 int appended(void) // Begin of first part
ok 29 -  context includes begin

expecting success of 4051.30 ' context includes end': 
	grep "^ .*End of second part" long_common_tail.diff

 }	// End of second part
ok 30 -  context includes end

expecting success of 4051.31 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" long_common_tail.diff) -le 2

ok 31 -  context does not include other functions

expecting success of 4051.32 ' context does not include preceding empty lines': 
	test "$(first_context_line <long_common_tail.diff)" != " "

ok 32 -  context does not include preceding empty lines

expecting success of 4051.33 'changed function plus appended function': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 33 - changed function plus appended function

expecting success of 4051.34 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was d16114c extended
HEAD is now at 9f6e181 initial
HEAD is now at 9f6e181 initial
ok 34 -  diff applies

expecting success of 4051.35 ' context includes begin': 
	grep "^ .*Begin of hello" changed_hello_appended.diff &&
	grep "^[+].*Begin of first part" changed_hello_appended.diff

 static void hello(void)	// Begin of hello
+int appended(void) // Begin of first part
ok 35 -  context includes begin

expecting success of 4051.36 ' context includes end': 
	grep "^ .*End of hello" changed_hello_appended.diff &&
	grep "^[+].*End of first part" changed_hello_appended.diff

 }	// End of hello
+	printf("End of first part\n");
ok 36 -  context includes end

expecting success of 4051.37 ' context does not include other functions': 
	test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2

ok 37 -  context does not include other functions

expecting success of 4051.38 'changed two consecutive functions': 
		git diff $options "$name^" "$name" >"$name.diff"
	
ok 38 - changed two consecutive functions

expecting success of 4051.39 ' diff applies': 
		test_when_finished "git reset --hard" &&
		git checkout --detach "$name^" &&
		git apply --index "$name.diff" &&
		git diff --exit-code "$name"
	
Previous HEAD position was 9f6e181 initial
HEAD is now at cf16009 hello_dummy
HEAD is now at cf16009 hello_dummy
ok 39 -  diff applies

expecting success of 4051.40 ' context includes begin': 
	grep "^ .*Begin of hello" changed_hello_dummy.diff &&
	grep "^ .*Begin of dummy" changed_hello_dummy.diff

 static void hello(void)	// Begin of hello
 static int dummy(void)	// Begin of dummy
ok 40 -  context includes begin

expecting success of 4051.41 ' context includes end': 
	grep "^ .*End of hello" changed_hello_dummy.diff &&
	grep "^ .*End of dummy" changed_hello_dummy.diff

 }	// End of hello
 }	// End of dummy
ok 41 -  context includes end

expecting success of 4051.42 ' overlapping hunks are merged': 
	test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1

ok 42 -  overlapping hunks are merged

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4055-diff-context.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4055-diff-context/.git/
expecting success of 4055.1 'setup': 
	cat >template <<-\EOF &&
	firstline
	b
	c
	d
	e
	f
	preline
	TARGET
	postline
	i
	j
	k
	l
	m
	n
	EOF
	sed "/TARGET/d" >x <template &&
	git update-index --add x &&
	git commit -m initial &&

	sed "s/TARGET/ADDED/" >x <template &&
	git update-index --add x &&
	git commit -m next &&

	sed "s/TARGET/MODIFIED/" >x <template

[master (root-commit) aee64db] initial
 Author: A U Thor <author@example.com>
 1 file changed, 14 insertions(+)
 create mode 100644 x
[master 4ef1dc5] next
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 4055.2 'the default number of context lines is 3': 
	git diff >output &&
	! grep "^ d" output &&
	grep "^ e" output &&
	grep "^ j" output &&
	! grep "^ k" output

 e
 j
ok 2 - the default number of context lines is 3

expecting success of 4055.3 'diff.context honored by "log"': 
	git log -1 -p >output &&
	! grep firstline output &&
	git config diff.context 8 &&
	git log -1 -p >output &&
	grep "^ firstline" output

 firstline
ok 3 - diff.context honored by "log"

expecting success of 4055.4 'The -U option overrides diff.context': 
	git config diff.context 8 &&
	git log -U4 -1 >output &&
	! grep "^ firstline" output

ok 4 - The -U option overrides diff.context

expecting success of 4055.5 'diff.context honored by "diff"': 
	git config diff.context 8 &&
	git diff >output &&
	grep "^ firstline" output

 firstline
ok 5 - diff.context honored by "diff"

expecting success of 4055.6 'plumbing not affected': 
	git config diff.context 8 &&
	git diff-files -p >output &&
	! grep "^ firstline" output

ok 6 - plumbing not affected

expecting success of 4055.7 'non-integer config parsing': 
	git config diff.context no &&
	test_must_fail git diff 2>output &&
	test_i18ngrep "bad numeric config value" output

fatal: bad numeric config value 'no' for 'diff.context': invalid unit
ok 7 - non-integer config parsing

expecting success of 4055.8 'negative integer config parsing': 
	git config diff.context -1 &&
	test_must_fail git diff 2>output &&
	test_i18ngrep "bad config variable" output

fatal: bad config variable 'diff.context' in file '.git/config' at line 7
ok 8 - negative integer config parsing

expecting success of 4055.9 '-U0 is valid, so is diff.context=0': 
	git config diff.context 0 &&
	git diff >output &&
	grep "^-ADDED" output &&
	grep "^+MODIFIED" output

-ADDED
+MODIFIED
ok 9 - -U0 is valid, so is diff.context=0

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4056-diff-order.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4056-diff-order/.git/
expecting success of 4056.1 'setup': 
	mkdir c &&
	create_files 1 &&
	create_files 2 &&

	cat >order_file_1 <<-\EOF &&
	*Makefile
	*.txt
	*.h
	EOF

	cat >order_file_2 <<-\EOF &&
	*Makefile
	*.h
	*.c
	EOF

	cat >expect_none <<-\EOF &&
	a.h
	b.c
	c/Makefile
	d.txt
	EOF

	cat >expect_1 <<-\EOF &&
	c/Makefile
	d.txt
	a.h
	b.c
	EOF

	cat >expect_2 <<-\EOF
	c/Makefile
	a.h
	b.c
	d.txt
	EOF

[main (root-commit) 770e898] 1
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 a.h
 create mode 100644 b.c
 create mode 100644 c/Makefile
 create mode 100644 d.txt
[main 7c2d19e] 2
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+), 4 deletions(-)
ok 1 - setup

expecting success of 4056.2 'no order (=tree object order)': 
	git diff --name-only HEAD^..HEAD >actual &&
	test_cmp expect_none actual

ok 2 - no order (=tree object order)

expecting success of 4056.3 'missing orderfile': 
	rm -f bogus_file &&
	test_must_fail git diff -Obogus_file --name-only HEAD^..HEAD

fatal: failed to read orderfile 'bogus_file': No such file or directory
ok 3 - missing orderfile

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 4056.4 'unreadable orderfile': 
	>unreadable_file &&
	chmod -r unreadable_file &&
	test_must_fail git diff -Ounreadable_file --name-only HEAD^..HEAD

fatal: failed to read orderfile 'unreadable_file': Permission denied
ok 4 - unreadable orderfile

expecting success of 4056.5 'orderfile using option from subdir with --output': 
	mkdir subdir &&
	git -C subdir diff -O../order_file_1 --output ../actual --name-only HEAD^..HEAD &&
	test_cmp expect_1 actual

ok 5 - orderfile using option from subdir with --output

expecting success of 4056.6 'orderfile using option (1)': 
		git diff -Oorder_file_$i --name-only HEAD^..HEAD >actual &&
		test_cmp expect_$i actual
	
ok 6 - orderfile using option (1)

checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
expecting success of 4056.7 'orderfile is fifo (1)': 
		rm -f order_fifo &&
		mkfifo order_fifo &&
		{
			cat order_file_$i >order_fifo &
		} &&
		git diff -O order_fifo --name-only HEAD^..HEAD >actual &&
		wait &&
		test_cmp expect_$i actual
	
ok 7 - orderfile is fifo (1)

expecting success of 4056.8 'orderfile using config (1)': 
		git -c diff.orderfile=order_file_$i diff --name-only HEAD^..HEAD >actual &&
		test_cmp expect_$i actual
	
ok 8 - orderfile using config (1)

expecting success of 4056.9 'cancelling configured orderfile (1)': 
		git -c diff.orderfile=order_file_$i diff -O/dev/null --name-only HEAD^..HEAD >actual &&
		test_cmp expect_none actual
	
ok 9 - cancelling configured orderfile (1)

expecting success of 4056.10 'orderfile using option (2)': 
		git diff -Oorder_file_$i --name-only HEAD^..HEAD >actual &&
		test_cmp expect_$i actual
	
ok 10 - orderfile using option (2)

expecting success of 4056.11 'orderfile is fifo (2)': 
		rm -f order_fifo &&
		mkfifo order_fifo &&
		{
			cat order_file_$i >order_fifo &
		} &&
		git diff -O order_fifo --name-only HEAD^..HEAD >actual &&
		wait &&
		test_cmp expect_$i actual
	
ok 11 - orderfile is fifo (2)

expecting success of 4056.12 'orderfile using config (2)': 
		git -c diff.orderfile=order_file_$i diff --name-only HEAD^..HEAD >actual &&
		test_cmp expect_$i actual
	
ok 12 - orderfile using config (2)

expecting success of 4056.13 'cancelling configured orderfile (2)': 
		git -c diff.orderfile=order_file_$i diff -O/dev/null --name-only HEAD^..HEAD >actual &&
		test_cmp expect_none actual
	
ok 13 - cancelling configured orderfile (2)

expecting success of 4056.14 'setup for testing combine-diff order': 
	git checkout -b tmp HEAD~ &&
	create_files 3 &&
	git checkout main &&
	git merge --no-commit -s ours tmp &&
	create_files 5

Switched to a new branch 'tmp'
[tmp ec24607] 3
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+), 4 deletions(-)
Switched to branch 'main'
Automatic merge went well; stopped before committing as requested
[main e00a015] 5
 Author: A U Thor <author@example.com>
ok 14 - setup for testing combine-diff order

expecting success of 4056.15 'combine-diff: no order (=tree object order)': 
	git diff --name-only HEAD HEAD^ HEAD^2 >actual &&
	test_cmp expect_none actual

ok 15 - combine-diff: no order (=tree object order)

expecting success of 4056.16 'combine-diff: orderfile using option (1)': 
		git diff -Oorder_file_$i --name-only HEAD HEAD^ HEAD^2 >actual &&
		test_cmp expect_$i actual
	
ok 16 - combine-diff: orderfile using option (1)

expecting success of 4056.17 'combine-diff: orderfile using option (2)': 
		git diff -Oorder_file_$i --name-only HEAD HEAD^ HEAD^2 >actual &&
		test_cmp expect_$i actual
	
ok 17 - combine-diff: orderfile using option (2)

expecting success of 4056.18 'rotate and skip setup': 
	>sample1.t &&
	>sample2.t &&
	>sample3.t &&
	>sample4.t &&
	git add sample[1234].t &&
	git commit -m "added" sample[1234].t &&
	echo modified >>sample1.t &&
	echo modified >>sample2.t &&
	echo modified >>sample4.t &&
	git commit -m "updated" sample[1234].t

[main bfe9459] added
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sample1.t
 create mode 100644 sample2.t
 create mode 100644 sample3.t
 create mode 100644 sample4.t
[main ba2bcc7] updated
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
ok 18 - rotate and skip setup

expecting success of 4056.19 'diff --rotate-to': 
	git diff --rotate-to=sample2.t --name-only HEAD^ >actual &&
	test_write_lines sample2.t sample4.t sample1.t >expect &&
	test_cmp expect actual

ok 19 - diff --rotate-to

expecting success of 4056.20 'diff --skip-to': 
	git diff --skip-to=sample2.t --name-only HEAD^ >actual &&
	test_write_lines sample2.t sample4.t >expect &&
	test_cmp expect actual

ok 20 - diff --skip-to

expecting success of 4056.21 'diff --rotate/skip-to error condition': 
	test_must_fail git diff --rotate-to=sample3.t HEAD^ &&
	test_must_fail git diff --skip-to=sample3.t HEAD^

fatal: No such path 'sample3.t' in the diff
fatal: No such path 'sample3.t' in the diff
ok 21 - diff --rotate/skip-to error condition

expecting success of 4056.22 'log --rotate-to': 
	git log --rotate-to=sample3.t --raw HEAD~2.. >raw &&
	# just distill the commit header and paths
	sed -n -e "s/^commit.*/commit/p" \
	       -e "/^:/s/^.*	//p" raw >actual &&

	cat >expect <<-\EOF &&
	commit
	sample4.t
	sample1.t
	sample2.t
	commit
	sample3.t
	sample4.t
	sample1.t
	sample2.t
	EOF

	test_cmp expect actual

ok 22 - log --rotate-to

expecting success of 4056.23 'log --skip-to': 
	git log --skip-to=sample3.t --raw HEAD~2.. >raw &&
	# just distill the commit header and paths
	sed -n -e "s/^commit.*/commit/p" \
	       -e "/^:/s/^.*	//p" raw >actual &&

	cat >expect <<-\EOF &&
	commit
	sample4.t
	commit
	sample3.t
	sample4.t
	EOF

	test_cmp expect actual

ok 23 - log --skip-to

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4058-diff-duplicates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4058-diff-duplicates/.git/
expecting success of 4058.1 'create trees with duplicate entries': 
	blob_one=$(echo one | git hash-object -w --stdin) &&
	blob_two=$(echo two | git hash-object -w --stdin) &&
	inner_one_a=$(make_tree \
		100644 inner $blob_one
	) &&
	inner_one_b=$(make_tree \
		100644 inner $blob_two \
		100644 inner $blob_two \
		100644 inner $blob_two
	) &&
	outer_one=$(make_tree \
		040000 outer $inner_one_a \
		040000 outer $inner_one_b
	) &&
	inner_two=$(make_tree \
		100644 inner $blob_one \
		100644 inner $blob_two \
		100644 inner $blob_two \
		100644 inner $blob_two
	) &&
	outer_two=$(make_tree \
		040000 outer $inner_two
	) &&
	git tag one $outer_one &&
	git tag two $outer_two

ok 1 - create trees with duplicate entries

expecting success of 4058.2 'create tree without duplicate entries': 
	blob_one=$(echo one | git hash-object -w --stdin) &&
	outer_three=$(make_tree \
		100644 renamed $blob_one
	) &&
	git tag three $outer_three

ok 2 - create tree without duplicate entries

expecting success of 4058.3 'diff-tree between duplicate trees': 
	# See NOTICE at top of file
	{
		printf ":000000 100644 $ZERO_OID $blob_two A\touter/inner\n" &&
		printf ":000000 100644 $ZERO_OID $blob_two A\touter/inner\n" &&
		printf ":000000 100644 $ZERO_OID $blob_two A\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n"
	} >expect &&
	git diff-tree -r --no-abbrev one two >actual &&
	test_cmp expect actual

ok 3 - diff-tree between duplicate trees

expecting success of 4058.4 'diff-tree with renames': 
	# See NOTICE at top of file.
	git diff-tree -M -r --no-abbrev one two >actual &&
	test_must_be_empty actual

ok 4 - diff-tree with renames

expecting success of 4058.5 'diff-tree FROM duplicate tree': 
	# See NOTICE at top of file.
	{
		printf ":100644 000000 $blob_one $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":000000 100644 $ZERO_OID $blob_one A\trenamed\n"
	} >expect &&
	git diff-tree -r --no-abbrev one three >actual &&
	test_cmp expect actual

ok 5 - diff-tree FROM duplicate tree

expecting success of 4058.6 'diff-tree FROM duplicate tree, with renames': 
	# See NOTICE at top of file.
	{
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 000000 $blob_two $ZERO_OID D\touter/inner\n" &&
		printf ":100644 100644 $blob_one $blob_one R100\touter/inner\trenamed\n"
	} >expect &&
	git diff-tree -M -r --no-abbrev one three >actual &&
	test_cmp expect actual

ok 6 - diff-tree FROM duplicate tree, with renames

expecting success of 4058.7 'create a few commits': 
	git commit-tree -m "Duplicate Entries" two^{tree} >commit_id &&
	git branch base $(cat commit_id) &&

	git commit-tree -p $(cat commit_id) -m "Just one" three^{tree} >up &&
	git branch update $(cat up) &&

	git commit-tree -p $(cat up) -m "Back to weird" two^{tree} >final &&
	git branch final $(cat final) &&

	rm commit_id up final

ok 7 - create a few commits

checking known breakage of 4058.8 'git read-tree does not segfault': 
	test_when_finished rm .git/index.lock &&
	test_might_fail git read-tree --reset base

Segmentation fault
test_must_fail: died by signal 11: git read-tree --reset base
not ok 8 - git read-tree does not segfault # TODO known breakage

checking known breakage of 4058.9 'reset --hard does not segfault': 
	test_when_finished rm .git/index.lock &&
	git checkout base &&
	test_might_fail git reset --hard

Switched to branch 'base'
M	outer/inner
D	outer/inner
D	outer/inner
D	outer/inner
Segmentation fault
test_must_fail: died by signal 11: git reset --hard
not ok 9 - reset --hard does not segfault # TODO known breakage

checking known breakage of 4058.10 'git diff HEAD does not segfault': 
	git checkout base &&
	GIT_TEST_CHECK_CACHE_TREE=false &&
	git reset --hard &&
	test_might_fail git diff HEAD

Already on 'base'
M	outer/inner
D	outer/inner
D	outer/inner
D	outer/inner
HEAD is now at 0a0d081 Duplicate Entries
Segmentation fault
test_must_fail: died by signal 11: git diff HEAD
not ok 10 - git diff HEAD does not segfault # TODO known breakage

checking known breakage of 4058.11 'can switch to another branch when status is empty': 
	git clean -ffdqx &&
	git status --porcelain -uno >actual &&
	test_must_be_empty actual &&
	git checkout update

error: Your local changes to the following files would be overwritten by checkout:
	outer/inner
Please commit your changes or stash them before you switch branches.
Aborting
not ok 11 - can switch to another branch when status is empty # TODO known breakage

expecting success of 4058.12 'forcibly switch to another branch, verify status empty': 
	git checkout -f update &&
	git status --porcelain -uno >actual &&
	test_must_be_empty actual

Switched to branch 'update'
ok 12 - forcibly switch to another branch, verify status empty

expecting success of 4058.13 'fast-forward from non-duplicate entries to duplicate': 
	git merge final

Updating 4814dcd..c713d2c
Fast-forward
 renamed => outer/inner | 0
 outer/inner            | 1 +
 outer/inner            | 1 +
 outer/inner            | 1 +
 4 files changed, 3 insertions(+)
 rename renamed => outer/inner (100%)
 create mode 100644 outer/inner
 create mode 100644 outer/inner
 create mode 100644 outer/inner
ok 13 - fast-forward from non-duplicate entries to duplicate

checking known breakage of 4058.14 'clean status, switch branches, status still clean': 
	git status --porcelain -uno >actual &&
	test_must_be_empty actual &&
	git checkout base &&
	git status --porcelain -uno >actual &&
	test_must_be_empty actual

'actual' is not empty, it contains:
M  outer/inner
not ok 14 - clean status, switch branches, status still clean # TODO known breakage

expecting success of 4058.15 'switch to base branch and force status to be clean': 
	git checkout base &&
	GIT_TEST_CHECK_CACHE_TREE=false git reset --hard &&
	git status --porcelain -uno >actual &&
	test_must_be_empty actual

Switched to branch 'base'
M	outer/inner
D	outer/inner
D	outer/inner
D	outer/inner
HEAD is now at 0a0d081 Duplicate Entries
ok 15 - switch to base branch and force status to be clean

checking known breakage of 4058.16 'fast-forward from duplicate entries to non-duplicate': 
	git merge update

Segmentation fault
not ok 16 - fast-forward from duplicate entries to non-duplicate # TODO known breakage

# still have 6 known breakage(s)
# passed all remaining 10 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4052-stat-output.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4052-stat-output/.git/
expecting success of 4052.1 'preparation': 
	>"$name" &&
	git add "$name" &&
	git commit -m message &&
	echo a >"$name" &&
	git commit -m message "$name"

[main (root-commit) cf6b1ff] message
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[main 04c0ded] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - preparation

expecting success of 4052.2 'format-patch: small change with long name gives more space to the name': 
	git format-patch -1 --stdout >output &&
	grep " | " output >actual &&
	test_cmp expect72 actual

ok 2 - format-patch: small change with long name gives more space to the name

expecting success of 4052.3 'diff: small change with long name gives more space to the name': 
		git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp expect80 actual
	
ok 3 - diff: small change with long name gives more space to the name

expecting success of 4052.4 'show: small change with long name gives more space to the name': 
		git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp expect80 actual
	
ok 4 - show: small change with long name gives more space to the name

expecting success of 4052.5 'log: small change with long name gives more space to the name': 
		git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp expect80 actual
	
ok 5 - log: small change with long name gives more space to the name

expecting success of 4052.6 'format-patch --stat=width: a long name is given more room when the bar is short': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 6 - format-patch --stat=width: a long name is given more room when the bar is short

expecting success of 4052.7 'format-patch --stat-width=width with long name': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 7 - format-patch --stat-width=width with long name

expecting success of 4052.8 'format-patch --stat=...,name-width with long name': 
		git $cmd $args --stat=60,30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 8 - format-patch --stat=...,name-width with long name

expecting success of 4052.9 'format-patch --stat-name-width with long name': 
		git $cmd $args --stat-name-width=30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 9 - format-patch --stat-name-width with long name

expecting success of 4052.10 'diff --stat=width: a long name is given more room when the bar is short': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 10 - diff --stat=width: a long name is given more room when the bar is short

expecting success of 4052.11 'diff --stat-width=width with long name': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 11 - diff --stat-width=width with long name

expecting success of 4052.12 'diff --stat=...,name-width with long name': 
		git $cmd $args --stat=60,30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 12 - diff --stat=...,name-width with long name

expecting success of 4052.13 'diff --stat-name-width with long name': 
		git $cmd $args --stat-name-width=30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 13 - diff --stat-name-width with long name

expecting success of 4052.14 'show --stat=width: a long name is given more room when the bar is short': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 14 - show --stat=width: a long name is given more room when the bar is short

expecting success of 4052.15 'show --stat-width=width with long name': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 15 - show --stat-width=width with long name

expecting success of 4052.16 'show --stat=...,name-width with long name': 
		git $cmd $args --stat=60,30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 16 - show --stat=...,name-width with long name

expecting success of 4052.17 'show --stat-name-width with long name': 
		git $cmd $args --stat-name-width=30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 17 - show --stat-name-width with long name

expecting success of 4052.18 'log --stat=width: a long name is given more room when the bar is short': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 18 - log --stat=width: a long name is given more room when the bar is short

expecting success of 4052.19 'log --stat-width=width with long name': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp $expect.60 actual
	
ok 19 - log --stat-width=width with long name

expecting success of 4052.20 'log --stat=...,name-width with long name': 
		git $cmd $args --stat=60,30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 20 - log --stat=...,name-width with long name

expecting success of 4052.21 'log --stat-name-width with long name': 
		git $cmd $args --stat-name-width=30 >output &&
		grep " | " output >actual &&
		test_cmp $expect.6030 actual
	
ok 21 - log --stat-name-width with long name

expecting success of 4052.22 'preparation for big change tests': 
	>abcd &&
	git add abcd &&
	git commit -m message &&
	i=0 &&
	while test $i -lt 1000
	do
		echo $i && i=$(($i + 1)) || return 1
	done >abcd &&
	git commit -m message abcd

[main c0936d4] message
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 abcd
[main e7fde6f] message
 Author: A U Thor <author@example.com>
 1 file changed, 1000 insertions(+)
ok 22 - preparation for big change tests

expecting success of 4052.23 'format-patch --cover-letter ignores COLUMNS (big change)': 
	COLUMNS=200 git format-patch -1 --stdout --cover-letter >output &&
	grep " | " output >actual &&
	test_cmp expect72 actual

ok 23 - format-patch --cover-letter ignores COLUMNS (big change)

expecting success of 4052.24 'format-patch ignores COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 24 - format-patch ignores COLUMNS (big change)

expecting success of 4052.25 'format-patch --graph ignores COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 25 - format-patch --graph ignores COLUMNS (big change)

expecting success of 4052.26 'diff respects COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 26 - diff respects COLUMNS (big change)

expecting success of 4052.27 'show respects COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 27 - show respects COLUMNS (big change)

expecting success of 4052.28 'log respects COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 28 - log respects COLUMNS (big change)

expecting success of 4052.29 'log --graph respects COLUMNS (big change)': 
		COLUMNS=200 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 29 - log --graph respects COLUMNS (big change)

expecting success of 4052.30 'format-patch ignores not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 30 - format-patch ignores not enough COLUMNS (big change)

expecting success of 4052.31 'format-patch --graph ignores not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 31 - format-patch --graph ignores not enough COLUMNS (big change)

expecting success of 4052.32 'diff respects not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 32 - diff respects not enough COLUMNS (big change)

expecting success of 4052.33 'show respects not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 33 - show respects not enough COLUMNS (big change)

expecting success of 4052.34 'log respects not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 34 - log respects not enough COLUMNS (big change)

expecting success of 4052.35 'log --graph respects not enough COLUMNS (big change)': 
		COLUMNS=40 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 35 - log --graph respects not enough COLUMNS (big change)

expecting success of 4052.36 'format-patch ignores statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 36 - format-patch ignores statGraphWidth config

expecting success of 4052.37 'format-patch --graph ignores statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 37 - format-patch --graph ignores statGraphWidth config

expecting success of 4052.38 'diff respects statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 38 - diff respects statGraphWidth config

expecting success of 4052.39 'show respects statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 39 - show respects statGraphWidth config

expecting success of 4052.40 'log respects statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 40 - log respects statGraphWidth config

expecting success of 4052.41 'log --graph respects statGraphWidth config': 
		git -c diff.statGraphWidth=26 $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 41 - log --graph respects statGraphWidth config

expecting success of 4052.42 'format-patch --stat=width with big change': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 42 - format-patch --stat=width with big change

expecting success of 4052.43 'format-patch --stat-width=width with big change': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 43 - format-patch --stat-width=width with big change

expecting success of 4052.44 'format-patch --stat-graph-width with big change': 
		git $cmd $args --stat-graph-width=26 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 44 - format-patch --stat-graph-width with big change

expecting success of 4052.45 'format-patch --stat-width=width --graph with big change': 
		git $cmd $args --stat-width=40 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 45 - format-patch --stat-width=width --graph with big change

expecting success of 4052.46 'format-patch --stat-graph-width --graph with big change': 
		git $cmd $args --stat-graph-width=26 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 46 - format-patch --stat-graph-width --graph with big change

expecting success of 4052.47 'diff --stat=width with big change': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 47 - diff --stat=width with big change

expecting success of 4052.48 'diff --stat-width=width with big change': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 48 - diff --stat-width=width with big change

expecting success of 4052.49 'diff --stat-graph-width with big change': 
		git $cmd $args --stat-graph-width=26 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 49 - diff --stat-graph-width with big change

expecting success of 4052.50 'show --stat=width with big change': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 50 - show --stat=width with big change

expecting success of 4052.51 'show --stat-width=width with big change': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 51 - show --stat-width=width with big change

expecting success of 4052.52 'show --stat-graph-width with big change': 
		git $cmd $args --stat-graph-width=26 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 52 - show --stat-graph-width with big change

expecting success of 4052.53 'log --stat=width with big change': 
		git $cmd $args --stat=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 53 - log --stat=width with big change

expecting success of 4052.54 'log --stat-width=width with big change': 
		git $cmd $args --stat-width=40 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 54 - log --stat-width=width with big change

expecting success of 4052.55 'log --stat-graph-width with big change': 
		git $cmd $args --stat-graph-width=26 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 55 - log --stat-graph-width with big change

expecting success of 4052.56 'log --stat-width=width --graph with big change': 
		git $cmd $args --stat-width=40 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 56 - log --stat-width=width --graph with big change

expecting success of 4052.57 'log --stat-graph-width --graph with big change': 
		git $cmd $args --stat-graph-width=26 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 57 - log --stat-graph-width --graph with big change

expecting success of 4052.58 'preparation for long filename tests': 
	cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
	git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
	git commit -m message

[main 0a60d77] message
 Author: A U Thor <author@example.com>
 1 file changed, 1000 insertions(+)
 create mode 100644 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ok 58 - preparation for long filename tests

expecting success of 4052.59 'format-patch --stat=width with big change is more balanced': 
		git $cmd $args --stat-width=60 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 59 - format-patch --stat=width with big change is more balanced

expecting success of 4052.60 'format-patch --stat=width --graph with big change is balanced': 
		git $cmd $args --stat-width=60 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 60 - format-patch --stat=width --graph with big change is balanced

expecting success of 4052.61 'diff --stat=width with big change is more balanced': 
		git $cmd $args --stat-width=60 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 61 - diff --stat=width with big change is more balanced

expecting success of 4052.62 'show --stat=width with big change is more balanced': 
		git $cmd $args --stat-width=60 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 62 - show --stat=width with big change is more balanced

expecting success of 4052.63 'log --stat=width with big change is more balanced': 
		git $cmd $args --stat-width=60 >output &&
		grep " | " output >actual &&
		test_cmp expect actual
	
ok 63 - log --stat=width with big change is more balanced

expecting success of 4052.64 'log --stat=width --graph with big change is balanced': 
		git $cmd $args --stat-width=60 --graph >output &&
		grep " | " output >actual &&
		test_cmp expect-graph actual
	
ok 64 - log --stat=width --graph with big change is balanced

expecting success of 4052.65 'format-patch ignores COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 65 - format-patch ignores COLUMNS (long filename)

expecting success of 4052.66 'format-patch --graph ignores COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 66 - format-patch --graph ignores COLUMNS (long filename)

expecting success of 4052.67 'diff respects COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 67 - diff respects COLUMNS (long filename)

expecting success of 4052.68 'show respects COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 68 - show respects COLUMNS (long filename)

expecting success of 4052.69 'log respects COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 69 - log respects COLUMNS (long filename)

expecting success of 4052.70 'log --graph respects COLUMNS (long filename)': 
		COLUMNS=200 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 70 - log --graph respects COLUMNS (long filename)

expecting success of 4052.71 'format-patch ignores prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 71 - format-patch ignores prefix greater than COLUMNS (big change)

expecting success of 4052.72 'format-patch --graph ignores prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 72 - format-patch --graph ignores prefix greater than COLUMNS (big change)

expecting success of 4052.73 'diff respects prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 73 - diff respects prefix greater than COLUMNS (big change)

expecting success of 4052.74 'show respects prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 74 - show respects prefix greater than COLUMNS (big change)

expecting success of 4052.75 'log respects prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args >output &&
		grep " | " output >actual &&
		test_cmp "$expect" actual
	
ok 75 - log respects prefix greater than COLUMNS (big change)

expecting success of 4052.76 'log --graph respects prefix greater than COLUMNS (big change)': 
		COLUMNS=1 git $cmd $args --graph >output &&
		grep " | " output >actual &&
		test_cmp "$expect-graph" actual
	
ok 76 - log --graph respects prefix greater than COLUMNS (big change)

expecting success of 4052.77 'merge --stat respects COLUMNS (big change)': 
	git checkout -b branch HEAD^^ &&
	COLUMNS=100 git merge --stat --no-ff main^ >output &&
	grep " | " output >actual &&
	test_cmp expect actual

Switched to a new branch 'branch'
ok 77 - merge --stat respects COLUMNS (big change)

expecting success of 4052.78 'merge --stat respects COLUMNS (long filename)': 
	COLUMNS=100 git merge --stat --no-ff main >output &&
	grep " | " output >actual &&
	test_cmp expect actual

ok 78 - merge --stat respects COLUMNS (long filename)

# passed all 78 test(s)
1..78
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4057-diff-combined-paths.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4057-diff-combined-paths/.git/
expecting success of 4057.1 'trivial merge - combine-diff empty': 
	for i in $(test_seq 1 9)
	do
		echo $i >$i.txt &&
		git add $i.txt || return 1
	done &&
	git commit -m "init" &&
	git checkout -b side &&
	for i in $(test_seq 2 9)
	do
		echo $i/2 >>$i.txt || return 1
	done &&
	git commit -a -m "side 2-9" &&
	git checkout main &&
	echo 1/2 >1.txt &&
	git commit -a -m "main 1" &&
	git merge side &&
	>diffc.expect &&
	diffc_verify

[main (root-commit) 0e4c78d] init
 Author: A U Thor <author@example.com>
 9 files changed, 9 insertions(+)
 create mode 100644 1.txt
 create mode 100644 2.txt
 create mode 100644 3.txt
 create mode 100644 4.txt
 create mode 100644 5.txt
 create mode 100644 6.txt
 create mode 100644 7.txt
 create mode 100644 8.txt
 create mode 100644 9.txt
Switched to a new branch 'side'
[side 18d7b5a] side 2-9
 Author: A U Thor <author@example.com>
 8 files changed, 8 insertions(+)
Switched to branch 'main'
[main 0d0c265] main 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ort' strategy.
 2.txt | 1 +
 3.txt | 1 +
 4.txt | 1 +
 5.txt | 1 +
 6.txt | 1 +
 7.txt | 1 +
 8.txt | 1 +
 9.txt | 1 +
 8 files changed, 8 insertions(+)
ok 1 - trivial merge - combine-diff empty

expecting success of 4057.2 'only one truly conflicting path': 
	git checkout side &&
	for i in $(test_seq 2 9)
	do
		echo $i/3 >>$i.txt || return 1
	done &&
	echo "4side" >>4.txt &&
	git commit -a -m "side 2-9 +4" &&
	git checkout main &&
	for i in $(test_seq 1 9)
	do
		echo $i/3 >>$i.txt || return 1
	done &&
	echo "4main" >>4.txt &&
	git commit -a -m "main 1-9 +4" &&
	test_must_fail git merge side &&
	cat <<-\EOF >4.txt &&
	4
	4/2
	4/3
	4main
	4side
	EOF
	git add 4.txt &&
	git commit -m "merge side (2)" &&
	echo 4.txt >diffc.expect &&
	diffc_verify

Switched to branch 'side'
[side ff32fb3] side 2-9 +4
 Author: A U Thor <author@example.com>
 8 files changed, 9 insertions(+)
Switched to branch 'main'
[main 0b5ecd8] main 1-9 +4
 Author: A U Thor <author@example.com>
 9 files changed, 10 insertions(+)
Auto-merging 4.txt
CONFLICT (content): Merge conflict in 4.txt
Automatic merge failed; fix conflicts and then commit the result.
[main 6619a01] merge side (2)
 Author: A U Thor <author@example.com>
ok 2 - only one truly conflicting path

expecting success of 4057.3 'merge introduces new file': 
	git checkout side &&
	for i in $(test_seq 5 9)
	do
		echo $i/4 >>$i.txt || return 1
	done &&
	git commit -a -m "side 5-9" &&
	git checkout main &&
	for i in $(test_seq 1 3)
	do
		echo $i/4 >>$i.txt || return 1
	done &&
	git commit -a -m "main 1-3 +4hello" &&
	git merge side &&
	echo "Hello World" >4hello.txt &&
	git add 4hello.txt &&
	git commit --amend &&
	echo 4hello.txt >diffc.expect &&
	diffc_verify

Switched to branch 'side'
[side e8c29ca] side 5-9
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
Switched to branch 'main'
[main 0635bd5] main 1-3 +4hello
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
Merge made by the 'ort' strategy.
 5.txt | 1 +
 6.txt | 1 +
 7.txt | 1 +
 8.txt | 1 +
 9.txt | 1 +
 5 files changed, 5 insertions(+)
[main 7d30ccd] Merge branch 'side'
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
ok 3 - merge introduces new file

expecting success of 4057.4 'merge removed a file': 
	git checkout side &&
	for i in $(test_seq 5 9)
	do
		echo $i/5 >>$i.txt || return 1
	done &&
	git commit -a -m "side 5-9" &&
	git checkout main &&
	for i in $(test_seq 1 3)
	do
		echo $i/4 >>$i.txt || return 1
	done &&
	git commit -a -m "main 1-3" &&
	git merge side &&
	git rm 4.txt &&
	git commit --amend &&
	echo 4.txt >diffc.expect &&
	diffc_verify

Switched to branch 'side'
[side da3ab5d] side 5-9
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
Switched to branch 'main'
[main 61e8724] main 1-3
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
Merge made by the 'ort' strategy.
 5.txt | 1 +
 6.txt | 1 +
 7.txt | 1 +
 8.txt | 1 +
 9.txt | 1 +
 5 files changed, 5 insertions(+)
rm '4.txt'
[main dd9bbd5] Merge branch 'side'
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
ok 4 - merge removed a file

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4062-diff-pickaxe.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4062-diff-pickaxe/.git/
expecting success of 4062.1 'setup': 
	test_commit initial &&
	printf "%04096d" 0 >4096-zeroes.txt &&
	git add 4096-zeroes.txt &&
	test_tick &&
	git commit -m "A 4k file"

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[master 98d74df] A 4k file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4096-zeroes.txt
ok 1 - setup

expecting success of 4062.2 '-G matches': 
	git diff --name-only -G "^(0{64}){64}$" HEAD^ >out &&
	test 4096-zeroes.txt = "$(cat out)"

ok 2 - -G matches

expecting success of 4062.3 '-S --pickaxe-regex': 
	git diff --name-only -S0 --pickaxe-regex HEAD^ >out &&
	verbose test 4096-zeroes.txt = "$(cat out)"

ok 3 - -S --pickaxe-regex

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4063-diff-blobs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4063-diff-blobs/.git/
expecting success of 4063.1 'create some blobs': 
	echo one >one &&
	echo two >two &&
	chmod +x two &&
	git add . &&

	# cover systems where modes are ignored
	git update-index --chmod=+x two &&

	git commit -m base &&

	sha1_one=$(git rev-parse HEAD:one) &&
	sha1_two=$(git rev-parse HEAD:two)

[master (root-commit) e18d699] base
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one
 create mode 100755 two
ok 1 - create some blobs

expecting success of 4063.2 'diff by sha1': 
	run_diff $sha1_one $sha1_two

ok 2 - diff by sha1

expecting success of 4063.3 'index of sha1 diff': 
	check_index $sha1_one $sha1_two

index 5626abf0f72e58d7a153368ba57db4c673c0e171..f719efd430d52bcfc8566a43b2eb655688d38871 100644
ok 3 - index of sha1 diff

expecting success of 4063.4 'sha1 diff uses arguments as paths': 
	check_paths $sha1_one $sha1_two

diff --git a/5626abf0f72e58d7a153368ba57db4c673c0e171 b/f719efd430d52bcfc8566a43b2eb655688d38871
ok 4 - sha1 diff uses arguments as paths

expecting success of 4063.5 'sha1 diff has no mode change': 
	! grep mode diff

ok 5 - sha1 diff has no mode change

expecting success of 4063.6 'diff by tree:path (run)': 
	run_diff HEAD:one HEAD:two

ok 6 - diff by tree:path (run)

expecting success of 4063.7 'index of tree:path diff': 
	check_index $sha1_one $sha1_two

index 5626abf0f72e58d7a153368ba57db4c673c0e171..f719efd430d52bcfc8566a43b2eb655688d38871
ok 7 - index of tree:path diff

expecting success of 4063.8 'tree:path diff uses filenames as paths': 
	check_paths one two

diff --git a/one b/two
ok 8 - tree:path diff uses filenames as paths

expecting success of 4063.9 'tree:path diff shows mode change': 
	check_mode 100644 100755

old mode 100644
new mode 100755
ok 9 - tree:path diff shows mode change

expecting success of 4063.10 'diff by ranged tree:path': 
	run_diff HEAD:one..HEAD:two

ok 10 - diff by ranged tree:path

expecting success of 4063.11 'index of ranged tree:path diff': 
	check_index $sha1_one $sha1_two

index 5626abf0f72e58d7a153368ba57db4c673c0e171..f719efd430d52bcfc8566a43b2eb655688d38871
ok 11 - index of ranged tree:path diff

expecting success of 4063.12 'ranged tree:path diff uses filenames as paths': 
	check_paths one two

diff --git a/one b/two
ok 12 - ranged tree:path diff uses filenames as paths

expecting success of 4063.13 'ranged tree:path diff shows mode change': 
	check_mode 100644 100755

old mode 100644
new mode 100755
ok 13 - ranged tree:path diff shows mode change

expecting success of 4063.14 'diff blob against file': 
	run_diff HEAD:one two

ok 14 - diff blob against file

expecting success of 4063.15 'index of blob-file diff': 
	check_index $sha1_one $sha1_two

index 5626abf0f72e58d7a153368ba57db4c673c0e171..f719efd430d52bcfc8566a43b2eb655688d38871
ok 15 - index of blob-file diff

expecting success of 4063.16 'blob-file diff uses filename as paths': 
	check_paths one two

diff --git a/one b/two
ok 16 - blob-file diff uses filename as paths

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 4063.17 'blob-file diff shows mode change': 
	check_mode 100644 100755

old mode 100644
new mode 100755
ok 17 - blob-file diff shows mode change

expecting success of 4063.18 'blob-file diff prefers filename to sha1': 
	run_diff $sha1_one two &&
	check_paths two two

diff --git a/two b/two
ok 18 - blob-file diff prefers filename to sha1

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4059-diff-submodule-not-initialized.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4059-diff-submodule-not-initialized/.git/
expecting success of 4059.1 'setup - submodules': 
	test_create_repo sm2 &&
	add_file . foo &&
	add_file sm2 foo1 foo2 &&
	smhead1=$(git -C sm2 rev-parse --short --verify HEAD)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4059-diff-submodule-not-initialized/sm2/.git/
36d39d8
1beffeb
ok 1 - setup - submodules

expecting success of 4059.2 'setup - git submodule add': 
	git -c protocol.file.allow=always submodule add ./sm2 sm1 &&
	commit_file sm1 .gitmodules &&
	git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$smhead1 (new submodule)
	EOF
	test_cmp expected actual

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4059-diff-submodule-not-initialized/sm1'...
done.
ok 2 - setup - git submodule add

expecting success of 4059.3 'submodule directory removed': 
	rm -rf sm1 &&
	git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$smhead1 (new submodule)
	EOF
	test_cmp expected actual

ok 3 - submodule directory removed

expecting success of 4059.4 'setup - submodule multiple commits': 
	git submodule update --checkout sm1 &&
	smhead2=$(add_file sm1 foo3 foo4) &&
	commit_file sm1 &&
	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $smhead1..$smhead2:
	  > Add foo4 ($added foo4)
	  > Add foo3 ($added foo3)
	EOF
	test_cmp expected actual

Submodule path 'sm1': checked out '1beffeb46f4c598c329381e14c03d952fb2e60d8'
ok 4 - setup - submodule multiple commits

expecting success of 4059.5 'submodule removed multiple commits': 
	rm -rf sm1 &&
	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $smhead1..$smhead2:
	  > Add foo4 ($added foo4)
	  > Add foo3 ($added foo3)
	EOF
	test_cmp expected actual

ok 5 - submodule removed multiple commits

expecting success of 4059.6 'submodule not initialized in new clone': 
	git clone . sm3 &&
	git -C sm3 diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $smhead1...$smhead2 (commits not present)
	EOF
	test_cmp expected actual

Cloning into 'sm3'...
done.
ok 6 - submodule not initialized in new clone

expecting success of 4059.7 'setup submodule moved': 
	git submodule update --checkout sm1 &&
	git mv sm1 sm4 &&
	commit_file sm4 &&
	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm4 0000000...$smhead2 (new submodule)
	EOF
	test_cmp expected actual

Submodule path 'sm1': checked out 'b762e6a22f976e7e5d55bfe47bb4c4694f97a64c'
ok 7 - setup submodule moved

expecting success of 4059.8 'submodule moved then removed': 
	smhead3=$(add_file sm4 foo6 foo7) &&
	commit_file sm4 &&
	rm -rf sm4 &&
	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm4 $smhead2..$smhead3:
	  > Add foo7 ($added foo7)
	  > Add foo6 ($added foo6)
	EOF
	test_cmp expected actual

ok 8 - submodule moved then removed

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4065-diff-anchored.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4065-diff-anchored/.git/
expecting success of 4065.1 '--anchored': 
	printf "a\nb\nc\n" >pre &&
	printf "c\na\nb\n" >post &&

	# normally, c is moved to produce the smallest diff
	test_expect_code 1 git diff --no-index pre post >diff &&
	grep "^+c" diff &&

	# with anchor, a is moved
	test_expect_code 1 git diff --no-index --anchored=c pre post >diff &&
	grep "^+a" diff

+c
+a
ok 1 - --anchored

expecting success of 4065.2 '--anchored multiple': 
	printf "a\nb\nc\nd\ne\nf\n" >pre &&
	printf "c\na\nb\nf\nd\ne\n" >post &&

	# with 1 anchor, c is not moved, but f is moved
	test_expect_code 1 git diff --no-index --anchored=c pre post >diff &&
	grep "^+a" diff && # a is moved instead of c
	grep "^+f" diff &&

	# with 2 anchors, c and f are not moved
	test_expect_code 1 git diff --no-index --anchored=c --anchored=f pre post >diff &&
	grep "^+a" diff &&
	grep "^+d" diff # d is moved instead of f

+a
+f
+a
+d
ok 2 - --anchored multiple

expecting success of 4065.3 '--anchored with nonexistent line has no effect': 
	printf "a\nb\nc\n" >pre &&
	printf "c\na\nb\n" >post &&

	test_expect_code 1 git diff --no-index --anchored=x pre post >diff &&
	grep "^+c" diff

+c
ok 3 - --anchored with nonexistent line has no effect

expecting success of 4065.4 '--anchored with non-unique line has no effect': 
	printf "a\nb\nc\nd\ne\nc\n" >pre &&
	printf "c\na\nb\nc\nd\ne\n" >post &&

	test_expect_code 1 git diff --no-index --anchored=c pre post >diff &&
	grep "^+c" diff

+c
ok 4 - --anchored with non-unique line has no effect

expecting success of 4065.5 'diff still produced with impossible multiple --anchored': 
	printf "a\nb\nc\n" >pre &&
	printf "c\na\nb\n" >post &&

	test_expect_code 1 git diff --no-index --anchored=a --anchored=c pre post >diff &&
	mv post expected_post &&

	# Ensure that the diff is correct by applying it and then
	# comparing the result with the original
	git apply diff &&
	diff expected_post post

ok 5 - diff still produced with impossible multiple --anchored

expecting success of 4065.6 'later algorithm arguments override earlier ones': 
	printf "a\nb\nc\n" >pre &&
	printf "c\na\nb\n" >post &&

	test_expect_code 1 git diff --no-index --patience --anchored=c pre post >diff &&
	grep "^+a" diff &&

	test_expect_code 1 git diff --no-index --anchored=c --patience pre post >diff &&
	grep "^+c" diff &&

	test_expect_code 1 git diff --no-index --histogram --anchored=c pre post >diff &&
	grep "^+a" diff &&

	test_expect_code 1 git diff --no-index --anchored=c --histogram pre post >diff &&
	grep "^+c" diff

+a
+c
+a
+c
ok 6 - later algorithm arguments override earlier ones

expecting success of 4065.7 '--anchored works with other commands like "git show"': 
	printf "a\nb\nc\n" >file &&
	git add file &&
	git commit -m foo &&
	printf "c\na\nb\n" >file &&
	git add file &&
	git commit -m foo &&

	# with anchor, a is moved
	git show --patience --anchored=c >diff &&
	grep "^+a" diff

[master (root-commit) 59a79f0] foo
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 file
[master 798b1ed] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
+a
ok 7 - --anchored works with other commands like "git show"

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4061-diff-indent.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4061-diff-indent/.git/
expecting success of 4061.1 'prepare': 
	cat <<-\EOF >spaces.txt &&
	1
	2
	a

	b
	3
	4
	EOF

	cat <<-\EOF >functions.c &&
	1
	2
	/* function */
	foo() {
	    foo
	}

	3
	4
	EOF

	git add spaces.txt functions.c &&
	test_tick &&
	git commit -m initial &&
	git branch old &&

	cat <<-\EOF >spaces.txt &&
	1
	2
	a

	b
	a

	b
	3
	4
	EOF

	cat <<-\EOF >functions.c &&
	1
	2
	/* function */
	bar() {
	    foo
	}

	/* function */
	foo() {
	    foo
	}

	3
	4
	EOF

	git add spaces.txt functions.c &&
	test_tick &&
	git commit -m initial &&
	git branch new &&

	tr "_" " " <<-\EOF >spaces-expect &&
	diff --git a/spaces.txt b/spaces.txt
	--- a/spaces.txt
	+++ b/spaces.txt
	@@ -3,5 +3,8 @@
	 a
	_
	 b
	+a
	+
	+b
	 3
	 4
	EOF

	tr "_" " " <<-\EOF >spaces-compacted-expect &&
	diff --git a/spaces.txt b/spaces.txt
	--- a/spaces.txt
	+++ b/spaces.txt
	@@ -2,6 +2,9 @@
	 2
	 a
	_
	+b
	+a
	+
	 b
	 3
	 4
	EOF

	tr "_" " " <<-\EOF >functions-expect &&
	diff --git a/functions.c b/functions.c
	--- a/functions.c
	+++ b/functions.c
	@@ -1,6 +1,11 @@
	 1
	 2
	 /* function */
	+bar() {
	+    foo
	+}
	+
	+/* function */
	 foo() {
	     foo
	 }
	EOF

	tr "_" " " <<-\EOF >functions-compacted-expect
	diff --git a/functions.c b/functions.c
	--- a/functions.c
	+++ b/functions.c
	@@ -1,5 +1,10 @@
	 1
	 2
	+/* function */
	+bar() {
	+    foo
	+}
	+
	 /* function */
	 foo() {
	     foo
	EOF

[main (root-commit) a2a2312] initial
 Author: A U Thor <author@example.com>
 2 files changed, 16 insertions(+)
 create mode 100644 functions.c
 create mode 100644 spaces.txt
[main cc6bd2a] initial
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
ok 1 - prepare

expecting success of 4061.2 'diff: ugly spaces': 
	git diff --no-indent-heuristic old new -- spaces.txt >out &&
	compare_diff spaces-expect out

ok 2 - diff: ugly spaces

expecting success of 4061.3 'diff: --no-indent-heuristic overrides config': 
	git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&
	compare_diff spaces-expect out2

ok 3 - diff: --no-indent-heuristic overrides config

expecting success of 4061.4 'diff: nice spaces with --indent-heuristic': 
	git -c diff.indentHeuristic=false diff --indent-heuristic old new -- spaces.txt >out-compacted &&
	compare_diff spaces-compacted-expect out-compacted

ok 4 - diff: nice spaces with --indent-heuristic

expecting success of 4061.5 'diff: nice spaces with diff.indentHeuristic=true': 
	git -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&
	compare_diff spaces-compacted-expect out-compacted2

ok 5 - diff: nice spaces with diff.indentHeuristic=true

expecting success of 4061.6 'diff: --indent-heuristic with --patience': 
	git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&
	compare_diff spaces-compacted-expect out-compacted3

ok 6 - diff: --indent-heuristic with --patience

expecting success of 4061.7 'diff: --indent-heuristic with --histogram': 
	git diff --indent-heuristic --histogram old new -- spaces.txt >out-compacted4 &&
	compare_diff spaces-compacted-expect out-compacted4

ok 7 - diff: --indent-heuristic with --histogram

expecting success of 4061.8 'diff: ugly functions': 
	git diff --no-indent-heuristic old new -- functions.c >out &&
	compare_diff functions-expect out

ok 8 - diff: ugly functions

expecting success of 4061.9 'diff: nice functions with --indent-heuristic': 
	git diff --indent-heuristic old new -- functions.c >out-compacted &&
	compare_diff functions-compacted-expect out-compacted

ok 9 - diff: nice functions with --indent-heuristic

expecting success of 4061.10 'blame: nice spaces with --indent-heuristic': 
	git blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&
	compare_blame spaces-compacted-expect out-blame-compacted

ok 10 - blame: nice spaces with --indent-heuristic

expecting success of 4061.11 'blame: nice spaces with diff.indentHeuristic=true': 
	git -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 &&
	compare_blame spaces-compacted-expect out-blame-compacted2

ok 11 - blame: nice spaces with diff.indentHeuristic=true

expecting success of 4061.12 'blame: ugly spaces with --no-indent-heuristic': 
	git blame --no-indent-heuristic old..new -- spaces.txt >out-blame &&
	compare_blame spaces-expect out-blame

ok 12 - blame: ugly spaces with --no-indent-heuristic

expecting success of 4061.13 'blame: ugly spaces with diff.indentHeuristic=false': 
	git -c diff.indentHeuristic=false blame old..new -- spaces.txt >out-blame2 &&
	compare_blame spaces-expect out-blame2

ok 13 - blame: ugly spaces with diff.indentHeuristic=false

expecting success of 4061.14 'blame: --no-indent-heuristic overrides config': 
	git -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame3 &&
	git blame old..new -- spaces.txt >out-blame &&
	compare_blame spaces-expect out-blame3

ok 14 - blame: --no-indent-heuristic overrides config

expecting success of 4061.15 'blame: --indent-heuristic overrides config': 
	git -c diff.indentHeuristic=false blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted3 &&
	compare_blame spaces-compacted-expect out-blame-compacted2

ok 15 - blame: --indent-heuristic overrides config

expecting success of 4061.16 'diff-tree: nice spaces with --indent-heuristic': 
	git diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted &&
	compare_diff spaces-compacted-expect out-diff-tree-compacted

ok 16 - diff-tree: nice spaces with --indent-heuristic

expecting success of 4061.17 'diff-tree: nice spaces with diff.indentHeuristic=true': 
	git -c diff.indentHeuristic=true diff-tree -p old new -- spaces.txt >out-diff-tree-compacted2 &&
	compare_diff spaces-compacted-expect out-diff-tree-compacted2

ok 17 - diff-tree: nice spaces with diff.indentHeuristic=true

expecting success of 4061.18 'diff-tree: ugly spaces with --no-indent-heuristic': 
	git diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree &&
	compare_diff spaces-expect out-diff-tree

ok 18 - diff-tree: ugly spaces with --no-indent-heuristic

expecting success of 4061.19 'diff-tree: ugly spaces with diff.indentHeuristic=false': 
	git -c diff.indentHeuristic=false diff-tree -p old new -- spaces.txt >out-diff-tree2 &&
	compare_diff spaces-expect out-diff-tree2

ok 19 - diff-tree: ugly spaces with diff.indentHeuristic=false

expecting success of 4061.20 'diff-tree: --indent-heuristic overrides config': 
	git -c diff.indentHeuristic=false diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted3 &&
	compare_diff spaces-compacted-expect out-diff-tree-compacted3

ok 20 - diff-tree: --indent-heuristic overrides config

expecting success of 4061.21 'diff-tree: --no-indent-heuristic overrides config': 
	git -c diff.indentHeuristic=true diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree3 &&
	compare_diff spaces-expect out-diff-tree3

ok 21 - diff-tree: --no-indent-heuristic overrides config

expecting success of 4061.22 'diff-index: nice spaces with --indent-heuristic': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted &&
	compare_diff spaces-compacted-expect out-diff-index-compacted &&
	git checkout -f main

Switched to a new branch 'diff-index'
Switched to branch 'main'
ok 22 - diff-index: nice spaces with --indent-heuristic

expecting success of 4061.23 'diff-index: nice spaces with diff.indentHeuristic=true': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git -c diff.indentHeuristic=true diff-index -p old -- spaces.txt >out-diff-index-compacted2 &&
	compare_diff spaces-compacted-expect out-diff-index-compacted2 &&
	git checkout -f main

Switched to and reset branch 'diff-index'
Switched to branch 'main'
ok 23 - diff-index: nice spaces with diff.indentHeuristic=true

expecting success of 4061.24 'diff-index: ugly spaces with --no-indent-heuristic': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index &&
	compare_diff spaces-expect out-diff-index &&
	git checkout -f main

Switched to and reset branch 'diff-index'
Switched to branch 'main'
ok 24 - diff-index: ugly spaces with --no-indent-heuristic

expecting success of 4061.25 'diff-index: ugly spaces with diff.indentHeuristic=false': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git -c diff.indentHeuristic=false diff-index -p old -- spaces.txt >out-diff-index2 &&
	compare_diff spaces-expect out-diff-index2 &&
	git checkout -f main

Switched to and reset branch 'diff-index'
Switched to branch 'main'
ok 25 - diff-index: ugly spaces with diff.indentHeuristic=false

expecting success of 4061.26 'diff-index: --indent-heuristic overrides config': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git -c diff.indentHeuristic=false diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted3 &&
	compare_diff spaces-compacted-expect out-diff-index-compacted3 &&
	git checkout -f main

Switched to and reset branch 'diff-index'
Switched to branch 'main'
ok 26 - diff-index: --indent-heuristic overrides config

expecting success of 4061.27 'diff-index: --no-indent-heuristic overrides config': 
	git checkout -B diff-index &&
	git reset --soft HEAD~ &&
	git -c diff.indentHeuristic=true diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index3 &&
	compare_diff spaces-expect out-diff-index3 &&
	git checkout -f main

Switched to and reset branch 'diff-index'
Switched to branch 'main'
ok 27 - diff-index: --no-indent-heuristic overrides config

expecting success of 4061.28 'diff-files: nice spaces with --indent-heuristic': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw &&
	grep -v index out-diff-files-raw >out-diff-files-compacted &&
	compare_diff spaces-compacted-expect out-diff-files-compacted &&
	git checkout -f main

Switched to a new branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 28 - diff-files: nice spaces with --indent-heuristic

expecting success of 4061.29 'diff-files: nice spaces with diff.indentHeuristic=true': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git -c diff.indentHeuristic=true diff-files -p spaces.txt >out-diff-files-raw2 &&
	grep -v index out-diff-files-raw2 >out-diff-files-compacted2 &&
	compare_diff spaces-compacted-expect out-diff-files-compacted2 &&
	git checkout -f main

Switched to and reset branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 29 - diff-files: nice spaces with diff.indentHeuristic=true

expecting success of 4061.30 'diff-files: ugly spaces with --no-indent-heuristic': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw &&
	grep -v index out-diff-files-raw >out-diff-files &&
	compare_diff spaces-expect out-diff-files &&
	git checkout -f main

Switched to and reset branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 30 - diff-files: ugly spaces with --no-indent-heuristic

expecting success of 4061.31 'diff-files: ugly spaces with diff.indentHeuristic=false': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git -c diff.indentHeuristic=false diff-files -p spaces.txt >out-diff-files-raw2 &&
	grep -v index out-diff-files-raw2 >out-diff-files &&
	compare_diff spaces-expect out-diff-files &&
	git checkout -f main

Switched to and reset branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 31 - diff-files: ugly spaces with diff.indentHeuristic=false

expecting success of 4061.32 'diff-files: --indent-heuristic overrides config': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git -c diff.indentHeuristic=false diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw3 &&
	grep -v index out-diff-files-raw3 >out-diff-files-compacted &&
	compare_diff spaces-compacted-expect out-diff-files-compacted &&
	git checkout -f main

Switched to and reset branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 32 - diff-files: --indent-heuristic overrides config

expecting success of 4061.33 'diff-files: --no-indent-heuristic overrides config': 
	git checkout -B diff-files &&
	git reset HEAD~ &&
	git -c diff.indentHeuristic=true diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw4 &&
	grep -v index out-diff-files-raw4 >out-diff-files &&
	compare_diff spaces-expect out-diff-files &&
	git checkout -f main

Switched to and reset branch 'diff-files'
Unstaged changes after reset:
M	functions.c
M	spaces.txt
Switched to branch 'main'
ok 33 - diff-files: --no-indent-heuristic overrides config

# passed all 33 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4066-diff-emit-delay.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4066-diff-emit-delay/.git/
expecting success of 4066.1 'set up history with a merge': 
	test_commit A &&
	test_commit B &&
	git checkout -b side HEAD^ &&
	test_commit C &&
	git merge -m M main &&
	test_commit D

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'side'
[side 5dee784] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Merge made by the 'ort' strategy.
 B.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[side 4d3a2bb] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
ok 1 - set up history with a merge

expecting success of 4066.2 'log --cc -p --stat --color-moved': 
	cat >expect <<-EOF &&
	commit D
	---
	 D.t | 1 +
	 1 file changed, 1 insertion(+)

	diff --git a/D.t b/D.t
	new file mode 100644
	index 0000000..$(git rev-parse --short D:D.t)
	--- /dev/null
	+++ b/D.t
	@@ -0,0 +1 @@
	+D
	commit M

	 B.t | 1 +
	 1 file changed, 1 insertion(+)
	commit C
	---
	 C.t | 1 +
	 1 file changed, 1 insertion(+)

	diff --git a/C.t b/C.t
	new file mode 100644
	index 0000000..$(git rev-parse --short C:C.t)
	--- /dev/null
	+++ b/C.t
	@@ -0,0 +1 @@
	+C
	commit B
	---
	 B.t | 1 +
	 1 file changed, 1 insertion(+)

	diff --git a/B.t b/B.t
	new file mode 100644
	index 0000000..$(git rev-parse --short B:B.t)
	--- /dev/null
	+++ b/B.t
	@@ -0,0 +1 @@
	+B
	commit A
	---
	 A.t | 1 +
	 1 file changed, 1 insertion(+)

	diff --git a/A.t b/A.t
	new file mode 100644
	index 0000000..$(git rev-parse --short A:A.t)
	--- /dev/null
	+++ b/A.t
	@@ -0,0 +1 @@
	+A
	EOF
	git log --format="commit %s" --cc -p --stat --color-moved >actual &&
	test_cmp expect actual

ok 2 - log --cc -p --stat --color-moved

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4064-diff-oidfind.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4064-diff-oidfind/.git/
expecting success of 4064.1 'setup ': 
	git commit --allow-empty -m "empty initial commit" &&

	echo "Hello, world!" >greeting &&
	git add greeting &&
	git commit -m "add the greeting blob" && # borrowed from Git from the Bottom Up
	git tag -m "the blob" greeting $(git rev-parse HEAD:greeting) &&

	echo asdf >unrelated &&
	git add unrelated &&
	git commit -m "unrelated history" &&

	git revert HEAD^ &&

	git commit --allow-empty -m "another unrelated commit"

[master (root-commit) 274b021] empty initial commit
 Author: A U Thor <author@example.com>
[master bae5752] add the greeting blob
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 greeting
[master 87e1d9b] unrelated history
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated
[master 395f7b3] Revert "add the greeting blob"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 deletion(-)
 delete mode 100644 greeting
[master edd3a99] another unrelated commit
 Author: A U Thor <author@example.com>
ok 1 - setup 

expecting success of 4064.2 'find the greeting blob': 
	cat >expect <<-EOF &&
	Revert "add the greeting blob"
	add the greeting blob
	EOF

	git log --format=%s --find-object=greeting^{blob} >actual &&

	test_cmp expect actual

ok 2 - find the greeting blob

expecting success of 4064.3 'setup a tree': 
	mkdir a &&
	echo asdf >a/file &&
	git add a/file &&
	git commit -m "add a file in a subdirectory"

[master 5912b3f] add a file in a subdirectory
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/file
ok 3 - setup a tree

expecting success of 4064.4 'find a tree': 
	cat >expect <<-EOF &&
	add a file in a subdirectory
	EOF

	git log --format=%s -t --find-object=HEAD:a >actual &&

	test_cmp expect actual

ok 4 - find a tree

expecting success of 4064.5 'setup a submodule': 
	test_create_repo sub &&
	test_commit -C sub sub &&
	git submodule add ./sub sub &&
	git commit -a -m "add sub"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4064-diff-oidfind/sub/.git/
[master (root-commit) 672648c] sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub.t
Adding existing repo at 'sub' to the index
[master 9b6ab80] add sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 5 - setup a submodule

expecting success of 4064.6 'find a submodule': 
	cat >expect <<-EOF &&
	add sub
	EOF

	git log --format=%s --find-object=HEAD:sub >actual &&

	test_cmp expect actual

ok 6 - find a submodule

expecting success of 4064.7 'set up merge tests': 
	test_commit base &&

	git checkout -b boring base^ &&
	echo boring >file &&
	git add file &&
	git commit -m boring &&

	git checkout -b interesting base^ &&
	echo interesting >file &&
	git add file &&
	git commit -m interesting &&

	blob=$(git rev-parse interesting:file)

[master df80aba] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Switched to a new branch 'boring'
[boring 6e5eceb] boring
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'interesting'
[interesting 9f8795e] interesting
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 7 - set up merge tests

expecting success of 4064.8 'detect merge which introduces blob': 
	git checkout -B merge base &&
	git merge --no-commit boring &&
	echo interesting >file &&
	git commit -am "introduce blob" &&
	git diff-tree --format=%s --find-object=$blob -c --name-status HEAD >actual &&
	cat >expect <<-\EOF &&
	introduce blob

	AM	file
	EOF
	test_cmp expect actual

Switched to a new branch 'merge'
Automatic merge went well; stopped before committing as requested
[merge 691f20d] introduce blob
 Author: A U Thor <author@example.com>
ok 8 - detect merge which introduces blob

expecting success of 4064.9 'detect merge which removes blob': 
	git checkout -B merge interesting &&
	git merge --no-commit base &&
	echo boring >file &&
	git commit -am "remove blob" &&
	git diff-tree --format=%s --find-object=$blob -c --name-status HEAD >actual &&
	cat >expect <<-\EOF &&
	remove blob

	MA	file
	EOF
	test_cmp expect actual

Reset branch 'merge'
Automatic merge went well; stopped before committing as requested
[merge 5a6d6f7] remove blob
 Author: A U Thor <author@example.com>
ok 9 - detect merge which removes blob

expecting success of 4064.10 'do not detect merge that does not touch blob': 
	git checkout -B merge interesting &&
	git merge -m "untouched blob" base &&
	git diff-tree --format=%s --find-object=$blob -c --name-status HEAD >actual &&
	cat >expect <<-\EOF &&
	untouched blob

	EOF
	test_cmp expect actual

Reset branch 'merge'
Merge made by the 'ort' strategy.
 base.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 10 - do not detect merge that does not touch blob

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4060-diff-submodule-option-diff-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/.git/
expecting success of 4060.1 'setup repository': 
	test_create_repo sm1 &&
	add_file . foo &&
	head1=$(add_file sm1 foo1 foo2) &&
	fullhead1=$(git -C sm1 rev-parse --verify HEAD)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/sm1/.git/
36d39d8
ok 1 - setup repository

expecting success of 4060.2 'added submodule': 
	git add sm1 &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$head1 (new submodule)
	diff --git a/sm1/foo1 b/sm1/foo1
	new file mode 100644
	index 0000000..1715acd
	--- /dev/null
	+++ b/sm1/foo1
	@@ -0,0 +1 @@
	+foo1
	diff --git a/sm1/foo2 b/sm1/foo2
	new file mode 100644
	index 0000000..54b060e
	--- /dev/null
	+++ b/sm1/foo2
	@@ -0,0 +1 @@
	+foo2
	EOF
	diff_cmp expected actual

warning: adding embedded git repository: sm1
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm1
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm1
hint: 
hint: See "git help submodule" for more information.
ok 2 - added submodule

expecting success of 4060.3 'added submodule, set diff.submodule': 
	test_config diff.submodule log &&
	git add sm1 &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 0000000...$head1 (new submodule)
	diff --git a/sm1/foo1 b/sm1/foo1
	new file mode 100644
	index 0000000..1715acd
	--- /dev/null
	+++ b/sm1/foo1
	@@ -0,0 +1 @@
	+foo1
	diff --git a/sm1/foo2 b/sm1/foo2
	new file mode 100644
	index 0000000..54b060e
	--- /dev/null
	+++ b/sm1/foo2
	@@ -0,0 +1 @@
	+foo2
	EOF
	diff_cmp expected actual

ok 3 - added submodule, set diff.submodule

expecting success of 4060.4 '--submodule=short overrides diff.submodule': 
	test_config diff.submodule log &&
	git add sm1 &&
	git diff --submodule=short --cached >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	new file mode 160000
	index 0000000..$head1
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+Subproject commit $fullhead1
	EOF
	diff_cmp expected actual

ok 4 - --submodule=short overrides diff.submodule

expecting success of 4060.5 'diff.submodule does not affect plumbing': 
	test_config diff.submodule log &&
	git diff-index -p HEAD >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	new file mode 160000
	index 0000000..$head1
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+Subproject commit $fullhead1
	EOF
	diff_cmp expected actual

ok 5 - diff.submodule does not affect plumbing

expecting success of 4060.6 'modified submodule(forward)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	diff --git a/sm1/foo3 b/sm1/foo3
	new file mode 100644
	index 0000000..c1ec6c6
	--- /dev/null
	+++ b/sm1/foo3
	@@ -0,0 +1 @@
	+foo3
	EOF
	diff_cmp expected actual

ok 6 - modified submodule(forward)

expecting success of 4060.7 'modified submodule(forward)': 
	git diff --submodule=diff >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	diff --git a/sm1/foo3 b/sm1/foo3
	new file mode 100644
	index 0000000..c1ec6c6
	--- /dev/null
	+++ b/sm1/foo3
	@@ -0,0 +1 @@
	+foo3
	EOF
	diff_cmp expected actual

ok 7 - modified submodule(forward)

expecting success of 4060.8 'modified submodule(forward) --submodule': 
	git diff --submodule >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head1..$head2:
	  > Add foo3 ($added foo3)
	EOF
	diff_cmp expected actual

ok 8 - modified submodule(forward) --submodule

expecting success of 4060.9 'modified submodule(forward) --submodule=short': 
	git diff --submodule=short >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	index $head1..$head2 160000
	--- a/sm1
	+++ b/sm1
	@@ -1 +1 @@
	-Subproject commit $fullhead1
	+Subproject commit $fullhead2
	EOF
	diff_cmp expected actual

ok 9 - modified submodule(forward) --submodule=short

expecting success of 4060.10 'modified submodule(backward)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head2..$head3 (rewind):
	diff --git a/sm1/foo2 b/sm1/foo2
	deleted file mode 100644
	index 54b060e..0000000
	--- a/sm1/foo2
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo2
	diff --git a/sm1/foo3 b/sm1/foo3
	deleted file mode 100644
	index c1ec6c6..0000000
	--- a/sm1/foo3
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo3
	EOF
	diff_cmp expected actual

ok 10 - modified submodule(backward)

expecting success of 4060.11 'modified submodule(backward and forward)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head2...$head4:
	diff --git a/sm1/foo2 b/sm1/foo2
	deleted file mode 100644
	index 54b060e..0000000
	--- a/sm1/foo2
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo2
	diff --git a/sm1/foo3 b/sm1/foo3
	deleted file mode 100644
	index c1ec6c6..0000000
	--- a/sm1/foo3
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo3
	diff --git a/sm1/foo4 b/sm1/foo4
	new file mode 100644
	index 0000000..a0016db
	--- /dev/null
	+++ b/sm1/foo4
	@@ -0,0 +1 @@
	+foo4
	diff --git a/sm1/foo5 b/sm1/foo5
	new file mode 100644
	index 0000000..d6f2413
	--- /dev/null
	+++ b/sm1/foo5
	@@ -0,0 +1 @@
	+foo5
	EOF
	diff_cmp expected actual

ok 11 - modified submodule(backward and forward)

expecting success of 4060.12 'typechanged submodule(submodule->blob), --cached': 
	git diff --submodule=diff --cached >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...0000000 (submodule deleted)
	diff --git a/sm1/foo1 b/sm1/foo1
	deleted file mode 100644
	index 1715acd..0000000
	--- a/sm1/foo1
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo1
	diff --git a/sm1/foo4 b/sm1/foo4
	deleted file mode 100644
	index a0016db..0000000
	--- a/sm1/foo4
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo4
	diff --git a/sm1/foo5 b/sm1/foo5
	deleted file mode 100644
	index d6f2413..0000000
	--- a/sm1/foo5
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo5
	diff --git a/sm1 b/sm1
	new file mode 100644
	index 0000000..9da5fb8
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+sm1
	EOF
	diff_cmp expected actual

ok 12 - typechanged submodule(submodule->blob), --cached

expecting success of 4060.13 'typechanged submodule(submodule->blob)': 
	git diff --submodule=diff >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	deleted file mode 100644
	index 9da5fb8..0000000
	--- a/sm1
	+++ /dev/null
	@@ -1 +0,0 @@
	-sm1
	Submodule sm1 0000000...$head4 (new submodule)
	diff --git a/sm1/foo1 b/sm1/foo1
	new file mode 100644
	index 0000000..1715acd
	--- /dev/null
	+++ b/sm1/foo1
	@@ -0,0 +1 @@
	+foo1
	diff --git a/sm1/foo4 b/sm1/foo4
	new file mode 100644
	index 0000000..a0016db
	--- /dev/null
	+++ b/sm1/foo4
	@@ -0,0 +1 @@
	+foo4
	diff --git a/sm1/foo5 b/sm1/foo5
	new file mode 100644
	index 0000000..d6f2413
	--- /dev/null
	+++ b/sm1/foo5
	@@ -0,0 +1 @@
	+foo5
	EOF
	diff_cmp expected actual

ok 13 - typechanged submodule(submodule->blob)

expecting success of 4060.14 'typechanged submodule(submodule->blob)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...0000000 (submodule deleted)
	diff --git a/sm1 b/sm1
	new file mode 100644
	index 0000000..9da5fb8
	--- /dev/null
	+++ b/sm1
	@@ -0,0 +1 @@
	+sm1
	EOF
	diff_cmp expected actual

ok 14 - typechanged submodule(submodule->blob)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/sm1/.git/
expecting success of 4060.15 'nonexistent commit': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head4...$head6 (commits not present)
	EOF
	diff_cmp expected actual

ok 15 - nonexistent commit

expecting success of 4060.16 'typechanged submodule(blob->submodule)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	diff --git a/sm1 b/sm1
	deleted file mode 100644
	index 9da5fb8..0000000
	--- a/sm1
	+++ /dev/null
	@@ -1 +0,0 @@
	-sm1
	Submodule sm1 0000000...$head6 (new submodule)
	diff --git a/sm1/foo6 b/sm1/foo6
	new file mode 100644
	index 0000000..462398b
	--- /dev/null
	+++ b/sm1/foo6
	@@ -0,0 +1 @@
	+foo6
	diff --git a/sm1/foo7 b/sm1/foo7
	new file mode 100644
	index 0000000..6e9262c
	--- /dev/null
	+++ b/sm1/foo7
	@@ -0,0 +1 @@
	+foo7
	EOF
	diff_cmp expected actual

ok 16 - typechanged submodule(blob->submodule)

expecting success of 4060.17 'submodule is up to date': 
	head7=$(git -C sm1 rev-parse --short --verify HEAD) &&
	git diff-index -p --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 17 - submodule is up to date

expecting success of 4060.18 'submodule contains untracked content': 
	echo new > sm1/new-file &&
	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	EOF
	diff_cmp expected actual

ok 18 - submodule contains untracked content

expecting success of 4060.19 'submodule contains untracked content (untracked ignored)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 19 - submodule contains untracked content (untracked ignored)

expecting success of 4060.20 'submodule contains untracked content (dirty ignored)': 
	git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 20 - submodule contains untracked content (dirty ignored)

expecting success of 4060.21 'submodule contains untracked content (all ignored)': 
	git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 21 - submodule contains untracked content (all ignored)

expecting success of 4060.22 'submodule contains untracked and modified content': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 contains modified content
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 22 - submodule contains untracked and modified content

expecting success of 4060.23 'submodule contains untracked and modified content (untracked ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 23 - submodule contains untracked and modified content (untracked ignored)

expecting success of 4060.24 'submodule contains untracked and modified content (dirty ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 24 - submodule contains untracked and modified content (dirty ignored)

expecting success of 4060.25 'submodule contains untracked and modified content (all ignored)': 
	echo new > sm1/foo6 &&
	git diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 25 - submodule contains untracked and modified content (all ignored)

expecting success of 4060.26 'submodule contains modified content': 
	rm -f sm1/new-file &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 26 - submodule contains modified content

expecting success of 4060.27 'submodule is modified': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 27 - submodule is modified

expecting success of 4060.28 'modified submodule contains untracked content': 
	echo new > sm1/new-file &&
	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 28 - modified submodule contains untracked content

expecting success of 4060.29 'modified submodule contains untracked content (untracked ignored)': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 29 - modified submodule contains untracked content (untracked ignored)

expecting success of 4060.30 'modified submodule contains untracked content (dirty ignored)': 
	git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 30 - modified submodule contains untracked content (dirty ignored)

expecting success of 4060.31 'modified submodule contains untracked content (all ignored)': 
	git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 31 - modified submodule contains untracked content (all ignored)

expecting success of 4060.32 'modified submodule contains untracked and modified content': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains untracked content
	Submodule sm1 contains modified content
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..dfda541 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1,2 @@
	-foo6
	+new
	+modification
	EOF
	diff_cmp expected actual

ok 32 - modified submodule contains untracked and modified content

expecting success of 4060.33 'modified submodule contains untracked and modified content (untracked ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..e20e2d9 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1,3 @@
	-foo6
	+new
	+modification
	+modification
	EOF
	diff_cmp expected actual

ok 33 - modified submodule contains untracked and modified content (untracked ignored)

expecting success of 4060.34 'modified submodule contains untracked and modified content (dirty ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..3e75765 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1 @@
	-foo6
	+new
	EOF
	diff_cmp expected actual

ok 34 - modified submodule contains untracked and modified content (dirty ignored)

expecting success of 4060.35 'modified submodule contains untracked and modified content (all ignored)': 
	echo modification >> sm1/foo6 &&
	git diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&
	test_must_be_empty actual

ok 35 - modified submodule contains untracked and modified content (all ignored)

expecting success of 4060.36 'modified submodule contains modified content': 
	rm -f sm1/new-file &&
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 contains modified content
	Submodule sm1 $head7..$head8:
	diff --git a/sm1/foo6 b/sm1/foo6
	index 462398b..ac466ca 100644
	--- a/sm1/foo6
	+++ b/sm1/foo6
	@@ -1 +1,5 @@
	-foo6
	+new
	+modification
	+modification
	+modification
	+modification
	EOF
	diff_cmp expected actual

ok 36 - modified submodule contains modified content

expecting success of 4060.37 'deleted submodule': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	EOF
	diff_cmp expected actual

ok 37 - deleted submodule

expecting success of 4060.38 'create second submodule': 
	test_create_repo sm2 &&
	head9=$(add_file sm2 foo8 foo9) &&
	git add sm2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/sm2/.git/
warning: adding embedded git repository: sm2
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm2
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm2
hint: 
hint: See "git help submodule" for more information.
ok 38 - create second submodule

expecting success of 4060.39 'multiple submodules': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 0000000...$head9 (new submodule)
	diff --git a/sm2/foo8 b/sm2/foo8
	new file mode 100644
	index 0000000..db9916b
	--- /dev/null
	+++ b/sm2/foo8
	@@ -0,0 +1 @@
	+foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	new file mode 100644
	index 0000000..9c3b4f6
	--- /dev/null
	+++ b/sm2/foo9
	@@ -0,0 +1 @@
	+foo9
	EOF
	diff_cmp expected actual

ok 39 - multiple submodules

expecting success of 4060.40 'path filter': 
	git diff-index -p --submodule=diff HEAD sm2 >actual &&
	cat >expected <<-EOF &&
	Submodule sm2 0000000...$head9 (new submodule)
	diff --git a/sm2/foo8 b/sm2/foo8
	new file mode 100644
	index 0000000..db9916b
	--- /dev/null
	+++ b/sm2/foo8
	@@ -0,0 +1 @@
	+foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	new file mode 100644
	index 0000000..9c3b4f6
	--- /dev/null
	+++ b/sm2/foo9
	@@ -0,0 +1 @@
	+foo9
	EOF
	diff_cmp expected actual

ok 40 - path filter

expecting success of 4060.41 'given commit': 
	git diff-index -p --submodule=diff HEAD^ >actual &&
	cat >expected <<-EOF &&
	diff --git a/.gitmodules b/.gitmodules
	new file mode 100644
	index 1234567..89abcde
	--- /dev/null
	+++ b/.gitmodules
	@@ -0,0 +1,3 @@
	+[submodule "sm2"]
	+path = sm2
	+url = bogus_url
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 0000000...$head9 (new submodule)
	diff --git a/sm2/foo8 b/sm2/foo8
	new file mode 100644
	index 0000000..db9916b
	--- /dev/null
	+++ b/sm2/foo8
	@@ -0,0 +1 @@
	+foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	new file mode 100644
	index 0000000..9c3b4f6
	--- /dev/null
	+++ b/sm2/foo9
	@@ -0,0 +1 @@
	+foo9
	EOF
	diff_cmp expected actual

ok 41 - given commit

expecting success of 4060.42 'setup .git file for sm2': 
	git submodule absorbgitdirs sm2

Migrating git directory of 'sm2' from
'/<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/sm2/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/.git/modules/sm2'
ok 42 - setup .git file for sm2

expecting success of 4060.43 'diff --submodule=diff with .git file': 
	git diff --submodule=diff HEAD^ >actual &&
	cat >expected <<-EOF &&
	diff --git a/.gitmodules b/.gitmodules
	new file mode 100644
	index 1234567..89abcde
	--- /dev/null
	+++ b/.gitmodules
	@@ -0,0 +1,3 @@
	+[submodule "sm2"]
	+path = sm2
	+url = bogus_url
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 0000000...$head9 (new submodule)
	diff --git a/sm2/foo8 b/sm2/foo8
	new file mode 100644
	index 0000000..db9916b
	--- /dev/null
	+++ b/sm2/foo8
	@@ -0,0 +1 @@
	+foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	new file mode 100644
	index 0000000..9c3b4f6
	--- /dev/null
	+++ b/sm2/foo9
	@@ -0,0 +1 @@
	+foo9
	EOF
	diff_cmp expected actual

ok 43 - diff --submodule=diff with .git file

expecting success of 4060.44 'deleted submodule with .git file': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 $head9...0000000 (submodule deleted)
	diff --git a/sm2/foo8 b/sm2/foo8
	deleted file mode 100644
	index 1234567..89abcde
	--- a/sm2/foo8
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	deleted file mode 100644
	index 1234567..89abcde
	--- a/sm2/foo9
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo9
	EOF
	diff_cmp expected actual

ok 44 - deleted submodule with .git file

expecting success of 4060.45 'typechanged(submodule->blob) submodule with .git file': 
	git diff-index -p --submodule=diff HEAD >actual &&
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 $head9...0000000 (submodule deleted)
	diff --git a/sm2/foo8 b/sm2/foo8
	deleted file mode 100644
	index 1234567..89abcde
	--- a/sm2/foo8
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	deleted file mode 100644
	index 1234567..89abcde
	--- a/sm2/foo9
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo9
	diff --git a/sm2 b/sm2
	new file mode 100644
	index 1234567..89abcde
	--- /dev/null
	+++ b/sm2
	@@ -0,0 +1 @@
	+submodule-to-blob
	EOF
	diff_cmp expected actual

ok 45 - typechanged(submodule->blob) submodule with .git file

expecting success of 4060.46 'setup nested submodule': 
	git -c protocol.file.allow=always -C sm2 submodule add ../sm2 nested &&
	git -C sm2 commit -a -m "nested sub" &&
	head10=$(git -C sm2 rev-parse --short --verify HEAD)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4060-diff-submodule-option-diff-format/sm2/nested'...
done.
[master 280969a] nested sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 nested
ok 46 - setup nested submodule

expecting success of 4060.47 'move nested submodule HEAD': 
	echo "nested content" >sm2/nested/file &&
	git -C sm2/nested add file &&
	git -C sm2/nested commit --allow-empty -m "new HEAD" &&
	head11=$(git -C sm2/nested rev-parse --short --verify HEAD)

[master b55928c] new HEAD
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 47 - move nested submodule HEAD

expecting success of 4060.48 'diff --submodule=diff with moved nested submodule HEAD': 
	cat >expected <<-EOF &&
	Submodule nested $head9..$head11:
	diff --git a/nested/file b/nested/file
	new file mode 100644
	index 0000000..ca281f5
	--- /dev/null
	+++ b/nested/file
	@@ -0,0 +1 @@
	+nested content
	EOF
	git -C sm2 diff --submodule=diff >actual 2>err &&
	test_must_be_empty err &&
	diff_cmp expected actual

ok 48 - diff --submodule=diff with moved nested submodule HEAD

expecting success of 4060.49 'diff --submodule=diff recurses into nested submodules': 
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 contains modified content
	Submodule sm2 $head9..$head10:
	diff --git a/sm2/.gitmodules b/sm2/.gitmodules
	new file mode 100644
	index 0000000..3a816b8
	--- /dev/null
	+++ b/sm2/.gitmodules
	@@ -0,0 +1,3 @@
	+[submodule "nested"]
	+	path = nested
	+	url = ../sm2
	Submodule nested 0000000...$head11 (new submodule)
	diff --git a/sm2/nested/file b/sm2/nested/file
	new file mode 100644
	index 0000000..ca281f5
	--- /dev/null
	+++ b/sm2/nested/file
	@@ -0,0 +1 @@
	+nested content
	diff --git a/sm2/nested/foo8 b/sm2/nested/foo8
	new file mode 100644
	index 0000000..db9916b
	--- /dev/null
	+++ b/sm2/nested/foo8
	@@ -0,0 +1 @@
	+foo8
	diff --git a/sm2/nested/foo9 b/sm2/nested/foo9
	new file mode 100644
	index 0000000..9c3b4f6
	--- /dev/null
	+++ b/sm2/nested/foo9
	@@ -0,0 +1 @@
	+foo9
	EOF
	git diff --submodule=diff >actual 2>err &&
	test_must_be_empty err &&
	diff_cmp expected actual

ok 49 - diff --submodule=diff recurses into nested submodules

expecting success of 4060.50 'diff --submodule=diff recurses into deleted nested submodules': 
	cat >expected <<-EOF &&
	Submodule sm1 $head7...0000000 (submodule deleted)
	Submodule sm2 $head12...0000000 (submodule deleted)
	diff --git a/sm2/.gitmodules b/sm2/.gitmodules
	deleted file mode 100644
	index 3a816b8..0000000
	--- a/sm2/.gitmodules
	+++ /dev/null
	@@ -1,3 +0,0 @@
	-[submodule "nested"]
	-	path = nested
	-	url = ../sm2
	diff --git a/sm2/foo8 b/sm2/foo8
	deleted file mode 100644
	index db9916b..0000000
	--- a/sm2/foo8
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo8
	diff --git a/sm2/foo9 b/sm2/foo9
	deleted file mode 100644
	index 9c3b4f6..0000000
	--- a/sm2/foo9
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo9
	Submodule nested $head11...0000000 (submodule deleted)
	diff --git a/sm2/nested/file b/sm2/nested/file
	deleted file mode 100644
	index ca281f5..0000000
	--- a/sm2/nested/file
	+++ /dev/null
	@@ -1 +0,0 @@
	-nested content
	diff --git a/sm2/nested/foo8 b/sm2/nested/foo8
	deleted file mode 100644
	index db9916b..0000000
	--- a/sm2/nested/foo8
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo8
	diff --git a/sm2/nested/foo9 b/sm2/nested/foo9
	deleted file mode 100644
	index 9c3b4f6..0000000
	--- a/sm2/nested/foo9
	+++ /dev/null
	@@ -1 +0,0 @@
	-foo9
	EOF
	git diff --submodule=diff >actual 2>err &&
	test_must_be_empty err &&
	diff_cmp expected actual

ok 50 - diff --submodule=diff recurses into deleted nested submodules

# passed all 50 test(s)
1..50
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4100-apply-stat.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4100-apply-stat/.git/
expecting success of 4100.1 'rename': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 1 - rename

expecting success of 4100.2 'rename with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 2 - rename with recount

expecting success of 4100.3 'copy': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 3 - copy

expecting success of 4100.4 'copy with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 4 - copy with recount

expecting success of 4100.5 'rewrite': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 5 - rewrite

expecting success of 4100.6 'rewrite with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 6 - rewrite with recount

expecting success of 4100.7 'mode': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 7 - mode

expecting success of 4100.8 'mode with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 8 - mode with recount

expecting success of 4100.9 'non git (1)': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 9 - non git (1)

expecting success of 4100.10 'non git (1) with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 10 - non git (1) with recount

expecting success of 4100.11 'non git (2)': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 11 - non git (2)

expecting success of 4100.12 'non git (2) with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 12 - non git (2) with recount

expecting success of 4100.13 'non git (3)': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 13 - non git (3)

expecting success of 4100.14 'non git (3) with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 14 - non git (3) with recount

expecting success of 4100.15 'incomplete (1)': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 15 - incomplete (1)

expecting success of 4100.16 'incomplete (1) with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 16 - incomplete (1) with recount

expecting success of 4100.17 'incomplete (2)': 
		git apply --stat --summary \
			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 17 - incomplete (2)

expecting success of 4100.18 'incomplete (2) with recount': 
		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
		git apply --recount --stat --summary >current &&
		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
	
ok 18 - incomplete (2) with recount

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4068-diff-symmetric-merge-base.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4068-diff-symmetric-merge-base/.git/
expecting success of 4068.1 'setup': 
	git commit --allow-empty -m A &&
	echo b >b &&
	git add b &&
	git commit -m B &&
	git checkout -b br1 HEAD^ &&
	echo c >c &&
	git add c &&
	git commit -m C &&
	git tag commit-C &&
	git merge -m D main &&
	git tag commit-D &&
	git checkout main &&
	git merge -m E commit-C &&
	git checkout -b br2 commit-C &&
	echo f >f &&
	git add f &&
	git commit -m F &&
	git checkout br1 &&
	git merge -m G br2 &&
	git checkout --orphan br3 &&
	git commit -m H

[main (root-commit) 58052da] A
 Author: A U Thor <author@example.com>
[main f74ffd5] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Switched to a new branch 'br1'
[br1 9ba99bb] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
Merge made by the 'ort' strategy.
 b | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b
Switched to branch 'main'
Merge made by the 'ort' strategy.
 c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c
Switched to a new branch 'br2'
[br2 5b24cb4] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f
Switched to branch 'br1'
Merge made by the 'ort' strategy.
 f | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 f
Switched to a new branch 'br3'
[br3 (root-commit) 185e1f1] H
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 b
 create mode 100644 c
 create mode 100644 f
ok 1 - setup

expecting success of 4068.2 'diff with one merge base': 
	git diff commit-D...br1 >tmp &&
	tail -n 1 tmp >actual &&
	echo +f >expect &&
	test_cmp expect actual

ok 2 - diff with one merge base

expecting success of 4068.3 'diff with two merge bases': 
	git diff br1...main >tmp 2>err &&
	test_line_count = 7 tmp &&
	test_line_count = 1 err

ok 3 - diff with two merge bases

expecting success of 4068.4 'diff with no merge bases': 
	test_must_fail git diff br2...br3 2>err &&
	test_i18ngrep "fatal: br2...br3: no merge base" err

fatal: br2...br3: no merge base
ok 4 - diff with no merge bases

expecting success of 4068.5 'diff with too many symmetric differences': 
	test_must_fail git diff br1...main br2...br3 2>err &&
	test_i18ngrep "usage" err

usage: git diff [<options>] [<commit>] [--] [<path>...]
ok 5 - diff with too many symmetric differences

expecting success of 4068.6 'diff with symmetric difference and extraneous arg': 
	test_must_fail git diff main br1...main 2>err &&
	test_i18ngrep "usage" err

usage: git diff [<options>] [<commit>] [--] [<path>...]
ok 6 - diff with symmetric difference and extraneous arg

expecting success of 4068.7 'diff with two ranges': 
	test_must_fail git diff main br1..main br2..br3 2>err &&
	test_i18ngrep "usage" err

usage: git diff [<options>] [<commit>] [--] [<path>...]
ok 7 - diff with two ranges

expecting success of 4068.8 'diff with ranges and extra arg': 
	test_must_fail git diff main br1..main commit-D 2>err &&
	test_i18ngrep "usage" err

usage: git diff [<options>] [<commit>] [--] [<path>...]
ok 8 - diff with ranges and extra arg

expecting success of 4068.9 'diff --merge-base with no commits': 
	test_must_fail git diff --merge-base

error: invalid option: --merge-base
ok 9 - diff --merge-base with no commits

expecting success of 4068.10 'diff --merge-base with three commits': 
	test_must_fail git diff --merge-base br1 br2 main 2>err &&
	test_i18ngrep "usage" err

usage: git diff [<options>] [<commit>] [--] [<path>...]
ok 10 - diff --merge-base with three commits

expecting success of 4068.11 'diff-index --merge-base with one commit': 
		git checkout main &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Switched to branch 'main'
ok 11 - diff-index --merge-base with one commit

expecting success of 4068.12 'diff-index --merge-base with one commit and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo unstaged >>c &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 12 - diff-index --merge-base with one commit and unstaged changes

expecting success of 4068.13 'diff-index --merge-base with one commit and staged and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo staged >>c &&
		git add c &&
		echo unstaged >>c &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 13 - diff-index --merge-base with one commit and staged and unstaged changes

expecting success of 4068.14 'diff-index --merge-base --cached with one commit and staged and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo staged >>c &&
		git add c &&
		echo unstaged >>c &&
		git $cmd --cached commit-C >expect &&
		git $cmd --cached --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 14 - diff-index --merge-base --cached with one commit and staged and unstaged changes

expecting success of 4068.15 'diff-index --merge-base with non-commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base main^{tree} 2>err &&
		test_i18ngrep "fatal: --merge-base only works with commits" err
	
Already on 'main'
fatal: --merge-base only works with commits
ok 15 - diff-index --merge-base with non-commit

expecting success of 4068.16 'diff-index --merge-base with no merge bases and one commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base br3 2>err &&
		test_i18ngrep "fatal: no merge base found" err
	
Already on 'main'
fatal: no merge base found
ok 16 - diff-index --merge-base with no merge bases and one commit

expecting success of 4068.17 'diff-index --merge-base with multiple merge bases and one commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base br1 2>err &&
		test_i18ngrep "fatal: multiple merge bases found" err
	
Already on 'main'
fatal: multiple merge bases found
ok 17 - diff-index --merge-base with multiple merge bases and one commit

expecting success of 4068.18 'diff --merge-base with one commit': 
		git checkout main &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
ok 18 - diff --merge-base with one commit

expecting success of 4068.19 'diff --merge-base with one commit and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo unstaged >>c &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 19 - diff --merge-base with one commit and unstaged changes

expecting success of 4068.20 'diff --merge-base with one commit and staged and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo staged >>c &&
		git add c &&
		echo unstaged >>c &&
		git $cmd commit-C >expect &&
		git $cmd --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 20 - diff --merge-base with one commit and staged and unstaged changes

expecting success of 4068.21 'diff --merge-base --cached with one commit and staged and unstaged changes': 
		git checkout main &&
		test_when_finished git reset --hard &&
		echo staged >>c &&
		git add c &&
		echo unstaged >>c &&
		git $cmd --cached commit-C >expect &&
		git $cmd --cached --merge-base br2 >actual &&
		test_cmp expect actual
	
Already on 'main'
HEAD is now at c8f83a5 E
ok 21 - diff --merge-base --cached with one commit and staged and unstaged changes

expecting success of 4068.22 'diff --merge-base with non-commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base main^{tree} 2>err &&
		test_i18ngrep "fatal: --merge-base only works with commits" err
	
Already on 'main'
fatal: --merge-base only works with commits
ok 22 - diff --merge-base with non-commit

expecting success of 4068.23 'diff --merge-base with no merge bases and one commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base br3 2>err &&
		test_i18ngrep "fatal: no merge base found" err
	
Already on 'main'
fatal: no merge base found
ok 23 - diff --merge-base with no merge bases and one commit

expecting success of 4068.24 'diff --merge-base with multiple merge bases and one commit': 
		git checkout main &&
		test_must_fail git $cmd --merge-base br1 2>err &&
		test_i18ngrep "fatal: multiple merge bases found" err
	
Already on 'main'
fatal: multiple merge bases found
ok 24 - diff --merge-base with multiple merge bases and one commit

expecting success of 4068.25 'diff-tree --merge-base with two commits': 
		git $cmd commit-C main >expect &&
		git $cmd --merge-base br2 main >actual &&
		test_cmp expect actual
	
ok 25 - diff-tree --merge-base with two commits

expecting success of 4068.26 'diff-tree --merge-base commit and non-commit': 
		test_must_fail git $cmd --merge-base br2 main^{tree} 2>err &&
		test_i18ngrep "fatal: --merge-base only works with commits" err
	
fatal: --merge-base only works with commits
ok 26 - diff-tree --merge-base commit and non-commit

expecting success of 4068.27 'diff-tree --merge-base with no merge bases and two commits': 
		test_must_fail git $cmd --merge-base br2 br3 2>err &&
		test_i18ngrep "fatal: no merge base found" err
	
fatal: no merge base found
ok 27 - diff-tree --merge-base with no merge bases and two commits

expecting success of 4068.28 'diff-tree --merge-base with multiple merge bases and two commits': 
		test_must_fail git $cmd --merge-base main br1 2>err &&
		test_i18ngrep "fatal: multiple merge bases found" err
	
fatal: multiple merge bases found
ok 28 - diff-tree --merge-base with multiple merge bases and two commits

expecting success of 4068.29 'diff --merge-base with two commits': 
		git $cmd commit-C main >expect &&
		git $cmd --merge-base br2 main >actual &&
		test_cmp expect actual
	
ok 29 - diff --merge-base with two commits

expecting success of 4068.30 'diff --merge-base commit and non-commit': 
		test_must_fail git $cmd --merge-base br2 main^{tree} 2>err &&
		test_i18ngrep "fatal: --merge-base only works with commits" err
	
fatal: --merge-base only works with commits
ok 30 - diff --merge-base commit and non-commit

expecting success of 4068.31 'diff --merge-base with no merge bases and two commits': 
		test_must_fail git $cmd --merge-base br2 br3 2>err &&
		test_i18ngrep "fatal: no merge base found" err
	
fatal: no merge base found
ok 31 - diff --merge-base with no merge bases and two commits

expecting success of 4068.32 'diff --merge-base with multiple merge bases and two commits': 
		test_must_fail git $cmd --merge-base main br1 2>err &&
		test_i18ngrep "fatal: multiple merge bases found" err
	
fatal: multiple merge bases found
ok 32 - diff --merge-base with multiple merge bases and two commits

expecting success of 4068.33 'diff-tree --merge-base with one commit': 
	test_must_fail git diff-tree --merge-base main 2>err &&
	test_i18ngrep "fatal: --merge-base only works with two commits" err

fatal: --merge-base only works with two commits
ok 33 - diff-tree --merge-base with one commit

expecting success of 4068.34 'diff --merge-base with range': 
	test_must_fail git diff --merge-base br2..br3 2>err &&
	test_i18ngrep "fatal: --merge-base does not work with ranges" err

fatal: --merge-base does not work with ranges
ok 34 - diff --merge-base with range

# passed all 34 test(s)
1..34
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4069-remerge-diff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4069-remerge-diff/.git/
expecting success of 4069.1 'setup basic merges': 
	test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
	git add numbers &&
	git commit -m base &&

	git branch feature_a &&
	git branch feature_b &&
	git branch feature_c &&

	git branch ab_resolution &&
	git branch bc_resolution &&

	git checkout feature_a &&
	test_write_lines 1 2 three 4 5 6 7 eight 9 >numbers &&
	git commit -a -m change_a &&

	git checkout feature_b &&
	test_write_lines 1 2 tres 4 5 6 7 8 9 >numbers &&
	git commit -a -m change_b &&

	git checkout feature_c &&
	test_write_lines 1 2 3 4 5 6 7 8 9 10 >numbers &&
	git commit -a -m change_c &&

	git checkout bc_resolution &&
	git merge --ff-only feature_b &&
	# no conflict
	git merge feature_c &&

	git checkout ab_resolution &&
	git merge --ff-only feature_a &&
	# conflicts!
	test_must_fail git merge feature_b &&
	# Resolve conflict...and make another change elsewhere
	test_write_lines 1 2 drei 4 5 6 7 acht 9 >numbers &&
	git add numbers &&
	git merge --continue

[master (root-commit) 0f94a91] base
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 numbers
Switched to branch 'feature_a'
[feature_a b0ed5cb] change_a
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Switched to branch 'feature_b'
[feature_b 6cd3f82] change_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'feature_c'
[feature_c b325327] change_c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'bc_resolution'
Updating 0f94a91..6cd3f82
Fast-forward
 numbers | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging numbers
Merge made by the 'ort' strategy.
 numbers | 1 +
 1 file changed, 1 insertion(+)
Switched to branch 'ab_resolution'
Updating 0f94a91..b0ed5cb
Fast-forward
 numbers | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Auto-merging numbers
CONFLICT (content): Merge conflict in numbers
Automatic merge failed; fix conflicts and then commit the result.
[ab_resolution 4d00047] Merge branch 'feature_b' into ab_resolution
 Author: A U Thor <author@example.com>
ok 1 - setup basic merges

expecting success of 4069.2 'remerge-diff on a clean merge': 
	git log -1 --oneline bc_resolution >expect &&
	git show --oneline --remerge-diff bc_resolution >actual &&
	test_cmp expect actual

ok 2 - remerge-diff on a clean merge

expecting success of 4069.3 'remerge-diff on a clean merge with a filter': 
	git show --oneline --remerge-diff --diff-filter=U bc_resolution >actual &&
	test_must_be_empty actual

ok 3 - remerge-diff on a clean merge with a filter

expecting success of 4069.4 'remerge-diff with both a resolved conflict and an unrelated change': 
	git log -1 --oneline ab_resolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/numbers b/numbers
	remerge CONFLICT (content): Merge conflict in numbers
	index a1fb731..6875544 100644
	--- a/numbers
	+++ b/numbers
	@@ -1,13 +1,9 @@
	 1
	 2
	-<<<<<<< b0ed5cb (change_a)
	-three
	-=======
	-tres
	->>>>>>> 6cd3f82 (change_b)
	+drei
	 4
	 5
	 6
	 7
	-eight
	+acht
	 9
	EOF
	# Hashes above are sha1; rip them out so test works with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff ab_resolution >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 4 - remerge-diff with both a resolved conflict and an unrelated change

expecting success of 4069.5 'pickaxe still includes additional headers for relevant changes': 
	# reuses "expect" from the previous testcase

	git log --oneline --remerge-diff -Sacht ab_resolution >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 5 - pickaxe still includes additional headers for relevant changes

expecting success of 4069.6 'can filter out additional headers with pickaxe': 
	git show --remerge-diff --submodule=log --find-object=HEAD ab_resolution >actual &&
	test_must_be_empty actual &&

	git show --remerge-diff -S"not present" --all >actual &&
	test_must_be_empty actual

ok 6 - can filter out additional headers with pickaxe

expecting success of 4069.7 'setup non-content conflicts': 
	git switch --orphan base &&

	test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
	test_write_lines a b c d e f g h i >letters &&
	test_write_lines in the way >content &&
	git add numbers letters content &&
	git commit -m base &&

	git branch side1 &&
	git branch side2 &&

	git checkout side1 &&
	test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
	git mv letters letters_side1 &&
	git mv content file_or_directory &&
	git add numbers &&
	git commit -m side1 &&

	git checkout side2 &&
	git rm numbers &&
	git mv letters letters_side2 &&
	mkdir file_or_directory &&
	echo hello >file_or_directory/world &&
	git add file_or_directory/world &&
	git commit -m side2 &&

	git checkout -b resolution side1 &&
	test_must_fail git merge side2 &&
	test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
	git add numbers &&
	git add letters_side1 &&
	git rm letters &&
	git rm letters_side2 &&
	git add file_or_directory~HEAD &&
	git mv file_or_directory~HEAD wanted_content &&
	git commit -m resolved

Switched to a new branch 'base'
[base (root-commit) c2c77a3] base
 Author: A U Thor <author@example.com>
 3 files changed, 21 insertions(+)
 create mode 100644 content
 create mode 100644 letters
 create mode 100644 numbers
Switched to branch 'side1'
[side1 cfe6fba] side1
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 rename content => file_or_directory (100%)
 rename letters => letters_side1 (100%)
Switched to branch 'side2'
rm 'numbers'
[side2 6db5781] side2
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 9 deletions(-)
 create mode 100644 file_or_directory/world
 rename letters => letters_side2 (100%)
 delete mode 100644 numbers
Switched to a new branch 'resolution'
CONFLICT (file/directory): directory in the way of file_or_directory from HEAD; moving it to file_or_directory~HEAD instead.
CONFLICT (rename/rename): letters renamed to letters_side1 in HEAD and to letters_side2 in side2.
CONFLICT (modify/delete): numbers deleted in side2 and modified in HEAD.  Version HEAD of numbers left in tree.
Automatic merge failed; fix conflicts and then commit the result.
rm 'letters'
rm 'letters_side2'
[resolution 692604d] resolved
 Author: A U Thor <author@example.com>
ok 7 - setup non-content conflicts

expecting success of 4069.8 'remerge-diff with non-content conflicts': 
	git log -1 --oneline resolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/file_or_directory~HASH (side1) b/wanted_content
	similarity index 100%
	rename from file_or_directory~HASH (side1)
	rename to wanted_content
	remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
	diff --git a/letters b/letters
	remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
	diff --git a/letters_side2 b/letters_side2
	deleted file mode 100644
	index b236ae5..0000000
	--- a/letters_side2
	+++ /dev/null
	@@ -1,9 +0,0 @@
	-a
	-b
	-c
	-d
	-e
	-f
	-g
	-h
	-i
	diff --git a/numbers b/numbers
	remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1).  Version HASH (side1) of numbers left in tree.
	EOF
	# We still have some sha1 hashes above; rip them out so test works
	# with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff resolution >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 8 - remerge-diff with non-content conflicts

expecting success of 4069.9 'remerge-diff w/ diff-filter=U: all conflict headers, no diff content': 
	git log -1 --oneline resolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/file_or_directory~HASH (side1) b/file_or_directory~HASH (side1)
	remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
	diff --git a/letters b/letters
	remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
	diff --git a/numbers b/numbers
	remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1).  Version HASH (side1) of numbers left in tree.
	EOF
	# We still have some sha1 hashes above; rip them out so test works
	# with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff --diff-filter=U resolution >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 9 - remerge-diff w/ diff-filter=U: all conflict headers, no diff content

expecting success of 4069.10 'submodule formatting ignores additional headers': 
	# Reuses "expect" from last testcase

	git show --oneline --remerge-diff --diff-filter=U --submodule=log >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 10 - submodule formatting ignores additional headers

expecting success of 4069.11 'remerge-diff w/ diff-filter=R: relevant file + conflict header': 
	git log -1 --oneline resolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/file_or_directory~HASH (side1) b/wanted_content
	similarity index 100%
	rename from file_or_directory~HASH (side1)
	rename to wanted_content
	remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
	EOF
	# We still have some sha1 hashes above; rip them out so test works
	# with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff --diff-filter=R resolution >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 11 - remerge-diff w/ diff-filter=R: relevant file + conflict header

expecting success of 4069.12 'remerge-diff w/ pathspec: limits to relevant file including conflict header': 
	git log -1 --oneline resolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/letters b/letters
	remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
	diff --git a/letters_side2 b/letters_side2
	deleted file mode 100644
	index b236ae5..0000000
	--- a/letters_side2
	+++ /dev/null
	@@ -1,9 +0,0 @@
	-a
	-b
	-c
	-d
	-e
	-f
	-g
	-h
	-i
	EOF
	# We still have some sha1 hashes above; rip them out so test works
	# with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff resolution -- "letters*" >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 12 - remerge-diff w/ pathspec: limits to relevant file including conflict header

expecting success of 4069.13 'setup non-content conflicts': 
	git switch --orphan newbase &&

	test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
	git add numbers &&
	git commit -m base &&

	git branch newside1 &&
	git branch newside2 &&

	git checkout newside1 &&
	test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
	git add numbers &&
	git commit -m side1 &&

	git checkout newside2 &&
	test_write_lines 1 2 drei 4 5 6 7 8 9 >numbers &&
	git add numbers &&
	git commit -m side2 &&

	git checkout -b newresolution newside1 &&
	test_must_fail git merge newside2 &&
	git checkout --theirs numbers &&
	git add -u numbers &&
	git commit -m resolved

Switched to a new branch 'newbase'
[newbase (root-commit) 0f94a91] base
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 numbers
Switched to branch 'newside1'
[newside1 96f1e45] side1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'newside2'
[newside2 4fd522f] side2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'newresolution'
Auto-merging numbers
CONFLICT (content): Merge conflict in numbers
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from the index
[newresolution f8f340c] resolved
 Author: A U Thor <author@example.com>
ok 13 - setup non-content conflicts

expecting success of 4069.14 'remerge-diff turns off history simplification': 
	git log -1 --oneline newresolution >tmp &&
	cat <<-EOF >>tmp &&
	diff --git a/numbers b/numbers
	remerge CONFLICT (content): Merge conflict in numbers
	index 070e9e7..5335e78 100644
	--- a/numbers
	+++ b/numbers
	@@ -1,10 +1,6 @@
	 1
	 2
	-<<<<<<< 96f1e45 (side1)
	-three
	-=======
	 drei
	->>>>>>> 4fd522f (side2)
	 4
	 5
	 6
	EOF
	# We still have some sha1 hashes above; rip them out so test works
	# with sha256
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&

	git show --oneline --remerge-diff newresolution -- numbers >tmp &&
	sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
	test_cmp expect actual

ok 14 - remerge-diff turns off history simplification

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4067-diff-partial-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/.git/
expecting success of 4067.1 'git show batches blobs': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	echo b >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure that there is exactly 1 negotiation by checking that there is
	# only 1 "done" line sent. ("done" marks the end of negotiation.)
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client show HEAD &&
	grep "fetch> done" trace >done_lines &&
	test_line_count = 1 done_lines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) 525c234] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
Cloning into bare repository 'client'...
commit 525c234aab2853ed2b1af6e508caf4b08300c8c7
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    x

diff --git a/a b/a
new file mode 100644
index 0000000..7898192
--- /dev/null
+++ b/a
@@ -0,0 +1 @@
+a
diff --git a/b b/b
new file mode 100644
index 0000000..6178079
--- /dev/null
+++ b/b
@@ -0,0 +1 @@
+b
ok 1 - git show batches blobs

expecting success of 4067.2 'diff batches blobs': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	echo b >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&
	echo c >server/c &&
	echo d >server/d &&
	git -C server add c d &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure that there is exactly 1 negotiation by checking that there is
	# only 1 "done" line sent. ("done" marks the end of negotiation.)
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD &&
	grep "fetch> done" trace >done_lines &&
	test_line_count = 1 done_lines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) 525c234] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
[master f59c7b0] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 c
 create mode 100644 d
Cloning into bare repository 'client'...
diff --git a/c b/c
new file mode 100644
index 0000000..f2ad6c7
--- /dev/null
+++ b/c
@@ -0,0 +1 @@
+c
diff --git a/d b/d
new file mode 100644
index 0000000..4bcfe98
--- /dev/null
+++ b/d
@@ -0,0 +1 @@
+d
ok 2 - diff batches blobs

expecting success of 4067.3 'diff skips same-OID blobs': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	echo b >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&
	echo another-a >server/a &&
	git -C server add a &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	echo a | git hash-object --stdin >hash-old-a &&
	echo another-a | git hash-object --stdin >hash-new-a &&
	echo b | git hash-object --stdin >hash-b &&

	# Ensure that only a and another-a are fetched.
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD &&
	grep "want $(cat hash-old-a)" trace &&
	grep "want $(cat hash-new-a)" trace &&
	! grep "want $(cat hash-b)" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) 525c234] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
[master 89f0cea] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into bare repository 'client'...
diff --git a/a b/a
index 7898192..594b61f 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-a
+another-a
packet:        fetch> want 78981922613b2afb6025042ff6bd878ac1994e85
packet:  upload-pack< want 78981922613b2afb6025042ff6bd878ac1994e85
packet:        fetch> want 594b61f56663a3c170222487bb2a7ca5cf7df2ad
packet:  upload-pack< want 594b61f56663a3c170222487bb2a7ca5cf7df2ad
ok 3 - diff skips same-OID blobs

expecting success of 4067.4 'when fetching missing objects, diff skips GITLINKs': 
	test_when_finished "rm -rf sub server client trace" &&
	test_config_global protocol.file.allow always &&

	test_create_repo sub &&
	test_commit -C sub first &&

	test_create_repo server &&
	echo a >server/a &&
	git -C server add a &&
	git -C server submodule add "file://$(pwd)/sub" &&
	git -C server commit -m x &&

	test_commit -C server/sub second &&
	echo another-a >server/a &&
	git -C server add a sub &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	echo a | git hash-object --stdin >hash-old-a &&
	echo another-a | git hash-object --stdin >hash-new-a &&

	# Ensure that a and another-a are fetched, and check (by successful
	# execution of the diff) that no invalid OIDs are sent.
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD &&
	grep "want $(cat hash-old-a)" trace &&
	grep "want $(cat hash-new-a)" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/sub/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/sub'...
[master (root-commit) 278fb52] x
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 a
 create mode 160000 sub
[master d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[master 6592077] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Cloning into bare repository 'client'...
diff --git a/a b/a
index 7898192..594b61f 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-a
+another-a
diff --git a/sub b/sub
index 50e526b..d662100 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 50e526bb426771f6036ad3a8b0c81d511d91fc2a
+Subproject commit d66210046212a498d8c1a48eab414bc6df166f85
packet:        fetch> want 78981922613b2afb6025042ff6bd878ac1994e85
packet:  upload-pack< want 78981922613b2afb6025042ff6bd878ac1994e85
packet:        fetch> want 594b61f56663a3c170222487bb2a7ca5cf7df2ad
packet:  upload-pack< want 594b61f56663a3c170222487bb2a7ca5cf7df2ad
ok 4 - when fetching missing objects, diff skips GITLINKs

expecting success of 4067.5 'diff with rename detection batches blobs': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	printf "b\nb\nb\nb\nb\n" >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&
	rm server/b &&
	printf "b\nb\nb\nb\nbX\n" >server/c &&
	git -C server add c &&
	git -C server commit -a -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure that there is exactly 1 negotiation by checking that there is
	# only 1 "done" line sent. ("done" marks the end of negotiation.)
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff --raw -M HEAD^ HEAD >out &&
	grep ":100644 100644.*R[0-9][0-9][0-9].*b.*c" out &&
	grep "fetch> done" trace >done_lines &&
	test_line_count = 1 done_lines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) a6f879b] x
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 a
 create mode 100644 b
[master 263bf49] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename b => c (72%)
Cloning into bare repository 'client'...
:100644 100644 33db23e f46cdb7 R072	b	c
ok 5 - diff with rename detection batches blobs

expecting success of 4067.6 'diff does not fetch anything if inexact rename detection is not needed': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	printf "b\nb\nb\nb\nb\n" >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&
	mv server/b server/c &&
	git -C server add c &&
	git -C server commit -a -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure no fetches.
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff --raw -M HEAD^ HEAD &&
	! test_path_exists trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) a6f879b] x
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 a
 create mode 100644 b
[master 2759f1d] x
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
Cloning into bare repository 'client'...
:100644 100644 33db23e 33db23e R100	b	c
Path trace doesn't exist
ok 6 - diff does not fetch anything if inexact rename detection is not needed

expecting success of 4067.7 'diff --break-rewrites fetches only if necessary, and batches blobs if it does': 
	test_when_finished "rm -rf server client trace" &&

	test_create_repo server &&
	echo a >server/a &&
	printf "b\nb\nb\nb\nb\n" >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&
	printf "c\nc\nc\nc\nc\n" >server/b &&
	git -C server commit -a -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure no fetches.
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff --raw -M HEAD^ HEAD &&
	! test_path_exists trace &&

	# But with --break-rewrites, ensure that there is exactly 1 negotiation
	# by checking that there is only 1 "done" line sent. ("done" marks the
	# end of negotiation.)
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff --break-rewrites --raw -M HEAD^ HEAD &&
	grep "fetch> done" trace >done_lines &&
	test_line_count = 1 done_lines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4067-diff-partial-clone/server/.git/
[master (root-commit) a6f879b] x
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 a
 create mode 100644 b
[master 3aba490] x
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+), 5 deletions(-)
Cloning into bare repository 'client'...
:100644 100644 33db23e 6e7ada2 M	b
Path trace doesn't exist
:100644 100644 33db23e 6e7ada2 M	b
ok 7 - diff --break-rewrites fetches only if necessary, and batches blobs if it does

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4102-apply-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4102-apply-rename/.git/
expecting success of 4102.1 'setup': git update-index --add foo
ok 1 - setup

expecting success of 4102.2 'apply': git apply --index --stat --summary --apply test-patch
 bar |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename foo => bar (47%)
ok 2 - apply

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 4102.3 'validate': test -f bar && ls -l bar | grep "^-..x......"
-rwxr-xr-x 1 buildd buildd 12 Dec 28 07:44 bar
ok 3 - validate

expecting success of 4102.4 'apply reverse': git apply -R --index --stat --summary --apply test-patch &&
     test "$(cat foo)" = "This is foo"
 foo |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename bar => foo (47%)
ok 4 - apply reverse

expecting success of 4102.5 'apply copy': git apply --index --stat --summary --apply test-patch &&
     test "$(cat bar)" = "This is bar" && test "$(cat foo)" = "This is foo"
 bar |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 copy foo => bar (47%)
ok 5 - apply copy

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4101-apply-nonl.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4101-apply-nonl/.git/
expecting success of 4101.1 'apply diff between 0 and 1': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 1 - apply diff between 0 and 1

expecting success of 4101.2 'apply diff between 0 and 2': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 2 - apply diff between 0 and 2

expecting success of 4101.3 'apply diff between 0 and 3': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 3 - apply diff between 0 and 3

expecting success of 4101.4 'apply diff between 1 and 0': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 4 - apply diff between 1 and 0

expecting success of 4101.5 'apply diff between 1 and 2': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 5 - apply diff between 1 and 2

expecting success of 4101.6 'apply diff between 1 and 3': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 6 - apply diff between 1 and 3

expecting success of 4101.7 'apply diff between 2 and 0': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 7 - apply diff between 2 and 0

expecting success of 4101.8 'apply diff between 2 and 1': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 8 - apply diff between 2 and 1

expecting success of 4101.9 'apply diff between 2 and 3': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 9 - apply diff between 2 and 3

expecting success of 4101.10 'apply diff between 3 and 0': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 10 - apply diff between 3 and 0

expecting success of 4101.11 'apply diff between 3 and 1': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 11 - apply diff between 3 and 1

expecting success of 4101.12 'apply diff between 3 and 2': 
	git apply <"$TEST_DIRECTORY"/t4101/diff.$i-$j &&
	test_cmp frotz.$j frotz
    
ok 12 - apply diff between 3 and 2

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4106-apply-stdin.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4106-apply-stdin/.git/
expecting success of 4106.1 'setup': 
	echo hello >text &&
	git add text &&
	echo goodbye >text &&
	git diff >patch

ok 1 - setup

expecting success of 4106.2 'git apply --numstat - < patch': 
	echo "1	1	text" >expect &&
	git apply --numstat - <patch >actual &&
	test_cmp expect actual

ok 2 - git apply --numstat - < patch

expecting success of 4106.3 'git apply --numstat - < patch patch': 
	cat >expect <<-\EOF &&
	1	1	text
	1	1	text
	EOF
	git apply --numstat - < patch patch >actual &&
	test_cmp expect actual

ok 3 - git apply --numstat - < patch patch

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4105-apply-fuzz.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4105-apply-fuzz/.git/
expecting success of 4105.1 'setup': 

	test_write_lines 1 2 3 4 5 6 7 8 9 10 11 12 >file &&
	git update-index --add file &&
	test_write_lines 1 2 3 4 5 6 7 a b c d e 8 9 10 11 12 >file &&
	cat file >expect &&
	git diff >O0.diff &&

	sed -e "s/@@ -5,6 +5,11 @@/@@ -2,6 +2,11 @@/" >O1.diff O0.diff &&
	sed -e "s/@@ -5,6 +5,11 @@/@@ -7,6 +7,11 @@/" >O2.diff O0.diff &&
	sed -e "s/@@ -5,6 +5,11 @@/@@ -19,6 +19,11 @@/" >O3.diff O0.diff &&

	sed -e "s/^ 5/ S/" >F0.diff O0.diff &&
	sed -e "s/^ 5/ S/" >F1.diff O1.diff &&
	sed -e "s/^ 5/ S/" >F2.diff O2.diff &&
	sed -e "s/^ 5/ S/" >F3.diff O3.diff


ok 1 - setup

expecting success of 4105.2 'unmodified patch': 
		git checkout-index -f -q -u file &&
		git apply O0.diff &&
		test_cmp expect file
	
ok 2 - unmodified patch

expecting success of 4105.3 'minus offset': 
		git checkout-index -f -q -u file &&
		git apply O1.diff &&
		test_cmp expect file
	
ok 3 - minus offset

expecting success of 4105.4 'plus offset': 
		git checkout-index -f -q -u file &&
		git apply O2.diff &&
		test_cmp expect file
	
ok 4 - plus offset

expecting success of 4105.5 'big offset': 
		git checkout-index -f -q -u file &&
		git apply O3.diff &&
		test_cmp expect file
	
ok 5 - big offset

expecting success of 4105.6 'fuzz with no offset': 
		git checkout-index -f -q -u file &&
		git apply -C2 F0.diff &&
		test_cmp expect file
	
Context reduced to (2/2) to apply fragment at 6
ok 6 - fuzz with no offset

expecting success of 4105.7 'fuzz with minus offset': 
		git checkout-index -f -q -u file &&
		git apply -C2 F1.diff &&
		test_cmp expect file
	
Context reduced to (2/2) to apply fragment at 6
ok 7 - fuzz with minus offset

expecting success of 4105.8 'fuzz with plus offset': 
		git checkout-index -f -q -u file &&
		git apply -C2 F2.diff &&
		test_cmp expect file
	
Context reduced to (2/2) to apply fragment at 6
ok 8 - fuzz with plus offset

expecting success of 4105.9 'fuzz with big offset': 
		git checkout-index -f -q -u file &&
		git apply -C2 F3.diff &&
		test_cmp expect file
	
Context reduced to (2/2) to apply fragment at 6
ok 9 - fuzz with big offset

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4107-apply-ignore-whitespace.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4107-apply-ignore-whitespace/.git/
expecting success of 4107.1 'file creation': 
	git apply patch1.patch

ok 1 - file creation

expecting success of 4107.2 'patch2 fails (retab)': 
	test_must_fail git apply patch2.patch

error: patch failed: main.c:10
error: main.c: patch does not apply
ok 2 - patch2 fails (retab)

expecting success of 4107.3 'patch2 applies with --ignore-whitespace': 
	git apply --ignore-whitespace patch2.patch

ok 3 - patch2 applies with --ignore-whitespace

expecting success of 4107.4 'patch2 reverse applies with --ignore-space-change': 
	git apply -R --ignore-space-change patch2.patch

ok 4 - patch2 reverse applies with --ignore-space-change

expecting success of 4107.5 'patch2 applies (apply.ignorewhitespace = change)': 
	git apply patch2.patch &&
	test_cmp main.c.final main.c

ok 5 - patch2 applies (apply.ignorewhitespace = change)

expecting success of 4107.6 'patch3 fails (missing string at EOL)': 
	test_must_fail git apply patch3.patch

error: patch failed: main.c:10
error: main.c: patch does not apply
ok 6 - patch3 fails (missing string at EOL)

expecting success of 4107.7 'patch4 fails (missing EOL at EOF)': 
	test_must_fail git apply patch4.patch

error: patch failed: main.c:21
error: main.c: patch does not apply
ok 7 - patch4 fails (missing EOL at EOF)

expecting success of 4107.8 'patch5 fails (leading whitespace differences matter)': 
	test_must_fail git apply patch5.patch

error: patch failed: main.c:2
error: main.c: patch does not apply
ok 8 - patch5 fails (leading whitespace differences matter)

expecting success of 4107.9 're-create file (with --ignore-whitespace)': 
	rm -f main.c &&
	git apply patch1.patch

ok 9 - re-create file (with --ignore-whitespace)

expecting success of 4107.10 'patch5 fails (--no-ignore-whitespace)': 
	test_must_fail git apply --no-ignore-whitespace patch5.patch

error: patch failed: main.c:2
error: main.c: patch does not apply
ok 10 - patch5 fails (--no-ignore-whitespace)

expecting success of 4107.11 'apply --ignore-space-change --inaccurate-eof': 
	echo 1 >file &&
	git apply --ignore-space-change --inaccurate-eof <<-\EOF &&
	diff --git a/file b/file
	--- a/file
	+++ b/file
	@@ -1 +1 @@
	-1
	+2
	EOF
	printf 2 >expect &&
	test_cmp expect file

ok 11 - apply --ignore-space-change --inaccurate-eof

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4109-apply-multifrag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4109-apply-multifrag/.git/
expecting success of 4109.1 'git apply (1)': 
	git apply patch1.patch patch2.patch &&
	test_cmp "$TEST_DIRECTORY/t4109/expect-1" main.c

patch1.patch:28: new blank line at EOF.
+
patch2.patch:58: new blank line at EOF.
+
warning: 2 lines add whitespace errors.
ok 1 - git apply (1)

expecting success of 4109.2 'git apply (2)': 
	git apply patch1.patch patch2.patch patch3.patch &&
	test_cmp "$TEST_DIRECTORY/t4109/expect-2" main.c

patch1.patch:28: new blank line at EOF.
+
patch2.patch:58: new blank line at EOF.
+
warning: 2 lines add whitespace errors.
ok 2 - git apply (2)

expecting success of 4109.3 'git apply (3)': 
	git apply patch1.patch patch4.patch &&
	test_cmp "$TEST_DIRECTORY/t4109/expect-3" main.c

patch1.patch:28: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
ok 3 - git apply (3)

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4104-apply-boundary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4104-apply-boundary/.git/
expecting success of 4104.1 'setup': 
	test_write_lines b $L y >victim &&
	cat victim >original &&
	git update-index --add victim &&

	# add to the head
	test_write_lines a b $L y >victim &&
	cat victim >add-a-expect &&
	git diff victim >add-a-patch.with &&
	git diff --unified=0 >add-a-patch.without &&

	# insert at line two
	test_write_lines b a $L y >victim &&
	cat victim >insert-a-expect &&
	git diff victim >insert-a-patch.with &&
	git diff --unified=0 >insert-a-patch.without &&

	# modify at the head
	test_write_lines a $L y >victim &&
	cat victim >mod-a-expect &&
	git diff victim >mod-a-patch.with &&
	git diff --unified=0 >mod-a-patch.without &&

	# remove from the head
	test_write_lines $L y >victim &&
	cat victim >del-a-expect &&
	git diff victim >del-a-patch.with &&
	git diff --unified=0 >del-a-patch.without &&

	# add to the tail
	test_write_lines b $L y z >victim &&
	cat victim >add-z-expect &&
	git diff victim >add-z-patch.with &&
	git diff --unified=0 >add-z-patch.without &&

	# modify at the tail
	test_write_lines b $L z >victim &&
	cat victim >mod-z-expect &&
	git diff victim >mod-z-patch.with &&
	git diff --unified=0 >mod-z-patch.without &&

	# remove from the tail
	test_write_lines b $L >victim &&
	cat victim >del-z-expect &&
	git diff victim >del-z-patch.with &&
	git diff --unified=0 >del-z-patch.without

	# done

ok 1 - setup

expecting success of 4104.2 'apply add-a-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 2 - apply add-a-patch with context

expecting success of 4104.3 'apply add-z-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 3 - apply add-z-patch with context

expecting success of 4104.4 'apply insert-a-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 4 - apply insert-a-patch with context

expecting success of 4104.5 'apply mod-a-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 5 - apply mod-a-patch with context

expecting success of 4104.6 'apply mod-z-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 6 - apply mod-z-patch with context

expecting success of 4104.7 'apply del-a-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 7 - apply del-a-patch with context

expecting success of 4104.8 'apply del-z-patch with context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 8 - apply del-z-patch with context

expecting success of 4104.9 'apply add-a-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 9 - apply add-a-patch without context

expecting success of 4104.10 'apply add-z-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 10 - apply add-z-patch without context

expecting success of 4104.11 'apply insert-a-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 11 - apply insert-a-patch without context

expecting success of 4104.12 'apply mod-a-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 12 - apply mod-a-patch without context

expecting success of 4104.13 'apply mod-z-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 13 - apply mod-z-patch without context

expecting success of 4104.14 'apply del-a-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 14 - apply del-a-patch without context

expecting success of 4104.15 'apply del-z-patch without context': 
			cat original >victim &&
			git update-index victim &&
			git apply --index $u "$kind-patch.$with" &&
			test_cmp "$kind-expect" victim
		
ok 15 - apply del-z-patch without context

expecting success of 4104.16 'apply non-git add-a-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 16 - apply non-git add-a-patch without context

expecting success of 4104.17 'apply non-git add-z-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 17 - apply non-git add-z-patch without context

expecting success of 4104.18 'apply non-git insert-a-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 18 - apply non-git insert-a-patch without context

expecting success of 4104.19 'apply non-git mod-a-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 19 - apply non-git mod-a-patch without context

expecting success of 4104.20 'apply non-git mod-z-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 20 - apply non-git mod-z-patch without context

expecting success of 4104.21 'apply non-git del-a-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 21 - apply non-git del-a-patch without context

expecting success of 4104.22 'apply non-git del-z-patch without context': 
		cat original >victim &&
		git update-index victim &&
		git apply --unidiff-zero --index "$kind-ng.without" &&
		test_cmp "$kind-expect" victim
	
ok 22 - apply non-git del-z-patch without context

expecting success of 4104.23 'two lines': 
	>file &&
	git add file &&
	echo aaa >file &&
	git diff >patch &&
	git add file &&
	echo bbb >file &&
	git add file &&
	test_must_fail git apply --check patch

error: patch failed: file:0
error: file: patch does not apply
ok 23 - two lines

expecting success of 4104.24 'apply patch with 3 context lines matching at end': 
	test_write_lines a b c d >file &&
	git add file &&
	echo e >>file &&
	git diff >patch &&
	>file &&
	test_must_fail git apply patch

error: patch failed: file:2
error: file: patch does not apply
ok 24 - apply patch with 3 context lines matching at end

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4103-apply-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4103-apply-binary/.git/
expecting success of 4103.1 'setup': 
	cat >file1 <<-\EOF &&
	A quick brown fox jumps over the lazy dog.
	A tiny little penguin runs around in circles.
	There is a flag with Linux written on it.
	A slow black-and-white panda just sits there,
	munching on his bamboo.
	EOF
	cat file1 >file2 &&
	cat file1 >file4 &&

	git update-index --add --remove file1 file2 file4 &&
	git commit -m "Initial Version" 2>/dev/null &&

	git checkout -b binary &&
	perl -pe "y/x/\000/" <file1 >file3 &&
	cat file3 >file4 &&
	git add file2 &&
	perl -pe "y/\000/v/" <file3 >file1 &&
	rm -f file2 &&
	git update-index --add --remove file1 file2 file3 file4 &&
	git commit -m "Second Version" &&

	git diff-tree -p main binary >B.diff &&
	git diff-tree -p -C main binary >C.diff &&

	git diff-tree -p --binary main binary >BF.diff &&
	git diff-tree -p --binary -C main binary >CF.diff &&

	git diff-tree -p --full-index main binary >B-index.diff &&
	git diff-tree -p -C --full-index main binary >C-index.diff &&

	git diff-tree -p --binary --no-prefix main binary -- file3 >B0.diff &&

	git init other-repo &&
	(
		cd other-repo &&
		git fetch .. main &&
		git reset --hard FETCH_HEAD
	)

[main (root-commit) 8985c5f] Initial Version
 Author: A U Thor <author@example.com>
 3 files changed, 15 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
 create mode 100644 file4
Switched to a new branch 'binary'
[binary 749e5f6] Second Version
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename file2 => file3 (57%)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4103-apply-binary/other-repo/.git/
From ..
 * branch            main       -> FETCH_HEAD
HEAD is now at 8985c5f Initial Version
ok 1 - setup

expecting success of 4103.2 'stat binary diff -- should not fail.': git checkout main &&
	 git apply --stat --summary B.diff
Switched to branch 'main'
 file1 |    4 ++--
 file2 |    5 -----
 file3 |  Bin
 file4 |  Bin
 4 files changed, 2 insertions(+), 7 deletions(-)
 delete mode 100644 file2
 create mode 100644 file3
ok 2 - stat binary diff -- should not fail.

expecting success of 4103.3 'stat binary -p0 diff -- should not fail.': 
	 git checkout main &&
	 git apply --stat -p0 B0.diff

Already on 'main'
 file3 |  Bin
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 3 - stat binary -p0 diff -- should not fail.

expecting success of 4103.4 'stat binary diff (copy) -- should not fail.': git checkout main &&
	 git apply --stat --summary C.diff
Already on 'main'
 file1 |    4 ++--
 file3 |  Bin
 file4 |  Bin
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename file2 => file3 (57%)
ok 4 - stat binary diff (copy) -- should not fail.

expecting success of 4103.5 'check binary diff -- should fail.': git checkout main &&
	 test_must_fail git apply --check B.diff
Already on 'main'
error: cannot apply binary patch to 'file3' without full index line
error: file3: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 5 - check binary diff -- should fail.

expecting success of 4103.6 'check binary diff (copy) -- should fail.': git checkout main &&
	 test_must_fail git apply --check C.diff
Already on 'main'
error: cannot apply binary patch to 'file2' without full index line
error: file2: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 6 - check binary diff (copy) -- should fail.

expecting success of 4103.7 'check incomplete binary diff with replacement -- should fail.': 
	git checkout main &&
	test_must_fail git apply --check --allow-binary-replacement B.diff

Already on 'main'
error: cannot apply binary patch to 'file3' without full index line
error: file3: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 7 - check incomplete binary diff with replacement -- should fail.

expecting success of 4103.8 'check incomplete binary diff with replacement (copy) -- should fail.': 
	 git checkout main &&
	 test_must_fail git apply --check --allow-binary-replacement C.diff

Already on 'main'
error: cannot apply binary patch to 'file2' without full index line
error: file2: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 8 - check incomplete binary diff with replacement (copy) -- should fail.

expecting success of 4103.9 'check binary diff with replacement.': git checkout main &&
	 git apply --check --allow-binary-replacement BF.diff
Already on 'main'
ok 9 - check binary diff with replacement.

expecting success of 4103.10 'check binary diff with replacement (copy).': git checkout main &&
	 git apply --check --allow-binary-replacement CF.diff
Already on 'main'
ok 10 - check binary diff with replacement (copy).

expecting success of 4103.11 'apply binary diff -- should fail.': do_reset &&
	 test_must_fail git apply B.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
error: cannot apply binary patch to 'file3' without full index line
error: file3: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 11 - apply binary diff -- should fail.

expecting success of 4103.12 'apply binary diff -- should fail.': do_reset &&
	 test_must_fail git apply --index B.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
error: cannot apply binary patch to 'file3' without full index line
error: file3: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 12 - apply binary diff -- should fail.

expecting success of 4103.13 'apply binary diff (copy) -- should fail.': do_reset &&
	 test_must_fail git apply C.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
error: cannot apply binary patch to 'file2' without full index line
error: file2: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 13 - apply binary diff (copy) -- should fail.

expecting success of 4103.14 'apply binary diff (copy) -- should fail.': do_reset &&
	 test_must_fail git apply --index C.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
error: cannot apply binary patch to 'file2' without full index line
error: file2: patch does not apply
error: cannot apply binary patch to 'file4' without full index line
error: file4: patch does not apply
ok 14 - apply binary diff (copy) -- should fail.

expecting success of 4103.15 'apply binary diff with full-index': 
	do_reset &&
	git apply B-index.diff

HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 15 - apply binary diff with full-index

expecting success of 4103.16 'apply binary diff with full-index (copy)': 
	do_reset &&
	git apply C-index.diff

HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 16 - apply binary diff with full-index (copy)

expecting success of 4103.17 'apply full-index binary diff in new repo': 
	(cd other-repo &&
	 do_reset &&
	 test_must_fail git apply ../B-index.diff)

HEAD is now at 8985c5f Initial Version
Already on 'main'
error: missing binary patch data for 'file3'
error: binary patch does not apply to 'file3'
error: file3: patch does not apply
error: missing binary patch data for 'file4'
error: binary patch does not apply to 'file4'
error: file4: patch does not apply
ok 17 - apply full-index binary diff in new repo

expecting success of 4103.18 'apply binary diff without replacement.': do_reset &&
	 git apply BF.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 18 - apply binary diff without replacement.

expecting success of 4103.19 'apply binary diff without replacement (copy).': do_reset &&
	 git apply CF.diff
HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 19 - apply binary diff without replacement (copy).

expecting success of 4103.20 'apply binary diff.': do_reset &&
	 git apply --allow-binary-replacement --index BF.diff &&
	 test -z "$(git diff --name-status binary)"
HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 20 - apply binary diff.

expecting success of 4103.21 'apply binary diff (copy).': do_reset &&
	 git apply --allow-binary-replacement --index CF.diff &&
	 test -z "$(git diff --name-status binary)"
HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 21 - apply binary diff (copy).

expecting success of 4103.22 'apply binary -p0 diff': 
	do_reset &&
	git apply -p0 --index B0.diff &&
	test -z "$(git diff --name-status binary -- file3)"

HEAD is now at 8985c5f Initial Version
Already on 'main'
ok 22 - apply binary -p0 diff

expecting success of 4103.23 'reject truncated binary diff': 
	do_reset &&

	# this length is calculated to get us very close to
	# the 8192-byte strbuf we will use to read in the patch.
	test-tool genrandom foo 6205 >file1 &&
	git diff --binary >patch &&

	# truncate the patch at the second "literal" line,
	# but exclude the trailing newline. We must use perl
	# for this, since tools like "sed" cannot reliably
	# produce output without the trailing newline.
	perl -pe "
		if (/^literal/ && \$count++ >= 1) {
			chomp;
			print;
			exit 0;
		}
	" <patch >patch.trunc &&

	do_reset &&
	test_must_fail git apply patch.trunc

HEAD is now at 8985c5f Initial Version
Already on 'main'
HEAD is now at 8985c5f Initial Version
Already on 'main'
error: corrupt binary patch at line 127: 
error: No valid patches in input (allow with "--allow-empty")
ok 23 - reject truncated binary diff

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4110-apply-scan.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4110-apply-scan/.git/
expecting success of 4110.1 'git apply scan': 
	git apply \
		"$TEST_DIRECTORY/t4110/patch1.patch" \
		"$TEST_DIRECTORY/t4110/patch2.patch" \
		"$TEST_DIRECTORY/t4110/patch3.patch" \
		"$TEST_DIRECTORY/t4110/patch4.patch" \
		"$TEST_DIRECTORY/t4110/patch5.patch" &&
	test_cmp new.txt "$TEST_DIRECTORY/t4110/expect"

ok 1 - git apply scan

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4113-apply-ending.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4113-apply-ending/.git/
expecting success of 4113.1 'setup': git update-index --add file
ok 1 - setup

expecting success of 4113.2 'apply at the end': test_must_fail git apply --index test-patch
error: patch failed: file:1
error: file: patch does not apply
ok 2 - apply at the end

expecting success of 4113.3 'apply at the beginning': test_must_fail git apply --index test-patch
error: patch failed: file:1
error: file: patch does not apply
ok 3 - apply at the beginning

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4112-apply-renames.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4112-apply-renames/.git/
expecting success of 4112.1 'check rename/copy patch': git apply --check patch
ok 1 - check rename/copy patch

expecting success of 4112.2 'apply rename/copy patch': git apply --index patch
ok 2 - apply rename/copy patch

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4115-apply-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4115-apply-symlink/.git/
expecting success of 4115.1 'setup': 

	test_ln_s_add path1/path2/path3/path4/path5 link1 &&
	git commit -m initial &&

	git branch side &&

	rm -f link? &&

	test_ln_s_add htap6 link1 &&
	git commit -m second &&

	git diff-tree -p HEAD^ HEAD >patch  &&
	git apply --stat --summary patch


checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master (root-commit) b8ef636] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 link1
[master 3f5d5e0] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 link1 |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4115.2 'apply symlink patch': 

	git checkout side &&
	git apply patch &&
	git diff-files -p >patched &&
	test_cmp patch patched


Switched to branch 'side'
ok 2 - apply symlink patch

expecting success of 4115.3 'apply --index symlink patch': 

	git checkout -f side &&
	git apply --index patch &&
	git diff-index --cached -p HEAD >patched &&
	test_cmp patch patched


Already on 'side'
ok 3 - apply --index symlink patch

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4111-apply-subdir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4111-apply-subdir/.git/
expecting success of 4111.1 'setup': 
	cat >patch <<-\EOF &&
	diff file.orig file
	--- a/file.orig
	+++ b/file
	@@ -1 +1,2 @@
	 1
	+2
	EOF
	patch="$(pwd)/patch" &&

	echo 1 >preimage &&
	printf "%s\n" 1 2 >postimage &&
	echo 3 >other &&

	test_tick &&
	git commit --allow-empty -m basis

[master (root-commit) 2fa880c] basis
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4111.2 'setup: subdir': 
	reset_subdir() {
		git reset &&
		mkdir -p sub/dir/b &&
		mkdir -p objects &&
		cp "$1" file &&
		cp "$1" objects/file &&
		cp "$1" sub/dir/file &&
		cp "$1" sub/dir/b/file &&
		git add file sub/dir/file sub/dir/b/file objects/file &&
		cp "$2" file &&
		cp "$2" sub/dir/file &&
		cp "$2" sub/dir/b/file &&
		cp "$2" objects/file &&
		test_might_fail git update-index --refresh -q
	}

ok 2 - setup: subdir

expecting success of 4111.3 'apply from subdir of toplevel': 
	cp postimage expected &&
	reset_subdir other preimage &&
	(
		cd sub/dir &&
		git apply "$patch"
	) &&
	test_cmp expected sub/dir/file

file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
ok 3 - apply from subdir of toplevel

expecting success of 4111.4 'apply --cached from subdir of toplevel': 
	cp postimage expected &&
	cp other expected.working &&
	reset_subdir preimage other &&
	(
		cd sub/dir &&
		git apply --cached "$patch"
	) &&
	git show :sub/dir/file >actual &&
	test_cmp expected actual &&
	test_cmp expected.working sub/dir/file

file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
ok 4 - apply --cached from subdir of toplevel

expecting success of 4111.5 'apply --index from subdir of toplevel': 
	cp postimage expected &&
	reset_subdir preimage other &&
	(
		cd sub/dir &&
		test_must_fail git apply --index "$patch"
	) &&
	reset_subdir other preimage &&
	(
		cd sub/dir &&
		test_must_fail git apply --index "$patch"
	) &&
	reset_subdir preimage preimage &&
	(
		cd sub/dir &&
		git apply --index "$patch"
	) &&
	git show :sub/dir/file >actual &&
	test_cmp expected actual &&
	test_cmp expected sub/dir/file

file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
error: sub/dir/file: does not match index
file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
error: sub/dir/file: does not match index
ok 5 - apply --index from subdir of toplevel

expecting success of 4111.6 'apply half-broken patch from subdir of toplevel': 
	(
		cd sub/dir &&
		test_must_fail git apply <<-EOF
		--- sub/dir/file
		+++ sub/dir/file
		@@ -1,0 +1,0 @@
		--- file_in_root
		+++ file_in_root
		@@ -1,0 +1,0 @@
		EOF
	)

error: corrupt patch at line 4
ok 6 - apply half-broken patch from subdir of toplevel

expecting success of 4111.7 'apply from .git dir': 
	cp postimage expected &&
	cp preimage .git/file &&
	cp preimage .git/objects/file &&
	(
		cd .git &&
		git apply "$patch"
	) &&
	test_cmp expected .git/file

ok 7 - apply from .git dir

expecting success of 4111.8 'apply from subdir of .git dir': 
	cp postimage expected &&
	cp preimage .git/file &&
	cp preimage .git/objects/file &&
	(
		cd .git/objects &&
		git apply "$patch"
	) &&
	test_cmp expected .git/objects/file

ok 8 - apply from subdir of .git dir

expecting success of 4111.9 'apply --cached from .git dir': 
	cp postimage expected &&
	cp other expected.working &&
	cp other .git/file &&
	reset_subdir preimage other &&
	(
		cd .git &&
		git apply --cached "$patch"
	) &&
	git show :file >actual &&
	test_cmp expected actual &&
	test_cmp expected.working file &&
	test_cmp expected.working .git/file

file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
ok 9 - apply --cached from .git dir

expecting success of 4111.10 'apply --cached from subdir of .git dir': 
	cp postimage expected &&
	cp preimage expected.subdir &&
	cp other .git/file &&
	cp other .git/objects/file &&
	reset_subdir preimage other &&
	(
		cd .git/objects &&
		git apply --cached "$patch"
	) &&
	git show :file >actual &&
	git show :objects/file >actual.subdir &&
	test_cmp expected actual &&
	test_cmp expected.subdir actual.subdir

file: needs update
objects/file: needs update
sub/dir/b/file: needs update
sub/dir/file: needs update
ok 10 - apply --cached from subdir of .git dir

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4117-apply-reject.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4117-apply-reject/.git/
expecting success of 4117.1 'setup': 
	test_write_lines 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 >file1 &&
	cat file1 >saved.file1 &&
	git update-index --add file1 &&
	git commit -m initial &&

	test_write_lines 1 2 A B 4 5 6 7 8 9 10 11 12 C 13 14 15 16 17 18 19 20 D 21 >file1 &&
	git diff >patch.1 &&
	cat file1 >clean &&

	test_write_lines 1 E 2 3 4 5 6 7 8 9 10 11 12 C 13 14 15 16 17 18 19 20 F 21 >expected &&

	mv file1 file2 &&
	git update-index --add --remove file1 file2 &&
	git diff -M HEAD >patch.2 &&

	rm -f file1 file2 &&
	mv saved.file1 file1 &&
	git update-index --add --remove file1 file2 &&

	test_write_lines 1 E 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 F 21 >file1 &&

	cat file1 >saved.file1

[master (root-commit) 11e450e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 21 insertions(+)
 create mode 100644 file1
ok 1 - setup

expecting success of 4117.2 'apply --reject is incompatible with --3way': 
	test_when_finished "cat saved.file1 >file1" &&
	git diff >patch.0 &&
	git checkout file1 &&
	test_must_fail git apply --reject --3way patch.0 &&
	git diff --exit-code

Updated 1 path from the index
error: options '--reject' and '--3way' cannot be used together
ok 2 - apply --reject is incompatible with --3way

expecting success of 4117.3 'apply without --reject should fail': 

	test_must_fail git apply patch.1 &&
	test_cmp file1 saved.file1

error: patch failed: file1:1
error: file1: patch does not apply
ok 3 - apply without --reject should fail

expecting success of 4117.4 'apply without --reject should fail': 

	test_must_fail git apply --verbose patch.1 &&
	test_cmp file1 saved.file1

Checking patch file1...
error: while searching for:
1
2
3
4
5
6

error: patch failed: file1:1
error: file1: patch does not apply
ok 4 - apply without --reject should fail

expecting success of 4117.5 'apply with --reject should fail but update the file': 

	cat saved.file1 >file1 &&
	rm -f file1.rej file2.rej &&

	test_must_fail git apply --reject patch.1 &&
	test_cmp expected file1 &&

	test_path_is_file file1.rej &&
	test_path_is_missing file2.rej

Checking patch file1...
error: while searching for:
1
2
3
4
5
6

error: patch failed: file1:1
error: while searching for:
18
19
20
21

error: patch failed: file1:18
Applying patch file1 with 2 rejects...
Rejected hunk #1.
Hunk #2 applied cleanly.
Rejected hunk #3.
ok 5 - apply with --reject should fail but update the file

expecting success of 4117.6 'apply with --reject should fail but update the file': 

	cat saved.file1 >file1 &&
	rm -f file1.rej file2.rej file2 &&

	test_must_fail git apply --reject patch.2 >rejects &&
	test_path_is_missing file1 &&
	test_cmp expected file2 &&

	test_path_is_file file2.rej &&
	test_path_is_missing file1.rej


Checking patch file1 => file2...
error: while searching for:
1
2
3
4
5
6

error: patch failed: file1:1
error: while searching for:
18
19
20
21

error: patch failed: file1:18
Applying patch file1 => file2 with 2 rejects...
Rejected hunk #1.
Hunk #2 applied cleanly.
Rejected hunk #3.
ok 6 - apply with --reject should fail but update the file

expecting success of 4117.7 'the same test with --verbose': 

	cat saved.file1 >file1 &&
	rm -f file1.rej file2.rej file2 &&

	test_must_fail git apply --reject --verbose patch.2 >rejects &&
	test_path_is_missing file1 &&
	test_cmp expected file2 &&

	test_path_is_file file2.rej &&
	test_path_is_missing file1.rej


Checking patch file1 => file2...
error: while searching for:
1
2
3
4
5
6

error: patch failed: file1:1
error: while searching for:
18
19
20
21

error: patch failed: file1:18
Applying patch file1 => file2 with 2 rejects...
Rejected hunk #1.
Hunk #2 applied cleanly.
Rejected hunk #3.
ok 7 - the same test with --verbose

expecting success of 4117.8 'apply cleanly with --verbose': 

	git cat-file -p HEAD:file1 >file1 &&
	rm -f file?.rej file2 &&

	git apply --verbose patch.1 &&

	test_cmp file1 clean

Checking patch file1...
Applied patch file1 cleanly.
ok 8 - apply cleanly with --verbose

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4114-apply-typechange.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4114-apply-typechange/.git/
expecting success of 4114.1 'setup repository and commits': 
	echo "hello world" > foo &&
	echo "hi planet" > bar &&
	git update-index --add foo bar &&
	git commit -m initial &&
	git branch initial &&
	rm -f foo &&
	test_ln_s_add bar foo &&
	git commit -m "foo symlinked to bar" &&
	git branch foo-symlinked-to-bar &&
	git rm -f foo &&
	echo "how far is the sun?" > foo &&
	git update-index --add foo &&
	git commit -m "foo back to file" &&
	git branch foo-back-to-file &&
	printf "\0" > foo &&
	git update-index foo &&
	git commit -m "foo becomes binary" &&
	git branch foo-becomes-binary &&
	rm -f foo &&
	git update-index --remove foo &&
	mkdir foo &&
	echo "if only I knew" > foo/baz &&
	git update-index --add foo/baz &&
	git commit -m "foo becomes a directory" &&
	git branch "foo-becomes-a-directory" &&
	echo "hello world" > foo/baz &&
	git update-index foo/baz &&
	git commit -m "foo/baz is the original foo" &&
	git branch foo-baz-renamed-from-foo
	
[master (root-commit) 8d5a53c] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master 2b1a969] foo symlinked to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 100644 => 120000 foo
rm 'foo'
[master 41a0307] foo back to file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 120000 => 100644 foo
[master bd76368] foo becomes binary
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
[master 918d519] foo becomes a directory
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 delete mode 100644 foo
 create mode 100644 foo/baz
[master 5d696d0] foo/baz is the original foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup repository and commits

expecting success of 4114.2 'file renamed from foo to foo/baz': 
	git checkout -f initial &&
	git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
	git apply --index < patch
	
Switched to branch 'initial'
ok 2 - file renamed from foo to foo/baz

expecting success of 4114.3 'file renamed from foo/baz to foo': 
	git checkout -f foo-baz-renamed-from-foo &&
	git diff-tree -M -p HEAD initial > patch &&
	git apply --index < patch
	
Switched to branch 'foo-baz-renamed-from-foo'
ok 3 - file renamed from foo/baz to foo

expecting success of 4114.4 'directory becomes file': 
	git checkout -f foo-becomes-a-directory &&
	git diff-tree -p HEAD initial > patch &&
	git apply --index < patch
	
Switched to branch 'foo-becomes-a-directory'
ok 4 - directory becomes file

expecting success of 4114.5 'file becomes directory': 
	git checkout -f initial &&
	git diff-tree -p HEAD foo-becomes-a-directory > patch &&
	git apply --index < patch
	
Switched to branch 'initial'
ok 5 - file becomes directory

expecting success of 4114.6 'file becomes symlink': 
	git checkout -f initial &&
	git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
	git apply --index < patch
	
Already on 'initial'
ok 6 - file becomes symlink

expecting success of 4114.7 'symlink becomes file': 
	git checkout -f foo-symlinked-to-bar &&
	git diff-tree -p HEAD foo-back-to-file > patch &&
	git apply --index < patch
	
Switched to branch 'foo-symlinked-to-bar'
ok 7 - symlink becomes file

expecting success of 4114.8 'symlink becomes file, in reverse': 
	git checkout -f foo-symlinked-to-bar &&
	git diff-tree -p HEAD foo-back-to-file > patch &&
	git checkout foo-back-to-file &&
	git apply -R --index < patch
	
Already on 'foo-symlinked-to-bar'
Switched to branch 'foo-back-to-file'
ok 8 - symlink becomes file, in reverse

expecting success of 4114.9 'binary file becomes symlink': 
	git checkout -f foo-becomes-binary &&
	git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
	git apply --index < patch
	
Switched to branch 'foo-becomes-binary'
ok 9 - binary file becomes symlink

expecting success of 4114.10 'symlink becomes binary file': 
	git checkout -f foo-symlinked-to-bar &&
	git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
	git apply --index < patch
	
Switched to branch 'foo-symlinked-to-bar'
ok 10 - symlink becomes binary file

expecting success of 4114.11 'symlink becomes directory': 
	git checkout -f foo-symlinked-to-bar &&
	git diff-tree -p HEAD foo-becomes-a-directory > patch &&
	git apply --index < patch
	
Already on 'foo-symlinked-to-bar'
ok 11 - symlink becomes directory

expecting success of 4114.12 'directory becomes symlink': 
	git checkout -f foo-becomes-a-directory &&
	git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
	git apply --index < patch
	
Switched to branch 'foo-becomes-a-directory'
ok 12 - directory becomes symlink

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4116-apply-reverse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4116-apply-reverse/.git/
expecting success of 4116.1 'setup': 

	test_write_lines a b c d e f g h i j k l m n >file1 &&
	perl -pe "y/ijk/\\000\\001\\002/" <file1 >file2 &&

	git add file1 file2 &&
	git commit -m initial &&
	git tag initial &&

	test_write_lines a b c g h i J K L m o n p q >file1 &&
	perl -pe "y/mon/\\000\\001\\002/" <file1 >file2 &&

	git commit -a -m second &&
	git tag second &&

	git diff --binary initial second >patch


[master (root-commit) 40ea0d8] initial
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
[master 09f0b7a] second
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+), 6 deletions(-)
ok 1 - setup

expecting success of 4116.2 'apply in forward': 

	T0=$(git rev-parse "second^{tree}") &&
	git reset --hard initial &&
	git apply --index --binary patch &&
	T1=$(git write-tree) &&
	test "$T0" = "$T1"

HEAD is now at 40ea0d8 initial
ok 2 - apply in forward

expecting success of 4116.3 'apply in reverse': 

	git reset --hard second &&
	git apply --reverse --binary --index patch &&
	git diff >diff &&
	test_must_be_empty diff


HEAD is now at 09f0b7a second
ok 3 - apply in reverse

expecting success of 4116.4 'setup separate repository lacking postimage': 

	git archive --format=tar --prefix=initial/ initial | $TAR xf - &&
	(
		cd initial && git init && git add .
	) &&

	git archive --format=tar --prefix=second/ second | $TAR xf - &&
	(
		cd second && git init && git add .
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4116-apply-reverse/initial/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4116-apply-reverse/second/.git/
ok 4 - setup separate repository lacking postimage

expecting success of 4116.5 'apply in forward without postimage': 

	T0=$(git rev-parse "second^{tree}") &&
	(
		cd initial &&
		git apply --index --binary ../patch &&
		T1=$(git write-tree) &&
		test "$T0" = "$T1"
	)

ok 5 - apply in forward without postimage

expecting success of 4116.6 'apply in reverse without postimage': 

	T0=$(git rev-parse "initial^{tree}") &&
	(
		cd second &&
		git apply --index --binary --reverse ../patch &&
		T1=$(git write-tree) &&
		test "$T0" = "$T1"
	)

ok 6 - apply in reverse without postimage

expecting success of 4116.7 'reversing a whitespace introduction': 
	sed "s/a/a /" < file1 > file1.new &&
	mv file1.new file1 &&
	git diff | git apply --reverse --whitespace=error

ok 7 - reversing a whitespace introduction

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4108-apply-threeway.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4108-apply-threeway/.git/
expecting success of 4108.1 'setup': 
	test_tick &&
	test_write_lines 1 2 3 4 5 6 7 >one &&
	cat one >two &&
	git add one two &&
	git commit -m initial &&

	git branch side &&

	test_tick &&
	test_write_lines 1 two 3 4 5 six 7 >one &&
	test_write_lines 1 two 3 4 5 6 7 >two &&
	git commit -a -m main &&

	git checkout side &&
	test_write_lines 1 2 3 4 five 6 7 >one &&
	test_write_lines 1 2 3 4 five 6 7 >two &&
	git commit -a -m side &&

	git checkout main

[main (root-commit) acfd9ea] initial
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 one
 create mode 100644 two
[main cc2039c] main
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+), 3 deletions(-)
Switched to branch 'side'
[side 3dc6c9f] side
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to branch 'main'
ok 1 - setup

expecting success of 4108.2 'apply without --3way': 
	git diff side^ side >P.diff &&

	# should fail to apply
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git apply --index P.diff &&
	# should leave things intact
	git diff-files --exit-code &&
	git diff-index --exit-code --cached HEAD

HEAD is now at cc2039c main
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at cc2039c main
error: patch failed: one:2
error: one: patch does not apply
error: patch failed: two:2
error: two: patch does not apply
ok 2 - apply without --3way

expecting success of 4108.3 'apply with --3way': 
	test_apply_with_3way

HEAD is now at cc2039c main
HEAD is now at cc2039c main
Auto-merging one
CONFLICT (content): Merge conflict in one
Auto-merging two
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at cc2039c main
HEAD is now at cc2039c main
Applied patch to 'one' with conflicts.
Applied patch to 'two' cleanly.
U one
ok 3 - apply with --3way

expecting success of 4108.4 'apply with --3way with merge.conflictStyle = diff3': 
	test_config merge.conflictStyle diff3 &&
	test_apply_with_3way

HEAD is now at cc2039c main
HEAD is now at cc2039c main
Auto-merging one
CONFLICT (content): Merge conflict in one
Auto-merging two
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at cc2039c main
HEAD is now at cc2039c main
Applied patch to 'one' with conflicts.
Applied patch to 'two' cleanly.
U one
ok 4 - apply with --3way with merge.conflictStyle = diff3

expecting success of 4108.5 'apply with --3way with rerere enabled': 
	test_config rerere.enabled true &&

	# Merging side should be similar to applying this patch
	git diff ...side >P.diff &&

	# The corresponding conflicted merge
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git merge --no-commit side &&

	# Manually resolve and record the resolution
	test_write_lines 1 two 3 4 five six 7 >one &&
	git rerere &&
	cat one >expect &&

	# should fail to apply
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git apply --index --3way P.diff &&

	# but rerere should have replayed the recorded resolution
	test_cmp expect one

HEAD is now at cc2039c main
HEAD is now at cc2039c main
Auto-merging one
CONFLICT (content): Merge conflict in one
Auto-merging two
Recorded preimage for 'one'
Automatic merge failed; fix conflicts and then commit the result.
Recorded resolution for 'one'.
HEAD is now at cc2039c main
HEAD is now at cc2039c main
Applied patch to 'one' with conflicts.
Applied patch to 'two' cleanly.
U one
Resolved 'one' using previous resolution.
ok 5 - apply with --3way with rerere enabled

expecting success of 4108.6 'apply -3 with add/add conflict setup': 
	git reset --hard &&

	git checkout -b adder &&
	test_write_lines 1 2 3 4 5 6 7 >three &&
	test_write_lines 1 2 3 4 5 6 7 >four &&
	git add three four &&
	git commit -m "add three and four" &&

	git checkout -b another adder^ &&
	test_write_lines 1 2 3 4 5 6 7 >three &&
	test_write_lines 1 2 3 four 5 6 7 >four &&
	git add three four &&
	git commit -m "add three and four" &&

	# Merging another should be similar to applying this patch
	git diff adder...another >P.diff &&

	git checkout adder^0 &&
	test_must_fail git merge --no-commit another &&
	git ls-files -s >expect.ls &&
	print_sanitized_conflicted_diff >expect.diff

HEAD is now at cc2039c main
Switched to a new branch 'adder'
[adder a4ae168] add three and four
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 four
 create mode 100644 three
Switched to a new branch 'another'
[another 668e9f0] add three and four
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 four
 create mode 100644 three
Note: switching to 'adder^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at a4ae168 add three and four
Auto-merging four
CONFLICT (add/add): Merge conflict in four
Recorded preimage for 'four'
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - apply -3 with add/add conflict setup

expecting success of 4108.7 'apply -3 with add/add conflict': 
	# should fail to apply ...
	git reset --hard &&
	git checkout adder^0 &&
	test_must_fail git apply --index --3way P.diff &&
	# ... and leave conflicts in the index and in the working tree
	git ls-files -s >actual.ls &&
	print_sanitized_conflicted_diff >actual.diff &&

	# The result should resemble the corresponding merge
	test_cmp expect.ls actual.ls &&
	test_cmp expect.diff actual.diff

HEAD is now at a4ae168 add three and four
HEAD is now at a4ae168 add three and four
Performing three-way merge...
Applied patch to 'four' with conflicts.
Performing three-way merge...
Applied patch to 'three' cleanly.
U four
Recorded preimage for 'four'
ok 7 - apply -3 with add/add conflict

expecting success of 4108.8 'apply -3 with add/add conflict (dirty working tree)': 
	# should fail to apply ...
	git reset --hard &&
	git checkout adder^0 &&
	echo >>four &&
	cat four >four.save &&
	cat three >three.save &&
	git ls-files -s >expect.ls &&
	test_must_fail git apply --index --3way P.diff &&
	# ... and should not touch anything
	git ls-files -s >actual.ls &&
	test_cmp expect.ls actual.ls &&
	test_cmp four.save four &&
	test_cmp three.save three

HEAD is now at a4ae168 add three and four
HEAD is now at a4ae168 add three and four
Performing three-way merge...
error: four: does not match index
error: cannot read the current contents of 'four'
error: four: patch does not apply
Performing three-way merge...
Applied patch to 'three' cleanly.
ok 8 - apply -3 with add/add conflict (dirty working tree)

expecting success of 4108.9 'apply -3 with ambiguous repeating file': 
	git reset --hard &&
	test_write_lines 1 2 1 2 1 2 1 2 1 2 1 >one_two_repeat &&
	git add one_two_repeat &&
	git commit -m "init one" &&
	test_write_lines 1 2 1 2 1 2 1 2 one 2 1 >one_two_repeat &&
	git commit -a -m "change one" &&

	git diff HEAD~ >Repeat.diff &&
	git reset --hard HEAD~ &&

	test_write_lines 1 2 1 2 1 2 one 2 1 2 one >one_two_repeat &&
	git commit -a -m "change surrounding one" &&

	git apply --index --3way Repeat.diff &&
	test_write_lines 1 2 1 2 1 2 one 2 one 2 one >expect &&

	test_cmp expect one_two_repeat

HEAD is now at a4ae168 add three and four
[detached HEAD 4fe2a89] init one
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 one_two_repeat
[detached HEAD 0e42fdf] change one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 4fe2a89 init one
[detached HEAD 5364b93] change surrounding one
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Applied patch to 'one_two_repeat' cleanly.
ok 9 - apply -3 with ambiguous repeating file

expecting success of 4108.10 'apply with --3way --cached clean apply': 
	# Merging side should be similar to applying this patch
	git diff ...side >P.diff &&

	# The corresponding cleanly applied merge
	git reset --hard &&
	git checkout main~ &&
	git merge --no-commit side &&
	git ls-files -s >expect.ls &&

	# should succeed
	git reset --hard &&
	git checkout main~ &&
	git apply --cached --3way P.diff &&
	git ls-files -s >actual.ls &&
	print_sanitized_conflicted_diff >actual.diff &&

	# The cache should resemble the corresponding merge
	# (both files at stage #0)
	test_cmp expect.ls actual.ls &&
	# However the working directory should not change
	>expect.diff &&
	test_cmp expect.diff actual.diff

HEAD is now at 5364b93 change surrounding one
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  5364b93 change surrounding one
  4fe2a89 init one

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5364b93

HEAD is now at acfd9ea initial
Updating acfd9ea..3dc6c9f
Fast-forward
 one | 2 +-
 two | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
HEAD is now at 3dc6c9f side
Previous HEAD position was 3dc6c9f side
HEAD is now at acfd9ea initial
Applied patch to 'one' cleanly.
Applied patch to 'two' cleanly.
ok 10 - apply with --3way --cached clean apply

expecting success of 4108.11 'apply with --3way --cached and conflicts': 
	# Merging side should be similar to applying this patch
	git diff ...side >P.diff &&

	# The corresponding conflicted merge
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git merge --no-commit side &&
	git ls-files -s >expect.ls &&

	# should fail to apply
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git apply --cached --3way P.diff &&
	git ls-files -s >actual.ls &&
	print_sanitized_conflicted_diff >actual.diff &&

	# The cache should resemble the corresponding merge
	# (one file at stage #0, one file at stages #1 #2 #3)
	test_cmp expect.ls actual.ls &&
	# However the working directory should not change
	>expect.diff &&
	test_cmp expect.diff actual.diff

HEAD is now at acfd9ea initial
Previous HEAD position was acfd9ea initial
HEAD is now at cc2039c main
Auto-merging one
CONFLICT (content): Merge conflict in one
Auto-merging two
Resolved 'one' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at cc2039c main
HEAD is now at cc2039c main
Applied patch to 'one' with conflicts.
Applied patch to 'two' cleanly.
U one
ok 11 - apply with --3way --cached and conflicts

expecting success of 4108.12 'apply binary file patch': 
	git reset --hard main &&
	cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
	git add bin.png &&
	git commit -m "add binary file" &&

	cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&

	git diff --binary >bin.diff &&
	git reset --hard &&

	# Apply must succeed.
	git apply bin.diff

HEAD is now at cc2039c main
[detached HEAD 5c7d1bd] add binary file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bin.png
HEAD is now at 5c7d1bd add binary file
ok 12 - apply binary file patch

expecting success of 4108.13 'apply binary file patch with 3way': 
	git reset --hard main &&
	cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
	git add bin.png &&
	git commit -m "add binary file" &&

	cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&

	git diff --binary >bin.diff &&
	git reset --hard &&

	# Apply must succeed.
	git apply --3way --index bin.diff

HEAD is now at cc2039c main
[detached HEAD 5c7d1bd] add binary file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bin.png
HEAD is now at 5c7d1bd add binary file
Applied patch to 'bin.png' cleanly.
ok 13 - apply binary file patch with 3way

expecting success of 4108.14 'apply full-index patch with 3way': 
	git reset --hard main &&
	cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
	git add bin.png &&
	git commit -m "add binary file" &&

	cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&

	git diff --full-index >bin.diff &&
	git reset --hard &&

	# Apply must succeed.
	git apply --3way --index bin.diff

HEAD is now at cc2039c main
[detached HEAD 5c7d1bd] add binary file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bin.png
HEAD is now at 5c7d1bd add binary file
Applied patch to 'bin.png' cleanly.
ok 14 - apply full-index patch with 3way

expecting success of 4108.15 'apply delete then new patch with 3way': 
	git reset --hard main &&
	test_write_lines 2 > delnew &&
	git add delnew &&
	git diff --cached >> new.patch &&
	git reset --hard &&
	test_write_lines 1 > delnew &&
	git add delnew &&
	git commit -m "delnew" &&
	rm delnew &&
	git diff >> delete-then-new.patch &&
	cat new.patch >> delete-then-new.patch &&

	git checkout -- . &&
	# Apply must succeed.
	git apply --3way delete-then-new.patch

HEAD is now at cc2039c main
HEAD is now at cc2039c main
[detached HEAD ba7e832] delnew
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 delnew
Falling back to direct application...
Falling back to direct application...
ok 15 - apply delete then new patch with 3way

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4118-apply-empty-context.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4118-apply-empty-context/.git/
expecting success of 4118.1 'setup': 
	test_write_lines "" "" A B C "" >file1 &&
	cat file1 >file1.orig &&
	{
		cat file1 &&
		echo Q | tr -d "\\012"
	} >file2 &&
	cat file2 >file2.orig &&
	git add file1 file2 &&
	sed -e "/^B/d" <file1.orig >file1 &&
	cat file1 > file2 &&
	echo Q | tr -d "\\012" >>file2 &&
	cat file1 >file1.mods &&
	cat file2 >file2.mods &&
	git diff |
	sed -e "s/^ \$//" >diff.output

ok 1 - setup

expecting success of 4118.2 'apply --numstat': 

	git apply --numstat diff.output >actual &&
	{
		echo "0	1	file1" &&
		echo "0	1	file2"
	} >expect &&
	test_cmp expect actual


ok 2 - apply --numstat

expecting success of 4118.3 'apply --apply': 

	cat file1.orig >file1 &&
	cat file2.orig >file2 &&
	git update-index file1 file2 &&
	git apply --index diff.output &&
	test_cmp file1.mods file1 &&
	test_cmp file2.mods file2

ok 3 - apply --apply

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4120-apply-popt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4120-apply-popt/.git/
expecting success of 4120.1 'setup': 
	mkdir sub &&
	echo A >sub/file1 &&
	cp sub/file1 file1.saved &&
	git add sub/file1 &&
	echo B >sub/file1 &&
	git diff >patch.file &&
	git checkout -- sub/file1 &&
	git mv sub süb &&
	echo B >süb/file1 &&
	git diff >patch.escaped &&
	grep "[\]" patch.escaped &&
	rm süb/file1 &&
	rmdir süb

diff --git "a/s\303\274b/file1" "b/s\303\274b/file1"
--- "a/s\303\274b/file1"
+++ "b/s\303\274b/file1"
ok 1 - setup

expecting success of 4120.2 'apply git diff with -p2': 
	cp file1.saved file1 &&
	git apply -p2 patch.file

ok 2 - apply git diff with -p2

expecting success of 4120.3 'apply with too large -p': 
	cp file1.saved file1 &&
	test_must_fail git apply --stat -p3 patch.file 2>err &&
	test_i18ngrep "removing 3 leading" err

error: git diff header lacks filename information when removing 3 leading pathname components (line 5)
ok 3 - apply with too large -p

expecting success of 4120.4 'apply (-p2) traditional diff with funny filenames': 
	cat >patch.quotes <<-\EOF &&
	diff -u "a/"sub/file1 "b/"sub/file1
	--- "a/"sub/file1
	+++ "b/"sub/file1
	@@ -1 +1 @@
	-A
	+B
	EOF
	echo B >expected &&

	cp file1.saved file1 &&
	git apply -p2 patch.quotes &&
	test_cmp expected file1

ok 4 - apply (-p2) traditional diff with funny filenames

expecting success of 4120.5 'apply with too large -p and fancy filename': 
	cp file1.saved file1 &&
	test_must_fail git apply --stat -p3 patch.escaped 2>err &&
	test_i18ngrep "removing 3 leading" err

error: git diff header lacks filename information when removing 3 leading pathname components (line 5)
ok 5 - apply with too large -p and fancy filename

expecting success of 4120.6 'apply (-p2) diff, mode change only': 
	cat >patch.chmod <<-\EOF &&
	diff --git a/sub/file1 b/sub/file1
	old mode 100644
	new mode 100755
	EOF
	test_chmod -x file1 &&
	git apply --index -p2 patch.chmod &&
	case $(git ls-files -s file1) in 100755*) : good;; *) false;; esac

ok 6 - apply (-p2) diff, mode change only

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 4120.7 'file mode was changed': 
	test -x file1

ok 7 - file mode was changed

expecting success of 4120.8 'apply (-p2) diff, rename': 
	cat >patch.rename <<-\EOF &&
	diff --git a/sub/file1 b/sub/file2
	similarity index 100%
	rename from sub/file1
	rename to sub/file2
	EOF
	echo A >expected &&

	cp file1.saved file1 &&
	rm -f file2 &&
	git apply -p2 patch.rename &&
	test_cmp expected file2

ok 8 - apply (-p2) diff, rename

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4121-apply-diffs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4121-apply-diffs/.git/
expecting success of 4121.1 'setup': git add file &&
	git commit -q -m 1 &&
	git checkout -b test &&
	mv file file.tmp &&
	echo 0 >file &&
	cat file.tmp >>file &&
	rm file.tmp &&
	git commit -a -q -m 2 &&
	echo 9 >>file &&
	git commit -a -q -m 3 &&
	git checkout main
Switched to a new branch 'test'
Switched to branch 'main'
ok 1 - setup

expecting success of 4121.2 'check if contextually independent diffs for the same file apply': ( git diff test~2 test~1 && git diff test~1 test~0 )| git apply
ok 2 - check if contextually independent diffs for the same file apply

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4119-apply-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4119-apply-config/.git/
expecting success of 4119.1 'setup': 
	mkdir sub &&
	echo A >sub/file1 &&
	cp sub/file1 saved &&
	git add sub/file1 &&
	echo "B " >sub/file1 &&
	git diff >patch.file

ok 1 - setup

expecting success of 4119.2 'apply --whitespace=strip': 

	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	git apply --whitespace=strip patch.file &&
	check_result sub/file1

patch.file:7: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 2 - apply --whitespace=strip

expecting success of 4119.3 'apply --whitespace=strip from config': 

	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	git config apply.whitespace strip &&
	git apply patch.file &&
	check_result sub/file1

patch.file:7: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 3 - apply --whitespace=strip from config

expecting success of 4119.4 'apply --whitespace=strip in subdir': 

	cd "$D" &&
	git config --unset-all apply.whitespace &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply --whitespace=strip ../patch.file &&
	check_result file1

sub/../patch.file:7: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 4 - apply --whitespace=strip in subdir

expecting success of 4119.5 'apply --whitespace=strip from config in subdir': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply ../patch.file &&
	check_result file1

sub/../patch.file:7: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 5 - apply --whitespace=strip from config in subdir

expecting success of 4119.6 'same in subdir but with traditional patch input': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply ../gpatch.file &&
	check_result file1

sub/../gpatch.file:5: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 6 - same in subdir but with traditional patch input

expecting success of 4119.7 'same but with traditional patch input of depth 1': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply ../gpatch-sub.file &&
	check_result file1

sub/../gpatch-sub.file:5: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 7 - same but with traditional patch input of depth 1

expecting success of 4119.8 'same but with traditional patch input of depth 2': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply ../gpatch-ab-sub.file &&
	check_result file1

sub/../gpatch-ab-sub.file:5: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 8 - same but with traditional patch input of depth 2

expecting success of 4119.9 'same but with traditional patch input of depth 1': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	git apply -p0 gpatch-sub.file &&
	check_result sub/file1

gpatch-sub.file:5: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 9 - same but with traditional patch input of depth 1

expecting success of 4119.10 'same but with traditional patch input of depth 2': 

	cd "$D" &&
	git config apply.whitespace strip &&
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	git apply gpatch-ab-sub.file &&
	check_result sub/file1

gpatch-ab-sub.file:5: trailing whitespace.
B 
warning: 1 line applied after fixing whitespace errors.
B
Happy
ok 10 - same but with traditional patch input of depth 2

expecting success of 4119.11 'in subdir with traditional patch input': 
	cd "$D" &&
	git config apply.whitespace strip &&
	cat >.gitattributes <<-EOF &&
	/* whitespace=blank-at-eol
	sub/* whitespace=-blank-at-eol
	EOF
	rm -f sub/file1 &&
	cp saved sub/file1 &&
	git update-index --refresh &&

	cd sub &&
	git apply ../gpatch.file &&
	echo "B " >expect &&
	test_cmp expect file1

ok 11 - in subdir with traditional patch input

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4123-apply-shrink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4123-apply-shrink/.git/
expecting success of 4123.1 'setup': 

	git add F &&
	mv F G &&
	sed -e "s/1/11/" -e "s/999999/9/" -e "s/H/HH/" <G >F &&
	git diff >patch &&
	sed -e "/^\$/d" <G >F &&
	git add F


ok 1 - setup

expecting success of 4123.2 'apply should fail gracefully': 
	test_must_fail git apply --index patch &&
	test_path_is_missing .git/index.lock

error: patch failed: F:14
error: F: patch does not apply
ok 2 - apply should fail gracefully

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4125-apply-ws-fuzz.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4125-apply-ws-fuzz/.git/
expecting success of 4125.1 'setup': 

	>file &&
	git add file &&

	# file-0 is full of whitespace breakages
	printf "%s \n" a bb c d eeee f ggg h >file-0 &&

	# patch-0 creates a whitespace broken file
	cat file-0 >file &&
	git diff >patch-0 &&
	git add file &&

	# file-1 is still full of whitespace breakages,
	# but has one line updated, without fixing any
	# whitespaces.
	# patch-1 records that change.
	sed -e "s/d/D/" file-0 >file-1 &&
	cat file-1 >file &&
	git diff >patch-1 &&

	# patch-all is the effect of both patch-0 and patch-1
	>file &&
	git add file &&
	cat file-1 >file &&
	git diff >patch-all &&

	# patch-2 is the same as patch-1 but is based
	# on a version that already has whitespace fixed,
	# and does not introduce whitespace breakages.
	sed -e "s/ \$//" patch-1 >patch-2 &&

	# If all whitespace breakages are fixed the contents
	# should look like file-fixed
	sed -e "s/ \$//" file-1 >file-fixed


ok 1 - setup

expecting success of 4125.2 'nofix': 

	>file &&
	git add file &&

	# Baseline.  Applying without fixing any whitespace
	# breakages.
	git apply --whitespace=nowarn patch-0 &&
	git apply --whitespace=nowarn patch-1 &&

	# The result should obviously match.
	test_cmp file-1 file

ok 2 - nofix

expecting success of 4125.3 'withfix (forward)': 

	>file &&
	git add file &&

	# The first application will munge the context lines
	# the second patch depends on.  We should be able to
	# adjust and still apply.
	git apply --whitespace=fix patch-0 &&
	git apply --whitespace=fix patch-1 &&

	test_cmp file-fixed file

patch-0:6: trailing whitespace.
a 
patch-0:7: trailing whitespace.
bb 
patch-0:8: trailing whitespace.
c 
patch-0:9: trailing whitespace.
d 
patch-0:10: trailing whitespace.
eeee 
warning: squelched 3 whitespace errors
warning: 8 lines applied after fixing whitespace errors.
patch-1:6: trailing whitespace.
a 
patch-1:7: trailing whitespace.
bb 
patch-1:8: trailing whitespace.
c 
patch-1:10: trailing whitespace.
D 
patch-1:11: trailing whitespace.
eeee 
warning: squelched 2 whitespace errors
warning: 1 line applied after fixing whitespace errors.
ok 3 - withfix (forward)

expecting success of 4125.4 'withfix (backward)': 

	>file &&
	git add file &&

	# Now we have a whitespace breakages on our side.
	git apply --whitespace=nowarn patch-0 &&

	# And somebody sends in a patch based on image
	# with whitespace already fixed.
	git apply --whitespace=fix patch-2 &&

	# The result should accept the whitespace fixed
	# postimage.  But the line with "h" is beyond context
	# horizon and left unfixed.

	sed -e /h/d file-fixed >fixed-head &&
	sed -e /h/d file >file-head &&
	test_cmp fixed-head file-head &&

	sed -n -e /h/p file-fixed >fixed-tail &&
	sed -n -e /h/p file >file-tail &&

	! test_cmp fixed-tail file-tail


--- fixed-tail	2022-12-28 07:45:02.068757167 +0000
+++ file-tail	2022-12-28 07:45:02.088757902 +0000
@@ -1 +1 @@
-h
+h 
ok 4 - withfix (backward)

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4122-apply-symlink-inside.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4122-apply-symlink-inside/.git/
expecting success of 4122.1 'setup': 

	mkdir -p arch/i386/boot arch/x86_64 &&
	test_write_lines 1 2 3 4 5 >arch/i386/boot/Makefile &&
	test_ln_s_add ../i386/boot arch/x86_64/boot &&
	git add . &&
	test_tick &&
	git commit -m initial &&
	git branch test &&

	rm arch/x86_64/boot &&
	mkdir arch/x86_64/boot &&
	test_write_lines 2 3 4 5 6 >arch/x86_64/boot/Makefile &&
	git add . &&
	test_tick &&
	git commit -a -m second &&

	git format-patch --binary -1 --stdout >test.patch


checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[main (root-commit) f9acfaa] initial
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 arch/i386/boot/Makefile
 create mode 120000 arch/x86_64/boot
[main e8e99d5] second
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+), 1 deletion(-)
 delete mode 120000 arch/x86_64/boot
 create mode 100644 arch/x86_64/boot/Makefile
ok 1 - setup

expecting success of 4122.2 'apply': 

	git checkout test &&
	git diff --exit-code test &&
	git diff --exit-code --cached test &&
	git apply --index test.patch


Switched to branch 'test'
ok 2 - apply

expecting success of 4122.3 'check result': 

	git diff --exit-code main &&
	git diff --exit-code --cached main &&
	test_tick &&
	git commit -m replay &&
	T1=$(git rev-parse "main^{tree}") &&
	T2=$(git rev-parse "HEAD^{tree}") &&
	test "z$T1" = "z$T2"


[test 66a4bdc] replay
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+), 1 deletion(-)
 delete mode 120000 arch/x86_64/boot
 create mode 100644 arch/x86_64/boot/Makefile
ok 3 - check result

expecting success of 4122.4 'do not read from beyond symbolic link': 
	git reset --hard &&
	mkdir -p arch/x86_64/dir &&
	>arch/x86_64/dir/file &&
	git add arch/x86_64/dir/file &&
	echo line >arch/x86_64/dir/file &&
	git diff >patch &&
	git reset --hard &&

	mkdir arch/i386/dir &&
	>arch/i386/dir/file &&
	ln -s ../i386/dir arch/x86_64/dir &&

	test_must_fail git apply patch &&
	test_must_fail git apply --cached patch &&
	test_must_fail git apply --index patch


HEAD is now at 66a4bdc replay
HEAD is now at 66a4bdc replay
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: arch/x86_64/dir/file: does not exist in index
error: arch/x86_64/dir/file: does not exist in index
ok 4 - do not read from beyond symbolic link

expecting success of 4122.5 'do not follow symbolic link (setup)': 

	rm -rf arch/i386/dir arch/x86_64/dir &&
	git reset --hard &&
	ln -s ../i386/dir arch/x86_64/dir &&
	git add arch/x86_64/dir &&
	git diff HEAD >add_symlink.patch &&
	git reset --hard &&

	mkdir arch/x86_64/dir &&
	>arch/x86_64/dir/file &&
	git add arch/x86_64/dir/file &&
	git diff HEAD >add_file.patch &&
	git diff -R HEAD >del_file.patch &&
	git reset --hard &&
	rm -fr arch/x86_64/dir &&

	cat add_symlink.patch add_file.patch >patch &&
	cat add_symlink.patch del_file.patch >tricky_del &&

	mkdir arch/i386/dir

HEAD is now at 66a4bdc replay
HEAD is now at 66a4bdc replay
HEAD is now at 66a4bdc replay
ok 5 - do not follow symbolic link (setup)

expecting success of 4122.6 'do not follow symbolic link (same input)': 

	# same input creates a confusing symbolic link
	test_must_fail git apply patch 2>error-wt &&
	test_i18ngrep "beyond a symbolic link" error-wt &&
	test_path_is_missing arch/x86_64/dir &&
	test_path_is_missing arch/i386/dir/file &&

	test_must_fail git apply --index patch 2>error-ix &&
	test_i18ngrep "beyond a symbolic link" error-ix &&
	test_path_is_missing arch/x86_64/dir &&
	test_path_is_missing arch/i386/dir/file &&
	test_must_fail git ls-files --error-unmatch arch/x86_64/dir &&
	test_must_fail git ls-files --error-unmatch arch/i386/dir &&

	test_must_fail git apply --cached patch 2>error-ct &&
	test_i18ngrep "beyond a symbolic link" error-ct &&
	test_must_fail git ls-files --error-unmatch arch/x86_64/dir &&
	test_must_fail git ls-files --error-unmatch arch/i386/dir &&

	>arch/i386/dir/file &&
	git add arch/i386/dir/file &&

	test_must_fail git apply tricky_del &&
	test_path_is_file arch/i386/dir/file &&

	test_must_fail git apply --index tricky_del &&
	test_path_is_file arch/i386/dir/file &&
	test_must_fail git ls-files --error-unmatch arch/x86_64/dir &&
	git ls-files --error-unmatch arch/i386/dir &&

	test_must_fail git apply --cached tricky_del &&
	test_must_fail git ls-files --error-unmatch arch/x86_64/dir &&
	git ls-files --error-unmatch arch/i386/dir

error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: pathspec 'arch/x86_64/dir' did not match any file(s) known to git
Did you forget to 'git add'?
error: pathspec 'arch/i386/dir' did not match any file(s) known to git
Did you forget to 'git add'?
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: pathspec 'arch/x86_64/dir' did not match any file(s) known to git
Did you forget to 'git add'?
error: pathspec 'arch/i386/dir' did not match any file(s) known to git
Did you forget to 'git add'?
error: arch/x86_64/dir/file: No such file or directory
error: arch/x86_64/dir/file: does not exist in index
error: pathspec 'arch/x86_64/dir' did not match any file(s) known to git
Did you forget to 'git add'?
arch/i386/dir/file
error: arch/x86_64/dir/file: does not exist in index
error: pathspec 'arch/x86_64/dir' did not match any file(s) known to git
Did you forget to 'git add'?
arch/i386/dir/file
ok 6 - do not follow symbolic link (same input)

expecting success of 4122.7 'do not follow symbolic link (existing)': 

	# existing symbolic link
	git reset --hard &&
	ln -s ../i386/dir arch/x86_64/dir &&
	git add arch/x86_64/dir &&

	test_must_fail git apply add_file.patch 2>error-wt-add &&
	test_i18ngrep "beyond a symbolic link" error-wt-add &&
	test_path_is_missing arch/i386/dir/file &&

	mkdir arch/i386/dir &&
	>arch/i386/dir/file &&
	test_must_fail git apply del_file.patch 2>error-wt-del &&
	test_i18ngrep "beyond a symbolic link" error-wt-del &&
	test_path_is_file arch/i386/dir/file &&
	rm arch/i386/dir/file &&

	test_must_fail git apply --index add_file.patch 2>error-ix-add &&
	test_i18ngrep "beyond a symbolic link" error-ix-add &&
	test_path_is_missing arch/i386/dir/file &&
	test_must_fail git ls-files --error-unmatch arch/i386/dir &&

	test_must_fail git apply --cached add_file.patch 2>error-ct-file &&
	test_i18ngrep "beyond a symbolic link" error-ct-file &&
	test_must_fail git ls-files --error-unmatch arch/i386/dir

HEAD is now at 66a4bdc replay
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: reading from 'arch/x86_64/dir/file' beyond a symbolic link
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: pathspec 'arch/i386/dir' did not match any file(s) known to git
Did you forget to 'git add'?
error: affected file 'arch/x86_64/dir/file' is beyond a symbolic link
error: pathspec 'arch/i386/dir' did not match any file(s) known to git
Did you forget to 'git add'?
ok 7 - do not follow symbolic link (existing)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4126-apply-empty.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4126-apply-empty/.git/
expecting success of 4126.1 'setup': 
	>empty &&
	git add empty &&
	test_tick &&
	git commit -m initial &&
	git commit --allow-empty -m "empty commit" &&
	git format-patch --always HEAD~ >empty.patch &&
	test_write_lines a b c d e >empty &&
	cat empty >expect &&
	git diff |
	sed -e "/^diff --git/d" \
	    -e "/^index /d" \
	    -e "s|a/empty|empty.orig|" \
	    -e "s|b/empty|empty|" >patch0 &&
	sed -e "s|empty|missing|" patch0 >patch1 &&
	>empty &&
	git update-index --refresh

[master (root-commit) e3f79fd] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty
[master 3401d02] empty commit
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4126.2 'apply empty': 
	rm -f missing &&
	test_when_finished "git reset --hard" &&
	git apply patch0 &&
	test_cmp expect empty

HEAD is now at 3401d02 empty commit
ok 2 - apply empty

expecting success of 4126.3 'apply empty patch fails': 
	test_when_finished "git reset --hard" &&
	test_must_fail git apply empty.patch &&
	test_must_fail git apply - </dev/null

error: No valid patches in input (allow with "--allow-empty")
error: No valid patches in input (allow with "--allow-empty")
HEAD is now at 3401d02 empty commit
ok 3 - apply empty patch fails

expecting success of 4126.4 'apply with --allow-empty succeeds': 
	test_when_finished "git reset --hard" &&
	git apply --allow-empty empty.patch &&
	git apply --allow-empty - </dev/null

HEAD is now at 3401d02 empty commit
ok 4 - apply with --allow-empty succeeds

expecting success of 4126.5 'apply --index empty': 
	rm -f missing &&
	test_when_finished "git reset --hard" &&
	git apply --index patch0 &&
	test_cmp expect empty &&
	git diff --exit-code

HEAD is now at 3401d02 empty commit
ok 5 - apply --index empty

expecting success of 4126.6 'apply create': 
	rm -f missing &&
	test_when_finished "git reset --hard" &&
	git apply patch1 &&
	test_cmp expect missing

HEAD is now at 3401d02 empty commit
ok 6 - apply create

expecting success of 4126.7 'apply --index create': 
	rm -f missing &&
	test_when_finished "git reset --hard" &&
	git apply --index patch1 &&
	test_cmp expect missing &&
	git diff --exit-code

HEAD is now at 3401d02 empty commit
ok 7 - apply --index create

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4128-apply-root.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4128-apply-root/.git/
expecting success of 4128.1 'setup': 

	mkdir -p some/sub/dir &&
	echo Hello > some/sub/dir/file &&
	git add some/sub/dir/file &&
	git commit -m initial &&
	git tag initial


[master (root-commit) dcaa43e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 some/sub/dir/file
ok 1 - setup

expecting success of 4128.2 'apply --directory -p (1)': 
	git apply --directory=some/sub -p3 --index patch &&
	echo Bello >expect &&
	git show :some/sub/dir/file >actual &&
	test_cmp expect actual &&
	test_cmp expect some/sub/dir/file


ok 2 - apply --directory -p (1)

expecting success of 4128.3 'apply --directory -p (2) ': 

	git reset --hard initial &&
	git apply --directory=some/sub/ -p3 --index patch &&
	echo Bello >expect &&
	git show :some/sub/dir/file >actual &&
	test_cmp expect actual &&
	test_cmp expect some/sub/dir/file


HEAD is now at dcaa43e initial
ok 3 - apply --directory -p (2) 

expecting success of 4128.4 'apply --directory (new file)': 
	git reset --hard initial &&
	git apply --directory=some/sub/dir/ --index patch &&
	echo content >expect &&
	git show :some/sub/dir/newfile >actual &&
	test_cmp expect actual &&
	test_cmp expect some/sub/dir/newfile

HEAD is now at dcaa43e initial
ok 4 - apply --directory (new file)

expecting success of 4128.5 'apply --directory -p (new file)': 
	git reset --hard initial &&
	git apply -p2 --directory=some/sub/dir/ --index patch &&
	echo content >expect &&
	git show :some/sub/dir/newfile2 >actual &&
	test_cmp expect actual &&
	test_cmp expect some/sub/dir/newfile2

HEAD is now at dcaa43e initial
ok 5 - apply --directory -p (new file)

expecting success of 4128.6 'apply --directory (delete file)': 
	git reset --hard initial &&
	echo content >some/sub/dir/delfile &&
	git add some/sub/dir/delfile &&
	git apply --directory=some/sub/dir/ --index patch &&
	git ls-files >out &&
	! grep delfile out

HEAD is now at dcaa43e initial
ok 6 - apply --directory (delete file)

expecting success of 4128.7 'apply --directory (quoted filename)': 
	git reset --hard initial &&
	git apply --directory=some/sub/dir/ --index patch &&
	echo content >expect &&
	git show :some/sub/dir/quotefile >actual &&
	test_cmp expect actual &&
	test_cmp expect some/sub/dir/quotefile

HEAD is now at dcaa43e initial
ok 7 - apply --directory (quoted filename)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4127-apply-same-fn.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4127-apply-same-fn/.git/
expecting success of 4127.1 'setup': 
	test_write_lines a b c d e f g h i j k l m >same_fn &&
	cp same_fn other_fn &&
	git add same_fn other_fn &&
	git commit -m initial

[master (root-commit) a38c7c5] initial
 Author: A U Thor <author@example.com>
 2 files changed, 26 insertions(+)
 create mode 100644 other_fn
 create mode 100644 same_fn
ok 1 - setup

expecting success of 4127.2 'apply same filename with independent changes': 
	modify "s/^d/z/" same_fn &&
	git diff > patch0 &&
	git add same_fn &&
	modify "s/^i/y/" same_fn &&
	git diff >> patch0 &&
	cp same_fn same_fn2 &&
	git reset --hard &&
	git apply patch0 &&
	test_cmp same_fn same_fn2

HEAD is now at a38c7c5 initial
ok 2 - apply same filename with independent changes

expecting success of 4127.3 'apply same filename with overlapping changes': 
	git reset --hard &&

	# Store same_fn so that we can check apply -R in next test
	cp same_fn same_fn1 &&

	modify "s/^d/z/" same_fn &&
	git diff > patch0 &&
	git add same_fn &&
	modify "s/^e/y/" same_fn &&
	git diff >> patch0 &&
	cp same_fn same_fn2 &&
	git reset --hard &&
	git apply patch0 &&
	test_cmp same_fn same_fn2

HEAD is now at a38c7c5 initial
HEAD is now at a38c7c5 initial
ok 3 - apply same filename with overlapping changes

expecting success of 4127.4 'apply same filename with overlapping changes, in reverse': 
	git apply -R patch0 &&
	test_cmp same_fn same_fn1

ok 4 - apply same filename with overlapping changes, in reverse

expecting success of 4127.5 'apply same new filename after rename': 
	git reset --hard &&
	git mv same_fn new_fn &&
	modify "s/^d/z/" new_fn &&
	git add new_fn &&
	git diff -M --cached > patch1 &&
	modify "s/^e/y/" new_fn &&
	git diff >> patch1 &&
	cp new_fn new_fn2 &&
	git reset --hard &&
	git apply --index patch1 &&
	test_cmp new_fn new_fn2

HEAD is now at a38c7c5 initial
HEAD is now at a38c7c5 initial
ok 5 - apply same new filename after rename

expecting success of 4127.6 'apply same old filename after rename -- should fail.': 
	git reset --hard &&
	git mv same_fn new_fn &&
	modify "s/^d/z/" new_fn &&
	git add new_fn &&
	git diff -M --cached > patch1 &&
	git mv new_fn same_fn &&
	modify "s/^e/y/" same_fn &&
	git diff >> patch1 &&
	git reset --hard &&
	test_must_fail git apply patch1

HEAD is now at a38c7c5 initial
HEAD is now at a38c7c5 initial
error: path same_fn has been renamed/deleted
ok 6 - apply same old filename after rename -- should fail.

expecting success of 4127.7 'apply A->B (rename), C->A (rename), A->A -- should pass.': 
	git reset --hard &&
	git mv same_fn new_fn &&
	modify "s/^d/z/" new_fn &&
	git add new_fn &&
	git diff -M --cached > patch1 &&
	git commit -m "a rename" &&
	git mv other_fn same_fn &&
	modify "s/^e/y/" same_fn &&
	git add same_fn &&
	git diff -M --cached >> patch1 &&
	modify "s/^g/x/" same_fn &&
	git diff >> patch1 &&
	git reset --hard HEAD^ &&
	git apply patch1

HEAD is now at a38c7c5 initial
[master d59c5fe] a rename
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename same_fn => new_fn (92%)
HEAD is now at a38c7c5 initial
ok 7 - apply A->B (rename), C->A (rename), A->A -- should pass.

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4129-apply-samemode.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4129-apply-samemode/.git/
expecting success of 4129.1 'setup': 
	echo original >file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git tag initial &&
	echo modified >file &&
	git diff --stat -p >patch-0.txt &&
	chmod +x file &&
	git diff --stat -p >patch-1.txt &&
	sed "s/^\(new mode \).*/\1/" <patch-1.txt >patch-empty-mode.txt &&
	sed "s/^\(new mode \).*/\1garbage/" <patch-1.txt >patch-bogus-mode.txt

[master (root-commit) e950771] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 4129.2 'same mode (no index)': 
	git reset --hard &&
	chmod +x file &&
	git apply patch-0.txt &&
	test -x file

HEAD is now at e950771 initial
warning: file has type 100755, expected 100644
ok 2 - same mode (no index)

expecting success of 4129.3 'same mode (with index)': 
	git reset --hard &&
	chmod +x file &&
	git add file &&
	git apply --index patch-0.txt &&
	test -x file &&
	git diff --exit-code

HEAD is now at e950771 initial
warning: file has type 100755, expected 100644
ok 3 - same mode (with index)

expecting success of 4129.4 'same mode (index only)': 
	git reset --hard &&
	chmod +x file &&
	git add file &&
	git apply --cached patch-0.txt &&
	git ls-files -s file | grep "^100755"

HEAD is now at e950771 initial
warning: file has type 100755, expected 100644
100755 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0	file
ok 4 - same mode (index only)

expecting success of 4129.5 'mode update (no index)': 
	git reset --hard &&
	git apply patch-1.txt &&
	test -x file

HEAD is now at e950771 initial
ok 5 - mode update (no index)

expecting success of 4129.6 'mode update (with index)': 
	git reset --hard &&
	git apply --index patch-1.txt &&
	test -x file &&
	git diff --exit-code

HEAD is now at e950771 initial
ok 6 - mode update (with index)

expecting success of 4129.7 'mode update (index only)': 
	git reset --hard &&
	git apply --cached patch-1.txt &&
	git ls-files -s file | grep "^100755"

HEAD is now at e950771 initial
100755 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0	file
ok 7 - mode update (index only)

expecting success of 4129.8 'empty mode is rejected': 
	git reset --hard &&
	test_must_fail git apply patch-empty-mode.txt 2>err &&
	test_i18ngrep "invalid mode" err

HEAD is now at e950771 initial
error: invalid mode on line 5: 
ok 8 - empty mode is rejected

expecting success of 4129.9 'bogus mode is rejected': 
	git reset --hard &&
	test_must_fail git apply patch-bogus-mode.txt 2>err &&
	test_i18ngrep "invalid mode" err

HEAD is now at e950771 initial
error: invalid mode on line 5: garbage
ok 9 - bogus mode is rejected

expecting success of 4129.10 'do not use core.sharedRepository for working tree files': 
	git reset --hard &&
	test_config core.sharedRepository 0666 &&
	(
		# Remove a default ACL if possible.
		(setfacl -k . 2>/dev/null || true) &&
		umask 0077 &&

		# Test both files (f1) and leading dirs (d)
		mkdir d &&
		touch f1 d/f2 &&
		git add f1 d/f2 &&
		git diff --staged >patch-f1-and-f2.txt &&

		rm -rf d f1 &&
		git apply patch-f1-and-f2.txt &&

		echo "-rw-------" >f1_mode.expected &&
		echo "drwx------" >d_mode.expected &&
		test_modebits f1 >f1_mode.actual &&
		test_modebits d >d_mode.actual &&
		test_cmp f1_mode.expected f1_mode.actual &&
		test_cmp d_mode.expected d_mode.actual
	)

HEAD is now at e950771 initial
ok 10 - do not use core.sharedRepository for working tree files

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4130-apply-criss-cross-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4130-apply-criss-cross-rename/.git/
expecting success of 4130.1 'setup': 
	# Ensure that file sizes are different, because on Windows
	# lstat() does not discover inode numbers, and we need
	# other properties to discover swapped files
	# (mtime is not always different, either).
	create_file file1 "some content" &&
	create_file file2 "some other content" &&
	create_file file3 "again something else" &&
	git add file1 file2 file3 &&
	git commit -m 1

[master (root-commit) 5cfe986] 1
 Author: A U Thor <author@example.com>
 3 files changed, 303 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
 create mode 100644 file3
ok 1 - setup

expecting success of 4130.2 'criss-cross rename': 
	mv file1 tmp &&
	mv file2 file1 &&
	mv tmp file2 &&
	cp file1 file1-swapped &&
	cp file2 file2-swapped

ok 2 - criss-cross rename

expecting success of 4130.3 'diff -M -B': 
	git diff -M -B > diff &&
	git reset --hard


HEAD is now at 5cfe986 1
ok 3 - diff -M -B

expecting success of 4130.4 'apply': 
	git apply diff &&
	test_cmp file1 file1-swapped &&
	test_cmp file2 file2-swapped

ok 4 - apply

expecting success of 4130.5 'criss-cross rename': 
	git reset --hard &&
	mv file1 tmp &&
	mv file2 file1 &&
	mv file3 file2 &&
	mv tmp file3 &&
	cp file1 file1-swapped &&
	cp file2 file2-swapped &&
	cp file3 file3-swapped

HEAD is now at 5cfe986 1
ok 5 - criss-cross rename

expecting success of 4130.6 'diff -M -B': 
	git diff -M -B > diff &&
	git reset --hard

HEAD is now at 5cfe986 1
ok 6 - diff -M -B

expecting success of 4130.7 'apply': 
	git apply diff &&
	test_cmp file1 file1-swapped &&
	test_cmp file2 file2-swapped &&
	test_cmp file3 file3-swapped

ok 7 - apply

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4133-apply-filenames.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4133-apply-filenames/.git/
expecting success of 4133.1 'setup': 
	cat > bad1.patch <<EOF &&
diff --git a/f b/f
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/f-blah
@@ -0,0 +1 @@
+1
EOF
	cat > bad2.patch <<EOF
diff --git a/f b/f
deleted file mode 100644
index d00491f..0000000
--- b/f-blah
+++ /dev/null
@@ -1 +0,0 @@
-1
EOF

ok 1 - setup

expecting success of 4133.2 'apply diff with inconsistent filenames in headers': 
	test_must_fail git apply bad1.patch 2>err &&
	test_i18ngrep "inconsistent new filename" err &&
	test_must_fail git apply bad2.patch 2>err &&
	test_i18ngrep "inconsistent old filename" err

error: git apply: bad git-diff - inconsistent new filename on line 2
error: git apply: bad git-diff - inconsistent old filename on line 2
ok 2 - apply diff with inconsistent filenames in headers

expecting success of 4133.3 'apply diff with new filename missing from headers': 
	cat >missing_new_filename.diff <<-\EOF &&
	diff --git a/f b/f
	index 0000000..d00491f
	--- a/f
	@@ -0,0 +1 @@
	+1
	EOF
	test_must_fail git apply missing_new_filename.diff 2>err &&
	test_i18ngrep "lacks filename information" err

error: git diff header lacks filename information (line 4)
ok 3 - apply diff with new filename missing from headers

expecting success of 4133.4 'apply diff with old filename missing from headers': 
	cat >missing_old_filename.diff <<-\EOF &&
	diff --git a/f b/f
	index d00491f..0000000
	+++ b/f
	@@ -1 +0,0 @@
	-1
	EOF
	test_must_fail git apply missing_old_filename.diff 2>err &&
	test_i18ngrep "lacks filename information" err

error: git diff header lacks filename information (line 4)
ok 4 - apply diff with old filename missing from headers

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4131-apply-fake-ancestor.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4131-apply-fake-ancestor/.git/
expecting success of 4131.1 'setup': 
	test_commit 1 &&
	test_commit 2 &&
	mkdir sub &&
	test_commit 3 sub/3.t &&
	test_commit 4

[master (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 82335b2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master 0015c90] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/3.t
[master 8d74a78] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
ok 1 - setup

expecting success of 4131.2 'apply --build-fake-ancestor': 
	git checkout 2 &&
	echo "A" > 1.t &&
	git diff > 1.patch &&
	git reset --hard &&
	git checkout 1 &&
	git apply --build-fake-ancestor 1.ancestor 1.patch

Note: switching to '2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 82335b2 2
HEAD is now at 82335b2 2
Previous HEAD position was 82335b2 2
HEAD is now at d0dcf97 1
ok 2 - apply --build-fake-ancestor

expecting success of 4131.3 'apply --build-fake-ancestor in a subdirectory': 
	git checkout 3 &&
	echo "C" > sub/3.t &&
	git diff > 3.patch &&
	git reset --hard &&
	git checkout 4 &&
	(
		cd sub &&
		git apply --build-fake-ancestor 3.ancestor ../3.patch &&
		test -f 3.ancestor
	) &&
	git apply --build-fake-ancestor 3.ancestor 3.patch &&
	test_cmp sub/3.ancestor 3.ancestor

Previous HEAD position was d0dcf97 1
HEAD is now at 0015c90 3
HEAD is now at 0015c90 3
Previous HEAD position was 0015c90 3
HEAD is now at 8d74a78 4
ok 3 - apply --build-fake-ancestor in a subdirectory

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4132-apply-removal.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4132-apply-removal/.git/
expecting success of 4132.1 'setup': 
	cat <<-EOF >c &&
	diff -ruN a/file b/file
	--- a/file	TS0
	+++ b/file	TS1
	@@ -0,0 +1 @@
	+something
	EOF

	cat <<-EOF >d &&
	diff -ruN a/file b/file
	--- a/file	TS0
	+++ b/file	TS1
	@@ -1 +0,0 @@
	-something
	EOF

	timeWest="1982-09-16 07:00:00.000000000 -0800" &&
	 timeGMT="1982-09-16 15:00:00.000000000 +0000" &&
	timeEast="1982-09-17 00:00:00.000000000 +0900" &&

	epocWest="1969-12-31 16:00:00.000000000 -0800" &&
	 epocGMT="1970-01-01 00:00:00.000000000 +0000" &&
	epocEast="1970-01-01 09:00:00.000000000 +0900" &&
	epocWest2="1969-12-31 16:00:00 -08:00" &&

	sed -e "s/TS0/$epocWest/" -e "s/TS1/$timeWest/" <c >createWest.patch &&
	sed -e "s/TS0/$epocEast/" -e "s/TS1/$timeEast/" <c >createEast.patch &&
	sed -e "s/TS0/$epocGMT/" -e "s/TS1/$timeGMT/" <c >createGMT.patch &&

	sed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" <c >addWest.patch &&
	sed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" <c >addEast.patch &&
	sed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" <c >addGMT.patch &&

	sed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" <d >emptyWest.patch &&
	sed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" <d >emptyEast.patch &&
	sed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" <d >emptyGMT.patch &&

	sed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest/" <d >removeWest.patch &&
	sed -e "s/TS0/$timeEast/" -e "s/TS1/$epocEast/" <d >removeEast.patch &&
	sed -e "s/TS0/$timeGMT/" -e "s/TS1/$epocGMT/" <d >removeGMT.patch &&
	sed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest2/" <d >removeWest2.patch &&

	echo something >something

ok 1 - setup

expecting success of 4132.2 'test addEast.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 2 - test addEast.patch

expecting success of 4132.3 'test addGMT.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 3 - test addGMT.patch

expecting success of 4132.4 'test addWest.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 4 - test addWest.patch

expecting success of 4132.5 'test createEast.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
error: file: already exists in working directory
ok 5 - test createEast.patch

expecting success of 4132.6 'test createGMT.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
error: file: already exists in working directory
ok 6 - test createGMT.patch

expecting success of 4132.7 'test createWest.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
error: file: already exists in working directory
ok 7 - test createWest.patch

expecting success of 4132.8 'test emptyEast.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 8 - test emptyEast.patch

expecting success of 4132.9 'test emptyGMT.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 9 - test emptyGMT.patch

expecting success of 4132.10 'test emptyWest.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 10 - test emptyWest.patch

expecting success of 4132.11 'test removeEast.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 11 - test removeEast.patch

expecting success of 4132.12 'test removeGMT.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 12 - test removeGMT.patch

expecting success of 4132.13 'test removeWest.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 13 - test removeWest.patch

expecting success of 4132.14 'test removeWest2.patch': 
		rm -f file .git/index &&
		case "$patch" in
		create*)
			# must be able to create
			git apply --index $patch &&
			test_cmp file something &&
			# must notice the file is already there
			>file &&
			git add file &&
			test_must_fail git apply $patch
			;;
		add*)
			# must be able to create or patch
			git apply $patch &&
			test_cmp file something &&
			>file &&
			git apply $patch &&
			test_cmp file something
			;;
		empty*)
			# must leave an empty file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			test -f file &&
			test_must_be_empty file
			;;
		remove*)
			# must remove the file
			cat something >file &&
			git add file &&
			git apply --index $patch &&
			! test -f file
			;;
		esac
	
ok 14 - test removeWest2.patch

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4134-apply-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4134-apply-submodule/.git/
expecting success of 4134.1 'setup': 
	cat > create-sm.patch <<EOF &&
diff --git a/dir/sm b/dir/sm
new file mode 160000
index 0000000..0123456
--- /dev/null
+++ b/dir/sm
@@ -0,0 +1 @@
+Subproject commit $(test_oid numeric)
EOF
	cat > remove-sm.patch <<EOF
diff --git a/dir/sm b/dir/sm
deleted file mode 160000
index 0123456..0000000
--- a/dir/sm
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit $(test_oid numeric)
EOF

ok 1 - setup

expecting success of 4134.2 'removing a submodule also removes all leading subdirectories': 
	git apply --index create-sm.patch &&
	test -d dir/sm &&
	git apply --index remove-sm.patch &&
	test \! -d dir

ok 2 - removing a submodule also removes all leading subdirectories

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4136-apply-check.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4136-apply-check/.git/
expecting success of 4136.1 'setup': 
	test_commit 1

[master (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
ok 1 - setup

expecting success of 4136.2 'apply --check exits non-zero with unrecognized input': 
	test_must_fail git apply --check - <<-\EOF
	I am not a patch
	I look nothing like a patch
	git apply must fail
	EOF

error: No valid patches in input (allow with "--allow-empty")
ok 2 - apply --check exits non-zero with unrecognized input

expecting success of 4136.3 'apply exits non-zero with no-op patch': 
	cat >input <<-\EOF &&
	diff --get a/1 b/1
	index 6696ea4..606eddd 100644
	--- a/1
	+++ b/1
	@@ -1,1 +1,1 @@
	 1
	EOF
	test_must_fail git apply --stat input &&
	test_must_fail git apply --check input

error: corrupt patch at line 7
error: corrupt patch at line 7
ok 3 - apply exits non-zero with no-op patch

expecting success of 4136.4 '`apply --recount` allows no-op patch': 
	echo 1 >1 &&
	git apply --recount --check <<-\EOF
	diff --get a/1 b/1
	index 6696ea4..606eddd 100644
	--- a/1
	+++ b/1
	@@ -1,1 +1,1 @@
	 1
	EOF

ok 4 - `apply --recount` allows no-op patch

expecting success of 4136.5 'invalid combination: create and copy': 
	test_must_fail git apply --check - <<-\EOF
	diff --git a/1 b/2
	new file mode 100644
	copy from 1
	copy to 2
	EOF

error: inconsistent header lines 2 and 3
ok 5 - invalid combination: create and copy

expecting success of 4136.6 'invalid combination: create and rename': 
	test_must_fail git apply --check - <<-\EOF
	diff --git a/1 b/2
	new file mode 100644
	rename from 1
	rename to 2
	EOF

error: inconsistent header lines 2 and 3
ok 6 - invalid combination: create and rename

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4138-apply-ws-expansion.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4138-apply-ws-expansion/.git/
expecting success of 4138.1 'setup': 
	#
	## create test-N, patchN.patch, expect-N files
	#

	# test 1
	printf "\t%s\n" 1 2 3 4 5 6 >before &&
	printf "\t%s\n" 1 2 3 >after &&
	printf "%64s\n" a b c >>after &&
	printf "\t%s\n" 4 5 6 >>after &&
	test_expect_code 1 git diff --no-index before after >patch1.patch.raw &&
	sed -e "s/before/test-1/" -e "s/after/test-1/" patch1.patch.raw >patch1.patch &&
	printf "%64s\n" 1 2 3 4 5 6 >test-1 &&
	printf "%64s\n" 1 2 3 a b c 4 5 6 >expect-1 &&

	# test 2
	printf "\t%s\n" a b c d e f >before &&
	printf "\t%s\n" a b c >after &&
	n=10 &&
	x=1 &&
	while test $x -lt $n
	do
		printf "%63s%d\n" "" $x >>after &&
		x=$(( $x + 1 )) || return 1
	done &&
	printf "\t%s\n" d e f >>after &&
	test_expect_code 1 git diff --no-index before after >patch2.patch.raw &&
	sed -e "s/before/test-2/" -e "s/after/test-2/" patch2.patch.raw >patch2.patch &&
	printf "%64s\n" a b c d e f >test-2 &&
	printf "%64s\n" a b c >expect-2 &&
	x=1 &&
	while test $x -lt $n
	do
		printf "%63s%d\n" "" $x >>expect-2 &&
		x=$(( $x + 1 )) || return 1
	done &&
	printf "%64s\n" d e f >>expect-2 &&

	# test 3
	printf "\t%s\n" a b c d e f >before &&
	printf "\t%s\n" a b c >after &&
	n=100 &&
	x=0 &&
	while test $x -lt $n
	do
		printf "%63s%02d\n" "" $x >>after &&
		x=$(( $x + 1 )) || return 1
	done &&
	printf "\t%s\n" d e f >>after &&
	test_expect_code 1 git diff --no-index before after >patch3.patch.raw &&
	sed -e "s/before/test-3/" -e "s/after/test-3/" patch3.patch.raw >patch3.patch &&
	printf "%64s\n" a b c d e f >test-3 &&
	printf "%64s\n" a b c >expect-3 &&
	x=0 &&
	while test $x -lt $n
	do
		printf "%63s%02d\n" "" $x >>expect-3 &&
		x=$(( $x + 1 )) || return 1
	done &&
	printf "%64s\n" d e f >>expect-3 &&

	# test 4
	>before &&
	x=0 &&
	while test $x -lt 50
	do
		printf "\t%02d\n" $x >>before &&
		x=$(( $x + 1 )) || return 1
	done &&
	cat before >after &&
	printf "%64s\n" a b c >>after &&
	while test $x -lt 100
	do
		printf "\t%02d\n" $x >>before &&
		printf "\t%02d\n" $x >>after &&
		x=$(( $x + 1 )) || return 1
	done &&
	test_expect_code 1 git diff --no-index before after >patch4.patch.raw &&
	sed -e "s/before/test-4/" -e "s/after/test-4/" patch4.patch.raw >patch4.patch &&
	>test-4 &&
	x=0 &&
	while test $x -lt 50
	do
		printf "%63s%02d\n" "" $x >>test-4 &&
		x=$(( $x + 1 )) || return 1
	done &&
	cat test-4 >expect-4 &&
	printf "%64s\n" a b c >>expect-4 &&
	while test $x -lt 100
	do
		printf "%63s%02d\n" "" $x >>test-4 &&
		printf "%63s%02d\n" "" $x >>expect-4 &&
		x=$(( $x + 1 )) || return 1
	done &&

	git config core.whitespace tab-in-indent,tabwidth=63 &&
	git config apply.whitespace fix


ok 1 - setup

expecting success of 4138.2 'apply with ws expansion (t=$t)': 
		git apply patch$t.patch &&
		test_cmp expect-$t test-$t
	
patch1.patch:6: tab in indent.
	1
patch1.patch:7: tab in indent.
	2
patch1.patch:8: tab in indent.
	3
patch1.patch:12: tab in indent.
	4
patch1.patch:13: tab in indent.
	5
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
ok 2 - apply with ws expansion (t=$t)

expecting success of 4138.3 'apply with ws expansion (t=$t)': 
		git apply patch$t.patch &&
		test_cmp expect-$t test-$t
	
patch2.patch:6: tab in indent.
	a
patch2.patch:7: tab in indent.
	b
patch2.patch:8: tab in indent.
	c
patch2.patch:18: tab in indent.
	d
patch2.patch:19: tab in indent.
	e
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
ok 3 - apply with ws expansion (t=$t)

expecting success of 4138.4 'apply with ws expansion (t=$t)': 
		git apply patch$t.patch &&
		test_cmp expect-$t test-$t
	
patch3.patch:6: tab in indent.
	a
patch3.patch:7: tab in indent.
	b
patch3.patch:8: tab in indent.
	c
patch3.patch:109: tab in indent.
	d
patch3.patch:110: tab in indent.
	e
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
ok 4 - apply with ws expansion (t=$t)

expecting success of 4138.5 'apply with ws expansion (t=$t)': 
		git apply patch$t.patch &&
		test_cmp expect-$t test-$t
	
patch4.patch:6: tab in indent.
	47
patch4.patch:7: tab in indent.
	48
patch4.patch:8: tab in indent.
	49
patch4.patch:12: tab in indent.
	50
patch4.patch:13: tab in indent.
	51
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
ok 5 - apply with ws expansion (t=$t)

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4135-apply-weird-filenames.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4135-apply-weird-filenames/.git/
expecting success of 4135.1 'setup': 
	vector=$TEST_DIRECTORY/t4135 &&

	test_tick &&
	git commit --allow-empty -m preimage &&
	git tag preimage &&

	reset_preimage() {
		git checkout -f preimage^0 &&
		git read-tree -u --reset HEAD &&
		git update-index --refresh
	}

[master (root-commit) 9cf544c] preimage
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4135.2 'plain, git-style file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'postimage.txt' &&
		git apply -v "$vector"/'git-plain.diff' &&
		test_cmp expected 'postimage.txt'
	
Note: switching to 'preimage^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9cf544c preimage
Checking patch postimage.txt...
Applied patch postimage.txt cleanly.
ok 2 - plain, git-style file creation patch

expecting success of 4135.3 'plain, traditional patch': 
		echo postimage >expected &&
		reset_preimage &&
		echo preimage >'postimage.txt' &&
		git apply -v "$vector"/'diff-plain.diff' &&
		test_cmp expected 'postimage.txt'
	
HEAD is now at 9cf544c preimage
Checking patch postimage.txt...
Applied patch postimage.txt cleanly.
ok 3 - plain, traditional patch

expecting success of 4135.4 'plain, traditional file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'postimage.txt' &&
		git apply -v "$vector"/'add-plain.diff' &&
		test_cmp expected 'postimage.txt'
	
HEAD is now at 9cf544c preimage
Checking patch postimage.txt...
Applied patch postimage.txt cleanly.
ok 4 - plain, traditional file creation patch

expecting success of 4135.5 'with spaces, git-style file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post image.txt' &&
		git apply -v "$vector"/'git-with spaces.diff' &&
		test_cmp expected 'post image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch post image.txt...
Applied patch post image.txt cleanly.
ok 5 - with spaces, git-style file creation patch

expecting success of 4135.6 'with spaces, traditional patch': 
		echo postimage >expected &&
		reset_preimage &&
		echo preimage >'post image.txt' &&
		git apply -v "$vector"/'diff-with spaces.diff' &&
		test_cmp expected 'post image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch post image.txt...
Applied patch post image.txt cleanly.
ok 6 - with spaces, traditional patch

expecting success of 4135.7 'with spaces, traditional file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post image.txt' &&
		git apply -v "$vector"/'add-with spaces.diff' &&
		test_cmp expected 'post image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch post image.txt...
Applied patch post image.txt cleanly.
ok 7 - with spaces, traditional file creation patch

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 4135.8 'with tab, git-style file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post	image.txt' &&
		git apply -v "$vector"/'git-with tab.diff' &&
		test_cmp expected 'post	image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\timage.txt"...
Applied patch "post\timage.txt" cleanly.
ok 8 - with tab, git-style file creation patch

expecting success of 4135.9 'with tab, traditional patch': 
		echo postimage >expected &&
		reset_preimage &&
		echo preimage >'post	image.txt' &&
		git apply -v "$vector"/'diff-with tab.diff' &&
		test_cmp expected 'post	image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\timage.txt"...
Applied patch "post\timage.txt" cleanly.
ok 9 - with tab, traditional patch

expecting success of 4135.10 'with tab, traditional file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post	image.txt' &&
		git apply -v "$vector"/'add-with tab.diff' &&
		test_cmp expected 'post	image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\timage.txt"...
Applied patch "post\timage.txt" cleanly.
ok 10 - with tab, traditional file creation patch

expecting success of 4135.11 'with backslash, git-style file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post\image.txt' &&
		git apply -v "$vector"/'git-with backslash.diff' &&
		test_cmp expected 'post\image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\\image.txt"...
Applied patch "post\\image.txt" cleanly.
ok 11 - with backslash, git-style file creation patch

expecting success of 4135.12 'with backslash, traditional patch': 
		echo postimage >expected &&
		reset_preimage &&
		echo preimage >'post\image.txt' &&
		git apply -v "$vector"/'diff-with backslash.diff' &&
		test_cmp expected 'post\image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\\image.txt"...
Applied patch "post\\image.txt" cleanly.
ok 12 - with backslash, traditional patch

expecting success of 4135.13 'with backslash, traditional file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f 'post\image.txt' &&
		git apply -v "$vector"/'add-with backslash.diff' &&
		test_cmp expected 'post\image.txt'
	
HEAD is now at 9cf544c preimage
Checking patch "post\\image.txt"...
Applied patch "post\\image.txt" cleanly.
ok 13 - with backslash, traditional file creation patch

expecting success of 4135.14 'with quote, git-style file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f '"postimage".txt' &&
		git apply -v "$vector"/'git-with quote.diff' &&
		test_cmp expected '"postimage".txt'
	
HEAD is now at 9cf544c preimage
Checking patch "\"postimage\".txt"...
Applied patch "\"postimage\".txt" cleanly.
ok 14 - with quote, git-style file creation patch

checking known breakage of 4135.15 'with quote, traditional patch': 
		echo postimage >expected &&
		reset_preimage &&
		echo preimage >'"postimage".txt' &&
		git apply -v "$vector"/'diff-with quote.diff' &&
		test_cmp expected '"postimage".txt'
	
HEAD is now at 9cf544c preimage
Checking patch postimage...
error: postimage: No such file or directory
not ok 15 - with quote, traditional patch # TODO known breakage

expecting success of 4135.16 'with quote, traditional file creation patch': 
		echo postimage >expected &&
		reset_preimage &&
		rm -f '"postimage".txt' &&
		git apply -v "$vector"/'add-with quote.diff' &&
		test_cmp expected '"postimage".txt'
	
HEAD is now at 9cf544c preimage
Checking patch "\"postimage\".txt"...
Applied patch "\"postimage\".txt" cleanly.
ok 16 - with quote, traditional file creation patch

expecting success of 4135.17 'whitespace-damaged traditional patch': 
	echo postimage >expected &&
	reset_preimage &&
	rm -f postimage.txt &&
	git apply -v "$vector/damaged.diff" &&
	test_cmp expected postimage.txt

HEAD is now at 9cf544c preimage
Checking patch postimage.txt...
Applied patch postimage.txt cleanly.
ok 17 - whitespace-damaged traditional patch

expecting success of 4135.18 'traditional patch with colon in timezone': 
	echo postimage >expected &&
	reset_preimage &&
	rm -f "post image.txt" &&
	git apply "$vector/funny-tz.diff" &&
	test_cmp expected "post image.txt"

HEAD is now at 9cf544c preimage
ok 18 - traditional patch with colon in timezone

expecting success of 4135.19 'traditional, whitespace-damaged, colon in timezone': 
	echo postimage >expected &&
	reset_preimage &&
	rm -f "post image.txt" &&
	git apply "$vector/damaged-tz.diff" &&
	test_cmp expected "post image.txt"

HEAD is now at 9cf544c preimage
ok 19 - traditional, whitespace-damaged, colon in timezone

expecting success of 4135.20 'apply handles a diff generated by Subversion': 
	>Makefile &&
	git apply -p2 diff-from-svn &&
	test_path_is_missing Makefile

ok 20 - apply handles a diff generated by Subversion

# still have 1 known breakage(s)
# passed all remaining 19 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4139-apply-escape.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4139-apply-escape/.git/
expecting success of 4139.1 'bump git repo one level down': 
	mkdir inside &&
	mv .git inside/ &&
	cd inside

ok 1 - bump git repo one level down

expecting success of 4139.2 'cannot create file containing ..': 
	mkpatch_add ../foo >patch &&
	test_must_fail git apply patch &&
	test_path_is_missing ../foo

error: invalid path '../foo'
ok 2 - cannot create file containing ..

expecting success of 4139.3 'can create file containing .. with --unsafe-paths': 
	mkpatch_add ../foo >patch &&
	git apply --unsafe-paths patch &&
	test_path_is_file ../foo

ok 3 - can create file containing .. with --unsafe-paths

expecting success of 4139.4 'cannot create file containing .. (index)': 
	mkpatch_add ../foo >patch &&
	test_must_fail git apply --index patch &&
	test_path_is_missing ../foo

error: invalid path '../foo'
ok 4 - cannot create file containing .. (index)

expecting success of 4139.5 'cannot create file containing .. with --unsafe-paths (index)': 
	mkpatch_add ../foo >patch &&
	test_must_fail git apply --index --unsafe-paths patch &&
	test_path_is_missing ../foo

error: invalid path '../foo'
ok 5 - cannot create file containing .. with --unsafe-paths (index)

expecting success of 4139.6 'cannot delete file containing ..': 
	mkpatch_del ../foo >patch &&
	test_must_fail git apply patch &&
	test_path_is_file ../foo

error: invalid path '../foo'
ok 6 - cannot delete file containing ..

expecting success of 4139.7 'can delete file containing .. with --unsafe-paths': 
	mkpatch_del ../foo >patch &&
	git apply --unsafe-paths patch &&
	test_path_is_missing ../foo

ok 7 - can delete file containing .. with --unsafe-paths

expecting success of 4139.8 'cannot delete file containing .. (index)': 
	mkpatch_del ../foo >patch &&
	test_must_fail git apply --index patch &&
	test_path_is_file ../foo

error: ../foo: does not exist in index
ok 8 - cannot delete file containing .. (index)

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4139.9 'symlink escape via ..': 
	{
		mkpatch_symlink tmp .. &&
		mkpatch_add tmp/foo ../foo
	} >patch &&
	test_must_fail git apply patch &&
	test_path_is_missing tmp &&
	test_path_is_missing ../foo

error: affected file 'tmp/foo' is beyond a symbolic link
ok 9 - symlink escape via ..

expecting success of 4139.10 'symlink escape via .. (index)': 
	{
		mkpatch_symlink tmp .. &&
		mkpatch_add tmp/foo ../foo
	} >patch &&
	test_must_fail git apply --index patch &&
	test_path_is_missing tmp &&
	test_path_is_missing ../foo

error: affected file 'tmp/foo' is beyond a symbolic link
ok 10 - symlink escape via .. (index)

expecting success of 4139.11 'symlink escape via absolute path': 
	{
		mkpatch_symlink tmp "$(pwd)" &&
		mkpatch_add tmp/foo ../foo
	} >patch &&
	test_must_fail git apply patch &&
	test_path_is_missing tmp &&
	test_path_is_missing ../foo

error: affected file 'tmp/foo' is beyond a symbolic link
ok 11 - symlink escape via absolute path

expecting success of 4139.12 'symlink escape via absolute path (index)': 
	{
		mkpatch_symlink tmp "$(pwd)" &&
		mkpatch_add tmp/foo ../foo
	} >patch &&
	test_must_fail git apply --index patch &&
	test_path_is_missing tmp &&
	test_path_is_missing ../foo

error: affected file 'tmp/foo' is beyond a symbolic link
ok 12 - symlink escape via absolute path (index)

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4140-apply-ita.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4140-apply-ita/.git/
expecting success of 4140.1 'setup': 
	test_write_lines 1 2 3 4 5 >blueprint &&

	cat blueprint >test-file &&
	git add -N test-file &&
	git diff >creation-patch &&
	grep "new file mode 100644" creation-patch &&

	rm -f test-file &&
	git diff >deletion-patch &&
	grep "deleted file mode 100644" deletion-patch

new file mode 100644
deleted file mode 100644
ok 1 - setup

expecting success of 4140.2 'apply creation patch to ita path (--cached)': 
	git rm -f test-file &&
	cat blueprint >test-file &&
	git add -N test-file &&

	git apply --cached creation-patch &&
	git cat-file blob :test-file >actual &&
	test_cmp blueprint actual

rm 'test-file'
ok 2 - apply creation patch to ita path (--cached)

expecting success of 4140.3 'apply creation patch to ita path (--index)': 
	git rm -f test-file &&
	cat blueprint >test-file &&
	git add -N test-file &&
	rm -f test-file &&

	test_must_fail git apply --index creation-patch

rm 'test-file'
error: test-file: does not match index
ok 3 - apply creation patch to ita path (--index)

expecting success of 4140.4 'apply deletion patch to ita path (--cached)': 
	git rm -f test-file &&
	cat blueprint >test-file &&
	git add -N test-file &&

	git apply --cached deletion-patch &&
	test_must_fail git ls-files --stage --error-unmatch test-file

rm 'test-file'
error: pathspec 'test-file' did not match any file(s) known to git
Did you forget to 'git add'?
ok 4 - apply deletion patch to ita path (--cached)

expecting success of 4140.5 'apply deletion patch to ita path (--index)': 
	cat blueprint >test-file &&
	git add -N test-file &&

	test_must_fail git apply --index deletion-patch &&
	git ls-files --stage --error-unmatch test-file

error: test-file: does not match index
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	test-file
ok 5 - apply deletion patch to ita path (--index)

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4141-apply-too-large.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4141-apply-too-large/.git/
checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
ok 1 # skip git apply rejects patches that are too large (missing EXPENSIVE)

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4124-apply-ws-rule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4124-apply-ws-rule/.git/
expecting success of 4124.1 'setup': 

	>file &&
	git add file &&
	prepare_test_file >file &&
	git diff-files -p >patch &&
	>target &&
	git add target


ok 1 - setup

expecting success of 4124.2 'whitespace=nowarn, default rule': 

	apply_patch --whitespace=nowarn &&
	test_cmp file target


ok 2 - whitespace=nowarn, default rule

expecting success of 4124.3 'whitespace=warn, default rule': 

	apply_patch --whitespace=warn &&
	test_cmp file target


<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 5 whitespace errors
warning: 10 lines add whitespace errors.
ok 3 - whitespace=warn, default rule

expecting success of 4124.4 'whitespace=error-all, default rule': 

	apply_patch ! --whitespace=error-all &&
	test_must_be_empty target


<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
<stdin>:15: space before tab in indent.
        	 Eight SP, a HT and a SP (@#%).
<stdin>:17: space before tab in indent.
               	Fifteen SP and a HT (@#%).
<stdin>:19: space before tab in indent.
                	Sixteen SP and a HT (@#%=).
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
error: 10 lines add whitespace errors.
ok 4 - whitespace=error-all, default rule

expecting success of 4124.5 'whitespace=error-all, no rule': 

	git config core.whitespace -trailing,-space-before,-indent &&
	apply_patch --whitespace=error-all &&
	test_cmp file target


ok 5 - whitespace=error-all, no rule

expecting success of 4124.6 'whitespace=error-all, no rule (attribute)': 

	git config --unset core.whitespace &&
	echo "target -whitespace" >.gitattributes &&
	apply_patch --whitespace=error-all &&
	test_cmp file target


ok 6 - whitespace=error-all, no rule (attribute)

expecting success of 4124.7 'spaces inserted by tab-in-indent': 

	git config core.whitespace -trailing,-space,-indent,tab &&
	rm -f .gitattributes &&
	test_fix % &&
	sed -e "s/_/ /g" -e "s/>/	/" <<-\EOF >expect &&
		An_SP in an ordinary line>and a HT.
		________A HT (%).
		________A SP and a HT (@%).
		_________A SP, a HT and a SP (@%).
		_______Seven SP.
		________Eight SP (#).
		________Seven SP and a HT (@%).
		________________Eight SP and a HT (@#%).
		_________Seven SP, a HT and a SP (@%).
		_________________Eight SP, a HT and a SP (@#%).
		_______________Fifteen SP (#).
		________________Fifteen SP and a HT (@#%).
		________________Sixteen SP (#=).
		________________________Sixteen SP and a HT (@#%=).
		_____a__Five SP, a non WS, two SP.
		A line with a (!) trailing SP_
		A line with a (!) trailing HT>
	EOF
	test_cmp expect target


<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 7 - spaces inserted by tab-in-indent

expecting success of 4124.8 'rule=-trailing,-space,-indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
ok 8 - rule=-trailing,-space,-indent,-tab

expecting success of 4124.9 'rule=-trailing,-space,-indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
ok 9 - rule=-trailing,-space,-indent,-tab,tabwidth=16

expecting success of 4124.10 'rule=-trailing,-space,-indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
ok 10 - rule=-trailing,-space,-indent,-tab (attributes)

expecting success of 4124.11 'rule=-trailing,-space,-indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
ok 11 - rule=-trailing,-space,-indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.12 'rule=-trailing,-space,-indent,tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 12 - rule=-trailing,-space,-indent,tab

expecting success of 4124.13 'rule=-trailing,-space,-indent,tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 13 - rule=-trailing,-space,-indent,tab,tabwidth=16

expecting success of 4124.14 'rule=-trailing,-space,-indent,tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 14 - rule=-trailing,-space,-indent,tab (attributes)

expecting success of 4124.15 'rule=-trailing,-space,-indent,tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 15 - rule=-trailing,-space,-indent,tab,tabwidth=16 (attributes)

expecting success of 4124.16 'rule=-trailing,-space,indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:16: indent with spaces.
               Fifteen SP (#).
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
warning: 7 lines applied after fixing whitespace errors.
ok 16 - rule=-trailing,-space,indent,-tab

expecting success of 4124.17 'rule=-trailing,-space,indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
warning: 2 lines applied after fixing whitespace errors.
ok 17 - rule=-trailing,-space,indent,-tab,tabwidth=16

expecting success of 4124.18 'rule=-trailing,-space,indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:16: indent with spaces.
               Fifteen SP (#).
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
warning: 7 lines applied after fixing whitespace errors.
ok 18 - rule=-trailing,-space,indent,-tab (attributes)

expecting success of 4124.19 'rule=-trailing,-space,indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
warning: 2 lines applied after fixing whitespace errors.
ok 19 - rule=-trailing,-space,indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.20 'rule=-trailing,space,-indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 3 whitespace errors
warning: 8 lines applied after fixing whitespace errors.
ok 20 - rule=-trailing,space,-indent,-tab

expecting success of 4124.21 'rule=-trailing,space,-indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 3 whitespace errors
warning: 8 lines applied after fixing whitespace errors.
ok 21 - rule=-trailing,space,-indent,-tab,tabwidth=16

expecting success of 4124.22 'rule=-trailing,space,-indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 3 whitespace errors
warning: 8 lines applied after fixing whitespace errors.
ok 22 - rule=-trailing,space,-indent,-tab (attributes)

expecting success of 4124.23 'rule=-trailing,space,-indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 3 whitespace errors
warning: 8 lines applied after fixing whitespace errors.
ok 23 - rule=-trailing,space,-indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.24 'rule=-trailing,space,-indent,tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 24 - rule=-trailing,space,-indent,tab

expecting success of 4124.25 'rule=-trailing,space,-indent,tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 25 - rule=-trailing,space,-indent,tab,tabwidth=16

expecting success of 4124.26 'rule=-trailing,space,-indent,tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 26 - rule=-trailing,space,-indent,tab (attributes)

expecting success of 4124.27 'rule=-trailing,space,-indent,tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 27 - rule=-trailing,space,-indent,tab,tabwidth=16 (attributes)

expecting success of 4124.28 'rule=-trailing,space,indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 28 - rule=-trailing,space,indent,-tab

expecting success of 4124.29 'rule=-trailing,space,indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 29 - rule=-trailing,space,indent,-tab,tabwidth=16

expecting success of 4124.30 'rule=-trailing,space,indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 30 - rule=-trailing,space,indent,-tab (attributes)

expecting success of 4124.31 'rule=-trailing,space,indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 4 whitespace errors
warning: 9 lines applied after fixing whitespace errors.
ok 31 - rule=-trailing,space,indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.32 'rule=trailing,-space,-indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 2 lines applied after fixing whitespace errors.
ok 32 - rule=trailing,-space,-indent,-tab

expecting success of 4124.33 'rule=trailing,-space,-indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 2 lines applied after fixing whitespace errors.
ok 33 - rule=trailing,-space,-indent,-tab,tabwidth=16

expecting success of 4124.34 'rule=trailing,-space,-indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 2 lines applied after fixing whitespace errors.
ok 34 - rule=trailing,-space,-indent,-tab (attributes)

expecting success of 4124.35 'rule=trailing,-space,-indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 2 lines applied after fixing whitespace errors.
ok 35 - rule=trailing,-space,-indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.36 'rule=trailing,-space,-indent,tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 36 - rule=trailing,-space,-indent,tab

expecting success of 4124.37 'rule=trailing,-space,-indent,tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 37 - rule=trailing,-space,-indent,tab,tabwidth=16

expecting success of 4124.38 'rule=trailing,-space,-indent,tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 38 - rule=trailing,-space,-indent,tab (attributes)

expecting success of 4124.39 'rule=trailing,-space,-indent,tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: tab in indent.
 	A SP and a HT (@%).
<stdin>:9: tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 39 - rule=trailing,-space,-indent,tab,tabwidth=16 (attributes)

expecting success of 4124.40 'rule=trailing,-space,indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:16: indent with spaces.
               Fifteen SP (#).
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 9 lines applied after fixing whitespace errors.
ok 40 - rule=trailing,-space,indent,-tab

expecting success of 4124.41 'rule=trailing,-space,indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 4 lines applied after fixing whitespace errors.
ok 41 - rule=trailing,-space,indent,-tab,tabwidth=16

expecting success of 4124.42 'rule=trailing,-space,indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:16: indent with spaces.
               Fifteen SP (#).
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 9 lines applied after fixing whitespace errors.
ok 42 - rule=trailing,-space,indent,-tab (attributes)

expecting success of 4124.43 'rule=trailing,-space,indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:18: indent with spaces.
                Sixteen SP (#=).
<stdin>:21: trailing whitespace.
A line with a (!) trailing SP 
<stdin>:22: trailing whitespace.
A line with a (!) trailing HT	
warning: 4 lines applied after fixing whitespace errors.
ok 43 - rule=trailing,-space,indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.44 'rule=trailing,space,-indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 5 whitespace errors
warning: 10 lines applied after fixing whitespace errors.
ok 44 - rule=trailing,space,-indent,-tab

expecting success of 4124.45 'rule=trailing,space,-indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 5 whitespace errors
warning: 10 lines applied after fixing whitespace errors.
ok 45 - rule=trailing,space,-indent,-tab,tabwidth=16

expecting success of 4124.46 'rule=trailing,space,-indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 5 whitespace errors
warning: 10 lines applied after fixing whitespace errors.
ok 46 - rule=trailing,space,-indent,-tab (attributes)

expecting success of 4124.47 'rule=trailing,space,-indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 5 whitespace errors
warning: 10 lines applied after fixing whitespace errors.
ok 47 - rule=trailing,space,-indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.48 'rule=trailing,space,-indent,tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 48 - rule=trailing,space,-indent,tab

expecting success of 4124.49 'rule=trailing,space,-indent,tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 49 - rule=trailing,space,-indent,tab,tabwidth=16

expecting success of 4124.50 'rule=trailing,space,-indent,tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 50 - rule=trailing,space,-indent,tab (attributes)

expecting success of 4124.51 'rule=trailing,space,-indent,tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:7: tab in indent.
	A HT (%).
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 51 - rule=trailing,space,-indent,tab,tabwidth=16 (attributes)

expecting success of 4124.52 'rule=trailing,space,indent,-tab': 
					git config core.whitespace "$rule" &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 8 whitespace errors
warning: 13 lines applied after fixing whitespace errors.
ok 52 - rule=trailing,space,indent,-tab

expecting success of 4124.53 'rule=trailing,space,indent,-tab,tabwidth=16': 
					git config core.whitespace "$rule,tabwidth=16" &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 53 - rule=trailing,space,indent,-tab,tabwidth=16

expecting success of 4124.54 'rule=trailing,space,indent,-tab (attributes)': 
					git config --unset core.whitespace &&
					echo "target whitespace=$rule" >.gitattributes &&
					test_fix "$tt$ts$ti$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:11: indent with spaces.
        Eight SP (#).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
warning: squelched 8 whitespace errors
warning: 13 lines applied after fixing whitespace errors.
ok 54 - rule=trailing,space,indent,-tab (attributes)

expecting success of 4124.55 'rule=trailing,space,indent,-tab,tabwidth=16 (attributes)': 
					echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
					test_fix "$tt$ts$ti16$th"
				
<stdin>:8: space before tab in indent.
 	A SP and a HT (@%).
<stdin>:9: space before tab in indent.
 	 A SP, a HT and a SP (@%).
<stdin>:12: space before tab in indent.
       	Seven SP and a HT (@%).
<stdin>:13: space before tab in indent.
        	Eight SP and a HT (@#%).
<stdin>:14: space before tab in indent.
       	 Seven SP, a HT and a SP (@%).
warning: squelched 6 whitespace errors
warning: 11 lines applied after fixing whitespace errors.
ok 55 - rule=trailing,space,indent,-tab,tabwidth=16 (attributes)

expecting success of 4124.56 'trailing whitespace & no newline at the end of file': 
	>target &&
	create_patch >patch-file &&
	git apply --whitespace=fix patch-file &&
	grep "newline$" target &&
	grep "^$" target

patch-file:8: trailing whitespace.
A line with trailing whitespace and no newline 
warning: 1 line applied after fixing whitespace errors.
A line with trailing whitespace and no newline

ok 56 - trailing whitespace & no newline at the end of file

expecting success of 4124.57 'blank at EOF with --whitespace=fix (1)': 
	test_might_fail git config --unset core.whitespace &&
	rm -f .gitattributes &&

	test_write_lines a b c >one &&
	git add one &&
	test_write_lines a b c >expect &&
	{ cat expect && echo; } >one &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=fix patch &&
	test_cmp expect one

Updated 1 path from the index
patch:9: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
ok 57 - blank at EOF with --whitespace=fix (1)

expecting success of 4124.58 'blank at EOF with --whitespace=fix (2)': 
	test_write_lines a b c >one &&
	git add one &&
	test_write_lines a b >expect &&
	{ cat expect && test_write_lines "" ""; } >one &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=fix patch &&
	test_cmp expect one

Updated 1 path from the index
patch:9: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
ok 58 - blank at EOF with --whitespace=fix (2)

expecting success of 4124.59 'blank at EOF with --whitespace=fix (3)': 
	test_write_lines a b "" >one &&
	git add one &&
	test_write_lines a c "" >expect &&
	{ cat expect && test_write_lines "" ""; } >one &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=fix patch &&
	test_cmp expect one

Updated 1 path from the index
patch:9: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
ok 59 - blank at EOF with --whitespace=fix (3)

expecting success of 4124.60 'blank at end of hunk, not at EOF with --whitespace=fix': 
	test_write_lines a b "" "" "" "" "" d >one &&
	git add one &&
	test_write_lines a b "" "" "" "" "" "" d >expect &&
	cp expect one &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=fix patch &&
	test_cmp expect one

Updated 1 path from the index
ok 60 - blank at end of hunk, not at EOF with --whitespace=fix

expecting success of 4124.61 'blank at EOF with --whitespace=warn': 
	test_write_lines a b c >one &&
	git add one &&
	echo >>one &&
	cat one >expect &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=warn patch 2>error &&
	test_cmp expect one &&
	grep "new blank line at EOF" error

Updated 1 path from the index
patch:9: new blank line at EOF.
ok 61 - blank at EOF with --whitespace=warn

expecting success of 4124.62 'blank at EOF with --whitespace=error': 
	test_write_lines a b c >one &&
	git add one &&
	cat one >expect &&
	echo >>one &&
	git diff -- one >patch &&

	git checkout one &&
	test_must_fail git apply --whitespace=error patch 2>error &&
	test_cmp expect one &&
	grep "new blank line at EOF" error

Updated 1 path from the index
patch:9: new blank line at EOF.
ok 62 - blank at EOF with --whitespace=error

expecting success of 4124.63 'blank but not empty at EOF': 
	test_write_lines a b c >one &&
	git add one &&
	echo "   " >>one &&
	cat one >expect &&
	git diff -- one >patch &&

	git checkout one &&
	git apply --whitespace=warn patch 2>error &&
	test_cmp expect one &&
	grep "new blank line at EOF" error

Updated 1 path from the index
patch:9: new blank line at EOF.
ok 63 - blank but not empty at EOF

expecting success of 4124.64 'applying beyond EOF requires one non-blank context line': 
	test_write_lines "" "" "" "" >one &&
	git add one &&
	echo b >>one &&
	git diff -- one >patch &&

	git checkout one &&
	test_write_lines a "" >one &&
	cp one expect &&
	test_must_fail git apply --whitespace=fix patch &&
	test_cmp expect one &&
	test_must_fail git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

Updated 1 path from the index
error: patch failed: one:2
error: one: patch does not apply
error: patch failed: one:2
error: one: patch does not apply
ok 64 - applying beyond EOF requires one non-blank context line

expecting success of 4124.65 'tons of blanks at EOF should not apply': 
	for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
		test_write_lines "" "" "" "" || return 1
	done >one &&
	git add one &&
	echo a >>one &&
	git diff -- one >patch &&

	>one &&
	test_must_fail git apply --whitespace=fix patch &&
	test_must_fail git apply --ignore-space-change --whitespace=fix patch

error: patch failed: one:62
error: one: patch does not apply
error: patch failed: one:62
error: one: patch does not apply
ok 65 - tons of blanks at EOF should not apply

expecting success of 4124.66 'missing blank line at end with --whitespace=fix': 
	echo a >one &&
	echo >>one &&
	git add one &&
	echo b >>one &&
	cp one expect &&
	git diff -- one >patch &&
	echo a >one &&
	cp one saved-one &&
	test_must_fail git apply patch &&
	git apply --whitespace=fix patch &&
	test_cmp expect one &&
	mv saved-one one &&
	git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

error: patch failed: one:1
error: one: patch does not apply
ok 66 - missing blank line at end with --whitespace=fix

expecting success of 4124.67 'two missing blank lines at end with --whitespace=fix': 
	test_write_lines a "" b c >one &&
	cp one no-blank-lines &&
	test_write_lines "" "" >>one &&
	git add one &&
	echo d >>one &&
	cp one expect &&
	echo >>one &&
	git diff -- one >patch &&
	cp no-blank-lines one &&
	test_must_fail git apply patch &&
	git apply --whitespace=fix patch &&
	test_cmp expect one &&
	mv no-blank-lines one &&
	test_must_fail git apply patch &&
	git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

error: patch failed: one:4
error: one: patch does not apply
patch:10: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
error: patch failed: one:4
error: one: patch does not apply
patch:10: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
ok 67 - two missing blank lines at end with --whitespace=fix

expecting success of 4124.68 'missing blank line at end, insert before end, --whitespace=fix': 
	test_write_lines a "" >one &&
	git add one &&
	test_write_lines b a "" >one &&
	cp one expect &&
	git diff -- one >patch &&
	echo a >one &&
	test_must_fail git apply patch &&
	git apply --whitespace=fix patch &&
	test_cmp expect one

error: patch failed: one:1
error: one: patch does not apply
ok 68 - missing blank line at end, insert before end, --whitespace=fix

expecting success of 4124.69 'shrink file with tons of missing blanks at end of file': 
	test_write_lines a b c >one &&
	cp one no-blank-lines &&
	for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
		test_write_lines "" "" "" "" || return 1
	done >>one &&
	git add one &&
	echo a >one &&
	cp one expect &&
	git diff -- one >patch &&
	cp no-blank-lines one &&
	test_must_fail git apply patch &&
	git apply --whitespace=fix patch &&
	test_cmp expect one &&
	mv no-blank-lines one &&
	git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

error: patch failed: one:1
error: one: patch does not apply
ok 69 - shrink file with tons of missing blanks at end of file

expecting success of 4124.70 'missing blanks at EOF must only match blank lines': 
	test_write_lines a b >one &&
	git add one &&
	test_write_lines c d >>one &&
	git diff -- one >patch &&

	echo a >one &&
	test_must_fail git apply patch &&
	test_must_fail git apply --whitespace=fix patch &&
	test_must_fail git apply --ignore-space-change --whitespace=fix patch

error: patch failed: one:1
error: one: patch does not apply
error: patch failed: one:1
error: one: patch does not apply
error: patch failed: one:1
error: one: patch does not apply
ok 70 - missing blanks at EOF must only match blank lines

expecting success of 4124.71 'missing blank line should match context line with spaces': 
	git add one &&
	echo d >>one &&
	git diff -- one >patch &&
	test_write_lines a b c >one &&
	cp one expect &&
	test_write_lines "" d >>expect &&
	git add one &&

	git apply --whitespace=fix patch &&
	test_cmp expect one

patch:8: trailing whitespace.
		      
warning: 1 line adds whitespace errors.
ok 71 - missing blank line should match context line with spaces

expecting success of 4124.72 'same, but with the --ignore-space-option': 
	git add one &&
	echo d >>one &&
	cp one expect &&
	git diff -- one >patch &&
	test_write_lines a b c >one &&
	git add one &&

	git checkout-index -f one &&
	git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

patch:8: trailing whitespace.
		      
warning: 1 line adds whitespace errors.
ok 72 - same, but with the --ignore-space-option

expecting success of 4124.73 'same, but with CR-LF line endings && cr-at-eol set': 
	git config core.whitespace cr-at-eol &&
	printf "a\r\n" >one &&
	printf "b\r\n" >>one &&
	printf "c\r\n" >>one &&
	cp one save-one &&
	printf "                 \r\n" >>one &&
	git add one &&
	printf "d\r\n" >>one &&
	cp one expect &&
	git diff -- one >patch &&
	mv save-one one &&

	git apply --ignore-space-change --whitespace=fix patch &&
	test_cmp expect one

patch:8: trailing whitespace.
                 
warning: 1 line adds whitespace errors.
ok 73 - same, but with CR-LF line endings && cr-at-eol set

expecting success of 4124.74 'CR-LF line endings && add line && text=auto': 
	git config --unset core.whitespace &&
	printf "a\r\n" >one &&
	cp one save-one &&
	git add one &&
	printf "b\r\n" >>one &&
	cp one expect &&
	git diff -- one >patch &&
	mv save-one one &&
	echo "one text=auto" >.gitattributes &&
	git apply patch &&
	test_cmp expect one

ok 74 - CR-LF line endings && add line && text=auto

expecting success of 4124.75 'CR-LF line endings && change line && text=auto': 
	printf "a\r\n" >one &&
	cp one save-one &&
	git add one &&
	printf "b\r\n" >one &&
	cp one expect &&
	git diff -- one >patch &&
	mv save-one one &&
	echo "one text=auto" >.gitattributes &&
	git apply patch &&
	test_cmp expect one

ok 75 - CR-LF line endings && change line && text=auto

expecting success of 4124.76 'LF in repo, CRLF in worktree && change line && text=auto': 
	printf "a\n" >one &&
	git add one &&
	printf "b\r\n" >one &&
	git diff -- one >patch &&
	printf "a\r\n" >one &&
	echo "one text=auto" >.gitattributes &&
	git -c core.eol=CRLF apply patch &&
	printf "b\r\n" >expect &&
	test_cmp expect one

warning: in the working copy of 'one', CRLF will be replaced by LF the next time Git touches it
ok 76 - LF in repo, CRLF in worktree && change line && text=auto

expecting success of 4124.77 'whitespace=fix to expand': 
	qz_to_tab_space >preimage <<-\EOF &&
	QQa
	QQb
	QQc
	ZZZZZZZZZZZZZZZZd
	QQe
	QQf
	QQg
	EOF
	qz_to_tab_space >patch <<-\EOF &&
	diff --git a/preimage b/preimage
	--- a/preimage
	+++ b/preimage
	@@ -1,7 +1,6 @@
	 QQa
	 QQb
	 QQc
	-QQd
	 QQe
	 QQf
	 QQg
	EOF
	git -c core.whitespace=tab-in-indent apply --whitespace=fix patch

patch:5: tab in indent.
		a
patch:6: tab in indent.
		b
patch:7: tab in indent.
		c
patch:9: tab in indent.
		e
patch:10: tab in indent.
		f
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
ok 77 - whitespace=fix to expand

expecting success of 4124.78 'whitespace check skipped for excluded paths': 
	git config core.whitespace blank-at-eol &&
	>used &&
	>unused &&
	git add used unused &&
	echo "used" >used &&
	echo "unused " >unused &&
	git diff-files -p used unused >patch &&
	git apply --include=used --stat --whitespace=error <patch

 used |    1 +
 1 file changed, 1 insertion(+)
ok 78 - whitespace check skipped for excluded paths

# passed all 78 test(s)
1..78
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4152-am-subjects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4152-am-subjects/.git/
expecting success of 4152.1 'setup baseline commit': 
	test_commit baseline file

[master (root-commit) 2f64c43] baseline
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup baseline commit

expecting success of 4152.2 'create patches with short subject': 
		git reset --hard baseline &&
		echo $type >file &&
		git commit -a -m "$subject" &&
		git format-patch -1 --stdout >$type.patch &&
		git format-patch -1 --stdout -k >$type-k.patch
	
HEAD is now at 2f64c43 baseline
[master 5d59063] short subject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - create patches with short subject

expecting success of 4152.3 'create patches with long subject': 
		git reset --hard baseline &&
		echo $type >file &&
		git commit -a -m "$subject" &&
		git format-patch -1 --stdout >$type.patch &&
		git format-patch -1 --stdout -k >$type-k.patch
	
HEAD is now at 2f64c43 baseline
[master 512ba33] this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - create patches with long subject

expecting success of 4152.4 'create patches with multiline subject': 
		git reset --hard baseline &&
		echo $type >file &&
		git commit -a -m "$subject" &&
		git format-patch -1 --stdout >$type.patch &&
		git format-patch -1 --stdout -k >$type-k.patch
	
HEAD is now at 2f64c43 baseline
[master 230e818] this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - create patches with multiline subject

expecting success of 4152.5 'short subject preserved (format-patch | am)': 
	check_subject short

HEAD is now at 2f64c43 baseline
Applying: short subject
ok 5 - short subject preserved (format-patch | am)

expecting success of 4152.6 'short subject preserved (format-patch -k | am)': 
	check_subject short-k

HEAD is now at 2f64c43 baseline
Applying: short subject
ok 6 - short subject preserved (format-patch -k | am)

expecting success of 4152.7 'short subject preserved (format-patch -k | am -k)': 
	check_subject short-k -k

HEAD is now at 2f64c43 baseline
Applying: short subject
ok 7 - short subject preserved (format-patch -k | am -k)

expecting success of 4152.8 'long subject preserved (format-patch | am)': 
	check_subject long

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
ok 8 - long subject preserved (format-patch | am)

expecting success of 4152.9 'long subject preserved (format-patch -k | am)': 
	check_subject long-k

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
ok 9 - long subject preserved (format-patch -k | am)

expecting success of 4152.10 'long subject preserved (format-patch -k | am -k)': 
	check_subject long-k -k

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
ok 10 - long subject preserved (format-patch -k | am -k)

expecting success of 4152.11 'multiline subject unwrapped (format-patch | am)': 
	check_subject multiline

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
ok 11 - multiline subject unwrapped (format-patch | am)

expecting success of 4152.12 'multiline subject unwrapped (format-patch -k | am)': 
	check_subject multiline-k

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed to require wrapping via format-patch if it is all going to appear on a single line
ok 12 - multiline subject unwrapped (format-patch -k | am)

expecting success of 4152.13 'multiline subject preserved (format-patch -k | am -k)': 
	check_subject multiline-k -k

HEAD is now at 2f64c43 baseline
Applying: this is a long subject that is virtually guaranteed
ok 13 - multiline subject preserved (format-patch -k | am -k)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4151-am-abort.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4151-am-abort/.git/
expecting success of 4151.1 'setup': 
	test_write_lines a b c d e f g >file-1 &&
	cp file-1 file-2 &&
	test_tick &&
	git add file-1 file-2 &&
	git commit -m initial &&
	git tag initial &&
	git format-patch --stdout --root initial >initial.patch &&
	for i in 2 3 4 5 6
	do
		echo $i >>file-1 &&
		echo $i >otherfile-$i &&
		git add otherfile-$i &&
		test_tick &&
		git commit -a -m $i || return 1
	done &&
	git branch changes &&
	git format-patch --no-numbered initial &&
	git checkout -b conflicting initial &&
	echo different >>file-1 &&
	echo whatever >new-file &&
	git add file-1 new-file &&
	git commit -m different &&
	git checkout -b side initial &&
	echo local change >file-2-expect

[master (root-commit) 1732241] initial
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 file-1
 create mode 100644 file-2
[master a485f10] 2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 otherfile-2
[master b72e0d7] 3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 otherfile-3
[master f1dbda2] 4
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 otherfile-4
[master 73a4960] 5
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 otherfile-5
[master 87a053c] 6
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 otherfile-6
0001-2.patch
0002-3.patch
0003-4.patch
0004-5.patch
0005-6.patch
Switched to a new branch 'conflicting'
[conflicting c626628] different
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 new-file
Switched to a new branch 'side'
ok 1 - setup

expecting success of 4151.2 'am stops at a patch that does not apply': 

		git reset --hard initial &&
		cp file-2-expect file-2 &&

		test_must_fail git am$with3 000[1245]-*.patch &&
		git log --pretty=tformat:%s >actual &&
		test_write_lines 3 2 initial >expect &&
		test_cmp expect actual
	
HEAD is now at 1732241 initial
error: patch failed: file-1:8
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 2
Applying: 3
Applying: 5
Patch failed at 0003 5
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 2 - am stops at a patch that does not apply

expecting success of 4151.3 'am --skip continue after failed am': 
		test_must_fail git am$with3 --skip >output &&
		test_i18ngrep "^Applying: 6$" output &&
		test_cmp file-2-expect file-2 &&
		test ! -f .git/MERGE_RR
	
error: patch failed: file-1:9
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 6
ok 3 - am --skip continue after failed am

expecting success of 4151.4 'am --abort goes back after failed am': 
		git am --abort &&
		git rev-parse HEAD >actual &&
		git rev-parse initial >expect &&
		test_cmp expect actual &&
		test_cmp file-2-expect file-2 &&
		git diff-index --exit-code --cached HEAD &&
		test ! -f .git/MERGE_RR
	
ok 4 - am --abort goes back after failed am

expecting success of 4151.5 'am -3 stops at a patch that does not apply': 

		git reset --hard initial &&
		cp file-2-expect file-2 &&

		test_must_fail git am$with3 000[1245]-*.patch &&
		git log --pretty=tformat:%s >actual &&
		test_write_lines 3 2 initial >expect &&
		test_cmp expect actual
	
HEAD is now at 1732241 initial
Applying: 2
Applying: 3
Applying: 5
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
62dd7f8 3
virtual 5
found 1 common ancestor:
virtual 2e4b8a989c579cac9d3cc1897320a3e27805d080
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0003 5
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 5 - am -3 stops at a patch that does not apply

expecting success of 4151.6 'am -3 --skip continue after failed am -3': 
		test_must_fail git am$with3 --skip >output &&
		test_i18ngrep "^Applying: 6$" output &&
		test_cmp file-2-expect file-2 &&
		test ! -f .git/MERGE_RR
	
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 6
ok 6 - am -3 --skip continue after failed am -3

expecting success of 4151.7 'am --abort goes back after failed am -3': 
		git am --abort &&
		git rev-parse HEAD >actual &&
		git rev-parse initial >expect &&
		test_cmp expect actual &&
		test_cmp file-2-expect file-2 &&
		git diff-index --exit-code --cached HEAD &&
		test ! -f .git/MERGE_RR
	
ok 7 - am --abort goes back after failed am -3

expecting success of 4151.8 'am -3 --skip removes otherfile-4': 
	git reset --hard initial &&
	test_must_fail git am -3 0003-*.patch &&
	test 3 -eq $(git ls-files -u | wc -l) &&
	test 4 = "$(cat otherfile-4)" &&
	git am --skip &&
	test_cmp_rev initial HEAD &&
	test -z "$(git ls-files -u)" &&
	test_path_is_missing otherfile-4

HEAD is now at 1732241 initial
Applying: 4
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
1732241 initial
virtual 4
found 1 common ancestor:
virtual ca28a003e7272ffcb030f00a3e373a07e49ce912
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 4
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 8 - am -3 --skip removes otherfile-4

expecting success of 4151.9 'am -3 --abort removes otherfile-4': 
	git reset --hard initial &&
	test_must_fail git am -3 0003-*.patch &&
	test 3 -eq $(git ls-files -u | wc -l) &&
	test 4 = "$(cat otherfile-4)" &&
	git am --abort &&
	test_cmp_rev initial HEAD &&
	test -z "$(git ls-files -u)" &&
	test_path_is_missing otherfile-4

HEAD is now at 1732241 initial
Applying: 4
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
1732241 initial
virtual 4
found 1 common ancestor:
virtual ca28a003e7272ffcb030f00a3e373a07e49ce912
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 4
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 9 - am -3 --abort removes otherfile-4

expecting success of 4151.10 'am --abort will keep the local commits intact': 
	test_must_fail git am 0004-*.patch &&
	test_commit unrelated &&
	git rev-parse HEAD >expect &&
	git am --abort &&
	git rev-parse HEAD >actual &&
	test_cmp expect actual

error: patch failed: file-1:8
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 5
Patch failed at 0001 5
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
[side f386b22] unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated.t
warning: You seem to have moved HEAD since the last 'am' failure.
Not rewinding to ORIG_HEAD
ok 10 - am --abort will keep the local commits intact

expecting success of 4151.11 'am --abort will keep dirty index intact': 
	git reset --hard initial &&
	echo dirtyfile >dirtyfile &&
	cp dirtyfile dirtyfile.expected &&
	git add dirtyfile &&
	test_must_fail git am 0001-*.patch &&
	test_cmp_rev initial HEAD &&
	test_path_is_file dirtyfile &&
	test_cmp dirtyfile.expected dirtyfile &&
	git am --abort &&
	test_cmp_rev initial HEAD &&
	test_path_is_file dirtyfile &&
	test_cmp dirtyfile.expected dirtyfile

HEAD is now at 1732241 initial
fatal: Dirty index: cannot apply patches (dirty: dirtyfile)
ok 11 - am --abort will keep dirty index intact

expecting success of 4151.12 'am -3 stops on conflict on unborn branch': 
	git checkout -f --orphan orphan &&
	git reset &&
	rm -f otherfile-4 &&
	test_must_fail git am -3 0003-*.patch &&
	test 2 -eq $(git ls-files -u | wc -l) &&
	test 4 = "$(cat otherfile-4)"

Switched to a new branch 'orphan'
Applying: 4
Using index info to reconstruct a base tree...
A	file-1
Falling back to patching base and 3-way merge...
Merging:
virtual HEAD
virtual 4
found 1 common ancestor:
virtual ca28a003e7272ffcb030f00a3e373a07e49ce912
CONFLICT (modify/delete): file-1 deleted in HEAD and modified in 4. Version 4 of file-1 left in tree at file-1~4.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 4
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 12 - am -3 stops on conflict on unborn branch

expecting success of 4151.13 'am -3 --skip clears index on unborn branch': 
	test_path_is_dir .git/rebase-apply &&
	echo tmpfile >tmpfile &&
	git add tmpfile &&
	git am --skip &&
	test -z "$(git ls-files)" &&
	test_path_is_missing otherfile-4 &&
	test_path_is_missing tmpfile

ok 13 - am -3 --skip clears index on unborn branch

expecting success of 4151.14 'am -3 --abort removes otherfile-4 on unborn branch': 
	git checkout -f --orphan orphan &&
	git reset &&
	rm -f otherfile-4 file-1 &&
	test_must_fail git am -3 0003-*.patch &&
	test 2 -eq $(git ls-files -u | wc -l) &&
	test 4 = "$(cat otherfile-4)" &&
	git am --abort &&
	test -z "$(git ls-files -u)" &&
	test_path_is_missing otherfile-4

Switched to a new branch 'orphan'
Applying: 4
Using index info to reconstruct a base tree...
A	file-1
Falling back to patching base and 3-way merge...
Merging:
virtual HEAD
virtual 4
found 1 common ancestor:
virtual ca28a003e7272ffcb030f00a3e373a07e49ce912
CONFLICT (modify/delete): file-1 deleted in HEAD and modified in 4. Version 4 of file-1 left in tree.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 4
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 14 - am -3 --abort removes otherfile-4 on unborn branch

expecting success of 4151.15 'am -3 --abort on unborn branch removes applied commits': 
	git checkout -f --orphan orphan &&
	git reset &&
	rm -f otherfile-4 otherfile-2 file-1 file-2 &&
	test_must_fail git am -3 initial.patch 0003-*.patch &&
	test 3 -eq $(git ls-files -u | wc -l) &&
	test 4 = "$(cat otherfile-4)" &&
	git am --abort &&
	test -z "$(git ls-files -u)" &&
	test_path_is_missing otherfile-4 &&
	test_path_is_missing file-1 &&
	test_path_is_missing file-2 &&
	test 0 -eq $(git log --oneline 2>/dev/null | wc -l) &&
	test refs/heads/orphan = "$(git symbolic-ref HEAD)"

Switched to a new branch 'orphan'
applying to an empty history
Applying: initial
Applying: 4
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
03bb45f initial
virtual 4
found 1 common ancestor:
virtual ca28a003e7272ffcb030f00a3e373a07e49ce912
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 4
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 15 - am -3 --abort on unborn branch removes applied commits

expecting success of 4151.16 'am --abort on unborn branch will keep local commits intact': 
	git checkout -f --orphan orphan &&
	git reset &&
	test_must_fail git am 0004-*.patch &&
	test_commit unrelated2 &&
	git rev-parse HEAD >expect &&
	git am --abort &&
	git rev-parse HEAD >actual &&
	test_cmp expect actual

Switched to a new branch 'orphan'
error: file-1: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 5
Patch failed at 0001 5
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
[orphan (root-commit) 823805c] unrelated2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated2.t
warning: You seem to have moved HEAD since the last 'am' failure.
Not rewinding to ORIG_HEAD
ok 16 - am --abort on unborn branch will keep local commits intact

expecting success of 4151.17 'am --skip leaves index stat info alone': 
	git checkout -f --orphan skip-stat-info &&
	git reset &&
	test_commit skip-should-be-untouched &&
	test-tool chmtime =0 skip-should-be-untouched.t &&
	git update-index --refresh &&
	git diff-files --exit-code --quiet &&
	test_must_fail git am 0001-*.patch &&
	git am --skip &&
	git diff-files --exit-code --quiet

Switched to a new branch 'skip-stat-info'
[skip-stat-info (root-commit) 2297a89] skip-should-be-untouched
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 skip-should-be-untouched.t
error: file-1: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 2
Patch failed at 0001 2
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 17 - am --skip leaves index stat info alone

expecting success of 4151.18 'am --abort leaves index stat info alone': 
	git checkout -f --orphan abort-stat-info &&
	git reset &&
	test_commit abort-should-be-untouched &&
	test-tool chmtime =0 abort-should-be-untouched.t &&
	git update-index --refresh &&
	git diff-files --exit-code --quiet &&
	test_must_fail git am 0001-*.patch &&
	git am --abort &&
	git diff-files --exit-code --quiet

Switched to a new branch 'abort-stat-info'
[abort-stat-info (root-commit) 3038985] abort-should-be-untouched
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abort-should-be-untouched.t
error: file-1: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: 2
Patch failed at 0001 2
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 18 - am --abort leaves index stat info alone

expecting success of 4151.19 'git am --abort return failed exit status when it fails': 
	test_when_finished "rm -rf file-2/ && git reset --hard && git am --abort" &&
	git checkout changes &&
	git format-patch -1 --stdout conflicting >changes.mbox &&
	test_must_fail git am --3way changes.mbox &&

	git rm file-2 &&
	mkdir file-2 &&
	echo precious >file-2/somefile &&
	test_must_fail git am --abort &&
	test_path_is_dir file-2/

Switched to branch 'changes'
Applying: different
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
87a053c 6
virtual different
found 1 common ancestor:
virtual 25da5ce2d7767dfb0047e4532ae9dd5a1a8d8eb6
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 different
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
rm 'file-2'
error: Updating 'file-2' would lose untracked files in it
fatal: failed to clean index
HEAD is now at 87a053c 6
ok 19 - git am --abort return failed exit status when it fails

expecting success of 4151.20 'git am --abort cleans relevant files': 
	git checkout changes &&
	git format-patch -1 --stdout conflicting >changes.mbox &&
	test_must_fail git am --3way changes.mbox &&

	test_path_is_file new-file &&
	echo further changes >>file-1 &&
	echo change other file >>file-2 &&

	# Abort, and expect the files touched by am to be reverted
	git am --abort &&

	test_path_is_missing new-file &&

	# Files not involved in am operation are left modified
	git diff --name-only changes >actual &&
	test_write_lines file-2 >expect &&
	test_cmp expect actual

Already on 'changes'
Applying: different
Using index info to reconstruct a base tree...
M	file-1
Falling back to patching base and 3-way merge...
Merging:
87a053c 6
virtual different
found 1 common ancestor:
virtual 25da5ce2d7767dfb0047e4532ae9dd5a1a8d8eb6
Auto-merging file-1
CONFLICT (content): Merge conflict in file-1
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 different
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 20 - git am --abort cleans relevant files

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4153-am-resume-override-opts.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4153-am-resume-override-opts/.git/
expecting success of 4153.1 'setup': 
	test_commit initial file &&
	test_commit first file &&

	git checkout initial &&
	git mv file file2 &&
	test_tick &&
	git commit -m renamed-file &&
	git tag renamed-file &&

	git checkout -b side initial &&
	test_commit side1 file &&
	test_commit side2 file &&

	format_patch side1 &&
	format_patch side2

[master (root-commit) b6d2089] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 3aaf771] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b6d2089 initial
[detached HEAD 5e7fd8e] renamed-file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => file2 (100%)
Previous HEAD position was 5e7fd8e renamed-file
Switched to a new branch 'side'
[side ccf21da] side1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[side 58bd40e] side2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 4153.2 '--3way overrides --no-3way': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout renamed-file &&

	# Applying side1 will fail as the file has been renamed.
	test_must_fail git am --no-3way side[12].eml &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev renamed-file HEAD &&
	test -z "$(git ls-files -u)" &&

	# Applying side1 with am --3way will succeed due to the threeway-merge.
	# Applying side2 will fail as --3way does not apply to it.
	test_must_fail test_terminal git am --3way </dev/zero &&
	test_path_is_dir .git/rebase-apply &&
	test side1 = "$(cat file2)"

HEAD is now at 58bd40e side2
Note: switching to 'renamed-file'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5e7fd8e renamed-file
error: file: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: side1
Patch failed at 0001 side1
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: side1
Using index info to reconstruct a base tree...
A	file
Falling back to patching base and 3-way merge...
Merging:
5e7fd8e renamed-file
virtual side1
found 1 common ancestor:
virtual 99f2e3e1cb15f9b52fa29f66d380dda061d917ab
Applying: side2
error: file: does not exist in index
Patch failed at 0002 side2
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
hint: Use 'git am --show-current-patch=diff' to see the failed patch
died of signal 15 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
ok 2 - --3way overrides --no-3way

expecting success of 4153.3 '--no-quiet overrides --quiet': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&

	# Applying side1 will be quiet.
	test_must_fail git am --quiet side[123].eml >out &&
	test_path_is_dir .git/rebase-apply &&
	test_i18ngrep ! "^Applying: " out &&
	echo side1 >file &&
	git add file &&

	# Applying side1 will not be quiet.
	# Applying side2 will be quiet.
	git am --no-quiet --continue >out &&
	echo "Applying: side1" >expected &&
	test_cmp expected out

HEAD is now at 8e08c98 side1
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  8e08c98 side1

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 8e08c98

HEAD is now at 3aaf771 first
error: patch failed: file:1
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
ok 3 - --no-quiet overrides --quiet

expecting success of 4153.4 '--signoff overrides --no-signoff': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&

	test_must_fail git am --no-signoff side[12].eml &&
	test_path_is_dir .git/rebase-apply &&
	echo side1 >file &&
	git add file &&
	git am --signoff --continue &&

	# Applied side1 will be signed off
	echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected &&
	git cat-file commit HEAD^ | grep "Signed-off-by:" >actual &&
	test_cmp expected actual &&

	# Applied side2 will not be signed off
	test $(git cat-file commit HEAD | grep -c "Signed-off-by:") -eq 0

HEAD is now at 1d25943 side2
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  1d25943 side2
  0400be0 side1

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 1d25943

HEAD is now at 3aaf771 first
error: patch failed: file:1
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: side1
Patch failed at 0001 side1
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: side1
Applying: side2
ok 4 - --signoff overrides --no-signoff

expecting success of 4153.5 '--reject overrides --no-reject': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	rm -f file.rej &&

	test_must_fail git am --no-reject side1.eml &&
	test_path_is_dir .git/rebase-apply &&
	test_path_is_missing file.rej &&

	test_must_fail test_terminal git am --reject </dev/zero &&
	test_path_is_dir .git/rebase-apply &&
	test_path_is_file file.rej

HEAD is now at 4f3810f side2
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  4f3810f side2
  deca85c side1

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 4f3810f

HEAD is now at 3aaf771 first
error: patch failed: file:1
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: side1
Patch failed at 0001 side1
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: side1
Checking patch file...
error: while searching for:
initial

error: patch failed: file:1
Applying patch file with 1 reject...
Rejected hunk #1.
Patch failed at 0001 side1
hint: Use 'git am --show-current-patch=diff' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
died of signal 15 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
ok 5 - --reject overrides --no-reject

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4201-shortlog.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4201-shortlog/.git/
expecting success of 4201.1 'setup': 
	test_tick &&
	echo 1 >a1 &&
	git add a1 &&
	tree=$(git write-tree) &&
	commit=$(printf "%s\n" "Test" "" | git commit-tree "$tree") &&
	git update-ref HEAD "$commit" &&

	echo 2 >a1 &&
	git commit --quiet -m "This is a very, very long first line for the commit message to see if it is wrapped correctly" a1 &&

	# test if the wrapping is still valid
	# when replacing all is by treble clefs.
	echo 3 >a1 &&
	git commit --quiet -m "$(
		echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
		sed "s/i/1234/g" |
		tr 1234 "\360\235\204\236")" a1 &&

	# now fsck up the utf8
	git config i18n.commitencoding non-utf-8 &&
	echo 4 >a1 &&
	git commit --quiet -m "$(
		echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
		sed "s/i/1234/g" |
		tr 1234 "\370\235\204\236")" a1 &&

	echo 5 >a1 &&
	git commit --quiet -m "a								12	34	56	78" a1 &&

	echo 6 >a1 &&
	git commit --quiet -m "Commit by someone else" \
		--author="Someone else <not!me>" a1 &&

	cat >expect.template <<-\EOF
	A U Thor (5):
	      SUBJECT
	      SUBJECT
	      SUBJECT
	      SUBJECT
	      SUBJECT

	Someone else (1):
	      SUBJECT

	EOF

ok 1 - setup

expecting success of 4201.2 'default output format': 
	git shortlog HEAD >log &&
	fuzz log >log.predictable &&
	test_cmp expect.template log.predictable

ok 2 - default output format

expecting success of 4201.3 'pretty format': 
	sed s/SUBJECT/OBJECT_NAME/ expect.template >expect &&
	git shortlog --format="%H" HEAD >log &&
	fuzz log >log.predictable &&
	test_cmp expect log.predictable

ok 3 - pretty format

expecting success of 4201.4 'pretty format (with --date)': 
	sed "s/SUBJECT/2005-04-07 OBJECT_NAME/" expect.template >expect &&
	git shortlog --format="%ad %H" --date=short HEAD >log &&
	fuzz log >log.predictable &&
	test_cmp expect log.predictable

ok 4 - pretty format (with --date)

expecting success of 4201.5 '--abbrev': 
	sed s/SUBJECT/OBJID/ expect.template >expect &&
	git shortlog --format="%h" --abbrev=35 HEAD >log &&
	fuzz log >log.predictable &&
	test_cmp expect log.predictable

ok 5 - --abbrev

expecting success of 4201.6 'output from user-defined format is re-wrapped': 
	sed "s/SUBJECT/two lines/" expect.template >expect &&
	git shortlog --format="two%nlines" HEAD >log &&
	fuzz log >log.predictable &&
	test_cmp expect log.predictable

ok 6 - output from user-defined format is re-wrapped

expecting success of 4201.7 'shortlog wrapping': 
	cat >expect <<\EOF &&
A U Thor (5):
      Test
      This is a very, very long first line for the commit message to see if
         it is wrapped correctly
      Th𝄞s 𝄞s a very, very long f𝄞rst l𝄞ne for the comm𝄞t message to see 𝄞f
         𝄞t 𝄞s wrapped correctly
      a								12	34
         56	78

Someone else (1):
      Commit by someone else

EOF
	git shortlog -w HEAD >out &&
	test_cmp expect out

ok 7 - shortlog wrapping

expecting success of 4201.8 'shortlog from non-git directory': 
	git log --no-expand-tabs HEAD >log &&
	GIT_DIR=non-existing git shortlog -w <log >out &&
	test_cmp expect out

ok 8 - shortlog from non-git directory

expecting success of 4201.9 'shortlog can read --format=raw output': 
	git log --format=raw HEAD >log &&
	GIT_DIR=non-existing git shortlog -w <log >out &&
	test_cmp expect out

ok 9 - shortlog can read --format=raw output

expecting success of 4201.10 'shortlog from non-git directory refuses extra arguments': 
	test_must_fail env GIT_DIR=non-existing git shortlog foo 2>out &&
	test_i18ngrep "too many arguments" out

error: too many arguments given outside repository
ok 10 - shortlog from non-git directory refuses extra arguments

expecting success of 4201.11 'shortlog should add newline when input line matches wraplen': 
	cat >expect <<\EOF &&
A U Thor (2):
      bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb
      aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa

EOF
	git shortlog -w >out <<\EOF &&
commit 0000000000000000000000000000000000000001
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa

commit 0000000000000000000000000000000000000002
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb

EOF
	test_cmp expect out

ok 11 - shortlog should add newline when input line matches wraplen

expecting success of 4201.12 'shortlog encoding': 
	git reset --hard "$commit" &&
	git config --unset i18n.commitencoding &&
	echo 2 > a1 &&
	git commit --quiet -m "$MSG1" --author="$DSCHOE" a1 &&
	git config i18n.commitencoding "ISO8859-1" &&
	echo 3 > a1 &&
	git commit --quiet -m "$(iconvfromutf8toiso88591 "$MSG2")" \
		--author="$(iconvfromutf8toiso88591 "$DSCHOE")" a1 &&
	git config --unset i18n.commitencoding &&
	git shortlog HEAD~2.. > out &&
test_cmp expect out
HEAD is now at aa97132 Test
ok 12 - shortlog encoding

expecting success of 4201.13 'shortlog with revision pseudo options': 
	git shortlog --all &&
	git shortlog --branches &&
	git shortlog --exclude=refs/heads/m* --all

A U Thor (1):
      Test

Jöhännës "Dschö" Schindëlin (2):
      set a1 to 2 and some non-ASCII chars: Äßø
      set a1 to 3 and some non-ASCII chars: áæï

A U Thor (1):
      Test

Jöhännës "Dschö" Schindëlin (2):
      set a1 to 2 and some non-ASCII chars: Äßø
      set a1 to 3 and some non-ASCII chars: áæï

A U Thor (1):
      Test

Jöhännës "Dschö" Schindëlin (2):
      set a1 to 2 and some non-ASCII chars: Äßø
      set a1 to 3 and some non-ASCII chars: áæï

ok 13 - shortlog with revision pseudo options

expecting success of 4201.14 'shortlog with --output=<file>': 
	git shortlog --output=shortlog -1 main >output &&
	test_must_be_empty output &&
	test_line_count = 3 shortlog

ok 14 - shortlog with --output=<file>

expecting success of 4201.15 'shortlog --committer (internal)': 
	git checkout --orphan side &&
	git commit --allow-empty -m one &&
	git commit --allow-empty -m two &&
	GIT_COMMITTER_NAME="Sin Nombre" git commit --allow-empty -m three &&

	cat >expect <<-\EOF &&
	     2	C O Mitter
	     1	Sin Nombre
	EOF
	git shortlog -nsc HEAD >actual &&
	test_cmp expect actual

Switched to a new branch 'side'
[side (root-commit) 9ed1028] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a1
[side 4046e48] two
 Author: A U Thor <author@example.com>
[side 1c4141a] three
 Author: A U Thor <author@example.com>
ok 15 - shortlog --committer (internal)

expecting success of 4201.16 'shortlog --committer (external)': 
	git log --format=full | git shortlog -nsc >actual &&
	test_cmp expect actual

ok 16 - shortlog --committer (external)

expecting success of 4201.17 '--group=committer is the same as --committer': 
	git shortlog -ns --group=committer HEAD >actual &&
	test_cmp expect actual

ok 17 - --group=committer is the same as --committer

expecting success of 4201.18 'shortlog --group=trailer:signed-off-by': 
	git commit --allow-empty -m foo -s &&
	GIT_COMMITTER_NAME="SOB One" \
	GIT_COMMITTER_EMAIL=sob@example.com \
		git commit --allow-empty -m foo -s &&
	git commit --allow-empty --amend --no-edit -s &&
	cat >expect <<-\EOF &&
	     2	C O Mitter <committer@example.com>
	     1	SOB One <sob@example.com>
	EOF
	git shortlog -nse --group=trailer:signed-off-by HEAD >actual &&
	test_cmp expect actual

[side d645125] foo
 Author: A U Thor <author@example.com>
[side 4ea5894] foo
 Author: A U Thor <author@example.com>
[side 4d83f03] foo
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
ok 18 - shortlog --group=trailer:signed-off-by

expecting success of 4201.19 'shortlog --group=format': 
	git shortlog -s --date="format:%Y" --group="format:%cN (%cd)" \
		HEAD >actual &&
	cat >expect <<-\EOF &&
	     4	C O Mitter (2005)
	     1	Sin Nombre (2005)
	EOF
	test_cmp expect actual

ok 19 - shortlog --group=format

expecting success of 4201.20 'shortlog --group=<format> DWIM': 
	git shortlog -s --date="format:%Y" --group="%cN (%cd)" HEAD >actual &&
	test_cmp expect actual

ok 20 - shortlog --group=<format> DWIM

expecting success of 4201.21 'shortlog bogus --group': 
	test_must_fail git shortlog --group=bogus HEAD 2>err &&
	grep "unknown group type" err

error: unknown group type: bogus
ok 21 - shortlog bogus --group

expecting success of 4201.22 'trailer idents are split': 
	cat >expect <<-\EOF &&
	     2	C O Mitter
	     1	SOB One
	EOF
	git shortlog -ns --group=trailer:signed-off-by HEAD >actual &&
	test_cmp expect actual

ok 22 - trailer idents are split

expecting success of 4201.23 'trailer idents are mailmapped': 
	cat >expect <<-\EOF &&
	     2	C O Mitter
	     1	Another Name
	EOF
	echo "Another Name <sob@example.com>" >mail.map &&
	git -c mailmap.file=mail.map shortlog -ns \
		--group=trailer:signed-off-by HEAD >actual &&
	test_cmp expect actual

ok 23 - trailer idents are mailmapped

expecting success of 4201.24 'shortlog de-duplicates trailers in a single commit': 
	git commit --allow-empty -F - <<-\EOF &&
	subject one

	this message has two distinct values, plus a repeat

	Repeated-trailer: Foo
	Repeated-trailer: Bar
	Repeated-trailer: Foo
	EOF

	git commit --allow-empty -F - <<-\EOF &&
	subject two

	similar to the previous, but without the second distinct value

	Repeated-trailer: Foo
	Repeated-trailer: Foo
	EOF

	cat >expect <<-\EOF &&
	     2	Foo
	     1	Bar
	EOF
	git shortlog -ns --group=trailer:repeated-trailer -2 HEAD >actual &&
	test_cmp expect actual

[side 0a2c930] subject one
 Author: A U Thor <author@example.com>
[side 45f2a27] subject two
 Author: A U Thor <author@example.com>
ok 24 - shortlog de-duplicates trailers in a single commit

expecting success of 4201.25 'shortlog can match multiple groups': 
	git commit --allow-empty -F - <<-\EOF &&
	subject one

	this has two trailers that are distinct from the author; it will count
	3 times in the output

	Some-trailer: User A <a@example.com>
	Another-trailer: User B <b@example.com>
	EOF

	git commit --allow-empty -F - <<-\EOF &&
	subject two

	this one has two trailers, one of which is a duplicate with the author;
	it will only be counted once for them

	Another-trailer: A U Thor <author@example.com>
	Some-trailer: User B <b@example.com>
	EOF

	cat >expect <<-\EOF &&
	     2	A U Thor
	     2	User B
	     1	User A
	EOF
	git shortlog -ns \
		--group=author \
		--group=trailer:some-trailer \
		--group=trailer:another-trailer \
		-2 HEAD >actual &&
	test_cmp expect actual

[side 168a240] subject one
 Author: A U Thor <author@example.com>
[side 4d593b0] subject two
 Author: A U Thor <author@example.com>
ok 25 - shortlog can match multiple groups

expecting success of 4201.26 'shortlog can match multiple format groups': 
	GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" \
		git commit --allow-empty -m "identical names" &&
	test_tick &&
	cat >expect <<-\EOF &&
	     2	A U Thor
	     1	C O Mitter
	EOF
	git shortlog -ns --group="%cn" --group="%an" -2 HEAD >actual &&
	test_cmp expect actual

[side 035fc72] identical names
 Author: A U Thor <author@example.com>
ok 26 - shortlog can match multiple format groups

expecting success of 4201.27 'set up option selection tests': 
	git commit --allow-empty -F - <<-\EOF
	subject

	body

	Trailer-one: value-one
	Trailer-two: value-two
	EOF

[side 7dcb462] subject
 Author: A U Thor <author@example.com>
ok 27 - set up option selection tests

expecting success of 4201.28 '--no-group resets group list to author': 
	cat >expect <<-\EOF &&
	     1	A U Thor
	EOF
	git shortlog -ns \
		--group=committer \
		--group=trailer:trailer-one \
		--no-group \
		-1 HEAD >actual &&
	test_cmp expect actual

ok 28 - --no-group resets group list to author

expecting success of 4201.29 '--no-group resets trailer list': 
	cat >expect <<-\EOF &&
	     1	value-two
	EOF
	git shortlog -ns \
		--group=trailer:trailer-one \
		--no-group \
		--group=trailer:trailer-two \
		-1 HEAD >actual &&
	test_cmp expect actual

ok 29 - --no-group resets trailer list

expecting success of 4201.30 'stdin with multiple groups reports error': 
	git log >log &&
	test_must_fail git shortlog --group=author --group=committer <log

fatal: using multiple --group options with stdin is not supported
ok 30 - stdin with multiple groups reports error

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4200-rerere.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4200-rerere/.git/
expecting success of 4200.1 'setup': 
	cat >a1 <<-\EOF &&
	Some title
	==========
	Whether 'tis nobler in the mind to suffer
	The slings and arrows of outrageous fortune,
	Or to take arms against a sea of troubles,
	And by opposing end them? To die: to sleep;
	No more; and by a sleep to say we end
	The heart-ache and the thousand natural shocks
	That flesh is heir to, 'tis a consummation
	Devoutly to be wish'd.
	EOF

	git add a1 &&
	test_tick &&
	git commit -q -a -m initial &&

	cat >>a1 <<-\EOF &&
	Some title
	==========
	To die, to sleep;
	To sleep: perchance to dream: ay, there's the rub;
	For in that sleep of death what dreams may come
	When we have shuffled off this mortal coil,
	Must give us pause: there's the respect
	That makes calamity of so long life;
	EOF

	git checkout -b first &&
	test_tick &&
	git commit -q -a -m first &&

	git checkout -b second main &&
	git show first:a1 |
	sed -e "s/To die, t/To die! T/" -e "s/Some title/Some Title/" >a1 &&
	echo "* END *" >>a1 &&
	test_tick &&
	git commit -q -a -m second

Switched to a new branch 'first'
Switched to a new branch 'second'
ok 1 - setup

expecting success of 4200.2 'nothing recorded without rerere': 
	rm -rf .git/rr-cache &&
	git config rerere.enabled false &&
	test_must_fail git merge first &&
	! test -d .git/rr-cache

Auto-merging a1
CONFLICT (content): Merge conflict in a1
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - nothing recorded without rerere

expecting success of 4200.3 'activate rerere, old style (conflicting merge)': 
	git reset --hard &&
	mkdir .git/rr-cache &&
	test_might_fail git config --unset rerere.enabled &&
	test_must_fail git merge first &&

	sha1=$(perl -pe "s/	.*//" .git/MERGE_RR) &&
	rr=.git/rr-cache/$sha1 &&
	grep "^=======\$" $rr/preimage &&
	! test -f $rr/postimage &&
	! test -f $rr/thisimage

HEAD is now at fcd23fa second
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Recorded preimage for 'a1'
Automatic merge failed; fix conflicts and then commit the result.
=======
=======
ok 3 - activate rerere, old style (conflicting merge)

expecting success of 4200.4 'rerere.enabled works, too': 
	rm -rf .git/rr-cache &&
	git config rerere.enabled true &&
	git reset --hard &&
	test_must_fail git merge first &&

	sha1=$(perl -pe "s/	.*//" .git/MERGE_RR) &&
	rr=.git/rr-cache/$sha1 &&
	grep ^=======$ $rr/preimage

HEAD is now at fcd23fa second
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Recorded preimage for 'a1'
Automatic merge failed; fix conflicts and then commit the result.
=======
=======
ok 4 - rerere.enabled works, too

expecting success of 4200.5 'set up rr-cache': 
	rm -rf .git/rr-cache &&
	git config rerere.enabled true &&
	git reset --hard &&
	test_must_fail git merge first &&
	sha1=$(perl -pe "s/	.*//" .git/MERGE_RR) &&
	rr=.git/rr-cache/$sha1

HEAD is now at fcd23fa second
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Recorded preimage for 'a1'
Automatic merge failed; fix conflicts and then commit the result.
ok 5 - set up rr-cache

expecting success of 4200.6 'rr-cache looks sane': 
	# no postimage or thisimage yet
	! test -f $rr/postimage &&
	! test -f $rr/thisimage &&

	# preimage has right number of lines
	cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) &&
	echo $cnt &&
	test $cnt = 13

13
ok 6 - rr-cache looks sane

expecting success of 4200.7 'rerere diff': 
	git show first:a1 >a1 &&
	cat >expect <<-\EOF &&
	--- a/a1
	+++ b/a1
	@@ -1,4 +1,4 @@
	-Some Title
	+Some title
	 ==========
	 Whether 'tis nobler in the mind to suffer
	 The slings and arrows of outrageous fortune,
	@@ -8,21 +8,11 @@
	 The heart-ache and the thousand natural shocks
	 That flesh is heir to, 'tis a consummation
	 Devoutly to be wish'd.
	-<<<<<<<
	-Some Title
	-==========
	-To die! To sleep;
	-=======
	 Some title
	 ==========
	 To die, to sleep;
	->>>>>>>
	 To sleep: perchance to dream: ay, there's the rub;
	 For in that sleep of death what dreams may come
	 When we have shuffled off this mortal coil,
	 Must give us pause: there's the respect
	 That makes calamity of so long life;
	-<<<<<<<
	-=======
	-* END *
	->>>>>>>
	EOF
	git rerere diff >out &&
	test_cmp expect out

ok 7 - rerere diff

expecting success of 4200.8 'rerere status': 
	echo a1 >expect &&
	git rerere status >out &&
	test_cmp expect out

ok 8 - rerere status

expecting success of 4200.9 'first postimage wins': 
	git show first:a1 | sed "s/To die: t/To die! T/" >expect &&

	git commit -q -a -m "prefer first over second" &&
	test -f $rr/postimage &&

	oldmtimepost=$(test-tool chmtime --get -60 $rr/postimage) &&

	git checkout -b third main &&
	git show second^:a1 | sed "s/To die: t/To die! T/" >a1 &&
	git commit -q -a -m third &&

	test_must_fail git merge first &&
	# rerere kicked in
	! grep "^=======\$" a1 &&
	test_cmp expect a1

Recorded resolution for 'a1'.
Switched to a new branch 'third'
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Resolved 'a1' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 9 - first postimage wins

expecting success of 4200.10 'rerere updates postimage timestamp': 
	newmtimepost=$(test-tool chmtime --get $rr/postimage) &&
	test $oldmtimepost -lt $newmtimepost

ok 10 - rerere updates postimage timestamp

expecting success of 4200.11 'rerere clear': 
	mv $rr/postimage .git/post-saved &&
	echo "$sha1	a1" | perl -pe "y/\012/\000/" >.git/MERGE_RR &&
	git rerere clear &&
	! test -d $rr

ok 11 - rerere clear

expecting success of 4200.12 'leftover directory': 
	git reset --hard &&
	mkdir -p $rr &&
	test_must_fail git merge first &&
	test -f $rr/preimage

HEAD is now at 40cb797 third
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Recorded preimage for 'a1'
Automatic merge failed; fix conflicts and then commit the result.
ok 12 - leftover directory

expecting success of 4200.13 'missing preimage': 
	git reset --hard &&
	mkdir -p $rr &&
	cp .git/post-saved $rr/postimage &&
	test_must_fail git merge first &&
	test -f $rr/preimage

HEAD is now at 40cb797 third
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Resolved 'a1' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 13 - missing preimage

expecting success of 4200.14 'set up for garbage collection tests': 
	mkdir -p $rr &&
	echo Hello >$rr/preimage &&
	echo World >$rr/postimage &&

	sha2=$(test_oid deadbeef) &&
	rr2=.git/rr-cache/$sha2 &&
	mkdir $rr2 &&
	echo Hello >$rr2/preimage &&

	almost_15_days_ago=$((60-15*86400)) &&
	just_over_15_days_ago=$((-1-15*86400)) &&
	almost_60_days_ago=$((60-60*86400)) &&
	just_over_60_days_ago=$((-1-60*86400)) &&

	test-tool chmtime =$just_over_60_days_ago $rr/preimage &&
	test-tool chmtime =$almost_60_days_ago $rr/postimage &&
	test-tool chmtime =$almost_15_days_ago $rr2/preimage

ok 14 - set up for garbage collection tests

expecting success of 4200.15 'gc preserves young or recently used records': 
	git rerere gc &&
	test -f $rr/preimage &&
	test -f $rr2/preimage

ok 15 - gc preserves young or recently used records

expecting success of 4200.16 'old records rest in peace': 
	test-tool chmtime =$just_over_60_days_ago $rr/postimage &&
	test-tool chmtime =$just_over_15_days_ago $rr2/preimage &&
	git rerere gc &&
	! test -f $rr/preimage &&
	! test -f $rr2/preimage

ok 16 - old records rest in peace

expecting success of 4200.17 'rerere gc with custom expiry (5, 0)': 
		rm -fr .git/rr-cache &&
		rr=.git/rr-cache/$ZERO_OID &&
		mkdir -p "$rr" &&
		>"$rr/preimage" &&
		>"$rr/postimage" &&

		two_days_ago=$((-2*86400)) &&
		test-tool chmtime =$two_days_ago "$rr/preimage" &&
		test-tool chmtime =$two_days_ago "$rr/postimage" &&

		find .git/rr-cache -type f | sort >original &&

		git -c "gc.rerereresolved=$five_days" \
		    -c "gc.rerereunresolved=$five_days" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_cmp original actual &&

		git -c "gc.rerereresolved=$five_days" \
		    -c "gc.rerereunresolved=$right_now" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_cmp original actual &&

		git -c "gc.rerereresolved=$right_now" \
		    -c "gc.rerereunresolved=$right_now" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_must_be_empty actual
	
ok 17 - rerere gc with custom expiry (5, 0)

expecting success of 4200.18 'rerere gc with custom expiry (5.days.ago, now)': 
		rm -fr .git/rr-cache &&
		rr=.git/rr-cache/$ZERO_OID &&
		mkdir -p "$rr" &&
		>"$rr/preimage" &&
		>"$rr/postimage" &&

		two_days_ago=$((-2*86400)) &&
		test-tool chmtime =$two_days_ago "$rr/preimage" &&
		test-tool chmtime =$two_days_ago "$rr/postimage" &&

		find .git/rr-cache -type f | sort >original &&

		git -c "gc.rerereresolved=$five_days" \
		    -c "gc.rerereunresolved=$five_days" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_cmp original actual &&

		git -c "gc.rerereresolved=$five_days" \
		    -c "gc.rerereunresolved=$right_now" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_cmp original actual &&

		git -c "gc.rerereresolved=$right_now" \
		    -c "gc.rerereunresolved=$right_now" rerere gc &&
		find .git/rr-cache -type f | sort >actual &&
		test_must_be_empty actual
	
ok 18 - rerere gc with custom expiry (5.days.ago, now)

expecting success of 4200.19 'setup: file2 added differently in two branches': 
	git reset --hard &&

	git checkout -b fourth &&
	echo Hallo >file2 &&
	git add file2 &&
	test_tick &&
	git commit -m version1 &&

	git checkout third &&
	echo Bello >file2 &&
	git add file2 &&
	test_tick &&
	git commit -m version2 &&

	test_must_fail git merge fourth &&
	echo Cello >file2 &&
	git add file2 &&
	git commit -m resolution

HEAD is now at 40cb797 third
Switched to a new branch 'fourth'
[fourth 26401ec] version1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Switched to branch 'third'
[third 1f50303] version2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Recorded preimage for 'file2'
Automatic merge failed; fix conflicts and then commit the result.
Recorded resolution for 'file2'.
[third e9acb28] resolution
 Author: A U Thor <author@example.com>
ok 19 - setup: file2 added differently in two branches

expecting success of 4200.20 'resolution was recorded properly': 
	echo Cello >expected &&

	git reset --hard HEAD~2 &&
	git checkout -b fifth &&

	echo Hallo >file3 &&
	git add file3 &&
	test_tick &&
	git commit -m version1 &&

	git checkout third &&
	echo Bello >file3 &&
	git add file3 &&
	test_tick &&
	git commit -m version2 &&
	git tag version2 &&

	test_must_fail git merge fifth &&
	test_cmp expected file3 &&
	test_must_fail git update-index --refresh

HEAD is now at 40cb797 third
Switched to a new branch 'fifth'
[fifth 9b6b3c4] version1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Switched to branch 'third'
[third 7eec302] version2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
Auto-merging file3
CONFLICT (add/add): Merge conflict in file3
Resolved 'file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
file3: needs merge
ok 20 - resolution was recorded properly

expecting success of 4200.21 'rerere.autoupdate': 
	git config rerere.autoupdate true &&
	git reset --hard &&
	git checkout version2 &&
	test_must_fail git merge fifth &&
	git update-index --refresh

HEAD is now at 7eec302 version2
Note: switching to 'version2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7eec302 version2
Auto-merging file3
CONFLICT (add/add): Merge conflict in file3
Staged 'file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 21 - rerere.autoupdate

expecting success of 4200.22 'merge --rerere-autoupdate': 
	test_might_fail git config --unset rerere.autoupdate &&
	git reset --hard &&
	git checkout version2 &&
	test_must_fail git merge --rerere-autoupdate fifth &&
	git update-index --refresh

HEAD is now at 7eec302 version2
HEAD is now at 7eec302 version2
Auto-merging file3
CONFLICT (add/add): Merge conflict in file3
Staged 'file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 22 - merge --rerere-autoupdate

expecting success of 4200.23 'merge --no-rerere-autoupdate': 
	headblob=$(git rev-parse version2:file3) &&
	mergeblob=$(git rev-parse fifth:file3) &&
	cat >expected <<-EOF &&
	100644 $headblob 2	file3
	100644 $mergeblob 3	file3
	EOF

	git config rerere.autoupdate true &&
	git reset --hard &&
	git checkout version2 &&
	test_must_fail git merge --no-rerere-autoupdate fifth &&
	git ls-files -u >actual &&
	test_cmp expected actual

HEAD is now at 7eec302 version2
HEAD is now at 7eec302 version2
Auto-merging file3
CONFLICT (add/add): Merge conflict in file3
Resolved 'file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 23 - merge --no-rerere-autoupdate

expecting success of 4200.24 'set up an unresolved merge': 
	headblob=$(git rev-parse version2:file3) &&
	mergeblob=$(git rev-parse fifth:file3) &&
	cat >expected.unresolved <<-EOF &&
	100644 $headblob 2	file3
	100644 $mergeblob 3	file3
	EOF

	test_might_fail git config --unset rerere.autoupdate &&
	git reset --hard &&
	git checkout version2 &&
	ancestor=$(git merge-base version2 fifth) &&
	test_must_fail git merge-recursive "$ancestor" -- HEAD fifth &&

	git ls-files --stage >failedmerge &&
	cp file3 file3.conflict &&

	git ls-files -u >actual &&
	test_cmp expected.unresolved actual

HEAD is now at 7eec302 version2
HEAD is now at 7eec302 version2
Merging HEAD with fifth
Merging:
7eec302 version2
9b6b3c4 version1
found 1 common ancestor:
40cb797 third
CONFLICT (add/add): Merge conflict in file3
Auto-merging file3
ok 24 - set up an unresolved merge

expecting success of 4200.25 'explicit rerere': 
	test_might_fail git config --unset rerere.autoupdate &&
	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	test_must_fail git update-index --refresh -q &&

	git rerere &&
	git ls-files -u >actual &&
	test_cmp expected.unresolved actual

rm 'a1'
rm 'file3'
rm 'file3'
file3: needs merge
Resolved 'file3' using previous resolution.
ok 25 - explicit rerere

expecting success of 4200.26 'explicit rerere with autoupdate': 
	git config rerere.autoupdate true &&
	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	test_must_fail git update-index --refresh -q &&

	git rerere &&
	git update-index --refresh

rm 'a1'
rm 'file3'
rm 'file3'
file3: needs merge
Staged 'file3' using previous resolution.
ok 26 - explicit rerere with autoupdate

expecting success of 4200.27 'explicit rerere --rerere-autoupdate overrides': 
	git config rerere.autoupdate false &&
	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	git rerere &&
	git ls-files -u >actual1 &&

	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	git rerere --rerere-autoupdate &&
	git update-index --refresh &&

	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	git rerere --rerere-autoupdate --no-rerere-autoupdate &&
	git ls-files -u >actual2 &&

	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	git rerere --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate &&
	git update-index --refresh &&

	test_cmp expected.unresolved actual1 &&
	test_cmp expected.unresolved actual2

rm 'a1'
rm 'file3'
Resolved 'file3' using previous resolution.
rm 'a1'
rm 'file3'
rm 'file3'
Staged 'file3' using previous resolution.
rm 'a1'
rm 'file3'
Resolved 'file3' using previous resolution.
rm 'a1'
rm 'file3'
rm 'file3'
Staged 'file3' using previous resolution.
ok 27 - explicit rerere --rerere-autoupdate overrides

expecting success of 4200.28 'rerere --no-no-rerere-autoupdate': 
	git rm -fr --cached . &&
	git update-index --index-info <failedmerge &&
	cp file3.conflict file3 &&
	test_must_fail git rerere --no-no-rerere-autoupdate 2>err &&
	test_i18ngrep [Uu]sage err &&
	test_must_fail git update-index --refresh

rm 'a1'
rm 'file3'
usage: git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]
file3: needs merge
ok 28 - rerere --no-no-rerere-autoupdate

expecting success of 4200.29 'rerere -h': 
	test_must_fail git rerere -h >help &&
	test_i18ngrep [Uu]sage help

usage: git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]
ok 29 - rerere -h

expecting success of 4200.30 'multiple identical conflicts': 
	rm -fr .git/rr-cache &&
	mkdir .git/rr-cache &&
	git reset --hard &&

	test_seq 1 6 >early &&
	>late &&
	test_seq 11 15 >short &&
	test_seq 111 120 >long &&
	concat_insert short >file1 &&
	concat_insert long >file2 &&
	git add file1 file2 &&
	git commit -m base &&
	git tag base &&
	git checkout -b six.1 &&
	concat_insert short 6.1 >file1 &&
	concat_insert long 6.1 >file2 &&
	git add file1 file2 &&
	git commit -m 6.1 &&
	git checkout -b six.2 HEAD^ &&
	concat_insert short 6.2 >file1 &&
	concat_insert long 6.2 >file2 &&
	git add file1 file2 &&
	git commit -m 6.2 &&

	# At this point, six.1 and six.2
	# - derive from common ancestor that has two files
	#   1...6 7 11..15 (file1) and 1...6 7 111..120 (file2)
	# - six.1 replaces these 7s with 6.1
	# - six.2 replaces these 7s with 6.2

	merge_conflict_resolve &&

	# Check that rerere knows that file1 and file2 have conflicts

	printf "%s\n" file1 file2 >expect &&
	git ls-files -u | sed -e "s/^.*	//" | sort -u >actual &&
	test_cmp expect actual &&

	git rerere status | sort >actual &&
	test_cmp expect actual &&

	git rerere remaining >actual &&
	test_cmp expect actual &&

	count_pre_post 2 0 &&

	# Pretend that the conflicts were made quite some time ago
	test-tool chmtime -172800 $(find .git/rr-cache/ -type f) &&

	# Unresolved entries have not expired yet
	git -c gc.rerereresolved=5 -c gc.rerereunresolved=5 rerere gc &&
	count_pre_post 2 0 &&

	# Unresolved entries have expired
	git -c gc.rerereresolved=5 -c gc.rerereunresolved=1 rerere gc &&
	count_pre_post 0 0 &&

	# Recreate the conflicted state
	merge_conflict_resolve &&
	count_pre_post 2 0 &&

	# Clear it
	git rerere clear &&
	count_pre_post 0 0 &&

	# Recreate the conflicted state
	merge_conflict_resolve &&
	count_pre_post 2 0 &&

	# We resolved file1 and file2
	git rerere &&
	git rerere remaining >actual &&
	test_must_be_empty actual &&

	# We must have recorded both of them
	count_pre_post 2 2 &&

	# Now we should be able to resolve them both
	git reset --hard &&
	test_must_fail git merge six.1 &&
	git rerere &&

	git rerere remaining >actual &&
	test_must_be_empty actual &&

	concat_insert short 6.1 6.2 >file1.expect &&
	concat_insert long 6.1 6.2 >file2.expect &&
	test_cmp file1.expect file1 &&
	test_cmp file2.expect file2 &&

	# Forget resolution for file2
	git rerere forget file2 &&
	echo file2 >expect &&
	git rerere status >actual &&
	test_cmp expect actual &&
	count_pre_post 2 1 &&

	# file2 already has correct resolution, so record it again
	git rerere &&

	# Pretend that the resolutions are old again
	test-tool chmtime -172800 $(find .git/rr-cache/ -type f) &&

	# Resolved entries have not expired yet
	git -c gc.rerereresolved=5 -c gc.rerereunresolved=5 rerere gc &&

	count_pre_post 2 2 &&

	# Resolved entries have expired
	git -c gc.rerereresolved=1 -c gc.rerereunresolved=5 rerere gc &&
	count_pre_post 0 0

HEAD is now at 7eec302 version2
[detached HEAD 40e0609] base
 Author: A U Thor <author@example.com>
 2 files changed, 29 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'six.1'
[six.1 605006b] 6.1
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to a new branch 'six.2'
[six.2 ba09fec] 6.2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
HEAD is now at ba09fec 6.2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Auto-merging file2
CONFLICT (content): Merge conflict in file2
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at ba09fec 6.2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Auto-merging file2
CONFLICT (content): Merge conflict in file2
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at ba09fec 6.2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Auto-merging file2
CONFLICT (content): Merge conflict in file2
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Automatic merge failed; fix conflicts and then commit the result.
Recorded resolution for 'file1'.
Recorded resolution for 'file2'.
HEAD is now at ba09fec 6.2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Auto-merging file2
CONFLICT (content): Merge conflict in file2
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Updated preimage for 'file2'
Forgot resolution for 'file2'
Recorded resolution for 'file2'.
ok 30 - multiple identical conflicts

expecting success of 4200.31 'rerere with unexpected conflict markers does not crash': 
	git reset --hard &&

	git checkout -b branch-1 main &&
	echo "bar" >test &&
	git add test &&
	git commit -q -m two &&

	git reset --hard &&
	git checkout -b branch-2 main &&
	echo "foo" >test &&
	git add test &&
	git commit -q -a -m one &&

	test_must_fail git merge branch-1 &&
	echo "<<<<<<< a" >test &&
	git rerere &&

	git rerere clear

HEAD is now at ba09fec 6.2
Switched to a new branch 'branch-1'
HEAD is now at 5727ee8 two
Switched to a new branch 'branch-2'
Auto-merging test
CONFLICT (add/add): Merge conflict in test
Recorded preimage for 'test'
Automatic merge failed; fix conflicts and then commit the result.
error: could not parse conflict hunks in 'test'
ok 31 - rerere with unexpected conflict markers does not crash

expecting success of 4200.32 'rerere with inner conflict markers': 
	git reset --hard &&

	git checkout -b A main &&
	echo "bar" >test &&
	git add test &&
	git commit -q -m two &&
	echo "baz" >test &&
	git add test &&
	git commit -q -m three &&

	git reset --hard &&
	git checkout -b B main &&
	echo "foo" >test &&
	git add test &&
	git commit -q -a -m one &&

	test_must_fail git merge A~ &&
	git add test &&
	git commit -q -m "will solve conflicts later" &&
	test_must_fail git merge A &&

	echo "resolved" >test &&
	git add test &&
	git commit -q -m "solved conflict" &&

	echo "resolved" >expect &&

	git reset --hard HEAD~~ &&
	test_must_fail git merge A~ &&
	git add test &&
	git commit -q -m "will solve conflicts later" &&
	test_must_fail git merge A &&
	cat test >actual &&
	test_cmp expect actual &&

	git add test &&
	git commit -m "rerere solved conflict" &&
	git reset --hard HEAD~ &&
	test_must_fail git merge A &&
	cat test >actual &&
	test_cmp expect actual

HEAD is now at 95c3f31 one
Switched to a new branch 'A'
HEAD is now at 8f8d617 three
Switched to a new branch 'B'
Auto-merging test
CONFLICT (add/add): Merge conflict in test
Recorded preimage for 'test'
Automatic merge failed; fix conflicts and then commit the result.
Recorded preimage for 'test'
Auto-merging test
CONFLICT (content): Merge conflict in test
Recorded preimage for 'test'
Automatic merge failed; fix conflicts and then commit the result.
Recorded resolution for 'test'.
HEAD is now at 95c3f31 one
Auto-merging test
CONFLICT (add/add): Merge conflict in test
Recorded preimage for 'test'
Automatic merge failed; fix conflicts and then commit the result.
Recorded preimage for 'test'
Auto-merging test
CONFLICT (content): Merge conflict in test
Resolved 'test' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
[B c1558e5] rerere solved conflict
 Author: A U Thor <author@example.com>
HEAD is now at 35eb3e9 will solve conflicts later
Auto-merging test
CONFLICT (content): Merge conflict in test
Resolved 'test' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
ok 32 - rerere with inner conflict markers

expecting success of 4200.33 'setup simple stage 1 handling': 
	test_create_repo stage_1_handling &&
	(
		cd stage_1_handling &&

		test_seq 1 10 >original &&
		git add original &&
		git commit -m original &&

		git checkout -b A main &&
		git mv original A &&
		git commit -m "rename to A" &&

		git checkout -b B main &&
		git mv original B &&
		git commit -m "rename to B"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4200-rerere/stage_1_handling/.git/
[main (root-commit) 64a4a07] original
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 original
Switched to a new branch 'A'
[A cc792a7] rename to A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename original => A (100%)
Switched to a new branch 'B'
[B 02c49bb] rename to B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename original => B (100%)
ok 33 - setup simple stage 1 handling

expecting success of 4200.34 'test simple stage 1 handling': 
	(
		cd stage_1_handling &&

		git config rerere.enabled true &&
		git checkout A^0 &&
		test_must_fail git merge B^0
	)

Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at cc792a7 rename to A
CONFLICT (rename/rename): original renamed to A in HEAD and to B in B^0.
Automatic merge failed; fix conflicts and then commit the result.
ok 34 - test simple stage 1 handling

# passed all 34 test(s)
1..34
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4150-am.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4150-am/.git/
expecting success of 4150.1 'setup: messages': 
	cat >msg <<-\EOF &&
	second

	Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, sed diam nonumy
	eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
	voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
	kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem
	ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
	tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
	vero eos et accusam et justo duo dolores et ea rebum.

	EOF
	qz_to_tab_space <<-\EOF >>msg &&
	QDuis autem vel eum iriure dolor in hendrerit in vulputate velit
	Qesse molestie consequat, vel illum dolore eu feugiat nulla facilisis
	Qat vero eros et accumsan et iusto odio dignissim qui blandit
	Qpraesent luptatum zzril delenit augue duis dolore te feugait nulla
	Qfacilisi.
	EOF
	cat >>msg <<-\EOF &&

	Lorem ipsum dolor sit amet,
	consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut
	laoreet dolore magna aliquam erat volutpat.

	  git
	  ---
	  +++

	Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit
	lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure
	dolor in hendrerit in vulputate velit esse molestie consequat, vel illum
	dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio
	dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te
	feugait nulla facilisi.

	Reported-by: A N Other <a.n.other@example.com>
	EOF

	cat >failmail <<-\EOF &&
	From foo@example.com Fri May 23 10:43:49 2008
	From:	foo@example.com
	To:	bar@example.com
	Subject: Re: [RFC/PATCH] git-foo.sh
	Date:	Fri, 23 May 2008 05:23:42 +0200

	Sometimes we have to find out that there's nothing left.

	EOF

	cat >pine <<-\EOF &&
	From MAILER-DAEMON Fri May 23 10:43:49 2008
	Date: 23 May 2008 05:23:42 +0200
	From: Mail System Internal Data <MAILER-DAEMON@example.com>
	Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
	Message-ID: <foo-0001@example.com>

	This text is part of the internal format of your mail folder, and is not
	a real message.  It is created automatically by the mail system software.
	If deleted, important folder data will be lost, and it will be re-created
	with the data reset to initial values.

	EOF

	cat >msg-without-scissors-line <<-\EOF &&
	Test that git-am --scissors cuts at the scissors line

	This line should be included in the commit message.
	EOF

	printf "Subject: " >subject-prefix &&

	cat - subject-prefix msg-without-scissors-line >msg-with-scissors-line <<-\EOF
	This line should not be included in the commit message with --scissors enabled.

	 - - >8 - - remove everything above this line - - >8 - -

	EOF

ok 1 - setup: messages

expecting success of 4150.2 'setup': 
	echo hello >file &&
	git add file &&
	test_tick &&
	git commit -m first &&
	git tag first &&

	echo world >>file &&
	git add file &&
	test_tick &&
	git commit -F msg &&
	git tag second &&

	git format-patch --stdout first >patch1 &&
	{
		echo "Message-Id: <1226501681-24923-1-git-send-email-bda@mnsspb.ru>" &&
		echo "X-Fake-Field: Line One" &&
		echo "X-Fake-Field: Line Two" &&
		echo "X-Fake-Field: Line Three" &&
		git format-patch --stdout first | sed -e "1d"
	} > patch1.eml &&
	{
		echo "X-Fake-Field: Line One" &&
		echo "X-Fake-Field: Line Two" &&
		echo "X-Fake-Field: Line Three" &&
		git format-patch --stdout first | sed -e "1d"
	} | append_cr >patch1-crlf.eml &&
	{
		printf "%255s\\n" "" &&
		echo "X-Fake-Field: Line One" &&
		echo "X-Fake-Field: Line Two" &&
		echo "X-Fake-Field: Line Three" &&
		git format-patch --stdout first | sed -e "1d"
	} > patch1-ws.eml &&
	{
		sed -ne "1p" msg &&
		echo &&
		echo "From: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" &&
		echo "Date: $GIT_AUTHOR_DATE" &&
		echo &&
		sed -e "1,2d" msg &&
		echo "---" &&
		git diff-tree --no-commit-id --stat -p second
	} >patch1-stgit.eml &&
	mkdir stgit-series &&
	cp patch1-stgit.eml stgit-series/patch &&
	{
		echo "# This series applies on GIT commit $(git rev-parse first)" &&
		echo "patch"
	} >stgit-series/series &&
	{
		echo "# HG changeset patch" &&
		echo "# User $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" &&
		echo "# Date $test_tick 25200" &&
		echo "#      $(git show --pretty="%aD" -s second)" &&
		echo "# Node ID $ZERO_OID" &&
		echo "# Parent  $ZERO_OID" &&
		cat msg &&
		echo &&
		git diff-tree --no-commit-id -p second
	} >patch1-hg.eml &&


	echo file >file &&
	git add file &&
	git commit -F msg-without-scissors-line &&
	git tag expected-for-scissors &&
	git reset --hard HEAD^ &&

	echo file >file &&
	git add file &&
	git commit -F msg-with-scissors-line &&
	git tag expected-for-no-scissors &&
	git format-patch --stdout expected-for-no-scissors^ >patch-with-scissors-line.eml &&
	git reset --hard HEAD^ &&

	sed -n -e "3,\$p" msg >file &&
	git add file &&
	test_tick &&
	git commit -m third &&

	git format-patch --stdout first >patch2 &&

	git checkout -b lorem &&
	sed -n -e "11,\$p" msg >file &&
	head -n 9 msg >>file &&
	test_tick &&
	git commit -a -m "moved stuff" &&

	echo goodbye >another &&
	git add another &&
	test_tick &&
	git commit -m "added another file" &&

	git format-patch --stdout main >lorem-move.patch &&
	git format-patch --no-prefix --stdout main >lorem-zero.patch &&

	git checkout -b rename &&
	git mv file renamed &&
	git commit -m "renamed a file" &&

	git format-patch -M --stdout lorem >rename.patch &&

	git reset --soft lorem^ &&
	git commit -m "renamed a file and added another" &&

	git format-patch -M --stdout lorem^ >rename-add.patch &&

	git checkout -b empty-commit &&
	git commit -m "empty commit" --allow-empty &&

	: >empty.patch &&
	git format-patch --always --stdout empty-commit^ >empty-commit.patch &&

	# reset time
	sane_unset test_tick &&
	test_tick

[main (root-commit) 6b2d93f] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 88f8893] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 27dee8a] Test that git-am --scissors cuts at the scissors line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
HEAD is now at 88f8893 second
[main 9f99c7e] This line should not be included in the commit message with --scissors enabled.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
HEAD is now at 88f8893 second
[main 7179449] third
 Author: A U Thor <author@example.com>
 1 file changed, 30 insertions(+), 2 deletions(-)
Switched to a new branch 'lorem'
[lorem 4670218] moved stuff
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+), 8 deletions(-)
[lorem 1048ce6] added another file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 another
Switched to a new branch 'rename'
[rename fc8826b] renamed a file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => renamed (100%)
[rename 756adf8] renamed a file and added another
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 another
 rename file => renamed (100%)
Switched to a new branch 'empty-commit'
[empty-commit c6b90e6] empty commit
 Author: A U Thor <author@example.com>
ok 2 - setup

expecting success of 4150.3 'am applies patch correctly': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	git am <patch1 &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"

HEAD is now at c6b90e6 empty commit
Note: switching to 'first'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6b2d93f first
Applying: second
ok 3 - am applies patch correctly

expecting success of 4150.4 'am fails if index is dirty': 
	test_when_finished "rm -f dirtyfile" &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	echo dirtyfile >dirtyfile &&
	git add dirtyfile &&
	test_must_fail git am patch1 &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev first HEAD

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
fatal: Dirty index: cannot apply patches (dirty: dirtyfile)
ok 4 - am fails if index is dirty

expecting success of 4150.5 'am applies patch e-mail not in a mbox': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	git am patch1.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"

HEAD is now at 6b2d93f first
HEAD is now at 6b2d93f first
Applying: second
ok 5 - am applies patch e-mail not in a mbox

expecting success of 4150.6 'am applies patch e-mail not in a mbox with CRLF': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	git am patch1-crlf.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 6 - am applies patch e-mail not in a mbox with CRLF

expecting success of 4150.7 'am applies patch e-mail with preceding whitespace': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	git am patch1-ws.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 7 - am applies patch e-mail with preceding whitespace

expecting success of 4150.8 'am applies stgit patch': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	git am patch1-stgit.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	test_cmp_rev second^ HEAD^

Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 8 - am applies stgit patch

expecting success of 4150.9 'am --patch-format=stgit applies stgit patch': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	git am --patch-format=stgit <patch1-stgit.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	test_cmp_rev second^ HEAD^

Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 9 - am --patch-format=stgit applies stgit patch

expecting success of 4150.10 'am applies stgit series': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	git am stgit-series/series &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	test_cmp_rev second^ HEAD^

Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 10 - am applies stgit series

expecting success of 4150.11 'am applies hg patch': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	git am patch1-hg.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	test_cmp_rev second^ HEAD^

Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 11 - am applies hg patch

expecting success of 4150.12 'am --patch-format=hg applies hg patch': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	git am --patch-format=hg <patch1-hg.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	test_cmp_rev second^ HEAD^

Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 12 - am --patch-format=hg applies hg patch

expecting success of 4150.13 'am with applypatch-msg hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook applypatch-msg <<-\EOF &&
	cat "$1" >actual-msg &&
	echo hook-message >"$1"
	EOF
	git am patch1 &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	echo hook-message >expected &&
	git log -1 --format=format:%B >actual &&
	test_cmp expected actual &&
	git log -1 --format=format:%B second >expected &&
	test_cmp expected actual-msg

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: hook-message
ok 13 - am with applypatch-msg hook

expecting success of 4150.14 'am with failing applypatch-msg hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook applypatch-msg <<-\EOF &&
	exit 1
	EOF
	test_must_fail git am patch1 &&
	test_path_is_dir .git/rebase-apply &&
	git diff --exit-code first &&
	test_cmp_rev first HEAD

HEAD is now at fa25691 hook-message
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  fa25691 hook-message

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> fa25691

HEAD is now at 6b2d93f first
ok 14 - am with failing applypatch-msg hook

expecting success of 4150.15 'am with pre-applypatch hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook pre-applypatch <<-\EOF &&
	git diff first >diff.actual
	exit 0
	EOF
	git am patch1 &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	git diff first..second >diff.expected &&
	test_cmp diff.expected diff.actual

HEAD is now at 6b2d93f first
HEAD is now at 6b2d93f first
Applying: second
ok 15 - am with pre-applypatch hook

expecting success of 4150.16 'am with failing pre-applypatch hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook pre-applypatch <<-\EOF &&
	exit 1
	EOF
	test_must_fail git am patch1 &&
	test_path_is_dir .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev first HEAD

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 16 - am with failing pre-applypatch hook

expecting success of 4150.17 'am with post-applypatch hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook post-applypatch <<-\EOF &&
	git rev-parse HEAD >head.actual
	git diff second >diff.actual
	exit 0
	EOF
	git am patch1 &&
	test_path_is_missing .git/rebase-apply &&
	test_cmp_rev second HEAD &&
	git rev-parse second >head.expected &&
	test_cmp head.expected head.actual &&
	git diff second >diff.expected &&
	test_cmp diff.expected diff.actual

HEAD is now at 6b2d93f first
HEAD is now at 6b2d93f first
Applying: second
ok 17 - am with post-applypatch hook

expecting success of 4150.18 'am with failing post-applypatch hook': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_hook post-applypatch <<-\EOF &&
	git rev-parse HEAD >head.actual
	exit 1
	EOF
	git am patch1 &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code second &&
	test_cmp_rev second HEAD &&
	git rev-parse second >head.expected &&
	test_cmp head.expected head.actual

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 18 - am with failing post-applypatch hook

expecting success of 4150.19 'am --scissors cuts the message at the scissors line': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout second &&
	git am --scissors patch-with-scissors-line.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code expected-for-scissors &&
	test_cmp_rev expected-for-scissors HEAD

HEAD is now at 88f8893 second
HEAD is now at 88f8893 second
Applying: Test that git-am --scissors cuts at the scissors line
ok 19 - am --scissors cuts the message at the scissors line

expecting success of 4150.20 'am --no-scissors overrides mailinfo.scissors': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout second &&
	test_config mailinfo.scissors true &&
	git am --no-scissors patch-with-scissors-line.eml &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code expected-for-no-scissors &&
	test_cmp_rev expected-for-no-scissors HEAD

HEAD is now at 27dee8a Test that git-am --scissors cuts at the scissors line
Previous HEAD position was 27dee8a Test that git-am --scissors cuts at the scissors line
HEAD is now at 88f8893 second
Applying: This line should not be included in the commit message with --scissors enabled.
ok 20 - am --no-scissors overrides mailinfo.scissors

expecting success of 4150.21 'setup: new author and committer': 
	GIT_AUTHOR_NAME="Another Thor" &&
	GIT_AUTHOR_EMAIL="a.thor@example.com" &&
	GIT_COMMITTER_NAME="Co M Miter" &&
	GIT_COMMITTER_EMAIL="c.miter@example.com" &&
	export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL

ok 21 - setup: new author and committer

expecting success of 4150.22 'am changes committer and keeps author': 
	test_tick &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	git am patch2 &&
	test_path_is_missing .git/rebase-apply &&
	test "$(git rev-parse main^^)" = "$(git rev-parse HEAD^^)" &&
	git diff --exit-code main..HEAD &&
	git diff --exit-code main^..HEAD^ &&
	compare author main HEAD &&
	compare author main^ HEAD^ &&
	test "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" = \
	     "$(git log -1 --pretty=format:"%cn <%ce>" HEAD)"

HEAD is now at 9f99c7e This line should not be included in the commit message with --scissors enabled.
Previous HEAD position was 9f99c7e This line should not be included in the commit message with --scissors enabled.
HEAD is now at 6b2d93f first
Applying: second
Applying: third
ok 22 - am changes committer and keeps author

expecting success of 4150.23 'am --signoff adds Signed-off-by: line': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b topic_2 first &&
	git am --signoff <patch2 &&
	{
		printf "third\n\nSigned-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" &&
		cat msg &&
		printf "Signed-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL"
	} >expected-log &&
	git log --pretty=%B -2 HEAD >actual &&
	test_cmp expected-log actual

HEAD is now at ae63ba7 third
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  ae63ba7 third
  480301e second

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> ae63ba7

Switched to a new branch 'topic_2'
Applying: second
Applying: third
ok 23 - am --signoff adds Signed-off-by: line

expecting success of 4150.24 'am stays in branch': 
	echo refs/heads/topic_2 >expected &&
	git symbolic-ref HEAD >actual &&
	test_cmp expected actual

ok 24 - am stays in branch

expecting success of 4150.25 'am --signoff does not add Signed-off-by: line if already there': 
	git format-patch --stdout first >patch3 &&
	git reset --hard first &&
	git am --signoff <patch3 &&
	git log --pretty=%B -2 HEAD >actual &&
	test_cmp expected-log actual

HEAD is now at 6b2d93f first
Applying: second
Applying: third
ok 25 - am --signoff does not add Signed-off-by: line if already there

expecting success of 4150.26 'am --signoff adds Signed-off-by: if another author is preset': 
	NAME="A N Other" &&
	EMAIL="a.n.other@example.com" &&
	{
		printf "third\n\nSigned-off-by: %s <%s>\nSigned-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" \
			"$NAME" "$EMAIL" &&
		cat msg &&
		printf "Signed-off-by: %s <%s>\nSigned-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" \
			"$NAME" "$EMAIL"
	} >expected-log &&
	git reset --hard first &&
	GIT_COMMITTER_NAME="$NAME" GIT_COMMITTER_EMAIL="$EMAIL" \
		git am --signoff <patch3 &&
	git log --pretty=%B -2 HEAD >actual &&
	test_cmp expected-log actual

HEAD is now at 6b2d93f first
Applying: second
Applying: third
ok 26 - am --signoff adds Signed-off-by: if another author is preset

expecting success of 4150.27 'am --signoff duplicates Signed-off-by: if it is not the last one': 
	NAME="A N Other" &&
	EMAIL="a.n.other@example.com" &&
	{
		printf "third\n\nSigned-off-by: %s <%s>\n\
Signed-off-by: %s <%s>\nSigned-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" \
			"$NAME" "$EMAIL" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" &&
		cat msg &&
		printf "Signed-off-by: %s <%s>\nSigned-off-by: %s <%s>\n\
Signed-off-by: %s <%s>\n\n" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL" \
			"$NAME" "$EMAIL" \
			"$GIT_COMMITTER_NAME" "$GIT_COMMITTER_EMAIL"
	} >expected-log &&
	git format-patch --stdout first >patch3 &&
	git reset --hard first &&
	git am --signoff <patch3 &&
	git log --pretty=%B -2 HEAD >actual &&
	test_cmp expected-log actual

HEAD is now at 6b2d93f first
Applying: second
Applying: third
ok 27 - am --signoff duplicates Signed-off-by: if it is not the last one

expecting success of 4150.28 'am without --keep removes Re: and [PATCH] stuff': 
	git format-patch --stdout HEAD^ >tmp &&
	sed -e "/^Subject/ s,\[PATCH,Re: Re: Re: & 1/5 v2] [foo," tmp >patch4 &&
	git reset --hard HEAD^ &&
	git am <patch4 &&
	git rev-parse HEAD >expected &&
	git rev-parse topic_2 >actual &&
	test_cmp expected actual

HEAD is now at b55fe7d second
Applying: third
ok 28 - am without --keep removes Re: and [PATCH] stuff

expecting success of 4150.29 'am --keep really keeps the subject': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout HEAD^ &&
	git am --keep patch4 &&
	test_path_is_missing .git/rebase-apply &&
	git cat-file commit HEAD >actual &&
	grep "Re: Re: Re: \[PATCH 1/5 v2\] \[foo\] third" actual

HEAD is now at e3375b9 third
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b55fe7d second
Applying: Re: Re: Re: [PATCH 1/5 v2] [foo] third
Re: Re: Re: [PATCH 1/5 v2] [foo] third
ok 29 - am --keep really keeps the subject

expecting success of 4150.30 'am --keep-non-patch really keeps the non-patch part': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout HEAD^ &&
	git am --keep-non-patch patch4 &&
	test_path_is_missing .git/rebase-apply &&
	git cat-file commit HEAD >actual &&
	grep "^\[foo\] third" actual

HEAD is now at f45669a Re: Re: Re: [PATCH 1/5 v2] [foo] third
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  f45669a Re: Re: Re: [PATCH 1/5 v2] [foo] third

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> f45669a

HEAD is now at b55fe7d second
Applying: [foo] third
[foo] third
ok 30 - am --keep-non-patch really keeps the non-patch part

expecting success of 4150.31 'setup am -3': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b base3way topic_2 &&
	sed -n -e "3,\$p" msg >file &&
	head -n 9 msg >>file &&
	git add file &&
	test_tick &&
	git commit -m "copied stuff"

HEAD is now at 44e89ee [foo] third
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  44e89ee [foo] third

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 44e89ee

Switched to a new branch 'base3way'
[base3way 899ba97] copied stuff
 Author: Another Thor <a.thor@example.com>
 1 file changed, 9 insertions(+)
ok 31 - setup am -3

expecting success of 4150.32 'am -3 falls back to 3-way merge': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b lorem2 base3way &&
	git am -3 lorem-move.patch &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code lorem

HEAD is now at 899ba97 copied stuff
Switched to a new branch 'lorem2'
Applying: moved stuff
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
899ba97 copied stuff
virtual moved stuff
found 1 common ancestor:
virtual f192f7dcb36af1757e1a66463400563fdcef521e
Auto-merging file
Applying: added another file
ok 32 - am -3 falls back to 3-way merge

expecting success of 4150.33 'am -3 -p0 can read --no-prefix patch': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b lorem3 base3way &&
	git am -3 -p0 lorem-zero.patch &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code lorem

HEAD is now at be86ef0 added another file
Switched to a new branch 'lorem3'
Applying: moved stuff
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
899ba97 copied stuff
virtual moved stuff
found 1 common ancestor:
virtual f192f7dcb36af1757e1a66463400563fdcef521e
Auto-merging file
Applying: added another file
ok 33 - am -3 -p0 can read --no-prefix patch

expecting success of 4150.34 'am with config am.threeWay falls back to 3-way merge': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b lorem4 base3way &&
	test_config am.threeWay 1 &&
	git am lorem-move.patch &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code lorem

HEAD is now at be86ef0 added another file
Switched to a new branch 'lorem4'
Applying: moved stuff
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
899ba97 copied stuff
virtual moved stuff
found 1 common ancestor:
virtual f192f7dcb36af1757e1a66463400563fdcef521e
Auto-merging file
Applying: added another file
ok 34 - am with config am.threeWay falls back to 3-way merge

expecting success of 4150.35 'am with config am.threeWay overridden by --no-3way': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout -b lorem5 base3way &&
	test_config am.threeWay 1 &&
	test_must_fail git am --no-3way lorem-move.patch &&
	test_path_is_dir .git/rebase-apply

HEAD is now at be86ef0 added another file
Switched to a new branch 'lorem5'
error: patch failed: file:28
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: moved stuff
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 35 - am with config am.threeWay overridden by --no-3way

expecting success of 4150.36 'am can rename a file': 
	grep "^rename from" rename.patch &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem^0 &&
	git am rename.patch &&
	test_path_is_missing .git/rebase-apply &&
	git update-index --refresh &&
	git diff --exit-code rename

rename from file
HEAD is now at 899ba97 copied stuff
Note: switching to 'lorem^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1048ce6 added another file
Applying: renamed a file
ok 36 - am can rename a file

expecting success of 4150.37 'am -3 can rename a file': 
	grep "^rename from" rename.patch &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem^0 &&
	git am -3 rename.patch &&
	test_path_is_missing .git/rebase-apply &&
	git update-index --refresh &&
	git diff --exit-code rename

rename from file
HEAD is now at 366127b renamed a file
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  366127b renamed a file

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 366127b

HEAD is now at 1048ce6 added another file
Applying: renamed a file
ok 37 - am -3 can rename a file

expecting success of 4150.38 'am -3 can rename a file after falling back to 3-way merge': 
	grep "^rename from" rename-add.patch &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem^0 &&
	git am -3 rename-add.patch &&
	test_path_is_missing .git/rebase-apply &&
	git update-index --refresh &&
	git diff --exit-code rename

rename from file
HEAD is now at 366127b renamed a file
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  366127b renamed a file

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 366127b

HEAD is now at 1048ce6 added another file
Applying: renamed a file and added another
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
1048ce6 added another file
virtual renamed a file and added another
found 1 common ancestor:
virtual d0e8bd27a52a44dc341376225b2fa62e456df51e
ok 38 - am -3 can rename a file after falling back to 3-way merge

expecting success of 4150.39 'am -3 -q is quiet': 
	rm -fr .git/rebase-apply &&
	git checkout -f lorem2 &&
	git reset base3way --hard &&
	git am -3 -q lorem-move.patch >output.out 2>&1 &&
	test_must_be_empty output.out

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  732bd79 renamed a file and added another

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 732bd79

Switched to branch 'lorem2'
HEAD is now at 899ba97 copied stuff
ok 39 - am -3 -q is quiet

expecting success of 4150.40 'am pauses on conflict': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem2^^ &&
	test_must_fail git am lorem-move.patch &&
	test -d .git/rebase-apply

HEAD is now at be86ef0 added another file
Note: switching to 'lorem2^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 899ba97 copied stuff
error: patch failed: file:28
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: moved stuff
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 40 - am pauses on conflict

expecting success of 4150.41 'am --show-current-patch': 
	git am --show-current-patch >actual.patch &&
	test_cmp .git/rebase-apply/0001 actual.patch

ok 41 - am --show-current-patch

expecting success of 4150.42 'am --show-current-patch=raw': 
	git am --show-current-patch=raw >actual.patch &&
	test_cmp .git/rebase-apply/0001 actual.patch

ok 42 - am --show-current-patch=raw

expecting success of 4150.43 'am --show-current-patch=diff': 
	git am --show-current-patch=diff >actual.patch &&
	test_cmp .git/rebase-apply/patch actual.patch

ok 43 - am --show-current-patch=diff

expecting success of 4150.44 'am accepts repeated --show-current-patch': 
	git am --show-current-patch --show-current-patch=raw >actual.patch &&
	test_cmp .git/rebase-apply/0001 actual.patch

ok 44 - am accepts repeated --show-current-patch

expecting success of 4150.45 'am detects incompatible --show-current-patch': 
	test_must_fail git am --show-current-patch=raw --show-current-patch=diff &&
	test_must_fail git am --show-current-patch --show-current-patch=diff

error: options '--show-current-patch=--show-current-patch' and 'diff=raw' cannot be used together
error: options '--show-current-patch=--show-current-patch' and 'diff=raw' cannot be used together
ok 45 - am detects incompatible --show-current-patch

expecting success of 4150.46 'am --skip works': 
	echo goodbye >expected &&
	git am --skip &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code lorem2^^ -- file &&
	test_cmp expected another

Applying: added another file
ok 46 - am --skip works

expecting success of 4150.47 'am --abort removes a stray directory': 
	mkdir .git/rebase-apply &&
	git am --abort &&
	test_path_is_missing .git/rebase-apply

ok 47 - am --abort removes a stray directory

expecting success of 4150.48 'am refuses patches when paused': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem2^^ &&

	test_must_fail git am lorem-move.patch &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev lorem2^^ HEAD &&

	test_must_fail git am <lorem-move.patch &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev lorem2^^ HEAD

HEAD is now at e608aee added another file
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  e608aee added another file

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> e608aee

HEAD is now at 899ba97 copied stuff
error: patch failed: file:28
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: moved stuff
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
fatal: previous rebase directory .git/rebase-apply still exists but mbox given.
ok 48 - am refuses patches when paused

expecting success of 4150.49 'am --resolved works': 
	echo goodbye >expected &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem2^^ &&
	test_must_fail git am lorem-move.patch &&
	test -d .git/rebase-apply &&
	echo resolved >>file &&
	git add file &&
	git am --resolved &&
	test_path_is_missing .git/rebase-apply &&
	test_cmp expected another

HEAD is now at 899ba97 copied stuff
HEAD is now at 899ba97 copied stuff
error: patch failed: file:28
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: moved stuff
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: moved stuff
Applying: added another file
ok 49 - am --resolved works

expecting success of 4150.50 'am --resolved fails if index has no changes': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout lorem2^^ &&
	test_must_fail git am lorem-move.patch &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev lorem2^^ HEAD &&
	test_must_fail git am --resolved &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev lorem2^^ HEAD

HEAD is now at 25c657e added another file
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  25c657e added another file
  d8fd27b moved stuff

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 25c657e

HEAD is now at 899ba97 copied stuff
error: patch failed: file:28
error: file: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: moved stuff
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: moved stuff
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 50 - am --resolved fails if index has no changes

expecting success of 4150.51 'am --resolved fails if index has unmerged entries': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout second &&
	test_must_fail git am -3 lorem-move.patch &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev second HEAD &&
	test_must_fail git am --resolved >err &&
	test_path_is_dir .git/rebase-apply &&
	test_cmp_rev second HEAD &&
	test_i18ngrep "still have unmerged paths" err

HEAD is now at 899ba97 copied stuff
Previous HEAD position was 899ba97 copied stuff
HEAD is now at 88f8893 second
Applying: moved stuff
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
88f8893 second
virtual moved stuff
found 1 common ancestor:
virtual f192f7dcb36af1757e1a66463400563fdcef521e
Auto-merging file
CONFLICT (content): Merge conflict in file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 moved stuff
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
You still have unmerged paths in your index.
ok 51 - am --resolved fails if index has unmerged entries

expecting success of 4150.52 'am takes patches from a Pine mailbox': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	cat pine patch1 | git am &&
	test_path_is_missing .git/rebase-apply &&
	git diff --exit-code main^..HEAD

HEAD is now at 88f8893 second
Previous HEAD position was 88f8893 second
HEAD is now at 6b2d93f first
Applying: second
ok 52 - am takes patches from a Pine mailbox

expecting success of 4150.53 'am fails on mail without patch': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	test_must_fail git am <failmail &&
	git am --abort &&
	test_path_is_missing .git/rebase-apply

HEAD is now at 7ce6dd8 second
Patch is empty.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To record the empty patch as an empty commit, run "git am --allow-empty".
To restore the original branch and stop patching, run "git am --abort".
ok 53 - am fails on mail without patch

expecting success of 4150.54 'am fails on empty patch': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	echo "---" >>failmail &&
	test_must_fail git am <failmail &&
	git am --skip &&
	test_path_is_missing .git/rebase-apply

HEAD is now at 7ce6dd8 second
error: No valid patches in input (allow with "--allow-empty")
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: git-foo.sh
Patch failed at 0001 git-foo.sh
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 54 - am fails on empty patch

expecting success of 4150.55 'am works from stdin in subdirectory': 
	rm -fr subdir &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	(
		mkdir -p subdir &&
		cd subdir &&
		git am <../patch1
	) &&
	git diff --exit-code second

HEAD is now at 7ce6dd8 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7ce6dd8 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7ce6dd8

HEAD is now at 6b2d93f first
Applying: second
ok 55 - am works from stdin in subdirectory

expecting success of 4150.56 'am works from file (relative path given) in subdirectory': 
	rm -fr subdir &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	(
		mkdir -p subdir &&
		cd subdir &&
		git am ../patch1
	) &&
	git diff --exit-code second

HEAD is now at 7ce6dd8 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7ce6dd8 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7ce6dd8

HEAD is now at 6b2d93f first
Applying: second
ok 56 - am works from file (relative path given) in subdirectory

expecting success of 4150.57 'am works from file (absolute path given) in subdirectory': 
	rm -fr subdir &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	P=$(pwd) &&
	(
		mkdir -p subdir &&
		cd subdir &&
		git am "$P/patch1"
	) &&
	git diff --exit-code second

HEAD is now at 7ce6dd8 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7ce6dd8 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7ce6dd8

HEAD is now at 6b2d93f first
Applying: second
ok 57 - am works from file (absolute path given) in subdirectory

expecting success of 4150.58 'am --committer-date-is-author-date': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	git am --committer-date-is-author-date patch1 &&
	git cat-file commit HEAD | sed -e "/^\$/q" >head1 &&
	sed -ne "/^author /s/.*> //p" head1 >at &&
	sed -ne "/^committer /s/.*> //p" head1 >ct &&
	test_cmp at ct

HEAD is now at 7ce6dd8 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7ce6dd8 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7ce6dd8

HEAD is now at 6b2d93f first
Applying: second
ok 58 - am --committer-date-is-author-date

expecting success of 4150.59 'am without --committer-date-is-author-date': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	git am patch1 &&
	git cat-file commit HEAD | sed -e "/^\$/q" >head1 &&
	sed -ne "/^author /s/.*> //p" head1 >at &&
	sed -ne "/^committer /s/.*> //p" head1 >ct &&
	! test_cmp at ct

HEAD is now at 5709bd2 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  5709bd2 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5709bd2

HEAD is now at 6b2d93f first
Applying: second
--- at	2022-12-28 07:45:30.974820105 +0000
+++ ct	2022-12-28 07:45:30.989820657 +0000
@@ -1 +1 @@
-1112912053 -0700
+1112912293 -0700
ok 59 - am without --committer-date-is-author-date

expecting success of 4150.60 'am --ignore-date': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	git am --ignore-date patch1 &&
	git cat-file commit HEAD | sed -e "/^\$/q" >head1 &&
	sed -ne "/^author /s/.*> //p" head1 >at &&
	grep "+0000" at

HEAD is now at 9fa39e1 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9fa39e1 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9fa39e1

HEAD is now at 6b2d93f first
Applying: second
1672213531 +0000
ok 60 - am --ignore-date

expecting success of 4150.61 'am into an unborn branch': 
	git rev-parse first^{tree} >expected &&
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	rm -fr subdir &&
	mkdir subdir &&
	git format-patch --numbered-files -o subdir -1 first &&
	(
		cd subdir &&
		git init &&
		git am 1
	) &&
	(
		cd subdir &&
		git rev-parse HEAD^{tree} >../actual
	) &&
	test_cmp expected actual

HEAD is now at 2fabb80 second
subdir/1
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4150-am/subdir/.git/
applying to an empty history
Applying: first
ok 61 - am into an unborn branch

expecting success of 4150.62 'am newline in subject': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	sed -e "s/second/second \\\n foo/" patch1 >patchnl &&
	git am <patchnl >output.out 2>&1 &&
	test_i18ngrep "^Applying: second \\\n foo$" output.out

HEAD is now at 2fabb80 second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2fabb80 second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2fabb80

HEAD is now at 6b2d93f first
Applying: second \n foo
ok 62 - am newline in subject

expecting success of 4150.63 'am -q is quiet': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout first &&
	test_tick &&
	git am -q <patch1 >output.out 2>&1 &&
	test_must_be_empty output.out

HEAD is now at bee6b96 second \n foo
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  bee6b96 second \n foo

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> bee6b96

HEAD is now at 6b2d93f first
ok 63 - am -q is quiet

expecting success of 4150.64 'am empty-file does not infloop': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	touch empty-file &&
	test_tick &&
	test_must_fail git am empty-file 2>actual &&
	echo Patch format detection failed. >expected &&
	test_cmp expected actual

HEAD is now at 0b3df7d second
ok 64 - am empty-file does not infloop

expecting success of 4150.65 'am --message-id really adds the message id': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout HEAD^ &&
	git am --message-id patch1.eml &&
	test_path_is_missing .git/rebase-apply &&
	git cat-file commit HEAD | tail -n1 >actual &&
	grep Message-Id patch1.eml >expected &&
	test_cmp expected actual

HEAD is now at 0b3df7d second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0b3df7d second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 0b3df7d

HEAD is now at 6b2d93f first
Applying: second
ok 65 - am --message-id really adds the message id

expecting success of 4150.66 'am.messageid really adds the message id': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout HEAD^ &&
	test_config am.messageid true &&
	git am patch1.eml &&
	test_path_is_missing .git/rebase-apply &&
	git cat-file commit HEAD | tail -n1 >actual &&
	grep Message-Id patch1.eml >expected &&
	test_cmp expected actual

HEAD is now at 9b1f34c second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9b1f34c second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9b1f34c

HEAD is now at 6b2d93f first
Applying: second
ok 66 - am.messageid really adds the message id

expecting success of 4150.67 'am --message-id -s signs off after the message id': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	git checkout HEAD^ &&
	git am -s --message-id patch1.eml &&
	test_path_is_missing .git/rebase-apply &&
	git cat-file commit HEAD | tail -n2 | head -n1 >actual &&
	grep Message-Id patch1.eml >expected &&
	test_cmp expected actual

HEAD is now at 9b1f34c second
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9b1f34c second

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9b1f34c

HEAD is now at 6b2d93f first
Applying: second
ok 67 - am --message-id -s signs off after the message id

expecting success of 4150.68 'am -3 works with rerere': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&

	# make patches one->two and two->three...
	test_commit one file &&
	test_commit two file &&
	test_commit three file &&
	git format-patch -2 --stdout >seq.patch &&

	# and create a situation that conflicts...
	git reset --hard one &&
	test_commit other file &&

	# enable rerere...
	test_config rerere.enabled true &&
	test_when_finished "rm -rf .git/rr-cache" &&

	# ...and apply. Our resolution is to skip the first
	# patch, and the rerere the second one.
	test_must_fail git am -3 seq.patch &&
	test_must_fail git am --skip &&
	echo resolved >file &&
	git add file &&
	git am --resolved &&

	# now apply again, and confirm that rerere engaged (we still
	# expect failure from am because rerere does not auto-commit
	# for us).
	git reset --hard other &&
	test_must_fail git am -3 seq.patch &&
	test_must_fail git am --skip &&
	echo resolved >expect &&
	test_cmp expect file

HEAD is now at 58671be second
[detached HEAD c69a679] one
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
[detached HEAD 5302f0e] two
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD e05c5d4] three
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at c69a679 one
[detached HEAD 8ec6c25] other
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Applying: two
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
8ec6c25 other
virtual two
found 1 common ancestor:
virtual 693a3de402bb23897ed5c931273e53c78eff0495
Auto-merging file
CONFLICT (content): Merge conflict in file
Recorded preimage for 'file'
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 two
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: three
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
8ec6c25 other
virtual three
found 1 common ancestor:
virtual aad8d5cef3915ab78b3227abaaac99b62db9eb54
Auto-merging file
CONFLICT (content): Merge conflict in file
Recorded preimage for 'file'
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Recorded resolution for 'file'.
Applying: three
HEAD is now at 8ec6c25 other
Applying: two
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
8ec6c25 other
virtual two
found 1 common ancestor:
virtual 693a3de402bb23897ed5c931273e53c78eff0495
Auto-merging file
CONFLICT (content): Merge conflict in file
Recorded preimage for 'file'
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 two
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: three
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
8ec6c25 other
virtual three
found 1 common ancestor:
virtual aad8d5cef3915ab78b3227abaaac99b62db9eb54
Auto-merging file
CONFLICT (content): Merge conflict in file
Resolved 'file' using previous resolution.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 68 - am -3 works with rerere

expecting success of 4150.69 'am -s unexpected trailer block': 
	rm -fr .git/rebase-apply &&
	git reset --hard &&
	echo signed >file &&
	git add file &&
	cat >msg <<-EOF &&
	subject here

	Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	[jc: tweaked log message]
	Signed-off-by: J C H <j@c.h>
	EOF
	git commit -F msg &&
	git cat-file commit HEAD | sed -e "1,/^$/d" >original &&
	git format-patch --stdout -1 >patch &&

	git reset --hard HEAD^ &&
	git am -s patch &&
	(
		cat original &&
		echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
	) >expect &&
	git cat-file commit HEAD | sed -e "1,/^$/d" >actual &&
	test_cmp expect actual &&

	cat >msg <<-\EOF &&
	subject here

	We make sure that there is a blank line between the log
	message proper and Signed-off-by: line added.
	EOF
	git reset HEAD^ &&
	git commit -F msg file &&
	git cat-file commit HEAD | sed -e "1,/^$/d" >original &&
	git format-patch --stdout -1 >patch &&

	git reset --hard HEAD^ &&
	git am -s patch &&

	(
		cat original &&
		echo &&
		echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
	) >expect &&
	git cat-file commit HEAD | sed -e "1,/^$/d" >actual &&
	test_cmp expect actual

HEAD is now at 8ec6c25 other
[detached HEAD aae1281] subject here
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 8ec6c25 other
Applying: subject here
Unstaged changes after reset:
M	file
[detached HEAD 683db8c] subject here
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 8ec6c25 other
Applying: subject here
ok 69 - am -s unexpected trailer block

expecting success of 4150.70 'am --patch-format=mboxrd handles mboxrd': 
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	echo mboxrd >>file &&
	git add file &&
	cat >msg <<-\INPUT_END &&
	mboxrd should escape the body

	From could trip up a loose mbox parser
	>From extra escape for reversibility
	INPUT_END
	git commit -F msg &&
	git format-patch --pretty=mboxrd --stdout -1 >mboxrd1 &&
	grep "^>From could trip up a loose mbox parser" mboxrd1 &&
	git checkout -f first &&
	git am --patch-format=mboxrd mboxrd1 &&
	git cat-file commit HEAD | tail -n4 >out &&
	test_cmp msg out

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  f8e9fae subject here

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> f8e9fae

HEAD is now at 6b2d93f first
[detached HEAD dc8a2ae] mboxrd should escape the body
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+)
>From could trip up a loose mbox parser
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  dc8a2ae mboxrd should escape the body

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> dc8a2ae

HEAD is now at 6b2d93f first
Applying: mboxrd should escape the body
ok 70 - am --patch-format=mboxrd handles mboxrd

expecting success of 4150.71 'am works with multi-line in-body headers': 
	FORTY="String that has a length of more than forty characters" &&
	LONG="$FORTY $FORTY" &&
	rm -fr .git/rebase-apply &&
	git checkout -f first &&
	echo one >> file &&
	git commit -am "$LONG

    Body test" --author="$LONG <long@example.com>" &&
	git format-patch --stdout -1 >patch &&
	# bump from, date, and subject down to in-body header
	perl -lpe "
		if (/^From:/) {
			print \"From: x <x\@example.com>\";
			print \"Date: Sat, 1 Jan 2000 00:00:00 +0000\";
			print \"Subject: x\n\";
		}
	" patch >msg &&
	git checkout HEAD^ &&
	git am msg &&
	# Ensure that the author and full message are present
	git cat-file commit HEAD | grep "^author.*long@example.com" &&
	git cat-file commit HEAD | grep "^$LONG$"

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  dc8a2ae mboxrd should escape the body

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> dc8a2ae

HEAD is now at 6b2d93f first
[detached HEAD c97171e] String that has a length of more than forty characters String that has a length of more than forty characters
 Author: String that has a length of more than forty characters String that has a length of more than forty characters <long@example.com>
 1 file changed, 1 insertion(+)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c97171e String that has a length of more than forty characters String that has a length of more than forty characters

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> c97171e

HEAD is now at 6b2d93f first
Applying: String that has a length of more than forty characters String that has a length of more than forty characters
author long@example.com <long@example.com> 1112912773 -0700
String that has a length of more than forty characters String that has a length of more than forty characters
ok 71 - am works with multi-line in-body headers

expecting success of 4150.72 'am --quit keeps HEAD where it is': 
	mkdir .git/rebase-apply &&
	>.git/rebase-apply/last &&
	>.git/rebase-apply/next &&
	git rev-parse HEAD^ >.git/ORIG_HEAD &&
	git rev-parse HEAD >expected &&
	git am --quit &&
	test_path_is_missing .git/rebase-apply &&
	git rev-parse HEAD >actual &&
	test_cmp expected actual

ok 72 - am --quit keeps HEAD where it is

expecting success of 4150.73 'am and .gitattibutes': 
	test_create_repo attributes &&
	(
		cd attributes &&
		test_commit init &&
		git config filter.test.clean "sed -e 's/smudged/clean/g'" &&
		git config filter.test.smudge "sed -e 's/clean/smudged/g'" &&

		test_commit second &&
		git checkout -b test HEAD^ &&

		echo "*.txt filter=test conflict-marker-size=10" >.gitattributes &&
		git add .gitattributes &&
		test_commit third &&

		echo "This text is smudged." >a.txt &&
		git add a.txt &&
		test_commit fourth &&

		git checkout -b removal HEAD^ &&
		git rm .gitattributes &&
		git add -u &&
		test_commit fifth &&
		git cherry-pick test &&

		git checkout -b conflict third &&
		echo "This text is different." >a.txt &&
		git add a.txt &&
		test_commit sixth &&

		git checkout test &&
		git format-patch --stdout main..HEAD >patches &&
		git reset --hard main &&
		git am patches &&
		grep "smudged" a.txt &&

		git checkout removal &&
		git reset --hard &&
		git format-patch --stdout main..HEAD >patches &&
		git reset --hard main &&
		git am patches &&
		grep "clean" a.txt &&

		git checkout conflict &&
		git reset --hard &&
		git format-patch --stdout main..HEAD >patches &&
		git reset --hard fourth &&
		test_must_fail git am -3 patches &&
		grep "<<<<<<<<<<" a.txt
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4150-am/attributes/.git/
[main (root-commit) b1affd7] init
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[main 078d104] second
 Author: Another Thor <a.thor@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
Switched to a new branch 'test'
[test e6fa290] third
 Author: Another Thor <a.thor@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 third.t
[test ca53213] fourth
 Author: Another Thor <a.thor@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 fourth.t
Switched to a new branch 'removal'
rm '.gitattributes'
[removal 126fc1c] fifth
 Author: Another Thor <a.thor@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 .gitattributes
 create mode 100644 fifth.t
[removal 0bb88c2] fourth
 Author: Another Thor <a.thor@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 fourth.t
Switched to a new branch 'conflict'
[conflict e6420d6] sixth
 Author: Another Thor <a.thor@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 sixth.t
Switched to branch 'test'
HEAD is now at 078d104 second
Applying: third
Applying: fourth
This text is smudged.
Switched to branch 'removal'
HEAD is now at 0bb88c2 fourth
HEAD is now at 078d104 second
Applying: third
Applying: fifth
Applying: fourth
This text is clean.
Switched to branch 'conflict'
HEAD is now at e6420d6 sixth
HEAD is now at ca53213 fourth
Applying: third
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
ca53213 fourth
virtual third
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
No changes -- Patch already applied.
Applying: sixth
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
ca53213 fourth
virtual sixth
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
CONFLICT (add/add): Merge conflict in a.txt
Auto-merging a.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 sixth
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
<<<<<<<<<< HEAD
ok 73 - am and .gitattibutes

expecting success of 4150.74 'apply binary blob in partial clone': 
	printf "\\000" >binary &&
	git add binary &&
	git commit -m "binary blob" &&
	git format-patch --stdout -m HEAD^ >patch &&

	test_create_repo server &&
	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	git clone --filter=blob:none "file://$(pwd)/server" client &&
	test_when_finished "rm -rf client" &&

	# Exercise to make sure that it works
	git -C client am ../patch

[detached HEAD 0dd6bd5] binary blob
 Author: Another Thor <a.thor@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 binary
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4150-am/server/.git/
Cloning into 'client'...
warning: You appear to have cloned an empty repository.
Applying: binary blob
applying to an empty history
ok 74 - apply binary blob in partial clone

expecting success of 4150.75 'an empty input file is error regardless of --empty option': 
	test_when_finished "git am --abort || :" &&
	test_must_fail git am --empty=drop empty.patch 2>actual &&
	echo "Patch format detection failed." >expected &&
	test_cmp expected actual

fatal: Resolve operation not in progress, we are not resuming.
ok 75 - an empty input file is error regardless of --empty option

expecting success of 4150.76 'invalid when passing the --empty option alone': 
	test_when_finished "git am --abort || :" &&
	git checkout empty-commit^ &&
	test_must_fail git am --empty empty-commit.patch 2>err &&
	echo "error: invalid value for '--empty': 'empty-commit.patch'" >expected &&
	test_cmp expected err

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  0dd6bd5 binary blob
  f2ac200 String that has a length of more than forty characters String that has a length of more than forty characters

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 0dd6bd5

HEAD is now at 756adf8 renamed a file and added another
fatal: Resolve operation not in progress, we are not resuming.
ok 76 - invalid when passing the --empty option alone

expecting success of 4150.77 'a message without a patch is an error (default)': 
	test_when_finished "git am --abort || :" &&
	test_must_fail git am empty-commit.patch >err &&
	grep "Patch is empty" err

Patch is empty.
ok 77 - a message without a patch is an error (default)

expecting success of 4150.78 'a message without a patch is an error where an explicit "--empty=stop" is given': 
	test_when_finished "git am --abort || :" &&
	test_must_fail git am --empty=stop empty-commit.patch >err &&
	grep "Patch is empty." err

Patch is empty.
ok 78 - a message without a patch is an error where an explicit "--empty=stop" is given

expecting success of 4150.79 'a message without a patch will be skipped when "--empty=drop" is given': 
	git am --empty=drop empty-commit.patch >output &&
	git rev-parse empty-commit^ >expected &&
	git rev-parse HEAD >actual &&
	test_cmp expected actual &&
	grep "Skipping: empty commit" output

Skipping: empty commit
ok 79 - a message without a patch will be skipped when "--empty=drop" is given

expecting success of 4150.80 'record as an empty commit when meeting e-mail message that lacks a patch': 
	git am --empty=keep empty-commit.patch >output &&
	test_path_is_missing .git/rebase-apply &&
	git show empty-commit --format="%B" >expected &&
	git show HEAD --format="%B" >actual &&
	grep -f actual expected &&
	grep "Creating an empty commit: empty commit" output

empty commit

Creating an empty commit: empty commit
ok 80 - record as an empty commit when meeting e-mail message that lacks a patch

expecting success of 4150.81 'skip an empty patch in the middle of an am session': 
	git checkout empty-commit^ &&
	test_must_fail git am empty-commit.patch >err &&
	grep "Patch is empty." err &&
	grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
	git am --skip &&
	test_path_is_missing .git/rebase-apply &&
	git rev-parse empty-commit^ >expected &&
	git rev-parse HEAD >actual &&
	test_cmp expected actual

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  8441a68 empty commit

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 8441a68

HEAD is now at 756adf8 renamed a file and added another
Patch is empty.
To record the empty patch as an empty commit, run "git am --allow-empty".
ok 81 - skip an empty patch in the middle of an am session

expecting success of 4150.82 'record an empty patch as an empty commit in the middle of an am session': 
	git checkout empty-commit^ &&
	test_must_fail git am empty-commit.patch >err &&
	grep "Patch is empty." err &&
	grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
	git am --allow-empty >output &&
	grep "No changes - recorded it as an empty commit." output &&
	test_path_is_missing .git/rebase-apply &&
	git show empty-commit --format="%B" >expected &&
	git show HEAD --format="%B" >actual &&
	grep -f actual expected

HEAD is now at 756adf8 renamed a file and added another
Patch is empty.
To record the empty patch as an empty commit, run "git am --allow-empty".
No changes - recorded it as an empty commit.
empty commit

ok 82 - record an empty patch as an empty commit in the middle of an am session

expecting success of 4150.83 'create an non-empty commit when the index IS changed though "--allow-empty" is given': 
	git checkout empty-commit^ &&
	test_must_fail git am empty-commit.patch >err &&
	: >empty-file &&
	git add empty-file &&
	git am --allow-empty &&
	git show empty-commit --format="%B" >expected &&
	git show HEAD --format="%B" >actual &&
	grep -f actual expected &&
	git diff HEAD^..HEAD --name-only

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  8441a68 empty commit

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 8441a68

HEAD is now at 756adf8 renamed a file and added another
Applying: empty commit
empty commit

empty-file
ok 83 - create an non-empty commit when the index IS changed though "--allow-empty" is given

expecting success of 4150.84 'cannot create empty commits when there is a clean index due to merge conflicts': 
	test_when_finished "git am --abort || :" &&
	git rev-parse HEAD >expected &&
	test_must_fail git am seq.patch &&
	test_must_fail git am --allow-empty >err &&
	! grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
	git rev-parse HEAD >actual &&
	test_cmp actual expected

error: file: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: two
Patch failed at 0001 two
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 84 - cannot create empty commits when there is a clean index due to merge conflicts

expecting success of 4150.85 'cannot create empty commits when there is unmerged index due to merge conflicts': 
	test_when_finished "git am --abort || :" &&
	git rev-parse HEAD >expected &&
	test_must_fail git am -3 seq.patch &&
	test_must_fail git am --allow-empty >err &&
	! grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
	git rev-parse HEAD >actual &&
	test_cmp actual expected

Applying: two
Using index info to reconstruct a base tree...
A	file
Falling back to patching base and 3-way merge...
Merging:
4d41173 empty commit
virtual two
found 1 common ancestor:
virtual 693a3de402bb23897ed5c931273e53c78eff0495
CONFLICT (modify/delete): file deleted in HEAD and modified in two. Version two of file left in tree.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 two
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 85 - cannot create empty commits when there is unmerged index due to merge conflicts

# passed all 85 test(s)
1..85
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4203-mailmap.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/.git/
expecting success of 4203.1 'setup commits and contacts file': 
	test_commit initial one one &&
	test_commit --author "nick1 <bugs@company.xx>" --append second one two

[main (root-commit) 3a2fdcb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
[main e0f6049] second
 Author: nick1 <bugs@company.xx>
 1 file changed, 1 insertion(+)
ok 1 - setup commits and contacts file

expecting success of 4203.2 'check-mailmap no arguments': 
	test_must_fail git check-mailmap

fatal: no contacts specified
ok 2 - check-mailmap no arguments

expecting success of 4203.3 'check-mailmap arguments': 
	cat >expect <<-EOF &&
	$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	nick1 <bugs@company.xx>
	EOF
	git check-mailmap \
		"$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" \
		"nick1 <bugs@company.xx>" >actual &&
	test_cmp expect actual

ok 3 - check-mailmap arguments

expecting success of 4203.4 'check-mailmap --stdin': 
	cat >expect <<-EOF &&
	$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	nick1 <bugs@company.xx>
	EOF
	git check-mailmap --stdin <expect >actual &&
	test_cmp expect actual

ok 4 - check-mailmap --stdin

expecting success of 4203.5 'check-mailmap --stdin arguments: no mapping': 
	test_when_finished "rm contacts" &&
	cat >contacts <<-EOF &&
	$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	nick1 <bugs@company.xx>
	EOF
	cat >expect <<-\EOF &&
	Internal Guy <bugs@company.xy>
	EOF
	cat contacts >>expect &&

	git check-mailmap --stdin "Internal Guy <bugs@company.xy>" \
		<contacts >actual &&
	test_cmp expect actual

ok 5 - check-mailmap --stdin arguments: no mapping

expecting success of 4203.6 'check-mailmap --stdin arguments: mapping': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	New Name <$GIT_AUTHOR_EMAIL>
	EOF
	cat >stdin <<-EOF &&
	Old Name <$GIT_AUTHOR_EMAIL>
	EOF

	cp .mailmap expect &&
	git check-mailmap --stdin <stdin >actual &&
	test_cmp expect actual &&

	cat .mailmap >>expect &&
	git check-mailmap --stdin "Another Old Name <$GIT_AUTHOR_EMAIL>" \
		<stdin >actual &&
	test_cmp expect actual

ok 6 - check-mailmap --stdin arguments: mapping

expecting success of 4203.7 'check-mailmap bogus contact': 
	test_must_fail git check-mailmap bogus

fatal: unable to parse contact: bogus
ok 7 - check-mailmap bogus contact

expecting success of 4203.8 'check-mailmap bogus contact --stdin': 
	test_must_fail git check-mailmap --stdin bogus </dev/null

fatal: unable to parse contact: bogus
ok 8 - check-mailmap bogus contact --stdin

expecting success of 4203.9 'No mailmap': 
	cat >expect <<-EOF &&
	$GIT_AUTHOR_NAME (1):
	      initial

	nick1 (1):
	      second

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 9 - No mailmap

expecting success of 4203.10 'setup default .mailmap': 
	cat >default.map <<-EOF
	Repo Guy <$GIT_AUTHOR_EMAIL>
	EOF

ok 10 - setup default .mailmap

expecting success of 4203.11 'test default .mailmap': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	cat >expect <<-\EOF &&
	Repo Guy (1):
	      initial

	nick1 (1):
	      second

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 11 - test default .mailmap

expecting success of 4203.12 'mailmap.file set': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	test_config mailmap.file internal.map &&
	cat >internal.map <<-\EOF &&
	Internal Guy <bugs@company.xx>
	EOF

	cat >expect <<-\EOF &&
	Internal Guy (1):
	      second

	Repo Guy (1):
	      initial

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual &&

	# The internal_mailmap/.mailmap file is an a subdirectory, but
	# as shown here it can also be outside the repository
	test_when_finished "rm -rf sub-repo" &&
	git clone . sub-repo &&
	(
		cd sub-repo &&
		cp ../.mailmap . &&
		git config mailmap.file ../internal.map &&
		git shortlog HEAD >actual &&
		test_cmp ../expect actual
	)

Cloning into 'sub-repo'...
done.
ok 12 - mailmap.file set

expecting success of 4203.13 'mailmap.file override': 
	test_config mailmap.file internal.map &&
	cat >internal.map <<-EOF &&
	Internal Guy <bugs@company.xx>
	External Guy <$GIT_AUTHOR_EMAIL>
	EOF

	cat >expect <<-\EOF &&
	External Guy (1):
	      initial

	Internal Guy (1):
	      second

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 13 - mailmap.file override

expecting success of 4203.14 'mailmap.file non-existent': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	cat >expect <<-\EOF &&
	Repo Guy (1):
	      initial

	nick1 (1):
	      second

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 14 - mailmap.file non-existent

expecting success of 4203.15 'name entry after email entry': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	test_config mailmap.file internal.map &&
	cat >internal.map <<-\EOF &&
	<bugs@company.xy> <bugs@company.xx>
	Internal Guy <bugs@company.xx>
	EOF

	cat >expect <<-\EOF &&
	Internal Guy (1):
	      second

	Repo Guy (1):
	      initial

	EOF

	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 15 - name entry after email entry

expecting success of 4203.16 'name entry after email entry, case-insensitive': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	test_config mailmap.file internal.map &&
	cat >internal.map <<-\EOF &&
	<bugs@company.xy> <bugs@company.xx>
	Internal Guy <BUGS@Company.xx>
	EOF

	cat >expect <<-\EOF &&
	Internal Guy (1):
	      second

	Repo Guy (1):
	      initial

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual &&

	cat >internal.map <<-\EOF &&
	NiCk <BuGs@CoMpAnY.Xy> NICK1 <BUGS@COMPANY.XX>
	EOF

	cat >expect <<-\EOF &&
	NiCk (1):
	      second

	Repo Guy (1):
	      initial

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 16 - name entry after email entry, case-insensitive

expecting success of 4203.17 'No mailmap files, but configured': 
	cat >expect <<-EOF &&
	$GIT_AUTHOR_NAME (1):
	      initial

	nick1 (1):
	      second

	EOF
	git shortlog HEAD >actual &&
	test_cmp expect actual

ok 17 - No mailmap files, but configured

expecting success of 4203.18 'setup mailmap blob tests': 
	git checkout -b map &&
	test_when_finished "git checkout main" &&
	cat >just-bugs <<-\EOF &&
	Blob Guy <bugs@company.xx>
	EOF
	cat >both <<-EOF &&
	Blob Guy <$GIT_AUTHOR_EMAIL>
	Blob Guy <bugs@company.xx>
	EOF
	printf "Tricky Guy <$GIT_AUTHOR_EMAIL>" >no-newline &&
	git add just-bugs both no-newline &&
	git commit -m "my mailmaps" &&

	cat >internal.map <<-EOF
	Internal Guy <$GIT_AUTHOR_EMAIL>
	EOF

Switched to a new branch 'map'
[map d53f9b1] my mailmaps
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 both
 create mode 100644 just-bugs
 create mode 100644 no-newline
Switched to branch 'main'
ok 18 - setup mailmap blob tests

expecting success of 4203.19 'mailmap.blob set': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	cat >expect <<-\EOF &&
	Blob Guy (1):
	      second

	Repo Guy (1):
	      initial

	EOF
	git -c mailmap.blob=map:just-bugs shortlog HEAD >actual &&
	test_cmp expect actual

ok 19 - mailmap.blob set

expecting success of 4203.20 'mailmap.blob overrides .mailmap': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	cat >expect <<-\EOF &&
	Blob Guy (2):
	      initial
	      second

	EOF
	git -c mailmap.blob=map:both shortlog HEAD >actual &&
	test_cmp expect actual

ok 20 - mailmap.blob overrides .mailmap

expecting success of 4203.21 'mailmap.file overrides mailmap.blob': 
	cat >expect <<-\EOF &&
	Blob Guy (1):
	      second

	Internal Guy (1):
	      initial

	EOF
	git \
	  -c mailmap.blob=map:both \
	  -c mailmap.file=internal.map \
	  shortlog HEAD >actual &&
	test_cmp expect actual

ok 21 - mailmap.file overrides mailmap.blob

expecting success of 4203.22 'mailmap.file can be missing': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	test_config mailmap.file nonexistent &&
	cat >expect <<-\EOF &&
	Repo Guy (1):
	      initial

	nick1 (1):
	      second

	EOF
	git shortlog HEAD >actual 2>err &&
	test_must_be_empty err &&
	test_cmp expect actual

ok 22 - mailmap.file can be missing

expecting success of 4203.23 'mailmap.blob can be missing': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	cat >expect <<-\EOF &&
	Repo Guy (1):
	      initial

	nick1 (1):
	      second

	EOF
	git -c mailmap.blob=map:nonexistent shortlog HEAD >actual 2>err &&
	test_must_be_empty err &&
	test_cmp expect actual

ok 23 - mailmap.blob can be missing

expecting success of 4203.24 'mailmap.blob might be the wrong type': 
	test_when_finished "rm .mailmap" &&
	cp default.map .mailmap &&

	git -c mailmap.blob=HEAD: shortlog HEAD >actual 2>err &&
	test_i18ngrep "mailmap is not a blob" err &&
	test_cmp expect actual

error: mailmap is not a blob: HEAD:
error: mailmap is not a blob: HEAD:
ok 24 - mailmap.blob might be the wrong type

expecting success of 4203.25 'mailmap.blob defaults to off in non-bare repo': 
	git init non-bare &&
	(
		cd non-bare &&
		test_commit one .mailmap "Fake Name <$GIT_AUTHOR_EMAIL>" &&
		cat >expect <<-\EOF &&
		     1	Fake Name
		EOF
		git shortlog -ns HEAD >actual &&
		test_cmp expect actual &&
		rm .mailmap &&
		cat >expect <<-EOF &&
		     1	$GIT_AUTHOR_NAME
		EOF
		git shortlog -ns HEAD >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/non-bare/.git/
[main (root-commit) c736a92] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .mailmap
ok 25 - mailmap.blob defaults to off in non-bare repo

expecting success of 4203.26 'mailmap.blob defaults to HEAD:.mailmap in bare repo': 
	git clone --bare non-bare bare &&
	(
		cd bare &&
		cat >expect <<-\EOF &&
		     1	Fake Name
		EOF
		git shortlog -ns HEAD >actual &&
		test_cmp expect actual
	)

Cloning into bare repository 'bare'...
done.
ok 26 - mailmap.blob defaults to HEAD:.mailmap in bare repo

expecting success of 4203.27 'mailmap.blob can handle blobs without trailing newline': 
	cat >expect <<-\EOF &&
	Tricky Guy (1):
	      initial

	nick1 (1):
	      second

	EOF
	git -c mailmap.blob=map:no-newline shortlog HEAD >actual &&
	test_cmp expect actual

ok 27 - mailmap.blob can handle blobs without trailing newline

expecting success of 4203.28 'single-character name': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	A <$GIT_AUTHOR_EMAIL>
	EOF

	cat >expect <<-EOF &&
	     1	A <$GIT_AUTHOR_EMAIL>
	     1	nick1 <bugs@company.xx>
	EOF
	git shortlog -es HEAD >actual &&
	test_cmp expect actual

ok 28 - single-character name

expecting success of 4203.29 'preserve canonical email case': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	<AUTHOR@example.com> <$GIT_AUTHOR_EMAIL>
	EOF

	cat >expect <<-EOF &&
	     1	$GIT_AUTHOR_NAME <AUTHOR@example.com>
	     1	nick1 <bugs@company.xx>
	EOF
	git shortlog -es HEAD >actual &&
	test_cmp expect actual

ok 29 - preserve canonical email case

expecting success of 4203.30 'gitmailmap(5) example output: setup': 
	test_create_repo doc &&
	test_commit -C doc --author "Joe Developer <joe@example.com>" A &&
	test_commit -C doc --author "Joe R. Developer <joe@example.com>" B &&
	test_commit -C doc --author "Jane Doe <jane@example.com>" C &&
	test_commit -C doc --author "Jane Doe <jane@laptop.(none)>" D &&
	test_commit -C doc --author "Jane D. <jane@desktop.(none)>" E

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/doc/.git/
[main (root-commit) 67a0780] A
 Author: Joe Developer <joe@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main e8ce153] B
 Author: Joe R. Developer <joe@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 23a89d3] C
 Author: Jane Doe <jane@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main d87dd0c] D
 Author: Jane Doe <jane@laptop.(none)>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[main 0e1b145] E
 Author: Jane D <jane@desktop.(none)>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
ok 30 - gitmailmap(5) example output: setup

expecting success of 4203.31 'gitmailmap(5) example output: example #1': 
	test_config -C doc mailmap.file ../doc.map &&
	cat >doc.map <<-\EOF &&
	Joe R. Developer <joe@example.com>
	Jane Doe <jane@example.com>
	Jane Doe <jane@desktop.(none)>
	EOF

	cat >expect <<-\EOF &&
	Author Joe Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Joe R. Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane Doe <jane@example.com> maps to Jane Doe <jane@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane Doe <jane@laptop.(none)> maps to Jane Doe <jane@laptop.(none)>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane D <jane@desktop.(none)> maps to Jane Doe <jane@desktop.(none)>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

ok 31 - gitmailmap(5) example output: example #1

expecting success of 4203.32 'gitmailmap(5) example output: example #2': 
	test_config -C doc mailmap.file ../doc.map &&
	cat >doc.map <<-\EOF &&
	Joe R. Developer <joe@example.com>
	Jane Doe <jane@example.com> <jane@laptop.(none)>
	Jane Doe <jane@example.com> <jane@desktop.(none)>
	EOF

	cat >expect <<-\EOF &&
	Author Joe Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Joe R. Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane Doe <jane@example.com> maps to Jane Doe <jane@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane Doe <jane@laptop.(none)> maps to Jane Doe <jane@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane D <jane@desktop.(none)> maps to Jane Doe <jane@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

ok 32 - gitmailmap(5) example output: example #2

expecting success of 4203.33 'gitmailmap(5) example output: example #3': 
	test_config -C doc mailmap.file ../doc.map &&
	cat >>doc.map <<-\EOF &&
	Joe R. Developer <joe@example.com> Joe <bugs@example.com>
	Jane Doe <jane@example.com> Jane <bugs@example.com>
	EOF

	test_commit -C doc --author "Joe <bugs@example.com>" F &&
	test_commit -C doc --author "Jane <bugs@example.com>" G &&

	cat >>expect <<-\EOF &&

	Author Joe <bugs@example.com> maps to Joe R. Developer <joe@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author Jane <bugs@example.com> maps to Jane Doe <jane@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

[main 3134606] F
 Author: Joe <bugs@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main c4be0f3] G
 Author: Jane <bugs@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
ok 33 - gitmailmap(5) example output: example #3

expecting success of 4203.34 'Shortlog output (complex mapping)': 
	test_config mailmap.file complex.map &&
	cat >complex.map <<-EOF &&
	Committed <$GIT_COMMITTER_EMAIL>
	<cto@company.xx> <cto@coompany.xx>
	Some Dude <some@dude.xx>         nick1 <bugs@company.xx>
	Other Author <other@author.xx>   nick2 <bugs@company.xx>
	Other Author <other@author.xx>         <nick2@company.xx>
	Santa Claus <santa.claus@northpole.xx> <me@company.xx>
	EOF

	test_commit --author "nick2 <bugs@company.xx>" --append third one three &&
	test_commit --author "nick2 <nick2@company.xx>" --append fourth one four &&
	test_commit --author "santa <me@company.xx>" --append fifth one five &&
	test_commit --author "claus <me@company.xx>" --append sixth one six &&
	test_commit --author "CTO <cto@coompany.xx>" --append seventh one seven &&

	cat >expect <<-EOF &&
	$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> (1):
	      initial

	CTO <cto@company.xx> (1):
	      seventh

	Other Author <other@author.xx> (2):
	      third
	      fourth

	Santa Claus <santa.claus@northpole.xx> (2):
	      fifth
	      sixth

	Some Dude <some@dude.xx> (1):
	      second

	EOF

	git shortlog -e HEAD >actual &&
	test_cmp expect actual


[main 2b10956] third
 Author: nick2 <bugs@company.xx>
 1 file changed, 1 insertion(+)
[main 8aa83da] fourth
 Author: nick2 <nick2@company.xx>
 1 file changed, 1 insertion(+)
[main 065dfc4] fifth
 Author: santa <me@company.xx>
 1 file changed, 1 insertion(+)
[main aac13b7] sixth
 Author: claus <me@company.xx>
 1 file changed, 1 insertion(+)
[main c4b3688] seventh
 Author: CTO <cto@coompany.xx>
 1 file changed, 1 insertion(+)
ok 34 - Shortlog output (complex mapping)

expecting success of 4203.35 'Log output (complex mapping)': 
	test_config mailmap.file complex.map &&

	cat >expect <<-EOF &&
	Author CTO <cto@coompany.xx> maps to CTO <cto@company.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author claus <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author santa <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author nick2 <nick2@company.xx> maps to Other Author <other@author.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author nick2 <bugs@company.xx> maps to Other Author <other@author.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author nick1 <bugs@company.xx> maps to Some Dude <some@dude.xx>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>

	Author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> maps to $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	Committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> maps to Committed <$GIT_COMMITTER_EMAIL>
	EOF

	git log --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

ok 35 - Log output (complex mapping)

expecting success of 4203.36 'Log output (local-part email address)': 
	cat >expect <<-EOF &&
	Author email cto@coompany.xx has local-part cto
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email me@company.xx has local-part me
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email me@company.xx has local-part me
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email nick2@company.xx has local-part nick2
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email bugs@company.xx has local-part bugs
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email bugs@company.xx has local-part bugs
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME

	Author email author@example.com has local-part author
	Committer email $GIT_COMMITTER_EMAIL has local-part $TEST_COMMITTER_LOCALNAME
	EOF

	git log --pretty=format:"Author email %ae has local-part %al%nCommitter email %ce has local-part %cl%n" >actual &&
	test_cmp expect actual

ok 36 - Log output (local-part email address)

expecting success of 4203.37 'Log output with --use-mailmap': 
	test_config mailmap.file complex.map &&

	cat >expect <<-EOF &&
	Author: CTO <cto@company.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Other Author <other@author.xx>
	Author: Other Author <other@author.xx>
	Author: Some Dude <some@dude.xx>
	Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	EOF

	git log --use-mailmap >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 37 - Log output with --use-mailmap

expecting success of 4203.38 'Log output with log.mailmap': 
	test_config mailmap.file complex.map &&

	cat >expect <<-EOF &&
	Author: CTO <cto@company.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Other Author <other@author.xx>
	Author: Other Author <other@author.xx>
	Author: Some Dude <some@dude.xx>
	Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	EOF

	git -c log.mailmap=True log >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 38 - Log output with log.mailmap

expecting success of 4203.39 'log.mailmap=false disables mailmap': 
	cat >expect <<-EOF &&
	Author: CTO <cto@coompany.xx>
	Author: claus <me@company.xx>
	Author: santa <me@company.xx>
	Author: nick2 <nick2@company.xx>
	Author: nick2 <bugs@company.xx>
	Author: nick1 <bugs@company.xx>
	Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	EOF
	git -c log.mailmap=false log >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 39 - log.mailmap=false disables mailmap

expecting success of 4203.40 '--no-use-mailmap disables mailmap': 
	cat >expect <<-EOF &&
	Author: CTO <cto@coompany.xx>
	Author: claus <me@company.xx>
	Author: santa <me@company.xx>
	Author: nick2 <nick2@company.xx>
	Author: nick2 <bugs@company.xx>
	Author: nick1 <bugs@company.xx>
	Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
	EOF
	git log --no-use-mailmap >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 40 - --no-use-mailmap disables mailmap

expecting success of 4203.41 'Grep author with --use-mailmap': 
	test_config mailmap.file complex.map &&

	cat >expect <<-\EOF &&
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	EOF
	git log --use-mailmap --author Santa >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 41 - Grep author with --use-mailmap

expecting success of 4203.42 'Grep author with log.mailmap': 
	test_config mailmap.file complex.map &&

	cat >expect <<-\EOF &&
	Author: Santa Claus <santa.claus@northpole.xx>
	Author: Santa Claus <santa.claus@northpole.xx>
	EOF

	git -c log.mailmap=True log --author Santa >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 42 - Grep author with log.mailmap

expecting success of 4203.43 'log.mailmap is true by default these days': 
	test_config mailmap.file complex.map &&
	git log --author Santa >log &&
	grep Author log >actual &&
	test_cmp expect actual

ok 43 - log.mailmap is true by default these days

expecting success of 4203.44 'Only grep replaced author with --use-mailmap': 
	test_config mailmap.file complex.map &&
	git log --use-mailmap --author "<cto@coompany.xx>" >actual &&
	test_must_be_empty actual

ok 44 - Only grep replaced author with --use-mailmap

expecting success of 4203.45 'Blame --porcelain output (complex mapping)': 
	test_config mailmap.file complex.map &&

	cat >expect <<-EOF &&
	1 1 1
	A U Thor
	2 2 1
	Some Dude
	3 3 1
	Other Author
	4 4 1
	Other Author
	5 5 1
	Santa Claus
	6 6 1
	Santa Claus
	7 7 1
	CTO
	EOF

	git blame --porcelain one >actual.blame &&

	NUM="[0-9][0-9]*" &&
	sed -n <actual.blame >actual.fuzz \
		-e "s/^author //p" \
		-e "s/^$OID_REGEX \\($NUM $NUM $NUM\\)$/\\1/p"  &&
	test_cmp expect actual.fuzz

ok 45 - Blame --porcelain output (complex mapping)

expecting success of 4203.46 'Blame output (complex mapping)': 
	git -c mailmap.file=complex.map blame one >a &&
	git blame one >b &&
	test_file_not_empty a &&
	! cmp a b

a b differ: char 20, line 1
ok 46 - Blame output (complex mapping)

expecting success of 4203.47 'commit --author honors mailmap': 
	test_config mailmap.file complex.map &&

	cat >expect <<-\EOF &&
	Some Dude <some@dude.xx>
	EOF

	test_must_fail git commit --author "nick" --allow-empty -meight &&
	git commit --author "Some Dude" --allow-empty -meight &&
	git show --pretty=format:"%an <%ae>%n" >actual &&
	test_cmp expect actual

fatal: --author 'nick' is not 'Name <email>' and matches no existing author
[main 5333a18] eight
 Author: Some Dude <some@dude.xx>
ok 47 - commit --author honors mailmap

expecting success of 4203.48 'comment syntax: setup': 
	test_create_repo comm &&
	test_commit -C comm --author "A <a@example.com>" A &&
	test_commit -C comm --author "B <b@example.com>" B &&
	test_commit -C comm --author "C <#@example.com>" C &&
	test_commit -C comm --author "D <d@e#ample.com>" D &&

	test_config -C comm mailmap.file ../doc.map &&
	cat >>doc.map <<-\EOF &&
	# Ah <a@example.com>

	; Bee <b@example.com>
	Cee <cee@example.com> <#@example.com>
	Dee <dee@example.com> <d@e#ample.com>
	EOF

	cat >expect <<-\EOF &&
	Author A <a@example.com> maps to A <a@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author B <b@example.com> maps to ; Bee <b@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author C <#@example.com> maps to Cee <cee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author D <d@e#ample.com> maps to Dee <dee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C comm log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/comm/.git/
[main (root-commit) e5fb972] A
 Author: A <a@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main b2084e0] B
 Author: B <b@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main dfb9b59] C
 Author: C <#@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main e621e29] D
 Author: D <d@e#ample.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
ok 48 - comment syntax: setup

expecting success of 4203.49 'whitespace syntax: setup': 
	test_create_repo space &&
	test_commit -C space --author "A <a@example.com>" A &&
	test_commit -C space --author "B <b@example.com>" B &&
	test_commit -C space --author " C <c@example.com>" C &&
	test_commit -C space --author " D  <d@example.com>" D &&
	test_commit -C space --author "E E <e@example.com>" E &&
	test_commit -C space --author "F  F <f@example.com>" F &&
	test_commit -C space --author "G   G <g@example.com>" G &&
	test_commit -C space --author "H   H <h@example.com>" H &&

	test_config -C space mailmap.file ../space.map &&
	cat >>space.map <<-\EOF &&
	Ah <ah@example.com> < a@example.com >
	Bee <bee@example.com  > <  b@example.com  >
	Cee <cee@example.com> C <c@example.com>
	dee <dee@example.com>  D  <d@example.com>
	eee <eee@example.com> E E <e@example.com>
	eff <eff@example.com> F  F <f@example.com>
	gee <gee@example.com> G   G <g@example.com>
	aitch <aitch@example.com> H  H <h@example.com>
	EOF

	cat >expect <<-\EOF &&
	Author A <a@example.com> maps to A <a@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author B <b@example.com> maps to B <b@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author C <c@example.com> maps to Cee <cee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author D <d@example.com> maps to dee <dee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author E E <e@example.com> maps to eee <eee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author F  F <f@example.com> maps to eff <eff@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author G   G <g@example.com> maps to gee <gee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author H   H <h@example.com> maps to H   H <h@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C space log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/space/.git/
[main (root-commit) 109233d] A
 Author: A <a@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 9456a31] B
 Author: B <b@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 764f2bb] C
 Author: C <c@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main 3d3ecaa] D
 Author: D <d@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[main fd62283] E
 Author: E E <e@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
[main c8debf7] F
 Author: F  F <f@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main c4818bd] G
 Author: G   G <g@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
[main 6924fe5] H
 Author: H   H <h@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
ok 49 - whitespace syntax: setup

expecting success of 4203.50 'empty syntax: setup': 
	test_create_repo empty &&
	test_commit -C empty --author "A <>" A &&
	test_commit -C empty --author "B <b@example.com>" B &&
	test_commit -C empty --author "C <c@example.com>" C &&

	test_config -C empty mailmap.file ../empty.map &&
	cat >>empty.map <<-\EOF &&
	Ah <ah@example.com> <>
	Bee <bee@example.com> <>
	Cee <> <c@example.com>
	EOF

	cat >expect <<-\EOF &&
	Author A <> maps to Bee <bee@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author B <b@example.com> maps to B <b@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>

	Author C <c@example.com> maps to C <c@example.com>
	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
	EOF
	git -C empty log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/empty/.git/
[main (root-commit) 63e5499] A
 Author: A <>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 26172cf] B
 Author: B <b@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 13cfd5e] C
 Author: C <c@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
ok 50 - empty syntax: setup

expecting success of 4203.51 'set up mailmap location tests': 
	git init --bare loc-bare &&
	git --git-dir=loc-bare --work-tree=. commit \
		--allow-empty -m foo --author="Orig <orig@example.com>" &&
	echo "New <new@example.com> <orig@example.com>" >loc-bare/.mailmap

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4203-mailmap/loc-bare/
[main (root-commit) 9a8f255] foo
 Author: Orig <orig@example.com>
ok 51 - set up mailmap location tests

expecting success of 4203.52 'bare repo with --work-tree finds mailmap at top-level': 
	git -C loc-bare --work-tree=. log -1 --format=%aE >actual &&
	echo new@example.com >expect &&
	test_cmp expect actual

ok 52 - bare repo with --work-tree finds mailmap at top-level

expecting success of 4203.53 'bare repo does not look in current directory': 
	git -C loc-bare log -1 --format=%aE >actual &&
	echo orig@example.com >expect &&
	test_cmp expect actual

ok 53 - bare repo does not look in current directory

expecting success of 4203.54 'non-git shortlog respects mailmap in current dir': 
	git --git-dir=loc-bare log -1 >input &&
	nongit cp "$TRASH_DIRECTORY/loc-bare/.mailmap" . &&
	nongit git shortlog -s <input >actual &&
	echo "     1	New" >expect &&
	test_cmp expect actual

ok 54 - non-git shortlog respects mailmap in current dir

expecting success of 4203.55 'shortlog on stdin respects mailmap from repo': 
	cp loc-bare/.mailmap . &&
	git shortlog -s <input >actual &&
	echo "     1	New" >expect &&
	test_cmp expect actual

ok 55 - shortlog on stdin respects mailmap from repo

expecting success of 4203.56 'find top-level mailmap from subdir': 
	git clone loc-bare loc-wt &&
	cp loc-bare/.mailmap loc-wt &&
	mkdir loc-wt/subdir &&
	git -C loc-wt/subdir log -1 --format=%aE >actual &&
	echo new@example.com >expect &&
	test_cmp expect actual

Cloning into 'loc-wt'...
done.
ok 56 - find top-level mailmap from subdir

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4203.57 'set up symlink tests': 
	git commit --allow-empty -m foo --author="Orig <orig@example.com>" &&
	echo "New <new@example.com> <orig@example.com>" >map &&
	rm -f .mailmap

[main 1de6515] foo
 Author: Orig <orig@example.com>
ok 57 - set up symlink tests

expecting success of 4203.58 'symlinks respected in mailmap.file': 
	test_when_finished "rm symlink" &&
	ln -s map symlink &&
	git -c mailmap.file="$(pwd)/symlink" log -1 --format=%aE >actual &&
	echo "new@example.com" >expect &&
	test_cmp expect actual

ok 58 - symlinks respected in mailmap.file

expecting success of 4203.59 'symlinks respected in non-repo shortlog': 
	git log -1 >input &&
	test_when_finished "nongit rm .mailmap" &&
	nongit ln -sf "$TRASH_DIRECTORY/map" .mailmap &&
	nongit git shortlog -s <input >actual &&
	echo "     1	New" >expect &&
	test_cmp expect actual

ok 59 - symlinks respected in non-repo shortlog

expecting success of 4203.60 'symlinks not respected in-tree': 
	test_when_finished "rm .mailmap" &&
	ln -s map .mailmap &&
	git log -1 --format=%aE >actual &&
	echo "orig@example.com" >expect &&
	test_cmp expect actual

error: unable to open mailmap at .mailmap: Too many levels of symbolic links
error: unable to open mailmap at .mailmap: Too many levels of symbolic links
ok 60 - symlinks not respected in-tree

expecting success of 4203.61 'prepare for cat-file --mailmap': 
	rm -f .mailmap &&
	git commit --allow-empty -m foo --author="Orig <orig@example.com>"

[main 92d9995] foo
 Author: Orig <orig@example.com>
ok 61 - prepare for cat-file --mailmap

expecting success of 4203.62 '--no-use-mailmap disables mailmap in cat-file': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	A U Thor <author@example.com> Orig <orig@example.com>
	EOF
	cat >expect <<-EOF &&
	author Orig <orig@example.com>
	EOF
	git cat-file --no-use-mailmap commit HEAD >log &&
	sed -n "/^author /s/\([^>]*>\).*/\1/p" log >actual &&
	test_cmp expect actual

ok 62 - --no-use-mailmap disables mailmap in cat-file

expecting success of 4203.63 '--use-mailmap enables mailmap in cat-file': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	A U Thor <author@example.com> Orig <orig@example.com>
	EOF
	cat >expect <<-EOF &&
	author A U Thor <author@example.com>
	EOF
	git cat-file --use-mailmap commit HEAD >log &&
	sed -n "/^author /s/\([^>]*>\).*/\1/p" log >actual &&
	test_cmp expect actual

ok 63 - --use-mailmap enables mailmap in cat-file

expecting success of 4203.64 '--no-mailmap disables mailmap in cat-file for annotated tag objects': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	Orig <orig@example.com> C O Mitter <committer@example.com>
	EOF
	cat >expect <<-EOF &&
	tagger C O Mitter <committer@example.com>
	EOF
	git tag -a -m "annotated tag" v1 &&
	git cat-file --no-mailmap -p v1 >log &&
	sed -n "/^tagger /s/\([^>]*>\).*/\1/p" log >actual &&
	test_cmp expect actual

ok 64 - --no-mailmap disables mailmap in cat-file for annotated tag objects

expecting success of 4203.65 '--mailmap enables mailmap in cat-file for annotated tag objects': 
	test_when_finished "rm .mailmap" &&
	cat >.mailmap <<-EOF &&
	Orig <orig@example.com> C O Mitter <committer@example.com>
	EOF
	cat >expect <<-EOF &&
	tagger Orig <orig@example.com>
	EOF
	git tag -a -m "annotated tag" v2 &&
	git cat-file --mailmap -p v2 >log &&
	sed -n "/^tagger /s/\([^>]*>\).*/\1/p" log >actual &&
	test_cmp expect actual

ok 65 - --mailmap enables mailmap in cat-file for annotated tag objects

# passed all 65 test(s)
1..65
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4204-patch-id.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4204-patch-id/.git/
expecting success of 4204.1 'setup': 
	str="ab cd ef gh ij kl mn op" &&
	test_write_lines $str >foo &&
	test_write_lines $str >bar &&
	git add foo bar &&
	git commit -a -m initial &&
	test_write_lines $str b >foo &&
	test_write_lines $str b >bar &&
	git commit -a -m first &&
	git checkout -b same main &&
	git commit --amend -m same-msg &&
	git checkout -b notsame main &&
	echo c >foo &&
	echo c >bar &&
	git commit --amend -a -m notsame-msg &&
	git checkout -b with_space main~ &&
	cat >foo <<-\EOF &&
	a  b
	c d
	e    f
	  g   h
	    i   j
	k l
	m   n
	op
	EOF
	cp foo bar &&
	git add foo bar &&
	git commit --amend -m "with spaces" &&
	test_write_lines bar foo >bar-then-foo &&
	test_write_lines foo bar >foo-then-bar


[main (root-commit) f34ad56] initial
 Author: A U Thor <author@example.com>
 2 files changed, 16 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
[main 637c384] first
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to a new branch 'same'
[same bdbb3b3] same-msg
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 2 insertions(+)
Switched to a new branch 'notsame'
[notsame e083d83] notsame-msg
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 2 insertions(+), 16 deletions(-)
Switched to a new branch 'with_space'
[with_space 983116d] with spaces
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 16 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
ok 1 - setup

expecting success of 4204.2 'patch-id output is well-formed': 
	git log -p -1 >log.output &&
	git patch-id <log.output >output &&
	grep "^$OID_REGEX $(git rev-parse HEAD)$" output

f2e75ee7c01deac4f2c51488f8e1cc6c0ff2719f 983116d734eae4c6993305600c31050ff5dea7f1
ok 2 - patch-id output is well-formed

expecting success of 4204.3 'patch-id detects equality': 
	get_patch_id main &&
	get_patch_id same &&
	test_cmp patch-id_main patch-id_same

ok 3 - patch-id detects equality

expecting success of 4204.4 'patch-id detects inequality': 
	get_patch_id main &&
	get_patch_id notsame &&
	! test_cmp patch-id_main patch-id_notsame

--- patch-id_main	2022-12-28 07:45:45.235344466 +0000
+++ patch-id_notsame	2022-12-28 07:45:45.310347223 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+6276aec15da664e9f9ce6dde29c2e2c71607e017
ok 4 - patch-id detects inequality

expecting success of 4204.5 'patch-id detects equality binary': 
	cat >.gitattributes <<-\EOF &&
	foo binary
	bar binary
	EOF
	get_patch_id main &&
	get_patch_id same &&
	git log -p -1 --binary main >top-diff.output &&
	calc_patch_id <top-diff.output main_binpatch &&
	git log -p -1 --binary same >top-diff.output &&
	calc_patch_id <top-diff.output same_binpatch &&
	test_cmp patch-id_main patch-id_main_binpatch &&
	test_cmp patch-id_same patch-id_same_binpatch &&
	test_cmp patch-id_main patch-id_same &&
	test_when_finished "rm .gitattributes"

ok 5 - patch-id detects equality binary

expecting success of 4204.6 'patch-id detects inequality binary': 
	cat >.gitattributes <<-\EOF &&
	foo binary
	bar binary
	EOF
	get_patch_id main &&
	get_patch_id notsame &&
	! test_cmp patch-id_main patch-id_notsame &&
	test_when_finished "rm .gitattributes"

--- patch-id_main	2022-12-28 07:45:45.830366344 +0000
+++ patch-id_notsame	2022-12-28 07:45:45.920369653 +0000
@@ -1 +1 @@
-6c46c4bc49d6541a5d8bcadf7808959c9520ae8b
+f92e710b91f98a3598e43f302e80d3e4a9bfe874
ok 6 - patch-id detects inequality binary

expecting success of 4204.7 'patch-id supports git-format-patch output': 
	get_patch_id main &&
	git checkout same &&
	git format-patch -1 --stdout >format-patch.output &&
	calc_patch_id same <format-patch.output &&
	test_cmp patch-id_main patch-id_same &&
	set $(git patch-id <format-patch.output) &&
	test "$2" = $(git rev-parse HEAD)

Switched to branch 'same'
ok 7 - patch-id supports git-format-patch output

expecting success of 4204.8 'whitespace is irrelevant in footer': 
	get_patch_id main &&
	git checkout same &&
	git format-patch -1 --stdout >format-patch.output &&
	sed "s/ \$//" format-patch.output | calc_patch_id same &&
	test_cmp patch-id_main patch-id_same

Already on 'same'
ok 8 - whitespace is irrelevant in footer

expecting success of 4204.9 'file order is irrelevant with --stable': 
	test_patch_id_file_order irrelevant --stable --stable

Already on 'same'
ok 9 - file order is irrelevant with --stable

expecting success of 4204.10 'file order is relevant with --unstable': 
	test_patch_id_file_order relevant --unstable --unstable

Already on 'same'
--- patch-id_order---unstable-relevant	2022-12-28 07:45:46.780401276 +0000
+++ patch-id_ordered-order---unstable-relevant	2022-12-28 07:45:46.940407159 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+892d1d3b08f44511b1fdc7cab43c0ad907ac772b
ok 10 - file order is relevant with --unstable

expecting success of 4204.11 'whitespace is relevant with --verbatim': 
	test_patch_id_whitespace relevant --verbatim --verbatim

--- patch-id_ws---verbatim-relevant	2022-12-28 07:45:47.060411572 +0000
+++ patch-id_ws-ws---verbatim-relevant	2022-12-28 07:45:47.140414514 +0000
@@ -1 +1 @@
-bd0ab1dc8a63de799337fc1a1b4e7c00ce6f7caf
+ec56d730a19f56a178db031386e5bcaabfea5677
ok 11 - whitespace is relevant with --verbatim

expecting success of 4204.12 'whitespace is irrelevant without --verbatim': 
	test_patch_id_whitespace irrelevant --stable --stable

ok 12 - whitespace is irrelevant without --verbatim

expecting success of 4204.13 'default is unstable': 
	test_patch_id relevant default

Already on 'same'
--- patch-id_order-default-relevant	2022-12-28 07:45:47.400424074 +0000
+++ patch-id_ordered-order-default-relevant	2022-12-28 07:45:47.530428854 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+892d1d3b08f44511b1fdc7cab43c0ad907ac772b
ok 13 - default is unstable

expecting success of 4204.14 'patchid.stable = true is stable': 
	test_config patchid.stable true &&
	test_patch_id irrelevant patchid.stable=true

Already on 'same'
ok 14 - patchid.stable = true is stable

expecting success of 4204.15 'patchid.stable = false is unstable': 
	test_config patchid.stable false &&
	test_patch_id relevant patchid.stable=false

Already on 'same'
--- patch-id_order-patchid.stable=false-relevant	2022-12-28 07:45:47.875441540 +0000
+++ patch-id_ordered-order-patchid.stable=false-relevant	2022-12-28 07:45:48.005446320 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+892d1d3b08f44511b1fdc7cab43c0ad907ac772b
ok 15 - patchid.stable = false is unstable

expecting success of 4204.16 'patchid.verbatim = true is correct and stable': 
	test_config patchid.verbatim true &&
	test_patch_id_whitespace relevant patchid.verbatim=true &&
	test_patch_id irrelevant patchid.verbatim=true

--- patch-id_ws-patchid.verbatim=true-relevant	2022-12-28 07:45:48.160452019 +0000
+++ patch-id_ws-ws-patchid.verbatim=true-relevant	2022-12-28 07:45:48.260455696 +0000
@@ -1 +1 @@
-bd0ab1dc8a63de799337fc1a1b4e7c00ce6f7caf
+ec56d730a19f56a178db031386e5bcaabfea5677
Already on 'same'
ok 16 - patchid.verbatim = true is correct and stable

expecting success of 4204.17 'patchid.verbatim = false is unstable': 
	test_config patchid.verbatim false &&
	test_patch_id relevant patchid.verbatim=false

Already on 'same'
--- patch-id_order-patchid.verbatim=false-relevant	2022-12-28 07:45:48.630469302 +0000
+++ patch-id_ordered-order-patchid.verbatim=false-relevant	2022-12-28 07:45:48.760474082 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+892d1d3b08f44511b1fdc7cab43c0ad907ac772b
ok 17 - patchid.verbatim = false is unstable

expecting success of 4204.18 '--unstable overrides patchid.stable = true': 
	test_config patchid.stable true &&
	test_patch_id relevant patchid.stable=true--unstable --unstable

Already on 'same'
--- patch-id_order-patchid.stable=true--unstable-relevant	2022-12-28 07:45:48.885478678 +0000
+++ patch-id_ordered-order-patchid.stable=true--unstable-relevant	2022-12-28 07:45:49.015483458 +0000
@@ -1 +1 @@
-c58fad5dc58fa3f768f4c9a1809f1bf824870825
+892d1d3b08f44511b1fdc7cab43c0ad907ac772b
ok 18 - --unstable overrides patchid.stable = true

expecting success of 4204.19 '--stable overrides patchid.stable = false': 
	test_config patchid.stable false &&
	test_patch_id irrelevant patchid.stable=false--stable --stable

Already on 'same'
ok 19 - --stable overrides patchid.stable = false

expecting success of 4204.20 '--verbatim overrides patchid.stable = false': 
	test_config patchid.stable false &&
	test_patch_id_whitespace relevant stable=false--verbatim --verbatim

--- patch-id_ws-stable=false--verbatim-relevant	2022-12-28 07:45:49.395497431 +0000
+++ patch-id_ws-ws-stable=false--verbatim-relevant	2022-12-28 07:45:49.465500005 +0000
@@ -1 +1 @@
-bd0ab1dc8a63de799337fc1a1b4e7c00ce6f7caf
+ec56d730a19f56a178db031386e5bcaabfea5677
ok 20 - --verbatim overrides patchid.stable = false

expecting success of 4204.21 'patch-id supports git-format-patch MIME output': 
	get_patch_id main &&
	git checkout same &&
	git format-patch -1 --attach --stdout >format-patch.output &&
	calc_patch_id <format-patch.output same &&
	test_cmp patch-id_main patch-id_same

Already on 'same'
ok 21 - patch-id supports git-format-patch MIME output

expecting success of 4204.22 'patch-id respects config from subdir': 
	test_config patchid.stable true &&
	mkdir subdir &&

	# copy these because test_patch_id() looks for them in
	# the current directory
	cp bar-then-foo foo-then-bar subdir &&

	(
		cd subdir &&
		test_patch_id irrelevant patchid.stable=true
	)

Already on 'same'
ok 22 - patch-id respects config from subdir

expecting success of 4204.23 'patch-id handles no-nl-at-eof markers': 
	cat >nonl <<-\EOF &&
	diff --git i/a w/a
	index e69de29..2e65efe 100644
	--- i/a
	+++ w/a
	@@ -0,0 +1 @@
	+a
	\ No newline at end of file
	diff --git i/b w/b
	index e69de29..6178079 100644
	--- i/b
	+++ w/b
	@@ -0,0 +1 @@
	+b
	EOF
	cat >withnl <<-\EOF &&
	diff --git i/a w/a
	index e69de29..7898192 100644
	--- i/a
	+++ w/a
	@@ -0,0 +1 @@
	+a
	diff --git i/b w/b
	index e69de29..6178079 100644
	--- i/b
	+++ w/b
	@@ -0,0 +1 @@
	+b
	EOF
	calc_patch_id nonl <nonl &&
	calc_patch_id withnl <withnl &&
	test_cmp patch-id_nonl patch-id_withnl &&
	calc_patch_id nonl-inc-ws --verbatim <nonl &&
	calc_patch_id withnl-inc-ws --verbatim <withnl &&
	! test_cmp patch-id_nonl-inc-ws patch-id_withnl-inc-ws

--- patch-id_nonl-inc-ws	2022-12-28 07:45:50.145525009 +0000
+++ patch-id_withnl-inc-ws	2022-12-28 07:45:50.185526479 +0000
@@ -1 +1 @@
-7ff2bcb9c001e010d881f0fccddc20be3af94012
+897be18d6338cd2e68bf17f3848b1c48bbc17459
ok 23 - patch-id handles no-nl-at-eof markers

expecting success of 4204.24 'patch-id handles diffs with one line of before/after': 
	cat >diffu1 <<-\EOF &&
	diff --git a/bar b/bar
	index bdaf90f..31051f6 100644
	--- a/bar
	+++ b/bar
	@@ -2 +2,2 @@
	 b
	+c
	diff --git a/car b/car
	index 00750ed..2ae5e34 100644
	--- a/car
	+++ b/car
	@@ -1 +1,2 @@
	 3
	+d
	diff --git a/foo b/foo
	index e439850..7146eb8 100644
	--- a/foo
	+++ b/foo
	@@ -2 +2,2 @@
	 a
	+e
	EOF
	calc_patch_id diffu1 <diffu1 &&
	test_config patchid.stable true &&
	calc_patch_id diffu1stable <diffu1

ok 24 - patch-id handles diffs with one line of before/after

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4206-log-follow-harder-copies.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4206-log-follow-harder-copies/.git/
expecting success of 4206.1 'add a file path0 and commit.': git add path0 &&
     git commit -m "Add path0"
[master (root-commit) 70f443e] Add path0
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 path0
ok 1 - add a file path0 and commit.

expecting success of 4206.2 'Change path0.': git add path0 &&
     git commit -m "Change path0"
[master 64b1451] Change path0
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 3 deletions(-)
ok 2 - Change path0.

expecting success of 4206.3 'copy path0 to path1.': git add path1 &&
     git commit -m "Copy path1 from path0"
[master 3227a3d] Copy path1 from path0
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 path1
ok 3 - copy path0 to path1.

expecting success of 4206.4 'find the copy path0 -> path1 harder': git log --follow --name-status --pretty="format:%s"  path1 > current
ok 4 - find the copy path0 -> path1 harder

expecting success of 4206.5 'validate the output.': compare_diff_patch current expected
ok 5 - validate the output.

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4207-log-decoration-colors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4207-log-decoration-colors/.git/
expecting success of 4207.1 'setup': 
	git config diff.color.commit yellow &&
	git config color.decorate.branch green &&
	git config color.decorate.remoteBranch red &&
	git config color.decorate.tag "reverse bold yellow" &&
	git config color.decorate.stash magenta &&
	git config color.decorate.grafted black &&
	git config color.decorate.HEAD cyan &&

	c_reset="<RESET>" &&

	c_commit="<YELLOW>" &&
	c_branch="<GREEN>" &&
	c_remoteBranch="<RED>" &&
	c_tag="<BOLD;REVERSE;YELLOW>" &&
	c_stash="<MAGENTA>" &&
	c_HEAD="<CYAN>" &&
	c_grafted="<BLACK>" &&

	test_commit A &&
	git clone . other &&
	(
		cd other &&
		test_commit A1
	) &&

	git remote add -f other ./other &&
	test_commit B &&
	git tag v1.0 &&
	echo >>A.t &&
	git stash save Changes to A.t

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Cloning into 'other'...
done.
[main ca6ed14] A1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A1.t
Updating other
From ./other
 * [new branch]      main       -> other/main
 * [new tag]         A1         -> A1
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Saved working directory and index state On main: Changes to A.t
ok 1 - setup

expecting success of 4207.2 'commit decorations colored correctly': 
	cat >expect <<-EOF &&
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
${c_reset}${c_branch}main${c_reset}${c_commit}, \
${c_reset}${c_tag}tag: v1.0${c_reset}${c_commit}, \
${c_reset}${c_tag}tag: B${c_reset}${c_commit})${c_reset} B
${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A1${c_reset}${c_commit}, \
${c_reset}${c_remoteBranch}other/main${c_reset}${c_commit})${c_reset} A1
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_stash}refs/stash${c_reset}${c_commit})${c_reset} \
On main: Changes to A.t
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
	EOF

	git log --first-parent --no-abbrev --decorate --oneline --color=always --all >actual &&
	cmp_filtered_decorations

ok 2 - commit decorations colored correctly

expecting success of 4207.3 'test coloring with replace-objects': 
	test_when_finished rm -rf .git/refs/replace* &&
	test_commit C &&
	test_commit D &&

	git replace HEAD~1 HEAD~2 &&

	cat >expect <<-EOF &&
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
${c_reset}${c_branch}main${c_reset}${c_commit}, \
${c_reset}${c_tag}tag: D${c_reset}${c_commit})${c_reset} D
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: C${c_reset}${c_commit}, \
${c_reset}${c_grafted}replaced${c_reset}${c_commit})${c_reset} B
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
EOF

	git log --first-parent --no-abbrev --decorate --oneline --color=always HEAD >actual &&
	cmp_filtered_decorations &&
	git replace -d HEAD~1 &&

	GIT_REPLACE_REF_BASE=refs/replace2/ git replace HEAD~1 HEAD~2 &&
	GIT_REPLACE_REF_BASE=refs/replace2/ git log --first-parent \
		--no-abbrev --decorate --oneline --color=always HEAD >actual &&
	cmp_filtered_decorations

[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Deleted replace ref '35a8500a6c116c9ddf35e140fa3277a7fe0b4196'
ok 3 - test coloring with replace-objects

expecting success of 4207.4 'test coloring with grafted commit': 
	test_when_finished rm -rf .git/refs/replace* &&

	git replace --graft HEAD HEAD~2 &&

	cat >expect <<-EOF &&
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
${c_reset}${c_branch}main${c_reset}${c_commit}, \
${c_reset}${c_tag}tag: D${c_reset}${c_commit}, \
${c_reset}${c_grafted}replaced${c_reset}${c_commit})${c_reset} D
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: v1.0${c_reset}${c_commit}, \
${c_reset}${c_tag}tag: B${c_reset}${c_commit})${c_reset} B
	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
	EOF

	git log --first-parent --no-abbrev --decorate --oneline --color=always HEAD >actual &&
	cmp_filtered_decorations &&
	git replace -d HEAD &&

	GIT_REPLACE_REF_BASE=refs/replace2/ git replace --graft HEAD HEAD~2 &&
	GIT_REPLACE_REF_BASE=refs/replace2/ git log --first-parent \
		--no-abbrev --decorate --oneline --color=always HEAD >actual &&
	cmp_filtered_decorations

Deleted replace ref 'be8f64ffad20e1c23faacd732a7ba726ee6f156d'
ok 4 - test coloring with grafted commit

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4205-log-pretty-formats.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4205-log-pretty-formats/.git/
expecting success of 4205.1 'set up basic repos': 
	>foo &&
	>bar &&
	git add foo &&
	test_tick &&
	git config i18n.commitEncoding $test_encoding &&
	commit_msg $test_encoding | git commit -F - &&
	git add bar &&
	test_tick &&
	git commit -m "add bar" &&
	git config --unset i18n.commitEncoding

 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
[master 91b4447] add bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
ok 1 - set up basic repos

expecting success of 4205.2 'alias builtin format': 
	git log --pretty=oneline >expected &&
	git config pretty.test-alias oneline &&
	git log --pretty=test-alias >actual &&
	test_cmp expected actual

ok 2 - alias builtin format

expecting success of 4205.3 'alias masking builtin format': 
	git log --pretty=oneline >expected &&
	git config pretty.oneline "%H" &&
	git log --pretty=oneline >actual &&
	test_cmp expected actual

ok 3 - alias masking builtin format

expecting success of 4205.4 'alias user-defined format': 
	git log --pretty="format:%h" >expected &&
	git config pretty.test-alias "format:%h" &&
	git log --pretty=test-alias >actual &&
	test_cmp expected actual

ok 4 - alias user-defined format

expecting success of 4205.5 'alias user-defined tformat with %s (ISO8859-1 encoding)': 
	git config i18n.logOutputEncoding $test_encoding &&
	git log --oneline >expected-s &&
	git log --pretty="tformat:%h %s" >actual-s &&
	git config --unset i18n.logOutputEncoding &&
	test_cmp expected-s actual-s

ok 5 - alias user-defined tformat with %s (ISO8859-1 encoding)

expecting success of 4205.6 'alias user-defined tformat with %s (utf-8 encoding)': 
	git log --oneline >expected-s &&
	git log --pretty="tformat:%h %s" >actual-s &&
	test_cmp expected-s actual-s

ok 6 - alias user-defined tformat with %s (utf-8 encoding)

expecting success of 4205.7 'alias user-defined tformat': 
	git log --pretty="tformat:%h" >expected &&
	git config pretty.test-alias "tformat:%h" &&
	git log --pretty=test-alias >actual &&
	test_cmp expected actual

ok 7 - alias user-defined tformat

expecting success of 4205.8 'alias non-existent format': 
	git config pretty.test-alias format-that-will-never-exist &&
	test_must_fail git log --pretty=test-alias

fatal: invalid --pretty format: test-alias
ok 8 - alias non-existent format

expecting success of 4205.9 'alias of an alias': 
	git log --pretty="tformat:%h" >expected &&
	git config pretty.test-foo "tformat:%h" &&
	git config pretty.test-bar test-foo &&
	git log --pretty=test-bar >actual && test_cmp expected actual

ok 9 - alias of an alias

expecting success of 4205.10 'alias masking an alias': 
	git log --pretty=format:"Two %H" >expected &&
	git config pretty.duplicate "format:One %H" &&
	git config --add pretty.duplicate "format:Two %H" &&
	git log --pretty=duplicate >actual &&
	test_cmp expected actual

ok 10 - alias masking an alias

expecting success of 4205.11 'alias loop': 
	git config pretty.test-foo test-bar &&
	git config pretty.test-bar test-foo &&
	test_must_fail git log --pretty=test-foo

fatal: invalid --pretty format: 'test-foo' references an alias which points to itself
ok 11 - alias loop

expecting success of 4205.12 'NUL separation': 
	printf "add bar\0$(commit_msg)" >expected &&
	git log -z --pretty="format:%s" >actual &&
	test_cmp expected actual

ok 12 - NUL separation

expecting success of 4205.13 'NUL termination': 
	printf "add bar\0$(commit_msg)\0" >expected &&
	git log -z --pretty="tformat:%s" >actual &&
	test_cmp expected actual

ok 13 - NUL termination

expecting success of 4205.14 'NUL separation with --stat': 
	stat0_part=$(git diff --stat HEAD^ HEAD) &&
	stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
	printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
	git log -z --stat --pretty="format:%s" >actual &&
	test_cmp expected actual

ok 14 - NUL separation with --stat

checking known breakage of 4205.15 'NUL termination with --stat': 
	stat0_part=$(git diff --stat HEAD^ HEAD) &&
	stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
	printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n0" >expected &&
	git log -z --stat --pretty="tformat:%s" >actual &&
	test_cmp expected actual

Binary files expected and actual differ
not ok 15 - NUL termination with --stat # TODO known breakage

expecting success of 4205.16 'NUL termination with --reflog --pretty=short': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 16 - NUL termination with --reflog --pretty=short

expecting success of 4205.17 'NUL termination with --reflog --pretty=medium': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 17 - NUL termination with --reflog --pretty=medium

expecting success of 4205.18 'NUL termination with --reflog --pretty=full': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 18 - NUL termination with --reflog --pretty=full

expecting success of 4205.19 'NUL termination with --reflog --pretty=fuller': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 19 - NUL termination with --reflog --pretty=fuller

expecting success of 4205.20 'NUL termination with --reflog --pretty=email': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 20 - NUL termination with --reflog --pretty=email

expecting success of 4205.21 'NUL termination with --reflog --pretty=raw': 
		revs="$(git rev-list --reflog)" &&
		for r in $revs
		do
			git show -s "$r" --pretty="$p" &&
			printf "\0" || return 1
		done >expect &&
		{
			git log -z --reflog --pretty="$p" &&
			printf "\0"
		} >actual &&
		test_cmp expect actual
	
ok 21 - NUL termination with --reflog --pretty=raw

expecting success of 4205.22 'NUL termination with --reflog --pretty=oneline': 
	revs="$(git rev-list --reflog)" &&
	for r in $revs
	do
		git show -s --pretty=oneline "$r" >raw &&
		cat raw | lf_to_nul || exit 1
	done >expect &&
	# the trailing NUL is already produced so we do not need to
	# output another one
	git log -z --pretty=oneline --reflog >actual &&
	test_cmp expect actual

ok 22 - NUL termination with --reflog --pretty=oneline

expecting success of 4205.23 'setup more commits': 
	test_commit "message one" one one message-one &&
	test_commit "message two" two two message-two &&
	head1=$(git rev-parse --verify --short HEAD~0) &&
	head2=$(git rev-parse --verify --short HEAD~1) &&
	head3=$(git rev-parse --verify --short HEAD~2) &&
	head4=$(git rev-parse --verify --short HEAD~3)

[master 23ca4f5] message one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
[master a015cbe] message two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two
ok 23 - setup more commits

expecting success of 4205.24 'left alignment formatting': 
	git log --pretty="tformat:%<(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	message two                            Z
	message one                            Z
	add bar                                Z
	$(commit_msg)                    Z
	EOF
	test_cmp expected actual

ok 24 - left alignment formatting

expecting success of 4205.25 'left alignment formatting. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	message two                            Z
	message one                            Z
	add bar                                Z
	$(commit_msg)                    Z
	EOF
	test_cmp expected actual

ok 25 - left alignment formatting. i18n.logOutputEncoding

expecting success of 4205.26 'left alignment formatting at the nth column': 
	git log --pretty="tformat:%h %<|(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1 message two                    Z
	$head2 message one                    Z
	$head3 add bar                        Z
	$head4 $(commit_msg)            Z
	EOF
	test_cmp expected actual

ok 26 - left alignment formatting at the nth column

expecting success of 4205.27 'left alignment formatting at the nth column': 
	COLUMNS=50 git log --pretty="tformat:%h %<|(-10)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1 message two                    Z
	$head2 message one                    Z
	$head3 add bar                        Z
	$head4 $(commit_msg)            Z
	EOF
	test_cmp expected actual

ok 27 - left alignment formatting at the nth column

expecting success of 4205.28 'left alignment formatting at the nth column. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %<|(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	$head1 message two                    Z
	$head2 message one                    Z
	$head3 add bar                        Z
	$head4 $(commit_msg)            Z
	EOF
	test_cmp expected actual

ok 28 - left alignment formatting at the nth column. i18n.logOutputEncoding

expecting success of 4205.29 'left alignment formatting with no padding': 
	git log --pretty="tformat:%<(1)%s" >actual &&
	cat <<-EOF >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 29 - left alignment formatting with no padding

expecting success of 4205.30 'left alignment formatting with no padding. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(1)%s" >actual &&
	cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 30 - left alignment formatting with no padding. i18n.logOutputEncoding

expecting success of 4205.31 'left alignment formatting with trunc': 
	git log --pretty="tformat:%<(10,trunc)%s" >actual &&
	qz_to_tab_space <<-\EOF >expected &&
	message ..
	message ..
	add bar  Z
	initial...
	EOF
	test_cmp expected actual

ok 31 - left alignment formatting with trunc

expecting success of 4205.32 'left alignment formatting with trunc. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s" >actual &&
	qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
	message ..
	message ..
	add bar  Z
	initial...
	EOF
	test_cmp expected actual

ok 32 - left alignment formatting with trunc. i18n.logOutputEncoding

expecting success of 4205.33 'left alignment formatting with ltrunc': 
	git log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	..sage two
	..sage one
	add bar  Z
	..${sample_utf8_part}lich
	EOF
	test_cmp expected actual

ok 33 - left alignment formatting with ltrunc

expecting success of 4205.34 'left alignment formatting with ltrunc. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	..sage two
	..sage one
	add bar  Z
	..${sample_utf8_part}lich
	EOF
	test_cmp expected actual

ok 34 - left alignment formatting with ltrunc. i18n.logOutputEncoding

expecting success of 4205.35 'left alignment formatting with mtrunc': 
	git log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
	qz_to_tab_space <<-\EOF >expected &&
	mess.. two
	mess.. one
	add bar  Z
	init..lich
	EOF
	test_cmp expected actual

ok 35 - left alignment formatting with mtrunc

expecting success of 4205.36 'left alignment formatting with mtrunc. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
	qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
	mess.. two
	mess.. one
	add bar  Z
	init..lich
	EOF
	test_cmp expected actual

ok 36 - left alignment formatting with mtrunc. i18n.logOutputEncoding

expecting success of 4205.37 'right alignment formatting': 
	git log --pretty="tformat:%>(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	Z                            message two
	Z                            message one
	Z                                add bar
	Z                    $(commit_msg)
	EOF
	test_cmp expected actual

ok 37 - right alignment formatting

expecting success of 4205.38 'right alignment formatting. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	Z                            message two
	Z                            message one
	Z                                add bar
	Z                    $(commit_msg)
	EOF
	test_cmp expected actual

ok 38 - right alignment formatting. i18n.logOutputEncoding

expecting success of 4205.39 'right alignment formatting at the nth column': 
	git log --pretty="tformat:%h %>|(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1                      message two
	$head2                      message one
	$head3                          add bar
	$head4              $(commit_msg)
	EOF
	test_cmp expected actual

ok 39 - right alignment formatting at the nth column

expecting success of 4205.40 'right alignment formatting at the nth column': 
	COLUMNS=50 git log --pretty="tformat:%h %>|(-10)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1                      message two
	$head2                      message one
	$head3                          add bar
	$head4              $(commit_msg)
	EOF
	test_cmp expected actual

ok 40 - right alignment formatting at the nth column

expecting success of 4205.41 'right alignment formatting at the nth column. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %>|(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	$head1                      message two
	$head2                      message one
	$head3                          add bar
	$head4              $(commit_msg)
	EOF
	test_cmp expected actual

ok 41 - right alignment formatting at the nth column. i18n.logOutputEncoding

expecting success of 4205.42 'right alignment formatting at the nth column with --graph. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --graph --pretty="tformat:%h %>|(40)%s" >actual &&
	iconv -f utf-8 -t $test_encoding >expected <<-EOF &&
	* $head1                    message two
	* $head2                    message one
	* $head3                        add bar
	* $head4            $(commit_msg)
	EOF
	test_cmp expected actual

ok 42 - right alignment formatting at the nth column with --graph. i18n.logOutputEncoding

expecting success of 4205.43 'right alignment formatting with no padding': 
	git log --pretty="tformat:%>(1)%s" >actual &&
	cat <<-EOF >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 43 - right alignment formatting with no padding

expecting success of 4205.44 'right alignment formatting with no padding and with --graph': 
	git log --graph --pretty="tformat:%>(1)%s" >actual &&
	cat <<-EOF >expected &&
	* message two
	* message one
	* add bar
	* $(commit_msg)
	EOF
	test_cmp expected actual

ok 44 - right alignment formatting with no padding and with --graph

expecting success of 4205.45 'right alignment formatting with no padding. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(1)%s" >actual &&
	cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 45 - right alignment formatting with no padding. i18n.logOutputEncoding

expecting success of 4205.46 'center alignment formatting': 
	git log --pretty="tformat:%><(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	Z             message two              Z
	Z             message one              Z
	Z               add bar                Z
	Z         $(commit_msg)          Z
	EOF
	test_cmp expected actual

ok 46 - center alignment formatting

expecting success of 4205.47 'center alignment formatting. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	Z             message two              Z
	Z             message one              Z
	Z               add bar                Z
	Z         $(commit_msg)          Z
	EOF
	test_cmp expected actual

ok 47 - center alignment formatting. i18n.logOutputEncoding

expecting success of 4205.48 'center alignment formatting at the nth column': 
	git log --pretty="tformat:%h %><|(40)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1           message two          Z
	$head2           message one          Z
	$head3             add bar            Z
	$head4       $(commit_msg)      Z
	EOF
	test_cmp expected actual

ok 48 - center alignment formatting at the nth column

expecting success of 4205.49 'center alignment formatting at the nth column': 
	COLUMNS=70 git log --pretty="tformat:%h %><|(-30)%s" >actual &&
	qz_to_tab_space <<-EOF >expected &&
	$head1           message two          Z
	$head2           message one          Z
	$head3             add bar            Z
	$head4       $(commit_msg)      Z
	EOF
	test_cmp expected actual

ok 49 - center alignment formatting at the nth column

expecting success of 4205.50 'center alignment formatting at the nth column. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %><|(40)%s" >actual &&
	qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	$head1           message two          Z
	$head2           message one          Z
	$head3             add bar            Z
	$head4       $(commit_msg)      Z
	EOF
	test_cmp expected actual

ok 50 - center alignment formatting at the nth column. i18n.logOutputEncoding

expecting success of 4205.51 'center alignment formatting with no padding': 
	git log --pretty="tformat:%><(1)%s" >actual &&
	cat <<-EOF >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 51 - center alignment formatting with no padding

expecting success of 4205.52 'center alignment formatting with no padding. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(1)%s" >actual &&
	cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
	message two
	message one
	add bar
	$(commit_msg)
	EOF
	test_cmp expected actual

ok 52 - center alignment formatting with no padding. i18n.logOutputEncoding

expecting success of 4205.53 'left/right alignment formatting with stealing': 
	git commit --amend -m short --author "long long long <long@me.com>" &&
	git log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
	cat <<-\EOF >expected &&
	short long  long long
	message ..   A U Thor
	add bar      A U Thor
	initial...   A U Thor
	EOF
	test_cmp expected actual

[master 2151238] short
 Author: long long long <long@me.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 two
ok 53 - left/right alignment formatting with stealing

expecting success of 4205.54 'left/right alignment formatting with stealing. i18n.logOutputEncoding': 
	git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
	cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
	short long  long long
	message ..   A U Thor
	add bar      A U Thor
	initial...   A U Thor
	EOF
	test_cmp expected actual

ok 54 - left/right alignment formatting with stealing. i18n.logOutputEncoding

expecting success of 4205.55 'strbuf_utf8_replace() not producing NUL': 
	git log --color --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)%C(auto)%d" |
		test_decode_color |
		nul_to_q >actual &&
	! grep Q actual

ok 55 - strbuf_utf8_replace() not producing NUL

expecting success of 4205.56 '--date=iso-strict %ad%cd is the same as %aI%cI': 
	git log --format=%ad%n%cd --date=iso-strict >expected &&
	git log --format=%aI%n%cI >actual &&
	test_cmp expected actual

ok 56 - --date=iso-strict %ad%cd is the same as %aI%cI

expecting success of 4205.57 '--date=short %ad%cd is the same as %as%cs': 
	git log --format=%ad%n%cd --date=short >expected &&
	git log --format=%as%n%cs >actual &&
	test_cmp expected actual

ok 57 - --date=short %ad%cd is the same as %as%cs

expecting success of 4205.58 '--date=human %ad%cd is the same as %ah%ch': 
	git log --format=%ad%n%cd --date=human >expected &&
	git log --format=%ah%n%ch >actual &&
	test_cmp expected actual

ok 58 - --date=human %ad%cd is the same as %ah%ch

expecting success of 4205.59 'set up log decoration tests': 
	head1=$(git rev-parse --verify HEAD~0) &&
	head2=$(git rev-parse --verify HEAD~1)

ok 59 - set up log decoration tests

expecting success of 4205.60 'log decoration properly follows tag chain': 
	git tag -a tag1 -m tag1 &&
	git tag -a tag2 -m tag2 tag1 &&
	git tag -d tag1 &&
	git commit --amend -m shorter &&
	git log --no-walk --tags --pretty="%H %d" --decorate=full >actual &&
	cat <<-EOF >expected &&
	$head2  (tag: refs/tags/message-one)
	$old_head1  (tag: refs/tags/message-two)
	$head1  (tag: refs/tags/tag2)
	EOF
	sort -k3 actual >actual1 &&
	test_cmp expected actual1

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag2 tag1^{}
hint: Disable this message with "git config advice.nestedTag false"
Deleted tag 'tag1' (was 3df4ac8)
[master e1fa287] shorter
 Author: long long long <long@me.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 two
ok 60 - log decoration properly follows tag chain

expecting success of 4205.61 'clean log decoration': 
	git log --no-walk --tags --pretty="%H %D" --decorate=full >actual &&
	cat >expected <<-EOF &&
	$head2 tag: refs/tags/message-one
	$old_head1 tag: refs/tags/message-two
	$head1 tag: refs/tags/tag2
	EOF
	sort -k3 actual >actual1 &&
	test_cmp expected actual1

ok 61 - clean log decoration

expecting success of 4205.62 'set up trailer tests': 
	echo "Some contents" >trailerfile &&
	git add trailerfile &&
	git commit -F - <<-EOF
	trailers: this commit message has trailers

	This commit is a test commit with trailers at the end. We parse this
	message and display the trailers using %(trailers).

	$(cat trailers)
	EOF

[master 6ec41af] trailers: this commit message has trailers
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 trailerfile
ok 62 - set up trailer tests

expecting success of 4205.63 'pretty format %(trailers) shows trailers': 
	git log --no-walk --pretty="%(trailers)" >actual &&
	{
		cat trailers &&
		echo
	} >expect &&
	test_cmp expect actual

ok 63 - pretty format %(trailers) shows trailers

expecting success of 4205.64 'pretty format %(trailers:) enables no options': 
	git log --no-walk --pretty="%(trailers:)" >actual &&
	# "expect" the same as the test above
	test_cmp expect actual

ok 64 - pretty format %(trailers:) enables no options

expecting success of 4205.65 '%(trailers:only) shows only "key: value" trailers': 
	git log --no-walk --pretty="%(trailers:only)" >actual &&
	{
		grep -v patch.description <trailers &&
		echo
	} >expect &&
	test_cmp expect actual

ok 65 - %(trailers:only) shows only "key: value" trailers

expecting success of 4205.66 '%(trailers:only=yes) shows only "key: value" trailers': 
	git log --no-walk --pretty=format:"%(trailers:only=yes)" >actual &&
	grep -v patch.description <trailers >expect &&
	test_cmp expect actual

ok 66 - %(trailers:only=yes) shows only "key: value" trailers

expecting success of 4205.67 '%(trailers:only=no) shows all trailers': 
	git log --no-walk --pretty=format:"%(trailers:only=no)" >actual &&
	cat trailers >expect &&
	test_cmp expect actual

ok 67 - %(trailers:only=no) shows all trailers

expecting success of 4205.68 '%(trailers:only=no,only=true) shows only "key: value" trailers': 
	git log --no-walk --pretty=format:"%(trailers:only=yes)" >actual &&
	grep -v patch.description <trailers >expect &&
	test_cmp expect actual

ok 68 - %(trailers:only=no,only=true) shows only "key: value" trailers

expecting success of 4205.69 '%(trailers:unfold) unfolds trailers': 
	git log --no-walk --pretty="%(trailers:unfold)" >actual &&
	{
		unfold <trailers &&
		echo
	} >expect &&
	test_cmp expect actual

ok 69 - %(trailers:unfold) unfolds trailers

expecting success of 4205.70 ':only and :unfold work together': 
	git log --no-walk --pretty="%(trailers:only,unfold)" >actual &&
	git log --no-walk --pretty="%(trailers:unfold,only)" >reverse &&
	test_cmp actual reverse &&
	{
		grep -v patch.description <trailers | unfold &&
		echo
	} >expect &&
	test_cmp expect actual

ok 70 - :only and :unfold work together

expecting success of 4205.71 'pretty format %(trailers:key=foo) shows that trailer': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by)" >actual &&
	echo "Acked-by: A U Thor <author@example.com>" >expect &&
	test_cmp expect actual

ok 71 - pretty format %(trailers:key=foo) shows that trailer

expecting success of 4205.72 'pretty format %(trailers:key=foo) is case insensitive': 
	git log --no-walk --pretty="format:%(trailers:key=AcKed-bY)" >actual &&
	echo "Acked-by: A U Thor <author@example.com>" >expect &&
	test_cmp expect actual

ok 72 - pretty format %(trailers:key=foo) is case insensitive

expecting success of 4205.73 'pretty format %(trailers:key=foo:) trailing colon also works': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by:)" >actual &&
	echo "Acked-by: A U Thor <author@example.com>" >expect &&
	test_cmp expect actual

ok 73 - pretty format %(trailers:key=foo:) trailing colon also works

expecting success of 4205.74 'pretty format %(trailers:key=foo) multiple keys': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by:,key=Signed-off-By)" >actual &&
	grep -v patch.description <trailers >expect &&
	test_cmp expect actual

ok 74 - pretty format %(trailers:key=foo) multiple keys

expecting success of 4205.75 '%(trailers:key=nonexistent) becomes empty': 
	git log --no-walk --pretty="x%(trailers:key=Nacked-by)x" >actual &&
	echo "xx" >expect &&
	test_cmp expect actual

ok 75 - %(trailers:key=nonexistent) becomes empty

expecting success of 4205.76 '%(trailers:key=foo) handles multiple lines even if folded': 
	git log --no-walk --pretty="format:%(trailers:key=Signed-Off-by)" >actual &&
	grep -v patch.description <trailers | grep -v Acked-by >expect &&
	test_cmp expect actual

ok 76 - %(trailers:key=foo) handles multiple lines even if folded

expecting success of 4205.77 '%(trailers:key=foo,unfold) properly unfolds': 
	git log --no-walk --pretty="format:%(trailers:key=Signed-Off-by,unfold)" >actual &&
	unfold <trailers | grep Signed-off-by >expect &&
	test_cmp expect actual

ok 77 - %(trailers:key=foo,unfold) properly unfolds

expecting success of 4205.78 'pretty format %(trailers:key=foo,only=no) also includes nontrailer lines': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by,only=no)" >actual &&
	{
		echo "Acked-by: A U Thor <author@example.com>" &&
		grep patch.description <trailers
	} >expect &&
	test_cmp expect actual

ok 78 - pretty format %(trailers:key=foo,only=no) also includes nontrailer lines

expecting success of 4205.79 '%(trailers:key) without value is error': 
	git log --no-walk --pretty="tformat:%(trailers:key)" >actual &&
	echo "%(trailers:key)" >expect &&
	test_cmp expect actual

ok 79 - %(trailers:key) without value is error

expecting success of 4205.80 '%(trailers:keyonly) shows only keys': 
	git log --no-walk --pretty="format:%(trailers:keyonly)" >actual &&
	test_write_lines \
		"Signed-off-by" \
		"Acked-by" \
		"[ v2 updated patch description ]" \
		"Signed-off-by" >expect &&
	test_cmp expect actual

ok 80 - %(trailers:keyonly) shows only keys

expecting success of 4205.81 '%(trailers:key=foo,keyonly) shows only key': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by,keyonly)" >actual &&
	echo "Acked-by" >expect &&
	test_cmp expect actual

ok 81 - %(trailers:key=foo,keyonly) shows only key

expecting success of 4205.82 '%(trailers:key=foo,valueonly) shows only value': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by,valueonly)" >actual &&
	echo "A U Thor <author@example.com>" >expect &&
	test_cmp expect actual

ok 82 - %(trailers:key=foo,valueonly) shows only value

expecting success of 4205.83 '%(trailers:valueonly) shows only values': 
	git log --no-walk --pretty="format:%(trailers:valueonly)" >actual &&
	test_write_lines \
		"A U Thor <author@example.com>" \
		"A U Thor <author@example.com>" \
		"[ v2 updated patch description ]" \
		"A U Thor" \
		"  <author@example.com>" >expect &&
	test_cmp expect actual

ok 83 - %(trailers:valueonly) shows only values

expecting success of 4205.84 '%(trailers:key=foo,keyonly,valueonly) shows nothing': 
	git log --no-walk --pretty="format:%(trailers:key=Acked-by,keyonly,valueonly)" >actual &&
	echo >expect &&
	test_cmp expect actual

ok 84 - %(trailers:key=foo,keyonly,valueonly) shows nothing

expecting success of 4205.85 'pretty format %(trailers:separator) changes separator': 
	git log --no-walk --pretty=format:"X%(trailers:separator=%x00)X" >actual &&
	(
		printf "XSigned-off-by: A U Thor <author@example.com>\0" &&
		printf "Acked-by: A U Thor <author@example.com>\0" &&
		printf "[ v2 updated patch description ]\0" &&
		printf "Signed-off-by: A U Thor\n  <author@example.com>X"
	) >expect &&
	test_cmp expect actual

ok 85 - pretty format %(trailers:separator) changes separator

expecting success of 4205.86 'pretty format %(trailers:separator=X,unfold) changes separator': 
	git log --no-walk --pretty=format:"X%(trailers:separator=%x00,unfold)X" >actual &&
	(
		printf "XSigned-off-by: A U Thor <author@example.com>\0" &&
		printf "Acked-by: A U Thor <author@example.com>\0" &&
		printf "[ v2 updated patch description ]\0" &&
		printf "Signed-off-by: A U Thor <author@example.com>X"
	) >expect &&
	test_cmp expect actual

ok 86 - pretty format %(trailers:separator=X,unfold) changes separator

expecting success of 4205.87 'pretty format %(trailers:key_value_separator) changes key-value separator': 
	git log --no-walk --pretty=format:"X%(trailers:key_value_separator=%x00)X" >actual &&
	(
		printf "XSigned-off-by\0A U Thor <author@example.com>\n" &&
		printf "Acked-by\0A U Thor <author@example.com>\n" &&
		printf "[ v2 updated patch description ]\n" &&
		printf "Signed-off-by\0A U Thor\n  <author@example.com>\nX"
	) >expect &&
	test_cmp expect actual

ok 87 - pretty format %(trailers:key_value_separator) changes key-value separator

expecting success of 4205.88 'pretty format %(trailers:key_value_separator,unfold) changes key-value separator': 
	git log --no-walk --pretty=format:"X%(trailers:key_value_separator=%x00,unfold)X" >actual &&
	(
		printf "XSigned-off-by\0A U Thor <author@example.com>\n" &&
		printf "Acked-by\0A U Thor <author@example.com>\n" &&
		printf "[ v2 updated patch description ]\n" &&
		printf "Signed-off-by\0A U Thor <author@example.com>\nX"
	) >expect &&
	test_cmp expect actual

ok 88 - pretty format %(trailers:key_value_separator,unfold) changes key-value separator

expecting success of 4205.89 'pretty format %(trailers:separator,key_value_separator) changes both separators': 
	git log --no-walk --pretty=format:"%(trailers:separator=%x00,key_value_separator=%x00%x00,unfold)" >actual &&
	(
		printf "Signed-off-by\0\0A U Thor <author@example.com>\0" &&
		printf "Acked-by\0\0A U Thor <author@example.com>\0" &&
		printf "[ v2 updated patch description ]\0" &&
		printf "Signed-off-by\0\0A U Thor <author@example.com>"
	) >expect &&
	test_cmp expect actual

ok 89 - pretty format %(trailers:separator,key_value_separator) changes both separators

expecting success of 4205.90 'pretty format %(trailers) combining separator/key/keyonly/valueonly': 
	git commit --allow-empty -F - <<-\EOF &&
	Important fix

	The fix is explained here

	Closes: #1234
	EOF

	git commit --allow-empty -F - <<-\EOF &&
	Another fix

	The fix is explained here

	Closes: #567
	Closes: #890
	EOF

	git commit --allow-empty -F - <<-\EOF &&
	Does not close any tickets
	EOF

	git log --pretty="%s% (trailers:separator=%x2c%x20,key=Closes,valueonly)" HEAD~3.. >actual &&
	test_write_lines \
		"Does not close any tickets" \
		"Another fix #567, #890" \
		"Important fix #1234" >expect &&
	test_cmp expect actual &&

	git log --pretty="%s% (trailers:separator=%x2c%x20,key=Closes,keyonly)" HEAD~3.. >actual &&
	test_write_lines \
		"Does not close any tickets" \
		"Another fix Closes, Closes" \
		"Important fix Closes" >expect &&
	test_cmp expect actual

[master 7552cfc] Important fix
 Author: A U Thor <author@example.com>
[master d209f85] Another fix
 Author: A U Thor <author@example.com>
[master 0407bf5] Does not close any tickets
 Author: A U Thor <author@example.com>
ok 90 - pretty format %(trailers) combining separator/key/keyonly/valueonly

expecting success of 4205.91 'trailer parsing not fooled by --- line': 
	git commit --allow-empty -F - <<-\EOF &&
	this is the subject

	This is the body. The message has a "---" line which would confuse a
	message+patch parser. But here we know we have only a commit message,
	so we get it right.

	trailer: wrong
	---
	This is more body.

	trailer: right
	EOF

	{
		echo "trailer: right" &&
		echo
	} >expect &&
	git log --no-walk --format="%(trailers)" >actual &&
	test_cmp expect actual

[master 46ac407] this is the subject
 Author: A U Thor <author@example.com>
ok 91 - trailer parsing not fooled by --- line

expecting success of 4205.92 'set up %S tests': 
	git checkout --orphan source-a &&
	test_commit one &&
	test_commit two &&
	git checkout -b source-b HEAD^ &&
	test_commit three

Switched to a new branch 'source-a'
[source-a (root-commit) aa5db7b] one
 Author: A U Thor <author@example.com>
 6 files changed, 4 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
 create mode 100644 one
 create mode 100644 one.t
 create mode 100644 trailerfile
 create mode 100644 two
[source-a cb4b6b5] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to a new branch 'source-b'
[source-b d08742c] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 92 - set up %S tests

expecting success of 4205.93 'log --format=%S paints branch names': 
	cat >expect <<-\EOF &&
	source-b
	source-a
	source-b
	EOF
	git log --format=%S source-a source-b >actual &&
	test_cmp expect actual

ok 93 - log --format=%S paints branch names

expecting success of 4205.94 'log --format=%S paints tag names': 
	git tag -m tagged source-tag &&
	cat >expect <<-\EOF &&
	source-tag
	source-a
	source-tag
	EOF
	git log --format=%S source-tag source-a >actual &&
	test_cmp expect actual

ok 94 - log --format=%S paints tag names

expecting success of 4205.95 'log --format=%S paints symmetric ranges': 
	cat >expect <<-\EOF &&
	source-b
	source-a
	EOF
	git log --format=%S source-a...source-b >actual &&
	test_cmp expect actual

ok 95 - log --format=%S paints symmetric ranges

expecting success of 4205.96 '%S in git log --format works with other placeholders (part 1)': 
	git log --format="source-b %h" source-b >expect &&
	git log --format="%S %h" source-b >actual &&
	test_cmp expect actual

ok 96 - %S in git log --format works with other placeholders (part 1)

expecting success of 4205.97 '%S in git log --format works with other placeholders (part 2)': 
	git log --format="%h source-b" source-b >expect &&
	git log --format="%h %S" source-b >actual &&
	test_cmp expect actual

ok 97 - %S in git log --format works with other placeholders (part 2)

expecting success of 4205.98 'log --pretty=reference': 
	git log --pretty="tformat:%h (%s, %as)" >expect &&
	git log --pretty=reference >actual &&
	test_cmp expect actual

ok 98 - log --pretty=reference

expecting success of 4205.99 'log --pretty=reference with log.date is overridden by short date': 
	git log --pretty="tformat:%h (%s, %as)" >expect &&
	test_config log.date rfc &&
	git log --pretty=reference >actual &&
	test_cmp expect actual

ok 99 - log --pretty=reference with log.date is overridden by short date

expecting success of 4205.100 'log --pretty=reference with explicit date overrides short date': 
	git log --date=rfc --pretty="tformat:%h (%s, %ad)" >expect &&
	git log --date=rfc --pretty=reference >actual &&
	test_cmp expect actual

ok 100 - log --pretty=reference with explicit date overrides short date

expecting success of 4205.101 'log --pretty=reference is never unabbreviated': 
	git log --pretty="tformat:%h (%s, %as)" >expect &&
	git log --no-abbrev-commit --pretty=reference >actual &&
	test_cmp expect actual

ok 101 - log --pretty=reference is never unabbreviated

expecting success of 4205.102 'log --pretty=reference is never decorated': 
	git log --pretty="tformat:%h (%s, %as)" >expect &&
	git log --decorate=short --pretty=reference >actual &&
	test_cmp expect actual

ok 102 - log --pretty=reference is never decorated

expecting success of 4205.103 'log --pretty=reference does not output reflog info': 
	git log --walk-reflogs --pretty="tformat:%h (%s, %as)" >expect &&
	git log --walk-reflogs --pretty=reference >actual &&
	test_cmp expect actual

ok 103 - log --pretty=reference does not output reflog info

expecting success of 4205.104 'log --pretty=reference is colored appropriately': 
	git log --color=always --pretty="tformat:%C(auto)%h (%s, %as)" >expect &&
	git log --color=always --pretty=reference >actual &&
	test_cmp expect actual

ok 104 - log --pretty=reference is colored appropriately

expecting success of 4205.105 '%(describe) vs git describe': 
	git log --format="%H" | while read hash
	do
		if desc=$(git describe $hash)
		then
			: >expect-contains-good
		else
			: >expect-contains-bad
		fi &&
		echo "$hash $desc" || return 1
	done >expect &&
	test_path_exists expect-contains-good &&
	test_path_exists expect-contains-bad &&

	git log --format="%H %(describe)" >actual 2>err &&
	test_cmp expect actual &&
	test_must_be_empty err

fatal: No annotated tags can describe 'aa5db7b88c8b024da7449b63511f1895ad02316f'.
However, there were unannotated tags: try --tags.
ok 105 - %(describe) vs git describe

expecting success of 4205.106 '%(describe:match=...) vs git describe --match ...': 
	test_when_finished "git tag -d tag-match" &&
	git tag -a -m tagged tag-match &&
	git describe --match "*-match" >expect &&
	git log -1 --format="%(describe:match=*-match)" >actual &&
	test_cmp expect actual

Deleted tag 'tag-match' (was 5953a68)
ok 106 - %(describe:match=...) vs git describe --match ...

expecting success of 4205.107 '%(describe:exclude=...) vs git describe --exclude ...': 
	test_when_finished "git tag -d tag-exclude" &&
	git tag -a -m tagged tag-exclude &&
	git describe --exclude "*-exclude" >expect &&
	git log -1 --format="%(describe:exclude=*-exclude)" >actual &&
	test_cmp expect actual

Deleted tag 'tag-exclude' (was 2dc1fa5)
ok 107 - %(describe:exclude=...) vs git describe --exclude ...

expecting success of 4205.108 '%(describe:tags) vs git describe --tags': 
	test_when_finished "git tag -d tagname" &&
	git tag tagname &&
	git describe --tags >expect &&
	git log -1 --format="%(describe:tags)" >actual &&
	test_cmp expect actual

Deleted tag 'tagname' (was d08742c)
ok 108 - %(describe:tags) vs git describe --tags

expecting success of 4205.109 '%(describe:abbrev=...) vs git describe --abbrev=...': 
	test_when_finished "git tag -d tagname" &&
	git tag -a -m tagged tagname &&
	git describe --abbrev=15 >expect &&
	git log -1 --format="%(describe:abbrev=15)" >actual &&
	test_cmp expect actual

Deleted tag 'tagname' (was ba5840f)
ok 109 - %(describe:abbrev=...) vs git describe --abbrev=...

# still have 1 known breakage(s)
# passed all remaining 108 test(s)
1..109
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4208-log-magic-pathspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4208-log-magic-pathspec/.git/
expecting success of 4208.1 'setup': 
	test_commit initial &&
	test_tick &&
	git commit --allow-empty -m empty &&
	mkdir sub

[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[main 41d179c] empty
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4208.2 '"git log :/" should not be ambiguous': 
	git log :/

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 2 - "git log :/" should not be ambiguous

expecting success of 4208.3 '"git log :/a" should be ambiguous (applied both rev and worktree)': 
	: >a &&
	test_must_fail git log :/a 2>error &&
	test_i18ngrep ambiguous error

fatal: ambiguous argument ':/a': both revision and filename
ok 3 - "git log :/a" should be ambiguous (applied both rev and worktree)

expecting success of 4208.4 '"git log :/a -- " should not be ambiguous': 
	git log :/a --

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 4 - "git log :/a -- " should not be ambiguous

expecting success of 4208.5 '"git log :/detached -- " should find a commit only in HEAD': 
	test_when_finished "git checkout main" &&
	git checkout --detach &&
	test_commit --no-tag detached &&
	test_commit --no-tag something-else &&
	git log :/detached --

HEAD is now at 41d179c empty
[detached HEAD 793f74f] detached
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 detached.t
[detached HEAD 53d04ef] something-else
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 something-else.t
commit 793f74f97a75d7fa26e06aea1eb13c6322d00e67
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    detached

commit 41d179cf92d6e064ff558d58ffa668d1ed939109
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    empty

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  53d04ef something-else
  793f74f detached

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 53d04ef

Switched to branch 'main'
ok 5 - "git log :/detached -- " should find a commit only in HEAD

expecting success of 4208.6 '"git log :/detached -- " should not find an orphaned commit': 
	test_must_fail git log :/detached --

fatal: bad revision ':/detached'
ok 6 - "git log :/detached -- " should not find an orphaned commit

expecting success of 4208.7 '"git log :/detached -- " should find HEAD only of own worktree': 
	git worktree add other-tree HEAD &&
	git -C other-tree checkout --detach &&
	test_tick &&
	git -C other-tree commit --allow-empty -m other-detached &&
	git -C other-tree log :/other-detached -- &&
	test_must_fail git log :/other-detached --

Preparing worktree (detached HEAD 41d179c)
HEAD is now at 41d179c empty
HEAD is now at 41d179c empty
[detached HEAD 690db08] other-detached
 Author: A U Thor <author@example.com>
commit 690db086fe427145ef8254ddd95f5a291f5ad2dd
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    other-detached

commit 41d179cf92d6e064ff558d58ffa668d1ed939109
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    empty

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
fatal: bad revision ':/other-detached'
ok 7 - "git log :/detached -- " should find HEAD only of own worktree

expecting success of 4208.8 '"git log -- :/a" should not be ambiguous': 
	git log -- :/a

ok 8 - "git log -- :/a" should not be ambiguous

expecting success of 4208.9 '"git log :/any/path/" should not segfault': 
	test_must_fail git log :/any/path/

fatal: ambiguous argument ':/any/path/': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 9 - "git log :/any/path/" should not segfault

expecting success of 4208.10 '"git log :/in" should not be ambiguous': 
	git log :/in

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 10 - "git log :/in" should not be ambiguous

expecting success of 4208.11 '"git log :" should be ambiguous': 
	test_must_fail git log : 2>error &&
	test_i18ngrep ambiguous error

fatal: ambiguous argument ':': unknown revision or path not in the working tree.
ok 11 - "git log :" should be ambiguous

expecting success of 4208.12 'git log -- :': 
	git log -- :

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 12 - git log -- :

expecting success of 4208.13 'git log HEAD -- :/': 
	initial=$(git rev-parse --short HEAD^) &&
	cat >expected <<-EOF &&
	$initial initial
	EOF
	(cd sub && git log --oneline HEAD -- :/ >../actual) &&
	test_cmp expected actual

ok 13 - git log HEAD -- :/

expecting success of 4208.14 '"git log :^sub" is not ambiguous': 
	git log :^sub

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 14 - "git log :^sub" is not ambiguous

expecting success of 4208.15 '"git log :^does-not-exist" does not match anything': 
	test_must_fail git log :^does-not-exist

fatal: ambiguous argument ':^does-not-exist': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 15 - "git log :^does-not-exist" does not match anything

expecting success of 4208.16 '"git log :!" behaves the same as :^': 
	git log :!sub &&
	test_must_fail git log :!does-not-exist

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
fatal: ambiguous argument ':!does-not-exist': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 16 - "git log :!" behaves the same as :^

expecting success of 4208.17 '"git log :(exclude)sub" is not ambiguous': 
	git log ":(exclude)sub"

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 17 - "git log :(exclude)sub" is not ambiguous

expecting success of 4208.18 '"git log :(exclude)sub --" must resolve as an object': 
	test_must_fail git log ":(exclude)sub" --

fatal: bad revision ':(exclude)sub'
ok 18 - "git log :(exclude)sub --" must resolve as an object

expecting success of 4208.19 '"git log :(unknown-magic) complains of bogus magic': 
	test_must_fail git log ":(unknown-magic)" 2>error &&
	test_i18ngrep pathspec.magic error

fatal: Invalid pathspec magic 'unknown-magic' in ':(unknown-magic)'
ok 19 - "git log :(unknown-magic) complains of bogus magic

expecting success of 4208.20 'command line pathspec parsing for "git log"': 
	git reset --hard &&
	>a &&
	git add a &&
	git commit -m "add an empty a" --allow-empty &&
	echo 1 >a &&
	git commit -a -m "update a to 1" &&
	git checkout HEAD^ &&
	echo 2 >a &&
	git commit -a -m "update a to 2" &&
	test_must_fail git merge main &&
	git add a &&
	git log --merge -- a

HEAD is now at 41d179c empty
[main 520c03e] add an empty a
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
[main 35b719c] update a to 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 520c03e add an empty a
[detached HEAD 61d8fe9] update a to 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
commit 61d8fe935ee13c992ada18f68c7d4b175f28ae77
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    update a to 2

commit 35b719c5373bb94b370829ac90035e2cd80daaba
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    update a to 1
ok 20 - command line pathspec parsing for "git log"

expecting success of 4208.21 'tree_entry_interesting does not match past submodule boundaries': 
	test_when_finished "rm -rf repo submodule" &&
	test_config_global protocol.file.allow always &&
	git init submodule &&
	test_commit -C submodule initial &&
	git init repo &&
	>"repo/[bracket]" &&
	git -C repo add "[bracket]" &&
	test_tick &&
	git -C repo commit -m bracket &&
	git -C repo rev-list HEAD -- "[bracket]" >expect &&

	git -C repo submodule add ../submodule &&
	test_tick &&
	git -C repo commit -m submodule &&

	git -C repo rev-list HEAD -- "[bracket]" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4208-log-magic-pathspec/submodule/.git/
[main (root-commit) 31243c6] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4208-log-magic-pathspec/repo/.git/
[main (root-commit) fcad989] bracket
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 [bracket]
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4208-log-magic-pathspec/repo/submodule'...
done.
[main 2614379] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 21 - tree_entry_interesting does not match past submodule boundaries

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4210-log-i18n.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4210-log-i18n/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
expecting success of 4210.1 'create commits in different encodings': 
	test_tick &&
	cat >msg <<-EOF &&
	utf8

	t${utf8_e}st
	EOF
	git add msg &&
	git -c i18n.commitencoding=utf8 commit -F msg &&
	cat >msg <<-EOF &&
	latin1

	t${latin1_e}st
	EOF
	git add msg &&
	git -c i18n.commitencoding=ISO-8859-1 commit -F msg

[master (root-commit) cbf2796] utf8
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 msg
[master b077cf9] latin1
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
ok 1 - create commits in different encodings

expecting success of 4210.2 'log --grep searches in log output encoding (utf8)': 
	cat >expect <<-\EOF &&
	latin1
	utf8
	EOF
	git log --encoding=utf8 --format=%s --grep=$utf8_e >actual &&
	test_cmp expect actual

ok 2 - log --grep searches in log output encoding (utf8)

expecting success of 4210.3 'log --grep searches in log output encoding (latin1)': 
	cat >expect <<-\EOF &&
	latin1
	utf8
	EOF
	git log --encoding=ISO-8859-1 --format=%s --grep=$latin1_e >actual &&
	test_cmp expect actual

ok 3 - log --grep searches in log output encoding (latin1)

expecting success of 4210.4 'log --grep does not find non-reencoded values (utf8)': 
	git log --encoding=utf8 --format=%s --grep=$latin1_e >actual &&
	test_must_be_empty actual

ok 4 - log --grep does not find non-reencoded values (utf8)

expecting success of 4210.5 'log --grep does not find non-reencoded values (latin1)': 
	git log --encoding=ISO-8859-1 --format=%s --grep=$utf8_e >actual &&
	test_must_be_empty actual

ok 5 - log --grep does not find non-reencoded values (latin1)

expecting success of 4210.6 'config grep.patternType=fixed': 
		git config grep.patternType fixed
	
ok 6 - config grep.patternType=fixed

ok 7 # skip log --grep does not find non-reencoded values (latin1 + locale) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

ok 8 # skip log --grep searches in log output encoding (latin1 + locale) (missing GETTEXT_LOCALE of !MINGW,GETTEXT_LOCALE,)

ok 9 # skip log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

expecting success of 4210.10 'config grep.patternType=basic': 
		git config grep.patternType basic
	
ok 10 - config grep.patternType=basic

ok 11 # skip log --grep does not find non-reencoded values (latin1 + locale) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

ok 12 # skip log --grep searches in log output encoding (latin1 + locale) (missing GETTEXT_LOCALE of !MINGW,GETTEXT_LOCALE,)

ok 13 # skip log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

expecting success of 4210.14 'config grep.patternType=extended': 
		git config grep.patternType extended
	
ok 14 - config grep.patternType=extended

ok 15 # skip log --grep does not find non-reencoded values (latin1 + locale) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

ok 16 # skip log --grep searches in log output encoding (latin1 + locale) (missing GETTEXT_LOCALE of !MINGW,GETTEXT_LOCALE,)

ok 17 # skip log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,)

expecting success of 4210.18 'config grep.patternType=perl': 
		git config grep.patternType perl
	
ok 18 - config grep.patternType=perl

ok 19 # skip log --grep does not find non-reencoded values (latin1 + locale) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,PCRE)

ok 20 # skip log --grep searches in log output encoding (latin1 + locale) (missing GETTEXT_LOCALE of !MINGW,GETTEXT_LOCALE,PCRE)

ok 21 # skip log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,PCRE)

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4209-log-pickaxe.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4209-log-pickaxe/.git/
expecting success of 4209.1 'setup': 
	>expect_nomatch &&

	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git rev-parse --verify HEAD >expect_initial &&

	echo Picked >file &&
	git add file &&
	test_tick &&
	git commit --author="Another Person <another@example.com>" -m second &&
	git rev-parse --verify HEAD >expect_second

[master (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[master 64f6655] second
 Author: Another Person <another@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 4209.2 'usage': 
	test_expect_code 129 git log -S 2>err &&
	test_i18ngrep "switch.*requires a value" err &&

	test_expect_code 129 git log -G 2>err &&
	test_i18ngrep "switch.*requires a value" err &&

	test_expect_code 128 git log -Gregex -Sstring 2>err &&
	grep "cannot be used together" err &&

	test_expect_code 128 git log -Gregex --find-object=HEAD 2>err &&
	grep "cannot be used together" err &&

	test_expect_code 128 git log -Sstring --find-object=HEAD 2>err &&
	grep "cannot be used together" err &&

	test_expect_code 128 git log --pickaxe-all --find-object=HEAD 2>err &&
	grep "cannot be used together" err

error: switch `S' requires a value
error: switch `G' requires a value
fatal: options '-G', '-S', and '--find-object' cannot be used together
fatal: options '-G', '-S', and '--find-object' cannot be used together
fatal: options '-G', '-S', and '--find-object' cannot be used together
fatal: options '--pickaxe-all' and '--find-object' cannot be used together, use '--pickaxe-all' with '-G' and '-S'
ok 2 - usage

expecting success of 4209.3 'usage: --pickaxe-regex': 
	test_expect_code 128 git log -Gregex --pickaxe-regex 2>err &&
	grep "cannot be used together" err

fatal: options '-G' and '--pickaxe-regex' cannot be used together, use '--pickaxe-regex' with '-S'
ok 3 - usage: --pickaxe-regex

expecting success of 4209.4 'usage: --no-pickaxe-regex': 
	cat >expect <<-\EOF &&
	fatal: unrecognized argument: --no-pickaxe-regex
	EOF

	test_expect_code 128 git log -Sstring --no-pickaxe-regex 2>actual &&
	test_cmp expect actual &&

	test_expect_code 128 git log -Gstring --no-pickaxe-regex 2>err &&
	test_cmp expect actual

ok 4 - usage: --no-pickaxe-regex

expecting success of 4209.5 'log --grep (match)': 
		git log  --grep=initial --format=%H >actual &&
		test_cmp expect_initial actual
	
ok 5 - log --grep (match)

expecting success of 4209.6 'log --grep (nomatch)': 
		git log  --grep=InItial --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 6 - log --grep (nomatch)

expecting success of 4209.7 'log --grep --regexp-ignore-case (match)': 
		git log --regexp-ignore-case --grep=InItial --format=%H >actual &&
		test_cmp expect_initial actual
	
ok 7 - log --grep --regexp-ignore-case (match)

expecting success of 4209.8 'log --grep -i (match)': 
		git log -i --grep=InItial --format=%H >actual &&
		test_cmp expect_initial actual
	
ok 8 - log --grep -i (match)

expecting success of 4209.9 'log --grep --regexp-ignore-case (nomatch)': 
		git log --regexp-ignore-case --grep=initail --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 9 - log --grep --regexp-ignore-case (nomatch)

expecting success of 4209.10 'log --grep -i (nomatch)': 
		git log -i --grep=initail --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 10 - log --grep -i (nomatch)

expecting success of 4209.11 'log --author (match)': 
		git log  --author=Person --format=%H >actual &&
		test_cmp expect_second actual
	
ok 11 - log --author (match)

expecting success of 4209.12 'log --author (nomatch)': 
		git log  --author=person --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 12 - log --author (nomatch)

expecting success of 4209.13 'log --author --regexp-ignore-case (match)': 
		git log --regexp-ignore-case --author=person --format=%H >actual &&
		test_cmp expect_second actual
	
ok 13 - log --author --regexp-ignore-case (match)

expecting success of 4209.14 'log --author -i (match)': 
		git log -i --author=person --format=%H >actual &&
		test_cmp expect_second actual
	
ok 14 - log --author -i (match)

expecting success of 4209.15 'log --author --regexp-ignore-case (nomatch)': 
		git log --regexp-ignore-case --author=spreon --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 15 - log --author --regexp-ignore-case (nomatch)

expecting success of 4209.16 'log --author -i (nomatch)': 
		git log -i --author=spreon --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 16 - log --author -i (nomatch)

expecting success of 4209.17 'log -G (nomatch)': 
		git log  -Gpicked --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 17 - log -G (nomatch)

expecting success of 4209.18 'log -G (match)': 
		git log  -GPicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 18 - log -G (match)

expecting success of 4209.19 'log -G --regexp-ignore-case (nomatch)': 
		git log --regexp-ignore-case -Gpickle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 19 - log -G --regexp-ignore-case (nomatch)

expecting success of 4209.20 'log -G -i (nomatch)': 
		git log -i -Gpickle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 20 - log -G -i (nomatch)

expecting success of 4209.21 'log -G --regexp-ignore-case (match)': 
		git log --regexp-ignore-case -Gpicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 21 - log -G --regexp-ignore-case (match)

expecting success of 4209.22 'log -G -i (match)': 
		git log -i -Gpicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 22 - log -G -i (match)

expecting success of 4209.23 'log -G --textconv (missing textconv tool)': 
	echo "* diff=test" >.gitattributes &&
	test_must_fail git -c diff.test.textconv=missing log -Gfoo &&
	rm .gitattributes

error: cannot run missing: No such file or directory
fatal: unable to read files to diff
ok 23 - log -G --textconv (missing textconv tool)

expecting success of 4209.24 'log -G --no-textconv (missing textconv tool)': 
	echo "* diff=test" >.gitattributes &&
	git -c diff.test.textconv=missing log -Gfoo --no-textconv >actual &&
	test_cmp expect_nomatch actual &&
	rm .gitattributes

ok 24 - log -G --no-textconv (missing textconv tool)

expecting success of 4209.25 'log -S (nomatch)': 
		git log  -Spicked --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 25 - log -S (nomatch)

expecting success of 4209.26 'log -S (match)': 
		git log  -SPicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 26 - log -S (match)

expecting success of 4209.27 'log -S --regexp-ignore-case (match)': 
		git log --regexp-ignore-case -Spicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 27 - log -S --regexp-ignore-case (match)

expecting success of 4209.28 'log -S -i (match)': 
		git log -i -Spicked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 28 - log -S -i (match)

expecting success of 4209.29 'log -S --regexp-ignore-case (nomatch)': 
		git log --regexp-ignore-case -Spickle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 29 - log -S --regexp-ignore-case (nomatch)

expecting success of 4209.30 'log -S -i (nomatch)': 
		git log -i -Spickle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 30 - log -S -i (nomatch)

expecting success of 4209.31 'log -S --pickaxe-regex (nomatch)': 
		git log --pickaxe-regex -Sp.cked --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 31 - log -S --pickaxe-regex (nomatch)

expecting success of 4209.32 'log -S --pickaxe-regex (match)': 
		git log --pickaxe-regex -SP.cked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 32 - log -S --pickaxe-regex (match)

expecting success of 4209.33 'log -S --pickaxe-regex --regexp-ignore-case (match)': 
		git log --pickaxe-regex --regexp-ignore-case -Sp.cked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 33 - log -S --pickaxe-regex --regexp-ignore-case (match)

expecting success of 4209.34 'log -S --pickaxe-regex -i (match)': 
		git log --pickaxe-regex -i -Sp.cked --format=%H >actual &&
		test_cmp expect_second actual
	
ok 34 - log -S --pickaxe-regex -i (match)

expecting success of 4209.35 'log -S --pickaxe-regex --regexp-ignore-case (nomatch)': 
		git log --pickaxe-regex --regexp-ignore-case -Sp.ckle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 35 - log -S --pickaxe-regex --regexp-ignore-case (nomatch)

expecting success of 4209.36 'log -S --pickaxe-regex -i (nomatch)': 
		git log --pickaxe-regex -i -Sp.ckle --format=%H >actual &&
		test_cmp expect_nomatch actual
	
ok 36 - log -S --pickaxe-regex -i (nomatch)

expecting success of 4209.37 'log -S --textconv (missing textconv tool)': 
	echo "* diff=test" >.gitattributes &&
	test_must_fail git -c diff.test.textconv=missing log -Sfoo &&
	rm .gitattributes

error: cannot run missing: No such file or directory
fatal: unable to read files to diff
ok 37 - log -S --textconv (missing textconv tool)

expecting success of 4209.38 'log -S --no-textconv (missing textconv tool)': 
	echo "* diff=test" >.gitattributes &&
	git -c diff.test.textconv=missing log -Sfoo --no-textconv >actual &&
	test_cmp expect_nomatch actual &&
	rm .gitattributes

ok 38 - log -S --no-textconv (missing textconv tool)

expecting success of 4209.39 'setup log -[GS] plain & regex': 
	test_create_repo GS-plain &&
	test_commit -C GS-plain --append A data.txt "a" &&
	test_commit -C GS-plain --append B data.txt "a a" &&
	test_commit -C GS-plain --append C data.txt "b" &&
	test_commit -C GS-plain --append D data.txt "[b]" &&
	test_commit -C GS-plain E data.txt "" &&

	# We also include E, the deletion commit
	git -C GS-plain log --grep="[ABE]" >A-to-B-then-E-log &&
	git -C GS-plain log --grep="[CDE]" >C-to-D-then-E-log &&
	git -C GS-plain log --grep="[DE]" >D-then-E-log &&
	git -C GS-plain log >full-log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4209-log-pickaxe/GS-plain/.git/
[master (root-commit) 39fb857] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 data.txt
[master 50c3229] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 70aa019] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 3f7d046] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 4fd79ea] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
ok 39 - setup log -[GS] plain & regex

expecting success of 4209.40 'log -G trims diff new/old [-+]': 
	git -C GS-plain log -G"[+-]a" >log &&
	test_must_be_empty log &&
	git -C GS-plain log -G"^a" >log &&
	test_cmp log A-to-B-then-E-log

ok 40 - log -G trims diff new/old [-+]

expecting success of 4209.41 'log -S<pat> is not a regex, but -S<pat> --pickaxe-regex is': 
	git -C GS-plain log -S"a" >log &&
	test_cmp log A-to-B-then-E-log &&

	git -C GS-plain log -S"[a]" >log &&
	test_must_be_empty log &&

	git -C GS-plain log -S"[a]" --pickaxe-regex >log &&
	test_cmp log A-to-B-then-E-log &&

	git -C GS-plain log -S"[b]" >log &&
	test_cmp log D-then-E-log &&

	git -C GS-plain log -S"[b]" --pickaxe-regex >log &&
	test_cmp log C-to-D-then-E-log

ok 41 - log -S<pat> is not a regex, but -S<pat> --pickaxe-regex is

expecting success of 4209.42 'setup log -[GS] binary & --text': 
	test_create_repo GS-bin-txt &&
	test_commit -C GS-bin-txt --printf A data.bin "a\na\0a\n" &&
	test_commit -C GS-bin-txt --append --printf B data.bin "a\na\0a\n" &&
	test_commit -C GS-bin-txt C data.bin "" &&
	git -C GS-bin-txt log >full-log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4209-log-pickaxe/GS-bin-txt/.git/
[master (root-commit) 988beca] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 data.bin
[master 22cac2b] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
[master 578ec9f] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 42 - setup log -[GS] binary & --text

expecting success of 4209.43 'log -G ignores binary files': 
	git -C GS-bin-txt log -Ga >log &&
	test_must_be_empty log

ok 43 - log -G ignores binary files

expecting success of 4209.44 'log -G looks into binary files with -a': 
	git -C GS-bin-txt log -a -Ga >log &&
	test_cmp log full-log

ok 44 - log -G looks into binary files with -a

expecting success of 4209.45 'log -G looks into binary files with textconv filter': 
	test_when_finished "rm GS-bin-txt/.gitattributes" &&
	(
		cd GS-bin-txt &&
		echo "* diff=bin" >.gitattributes &&
		git -c diff.bin.textconv=cat log -Ga >../log
	) &&
	test_cmp log full-log

ok 45 - log -G looks into binary files with textconv filter

expecting success of 4209.46 'log -S looks into binary files': 
	git -C GS-bin-txt log -Sa >log &&
	test_cmp log full-log

ok 46 - log -S looks into binary files

expecting success of 4209.47 'log -S --pickaxe-regex looks into binary files': 
	git -C GS-bin-txt log --pickaxe-regex -Sa >log &&
	test_cmp log full-log &&

	git -C GS-bin-txt log --pickaxe-regex -S"[a]" >log &&
	test_cmp log full-log

ok 47 - log -S --pickaxe-regex looks into binary files

# passed all 47 test(s)
1..47
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4137-apply-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/.git/
expecting success of 4137.1 'apply_index: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - apply_index: added submodule creates empty directory

expecting success of 4137.2 'apply_index: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - apply_index: added submodule leaves existing empty directory alone

expecting success of 4137.3 'apply_index: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - apply_index: replace tracked file with submodule creates empty directory

expecting success of 4137.4 'apply_index: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - apply_index: replace directory with submodule

expecting success of 4137.5 'apply_index: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 5 - apply_index: removed submodule leaves submodule directory and its contents in place

expecting success of 4137.6 'apply_index: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 6 - apply_index: removed submodule leaves submodule containing a .git directory alone

expecting success of 4137.7 'apply_index: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: sub1/file1: already exists in working directory
error: sub1/file2: already exists in working directory
ok 7 - apply_index: replace submodule with a directory must fail

expecting success of 4137.8 'apply_index: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: sub1/file1: already exists in working directory
error: sub1/file2: already exists in working directory
ok 8 - apply_index: replace submodule containing a .git directory with a directory must fail

checking known breakage of 4137.9 'apply_index: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 9 - apply_index: replace submodule with a file must fail # TODO known breakage

checking known breakage of 4137.10 'apply_index: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 10 - apply_index: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 4137.11 'apply_index: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - apply_index: modified submodule does not update submodule work tree

expecting success of 4137.12 'apply_index: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - apply_index: modified submodule does not update submodule work tree to invalid commit

expecting success of 4137.13 'apply_index: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - apply_index: modified submodule does not update submodule work tree from invalid commit

expecting success of 4137.14 'apply_index: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: sub1: already exists in working directory
ok 14 - apply_index: added submodule doesn't remove untracked unignored file with same name

expecting success of 4137.15 'apply_3way: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 15 - apply_3way: added submodule creates empty directory

expecting success of 4137.16 'apply_3way: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 16 - apply_3way: added submodule leaves existing empty directory alone

expecting success of 4137.17 'apply_3way: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Falling back to direct application...
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 17 - apply_3way: replace tracked file with submodule creates empty directory

expecting success of 4137.18 'apply_3way: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 18 - apply_3way: replace directory with submodule

expecting success of 4137.19 'apply_3way: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
ok 19 - apply_3way: removed submodule leaves submodule directory and its contents in place

expecting success of 4137.20 'apply_3way: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Falling back to direct application...
Falling back to direct application...
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
ok 20 - apply_3way: removed submodule leaves submodule containing a .git directory alone

expecting success of 4137.21 'apply_3way: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Performing three-way merge...
error: sub1/file1: does not exist in index
error: cannot read the current contents of 'sub1/file1'
error: sub1/file1: patch does not apply
Performing three-way merge...
error: sub1/file2: does not exist in index
error: cannot read the current contents of 'sub1/file2'
error: sub1/file2: patch does not apply
Falling back to direct application...
ok 21 - apply_3way: replace submodule with a directory must fail

expecting success of 4137.22 'apply_3way: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Performing three-way merge...
error: sub1/file1: does not exist in index
error: cannot read the current contents of 'sub1/file1'
error: sub1/file1: patch does not apply
Performing three-way merge...
error: sub1/file2: does not exist in index
error: cannot read the current contents of 'sub1/file2'
error: sub1/file2: patch does not apply
Falling back to direct application...
ok 22 - apply_3way: replace submodule containing a .git directory with a directory must fail

checking known breakage of 4137.23 'apply_3way: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 23 - apply_3way: replace submodule with a file must fail # TODO known breakage

checking known breakage of 4137.24 'apply_3way: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Applied patch to '.gitmodules' cleanly.
Falling back to direct application...
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 24 - apply_3way: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 4137.25 'apply_3way: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 25 - apply_3way: modified submodule does not update submodule work tree

expecting success of 4137.26 'apply_3way: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Falling back to direct application...
warning: unable to rmdir 'sub1': Directory not empty
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 26 - apply_3way: modified submodule does not update submodule work tree to invalid commit

expecting success of 4137.27 'apply_3way: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Falling back to direct application...
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4137-apply-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 27 - apply_3way: modified submodule does not update submodule work tree from invalid commit

expecting success of 4137.28 'apply_3way: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Falling back to direct application...
error: sub1: patch does not apply
Falling back to direct application...
ok 28 - apply_3way: added submodule doesn't remove untracked unignored file with same name

# still have 4 known breakage(s)
# passed all remaining 24 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4202-log.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/.git/
expecting success of 4202.1 'setup': 

	echo one >one &&
	git add one &&
	test_tick &&
	git commit -m initial &&

	echo ichi >one &&
	git add one &&
	test_tick &&
	git commit -m second &&

	git mv one ichi &&
	test_tick &&
	git commit -m third &&

	cp ichi ein &&
	git add ein &&
	test_tick &&
	git commit -m fourth &&

	mkdir a &&
	echo ni >a/two &&
	git add a/two &&
	test_tick &&
	git commit -m fifth  &&

	git rm a/two &&
	test_tick &&
	git commit -m sixth


[main (root-commit) 3a2fdcb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
[main f7dab8e] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2fbe8c0] third
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename one => ichi (100%)
[main 5d31159] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ein
[main 394ef78] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/two
rm 'a/two'
[main 804a787] sixth
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 a/two
ok 1 - setup

expecting success of 4202.2 'pretty': 

	git log --pretty="format:%s" > actual &&
	test_cmp expect actual

ok 2 - pretty

expecting success of 4202.3 'pretty (tformat)': 

	git log --pretty="tformat:%s" > actual &&
	test_cmp expect actual

ok 3 - pretty (tformat)

expecting success of 4202.4 'pretty (shortcut)': 

	git log --pretty="%s" > actual &&
	test_cmp expect actual

ok 4 - pretty (shortcut)

expecting success of 4202.5 'format': 

	git log --format="%s" > actual &&
	test_cmp expect actual

ok 5 - format

expecting success of 4202.6 'format %w(11,1,2)': 

	git log -2 --format="%w(11,1,2)This is the %s commit." > actual &&
	test_cmp expect actual

ok 6 - format %w(11,1,2)

expecting success of 4202.7 'format %w(,1,2)': 

	git log -2 --format="%w(,1,2)This is%nthe %s%ncommit." > actual &&
	test_cmp expect actual

ok 7 - format %w(,1,2)

expecting success of 4202.8 'oneline': 

	git log --oneline > actual &&
	test_cmp expect actual

ok 8 - oneline

expecting success of 4202.9 'diff-filter=A': 

	git log --no-renames --pretty="format:%s" --diff-filter=A HEAD > actual &&
	git log --no-renames --pretty="format:%s" --diff-filter A HEAD > actual-separate &&
	printf "fifth\nfourth\nthird\ninitial" > expect &&
	test_cmp expect actual &&
	test_cmp expect actual-separate


ok 9 - diff-filter=A

expecting success of 4202.10 'diff-filter=M': 

	git log --pretty="format:%s" --diff-filter=M HEAD >actual &&
	printf "second" >expect &&
	test_cmp expect actual


ok 10 - diff-filter=M

expecting success of 4202.11 'diff-filter=D': 

	git log --no-renames --pretty="format:%s" --diff-filter=D HEAD >actual &&
	printf "sixth\nthird" >expect &&
	test_cmp expect actual


ok 11 - diff-filter=D

expecting success of 4202.12 'diff-filter=R': 

	git log -M --pretty="format:%s" --diff-filter=R HEAD >actual &&
	printf "third" >expect &&
	test_cmp expect actual


ok 12 - diff-filter=R

expecting success of 4202.13 'multiple --diff-filter bits': 

	git log -M --pretty="format:%s" --diff-filter=R HEAD >expect &&
	git log -M --pretty="format:%s" --diff-filter=Ra HEAD >actual &&
	test_cmp expect actual &&
	git log -M --pretty="format:%s" --diff-filter=aR HEAD >actual &&
	test_cmp expect actual &&
	git log -M --pretty="format:%s" \
		--diff-filter=a --diff-filter=R HEAD >actual &&
	test_cmp expect actual


ok 13 - multiple --diff-filter bits

expecting success of 4202.14 'diff-filter=C': 

	git log -C -C --pretty="format:%s" --diff-filter=C HEAD >actual &&
	printf "fourth" >expect &&
	test_cmp expect actual


ok 14 - diff-filter=C

expecting success of 4202.15 'git log --follow': 

	git log --follow --pretty="format:%s" ichi >actual &&
	printf "third\nsecond\ninitial" >expect &&
	test_cmp expect actual

ok 15 - git log --follow

expecting success of 4202.16 'git config log.follow works like --follow': 
	test_config log.follow true &&
	git log --pretty="format:%s" ichi >actual &&
	printf "third\nsecond\ninitial" >expect &&
	test_cmp expect actual

ok 16 - git config log.follow works like --follow

expecting success of 4202.17 'git config log.follow does not die with multiple paths': 
	test_config log.follow true &&
	git log --pretty="format:%s" ichi ein

fourth
thirdok 17 - git config log.follow does not die with multiple paths

expecting success of 4202.18 'git config log.follow does not die with no paths': 
	test_config log.follow true &&
	git log --

commit 804a7879c6cac637c9d34d1608e3e54867d90b7e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    sixth

commit 394ef780a000df496e0a8fdd648963c3f9d96f56
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    fifth

commit 5d311594784eefe7b43496741766fe058f1c91a1
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    fourth

commit 2fbe8c09c8e84c2346ba2ac744cb09a926773855
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    third

commit f7dab8eda217fc1e06315e7c91b6bd7c2a56363a
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    second

commit 3a2fdcbc365f1f169c2d433dbb277d88b412d8c9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 18 - git config log.follow does not die with no paths

expecting success of 4202.19 'git config log.follow is overridden by --no-follow': 
	test_config log.follow true &&
	git log --no-follow --pretty="format:%s" ichi >actual &&
	printf "third" >expect &&
	test_cmp expect actual

ok 19 - git config log.follow is overridden by --no-follow

expecting success of 4202.20 'git log --no-walk <commits> sorts by commit time': 
	git log --no-walk --oneline $last_three > actual &&
	test_cmp expect actual

ok 20 - git log --no-walk <commits> sorts by commit time

expecting success of 4202.21 'git log --no-walk=sorted <commits> sorts by commit time': 
	git log --no-walk=sorted --oneline $last_three > actual &&
	test_cmp expect actual

ok 21 - git log --no-walk=sorted <commits> sorts by commit time

expecting success of 4202.22 'git log --line-prefix="=== " --no-walk <commits> sorts by commit time': 
	git log --line-prefix="=== " --no-walk --oneline $last_three > actual &&
	test_cmp expect actual

ok 22 - git log --line-prefix="=== " --no-walk <commits> sorts by commit time

expecting success of 4202.23 'git log --no-walk=unsorted <commits> leaves list of commits as given': 
	git log --no-walk=unsorted --oneline $last_three > actual &&
	test_cmp expect actual

ok 23 - git log --no-walk=unsorted <commits> leaves list of commits as given

expecting success of 4202.24 'git show <commits> leaves list of commits as given': 
	git show --oneline -s $last_three > actual &&
	test_cmp expect actual

ok 24 - git show <commits> leaves list of commits as given

expecting success of 4202.25 'setup case sensitivity tests': 
	echo case >one &&
	test_tick &&
	git add one &&
	git commit -a -m Second

[main e9e4904] Second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
ok 25 - setup case sensitivity tests

expecting success of 4202.26 'log --grep': 
	echo second >expect &&
	git log -1 --pretty="tformat:%s" --grep=sec >actual &&
	test_cmp expect actual

ok 26 - log --grep

expecting success of 4202.27 'log --invert-grep without --grep is a NOOP': 
		git log >expect &&
		git log $noop_opt >actual &&
		test_cmp expect actual
	
ok 27 - log --invert-grep without --grep is a NOOP

expecting success of 4202.28 'log --all-match without --grep is a NOOP': 
		git log >expect &&
		git log $noop_opt >actual &&
		test_cmp expect actual
	
ok 28 - log --all-match without --grep is a NOOP

expecting success of 4202.29 'log --invert-grep --grep': 
	# Fixed
	git -c grep.patternType=fixed log --pretty="tformat:%s" --invert-grep --grep=th --grep=Sec >actual &&
	test_cmp expect actual &&

	# POSIX basic
	git -c grep.patternType=basic log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
	test_cmp expect actual &&

	# POSIX extended
	git -c grep.patternType=extended log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
	test_cmp expect actual &&

	# PCRE
	if test_have_prereq PCRE
	then
		git -c grep.patternType=perl log --pretty="tformat:%s" --invert-grep --grep=t[h] --grep=S[e]c >actual &&
		test_cmp expect actual
	fi

ok 29 - log --invert-grep --grep

expecting success of 4202.30 'log --invert-grep --grep -i': 
	echo initial >expect &&

	# Fixed
	git -c grep.patternType=fixed log --pretty="tformat:%s" --invert-grep -i --grep=th --grep=Sec >actual &&
	test_cmp expect actual &&

	# POSIX basic
	git -c grep.patternType=basic log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
	test_cmp expect actual &&

	# POSIX extended
	git -c grep.patternType=extended log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
	test_cmp expect actual &&

	# PCRE
	if test_have_prereq PCRE
	then
		git -c grep.patternType=perl log --pretty="tformat:%s" --invert-grep -i --grep=t[h] --grep=S[e]c >actual &&
		test_cmp expect actual
	fi

ok 30 - log --invert-grep --grep -i

expecting success of 4202.31 'log --grep option parsing': 
	echo second >expect &&
	git log -1 --pretty="tformat:%s" --grep sec >actual &&
	test_cmp expect actual &&
	test_must_fail git log -1 --pretty="tformat:%s" --grep

fatal: Option '--grep' requires a value
ok 31 - log --grep option parsing

expecting success of 4202.32 'log -i --grep': 
	echo Second >expect &&
	git log -1 --pretty="tformat:%s" -i --grep=sec >actual &&
	test_cmp expect actual

ok 32 - log -i --grep

expecting success of 4202.33 'log --grep -i': 
	echo Second >expect &&

	# Fixed
	git log -1 --pretty="tformat:%s" --grep=sec -i >actual &&
	test_cmp expect actual &&

	# POSIX basic
	git -c grep.patternType=basic log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
	test_cmp expect actual &&

	# POSIX extended
	git -c grep.patternType=extended log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
	test_cmp expect actual &&

	# PCRE
	if test_have_prereq PCRE
	then
		git -c grep.patternType=perl log -1 --pretty="tformat:%s" --grep=s[e]c -i >actual &&
		test_cmp expect actual
	fi

ok 33 - log --grep -i

expecting success of 4202.34 'log -F -E --grep=<ere> uses ere': 
	echo second >expect &&
	# basic would need \(s\) to do the same
	git log -1 --pretty="tformat:%s" -F -E --grep="(s).c.nd" >actual &&
	test_cmp expect actual

ok 34 - log -F -E --grep=<ere> uses ere

expecting success of 4202.35 'log -F -E --perl-regexp --grep=<pcre> uses PCRE': 
	test_when_finished "rm -rf num_commits" &&
	git init num_commits &&
	(
		cd num_commits &&
		test_commit 1d &&
		test_commit 2e
	) &&

	# In PCRE \d in [\d] is like saying "0-9", and matches the 2
	# in 2e...
	echo 2e >expect &&
	git -C num_commits log -1 --pretty="tformat:%s" -F -E --perl-regexp --grep="[\d]" >actual &&
	test_cmp expect actual &&

	# ...in POSIX basic and extended it is the same as [d],
	# i.e. "d", which matches 1d, but does not match 2e.
	echo 1d >expect &&
	git -C num_commits log -1 --pretty="tformat:%s" -F -E --grep="[\d]" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/num_commits/.git/
[main (root-commit) 5550d7b] 1d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1d.t
[main efc81b0] 2e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2e.t
ok 35 - log -F -E --perl-regexp --grep=<pcre> uses PCRE

expecting success of 4202.36 'log with grep.patternType configuration': 
	git -c grep.patterntype=fixed \
	log -1 --pretty=tformat:%s --grep=s.c.nd >actual &&
	test_must_be_empty actual

ok 36 - log with grep.patternType configuration

expecting success of 4202.37 'log with grep.patternType configuration and command line': 
	echo second >expect &&
	git -c grep.patterntype=fixed \
	log -1 --pretty=tformat:%s --basic-regexp --grep=s.c.nd >actual &&
	test_cmp expect actual

ok 37 - log with grep.patternType configuration and command line

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
expecting success of 4202.38 'log with various grep.patternType configurations & command-lines': 
	git init pattern-type &&
	(
		cd pattern-type &&
		test_commit 1 file A &&

		# The tagname is overridden here because creating a
		# tag called "(1|2)" as test_commit would otherwise
		# implicitly do would fail on e.g. MINGW.
		test_commit "(1|2)" file B 2 &&

		echo "(1|2)" >expect.fixed &&
		cp expect.fixed expect.basic &&
		cp expect.fixed expect.extended &&
		cp expect.fixed expect.perl &&

		# A strcmp-like match with fixed.
		git -c grep.patternType=fixed log --pretty=tformat:%s \
			--grep="(1|2)" >actual.fixed &&

		# POSIX basic matches (, | and ) literally.
		git -c grep.patternType=basic log --pretty=tformat:%s \
			--grep="(.|.)" >actual.basic &&

		# POSIX extended needs to have | escaped to match it
		# literally, whereas under basic this is the same as
		# (|2), i.e. it would also match "1". This test checks
		# for extended by asserting that it is not matching
		# what basic would match.
		git -c grep.patternType=extended log --pretty=tformat:%s \
			--grep="\|2" >actual.extended &&
		if test_have_prereq PCRE
		then
			# Only PCRE would match [\d]\| with only
			# "(1|2)" due to [\d]. POSIX basic would match
			# both it and "1" since similarly to the
			# extended match above it is the same as
			# \([\d]\|\). POSIX extended would
			# match neither.
			git -c grep.patternType=perl log --pretty=tformat:%s \
				--grep="[\d]\|" >actual.perl &&
			test_cmp expect.perl actual.perl
		fi &&
		test_cmp expect.fixed actual.fixed &&
		test_cmp expect.basic actual.basic &&
		test_cmp expect.extended actual.extended &&

		git log --pretty=tformat:%s -F \
			--grep="(1|2)" >actual.fixed.short-arg &&
		git log --pretty=tformat:%s -E \
			--grep="\|2" >actual.extended.short-arg &&
		if test_have_prereq PCRE
		then
			git log --pretty=tformat:%s -P \
				--grep="[\d]\|" >actual.perl.short-arg
		else
			test_must_fail git log -P \
				--grep="[\d]\|"
		fi &&
		test_cmp expect.fixed actual.fixed.short-arg &&
		test_cmp expect.extended actual.extended.short-arg &&
		if test_have_prereq PCRE
		then
			test_cmp expect.perl actual.perl.short-arg
		fi &&

		git log --pretty=tformat:%s --fixed-strings \
			--grep="(1|2)" >actual.fixed.long-arg &&
		git log --pretty=tformat:%s --basic-regexp \
			--grep="(.|.)" >actual.basic.long-arg &&
		git log --pretty=tformat:%s --extended-regexp \
			--grep="\|2" >actual.extended.long-arg &&
		if test_have_prereq PCRE
		then
			git log --pretty=tformat:%s --perl-regexp \
				--grep="[\d]\|" >actual.perl.long-arg &&
			test_cmp expect.perl actual.perl.long-arg
		else
			test_must_fail git log --perl-regexp \
				--grep="[\d]\|"
		fi &&
		test_cmp expect.fixed actual.fixed.long-arg &&
		test_cmp expect.basic actual.basic.long-arg &&
		test_cmp expect.extended actual.extended.long-arg
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/pattern-type/.git/
[main (root-commit) d509854] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 0b7d5f0] (1|2)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 38 - log with various grep.patternType configurations & command-lines

expecting success of 4202.39 'show: understands grep.patternType, like 'log'': 
		git init "pattern-type-$cmd" &&
		(
			cd "pattern-type-$cmd" &&
			test_commit 1 file A &&
			test_commit "(1|2)" file B 2 &&

			git -c grep.patternType=fixed $cmd --grep="..." $myarg >actual &&
			test_must_be_empty actual &&

			git -c grep.patternType=basic $cmd --grep="..." $myarg >actual &&
			test_file_not_empty actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/pattern-type-show/.git/
[main (root-commit) d509854] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 0b7d5f0] (1|2)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 39 - show: understands grep.patternType, like 'log'

expecting success of 4202.40 'whatchanged: understands grep.patternType, like 'log'': 
		git init "pattern-type-$cmd" &&
		(
			cd "pattern-type-$cmd" &&
			test_commit 1 file A &&
			test_commit "(1|2)" file B 2 &&

			git -c grep.patternType=fixed $cmd --grep="..." $myarg >actual &&
			test_must_be_empty actual &&

			git -c grep.patternType=basic $cmd --grep="..." $myarg >actual &&
			test_file_not_empty actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/pattern-type-whatchanged/.git/
[main (root-commit) d509854] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 0b7d5f0] (1|2)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 40 - whatchanged: understands grep.patternType, like 'log'

expecting success of 4202.41 'reflog: understands grep.patternType, like 'log'': 
		git init "pattern-type-$cmd" &&
		(
			cd "pattern-type-$cmd" &&
			test_commit 1 file A &&
			test_commit "(1|2)" file B 2 &&

			git -c grep.patternType=fixed $cmd --grep="..." $myarg >actual &&
			test_must_be_empty actual &&

			git -c grep.patternType=basic $cmd --grep="..." $myarg >actual &&
			test_file_not_empty actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/pattern-type-reflog/.git/
[main (root-commit) d509854] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 0b7d5f0] (1|2)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 41 - reflog: understands grep.patternType, like 'log'

expecting success of 4202.42 'format-patch: understands grep.patternType, like 'log'': 
		git init "pattern-type-$cmd" &&
		(
			cd "pattern-type-$cmd" &&
			test_commit 1 file A &&
			test_commit "(1|2)" file B 2 &&

			git -c grep.patternType=fixed $cmd --grep="..." $myarg >actual &&
			test_must_be_empty actual &&

			git -c grep.patternType=basic $cmd --grep="..." $myarg >actual &&
			test_file_not_empty actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/pattern-type-format-patch/.git/
[main (root-commit) d509854] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 0b7d5f0] (1|2)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 42 - format-patch: understands grep.patternType, like 'log'

expecting success of 4202.43 'log --author': 
	cat >expect <<-\EOF &&
	Author: <BOLD;RED>A U<RESET> Thor <author@example.com>
	EOF
	git log -1 --color=always --author="A U" >log &&
	grep Author log >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 43 - log --author

expecting success of 4202.44 'log --committer': 
	cat >expect <<-\EOF &&
	Commit:     C O Mitter <committer@<BOLD;RED>example<RESET>.com>
	EOF
	git log -1 --color=always --pretty=fuller --committer="example" >log &&
	grep "Commit:" log >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 44 - log --committer

expecting success of 4202.45 'log -i --grep with color': 
	cat >expect <<-\EOF &&
	    <BOLD;RED>Sec<RESET>ond
	    <BOLD;RED>sec<RESET>ond
	EOF
	git log --color=always -i --grep=^sec >log &&
	grep -i sec log >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 45 - log -i --grep with color

expecting success of 4202.46 '-c color.grep.selected log --grep': 
	cat >expect <<-\EOF &&
	    <GREEN>th<RESET><BOLD;RED>ir<RESET><GREEN>d<RESET>
	EOF
	git -c color.grep.selected="green" log --color=always --grep=ir >log &&
	grep ir log >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 46 - -c color.grep.selected log --grep

expecting success of 4202.47 '-c color.grep.matchSelected log --grep': 
	cat >expect <<-\EOF &&
	    <BLUE>i<RESET>n<BLUE>i<RESET>t<BLUE>i<RESET>al
	EOF
	git -c color.grep.matchSelected="blue" log --color=always --grep=i >log &&
	grep al log >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 47 - -c color.grep.matchSelected log --grep

expecting success of 4202.48 'simple log --graph': 
	test_cmp_graph

ok 48 - simple log --graph

expecting success of 4202.49 'simple log --graph --line-prefix="123 "': 
	test_cmp_graph --line-prefix="123 "

ok 49 - simple log --graph --line-prefix="123 "

expecting success of 4202.50 'set up merge history': 
	git checkout -b side HEAD~4 &&
	test_commit side-1 1 1 &&
	test_commit side-2 2 2 &&
	git checkout main &&
	git merge side

Switched to a new branch 'side'
[side 4447a16] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
[side 1666e54] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2
Switched to branch 'main'
Merge made by the 'ort' strategy.
 1 | 1 +
 2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 1
 create mode 100644 2
ok 50 - set up merge history

expecting success of 4202.51 'log --graph with merge': 
	test_cmp_graph --date-order

ok 51 - log --graph with merge

expecting success of 4202.52 'log --graph --line-prefix="| | | " with merge': 
	test_cmp_graph --line-prefix="| | | " --date-order

ok 52 - log --graph --line-prefix="| | | " with merge

expecting success of 4202.53 'log --graph with merge with log.graphColors': 
	test_config log.graphColors " blue,invalid-color, cyan, red  , " &&
	lib_test_cmp_colored_graph --date-order --format=%s

error: invalid color value: invalid-color
warning: ignored invalid color 'invalid-color' in log.graphColors
ok 53 - log --graph with merge with log.graphColors

expecting success of 4202.54 'log --raw --graph -m with merge': 
	git log --raw --graph --oneline -m main | head -n 500 >actual &&
	grep "initial" actual

* 3a2fdcb initial
ok 54 - log --raw --graph -m with merge

expecting success of 4202.55 'diff-tree --graph': 
	git diff-tree --graph main^ | head -n 500 >actual &&
	grep "one" actual

:000000 100644 0000000000000000000000000000000000000000 9a333834d7f76d26bf24f07f0d8ab00010e78b91 A	one
ok 55 - diff-tree --graph

expecting success of 4202.56 'log --graph with full output': 
	git log --graph --date-order --pretty=short |
		git name-rev --name-only --annotate-stdin |
		sed "s/Merge:.*/Merge: A B/;s/ *\$//" >actual &&
	test_cmp expect actual

ok 56 - log --graph with full output

expecting success of 4202.57 'set up more tangled history': 
	git checkout -b tangle HEAD~6 &&
	test_commit tangle-a tangle-a a &&
	git merge main~3 &&
	git update-ref refs/prefetch/merge HEAD &&
	git merge side~1 &&
	git update-ref refs/rewritten/merge HEAD &&
	git checkout main &&
	git merge tangle &&
	git update-ref refs/hidden/tangle HEAD &&
	git checkout -b reach &&
	test_commit reach &&
	git checkout main &&
	git checkout -b octopus-a &&
	test_commit octopus-a &&
	git checkout main &&
	git checkout -b octopus-b &&
	test_commit octopus-b &&
	git checkout main &&
	test_commit seventh &&
	git merge octopus-a octopus-b &&
	git merge reach

Switched to a new branch 'tangle'
[tangle f6c510e] tangle-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tangle-a
Merge made by the 'ort' strategy.
 a/two      | 1 +
 one => ein | 0
 ichi       | 1 +
 3 files changed, 2 insertions(+)
 create mode 100644 a/two
 rename one => ein (100%)
 create mode 100644 ichi
Merge made by the 'ort' strategy.
 1 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1
Switched to branch 'main'
Merge made by the 'ort' strategy.
 tangle-a | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 tangle-a
Switched to a new branch 'reach'
[reach 0ac8a60] reach
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reach.t
Switched to branch 'main'
Switched to a new branch 'octopus-a'
[octopus-a 5ebe3d2] octopus-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 octopus-a.t
Switched to branch 'main'
Switched to a new branch 'octopus-b'
[octopus-b 869a174] octopus-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 octopus-b.t
Switched to branch 'main'
[main 8d18073] seventh
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 seventh.t
warning: refname 'octopus-a' is ambiguous.
warning: refname 'octopus-b' is ambiguous.
warning: refname 'octopus-a' is ambiguous.
warning: refname 'octopus-b' is ambiguous.
Trying simple merge with octopus-a
Trying simple merge with octopus-b
Merge made by the 'octopus' strategy.
 octopus-a.t | 1 +
 octopus-b.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 octopus-a.t
 create mode 100644 octopus-b.t
warning: refname 'reach' is ambiguous.
warning: refname 'reach' is ambiguous.
Merge made by the 'ort' strategy.
 reach.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 reach.t
ok 57 - set up more tangled history

expecting success of 4202.58 'log --graph with merge': 
	test_cmp_graph --date-order

ok 58 - log --graph with merge

expecting success of 4202.59 'log.decorate configuration': 
	git log --oneline --no-decorate >expect.none &&
	git log --oneline --decorate >expect.short &&
	git log --oneline --decorate=full >expect.full &&

	echo "[log] decorate" >>.git/config &&
	git log --oneline >actual &&
	test_cmp expect.short actual &&

	test_config log.decorate true &&
	git log --oneline >actual &&
	test_cmp expect.short actual &&
	git log --oneline --decorate=full >actual &&
	test_cmp expect.full actual &&
	git log --oneline --decorate=no >actual &&
	test_cmp expect.none actual &&

	test_config log.decorate no &&
	git log --oneline >actual &&
	test_cmp expect.none actual &&
	git log --oneline --decorate >actual &&
	test_cmp expect.short actual &&
	git log --oneline --decorate=full >actual &&
	test_cmp expect.full actual &&

	test_config log.decorate 1 &&
	git log --oneline >actual &&
	test_cmp expect.short actual &&
	git log --oneline --decorate=full >actual &&
	test_cmp expect.full actual &&
	git log --oneline --decorate=no >actual &&
	test_cmp expect.none actual &&

	test_config log.decorate short &&
	git log --oneline >actual &&
	test_cmp expect.short actual &&
	git log --oneline --no-decorate >actual &&
	test_cmp expect.none actual &&
	git log --oneline --decorate=full >actual &&
	test_cmp expect.full actual &&

	test_config log.decorate full &&
	git log --oneline >actual &&
	test_cmp expect.full actual &&
	git log --oneline --no-decorate >actual &&
	test_cmp expect.none actual &&
	git log --oneline --decorate >actual &&
	test_cmp expect.short actual &&

	test_unconfig log.decorate &&
	git log --pretty=raw >expect.raw &&
	test_config log.decorate full &&
	git log --pretty=raw >actual &&
	test_cmp expect.raw actual


ok 59 - log.decorate configuration

expecting success of 4202.60 'decorate-refs with glob': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b (octopus-b)
	octopus-a (octopus-a)
	reach
	EOF
	cat >expect.no-decorate <<-\EOF &&
	Merge-tag-reach
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b
	octopus-a
	reach
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs="heads/octopus*" >actual &&
	test_cmp expect.decorate actual &&
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs-exclude="heads/octopus*" \
		--decorate-refs="heads/octopus*" >actual &&
	test_cmp expect.no-decorate actual &&
	git -c log.excludeDecoration="heads/octopus*" log \
		-n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs="heads/octopus*" >actual &&
	test_cmp expect.decorate actual

ok 60 - decorate-refs with glob

expecting success of 4202.61 'decorate-refs without globs': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b
	octopus-a
	reach (tag: reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs="tags/reach" >actual &&
	test_cmp expect.decorate actual

ok 61 - decorate-refs without globs

expecting success of 4202.62 'multiple decorate-refs': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b (octopus-b)
	octopus-a (octopus-a)
	reach (tag: reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs="heads/octopus*" \
		--decorate-refs="tags/reach" >actual &&
    test_cmp expect.decorate actual

ok 62 - multiple decorate-refs

expecting success of 4202.63 'decorate-refs-exclude with glob': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach (HEAD -> main)
	Merge-tags-octopus-a-and-octopus-b
	seventh (tag: seventh)
	octopus-b (tag: octopus-b)
	octopus-a (tag: octopus-a)
	reach (tag: reach, reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs-exclude="heads/octopus*" >actual &&
	test_cmp expect.decorate actual &&
	git -c log.excludeDecoration="heads/octopus*" log \
		-n6 --decorate=short --pretty="tformat:%f%d" >actual &&
	test_cmp expect.decorate actual

ok 63 - decorate-refs-exclude with glob

expecting success of 4202.64 'decorate-refs-exclude without globs': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach (HEAD -> main)
	Merge-tags-octopus-a-and-octopus-b
	seventh (tag: seventh)
	octopus-b (tag: octopus-b, octopus-b)
	octopus-a (tag: octopus-a, octopus-a)
	reach (reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs-exclude="tags/reach" >actual &&
	test_cmp expect.decorate actual &&
	git -c log.excludeDecoration="tags/reach" log \
		-n6 --decorate=short --pretty="tformat:%f%d" >actual &&
	test_cmp expect.decorate actual

ok 64 - decorate-refs-exclude without globs

expecting success of 4202.65 'multiple decorate-refs-exclude': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach (HEAD -> main)
	Merge-tags-octopus-a-and-octopus-b
	seventh (tag: seventh)
	octopus-b (tag: octopus-b)
	octopus-a (tag: octopus-a)
	reach (reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs-exclude="heads/octopus*" \
		--decorate-refs-exclude="tags/reach" >actual &&
	test_cmp expect.decorate actual &&
	git -c log.excludeDecoration="heads/octopus*" \
		-c log.excludeDecoration="tags/reach" log \
		-n6 --decorate=short --pretty="tformat:%f%d" >actual &&
	test_cmp expect.decorate actual &&
	git -c log.excludeDecoration="heads/octopus*" log \
		--decorate-refs-exclude="tags/reach" \
		-n6 --decorate=short --pretty="tformat:%f%d" >actual &&
	test_cmp expect.decorate actual

ok 65 - multiple decorate-refs-exclude

expecting success of 4202.66 'decorate-refs and decorate-refs-exclude': 
	cat >expect.no-decorate <<-\EOF &&
	Merge-tag-reach (main)
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b
	octopus-a
	reach (reach)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs="heads/*" \
		--decorate-refs-exclude="heads/oc*" >actual &&
	test_cmp expect.no-decorate actual

ok 66 - decorate-refs and decorate-refs-exclude

expecting success of 4202.67 'deocrate-refs and log.excludeDecoration': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach (main)
	Merge-tags-octopus-a-and-octopus-b
	seventh
	octopus-b (octopus-b)
	octopus-a (octopus-a)
	reach (reach)
	EOF
	git -c log.excludeDecoration="heads/oc*" log \
		--decorate-refs="heads/*" \
		-n6 --decorate=short --pretty="tformat:%f%d" >actual &&
	test_cmp expect.decorate actual

ok 67 - deocrate-refs and log.excludeDecoration

expecting success of 4202.68 'decorate-refs-exclude and simplify-by-decoration': 
	cat >expect.decorate <<-\EOF &&
	Merge-tag-reach (HEAD -> main)
	reach (tag: reach, reach)
	seventh (tag: seventh)
	Merge-branch-tangle (refs/hidden/tangle)
	Merge-branch-side-early-part-into-tangle (refs/rewritten/merge, tangle)
	Merge-branch-main-early-part-into-tangle (refs/prefetch/merge)
	EOF
	git log -n6 --decorate=short --pretty="tformat:%f%d" \
		--decorate-refs-exclude="*octopus*" \
		--simplify-by-decoration >actual &&
	test_cmp expect.decorate actual &&
	git -c log.excludeDecoration="*octopus*" log \
		-n6 --decorate=short --pretty="tformat:%f%d" \
		--simplify-by-decoration >actual &&
	test_cmp expect.decorate actual

ok 68 - decorate-refs-exclude and simplify-by-decoration

expecting success of 4202.69 'decorate-refs with implied decorate from format': 
	cat >expect <<-\EOF &&
	side-2 (tag: side-2)
	side-1
	EOF
	git log --no-walk --format="%s%d" \
		--decorate-refs="*side-2" side-1 side-2 \
		>actual &&
	test_cmp expect actual

ok 69 - decorate-refs with implied decorate from format

expecting success of 4202.70 'implied decorate does not override option': 
	cat >expect <<-\EOF &&
	side-2 (tag: refs/tags/side-2, refs/heads/side)
	side-1 (tag: refs/tags/side-1)
	EOF
	git log --no-walk --format="%s%d" \
		--decorate=full side-1 side-2 \
		>actual &&
	test_cmp expect actual

ok 70 - implied decorate does not override option

expecting success of 4202.71 'decorate-refs and simplify-by-decoration without output': 
	cat >expect <<-\EOF &&
	side-2
	initial
	EOF
	# Do not just use a --format without %d here; we want to
	# make sure that we did not accidentally turn on displaying
	# the decorations, too. And that requires one of the regular
	# formats.
	git log --decorate-refs="*side-2" --oneline \
		--simplify-by-decoration >actual.raw &&
	sed "s/^[0-9a-f]* //" <actual.raw >actual &&
	test_cmp expect actual

ok 71 - decorate-refs and simplify-by-decoration without output

expecting success of 4202.72 'decorate-refs-exclude HEAD': 
	git log --decorate=full --oneline \
		--decorate-refs-exclude="HEAD" >actual &&
	! grep HEAD actual

ok 72 - decorate-refs-exclude HEAD

expecting success of 4202.73 'decorate-refs focus from default': 
	git log --decorate=full --oneline \
		--decorate-refs="refs/heads" >actual &&
	! grep HEAD actual

ok 73 - decorate-refs focus from default

expecting success of 4202.74 '--clear-decorations overrides defaults': 
	cat >expect.default <<-\EOF &&
	Merge-tag-reach (HEAD -> refs/heads/main)
	Merge-tags-octopus-a-and-octopus-b
	seventh (tag: refs/tags/seventh)
	octopus-b (tag: refs/tags/octopus-b, refs/heads/octopus-b)
	octopus-a (tag: refs/tags/octopus-a, refs/heads/octopus-a)
	reach (tag: refs/tags/reach, refs/heads/reach)
	Merge-branch-tangle
	Merge-branch-side-early-part-into-tangle (refs/heads/tangle)
	Merge-branch-main-early-part-into-tangle
	tangle-a (tag: refs/tags/tangle-a)
	Merge-branch-side
	side-2 (tag: refs/tags/side-2, refs/heads/side)
	side-1 (tag: refs/tags/side-1)
	Second
	sixth
	fifth
	fourth
	third
	second
	initial
	EOF
	git log --decorate=full --pretty="tformat:%f%d" >actual &&
	test_cmp expect.default actual &&

	cat >expect.all <<-\EOF &&
	Merge-tag-reach (HEAD -> refs/heads/main)
	Merge-tags-octopus-a-and-octopus-b
	seventh (tag: refs/tags/seventh)
	octopus-b (tag: refs/tags/octopus-b, refs/heads/octopus-b)
	octopus-a (tag: refs/tags/octopus-a, refs/heads/octopus-a)
	reach (tag: refs/tags/reach, refs/heads/reach)
	Merge-branch-tangle (refs/hidden/tangle)
	Merge-branch-side-early-part-into-tangle (refs/rewritten/merge, refs/heads/tangle)
	Merge-branch-main-early-part-into-tangle (refs/prefetch/merge)
	tangle-a (tag: refs/tags/tangle-a)
	Merge-branch-side
	side-2 (tag: refs/tags/side-2, refs/heads/side)
	side-1 (tag: refs/tags/side-1)
	Second
	sixth
	fifth
	fourth
	third
	second
	initial
	EOF
	git log --decorate=full --pretty="tformat:%f%d" \
		--clear-decorations >actual &&
	test_cmp expect.all actual &&
	git -c log.initialDecorationSet=all log \
		--decorate=full --pretty="tformat:%f%d" >actual &&
	test_cmp expect.all actual

ok 74 - --clear-decorations overrides defaults

expecting success of 4202.75 '--clear-decorations clears previous exclusions': 
	cat >expect.all <<-\EOF &&
	Merge-tag-reach (HEAD -> refs/heads/main)
	reach (tag: refs/tags/reach, refs/heads/reach)
	Merge-tags-octopus-a-and-octopus-b
	octopus-b (tag: refs/tags/octopus-b, refs/heads/octopus-b)
	octopus-a (tag: refs/tags/octopus-a, refs/heads/octopus-a)
	seventh (tag: refs/tags/seventh)
	Merge-branch-tangle (refs/hidden/tangle)
	Merge-branch-side-early-part-into-tangle (refs/rewritten/merge, refs/heads/tangle)
	Merge-branch-main-early-part-into-tangle (refs/prefetch/merge)
	tangle-a (tag: refs/tags/tangle-a)
	side-2 (tag: refs/tags/side-2, refs/heads/side)
	side-1 (tag: refs/tags/side-1)
	initial
	EOF

	git log --decorate=full --pretty="tformat:%f%d" \
		--simplify-by-decoration \
		--decorate-refs-exclude="heads/octopus*" \
		--decorate-refs="heads" \
		--clear-decorations >actual &&
	test_cmp expect.all actual &&

	cat >expect.filtered <<-\EOF &&
	Merge-tags-octopus-a-and-octopus-b
	octopus-b (refs/heads/octopus-b)
	octopus-a (refs/heads/octopus-a)
	initial
	EOF

	git log --decorate=full --pretty="tformat:%f%d" \
		--simplify-by-decoration \
		--decorate-refs-exclude="heads/octopus" \
		--decorate-refs="heads" \
		--clear-decorations \
		--decorate-refs-exclude="tags/" \
		--decorate-refs="heads/octopus*" >actual &&
	test_cmp expect.filtered actual

ok 75 - --clear-decorations clears previous exclusions

expecting success of 4202.76 'log.decorate config parsing': 
	git log --oneline --decorate=full >expect.full &&
	git log --oneline --decorate=short >expect.short &&

	test_config log.decorate full &&
	test_config log.mailmap true &&
	git log --oneline >actual &&
	test_cmp expect.full actual &&
	git log --oneline --decorate=short >actual &&
	test_cmp expect.short actual

ok 76 - log.decorate config parsing

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
died of signal 15 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
prerequisite TTY ok
expecting success of 4202.77 'log output on a TTY': 
	git log --color --oneline --decorate >expect.short &&

	test_terminal git log --oneline >actual &&
	test_cmp expect.short actual

ok 77 - log output on a TTY

expecting success of 4202.78 'reflog is expected format': 
	git log -g --abbrev-commit --pretty=oneline >expect &&
	git reflog >actual &&
	test_cmp expect actual

ok 78 - reflog is expected format

expecting success of 4202.79 'whatchanged is expected format': 
	git log --no-merges --raw >expect &&
	git whatchanged >actual &&
	test_cmp expect actual

ok 79 - whatchanged is expected format

expecting success of 4202.80 'log.abbrevCommit configuration': 
	git log --abbrev-commit >expect.log.abbrev &&
	git log --no-abbrev-commit >expect.log.full &&
	git log --pretty=raw >expect.log.raw &&
	git reflog --abbrev-commit >expect.reflog.abbrev &&
	git reflog --no-abbrev-commit >expect.reflog.full &&
	git whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
	git whatchanged --no-abbrev-commit >expect.whatchanged.full &&

	test_config log.abbrevCommit true &&

	git log >actual &&
	test_cmp expect.log.abbrev actual &&
	git log --no-abbrev-commit >actual &&
	test_cmp expect.log.full actual &&

	git log --pretty=raw >actual &&
	test_cmp expect.log.raw actual &&

	git reflog >actual &&
	test_cmp expect.reflog.abbrev actual &&
	git reflog --no-abbrev-commit >actual &&
	test_cmp expect.reflog.full actual &&

	git whatchanged >actual &&
	test_cmp expect.whatchanged.abbrev actual &&
	git whatchanged --no-abbrev-commit >actual &&
	test_cmp expect.whatchanged.full actual

ok 80 - log.abbrevCommit configuration

expecting success of 4202.81 'show added path under "--follow -M"': 
	# This tests for a regression introduced in v1.7.2-rc0~103^2~2
	test_create_repo regression &&
	(
		cd regression &&
		test_commit needs-another-commit &&
		test_commit foo.bar &&
		git log -M --follow -p foo.bar.t &&
		git log -M --follow --stat foo.bar.t &&
		git log -M --follow --name-only foo.bar.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/regression/.git/
[main (root-commit) 2c943e6] needs-another-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 needs-another-commit.t
[main 88a3158] foo.bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.bar.t
commit 88a3158a223f4c9eff6009796d6f4a01db6f394c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    foo.bar

diff --git a/foo.bar.t b/foo.bar.t
new file mode 100644
index 0000000..fbf8e96
--- /dev/null
+++ b/foo.bar.t
@@ -0,0 +1 @@
+foo.bar
commit 88a3158a223f4c9eff6009796d6f4a01db6f394c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    foo.bar

 foo.bar.t | 1 +
 1 file changed, 1 insertion(+)
commit 88a3158a223f4c9eff6009796d6f4a01db6f394c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    foo.bar

foo.bar.t
ok 81 - show added path under "--follow -M"

expecting success of 4202.82 'git log -c --follow': 
	test_create_repo follow-c &&
	(
		cd follow-c &&
		test_commit initial file original &&
		git rm file &&
		test_commit rename file2 original &&
		git reset --hard initial &&
		test_commit modify file foo &&
		git merge -m merge rename &&
		git log -c --follow file2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/follow-c/.git/
[main (root-commit) 1ae2302] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
rm 'file'
[main b666f54] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => file2 (100%)
HEAD is now at 1ae2302 initial
[main ab921c8] modify
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ort' strategy.
 file => file2 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => file2 (100%)
commit 0071b8c0b17b9c12c2c48a042c83e27bab6aad4e
Merge: ab921c8 b666f54
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:29:13 2005 -0700

    merge


commit b666f54d82025f8eaec1a190d72356cf651c2521
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    rename

diff --git a/file b/file2
similarity index 100%
rename from file
rename to file2

commit 1ae230258ca6e8e83c5d2d3840b9cf430273fca2
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:27:13 2005 -0700

    initial

diff --git a/file b/file
new file mode 100644
index 0000000..4b48dee
--- /dev/null
+++ b/file
@@ -0,0 +1 @@
+original
ok 82 - git log -c --follow

expecting success of 4202.83 'log --graph with diff and stats': 
	lib_test_cmp_short_graph --no-renames --stat -p

ok 83 - log --graph with diff and stats

expecting success of 4202.84 'log --line-prefix="*** " --graph with diff and stats': 
	lib_test_cmp_short_graph --line-prefix="*** " --no-renames --stat -p

ok 84 - log --line-prefix="*** " --graph with diff and stats

expecting success of 4202.85 'log --graph with --name-status': 
	test_cmp_graph --name-status tangle..reach

warning: refname 'reach' is ambiguous.
ok 85 - log --graph with --name-status

expecting success of 4202.86 'log --graph with --name-only': 
	test_cmp_graph --name-only tangle..reach

warning: refname 'reach' is ambiguous.
ok 86 - log --graph with --name-only

expecting success of 4202.87 '--no-graph countermands --graph': 
	git log >expect &&
	git log --graph --no-graph >actual &&
	test_cmp expect actual

ok 87 - --no-graph countermands --graph

expecting success of 4202.88 '--graph countermands --no-graph': 
	git log --graph >expect &&
	git log --no-graph --graph >actual &&
	test_cmp expect actual

ok 88 - --graph countermands --no-graph

expecting success of 4202.89 '--no-graph does not unset --topo-order': 
	git log --topo-order >expect &&
	git log --topo-order --no-graph >actual &&
	test_cmp expect actual

ok 89 - --no-graph does not unset --topo-order

expecting success of 4202.90 '--no-graph does not unset --parents': 
	git log --parents >expect &&
	git log --parents --no-graph >actual &&
	test_cmp expect actual

ok 90 - --no-graph does not unset --parents

expecting success of 4202.91 '--reverse and --graph conflict': 
	test_must_fail git log --reverse --graph 2>stderr &&
	test_i18ngrep "cannot be used together" stderr

fatal: options '--reverse' and '--graph' cannot be used together
ok 91 - --reverse and --graph conflict

expecting success of 4202.92 '--reverse --graph --no-graph works': 
	git log --reverse >expect &&
	git log --reverse --graph --no-graph >actual &&
	test_cmp expect actual

ok 92 - --reverse --graph --no-graph works

expecting success of 4202.93 '--show-linear-break and --graph conflict': 
	test_must_fail git log --show-linear-break --graph 2>stderr &&
	test_i18ngrep "cannot be used together" stderr

fatal: options '--show-linear-break' and '--graph' cannot be used together
ok 93 - --show-linear-break and --graph conflict

expecting success of 4202.94 '--show-linear-break --graph --no-graph works': 
	git log --show-linear-break >expect &&
	git log --show-linear-break --graph --no-graph >actual &&
	test_cmp expect actual

ok 94 - --show-linear-break --graph --no-graph works

expecting success of 4202.95 '--no-walk and --graph conflict': 
	test_must_fail git log --no-walk --graph 2>stderr &&
	test_i18ngrep "cannot be used together" stderr

fatal: options '--no-walk' and '--graph' cannot be used together
ok 95 - --no-walk and --graph conflict

expecting success of 4202.96 '--no-walk --graph --no-graph works': 
	git log --no-walk >expect &&
	git log --no-walk --graph --no-graph >actual &&
	test_cmp expect actual

ok 96 - --no-walk --graph --no-graph works

expecting success of 4202.97 '--walk-reflogs and --graph conflict': 
	test_must_fail git log --walk-reflogs --graph 2>stderr &&
	(test_i18ngrep "cannot combine" stderr ||
		test_i18ngrep "cannot be used together" stderr)

fatal: cannot combine --walk-reflogs with history-limiting options
ok 97 - --walk-reflogs and --graph conflict

expecting success of 4202.98 '--walk-reflogs --graph --no-graph works': 
	git log --walk-reflogs >expect &&
	git log --walk-reflogs --graph --no-graph >actual &&
	test_cmp expect actual

ok 98 - --walk-reflogs --graph --no-graph works

expecting success of 4202.99 'dotdot is a parent directory': 
	mkdir -p a/b &&
	( echo sixth && echo fifth ) >expect &&
	( cd a/b && git log --format=%s .. ) >actual &&
	test_cmp expect actual

ok 99 - dotdot is a parent directory

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t4202-log/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t4202-log/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 4202.100 'setup signed branch': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b signed main &&
	echo foo >foo &&
	git add foo &&
	git commit -S -m signed_commit

Switched to a new branch 'signed'
[signed b229a9f] signed_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
HEAD is now at b229a9f signed_commit
Switched to branch 'main'
ok 100 - setup signed branch

expecting success of 4202.101 'setup signed branch with subkey': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b signed-subkey main &&
	echo foo >foo &&
	git add foo &&
	git commit -SB7227189 -m signed_commit

Switched to a new branch 'signed-subkey'
[signed-subkey d77fc45] signed_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
HEAD is now at d77fc45 signed_commit
Switched to branch 'main'
ok 101 - setup signed branch with subkey

checking prerequisite: GPGSM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
	test_have_prereq GPG &&
	# Available key info:
	# * see t/lib-gpg/gpgsm-gen-key.in
	# To generate new certificate:
	#  * no passphrase
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o /tmp/gpgsm.crt.user \
	#		--generate-key \
	#		--batch t/lib-gpg/gpgsm-gen-key.in
	# To import certificate:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		--import /tmp/gpgsm.crt.user
	# To export into a .p12 we can later import:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o t/lib-gpg/gpgsm_cert.p12 \
	#		--export-secret-key-p12 "committer@example.com"
	echo | gpgsm --homedir "${GNUPGHOME}" \
		--passphrase-fd 0 --pinentry-mode loopback \
		--import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&

	gpgsm --homedir "${GNUPGHOME}" -K --with-colons |
	awk -F ":" "/^fpr:/ {printf \"%s S relax\\n\", \$10}" \
		>"${GNUPGHOME}/trustlist.txt" &&
	(gpgconf --reload all || : ) &&

	echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
	       -u committer@example.com -o /dev/null --sign -

)
gpgsm: total number processed: 2
gpgsm:               imported: 1
gpgsm:       secret keys read: 1
gpgsm:   secret keys imported: 1
gpgsm: DBG: adding certificates at level -2
gpgsm: signature created
prerequisite GPGSM ok
expecting success of 4202.102 'setup signed branch x509': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b signed-x509 main &&
	echo foo >foo &&
	git add foo &&
	test_config gpg.format x509 &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git commit -S -m signed_commit

Switched to a new branch 'signed-x509'
[signed-x509 b5c31ff] signed_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
HEAD is now at b5c31ff signed_commit
Switched to branch 'main'
ok 102 - setup signed branch x509

checking prerequisite: GPGSSH

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
	ssh_version=$(ssh-keygen -Y find-principals -n "git" 2>&1)
	test $? != 127 || exit 1
	echo $ssh_version | grep -q "find-principals:missing signature file"
	test $? = 0 || exit 1;

	# Setup some keys and an allowed signers file
	mkdir -p "${GNUPGHOME}" &&
	chmod 0700 "${GNUPGHOME}" &&
	(setfacl -k "${GNUPGHOME}" 2>/dev/null || true) &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null &&
	ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null &&
	ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null &&
	ssh-keygen -t ecdsa -N "" -f "${GPGSSH_KEY_ECDSA}" >/dev/null &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null &&

	cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")"
	"principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")"
	"principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")"
	"principal with number 4" $(cat "${GPGSSH_KEY_ECDSA}.pub")"
	EOF

	# Verify if at least one key and ssh-keygen works as expected
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig &&
	ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig &&
	echo "testpayload" |
	ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig

)
prerequisite GPGSSH not satisfied
ok 103 # skip setup sshkey signed branch (missing GPGSSH)

checking prerequisite: GPGSSH_VERIFYTIME

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
	# Check if ssh-keygen has a verify-time option by passing an invalid date to it
	ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" &&

	# Set up keys with key lifetimes
	ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null &&
	key_valid=$(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null &&
	key_invalid=$(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null &&
	key_expired=$(cat "${GPGSSH_KEY_EXPIRED}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null &&
	key_notyetvalid=$(cat "${GPGSSH_KEY_NOTYETVALID}.pub") &&

	# Timestamps outside of test_tick span
	ts2005a=20050401000000 ts2005b=200504020000 &&
	# Timestamps within test_tick span
	ts2005c=20050407000000 ts2005d=200504100000 &&
	# Definitely not yet valid / expired timestamps
	ts2000=20000101000000 ts2999=29990101000000 &&

	cat >>"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"timeboxed valid key" valid-after="$ts2005c",valid-before="$ts2005d" $key_valid"
	"timeboxed invalid key" valid-after="$ts2005a",valid-before="$ts2005b" $key_invalid"
	"principal with expired key" valid-before="$ts2000" $key_expired"
	"principal with not yet valid key" valid-after="$ts2999" $key_notyetvalid"
	EOF

	# and verify ssh-keygen verifies the key lifetime
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_EXPIRED}" >gpgssh_verifytime_prereq.sig &&
	! (ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with expired key" -s gpgssh_verifytime_prereq.sig)

)
prerequisite GPGSSH_VERIFYTIME not satisfied
ok 104 # skip create signed commits with keys having defined lifetimes (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

expecting success of 4202.105 'log x509 fingerprint': 
	echo "F8BF62E0693D0694816377099909C779FA23FD65 | " >expect &&
	git log -n1 --format="%GF | %GP" signed-x509 >actual &&
	test_cmp expect actual

ok 105 - log x509 fingerprint

expecting success of 4202.106 'log OpenPGP fingerprint': 
	echo "D4BE22311AD3131E5EDA29A461092E85B7227189" > expect &&
	git log -n1 --format="%GP" signed-subkey >actual &&
	test_cmp expect actual

ok 106 - log OpenPGP fingerprint

ok 107 # skip log ssh key fingerprint (missing GPGSSH)

expecting success of 4202.108 'log --graph --show-signature': 
	git log --graph --show-signature -n1 signed >actual &&
	grep "^| gpg: Signature made" actual &&
	grep "^| gpg: Good signature" actual

| gpg: Signature made Wed Dec 28 07:45:48 2022 UTC
| gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 108 - log --graph --show-signature

expecting success of 4202.109 'log --graph --show-signature x509': 
	git log --graph --show-signature -n1 signed-x509 >actual &&
	grep "^| gpgsm: Signature made" actual &&
	grep "^| gpgsm: Good signature" actual

| gpgsm: Signature made 2022-12-28 07:45:49 UTC
| gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
ok 109 - log --graph --show-signature x509

ok 110 # skip log --graph --show-signature ssh (missing GPGSSH)

ok 111 # skip log shows failure on expired signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 112 # skip log shows failure on not yet valid signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 113 # skip log show success with commit date and key validity matching (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 114 # skip log shows failure with commit date outside of key validity (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

expecting success of 4202.115 'log --graph --show-signature for merged tag': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b plain main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag &&
	git checkout plain &&
	git merge --no-ff -m msg signed_tag &&
	git log --graph --show-signature -n1 plain >actual &&
	grep "^|\\\  merged tag" actual &&
	grep "^| | gpg: Signature made" actual &&
	grep "^| | gpg: Good signature" actual

Switched to a new branch 'plain'
[plain e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged'
[tagged b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag'
| | gpg: Signature made Wed Dec 28 07:45:50 2022 UTC
| | gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
HEAD is now at 0fdee4a msg
Switched to branch 'main'
ok 115 - log --graph --show-signature for merged tag

expecting success of 4202.116 'log --graph --show-signature for merged tag in shallow clone': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b plain-shallow main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout --detach main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_shallow &&
	hash=$(git rev-parse HEAD) &&
	git checkout plain-shallow &&
	git merge --no-ff -m msg signed_tag_shallow &&
	git clone --depth 1 --no-local . shallow &&
	test_when_finished "rm -rf shallow" &&
	git -C shallow log --graph --show-signature -n1 plain-shallow >actual &&
	grep "tag signed_tag_shallow names a non-parent $hash" actual

Switched to a new branch 'plain-shallow'
[plain-shallow e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at c3f451c Merge tag 'reach'
[detached HEAD b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Previous HEAD position was b401988 baz_commit
Switched to branch 'plain-shallow'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Cloning into 'shallow'...
  tag signed_tag_shallow names a non-parent b40198806a6a49d1ef6d3b39079fbb5fb04065f5
HEAD is now at f7e9fca msg
Switched to branch 'main'
ok 116 - log --graph --show-signature for merged tag in shallow clone

expecting success of 4202.117 'log --graph --show-signature for merged tag with missing key': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b plain-nokey main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-nokey main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_nokey &&
	git checkout plain-nokey &&
	git merge --no-ff -m msg signed_tag_nokey &&
	GNUPGHOME=. git log --graph --show-signature -n1 plain-nokey >actual &&
	grep "^|\\\  merged tag" actual &&
	grep "^| | gpg: Signature made" actual &&
	grep -E "^| | gpg: Can't check signature: (public key not found|No public key)" actual

Switched to a new branch 'plain-nokey'
[plain-nokey e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-nokey'
[tagged-nokey b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-nokey'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag_nokey'
| | gpg: Signature made Wed Dec 28 07:45:53 2022 UTC
*   commit ff93c94e5b9dac2ea68677dfcddb733e047056ca
|\  merged tag 'signed_tag_nokey'
| | gpg: WARNING: unsafe permissions on homedir '/<<PKGBUILDDIR>>/t/trash directory.t4202-log'
| | gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t4202-log/pubring.kbx' created
| | gpg: Signature made Wed Dec 28 07:45:53 2022 UTC
| | gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
| | gpg:                issuer "committer@example.com"
| | gpg: Can't check signature: No public key
| | Merge: e4ca54b b401988
| | Author: A U Thor <author@example.com>
| | Date:   Thu Apr 7 15:26:13 2005 -0700
| | 
| |     msg
HEAD is now at ff93c94 msg
Switched to branch 'main'
ok 117 - log --graph --show-signature for merged tag with missing key

expecting success of 4202.118 'log --graph --show-signature for merged tag with bad signature': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b plain-bad main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-bad main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_bad &&
	git cat-file tag signed_tag_bad >raw &&
	sed -e "s/signed_tag_msg/forged/" raw >forged &&
	git hash-object -w -t tag forged >forged.tag &&
	git checkout plain-bad &&
	git merge --no-ff -m msg "$(cat forged.tag)" &&
	git log --graph --show-signature -n1 plain-bad >actual &&
	grep "^|\\\  merged tag" actual &&
	grep "^| | gpg: Signature made" actual &&
	grep "^| | gpg: BAD signature from" actual

Switched to a new branch 'plain-bad'
[plain-bad e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-bad'
[tagged-bad b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-bad'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag_bad'
| | gpg: Signature made Wed Dec 28 07:45:53 2022 UTC
| | gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
HEAD is now at f1332bf msg
Switched to branch 'main'
ok 118 - log --graph --show-signature for merged tag with bad signature

expecting success of 4202.119 'log --show-signature for merged tag with GPG failure': 
	test_when_finished "git reset --hard && git checkout main" &&
	git checkout -b plain-fail main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-fail main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_fail &&
	git checkout plain-fail &&
	git merge --no-ff -m msg signed_tag_fail &&
	if ! test_have_prereq VALGRIND
	then
		TMPDIR="$(pwd)/bogus" git log --show-signature -n1 plain-fail >actual &&
		grep "^merged tag" actual &&
		grep "^No signature" actual &&
		! grep "^gpg: Signature made" actual
	fi

Switched to a new branch 'plain-fail'
[plain-fail e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-fail'
[tagged-fail b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-fail'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
error: could not create temporary file: No such file or directory
merged tag 'signed_tag_fail'
No signature
HEAD is now at 28a3235 msg
Switched to branch 'main'
ok 119 - log --show-signature for merged tag with GPG failure

expecting success of 4202.120 'log --graph --show-signature for merged tag x509': 
	test_when_finished "git reset --hard && git checkout main" &&
	test_config gpg.format x509 &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git checkout -b plain-x509 main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-x509 main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_x509 &&
	git checkout plain-x509 &&
	git merge --no-ff -m msg signed_tag_x509 &&
	git log --graph --show-signature -n1 plain-x509 >actual &&
	grep "^|\\\  merged tag" actual &&
	grep "^| | gpgsm: Signature made" actual &&
	grep "^| | gpgsm: Good signature" actual

Switched to a new branch 'plain-x509'
[plain-x509 e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-x509'
[tagged-x509 b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-x509'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag_x509'
| | gpgsm: Signature made 2022-12-28 07:45:55 UTC
| | gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
HEAD is now at 28eaedc msg
Switched to branch 'main'
ok 120 - log --graph --show-signature for merged tag x509

expecting success of 4202.121 'log --graph --show-signature for merged tag x509 missing key': 
	test_when_finished "git reset --hard && git checkout main" &&
	test_config gpg.format x509 &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git checkout -b plain-x509-nokey main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-x509-nokey main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_x509_nokey &&
	git checkout plain-x509-nokey &&
	git merge --no-ff -m msg signed_tag_x509_nokey &&
	GNUPGHOME=. git log --graph --show-signature -n1 plain-x509-nokey >actual &&
	grep "^|\\\  merged tag" actual &&
	grep -e "^| | gpgsm: certificate not found" \
	     -e "^| | gpgsm: failed to find the certificate: Not found" actual

Switched to a new branch 'plain-x509-nokey'
[plain-x509-nokey e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-x509-nokey'
[tagged-x509-nokey b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-x509-nokey'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag_x509_nokey'
| | gpgsm: certificate not found
HEAD is now at 2eae50f msg
Switched to branch 'main'
ok 121 - log --graph --show-signature for merged tag x509 missing key

expecting success of 4202.122 'log --graph --show-signature for merged tag x509 bad signature': 
	test_when_finished "git reset --hard && git checkout main" &&
	test_config gpg.format x509 &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git checkout -b plain-x509-bad main &&
	echo aaa >bar &&
	git add bar &&
	git commit -m bar_commit &&
	git checkout -b tagged-x509-bad main &&
	echo bbb >baz &&
	git add baz &&
	git commit -m baz_commit &&
	git tag -s -m signed_tag_msg signed_tag_x509_bad &&
	git cat-file tag signed_tag_x509_bad >raw &&
	sed -e "s/signed_tag_msg/forged/" raw >forged &&
	git hash-object -w -t tag forged >forged.tag &&
	git checkout plain-x509-bad &&
	git merge --no-ff -m msg "$(cat forged.tag)" &&
	git log --graph --show-signature -n1 plain-x509-bad >actual &&
	grep "^|\\\  merged tag" actual &&
	grep "^| | gpgsm: Signature made" actual &&
	grep "^| | gpgsm: invalid signature" actual

Switched to a new branch 'plain-x509-bad'
[plain-x509-bad e4ca54b] bar_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'tagged-x509-bad'
[tagged-x509-bad b401988] baz_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'plain-x509-bad'
Merge made by the 'ort' strategy.
 baz | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 baz
|\  merged tag 'signed_tag_x509_bad'
| | gpgsm: Signature made 2022-12-28 07:45:57 UTC
| | gpgsm: invalid signature: message digest attribute does not match computed one
HEAD is now at 3b5efc3 msg
Switched to branch 'main'
ok 122 - log --graph --show-signature for merged tag x509 bad signature

expecting success of 4202.123 '--no-show-signature overrides --show-signature': 
	git log -1 --show-signature --no-show-signature signed >actual &&
	! grep "^gpg:" actual

ok 123 - --no-show-signature overrides --show-signature

expecting success of 4202.124 'log.showsignature=true behaves like --show-signature': 
	test_config log.showsignature true &&
	git log -1 signed >actual &&
	grep "gpg: Signature made" actual &&
	grep "gpg: Good signature" actual

gpg: Signature made Wed Dec 28 07:45:48 2022 UTC
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 124 - log.showsignature=true behaves like --show-signature

expecting success of 4202.125 '--no-show-signature overrides log.showsignature=true': 
	test_config log.showsignature true &&
	git log -1 --no-show-signature signed >actual &&
	! grep "^gpg:" actual

ok 125 - --no-show-signature overrides log.showsignature=true

expecting success of 4202.126 '--show-signature overrides log.showsignature=false': 
	test_config log.showsignature false &&
	git log -1 --show-signature signed >actual &&
	grep "gpg: Signature made" actual &&
	grep "gpg: Good signature" actual

gpg: Signature made Wed Dec 28 07:45:48 2022 UTC
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 126 - --show-signature overrides log.showsignature=false

expecting success of 4202.127 'log --graph --no-walk is forbidden': 
	test_must_fail git log --graph --no-walk

fatal: options '--no-walk' and '--graph' cannot be used together
ok 127 - log --graph --no-walk is forbidden

expecting success of 4202.128 'log on empty repo fails': 
	git init empty &&
	test_when_finished "rm -rf empty" &&
	test_must_fail git -C empty log 2>stderr &&
	test_i18ngrep does.not.have.any.commits stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/empty/.git/
fatal: your current branch 'main' does not have any commits yet
ok 128 - log on empty repo fails

expecting success of 4202.129 'log diagnoses bogus HEAD hash': 
	git init empty &&
	test_when_finished "rm -rf empty" &&
	echo 1234abcd >empty/.git/refs/heads/main &&
	test_must_fail git -C empty log 2>stderr &&
	test_i18ngrep broken stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/empty/.git/
fatal: your current branch appears to be broken
ok 129 - log diagnoses bogus HEAD hash

expecting success of 4202.130 'log diagnoses bogus HEAD symref': 
	git init empty &&
	echo "ref: refs/heads/invalid.lock" > empty/.git/HEAD &&
	test_must_fail git -C empty log 2>stderr &&
	test_i18ngrep broken stderr &&
	test_must_fail git -C empty log --default totally-bogus 2>stderr &&
	test_i18ngrep broken stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4202-log/empty/.git/
fatal: your current branch appears to be broken
fatal: your current branch appears to be broken
ok 130 - log diagnoses bogus HEAD symref

expecting success of 4202.131 'log does not default to HEAD when rev input is given': 
	git log --branches=does-not-exist >actual &&
	test_must_be_empty actual

ok 131 - log does not default to HEAD when rev input is given

expecting success of 4202.132 'do not default to HEAD with ignored object on cmdline': 
	git log --ignore-missing $ZERO_OID >actual &&
	test_must_be_empty actual

ok 132 - do not default to HEAD with ignored object on cmdline

expecting success of 4202.133 'do not default to HEAD with ignored object on stdin': 
	echo $ZERO_OID | git log --ignore-missing --stdin >actual &&
	test_must_be_empty actual

ok 133 - do not default to HEAD with ignored object on stdin

expecting success of 4202.134 'set up --source tests': 
	git checkout --orphan source-a &&
	test_commit one &&
	test_commit two &&
	git checkout -b source-b HEAD^ &&
	test_commit three

Switched to a new branch 'source-a'
[source-a (root-commit) 1ac6c77] one
 Author: A U Thor <author@example.com>
 11 files changed, 11 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 ein
 create mode 100644 ichi
 create mode 100644 octopus-a.t
 create mode 100644 octopus-b.t
 create mode 100644 one
 create mode 100644 one.t
 create mode 100644 reach.t
 create mode 100644 seventh.t
 create mode 100644 tangle-a
[source-a 8e393e1] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to a new branch 'source-b'
[source-b 09e12a9] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 134 - set up --source tests

expecting success of 4202.135 'log --source paints branch names': 
	cat >expect <<-EOF &&
	$(git rev-parse --short :/three)	source-b three
	$(git rev-parse --short :/two  )	source-a two
	$(git rev-parse --short :/one  )	source-b one
	EOF
	git log --oneline --source source-a source-b >actual &&
	test_cmp expect actual

ok 135 - log --source paints branch names

expecting success of 4202.136 'log --source paints tag names': 
	git tag -m tagged source-tag &&
	cat >expect <<-EOF &&
	$(git rev-parse --short :/three)	source-tag three
	$(git rev-parse --short :/two  )	source-a two
	$(git rev-parse --short :/one  )	source-tag one
	EOF
	git log --oneline --source source-tag source-a >actual &&
	test_cmp expect actual

ok 136 - log --source paints tag names

expecting success of 4202.137 'log --source paints symmetric ranges': 
	cat >expect <<-EOF &&
	$(git rev-parse --short :/three)	source-b three
	$(git rev-parse --short :/two  )	source-a two
	EOF
	git log --oneline --source source-a...source-b >actual &&
	test_cmp expect actual

ok 137 - log --source paints symmetric ranges

expecting success of 4202.138 '--exclude-promisor-objects does not BUG-crash': 
	test_must_fail git log --exclude-promisor-objects source-a

fatal: unrecognized argument: --exclude-promisor-objects
ok 138 - --exclude-promisor-objects does not BUG-crash

expecting success of 4202.139 'log --decorate includes all levels of tag annotated tags': 
	git checkout -b branch &&
	git commit --allow-empty -m "new commit" &&
	git tag lightweight HEAD &&
	git tag -m annotated annotated HEAD &&
	git tag -m double-0 double-0 HEAD &&
	git tag -m double-1 double-1 double-0 &&
	cat >expect <<-\EOF &&
	HEAD -> branch, tag: lightweight, tag: double-1, tag: double-0, tag: annotated
	EOF
	git log -1 --format="%D" >actual &&
	test_cmp expect actual

Switched to a new branch 'branch'
[branch 30063b0] new commit
 Author: A U Thor <author@example.com>
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f double-1 double-0^{}
hint: Disable this message with "git config advice.nestedTag false"
ok 139 - log --decorate includes all levels of tag annotated tags

expecting success of 4202.140 'log --decorate does not include things outside filter': 
	reflist="refs/prefetch refs/rebase-merge refs/bundle" &&

	for ref in $reflist
	do
		git update-ref $ref/fake HEAD || return 1
	done &&

	git log --decorate=full --oneline >actual &&

	# None of the refs are visible:
	! grep /fake actual

ok 140 - log --decorate does not include things outside filter

expecting success of 4202.141 'log --end-of-options': 
       git update-ref refs/heads/--source HEAD &&
       git log --end-of-options --source >actual &&
       git log >expect &&
       test_cmp expect actual

ok 141 - log --end-of-options

expecting success of 4202.142 'set up commits with different authors': 
	git checkout --orphan authors &&
	test_commit --author "Jim <jim@example.com>" jim_1 &&
	test_commit --author "Val <val@example.com>" val_1 &&
	test_commit --author "Val <val@example.com>" val_2 &&
	test_commit --author "Jim <jim@example.com>" jim_2 &&
	test_commit --author "Val <val@example.com>" val_3 &&
	test_commit --author "Jim <jim@example.com>" jim_3

Switched to a new branch 'authors'
[authors (root-commit) 26f25a8] jim_1
 Author: Jim <jim@example.com>
 13 files changed, 13 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 ein
 create mode 100644 ichi
 create mode 100644 jim_1.t
 create mode 100644 octopus-a.t
 create mode 100644 octopus-b.t
 create mode 100644 one
 create mode 100644 one.t
 create mode 100644 reach.t
 create mode 100644 seventh.t
 create mode 100644 tangle-a
 create mode 100644 three.t
[authors 0d05a9a] val_1
 Author: Val <val@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 val_1.t
[authors 48bb21d] val_2
 Author: Val <val@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 val_2.t
[authors da9c846] jim_2
 Author: Jim <jim@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 jim_2.t
[authors 062abbf] val_3
 Author: Val <val@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 val_3.t
[authors ef0a763] jim_3
 Author: Jim <jim@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 jim_3.t
ok 142 - set up commits with different authors

expecting success of 4202.143 'log --invert-grep --grep --author': 
	cat >expect <<-\EOF &&
	val_3
	val_1
	EOF
	git log --format=%s --author=Val --grep 2 --invert-grep >actual &&
	test_cmp expect actual

ok 143 - log --invert-grep --grep --author

# passed all 143 test(s)
1..143
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4212-log-corrupt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4212-log-corrupt/.git/
expecting success of 4212.1 'setup': 
	test_commit foo &&

	git cat-file commit HEAD |
	sed "/^author /s/>/>-<>/" >broken_email.commit &&
	git hash-object -w -t commit broken_email.commit >broken_email.hash &&
	git update-ref refs/heads/broken_email $(cat broken_email.hash)

[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 1 - setup

expecting success of 4212.2 'fsck notices broken commit': 
	test_must_fail git fsck 2>actual &&
	test_i18ngrep invalid.author actual

error in commit fb99366eaec195640f250774fc94d75e4f06f441: missingSpaceBeforeDate: invalid author/committer line - missing space before date
ok 2 - fsck notices broken commit

expecting success of 4212.3 'git log with broken author email': 
	{
		echo commit $(cat broken_email.hash) &&
		echo "Author: A U Thor <author@example.com>" &&
		echo "Date:   Thu Apr 7 15:13:13 2005 -0700" &&
		echo &&
		echo "    foo"
	} >expect.out &&

	git log broken_email >actual.out 2>actual.err &&

	test_cmp expect.out actual.out &&
	test_must_be_empty actual.err

ok 3 - git log with broken author email

expecting success of 4212.4 'git log --format with broken author email': 
	echo "A U Thor+author@example.com+Thu Apr 7 15:13:13 2005 -0700" >expect.out &&

	git log --format="%an+%ae+%ad" broken_email >actual.out 2>actual.err &&

	test_cmp expect.out actual.out &&
	test_must_be_empty actual.err

ok 4 - git log --format with broken author email

expecting success of 4212.5 'unparsable dates produce sentinel value': 
	commit=$(munge_author_date HEAD totally_bogus) &&
	echo "Date:   Thu Jan 1 00:00:00 1970 +0000" >expect &&
	git log -1 $commit >actual.full &&
	grep Date <actual.full >actual &&
	test_cmp expect actual

ok 5 - unparsable dates produce sentinel value

expecting success of 4212.6 'unparsable dates produce sentinel value (%ad)': 
	commit=$(munge_author_date HEAD totally_bogus) &&
	echo >expect &&
	git log -1 --format=%ad $commit >actual &&
	test_cmp expect actual

ok 6 - unparsable dates produce sentinel value (%ad)

expecting success of 4212.7 'date parser recognizes integer overflow': 
	commit=$(munge_author_date HEAD 18446744073709551617) &&
	echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
	git log -1 --format=%ad $commit >actual &&
	test_cmp expect actual

ok 7 - date parser recognizes integer overflow

expecting success of 4212.8 'date parser recognizes time_t overflow': 
	commit=$(munge_author_date HEAD 18446744073709551614) &&
	echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
	git log -1 --format=%ad $commit >actual &&
	test_cmp expect actual

ok 8 - date parser recognizes time_t overflow

expecting success of 4212.9 'absurdly far-in-future date': 
	commit=$(munge_author_date HEAD 999999999999999999) &&
	git log -1 --format=%ad $commit

Thu Jan 1 00:00:00 1970 +0000
ok 9 - absurdly far-in-future date

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4211-line-log.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4211-line-log/.git/
expecting success of 4211.1 'setup (import history)': 
	git fast-import < "$TEST_DIRECTORY"/t4211/history.export &&
	git reset --hard

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           35 (         0 duplicates                  )
      blobs  :           11 (         0 duplicates         10 deltas of         10 attempts)
      trees  :           12 (         0 duplicates          0 deltas of         11 attempts)
      commits:           12 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           4 (         4 loads     )
      marks:           1024 (        23 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       3020
---------------------------------------------------------------------

HEAD is now at 0d8dcfc move within the file
ok 1 - setup (import history)

expecting success of 4211.2 'basic command line parsing': 
	# This may fail due to "no such path a.c in commit", or
	# "-L is incompatible with pathspec", depending on the
	# order the error is checked.  Either is acceptable.
	test_must_fail git log -L1,1:a.c -- a.c &&

	# -L requires there is no pathspec
	test_must_fail git log -L1,1:b.c -- b.c 2>error &&
	test_i18ngrep "cannot be used with pathspec" error &&

	# This would fail because --follow wants a single path, but
	# we may fail due to incompatibility between -L/--follow in
	# the future.  Either is acceptable.
	test_must_fail git log -L1,1:b.c --follow &&
	test_must_fail git log --follow -L1,1:b.c &&

	# This would fail because -L wants no pathspec, but
	# we may fail due to incompatibility between -L/--follow in
	# the future.  Either is acceptable.
	test_must_fail git log --follow -L1,1:b.c -- b.c

fatal: -L<range>:<file> cannot be used with pathspec
fatal: -L<range>:<file> cannot be used with pathspec
fatal: --follow requires exactly one pathspec
fatal: --follow requires exactly one pathspec
fatal: -L<range>:<file> cannot be used with pathspec
ok 2 - basic command line parsing

expecting success of 4211.3 '-L 4,12:a.c simple': 
		git log -L 4,12:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-f actual
	
ok 3 - -L 4,12:a.c simple

expecting success of 4211.4 '-L 4,+9:a.c simple': 
		git log -L 4,+9:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-f actual
	
ok 4 - -L 4,+9:a.c simple

expecting success of 4211.5 '-L '/long f/,/^}/:a.c' simple': 
		git log -L '/long f/,/^}/:a.c' simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-f actual
	
ok 5 - -L '/long f/,/^}/:a.c' simple

expecting success of 4211.6 '-L :f:a.c simple': 
		git log -L :f:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-f-to-main actual
	
ok 6 - -L :f:a.c simple

expecting success of 4211.7 '-L '/main/,/^}/:a.c' simple': 
		git log -L '/main/,/^}/:a.c' simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-main actual
	
ok 7 - -L '/main/,/^}/:a.c' simple

expecting success of 4211.8 '-L :main:a.c simple': 
		git log -L :main:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.simple-main-to-end actual
	
ok 8 - -L :main:a.c simple

expecting success of 4211.9 '-L 1,+4:a.c simple': 
		git log -L 1,+4:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.beginning-of-file actual
	
ok 9 - -L 1,+4:a.c simple

expecting success of 4211.10 '-L 20:a.c simple': 
		git log -L 20:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.end-of-file actual
	
ok 10 - -L 20:a.c simple

expecting success of 4211.11 '-L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple': 
		git log -L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.two-ranges actual
	
ok 11 - -L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple

expecting success of 4211.12 '-L 24,+1:a.c simple': 
		git log -L 24,+1:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.vanishes-early actual
	
ok 12 - -L 24,+1:a.c simple

expecting success of 4211.13 '-M -L '/long f/,/^}/:b.c' move-support': 
		git log -M -L '/long f/,/^}/:b.c' move-support >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.move-support-f actual
	
ok 13 - -M -L '/long f/,/^}/:b.c' move-support

expecting success of 4211.14 '-M -L ':f:b.c' parallel-change': 
		git log -M -L ':f:b.c' parallel-change >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.parallel-change-f-to-main actual
	
ok 14 - -M -L ':f:b.c' parallel-change

expecting success of 4211.15 '-L 4,12:a.c -L :main:a.c simple': 
		git log -L 4,12:a.c -L :main:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.multiple actual
	
ok 15 - -L 4,12:a.c -L :main:a.c simple

expecting success of 4211.16 '-L 4,18:a.c -L ^:main:a.c simple': 
		git log -L 4,18:a.c -L ^:main:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.multiple-overlapping actual
	
ok 16 - -L 4,18:a.c -L ^:main:a.c simple

expecting success of 4211.17 '-L :main:a.c -L 4,18:a.c simple': 
		git log -L :main:a.c -L 4,18:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.multiple-overlapping actual
	
ok 17 - -L :main:a.c -L 4,18:a.c simple

expecting success of 4211.18 '-L 4:a.c -L 8,12:a.c simple': 
		git log -L 4:a.c -L 8,12:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.multiple-superset actual
	
ok 18 - -L 4:a.c -L 8,12:a.c simple

expecting success of 4211.19 '-L 8,12:a.c -L 4:a.c simple': 
		git log -L 8,12:a.c -L 4:a.c simple >actual &&
		test_cmp "$TEST_DIRECTORY"/t4211/sha1/expect.multiple-superset actual
	
ok 19 - -L 8,12:a.c -L 4:a.c simple

expecting success of 4211.20 'invalid args: -L': 
		test_must_fail git log -L 2>errors &&
		test_i18ngrep 'switch.*requires a value' errors
	
error: switch `L' requires a value
ok 20 - invalid args: -L

expecting success of 4211.21 'invalid args: -L b.c': 
		test_must_fail git log -L b.c 2>errors &&
		test_i18ngrep 'argument not .start,end:file' errors
	
fatal: -L argument not 'start,end:file' or ':funcname:file': b.c
ok 21 - invalid args: -L b.c

expecting success of 4211.22 'invalid args: -L 1:': 
		test_must_fail git log -L 1: 2>errors &&
		test_i18ngrep 'argument not .start,end:file' errors
	
fatal: -L argument not 'start,end:file' or ':funcname:file': 1:
ok 22 - invalid args: -L 1:

expecting success of 4211.23 'invalid args: -L 1:nonexistent': 
		test_must_fail git log -L 1:nonexistent 2>errors &&
		test_i18ngrep 'There is no path' errors
	
fatal: There is no path nonexistent in the commit
ok 23 - invalid args: -L 1:nonexistent

expecting success of 4211.24 'invalid args: -L 1:simple': 
		test_must_fail git log -L 1:simple 2>errors &&
		test_i18ngrep 'There is no path' errors
	
fatal: There is no path simple in the commit
ok 24 - invalid args: -L 1:simple

expecting success of 4211.25 'invalid args: -L '/foo:b.c'': 
		test_must_fail git log -L '/foo:b.c' 2>errors &&
		test_i18ngrep 'argument not .start,end:file' errors
	
fatal: -L argument not 'start,end:file' or ':funcname:file': /foo:b.c
ok 25 - invalid args: -L '/foo:b.c'

expecting success of 4211.26 'invalid args: -L 1000:b.c': 
		test_must_fail git log -L 1000:b.c 2>errors &&
		test_i18ngrep 'has only.*lines' errors
	
fatal: file b.c has only 26 lines
ok 26 - invalid args: -L 1000:b.c

expecting success of 4211.27 'invalid args: -L :b.c': 
		test_must_fail git log -L :b.c 2>errors &&
		test_i18ngrep 'argument not .start,end:file' errors
	
fatal: -L argument not 'start,end:file' or ':funcname:file': :b.c
ok 27 - invalid args: -L :b.c

expecting success of 4211.28 'invalid args: -L :foo:b.c': 
		test_must_fail git log -L :foo:b.c 2>errors &&
		test_i18ngrep 'no match' errors
	
fatal: -L parameter 'foo' starting at line 1: no match
ok 28 - invalid args: -L :foo:b.c

expecting success of 4211.29 '-L X (X == nlines)': 
	n=$(wc -l <b.c) &&
	git log -L $n:b.c

commit 0d8dcfc6b968e06a27d5215bad1fdde3de9d6235
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:50:24 2013 +0100

    move within the file

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -25,0 +26,1 @@
+}
ok 29 - -L X (X == nlines)

expecting success of 4211.30 '-L X (X == nlines + 1)': 
	n=$(expr $(wc -l <b.c) + 1) &&
	test_must_fail git log -L $n:b.c

fatal: file b.c has only 26 lines
ok 30 - -L X (X == nlines + 1)

expecting success of 4211.31 '-L X (X == nlines + 2)': 
	n=$(expr $(wc -l <b.c) + 2) &&
	test_must_fail git log -L $n:b.c

fatal: file b.c has only 26 lines
ok 31 - -L X (X == nlines + 2)

expecting success of 4211.32 '-L ,Y (Y == nlines)': 
	n=$(printf "%d" $(wc -l <b.c)) &&
	git log -L ,$n:b.c

commit 0d8dcfc6b968e06a27d5215bad1fdde3de9d6235
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:50:24 2013 +0100

    move within the file

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,26 @@
 #include <unistd.h>
 #include <stdio.h>
 
-long f(long x)
-{
-	int s = 0;
-	while (x) {
-		x /= 2;
-		s++;
-	}
-	return s;
-}
+long f(long x);
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */
+
+long f(long x)
+{
+	int s = 0;
+	while (x) {
+		x /= 2;
+		s++;
+	}
+	return s;
+}

commit 6ce3c4ff690136099bb17e1a8766b75764726ea7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:49:50 2013 +0100

    another simple change

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
-		x >>= 1;
+		x /= 2;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */

commit 4659538844daa2849b1a9e7d6fadb96fcd26fc83
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:43 2013 +0100

    change back to complete line

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
\ No newline at end of file
+}
+
+/* incomplete lines are bad! */

commit 100b61a6f2f720f812620a9d10afb3a960ccb73c
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:10 2013 +0100

    change to an incomplete line at end

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,22 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
+}
\ No newline at end of file

commit 4a23ae5c98d59a58c6da036156959f2dc9f472ad
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:47:40 2013 +0100

    change at very beginning

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,22 @@
+#include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:41 2013 +0100

    touch comment

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
- * A comment.
+ * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:16 2013 +0100

    touch both functions

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
-int f(int x)
+long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
-	printf("%d\n", f(15));
+	printf("%ld\n", f(15));
 	return 0;
 }

commit f04fb20f2c77850996cba739709acc6faecc58f7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:55 2013 +0100

    change f()

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,20 +1,21 @@
 #include <stdio.h>
 
 int f(int x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
+	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
 	printf("%d\n", f(15));
 	return 0;
 }

commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:48 2013 +0100

    initial

diff --git a/a.c b/a.c
--- /dev/null
+++ b/a.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+int f(int x)
+{
+	int s = 0;
+	while (x) {
+		x >>= 1;
+		s++;
+	}
+}
+
+/*
+ * A comment.
+ */
+
+int main ()
+{
+	printf("%d\n", f(15));
+	return 0;
+}
ok 32 - -L ,Y (Y == nlines)

expecting success of 4211.33 '-L ,Y (Y == nlines + 1)': 
	n=$(expr $(wc -l <b.c) + 1) &&
	git log -L ,$n:b.c

commit 0d8dcfc6b968e06a27d5215bad1fdde3de9d6235
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:50:24 2013 +0100

    move within the file

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,26 @@
 #include <unistd.h>
 #include <stdio.h>
 
-long f(long x)
-{
-	int s = 0;
-	while (x) {
-		x /= 2;
-		s++;
-	}
-	return s;
-}
+long f(long x);
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */
+
+long f(long x)
+{
+	int s = 0;
+	while (x) {
+		x /= 2;
+		s++;
+	}
+	return s;
+}

commit 6ce3c4ff690136099bb17e1a8766b75764726ea7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:49:50 2013 +0100

    another simple change

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
-		x >>= 1;
+		x /= 2;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */

commit 4659538844daa2849b1a9e7d6fadb96fcd26fc83
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:43 2013 +0100

    change back to complete line

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
\ No newline at end of file
+}
+
+/* incomplete lines are bad! */

commit 100b61a6f2f720f812620a9d10afb3a960ccb73c
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:10 2013 +0100

    change to an incomplete line at end

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,22 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
+}
\ No newline at end of file

commit 4a23ae5c98d59a58c6da036156959f2dc9f472ad
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:47:40 2013 +0100

    change at very beginning

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,22 @@
+#include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:41 2013 +0100

    touch comment

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
- * A comment.
+ * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:16 2013 +0100

    touch both functions

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
-int f(int x)
+long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
-	printf("%d\n", f(15));
+	printf("%ld\n", f(15));
 	return 0;
 }

commit f04fb20f2c77850996cba739709acc6faecc58f7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:55 2013 +0100

    change f()

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,20 +1,21 @@
 #include <stdio.h>
 
 int f(int x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
+	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
 	printf("%d\n", f(15));
 	return 0;
 }

commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:48 2013 +0100

    initial

diff --git a/a.c b/a.c
--- /dev/null
+++ b/a.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+int f(int x)
+{
+	int s = 0;
+	while (x) {
+		x >>= 1;
+		s++;
+	}
+}
+
+/*
+ * A comment.
+ */
+
+int main ()
+{
+	printf("%d\n", f(15));
+	return 0;
+}
ok 33 - -L ,Y (Y == nlines + 1)

expecting success of 4211.34 '-L ,Y (Y == nlines + 2)': 
	n=$(expr $(wc -l <b.c) + 2) &&
	git log -L ,$n:b.c

commit 0d8dcfc6b968e06a27d5215bad1fdde3de9d6235
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:50:24 2013 +0100

    move within the file

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,26 @@
 #include <unistd.h>
 #include <stdio.h>
 
-long f(long x)
-{
-	int s = 0;
-	while (x) {
-		x /= 2;
-		s++;
-	}
-	return s;
-}
+long f(long x);
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */
+
+long f(long x)
+{
+	int s = 0;
+	while (x) {
+		x /= 2;
+		s++;
+	}
+	return s;
+}

commit 6ce3c4ff690136099bb17e1a8766b75764726ea7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:49:50 2013 +0100

    another simple change

diff --git a/b.c b/b.c
--- a/b.c
+++ b/b.c
@@ -1,24 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
-		x >>= 1;
+		x /= 2;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }
 
 /* incomplete lines are bad! */

commit 4659538844daa2849b1a9e7d6fadb96fcd26fc83
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:43 2013 +0100

    change back to complete line

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,24 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
\ No newline at end of file
+}
+
+/* incomplete lines are bad! */

commit 100b61a6f2f720f812620a9d10afb3a960ccb73c
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:48:10 2013 +0100

    change to an incomplete line at end

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,22 +1,22 @@
 #include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
-}
+}
\ No newline at end of file

commit 4a23ae5c98d59a58c6da036156959f2dc9f472ad
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:47:40 2013 +0100

    change at very beginning

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,22 @@
+#include <unistd.h>
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:41 2013 +0100

    touch comment

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
 long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
- * A comment.
+ * This is only an example!
  */
 
 int main ()
 {
 	printf("%ld\n", f(15));
 	return 0;
 }

commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:45:16 2013 +0100

    touch both functions

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,21 +1,21 @@
 #include <stdio.h>
 
-int f(int x)
+long f(long x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
 	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
-	printf("%d\n", f(15));
+	printf("%ld\n", f(15));
 	return 0;
 }

commit f04fb20f2c77850996cba739709acc6faecc58f7
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:55 2013 +0100

    change f()

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -1,20 +1,21 @@
 #include <stdio.h>
 
 int f(int x)
 {
 	int s = 0;
 	while (x) {
 		x >>= 1;
 		s++;
 	}
+	return s;
 }
 
 /*
  * A comment.
  */
 
 int main ()
 {
 	printf("%d\n", f(15));
 	return 0;
 }

commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:44:48 2013 +0100

    initial

diff --git a/a.c b/a.c
--- /dev/null
+++ b/a.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+int f(int x)
+{
+	int s = 0;
+	while (x) {
+		x >>= 1;
+		s++;
+	}
+}
+
+/*
+ * A comment.
+ */
+
+int main ()
+{
+	printf("%d\n", f(15));
+	return 0;
+}
ok 34 - -L ,Y (Y == nlines + 2)

expecting success of 4211.35 '-L with --first-parent and a merge': 
	git checkout parallel-change &&
	git log --first-parent -L 1,1:b.c

Switched to branch 'parallel-change'
commit 4a23ae5c98d59a58c6da036156959f2dc9f472ad
Author: Thomas Rast <trast@student.ethz.ch>
Date:   Thu Feb 28 10:47:40 2013 +0100

    change at very beginning

diff --git a/a.c b/a.c
--- a/a.c
+++ b/a.c
@@ -0,0 +1,1 @@
+#include <unistd.h>
ok 35 - -L with --first-parent and a merge

expecting success of 4211.36 '-L with --output': 
	git checkout parallel-change &&
	git log --output=log -L :main:b.c >output &&
	test_must_be_empty output &&
	test_line_count = 70 log

Already on 'parallel-change'
ok 36 - -L with --output

expecting success of 4211.37 'range_set_union': 
	test_seq 500 > c.c &&
	git add c.c &&
	git commit -m "many lines" &&
	test_seq 1000 > c.c &&
	git add c.c &&
	git commit -m "modify many lines" &&
	git log $(for x in $(test_seq 200); do echo -L $((2*x)),+1:c.c || return 1; done)

[parallel-change d6e4eb5] many lines
 Author: A U Thor <author@example.com>
 1 file changed, 500 insertions(+)
 create mode 100644 c.c
[parallel-change 23d0144] modify many lines
 Author: A U Thor <author@example.com>
 1 file changed, 500 insertions(+)
commit d6e4eb5bea25e60e2079aaeae319e9fff12659aa
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    many lines

diff --git a/c.c b/c.c
--- /dev/null
+++ b/c.c
@@ -0,0 +2,1 @@
+2
ok 37 - range_set_union

expecting success of 4211.38 '-s shows only line-log commits': 
	git log --format="commit %s" -L1,24:b.c >expect.raw &&
	grep ^commit expect.raw >expect &&
	git log --format="commit %s" -L1,24:b.c -s >actual &&
	test_cmp expect actual

ok 38 - -s shows only line-log commits

expecting success of 4211.39 '-p shows the default patch output': 
	git log -L1,24:b.c >expect &&
	git log -L1,24:b.c -p >actual &&
	test_cmp expect actual

ok 39 - -p shows the default patch output

expecting success of 4211.40 '--raw is forbidden': 
	test_must_fail git log -L1,24:b.c --raw

fatal: -L does not yet support diff formats besides -p and -s
ok 40 - --raw is forbidden

expecting success of 4211.41 'setup for checking fancy rename following': 
	git checkout --orphan moves-start &&
	git reset --hard &&

	printf "%s\n"    12 13 14 15      b c d e   >file-1 &&
	printf "%s\n"    22 23 24 25      B C D E   >file-2 &&
	git add file-1 file-2 &&
	test_tick &&
	git commit -m "Add file-1 and file-2" &&
	oid_add_f1_f2=$(git rev-parse --short HEAD) &&

	git checkout -b moves-main &&
	printf "%s\n" 11 12 13 14 15      b c d e   >file-1 &&
	git commit -a -m "Modify file-1 on main" &&
	oid_mod_f1_main=$(git rev-parse --short HEAD) &&

	printf "%s\n" 21 22 23 24 25      B C D E   >file-2 &&
	git commit -a -m "Modify file-2 on main #1" &&
	oid_mod_f2_main_1=$(git rev-parse --short HEAD) &&

	git mv file-1 renamed-1 &&
	git commit -m "Rename file-1 to renamed-1 on main" &&

	printf "%s\n" 11 12 13 14 15      b c d e f >renamed-1 &&
	git commit -a -m "Modify renamed-1 on main" &&
	oid_mod_r1_main=$(git rev-parse --short HEAD) &&

	printf "%s\n" 21 22 23 24 25      B C D E F >file-2 &&
	git commit -a -m "Modify file-2 on main #2" &&
	oid_mod_f2_main_2=$(git rev-parse --short HEAD) &&

	git checkout -b moves-side moves-start &&
	printf "%s\n"    12 13 14 15 16   b c d e   >file-1 &&
	git commit -a -m "Modify file-1 on side #1" &&
	oid_mod_f1_side_1=$(git rev-parse --short HEAD) &&

	printf "%s\n"    22 23 24 25 26   B C D E   >file-2 &&
	git commit -a -m "Modify file-2 on side" &&
	oid_mod_f2_side=$(git rev-parse --short HEAD) &&

	git mv file-2 renamed-2 &&
	git commit -m "Rename file-2 to renamed-2 on side" &&

	printf "%s\n"    12 13 14 15 16 a b c d e   >file-1 &&
	git commit -a -m "Modify file-1 on side #2" &&
	oid_mod_f1_side_2=$(git rev-parse --short HEAD) &&

	printf "%s\n"    22 23 24 25 26 A B C D E   >renamed-2 &&
	git commit -a -m "Modify renamed-2 on side" &&
	oid_mod_r2_side=$(git rev-parse --short HEAD) &&

	git checkout moves-main &&
	git merge moves-side &&
	oid_merge=$(git rev-parse --short HEAD)

Switched to a new branch 'moves-start'
[moves-start (root-commit) 306d665] Add file-1 and file-2
 Author: A U Thor <author@example.com>
 2 files changed, 16 insertions(+)
 create mode 100644 file-1
 create mode 100644 file-2
Switched to a new branch 'moves-main'
[moves-main d42d674] Modify file-1 on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-main 30ac750] Modify file-2 on main #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-main 0bb858c] Rename file-1 to renamed-1 on main
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file-1 => renamed-1 (100%)
[moves-main 85f9f03] Modify renamed-1 on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-main da62335] Modify file-2 on main #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'moves-side'
[moves-side aced016] Modify file-1 on side #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-side f423e86] Modify file-2 on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-side 87b3e53] Rename file-2 to renamed-2 on side
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file-2 => renamed-2 (100%)
[moves-side 6073daf] Modify file-1 on side #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[moves-side 43e9b43] Modify renamed-2 on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'moves-main'
Auto-merging renamed-1
Auto-merging renamed-2
Merge made by the 'ort' strategy.
 renamed-1           | 2 ++
 file-2 => renamed-2 | 2 ++
 2 files changed, 4 insertions(+)
 rename file-2 => renamed-2 (83%)
ok 41 - setup for checking fancy rename following

expecting success of 4211.42 'fancy rename following #1': 
	cat >expect <<-EOF &&
	$oid_merge Merge branch 'moves-side' into moves-main
	$oid_mod_f1_side_2 Modify file-1 on side #2
	$oid_mod_f1_side_1 Modify file-1 on side #1
	$oid_mod_r1_main Modify renamed-1 on main
	$oid_mod_f1_main Modify file-1 on main
	$oid_add_f1_f2 Add file-1 and file-2
	EOF
	git log -L1:renamed-1 --oneline --no-patch >actual &&
	test_cmp expect actual

ok 42 - fancy rename following #1

expecting success of 4211.43 'fancy rename following #2': 
	cat >expect <<-EOF &&
	$oid_merge Merge branch 'moves-side' into moves-main
	$oid_mod_r2_side Modify renamed-2 on side
	$oid_mod_f2_side Modify file-2 on side
	$oid_mod_f2_main_2 Modify file-2 on main #2
	$oid_mod_f2_main_1 Modify file-2 on main #1
	$oid_add_f1_f2 Add file-1 and file-2
	EOF
	git log -L1:renamed-2 --oneline --no-patch >actual &&
	test_cmp expect actual

ok 43 - fancy rename following #2

expecting success of 4211.44 'setup for checking line-log and parent oids': 
	git checkout --orphan parent-oids &&
	git reset --hard &&

	cat >file.c <<-\EOF &&
	int func1()
	{
	    return F1;
	}

	int func2()
	{
	    return F2;
	}
	EOF
	git add file.c &&
	test_tick &&
	first_tick=$test_tick &&
	git commit -m "Add func1() and func2() in file.c" &&

	echo 1 >other-file &&
	git add other-file &&
	test_tick &&
	git commit -m "Add other-file" &&

	sed -e "s/F1/F1 + 1/" file.c >tmp &&
	mv tmp file.c &&
	git commit -a -m "Modify func1() in file.c" &&

	echo 2 >other-file &&
	git commit -a -m "Modify other-file" &&

	sed -e "s/F2/F2 + 2/" file.c >tmp &&
	mv tmp file.c &&
	git commit -a -m "Modify func2() in file.c" &&

	head_oid=$(git rev-parse --short HEAD) &&
	prev_oid=$(git rev-parse --short HEAD^) &&
	root_oid=$(git rev-parse --short HEAD~4)

Switched to a new branch 'parent-oids'
[parent-oids (root-commit) df67db9] Add func1() and func2() in file.c
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 file.c
[parent-oids ee91250] Add other-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other-file
[parent-oids 431262f] Modify func1() in file.c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[parent-oids e3bd121] Modify other-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[parent-oids 0202e75] Modify func2() in file.c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 44 - setup for checking line-log and parent oids

expecting success of 4211.45 'parent oids without parent rewriting': 
	cat >expect <<-EOF &&
	$head_oid $prev_oid Modify func2() in file.c
	$root_oid  Add func1() and func2() in file.c
	EOF
	git log --format="%h %p %s" --no-patch -L:func2:file.c >actual &&
	test_cmp expect actual

ok 45 - parent oids without parent rewriting

expecting success of 4211.46 'parent oids with parent rewriting': 
	cat >expect <<-EOF &&
	$head_oid $root_oid Modify func2() in file.c
	$root_oid  Add func1() and func2() in file.c
	EOF
	git log --format="%h %p %s" --no-patch -L:func2:file.c --parents >actual &&
	test_cmp expect actual

ok 46 - parent oids with parent rewriting

expecting success of 4211.47 'line-log with --before': 
	echo $root_oid >expect &&
	git log --format=%h --no-patch -L:func2:file.c --before=$first_tick >actual &&
	test_cmp expect actual

ok 47 - line-log with --before

# passed all 47 test(s)
1..47
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4214-log-graph-octopus.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4214-log-graph-octopus/.git/
expecting success of 4214.1 'set up merge history': 
	test_commit initial &&
	for i in 1 2 3 4 ; do
		git checkout main -b $i || return $?
		# Make tag name different from branch name, to avoid
		# ambiguity error when calling checkout.
		test_commit $i $i $i tag$i || return $?
	done &&
	git checkout 1 -b merge &&
	test_merge octopus-merge 1 2 3 4 &&
	test_commit after-merge &&
	git checkout 1 -b L &&
	test_commit left &&
	git checkout 4 -b crossover &&
	test_commit after-4 &&
	git checkout initial -b more-L &&
	test_commit after-initial

[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch '1'
[1 0152a24] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1
Switched to a new branch '2'
[2 bca45ad] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2
Switched to a new branch '3'
[3 ec94035] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3
Switched to a new branch '4'
[4 132f27d] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4
Switched to a new branch 'merge'
Trying simple merge with 2
Trying simple merge with 3
Trying simple merge with 4
Merge made by the 'octopus' strategy.
 2 | 1 +
 3 | 1 +
 4 | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
[merge ce2ad1c] after-merge
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 after-merge.t
Switched to a new branch 'L'
[L d607189] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 left.t
Switched to a new branch 'crossover'
[crossover 7a146e9] after-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 after-4.t
Switched to a new branch 'more-L'
[more-L a2d7eba] after-initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 after-initial.t
ok 1 - set up merge history

expecting success of 4214.2 'log --graph with tricky octopus merge, no color': 
	test_cmp_graph left octopus-merge <<-\EOF
	* left
	| *-.   octopus-merge
	|/|\ \
	| | | * 4
	| | * | 3
	| | |/
	| * / 2
	| |/
	* / 1
	|/
	* initial
	EOF

ok 2 - log --graph with tricky octopus merge, no color

expecting success of 4214.3 'log --graph with tricky octopus merge with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* left
	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET>
	<RED>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 4
	<RED>|<RESET> <YELLOW>|<RESET> * <MAGENTA>|<RESET> 3
	<RED>|<RESET> <YELLOW>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
	<RED>|<RESET> * <MAGENTA>/<RESET> 2
	<RED>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
	* <MAGENTA>/<RESET> 1
	<MAGENTA>|<RESET><MAGENTA>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph left octopus-merge

ok 3 - log --graph with tricky octopus merge with colors

expecting success of 4214.4 'log --graph with normal octopus merge, no color': 
	test_cmp_graph octopus-merge <<-\EOF
	*---.   octopus-merge
	|\ \ \
	| | | * 4
	| | * | 3
	| | |/
	| * / 2
	| |/
	* / 1
	|/
	* initial
	EOF

ok 4 - log --graph with normal octopus merge, no color

expecting success of 4214.5 'log --graph with normal octopus merge with colors': 
	cat >expect.colors <<-\EOF &&
	*<YELLOW>-<RESET><YELLOW>-<RESET><BLUE>-<RESET><BLUE>.<RESET>   octopus-merge
	<RED>|<RESET><GREEN>\<RESET> <YELLOW>\<RESET> <BLUE>\<RESET>
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 4
	<RED>|<RESET> <GREEN>|<RESET> * <BLUE>|<RESET> 3
	<RED>|<RESET> <GREEN>|<RESET> <BLUE>|<RESET><BLUE>/<RESET>
	<RED>|<RESET> * <BLUE>/<RESET> 2
	<RED>|<RESET> <BLUE>|<RESET><BLUE>/<RESET>
	* <BLUE>/<RESET> 1
	<BLUE>|<RESET><BLUE>/<RESET>
	* initial
	EOF
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	test_cmp_colored_graph octopus-merge

ok 5 - log --graph with normal octopus merge with colors

expecting success of 4214.6 'log --graph with normal octopus merge and child, no color': 
	test_cmp_graph after-merge <<-\EOF
	* after-merge
	*---.   octopus-merge
	|\ \ \
	| | | * 4
	| | * | 3
	| | |/
	| * / 2
	| |/
	* / 1
	|/
	* initial
	EOF

ok 6 - log --graph with normal octopus merge and child, no color

expecting success of 4214.7 'log --graph with normal octopus and child merge with colors': 
	cat >expect.colors <<-\EOF &&
	* after-merge
	*<BLUE>-<RESET><BLUE>-<RESET><MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
	<GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <MAGENTA>\<RESET>
	<GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 4
	<GREEN>|<RESET> <YELLOW>|<RESET> * <MAGENTA>|<RESET> 3
	<GREEN>|<RESET> <YELLOW>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
	<GREEN>|<RESET> * <MAGENTA>/<RESET> 2
	<GREEN>|<RESET> <MAGENTA>|<RESET><MAGENTA>/<RESET>
	* <MAGENTA>/<RESET> 1
	<MAGENTA>|<RESET><MAGENTA>/<RESET>
	* initial
	EOF
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	test_cmp_colored_graph after-merge

ok 7 - log --graph with normal octopus and child merge with colors

expecting success of 4214.8 'log --graph with tricky octopus merge and its child, no color': 
	test_cmp_graph left after-merge <<-\EOF
	* left
	| * after-merge
	| *-.   octopus-merge
	|/|\ \
	| | | * 4
	| | * | 3
	| | |/
	| * / 2
	| |/
	* / 1
	|/
	* initial
	EOF

ok 8 - log --graph with tricky octopus merge and its child, no color

expecting success of 4214.9 'log --graph with tricky octopus merge and its child with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* left
	<RED>|<RESET> * after-merge
	<RED>|<RESET> *<CYAN>-<RESET><CYAN>.<RESET>   octopus-merge
	<RED>|<RESET><RED>/<RESET><BLUE>|<RESET><MAGENTA>\<RESET> <CYAN>\<RESET>
	<RED>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> * 4
	<RED>|<RESET> <BLUE>|<RESET> * <CYAN>|<RESET> 3
	<RED>|<RESET> <BLUE>|<RESET> <CYAN>|<RESET><CYAN>/<RESET>
	<RED>|<RESET> * <CYAN>/<RESET> 2
	<RED>|<RESET> <CYAN>|<RESET><CYAN>/<RESET>
	* <CYAN>/<RESET> 1
	<CYAN>|<RESET><CYAN>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph left after-merge

ok 9 - log --graph with tricky octopus merge and its child with colors

expecting success of 4214.10 'log --graph with crossover in octopus merge, no color': 
	test_cmp_graph after-4 octopus-merge <<-\EOF
	* after-4
	| *---.   octopus-merge
	| |\ \ \
	| |_|_|/
	|/| | |
	* | | | 4
	| | | * 3
	| |_|/
	|/| |
	| | * 2
	| |/
	|/|
	| * 1
	|/
	* initial
	EOF

ok 10 - log --graph with crossover in octopus merge, no color

expecting success of 4214.11 'log --graph with crossover in octopus merge with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* after-4
	<RED>|<RESET> *<BLUE>-<RESET><BLUE>-<RESET><RED>-<RESET><RED>.<RESET>   octopus-merge
	<RED>|<RESET> <GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <RED>\<RESET>
	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET>
	* <GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> 4
	<MAGENTA>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 3
	<MAGENTA>|<RESET> <GREEN>|<RESET><MAGENTA>_<RESET><YELLOW>|<RESET><MAGENTA>/<RESET>
	<MAGENTA>|<RESET><MAGENTA>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET>
	<MAGENTA>|<RESET> <GREEN>|<RESET> * 2
	<MAGENTA>|<RESET> <GREEN>|<RESET><MAGENTA>/<RESET>
	<MAGENTA>|<RESET><MAGENTA>/<RESET><GREEN>|<RESET>
	<MAGENTA>|<RESET> * 1
	<MAGENTA>|<RESET><MAGENTA>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph after-4 octopus-merge

ok 11 - log --graph with crossover in octopus merge with colors

expecting success of 4214.12 'log --graph with crossover in octopus merge and its child, no color': 
	test_cmp_graph after-4 after-merge <<-\EOF
	* after-4
	| * after-merge
	| *---.   octopus-merge
	| |\ \ \
	| |_|_|/
	|/| | |
	* | | | 4
	| | | * 3
	| |_|/
	|/| |
	| | * 2
	| |/
	|/|
	| * 1
	|/
	* initial
	EOF

ok 12 - log --graph with crossover in octopus merge and its child, no color

expecting success of 4214.13 'log --graph with crossover in octopus merge and its child with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* after-4
	<RED>|<RESET> * after-merge
	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>-<RESET><RED>-<RESET><RED>.<RESET>   octopus-merge
	<RED>|<RESET> <YELLOW>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET> <RED>\<RESET>
	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>_<RESET><MAGENTA>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET>
	* <YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> 4
	<CYAN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 3
	<CYAN>|<RESET> <YELLOW>|<RESET><CYAN>_<RESET><BLUE>|<RESET><CYAN>/<RESET>
	<CYAN>|<RESET><CYAN>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET>
	<CYAN>|<RESET> <YELLOW>|<RESET> * 2
	<CYAN>|<RESET> <YELLOW>|<RESET><CYAN>/<RESET>
	<CYAN>|<RESET><CYAN>/<RESET><YELLOW>|<RESET>
	<CYAN>|<RESET> * 1
	<CYAN>|<RESET><CYAN>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph after-4 after-merge

ok 13 - log --graph with crossover in octopus merge and its child with colors

expecting success of 4214.14 'log --graph with unrelated commit and octopus tip, no color': 
	test_cmp_graph after-initial octopus-merge <<-\EOF
	* after-initial
	| *---.   octopus-merge
	| |\ \ \
	| | | | * 4
	| |_|_|/
	|/| | |
	| | | * 3
	| |_|/
	|/| |
	| | * 2
	| |/
	|/|
	| * 1
	|/
	* initial
	EOF

ok 14 - log --graph with unrelated commit and octopus tip, no color

expecting success of 4214.15 'log --graph with unrelated commit and octopus tip with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* after-initial
	<RED>|<RESET> *<BLUE>-<RESET><BLUE>-<RESET><MAGENTA>-<RESET><MAGENTA>.<RESET>   octopus-merge
	<RED>|<RESET> <GREEN>|<RESET><YELLOW>\<RESET> <BLUE>\<RESET> <MAGENTA>\<RESET>
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 4
	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET>
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 3
	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET>
	<RED>|<RESET> <GREEN>|<RESET> * 2
	<RED>|<RESET> <GREEN>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET>
	<RED>|<RESET> * 1
	<RED>|<RESET><RED>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph after-initial octopus-merge

ok 15 - log --graph with unrelated commit and octopus tip with colors

expecting success of 4214.16 'log --graph with unrelated commit and octopus child, no color': 
	test_cmp_graph after-initial after-merge <<-\EOF
	* after-initial
	| * after-merge
	| *---.   octopus-merge
	| |\ \ \
	| | | | * 4
	| |_|_|/
	|/| | |
	| | | * 3
	| |_|/
	|/| |
	| | * 2
	| |/
	|/|
	| * 1
	|/
	* initial
	EOF

ok 16 - log --graph with unrelated commit and octopus child, no color

expecting success of 4214.17 'log --graph with unrelated commit and octopus child with colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	* after-initial
	<RED>|<RESET> * after-merge
	<RED>|<RESET> *<MAGENTA>-<RESET><MAGENTA>-<RESET><CYAN>-<RESET><CYAN>.<RESET>   octopus-merge
	<RED>|<RESET> <YELLOW>|<RESET><BLUE>\<RESET> <MAGENTA>\<RESET> <CYAN>\<RESET>
	<RED>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET> * 4
	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>_<RESET><MAGENTA>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET> <MAGENTA>|<RESET>
	<RED>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 3
	<RED>|<RESET> <YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET>
	<RED>|<RESET> <YELLOW>|<RESET> * 2
	<RED>|<RESET> <YELLOW>|<RESET><RED>/<RESET>
	<RED>|<RESET><RED>/<RESET><YELLOW>|<RESET>
	<RED>|<RESET> * 1
	<RED>|<RESET><RED>/<RESET>
	* initial
	EOF
	test_cmp_colored_graph after-initial after-merge

ok 17 - log --graph with unrelated commit and octopus child with colors

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4213-log-tabexpand.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4213-log-tabexpand/.git/
expecting success of 4213.1 'setup': 
	test_tick &&
	sed -e "s/Q/$HT/g" <<-EOF >msg &&
	Q$title

	Q$body
	EOF
	git commit --allow-empty -F msg

[master (root-commit) 4243c44] 	tab indent at the beginning of the title line
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 4213.2 'expand/no-expand': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 2 - expand/no-expand

expecting success of 4213.3 'expand/no-expand for --pretty': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 3 - expand/no-expand for --pretty

expecting success of 4213.4 'expand/no-expand for --pretty=short': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 4 - expand/no-expand for --pretty=short

expecting success of 4213.5 'expand/no-expand for --pretty=medium': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 5 - expand/no-expand for --pretty=medium

expecting success of 4213.6 'expand/no-expand for --pretty=full': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 6 - expand/no-expand for --pretty=full

expecting success of 4213.7 'expand/no-expand for --pretty=fuller': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 7 - expand/no-expand for --pretty=fuller

expecting success of 4213.8 'expand/no-expand for --pretty=raw': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 8 - expand/no-expand for --pretty=raw

expecting success of 4213.9 'expand/no-expand for --pretty=email': 
		count_expand $in $default $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs &&
		count_expand $in 8 0 --expand-tabs $fmt &&
		count_expand $in 8 0 $fmt --expand-tabs=8 &&
		count_expand $in 8 0 --expand-tabs=8 $fmt &&
		count_expand $in 0 1 $fmt --no-expand-tabs &&
		count_expand $in 0 1 --no-expand-tabs $fmt &&
		count_expand $in 0 1 $fmt --expand-tabs=0 &&
		count_expand $in 0 1 --expand-tabs=0 $fmt &&
		count_expand $in 4 0 $fmt --expand-tabs=4 &&
		count_expand $in 4 0 --expand-tabs=4 $fmt
	
ok 9 - expand/no-expand for --pretty=email

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4217-log-limit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4217-log-limit/.git/
expecting success of 4217.1 'setup test': 
	git init &&
	echo a >file &&
	git add file &&
	GIT_COMMITTER_DATE="2021-02-01 00:00" git commit -m init &&
	echo a >>file &&
	git add file &&
	GIT_COMMITTER_DATE="2022-02-01 00:00" git commit -m first &&
	echo a >>file &&
	git add file &&
	GIT_COMMITTER_DATE="2021-03-01 00:00" git commit -m second &&
	echo a >>file &&
	git add file &&
	GIT_COMMITTER_DATE="2022-03-01 00:00" git commit -m third

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4217-log-limit/.git/
[master (root-commit) 0f41f9c] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master b839c03] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 5dd5cf2] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master fd219fd] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup test

expecting success of 4217.2 'git log --since-as-filter=...': 
	git log --since-as-filter="2022-01-01" --format=%s >actual &&
	cat >expect <<-\EOF &&
	third
	first
	EOF
	test_cmp expect actual

ok 2 - git log --since-as-filter=...

expecting success of 4217.3 'git log --children --since-as-filter=...': 
	git log --children --since-as-filter="2022-01-01" --format=%s >actual &&
	cat >expect <<-\EOF &&
	third
	first
	EOF
	test_cmp expect actual

ok 3 - git log --children --since-as-filter=...

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4252-am-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4252-am-options/.git/
expecting success of 4252.1 'setup': 
	cp "$tm/file-1-0" file-1 &&
	cp "$tm/file-2-0" file-2 &&
	git add file-1 file-2 &&
	test_tick &&
	git commit -m initial &&
	git tag initial

[master (root-commit) f06d5e1] initial
 Author: A U Thor <author@example.com>
 2 files changed, 14 insertions(+)
 create mode 100644 file-1
 create mode 100644 file-2
ok 1 - setup

expecting success of 4252.2 'interrupted am --whitespace=fix': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am --whitespace=fix "$tm"/am-test-1-? &&
	git am --skip &&
	grep 3 file-1 &&
	grep "^Six$" file-2

HEAD is now at f06d5e1 initial
.git/rebase-apply/patch:9: trailing whitespace.
Three 
error: patch failed: file-1:1
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Three
Patch failed at 0001 Three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
.git/rebase-apply/patch:13: trailing whitespace.
Six 
warning: 1 line applied after fixing whitespace errors.
Applying: Six
3
Six
ok 2 - interrupted am --whitespace=fix

expecting success of 4252.3 'interrupted am -C1': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am -C1 "$tm"/am-test-2-? &&
	git am --skip &&
	grep 3 file-1 &&
	grep "^Three$" file-2

HEAD is now at f06d5e1 initial
.git/rebase-apply/patch:9: trailing whitespace.
Three 
error: patch failed: file-1:1
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Three
Patch failed at 0001 Three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Context reduced to (1/1) to apply fragment at 2
Applying: Six
3
Three
ok 3 - interrupted am -C1

expecting success of 4252.4 'interrupted am -p2': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am -p2 "$tm"/am-test-3-? &&
	git am --skip &&
	grep 3 file-1 &&
	grep "^Three$" file-2

HEAD is now at f06d5e1 initial
.git/rebase-apply/patch:9: trailing whitespace.
Three 
error: patch failed: file-1:1
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Three
Patch failed at 0001 Three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: Six
3
Three
ok 4 - interrupted am -p2

expecting success of 4252.5 'interrupted am -C1 -p2': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am -p2 -C1 "$tm"/am-test-4-? &&
	git am --skip &&
	grep 3 file-1 &&
	grep "^Three$" file-2

HEAD is now at f06d5e1 initial
.git/rebase-apply/patch:9: trailing whitespace.
Three 
error: patch failed: file-1:1
error: file-1: patch does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Three
Patch failed at 0001 Three
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Context reduced to (1/1) to apply fragment at 2
Applying: Six
3
Three
ok 5 - interrupted am -C1 -p2

expecting success of 4252.6 'interrupted am --directory="frotz nitfol"': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am --directory="frotz nitfol" "$tm"/am-test-5-? &&
	git am --skip &&
	grep One "frotz nitfol/file-5"

HEAD is now at f06d5e1 initial
error: frotz nitfol/junk/file-2: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Six
Patch failed at 0001 Six
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: Six
One
ok 6 - interrupted am --directory="frotz nitfol"

expecting success of 4252.7 'apply to a funny path': 
	with_sq="with'sq" &&
	rm -fr .git/rebase-apply &&
	git reset --hard initial &&
	git am --directory="$with_sq" "$tm"/am-test-5-2 &&
	test -f "$with_sq/file-5"

HEAD is now at f06d5e1 initial
Applying: Six
ok 7 - apply to a funny path

expecting success of 4252.8 'am --reject': 
	rm -rf .git/rebase-apply &&
	git reset --hard initial &&
	test_must_fail git am --reject "$tm"/am-test-6-1 &&
	grep "@@ -1,3 +1,3 @@" file-2.rej &&
	test_must_fail git diff-files --exit-code --quiet file-2 &&
	grep "[-]-reject" .git/rebase-apply/apply-opt

HEAD is now at f06d5e1 initial
Checking patch file-2...
error: while searching for:
0
2
3

error: patch failed: file-2:1
Applying patch file-2 with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Huh
Patch failed at 0001 Huh
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
@@ -1,3 +1,3 @@
 '--reject'
ok 8 - am --reject

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4253-am-keep-cr-dos.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4253-am-keep-cr-dos/.git/
expecting success of 4253.1 'setup repository with dos files': 
	append_cr <file1 >file &&
	git add file &&
	git commit -m Initial &&
	git tag initial &&
	append_cr <file2 >file &&
	git commit -a -m Second &&
	append_cr <file3 >file &&
	git commit -a -m Third

[main (root-commit) 89cbfc3] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main e549bd7] Second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main b664e0a] Third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup repository with dos files

expecting success of 4253.2 'am with dos files without --keep-cr': 
	git checkout -b dosfiles initial &&
	git format-patch -k initial..main &&
	test_must_fail git am -k -3 000*.patch &&
	git am --abort &&
	rm -rf .git/rebase-apply 000*.patch

Switched to a new branch 'dosfiles'
0001-Second.patch
0002-Third.patch
Applying: Second
error: patch failed: file:1
error: file: patch does not apply
error: Did you hand edit your patch?
It does not apply to blobs recorded in its index.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Using index info to reconstruct a base tree...
Patch failed at 0001 Second
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 2 - am with dos files without --keep-cr

expecting success of 4253.3 'am with dos files with --keep-cr': 
	git checkout -b dosfiles-keep-cr initial &&
	git format-patch -k --stdout initial..main >output &&
	git am --keep-cr -k -3 output &&
	git diff --exit-code main

Switched to a new branch 'dosfiles-keep-cr'
warning: quoted CRLF detected
warning: quoted CRLF detected
Applying: Second
Applying: Third
ok 3 - am with dos files with --keep-cr

expecting success of 4253.4 'am with dos files config am.keepcr': 
	git config am.keepcr 1 &&
	git checkout -b dosfiles-conf-keepcr initial &&
	git format-patch -k --stdout initial..main >output &&
	git am -k -3 output &&
	git diff --exit-code main

Switched to a new branch 'dosfiles-conf-keepcr'
warning: quoted CRLF detected
warning: quoted CRLF detected
Applying: Second
Applying: Third
ok 4 - am with dos files config am.keepcr

expecting success of 4253.5 'am with dos files config am.keepcr overridden by --no-keep-cr': 
	git config am.keepcr 1 &&
	git checkout -b dosfiles-conf-keepcr-override initial &&
	git format-patch -k initial..main &&
	test_must_fail git am -k -3 --no-keep-cr 000*.patch &&
	git am --abort &&
	rm -rf .git/rebase-apply 000*.patch

Switched to a new branch 'dosfiles-conf-keepcr-override'
0001-Second.patch
0002-Third.patch
Applying: Second
error: patch failed: file:1
error: file: patch does not apply
error: Did you hand edit your patch?
It does not apply to blobs recorded in its index.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Using index info to reconstruct a base tree...
Patch failed at 0001 Second
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 5 - am with dos files config am.keepcr overridden by --no-keep-cr

expecting success of 4253.6 'am with dos files with --keep-cr continue': 
	git checkout -b dosfiles-keep-cr-continue initial &&
	git format-patch -k initial..main &&
	append_cr <file1a >file &&
	git commit -m "different patch" file &&
	test_must_fail git am --keep-cr -k -3 000*.patch &&
	append_cr <file2 >file &&
	git add file &&
	git am -3 --resolved &&
	git diff --exit-code main

Switched to a new branch 'dosfiles-keep-cr-continue'
0001-Second.patch
0002-Third.patch
[dosfiles-keep-cr-continue 236fcc7] different patch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
warning: quoted CRLF detected
Applying: Second
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
236fcc7 different patch
virtual Second
found 1 common ancestor:
virtual 0626bbef2b13f86fc002fb580ec5fac3fd75fa44
Auto-merging file
CONFLICT (content): Merge conflict in file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Second
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
warning: quoted CRLF detected
Applying: Second
Applying: Third
ok 6 - am with dos files with --keep-cr continue

expecting success of 4253.7 'am with unix files config am.keepcr overridden by --no-keep-cr': 
	git config am.keepcr 1 &&
	git checkout -b unixfiles-conf-keepcr-override initial &&
	cp -f file1 file &&
	git commit -m "line ending to unix" file &&
	git format-patch -k initial..main &&
	git am -k -3 --no-keep-cr 000*.patch &&
	git diff --exit-code -w main

Switched to a new branch 'unixfiles-conf-keepcr-override'
[unixfiles-conf-keepcr-override cec7866] line ending to unix
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
0001-Second.patch
0002-Third.patch
Applying: Second
Applying: Third
ok 7 - am with unix files config am.keepcr overridden by --no-keep-cr

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4254-am-corrupt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4254-am-corrupt/.git/
expecting success of 4254.1 'setup': 
	# Note the missing "+++" line:
	cat >bad-patch.diff <<-\EOF &&
	From: A U Thor <au.thor@example.com>
	diff --git a/f b/f
	index 7898192..6178079 100644
	--- a/f
	@@ -1 +1 @@
	-a
	+b
	EOF

	echo a >f &&
	git add f &&
	test_tick &&
	git commit -m initial

[master (root-commit) 07398d1] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f
ok 1 - setup

expecting success of 4254.2 'try to apply corrupted patch': 
	test_when_finished "git am --abort" &&
	test_must_fail git -c advice.amWorkDir=false am bad-patch.diff 2>actual &&
	echo "error: git diff header lacks filename information (line 4)" >expected &&
	test_path_is_file f &&
	test_cmp expected actual

Applying: 
Patch failed at 0001 
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 2 - try to apply corrupted patch

expecting success of 4254.3 'NUL in commit message's body': 
	test_when_finished "git am --abort" &&
	make_mbox_with_nul body >body.patch &&
	test_must_fail git am body.patch 2>err &&
	grep "a NUL byte in commit log message not allowed" err

Applying: ÄËÑÏÖ
error: a NUL byte in commit log message not allowed.
ok 3 - NUL in commit message's body

expecting success of 4254.4 'NUL in commit message's header': 
	test_when_finished 'git am --abort' &&
	make_mbox_with_nul subject >subject.patch &&
	test_must_fail git mailinfo msg patch <subject.patch 2>err &&
	grep "a NUL byte in 'Subject' is not allowed" err &&
	test_must_fail git am subject.patch 2>err &&
	grep "a NUL byte in 'Subject' is not allowed" err

Author: A U Thor
Email: author@example.com
Subject: ÄË
Date: Sun, 19 Apr 2020 13:42:07 +0700

error: a NUL byte in 'Subject' is not allowed.
error: a NUL byte in 'Subject' is not allowed.
ok 4 - NUL in commit message's header

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4256-am-format-flowed.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4256-am-format-flowed/.git/
expecting success of 4256.1 'setup': 
	cp "$TEST_DIRECTORY/t4256/1/mailinfo.c.orig" mailinfo.c &&
	git add mailinfo.c &&
	git commit -m initial

[master (root-commit) f699253] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1185 insertions(+)
 create mode 100644 mailinfo.c
ok 1 - setup

expecting success of 4256.2 'am with format=flowed': 
	git am <"$TEST_DIRECTORY/t4256/1/patch" 2>stderr &&
	test_i18ngrep "warning: Patch sent with format=flowed" stderr &&
	test_cmp "$TEST_DIRECTORY/t4256/1/mailinfo.c" mailinfo.c

Applying: mailinfo: support format=flowed
warning: Patch sent with format=flowed; space at the end of lines might be lost.
ok 2 - am with format=flowed

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4257-am-interactive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4257-am-interactive/.git/
expecting success of 4257.1 'set up patches to apply': 
	test_commit unrelated &&
	test_commit no-conflict &&
	test_commit conflict-patch file patch &&
	git format-patch --stdout -2 >mbox &&

	git reset --hard unrelated &&
	test_commit conflict-main file main base

[master (root-commit) 16dd07d] unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated.t
[master 7c8fce7] no-conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 no-conflict.t
[master fe3fedc] conflict-patch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
HEAD is now at 16dd07d unrelated
[master 73a3f21] conflict-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - set up patches to apply

expecting success of 4257.2 'applying all patches generates conflict': 
	test_must_fail git am mbox &&
	echo resolved >file &&
	git add -u &&
	git am --resolved

error: file: already exists in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: no-conflict
Applying: conflict-patch
Patch failed at 0002 conflict-patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: conflict-patch
ok 2 - applying all patches generates conflict

expecting success of 4257.3 'interactive am can apply a single patch': 
	git reset --hard base &&
	# apply the first, but not the second
	test_write_lines y n | git am -i mbox &&

	echo no-conflict >expect &&
	git log -1 --format=%s >actual &&
	test_cmp expect actual

HEAD is now at 73a3f21 conflict-main
Commit Body is:
--------------------------
no-conflict
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: Applying: no-conflict
Commit Body is:
--------------------------
conflict-patch
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: ok 3 - interactive am can apply a single patch

expecting success of 4257.4 'interactive am can resolve conflict': 
	git reset --hard base &&
	# apply both; the second one will conflict
	test_write_lines y y | test_must_fail git am -i mbox &&
	echo resolved >file &&
	git add -u &&
	# interactive "--resolved" will ask us if we want to apply the result
	echo y | git am -i --resolved &&

	echo conflict-patch >expect &&
	git log -1 --format=%s >actual &&
	test_cmp expect actual &&

	echo resolved >expect &&
	git cat-file blob HEAD:file >actual &&
	test_cmp expect actual

HEAD is now at 73a3f21 conflict-main
error: file: already exists in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Commit Body is:
--------------------------
no-conflict
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: Applying: no-conflict
Commit Body is:
--------------------------
conflict-patch
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: Applying: conflict-patch
Patch failed at 0002 conflict-patch
When you have resolved this problem, run "git am -i --continue".
If you prefer to skip this patch, run "git am -i --skip" instead.
To restore the original branch and stop patching, run "git am -i --abort".
Applying: conflict-patch
Commit Body is:
--------------------------
conflict-patch
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: ok 4 - interactive am can resolve conflict

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4258-am-quoted-cr.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4258-am-quoted-cr/.git/
expecting success of 4258.1 'setup': 
	test_write_lines one two three >text &&
	test_commit one text &&
	test_write_lines one owt three >text &&
	test_commit two text

[master (root-commit) 6f47e65] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 text
[master 8ff8b1d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 4258.2 'am warn if quoted-cr is found': 
	git reset --hard one &&
	test_must_fail git am "$DATA/mbox" 2>err &&
	grep "quoted CRLF detected" err

HEAD is now at 6f47e65 one
Applying: sample
Patch failed at 0001 sample
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
warning: quoted CRLF detected
ok 2 - am warn if quoted-cr is found

expecting success of 4258.3 'am --quoted-cr=strip': 
	test_might_fail git am --abort &&
	git reset --hard one &&
	git am --quoted-cr=strip "$DATA/mbox" &&
	git diff --exit-code HEAD two

HEAD is now at 6f47e65 one
Applying: sample
ok 3 - am --quoted-cr=strip

expecting success of 4258.4 'am with config mailinfo.quotedCr=strip': 
	test_might_fail git am --abort &&
	git reset --hard one &&
	test_config mailinfo.quotedCr strip &&
	git am "$DATA/mbox" &&
	git diff --exit-code HEAD two

fatal: Resolve operation not in progress, we are not resuming.
HEAD is now at 6f47e65 one
Applying: sample
ok 4 - am with config mailinfo.quotedCr=strip

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4215-log-skewed-merges.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4215-log-skewed-merges/.git/
expecting success of 4215.1 'log --graph with merge fusing with its left and right neighbors': 
	git checkout --orphan _p &&
	test_commit A &&
	test_commit B &&
	git checkout -b _q @^ && test_commit C &&
	git checkout -b _r @^ && test_commit D &&
	git checkout _p && git merge --no-ff _q _r -m E &&
	git checkout _r && test_commit F &&
	git checkout _p && git merge --no-ff _r -m G &&
	git checkout @^^ && git merge --no-ff _p -m H &&

	check_graph <<-\EOF
	*   H
	|\
	| *   G
	| |\
	| | * F
	| * | E
	|/|\|
	| | * D
	| * | C
	| |/
	* / B
	|/
	* A
	EOF

Switched to a new branch '_p'
[_p (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[_p d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch '_q'
[_q 5dee784] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch '_r'
[_r c5a55c6] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Switched to branch '_p'
Trying simple merge with _q
Trying simple merge with _r
Merge made by the 'octopus' strategy.
 C.t | 1 +
 D.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 C.t
 create mode 100644 D.t
Switched to branch '_r'
[_r 1265bd9] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
Switched to branch '_p'
Merge made by the 'ort' strategy.
 F.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
Note: switching to '@^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d9df450 B
Merge made by the 'ort' strategy.
 C.t | 1 +
 D.t | 1 +
 F.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
ok 1 - log --graph with merge fusing with its left and right neighbors

expecting success of 4215.2 'log --graph with left-skewed merge': 
	git checkout --orphan 0_p && test_commit 0_A &&
	git checkout -b 0_q 0_p && test_commit 0_B &&
	git checkout -b 0_r 0_p &&
	test_commit 0_C &&
	test_commit 0_D &&
	git checkout -b 0_s 0_p && test_commit 0_E &&
	git checkout -b 0_t 0_p && git merge --no-ff 0_r^ 0_s -m 0_F &&
	git checkout 0_p && git merge --no-ff 0_s -m 0_G &&
	git checkout @^ && git merge --no-ff 0_q 0_r 0_t 0_p -m 0_H &&

	check_graph <<-\EOF
	*-----.   0_H
	|\ \ \ \
	| | | | * 0_G
	| |_|_|/|
	|/| | | |
	| | | * | 0_F
	| |_|/|\|
	|/| | | |
	| | | | * 0_E
	| |_|_|/
	|/| | |
	| | * | 0_D
	| | |/
	| | * 0_C
	| |/
	|/|
	| * 0_B
	|/
	* 0_A
	EOF

Switched to a new branch '0_p'
[0_p (root-commit) 7fa02de] 0_A
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
Switched to a new branch '0_q'
[0_q 0b72759] 0_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 0_B.t
Switched to a new branch '0_r'
[0_r 4e9c0f2] 0_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 0_C.t
[0_r c54658b] 0_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 0_D.t
Switched to a new branch '0_s'
[0_s 90b5343] 0_E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 0_E.t
Switched to a new branch '0_t'
Fast-forwarding to: 0_r^
Trying simple merge with 0_s
Merge made by the 'octopus' strategy.
 0_C.t | 1 +
 0_E.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 0_C.t
 create mode 100644 0_E.t
Switched to branch '0_p'
Merge made by the 'ort' strategy.
 0_E.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 0_E.t
Note: switching to '@^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7fa02de 0_A
Fast-forwarding to: 0_q
Trying simple merge with 0_r
Trying simple merge with 0_t
Trying simple merge with 0_p
Merge made by the 'octopus' strategy.
 0_B.t | 1 +
 0_C.t | 1 +
 0_D.t | 1 +
 0_E.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
ok 2 - log --graph with left-skewed merge

expecting success of 4215.3 'log --graph with nested left-skewed merge': 
	git checkout --orphan 1_p &&
	test_commit 1_A &&
	test_commit 1_B &&
	test_commit 1_C &&
	git checkout -b 1_q @^ && test_commit 1_D &&
	git checkout 1_p && git merge --no-ff 1_q -m 1_E &&
	git checkout -b 1_r @~3 && test_commit 1_F &&
	git checkout 1_p && git merge --no-ff 1_r -m 1_G &&
	git checkout @^^ && git merge --no-ff 1_p -m 1_H &&

	check_graph <<-\EOF
	*   1_H
	|\
	| *   1_G
	| |\
	| | * 1_F
	| * | 1_E
	|/| |
	| * | 1_D
	* | | 1_C
	|/ /
	* / 1_B
	|/
	* 1_A
	EOF

Switched to a new branch '1_p'
[1_p (root-commit) 5aedbd6] 1_A
 Author: A U Thor <author@example.com>
 11 files changed, 11 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[1_p 98d1894] 1_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1_B.t
[1_p 0954341] 1_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1_C.t
Switched to a new branch '1_q'
[1_q acc5dd3] 1_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1_D.t
Switched to branch '1_p'
Merge made by the 'ort' strategy.
 1_D.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1_D.t
Switched to a new branch '1_r'
[1_r 1f05930] 1_F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1_F.t
Switched to branch '1_p'
Merge made by the 'ort' strategy.
 1_F.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1_F.t
Note: switching to '@^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0954341 1_C
Merge made by the 'ort' strategy.
 1_D.t | 1 +
 1_F.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 1_D.t
 create mode 100644 1_F.t
ok 3 - log --graph with nested left-skewed merge

expecting success of 4215.4 'log --graph with nested left-skewed merge following normal merge': 
	git checkout --orphan 2_p &&
	test_commit 2_A &&
	test_commit 2_B &&
	test_commit 2_C &&
	git checkout -b 2_q @^^ &&
	test_commit 2_D &&
	test_commit 2_E &&
	git checkout -b 2_r @^ && test_commit 2_F &&
	git checkout 2_q &&
	git merge --no-ff 2_r -m 2_G &&
	git merge --no-ff 2_p^ -m 2_H &&
	git checkout -b 2_s @^^ && git merge --no-ff 2_q -m 2_J &&
	git checkout 2_p && git merge --no-ff 2_s -m 2_K &&

	check_graph <<-\EOF
	*   2_K
	|\
	| *   2_J
	| |\
	| | *   2_H
	| | |\
	| | * | 2_G
	| |/| |
	| | * | 2_F
	| * | | 2_E
	| |/ /
	| * | 2_D
	* | | 2_C
	| |/
	|/|
	* | 2_B
	|/
	* 2_A
	EOF

Switched to a new branch '2_p'
[2_p (root-commit) 25ac48f] 2_A
 Author: A U Thor <author@example.com>
 16 files changed, 16 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[2_p 350de8f] 2_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2_B.t
[2_p 83590dd] 2_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2_C.t
Switched to a new branch '2_q'
[2_q 0e12748] 2_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2_D.t
[2_q 154544f] 2_E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2_E.t
Switched to a new branch '2_r'
[2_r e6f7421] 2_F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2_F.t
Switched to branch '2_q'
Merge made by the 'ort' strategy.
 2_F.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 2_F.t
Merge made by the 'ort' strategy.
 2_B.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 2_B.t
Switched to a new branch '2_s'
Merge made by the 'ort' strategy.
 2_B.t | 1 +
 2_F.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 2_B.t
 create mode 100644 2_F.t
Switched to branch '2_p'
Merge made by the 'ort' strategy.
 2_D.t | 1 +
 2_E.t | 1 +
 2_F.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
ok 4 - log --graph with nested left-skewed merge following normal merge

expecting success of 4215.5 'log --graph with nested right-skewed merge following left-skewed merge': 
	git checkout --orphan 3_p &&
	test_commit 3_A &&
	git checkout -b 3_q &&
	test_commit 3_B &&
	test_commit 3_C &&
	git checkout -b 3_r @^ &&
	test_commit 3_D &&
	git checkout 3_q && git merge --no-ff 3_r -m 3_E &&
	git checkout 3_p && git merge --no-ff 3_q -m 3_F &&
	git checkout 3_r && test_commit 3_G &&
	git checkout 3_p && git merge --no-ff 3_r -m 3_H &&
	git checkout @^^ && git merge --no-ff 3_p -m 3_J &&

	check_graph <<-\EOF
	*   3_J
	|\
	| *   3_H
	| |\
	| | * 3_G
	| * | 3_F
	|/| |
	| * | 3_E
	| |\|
	| | * 3_D
	| * | 3_C
	| |/
	| * 3_B
	|/
	* 3_A
	EOF

Switched to a new branch '3_p'
[3_p (root-commit) 999faae] 3_A
 Author: A U Thor <author@example.com>
 22 files changed, 22 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 2_B.t
 create mode 100644 2_C.t
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
 create mode 100644 3_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
Switched to a new branch '3_q'
[3_q 0baa6a7] 3_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3_B.t
[3_q 4ec5c38] 3_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3_C.t
Switched to a new branch '3_r'
[3_r de5f7c1] 3_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3_D.t
Switched to branch '3_q'
Merge made by the 'ort' strategy.
 3_D.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 3_D.t
Switched to branch '3_p'
Merge made by the 'ort' strategy.
 3_B.t | 1 +
 3_C.t | 1 +
 3_D.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
Switched to branch '3_r'
[3_r 8adad39] 3_G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3_G.t
Switched to branch '3_p'
Merge made by the 'ort' strategy.
 3_G.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 3_G.t
Note: switching to '@^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 999faae 3_A
Merge made by the 'ort' strategy.
 3_B.t | 1 +
 3_C.t | 1 +
 3_D.t | 1 +
 3_G.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
 create mode 100644 3_G.t
ok 5 - log --graph with nested right-skewed merge following left-skewed merge

expecting success of 4215.6 'log --graph with right-skewed merge following a left-skewed one': 
	git checkout --orphan 4_p &&
	test_commit 4_A &&
	test_commit 4_B &&
	test_commit 4_C &&
	git checkout -b 4_q @^^ && test_commit 4_D &&
	git checkout -b 4_r 4_p^ && git merge --no-ff 4_q -m 4_E &&
	git checkout -b 4_s 4_p^^ &&
	git merge --no-ff 4_r -m 4_F &&
	git merge --no-ff 4_p -m 4_G &&
	git checkout @^^ && git merge --no-ff 4_s -m 4_H &&

	check_graph --date-order <<-\EOF
	*   4_H
	|\
	| *   4_G
	| |\
	| * | 4_F
	|/| |
	| * |   4_E
	| |\ \
	| | * | 4_D
	| |/ /
	|/| |
	| | * 4_C
	| |/
	| * 4_B
	|/
	* 4_A
	EOF

Switched to a new branch '4_p'
[4_p (root-commit) 34bb535] 4_A
 Author: A U Thor <author@example.com>
 27 files changed, 27 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 2_B.t
 create mode 100644 2_C.t
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
 create mode 100644 3_A.t
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
 create mode 100644 3_G.t
 create mode 100644 4_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[4_p 1a06587] 4_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4_B.t
[4_p 55219af] 4_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4_C.t
Switched to a new branch '4_q'
[4_q 004b4a0] 4_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4_D.t
Switched to a new branch '4_r'
Merge made by the 'ort' strategy.
 4_D.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 4_D.t
Switched to a new branch '4_s'
Merge made by the 'ort' strategy.
 4_B.t | 1 +
 4_D.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 4_B.t
 create mode 100644 4_D.t
Merge made by the 'ort' strategy.
 4_C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 4_C.t
Note: switching to '@^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 34bb535 4_A
Merge made by the 'ort' strategy.
 4_B.t | 1 +
 4_C.t | 1 +
 4_D.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 4_B.t
 create mode 100644 4_C.t
 create mode 100644 4_D.t
ok 6 - log --graph with right-skewed merge following a left-skewed one

expecting success of 4215.7 'log --graph with octopus merge with column joining its penultimate parent': 
	git checkout --orphan 5_p &&
	test_commit 5_A &&
	git branch 5_q &&
	git branch 5_r &&
	test_commit 5_B &&
	git checkout 5_q && test_commit 5_C &&
	git checkout 5_r && test_commit 5_D &&
	git checkout 5_p &&
	git merge --no-ff 5_q 5_r -m 5_E &&
	git checkout 5_q && test_commit 5_F &&
	git checkout -b 5_s 5_p^ &&
	git merge --no-ff 5_p 5_q -m 5_G &&
	git checkout 5_r &&
	git merge --no-ff 5_s -m 5_H &&

	check_graph <<-\EOF
	*   5_H
	|\
	| *-.   5_G
	| |\ \
	| | | * 5_F
	| | * |   5_E
	| |/|\ \
	| |_|/ /
	|/| | /
	| | |/
	* | | 5_D
	| | * 5_C
	| |/
	|/|
	| * 5_B
	|/
	* 5_A
	EOF

Switched to a new branch '5_p'
[5_p (root-commit) e8b452a] 5_A
 Author: A U Thor <author@example.com>
 31 files changed, 31 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 2_B.t
 create mode 100644 2_C.t
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
 create mode 100644 3_A.t
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
 create mode 100644 3_G.t
 create mode 100644 4_A.t
 create mode 100644 4_B.t
 create mode 100644 4_C.t
 create mode 100644 4_D.t
 create mode 100644 5_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[5_p 7f4c378] 5_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5_B.t
Switched to branch '5_q'
[5_q d9d00ae] 5_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5_C.t
Switched to branch '5_r'
[5_r 2639b3d] 5_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5_D.t
Switched to branch '5_p'
Trying simple merge with 5_q
Trying simple merge with 5_r
Merge made by the 'octopus' strategy.
 5_C.t | 1 +
 5_D.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 5_C.t
 create mode 100644 5_D.t
Switched to branch '5_q'
[5_q eb0b460] 5_F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5_F.t
Switched to a new branch '5_s'
Fast-forwarding to: 5_p
Trying simple merge with 5_q
Merge made by the 'octopus' strategy.
 5_C.t | 1 +
 5_D.t | 1 +
 5_F.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 5_C.t
 create mode 100644 5_D.t
 create mode 100644 5_F.t
Switched to branch '5_r'
Merge made by the 'ort' strategy.
 5_B.t | 1 +
 5_C.t | 1 +
 5_F.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 5_B.t
 create mode 100644 5_C.t
 create mode 100644 5_F.t
ok 7 - log --graph with octopus merge with column joining its penultimate parent

expecting success of 4215.8 'log --graph with multiple tips': 
	git checkout --orphan 6_1 &&
	test_commit 6_A &&
	git branch 6_2 &&
	git branch 6_4 &&
	test_commit 6_B &&
	git branch 6_3 &&
	test_commit 6_C &&
	git checkout 6_2 && test_commit 6_D &&
	git checkout 6_3 && test_commit 6_E &&
	git checkout -b 6_5 6_1 &&
	git merge --no-ff 6_2 -m 6_F &&
	git checkout 6_4 && test_commit 6_G &&
	git checkout 6_3 &&
	git merge --no-ff 6_4 -m 6_H &&
	git checkout 6_1 &&
	git merge --no-ff 6_2 -m 6_I &&

	check_graph 6_1 6_3 6_5 <<-\EOF
	*   6_I
	|\
	| | *   6_H
	| | |\
	| | | * 6_G
	| | * | 6_E
	| | | | * 6_F
	| |_|_|/|
	|/| | |/
	| | |/|
	| |/| |
	| * | | 6_D
	| | |/
	| |/|
	* | | 6_C
	| |/
	|/|
	* | 6_B
	|/
	* 6_A
	EOF

Switched to a new branch '6_1'
[6_1 (root-commit) bae57ed] 6_A
 Author: A U Thor <author@example.com>
 36 files changed, 36 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 2_B.t
 create mode 100644 2_C.t
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
 create mode 100644 3_A.t
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
 create mode 100644 3_G.t
 create mode 100644 4_A.t
 create mode 100644 4_B.t
 create mode 100644 4_C.t
 create mode 100644 4_D.t
 create mode 100644 5_A.t
 create mode 100644 5_B.t
 create mode 100644 5_C.t
 create mode 100644 5_D.t
 create mode 100644 5_F.t
 create mode 100644 6_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[6_1 23a9c94] 6_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6_B.t
[6_1 87cfc01] 6_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6_C.t
Switched to branch '6_2'
[6_2 596bb81] 6_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6_D.t
Switched to branch '6_3'
[6_3 2e97438] 6_E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6_E.t
Switched to a new branch '6_5'
Merge made by the 'ort' strategy.
 6_D.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 6_D.t
Switched to branch '6_4'
[6_4 f95748a] 6_G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6_G.t
Switched to branch '6_3'
Merge made by the 'ort' strategy.
 6_G.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 6_G.t
Switched to branch '6_1'
Merge made by the 'ort' strategy.
 6_D.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 6_D.t
ok 8 - log --graph with multiple tips

expecting success of 4215.9 'log --graph with multiple tips and colors': 
	test_config log.graphColors red,green,yellow,blue,magenta,cyan &&
	cat >expect.colors <<-\EOF &&
	*   6_I
	<RED>|<RESET><GREEN>\<RESET>
	<RED>|<RESET> <GREEN>|<RESET> *   6_H
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET><BLUE>\<RESET>
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> * 6_G
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET> * 6_F
	<RED>|<RESET> <GREEN>|<RESET><RED>_<RESET><YELLOW>|<RESET><RED>_<RESET><BLUE>|<RESET><RED>/<RESET><GREEN>|<RESET>
	<RED>|<RESET><RED>/<RESET><GREEN>|<RESET> <YELLOW>|<RESET> <BLUE>|<RESET><GREEN>/<RESET>
	<RED>|<RESET> <GREEN>|<RESET> <YELLOW>|<RESET><GREEN>/<RESET><BLUE>|<RESET>
	<RED>|<RESET> <GREEN>|<RESET><GREEN>/<RESET><YELLOW>|<RESET> <BLUE>|<RESET>
	<RED>|<RESET> <GREEN>|<RESET> * <BLUE>|<RESET> 6_E
	<RED>|<RESET> * <CYAN>|<RESET> <BLUE>|<RESET> 6_D
	<RED>|<RESET> <BLUE>|<RESET> <CYAN>|<RESET><BLUE>/<RESET>
	<RED>|<RESET> <BLUE>|<RESET><BLUE>/<RESET><CYAN>|<RESET>
	* <BLUE>|<RESET> <CYAN>|<RESET> 6_C
	<CYAN>|<RESET> <BLUE>|<RESET><CYAN>/<RESET>
	<CYAN>|<RESET><CYAN>/<RESET><BLUE>|<RESET>
	* <BLUE>|<RESET> 6_B
	<BLUE>|<RESET><BLUE>/<RESET>
	* 6_A
	EOF
	lib_test_cmp_colored_graph --date-order --pretty=tformat:%s 6_1 6_3 6_5

ok 9 - log --graph with multiple tips and colors

expecting success of 4215.10 'log --graph with multiple tips': 
	git checkout --orphan 7_1 &&
	test_commit 7_A &&
	test_commit 7_B &&
	test_commit 7_C &&
	git checkout -b 7_2 7_1~2 &&
	test_commit 7_D &&
	test_commit 7_E &&
	git checkout -b 7_3 7_1~1 &&
	test_commit 7_F &&
	test_commit 7_G &&
	git checkout -b 7_4 7_2~1 &&
	test_commit 7_H &&
	git checkout -b 7_5 7_1~2 &&
	test_commit 7_I &&
	git checkout -b 7_6 7_3~1 &&
	test_commit 7_J &&
	git checkout -b M_1 7_1 &&
	git merge --no-ff 7_2 -m 7_M1 &&
	git checkout -b M_3 7_3 &&
	git merge --no-ff 7_4 -m 7_M2 &&
	git checkout -b M_5 7_5 &&
	git merge --no-ff 7_6 -m 7_M3 &&
	git checkout -b M_7 7_1 &&
	git merge --no-ff 7_2 7_3 -m 7_M4 &&

	check_graph M_1 M_3 M_5 M_7 <<-\EOF
	*   7_M1
	|\
	| | *   7_M2
	| | |\
	| | | * 7_H
	| | | | *   7_M3
	| | | | |\
	| | | | | * 7_J
	| | | | * | 7_I
	| | | | | | *   7_M4
	| |_|_|_|_|/|\
	|/| | | | |/ /
	| | |_|_|/| /
	| |/| | | |/
	| | | |_|/|
	| | |/| | |
	| | * | | | 7_G
	| | | |_|/
	| | |/| |
	| | * | | 7_F
	| * | | | 7_E
	| | |/ /
	| |/| |
	| * | | 7_D
	| | |/
	| |/|
	* | | 7_C
	| |/
	|/|
	* | 7_B
	|/
	* 7_A
	EOF

Switched to a new branch '7_1'
[7_1 (root-commit) 2776d32] 7_A
 Author: A U Thor <author@example.com>
 40 files changed, 40 insertions(+)
 create mode 100644 0_A.t
 create mode 100644 0_B.t
 create mode 100644 0_C.t
 create mode 100644 0_D.t
 create mode 100644 0_E.t
 create mode 100644 1_A.t
 create mode 100644 1_B.t
 create mode 100644 1_C.t
 create mode 100644 1_D.t
 create mode 100644 1_F.t
 create mode 100644 2_A.t
 create mode 100644 2_B.t
 create mode 100644 2_C.t
 create mode 100644 2_D.t
 create mode 100644 2_E.t
 create mode 100644 2_F.t
 create mode 100644 3_A.t
 create mode 100644 3_B.t
 create mode 100644 3_C.t
 create mode 100644 3_D.t
 create mode 100644 3_G.t
 create mode 100644 4_A.t
 create mode 100644 4_B.t
 create mode 100644 4_C.t
 create mode 100644 4_D.t
 create mode 100644 5_A.t
 create mode 100644 5_B.t
 create mode 100644 5_C.t
 create mode 100644 5_D.t
 create mode 100644 5_F.t
 create mode 100644 6_A.t
 create mode 100644 6_B.t
 create mode 100644 6_C.t
 create mode 100644 6_D.t
 create mode 100644 7_A.t
 create mode 100644 A.t
 create mode 100644 B.t
 create mode 100644 C.t
 create mode 100644 D.t
 create mode 100644 F.t
[7_1 704700a] 7_B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_B.t
[7_1 b8c0a0c] 7_C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_C.t
Switched to a new branch '7_2'
[7_2 78388a6] 7_D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_D.t
[7_2 4d652c3] 7_E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_E.t
Switched to a new branch '7_3'
[7_3 07bff16] 7_F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_F.t
[7_3 8980ecc] 7_G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_G.t
Switched to a new branch '7_4'
[7_4 d3195f2] 7_H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_H.t
Switched to a new branch '7_5'
[7_5 ad0296d] 7_I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_I.t
Switched to a new branch '7_6'
[7_6 0ff8825] 7_J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7_J.t
Switched to a new branch 'M_1'
Merge made by the 'ort' strategy.
 7_D.t | 1 +
 7_E.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 7_D.t
 create mode 100644 7_E.t
Switched to a new branch 'M_3'
Merge made by the 'ort' strategy.
 7_D.t | 1 +
 7_H.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 7_D.t
 create mode 100644 7_H.t
Switched to a new branch 'M_5'
Merge made by the 'ort' strategy.
 7_B.t | 1 +
 7_F.t | 1 +
 7_J.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 7_B.t
 create mode 100644 7_F.t
 create mode 100644 7_J.t
Switched to a new branch 'M_7'
Trying simple merge with 7_2
Trying simple merge with 7_3
Merge made by the 'octopus' strategy.
 7_D.t | 1 +
 7_E.t | 1 +
 7_F.t | 1 +
 7_G.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 7_D.t
 create mode 100644 7_E.t
 create mode 100644 7_F.t
 create mode 100644 7_G.t
ok 10 - log --graph with multiple tips

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4300-merge-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4300-merge-tree/.git/
expecting success of 4300.1 'setup': 
	test_commit "initial" "initial-file" "initial"

[master (root-commit) c1d16d8] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial-file
ok 1 - setup

expecting success of 4300.2 'file add A, !B': 
	git reset --hard initial &&
	test_commit "add-a-not-b" "ONE" "AAA" &&
	git merge-tree initial initial add-a-not-b >actual &&
	cat >expected <<EXPECTED &&
added in remote
  their  100644 $(git rev-parse HEAD:ONE) ONE
@@ -0,0 +1 @@
+AAA
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master e55b628] add-a-not-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
ok 2 - file add A, !B

expecting success of 4300.3 'file add !A, B': 
	git reset --hard initial &&
	test_commit "add-not-a-b" "ONE" "AAA" &&
	git merge-tree initial add-not-a-b initial >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master fe72a09] add-not-a-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
ok 3 - file add !A, B

expecting success of 4300.4 'file add A, B (same)': 
	git reset --hard initial &&
	test_commit "add-a-b-same-A" "ONE" "AAA" &&
	git reset --hard initial &&
	test_commit "add-a-b-same-B" "ONE" "AAA" &&
	git merge-tree initial add-a-b-same-A add-a-b-same-B >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master adad022] add-a-b-same-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
HEAD is now at c1d16d8 initial
[master c566426] add-a-b-same-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
ok 4 - file add A, B (same)

expecting success of 4300.5 'file add A, B (different)': 
	git reset --hard initial &&
	test_commit "add-a-b-diff-A" "ONE" "AAA" &&
	git reset --hard initial &&
	test_commit "add-a-b-diff-B" "ONE" "BBB" &&
	git merge-tree initial add-a-b-diff-A add-a-b-diff-B >actual &&
	cat >expected <<EXPECTED &&
added in both
  our    100644 $(git rev-parse add-a-b-diff-A:ONE) ONE
  their  100644 $(git rev-parse add-a-b-diff-B:ONE) ONE
@@ -1 +1,5 @@
+<<<<<<< .our
 AAA
+=======
+BBB
+>>>>>>> .their
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master 59aa417] add-a-b-diff-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
HEAD is now at c1d16d8 initial
[master 06b549e] add-a-b-diff-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
ok 5 - file add A, B (different)

expecting success of 4300.6 'file change A, !B': 
	git reset --hard initial &&
	test_commit "change-a-not-b" "initial-file" "BBB" &&
	git merge-tree initial change-a-not-b initial >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master 46329de] change-a-not-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - file change A, !B

expecting success of 4300.7 'file change !A, B': 
	git reset --hard initial &&
	test_commit "change-not-a-b" "initial-file" "BBB" &&
	git merge-tree initial initial change-not-a-b >actual &&
	cat >expected <<EXPECTED &&
merged
  result 100644 $(git rev-parse change-a-not-b:initial-file) initial-file
  our    100644 $(git rev-parse initial:initial-file       ) initial-file
@@ -1 +1 @@
-initial
+BBB
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master 4667cad] change-not-a-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - file change !A, B

expecting success of 4300.8 'file change A, B (same)': 
	git reset --hard initial &&
	test_commit "change-a-b-same-A" "initial-file" "AAA" &&
	git reset --hard initial &&
	test_commit "change-a-b-same-B" "initial-file" "AAA" &&
	git merge-tree initial change-a-b-same-A change-a-b-same-B >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master 17f6774] change-a-b-same-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at c1d16d8 initial
[master c618aaa] change-a-b-same-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 8 - file change A, B (same)

expecting success of 4300.9 'file change A, B (different)': 
	git reset --hard initial &&
	test_commit "change-a-b-diff-A" "initial-file" "AAA" &&
	git reset --hard initial &&
	test_commit "change-a-b-diff-B" "initial-file" "BBB" &&
	git merge-tree initial change-a-b-diff-A change-a-b-diff-B >actual &&
	cat >expected <<EXPECTED &&
changed in both
  base   100644 $(git rev-parse initial:initial-file          ) initial-file
  our    100644 $(git rev-parse change-a-b-diff-A:initial-file) initial-file
  their  100644 $(git rev-parse change-a-b-diff-B:initial-file) initial-file
@@ -1 +1,5 @@
+<<<<<<< .our
 AAA
+=======
+BBB
+>>>>>>> .their
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master f14ee41] change-a-b-diff-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at c1d16d8 initial
[master 6faccc3] change-a-b-diff-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - file change A, B (different)

expecting success of 4300.10 'file change A, B (mixed)': 
	git reset --hard initial &&
	test_commit "change-a-b-mix-base" "ONE" "
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA
AAA" &&
	test_commit "change-a-b-mix-A" "ONE" \
		"$(sed -e "1{s/AAA/BBB/;}" -e "10{s/AAA/BBB/;}" <ONE)" &&
	git reset --hard change-a-b-mix-base &&
	test_commit "change-a-b-mix-B" "ONE" \
		"$(sed -e "1{s/AAA/BBB/;}" -e "10{s/AAA/CCC/;}" <ONE)" &&
	git merge-tree change-a-b-mix-base change-a-b-mix-A change-a-b-mix-B \
		>actual &&

	cat >expected <<EXPECTED &&
changed in both
  base   100644 $(git rev-parse change-a-b-mix-base:ONE) ONE
  our    100644 $(git rev-parse change-a-b-mix-A:ONE   ) ONE
  their  100644 $(git rev-parse change-a-b-mix-B:ONE   ) ONE
@@ -7,7 +7,11 @@
 AAA
 AAA
 AAA
+<<<<<<< .our
 BBB
+=======
+CCC
+>>>>>>> .their
 AAA
 AAA
 AAA
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master 8f24aa4] change-a-b-mix-base
 Author: A U Thor <author@example.com>
 1 file changed, 16 insertions(+)
 create mode 100644 ONE
[master 37be425] change-a-b-mix-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 8f24aa4 change-a-b-mix-base
[master 9bb3ceb] change-a-b-mix-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 10 - file change A, B (mixed)

expecting success of 4300.11 'file remove A, !B': 
	git reset --hard initial &&
	test_commit "rm-a-not-b-base" "ONE" "AAA" &&
	git rm ONE &&
	git commit -m "rm-a-not-b" &&
	git tag "rm-a-not-b" &&
	git merge-tree rm-a-not-b-base rm-a-not-b rm-a-not-b-base >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master 6bc469c] rm-a-not-b-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
rm 'ONE'
[master eaee347] rm-a-not-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 ONE
ok 11 - file remove A, !B

expecting success of 4300.12 'file remove !A, B': 
	git reset --hard initial &&
	test_commit "rm-not-a-b-base" "ONE" "AAA" &&
	git rm ONE &&
	git commit -m "rm-not-a-b" &&
	git tag "rm-not-a-b" &&
	git merge-tree rm-a-not-b-base rm-a-not-b-base rm-a-not-b >actual &&
	cat >expected <<EXPECTED &&
removed in remote
  base   100644 $(git rev-parse rm-a-not-b-base:ONE) ONE
  our    100644 $(git rev-parse rm-a-not-b-base:ONE) ONE
@@ -1 +0,0 @@
-AAA
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master 4c80bfe] rm-not-a-b-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
rm 'ONE'
[master f5c368c] rm-not-a-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 ONE
ok 12 - file remove !A, B

expecting success of 4300.13 'file remove A, B (same)': 
	git reset --hard initial &&
	test_commit "rm-a-b-base" "ONE" "AAA" &&
	git rm ONE &&
	git commit -m "rm-a-b" &&
	git tag "rm-a-b" &&
	git merge-tree rm-a-b-base rm-a-b rm-a-b >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master ba896b0] rm-a-b-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
rm 'ONE'
[master e5794d5] rm-a-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 ONE
ok 13 - file remove A, B (same)

expecting success of 4300.14 'file change A, remove B': 
	git reset --hard initial &&
	test_commit "change-a-rm-b-base" "ONE" "AAA" &&
	test_commit "change-a-rm-b-A" "ONE" "BBB" &&
	git reset --hard change-a-rm-b-base &&
	git rm ONE &&
	git commit -m "change-a-rm-b-B" &&
	git tag "change-a-rm-b-B" &&
	git merge-tree change-a-rm-b-base change-a-rm-b-A change-a-rm-b-B \
		>actual &&
	cat >expected <<EXPECTED &&
removed in remote
  base   100644 $(git rev-parse change-a-rm-b-base:ONE) ONE
  our    100644 $(git rev-parse change-a-rm-b-A:ONE   ) ONE
@@ -1 +0,0 @@
-BBB
EXPECTED

	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master 425fe11] change-a-rm-b-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
[master d7b5417] change-a-rm-b-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 425fe11 change-a-rm-b-base
rm 'ONE'
[master a35c11c] change-a-rm-b-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 ONE
ok 14 - file change A, remove B

expecting success of 4300.15 'file remove A, change B': 
	git reset --hard initial &&
	test_commit "rm-a-change-b-base" "ONE" "AAA" &&

	git rm ONE &&
	git commit -m "rm-a-change-b-A" &&
	git tag "rm-a-change-b-A" &&
	git reset --hard rm-a-change-b-base &&
	test_commit "rm-a-change-b-B" "ONE" "BBB" &&
	git merge-tree rm-a-change-b-base rm-a-change-b-A rm-a-change-b-B \
		>actual &&
	cat >expected <<EXPECTED &&
removed in local
  base   100644 $(git rev-parse rm-a-change-b-base:ONE) ONE
  their  100644 $(git rev-parse rm-a-change-b-B:ONE   ) ONE
EXPECTED
	test_cmp expected actual

HEAD is now at c1d16d8 initial
[master e3f76d1] rm-a-change-b-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ONE
rm 'ONE'
[master 12305ab] rm-a-change-b-A
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 ONE
HEAD is now at e3f76d1 rm-a-change-b-base
[master 30c5a34] rm-a-change-b-B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - file remove A, change B

expecting success of 4300.16 'tree add A, B (same)': 
	git reset --hard initial &&
	mkdir sub &&
	test_commit "add sub/file" "sub/file" "file" add-tree-A &&
	git merge-tree initial add-tree-A add-tree-A >actual &&
	test_must_be_empty actual

HEAD is now at c1d16d8 initial
[master f146135] add sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/file
ok 16 - tree add A, B (same)

expecting success of 4300.17 'tree add A, B (different)': 
	git reset --hard initial &&
	mkdir sub &&
	test_commit "add sub/file" "sub/file" "AAA" add-tree-a-b-A &&
	git reset --hard initial &&
	mkdir sub &&
	test_commit "add sub/file" "sub/file" "BBB" add-tree-a-b-B &&
	git merge-tree initial add-tree-a-b-A add-tree-a-b-B >actual &&
	cat >expect <<-EOF &&
	added in both
	  our    100644 $(git rev-parse add-tree-a-b-A:sub/file) sub/file
	  their  100644 $(git rev-parse add-tree-a-b-B:sub/file) sub/file
	@@ -1 +1,5 @@
	+<<<<<<< .our
	 AAA
	+=======
	+BBB
	+>>>>>>> .their
	EOF
	test_cmp expect actual

HEAD is now at c1d16d8 initial
[master 278e538] add sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/file
HEAD is now at c1d16d8 initial
[master b437163] add sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/file
ok 17 - tree add A, B (different)

expecting success of 4300.18 'tree unchanged A, removed B': 
	git reset --hard initial &&
	mkdir sub &&
	test_commit "add sub/file" "sub/file" "AAA" tree-remove-b-initial &&
	git rm sub/file &&
	test_tick &&
	git commit -m "remove sub/file" &&
	git tag tree-remove-b-B &&
	git merge-tree tree-remove-b-initial tree-remove-b-initial tree-remove-b-B >actual &&
	cat >expect <<-EOF &&
	removed in remote
	  base   100644 $(git rev-parse tree-remove-b-initial:sub/file) sub/file
	  our    100644 $(git rev-parse tree-remove-b-initial:sub/file) sub/file
	@@ -1 +0,0 @@
	-AAA
	EOF
	test_cmp expect actual

HEAD is now at c1d16d8 initial
[master 06f44d6] add sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/file
rm 'sub/file'
[master 7d2ab7e] remove sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 sub/file
ok 18 - tree unchanged A, removed B

expecting success of 4300.19 'turn file to tree': 
	git reset --hard initial &&
	rm initial-file &&
	mkdir initial-file &&
	test_commit "turn-file-to-tree" "initial-file/ONE" "CCC" &&
	git merge-tree initial initial turn-file-to-tree >actual &&
	cat >expect <<-EOF &&
	added in remote
	  their  100644 $(git rev-parse turn-file-to-tree:initial-file/ONE) initial-file/ONE
	@@ -0,0 +1 @@
	+CCC
	removed in remote
	  base   100644 $(git rev-parse initial:initial-file) initial-file
	  our    100644 $(git rev-parse initial:initial-file) initial-file
	@@ -1 +0,0 @@
	-initial
	EOF
	test_cmp expect actual

HEAD is now at c1d16d8 initial
[master c7dbe97] turn-file-to-tree
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 initial-file
 create mode 100644 initial-file/ONE
ok 19 - turn file to tree

expecting success of 4300.20 'turn tree to file': 
	git reset --hard initial &&
	mkdir dir &&
	test_commit "add-tree" "dir/path" "AAA" &&
	test_commit "add-another-tree" "dir/another" "BBB" &&
	rm -fr dir &&
	test_commit "make-file" "dir" "CCC" &&
	git merge-tree add-tree add-another-tree make-file >actual &&
	cat >expect <<-EOF &&
	removed in remote
	  base   100644 $(git rev-parse add-tree:dir/path) dir/path
	  our    100644 $(git rev-parse add-tree:dir/path) dir/path
	@@ -1 +0,0 @@
	-AAA
	added in remote
	  their  100644 $(git rev-parse make-file:dir) dir
	@@ -0,0 +1 @@
	+CCC
	EOF
	test_cmp expect actual

HEAD is now at c1d16d8 initial
[master fadeed0] add-tree
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/path
[master 2076f67] add-another-tree
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/another
[master 8ffb08d] make-file
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 dir
 delete mode 100644 dir/another
 delete mode 100644 dir/path
ok 20 - turn tree to file

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4301-merge-tree-write-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/.git/
expecting success of 4301.1 'setup': 
	test_write_lines 1 2 3 4 5 >numbers &&
	echo hello >greeting &&
	echo foo >whatever &&
	git add numbers greeting whatever &&
	test_tick &&
	git commit -m initial &&

	git branch side1 &&
	git branch side2 &&
	git branch side3 &&

	git checkout side1 &&
	test_write_lines 1 2 3 4 5 6 >numbers &&
	echo hi >greeting &&
	echo bar >whatever &&
	git add numbers greeting whatever &&
	test_tick &&
	git commit -m modify-stuff &&

	git checkout side2 &&
	test_write_lines 0 1 2 3 4 5 >numbers &&
	echo yo >greeting &&
	git rm whatever &&
	mkdir whatever &&
	>whatever/empty &&
	git add numbers greeting whatever/empty &&
	test_tick &&
	git commit -m other-modifications &&

	git checkout side3 &&
	git mv numbers sequence &&
	test_tick &&
	git commit -m rename-numbers &&

	git switch --orphan unrelated &&
	>something-else &&
	git add something-else &&
	test_tick &&
	git commit -m first-commit

[master (root-commit) 4dbd187] initial
 Author: A U Thor <author@example.com>
 3 files changed, 7 insertions(+)
 create mode 100644 greeting
 create mode 100644 numbers
 create mode 100644 whatever
Switched to branch 'side1'
[side1 ac3beb6] modify-stuff
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+), 2 deletions(-)
Switched to branch 'side2'
rm 'whatever'
[side2 e47ad47] other-modifications
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 whatever
 create mode 100644 whatever/empty
Switched to branch 'side3'
[side3 9ae837e] rename-numbers
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename numbers => sequence (100%)
Switched to a new branch 'unrelated'
[unrelated (root-commit) d0ee98e] first-commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 something-else
ok 1 - setup

expecting success of 4301.2 'Clean merge': 
	TREE_OID=$(git merge-tree --write-tree side1 side3) &&
	q_to_tab <<-EOF >expect &&
	100644 blob $(git rev-parse side1:greeting)Qgreeting
	100644 blob $(git rev-parse side1:numbers)Qsequence
	100644 blob $(git rev-parse side1:whatever)Qwhatever
	EOF

	git ls-tree $TREE_OID >actual &&
	test_cmp expect actual

ok 2 - Clean merge

expecting success of 4301.3 'Content merge and a few conflicts': 
	git checkout side1^0 &&
	test_must_fail git merge side2 &&
	expected_tree=$(git rev-parse AUTO_MERGE) &&

	# We will redo the merge, while we are still in a conflicted state!
	git ls-files -u >conflicted-file-info &&
	test_when_finished "git reset --hard" &&

	test_expect_code 1 git merge-tree --write-tree side1 side2 >RESULT &&
	actual_tree=$(head -n 1 RESULT) &&

	# Due to differences of e.g. "HEAD" vs "side1", the results will not
	# exactly match.  Dig into individual files.

	# Numbers should have three-way merged cleanly
	test_write_lines 0 1 2 3 4 5 6 >expect &&
	git show ${actual_tree}:numbers >actual &&
	test_cmp expect actual &&

	# whatever and whatever~<branch> should have same HASHES
	git rev-parse ${expected_tree}:whatever ${expected_tree}:whatever~HEAD >expect &&
	git rev-parse ${actual_tree}:whatever ${actual_tree}:whatever~side1 >actual &&
	test_cmp expect actual &&

	# greeting should have a merge conflict
	git show ${expected_tree}:greeting >tmp &&
	sed -e s/HEAD/side1/ tmp >expect &&
	git show ${actual_tree}:greeting >actual &&
	test_cmp expect actual

Note: switching to 'side1^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ac3beb6 modify-stuff
Auto-merging greeting
CONFLICT (content): Merge conflict in greeting
Auto-merging numbers
CONFLICT (file/directory): directory in the way of whatever from HEAD; moving it to whatever~HEAD instead.
CONFLICT (modify/delete): whatever~HEAD deleted in side2 and modified in HEAD.  Version HEAD of whatever~HEAD left in tree.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at ac3beb6 modify-stuff
ok 3 - Content merge and a few conflicts

expecting success of 4301.4 'Barf on misspelled option, with exit code other than 0 or 1': 
	# Mis-spell with single "s" instead of double "s"
	test_expect_code 129 git merge-tree --write-tree --mesages FOOBAR side1 side2 2>expect &&

	grep "error: unknown option.*mesages" expect

error: unknown option `mesages'
ok 4 - Barf on misspelled option, with exit code other than 0 or 1

expecting success of 4301.5 'Barf on too many arguments': 
	test_expect_code 129 git merge-tree --write-tree side1 side2 invalid 2>expect &&

	grep "^usage: git merge-tree" expect

usage: git merge-tree [--write-tree] [<options>] <branch1> <branch2>
ok 5 - Barf on too many arguments

expecting success of 4301.6 'test conflict notices and such': 
	test_expect_code 1 git merge-tree --write-tree --name-only side1 side2 >out &&
	anonymize_hash out >actual &&

	# Expected results:
	#   "greeting" should merge with conflicts
	#   "numbers" should merge cleanly
	#   "whatever" has *both* a modify/delete and a file/directory conflict
	cat <<-EOF >expect &&
	HASH
	greeting
	whatever~side1

	Auto-merging greeting
	CONFLICT (content): Merge conflict in greeting
	Auto-merging numbers
	CONFLICT (file/directory): directory in the way of whatever from side1; moving it to whatever~side1 instead.
	CONFLICT (modify/delete): whatever~side1 deleted in side2 and modified in side1.  Version side1 of whatever~side1 left in tree.
	EOF

	test_cmp expect actual

ok 6 - test conflict notices and such

expecting success of 4301.7 'directory rename + content conflict': 
	# Setup
	git init dir-rename-and-content &&
	(
		cd dir-rename-and-content &&
		test_write_lines 1 2 3 4 5 >foo &&
		mkdir olddir &&
		for i in a b c; do echo $i >olddir/$i || exit 1; done &&
		git add foo olddir &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_write_lines 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv olddir newdir &&
		git commit -m "Modify foo, rename olddir to newdir" &&

		git checkout B &&
		test_write_lines 1 2 3 4 5 six >foo &&
		git add foo &&
		git mv foo olddir/bar &&
		git commit -m "Modify foo & rename foo -> olddir/bar"
	) &&
	# Testing
	(
		cd dir-rename-and-content &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 1Qnewdir/bar
		100644 HASH 2Qnewdir/bar
		100644 HASH 3Qnewdir/bar
		EOF

		q_to_nul <<-EOF >>expect &&
		Q2Qnewdir/barQolddir/barQCONFLICT (directory rename suggested)QCONFLICT (file location): foo renamed to olddir/bar in B^0, inside a directory that was renamed in A^0, suggesting it should perhaps be moved to newdir/bar.
		Q1Qnewdir/barQAuto-mergingQAuto-merging newdir/bar
		Q1Qnewdir/barQCONFLICT (contents)QCONFLICT (content): Merge conflict in newdir/bar
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/dir-rename-and-content/.git/
[master (root-commit) c814ce4] original
 Author: A U Thor <author@example.com>
 4 files changed, 8 insertions(+)
 create mode 100644 foo
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 olddir/c
Switched to branch 'A'
[A 9342ea2] Modify foo, rename olddir to newdir
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 rename {olddir => newdir}/a (100%)
 rename {olddir => newdir}/b (100%)
 rename {olddir => newdir}/c (100%)
Switched to branch 'B'
[B f2d6948] Modify foo & rename foo -> olddir/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => olddir/bar (71%)
ok 7 - directory rename + content conflict

expecting success of 4301.8 'rename/delete handling': 
	# Setup
	git init rename-delete &&
	(
		cd rename-delete &&
		test_write_lines 1 2 3 4 5 >foo &&
		git add foo &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_write_lines 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv foo bar &&
		git commit -m "Modify foo, rename to bar" &&

		git checkout B &&
		git rm foo &&
		git commit -m "remove foo"
	) &&
	# Testing
	(
		cd rename-delete &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 1Qbar
		100644 HASH 2Qbar
		EOF

		q_to_nul <<-EOF >>expect &&
		Q2QbarQfooQCONFLICT (rename/delete)QCONFLICT (rename/delete): foo renamed to bar in A^0, but deleted in B^0.
		Q1QbarQCONFLICT (modify/delete)QCONFLICT (modify/delete): bar deleted in B^0 and modified in A^0.  Version A^0 of bar left in tree.
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rename-delete/.git/
[master (root-commit) a20533f] original
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 foo
Switched to branch 'A'
[A 39a87ac] Modify foo, rename to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => bar (83%)
Switched to branch 'B'
rm 'foo'
[B 6f44730] remove foo
 Author: A U Thor <author@example.com>
 1 file changed, 5 deletions(-)
 delete mode 100644 foo
ok 8 - rename/delete handling

expecting success of 4301.9 'rename/add handling': 
	# Setup
	git init rename-add &&
	(
		cd rename-add &&
		test_write_lines original 1 2 3 4 5 >foo &&
		git add foo &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_write_lines 1 2 3 4 5 >foo &&
		echo "different file" >bar &&
		git add foo bar &&
		git commit -m "Modify foo, add bar" &&

		git checkout B &&
		test_write_lines original 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv foo bar &&
		git commit -m "rename foo to bar"
	) &&
	# Testing
	(
		cd rename-add &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&

		#
		# First, check that the bar that appears at stage 3 does not
		# correspond to an individual blob anywhere in history
		#
		hash=$(cat out | tr "\0" "\n" | head -n 3 | grep 3.bar | cut -f 2 -d " ") &&
		git rev-list --objects --all >all_blobs &&
		! grep $hash all_blobs &&

		#
		# Second, check anonymized hash output against expectation
		#
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 2Qbar
		100644 HASH 3Qbar
		EOF

		q_to_nul <<-EOF >>expect &&
		Q1QbarQAuto-mergingQAuto-merging bar
		Q1QbarQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in bar
		Q1QfooQAuto-mergingQAuto-merging foo
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rename-add/.git/
[master (root-commit) c582a91] original
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 foo
Switched to branch 'A'
[A 48a9c2a] Modify foo, add bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 bar
Switched to branch 'B'
[B 129ff4b] rename foo to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => bar (90%)
ok 9 - rename/add handling

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 4301.10 'rename/add, where add is a mode conflict': 
	# Setup
	git init rename-add-symlink &&
	(
		cd rename-add-symlink &&
		test_write_lines original 1 2 3 4 5 >foo &&
		git add foo &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_write_lines 1 2 3 4 5 >foo &&
		ln -s foo bar &&
		git add foo bar &&
		git commit -m "Modify foo, add symlink bar" &&

		git checkout B &&
		test_write_lines original 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv foo bar &&
		git commit -m "rename foo to bar"
	) &&
	# Testing
	(
		cd rename-add-symlink &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&

		#
		# First, check that the bar that appears at stage 3 does not
		# correspond to an individual blob anywhere in history
		#
		hash=$(cat out | tr "\0" "\n" | head -n 3 | grep 3.bar | cut -f 2 -d " ") &&
		git rev-list --objects --all >all_blobs &&
		! grep $hash all_blobs &&

		#
		# Second, check anonymized hash output against expectation
		#
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		120000 HASH 2Qbar
		100644 HASH 3Qbar~B^0
		EOF

		q_to_nul <<-EOF >>expect &&
		Q2QbarQbar~B^0QCONFLICT (distinct modes)QCONFLICT (distinct types): bar had different types on each side; renamed one of them so each can be recorded somewhere.
		Q1QfooQAuto-mergingQAuto-merging foo
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rename-add-symlink/.git/
[master (root-commit) c582a91] original
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 foo
Switched to branch 'A'
[A 5151fd6] Modify foo, add symlink bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 120000 bar
Switched to branch 'B'
[B 129ff4b] rename foo to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => bar (90%)
ok 10 - rename/add, where add is a mode conflict

expecting success of 4301.11 'rename/rename + content conflict': 
	# Setup
	git init rr-plus-content &&
	(
		cd rr-plus-content &&
		test_write_lines 1 2 3 4 5 >foo &&
		git add foo &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_write_lines 1 2 3 4 5 six >foo &&
		git add foo &&
		git mv foo bar &&
		git commit -m "Modify foo + rename to bar" &&

		git checkout B &&
		test_write_lines 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv foo baz &&
		git commit -m "Modify foo + rename to baz"
	) &&
	# Testing
	(
		cd rr-plus-content &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 2Qbar
		100644 HASH 3Qbaz
		100644 HASH 1Qfoo
		EOF

		q_to_nul <<-EOF >>expect &&
		Q1QfooQAuto-mergingQAuto-merging foo
		Q3QfooQbarQbazQCONFLICT (rename/rename)QCONFLICT (rename/rename): foo renamed to bar in A^0 and to baz in B^0.
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rr-plus-content/.git/
[master (root-commit) a20533f] original
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 foo
Switched to branch 'A'
[A 23dd50f] Modify foo + rename to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => bar (71%)
Switched to branch 'B'
[B abcf021] Modify foo + rename to baz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => baz (83%)
ok 11 - rename/rename + content conflict

expecting success of 4301.12 'rename/add/delete conflict': 
	# Setup
	git init rad &&
	(
		cd rad &&
		echo "original file" >foo &&
		git add foo &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		git rm foo &&
		echo "different file" >bar &&
		git add bar &&
		git commit -m "Remove foo, add bar" &&

		git checkout B &&
		git mv foo bar &&
		git commit -m "rename foo to bar"
	) &&
	# Testing
	(
		cd rad &&

		test_expect_code 1 \
			git merge-tree -z B^0 A^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&

		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 2Qbar
		100644 HASH 3Qbar

		EOF

		q_to_nul <<-EOF >>expect &&
		2QbarQfooQCONFLICT (rename/delete)QCONFLICT (rename/delete): foo renamed to bar in B^0, but deleted in A^0.
		Q1QbarQAuto-mergingQAuto-merging bar
		Q1QbarQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in bar
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rad/.git/
[master (root-commit) 6598778] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Switched to branch 'A'
rm 'foo'
[A ddf1c75] Remove foo, add bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 bar
 delete mode 100644 foo
Switched to branch 'B'
[B a936668] rename foo to bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename foo => bar (100%)
ok 12 - rename/add/delete conflict

expecting success of 4301.13 'rename/rename(2to1)/delete/delete conflict': 
	# Setup
	git init rrdd &&
	(
		cd rrdd &&
		echo foo >foo &&
		echo bar >bar &&
		git add foo bar &&
		git commit -m O &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		git mv foo baz &&
		git rm bar &&
		git commit -m "Rename foo, remove bar" &&

		git checkout B &&
		git mv bar baz &&
		git rm foo &&
		git commit -m "Rename bar, remove foo"
	) &&
	# Testing
	(
		cd rrdd &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&

		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 2Qbaz
		100644 HASH 3Qbaz

		EOF

		q_to_nul <<-EOF >>expect &&
		2QbazQbarQCONFLICT (rename/delete)QCONFLICT (rename/delete): bar renamed to baz in B^0, but deleted in A^0.
		Q2QbazQfooQCONFLICT (rename/delete)QCONFLICT (rename/delete): foo renamed to baz in A^0, but deleted in B^0.
		Q1QbazQAuto-mergingQAuto-merging baz
		Q1QbazQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in baz
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/rrdd/.git/
[master (root-commit) 358ef91] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
Switched to branch 'A'
rm 'bar'
[A b399248] Rename foo, remove bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 delete mode 100644 bar
 rename foo => baz (100%)
Switched to branch 'B'
rm 'foo'
[B aa7e263] Rename bar, remove foo
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename bar => baz (100%)
 delete mode 100644 foo
ok 13 - rename/rename(2to1)/delete/delete conflict

expecting success of 4301.14 'mod6: chains of rename/rename(1to2) and add/add via colliding renames': 
	# Setup
	git init mod6 &&
	(
		cd mod6 &&
		test_seq 11 19 >one &&
		test_seq 31 39 >three &&
		test_seq 51 59 >five &&
		git add . &&
		test_tick &&
		git commit -m "O" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		test_seq 10 19 >one &&
		echo 40        >>three &&
		git add one three &&
		git mv  one   two  &&
		git mv  three four &&
		git mv  five  six  &&
		test_tick &&
		git commit -m "A" &&

		git checkout B &&
		echo 20    >>one       &&
		echo forty >>three     &&
		echo 60    >>five      &&
		git add one three five &&
		git mv  one   six  &&
		git mv  three two  &&
		git mv  five  four &&
		test_tick &&
		git commit -m "B"
	) &&
	# Testing
	(
		cd mod6 &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&

		#
		# First, check that some of the hashes that appear as stage
		# conflict entries do not appear as individual blobs anywhere
		# in history.
		#
		hash1=$(cat out | tr "\0" "\n" | head | grep 2.four | cut -f 2 -d " ") &&
		hash2=$(cat out | tr "\0" "\n" | head | grep 3.two | cut -f 2 -d " ") &&
		git rev-list --objects --all >all_blobs &&
		! grep $hash1 all_blobs &&
		! grep $hash2 all_blobs &&

		#
		# Now compare anonymized hash output with expectation
		#
		anonymize_hash out >actual &&
		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 1Qfive
		100644 HASH 2Qfour
		100644 HASH 3Qfour
		100644 HASH 1Qone
		100644 HASH 2Qsix
		100644 HASH 3Qsix
		100644 HASH 1Qthree
		100644 HASH 2Qtwo
		100644 HASH 3Qtwo

		EOF

		q_to_nul <<-EOF >>expect &&
		3QfiveQsixQfourQCONFLICT (rename/rename)QCONFLICT (rename/rename): five renamed to six in A^0 and to four in B^0.
		Q1QfourQAuto-mergingQAuto-merging four
		Q1QfourQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in four
		Q1QoneQAuto-mergingQAuto-merging one
		Q3QoneQtwoQsixQCONFLICT (rename/rename)QCONFLICT (rename/rename): one renamed to two in A^0 and to six in B^0.
		Q1QsixQAuto-mergingQAuto-merging six
		Q1QsixQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in six
		Q1QthreeQAuto-mergingQAuto-merging three
		Q3QthreeQfourQtwoQCONFLICT (rename/rename)QCONFLICT (rename/rename): three renamed to four in A^0 and to two in B^0.
		Q1QtwoQAuto-mergingQAuto-merging two
		Q1QtwoQCONFLICT (contents)QCONFLICT (add/add): Merge conflict in two
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/mod6/.git/
[master (root-commit) 827d655] O
 Author: A U Thor <author@example.com>
 3 files changed, 27 insertions(+)
 create mode 100644 five
 create mode 100644 one
 create mode 100644 three
Switched to branch 'A'
[A 4131deb] A
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 rename three => four (90%)
 rename five => six (100%)
 rename one => two (90%)
Switched to branch 'B'
[B 289a62e] B
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 rename five => four (90%)
 rename one => six (90%)
 rename three => two (81%)
ok 14 - mod6: chains of rename/rename(1to2) and add/add via colliding renames

expecting success of 4301.15 'directory rename + rename/delete + modify/delete + directory/file conflict': 
	# Setup
	git init 4-stacked-conflict &&
	(
		cd 4-stacked-conflict &&
		test_write_lines 1 2 3 4 5 >foo &&
		mkdir olddir &&
		for i in a b c; do echo $i >olddir/$i || exit 1; done &&
		git add foo olddir &&
		git commit -m "original" &&

		git branch O &&
		git branch A &&
		git branch B &&

		git checkout A &&
		git rm foo &&
		git mv olddir newdir &&
		mkdir newdir/bar &&
		>newdir/bar/file &&
		git add newdir/bar/file &&
		git commit -m "rm foo, olddir/ -> newdir/, + newdir/bar/file" &&

		git checkout B &&
		test_write_lines 1 2 3 4 5 6 >foo &&
		git add foo &&
		git mv foo olddir/bar &&
		git commit -m "Modify foo & rename foo -> olddir/bar"
	) &&
	# Testing
	(
		cd 4-stacked-conflict &&

		test_expect_code 1 \
			git merge-tree -z A^0 B^0 >out &&
		echo >>out &&
		anonymize_hash out >actual &&

		q_to_tab <<-\EOF | lf_to_nul >expect &&
		HASH
		100644 HASH 1Qnewdir/bar~B^0
		100644 HASH 3Qnewdir/bar~B^0
		EOF

		q_to_nul <<-EOF >>expect &&
		Q2Qnewdir/barQolddir/barQCONFLICT (directory rename suggested)QCONFLICT (file location): foo renamed to olddir/bar in B^0, inside a directory that was renamed in A^0, suggesting it should perhaps be moved to newdir/bar.
		Q2Qnewdir/barQfooQCONFLICT (rename/delete)QCONFLICT (rename/delete): foo renamed to newdir/bar in B^0, but deleted in A^0.
		Q2Qnewdir/bar~B^0Qnewdir/barQCONFLICT (file/directory)QCONFLICT (file/directory): directory in the way of newdir/bar from B^0; moving it to newdir/bar~B^0 instead.
		Q1Qnewdir/bar~B^0QCONFLICT (modify/delete)QCONFLICT (modify/delete): newdir/bar~B^0 deleted in A^0 and modified in B^0.  Version B^0 of newdir/bar~B^0 left in tree.
		Q
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/4-stacked-conflict/.git/
[master (root-commit) c814ce4] original
 Author: A U Thor <author@example.com>
 4 files changed, 8 insertions(+)
 create mode 100644 foo
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 olddir/c
Switched to branch 'A'
rm 'foo'
[A b24e462] rm foo, olddir/ -> newdir/, + newdir/bar/file
 Author: A U Thor <author@example.com>
 5 files changed, 5 deletions(-)
 delete mode 100644 foo
 rename {olddir => newdir}/a (100%)
 rename {olddir => newdir}/b (100%)
 create mode 100644 newdir/bar/file
 rename {olddir => newdir}/c (100%)
Switched to branch 'B'
[B 250de5b] Modify foo & rename foo -> olddir/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename foo => olddir/bar (83%)
ok 15 - directory rename + rename/delete + modify/delete + directory/file conflict

expecting success of 4301.16 'usage: --trivial-merge is incompatible with --messages': 
		test_expect_code 128 git merge-tree --trivial-merge $opt side1 side2 side3
	
fatal: --trivial-merge is incompatible with all other options
ok 16 - usage: --trivial-merge is incompatible with --messages

expecting success of 4301.17 'usage: --trivial-merge is incompatible with --name-only': 
		test_expect_code 128 git merge-tree --trivial-merge $opt side1 side2 side3
	
fatal: --trivial-merge is incompatible with all other options
ok 17 - usage: --trivial-merge is incompatible with --name-only

expecting success of 4301.18 'usage: --trivial-merge is incompatible with --allow-unrelated-histories': 
		test_expect_code 128 git merge-tree --trivial-merge $opt side1 side2 side3
	
fatal: --trivial-merge is incompatible with all other options
ok 18 - usage: --trivial-merge is incompatible with --allow-unrelated-histories

expecting success of 4301.19 'usage: --trivial-merge is incompatible with --stdin': 
		test_expect_code 128 git merge-tree --trivial-merge $opt side1 side2 side3
	
fatal: --trivial-merge is incompatible with all other options
ok 19 - usage: --trivial-merge is incompatible with --stdin

expecting success of 4301.20 'usage: --trivial-merge is incompatible with --no-messages': 
		test_expect_code 128 git merge-tree --trivial-merge $opt side1 side2 side3
	
fatal: --trivial-merge is incompatible with all other options
ok 20 - usage: --trivial-merge is incompatible with --no-messages

expecting success of 4301.21 'Just the conflicted files without the messages': 
	test_expect_code 1 git merge-tree --write-tree --no-messages --name-only side1 side2 >out &&
	anonymize_hash out >actual &&

	test_write_lines HASH greeting whatever~side1 >expect &&

	test_cmp expect actual

ok 21 - Just the conflicted files without the messages

expecting success of 4301.22 'Check conflicted oids and modes without messages': 
	test_expect_code 1 git merge-tree --write-tree --no-messages side1 side2 >out &&
	anonymize_hash out >actual &&

	# Compare the basic output format
	q_to_tab >expect <<-\EOF &&
	HASH
	100644 HASH 1Qgreeting
	100644 HASH 2Qgreeting
	100644 HASH 3Qgreeting
	100644 HASH 1Qwhatever~side1
	100644 HASH 2Qwhatever~side1
	EOF

	test_cmp expect actual &&

	# Check the actual hashes against the `ls-files -u` output too
	tail -n +2 out | sed -e s/side1/HEAD/ >actual &&
	test_cmp conflicted-file-info actual

ok 22 - Check conflicted oids and modes without messages

expecting success of 4301.23 'NUL terminated conflicted file "lines"': 
	git checkout -b tweak1 side1 &&
	test_write_lines zero 1 2 3 4 5 6 >numbers &&
	git add numbers &&
	git mv numbers "Αυτά μου φαίνονται κινέζικα" &&
	git commit -m "Renamed numbers" &&

	test_expect_code 1 git merge-tree --write-tree -z tweak1 side2 >out &&
	echo >>out &&
	anonymize_hash out >actual &&

	# Expected results:
	#   "greeting" should merge with conflicts
	#   "whatever" has *both* a modify/delete and a file/directory conflict
	#   "Αυτά μου φαίνονται κινέζικα" should have a conflict
	echo HASH | lf_to_nul >expect &&

	q_to_tab <<-EOF | lf_to_nul >>expect &&
	100644 HASH 1Qgreeting
	100644 HASH 2Qgreeting
	100644 HASH 3Qgreeting
	100644 HASH 1Qwhatever~tweak1
	100644 HASH 2Qwhatever~tweak1
	100644 HASH 1QΑυτά μου φαίνονται κινέζικα
	100644 HASH 2QΑυτά μου φαίνονται κινέζικα
	100644 HASH 3QΑυτά μου φαίνονται κινέζικα

	EOF

	q_to_nul <<-EOF >>expect &&
	1QgreetingQAuto-mergingQAuto-merging greeting
	Q1QgreetingQCONFLICT (contents)QCONFLICT (content): Merge conflict in greeting
	Q2Qwhatever~tweak1QwhateverQCONFLICT (file/directory)QCONFLICT (file/directory): directory in the way of whatever from tweak1; moving it to whatever~tweak1 instead.
	Q1Qwhatever~tweak1QCONFLICT (modify/delete)QCONFLICT (modify/delete): whatever~tweak1 deleted in side2 and modified in tweak1.  Version tweak1 of whatever~tweak1 left in tree.
	Q1QΑυτά μου φαίνονται κινέζικαQAuto-mergingQAuto-merging Αυτά μου φαίνονται κινέζικα
	Q1QΑυτά μου φαίνονται κινέζικαQCONFLICT (contents)QCONFLICT (content): Merge conflict in Αυτά μου φαίνονται κινέζικα
	Q
	EOF

	test_cmp expect actual

Switched to a new branch 'tweak1'
[tweak1 07abc24] Renamed numbers
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename numbers => "\316\221\317\205\317\204\316\254 \316\274\316\277\317\205 \317\206\316\261\316\257\316\275\316\277\316\275\317\204\316\261\316\271 \316\272\316\271\316\275\316\255\316\266\316\271\316\272\316\261" (70%)
ok 23 - NUL terminated conflicted file "lines"

expecting success of 4301.24 'error out by default for unrelated histories': 
	test_expect_code 128 git merge-tree --write-tree side1 unrelated 2>error &&

	grep "refusing to merge unrelated histories" error

fatal: refusing to merge unrelated histories
ok 24 - error out by default for unrelated histories

expecting success of 4301.25 'can override merge of unrelated histories': 
	git merge-tree --write-tree --allow-unrelated-histories side1 unrelated >tree &&
	TREE=$(cat tree) &&

	git rev-parse side1:numbers side1:greeting side1:whatever unrelated:something-else >expect &&
	git rev-parse $TREE:numbers $TREE:greeting $TREE:whatever $TREE:something-else >actual &&

	test_cmp expect actual

ok 25 - can override merge of unrelated histories

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 4301.26 'merge-ort fails gracefully in a read-only repository': 
	git init --bare read-only &&
	git push read-only side1 side2 side3 &&
	test_when_finished "chmod -R u+w read-only" &&
	chmod -R a-w read-only &&
	test_must_fail git -C read-only merge-tree side1 side3 &&
	test_must_fail git -C read-only merge-tree side1 side2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4301-merge-tree-write-tree/read-only/
To read-only
 * [new branch]      side1 -> side1
 * [new branch]      side2 -> side2
 * [new branch]      side3 -> side3
error: insufficient permission for adding an object to repository database ./objects
fatal: failure to merge
error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add numbers to database
fatal: failure to merge
ok 26 - merge-ort fails gracefully in a read-only repository

expecting success of 4301.27 '--stdin with both a successful and a conflicted merge': 
	printf "side1 side3\nside1 side2" | git merge-tree --stdin >actual &&

	git checkout side1^0 &&
	git merge side3 &&

	printf "1\0" >expect &&
	git rev-parse HEAD^{tree} | lf_to_nul >>expect &&
	printf "\0" >>expect &&

	git checkout side1^0 &&
	test_must_fail git merge side2 &&
	sed s/HEAD/side1/ greeting >tmp &&
	mv tmp greeting &&
	git add -u &&
	git mv whatever~HEAD whatever~side1 &&

	printf "0\0" >>expect &&
	git write-tree | lf_to_nul >>expect &&

	cat <<-EOF | q_to_tab | lf_to_nul >>expect &&
	100644 $(git rev-parse side1~1:greeting) 1Qgreeting
	100644 $(git rev-parse side1:greeting) 2Qgreeting
	100644 $(git rev-parse side2:greeting) 3Qgreeting
	100644 $(git rev-parse side1~1:whatever) 1Qwhatever~side1
	100644 $(git rev-parse side1:whatever) 2Qwhatever~side1
	EOF

	q_to_nul <<-EOF >>expect &&
	Q1QgreetingQAuto-mergingQAuto-merging greeting
	Q1QgreetingQCONFLICT (contents)QCONFLICT (content): Merge conflict in greeting
	Q1QnumbersQAuto-mergingQAuto-merging numbers
	Q2Qwhatever~side1QwhateverQCONFLICT (file/directory)QCONFLICT (file/directory): directory in the way of whatever from side1; moving it to whatever~side1 instead.
	Q1Qwhatever~side1QCONFLICT (modify/delete)QCONFLICT (modify/delete): whatever~side1 deleted in side2 and modified in side1.  Version side1 of whatever~side1 left in tree.
	EOF

	printf "\0\0" >>expect &&

	test_cmp expect actual

Note: switching to 'side1^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ac3beb6 modify-stuff
Merge made by the 'ort' strategy.
 numbers => sequence | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename numbers => sequence (100%)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  8c8c3b1 Merge branch 'side3' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 8c8c3b1

HEAD is now at ac3beb6 modify-stuff
Auto-merging greeting
CONFLICT (content): Merge conflict in greeting
Auto-merging numbers
CONFLICT (file/directory): directory in the way of whatever from HEAD; moving it to whatever~HEAD instead.
CONFLICT (modify/delete): whatever~HEAD deleted in side2 and modified in HEAD.  Version HEAD of whatever~HEAD left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 27 - --stdin with both a successful and a conflicted merge

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5000-tar-tree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5000-tar-tree/.git/
expecting success of 5000.1 'setup': 
	test_oid_cache <<-EOF
	obj sha1:19f9c8273ec45a8938e6999cb59b3ff66739902a
	obj sha256:3c666f798798601571f5cec0adb57ce4aba8546875e7693177e0535f34d2c49b
	EOF

ok 1 - setup

expecting success of 5000.2 'populate workdir': 
	mkdir a &&
	echo simple textfile >a/a &&
	ten=0123456789 &&
	hundred="$ten$ten$ten$ten$ten$ten$ten$ten$ten$ten" &&
	echo long filename >"a/four$hundred" &&
	mkdir a/bin &&
	test-tool genrandom "frotz" 500000 >a/bin/sh &&
	printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 &&
	printf "A not substituted O" >a/substfile2 &&
	if test_have_prereq SYMLINKS
	then
		ln -s a a/l1
	else
		printf %s a >a/l1
	fi &&
	(
		p=long_path_to_a_file &&
		cd a &&
		for depth in 1 2 3 4 5
		do
			mkdir $p &&
			cd $p || exit 1
		done &&
		echo text >file_with_long_path
	) &&
	(cd a && find .) | sort >a.lst

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
ok 2 - populate workdir

expecting success of 5000.3 'add ignored file': echo ignore me >a/ignored &&
     mkdir .git/info &&
     echo ignored export-ignore >.git/info/attributes
ok 3 - add ignored file

expecting success of 5000.4 'add files to repository': 
	git add a &&
	GIT_COMMITTER_DATE="2005-05-27 22:00" git commit -m initial

[master (root-commit) dc2f90a] initial
 Author: A U Thor <author@example.com>
 8 files changed, 7 insertions(+)
 create mode 100644 a/a
 create mode 100644 a/bin/sh
 create mode 100644 a/four0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 create mode 100644 a/ignored
 create mode 120000 a/l1
 create mode 100644 a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path
 create mode 100644 a/substfile1
 create mode 100644 a/substfile2
ok 4 - add files to repository

expecting success of 5000.5 'setup export-subst': 
	echo "substfile?" export-subst >>.git/info/attributes &&
	git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \
		>a/substfile1

ok 5 - setup export-subst

expecting success of 5000.6 'create bare clone': 
	git clone --template= --bare . bare.git &&
	mkdir bare.git/info &&
	cp .git/info/attributes bare.git/info/attributes

Cloning into bare repository 'bare.git'...
done.
ok 6 - create bare clone

expecting success of 5000.7 'remove ignored file': 
	rm a/ignored

ok 7 - remove ignored file

expecting success of 5000.8 'git archive': 
	git archive HEAD >b.tar

ok 8 - git archive

expecting success of 5000.9 ' extract tar archive': 
		(mkdir $dir && cd $dir && "$TAR" xf -) <$tarfile
	
ok 9 -  extract tar archive

checking prerequisite: TAR_NEEDS_PAX_FALLBACK

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TAR_NEEDS_PAX_FALLBACK" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TAR_NEEDS_PAX_FALLBACK" &&
	(
		mkdir pax &&
		cd pax &&
		"$TAR" xf "$TEST_DIRECTORY"/t5000/pax.tar &&
		test -f PaxHeaders.1791/file
	)

)
prerequisite TAR_NEEDS_PAX_FALLBACK not satisfied
ok 10 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)

expecting success of 5000.11 ' validate filenames': 
		(cd ${dir_with_prefix}a && find .) | sort >$listfile &&
		test_cmp a.lst $listfile
	
ok 11 -  validate filenames

expecting success of 5000.12 ' validate file contents': 
		diff -r a ${dir_with_prefix}a
	
ok 12 -  validate file contents

expecting success of 5000.13 'git archive --prefix=prefix/': 
	git archive --prefix=prefix/ HEAD >with_prefix.tar

ok 13 - git archive --prefix=prefix/

expecting success of 5000.14 ' extract tar archive': 
		(mkdir $dir && cd $dir && "$TAR" xf -) <$tarfile
	
ok 14 -  extract tar archive

ok 15 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)

expecting success of 5000.16 ' validate filenames': 
		(cd ${dir_with_prefix}a && find .) | sort >$listfile &&
		test_cmp a.lst $listfile
	
ok 16 -  validate filenames

expecting success of 5000.17 ' validate file contents': 
		diff -r a ${dir_with_prefix}a
	
ok 17 -  validate file contents

expecting success of 5000.18 'git-archive --prefix=olde-': 
	git archive --prefix=olde- HEAD >with_olde-prefix.tar

ok 18 - git-archive --prefix=olde-

expecting success of 5000.19 ' extract tar archive': 
		(mkdir $dir && cd $dir && "$TAR" xf -) <$tarfile
	
ok 19 -  extract tar archive

ok 20 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)

expecting success of 5000.21 ' validate filenames': 
		(cd ${dir_with_prefix}a && find .) | sort >$listfile &&
		test_cmp a.lst $listfile
	
ok 21 -  validate filenames

expecting success of 5000.22 ' validate file contents': 
		diff -r a ${dir_with_prefix}a
	
ok 22 -  validate file contents

expecting success of 5000.23 'git archive --add-file': 
	echo untracked >untracked &&
	git archive --add-file=untracked HEAD >with_untracked.tar

ok 23 - git archive --add-file

expecting success of 5000.24 ' extract tar archive': 
		(mkdir $dir && cd $dir && "$TAR" xf -) <$tarfile
	
ok 24 -  extract tar archive

ok 25 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)

expecting success of 5000.26 ' validate filenames': 
		(cd ${dir_with_prefix}a && find .) | sort >$listfile &&
		test_cmp a.lst $listfile
	
ok 26 -  validate filenames

expecting success of 5000.27 ' validate file contents': 
		diff -r a ${dir_with_prefix}a
	
ok 27 -  validate file contents

expecting success of 5000.28 ' validate extra file untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 28 -  validate extra file untracked

expecting success of 5000.29 'git archive --add-file twice': 
	echo untracked >untracked &&
	git archive --prefix=one/ --add-file=untracked \
		--prefix=two/ --add-file=untracked \
		--prefix= HEAD >with_untracked2.tar

ok 29 - git archive --add-file twice

expecting success of 5000.30 ' extract tar archive': 
		(mkdir $dir && cd $dir && "$TAR" xf -) <$tarfile
	
ok 30 -  extract tar archive

ok 31 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)

expecting success of 5000.32 ' validate filenames': 
		(cd ${dir_with_prefix}a && find .) | sort >$listfile &&
		test_cmp a.lst $listfile
	
ok 32 -  validate filenames

expecting success of 5000.33 ' validate file contents': 
		diff -r a ${dir_with_prefix}a
	
ok 33 -  validate file contents

expecting success of 5000.34 ' validate extra file one/untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 34 -  validate extra file one/untracked

expecting success of 5000.35 ' validate extra file two/untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 35 -  validate extra file two/untracked

expecting success of 5000.36 'git archive on large files': 
	test_config core.bigfilethreshold 1 &&
	git archive HEAD >b3.tar &&
	test_cmp_bin b.tar b3.tar

ok 36 - git archive on large files

expecting success of 5000.37 'git archive in a bare repo': 
	git --git-dir bare.git archive HEAD >b3.tar

ok 37 - git archive in a bare repo

expecting success of 5000.38 'git archive vs. the same in a bare repo': 
	test_cmp_bin b.tar b3.tar

ok 38 - git archive vs. the same in a bare repo

expecting success of 5000.39 'git archive with --output': 
	git archive --output=b4.tar HEAD &&
	test_cmp_bin b.tar b4.tar

ok 39 - git archive with --output

expecting success of 5000.40 'git archive --remote': 
	git archive --remote=. HEAD >b5.tar &&
	test_cmp_bin b.tar b5.tar

ok 40 - git archive --remote

expecting success of 5000.41 'git archive --remote with configured remote': 
	git config remote.foo.url . &&
	(
		cd a &&
		git archive --remote=foo --output=../b5-nick.tar HEAD
	) &&
	test_cmp_bin b.tar b5-nick.tar

ok 41 - git archive --remote with configured remote

expecting success of 5000.42 'validate file modification time': 
	mkdir extract &&
	"$TAR" xf b.tar -C extract a/a &&
	test-tool chmtime --get extract/a/a >b.mtime &&
	echo "1117231200" >expected.mtime &&
	test_cmp expected.mtime b.mtime

ok 42 - validate file modification time

expecting success of 5000.43 'git get-tar-commit-id': 
	git get-tar-commit-id <b.tar >actual &&
	git rev-parse HEAD >expect &&
	test_cmp expect actual

ok 43 - git get-tar-commit-id

expecting success of 5000.44 'git archive with --output, override inferred format': 
	git archive --format=tar --output=d4.zip HEAD &&
	test_cmp_bin b.tar d4.zip

ok 44 - git archive with --output, override inferred format

checking prerequisite: GZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GZIP" &&gzip --version
)
gzip 1.12
Copyright (C) 2018 Free Software Foundation, Inc.
Copyright (C) 1993 Jean-loup Gailly.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <https://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jean-loup Gailly.
prerequisite GZIP ok
expecting success of 5000.45 'git archive with --output and --remote creates .tgz': 
	git archive --output=d5.tgz --remote=. HEAD &&
	gzip -d -c <d5.tgz >d5.tar &&
	test_cmp_bin b.tar d5.tar

ok 45 - git archive with --output and --remote creates .tgz

expecting success of 5000.46 'git archive --list outside of a git repo': 
	nongit git archive --list

tar
tgz
tar.gz
zip
ok 46 - git archive --list outside of a git repo

expecting success of 5000.47 'git archive --remote outside of a git repo': 
	git archive HEAD >expect.tar &&
	nongit git archive --remote="$PWD" HEAD >actual.tar &&
	test_cmp_bin expect.tar actual.tar

ok 47 - git archive --remote outside of a git repo

expecting success of 5000.48 'clients cannot access unreachable commits': 
	test_commit unreachable &&
	sha1=$(git rev-parse HEAD) &&
	git reset --hard HEAD^ &&
	git archive $sha1 >remote.tar &&
	test_must_fail git archive --remote=. $sha1 >remote.tar

[master cef8ba5] unreachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unreachable.t
HEAD is now at dc2f90a initial
remote: fatal: no such ref: cef8ba526402ddbeff4ef66cc84aa75a176faf89        
fatal: sent error to the client: git upload-archive: archiver died with error
remote: git upload-archive: archiver died with error
ok 48 - clients cannot access unreachable commits

expecting success of 5000.49 'upload-archive can allow unreachable commits': 
	test_commit unreachable1 &&
	sha1=$(git rev-parse HEAD) &&
	git reset --hard HEAD^ &&
	git archive $sha1 >remote.tar &&
	test_config uploadarchive.allowUnreachable true &&
	git archive --remote=. $sha1 >remote.tar

[master d12b4a4] unreachable1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unreachable1.t
HEAD is now at dc2f90a initial
ok 49 - upload-archive can allow unreachable commits

expecting success of 5000.50 'setup tar filters': 
	git config tar.tar.foo.command "tr ab ba" &&
	git config tar.bar.command "tr ab ba" &&
	git config tar.bar.remote true &&
	git config tar.invalid baz

ok 50 - setup tar filters

expecting success of 5000.51 'archive --list mentions user filter': 
	git archive --list >output &&
	grep "^tar\.foo\$" output &&
	grep "^bar\$" output

tar.foo
bar
ok 51 - archive --list mentions user filter

expecting success of 5000.52 'archive --list shows only enabled remote filters': 
	git archive --list --remote=. >output &&
	! grep "^tar\.foo\$" output &&
	grep "^bar\$" output

bar
ok 52 - archive --list shows only enabled remote filters

expecting success of 5000.53 'invoke tar filter by format': 
	git archive --format=tar.foo HEAD >config.tar.foo &&
	tr ab ba <config.tar.foo >config.tar &&
	test_cmp_bin b.tar config.tar &&
	git archive --format=bar HEAD >config.bar &&
	tr ab ba <config.bar >config.tar &&
	test_cmp_bin b.tar config.tar

ok 53 - invoke tar filter by format

expecting success of 5000.54 'invoke tar filter by extension': 
	git archive -o config-implicit.tar.foo HEAD &&
	test_cmp_bin config.tar.foo config-implicit.tar.foo &&
	git archive -o config-implicit.bar HEAD &&
	test_cmp_bin config.tar.foo config-implicit.bar

ok 54 - invoke tar filter by extension

expecting success of 5000.55 'default output format remains tar': 
	git archive -o config-implicit.baz HEAD &&
	test_cmp_bin b.tar config-implicit.baz

ok 55 - default output format remains tar

expecting success of 5000.56 'extension matching requires dot': 
	git archive -o config-implicittar.foo HEAD &&
	test_cmp_bin b.tar config-implicittar.foo

ok 56 - extension matching requires dot

expecting success of 5000.57 'only enabled filters are available remotely': 
	test_must_fail git archive --remote=. --format=tar.foo HEAD \
		>remote.tar.foo &&
	git archive --remote=. --format=bar >remote.bar HEAD &&
	test_cmp_bin remote.bar config.bar

remote: fatal: Unknown archive format 'tar.foo'        
fatal: sent error to the client: git upload-archive: archiver died with error
remote: git upload-archive: archiver died with error
ok 57 - only enabled filters are available remotely

expecting success of 5000.58 'invalid filter is reported only once': 
	test_must_fail git -c tar.invalid.command= archive --format=invalid \
		HEAD >out 2>err &&
	test_must_be_empty out &&
	test_line_count = 1 err

ok 58 - invalid filter is reported only once

expecting success of 5000.59 'git archive --format=tgz': 
	git archive --format=tgz HEAD >j.tgz

ok 59 - git archive --format=tgz

expecting success of 5000.60 'git archive --format=tar.gz': 
	git archive --format=tar.gz HEAD >j1.tar.gz &&
	test_cmp_bin j.tgz j1.tar.gz

ok 60 - git archive --format=tar.gz

expecting success of 5000.61 'infer tgz from .tgz filename': 
	git archive --output=j2.tgz HEAD &&
	test_cmp_bin j.tgz j2.tgz

ok 61 - infer tgz from .tgz filename

expecting success of 5000.62 'infer tgz from .tar.gz filename': 
	git archive --output=j3.tar.gz HEAD &&
	test_cmp_bin j.tgz j3.tar.gz

ok 62 - infer tgz from .tar.gz filename

expecting success of 5000.63 'extract tgz file': 
	gzip -d -c <j.tgz >j.tar &&
	test_cmp_bin b.tar j.tar

ok 63 - extract tgz file

expecting success of 5000.64 'remote tar.gz is allowed by default': 
	git archive --remote=. --format=tar.gz HEAD >remote.tar.gz &&
	test_cmp_bin j.tgz remote.tar.gz

ok 64 - remote tar.gz is allowed by default

expecting success of 5000.65 'remote tar.gz can be disabled': 
	git config tar.tar.gz.remote false &&
	test_must_fail git archive --remote=. --format=tar.gz HEAD \
		>remote.tar.gz

remote: fatal: Unknown archive format 'tar.gz'        
fatal: sent error to the client: git upload-archive: archiver died with error
remote: git upload-archive: archiver died with error
ok 65 - remote tar.gz can be disabled

expecting success of 5000.66 'git archive --format=tgz (external gzip)': 
	test_config tar.tgz.command "gzip -cn" &&
	git archive --format=tgz HEAD >external_gzip.tgz

ok 66 - git archive --format=tgz (external gzip)

expecting success of 5000.67 'git archive --format=tar.gz (external gzip)': 
	test_config tar.tar.gz.command "gzip -cn" &&
	git archive --format=tar.gz HEAD >external_gzip.tar.gz &&
	test_cmp_bin external_gzip.tgz external_gzip.tar.gz

ok 67 - git archive --format=tar.gz (external gzip)

expecting success of 5000.68 'extract tgz file (external gzip)': 
	gzip -d -c <external_gzip.tgz >external_gzip.tar &&
	test_cmp_bin b.tar external_gzip.tar

ok 68 - extract tgz file (external gzip)

expecting success of 5000.69 'archive and :(glob)': 
	git archive -v HEAD -- ":(glob)**/sh" >/dev/null 2>actual &&
	cat >expect <<EOF &&
a/
a/bin/
a/bin/sh
EOF
	test_cmp expect actual

ok 69 - archive and :(glob)

expecting success of 5000.70 'catch non-matching pathspec': 
	test_must_fail git archive -v HEAD -- "*.abc" >/dev/null

fatal: pathspec '*.abc' did not match any files
ok 70 - catch non-matching pathspec

checking prerequisite: LONG_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
	test 8 -le "$(build_option sizeof-long)"

)
prerequisite LONG_IS_64BIT not satisfied
ok 71 # skip set up repository with huge blob (missing LONG_IS_64BIT)

ok 72 # skip generate tar with huge size (missing LONG_IS_64BIT)

checking prerequisite: TAR_HUGE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TAR_HUGE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TAR_HUGE" &&
	echo "68719476737 4147" >expect &&
	tar_info "$TEST_DIRECTORY"/t5000/huge-and-future.tar >actual &&
	test_cmp expect actual

)
tar: Extended header mtime=68719476737 is out of range -2147483648..2147483647
tar: Extended header atime=68719476737 is out of range -2147483648..2147483647
tar: rmtlseek not stopped at a record boundary
tar: Error is not recoverable: exiting now
--- expect	2022-12-28 07:46:36.922244829 +0000
+++ actual	2022-12-28 07:46:36.942245564 +0000
@@ -1 +1 @@
-68719476737 4147
+68719476737 1970
prerequisite TAR_HUGE not satisfied
ok 73 # skip system tar can read our huge size (missing LONG_IS_64BIT,TAR_HUGE of TAR_HUGE,LONG_IS_64BIT)

checking prerequisite: TIME_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&test-tool date is64bit
)
prerequisite TIME_IS_64BIT ok
expecting success of 5000.74 'set up repository with far-future (2^34 - 1) commit': 
	rm -f .git/index &&
	echo foo >file &&
	git add file &&
	GIT_COMMITTER_DATE="@17179869183 +0000" \
		git commit -m "tempori parendum"

[master fa9ffb0] tempori parendum
 Author: A U Thor <author@example.com>
 9 files changed, 1 insertion(+), 7 deletions(-)
 delete mode 100644 a/a
 delete mode 100644 a/bin/sh
 delete mode 100644 a/four0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 delete mode 100644 a/ignored
 delete mode 120000 a/l1
 delete mode 100644 a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path
 delete mode 100644 a/substfile1
 delete mode 100644 a/substfile2
 create mode 100644 file
ok 74 - set up repository with far-future (2^34 - 1) commit

expecting success of 5000.75 'generate tar with far-future mtime': 
	git archive HEAD >future.tar

ok 75 - generate tar with far-future mtime

checking prerequisite: TIME_T_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&test-tool date time_t-is64bit
)
prerequisite TIME_T_IS_64BIT not satisfied
ok 76 # skip system tar can read our future mtime (missing TIME_T_IS_64BIT,TAR_HUGE of TAR_HUGE,TIME_IS_64BIT,TIME_T_IS_64BIT)

expecting success of 5000.77 'set up repository with far-far-future (2^36 + 1) commit': 
	rm -f .git/index &&
	echo content >file &&
	git add file &&
	GIT_TEST_COMMIT_GRAPH=0 GIT_COMMITTER_DATE="@68719476737 +0000" \
		git commit -m "tempori parendum"

[master 2781d1f] tempori parendum
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 77 - set up repository with far-far-future (2^36 + 1) commit

expecting success of 5000.78 'generate tar with far-far-future mtime': 
	git archive HEAD >future.tar

ok 78 - generate tar with far-far-future mtime

ok 79 # skip system tar can read our future mtime (missing TIME_T_IS_64BIT,TAR_HUGE of TAR_HUGE,TIME_IS_64BIT,TIME_T_IS_64BIT)

# passed all 79 test(s)
1..79
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5002-archive-attr-pattern.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5002-archive-attr-pattern/.git/
expecting success of 5002.1 'setup': 
	echo ignored >ignored &&
	mkdir .git/info &&
	echo ignored export-ignore >>.git/info/attributes &&
	git add ignored &&

	mkdir not-ignored-dir &&
	echo ignored-in-tree >not-ignored-dir/ignored &&
	echo not-ignored-in-tree >not-ignored-dir/ignored-only-if-dir &&
	git add not-ignored-dir &&

	mkdir ignored-only-if-dir &&
	echo ignored by ignored dir >ignored-only-if-dir/ignored-by-ignored-dir &&
	echo ignored-only-if-dir/ export-ignore >>.git/info/attributes &&
	git add ignored-only-if-dir &&

	mkdir -p ignored-without-slash &&
	echo "ignored without slash" >ignored-without-slash/foo &&
	git add ignored-without-slash/foo &&
	echo "ignored-without-slash export-ignore" >>.git/info/attributes &&

	mkdir -p wildcard-without-slash &&
	echo "ignored without slash" >wildcard-without-slash/foo &&
	git add wildcard-without-slash/foo &&
	echo "wild*-without-slash export-ignore" >>.git/info/attributes &&

	mkdir -p deep/and/slashless &&
	echo "ignored without slash" >deep/and/slashless/foo &&
	git add deep/and/slashless/foo &&
	echo "deep/and/slashless export-ignore" >>.git/info/attributes &&

	mkdir -p deep/with/wildcard &&
	echo "ignored without slash" >deep/with/wildcard/foo &&
	git add deep/with/wildcard/foo &&
	echo "deep/*t*/wildcard export-ignore" >>.git/info/attributes &&

	mkdir -p one-level-lower/two-levels-lower/ignored-only-if-dir &&
	echo ignored by ignored dir >one-level-lower/two-levels-lower/ignored-only-if-dir/ignored-by-ignored-dir &&
	git add one-level-lower &&

	git commit -m. &&

	git clone --template= --bare . bare &&
	mkdir bare/info &&
	cp .git/info/attributes bare/info/attributes

[master (root-commit) 47c5c5b] .
 Author: A U Thor <author@example.com>
 9 files changed, 9 insertions(+)
 create mode 100644 deep/and/slashless/foo
 create mode 100644 deep/with/wildcard/foo
 create mode 100644 ignored
 create mode 100644 ignored-only-if-dir/ignored-by-ignored-dir
 create mode 100644 ignored-without-slash/foo
 create mode 100644 not-ignored-dir/ignored
 create mode 100644 not-ignored-dir/ignored-only-if-dir
 create mode 100644 one-level-lower/two-levels-lower/ignored-only-if-dir/ignored-by-ignored-dir
 create mode 100644 wildcard-without-slash/foo
Cloning into bare repository 'bare'...
done.
ok 1 - setup

expecting success of 5002.2 'git archive': 
	git archive HEAD >archive.tar &&
	(mkdir archive && cd archive && "$TAR" xf -) <archive.tar

ok 2 - git archive

expecting success of 5002.3 ' archive/ignored does not exist': test ! -e archive/ignored
ok 3 -  archive/ignored does not exist

expecting success of 5002.4 ' archive/not-ignored-dir/ignored does not exist': test ! -e archive/not-ignored-dir/ignored
ok 4 -  archive/not-ignored-dir/ignored does not exist

expecting success of 5002.5 ' archive/not-ignored-dir/ignored-only-if-dir exists': test -e archive/not-ignored-dir/ignored-only-if-dir
ok 5 -  archive/not-ignored-dir/ignored-only-if-dir exists

expecting success of 5002.6 ' archive/not-ignored-dir/ exists': test -e archive/not-ignored-dir/
ok 6 -  archive/not-ignored-dir/ exists

expecting success of 5002.7 ' archive/ignored-only-if-dir/ does not exist': test ! -e archive/ignored-only-if-dir/
ok 7 -  archive/ignored-only-if-dir/ does not exist

expecting success of 5002.8 ' archive/ignored-ony-if-dir/ignored-by-ignored-dir does not exist': test ! -e archive/ignored-ony-if-dir/ignored-by-ignored-dir
ok 8 -  archive/ignored-ony-if-dir/ignored-by-ignored-dir does not exist

expecting success of 5002.9 ' archive/ignored-without-slash/ does not exist': test ! -e archive/ignored-without-slash/
ok 9 -  archive/ignored-without-slash/ does not exist

expecting success of 5002.10 ' archive/ignored-without-slash/foo does not exist': test ! -e archive/ignored-without-slash/foo
ok 10 -  archive/ignored-without-slash/foo does not exist

expecting success of 5002.11 ' archive/wildcard-without-slash/ does not exist': test ! -e archive/wildcard-without-slash/
ok 11 -  archive/wildcard-without-slash/ does not exist

expecting success of 5002.12 ' archive/wildcard-without-slash/foo does not exist': test ! -e archive/wildcard-without-slash/foo
ok 12 -  archive/wildcard-without-slash/foo does not exist

expecting success of 5002.13 ' archive/deep/and/slashless/ does not exist': test ! -e archive/deep/and/slashless/
ok 13 -  archive/deep/and/slashless/ does not exist

expecting success of 5002.14 ' archive/deep/and/slashless/foo does not exist': test ! -e archive/deep/and/slashless/foo
ok 14 -  archive/deep/and/slashless/foo does not exist

expecting success of 5002.15 ' archive/deep/with/wildcard/ does not exist': test ! -e archive/deep/with/wildcard/
ok 15 -  archive/deep/with/wildcard/ does not exist

expecting success of 5002.16 ' archive/deep/with/wildcard/foo does not exist': test ! -e archive/deep/with/wildcard/foo
ok 16 -  archive/deep/with/wildcard/foo does not exist

expecting success of 5002.17 ' archive/one-level-lower/ does not exist': test ! -e archive/one-level-lower/
ok 17 -  archive/one-level-lower/ does not exist

expecting success of 5002.18 ' archive/one-level-lower/two-levels-lower/ignored-only-if-dir/ does not exist': test ! -e archive/one-level-lower/two-levels-lower/ignored-only-if-dir/
ok 18 -  archive/one-level-lower/two-levels-lower/ignored-only-if-dir/ does not exist

expecting success of 5002.19 ' archive/one-level-lower/two-levels-lower/ignored-ony-if-dir/ignored-by-ignored-dir does not exist': test ! -e archive/one-level-lower/two-levels-lower/ignored-ony-if-dir/ignored-by-ignored-dir
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
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5001-archive-attr.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5001-archive-attr/.git/
expecting success of 5001.1 'setup': 
	echo ignored >ignored &&
	mkdir .git/info &&
	echo ignored export-ignore >>.git/info/attributes &&
	git add ignored &&

	echo ignored by tree >ignored-by-tree &&
	echo ignored-by-tree export-ignore >.gitattributes &&
	mkdir ignored-by-tree.d &&
	>ignored-by-tree.d/file &&
	echo ignored-by-tree.d export-ignore >>.gitattributes &&
	git add ignored-by-tree ignored-by-tree.d .gitattributes &&

	echo ignored by worktree >ignored-by-worktree &&
	echo ignored-by-worktree export-ignore >.gitattributes &&
	git add ignored-by-worktree &&

	mkdir excluded-by-pathspec.d &&
	>excluded-by-pathspec.d/file &&
	git add excluded-by-pathspec.d &&

	printf "A\$Format:%s\$O" "$SUBSTFORMAT" >nosubstfile &&
	printf "A\$Format:%s\$O" "$SUBSTFORMAT" >substfile1 &&
	printf "A not substituted O" >substfile2 &&
	echo "substfile?" export-subst >>.git/info/attributes &&
	git add nosubstfile substfile1 substfile2 &&

	git commit -m. &&

	git clone --template= --bare . bare &&
	mkdir bare/info &&
	cp .git/info/attributes bare/info/attributes

[master (root-commit) 660d17e] .
 Author: A U Thor <author@example.com>
 9 files changed, 8 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 excluded-by-pathspec.d/file
 create mode 100644 ignored
 create mode 100644 ignored-by-tree
 create mode 100644 ignored-by-tree.d/file
 create mode 100644 ignored-by-worktree
 create mode 100644 nosubstfile
 create mode 100644 substfile1
 create mode 100644 substfile2
Cloning into bare repository 'bare'...
done.
ok 1 - setup

expecting success of 5001.2 'git archive': 
	git archive HEAD >archive.tar &&
	(mkdir archive && cd archive && "$TAR" xf -) <archive.tar

ok 2 - git archive

expecting success of 5001.3 ' archive/ignored does not exist': test ! -e archive/ignored
ok 3 -  archive/ignored does not exist

expecting success of 5001.4 ' archive/ignored-by-tree does not exist': test ! -e archive/ignored-by-tree
ok 4 -  archive/ignored-by-tree does not exist

expecting success of 5001.5 ' archive/ignored-by-tree.d does not exist': test ! -e archive/ignored-by-tree.d
ok 5 -  archive/ignored-by-tree.d does not exist

expecting success of 5001.6 ' archive/ignored-by-tree.d/file does not exist': test ! -e archive/ignored-by-tree.d/file
ok 6 -  archive/ignored-by-tree.d/file does not exist

expecting success of 5001.7 ' archive/ignored-by-worktree exists': test -e archive/ignored-by-worktree
ok 7 -  archive/ignored-by-worktree exists

expecting success of 5001.8 ' archive/excluded-by-pathspec.d exists': test -e archive/excluded-by-pathspec.d
ok 8 -  archive/excluded-by-pathspec.d exists

expecting success of 5001.9 ' archive/excluded-by-pathspec.d/file exists': test -e archive/excluded-by-pathspec.d/file
ok 9 -  archive/excluded-by-pathspec.d/file exists

expecting success of 5001.10 'git archive with pathspec': 
	git archive HEAD ":!excluded-by-pathspec.d" >archive-pathspec.tar &&
	extract_tar_to_dir archive-pathspec

ok 10 - git archive with pathspec

expecting success of 5001.11 ' archive-pathspec/ignored does not exist': test ! -e archive-pathspec/ignored
ok 11 -  archive-pathspec/ignored does not exist

expecting success of 5001.12 ' archive-pathspec/ignored-by-tree does not exist': test ! -e archive-pathspec/ignored-by-tree
ok 12 -  archive-pathspec/ignored-by-tree does not exist

expecting success of 5001.13 ' archive-pathspec/ignored-by-tree.d does not exist': test ! -e archive-pathspec/ignored-by-tree.d
ok 13 -  archive-pathspec/ignored-by-tree.d does not exist

expecting success of 5001.14 ' archive-pathspec/ignored-by-tree.d/file does not exist': test ! -e archive-pathspec/ignored-by-tree.d/file
ok 14 -  archive-pathspec/ignored-by-tree.d/file does not exist

expecting success of 5001.15 ' archive-pathspec/ignored-by-worktree exists': test -e archive-pathspec/ignored-by-worktree
ok 15 -  archive-pathspec/ignored-by-worktree exists

expecting success of 5001.16 ' archive-pathspec/excluded-by-pathspec.d does not exist': test ! -e archive-pathspec/excluded-by-pathspec.d
ok 16 -  archive-pathspec/excluded-by-pathspec.d does not exist

expecting success of 5001.17 ' archive-pathspec/excluded-by-pathspec.d/file does not exist': test ! -e archive-pathspec/excluded-by-pathspec.d/file
ok 17 -  archive-pathspec/excluded-by-pathspec.d/file does not exist

expecting success of 5001.18 'git archive with wildcard pathspec': 
	git archive HEAD ":!excluded-by-p*" >archive-pathspec-wildcard.tar &&
	extract_tar_to_dir archive-pathspec-wildcard

ok 18 - git archive with wildcard pathspec

expecting success of 5001.19 ' archive-pathspec-wildcard/ignored does not exist': test ! -e archive-pathspec-wildcard/ignored
ok 19 -  archive-pathspec-wildcard/ignored does not exist

expecting success of 5001.20 ' archive-pathspec-wildcard/ignored-by-tree does not exist': test ! -e archive-pathspec-wildcard/ignored-by-tree
ok 20 -  archive-pathspec-wildcard/ignored-by-tree does not exist

expecting success of 5001.21 ' archive-pathspec-wildcard/ignored-by-tree.d does not exist': test ! -e archive-pathspec-wildcard/ignored-by-tree.d
ok 21 -  archive-pathspec-wildcard/ignored-by-tree.d does not exist

expecting success of 5001.22 ' archive-pathspec-wildcard/ignored-by-tree.d/file does not exist': test ! -e archive-pathspec-wildcard/ignored-by-tree.d/file
ok 22 -  archive-pathspec-wildcard/ignored-by-tree.d/file does not exist

expecting success of 5001.23 ' archive-pathspec-wildcard/ignored-by-worktree exists': test -e archive-pathspec-wildcard/ignored-by-worktree
ok 23 -  archive-pathspec-wildcard/ignored-by-worktree exists

expecting success of 5001.24 ' archive-pathspec-wildcard/excluded-by-pathspec.d does not exist': test ! -e archive-pathspec-wildcard/excluded-by-pathspec.d
ok 24 -  archive-pathspec-wildcard/excluded-by-pathspec.d does not exist

expecting success of 5001.25 ' archive-pathspec-wildcard/excluded-by-pathspec.d/file does not exist': test ! -e archive-pathspec-wildcard/excluded-by-pathspec.d/file
ok 25 -  archive-pathspec-wildcard/excluded-by-pathspec.d/file does not exist

expecting success of 5001.26 'git archive with worktree attributes': 
	git archive --worktree-attributes HEAD >worktree.tar &&
	(mkdir worktree && cd worktree && "$TAR" xf -) <worktree.tar

ok 26 - git archive with worktree attributes

expecting success of 5001.27 ' worktree/ignored does not exist': test ! -e worktree/ignored
ok 27 -  worktree/ignored does not exist

expecting success of 5001.28 ' worktree/ignored-by-tree exists': test -e worktree/ignored-by-tree
ok 28 -  worktree/ignored-by-tree exists

expecting success of 5001.29 ' worktree/ignored-by-worktree does not exist': test ! -e worktree/ignored-by-worktree
ok 29 -  worktree/ignored-by-worktree does not exist

expecting success of 5001.30 'git archive --worktree-attributes option': 
	git archive --worktree-attributes --worktree-attributes HEAD >worktree.tar &&
	(mkdir worktree2 && cd worktree2 && "$TAR" xf -) <worktree.tar

ok 30 - git archive --worktree-attributes option

expecting success of 5001.31 ' worktree2/ignored does not exist': test ! -e worktree2/ignored
ok 31 -  worktree2/ignored does not exist

expecting success of 5001.32 ' worktree2/ignored-by-tree exists': test -e worktree2/ignored-by-tree
ok 32 -  worktree2/ignored-by-tree exists

expecting success of 5001.33 ' worktree2/ignored-by-worktree does not exist': test ! -e worktree2/ignored-by-worktree
ok 33 -  worktree2/ignored-by-worktree does not exist

expecting success of 5001.34 'git archive vs. bare': 
	(cd bare && git archive HEAD) >bare-archive.tar &&
	test_cmp_bin archive.tar bare-archive.tar

ok 34 - git archive vs. bare

expecting success of 5001.35 'git archive with worktree attributes, bare': 
	(cd bare && git archive --worktree-attributes HEAD) >bare-worktree.tar &&
	(mkdir bare-worktree && cd bare-worktree && "$TAR" xf -) <bare-worktree.tar

ok 35 - git archive with worktree attributes, bare

expecting success of 5001.36 ' bare-worktree/ignored does not exist': test ! -e bare-worktree/ignored
ok 36 -  bare-worktree/ignored does not exist

expecting success of 5001.37 ' bare-worktree/ignored-by-tree exists': test -e bare-worktree/ignored-by-tree
ok 37 -  bare-worktree/ignored-by-tree exists

expecting success of 5001.38 ' bare-worktree/ignored-by-worktree exists': test -e bare-worktree/ignored-by-worktree
ok 38 -  bare-worktree/ignored-by-worktree exists

expecting success of 5001.39 'export-subst': 
	git log "--pretty=format:A${SUBSTFORMAT}O" HEAD >substfile1.expected &&
	test_cmp nosubstfile archive/nosubstfile &&
	test_cmp substfile1.expected archive/substfile1 &&
	test_cmp substfile2 archive/substfile2

ok 39 - export-subst

expecting success of 5001.40 'export-subst expands %(describe) once': 
	echo "\$Format:%(describe)\$" >substfile3 &&
	echo "\$Format:%(describe)\$" >>substfile3 &&
	echo "\$Format:%(describe)${LF}%(describe)\$" >substfile4 &&
	git add substfile[34] &&
	git commit -m export-subst-describe &&
	git tag -m export-subst-describe export-subst-describe &&
	git archive HEAD >archive-describe.tar &&
	extract_tar_to_dir archive-describe &&
	desc=$(git describe) &&
	grep -F "$desc" archive-describe/substfile[34] >substituted &&
	test_line_count = 1 substituted

[master b2dd354] export-subst-describe
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 substfile3
 create mode 100644 substfile4
ok 40 - export-subst expands %(describe) once

# passed all 40 test(s)
1..40
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5003-archive-zip.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5003-archive-zip/.git/
expecting success of 5003.1 'populate workdir': mkdir a &&
     echo simple textfile >a/a &&
     mkdir a/bin &&
     cp /bin/sh a/bin &&
     printf "text\r"	>a/text.cr &&
     printf "text\r\n"	>a/text.crlf &&
     printf "text\n"	>a/text.lf &&
     printf "text\r"	>a/nodiff.cr &&
     printf "text\r\n"	>a/nodiff.crlf &&
     printf "text\n"	>a/nodiff.lf &&
     printf "text\r"	>a/custom.cr &&
     printf "text\r\n"	>a/custom.crlf &&
     printf "text\n"	>a/custom.lf &&
     printf "\0\r"	>a/binary.cr &&
     printf "\0\r\n"	>a/binary.crlf &&
     printf "\0\n"	>a/binary.lf &&
     printf "\0\r"	>a/diff.cr &&
     printf "\0\r\n"	>a/diff.crlf &&
     printf "\0\n"	>a/diff.lf &&
     printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 &&
     printf "A not substituted O" >a/substfile2 &&
     (p=long_path_to_a_file && cd a &&
      for depth in 1 2 3 4 5; do mkdir $p && cd $p || exit 1; done &&
      echo text >file_with_long_path)

ok 1 - populate workdir

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
checking prerequisite: UNZIP_SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_SYMLINKS" &&
	"$GIT_UNZIP" "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip &&
	test -h symlink

)
Archive:  /<<PKGBUILDDIR>>/t/t5003/infozip-symlinks.zip
 extracting: textfile                
    linking: symlink                 -> textfile 
finishing deferred symbolic links:
  symlink                -> textfile
prerequisite UNZIP_SYMLINKS ok
expecting success of 5003.2 'add symlink': 
	ln -s a a/symlink_to_a

ok 2 - add symlink

expecting success of 5003.3 'prepare file list': 
	(cd a && find .) | sort >a.lst

ok 3 - prepare file list

expecting success of 5003.4 'add ignored file': echo ignore me >a/ignored &&
     mkdir .git/info &&
     echo ignored export-ignore >.git/info/attributes
ok 4 - add ignored file

expecting success of 5003.5 'add files to repository': 
	git add a &&
	GIT_COMMITTER_DATE="2005-05-27 22:00" git commit -m initial

[master (root-commit) 1e7cbf8] initial
 Author: A U Thor <author@example.com>
 22 files changed, 15 insertions(+)
 create mode 100644 a/a
 create mode 100755 a/bin/sh
 create mode 100644 a/binary.cr
 create mode 100644 a/binary.crlf
 create mode 100644 a/binary.lf
 create mode 100644 a/custom.cr
 create mode 100644 a/custom.crlf
 create mode 100644 a/custom.lf
 create mode 100644 a/diff.cr
 create mode 100644 a/diff.crlf
 create mode 100644 a/diff.lf
 create mode 100644 a/ignored
 create mode 100644 a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path
 create mode 100644 a/nodiff.cr
 create mode 100644 a/nodiff.crlf
 create mode 100644 a/nodiff.lf
 create mode 100644 a/substfile1
 create mode 100644 a/substfile2
 create mode 120000 a/symlink_to_a
 create mode 100644 a/text.cr
 create mode 100644 a/text.crlf
 create mode 100644 a/text.lf
ok 5 - add files to repository

expecting success of 5003.6 'setup export-subst and diff attributes': 
	echo "a/nodiff.* -diff" >>.git/info/attributes &&
	echo "a/diff.* diff" >>.git/info/attributes &&
	echo "a/custom.* diff=custom" >>.git/info/attributes &&
	git config diff.custom.binary true &&
	echo "substfile?" export-subst >>.git/info/attributes &&
	git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \
		>a/substfile1

ok 6 - setup export-subst and diff attributes

expecting success of 5003.7 'create bare clone': 
	git clone --template= --bare . bare.git &&
	mkdir bare.git/info &&
	cp .git/info/attributes bare.git/info/attributes &&
	# Recreate our changes to .git/config rather than just copying it, as
	# we do not want to clobber core.bare or other settings.
	git -C bare.git config diff.custom.binary true

Cloning into bare repository 'bare.git'...
done.
ok 7 - create bare clone

expecting success of 5003.8 'remove ignored file': rm a/ignored
ok 8 - remove ignored file

expecting success of 5003.9 'git archive --format=zip': git archive --format=zip HEAD >d.zip
ok 9 - git archive --format=zip

checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 5003.10 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../d.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     
   creating: a/bin/
  inflating: a/bin/sh                
 extracting: a/binary.cr             
 extracting: a/binary.crlf           
 extracting: a/binary.lf             
 extracting: a/custom.cr             
 extracting: a/custom.crlf           
 extracting: a/custom.lf             
 extracting: a/diff.cr               
 extracting: a/diff.crlf             
 extracting: a/diff.lf               
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
 extracting: a/nodiff.cr             
 extracting: a/nodiff.crlf           
 extracting: a/nodiff.lf             
 extracting: a/substfile1            
 extracting: a/substfile2            
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               
 extracting: a/text.crlf             
 extracting: a/text.lf               
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 10 -  extract ZIP archive

expecting success of 5003.11 ' validate filenames': 
		(cd d/a && find .) | sort >d.lst &&
		test_cmp a.lst d.lst
	
ok 11 -  validate filenames

expecting success of 5003.12 ' validate file contents': 
		diff -r a d/a
	
ok 12 -  validate file contents

checking prerequisite: UNZIP_CONVERT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_CONVERT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_CONVERT" &&
	"$GIT_UNZIP" -a "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip

)
Archive:  /<<PKGBUILDDIR>>/t/t5003/infozip-symlinks.zip
 extracting: textfile                [text]  
    linking: symlink                 -> textfile 
finishing deferred symbolic links:
  symlink                -> textfile
prerequisite UNZIP_CONVERT ok
expecting success of 5003.13 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../d.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     [text]  
   creating: a/bin/
  inflating: a/bin/sh                [binary]
 extracting: a/binary.cr             [binary]
 extracting: a/binary.crlf           [binary]
 extracting: a/binary.lf             [binary]
 extracting: a/custom.cr             [binary]
 extracting: a/custom.crlf           [binary]
 extracting: a/custom.lf             [binary]
 extracting: a/diff.cr               [text]  
 extracting: a/diff.crlf             [text]  
 extracting: a/diff.lf               [text]  
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
 extracting: a/nodiff.cr             [binary]
 extracting: a/nodiff.crlf           [binary]
 extracting: a/nodiff.lf             [binary]
 extracting: a/substfile1            [text]  
 extracting: a/substfile2            [text]  
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               [text]  
 extracting: a/text.crlf             [text]  
 extracting: a/text.lf               [text]  
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 13 -  extract ZIP archive with EOL conversion

expecting success of 5003.14 ' validate that text files are converted': 
		test_cmp_bin eol_d/a/text.cr eol_d/a/text.crlf &&
		test_cmp_bin eol_d/a/text.cr eol_d/a/text.lf
	
ok 14 -  validate that text files are converted

expecting success of 5003.15 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_d/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_d/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_d/a/binary.lf
	
ok 15 -  validate that binary files are unchanged

expecting success of 5003.16 ' validate that diff files are converted': 
		test_cmp_bin eol_d/a/diff.cr eol_d/a/diff.crlf &&
		test_cmp_bin eol_d/a/diff.cr eol_d/a/diff.lf
	
ok 16 -  validate that diff files are converted

expecting success of 5003.17 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_d/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_d/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_d/a/nodiff.lf
	
ok 17 -  validate that -diff files are unchanged

expecting success of 5003.18 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_d/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_d/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_d/a/custom.lf
	
ok 18 -  validate that custom diff is unchanged 

expecting success of 5003.19 'git archive --format=zip in a bare repo': (cd bare.git && git archive --format=zip HEAD) >d1.zip
ok 19 - git archive --format=zip in a bare repo

expecting success of 5003.20 'git archive --format=zip vs. the same in a bare repo': test_cmp_bin d.zip d1.zip
ok 20 - git archive --format=zip vs. the same in a bare repo

expecting success of 5003.21 'git archive --format=zip with --output': git archive --format=zip --output=d2.zip HEAD &&
    test_cmp_bin d.zip d2.zip
ok 21 - git archive --format=zip with --output

expecting success of 5003.22 'git archive with --output, inferring format (local)': 
	git archive --output=d3.zip HEAD &&
	test_cmp_bin d.zip d3.zip

ok 22 - git archive with --output, inferring format (local)

expecting success of 5003.23 'git archive with --output, inferring format (remote)': 
	git archive --remote=. --output=d4.zip HEAD &&
	test_cmp_bin d.zip d4.zip

ok 23 - git archive with --output, inferring format (remote)

expecting success of 5003.24 'git archive --format=zip with prefix': git archive --format=zip --prefix=prefix/ HEAD >e.zip
ok 24 - git archive --format=zip with prefix

expecting success of 5003.25 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../e.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: prefix/
   creating: prefix/a/
 extracting: prefix/a/a              
   creating: prefix/a/bin/
  inflating: prefix/a/bin/sh         
 extracting: prefix/a/binary.cr      
 extracting: prefix/a/binary.crlf    
 extracting: prefix/a/binary.lf      
 extracting: prefix/a/custom.cr      
 extracting: prefix/a/custom.crlf    
 extracting: prefix/a/custom.lf      
 extracting: prefix/a/diff.cr        
 extracting: prefix/a/diff.crlf      
 extracting: prefix/a/diff.lf        
   creating: prefix/a/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
 extracting: prefix/a/nodiff.cr      
 extracting: prefix/a/nodiff.crlf    
 extracting: prefix/a/nodiff.lf      
 extracting: prefix/a/substfile1     
 extracting: prefix/a/substfile2     
    linking: prefix/a/symlink_to_a   -> a 
 extracting: prefix/a/text.cr        
 extracting: prefix/a/text.crlf      
 extracting: prefix/a/text.lf        
finishing deferred symbolic links:
  prefix/a/symlink_to_a  -> a
ok 25 -  extract ZIP archive

expecting success of 5003.26 ' validate filenames': 
		(cd e/prefix/a && find .) | sort >e.lst &&
		test_cmp a.lst e.lst
	
ok 26 -  validate filenames

expecting success of 5003.27 ' validate file contents': 
		diff -r a e/prefix/a
	
ok 27 -  validate file contents

expecting success of 5003.28 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../e.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: prefix/
   creating: prefix/a/
 extracting: prefix/a/a              [text]  
   creating: prefix/a/bin/
  inflating: prefix/a/bin/sh         [binary]
 extracting: prefix/a/binary.cr      [binary]
 extracting: prefix/a/binary.crlf    [binary]
 extracting: prefix/a/binary.lf      [binary]
 extracting: prefix/a/custom.cr      [binary]
 extracting: prefix/a/custom.crlf    [binary]
 extracting: prefix/a/custom.lf      [binary]
 extracting: prefix/a/diff.cr        [text]  
 extracting: prefix/a/diff.crlf      [text]  
 extracting: prefix/a/diff.lf        [text]  
   creating: prefix/a/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: prefix/a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
 extracting: prefix/a/nodiff.cr      [binary]
 extracting: prefix/a/nodiff.crlf    [binary]
 extracting: prefix/a/nodiff.lf      [binary]
 extracting: prefix/a/substfile1     [text]  
 extracting: prefix/a/substfile2     [text]  
    linking: prefix/a/symlink_to_a   -> a 
 extracting: prefix/a/text.cr        [text]  
 extracting: prefix/a/text.crlf      [text]  
 extracting: prefix/a/text.lf        [text]  
finishing deferred symbolic links:
  prefix/a/symlink_to_a  -> a
ok 28 -  extract ZIP archive with EOL conversion

expecting success of 5003.29 ' validate that text files are converted': 
		test_cmp_bin eol_e/prefix/a/text.cr eol_e/prefix/a/text.crlf &&
		test_cmp_bin eol_e/prefix/a/text.cr eol_e/prefix/a/text.lf
	
ok 29 -  validate that text files are converted

expecting success of 5003.30 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_e/prefix/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_e/prefix/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_e/prefix/a/binary.lf
	
ok 30 -  validate that binary files are unchanged

expecting success of 5003.31 ' validate that diff files are converted': 
		test_cmp_bin eol_e/prefix/a/diff.cr eol_e/prefix/a/diff.crlf &&
		test_cmp_bin eol_e/prefix/a/diff.cr eol_e/prefix/a/diff.lf
	
ok 31 -  validate that diff files are converted

expecting success of 5003.32 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_e/prefix/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_e/prefix/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_e/prefix/a/nodiff.lf
	
ok 32 -  validate that -diff files are unchanged

expecting success of 5003.33 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_e/prefix/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_e/prefix/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_e/prefix/a/custom.lf
	
ok 33 -  validate that custom diff is unchanged 

expecting success of 5003.34 'git archive -0 --format=zip on large files': 
	test_config core.bigfilethreshold 1 &&
	git archive -0 --format=zip HEAD >large.zip

ok 34 - git archive -0 --format=zip on large files

expecting success of 5003.35 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../large.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     
   creating: a/bin/
 extracting: a/bin/sh                
 extracting: a/binary.cr             
 extracting: a/binary.crlf           
 extracting: a/binary.lf             
 extracting: a/custom.cr             
 extracting: a/custom.crlf           
 extracting: a/custom.lf             
 extracting: a/diff.cr               
 extracting: a/diff.crlf             
 extracting: a/diff.lf               
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
 extracting: a/nodiff.cr             
 extracting: a/nodiff.crlf           
 extracting: a/nodiff.lf             
 extracting: a/substfile1            
 extracting: a/substfile2            
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               
 extracting: a/text.crlf             
 extracting: a/text.lf               
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 35 -  extract ZIP archive

expecting success of 5003.36 ' validate filenames': 
		(cd large/a && find .) | sort >large.lst &&
		test_cmp a.lst large.lst
	
ok 36 -  validate filenames

expecting success of 5003.37 ' validate file contents': 
		diff -r a large/a
	
ok 37 -  validate file contents

expecting success of 5003.38 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../large.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     [text]  
   creating: a/bin/
 extracting: a/bin/sh                [binary]
 extracting: a/binary.cr             [binary]
 extracting: a/binary.crlf           [binary]
 extracting: a/binary.lf             [binary]
 extracting: a/custom.cr             [binary]
 extracting: a/custom.crlf           [binary]
 extracting: a/custom.lf             [binary]
 extracting: a/diff.cr               [text]  
 extracting: a/diff.crlf             [text]  
 extracting: a/diff.lf               [text]  
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
 extracting: a/nodiff.cr             [binary]
 extracting: a/nodiff.crlf           [binary]
 extracting: a/nodiff.lf             [binary]
 extracting: a/substfile1            [text]  
 extracting: a/substfile2            [text]  
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               [text]  
 extracting: a/text.crlf             [text]  
 extracting: a/text.lf               [text]  
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 38 -  extract ZIP archive with EOL conversion

expecting success of 5003.39 ' validate that text files are converted': 
		test_cmp_bin eol_large/a/text.cr eol_large/a/text.crlf &&
		test_cmp_bin eol_large/a/text.cr eol_large/a/text.lf
	
ok 39 -  validate that text files are converted

expecting success of 5003.40 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_large/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_large/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_large/a/binary.lf
	
ok 40 -  validate that binary files are unchanged

expecting success of 5003.41 ' validate that diff files are converted': 
		test_cmp_bin eol_large/a/diff.cr eol_large/a/diff.crlf &&
		test_cmp_bin eol_large/a/diff.cr eol_large/a/diff.lf
	
ok 41 -  validate that diff files are converted

expecting success of 5003.42 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_large/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_large/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_large/a/nodiff.lf
	
ok 42 -  validate that -diff files are unchanged

expecting success of 5003.43 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_large/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_large/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_large/a/custom.lf
	
ok 43 -  validate that custom diff is unchanged 

expecting success of 5003.44 'git archive --format=zip on large files': 
	test_config core.bigfilethreshold 1 &&
	git archive --format=zip HEAD >large-compressed.zip

ok 44 - git archive --format=zip on large files

expecting success of 5003.45 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../large-compressed.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
  inflating: a/a                     
   creating: a/bin/
  inflating: a/bin/sh                
  inflating: a/binary.cr             
  inflating: a/binary.crlf           
  inflating: a/binary.lf             
  inflating: a/custom.cr             
  inflating: a/custom.crlf           
  inflating: a/custom.lf             
  inflating: a/diff.cr               
  inflating: a/diff.crlf             
  inflating: a/diff.lf               
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
  inflating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
  inflating: a/nodiff.cr             
  inflating: a/nodiff.crlf           
  inflating: a/nodiff.lf             
 extracting: a/substfile1            
 extracting: a/substfile2            
    linking: a/symlink_to_a          -> a 
  inflating: a/text.cr               
  inflating: a/text.crlf             
  inflating: a/text.lf               
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 45 -  extract ZIP archive

expecting success of 5003.46 ' validate filenames': 
		(cd large-compressed/a && find .) | sort >large-compressed.lst &&
		test_cmp a.lst large-compressed.lst
	
ok 46 -  validate filenames

expecting success of 5003.47 ' validate file contents': 
		diff -r a large-compressed/a
	
ok 47 -  validate file contents

expecting success of 5003.48 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../large-compressed.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
  inflating: a/a                     [text]  
   creating: a/bin/
  inflating: a/bin/sh                [binary]
  inflating: a/binary.cr             [binary]
  inflating: a/binary.crlf           [binary]
  inflating: a/binary.lf             [binary]
  inflating: a/custom.cr             [binary]
  inflating: a/custom.crlf           [binary]
  inflating: a/custom.lf             [binary]
  inflating: a/diff.cr               [text]  
  inflating: a/diff.crlf             [text]  
  inflating: a/diff.lf               [text]  
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
  inflating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
  inflating: a/nodiff.cr             [binary]
  inflating: a/nodiff.crlf           [binary]
  inflating: a/nodiff.lf             [binary]
 extracting: a/substfile1            [text]  
 extracting: a/substfile2            [text]  
    linking: a/symlink_to_a          -> a 
  inflating: a/text.cr               [text]  
  inflating: a/text.crlf             [text]  
  inflating: a/text.lf               [text]  
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 48 -  extract ZIP archive with EOL conversion

expecting success of 5003.49 ' validate that text files are converted': 
		test_cmp_bin eol_large-compressed/a/text.cr eol_large-compressed/a/text.crlf &&
		test_cmp_bin eol_large-compressed/a/text.cr eol_large-compressed/a/text.lf
	
ok 49 -  validate that text files are converted

expecting success of 5003.50 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_large-compressed/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_large-compressed/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_large-compressed/a/binary.lf
	
ok 50 -  validate that binary files are unchanged

expecting success of 5003.51 ' validate that diff files are converted': 
		test_cmp_bin eol_large-compressed/a/diff.cr eol_large-compressed/a/diff.crlf &&
		test_cmp_bin eol_large-compressed/a/diff.cr eol_large-compressed/a/diff.lf
	
ok 51 -  validate that diff files are converted

expecting success of 5003.52 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_large-compressed/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_large-compressed/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_large-compressed/a/nodiff.lf
	
ok 52 -  validate that -diff files are unchanged

expecting success of 5003.53 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_large-compressed/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_large-compressed/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_large-compressed/a/custom.lf
	
ok 53 -  validate that custom diff is unchanged 

expecting success of 5003.54 'git archive --format=zip --add-file': 
	echo untracked >untracked &&
	git archive --format=zip --add-file=untracked HEAD >with_untracked.zip

ok 54 - git archive --format=zip --add-file

expecting success of 5003.55 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../with_untracked.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     
   creating: a/bin/
  inflating: a/bin/sh                
 extracting: a/binary.cr             
 extracting: a/binary.crlf           
 extracting: a/binary.lf             
 extracting: a/custom.cr             
 extracting: a/custom.crlf           
 extracting: a/custom.lf             
 extracting: a/diff.cr               
 extracting: a/diff.crlf             
 extracting: a/diff.lf               
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
 extracting: a/nodiff.cr             
 extracting: a/nodiff.crlf           
 extracting: a/nodiff.lf             
 extracting: a/substfile1            
 extracting: a/substfile2            
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               
 extracting: a/text.crlf             
 extracting: a/text.lf               
 extracting: untracked               
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 55 -  extract ZIP archive

expecting success of 5003.56 ' validate filenames': 
		(cd with_untracked/a && find .) | sort >with_untracked.lst &&
		test_cmp a.lst with_untracked.lst
	
ok 56 -  validate filenames

expecting success of 5003.57 ' validate file contents': 
		diff -r a with_untracked/a
	
ok 57 -  validate file contents

expecting success of 5003.58 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../with_untracked.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     [text]  
   creating: a/bin/
  inflating: a/bin/sh                [binary]
 extracting: a/binary.cr             [binary]
 extracting: a/binary.crlf           [binary]
 extracting: a/binary.lf             [binary]
 extracting: a/custom.cr             [binary]
 extracting: a/custom.crlf           [binary]
 extracting: a/custom.lf             [binary]
 extracting: a/diff.cr               [text]  
 extracting: a/diff.crlf             [text]  
 extracting: a/diff.lf               [text]  
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
 extracting: a/nodiff.cr             [binary]
 extracting: a/nodiff.crlf           [binary]
 extracting: a/nodiff.lf             [binary]
 extracting: a/substfile1            [text]  
 extracting: a/substfile2            [text]  
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               [text]  
 extracting: a/text.crlf             [text]  
 extracting: a/text.lf               [text]  
 extracting: untracked               [text]  
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 58 -  extract ZIP archive with EOL conversion

expecting success of 5003.59 ' validate that text files are converted': 
		test_cmp_bin eol_with_untracked/a/text.cr eol_with_untracked/a/text.crlf &&
		test_cmp_bin eol_with_untracked/a/text.cr eol_with_untracked/a/text.lf
	
ok 59 -  validate that text files are converted

expecting success of 5003.60 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_with_untracked/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_with_untracked/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_with_untracked/a/binary.lf
	
ok 60 -  validate that binary files are unchanged

expecting success of 5003.61 ' validate that diff files are converted': 
		test_cmp_bin eol_with_untracked/a/diff.cr eol_with_untracked/a/diff.crlf &&
		test_cmp_bin eol_with_untracked/a/diff.cr eol_with_untracked/a/diff.lf
	
ok 61 -  validate that diff files are converted

expecting success of 5003.62 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_with_untracked/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_with_untracked/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_with_untracked/a/nodiff.lf
	
ok 62 -  validate that -diff files are unchanged

expecting success of 5003.63 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_with_untracked/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_with_untracked/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_with_untracked/a/custom.lf
	
ok 63 -  validate that custom diff is unchanged 

expecting success of 5003.64 ' validate extra file untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 64 -  validate extra file untracked

expecting success of 5003.65 'git archive --format=zip --add-virtual-file': 
	if test_have_prereq FUNNYNAMES
	then
		PATHNAME="pathname with : colon"
	else
		PATHNAME="pathname without colon"
	fi &&
	git archive --format=zip >with_file_with_content.zip \
		--add-virtual-file=\""$PATHNAME"\": \
		--add-virtual-file=hello:world $EMPTY_TREE &&
	test_when_finished "rm -rf tmp-unpack" &&
	mkdir tmp-unpack && (
		cd tmp-unpack &&
		"$GIT_UNZIP" ../with_file_with_content.zip &&
		test_path_is_file hello &&
		test_path_is_file "$PATHNAME" &&
		test world = $(cat hello)
	)

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
Archive:  ../with_file_with_content.zip
 extracting: pathname with : colon   
 extracting: hello                   
ok 65 - git archive --format=zip --add-virtual-file

expecting success of 5003.66 'git archive --format=zip --add-file twice': 
	echo untracked >untracked &&
	git archive --format=zip --prefix=one/ --add-file=untracked \
		--prefix=two/ --add-file=untracked \
		--prefix= HEAD >with_untracked2.zip

ok 66 - git archive --format=zip --add-file twice

expecting success of 5003.67 ' extract ZIP archive': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile)
	
Archive:  ../with_untracked2.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     
   creating: a/bin/
  inflating: a/bin/sh                
 extracting: a/binary.cr             
 extracting: a/binary.crlf           
 extracting: a/binary.lf             
 extracting: a/custom.cr             
 extracting: a/custom.crlf           
 extracting: a/custom.lf             
 extracting: a/diff.cr               
 extracting: a/diff.crlf             
 extracting: a/diff.lf               
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  
 extracting: a/nodiff.cr             
 extracting: a/nodiff.crlf           
 extracting: a/nodiff.lf             
 extracting: a/substfile1            
 extracting: a/substfile2            
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               
 extracting: a/text.crlf             
 extracting: a/text.lf               
 extracting: one/untracked           
 extracting: two/untracked           
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 67 -  extract ZIP archive

expecting success of 5003.68 ' validate filenames': 
		(cd with_untracked2/a && find .) | sort >with_untracked2.lst &&
		test_cmp a.lst with_untracked2.lst
	
ok 68 -  validate filenames

expecting success of 5003.69 ' validate file contents': 
		diff -r a with_untracked2/a
	
ok 69 -  validate file contents

expecting success of 5003.70 ' extract ZIP archive with EOL conversion': 
		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile)
	
Archive:  ../with_untracked2.zip
1e7cbf83a16362da1ae4f763e1de18d704a4aeff
   creating: a/
 extracting: a/a                     [text]  
   creating: a/bin/
  inflating: a/bin/sh                [binary]
 extracting: a/binary.cr             [binary]
 extracting: a/binary.crlf           [binary]
 extracting: a/binary.lf             [binary]
 extracting: a/custom.cr             [binary]
 extracting: a/custom.crlf           [binary]
 extracting: a/custom.lf             [binary]
 extracting: a/diff.cr               [text]  
 extracting: a/diff.crlf             [text]  
 extracting: a/diff.lf               [text]  
   creating: a/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
   creating: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/
 extracting: a/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/long_path_to_a_file/file_with_long_path  [text]  
 extracting: a/nodiff.cr             [binary]
 extracting: a/nodiff.crlf           [binary]
 extracting: a/nodiff.lf             [binary]
 extracting: a/substfile1            [text]  
 extracting: a/substfile2            [text]  
    linking: a/symlink_to_a          -> a 
 extracting: a/text.cr               [text]  
 extracting: a/text.crlf             [text]  
 extracting: a/text.lf               [text]  
 extracting: one/untracked           [text]  
 extracting: two/untracked           [text]  
finishing deferred symbolic links:
  a/symlink_to_a         -> a
ok 70 -  extract ZIP archive with EOL conversion

expecting success of 5003.71 ' validate that text files are converted': 
		test_cmp_bin eol_with_untracked2/a/text.cr eol_with_untracked2/a/text.crlf &&
		test_cmp_bin eol_with_untracked2/a/text.cr eol_with_untracked2/a/text.lf
	
ok 71 -  validate that text files are converted

expecting success of 5003.72 ' validate that binary files are unchanged': 
		test_cmp_bin a/binary.cr   eol_with_untracked2/a/binary.cr &&
		test_cmp_bin a/binary.crlf eol_with_untracked2/a/binary.crlf &&
		test_cmp_bin a/binary.lf   eol_with_untracked2/a/binary.lf
	
ok 72 -  validate that binary files are unchanged

expecting success of 5003.73 ' validate that diff files are converted': 
		test_cmp_bin eol_with_untracked2/a/diff.cr eol_with_untracked2/a/diff.crlf &&
		test_cmp_bin eol_with_untracked2/a/diff.cr eol_with_untracked2/a/diff.lf
	
ok 73 -  validate that diff files are converted

expecting success of 5003.74 ' validate that -diff files are unchanged': 
		test_cmp_bin a/nodiff.cr   eol_with_untracked2/a/nodiff.cr &&
		test_cmp_bin a/nodiff.crlf eol_with_untracked2/a/nodiff.crlf &&
		test_cmp_bin a/nodiff.lf   eol_with_untracked2/a/nodiff.lf
	
ok 74 -  validate that -diff files are unchanged

expecting success of 5003.75 ' validate that custom diff is unchanged ': 
		test_cmp_bin a/custom.cr   eol_with_untracked2/a/custom.cr &&
		test_cmp_bin a/custom.crlf eol_with_untracked2/a/custom.crlf &&
		test_cmp_bin a/custom.lf   eol_with_untracked2/a/custom.lf
	
ok 75 -  validate that custom diff is unchanged 

expecting success of 5003.76 ' validate extra file one/untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 76 -  validate extra file one/untracked

expecting success of 5003.77 ' validate extra file two/untracked': 
		diff -r $path_in_fs $dir/$path_in_archive
	
ok 77 -  validate extra file two/untracked

# passed all 77 test(s)
1..77
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5100-mailinfo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5100-mailinfo/.git/
expecting success of 5100.1 'split sample box': git mailsplit -o. "$DATA/sample.mbox" >last &&
	last=$(cat last) &&
	echo total is $last &&
	test $(cat last) = 18
total is 18
ok 1 - split sample box

expecting success of 5100.2 'mailinfo 0001': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 2 - mailinfo 0001

expecting success of 5100.3 'mailinfo 0002': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 3 - mailinfo 0002

expecting success of 5100.4 'mailinfo 0003': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 4 - mailinfo 0003

expecting success of 5100.5 'mailinfo 0004': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 5 - mailinfo 0004

expecting success of 5100.6 'mailinfo 0005': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 6 - mailinfo 0005

expecting success of 5100.7 'mailinfo 0006': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 7 - mailinfo 0006

expecting success of 5100.8 'mailinfo 0007': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 8 - mailinfo 0007

expecting success of 5100.9 'mailinfo 0008': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 9 - mailinfo 0008

expecting success of 5100.10 'mailinfo 0009': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 10 - mailinfo 0009

expecting success of 5100.11 'mailinfo 0010': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 11 - mailinfo 0010

expecting success of 5100.12 'mailinfo 0011': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 12 - mailinfo 0011

expecting success of 5100.13 'mailinfo 0012': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 13 - mailinfo 0012

expecting success of 5100.14 'mailinfo 0013': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 14 - mailinfo 0013

expecting success of 5100.15 'mailinfo 0014': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 15 - mailinfo 0014

expecting success of 5100.16 'mailinfo 0015': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 16 - mailinfo 0015

expecting success of 5100.17 'mailinfo 0016': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 17 - mailinfo 0016

expecting success of 5100.18 'mailinfo 0017': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 18 - mailinfo 0017

expecting success of 5100.19 'mailinfo 0018': 
		check_mailinfo "$mail" "" &&
		if test -f "$DATA/msg$mail--scissors"
		then
			check_mailinfo "$mail" --scissors
		fi &&
		if test -f "$DATA/msg$mail--no-inbody-headers"
		then
			check_mailinfo "$mail" --no-inbody-headers
		fi &&
		if test -f "$DATA/msg$mail--message-id"
		then
			check_mailinfo "$mail" --message-id
		fi
	
ok 19 - mailinfo 0018

expecting success of 5100.20 'split box with rfc2047 samples': mkdir rfc2047 &&
	git mailsplit -orfc2047 "$DATA/rfc2047-samples.mbox" \
	  >rfc2047/last &&
	last=$(cat rfc2047/last) &&
	echo total is $last &&
	test $(cat rfc2047/last) = 11
total is 11
ok 20 - split box with rfc2047 samples

expecting success of 5100.21 'mailinfo rfc2047/0001': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 21 - mailinfo rfc2047/0001

expecting success of 5100.22 'mailinfo rfc2047/0002': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 22 - mailinfo rfc2047/0002

expecting success of 5100.23 'mailinfo rfc2047/0003': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 23 - mailinfo rfc2047/0003

expecting success of 5100.24 'mailinfo rfc2047/0004': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 24 - mailinfo rfc2047/0004

expecting success of 5100.25 'mailinfo rfc2047/0005': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 25 - mailinfo rfc2047/0005

expecting success of 5100.26 'mailinfo rfc2047/0006': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 26 - mailinfo rfc2047/0006

expecting success of 5100.27 'mailinfo rfc2047/0007': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 27 - mailinfo rfc2047/0007

expecting success of 5100.28 'mailinfo rfc2047/0008': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 28 - mailinfo rfc2047/0008

expecting success of 5100.29 'mailinfo rfc2047/0009': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 29 - mailinfo rfc2047/0009

expecting success of 5100.30 'mailinfo rfc2047/0010': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 30 - mailinfo rfc2047/0010

expecting success of 5100.31 'mailinfo rfc2047/0011': 
		git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
		echo msg &&
		test_cmp "$DATA/empty" "$mail-msg" &&
		echo patch &&
		test_cmp "$DATA/empty" "$mail-patch" &&
		echo info &&
		test_cmp "$DATA/rfc2047-info-$(basename $mail)" "$mail-info"
	
msg
patch
info
ok 31 - mailinfo rfc2047/0011

expecting success of 5100.32 'respect NULs': 

	git mailsplit -d3 -o. "$DATA/nul-plain" &&
	test_cmp "$DATA/nul-plain" 001 &&
	(cat 001 | git mailinfo msg patch) &&
	test_line_count = 4 patch


1

ok 32 - respect NULs

expecting success of 5100.33 'Preserve NULs out of MIME encoded message': 

	git mailsplit -d5 -o. "$DATA/nul-b64.in" &&
	test_cmp "$DATA/nul-b64.in" 00001 &&
	git mailinfo msg patch <00001 &&
	test_cmp "$DATA/nul-b64.expect" patch


1
Author: Junio C Hamano
Email: gitster@pobox.com
Subject: second
Date: Sun, 25 May 2008 00:38:18 -0700

ok 33 - Preserve NULs out of MIME encoded message

expecting success of 5100.34 'mailinfo on from header without name works': 

	mkdir info-from &&
	git mailsplit -oinfo-from "$DATA/info-from.in" &&
	test_cmp "$DATA/info-from.in" info-from/0001 &&
	git mailinfo info-from/msg info-from/patch \
	  <info-from/0001 >info-from/out &&
	test_cmp "$DATA/info-from.expect" info-from/out


1
ok 34 - mailinfo on from header without name works

expecting success of 5100.35 'mailinfo finds headers after embedded From line': 
	mkdir embed-from &&
	git mailsplit -oembed-from "$DATA/embed-from.in" &&
	test_cmp "$DATA/embed-from.in" embed-from/0001 &&
	git mailinfo embed-from/msg embed-from/patch \
	  <embed-from/0001 >embed-from/out &&
	test_cmp "$DATA/embed-from.expect" embed-from/out

1
ok 35 - mailinfo finds headers after embedded From line

expecting success of 5100.36 'mailinfo on message with quoted >From': 
	mkdir quoted-from &&
	git mailsplit -oquoted-from "$DATA/quoted-from.in" &&
	test_cmp "$DATA/quoted-from.in" quoted-from/0001 &&
	git mailinfo quoted-from/msg quoted-from/patch \
	  <quoted-from/0001 >quoted-from/out &&
	test_cmp "$DATA/quoted-from.expect" quoted-from/msg

1
ok 36 - mailinfo on message with quoted >From

expecting success of 5100.37 'mailinfo unescapes with --mboxrd': 
	mkdir mboxrd &&
	git mailsplit -omboxrd --mboxrd \
		"$DATA/sample.mboxrd" >last &&
	test x"$(cat last)" = x2 &&
	for i in 0001 0002
	do
		git mailinfo mboxrd/msg mboxrd/patch \
		  <mboxrd/$i >mboxrd/out &&
		test_cmp "$DATA/${i}mboxrd" mboxrd/msg || return 1
	done &&
	sp=" " &&
	echo "From " >expect &&
	echo "From " >>expect &&
	echo >> expect &&
	cat >sp <<-INPUT_END &&
	From mboxrd Mon Sep 17 00:00:00 2001
	From: trailing spacer <sp@example.com>
	Subject: [PATCH] a commit with trailing space

	From$sp
	>From$sp

	INPUT_END

	git mailsplit -f2 -omboxrd --mboxrd <sp >last &&
	test x"$(cat last)" = x1 &&
	git mailinfo mboxrd/msg mboxrd/patch <mboxrd/0003 &&
	test_cmp expect mboxrd/msg

Author: trailing spacer
Email: sp@example.com
Subject: a commit with trailing space

ok 37 - mailinfo unescapes with --mboxrd

expecting success of 5100.38 'mailinfo handles rfc2822 quoted-string': 
	mkdir quoted-string &&
	git mailinfo /dev/null /dev/null <"$DATA/quoted-string.in" \
		>quoted-string/info &&
	test_cmp "$DATA/quoted-string.expect" quoted-string/info

ok 38 - mailinfo handles rfc2822 quoted-string

expecting success of 5100.39 'mailinfo handles rfc2822 comment': 
	mkdir comment &&
	git mailinfo /dev/null /dev/null <"$DATA/comment.in" \
		>comment/info &&
	test_cmp "$DATA/comment.expect" comment/info

ok 39 - mailinfo handles rfc2822 comment

expecting success of 5100.40 'mailinfo with mailinfo.scissors config': 
	test_config mailinfo.scissors true &&
	(
		mkdir sub &&
		cd sub &&
		git mailinfo ../msg0014.sc ../patch0014.sc <../0014 >../info0014.sc
	) &&
	test_cmp "$DATA/msg0014--scissors" msg0014.sc &&
	test_cmp "$DATA/patch0014--scissors" patch0014.sc &&
	test_cmp "$DATA/info0014--scissors" info0014.sc

ok 40 - mailinfo with mailinfo.scissors config

expecting success of 5100.41 'mailinfo no options': 
	subj="$(echo "Subject: [PATCH] [other] [PATCH] message" |
		git mailinfo /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: message"

ok 41 - mailinfo no options

expecting success of 5100.42 'mailinfo -k': 
	subj="$(echo "Subject: [PATCH] [other] [PATCH] message" |
		git mailinfo -k /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: [PATCH] [other] [PATCH] message"

ok 42 - mailinfo -k

expecting success of 5100.43 'mailinfo -b no [PATCH]': 
	subj="$(echo "Subject: [other] message" |
		git mailinfo -b /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: [other] message"

ok 43 - mailinfo -b no [PATCH]

expecting success of 5100.44 'mailinfo -b leading [PATCH]': 
	subj="$(echo "Subject: [PATCH] [other] message" |
		git mailinfo -b /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: [other] message"

ok 44 - mailinfo -b leading [PATCH]

expecting success of 5100.45 'mailinfo -b double [PATCH]': 
	subj="$(echo "Subject: [PATCH] [PATCH] message" |
		git mailinfo -b /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: message"

ok 45 - mailinfo -b double [PATCH]

expecting success of 5100.46 'mailinfo -b trailing [PATCH]': 
	subj="$(echo "Subject: [other] [PATCH] message" |
		git mailinfo -b /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: [other] message"

ok 46 - mailinfo -b trailing [PATCH]

expecting success of 5100.47 'mailinfo -b separated double [PATCH]': 
	subj="$(echo "Subject: [PATCH] [other] [PATCH] message" |
		git mailinfo -b /dev/null /dev/null)" &&
	test z"$subj" = z"Subject: [other] message"

ok 47 - mailinfo -b separated double [PATCH]

expecting success of 5100.48 'mailinfo handles unusual header whitespace': 
	git mailinfo /dev/null /dev/null >actual <<-\EOF &&
	From:Real Name <user@example.com>
	Subject:    extra spaces
	EOF

	cat >expect <<-\EOF &&
	Author: Real Name
	Email: user@example.com
	Subject: extra spaces

	EOF
	test_cmp expect actual

ok 48 - mailinfo handles unusual header whitespace

expecting success of 5100.49 'split base64 email with quoted-cr': 
	mkdir quoted-cr &&
	git mailsplit -oquoted-cr "$DATA/quoted-cr.mbox" >quoted-cr/last &&
	test $(cat quoted-cr/last) = 2

ok 49 - split base64 email with quoted-cr

expecting success of 5100.50 'mailinfo warn CR in base64 encoded email': 
	sed -e "s/%%$//" -e "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-msg" \
		>quoted-cr/0001-expected.msg &&
	sed "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-msg" \
		>quoted-cr/0002-expected.msg &&
	sed -e "s/%%$//" -e "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-patch" \
		>quoted-cr/0001-expected.patch &&
	sed "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-patch" \
		>quoted-cr/0002-expected.patch &&
	check_quoted_cr_mail quoted-cr/0001 &&
	test_must_be_empty quoted-cr/0001.err &&
	check_quoted_cr_mail quoted-cr/0002 &&
	grep "quoted CRLF detected" quoted-cr/0002.err &&
	check_quoted_cr_mail quoted-cr/0001 --quoted-cr=nowarn &&
	test_must_be_empty quoted-cr/0001.err &&
	check_quoted_cr_mail quoted-cr/0002 --quoted-cr=nowarn &&
	test_must_be_empty quoted-cr/0002.err &&
	cp quoted-cr/0001-expected.msg quoted-cr/0002-expected.msg &&
	cp quoted-cr/0001-expected.patch quoted-cr/0002-expected.patch &&
	check_quoted_cr_mail quoted-cr/0001 --quoted-cr=strip &&
	test_must_be_empty quoted-cr/0001.err &&
	check_quoted_cr_mail quoted-cr/0002 --quoted-cr=strip &&
	test_must_be_empty quoted-cr/0002.err

warning: quoted CRLF detected
ok 50 - mailinfo warn CR in base64 encoded email

# passed all 50 test(s)
1..50
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4216-log-bloom.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/.git/
expecting success of 4216.1 'setup test - repo, commits, commit graph, log outputs': 
	git init &&
	mkdir A A/B A/B/C &&
	test_commit c1 A/file1 &&
	test_commit c2 A/B/file2 &&
	test_commit c3 A/B/C/file3 &&
	test_commit c4 A/file1 &&
	test_commit c5 A/B/file2 &&
	test_commit c6 A/B/C/file3 &&
	test_commit c7 A/file1 &&
	test_commit c8 A/B/file2 &&
	test_commit c9 A/B/C/file3 &&
	test_commit c10 file_to_be_deleted &&
	git checkout -b side HEAD~4 &&
	test_commit side-1 file4 &&
	git checkout main &&
	git merge side &&
	test_commit c11 file5 &&
	mv file5 file5_renamed &&
	git add file5_renamed &&
	git commit -m "rename" &&
	rm file_to_be_deleted &&
	git add . &&
	git commit -m "file removed" &&
	git commit --allow-empty -m "empty" &&
	git commit-graph write --reachable --changed-paths &&

	test_oid_cache <<-EOF
	oid_version sha1:1
	oid_version sha256:2
	EOF

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/.git/
[main (root-commit) 3395ca5] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/file1
[main 017bcd5] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/B/file2
[main eaf8b6e] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/B/C/file3
[main 1ed2983] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b65cb8b] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f699e23] c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a1ed958] c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 8dd186e] c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9cac964] c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9b20140] c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file_to_be_deleted
Switched to a new branch 'side'
[side 0a9648a] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
Switched to branch 'main'
Merge made by the 'ort' strategy.
 file4 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file4
[main cee5e20] c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file5
[main a6f579e] rename
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file5_renamed
[main e48c09d] file removed
 Author: A U Thor <author@example.com>
 2 files changed, 2 deletions(-)
 delete mode 100644 file5
 delete mode 100644 file_to_be_deleted
[main cb7b1a0] empty
 Author: A U Thor <author@example.com>
ok 1 - setup test - repo, commits, commit graph, log outputs

expecting success of 4216.2 'commit-graph write wrote out the bloom chunks': 
	graph_read_expect 16

ok 2 - commit-graph write wrote out the bloom chunks

expecting success of 4216.3 'git log option:  for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 3 - git log option:  for path: A

expecting success of 4216.4 'git log option: --all for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 4 - git log option: --all for path: A

expecting success of 4216.5 'git log option: --full-history for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 5 - git log option: --full-history for path: A

expecting success of 4216.6 'git log option: --full-history --simplify-merges for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 6 - git log option: --full-history --simplify-merges for path: A

expecting success of 4216.7 'git log option: --simplify-merges for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 7 - git log option: --simplify-merges for path: A

expecting success of 4216.8 'git log option: --simplify-by-decoration for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 8 - git log option: --simplify-by-decoration for path: A

expecting success of 4216.9 'git log option: --follow for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 9 - git log option: --follow for path: A

expecting success of 4216.10 'git log option: --first-parent for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 10 - git log option: --first-parent for path: A

expecting success of 4216.11 'git log option: --topo-order for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 11 - git log option: --topo-order for path: A

expecting success of 4216.12 'git log option: --date-order for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 12 - git log option: --date-order for path: A

expecting success of 4216.13 'git log option: --author-date-order for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 13 - git log option: --author-date-order for path: A

expecting success of 4216.14 'git log option: --ancestry-path side..main for path: A': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 14 - git log option: --ancestry-path side..main for path: A

expecting success of 4216.15 'git log option:  for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 15 - git log option:  for path: A/B

expecting success of 4216.16 'git log option: --all for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 16 - git log option: --all for path: A/B

expecting success of 4216.17 'git log option: --full-history for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 17 - git log option: --full-history for path: A/B

expecting success of 4216.18 'git log option: --full-history --simplify-merges for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 18 - git log option: --full-history --simplify-merges for path: A/B

expecting success of 4216.19 'git log option: --simplify-merges for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 19 - git log option: --simplify-merges for path: A/B

expecting success of 4216.20 'git log option: --simplify-by-decoration for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 20 - git log option: --simplify-by-decoration for path: A/B

expecting success of 4216.21 'git log option: --follow for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 21 - git log option: --follow for path: A/B

expecting success of 4216.22 'git log option: --first-parent for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 22 - git log option: --first-parent for path: A/B

expecting success of 4216.23 'git log option: --topo-order for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 23 - git log option: --topo-order for path: A/B

expecting success of 4216.24 'git log option: --date-order for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 24 - git log option: --date-order for path: A/B

expecting success of 4216.25 'git log option: --author-date-order for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 25 - git log option: --author-date-order for path: A/B

expecting success of 4216.26 'git log option: --ancestry-path side..main for path: A/B': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 26 - git log option: --ancestry-path side..main for path: A/B

expecting success of 4216.27 'git log option:  for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 27 - git log option:  for path: A/B/C

expecting success of 4216.28 'git log option: --all for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 28 - git log option: --all for path: A/B/C

expecting success of 4216.29 'git log option: --full-history for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 29 - git log option: --full-history for path: A/B/C

expecting success of 4216.30 'git log option: --full-history --simplify-merges for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 30 - git log option: --full-history --simplify-merges for path: A/B/C

expecting success of 4216.31 'git log option: --simplify-merges for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 31 - git log option: --simplify-merges for path: A/B/C

expecting success of 4216.32 'git log option: --simplify-by-decoration for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 32 - git log option: --simplify-by-decoration for path: A/B/C

expecting success of 4216.33 'git log option: --follow for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 33 - git log option: --follow for path: A/B/C

expecting success of 4216.34 'git log option: --first-parent for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 34 - git log option: --first-parent for path: A/B/C

expecting success of 4216.35 'git log option: --topo-order for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 35 - git log option: --topo-order for path: A/B/C

expecting success of 4216.36 'git log option: --date-order for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 36 - git log option: --date-order for path: A/B/C

expecting success of 4216.37 'git log option: --author-date-order for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 37 - git log option: --author-date-order for path: A/B/C

expecting success of 4216.38 'git log option: --ancestry-path side..main for path: A/B/C': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 38 - git log option: --ancestry-path side..main for path: A/B/C

expecting success of 4216.39 'git log option:  for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 39 - git log option:  for path: A/file1

expecting success of 4216.40 'git log option: --all for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 40 - git log option: --all for path: A/file1

expecting success of 4216.41 'git log option: --full-history for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 41 - git log option: --full-history for path: A/file1

expecting success of 4216.42 'git log option: --full-history --simplify-merges for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 42 - git log option: --full-history --simplify-merges for path: A/file1

expecting success of 4216.43 'git log option: --simplify-merges for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 43 - git log option: --simplify-merges for path: A/file1

expecting success of 4216.44 'git log option: --simplify-by-decoration for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 44 - git log option: --simplify-by-decoration for path: A/file1

expecting success of 4216.45 'git log option: --follow for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 45 - git log option: --follow for path: A/file1

expecting success of 4216.46 'git log option: --first-parent for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 46 - git log option: --first-parent for path: A/file1

expecting success of 4216.47 'git log option: --topo-order for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 47 - git log option: --topo-order for path: A/file1

expecting success of 4216.48 'git log option: --date-order for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 48 - git log option: --date-order for path: A/file1

expecting success of 4216.49 'git log option: --author-date-order for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 49 - git log option: --author-date-order for path: A/file1

expecting success of 4216.50 'git log option: --ancestry-path side..main for path: A/file1': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 50 - git log option: --ancestry-path side..main for path: A/file1

expecting success of 4216.51 'git log option:  for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 51 - git log option:  for path: A/B/file2

expecting success of 4216.52 'git log option: --all for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 52 - git log option: --all for path: A/B/file2

expecting success of 4216.53 'git log option: --full-history for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 53 - git log option: --full-history for path: A/B/file2

expecting success of 4216.54 'git log option: --full-history --simplify-merges for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 54 - git log option: --full-history --simplify-merges for path: A/B/file2

expecting success of 4216.55 'git log option: --simplify-merges for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 55 - git log option: --simplify-merges for path: A/B/file2

expecting success of 4216.56 'git log option: --simplify-by-decoration for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 56 - git log option: --simplify-by-decoration for path: A/B/file2

expecting success of 4216.57 'git log option: --follow for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 57 - git log option: --follow for path: A/B/file2

expecting success of 4216.58 'git log option: --first-parent for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 58 - git log option: --first-parent for path: A/B/file2

expecting success of 4216.59 'git log option: --topo-order for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 59 - git log option: --topo-order for path: A/B/file2

expecting success of 4216.60 'git log option: --date-order for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 60 - git log option: --date-order for path: A/B/file2

expecting success of 4216.61 'git log option: --author-date-order for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 61 - git log option: --author-date-order for path: A/B/file2

expecting success of 4216.62 'git log option: --ancestry-path side..main for path: A/B/file2': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 62 - git log option: --ancestry-path side..main for path: A/B/file2

expecting success of 4216.63 'git log option:  for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 63 - git log option:  for path: A/B/C/file3

expecting success of 4216.64 'git log option: --all for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 64 - git log option: --all for path: A/B/C/file3

expecting success of 4216.65 'git log option: --full-history for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 65 - git log option: --full-history for path: A/B/C/file3

expecting success of 4216.66 'git log option: --full-history --simplify-merges for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 66 - git log option: --full-history --simplify-merges for path: A/B/C/file3

expecting success of 4216.67 'git log option: --simplify-merges for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 67 - git log option: --simplify-merges for path: A/B/C/file3

expecting success of 4216.68 'git log option: --simplify-by-decoration for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 68 - git log option: --simplify-by-decoration for path: A/B/C/file3

expecting success of 4216.69 'git log option: --follow for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 69 - git log option: --follow for path: A/B/C/file3

expecting success of 4216.70 'git log option: --first-parent for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 70 - git log option: --first-parent for path: A/B/C/file3

expecting success of 4216.71 'git log option: --topo-order for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 71 - git log option: --topo-order for path: A/B/C/file3

expecting success of 4216.72 'git log option: --date-order for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 72 - git log option: --date-order for path: A/B/C/file3

expecting success of 4216.73 'git log option: --author-date-order for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 73 - git log option: --author-date-order for path: A/B/C/file3

expecting success of 4216.74 'git log option: --ancestry-path side..main for path: A/B/C/file3': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 74 - git log option: --ancestry-path side..main for path: A/B/C/file3

expecting success of 4216.75 'git log option:  for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 75 - git log option:  for path: file4

expecting success of 4216.76 'git log option: --all for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 76 - git log option: --all for path: file4

expecting success of 4216.77 'git log option: --full-history for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 77 - git log option: --full-history for path: file4

expecting success of 4216.78 'git log option: --full-history --simplify-merges for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 78 - git log option: --full-history --simplify-merges for path: file4

expecting success of 4216.79 'git log option: --simplify-merges for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 79 - git log option: --simplify-merges for path: file4

expecting success of 4216.80 'git log option: --simplify-by-decoration for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 80 - git log option: --simplify-by-decoration for path: file4

expecting success of 4216.81 'git log option: --follow for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 81 - git log option: --follow for path: file4

expecting success of 4216.82 'git log option: --first-parent for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 82 - git log option: --first-parent for path: file4

expecting success of 4216.83 'git log option: --topo-order for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 83 - git log option: --topo-order for path: file4

expecting success of 4216.84 'git log option: --date-order for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 84 - git log option: --date-order for path: file4

expecting success of 4216.85 'git log option: --author-date-order for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 85 - git log option: --author-date-order for path: file4

expecting success of 4216.86 'git log option: --ancestry-path side..main for path: file4': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 86 - git log option: --ancestry-path side..main for path: file4

expecting success of 4216.87 'git log option:  for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 87 - git log option:  for path: file5

expecting success of 4216.88 'git log option: --all for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 88 - git log option: --all for path: file5

expecting success of 4216.89 'git log option: --full-history for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 89 - git log option: --full-history for path: file5

expecting success of 4216.90 'git log option: --full-history --simplify-merges for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 90 - git log option: --full-history --simplify-merges for path: file5

expecting success of 4216.91 'git log option: --simplify-merges for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 91 - git log option: --simplify-merges for path: file5

expecting success of 4216.92 'git log option: --simplify-by-decoration for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 92 - git log option: --simplify-by-decoration for path: file5

expecting success of 4216.93 'git log option: --follow for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 93 - git log option: --follow for path: file5

expecting success of 4216.94 'git log option: --first-parent for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 94 - git log option: --first-parent for path: file5

expecting success of 4216.95 'git log option: --topo-order for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 95 - git log option: --topo-order for path: file5

expecting success of 4216.96 'git log option: --date-order for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 96 - git log option: --date-order for path: file5

expecting success of 4216.97 'git log option: --author-date-order for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 97 - git log option: --author-date-order for path: file5

expecting success of 4216.98 'git log option: --ancestry-path side..main for path: file5': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 98 - git log option: --ancestry-path side..main for path: file5

expecting success of 4216.99 'git log option:  for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 99 - git log option:  for path: file5_renamed

expecting success of 4216.100 'git log option: --all for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 100 - git log option: --all for path: file5_renamed

expecting success of 4216.101 'git log option: --full-history for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 101 - git log option: --full-history for path: file5_renamed

expecting success of 4216.102 'git log option: --full-history --simplify-merges for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 102 - git log option: --full-history --simplify-merges for path: file5_renamed

expecting success of 4216.103 'git log option: --simplify-merges for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 103 - git log option: --simplify-merges for path: file5_renamed

expecting success of 4216.104 'git log option: --simplify-by-decoration for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 104 - git log option: --simplify-by-decoration for path: file5_renamed

expecting success of 4216.105 'git log option: --follow for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 105 - git log option: --follow for path: file5_renamed

expecting success of 4216.106 'git log option: --first-parent for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 106 - git log option: --first-parent for path: file5_renamed

expecting success of 4216.107 'git log option: --topo-order for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 107 - git log option: --topo-order for path: file5_renamed

expecting success of 4216.108 'git log option: --date-order for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 108 - git log option: --date-order for path: file5_renamed

expecting success of 4216.109 'git log option: --author-date-order for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 109 - git log option: --author-date-order for path: file5_renamed

expecting success of 4216.110 'git log option: --ancestry-path side..main for path: file5_renamed': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 110 - git log option: --ancestry-path side..main for path: file5_renamed

expecting success of 4216.111 'git log option:  for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 111 - git log option:  for path: file_to_be_deleted

expecting success of 4216.112 'git log option: --all for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 112 - git log option: --all for path: file_to_be_deleted

expecting success of 4216.113 'git log option: --full-history for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 113 - git log option: --full-history for path: file_to_be_deleted

expecting success of 4216.114 'git log option: --full-history --simplify-merges for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 114 - git log option: --full-history --simplify-merges for path: file_to_be_deleted

expecting success of 4216.115 'git log option: --simplify-merges for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 115 - git log option: --simplify-merges for path: file_to_be_deleted

expecting success of 4216.116 'git log option: --simplify-by-decoration for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 116 - git log option: --simplify-by-decoration for path: file_to_be_deleted

expecting success of 4216.117 'git log option: --follow for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 117 - git log option: --follow for path: file_to_be_deleted

expecting success of 4216.118 'git log option: --first-parent for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 118 - git log option: --first-parent for path: file_to_be_deleted

expecting success of 4216.119 'git log option: --topo-order for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 119 - git log option: --topo-order for path: file_to_be_deleted

expecting success of 4216.120 'git log option: --date-order for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 120 - git log option: --date-order for path: file_to_be_deleted

expecting success of 4216.121 'git log option: --author-date-order for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 121 - git log option: --author-date-order for path: file_to_be_deleted

expecting success of 4216.122 'git log option: --ancestry-path side..main for path: file_to_be_deleted': 
			test_bloom_filters_used "$option -- $path" &&
			test_config commitgraph.readChangedPaths false &&
			test_bloom_filters_not_used "$option -- $path"
		
ok 122 - git log option: --ancestry-path side..main for path: file_to_be_deleted

expecting success of 4216.123 'git log -- folder works with and without the trailing slash': 
	test_bloom_filters_used "-- A" &&
	test_bloom_filters_used "-- A/"

ok 123 - git log -- folder works with and without the trailing slash

expecting success of 4216.124 'git log for path that does not exist. ': 
	test_bloom_filters_used "-- path_does_not_exist"

ok 124 - git log for path that does not exist. 

expecting success of 4216.125 'git log with --walk-reflogs does not use Bloom filters': 
	test_bloom_filters_not_used "--walk-reflogs -- A"

ok 125 - git log with --walk-reflogs does not use Bloom filters

expecting success of 4216.126 'git log -- multiple path specs does not use Bloom filters': 
	test_bloom_filters_not_used "-- file4 A/file1"

ok 126 - git log -- multiple path specs does not use Bloom filters

expecting success of 4216.127 'git log -- "." pathspec at root does not use Bloom filters': 
	test_bloom_filters_not_used "-- ."

ok 127 - git log -- "." pathspec at root does not use Bloom filters

expecting success of 4216.128 'git log with wildcard that resolves to a single path uses Bloom filters': 
	test_bloom_filters_used "-- *4" &&
	test_bloom_filters_used "-- *renamed"

ok 128 - git log with wildcard that resolves to a single path uses Bloom filters

expecting success of 4216.129 'git log with wildcard that resolves to a multiple paths does not uses Bloom filters': 
	test_bloom_filters_not_used "-- *" &&
	test_bloom_filters_not_used "-- file*"

ok 129 - git log with wildcard that resolves to a multiple paths does not uses Bloom filters

expecting success of 4216.130 'setup - add commit-graph to the chain without Bloom filters': 
	test_commit c14 A/anotherFile2 &&
	test_commit c15 A/B/anotherFile2 &&
	test_commit c16 A/B/C/anotherFile2 &&
	git commit-graph write --reachable --split --no-changed-paths &&
	test_line_count = 2 .git/objects/info/commit-graphs/commit-graph-chain

[main c5e23fe] c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/anotherFile2
[main 46aa982] c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/B/anotherFile2
[main 79a46f1] c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/B/C/anotherFile2
ok 130 - setup - add commit-graph to the chain without Bloom filters

expecting success of 4216.131 'use Bloom filters even if the latest graph does not have Bloom filters': 
	# Ensure that the number of empty filters is equal to the number of
	# filters in the latest graph layer to prove that they are loaded (and
	# ignored).
	test_bloom_filters_used "-- A/B" 3

ok 131 - use Bloom filters even if the latest graph does not have Bloom filters

expecting success of 4216.132 'setup - add commit-graph to the chain with Bloom filters': 
	test_commit c17 A/anotherFile3 &&
	git commit-graph write --reachable --changed-paths --split &&
	test_line_count = 3 .git/objects/info/commit-graphs/commit-graph-chain

[main 38770ff] c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A/anotherFile3
ok 132 - setup - add commit-graph to the chain with Bloom filters

expecting success of 4216.133 'Use Bloom filters if they exist in the latest but not all commit graphs in the chain.': 
	test_bloom_filters_used_when_some_filters_are_missing "-- A/B"

ok 133 - Use Bloom filters if they exist in the latest but not all commit graphs in the chain.

expecting success of 4216.134 'persist filter settings': 
	test_when_finished rm -rf .git/objects/info/commit-graph* &&
	rm -rf .git/objects/info/commit-graph* &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" \
		GIT_TEST_BLOOM_SETTINGS_NUM_HASHES=9 \
		GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY=15 \
		git commit-graph write --reachable --changed-paths &&
	grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15,\"max_changed_paths\":512" trace2.txt &&
	GIT_TRACE2_EVENT="$(pwd)/trace2-auto.txt" \
		git commit-graph write --reachable --changed-paths &&
	grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15,\"max_changed_paths\":512" trace2-auto.txt

{"event":"data_json","sid":"20221228T074653.407944Z-Hc64317c2-P00004b0b","thread":"main","time":"2022-12-28T07:46:53.469965Z","file":"commit-graph.c","line":1323,"repo":1,"t_abs":0.065142,"t_rel":0.000397,"nesting":2,"category":"bloom","key":"settings","value":{"hash_version":1,"num_hashes":9,"bits_per_entry":15,"max_changed_paths":512}}
{"event":"data_json","sid":"20221228T074653.502581Z-Hc64317c2-P00004b1f","thread":"main","time":"2022-12-28T07:46:53.544840Z","file":"commit-graph.c","line":1323,"repo":1,"t_abs":0.045248,"t_rel":0.000252,"nesting":2,"category":"bloom","key":"settings","value":{"hash_version":1,"num_hashes":9,"bits_per_entry":15,"max_changed_paths":512}}
ok 134 - persist filter settings

expecting success of 4216.135 'correctly report changes over limit': 
	git init limits &&
	(
		cd limits &&
		mkdir d &&
		mkdir d/e &&

		for i in $(test_seq 1 2)
		do
			printf $i >d/file$i.txt &&
			printf $i >d/e/file$i.txt || return 1
		done &&

		mkdir mode &&
		printf bash >mode/script.sh &&

		mkdir foo &&
		touch foo/bar &&
		touch foo.txt &&

		git add d foo foo.txt mode &&
		git commit -m "files" &&

		# Commit has 7 file and 4 directory adds
		GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS=10 \
			GIT_TRACE2_EVENT="$(pwd)/trace" \
			git commit-graph write --reachable --changed-paths &&
		test_max_changed_paths 10 trace &&
		test_filter_computed 1 trace &&
		test_filter_trunc_large 1 trace &&

		for path in $(git ls-tree -r --name-only HEAD)
		do
			git -c commitGraph.readChangedPaths=false log \
				-- $path >expect &&
			git log -- $path >actual &&
			test_cmp expect actual || return 1
		done &&

		# Make a variety of path changes
		printf new1 >d/e/file1.txt &&
		printf new2 >d/file2.txt &&
		rm d/e/file2.txt &&
		rm -r foo &&
		printf text >foo &&
		mkdir f &&
		printf new1 >f/file1.txt &&

		# including a mode-only change (counts as modified)
		git update-index --chmod=+x mode/script.sh &&

		git add foo d f &&
		git commit -m "complicated" &&

		# start from scratch and rebuild
		rm -f .git/objects/info/commit-graph &&
		GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS=10 \
			GIT_TRACE2_EVENT="$(pwd)/trace-edit" \
			git commit-graph write --reachable --changed-paths &&
		test_max_changed_paths 10 trace-edit &&
		test_filter_computed 2 trace-edit &&
		test_filter_trunc_large 2 trace-edit &&

		for path in $(git ls-tree -r --name-only HEAD)
		do
			git -c commitGraph.readChangedPaths=false log \
				-- $path >expect &&
			git log -- $path >actual &&
			test_cmp expect actual || return 1
		done &&

		# start from scratch and rebuild
		rm -f .git/objects/info/commit-graph &&
		GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS=11 \
			GIT_TRACE2_EVENT="$(pwd)/trace-update" \
			git commit-graph write --reachable --changed-paths &&
		test_max_changed_paths 11 trace-update &&
		test_filter_computed 2 trace-update &&
		test_filter_trunc_large 0 trace-update &&

		for path in $(git ls-tree -r --name-only HEAD)
		do
			git -c commitGraph.readChangedPaths=false log \
				-- $path >expect &&
			git log -- $path >actual &&
			test_cmp expect actual || return 1
		done
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/limits/.git/
[main (root-commit) cd6b1a6] files
 Author: A U Thor <author@example.com>
 7 files changed, 5 insertions(+)
 create mode 100644 d/e/file1.txt
 create mode 100644 d/e/file2.txt
 create mode 100644 d/file1.txt
 create mode 100644 d/file2.txt
 create mode 100644 foo.txt
 create mode 100644 foo/bar
 create mode 100644 mode/script.sh
{"event":"data_json","sid":"20221228T074653.818665Z-Hc64317c2-P00004b4f","thread":"main","time":"2022-12-28T07:46:53.843187Z","file":"commit-graph.c","line":1323,"repo":1,"t_abs":0.027401,"t_rel":0.000260,"nesting":2,"category":"bloom","key":"settings","value":{"hash_version":1,"num_hashes":7,"bits_per_entry":10,"max_changed_paths":10}}
{"event":"data","sid":"20221228T074653.818665Z-Hc64317c2-P00004b4f","thread":"main","time":"2022-12-28T07:46:53.841379Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.025576,"t_rel":0.025576,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"1"}
{"event":"data","sid":"20221228T074653.818665Z-Hc64317c2-P00004b4f","thread":"main","time":"2022-12-28T07:46:53.841874Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.026090,"t_rel":0.026090,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"1"}
[main 323b1c6] complicated
 Author: A U Thor <author@example.com>
 7 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 d/e/file2.txt
 create mode 100644 f/file1.txt
 create mode 100644 foo
 delete mode 100644 foo/bar
 mode change 100644 => 100755 mode/script.sh
{"event":"data_json","sid":"20221228T074654.719827Z-Hc64317c2-P00004bcb","thread":"main","time":"2022-12-28T07:46:54.746622Z","file":"commit-graph.c","line":1323,"repo":1,"t_abs":0.029992,"t_rel":0.000264,"nesting":2,"category":"bloom","key":"settings","value":{"hash_version":1,"num_hashes":7,"bits_per_entry":10,"max_changed_paths":10}}
{"event":"data","sid":"20221228T074654.719827Z-Hc64317c2-P00004bcb","thread":"main","time":"2022-12-28T07:46:54.744728Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.028068,"t_rel":0.028068,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074654.719827Z-Hc64317c2-P00004bcb","thread":"main","time":"2022-12-28T07:46:54.745428Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.028794,"t_rel":0.028794,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"2"}
{"event":"data_json","sid":"20221228T074655.421198Z-Hc64317c2-P00004c2d","thread":"main","time":"2022-12-28T07:46:55.447593Z","file":"commit-graph.c","line":1323,"repo":1,"t_abs":0.029479,"t_rel":0.000206,"nesting":2,"category":"bloom","key":"settings","value":{"hash_version":1,"num_hashes":7,"bits_per_entry":10,"max_changed_paths":11}}
{"event":"data","sid":"20221228T074655.421198Z-Hc64317c2-P00004c2d","thread":"main","time":"2022-12-28T07:46:55.445603Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.027460,"t_rel":0.027460,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074655.421198Z-Hc64317c2-P00004c2d","thread":"main","time":"2022-12-28T07:46:55.446356Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.028233,"t_rel":0.028233,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 135 - correctly report changes over limit

expecting success of 4216.136 'correctly report commits with no changed paths': 
	git init empty &&
	test_when_finished "rm -fr empty" &&
	(
		cd empty &&

		git commit --allow-empty -m "initial commit" &&

		GIT_TRACE2_EVENT="$(pwd)/trace.event" \
			git commit-graph write --reachable --changed-paths &&
		test_filter_computed 1 trace.event &&
		test_filter_not_computed 0 trace.event &&
		test_filter_trunc_empty 1 trace.event &&
		test_filter_trunc_large 0 trace.event
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/empty/.git/
[main (root-commit) 9c26810] initial commit
 Author: A U Thor <author@example.com>
{"event":"data","sid":"20221228T074656.212865Z-Hc64317c2-P00004ca7","thread":"main","time":"2022-12-28T07:46:56.232097Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.022301,"t_rel":0.022301,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"1"}
{"event":"data","sid":"20221228T074656.212865Z-Hc64317c2-P00004ca7","thread":"main","time":"2022-12-28T07:46:56.232315Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.022544,"t_rel":0.022544,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"0"}
{"event":"data","sid":"20221228T074656.212865Z-Hc64317c2-P00004ca7","thread":"main","time":"2022-12-28T07:46:56.232459Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.022690,"t_rel":0.022690,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"1"}
{"event":"data","sid":"20221228T074656.212865Z-Hc64317c2-P00004ca7","thread":"main","time":"2022-12-28T07:46:56.232592Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.022827,"t_rel":0.022827,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 136 - correctly report commits with no changed paths

expecting success of 4216.137 'Bloom generation is limited by --max-new-filters': 
	(
		cd limits &&
		test_commit c2 filter &&
		test_commit c3 filter &&
		test_commit c4 no-filter &&

		rm -f trace.event &&
		GIT_TRACE2_EVENT="$(pwd)/trace.event" \
			git commit-graph write --reachable --split=replace \
				--changed-paths --max-new-filters=2 &&

		test_filter_computed 2 trace.event &&
		test_filter_not_computed 3 trace.event &&
		test_filter_trunc_empty 0 trace.event &&
		test_filter_trunc_large 0 trace.event
	)

[main cd5d6de] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 filter
[main 461d681] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6810c95] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 no-filter
{"event":"data","sid":"20221228T074656.822293Z-Hc64317c2-P00004cec","thread":"main","time":"2022-12-28T07:46:56.844986Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.025725,"t_rel":0.025725,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074656.822293Z-Hc64317c2-P00004cec","thread":"main","time":"2022-12-28T07:46:56.845177Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.025936,"t_rel":0.025936,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"3"}
{"event":"data","sid":"20221228T074656.822293Z-Hc64317c2-P00004cec","thread":"main","time":"2022-12-28T07:46:56.845332Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.026087,"t_rel":0.026087,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"0"}
{"event":"data","sid":"20221228T074656.822293Z-Hc64317c2-P00004cec","thread":"main","time":"2022-12-28T07:46:56.845525Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.026287,"t_rel":0.026287,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 137 - Bloom generation is limited by --max-new-filters

expecting success of 4216.138 'Bloom generation backfills previously-skipped filters': 
	# Check specifying commitGraph.maxNewFilters over "git config" works.
	test_config -C limits commitGraph.maxNewFilters 1 &&
	(
		cd limits &&

		rm -f trace.event &&
		GIT_TRACE2_EVENT="$(pwd)/trace.event" \
			git commit-graph write --reachable --changed-paths \
				--split=replace &&
		test_filter_computed 1 trace.event &&
		test_filter_not_computed 4 trace.event &&
		test_filter_trunc_empty 0 trace.event &&
		test_filter_trunc_large 0 trace.event
	)

{"event":"data","sid":"20221228T074656.944796Z-Hc64317c2-P00004cfd","thread":"main","time":"2022-12-28T07:46:56.966466Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.024666,"t_rel":0.024666,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"1"}
{"event":"data","sid":"20221228T074656.944796Z-Hc64317c2-P00004cfd","thread":"main","time":"2022-12-28T07:46:56.966729Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.024946,"t_rel":0.024946,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"4"}
{"event":"data","sid":"20221228T074656.944796Z-Hc64317c2-P00004cfd","thread":"main","time":"2022-12-28T07:46:56.966888Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.025092,"t_rel":0.025092,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"0"}
{"event":"data","sid":"20221228T074656.944796Z-Hc64317c2-P00004cfd","thread":"main","time":"2022-12-28T07:46:56.967091Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.025306,"t_rel":0.025306,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 138 - Bloom generation backfills previously-skipped filters

expecting success of 4216.139 '--max-new-filters overrides configuration': 
	git init override &&
	test_when_finished "rm -fr override" &&
	test_config -C override commitGraph.maxNewFilters 2 &&
	(
		cd override &&
		test_commit one &&
		test_commit two &&

		rm -f trace.event &&
		GIT_TRACE2_EVENT="$(pwd)/trace.event" \
			git commit-graph write --reachable --changed-paths \
				--max-new-filters=1 &&
		test_filter_computed 1 trace.event &&
		test_filter_not_computed 1 trace.event &&
		test_filter_trunc_empty 0 trace.event &&
		test_filter_trunc_large 0 trace.event
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/override/.git/
[main (root-commit) ff67e84] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 7c5280f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
{"event":"data","sid":"20221228T074657.411965Z-Hc64317c2-P00004d3c","thread":"main","time":"2022-12-28T07:46:57.440517Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.032221,"t_rel":0.032221,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"1"}
{"event":"data","sid":"20221228T074657.411965Z-Hc64317c2-P00004d3c","thread":"main","time":"2022-12-28T07:46:57.440688Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.032406,"t_rel":0.032406,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"1"}
{"event":"data","sid":"20221228T074657.411965Z-Hc64317c2-P00004d3c","thread":"main","time":"2022-12-28T07:46:57.440819Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.032537,"t_rel":0.032537,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"0"}
{"event":"data","sid":"20221228T074657.411965Z-Hc64317c2-P00004d3c","thread":"main","time":"2022-12-28T07:46:57.440938Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.032657,"t_rel":0.032657,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 139 - --max-new-filters overrides configuration

expecting success of 4216.140 'Bloom generation backfills empty commits': 
	git init empty &&
	test_when_finished "rm -fr empty" &&
	(
		cd empty &&
		for i in $(test_seq 1 6)
		do
			git commit --allow-empty -m "$i" || return 1
		done &&

		# Generate Bloom filters for empty commits 1-6, two at a time.
		for i in $(test_seq 1 3)
		do
			rm -f trace.event &&
			GIT_TRACE2_EVENT="$(pwd)/trace.event" \
				git commit-graph write --reachable \
					--changed-paths --max-new-filters=2 &&
			test_filter_computed 2 trace.event &&
			test_filter_not_computed 4 trace.event &&
			test_filter_trunc_empty 2 trace.event &&
			test_filter_trunc_large 0 trace.event || return 1
		done &&

		# Finally, make sure that once all commits have filters, that
		# none are subsequently recomputed.
		rm -f trace.event &&
		GIT_TRACE2_EVENT="$(pwd)/trace.event" \
			git commit-graph write --reachable \
				--changed-paths --max-new-filters=2 &&
		test_filter_computed 0 trace.event &&
		test_filter_not_computed 6 trace.event &&
		test_filter_trunc_empty 0 trace.event &&
		test_filter_trunc_large 0 trace.event
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4216-log-bloom/empty/.git/
[main (root-commit) 36bf629] 1
 Author: A U Thor <author@example.com>
[main 73266b6] 2
 Author: A U Thor <author@example.com>
[main efbc158] 3
 Author: A U Thor <author@example.com>
[main f013c5f] 4
 Author: A U Thor <author@example.com>
[main 29fe1c6] 5
 Author: A U Thor <author@example.com>
[main 55bcad0] 6
 Author: A U Thor <author@example.com>
{"event":"data","sid":"20221228T074658.039125Z-Hc64317c2-P00004da6","thread":"main","time":"2022-12-28T07:46:58.066124Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.029871,"t_rel":0.029871,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074658.039125Z-Hc64317c2-P00004da6","thread":"main","time":"2022-12-28T07:46:58.066338Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.030104,"t_rel":0.030104,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"4"}
{"event":"data","sid":"20221228T074658.039125Z-Hc64317c2-P00004da6","thread":"main","time":"2022-12-28T07:46:58.066537Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.030295,"t_rel":0.030295,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"2"}
{"event":"data","sid":"20221228T074658.039125Z-Hc64317c2-P00004da6","thread":"main","time":"2022-12-28T07:46:58.066720Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.030490,"t_rel":0.030490,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
{"event":"data","sid":"20221228T074658.138392Z-Hc64317c2-P00004db7","thread":"main","time":"2022-12-28T07:46:58.164743Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.029389,"t_rel":0.029389,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074658.138392Z-Hc64317c2-P00004db7","thread":"main","time":"2022-12-28T07:46:58.164983Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.029659,"t_rel":0.029659,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"4"}
{"event":"data","sid":"20221228T074658.138392Z-Hc64317c2-P00004db7","thread":"main","time":"2022-12-28T07:46:58.165126Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.029811,"t_rel":0.029811,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"2"}
{"event":"data","sid":"20221228T074658.138392Z-Hc64317c2-P00004db7","thread":"main","time":"2022-12-28T07:46:58.165254Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.029941,"t_rel":0.029941,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
{"event":"data","sid":"20221228T074658.232588Z-Hc64317c2-P00004dc6","thread":"main","time":"2022-12-28T07:46:58.258614Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.029370,"t_rel":0.029370,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"2"}
{"event":"data","sid":"20221228T074658.232588Z-Hc64317c2-P00004dc6","thread":"main","time":"2022-12-28T07:46:58.258864Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.029651,"t_rel":0.029651,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"4"}
{"event":"data","sid":"20221228T074658.232588Z-Hc64317c2-P00004dc6","thread":"main","time":"2022-12-28T07:46:58.258999Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.029789,"t_rel":0.029789,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"2"}
{"event":"data","sid":"20221228T074658.232588Z-Hc64317c2-P00004dc6","thread":"main","time":"2022-12-28T07:46:58.259217Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.029988,"t_rel":0.029988,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
{"event":"data","sid":"20221228T074658.333262Z-Hc64317c2-P00004dda","thread":"main","time":"2022-12-28T07:46:58.355734Z","file":"commit-graph.c","line":1573,"repo":1,"t_abs":0.025599,"t_rel":0.025599,"nesting":1,"category":"commit-graph","key":"filter-computed","value":"0"}
{"event":"data","sid":"20221228T074658.333262Z-Hc64317c2-P00004dda","thread":"main","time":"2022-12-28T07:46:58.355955Z","file":"commit-graph.c","line":1575,"repo":1,"t_abs":0.025854,"t_rel":0.025854,"nesting":1,"category":"commit-graph","key":"filter-not-computed","value":"6"}
{"event":"data","sid":"20221228T074658.333262Z-Hc64317c2-P00004dda","thread":"main","time":"2022-12-28T07:46:58.356114Z","file":"commit-graph.c","line":1577,"repo":1,"t_abs":0.026016,"t_rel":0.026016,"nesting":1,"category":"commit-graph","key":"filter-trunc-empty","value":"0"}
{"event":"data","sid":"20221228T074658.333262Z-Hc64317c2-P00004dda","thread":"main","time":"2022-12-28T07:46:58.356247Z","file":"commit-graph.c","line":1579,"repo":1,"t_abs":0.026147,"t_rel":0.026147,"nesting":1,"category":"commit-graph","key":"filter-trunc-large","value":"0"}
ok 140 - Bloom generation backfills empty commits

# passed all 140 test(s)
1..140
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5200-update-server-info.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5200-update-server-info/.git/
expecting success of 5200.1 'setup': test_commit file
[master (root-commit) 4c1911f] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
ok 1 - setup

expecting success of 5200.2 'create info/refs': 
	git update-server-info &&
	test_path_is_file .git/info/refs

ok 2 - create info/refs

expecting success of 5200.3 'modify and store mtime': 
	test-tool chmtime =0 .git/info/refs &&
	test-tool chmtime --get .git/info/refs >a

ok 3 - modify and store mtime

expecting success of 5200.4 'info/refs is not needlessly overwritten': 
	git update-server-info &&
	test-tool chmtime --get .git/info/refs >b &&
	test_cmp a b

ok 4 - info/refs is not needlessly overwritten

expecting success of 5200.5 'info/refs can be forced to update': 
	git update-server-info -f &&
	test-tool chmtime --get .git/info/refs >b &&
	! test_cmp a b

--- a	2022-12-28 07:46:59.773084899 +0000
+++ b	2022-12-28 07:46:59.888089127 +0000
@@ -1 +1 @@
-0
+1672213619
ok 5 - info/refs can be forced to update

expecting success of 5200.6 'info/refs updates when changes are made': 
	test-tool chmtime =0 .git/info/refs &&
	test-tool chmtime --get .git/info/refs >b &&
	test_cmp a b &&
	git update-ref refs/heads/foo HEAD &&
	git update-server-info &&
	test-tool chmtime --get .git/info/refs >b &&
	! test_cmp a b

--- a	2022-12-28 07:46:59.773084899 +0000
+++ b	2022-12-28 07:47:00.033094457 +0000
@@ -1 +1 @@
-0
+1672213620
ok 6 - info/refs updates when changes are made

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5150-request-pull.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/.git/
expecting success of 5150.1 'setup': 

	git init --bare upstream.git &&
	git init --bare downstream.git &&
	git clone upstream.git upstream-private &&
	git clone downstream.git local &&

	trash_url="file://$TRASH_DIRECTORY" &&
	downstream_url="$trash_url/downstream.git/" &&
	upstream_url="$trash_url/upstream.git/" &&

	(
		cd upstream-private &&
		cat <<-\EOT >mnemonic.txt &&
		Thirtey days hath November,
		Aprile, June, and September:
		EOT
		git add mnemonic.txt &&
		test_tick &&
		git commit -m "\"Thirty days\", a reminder of month lengths" &&
		git tag -m "version 1" -a initial &&
		git push --tags origin main
	) &&
	(
		cd local &&
		git remote add upstream "$trash_url/upstream.git" &&
		git fetch upstream &&
		git pull upstream main &&
		cat <<-\EOT >>mnemonic.txt &&
		Of twyecescore-eightt is but eine,
		And all the remnante be thrycescore-eine.
		O’course Leap yare comes an’pynes,
		Ev’rie foure yares, gote it ryghth.
		An’twyecescore-eight is but twyecescore-nyne.
		EOT
		git add mnemonic.txt &&
		test_tick &&
		git commit -m "More detail" &&
		git tag -m "version 2" -a full &&
		git checkout -b simplify HEAD^ &&
		mv mnemonic.txt mnemonic.standard &&
		cat <<-\EOT >mnemonic.clarified &&
		Thirty days has September,
		All the rest I can’t remember.
		EOT
		git add -N mnemonic.standard mnemonic.clarified &&
		git commit -a -m "Adapt to use modern, simpler English

But keep the old version, too, in case some people prefer it." &&
		git checkout main
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/upstream.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Cloning into 'upstream-private'...
warning: You appear to have cloned an empty repository.
done.
Cloning into 'local'...
warning: You appear to have cloned an empty repository.
done.
[main (root-commit) 7244768] "Thirty days", a reminder of month lengths
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 mnemonic.txt
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/upstream.git
 * [new branch]      main -> main
 * [new tag]         initial -> initial
From file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/upstream
 * [new branch]      main       -> upstream/main
 * [new tag]         initial    -> initial
From file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/upstream
 * branch            main       -> FETCH_HEAD
[main cc0f4ce] More detail
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
Switched to a new branch 'simplify'
[simplify 6fa5b4f] Adapt to use modern, simpler English
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 mnemonic.clarified
 rename mnemonic.txt => mnemonic.standard (100%)
Switched to branch 'main'
Your branch is based on 'origin/main', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
ok 1 - setup

expecting success of 5150.2 'setup: two scripts for reading pull requests': 

	downstream_url_for_sed=$(
		printf "%s\n" "$downstream_url" |
		sed -e 's/\\/\\\\/g' -e 's/[[/.*^$]/\\&/g'
	) &&

	cat <<-\EOT >read-request.sed &&
	#!/bin/sed -nf
	# Note that a request could ask for "tag $tagname"
	/ in the Git repository at:$/!d
	n
	/^$/ n
	s/ tag \([^ ]*\)$/ tag--\1/
	s/^[ 	]*\(.*\) \([^ ]*\)/please pull\
	\1\
	\2/p
	q
	EOT

	cat <<-EOT >fuzz.sed
	#!/bin/sed -nf
	s/$downstream_url_for_sed/URL/g
	s/$OID_REGEX/OBJECT_NAME/g
	s/A U Thor/AUTHOR/g
	s/[-0-9]\{10\} [:0-9]\{8\} [-+][0-9]\{4\}/DATE/g
	s/        [^ ].*/        SUBJECT/g
	s/  [^ ].* (DATE)/  SUBJECT (DATE)/g
	s|tags/full|BRANCH|g
	s/mnemonic.txt/FILENAME/g
	s/^version [0-9]/VERSION/
	/^ FILENAME | *[0-9]* [-+]*\$/ b diffstat
	/^AUTHOR ([0-9]*):\$/ b shortlog
	p
	b
	: diffstat
	n
	/ [0-9]* files* changed/ {
		a\\
	DIFFSTAT
		b
	}
	b diffstat
	: shortlog
	/^        [a-zA-Z]/ n
	/^[a-zA-Z]* ([0-9]*):\$/ n
	/^\$/ N
	/^\n[a-zA-Z]* ([0-9]*):\$/!{
		a\\
	SHORTLOG
		D
	}
	n
	b shortlog
	EOT


ok 2 - setup: two scripts for reading pull requests

expecting success of 5150.3 'pull request when forgot to push': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		test_must_fail git request-pull initial "$downstream_url" \
			2>../err
	) &&
	grep "No match for commit .*" err &&
	grep "Are you sure you pushed" err


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
The following changes since commit 7244768f7e34b5fbdf65e26dda6c138d29596555:

  "Thirty days", a reminder of month lengths (2005-04-07 15:13:13 -0700)

are available in the Git repository at:

  file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ 

for you to fetch changes up to cc0f4cedef2d8246b90a5255caa6a61ad760ad56:

  More detail (2005-04-07 15:13:13 -0700)

----------------------------------------------------------------
A U Thor (1):
      More detail

 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
warn: No match for commit cc0f4cedef2d8246b90a5255caa6a61ad760ad56 found at file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
warn: Are you sure you pushed 'HEAD' there?
ok 3 - pull request when forgot to push

expecting success of 5150.4 'pull request after push': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git push origin main:for-upstream &&
		git request-pull initial origin main:for-upstream >../request
	) &&
	sed -nf read-request.sed <request >digest &&
	{
		read task &&
		read repository &&
		read branch
	} <digest &&
	(
		cd upstream-private &&
		git checkout initial &&
		git pull --ff-only "$repository" "$branch"
	) &&
	test "$branch" = for-upstream &&
	test_cmp local/mnemonic.txt upstream-private/mnemonic.txt


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new branch]      main -> for-upstream
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7244768 "Thirty days", a reminder of month lengths
From /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream
 * branch            for-upstream -> FETCH_HEAD
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
ok 4 - pull request after push

expecting success of 5150.5 'request asks HEAD to be pulled': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git push --tags origin main simplify &&
		git push origin main:for-upstream &&
		git request-pull initial "$downstream_url" >../request
	) &&
	sed -nf read-request.sed <request >digest &&
	{
		read task &&
		read repository &&
		read branch
	} <digest &&
	test -z "$branch"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new branch]      main -> main
 * [new branch]      simplify -> simplify
 * [new tag]         full -> full
 * [new tag]         initial -> initial
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new branch]      main -> for-upstream
ok 5 - request asks HEAD to be pulled

expecting success of 5150.6 'pull request format': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	cat <<-\EOT >expect &&
	The following changes since commit OBJECT_NAME:

	  SUBJECT (DATE)

	are available in the Git repository at:

	  URL BRANCH

	for you to fetch changes up to OBJECT_NAME:

	  SUBJECT (DATE)

	----------------------------------------------------------------
	VERSION

	----------------------------------------------------------------
	SHORTLOG

	DIFFSTAT
	EOT
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git push origin tags/full &&
		git request-pull initial "$downstream_url" tags/full >../request
	) &&
	<request sed -nf fuzz.sed >request.fuzzy &&
	test_cmp expect request.fuzzy &&

	(
		cd local &&
		git request-pull initial "$downstream_url" tags/full:refs/tags/full
	) >request &&
	sed -nf fuzz.sed <request >request.fuzzy &&
	test_cmp expect request.fuzzy &&

	(
		cd local &&
		git request-pull initial "$downstream_url" full
	) >request &&
	grep " tags/full\$" request

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new tag]         full -> full
  file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ tags/full
ok 6 - pull request format

expecting success of 5150.7 'request-pull ignores OPTIONS_KEEPDASHDASH poison': 

	(
		cd local &&
		OPTIONS_KEEPDASHDASH=Yes &&
		export OPTIONS_KEEPDASHDASH &&
		git checkout initial &&
		git merge --ff-only main &&
		git push origin main:for-upstream &&
		git request-pull -- initial "$downstream_url" main:for-upstream >../request
	)


Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new branch]      main -> for-upstream
ok 7 - request-pull ignores OPTIONS_KEEPDASHDASH poison

expecting success of 5150.8 'request-pull quotes regex metacharacters properly': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git tag -mrelease v2.0 &&
		git push origin refs/tags/v2.0:refs/tags/v2-0 &&
		test_must_fail git request-pull initial "$downstream_url" tags/v2.0 \
			2>../err
	) &&
	grep "No match for commit .*" err &&
	grep "Are you sure you pushed" err


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new tag]         v2.0 -> v2-0
The following changes since commit 7244768f7e34b5fbdf65e26dda6c138d29596555:

  "Thirty days", a reminder of month lengths (2005-04-07 15:13:13 -0700)

are available in the Git repository at:

  file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ tags/v2.0

for you to fetch changes up to cc0f4cedef2d8246b90a5255caa6a61ad760ad56:

  More detail (2005-04-07 15:13:13 -0700)

----------------------------------------------------------------
release

----------------------------------------------------------------
A U Thor (1):
      More detail

 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
warn: No match for commit cc0f4cedef2d8246b90a5255caa6a61ad760ad56 found at file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
warn: Are you sure you pushed 'tags/v2.0' there?
ok 8 - request-pull quotes regex metacharacters properly

expecting success of 5150.9 'pull request with mismatched object': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git push origin HEAD:refs/tags/full &&
		test_must_fail git request-pull initial "$downstream_url" tags/full \
			2>../err
	) &&
	grep "points to a different object" err &&
	grep "Are you sure you pushed" err


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new tag]         HEAD -> full
The following changes since commit 7244768f7e34b5fbdf65e26dda6c138d29596555:

  "Thirty days", a reminder of month lengths (2005-04-07 15:13:13 -0700)

are available in the Git repository at:

  file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ tags/full

for you to fetch changes up to cc0f4cedef2d8246b90a5255caa6a61ad760ad56:

  More detail (2005-04-07 15:13:13 -0700)

----------------------------------------------------------------
version 2

----------------------------------------------------------------
A U Thor (1):
      More detail

 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
warn: refs/tags/full found at file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ but points to a different object
warn: Are you sure you pushed 'tags/full' there?
ok 9 - pull request with mismatched object

expecting success of 5150.10 'pull request with stale object': 

	rm -fr downstream.git &&
	git init --bare downstream.git &&
	(
		cd local &&
		git checkout initial &&
		git merge --ff-only main &&
		git push origin refs/tags/full &&
		git tag -f -m"Thirty-one days" full &&
		test_must_fail git request-pull initial "$downstream_url" tags/full \
			2>../err
	) &&
	grep "points to a different object" err &&
	grep "Are you sure you pushed" err


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/
Previous HEAD position was cc0f4ce More detail
HEAD is now at 7244768 "Thirty days", a reminder of month lengths
Updating 7244768..cc0f4ce
Fast-forward
 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git
 * [new tag]         full -> full
Updated tag 'full' (was a82f848)
The following changes since commit 7244768f7e34b5fbdf65e26dda6c138d29596555:

  "Thirty days", a reminder of month lengths (2005-04-07 15:13:13 -0700)

are available in the Git repository at:

  file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ tags/full

for you to fetch changes up to cc0f4cedef2d8246b90a5255caa6a61ad760ad56:

  More detail (2005-04-07 15:13:13 -0700)

----------------------------------------------------------------
Thirty-one days

----------------------------------------------------------------
A U Thor (1):
      More detail

 mnemonic.txt | 5 +++++
 1 file changed, 5 insertions(+)
warn: refs/tags/full found at file:///<<PKGBUILDDIR>>/t/trash directory.t5150-request-pull/downstream.git/ but points to a different object
warn: Are you sure you pushed 'tags/full' there?
ok 10 - pull request with stale object

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5301-sliding-window.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5301-sliding-window/.git/
expecting success of 5301.1 'setup': rm -f .git/index* &&
     for i in a b c
     do
         echo $i >$i &&
	 test-tool genrandom "$i" 32768 >>$i &&
         git update-index --add $i || return 1
     done &&
     echo d >d && cat c >>d && git update-index --add d &&
     tree=$(git write-tree) &&
     commit1=$(git commit-tree $tree </dev/null) &&
     git update-ref HEAD $commit1 &&
     git repack -a -d &&
     test "$(git count-objects)" = "0 objects, 0 kilobytes" &&
     pack1=$(ls .git/objects/pack/*.pack) &&
     test -f "$pack1"
ok 1 - setup

expecting success of 5301.2 'verify-pack -v, defaults': git verify-pack -v "$pack1"
3b60f63a6ae089462c1536850930bc628b471412 commit 163 123 12
d67b2ae81f0bd18212d239b6a965711041f73739 blob   32770 32789 135
7c0c57f15aee3c4cbe243c44d3c01ecfa949bb25 blob   32770 32789 32924
f76f6b9f6aed8209a40d300bf7dcb4fcf9863531 blob   32772 32791 65713
556c804eac998cc8fa89f225a29870c3d873477b blob   10 22 98504 1 f76f6b9f6aed8209a40d300bf7dcb4fcf9863531
b7fabea4d93049ea90d45d8252b9a4f8ee7c9c2c tree   116 115 98526
non delta: 5 objects
chain length = 1: 1 object
.git/objects/pack/pack-c862960b478b09c10c646708a768add215077ffb.pack: ok
ok 2 - verify-pack -v, defaults

expecting success of 5301.3 'verify-pack -v, packedGitWindowSize == 1 page': git config core.packedGitWindowSize 512 &&
     git verify-pack -v "$pack1"
3b60f63a6ae089462c1536850930bc628b471412 commit 163 123 12
d67b2ae81f0bd18212d239b6a965711041f73739 blob   32770 32789 135
7c0c57f15aee3c4cbe243c44d3c01ecfa949bb25 blob   32770 32789 32924
f76f6b9f6aed8209a40d300bf7dcb4fcf9863531 blob   32772 32791 65713
556c804eac998cc8fa89f225a29870c3d873477b blob   10 22 98504 1 f76f6b9f6aed8209a40d300bf7dcb4fcf9863531
b7fabea4d93049ea90d45d8252b9a4f8ee7c9c2c tree   116 115 98526
non delta: 5 objects
chain length = 1: 1 object
.git/objects/pack/pack-c862960b478b09c10c646708a768add215077ffb.pack: ok
ok 3 - verify-pack -v, packedGitWindowSize == 1 page

expecting success of 5301.4 'verify-pack -v, packedGit{WindowSize,Limit} == 1 page': git config core.packedGitWindowSize 512 &&
     git config core.packedGitLimit 512 &&
     git verify-pack -v "$pack1"
3b60f63a6ae089462c1536850930bc628b471412 commit 163 123 12
d67b2ae81f0bd18212d239b6a965711041f73739 blob   32770 32789 135
7c0c57f15aee3c4cbe243c44d3c01ecfa949bb25 blob   32770 32789 32924
f76f6b9f6aed8209a40d300bf7dcb4fcf9863531 blob   32772 32791 65713
556c804eac998cc8fa89f225a29870c3d873477b blob   10 22 98504 1 f76f6b9f6aed8209a40d300bf7dcb4fcf9863531
b7fabea4d93049ea90d45d8252b9a4f8ee7c9c2c tree   116 115 98526
non delta: 5 objects
chain length = 1: 1 object
.git/objects/pack/pack-c862960b478b09c10c646708a768add215077ffb.pack: ok
ok 4 - verify-pack -v, packedGit{WindowSize,Limit} == 1 page

expecting success of 5301.5 'repack -a -d, packedGit{WindowSize,Limit} == 1 page': git config core.packedGitWindowSize 512 &&
     git config core.packedGitLimit 512 &&
     commit2=$(git commit-tree $tree -p $commit1 </dev/null) &&
     git update-ref HEAD $commit2 &&
     git repack -a -d &&
     test "$(git count-objects)" = "0 objects, 0 kilobytes" &&
     pack2=$(ls .git/objects/pack/*.pack) &&
     test -f "$pack2" &&
     test "$pack1" \!= "$pack2"
ok 5 - repack -a -d, packedGit{WindowSize,Limit} == 1 page

expecting success of 5301.6 'verify-pack -v, defaults': git config --unset core.packedGitWindowSize &&
     git config --unset core.packedGitLimit &&
     git verify-pack -v "$pack2"
18387a63ae69bf35f4c71d97190d0ac78c135dbc commit 211 153 12
3b60f63a6ae089462c1536850930bc628b471412 commit 9 20 165 1 18387a63ae69bf35f4c71d97190d0ac78c135dbc
d67b2ae81f0bd18212d239b6a965711041f73739 blob   32770 32789 185
7c0c57f15aee3c4cbe243c44d3c01ecfa949bb25 blob   32770 32789 32974
f76f6b9f6aed8209a40d300bf7dcb4fcf9863531 blob   32772 32791 65763
556c804eac998cc8fa89f225a29870c3d873477b blob   10 22 98554 1 f76f6b9f6aed8209a40d300bf7dcb4fcf9863531
b7fabea4d93049ea90d45d8252b9a4f8ee7c9c2c tree   116 115 98576
non delta: 5 objects
chain length = 1: 2 objects
.git/objects/pack/pack-2f02d879c6fc547b007694422ca84c5228e10f68.pack: ok
ok 6 - verify-pack -v, defaults

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5004-archive-corner-cases.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5004-archive-corner-cases/.git/
expecting success of 5004.1 'create commit with empty tree and fake empty tar': 
	git commit --allow-empty -m foo &&
	perl -e "print \"\\0\" x 10240" >10knuls.tar

[master (root-commit) 2093db0] foo
 Author: A U Thor <author@example.com>
ok 1 - create commit with empty tree and fake empty tar

expecting success of 5004.2 'tar archive of commit with empty tree': 
	git archive --format=tar HEAD >empty-with-pax-header.tar &&
	make_dir extract &&
	"$TAR" xf empty-with-pax-header.tar -C extract &&
	check_dir extract

ok 2 - tar archive of commit with empty tree

expecting success of 5004.3 'tar archive of empty tree is empty': 
	git archive --format=tar HEAD: >empty.tar &&
	test_cmp_bin 10knuls.tar empty.tar

ok 3 - tar archive of empty tree is empty

expecting success of 5004.4 'tar archive of empty tree with prefix': 
	git archive --format=tar --prefix=foo/ HEAD >prefix.tar &&
	make_dir extract &&
	"$TAR" xf prefix.tar -C extract &&
	check_dir extract foo

ok 4 - tar archive of empty tree with prefix

checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 5004.5 'zip archive of empty tree is empty': 
	# Detect the exit code produced when our particular flavor of unzip
	# sees an empty archive. Infozip will generate a warning and exit with
	# code 1. But in the name of sanity, we do not expect other unzip
	# implementations to do the same thing (it would be perfectly
	# reasonable to exit 0, for example).
	#
	# This makes our test less rigorous on some platforms (unzip may not
	# handle the empty repo at all, making our later check of its exit code
	# a no-op). But we cannot do anything reasonable except skip the test
	# on such platforms anyway, and this is the moral equivalent.
	{
		"$GIT_UNZIP" "$TEST_DIRECTORY"/t5004/empty.zip
		expect_code=$?
	} &&

	git archive --format=zip HEAD >empty.zip &&
	make_dir extract &&
	(
		cd extract &&
		test_expect_code $expect_code "$GIT_UNZIP" ../empty.zip
	) &&
	check_dir extract

Archive:  /<<PKGBUILDDIR>>/t/t5004/empty.zip
fc8e0d59c1cc5c14b6919fb2006b27fe337e7d0e
warning [/<<PKGBUILDDIR>>/t/t5004/empty.zip]:  zipfile is empty
Archive:  ../empty.zip
2093db06f424f426e05da2ca90f40d2663e89387
warning [../empty.zip]:  zipfile is empty
ok 5 - zip archive of empty tree is empty

expecting success of 5004.6 'zip archive of empty tree with prefix': 
	# We do not have to play exit-code tricks here, because our
	# result should not be empty; it has a directory in it.
	git archive --format=zip --prefix=foo/ HEAD >prefix.zip &&
	make_dir extract &&
	(
		cd extract &&
		"$GIT_UNZIP" ../prefix.zip
	) &&
	check_dir extract foo

Archive:  ../prefix.zip
2093db06f424f426e05da2ca90f40d2663e89387
   creating: foo/
ok 6 - zip archive of empty tree with prefix

expecting success of 5004.7 'archive complains about pathspec on empty tree': 
	test_must_fail git archive --format=tar HEAD -- foo >/dev/null

fatal: pathspec 'foo' did not match any files
ok 7 - archive complains about pathspec on empty tree

expecting success of 5004.8 'create a commit with an empty subtree': 
	empty_tree=$(git hash-object -t tree /dev/null) &&
	root_tree=$(printf "040000 tree $empty_tree\tsub\n" | git mktree)

ok 8 - create a commit with an empty subtree

expecting success of 5004.9 'archive empty subtree with no pathspec': 
	git archive --format=tar $root_tree >subtree-all.tar &&
	test_cmp_bin 10knuls.tar subtree-all.tar

ok 9 - archive empty subtree with no pathspec

expecting success of 5004.10 'archive empty subtree by direct pathspec': 
	git archive --format=tar $root_tree -- sub >subtree-path.tar &&
	test_cmp_bin 10knuls.tar subtree-path.tar

ok 10 - archive empty subtree by direct pathspec

checking prerequisite: ZIPINFO

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ZIPINFO" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ZIPINFO" &&
	n=$("$ZIPINFO" "$TEST_DIRECTORY"/t5004/empty.zip | sed -n "2s/.* //p")
	test "x$n" = "x0"

)
prerequisite ZIPINFO ok
expecting success of 5004.11 'zip archive with many entries': 
	# add a directory with 256 files
	mkdir 00 &&
	for a in 0 1 2 3 4 5 6 7 8 9 a b c d e f
	do
		for b in 0 1 2 3 4 5 6 7 8 9 a b c d e f
		do
			: >00/$a$b || return 1
		done
	done &&
	git add 00 &&
	git commit -m "256 files in 1 directory" &&

	# duplicate it to get 65536 files in 256 directories
	subtree=$(git write-tree --prefix=00/) &&
	for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f
	do
		for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f
		do
			echo "040000 tree $subtree	$c$d" || return 1
		done
	done >tree &&
	tree=$(git mktree <tree) &&

	# zip them
	git archive -o many.zip $tree &&

	# check the number of entries in the ZIP file directory
	expr 65536 + 256 >expect &&
	"$ZIPINFO" -h many.zip >zipinfo &&
	sed -n "2s/.* //p" <zipinfo >actual &&
	test_cmp expect actual

[master 3c2fce3] 256 files in 1 directory
 Author: A U Thor <author@example.com>
 256 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 00/00
 create mode 100644 00/01
 create mode 100644 00/02
 create mode 100644 00/03
 create mode 100644 00/04
 create mode 100644 00/05
 create mode 100644 00/06
 create mode 100644 00/07
 create mode 100644 00/08
 create mode 100644 00/09
 create mode 100644 00/0a
 create mode 100644 00/0b
 create mode 100644 00/0c
 create mode 100644 00/0d
 create mode 100644 00/0e
 create mode 100644 00/0f
 create mode 100644 00/10
 create mode 100644 00/11
 create mode 100644 00/12
 create mode 100644 00/13
 create mode 100644 00/14
 create mode 100644 00/15
 create mode 100644 00/16
 create mode 100644 00/17
 create mode 100644 00/18
 create mode 100644 00/19
 create mode 100644 00/1a
 create mode 100644 00/1b
 create mode 100644 00/1c
 create mode 100644 00/1d
 create mode 100644 00/1e
 create mode 100644 00/1f
 create mode 100644 00/20
 create mode 100644 00/21
 create mode 100644 00/22
 create mode 100644 00/23
 create mode 100644 00/24
 create mode 100644 00/25
 create mode 100644 00/26
 create mode 100644 00/27
 create mode 100644 00/28
 create mode 100644 00/29
 create mode 100644 00/2a
 create mode 100644 00/2b
 create mode 100644 00/2c
 create mode 100644 00/2d
 create mode 100644 00/2e
 create mode 100644 00/2f
 create mode 100644 00/30
 create mode 100644 00/31
 create mode 100644 00/32
 create mode 100644 00/33
 create mode 100644 00/34
 create mode 100644 00/35
 create mode 100644 00/36
 create mode 100644 00/37
 create mode 100644 00/38
 create mode 100644 00/39
 create mode 100644 00/3a
 create mode 100644 00/3b
 create mode 100644 00/3c
 create mode 100644 00/3d
 create mode 100644 00/3e
 create mode 100644 00/3f
 create mode 100644 00/40
 create mode 100644 00/41
 create mode 100644 00/42
 create mode 100644 00/43
 create mode 100644 00/44
 create mode 100644 00/45
 create mode 100644 00/46
 create mode 100644 00/47
 create mode 100644 00/48
 create mode 100644 00/49
 create mode 100644 00/4a
 create mode 100644 00/4b
 create mode 100644 00/4c
 create mode 100644 00/4d
 create mode 100644 00/4e
 create mode 100644 00/4f
 create mode 100644 00/50
 create mode 100644 00/51
 create mode 100644 00/52
 create mode 100644 00/53
 create mode 100644 00/54
 create mode 100644 00/55
 create mode 100644 00/56
 create mode 100644 00/57
 create mode 100644 00/58
 create mode 100644 00/59
 create mode 100644 00/5a
 create mode 100644 00/5b
 create mode 100644 00/5c
 create mode 100644 00/5d
 create mode 100644 00/5e
 create mode 100644 00/5f
 create mode 100644 00/60
 create mode 100644 00/61
 create mode 100644 00/62
 create mode 100644 00/63
 create mode 100644 00/64
 create mode 100644 00/65
 create mode 100644 00/66
 create mode 100644 00/67
 create mode 100644 00/68
 create mode 100644 00/69
 create mode 100644 00/6a
 create mode 100644 00/6b
 create mode 100644 00/6c
 create mode 100644 00/6d
 create mode 100644 00/6e
 create mode 100644 00/6f
 create mode 100644 00/70
 create mode 100644 00/71
 create mode 100644 00/72
 create mode 100644 00/73
 create mode 100644 00/74
 create mode 100644 00/75
 create mode 100644 00/76
 create mode 100644 00/77
 create mode 100644 00/78
 create mode 100644 00/79
 create mode 100644 00/7a
 create mode 100644 00/7b
 create mode 100644 00/7c
 create mode 100644 00/7d
 create mode 100644 00/7e
 create mode 100644 00/7f
 create mode 100644 00/80
 create mode 100644 00/81
 create mode 100644 00/82
 create mode 100644 00/83
 create mode 100644 00/84
 create mode 100644 00/85
 create mode 100644 00/86
 create mode 100644 00/87
 create mode 100644 00/88
 create mode 100644 00/89
 create mode 100644 00/8a
 create mode 100644 00/8b
 create mode 100644 00/8c
 create mode 100644 00/8d
 create mode 100644 00/8e
 create mode 100644 00/8f
 create mode 100644 00/90
 create mode 100644 00/91
 create mode 100644 00/92
 create mode 100644 00/93
 create mode 100644 00/94
 create mode 100644 00/95
 create mode 100644 00/96
 create mode 100644 00/97
 create mode 100644 00/98
 create mode 100644 00/99
 create mode 100644 00/9a
 create mode 100644 00/9b
 create mode 100644 00/9c
 create mode 100644 00/9d
 create mode 100644 00/9e
 create mode 100644 00/9f
 create mode 100644 00/a0
 create mode 100644 00/a1
 create mode 100644 00/a2
 create mode 100644 00/a3
 create mode 100644 00/a4
 create mode 100644 00/a5
 create mode 100644 00/a6
 create mode 100644 00/a7
 create mode 100644 00/a8
 create mode 100644 00/a9
 create mode 100644 00/aa
 create mode 100644 00/ab
 create mode 100644 00/ac
 create mode 100644 00/ad
 create mode 100644 00/ae
 create mode 100644 00/af
 create mode 100644 00/b0
 create mode 100644 00/b1
 create mode 100644 00/b2
 create mode 100644 00/b3
 create mode 100644 00/b4
 create mode 100644 00/b5
 create mode 100644 00/b6
 create mode 100644 00/b7
 create mode 100644 00/b8
 create mode 100644 00/b9
 create mode 100644 00/ba
 create mode 100644 00/bb
 create mode 100644 00/bc
 create mode 100644 00/bd
 create mode 100644 00/be
 create mode 100644 00/bf
 create mode 100644 00/c0
 create mode 100644 00/c1
 create mode 100644 00/c2
 create mode 100644 00/c3
 create mode 100644 00/c4
 create mode 100644 00/c5
 create mode 100644 00/c6
 create mode 100644 00/c7
 create mode 100644 00/c8
 create mode 100644 00/c9
 create mode 100644 00/ca
 create mode 100644 00/cb
 create mode 100644 00/cc
 create mode 100644 00/cd
 create mode 100644 00/ce
 create mode 100644 00/cf
 create mode 100644 00/d0
 create mode 100644 00/d1
 create mode 100644 00/d2
 create mode 100644 00/d3
 create mode 100644 00/d4
 create mode 100644 00/d5
 create mode 100644 00/d6
 create mode 100644 00/d7
 create mode 100644 00/d8
 create mode 100644 00/d9
 create mode 100644 00/da
 create mode 100644 00/db
 create mode 100644 00/dc
 create mode 100644 00/dd
 create mode 100644 00/de
 create mode 100644 00/df
 create mode 100644 00/e0
 create mode 100644 00/e1
 create mode 100644 00/e2
 create mode 100644 00/e3
 create mode 100644 00/e4
 create mode 100644 00/e5
 create mode 100644 00/e6
 create mode 100644 00/e7
 create mode 100644 00/e8
 create mode 100644 00/e9
 create mode 100644 00/ea
 create mode 100644 00/eb
 create mode 100644 00/ec
 create mode 100644 00/ed
 create mode 100644 00/ee
 create mode 100644 00/ef
 create mode 100644 00/f0
 create mode 100644 00/f1
 create mode 100644 00/f2
 create mode 100644 00/f3
 create mode 100644 00/f4
 create mode 100644 00/f5
 create mode 100644 00/f6
 create mode 100644 00/f7
 create mode 100644 00/f8
 create mode 100644 00/f9
 create mode 100644 00/fa
 create mode 100644 00/fb
 create mode 100644 00/fc
 create mode 100644 00/fd
 create mode 100644 00/fe
 create mode 100644 00/ff
ok 11 - zip archive with many entries

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
checking prerequisite: UNZIP_ZIP64_SUPPORT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_ZIP64_SUPPORT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP_ZIP64_SUPPORT" &&
	"$GIT_UNZIP" -v | grep ZIP64_SUPPORT

)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
prerequisite UNZIP_ZIP64_SUPPORT ok
ok 12 # skip zip archive bigger than 4GB (missing EXPENSIVE of EXPENSIVE,UNZIP,UNZIP_ZIP64_SUPPORT)

checking prerequisite: LONG_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-LONG_IS_64BIT" &&
	test 8 -le "$(build_option sizeof-long)"

)
prerequisite LONG_IS_64BIT not satisfied
ok 13 # skip zip archive with files bigger than 4GB (missing LONG_IS_64BIT,EXPENSIVE of EXPENSIVE,LONG_IS_64BIT,UNZIP,UNZIP_ZIP64_SUPPORT,ZIPINFO)

expecting success of 5004.14 'tar archive with long paths': 
	blob=$(echo foo | git hash-object -w --stdin) &&
	tree=$(build_tree $blob | git mktree) &&
	git archive -o long_paths.tar $tree

ok 14 - tar archive with long paths

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t4255-am-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/.git/
expecting success of 4255.1 'am: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Applying: Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - am: added submodule creates empty directory

expecting success of 4255.2 'am: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Applying: Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - am: added submodule leaves existing empty directory alone

expecting success of 4255.3 'am: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Applying: Revert "Replace sub1 with file"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - am: replace tracked file with submodule creates empty directory

expecting success of 4255.4 'am: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Applying: Revert "Replace sub1 with directory"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - am: replace directory with submodule

expecting success of 4255.5 'am: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Applying: Revert "Add sub1"
ok 5 - am: removed submodule leaves submodule directory and its contents in place

expecting success of 4255.6 'am: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Applying: Revert "Add sub1"
ok 6 - am: removed submodule leaves submodule containing a .git directory alone

expecting success of 4255.7 'am: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: sub1/file1: already exists in working directory
error: sub1/file2: already exists in working directory
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Replace sub1 with directory
Patch failed at 0001 Replace sub1 with directory
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 7 - am: replace submodule with a directory must fail

expecting success of 4255.8 'am: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: sub1/file1: already exists in working directory
error: sub1/file2: already exists in working directory
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Replace sub1 with directory
Patch failed at 0001 Replace sub1 with directory
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 8 - am: replace submodule containing a .git directory with a directory must fail

checking known breakage of 4255.9 'am: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Replace sub1 with file
Patch failed at 0001 Replace sub1 with file
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 9 - am: replace submodule with a file must fail # TODO known breakage

checking known breakage of 4255.10 'am: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
warning: unable to rmdir 'sub1': Directory not empty
error: unable to write file 'sub1' mode 100644: Directory not empty
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Replace sub1 with file
Patch failed at 0001 Replace sub1 with file
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 10 - am: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 4255.11 'am: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Applying: Modify sub1
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - am: modified submodule does not update submodule work tree

expecting success of 4255.12 'am: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Applying: Invalid sub1 commit
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - am: modified submodule does not update submodule work tree to invalid commit

expecting success of 4255.13 'am: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Applying: Revert "Invalid sub1 commit"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - am: modified submodule does not update submodule work tree from invalid commit

expecting success of 4255.14 'am: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: sub1: already exists in working directory
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: Add sub1
Patch failed at 0001 Add sub1
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 14 - am: added submodule doesn't remove untracked unignored file with same name

expecting success of 4255.15 'am_3way: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Applying: Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 15 - am_3way: added submodule creates empty directory

expecting success of 4255.16 'am_3way: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Applying: Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 16 - am_3way: added submodule leaves existing empty directory alone

expecting success of 4255.17 'am_3way: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Applying: Revert "Replace sub1 with file"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 17 - am_3way: replace tracked file with submodule creates empty directory

expecting success of 4255.18 'am_3way: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Applying: Revert "Replace sub1 with directory"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 18 - am_3way: replace directory with submodule

expecting success of 4255.19 'am_3way: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Applying: Revert "Add sub1"
ok 19 - am_3way: removed submodule leaves submodule directory and its contents in place

expecting success of 4255.20 'am_3way: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Applying: Revert "Add sub1"
ok 20 - am_3way: removed submodule leaves submodule containing a .git directory alone

checking known breakage of 4255.21 'am_3way: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Applying: Replace sub1 with directory
error: refusing to lose untracked file at 'sub1/file2'
error: add_cacheinfo failed to refresh for path 'sub1/file2'; merge aborting.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
09bcf53 Add sub1
virtual Replace sub1 with directory
found 1 common ancestor:
virtual 79da5ac42bf0336dfffb2f8e0c8fe7ba750b4b82
Adding sub1/file3
Adding sub1/file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Replace sub1 with directory
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 21 - am_3way: replace submodule with a directory must fail # TODO known breakage

checking known breakage of 4255.22 'am_3way: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Applying: Replace sub1 with directory
error: refusing to lose untracked file at 'sub1/file2'
error: add_cacheinfo failed to refresh for path 'sub1/file2'; merge aborting.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
09bcf53 Add sub1
virtual Replace sub1 with directory
found 1 common ancestor:
virtual 79da5ac42bf0336dfffb2f8e0c8fe7ba750b4b82
Adding sub1/file3
Adding sub1/file2
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Replace sub1 with directory
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 22 - am_3way: replace submodule containing a .git directory with a directory must fail # TODO known breakage

checking known breakage of 4255.23 'am_3way: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Applying: Replace sub1 with file
error: Your local changes to the following files would be overwritten by merge:
	.gitmodules
Please commit your changes or stash them before you merge.
Aborting
error: merging of trees 78e68a0ec4ef4e6a1d1e7a07e6ad2cf028704e1e and 0c5fb3d7a7f38842873e1ae04f0d84f622ff7d20 failed
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
09bcf53 Add sub1
virtual Replace sub1 with file
found 1 common ancestor:
virtual 79da5ac42bf0336dfffb2f8e0c8fe7ba750b4b82
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Replace sub1 with file
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 23 - am_3way: replace submodule with a file must fail # TODO known breakage

checking known breakage of 4255.24 'am_3way: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Applying: Replace sub1 with file
error: Your local changes to the following files would be overwritten by merge:
	.gitmodules
Please commit your changes or stash them before you merge.
Aborting
error: merging of trees 78e68a0ec4ef4e6a1d1e7a07e6ad2cf028704e1e and 0c5fb3d7a7f38842873e1ae04f0d84f622ff7d20 failed
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
09bcf53 Add sub1
virtual Replace sub1 with file
found 1 common ancestor:
virtual 79da5ac42bf0336dfffb2f8e0c8fe7ba750b4b82
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Replace sub1 with file
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'actual' is not empty, it contains:
:100644 100644 af3a0c56edfba1a28f50ada5ec2832a7f2f9b907 0000000000000000000000000000000000000000 M	.gitmodules
not ok 24 - am_3way: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 4255.25 'am_3way: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Applying: Modify sub1
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 25 - am_3way: modified submodule does not update submodule work tree

expecting success of 4255.26 'am_3way: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Applying: Invalid sub1 commit
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 26 - am_3way: modified submodule does not update submodule work tree to invalid commit

expecting success of 4255.27 'am_3way: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Applying: Revert "Invalid sub1 commit"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 27 - am_3way: modified submodule does not update submodule work tree from invalid commit

expecting success of 4255.28 'am_3way: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Applying: Add sub1
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
error: merging of trees ec38489b3f8eda08fda17055ad272abc24bdf929 and 82fc70d33d0f376c5a25b599423c89e5452a2bf1 failed
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Merging:
27611a5 Base
virtual Add sub1
found 1 common ancestor:
virtual 4b825dc642cb6eb9a060e54bf8d69288fbee4904
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Add sub1
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 28 - am_3way: added submodule doesn't remove untracked unignored file with same name

expecting success of 4255.29 'setup diff.submodule': 
	test_commit one &&
	INITIAL=$(git rev-parse HEAD) &&

	git init submodule &&
	(
		cd submodule &&
		test_commit two &&
		git rev-parse HEAD >../initial-submodule
	) &&
	git submodule add ./submodule &&
	git commit -m first &&

	(
		cd submodule &&
		test_commit three &&
		git rev-parse HEAD >../first-submodule
	) &&
	git add submodule &&
	git commit -m second &&
	SECOND=$(git rev-parse HEAD) &&

	(
		cd submodule &&
		git mv two.t four.t &&
		git commit -m "second submodule" &&
		git rev-parse HEAD >../second-submodule
	) &&
	test_commit four &&
	git add submodule &&
	git commit --amend --no-edit &&
	THIRD=$(git rev-parse HEAD) &&
	git submodule update --init

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t4255-am-submodule/submodule/.git/
[master (root-commit) 274aeeb] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Adding existing repo at 'submodule' to the index
[master 8fb6b7a] first
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
[master 2b16875] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master 7cdc426] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master a623af5] second submodule
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename two.t => four.t (100%)
[master d6b9f1d] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
[master be614db] four
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 four.t
ok 29 - setup diff.submodule

expecting success of 4255.30 'diff.submodule unset': 
	test_unconfig diff.submodule &&
	run_test $SECOND first-submodule

fatal: Resolve operation not in progress, we are not resuming.
HEAD is now at 7cdc426 second
0001-second.patch
HEAD is now at 8fb6b7a first
Submodule path 'submodule': checked out '274aeebc83e7f26e680862996e9bd5ecc327019b'
warning: unable to rmdir 'submodule': Directory not empty
Applying: second
Submodule path 'submodule': checked out '2b16875140fdb3b4aae24b2015fe1bcc27aafb37'
ok 30 - diff.submodule unset

expecting success of 4255.31 'diff.submodule unset with extra file': 
	test_unconfig diff.submodule &&
	run_test $THIRD second-submodule

fatal: Resolve operation not in progress, we are not resuming.
HEAD is now at be614db four
0001-four.patch
HEAD is now at 7cdc426 second
warning: unable to rmdir 'submodule': Directory not empty
Applying: four
Submodule path 'submodule': checked out 'a623af53832974aedda72512f4fa27b05b513dee'
ok 31 - diff.submodule unset with extra file

expecting success of 4255.32 'diff.submodule=log': 
	test_config diff.submodule log &&
	run_test $SECOND first-submodule

fatal: Resolve operation not in progress, we are not resuming.
HEAD is now at 7cdc426 second
0001-second.patch
HEAD is now at 8fb6b7a first
Submodule path 'submodule': checked out '274aeebc83e7f26e680862996e9bd5ecc327019b'
warning: unable to rmdir 'submodule': Directory not empty
Applying: second
Submodule path 'submodule': checked out '2b16875140fdb3b4aae24b2015fe1bcc27aafb37'
ok 32 - diff.submodule=log

expecting success of 4255.33 'diff.submodule=log with extra file': 
	test_config diff.submodule log &&
	run_test $THIRD second-submodule

fatal: Resolve operation not in progress, we are not resuming.
HEAD is now at be614db four
0001-four.patch
HEAD is now at 7cdc426 second
warning: unable to rmdir 'submodule': Directory not empty
Applying: four
Submodule path 'submodule': checked out 'a623af53832974aedda72512f4fa27b05b513dee'
ok 33 - diff.submodule=log with extra file

# still have 6 known breakage(s)
# passed all remaining 27 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5303-pack-corruption-resilience.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
expecting success of 5303.1 'initial setup validation': create_test_files &&
     create_new_pack &&
     git prune-packed &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
ok 1 - initial setup validation

expecting success of 5303.2 'create corruption in header of first object': do_corrupt_object $blob_1 0 < zero &&
     test_must_fail git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
1+0 records in
1+0 records out
1 byte copied, 0.00036768 s, 2.7 kB/s
fatal: pack has bad object at offset 12: unknown object type 0
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 06686a2094b7518d92cd6e26efaab209b398ebd3 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 2 - create corruption in header of first object

expecting success of 5303.3 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_1 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
06686a2094b7518d92cd6e26efaab209b398ebd3
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 3 - ... but having a loose copy allows for full recovery

expecting success of 5303.4 '... and loose copy of first delta allows for partial recovery': git prune-packed &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     test_must_fail git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
30fd6590c6df999b5a77622491bee8cb1b96d807
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 06686a2094b7518d92cd6e26efaab209b398ebd3 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: unknown object type 0 at offset 12 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 4 - ... and loose copy of first delta allows for partial recovery

expecting success of 5303.5 'create corruption in data of first object': create_new_pack &&
     git prune-packed &&
     chmod +w ${pack}.pack &&
     perl -i.bak -pe "s/ base /abcdef/" ${pack}.pack &&
     test_must_fail git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
error: inflate: data stream error (incorrect data check)
fatal: packed object 06686a2094b7518d92cd6e26efaab209b398ebd3 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 5 - create corruption in data of first object

expecting success of 5303.6 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_1 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
06686a2094b7518d92cd6e26efaab209b398ebd3
error: inflate: data stream error (incorrect data check)
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 6 - ... but having a loose copy allows for full recovery

expecting success of 5303.7 '... and loose copy of second object allows for partial recovery': git prune-packed &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     test_must_fail git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
30fd6590c6df999b5a77622491bee8cb1b96d807
error: inflate: data stream error (incorrect data check)
fatal: packed object 06686a2094b7518d92cd6e26efaab209b398ebd3 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 7 - ... and loose copy of second object allows for partial recovery

expecting success of 5303.8 'create corruption in header of first delta': create_new_pack &&
     git prune-packed &&
     do_corrupt_object $blob_2 0 < zero &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
1+0 records in
1+0 records out
1 byte copied, 0.000415015 s, 2.4 kB/s
fatal: pack has bad object at offset 2032: unknown object type 0
error: unknown object type 0 at offset 2032 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 8 - create corruption in header of first delta

expecting success of 5303.9 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
30fd6590c6df999b5a77622491bee8cb1b96d807
error: unknown object type 0 at offset 2032 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: unknown object type 0 at offset 2032 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 9 - ... but having a loose copy allows for full recovery

expecting success of 5303.10 '... and then a repack "clears" the corruption': do_repack &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: unknown object type 0 at offset 2032 in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 10 - ... and then a repack "clears" the corruption

expecting success of 5303.11 'create corruption in data of first delta': create_new_pack &&
     git prune-packed &&
     chmod +w ${pack}.pack &&
     perl -i.bak -pe "s/ delta1 /abcdefgh/" ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
error: inflate: data stream error (incorrect data check)
error: failed to unpack compressed delta at offset 2054 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: inflate: data stream error (incorrect data check)
error: failed to unpack compressed delta at offset 2054 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 11 - create corruption in data of first delta

expecting success of 5303.12 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
30fd6590c6df999b5a77622491bee8cb1b96d807
error: inflate: data stream error (incorrect data check)
error: failed to unpack compressed delta at offset 2054 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: inflate: data stream error (incorrect data check)
error: failed to unpack compressed delta at offset 2054 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 12 - ... but having a loose copy allows for full recovery

expecting success of 5303.13 '... and then a repack "clears" the corruption': do_repack &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: bad packed object CRC for 30fd6590c6df999b5a77622491bee8cb1b96d807
error: bad packed object CRC for 30fd6590c6df999b5a77622491bee8cb1b96d807
ok 13 - ... and then a repack "clears" the corruption

expecting success of 5303.14 'corruption in delta base reference of first delta (OBJ_REF_DELTA)': create_new_pack &&
     git prune-packed &&
     do_corrupt_object $blob_2 2 < zero &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
1+0 records in
1+0 records out
1 byte copied, 0.000521686 s, 1.9 kB/s
fatal: pack is corrupted (SHA1 mismatch)
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 14 - corruption in delta base reference of first delta (OBJ_REF_DELTA)

expecting success of 5303.15 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
30fd6590c6df999b5a77622491bee8cb1b96d807
error: failed to validate delta base reference at offset 2054 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
ok 15 - ... but having a loose copy allows for full recovery

expecting success of 5303.16 '... and then a repack "clears" the corruption': do_repack &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
ok 16 - ... and then a repack "clears" the corruption

expecting success of 5303.17 'corruption #0 in delta base reference of first delta (OBJ_OFS_DELTA)': create_new_pack --delta-base-offset &&
     git prune-packed &&
     do_corrupt_object $blob_2 2 < zero &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 183 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 132 2215 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack: ok
1+0 records in
1+0 records out
1 byte copied, 0.000490685 s, 2.0 kB/s
fatal: pack has bad object at offset 2032: delta base offset is out of bound
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
ok 17 - corruption #0 in delta base reference of first delta (OBJ_OFS_DELTA)

expecting success of 5303.18 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
30fd6590c6df999b5a77622491bee8cb1b96d807
error: failed to validate delta base reference at offset 2034 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
ok 18 - ... but having a loose copy allows for full recovery

expecting success of 5303.19 '... and then a repack "clears" the corruption': do_repack --delta-base-offset &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: delta base offset out of bound for 30fd6590c6df999b5a77622491bee8cb1b96d807
ok 19 - ... and then a repack "clears" the corruption

expecting success of 5303.20 'corruption #1 in delta base reference of first delta (OBJ_OFS_DELTA)': create_new_pack --delta-base-offset &&
     git prune-packed &&
     printf "\001" | do_corrupt_object $blob_2 2 &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 183 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 132 2215 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack: ok
1+0 records in
1+0 records out
1 byte copied, 0.000447349 s, 2.2 kB/s
error: inflate: data stream error (incorrect header check)
fatal: pack has bad object at offset 2032: inflate returned -3
error: bad offset for revindex
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
error: bad offset for revindex
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
ok 20 - corruption #1 in delta base reference of first delta (OBJ_OFS_DELTA)

expecting success of 5303.21 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_2 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
30fd6590c6df999b5a77622491bee8cb1b96d807
error: bad offset for revindex
error: bad offset for revindex
error: bad offset for revindex
error: bad offset for revindex
error: failed to validate delta base reference at offset 2054 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
error: bad offset for revindex
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
ok 21 - ... but having a loose copy allows for full recovery

expecting success of 5303.22 '... and then a repack "clears" the corruption': do_repack --delta-base-offset &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: bad offset for revindex
error: inflate: data stream error (incorrect header check)
error: delta data unpack-initial failed
ok 22 - ... and then a repack "clears" the corruption

expecting success of 5303.23 '... and a redundant pack allows for full recovery too': do_corrupt_object $blob_2 2 < zero &&
     git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null &&
     mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_1 &&
     git hash-object -t blob -w file_2 &&
     printf "$blob_1\n$blob_2\n" | git pack-objects .git/objects/pack/pack &&
     git prune-packed &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
1+0 records in
1+0 records out
1 byte copied, 0.000440017 s, 2.3 kB/s
fatal: pack has bad object at offset 2032: delta base offset is out of bound
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
06686a2094b7518d92cd6e26efaab209b398ebd3
30fd6590c6df999b5a77622491bee8cb1b96d807
8e27963e1e80900149c7ca3ea5eeb0cf53e9cb23
error: failed to validate delta base reference at offset 2034 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack
ok 23 - ... and a redundant pack allows for full recovery too

expecting success of 5303.24 'corruption of delta base reference pointing to wrong object': create_new_pack --delta-base-offset &&
     git prune-packed &&
     printf "\220\033" | do_corrupt_object $blob_3 2 &&
     git cat-file blob $blob_1 >/dev/null &&
     git cat-file blob $blob_2 >/dev/null &&
     test_must_fail git cat-file blob $blob_3 >/dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 183 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 132 2215 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack: ok
2+0 records in
2+0 records out
2 bytes copied, 0.000430349 s, 4.6 kB/s
fatal: pack is corrupted (SHA1 mismatch)
error: failed to apply delta
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-417bd5d650269e28ec8026312b966d0bf1dab469.pack) is corrupt
ok 24 - corruption of delta base reference pointing to wrong object

expecting success of 5303.25 '... but having a loose copy allows for full recovery': mv ${pack}.idx tmp &&
     git hash-object -t blob -w file_3 &&
     mv tmp ${pack}.idx &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4
error: failed to apply delta
ok 25 - ... but having a loose copy allows for full recovery

expecting success of 5303.26 '... and then a repack "clears" the corruption': do_repack --delta-base-offset --no-reuse-delta &&
     git prune-packed &&
     git verify-pack ${pack}.pack &&
     git cat-file blob $blob_1 > /dev/null &&
     git cat-file blob $blob_2 > /dev/null &&
     git cat-file blob $blob_3 > /dev/null
error: bad packed object CRC for 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4
ok 26 - ... and then a repack "clears" the corruption

expecting success of 5303.27 'corrupting header to have too small output buffer fails unpack': create_new_pack &&
     git prune-packed &&
     printf "\262\001" | do_corrupt_object $blob_1 0 &&
     test_must_fail git cat-file blob $blob_1 > /dev/null &&
     test_must_fail git cat-file blob $blob_2 > /dev/null &&
     test_must_fail git cat-file blob $blob_3 > /dev/null
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5303-pack-corruption-resilience/.git/
06686a2094b7518d92cd6e26efaab209b398ebd3 blob   2007 2020 12
30fd6590c6df999b5a77622491bee8cb1b96d807 blob   168 201 2032 1 06686a2094b7518d92cd6e26efaab209b398ebd3
44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 blob   117 150 2233 2 30fd6590c6df999b5a77622491bee8cb1b96d807
non delta: 1 object
chain length = 1: 1 object
chain length = 2: 1 object
.git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack: ok
2+0 records in
2+0 records out
2 bytes copied, 0.000470351 s, 4.3 kB/s
fatal: pack has bad object at offset 12: inflate returned -5
fatal: packed object 06686a2094b7518d92cd6e26efaab209b398ebd3 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 30fd6590c6df999b5a77622491bee8cb1b96d807 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
error: failed to read delta base object 06686a2094b7518d92cd6e26efaab209b398ebd3 at offset 12 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
error: failed to read delta base object 30fd6590c6df999b5a77622491bee8cb1b96d807 at offset 2032 from .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack
fatal: packed object 44cc0b565eca87cf836116abe0f9e2ff4fd0b0a4 (stored in .git/objects/pack/pack-bbfb7489c21eaac49a086215e1c3699ef989f595.pack) is corrupt
ok 27 - corrupting header to have too small output buffer fails unpack

expecting success of 5303.28 'apply good minimal delta': printf "\0\1\1X" > minimal_delta &&
     test-tool delta -p /dev/null minimal_delta /dev/null
ok 28 - apply good minimal delta

expecting success of 5303.29 'apply delta with too many literal bytes': printf "\0\1\2XX" > too_big_literal &&
     test_must_fail test-tool delta -p /dev/null too_big_literal /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 29 - apply delta with too many literal bytes

expecting success of 5303.30 'apply delta with too many copied bytes': printf "\4\1\221\0\2" > too_big_copy &&
     printf base >base &&
     test_must_fail test-tool delta -p base too_big_copy /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 30 - apply delta with too many copied bytes

expecting success of 5303.31 'apply delta with too few literal bytes': printf "\0\2\2X" > truncated_delta &&
     test_must_fail test-tool delta -p /dev/null truncated_delta /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 31 - apply delta with too few literal bytes

expecting success of 5303.32 'apply delta with too few bytes in base': printf "\0\1\221\0\1" > truncated_base &&
     test_must_fail test-tool delta -p /dev/null truncated_base /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 32 - apply delta with too few bytes in base

expecting success of 5303.33 'apply delta with truncated copy parameters': printf "\4\2\1X\221" > truncated_copy_delta &&
     printf base >base &&
     test_must_fail test-tool delta -p base truncated_copy_delta /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 33 - apply delta with truncated copy parameters

expecting success of 5303.34 'apply delta with trailing garbage literal': printf "\0\1\1X\1" > tail_garbage_literal &&
     test_must_fail test-tool delta -p /dev/null tail_garbage_literal /dev/null
error: delta replay has gone wild
delta operation failed (returned NULL)
ok 34 - apply delta with trailing garbage literal

expecting success of 5303.35 'apply delta with trailing garbage copy': printf "\4\1\1X\221\0\1" > tail_garbage_copy &&
     printf base >base &&
     test_must_fail test-tool delta -p /dev/null tail_garbage_copy /dev/null
delta operation failed (returned NULL)
ok 35 - apply delta with trailing garbage copy

expecting success of 5303.36 'apply delta with trailing garbage opcode': printf "\0\1\1X\0" > tail_garbage_opcode &&
     test_must_fail test-tool delta -p /dev/null tail_garbage_opcode /dev/null
error: unexpected delta opcode 0
delta operation failed (returned NULL)
ok 36 - apply delta with trailing garbage opcode

# passed all 36 test(s)
1..36
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5305-include-tag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5305-include-tag/.git/
expecting success of 5305.1 'setup': 
	echo c >d &&
	git update-index --add d &&
	tree=$(git write-tree) &&
	commit=$(git commit-tree $tree </dev/null) &&
	echo "object $commit" >sig &&
	echo "type commit" >>sig &&
	echo "tag mytag" >>sig &&
	echo "tagger $(git var GIT_COMMITTER_IDENT)" >>sig &&
	echo >>sig &&
	echo "our test tag" >>sig &&
	tag=$(git mktag <sig) &&
	rm d sig &&
	git update-ref refs/tags/mytag $tag && {
		echo $tree &&
		echo $commit &&
		git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\)	.*/\\1/"
	} >obj-list

ok 1 - setup

expecting success of 5305.2 'pack without --include-tag': 
	packname=$(git pack-objects \
		--window=0 \
		test-no-include <obj-list)

ok 2 - pack without --include-tag

expecting success of 5305.3 'unpack objects': 
	rm -rf clone.git &&
	git init clone.git &&
	git -C clone.git unpack-objects <test-no-include-${packname}.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5305-include-tag/clone.git/.git/
ok 3 - unpack objects

expecting success of 5305.4 'check unpacked result (have commit, no tag)': 
	git rev-list --objects $commit >list.expect &&
	test_must_fail git -C clone.git cat-file -e $tag &&
	git -C clone.git rev-list --objects $commit >list.actual &&
	test_cmp list.expect list.actual

ok 4 - check unpacked result (have commit, no tag)

expecting success of 5305.5 'pack with --include-tag': 
	packname=$(git pack-objects \
		--window=0 \
		--include-tag \
		test-include <obj-list)

ok 5 - pack with --include-tag

expecting success of 5305.6 'unpack objects': 
	rm -rf clone.git &&
	git init clone.git &&
	git -C clone.git unpack-objects <test-include-${packname}.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5305-include-tag/clone.git/.git/
ok 6 - unpack objects

expecting success of 5305.7 'check unpacked result (have commit, have tag)': 
	git rev-list --objects mytag >list.expect &&
	git -C clone.git rev-list --objects $tag >list.actual &&
	test_cmp list.expect list.actual

ok 7 - check unpacked result (have commit, have tag)

expecting success of 5305.8 'create hidden inner tag': 
	test_commit commit &&
	git tag -m inner inner HEAD &&
	git tag -m outer outer inner &&
	git tag -d inner

[main (root-commit) b6b0ff3] commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 commit.t
 create mode 100644 d
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f outer inner^{}
hint: Disable this message with "git config advice.nestedTag false"
Deleted tag 'inner' (was 4a3d125)
ok 8 - create hidden inner tag

expecting success of 5305.9 'pack explicit outer tag': 
	packname=$(
		{
			echo HEAD &&
			echo outer
		} |
		git pack-objects --revs test-hidden-explicit
	)

ok 9 - pack explicit outer tag

expecting success of 5305.10 'unpack objects': 
	rm -rf clone.git &&
	git init clone.git &&
	git -C clone.git unpack-objects <test-hidden-explicit-${packname}.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5305-include-tag/clone.git/.git/
ok 10 - unpack objects

expecting success of 5305.11 'check unpacked result (have all objects)': 
	git -C clone.git rev-list --objects $(git rev-parse outer HEAD)

b6b0ff3317698915de9c0bec0caab17e3884f5cc
f29dea06355cfae615126151f86d323b8249923c outer
4a3d125fea2ae6987f86d32a1f9598b386f2edcc inner
c5b8485de618df1bc5b007d1a28eeb3e4c4deae8 
01f9a2aac3e315c5caa00db4019f1d934171dba0 commit.t
f2ad6c76f0115a6ba5b00456a849810e7ec0af20 d
ok 11 - check unpacked result (have all objects)

expecting success of 5305.12 'pack implied outer tag': 
	packname=$(
		echo HEAD |
		git pack-objects --revs --include-tag test-hidden-implied
	)

ok 12 - pack implied outer tag

expecting success of 5305.13 'unpack objects': 
	rm -rf clone.git &&
	git init clone.git &&
	git -C clone.git unpack-objects <test-hidden-implied-${packname}.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5305-include-tag/clone.git/.git/
ok 13 - unpack objects

expecting success of 5305.14 'check unpacked result (have all objects)': 
	git -C clone.git rev-list --objects $(git rev-parse outer HEAD)

b6b0ff3317698915de9c0bec0caab17e3884f5cc
f29dea06355cfae615126151f86d323b8249923c outer
4a3d125fea2ae6987f86d32a1f9598b386f2edcc inner
c5b8485de618df1bc5b007d1a28eeb3e4c4deae8 
01f9a2aac3e315c5caa00db4019f1d934171dba0 commit.t
f2ad6c76f0115a6ba5b00456a849810e7ec0af20 d
ok 14 - check unpacked result (have all objects)

expecting success of 5305.15 'single-branch clone can transfer tag': 
	rm -rf clone.git &&
	git clone --no-local --single-branch -b main . clone.git &&
	git -C clone.git fsck

Cloning into 'clone.git'...
ok 15 - single-branch clone can transfer tag

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5304-prune.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5304-prune/.git/
expecting success of 5304.1 'setup': 
	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git gc

[main (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 1 - setup

expecting success of 5304.2 'bare repo prune is quiet without $GIT_DIR/objects/pack': 
	git clone -q --shared --template= --bare . bare.git &&
	rmdir bare.git/objects/pack &&
	git --git-dir=bare.git prune --no-progress 2>prune.err &&
	test_must_be_empty prune.err &&
	rm -r bare.git prune.err

ok 2 - bare repo prune is quiet without $GIT_DIR/objects/pack

expecting success of 5304.3 'prune stale packs': 
	orig_pack=$(echo .git/objects/pack/*.pack) &&
	>.git/objects/tmp_1.pack &&
	>.git/objects/tmp_2.pack &&
	test-tool chmtime =-86501 .git/objects/tmp_1.pack &&
	git prune --expire 1.day &&
	test_path_is_file $orig_pack &&
	test_path_is_file .git/objects/tmp_2.pack &&
	test_path_is_missing .git/objects/tmp_1.pack

ok 3 - prune stale packs

expecting success of 5304.4 'prune --expire': 
	add_blob &&
	git prune --expire=1.hour.ago &&
	verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test_path_is_file $BLOB_FILE &&
	test-tool chmtime =-86500 $BLOB_FILE &&
	git prune --expire 1.day &&
	verbose test $before = $(git count-objects | sed "s/ .*//") &&
	test_path_is_missing $BLOB_FILE

ok 4 - prune --expire

expecting success of 5304.5 'gc: implicit prune --expire': 
	add_blob &&
	test-tool chmtime =-$((2*$week-30)) $BLOB_FILE &&
	git gc &&
	verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test_path_is_file $BLOB_FILE &&
	test-tool chmtime =-$((2*$week+1)) $BLOB_FILE &&
	git gc &&
	verbose test $before = $(git count-objects | sed "s/ .*//") &&
	test_path_is_missing $BLOB_FILE

ok 5 - gc: implicit prune --expire

expecting success of 5304.6 'gc: refuse to start with invalid gc.pruneExpire': 
	git config gc.pruneExpire invalid &&
	test_must_fail git gc

error: Invalid gc.pruneexpire: 'invalid'
fatal: bad config variable 'gc.pruneexpire' in file '.git/config' at line 7
ok 6 - gc: refuse to start with invalid gc.pruneExpire

expecting success of 5304.7 'gc: start with ok gc.pruneExpire': 
	git config gc.pruneExpire 2.days.ago &&
	git gc

ok 7 - gc: start with ok gc.pruneExpire

expecting success of 5304.8 'prune: prune nonsense parameters': 
	test_must_fail git prune garbage &&
	test_must_fail git prune --- &&
	test_must_fail git prune --no-such-option

fatal: unrecognized argument: garbage
error: unknown option `-'
usage: git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]

    -n, --dry-run         do not remove, show only
    -v, --verbose         report pruned objects
    --progress            show progress
    --expire <expiry-date>
                          expire objects older than <time>
    --exclude-promisor-objects
                          limit traversal to objects outside promisor packfiles

error: unknown option `no-such-option'
usage: git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]

    -n, --dry-run         do not remove, show only
    -v, --verbose         report pruned objects
    --progress            show progress
    --expire <expiry-date>
                          expire objects older than <time>
    --exclude-promisor-objects
                          limit traversal to objects outside promisor packfiles

ok 8 - prune: prune nonsense parameters

expecting success of 5304.9 'prune: prune unreachable heads': 
	git config core.logAllRefUpdates false &&
	>file2 &&
	git add file2 &&
	git commit -m temporary &&
	tmp_head=$(git rev-list -1 HEAD) &&
	git reset HEAD^ &&
	git reflog expire --all &&
	git prune &&
	test_must_fail git reset $tmp_head --

[main bfcb208] temporary
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
fatal: Could not parse object 'bfcb208a0bde848c9f19fc14ef5257e858575bcb'.
ok 9 - prune: prune unreachable heads

expecting success of 5304.10 'prune: do not prune detached HEAD with no reflog': 
	git checkout --detach --quiet &&
	git commit --allow-empty -m "detached commit" &&
	git reflog expire --all &&
	git prune -n >prune_actual &&
	test_must_be_empty prune_actual

[detached HEAD c34e89b] detached commit
 Author: A U Thor <author@example.com>
ok 10 - prune: do not prune detached HEAD with no reflog

expecting success of 5304.11 'prune: prune former HEAD after checking out branch': 
	head_oid=$(git rev-parse HEAD) &&
	git checkout --quiet main &&
	git reflog expire --all &&
	git prune -v >prune_actual &&
	grep "$head_oid" prune_actual

c34e89b682ec97c13fe9306a95efc6e8d3ab348a commit
ok 11 - prune: prune former HEAD after checking out branch

expecting success of 5304.12 'prune: do not prune heads listed as an argument': 
	>file2 &&
	git add file2 &&
	git commit -m temporary &&
	tmp_head=$(git rev-list -1 HEAD) &&
	git reset HEAD^ &&
	git prune -- $tmp_head &&
	git reset $tmp_head --

[main bfcb208] temporary
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
ok 12 - prune: do not prune heads listed as an argument

expecting success of 5304.13 'gc --no-prune': 
	add_blob &&
	test-tool chmtime =-$((5001*$day)) $BLOB_FILE &&
	git config gc.pruneExpire 2.days.ago &&
	git gc --no-prune &&
	verbose test 1 = $(git count-objects | sed "s/ .*//") &&
	test_path_is_file $BLOB_FILE

ok 13 - gc --no-prune

expecting success of 5304.14 'gc respects gc.pruneExpire': 
	git config gc.pruneExpire 5002.days.ago &&
	git gc &&
	test_path_is_file $BLOB_FILE &&
	git config gc.pruneExpire 5000.days.ago &&
	git gc &&
	test_path_is_missing $BLOB_FILE

ok 14 - gc respects gc.pruneExpire

expecting success of 5304.15 'gc --prune=<date>': 
	add_blob &&
	test-tool chmtime =-$((5001*$day)) $BLOB_FILE &&
	git gc --prune=5002.days.ago &&
	test_path_is_file $BLOB_FILE &&
	git gc --prune=5000.days.ago &&
	test_path_is_missing $BLOB_FILE

ok 15 - gc --prune=<date>

expecting success of 5304.16 'gc --prune=never': 
	add_blob &&
	git gc --prune=never &&
	test_path_is_file $BLOB_FILE &&
	git gc --prune=now &&
	test_path_is_missing $BLOB_FILE

ok 16 - gc --prune=never

expecting success of 5304.17 'gc respects gc.pruneExpire=never': 
	git config gc.pruneExpire never &&
	add_blob &&
	git gc &&
	test_path_is_file $BLOB_FILE &&
	git config gc.pruneExpire now &&
	git gc &&
	test_path_is_missing $BLOB_FILE

ok 17 - gc respects gc.pruneExpire=never

expecting success of 5304.18 'prune --expire=never': 
	add_blob &&
	git prune --expire=never &&
	test_path_is_file $BLOB_FILE &&
	git prune &&
	test_path_is_missing $BLOB_FILE

ok 18 - prune --expire=never

expecting success of 5304.19 'gc: prune old objects after local clone': 
	add_blob &&
	test-tool chmtime =-$((2*$week+1)) $BLOB_FILE &&
	git clone --no-hardlinks . aclone &&
	(
		cd aclone &&
		verbose test 1 = $(git count-objects | sed "s/ .*//") &&
		test_path_is_file $BLOB_FILE &&
		git gc --prune &&
		verbose test 0 = $(git count-objects | sed "s/ .*//") &&
		test_path_is_missing $BLOB_FILE
	)

Cloning into 'aclone'...
done.
ok 19 - gc: prune old objects after local clone

expecting success of 5304.20 'garbage report in count-objects -v': 
	test_when_finished "rm -f .git/objects/pack/fake*" &&
	test_when_finished "rm -f .git/objects/pack/foo*" &&
	>.git/objects/pack/foo &&
	>.git/objects/pack/foo.bar &&
	>.git/objects/pack/foo.keep &&
	>.git/objects/pack/foo.pack &&
	>.git/objects/pack/fake.bar &&
	>.git/objects/pack/fake.keep &&
	>.git/objects/pack/fake.pack &&
	>.git/objects/pack/fake.idx &&
	>.git/objects/pack/fake2.keep &&
	>.git/objects/pack/fake3.idx &&
	git count-objects -v 2>stderr &&
	grep "index file .git/objects/pack/fake.idx is too small" stderr &&
	grep "^warning:" stderr | sort >actual &&
	cat >expected <<\EOF &&
warning: garbage found: .git/objects/pack/fake.bar
warning: garbage found: .git/objects/pack/foo
warning: garbage found: .git/objects/pack/foo.bar
warning: no corresponding .idx or .pack: .git/objects/pack/fake2.keep
warning: no corresponding .idx: .git/objects/pack/foo.keep
warning: no corresponding .idx: .git/objects/pack/foo.pack
warning: no corresponding .pack: .git/objects/pack/fake3.idx
EOF
	test_cmp expected actual

count: 1
size: 4
in-pack: 5
packs: 1
size-pack: 1
prune-packable: 0
garbage: 7
size-garbage: 0
error: index file .git/objects/pack/fake.idx is too small
error: index file .git/objects/pack/fake.idx is too small
ok 20 - garbage report in count-objects -v

expecting success of 5304.21 'clean pack garbage with gc': 
	test_when_finished "rm -f .git/objects/pack/fake*" &&
	test_when_finished "rm -f .git/objects/pack/foo*" &&
	>.git/objects/pack/foo.keep &&
	>.git/objects/pack/foo.pack &&
	>.git/objects/pack/fake.idx &&
	>.git/objects/pack/fake2.keep &&
	>.git/objects/pack/fake2.idx &&
	>.git/objects/pack/fake3.keep &&
	git gc &&
	git count-objects -v 2>stderr &&
	grep "^warning:" stderr | sort >actual &&
	cat >expected <<\EOF &&
warning: no corresponding .idx or .pack: .git/objects/pack/fake3.keep
warning: no corresponding .idx: .git/objects/pack/foo.keep
warning: no corresponding .idx: .git/objects/pack/foo.pack
EOF
	test_cmp expected actual

count: 0
size: 0
in-pack: 5
packs: 1
size-pack: 1
prune-packable: 0
garbage: 3
size-garbage: 0
ok 21 - clean pack garbage with gc

expecting success of 5304.22 'prune .git/shallow': 
	oid=$(echo hi|git commit-tree HEAD^{tree}) &&
	echo $oid >.git/shallow &&
	git prune --dry-run >out &&
	grep $oid .git/shallow &&
	grep $oid out &&
	git prune &&
	test_path_is_missing .git/shallow

600238ca122b30a155a15330dffd6abd056eca17
600238ca122b30a155a15330dffd6abd056eca17 commit
Removing 600238ca122b30a155a15330dffd6abd056eca17 from .git/shallow
ok 22 - prune .git/shallow

expecting success of 5304.23 'prune .git/shallow when there are no loose objects': 
	oid=$(echo hi|git commit-tree HEAD^{tree}) &&
	echo $oid >.git/shallow &&
	git update-ref refs/heads/shallow-tip $oid &&
	git repack -ad &&
	# verify assumption that all loose objects are gone
	git count-objects | grep ^0 &&
	git prune &&
	echo $oid >expect &&
	test_cmp expect .git/shallow

0 objects, 0 kilobytes
ok 23 - prune .git/shallow when there are no loose objects

expecting success of 5304.24 'prune: handle alternate object database': 
	test_create_repo A &&
	git -C A commit --allow-empty -m "initial commit" &&
	git clone --shared A B &&
	git -C B commit --allow-empty -m "next commit" &&
	git -C B prune

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5304-prune/A/.git/
[main (root-commit) 96ee8f3] initial commit
 Author: A U Thor <author@example.com>
Cloning into 'B'...
done.
[main 40123d0] next commit
 Author: A U Thor <author@example.com>
ok 24 - prune: handle alternate object database

expecting success of 5304.25 'prune: handle index in multiple worktrees': 
	git worktree add second-worktree &&
	echo "new blob for second-worktree" >second-worktree/blob &&
	git -C second-worktree add blob &&
	git prune --expire=now &&
	git -C second-worktree show :blob >actual &&
	test_cmp second-worktree/blob actual

Preparing worktree (new branch 'second-worktree')
HEAD is now at bfcb208 temporary
ok 25 - prune: handle index in multiple worktrees

expecting success of 5304.26 'prune: handle HEAD in multiple worktrees': 
	git worktree add --detach third-worktree &&
	echo "new blob for third-worktree" >third-worktree/blob &&
	git -C third-worktree add blob &&
	git -C third-worktree commit -m "third" &&
	rm .git/worktrees/third-worktree/index &&
	test_must_fail git -C third-worktree show :blob &&
	git prune --expire=now &&
	git -C third-worktree show HEAD:blob >actual &&
	test_cmp third-worktree/blob actual

Preparing worktree (detached HEAD bfcb208)
HEAD is now at bfcb208 temporary
[detached HEAD fd12556] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 blob
fatal: path 'blob' exists on disk, but not in the index
ok 26 - prune: handle HEAD in multiple worktrees

expecting success of 5304.27 'prune: handle HEAD reflog in multiple worktrees': 
	git config core.logAllRefUpdates true &&
	echo "lost blob for third-worktree" >expected &&
	(
		cd third-worktree &&
		cat ../expected >blob &&
		git add blob &&
		git commit -m "second commit in third" &&
		git clean -f && # Remove untracked left behind by deleting index
		git reset --hard HEAD^
	) &&
	git prune --expire=now &&
	oid=`git hash-object expected` &&
	git -C third-worktree show "$oid" >actual &&
	test_cmp expected actual

[detached HEAD 0e1afb4] second commit in third
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 file
 delete mode 100644 file2
Removing file
Removing file2
HEAD is now at fd12556 third
ok 27 - prune: handle HEAD reflog in multiple worktrees

expecting success of 5304.28 'prune: handle expire option correctly': 
	test_must_fail git prune --expire 2>error &&
	test_i18ngrep "requires a value" error &&

	test_must_fail git prune --expire=nyah 2>error &&
	test_i18ngrep "malformed expiration" error &&

	git prune --no-expire

error: option `expire' requires a value
fatal: malformed expiration date 'nyah'
ok 28 - prune: handle expire option correctly

expecting success of 5304.29 'trivial prune with bitmaps enabled': 
	git repack -adb &&
	blob=$(echo bitmap-unreachable-blob | git hash-object -w --stdin) &&
	git prune --expire=now &&
	git cat-file -e HEAD &&
	test_must_fail git cat-file -e $blob

ok 29 - trivial prune with bitmaps enabled

expecting success of 5304.30 'old reachable-from-recent retained with bitmaps': 
	git repack -adb &&
	to_drop=$(echo bitmap-from-recent-1 | git hash-object -w --stdin) &&
	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $to_drop) &&
	to_save=$(echo bitmap-from-recent-2 | git hash-object -w --stdin) &&
	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $to_save) &&
	tree=$(printf "100644 blob $to_save\tfile\n" | git mktree) &&
	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $tree) &&
	commit=$(echo foo | git commit-tree $tree) &&
	git prune --expire=12.hours.ago &&
	git cat-file -e $commit &&
	git cat-file -e $tree &&
	git cat-file -e $to_save &&
	test_must_fail git cat-file -e $to_drop

ok 30 - old reachable-from-recent retained with bitmaps

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5306-pack-nobase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5306-pack-nobase/.git/
expecting success of 5306.1 'setup base': test_write_lines a b c d e f g h i >text &&
     echo side >side &&
     git update-index --add text side &&
     A=$(echo A | git commit-tree $(git write-tree)) &&

     echo m >>text &&
     git update-index text &&
     B=$(echo B | git commit-tree $(git write-tree) -p $A) &&
     git update-ref HEAD $B
    
ok 1 - setup base

expecting success of 5306.2 'setup patch_clone': base_objects=$(pwd)/.git/objects &&
     (mkdir patch_clone &&
      cd patch_clone &&
      git init &&
      echo "$base_objects" >.git/objects/info/alternates &&
      echo q >>text &&
      git read-tree $B &&
      git update-index text &&
      git update-ref HEAD $(echo C | git commit-tree $(git write-tree) -p $B) &&
      rm .git/objects/info/alternates &&

      git --git-dir=../.git cat-file commit $B |
      git hash-object -t commit -w --stdin &&

      git --git-dir=../.git cat-file tree "$B^{tree}" |
      git hash-object -t tree -w --stdin
     ) &&
     C=$(git --git-dir=patch_clone/.git rev-parse HEAD)
    
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5306-pack-nobase/patch_clone/.git/
b9ed80ffce4d29008783a547cd99709480fe6c9f
f9037bf6e8d95d31af48907ab2c93c2d6c2c7fcd
ok 2 - setup patch_clone

expecting success of 5306.3 'indirectly clone patch_clone': (mkdir user_clone &&
      cd user_clone &&
      git init &&
      git pull ../.git &&
      test $(git rev-parse HEAD) = $B &&

      git pull ../patch_clone/.git &&
      test $(git rev-parse HEAD) = $C
     )
    
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5306-pack-nobase/user_clone/.git/
From ../
 * branch            HEAD       -> FETCH_HEAD
From ../patch_clone/
 * branch            HEAD       -> FETCH_HEAD
Updating b9ed80f..12634d7
Fast-forward
 text | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)
ok 3 - indirectly clone patch_clone

expecting success of 5306.4 'clone of patch_clone is incomplete': (mkdir user_direct &&
      cd user_direct &&
      git init &&
      test_must_fail git fetch ../patch_clone/.git
     )
    
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5306-pack-nobase/user_direct/.git/
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: error: Could not read 53030622b7a745eeb28ab02e2e8d26d5e3d5cab4        
remote: fatal: Failed to traverse parents of commit b9ed80ffce4d29008783a547cd99709480fe6c9f        
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
ok 4 - clone of patch_clone is incomplete

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5307-pack-missing-commit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5307-pack-missing-commit/.git/
expecting success of 5307.1 'setup': 
	for i in 1 2 3 4 5
	do
		echo "$i" >"file$i" &&
		git add "file$i" &&
		test_tick &&
		git commit -m "$i" &&
		git tag "tag$i" || return 1
	done &&
	obj=$(git rev-parse --verify tag3) &&
	fanout=$(expr "$obj" : "\(..\)") &&
	remainder=$(expr "$obj" : "..\(.*\)") &&
	rm -f ".git/objects/$fanout/$remainder"

[master (root-commit) f1e5f64] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[master 464ac64] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[master 4b3f9fe] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[master 4387cd0] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
[master 18dfde5] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file5
ok 1 - setup

expecting success of 5307.2 'check corruption': 
	test_must_fail git fsck

error: refs/tags/tag3: invalid sha1 pointer 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
error: HEAD: invalid reflog entry 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
error: HEAD: invalid reflog entry 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
error: refs/heads/master: invalid reflog entry 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
error: refs/heads/master: invalid reflog entry 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
broken link from  commit 4387cd029ff9d3e6d049717fc055ca04b972bfb8
              to  commit 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
missing commit 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
dangling tree 5907482de36080ec355b7811e41e23276d5799ba
ok 2 - check corruption

expecting success of 5307.3 'rev-list notices corruption (1)': 
	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list HEAD

error: Could not read 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
fatal: Failed to traverse parents of commit 4387cd029ff9d3e6d049717fc055ca04b972bfb8
18dfde5380f75061a4c4e203210947d874f34b14
ok 3 - rev-list notices corruption (1)

expecting success of 5307.4 'rev-list notices corruption (2)': 
	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list --objects HEAD

error: Could not read 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
fatal: Failed to traverse parents of commit 4387cd029ff9d3e6d049717fc055ca04b972bfb8
18dfde5380f75061a4c4e203210947d874f34b14
ok 4 - rev-list notices corruption (2)

expecting success of 5307.5 'pack-objects notices corruption': 
	echo HEAD |
	test_must_fail git pack-objects --revs pack

error: Could not read 4b3f9fe85f6c3449091baf9783e2641f38efdd8e
fatal: Failed to traverse parents of commit 4387cd029ff9d3e6d049717fc055ca04b972bfb8
ok 5 - pack-objects notices corruption

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5308-pack-detect-duplicates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5308-pack-detect-duplicates/.git/
expecting success of 5308.1 'setup': 
	test_oid_cache <<-EOF
	lo_oid sha1:e68fe8129b546b101aee9510c5328e7f21ca1d18
	lo_oid sha256:471819e8c52bf11513f100b2810a8aa0622d5cd3d1c913758a071dd4b3bad8fe

	missing_oid sha1:e69d000000000000000000000000000000000000
	missing_oid sha256:4720000000000000000000000000000000000000000000000000000000000000
	EOF

ok 1 - setup

expecting success of 5308.2 'pack with no duplicates': 
	create_pack no-dups.pack 1 &&
	git index-pack --stdin <no-dups.pack

pack	2b6334c837f829fc85b8483b099737d46872fcf1
ok 2 - pack with no duplicates

expecting success of 5308.3 'index-pack will allow duplicate objects by default': 
	clear_packs &&
	create_pack dups.pack 100 &&
	git index-pack --stdin <dups.pack

pack	9452d1779e83b02a99c82f7dd97a9ed27464a46e
ok 3 - index-pack will allow duplicate objects by default

expecting success of 5308.4 'create batch-check test vectors': 
	cat >input <<-EOF &&
	$LO_SHA1
	$HI_SHA1
	$MISSING_SHA1
	EOF
	cat >expect <<-EOF
	$LO_SHA1 blob 2
	$HI_SHA1 blob 0
	$MISSING_SHA1 missing
	EOF

ok 4 - create batch-check test vectors

expecting success of 5308.5 'lookup in duplicated pack': 
	git cat-file --batch-check <input >actual &&
	test_cmp expect actual

ok 5 - lookup in duplicated pack

expecting success of 5308.6 'index-pack can reject packs with duplicates': 
	clear_packs &&
	create_pack dups.pack 2 &&
	test_must_fail git index-pack --strict --stdin <dups.pack &&
	test_expect_code 1 git cat-file -e $LO_SHA1

fatal: The same object e68fe8129b546b101aee9510c5328e7f21ca1d18 appears twice in the pack
ok 6 - index-pack can reject packs with duplicates

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5309-pack-delta-cycles.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5309-pack-delta-cycles/.git/
expecting success of 5309.1 'index-pack works with a single delta (A->B)': 
	clear_packs &&
	{
		pack_header 2 &&
		pack_obj $A $B &&
		pack_obj $B
	} >ab.pack &&
	pack_trailer ab.pack &&
	git index-pack --stdin <ab.pack &&
	git cat-file -t $A &&
	git cat-file -t $B

pack	8af524300e46c11647862073e882d467bc0dd22d
blob
blob
ok 1 - index-pack works with a single delta (A->B)

expecting success of 5309.2 'index-pack works with a single delta (B->A)': 
	clear_packs &&
	{
		pack_header 2 &&
		pack_obj $A &&
		pack_obj $B $A
	} >ba.pack &&
	pack_trailer ba.pack &&
	git index-pack --stdin <ba.pack &&
	git cat-file -t $A &&
	git cat-file -t $B

pack	80442ca09df79dab1a7b2ac6fc4928bfbeeddc20
blob
blob
ok 2 - index-pack works with a single delta (B->A)

expecting success of 5309.3 'index-pack detects missing base objects': 
	clear_packs &&
	{
		pack_header 1 &&
		pack_obj $A $B
	} >missing.pack &&
	pack_trailer missing.pack &&
	test_must_fail git index-pack --fix-thin --stdin <missing.pack

fatal: pack has 1 unresolved delta
ok 3 - index-pack detects missing base objects

expecting success of 5309.4 'index-pack detects REF_DELTA cycles': 
	clear_packs &&
	{
		pack_header 2 &&
		pack_obj $A $B &&
		pack_obj $B $A
	} >cycle.pack &&
	pack_trailer cycle.pack &&
	test_must_fail git index-pack --fix-thin --stdin <cycle.pack

fatal: pack has 2 unresolved deltas
ok 4 - index-pack detects REF_DELTA cycles

expecting success of 5309.5 'failover to an object in another pack': 
	clear_packs &&
	git index-pack --stdin <ab.pack &&
	test_must_fail git index-pack --stdin --fix-thin <cycle.pack

pack	8af524300e46c11647862073e882d467bc0dd22d
fatal: REF_DELTA at offset 12 already resolved (duplicate base e68fe8129b546b101aee9510c5328e7f21ca1d18?)
ok 5 - failover to an object in another pack

expecting success of 5309.6 'failover to a duplicate object in the same pack': 
	clear_packs &&
	{
		pack_header 3 &&
		pack_obj $A $B &&
		pack_obj $B $A &&
		pack_obj $A
	} >recoverable.pack &&
	pack_trailer recoverable.pack &&
	test_must_fail git index-pack --fix-thin --stdin <recoverable.pack

fatal: REF_DELTA at offset 46 already resolved (duplicate base 01d7713666f4de822776c7622c10f1b07de280dc?)
ok 6 - failover to a duplicate object in the same pack

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5311-pack-bitmaps-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5311-pack-bitmaps-shallow/.git/
expecting success of 5311.1 'setup shallow repo': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable false &&
		echo 1 >file &&
		git add file &&
		git commit -m orig &&
		echo 2 >file &&
		git commit -a -m update &&
		git clone --no-local --bare --depth=1 . shallow.git &&
		echo 1 >file &&
		git commit -a -m repeat
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5311-pack-bitmaps-shallow/.git/
[master (root-commit) c96ad4c] orig
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 0ffc409] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into bare repository 'shallow.git'...
[master 07d4efd] repeat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup shallow repo

expecting success of 5311.2 'turn on bitmaps in the parent': 
		git repack -adb
	
ok 2 - turn on bitmaps in the parent

expecting success of 5311.3 'shallow fetch from bitmapped repo': 
		(cd shallow.git && git fetch)
	
From /<<PKGBUILDDIR>>/t/trash directory.t5311-pack-bitmaps-shallow/.
 * branch            HEAD       -> FETCH_HEAD
ok 3 - shallow fetch from bitmapped repo

expecting success of 5311.4 'setup shallow repo': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable true &&
		echo 1 >file &&
		git add file &&
		git commit -m orig &&
		echo 2 >file &&
		git commit -a -m update &&
		git clone --no-local --bare --depth=1 . shallow.git &&
		echo 1 >file &&
		git commit -a -m repeat
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5311-pack-bitmaps-shallow/.git/
[master (root-commit) c96ad4c] orig
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 0ffc409] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into bare repository 'shallow.git'...
[master 07d4efd] repeat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - setup shallow repo

expecting success of 5311.5 'turn on bitmaps in the parent': 
		git repack -adb
	
ok 5 - turn on bitmaps in the parent

expecting success of 5311.6 'shallow fetch from bitmapped repo': 
		(cd shallow.git && git fetch)
	
From /<<PKGBUILDDIR>>/t/trash directory.t5311-pack-bitmaps-shallow/.
 * branch            HEAD       -> FETCH_HEAD
ok 6 - shallow fetch from bitmapped repo

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5312-prune-corruption.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5312-prune-corruption/.git/
expecting success of 5312.1 'disable reflogs': 
	git config core.logallrefupdates false &&
	git reflog expire --expire=all --all

ok 1 - disable reflogs

expecting success of 5312.2 'create history reachable only from a bogus-named ref': 
	test_tick && git commit --allow-empty -m main &&
	base=$(git rev-parse HEAD) &&
	test_tick && git commit --allow-empty -m bogus &&
	bogus=$(git rev-parse HEAD) &&
	git cat-file commit $bogus >saved &&
	git reset --hard HEAD^

[main (root-commit) 3b20b2b] main
 Author: A U Thor <author@example.com>
[main dff741f] bogus
 Author: A U Thor <author@example.com>
HEAD is now at 3b20b2b main
ok 2 - create history reachable only from a bogus-named ref

expecting success of 5312.3 'pruning does not drop bogus object': 
	test_when_finished "git hash-object -w -t commit saved" &&
	create_bogus_ref &&
	test_must_fail git prune --expire=now &&
	git cat-file -e $bogus

fatal: unable to parse object: refs/heads/bogus..name
dff741f7b096cb9d52311824f871001de7742579
ok 3 - pruning does not drop bogus object

expecting success of 5312.4 'put bogus object into pack': 
	git tag reachable $bogus &&
	git repack -ad &&
	git tag -d reachable &&
	git cat-file -e $bogus

Deleted tag 'reachable' (was dff741f)
ok 4 - put bogus object into pack

expecting success of 5312.5 'non-destructive repack bails on bogus ref': 
	create_bogus_ref &&
	test_must_fail git repack -adk

fatal: bad object refs/heads/bogus..name
ok 5 - non-destructive repack bails on bogus ref

expecting success of 5312.6 'GIT_REF_PARANOIA=0 overrides safety': 
	create_bogus_ref &&
	GIT_REF_PARANOIA=0 git repack -adk

error: bad ref for .git/logs/refs/heads/bogus..name
ok 6 - GIT_REF_PARANOIA=0 overrides safety

expecting success of 5312.7 'destructive repack keeps packed object': 
	create_bogus_ref &&
	test_must_fail git repack -Ad --unpack-unreachable=now &&
	git cat-file -e $bogus &&
	test_must_fail git repack -ad &&
	git cat-file -e $bogus

fatal: bad object refs/heads/bogus..name
fatal: bad object refs/heads/bogus..name
ok 7 - destructive repack keeps packed object

expecting success of 5312.8 'destructive repack not confused by dangling symref': 
	test_when_finished "git symbolic-ref -d refs/heads/dangling" &&
	git symbolic-ref refs/heads/dangling refs/heads/does-not-exist &&
	git repack -ad &&
	test_must_fail git cat-file -e $bogus

ok 8 - destructive repack not confused by dangling symref

expecting success of 5312.9 'create history with missing tip commit': 
	test_tick && git commit --allow-empty -m one &&
	recoverable=$(git rev-parse HEAD) &&
	git cat-file commit $recoverable >saved &&
	test_tick && git commit --allow-empty -m two &&
	missing=$(git rev-parse HEAD) &&
	git checkout --detach $base &&
	rm .git/objects/$(echo $missing | sed "s,..,&/,") &&
	test_must_fail git cat-file -e $missing

[main 15af5e6] one
 Author: A U Thor <author@example.com>
[main 8c5ee6a] two
 Author: A U Thor <author@example.com>
HEAD is now at 3b20b2b main
ok 9 - create history with missing tip commit

expecting success of 5312.10 'pruning with a corrupted tip does not drop history': 
	test_when_finished "git hash-object -w -t commit saved" &&
	test_must_fail git prune --expire=now &&
	git cat-file -e $recoverable

fatal: unable to parse object: refs/heads/main
15af5e642cdab3c95868cf2b3d372994b5296daa
ok 10 - pruning with a corrupted tip does not drop history

expecting success of 5312.11 'pack-refs does not silently delete broken loose ref': 
	git pack-refs --all --prune &&
	echo $missing >expect &&
	git rev-parse refs/heads/main >actual &&
	test_cmp expect actual

error: refs/heads/main does not point to a valid object!
ok 11 - pack-refs does not silently delete broken loose ref

expecting success of 5312.12 'create packed-refs file with broken ref': 
	rm -f .git/refs/heads/main &&
	cat >.git/packed-refs <<-EOF &&
	$missing refs/heads/main
	$recoverable refs/heads/other
	EOF
	echo $missing >expect &&
	git rev-parse refs/heads/main >actual &&
	test_cmp expect actual

ok 12 - create packed-refs file with broken ref

expecting success of 5312.13 'pack-refs does not silently delete broken packed ref': 
	git pack-refs --all --prune &&
	git rev-parse refs/heads/main >actual &&
	test_cmp expect actual

ok 13 - pack-refs does not silently delete broken packed ref

expecting success of 5312.14 'pack-refs does not drop broken refs during deletion': 
	git update-ref -d refs/heads/other &&
	git rev-parse refs/heads/main >actual &&
	test_cmp expect actual

ok 14 - pack-refs does not drop broken refs during deletion

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5313-pack-bounds-checks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5313-pack-bounds-checks/.git/
expecting success of 5313.1 'setup': 
	test_oid_cache <<-EOF
	oid000 sha1:1485
	oid000 sha256:4222

	oidfff sha1:74
	oidfff sha256:1350
	EOF

ok 1 - setup

expecting success of 5313.2 'set up base packfile and variables': 
	# the hash of this content starts with ff, which
	# makes some later computations much simpler
	echo $(test_oid oidfff) >file &&
	git add file &&
	git commit -m base &&
	git repack -ad &&
	base=$(echo .git/objects/pack/*) &&
	chmod +w $base &&
	mkdir base-backup &&
	cp $base base-backup/ &&
	object=$(git rev-parse HEAD:file)

[master (root-commit) 6c5620f] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 2 - set up base packfile and variables

expecting success of 5313.3 'pack/index object count mismatch': 
	do_pack $object &&
	munge $pack 8 "\377\0\0\0" &&
	clear_base &&

	# We enumerate the objects from the completely-fine
	# .idx, but notice later that the .pack is bogus
	# and fail to show any data.
	echo "$object missing" >expect &&
	git cat-file --batch-all-objects --batch-check >actual &&
	test_cmp expect actual &&

	# ...and here fail to load the object (without segfaulting),
	# but fallback to a good copy if available.
	test_must_fail git cat-file blob $object &&
	restore_base &&
	git cat-file blob $object >actual &&
	test_cmp file actual &&

	# ...and make sure that index-pack --verify, which has its
	# own reading routines, does not segfault.
	test_must_fail git index-pack --verify $pack

4+0 records in
4+0 records out
4 bytes copied, 0.000538687 s, 7.4 kB/s
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
error: packfile .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack claims to have 4278190080 objects while index indicates 1 objects
fatal: git cat-file fff0a2476aa5c8e60a3ef21cfc66e0cc670920be: bad file
fatal: data too large to fit into virtual memory space
ok 3 - pack/index object count mismatch

expecting success of 5313.4 'matched bogus object count': 
	do_pack $object &&
	munge $pack 8 "\377\0\0\0" &&
	munge $idx $((255 * 4)) "\377\0\0\0" &&
	clear_base &&

	# Unlike above, we should notice early that the .idx is totally
	# bogus, and not even enumerate its contents.
	git cat-file --batch-all-objects --batch-check >actual &&
	test_must_be_empty actual &&

	# But as before, we can do the same object-access checks.
	test_must_fail git cat-file blob $object &&
	restore_base &&
	git cat-file blob $object >actual &&
	test_cmp file actual &&

	test_must_fail git index-pack --verify $pack

4+0 records in
4+0 records out
4 bytes copied, 0.000805029 s, 5.0 kB/s
4+0 records in
4+0 records out
4 bytes copied, 0.00064069 s, 6.2 kB/s
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
fatal: git cat-file fff0a2476aa5c8e60a3ef21cfc66e0cc670920be: bad file
error: non-monotonic index .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx
fatal: Cannot open existing pack idx file for '.git/objects/pack/pack-67be769e2843d598c78218852612520795998892.idx'
ok 4 - matched bogus object count

expecting success of 5313.5 'bogus object offset (v1)': 
	do_pack $object --index-version=1 &&
	munge $idx $((4 * 256)) "\377\0\0\0" &&
	clear_base &&
	test_must_fail git cat-file blob $object &&
	test_must_fail git index-pack --verify $pack

4+0 records in
4+0 records out
4 bytes copied, 0.000551687 s, 7.3 kB/s
fatal: offset beyond end of packfile (truncated pack?)
fatal: offset beyond end of packfile (truncated pack?)
ok 5 - bogus object offset (v1)

expecting success of 5313.6 'bogus object offset (v2, no msb)': 
	do_pack $object --index-version=2 &&
	munge $idx $(ofs_table 1) "\0\377\0\0" &&
	clear_base &&
	test_must_fail git cat-file blob $object &&
	test_must_fail git index-pack --verify $pack

4+0 records in
4+0 records out
4 bytes copied, 0.000475684 s, 8.4 kB/s
fatal: offset beyond end of packfile (truncated pack?)
fatal: offset beyond end of packfile (truncated pack?)
ok 6 - bogus object offset (v2, no msb)

expecting success of 5313.7 'bogus offset into v2 extended table': 
	do_pack $object --index-version=2 &&
	munge $idx $(ofs_table 1) "\377\0\0\0" &&
	clear_base &&
	test_must_fail git cat-file blob $object &&
	test_must_fail git index-pack --verify $pack

4+0 records in
4+0 records out
4 bytes copied, 0.000534019 s, 7.5 kB/s
fatal: offset before start of pack index for .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack (corrupt index?)
fatal: offset before start of pack index for .git/objects/pack/pack-67be769e2843d598c78218852612520795998892.pack (corrupt index?)
ok 7 - bogus offset into v2 extended table

expecting success of 5313.8 'bogus offset inside v2 extended table': 
	# We need two objects here, so we can plausibly require
	# an extended table (if the first object were larger than 2^31).
	#
	# Note that the value is important here. We want $object as
	# the second entry in sorted-hash order. The hash of this object starts
	# with "000", which sorts before that of $object (which starts
	# with "fff").
	second=$(test_oid oid000 | git hash-object -w --stdin) &&
	do_pack "$object $second" --index-version=2 &&

	# We have to make extra room for the table, so we cannot
	# just munge in place as usual.
	{
		dd if=$idx bs=1 count=$(($(ofs_table 2) + 4)) &&
		printf "\200\0\0\0" &&
		printf "\377\0\0\0\0\0\0\0" &&
		dd if=$idx bs=1 skip=$(extended_table 2)
	} >tmp &&
	mv tmp "$idx" &&
	clear_base &&
	test_must_fail git cat-file blob $object &&
	test_must_fail git index-pack --verify $pack

1084+0 records in
1084+0 records out
1084 bytes (1.1 kB, 1.1 KiB) copied, 0.0667115 s, 16.2 kB/s
40+0 records in
40+0 records out
40 bytes copied, 0.00175873 s, 22.7 kB/s
fatal: offset before end of packfile (broken .idx?)
fatal: offset before end of packfile (broken .idx?)
ok 8 - bogus offset inside v2 extended table

expecting success of 5313.9 'bogus OFS_DELTA in packfile': 
	# Generate a pack with a delta in it.
	base=$(test-tool genrandom foo 3000 | git hash-object --stdin -w) &&
	delta=$(test-tool genrandom foo 2000 | git hash-object --stdin -w) &&
	do_pack "$base $delta" --delta-base-offset &&
	rm -f .git/objects/??/* &&

	# Double check that we have the delta we expect.
	echo $base >expect &&
	echo $delta | git cat-file --batch-check="%(deltabase)" >actual &&
	test_cmp expect actual &&

	# Now corrupt it. We assume the varint size for the delta is small
	# enough to fit in the first byte (which it should be, since it
	# is a pure deletion from the base), and that original ofs_delta
	# takes 2 bytes (which it should, as it should be ~3000).
	ofs=$(git show-index <$idx | grep $delta | cut -d" " -f1) &&
	munge $pack $(($ofs + 1)) "\177\377" &&
	test_must_fail git cat-file blob $delta >/dev/null

2+0 records in
2+0 records out
2 bytes copied, 0.000482018 s, 4.1 kB/s
error: bad offset for revindex
fatal: packed object 49fca29a258fafab9eb7e08a4325c335fa999cb6 (stored in .git/objects/pack/pack-8b2bcfe25ac8b931c950b271f97a8d767c427364.pack) is corrupt
ok 9 - bogus OFS_DELTA in packfile

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5314-pack-cycle-detection.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5314-pack-cycle-detection/.git/
expecting success of 5314.1 'setup': 
	test-tool genrandom base 4096 >base &&
	for i in one two
	do
		# we want shared content here to encourage deltas...
		cp base file &&
		echo $i >>file &&

		# ...whereas dummy should be short, because we do not want
		# deltas that would create duplicates when we --fix-thin
		echo $i >dummy &&

		git add file dummy &&
		test_tick &&
		git commit -m $i ||
		return 1
	done &&

	make_pack HEAD^ HEAD &&
	make_pack HEAD HEAD^

[master (root-commit) e98f41e] one
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 dummy
 create mode 100644 file
[master 1d543a7] two
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
pack	86885ae86429a2983f8a2824647f8b7773ff8e16
pack	8a63be3313e6a04258b6d166a5abfb3005aac8f8
ok 1 - setup

expecting success of 5314.2 'repack': 
	# We first want to check that we do not have any internal errors,
	# and also that we do not hit the last-ditch cycle-breaking code
	# in write_object(), which will issue a warning to stderr.
	git repack -ad 2>stderr &&
	test_must_be_empty stderr &&

	# And then double-check that the resulting pack is usable (i.e.,
	# we did not fail to notice any cycles). We know we are accessing
	# the objects via the new pack here, because "repack -d" will have
	# removed the others.
	git cat-file blob HEAD:file >/dev/null &&
	git cat-file blob HEAD^:file >/dev/null

ok 2 - repack

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5315-pack-objects-compression.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5315-pack-objects-compression/.git/
expecting success of 5315.1 'setup': 
	printf "%2000000s" X |
	git hash-object -w --stdin >object-name &&
	# make sure it resulted in a loose object
	ob=$(sed -e "s/\(..\).*/\1/" object-name) &&
	ject=$(sed -e "s/..\(.*\)/\1/" object-name) &&
	test -f .git/objects/$ob/$ject

ok 1 - setup

expecting success of 5315.2 'pack-objects with -c core.compression=0': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
914337c67e9cd1ab74ffb73c96318b9e5409e0b1
ok 2 - pack-objects with -c core.compression=0

expecting success of 5315.3 'pack-objects with -c core.compression=9': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
deee478811b863f9bb7b87717ddca65a1d6c6e18
ok 3 - pack-objects with -c core.compression=9

expecting success of 5315.4 'pack-objects with -c core.compression=0 -c pack.compression=0': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
914337c67e9cd1ab74ffb73c96318b9e5409e0b1
ok 4 - pack-objects with -c core.compression=0 -c pack.compression=0

expecting success of 5315.5 'pack-objects with -c core.compression=9 -c pack.compression=0': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
914337c67e9cd1ab74ffb73c96318b9e5409e0b1
ok 5 - pack-objects with -c core.compression=9 -c pack.compression=0

expecting success of 5315.6 'pack-objects with -c core.compression=0 -c pack.compression=9': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
deee478811b863f9bb7b87717ddca65a1d6c6e18
ok 6 - pack-objects with -c core.compression=0 -c pack.compression=9

expecting success of 5315.7 'pack-objects with -c core.compression=9 -c pack.compression=9': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
deee478811b863f9bb7b87717ddca65a1d6c6e18
ok 7 - pack-objects with -c core.compression=9 -c pack.compression=9

expecting success of 5315.8 'pack-objects with -c pack.compression=0': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
914337c67e9cd1ab74ffb73c96318b9e5409e0b1
ok 8 - pack-objects with -c pack.compression=0

expecting success of 5315.9 'pack-objects with -c pack.compression=9': 
		test_when_finished "rm -f pack-*.*" &&
		git $config pack-objects pack <object-name &&
		sz=$(test_file_size pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
deee478811b863f9bb7b87717ddca65a1d6c6e18
ok 9 - pack-objects with -c pack.compression=9

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5302-pack-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5302-pack-index/.git/
expecting success of 5302.1 'setup': 
	rawsz=$(test_oid rawsz) &&
	rm -rf .git &&
	git init &&
	git config pack.threads 1 &&
	i=1 &&
	while test $i -le 100
	do
		iii=$(printf "%03i" $i) &&
		test-tool genrandom "bar" 200 > wide_delta_$iii &&
		test-tool genrandom "baz $iii" 50 >> wide_delta_$iii &&
		test-tool genrandom "foo"$i 100 > deep_delta_$iii &&
		test-tool genrandom "foo"$(expr $i + 1) 100 >> deep_delta_$iii &&
		test-tool genrandom "foo"$(expr $i + 2) 100 >> deep_delta_$iii &&
		echo $iii >file_$iii &&
		test-tool genrandom "$iii" 8192 >>file_$iii &&
		git update-index --add file_$iii deep_delta_$iii wide_delta_$iii &&
		i=$(expr $i + 1) || return 1
	done &&
	{ echo 101 && test-tool genrandom 100 8192; } >file_101 &&
	git update-index --add file_101 &&
	tree=$(git write-tree) &&
	commit=$(git commit-tree $tree </dev/null) && {
		echo $tree &&
		git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\)	.*/\\1/"
	} >obj-list &&
	git update-ref HEAD $commit

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5302-pack-index/.git/
ok 1 - setup

expecting success of 5302.2 'pack-objects with index version 1': 
	pack1=$(git pack-objects --index-version=1 test-1 <obj-list) &&
	git verify-pack -v "test-1-${pack1}.pack"

4307528f01beff143cd36a903cb8c9a9983a4c27 tree   12036 7200 12
e43b5801e4ac39a512e5d9423fc272cf5c3343f9 blob   300 313 7212
78fcb2fa30f448929fae32736f0fb56733d08746 blob   108 141 7525 1 e43b5801e4ac39a512e5d9423fc272cf5c3343f9
1c547eac61c40965963e85a56c24991ab1a0e3ef blob   108 141 7666 2 78fcb2fa30f448929fae32736f0fb56733d08746
571c7b54485960a9820927983c702eec1b41e91a blob   108 141 7807 3 1c547eac61c40965963e85a56c24991ab1a0e3ef
671d8800ae6936f107d70de2dbec536afb47d89a blob   108 141 7948 4 571c7b54485960a9820927983c702eec1b41e91a
f2377b316d0d92e3c29a2d6dba598ca02fb80e9c blob   108 141 8089 5 671d8800ae6936f107d70de2dbec536afb47d89a
0483297992ed4cd5ab3b5790912b1f03598ea660 blob   108 141 8230 6 f2377b316d0d92e3c29a2d6dba598ca02fb80e9c
1ddb0e1ff0db350df93807fda44ef75358d7ddb0 blob   108 141 8371 7 0483297992ed4cd5ab3b5790912b1f03598ea660
19dec2e189cd33584d2173979aecea01b3c59904 blob   108 141 8512 8 1ddb0e1ff0db350df93807fda44ef75358d7ddb0
2bc95d3b86ed1808b73d84f5c0287a61df979063 blob   108 141 8653 9 19dec2e189cd33584d2173979aecea01b3c59904
b8f11d512203fd0260eb79edd5cfca416ca404cb blob   300 313 8794
ef790963bda7ffd9e3556cf4211492680b34c2bf blob   108 141 9107 1 b8f11d512203fd0260eb79edd5cfca416ca404cb
a854bd2ad779f987395c790d0aa378277a7d3216 blob   108 141 9248 2 ef790963bda7ffd9e3556cf4211492680b34c2bf
b750a0431df80025eff766f0811e6a85e1dbc32a blob   108 141 9389 3 a854bd2ad779f987395c790d0aa378277a7d3216
9e793c3eeb7402e17eafb61928b96648a54a8789 blob   108 141 9530 4 b750a0431df80025eff766f0811e6a85e1dbc32a
35691bb59cfc8e5f0749a3c2df2d236150d7f7d1 blob   108 141 9671 5 9e793c3eeb7402e17eafb61928b96648a54a8789
0df5edef6dcc6452cf814984a4d4ea23a8e41e3c blob   108 141 9812 6 35691bb59cfc8e5f0749a3c2df2d236150d7f7d1
305f923c2d2e1fff9ec067b42443fff88aeebc67 blob   108 141 9953 7 0df5edef6dcc6452cf814984a4d4ea23a8e41e3c
67db08cb82e0053ee51773fbf4bdc50094e03767 blob   108 141 10094 8 305f923c2d2e1fff9ec067b42443fff88aeebc67
61a87ea87b8af074a75d0af78e77f2ed6141922c blob   108 141 10235 9 67db08cb82e0053ee51773fbf4bdc50094e03767
5e69af01a42867f9be8213089efc57c6a1517976 blob   300 313 10376
1280048552e2ee86127654132148d3c2e208b397 blob   108 141 10689 1 5e69af01a42867f9be8213089efc57c6a1517976
ec86b748af33306ff620ebe591da28ed622c1b4d blob   108 141 10830 2 1280048552e2ee86127654132148d3c2e208b397
ce83a0772693235f137100863f4217f9c6398a53 blob   108 141 10971 3 ec86b748af33306ff620ebe591da28ed622c1b4d
ebd5d1af0d246aa4f8e288c539b906eb765d48e1 blob   108 141 11112 4 ce83a0772693235f137100863f4217f9c6398a53
ef99659edf6a12a9320e29453d1e17054863c3d1 blob   108 141 11253 5 ebd5d1af0d246aa4f8e288c539b906eb765d48e1
17dc4d50c25440e569d3c4dabf41bb562c9013fc blob   108 141 11394 6 ef99659edf6a12a9320e29453d1e17054863c3d1
36a0964d29672133cea581290233bae77c3b8cca blob   108 141 11535 7 17dc4d50c25440e569d3c4dabf41bb562c9013fc
60a658626764685c980311c6325263eabdbe0547 blob   108 141 11676 8 36a0964d29672133cea581290233bae77c3b8cca
a7b6688d2a6f15e6f91d1701f64ca7da42a5a73a blob   108 141 11817 9 60a658626764685c980311c6325263eabdbe0547
ef1259b944f1b0c4ade62c049c2ea41daf63ccc7 blob   300 313 11958
612f382c01ffd0ea89c2a840cc683cfd1108628e blob   108 141 12271 1 ef1259b944f1b0c4ade62c049c2ea41daf63ccc7
ba0b924be466e9d85f8ba5563211e570d12d2841 blob   108 141 12412 2 612f382c01ffd0ea89c2a840cc683cfd1108628e
d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e blob   108 141 12553 3 ba0b924be466e9d85f8ba5563211e570d12d2841
e80b417ea517c993f906556a00fa8acaceb559b4 blob   108 141 12694 4 d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e
8cc2e1974c339c43bd481c205ea0024b54dbcb83 blob   108 141 12835 5 e80b417ea517c993f906556a00fa8acaceb559b4
8e57f0560c1135c5cdaca2c69094489ad6ddcdb0 blob   108 141 12976 6 8cc2e1974c339c43bd481c205ea0024b54dbcb83
416013a155571063a96f1e443ee44a8ac3f09c1b blob   108 141 13117 7 8e57f0560c1135c5cdaca2c69094489ad6ddcdb0
8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed blob   108 141 13258 8 416013a155571063a96f1e443ee44a8ac3f09c1b
beb699952b6a188a54675c11696cb6a2652b5249 blob   108 141 13399 9 8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed
0f66db930e6ce643852ad45eb91dc203575fb5f4 blob   300 313 13540
9a3a619d26a6e19b556d119d760b40a6397a9df4 blob   108 141 13853 1 0f66db930e6ce643852ad45eb91dc203575fb5f4
66336af04f97cfd40474e8aa4cea2e25275b5f94 blob   108 141 13994 2 9a3a619d26a6e19b556d119d760b40a6397a9df4
bf8886056d3abf37690115bfee10bf14ef5e4db9 blob   108 141 14135 3 66336af04f97cfd40474e8aa4cea2e25275b5f94
2c1120aee9298045837641feab263b3655725aa3 blob   108 141 14276 4 bf8886056d3abf37690115bfee10bf14ef5e4db9
f47f0d90220589a45dbccd06c8468eca7c04d70a blob   108 141 14417 5 2c1120aee9298045837641feab263b3655725aa3
add63edc5ce2dd58ff7d66b153f44d03b0d93df2 blob   108 141 14558 6 f47f0d90220589a45dbccd06c8468eca7c04d70a
75642e5399f1b51a33f0c6430af2fd997e4db578 blob   108 141 14699 7 add63edc5ce2dd58ff7d66b153f44d03b0d93df2
64e473488413d66fe6e464b3f09827501eb353fe blob   108 141 14840 8 75642e5399f1b51a33f0c6430af2fd997e4db578
597244daf249731fc922a26acfe6fb9ea3baca7f blob   108 141 14981 9 64e473488413d66fe6e464b3f09827501eb353fe
8d5f6b41255c60ea8f44892b918a38eebe43de6b blob   300 313 15122
c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94 blob   108 141 15435 1 8d5f6b41255c60ea8f44892b918a38eebe43de6b
0246ff570c396c37ff08c0f5f9d88c84fc21a297 blob   108 141 15576 2 c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94
cff9bb4b47c1bc50205d6a793d8d02bee852a229 blob   108 141 15717 3 0246ff570c396c37ff08c0f5f9d88c84fc21a297
2096ec927d087ee1076f1118e8fe48ab21a27bd7 blob   108 141 15858 4 cff9bb4b47c1bc50205d6a793d8d02bee852a229
0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501 blob   108 141 15999 5 2096ec927d087ee1076f1118e8fe48ab21a27bd7
633de7a70fe29cecb721bb5033573fbf175b31fc blob   108 141 16140 6 0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501
76db9ca0f1afa9c247d4c5a2fe60ca95154fd465 blob   108 141 16281 7 633de7a70fe29cecb721bb5033573fbf175b31fc
df4c5c8e8e25621bba74f233d59c76e5810f8677 blob   108 141 16422 8 76db9ca0f1afa9c247d4c5a2fe60ca95154fd465
9fc4cce844af6ed26932eb84045df0ab4a79f0b7 blob   108 141 16563 9 df4c5c8e8e25621bba74f233d59c76e5810f8677
ef3ddda4c2922f10089dfed6436267b445d5b118 blob   300 313 16704
1bdedd473270eef5c2c67c968ba1d5ee081013ee blob   108 141 17017 1 ef3ddda4c2922f10089dfed6436267b445d5b118
9d28c1ea0790ee28b8c35bc3fe88629980708730 blob   108 141 17158 2 1bdedd473270eef5c2c67c968ba1d5ee081013ee
a3264a35996ccaf722f869be8e379864e28ef561 blob   108 141 17299 3 9d28c1ea0790ee28b8c35bc3fe88629980708730
cd6f1b15bb20b9c706f8f80c77b7c210921f0b26 blob   108 141 17440 4 a3264a35996ccaf722f869be8e379864e28ef561
60601746c22df38cc0bcbce68f359fb2796d7569 blob   108 141 17581 5 cd6f1b15bb20b9c706f8f80c77b7c210921f0b26
f15a3f5dae93709cce491d407dad343f9577d8c5 blob   108 141 17722 6 60601746c22df38cc0bcbce68f359fb2796d7569
5dd384bbc7186571a9cccdba2ebaa794e87bfbdd blob   108 141 17863 7 f15a3f5dae93709cce491d407dad343f9577d8c5
d18475904b78554f1fd6f96b4c1ad44e84edf873 blob   108 141 18004 8 5dd384bbc7186571a9cccdba2ebaa794e87bfbdd
67728c76be3b7d5319ff2a93fc78aca0ff3824eb blob   108 141 18145 9 d18475904b78554f1fd6f96b4c1ad44e84edf873
c1ec14f204e244f32aa93c66e3fb6a7d4f58c081 blob   300 313 18286
258424ed6e5c4377a2aa55fb6d4818a3580291ad blob   108 141 18599 1 c1ec14f204e244f32aa93c66e3fb6a7d4f58c081
fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2 blob   108 141 18740 2 258424ed6e5c4377a2aa55fb6d4818a3580291ad
e1bfca166c2ff676f665fd3c58d7dea896ec48d7 blob   108 141 18881 3 fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2
383c3c67e93cfd05d272b187e3af5c1e00bcae5c blob   108 141 19022 4 e1bfca166c2ff676f665fd3c58d7dea896ec48d7
ad6a3267a9e0d49014eec133a5e968315e8ce834 blob   108 141 19163 5 383c3c67e93cfd05d272b187e3af5c1e00bcae5c
9dfc592085bb14371890b41e48c98b220420669b blob   108 141 19304 6 ad6a3267a9e0d49014eec133a5e968315e8ce834
c872afc7539f689178b7385010010ca7aef8f09a blob   108 141 19445 7 9dfc592085bb14371890b41e48c98b220420669b
1bc038b18c5039a05e173da2fd2b65b3d34ccd2b blob   108 141 19586 8 c872afc7539f689178b7385010010ca7aef8f09a
bdd7bd883f75c1726538851757168dc0dc33e222 blob   108 141 19727 9 1bc038b18c5039a05e173da2fd2b65b3d34ccd2b
71529d6ca58922aa05603b6f2784f87cad8703cf blob   300 313 19868
2bebfa6240e319a1c31951d05c8135f089fbbd29 blob   108 141 20181 1 71529d6ca58922aa05603b6f2784f87cad8703cf
83fcb919ae7bc9a80912c9bfd5731acd36666480 blob   108 141 20322 2 2bebfa6240e319a1c31951d05c8135f089fbbd29
b97506df40bbd212b52062b851cd88f04abb59b3 blob   108 141 20463 3 83fcb919ae7bc9a80912c9bfd5731acd36666480
298dc4942c3b3db53d484ffa86b451755cd2125f blob   108 141 20604 4 b97506df40bbd212b52062b851cd88f04abb59b3
ba11c807afc9699e7ea1cab791699bfd698c7e7d blob   108 141 20745 5 298dc4942c3b3db53d484ffa86b451755cd2125f
b1281e620292c2e74d8770eb99f0b6871e4cca59 blob   108 141 20886 6 ba11c807afc9699e7ea1cab791699bfd698c7e7d
368cd4d02a420764e0d31b35576f73b777c34604 blob   108 141 21027 7 b1281e620292c2e74d8770eb99f0b6871e4cca59
16d1323e84e3d5b058ab2ac8245db85bc4606c88 blob   108 141 21168 8 368cd4d02a420764e0d31b35576f73b777c34604
711d5e6b0d21b3aa205dcc960ec51475be8a25a5 blob   108 141 21309 9 16d1323e84e3d5b058ab2ac8245db85bc4606c88
d174d532539487c9aedbbaf38d556061b5acf826 blob   300 313 21450
bf5dcb9013df15ff0ae10e0682a92a7688a7720b blob   108 141 21763 1 d174d532539487c9aedbbaf38d556061b5acf826
fb214b786310655bc8ee46d89ca9a04ec9aed0c3 blob   108 141 21904 2 bf5dcb9013df15ff0ae10e0682a92a7688a7720b
b94140f4006d05e7e3822f5db19adc2b73a2cc05 blob   108 141 22045 3 fb214b786310655bc8ee46d89ca9a04ec9aed0c3
4019b50c838197ca4b8d664a4164a183cac8ad11 blob   108 141 22186 4 b94140f4006d05e7e3822f5db19adc2b73a2cc05
2826157afde0e74742115842ac2dddf5c3b5e23e blob   108 141 22327 5 4019b50c838197ca4b8d664a4164a183cac8ad11
99556fcde6a0be62a72c8b0c6682576a1d596bea blob   108 141 22468 6 2826157afde0e74742115842ac2dddf5c3b5e23e
8f5e7974c287b07f1cf8116485c4135340b807f3 blob   108 141 22609 7 99556fcde6a0be62a72c8b0c6682576a1d596bea
f9982291dfe87a9def1b12d24f9ca9a024a9dd8e blob   108 141 22750 8 8f5e7974c287b07f1cf8116485c4135340b807f3
3c5c0be699798d2f4fbe651051b9f17156f133c1 blob   108 141 22891 9 f9982291dfe87a9def1b12d24f9ca9a024a9dd8e
1297547aab30f952af805d38f6f1c1930cb3117b blob   8196 8210 23032
862f6954d9afd549b48fa2ef8e2f8ab96e309916 blob   8196 8210 31242
0471b3b8ab8da19f3968dc238e9555f4e48ce858 blob   8196 8210 39452
c80092496b80b5f21503b8c838dccfc1f2e2ddde blob   8196 8210 47662
e5a12c79cec70d52817054c4b9ef321003c6755f blob   8196 8210 55872
bf96a31446f37d8e57bb38a00797aa3af1f99370 blob   8196 8210 64082
0508b858e01f0367552fb14722388ba48dbd36f7 blob   8196 8210 72292
359017d1534767455090901a260985de1658d752 blob   8196 8210 80502
8d06001a3d38390afa66576caa6c55c796e33835 blob   8196 8210 88712
8162ceb825c07e3b1e17f5775665085da9b1e855 blob   8196 8210 96922
6910c5a645c9fe7f6b728034566b1668f0677a8e blob   8196 8210 105132
09ba511a995b8ea75067036d5c046f39052a3bd8 blob   8196 8210 113342
f45d142313c7a5270a60c664bb463cddadc467c1 blob   8196 8210 121552
964e51bf7d344bda71ea5e12dbd7bfb90120fcf0 blob   8196 8210 129762
408dd031138139f6ac6f402988f960527871f71a blob   8196 8210 137972
912fa0ec5536f31122e34577a4baf3b22d40de2a blob   8196 8210 146182
f02359c44ca04a542cc5bf59aa5f1de6cd1d5a4c blob   8196 8210 154392
b0566dd5d479c80c278bd5455c92aca689328471 blob   8196 8210 162602
49d17d605f042c1e978a68f625be6ab6294fa8fa blob   8196 8210 170812
8f744480abe8ad05bc419d1ab2e375b9c0fa3978 blob   8196 8210 179022
fff3a3a92d2268a464dbdcd00fc055885ee3cba9 blob   8196 8210 187232
f5fc0ff4afc14d9dfcb2580d3f438edd4cd8130a blob   8196 8210 195442
01179d82b18c252824e20e190543e0e84950d820 blob   8196 8210 203652
de3ed457f973b7ffb20edc36002c47a6e4b41066 blob   8196 8210 211862
9c4e1f8c16d04d90a2217279240996276d617067 blob   8196 8210 220072
816f18d19f433f5df9edbfb5547684b519fdeb3b blob   8196 8210 228282
72e7428e5ee3797ca0bf955f723b915bee919c48 blob   8196 8210 236492
41adb5af8e7f9737b16261fb0c224c7550c82f23 blob   8196 8210 244702
94f5d368a7c4ea294c463dc45cf15d387fa83c4e blob   8196 8210 252912
85fdf2eed169dbc1fe2d71439b589b0326dad12b blob   8196 8210 261122
bab18d872e9183c6d450b326477205bb0cc081cb blob   8196 8210 269332
b31fb3fb181512bc608b58cb33323d97ad6eac2f blob   8196 8210 277542
20a9519106ab64bf043456a58b6bfb04f1c7b39d blob   8196 8210 285752
94a015b2b6053f7a1d541969919e879bb2b75eef blob   8196 8210 293962
7353550b9b0e1da4f68b9484dfad2634100a00cc blob   8196 8210 302172
e28a360bcbd69ca1a0bb47834e640069c6672a8d blob   8196 8210 310382
8e6ffc05856460c2e08c8e9d824bbf510d3c1b52 blob   8196 8210 318592
ceade5760b1ba0bc11d4e4db6982ddf671495e58 blob   8196 8210 326802
92534f38b94c1da321d88c9ab5af8c3e804c2507 blob   8196 8210 335012
f5577acbfd83dddf90b2054d6cb5dce2df6d06ee blob   8196 8210 343222
59a27076dc0a8989215a160d61ac401e41c05126 blob   8196 8210 351432
2db6b919f253444b5437d8251e5d101d5a34e1b3 blob   8196 8210 359642
c1c35c36d4300da28c0570746adaf2f5b0b015a3 blob   8196 8210 367852
03a6f56dbbb556425ef8c43c31519b32eb5629a4 blob   8196 8210 376062
dd6209d4c0c5d4f210a8d1bb4a4d314cf284dea9 blob   8196 8210 384272
8c04fa425f4dfb4555b376e73d8f28d56b97a569 blob   8196 8210 392482
614e235cd8ca8af7ccf402a92eb34baadaaa3f18 blob   8196 8210 400692
b2f07ee5771d9e0de7166bc72a4a7ebce9830779 blob   8196 8210 408902
852ba0cf084474c1b0b48052606ae27346a5b1a1 blob   8196 8210 417112
15ff79f644a0596529eba0592017dce39e222b8e blob   8196 8210 425322
75f67c0c230f8923db5831094b1cc67f61bf1734 blob   8196 8210 433532
95b51158cd6365da9b10f1d8b06ba76dc5d5c5f1 blob   8196 8210 441742
5217ce416b26a3d76191d873490110746d0e8a04 blob   8196 8210 449952
c16eb68827fa5d6da73b320b431cf736c7a6a4af blob   8196 8210 458162
57983aab7f7384626a6a1f9ec08fba1902dd11e5 blob   8196 8210 466372
84e4d2ce637781776791c8e2cf4a9312a2783ceb blob   8196 8210 474582
2175a1a9d8757b3836f5cc44c6af0297aea36709 blob   8196 8210 482792
9b655d54faaf0a737a03731852f27cf6b552bcaf blob   8196 8210 491002
a3233ba1323f07a0d68f6020e7209025819cfa13 blob   8196 8210 499212
5a65a213ee0ebdc285c8e8eca24e9eda97f8a384 blob   8196 8210 507422
de1679ebb44d3fe59e8d2378471b56db384fb181 blob   8196 8210 515632
d2e455cc03081911f9ecd81245becd858d1e64ca blob   8196 8210 523842
72826d3e97bc228616e06235566a0db59c94bd74 blob   8196 8210 532052
debe389b3bdd62d96748db592e99cb0cc7b1b0f2 blob   8196 8210 540262
e572e59eee8119f8fb58e8595ecd0c622f2d6e29 blob   8196 8210 548472
197f45d948a36ac3762e5daf6ef4d43a5d969503 blob   8196 8210 556682
fb294d29a9d045d5a46a9c00e53777b394ceb346 blob   8196 8210 564892
10f7133774acbc162f5f79804744d64747eee380 blob   8196 8210 573102
16b9dea85eab6d7e452bdea4889e24a8ad79afd5 blob   8196 8210 581312
08a8cf223e5dc57504da3cd8eb56d33f276dc1b9 blob   8196 8210 589522
e3332ff9a2540b45e599be0c7bca8bbe28af2b43 blob   8196 8210 597732
5e1b961ae623672df764f64b737f332318d43baa blob   8196 8210 605942
14caba1bc2835573f3c20b7f2e5fb638a08e12ee blob   8196 8210 614152
84d1369c26d187b24dffe9029e81e119e4a374f5 blob   8196 8210 622362
5ef3a0f4954ade2d5c290ccc4d791c3b219d89ea blob   8196 8210 630572
610d16151ceb1dc4d5138f63ed410819a8b9161c blob   8196 8210 638782
3545eb1f5549261267ab0577b94372e88b49731d blob   8196 8210 646992
0d6e5c0388744cf82463ce1283ff99e863e9b26e blob   8196 8210 655202
611261b75bd720d3433ea8975d555b1ac3e692bd blob   8196 8210 663412
e25dc2ac80f9f78aa2809b5cd254ce47a51efbe5 blob   8196 8210 671622
ea5a4b4fed0bab7beffd3c7fc6cc549df47017d7 blob   8196 8210 679832
d68756996794df8c00dfcbf520662b14cb06958e blob   8196 8210 688042
b5b44a475116c2d0054edf54c699909d5d583aac blob   8196 8210 696252
99ff18078623c32b85a49cc8a03e3c58ee94eecb blob   8196 8210 704462
159fdc73e63cf90624d128d87b8185154727714e blob   8196 8210 712672
1f0ca97497381a196e53a7639ee769ed019469a3 blob   8196 8210 720882
6dbed45fde708bb67e6b21bd55976483305f9e74 blob   8196 8210 729092
b5ec32ad29b65e5742cd1857d17e92c2efc5da96 blob   8196 8210 737302
cf823d111604e8a014e0702b5e15b242bb961c78 blob   8196 8210 745512
72528baaeeba0d9c01da36a7a0add1ac49d860f2 blob   8196 8210 753722
b976a8fd346486d78cdebeaa0b0ac200befca629 blob   8196 8210 761932
e652cd97e9aae1523d892c1f417274dd26c3bcd3 blob   8196 8210 770142
aa82432626cc08fb818a20aa62b607aa52e7b35d blob   8196 8210 778352
d67069815168092ee0eadeab8177002bd0376b6f blob   8196 8210 786562
fa7ca115eb82e14f0263990362d4fc27591e1143 blob   8196 8210 794772
5cadb04c4d4ec953dffc528bf75561a6ae1c5820 blob   8196 8210 802982
a769ce6dfe1abe1b6162627b2b5df89f4f7d4317 blob   8196 8210 811192
bf265906aab0df90b6a4bdb1fe6f8088a9038435 blob   8196 8210 819402
b302b77fd5595784b5e85e91f8b4314fff49a6a1 blob   8196 8210 827612
3927444e44b49dfa6cdc768298ae879ec298c45d blob   8196 8210 835822
0b968294884af115eb5a1b941b3dabd48470c3bb blob   12 41 844032 1 3927444e44b49dfa6cdc768298ae879ec298c45d
34a68de99f94f6f9e437a288349602768eae4b92 blob   250 263 844073
8517d36660dffb896fb4e283ad110023aaebaf1b blob   57 90 844336 1 34a68de99f94f6f9e437a288349602768eae4b92
e3fc6633c069c8e246d77a408e4747c2852ba44a blob   57 90 844426 1 34a68de99f94f6f9e437a288349602768eae4b92
37a071e55d1f2e07af146ca6017d98dd85beae68 blob   57 90 844516 1 34a68de99f94f6f9e437a288349602768eae4b92
a8179a233b7aeeb7a450c5d321d4b73df936b64b blob   57 90 844606 1 34a68de99f94f6f9e437a288349602768eae4b92
99e0b239888c8b71671fb948e41111876e61a3c2 blob   57 90 844696 1 34a68de99f94f6f9e437a288349602768eae4b92
e26e04b4786bf6b0ec3c5d528e7002cd58e2401b blob   57 90 844786 1 34a68de99f94f6f9e437a288349602768eae4b92
a6106f10ea80724dbc32b328d9892111589a2111 blob   57 90 844876 1 34a68de99f94f6f9e437a288349602768eae4b92
d1669a170780865ccd7645211c2e1cebdfb28aad blob   57 90 844966 1 34a68de99f94f6f9e437a288349602768eae4b92
53a19e0c2c34ef1a4e1bbc9aa1cba4cb9bc2dd80 blob   57 90 845056 1 34a68de99f94f6f9e437a288349602768eae4b92
26ff29a62e7a6359d3975813fd645af871576125 blob   57 90 845146 1 34a68de99f94f6f9e437a288349602768eae4b92
c1d6b9953613f5732cd40d8cffbb2b746a71fb92 blob   57 90 845236 1 34a68de99f94f6f9e437a288349602768eae4b92
a2bfcc19d1592c43af33617500394e1ac09e968c blob   57 90 845326 1 34a68de99f94f6f9e437a288349602768eae4b92
36c0479c58cef0b9a10b56934ed42a862e1dcfe2 blob   57 90 845416 1 34a68de99f94f6f9e437a288349602768eae4b92
642aa265517d66c88f030a2230eb97e77c973905 blob   57 90 845506 1 34a68de99f94f6f9e437a288349602768eae4b92
29cd4721cd3cef7f5a2e032d6c2d6908427cd5af blob   57 90 845596 1 34a68de99f94f6f9e437a288349602768eae4b92
ae5ccb1578fbc399571f4f0132edd18c55b19ef0 blob   57 90 845686 1 34a68de99f94f6f9e437a288349602768eae4b92
d22feecdd32e57af8fd88bda0fbde8fbb96d4f1c blob   57 90 845776 1 34a68de99f94f6f9e437a288349602768eae4b92
ab2acc4bd273e799b56effc7e208a01814432ba5 blob   57 90 845866 1 34a68de99f94f6f9e437a288349602768eae4b92
2d5f83c6857691045da554091b8f2d82477d9baf blob   57 90 845956 1 34a68de99f94f6f9e437a288349602768eae4b92
fac99cd6f9219ee888b9382ee44a3b7932723b12 blob   57 90 846046 1 34a68de99f94f6f9e437a288349602768eae4b92
b32b0ed27f34e4a9d7c4aab24dfa2d6c51b1c2eb blob   57 90 846136 1 34a68de99f94f6f9e437a288349602768eae4b92
a3f38fbdbe8f34acc61f3a325104e739a875a4b6 blob   57 90 846226 1 34a68de99f94f6f9e437a288349602768eae4b92
6bc5c86eeb3dfcc3ca2343e39cc91dec35ddc90b blob   57 90 846316 1 34a68de99f94f6f9e437a288349602768eae4b92
38897be9103dbc6aff7d1ecd15c1dc6c6d18b0a7 blob   57 90 846406 1 34a68de99f94f6f9e437a288349602768eae4b92
69e0b8ef8cda369575b6801c6ed47daf09aa3c62 blob   57 90 846496 1 34a68de99f94f6f9e437a288349602768eae4b92
c3e6c8cf465113a74926f3d5c73a3b400970643c blob   57 90 846586 1 34a68de99f94f6f9e437a288349602768eae4b92
a31a03a60bad0896133e6e52982da2e7e22832ff blob   57 90 846676 1 34a68de99f94f6f9e437a288349602768eae4b92
735fe835bee0cfa2d7ecc2f195c22de3e7b208b3 blob   57 90 846766 1 34a68de99f94f6f9e437a288349602768eae4b92
84705bfd7a24eb59137fdc26c070c4329eee46a7 blob   57 90 846856 1 34a68de99f94f6f9e437a288349602768eae4b92
5090e761c398db8c0b3fe1c0069535c3b7a9a575 blob   57 90 846946 1 34a68de99f94f6f9e437a288349602768eae4b92
c5c8cc3525a17842c2e668d1499c7c2518202a87 blob   57 90 847036 1 34a68de99f94f6f9e437a288349602768eae4b92
441d41902c4ccb987a866663ebbcc729fbcc4072 blob   57 90 847126 1 34a68de99f94f6f9e437a288349602768eae4b92
55bc16727ba8a63a31eabd811cfc740dc423bab6 blob   57 90 847216 1 34a68de99f94f6f9e437a288349602768eae4b92
86c6bd761eacb8a021246263994bf02d1163c7b5 blob   57 90 847306 1 34a68de99f94f6f9e437a288349602768eae4b92
8812057b6f2583732f83db5bac543549cc621783 blob   57 90 847396 1 34a68de99f94f6f9e437a288349602768eae4b92
c8043aaa6a70318be94ef87be98ea2c7de7f23f5 blob   57 90 847486 1 34a68de99f94f6f9e437a288349602768eae4b92
9d48f3c2e700d81fbe46fbccc400bedc8666221a blob   57 90 847576 1 34a68de99f94f6f9e437a288349602768eae4b92
fd68f118bfc99562e08bd153a3f1c604f1ac0124 blob   57 90 847666 1 34a68de99f94f6f9e437a288349602768eae4b92
879bc6e196323012740d55b1e5bbd9937632ecf3 blob   57 90 847756 1 34a68de99f94f6f9e437a288349602768eae4b92
a3ed4b758faeca44e89792c3f1b0536b685d0552 blob   57 90 847846 1 34a68de99f94f6f9e437a288349602768eae4b92
d9dd72f666a9d30dee5cdd894ca365a82e965594 blob   57 90 847936 1 34a68de99f94f6f9e437a288349602768eae4b92
088ddcb945af72c47348b65a63992c71b6b9dbe8 blob   57 90 848026 1 34a68de99f94f6f9e437a288349602768eae4b92
9e7b55d50c530d08c120379e19bb1c1653bb3063 blob   57 90 848116 1 34a68de99f94f6f9e437a288349602768eae4b92
2dfd9df0b22049f88e22ae86e4370155ecb23271 blob   57 90 848206 1 34a68de99f94f6f9e437a288349602768eae4b92
9de2bb387fc8bf63dbc7a68cb22b9e8439896326 blob   57 90 848296 1 34a68de99f94f6f9e437a288349602768eae4b92
a7eacc2c62dfd538c2948cce08cd217cc72a7140 blob   57 90 848386 1 34a68de99f94f6f9e437a288349602768eae4b92
291b2d8c01a9bc50bc4605bc479a183193de2e45 blob   57 90 848476 1 34a68de99f94f6f9e437a288349602768eae4b92
464adf43722b49bca34d8727d70db33c9ec70097 blob   57 90 848566 1 34a68de99f94f6f9e437a288349602768eae4b92
aa6095774c04683081cad47f300324a88ea95f2e blob   57 90 848656 1 34a68de99f94f6f9e437a288349602768eae4b92
896562b116d22c48f8872854123c523b76928061 blob   57 90 848746 1 34a68de99f94f6f9e437a288349602768eae4b92
f01eb69ea9caabb9fe801ef0f1bfdfa4477e0e34 blob   57 90 848836 1 34a68de99f94f6f9e437a288349602768eae4b92
d8603740ffe28d592c9d10ae2d6ec9dd0cf71949 blob   57 90 848926 1 34a68de99f94f6f9e437a288349602768eae4b92
8eb88090ce51c8ce838b12302c761bbf806c3fcc blob   57 90 849016 1 34a68de99f94f6f9e437a288349602768eae4b92
e961d288a95c209fe01ba42f01a18605eb5a85d3 blob   57 90 849106 1 34a68de99f94f6f9e437a288349602768eae4b92
abd14d13fada2545825fdf71c5d4a22ebb60f697 blob   57 90 849196 1 34a68de99f94f6f9e437a288349602768eae4b92
6a54ffedf41f419c66f6cd734a27ec5968f79b5a blob   57 90 849286 1 34a68de99f94f6f9e437a288349602768eae4b92
b6fa6c3c025c4f875c78423ab993a9349cd964c5 blob   57 90 849376 1 34a68de99f94f6f9e437a288349602768eae4b92
088e69e7ab273e35b4f63ecb1b915a3997f13dff blob   57 90 849466 1 34a68de99f94f6f9e437a288349602768eae4b92
609652080c31409406c828cb996e41fa6a286654 blob   57 90 849556 1 34a68de99f94f6f9e437a288349602768eae4b92
90d3d9b65a2f0c939f45a86f65192846e8066e7f blob   57 90 849646 1 34a68de99f94f6f9e437a288349602768eae4b92
05b4f18d9841f7abb271e81accadea31c5416a71 blob   57 90 849736 1 34a68de99f94f6f9e437a288349602768eae4b92
cfdd1e216211554d586bb3be233190457c5f5c0d blob   57 90 849826 1 34a68de99f94f6f9e437a288349602768eae4b92
73375ca0591d6c17f37b9f287a7c19f368fc644f blob   57 90 849916 1 34a68de99f94f6f9e437a288349602768eae4b92
46cd94a7854b7360f8f8a7e637e2575e707f7b04 blob   57 90 850006 1 34a68de99f94f6f9e437a288349602768eae4b92
ec35852188f9e88aa67849934b0c50bd698fafef blob   57 90 850096 1 34a68de99f94f6f9e437a288349602768eae4b92
0106e17481932f5c223fafadc1d26abc6adf40d6 blob   57 90 850186 1 34a68de99f94f6f9e437a288349602768eae4b92
f846f988e45d97ac0163885e65920643f0029922 blob   57 90 850276 1 34a68de99f94f6f9e437a288349602768eae4b92
636d415b097ff0c103e63d09d96aeb07fdad2045 blob   57 90 850366 1 34a68de99f94f6f9e437a288349602768eae4b92
497017bb8901086d3120553a384f3500ceb86f2e blob   57 90 850456 1 34a68de99f94f6f9e437a288349602768eae4b92
c50bc0b26b2336dbe90b9c7bdaa8d4cfb8f65638 blob   57 90 850546 1 34a68de99f94f6f9e437a288349602768eae4b92
921538e73389e99e294938d8580ababdb639f140 blob   57 90 850636 1 34a68de99f94f6f9e437a288349602768eae4b92
9ede1b01ec1751bf9ca9d5845ac005edc6935601 blob   57 90 850726 1 34a68de99f94f6f9e437a288349602768eae4b92
1ba5df91f11a1011f4788bc4cc067743828dda41 blob   57 90 850816 1 34a68de99f94f6f9e437a288349602768eae4b92
188728c24ca8cf687133dd0a5782e8819cee10a6 blob   57 90 850906 1 34a68de99f94f6f9e437a288349602768eae4b92
cb0d0270d7c50e33aacd9a4247333622c62846a4 blob   57 90 850996 1 34a68de99f94f6f9e437a288349602768eae4b92
dd39f8544a79066c925baca19ddc02623970efd1 blob   57 90 851086 1 34a68de99f94f6f9e437a288349602768eae4b92
d0b35a20e2ffaa46d895d6296f555dd98956d536 blob   57 90 851176 1 34a68de99f94f6f9e437a288349602768eae4b92
ae274e8cd31f35d743e68b3c8420e604386fc514 blob   57 90 851266 1 34a68de99f94f6f9e437a288349602768eae4b92
d1ede5db04b30c10d395c13dec020c90320498b8 blob   57 90 851356 1 34a68de99f94f6f9e437a288349602768eae4b92
2adace6c3082b12f42112482372696d66c36e4ae blob   57 90 851446 1 34a68de99f94f6f9e437a288349602768eae4b92
035e7e54cee9eb197af435b6b6dcced489c233f6 blob   57 90 851536 1 34a68de99f94f6f9e437a288349602768eae4b92
74aced6a3316fd8d726932ed908b035cd33afef6 blob   57 90 851626 1 34a68de99f94f6f9e437a288349602768eae4b92
efbbfa01b16e997301bb440aad9c885321bb13d2 blob   57 90 851716 1 34a68de99f94f6f9e437a288349602768eae4b92
92433746fe3340a5d4bc3f5487545f5167eaeaad blob   57 90 851806 1 34a68de99f94f6f9e437a288349602768eae4b92
da7b351a2560fd44fe89fc6288c3efa72eace9eb blob   57 90 851896 1 34a68de99f94f6f9e437a288349602768eae4b92
63176d3a0ae88aee86fa1b2b4390ed0850e67a9b blob   57 90 851986 1 34a68de99f94f6f9e437a288349602768eae4b92
5e10cf16f2bf33110cf59f53d583527d676820e1 blob   57 90 852076 1 34a68de99f94f6f9e437a288349602768eae4b92
aeb87caeb18972ad237d4c5628bfedb2dca51d47 blob   57 90 852166 1 34a68de99f94f6f9e437a288349602768eae4b92
141df301ab1d7f9e40b90fb4435ec4ac40ae544d blob   57 90 852256 1 34a68de99f94f6f9e437a288349602768eae4b92
e7172196f3fd2742cbe382daa02fd9641b9f6ffb blob   57 90 852346 1 34a68de99f94f6f9e437a288349602768eae4b92
4e78d6c905bc6d0c06ad066400f0570a391f9385 blob   57 90 852436 1 34a68de99f94f6f9e437a288349602768eae4b92
c096ccf827c047c3a20cfb1dd3fd5b0485ec2a0b blob   57 90 852526 1 34a68de99f94f6f9e437a288349602768eae4b92
91c4bc3b3c200535d88f76e9e3566658cb7b2bfd blob   57 90 852616 1 34a68de99f94f6f9e437a288349602768eae4b92
0b7888c3e508fe256fe859ba46c77d100abbce3f blob   57 90 852706 1 34a68de99f94f6f9e437a288349602768eae4b92
36cfe418f3038689cd47b64845c6f24886f9ec73 blob   57 90 852796 1 34a68de99f94f6f9e437a288349602768eae4b92
54c9d6ab199e99bdbba483ef1287e0cc31fc84b3 blob   57 90 852886 1 34a68de99f94f6f9e437a288349602768eae4b92
8b64b7aafc16c177bcc58813c7a853f622feb10f blob   57 90 852976 1 34a68de99f94f6f9e437a288349602768eae4b92
6ff2ccef89b04f0539f51c0ffcbe5f7bcf108ced blob   57 90 853066 1 34a68de99f94f6f9e437a288349602768eae4b92
7b419ded53760b5dbe136c1ec83ef3f338fab544 blob   57 90 853156 1 34a68de99f94f6f9e437a288349602768eae4b92
non delta: 112 objects
chain length = 1: 110 objects
chain length = 2: 10 objects
chain length = 3: 10 objects
chain length = 4: 10 objects
chain length = 5: 10 objects
chain length = 6: 10 objects
chain length = 7: 10 objects
chain length = 8: 10 objects
chain length = 9: 10 objects
test-1-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack: ok
ok 2 - pack-objects with index version 1

expecting success of 5302.3 'pack-objects with index version 2': 
	pack2=$(git pack-objects --index-version=2 test-2 <obj-list) &&
	git verify-pack -v "test-2-${pack2}.pack"

4307528f01beff143cd36a903cb8c9a9983a4c27 tree   12036 7200 12
e43b5801e4ac39a512e5d9423fc272cf5c3343f9 blob   300 313 7212
78fcb2fa30f448929fae32736f0fb56733d08746 blob   108 141 7525 1 e43b5801e4ac39a512e5d9423fc272cf5c3343f9
1c547eac61c40965963e85a56c24991ab1a0e3ef blob   108 141 7666 2 78fcb2fa30f448929fae32736f0fb56733d08746
571c7b54485960a9820927983c702eec1b41e91a blob   108 141 7807 3 1c547eac61c40965963e85a56c24991ab1a0e3ef
671d8800ae6936f107d70de2dbec536afb47d89a blob   108 141 7948 4 571c7b54485960a9820927983c702eec1b41e91a
f2377b316d0d92e3c29a2d6dba598ca02fb80e9c blob   108 141 8089 5 671d8800ae6936f107d70de2dbec536afb47d89a
0483297992ed4cd5ab3b5790912b1f03598ea660 blob   108 141 8230 6 f2377b316d0d92e3c29a2d6dba598ca02fb80e9c
1ddb0e1ff0db350df93807fda44ef75358d7ddb0 blob   108 141 8371 7 0483297992ed4cd5ab3b5790912b1f03598ea660
19dec2e189cd33584d2173979aecea01b3c59904 blob   108 141 8512 8 1ddb0e1ff0db350df93807fda44ef75358d7ddb0
2bc95d3b86ed1808b73d84f5c0287a61df979063 blob   108 141 8653 9 19dec2e189cd33584d2173979aecea01b3c59904
b8f11d512203fd0260eb79edd5cfca416ca404cb blob   300 313 8794
ef790963bda7ffd9e3556cf4211492680b34c2bf blob   108 141 9107 1 b8f11d512203fd0260eb79edd5cfca416ca404cb
a854bd2ad779f987395c790d0aa378277a7d3216 blob   108 141 9248 2 ef790963bda7ffd9e3556cf4211492680b34c2bf
b750a0431df80025eff766f0811e6a85e1dbc32a blob   108 141 9389 3 a854bd2ad779f987395c790d0aa378277a7d3216
9e793c3eeb7402e17eafb61928b96648a54a8789 blob   108 141 9530 4 b750a0431df80025eff766f0811e6a85e1dbc32a
35691bb59cfc8e5f0749a3c2df2d236150d7f7d1 blob   108 141 9671 5 9e793c3eeb7402e17eafb61928b96648a54a8789
0df5edef6dcc6452cf814984a4d4ea23a8e41e3c blob   108 141 9812 6 35691bb59cfc8e5f0749a3c2df2d236150d7f7d1
305f923c2d2e1fff9ec067b42443fff88aeebc67 blob   108 141 9953 7 0df5edef6dcc6452cf814984a4d4ea23a8e41e3c
67db08cb82e0053ee51773fbf4bdc50094e03767 blob   108 141 10094 8 305f923c2d2e1fff9ec067b42443fff88aeebc67
61a87ea87b8af074a75d0af78e77f2ed6141922c blob   108 141 10235 9 67db08cb82e0053ee51773fbf4bdc50094e03767
5e69af01a42867f9be8213089efc57c6a1517976 blob   300 313 10376
1280048552e2ee86127654132148d3c2e208b397 blob   108 141 10689 1 5e69af01a42867f9be8213089efc57c6a1517976
ec86b748af33306ff620ebe591da28ed622c1b4d blob   108 141 10830 2 1280048552e2ee86127654132148d3c2e208b397
ce83a0772693235f137100863f4217f9c6398a53 blob   108 141 10971 3 ec86b748af33306ff620ebe591da28ed622c1b4d
ebd5d1af0d246aa4f8e288c539b906eb765d48e1 blob   108 141 11112 4 ce83a0772693235f137100863f4217f9c6398a53
ef99659edf6a12a9320e29453d1e17054863c3d1 blob   108 141 11253 5 ebd5d1af0d246aa4f8e288c539b906eb765d48e1
17dc4d50c25440e569d3c4dabf41bb562c9013fc blob   108 141 11394 6 ef99659edf6a12a9320e29453d1e17054863c3d1
36a0964d29672133cea581290233bae77c3b8cca blob   108 141 11535 7 17dc4d50c25440e569d3c4dabf41bb562c9013fc
60a658626764685c980311c6325263eabdbe0547 blob   108 141 11676 8 36a0964d29672133cea581290233bae77c3b8cca
a7b6688d2a6f15e6f91d1701f64ca7da42a5a73a blob   108 141 11817 9 60a658626764685c980311c6325263eabdbe0547
ef1259b944f1b0c4ade62c049c2ea41daf63ccc7 blob   300 313 11958
612f382c01ffd0ea89c2a840cc683cfd1108628e blob   108 141 12271 1 ef1259b944f1b0c4ade62c049c2ea41daf63ccc7
ba0b924be466e9d85f8ba5563211e570d12d2841 blob   108 141 12412 2 612f382c01ffd0ea89c2a840cc683cfd1108628e
d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e blob   108 141 12553 3 ba0b924be466e9d85f8ba5563211e570d12d2841
e80b417ea517c993f906556a00fa8acaceb559b4 blob   108 141 12694 4 d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e
8cc2e1974c339c43bd481c205ea0024b54dbcb83 blob   108 141 12835 5 e80b417ea517c993f906556a00fa8acaceb559b4
8e57f0560c1135c5cdaca2c69094489ad6ddcdb0 blob   108 141 12976 6 8cc2e1974c339c43bd481c205ea0024b54dbcb83
416013a155571063a96f1e443ee44a8ac3f09c1b blob   108 141 13117 7 8e57f0560c1135c5cdaca2c69094489ad6ddcdb0
8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed blob   108 141 13258 8 416013a155571063a96f1e443ee44a8ac3f09c1b
beb699952b6a188a54675c11696cb6a2652b5249 blob   108 141 13399 9 8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed
0f66db930e6ce643852ad45eb91dc203575fb5f4 blob   300 313 13540
9a3a619d26a6e19b556d119d760b40a6397a9df4 blob   108 141 13853 1 0f66db930e6ce643852ad45eb91dc203575fb5f4
66336af04f97cfd40474e8aa4cea2e25275b5f94 blob   108 141 13994 2 9a3a619d26a6e19b556d119d760b40a6397a9df4
bf8886056d3abf37690115bfee10bf14ef5e4db9 blob   108 141 14135 3 66336af04f97cfd40474e8aa4cea2e25275b5f94
2c1120aee9298045837641feab263b3655725aa3 blob   108 141 14276 4 bf8886056d3abf37690115bfee10bf14ef5e4db9
f47f0d90220589a45dbccd06c8468eca7c04d70a blob   108 141 14417 5 2c1120aee9298045837641feab263b3655725aa3
add63edc5ce2dd58ff7d66b153f44d03b0d93df2 blob   108 141 14558 6 f47f0d90220589a45dbccd06c8468eca7c04d70a
75642e5399f1b51a33f0c6430af2fd997e4db578 blob   108 141 14699 7 add63edc5ce2dd58ff7d66b153f44d03b0d93df2
64e473488413d66fe6e464b3f09827501eb353fe blob   108 141 14840 8 75642e5399f1b51a33f0c6430af2fd997e4db578
597244daf249731fc922a26acfe6fb9ea3baca7f blob   108 141 14981 9 64e473488413d66fe6e464b3f09827501eb353fe
8d5f6b41255c60ea8f44892b918a38eebe43de6b blob   300 313 15122
c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94 blob   108 141 15435 1 8d5f6b41255c60ea8f44892b918a38eebe43de6b
0246ff570c396c37ff08c0f5f9d88c84fc21a297 blob   108 141 15576 2 c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94
cff9bb4b47c1bc50205d6a793d8d02bee852a229 blob   108 141 15717 3 0246ff570c396c37ff08c0f5f9d88c84fc21a297
2096ec927d087ee1076f1118e8fe48ab21a27bd7 blob   108 141 15858 4 cff9bb4b47c1bc50205d6a793d8d02bee852a229
0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501 blob   108 141 15999 5 2096ec927d087ee1076f1118e8fe48ab21a27bd7
633de7a70fe29cecb721bb5033573fbf175b31fc blob   108 141 16140 6 0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501
76db9ca0f1afa9c247d4c5a2fe60ca95154fd465 blob   108 141 16281 7 633de7a70fe29cecb721bb5033573fbf175b31fc
df4c5c8e8e25621bba74f233d59c76e5810f8677 blob   108 141 16422 8 76db9ca0f1afa9c247d4c5a2fe60ca95154fd465
9fc4cce844af6ed26932eb84045df0ab4a79f0b7 blob   108 141 16563 9 df4c5c8e8e25621bba74f233d59c76e5810f8677
ef3ddda4c2922f10089dfed6436267b445d5b118 blob   300 313 16704
1bdedd473270eef5c2c67c968ba1d5ee081013ee blob   108 141 17017 1 ef3ddda4c2922f10089dfed6436267b445d5b118
9d28c1ea0790ee28b8c35bc3fe88629980708730 blob   108 141 17158 2 1bdedd473270eef5c2c67c968ba1d5ee081013ee
a3264a35996ccaf722f869be8e379864e28ef561 blob   108 141 17299 3 9d28c1ea0790ee28b8c35bc3fe88629980708730
cd6f1b15bb20b9c706f8f80c77b7c210921f0b26 blob   108 141 17440 4 a3264a35996ccaf722f869be8e379864e28ef561
60601746c22df38cc0bcbce68f359fb2796d7569 blob   108 141 17581 5 cd6f1b15bb20b9c706f8f80c77b7c210921f0b26
f15a3f5dae93709cce491d407dad343f9577d8c5 blob   108 141 17722 6 60601746c22df38cc0bcbce68f359fb2796d7569
5dd384bbc7186571a9cccdba2ebaa794e87bfbdd blob   108 141 17863 7 f15a3f5dae93709cce491d407dad343f9577d8c5
d18475904b78554f1fd6f96b4c1ad44e84edf873 blob   108 141 18004 8 5dd384bbc7186571a9cccdba2ebaa794e87bfbdd
67728c76be3b7d5319ff2a93fc78aca0ff3824eb blob   108 141 18145 9 d18475904b78554f1fd6f96b4c1ad44e84edf873
c1ec14f204e244f32aa93c66e3fb6a7d4f58c081 blob   300 313 18286
258424ed6e5c4377a2aa55fb6d4818a3580291ad blob   108 141 18599 1 c1ec14f204e244f32aa93c66e3fb6a7d4f58c081
fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2 blob   108 141 18740 2 258424ed6e5c4377a2aa55fb6d4818a3580291ad
e1bfca166c2ff676f665fd3c58d7dea896ec48d7 blob   108 141 18881 3 fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2
383c3c67e93cfd05d272b187e3af5c1e00bcae5c blob   108 141 19022 4 e1bfca166c2ff676f665fd3c58d7dea896ec48d7
ad6a3267a9e0d49014eec133a5e968315e8ce834 blob   108 141 19163 5 383c3c67e93cfd05d272b187e3af5c1e00bcae5c
9dfc592085bb14371890b41e48c98b220420669b blob   108 141 19304 6 ad6a3267a9e0d49014eec133a5e968315e8ce834
c872afc7539f689178b7385010010ca7aef8f09a blob   108 141 19445 7 9dfc592085bb14371890b41e48c98b220420669b
1bc038b18c5039a05e173da2fd2b65b3d34ccd2b blob   108 141 19586 8 c872afc7539f689178b7385010010ca7aef8f09a
bdd7bd883f75c1726538851757168dc0dc33e222 blob   108 141 19727 9 1bc038b18c5039a05e173da2fd2b65b3d34ccd2b
71529d6ca58922aa05603b6f2784f87cad8703cf blob   300 313 19868
2bebfa6240e319a1c31951d05c8135f089fbbd29 blob   108 141 20181 1 71529d6ca58922aa05603b6f2784f87cad8703cf
83fcb919ae7bc9a80912c9bfd5731acd36666480 blob   108 141 20322 2 2bebfa6240e319a1c31951d05c8135f089fbbd29
b97506df40bbd212b52062b851cd88f04abb59b3 blob   108 141 20463 3 83fcb919ae7bc9a80912c9bfd5731acd36666480
298dc4942c3b3db53d484ffa86b451755cd2125f blob   108 141 20604 4 b97506df40bbd212b52062b851cd88f04abb59b3
ba11c807afc9699e7ea1cab791699bfd698c7e7d blob   108 141 20745 5 298dc4942c3b3db53d484ffa86b451755cd2125f
b1281e620292c2e74d8770eb99f0b6871e4cca59 blob   108 141 20886 6 ba11c807afc9699e7ea1cab791699bfd698c7e7d
368cd4d02a420764e0d31b35576f73b777c34604 blob   108 141 21027 7 b1281e620292c2e74d8770eb99f0b6871e4cca59
16d1323e84e3d5b058ab2ac8245db85bc4606c88 blob   108 141 21168 8 368cd4d02a420764e0d31b35576f73b777c34604
711d5e6b0d21b3aa205dcc960ec51475be8a25a5 blob   108 141 21309 9 16d1323e84e3d5b058ab2ac8245db85bc4606c88
d174d532539487c9aedbbaf38d556061b5acf826 blob   300 313 21450
bf5dcb9013df15ff0ae10e0682a92a7688a7720b blob   108 141 21763 1 d174d532539487c9aedbbaf38d556061b5acf826
fb214b786310655bc8ee46d89ca9a04ec9aed0c3 blob   108 141 21904 2 bf5dcb9013df15ff0ae10e0682a92a7688a7720b
b94140f4006d05e7e3822f5db19adc2b73a2cc05 blob   108 141 22045 3 fb214b786310655bc8ee46d89ca9a04ec9aed0c3
4019b50c838197ca4b8d664a4164a183cac8ad11 blob   108 141 22186 4 b94140f4006d05e7e3822f5db19adc2b73a2cc05
2826157afde0e74742115842ac2dddf5c3b5e23e blob   108 141 22327 5 4019b50c838197ca4b8d664a4164a183cac8ad11
99556fcde6a0be62a72c8b0c6682576a1d596bea blob   108 141 22468 6 2826157afde0e74742115842ac2dddf5c3b5e23e
8f5e7974c287b07f1cf8116485c4135340b807f3 blob   108 141 22609 7 99556fcde6a0be62a72c8b0c6682576a1d596bea
f9982291dfe87a9def1b12d24f9ca9a024a9dd8e blob   108 141 22750 8 8f5e7974c287b07f1cf8116485c4135340b807f3
3c5c0be699798d2f4fbe651051b9f17156f133c1 blob   108 141 22891 9 f9982291dfe87a9def1b12d24f9ca9a024a9dd8e
1297547aab30f952af805d38f6f1c1930cb3117b blob   8196 8210 23032
862f6954d9afd549b48fa2ef8e2f8ab96e309916 blob   8196 8210 31242
0471b3b8ab8da19f3968dc238e9555f4e48ce858 blob   8196 8210 39452
c80092496b80b5f21503b8c838dccfc1f2e2ddde blob   8196 8210 47662
e5a12c79cec70d52817054c4b9ef321003c6755f blob   8196 8210 55872
bf96a31446f37d8e57bb38a00797aa3af1f99370 blob   8196 8210 64082
0508b858e01f0367552fb14722388ba48dbd36f7 blob   8196 8210 72292
359017d1534767455090901a260985de1658d752 blob   8196 8210 80502
8d06001a3d38390afa66576caa6c55c796e33835 blob   8196 8210 88712
8162ceb825c07e3b1e17f5775665085da9b1e855 blob   8196 8210 96922
6910c5a645c9fe7f6b728034566b1668f0677a8e blob   8196 8210 105132
09ba511a995b8ea75067036d5c046f39052a3bd8 blob   8196 8210 113342
f45d142313c7a5270a60c664bb463cddadc467c1 blob   8196 8210 121552
964e51bf7d344bda71ea5e12dbd7bfb90120fcf0 blob   8196 8210 129762
408dd031138139f6ac6f402988f960527871f71a blob   8196 8210 137972
912fa0ec5536f31122e34577a4baf3b22d40de2a blob   8196 8210 146182
f02359c44ca04a542cc5bf59aa5f1de6cd1d5a4c blob   8196 8210 154392
b0566dd5d479c80c278bd5455c92aca689328471 blob   8196 8210 162602
49d17d605f042c1e978a68f625be6ab6294fa8fa blob   8196 8210 170812
8f744480abe8ad05bc419d1ab2e375b9c0fa3978 blob   8196 8210 179022
fff3a3a92d2268a464dbdcd00fc055885ee3cba9 blob   8196 8210 187232
f5fc0ff4afc14d9dfcb2580d3f438edd4cd8130a blob   8196 8210 195442
01179d82b18c252824e20e190543e0e84950d820 blob   8196 8210 203652
de3ed457f973b7ffb20edc36002c47a6e4b41066 blob   8196 8210 211862
9c4e1f8c16d04d90a2217279240996276d617067 blob   8196 8210 220072
816f18d19f433f5df9edbfb5547684b519fdeb3b blob   8196 8210 228282
72e7428e5ee3797ca0bf955f723b915bee919c48 blob   8196 8210 236492
41adb5af8e7f9737b16261fb0c224c7550c82f23 blob   8196 8210 244702
94f5d368a7c4ea294c463dc45cf15d387fa83c4e blob   8196 8210 252912
85fdf2eed169dbc1fe2d71439b589b0326dad12b blob   8196 8210 261122
bab18d872e9183c6d450b326477205bb0cc081cb blob   8196 8210 269332
b31fb3fb181512bc608b58cb33323d97ad6eac2f blob   8196 8210 277542
20a9519106ab64bf043456a58b6bfb04f1c7b39d blob   8196 8210 285752
94a015b2b6053f7a1d541969919e879bb2b75eef blob   8196 8210 293962
7353550b9b0e1da4f68b9484dfad2634100a00cc blob   8196 8210 302172
e28a360bcbd69ca1a0bb47834e640069c6672a8d blob   8196 8210 310382
8e6ffc05856460c2e08c8e9d824bbf510d3c1b52 blob   8196 8210 318592
ceade5760b1ba0bc11d4e4db6982ddf671495e58 blob   8196 8210 326802
92534f38b94c1da321d88c9ab5af8c3e804c2507 blob   8196 8210 335012
f5577acbfd83dddf90b2054d6cb5dce2df6d06ee blob   8196 8210 343222
59a27076dc0a8989215a160d61ac401e41c05126 blob   8196 8210 351432
2db6b919f253444b5437d8251e5d101d5a34e1b3 blob   8196 8210 359642
c1c35c36d4300da28c0570746adaf2f5b0b015a3 blob   8196 8210 367852
03a6f56dbbb556425ef8c43c31519b32eb5629a4 blob   8196 8210 376062
dd6209d4c0c5d4f210a8d1bb4a4d314cf284dea9 blob   8196 8210 384272
8c04fa425f4dfb4555b376e73d8f28d56b97a569 blob   8196 8210 392482
614e235cd8ca8af7ccf402a92eb34baadaaa3f18 blob   8196 8210 400692
b2f07ee5771d9e0de7166bc72a4a7ebce9830779 blob   8196 8210 408902
852ba0cf084474c1b0b48052606ae27346a5b1a1 blob   8196 8210 417112
15ff79f644a0596529eba0592017dce39e222b8e blob   8196 8210 425322
75f67c0c230f8923db5831094b1cc67f61bf1734 blob   8196 8210 433532
95b51158cd6365da9b10f1d8b06ba76dc5d5c5f1 blob   8196 8210 441742
5217ce416b26a3d76191d873490110746d0e8a04 blob   8196 8210 449952
c16eb68827fa5d6da73b320b431cf736c7a6a4af blob   8196 8210 458162
57983aab7f7384626a6a1f9ec08fba1902dd11e5 blob   8196 8210 466372
84e4d2ce637781776791c8e2cf4a9312a2783ceb blob   8196 8210 474582
2175a1a9d8757b3836f5cc44c6af0297aea36709 blob   8196 8210 482792
9b655d54faaf0a737a03731852f27cf6b552bcaf blob   8196 8210 491002
a3233ba1323f07a0d68f6020e7209025819cfa13 blob   8196 8210 499212
5a65a213ee0ebdc285c8e8eca24e9eda97f8a384 blob   8196 8210 507422
de1679ebb44d3fe59e8d2378471b56db384fb181 blob   8196 8210 515632
d2e455cc03081911f9ecd81245becd858d1e64ca blob   8196 8210 523842
72826d3e97bc228616e06235566a0db59c94bd74 blob   8196 8210 532052
debe389b3bdd62d96748db592e99cb0cc7b1b0f2 blob   8196 8210 540262
e572e59eee8119f8fb58e8595ecd0c622f2d6e29 blob   8196 8210 548472
197f45d948a36ac3762e5daf6ef4d43a5d969503 blob   8196 8210 556682
fb294d29a9d045d5a46a9c00e53777b394ceb346 blob   8196 8210 564892
10f7133774acbc162f5f79804744d64747eee380 blob   8196 8210 573102
16b9dea85eab6d7e452bdea4889e24a8ad79afd5 blob   8196 8210 581312
08a8cf223e5dc57504da3cd8eb56d33f276dc1b9 blob   8196 8210 589522
e3332ff9a2540b45e599be0c7bca8bbe28af2b43 blob   8196 8210 597732
5e1b961ae623672df764f64b737f332318d43baa blob   8196 8210 605942
14caba1bc2835573f3c20b7f2e5fb638a08e12ee blob   8196 8210 614152
84d1369c26d187b24dffe9029e81e119e4a374f5 blob   8196 8210 622362
5ef3a0f4954ade2d5c290ccc4d791c3b219d89ea blob   8196 8210 630572
610d16151ceb1dc4d5138f63ed410819a8b9161c blob   8196 8210 638782
3545eb1f5549261267ab0577b94372e88b49731d blob   8196 8210 646992
0d6e5c0388744cf82463ce1283ff99e863e9b26e blob   8196 8210 655202
611261b75bd720d3433ea8975d555b1ac3e692bd blob   8196 8210 663412
e25dc2ac80f9f78aa2809b5cd254ce47a51efbe5 blob   8196 8210 671622
ea5a4b4fed0bab7beffd3c7fc6cc549df47017d7 blob   8196 8210 679832
d68756996794df8c00dfcbf520662b14cb06958e blob   8196 8210 688042
b5b44a475116c2d0054edf54c699909d5d583aac blob   8196 8210 696252
99ff18078623c32b85a49cc8a03e3c58ee94eecb blob   8196 8210 704462
159fdc73e63cf90624d128d87b8185154727714e blob   8196 8210 712672
1f0ca97497381a196e53a7639ee769ed019469a3 blob   8196 8210 720882
6dbed45fde708bb67e6b21bd55976483305f9e74 blob   8196 8210 729092
b5ec32ad29b65e5742cd1857d17e92c2efc5da96 blob   8196 8210 737302
cf823d111604e8a014e0702b5e15b242bb961c78 blob   8196 8210 745512
72528baaeeba0d9c01da36a7a0add1ac49d860f2 blob   8196 8210 753722
b976a8fd346486d78cdebeaa0b0ac200befca629 blob   8196 8210 761932
e652cd97e9aae1523d892c1f417274dd26c3bcd3 blob   8196 8210 770142
aa82432626cc08fb818a20aa62b607aa52e7b35d blob   8196 8210 778352
d67069815168092ee0eadeab8177002bd0376b6f blob   8196 8210 786562
fa7ca115eb82e14f0263990362d4fc27591e1143 blob   8196 8210 794772
5cadb04c4d4ec953dffc528bf75561a6ae1c5820 blob   8196 8210 802982
a769ce6dfe1abe1b6162627b2b5df89f4f7d4317 blob   8196 8210 811192
bf265906aab0df90b6a4bdb1fe6f8088a9038435 blob   8196 8210 819402
b302b77fd5595784b5e85e91f8b4314fff49a6a1 blob   8196 8210 827612
3927444e44b49dfa6cdc768298ae879ec298c45d blob   8196 8210 835822
0b968294884af115eb5a1b941b3dabd48470c3bb blob   12 41 844032 1 3927444e44b49dfa6cdc768298ae879ec298c45d
34a68de99f94f6f9e437a288349602768eae4b92 blob   250 263 844073
8517d36660dffb896fb4e283ad110023aaebaf1b blob   57 90 844336 1 34a68de99f94f6f9e437a288349602768eae4b92
e3fc6633c069c8e246d77a408e4747c2852ba44a blob   57 90 844426 1 34a68de99f94f6f9e437a288349602768eae4b92
37a071e55d1f2e07af146ca6017d98dd85beae68 blob   57 90 844516 1 34a68de99f94f6f9e437a288349602768eae4b92
a8179a233b7aeeb7a450c5d321d4b73df936b64b blob   57 90 844606 1 34a68de99f94f6f9e437a288349602768eae4b92
99e0b239888c8b71671fb948e41111876e61a3c2 blob   57 90 844696 1 34a68de99f94f6f9e437a288349602768eae4b92
e26e04b4786bf6b0ec3c5d528e7002cd58e2401b blob   57 90 844786 1 34a68de99f94f6f9e437a288349602768eae4b92
a6106f10ea80724dbc32b328d9892111589a2111 blob   57 90 844876 1 34a68de99f94f6f9e437a288349602768eae4b92
d1669a170780865ccd7645211c2e1cebdfb28aad blob   57 90 844966 1 34a68de99f94f6f9e437a288349602768eae4b92
53a19e0c2c34ef1a4e1bbc9aa1cba4cb9bc2dd80 blob   57 90 845056 1 34a68de99f94f6f9e437a288349602768eae4b92
26ff29a62e7a6359d3975813fd645af871576125 blob   57 90 845146 1 34a68de99f94f6f9e437a288349602768eae4b92
c1d6b9953613f5732cd40d8cffbb2b746a71fb92 blob   57 90 845236 1 34a68de99f94f6f9e437a288349602768eae4b92
a2bfcc19d1592c43af33617500394e1ac09e968c blob   57 90 845326 1 34a68de99f94f6f9e437a288349602768eae4b92
36c0479c58cef0b9a10b56934ed42a862e1dcfe2 blob   57 90 845416 1 34a68de99f94f6f9e437a288349602768eae4b92
642aa265517d66c88f030a2230eb97e77c973905 blob   57 90 845506 1 34a68de99f94f6f9e437a288349602768eae4b92
29cd4721cd3cef7f5a2e032d6c2d6908427cd5af blob   57 90 845596 1 34a68de99f94f6f9e437a288349602768eae4b92
ae5ccb1578fbc399571f4f0132edd18c55b19ef0 blob   57 90 845686 1 34a68de99f94f6f9e437a288349602768eae4b92
d22feecdd32e57af8fd88bda0fbde8fbb96d4f1c blob   57 90 845776 1 34a68de99f94f6f9e437a288349602768eae4b92
ab2acc4bd273e799b56effc7e208a01814432ba5 blob   57 90 845866 1 34a68de99f94f6f9e437a288349602768eae4b92
2d5f83c6857691045da554091b8f2d82477d9baf blob   57 90 845956 1 34a68de99f94f6f9e437a288349602768eae4b92
fac99cd6f9219ee888b9382ee44a3b7932723b12 blob   57 90 846046 1 34a68de99f94f6f9e437a288349602768eae4b92
b32b0ed27f34e4a9d7c4aab24dfa2d6c51b1c2eb blob   57 90 846136 1 34a68de99f94f6f9e437a288349602768eae4b92
a3f38fbdbe8f34acc61f3a325104e739a875a4b6 blob   57 90 846226 1 34a68de99f94f6f9e437a288349602768eae4b92
6bc5c86eeb3dfcc3ca2343e39cc91dec35ddc90b blob   57 90 846316 1 34a68de99f94f6f9e437a288349602768eae4b92
38897be9103dbc6aff7d1ecd15c1dc6c6d18b0a7 blob   57 90 846406 1 34a68de99f94f6f9e437a288349602768eae4b92
69e0b8ef8cda369575b6801c6ed47daf09aa3c62 blob   57 90 846496 1 34a68de99f94f6f9e437a288349602768eae4b92
c3e6c8cf465113a74926f3d5c73a3b400970643c blob   57 90 846586 1 34a68de99f94f6f9e437a288349602768eae4b92
a31a03a60bad0896133e6e52982da2e7e22832ff blob   57 90 846676 1 34a68de99f94f6f9e437a288349602768eae4b92
735fe835bee0cfa2d7ecc2f195c22de3e7b208b3 blob   57 90 846766 1 34a68de99f94f6f9e437a288349602768eae4b92
84705bfd7a24eb59137fdc26c070c4329eee46a7 blob   57 90 846856 1 34a68de99f94f6f9e437a288349602768eae4b92
5090e761c398db8c0b3fe1c0069535c3b7a9a575 blob   57 90 846946 1 34a68de99f94f6f9e437a288349602768eae4b92
c5c8cc3525a17842c2e668d1499c7c2518202a87 blob   57 90 847036 1 34a68de99f94f6f9e437a288349602768eae4b92
441d41902c4ccb987a866663ebbcc729fbcc4072 blob   57 90 847126 1 34a68de99f94f6f9e437a288349602768eae4b92
55bc16727ba8a63a31eabd811cfc740dc423bab6 blob   57 90 847216 1 34a68de99f94f6f9e437a288349602768eae4b92
86c6bd761eacb8a021246263994bf02d1163c7b5 blob   57 90 847306 1 34a68de99f94f6f9e437a288349602768eae4b92
8812057b6f2583732f83db5bac543549cc621783 blob   57 90 847396 1 34a68de99f94f6f9e437a288349602768eae4b92
c8043aaa6a70318be94ef87be98ea2c7de7f23f5 blob   57 90 847486 1 34a68de99f94f6f9e437a288349602768eae4b92
9d48f3c2e700d81fbe46fbccc400bedc8666221a blob   57 90 847576 1 34a68de99f94f6f9e437a288349602768eae4b92
fd68f118bfc99562e08bd153a3f1c604f1ac0124 blob   57 90 847666 1 34a68de99f94f6f9e437a288349602768eae4b92
879bc6e196323012740d55b1e5bbd9937632ecf3 blob   57 90 847756 1 34a68de99f94f6f9e437a288349602768eae4b92
a3ed4b758faeca44e89792c3f1b0536b685d0552 blob   57 90 847846 1 34a68de99f94f6f9e437a288349602768eae4b92
d9dd72f666a9d30dee5cdd894ca365a82e965594 blob   57 90 847936 1 34a68de99f94f6f9e437a288349602768eae4b92
088ddcb945af72c47348b65a63992c71b6b9dbe8 blob   57 90 848026 1 34a68de99f94f6f9e437a288349602768eae4b92
9e7b55d50c530d08c120379e19bb1c1653bb3063 blob   57 90 848116 1 34a68de99f94f6f9e437a288349602768eae4b92
2dfd9df0b22049f88e22ae86e4370155ecb23271 blob   57 90 848206 1 34a68de99f94f6f9e437a288349602768eae4b92
9de2bb387fc8bf63dbc7a68cb22b9e8439896326 blob   57 90 848296 1 34a68de99f94f6f9e437a288349602768eae4b92
a7eacc2c62dfd538c2948cce08cd217cc72a7140 blob   57 90 848386 1 34a68de99f94f6f9e437a288349602768eae4b92
291b2d8c01a9bc50bc4605bc479a183193de2e45 blob   57 90 848476 1 34a68de99f94f6f9e437a288349602768eae4b92
464adf43722b49bca34d8727d70db33c9ec70097 blob   57 90 848566 1 34a68de99f94f6f9e437a288349602768eae4b92
aa6095774c04683081cad47f300324a88ea95f2e blob   57 90 848656 1 34a68de99f94f6f9e437a288349602768eae4b92
896562b116d22c48f8872854123c523b76928061 blob   57 90 848746 1 34a68de99f94f6f9e437a288349602768eae4b92
f01eb69ea9caabb9fe801ef0f1bfdfa4477e0e34 blob   57 90 848836 1 34a68de99f94f6f9e437a288349602768eae4b92
d8603740ffe28d592c9d10ae2d6ec9dd0cf71949 blob   57 90 848926 1 34a68de99f94f6f9e437a288349602768eae4b92
8eb88090ce51c8ce838b12302c761bbf806c3fcc blob   57 90 849016 1 34a68de99f94f6f9e437a288349602768eae4b92
e961d288a95c209fe01ba42f01a18605eb5a85d3 blob   57 90 849106 1 34a68de99f94f6f9e437a288349602768eae4b92
abd14d13fada2545825fdf71c5d4a22ebb60f697 blob   57 90 849196 1 34a68de99f94f6f9e437a288349602768eae4b92
6a54ffedf41f419c66f6cd734a27ec5968f79b5a blob   57 90 849286 1 34a68de99f94f6f9e437a288349602768eae4b92
b6fa6c3c025c4f875c78423ab993a9349cd964c5 blob   57 90 849376 1 34a68de99f94f6f9e437a288349602768eae4b92
088e69e7ab273e35b4f63ecb1b915a3997f13dff blob   57 90 849466 1 34a68de99f94f6f9e437a288349602768eae4b92
609652080c31409406c828cb996e41fa6a286654 blob   57 90 849556 1 34a68de99f94f6f9e437a288349602768eae4b92
90d3d9b65a2f0c939f45a86f65192846e8066e7f blob   57 90 849646 1 34a68de99f94f6f9e437a288349602768eae4b92
05b4f18d9841f7abb271e81accadea31c5416a71 blob   57 90 849736 1 34a68de99f94f6f9e437a288349602768eae4b92
cfdd1e216211554d586bb3be233190457c5f5c0d blob   57 90 849826 1 34a68de99f94f6f9e437a288349602768eae4b92
73375ca0591d6c17f37b9f287a7c19f368fc644f blob   57 90 849916 1 34a68de99f94f6f9e437a288349602768eae4b92
46cd94a7854b7360f8f8a7e637e2575e707f7b04 blob   57 90 850006 1 34a68de99f94f6f9e437a288349602768eae4b92
ec35852188f9e88aa67849934b0c50bd698fafef blob   57 90 850096 1 34a68de99f94f6f9e437a288349602768eae4b92
0106e17481932f5c223fafadc1d26abc6adf40d6 blob   57 90 850186 1 34a68de99f94f6f9e437a288349602768eae4b92
f846f988e45d97ac0163885e65920643f0029922 blob   57 90 850276 1 34a68de99f94f6f9e437a288349602768eae4b92
636d415b097ff0c103e63d09d96aeb07fdad2045 blob   57 90 850366 1 34a68de99f94f6f9e437a288349602768eae4b92
497017bb8901086d3120553a384f3500ceb86f2e blob   57 90 850456 1 34a68de99f94f6f9e437a288349602768eae4b92
c50bc0b26b2336dbe90b9c7bdaa8d4cfb8f65638 blob   57 90 850546 1 34a68de99f94f6f9e437a288349602768eae4b92
921538e73389e99e294938d8580ababdb639f140 blob   57 90 850636 1 34a68de99f94f6f9e437a288349602768eae4b92
9ede1b01ec1751bf9ca9d5845ac005edc6935601 blob   57 90 850726 1 34a68de99f94f6f9e437a288349602768eae4b92
1ba5df91f11a1011f4788bc4cc067743828dda41 blob   57 90 850816 1 34a68de99f94f6f9e437a288349602768eae4b92
188728c24ca8cf687133dd0a5782e8819cee10a6 blob   57 90 850906 1 34a68de99f94f6f9e437a288349602768eae4b92
cb0d0270d7c50e33aacd9a4247333622c62846a4 blob   57 90 850996 1 34a68de99f94f6f9e437a288349602768eae4b92
dd39f8544a79066c925baca19ddc02623970efd1 blob   57 90 851086 1 34a68de99f94f6f9e437a288349602768eae4b92
d0b35a20e2ffaa46d895d6296f555dd98956d536 blob   57 90 851176 1 34a68de99f94f6f9e437a288349602768eae4b92
ae274e8cd31f35d743e68b3c8420e604386fc514 blob   57 90 851266 1 34a68de99f94f6f9e437a288349602768eae4b92
d1ede5db04b30c10d395c13dec020c90320498b8 blob   57 90 851356 1 34a68de99f94f6f9e437a288349602768eae4b92
2adace6c3082b12f42112482372696d66c36e4ae blob   57 90 851446 1 34a68de99f94f6f9e437a288349602768eae4b92
035e7e54cee9eb197af435b6b6dcced489c233f6 blob   57 90 851536 1 34a68de99f94f6f9e437a288349602768eae4b92
74aced6a3316fd8d726932ed908b035cd33afef6 blob   57 90 851626 1 34a68de99f94f6f9e437a288349602768eae4b92
efbbfa01b16e997301bb440aad9c885321bb13d2 blob   57 90 851716 1 34a68de99f94f6f9e437a288349602768eae4b92
92433746fe3340a5d4bc3f5487545f5167eaeaad blob   57 90 851806 1 34a68de99f94f6f9e437a288349602768eae4b92
da7b351a2560fd44fe89fc6288c3efa72eace9eb blob   57 90 851896 1 34a68de99f94f6f9e437a288349602768eae4b92
63176d3a0ae88aee86fa1b2b4390ed0850e67a9b blob   57 90 851986 1 34a68de99f94f6f9e437a288349602768eae4b92
5e10cf16f2bf33110cf59f53d583527d676820e1 blob   57 90 852076 1 34a68de99f94f6f9e437a288349602768eae4b92
aeb87caeb18972ad237d4c5628bfedb2dca51d47 blob   57 90 852166 1 34a68de99f94f6f9e437a288349602768eae4b92
141df301ab1d7f9e40b90fb4435ec4ac40ae544d blob   57 90 852256 1 34a68de99f94f6f9e437a288349602768eae4b92
e7172196f3fd2742cbe382daa02fd9641b9f6ffb blob   57 90 852346 1 34a68de99f94f6f9e437a288349602768eae4b92
4e78d6c905bc6d0c06ad066400f0570a391f9385 blob   57 90 852436 1 34a68de99f94f6f9e437a288349602768eae4b92
c096ccf827c047c3a20cfb1dd3fd5b0485ec2a0b blob   57 90 852526 1 34a68de99f94f6f9e437a288349602768eae4b92
91c4bc3b3c200535d88f76e9e3566658cb7b2bfd blob   57 90 852616 1 34a68de99f94f6f9e437a288349602768eae4b92
0b7888c3e508fe256fe859ba46c77d100abbce3f blob   57 90 852706 1 34a68de99f94f6f9e437a288349602768eae4b92
36cfe418f3038689cd47b64845c6f24886f9ec73 blob   57 90 852796 1 34a68de99f94f6f9e437a288349602768eae4b92
54c9d6ab199e99bdbba483ef1287e0cc31fc84b3 blob   57 90 852886 1 34a68de99f94f6f9e437a288349602768eae4b92
8b64b7aafc16c177bcc58813c7a853f622feb10f blob   57 90 852976 1 34a68de99f94f6f9e437a288349602768eae4b92
6ff2ccef89b04f0539f51c0ffcbe5f7bcf108ced blob   57 90 853066 1 34a68de99f94f6f9e437a288349602768eae4b92
7b419ded53760b5dbe136c1ec83ef3f338fab544 blob   57 90 853156 1 34a68de99f94f6f9e437a288349602768eae4b92
non delta: 112 objects
chain length = 1: 110 objects
chain length = 2: 10 objects
chain length = 3: 10 objects
chain length = 4: 10 objects
chain length = 5: 10 objects
chain length = 6: 10 objects
chain length = 7: 10 objects
chain length = 8: 10 objects
chain length = 9: 10 objects
test-2-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack: ok
ok 3 - pack-objects with index version 2

expecting success of 5302.4 'both packs should be identical': 
	cmp "test-1-${pack1}.pack" "test-2-${pack2}.pack"

ok 4 - both packs should be identical

expecting success of 5302.5 'index v1 and index v2 should be different': 
	! cmp "test-1-${pack1}.idx" "test-2-${pack2}.idx"

test-1-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.idx test-2-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.idx differ: char 1, line 1
ok 5 - index v1 and index v2 should be different

expecting success of 5302.6 'index-pack with index version 1': 
	git index-pack --index-version=1 -o 1.idx "test-1-${pack1}.pack"

1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 6 - index-pack with index version 1

expecting success of 5302.7 'index-pack with index version 2': 
	git index-pack --index-version=2 -o 2.idx "test-1-${pack1}.pack"

1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 7 - index-pack with index version 2

expecting success of 5302.8 'index-pack results should match pack-objects ones': 
	cmp "test-1-${pack1}.idx" "1.idx" &&
	cmp "test-2-${pack2}.idx" "2.idx"

ok 8 - index-pack results should match pack-objects ones

expecting success of 5302.9 'index-pack --verify on index version 1': 
	git index-pack --verify "test-1-${pack1}.pack"

ok 9 - index-pack --verify on index version 1

expecting success of 5302.10 'index-pack --verify on index version 2': 
	git index-pack --verify "test-2-${pack2}.pack"

ok 10 - index-pack --verify on index version 2

expecting success of 5302.11 'pack-objects --index-version=2, is not accepted': 
	test_must_fail git pack-objects --index-version=2, test-3 <obj-list

fatal: bad index version '2,'
ok 11 - pack-objects --index-version=2, is not accepted

expecting success of 5302.12 'index v2: force some 64-bit offsets with pack-objects': 
	pack3=$(git pack-objects --index-version=2,0x40000 test-3 <obj-list)

ok 12 - index v2: force some 64-bit offsets with pack-objects

expecting success of 5302.13 'index v2: verify a pack with some 64-bit offsets': 
	git verify-pack -v "test-3-${pack3}.pack"

4307528f01beff143cd36a903cb8c9a9983a4c27 tree   12036 7200 12
e43b5801e4ac39a512e5d9423fc272cf5c3343f9 blob   300 313 7212
78fcb2fa30f448929fae32736f0fb56733d08746 blob   108 141 7525 1 e43b5801e4ac39a512e5d9423fc272cf5c3343f9
1c547eac61c40965963e85a56c24991ab1a0e3ef blob   108 141 7666 2 78fcb2fa30f448929fae32736f0fb56733d08746
571c7b54485960a9820927983c702eec1b41e91a blob   108 141 7807 3 1c547eac61c40965963e85a56c24991ab1a0e3ef
671d8800ae6936f107d70de2dbec536afb47d89a blob   108 141 7948 4 571c7b54485960a9820927983c702eec1b41e91a
f2377b316d0d92e3c29a2d6dba598ca02fb80e9c blob   108 141 8089 5 671d8800ae6936f107d70de2dbec536afb47d89a
0483297992ed4cd5ab3b5790912b1f03598ea660 blob   108 141 8230 6 f2377b316d0d92e3c29a2d6dba598ca02fb80e9c
1ddb0e1ff0db350df93807fda44ef75358d7ddb0 blob   108 141 8371 7 0483297992ed4cd5ab3b5790912b1f03598ea660
19dec2e189cd33584d2173979aecea01b3c59904 blob   108 141 8512 8 1ddb0e1ff0db350df93807fda44ef75358d7ddb0
2bc95d3b86ed1808b73d84f5c0287a61df979063 blob   108 141 8653 9 19dec2e189cd33584d2173979aecea01b3c59904
b8f11d512203fd0260eb79edd5cfca416ca404cb blob   300 313 8794
ef790963bda7ffd9e3556cf4211492680b34c2bf blob   108 141 9107 1 b8f11d512203fd0260eb79edd5cfca416ca404cb
a854bd2ad779f987395c790d0aa378277a7d3216 blob   108 141 9248 2 ef790963bda7ffd9e3556cf4211492680b34c2bf
b750a0431df80025eff766f0811e6a85e1dbc32a blob   108 141 9389 3 a854bd2ad779f987395c790d0aa378277a7d3216
9e793c3eeb7402e17eafb61928b96648a54a8789 blob   108 141 9530 4 b750a0431df80025eff766f0811e6a85e1dbc32a
35691bb59cfc8e5f0749a3c2df2d236150d7f7d1 blob   108 141 9671 5 9e793c3eeb7402e17eafb61928b96648a54a8789
0df5edef6dcc6452cf814984a4d4ea23a8e41e3c blob   108 141 9812 6 35691bb59cfc8e5f0749a3c2df2d236150d7f7d1
305f923c2d2e1fff9ec067b42443fff88aeebc67 blob   108 141 9953 7 0df5edef6dcc6452cf814984a4d4ea23a8e41e3c
67db08cb82e0053ee51773fbf4bdc50094e03767 blob   108 141 10094 8 305f923c2d2e1fff9ec067b42443fff88aeebc67
61a87ea87b8af074a75d0af78e77f2ed6141922c blob   108 141 10235 9 67db08cb82e0053ee51773fbf4bdc50094e03767
5e69af01a42867f9be8213089efc57c6a1517976 blob   300 313 10376
1280048552e2ee86127654132148d3c2e208b397 blob   108 141 10689 1 5e69af01a42867f9be8213089efc57c6a1517976
ec86b748af33306ff620ebe591da28ed622c1b4d blob   108 141 10830 2 1280048552e2ee86127654132148d3c2e208b397
ce83a0772693235f137100863f4217f9c6398a53 blob   108 141 10971 3 ec86b748af33306ff620ebe591da28ed622c1b4d
ebd5d1af0d246aa4f8e288c539b906eb765d48e1 blob   108 141 11112 4 ce83a0772693235f137100863f4217f9c6398a53
ef99659edf6a12a9320e29453d1e17054863c3d1 blob   108 141 11253 5 ebd5d1af0d246aa4f8e288c539b906eb765d48e1
17dc4d50c25440e569d3c4dabf41bb562c9013fc blob   108 141 11394 6 ef99659edf6a12a9320e29453d1e17054863c3d1
36a0964d29672133cea581290233bae77c3b8cca blob   108 141 11535 7 17dc4d50c25440e569d3c4dabf41bb562c9013fc
60a658626764685c980311c6325263eabdbe0547 blob   108 141 11676 8 36a0964d29672133cea581290233bae77c3b8cca
a7b6688d2a6f15e6f91d1701f64ca7da42a5a73a blob   108 141 11817 9 60a658626764685c980311c6325263eabdbe0547
ef1259b944f1b0c4ade62c049c2ea41daf63ccc7 blob   300 313 11958
612f382c01ffd0ea89c2a840cc683cfd1108628e blob   108 141 12271 1 ef1259b944f1b0c4ade62c049c2ea41daf63ccc7
ba0b924be466e9d85f8ba5563211e570d12d2841 blob   108 141 12412 2 612f382c01ffd0ea89c2a840cc683cfd1108628e
d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e blob   108 141 12553 3 ba0b924be466e9d85f8ba5563211e570d12d2841
e80b417ea517c993f906556a00fa8acaceb559b4 blob   108 141 12694 4 d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e
8cc2e1974c339c43bd481c205ea0024b54dbcb83 blob   108 141 12835 5 e80b417ea517c993f906556a00fa8acaceb559b4
8e57f0560c1135c5cdaca2c69094489ad6ddcdb0 blob   108 141 12976 6 8cc2e1974c339c43bd481c205ea0024b54dbcb83
416013a155571063a96f1e443ee44a8ac3f09c1b blob   108 141 13117 7 8e57f0560c1135c5cdaca2c69094489ad6ddcdb0
8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed blob   108 141 13258 8 416013a155571063a96f1e443ee44a8ac3f09c1b
beb699952b6a188a54675c11696cb6a2652b5249 blob   108 141 13399 9 8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed
0f66db930e6ce643852ad45eb91dc203575fb5f4 blob   300 313 13540
9a3a619d26a6e19b556d119d760b40a6397a9df4 blob   108 141 13853 1 0f66db930e6ce643852ad45eb91dc203575fb5f4
66336af04f97cfd40474e8aa4cea2e25275b5f94 blob   108 141 13994 2 9a3a619d26a6e19b556d119d760b40a6397a9df4
bf8886056d3abf37690115bfee10bf14ef5e4db9 blob   108 141 14135 3 66336af04f97cfd40474e8aa4cea2e25275b5f94
2c1120aee9298045837641feab263b3655725aa3 blob   108 141 14276 4 bf8886056d3abf37690115bfee10bf14ef5e4db9
f47f0d90220589a45dbccd06c8468eca7c04d70a blob   108 141 14417 5 2c1120aee9298045837641feab263b3655725aa3
add63edc5ce2dd58ff7d66b153f44d03b0d93df2 blob   108 141 14558 6 f47f0d90220589a45dbccd06c8468eca7c04d70a
75642e5399f1b51a33f0c6430af2fd997e4db578 blob   108 141 14699 7 add63edc5ce2dd58ff7d66b153f44d03b0d93df2
64e473488413d66fe6e464b3f09827501eb353fe blob   108 141 14840 8 75642e5399f1b51a33f0c6430af2fd997e4db578
597244daf249731fc922a26acfe6fb9ea3baca7f blob   108 141 14981 9 64e473488413d66fe6e464b3f09827501eb353fe
8d5f6b41255c60ea8f44892b918a38eebe43de6b blob   300 313 15122
c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94 blob   108 141 15435 1 8d5f6b41255c60ea8f44892b918a38eebe43de6b
0246ff570c396c37ff08c0f5f9d88c84fc21a297 blob   108 141 15576 2 c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94
cff9bb4b47c1bc50205d6a793d8d02bee852a229 blob   108 141 15717 3 0246ff570c396c37ff08c0f5f9d88c84fc21a297
2096ec927d087ee1076f1118e8fe48ab21a27bd7 blob   108 141 15858 4 cff9bb4b47c1bc50205d6a793d8d02bee852a229
0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501 blob   108 141 15999 5 2096ec927d087ee1076f1118e8fe48ab21a27bd7
633de7a70fe29cecb721bb5033573fbf175b31fc blob   108 141 16140 6 0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501
76db9ca0f1afa9c247d4c5a2fe60ca95154fd465 blob   108 141 16281 7 633de7a70fe29cecb721bb5033573fbf175b31fc
df4c5c8e8e25621bba74f233d59c76e5810f8677 blob   108 141 16422 8 76db9ca0f1afa9c247d4c5a2fe60ca95154fd465
9fc4cce844af6ed26932eb84045df0ab4a79f0b7 blob   108 141 16563 9 df4c5c8e8e25621bba74f233d59c76e5810f8677
ef3ddda4c2922f10089dfed6436267b445d5b118 blob   300 313 16704
1bdedd473270eef5c2c67c968ba1d5ee081013ee blob   108 141 17017 1 ef3ddda4c2922f10089dfed6436267b445d5b118
9d28c1ea0790ee28b8c35bc3fe88629980708730 blob   108 141 17158 2 1bdedd473270eef5c2c67c968ba1d5ee081013ee
a3264a35996ccaf722f869be8e379864e28ef561 blob   108 141 17299 3 9d28c1ea0790ee28b8c35bc3fe88629980708730
cd6f1b15bb20b9c706f8f80c77b7c210921f0b26 blob   108 141 17440 4 a3264a35996ccaf722f869be8e379864e28ef561
60601746c22df38cc0bcbce68f359fb2796d7569 blob   108 141 17581 5 cd6f1b15bb20b9c706f8f80c77b7c210921f0b26
f15a3f5dae93709cce491d407dad343f9577d8c5 blob   108 141 17722 6 60601746c22df38cc0bcbce68f359fb2796d7569
5dd384bbc7186571a9cccdba2ebaa794e87bfbdd blob   108 141 17863 7 f15a3f5dae93709cce491d407dad343f9577d8c5
d18475904b78554f1fd6f96b4c1ad44e84edf873 blob   108 141 18004 8 5dd384bbc7186571a9cccdba2ebaa794e87bfbdd
67728c76be3b7d5319ff2a93fc78aca0ff3824eb blob   108 141 18145 9 d18475904b78554f1fd6f96b4c1ad44e84edf873
c1ec14f204e244f32aa93c66e3fb6a7d4f58c081 blob   300 313 18286
258424ed6e5c4377a2aa55fb6d4818a3580291ad blob   108 141 18599 1 c1ec14f204e244f32aa93c66e3fb6a7d4f58c081
fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2 blob   108 141 18740 2 258424ed6e5c4377a2aa55fb6d4818a3580291ad
e1bfca166c2ff676f665fd3c58d7dea896ec48d7 blob   108 141 18881 3 fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2
383c3c67e93cfd05d272b187e3af5c1e00bcae5c blob   108 141 19022 4 e1bfca166c2ff676f665fd3c58d7dea896ec48d7
ad6a3267a9e0d49014eec133a5e968315e8ce834 blob   108 141 19163 5 383c3c67e93cfd05d272b187e3af5c1e00bcae5c
9dfc592085bb14371890b41e48c98b220420669b blob   108 141 19304 6 ad6a3267a9e0d49014eec133a5e968315e8ce834
c872afc7539f689178b7385010010ca7aef8f09a blob   108 141 19445 7 9dfc592085bb14371890b41e48c98b220420669b
1bc038b18c5039a05e173da2fd2b65b3d34ccd2b blob   108 141 19586 8 c872afc7539f689178b7385010010ca7aef8f09a
bdd7bd883f75c1726538851757168dc0dc33e222 blob   108 141 19727 9 1bc038b18c5039a05e173da2fd2b65b3d34ccd2b
71529d6ca58922aa05603b6f2784f87cad8703cf blob   300 313 19868
2bebfa6240e319a1c31951d05c8135f089fbbd29 blob   108 141 20181 1 71529d6ca58922aa05603b6f2784f87cad8703cf
83fcb919ae7bc9a80912c9bfd5731acd36666480 blob   108 141 20322 2 2bebfa6240e319a1c31951d05c8135f089fbbd29
b97506df40bbd212b52062b851cd88f04abb59b3 blob   108 141 20463 3 83fcb919ae7bc9a80912c9bfd5731acd36666480
298dc4942c3b3db53d484ffa86b451755cd2125f blob   108 141 20604 4 b97506df40bbd212b52062b851cd88f04abb59b3
ba11c807afc9699e7ea1cab791699bfd698c7e7d blob   108 141 20745 5 298dc4942c3b3db53d484ffa86b451755cd2125f
b1281e620292c2e74d8770eb99f0b6871e4cca59 blob   108 141 20886 6 ba11c807afc9699e7ea1cab791699bfd698c7e7d
368cd4d02a420764e0d31b35576f73b777c34604 blob   108 141 21027 7 b1281e620292c2e74d8770eb99f0b6871e4cca59
16d1323e84e3d5b058ab2ac8245db85bc4606c88 blob   108 141 21168 8 368cd4d02a420764e0d31b35576f73b777c34604
711d5e6b0d21b3aa205dcc960ec51475be8a25a5 blob   108 141 21309 9 16d1323e84e3d5b058ab2ac8245db85bc4606c88
d174d532539487c9aedbbaf38d556061b5acf826 blob   300 313 21450
bf5dcb9013df15ff0ae10e0682a92a7688a7720b blob   108 141 21763 1 d174d532539487c9aedbbaf38d556061b5acf826
fb214b786310655bc8ee46d89ca9a04ec9aed0c3 blob   108 141 21904 2 bf5dcb9013df15ff0ae10e0682a92a7688a7720b
b94140f4006d05e7e3822f5db19adc2b73a2cc05 blob   108 141 22045 3 fb214b786310655bc8ee46d89ca9a04ec9aed0c3
4019b50c838197ca4b8d664a4164a183cac8ad11 blob   108 141 22186 4 b94140f4006d05e7e3822f5db19adc2b73a2cc05
2826157afde0e74742115842ac2dddf5c3b5e23e blob   108 141 22327 5 4019b50c838197ca4b8d664a4164a183cac8ad11
99556fcde6a0be62a72c8b0c6682576a1d596bea blob   108 141 22468 6 2826157afde0e74742115842ac2dddf5c3b5e23e
8f5e7974c287b07f1cf8116485c4135340b807f3 blob   108 141 22609 7 99556fcde6a0be62a72c8b0c6682576a1d596bea
f9982291dfe87a9def1b12d24f9ca9a024a9dd8e blob   108 141 22750 8 8f5e7974c287b07f1cf8116485c4135340b807f3
3c5c0be699798d2f4fbe651051b9f17156f133c1 blob   108 141 22891 9 f9982291dfe87a9def1b12d24f9ca9a024a9dd8e
1297547aab30f952af805d38f6f1c1930cb3117b blob   8196 8210 23032
862f6954d9afd549b48fa2ef8e2f8ab96e309916 blob   8196 8210 31242
0471b3b8ab8da19f3968dc238e9555f4e48ce858 blob   8196 8210 39452
c80092496b80b5f21503b8c838dccfc1f2e2ddde blob   8196 8210 47662
e5a12c79cec70d52817054c4b9ef321003c6755f blob   8196 8210 55872
bf96a31446f37d8e57bb38a00797aa3af1f99370 blob   8196 8210 64082
0508b858e01f0367552fb14722388ba48dbd36f7 blob   8196 8210 72292
359017d1534767455090901a260985de1658d752 blob   8196 8210 80502
8d06001a3d38390afa66576caa6c55c796e33835 blob   8196 8210 88712
8162ceb825c07e3b1e17f5775665085da9b1e855 blob   8196 8210 96922
6910c5a645c9fe7f6b728034566b1668f0677a8e blob   8196 8210 105132
09ba511a995b8ea75067036d5c046f39052a3bd8 blob   8196 8210 113342
f45d142313c7a5270a60c664bb463cddadc467c1 blob   8196 8210 121552
964e51bf7d344bda71ea5e12dbd7bfb90120fcf0 blob   8196 8210 129762
408dd031138139f6ac6f402988f960527871f71a blob   8196 8210 137972
912fa0ec5536f31122e34577a4baf3b22d40de2a blob   8196 8210 146182
f02359c44ca04a542cc5bf59aa5f1de6cd1d5a4c blob   8196 8210 154392
b0566dd5d479c80c278bd5455c92aca689328471 blob   8196 8210 162602
49d17d605f042c1e978a68f625be6ab6294fa8fa blob   8196 8210 170812
8f744480abe8ad05bc419d1ab2e375b9c0fa3978 blob   8196 8210 179022
fff3a3a92d2268a464dbdcd00fc055885ee3cba9 blob   8196 8210 187232
f5fc0ff4afc14d9dfcb2580d3f438edd4cd8130a blob   8196 8210 195442
01179d82b18c252824e20e190543e0e84950d820 blob   8196 8210 203652
de3ed457f973b7ffb20edc36002c47a6e4b41066 blob   8196 8210 211862
9c4e1f8c16d04d90a2217279240996276d617067 blob   8196 8210 220072
816f18d19f433f5df9edbfb5547684b519fdeb3b blob   8196 8210 228282
72e7428e5ee3797ca0bf955f723b915bee919c48 blob   8196 8210 236492
41adb5af8e7f9737b16261fb0c224c7550c82f23 blob   8196 8210 244702
94f5d368a7c4ea294c463dc45cf15d387fa83c4e blob   8196 8210 252912
85fdf2eed169dbc1fe2d71439b589b0326dad12b blob   8196 8210 261122
bab18d872e9183c6d450b326477205bb0cc081cb blob   8196 8210 269332
b31fb3fb181512bc608b58cb33323d97ad6eac2f blob   8196 8210 277542
20a9519106ab64bf043456a58b6bfb04f1c7b39d blob   8196 8210 285752
94a015b2b6053f7a1d541969919e879bb2b75eef blob   8196 8210 293962
7353550b9b0e1da4f68b9484dfad2634100a00cc blob   8196 8210 302172
e28a360bcbd69ca1a0bb47834e640069c6672a8d blob   8196 8210 310382
8e6ffc05856460c2e08c8e9d824bbf510d3c1b52 blob   8196 8210 318592
ceade5760b1ba0bc11d4e4db6982ddf671495e58 blob   8196 8210 326802
92534f38b94c1da321d88c9ab5af8c3e804c2507 blob   8196 8210 335012
f5577acbfd83dddf90b2054d6cb5dce2df6d06ee blob   8196 8210 343222
59a27076dc0a8989215a160d61ac401e41c05126 blob   8196 8210 351432
2db6b919f253444b5437d8251e5d101d5a34e1b3 blob   8196 8210 359642
c1c35c36d4300da28c0570746adaf2f5b0b015a3 blob   8196 8210 367852
03a6f56dbbb556425ef8c43c31519b32eb5629a4 blob   8196 8210 376062
dd6209d4c0c5d4f210a8d1bb4a4d314cf284dea9 blob   8196 8210 384272
8c04fa425f4dfb4555b376e73d8f28d56b97a569 blob   8196 8210 392482
614e235cd8ca8af7ccf402a92eb34baadaaa3f18 blob   8196 8210 400692
b2f07ee5771d9e0de7166bc72a4a7ebce9830779 blob   8196 8210 408902
852ba0cf084474c1b0b48052606ae27346a5b1a1 blob   8196 8210 417112
15ff79f644a0596529eba0592017dce39e222b8e blob   8196 8210 425322
75f67c0c230f8923db5831094b1cc67f61bf1734 blob   8196 8210 433532
95b51158cd6365da9b10f1d8b06ba76dc5d5c5f1 blob   8196 8210 441742
5217ce416b26a3d76191d873490110746d0e8a04 blob   8196 8210 449952
c16eb68827fa5d6da73b320b431cf736c7a6a4af blob   8196 8210 458162
57983aab7f7384626a6a1f9ec08fba1902dd11e5 blob   8196 8210 466372
84e4d2ce637781776791c8e2cf4a9312a2783ceb blob   8196 8210 474582
2175a1a9d8757b3836f5cc44c6af0297aea36709 blob   8196 8210 482792
9b655d54faaf0a737a03731852f27cf6b552bcaf blob   8196 8210 491002
a3233ba1323f07a0d68f6020e7209025819cfa13 blob   8196 8210 499212
5a65a213ee0ebdc285c8e8eca24e9eda97f8a384 blob   8196 8210 507422
de1679ebb44d3fe59e8d2378471b56db384fb181 blob   8196 8210 515632
d2e455cc03081911f9ecd81245becd858d1e64ca blob   8196 8210 523842
72826d3e97bc228616e06235566a0db59c94bd74 blob   8196 8210 532052
debe389b3bdd62d96748db592e99cb0cc7b1b0f2 blob   8196 8210 540262
e572e59eee8119f8fb58e8595ecd0c622f2d6e29 blob   8196 8210 548472
197f45d948a36ac3762e5daf6ef4d43a5d969503 blob   8196 8210 556682
fb294d29a9d045d5a46a9c00e53777b394ceb346 blob   8196 8210 564892
10f7133774acbc162f5f79804744d64747eee380 blob   8196 8210 573102
16b9dea85eab6d7e452bdea4889e24a8ad79afd5 blob   8196 8210 581312
08a8cf223e5dc57504da3cd8eb56d33f276dc1b9 blob   8196 8210 589522
e3332ff9a2540b45e599be0c7bca8bbe28af2b43 blob   8196 8210 597732
5e1b961ae623672df764f64b737f332318d43baa blob   8196 8210 605942
14caba1bc2835573f3c20b7f2e5fb638a08e12ee blob   8196 8210 614152
84d1369c26d187b24dffe9029e81e119e4a374f5 blob   8196 8210 622362
5ef3a0f4954ade2d5c290ccc4d791c3b219d89ea blob   8196 8210 630572
610d16151ceb1dc4d5138f63ed410819a8b9161c blob   8196 8210 638782
3545eb1f5549261267ab0577b94372e88b49731d blob   8196 8210 646992
0d6e5c0388744cf82463ce1283ff99e863e9b26e blob   8196 8210 655202
611261b75bd720d3433ea8975d555b1ac3e692bd blob   8196 8210 663412
e25dc2ac80f9f78aa2809b5cd254ce47a51efbe5 blob   8196 8210 671622
ea5a4b4fed0bab7beffd3c7fc6cc549df47017d7 blob   8196 8210 679832
d68756996794df8c00dfcbf520662b14cb06958e blob   8196 8210 688042
b5b44a475116c2d0054edf54c699909d5d583aac blob   8196 8210 696252
99ff18078623c32b85a49cc8a03e3c58ee94eecb blob   8196 8210 704462
159fdc73e63cf90624d128d87b8185154727714e blob   8196 8210 712672
1f0ca97497381a196e53a7639ee769ed019469a3 blob   8196 8210 720882
6dbed45fde708bb67e6b21bd55976483305f9e74 blob   8196 8210 729092
b5ec32ad29b65e5742cd1857d17e92c2efc5da96 blob   8196 8210 737302
cf823d111604e8a014e0702b5e15b242bb961c78 blob   8196 8210 745512
72528baaeeba0d9c01da36a7a0add1ac49d860f2 blob   8196 8210 753722
b976a8fd346486d78cdebeaa0b0ac200befca629 blob   8196 8210 761932
e652cd97e9aae1523d892c1f417274dd26c3bcd3 blob   8196 8210 770142
aa82432626cc08fb818a20aa62b607aa52e7b35d blob   8196 8210 778352
d67069815168092ee0eadeab8177002bd0376b6f blob   8196 8210 786562
fa7ca115eb82e14f0263990362d4fc27591e1143 blob   8196 8210 794772
5cadb04c4d4ec953dffc528bf75561a6ae1c5820 blob   8196 8210 802982
a769ce6dfe1abe1b6162627b2b5df89f4f7d4317 blob   8196 8210 811192
bf265906aab0df90b6a4bdb1fe6f8088a9038435 blob   8196 8210 819402
b302b77fd5595784b5e85e91f8b4314fff49a6a1 blob   8196 8210 827612
3927444e44b49dfa6cdc768298ae879ec298c45d blob   8196 8210 835822
0b968294884af115eb5a1b941b3dabd48470c3bb blob   12 41 844032 1 3927444e44b49dfa6cdc768298ae879ec298c45d
34a68de99f94f6f9e437a288349602768eae4b92 blob   250 263 844073
8517d36660dffb896fb4e283ad110023aaebaf1b blob   57 90 844336 1 34a68de99f94f6f9e437a288349602768eae4b92
e3fc6633c069c8e246d77a408e4747c2852ba44a blob   57 90 844426 1 34a68de99f94f6f9e437a288349602768eae4b92
37a071e55d1f2e07af146ca6017d98dd85beae68 blob   57 90 844516 1 34a68de99f94f6f9e437a288349602768eae4b92
a8179a233b7aeeb7a450c5d321d4b73df936b64b blob   57 90 844606 1 34a68de99f94f6f9e437a288349602768eae4b92
99e0b239888c8b71671fb948e41111876e61a3c2 blob   57 90 844696 1 34a68de99f94f6f9e437a288349602768eae4b92
e26e04b4786bf6b0ec3c5d528e7002cd58e2401b blob   57 90 844786 1 34a68de99f94f6f9e437a288349602768eae4b92
a6106f10ea80724dbc32b328d9892111589a2111 blob   57 90 844876 1 34a68de99f94f6f9e437a288349602768eae4b92
d1669a170780865ccd7645211c2e1cebdfb28aad blob   57 90 844966 1 34a68de99f94f6f9e437a288349602768eae4b92
53a19e0c2c34ef1a4e1bbc9aa1cba4cb9bc2dd80 blob   57 90 845056 1 34a68de99f94f6f9e437a288349602768eae4b92
26ff29a62e7a6359d3975813fd645af871576125 blob   57 90 845146 1 34a68de99f94f6f9e437a288349602768eae4b92
c1d6b9953613f5732cd40d8cffbb2b746a71fb92 blob   57 90 845236 1 34a68de99f94f6f9e437a288349602768eae4b92
a2bfcc19d1592c43af33617500394e1ac09e968c blob   57 90 845326 1 34a68de99f94f6f9e437a288349602768eae4b92
36c0479c58cef0b9a10b56934ed42a862e1dcfe2 blob   57 90 845416 1 34a68de99f94f6f9e437a288349602768eae4b92
642aa265517d66c88f030a2230eb97e77c973905 blob   57 90 845506 1 34a68de99f94f6f9e437a288349602768eae4b92
29cd4721cd3cef7f5a2e032d6c2d6908427cd5af blob   57 90 845596 1 34a68de99f94f6f9e437a288349602768eae4b92
ae5ccb1578fbc399571f4f0132edd18c55b19ef0 blob   57 90 845686 1 34a68de99f94f6f9e437a288349602768eae4b92
d22feecdd32e57af8fd88bda0fbde8fbb96d4f1c blob   57 90 845776 1 34a68de99f94f6f9e437a288349602768eae4b92
ab2acc4bd273e799b56effc7e208a01814432ba5 blob   57 90 845866 1 34a68de99f94f6f9e437a288349602768eae4b92
2d5f83c6857691045da554091b8f2d82477d9baf blob   57 90 845956 1 34a68de99f94f6f9e437a288349602768eae4b92
fac99cd6f9219ee888b9382ee44a3b7932723b12 blob   57 90 846046 1 34a68de99f94f6f9e437a288349602768eae4b92
b32b0ed27f34e4a9d7c4aab24dfa2d6c51b1c2eb blob   57 90 846136 1 34a68de99f94f6f9e437a288349602768eae4b92
a3f38fbdbe8f34acc61f3a325104e739a875a4b6 blob   57 90 846226 1 34a68de99f94f6f9e437a288349602768eae4b92
6bc5c86eeb3dfcc3ca2343e39cc91dec35ddc90b blob   57 90 846316 1 34a68de99f94f6f9e437a288349602768eae4b92
38897be9103dbc6aff7d1ecd15c1dc6c6d18b0a7 blob   57 90 846406 1 34a68de99f94f6f9e437a288349602768eae4b92
69e0b8ef8cda369575b6801c6ed47daf09aa3c62 blob   57 90 846496 1 34a68de99f94f6f9e437a288349602768eae4b92
c3e6c8cf465113a74926f3d5c73a3b400970643c blob   57 90 846586 1 34a68de99f94f6f9e437a288349602768eae4b92
a31a03a60bad0896133e6e52982da2e7e22832ff blob   57 90 846676 1 34a68de99f94f6f9e437a288349602768eae4b92
735fe835bee0cfa2d7ecc2f195c22de3e7b208b3 blob   57 90 846766 1 34a68de99f94f6f9e437a288349602768eae4b92
84705bfd7a24eb59137fdc26c070c4329eee46a7 blob   57 90 846856 1 34a68de99f94f6f9e437a288349602768eae4b92
5090e761c398db8c0b3fe1c0069535c3b7a9a575 blob   57 90 846946 1 34a68de99f94f6f9e437a288349602768eae4b92
c5c8cc3525a17842c2e668d1499c7c2518202a87 blob   57 90 847036 1 34a68de99f94f6f9e437a288349602768eae4b92
441d41902c4ccb987a866663ebbcc729fbcc4072 blob   57 90 847126 1 34a68de99f94f6f9e437a288349602768eae4b92
55bc16727ba8a63a31eabd811cfc740dc423bab6 blob   57 90 847216 1 34a68de99f94f6f9e437a288349602768eae4b92
86c6bd761eacb8a021246263994bf02d1163c7b5 blob   57 90 847306 1 34a68de99f94f6f9e437a288349602768eae4b92
8812057b6f2583732f83db5bac543549cc621783 blob   57 90 847396 1 34a68de99f94f6f9e437a288349602768eae4b92
c8043aaa6a70318be94ef87be98ea2c7de7f23f5 blob   57 90 847486 1 34a68de99f94f6f9e437a288349602768eae4b92
9d48f3c2e700d81fbe46fbccc400bedc8666221a blob   57 90 847576 1 34a68de99f94f6f9e437a288349602768eae4b92
fd68f118bfc99562e08bd153a3f1c604f1ac0124 blob   57 90 847666 1 34a68de99f94f6f9e437a288349602768eae4b92
879bc6e196323012740d55b1e5bbd9937632ecf3 blob   57 90 847756 1 34a68de99f94f6f9e437a288349602768eae4b92
a3ed4b758faeca44e89792c3f1b0536b685d0552 blob   57 90 847846 1 34a68de99f94f6f9e437a288349602768eae4b92
d9dd72f666a9d30dee5cdd894ca365a82e965594 blob   57 90 847936 1 34a68de99f94f6f9e437a288349602768eae4b92
088ddcb945af72c47348b65a63992c71b6b9dbe8 blob   57 90 848026 1 34a68de99f94f6f9e437a288349602768eae4b92
9e7b55d50c530d08c120379e19bb1c1653bb3063 blob   57 90 848116 1 34a68de99f94f6f9e437a288349602768eae4b92
2dfd9df0b22049f88e22ae86e4370155ecb23271 blob   57 90 848206 1 34a68de99f94f6f9e437a288349602768eae4b92
9de2bb387fc8bf63dbc7a68cb22b9e8439896326 blob   57 90 848296 1 34a68de99f94f6f9e437a288349602768eae4b92
a7eacc2c62dfd538c2948cce08cd217cc72a7140 blob   57 90 848386 1 34a68de99f94f6f9e437a288349602768eae4b92
291b2d8c01a9bc50bc4605bc479a183193de2e45 blob   57 90 848476 1 34a68de99f94f6f9e437a288349602768eae4b92
464adf43722b49bca34d8727d70db33c9ec70097 blob   57 90 848566 1 34a68de99f94f6f9e437a288349602768eae4b92
aa6095774c04683081cad47f300324a88ea95f2e blob   57 90 848656 1 34a68de99f94f6f9e437a288349602768eae4b92
896562b116d22c48f8872854123c523b76928061 blob   57 90 848746 1 34a68de99f94f6f9e437a288349602768eae4b92
f01eb69ea9caabb9fe801ef0f1bfdfa4477e0e34 blob   57 90 848836 1 34a68de99f94f6f9e437a288349602768eae4b92
d8603740ffe28d592c9d10ae2d6ec9dd0cf71949 blob   57 90 848926 1 34a68de99f94f6f9e437a288349602768eae4b92
8eb88090ce51c8ce838b12302c761bbf806c3fcc blob   57 90 849016 1 34a68de99f94f6f9e437a288349602768eae4b92
e961d288a95c209fe01ba42f01a18605eb5a85d3 blob   57 90 849106 1 34a68de99f94f6f9e437a288349602768eae4b92
abd14d13fada2545825fdf71c5d4a22ebb60f697 blob   57 90 849196 1 34a68de99f94f6f9e437a288349602768eae4b92
6a54ffedf41f419c66f6cd734a27ec5968f79b5a blob   57 90 849286 1 34a68de99f94f6f9e437a288349602768eae4b92
b6fa6c3c025c4f875c78423ab993a9349cd964c5 blob   57 90 849376 1 34a68de99f94f6f9e437a288349602768eae4b92
088e69e7ab273e35b4f63ecb1b915a3997f13dff blob   57 90 849466 1 34a68de99f94f6f9e437a288349602768eae4b92
609652080c31409406c828cb996e41fa6a286654 blob   57 90 849556 1 34a68de99f94f6f9e437a288349602768eae4b92
90d3d9b65a2f0c939f45a86f65192846e8066e7f blob   57 90 849646 1 34a68de99f94f6f9e437a288349602768eae4b92
05b4f18d9841f7abb271e81accadea31c5416a71 blob   57 90 849736 1 34a68de99f94f6f9e437a288349602768eae4b92
cfdd1e216211554d586bb3be233190457c5f5c0d blob   57 90 849826 1 34a68de99f94f6f9e437a288349602768eae4b92
73375ca0591d6c17f37b9f287a7c19f368fc644f blob   57 90 849916 1 34a68de99f94f6f9e437a288349602768eae4b92
46cd94a7854b7360f8f8a7e637e2575e707f7b04 blob   57 90 850006 1 34a68de99f94f6f9e437a288349602768eae4b92
ec35852188f9e88aa67849934b0c50bd698fafef blob   57 90 850096 1 34a68de99f94f6f9e437a288349602768eae4b92
0106e17481932f5c223fafadc1d26abc6adf40d6 blob   57 90 850186 1 34a68de99f94f6f9e437a288349602768eae4b92
f846f988e45d97ac0163885e65920643f0029922 blob   57 90 850276 1 34a68de99f94f6f9e437a288349602768eae4b92
636d415b097ff0c103e63d09d96aeb07fdad2045 blob   57 90 850366 1 34a68de99f94f6f9e437a288349602768eae4b92
497017bb8901086d3120553a384f3500ceb86f2e blob   57 90 850456 1 34a68de99f94f6f9e437a288349602768eae4b92
c50bc0b26b2336dbe90b9c7bdaa8d4cfb8f65638 blob   57 90 850546 1 34a68de99f94f6f9e437a288349602768eae4b92
921538e73389e99e294938d8580ababdb639f140 blob   57 90 850636 1 34a68de99f94f6f9e437a288349602768eae4b92
9ede1b01ec1751bf9ca9d5845ac005edc6935601 blob   57 90 850726 1 34a68de99f94f6f9e437a288349602768eae4b92
1ba5df91f11a1011f4788bc4cc067743828dda41 blob   57 90 850816 1 34a68de99f94f6f9e437a288349602768eae4b92
188728c24ca8cf687133dd0a5782e8819cee10a6 blob   57 90 850906 1 34a68de99f94f6f9e437a288349602768eae4b92
cb0d0270d7c50e33aacd9a4247333622c62846a4 blob   57 90 850996 1 34a68de99f94f6f9e437a288349602768eae4b92
dd39f8544a79066c925baca19ddc02623970efd1 blob   57 90 851086 1 34a68de99f94f6f9e437a288349602768eae4b92
d0b35a20e2ffaa46d895d6296f555dd98956d536 blob   57 90 851176 1 34a68de99f94f6f9e437a288349602768eae4b92
ae274e8cd31f35d743e68b3c8420e604386fc514 blob   57 90 851266 1 34a68de99f94f6f9e437a288349602768eae4b92
d1ede5db04b30c10d395c13dec020c90320498b8 blob   57 90 851356 1 34a68de99f94f6f9e437a288349602768eae4b92
2adace6c3082b12f42112482372696d66c36e4ae blob   57 90 851446 1 34a68de99f94f6f9e437a288349602768eae4b92
035e7e54cee9eb197af435b6b6dcced489c233f6 blob   57 90 851536 1 34a68de99f94f6f9e437a288349602768eae4b92
74aced6a3316fd8d726932ed908b035cd33afef6 blob   57 90 851626 1 34a68de99f94f6f9e437a288349602768eae4b92
efbbfa01b16e997301bb440aad9c885321bb13d2 blob   57 90 851716 1 34a68de99f94f6f9e437a288349602768eae4b92
92433746fe3340a5d4bc3f5487545f5167eaeaad blob   57 90 851806 1 34a68de99f94f6f9e437a288349602768eae4b92
da7b351a2560fd44fe89fc6288c3efa72eace9eb blob   57 90 851896 1 34a68de99f94f6f9e437a288349602768eae4b92
63176d3a0ae88aee86fa1b2b4390ed0850e67a9b blob   57 90 851986 1 34a68de99f94f6f9e437a288349602768eae4b92
5e10cf16f2bf33110cf59f53d583527d676820e1 blob   57 90 852076 1 34a68de99f94f6f9e437a288349602768eae4b92
aeb87caeb18972ad237d4c5628bfedb2dca51d47 blob   57 90 852166 1 34a68de99f94f6f9e437a288349602768eae4b92
141df301ab1d7f9e40b90fb4435ec4ac40ae544d blob   57 90 852256 1 34a68de99f94f6f9e437a288349602768eae4b92
e7172196f3fd2742cbe382daa02fd9641b9f6ffb blob   57 90 852346 1 34a68de99f94f6f9e437a288349602768eae4b92
4e78d6c905bc6d0c06ad066400f0570a391f9385 blob   57 90 852436 1 34a68de99f94f6f9e437a288349602768eae4b92
c096ccf827c047c3a20cfb1dd3fd5b0485ec2a0b blob   57 90 852526 1 34a68de99f94f6f9e437a288349602768eae4b92
91c4bc3b3c200535d88f76e9e3566658cb7b2bfd blob   57 90 852616 1 34a68de99f94f6f9e437a288349602768eae4b92
0b7888c3e508fe256fe859ba46c77d100abbce3f blob   57 90 852706 1 34a68de99f94f6f9e437a288349602768eae4b92
36cfe418f3038689cd47b64845c6f24886f9ec73 blob   57 90 852796 1 34a68de99f94f6f9e437a288349602768eae4b92
54c9d6ab199e99bdbba483ef1287e0cc31fc84b3 blob   57 90 852886 1 34a68de99f94f6f9e437a288349602768eae4b92
8b64b7aafc16c177bcc58813c7a853f622feb10f blob   57 90 852976 1 34a68de99f94f6f9e437a288349602768eae4b92
6ff2ccef89b04f0539f51c0ffcbe5f7bcf108ced blob   57 90 853066 1 34a68de99f94f6f9e437a288349602768eae4b92
7b419ded53760b5dbe136c1ec83ef3f338fab544 blob   57 90 853156 1 34a68de99f94f6f9e437a288349602768eae4b92
non delta: 112 objects
chain length = 1: 110 objects
chain length = 2: 10 objects
chain length = 3: 10 objects
chain length = 4: 10 objects
chain length = 5: 10 objects
chain length = 6: 10 objects
chain length = 7: 10 objects
chain length = 8: 10 objects
chain length = 9: 10 objects
test-3-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack: ok
ok 13 - index v2: verify a pack with some 64-bit offsets

expecting success of 5302.14 '64-bit offsets: should be different from previous index v2 results': 
	! cmp "test-2-${pack2}.idx" "test-3-${pack3}.idx"

test-2-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.idx test-3-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.idx differ: char 8281, line 24
ok 14 - 64-bit offsets: should be different from previous index v2 results

expecting success of 5302.15 'index v2: force some 64-bit offsets with index-pack': 
	git index-pack --index-version=2,0x40000 -o 3.idx "test-1-${pack1}.pack"

1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 15 - index v2: force some 64-bit offsets with index-pack

expecting success of 5302.16 '64-bit offsets: index-pack result should match pack-objects one': 
	cmp "test-3-${pack3}.idx" "3.idx"

ok 16 - 64-bit offsets: index-pack result should match pack-objects one

expecting success of 5302.17 'index-pack --verify on 64-bit offset v2 (cheat)': 
	# This cheats by knowing which lower offset should still be encoded
	# in 64-bit representation.
	git index-pack --verify --index-version=2,0x40000 "test-3-${pack3}.pack"

ok 17 - index-pack --verify on 64-bit offset v2 (cheat)

expecting success of 5302.18 'index-pack --verify on 64-bit offset v2': 
	git index-pack --verify "test-3-${pack3}.pack"

ok 18 - index-pack --verify on 64-bit offset v2

expecting success of 5302.19 '[index v1] 1) stream pack to repository': 
	git index-pack --index-version=1 --stdin < "test-1-${pack1}.pack" &&
	git prune-packed &&
	git count-objects | ( read nr rest && test "$nr" -eq 1 ) &&
	cmp "test-1-${pack1}.pack" ".git/objects/pack/pack-${pack1}.pack" &&
	cmp "test-1-${pack1}.idx"	".git/objects/pack/pack-${pack1}.idx"

pack	1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 19 - [index v1] 1) stream pack to repository

expecting success of 5302.20 '[index v1] 2) create a stealth corruption in a delta base reference': 
	# This test assumes file_101 is a delta smaller than 16 bytes.
	# It should be against file_100 but we substitute its base for file_099
	sha1_101=$(git hash-object file_101) &&
	sha1_099=$(git hash-object file_099) &&
	offs_101=$(index_obj_offset 1.idx $sha1_101) &&
	nr_099=$(index_obj_nr 1.idx $sha1_099) &&
	chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
	recordsz=$((rawsz + 4)) &&
	dd of=".git/objects/pack/pack-${pack1}.pack" seek=$(($offs_101 + 1)) \
	       if=".git/objects/pack/pack-${pack1}.idx" \
	       skip=$((4 + 256 * 4 + $nr_099 * recordsz)) \
	       bs=1 count=$rawsz conv=notrunc &&
	git cat-file blob $sha1_101 > file_101_foo1

20+0 records in
20+0 records out
20 bytes copied, 0.00164073 s, 12.2 kB/s
ok 20 - [index v1] 2) create a stealth corruption in a delta base reference

expecting success of 5302.21 '[index v1] 3) corrupted delta happily returned wrong data': 
	test -f file_101_foo1 && ! cmp file_101 file_101_foo1

file_101 file_101_foo1 differ: char 5, line 2
ok 21 - [index v1] 3) corrupted delta happily returned wrong data

expecting success of 5302.22 '[index v1] 4) confirm that the pack is actually corrupted': 
	test_must_fail git fsck --full $commit

error: .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack pack checksum mismatch
error: packed 0b968294884af115eb5a1b941b3dabd48470c3bb from .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack is corrupt
ok 22 - [index v1] 4) confirm that the pack is actually corrupted

expecting success of 5302.23 '[index v1] 5) pack-objects happily reuses corrupted data': 
	pack4=$(git pack-objects test-4 <obj-list) &&
	test -f "test-4-${pack4}.pack"

ok 23 - [index v1] 5) pack-objects happily reuses corrupted data

expecting success of 5302.24 '[index v1] 6) newly created pack is BAD !': 
	test_must_fail git verify-pack -v "test-4-${pack4}.pack"

4307528f01beff143cd36a903cb8c9a9983a4c27 tree   12036 7200 12
e43b5801e4ac39a512e5d9423fc272cf5c3343f9 blob   300 313 7212
78fcb2fa30f448929fae32736f0fb56733d08746 blob   108 141 7525 1 e43b5801e4ac39a512e5d9423fc272cf5c3343f9
1c547eac61c40965963e85a56c24991ab1a0e3ef blob   108 141 7666 2 78fcb2fa30f448929fae32736f0fb56733d08746
571c7b54485960a9820927983c702eec1b41e91a blob   108 141 7807 3 1c547eac61c40965963e85a56c24991ab1a0e3ef
671d8800ae6936f107d70de2dbec536afb47d89a blob   108 141 7948 4 571c7b54485960a9820927983c702eec1b41e91a
f2377b316d0d92e3c29a2d6dba598ca02fb80e9c blob   108 141 8089 5 671d8800ae6936f107d70de2dbec536afb47d89a
0483297992ed4cd5ab3b5790912b1f03598ea660 blob   108 141 8230 6 f2377b316d0d92e3c29a2d6dba598ca02fb80e9c
1ddb0e1ff0db350df93807fda44ef75358d7ddb0 blob   108 141 8371 7 0483297992ed4cd5ab3b5790912b1f03598ea660
19dec2e189cd33584d2173979aecea01b3c59904 blob   108 141 8512 8 1ddb0e1ff0db350df93807fda44ef75358d7ddb0
2bc95d3b86ed1808b73d84f5c0287a61df979063 blob   108 141 8653 9 19dec2e189cd33584d2173979aecea01b3c59904
b8f11d512203fd0260eb79edd5cfca416ca404cb blob   300 313 8794
ef790963bda7ffd9e3556cf4211492680b34c2bf blob   108 141 9107 1 b8f11d512203fd0260eb79edd5cfca416ca404cb
a854bd2ad779f987395c790d0aa378277a7d3216 blob   108 141 9248 2 ef790963bda7ffd9e3556cf4211492680b34c2bf
b750a0431df80025eff766f0811e6a85e1dbc32a blob   108 141 9389 3 a854bd2ad779f987395c790d0aa378277a7d3216
9e793c3eeb7402e17eafb61928b96648a54a8789 blob   108 141 9530 4 b750a0431df80025eff766f0811e6a85e1dbc32a
35691bb59cfc8e5f0749a3c2df2d236150d7f7d1 blob   108 141 9671 5 9e793c3eeb7402e17eafb61928b96648a54a8789
0df5edef6dcc6452cf814984a4d4ea23a8e41e3c blob   108 141 9812 6 35691bb59cfc8e5f0749a3c2df2d236150d7f7d1
305f923c2d2e1fff9ec067b42443fff88aeebc67 blob   108 141 9953 7 0df5edef6dcc6452cf814984a4d4ea23a8e41e3c
67db08cb82e0053ee51773fbf4bdc50094e03767 blob   108 141 10094 8 305f923c2d2e1fff9ec067b42443fff88aeebc67
61a87ea87b8af074a75d0af78e77f2ed6141922c blob   108 141 10235 9 67db08cb82e0053ee51773fbf4bdc50094e03767
5e69af01a42867f9be8213089efc57c6a1517976 blob   300 313 10376
1280048552e2ee86127654132148d3c2e208b397 blob   108 141 10689 1 5e69af01a42867f9be8213089efc57c6a1517976
ec86b748af33306ff620ebe591da28ed622c1b4d blob   108 141 10830 2 1280048552e2ee86127654132148d3c2e208b397
ce83a0772693235f137100863f4217f9c6398a53 blob   108 141 10971 3 ec86b748af33306ff620ebe591da28ed622c1b4d
ebd5d1af0d246aa4f8e288c539b906eb765d48e1 blob   108 141 11112 4 ce83a0772693235f137100863f4217f9c6398a53
ef99659edf6a12a9320e29453d1e17054863c3d1 blob   108 141 11253 5 ebd5d1af0d246aa4f8e288c539b906eb765d48e1
17dc4d50c25440e569d3c4dabf41bb562c9013fc blob   108 141 11394 6 ef99659edf6a12a9320e29453d1e17054863c3d1
36a0964d29672133cea581290233bae77c3b8cca blob   108 141 11535 7 17dc4d50c25440e569d3c4dabf41bb562c9013fc
60a658626764685c980311c6325263eabdbe0547 blob   108 141 11676 8 36a0964d29672133cea581290233bae77c3b8cca
a7b6688d2a6f15e6f91d1701f64ca7da42a5a73a blob   108 141 11817 9 60a658626764685c980311c6325263eabdbe0547
ef1259b944f1b0c4ade62c049c2ea41daf63ccc7 blob   300 313 11958
612f382c01ffd0ea89c2a840cc683cfd1108628e blob   108 141 12271 1 ef1259b944f1b0c4ade62c049c2ea41daf63ccc7
ba0b924be466e9d85f8ba5563211e570d12d2841 blob   108 141 12412 2 612f382c01ffd0ea89c2a840cc683cfd1108628e
d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e blob   108 141 12553 3 ba0b924be466e9d85f8ba5563211e570d12d2841
e80b417ea517c993f906556a00fa8acaceb559b4 blob   108 141 12694 4 d05e80ce75fe6189e1b08dfc5fb9bf0a1a6e544e
8cc2e1974c339c43bd481c205ea0024b54dbcb83 blob   108 141 12835 5 e80b417ea517c993f906556a00fa8acaceb559b4
8e57f0560c1135c5cdaca2c69094489ad6ddcdb0 blob   108 141 12976 6 8cc2e1974c339c43bd481c205ea0024b54dbcb83
416013a155571063a96f1e443ee44a8ac3f09c1b blob   108 141 13117 7 8e57f0560c1135c5cdaca2c69094489ad6ddcdb0
8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed blob   108 141 13258 8 416013a155571063a96f1e443ee44a8ac3f09c1b
beb699952b6a188a54675c11696cb6a2652b5249 blob   108 141 13399 9 8dc7c392787f4ec7bb28c57bc6744a2b5f3122ed
0f66db930e6ce643852ad45eb91dc203575fb5f4 blob   300 313 13540
9a3a619d26a6e19b556d119d760b40a6397a9df4 blob   108 141 13853 1 0f66db930e6ce643852ad45eb91dc203575fb5f4
66336af04f97cfd40474e8aa4cea2e25275b5f94 blob   108 141 13994 2 9a3a619d26a6e19b556d119d760b40a6397a9df4
bf8886056d3abf37690115bfee10bf14ef5e4db9 blob   108 141 14135 3 66336af04f97cfd40474e8aa4cea2e25275b5f94
2c1120aee9298045837641feab263b3655725aa3 blob   108 141 14276 4 bf8886056d3abf37690115bfee10bf14ef5e4db9
f47f0d90220589a45dbccd06c8468eca7c04d70a blob   108 141 14417 5 2c1120aee9298045837641feab263b3655725aa3
add63edc5ce2dd58ff7d66b153f44d03b0d93df2 blob   108 141 14558 6 f47f0d90220589a45dbccd06c8468eca7c04d70a
75642e5399f1b51a33f0c6430af2fd997e4db578 blob   108 141 14699 7 add63edc5ce2dd58ff7d66b153f44d03b0d93df2
64e473488413d66fe6e464b3f09827501eb353fe blob   108 141 14840 8 75642e5399f1b51a33f0c6430af2fd997e4db578
597244daf249731fc922a26acfe6fb9ea3baca7f blob   108 141 14981 9 64e473488413d66fe6e464b3f09827501eb353fe
8d5f6b41255c60ea8f44892b918a38eebe43de6b blob   300 313 15122
c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94 blob   108 141 15435 1 8d5f6b41255c60ea8f44892b918a38eebe43de6b
0246ff570c396c37ff08c0f5f9d88c84fc21a297 blob   108 141 15576 2 c26e8fbe6bd52d34b340f61780b6e3dd3b9bed94
cff9bb4b47c1bc50205d6a793d8d02bee852a229 blob   108 141 15717 3 0246ff570c396c37ff08c0f5f9d88c84fc21a297
2096ec927d087ee1076f1118e8fe48ab21a27bd7 blob   108 141 15858 4 cff9bb4b47c1bc50205d6a793d8d02bee852a229
0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501 blob   108 141 15999 5 2096ec927d087ee1076f1118e8fe48ab21a27bd7
633de7a70fe29cecb721bb5033573fbf175b31fc blob   108 141 16140 6 0ff6b3e6f0b0957b5b05a06d9b4580f0e1798501
76db9ca0f1afa9c247d4c5a2fe60ca95154fd465 blob   108 141 16281 7 633de7a70fe29cecb721bb5033573fbf175b31fc
df4c5c8e8e25621bba74f233d59c76e5810f8677 blob   108 141 16422 8 76db9ca0f1afa9c247d4c5a2fe60ca95154fd465
9fc4cce844af6ed26932eb84045df0ab4a79f0b7 blob   108 141 16563 9 df4c5c8e8e25621bba74f233d59c76e5810f8677
ef3ddda4c2922f10089dfed6436267b445d5b118 blob   300 313 16704
1bdedd473270eef5c2c67c968ba1d5ee081013ee blob   108 141 17017 1 ef3ddda4c2922f10089dfed6436267b445d5b118
9d28c1ea0790ee28b8c35bc3fe88629980708730 blob   108 141 17158 2 1bdedd473270eef5c2c67c968ba1d5ee081013ee
a3264a35996ccaf722f869be8e379864e28ef561 blob   108 141 17299 3 9d28c1ea0790ee28b8c35bc3fe88629980708730
cd6f1b15bb20b9c706f8f80c77b7c210921f0b26 blob   108 141 17440 4 a3264a35996ccaf722f869be8e379864e28ef561
60601746c22df38cc0bcbce68f359fb2796d7569 blob   108 141 17581 5 cd6f1b15bb20b9c706f8f80c77b7c210921f0b26
f15a3f5dae93709cce491d407dad343f9577d8c5 blob   108 141 17722 6 60601746c22df38cc0bcbce68f359fb2796d7569
5dd384bbc7186571a9cccdba2ebaa794e87bfbdd blob   108 141 17863 7 f15a3f5dae93709cce491d407dad343f9577d8c5
d18475904b78554f1fd6f96b4c1ad44e84edf873 blob   108 141 18004 8 5dd384bbc7186571a9cccdba2ebaa794e87bfbdd
67728c76be3b7d5319ff2a93fc78aca0ff3824eb blob   108 141 18145 9 d18475904b78554f1fd6f96b4c1ad44e84edf873
c1ec14f204e244f32aa93c66e3fb6a7d4f58c081 blob   300 313 18286
258424ed6e5c4377a2aa55fb6d4818a3580291ad blob   108 141 18599 1 c1ec14f204e244f32aa93c66e3fb6a7d4f58c081
fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2 blob   108 141 18740 2 258424ed6e5c4377a2aa55fb6d4818a3580291ad
e1bfca166c2ff676f665fd3c58d7dea896ec48d7 blob   108 141 18881 3 fcaa7a21cb9d0b0aa84d2cbac5115d7c300739a2
383c3c67e93cfd05d272b187e3af5c1e00bcae5c blob   108 141 19022 4 e1bfca166c2ff676f665fd3c58d7dea896ec48d7
ad6a3267a9e0d49014eec133a5e968315e8ce834 blob   108 141 19163 5 383c3c67e93cfd05d272b187e3af5c1e00bcae5c
9dfc592085bb14371890b41e48c98b220420669b blob   108 141 19304 6 ad6a3267a9e0d49014eec133a5e968315e8ce834
c872afc7539f689178b7385010010ca7aef8f09a blob   108 141 19445 7 9dfc592085bb14371890b41e48c98b220420669b
1bc038b18c5039a05e173da2fd2b65b3d34ccd2b blob   108 141 19586 8 c872afc7539f689178b7385010010ca7aef8f09a
bdd7bd883f75c1726538851757168dc0dc33e222 blob   108 141 19727 9 1bc038b18c5039a05e173da2fd2b65b3d34ccd2b
71529d6ca58922aa05603b6f2784f87cad8703cf blob   300 313 19868
2bebfa6240e319a1c31951d05c8135f089fbbd29 blob   108 141 20181 1 71529d6ca58922aa05603b6f2784f87cad8703cf
83fcb919ae7bc9a80912c9bfd5731acd36666480 blob   108 141 20322 2 2bebfa6240e319a1c31951d05c8135f089fbbd29
b97506df40bbd212b52062b851cd88f04abb59b3 blob   108 141 20463 3 83fcb919ae7bc9a80912c9bfd5731acd36666480
298dc4942c3b3db53d484ffa86b451755cd2125f blob   108 141 20604 4 b97506df40bbd212b52062b851cd88f04abb59b3
ba11c807afc9699e7ea1cab791699bfd698c7e7d blob   108 141 20745 5 298dc4942c3b3db53d484ffa86b451755cd2125f
b1281e620292c2e74d8770eb99f0b6871e4cca59 blob   108 141 20886 6 ba11c807afc9699e7ea1cab791699bfd698c7e7d
368cd4d02a420764e0d31b35576f73b777c34604 blob   108 141 21027 7 b1281e620292c2e74d8770eb99f0b6871e4cca59
16d1323e84e3d5b058ab2ac8245db85bc4606c88 blob   108 141 21168 8 368cd4d02a420764e0d31b35576f73b777c34604
711d5e6b0d21b3aa205dcc960ec51475be8a25a5 blob   108 141 21309 9 16d1323e84e3d5b058ab2ac8245db85bc4606c88
d174d532539487c9aedbbaf38d556061b5acf826 blob   300 313 21450
bf5dcb9013df15ff0ae10e0682a92a7688a7720b blob   108 141 21763 1 d174d532539487c9aedbbaf38d556061b5acf826
fb214b786310655bc8ee46d89ca9a04ec9aed0c3 blob   108 141 21904 2 bf5dcb9013df15ff0ae10e0682a92a7688a7720b
b94140f4006d05e7e3822f5db19adc2b73a2cc05 blob   108 141 22045 3 fb214b786310655bc8ee46d89ca9a04ec9aed0c3
4019b50c838197ca4b8d664a4164a183cac8ad11 blob   108 141 22186 4 b94140f4006d05e7e3822f5db19adc2b73a2cc05
2826157afde0e74742115842ac2dddf5c3b5e23e blob   108 141 22327 5 4019b50c838197ca4b8d664a4164a183cac8ad11
99556fcde6a0be62a72c8b0c6682576a1d596bea blob   108 141 22468 6 2826157afde0e74742115842ac2dddf5c3b5e23e
8f5e7974c287b07f1cf8116485c4135340b807f3 blob   108 141 22609 7 99556fcde6a0be62a72c8b0c6682576a1d596bea
f9982291dfe87a9def1b12d24f9ca9a024a9dd8e blob   108 141 22750 8 8f5e7974c287b07f1cf8116485c4135340b807f3
3c5c0be699798d2f4fbe651051b9f17156f133c1 blob   108 141 22891 9 f9982291dfe87a9def1b12d24f9ca9a024a9dd8e
1297547aab30f952af805d38f6f1c1930cb3117b blob   8196 8210 23032
862f6954d9afd549b48fa2ef8e2f8ab96e309916 blob   8196 8210 31242
0471b3b8ab8da19f3968dc238e9555f4e48ce858 blob   8196 8210 39452
c80092496b80b5f21503b8c838dccfc1f2e2ddde blob   8196 8210 47662
e5a12c79cec70d52817054c4b9ef321003c6755f blob   8196 8210 55872
bf96a31446f37d8e57bb38a00797aa3af1f99370 blob   8196 8210 64082
0508b858e01f0367552fb14722388ba48dbd36f7 blob   8196 8210 72292
359017d1534767455090901a260985de1658d752 blob   8196 8210 80502
8d06001a3d38390afa66576caa6c55c796e33835 blob   8196 8210 88712
8162ceb825c07e3b1e17f5775665085da9b1e855 blob   8196 8210 96922
6910c5a645c9fe7f6b728034566b1668f0677a8e blob   8196 8210 105132
09ba511a995b8ea75067036d5c046f39052a3bd8 blob   8196 8210 113342
f45d142313c7a5270a60c664bb463cddadc467c1 blob   8196 8210 121552
964e51bf7d344bda71ea5e12dbd7bfb90120fcf0 blob   8196 8210 129762
408dd031138139f6ac6f402988f960527871f71a blob   8196 8210 137972
912fa0ec5536f31122e34577a4baf3b22d40de2a blob   8196 8210 146182
f02359c44ca04a542cc5bf59aa5f1de6cd1d5a4c blob   8196 8210 154392
b0566dd5d479c80c278bd5455c92aca689328471 blob   8196 8210 162602
49d17d605f042c1e978a68f625be6ab6294fa8fa blob   8196 8210 170812
8f744480abe8ad05bc419d1ab2e375b9c0fa3978 blob   8196 8210 179022
fff3a3a92d2268a464dbdcd00fc055885ee3cba9 blob   8196 8210 187232
f5fc0ff4afc14d9dfcb2580d3f438edd4cd8130a blob   8196 8210 195442
01179d82b18c252824e20e190543e0e84950d820 blob   8196 8210 203652
de3ed457f973b7ffb20edc36002c47a6e4b41066 blob   8196 8210 211862
9c4e1f8c16d04d90a2217279240996276d617067 blob   8196 8210 220072
816f18d19f433f5df9edbfb5547684b519fdeb3b blob   8196 8210 228282
72e7428e5ee3797ca0bf955f723b915bee919c48 blob   8196 8210 236492
41adb5af8e7f9737b16261fb0c224c7550c82f23 blob   8196 8210 244702
94f5d368a7c4ea294c463dc45cf15d387fa83c4e blob   8196 8210 252912
85fdf2eed169dbc1fe2d71439b589b0326dad12b blob   8196 8210 261122
bab18d872e9183c6d450b326477205bb0cc081cb blob   8196 8210 269332
b31fb3fb181512bc608b58cb33323d97ad6eac2f blob   8196 8210 277542
20a9519106ab64bf043456a58b6bfb04f1c7b39d blob   8196 8210 285752
94a015b2b6053f7a1d541969919e879bb2b75eef blob   8196 8210 293962
7353550b9b0e1da4f68b9484dfad2634100a00cc blob   8196 8210 302172
e28a360bcbd69ca1a0bb47834e640069c6672a8d blob   8196 8210 310382
8e6ffc05856460c2e08c8e9d824bbf510d3c1b52 blob   8196 8210 318592
ceade5760b1ba0bc11d4e4db6982ddf671495e58 blob   8196 8210 326802
92534f38b94c1da321d88c9ab5af8c3e804c2507 blob   8196 8210 335012
f5577acbfd83dddf90b2054d6cb5dce2df6d06ee blob   8196 8210 343222
59a27076dc0a8989215a160d61ac401e41c05126 blob   8196 8210 351432
2db6b919f253444b5437d8251e5d101d5a34e1b3 blob   8196 8210 359642
c1c35c36d4300da28c0570746adaf2f5b0b015a3 blob   8196 8210 367852
03a6f56dbbb556425ef8c43c31519b32eb5629a4 blob   8196 8210 376062
dd6209d4c0c5d4f210a8d1bb4a4d314cf284dea9 blob   8196 8210 384272
8c04fa425f4dfb4555b376e73d8f28d56b97a569 blob   8196 8210 392482
614e235cd8ca8af7ccf402a92eb34baadaaa3f18 blob   8196 8210 400692
b2f07ee5771d9e0de7166bc72a4a7ebce9830779 blob   8196 8210 408902
852ba0cf084474c1b0b48052606ae27346a5b1a1 blob   8196 8210 417112
15ff79f644a0596529eba0592017dce39e222b8e blob   8196 8210 425322
75f67c0c230f8923db5831094b1cc67f61bf1734 blob   8196 8210 433532
95b51158cd6365da9b10f1d8b06ba76dc5d5c5f1 blob   8196 8210 441742
5217ce416b26a3d76191d873490110746d0e8a04 blob   8196 8210 449952
c16eb68827fa5d6da73b320b431cf736c7a6a4af blob   8196 8210 458162
57983aab7f7384626a6a1f9ec08fba1902dd11e5 blob   8196 8210 466372
84e4d2ce637781776791c8e2cf4a9312a2783ceb blob   8196 8210 474582
2175a1a9d8757b3836f5cc44c6af0297aea36709 blob   8196 8210 482792
9b655d54faaf0a737a03731852f27cf6b552bcaf blob   8196 8210 491002
a3233ba1323f07a0d68f6020e7209025819cfa13 blob   8196 8210 499212
5a65a213ee0ebdc285c8e8eca24e9eda97f8a384 blob   8196 8210 507422
de1679ebb44d3fe59e8d2378471b56db384fb181 blob   8196 8210 515632
d2e455cc03081911f9ecd81245becd858d1e64ca blob   8196 8210 523842
72826d3e97bc228616e06235566a0db59c94bd74 blob   8196 8210 532052
debe389b3bdd62d96748db592e99cb0cc7b1b0f2 blob   8196 8210 540262
e572e59eee8119f8fb58e8595ecd0c622f2d6e29 blob   8196 8210 548472
197f45d948a36ac3762e5daf6ef4d43a5d969503 blob   8196 8210 556682
fb294d29a9d045d5a46a9c00e53777b394ceb346 blob   8196 8210 564892
10f7133774acbc162f5f79804744d64747eee380 blob   8196 8210 573102
16b9dea85eab6d7e452bdea4889e24a8ad79afd5 blob   8196 8210 581312
08a8cf223e5dc57504da3cd8eb56d33f276dc1b9 blob   8196 8210 589522
e3332ff9a2540b45e599be0c7bca8bbe28af2b43 blob   8196 8210 597732
5e1b961ae623672df764f64b737f332318d43baa blob   8196 8210 605942
14caba1bc2835573f3c20b7f2e5fb638a08e12ee blob   8196 8210 614152
84d1369c26d187b24dffe9029e81e119e4a374f5 blob   8196 8210 622362
5ef3a0f4954ade2d5c290ccc4d791c3b219d89ea blob   8196 8210 630572
610d16151ceb1dc4d5138f63ed410819a8b9161c blob   8196 8210 638782
3545eb1f5549261267ab0577b94372e88b49731d blob   8196 8210 646992
0d6e5c0388744cf82463ce1283ff99e863e9b26e blob   8196 8210 655202
611261b75bd720d3433ea8975d555b1ac3e692bd blob   8196 8210 663412
e25dc2ac80f9f78aa2809b5cd254ce47a51efbe5 blob   8196 8210 671622
ea5a4b4fed0bab7beffd3c7fc6cc549df47017d7 blob   8196 8210 679832
d68756996794df8c00dfcbf520662b14cb06958e blob   8196 8210 688042
b5b44a475116c2d0054edf54c699909d5d583aac blob   8196 8210 696252
99ff18078623c32b85a49cc8a03e3c58ee94eecb blob   8196 8210 704462
159fdc73e63cf90624d128d87b8185154727714e blob   8196 8210 712672
1f0ca97497381a196e53a7639ee769ed019469a3 blob   8196 8210 720882
6dbed45fde708bb67e6b21bd55976483305f9e74 blob   8196 8210 729092
b5ec32ad29b65e5742cd1857d17e92c2efc5da96 blob   8196 8210 737302
cf823d111604e8a014e0702b5e15b242bb961c78 blob   8196 8210 745512
72528baaeeba0d9c01da36a7a0add1ac49d860f2 blob   8196 8210 753722
b976a8fd346486d78cdebeaa0b0ac200befca629 blob   8196 8210 761932
e652cd97e9aae1523d892c1f417274dd26c3bcd3 blob   8196 8210 770142
aa82432626cc08fb818a20aa62b607aa52e7b35d blob   8196 8210 778352
d67069815168092ee0eadeab8177002bd0376b6f blob   8196 8210 786562
fa7ca115eb82e14f0263990362d4fc27591e1143 blob   8196 8210 794772
5cadb04c4d4ec953dffc528bf75561a6ae1c5820 blob   8196 8210 802982
a769ce6dfe1abe1b6162627b2b5df89f4f7d4317 blob   8196 8210 811192
bf265906aab0df90b6a4bdb1fe6f8088a9038435 blob   8196 8210 819402
b302b77fd5595784b5e85e91f8b4314fff49a6a1 blob   8196 8210 827612
3927444e44b49dfa6cdc768298ae879ec298c45d blob   8196 8210 835822
51e0bb44b17501c6803ca30f299ad8e69b21c8c4 blob   12 41 844032 1 b302b77fd5595784b5e85e91f8b4314fff49a6a1
34a68de99f94f6f9e437a288349602768eae4b92 blob   250 263 844073
8517d36660dffb896fb4e283ad110023aaebaf1b blob   57 90 844336 1 34a68de99f94f6f9e437a288349602768eae4b92
e3fc6633c069c8e246d77a408e4747c2852ba44a blob   57 90 844426 1 34a68de99f94f6f9e437a288349602768eae4b92
37a071e55d1f2e07af146ca6017d98dd85beae68 blob   57 90 844516 1 34a68de99f94f6f9e437a288349602768eae4b92
a8179a233b7aeeb7a450c5d321d4b73df936b64b blob   57 90 844606 1 34a68de99f94f6f9e437a288349602768eae4b92
99e0b239888c8b71671fb948e41111876e61a3c2 blob   57 90 844696 1 34a68de99f94f6f9e437a288349602768eae4b92
e26e04b4786bf6b0ec3c5d528e7002cd58e2401b blob   57 90 844786 1 34a68de99f94f6f9e437a288349602768eae4b92
a6106f10ea80724dbc32b328d9892111589a2111 blob   57 90 844876 1 34a68de99f94f6f9e437a288349602768eae4b92
d1669a170780865ccd7645211c2e1cebdfb28aad blob   57 90 844966 1 34a68de99f94f6f9e437a288349602768eae4b92
53a19e0c2c34ef1a4e1bbc9aa1cba4cb9bc2dd80 blob   57 90 845056 1 34a68de99f94f6f9e437a288349602768eae4b92
26ff29a62e7a6359d3975813fd645af871576125 blob   57 90 845146 1 34a68de99f94f6f9e437a288349602768eae4b92
c1d6b9953613f5732cd40d8cffbb2b746a71fb92 blob   57 90 845236 1 34a68de99f94f6f9e437a288349602768eae4b92
a2bfcc19d1592c43af33617500394e1ac09e968c blob   57 90 845326 1 34a68de99f94f6f9e437a288349602768eae4b92
36c0479c58cef0b9a10b56934ed42a862e1dcfe2 blob   57 90 845416 1 34a68de99f94f6f9e437a288349602768eae4b92
642aa265517d66c88f030a2230eb97e77c973905 blob   57 90 845506 1 34a68de99f94f6f9e437a288349602768eae4b92
29cd4721cd3cef7f5a2e032d6c2d6908427cd5af blob   57 90 845596 1 34a68de99f94f6f9e437a288349602768eae4b92
ae5ccb1578fbc399571f4f0132edd18c55b19ef0 blob   57 90 845686 1 34a68de99f94f6f9e437a288349602768eae4b92
d22feecdd32e57af8fd88bda0fbde8fbb96d4f1c blob   57 90 845776 1 34a68de99f94f6f9e437a288349602768eae4b92
ab2acc4bd273e799b56effc7e208a01814432ba5 blob   57 90 845866 1 34a68de99f94f6f9e437a288349602768eae4b92
2d5f83c6857691045da554091b8f2d82477d9baf blob   57 90 845956 1 34a68de99f94f6f9e437a288349602768eae4b92
fac99cd6f9219ee888b9382ee44a3b7932723b12 blob   57 90 846046 1 34a68de99f94f6f9e437a288349602768eae4b92
b32b0ed27f34e4a9d7c4aab24dfa2d6c51b1c2eb blob   57 90 846136 1 34a68de99f94f6f9e437a288349602768eae4b92
a3f38fbdbe8f34acc61f3a325104e739a875a4b6 blob   57 90 846226 1 34a68de99f94f6f9e437a288349602768eae4b92
6bc5c86eeb3dfcc3ca2343e39cc91dec35ddc90b blob   57 90 846316 1 34a68de99f94f6f9e437a288349602768eae4b92
38897be9103dbc6aff7d1ecd15c1dc6c6d18b0a7 blob   57 90 846406 1 34a68de99f94f6f9e437a288349602768eae4b92
69e0b8ef8cda369575b6801c6ed47daf09aa3c62 blob   57 90 846496 1 34a68de99f94f6f9e437a288349602768eae4b92
c3e6c8cf465113a74926f3d5c73a3b400970643c blob   57 90 846586 1 34a68de99f94f6f9e437a288349602768eae4b92
a31a03a60bad0896133e6e52982da2e7e22832ff blob   57 90 846676 1 34a68de99f94f6f9e437a288349602768eae4b92
735fe835bee0cfa2d7ecc2f195c22de3e7b208b3 blob   57 90 846766 1 34a68de99f94f6f9e437a288349602768eae4b92
84705bfd7a24eb59137fdc26c070c4329eee46a7 blob   57 90 846856 1 34a68de99f94f6f9e437a288349602768eae4b92
5090e761c398db8c0b3fe1c0069535c3b7a9a575 blob   57 90 846946 1 34a68de99f94f6f9e437a288349602768eae4b92
c5c8cc3525a17842c2e668d1499c7c2518202a87 blob   57 90 847036 1 34a68de99f94f6f9e437a288349602768eae4b92
441d41902c4ccb987a866663ebbcc729fbcc4072 blob   57 90 847126 1 34a68de99f94f6f9e437a288349602768eae4b92
55bc16727ba8a63a31eabd811cfc740dc423bab6 blob   57 90 847216 1 34a68de99f94f6f9e437a288349602768eae4b92
86c6bd761eacb8a021246263994bf02d1163c7b5 blob   57 90 847306 1 34a68de99f94f6f9e437a288349602768eae4b92
8812057b6f2583732f83db5bac543549cc621783 blob   57 90 847396 1 34a68de99f94f6f9e437a288349602768eae4b92
c8043aaa6a70318be94ef87be98ea2c7de7f23f5 blob   57 90 847486 1 34a68de99f94f6f9e437a288349602768eae4b92
9d48f3c2e700d81fbe46fbccc400bedc8666221a blob   57 90 847576 1 34a68de99f94f6f9e437a288349602768eae4b92
fd68f118bfc99562e08bd153a3f1c604f1ac0124 blob   57 90 847666 1 34a68de99f94f6f9e437a288349602768eae4b92
879bc6e196323012740d55b1e5bbd9937632ecf3 blob   57 90 847756 1 34a68de99f94f6f9e437a288349602768eae4b92
a3ed4b758faeca44e89792c3f1b0536b685d0552 blob   57 90 847846 1 34a68de99f94f6f9e437a288349602768eae4b92
d9dd72f666a9d30dee5cdd894ca365a82e965594 blob   57 90 847936 1 34a68de99f94f6f9e437a288349602768eae4b92
088ddcb945af72c47348b65a63992c71b6b9dbe8 blob   57 90 848026 1 34a68de99f94f6f9e437a288349602768eae4b92
9e7b55d50c530d08c120379e19bb1c1653bb3063 blob   57 90 848116 1 34a68de99f94f6f9e437a288349602768eae4b92
2dfd9df0b22049f88e22ae86e4370155ecb23271 blob   57 90 848206 1 34a68de99f94f6f9e437a288349602768eae4b92
9de2bb387fc8bf63dbc7a68cb22b9e8439896326 blob   57 90 848296 1 34a68de99f94f6f9e437a288349602768eae4b92
a7eacc2c62dfd538c2948cce08cd217cc72a7140 blob   57 90 848386 1 34a68de99f94f6f9e437a288349602768eae4b92
291b2d8c01a9bc50bc4605bc479a183193de2e45 blob   57 90 848476 1 34a68de99f94f6f9e437a288349602768eae4b92
464adf43722b49bca34d8727d70db33c9ec70097 blob   57 90 848566 1 34a68de99f94f6f9e437a288349602768eae4b92
aa6095774c04683081cad47f300324a88ea95f2e blob   57 90 848656 1 34a68de99f94f6f9e437a288349602768eae4b92
896562b116d22c48f8872854123c523b76928061 blob   57 90 848746 1 34a68de99f94f6f9e437a288349602768eae4b92
f01eb69ea9caabb9fe801ef0f1bfdfa4477e0e34 blob   57 90 848836 1 34a68de99f94f6f9e437a288349602768eae4b92
d8603740ffe28d592c9d10ae2d6ec9dd0cf71949 blob   57 90 848926 1 34a68de99f94f6f9e437a288349602768eae4b92
8eb88090ce51c8ce838b12302c761bbf806c3fcc blob   57 90 849016 1 34a68de99f94f6f9e437a288349602768eae4b92
e961d288a95c209fe01ba42f01a18605eb5a85d3 blob   57 90 849106 1 34a68de99f94f6f9e437a288349602768eae4b92
abd14d13fada2545825fdf71c5d4a22ebb60f697 blob   57 90 849196 1 34a68de99f94f6f9e437a288349602768eae4b92
6a54ffedf41f419c66f6cd734a27ec5968f79b5a blob   57 90 849286 1 34a68de99f94f6f9e437a288349602768eae4b92
b6fa6c3c025c4f875c78423ab993a9349cd964c5 blob   57 90 849376 1 34a68de99f94f6f9e437a288349602768eae4b92
088e69e7ab273e35b4f63ecb1b915a3997f13dff blob   57 90 849466 1 34a68de99f94f6f9e437a288349602768eae4b92
609652080c31409406c828cb996e41fa6a286654 blob   57 90 849556 1 34a68de99f94f6f9e437a288349602768eae4b92
90d3d9b65a2f0c939f45a86f65192846e8066e7f blob   57 90 849646 1 34a68de99f94f6f9e437a288349602768eae4b92
05b4f18d9841f7abb271e81accadea31c5416a71 blob   57 90 849736 1 34a68de99f94f6f9e437a288349602768eae4b92
cfdd1e216211554d586bb3be233190457c5f5c0d blob   57 90 849826 1 34a68de99f94f6f9e437a288349602768eae4b92
73375ca0591d6c17f37b9f287a7c19f368fc644f blob   57 90 849916 1 34a68de99f94f6f9e437a288349602768eae4b92
46cd94a7854b7360f8f8a7e637e2575e707f7b04 blob   57 90 850006 1 34a68de99f94f6f9e437a288349602768eae4b92
ec35852188f9e88aa67849934b0c50bd698fafef blob   57 90 850096 1 34a68de99f94f6f9e437a288349602768eae4b92
0106e17481932f5c223fafadc1d26abc6adf40d6 blob   57 90 850186 1 34a68de99f94f6f9e437a288349602768eae4b92
f846f988e45d97ac0163885e65920643f0029922 blob   57 90 850276 1 34a68de99f94f6f9e437a288349602768eae4b92
636d415b097ff0c103e63d09d96aeb07fdad2045 blob   57 90 850366 1 34a68de99f94f6f9e437a288349602768eae4b92
497017bb8901086d3120553a384f3500ceb86f2e blob   57 90 850456 1 34a68de99f94f6f9e437a288349602768eae4b92
c50bc0b26b2336dbe90b9c7bdaa8d4cfb8f65638 blob   57 90 850546 1 34a68de99f94f6f9e437a288349602768eae4b92
921538e73389e99e294938d8580ababdb639f140 blob   57 90 850636 1 34a68de99f94f6f9e437a288349602768eae4b92
9ede1b01ec1751bf9ca9d5845ac005edc6935601 blob   57 90 850726 1 34a68de99f94f6f9e437a288349602768eae4b92
1ba5df91f11a1011f4788bc4cc067743828dda41 blob   57 90 850816 1 34a68de99f94f6f9e437a288349602768eae4b92
188728c24ca8cf687133dd0a5782e8819cee10a6 blob   57 90 850906 1 34a68de99f94f6f9e437a288349602768eae4b92
cb0d0270d7c50e33aacd9a4247333622c62846a4 blob   57 90 850996 1 34a68de99f94f6f9e437a288349602768eae4b92
dd39ffatal: sha1 file 'test-4-48a1956df258ba8b8a12e47466ef8e10ada5d680.idx' validation error
8544a79066c925baca19ddc02623970efd1 blob   57 90 851086 1 34a68de99f94f6f9e437a288349602768eae4b92
d0b35a20e2ffaa46d895d6296f555dd98956d536 blob   57 90 851176 1 34a68de99f94f6f9e437a288349602768eae4b92
ae274e8cd31f35d743e68b3c8420e604386fc514 blob   57 90 851266 1 34a68de99f94f6f9e437a288349602768eae4b92
d1ede5db04b30c10d395c13dec020c90320498b8 blob   57 90 851356 1 34a68de99f94f6f9e437a288349602768eae4b92
2adace6c3082b12f42112482372696d66c36e4ae blob   57 90 851446 1 34a68de99f94f6f9e437a288349602768eae4b92
035e7e54cee9eb197af435b6b6dcced489c233f6 blob   57 90 851536 1 34a68de99f94f6f9e437a288349602768eae4b92
74aced6a3316fd8d726932ed908b035cd33afef6 blob   57 90 851626 1 34a68de99f94f6f9e437a288349602768eae4b92
efbbfa01b16e997301bb440aad9c885321bb13d2 blob   57 90 851716 1 34a68de99f94f6f9e437a288349602768eae4b92
92433746fe3340a5d4bc3f5487545f5167eaeaad blob   57 90 851806 1 34a68de99f94f6f9e437a288349602768eae4b92
da7b351a2560fd44fe89fc6288c3efa72eace9eb blob   57 90 851896 1 34a68de99f94f6f9e437a288349602768eae4b92
63176d3a0ae88aee86fa1b2b4390ed0850e67a9b blob   57 90 851986 1 34a68de99f94f6f9e437a288349602768eae4b92
5e10cf16f2bf33110cf59f53d583527d676820e1 blob   57 90 852076 1 34a68de99f94f6f9e437a288349602768eae4b92
aeb87caeb18972ad237d4c5628bfedb2dca51d47 blob   57 90 852166 1 34a68de99f94f6f9e437a288349602768eae4b92
141df301ab1d7f9e40b90fb4435ec4ac40ae544d blob   57 90 852256 1 34a68de99f94f6f9e437a288349602768eae4b92
e7172196f3fd2742cbe382daa02fd9641b9f6ffb blob   57 90 852346 1 34a68de99f94f6f9e437a288349602768eae4b92
4e78d6c905bc6d0c06ad066400f0570a391f9385 blob   57 90 852436 1 34a68de99f94f6f9e437a288349602768eae4b92
c096ccf827c047c3a20cfb1dd3fd5b0485ec2a0b blob   57 90 852526 1 34a68de99f94f6f9e437a288349602768eae4b92
91c4bc3b3c200535d88f76e9e3566658cb7b2bfd blob   57 90 852616 1 34a68de99f94f6f9e437a288349602768eae4b92
0b7888c3e508fe256fe859ba46c77d100abbce3f blob   57 90 852706 1 34a68de99f94f6f9e437a288349602768eae4b92
36cfe418f3038689cd47b64845c6f24886f9ec73 blob   57 90 852796 1 34a68de99f94f6f9e437a288349602768eae4b92
54c9d6ab199e99bdbba483ef1287e0cc31fc84b3 blob   57 90 852886 1 34a68de99f94f6f9e437a288349602768eae4b92
8b64b7aafc16c177bcc58813c7a853f622feb10f blob   57 90 852976 1 34a68de99f94f6f9e437a288349602768eae4b92
6ff2ccef89b04f0539f51c0ffcbe5f7bcf108ced blob   57 90 853066 1 34a68de99f94f6f9e437a288349602768eae4b92
7b419ded53760b5dbe136c1ec83ef3f338fab544 blob   57 90 853156 1 34a68de99f94f6f9e437a288349602768eae4b92
non delta: 112 objects
chain length = 1: 110 objects
chain length = 2: 10 objects
chain length = 3: 10 objects
chain length = 4: 10 objects
chain length = 5: 10 objects
chain length = 6: 10 objects
chain length = 7: 10 objects
chain length = 8: 10 objects
chain length = 9: 10 objects
test-4-48a1956df258ba8b8a12e47466ef8e10ada5d680.pack: bad
ok 24 - [index v1] 6) newly created pack is BAD !

expecting success of 5302.25 '[index v2] 1) stream pack to repository': 
	rm -f .git/objects/pack/* &&
	git index-pack --index-version=2 --stdin < "test-1-${pack1}.pack" &&
	git prune-packed &&
	git count-objects | ( read nr rest && test "$nr" -eq 1 ) &&
	cmp "test-1-${pack1}.pack" ".git/objects/pack/pack-${pack1}.pack" &&
	cmp "test-2-${pack1}.idx"	".git/objects/pack/pack-${pack1}.idx"

pack	1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 25 - [index v2] 1) stream pack to repository

expecting success of 5302.26 '[index v2] 2) create a stealth corruption in a delta base reference': 
	# This test assumes file_101 is a delta smaller than 16 bytes.
	# It should be against file_100 but we substitute its base for file_099
	sha1_101=$(git hash-object file_101) &&
	sha1_099=$(git hash-object file_099) &&
	offs_101=$(index_obj_offset 1.idx $sha1_101) &&
	nr_099=$(index_obj_nr 1.idx $sha1_099) &&
	chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
	dd of=".git/objects/pack/pack-${pack1}.pack" seek=$(($offs_101 + 1)) \
		if=".git/objects/pack/pack-${pack1}.idx" \
		skip=$((8 + 256 * 4 + $nr_099 * rawsz)) \
		bs=1 count=$rawsz conv=notrunc &&
	git cat-file blob $sha1_101 > file_101_foo2

20+0 records in
20+0 records out
20 bytes copied, 0.17367 s, 0.1 kB/s
ok 26 - [index v2] 2) create a stealth corruption in a delta base reference

expecting success of 5302.27 '[index v2] 3) corrupted delta happily returned wrong data': 
	test -f file_101_foo2 && ! cmp file_101 file_101_foo2

file_101 file_101_foo2 differ: char 5, line 2
ok 27 - [index v2] 3) corrupted delta happily returned wrong data

expecting success of 5302.28 '[index v2] 4) confirm that the pack is actually corrupted': 
	test_must_fail git fsck --full $commit

error: .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack pack checksum mismatch
error: index CRC mismatch for object 0b968294884af115eb5a1b941b3dabd48470c3bb from .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack at offset 844032
error: packed 0b968294884af115eb5a1b941b3dabd48470c3bb from .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack is corrupt
ok 28 - [index v2] 4) confirm that the pack is actually corrupted

expecting success of 5302.29 '[index v2] 5) pack-objects refuses to reuse corrupted data': 
	test_must_fail git pack-objects test-5 <obj-list &&
	test_must_fail git pack-objects --no-reuse-object test-6 <obj-list

error: bad packed object CRC for 0b968294884af115eb5a1b941b3dabd48470c3bb
error: bad packed object CRC for 0b968294884af115eb5a1b941b3dabd48470c3bb
fatal: packed object 0b968294884af115eb5a1b941b3dabd48470c3bb (stored in .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack) is corrupt
error: bad packed object CRC for 0b968294884af115eb5a1b941b3dabd48470c3bb
fatal: packed object 0b968294884af115eb5a1b941b3dabd48470c3bb (stored in .git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.pack) is corrupt
ok 29 - [index v2] 5) pack-objects refuses to reuse corrupted data

expecting success of 5302.30 '[index v2] 6) verify-pack detects CRC mismatch': 
	rm -f .git/objects/pack/* &&
	git index-pack --index-version=2 --stdin < "test-1-${pack1}.pack" &&
	git verify-pack ".git/objects/pack/pack-${pack1}.pack" &&
	obj=$(git hash-object file_001) &&
	nr=$(index_obj_nr ".git/objects/pack/pack-${pack1}.idx" $obj) &&
	chmod +w ".git/objects/pack/pack-${pack1}.idx" &&
	printf xxxx | dd of=".git/objects/pack/pack-${pack1}.idx" conv=notrunc \
		bs=1 count=4 seek=$((8 + 256 * 4 + $(wc -l <obj-list) * rawsz + $nr * 4)) &&
	 ( while read obj
	   do git cat-file -p $obj >/dev/null || exit 1
	   done <obj-list ) &&
	test_must_fail git verify-pack ".git/objects/pack/pack-${pack1}.pack"

pack	1c54d893dd9bf6645ecee2886ea72f2c2030bea1
4+0 records in
4+0 records out
4 bytes copied, 0.000825697 s, 4.8 kB/s
fatal: sha1 file '.git/objects/pack/pack-1c54d893dd9bf6645ecee2886ea72f2c2030bea1.idx' validation error
ok 30 - [index v2] 6) verify-pack detects CRC mismatch

expecting success of 5302.31 'running index-pack in the object store': 
	rm -f .git/objects/pack/* &&
	cp test-1-${pack1}.pack .git/objects/pack/pack-${pack1}.pack &&
	(
		cd .git/objects/pack &&
		git index-pack pack-${pack1}.pack
	) &&
	test -f .git/objects/pack/pack-${pack1}.idx

1c54d893dd9bf6645ecee2886ea72f2c2030bea1
ok 31 - running index-pack in the object store

expecting success of 5302.32 'index-pack --strict warns upon missing tagger in tag': 
	sha=$(git rev-parse HEAD) &&
	cat >wrong-tag <<EOF &&
object $sha
type commit
tag guten tag

This is an invalid tag.
EOF

	tag=$(git hash-object -t tag -w --stdin <wrong-tag) &&
	pack1=$(echo $tag $sha | git pack-objects tag-test) &&
	echo remove tag object &&
	thirtyeight=${tag#??} &&
	rm -f .git/objects/${tag%$thirtyeight}/$thirtyeight &&
	git index-pack --strict tag-test-${pack1}.pack 2>err &&
	grep "^warning:.* expected .tagger. line" err

remove tag object
67765b8cc9b2d3d6ffa408695798db10a387e826
warning: object 954f1fc56e5be955c7818ab69b20a3374f351d82: missingTaggerEntry: invalid format - expected 'tagger' line
ok 32 - index-pack --strict warns upon missing tagger in tag

expecting success of 5302.33 'index-pack --fsck-objects also warns upon missing tagger in tag': 
	git index-pack --fsck-objects tag-test-${pack1}.pack 2>err &&
	grep "^warning:.* expected .tagger. line" err

67765b8cc9b2d3d6ffa408695798db10a387e826
warning: object 954f1fc56e5be955c7818ab69b20a3374f351d82: missingTaggerEntry: invalid format - expected 'tagger' line
ok 33 - index-pack --fsck-objects also warns upon missing tagger in tag

expecting success of 5302.34 'index-pack -v --stdin produces progress for both phases': 
	pack=$(git pack-objects --all pack </dev/null) &&
	GIT_PROGRESS_DELAY=0 git index-pack -v --stdin <pack-$pack.pack 2>err &&
	test_i18ngrep "Receiving objects" err &&
	test_i18ngrep "Resolving deltas" err

pack	37e69ad54edf78401749c7eaf0410858eb6a64ba
Receiving objects:   0% (1/303)
Receiving objects:   1% (4/303)
Receiving objects:   2% (7/303)
Receiving objects:   3% (10/303)
Receiving objects:   4% (13/303)
Receiving objects:   5% (16/303)
Receiving objects:   6% (19/303)
Receiving objects:   7% (22/303)
Receiving objects:   8% (25/303)
Receiving objects:   9% (28/303)
Receiving objects:  10% (31/303)
Receiving objects:  11% (34/303)
Receiving objects:  12% (37/303)
Receiving objects:  13% (40/303)
Receiving objects:  14% (43/303)
Receiving objects:  15% (46/303)
Receiving objects:  16% (49/303)
Receiving objects:  17% (52/303)
Receiving objects:  18% (55/303)
Receiving objects:  19% (58/303)
Receiving objects:  20% (61/303)
Receiving objects:  21% (64/303)
Receiving objects:  22% (67/303)
Receiving objects:  23% (70/303)
Receiving objects:  24% (73/303)
Receiving objects:  25% (76/303)
Receiving objects:  26% (79/303)
Receiving objects:  27% (82/303)
Receiving objects:  28% (85/303)
Receiving objects:  29% (88/303)
Receiving objects:  30% (91/303)
Receiving objects:  31% (94/303)
Receiving objects:  32% (97/303)
Receiving objects:  33% (100/303)
Receiving objects:  34% (104/303)
Receiving objects:  35% (107/303)
Receiving objects:  36% (110/303)
Receiving objects:  37% (113/303)
Receiving objects:  38% (116/303)
Receiving objects:  39% (119/303)
Receiving objects:  40% (122/303)
Receiving objects:  41% (125/303)
Receiving objects:  42% (128/303)
Receiving objects:  43% (131/303)
Receiving objects:  44% (134/303)
Receiving objects:  45% (137/303)
Receiving objects:  46% (140/303)
Receiving objects:  47% (143/303)
Receiving objects:  48% (146/303)
Receiving objects:  49% (149/303)
Receiving objects:  50% (152/303)
Receiving objects:  51% (155/303)
Receiving objects:  52% (158/303)
Receiving objects:  53% (161/303)
Receiving objects:  54% (164/303)
Receiving objects:  55% (167/303)
Receiving objects:  56% (170/303)
Receiving objects:  57% (173/303)
Receiving objects:  58% (176/303)
Receiving objects:  59% (179/303)
Receiving objects:  60% (182/303)
Receiving objects:  61% (185/303)
Receiving objects:  62% (188/303)
Receiving objects:  63% (191/303)
Receiving objects:  64% (194/303)
Receiving objects:  65% (197/303)
Receiving objects:  66% (200/303)
Receiving objects:  67% (204/303)
Receiving objects:  68% (207/303)
Receiving objects:  69% (210/303)
Receiving objects:  70% (213/303)
Receiving objects:  71% (216/303)
Receiving objects:  72% (219/303)
Receiving objects:  73% (222/303)
Receiving objects:  74% (225/303)
Receiving objects:  75% (228/303)
Receiving objects:  76% (231/303)
Receiving objects:  77% (234/303)
Receiving objects:  78% (237/303)
Receiving objects:  79% (240/303)
Receiving objects:  80% (243/303)
Receiving objects:  81% (246/303)
Receiving objects:  82% (249/303)
Receiving objects:  83% (252/303)
Receiving objects:  84% (255/303)
Receiving objects:  85% (258/303)
Receiving objects:  86% (261/303)
Receiving objects:  87% (264/303)
Receiving objects:  88% (267/303)
Receiving objects:  89% (270/303)
Receiving objects:  90% (273/303)
Receiving objects:  91% (276/303)
Receiving objects:  92% (279/303)
Receiving objects:  93% (282/303)
Receiving objects:  94% (285/303)
Receiving objects:  95% (288/303)
Receiving objects:  96% (291/303)
Receiving objects:  97% (294/303)
Receiving objects:  98% (297/303)
Receiving objects:  99% (300/303)
Receiving objects: 100% (303/303)
Receiving objects: 100% (303/303), 833.39 KiB | 5.31 MiB/s, done.
Resolving deltas:   0% (0/190)
Resolving deltas:   1% (2/190)
Resolving deltas:   2% (4/190)
Resolving deltas:   3% (6/190)
Resolving deltas:   4% (8/190)
Resolving deltas:   5% (10/190)
Resolving deltas:   6% (12/190)
Resolving deltas:   7% (14/190)
Resolving deltas:   8% (16/190)
Resolving deltas:   9% (18/190)
Resolving deltas:  10% (19/190)
Resolving deltas:  11% (21/190)
Resolving deltas:  12% (23/190)
Resolving deltas:  13% (25/190)
Resolving deltas:  14% (27/190)
Resolving deltas:  15% (29/190)
Resolving deltas:  16% (31/190)
Resolving deltas:  17% (33/190)
Resolving deltas:  18% (35/190)
Resolving deltas:  19% (37/190)
Resolving deltas:  20% (38/190)
Resolving deltas:  21% (40/190)
Resolving deltas:  22% (42/190)
Resolving deltas:  23% (44/190)
Resolving deltas:  24% (46/190)
Resolving deltas:  25% (48/190)
Resolving deltas:  26% (50/190)
Resolving deltas:  27% (52/190)
Resolving deltas:  28% (54/190)
Resolving deltas:  29% (56/190)
Resolving deltas:  30% (57/190)
Resolving deltas:  31% (59/190)
Resolving deltas:  32% (61/190)
Resolving deltas:  33% (63/190)
Resolving deltas:  34% (65/190)
Resolving deltas:  35% (67/190)
Resolving deltas:  36% (69/190)
Resolving deltas:  37% (71/190)
Resolving deltas:  38% (73/190)
Resolving deltas:  39% (75/190)
Resolving deltas:  40% (76/190)
Resolving deltas:  41% (78/190)
Resolving deltas:  42% (80/190)
Resolving deltas:  43% (82/190)
Resolving deltas:  44% (84/190)
Resolving deltas:  45% (86/190)
Resolving deltas:  46% (88/190)
Resolving deltas:  47% (90/190)
Resolving deltas:  48% (92/190)
Resolving deltas:  49% (94/190)
Resolving deltas:  50% (95/190)
Resolving deltas:  51% (97/190)
Resolving deltas:  52% (99/190)
Resolving deltas:  53% (101/190)
Resolving deltas:  54% (103/190)
Resolving deltas:  55% (105/190)
Resolving deltas:  56% (107/190)
Resolving deltas:  57% (109/190)
Resolving deltas:  58% (111/190)
Resolving deltas:  59% (113/190)
Resolving deltas:  60% (114/190)
Resolving deltas:  61% (116/190)
Resolving deltas:  62% (118/190)
Resolving deltas:  63% (120/190)
Resolving deltas:  64% (122/190)
Resolving deltas:  65% (124/190)
Resolving deltas:  66% (126/190)
Resolving deltas:  67% (128/190)
Resolving deltas:  68% (130/190)
Resolving deltas:  69% (132/190)
Resolving deltas:  70% (133/190)
Resolving deltas:  71% (135/190)
Resolving deltas:  72% (137/190)
Resolving deltas:  73% (139/190)
Resolving deltas:  74% (141/190)
Resolving deltas:  75% (143/190)
Resolving deltas:  76% (145/190)
Resolving deltas:  77% (147/190)
Resolving deltas:  78% (149/190)
Resolving deltas:  79% (151/190)
Resolving deltas:  80% (152/190)
Resolving deltas:  81% (154/190)
Resolving deltas:  82% (156/190)
Resolving deltas:  83% (158/190)
Resolving deltas:  84% (160/190)
Resolving deltas:  85% (162/190)
Resolving deltas:  86% (164/190)
Resolving deltas:  87% (166/190)
Resolving deltas:  88% (168/190)
Resolving deltas:  89% (170/190)
Resolving deltas:  90% (171/190)
Resolving deltas:  91% (173/190)
Resolving deltas:  92% (175/190)
Resolving deltas:  93% (177/190)
Resolving deltas:  94% (179/190)
Resolving deltas:  95% (181/190)
Resolving deltas:  96% (183/190)
Resolving deltas:  97% (185/190)
Resolving deltas:  98% (187/190)
Resolving deltas:  99% (189/190)
Resolving deltas: 100% (190/190)
Resolving deltas: 100% (190/190), done.
ok 34 - index-pack -v --stdin produces progress for both phases

expecting success of 5302.35 'too-large packs report the breach': 
	pack=$(git pack-objects --all pack </dev/null) &&
	sz="$(test_file_size pack-$pack.pack)" &&
	test "$sz" -gt 20 &&
	test_must_fail git index-pack --max-input-size=20 pack-$pack.pack 2>err &&
	grep "maximum allowed size (20 bytes)" err

fatal: pack exceeds maximum allowed size (20 bytes)
ok 35 - too-large packs report the breach

# passed all 35 test(s)
1..35
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5316-pack-delta-depth.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5316-pack-delta-depth/.git/
expecting success of 5316.1 'create series of packs': 
	test-tool genrandom foo 4096 >content &&
	prev= &&
	for i in $(test_seq 1 10)
	do
		cat content >file &&
		echo $i >>file &&
		git add file &&
		git commit -m $i &&
		cur=$(git rev-parse HEAD^{tree}) &&
		{
			if test -n "$prev"
			then
				echo "-$prev"
			fi &&
			echo $cur &&
			echo "$(git rev-parse :file) file"
		} | git pack-objects --stdout >tmp &&
		GIT_TRACE2_EVENT=$PWD/trace \
		git index-pack -v --stdin --fix-thin <tmp || return 1 &&
		grep -c region_enter.*progress trace >enter &&
		grep -c region_leave.*progress trace >leave &&
		test_cmp enter leave &&
		prev=$cur
	done

[master (root-commit) adcc457] 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), 4.09 KiB | 523.00 KiB/s, done.
pack	88638646d0a7f1051038ae78ad0195c19aa7c5c8
[master a2de7f9] 2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	711435b7279aca4d33efb91db771f9cf7725ff05
[master 39a8dd7] 3
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	46e7d03099b67170a542956fe351ceef9e70ff92
[master 42be96b] 4
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	30ce91502db16f0438633eccad0bf358e5ade542
[master a2e6759] 5
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	8cab6f2a4762ee6565a978b114f2cc3b20dbb987
[master eb02d62] 6
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	36e62c0a922f9fdd0eaa885dbbd08ea34de4ecc9
[master 954149f] 7
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	07f2e882a14adf7568f1e390177bbf8f9731ef78
[master 13c477a] 8
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	9514d2d071de63aee58c0b845108590565255b15
[master 34341f7] 9
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	b604d4190b1d2a96d6304eb045f3fbc6f2f9ab97
[master baec731] 10
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Receiving objects:  50% (1/2)
Receiving objects: 100% (2/2)
Receiving objects: 100% (2/2), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), completed with 1 local object.
pack	83f4c28b023cb2892e2574bcca33931b75bc600a
ok 1 - create series of packs

expecting success of 5316.2 'packing produces a long delta': 
	# Use --window=0 to make sure we are seeing reused deltas,
	# not computing a new long chain.
	pack=$(git pack-objects --all --window=0 </dev/null pack) &&
	echo 9 >expect &&
	max_chain pack-$pack.pack >actual &&
	test_cmp expect actual

ok 2 - packing produces a long delta

expecting success of 5316.3 '--depth limits depth': 
	pack=$(git pack-objects --all --depth=5 </dev/null pack) &&
	echo 5 >expect &&
	max_chain pack-$pack.pack >actual &&
	test_cmp expect actual

ok 3 - --depth limits depth

expecting success of 5316.4 '--depth=0 disables deltas': 
	pack=$(git pack-objects --all --depth=0 </dev/null pack) &&
	echo 0 >expect &&
	max_chain pack-$pack.pack >actual &&
	test_cmp expect actual

ok 4 - --depth=0 disables deltas

expecting success of 5316.5 'negative depth disables deltas': 
	pack=$(git pack-objects --all --depth=-1 </dev/null pack) &&
	echo 0 >expect &&
	max_chain pack-$pack.pack >actual &&
	test_cmp expect actual

ok 5 - negative depth disables deltas

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5317-pack-objects-filter-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/.git/
expecting success of 5317.1 'setup r1': 
	git init r1 &&
	for n in 1 2 3 4 5
	do
		echo "This is file: $n" > r1/file.$n &&
		git -C r1 add file.$n &&
		git -C r1 commit -m "$n" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/r1/.git/
[main (root-commit) a56c7ae] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.1
[main 7d743f2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.2
[main fcc1d33] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.3
[main e1d918e] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.4
[main 90f11b5] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.5
ok 1 - setup r1

expecting success of 5317.2 'verify blob count in normal packfile': 
	git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r1 pack-objects --revs --stdout >all.pack <<-EOF &&
	HEAD
	EOF
	git -C r1 index-pack ../all.pack &&

	git -C r1 verify-pack -v ../all.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

f8dba5b5a8cb3bf6f89b1b7a911fa01dfdb554ba
ok 2 - verify blob count in normal packfile

expecting success of 5317.3 'verify blob:none packfile has no blobs': 
	git -C r1 pack-objects --revs --stdout --filter=blob:none >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r1 index-pack ../filter.pack &&

	git -C r1 verify-pack -v ../filter.pack >verify_result &&
	! grep blob verify_result

74f9b05b95a30d347d8fdd7d07c62dd3cb5bc506
ok 3 - verify blob:none packfile has no blobs

expecting success of 5317.4 'verify normal and blob:none packfiles have same commits/trees': 
	git -C r1 verify-pack -v ../all.pack >verify_result &&
	grep -E "commit|tree" verify_result |
	parse_verify_pack_blob_oid |
	sort >expected &&

	git -C r1 verify-pack -v ../filter.pack >verify_result &&
	grep -E "commit|tree" verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

ok 4 - verify normal and blob:none packfiles have same commits/trees

expecting success of 5317.5 'get an error for missing tree object': 
	git init r5 &&
	echo foo >r5/foo &&
	git -C r5 add foo &&
	git -C r5 commit -m "foo" &&
	git -C r5 rev-parse HEAD^{tree} >tree &&
	del=$(sed "s|..|&/|" tree) &&
	rm r5/.git/objects/$del &&
	test_must_fail git -C r5 pack-objects --revs --stdout 2>bad_tree <<-EOF &&
	HEAD
	EOF
	grep "bad tree object" bad_tree

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/r5/.git/
[main (root-commit) fbd86ca] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
fatal: bad tree object 205f6b799e7d5c2524468ca006a0131aa57ecce7
ok 5 - get an error for missing tree object

expecting success of 5317.6 'setup for tests of tree:0': 
	mkdir r1/subtree &&
	echo "This is a file in a subtree" >r1/subtree/file &&
	git -C r1 add subtree/file &&
	git -C r1 commit -m subtree

[main 4b273c5] subtree
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subtree/file
ok 6 - setup for tests of tree:0

expecting success of 5317.7 'verify tree:0 packfile has no blobs or trees': 
	git -C r1 pack-objects --revs --stdout --filter=tree:0 >commitsonly.pack <<-EOF &&
	HEAD
	EOF
	git -C r1 index-pack ../commitsonly.pack &&
	git -C r1 verify-pack -v ../commitsonly.pack >objs &&
	! grep -E "tree|blob" objs

a6f7596938aae585d3cefef3aa3c06c5b75da36b
ok 7 - verify tree:0 packfile has no blobs or trees

expecting success of 5317.8 'grab tree directly when using tree:0': 
	# We should get the tree specified directly but not its blobs or subtrees.
	git -C r1 pack-objects --revs --stdout --filter=tree:0 >commitsonly.pack <<-EOF &&
	HEAD:
	EOF
	git -C r1 index-pack ../commitsonly.pack &&
	git -C r1 verify-pack -v ../commitsonly.pack >objs &&
	awk "/tree|blob/{print \$1}" objs >trees_and_blobs &&
	git -C r1 rev-parse HEAD: >expected &&
	test_cmp expected trees_and_blobs

2abcb6db3990fe53c59fd41f9590643ae34427f0
ok 8 - grab tree directly when using tree:0

expecting success of 5317.9 'setup r2': 
	git init r2 &&
	for n in 1000 10000
	do
		printf "%"$n"s" X > r2/large.$n &&
		git -C r2 add large.$n &&
		git -C r2 commit -m "$n" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/r2/.git/
[main (root-commit) 0c54972] 1000
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 large.1000
[main fdc71e4] 10000
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 large.10000
ok 9 - setup r2

expecting success of 5317.10 'verify blob count in normal packfile': 
	git -C r2 ls-files -s large.1000 large.10000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r2 pack-objects --revs --stdout >all.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../all.pack &&

	git -C r2 verify-pack -v ../all.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

2a8bc18f1802fcc19e573eb38f1963ba344c580b
ok 10 - verify blob count in normal packfile

expecting success of 5317.11 'verify blob:limit=500 omits all blobs': 
	git -C r2 pack-objects --revs --stdout --filter=blob:limit=500 >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	! grep blob verify_result

d9abed358fce3ac0869120aa06e2664d45a80459
ok 11 - verify blob:limit=500 omits all blobs

expecting success of 5317.12 'verify blob:limit=1000': 
	git -C r2 pack-objects --revs --stdout --filter=blob:limit=1000 >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	! grep blob verify_result

d9abed358fce3ac0869120aa06e2664d45a80459
ok 12 - verify blob:limit=1000

expecting success of 5317.13 'verify blob:limit=1001': 
	git -C r2 ls-files -s large.1000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r2 pack-objects --revs --stdout --filter=blob:limit=1001 >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

045779e5722283ca4bbec3b5a9285c0e10027033
ok 13 - verify blob:limit=1001

expecting success of 5317.14 'verify blob:limit=10001': 
	git -C r2 ls-files -s large.1000 large.10000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r2 pack-objects --revs --stdout --filter=blob:limit=10001 >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

2a8bc18f1802fcc19e573eb38f1963ba344c580b
ok 14 - verify blob:limit=10001

expecting success of 5317.15 'verify blob:limit=1k': 
	git -C r2 ls-files -s large.1000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r2 pack-objects --revs --stdout --filter=blob:limit=1k >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

045779e5722283ca4bbec3b5a9285c0e10027033
ok 15 - verify blob:limit=1k

expecting success of 5317.16 'verify explicitly specifying oversized blob in input': 
	git -C r2 ls-files -s large.1000 large.10000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	echo HEAD >objects &&
	git -C r2 rev-parse HEAD:large.10000 >>objects &&
	git -C r2 pack-objects --revs --stdout --filter=blob:limit=1k <objects >filter.pack &&
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

caafb8a9cc92845f6f65afdea7e6fac6add3e5df
ok 16 - verify explicitly specifying oversized blob in input

expecting success of 5317.17 'verify blob:limit=1m': 
	git -C r2 ls-files -s large.1000 large.10000 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r2 pack-objects --revs --stdout --filter=blob:limit=1m >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r2 index-pack ../filter.pack &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

2a8bc18f1802fcc19e573eb38f1963ba344c580b
ok 17 - verify blob:limit=1m

expecting success of 5317.18 'verify normal and blob:limit packfiles have same commits/trees': 
	git -C r2 verify-pack -v ../all.pack >verify_result &&
	grep -E "commit|tree" verify_result |
	parse_verify_pack_blob_oid |
	sort >expected &&

	git -C r2 verify-pack -v ../filter.pack >verify_result &&
	grep -E "commit|tree" verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

ok 18 - verify normal and blob:limit packfiles have same commits/trees

expecting success of 5317.19 'setup r3': 
	git init r3 &&
	mkdir r3/dir1 &&
	for n in sparse1 sparse2
	do
		echo "This is file: $n" > r3/$n &&
		git -C r3 add $n &&
		echo "This is file: dir1/$n" > r3/dir1/$n &&
		git -C r3 add dir1/$n || return 1
	done &&
	git -C r3 commit -m "sparse" &&
	echo dir1/ >pattern1 &&
	echo sparse1 >pattern2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/r3/.git/
[main (root-commit) b18fcc1] sparse
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 dir1/sparse1
 create mode 100644 dir1/sparse2
 create mode 100644 sparse1
 create mode 100644 sparse2
ok 19 - setup r3

expecting success of 5317.20 'verify blob count in normal packfile': 
	git -C r3 ls-files -s sparse1 sparse2 dir1/sparse1 dir1/sparse2 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r3 pack-objects --revs --stdout >all.pack <<-EOF &&
	HEAD
	EOF
	git -C r3 index-pack ../all.pack &&

	git -C r3 verify-pack -v ../all.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

c032f005b6a497478f1daa2fb324aa5c51224039
ok 20 - verify blob count in normal packfile

expecting success of 5317.21 'verify sparse:path=pattern1 fails': 
	test_must_fail git -C r3 pack-objects --revs --stdout \
		--filter=sparse:path=../pattern1 <<-EOF
	HEAD
	EOF

fatal: sparse:path filters support has been dropped
ok 21 - verify sparse:path=pattern1 fails

expecting success of 5317.22 'verify sparse:path=pattern2 fails': 
	test_must_fail git -C r3 pack-objects --revs --stdout \
		--filter=sparse:path=../pattern2 <<-EOF
	HEAD
	EOF

fatal: sparse:path filters support has been dropped
ok 22 - verify sparse:path=pattern2 fails

expecting success of 5317.23 'setup r4': 
	git init r4 &&
	mkdir r4/dir1 &&
	for n in sparse1 sparse2
	do
		echo "This is file: $n" > r4/$n &&
		git -C r4 add $n &&
		echo "This is file: dir1/$n" > r4/dir1/$n &&
		git -C r4 add dir1/$n || return 1
	done &&
	echo dir1/ >r4/pattern &&
	git -C r4 add pattern &&
	git -C r4 commit -m "pattern"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5317-pack-objects-filter-objects/r4/.git/
[main (root-commit) 94c5152] pattern
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 dir1/sparse1
 create mode 100644 dir1/sparse2
 create mode 100644 pattern
 create mode 100644 sparse1
 create mode 100644 sparse2
ok 23 - setup r4

expecting success of 5317.24 'verify blob count in normal packfile': 
	git -C r4 ls-files -s pattern sparse1 sparse2 dir1/sparse1 dir1/sparse2 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r4 pack-objects --revs --stdout >all.pack <<-EOF &&
	HEAD
	EOF
	git -C r4 index-pack ../all.pack &&

	git -C r4 verify-pack -v ../all.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

1eda0c5015c4170144f9c7ac96c56690163e1d85
ok 24 - verify blob count in normal packfile

expecting success of 5317.25 'verify sparse:oid=OID': 
	git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r4 ls-files -s pattern >staged &&
	oid=$(test_parse_ls_files_stage_oids <staged) &&
	git -C r4 pack-objects --revs --stdout --filter=sparse:oid=$oid >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r4 index-pack ../filter.pack &&

	git -C r4 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

095eef2cc427768a7687a30f2566b8e72ac0e449
ok 25 - verify sparse:oid=OID

expecting success of 5317.26 'verify sparse:oid=oid-ish': 
	git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	git -C r4 pack-objects --revs --stdout --filter=sparse:oid=main:pattern >filter.pack <<-EOF &&
	HEAD
	EOF
	git -C r4 index-pack ../filter.pack &&

	git -C r4 verify-pack -v ../filter.pack >verify_result &&
	grep blob verify_result |
	parse_verify_pack_blob_oid |
	sort >observed &&

	test_cmp expected observed

095eef2cc427768a7687a30f2566b8e72ac0e449
ok 26 - verify sparse:oid=oid-ish

expecting success of 5317.27 'setup r1 - delete loose blobs': 
	git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 |
	test_parse_ls_files_stage_oids |
	sort >expected &&

	for id in `cat expected | sed "s|..|&/|"`
	do
		rm r1/.git/objects/$id || return 1
	done

ok 27 - setup r1 - delete loose blobs

expecting success of 5317.28 'verify pack-objects fails w/ missing objects': 
	test_must_fail git -C r1 pack-objects --revs --stdout >miss.pack <<-EOF
	HEAD
	EOF

fatal: unable to read 54ff69bde100bd29db945c2fc62010675d3b5b14
ok 28 - verify pack-objects fails w/ missing objects

expecting success of 5317.29 'verify pack-objects fails w/ --missing=error': 
	test_must_fail git -C r1 pack-objects --revs --stdout --missing=error >miss.pack <<-EOF
	HEAD
	EOF

fatal: unable to read 54ff69bde100bd29db945c2fc62010675d3b5b14
ok 29 - verify pack-objects fails w/ --missing=error

expecting success of 5317.30 'verify pack-objects w/ --missing=allow-any': 
	git -C r1 pack-objects --revs --stdout --missing=allow-any >miss.pack <<-EOF
	HEAD
	EOF

ok 30 - verify pack-objects w/ --missing=allow-any

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5318-commit-graph.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/.git/
expecting success of 5318.1 'usage': 
	test_expect_code 129 git commit-graph write blah 2>err &&
	test_expect_code 129 git commit-graph write verify

usage: git commit-graph write [--object-dir <dir>] [--append]
                              [--split[=<strategy>]] [--reachable | --stdin-packs | --stdin-commits]
                              [--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress]
                              <split options>

    --object-dir <dir>    the object directory to store the graph
    --reachable           start walk at all refs
    --stdin-packs         scan pack-indexes listed by stdin for commits
    --stdin-commits       start walk at commits listed by stdin
    --append              include all commits already in the commit-graph file
    --changed-paths       enable computation for changed paths
    --split[=...]         allow writing an incremental commit-graph file
    --max-commits <n>     maximum number of commits in a non-base split commit-graph
    --size-multiple <n>   maximum ratio between two levels of a split commit-graph
    --expire-time <expiry-date>
                          only expire files older than a given date-time
    --max-new-filters ...
                          maximum number of changed-path Bloom filters to compute
    --progress            force progress reporting

ok 1 - usage

expecting success of 5318.2 'usage shown without sub-command': 
	test_expect_code 129 git commit-graph 2>err &&
	grep usage: err

usage: git commit-graph verify [--object-dir <dir>] [--shallow] [--[no-]progress]
ok 2 - usage shown without sub-command

expecting success of 5318.3 'usage shown with an error on unknown sub-command': 
	cat >expect <<-\EOF &&
	error: unknown subcommand: `unknown'
	EOF
	test_expect_code 129 git commit-graph unknown 2>stderr &&
	grep error stderr >actual &&
	test_cmp expect actual

ok 3 - usage shown with an error on unknown sub-command

expecting success of 5318.4 'setup full repo': 
	mkdir full &&
	cd "$TRASH_DIRECTORY/full" &&
	git init &&
	git config core.commitGraph true &&
	objdir=".git/objects"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/full/.git/
ok 4 - setup full repo

expecting success of 5318.5 'tweak umask for modebit tests': 
	umask 022

ok 5 - tweak umask for modebit tests

expecting success of 5318.6 'verify graph with no graph file': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph verify

ok 6 - verify graph with no graph file

expecting success of 5318.7 'write graph with no packs': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write --object-dir $objdir &&
	test_path_is_missing $objdir/info/commit-graph

ok 7 - write graph with no packs

expecting success of 5318.8 'exit with correct error on bad input to --stdin-packs': 
	cd "$TRASH_DIRECTORY/full" &&
	echo doesnotexist >in &&
	test_expect_code 1 git commit-graph write --stdin-packs <in 2>stderr &&
	test_i18ngrep "error adding pack" stderr

error: error adding pack .git/objects/pack/doesnotexist
ok 8 - exit with correct error on bad input to --stdin-packs

expecting success of 5318.9 'create commits and repack': 
	cd "$TRASH_DIRECTORY/full" &&
	for i in $(test_seq 3)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git repack

[master (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 82335b2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master ddc8575] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
ok 9 - create commits and repack

expecting success of 5318.10 'check normal git operations: no graph': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 10 - check normal git operations: no graph

expecting success of 5318.11 'exit with correct error on bad input to --stdin-commits': 
	cd "$TRASH_DIRECTORY/full" &&
	# invalid, non-hex OID
	echo HEAD >in &&
	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
	test_i18ngrep "unexpected non-hex object ID: HEAD" stderr &&
	# non-existent OID
	echo $ZERO_OID >in &&
	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
	test_i18ngrep "invalid object" stderr &&
	# valid commit and tree OID
	git rev-parse HEAD HEAD^{tree} >in &&
	git commit-graph write --stdin-commits <in &&
	graph_read_expect 3 generation_data

error: unexpected non-hex object ID: HEAD
error: invalid object: 0000000000000000000000000000000000000000
ok 11 - exit with correct error on bad input to --stdin-commits

expecting success of 5318.12 'write graph': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "3" generation_data

ok 12 - write graph

expecting success of 5318.13 'write graph has correct permissions': 
	test_path_is_file $objdir/info/commit-graph &&
	echo "-r--r--r--" >expect &&
	test_modebits $objdir/info/commit-graph >actual &&
	test_cmp expect actual

ok 13 - write graph has correct permissions

expecting success of 5318.14 'check normal git operations: graph exists': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 14 - check normal git operations: graph exists

expecting success of 5318.15 'Add more commits': 
	cd "$TRASH_DIRECTORY/full" &&
	git reset --hard commits/1 &&
	for i in $(test_seq 4 5)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git reset --hard commits/2 &&
	for i in $(test_seq 6 7)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git reset --hard commits/2 &&
	git merge commits/4 &&
	git branch merge/1 &&
	git reset --hard commits/4 &&
	git merge commits/6 &&
	git branch merge/2 &&
	git reset --hard commits/3 &&
	git merge commits/5 commits/7 &&
	git branch merge/3 &&
	git repack

HEAD is now at d0dcf97 1
[master 6efda21] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 7ec8a1d] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
HEAD is now at 82335b2 2
[master 76c4cb0] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[master 12a06f3] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
HEAD is now at 82335b2 2
Merge made by the 'ort' strategy.
 4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
HEAD is now at 6efda21 4
Merge made by the 'ort' strategy.
 2.t | 1 +
 6.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 2.t
 create mode 100644 6.t
HEAD is now at ddc8575 3
Trying simple merge with commits/5
Trying simple merge with commits/7
Merge made by the 'octopus' strategy.
 4.t | 1 +
 5.t | 1 +
 6.t | 1 +
 7.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 4.t
 create mode 100644 5.t
 create mode 100644 6.t
 create mode 100644 7.t
ok 15 - Add more commits

expecting success of 5318.16 'commit-graph write progress off for redirected stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write 2>err &&
	test_must_be_empty err

ok 16 - commit-graph write progress off for redirected stderr

expecting success of 5318.17 'commit-graph write force progress on for stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	GIT_PROGRESS_DELAY=0 git commit-graph write --progress 2>err &&
	test_file_not_empty err

ok 17 - commit-graph write force progress on for stderr

expecting success of 5318.18 'commit-graph write with the --no-progress option': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write --no-progress 2>err &&
	test_must_be_empty err

ok 18 - commit-graph write with the --no-progress option

expecting success of 5318.19 'commit-graph write --stdin-commits progress off for redirected stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	git rev-parse commits/5 >in &&
	git commit-graph write --stdin-commits <in 2>err &&
	test_must_be_empty err

ok 19 - commit-graph write --stdin-commits progress off for redirected stderr

expecting success of 5318.20 'commit-graph write --stdin-commits force progress on for stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	git rev-parse commits/5 >in &&
	GIT_PROGRESS_DELAY=0 git commit-graph write --stdin-commits --progress <in 2>err &&
	test_i18ngrep "Collecting commits from input" err

Collecting commits from input: 1, done.
ok 20 - commit-graph write --stdin-commits force progress on for stderr

expecting success of 5318.21 'commit-graph write --stdin-commits with the --no-progress option': 
	cd "$TRASH_DIRECTORY/full" &&
	git rev-parse commits/5 >in &&
	git commit-graph write --stdin-commits --no-progress <in 2>err &&
	test_must_be_empty err

ok 21 - commit-graph write --stdin-commits with the --no-progress option

expecting success of 5318.22 'commit-graph verify progress off for redirected stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph verify 2>err &&
	test_must_be_empty err

ok 22 - commit-graph verify progress off for redirected stderr

expecting success of 5318.23 'commit-graph verify force progress on for stderr': 
	cd "$TRASH_DIRECTORY/full" &&
	GIT_PROGRESS_DELAY=0 git commit-graph verify --progress 2>err &&
	test_file_not_empty err

ok 23 - commit-graph verify force progress on for stderr

expecting success of 5318.24 'commit-graph verify with the --no-progress option': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph verify --no-progress 2>err &&
	test_must_be_empty err

ok 24 - commit-graph verify with the --no-progress option

expecting success of 5318.25 'write graph with merges': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "10" "generation_data extra_edges"

ok 25 - write graph with merges

expecting success of 5318.26 'check normal git operations: merge 1 vs 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 26 - check normal git operations: merge 1 vs 2

expecting success of 5318.27 'check normal git operations: merge 1 vs 3': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 27 - check normal git operations: merge 1 vs 3

expecting success of 5318.28 'check normal git operations: merge 2 vs 3': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 28 - check normal git operations: merge 2 vs 3

expecting success of 5318.29 'Add one more commit': 
	cd "$TRASH_DIRECTORY/full" &&
	test_commit 8 &&
	git branch commits/8 &&
	ls $objdir/pack | grep idx >existing-idx &&
	git repack &&
	ls $objdir/pack| grep idx | grep -v -f existing-idx >new-idx

[master 2c45687] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
ok 29 - Add one more commit

expecting success of 5318.30 'check normal git operations: mixed mode, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 30 - check normal git operations: mixed mode, commit 8 vs merge 1

expecting success of 5318.31 'check normal git operations: mixed mode, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 31 - check normal git operations: mixed mode, commit 8 vs merge 2

expecting success of 5318.32 'write graph with new commit': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "11" "generation_data extra_edges"

ok 32 - write graph with new commit

expecting success of 5318.33 'check normal git operations: full graph, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 33 - check normal git operations: full graph, commit 8 vs merge 1

expecting success of 5318.34 'check normal git operations: full graph, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 34 - check normal git operations: full graph, commit 8 vs merge 2

expecting success of 5318.35 'write graph with nothing new': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "11" "generation_data extra_edges"

ok 35 - write graph with nothing new

expecting success of 5318.36 'check normal git operations: cleared graph, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 36 - check normal git operations: cleared graph, commit 8 vs merge 1

expecting success of 5318.37 'check normal git operations: cleared graph, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 37 - check normal git operations: cleared graph, commit 8 vs merge 2

expecting success of 5318.38 'build graph from latest pack with closure': 
	cd "$TRASH_DIRECTORY/full" &&
	cat new-idx | git commit-graph write --stdin-packs &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "9" "generation_data extra_edges"

ok 38 - build graph from latest pack with closure

expecting success of 5318.39 'check normal git operations: graph from pack, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 39 - check normal git operations: graph from pack, commit 8 vs merge 1

expecting success of 5318.40 'check normal git operations: graph from pack, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 40 - check normal git operations: graph from pack, commit 8 vs merge 2

expecting success of 5318.41 'build graph from commits with closure': 
	cd "$TRASH_DIRECTORY/full" &&
	git tag -a -m "merge" tag/merge merge/2 &&
	git rev-parse tag/merge >commits-in &&
	git rev-parse merge/1 >>commits-in &&
	cat commits-in | git commit-graph write --stdin-commits &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "6" "generation_data"

ok 41 - build graph from commits with closure

expecting success of 5318.42 'check normal git operations: graph from commits, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 42 - check normal git operations: graph from commits, commit 8 vs merge 1

expecting success of 5318.43 'check normal git operations: graph from commits, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 43 - check normal git operations: graph from commits, commit 8 vs merge 2

expecting success of 5318.44 'build graph from commits with append': 
	cd "$TRASH_DIRECTORY/full" &&
	git rev-parse merge/3 | git commit-graph write --stdin-commits --append &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "10" "generation_data extra_edges"

ok 44 - build graph from commits with append

expecting success of 5318.45 'check normal git operations: append graph, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 45 - check normal git operations: append graph, commit 8 vs merge 1

expecting success of 5318.46 'check normal git operations: append graph, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 46 - check normal git operations: append graph, commit 8 vs merge 2

expecting success of 5318.47 'build graph using --reachable': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit-graph write --reachable &&
	test_path_is_file $objdir/info/commit-graph &&
	graph_read_expect "11" "generation_data extra_edges"

ok 47 - build graph using --reachable

expecting success of 5318.48 'check normal git operations: append graph, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 48 - check normal git operations: append graph, commit 8 vs merge 1

expecting success of 5318.49 'check normal git operations: append graph, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 49 - check normal git operations: append graph, commit 8 vs merge 2

expecting success of 5318.50 'setup bare repo': 
	cd "$TRASH_DIRECTORY" &&
	git clone --bare --no-local full bare &&
	cd bare &&
	git config core.commitGraph true &&
	baredir="./objects"

Cloning into bare repository 'bare'...
ok 50 - setup bare repo

expecting success of 5318.51 'check normal git operations: bare repo, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 51 - check normal git operations: bare repo, commit 8 vs merge 1

expecting success of 5318.52 'check normal git operations: bare repo, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 52 - check normal git operations: bare repo, commit 8 vs merge 2

expecting success of 5318.53 'write graph in bare repo': 
	cd "$TRASH_DIRECTORY/bare" &&
	git commit-graph write &&
	test_path_is_file $baredir/info/commit-graph &&
	graph_read_expect "11" "generation_data extra_edges"

ok 53 - write graph in bare repo

expecting success of 5318.54 'check normal git operations: bare repo with graph, commit 8 vs merge 1': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 54 - check normal git operations: bare repo with graph, commit 8 vs merge 1

expecting success of 5318.55 'check normal git operations: bare repo with graph, commit 8 vs merge 2': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 55 - check normal git operations: bare repo with graph, commit 8 vs merge 2

expecting success of 5318.56 'perform fast-forward merge in full repo': 
	cd "$TRASH_DIRECTORY/full" &&
	git checkout -b merge-5-to-8 commits/5 &&
	git merge commits/8 &&
	git show-ref -s merge-5-to-8 >output &&
	git show-ref -s commits/8 >expect &&
	test_cmp expect output

Switched to a new branch 'merge-5-to-8'
Updating 7ec8a1d..2c45687
Fast-forward
 2.t | 1 +
 3.t | 1 +
 6.t | 1 +
 7.t | 1 +
 8.t | 1 +
 5 files changed, 5 insertions(+)
 create mode 100644 2.t
 create mode 100644 3.t
 create mode 100644 6.t
 create mode 100644 7.t
 create mode 100644 8.t
ok 56 - perform fast-forward merge in full repo

expecting success of 5318.57 'check that gc computes commit-graph': 
	cd "$TRASH_DIRECTORY/full" &&
	git commit --allow-empty -m "blank" &&
	git commit-graph write --reachable &&
	cp $objdir/info/commit-graph commit-graph-before-gc &&
	git reset --hard HEAD~1 &&
	git config gc.writeCommitGraph true &&
	git gc &&
	cp $objdir/info/commit-graph commit-graph-after-gc &&
	! test_cmp_bin commit-graph-before-gc commit-graph-after-gc &&
	git commit-graph write --reachable &&
	test_cmp_bin commit-graph-after-gc $objdir/info/commit-graph

[merge-5-to-8 63d6d79] blank
 Author: A U Thor <author@example.com>
HEAD is now at 2c45687 8
commit-graph-before-gc commit-graph-after-gc differ: char 44, line 1
ok 57 - check that gc computes commit-graph

expecting success of 5318.58 'replace-objects invalidates commit-graph': 
	cd "$TRASH_DIRECTORY" &&
	test_when_finished rm -rf replace &&
	git clone full replace &&
	(
		cd replace &&
		git commit-graph write --reachable &&
		test_path_is_file .git/objects/info/commit-graph &&
		git replace HEAD~1 HEAD~2 &&
		graph_git_two_modes "commit-graph verify" &&
		git -c core.commitGraph=false log >expect &&
		git -c core.commitGraph=true log >actual &&
		test_cmp expect actual &&
		git commit-graph write --reachable &&
		git -c core.commitGraph=false --no-replace-objects log >expect &&
		git -c core.commitGraph=true --no-replace-objects log >actual &&
		test_cmp expect actual &&
		rm -rf .git/objects/info/commit-graph &&
		git commit-graph write --reachable &&
		test_path_is_file .git/objects/info/commit-graph
	)

Cloning into 'replace'...
done.
ok 58 - replace-objects invalidates commit-graph

expecting success of 5318.59 'commit grafts invalidate commit-graph': 
	cd "$TRASH_DIRECTORY" &&
	test_when_finished rm -rf graft &&
	git clone --template= full graft &&
	(
		cd graft &&
		git commit-graph write --reachable &&
		test_path_is_file .git/objects/info/commit-graph &&
		H1=$(git rev-parse --verify HEAD~1) &&
		H3=$(git rev-parse --verify HEAD~3) &&
		mkdir .git/info &&
		echo "$H1 $H3" >.git/info/grafts &&
		git -c core.commitGraph=false log >expect &&
		git -c core.commitGraph=true log >actual &&
		test_cmp expect actual &&
		git commit-graph write --reachable &&
		git -c core.commitGraph=false --no-replace-objects log >expect &&
		git -c core.commitGraph=true --no-replace-objects log >actual &&
		test_cmp expect actual &&
		rm -rf .git/objects/info/commit-graph &&
		git commit-graph write --reachable &&
		test_path_is_missing .git/objects/info/commit-graph
	)

Cloning into 'graft'...
done.
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 59 - commit grafts invalidate commit-graph

expecting success of 5318.60 'replace-objects invalidates commit-graph': 
	cd "$TRASH_DIRECTORY" &&
	test_when_finished rm -rf shallow &&
	git clone --depth 2 "file://$TRASH_DIRECTORY/full" shallow &&
	(
		cd shallow &&
		git commit-graph write --reachable &&
		test_path_is_missing .git/objects/info/commit-graph &&
		git fetch origin --unshallow &&
		git commit-graph write --reachable &&
		test_path_is_file .git/objects/info/commit-graph
	)

Cloning into 'shallow'...
From file:///<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/full
 * [new tag]         1          -> 1
 * [new tag]         2          -> 2
 * [new tag]         3          -> 3
 * [new tag]         4          -> 4
 * [new tag]         5          -> 5
 * [new tag]         6          -> 6
 * [new tag]         7          -> 7
ok 60 - replace-objects invalidates commit-graph

expecting success of 5318.61 'warn on improper hash version': 
	git init --object-format=sha1 sha1 &&
	(
		cd sha1 &&
		test_commit 1 &&
		git commit-graph write --reachable &&
		mv .git/objects/info/commit-graph ../cg-sha1
	) &&
	git init --object-format=sha256 sha256 &&
	(
		cd sha256 &&
		test_commit 1 &&
		git commit-graph write --reachable &&
		mv .git/objects/info/commit-graph ../cg-sha256
	) &&
	(
		cd sha1 &&
		mv ../cg-sha256 .git/objects/info/commit-graph &&
		git log -1 2>err &&
		test_i18ngrep "commit-graph hash version 2 does not match version 1" err
	) &&
	(
		cd sha256 &&
		mv ../cg-sha1 .git/objects/info/commit-graph &&
		git log -1 2>err &&
		test_i18ngrep "commit-graph hash version 1 does not match version 2" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/sha1/.git/
[master (root-commit) 11730cb] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/sha256/.git/
[master (root-commit) ac0b5e9] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
commit 11730cb7f171c08bf5c757281355228ec4a3f102
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:21:13 2005 -0700

    1
error: commit-graph hash version 2 does not match version 1
commit ac0b5e90d98bda5dcf6fd27e177a8af0572656b3d1341ac620d206983698b3d5
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:21:13 2005 -0700

    1
error: commit-graph hash version 1 does not match version 2
ok 61 - warn on improper hash version

checking prerequisite: TIME_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&test-tool date is64bit
)
prerequisite TIME_IS_64BIT ok
checking prerequisite: TIME_T_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&test-tool date time_t-is64bit
)
prerequisite TIME_T_IS_64BIT not satisfied
ok 62 # skip lower layers have overflow chunk (missing TIME_T_IS_64BIT of TIME_IS_64BIT,TIME_T_IS_64BIT)

expecting success of 5318.63 'git commit-graph verify': 
	cd "$TRASH_DIRECTORY/full" &&
	git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits &&
	git commit-graph verify >output &&
	graph_read_expect 9 extra_edges 1

ok 63 - git commit-graph verify

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 5318.64 'detect permission problem': 
	corrupt_graph_setup &&
	chmod 000 $objdir/info/commit-graph &&
	corrupt_graph_verify "Could not open" "no-copy"

fatal: Could not open commit-graph '.git/objects/info/commit-graph': Permission denied
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 64 - detect permission problem

expecting success of 5318.65 'detect too small': 
	corrupt_graph_setup &&
	echo "a small graph" >$objdir/info/commit-graph &&
	corrupt_graph_verify "too small"

error: commit-graph file is too small
error: commit-graph file is too small
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph file is too small
ok 65 - detect too small

expecting success of 5318.66 'detect bad signature': 
	corrupt_graph_and_verify 0 "\0" \
		"graph signature"

1+0 records in
1+0 records out
1 byte copied, 0.00073936 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000413015 s, 0.0 kB/s
error: commit-graph signature 475048 does not match signature 43475048
error: commit-graph signature 475048 does not match signature 43475048
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph signature 475048 does not match signature 43475048
ok 66 - detect bad signature

expecting success of 5318.67 'detect bad version': 
	corrupt_graph_and_verify $GRAPH_BYTE_VERSION "\02" \
		"graph version"

1+0 records in
1+0 records out
1 byte copied, 0.00262076 s, 0.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000424349 s, 0.0 kB/s
error: commit-graph version 2 does not match version 1
error: commit-graph version 2 does not match version 1
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph version 2 does not match version 1
ok 67 - detect bad version

expecting success of 5318.68 'detect bad hash version': 
	corrupt_graph_and_verify $GRAPH_BYTE_HASH "\03" \
		"hash version"

1+0 records in
1+0 records out
1 byte copied, 0.000841697 s, 1.2 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000388348 s, 0.0 kB/s
error: commit-graph hash version 3 does not match version 1
error: commit-graph hash version 3 does not match version 1
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph hash version 3 does not match version 1
ok 68 - detect bad hash version

expecting success of 5318.69 'detect low chunk count': 
	corrupt_graph_and_verify $GRAPH_BYTE_CHUNK_COUNT "\01" \
		"final chunk has non-zero id"

1+0 records in
1+0 records out
1 byte copied, 0.000698359 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000372681 s, 0.0 kB/s
error: final chunk has non-zero id 4f49444c
error: final chunk has non-zero id 4f49444c
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: final chunk has non-zero id 4f49444c
ok 69 - detect low chunk count

expecting success of 5318.70 'detect missing OID fanout chunk': 
	corrupt_graph_and_verify $GRAPH_BYTE_OID_FANOUT_ID "\0" \
		"missing the OID Fanout chunk"

1+0 records in
1+0 records out
1 byte copied, 0.000581022 s, 1.7 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000330346 s, 0.0 kB/s
error: commit-graph is missing the OID Fanout chunk
error: commit-graph is missing the OID Fanout chunk
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph is missing the OID Fanout chunk
ok 70 - detect missing OID fanout chunk

expecting success of 5318.71 'detect missing OID lookup chunk': 
	corrupt_graph_and_verify $GRAPH_BYTE_OID_LOOKUP_ID "\0" \
		"missing the OID Lookup chunk"

1+0 records in
1+0 records out
1 byte copied, 0.000743694 s, 1.3 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000338346 s, 0.0 kB/s
error: commit-graph is missing the OID Lookup chunk
error: commit-graph is missing the OID Lookup chunk
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph is missing the OID Lookup chunk
ok 71 - detect missing OID lookup chunk

expecting success of 5318.72 'detect missing commit data chunk': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_DATA_ID "\0" \
		"missing the Commit Data chunk"

1+0 records in
1+0 records out
1 byte copied, 0.000568688 s, 1.8 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000312012 s, 0.0 kB/s
error: commit-graph is missing the Commit Data chunk
error: commit-graph is missing the Commit Data chunk
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph is missing the Commit Data chunk
ok 72 - detect missing commit data chunk

expecting success of 5318.73 'detect incorrect fanout': 
	corrupt_graph_and_verify $GRAPH_BYTE_FANOUT1 "\01" \
		"fanout value"

1+0 records in
1+0 records out
1 byte copied, 0.000614689 s, 1.6 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000360347 s, 0.0 kB/s
commit-graph has incorrect fanout value: fanout[4] = 16777216 != 0
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 73 - detect incorrect fanout

expecting success of 5318.74 'detect incorrect fanout final value': 
	corrupt_graph_and_verify $GRAPH_BYTE_FANOUT2 "\01" \
		"fanout value"

1+0 records in
1+0 records out
1 byte copied, 0.000654691 s, 1.5 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000391015 s, 0.0 kB/s
commit-graph has incorrect fanout value: fanout[255] = 16777225 != 9
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 74 - detect incorrect fanout final value

expecting success of 5318.75 'detect incorrect OID order': 
	corrupt_graph_and_verify $GRAPH_BYTE_OID_LOOKUP_ORDER "\01" \
		"incorrect OID order"

1+0 records in
1+0 records out
1 byte copied, 0.000585355 s, 1.7 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000345679 s, 0.0 kB/s
commit-graph has incorrect OID order: d0dcf978085b712ac89a73020e40fb8b7e540ec4 then 01c8575ed6fc205127629848895ac35ba7529ace
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 75 - detect incorrect OID order

expecting success of 5318.76 'detect OID not in object database': 
	corrupt_graph_and_verify $GRAPH_BYTE_OID_LOOKUP_MISSING "\01" \
		"from object database"

1+0 records in
1+0 records out
1 byte copied, 0.000479684 s, 2.1 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000329012 s, 0.0 kB/s
failed to parse commit 76c4cb0cede3ceaca44a01b27edce46ba498dfad from object database for commit-graph
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 76 - detect OID not in object database

expecting success of 5318.77 'detect incorrect tree OID': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_TREE "\01" \
		"root tree OID for commit"

1+0 records in
1+0 records out
1 byte copied, 0.000671692 s, 1.5 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000306678 s, 0.0 kB/s
root tree OID for commit 12a06f3a2c235980d878903e940b0570ddda4359 in commit-graph is 016f0284c84f93b3e8df8c402054b760afac7e76 != 566f0284c84f93b3e8df8c402054b760afac7e76
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 77 - detect incorrect tree OID

expecting success of 5318.78 'detect incorrect parent int-id': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_PARENT "\01" \
		"invalid parent"

1+0 records in
1+0 records out
1 byte copied, 0.000700026 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000564354 s, 0.0 kB/s
fatal: invalid parent position 16777220
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 78 - detect incorrect parent int-id

expecting success of 5318.79 'detect extra parent int-id': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_EXTRA_PARENT "\00" \
		"is too long"

1+0 records in
1+0 records out
1 byte copied, 0.000611023 s, 1.6 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000391681 s, 0.0 kB/s
commit-graph parent list for commit 12a06f3a2c235980d878903e940b0570ddda4359 is too long
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 79 - detect extra parent int-id

expecting success of 5318.80 'detect wrong parent': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_WRONG_PARENT "\01" \
		"commit-graph parent for"

1+0 records in
1+0 records out
1 byte copied, 0.000620023 s, 1.6 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000315011 s, 0.0 kB/s
commit-graph parent for 12a06f3a2c235980d878903e940b0570ddda4359 is 2c45687afab8ea0442fe2feb61881deac6f37339 != 76c4cb0cede3ceaca44a1bb27edce46ba498dfad
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 80 - detect wrong parent

expecting success of 5318.81 'detect incorrect generation number': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_GENERATION "\070" \
		"generation for commit"

1+0 records in
1+0 records out
1 byte copied, 0.000694359 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000366346 s, 0.0 kB/s
commit-graph generation for commit 2ff07863aadb0941159dda60d980783f6b7c6213 is 5 < 15
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 81 - detect incorrect generation number

expecting success of 5318.82 'detect incorrect generation number': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_GENERATION "\01" \
		"non-zero generation number"

1+0 records in
1+0 records out
1 byte copied, 0.000518686 s, 1.9 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000299678 s, 0.0 kB/s
commit-graph has non-zero generation number for commit 2c45687afab8ea0442fe2feb61881deac6f37339, but zero elsewhere
commit-graph has non-zero generation number for commit 2ff07863aadb0941159dda60d980783f6b7c6213, but zero elsewhere
commit-graph has non-zero generation number for commit 6efda21b208586f8c4843ba0dac4f2717254a2fc, but zero elsewhere
commit-graph has non-zero generation number for commit 76c4cb0cede3ceaca44a1bb27edce46ba498dfad, but zero elsewhere
commit-graph has non-zero generation number for commit 7ec8a1d4f529d11ee65aa86406a3bd9771e573b7, but zero elsewhere
commit-graph has non-zero generation number for commit 82335b23aa7234320d6f8055243c852e4b6a5ca3, but zero elsewhere
commit-graph has non-zero generation number for commit d0dcf978085b712ac89a73020e40fb8b7e540ec4, but zero elsewhere
commit-graph has non-zero generation number for commit ddc8575ed6fc205127629848895ac35ba7529ace, but zero elsewhere
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 82 - detect incorrect generation number

expecting success of 5318.83 'detect incorrect commit date': 
	corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_DATE "\01" \
		"commit date"

1+0 records in
1+0 records out
1 byte copied, 0.000748694 s, 1.3 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000393348 s, 0.0 kB/s
commit date for commit 12a06f3a2c235980d878903e940b0570ddda4359 in commit-graph is 22393313 != 1112912353
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 83 - detect incorrect commit date

expecting success of 5318.84 'detect incorrect parent for octopus merge': 
	corrupt_graph_and_verify $GRAPH_BYTE_OCTOPUS "\01" \
		"invalid parent"

1+0 records in
1+0 records out
1 byte copied, 0.000640357 s, 1.6 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000389681 s, 0.0 kB/s
fatal: invalid parent position 16777216
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 84 - detect incorrect parent for octopus merge

expecting success of 5318.85 'detect invalid checksum hash': 
	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
		"incorrect checksum"

1+0 records in
1+0 records out
1 byte copied, 0.000624356 s, 1.6 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000333345 s, 0.0 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
ok 85 - detect invalid checksum hash

expecting success of 5318.86 'detect incorrect chunk count': 
	corrupt_graph_and_verify $GRAPH_BYTE_CHUNK_COUNT "\377" \
		"commit-graph file is too small to hold [0-9]* chunks" \
		$GRAPH_CHUNK_LOOKUP_OFFSET

1+0 records in
1+0 records out
1 byte copied, 0.000691692 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000450683 s, 0.0 kB/s
error: commit-graph file is too small to hold 255 chunks
error: commit-graph file is too small to hold 255 chunks
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
error: commit-graph file is too small to hold 255 chunks
ok 86 - detect incorrect chunk count

expecting success of 5318.87 'git fsck (checks commit-graph when config set to true)': 
	cd "$TRASH_DIRECTORY/full" &&
	git fsck &&
	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
		"incorrect checksum" &&
	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
	test_must_fail git -c core.commitGraph=true fsck

dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
1+0 records in
1+0 records out
1 byte copied, 0.000458683 s, 2.2 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000371681 s, 0.0 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
the commit-graph file has incorrect checksum and is likely corrupt
ok 87 - git fsck (checks commit-graph when config set to true)

expecting success of 5318.88 'git fsck (ignores commit-graph when config set to false)': 
	cd "$TRASH_DIRECTORY/full" &&
	git fsck &&
	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
		"incorrect checksum" &&
	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
	git -c core.commitGraph=false fsck

dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
1+0 records in
1+0 records out
1 byte copied, 0.000578021 s, 1.7 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000389681 s, 0.0 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
ok 88 - git fsck (ignores commit-graph when config set to false)

expecting success of 5318.89 'git fsck (checks commit-graph when config unset)': 
	cd "$TRASH_DIRECTORY/full" &&
	test_when_finished "git config core.commitGraph true" &&

	git fsck &&
	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
		"incorrect checksum" &&
	test_unconfig core.commitGraph &&
	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
	test_must_fail git fsck

dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
1+0 records in
1+0 records out
1 byte copied, 0.000696692 s, 1.4 kB/s
0+0 records in
0+0 records out
0 bytes copied, 0.000399348 s, 0.0 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
?? actual
?? commit-graph-after-gc
?? commit-graph-backup
?? commit-graph-before-gc
?? commit-graph-pre-write-test
?? commits-in
?? err
?? existing-idx
?? expect
?? in
?? new-idx
?? output
?? stderr
?? test_err
dangling tree 40771367e5b0a0c62eafabaac4494d311c5834b7
dangling commit 63d6d7935dc7a26dbeede4b52105dd78e9a0c6c9
the commit-graph file has incorrect checksum and is likely corrupt
ok 89 - git fsck (checks commit-graph when config unset)

expecting success of 5318.90 'setup non-the_repository tests': 
	rm -rf repo &&
	git init repo &&
	test_commit -C repo one &&
	test_commit -C repo two &&
	git -C repo config core.commitGraph true &&
	git -C repo rev-parse two | \
		git -C repo commit-graph write --stdin-commits

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/full/repo/.git/
[master (root-commit) 0ba3da9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 9f92fa5] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 90 - setup non-the_repository tests

expecting success of 5318.91 'parse_commit_in_graph works for non-the_repository': 
	test-tool repository parse_commit_in_graph \
		repo/.git repo "$(git -C repo rev-parse two)" >actual &&
	{
		git -C repo log --pretty=format:"%ct " -1 &&
		git -C repo rev-parse one
	} >expect &&
	test_cmp expect actual &&

	test-tool repository parse_commit_in_graph \
		repo/.git repo "$(git -C repo rev-parse one)" >actual &&
	git -C repo log --pretty="%ct" -1 one >expect &&
	test_cmp expect actual

ok 91 - parse_commit_in_graph works for non-the_repository

expecting success of 5318.92 'get_commit_tree_in_graph works for non-the_repository': 
	test-tool repository get_commit_tree_in_graph \
		repo/.git repo "$(git -C repo rev-parse two)" >actual &&
	git -C repo rev-parse two^{tree} >expect &&
	test_cmp expect actual &&

	test-tool repository get_commit_tree_in_graph \
		repo/.git repo "$(git -C repo rev-parse one)" >actual &&
	git -C repo rev-parse one^{tree} >expect &&
	test_cmp expect actual

ok 92 - get_commit_tree_in_graph works for non-the_repository

expecting success of 5318.93 'corrupt commit-graph write (broken parent)': 
	rm -rf repo &&
	git init repo &&
	(
		cd repo &&
		empty="$(git mktree </dev/null)" &&
		cat >broken <<-EOF &&
		tree $empty
		parent $ZERO_OID
		author whatever <whatever@example.com> 1234 -0000
		committer whatever <whatever@example.com> 1234 -0000

		broken commit
		EOF
		broken="$(git hash-object -w -t commit --literally broken)" &&
		git commit-tree -p "$broken" -m "good commit" "$empty" >good &&
		test_must_fail git commit-graph write --stdin-commits \
			<good 2>test_err &&
		test_i18ngrep "unable to parse commit" test_err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/full/repo/.git/
fatal: unable to parse commit 0000000000000000000000000000000000000000
ok 93 - corrupt commit-graph write (broken parent)

expecting success of 5318.94 'corrupt commit-graph write (missing tree)': 
	rm -rf repo &&
	git init repo &&
	(
		cd repo &&
		tree="$(git mktree </dev/null)" &&
		cat >broken <<-EOF &&
		parent $ZERO_OID
		author whatever <whatever@example.com> 1234 -0000
		committer whatever <whatever@example.com> 1234 -0000

		broken commit
		EOF
		broken="$(git hash-object -w -t commit --literally broken)" &&
		git commit-tree -p "$broken" -m "good" "$tree" >good &&
		test_must_fail git commit-graph write --stdin-commits \
			<good 2>test_err &&
		test_i18ngrep "unable to parse commit" test_err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/full/repo/.git/
fatal: unable to parse commit 2b6f5e209fea0912fdff2d553964d7a56d9fd44d
ok 94 - corrupt commit-graph write (missing tree)

expecting success of 5318.95 'set up and verify repo with generation data overflow chunk': 
	objdir=".git/objects" &&
	UNIX_EPOCH_ZERO="@0 +0000" &&
	FUTURE_DATE="@2147483646 +0000" &&
	cd "$TRASH_DIRECTORY" &&
	mkdir repo &&
	cd repo &&
	git init &&
	test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
	test_commit 2 &&
	test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
	git commit-graph write --reachable &&
	graph_read_expect 3 generation_data &&
	test_commit --date "$FUTURE_DATE" 4 &&
	test_commit 5 &&
	test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
	git branch left &&
	git reset --hard 3 &&
	test_commit 7 &&
	test_commit --date "$FUTURE_DATE" 8 &&
	test_commit 9 &&
	git branch right &&
	git reset --hard 3 &&
	test_merge M left right &&
	git commit-graph write --reachable &&
	graph_read_expect 10 "generation_data generation_data_overflow" &&
	git commit-graph verify

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/repo/.git/
[master (root-commit) 0131a52] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 846bb94] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master 165db75] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master d98781f] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 3c9e4bd] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[master 822b3d2] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
HEAD is now at 165db75 3
[master abf4d66] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[master 3769adc] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[master 6921632] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
HEAD is now at 165db75 3
Fast-forwarding to: left
Trying simple merge with right
Merge made by the 'octopus' strategy.
 4.t | 1 +
 5.t | 1 +
 6.t | 1 +
 7.t | 1 +
 8.t | 1 +
 9.t | 1 +
 6 files changed, 6 insertions(+)
 create mode 100644 4.t
 create mode 100644 5.t
 create mode 100644 6.t
 create mode 100644 7.t
 create mode 100644 8.t
 create mode 100644 9.t
ok 95 - set up and verify repo with generation data overflow chunk

expecting success of 5318.96 'check normal git operations: generation data overflow chunk repo': 
		cd "$TRASH_DIRECTORY/$DIR" &&
		graph_git_two_modes "log --oneline $BRANCH" &&
		graph_git_two_modes "log --topo-order $BRANCH" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
		graph_git_two_modes "branch -vv" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
	
ok 96 - check normal git operations: generation data overflow chunk repo

expecting success of 5318.97 'overflow during generation version upgrade': 
	git init overflow-v2-upgrade &&
	(
		cd overflow-v2-upgrade &&

		# This commit will have a date at two seconds past the Epoch,
		# and a (v1) generation number of 1, since it is a root commit.
		#
		# The offset will then be computed as 1-2, which will underflow
		# to 2^31, which is greater than the v2 offset small limit of
		# 2^31-1.
		#
		# This is sufficient to need a large offset table for the v2
		# generation numbers.
		test_commit --date "@2 +0000" base &&
		git repack -d &&

		# Test that upgrading from generation v1 to v2 correctly
		# produces the overflow table.
		git -c commitGraph.generationVersion=1 commit-graph write &&
		git -c commitGraph.generationVersion=2 commit-graph write \
			--changed-paths &&

		git rev-list --all
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5318-commit-graph/repo/overflow-v2-upgrade/.git/
[master (root-commit) b89bafe] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
b89bafebd219ef84734f57391e155dcedaccac5c
ok 97 - overflow during generation version upgrade

# passed all 97 test(s)
1..97
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5310-pack-bitmaps.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.git/
expecting success of 5310.1 'setup test repository': 
		rm -fr * .git &&
		git init &&
		git config pack.writeBitmapLookupTable false
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.git/
ok 1 - setup test repository

expecting success of 5310.2 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2283 /       2283
---------------------------------------------------------------------

Switched to a new branch 'other'
87e15289879c5c34553169b2be5c9d6b111519b2
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4747 /       4747
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 90a1514..63e663a
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 6a83e25..58d166b
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was f47c2b6).
Deleted branch merge-right (was ba9a821).
Deleted branch octo-other (was 63e663a).
Deleted branch octo-second (was 58d166b).
58d166b12a4ce065824c4a21dd38aef9f2d94667
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26599 /      26599
---------------------------------------------------------------------

Switched to branch 'other'
63e663a9348fa8f46b3f8835cb82274158356e6a
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26765 /      26765
---------------------------------------------------------------------

Switched to branch 'second'
ok 2 - setup repo with moderate-sized history

expecting success of 5310.3 'setup writing bitmaps during repack': 
		git config repack.writeBitmaps true
	
ok 3 - setup writing bitmaps during repack

expecting success of 5310.4 'full repack creates bitmaps': 
		GIT_TRACE2_EVENT="$(pwd)/trace" \
			git repack -ad &&
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		grep "\"key\":\"num_selected_commits\",\"value\":\"106\"" trace &&
		grep "\"key\":\"num_maximal_commits\",\"value\":\"107\"" trace
	
{"event":"data","sid":"20221228T074734.656563Z-Hc64317c2-P00006261/20221228T074734.675119Z-Hc64317c2-P00006263","thread":"main","time":"2022-12-28T07:47:34.802032Z","file":"pack-bitmap-write.c","line":324,"repo":1,"t_abs":0.130045,"t_rel":0.007129,"nesting":3,"category":"pack-bitmap-write","key":"num_selected_commits","value":"106"}
{"event":"data","sid":"20221228T074734.656563Z-Hc64317c2-P00006261/20221228T074734.675119Z-Hc64317c2-P00006263","thread":"main","time":"2022-12-28T07:47:34.802293Z","file":"pack-bitmap-write.c","line":326,"repo":1,"t_abs":0.130342,"t_rel":0.007426,"nesting":3,"category":"pack-bitmap-write","key":"num_maximal_commits","value":"107"}
ok 4 - full repack creates bitmaps

expecting success of 5310.5 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries loaded)
Found bitmap for '4b27f21bf7560051516fe49b50eb4063d0ea6f90'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 5 - rev-list --test-bitmap verifies bitmaps

expecting success of 5310.6 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 6 - counting commits via bitmap (full bitmap, second)

expecting success of 5310.7 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 7 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5310.8 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 8 - counting commits with limit (full bitmap, second)

expecting success of 5310.9 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 9 - counting non-linear history (full bitmap, second)

expecting success of 5310.10 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 10 - counting commits with limiting (full bitmap, second)

expecting success of 5310.11 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 11 - counting objects via bitmap (full bitmap, second)

expecting success of 5310.12 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 12 - enumerate commits (full bitmap, second)

expecting success of 5310.13 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 13 - enumerate --objects (full bitmap, second)

expecting success of 5310.14 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 14 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5310.15 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 15 - counting commits via bitmap (full bitmap, other)

expecting success of 5310.16 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 16 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5310.17 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 17 - counting commits with limit (full bitmap, other)

expecting success of 5310.18 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 18 - counting non-linear history (full bitmap, other)

expecting success of 5310.19 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 19 - counting commits with limiting (full bitmap, other)

expecting success of 5310.20 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 20 - counting objects via bitmap (full bitmap, other)

expecting success of 5310.21 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 21 - enumerate commits (full bitmap, other)

expecting success of 5310.22 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 22 - enumerate --objects (full bitmap, other)

expecting success of 5310.23 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 23 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5310.24 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 24 - clone from bitmapped repository

expecting success of 5310.25 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 25 - partial clone from bitmapped repository

expecting success of 5310.26 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
4b27f21bf7560051516fe49b50eb4063d0ea6f90
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58718 /      58718
---------------------------------------------------------------------

ok 26 - setup further non-bitmapped commits

expecting success of 5310.27 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 27 - counting commits via bitmap (partial bitmap, second)

expecting success of 5310.28 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 28 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5310.29 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 29 - counting commits with limit (partial bitmap, second)

expecting success of 5310.30 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 30 - counting non-linear history (partial bitmap, second)

expecting success of 5310.31 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 31 - counting commits with limiting (partial bitmap, second)

expecting success of 5310.32 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 32 - counting objects via bitmap (partial bitmap, second)

expecting success of 5310.33 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 33 - enumerate commits (partial bitmap, second)

expecting success of 5310.34 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 34 - enumerate --objects (partial bitmap, second)

expecting success of 5310.35 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 35 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5310.36 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 36 - counting commits via bitmap (partial bitmap, other)

expecting success of 5310.37 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 37 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5310.38 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 38 - counting commits with limit (partial bitmap, other)

expecting success of 5310.39 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 39 - counting non-linear history (partial bitmap, other)

expecting success of 5310.40 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 40 - counting commits with limiting (partial bitmap, other)

expecting success of 5310.41 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 41 - counting objects via bitmap (partial bitmap, other)

expecting success of 5310.42 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 42 - enumerate commits (partial bitmap, other)

expecting success of 5310.43 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 43 - enumerate --objects (partial bitmap, other)

expecting success of 5310.44 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 44 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5310.45 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.
   4b27f21..8ca4c84  second     -> second
ok 45 - fetch (partial bitmap)

expecting success of 5310.46 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second 170f281] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 46 - enumerating progress counts pack-reused objects

expecting success of 5310.47 'pack-objects respects --local (non-local loose)': 
		git init --bare alt.git &&
		echo $(pwd)/alt.git/objects >.git/objects/info/alternates &&
		echo content1 >file1 &&
		# non-local loose object which is not present in bitmapped pack
		altblob=$(GIT_DIR=alt.git git hash-object -w file1) &&
		# non-local loose object which is also present in bitmapped pack
		git cat-file blob $blob | GIT_DIR=alt.git git hash-object -w --stdin &&
		git add file1 &&
		test_tick &&
		git commit -m commit_file1 &&
		echo HEAD | git pack-objects --local --stdout --revs >1.pack &&
		git index-pack 1.pack &&
		list_packed_objects 1.idx >1.objects &&
		printf "%s\n" "$altblob" "$blob" >nonlocal-loose &&
		! has_any nonlocal-loose 1.objects
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/alt.git/
782f60206c837dcd3d441e106549ad6f58de55b5
[second 221f129] commit_file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
dd36206f014f4a4e3a28868ef4b88542f3a787b4
ok 47 - pack-objects respects --local (non-local loose)

expecting success of 5310.48 'pack-objects respects --honor-pack-keep (local non-bitmapped pack)': 
		echo content2 >file2 &&
		blob2=$(git hash-object -w file2) &&
		git add file2 &&
		test_tick &&
		git commit -m commit_file2 &&
		printf "%s\n" "$blob2" "$bitmaptip" >keepobjects &&
		pack2=$(git pack-objects pack2 <keepobjects) &&
		mv pack2-$pack2.* .git/objects/pack/ &&
		>.git/objects/pack/pack2-$pack2.keep &&
		rm $(objpath $blob2) &&
		echo HEAD | git pack-objects --honor-pack-keep --stdout --revs >2a.pack &&
		git index-pack 2a.pack &&
		list_packed_objects 2a.idx >2a.objects &&
		! has_any keepobjects 2a.objects
	
[second 4a4bb55] commit_file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
7e0dbbfbc62c1c0eb6c9ef6ea70d626b42de2717
ok 48 - pack-objects respects --honor-pack-keep (local non-bitmapped pack)

expecting success of 5310.49 'pack-objects respects --local (non-local pack)': 
		mv .git/objects/pack/pack2-$pack2.* alt.git/objects/pack/ &&
		echo HEAD | git pack-objects --local --stdout --revs >2b.pack &&
		git index-pack 2b.pack &&
		list_packed_objects 2b.idx >2b.objects &&
		! has_any keepobjects 2b.objects
	
9298d283da9db424de7484cb688acb7384c6ca68
ok 49 - pack-objects respects --local (non-local pack)

expecting success of 5310.50 'pack-objects respects --honor-pack-keep (local bitmapped pack)': 
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		packbitmap=$(basename $(cat output) .bitmap) &&
		list_packed_objects .git/objects/pack/$packbitmap.idx >packbitmap.objects &&
		test_when_finished "rm -f .git/objects/pack/$packbitmap.keep" &&
		>.git/objects/pack/$packbitmap.keep &&
		echo HEAD | git pack-objects --honor-pack-keep --stdout --revs >3a.pack &&
		git index-pack 3a.pack &&
		list_packed_objects 3a.idx >3a.objects &&
		! has_any packbitmap.objects 3a.objects
	
93627b1414e91d3b1a58bb3cb203d283895af121
ok 50 - pack-objects respects --honor-pack-keep (local bitmapped pack)

expecting success of 5310.51 'pack-objects respects --local (non-local bitmapped pack)': 
		mv .git/objects/pack/$packbitmap.* alt.git/objects/pack/ &&
		rm -f .git/objects/pack/multi-pack-index &&
		test_when_finished "mv alt.git/objects/pack/$packbitmap.* .git/objects/pack/" &&
		echo HEAD | git pack-objects --local --stdout --revs >3b.pack &&
		git index-pack 3b.pack &&
		list_packed_objects 3b.idx >3b.objects &&
		! has_any packbitmap.objects 3b.objects
	
58949b64475a2e8fd012c83356747a9449120c05
ok 51 - pack-objects respects --local (non-local bitmapped pack)

expecting success of 5310.52 'pack-objects to file can use bitmap': 
		# make sure we still have 1 bitmap index from previous tests
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		# verify equivalent packs are generated with/without using bitmap index
		packasha1=$(git pack-objects --no-use-bitmap-index --all packa </dev/null) &&
		packbsha1=$(git pack-objects --use-bitmap-index --all packb </dev/null) &&
		list_packed_objects packa-$packasha1.idx >packa.objects &&
		list_packed_objects packb-$packbsha1.idx >packb.objects &&
		test_cmp packa.objects packb.objects
	
ok 52 - pack-objects to file can use bitmap

expecting success of 5310.53 'full repack, reusing previous bitmaps': 
		git repack -ad &&
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output
	
ok 53 - full repack, reusing previous bitmaps

expecting success of 5310.54 'fetch (full bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.
   8ca4c84..4a4bb55  second     -> second
ok 54 - fetch (full bitmap)

expecting success of 5310.55 'create objects for missing-HAVE tests': 
		blob=$(echo "missing have" | git hash-object -w --stdin) &&
		tree=$(printf "100644 blob $blob\tfile\n" | git mktree) &&
		parent=$(echo parent | git commit-tree $tree) &&
		commit=$(echo commit | git commit-tree $tree -p $parent) &&
		cat >revs <<-EOF
		HEAD
		^HEAD^
		^$commit
		EOF
	
ok 55 - create objects for missing-HAVE tests

expecting success of 5310.56 'pack-objects respects --incremental': 
		cat >revs2 <<-EOF &&
		HEAD
		$commit
		EOF
		git pack-objects --incremental --stdout --revs <revs2 >4.pack &&
		git index-pack 4.pack &&
		list_packed_objects 4.idx >4.objects &&
		test_line_count = 4 4.objects &&
		git rev-list --objects $commit >revlist &&
		cut -d" " -f1 revlist |sort >objects &&
		test_cmp 4.objects objects
	
8b75b5f7013707f7c06077e7221babbff00448d0
ok 56 - pack-objects respects --incremental

expecting success of 5310.57 'pack with missing blob': 
		rm $(objpath $blob) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 57 - pack with missing blob

expecting success of 5310.58 'pack with missing tree': 
		rm $(objpath $tree) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 58 - pack with missing tree

expecting success of 5310.59 'pack with missing parent': 
		rm $(objpath $parent) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 59 - pack with missing parent

checking prerequisite: JGIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-JGIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-JGIT" &&
	jgit --version

)
t5310-pack-bitmaps.sh: 7: eval: jgit: not found
prerequisite JGIT not satisfied
checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
ok 60 # skip we can read jgit bitmaps (missing JGIT of JGIT,SHA1)

ok 61 # skip jgit can read our bitmaps (missing JGIT of JGIT,SHA1)

expecting success of 5310.62 'splitting packs does not generate bogus bitmaps': 
		test-tool genrandom foo $((1024 * 1024)) >rand &&
		git add rand &&
		git commit -m "commit with big file" &&
		git -c pack.packSizeLimit=500k repack -adb &&
		git init --bare no-bitmaps.git &&
		git -C no-bitmaps.git fetch .. HEAD
	
[second 10188cb] commit with big file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 rand
warning: minimum pack size limit is 1 MiB
warning: disabling bitmap writing, packs are split due to pack.packSizeLimit
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/no-bitmaps.git/
From ..
 * branch            HEAD       -> FETCH_HEAD
ok 62 - splitting packs does not generate bogus bitmaps

expecting success of 5310.63 'set up reusable pack': 
		rm -f .git/objects/pack/*.keep &&
		git repack -adb &&
		reusable_pack () {
			git for-each-ref --format="%(objectname)" |
			git pack-objects --delta-base-offset --revs --stdout "$@"
		}
	
ok 63 - set up reusable pack

expecting success of 5310.64 'pack reuse respects --honor-pack-keep': 
		test_when_finished "rm -f .git/objects/pack/*.keep" &&
		for i in .git/objects/pack/*.pack
		do
			>${i%.pack}.keep || return 1
		done &&
		reusable_pack --honor-pack-keep >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 64 - pack reuse respects --honor-pack-keep

expecting success of 5310.65 'pack reuse respects --local': 
		mv .git/objects/pack/* alt.git/objects/pack/ &&
		test_when_finished "mv alt.git/objects/pack/* .git/objects/pack/" &&
		reusable_pack --local >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 65 - pack reuse respects --local

expecting success of 5310.66 'pack reuse respects --incremental': 
		reusable_pack --incremental >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 66 - pack reuse respects --incremental

expecting success of 5310.67 'truncated bitmap fails gracefully (ewah)': 
		test_config pack.writebitmaphashcache false &&
		test_config pack.writebitmaplookuptable false &&
		git repack -ad &&
		git rev-list --use-bitmap-index --count --all >expect &&
		bitmap=$(ls .git/objects/pack/*.bitmap) &&
		test_when_finished "rm -f $bitmap" &&
		test_copy_bytes 256 <$bitmap >$bitmap.tmp &&
		mv -f $bitmap.tmp $bitmap &&
		git rev-list --use-bitmap-index --count --all >actual 2>stderr &&
		test_cmp expect actual &&
		test_i18ngrep corrupt.ewah.bitmap stderr
	
error: corrupt ewah bitmap: eof in data (54 bytes short)
error: corrupt ewah bitmap: eof in data (54 bytes short)
ok 67 - truncated bitmap fails gracefully (ewah)

expecting success of 5310.68 'truncated bitmap fails gracefully (cache)': 
		git config pack.writeBitmapLookupTable false &&
		git repack -ad &&
		git rev-list --use-bitmap-index --count --all >expect &&
		bitmap=$(ls .git/objects/pack/*.bitmap) &&
		test_when_finished "rm -f $bitmap" &&
		test_copy_bytes 512 <$bitmap >$bitmap.tmp &&
		mv -f $bitmap.tmp $bitmap &&
		git rev-list --use-bitmap-index --count --all >actual 2>stderr &&
		test_cmp expect actual &&
		test_i18ngrep corrupted.bitmap.index stderr
	
error: corrupted bitmap index file (too short to fit hash cache)
error: corrupted bitmap index file (too short to fit hash cache)
ok 68 - truncated bitmap fails gracefully (cache)

expecting success of 5310.69 'set up thin delta-reuse parent': 
		# This first commit contains the buried base object.
		test-tool genrandom delta 16384 >file &&
		git add file &&
		git commit -m "delta base" &&
		base=$(git rev-parse --verify HEAD:file) &&

		# These intermediate commits bury the base back in history.
		# This becomes the "old" state.
		for i in 1 2 3 4 5
		do
			echo $i >file &&
			git commit -am "intermediate $i" || return 1
		done &&
		git branch delta-reuse-old &&

		# And now our new history has a delta against the buried base. Note
		# that this must be smaller than the original file, since pack-objects
		# prefers to create deltas from smaller objects to larger.
		test-tool genrandom delta 16300 >file &&
		git commit -am "delta result" &&
		delta=$(git rev-parse --verify HEAD:file) &&
		git branch delta-reuse-new &&

		# Repack with bitmaps and double check that we have the expected delta
		# relationship.
		git repack -adb &&
		have_delta $delta $base
	
[second 069a8d5] delta base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[second c9c0689] intermediate 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
[second ecb6ddb] intermediate 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 7163c0a] intermediate 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 0d2d7dc] intermediate 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 33d3eec] intermediate 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 3bff6fe] delta result
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 69 - set up thin delta-reuse parent

expecting success of 5310.70 'fetch without bitmaps ignores delta against old base': 
		test_config pack.usebitmaps false &&
		test_when_finished "rm -rf client.git" &&
		git init --bare client.git &&
		(
			cd client.git &&
			git config transfer.unpackLimit 1 &&
			git fetch .. delta-reuse-old:delta-reuse-old &&
			git fetch .. delta-reuse-new:delta-reuse-new &&
			have_delta $delta $ZERO_OID
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/client.git/
From ..
 * [new branch]      delta-reuse-old -> delta-reuse-old
From ..
 * [new branch]      delta-reuse-new -> delta-reuse-new
ok 70 - fetch without bitmaps ignores delta against old base

expecting success of 5310.71 'fetch with bitmaps can reuse old base': 
		test_config pack.usebitmaps true &&
		test_when_finished "rm -rf client.git" &&
		git init --bare client.git &&
		(
			cd client.git &&
			git config transfer.unpackLimit 1 &&
			git fetch .. delta-reuse-old:delta-reuse-old &&
			git fetch .. delta-reuse-new:delta-reuse-new &&
			have_delta $delta $base
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/client.git/
From ..
 * [new branch]      delta-reuse-old -> delta-reuse-old
From ..
 * [new branch]      delta-reuse-new -> delta-reuse-new
ok 71 - fetch with bitmaps can reuse old base

expecting success of 5310.72 'pack.preferBitmapTips': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			# create enough commits that not all are receive bitmap
			# coverage even if they are all at the tip of some reference.
			test_commit_bulk --message="%s" 103 &&

			git rev-list HEAD >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git repack -adb &&
			test-tool bitmap list-commits | sort >bitmaps &&

			# remember which commits did not receive bitmaps
			comm -13 bitmaps commits >before &&
			test_file_not_empty before &&

			# mark the commits which did not receive bitmaps as preferred,
			# and generate the bitmap again
			perl -pe "s{^}{create refs/tags/include/$. }" <before |
				git update-ref --stdin &&
			git -c pack.preferBitmapTips=refs/tags/include repack -adb &&

			# finally, check that the commit(s) without bitmap coverage
			# are not the same ones as before
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26915 /      26915
---------------------------------------------------------------------

--- before	2022-12-28 07:47:53.745068883 +0000
+++ after	2022-12-28 07:47:54.010078623 +0000
@@ -1 +1 @@
-5856eb049fa881263aa3ba7ed2e5edbf7e1fbcac
+6a6543fc00ae3e5f9847cf9ca452037bed353779
ok 72 - pack.preferBitmapTips

expecting success of 5310.73 'complains about multiple pack bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit base &&

			git repack -adb &&
			bitmap="$(ls .git/objects/pack/pack-*.bitmap)" &&
			mv "$bitmap" "$bitmap.bak" &&

			test_commit other &&
			git repack -ab &&

			mv "$bitmap.bak" "$bitmap" &&

			find .git/objects/pack -type f -name "*.pack" >packs &&
			find .git/objects/pack -type f -name "*.bitmap" >bitmaps &&
			test_line_count = 2 packs &&
			test_line_count = 2 bitmaps &&

			git rev-list --use-bitmap-index HEAD 2>err &&
			grep "ignoring extra bitmap file" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/repo/.git/
[master (root-commit) 5925c4e] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master e7044c3] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
e7044c3d0754f94d7cb91400d11711b5667d7a56
5925c4e1ec8bac94f428d0e74df0e946acb72c2f
warning: ignoring extra bitmap file: '.git/objects/pack/pack-90860c48cd6b78bb32a9b104cd5b49799ab8c8ac.pack'
ok 73 - complains about multiple pack bitmaps

expecting success of 5310.74 'incremental repack fails when bitmaps are requested': 
	test_commit more-1 &&
	test_must_fail git repack -d 2>err &&
	test_i18ngrep "Incremental repacks are incompatible with bitmap" err

[second 92160a7] more-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 more-1.t
fatal: Incremental repacks are incompatible with bitmap indexes.  Use
ok 74 - incremental repack fails when bitmaps are requested

expecting success of 5310.75 'incremental repack can disable bitmaps': 
	test_commit more-2 &&
	git repack -d --no-write-bitmap-index

[second 948e79d] more-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 more-2.t
ok 75 - incremental repack can disable bitmaps

expecting success of 5310.76 'setup test repository': 
		rm -fr * .git &&
		git init &&
		git config pack.writeBitmapLookupTable true
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.git/
ok 76 - setup test repository

expecting success of 5310.77 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2285 /       2285
---------------------------------------------------------------------

Switched to a new branch 'other'
ba1341296fdbfd4aa31ff7f65ac1955a6029d3f5
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4745 /       4745
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 150f465..e4b988d
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 52fd437..151b719
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was 3721c57).
Deleted branch merge-right (was 23f453a).
Deleted branch octo-other (was e4b988d).
Deleted branch octo-second (was 151b719).
151b71991b0d753adf112adb173a9a0ca18517af
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26592 /      26592
---------------------------------------------------------------------

Switched to branch 'other'
e4b988dab777ba2540ed0b376e61d3b4a6888103
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26761 /      26761
---------------------------------------------------------------------

Switched to branch 'second'
ok 77 - setup repo with moderate-sized history

expecting success of 5310.78 'setup writing bitmaps during repack': 
		git config repack.writeBitmaps true
	
ok 78 - setup writing bitmaps during repack

expecting success of 5310.79 'full repack creates bitmaps': 
		GIT_TRACE2_EVENT="$(pwd)/trace" \
			git repack -ad &&
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		grep "\"key\":\"num_selected_commits\",\"value\":\"106\"" trace &&
		grep "\"key\":\"num_maximal_commits\",\"value\":\"107\"" trace
	
{"event":"data","sid":"20221228T074800.414839Z-Hc64317c2-P000071f5/20221228T074800.437297Z-Hc64317c2-P000071f9","thread":"main","time":"2022-12-28T07:48:00.589973Z","file":"pack-bitmap-write.c","line":324,"repo":1,"t_abs":0.155305,"t_rel":0.009548,"nesting":3,"category":"pack-bitmap-write","key":"num_selected_commits","value":"106"}
{"event":"data","sid":"20221228T074800.414839Z-Hc64317c2-P000071f5/20221228T074800.437297Z-Hc64317c2-P000071f9","thread":"main","time":"2022-12-28T07:48:00.590356Z","file":"pack-bitmap-write.c","line":326,"repo":1,"t_abs":0.155717,"t_rel":0.009960,"nesting":3,"category":"pack-bitmap-write","key":"num_maximal_commits","value":"107"}
ok 79 - full repack creates bitmaps

expecting success of 5310.80 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries)
Found bitmap for '198cee1edd631d1da0906a20249e6732c8959756'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 80 - rev-list --test-bitmap verifies bitmaps

expecting success of 5310.81 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 81 - counting commits via bitmap (full bitmap, second)

expecting success of 5310.82 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 82 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5310.83 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 83 - counting commits with limit (full bitmap, second)

expecting success of 5310.84 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 84 - counting non-linear history (full bitmap, second)

expecting success of 5310.85 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 85 - counting commits with limiting (full bitmap, second)

expecting success of 5310.86 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 86 - counting objects via bitmap (full bitmap, second)

expecting success of 5310.87 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 87 - enumerate commits (full bitmap, second)

expecting success of 5310.88 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 88 - enumerate --objects (full bitmap, second)

expecting success of 5310.89 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 89 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5310.90 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 90 - counting commits via bitmap (full bitmap, other)

expecting success of 5310.91 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 91 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5310.92 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 92 - counting commits with limit (full bitmap, other)

expecting success of 5310.93 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 93 - counting non-linear history (full bitmap, other)

expecting success of 5310.94 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 94 - counting commits with limiting (full bitmap, other)

expecting success of 5310.95 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 95 - counting objects via bitmap (full bitmap, other)

expecting success of 5310.96 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 96 - enumerate commits (full bitmap, other)

expecting success of 5310.97 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 97 - enumerate --objects (full bitmap, other)

expecting success of 5310.98 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 98 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5310.99 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 99 - clone from bitmapped repository

expecting success of 5310.100 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 100 - partial clone from bitmapped repository

expecting success of 5310.101 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
198cee1edd631d1da0906a20249e6732c8959756
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58697 /      58697
---------------------------------------------------------------------

ok 101 - setup further non-bitmapped commits

expecting success of 5310.102 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 102 - counting commits via bitmap (partial bitmap, second)

expecting success of 5310.103 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 103 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5310.104 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 104 - counting commits with limit (partial bitmap, second)

expecting success of 5310.105 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 105 - counting non-linear history (partial bitmap, second)

expecting success of 5310.106 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 106 - counting commits with limiting (partial bitmap, second)

expecting success of 5310.107 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 107 - counting objects via bitmap (partial bitmap, second)

expecting success of 5310.108 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 108 - enumerate commits (partial bitmap, second)

expecting success of 5310.109 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 109 - enumerate --objects (partial bitmap, second)

expecting success of 5310.110 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 110 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5310.111 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 111 - counting commits via bitmap (partial bitmap, other)

expecting success of 5310.112 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 112 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5310.113 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 113 - counting commits with limit (partial bitmap, other)

expecting success of 5310.114 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 114 - counting non-linear history (partial bitmap, other)

expecting success of 5310.115 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 115 - counting commits with limiting (partial bitmap, other)

expecting success of 5310.116 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 116 - counting objects via bitmap (partial bitmap, other)

expecting success of 5310.117 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 117 - enumerate commits (partial bitmap, other)

expecting success of 5310.118 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 118 - enumerate --objects (partial bitmap, other)

expecting success of 5310.119 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 119 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5310.120 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.
   198cee1..e235b55  second     -> second
ok 120 - fetch (partial bitmap)

expecting success of 5310.121 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second e3be3b9] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 121 - enumerating progress counts pack-reused objects

expecting success of 5310.122 'pack-objects respects --local (non-local loose)': 
		git init --bare alt.git &&
		echo $(pwd)/alt.git/objects >.git/objects/info/alternates &&
		echo content1 >file1 &&
		# non-local loose object which is not present in bitmapped pack
		altblob=$(GIT_DIR=alt.git git hash-object -w file1) &&
		# non-local loose object which is also present in bitmapped pack
		git cat-file blob $blob | GIT_DIR=alt.git git hash-object -w --stdin &&
		git add file1 &&
		test_tick &&
		git commit -m commit_file1 &&
		echo HEAD | git pack-objects --local --stdout --revs >1.pack &&
		git index-pack 1.pack &&
		list_packed_objects 1.idx >1.objects &&
		printf "%s\n" "$altblob" "$blob" >nonlocal-loose &&
		! has_any nonlocal-loose 1.objects
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/alt.git/
782f60206c837dcd3d441e106549ad6f58de55b5
[second 5f1832f] commit_file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
1f8d28dd71daa71547bcd477b52da8b028658007
ok 122 - pack-objects respects --local (non-local loose)

expecting success of 5310.123 'pack-objects respects --honor-pack-keep (local non-bitmapped pack)': 
		echo content2 >file2 &&
		blob2=$(git hash-object -w file2) &&
		git add file2 &&
		test_tick &&
		git commit -m commit_file2 &&
		printf "%s\n" "$blob2" "$bitmaptip" >keepobjects &&
		pack2=$(git pack-objects pack2 <keepobjects) &&
		mv pack2-$pack2.* .git/objects/pack/ &&
		>.git/objects/pack/pack2-$pack2.keep &&
		rm $(objpath $blob2) &&
		echo HEAD | git pack-objects --honor-pack-keep --stdout --revs >2a.pack &&
		git index-pack 2a.pack &&
		list_packed_objects 2a.idx >2a.objects &&
		! has_any keepobjects 2a.objects
	
[second 30d3bc3] commit_file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ccd4fdf0a5acfe3d98f865b7bb0327ec15dcc283
ok 123 - pack-objects respects --honor-pack-keep (local non-bitmapped pack)

expecting success of 5310.124 'pack-objects respects --local (non-local pack)': 
		mv .git/objects/pack/pack2-$pack2.* alt.git/objects/pack/ &&
		echo HEAD | git pack-objects --local --stdout --revs >2b.pack &&
		git index-pack 2b.pack &&
		list_packed_objects 2b.idx >2b.objects &&
		! has_any keepobjects 2b.objects
	
f5d373009c2b1969012d4f9d5b2f86fb3596cc7d
ok 124 - pack-objects respects --local (non-local pack)

expecting success of 5310.125 'pack-objects respects --honor-pack-keep (local bitmapped pack)': 
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		packbitmap=$(basename $(cat output) .bitmap) &&
		list_packed_objects .git/objects/pack/$packbitmap.idx >packbitmap.objects &&
		test_when_finished "rm -f .git/objects/pack/$packbitmap.keep" &&
		>.git/objects/pack/$packbitmap.keep &&
		echo HEAD | git pack-objects --honor-pack-keep --stdout --revs >3a.pack &&
		git index-pack 3a.pack &&
		list_packed_objects 3a.idx >3a.objects &&
		! has_any packbitmap.objects 3a.objects
	
e24e821176a075cbdd316e6461b8047630c21cf4
ok 125 - pack-objects respects --honor-pack-keep (local bitmapped pack)

expecting success of 5310.126 'pack-objects respects --local (non-local bitmapped pack)': 
		mv .git/objects/pack/$packbitmap.* alt.git/objects/pack/ &&
		rm -f .git/objects/pack/multi-pack-index &&
		test_when_finished "mv alt.git/objects/pack/$packbitmap.* .git/objects/pack/" &&
		echo HEAD | git pack-objects --local --stdout --revs >3b.pack &&
		git index-pack 3b.pack &&
		list_packed_objects 3b.idx >3b.objects &&
		! has_any packbitmap.objects 3b.objects
	
490279d640d4420dec6709f41c902babcdcd0909
ok 126 - pack-objects respects --local (non-local bitmapped pack)

expecting success of 5310.127 'pack-objects to file can use bitmap': 
		# make sure we still have 1 bitmap index from previous tests
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output &&
		# verify equivalent packs are generated with/without using bitmap index
		packasha1=$(git pack-objects --no-use-bitmap-index --all packa </dev/null) &&
		packbsha1=$(git pack-objects --use-bitmap-index --all packb </dev/null) &&
		list_packed_objects packa-$packasha1.idx >packa.objects &&
		list_packed_objects packb-$packbsha1.idx >packb.objects &&
		test_cmp packa.objects packb.objects
	
ok 127 - pack-objects to file can use bitmap

expecting success of 5310.128 'full repack, reusing previous bitmaps': 
		git repack -ad &&
		ls .git/objects/pack/ | grep bitmap >output &&
		test_line_count = 1 output
	
ok 128 - full repack, reusing previous bitmaps

expecting success of 5310.129 'fetch (full bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/.
   e235b55..30d3bc3  second     -> second
ok 129 - fetch (full bitmap)

expecting success of 5310.130 'create objects for missing-HAVE tests': 
		blob=$(echo "missing have" | git hash-object -w --stdin) &&
		tree=$(printf "100644 blob $blob\tfile\n" | git mktree) &&
		parent=$(echo parent | git commit-tree $tree) &&
		commit=$(echo commit | git commit-tree $tree -p $parent) &&
		cat >revs <<-EOF
		HEAD
		^HEAD^
		^$commit
		EOF
	
ok 130 - create objects for missing-HAVE tests

expecting success of 5310.131 'pack-objects respects --incremental': 
		cat >revs2 <<-EOF &&
		HEAD
		$commit
		EOF
		git pack-objects --incremental --stdout --revs <revs2 >4.pack &&
		git index-pack 4.pack &&
		list_packed_objects 4.idx >4.objects &&
		test_line_count = 4 4.objects &&
		git rev-list --objects $commit >revlist &&
		cut -d" " -f1 revlist |sort >objects &&
		test_cmp 4.objects objects
	
1e8f46ebad1e10b652b01fd3a4d83b253b207371
ok 131 - pack-objects respects --incremental

expecting success of 5310.132 'pack with missing blob': 
		rm $(objpath $blob) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 132 - pack with missing blob

expecting success of 5310.133 'pack with missing tree': 
		rm $(objpath $tree) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 133 - pack with missing tree

expecting success of 5310.134 'pack with missing parent': 
		rm $(objpath $parent) &&
		git pack-objects --stdout --revs <revs >/dev/null
	
ok 134 - pack with missing parent

ok 135 # skip we can read jgit bitmaps (missing JGIT of JGIT,SHA1)

ok 136 # skip jgit can read our bitmaps (missing JGIT of JGIT,SHA1)

expecting success of 5310.137 'splitting packs does not generate bogus bitmaps': 
		test-tool genrandom foo $((1024 * 1024)) >rand &&
		git add rand &&
		git commit -m "commit with big file" &&
		git -c pack.packSizeLimit=500k repack -adb &&
		git init --bare no-bitmaps.git &&
		git -C no-bitmaps.git fetch .. HEAD
	
[second a4a7ee6] commit with big file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 rand
warning: minimum pack size limit is 1 MiB
warning: disabling bitmap writing, packs are split due to pack.packSizeLimit
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/no-bitmaps.git/
From ..
 * branch            HEAD       -> FETCH_HEAD
ok 137 - splitting packs does not generate bogus bitmaps

expecting success of 5310.138 'set up reusable pack': 
		rm -f .git/objects/pack/*.keep &&
		git repack -adb &&
		reusable_pack () {
			git for-each-ref --format="%(objectname)" |
			git pack-objects --delta-base-offset --revs --stdout "$@"
		}
	
ok 138 - set up reusable pack

expecting success of 5310.139 'pack reuse respects --honor-pack-keep': 
		test_when_finished "rm -f .git/objects/pack/*.keep" &&
		for i in .git/objects/pack/*.pack
		do
			>${i%.pack}.keep || return 1
		done &&
		reusable_pack --honor-pack-keep >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 139 - pack reuse respects --honor-pack-keep

expecting success of 5310.140 'pack reuse respects --local': 
		mv .git/objects/pack/* alt.git/objects/pack/ &&
		test_when_finished "mv alt.git/objects/pack/* .git/objects/pack/" &&
		reusable_pack --local >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 140 - pack reuse respects --local

expecting success of 5310.141 'pack reuse respects --incremental': 
		reusable_pack --incremental >empty.pack &&
		git index-pack empty.pack &&
		git show-index <empty.idx >actual &&
		test_must_be_empty actual
	
029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 141 - pack reuse respects --incremental

expecting success of 5310.142 'truncated bitmap fails gracefully (ewah)': 
		test_config pack.writebitmaphashcache false &&
		test_config pack.writebitmaplookuptable false &&
		git repack -ad &&
		git rev-list --use-bitmap-index --count --all >expect &&
		bitmap=$(ls .git/objects/pack/*.bitmap) &&
		test_when_finished "rm -f $bitmap" &&
		test_copy_bytes 256 <$bitmap >$bitmap.tmp &&
		mv -f $bitmap.tmp $bitmap &&
		git rev-list --use-bitmap-index --count --all >actual 2>stderr &&
		test_cmp expect actual &&
		test_i18ngrep corrupt.ewah.bitmap stderr
	
error: corrupt ewah bitmap: eof in data (54 bytes short)
error: corrupt ewah bitmap: eof in data (54 bytes short)
ok 142 - truncated bitmap fails gracefully (ewah)

expecting success of 5310.143 'truncated bitmap fails gracefully (cache)': 
		git config pack.writeBitmapLookupTable true &&
		git repack -ad &&
		git rev-list --use-bitmap-index --count --all >expect &&
		bitmap=$(ls .git/objects/pack/*.bitmap) &&
		test_when_finished "rm -f $bitmap" &&
		test_copy_bytes 512 <$bitmap >$bitmap.tmp &&
		mv -f $bitmap.tmp $bitmap &&
		git rev-list --use-bitmap-index --count --all >actual 2>stderr &&
		test_cmp expect actual &&
		test_i18ngrep corrupted.bitmap.index stderr
	
error: corrupted bitmap index file (too short to fit hash cache)
error: corrupted bitmap index file (too short to fit hash cache)
ok 143 - truncated bitmap fails gracefully (cache)

expecting success of 5310.144 'set up thin delta-reuse parent': 
		# This first commit contains the buried base object.
		test-tool genrandom delta 16384 >file &&
		git add file &&
		git commit -m "delta base" &&
		base=$(git rev-parse --verify HEAD:file) &&

		# These intermediate commits bury the base back in history.
		# This becomes the "old" state.
		for i in 1 2 3 4 5
		do
			echo $i >file &&
			git commit -am "intermediate $i" || return 1
		done &&
		git branch delta-reuse-old &&

		# And now our new history has a delta against the buried base. Note
		# that this must be smaller than the original file, since pack-objects
		# prefers to create deltas from smaller objects to larger.
		test-tool genrandom delta 16300 >file &&
		git commit -am "delta result" &&
		delta=$(git rev-parse --verify HEAD:file) &&
		git branch delta-reuse-new &&

		# Repack with bitmaps and double check that we have the expected delta
		# relationship.
		git repack -adb &&
		have_delta $delta $base
	
[second 6f75596] delta base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[second dee9a69] intermediate 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
[second ba547e3] intermediate 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 8486c48] intermediate 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 7bd2147] intermediate 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 40848f9] intermediate 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[second 226687a] delta result
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 144 - set up thin delta-reuse parent

expecting success of 5310.145 'fetch without bitmaps ignores delta against old base': 
		test_config pack.usebitmaps false &&
		test_when_finished "rm -rf client.git" &&
		git init --bare client.git &&
		(
			cd client.git &&
			git config transfer.unpackLimit 1 &&
			git fetch .. delta-reuse-old:delta-reuse-old &&
			git fetch .. delta-reuse-new:delta-reuse-new &&
			have_delta $delta $ZERO_OID
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/client.git/
From ..
 * [new branch]      delta-reuse-old -> delta-reuse-old
From ..
 * [new branch]      delta-reuse-new -> delta-reuse-new
ok 145 - fetch without bitmaps ignores delta against old base

expecting success of 5310.146 'fetch with bitmaps can reuse old base': 
		test_config pack.usebitmaps true &&
		test_when_finished "rm -rf client.git" &&
		git init --bare client.git &&
		(
			cd client.git &&
			git config transfer.unpackLimit 1 &&
			git fetch .. delta-reuse-old:delta-reuse-old &&
			git fetch .. delta-reuse-new:delta-reuse-new &&
			have_delta $delta $base
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/client.git/
From ..
 * [new branch]      delta-reuse-old -> delta-reuse-old
From ..
 * [new branch]      delta-reuse-new -> delta-reuse-new
ok 146 - fetch with bitmaps can reuse old base

expecting success of 5310.147 'pack.preferBitmapTips': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable true &&

			# create enough commits that not all are receive bitmap
			# coverage even if they are all at the tip of some reference.
			test_commit_bulk --message="%s" 103 &&

			git rev-list HEAD >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git repack -adb &&
			test-tool bitmap list-commits | sort >bitmaps &&

			# remember which commits did not receive bitmaps
			comm -13 bitmaps commits >before &&
			test_file_not_empty before &&

			# mark the commits which did not receive bitmaps as preferred,
			# and generate the bitmap again
			perl -pe "s{^}{create refs/tags/include/$. }" <before |
				git update-ref --stdin &&
			git -c pack.preferBitmapTips=refs/tags/include repack -adb &&

			# finally, check that the commit(s) without bitmap coverage
			# are not the same ones as before
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26911 /      26911
---------------------------------------------------------------------

--- before	2022-12-28 07:48:21.166076759 +0000
+++ after	2022-12-28 07:48:21.436086683 +0000
@@ -1 +1 @@
-9718e4a2aa0965a4c989e11fd561a2ba677aab12
+537dc451b9c2bcb4d110b3ab060f700a01e42220
ok 147 - pack.preferBitmapTips

expecting success of 5310.148 'complains about multiple pack bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable true &&

			test_commit base &&

			git repack -adb &&
			bitmap="$(ls .git/objects/pack/pack-*.bitmap)" &&
			mv "$bitmap" "$bitmap.bak" &&

			test_commit other &&
			git repack -ab &&

			mv "$bitmap.bak" "$bitmap" &&

			find .git/objects/pack -type f -name "*.pack" >packs &&
			find .git/objects/pack -type f -name "*.bitmap" >bitmaps &&
			test_line_count = 2 packs &&
			test_line_count = 2 bitmaps &&

			git rev-list --use-bitmap-index HEAD 2>err &&
			grep "ignoring extra bitmap file" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5310-pack-bitmaps/repo/.git/
[master (root-commit) 9bd7d14] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 041b8b9] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
041b8b9504e3f861aba3b5ec98e5098fe4b8eb05
9bd7d14dc2b99d90ac5e46d23d021dd858439d2b
warning: ignoring extra bitmap file: '.git/objects/pack/pack-3293a28f441fa8aac284126cee84a7abbf998eb4.pack'
ok 148 - complains about multiple pack bitmaps

expecting success of 5310.149 'verify writing bitmap lookup table when enabled': 
	GIT_TRACE2_EVENT="$(pwd)/trace2" \
		git repack -ad &&
	grep "\"label\":\"writing_lookup_table\"" trace2

{"event":"region_enter","sid":"20221228T074822.422279Z-Hc64317c2-P00007d2b/20221228T074822.444523Z-Hc64317c2-P00007d36","thread":"main","time":"2022-12-28T07:48:22.641775Z","file":"pack-bitmap-write.c","line":717,"repo":1,"nesting":2,"category":"pack-bitmap-write","label":"writing_lookup_table"}
{"event":"region_leave","sid":"20221228T074822.422279Z-Hc64317c2-P00007d2b/20221228T074822.444523Z-Hc64317c2-P00007d36","thread":"main","time":"2022-12-28T07:48:22.642144Z","file":"pack-bitmap-write.c","line":744,"repo":1,"t_rel":0.000379,"nesting":2,"category":"pack-bitmap-write","label":"writing_lookup_table"}
ok 149 - verify writing bitmap lookup table when enabled

expecting success of 5310.150 'truncated bitmap fails gracefully (lookup table)': 
	test_config pack.writebitmaphashcache false &&
	git repack -adb &&
	git rev-list --use-bitmap-index --count --all >expect &&
	bitmap=$(ls .git/objects/pack/*.bitmap) &&
	test_when_finished "rm -f $bitmap" &&
	test_copy_bytes 512 <$bitmap >$bitmap.tmp &&
	mv -f $bitmap.tmp $bitmap &&
	git rev-list --use-bitmap-index --count --all >actual 2>stderr &&
	test_cmp expect actual &&
	test_i18ngrep corrupted.bitmap.index stderr

error: corrupted bitmap index file (too short to fit lookup table)
error: corrupted bitmap index file (too short to fit lookup table)
ok 150 - truncated bitmap fails gracefully (lookup table)

# passed all 150 test(s)
1..150
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5321-pack-large-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5321-pack-large-objects/.git/
expecting success of 5321.1 'setup': 
	clear_packs &&
	{
		pack_header 2 &&
		pack_obj $A $B &&
		pack_obj $B
	} >ab.pack &&
	pack_trailer ab.pack &&
	git index-pack --stdin <ab.pack

pack	8af524300e46c11647862073e882d467bc0dd22d
ok 1 - setup

expecting success of 5321.2 'repack large deltas': 
	printf "%s\\n" $A $B |
	GIT_TEST_OE_DELTA_SIZE=2 git pack-objects tmp-pack

aee080dc5b8a48f951541c0ad63f65af48847a6f
ok 2 - repack large deltas

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5320-delta-islands.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5320-delta-islands/.git/
expecting success of 5320.1 'setup commits': 
	commit one seed 1 &&
	commit two seed 12

one=babc1f87e2baa9f6ad764af981fccdd2da48016e
two=ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 1 - setup commits

expecting success of 5320.2 'vanilla repack deltas one against two': 
	git repack -adf &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 2 - vanilla repack deltas one against two

expecting success of 5320.3 'island repack with no island definition is vanilla': 
	git repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 3 - island repack with no island definition is vanilla

expecting success of 5320.4 'island repack with no matches is vanilla': 
	git -c "pack.island=refs/foo" repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 4 - island repack with no matches is vanilla

expecting success of 5320.5 'separate islands disallows delta': 
	git -c "pack.island=refs/heads/(.*)" repack -adfi &&
	! is_delta_base $one $two &&
	! is_delta_base $two $one

babc1f87e2baa9f6ad764af981fccdd2da48016e has base 0000000000000000000000000000000000000000
ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e has base 0000000000000000000000000000000000000000
ok 5 - separate islands disallows delta

expecting success of 5320.6 'same island allows delta': 
	git -c "pack.island=refs/heads" repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 6 - same island allows delta

expecting success of 5320.7 'coalesce same-named islands': 
	git \
		-c "pack.island=refs/(.*)/one" \
		-c "pack.island=refs/(.*)/two" \
		repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 7 - coalesce same-named islands

expecting success of 5320.8 'island restrictions drop reused deltas': 
	git repack -adfi &&
	is_delta_base $one $two &&
	git -c "pack.island=refs/heads/(.*)" repack -adi &&
	! is_delta_base $one $two &&
	! is_delta_base $two $one

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
babc1f87e2baa9f6ad764af981fccdd2da48016e has base 0000000000000000000000000000000000000000
ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e has base 0000000000000000000000000000000000000000
ok 8 - island restrictions drop reused deltas

expecting success of 5320.9 'island regexes are left-anchored': 
	git -c "pack.island=heads/(.*)" repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 9 - island regexes are left-anchored

expecting success of 5320.10 'island regexes follow last-one-wins scheme': 
	git \
		-c "pack.island=refs/heads/(.*)" \
		-c "pack.island=refs/heads/" \
		repack -adfi &&
	is_delta_base $one $two

babc1f87e2baa9f6ad764af981fccdd2da48016e has base ce1aaaff2e8846bd2f36b1a0317cacaec6fc257e
ok 10 - island regexes follow last-one-wins scheme

expecting success of 5320.11 'setup shared history': 
	commit root shared root &&
	commit one shared 1 root &&
	commit two shared 12-long root

root=2399f35d1d9acc612cefa2f7983f510fbd6b24e9
one=1db8b3605f452b4a89b403abb2ae905f0a7ffaf6
two=c160aaeae55c91b198ce651c8fc1d4e09dd97b4b
ok 11 - setup shared history

expecting success of 5320.12 'vanilla delta goes between branches': 
	git repack -adf &&
	is_delta_base $one $two &&
	is_delta_base $root $two

1db8b3605f452b4a89b403abb2ae905f0a7ffaf6 has base c160aaeae55c91b198ce651c8fc1d4e09dd97b4b
2399f35d1d9acc612cefa2f7983f510fbd6b24e9 has base c160aaeae55c91b198ce651c8fc1d4e09dd97b4b
ok 12 - vanilla delta goes between branches

expecting success of 5320.13 'deltas allowed against superset islands': 
	git -c "pack.island=refs/heads/(.*)" repack -adfi &&
	is_delta_base $one $root &&
	is_delta_base $two $root

1db8b3605f452b4a89b403abb2ae905f0a7ffaf6 has base 2399f35d1d9acc612cefa2f7983f510fbd6b24e9
c160aaeae55c91b198ce651c8fc1d4e09dd97b4b has base 2399f35d1d9acc612cefa2f7983f510fbd6b24e9
ok 13 - deltas allowed against superset islands

expecting success of 5320.14 'island core places core objects first': 
	cat >expect <<-EOF &&
	$root
	$two
	EOF
	git -c "pack.island=refs/heads/(.*)" \
	    -c "pack.islandcore=one" \
	    repack -adfi &&
	git verify-pack -v .git/objects/pack/*.pack |
	cut -d" " -f1 |
	grep -E "$root|$two" >actual &&
	test_cmp expect actual

ok 14 - island core places core objects first

expecting success of 5320.15 'unmatched island core is not fatal': 
	git -c "pack.islandcore=one" repack -adfi

ok 15 - unmatched island core is not fatal

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5300-pack-object.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/.git/
expecting success of 5300.1 'setup': 
	rm -f .git/index* &&
	perl -e "print \"a\" x 4096;" >a &&
	perl -e "print \"b\" x 4096;" >b &&
	perl -e "print \"c\" x 4096;" >c &&
	test-tool genrandom "seed a" 2097152 >a_big &&
	test-tool genrandom "seed b" 2097152 >b_big &&
	git update-index --add a a_big b b_big c &&
	cat c >d && echo foo >>d && git update-index --add d &&
	tree=$(git write-tree) &&
	commit=$(git commit-tree $tree </dev/null) &&
	{
		echo $tree &&
		echo $commit &&
		git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\)	.*/\\1/"
	} >obj-list &&
	{
		git diff-tree --root -p $commit &&
		while read object
		do
			t=$(git cat-file -t $object) &&
			git cat-file $t $object || return 1
		done <obj-list
	} >expect

ok 1 - setup

expecting success of 5300.2 'setup pack-object <stdin': 
	git init pack-object-stdin &&
	test_commit -C pack-object-stdin one &&
	test_commit -C pack-object-stdin two


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/pack-object-stdin/.git/
[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 2 - setup pack-object <stdin

expecting success of 5300.3 'pack-object <stdin parsing: basic [|--revs]': 
	cat >in <<-EOF &&
	$(git -C pack-object-stdin rev-parse one)
	EOF

	git -C pack-object-stdin pack-objects basic-stdin <in &&
	idx=$(echo pack-object-stdin/basic-stdin-*.idx) &&
	git show-index <"$idx" >actual &&
	test_line_count = 1 actual &&

	git -C pack-object-stdin pack-objects --revs basic-stdin-revs <in &&
	idx=$(echo pack-object-stdin/basic-stdin-revs-*.idx) &&
	git show-index <"$idx" >actual &&
	test_line_count = 3 actual

260a913b65cbec25b7e224d8d3c7360245c0367a
91db7b4b856b00c3e675824c5bc5389b6810037a
ok 3 - pack-object <stdin parsing: basic [|--revs]

expecting success of 5300.4 'pack-object <stdin parsing: [|--revs] bad line': 
	cat >in <<-EOF &&
	$(git -C pack-object-stdin rev-parse one)
	garbage
	$(git -C pack-object-stdin rev-parse two)
	EOF

	sed "s/^> //g" >err.expect <<-EOF &&
	fatal: expected object ID, got garbage:
	>  garbage

	EOF
	test_must_fail git -C pack-object-stdin pack-objects bad-line-stdin <in 2>err.actual &&
	test_cmp err.expect err.actual &&

	cat >err.expect <<-EOF &&
	fatal: bad revision 'garbage'
	EOF
	test_must_fail git -C pack-object-stdin pack-objects --revs bad-line-stdin-revs <in 2>err.actual &&
	test_cmp err.expect err.actual

ok 4 - pack-object <stdin parsing: [|--revs] bad line

expecting success of 5300.5 'pack-object <stdin parsing: [|--revs] empty line': 
	cat >in <<-EOF &&
	$(git -C pack-object-stdin rev-parse one)

	$(git -C pack-object-stdin rev-parse two)
	EOF

	sed -e "s/^> //g" -e "s/Z$//g" >err.expect <<-EOF &&
	fatal: expected object ID, got garbage:
	>  Z

	EOF
	test_must_fail git -C pack-object-stdin pack-objects empty-line-stdin <in 2>err.actual &&
	test_cmp err.expect err.actual &&

	git -C pack-object-stdin pack-objects --revs empty-line-stdin-revs <in &&
	idx=$(echo pack-object-stdin/empty-line-stdin-revs-*.idx) &&
	git show-index <"$idx" >actual &&
	test_line_count = 3 actual

91db7b4b856b00c3e675824c5bc5389b6810037a
ok 5 - pack-object <stdin parsing: [|--revs] empty line

expecting success of 5300.6 'pack-object <stdin parsing: [|--revs] with --stdin': 
	cat >in <<-EOF &&
	$(git -C pack-object-stdin rev-parse one)
	$(git -C pack-object-stdin rev-parse two)
	EOF

	# There is the "--stdin-packs is incompatible with --revs"
	# test below, but we should make sure that the revision.c
	# --stdin is not picked up
	cat >err.expect <<-EOF &&
	fatal: disallowed abbreviated or ambiguous option 'stdin'
	EOF
	test_must_fail git -C pack-object-stdin pack-objects stdin-with-stdin-option --stdin <in 2>err.actual &&
	test_cmp err.expect err.actual &&

	test_must_fail git -C pack-object-stdin pack-objects --stdin --revs stdin-with-stdin-option-revs 2>err.actual <in &&
	test_cmp err.expect err.actual

ok 6 - pack-object <stdin parsing: [|--revs] with --stdin

expecting success of 5300.7 'pack-object <stdin parsing: --stdin-packs handles garbage': 
	cat >in <<-EOF &&
	$(git -C pack-object-stdin rev-parse one)
	$(git -C pack-object-stdin rev-parse two)
	EOF

	# That we get "two" and not "one" has to do with OID
	# ordering. It happens to be the same here under SHA-1 and
	# SHA-256. See commentary in pack-objects.c
	cat >err.expect <<-EOF &&
	fatal: could not find pack '$(git -C pack-object-stdin rev-parse two)'
	EOF
	test_must_fail git \
		-C pack-object-stdin \
		pack-objects stdin-with-stdin-option --stdin-packs \
		<in 2>err.actual &&
	test_cmp err.expect err.actual

ok 7 - pack-object <stdin parsing: --stdin-packs handles garbage

expecting success of 5300.8 'pack without delta': 
	packname_1=$(git pack-objects --progress --window=0 test-1 \
			<obj-list 2>stderr) &&
	check_deltas stderr = 0

ok 8 - pack without delta

expecting success of 5300.9 'pack-objects with bogus arguments': 
	test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list

usage: git pack-objects --stdout [<options>] [< <ref-list> | < <object-list>]
   or: git pack-objects [<options>] <base-name> [< <ref-list> | < <object-list>]

    -q, --quiet           do not show progress meter
    --progress            show progress meter
    --all-progress        show progress meter during object writing phase
    --all-progress-implied
                          similar to --all-progress when progress meter is shown
    --index-version <version>[,<offset>]
                          write the pack index file in the specified idx format version
    --max-pack-size <n>   maximum size of each output pack file
    --local               ignore borrowed objects from alternate object store
    --incremental         ignore packed objects
    --window <n>          limit pack window by objects
    --window-memory <n>   limit pack window by memory in addition to object limit
    --depth <n>           maximum length of delta chain allowed in the resulting pack
    --reuse-delta         reuse existing deltas
    --reuse-object        reuse existing objects
    --delta-base-offset   use OFS_DELTA objects
    --threads <n>         use threads when searching for best delta matches
    --non-empty           do not create an empty pack output
    --revs                read revision arguments from standard input
    --unpacked            limit the objects to those that are not yet packed
    --all                 include objects reachable from any reference
    --reflog              include objects referred by reflog entries
    --indexed-objects     include objects referred to by the index
    --stdin-packs         read packs from stdin
    --stdout              output pack to stdout
    --include-tag         include tag objects that refer to objects to be packed
    --keep-unreachable    keep unreachable objects
    --pack-loose-unreachable
                          pack loose unreachable objects
    --unpack-unreachable[=<time>]
                          unpack unreachable objects newer than <time>
    --cruft               create a cruft pack
    --cruft-expiration[=<time>]
                          expire cruft objects older than <time>
    --sparse              use the sparse reachability algorithm
    --thin                create thin packs
    --shallow             create packs suitable for shallow fetches
    --honor-pack-keep     ignore packs that have companion .keep file
    --keep-pack <name>    ignore this pack
    --compression <n>     pack compression level
    --keep-true-parents   do not hide commits by grafts
    --use-bitmap-index    use a bitmap index if available to speed up counting objects
    --write-bitmap-index  write a bitmap index together with the pack index
    --filter <args>       object filtering
    --missing <action>    handling for missing objects
    --exclude-promisor-objects
                          do not pack objects in promisor packfiles
    --delta-islands       respect islands during delta compression
    --uri-protocol <protocol>
                          exclude any configured uploadpack.blobpackfileuri with this protocol

ok 9 - pack-objects with bogus arguments

expecting success of 5300.10 'unpack without delta': 
	check_unpack test-1-${packname_1} obj-list

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 10 - unpack without delta

expecting success of 5300.11 'unpack without delta (core.fsyncmethod=batch)': 
	check_unpack test-1-${packname_1} obj-list "$BATCH_CONFIGURATION"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 11 - unpack without delta (core.fsyncmethod=batch)

expecting success of 5300.12 'pack with REF_DELTA': 
	packname_2=$(git pack-objects --progress test-2 <obj-list 2>stderr) &&
	check_deltas stderr -gt 0

ok 12 - pack with REF_DELTA

expecting success of 5300.13 'unpack with REF_DELTA': 
	check_unpack test-2-${packname_2} obj-list

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 13 - unpack with REF_DELTA

expecting success of 5300.14 'unpack with REF_DELTA (core.fsyncmethod=batch)': 
       check_unpack test-2-${packname_2} obj-list "$BATCH_CONFIGURATION"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 14 - unpack with REF_DELTA (core.fsyncmethod=batch)

expecting success of 5300.15 'pack with OFS_DELTA': 
	packname_3=$(git pack-objects --progress --delta-base-offset test-3 \
			<obj-list 2>stderr) &&
	check_deltas stderr -gt 0

ok 15 - pack with OFS_DELTA

expecting success of 5300.16 'unpack with OFS_DELTA': 
	check_unpack test-3-${packname_3} obj-list

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 16 - unpack with OFS_DELTA

expecting success of 5300.17 'unpack with OFS_DELTA (core.fsyncmethod=batch)': 
       check_unpack test-3-${packname_3} obj-list "$BATCH_CONFIGURATION"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 17 - unpack with OFS_DELTA (core.fsyncmethod=batch)

expecting success of 5300.18 'compare delta flavors': 
	perl -e '
		defined($_ = -s $_) or die for @ARGV;
		exit 1 if $ARGV[0] <= $ARGV[1];
	' test-2-$packname_2.pack test-3-$packname_3.pack

ok 18 - compare delta flavors

expecting success of 5300.19 'use packed objects': 
	check_use_objects test-1-${packname_1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 19 - use packed objects

expecting success of 5300.20 'use packed deltified (REF_DELTA) objects': 
	check_use_objects test-2-${packname_2}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 20 - use packed deltified (REF_DELTA) objects

expecting success of 5300.21 'use packed deltified (OFS_DELTA) objects': 
	check_use_objects test-3-${packname_3}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/git2/
ok 21 - use packed deltified (OFS_DELTA) objects

expecting success of 5300.22 'survive missing objects/pack directory': 
	(
		rm -fr missing-pack &&
		mkdir missing-pack &&
		cd missing-pack &&
		git init &&
		GOP=.git/objects/pack &&
		rm -fr $GOP &&
		git index-pack --stdin --keep=test <../test-3-${packname_3}.pack &&
		test -f $GOP/pack-${packname_3}.pack &&
		cmp $GOP/pack-${packname_3}.pack ../test-3-${packname_3}.pack &&
		test -f $GOP/pack-${packname_3}.idx &&
		cmp $GOP/pack-${packname_3}.idx ../test-3-${packname_3}.idx &&
		test -f $GOP/pack-${packname_3}.keep
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/missing-pack/.git/
keep	ed7d7d439f2b0cbe9b94e803744e331d0b842cd7
ok 22 - survive missing objects/pack directory

expecting success of 5300.23 'verify pack': git verify-pack	test-1-${packname_1}.idx \
			test-2-${packname_2}.idx \
			test-3-${packname_3}.idx
ok 23 - verify pack

expecting success of 5300.24 'verify pack -v': git verify-pack -v	test-1-${packname_1}.idx \
			test-2-${packname_2}.idx \
			test-3-${packname_3}.idx
3c5699c72c7dae4ca3b3ca9de37d68a592b50a45 tree   182 169 12
ee88dc8f46b17a7cf0af1141d84677fff4ba1cfe commit 163 123 181
9d235ed07cd19811a6ceb342de82f190e49c9f68 blob   4096 31 304
012b05d476b4ffc9e62d036156b99467206f1efa blob   2097152 2097802 335
c82de19312b6c3695c0c18f70709a6c535682a67 blob   4096 31 2098137
6a9aaa62f091ea4b20590414e8b58c1b0b32b5bf blob   2097152 2097802 2098168
0be779221aca65277fd447c8207e1b3c2706ae20 blob   4096 31 4195970
b010fe5253f7dc59c6605dacb92fcea00d199d4e blob   4100 36 4196001
non delta: 8 objects
test-1-0fe7826218e9201ffa2c785aa64f009dc5a98043.pack: ok
3c5699c72c7dae4ca3b3ca9de37d68a592b50a45 tree   182 169 12
ee88dc8f46b17a7cf0af1141d84677fff4ba1cfe commit 163 123 181
9d235ed07cd19811a6ceb342de82f190e49c9f68 blob   4096 31 304
012b05d476b4ffc9e62d036156b99467206f1efa blob   2097152 2097802 335
c82de19312b6c3695c0c18f70709a6c535682a67 blob   4096 31 2098137
6a9aaa62f091ea4b20590414e8b58c1b0b32b5bf blob   2097152 2097802 2098168
b010fe5253f7dc59c6605dacb92fcea00d199d4e blob   4100 36 4195970
0be779221aca65277fd447c8207e1b3c2706ae20 blob   6 35 4196006 1 b010fe5253f7dc59c6605dacb92fcea00d199d4e
non delta: 7 objects
chain length = 1: 1 object
test-2-3aa241e415f2f03a6a2e7845c75d8ac80cdad5c5.pack: ok
3c5699c72c7dae4ca3b3ca9de37d68a592b50a45 tree   182 169 12
ee88dc8f46b17a7cf0af1141d84677fff4ba1cfe commit 163 123 181
9d235ed07cd19811a6ceb342de82f190e49c9f68 blob   4096 31 304
012b05d476b4ffc9e62d036156b99467206f1efa blob   2097152 2097802 335
c82de19312b6c3695c0c18f70709a6c535682a67 blob   4096 31 2098137
6a9aaa62f091ea4b20590414e8b58c1b0b32b5bf blob   2097152 2097802 2098168
b010fe5253f7dc59c6605dacb92fcea00d199d4e blob   4100 36 4195970
0be779221aca65277fd447c8207e1b3c2706ae20 blob   6 16 4196006 1 b010fe5253f7dc59c6605dacb92fcea00d199d4e
non delta: 7 objects
chain length = 1: 1 object
test-3-ed7d7d439f2b0cbe9b94e803744e331d0b842cd7.pack: ok
ok 24 - verify pack -v

expecting success of 5300.25 'verify-pack catches mismatched .idx and .pack files': cat test-1-${packname_1}.idx >test-3.idx &&
     cat test-2-${packname_2}.pack >test-3.pack &&
     if git verify-pack test-3.idx
     then false
     else :;
     fi
fatal: sha1 file 'test-3.idx' validation error
ok 25 - verify-pack catches mismatched .idx and .pack files

expecting success of 5300.26 'verify-pack catches a corrupted pack signature': cat test-1-${packname_1}.pack >test-3.pack &&
     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&
     if git verify-pack test-3.idx
     then false
     else :;
     fi
1+0 records in
1+0 records out
1 byte copied, 0.144602 s, 0.0 kB/s
fatal: pack signature mismatch
ok 26 - verify-pack catches a corrupted pack signature

expecting success of 5300.27 'verify-pack catches a corrupted pack version': cat test-1-${packname_1}.pack >test-3.pack &&
     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&
     if git verify-pack test-3.idx
     then false
     else :;
     fi
1+0 records in
1+0 records out
1 byte copied, 0.0424606 s, 0.0 kB/s
fatal: pack version 10 unsupported
ok 27 - verify-pack catches a corrupted pack version

expecting success of 5300.28 'verify-pack catches a corrupted type/size of the 1st packed object data': cat test-1-${packname_1}.pack >test-3.pack &&
     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&
     if git verify-pack test-3.idx
     then false
     else :;
     fi
1+0 records in
1+0 records out
1 byte copied, 0.0980533 s, 0.0 kB/s
fatal: pack has bad object at offset 12: unknown object type 0
ok 28 - verify-pack catches a corrupted type/size of the 1st packed object data

expecting success of 5300.29 'verify-pack catches a corrupted sum of the index file itself': l=$(wc -c <test-3.idx) &&
     l=$(expr $l - 20) &&
     cat test-1-${packname_1}.pack >test-3.pack &&
     printf "%20s" "" | dd of=test-3.idx count=20 bs=1 conv=notrunc seek=$l &&
     if git verify-pack test-3.pack
     then false
     else :;
     fi
20+0 records in
20+0 records out
20 bytes copied, 0.00382481 s, 5.2 kB/s
fatal: sha1 file 'test-3.idx' validation error
ok 29 - verify-pack catches a corrupted sum of the index file itself

expecting success of 5300.30 'build pack index for an existing pack': cat test-1-${packname_1}.pack >test-3.pack &&
     git index-pack -o tmp.idx test-3.pack &&
     cmp tmp.idx test-1-${packname_1}.idx &&

     git index-pack --promisor=message test-3.pack &&
     cmp test-3.idx test-1-${packname_1}.idx &&
     echo message >expect &&
     test_cmp expect test-3.promisor &&

     cat test-2-${packname_2}.pack >test-3.pack &&
     git index-pack -o tmp.idx test-2-${packname_2}.pack &&
     cmp tmp.idx test-2-${packname_2}.idx &&

     git index-pack test-3.pack &&
     cmp test-3.idx test-2-${packname_2}.idx &&

     cat test-3-${packname_3}.pack >test-3.pack &&
     git index-pack -o tmp.idx test-3-${packname_3}.pack &&
     cmp tmp.idx test-3-${packname_3}.idx &&

     git index-pack test-3.pack &&
     cmp test-3.idx test-3-${packname_3}.idx &&

     cat test-1-${packname_1}.pack >test-4.pack &&
     rm -f test-4.keep &&
     git index-pack --keep=why test-4.pack &&
     cmp test-1-${packname_1}.idx test-4.idx &&
     test -f test-4.keep &&

     :
0fe7826218e9201ffa2c785aa64f009dc5a98043
0fe7826218e9201ffa2c785aa64f009dc5a98043
3aa241e415f2f03a6a2e7845c75d8ac80cdad5c5
3aa241e415f2f03a6a2e7845c75d8ac80cdad5c5
ed7d7d439f2b0cbe9b94e803744e331d0b842cd7
ed7d7d439f2b0cbe9b94e803744e331d0b842cd7
0fe7826218e9201ffa2c785aa64f009dc5a98043
ok 30 - build pack index for an existing pack

expecting success of 5300.31 'unpacking with --strict': 

	for j in a b c d e f g
	do
		for i in 0 1 2 3 4 5 6 7 8 9
		do
			o=$(echo $j$i | git hash-object -w --stdin) &&
			echo "100644 $o	0 $j$i" || return 1
		done
	done >LIST &&
	rm -f .git/index &&
	git update-index --index-info <LIST &&
	LIST=$(git write-tree) &&
	rm -f .git/index &&
	head -n 10 LIST | git update-index --index-info &&
	LI=$(git write-tree) &&
	rm -f .git/index &&
	tail -n 10 LIST | git update-index --index-info &&
	ST=$(git write-tree) &&
	git rev-list --objects "$LIST" "$LI" "$ST" >actual &&
	PACK5=$( git pack-objects test-5 <actual ) &&
	PACK6=$( test_write_lines "$LIST" "$LI" "$ST" | git pack-objects test-6 ) &&
	test_create_repo test-5 &&
	(
		cd test-5 &&
		git unpack-objects --strict <../test-5-$PACK5.pack &&
		git ls-tree -r $LIST &&
		git ls-tree -r $LI &&
		git ls-tree -r $ST
	) &&
	test_create_repo test-6 &&
	(
		# tree-only into empty repo -- many unreachables
		cd test-6 &&
		test_must_fail git unpack-objects --strict <../test-6-$PACK6.pack
	) &&
	(
		# already populated -- no unreachables
		cd test-5 &&
		git unpack-objects --strict <../test-6-$PACK6.pack
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/test-5/.git/
100644 blob 0042f6c56d8fc1896f3efc2cdc5060e5b5e44e02	0 a0
100644 blob da0f8ed91a8f2f0f067b3bdf26265d5ca48cf82c	0 a1
100644 blob c1827f07e114c20547dc6a7296588870a4b5b62c	0 a2
100644 blob d616f7380ad325123fed6f628d02fa76e1ce77c3	0 a3
100644 blob 88ba23dca8c8529f8165539c369925a99391a4d1	0 a4
100644 blob fafec68b313bde633804c37b46810f136ee12ea6	0 a5
100644 blob 5b521d0587015867ac1a23fa00be3f3fce080b9f	0 a6
100644 blob 6bac181dd20780870c30d69308f5a90b59a15102	0 a7
100644 blob f1914bb68f8515ba7d1ab0f0cddcdf960731773d	0 a8
100644 blob dbe2bc1151e5d5d469644f20189f923f006ed0cc	0 a9
100644 blob 2270a80fbb71d7109b85e7489f3f307d0141a559	0 b0
100644 blob c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061	0 b1
100644 blob e6bfff5c1d0f0ecd501552b43a1e13d8008abc31	0 b2
100644 blob 6d0875c82a99774922eab07fbc08510fc85d9e0a	0 b3
100644 blob 8e953e84d803f13fd06416a1bd8161dcd93cfd00	0 b4
100644 blob 90a5159bf020296276ea5ca1bcd292a9b1de9947	0 b5
100644 blob 07eb61d36f49569a2b0649af299f9f00013d0969	0 b6
100644 blob 6e6d33cfc7b1581413a88ae0759202b25ac4cad1	0 b7
100644 blob 5d453c66b522d8de5d99c03bd2bf8b65ca0bcf33	0 b8
100644 blob 9a16e0d1a643983973291127012d2694a0b17fe8	0 b9
100644 blob caecf05cdbb03e144f113ecab2b99e5ee74df706	0 c0
100644 blob ae9304576a6ec3419b231b2b9c8e33a06f97f9fb	0 c1
100644 blob 16f9ec009e5568c435f473ba3a1df732d49ce8c3	0 c2
100644 blob 0771aea884dd394a7b12783d049f05b5599f41a4	0 c3
100644 blob a103f673dd1b7c5727aa0ae0100419adc50e1b76	0 c4
100644 blob c36357109ce20af8f90df3c0dd0784e89408d707	0 c5
100644 blob 86a716504cbdc40a135faa5ab199d15e364c416d	0 c6
100644 blob 20be68787e59f4cb8983b641d170c4baf8ea25dd	0 c7
100644 blob bb420bc8fb9e91530fdc25e363f6b822d5195309	0 c8
100644 blob f899bd1761a5ca5978799bc3189a04d3c52d8435	0 c9
100644 blob 79a5e858be4a3a969e3b71406fef0d3d36e1d387	0 d0
100644 blob 6f1852975b9306ae5d8dfdf0d4cb1f5cb36ac229	0 d1
100644 blob fd3671590780b645e1bef030d550191f6cdf1c95	0 d2
100644 blob 69c77a9ea746edd27b46107142fc2c5288c1daf5	0 d3
100644 blob d7b30ee07d4b9819a77a3b122282b4c04528ec21	0 d4
100644 blob fa590f3f8bfbef6095cf6525e8497b2b2b46445c	0 d5
100644 blob fef4390d19cb98fa97efd44c09d4e2eb7b084b40	0 d6
100644 blob a5adf29249757619b8890c86f2cfcfeee611b5d8	0 d7
100644 blob 1859919d049c078ba63fcecbce60e697c6da8e01	0 d8
100644 blob b6148c82443a60d1d5ce07872a85e3c544b5f4b0	0 d9
100644 blob 4fe4106b50b257f3d6ffd23b750d2d1945c2608b	0 e0
100644 blob 5ff91639494693b1f238b5dc9baf8be95142c3ab	0 e1
100644 blob 3811af3ca744c2fb44077a8025c23b4d4166a449	0 e2
100644 blob 9338c3fa1f74d202651154257572d32aed57cc16	0 e3
100644 blob c5195815f83aa9ef1ebac9e11f14d62b26406c99	0 e4
100644 blob 0c44c89ef9c29077cceebc6dd9ca0b3a950c95ee	0 e5
100644 blob f17172bc54cfa55a9e531cc845dff39855cd8df0	0 e6
100644 blob 29870e9ccff84f86938ee588a47b39cf3a802e6b	0 e7
100644 blob e8d01d007452cede5c6eafc3343fc80675b1e2f9	0 e8
100644 blob 0c1945ad576ffc445ad69a3fafd1d3c04cc0bd40	0 e9
100644 blob 844dc808a1d3d769ddcf5430eac933d4d87ff606	0 f0
100644 blob 8e1e71d5ce34c01b6fe83bc5051545f2918c8c2b	0 f1
100644 blob 9de77c18733ab8009a956c25e28c85fe203a17d7	0 f2
100644 blob 45d9e0e9fc8859787c33081dffdf12f41b54fcf3	0 f3
100644 blob c48ac4847d3abae8e5899dcc5cf490a98df55755	0 f4
100644 blob 14c61ecf25961ce674048103c5fa5ea3c535a5cd	0 f5
100644 blob 59ce90029dfd9e224701a040a26153e9f2feb74c	0 f6
100644 blob 0a7bd52ffb819609cf65f40eb91be62000db47e5	0 f7
100644 blob c7e617f6b429a1f3b462df6add2b4ea2cf702faf	0 f8
100644 blob a720d8c8d277ad31ee5b180bef57379b5f62517c	0 f9
100644 blob 2e7d2f0b106eb8823e449a020497e26b86dc3eb1	0 g0
100644 blob d8a17fff13638d804e8bf7f9f357c174db98f126	0 g1
100644 blob 247c4abd244a429297a4c4b091592ae13bbf4677	0 g2
100644 blob affaa5ba8c43cfc71469226e0d57cb6823c843da	0 g3
100644 blob 51bc00f93e60aeef7dccfcf646e3f615056112bd	0 g4
100644 blob 02b4fdd23d495769852f1550c10eb015f0fe0039	0 g5
100644 blob e65aa9d64b596da2ba61e0662b1173f1e16dcbcf	0 g6
100644 blob e19089689a05907b359f52c972ee7d2294fa96ab	0 g7
100644 blob 30c2af9542d38e1f248390632612e0fb944fd27d	0 g8
100644 blob 09827d7e43d81089e868e9f0f06502b865939c05	0 g9
100644 blob 0042f6c56d8fc1896f3efc2cdc5060e5b5e44e02	0 a0
100644 blob da0f8ed91a8f2f0f067b3bdf26265d5ca48cf82c	0 a1
100644 blob c1827f07e114c20547dc6a7296588870a4b5b62c	0 a2
100644 blob d616f7380ad325123fed6f628d02fa76e1ce77c3	0 a3
100644 blob 88ba23dca8c8529f8165539c369925a99391a4d1	0 a4
100644 blob fafec68b313bde633804c37b46810f136ee12ea6	0 a5
100644 blob 5b521d0587015867ac1a23fa00be3f3fce080b9f	0 a6
100644 blob 6bac181dd20780870c30d69308f5a90b59a15102	0 a7
100644 blob f1914bb68f8515ba7d1ab0f0cddcdf960731773d	0 a8
100644 blob dbe2bc1151e5d5d469644f20189f923f006ed0cc	0 a9
100644 blob 2e7d2f0b106eb8823e449a020497e26b86dc3eb1	0 g0
100644 blob d8a17fff13638d804e8bf7f9f357c174db98f126	0 g1
100644 blob 247c4abd244a429297a4c4b091592ae13bbf4677	0 g2
100644 blob affaa5ba8c43cfc71469226e0d57cb6823c843da	0 g3
100644 blob 51bc00f93e60aeef7dccfcf646e3f615056112bd	0 g4
100644 blob 02b4fdd23d495769852f1550c10eb015f0fe0039	0 g5
100644 blob e65aa9d64b596da2ba61e0662b1173f1e16dcbcf	0 g6
100644 blob e19089689a05907b359f52c972ee7d2294fa96ab	0 g7
100644 blob 30c2af9542d38e1f248390632612e0fb944fd27d	0 g8
100644 blob 09827d7e43d81089e868e9f0f06502b865939c05	0 g9
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/test-6/.git/
fatal: object of unexpected type
ok 31 - unpacking with --strict

expecting success of 5300.32 'index-pack with --strict': 

	for j in a b c d e f g
	do
		for i in 0 1 2 3 4 5 6 7 8 9
		do
			o=$(echo $j$i | git hash-object -w --stdin) &&
			echo "100644 $o	0 $j$i" || return 1
		done
	done >LIST &&
	rm -f .git/index &&
	git update-index --index-info <LIST &&
	LIST=$(git write-tree) &&
	rm -f .git/index &&
	head -n 10 LIST | git update-index --index-info &&
	LI=$(git write-tree) &&
	rm -f .git/index &&
	tail -n 10 LIST | git update-index --index-info &&
	ST=$(git write-tree) &&
	git rev-list --objects "$LIST" "$LI" "$ST" >actual &&
	PACK5=$( git pack-objects test-5 <actual ) &&
	PACK6=$( test_write_lines "$LIST" "$LI" "$ST" | git pack-objects test-6 ) &&
	test_create_repo test-7 &&
	(
		cd test-7 &&
		git index-pack --strict --stdin <../test-5-$PACK5.pack &&
		git ls-tree -r $LIST &&
		git ls-tree -r $LI &&
		git ls-tree -r $ST
	) &&
	test_create_repo test-8 &&
	(
		# tree-only into empty repo -- many unreachables
		cd test-8 &&
		test_must_fail git index-pack --strict --stdin <../test-6-$PACK6.pack
	) &&
	(
		# already populated -- no unreachables
		cd test-7 &&
		git index-pack --strict --stdin <../test-6-$PACK6.pack
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/test-7/.git/
pack	580f6e9e5f1fc55c922ae4f748e6adb3737375f4
100644 blob 0042f6c56d8fc1896f3efc2cdc5060e5b5e44e02	0 a0
100644 blob da0f8ed91a8f2f0f067b3bdf26265d5ca48cf82c	0 a1
100644 blob c1827f07e114c20547dc6a7296588870a4b5b62c	0 a2
100644 blob d616f7380ad325123fed6f628d02fa76e1ce77c3	0 a3
100644 blob 88ba23dca8c8529f8165539c369925a99391a4d1	0 a4
100644 blob fafec68b313bde633804c37b46810f136ee12ea6	0 a5
100644 blob 5b521d0587015867ac1a23fa00be3f3fce080b9f	0 a6
100644 blob 6bac181dd20780870c30d69308f5a90b59a15102	0 a7
100644 blob f1914bb68f8515ba7d1ab0f0cddcdf960731773d	0 a8
100644 blob dbe2bc1151e5d5d469644f20189f923f006ed0cc	0 a9
100644 blob 2270a80fbb71d7109b85e7489f3f307d0141a559	0 b0
100644 blob c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061	0 b1
100644 blob e6bfff5c1d0f0ecd501552b43a1e13d8008abc31	0 b2
100644 blob 6d0875c82a99774922eab07fbc08510fc85d9e0a	0 b3
100644 blob 8e953e84d803f13fd06416a1bd8161dcd93cfd00	0 b4
100644 blob 90a5159bf020296276ea5ca1bcd292a9b1de9947	0 b5
100644 blob 07eb61d36f49569a2b0649af299f9f00013d0969	0 b6
100644 blob 6e6d33cfc7b1581413a88ae0759202b25ac4cad1	0 b7
100644 blob 5d453c66b522d8de5d99c03bd2bf8b65ca0bcf33	0 b8
100644 blob 9a16e0d1a643983973291127012d2694a0b17fe8	0 b9
100644 blob caecf05cdbb03e144f113ecab2b99e5ee74df706	0 c0
100644 blob ae9304576a6ec3419b231b2b9c8e33a06f97f9fb	0 c1
100644 blob 16f9ec009e5568c435f473ba3a1df732d49ce8c3	0 c2
100644 blob 0771aea884dd394a7b12783d049f05b5599f41a4	0 c3
100644 blob a103f673dd1b7c5727aa0ae0100419adc50e1b76	0 c4
100644 blob c36357109ce20af8f90df3c0dd0784e89408d707	0 c5
100644 blob 86a716504cbdc40a135faa5ab199d15e364c416d	0 c6
100644 blob 20be68787e59f4cb8983b641d170c4baf8ea25dd	0 c7
100644 blob bb420bc8fb9e91530fdc25e363f6b822d5195309	0 c8
100644 blob f899bd1761a5ca5978799bc3189a04d3c52d8435	0 c9
100644 blob 79a5e858be4a3a969e3b71406fef0d3d36e1d387	0 d0
100644 blob 6f1852975b9306ae5d8dfdf0d4cb1f5cb36ac229	0 d1
100644 blob fd3671590780b645e1bef030d550191f6cdf1c95	0 d2
100644 blob 69c77a9ea746edd27b46107142fc2c5288c1daf5	0 d3
100644 blob d7b30ee07d4b9819a77a3b122282b4c04528ec21	0 d4
100644 blob fa590f3f8bfbef6095cf6525e8497b2b2b46445c	0 d5
100644 blob fef4390d19cb98fa97efd44c09d4e2eb7b084b40	0 d6
100644 blob a5adf29249757619b8890c86f2cfcfeee611b5d8	0 d7
100644 blob 1859919d049c078ba63fcecbce60e697c6da8e01	0 d8
100644 blob b6148c82443a60d1d5ce07872a85e3c544b5f4b0	0 d9
100644 blob 4fe4106b50b257f3d6ffd23b750d2d1945c2608b	0 e0
100644 blob 5ff91639494693b1f238b5dc9baf8be95142c3ab	0 e1
100644 blob 3811af3ca744c2fb44077a8025c23b4d4166a449	0 e2
100644 blob 9338c3fa1f74d202651154257572d32aed57cc16	0 e3
100644 blob c5195815f83aa9ef1ebac9e11f14d62b26406c99	0 e4
100644 blob 0c44c89ef9c29077cceebc6dd9ca0b3a950c95ee	0 e5
100644 blob f17172bc54cfa55a9e531cc845dff39855cd8df0	0 e6
100644 blob 29870e9ccff84f86938ee588a47b39cf3a802e6b	0 e7
100644 blob e8d01d007452cede5c6eafc3343fc80675b1e2f9	0 e8
100644 blob 0c1945ad576ffc445ad69a3fafd1d3c04cc0bd40	0 e9
100644 blob 844dc808a1d3d769ddcf5430eac933d4d87ff606	0 f0
100644 blob 8e1e71d5ce34c01b6fe83bc5051545f2918c8c2b	0 f1
100644 blob 9de77c18733ab8009a956c25e28c85fe203a17d7	0 f2
100644 blob 45d9e0e9fc8859787c33081dffdf12f41b54fcf3	0 f3
100644 blob c48ac4847d3abae8e5899dcc5cf490a98df55755	0 f4
100644 blob 14c61ecf25961ce674048103c5fa5ea3c535a5cd	0 f5
100644 blob 59ce90029dfd9e224701a040a26153e9f2feb74c	0 f6
100644 blob 0a7bd52ffb819609cf65f40eb91be62000db47e5	0 f7
100644 blob c7e617f6b429a1f3b462df6add2b4ea2cf702faf	0 f8
100644 blob a720d8c8d277ad31ee5b180bef57379b5f62517c	0 f9
100644 blob 2e7d2f0b106eb8823e449a020497e26b86dc3eb1	0 g0
100644 blob d8a17fff13638d804e8bf7f9f357c174db98f126	0 g1
100644 blob 247c4abd244a429297a4c4b091592ae13bbf4677	0 g2
100644 blob affaa5ba8c43cfc71469226e0d57cb6823c843da	0 g3
100644 blob 51bc00f93e60aeef7dccfcf646e3f615056112bd	0 g4
100644 blob 02b4fdd23d495769852f1550c10eb015f0fe0039	0 g5
100644 blob e65aa9d64b596da2ba61e0662b1173f1e16dcbcf	0 g6
100644 blob e19089689a05907b359f52c972ee7d2294fa96ab	0 g7
100644 blob 30c2af9542d38e1f248390632612e0fb944fd27d	0 g8
100644 blob 09827d7e43d81089e868e9f0f06502b865939c05	0 g9
100644 blob 0042f6c56d8fc1896f3efc2cdc5060e5b5e44e02	0 a0
100644 blob da0f8ed91a8f2f0f067b3bdf26265d5ca48cf82c	0 a1
100644 blob c1827f07e114c20547dc6a7296588870a4b5b62c	0 a2
100644 blob d616f7380ad325123fed6f628d02fa76e1ce77c3	0 a3
100644 blob 88ba23dca8c8529f8165539c369925a99391a4d1	0 a4
100644 blob fafec68b313bde633804c37b46810f136ee12ea6	0 a5
100644 blob 5b521d0587015867ac1a23fa00be3f3fce080b9f	0 a6
100644 blob 6bac181dd20780870c30d69308f5a90b59a15102	0 a7
100644 blob f1914bb68f8515ba7d1ab0f0cddcdf960731773d	0 a8
100644 blob dbe2bc1151e5d5d469644f20189f923f006ed0cc	0 a9
100644 blob 2e7d2f0b106eb8823e449a020497e26b86dc3eb1	0 g0
100644 blob d8a17fff13638d804e8bf7f9f357c174db98f126	0 g1
100644 blob 247c4abd244a429297a4c4b091592ae13bbf4677	0 g2
100644 blob affaa5ba8c43cfc71469226e0d57cb6823c843da	0 g3
100644 blob 51bc00f93e60aeef7dccfcf646e3f615056112bd	0 g4
100644 blob 02b4fdd23d495769852f1550c10eb015f0fe0039	0 g5
100644 blob e65aa9d64b596da2ba61e0662b1173f1e16dcbcf	0 g6
100644 blob e19089689a05907b359f52c972ee7d2294fa96ab	0 g7
100644 blob 30c2af9542d38e1f248390632612e0fb944fd27d	0 g8
100644 blob 09827d7e43d81089e868e9f0f06502b865939c05	0 g9
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/test-8/.git/
fatal: did not receive expected object 0042f6c56d8fc1896f3efc2cdc5060e5b5e44e02
pack	499fed00672b4ac4e35132711ee1664a089f355e
ok 32 - index-pack with --strict

expecting success of 5300.33 'honor pack.packSizeLimit': 
	git config pack.packSizeLimit 3m &&
	packname_10=$(git pack-objects test-10 <obj-list) &&
	test 2 = $(ls test-10-*.pack | wc -l)

ok 33 - honor pack.packSizeLimit

expecting success of 5300.34 'verify resulting packs': 
	git verify-pack test-10-*.pack

ok 34 - verify resulting packs

expecting success of 5300.35 'tolerate packsizelimit smaller than biggest object': 
	git config pack.packSizeLimit 1 &&
	packname_11=$(git pack-objects test-11 <obj-list) &&
	test 5 = $(ls test-11-*.pack | wc -l)

warning: minimum pack size limit is 1 MiB
ok 35 - tolerate packsizelimit smaller than biggest object

expecting success of 5300.36 'verify resulting packs': 
	git verify-pack test-11-*.pack

ok 36 - verify resulting packs

expecting success of 5300.37 'set up pack for non-repo tests': 
	# make sure we have a pack with no matching index file
	cp test-1-*.pack foo.pack

ok 37 - set up pack for non-repo tests

expecting success of 5300.38 'index-pack --stdin complains of non-repo': 
	nongit test_must_fail git index-pack --object-format=$(test_oid algo) --stdin <foo.pack &&
	test_path_is_missing non-repo/.git

fatal: --stdin requires a git repository
ok 38 - index-pack --stdin complains of non-repo

expecting success of 5300.39 'index-pack <pack> works in non-repo': 
	nongit git index-pack --object-format=$(test_oid algo) ../foo.pack &&
	test_path_is_file foo.idx

0fe7826218e9201ffa2c785aa64f009dc5a98043
ok 39 - index-pack <pack> works in non-repo

expecting success of 5300.40 'index-pack --strict <pack> works in non-repo': 
	rm -f foo.idx &&
	nongit git index-pack --strict --object-format=$(test_oid algo) ../foo.pack &&
	test_path_is_file foo.idx

0fe7826218e9201ffa2c785aa64f009dc5a98043
ok 40 - index-pack --strict <pack> works in non-repo

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
ok 41 # skip index-pack --threads=N or pack.threads=N warns when no pthreads (missing !PTHREADS of !PTHREADS,!FAIL_PREREQS)

ok 42 # skip pack-objects --threads=N or pack.threads=N warns when no pthreads (missing !PTHREADS of !PTHREADS,!FAIL_PREREQS)

expecting success of 5300.43 'pack-objects in too-many-packs mode': 
	GIT_TEST_FULL_IN_PACK_ARRAY=1 git repack -ad &&
	git fsck

warning: minimum pack size limit is 1 MiB
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling tree eb486020614a4c764f9df37263317ed4ea372ef8
dangling tree ebe633107a37152edb13864b30d6878084f68c92
dangling commit ee88dc8f46b17a7cf0af1141d84677fff4ba1cfe
ok 43 - pack-objects in too-many-packs mode

expecting success of 5300.44 'setup: fake a SHA1 hash collision': 
	git init corrupt &&
	(
		cd corrupt &&
		long_a=$(git hash-object -w ../a | sed -e "s!^..!&/!") &&
		long_b=$(git hash-object -w ../b | sed -e "s!^..!&/!") &&
		test -f	.git/objects/$long_b &&
		cp -f	.git/objects/$long_a \
			.git/objects/$long_b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/corrupt/.git/
ok 44 - setup: fake a SHA1 hash collision

expecting success of 5300.45 'make sure index-pack detects the SHA1 collision': 
	(
		cd corrupt &&
		test_must_fail git index-pack -o ../bad.idx ../test-3.pack 2>msg &&
		test_i18ngrep "SHA1 COLLISION FOUND" msg
	)

fatal: SHA1 COLLISION FOUND WITH c82de19312b6c3695c0c18f70709a6c535682a67 !
ok 45 - make sure index-pack detects the SHA1 collision

expecting success of 5300.46 'make sure index-pack detects the SHA1 collision (large blobs)': 
	(
		cd corrupt &&
		test_must_fail git -c core.bigfilethreshold=1 index-pack -o ../bad.idx ../test-3.pack 2>msg &&
		test_i18ngrep "SHA1 COLLISION FOUND" msg
	)

fatal: SHA1 COLLISION FOUND WITH c82de19312b6c3695c0c18f70709a6c535682a67 !
ok 46 - make sure index-pack detects the SHA1 collision (large blobs)

expecting success of 5300.47 'prefetch objects': 
	rm -rf server client &&

	git init server &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server protocol.version 2 &&

	echo one >server/one &&
	git -C server add one &&
	git -C server commit -m one &&
	git -C server branch one_branch &&

	echo two_a >server/two_a &&
	echo two_b >server/two_b &&
	git -C server add two_a two_b &&
	git -C server commit -m two &&

	echo three >server/three &&
	git -C server add three &&
	git -C server commit -m three &&
	git -C server branch three_branch &&

	# Clone, fetch "two" with blobs excluded, and re-push it. This requires
	# the client to have the blobs of "two" - verify that these are
	# prefetched in one batch.
	git clone --filter=blob:none --single-branch -b one_branch \
		"file://$(pwd)/server" client &&
	test_config -C client protocol.version 2 &&
	TWO=$(git -C server rev-parse three_branch^) &&
	git -C client fetch --filter=blob:none origin "$TWO" &&
	GIT_TRACE_PACKET=$(pwd)/trace git -C client push origin "$TWO":refs/heads/two_branch &&
	grep "fetch> done" trace >donelines &&
	test_line_count = 1 donelines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/server/.git/
[master (root-commit) d0e3d68] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
[master 01c4da4] two
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 two_a
 create mode 100644 two_b
[master 0cb4025] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three
Cloning into 'client'...
From file:///<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/server
 * branch            01c4da49da3cfbee5b7b322a31b5aef76b8e6395 -> FETCH_HEAD
To file:///<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/server
 * [new branch]      01c4da49da3cfbee5b7b322a31b5aef76b8e6395 -> two_branch
ok 47 - prefetch objects

expecting success of 5300.48 'setup for --stdin-packs tests': 
	git init stdin-packs &&
	(
		cd stdin-packs &&

		test_commit A &&
		test_commit B &&
		test_commit C &&

		for id in A B C
		do
			git pack-objects .git/objects/pack/pack-$id \
				--incremental --revs <<-EOF || exit 1
			refs/tags/$id
			EOF
		done &&

		ls -la .git/objects/pack
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5300-pack-object/stdin-packs/.git/
[master (root-commit) a3899a0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master 7763d60] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[master 5bcfed7] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
cdad7b821f039915a03eea1caa0a1c25ac08bab3
068fcdcf5141ea62267b026c3c92f6e1fdb6c0df
edfc677a6d14fae5f129abac6ee3f24f996f5fa8
total 24
drwxr-xr-x 1 buildd buildd  618 Dec 28 07:48 .
drwxr-xr-x 1 buildd buildd   52 Dec 28 07:48 ..
-r--r--r-- 1 buildd buildd 1156 Dec 28 07:48 pack-A-cdad7b821f039915a03eea1caa0a1c25ac08bab3.idx
-r--r--r-- 1 buildd buildd  210 Dec 28 07:48 pack-A-cdad7b821f039915a03eea1caa0a1c25ac08bab3.pack
-r--r--r-- 1 buildd buildd 1156 Dec 28 07:48 pack-B-068fcdcf5141ea62267b026c3c92f6e1fdb6c0df.idx
-r--r--r-- 1 buildd buildd  266 Dec 28 07:48 pack-B-068fcdcf5141ea62267b026c3c92f6e1fdb6c0df.pack
-r--r--r-- 1 buildd buildd 1156 Dec 28 07:48 pack-C-edfc677a6d14fae5f129abac6ee3f24f996f5fa8.idx
-r--r--r-- 1 buildd buildd  291 Dec 28 07:48 pack-C-edfc677a6d14fae5f129abac6ee3f24f996f5fa8.pack
ok 48 - setup for --stdin-packs tests

expecting success of 5300.49 '--stdin-packs with excluded packs': 
	(
		cd stdin-packs &&

		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&

		git pack-objects test --stdin-packs <<-EOF &&
		$PACK_A
		^$PACK_B
		$PACK_C
		EOF

		(
			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
			git show-index <$(ls .git/objects/pack/pack-C-*.idx)
		) >expect.raw &&
		git show-index <$(ls test-*.idx) >actual.raw &&

		cut -d" " -f2 <expect.raw | sort >expect &&
		cut -d" " -f2 <actual.raw | sort >actual &&
		test_cmp expect actual
	)

bef42ce448005d101f1f750c0e3412056e45e982
ok 49 - --stdin-packs with excluded packs

expecting success of 5300.50 '--stdin-packs is incompatible with --filter': 
	(
		cd stdin-packs &&
		test_must_fail git pack-objects --stdin-packs --stdout \
			--filter=blob:none </dev/null 2>err &&
		test_i18ngrep "cannot use --filter with --stdin-packs" err
	)

fatal: cannot use --filter with --stdin-packs
ok 50 - --stdin-packs is incompatible with --filter

expecting success of 5300.51 '--stdin-packs is incompatible with --revs': 
	(
		cd stdin-packs &&
		test_must_fail git pack-objects --stdin-packs --revs out \
			</dev/null 2>err &&
		test_i18ngrep "cannot use internal rev list with --stdin-packs" err
	)

fatal: cannot use internal rev list with --stdin-packs
ok 51 - --stdin-packs is incompatible with --revs

expecting success of 5300.52 '--stdin-packs with loose objects': 
	(
		cd stdin-packs &&

		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&

		test_commit D && # loose

		git pack-objects test2 --stdin-packs --unpacked <<-EOF &&
		$PACK_A
		^$PACK_B
		$PACK_C
		EOF

		(
			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
			git show-index <$(ls .git/objects/pack/pack-C-*.idx) &&
			git rev-list --objects --no-object-names \
				refs/tags/C..refs/tags/D

		) >expect.raw &&
		ls -la . &&
		git show-index <$(ls test2-*.idx) >actual.raw &&

		cut -d" " -f2 <expect.raw | sort >expect &&
		cut -d" " -f2 <actual.raw | sort >actual &&
		test_cmp expect actual
	)

[master b5f9410] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
fe55768d815f094d66f98455b6489bf160ce1abf
total 52
drwxr-xr-x 1 buildd buildd  502 Dec 28 07:48 .
drwxr-xr-x 1 buildd buildd 3044 Dec 28 07:48 ..
drwxr-xr-x 1 buildd buildd  144 Dec 28 07:48 .git
-rw-r--r-- 1 buildd buildd    2 Dec 28 07:48 A.t
-rw-r--r-- 1 buildd buildd    2 Dec 28 07:48 B.t
-rw-r--r-- 1 buildd buildd    2 Dec 28 07:48 C.t
-rw-r--r-- 1 buildd buildd    2 Dec 28 07:48 D.t
-rw-r--r-- 1 buildd buildd  246 Dec 28 07:48 actual
-rw-r--r-- 1 buildd buildd  335 Dec 28 07:48 actual.raw
-rw-r--r-- 1 buildd buildd   55 Dec 28 07:48 err
-rw-r--r-- 1 buildd buildd  246 Dec 28 07:48 expect
-rw-r--r-- 1 buildd buildd  457 Dec 28 07:48 expect.raw
-r--r--r-- 1 buildd buildd 1240 Dec 28 07:48 test-bef42ce448005d101f1f750c0e3412056e45e982.idx
-r--r--r-- 1 buildd buildd  469 Dec 28 07:48 test-bef42ce448005d101f1f750c0e3412056e45e982.pack
-r--r--r-- 1 buildd buildd 1324 Dec 28 07:48 test2-fe55768d815f094d66f98455b6489bf160ce1abf.idx
-r--r--r-- 1 buildd buildd  693 Dec 28 07:48 test2-fe55768d815f094d66f98455b6489bf160ce1abf.pack
ok 52 - --stdin-packs with loose objects

expecting success of 5300.53 '--stdin-packs with broken links': 
	(
		cd stdin-packs &&

		# make an unreachable object with a bogus parent
		git cat-file -p HEAD >commit &&
		sed "s/$(git rev-parse HEAD^)/$(test_oid zero)/" <commit |
		git hash-object -w -t commit --stdin >in &&

		git pack-objects .git/objects/pack/pack-D <in &&

		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&
		PACK_D="$(basename .git/objects/pack/pack-D-*.pack)" &&

		git pack-objects test3 --stdin-packs --unpacked <<-EOF &&
		$PACK_A
		^$PACK_B
		$PACK_C
		$PACK_D
		EOF

		(
			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
			git show-index <$(ls .git/objects/pack/pack-C-*.idx) &&
			git show-index <$(ls .git/objects/pack/pack-D-*.idx) &&
			git rev-list --objects --no-object-names \
				refs/tags/C..refs/tags/D
		) >expect.raw &&
		git show-index <$(ls test3-*.idx) >actual.raw &&

		cut -d" " -f2 <expect.raw | sort >expect &&
		cut -d" " -f2 <actual.raw | sort >actual &&
		test_cmp expect actual
	)

b0307a93d4c4ff965f17901a387ba2451435ae35
a8da6ac436572073878eb7a65770bc0a93d458d1
ok 53 - --stdin-packs with broken links

expecting success of 5300.54 'negative window clamps to 0': 
	git pack-objects --progress --window=-1 neg-window <obj-list 2>stderr &&
	check_deltas stderr = 0

bd6610fc09cad3217690e0b0ed211717154cbab6
ce6c688f0ed13fad051afc4337095ed6889a4dd9
9db5fb1b42d26aca5e45415869b68da359335f04
6e9c356a7d05ea0b18377db4cc0f590976fd46c6
b0ae1309a64a4e49109da6e3a7e87c668c29e9c5
ok 54 - negative window clamps to 0

# passed all 54 test(s)
1..54
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5322-pack-objects-sparse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5322-pack-objects-sparse/.git/
expecting success of 5322.1 'setup repo': 
	test_commit initial &&
	for i in $(test_seq 1 3)
	do
		mkdir f$i &&
		for j in $(test_seq 1 3)
		do
			mkdir f$i/f$j &&
			echo $j >f$i/f$j/data.txt || return 1
		done
	done &&
	git add . &&
	git commit -m "Initialized trees" &&
	for i in $(test_seq 1 3)
	do
		git checkout -b topic$i main &&
		echo change-$i >f$i/f$i/data.txt &&
		git commit -a -m "Changed f$i/f$i/data.txt" || return 1
	done &&
	cat >packinput.txt <<-EOF &&
	topic1
	^topic2
	^topic3
	EOF
	git rev-parse			\
		topic1			\
		topic1^{tree}		\
		topic1:f1		\
		topic1:f1/f1		\
		topic1:f1/f1/data.txt | sort >expect_objects.txt

[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[main 8ccf85b] Initialized trees
 Author: A U Thor <author@example.com>
 9 files changed, 9 insertions(+)
 create mode 100644 f1/f1/data.txt
 create mode 100644 f1/f2/data.txt
 create mode 100644 f1/f3/data.txt
 create mode 100644 f2/f1/data.txt
 create mode 100644 f2/f2/data.txt
 create mode 100644 f2/f3/data.txt
 create mode 100644 f3/f1/data.txt
 create mode 100644 f3/f2/data.txt
 create mode 100644 f3/f3/data.txt
Switched to a new branch 'topic1'
[topic1 32cf0ab] Changed f1/f1/data.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'topic2'
[topic2 2b44896] Changed f2/f2/data.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'topic3'
[topic3 48a532e] Changed f3/f3/data.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup repo

expecting success of 5322.2 'non-sparse pack-objects': 
	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack &&
	git index-pack -o nonsparse.idx nonsparse.pack &&
	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
	test_cmp expect_objects.txt nonsparse_objects.txt

d614884b9b2195861f9f3410ae24b1c2fdc0c831
ok 2 - non-sparse pack-objects

expecting success of 5322.3 'sparse pack-objects': 
	git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
	git index-pack -o sparse.idx sparse.pack &&
	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
	test_cmp expect_objects.txt sparse_objects.txt

d614884b9b2195861f9f3410ae24b1c2fdc0c831
ok 3 - sparse pack-objects

expecting success of 5322.4 'duplicate a folder from f3 and commit to topic1': 
	git checkout topic1 &&
	echo change-3 >f3/f3/data.txt &&
	git commit -a -m "Changed f3/f3/data.txt" &&
	git rev-parse			\
		topic1~1		\
		topic1~1^{tree}		\
		topic1^{tree}		\
		topic1			\
		topic1:f1		\
		topic1:f1/f1		\
		topic1:f1/f1/data.txt | sort >required_objects.txt

Switched to branch 'topic1'
[topic1 200bcc4] Changed f3/f3/data.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - duplicate a folder from f3 and commit to topic1

expecting success of 5322.5 'non-sparse pack-objects': 
	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack &&
	git index-pack -o nonsparse.idx nonsparse.pack &&
	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
	comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt &&
	test_cmp required_objects.txt nonsparse_required_objects.txt

46a30e027f51c2ad758015d56bda1ee6d4c8c84c
ok 5 - non-sparse pack-objects

expecting success of 5322.6 'sparse pack-objects': 
	git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
	git index-pack -o sparse.idx sparse.pack &&
	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
	comm -1 -2 required_objects.txt sparse_objects.txt >sparse_required_objects.txt &&
	test_cmp required_objects.txt sparse_required_objects.txt

46a30e027f51c2ad758015d56bda1ee6d4c8c84c
ok 6 - sparse pack-objects

expecting success of 5322.7 'duplicate a folder from f1 into f3': 
	mkdir f3/f4 &&
	cp -r f1/f1/* f3/f4 &&
	git add f3/f4 &&
	git commit -m "Copied f1/f1 to f3/f4" &&
	cat >packinput.txt <<-EOF &&
	topic1
	^topic1~1
	EOF
	git rev-parse		\
		topic1		\
		topic1^{tree}   \
		topic1:f3 | sort >required_objects.txt

[topic1 b9b902e] Copied f1/f1 to f3/f4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f3/f4/data.txt
ok 7 - duplicate a folder from f1 into f3

expecting success of 5322.8 'non-sparse pack-objects': 
	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack &&
	git index-pack -o nonsparse.idx nonsparse.pack &&
	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
	comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt &&
	test_cmp required_objects.txt nonsparse_required_objects.txt

3b547739f421b9a4f5fc24410679e4e1f7de71cf
ok 8 - non-sparse pack-objects

expecting success of 5322.9 'sparse pack-objects': 
	GIT_TEST_PACK_SPARSE=-1 &&
	git rev-parse			\
		topic1			\
		topic1^{tree}		\
		topic1:f3		\
		topic1:f3/f4		\
		topic1:f3/f4/data.txt | sort >expect_sparse_objects.txt &&
	git pack-objects --stdout --revs <packinput.txt >sparse.pack &&
	git index-pack -o sparse.idx sparse.pack &&
	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
	test_cmp expect_sparse_objects.txt sparse_objects.txt

9f747802011a9f66e260a2ddb27f222338b37741
ok 9 - sparse pack-objects

expecting success of 5322.10 'pack.useSparse enables algorithm': 
	git config pack.useSparse true &&
	git pack-objects --stdout --revs <packinput.txt >sparse.pack &&
	git index-pack -o sparse.idx sparse.pack &&
	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
	test_cmp expect_sparse_objects.txt sparse_objects.txt

9f747802011a9f66e260a2ddb27f222338b37741
ok 10 - pack.useSparse enables algorithm

expecting success of 5322.11 'pack.useSparse overridden': 
	git pack-objects --stdout --revs --no-sparse <packinput.txt >sparse.pack &&
	git index-pack -o sparse.idx sparse.pack &&
	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
	test_cmp required_objects.txt sparse_objects.txt

3b547739f421b9a4f5fc24410679e4e1f7de71cf
ok 11 - pack.useSparse overridden

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5319-multi-pack-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/.git/
expecting success of 5319.1 'setup': 
	test_oid_cache <<-EOF
	idxoff sha1:2999
	idxoff sha256:3739

	packnameoff sha1:652
	packnameoff sha256:940

	fanoutoff sha1:1
	fanoutoff sha256:3
	EOF

ok 1 - setup

expecting success of 5319.2 'don't write midx with no packs': 
	test_must_fail git multi-pack-index --object-dir=. write &&
	test_path_is_missing pack/multi-pack-index

fatal: could not find object directory matching /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index
ok 2 - don't write midx with no packs

checking prerequisite: SHA1

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SHA1" &&
	case "$GIT_DEFAULT_HASH" in
	sha1) true ;;
	"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
	*) false ;;
	esac

)
prerequisite SHA1 ok
expecting success of 5319.3 'warn if a midx contains no oid': 
	cp "$TEST_DIRECTORY"/t5319/no-objects.midx $objdir/pack/multi-pack-index &&
	test_must_fail git multi-pack-index verify &&
	rm $objdir/pack/multi-pack-index

the midx contains no oid
ok 3 - warn if a midx contains no oid

expecting success of 5319.4 'create objects': 
	test_commit initial &&
	for i in $(test_seq 1 5)
	do
		generate_objects $i || return 1
	done &&
	commit_and_list_objects

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
HEAD is now at cd0747a
ok 4 - create objects

expecting success of 5319.5 'write midx with one v1 pack': 
	pack=$(git pack-objects --index-version=1 $objdir/pack/test <obj-list) &&
	test_when_finished rm $objdir/pack/test-$pack.pack \
		$objdir/pack/test-$pack.idx $objdir/pack/multi-pack-index &&
	git multi-pack-index --object-dir=$objdir write &&
	midx_read_expect 1 18 4 $objdir

ok 5 - write midx with one v1 pack

expecting success of 5319.6 'write midx with one v2 pack': 
	git pack-objects --index-version=2,0x40 $objdir/pack/test <obj-list &&
	git multi-pack-index --object-dir=$objdir write &&
	midx_read_expect 1 18 4 $objdir

a10c8cef352773b1f1b38ecc868f417f3d6029c9
ok 6 - write midx with one v2 pack

expecting success of 5319.7 'check normal git operations: one v2 pack': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 7 - check normal git operations: one v2 pack

expecting success of 5319.8 'corrupt idx reports errors': 
	idx=$(test-tool read-midx $objdir | grep "\.idx\$") &&
	mv $objdir/pack/$idx backup-$idx &&
	test_when_finished "mv backup-\$idx \$objdir/pack/\$idx" &&

	# This is the minimum size for a sha-1 based .idx; this lets
	# us pass perfunctory tests, but anything that actually opens and reads
	# the idx file will complain.
	test_copy_bytes 1064 <backup-$idx >$objdir/pack/$idx &&

	git -c core.multiPackIndex=true rev-list --objects --all 2>err &&
	grep "index unavailable" err

cd0747a9352b58d112f0010134351efc7bbad4a6
24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
e061f8d30c18afc392ff4b8b0c727a743806ceb8 
e43b5801e4ac39a512e5d9423fc272cf5c3343f9 deep_delta_001
78fcb2fa30f448929fae32736f0fb56733d08746 deep_delta_002
1c547eac61c40965963e85a56c24991ab1a0e3ef deep_delta_003
571c7b54485960a9820927983c702eec1b41e91a deep_delta_004
671d8800ae6936f107d70de2dbec536afb47d89a deep_delta_005
1297547aab30f952af805d38f6f1c1930cb3117b file_001
862f6954d9afd549b48fa2ef8e2f8ab96e309916 file_002
0471b3b8ab8da19f3968dc238e9555f4e48ce858 file_003
c80092496b80b5f21503b8c838dccfc1f2e2ddde file_004
e5a12c79cec70d52817054c4b9ef321003c6755f file_005
0b968294884af115eb5a1b941b3dabd48470c3bb file_101
e79c5e8f964493290a409888d5413a737e8e5dd5 initial.t
34a68de99f94f6f9e437a288349602768eae4b92 wide_delta_001
8517d36660dffb896fb4e283ad110023aaebaf1b wide_delta_002
e3fc6633c069c8e246d77a408e4747c2852ba44a wide_delta_003
37a071e55d1f2e07af146ca6017d98dd85beae68 wide_delta_004
a8179a233b7aeeb7a450c5d321d4b73df936b64b wide_delta_005
9351ffa1fbcc36d9afdb297abc55b9e0239739d0 
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
error: packfile .git/objects/pack/test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.pack index unavailable
ok 8 - corrupt idx reports errors

expecting success of 5319.9 'add more objects': 
	for i in $(test_seq 6 10)
	do
		generate_objects $i || return 1
	done &&
	commit_and_list_objects

HEAD is now at 9650f03
ok 9 - add more objects

expecting success of 5319.10 'write midx with two packs': 
	git pack-objects --index-version=1 $objdir/pack/test-2 <obj-list &&
	git multi-pack-index --object-dir=$objdir write &&
	midx_read_expect 2 34 4 $objdir

0994129a102d56705c119b91822cbd6ef1599f8f
ok 10 - write midx with two packs

expecting success of 5319.11 'check normal git operations: two packs': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 11 - check normal git operations: two packs

expecting success of 5319.12 'write midx with --stdin-packs': 
	rm -fr $objdir/pack/multi-pack-index &&

	idx="$(find $objdir/pack -name "test-2-*.idx")" &&
	basename "$idx" >in &&

	git multi-pack-index write --stdin-packs <in &&

	test-tool read-midx $objdir | grep "\.idx$" >packs &&

	test_cmp packs in

ok 12 - write midx with --stdin-packs

expecting success of 5319.13 'check normal git operations: mixed mode (one pack + extra)': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 13 - check normal git operations: mixed mode (one pack + extra)

expecting success of 5319.14 'write progress off for redirected stderr': 
	git multi-pack-index --object-dir=$objdir write 2>err &&
	test_line_count = 0 err

ok 14 - write progress off for redirected stderr

expecting success of 5319.15 'write force progress on for stderr': 
	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir write --progress 2>err &&
	test_file_not_empty err

ok 15 - write force progress on for stderr

expecting success of 5319.16 'write with the --no-progress option': 
	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir write --no-progress 2>err &&
	test_line_count = 0 err

ok 16 - write with the --no-progress option

expecting success of 5319.17 'add more packs': 
	for j in $(test_seq 11 20)
	do
		generate_objects $j &&
		commit_and_list_objects &&
		git pack-objects --index-version=2 $objdir/pack/test-pack <obj-list || return 1
	done

HEAD is now at b415cb4
4c6d8ddb029b2809c9258616e15d919036135381
HEAD is now at 3e2c62c
1d8476b3e6c9041b953f8d970be906a61d86e9b3
HEAD is now at 07c6d1f
d2e5559686bb7fa03381e06d89e575c002e7877a
HEAD is now at e2467d3
4885e9566d4b7767d46a2de15594b706a00227ad
HEAD is now at 047779e
711553cae61e2a02b26974c7b6367f9dd8a2dd9e
HEAD is now at 449cf21
44a23559d57770dcd870b620d9c90b83b8b1dd7d
HEAD is now at c4c6a87
0329a72b9cac741e369a25111f9a7141e7af5809
HEAD is now at 66c7cd9
481644606c70ac050f24a3f7a78d1d12407e24cd
HEAD is now at 523abe2
1b5ae1b8c7f825dd70c1b2bd9d38143b8d9093e8
HEAD is now at 552d56d
283663f1cf4f2bfdb8d263c035369396648a8162
ok 17 - add more packs

expecting success of 5319.18 'check normal git operations: mixed mode (two packs + extra)': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 18 - check normal git operations: mixed mode (two packs + extra)

expecting success of 5319.19 'write midx with twelve packs': 
	git multi-pack-index --object-dir=$objdir write &&
	midx_read_expect 12 74 4 $objdir

ok 19 - write midx with twelve packs

expecting success of 5319.20 'check normal git operations: twelve packs': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 20 - check normal git operations: twelve packs

expecting success of 5319.21 'multi-pack-index *.rev cleanup with --object-dir': 
	git init repo &&
	git clone -s repo alternate &&

	test_when_finished "rm -rf repo alternate" &&

	(
		cd repo &&
		test_commit base &&
		git repack -d
	) &&

	ours="alternate/.git/objects/pack/multi-pack-index-123.rev" &&
	theirs="repo/.git/objects/pack/multi-pack-index-abc.rev" &&
	touch "$ours" "$theirs" &&

	(
		cd alternate &&
		git multi-pack-index --object-dir ../repo/.git/objects write
	) &&

	# writing a midx in "repo" should not remove the .rev file in the
	# alternate
	test_path_is_file repo/.git/objects/pack/multi-pack-index &&
	test_path_is_file $ours &&
	test_path_is_missing $theirs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
Cloning into 'alternate'...
warning: You appear to have cloned an empty repository.
done.
[master (root-commit) 369f281] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 21 - multi-pack-index *.rev cleanup with --object-dir

expecting success of 5319.22 'warn on improper hash version': 
	git init --object-format=sha1 sha1 &&
	(
		cd sha1 &&
		git config core.multiPackIndex true &&
		test_commit 1 &&
		git repack -a &&
		git multi-pack-index write &&
		mv .git/objects/pack/multi-pack-index ../mpi-sha1
	) &&
	git init --object-format=sha256 sha256 &&
	(
		cd sha256 &&
		git config core.multiPackIndex true &&
		test_commit 1 &&
		git repack -a &&
		git multi-pack-index write &&
		mv .git/objects/pack/multi-pack-index ../mpi-sha256
	) &&
	(
		cd sha1 &&
		mv ../mpi-sha256 .git/objects/pack/multi-pack-index &&
		git log -1 2>err &&
		test_i18ngrep "multi-pack-index hash version 2 does not match version 1" err
	) &&
	(
		cd sha256 &&
		mv ../mpi-sha1 .git/objects/pack/multi-pack-index &&
		git log -1 2>err &&
		test_i18ngrep "multi-pack-index hash version 1 does not match version 2" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/sha1/.git/
[master (root-commit) 18524c8] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/sha256/.git/
[master (root-commit) 345dfbd] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
commit 18524c8e85645e7997518142391517adbceaf2f0
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    1
error: multi-pack-index hash version 2 does not match version 1
commit 345dfbd6547be3dd8f35d16606a9cec92e8477fb38aebea181850087b112b001
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    1
error: multi-pack-index hash version 1 does not match version 2
ok 22 - warn on improper hash version

expecting success of 5319.23 'midx picks objects from preferred pack': 
	test_when_finished rm -rf preferred.git &&
	git init --bare preferred.git &&
	(
		cd preferred.git &&

		a=$(echo "a" | git hash-object -w --stdin) &&
		b=$(echo "b" | git hash-object -w --stdin) &&
		c=$(echo "c" | git hash-object -w --stdin) &&

		# Set up two packs, duplicating the object "B" at different
		# offsets.
		#
		# Note that the "BC" pack (the one we choose as preferred) sorts
		# lexically after the "AB" pack, meaning that omitting the
		# --preferred-pack argument would cause this test to fail (since
		# the MIDX code would select the copy of "b" in the "AB" pack).
		git pack-objects objects/pack/test-AB <<-EOF &&
		$a
		$b
		EOF
		bc=$(git pack-objects objects/pack/test-BC <<-EOF
		$b
		$c
		EOF
		) &&

		git multi-pack-index --object-dir=objects \
			write --preferred-pack=test-BC-$bc.idx 2>err &&
		test_must_be_empty err &&

		test-tool read-midx --show-objects objects >out &&

		ofs=$(git show-index <objects/pack/test-BC-$bc.idx | grep $b |
			cut -d" " -f1) &&
		printf "%s %s\tobjects/pack/test-BC-%s.pack\n" \
			"$b" "$ofs" "$bc" >expect &&
		grep ^$b out >actual &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/preferred.git/
c6b8483f084a1726d60c178cfc68f09fad6cc069
ok 23 - midx picks objects from preferred pack

expecting success of 5319.24 'preferred packs must be non-empty': 
	test_when_finished rm -rf preferred.git &&
	git init preferred.git &&
	(
		cd preferred.git &&

		test_commit base &&
		git repack -ad &&

		empty="$(git pack-objects $objdir/pack/pack </dev/null)" &&

		test_must_fail git multi-pack-index write \
			--preferred-pack=pack-$empty.pack 2>err &&
		grep "with no objects" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/preferred.git/.git/
[master (root-commit) 369f281] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
error: cannot select preferred pack .git/objects/pack/pack-029d08823bd8a8eab510ad6ac75c823cfd3ed31e.pack with no objects
ok 24 - preferred packs must be non-empty

expecting success of 5319.25 'verify multi-pack-index success': 
	git multi-pack-index verify --object-dir=$objdir

ok 25 - verify multi-pack-index success

expecting success of 5319.26 'verify progress off for redirected stderr': 
	git multi-pack-index verify --object-dir=$objdir 2>err &&
	test_line_count = 0 err

ok 26 - verify progress off for redirected stderr

expecting success of 5319.27 'verify force progress on for stderr': 
	git multi-pack-index verify --object-dir=$objdir --progress 2>err &&
	test_file_not_empty err

ok 27 - verify force progress on for stderr

expecting success of 5319.28 'verify with the --no-progress option': 
	git multi-pack-index verify --object-dir=$objdir --no-progress 2>err &&
	test_line_count = 0 err

ok 28 - verify with the --no-progress option

expecting success of 5319.29 'verify bad signature': 
	corrupt_midx_and_verify 0 "\00" $objdir \
		"multi-pack-index signature"

1+0 records in
1+0 records out
1 byte copied, 0.000582688 s, 1.7 kB/s
fatal: multi-pack-index signature 0x00494458 does not match signature 0x4d494458
ok 29 - verify bad signature

expecting success of 5319.30 'verify bad version': 
	corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
		"multi-pack-index version"

1+0 records in
1+0 records out
1 byte copied, 0.0109764 s, 0.1 kB/s
fatal: multi-pack-index version 0 not recognized
ok 30 - verify bad version

expecting success of 5319.31 'verify bad OID version': 
	corrupt_midx_and_verify $MIDX_BYTE_OID_VERSION "\03" $objdir \
		"hash version"

1+0 records in
1+0 records out
1 byte copied, 0.00141739 s, 0.7 kB/s
error: multi-pack-index hash version 3 does not match version 1
ok 31 - verify bad OID version

expecting success of 5319.32 'verify truncated chunk count': 
	corrupt_midx_and_verify $MIDX_BYTE_CHUNK_COUNT "\01" $objdir \
		"final chunk has non-zero id"

1+0 records in
1+0 records out
1 byte copied, 0.00153206 s, 0.7 kB/s
error: final chunk has non-zero id 4f494446
ok 32 - verify truncated chunk count

expecting success of 5319.33 'verify extended chunk count': 
	corrupt_midx_and_verify $MIDX_BYTE_CHUNK_COUNT "\07" $objdir \
		"terminating chunk id appears earlier than expected"

1+0 records in
1+0 records out
1 byte copied, 0.00543053 s, 0.2 kB/s
error: terminating chunk id appears earlier than expected
ok 33 - verify extended chunk count

expecting success of 5319.34 'verify missing required chunk': 
	corrupt_midx_and_verify $MIDX_BYTE_CHUNK_ID "\01" $objdir \
		"missing required"

1+0 records in
1+0 records out
1 byte copied, 0.00257076 s, 0.4 kB/s
fatal: multi-pack-index missing required pack-name chunk
ok 34 - verify missing required chunk

expecting success of 5319.35 'verify invalid chunk offset': 
	corrupt_midx_and_verify $MIDX_BYTE_CHUNK_OFFSET "\01" $objdir \
		"improper chunk offset(s)"

1+0 records in
1+0 records out
1 byte copied, 0.0017674 s, 0.6 kB/s
error: improper chunk offset(s) 100000000000048 and 2d4
ok 35 - verify invalid chunk offset

expecting success of 5319.36 'verify packnames out of order': 
	corrupt_midx_and_verify $MIDX_BYTE_PACKNAME_ORDER "z" $objdir \
		"pack names out of order"

1+0 records in
1+0 records out
1 byte copied, 0.00158906 s, 0.6 kB/s
fatal: multi-pack-index pack names out of order: 'tezt-2-0994129a102d56705c119b91822cbd6ef1599f8f.idx' before 'test-a10c8cef352773b1f1b38ecc868f417f3d6029c9.idx'
ok 36 - verify packnames out of order

expecting success of 5319.37 'verify packnames out of order': 
	corrupt_midx_and_verify $MIDX_BYTE_PACKNAME_ORDER "a" $objdir \
		"failed to load pack"

1+0 records in
1+0 records out
1 byte copied, 0.00164306 s, 0.6 kB/s
failed to load pack in position 0
failed to load pack entry for oid[41] = 8f94df605db2ec0d0bb7962abbc87d8d1b2f6f00
ok 37 - verify packnames out of order

expecting success of 5319.38 'verify oid fanout out of order': 
	corrupt_midx_and_verify $MIDX_BYTE_OID_FANOUT_ORDER "\01" $objdir \
		"oid fanout out of order"

1+0 records in
1+0 records out
1 byte copied, 0.00128705 s, 0.8 kB/s
oid fanout out of order: fanout[250] = 1004a > 4a = fanout[251]
ok 38 - verify oid fanout out of order

expecting success of 5319.39 'verify oid lookup out of order': 
	corrupt_midx_and_verify $MIDX_BYTE_OID_LOOKUP "\00" $objdir \
		"oid lookup out of order"

1+0 records in
1+0 records out
1 byte copied, 0.00140472 s, 0.7 kB/s
oid lookup out of order: oid[15] = 2f695f39a9ae90106abc3a1efc22b6cfe2522e89 >= 005f923c2d2e1fff9ec067b42443fff88aeebc67 = oid[16]
ok 39 - verify oid lookup out of order

expecting success of 5319.40 'verify incorrect pack-int-id': 
	corrupt_midx_and_verify $MIDX_BYTE_PACK_INT_ID "\07" $objdir \
		"bad pack-int-id"

1+0 records in
1+0 records out
1 byte copied, 0.00175973 s, 0.6 kB/s
fatal: bad pack-int-id: 1797 (12 total packs)
ok 40 - verify incorrect pack-int-id

expecting success of 5319.41 'verify incorrect offset': 
	corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\377" $objdir \
		"incorrect object offset"

1+0 records in
1+0 records out
1 byte copied, 0.00136172 s, 0.7 kB/s
incorrect object offset for oid[16] = 305f923c2d2e1fff9ec067b42443fff88aeebc67: ff8f != 138f
ok 41 - verify incorrect offset

expecting success of 5319.42 'git-fsck incorrect offset': 
	corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\377" $objdir \
		"incorrect object offset" \
		"git -c core.multiPackIndex=true fsck" &&
	test_unconfig core.multiPackIndex &&
	test_must_fail git fsck &&
	git -c core.multiPackIndex=false fsck

1+0 records in
1+0 records out
1 byte copied, 0.00137938 s, 0.7 kB/s
incorrect object offset for oid[16] = 305f923c2d2e1fff9ec067b42443fff88aeebc67: ff8f != 138f
incorrect checksum
incorrect object offset for oid[16] = 305f923c2d2e1fff9ec067b42443fff88aeebc67: ff8f != 138f
ok 42 - git-fsck incorrect offset

expecting success of 5319.43 'corrupt MIDX is not reused': 
	corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\377" $objdir \
		"incorrect object offset" &&
	git multi-pack-index write 2>err &&
	test_i18ngrep checksum.mismatch err &&
	git multi-pack-index verify

1+0 records in
1+0 records out
1 byte copied, 0.00142839 s, 0.7 kB/s
incorrect object offset for oid[16] = 305f923c2d2e1fff9ec067b42443fff88aeebc67: ff8f != 138f
warning: ignoring existing multi-pack-index; checksum mismatch
ok 43 - corrupt MIDX is not reused

expecting success of 5319.44 'verify incorrect checksum': 
	pos=$(($(wc -c <$objdir/pack/multi-pack-index) - 10)) &&
	corrupt_midx_and_verify $pos \
		"\377\377\377\377\377\377\377\377\377\377" \
		$objdir "incorrect checksum"

10+0 records in
10+0 records out
10 bytes copied, 0.00935201 s, 1.1 kB/s
incorrect checksum
ok 44 - verify incorrect checksum

expecting success of 5319.45 'repack progress off for redirected stderr': 
	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir repack 2>err &&
	test_line_count = 0 err

ok 45 - repack progress off for redirected stderr

expecting success of 5319.46 'repack force progress on for stderr': 
	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir repack --progress 2>err &&
	test_file_not_empty err

ok 46 - repack force progress on for stderr

expecting success of 5319.47 'repack with the --no-progress option': 
	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir repack --no-progress 2>err &&
	test_line_count = 0 err

ok 47 - repack with the --no-progress option

expecting success of 5319.48 'repack removes multi-pack-index when deleting packs': 
	test_path_is_file $objdir/pack/multi-pack-index &&
	# Set GIT_TEST_MULTI_PACK_INDEX to 0 to avoid writing a new
	# multi-pack-index after repacking, but set "core.multiPackIndex" to
	# true so that "git repack" can read the existing MIDX.
	GIT_TEST_MULTI_PACK_INDEX=0 git -c core.multiPackIndex repack -adf &&
	test_path_is_missing $objdir/pack/multi-pack-index

ok 48 - repack removes multi-pack-index when deleting packs

expecting success of 5319.49 'repack preserves multi-pack-index when creating packs': 
	git init preserve &&
	test_when_finished "rm -fr preserve" &&
	(
		cd preserve &&
		packdir=.git/objects/pack &&
		midx=$packdir/multi-pack-index &&

		test_commit 1 &&
		pack1=$(git pack-objects --all $packdir/pack) &&
		touch $packdir/pack-$pack1.keep &&
		test_commit 2 &&
		pack2=$(git pack-objects --revs $packdir/pack) &&
		touch $packdir/pack-$pack2.keep &&

		git multi-pack-index write &&
		cp $midx $midx.bak &&

		cat >pack-input <<-EOF &&
		HEAD
		^HEAD~1
		EOF
		test_commit 3 &&
		pack3=$(git pack-objects --revs $packdir/pack <pack-input) &&
		test_commit 4 &&
		pack4=$(git pack-objects --revs $packdir/pack <pack-input) &&

		GIT_TEST_MULTI_PACK_INDEX=0 git -c core.multiPackIndex repack -ad &&
		ls -la $packdir &&
		test_path_is_file $packdir/pack-$pack1.pack &&
		test_path_is_file $packdir/pack-$pack2.pack &&
		test_path_is_missing $packdir/pack-$pack3.pack &&
		test_path_is_missing $packdir/pack-$pack4.pack &&
		test_cmp_bin $midx.bak $midx
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/preserve/.git/
[master (root-commit) 18524c8] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 417a8d8] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master b57da8e] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master a26e725] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
total 32
drwxr-xr-x 1 buildd buildd  866 Dec 28 07:48 .
drwxr-xr-x 1 buildd buildd   16 Dec 28 07:48 ..
-rw-r--r-- 1 buildd buildd 1300 Dec 28 07:48 multi-pack-index
-rw-r--r-- 1 buildd buildd 1300 Dec 28 07:48 multi-pack-index.bak
-r--r--r-- 1 buildd buildd 1072 Dec 28 07:48 pack-029d08823bd8a8eab510ad6ac75c823cfd3ed31e.idx
-rw-r--r-- 1 buildd buildd    0 Dec 28 07:48 pack-029d08823bd8a8eab510ad6ac75c823cfd3ed31e.keep
-r--r--r-- 1 buildd buildd   32 Dec 28 07:48 pack-029d08823bd8a8eab510ad6ac75c823cfd3ed31e.pack
-r--r--r-- 1 buildd buildd 1156 Dec 28 07:48 pack-759d6abd76f238b50cff99be39e99979d3691e8c.idx
-rw-r--r-- 1 buildd buildd    0 Dec 28 07:48 pack-759d6abd76f238b50cff99be39e99979d3691e8c.keep
-r--r--r-- 1 buildd buildd  211 Dec 28 07:48 pack-759d6abd76f238b50cff99be39e99979d3691e8c.pack
-r--r--r-- 1 buildd buildd 1324 Dec 28 07:48 pack-f3bd8538a7920fa218713e1ba855f020af9ef053.idx
-r--r--r-- 1 buildd buildd  676 Dec 28 07:48 pack-f3bd8538a7920fa218713e1ba855f020af9ef053.pack
ok 49 - repack preserves multi-pack-index when creating packs

expecting success of 5319.50 'check normal git operations: after repack': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 50 - check normal git operations: after repack

expecting success of 5319.51 'multi-pack-index and pack-bitmap': 
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -c repack.writeBitmaps=true repack -ad &&
	git multi-pack-index write &&
	git rev-list --test-bitmap HEAD

Bitmap v1 test (13 entries loaded)
Found bitmap for '552d56d6820f11b3931f91152c2ecf1a11fc074f'. 128 bits / e6cc631c checksum
Verifying bitmap entries:   1% (1/88)
Verifying bitmap entries:   2% (2/88)
Verifying bitmap entries:   3% (3/88)
Verifying bitmap entries:   4% (4/88)
Verifying bitmap entries:   5% (5/88)
Verifying bitmap entries:   6% (6/88)
Verifying bitmap entries:   7% (7/88)
Verifying bitmap entries:   9% (8/88)
Verifying bitmap entries:  10% (9/88)
Verifying bitmap entries:  11% (10/88)
Verifying bitmap entries:  12% (11/88)
Verifying bitmap entries:  13% (12/88)
Verifying bitmap entries:  14% (13/88)
Verifying bitmap entries:  15% (14/88)
Verifying bitmap entries:  17% (15/88)
Verifying bitmap entries:  18% (16/88)
Verifying bitmap entries:  19% (17/88)
Verifying bitmap entries:  20% (18/88)
Verifying bitmap entries:  21% (19/88)
Verifying bitmap entries:  22% (20/88)
Verifying bitmap entries:  23% (21/88)
Verifying bitmap entries:  25% (22/88)
Verifying bitmap entries:  26% (23/88)
Verifying bitmap entries:  27% (24/88)
Verifying bitmap entries:  28% (25/88)
Verifying bitmap entries:  29% (26/88)
Verifying bitmap entries:  30% (27/88)
Verifying bitmap entries:  31% (28/88)
Verifying bitmap entries:  32% (29/88)
Verifying bitmap entries:  34% (30/88)
Verifying bitmap entries:  35% (31/88)
Verifying bitmap entries:  36% (32/88)
Verifying bitmap entries:  37% (33/88)
Verifying bitmap entries:  38% (34/88)
Verifying bitmap entries:  39% (35/88)
Verifying bitmap entries:  40% (36/88)
Verifying bitmap entries:  42% (37/88)
Verifying bitmap entries:  43% (38/88)
Verifying bitmap entries:  44% (39/88)
Verifying bitmap entries:  45% (40/88)
Verifying bitmap entries:  46% (41/88)
Verifying bitmap entries:  47% (42/88)
Verifying bitmap entries:  48% (43/88)
Verifying bitmap entries:  50% (44/88)
Verifying bitmap entries:  51% (45/88)
Verifying bitmap entries:  52% (46/88)
Verifying bitmap entries:  53% (47/88)
Verifying bitmap entries:  54% (48/88)
Verifying bitmap entries:  55% (49/88)
Verifying bitmap entries:  56% (50/88)
Verifying bitmap entries:  57% (51/88)
Verifying bitmap entries:  59% (52/88)
Verifying bitmap entries:  60% (53/88)
Verifying bitmap entries:  61% (54/88)
Verifying bitmap entries:  62% (55/88)
Verifying bitmap entries:  63% (56/88)
Verifying bitmap entries:  64% (57/88)
Verifying bitmap entries:  65% (58/88)
Verifying bitmap entries:  67% (59/88)
Verifying bitmap entries:  68% (60/88)
Verifying bitmap entries:  69% (61/88)
Verifying bitmap entries:  70% (62/88)
Verifying bitmap entries:  71% (63/88)
Verifying bitmap entries:  72% (64/88)
Verifying bitmap entries:  73% (65/88)
Verifying bitmap entries:  75% (66/88)
Verifying bitmap entries:  76% (67/88)
Verifying bitmap entries:  77% (68/88)
Verifying bitmap entries:  78% (69/88)
Verifying bitmap entries:  79% (70/88)
Verifying bitmap entries:  80% (71/88)
Verifying bitmap entries:  81% (72/88)
Verifying bitmap entries:  82% (73/88)
Verifying bitmap entries:  84% (74/88)
Verifying bitmap entries:  85% (75/88)
Verifying bitmap entries:  86% (76/88)
Verifying bitmap entries:  87% (77/88)
Verifying bitmap entries:  88% (78/88)
Verifying bitmap entries:  89% (79/88)
Verifying bitmap entries:  90% (80/88)
Verifying bitmap entries:  92% (81/88)
Verifying bitmap entries:  93% (82/88)
Verifying bitmap entries:  94% (83/88)
Verifying bitmap entries:  95% (84/88)
Verifying bitmap entries:  96% (85/88)
Verifying bitmap entries:  97% (86/88)
Verifying bitmap entries:  98% (87/88)
Verifying bitmap entries: 100% (88/88)
Verifying bitmap entries: 100% (88/88), done.
OK!
ok 51 - multi-pack-index and pack-bitmap

expecting success of 5319.52 'multi-pack-index and alternates': 
	git init --bare alt.git &&
	echo $(pwd)/alt.git/objects >.git/objects/info/alternates &&
	echo content1 >file1 &&
	altblob=$(GIT_DIR=alt.git git hash-object -w file1) &&
	git cat-file blob $altblob &&
	git rev-list --all

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/alt.git/
content1
552d56d6820f11b3931f91152c2ecf1a11fc074f
24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
523abe232fb4b7b686a145aa302ea4a19e94f75f
66c7cd909447f8f29bd3553b0fb2f6512d8e6752
c4c6a878655615fb0e9fa97b0473c1fbdb0b298b
449cf2153bd5dd5a5dad8bbc707653502e036576
047779e14850a36f69fefa6343e0f8a567e1a73e
e2467d303a5f701dd2748207035e3d6fb96f865b
07c6d1f0c163edff34bac6da1fea4dcf321e55fa
3e2c62cf4a31af79719533e93d0acbbaf3a77688
b415cb40170102eb11cb275c506470a89d8cd0e5
9650f031c9f135ac62532bbe0d0c31c73d1bb7fb
cd0747a9352b58d112f0010134351efc7bbad4a6
ok 52 - multi-pack-index and alternates

expecting success of 5319.53 'check normal git operations: with alternate (local midx)': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 53 - check normal git operations: with alternate (local midx)

expecting success of 5319.54 'multi-pack-index in an alternate': 
	mv .git/objects/pack/* alt.git/objects/pack &&
	test_commit add_local_objects &&
	git repack --local &&
	git multi-pack-index write &&
	midx_read_expect 1 3 4 $objdir &&
	git reset --hard HEAD~1 &&
	rm -f .git/objects/pack/*

[master 705a1ea] add_local_objects
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 add_local_objects.t
HEAD is now at 552d56d
ok 54 - multi-pack-index in an alternate

expecting success of 5319.55 'check normal git operations: with alternate (remote midx)': 
		midx_git_two_modes "rev-list --objects --all" &&
		midx_git_two_modes "log --raw" &&
		midx_git_two_modes "count-objects --verbose" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
		midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
	
ok 55 - check normal git operations: with alternate (remote midx)

expecting success of 5319.56 'force some 64-bit offsets with pack-objects': 
	mkdir objects64 &&
	mkdir objects64/pack &&
	for i in $(test_seq 1 11)
	do
		generate_objects 11 || return 1
	done &&
	commit_and_list_objects &&
	pack64=$(git pack-objects --index-version=2,0x40 objects64/pack/test-64 <obj-list) &&
	idx64=objects64/pack/test-64-$pack64.idx &&
	chmod u+w $idx64 &&
	corrupt_data $idx64 $(test_oid idxoff) "\02" &&
	# objects64 is not a real repository, but can serve as an alternate
	# anyway so we can write a MIDX into it
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&
		( cd ../objects64 && pwd ) >.git/objects/info/alternates &&
		midx64=$(git multi-pack-index --object-dir=../objects64 write)
	) &&
	midx_read_expect 1 63 5 objects64 " large-offsets"

HEAD is now at 287f5d9
1+0 records in
1+0 records out
1 byte copied, 0.000652691 s, 1.5 kB/s
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
ok 56 - force some 64-bit offsets with pack-objects

expecting success of 5319.57 'verify multi-pack-index with 64-bit offsets': 
	git multi-pack-index verify --object-dir=objects64

ok 57 - verify multi-pack-index with 64-bit offsets

expecting success of 5319.58 'verify incorrect 64-bit offset': 
	corrupt_midx_and_verify $MIDX_BYTE_LARGE_OFFSET "\07" objects64 \
		"incorrect object offset"

1+0 records in
1+0 records out
1 byte copied, 0.000473017 s, 2.1 kB/s
incorrect object offset for oid[61] = f2377b316d0d92e3c29a2d6dba598ca02fb80e9c: 70be4 != be4
ok 58 - verify incorrect 64-bit offset

expecting success of 5319.59 'setup expire tests': 
	mkdir dup &&
	(
		cd dup &&
		git init &&
		test-tool genrandom "data" 4096 >large_file.txt &&
		git update-index --add large_file.txt &&
		for i in $(test_seq 1 20)
		do
			test_commit $i || exit 1
		done &&
		git branch A HEAD &&
		git branch B HEAD~8 &&
		git branch C HEAD~13 &&
		git branch D HEAD~16 &&
		git branch E HEAD~18 &&
		git pack-objects --revs .git/objects/pack/pack-A <<-EOF &&
		refs/heads/A
		^refs/heads/B
		EOF
		git pack-objects --revs .git/objects/pack/pack-B <<-EOF &&
		refs/heads/B
		^refs/heads/C
		EOF
		git pack-objects --revs .git/objects/pack/pack-C <<-EOF &&
		refs/heads/C
		^refs/heads/D
		EOF
		git pack-objects --revs .git/objects/pack/pack-D <<-EOF &&
		refs/heads/D
		^refs/heads/E
		EOF
		git pack-objects --revs .git/objects/pack/pack-E <<-EOF &&
		refs/heads/E
		EOF
		git multi-pack-index write &&
		cp -r .git/objects/pack .git/objects/pack-backup
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/dup/.git/
[master (root-commit) fc900d7] 1
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 1.t
 create mode 100644 large_file.txt
[master 3d95ce8] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master e7fa9d0] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master 5f5c1a3] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 291575a] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[master 21de077] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[master 8d319c4] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[master 555b618] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[master f83fa44] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[master d476b4f] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[master c177bfa] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[master f27c05e] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[master 0946b81] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[master 5442449] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[master 58961b9] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[master 0a09718] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
[master f471ae1] 17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 17.t
[master 93bed9f] 18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 18.t
[master d0cf3fc] 19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 19.t
[master c2adbd0] 20
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 20.t
40289997979ee9f2d7198a5b4ac9fe14e27cbe4b
926e20b0e641003b2f6bcddd6ccf53e7741c8642
b33c048d7202659249bb0cea7bbc997ce448c75d
49ca36507a52bbba6d1768e28666eb0f4e5f7d95
31ea0966bb15206fbfd1b4c2f5be4b24a03050f5
ok 59 - setup expire tests

expecting success of 5319.60 'expire does not remove any packs': 
	(
		cd dup &&
		ls .git/objects/pack >expect &&
		git multi-pack-index expire &&
		ls .git/objects/pack >actual &&
		test_cmp expect actual
	)

ok 60 - expire does not remove any packs

expecting success of 5319.61 'expire progress off for redirected stderr': 
	(
		cd dup &&
		git multi-pack-index expire 2>err &&
		test_line_count = 0 err
	)

ok 61 - expire progress off for redirected stderr

expecting success of 5319.62 'expire force progress on for stderr': 
	(
		cd dup &&
		GIT_PROGRESS_DELAY=0 git multi-pack-index expire --progress 2>err &&
		test_file_not_empty err
	)

ok 62 - expire force progress on for stderr

expecting success of 5319.63 'expire with the --no-progress option': 
	(
		cd dup &&
		GIT_PROGRESS_DELAY=0 git multi-pack-index expire --no-progress 2>err &&
		test_line_count = 0 err
	)

ok 63 - expire with the --no-progress option

expecting success of 5319.64 'expire removes unreferenced packs': 
	(
		cd dup &&
		git pack-objects --revs .git/objects/pack/pack-combined <<-EOF &&
		refs/heads/A
		^refs/heads/C
		EOF
		git multi-pack-index write &&
		ls .git/objects/pack | grep -v -e pack-[AB] >expect &&
		git multi-pack-index expire &&
		ls .git/objects/pack >actual &&
		test_cmp expect actual &&
		ls .git/objects/pack/ | grep idx >expect-idx &&
		test-tool read-midx .git/objects | grep idx >actual-midx &&
		test_cmp expect-idx actual-midx &&
		git multi-pack-index verify &&
		git fsck
	)

5bd21ad967ccd59e40bf8287b28891d4bf7e0d08
ok 64 - expire removes unreferenced packs

expecting success of 5319.65 'repack with minimum size does not alter existing packs': 
	(
		cd dup &&
		rm -rf .git/objects/pack &&
		mv .git/objects/pack-backup .git/objects/pack &&
		test-tool chmtime =-5 .git/objects/pack/pack-D* &&
		test-tool chmtime =-4 .git/objects/pack/pack-C* &&
		test-tool chmtime =-3 .git/objects/pack/pack-B* &&
		test-tool chmtime =-2 .git/objects/pack/pack-A* &&
		ls .git/objects/pack >expect &&
		MINSIZE=$(test-tool path-utils file-size .git/objects/pack/*pack | sort -n | head -n 1) &&
		git multi-pack-index repack --batch-size=$MINSIZE &&
		ls .git/objects/pack >actual &&
		test_cmp expect actual
	)

ok 65 - repack with minimum size does not alter existing packs

expecting success of 5319.66 'repack respects repack.packKeptObjects=false': 
	test_when_finished rm -f dup/.git/objects/pack/*keep &&
	(
		cd dup &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 5 idx-list &&
		ls .git/objects/pack/*.pack | sed "s/\.pack/.keep/" >keep-list &&
		test_line_count = 5 keep-list &&
		for keep in $(cat keep-list)
		do
			touch $keep || return 1
		done &&
		git multi-pack-index repack --batch-size=0 &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 5 idx-list &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 5 midx-list &&
		THIRD_SMALLEST_SIZE=$(test-tool path-utils file-size .git/objects/pack/*pack | sort -n | sed -n 3p) &&
		BATCH_SIZE=$((THIRD_SMALLEST_SIZE + 1)) &&
		git multi-pack-index repack --batch-size=$BATCH_SIZE &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 5 idx-list &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 5 midx-list
	)

ok 66 - repack respects repack.packKeptObjects=false

expecting success of 5319.67 'repack creates a new pack': 
	(
		cd dup &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 5 idx-list &&
		THIRD_SMALLEST_SIZE=$(test-tool path-utils file-size .git/objects/pack/*pack | sort -n | head -n 3 | tail -n 1) &&
		BATCH_SIZE=$(($THIRD_SMALLEST_SIZE + 1)) &&
		git multi-pack-index repack --batch-size=$BATCH_SIZE &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 6 idx-list &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 6 midx-list
	)

ok 67 - repack creates a new pack

expecting success of 5319.68 'repack (all) ignores cruft pack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&
		test_commit --no-tag unreachable &&

		git reset --hard base &&
		git reflog expire --all --expire=all &&
		git repack --cruft -d &&

		git multi-pack-index write &&

		find $objdir/pack | sort >before &&
		git multi-pack-index repack --batch-size=0 &&
		find $objdir/pack | sort >after &&

		test_cmp before after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
[master (root-commit) fa8d2f5] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master b4d1cc0] unreachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unreachable.t
HEAD is now at fa8d2f5 base
ok 68 - repack (all) ignores cruft pack

expecting success of 5319.69 'repack (--batch-size) ignores cruft pack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit_bulk 5 &&
		test_commit --no-tag unreachable &&

		git reset --hard HEAD^ &&
		git reflog expire --all --expire=all &&
		git repack --cruft -d &&

		test_commit four &&

		find $objdir/pack -type f -name "*.pack" | sort >before &&
		git repack -d &&
		find $objdir/pack -type f -name "*.pack" | sort >after &&

		pack="$(comm -13 before after)" &&
		test_file_size "$pack" >sz &&
		# Set --batch-size to twice the size of the pack created
		# in the previous step, since this is enough to
		# accommodate it and the cruft pack.
		#
		# This means that the MIDX machinery *could* combine the
		# new and cruft packs together.
		#
		# We ensure that it does not below.
		batch="$((($(cat sz) * 2)))" &&

		git multi-pack-index write &&

		find $objdir/pack | sort >before &&
		git multi-pack-index repack --batch-size=$batch &&
		find $objdir/pack | sort >after &&

		test_cmp before after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           15 (         0 duplicates                  )
      blobs  :            5 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            5 (         0 duplicates          4 deltas of          4 attempts)
      commits:            5 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       1114 /       1114
---------------------------------------------------------------------

[master 2d943ca] unreachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unreachable.t
HEAD is now at e07b18a commit 5
[master 0df3f69] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
ok 69 - repack (--batch-size) ignores cruft pack

expecting success of 5319.70 'expire removes repacked packs': 
	(
		cd dup &&
		ls -al .git/objects/pack/*pack &&
		ls -S .git/objects/pack/*pack | head -n 4 >expect &&
		git multi-pack-index expire &&
		ls -S .git/objects/pack/*pack >actual &&
		test_cmp expect actual &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 4 midx-list
	)

-r--r--r-- 1 buildd buildd 1173 Dec 28 07:48 .git/objects/pack/pack-9f73b959cfe08e36fd7f07d25de6069c4ad20450.pack
-r--r--r-- 1 buildd buildd 2239 Dec 28 07:48 .git/objects/pack/pack-A-40289997979ee9f2d7198a5b4ac9fe14e27cbe4b.pack
-r--r--r-- 1 buildd buildd 1385 Dec 28 07:48 .git/objects/pack/pack-B-926e20b0e641003b2f6bcddd6ccf53e7741c8642.pack
-r--r--r-- 1 buildd buildd  838 Dec 28 07:48 .git/objects/pack/pack-C-b33c048d7202659249bb0cea7bbc997ce448c75d.pack
-r--r--r-- 1 buildd buildd  560 Dec 28 07:48 .git/objects/pack/pack-D-49ca36507a52bbba6d1768e28666eb0f4e5f7d95.pack
-r--r--r-- 1 buildd buildd 4587 Dec 28 07:48 .git/objects/pack/pack-E-31ea0966bb15206fbfd1b4c2f5be4b24a03050f5.pack
ok 70 - expire removes repacked packs

expecting success of 5319.71 'expire works when adding new packs': 
	(
		cd dup &&
		git pack-objects --revs .git/objects/pack/pack-combined <<-EOF &&
		refs/heads/A
		^refs/heads/B
		EOF
		git pack-objects --revs .git/objects/pack/pack-combined <<-EOF &&
		refs/heads/B
		^refs/heads/C
		EOF
		git pack-objects --revs .git/objects/pack/pack-combined <<-EOF &&
		refs/heads/C
		^refs/heads/D
		EOF
		git multi-pack-index write &&
		git pack-objects --revs .git/objects/pack/a-pack <<-EOF &&
		refs/heads/D
		^refs/heads/E
		EOF
		git multi-pack-index write &&
		git pack-objects --revs .git/objects/pack/z-pack <<-EOF &&
		refs/heads/E
		EOF
		git multi-pack-index expire &&
		ls .git/objects/pack/ | grep idx >expect &&
		test-tool read-midx .git/objects | grep idx >actual &&
		test_cmp expect actual &&
		git multi-pack-index verify
	)

348c87eb5e213b53e50d0b6eacebe04eade12a18
90d004df1df6cf488dfc3270b1b202b295f9c75b
5acb7aff49a8f459157ac9d3a2345fff25821b54
3a2e5fa9ee472302522e6baaa741491ca6a7adfd
5ef015aac533aaf0dd1017012117b7e99994c9c0
ok 71 - expire works when adding new packs

expecting success of 5319.72 'expire respects .keep files': 
	(
		cd dup &&
		git pack-objects --revs .git/objects/pack/pack-all <<-EOF &&
		refs/heads/A
		EOF
		git multi-pack-index write &&
		PACKA=$(ls .git/objects/pack/a-pack*\.pack | sed s/\.pack\$//) &&
		touch $PACKA.keep &&
		git multi-pack-index expire &&
		test_path_is_file $PACKA.idx &&
		test_path_is_file $PACKA.keep &&
		test_path_is_file $PACKA.pack &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 2 midx-list
	)

0ed4766d77c6153368eddf98d92fcedd000b7718
ok 72 - expire respects .keep files

expecting success of 5319.73 'expiring unreferenced cruft pack retains pack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&
		test_commit --no-tag unreachable &&
		unreachable=$(git rev-parse HEAD) &&

		git reset --hard base &&
		git reflog expire --all --expire=all &&
		git repack --cruft -d &&
		mtimes="$(ls $objdir/pack/pack-*.mtimes)" &&

		echo "base..$unreachable" >in &&
		pack="$(git pack-objects --revs --delta-base-offset \
			$objdir/pack/pack <in)" &&

		# Preferring the contents of "$pack" will leave the
		# cruft pack unreferenced (ie., none of the objects
		# contained in the cruft pack will have their MIDX copy
		# selected from the cruft pack).
		git multi-pack-index write --preferred-pack="pack-$pack.pack" &&
		git multi-pack-index expire &&

		test_path_is_file "$mtimes"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
[master (root-commit) fa8d2f5] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master b4d1cc0] unreachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unreachable.t
HEAD is now at fa8d2f5 base
ok 73 - expiring unreferenced cruft pack retains pack

expecting success of 5319.74 'repack --batch-size=0 repacks everything': 
	cp -r dup dup2 &&
	(
		cd dup &&
		rm .git/objects/pack/*.keep &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 2 idx-list &&
		git multi-pack-index repack --batch-size=0 &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 3 idx-list &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 3 midx-list &&
		git multi-pack-index expire &&
		ls -al .git/objects/pack/*idx >idx-list &&
		test_line_count = 1 idx-list &&
		git multi-pack-index repack --batch-size=0 &&
		ls -al .git/objects/pack/*idx >new-idx-list &&
		test_cmp idx-list new-idx-list
	)

ok 74 - repack --batch-size=0 repacks everything

expecting success of 5319.75 'repack --batch-size=<large> repacks everything': 
	(
		cd dup2 &&
		rm .git/objects/pack/*.keep &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 2 idx-list &&
		git multi-pack-index repack --batch-size=2000000 &&
		ls .git/objects/pack/*idx >idx-list &&
		test_line_count = 3 idx-list &&
		test-tool read-midx .git/objects | grep idx >midx-list &&
		test_line_count = 3 midx-list &&
		git multi-pack-index expire &&
		ls -al .git/objects/pack/*idx >idx-list &&
		test_line_count = 1 idx-list
	)

ok 75 - repack --batch-size=<large> repacks everything

expecting success of 5319.76 'load reverse index when missing .idx, .pack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		git config core.multiPackIndex true &&

		test_commit base &&
		git repack -ad &&
		git multi-pack-index write &&

		git rev-parse HEAD >tip &&
		pack=$(ls .git/objects/pack/pack-*.pack) &&
		idx=$(ls .git/objects/pack/pack-*.idx) &&

		mv $idx $idx.bak &&
		git cat-file --batch-check="%(objectsize:disk)" <tip &&

		mv $idx.bak $idx &&

		mv $pack $pack.bak &&
		git cat-file --batch-check="%(objectsize:disk)" <tip
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5319-multi-pack-index/repo/.git/
[master (root-commit) fa8d2f5] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
error: packfile .git/objects/pack/pack-ec5dfd91e10f22f64b8699751c4f48a0cc36d0d4.pack index unavailable
error: packfile .git/objects/pack/pack-ec5dfd91e10f22f64b8699751c4f48a0cc36d0d4.pack index unavailable
fa8d2f5a3aeea6bca02efd96923a394381457ebc missing
fa8d2f5a3aeea6bca02efd96923a394381457ebc missing
ok 76 - load reverse index when missing .idx, .pack

expecting success of 5319.77 'usage shown without sub-command': 
	test_expect_code 129 git multi-pack-index 2>err &&
	! test_i18ngrep "unrecognized subcommand" err

error: 'grep unrecognized subcommand err' didn't find a match in:
error: need a subcommand
usage: git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-snapshot=<path>]
   or: git multi-pack-index [<options>] verify
   or: git multi-pack-index [<options>] expire
   or: git multi-pack-index [<options>] repack [--batch-size=<size>]

    --object-dir <directory>
                          object directory containing set of packfile and pack-index pairs

ok 77 - usage shown without sub-command

expecting success of 5319.78 'complains when run outside of a repository': 
	nongit test_must_fail git multi-pack-index write 2>err &&
	grep "not a git repository" err

fatal: not a git repository (or any of the parent directories): .git
ok 78 - complains when run outside of a repository

# passed all 78 test(s)
1..78
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5323-pack-redundant.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5323-pack-redundant/.git/
expecting success of 5323.1 'setup main repo': 
	git init --bare "$main_repo" &&
	create_commits_in "$main_repo" A B C D E F G H I J K L M N O P Q R

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5323-pack-redundant/main.git/
ok 1 - setup main repo

expecting success of 5323.2 'main: pack-redundant works with no packfile': 
	(
		cd "$main_repo" &&
		cat >expect <<-EOF &&
			fatal: Zero packs found!
			EOF
		test_must_fail $git_pack_redundant --all >actual 2>&1 &&
		test_cmp expect actual
	)

ok 2 - main: pack-redundant works with no packfile

expecting success of 5323.3 'main: pack-redundant works with one packfile': 
	create_pack_in "$main_repo" P1 <<-EOF &&
		$T
		$A
		$B
		$C
		$D
		$E
		$F
		$R
		EOF
	(
		cd "$main_repo" &&
		$git_pack_redundant --all >out &&
		test_must_be_empty out
	)

ok 3 - main: pack-redundant works with one packfile

expecting success of 5323.4 'main: no redundant for pack 1, 2, 3': 
	create_pack_in "$main_repo" P2 <<-EOF &&
		$B
		$C
		$D
		$E
		$G
		$H
		$I
		EOF
	create_pack_in "$main_repo" P3 <<-EOF &&
		$F
		$I
		$J
		$K
		$L
		$M
		EOF
	(
		cd "$main_repo" &&
		$git_pack_redundant --all >out &&
		test_must_be_empty out
	)

ok 4 - main: no redundant for pack 1, 2, 3

expecting success of 5323.5 'main: one of pack-2/pack-3 is redundant': 
	create_pack_in "$main_repo" P4 <<-EOF &&
		$J
		$K
		$L
		$M
		$P
		EOF
	create_pack_in "$main_repo" P5 <<-EOF &&
		$G
		$H
		$N
		$O
		EOF
	(
		cd "$main_repo" &&
		cat >expect <<-EOF &&
			P3:$P3
			EOF
		$git_pack_redundant --all >out &&
		format_packfiles <out >actual &&
		test_cmp expect actual
	)

ok 5 - main: one of pack-2/pack-3 is redundant

expecting success of 5323.6 'main: pack 2, 4, and 6 are redundant': 
	create_pack_in "$main_repo" P6 <<-EOF &&
		$N
		$O
		$Q
		EOF
	create_pack_in "$main_repo" P7 <<-EOF &&
		$P
		$Q
		EOF
	(
		cd "$main_repo" &&
		cat >expect <<-EOF &&
			P2:$P2
			P4:$P4
			P6:$P6
			EOF
		$git_pack_redundant --all >out &&
		format_packfiles <out >actual &&
		test_cmp expect actual
	)

ok 6 - main: pack 2, 4, and 6 are redundant

expecting success of 5323.7 'main: pack-8 (subset of pack-1) is also redundant': 
	create_pack_in "$main_repo" P8 <<-EOF &&
		$A
		EOF
	(
		cd "$main_repo" &&
		cat >expect <<-EOF &&
			P2:$P2
			P4:$P4
			P6:$P6
			P8:$P8
			EOF
		$git_pack_redundant --all >out &&
		format_packfiles <out >actual &&
		test_cmp expect actual
	)

ok 7 - main: pack-8 (subset of pack-1) is also redundant

expecting success of 5323.8 'main: clean loose objects': 
	(
		cd "$main_repo" &&
		git prune-packed &&
		find objects -type f | sed -e "/objects\/pack\//d" >out &&
		test_must_be_empty out
	)

ok 8 - main: clean loose objects

expecting success of 5323.9 'main: remove redundant packs and pass fsck': 
	(
		cd "$main_repo" &&
		$git_pack_redundant --all | xargs rm &&
		git fsck &&
		$git_pack_redundant --all >out &&
		test_must_be_empty out
	)

notice: HEAD points to an unborn branch (master)
ok 9 - main: remove redundant packs and pass fsck

expecting success of 5323.10 'setup shared.git': 
	git clone --mirror "$main_repo" "$shared_repo" &&
	(
		cd "$shared_repo" &&
		printf "../../$main_repo/objects\n" >objects/info/alternates
	)

Cloning into bare repository 'shared.git'...
done.
ok 10 - setup shared.git

expecting success of 5323.11 'shared: all packs are redundant, but no output without --alt-odb': 
	(
		cd "$shared_repo" &&
		$git_pack_redundant --all >out &&
		test_must_be_empty out
	)

ok 11 - shared: all packs are redundant, but no output without --alt-odb

expecting success of 5323.12 'shared: show redundant packs in stderr for verbose mode': 
	(
		cd "$shared_repo" &&
		cat >expect <<-EOF &&
			P1:$P1
			P3:$P3
			P5:$P5
			P7:$P7
			EOF
		$git_pack_redundant --all --verbose >out 2>out.err &&
		test_must_be_empty out &&
		grep "pack$" out.err | format_packfiles >actual &&
		test_cmp expect actual
	)

ok 12 - shared: show redundant packs in stderr for verbose mode

expecting success of 5323.13 'shared: remove redundant packs, no packs left': 
	(
		cd "$shared_repo" &&
		cat >expect <<-EOF &&
			fatal: Zero packs found!
			EOF
		$git_pack_redundant --all --alt-odb | xargs rm &&
		git fsck &&
		test_must_fail $git_pack_redundant --all --alt-odb >actual 2>&1 &&
		test_cmp expect actual
	)

notice: HEAD points to an unborn branch (master)
ok 13 - shared: remove redundant packs, no packs left

expecting success of 5323.14 'shared: create new objects and packs': 
	create_commits_in "$shared_repo" X Y Z &&
	create_pack_in "$shared_repo" Px1 <<-EOF &&
		$X
		$Y
		$Z
		$A
		$B
		$C
		EOF
	create_pack_in "$shared_repo" Px2 <<-EOF
		$X
		$Y
		$Z
		$D
		$E
		$F
		EOF

ok 14 - shared: create new objects and packs

expecting success of 5323.15 'shared: no redundant without --alt-odb': 
	(
		cd "$shared_repo" &&
		$git_pack_redundant --all >out &&
		test_must_be_empty out
	)

ok 15 - shared: no redundant without --alt-odb

expecting success of 5323.16 'shared: one pack is redundant with --alt-odb': 
	(
		cd "$shared_repo" &&
		$git_pack_redundant --all --alt-odb >out &&
		format_packfiles <out >actual &&
		test_line_count = 1 actual
	)

ok 16 - shared: one pack is redundant with --alt-odb

expecting success of 5323.17 'shared: ignore unique objects and all two packs are redundant': 
	(
		cd "$shared_repo" &&
		cat >expect <<-EOF &&
			Px1:$Px1
			Px2:$Px2
			EOF
		$git_pack_redundant --all --alt-odb >out <<-EOF &&
			$X
			$Y
			$Z
			EOF
		format_packfiles <out >actual &&
		test_cmp expect actual
	)

ok 17 - shared: ignore unique objects and all two packs are redundant

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5325-reverse-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5325-reverse-index/.git/
expecting success of 5325.1 'setup': 
	test_commit base &&

	pack=$(git pack-objects --all $packdir/pack) &&
	rev=$packdir/pack-$pack.rev &&

	test_path_is_missing $rev

[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 1 - setup

expecting success of 5325.2 'index-pack with pack.writeReverseIndex': 
	test_index_pack "" &&
	test_path_is_missing $rev &&

	test_index_pack false &&
	test_path_is_missing $rev &&

	test_index_pack true &&
	test_path_is_file $rev

68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
ok 2 - index-pack with pack.writeReverseIndex

expecting success of 5325.3 'index-pack with --[no-]rev-index': 
	for conf in "" true false
	do
		test_index_pack "$conf" --rev-index &&
		test_path_exists $rev &&

		test_index_pack "$conf" --no-rev-index &&
		test_path_is_missing $rev || return 1
	done

68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
ok 3 - index-pack with --[no-]rev-index

expecting success of 5325.4 'index-pack can verify reverse indexes': 
	test_when_finished "rm -f $rev" &&
	test_index_pack true &&

	test_path_is_file $rev &&
	git index-pack --rev-index --verify $packdir/pack-$pack.pack &&

	# Intentionally corrupt the reverse index.
	chmod u+w $rev &&
	printf "xxxx" | dd of=$rev bs=1 count=4 conv=notrunc &&

	test_must_fail git index-pack --rev-index --verify \
		$packdir/pack-$pack.pack 2>err &&
	grep "validation error" err

68c6c8c8538900694c32380ac1484201c8b60d8d
4+0 records in
4+0 records out
4 bytes copied, 0.000602689 s, 6.6 kB/s
fatal: sha1 file '.git/objects/pack/pack-68c6c8c8538900694c32380ac1484201c8b60d8d.rev' validation error
ok 4 - index-pack can verify reverse indexes

expecting success of 5325.5 'index-pack infers reverse index name with -o': 
	git index-pack --rev-index -o other.idx $packdir/pack-$pack.pack &&
	test_path_is_file other.idx &&
	test_path_is_file other.rev

68c6c8c8538900694c32380ac1484201c8b60d8d
ok 5 - index-pack infers reverse index name with -o

expecting success of 5325.6 'pack-objects respects pack.writeReverseIndex': 
	test_when_finished "rm -fr pack-1-*" &&

	git -c pack.writeReverseIndex= pack-objects --all pack-1 &&
	test_path_is_missing pack-1-*.rev &&

	git -c pack.writeReverseIndex=false pack-objects --all pack-1 &&
	test_path_is_missing pack-1-*.rev &&

	git -c pack.writeReverseIndex=true pack-objects --all pack-1 &&
	test_path_is_file pack-1-*.rev

68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
68c6c8c8538900694c32380ac1484201c8b60d8d
ok 6 - pack-objects respects pack.writeReverseIndex

expecting success of 5325.7 'reverse index is not generated when available on disk': 
	test_index_pack true &&
	test_path_is_file $rev &&

	git rev-parse HEAD >tip &&
	GIT_TEST_REV_INDEX_DIE_IN_MEMORY=1 git cat-file \
		--batch-check="%(objectsize:disk)" <tip

68c6c8c8538900694c32380ac1484201c8b60d8d
126
ok 7 - reverse index is not generated when available on disk

expecting success of 5325.8 'revindex in-memory vs on-disk': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit commit &&

		git rev-list --objects --no-object-names --all >objects &&

		git -c pack.writeReverseIndex=false repack -ad &&
		test_path_is_missing $packdir/pack-*.rev &&
		git cat-file --batch-check="%(objectsize:disk) %(objectname)" \
			<objects >in-core &&

		git -c pack.writeReverseIndex=true repack -ad &&
		test_path_is_file $packdir/pack-*.rev &&
		git cat-file --batch-check="%(objectsize:disk) %(objectname)" \
			<objects >on-disk &&

		test_cmp on-disk in-core
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5325-reverse-index/repo/.git/
[master (root-commit) aa0ac59] commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit.t
ok 8 - revindex in-memory vs on-disk

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5328-commit-graph-64bit-time.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5328-commit-graph-64bit-time/.git/
checking prerequisite: TIME_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_IS_64BIT" &&test-tool date is64bit
)
prerequisite TIME_IS_64BIT ok
checking prerequisite: TIME_T_IS_64BIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TIME_T_IS_64BIT" &&test-tool date time_t-is64bit
)
prerequisite TIME_T_IS_64BIT not satisfied
1..0 # SKIP skipping 64-bit timestamp tests
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5329-pack-objects-cruft.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/.git/
expecting success of 5329.1 'unreachable loose objects are packed (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit base &&
			git repack -Ad &&
			test_commit loose &&

			test-tool chmtime +2000 "$objdir/$(test_oid_to_path \
				$(git rev-parse loose:loose.t))" &&
			test-tool chmtime +1000 "$objdir/$(test_oid_to_path \
				$(git rev-parse loose^{tree}))" &&

			(
				git rev-list --objects --no-object-names base..loose |
				while read oid
				do
					path="$objdir/$(test_oid_to_path "$oid")" &&
					printf "%s %d\n" "$oid" "$(test-tool chmtime --get "$path")" ||
					echo "object list generation failed for $oid"
				done |
				sort -k1
			) >expect &&

			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
			cruft="$(echo $keep | git pack-objects --cruft \
				--cruft-expiration="$expire" $packdir/pack)" &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master da180c9] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 1 - unreachable loose objects are packed (expire never)

expecting success of 5329.2 'unreachable packed objects are packed (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit packed &&
			git repack -Ad &&
			test_commit other &&

			git rev-list --objects --no-object-names packed.. >objects &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
			other="$(git pack-objects --delta-base-offset \
				$packdir/pack <objects)" &&
			git prune-packed &&

			test-tool chmtime --get -100 "$packdir/pack-$other.pack" >expect &&

			cruft="$(git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack <<-EOF
			$keep
			-pack-$other.pack
			EOF
			)" &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&

			cut -d" " -f2 <actual.raw | sort -u >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 8c1110b] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
ok 2 - unreachable packed objects are packed (expire never)

expecting success of 5329.3 'unreachable cruft objects are repacked (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit packed &&
			git repack -Ad &&
			test_commit other &&

			git rev-list --objects --no-object-names packed.. >objects &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&

			cruft_a="$(echo $keep | git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack)" &&
			git prune-packed &&
			cruft_b="$(git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack <<-EOF
			$keep
			-pack-$cruft_a.pack
			EOF
			)" &&

			test-tool pack-mtimes "pack-$cruft_a.mtimes" >expect.raw &&
			test-tool pack-mtimes "pack-$cruft_b.mtimes" >actual.raw &&

			sort <expect.raw >expect &&
			sort <actual.raw >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 8c1110b] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
ok 3 - unreachable cruft objects are repacked (expire never)

expecting success of 5329.4 'multiple cruft packs (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			git repack -Ad &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&

			test_commit cruft &&
			loose="$objdir/$(test_oid_to_path $(git rev-parse cruft))" &&

			# generate three copies of the cruft object in different
			# cruft packs, each with a unique mtime:
			#   - one expired (1000 seconds ago)
			#   - two non-expired (one 1000 seconds in the future,
			#     one 1500 seconds in the future)
			test-tool chmtime =-1000 "$loose" &&
			git pack-objects --cruft $packdir/pack-A <<-EOF &&
			$keep
			EOF
			test-tool chmtime =+1000 "$loose" &&
			git pack-objects --cruft $packdir/pack-B <<-EOF &&
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			EOF
			test-tool chmtime =+1500 "$loose" &&
			git pack-objects --cruft $packdir/pack-C <<-EOF &&
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			-$(basename $(ls $packdir/pack-B-*.pack))
			EOF

			# ensure the resulting cruft pack takes the most recent
			# mtime among all copies
			cruft="$(git pack-objects --cruft \
				--cruft-expiration="$expire" \
				$packdir/pack <<-EOF
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			-$(basename $(ls $packdir/pack-B-*.pack))
			-$(basename $(ls $packdir/pack-C-*.pack))
			EOF
			)" &&

			test-tool pack-mtimes "$(basename $(ls $packdir/pack-C-*.mtimes))" >expect.raw &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&

			sort expect.raw >expect &&
			sort actual.raw >actual &&
			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
ok 4 - multiple cruft packs (expire never)

expecting success of 5329.5 'cruft packs tolerate missing trees (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			test_commit cruft &&

			tree="$(git rev-parse cruft^{tree})" &&

			git reset --hard reachable &&
			git tag -d cruft &&
			git reflog expire --all --expire=all &&

			# remove the unreachable tree, but leave the commit
			# which has it as its root tree intact
			rm -fr "$objdir/$(test_oid_to_path "$tree")" &&

			git repack -Ad &&
			basename $(ls $packdir/pack-*.pack) >in &&
			git pack-objects --cruft --cruft-expiration="$expire" \
				$packdir/pack <in
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
HEAD is now at 7dd88f0 reachable
Deleted tag 'cruft' (was 9401314)
1fd7610ee824e92e6acc1c916cc3150d13926e92
ok 5 - cruft packs tolerate missing trees (expire never)

expecting success of 5329.6 'cruft packs tolerate missing blobs (expire never)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			test_commit cruft &&

			blob="$(git rev-parse cruft:cruft.t)" &&

			git reset --hard reachable &&
			git tag -d cruft &&
			git reflog expire --all --expire=all &&

			# remove the unreachable blob, but leave the commit (and
			# the root tree of that commit) intact
			rm -fr "$objdir/$(test_oid_to_path "$blob")" &&

			git repack -Ad &&
			basename $(ls $packdir/pack-*.pack) >in &&
			git pack-objects --cruft --cruft-expiration="$expire" \
				$packdir/pack <in
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
HEAD is now at 7dd88f0 reachable
Deleted tag 'cruft' (was 9401314)
9dad6aa6eb8f2eee78e507e20d4b2a6403f203ab
ok 6 - cruft packs tolerate missing blobs (expire never)

expecting success of 5329.7 'unreachable loose objects are packed (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit base &&
			git repack -Ad &&
			test_commit loose &&

			test-tool chmtime +2000 "$objdir/$(test_oid_to_path \
				$(git rev-parse loose:loose.t))" &&
			test-tool chmtime +1000 "$objdir/$(test_oid_to_path \
				$(git rev-parse loose^{tree}))" &&

			(
				git rev-list --objects --no-object-names base..loose |
				while read oid
				do
					path="$objdir/$(test_oid_to_path "$oid")" &&
					printf "%s %d\n" "$oid" "$(test-tool chmtime --get "$path")" ||
					echo "object list generation failed for $oid"
				done |
				sort -k1
			) >expect &&

			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
			cruft="$(echo $keep | git pack-objects --cruft \
				--cruft-expiration="$expire" $packdir/pack)" &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master da180c9] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 7 - unreachable loose objects are packed (expire 2.weeks.ago)

expecting success of 5329.8 'unreachable packed objects are packed (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit packed &&
			git repack -Ad &&
			test_commit other &&

			git rev-list --objects --no-object-names packed.. >objects &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
			other="$(git pack-objects --delta-base-offset \
				$packdir/pack <objects)" &&
			git prune-packed &&

			test-tool chmtime --get -100 "$packdir/pack-$other.pack" >expect &&

			cruft="$(git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack <<-EOF
			$keep
			-pack-$other.pack
			EOF
			)" &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&

			cut -d" " -f2 <actual.raw | sort -u >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 8c1110b] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
ok 8 - unreachable packed objects are packed (expire 2.weeks.ago)

expecting success of 5329.9 'unreachable cruft objects are repacked (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit packed &&
			git repack -Ad &&
			test_commit other &&

			git rev-list --objects --no-object-names packed.. >objects &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&

			cruft_a="$(echo $keep | git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack)" &&
			git prune-packed &&
			cruft_b="$(git pack-objects --cruft --cruft-expiration="$expire" $packdir/pack <<-EOF
			$keep
			-pack-$cruft_a.pack
			EOF
			)" &&

			test-tool pack-mtimes "pack-$cruft_a.mtimes" >expect.raw &&
			test-tool pack-mtimes "pack-$cruft_b.mtimes" >actual.raw &&

			sort <expect.raw >expect &&
			sort <actual.raw >actual &&

			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 8c1110b] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
ok 9 - unreachable cruft objects are repacked (expire 2.weeks.ago)

expecting success of 5329.10 'multiple cruft packs (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			git repack -Ad &&
			keep="$(basename "$(ls $packdir/pack-*.pack)")" &&

			test_commit cruft &&
			loose="$objdir/$(test_oid_to_path $(git rev-parse cruft))" &&

			# generate three copies of the cruft object in different
			# cruft packs, each with a unique mtime:
			#   - one expired (1000 seconds ago)
			#   - two non-expired (one 1000 seconds in the future,
			#     one 1500 seconds in the future)
			test-tool chmtime =-1000 "$loose" &&
			git pack-objects --cruft $packdir/pack-A <<-EOF &&
			$keep
			EOF
			test-tool chmtime =+1000 "$loose" &&
			git pack-objects --cruft $packdir/pack-B <<-EOF &&
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			EOF
			test-tool chmtime =+1500 "$loose" &&
			git pack-objects --cruft $packdir/pack-C <<-EOF &&
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			-$(basename $(ls $packdir/pack-B-*.pack))
			EOF

			# ensure the resulting cruft pack takes the most recent
			# mtime among all copies
			cruft="$(git pack-objects --cruft \
				--cruft-expiration="$expire" \
				$packdir/pack <<-EOF
			$keep
			-$(basename $(ls $packdir/pack-A-*.pack))
			-$(basename $(ls $packdir/pack-B-*.pack))
			-$(basename $(ls $packdir/pack-C-*.pack))
			EOF
			)" &&

			test-tool pack-mtimes "$(basename $(ls $packdir/pack-C-*.mtimes))" >expect.raw &&
			test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&

			sort expect.raw >expect &&
			sort actual.raw >actual &&
			test_cmp expect actual
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
2b7c68c41cc49f836d3f91ba2ee4f486d0939ca6
ok 10 - multiple cruft packs (expire 2.weeks.ago)

expecting success of 5329.11 'cruft packs tolerate missing trees (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			test_commit cruft &&

			tree="$(git rev-parse cruft^{tree})" &&

			git reset --hard reachable &&
			git tag -d cruft &&
			git reflog expire --all --expire=all &&

			# remove the unreachable tree, but leave the commit
			# which has it as its root tree intact
			rm -fr "$objdir/$(test_oid_to_path "$tree")" &&

			git repack -Ad &&
			basename $(ls $packdir/pack-*.pack) >in &&
			git pack-objects --cruft --cruft-expiration="$expire" \
				$packdir/pack <in
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
HEAD is now at 7dd88f0 reachable
Deleted tag 'cruft' (was 9401314)
1fd7610ee824e92e6acc1c916cc3150d13926e92
ok 11 - cruft packs tolerate missing trees (expire 2.weeks.ago)

expecting success of 5329.12 'cruft packs tolerate missing blobs (expire 2.weeks.ago)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit reachable &&
			test_commit cruft &&

			blob="$(git rev-parse cruft:cruft.t)" &&

			git reset --hard reachable &&
			git tag -d cruft &&
			git reflog expire --all --expire=all &&

			# remove the unreachable blob, but leave the commit (and
			# the root tree of that commit) intact
			rm -fr "$objdir/$(test_oid_to_path "$blob")" &&

			git repack -Ad &&
			basename $(ls $packdir/pack-*.pack) >in &&
			git pack-objects --cruft --cruft-expiration="$expire" \
				$packdir/pack <in
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 9401314] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
HEAD is now at 7dd88f0 reachable
Deleted tag 'cruft' (was 9401314)
9dad6aa6eb8f2eee78e507e20d4b2a6403f203ab
ok 12 - cruft packs tolerate missing blobs (expire 2.weeks.ago)

expecting success of 5329.13 'cruft tags rescue tagged objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit packed &&
		git repack -Ad &&

		test_commit tagged &&
		git tag -a annotated -m tag &&

		git rev-list --objects --no-object-names packed.. >objects &&
		while read oid
		do
			test-tool chmtime -1000 \
				"$objdir/$(test_oid_to_path $oid)" || exit 1
		done <objects &&

		test-tool chmtime -500 \
			"$objdir/$(test_oid_to_path $(git rev-parse annotated))" &&

		keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
		cruft="$(echo $keep | git pack-objects --cruft \
			--cruft-expiration=750.seconds.ago \
			$packdir/pack)" &&
		test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&
		cut -f1 -d" " <actual.raw | sort >actual &&

		(
			cat objects &&
			git rev-parse annotated
		) >expect.raw &&
		sort <expect.raw >expect &&

		test_cmp expect actual &&
		cat actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 1ce88f2] tagged
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tagged.t
1ce88f2752d44a4c71b81cbcbb127c84f8df32e8
6ae842110efefc995fd529f1bde08a3c608d4f6f
9e5f42caf6e84faf4a2e509216e63116dc509059
b4189c489bdfaa52374fe786bfbb416554531eb2
ok 13 - cruft tags rescue tagged objects

expecting success of 5329.14 'cruft commits rescue parents, trees': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit packed &&
		git repack -Ad &&

		test_commit old &&
		test_commit new &&

		git rev-list --objects --no-object-names packed..new >objects &&
		while read object
		do
			test-tool chmtime -1000 \
				"$objdir/$(test_oid_to_path $object)" || exit 1
		done <objects &&
		test-tool chmtime +500 "$objdir/$(test_oid_to_path \
			$(git rev-parse HEAD))" &&

		keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
		cruft="$(echo $keep | git pack-objects --cruft \
			--cruft-expiration=750.seconds.ago \
			$packdir/pack)" &&
		test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&

		cut -d" " -f1 <actual.raw | sort >actual &&
		sort <objects >expect &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 077a51a] old
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old.t
[master 3b97f54] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
ok 14 - cruft commits rescue parents, trees

expecting success of 5329.15 'cruft trees rescue sub-trees, blobs': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit packed &&
		git repack -Ad &&

		mkdir -p dir/sub &&
		echo foo >foo &&
		echo bar >dir/bar &&
		echo baz >dir/sub/baz &&

		test_tick &&
		git add . &&
		git commit -m "pruned" &&

		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD))" &&
		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD^{tree}))" &&
		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD:foo))" &&
		test-tool chmtime  -500 "$objdir/$(test_oid_to_path $(git rev-parse HEAD:dir))" &&
		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD:dir/bar))" &&
		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD:dir/sub))" &&
		test-tool chmtime -1000 "$objdir/$(test_oid_to_path $(git rev-parse HEAD:dir/sub/baz))" &&

		keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
		cruft="$(echo $keep | git pack-objects --cruft \
			--cruft-expiration=750.seconds.ago \
			$packdir/pack)" &&
		test-tool pack-mtimes "pack-$cruft.mtimes" >actual.raw &&
		cut -f1 -d" " <actual.raw | sort >actual &&

		git rev-parse HEAD:dir HEAD:dir/bar HEAD:dir/sub HEAD:dir/sub/baz >expect.raw &&
		sort <expect.raw >expect &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 13f11a8] pruned
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 dir/bar
 create mode 100644 dir/sub/baz
 create mode 100644 foo
ok 15 - cruft trees rescue sub-trees, blobs

expecting success of 5329.16 'expired objects are pruned': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit packed &&
		git repack -Ad &&

		test_commit pruned &&

		git rev-list --objects --no-object-names packed..pruned >objects &&
		while read object
		do
			test-tool chmtime -1000 \
				"$objdir/$(test_oid_to_path $object)" || exit 1
		done <objects &&

		keep="$(basename "$(ls $packdir/pack-*.pack)")" &&
		cruft="$(echo $keep | git pack-objects --cruft \
			--cruft-expiration=750.seconds.ago \
			$packdir/pack)" &&

		test-tool pack-mtimes "pack-$cruft.mtimes" >actual &&
		test_must_be_empty actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) e975c14] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master 69e4b3a] pruned
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pruned.t
ok 16 - expired objects are pruned

expecting success of 5329.17 'repack --cruft generates a cruft pack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		git branch -M main &&
		git checkout --orphan other &&
		test_commit unreachable &&

		git checkout main &&
		git branch -D other &&
		git tag -d unreachable &&
		# objects are not cruft if they are contained in the reflogs
		git reflog expire --all --expire=all &&

		git rev-list --objects --all --no-object-names >reachable.raw &&
		git cat-file --batch-all-objects --batch-check="%(objectname)" >objects &&
		sort <reachable.raw >reachable &&
		comm -13 reachable objects >unreachable &&

		git repack --cruft -d &&

		cruft=$(basename $(ls $packdir/pack-*.mtimes) .mtimes) &&
		pack=$(basename $(ls $packdir/pack-*.pack | grep -v $cruft) .pack) &&

		git show-index <$packdir/$pack.idx >actual.raw &&
		cut -f2 -d" " actual.raw | sort >actual &&
		test_cmp reachable actual &&

		git show-index <$packdir/$cruft.idx >actual.raw &&
		cut -f2 -d" " actual.raw | sort >actual &&
		test_cmp unreachable actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
Switched to a new branch 'other'
[other (root-commit) a613991] unreachable
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 reachable.t
 create mode 100644 unreachable.t
Switched to branch 'main'
Deleted branch other (was a613991).
Deleted tag 'unreachable' (was a613991)
ok 17 - repack --cruft generates a cruft pack

expecting success of 5329.18 'loose objects mtimes upsert others': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		git repack -Ad &&
		git branch -M main &&

		git checkout --orphan other &&
		test_commit cruft &&
		# incremental repack, leaving existing objects loose (so
		# they can be "freshened")
		git repack &&

		tip="$(git rev-parse cruft)" &&
		path="$objdir/$(test_oid_to_path "$tip")" &&
		test-tool chmtime --get +1000 "$path" >expect &&

		git checkout main &&
		git branch -D other &&
		git tag -d cruft &&
		git reflog expire --all --expire=all &&

		git repack --cruft -d &&

		mtimes="$(basename $(ls $packdir/pack-*.mtimes))" &&
		test-tool pack-mtimes "$mtimes" >actual.raw &&
		grep "$tip" actual.raw | cut -d" " -f2 >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
Switched to a new branch 'other'
[other (root-commit) 03feb6e] cruft
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 cruft.t
 create mode 100644 reachable.t
Switched to branch 'main'
Deleted branch other (was 03feb6e).
Deleted tag 'cruft' (was 03feb6e)
ok 18 - loose objects mtimes upsert others

expecting success of 5329.19 'expiring cruft objects with git gc': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		git branch -M main &&
		git checkout --orphan other &&
		test_commit unreachable &&

		git checkout main &&
		git branch -D other &&
		git tag -d unreachable &&
		# objects are not cruft if they are contained in the reflogs
		git reflog expire --all --expire=all &&

		git rev-list --objects --all --no-object-names >reachable.raw &&
		git cat-file --batch-all-objects --batch-check="%(objectname)" >objects &&
		sort <reachable.raw >reachable &&
		comm -13 reachable objects >unreachable &&

		# Write a cruft pack containing all unreachable objects.
		git gc --cruft --prune="01-01-1980" &&

		mtimes=$(ls .git/objects/pack/pack-*.mtimes) &&
		test_path_is_file $mtimes &&

		# Prune all unreachable objects from the cruft pack.
		git gc --cruft --prune=now &&

		git cat-file --batch-all-objects --batch-check="%(objectname)" >objects &&

		comm -23 unreachable objects >removed &&
		test_cmp unreachable removed &&
		test_path_is_missing $mtimes
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
Switched to a new branch 'other'
[other (root-commit) a613991] unreachable
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 reachable.t
 create mode 100644 unreachable.t
Switched to branch 'main'
Deleted branch other (was a613991).
Deleted tag 'unreachable' (was a613991)
ok 19 - expiring cruft objects with git gc

expecting success of 5329.20 'cruft packs are not included in geometric repack': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		git repack -Ad &&
		git branch -M main &&

		git checkout --orphan other &&
		test_commit cruft &&
		git repack -d &&

		git checkout main &&
		git branch -D other &&
		git tag -d cruft &&
		git reflog expire --all --expire=all &&

		git repack --cruft &&

		find $packdir -type f | sort >before &&
		git repack --geometric=2 -d &&
		find $packdir -type f | sort >after &&

		test_cmp before after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
Switched to a new branch 'other'
[other (root-commit) 03feb6e] cruft
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 cruft.t
 create mode 100644 reachable.t
Switched to branch 'main'
Deleted branch other (was 03feb6e).
Deleted tag 'cruft' (was 03feb6e)
Nothing new to pack.
ok 20 - cruft packs are not included in geometric repack

expecting success of 5329.21 'repack --geometric collects once-cruft objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		git repack -Ad &&
		git branch -M main &&

		git checkout --orphan other &&
		git rm -rf . &&
		test_commit --no-tag cruft &&
		cruft="$(git rev-parse HEAD)" &&

		git checkout main &&
		git branch -D other &&
		git reflog expire --all --expire=all &&

		# Pack the objects created in the previous step into a cruft
		# pack. Intentionally leave loose copies of those objects
		# around so we can pick them up in a subsequent --geometric
		# reapack.
		git repack --cruft &&

		# Now make those objects reachable, and ensure that they are
		# packed into the new pack created via a --geometric repack.
		git update-ref refs/heads/other $cruft &&

		# Without this object, the set of unpacked objects is exactly
		# the set of objects already in the cruft pack. Tweak that set
		# to ensure we do not overwrite the cruft pack entirely.
		test_commit reachable2 &&

		find $packdir -name "pack-*.idx" | sort >before &&
		git repack --geometric=2 -d &&
		find $packdir -name "pack-*.idx" | sort >after &&

		{
			git rev-list --objects --no-object-names $cruft &&
			git rev-list --objects --no-object-names reachable..reachable2
		} >want.raw &&
		sort want.raw >want &&

		pack=$(comm -13 before after) &&
		git show-index <$pack >objects.raw &&

		cut -d" " -f2 objects.raw | sort >got &&

		test_cmp want got
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 7dd88f0] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
Switched to a new branch 'other'
rm 'reachable.t'
[other (root-commit) 86057ae] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
Switched to branch 'main'
Deleted branch other (was 86057ae).
[main 2f90f70] reachable2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable2.t
ok 21 - repack --geometric collects once-cruft objects

expecting success of 5329.22 'cruft repack with no reachable objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&
		git repack -ad &&

		base="$(git rev-parse base)" &&

		git for-each-ref --format="delete %(refname)" >in &&
		git update-ref --stdin <in &&
		git reflog expire --all --expire=all &&
		rm -fr .git/index &&

		git repack --cruft -d &&

		git cat-file -t $base
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Nothing new to pack.
commit
ok 22 - cruft repack with no reachable objects

expecting success of 5329.23 'cruft repack ignores --max-pack-size': 
	git init max-pack-size &&
	(
		cd max-pack-size &&
		test_commit base &&
		# two cruft objects which exceed the maximum pack size
		test-tool genrandom foo 1048576 | git hash-object --stdin -w &&
		test-tool genrandom bar 1048576 | git hash-object --stdin -w &&
		git repack --cruft --max-pack-size=1M &&
		find $packdir -name "*.mtimes" >cruft &&
		test_line_count = 1 cruft &&
		test-tool pack-mtimes "$(basename "$(cat cruft)")" >objects &&
		test_line_count = 2 objects
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/max-pack-size/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
4f336f3df31054eabc05ac05f98bc024c8e05423
bd44d8aa2d22eb47ff70cef4b0bb45d1549ee49c
ok 23 - cruft repack ignores --max-pack-size

expecting success of 5329.24 'cruft repack ignores pack.packSizeLimit': 
	(
		cd max-pack-size &&
		# repack everything back together to remove the existing cruft
		# pack (but to keep its objects)
		git repack -adk &&
		git -c pack.packSizeLimit=1M repack --cruft &&
		# ensure the same post condition is met when --max-pack-size
		# would otherwise be inferred from the configuration
		find $packdir -name "*.mtimes" >cruft &&
		test_line_count = 1 cruft &&
		test-tool pack-mtimes "$(basename "$(cat cruft)")" >objects &&
		test_line_count = 2 objects
	)

ok 24 - cruft repack ignores pack.packSizeLimit

expecting success of 5329.25 'cruft repack respects repack.cruftWindow': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&

		GIT_TRACE2_EVENT=$(pwd)/event.trace \
		git -c pack.window=1 -c repack.cruftWindow=2 repack \
		       --cruft --window=3 &&

		grep "pack-objects.*--window=2.*--cruft" event.trace
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
{"event":"child_start","sid":"20221228T074857.469995Z-Hc64317c2-P0000110e","thread":"main","time":"2022-12-28T07:48:57.525998Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","pack-objects","--window=2","--delta-base-offset",".git/objects/pack/.tmp-4366-pack","--cruft","--honor-pack-keep","--non-empty","--max-pack-size=0"]}
{"event":"start","sid":"20221228T074857.469995Z-Hc64317c2-P0000110e/20221228T074857.537939Z-Hc64317c2-P00001112","thread":"main","time":"2022-12-28T07:48:57.538752Z","file":"common-main.c","line":51,"t_abs":0.003705,"argv":["/<<PKGBUILDDIR>>/git","pack-objects","--window=2","--delta-base-offset",".git/objects/pack/.tmp-4366-pack","--cruft","--honor-pack-keep","--non-empty","--max-pack-size=0"]}
ok 25 - cruft repack respects repack.cruftWindow

expecting success of 5329.26 'cruft repack respects --window by default': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&

		GIT_TRACE2_EVENT=$(pwd)/event.trace \
		git -c pack.window=2 repack --cruft --window=3 &&

		grep "pack-objects.*--window=3.*--cruft" event.trace
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
{"event":"child_start","sid":"20221228T074857.840490Z-Hc64317c2-P00001137","thread":"main","time":"2022-12-28T07:48:57.897881Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","pack-objects","--window=3","--delta-base-offset",".git/objects/pack/.tmp-4407-pack","--cruft","--honor-pack-keep","--non-empty","--max-pack-size=0"]}
{"event":"start","sid":"20221228T074857.840490Z-Hc64317c2-P00001137/20221228T074857.909913Z-Hc64317c2-P00001143","thread":"main","time":"2022-12-28T07:48:57.910999Z","file":"common-main.c","line":51,"t_abs":0.004075,"argv":["/<<PKGBUILDDIR>>/git","pack-objects","--window=3","--delta-base-offset",".git/objects/pack/.tmp-4407-pack","--cruft","--honor-pack-keep","--non-empty","--max-pack-size=0"]}
ok 26 - cruft repack respects --window by default

expecting success of 5329.27 'cruft repack respects --quiet': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit base &&
		GIT_PROGRESS_DELAY=0 git repack --cruft --quiet 2>err &&
		test_must_be_empty err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 27 - cruft repack respects --quiet

expecting success of 5329.28 'cruft --local drops unreachable objects': 
	git init alternate &&
	git init repo &&
	test_when_finished "rm -fr alternate repo" &&

	test_commit -C alternate base &&
	# Pack all objects in alterate so that the cruft repack in "repo" sees
	# the object it dropped due to `--local` as packed. Otherwise this
	# object would not appear packed anywhere (since it is not packed in
	# alternate and likewise not part of the cruft pack in the other repo
	# because of `--local`).
	git -C alternate repack -ad &&

	(
		cd repo &&

		object="$(git -C ../alternate rev-parse HEAD:base.t)" &&
		git -C ../alternate cat-file -p $object >contents &&

		# Write some reachable objects and two unreachable ones: one
		# that the alternate has and another that is unique.
		test_commit other &&
		git hash-object -w -t blob contents &&
		cruft="$(echo cruft | git hash-object -w -t blob --stdin)" &&

		( cd ../alternate/.git/objects && pwd ) \
		       >.git/objects/info/alternates &&

		test_path_is_file $objdir/$(test_oid_to_path $cruft) &&
		test_path_is_file $objdir/$(test_oid_to_path $object) &&

		git repack -d --cruft --local &&

		test-tool pack-mtimes "$(basename $(ls $packdir/pack-*.mtimes))" \
		       >objects &&
		! grep $object objects &&
		grep $cruft objects
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/alternate/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master (root-commit) 5e824fb] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
df967b96a579e45a18b8251732d16804b2e56a55
822216280fd1de308f55f27cdd7a4196a8f5a189 1672213738
ok 28 - cruft --local drops unreachable objects

expecting success of 5329.29 'MIDX bitmaps tolerate reachable cruft objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit reachable &&
		test_commit cruft &&
		unreachable="$(git rev-parse cruft)" &&

		git reset --hard $unreachable^ &&
		git tag -d cruft &&
		git reflog expire --all --expire=all &&

		git repack --cruft -d &&

		# resurrect the unreachable object via a new commit. the
		# new commit will get selected for a bitmap, but be
		# missing one of its parents from the selected packs.
		git reset --hard $unreachable &&
		test_commit resurrect &&

		git repack --write-midx --write-bitmap-index --geometric=2 -d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 493cdad] reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reachable.t
[master 40cbb3e] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
HEAD is now at 493cdad reachable
Deleted tag 'cruft' (was 40cbb3e)
HEAD is now at 40cbb3e cruft
[master 8ec3079] resurrect
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 resurrect.t
ok 29 - MIDX bitmaps tolerate reachable cruft objects

expecting success of 5329.30 'cruft objects are freshend via loose': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		echo "cruft" >contents &&
		blob="$(git hash-object -w -t blob contents)" &&
		loose="$objdir/$(test_oid_to_path $blob)" &&

		test_commit base &&

		git repack --cruft -d &&

		test_path_is_missing "$loose" &&
		test-tool pack-mtimes "$(basename "$(ls $packdir/pack-*.mtimes)")" >cruft &&
		grep "$blob" cruft &&

		# write the same object again
		git hash-object -w -t blob contents &&

		test_path_is_file "$loose"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5329-pack-objects-cruft/repo/.git/
[master (root-commit) 369f281] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
822216280fd1de308f55f27cdd7a4196a8f5a189 1672213740
822216280fd1de308f55f27cdd7a4196a8f5a189
ok 30 - cruft objects are freshend via loose

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5330-no-lazy-fetch-with-commit-graph.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5330-no-lazy-fetch-with-commit-graph/.git/
expecting success of 5330.1 'setup: prepare a repository with a commit': 
	git init with-commit &&
	test_commit -C with-commit the-commit &&
	oid=$(git -C with-commit rev-parse HEAD)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5330-no-lazy-fetch-with-commit-graph/with-commit/.git/
[master (root-commit) 2bd0846] the-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 the-commit.t
ok 1 - setup: prepare a repository with a commit

expecting success of 5330.2 'setup: prepare a repository with commit-graph contains the commit': 
	git init with-commit-graph &&
	echo "$(pwd)/with-commit/.git/objects" \
		>with-commit-graph/.git/objects/info/alternates &&
	# create a ref that points to the commit in alternates
	git -C with-commit-graph update-ref refs/ref_to_the_commit "$oid" &&
	# prepare some other objects to commit-graph
	test_commit -C with-commit-graph something &&
	git -c gc.writeCommitGraph=true -C with-commit-graph gc &&
	test_path_is_file with-commit-graph/.git/objects/info/commit-graph

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5330-no-lazy-fetch-with-commit-graph/with-commit-graph/.git/
[master (root-commit) fe60e0e] something
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 something.t
ok 2 - setup: prepare a repository with commit-graph contains the commit

expecting success of 5330.3 'setup: change the alternates to what without the commit': 
	git init --bare without-commit &&
	git -C with-commit-graph cat-file -e $oid &&
	echo "$(pwd)/without-commit/objects" \
		>with-commit-graph/.git/objects/info/alternates &&
	test_must_fail git -C with-commit-graph cat-file -e $oid

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5330-no-lazy-fetch-with-commit-graph/without-commit/
ok 3 - setup: change the alternates to what without the commit

expecting success of 5330.4 'fetch any commit from promisor with the usage of the commit graph': 
	# setup promisor and prepare any commit to fetch
	git -C with-commit-graph remote add origin "$(pwd)/with-commit" &&
	git -C with-commit-graph config remote.origin.promisor true &&
	git -C with-commit-graph config remote.origin.partialclonefilter blob:none &&
	test_commit -C with-commit any-commit &&
	anycommit=$(git -C with-commit rev-parse HEAD) &&
	GIT_TRACE="$(pwd)/trace.txt" \
		git -C with-commit-graph fetch origin $anycommit 2>err &&
	! grep "fatal: promisor-remote: unable to fork off fetch subprocess" err &&
	grep "git fetch origin" trace.txt >actual &&
	test_line_count = 1 actual

[master ba19607] any-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 any-commit.t
ok 4 - fetch any commit from promisor with the usage of the commit graph

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5351-unpack-large-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/.git/
expecting success of 5351.1 'create large objects (1.5 MB) and PACK': 
	test-tool genrandom foo 1500000 >big-blob &&
	test_commit --append foo big-blob &&
	test-tool genrandom bar 1500000 >big-blob &&
	test_commit --append bar big-blob &&
	PACK=$(echo HEAD | git pack-objects --revs pack) &&
	git verify-pack -v pack-$PACK.pack >out &&
	sed -n -e "s/^\([0-9a-f][0-9a-f]*\).*\(commit\|tree\|blob\).*/\1/p" \
		<out >obj-list

[master (root-commit) b6b91a6] foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 big-blob
[master 73e7a4c] bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 1 - create large objects (1.5 MB) and PACK

expecting success of 5351.2 'set memory limitation to 1MB': 
	GIT_ALLOC_LIMIT=1m &&
	export GIT_ALLOC_LIMIT

ok 2 - set memory limitation to 1MB

expecting success of 5351.3 'unpack-objects failed under memory limitation': 
	prepare_dest 2m &&
	test_must_fail git -C dest.git unpack-objects <pack-$PACK.pack 2>err &&
	grep "fatal: attempting to allocate" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/dest.git/
fatal: attempting to allocate 1500005 over limit 1048576
ok 3 - unpack-objects failed under memory limitation

expecting success of 5351.4 'unpack-objects works with memory limitation in dry-run mode': 
	prepare_dest 2m &&
	git -C dest.git unpack-objects -n <pack-$PACK.pack &&
	test_stdout_line_count = 0 find dest.git/objects -type f &&
	test_dir_is_empty dest.git/objects/pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/dest.git/
ok 4 - unpack-objects works with memory limitation in dry-run mode

expecting success of 5351.5 'unpack big object in stream': 
	prepare_dest 1m &&
	git -C dest.git unpack-objects <pack-$PACK.pack &&
	test_dir_is_empty dest.git/objects/pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/dest.git/
ok 5 - unpack big object in stream

expecting success of 5351.6 'unpack big object in stream (core.fsyncmethod=batch)': 
	prepare_dest 1m &&
	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" \
	GIT_TEST_FSYNC=true \
		git -C dest.git $BATCH_CONFIGURATION unpack-objects <pack-$PACK.pack &&
	if grep "core.fsyncMethod = batch is unsupported" trace2.txt
	then
		flush_count=7
	else
		flush_count=1
	fi &&
	check_fsync_events trace2.txt <<-EOF &&
	"key":"fsync/writeout-only","value":"6"
	"key":"fsync/hardware-flush","value":"$flush_count"
	EOF

	test_dir_is_empty dest.git/objects/pack &&
	git -C dest.git cat-file --batch-check="%(objectname)" <obj-list >current &&
	cmp obj-list current

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/dest.git/
ok 6 - unpack big object in stream (core.fsyncmethod=batch)

expecting success of 5351.7 'do not unpack existing large objects': 
	prepare_dest 1m &&
	git -C dest.git index-pack --stdin <pack-$PACK.pack &&
	git -C dest.git unpack-objects <pack-$PACK.pack &&

	# The destination came up with the exact same pack...
	DEST_PACK=$(echo dest.git/objects/pack/pack-*.pack) &&
	cmp pack-$PACK.pack $DEST_PACK &&

	# ...and wrote no loose objects
	test_stdout_line_count = 0 find dest.git/objects -type f ! -name "pack-*"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5351-unpack-large-objects/dest.git/
pack	4a1be184fdbd6bf82eab500bad78e4fee02c1909
ok 7 - do not unpack existing large objects

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5324-split-commit-graph.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5324-split-commit-graph/.git/
expecting success of 5324.1 'setup repo': 
	git init &&
	git config core.commitGraph true &&
	git config gc.writeCommitGraph false &&
	infodir=".git/objects/info" &&
	graphdir="$infodir/commit-graphs" &&
	test_oid_cache <<-EOM
	shallow sha1:2132
	shallow sha256:2436

	base sha1:1408
	base sha256:1528

	oid_version sha1:1
	oid_version sha256:2
	EOM

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5324-split-commit-graph/.git/
ok 1 - setup repo

expecting success of 5324.2 'tweak umask for modebit tests': 
	umask 022

ok 2 - tweak umask for modebit tests

expecting success of 5324.3 'create commits and write commit-graph': 
	for i in $(test_seq 3)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git commit-graph write --reachable &&
	test_path_is_file $infodir/commit-graph &&
	graph_read_expect 3

[master (root-commit) d0dcf97] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 82335b2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master ddc8575] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
ok 3 - create commits and write commit-graph

expecting success of 5324.4 'check normal git operations: graph exists': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 4 - check normal git operations: graph exists

expecting success of 5324.5 'add more commits, and write a new base graph': 
	git reset --hard commits/1 &&
	for i in $(test_seq 4 5)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git reset --hard commits/2 &&
	for i in $(test_seq 6 10)
	do
		test_commit $i &&
		git branch commits/$i || return 1
	done &&
	git reset --hard commits/2 &&
	git merge commits/4 &&
	git branch merge/1 &&
	git reset --hard commits/4 &&
	git merge commits/6 &&
	git branch merge/2 &&
	git commit-graph write --reachable &&
	graph_read_expect 12

HEAD is now at d0dcf97 1
[master 6efda21] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 7ec8a1d] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
HEAD is now at 82335b2 2
[master 76c4cb0] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[master 12a06f3] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[master 1883fab] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[master 8ccfcf8] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[master f52fba2] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
HEAD is now at 82335b2 2
Merge made by the 'ort' strategy.
 4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
HEAD is now at 6efda21 4
Merge made by the 'ort' strategy.
 2.t | 1 +
 6.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 2.t
 create mode 100644 6.t
ok 5 - add more commits, and write a new base graph

expecting success of 5324.6 'fork and fail to base a chain on a commit-graph file': 
	test_when_finished rm -rf fork &&
	git clone . fork &&
	(
		cd fork &&
		rm .git/objects/info/commit-graph &&
		echo "$(pwd)/../.git/objects" >.git/objects/info/alternates &&
		test_commit new-commit &&
		git commit-graph write --reachable --split &&
		test_path_is_file $graphdir/commit-graph-chain &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		verify_chain_files_exist $graphdir
	)

Cloning into 'fork'...
done.
[master aca87dd] new-commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-commit.t
ok 6 - fork and fail to base a chain on a commit-graph file

expecting success of 5324.7 'add three more commits, write a tip graph': 
	git reset --hard commits/3 &&
	git merge merge/1 &&
	git merge commits/5 &&
	git merge merge/2 &&
	git branch merge/3 &&
	git commit-graph write --reachable --split &&
	test_path_is_missing $infodir/commit-graph &&
	test_path_is_file $graphdir/commit-graph-chain &&
	ls $graphdir/graph-*.graph >graph-files &&
	test_line_count = 2 graph-files &&
	verify_chain_files_exist $graphdir

HEAD is now at ddc8575 3
Merge made by the 'ort' strategy.
 4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
Merge made by the 'ort' strategy.
 5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
Merge made by the 'ort' strategy.
 6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
ok 7 - add three more commits, write a tip graph

expecting success of 5324.8 'check normal git operations: split commit-graph: merge 3 vs 2': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 8 - check normal git operations: split commit-graph: merge 3 vs 2

expecting success of 5324.9 'add one commit, write a tip graph': 
	test_commit 11 &&
	git branch commits/11 &&
	git commit-graph write --reachable --split &&
	test_path_is_missing $infodir/commit-graph &&
	test_path_is_file $graphdir/commit-graph-chain &&
	ls $graphdir/graph-*.graph >graph-files &&
	test_line_count = 3 graph-files &&
	verify_chain_files_exist $graphdir

[master 4942c62] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
ok 9 - add one commit, write a tip graph

expecting success of 5324.10 'check normal git operations: three-layer commit-graph: commit 11 vs 6': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 10 - check normal git operations: three-layer commit-graph: commit 11 vs 6

expecting success of 5324.11 'add one commit, write a merged graph': 
	test_commit 12 &&
	git branch commits/12 &&
	git commit-graph write --reachable --split &&
	test_path_is_file $graphdir/commit-graph-chain &&
	test_line_count = 2 $graphdir/commit-graph-chain &&
	ls $graphdir/graph-*.graph >graph-files &&
	test_line_count = 2 graph-files &&
	verify_chain_files_exist $graphdir

[master 281f121] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
ok 11 - add one commit, write a merged graph

expecting success of 5324.12 'check normal git operations: merged commit-graph: commit 12 vs 6': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 12 - check normal git operations: merged commit-graph: commit 12 vs 6

expecting success of 5324.13 'create fork and chain across alternate': 
	git clone . fork &&
	(
		cd fork &&
		git config core.commitGraph true &&
		rm -rf $graphdir &&
		echo "$(pwd)/../.git/objects" >.git/objects/info/alternates &&
		test_commit 13 &&
		git branch commits/13 &&
		git commit-graph write --reachable --split &&
		test_path_is_file $graphdir/commit-graph-chain &&
		test_line_count = 3 $graphdir/commit-graph-chain &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files &&
		git -c core.commitGraph=true  rev-list HEAD >expect &&
		git -c core.commitGraph=false rev-list HEAD >actual &&
		test_cmp expect actual &&
		test_commit 14 &&
		git commit-graph write --reachable --split --object-dir=.git/objects/ &&
		test_line_count = 3 $graphdir/commit-graph-chain &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files
	)

Cloning into 'fork'...
done.
[master f92bfb4] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[master 77a503a] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
ok 13 - create fork and chain across alternate

expecting success of 5324.14 'check normal git operations: alternate: commit 13 vs 6': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 14 - check normal git operations: alternate: commit 13 vs 6

expecting success of 5324.15 'test merge stragety constants': 
	git clone . merge-2 &&
	(
		cd merge-2 &&
		git config core.commitGraph true &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test_commit 14 &&
		git commit-graph write --reachable --split --size-multiple=2 &&
		test_line_count = 3 $graphdir/commit-graph-chain

	) &&
	git clone . merge-10 &&
	(
		cd merge-10 &&
		git config core.commitGraph true &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test_commit 14 &&
		git commit-graph write --reachable --split --size-multiple=10 &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files
	) &&
	git clone . merge-10-expire &&
	(
		cd merge-10-expire &&
		git config core.commitGraph true &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test_commit 15 &&
		touch $graphdir/to-delete.graph $graphdir/to-keep.graph &&
		test-tool chmtime =1546362000 $graphdir/to-delete.graph &&
		test-tool chmtime =1546362001 $graphdir/to-keep.graph &&
		git commit-graph write --reachable --split --size-multiple=10 \
			--expire-time="2019-01-01 12:00 -05:00" &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		test_path_is_missing $graphdir/to-delete.graph &&
		test_path_is_file $graphdir/to-keep.graph &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 3 graph-files
	) &&
	git clone --no-hardlinks . max-commits &&
	(
		cd max-commits &&
		git config core.commitGraph true &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test_commit 16 &&
		test_commit 17 &&
		git commit-graph write --reachable --split --max-commits=1 &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files
	)

Cloning into 'merge-2'...
done.
[master dff8101] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
Cloning into 'merge-10'...
done.
[master dff8101] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
Cloning into 'merge-10-expire'...
done.
[master b16d1f7] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
Cloning into 'max-commits'...
done.
[master ffa95d4] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
[master 5167fe2] 17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 17.t
ok 15 - test merge stragety constants

expecting success of 5324.16 'remove commit-graph-chain file after flattening': 
	git clone . flatten &&
	(
		cd flatten &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		git commit-graph write --reachable &&
		test_path_is_missing $graphdir/commit-graph-chain &&
		ls $graphdir >graph-files &&
		test_line_count = 0 graph-files
	)

Cloning into 'flatten'...
done.
ok 16 - remove commit-graph-chain file after flattening

expecting success of 5324.17 'verify hashes along chain, even in shallow': 
	git clone --no-hardlinks . verify &&
	(
		cd verify &&
		git commit-graph verify &&
		base_file=$graphdir/graph-$(head -n 1 $graphdir/commit-graph-chain).graph &&
		corrupt_file "$base_file" $(test_oid shallow) "\01" &&
		test_must_fail git commit-graph verify --shallow 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "incorrect checksum" err
	)

Cloning into 'verify'...
done.
1+0 records in
1+0 records out
1 byte copied, 0.000439016 s, 2.3 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
ok 17 - verify hashes along chain, even in shallow

expecting success of 5324.18 'verify --shallow does not check base contents': 
	git clone --no-hardlinks . verify-shallow &&
	(
		cd verify-shallow &&
		git commit-graph verify &&
		base_file=$graphdir/graph-$(head -n 1 $graphdir/commit-graph-chain).graph &&
		corrupt_file "$base_file" 1000 "\01" &&
		git commit-graph verify --shallow &&
		test_must_fail git commit-graph verify 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "incorrect checksum" err
	)

Cloning into 'verify-shallow'...
done.
1+0 records in
1+0 records out
1 byte copied, 0.000414349 s, 2.4 kB/s
the commit-graph file has incorrect checksum and is likely corrupt
ok 18 - verify --shallow does not check base contents

expecting success of 5324.19 'warn on base graph chunk incorrect': 
	git clone --no-hardlinks . base-chunk &&
	(
		cd base-chunk &&
		git commit-graph verify &&
		base_file=$graphdir/graph-$(tail -n 1 $graphdir/commit-graph-chain).graph &&
		corrupt_file "$base_file" $(test_oid base) "\01" &&
		git commit-graph verify --shallow 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "commit-graph chain does not match" err
	)

Cloning into 'base-chunk'...
done.
1+0 records in
1+0 records out
1 byte copied, 0.000609022 s, 1.6 kB/s
warning: commit-graph chain does not match
ok 19 - warn on base graph chunk incorrect

expecting success of 5324.20 'verify after commit-graph-chain corruption': 
	git clone --no-hardlinks . verify-chain &&
	(
		cd verify-chain &&
		corrupt_file "$graphdir/commit-graph-chain" 60 "G" &&
		git commit-graph verify 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "invalid commit-graph chain" err &&
		corrupt_file "$graphdir/commit-graph-chain" 60 "A" &&
		git commit-graph verify 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "unable to find all commit-graph files" err
	)

Cloning into 'verify-chain'...
done.
1+0 records in
1+0 records out
1 byte copied, 0.000773695 s, 1.3 kB/s
warning: invalid commit-graph chain: line '944c3272bbe885450efGfcad419a83cf35d1c284' not a hash
1+0 records in
1+0 records out
1 byte copied, 0.000693692 s, 1.4 kB/s
warning: unable to find all commit-graph files
ok 20 - verify after commit-graph-chain corruption

expecting success of 5324.21 'verify across alternates': 
	git clone --no-hardlinks . verify-alt &&
	(
		cd verify-alt &&
		rm -rf $graphdir &&
		altdir="$(pwd)/../.git/objects" &&
		echo "$altdir" >.git/objects/info/alternates &&
		git commit-graph verify --object-dir="$altdir/" &&
		test_commit extra &&
		git commit-graph write --reachable --split &&
		tip_file=$graphdir/graph-$(tail -n 1 $graphdir/commit-graph-chain).graph &&
		corrupt_file "$tip_file" 100 "\01" &&
		test_must_fail git commit-graph verify --shallow 2>test_err &&
		grep -v "^+" test_err >err &&
		test_i18ngrep "commit-graph has incorrect fanout value" err
	)

Cloning into 'verify-alt'...
done.
[master bcff7a4] extra
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 extra.t
1+0 records in
1+0 records out
1 byte copied, 0.00149505 s, 0.7 kB/s
commit-graph has incorrect fanout value: fanout[5] = 16777216 != 0
ok 21 - verify across alternates

expecting success of 5324.22 'add octopus merge': 
	git reset --hard commits/10 &&
	git merge commits/3 commits/4 &&
	git branch merge/octopus &&
	git commit-graph write --reachable --split &&
	git commit-graph verify --progress 2>err &&
	test_line_count = 3 err &&
	test_i18ngrep ! warning err &&
	test_line_count = 3 $graphdir/commit-graph-chain

HEAD is now at f52fba2 10
Trying simple merge with commits/3
Trying simple merge with commits/4
Merge made by the 'octopus' strategy.
 3.t | 1 +
 4.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 3.t
 create mode 100644 4.t
ok 22 - add octopus merge

expecting success of 5324.23 'check normal git operations: graph exists': 
		graph_git_two_modes "log --oneline $BRANCH" "$DIR" &&
		graph_git_two_modes "log --topo-order $BRANCH" "$DIR" &&
		graph_git_two_modes "log --graph $COMPARE..$BRANCH" "$DIR" &&
		graph_git_two_modes "branch -vv" "$DIR" &&
		graph_git_two_modes "merge-base -a $BRANCH $COMPARE" "$DIR"
	
ok 23 - check normal git operations: graph exists

expecting success of 5324.24 'split across alternate where alternate is not split': 
	git commit-graph write --reachable &&
	test_path_is_file .git/objects/info/commit-graph &&
	cp .git/objects/info/commit-graph . &&
	git clone --no-hardlinks . alt-split &&
	(
		cd alt-split &&
		rm -f .git/objects/info/commit-graph &&
		echo "$(pwd)"/../.git/objects >.git/objects/info/alternates &&
		test_commit 18 &&
		git commit-graph write --reachable --split &&
		test_line_count = 1 $graphdir/commit-graph-chain
	) &&
	test_cmp commit-graph .git/objects/info/commit-graph

Cloning into 'alt-split'...
done.
[master e793b7e] 18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 18.t
ok 24 - split across alternate where alternate is not split

expecting success of 5324.25 '--split=no-merge always writes an incremental': 
	test_when_finished rm -rf a b &&
	rm -rf $graphdir $infodir/commit-graph &&
	git reset --hard commits/2 &&
	git rev-list HEAD~1 >a &&
	git rev-list HEAD >b &&
	git commit-graph write --split --stdin-commits <a &&
	git commit-graph write --split=no-merge --stdin-commits <b &&
	test_line_count = 2 $graphdir/commit-graph-chain

HEAD is now at 82335b2 2
ok 25 - --split=no-merge always writes an incremental

expecting success of 5324.26 '--split=replace replaces the chain': 
	rm -rf $graphdir $infodir/commit-graph &&
	git reset --hard commits/3 &&
	git rev-list -1 HEAD~2 >a &&
	git rev-list -1 HEAD~1 >b &&
	git rev-list -1 HEAD >c &&
	git commit-graph write --split=no-merge --stdin-commits <a &&
	git commit-graph write --split=no-merge --stdin-commits <b &&
	git commit-graph write --split=no-merge --stdin-commits <c &&
	test_line_count = 3 $graphdir/commit-graph-chain &&
	git commit-graph write --stdin-commits --split=replace <b &&
	test_path_is_missing $infodir/commit-graph &&
	test_path_is_file $graphdir/commit-graph-chain &&
	ls $graphdir/graph-*.graph >graph-files &&
	test_line_count = 1 graph-files &&
	verify_chain_files_exist $graphdir &&
	graph_read_expect 2

HEAD is now at ddc8575 3
ok 26 - --split=replace replaces the chain

checking prerequisite: ULIMIT_FILE_DESCRIPTORS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_FILE_DESCRIPTORS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_FILE_DESCRIPTORS" &&
	test_have_prereq !MINGW,!CYGWIN &&
	run_with_limited_open_files true

)
prerequisite ULIMIT_FILE_DESCRIPTORS ok
expecting success of 5324.27 'handles file descriptor exhaustion': 
	git init ulimit &&
	(
		cd ulimit &&
		for i in $(test_seq 64)
		do
			test_commit $i &&
			run_with_limited_open_files test_might_fail git commit-graph write \
				--split=no-merge --reachable || return 1
		done
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5324-split-commit-graph/ulimit/.git/
[master (root-commit) b696783] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 87901d6] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master ea7a557] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master 93db791] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 99a5a6e] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[master e7f1c5a] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[master 3e4d82c] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[master a0e4c69] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[master 053af5f] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[master 7b3839e] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[master ab7cebd] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[master 9b5149b] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[master 51445d7] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[master 600567c] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[master d39117c] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[master 7ed88cc] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
[master d4784f6] 17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 17.t
[master d9af4e4] 18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 18.t
[master d5314af] 19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 19.t
[master 483a651] 20
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 20.t
[master c00d2fe] 21
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 21.t
[master 4b26ff2] 22
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 22.t
[master ac29423] 23
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 23.t
[master 2054315] 24
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 24.t
[master 9d666a9] 25
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 25.t
[master c1973a4] 26
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 26.t
[master c40f0e0] 27
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 27.t
[master 48fcf19] 28
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 28.t
[master 0900777] 29
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 29.t
[master 432f02e] 30
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 30.t
[master 5688f4f] 31
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 31.t
[master b34747d] 32
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 32.t
[master 8ec35fe] 33
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 33.t
[master 513eff2] 34
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 34.t
[master c908ec0] 35
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 35.t
[master cf1209b] 36
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 36.t
[master 86ac877] 37
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 37.t
[master c7d935d] 38
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 38.t
[master 1fe243a] 39
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 39.t
[master d93e5e9] 40
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 40.t
[master f21b04c] 41
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 41.t
[master b47e4d8] 42
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 42.t
[master 43a5db7] 43
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 43.t
[master 88e9031] 44
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 44.t
[master 9c9b5bb] 45
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 45.t
[master 5317a1b] 46
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 46.t
[master 8e0d04e] 47
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 47.t
[master 3d9b4d7] 48
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 48.t
[master b6143e2] 49
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 49.t
[master f62c708] 50
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 50.t
[master 30e075a] 51
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 51.t
[master aed8d05] 52
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 52.t
[master eb37193] 53
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 53.t
[master dff8022] 54
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 54.t
[master d123fd0] 55
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 55.t
[master 6833bbb] 56
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 56.t
[master cd23a6c] 57
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 57.t
[master 0ad3fbe] 58
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 58.t
[master ec11693] 59
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 59.t
[master df33166] 60
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 60.t
[master 17100a5] 61
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 61.t
[master 3cfb402] 62
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 62.t
[master 4885c90] 63
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 63.t
[master 1d3111d] 64
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 64.t
ok 27 - handles file descriptor exhaustion

expecting success of 5324.28 'split commit-graph respects core.sharedrepository 0666': 
		rm -rf $graphdir $infodir/commit-graph &&
		git reset --hard commits/1 &&
		test_config core.sharedrepository "$mode" &&
		git commit-graph write --split --reachable &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files &&
		echo "$modebits" >expect &&
		test_modebits $graphdir/graph-*.graph >actual &&
		test_cmp expect actual &&
		test_modebits $graphdir/commit-graph-chain >actual &&
		test_cmp expect actual
	
HEAD is now at d0dcf97 1
ok 28 - split commit-graph respects core.sharedrepository 0666

expecting success of 5324.29 'split commit-graph respects core.sharedrepository 0600': 
		rm -rf $graphdir $infodir/commit-graph &&
		git reset --hard commits/1 &&
		test_config core.sharedrepository "$mode" &&
		git commit-graph write --split --reachable &&
		ls $graphdir/graph-*.graph >graph-files &&
		test_line_count = 1 graph-files &&
		echo "$modebits" >expect &&
		test_modebits $graphdir/graph-*.graph >actual &&
		test_cmp expect actual &&
		test_modebits $graphdir/commit-graph-chain >actual &&
		test_cmp expect actual
	
HEAD is now at d0dcf97 1
ok 29 - split commit-graph respects core.sharedrepository 0600

expecting success of 5324.30 '--split=replace with partial Bloom data': 
	rm -rf $graphdir $infodir/commit-graph &&
	git reset --hard commits/3 &&
	git rev-list -1 HEAD~2 >a &&
	git rev-list -1 HEAD~1 >b &&
	git commit-graph write --split=no-merge --stdin-commits --changed-paths <a &&
	git commit-graph write --split=no-merge --stdin-commits <b &&
	git commit-graph write --split=replace --stdin-commits --changed-paths <c &&
	ls $graphdir/graph-*.graph >graph-files &&
	test_line_count = 1 graph-files &&
	verify_chain_files_exist $graphdir

HEAD is now at ddc8575 3
ok 30 - --split=replace with partial Bloom data

expecting success of 5324.31 'prevent regression for duplicate commits across layers': 
	git init dup &&
	git -C dup commit --allow-empty -m one &&
	git -C dup -c core.commitGraph=false commit-graph write --split=no-merge --reachable 2>err &&
	test_i18ngrep "attempting to write a commit-graph" err &&
	git -C dup commit-graph write --split=no-merge --reachable &&
	git -C dup commit --allow-empty -m two &&
	git -C dup commit-graph write --split=no-merge --reachable &&
	git -C dup commit --allow-empty -m three &&
	git -C dup commit-graph write --split --reachable &&
	git -C dup commit-graph verify

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5324-split-commit-graph/dup/.git/
[master (root-commit) a6701ea] one
 Author: A U Thor <author@example.com>
warning: attempting to write a commit-graph, but 'core.commitGraph' is disabled
[master f065053] two
 Author: A U Thor <author@example.com>
[master 072bd61] three
 Author: A U Thor <author@example.com>
ok 31 - prevent regression for duplicate commits across layers

expecting success of 5324.32 'setup repo for mixed generation commit-graph-chain': 
	graphdir=".git/objects/info/commit-graphs" &&
	test_oid_cache <<-EOF &&
	oid_version sha1:1
	oid_version sha256:2
	EOF
	git init mixed &&
	(
		cd mixed &&
		git config core.commitGraph true &&
		git config gc.writeCommitGraph false &&
		for i in $(test_seq $NUM_FIRST_LAYER_COMMITS)
		do
			test_commit $i &&
			git branch commits/$i || return 1
		done &&
		git -c commitGraph.generationVersion=2 commit-graph write --reachable --split &&
		graph_read_expect $NUM_FIRST_LAYER_COMMITS &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		for i in $(test_seq $SECOND_LAYER_SEQUENCE_START $SECOND_LAYER_SEQUENCE_END)
		do
			test_commit $i &&
			git branch commits/$i || return 1
		done &&
		git -c commitGraph.generationVersion=1 commit-graph write --reachable --split=no-merge &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test-tool read-graph >output &&
		cat >expect <<-EOF &&
		header: 43475048 1 $(test_oid oid_version) 4 1
		num_commits: $NUM_SECOND_LAYER_COMMITS
		chunks: oid_fanout oid_lookup commit_metadata
		options:
		EOF
		test_cmp expect output &&
		git commit-graph verify &&
		cat $graphdir/commit-graph-chain
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5324-split-commit-graph/mixed/.git/
[master (root-commit) b696783] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 87901d6] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master ea7a557] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master 93db791] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 99a5a6e] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[master e7f1c5a] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[master 3e4d82c] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[master a0e4c69] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[master 053af5f] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[master 7b3839e] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[master ab7cebd] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[master 9b5149b] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[master 51445d7] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[master 600567c] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[master d39117c] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[master 7ed88cc] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
[master d4784f6] 17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 17.t
[master d9af4e4] 18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 18.t
[master d5314af] 19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 19.t
[master 483a651] 20
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 20.t
[master c00d2fe] 21
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 21.t
[master 4b26ff2] 22
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 22.t
[master ac29423] 23
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 23.t
[master 2054315] 24
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 24.t
[master 9d666a9] 25
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 25.t
[master c1973a4] 26
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 26.t
[master c40f0e0] 27
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 27.t
[master 48fcf19] 28
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 28.t
[master 0900777] 29
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 29.t
[master 432f02e] 30
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 30.t
[master 5688f4f] 31
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 31.t
[master b34747d] 32
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 32.t
[master 8ec35fe] 33
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 33.t
[master 513eff2] 34
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 34.t
[master c908ec0] 35
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 35.t
[master cf1209b] 36
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 36.t
[master 86ac877] 37
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 37.t
[master c7d935d] 38
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 38.t
[master 1fe243a] 39
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 39.t
[master d93e5e9] 40
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 40.t
[master f21b04c] 41
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 41.t
[master b47e4d8] 42
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 42.t
[master 43a5db7] 43
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 43.t
[master 88e9031] 44
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 44.t
[master 9c9b5bb] 45
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 45.t
[master 5317a1b] 46
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 46.t
[master 8e0d04e] 47
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 47.t
[master 3d9b4d7] 48
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 48.t
[master b6143e2] 49
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 49.t
[master f62c708] 50
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 50.t
[master 30e075a] 51
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 51.t
[master aed8d05] 52
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 52.t
[master eb37193] 53
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 53.t
[master dff8022] 54
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 54.t
[master d123fd0] 55
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 55.t
[master 6833bbb] 56
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 56.t
[master cd23a6c] 57
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 57.t
[master 0ad3fbe] 58
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 58.t
[master ec11693] 59
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 59.t
[master df33166] 60
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 60.t
[master 17100a5] 61
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 61.t
[master 3cfb402] 62
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 62.t
[master 4885c90] 63
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 63.t
[master 1d3111d] 64
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 64.t
[master 5cad4d9] 65
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 65.t
[master e0cddd6] 66
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 66.t
[master 2356703] 67
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 67.t
[master 6ee2712] 68
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 68.t
[master 893dbc6] 69
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 69.t
[master 47474f4] 70
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 70.t
[master f7e0c47] 71
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 71.t
[master 38ce058] 72
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 72.t
[master aa3a53a] 73
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 73.t
[master 4ec5ca2] 74
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 74.t
[master 6d93ac7] 75
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 75.t
[master 2c15d80] 76
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 76.t
[master c28c815] 77
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 77.t
[master cd8553d] 78
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 78.t
[master b54c38f] 79
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 79.t
[master 64acaa4] 80
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 80.t
a107b8ee074ad1dc6006f594c1c01d8dbd30963c
ad73577eaf380f4f00eb24a5152610a05f82c55b
ok 32 - setup repo for mixed generation commit-graph-chain

expecting success of 5324.33 'do not write generation data chunk if not present on existing tip': 
	git clone mixed mixed-no-gdat &&
	(
		cd mixed-no-gdat &&
		for i in $(test_seq $THIRD_LAYER_SEQUENCE_START $THIRD_LAYER_SEQUENCE_END)
		do
			test_commit $i &&
			git branch commits/$i || return 1
		done &&
		git commit-graph write --reachable --split=no-merge &&
		test_line_count = 3 $graphdir/commit-graph-chain &&
		test-tool read-graph >output &&
		cat >expect <<-EOF &&
		header: 43475048 1 $(test_oid oid_version) 4 2
		num_commits: $NUM_THIRD_LAYER_COMMITS
		chunks: oid_fanout oid_lookup commit_metadata
		options:
		EOF
		test_cmp expect output &&
		git commit-graph verify
	)

Cloning into 'mixed-no-gdat'...
done.
[master 63fe9d8] 81
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 81.t
[master 46b1698] 82
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 82.t
[master 3a3e636] 83
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 83.t
[master 8e168a7] 84
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 84.t
[master bc6216c] 85
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 85.t
[master 41d97f7] 86
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 86.t
[master d27c973] 87
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 87.t
ok 33 - do not write generation data chunk if not present on existing tip

expecting success of 5324.34 'do not write generation data chunk if the topmost remaining layer does not have generation data chunk': 
	git clone mixed-no-gdat mixed-merge-no-gdat &&
	(
		cd mixed-merge-no-gdat &&
		for i in $(test_seq $FOURTH_LAYER_SEQUENCE_START $FOURTH_LAYER_SEQUENCE_END)
		do
			test_commit $i &&
			git branch commits/$i || return 1
		done &&
		git commit-graph write --reachable --split --size-multiple 1 &&
		test_line_count = 3 $graphdir/commit-graph-chain &&
		test-tool read-graph >output &&
		cat >expect <<-EOF &&
		header: 43475048 1 $(test_oid oid_version) 4 2
		num_commits: $(($NUM_THIRD_LAYER_COMMITS + $NUM_FOURTH_LAYER_COMMITS))
		chunks: oid_fanout oid_lookup commit_metadata
		options:
		EOF
		test_cmp expect output &&
		git commit-graph verify
	)

Cloning into 'mixed-merge-no-gdat'...
done.
[master 6eb0fbf] 88
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 88.t
[master 12abc91] 89
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 89.t
[master 2c8ff3c] 90
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 90.t
[master dc8351e] 91
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 91.t
[master 59950af] 92
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 92.t
[master 00ca893] 93
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 93.t
[master 0d371ea] 94
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 94.t
[master cfa8187] 95
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 95.t
ok 34 - do not write generation data chunk if the topmost remaining layer does not have generation data chunk

expecting success of 5324.35 'write generation data chunk if topmost remaining layer has generation data chunk': 
	git clone mixed-merge-no-gdat mixed-merge-gdat &&
	(
		cd mixed-merge-gdat &&
		for i in $(test_seq $FIFTH_LAYER_SEQUENCE_START $FIFTH_LAYER_SEQUENCE_END)
		do
			test_commit $i &&
			git branch commits/$i || return 1
		done &&
		git commit-graph write --reachable --split --size-multiple 1 &&
		test_line_count = 2 $graphdir/commit-graph-chain &&
		test-tool read-graph >output &&
		cat >expect <<-EOF &&
		header: 43475048 1 $(test_oid oid_version) 5 1
		num_commits: $(($NUM_SECOND_LAYER_COMMITS + $NUM_THIRD_LAYER_COMMITS + $NUM_FOURTH_LAYER_COMMITS + $NUM_FIFTH_LAYER_COMMITS))
		chunks: oid_fanout oid_lookup commit_metadata generation_data
		options: read_generation_data
		EOF
		test_cmp expect output
	)

Cloning into 'mixed-merge-gdat'...
done.
[master a22bc18] 96
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 96.t
[master dc189f8] 97
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 97.t
[master 7ef260e] 98
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 98.t
[master e31cd18] 99
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 99.t
[master df7c394] 100
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 100.t
[master 914897f] 101
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 101.t
[master c34363e] 102
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 102.t
[master efcd50d] 103
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 103.t
[master ae03b58] 104
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 104.t
[master 2c87974] 105
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 105.t
[master be2bb78] 106
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 106.t
[master 98de601] 107
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 107.t
[master e87578e] 108
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 108.t
[master 7094c09] 109
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 109.t
[master c87c1b7] 110
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 110.t
[master 4501713] 111
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 111.t
ok 35 - write generation data chunk if topmost remaining layer has generation data chunk

expecting success of 5324.36 'write generation data chunk when commit-graph chain is replaced': 
	git clone mixed mixed-replace &&
	(
		cd mixed-replace &&
		git commit-graph write --reachable --split=replace &&
		test_path_is_file $graphdir/commit-graph-chain &&
		test_line_count = 1 $graphdir/commit-graph-chain &&
		verify_chain_files_exist $graphdir &&
		graph_read_expect $(($NUM_FIRST_LAYER_COMMITS + $NUM_SECOND_LAYER_COMMITS)) &&
		git commit-graph verify
	)

Cloning into 'mixed-replace'...
done.
ok 36 - write generation data chunk when commit-graph chain is replaced

# passed all 36 test(s)
1..36
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5400-send-pack.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/.git/
expecting success of 5400.1 'setup': 
	test_tick &&
	mkdir mozart mozart/is &&
	echo "Commit #0" >mozart/is/pink &&
	git update-index --add mozart/is/pink &&
	tree=$(git write-tree) &&
	commit=$(echo "Commit #0" | git commit-tree $tree) &&
	zero=$commit &&
	parent=$zero &&
	i=0 &&
	while test $i -le $cnt
	do
		i=$(($i+1)) &&
		test_tick &&
		echo "Commit #$i" >mozart/is/pink &&
		git update-index --add mozart/is/pink &&
		tree=$(git write-tree) &&
		commit=$(echo "Commit #$i" |
			 git commit-tree $tree -p $parent) &&
		git update-ref refs/tags/commit$i $commit &&
		parent=$commit || return 1
	done &&
	git update-ref HEAD "$commit" &&
	git clone ./. victim &&
	( cd victim && git config receive.denyCurrentBranch warn && git log ) &&
	git update-ref HEAD "$zero" &&
	parent=$zero &&
	i=0 &&
	while test $i -le $cnt
	do
		i=$(($i+1)) &&
		test_tick &&
		echo "Rebase #$i" >mozart/is/pink &&
		git update-index --add mozart/is/pink &&
		tree=$(git write-tree) &&
		commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) &&
		git update-ref refs/tags/rebase$i $commit &&
		parent=$commit || return 1
	done &&
	git update-ref HEAD "$commit" &&
	echo Rebase &&
	git log
Cloning into 'victim'...
done.
commit fbc850672173770f17d48f9f2dfcb286d30b70cb
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:18:13 2005 -0700

    Commit #65

commit 940af75942cf34a9fc156d9dc79c8c370e4c3247
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:17:13 2005 -0700

    Commit #64

commit 1fe3a3ebbeaddd1e503ee516a5433a8ebe097112
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:16:13 2005 -0700

    Commit #63

commit 0c78ec36deec72f8c6d458db5b753249a5447dec
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:15:13 2005 -0700

    Commit #62

commit 0ad1da14d02ef96f2c1cb8403952ffddeaaca439
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:14:13 2005 -0700

    Commit #61

commit 15278e4b9b51ca8e00785fff5592d9ba7b8012ea
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:13:13 2005 -0700

    Commit #60

commit d92539d97407cae3ac62cdd1992188ce96a04699
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:12:13 2005 -0700

    Commit #59

commit eeddc69755cde0046432203191b431846124c36d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:11:13 2005 -0700

    Commit #58

commit 9481eb1cebd4e35080a85eaac0a389e436d174d9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:10:13 2005 -0700

    Commit #57

commit 9ab7d0c3f85908c1624cc58f67c236b2e5d53c5d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:09:13 2005 -0700

    Commit #56

commit 070f3c8d7d43c5b9df69498416664b994a36a3e7
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:08:13 2005 -0700

    Commit #55

commit a2f3e1ffc14adb111494e37e857de5428da7230e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:07:13 2005 -0700

    Commit #54

commit 373ca332c114a8af8262474c0b750133d11c3467
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:06:13 2005 -0700

    Commit #53

commit abddf6c6693561aed51ed7308754360720399450
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:05:13 2005 -0700

    Commit #52

commit e9dc99c35123a1d9dd416eb32975f518f7e52776
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:04:13 2005 -0700

    Commit #51

commit 3efc54f7bd18addc186e565f051c1f57ae499205
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:03:13 2005 -0700

    Commit #50

commit 288f90defdf9f8fe6cafb95c4a53d41e3d2914bc
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:02:13 2005 -0700

    Commit #49

commit 1dfae6503af0ff1c353be39162beb34744556d2d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:01:13 2005 -0700

    Commit #48

commit c21493faada856b0f2ac0b85de568ffd9f21ad09
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:00:13 2005 -0700

    Commit #47

commit 0e48e7bf42f7c84d1039794461501f4d3e6bef59
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:59:13 2005 -0700

    Commit #46

commit bb0ff093c62b37247e4b570e41e57fa123962ee8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:58:13 2005 -0700

    Commit #45

commit a2d17f74bfdf7acc0c40e3b228d57a4d68a9c01b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:57:13 2005 -0700

    Commit #44

commit cbac9fdcb0113800bc9ff62d8c1a0cfd61815b11
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:56:13 2005 -0700

    Commit #43

commit 13eff776535a4d90e14a5ba1239e3bb094fce3ef
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:55:13 2005 -0700

    Commit #42

commit b7592bd14654cc3f437db49791a176d29d3aa8f0
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:54:13 2005 -0700

    Commit #41

commit 83b8bfc7c90441063b251721278b7e8f9c5a201a
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:53:13 2005 -0700

    Commit #40

commit 0b9d55bbcb1a6033be38cb93b03d75e5a78f9c3f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:52:13 2005 -0700

    Commit #39

commit d453237bfb3140a104f4c3946b562e8b8e9cda13
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:51:13 2005 -0700

    Commit #38

commit 63c4e0264b89e227660dc2fbd7fc8077627ab28e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:50:13 2005 -0700

    Commit #37

commit 5df897dfd4814feea01849f65e8fc3e81d72728f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:49:13 2005 -0700

    Commit #36

commit 5e2d0ff7bcf7c8973b325689dd3604bd01d6b075
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:48:13 2005 -0700

    Commit #35

commit cbf881eb049d21325ff0fba1e98746e36f1d46a8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:47:13 2005 -0700

    Commit #34

commit b8a9eb0e7c8cff2ab2d65d53f5a568dc7b54d5b0
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:46:13 2005 -0700

    Commit #33

commit 20db8c933b4ca134652d077a7a59a12f7653c3a4
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:45:13 2005 -0700

    Commit #32

commit 738136f07b8bf1cff560dc0dbf4a18eee3b1de94
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:44:13 2005 -0700

    Commit #31

commit dd3f1b3396477b30b131d10831090cd58add8a2f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:43:13 2005 -0700

    Commit #30

commit e7bbe70cb14feebd4d4ceada22d700e1bdcb301f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:42:13 2005 -0700

    Commit #29

commit 7c932743e94bd2239c435bf5645dccb051f3c5fe
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:41:13 2005 -0700

    Commit #28

commit c3cca0936c775de13190616bf109b3992732f2e1
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:40:13 2005 -0700

    Commit #27

commit 2eb3c6ccb3b91269a09de0d742aecfd52817f72f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:39:13 2005 -0700

    Commit #26

commit 0f219719c1472626b844e140343f904fa4972bcc
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:38:13 2005 -0700

    Commit #25

commit 03c8ac629a12338cc02e81b17da6d7cb0e1a802b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:37:13 2005 -0700

    Commit #24

commit 99b081ae6f13358b2cff7faad1b3f2a4c347edad
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:36:13 2005 -0700

    Commit #23

commit 7206ff76323748a074c19dacc097d2ed3b96bfb2
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:35:13 2005 -0700

    Commit #22

commit 490ddb36dddfeffa7779829333c151cbbe9e7366
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:34:13 2005 -0700

    Commit #21

commit a73206b2f61cdf7bf21c8138c9900794f0eab9a5
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:33:13 2005 -0700

    Commit #20

commit 01e16b5ab9e14247c98de5452a4be588930371be
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:32:13 2005 -0700

    Commit #19

commit 9c803e03a40e955e599e8ecb9131651832083f57
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:31:13 2005 -0700

    Commit #18

commit 6fc6ec72c6ce78e654a775f4f659411294f1d4e6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:30:13 2005 -0700

    Commit #17

commit b601a967eeee6cb91b552c6e43b4bafdf2b1c7ac
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:29:13 2005 -0700

    Commit #16

commit 1747235a5c3fa673cab96b05b46dd97adb0c00c8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    Commit #15

commit 26bc6342db340ab762645b0b3b83517623b4c675
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:27:13 2005 -0700

    Commit #14

commit b2f646eca1878e3000b6ceabd81b60ce604cb41e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:26:13 2005 -0700

    Commit #13

commit be3e57a8ad8950e367abdb48fe904d3f965e96fa
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:25:13 2005 -0700

    Commit #12

commit 838c59d0f1f2160aa980e1c58db52403effc9dc6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:24:13 2005 -0700

    Commit #11

commit 2d04f66a08825b9bd9631a379768ee94d9e35c94
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:23:13 2005 -0700

    Commit #10

commit 3b4907bf685c7f5694fd51989e990218a5844ee6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:22:13 2005 -0700

    Commit #9

commit e87f17a34ce327a5cef1309626784bc0bcc74743
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:21:13 2005 -0700

    Commit #8

commit b1248b7697c5ba5bd2099f38eee5728f05a07a2c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:20:13 2005 -0700

    Commit #7

commit a69e0e75ae4b3c7d5954f52f3dc1666d7facf114
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:19:13 2005 -0700

    Commit #6

commit d2559a7d1598c17fb8259ed9c923a40f242edbd7
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    Commit #5

commit c45f8a131dd92e17228868c96e1b0b0b07693331
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    Commit #4

commit 758f634f1b1a066097ec1ee3c9a4aedc0bfb3d46
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    Commit #3

commit 2285e440694323e1c325d1838d97abdecada8ade
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    Commit #2

commit b86cdba23d2682dd459133f2efac8ea660f1dd5b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    Commit #1

commit e8d9fe63116478156180f7026f6c181cc60432c5
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    Commit #0
Rebase
commit b1a1c97e94b6388c108e195d28a3e89f00c81698
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:23:13 2005 -0700

    Rebase #65

commit b1a473533f3c7654e6aabe20b868f403cc4542c4
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:22:13 2005 -0700

    Rebase #64

commit b44d0fc2fa543aae48a3e88ca2d4bb69b0808618
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:21:13 2005 -0700

    Rebase #63

commit bdb72969f88d60418acc3c5cb69f94a9254e4069
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:20:13 2005 -0700

    Rebase #62

commit f4846c914d90426d0aa7d9ae8c617e23aeb7aadc
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:19:13 2005 -0700

    Rebase #61

commit 5513d6a596bf3937f715bf4c4fa240dae08c1183
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:18:13 2005 -0700

    Rebase #60

commit c17d7284cf4910e76deb07380fdb38db71d239c7
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:17:13 2005 -0700

    Rebase #59

commit 61c422e7618c96824dffec2cbb0cc7ec1933e48e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:16:13 2005 -0700

    Rebase #58

commit 2d32b535df82e1d77ee22da27287e3a676723ef8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:15:13 2005 -0700

    Rebase #57

commit d8638fd41e1699aa201527ace01d2ba19815aceb
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:14:13 2005 -0700

    Rebase #56

commit 04fe055c82dc9923f2be842c62ddf3325ed7e4c3
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:13:13 2005 -0700

    Rebase #55

commit 8b3228b708d50b5e797bb375d97082ec7afeace4
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:12:13 2005 -0700

    Rebase #54

commit 5f4c3fe8ed7e4d32b60d7abb0e2af50d1343cca0
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:11:13 2005 -0700

    Rebase #53

commit 7f88d5e9d36769f5c9c65bcdd6b74456be65794b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:10:13 2005 -0700

    Rebase #52

commit 54fa0318009bc334ce8aa9a83e559582a15df921
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:09:13 2005 -0700

    Rebase #51

commit 874533e6395fa245e3aad590c5b29b113c993d88
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:08:13 2005 -0700

    Rebase #50

commit dc1211213cf96c29abb9e65856f42adb8ae87f44
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:07:13 2005 -0700

    Rebase #49

commit ecc16305000cbf7e0e28eaefa037380923f54f2b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:06:13 2005 -0700

    Rebase #48

commit 22eb8b0dd79fa78df505878adb615b382c819795
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:05:13 2005 -0700

    Rebase #47

commit e658f744975d593f1d768ae6a252466f3d6f542e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:04:13 2005 -0700

    Rebase #46

commit 927e9cfe3212295919b60727098c2bcba986c37e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:03:13 2005 -0700

    Rebase #45

commit 8c6450200d3f0d8d334e87e0d8a8277a2f791251
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:02:13 2005 -0700

    Rebase #44

commit 63e19d3641a395e0933a71af193c8dab5ddf587a
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:01:13 2005 -0700

    Rebase #43

commit dea9ca7996241bf8d256a6207334ab6cb0a2f16d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 17:00:13 2005 -0700

    Rebase #42

commit 026648f873caf2683546bb4a0bffc8293d8c2a73
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:59:13 2005 -0700

    Rebase #41

commit 614287fbf62149f243db150a29195ddd2552620e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:58:13 2005 -0700

    Rebase #40

commit 796c2f217a5f8738534fbb7febc3879590747fc2
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:57:13 2005 -0700

    Rebase #39

commit 5aaad3995be7c0de7d694ab11b764a400a4df57f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:56:13 2005 -0700

    Rebase #38

commit 313b77b49a4baf7c7fe8055753a71c38bdd38b47
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:55:13 2005 -0700

    Rebase #37

commit a59332167314137eb8af8837e16115c9680e018e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:54:13 2005 -0700

    Rebase #36

commit 0ab0d27b1668006e073534c69e62685f0f9fc4ab
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:53:13 2005 -0700

    Rebase #35

commit 43f966630635e7421592b1564d06becd4329fb7f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:52:13 2005 -0700

    Rebase #34

commit fe710d4f0305ee6cfcc29f08823ccc6a8eb2e78a
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:51:13 2005 -0700

    Rebase #33

commit 58465df8a64cc8cf28c98afc18e920e03dad9ec8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:50:13 2005 -0700

    Rebase #32

commit 559f5ec230a71724d6ea3399c0216e52938cba74
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:49:13 2005 -0700

    Rebase #31

commit 423868ae9fccf8a50212b69677d9fe252065eb3b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:48:13 2005 -0700

    Rebase #30

commit d02b87bdc1b8e96ed634d52ddefb6b7db693b84b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:47:13 2005 -0700

    Rebase #29

commit 04e55758ac35dc63f899b6c3d526b2b802cee7c9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:46:13 2005 -0700

    Rebase #28

commit be5fbd2f45796936f2cfa86bb4dffe5b95013f0e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:45:13 2005 -0700

    Rebase #27

commit 213212c4ff3f0e681db0e061ed02dcc2e3902374
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:44:13 2005 -0700

    Rebase #26

commit 61a890331f2ecf786d50fa8248d4f86345569421
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:43:13 2005 -0700

    Rebase #25

commit a1bfffeeeb67da7d9433dd5d4dcc2876badda7de
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:42:13 2005 -0700

    Rebase #24

commit ade5cf07bd9f8a623762be2b83d5200fd4c23e78
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:41:13 2005 -0700

    Rebase #23

commit 541aba44d5797d319874b1d242c491aecd70072e
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:40:13 2005 -0700

    Rebase #22

commit 8ef186d480959ba1c1950497155e9db2bb5cf262
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:39:13 2005 -0700

    Rebase #21

commit dd1cc8a79dd40f7d83223b2b2293062a17ed60ee
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:38:13 2005 -0700

    Rebase #20

commit 60c8d8288c55de0f0dadd7f570f69a5bd9023e54
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:37:13 2005 -0700

    Rebase #19

commit 2720bed4e6e3a6011714b76356527f5626a8b7bf
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:36:13 2005 -0700

    Rebase #18

commit e4946f6736764ebcc7b4392c98b1916f37a8151c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:35:13 2005 -0700

    Rebase #17

commit f2a50e2577f679dd6edf5afa77fb0d331cf0e487
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:34:13 2005 -0700

    Rebase #16

commit ba62d05c67970ca150478a6e204c07876eb45310
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:33:13 2005 -0700

    Rebase #15

commit 16bbc537388506c6aa3568aec7a1c295ff664ad8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:32:13 2005 -0700

    Rebase #14

commit 8ae96d45eca9358820adedc310a2bc6ff331a3e7
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:31:13 2005 -0700

    Rebase #13

commit 2557a8c044e16526b8261947e17623841a0d5a91
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:30:13 2005 -0700

    Rebase #12

commit 3f1275e3115a421a76f0ccbd5dea35b7cf227ce9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:29:13 2005 -0700

    Rebase #11

commit 6d31feb4517418400c8f76a834f7cff206a2b1ab
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:28:13 2005 -0700

    Rebase #10

commit 054728ce53143ed538a80cc1db2f91642848d9d8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:27:13 2005 -0700

    Rebase #9

commit dbee1ce0dbeb64756fba483e99628287182a0be1
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:26:13 2005 -0700

    Rebase #8

commit d174cc1075a864f5db77014609f7f9af0240ed0c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:25:13 2005 -0700

    Rebase #7

commit 18b56d78fb5f32acd1d2a027c139cb14df278e1c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:24:13 2005 -0700

    Rebase #6

commit 754de5100e6921cb300704183c76e1c65e301beb
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:23:13 2005 -0700

    Rebase #5

commit 9fe752390a117faf8d6f239358fa821b464ff14d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:22:13 2005 -0700

    Rebase #4

commit 3e9bfb9468271e1707c357a5018af569c2a676d4
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:21:13 2005 -0700

    Rebase #3

commit d15adbaa5fdd6b03140db45c714342b2023152fa
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:20:13 2005 -0700

    Rebase #2

commit 82c2bc152fd9f785c269098549562d289347b2f8
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 16:19:13 2005 -0700

    Rebase #1

commit e8d9fe63116478156180f7026f6c181cc60432c5
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    Commit #0
ok 1 - setup

expecting success of 5400.2 'pack the source repository': 
	git repack -a -d &&
	git prune

ok 2 - pack the source repository

expecting success of 5400.3 'pack the destination repository': 
	(
		cd victim &&
		git repack -a -d &&
		git prune
	)

ok 3 - pack the destination repository

expecting success of 5400.4 'refuse pushing rewound head without --force': 
	pushed_head=$(git rev-parse --verify main) &&
	victim_orig=$(cd victim && git rev-parse --verify main) &&
	test_must_fail git send-pack ./victim main &&
	victim_head=$(cd victim && git rev-parse --verify main) &&
	test "$victim_head" = "$victim_orig" &&
	# this should update
	git send-pack --force ./victim main &&
	victim_head=$(cd victim && git rev-parse --verify main) &&
	test "$victim_head" = "$pushed_head"

To ./victim
 ! [rejected]        main -> main (non-fast-forward)
remote: warning: updating the current branch        
To ./victim
 + fbc8506...b1a1c97 main -> main (forced update)
ok 4 - refuse pushing rewound head without --force

expecting success of 5400.5 'push can be used to delete a ref': 
	( cd victim && git branch extra main ) &&
	git send-pack ./victim :extra main &&
	( cd victim &&
	  test_must_fail git rev-parse --verify extra )

To ./victim
 - [deleted]         extra
fatal: Needed a single revision
ok 5 - push can be used to delete a ref

expecting success of 5400.6 'refuse deleting push with denyDeletes': 
	(
		cd victim &&
		test_might_fail git branch -D extra &&
		git config receive.denyDeletes true &&
		git branch extra main
	) &&
	test_must_fail git send-pack ./victim :extra main

error: branch 'extra' not found.
remote: error: denying ref deletion for refs/heads/extra        
To ./victim
 ! [remote rejected] extra (deletion prohibited)
ok 6 - refuse deleting push with denyDeletes

expecting success of 5400.7 'cannot override denyDeletes with git -c send-pack': 
	(
		cd victim &&
		test_might_fail git branch -D extra &&
		git config receive.denyDeletes true &&
		git branch extra main
	) &&
	test_must_fail git -c receive.denyDeletes=false \
					send-pack ./victim :extra main

Deleted branch extra (was b1a1c97).
remote: error: denying ref deletion for refs/heads/extra        
To ./victim
 ! [remote rejected] extra (deletion prohibited)
ok 7 - cannot override denyDeletes with git -c send-pack

expecting success of 5400.8 'override denyDeletes with git -c receive-pack': 
	(
		cd victim &&
		test_might_fail git branch -D extra &&
		git config receive.denyDeletes true &&
		git branch extra main
	) &&
	git send-pack \
		--receive-pack="git -c receive.denyDeletes=false receive-pack" \
		./victim :extra main

Deleted branch extra (was b1a1c97).
To ./victim
 - [deleted]         extra
ok 8 - override denyDeletes with git -c receive-pack

expecting success of 5400.9 'denyNonFastforwards trumps --force': 
	(
		cd victim &&
		test_might_fail git branch -D extra &&
		git config receive.denyNonFastforwards true
	) &&
	victim_orig=$(cd victim && git rev-parse --verify main) &&
	test_must_fail git send-pack --force ./victim main^:main &&
	victim_head=$(cd victim && git rev-parse --verify main) &&
	test "$victim_orig" = "$victim_head"

error: branch 'extra' not found.
remote: warning: updating the current branch        
remote: error: denying non-fast-forward refs/heads/main (you should pull first)        
To ./victim
 ! [remote rejected] main^ -> main (non-fast-forward)
ok 9 - denyNonFastforwards trumps --force

expecting success of 5400.10 'send-pack --all sends all branches': 
	# make sure we have at least 2 branches with different
	# values, just to be thorough
	git branch other-branch HEAD^ &&

	git init --bare all.git &&
	git send-pack --all all.git &&
	git for-each-ref refs/heads >expect &&
	git -C all.git for-each-ref refs/heads >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/all.git/
To all.git
 * [new branch]      main -> main
 * [new branch]      other-branch -> other-branch
ok 10 - send-pack --all sends all branches

expecting success of 5400.11 'push --all excludes remote-tracking hierarchy': 
	mkdir parent &&
	(
		cd parent &&
		git init && : >file && git add file && git commit -m add
	) &&
	git clone parent child &&
	(
		cd child && git push --all
	) &&
	(
		cd parent &&
		test -z "$(git for-each-ref refs/remotes/origin)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/parent/.git/
[main (root-commit) 9addffa] add
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Cloning into 'child'...
done.
Everything up-to-date
ok 11 - push --all excludes remote-tracking hierarchy

expecting success of 5400.12 'receive-pack runs auto-gc in remote repo': 
	rm -rf parent child &&
	git init parent &&
	(
		# Setup a repo with 2 packs
		cd parent &&
		echo "Some text" >file.txt &&
		git add . &&
		git commit -m "Initial commit" &&
		git repack -adl &&
		echo "Some more text" >>file.txt &&
		git commit -a -m "Second commit" &&
		git repack
	) &&
	cp -R parent child &&
	(
		# Set the child to auto-pack if more than one pack exists
		cd child &&
		git config gc.autopacklimit 1 &&
		git config gc.autodetach false &&
		git branch test_auto_gc &&
		# And create a file that follows the temporary object naming
		# convention for the auto-gc to remove
		: >.git/objects/tmp_test_object &&
		test-tool chmtime =-1209601 .git/objects/tmp_test_object
	) &&
	(
		cd parent &&
		echo "Even more text" >>file.txt &&
		git commit -a -m "Third commit" &&
		git send-pack ../child HEAD:refs/heads/test_auto_gc
	) &&
	test ! -e child/.git/objects/tmp_test_object

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/parent/.git/
[main (root-commit) bdeab67] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
[main 5404fd0] Second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 1f665f1] Third commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To ../child
   5404fd0..1f665f1  HEAD -> test_auto_gc
ok 12 - receive-pack runs auto-gc in remote repo

expecting success of 5400.13 'pushing explicit refspecs respects forcing': 
	rewound_push_setup &&
	parent_orig=$(cd parent && git rev-parse --verify main) &&
	(
		cd child &&
		test_must_fail git send-pack ../parent \
			refs/heads/main:refs/heads/main
	) &&
	parent_head=$(cd parent && git rev-parse --verify main) &&
	test "$parent_orig" = "$parent_head" &&
	(
		cd child &&
		git send-pack ../parent \
			+refs/heads/main:refs/heads/main
	) &&
	parent_head=$(cd parent && git rev-parse --verify main) &&
	child_head=$(cd child && git rev-parse --verify main) &&
	test "$parent_head" = "$child_head"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/parent/.git/
[main (root-commit) 14eeca9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 43ab524] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'child'...
done.
HEAD is now at 14eeca9 one
To ../parent
 ! [rejected]        main -> main (non-fast-forward)
remote: warning: updating the current branch        
To ../parent
 + 43ab524...14eeca9 main -> main (forced update)
ok 13 - pushing explicit refspecs respects forcing

expecting success of 5400.14 'pushing wildcard refspecs respects forcing': 
	rewound_push_setup &&
	parent_orig=$(cd parent && git rev-parse --verify main) &&
	(
		cd child &&
		test_must_fail git send-pack ../parent \
			"refs/heads/*:refs/heads/*"
	) &&
	parent_head=$(cd parent && git rev-parse --verify main) &&
	test "$parent_orig" = "$parent_head" &&
	(
		cd child &&
		git send-pack ../parent \
			"+refs/heads/*:refs/heads/*"
	) &&
	parent_head=$(cd parent && git rev-parse --verify main) &&
	child_head=$(cd child && git rev-parse --verify main) &&
	test "$parent_head" = "$child_head"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/parent/.git/
[main (root-commit) 14eeca9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 43ab524] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'child'...
done.
HEAD is now at 14eeca9 one
To ../parent
 ! [rejected]        main -> main (non-fast-forward)
remote: warning: updating the current branch        
To ../parent
 + 43ab524...14eeca9 main -> main (forced update)
ok 14 - pushing wildcard refspecs respects forcing

expecting success of 5400.15 'deny pushing to delete current branch': 
	rewound_push_setup &&
	(
		cd child &&
		test_must_fail git send-pack ../parent :refs/heads/main 2>errs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/parent/.git/
[main (root-commit) 14eeca9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 43ab524] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'child'...
done.
HEAD is now at 14eeca9 one
ok 15 - deny pushing to delete current branch

expecting success of 5400.16 'receive-pack de-dupes .have lines': 
	git init shared &&
	git -C shared commit --allow-empty -m both &&
	git clone -s shared fork &&
	(
		cd shared &&
		git checkout -b only-shared &&
		git commit --allow-empty -m only-shared &&
		git update-ref refs/heads/foo HEAD
	) &&

	# Notable things in this expectation:
	#  - local refs are not de-duped
	#  - .have does not duplicate locals
	#  - .have does not duplicate itself
	local=$(git -C fork rev-parse HEAD) &&
	shared=$(git -C shared rev-parse only-shared) &&
	cat >expect <<-EOF &&
	$local refs/heads/main
	$local refs/remotes/origin/HEAD
	$local refs/remotes/origin/main
	$shared .have
	EOF

	GIT_TRACE_PACKET=$(pwd)/trace GIT_TEST_PROTOCOL_VERSION=0 \
	git push \
		--receive-pack="unset GIT_TRACE_PACKET; git-receive-pack" \
		fork HEAD:foo &&
	extract_ref_advertisement <trace >refs &&
	test_cmp expect refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5400-send-pack/shared/.git/
[main (root-commit) 5285e17] both
 Author: A U Thor <author@example.com>
Cloning into 'fork'...
done.
Switched to a new branch 'only-shared'
[only-shared 53d9066] only-shared
 Author: A U Thor <author@example.com>
To fork
 * [new branch]      HEAD -> foo
ok 16 - receive-pack de-dupes .have lines

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5402-post-merge-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5402-post-merge-hook/.git/
expecting success of 5402.1 'setup': 
	echo Data for commit0. >a &&
	git update-index --add a &&
	tree0=$(git write-tree) &&
	commit0=$(echo setup | git commit-tree $tree0) &&
	echo Changed data for commit1. >a &&
	git update-index a &&
	tree1=$(git write-tree) &&
	commit1=$(echo modify | git commit-tree $tree1 -p $commit0) &&
	git update-ref refs/heads/main $commit0 &&
	git clone ./. clone1 &&
	GIT_DIR=clone1/.git git update-index --add a &&
	git clone ./. clone2 &&
	GIT_DIR=clone2/.git git update-index --add a

Cloning into 'clone1'...
done.
Cloning into 'clone2'...
done.
ok 1 - setup

expecting success of 5402.2 'setup clone hooks': 
	test_when_finished "rm -f hook" &&
	cat >hook <<-\EOF &&
	echo $@ >>$GIT_DIR/post-merge.args
	EOF

	test_hook --setup -C clone1 post-merge <hook &&
	test_hook --setup -C clone2 post-merge <hook

ok 2 - setup clone hooks

expecting success of 5402.3 'post-merge does not run for up-to-date ': 
	GIT_DIR=clone1/.git git merge $commit0 &&
	! test -f clone1/.git/post-merge.args

Already up to date.
ok 3 - post-merge does not run for up-to-date 

expecting success of 5402.4 'post-merge runs as expected ': 
	GIT_DIR=clone1/.git git merge $commit1 &&
	test -e clone1/.git/post-merge.args

Updating e541488..8833ab1
Fast-forward
 a | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - post-merge runs as expected 

expecting success of 5402.5 'post-merge from normal merge receives the right argument ': 
	grep 0 clone1/.git/post-merge.args

0
ok 5 - post-merge from normal merge receives the right argument 

expecting success of 5402.6 'post-merge from squash merge runs as expected ': 
	GIT_DIR=clone2/.git git merge --squash $commit1 &&
	test -e clone2/.git/post-merge.args

Updating e541488..8833ab1
Fast-forward
Squash commit -- not updating HEAD
 a | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - post-merge from squash merge runs as expected 

expecting success of 5402.7 'post-merge from squash merge receives the right argument ': 
	grep 1 clone2/.git/post-merge.args

1
ok 7 - post-merge from squash merge receives the right argument 

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5327-multi-pack-bitmaps-rev.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.git/
expecting success of 5327.1 'setup bitmap config': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable false
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.git/
ok 1 - setup bitmap config

expecting success of 5327.2 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2283 /       2283
---------------------------------------------------------------------

Switched to a new branch 'other'
87e15289879c5c34553169b2be5c9d6b111519b2
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4747 /       4747
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 90a1514..63e663a
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 6a83e25..58d166b
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was f47c2b6).
Deleted branch merge-right (was ba9a821).
Deleted branch octo-other (was 63e663a).
Deleted branch octo-second (was 58d166b).
58d166b12a4ce065824c4a21dd38aef9f2d94667
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26599 /      26599
---------------------------------------------------------------------

Switched to branch 'other'
63e663a9348fa8f46b3f8835cb82274158356e6a
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26765 /      26765
---------------------------------------------------------------------

Switched to branch 'second'
ok 2 - setup repo with moderate-sized history

expecting success of 5327.3 'create single-pack midx with bitmaps': 
		git repack -ad &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 3 - create single-pack midx with bitmaps

expecting success of 5327.4 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (106 entries loaded)
Found bitmap for '4b27f21bf7560051516fe49b50eb4063d0ea6f90'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
{"event":"data","sid":"20221228T074835.170713Z-Hc64317c2-P0000074e","thread":"main","time":"2022-12-28T07:48:35.183588Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.016282,"t_rel":0.016282,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 4 - reverse index exists (rev)

expecting success of 5327.5 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries loaded)
Found bitmap for '4b27f21bf7560051516fe49b50eb4063d0ea6f90'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 5 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.6 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 6 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.7 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 7 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.8 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 8 - counting commits with limit (full bitmap, second)

expecting success of 5327.9 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 9 - counting non-linear history (full bitmap, second)

expecting success of 5327.10 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 10 - counting commits with limiting (full bitmap, second)

expecting success of 5327.11 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 11 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.12 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 12 - enumerate commits (full bitmap, second)

expecting success of 5327.13 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 13 - enumerate --objects (full bitmap, second)

expecting success of 5327.14 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 14 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.15 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 15 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.16 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 16 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.17 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 17 - counting commits with limit (full bitmap, other)

expecting success of 5327.18 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 18 - counting non-linear history (full bitmap, other)

expecting success of 5327.19 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 19 - counting commits with limiting (full bitmap, other)

expecting success of 5327.20 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 20 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.21 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 21 - enumerate commits (full bitmap, other)

expecting success of 5327.22 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 22 - enumerate --objects (full bitmap, other)

expecting success of 5327.23 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 23 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.24 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 24 - clone from bitmapped repository

expecting success of 5327.25 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 25 - partial clone from bitmapped repository

expecting success of 5327.26 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
4b27f21bf7560051516fe49b50eb4063d0ea6f90
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58718 /      58718
---------------------------------------------------------------------

ok 26 - setup further non-bitmapped commits

expecting success of 5327.27 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 27 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.28 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 28 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.29 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 29 - counting commits with limit (partial bitmap, second)

expecting success of 5327.30 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 30 - counting non-linear history (partial bitmap, second)

expecting success of 5327.31 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 31 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.32 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 32 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.33 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 33 - enumerate commits (partial bitmap, second)

expecting success of 5327.34 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 34 - enumerate --objects (partial bitmap, second)

expecting success of 5327.35 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 35 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.36 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 36 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.37 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 37 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.38 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 38 - counting commits with limit (partial bitmap, other)

expecting success of 5327.39 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 39 - counting non-linear history (partial bitmap, other)

expecting success of 5327.40 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 40 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.41 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 41 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.42 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 42 - enumerate commits (partial bitmap, other)

expecting success of 5327.43 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 43 - enumerate --objects (partial bitmap, other)

expecting success of 5327.44 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 44 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.45 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   4b27f21..8ca4c84  second     -> second
ok 45 - fetch (partial bitmap)

expecting success of 5327.46 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second 170f281] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 46 - enumerating progress counts pack-reused objects

expecting success of 5327.47 'create new additional packs': 
		for i in $(test_seq 1 16)
		do
			test_commit "$i" &&
			git repack -d || return 1
		done &&

		git checkout -b other2 HEAD~8 &&
		for i in $(test_seq 1 8)
		do
			test_commit "side-$i" &&
			git repack -d || return 1
		done &&
		git checkout second
	
[second 3a76cec] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[second 694ecd4] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[second ffe77aa] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[second 50af4e8] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[second 9c1f241] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[second b53317f] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[second cc19a36] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[second d484d57] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[second 8a35e54] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[second 4563a0f] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[second 0eb4f5f] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[second 620cfb0] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[second 7580d0b] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[second 622a67a] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[second 5b39d34] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[second 199e4bb] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
Switched to a new branch 'other2'
[other2 beb075d] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 bb5edb3] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 1106e57] side-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 6805bc2] side-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 d7d949c] side-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 10e7b33] side-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 d9f1819] side-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 a9c1793] side-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'second'
ok 47 - create new additional packs

expecting success of 5327.48 'create multi-pack midx with bitmaps': 
		git multi-pack-index write --bitmap &&

		ls $objdir/pack/pack-*.pack >packs &&
		test_line_count = 25 packs &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 48 - create multi-pack midx with bitmaps

expecting success of 5327.49 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries loaded)
Found bitmap for '199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42'. 768 bits / 82224a27 checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
{"event":"data","sid":"20221228T074835.170713Z-Hc64317c2-P0000074e","thread":"main","time":"2022-12-28T07:48:35.183588Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.016282,"t_rel":0.016282,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074849.381333Z-Hc64317c2-P00000eb9","thread":"main","time":"2022-12-28T07:48:49.395494Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.017058,"t_rel":0.017058,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 49 - reverse index exists (rev)

expecting success of 5327.50 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (107 entries loaded)
Found bitmap for '199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42'. 768 bits / 82224a27 checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
ok 50 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.51 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 51 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.52 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 52 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.53 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 53 - counting commits with limit (full bitmap, second)

expecting success of 5327.54 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 54 - counting non-linear history (full bitmap, second)

expecting success of 5327.55 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 55 - counting commits with limiting (full bitmap, second)

expecting success of 5327.56 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 56 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.57 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 57 - enumerate commits (full bitmap, second)

expecting success of 5327.58 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 58 - enumerate --objects (full bitmap, second)

expecting success of 5327.59 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 59 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.60 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 60 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.61 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 61 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.62 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 62 - counting commits with limit (full bitmap, other)

expecting success of 5327.63 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 63 - counting non-linear history (full bitmap, other)

expecting success of 5327.64 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 64 - counting commits with limiting (full bitmap, other)

expecting success of 5327.65 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 65 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.66 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 66 - enumerate commits (full bitmap, other)

expecting success of 5327.67 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 67 - enumerate --objects (full bitmap, other)

expecting success of 5327.68 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 68 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.69 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 69 - clone from bitmapped repository

expecting success of 5327.70 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 70 - partial clone from bitmapped repository

expecting success of 5327.71 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            135
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       8628 /       8628
---------------------------------------------------------------------

ok 71 - setup further non-bitmapped commits

expecting success of 5327.72 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 72 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.73 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 73 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.74 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 74 - counting commits with limit (partial bitmap, second)

expecting success of 5327.75 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 75 - counting non-linear history (partial bitmap, second)

expecting success of 5327.76 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 76 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.77 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 77 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.78 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 78 - enumerate commits (partial bitmap, second)

expecting success of 5327.79 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 79 - enumerate --objects (partial bitmap, second)

expecting success of 5327.80 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 80 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.81 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 81 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.82 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 82 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.83 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 83 - counting commits with limit (partial bitmap, other)

expecting success of 5327.84 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 84 - counting non-linear history (partial bitmap, other)

expecting success of 5327.85 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 85 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.86 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 86 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.87 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 87 - enumerate commits (partial bitmap, other)

expecting success of 5327.88 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 88 - enumerate --objects (partial bitmap, other)

expecting success of 5327.89 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 89 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.90 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   199e4bb..2f32443  second     -> second
ok 90 - fetch (partial bitmap)

expecting success of 5327.91 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 742, done.
Total 742 (delta 0), reused 0 (delta 0), pack-reused 742
[second e44e978] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 743, done.
Total 743 (delta 0), reused 0 (delta 0), pack-reused 742
ok 91 - enumerating progress counts pack-reused objects

expecting success of 5327.92 '--no-bitmap is respected when bitmaps exist': 
		git multi-pack-index write --bitmap &&

		test_commit respect--no-bitmap &&
		git repack -d &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		git multi-pack-index write --no-bitmap &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
		test_path_is_missing $midx-$(midx_checksum $objdir).rev
	
[second 39f81e4] respect--no-bitmap
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 respect--no-bitmap.t
ok 92 - --no-bitmap is respected when bitmaps exist

expecting success of 5327.93 'setup midx with base from later pack': 
		# Write a and b so that "a" is a delta on top of base "b", since Git
		# prefers to delete contents out of a base rather than add to a shorter
		# object.
		test_seq 1 128 >a &&
		test_seq 1 130 >b &&

		git add a b &&
		git commit -m "initial commit" &&

		a=$(git rev-parse HEAD:a) &&
		b=$(git rev-parse HEAD:b) &&

		# In the first pack, "a" is stored as a delta to "b".
		p1=$(git pack-objects .git/objects/pack/pack <<-EOF
		$a
		$b
		EOF
		) &&

		# In the second pack, "a" is missing, and "b" is not a delta nor base to
		# any other object.
		p2=$(git pack-objects .git/objects/pack/pack <<-EOF
		$b
		$(git rev-parse HEAD)
		$(git rev-parse HEAD^{tree})
		EOF
		) &&

		git prune-packed &&
		# Use the second pack as the preferred source, so that "b" occurs
		# earlier in the MIDX object order, rendering "a" unusable for pack
		# reuse.
		git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&

		have_delta $a $b &&
		test $(midx_pack_source $a) != $(midx_pack_source $b)
	
[second 800d70e] initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 258 insertions(+)
 create mode 100644 a
 create mode 100644 b
ok 93 - setup midx with base from later pack

expecting success of 5327.94 'counting commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 94 - counting commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.95 'counting partial commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 95 - counting partial commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.96 'counting commits with limit (full bitmap with backwards delta, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 96 - counting commits with limit (full bitmap with backwards delta, second)

expecting success of 5327.97 'counting non-linear history (full bitmap with backwards delta, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 97 - counting non-linear history (full bitmap with backwards delta, second)

expecting success of 5327.98 'counting commits with limiting (full bitmap with backwards delta, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 98 - counting commits with limiting (full bitmap with backwards delta, second)

expecting success of 5327.99 'counting objects via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 99 - counting objects via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.100 'enumerate commits (full bitmap with backwards delta, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 100 - enumerate commits (full bitmap with backwards delta, second)

expecting success of 5327.101 'enumerate --objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 5741, line 141
ok 101 - enumerate --objects (full bitmap with backwards delta, second)

expecting success of 5327.102 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 102 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)

expecting success of 5327.103 'counting commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 103 - counting commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.104 'counting partial commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 104 - counting partial commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.105 'counting commits with limit (full bitmap with backwards delta, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 105 - counting commits with limit (full bitmap with backwards delta, other)

expecting success of 5327.106 'counting non-linear history (full bitmap with backwards delta, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 106 - counting non-linear history (full bitmap with backwards delta, other)

expecting success of 5327.107 'counting commits with limiting (full bitmap with backwards delta, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 107 - counting commits with limiting (full bitmap with backwards delta, other)

expecting success of 5327.108 'counting objects via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 108 - counting objects via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.109 'enumerate commits (full bitmap with backwards delta, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 109 - enumerate commits (full bitmap with backwards delta, other)

expecting success of 5327.110 'enumerate --objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 110 - enumerate --objects (full bitmap with backwards delta, other)

expecting success of 5327.111 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 111 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)

expecting success of 5327.112 'clone with bitmaps enabled': 
		git clone --no-local --bare . clone-reverse-delta.git &&
		test_when_finished "rm -fr clone-reverse-delta.git" &&

		git rev-parse HEAD >expect &&
		git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone-reverse-delta.git'...
ok 112 - clone with bitmaps enabled

expecting success of 5327.113 'changing the preferred pack does not corrupt bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit A &&
			test_commit B &&

			git rev-list --objects --no-object-names HEAD^ >A.objects &&
			git rev-list --objects --no-object-names HEAD^.. >B.objects &&

			A=$(git pack-objects $objdir/pack/pack <A.objects) &&
			B=$(git pack-objects $objdir/pack/pack <B.objects) &&

			cat >indexes <<-EOF &&
			pack-$A.idx
			pack-$B.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$A.pack <indexes &&
			git rev-list --test-bitmap A &&

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$B.pack <indexes &&
			git rev-list --test-bitmap A
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/repo/.git/
[master (root-commit) 392b20c] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master a4e158a] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Bitmap v1 test (2 entries loaded)
Found bitmap for '392b20c46362b6de2a5e9c7f30dbcf5c1a8278ba'. 64 bits / 11030517 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
Bitmap v1 test (2 entries loaded)
Found bitmap for '392b20c46362b6de2a5e9c7f30dbcf5c1a8278ba'. 64 bits / f31c9bc6 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
ok 113 - changing the preferred pack does not corrupt bitmaps

expecting success of 5327.114 'setup partial bitmaps': 
		test_commit packed &&
		git repack &&
		test_commit loose &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
[second a0f9530] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[second eb7dd10] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 114 - setup partial bitmaps

expecting success of 5327.115 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries loaded)
Found bitmap for 'a0f95302e15db7fcc4b1078cca104b61ddf091e3'. 768 bits / e99a0c7c checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
{"event":"data","sid":"20221228T074835.170713Z-Hc64317c2-P0000074e","thread":"main","time":"2022-12-28T07:48:35.183588Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.016282,"t_rel":0.016282,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074849.381333Z-Hc64317c2-P00000eb9","thread":"main","time":"2022-12-28T07:48:49.395494Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.017058,"t_rel":0.017058,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074905.761054Z-Hc64317c2-P00001571","thread":"main","time":"2022-12-28T07:49:05.775419Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.017406,"t_rel":0.017406,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 115 - reverse index exists (rev)

expecting success of 5327.116 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD~
	
Bitmap v1 test (107 entries loaded)
Found bitmap for 'a0f95302e15db7fcc4b1078cca104b61ddf091e3'. 768 bits / e99a0c7c checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
ok 116 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.117 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 117 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.118 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 118 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.119 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 119 - counting commits with limit (full bitmap, second)

expecting success of 5327.120 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 120 - counting non-linear history (full bitmap, second)

expecting success of 5327.121 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 121 - counting commits with limiting (full bitmap, second)

expecting success of 5327.122 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 122 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.123 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 123 - enumerate commits (full bitmap, second)

expecting success of 5327.124 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 124 - enumerate --objects (full bitmap, second)

expecting success of 5327.125 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 125 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.126 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 126 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.127 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 127 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.128 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 128 - counting commits with limit (full bitmap, other)

expecting success of 5327.129 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 129 - counting non-linear history (full bitmap, other)

expecting success of 5327.130 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 130 - counting commits with limiting (full bitmap, other)

expecting success of 5327.131 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 131 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.132 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 132 - enumerate commits (full bitmap, other)

expecting success of 5327.133 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 133 - enumerate --objects (full bitmap, other)

expecting success of 5327.134 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 134 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.135 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 135 - clone from bitmapped repository

expecting success of 5327.136 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 136 - partial clone from bitmapped repository

expecting success of 5327.137 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
eb7dd10cacf916c0fbe0aa62deed5ff900c6845c
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            140
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         12
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       5261 /       5261
---------------------------------------------------------------------

ok 137 - setup further non-bitmapped commits

expecting success of 5327.138 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 138 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.139 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 139 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.140 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 140 - counting commits with limit (partial bitmap, second)

expecting success of 5327.141 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 141 - counting non-linear history (partial bitmap, second)

expecting success of 5327.142 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 142 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.143 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 143 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.144 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 144 - enumerate commits (partial bitmap, second)

expecting success of 5327.145 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 145 - enumerate --objects (partial bitmap, second)

expecting success of 5327.146 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 146 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.147 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 147 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.148 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 148 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.149 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 149 - counting commits with limit (partial bitmap, other)

expecting success of 5327.150 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 150 - counting non-linear history (partial bitmap, other)

expecting success of 5327.151 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 151 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.152 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 152 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.153 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 153 - enumerate commits (partial bitmap, other)

expecting success of 5327.154 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 154 - enumerate --objects (partial bitmap, other)

expecting success of 5327.155 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 155 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.156 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   eb7dd10..5374668  second     -> second
ok 156 - fetch (partial bitmap)

expecting success of 5327.157 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 766, done.
Total 766 (delta 0), reused 0 (delta 0), pack-reused 766
[second 07d40ce] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 767, done.
Total 767 (delta 0), reused 0 (delta 0), pack-reused 766
ok 157 - enumerating progress counts pack-reused objects

expecting success of 5327.158 'setup bitmap config': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable true
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.git/
ok 158 - setup bitmap config

expecting success of 5327.159 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2285 /       2285
---------------------------------------------------------------------

Switched to a new branch 'other'
0977809a2f6f01041c676e76708c1fce2ec15a77
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4747 /       4747
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 23793a5..6dbf429
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 89c9df7..fe580a0
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was fbc62e6).
Deleted branch merge-right (was c5b6896).
Deleted branch octo-other (was 6dbf429).
Deleted branch octo-second (was fe580a0).
fe580a073cb0a105ec2998652ed9d1674ebb849d
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26598 /      26598
---------------------------------------------------------------------

Switched to branch 'other'
6dbf4290e5b18e89ba78cd6a7115518279638769
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26775 /      26775
---------------------------------------------------------------------

Switched to branch 'second'
ok 159 - setup repo with moderate-sized history

expecting success of 5327.160 'create single-pack midx with bitmaps': 
		git repack -ad &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 160 - create single-pack midx with bitmaps

expecting success of 5327.161 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (106 entries)
Found bitmap for 'db2803b34efd93d3448bc6cf028a889473ba3735'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
{"event":"data","sid":"20221228T074917.193914Z-Hc64317c2-P000019f8","thread":"main","time":"2022-12-28T07:49:17.208838Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.018187,"t_rel":0.018187,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 161 - reverse index exists (rev)

expecting success of 5327.162 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries)
Found bitmap for 'db2803b34efd93d3448bc6cf028a889473ba3735'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 162 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.163 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 163 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.164 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 164 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.165 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 165 - counting commits with limit (full bitmap, second)

expecting success of 5327.166 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 166 - counting non-linear history (full bitmap, second)

expecting success of 5327.167 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 167 - counting commits with limiting (full bitmap, second)

expecting success of 5327.168 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 168 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.169 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 169 - enumerate commits (full bitmap, second)

expecting success of 5327.170 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4102, line 101
ok 170 - enumerate --objects (full bitmap, second)

expecting success of 5327.171 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 171 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.172 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 172 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.173 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 173 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.174 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 174 - counting commits with limit (full bitmap, other)

expecting success of 5327.175 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 175 - counting non-linear history (full bitmap, other)

expecting success of 5327.176 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 176 - counting commits with limiting (full bitmap, other)

expecting success of 5327.177 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 177 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.178 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 178 - enumerate commits (full bitmap, other)

expecting success of 5327.179 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 179 - enumerate --objects (full bitmap, other)

expecting success of 5327.180 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 180 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.181 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 181 - clone from bitmapped repository

expecting success of 5327.182 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 182 - partial clone from bitmapped repository

expecting success of 5327.183 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
db2803b34efd93d3448bc6cf028a889473ba3735
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58728 /      58728
---------------------------------------------------------------------

ok 183 - setup further non-bitmapped commits

expecting success of 5327.184 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 184 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.185 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 185 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.186 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 186 - counting commits with limit (partial bitmap, second)

expecting success of 5327.187 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 187 - counting non-linear history (partial bitmap, second)

expecting success of 5327.188 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 188 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.189 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 189 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.190 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 190 - enumerate commits (partial bitmap, second)

expecting success of 5327.191 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 191 - enumerate --objects (partial bitmap, second)

expecting success of 5327.192 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 192 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.193 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 193 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.194 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 194 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.195 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 195 - counting commits with limit (partial bitmap, other)

expecting success of 5327.196 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 196 - counting non-linear history (partial bitmap, other)

expecting success of 5327.197 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 197 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.198 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 198 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.199 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 199 - enumerate commits (partial bitmap, other)

expecting success of 5327.200 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 200 - enumerate --objects (partial bitmap, other)

expecting success of 5327.201 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 201 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.202 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   db2803b..21b05a3  second     -> second
ok 202 - fetch (partial bitmap)

expecting success of 5327.203 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second 9d9466a] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 203 - enumerating progress counts pack-reused objects

expecting success of 5327.204 'create new additional packs': 
		for i in $(test_seq 1 16)
		do
			test_commit "$i" &&
			git repack -d || return 1
		done &&

		git checkout -b other2 HEAD~8 &&
		for i in $(test_seq 1 8)
		do
			test_commit "side-$i" &&
			git repack -d || return 1
		done &&
		git checkout second
	
[second c508966] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[second 7852397] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[second e8764eb] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[second e7b65f1] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[second ff287bb] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[second 734ba24] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[second 7e37ce6] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[second 22aa444] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[second 82c3a80] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[second 8a6fa0d] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[second 1508049] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[second aec6ca5] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[second 32a5e04] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[second a28bee6] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[second 12a188f] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[second 576966f] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
Switched to a new branch 'other2'
[other2 b3d62c0] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 e8f946b] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 56d7f89] side-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 dbe4b2d] side-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 9286b7d] side-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 75e0202] side-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 b26808f] side-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 b145b7a] side-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'second'
ok 204 - create new additional packs

expecting success of 5327.205 'create multi-pack midx with bitmaps': 
		git multi-pack-index write --bitmap &&

		ls $objdir/pack/pack-*.pack >packs &&
		test_line_count = 25 packs &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 205 - create multi-pack midx with bitmaps

expecting success of 5327.206 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries)
Found bitmap for '576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7'. 768 bits / 236971ab checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
{"event":"data","sid":"20221228T074917.193914Z-Hc64317c2-P000019f8","thread":"main","time":"2022-12-28T07:49:17.208838Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.018187,"t_rel":0.018187,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074933.449131Z-Hc64317c2-P00002176","thread":"main","time":"2022-12-28T07:49:33.466373Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.020328,"t_rel":0.020328,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 206 - reverse index exists (rev)

expecting success of 5327.207 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (107 entries)
Found bitmap for '576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7'. 768 bits / 236971ab checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
ok 207 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.208 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 208 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.209 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 209 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.210 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 210 - counting commits with limit (full bitmap, second)

expecting success of 5327.211 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 211 - counting non-linear history (full bitmap, second)

expecting success of 5327.212 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 212 - counting commits with limiting (full bitmap, second)

expecting success of 5327.213 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 213 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.214 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 214 - enumerate commits (full bitmap, second)

expecting success of 5327.215 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 215 - enumerate --objects (full bitmap, second)

expecting success of 5327.216 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 216 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.217 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 217 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.218 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 218 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.219 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 219 - counting commits with limit (full bitmap, other)

expecting success of 5327.220 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 220 - counting non-linear history (full bitmap, other)

expecting success of 5327.221 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 221 - counting commits with limiting (full bitmap, other)

expecting success of 5327.222 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 222 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.223 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 223 - enumerate commits (full bitmap, other)

expecting success of 5327.224 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 224 - enumerate --objects (full bitmap, other)

expecting success of 5327.225 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 225 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.226 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 226 - clone from bitmapped repository

expecting success of 5327.227 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 227 - partial clone from bitmapped repository

expecting success of 5327.228 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            135
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       8626 /       8626
---------------------------------------------------------------------

ok 228 - setup further non-bitmapped commits

expecting success of 5327.229 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 229 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.230 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 230 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.231 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 231 - counting commits with limit (partial bitmap, second)

expecting success of 5327.232 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 232 - counting non-linear history (partial bitmap, second)

expecting success of 5327.233 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 233 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.234 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 234 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.235 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 235 - enumerate commits (partial bitmap, second)

expecting success of 5327.236 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 236 - enumerate --objects (partial bitmap, second)

expecting success of 5327.237 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 237 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.238 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 238 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.239 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 239 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.240 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 240 - counting commits with limit (partial bitmap, other)

expecting success of 5327.241 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 241 - counting non-linear history (partial bitmap, other)

expecting success of 5327.242 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 242 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.243 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 243 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.244 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 244 - enumerate commits (partial bitmap, other)

expecting success of 5327.245 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 245 - enumerate --objects (partial bitmap, other)

expecting success of 5327.246 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 246 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.247 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   576966f..078ff48  second     -> second
ok 247 - fetch (partial bitmap)

expecting success of 5327.248 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 742, done.
Total 742 (delta 0), reused 0 (delta 0), pack-reused 742
[second 2cbe96f] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 743, done.
Total 743 (delta 0), reused 0 (delta 0), pack-reused 742
ok 248 - enumerating progress counts pack-reused objects

expecting success of 5327.249 '--no-bitmap is respected when bitmaps exist': 
		git multi-pack-index write --bitmap &&

		test_commit respect--no-bitmap &&
		git repack -d &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		git multi-pack-index write --no-bitmap &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
		test_path_is_missing $midx-$(midx_checksum $objdir).rev
	
[second aec4170] respect--no-bitmap
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 respect--no-bitmap.t
ok 249 - --no-bitmap is respected when bitmaps exist

expecting success of 5327.250 'setup midx with base from later pack': 
		# Write a and b so that "a" is a delta on top of base "b", since Git
		# prefers to delete contents out of a base rather than add to a shorter
		# object.
		test_seq 1 128 >a &&
		test_seq 1 130 >b &&

		git add a b &&
		git commit -m "initial commit" &&

		a=$(git rev-parse HEAD:a) &&
		b=$(git rev-parse HEAD:b) &&

		# In the first pack, "a" is stored as a delta to "b".
		p1=$(git pack-objects .git/objects/pack/pack <<-EOF
		$a
		$b
		EOF
		) &&

		# In the second pack, "a" is missing, and "b" is not a delta nor base to
		# any other object.
		p2=$(git pack-objects .git/objects/pack/pack <<-EOF
		$b
		$(git rev-parse HEAD)
		$(git rev-parse HEAD^{tree})
		EOF
		) &&

		git prune-packed &&
		# Use the second pack as the preferred source, so that "b" occurs
		# earlier in the MIDX object order, rendering "a" unusable for pack
		# reuse.
		git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&

		have_delta $a $b &&
		test $(midx_pack_source $a) != $(midx_pack_source $b)
	
[second 59dfa27] initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 258 insertions(+)
 create mode 100644 a
 create mode 100644 b
ok 250 - setup midx with base from later pack

expecting success of 5327.251 'counting commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 251 - counting commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.252 'counting partial commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 252 - counting partial commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.253 'counting commits with limit (full bitmap with backwards delta, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 253 - counting commits with limit (full bitmap with backwards delta, second)

expecting success of 5327.254 'counting non-linear history (full bitmap with backwards delta, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 254 - counting non-linear history (full bitmap with backwards delta, second)

expecting success of 5327.255 'counting commits with limiting (full bitmap with backwards delta, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 255 - counting commits with limiting (full bitmap with backwards delta, second)

expecting success of 5327.256 'counting objects via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 256 - counting objects via bitmap (full bitmap with backwards delta, second)

expecting success of 5327.257 'enumerate commits (full bitmap with backwards delta, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 257 - enumerate commits (full bitmap with backwards delta, second)

expecting success of 5327.258 'enumerate --objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 5742, line 141
ok 258 - enumerate --objects (full bitmap with backwards delta, second)

expecting success of 5327.259 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 259 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)

expecting success of 5327.260 'counting commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 260 - counting commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.261 'counting partial commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 261 - counting partial commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.262 'counting commits with limit (full bitmap with backwards delta, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 262 - counting commits with limit (full bitmap with backwards delta, other)

expecting success of 5327.263 'counting non-linear history (full bitmap with backwards delta, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 263 - counting non-linear history (full bitmap with backwards delta, other)

expecting success of 5327.264 'counting commits with limiting (full bitmap with backwards delta, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 264 - counting commits with limiting (full bitmap with backwards delta, other)

expecting success of 5327.265 'counting objects via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 265 - counting objects via bitmap (full bitmap with backwards delta, other)

expecting success of 5327.266 'enumerate commits (full bitmap with backwards delta, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 266 - enumerate commits (full bitmap with backwards delta, other)

expecting success of 5327.267 'enumerate --objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 267 - enumerate --objects (full bitmap with backwards delta, other)

expecting success of 5327.268 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 268 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)

expecting success of 5327.269 'clone with bitmaps enabled': 
		git clone --no-local --bare . clone-reverse-delta.git &&
		test_when_finished "rm -fr clone-reverse-delta.git" &&

		git rev-parse HEAD >expect &&
		git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone-reverse-delta.git'...
ok 269 - clone with bitmaps enabled

expecting success of 5327.270 'changing the preferred pack does not corrupt bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit A &&
			test_commit B &&

			git rev-list --objects --no-object-names HEAD^ >A.objects &&
			git rev-list --objects --no-object-names HEAD^.. >B.objects &&

			A=$(git pack-objects $objdir/pack/pack <A.objects) &&
			B=$(git pack-objects $objdir/pack/pack <B.objects) &&

			cat >indexes <<-EOF &&
			pack-$A.idx
			pack-$B.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$A.pack <indexes &&
			git rev-list --test-bitmap A &&

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$B.pack <indexes &&
			git rev-list --test-bitmap A
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/repo/.git/
[master (root-commit) 4e815f0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master f2c4359] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Bitmap v1 test (2 entries loaded)
Found bitmap for '4e815f02723eafa37a84fae71005bfba7924b84d'. 64 bits / 11030517 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
Bitmap v1 test (2 entries loaded)
Found bitmap for '4e815f02723eafa37a84fae71005bfba7924b84d'. 64 bits / f31c9bc6 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
ok 270 - changing the preferred pack does not corrupt bitmaps

expecting success of 5327.271 'setup partial bitmaps': 
		test_commit packed &&
		git repack &&
		test_commit loose &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
[second 8f696af] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[second 37cdfb1] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 271 - setup partial bitmaps

expecting success of 5327.272 'reverse index exists (rev)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries)
Found bitmap for '8f696aff37c64e3202f920ceebf2456f81392ece'. 768 bits / 13802fc1 checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
{"event":"data","sid":"20221228T074917.193914Z-Hc64317c2-P000019f8","thread":"main","time":"2022-12-28T07:49:17.208838Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.018187,"t_rel":0.018187,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074933.449131Z-Hc64317c2-P00002176","thread":"main","time":"2022-12-28T07:49:33.466373Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.020328,"t_rel":0.020328,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
{"event":"data","sid":"20221228T074947.608142Z-Hc64317c2-P00002854","thread":"main","time":"2022-12-28T07:49:47.621643Z","file":"pack-revindex.c","line":321,"repo":1,"t_abs":0.016300,"t_rel":0.016300,"nesting":1,"category":"load_midx_revindex","key":"source","value":"rev"}
ok 272 - reverse index exists (rev)

expecting success of 5327.273 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD~
	
Bitmap v1 test (107 entries)
Found bitmap for '8f696aff37c64e3202f920ceebf2456f81392ece'. 768 bits / 13802fc1 checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
ok 273 - rev-list --test-bitmap verifies bitmaps

expecting success of 5327.274 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 274 - counting commits via bitmap (full bitmap, second)

expecting success of 5327.275 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 275 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5327.276 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 276 - counting commits with limit (full bitmap, second)

expecting success of 5327.277 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 277 - counting non-linear history (full bitmap, second)

expecting success of 5327.278 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 278 - counting commits with limiting (full bitmap, second)

expecting success of 5327.279 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 279 - counting objects via bitmap (full bitmap, second)

expecting success of 5327.280 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 280 - enumerate commits (full bitmap, second)

expecting success of 5327.281 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 281 - enumerate --objects (full bitmap, second)

expecting success of 5327.282 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 282 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5327.283 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 283 - counting commits via bitmap (full bitmap, other)

expecting success of 5327.284 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 284 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5327.285 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 285 - counting commits with limit (full bitmap, other)

expecting success of 5327.286 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 286 - counting non-linear history (full bitmap, other)

expecting success of 5327.287 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 287 - counting commits with limiting (full bitmap, other)

expecting success of 5327.288 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 288 - counting objects via bitmap (full bitmap, other)

expecting success of 5327.289 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 289 - enumerate commits (full bitmap, other)

expecting success of 5327.290 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 290 - enumerate --objects (full bitmap, other)

expecting success of 5327.291 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 291 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5327.292 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 292 - clone from bitmapped repository

expecting success of 5327.293 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 293 - partial clone from bitmapped repository

expecting success of 5327.294 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
37cdfb15dda4b8a893283d6025391133fad61400
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            140
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         12
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       5262 /       5262
---------------------------------------------------------------------

ok 294 - setup further non-bitmapped commits

expecting success of 5327.295 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 295 - counting commits via bitmap (partial bitmap, second)

expecting success of 5327.296 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 296 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5327.297 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 297 - counting commits with limit (partial bitmap, second)

expecting success of 5327.298 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 298 - counting non-linear history (partial bitmap, second)

expecting success of 5327.299 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 299 - counting commits with limiting (partial bitmap, second)

expecting success of 5327.300 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 300 - counting objects via bitmap (partial bitmap, second)

expecting success of 5327.301 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 301 - enumerate commits (partial bitmap, second)

expecting success of 5327.302 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 302 - enumerate --objects (partial bitmap, second)

expecting success of 5327.303 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 303 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5327.304 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 304 - counting commits via bitmap (partial bitmap, other)

expecting success of 5327.305 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 305 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5327.306 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 306 - counting commits with limit (partial bitmap, other)

expecting success of 5327.307 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 307 - counting non-linear history (partial bitmap, other)

expecting success of 5327.308 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 308 - counting commits with limiting (partial bitmap, other)

expecting success of 5327.309 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 309 - counting objects via bitmap (partial bitmap, other)

expecting success of 5327.310 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 310 - enumerate commits (partial bitmap, other)

expecting success of 5327.311 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 311 - enumerate --objects (partial bitmap, other)

expecting success of 5327.312 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 312 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5327.313 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5327-multi-pack-bitmaps-rev/.
   37cdfb1..8935311  second     -> second
ok 313 - fetch (partial bitmap)

expecting success of 5327.314 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 766, done.
Total 766 (delta 0), reused 0 (delta 0), pack-reused 766
[second 641c264] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 767, done.
Total 767 (delta 0), reused 0 (delta 0), pack-reused 766
ok 314 - enumerating progress counts pack-reused objects

# passed all 314 test(s)
1..314
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5403-post-checkout-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5403-post-checkout-hook/.git/
expecting success of 5403.1 'setup': 
	test_hook --setup post-checkout <<-\EOF &&
	echo "$@" >.git/post-checkout.args
	EOF
	test_commit one &&
	test_commit two &&
	test_commit rebase-on-me &&
	git reset --hard HEAD^ &&
	test_commit three

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main a193130] rebase-on-me
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 rebase-on-me.t
HEAD is now at 139b20d two
[main a6f6257] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 1 - setup

expecting success of 5403.2 'post-checkout receives the right arguments with HEAD unchanged ': 
	test_when_finished "rm -f .git/post-checkout.args" &&
	git checkout main &&
	read old new flag <.git/post-checkout.args &&
	test $old = $new && test $flag = 1

Already on 'main'
ok 2 - post-checkout receives the right arguments with HEAD unchanged 

expecting success of 5403.3 'post-checkout args are correct with git checkout -b ': 
	test_when_finished "rm -f .git/post-checkout.args" &&
	git checkout -b new1 &&
	read old new flag <.git/post-checkout.args &&
	test $old = $new && test $flag = 1

Switched to a new branch 'new1'
ok 3 - post-checkout args are correct with git checkout -b 

expecting success of 5403.4 'post-checkout receives the right args with HEAD changed ': 
	test_when_finished "rm -f .git/post-checkout.args" &&
	git checkout two &&
	read old new flag <.git/post-checkout.args &&
	test $old != $new && test $flag = 1

Note: switching to 'two'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
ok 4 - post-checkout receives the right args with HEAD changed 

expecting success of 5403.5 'post-checkout receives the right args when not switching branches ': 
	test_when_finished "rm -f .git/post-checkout.args" &&
	git checkout main -- three.t &&
	read old new flag <.git/post-checkout.args &&
	test $old = $new && test $flag = 0

ok 5 - post-checkout receives the right args when not switching branches 

expecting success of 5403.6 'post-checkout is triggered on rebase --apply': 
		test_when_finished "rm -f .git/post-checkout.args" &&
		git checkout -B rebase-test main &&
		rm -f .git/post-checkout.args &&
		git rebase $args rebase-on-me &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev main $old &&
		test_cmp_rev rebase-on-me $new &&
		test $flag = 1
	
Previous HEAD position was 139b20d two
Switched to a new branch 'rebase-test'
First, rewinding head to replay your work on top of it...
Applying: three
ok 6 - post-checkout is triggered on rebase --apply

expecting success of 5403.7 'post-checkout is triggered on rebase --apply with fast-forward': 
		test_when_finished "rm -f .git/post-checkout.args" &&
		git checkout -B ff-rebase-test rebase-on-me^ &&
		rm -f .git/post-checkout.args &&
		git rebase $args rebase-on-me &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev rebase-on-me^ $old &&
		test_cmp_rev rebase-on-me $new &&
		test $flag = 1
	
Switched to a new branch 'ff-rebase-test'
First, rewinding head to replay your work on top of it...
Fast-forwarded ff-rebase-test to rebase-on-me.
ok 7 - post-checkout is triggered on rebase --apply with fast-forward

expecting success of 5403.8 'rebase --apply fast-forward branch checkout runs post-checkout hook': 
		test_when_finished "test_might_fail git rebase --abort" &&
		test_when_finished "rm -f .git/post-checkout.args" &&
		git update-ref refs/heads/rebase-fast-forward three &&
		git checkout two  &&
		rm -f .git/post-checkout.args &&
		git rebase $args HEAD rebase-fast-forward  &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev two $old &&
		test_cmp_rev three $new &&
		test $flag = 1
	
Note: switching to 'two'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
Current branch rebase-fast-forward is up to date.
fatal: No rebase in progress?
ok 8 - rebase --apply fast-forward branch checkout runs post-checkout hook

expecting success of 5403.9 'rebase --apply checkout does not remove untracked files': 
		test_when_finished "test_might_fail git rebase --abort" &&
		test_when_finished "rm -f .git/post-checkout.args" &&
		git update-ref refs/heads/rebase-fast-forward three &&
		git checkout two &&
		rm -f .git/post-checkout.args &&
		echo untracked >three.t &&
		test_when_finished "rm three.t" &&
		test_must_fail git rebase $args HEAD rebase-fast-forward 2>err &&
		grep "untracked working tree files would be overwritten by checkout" err &&
		test_path_is_missing .git/post-checkout.args


Note: switching to 'two'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
error: The following untracked working tree files would be overwritten by checkout:
fatal: No rebase in progress?
ok 9 - rebase --apply checkout does not remove untracked files

expecting success of 5403.10 'post-checkout is triggered on rebase --merge': 
		test_when_finished "rm -f .git/post-checkout.args" &&
		git checkout -B rebase-test main &&
		rm -f .git/post-checkout.args &&
		git rebase $args rebase-on-me &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev main $old &&
		test_cmp_rev rebase-on-me $new &&
		test $flag = 1
	
Previous HEAD position was 139b20d two
Switched to and reset branch 'rebase-test'
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/rebase-test.
ok 10 - post-checkout is triggered on rebase --merge

expecting success of 5403.11 'post-checkout is triggered on rebase --merge with fast-forward': 
		test_when_finished "rm -f .git/post-checkout.args" &&
		git checkout -B ff-rebase-test rebase-on-me^ &&
		rm -f .git/post-checkout.args &&
		git rebase $args rebase-on-me &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev rebase-on-me^ $old &&
		test_cmp_rev rebase-on-me $new &&
		test $flag = 1
	
Switched to and reset branch 'ff-rebase-test'

                                                                                
Successfully rebased and updated refs/heads/ff-rebase-test.
ok 11 - post-checkout is triggered on rebase --merge with fast-forward

expecting success of 5403.12 'rebase --merge fast-forward branch checkout runs post-checkout hook': 
		test_when_finished "test_might_fail git rebase --abort" &&
		test_when_finished "rm -f .git/post-checkout.args" &&
		git update-ref refs/heads/rebase-fast-forward three &&
		git checkout two  &&
		rm -f .git/post-checkout.args &&
		git rebase $args HEAD rebase-fast-forward  &&
		read old new flag <.git/post-checkout.args &&
		test_cmp_rev two $old &&
		test_cmp_rev three $new &&
		test $flag = 1
	
Note: switching to 'two'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
Current branch rebase-fast-forward is up to date.
fatal: No rebase in progress?
ok 12 - rebase --merge fast-forward branch checkout runs post-checkout hook

expecting success of 5403.13 'rebase --merge checkout does not remove untracked files': 
		test_when_finished "test_might_fail git rebase --abort" &&
		test_when_finished "rm -f .git/post-checkout.args" &&
		git update-ref refs/heads/rebase-fast-forward three &&
		git checkout two &&
		rm -f .git/post-checkout.args &&
		echo untracked >three.t &&
		test_when_finished "rm three.t" &&
		test_must_fail git rebase $args HEAD rebase-fast-forward 2>err &&
		grep "untracked working tree files would be overwritten by checkout" err &&
		test_path_is_missing .git/post-checkout.args


Note: switching to 'two'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 139b20d two
error: The following untracked working tree files would be overwritten by checkout:
fatal: No rebase in progress?
ok 13 - rebase --merge checkout does not remove untracked files

expecting success of 5403.14 'post-checkout hook is triggered by clone': 
	mkdir -p templates/hooks &&
	write_script templates/hooks/post-checkout <<-\EOF &&
	echo "$@" >"$GIT_DIR/post-checkout.args"
	EOF
	git clone --template=templates . clone3 &&
	test -f clone3/.git/post-checkout.args

Cloning into 'clone3'...
done.
Note: switching to '139b20d8e6c5b496de61f033f642d0e3dbff528d'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 14 - post-checkout hook is triggered by clone

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5405-send-pack-rewind.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5405-send-pack-rewind/.git/
expecting success of 5405.1 'setup': 

	>file1 && git add file1 && test_tick &&
	git commit -m Initial &&
	git config receive.denyCurrentBranch warn &&

	mkdir another && (
		cd another &&
		git init &&
		git fetch --update-head-ok .. main:main
	) &&

	>file2 && git add file2 && test_tick &&
	git commit -m Second


[main (root-commit) de5945f] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5405-send-pack-rewind/another/.git/
From ..
 * [new branch]      main       -> main
[main 3dc47c1] Second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
ok 1 - setup

expecting success of 5405.2 'non forced push should die not segfault': 

	(
		cd another &&
		test_must_fail git push .. main:main
	)


To ..
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to '..'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ok 2 - non forced push should die not segfault

expecting success of 5405.3 'forced push should succeed': 

	(
		cd another &&
		git push .. +main:main
	)


remote: warning: updating the current branch        
To ..
 + 3dc47c1...de5945f main -> main (forced update)
ok 3 - forced push should succeed

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5404-tracking-branches.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5404-tracking-branches/.git/
expecting success of 5404.1 'setup': 
	echo 1 >file &&
	git add file &&
	git commit -m 1 &&
	git branch b1 &&
	git branch b2 &&
	git branch b3 &&
	git clone . aa &&
	git checkout b1 &&
	echo b1 >>file &&
	git commit -a -m b1 &&
	git checkout b2 &&
	echo b2 >>file &&
	git commit -a -m b2

[main (root-commit) c663a66] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'aa'...
done.
Switched to branch 'b1'
[b1 30569e6] b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'b2'
[b2 f149455] b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 5404.2 'prepare pushable branches': 
	cd aa &&
	b1=$(git rev-parse origin/b1) &&
	b2=$(git rev-parse origin/b2) &&
	git checkout -b b1 origin/b1 &&
	echo aa-b1 >>file &&
	git commit -a -m aa-b1 &&
	git checkout -b b2 origin/b2 &&
	echo aa-b2 >>file &&
	git commit -a -m aa-b2 &&
	git checkout main &&
	echo aa-main >>file &&
	git commit -a -m aa-main

Switched to a new branch 'b1'
branch 'b1' set up to track 'origin/b1'.
[b1 568053f] aa-b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'b2'
branch 'b2' set up to track 'origin/b2'.
[b2 4441e28] aa-b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 5f550d5] aa-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - prepare pushable branches

expecting success of 5404.3 'mixed-success push returns error': 
	test_must_fail git push origin :

To /<<PKGBUILDDIR>>/t/trash directory.t5404-tracking-branches/.
   c663a66..5f550d5  main -> main
 ! [rejected]        b1 -> b1 (fetch first)
 ! [rejected]        b2 -> b2 (fetch first)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5404-tracking-branches/.'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ok 3 - mixed-success push returns error

expecting success of 5404.4 'check tracking branches updated correctly after push': 
	test "$(git rev-parse origin/main)" = "$(git rev-parse main)"

ok 4 - check tracking branches updated correctly after push

expecting success of 5404.5 'check tracking branches not updated for failed refs': 
	test "$(git rev-parse origin/b1)" = "$b1" &&
	test "$(git rev-parse origin/b2)" = "$b2"

ok 5 - check tracking branches not updated for failed refs

expecting success of 5404.6 'deleted branches have their tracking branches removed': 
	git push origin :b1 &&
	test "$(git rev-parse origin/b1)" = "origin/b1"

To /<<PKGBUILDDIR>>/t/trash directory.t5404-tracking-branches/.
 - [deleted]         b1
fatal: ambiguous argument 'origin/b1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 6 - deleted branches have their tracking branches removed

expecting success of 5404.7 'already deleted tracking branches ignored': 
	git branch -d -r origin/b3 &&
	git push origin :b3 >output 2>&1 &&
	! grep "^error: " output

Deleted remote-tracking branch origin/b3 (was c663a66).
ok 7 - already deleted tracking branches ignored

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5406-remote-rejects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5406-remote-rejects/.git/
expecting success of 5406.1 'setup': 
	test_hook update <<-\EOF &&
	exit 1
	EOF
	echo 1 >file &&
	git add file &&
	git commit -m 1 &&
	git clone . child &&
	cd child &&
	echo 2 >file &&
	git commit -a -m 2

[master (root-commit) c663a66] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'child'...
done.
[master ee88fdb] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5406.2 'push reports error': test_must_fail git push 2>stderr
ok 2 - push reports error

expecting success of 5406.3 'individual ref reports error': grep rejected stderr
 ! [remote rejected] master -> master (branch is currently checked out)
ok 3 - individual ref reports error

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5408-send-pack-stdin.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/.git/
expecting success of 5408.1 'setup refs': 
	cat >refs <<-\EOF &&
	refs/heads/A
	refs/heads/C
	refs/tags/D
	refs/heads/B
	refs/tags/E
	EOF
	for i in $(cat refs); do
		create_ref $i || return 1
	done

ok 1 - setup refs

expecting success of 5408.2 'refs on cmdline': 
	clear_remote &&
	git send-pack remote.git $(cat refs) &&
	for i in $(cat refs); do
		verify_push $i || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
To remote.git
 * [new branch]      A -> A
 * [new branch]      C -> C
 * [new tag]         D -> D
 * [new branch]      B -> B
 * [new tag]         E -> E
ok 2 - refs on cmdline

expecting success of 5408.3 'refs over stdin': 
	clear_remote &&
	git send-pack remote.git --stdin <refs &&
	for i in $(cat refs); do
		verify_push $i || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
To remote.git
 * [new branch]      A -> A
 * [new branch]      C -> C
 * [new tag]         D -> D
 * [new branch]      B -> B
 * [new tag]         E -> E
ok 3 - refs over stdin

expecting success of 5408.4 'stdin lines are full refspecs': 
	clear_remote &&
	echo "A:other" >input &&
	git send-pack remote.git --stdin <input &&
	verify_push refs/heads/A refs/heads/other

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
To remote.git
 * [new branch]      A -> other
ok 4 - stdin lines are full refspecs

expecting success of 5408.5 'stdin mixed with cmdline': 
	clear_remote &&
	echo A >input &&
	git send-pack remote.git --stdin B <input &&
	verify_push A &&
	verify_push B

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
To remote.git
 * [new branch]      B -> B
 * [new branch]      A -> A
ok 5 - stdin mixed with cmdline

expecting success of 5408.6 'cmdline refs written in order': 
	clear_remote &&
	test_must_fail git send-pack remote.git A:foo B:foo &&
	verify_push A foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
remote: error: cannot lock ref 'refs/heads/foo': reference already exists        
To remote.git
 ! [remote rejected] A -> foo (failed to update ref)
 ! [remote failure]  B -> foo (remote failed to report status)
ok 6 - cmdline refs written in order

expecting success of 5408.7 '--stdin refs come after cmdline': 
	clear_remote &&
	echo A:foo >input &&
	test_must_fail git send-pack remote.git --stdin B:foo <input &&
	verify_push B foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
remote: error: cannot lock ref 'refs/heads/foo': reference already exists        
To remote.git
 ! [remote rejected] B -> foo (failed to update ref)
 ! [remote failure]  A -> foo (remote failed to report status)
ok 7 - --stdin refs come after cmdline

expecting success of 5408.8 'refspecs and --mirror do not mix (cmdline)': 
	clear_remote &&
	test_must_fail git send-pack remote.git --mirror $(cat refs)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
usage: git send-pack [--mirror] [--dry-run] [--force]
                     [--receive-pack=<git-receive-pack>]
                     [--verbose] [--thin] [--atomic]
                     [--[no-]signed | --signed=(true|false|if-asked)]
                     [<host>:]<directory> (--all | <ref>...)

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --receive-pack <receive-pack>
                          receive pack program
    --exec <receive-pack>
                          receive pack program
    --remote <remote>     remote name
    --all                 push all refs
    -n, --dry-run         dry run
    --mirror              mirror all refs
    -f, --force           force updates
    --signed[=(yes|no|if-asked)]
                          GPG sign the push
    --push-option <server-specific>
                          option to transmit
    --progress            force progress reporting
    --thin                use thin pack
    --atomic              request atomic transaction on remote side
    --stateless-rpc       use stateless RPC protocol
    --stdin               read refs from stdin
    --helper-status       print status from remote helper
    --force-with-lease[=<refname>:<expect>]
                          require old value of ref to be at this value
    --force-if-includes   require remote updates to be integrated locally

ok 8 - refspecs and --mirror do not mix (cmdline)

expecting success of 5408.9 'refspecs and --mirror do not mix (stdin)': 
	clear_remote &&
	test_must_fail git send-pack remote.git --mirror --stdin <refs

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5408-send-pack-stdin/remote.git/
usage: git send-pack [--mirror] [--dry-run] [--force]
                     [--receive-pack=<git-receive-pack>]
                     [--verbose] [--thin] [--atomic]
                     [--[no-]signed | --signed=(true|false|if-asked)]
                     [<host>:]<directory> (--all | <ref>...)

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --receive-pack <receive-pack>
                          receive pack program
    --exec <receive-pack>
                          receive pack program
    --remote <remote>     remote name
    --all                 push all refs
    -n, --dry-run         dry run
    --mirror              mirror all refs
    -f, --force           force updates
    --signed[=(yes|no|if-asked)]
                          GPG sign the push
    --push-option <server-specific>
                          option to transmit
    --progress            force progress reporting
    --thin                use thin pack
    --atomic              request atomic transaction on remote side
    --stateless-rpc       use stateless RPC protocol
    --stdin               read refs from stdin
    --helper-status       print status from remote helper
    --force-with-lease[=<refname>:<expect>]
                          require old value of ref to be at this value
    --force-if-includes   require remote updates to be integrated locally

ok 9 - refspecs and --mirror do not mix (stdin)

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5401-update-hooks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5401-update-hooks/.git/
expecting success of 5401.1 'setup': 
	echo This is a test. >a &&
	git update-index --add a &&
	tree0=$(git write-tree) &&
	commit0=$(echo setup | git commit-tree $tree0) &&
	echo We hope it works. >a &&
	git update-index a &&
	tree1=$(git write-tree) &&
	commit1=$(echo modify | git commit-tree $tree1 -p $commit0) &&
	git update-ref refs/heads/main $commit0 &&
	git update-ref refs/heads/tofail $commit1 &&
	git clone --bare ./. victim.git &&
	GIT_DIR=victim.git git update-ref refs/heads/tofail $commit1 &&
	git update-ref refs/heads/main $commit1 &&
	git update-ref refs/heads/tofail $commit0 &&

	test_hook --setup -C victim.git pre-receive <<-\EOF &&
	printf %s "$@" >>$GIT_DIR/pre-receive.args
	cat - >$GIT_DIR/pre-receive.stdin
	echo STDOUT pre-receive
	echo STDERR pre-receive >&2
	EOF

	test_hook --setup -C victim.git update <<-\EOF &&
	echo "$@" >>$GIT_DIR/update.args
	read x; printf %s "$x" >$GIT_DIR/update.stdin
	echo STDOUT update $1
	echo STDERR update $1 >&2
	test "$1" = refs/heads/main || exit
	EOF

	test_hook --setup -C victim.git post-receive <<-\EOF &&
	printf %s "$@" >>$GIT_DIR/post-receive.args
	cat - >$GIT_DIR/post-receive.stdin
	echo STDOUT post-receive
	echo STDERR post-receive >&2
	EOF

	test_hook --setup -C victim.git post-update <<-\EOF
	echo "$@" >>$GIT_DIR/post-update.args
	read x; printf %s "$x" >$GIT_DIR/post-update.stdin
	echo STDOUT post-update
	echo STDERR post-update >&2
	EOF

Cloning into bare repository 'victim.git'...
done.
ok 1 - setup

expecting success of 5401.2 'push': 
	test_must_fail git send-pack --force ./victim.git \
		main tofail >send.out 2>send.err

ok 2 - push

expecting success of 5401.3 'updated as expected': 
	test $(GIT_DIR=victim.git git rev-parse main) = $commit1 &&
	test $(GIT_DIR=victim.git git rev-parse tofail) = $commit1

ok 3 - updated as expected

expecting success of 5401.4 'hooks ran': 
	test -f victim.git/pre-receive.args &&
	test -f victim.git/pre-receive.stdin &&
	test -f victim.git/update.args &&
	test -f victim.git/update.stdin &&
	test -f victim.git/post-receive.args &&
	test -f victim.git/post-receive.stdin &&
	test -f victim.git/post-update.args &&
	test -f victim.git/post-update.stdin

ok 4 - hooks ran

expecting success of 5401.5 'pre-receive hook input': 
	(echo $commit0 $commit1 refs/heads/main &&
	 echo $commit1 $commit0 refs/heads/tofail
	) | test_cmp - victim.git/pre-receive.stdin

ok 5 - pre-receive hook input

expecting success of 5401.6 'update hook arguments': 
	(echo refs/heads/main $commit0 $commit1 &&
	 echo refs/heads/tofail $commit1 $commit0
	) | test_cmp - victim.git/update.args

ok 6 - update hook arguments

expecting success of 5401.7 'post-receive hook input': 
	echo $commit0 $commit1 refs/heads/main |
	test_cmp - victim.git/post-receive.stdin

ok 7 - post-receive hook input

expecting success of 5401.8 'post-update hook arguments': 
	echo refs/heads/main |
	test_cmp - victim.git/post-update.args

ok 8 - post-update hook arguments

expecting success of 5401.9 'all hook stdin is /dev/null': 
	test_must_be_empty victim.git/update.stdin &&
	test_must_be_empty victim.git/post-update.stdin

ok 9 - all hook stdin is /dev/null

expecting success of 5401.10 'all *-receive hook args are empty': 
	test_must_be_empty victim.git/pre-receive.args &&
	test_must_be_empty victim.git/post-receive.args

ok 10 - all *-receive hook args are empty

expecting success of 5401.11 'send-pack produced no output': 
	test_must_be_empty send.out

ok 11 - send-pack produced no output

expecting success of 5401.12 'send-pack stderr contains hook messages': 
	grep ^remote: send.err | sed "s/ *\$//" >actual &&
	test_cmp expect actual

ok 12 - send-pack stderr contains hook messages

expecting success of 5401.13 'pre-receive hook that forgets to read its input': 
	test_hook --clobber -C victim.git pre-receive <<-\EOF &&
	exit 0
	EOF
	rm -f victim.git/hooks/update victim.git/hooks/post-update &&

	for v in $(test_seq 100 999)
	do
		git branch branch_$v main || return
	done &&
	git push ./victim.git "+refs/heads/*:refs/heads/*"

remote: STDOUT post-receive        
remote: STDERR post-receive        
To ./victim.git
 + 30cea85...d132366 tofail -> tofail (forced update)
 * [new branch]      branch_100 -> branch_100
 * [new branch]      branch_101 -> branch_101
 * [new branch]      branch_102 -> branch_102
 * [new branch]      branch_103 -> branch_103
 * [new branch]      branch_104 -> branch_104
 * [new branch]      branch_105 -> branch_105
 * [new branch]      branch_106 -> branch_106
 * [new branch]      branch_107 -> branch_107
 * [new branch]      branch_108 -> branch_108
 * [new branch]      branch_109 -> branch_109
 * [new branch]      branch_110 -> branch_110
 * [new branch]      branch_111 -> branch_111
 * [new branch]      branch_112 -> branch_112
 * [new branch]      branch_113 -> branch_113
 * [new branch]      branch_114 -> branch_114
 * [new branch]      branch_115 -> branch_115
 * [new branch]      branch_116 -> branch_116
 * [new branch]      branch_117 -> branch_117
 * [new branch]      branch_118 -> branch_118
 * [new branch]      branch_119 -> branch_119
 * [new branch]      branch_120 -> branch_120
 * [new branch]      branch_121 -> branch_121
 * [new branch]      branch_122 -> branch_122
 * [new branch]      branch_123 -> branch_123
 * [new branch]      branch_124 -> branch_124
 * [new branch]      branch_125 -> branch_125
 * [new branch]      branch_126 -> branch_126
 * [new branch]      branch_127 -> branch_127
 * [new branch]      branch_128 -> branch_128
 * [new branch]      branch_129 -> branch_129
 * [new branch]      branch_130 -> branch_130
 * [new branch]      branch_131 -> branch_131
 * [new branch]      branch_132 -> branch_132
 * [new branch]      branch_133 -> branch_133
 * [new branch]      branch_134 -> branch_134
 * [new branch]      branch_135 -> branch_135
 * [new branch]      branch_136 -> branch_136
 * [new branch]      branch_137 -> branch_137
 * [new branch]      branch_138 -> branch_138
 * [new branch]      branch_139 -> branch_139
 * [new branch]      branch_140 -> branch_140
 * [new branch]      branch_141 -> branch_141
 * [new branch]      branch_142 -> branch_142
 * [new branch]      branch_143 -> branch_143
 * [new branch]      branch_144 -> branch_144
 * [new branch]      branch_145 -> branch_145
 * [new branch]      branch_146 -> branch_146
 * [new branch]      branch_147 -> branch_147
 * [new branch]      branch_148 -> branch_148
 * [new branch]      branch_149 -> branch_149
 * [new branch]      branch_150 -> branch_150
 * [new branch]      branch_151 -> branch_151
 * [new branch]      branch_152 -> branch_152
 * [new branch]      branch_153 -> branch_153
 * [new branch]      branch_154 -> branch_154
 * [new branch]      branch_155 -> branch_155
 * [new branch]      branch_156 -> branch_156
 * [new branch]      branch_157 -> branch_157
 * [new branch]      branch_158 -> branch_158
 * [new branch]      branch_159 -> branch_159
 * [new branch]      branch_160 -> branch_160
 * [new branch]      branch_161 -> branch_161
 * [new branch]      branch_162 -> branch_162
 * [new branch]      branch_163 -> branch_163
 * [new branch]      branch_164 -> branch_164
 * [new branch]      branch_165 -> branch_165
 * [new branch]      branch_166 -> branch_166
 * [new branch]      branch_167 -> branch_167
 * [new branch]      branch_168 -> branch_168
 * [new branch]      branch_169 -> branch_169
 * [new branch]      branch_170 -> branch_170
 * [new branch]      branch_171 -> branch_171
 * [new branch]      branch_172 -> branch_172
 * [new branch]      branch_173 -> branch_173
 * [new branch]      branch_174 -> branch_174
 * [new branch]      branch_175 -> branch_175
 * [new branch]      branch_176 -> branch_176
 * [new branch]      branch_177 -> branch_177
 * [new branch]      branch_178 -> branch_178
 * [new branch]      branch_179 -> branch_179
 * [new branch]      branch_180 -> branch_180
 * [new branch]      branch_181 -> branch_181
 * [new branch]      branch_182 -> branch_182
 * [new branch]      branch_183 -> branch_183
 * [new branch]      branch_184 -> branch_184
 * [new branch]      branch_185 -> branch_185
 * [new branch]      branch_186 -> branch_186
 * [new branch]      branch_187 -> branch_187
 * [new branch]      branch_188 -> branch_188
 * [new branch]      branch_189 -> branch_189
 * [new branch]      branch_190 -> branch_190
 * [new branch]      branch_191 -> branch_191
 * [new branch]      branch_192 -> branch_192
 * [new branch]      branch_193 -> branch_193
 * [new branch]      branch_194 -> branch_194
 * [new branch]      branch_195 -> branch_195
 * [new branch]      branch_196 -> branch_196
 * [new branch]      branch_197 -> branch_197
 * [new branch]      branch_198 -> branch_198
 * [new branch]      branch_199 -> branch_199
 * [new branch]      branch_200 -> branch_200
 * [new branch]      branch_201 -> branch_201
 * [new branch]      branch_202 -> branch_202
 * [new branch]      branch_203 -> branch_203
 * [new branch]      branch_204 -> branch_204
 * [new branch]      branch_205 -> branch_205
 * [new branch]      branch_206 -> branch_206
 * [new branch]      branch_207 -> branch_207
 * [new branch]      branch_208 -> branch_208
 * [new branch]      branch_209 -> branch_209
 * [new branch]      branch_210 -> branch_210
 * [new branch]      branch_211 -> branch_211
 * [new branch]      branch_212 -> branch_212
 * [new branch]      branch_213 -> branch_213
 * [new branch]      branch_214 -> branch_214
 * [new branch]      branch_215 -> branch_215
 * [new branch]      branch_216 -> branch_216
 * [new branch]      branch_217 -> branch_217
 * [new branch]      branch_218 -> branch_218
 * [new branch]      branch_219 -> branch_219
 * [new branch]      branch_220 -> branch_220
 * [new branch]      branch_221 -> branch_221
 * [new branch]      branch_222 -> branch_222
 * [new branch]      branch_223 -> branch_223
 * [new branch]      branch_224 -> branch_224
 * [new branch]      branch_225 -> branch_225
 * [new branch]      branch_226 -> branch_226
 * [new branch]      branch_227 -> branch_227
 * [new branch]      branch_228 -> branch_228
 * [new branch]      branch_229 -> branch_229
 * [new branch]      branch_230 -> branch_230
 * [new branch]      branch_231 -> branch_231
 * [new branch]      branch_232 -> branch_232
 * [new branch]      branch_233 -> branch_233
 * [new branch]      branch_234 -> branch_234
 * [new branch]      branch_235 -> branch_235
 * [new branch]      branch_236 -> branch_236
 * [new branch]      branch_237 -> branch_237
 * [new branch]      branch_238 -> branch_238
 * [new branch]      branch_239 -> branch_239
 * [new branch]      branch_240 -> branch_240
 * [new branch]      branch_241 -> branch_241
 * [new branch]      branch_242 -> branch_242
 * [new branch]      branch_243 -> branch_243
 * [new branch]      branch_244 -> branch_244
 * [new branch]      branch_245 -> branch_245
 * [new branch]      branch_246 -> branch_246
 * [new branch]      branch_247 -> branch_247
 * [new branch]      branch_248 -> branch_248
 * [new branch]      branch_249 -> branch_249
 * [new branch]      branch_250 -> branch_250
 * [new branch]      branch_251 -> branch_251
 * [new branch]      branch_252 -> branch_252
 * [new branch]      branch_253 -> branch_253
 * [new branch]      branch_254 -> branch_254
 * [new branch]      branch_255 -> branch_255
 * [new branch]      branch_256 -> branch_256
 * [new branch]      branch_257 -> branch_257
 * [new branch]      branch_258 -> branch_258
 * [new branch]      branch_259 -> branch_259
 * [new branch]      branch_260 -> branch_260
 * [new branch]      branch_261 -> branch_261
 * [new branch]      branch_262 -> branch_262
 * [new branch]      branch_263 -> branch_263
 * [new branch]      branch_264 -> branch_264
 * [new branch]      branch_265 -> branch_265
 * [new branch]      branch_266 -> branch_266
 * [new branch]      branch_267 -> branch_267
 * [new branch]      branch_268 -> branch_268
 * [new branch]      branch_269 -> branch_269
 * [new branch]      branch_270 -> branch_270
 * [new branch]      branch_271 -> branch_271
 * [new branch]      branch_272 -> branch_272
 * [new branch]      branch_273 -> branch_273
 * [new branch]      branch_274 -> branch_274
 * [new branch]      branch_275 -> branch_275
 * [new branch]      branch_276 -> branch_276
 * [new branch]      branch_277 -> branch_277
 * [new branch]      branch_278 -> branch_278
 * [new branch]      branch_279 -> branch_279
 * [new branch]      branch_280 -> branch_280
 * [new branch]      branch_281 -> branch_281
 * [new branch]      branch_282 -> branch_282
 * [new branch]      branch_283 -> branch_283
 * [new branch]      branch_284 -> branch_284
 * [new branch]      branch_285 -> branch_285
 * [new branch]      branch_286 -> branch_286
 * [new branch]      branch_287 -> branch_287
 * [new branch]      branch_288 -> branch_288
 * [new branch]      branch_289 -> branch_289
 * [new branch]      branch_290 -> branch_290
 * [new branch]      branch_291 -> branch_291
 * [new branch]      branch_292 -> branch_292
 * [new branch]      branch_293 -> branch_293
 * [new branch]      branch_294 -> branch_294
 * [new branch]      branch_295 -> branch_295
 * [new branch]      branch_296 -> branch_296
 * [new branch]      branch_297 -> branch_297
 * [new branch]      branch_298 -> branch_298
 * [new branch]      branch_299 -> branch_299
 * [new branch]      branch_300 -> branch_300
 * [new branch]      branch_301 -> branch_301
 * [new branch]      branch_302 -> branch_302
 * [new branch]      branch_303 -> branch_303
 * [new branch]      branch_304 -> branch_304
 * [new branch]      branch_305 -> branch_305
 * [new branch]      branch_306 -> branch_306
 * [new branch]      branch_307 -> branch_307
 * [new branch]      branch_308 -> branch_308
 * [new branch]      branch_309 -> branch_309
 * [new branch]      branch_310 -> branch_310
 * [new branch]      branch_311 -> branch_311
 * [new branch]      branch_312 -> branch_312
 * [new branch]      branch_313 -> branch_313
 * [new branch]      branch_314 -> branch_314
 * [new branch]      branch_315 -> branch_315
 * [new branch]      branch_316 -> branch_316
 * [new branch]      branch_317 -> branch_317
 * [new branch]      branch_318 -> branch_318
 * [new branch]      branch_319 -> branch_319
 * [new branch]      branch_320 -> branch_320
 * [new branch]      branch_321 -> branch_321
 * [new branch]      branch_322 -> branch_322
 * [new branch]      branch_323 -> branch_323
 * [new branch]      branch_324 -> branch_324
 * [new branch]      branch_325 -> branch_325
 * [new branch]      branch_326 -> branch_326
 * [new branch]      branch_327 -> branch_327
 * [new branch]      branch_328 -> branch_328
 * [new branch]      branch_329 -> branch_329
 * [new branch]      branch_330 -> branch_330
 * [new branch]      branch_331 -> branch_331
 * [new branch]      branch_332 -> branch_332
 * [new branch]      branch_333 -> branch_333
 * [new branch]      branch_334 -> branch_334
 * [new branch]      branch_335 -> branch_335
 * [new branch]      branch_336 -> branch_336
 * [new branch]      branch_337 -> branch_337
 * [new branch]      branch_338 -> branch_338
 * [new branch]      branch_339 -> branch_339
 * [new branch]      branch_340 -> branch_340
 * [new branch]      branch_341 -> branch_341
 * [new branch]      branch_342 -> branch_342
 * [new branch]      branch_343 -> branch_343
 * [new branch]      branch_344 -> branch_344
 * [new branch]      branch_345 -> branch_345
 * [new branch]      branch_346 -> branch_346
 * [new branch]      branch_347 -> branch_347
 * [new branch]      branch_348 -> branch_348
 * [new branch]      branch_349 -> branch_349
 * [new branch]      branch_350 -> branch_350
 * [new branch]      branch_351 -> branch_351
 * [new branch]      branch_352 -> branch_352
 * [new branch]      branch_353 -> branch_353
 * [new branch]      branch_354 -> branch_354
 * [new branch]      branch_355 -> branch_355
 * [new branch]      branch_356 -> branch_356
 * [new branch]      branch_357 -> branch_357
 * [new branch]      branch_358 -> branch_358
 * [new branch]      branch_359 -> branch_359
 * [new branch]      branch_360 -> branch_360
 * [new branch]      branch_361 -> branch_361
 * [new branch]      branch_362 -> branch_362
 * [new branch]      branch_363 -> branch_363
 * [new branch]      branch_364 -> branch_364
 * [new branch]      branch_365 -> branch_365
 * [new branch]      branch_366 -> branch_366
 * [new branch]      branch_367 -> branch_367
 * [new branch]      branch_368 -> branch_368
 * [new branch]      branch_369 -> branch_369
 * [new branch]      branch_370 -> branch_370
 * [new branch]      branch_371 -> branch_371
 * [new branch]      branch_372 -> branch_372
 * [new branch]      branch_373 -> branch_373
 * [new branch]      branch_374 -> branch_374
 * [new branch]      branch_375 -> branch_375
 * [new branch]      branch_376 -> branch_376
 * [new branch]      branch_377 -> branch_377
 * [new branch]      branch_378 -> branch_378
 * [new branch]      branch_379 -> branch_379
 * [new branch]      branch_380 -> branch_380
 * [new branch]      branch_381 -> branch_381
 * [new branch]      branch_382 -> branch_382
 * [new branch]      branch_383 -> branch_383
 * [new branch]      branch_384 -> branch_384
 * [new branch]      branch_385 -> branch_385
 * [new branch]      branch_386 -> branch_386
 * [new branch]      branch_387 -> branch_387
 * [new branch]      branch_388 -> branch_388
 * [new branch]      branch_389 -> branch_389
 * [new branch]      branch_390 -> branch_390
 * [new branch]      branch_391 -> branch_391
 * [new branch]      branch_392 -> branch_392
 * [new branch]      branch_393 -> branch_393
 * [new branch]      branch_394 -> branch_394
 * [new branch]      branch_395 -> branch_395
 * [new branch]      branch_396 -> branch_396
 * [new branch]      branch_397 -> branch_397
 * [new branch]      branch_398 -> branch_398
 * [new branch]      branch_399 -> branch_399
 * [new branch]      branch_400 -> branch_400
 * [new branch]      branch_401 -> branch_401
 * [new branch]      branch_402 -> branch_402
 * [new branch]      branch_403 -> branch_403
 * [new branch]      branch_404 -> branch_404
 * [new branch]      branch_405 -> branch_405
 * [new branch]      branch_406 -> branch_406
 * [new branch]      branch_407 -> branch_407
 * [new branch]      branch_408 -> branch_408
 * [new branch]      branch_409 -> branch_409
 * [new branch]      branch_410 -> branch_410
 * [new branch]      branch_411 -> branch_411
 * [new branch]      branch_412 -> branch_412
 * [new branch]      branch_413 -> branch_413
 * [new branch]      branch_414 -> branch_414
 * [new branch]      branch_415 -> branch_415
 * [new branch]      branch_416 -> branch_416
 * [new branch]      branch_417 -> branch_417
 * [new branch]      branch_418 -> branch_418
 * [new branch]      branch_419 -> branch_419
 * [new branch]      branch_420 -> branch_420
 * [new branch]      branch_421 -> branch_421
 * [new branch]      branch_422 -> branch_422
 * [new branch]      branch_423 -> branch_423
 * [new branch]      branch_424 -> branch_424
 * [new branch]      branch_425 -> branch_425
 * [new branch]      branch_426 -> branch_426
 * [new branch]      branch_427 -> branch_427
 * [new branch]      branch_428 -> branch_428
 * [new branch]      branch_429 -> branch_429
 * [new branch]      branch_430 -> branch_430
 * [new branch]      branch_431 -> branch_431
 * [new branch]      branch_432 -> branch_432
 * [new branch]      branch_433 -> branch_433
 * [new branch]      branch_434 -> branch_434
 * [new branch]      branch_435 -> branch_435
 * [new branch]      branch_436 -> branch_436
 * [new branch]      branch_437 -> branch_437
 * [new branch]      branch_438 -> branch_438
 * [new branch]      branch_439 -> branch_439
 * [new branch]      branch_440 -> branch_440
 * [new branch]      branch_441 -> branch_441
 * [new branch]      branch_442 -> branch_442
 * [new branch]      branch_443 -> branch_443
 * [new branch]      branch_444 -> branch_444
 * [new branch]      branch_445 -> branch_445
 * [new branch]      branch_446 -> branch_446
 * [new branch]      branch_447 -> branch_447
 * [new branch]      branch_448 -> branch_448
 * [new branch]      branch_449 -> branch_449
 * [new branch]      branch_450 -> branch_450
 * [new branch]      branch_451 -> branch_451
 * [new branch]      branch_452 -> branch_452
 * [new branch]      branch_453 -> branch_453
 * [new branch]      branch_454 -> branch_454
 * [new branch]      branch_455 -> branch_455
 * [new branch]      branch_456 -> branch_456
 * [new branch]      branch_457 -> branch_457
 * [new branch]      branch_458 -> branch_458
 * [new branch]      branch_459 -> branch_459
 * [new branch]      branch_460 -> branch_460
 * [new branch]      branch_461 -> branch_461
 * [new branch]      branch_462 -> branch_462
 * [new branch]      branch_463 -> branch_463
 * [new branch]      branch_464 -> branch_464
 * [new branch]      branch_465 -> branch_465
 * [new branch]      branch_466 -> branch_466
 * [new branch]      branch_467 -> branch_467
 * [new branch]      branch_468 -> branch_468
 * [new branch]      branch_469 -> branch_469
 * [new branch]      branch_470 -> branch_470
 * [new branch]      branch_471 -> branch_471
 * [new branch]      branch_472 -> branch_472
 * [new branch]      branch_473 -> branch_473
 * [new branch]      branch_474 -> branch_474
 * [new branch]      branch_475 -> branch_475
 * [new branch]      branch_476 -> branch_476
 * [new branch]      branch_477 -> branch_477
 * [new branch]      branch_478 -> branch_478
 * [new branch]      branch_479 -> branch_479
 * [new branch]      branch_480 -> branch_480
 * [new branch]      branch_481 -> branch_481
 * [new branch]      branch_482 -> branch_482
 * [new branch]      branch_483 -> branch_483
 * [new branch]      branch_484 -> branch_484
 * [new branch]      branch_485 -> branch_485
 * [new branch]      branch_486 -> branch_486
 * [new branch]      branch_487 -> branch_487
 * [new branch]      branch_488 -> branch_488
 * [new branch]      branch_489 -> branch_489
 * [new branch]      branch_490 -> branch_490
 * [new branch]      branch_491 -> branch_491
 * [new branch]      branch_492 -> branch_492
 * [new branch]      branch_493 -> branch_493
 * [new branch]      branch_494 -> branch_494
 * [new branch]      branch_495 -> branch_495
 * [new branch]      branch_496 -> branch_496
 * [new branch]      branch_497 -> branch_497
 * [new branch]      branch_498 -> branch_498
 * [new branch]      branch_499 -> branch_499
 * [new branch]      branch_500 -> branch_500
 * [new branch]      branch_501 -> branch_501
 * [new branch]      branch_502 -> branch_502
 * [new branch]      branch_503 -> branch_503
 * [new branch]      branch_504 -> branch_504
 * [new branch]      branch_505 -> branch_505
 * [new branch]      branch_506 -> branch_506
 * [new branch]      branch_507 -> branch_507
 * [new branch]      branch_508 -> branch_508
 * [new branch]      branch_509 -> branch_509
 * [new branch]      branch_510 -> branch_510
 * [new branch]      branch_511 -> branch_511
 * [new branch]      branch_512 -> branch_512
 * [new branch]      branch_513 -> branch_513
 * [new branch]      branch_514 -> branch_514
 * [new branch]      branch_515 -> branch_515
 * [new branch]      branch_516 -> branch_516
 * [new branch]      branch_517 -> branch_517
 * [new branch]      branch_518 -> branch_518
 * [new branch]      branch_519 -> branch_519
 * [new branch]      branch_520 -> branch_520
 * [new branch]      branch_521 -> branch_521
 * [new branch]      branch_522 -> branch_522
 * [new branch]      branch_523 -> branch_523
 * [new branch]      branch_524 -> branch_524
 * [new branch]      branch_525 -> branch_525
 * [new branch]      branch_526 -> branch_526
 * [new branch]      branch_527 -> branch_527
 * [new branch]      branch_528 -> branch_528
 * [new branch]      branch_529 -> branch_529
 * [new branch]      branch_530 -> branch_530
 * [new branch]      branch_531 -> branch_531
 * [new branch]      branch_532 -> branch_532
 * [new branch]      branch_533 -> branch_533
 * [new branch]      branch_534 -> branch_534
 * [new branch]      branch_535 -> branch_535
 * [new branch]      branch_536 -> branch_536
 * [new branch]      branch_537 -> branch_537
 * [new branch]      branch_538 -> branch_538
 * [new branch]      branch_539 -> branch_539
 * [new branch]      branch_540 -> branch_540
 * [new branch]      branch_541 -> branch_541
 * [new branch]      branch_542 -> branch_542
 * [new branch]      branch_543 -> branch_543
 * [new branch]      branch_544 -> branch_544
 * [new branch]      branch_545 -> branch_545
 * [new branch]      branch_546 -> branch_546
 * [new branch]      branch_547 -> branch_547
 * [new branch]      branch_548 -> branch_548
 * [new branch]      branch_549 -> branch_549
 * [new branch]      branch_550 -> branch_550
 * [new branch]      branch_551 -> branch_551
 * [new branch]      branch_552 -> branch_552
 * [new branch]      branch_553 -> branch_553
 * [new branch]      branch_554 -> branch_554
 * [new branch]      branch_555 -> branch_555
 * [new branch]      branch_556 -> branch_556
 * [new branch]      branch_557 -> branch_557
 * [new branch]      branch_558 -> branch_558
 * [new branch]      branch_559 -> branch_559
 * [new branch]      branch_560 -> branch_560
 * [new branch]      branch_561 -> branch_561
 * [new branch]      branch_562 -> branch_562
 * [new branch]      branch_563 -> branch_563
 * [new branch]      branch_564 -> branch_564
 * [new branch]      branch_565 -> branch_565
 * [new branch]      branch_566 -> branch_566
 * [new branch]      branch_567 -> branch_567
 * [new branch]      branch_568 -> branch_568
 * [new branch]      branch_569 -> branch_569
 * [new branch]      branch_570 -> branch_570
 * [new branch]      branch_571 -> branch_571
 * [new branch]      branch_572 -> branch_572
 * [new branch]      branch_573 -> branch_573
 * [new branch]      branch_574 -> branch_574
 * [new branch]      branch_575 -> branch_575
 * [new branch]      branch_576 -> branch_576
 * [new branch]      branch_577 -> branch_577
 * [new branch]      branch_578 -> branch_578
 * [new branch]      branch_579 -> branch_579
 * [new branch]      branch_580 -> branch_580
 * [new branch]      branch_581 -> branch_581
 * [new branch]      branch_582 -> branch_582
 * [new branch]      branch_583 -> branch_583
 * [new branch]      branch_584 -> branch_584
 * [new branch]      branch_585 -> branch_585
 * [new branch]      branch_586 -> branch_586
 * [new branch]      branch_587 -> branch_587
 * [new branch]      branch_588 -> branch_588
 * [new branch]      branch_589 -> branch_589
 * [new branch]      branch_590 -> branch_590
 * [new branch]      branch_591 -> branch_591
 * [new branch]      branch_592 -> branch_592
 * [new branch]      branch_593 -> branch_593
 * [new branch]      branch_594 -> branch_594
 * [new branch]      branch_595 -> branch_595
 * [new branch]      branch_596 -> branch_596
 * [new branch]      branch_597 -> branch_597
 * [new branch]      branch_598 -> branch_598
 * [new branch]      branch_599 -> branch_599
 * [new branch]      branch_600 -> branch_600
 * [new branch]      branch_601 -> branch_601
 * [new branch]      branch_602 -> branch_602
 * [new branch]      branch_603 -> branch_603
 * [new branch]      branch_604 -> branch_604
 * [new branch]      branch_605 -> branch_605
 * [new branch]      branch_606 -> branch_606
 * [new branch]      branch_607 -> branch_607
 * [new branch]      branch_608 -> branch_608
 * [new branch]      branch_609 -> branch_609
 * [new branch]      branch_610 -> branch_610
 * [new branch]      branch_611 -> branch_611
 * [new branch]      branch_612 -> branch_612
 * [new branch]      branch_613 -> branch_613
 * [new branch]      branch_614 -> branch_614
 * [new branch]      branch_615 -> branch_615
 * [new branch]      branch_616 -> branch_616
 * [new branch]      branch_617 -> branch_617
 * [new branch]      branch_618 -> branch_618
 * [new branch]      branch_619 -> branch_619
 * [new branch]      branch_620 -> branch_620
 * [new branch]      branch_621 -> branch_621
 * [new branch]      branch_622 -> branch_622
 * [new branch]      branch_623 -> branch_623
 * [new branch]      branch_624 -> branch_624
 * [new branch]      branch_625 -> branch_625
 * [new branch]      branch_626 -> branch_626
 * [new branch]      branch_627 -> branch_627
 * [new branch]      branch_628 -> branch_628
 * [new branch]      branch_629 -> branch_629
 * [new branch]      branch_630 -> branch_630
 * [new branch]      branch_631 -> branch_631
 * [new branch]      branch_632 -> branch_632
 * [new branch]      branch_633 -> branch_633
 * [new branch]      branch_634 -> branch_634
 * [new branch]      branch_635 -> branch_635
 * [new branch]      branch_636 -> branch_636
 * [new branch]      branch_637 -> branch_637
 * [new branch]      branch_638 -> branch_638
 * [new branch]      branch_639 -> branch_639
 * [new branch]      branch_640 -> branch_640
 * [new branch]      branch_641 -> branch_641
 * [new branch]      branch_642 -> branch_642
 * [new branch]      branch_643 -> branch_643
 * [new branch]      branch_644 -> branch_644
 * [new branch]      branch_645 -> branch_645
 * [new branch]      branch_646 -> branch_646
 * [new branch]      branch_647 -> branch_647
 * [new branch]      branch_648 -> branch_648
 * [new branch]      branch_649 -> branch_649
 * [new branch]      branch_650 -> branch_650
 * [new branch]      branch_651 -> branch_651
 * [new branch]      branch_652 -> branch_652
 * [new branch]      branch_653 -> branch_653
 * [new branch]      branch_654 -> branch_654
 * [new branch]      branch_655 -> branch_655
 * [new branch]      branch_656 -> branch_656
 * [new branch]      branch_657 -> branch_657
 * [new branch]      branch_658 -> branch_658
 * [new branch]      branch_659 -> branch_659
 * [new branch]      branch_660 -> branch_660
 * [new branch]      branch_661 -> branch_661
 * [new branch]      branch_662 -> branch_662
 * [new branch]      branch_663 -> branch_663
 * [new branch]      branch_664 -> branch_664
 * [new branch]      branch_665 -> branch_665
 * [new branch]      branch_666 -> branch_666
 * [new branch]      branch_667 -> branch_667
 * [new branch]      branch_668 -> branch_668
 * [new branch]      branch_669 -> branch_669
 * [new branch]      branch_670 -> branch_670
 * [new branch]      branch_671 -> branch_671
 * [new branch]      branch_672 -> branch_672
 * [new branch]      branch_673 -> branch_673
 * [new branch]      branch_674 -> branch_674
 * [new branch]      branch_675 -> branch_675
 * [new branch]      branch_676 -> branch_676
 * [new branch]      branch_677 -> branch_677
 * [new branch]      branch_678 -> branch_678
 * [new branch]      branch_679 -> branch_679
 * [new branch]      branch_680 -> branch_680
 * [new branch]      branch_681 -> branch_681
 * [new branch]      branch_682 -> branch_682
 * [new branch]      branch_683 -> branch_683
 * [new branch]      branch_684 -> branch_684
 * [new branch]      branch_685 -> branch_685
 * [new branch]      branch_686 -> branch_686
 * [new branch]      branch_687 -> branch_687
 * [new branch]      branch_688 -> branch_688
 * [new branch]      branch_689 -> branch_689
 * [new branch]      branch_690 -> branch_690
 * [new branch]      branch_691 -> branch_691
 * [new branch]      branch_692 -> branch_692
 * [new branch]      branch_693 -> branch_693
 * [new branch]      branch_694 -> branch_694
 * [new branch]      branch_695 -> branch_695
 * [new branch]      branch_696 -> branch_696
 * [new branch]      branch_697 -> branch_697
 * [new branch]      branch_698 -> branch_698
 * [new branch]      branch_699 -> branch_699
 * [new branch]      branch_700 -> branch_700
 * [new branch]      branch_701 -> branch_701
 * [new branch]      branch_702 -> branch_702
 * [new branch]      branch_703 -> branch_703
 * [new branch]      branch_704 -> branch_704
 * [new branch]      branch_705 -> branch_705
 * [new branch]      branch_706 -> branch_706
 * [new branch]      branch_707 -> branch_707
 * [new branch]      branch_708 -> branch_708
 * [new branch]      branch_709 -> branch_709
 * [new branch]      branch_710 -> branch_710
 * [new branch]      branch_711 -> branch_711
 * [new branch]      branch_712 -> branch_712
 * [new branch]      branch_713 -> branch_713
 * [new branch]      branch_714 -> branch_714
 * [new branch]      branch_715 -> branch_715
 * [new branch]      branch_716 -> branch_716
 * [new branch]      branch_717 -> branch_717
 * [new branch]      branch_718 -> branch_718
 * [new branch]      branch_719 -> branch_719
 * [new branch]      branch_720 -> branch_720
 * [new branch]      branch_721 -> branch_721
 * [new branch]      branch_722 -> branch_722
 * [new branch]      branch_723 -> branch_723
 * [new branch]      branch_724 -> branch_724
 * [new branch]      branch_725 -> branch_725
 * [new branch]      branch_726 -> branch_726
 * [new branch]      branch_727 -> branch_727
 * [new branch]      branch_728 -> branch_728
 * [new branch]      branch_729 -> branch_729
 * [new branch]      branch_730 -> branch_730
 * [new branch]      branch_731 -> branch_731
 * [new branch]      branch_732 -> branch_732
 * [new branch]      branch_733 -> branch_733
 * [new branch]      branch_734 -> branch_734
 * [new branch]      branch_735 -> branch_735
 * [new branch]      branch_736 -> branch_736
 * [new branch]      branch_737 -> branch_737
 * [new branch]      branch_738 -> branch_738
 * [new branch]      branch_739 -> branch_739
 * [new branch]      branch_740 -> branch_740
 * [new branch]      branch_741 -> branch_741
 * [new branch]      branch_742 -> branch_742
 * [new branch]      branch_743 -> branch_743
 * [new branch]      branch_744 -> branch_744
 * [new branch]      branch_745 -> branch_745
 * [new branch]      branch_746 -> branch_746
 * [new branch]      branch_747 -> branch_747
 * [new branch]      branch_748 -> branch_748
 * [new branch]      branch_749 -> branch_749
 * [new branch]      branch_750 -> branch_750
 * [new branch]      branch_751 -> branch_751
 * [new branch]      branch_752 -> branch_752
 * [new branch]      branch_753 -> branch_753
 * [new branch]      branch_754 -> branch_754
 * [new branch]      branch_755 -> branch_755
 * [new branch]      branch_756 -> branch_756
 * [new branch]      branch_757 -> branch_757
 * [new branch]      branch_758 -> branch_758
 * [new branch]      branch_759 -> branch_759
 * [new branch]      branch_760 -> branch_760
 * [new branch]      branch_761 -> branch_761
 * [new branch]      branch_762 -> branch_762
 * [new branch]      branch_763 -> branch_763
 * [new branch]      branch_764 -> branch_764
 * [new branch]      branch_765 -> branch_765
 * [new branch]      branch_766 -> branch_766
 * [new branch]      branch_767 -> branch_767
 * [new branch]      branch_768 -> branch_768
 * [new branch]      branch_769 -> branch_769
 * [new branch]      branch_770 -> branch_770
 * [new branch]      branch_771 -> branch_771
 * [new branch]      branch_772 -> branch_772
 * [new branch]      branch_773 -> branch_773
 * [new branch]      branch_774 -> branch_774
 * [new branch]      branch_775 -> branch_775
 * [new branch]      branch_776 -> branch_776
 * [new branch]      branch_777 -> branch_777
 * [new branch]      branch_778 -> branch_778
 * [new branch]      branch_779 -> branch_779
 * [new branch]      branch_780 -> branch_780
 * [new branch]      branch_781 -> branch_781
 * [new branch]      branch_782 -> branch_782
 * [new branch]      branch_783 -> branch_783
 * [new branch]      branch_784 -> branch_784
 * [new branch]      branch_785 -> branch_785
 * [new branch]      branch_786 -> branch_786
 * [new branch]      branch_787 -> branch_787
 * [new branch]      branch_788 -> branch_788
 * [new branch]      branch_789 -> branch_789
 * [new branch]      branch_790 -> branch_790
 * [new branch]      branch_791 -> branch_791
 * [new branch]      branch_792 -> branch_792
 * [new branch]      branch_793 -> branch_793
 * [new branch]      branch_794 -> branch_794
 * [new branch]      branch_795 -> branch_795
 * [new branch]      branch_796 -> branch_796
 * [new branch]      branch_797 -> branch_797
 * [new branch]      branch_798 -> branch_798
 * [new branch]      branch_799 -> branch_799
 * [new branch]      branch_800 -> branch_800
 * [new branch]      branch_801 -> branch_801
 * [new branch]      branch_802 -> branch_802
 * [new branch]      branch_803 -> branch_803
 * [new branch]      branch_804 -> branch_804
 * [new branch]      branch_805 -> branch_805
 * [new branch]      branch_806 -> branch_806
 * [new branch]      branch_807 -> branch_807
 * [new branch]      branch_808 -> branch_808
 * [new branch]      branch_809 -> branch_809
 * [new branch]      branch_810 -> branch_810
 * [new branch]      branch_811 -> branch_811
 * [new branch]      branch_812 -> branch_812
 * [new branch]      branch_813 -> branch_813
 * [new branch]      branch_814 -> branch_814
 * [new branch]      branch_815 -> branch_815
 * [new branch]      branch_816 -> branch_816
 * [new branch]      branch_817 -> branch_817
 * [new branch]      branch_818 -> branch_818
 * [new branch]      branch_819 -> branch_819
 * [new branch]      branch_820 -> branch_820
 * [new branch]      branch_821 -> branch_821
 * [new branch]      branch_822 -> branch_822
 * [new branch]      branch_823 -> branch_823
 * [new branch]      branch_824 -> branch_824
 * [new branch]      branch_825 -> branch_825
 * [new branch]      branch_826 -> branch_826
 * [new branch]      branch_827 -> branch_827
 * [new branch]      branch_828 -> branch_828
 * [new branch]      branch_829 -> branch_829
 * [new branch]      branch_830 -> branch_830
 * [new branch]      branch_831 -> branch_831
 * [new branch]      branch_832 -> branch_832
 * [new branch]      branch_833 -> branch_833
 * [new branch]      branch_834 -> branch_834
 * [new branch]      branch_835 -> branch_835
 * [new branch]      branch_836 -> branch_836
 * [new branch]      branch_837 -> branch_837
 * [new branch]      branch_838 -> branch_838
 * [new branch]      branch_839 -> branch_839
 * [new branch]      branch_840 -> branch_840
 * [new branch]      branch_841 -> branch_841
 * [new branch]      branch_842 -> branch_842
 * [new branch]      branch_843 -> branch_843
 * [new branch]      branch_844 -> branch_844
 * [new branch]      branch_845 -> branch_845
 * [new branch]      branch_846 -> branch_846
 * [new branch]      branch_847 -> branch_847
 * [new branch]      branch_848 -> branch_848
 * [new branch]      branch_849 -> branch_849
 * [new branch]      branch_850 -> branch_850
 * [new branch]      branch_851 -> branch_851
 * [new branch]      branch_852 -> branch_852
 * [new branch]      branch_853 -> branch_853
 * [new branch]      branch_854 -> branch_854
 * [new branch]      branch_855 -> branch_855
 * [new branch]      branch_856 -> branch_856
 * [new branch]      branch_857 -> branch_857
 * [new branch]      branch_858 -> branch_858
 * [new branch]      branch_859 -> branch_859
 * [new branch]      branch_860 -> branch_860
 * [new branch]      branch_861 -> branch_861
 * [new branch]      branch_862 -> branch_862
 * [new branch]      branch_863 -> branch_863
 * [new branch]      branch_864 -> branch_864
 * [new branch]      branch_865 -> branch_865
 * [new branch]      branch_866 -> branch_866
 * [new branch]      branch_867 -> branch_867
 * [new branch]      branch_868 -> branch_868
 * [new branch]      branch_869 -> branch_869
 * [new branch]      branch_870 -> branch_870
 * [new branch]      branch_871 -> branch_871
 * [new branch]      branch_872 -> branch_872
 * [new branch]      branch_873 -> branch_873
 * [new branch]      branch_874 -> branch_874
 * [new branch]      branch_875 -> branch_875
 * [new branch]      branch_876 -> branch_876
 * [new branch]      branch_877 -> branch_877
 * [new branch]      branch_878 -> branch_878
 * [new branch]      branch_879 -> branch_879
 * [new branch]      branch_880 -> branch_880
 * [new branch]      branch_881 -> branch_881
 * [new branch]      branch_882 -> branch_882
 * [new branch]      branch_883 -> branch_883
 * [new branch]      branch_884 -> branch_884
 * [new branch]      branch_885 -> branch_885
 * [new branch]      branch_886 -> branch_886
 * [new branch]      branch_887 -> branch_887
 * [new branch]      branch_888 -> branch_888
 * [new branch]      branch_889 -> branch_889
 * [new branch]      branch_890 -> branch_890
 * [new branch]      branch_891 -> branch_891
 * [new branch]      branch_892 -> branch_892
 * [new branch]      branch_893 -> branch_893
 * [new branch]      branch_894 -> branch_894
 * [new branch]      branch_895 -> branch_895
 * [new branch]      branch_896 -> branch_896
 * [new branch]      branch_897 -> branch_897
 * [new branch]      branch_898 -> branch_898
 * [new branch]      branch_899 -> branch_899
 * [new branch]      branch_900 -> branch_900
 * [new branch]      branch_901 -> branch_901
 * [new branch]      branch_902 -> branch_902
 * [new branch]      branch_903 -> branch_903
 * [new branch]      branch_904 -> branch_904
 * [new branch]      branch_905 -> branch_905
 * [new branch]      branch_906 -> branch_906
 * [new branch]      branch_907 -> branch_907
 * [new branch]      branch_908 -> branch_908
 * [new branch]      branch_909 -> branch_909
 * [new branch]      branch_910 -> branch_910
 * [new branch]      branch_911 -> branch_911
 * [new branch]      branch_912 -> branch_912
 * [new branch]      branch_913 -> branch_913
 * [new branch]      branch_914 -> branch_914
 * [new branch]      branch_915 -> branch_915
 * [new branch]      branch_916 -> branch_916
 * [new branch]      branch_917 -> branch_917
 * [new branch]      branch_918 -> branch_918
 * [new branch]      branch_919 -> branch_919
 * [new branch]      branch_920 -> branch_920
 * [new branch]      branch_921 -> branch_921
 * [new branch]      branch_922 -> branch_922
 * [new branch]      branch_923 -> branch_923
 * [new branch]      branch_924 -> branch_924
 * [new branch]      branch_925 -> branch_925
 * [new branch]      branch_926 -> branch_926
 * [new branch]      branch_927 -> branch_927
 * [new branch]      branch_928 -> branch_928
 * [new branch]      branch_929 -> branch_929
 * [new branch]      branch_930 -> branch_930
 * [new branch]      branch_931 -> branch_931
 * [new branch]      branch_932 -> branch_932
 * [new branch]      branch_933 -> branch_933
 * [new branch]      branch_934 -> branch_934
 * [new branch]      branch_935 -> branch_935
 * [new branch]      branch_936 -> branch_936
 * [new branch]      branch_937 -> branch_937
 * [new branch]      branch_938 -> branch_938
 * [new branch]      branch_939 -> branch_939
 * [new branch]      branch_940 -> branch_940
 * [new branch]      branch_941 -> branch_941
 * [new branch]      branch_942 -> branch_942
 * [new branch]      branch_943 -> branch_943
 * [new branch]      branch_944 -> branch_944
 * [new branch]      branch_945 -> branch_945
 * [new branch]      branch_946 -> branch_946
 * [new branch]      branch_947 -> branch_947
 * [new branch]      branch_948 -> branch_948
 * [new branch]      branch_949 -> branch_949
 * [new branch]      branch_950 -> branch_950
 * [new branch]      branch_951 -> branch_951
 * [new branch]      branch_952 -> branch_952
 * [new branch]      branch_953 -> branch_953
 * [new branch]      branch_954 -> branch_954
 * [new branch]      branch_955 -> branch_955
 * [new branch]      branch_956 -> branch_956
 * [new branch]      branch_957 -> branch_957
 * [new branch]      branch_958 -> branch_958
 * [new branch]      branch_959 -> branch_959
 * [new branch]      branch_960 -> branch_960
 * [new branch]      branch_961 -> branch_961
 * [new branch]      branch_962 -> branch_962
 * [new branch]      branch_963 -> branch_963
 * [new branch]      branch_964 -> branch_964
 * [new branch]      branch_965 -> branch_965
 * [new branch]      branch_966 -> branch_966
 * [new branch]      branch_967 -> branch_967
 * [new branch]      branch_968 -> branch_968
 * [new branch]      branch_969 -> branch_969
 * [new branch]      branch_970 -> branch_970
 * [new branch]      branch_971 -> branch_971
 * [new branch]      branch_972 -> branch_972
 * [new branch]      branch_973 -> branch_973
 * [new branch]      branch_974 -> branch_974
 * [new branch]      branch_975 -> branch_975
 * [new branch]      branch_976 -> branch_976
 * [new branch]      branch_977 -> branch_977
 * [new branch]      branch_978 -> branch_978
 * [new branch]      branch_979 -> branch_979
 * [new branch]      branch_980 -> branch_980
 * [new branch]      branch_981 -> branch_981
 * [new branch]      branch_982 -> branch_982
 * [new branch]      branch_983 -> branch_983
 * [new branch]      branch_984 -> branch_984
 * [new branch]      branch_985 -> branch_985
 * [new branch]      branch_986 -> branch_986
 * [new branch]      branch_987 -> branch_987
 * [new branch]      branch_988 -> branch_988
 * [new branch]      branch_989 -> branch_989
 * [new branch]      branch_990 -> branch_990
 * [new branch]      branch_991 -> branch_991
 * [new branch]      branch_992 -> branch_992
 * [new branch]      branch_993 -> branch_993
 * [new branch]      branch_994 -> branch_994
 * [new branch]      branch_995 -> branch_995
 * [new branch]      branch_996 -> branch_996
 * [new branch]      branch_997 -> branch_997
 * [new branch]      branch_998 -> branch_998
 * [new branch]      branch_999 -> branch_999
ok 13 - pre-receive hook that forgets to read its input

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5410-receive-pack-alternates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5410-receive-pack-alternates/.git/
expecting success of 5410.1 'setup': 
	test_commit base &&
	git clone -s --bare . fork &&
	git checkout -b public/branch main &&
	test_commit public &&
	git checkout -b private/branch main &&
	test_commit private

[main (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Cloning into bare repository 'fork'...
done.
Switched to a new branch 'public/branch'
[public/branch d7bb355] public
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 public.t
Switched to a new branch 'private/branch'
[private/branch 9725dbe] private
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 private.t
ok 1 - setup

expecting success of 5410.2 'with core.alternateRefsCommand': 
	write_script fork/alternate-refs <<-\EOF &&
		git --git-dir="$1" for-each-ref \
			--format="%(objectname)" \
			refs/heads/public/
	EOF
	test_config -C fork core.alternateRefsCommand ./alternate-refs &&
	git rev-parse public/branch >expect &&
	printf "0000" | git receive-pack fork >actual &&
	extract_haves <actual >actual.haves &&
	test_cmp expect actual.haves

ok 2 - with core.alternateRefsCommand

expecting success of 5410.3 'with core.alternateRefsPrefixes': 
	test_config -C fork core.alternateRefsPrefixes "refs/heads/private" &&
	git rev-parse private/branch >expect &&
	printf "0000" | git receive-pack fork >actual &&
	extract_haves <actual >actual.haves &&
	test_cmp expect actual.haves

ok 3 - with core.alternateRefsPrefixes

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5409-colorize-remote-messages.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5409-colorize-remote-messages/.git/
expecting success of 5409.1 'setup': 
	test_hook --setup update <<-\EOF &&
	echo error: error
	echo ERROR: also highlighted
	echo hint: hint
	echo hinting: not highlighted
	echo success: success
	echo warning: warning
	echo prefixerror: error
	echo " " "error: leading space"
	echo "    "
	echo Err
	echo SUCCESS
	exit 0
	EOF
	echo 1 >file &&
	git add file &&
	git commit -m 1 &&
	git clone . child &&
	(
		cd child &&
		test_commit message2 file content2
	)

[master (root-commit) c663a66] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'child'...
done.
[master 9f21087] message2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5409.2 'keywords': 
	git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/keywords 2>output &&
	test_decode_color <output >decoded &&
	grep "<BOLD;RED>error<RESET>: error" decoded &&
	grep "<YELLOW>hint<RESET>:" decoded &&
	grep "<BOLD;GREEN>success<RESET>:" decoded &&
	grep "<BOLD;GREEN>SUCCESS<RESET>" decoded &&
	grep "<BOLD;YELLOW>warning<RESET>:" decoded

remote: <BOLD;RED>error<RESET>: error        
remote: <YELLOW>hint<RESET>: hint        
remote: <BOLD;GREEN>success<RESET>: success        
remote: <BOLD;GREEN>SUCCESS<RESET>        
remote: <BOLD;YELLOW>warning<RESET>: warning        
ok 2 - keywords

expecting success of 5409.3 'whole words at line start': 
	git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/whole-words 2>output &&
	test_decode_color <output >decoded &&
	grep "<YELLOW>hint<RESET>:" decoded &&
	grep "hinting: not highlighted" decoded &&
	grep "prefixerror: error" decoded

remote: <YELLOW>hint<RESET>: hint        
remote: hinting: not highlighted        
remote: prefixerror: error        
ok 3 - whole words at line start

expecting success of 5409.4 'short line': 
	git -C child -c color.remote=always push -f origin HEAD:short-line 2>output &&
	test_decode_color <output >decoded &&
	grep "remote: Err" decoded

remote: Err        
ok 4 - short line

expecting success of 5409.5 'case-insensitive': 
	git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/case-insensitive 2>output &&
	test_decode_color <output >decoded &&
	grep "<BOLD;RED>error<RESET>: error" decoded &&
	grep "<BOLD;RED>ERROR<RESET>: also highlighted" decoded

remote: <BOLD;RED>error<RESET>: error        
remote: <BOLD;RED>ERROR<RESET>: also highlighted        
ok 5 - case-insensitive

expecting success of 5409.6 'leading space': 
	git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/leading-space 2>output &&
	test_decode_color <output >decoded &&
	grep "  <BOLD;RED>error<RESET>: leading space" decoded

remote:   <BOLD;RED>error<RESET>: leading space        
ok 6 - leading space

expecting success of 5409.7 'spaces only': 
	git -C child -c color.remote=always push -f origin HEAD:only-space 2>output &&
	test_decode_color <output >decoded &&
	grep "remote:     " decoded

remote:             
ok 7 - spaces only

expecting success of 5409.8 'no coloring for redirected output': 
	git --git-dir child/.git push -f origin HEAD:refs/heads/redirected-output 2>output &&
	test_decode_color <output >decoded &&
	grep "error: error" decoded

remote: error: error        
remote: prefixerror: error        
ok 8 - no coloring for redirected output

expecting success of 5409.9 'push with customized color': 
	git --git-dir child/.git -c color.remote=always -c color.remote.error=blue push -f origin HEAD:refs/heads/customized-color 2>output &&
	test_decode_color <output >decoded &&
	grep "<BLUE>error<RESET>:" decoded &&
	grep "<BOLD;GREEN>success<RESET>:" decoded

remote: <BLUE>error<RESET>: error        
remote:   <BLUE>error<RESET>: leading space        
remote: <BOLD;GREEN>success<RESET>: success        
ok 9 - push with customized color

expecting success of 5409.10 'error in customized color': 
	git --git-dir child/.git -c color.remote=always -c color.remote.error=i-am-not-a-color push -f origin HEAD:refs/heads/error-customized-color 2>output &&
	test_decode_color <output >decoded &&
	grep "<BOLD;GREEN>success<RESET>:" decoded

remote: <BOLD;GREEN>success<RESET>: success        
ok 10 - error in customized color

expecting success of 5409.11 'fallback to color.ui': 
	git --git-dir child/.git -c color.ui=always push -f origin HEAD:refs/heads/fallback-color-ui 2>output &&
	test_decode_color <output >decoded &&
	grep "<BOLD;RED>error<RESET>: error" decoded

remote: <BOLD;RED>error<RESET>: error        
ok 11 - fallback to color.ui

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5407-post-rewrite-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5407-post-rewrite-hook/.git/
expecting success of 5407.1 'setup': 
	test_commit A foo A &&
	test_commit B foo B &&
	test_commit C foo C &&
	test_commit D foo D &&
	git checkout A^0 &&
	test_commit E bar E &&
	test_commit F foo F &&
	git checkout main &&

	test_hook --setup post-rewrite <<-EOF
	echo \$@ > "$TRASH_DIRECTORY"/post-rewrite.args
	cat > "$TRASH_DIRECTORY"/post-rewrite.data
	EOF

[main (root-commit) be6e19b] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main df02547] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2362ae8] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main babc8a4] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at be6e19b A
[detached HEAD 5baa167] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[detached HEAD 38c24e8] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Previous HEAD position was 38c24e8 F
Switched to branch 'main'
ok 1 - setup

expecting success of 5407.2 'git commit --amend': 
	clear_hook_input &&
	echo "D new message" > newmsg &&
	oldsha=$(git rev-parse HEAD^0) &&
	git commit -Fnewmsg --amend &&
	echo amend > expected.args &&
	echo $oldsha $(git rev-parse HEAD^0) > expected.data &&
	verify_hook_input

[main 1333da2] D new message
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - git commit --amend

expecting success of 5407.3 'git commit --amend --no-post-rewrite': 
	clear_hook_input &&
	echo "D new message again" > newmsg &&
	git commit --no-post-rewrite -Fnewmsg --amend &&
	test ! -f post-rewrite.args &&
	test ! -f post-rewrite.data

[main 18a65a5] D new message again
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - git commit --amend --no-post-rewrite

expecting success of 5407.4 'git rebase --apply': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase --apply --onto A B &&
	echo C > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
First, rewinding head to replay your work on top of it...
Applying: C
Using index info to reconstruct a base tree...
M	foo
Falling back to patching base and 3-way merge...
Merging:
be6e19b A
virtual C
found 1 common ancestor:
virtual e6a635ee70776f6585de405639ebebd74da5c390
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 C
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: C
Applying: D
ok 4 - git rebase --apply

expecting success of 5407.5 'git rebase --apply --skip': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase --apply --onto A B &&
	test_must_fail git rebase --skip &&
	echo D > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
First, rewinding head to replay your work on top of it...
Applying: C
Using index info to reconstruct a base tree...
M	foo
Falling back to patching base and 3-way merge...
Merging:
be6e19b A
virtual C
found 1 common ancestor:
virtual e6a635ee70776f6585de405639ebebd74da5c390
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 C
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: D
Using index info to reconstruct a base tree...
M	foo
Falling back to patching base and 3-way merge...
Merging:
be6e19b A
virtual D
found 1 common ancestor:
virtual a0d64960e32dc5d0cf8eff7ded11a413a31c0891
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 D
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Applying: D
ok 5 - git rebase --apply --skip

expecting success of 5407.6 'git rebase --apply --skip the last one': 
	git reset --hard F &&
	clear_hook_input &&
	test_must_fail git rebase --apply --onto D A &&
	git rebase --skip &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse E) $(git rev-parse HEAD)
	$(git rev-parse F) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at 38c24e8 F
First, rewinding head to replay your work on top of it...
Applying: E
Applying: F
Using index info to reconstruct a base tree...
M	foo
Falling back to patching base and 3-way merge...
Merging:
726c769 E
virtual F
found 1 common ancestor:
virtual bdb58bd8ea55127260d069a5e7ee2995726633f9
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 F
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 6 - git rebase --apply --skip the last one

expecting success of 5407.7 'git rebase -m': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase -m --onto A B &&
	echo C > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
[detached HEAD bd57595] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 7 - git rebase -m

expecting success of 5407.8 'git rebase -m --skip': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase -m --onto A B &&
	test_must_fail git rebase --skip &&
	echo D > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
Rebasing (2/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply babc8a4... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply babc8a4... D
[detached HEAD a087d55] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 8 - git rebase -m --skip

expecting success of 5407.9 'git rebase with implicit use of merge backend': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase --keep-empty --onto A B &&
	echo C > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
[detached HEAD bd57595] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 9 - git rebase with implicit use of merge backend

expecting success of 5407.10 'git rebase --skip with implicit use of merge backend': 
	git reset --hard D &&
	clear_hook_input &&
	test_must_fail git rebase --keep-empty --onto A B &&
	test_must_fail git rebase --skip &&
	echo D > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
Rebasing (2/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply babc8a4... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply babc8a4... D
[detached HEAD a087d55] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 10 - git rebase --skip with implicit use of merge backend

expecting success of 5407.11 'git rebase -i (unchanged)': 
	git reset --hard D &&
	clear_hook_input &&
	test_fail_interactive_rebase "1 2" --onto A B &&
	echo C > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
pick 2362ae8 C
pick babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
[detached HEAD bd57595] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 11 - git rebase -i (unchanged)

expecting success of 5407.12 'git rebase -i (skip)': 
	git reset --hard D &&
	clear_hook_input &&
	test_fail_interactive_rebase "2" --onto A B &&
	echo D > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
pick babc8a4 D
Rebasing (1/1)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply babc8a4... D
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply babc8a4... D
[detached HEAD a087d55] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 12 - git rebase -i (skip)

expecting success of 5407.13 'git rebase -i (squash)': 
	git reset --hard D &&
	clear_hook_input &&
	test_fail_interactive_rebase "1 squash 2" --onto A B &&
	echo C > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
pick 2362ae8 C
squash babc8a4 D
Rebasing (1/2)
Auto-merging foo
CONFLICT (content): Merge conflict in foo
error: could not apply 2362ae8... C
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 2362ae8... C
[detached HEAD bd57595] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/2)
[detached HEAD 341a9e4] C
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 13 - git rebase -i (squash)

expecting success of 5407.14 'git rebase -i (fixup without conflict)': 
	git reset --hard D &&
	clear_hook_input &&
	FAKE_LINES="1 fixup 2" git rebase -i B &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
pick 2362ae8 C
fixup babc8a4 D
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 14 - git rebase -i (fixup without conflict)

expecting success of 5407.15 'git rebase -i (double edit)': 
	git reset --hard D &&
	clear_hook_input &&
	FAKE_LINES="edit 1 edit 2" git rebase -i B &&
	git rebase --continue &&
	echo something > foo &&
	git add foo &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
edit 2362ae8 C
edit babc8a4 D
Rebasing (1/2)

                                                                                
Stopped at 2362ae8...  C
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/2)

                                                                                
Stopped at babc8a4...  D
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 4d045be] D
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 15 - git rebase -i (double edit)

expecting success of 5407.16 'git rebase -i (exec)': 
	git reset --hard D &&
	clear_hook_input &&
	FAKE_LINES="edit 1 exec_false 2" git rebase -i B &&
	echo something >bar &&
	git add bar &&
	# Fails because of exec false
	test_must_fail git rebase --continue &&
	git rebase --continue &&
	echo rebase >expected.args &&
	cat >expected.data <<-EOF &&
	$(git rev-parse C) $(git rev-parse HEAD^)
	$(git rev-parse D) $(git rev-parse HEAD)
	EOF
	verify_hook_input

HEAD is now at babc8a4 D
rebase -i script before editing:
pick 2362ae8 C
pick babc8a4 D

rebase -i script after editing:
edit 2362ae8 C
exec false
pick babc8a4 D
Rebasing (1/3)

                                                                                
Stopped at 2362ae8...  C
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 488028e] C
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 bar
Rebasing (2/3)

                                                                                
Executing: false
warning: execution failed: false
You can fix the problem, and then run

  git rebase --continue


Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/main.
ok 16 - git rebase -i (exec)

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5326-multi-pack-bitmaps.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.git/
expecting success of 5326.1 'setup test_repository': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable false
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.git/
ok 1 - setup test_repository

expecting success of 5326.2 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2283 /       2283
---------------------------------------------------------------------

Switched to a new branch 'other'
87e15289879c5c34553169b2be5c9d6b111519b2
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4747 /       4747
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 90a1514..63e663a
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 6a83e25..58d166b
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was f47c2b6).
Deleted branch merge-right (was ba9a821).
Deleted branch octo-other (was 63e663a).
Deleted branch octo-second (was 58d166b).
58d166b12a4ce065824c4a21dd38aef9f2d94667
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26599 /      26599
---------------------------------------------------------------------

Switched to branch 'other'
63e663a9348fa8f46b3f8835cb82274158356e6a
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26765 /      26765
---------------------------------------------------------------------

Switched to branch 'second'
ok 2 - setup repo with moderate-sized history

expecting success of 5326.3 'create single-pack midx with bitmaps': 
		git repack -ad &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 3 - create single-pack midx with bitmaps

expecting success of 5326.4 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (106 entries loaded)
Found bitmap for '4b27f21bf7560051516fe49b50eb4063d0ea6f90'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
{"event":"data","sid":"20221228T074834.753811Z-Hc64317c2-P00000718","thread":"main","time":"2022-12-28T07:48:34.767153Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016926,"t_rel":0.016926,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 4 - reverse index exists (midx)

expecting success of 5326.5 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries loaded)
Found bitmap for '4b27f21bf7560051516fe49b50eb4063d0ea6f90'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 5 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.6 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 6 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.7 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 7 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.8 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 8 - counting commits with limit (full bitmap, second)

expecting success of 5326.9 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 9 - counting non-linear history (full bitmap, second)

expecting success of 5326.10 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 10 - counting commits with limiting (full bitmap, second)

expecting success of 5326.11 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 11 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.12 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 12 - enumerate commits (full bitmap, second)

expecting success of 5326.13 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 13 - enumerate --objects (full bitmap, second)

expecting success of 5326.14 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 14 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.15 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 15 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.16 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 16 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.17 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 17 - counting commits with limit (full bitmap, other)

expecting success of 5326.18 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 18 - counting non-linear history (full bitmap, other)

expecting success of 5326.19 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 19 - counting commits with limiting (full bitmap, other)

expecting success of 5326.20 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 20 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.21 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 21 - enumerate commits (full bitmap, other)

expecting success of 5326.22 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 22 - enumerate --objects (full bitmap, other)

expecting success of 5326.23 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 23 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.24 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 24 - clone from bitmapped repository

expecting success of 5326.25 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 25 - partial clone from bitmapped repository

expecting success of 5326.26 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
4b27f21bf7560051516fe49b50eb4063d0ea6f90
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58718 /      58718
---------------------------------------------------------------------

ok 26 - setup further non-bitmapped commits

expecting success of 5326.27 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 27 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.28 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 28 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.29 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 29 - counting commits with limit (partial bitmap, second)

expecting success of 5326.30 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 30 - counting non-linear history (partial bitmap, second)

expecting success of 5326.31 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 31 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.32 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 32 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.33 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 33 - enumerate commits (partial bitmap, second)

expecting success of 5326.34 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 34 - enumerate --objects (partial bitmap, second)

expecting success of 5326.35 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 35 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.36 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 36 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.37 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 37 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.38 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 38 - counting commits with limit (partial bitmap, other)

expecting success of 5326.39 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 39 - counting non-linear history (partial bitmap, other)

expecting success of 5326.40 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 40 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.41 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 41 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.42 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 42 - enumerate commits (partial bitmap, other)

expecting success of 5326.43 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 43 - enumerate --objects (partial bitmap, other)

expecting success of 5326.44 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 44 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.45 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   4b27f21..8ca4c84  second     -> second
ok 45 - fetch (partial bitmap)

expecting success of 5326.46 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second 170f281] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 46 - enumerating progress counts pack-reused objects

expecting success of 5326.47 'create new additional packs': 
		for i in $(test_seq 1 16)
		do
			test_commit "$i" &&
			git repack -d || return 1
		done &&

		git checkout -b other2 HEAD~8 &&
		for i in $(test_seq 1 8)
		do
			test_commit "side-$i" &&
			git repack -d || return 1
		done &&
		git checkout second
	
[second 3a76cec] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[second 694ecd4] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[second ffe77aa] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[second 50af4e8] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[second 9c1f241] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[second b53317f] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[second cc19a36] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[second d484d57] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[second 8a35e54] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[second 4563a0f] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[second 0eb4f5f] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[second 620cfb0] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[second 7580d0b] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[second 622a67a] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[second 5b39d34] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[second 199e4bb] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
Switched to a new branch 'other2'
[other2 beb075d] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 bb5edb3] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 1106e57] side-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 6805bc2] side-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 d7d949c] side-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 10e7b33] side-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 d9f1819] side-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 a9c1793] side-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'second'
ok 47 - create new additional packs

expecting success of 5326.48 'create multi-pack midx with bitmaps': 
		git multi-pack-index write --bitmap &&

		ls $objdir/pack/pack-*.pack >packs &&
		test_line_count = 25 packs &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 48 - create multi-pack midx with bitmaps

expecting success of 5326.49 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries loaded)
Found bitmap for '199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42'. 768 bits / 82224a27 checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
{"event":"data","sid":"20221228T074834.753811Z-Hc64317c2-P00000718","thread":"main","time":"2022-12-28T07:48:34.767153Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016926,"t_rel":0.016926,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T074849.054994Z-Hc64317c2-P00000e92","thread":"main","time":"2022-12-28T07:48:49.068628Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016655,"t_rel":0.016655,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 49 - reverse index exists (midx)

expecting success of 5326.50 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (107 entries loaded)
Found bitmap for '199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42'. 768 bits / 82224a27 checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
ok 50 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.51 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 51 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.52 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 52 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.53 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 53 - counting commits with limit (full bitmap, second)

expecting success of 5326.54 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 54 - counting non-linear history (full bitmap, second)

expecting success of 5326.55 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 55 - counting commits with limiting (full bitmap, second)

expecting success of 5326.56 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 56 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.57 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 57 - enumerate commits (full bitmap, second)

expecting success of 5326.58 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 58 - enumerate --objects (full bitmap, second)

expecting success of 5326.59 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 59 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.60 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 60 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.61 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 61 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.62 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 62 - counting commits with limit (full bitmap, other)

expecting success of 5326.63 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 63 - counting non-linear history (full bitmap, other)

expecting success of 5326.64 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 64 - counting commits with limiting (full bitmap, other)

expecting success of 5326.65 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 65 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.66 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 66 - enumerate commits (full bitmap, other)

expecting success of 5326.67 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 67 - enumerate --objects (full bitmap, other)

expecting success of 5326.68 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 68 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.69 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 69 - clone from bitmapped repository

expecting success of 5326.70 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 70 - partial clone from bitmapped repository

expecting success of 5326.71 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
199e4bb8d2cd306cdaed1c3289bc82d6dcf63c42
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            135
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       8628 /       8628
---------------------------------------------------------------------

ok 71 - setup further non-bitmapped commits

expecting success of 5326.72 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 72 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.73 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 73 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.74 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 74 - counting commits with limit (partial bitmap, second)

expecting success of 5326.75 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 75 - counting non-linear history (partial bitmap, second)

expecting success of 5326.76 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 76 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.77 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 77 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.78 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 78 - enumerate commits (partial bitmap, second)

expecting success of 5326.79 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 79 - enumerate --objects (partial bitmap, second)

expecting success of 5326.80 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 80 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.81 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 81 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.82 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 82 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.83 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 83 - counting commits with limit (partial bitmap, other)

expecting success of 5326.84 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 84 - counting non-linear history (partial bitmap, other)

expecting success of 5326.85 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 85 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.86 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 86 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.87 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 87 - enumerate commits (partial bitmap, other)

expecting success of 5326.88 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 88 - enumerate --objects (partial bitmap, other)

expecting success of 5326.89 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 89 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.90 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   199e4bb..2f32443  second     -> second
ok 90 - fetch (partial bitmap)

expecting success of 5326.91 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 742, done.
Total 742 (delta 0), reused 0 (delta 0), pack-reused 742
[second e44e978] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 743, done.
Total 743 (delta 0), reused 0 (delta 0), pack-reused 742
ok 91 - enumerating progress counts pack-reused objects

expecting success of 5326.92 '--no-bitmap is respected when bitmaps exist': 
		git multi-pack-index write --bitmap &&

		test_commit respect--no-bitmap &&
		git repack -d &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		git multi-pack-index write --no-bitmap &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
		test_path_is_missing $midx-$(midx_checksum $objdir).rev
	
[second 39f81e4] respect--no-bitmap
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 respect--no-bitmap.t
ok 92 - --no-bitmap is respected when bitmaps exist

expecting success of 5326.93 'setup midx with base from later pack': 
		# Write a and b so that "a" is a delta on top of base "b", since Git
		# prefers to delete contents out of a base rather than add to a shorter
		# object.
		test_seq 1 128 >a &&
		test_seq 1 130 >b &&

		git add a b &&
		git commit -m "initial commit" &&

		a=$(git rev-parse HEAD:a) &&
		b=$(git rev-parse HEAD:b) &&

		# In the first pack, "a" is stored as a delta to "b".
		p1=$(git pack-objects .git/objects/pack/pack <<-EOF
		$a
		$b
		EOF
		) &&

		# In the second pack, "a" is missing, and "b" is not a delta nor base to
		# any other object.
		p2=$(git pack-objects .git/objects/pack/pack <<-EOF
		$b
		$(git rev-parse HEAD)
		$(git rev-parse HEAD^{tree})
		EOF
		) &&

		git prune-packed &&
		# Use the second pack as the preferred source, so that "b" occurs
		# earlier in the MIDX object order, rendering "a" unusable for pack
		# reuse.
		git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&

		have_delta $a $b &&
		test $(midx_pack_source $a) != $(midx_pack_source $b)
	
[second 800d70e] initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 258 insertions(+)
 create mode 100644 a
 create mode 100644 b
ok 93 - setup midx with base from later pack

expecting success of 5326.94 'counting commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 94 - counting commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.95 'counting partial commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 95 - counting partial commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.96 'counting commits with limit (full bitmap with backwards delta, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 96 - counting commits with limit (full bitmap with backwards delta, second)

expecting success of 5326.97 'counting non-linear history (full bitmap with backwards delta, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 97 - counting non-linear history (full bitmap with backwards delta, second)

expecting success of 5326.98 'counting commits with limiting (full bitmap with backwards delta, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 98 - counting commits with limiting (full bitmap with backwards delta, second)

expecting success of 5326.99 'counting objects via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 99 - counting objects via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.100 'enumerate commits (full bitmap with backwards delta, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 100 - enumerate commits (full bitmap with backwards delta, second)

expecting success of 5326.101 'enumerate --objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 5741, line 141
ok 101 - enumerate --objects (full bitmap with backwards delta, second)

expecting success of 5326.102 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 102 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)

expecting success of 5326.103 'counting commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 103 - counting commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.104 'counting partial commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 104 - counting partial commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.105 'counting commits with limit (full bitmap with backwards delta, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 105 - counting commits with limit (full bitmap with backwards delta, other)

expecting success of 5326.106 'counting non-linear history (full bitmap with backwards delta, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 106 - counting non-linear history (full bitmap with backwards delta, other)

expecting success of 5326.107 'counting commits with limiting (full bitmap with backwards delta, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 107 - counting commits with limiting (full bitmap with backwards delta, other)

expecting success of 5326.108 'counting objects via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 108 - counting objects via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.109 'enumerate commits (full bitmap with backwards delta, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 109 - enumerate commits (full bitmap with backwards delta, other)

expecting success of 5326.110 'enumerate --objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 110 - enumerate --objects (full bitmap with backwards delta, other)

expecting success of 5326.111 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 111 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)

expecting success of 5326.112 'clone with bitmaps enabled': 
		git clone --no-local --bare . clone-reverse-delta.git &&
		test_when_finished "rm -fr clone-reverse-delta.git" &&

		git rev-parse HEAD >expect &&
		git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone-reverse-delta.git'...
ok 112 - clone with bitmaps enabled

expecting success of 5326.113 'changing the preferred pack does not corrupt bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit A &&
			test_commit B &&

			git rev-list --objects --no-object-names HEAD^ >A.objects &&
			git rev-list --objects --no-object-names HEAD^.. >B.objects &&

			A=$(git pack-objects $objdir/pack/pack <A.objects) &&
			B=$(git pack-objects $objdir/pack/pack <B.objects) &&

			cat >indexes <<-EOF &&
			pack-$A.idx
			pack-$B.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$A.pack <indexes &&
			git rev-list --test-bitmap A &&

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$B.pack <indexes &&
			git rev-list --test-bitmap A
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 392b20c] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master a4e158a] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Bitmap v1 test (2 entries loaded)
Found bitmap for '392b20c46362b6de2a5e9c7f30dbcf5c1a8278ba'. 64 bits / 11030517 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
Bitmap v1 test (2 entries loaded)
Found bitmap for '392b20c46362b6de2a5e9c7f30dbcf5c1a8278ba'. 64 bits / f31c9bc6 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
ok 113 - changing the preferred pack does not corrupt bitmaps

expecting success of 5326.114 'setup pack reuse tests (pack -> MIDX)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3592 /       3592
---------------------------------------------------------------------

ok 114 - setup pack reuse tests (pack -> MIDX)

expecting success of 5326.115 'build bitmap from existing (pack -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

Nothing new to pack.
ok 115 - build bitmap from existing (pack -> MIDX)

expecting success of 5326.116 'verify resulting bitmaps (pack -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/heads/master
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/tags/new-tip
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for 'ab0640cc3905d1f6994fbda7d62bcb8721bde6fd'. 64 bits / 26205a9e checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'bc1bb2602ce06fbf454b00e2fc62d6577aa466c6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 116 - verify resulting bitmaps (pack -> MIDX)

expecting success of 5326.117 'setup pack reuse tests (MIDX -> pack)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3592 /       3592
---------------------------------------------------------------------

ok 117 - setup pack reuse tests (MIDX -> pack)

expecting success of 5326.118 'build bitmap from existing (MIDX -> pack)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

ok 118 - build bitmap from existing (MIDX -> pack)

expecting success of 5326.119 'verify resulting bitmaps (MIDX -> pack)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/heads/master
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/tags/new-tip
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for 'ab0640cc3905d1f6994fbda7d62bcb8721bde6fd'. 128 bits / 1beec19b checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'bc1bb2602ce06fbf454b00e2fc62d6577aa466c6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 119 - verify resulting bitmaps (MIDX -> pack)

expecting success of 5326.120 'setup pack reuse tests (MIDX -> MIDX)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3592 /       3592
---------------------------------------------------------------------

ok 120 - setup pack reuse tests (MIDX -> MIDX)

expecting success of 5326.121 'build bitmap from existing (MIDX -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

Nothing new to pack.
ok 121 - build bitmap from existing (MIDX -> MIDX)

expecting success of 5326.122 'verify resulting bitmaps (MIDX -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/heads/master
bc1bb2602ce06fbf454b00e2fc62d6577aa466c6 commit	refs/tags/new-tip
ab0640cc3905d1f6994fbda7d62bcb8721bde6fd commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for 'ab0640cc3905d1f6994fbda7d62bcb8721bde6fd'. 64 bits / 26205a9e checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'bc1bb2602ce06fbf454b00e2fc62d6577aa466c6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 122 - verify resulting bitmaps (MIDX -> MIDX)

expecting success of 5326.123 'missing object closure fails gracefully': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit loose &&
			test_commit packed &&

			# Do not pass "--revs"; we want a pack without the "loose"
			# commit.
			git pack-objects $objdir/pack/pack <<-EOF &&
			$(git rev-parse packed)
			EOF

			test_must_fail git multi-pack-index write --bitmap 2>err &&
			grep "doesn.t have full closure" err &&
			test_path_is_missing $midx
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 6999e23] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
[master 23fd6e3] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
6042bfdbe94037eaba8f1b0e553a64da0e4258ec
warning: Failed to write bitmap index. Packfile doesn't have full closure (object 6999e2351f5ce16aeecbe180fdbc9d0c6966c007 is missing)
ok 123 - missing object closure fails gracefully

expecting success of 5326.124 'setup partial bitmaps': 
		test_commit packed &&
		git repack &&
		test_commit loose &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
[second a0f9530] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[second eb7dd10] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 124 - setup partial bitmaps

expecting success of 5326.125 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries loaded)
Found bitmap for 'a0f95302e15db7fcc4b1078cca104b61ddf091e3'. 768 bits / 24365dde checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
{"event":"data","sid":"20221228T074834.753811Z-Hc64317c2-P00000718","thread":"main","time":"2022-12-28T07:48:34.767153Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016926,"t_rel":0.016926,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T074849.054994Z-Hc64317c2-P00000e92","thread":"main","time":"2022-12-28T07:48:49.068628Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016655,"t_rel":0.016655,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T074908.540809Z-Hc64317c2-P00001684","thread":"main","time":"2022-12-28T07:49:08.554866Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.016951,"t_rel":0.016951,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 125 - reverse index exists (midx)

expecting success of 5326.126 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD~
	
Bitmap v1 test (107 entries loaded)
Found bitmap for 'a0f95302e15db7fcc4b1078cca104b61ddf091e3'. 768 bits / 24365dde checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
ok 126 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.127 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 127 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.128 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 128 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.129 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 129 - counting commits with limit (full bitmap, second)

expecting success of 5326.130 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 130 - counting non-linear history (full bitmap, second)

expecting success of 5326.131 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 131 - counting commits with limiting (full bitmap, second)

expecting success of 5326.132 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 132 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.133 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 133 - enumerate commits (full bitmap, second)

expecting success of 5326.134 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 134 - enumerate --objects (full bitmap, second)

expecting success of 5326.135 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 135 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.136 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 136 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.137 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 137 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.138 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 138 - counting commits with limit (full bitmap, other)

expecting success of 5326.139 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 139 - counting non-linear history (full bitmap, other)

expecting success of 5326.140 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 140 - counting commits with limiting (full bitmap, other)

expecting success of 5326.141 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 141 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.142 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 142 - enumerate commits (full bitmap, other)

expecting success of 5326.143 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 143 - enumerate --objects (full bitmap, other)

expecting success of 5326.144 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 144 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.145 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 145 - clone from bitmapped repository

expecting success of 5326.146 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 146 - partial clone from bitmapped repository

expecting success of 5326.147 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
eb7dd10cacf916c0fbe0aa62deed5ff900c6845c
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            140
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         12
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       5261 /       5261
---------------------------------------------------------------------

ok 147 - setup further non-bitmapped commits

expecting success of 5326.148 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 148 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.149 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 149 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.150 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 150 - counting commits with limit (partial bitmap, second)

expecting success of 5326.151 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 151 - counting non-linear history (partial bitmap, second)

expecting success of 5326.152 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 152 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.153 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 153 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.154 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 154 - enumerate commits (partial bitmap, second)

expecting success of 5326.155 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 155 - enumerate --objects (partial bitmap, second)

expecting success of 5326.156 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 156 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.157 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 157 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.158 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 158 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.159 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 159 - counting commits with limit (partial bitmap, other)

expecting success of 5326.160 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 160 - counting non-linear history (partial bitmap, other)

expecting success of 5326.161 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 161 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.162 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 162 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.163 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 163 - enumerate commits (partial bitmap, other)

expecting success of 5326.164 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 164 - enumerate --objects (partial bitmap, other)

expecting success of 5326.165 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 165 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.166 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   eb7dd10..5374668  second     -> second
ok 166 - fetch (partial bitmap)

expecting success of 5326.167 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 766, done.
Total 766 (delta 0), reused 0 (delta 0), pack-reused 766
[second 07d40ce] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 767, done.
Total 767 (delta 0), reused 0 (delta 0), pack-reused 766
ok 167 - enumerating progress counts pack-reused objects

expecting success of 5326.168 'removing a MIDX clears stale bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit base &&
			git repack &&
			git multi-pack-index write --bitmap &&

			# Write a MIDX and bitmap; remove the MIDX but leave the bitmap.
			stale_bitmap=$midx-$(midx_checksum $objdir).bitmap &&
			rm $midx &&

			# Then write a new MIDX.
			test_commit new &&
			git repack &&
			git multi-pack-index write --bitmap &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
			test_path_is_missing $stale_bitmap
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) c7b3d3a] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 6b19708] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
ok 168 - removing a MIDX clears stale bitmaps

expecting success of 5326.169 'pack.preferBitmapTips': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit_bulk --message="%s" 103 &&

			git log --format="%H" >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git multi-pack-index write --bitmap &&
			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >before &&
			test_line_count = 1 before &&

			perl -ne "printf(\"create refs/tags/include/%d \", $.); print" \
				<before | git update-ref --stdin &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			git -c pack.preferBitmapTips=refs/tags/include \
				multi-pack-index write --bitmap &&
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26910 /      26910
---------------------------------------------------------------------

--- before	2022-12-28 07:49:16.978127947 +0000
+++ after	2022-12-28 07:49:17.203136216 +0000
@@ -1 +1 @@
-fa4fd5b5dc98cbc7b40febbcdae7093e095b854e
+ddf14642c6faca04471beee86e605bcbfd21396e
ok 169 - pack.preferBitmapTips

expecting success of 5326.170 'writing a bitmap with --refs-snapshot': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit one &&
			test_commit two &&

			git rev-parse one >snapshot &&

			git repack -ad &&

			# First, write a MIDX which see both refs/tags/one and
			# refs/tags/two (causing both of those commits to receive
			# bitmaps).
			git multi-pack-index write --bitmap &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			grep "$(git rev-parse one)" bitmaps &&
			grep "$(git rev-parse two)" bitmaps &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			# Then again, but with a refs snapshot which only sees
			# refs/tags/one.
			git multi-pack-index write --bitmap --refs-snapshot=snapshot &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			grep "$(git rev-parse one)" bitmaps &&
			! grep "$(git rev-parse two)" bitmaps
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 0fe3286] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 4484e5d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
0fe3286fcbe602bb880b56d28a01d1851b7945c9
4484e5d24e9474a8b002de8f670f676c5c0af441
0fe3286fcbe602bb880b56d28a01d1851b7945c9
ok 170 - writing a bitmap with --refs-snapshot

expecting success of 5326.171 'write a bitmap with --refs-snapshot (preferred tips)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit_bulk --message="%s" 103 &&

			git log --format="%H" >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git multi-pack-index write --bitmap &&
			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >before &&
			test_line_count = 1 before &&

			(
				grep -vf before commits.raw &&
				# mark missing commits as preferred
				sed "s/^/+/" before
			) >snapshot &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			git multi-pack-index write --bitmap --refs-snapshot=snapshot &&
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26910 /      26910
---------------------------------------------------------------------

--- before	2022-12-28 07:49:19.713228459 +0000
+++ after	2022-12-28 07:49:19.918235993 +0000
@@ -1 +1 @@
-fa4fd5b5dc98cbc7b40febbcdae7093e095b854e
+ddf14642c6faca04471beee86e605bcbfd21396e
ok 171 - write a bitmap with --refs-snapshot (preferred tips)

expecting success of 5326.172 'hash-cache values are propagated from pack bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit base &&
			test_commit base2 &&
			git repack -adb &&

			test-tool bitmap dump-hashes >pack.raw &&
			test_file_not_empty pack.raw &&
			sort pack.raw >pack.hashes &&

			test_commit new &&
			git repack &&
			git multi-pack-index write --bitmap &&

			test-tool bitmap dump-hashes >midx.raw &&
			sort midx.raw >midx.hashes &&

			# ensure that every namehash in the pack bitmap can be found in
			# the midx bitmap (i.e., that there are no oid-namehash pairs
			# unique to the pack bitmap).
			comm -23 pack.hashes midx.hashes >dropped.hashes &&
			test_must_be_empty dropped.hashes
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) c7b3d3a] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 63dc8a8] base2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base2.t
[master fa4104d] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
ok 172 - hash-cache values are propagated from pack bitmaps

expecting success of 5326.173 'no .bitmap is written without any objects': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			empty="$(git pack-objects $objdir/pack/pack </dev/null)" &&
			cat >packs <<-EOF &&
			pack-$empty.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				<packs 2>err &&

			grep "bitmap without any objects" err &&

			test_path_is_file $midx &&
			test_path_is_missing $midx-$(midx_checksum $objdir).bitmap
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
warning: refusing to write multi-pack .bitmap without any objects
ok 173 - no .bitmap is written without any objects

expecting success of 5326.174 'graceful fallback when missing reverse index': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit base &&

			# write a pack and MIDX bitmap containing base
			git repack -adb &&
			git multi-pack-index write --bitmap &&

			GIT_TEST_MIDX_READ_RIDX=0 \
				git rev-list --use-bitmap-index HEAD 2>err &&
			! grep "ignoring extra bitmap file" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) c7b3d3a] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
c7b3d3a32a70b7a1e8b65ae6f01c75bf4c23e8c4
ok 174 - graceful fallback when missing reverse index

expecting success of 5326.175 'setup test_repository': 
		rm -rf * .git &&
		git init &&
		git config pack.writeBitmapLookupTable true
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.git/
ok 175 - setup test_repository

expecting success of 5326.176 'setup repo with moderate-sized history': 
		test_commit_bulk --id=file 10 &&
		git branch -M second &&
		git checkout -b other HEAD~5 &&
		test_commit_bulk --id=side 10 &&

		# add complicated history setup, including merges and
		# ambiguous merge-bases

		git checkout -b merge-left other~2 &&
		git merge second~2 -m "merge-left" &&

		git checkout -b merge-right second~1 &&
		git merge other~1 -m "merge-right" &&

		git checkout -b octo-second second &&
		git merge merge-left merge-right -m "octopus-second" &&

		git checkout -b octo-other other &&
		git merge merge-left merge-right -m "octopus-other" &&

		git checkout other &&
		git merge octo-other -m "pull octopus" &&

		git checkout second &&
		git merge octo-second -m "pull octopus" &&

		# Remove these branches so they are not selected
		# as bitmap tips
		git branch -D merge-left &&
		git branch -D merge-right &&
		git branch -D octo-other &&
		git branch -D octo-second &&

		# add padding to make these merges less interesting
		# and avoid having them selected for bitmaps
		test_commit_bulk --id=file 100 &&
		git checkout other &&
		test_commit_bulk --id=side 100 &&
		git checkout second &&

		bitmaptip=$(git rev-parse second) &&
		blob=$(echo tagged-blob | git hash-object -w --stdin) &&
		git tag tagged-blob $blob
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       2285 /       2285
---------------------------------------------------------------------

Switched to a new branch 'other'
0977809a2f6f01041c676e76708c1fce2ec15a77
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             15
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       4747 /       4747
---------------------------------------------------------------------

Switched to a new branch 'merge-left'
Merge made by the 'ort' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
Switched to a new branch 'merge-right'
Merge made by the 'ort' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-second'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Switched to a new branch 'octo-other'
Trying simple merge with merge-left
Trying simple merge with merge-right
Merge made by the 'octopus' strategy.
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'other'
Updating 23793a5..6dbf429
Fast-forward (no commit created; -m option ignored)
 file-6.t | 1 +
 file-7.t | 1 +
 file-8.t | 1 +
 file-9.t | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 file-6.t
 create mode 100644 file-7.t
 create mode 100644 file-8.t
 create mode 100644 file-9.t
Switched to branch 'second'
Updating 89c9df7..fe580a0
Fast-forward (no commit created; -m option ignored)
 side-1.t | 1 +
 side-2.t | 1 +
 side-3.t | 1 +
 side-4.t | 1 +
 side-5.t | 1 +
 side-6.t | 1 +
 side-7.t | 1 +
 side-8.t | 1 +
 side-9.t | 1 +
 9 files changed, 9 insertions(+)
 create mode 100644 side-1.t
 create mode 100644 side-2.t
 create mode 100644 side-3.t
 create mode 100644 side-4.t
 create mode 100644 side-5.t
 create mode 100644 side-6.t
 create mode 100644 side-7.t
 create mode 100644 side-8.t
 create mode 100644 side-9.t
Deleted branch merge-left (was fbc62e6).
Deleted branch merge-right (was c5b6896).
Deleted branch octo-other (was 6dbf429).
Deleted branch octo-second (was fe580a0).
fe580a073cb0a105ec2998652ed9d1674ebb849d
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26598 /      26598
---------------------------------------------------------------------

Switched to branch 'other'
6dbf4290e5b18e89ba78cd6a7115518279638769
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          280 (        10 duplicates                  )
      blobs  :           90 (        10 duplicates          0 deltas of          0 attempts)
      trees  :           90 (         0 duplicates         88 deltas of         88 attempts)
      commits:          100 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            109
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        102
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      26775 /      26775
---------------------------------------------------------------------

Switched to branch 'second'
ok 176 - setup repo with moderate-sized history

expecting success of 5326.177 'create single-pack midx with bitmaps': 
		git repack -ad &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 177 - create single-pack midx with bitmaps

expecting success of 5326.178 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (106 entries)
Found bitmap for 'db2803b34efd93d3448bc6cf028a889473ba3735'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
{"event":"data","sid":"20221228T074928.643380Z-Hc64317c2-P00001eca","thread":"main","time":"2022-12-28T07:49:28.704540Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.064456,"t_rel":0.064456,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 178 - reverse index exists (midx)

expecting success of 5326.179 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (106 entries)
Found bitmap for 'db2803b34efd93d3448bc6cf028a889473ba3735'. 640 bits / 891eb351 checksum
Verifying bitmap entries:   0% (1/343)
Verifying bitmap entries:   1% (4/343)
Verifying bitmap entries:   2% (7/343)
Verifying bitmap entries:   3% (11/343)
Verifying bitmap entries:   4% (14/343)
Verifying bitmap entries:   5% (18/343)
Verifying bitmap entries:   6% (21/343)
Verifying bitmap entries:   7% (25/343)
Verifying bitmap entries:   8% (28/343)
Verifying bitmap entries:   9% (31/343)
Verifying bitmap entries:  10% (35/343)
Verifying bitmap entries:  11% (38/343)
Verifying bitmap entries:  12% (42/343)
Verifying bitmap entries:  13% (45/343)
Verifying bitmap entries:  14% (49/343)
Verifying bitmap entries:  15% (52/343)
Verifying bitmap entries:  16% (55/343)
Verifying bitmap entries:  17% (59/343)
Verifying bitmap entries:  18% (62/343)
Verifying bitmap entries:  19% (66/343)
Verifying bitmap entries:  20% (69/343)
Verifying bitmap entries:  21% (73/343)
Verifying bitmap entries:  22% (76/343)
Verifying bitmap entries:  23% (79/343)
Verifying bitmap entries:  24% (83/343)
Verifying bitmap entries:  25% (86/343)
Verifying bitmap entries:  26% (90/343)
Verifying bitmap entries:  27% (93/343)
Verifying bitmap entries:  28% (97/343)
Verifying bitmap entries:  29% (100/343)
Verifying bitmap entries:  30% (103/343)
Verifying bitmap entries:  31% (107/343)
Verifying bitmap entries:  32% (110/343)
Verifying bitmap entries:  33% (114/343)
Verifying bitmap entries:  34% (117/343)
Verifying bitmap entries:  35% (121/343)
Verifying bitmap entries:  36% (124/343)
Verifying bitmap entries:  37% (127/343)
Verifying bitmap entries:  38% (131/343)
Verifying bitmap entries:  39% (134/343)
Verifying bitmap entries:  40% (138/343)
Verifying bitmap entries:  41% (141/343)
Verifying bitmap entries:  42% (145/343)
Verifying bitmap entries:  43% (148/343)
Verifying bitmap entries:  44% (151/343)
Verifying bitmap entries:  45% (155/343)
Verifying bitmap entries:  46% (158/343)
Verifying bitmap entries:  47% (162/343)
Verifying bitmap entries:  48% (165/343)
Verifying bitmap entries:  49% (169/343)
Verifying bitmap entries:  50% (172/343)
Verifying bitmap entries:  51% (175/343)
Verifying bitmap entries:  52% (179/343)
Verifying bitmap entries:  53% (182/343)
Verifying bitmap entries:  54% (186/343)
Verifying bitmap entries:  55% (189/343)
Verifying bitmap entries:  56% (193/343)
Verifying bitmap entries:  57% (196/343)
Verifying bitmap entries:  58% (199/343)
Verifying bitmap entries:  59% (203/343)
Verifying bitmap entries:  60% (206/343)
Verifying bitmap entries:  61% (210/343)
Verifying bitmap entries:  62% (213/343)
Verifying bitmap entries:  63% (217/343)
Verifying bitmap entries:  64% (220/343)
Verifying bitmap entries:  65% (223/343)
Verifying bitmap entries:  66% (227/343)
Verifying bitmap entries:  67% (230/343)
Verifying bitmap entries:  68% (234/343)
Verifying bitmap entries:  69% (237/343)
Verifying bitmap entries:  70% (241/343)
Verifying bitmap entries:  71% (244/343)
Verifying bitmap entries:  72% (247/343)
Verifying bitmap entries:  73% (251/343)
Verifying bitmap entries:  74% (254/343)
Verifying bitmap entries:  75% (258/343)
Verifying bitmap entries:  76% (261/343)
Verifying bitmap entries:  77% (265/343)
Verifying bitmap entries:  78% (268/343)
Verifying bitmap entries:  79% (271/343)
Verifying bitmap entries:  80% (275/343)
Verifying bitmap entries:  81% (278/343)
Verifying bitmap entries:  82% (282/343)
Verifying bitmap entries:  83% (285/343)
Verifying bitmap entries:  84% (289/343)
Verifying bitmap entries:  85% (292/343)
Verifying bitmap entries:  86% (295/343)
Verifying bitmap entries:  87% (299/343)
Verifying bitmap entries:  88% (302/343)
Verifying bitmap entries:  89% (306/343)
Verifying bitmap entries:  90% (309/343)
Verifying bitmap entries:  91% (313/343)
Verifying bitmap entries:  92% (316/343)
Verifying bitmap entries:  93% (319/343)
Verifying bitmap entries:  94% (323/343)
Verifying bitmap entries:  95% (326/343)
Verifying bitmap entries:  96% (330/343)
Verifying bitmap entries:  97% (333/343)
Verifying bitmap entries:  98% (337/343)
Verifying bitmap entries:  99% (340/343)
Verifying bitmap entries: 100% (343/343)
Verifying bitmap entries: 100% (343/343), done.
OK!
ok 179 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.180 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 180 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.181 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 181 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.182 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 182 - counting commits with limit (full bitmap, second)

expecting success of 5326.183 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 183 - counting non-linear history (full bitmap, second)

expecting success of 5326.184 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 184 - counting commits with limiting (full bitmap, second)

expecting success of 5326.185 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 185 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.186 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 186 - enumerate commits (full bitmap, second)

expecting success of 5326.187 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4102, line 101
ok 187 - enumerate --objects (full bitmap, second)

expecting success of 5326.188 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 188 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.189 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 189 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.190 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 190 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.191 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 191 - counting commits with limit (full bitmap, other)

expecting success of 5326.192 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 192 - counting non-linear history (full bitmap, other)

expecting success of 5326.193 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 193 - counting commits with limiting (full bitmap, other)

expecting success of 5326.194 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 194 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.195 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 195 - enumerate commits (full bitmap, other)

expecting success of 5326.196 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 196 - enumerate --objects (full bitmap, other)

expecting success of 5326.197 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 197 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.198 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 198 - clone from bitmapped repository

expecting success of 5326.199 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 199 - partial clone from bitmapped repository

expecting success of 5326.200 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
db2803b34efd93d3448bc6cf028a889473ba3735
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           30 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           10 (         0 duplicates          9 deltas of          9 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            119
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      58728 /      58728
---------------------------------------------------------------------

ok 200 - setup further non-bitmapped commits

expecting success of 5326.201 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 201 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.202 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 202 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.203 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 203 - counting commits with limit (partial bitmap, second)

expecting success of 5326.204 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 204 - counting non-linear history (partial bitmap, second)

expecting success of 5326.205 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 205 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.206 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 206 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.207 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 207 - enumerate commits (partial bitmap, second)

expecting success of 5326.208 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 208 - enumerate --objects (partial bitmap, second)

expecting success of 5326.209 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 209 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.210 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 210 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.211 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 211 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.212 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 212 - counting commits with limit (partial bitmap, other)

expecting success of 5326.213 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 213 - counting non-linear history (partial bitmap, other)

expecting success of 5326.214 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 214 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.215 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 215 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.216 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 216 - enumerate commits (partial bitmap, other)

expecting success of 5326.217 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 217 - enumerate --objects (partial bitmap, other)

expecting success of 5326.218 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 218 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.219 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   db2803b..21b05a3  second     -> second
ok 219 - fetch (partial bitmap)

expecting success of 5326.220 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 659, done.
Total 659 (delta 0), reused 0 (delta 0), pack-reused 659
[second 9d9466a] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 660, done.
Total 660 (delta 0), reused 0 (delta 0), pack-reused 659
ok 220 - enumerating progress counts pack-reused objects

expecting success of 5326.221 'create new additional packs': 
		for i in $(test_seq 1 16)
		do
			test_commit "$i" &&
			git repack -d || return 1
		done &&

		git checkout -b other2 HEAD~8 &&
		for i in $(test_seq 1 8)
		do
			test_commit "side-$i" &&
			git repack -d || return 1
		done &&
		git checkout second
	
[second c508966] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[second 7852397] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[second e8764eb] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[second e7b65f1] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[second ff287bb] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
[second 734ba24] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
[second 7e37ce6] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
[second 22aa444] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
[second 82c3a80] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
[second 8a6fa0d] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
[second 1508049] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
[second aec6ca5] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12.t
[second 32a5e04] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13.t
[second a28bee6] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 14.t
[second 12a188f] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 15.t
[second 576966f] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 16.t
Switched to a new branch 'other2'
[other2 b3d62c0] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 e8f946b] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 56d7f89] side-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 dbe4b2d] side-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 9286b7d] side-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 75e0202] side-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 b26808f] side-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[other2 b145b7a] side-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'second'
ok 221 - create new additional packs

expecting success of 5326.222 'create multi-pack midx with bitmaps': 
		git multi-pack-index write --bitmap &&

		ls $objdir/pack/pack-*.pack >packs &&
		test_line_count = 25 packs &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
ok 222 - create multi-pack midx with bitmaps

expecting success of 5326.223 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries)
Found bitmap for '576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7'. 768 bits / 236971ab checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
{"event":"data","sid":"20221228T074928.643380Z-Hc64317c2-P00001eca","thread":"main","time":"2022-12-28T07:49:28.704540Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.064456,"t_rel":0.064456,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T074942.726577Z-Hc64317c2-P000025b3","thread":"main","time":"2022-12-28T07:49:42.740617Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.017241,"t_rel":0.017241,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 223 - reverse index exists (midx)

expecting success of 5326.224 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD
	
Bitmap v1 test (107 entries)
Found bitmap for '576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7'. 768 bits / 236971ab checksum
Verifying bitmap entries:   0% (1/422)
Verifying bitmap entries:   1% (5/422)
Verifying bitmap entries:   2% (9/422)
Verifying bitmap entries:   3% (13/422)
Verifying bitmap entries:   4% (17/422)
Verifying bitmap entries:   5% (22/422)
Verifying bitmap entries:   6% (26/422)
Verifying bitmap entries:   7% (30/422)
Verifying bitmap entries:   8% (34/422)
Verifying bitmap entries:   9% (38/422)
Verifying bitmap entries:  10% (43/422)
Verifying bitmap entries:  11% (47/422)
Verifying bitmap entries:  12% (51/422)
Verifying bitmap entries:  13% (55/422)
Verifying bitmap entries:  14% (60/422)
Verifying bitmap entries:  15% (64/422)
Verifying bitmap entries:  16% (68/422)
Verifying bitmap entries:  17% (72/422)
Verifying bitmap entries:  18% (76/422)
Verifying bitmap entries:  19% (81/422)
Verifying bitmap entries:  20% (85/422)
Verifying bitmap entries:  21% (89/422)
Verifying bitmap entries:  22% (93/422)
Verifying bitmap entries:  23% (98/422)
Verifying bitmap entries:  24% (102/422)
Verifying bitmap entries:  25% (106/422)
Verifying bitmap entries:  26% (110/422)
Verifying bitmap entries:  27% (114/422)
Verifying bitmap entries:  28% (119/422)
Verifying bitmap entries:  29% (123/422)
Verifying bitmap entries:  30% (127/422)
Verifying bitmap entries:  31% (131/422)
Verifying bitmap entries:  32% (136/422)
Verifying bitmap entries:  33% (140/422)
Verifying bitmap entries:  34% (144/422)
Verifying bitmap entries:  35% (148/422)
Verifying bitmap entries:  36% (152/422)
Verifying bitmap entries:  37% (157/422)
Verifying bitmap entries:  38% (161/422)
Verifying bitmap entries:  39% (165/422)
Verifying bitmap entries:  40% (169/422)
Verifying bitmap entries:  41% (174/422)
Verifying bitmap entries:  42% (178/422)
Verifying bitmap entries:  43% (182/422)
Verifying bitmap entries:  44% (186/422)
Verifying bitmap entries:  45% (190/422)
Verifying bitmap entries:  46% (195/422)
Verifying bitmap entries:  47% (199/422)
Verifying bitmap entries:  48% (203/422)
Verifying bitmap entries:  49% (207/422)
Verifying bitmap entries:  50% (211/422)
Verifying bitmap entries:  51% (216/422)
Verifying bitmap entries:  52% (220/422)
Verifying bitmap entries:  53% (224/422)
Verifying bitmap entries:  54% (228/422)
Verifying bitmap entries:  55% (233/422)
Verifying bitmap entries:  56% (237/422)
Verifying bitmap entries:  57% (241/422)
Verifying bitmap entries:  58% (245/422)
Verifying bitmap entries:  59% (249/422)
Verifying bitmap entries:  60% (254/422)
Verifying bitmap entries:  61% (258/422)
Verifying bitmap entries:  62% (262/422)
Verifying bitmap entries:  63% (266/422)
Verifying bitmap entries:  64% (271/422)
Verifying bitmap entries:  65% (275/422)
Verifying bitmap entries:  66% (279/422)
Verifying bitmap entries:  67% (283/422)
Verifying bitmap entries:  68% (287/422)
Verifying bitmap entries:  69% (292/422)
Verifying bitmap entries:  70% (296/422)
Verifying bitmap entries:  71% (300/422)
Verifying bitmap entries:  72% (304/422)
Verifying bitmap entries:  73% (309/422)
Verifying bitmap entries:  74% (313/422)
Verifying bitmap entries:  75% (317/422)
Verifying bitmap entries:  76% (321/422)
Verifying bitmap entries:  77% (325/422)
Verifying bitmap entries:  78% (330/422)
Verifying bitmap entries:  79% (334/422)
Verifying bitmap entries:  80% (338/422)
Verifying bitmap entries:  81% (342/422)
Verifying bitmap entries:  82% (347/422)
Verifying bitmap entries:  83% (351/422)
Verifying bitmap entries:  84% (355/422)
Verifying bitmap entries:  85% (359/422)
Verifying bitmap entries:  86% (363/422)
Verifying bitmap entries:  87% (368/422)
Verifying bitmap entries:  88% (372/422)
Verifying bitmap entries:  89% (376/422)
Verifying bitmap entries:  90% (380/422)
Verifying bitmap entries:  91% (385/422)
Verifying bitmap entries:  92% (389/422)
Verifying bitmap entries:  93% (393/422)
Verifying bitmap entries:  94% (397/422)
Verifying bitmap entries:  95% (401/422)
Verifying bitmap entries:  96% (406/422)
Verifying bitmap entries:  97% (410/422)
Verifying bitmap entries:  98% (414/422)
Verifying bitmap entries:  99% (418/422)
Verifying bitmap entries: 100% (422/422)
Verifying bitmap entries: 100% (422/422), done.
OK!
ok 224 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.225 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 225 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.226 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 226 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.227 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 227 - counting commits with limit (full bitmap, second)

expecting success of 5326.228 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 228 - counting non-linear history (full bitmap, second)

expecting success of 5326.229 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 229 - counting commits with limiting (full bitmap, second)

expecting success of 5326.230 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 230 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.231 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 231 - enumerate commits (full bitmap, second)

expecting success of 5326.232 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 232 - enumerate --objects (full bitmap, second)

expecting success of 5326.233 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 233 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.234 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 234 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.235 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 235 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.236 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 236 - counting commits with limit (full bitmap, other)

expecting success of 5326.237 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 237 - counting non-linear history (full bitmap, other)

expecting success of 5326.238 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 238 - counting commits with limiting (full bitmap, other)

expecting success of 5326.239 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 239 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.240 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 240 - enumerate commits (full bitmap, other)

expecting success of 5326.241 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 241 - enumerate --objects (full bitmap, other)

expecting success of 5326.242 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 242 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.243 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 243 - clone from bitmapped repository

expecting success of 5326.244 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 244 - partial clone from bitmapped repository

expecting success of 5326.245 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
576966fc3b893dbc7e2ca80ceecf4329d8e9e7a7
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            135
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         16
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       8626 /       8626
---------------------------------------------------------------------

ok 245 - setup further non-bitmapped commits

expecting success of 5326.246 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 246 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.247 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 247 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.248 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 248 - counting commits with limit (partial bitmap, second)

expecting success of 5326.249 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 249 - counting non-linear history (partial bitmap, second)

expecting success of 5326.250 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 250 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.251 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 251 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.252 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 252 - enumerate commits (partial bitmap, second)

expecting success of 5326.253 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 253 - enumerate --objects (partial bitmap, second)

expecting success of 5326.254 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 254 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.255 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 255 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.256 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 256 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.257 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 257 - counting commits with limit (partial bitmap, other)

expecting success of 5326.258 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 258 - counting non-linear history (partial bitmap, other)

expecting success of 5326.259 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 259 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.260 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 260 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.261 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 261 - enumerate commits (partial bitmap, other)

expecting success of 5326.262 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 262 - enumerate --objects (partial bitmap, other)

expecting success of 5326.263 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 263 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.264 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   576966f..078ff48  second     -> second
ok 264 - fetch (partial bitmap)

expecting success of 5326.265 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 742, done.
Total 742 (delta 0), reused 0 (delta 0), pack-reused 742
[second 2cbe96f] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 743, done.
Total 743 (delta 0), reused 0 (delta 0), pack-reused 742
ok 265 - enumerating progress counts pack-reused objects

expecting success of 5326.266 '--no-bitmap is respected when bitmaps exist': 
		git multi-pack-index write --bitmap &&

		test_commit respect--no-bitmap &&
		git repack -d &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		git multi-pack-index write --no-bitmap &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
		test_path_is_missing $midx-$(midx_checksum $objdir).rev
	
[second aec4170] respect--no-bitmap
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 respect--no-bitmap.t
ok 266 - --no-bitmap is respected when bitmaps exist

expecting success of 5326.267 'setup midx with base from later pack': 
		# Write a and b so that "a" is a delta on top of base "b", since Git
		# prefers to delete contents out of a base rather than add to a shorter
		# object.
		test_seq 1 128 >a &&
		test_seq 1 130 >b &&

		git add a b &&
		git commit -m "initial commit" &&

		a=$(git rev-parse HEAD:a) &&
		b=$(git rev-parse HEAD:b) &&

		# In the first pack, "a" is stored as a delta to "b".
		p1=$(git pack-objects .git/objects/pack/pack <<-EOF
		$a
		$b
		EOF
		) &&

		# In the second pack, "a" is missing, and "b" is not a delta nor base to
		# any other object.
		p2=$(git pack-objects .git/objects/pack/pack <<-EOF
		$b
		$(git rev-parse HEAD)
		$(git rev-parse HEAD^{tree})
		EOF
		) &&

		git prune-packed &&
		# Use the second pack as the preferred source, so that "b" occurs
		# earlier in the MIDX object order, rendering "a" unusable for pack
		# reuse.
		git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&

		have_delta $a $b &&
		test $(midx_pack_source $a) != $(midx_pack_source $b)
	
[second 59dfa27] initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 258 insertions(+)
 create mode 100644 a
 create mode 100644 b
ok 267 - setup midx with base from later pack

expecting success of 5326.268 'counting commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 268 - counting commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.269 'counting partial commits via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 269 - counting partial commits via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.270 'counting commits with limit (full bitmap with backwards delta, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 270 - counting commits with limit (full bitmap with backwards delta, second)

expecting success of 5326.271 'counting non-linear history (full bitmap with backwards delta, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 271 - counting non-linear history (full bitmap with backwards delta, second)

expecting success of 5326.272 'counting commits with limiting (full bitmap with backwards delta, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 272 - counting commits with limiting (full bitmap with backwards delta, second)

expecting success of 5326.273 'counting objects via bitmap (full bitmap with backwards delta, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 273 - counting objects via bitmap (full bitmap with backwards delta, second)

expecting success of 5326.274 'enumerate commits (full bitmap with backwards delta, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 274 - enumerate commits (full bitmap with backwards delta, second)

expecting success of 5326.275 'enumerate --objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 42, line 2
ok 275 - enumerate --objects (full bitmap with backwards delta, second)

expecting success of 5326.276 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 276 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, second)

expecting success of 5326.277 'counting commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 277 - counting commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.278 'counting partial commits via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 278 - counting partial commits via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.279 'counting commits with limit (full bitmap with backwards delta, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 279 - counting commits with limit (full bitmap with backwards delta, other)

expecting success of 5326.280 'counting non-linear history (full bitmap with backwards delta, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 280 - counting non-linear history (full bitmap with backwards delta, other)

expecting success of 5326.281 'counting commits with limiting (full bitmap with backwards delta, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 281 - counting commits with limiting (full bitmap with backwards delta, other)

expecting success of 5326.282 'counting objects via bitmap (full bitmap with backwards delta, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 282 - counting objects via bitmap (full bitmap with backwards delta, other)

expecting success of 5326.283 'enumerate commits (full bitmap with backwards delta, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 283 - enumerate commits (full bitmap with backwards delta, other)

expecting success of 5326.284 'enumerate --objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 284 - enumerate --objects (full bitmap with backwards delta, other)

expecting success of 5326.285 'bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 285 - bitmap --objects handles non-commit objects (full bitmap with backwards delta, other)

expecting success of 5326.286 'clone with bitmaps enabled': 
		git clone --no-local --bare . clone-reverse-delta.git &&
		test_when_finished "rm -fr clone-reverse-delta.git" &&

		git rev-parse HEAD >expect &&
		git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone-reverse-delta.git'...
ok 286 - clone with bitmaps enabled

expecting success of 5326.287 'changing the preferred pack does not corrupt bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&

			test_commit A &&
			test_commit B &&

			git rev-list --objects --no-object-names HEAD^ >A.objects &&
			git rev-list --objects --no-object-names HEAD^.. >B.objects &&

			A=$(git pack-objects $objdir/pack/pack <A.objects) &&
			B=$(git pack-objects $objdir/pack/pack <B.objects) &&

			cat >indexes <<-EOF &&
			pack-$A.idx
			pack-$B.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$A.pack <indexes &&
			git rev-list --test-bitmap A &&

			git multi-pack-index write --bitmap --stdin-packs \
				--preferred-pack=pack-$B.pack <indexes &&
			git rev-list --test-bitmap A
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 4e815f0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master f2c4359] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Bitmap v1 test (2 entries loaded)
Found bitmap for '4e815f02723eafa37a84fae71005bfba7924b84d'. 64 bits / 11030517 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
Bitmap v1 test (2 entries loaded)
Found bitmap for '4e815f02723eafa37a84fae71005bfba7924b84d'. 64 bits / f31c9bc6 checksum
Verifying bitmap entries:  33% (1/3)
Verifying bitmap entries:  66% (2/3)
Verifying bitmap entries: 100% (3/3)
Verifying bitmap entries: 100% (3/3), done.
OK!
ok 287 - changing the preferred pack does not corrupt bitmaps

expecting success of 5326.288 'setup pack reuse tests (pack -> MIDX)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3589 /       3589
---------------------------------------------------------------------

ok 288 - setup pack reuse tests (pack -> MIDX)

expecting success of 5326.289 'build bitmap from existing (pack -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
91737470c84f833fd6e011c3f3d39674d6352beb
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

Nothing new to pack.
ok 289 - build bitmap from existing (pack -> MIDX)

expecting success of 5326.290 'verify resulting bitmaps (pack -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/heads/master
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/tags/new-tip
91737470c84f833fd6e011c3f3d39674d6352beb commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for '91737470c84f833fd6e011c3f3d39674d6352beb'. 64 bits / 26205a9e checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'd0446f42140c9a0eba50442626df052f850c97f6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 290 - verify resulting bitmaps (pack -> MIDX)

expecting success of 5326.291 'setup pack reuse tests (MIDX -> pack)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3589 /       3589
---------------------------------------------------------------------

ok 291 - setup pack reuse tests (MIDX -> pack)

expecting success of 5326.292 'build bitmap from existing (MIDX -> pack)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
91737470c84f833fd6e011c3f3d39674d6352beb
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

ok 292 - build bitmap from existing (MIDX -> pack)

expecting success of 5326.293 'verify resulting bitmaps (MIDX -> pack)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/heads/master
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/tags/new-tip
91737470c84f833fd6e011c3f3d39674d6352beb commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for '91737470c84f833fd6e011c3f3d39674d6352beb'. 128 bits / 1beec19b checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'd0446f42140c9a0eba50442626df052f850c97f6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 293 - verify resulting bitmaps (MIDX -> pack)

expecting success of 5326.294 'setup pack reuse tests (MIDX -> MIDX)': 
		rm -fr repo &&
		git init repo &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk 16 &&
			git tag old-tip &&

			git config core.multiPackIndex true &&
			if test "MIDX" = "$from"
			then
				git repack -Ad &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             16
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       3589 /       3589
---------------------------------------------------------------------

ok 294 - setup pack reuse tests (MIDX -> MIDX)

expecting success of 5326.295 'build bitmap from existing (MIDX -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit_bulk --id=further 16 &&
			git tag new-tip &&

			if test "MIDX" = "$to"
			then
				git repack -d &&
				git multi-pack-index write --bitmap
			else
				git repack -Adb
			fi
		)
	
91737470c84f833fd6e011c3f3d39674d6352beb
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           48 (         0 duplicates                  )
      blobs  :           16 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           16 (         0 duplicates         15 deltas of         15 attempts)
      commits:           16 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             32
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         36
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7771 /       7771
---------------------------------------------------------------------

Nothing new to pack.
ok 295 - build bitmap from existing (MIDX -> MIDX)

expecting success of 5326.296 'verify resulting bitmaps (MIDX -> MIDX)': 
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			git for-each-ref &&
			git rev-list --test-bitmap refs/tags/old-tip &&
			git rev-list --test-bitmap refs/tags/new-tip
		)
	
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/heads/master
d0446f42140c9a0eba50442626df052f850c97f6 commit	refs/tags/new-tip
91737470c84f833fd6e011c3f3d39674d6352beb commit	refs/tags/old-tip
Bitmap v1 test (32 entries loaded)
Found bitmap for '91737470c84f833fd6e011c3f3d39674d6352beb'. 64 bits / 26205a9e checksum
Verifying bitmap entries:   2% (1/48)
Verifying bitmap entries:   4% (2/48)
Verifying bitmap entries:   6% (3/48)
Verifying bitmap entries:   8% (4/48)
Verifying bitmap entries:  10% (5/48)
Verifying bitmap entries:  12% (6/48)
Verifying bitmap entries:  14% (7/48)
Verifying bitmap entries:  16% (8/48)
Verifying bitmap entries:  18% (9/48)
Verifying bitmap entries:  20% (10/48)
Verifying bitmap entries:  22% (11/48)
Verifying bitmap entries:  25% (12/48)
Verifying bitmap entries:  27% (13/48)
Verifying bitmap entries:  29% (14/48)
Verifying bitmap entries:  31% (15/48)
Verifying bitmap entries:  33% (16/48)
Verifying bitmap entries:  35% (17/48)
Verifying bitmap entries:  37% (18/48)
Verifying bitmap entries:  39% (19/48)
Verifying bitmap entries:  41% (20/48)
Verifying bitmap entries:  43% (21/48)
Verifying bitmap entries:  45% (22/48)
Verifying bitmap entries:  47% (23/48)
Verifying bitmap entries:  50% (24/48)
Verifying bitmap entries:  52% (25/48)
Verifying bitmap entries:  54% (26/48)
Verifying bitmap entries:  56% (27/48)
Verifying bitmap entries:  58% (28/48)
Verifying bitmap entries:  60% (29/48)
Verifying bitmap entries:  62% (30/48)
Verifying bitmap entries:  64% (31/48)
Verifying bitmap entries:  66% (32/48)
Verifying bitmap entries:  68% (33/48)
Verifying bitmap entries:  70% (34/48)
Verifying bitmap entries:  72% (35/48)
Verifying bitmap entries:  75% (36/48)
Verifying bitmap entries:  77% (37/48)
Verifying bitmap entries:  79% (38/48)
Verifying bitmap entries:  81% (39/48)
Verifying bitmap entries:  83% (40/48)
Verifying bitmap entries:  85% (41/48)
Verifying bitmap entries:  87% (42/48)
Verifying bitmap entries:  89% (43/48)
Verifying bitmap entries:  91% (44/48)
Verifying bitmap entries:  93% (45/48)
Verifying bitmap entries:  95% (46/48)
Verifying bitmap entries:  97% (47/48)
Verifying bitmap entries: 100% (48/48)
Verifying bitmap entries: 100% (48/48), done.
OK!
Bitmap v1 test (32 entries loaded)
Found bitmap for 'd0446f42140c9a0eba50442626df052f850c97f6'. 128 bits / f4d5cc9b checksum
Verifying bitmap entries:   1% (1/96)
Verifying bitmap entries:   2% (2/96)
Verifying bitmap entries:   3% (3/96)
Verifying bitmap entries:   4% (4/96)
Verifying bitmap entries:   5% (5/96)
Verifying bitmap entries:   6% (6/96)
Verifying bitmap entries:   7% (7/96)
Verifying bitmap entries:   8% (8/96)
Verifying bitmap entries:   9% (9/96)
Verifying bitmap entries:  10% (10/96)
Verifying bitmap entries:  11% (11/96)
Verifying bitmap entries:  12% (12/96)
Verifying bitmap entries:  13% (13/96)
Verifying bitmap entries:  14% (14/96)
Verifying bitmap entries:  15% (15/96)
Verifying bitmap entries:  16% (16/96)
Verifying bitmap entries:  17% (17/96)
Verifying bitmap entries:  18% (18/96)
Verifying bitmap entries:  19% (19/96)
Verifying bitmap entries:  20% (20/96)
Verifying bitmap entries:  21% (21/96)
Verifying bitmap entries:  22% (22/96)
Verifying bitmap entries:  23% (23/96)
Verifying bitmap entries:  25% (24/96)
Verifying bitmap entries:  26% (25/96)
Verifying bitmap entries:  27% (26/96)
Verifying bitmap entries:  28% (27/96)
Verifying bitmap entries:  29% (28/96)
Verifying bitmap entries:  30% (29/96)
Verifying bitmap entries:  31% (30/96)
Verifying bitmap entries:  32% (31/96)
Verifying bitmap entries:  33% (32/96)
Verifying bitmap entries:  34% (33/96)
Verifying bitmap entries:  35% (34/96)
Verifying bitmap entries:  36% (35/96)
Verifying bitmap entries:  37% (36/96)
Verifying bitmap entries:  38% (37/96)
Verifying bitmap entries:  39% (38/96)
Verifying bitmap entries:  40% (39/96)
Verifying bitmap entries:  41% (40/96)
Verifying bitmap entries:  42% (41/96)
Verifying bitmap entries:  43% (42/96)
Verifying bitmap entries:  44% (43/96)
Verifying bitmap entries:  45% (44/96)
Verifying bitmap entries:  46% (45/96)
Verifying bitmap entries:  47% (46/96)
Verifying bitmap entries:  48% (47/96)
Verifying bitmap entries:  50% (48/96)
Verifying bitmap entries:  51% (49/96)
Verifying bitmap entries:  52% (50/96)
Verifying bitmap entries:  53% (51/96)
Verifying bitmap entries:  54% (52/96)
Verifying bitmap entries:  55% (53/96)
Verifying bitmap entries:  56% (54/96)
Verifying bitmap entries:  57% (55/96)
Verifying bitmap entries:  58% (56/96)
Verifying bitmap entries:  59% (57/96)
Verifying bitmap entries:  60% (58/96)
Verifying bitmap entries:  61% (59/96)
Verifying bitmap entries:  62% (60/96)
Verifying bitmap entries:  63% (61/96)
Verifying bitmap entries:  64% (62/96)
Verifying bitmap entries:  65% (63/96)
Verifying bitmap entries:  66% (64/96)
Verifying bitmap entries:  67% (65/96)
Verifying bitmap entries:  68% (66/96)
Verifying bitmap entries:  69% (67/96)
Verifying bitmap entries:  70% (68/96)
Verifying bitmap entries:  71% (69/96)
Verifying bitmap entries:  72% (70/96)
Verifying bitmap entries:  73% (71/96)
Verifying bitmap entries:  75% (72/96)
Verifying bitmap entries:  76% (73/96)
Verifying bitmap entries:  77% (74/96)
Verifying bitmap entries:  78% (75/96)
Verifying bitmap entries:  79% (76/96)
Verifying bitmap entries:  80% (77/96)
Verifying bitmap entries:  81% (78/96)
Verifying bitmap entries:  82% (79/96)
Verifying bitmap entries:  83% (80/96)
Verifying bitmap entries:  84% (81/96)
Verifying bitmap entries:  85% (82/96)
Verifying bitmap entries:  86% (83/96)
Verifying bitmap entries:  87% (84/96)
Verifying bitmap entries:  88% (85/96)
Verifying bitmap entries:  89% (86/96)
Verifying bitmap entries:  90% (87/96)
Verifying bitmap entries:  91% (88/96)
Verifying bitmap entries:  92% (89/96)
Verifying bitmap entries:  93% (90/96)
Verifying bitmap entries:  94% (91/96)
Verifying bitmap entries:  95% (92/96)
Verifying bitmap entries:  96% (93/96)
Verifying bitmap entries:  97% (94/96)
Verifying bitmap entries:  98% (95/96)
Verifying bitmap entries: 100% (96/96)
Verifying bitmap entries: 100% (96/96), done.
OK!
ok 296 - verify resulting bitmaps (MIDX -> MIDX)

expecting success of 5326.297 'missing object closure fails gracefully': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit loose &&
			test_commit packed &&

			# Do not pass "--revs"; we want a pack without the "loose"
			# commit.
			git pack-objects $objdir/pack/pack <<-EOF &&
			$(git rev-parse packed)
			EOF

			test_must_fail git multi-pack-index write --bitmap 2>err &&
			grep "doesn.t have full closure" err &&
			test_path_is_missing $midx
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) cca5daf] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
[master 50fe1f1] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
390347bc6f8f8d558b0e5de4029f69205094a364
warning: Failed to write bitmap index. Packfile doesn't have full closure (object cca5dafc59fe86471e00a628c40aa7d8a947eb54 is missing)
ok 297 - missing object closure fails gracefully

expecting success of 5326.298 'setup partial bitmaps': 
		test_commit packed &&
		git repack &&
		test_commit loose &&
		git multi-pack-index write --bitmap &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	
[second 8f696af] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[second 37cdfb1] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 298 - setup partial bitmaps

expecting success of 5326.299 'reverse index exists (midx)': 
		GIT_TRACE2_EVENT=$(pwd)/event.trace \
			git rev-list --test-bitmap "$commit" &&

		if test "rev" = "$kind"
		then
			test_path_is_file $midx-$(midx_checksum $objdir).rev
		fi &&
		grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
	
Bitmap v1 test (107 entries)
Found bitmap for '8f696aff37c64e3202f920ceebf2456f81392ece'. 768 bits / 24365dde checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
{"event":"data","sid":"20221228T074928.643380Z-Hc64317c2-P00001eca","thread":"main","time":"2022-12-28T07:49:28.704540Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.064456,"t_rel":0.064456,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T074942.726577Z-Hc64317c2-P000025b3","thread":"main","time":"2022-12-28T07:49:42.740617Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.017241,"t_rel":0.017241,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
{"event":"data","sid":"20221228T075000.632530Z-Hc64317c2-P0000308d","thread":"main","time":"2022-12-28T07:50:00.645160Z","file":"pack-revindex.c","line":315,"repo":1,"t_abs":0.015678,"t_rel":0.015678,"nesting":1,"category":"load_midx_revindex","key":"source","value":"midx"}
ok 299 - reverse index exists (midx)

expecting success of 5326.300 'rev-list --test-bitmap verifies bitmaps': 
		git rev-list --test-bitmap HEAD~
	
Bitmap v1 test (107 entries)
Found bitmap for '8f696aff37c64e3202f920ceebf2456f81392ece'. 768 bits / 24365dde checksum
Verifying bitmap entries:   0% (1/443)
Verifying bitmap entries:   1% (5/443)
Verifying bitmap entries:   2% (9/443)
Verifying bitmap entries:   3% (14/443)
Verifying bitmap entries:   4% (18/443)
Verifying bitmap entries:   5% (23/443)
Verifying bitmap entries:   6% (27/443)
Verifying bitmap entries:   7% (32/443)
Verifying bitmap entries:   8% (36/443)
Verifying bitmap entries:   9% (40/443)
Verifying bitmap entries:  10% (45/443)
Verifying bitmap entries:  11% (49/443)
Verifying bitmap entries:  12% (54/443)
Verifying bitmap entries:  13% (58/443)
Verifying bitmap entries:  14% (63/443)
Verifying bitmap entries:  15% (67/443)
Verifying bitmap entries:  16% (71/443)
Verifying bitmap entries:  17% (76/443)
Verifying bitmap entries:  18% (80/443)
Verifying bitmap entries:  19% (85/443)
Verifying bitmap entries:  20% (89/443)
Verifying bitmap entries:  21% (94/443)
Verifying bitmap entries:  22% (98/443)
Verifying bitmap entries:  23% (102/443)
Verifying bitmap entries:  24% (107/443)
Verifying bitmap entries:  25% (111/443)
Verifying bitmap entries:  26% (116/443)
Verifying bitmap entries:  27% (120/443)
Verifying bitmap entries:  28% (125/443)
Verifying bitmap entries:  29% (129/443)
Verifying bitmap entries:  30% (133/443)
Verifying bitmap entries:  31% (138/443)
Verifying bitmap entries:  32% (142/443)
Verifying bitmap entries:  33% (147/443)
Verifying bitmap entries:  34% (151/443)
Verifying bitmap entries:  35% (156/443)
Verifying bitmap entries:  36% (160/443)
Verifying bitmap entries:  37% (164/443)
Verifying bitmap entries:  38% (169/443)
Verifying bitmap entries:  39% (173/443)
Verifying bitmap entries:  40% (178/443)
Verifying bitmap entries:  41% (182/443)
Verifying bitmap entries:  42% (187/443)
Verifying bitmap entries:  43% (191/443)
Verifying bitmap entries:  44% (195/443)
Verifying bitmap entries:  45% (200/443)
Verifying bitmap entries:  46% (204/443)
Verifying bitmap entries:  47% (209/443)
Verifying bitmap entries:  48% (213/443)
Verifying bitmap entries:  49% (218/443)
Verifying bitmap entries:  50% (222/443)
Verifying bitmap entries:  51% (226/443)
Verifying bitmap entries:  52% (231/443)
Verifying bitmap entries:  53% (235/443)
Verifying bitmap entries:  54% (240/443)
Verifying bitmap entries:  55% (244/443)
Verifying bitmap entries:  56% (249/443)
Verifying bitmap entries:  57% (253/443)
Verifying bitmap entries:  58% (257/443)
Verifying bitmap entries:  59% (262/443)
Verifying bitmap entries:  60% (266/443)
Verifying bitmap entries:  61% (271/443)
Verifying bitmap entries:  62% (275/443)
Verifying bitmap entries:  63% (280/443)
Verifying bitmap entries:  64% (284/443)
Verifying bitmap entries:  65% (288/443)
Verifying bitmap entries:  66% (293/443)
Verifying bitmap entries:  67% (297/443)
Verifying bitmap entries:  68% (302/443)
Verifying bitmap entries:  69% (306/443)
Verifying bitmap entries:  70% (311/443)
Verifying bitmap entries:  71% (315/443)
Verifying bitmap entries:  72% (319/443)
Verifying bitmap entries:  73% (324/443)
Verifying bitmap entries:  74% (328/443)
Verifying bitmap entries:  75% (333/443)
Verifying bitmap entries:  76% (337/443)
Verifying bitmap entries:  77% (342/443)
Verifying bitmap entries:  78% (346/443)
Verifying bitmap entries:  79% (350/443)
Verifying bitmap entries:  80% (355/443)
Verifying bitmap entries:  81% (359/443)
Verifying bitmap entries:  82% (364/443)
Verifying bitmap entries:  83% (368/443)
Verifying bitmap entries:  84% (373/443)
Verifying bitmap entries:  85% (377/443)
Verifying bitmap entries:  86% (381/443)
Verifying bitmap entries:  87% (386/443)
Verifying bitmap entries:  88% (390/443)
Verifying bitmap entries:  89% (395/443)
Verifying bitmap entries:  90% (399/443)
Verifying bitmap entries:  91% (404/443)
Verifying bitmap entries:  92% (408/443)
Verifying bitmap entries:  93% (412/443)
Verifying bitmap entries:  94% (417/443)
Verifying bitmap entries:  95% (421/443)
Verifying bitmap entries:  96% (426/443)
Verifying bitmap entries:  97% (430/443)
Verifying bitmap entries:  98% (435/443)
Verifying bitmap entries:  99% (439/443)
Verifying bitmap entries: 100% (443/443)
Verifying bitmap entries: 100% (443/443), done.
OK!
ok 300 - rev-list --test-bitmap verifies bitmaps

expecting success of 5326.301 'counting commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 301 - counting commits via bitmap (full bitmap, second)

expecting success of 5326.302 'counting partial commits via bitmap (full bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 302 - counting partial commits via bitmap (full bitmap, second)

expecting success of 5326.303 'counting commits with limit (full bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 303 - counting commits with limit (full bitmap, second)

expecting success of 5326.304 'counting non-linear history (full bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 304 - counting non-linear history (full bitmap, second)

expecting success of 5326.305 'counting commits with limiting (full bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 305 - counting commits with limiting (full bitmap, second)

expecting success of 5326.306 'counting objects via bitmap (full bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 306 - counting objects via bitmap (full bitmap, second)

expecting success of 5326.307 'enumerate commits (full bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 307 - enumerate commits (full bitmap, second)

expecting success of 5326.308 'enumerate --objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 308 - enumerate --objects (full bitmap, second)

expecting success of 5326.309 'bitmap --objects handles non-commit objects (full bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 309 - bitmap --objects handles non-commit objects (full bitmap, second)

expecting success of 5326.310 'counting commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 310 - counting commits via bitmap (full bitmap, other)

expecting success of 5326.311 'counting partial commits via bitmap (full bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 311 - counting partial commits via bitmap (full bitmap, other)

expecting success of 5326.312 'counting commits with limit (full bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 312 - counting commits with limit (full bitmap, other)

expecting success of 5326.313 'counting non-linear history (full bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 313 - counting non-linear history (full bitmap, other)

expecting success of 5326.314 'counting commits with limiting (full bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 314 - counting commits with limiting (full bitmap, other)

expecting success of 5326.315 'counting objects via bitmap (full bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 315 - counting objects via bitmap (full bitmap, other)

expecting success of 5326.316 'enumerate commits (full bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 316 - enumerate commits (full bitmap, other)

expecting success of 5326.317 'enumerate --objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 317 - enumerate --objects (full bitmap, other)

expecting success of 5326.318 'bitmap --objects handles non-commit objects (full bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 318 - bitmap --objects handles non-commit objects (full bitmap, other)

expecting success of 5326.319 'clone from bitmapped repository': 
		rm -fr clone.git &&
		git clone --no-local --bare . clone.git &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
Cloning into bare repository 'clone.git'...
ok 319 - clone from bitmapped repository

expecting success of 5326.320 'partial clone from bitmapped repository': 
		test_config uploadpack.allowfilter true &&
		rm -fr partial-clone.git &&
		git clone --no-local --bare --filter=blob:none . partial-clone.git &&
		(
			cd partial-clone.git &&
			pack=$(echo objects/pack/*.pack) &&
			git verify-pack -v "$pack" >have &&
			awk "/blob/ { print \$1 }" <have >blobs &&
			# we expect this single blob because of the direct ref
			git rev-parse refs/tags/tagged-blob >expect &&
			test_cmp expect blobs
		)
	
Cloning into bare repository 'partial-clone.git'...
ok 320 - partial clone from bitmapped repository

expecting success of 5326.321 'setup further non-bitmapped commits': 
		test_commit_bulk --id=further 10
	
37cdfb15dda4b8a893283d6025391133fad61400
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (        10 duplicates                  )
      blobs  :            0 (        10 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:           10 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            140
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         12
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       5262 /       5262
---------------------------------------------------------------------

ok 321 - setup further non-bitmapped commits

expecting success of 5326.322 'counting commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 322 - counting commits via bitmap (partial bitmap, second)

expecting success of 5326.323 'counting partial commits via bitmap (partial bitmap, second)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 323 - counting partial commits via bitmap (partial bitmap, second)

expecting success of 5326.324 'counting commits with limit (partial bitmap, second)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 324 - counting commits with limit (partial bitmap, second)

expecting success of 5326.325 'counting non-linear history (partial bitmap, second)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 325 - counting non-linear history (partial bitmap, second)

expecting success of 5326.326 'counting commits with limiting (partial bitmap, second)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 326 - counting commits with limiting (partial bitmap, second)

expecting success of 5326.327 'counting objects via bitmap (partial bitmap, second)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 327 - counting objects via bitmap (partial bitmap, second)

expecting success of 5326.328 'enumerate commits (partial bitmap, second)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 328 - enumerate commits (partial bitmap, second)

expecting success of 5326.329 'enumerate --objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 1, line 1
ok 329 - enumerate --objects (partial bitmap, second)

expecting success of 5326.330 'bitmap --objects handles non-commit objects (partial bitmap, second)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 330 - bitmap --objects handles non-commit objects (partial bitmap, second)

expecting success of 5326.331 'counting commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch >expect &&
		git rev-list --use-bitmap-index --count $branch >actual &&
		test_cmp expect actual
	
ok 331 - counting commits via bitmap (partial bitmap, other)

expecting success of 5326.332 'counting partial commits via bitmap (partial bitmap, other)': 
		git rev-list --count $branch~5..$branch >expect &&
		git rev-list --use-bitmap-index --count $branch~5..$branch >actual &&
		test_cmp expect actual
	
ok 332 - counting partial commits via bitmap (partial bitmap, other)

expecting success of 5326.333 'counting commits with limit (partial bitmap, other)': 
		git rev-list --count -n 1 $branch >expect &&
		git rev-list --use-bitmap-index --count -n 1 $branch >actual &&
		test_cmp expect actual
	
ok 333 - counting commits with limit (partial bitmap, other)

expecting success of 5326.334 'counting non-linear history (partial bitmap, other)': 
		git rev-list --count other...second >expect &&
		git rev-list --use-bitmap-index --count other...second >actual &&
		test_cmp expect actual
	
ok 334 - counting non-linear history (partial bitmap, other)

expecting success of 5326.335 'counting commits with limiting (partial bitmap, other)': 
		git rev-list --count $branch -- 1.t >expect &&
		git rev-list --use-bitmap-index --count $branch -- 1.t >actual &&
		test_cmp expect actual
	
ok 335 - counting commits with limiting (partial bitmap, other)

expecting success of 5326.336 'counting objects via bitmap (partial bitmap, other)': 
		git rev-list --count --objects $branch >expect &&
		git rev-list --use-bitmap-index --count --objects $branch >actual &&
		test_cmp expect actual
	
ok 336 - counting objects via bitmap (partial bitmap, other)

expecting success of 5326.337 'enumerate commits (partial bitmap, other)': 
		git rev-list --use-bitmap-index $branch >actual &&
		git rev-list $branch >expect &&
		test_bitmap_traversal --no-confirm-bitmaps expect actual
	
ok 337 - enumerate commits (partial bitmap, other)

expecting success of 5326.338 'enumerate --objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch >actual &&
		git rev-list --objects $branch >expect &&
		test_bitmap_traversal expect actual
	
expect actual differ: char 4101, line 101
ok 338 - enumerate --objects (partial bitmap, other)

expecting success of 5326.339 'bitmap --objects handles non-commit objects (partial bitmap, other)': 
		git rev-list --objects --use-bitmap-index $branch tagged-blob >actual &&
		grep $blob actual
	
782f60206c837dcd3d441e106549ad6f58de55b5
ok 339 - bitmap --objects handles non-commit objects (partial bitmap, other)

expecting success of 5326.340 'fetch (partial bitmap)': 
		git --git-dir=clone.git fetch origin second:second &&
		git rev-parse HEAD >expect &&
		git --git-dir=clone.git rev-parse HEAD >actual &&
		test_cmp expect actual
	
From /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/.
   37cdfb1..8935311  second     -> second
ok 340 - fetch (partial bitmap)

expecting success of 5326.341 'enumerating progress counts pack-reused objects': 
		count=$(git rev-list --objects --all --count) &&
		git repack -adb &&

		# check first with only reused objects; confirm that our
		# progress showed the right number, and also that we did
		# pack-reuse as expected.  Check only the final "done"
		# line of the meter (there may be an arbitrary number of
		# intermediate lines ending with CR).
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $count, done" stderr &&
		grep "pack-reused $count" stderr &&

		# now the same but with one non-reused object
		git commit --allow-empty -m "an extra commit object" &&
		GIT_PROGRESS_DELAY=0 \
			git pack-objects --all --stdout --progress \
			</dev/null >/dev/null 2>stderr &&
		grep "Enumerating objects: $((count+1)), done" stderr &&
		grep "pack-reused $count" stderr
	
Enumerating objects: 766, done.
Total 766 (delta 0), reused 0 (delta 0), pack-reused 766
[second 641c264] an extra commit object
 Author: A U Thor <author@example.com>
Enumerating objects: 767, done.
Total 767 (delta 0), reused 0 (delta 0), pack-reused 766
ok 341 - enumerating progress counts pack-reused objects

expecting success of 5326.342 'removing a MIDX clears stale bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&
			test_commit base &&
			git repack &&
			git multi-pack-index write --bitmap &&

			# Write a MIDX and bitmap; remove the MIDX but leave the bitmap.
			stale_bitmap=$midx-$(midx_checksum $objdir).bitmap &&
			rm $midx &&

			# Then write a new MIDX.
			test_commit new &&
			git repack &&
			git multi-pack-index write --bitmap &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
			test_path_is_missing $stale_bitmap
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 4d35cd2] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
ok 342 - removing a MIDX clears stale bitmaps

expecting success of 5326.343 'pack.preferBitmapTips': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit_bulk --message="%s" 103 &&

			git log --format="%H" >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git multi-pack-index write --bitmap &&
			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >before &&
			test_line_count = 1 before &&

			perl -ne "printf(\"create refs/tags/include/%d \", $.); print" \
				<before | git update-ref --stdin &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			git -c pack.preferBitmapTips=refs/tags/include \
				multi-pack-index write --bitmap &&
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26907 /      26907
---------------------------------------------------------------------

--- before	2022-12-28 07:50:11.410128137 +0000
+++ after	2022-12-28 07:50:11.650136956 +0000
@@ -1 +1 @@
-a09427aadc45553b705d3a726a24ceeaa43874f0
+e8ecff2ac3e6e0a87c9bd5c4436dad90e555810b
ok 343 - pack.preferBitmapTips

expecting success of 5326.344 'writing a bitmap with --refs-snapshot': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit one &&
			test_commit two &&

			git rev-parse one >snapshot &&

			git repack -ad &&

			# First, write a MIDX which see both refs/tags/one and
			# refs/tags/two (causing both of those commits to receive
			# bitmaps).
			git multi-pack-index write --bitmap &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			grep "$(git rev-parse one)" bitmaps &&
			grep "$(git rev-parse two)" bitmaps &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			# Then again, but with a refs snapshot which only sees
			# refs/tags/one.
			git multi-pack-index write --bitmap --refs-snapshot=snapshot &&

			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			grep "$(git rev-parse one)" bitmaps &&
			! grep "$(git rev-parse two)" bitmaps
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 9b01d55] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 3d96559] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
9b01d555d17b903201cacf13508d9da2598a89a5
3d9655938dbedf871db7ad3f79a0636d8d0acc16
9b01d555d17b903201cacf13508d9da2598a89a5
ok 344 - writing a bitmap with --refs-snapshot

expecting success of 5326.345 'write a bitmap with --refs-snapshot (preferred tips)': 
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit_bulk --message="%s" 103 &&

			git log --format="%H" >commits.raw &&
			sort <commits.raw >commits &&

			git log --format="create refs/tags/%s %H" HEAD >refs &&
			git update-ref --stdin <refs &&

			git multi-pack-index write --bitmap &&
			test_path_is_file $midx &&
			test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >before &&
			test_line_count = 1 before &&

			(
				grep -vf before commits.raw &&
				# mark missing commits as preferred
				sed "s/^/+/" before
			) >snapshot &&

			rm -fr $midx-$(midx_checksum $objdir).bitmap &&
			rm -fr $midx &&

			git multi-pack-index write --bitmap --refs-snapshot=snapshot &&
			test-tool bitmap list-commits | sort >bitmaps &&
			comm -13 bitmaps commits >after &&

			! test_cmp before after
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26907 /      26907
---------------------------------------------------------------------

--- before	2022-12-28 07:50:14.520242414 +0000
+++ after	2022-12-28 07:50:14.780251968 +0000
@@ -1 +1 @@
-a09427aadc45553b705d3a726a24ceeaa43874f0
+e8ecff2ac3e6e0a87c9bd5c4436dad90e555810b
ok 345 - write a bitmap with --refs-snapshot (preferred tips)

expecting success of 5326.346 'hash-cache values are propagated from pack bitmaps': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit base &&
			test_commit base2 &&
			git repack -adb &&

			test-tool bitmap dump-hashes >pack.raw &&
			test_file_not_empty pack.raw &&
			sort pack.raw >pack.hashes &&

			test_commit new &&
			git repack &&
			git multi-pack-index write --bitmap &&

			test-tool bitmap dump-hashes >midx.raw &&
			sort midx.raw >midx.hashes &&

			# ensure that every namehash in the pack bitmap can be found in
			# the midx bitmap (i.e., that there are no oid-namehash pairs
			# unique to the pack bitmap).
			comm -23 pack.hashes midx.hashes >dropped.hashes &&
			test_must_be_empty dropped.hashes
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 513b690] base2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base2.t
[master c4bd5cc] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
ok 346 - hash-cache values are propagated from pack bitmaps

expecting success of 5326.347 'no .bitmap is written without any objects': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			empty="$(git pack-objects $objdir/pack/pack </dev/null)" &&
			cat >packs <<-EOF &&
			pack-$empty.idx
			EOF

			git multi-pack-index write --bitmap --stdin-packs \
				<packs 2>err &&

			grep "bitmap without any objects" err &&

			test_path_is_file $midx &&
			test_path_is_missing $midx-$(midx_checksum $objdir).bitmap
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
warning: refusing to write multi-pack .bitmap without any objects
ok 347 - no .bitmap is written without any objects

expecting success of 5326.348 'graceful fallback when missing reverse index': 
		rm -fr repo &&
		git init repo &&
		test_when_finished "rm -fr repo" &&
		(
			cd repo &&
			git config pack.writeBitmapLookupTable false &&

			test_commit base &&

			# write a pack and MIDX bitmap containing base
			git repack -adb &&
			git multi-pack-index write --bitmap &&

			GIT_TEST_MIDX_READ_RIDX=0 \
				git rev-list --use-bitmap-index HEAD 2>err &&
			! grep "ignoring extra bitmap file" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
099797b4d0eb8d4e4edb917fe24ec0b4659190f9
ok 348 - graceful fallback when missing reverse index

expecting success of 5326.349 'multi-pack-index write writes lookup table if enabled': 
	rm -fr repo &&
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&
		test_commit base &&
		git config pack.writeBitmapLookupTable true &&
		git repack -ad &&
		GIT_TRACE2_EVENT="$(pwd)/trace" \
			git multi-pack-index write --bitmap &&
		grep "\"label\":\"writing_lookup_table\"" trace
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
{"event":"region_enter","sid":"20221228T075017.187405Z-Hc64317c2-P00003ac0","thread":"main","time":"2022-12-28T07:50:17.215431Z","file":"pack-bitmap-write.c","line":717,"repo":1,"nesting":3,"category":"pack-bitmap-write","label":"writing_lookup_table"}
{"event":"region_leave","sid":"20221228T075017.187405Z-Hc64317c2-P00003ac0","thread":"main","time":"2022-12-28T07:50:17.215716Z","file":"pack-bitmap-write.c","line":744,"repo":1,"t_rel":0.000302,"nesting":3,"category":"pack-bitmap-write","label":"writing_lookup_table"}
ok 349 - multi-pack-index write writes lookup table if enabled

expecting success of 5326.350 'preferred pack change with existing MIDX bitmap': 
	git init preferred-pack-with-existing &&
	(
		cd preferred-pack-with-existing &&

		test_commit base &&
		test_commit other &&

		git rev-list --objects --no-object-names base >p1.objects &&
		git rev-list --objects --no-object-names other >p2.objects &&

		p1="$(git pack-objects "$objdir/pack/pack" \
			--delta-base-offset <p1.objects)" &&
		p2="$(git pack-objects "$objdir/pack/pack" \
			--delta-base-offset <p2.objects)" &&

		# Generate a MIDX containing the first two packs,
		# marking p1 as preferred, and ensure that it can be
		# successfully cloned.
		git multi-pack-index write --bitmap \
			--preferred-pack="pack-$p1.pack" &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
		git clone --no-local . clone1 &&

		# Then generate a new pack which sorts ahead of any
		# existing pack (by tweaking the pack prefix).
		test_commit foo &&
		git pack-objects --all --unpacked $objdir/pack/pack0 &&

		# Generate a new MIDX which changes the preferred pack
		# to a pack contained in the existing MIDX.
		git multi-pack-index write --bitmap \
			--preferred-pack="pack-$p2.pack" &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		# When the above circumstances are met, the preferred
		# pack should change appropriately and clones should
		# (still) succeed.
		git clone --no-local . clone2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/preferred-pack-with-existing/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 2949ebd] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
Cloning into 'clone1'...
[master fa5f385] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
10b429387fa5da178048e1b41a3fa45345c4542f
Cloning into 'clone2'...
ok 350 - preferred pack change with existing MIDX bitmap

expecting success of 5326.351 'tagged commits are selected for bitmapping': 
	rm -fr repo &&
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit --annotate base &&
		git repack -d &&

		# Remove refs/heads/main which points at the commit directly,
		# leaving only a reference to the annotated tag.
		git branch -M main &&
		git checkout base &&
		git branch -d main &&

		git multi-pack-index write --bitmap &&

		git rev-parse HEAD >want &&
		test-tool bitmap list-commits >actual &&
		grep $(cat want) actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5326-multi-pack-bitmaps/repo/.git/
[master (root-commit) 099797b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Note: switching to 'base'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 099797b base
Deleted branch main (was 099797b).
099797b4d0eb8d4e4edb917fe24ec0b4659190f9
ok 351 - tagged commits are selected for bitmapping

# passed all 351 test(s)
1..351
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5501-fetch-push-alternates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5501-fetch-push-alternates/.git/
expecting success of 5501.1 'setup': 
	(
		git init original &&
		cd original &&
		i=0 &&
		while test $i -le 100
		do
			echo "$i" >count &&
			git add count &&
			git commit -m "$i" || exit
			i=$(($i + 1))
		done
	) &&
	(
		git clone --reference=original "file://$(pwd)/original" one &&
		cd one &&
		echo Z >count &&
		git add count &&
		git commit -m Z &&
		count_objects >../one.count
	) &&
	A=$(pwd)/original/.git/objects &&
	git init receiver &&
	echo "$A" >receiver/.git/objects/info/alternates &&
	git init fetcher &&
	echo "$A" >fetcher/.git/objects/info/alternates

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5501-fetch-push-alternates/original/.git/
[main (root-commit) d7c40dd] 0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 count
[main 00c614b] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 5ec1e45] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a9efc77] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c661cc5] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 89f590f] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 96be99a] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 7e9488d] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2f54fac] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 11134d9] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6236019] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main bebbf7d] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b1e60f2] 12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 10e978f] 13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 52d904f] 14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 5f1970b] 15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d80a0ca] 16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3facc15] 17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main dd21a14] 18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 67c96e8] 19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0a5eb8d] 20
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ed4a160] 21
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 1eb8b26] 22
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f914101] 23
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c371026] 24
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b0c6b03] 25
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d6851c0] 26
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9a208aa] 27
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 4b86dd7] 28
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 86a56bd] 29
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main aa18215] 30
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2e42b4c] 31
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main e38e14f] 32
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f7aa34c] 33
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 1d551cb] 34
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ed39ed7] 35
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 54de9d5] 36
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main dcfcf4c] 37
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a67fff4] 38
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3db9e8e] 39
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 39c359d] 40
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f2920ee] 41
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2d4b8b6] 42
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 66140fd] 43
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ed32c34] 44
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ce3db61] 45
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b328726] 46
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 92302ab] 47
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main af56e5b] 48
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f02ac0b] 49
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f600268] 50
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6967bfc] 51
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6f79241] 52
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3fe3c4e] 53
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main dc5bb44] 54
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main e477179] 55
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main fd9c417] 56
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c7e9e38] 57
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 48c25a1] 58
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6daa813] 59
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3957a75] 60
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f2ff35a] 61
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 38df9e3] 62
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 360af37] 63
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6269302] 64
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 830052d] 65
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 34ff71d] 66
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f5c98a1] 67
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main df2b346] 68
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c845993] 69
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b2f3c62] 70
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2342d27] 71
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a0c2d2f] 72
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main cf25d3f] 73
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 20d3c94] 74
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d436a89] 75
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main fe0c75d] 76
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 72c1473] 77
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main dcd8460] 78
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9d5db24] 79
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 53bba3b] 80
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 72531ec] 81
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b0f56b9] 82
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9444118] 83
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main db330fb] 84
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 74834bd] 85
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3a1af5c] 86
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main bb4543a] 87
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main bb3fe84] 88
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d925d95] 89
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main bdcb25b] 90
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ea11a31] 91
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 04225bc] 92
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 4427164] 93
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 3961ecb] 94
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 728c870] 95
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 1463d46] 96
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b7b22b0] 97
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main e63dc2e] 98
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a9eed53] 99
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f746b54] 100
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'one'...
[main 1e6ca96] Z
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5501-fetch-push-alternates/receiver/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5501-fetch-push-alternates/fetcher/.git/
ok 1 - setup

expecting success of 5501.2 'pushing into a repository with the same alternate': 
	(
		cd one &&
		git push ../receiver main:refs/heads/it
	) &&
	(
		cd receiver &&
		count_objects >../receiver.count
	) &&
	test_cmp one.count receiver.count

To ../receiver
 * [new branch]      main -> it
ok 2 - pushing into a repository with the same alternate

expecting success of 5501.3 'fetching from a repository with the same alternate': 
	(
		cd fetcher &&
		git fetch ../one main:refs/heads/it &&
		count_objects >../fetcher.count
	) &&
	test_cmp one.count fetcher.count

From ../one
 * [new branch]      main       -> it
ok 3 - fetching from a repository with the same alternate

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5502-quickfetch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5502-quickfetch/.git/
expecting success of 5502.1 'setup': 

	test_tick &&
	echo ichi >file &&
	git add file &&
	git commit -m initial &&

	cnt=$( (
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 3

[main (root-commit) f3b89bf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 5502.2 'clone without alternate': 

	(
		mkdir cloned &&
		cd cloned &&
		git init-db &&
		git remote add -f origin ..
	) &&
	cnt=$( (
		cd cloned &&
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 3

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5502-quickfetch/cloned/.git/
Updating origin
From ..
 * [new branch]      main       -> origin/main
ok 2 - clone without alternate

expecting success of 5502.3 'further commits in the original': 

	test_tick &&
	echo ni >file &&
	git commit -a -m second &&

	cnt=$( (
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 6

[main 12e0958] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - further commits in the original

expecting success of 5502.4 'copy commit and tree but not blob by hand': 

	git rev-list --objects HEAD |
	git pack-objects --stdout |
	(
		cd cloned &&
		git unpack-objects
	) &&

	cnt=$( (
		cd cloned &&
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 6 &&

	blob=$(git rev-parse HEAD:file | sed -e "s|..|&/|") &&
	test -f "cloned/.git/objects/$blob" &&
	rm -f "cloned/.git/objects/$blob" &&

	cnt=$( (
		cd cloned &&
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 5


ok 4 - copy commit and tree but not blob by hand

expecting success of 5502.5 'quickfetch should not leave a corrupted repository': 

	(
		cd cloned &&
		git fetch
	) &&

	cnt=$( (
		cd cloned &&
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	test $cnt -eq 6


From ..
   f3b89bf..12e0958  main       -> origin/main
ok 5 - quickfetch should not leave a corrupted repository

expecting success of 5502.6 'quickfetch should not copy from alternate': 

	(
		mkdir quickclone &&
		cd quickclone &&
		git init-db &&
		(cd ../.git/objects && pwd) >.git/objects/info/alternates &&
		git remote add origin .. &&
		git fetch -k -k
	) &&
	obj_cnt=$( (
		cd quickclone &&
		git count-objects | sed -e "s/ *objects,.*//"
	) ) &&
	pck_cnt=$( (
		cd quickclone &&
		git count-objects -v | sed -n -e "/packs:/{
				s/packs://
				p
				q
			}"
	) ) &&
	origin_main=$( (
		cd quickclone &&
		git rev-parse origin/main
	) ) &&
	echo "loose objects: $obj_cnt, packfiles: $pck_cnt" &&
	test $obj_cnt -eq 0 &&
	test $pck_cnt -eq 0 &&
	test z$origin_main = z$(git rev-parse main)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5502-quickfetch/quickclone/.git/
From ..
 * [new branch]      main       -> origin/main
loose objects: 0, packfiles:  0
ok 6 - quickfetch should not copy from alternate

expecting success of 5502.7 'quickfetch should handle ~1000 refs (on Windows)': 

	git gc &&
	head=$(git rev-parse HEAD) &&
	branchprefix="$head refs/heads/branch" &&
	for i in 0 1 2 3 4 5 6 7 8 9; do
		for j in 0 1 2 3 4 5 6 7 8 9; do
			for k in 0 1 2 3 4 5 6 7 8 9; do
				echo "$branchprefix$i$j$k" >> .git/packed-refs || return 1
			done
		done
	done &&
	(
		cd cloned &&
		git fetch &&
		git fetch
	)


From ..
 * [new branch]      branch000  -> origin/branch000
 * [new branch]      branch001  -> origin/branch001
 * [new branch]      branch002  -> origin/branch002
 * [new branch]      branch003  -> origin/branch003
 * [new branch]      branch004  -> origin/branch004
 * [new branch]      branch005  -> origin/branch005
 * [new branch]      branch006  -> origin/branch006
 * [new branch]      branch007  -> origin/branch007
 * [new branch]      branch008  -> origin/branch008
 * [new branch]      branch009  -> origin/branch009
 * [new branch]      branch010  -> origin/branch010
 * [new branch]      branch011  -> origin/branch011
 * [new branch]      branch012  -> origin/branch012
 * [new branch]      branch013  -> origin/branch013
 * [new branch]      branch014  -> origin/branch014
 * [new branch]      branch015  -> origin/branch015
 * [new branch]      branch016  -> origin/branch016
 * [new branch]      branch017  -> origin/branch017
 * [new branch]      branch018  -> origin/branch018
 * [new branch]      branch019  -> origin/branch019
 * [new branch]      branch020  -> origin/branch020
 * [new branch]      branch021  -> origin/branch021
 * [new branch]      branch022  -> origin/branch022
 * [new branch]      branch023  -> origin/branch023
 * [new branch]      branch024  -> origin/branch024
 * [new branch]      branch025  -> origin/branch025
 * [new branch]      branch026  -> origin/branch026
 * [new branch]      branch027  -> origin/branch027
 * [new branch]      branch028  -> origin/branch028
 * [new branch]      branch029  -> origin/branch029
 * [new branch]      branch030  -> origin/branch030
 * [new branch]      branch031  -> origin/branch031
 * [new branch]      branch032  -> origin/branch032
 * [new branch]      branch033  -> origin/branch033
 * [new branch]      branch034  -> origin/branch034
 * [new branch]      branch035  -> origin/branch035
 * [new branch]      branch036  -> origin/branch036
 * [new branch]      branch037  -> origin/branch037
 * [new branch]      branch038  -> origin/branch038
 * [new branch]      branch039  -> origin/branch039
 * [new branch]      branch040  -> origin/branch040
 * [new branch]      branch041  -> origin/branch041
 * [new branch]      branch042  -> origin/branch042
 * [new branch]      branch043  -> origin/branch043
 * [new branch]      branch044  -> origin/branch044
 * [new branch]      branch045  -> origin/branch045
 * [new branch]      branch046  -> origin/branch046
 * [new branch]      branch047  -> origin/branch047
 * [new branch]      branch048  -> origin/branch048
 * [new branch]      branch049  -> origin/branch049
 * [new branch]      branch050  -> origin/branch050
 * [new branch]      branch051  -> origin/branch051
 * [new branch]      branch052  -> origin/branch052
 * [new branch]      branch053  -> origin/branch053
 * [new branch]      branch054  -> origin/branch054
 * [new branch]      branch055  -> origin/branch055
 * [new branch]      branch056  -> origin/branch056
 * [new branch]      branch057  -> origin/branch057
 * [new branch]      branch058  -> origin/branch058
 * [new branch]      branch059  -> origin/branch059
 * [new branch]      branch060  -> origin/branch060
 * [new branch]      branch061  -> origin/branch061
 * [new branch]      branch062  -> origin/branch062
 * [new branch]      branch063  -> origin/branch063
 * [new branch]      branch064  -> origin/branch064
 * [new branch]      branch065  -> origin/branch065
 * [new branch]      branch066  -> origin/branch066
 * [new branch]      branch067  -> origin/branch067
 * [new branch]      branch068  -> origin/branch068
 * [new branch]      branch069  -> origin/branch069
 * [new branch]      branch070  -> origin/branch070
 * [new branch]      branch071  -> origin/branch071
 * [new branch]      branch072  -> origin/branch072
 * [new branch]      branch073  -> origin/branch073
 * [new branch]      branch074  -> origin/branch074
 * [new branch]      branch075  -> origin/branch075
 * [new branch]      branch076  -> origin/branch076
 * [new branch]      branch077  -> origin/branch077
 * [new branch]      branch078  -> origin/branch078
 * [new branch]      branch079  -> origin/branch079
 * [new branch]      branch080  -> origin/branch080
 * [new branch]      branch081  -> origin/branch081
 * [new branch]      branch082  -> origin/branch082
 * [new branch]      branch083  -> origin/branch083
 * [new branch]      branch084  -> origin/branch084
 * [new branch]      branch085  -> origin/branch085
 * [new branch]      branch086  -> origin/branch086
 * [new branch]      branch087  -> origin/branch087
 * [new branch]      branch088  -> origin/branch088
 * [new branch]      branch089  -> origin/branch089
 * [new branch]      branch090  -> origin/branch090
 * [new branch]      branch091  -> origin/branch091
 * [new branch]      branch092  -> origin/branch092
 * [new branch]      branch093  -> origin/branch093
 * [new branch]      branch094  -> origin/branch094
 * [new branch]      branch095  -> origin/branch095
 * [new branch]      branch096  -> origin/branch096
 * [new branch]      branch097  -> origin/branch097
 * [new branch]      branch098  -> origin/branch098
 * [new branch]      branch099  -> origin/branch099
 * [new branch]      branch100  -> origin/branch100
 * [new branch]      branch101  -> origin/branch101
 * [new branch]      branch102  -> origin/branch102
 * [new branch]      branch103  -> origin/branch103
 * [new branch]      branch104  -> origin/branch104
 * [new branch]      branch105  -> origin/branch105
 * [new branch]      branch106  -> origin/branch106
 * [new branch]      branch107  -> origin/branch107
 * [new branch]      branch108  -> origin/branch108
 * [new branch]      branch109  -> origin/branch109
 * [new branch]      branch110  -> origin/branch110
 * [new branch]      branch111  -> origin/branch111
 * [new branch]      branch112  -> origin/branch112
 * [new branch]      branch113  -> origin/branch113
 * [new branch]      branch114  -> origin/branch114
 * [new branch]      branch115  -> origin/branch115
 * [new branch]      branch116  -> origin/branch116
 * [new branch]      branch117  -> origin/branch117
 * [new branch]      branch118  -> origin/branch118
 * [new branch]      branch119  -> origin/branch119
 * [new branch]      branch120  -> origin/branch120
 * [new branch]      branch121  -> origin/branch121
 * [new branch]      branch122  -> origin/branch122
 * [new branch]      branch123  -> origin/branch123
 * [new branch]      branch124  -> origin/branch124
 * [new branch]      branch125  -> origin/branch125
 * [new branch]      branch126  -> origin/branch126
 * [new branch]      branch127  -> origin/branch127
 * [new branch]      branch128  -> origin/branch128
 * [new branch]      branch129  -> origin/branch129
 * [new branch]      branch130  -> origin/branch130
 * [new branch]      branch131  -> origin/branch131
 * [new branch]      branch132  -> origin/branch132
 * [new branch]      branch133  -> origin/branch133
 * [new branch]      branch134  -> origin/branch134
 * [new branch]      branch135  -> origin/branch135
 * [new branch]      branch136  -> origin/branch136
 * [new branch]      branch137  -> origin/branch137
 * [new branch]      branch138  -> origin/branch138
 * [new branch]      branch139  -> origin/branch139
 * [new branch]      branch140  -> origin/branch140
 * [new branch]      branch141  -> origin/branch141
 * [new branch]      branch142  -> origin/branch142
 * [new branch]      branch143  -> origin/branch143
 * [new branch]      branch144  -> origin/branch144
 * [new branch]      branch145  -> origin/branch145
 * [new branch]      branch146  -> origin/branch146
 * [new branch]      branch147  -> origin/branch147
 * [new branch]      branch148  -> origin/branch148
 * [new branch]      branch149  -> origin/branch149
 * [new branch]      branch150  -> origin/branch150
 * [new branch]      branch151  -> origin/branch151
 * [new branch]      branch152  -> origin/branch152
 * [new branch]      branch153  -> origin/branch153
 * [new branch]      branch154  -> origin/branch154
 * [new branch]      branch155  -> origin/branch155
 * [new branch]      branch156  -> origin/branch156
 * [new branch]      branch157  -> origin/branch157
 * [new branch]      branch158  -> origin/branch158
 * [new branch]      branch159  -> origin/branch159
 * [new branch]      branch160  -> origin/branch160
 * [new branch]      branch161  -> origin/branch161
 * [new branch]      branch162  -> origin/branch162
 * [new branch]      branch163  -> origin/branch163
 * [new branch]      branch164  -> origin/branch164
 * [new branch]      branch165  -> origin/branch165
 * [new branch]      branch166  -> origin/branch166
 * [new branch]      branch167  -> origin/branch167
 * [new branch]      branch168  -> origin/branch168
 * [new branch]      branch169  -> origin/branch169
 * [new branch]      branch170  -> origin/branch170
 * [new branch]      branch171  -> origin/branch171
 * [new branch]      branch172  -> origin/branch172
 * [new branch]      branch173  -> origin/branch173
 * [new branch]      branch174  -> origin/branch174
 * [new branch]      branch175  -> origin/branch175
 * [new branch]      branch176  -> origin/branch176
 * [new branch]      branch177  -> origin/branch177
 * [new branch]      branch178  -> origin/branch178
 * [new branch]      branch179  -> origin/branch179
 * [new branch]      branch180  -> origin/branch180
 * [new branch]      branch181  -> origin/branch181
 * [new branch]      branch182  -> origin/branch182
 * [new branch]      branch183  -> origin/branch183
 * [new branch]      branch184  -> origin/branch184
 * [new branch]      branch185  -> origin/branch185
 * [new branch]      branch186  -> origin/branch186
 * [new branch]      branch187  -> origin/branch187
 * [new branch]      branch188  -> origin/branch188
 * [new branch]      branch189  -> origin/branch189
 * [new branch]      branch190  -> origin/branch190
 * [new branch]      branch191  -> origin/branch191
 * [new branch]      branch192  -> origin/branch192
 * [new branch]      branch193  -> origin/branch193
 * [new branch]      branch194  -> origin/branch194
 * [new branch]      branch195  -> origin/branch195
 * [new branch]      branch196  -> origin/branch196
 * [new branch]      branch197  -> origin/branch197
 * [new branch]      branch198  -> origin/branch198
 * [new branch]      branch199  -> origin/branch199
 * [new branch]      branch200  -> origin/branch200
 * [new branch]      branch201  -> origin/branch201
 * [new branch]      branch202  -> origin/branch202
 * [new branch]      branch203  -> origin/branch203
 * [new branch]      branch204  -> origin/branch204
 * [new branch]      branch205  -> origin/branch205
 * [new branch]      branch206  -> origin/branch206
 * [new branch]      branch207  -> origin/branch207
 * [new branch]      branch208  -> origin/branch208
 * [new branch]      branch209  -> origin/branch209
 * [new branch]      branch210  -> origin/branch210
 * [new branch]      branch211  -> origin/branch211
 * [new branch]      branch212  -> origin/branch212
 * [new branch]      branch213  -> origin/branch213
 * [new branch]      branch214  -> origin/branch214
 * [new branch]      branch215  -> origin/branch215
 * [new branch]      branch216  -> origin/branch216
 * [new branch]      branch217  -> origin/branch217
 * [new branch]      branch218  -> origin/branch218
 * [new branch]      branch219  -> origin/branch219
 * [new branch]      branch220  -> origin/branch220
 * [new branch]      branch221  -> origin/branch221
 * [new branch]      branch222  -> origin/branch222
 * [new branch]      branch223  -> origin/branch223
 * [new branch]      branch224  -> origin/branch224
 * [new branch]      branch225  -> origin/branch225
 * [new branch]      branch226  -> origin/branch226
 * [new branch]      branch227  -> origin/branch227
 * [new branch]      branch228  -> origin/branch228
 * [new branch]      branch229  -> origin/branch229
 * [new branch]      branch230  -> origin/branch230
 * [new branch]      branch231  -> origin/branch231
 * [new branch]      branch232  -> origin/branch232
 * [new branch]      branch233  -> origin/branch233
 * [new branch]      branch234  -> origin/branch234
 * [new branch]      branch235  -> origin/branch235
 * [new branch]      branch236  -> origin/branch236
 * [new branch]      branch237  -> origin/branch237
 * [new branch]      branch238  -> origin/branch238
 * [new branch]      branch239  -> origin/branch239
 * [new branch]      branch240  -> origin/branch240
 * [new branch]      branch241  -> origin/branch241
 * [new branch]      branch242  -> origin/branch242
 * [new branch]      branch243  -> origin/branch243
 * [new branch]      branch244  -> origin/branch244
 * [new branch]      branch245  -> origin/branch245
 * [new branch]      branch246  -> origin/branch246
 * [new branch]      branch247  -> origin/branch247
 * [new branch]      branch248  -> origin/branch248
 * [new branch]      branch249  -> origin/branch249
 * [new branch]      branch250  -> origin/branch250
 * [new branch]      branch251  -> origin/branch251
 * [new branch]      branch252  -> origin/branch252
 * [new branch]      branch253  -> origin/branch253
 * [new branch]      branch254  -> origin/branch254
 * [new branch]      branch255  -> origin/branch255
 * [new branch]      branch256  -> origin/branch256
 * [new branch]      branch257  -> origin/branch257
 * [new branch]      branch258  -> origin/branch258
 * [new branch]      branch259  -> origin/branch259
 * [new branch]      branch260  -> origin/branch260
 * [new branch]      branch261  -> origin/branch261
 * [new branch]      branch262  -> origin/branch262
 * [new branch]      branch263  -> origin/branch263
 * [new branch]      branch264  -> origin/branch264
 * [new branch]      branch265  -> origin/branch265
 * [new branch]      branch266  -> origin/branch266
 * [new branch]      branch267  -> origin/branch267
 * [new branch]      branch268  -> origin/branch268
 * [new branch]      branch269  -> origin/branch269
 * [new branch]      branch270  -> origin/branch270
 * [new branch]      branch271  -> origin/branch271
 * [new branch]      branch272  -> origin/branch272
 * [new branch]      branch273  -> origin/branch273
 * [new branch]      branch274  -> origin/branch274
 * [new branch]      branch275  -> origin/branch275
 * [new branch]      branch276  -> origin/branch276
 * [new branch]      branch277  -> origin/branch277
 * [new branch]      branch278  -> origin/branch278
 * [new branch]      branch279  -> origin/branch279
 * [new branch]      branch280  -> origin/branch280
 * [new branch]      branch281  -> origin/branch281
 * [new branch]      branch282  -> origin/branch282
 * [new branch]      branch283  -> origin/branch283
 * [new branch]      branch284  -> origin/branch284
 * [new branch]      branch285  -> origin/branch285
 * [new branch]      branch286  -> origin/branch286
 * [new branch]      branch287  -> origin/branch287
 * [new branch]      branch288  -> origin/branch288
 * [new branch]      branch289  -> origin/branch289
 * [new branch]      branch290  -> origin/branch290
 * [new branch]      branch291  -> origin/branch291
 * [new branch]      branch292  -> origin/branch292
 * [new branch]      branch293  -> origin/branch293
 * [new branch]      branch294  -> origin/branch294
 * [new branch]      branch295  -> origin/branch295
 * [new branch]      branch296  -> origin/branch296
 * [new branch]      branch297  -> origin/branch297
 * [new branch]      branch298  -> origin/branch298
 * [new branch]      branch299  -> origin/branch299
 * [new branch]      branch300  -> origin/branch300
 * [new branch]      branch301  -> origin/branch301
 * [new branch]      branch302  -> origin/branch302
 * [new branch]      branch303  -> origin/branch303
 * [new branch]      branch304  -> origin/branch304
 * [new branch]      branch305  -> origin/branch305
 * [new branch]      branch306  -> origin/branch306
 * [new branch]      branch307  -> origin/branch307
 * [new branch]      branch308  -> origin/branch308
 * [new branch]      branch309  -> origin/branch309
 * [new branch]      branch310  -> origin/branch310
 * [new branch]      branch311  -> origin/branch311
 * [new branch]      branch312  -> origin/branch312
 * [new branch]      branch313  -> origin/branch313
 * [new branch]      branch314  -> origin/branch314
 * [new branch]      branch315  -> origin/branch315
 * [new branch]      branch316  -> origin/branch316
 * [new branch]      branch317  -> origin/branch317
 * [new branch]      branch318  -> origin/branch318
 * [new branch]      branch319  -> origin/branch319
 * [new branch]      branch320  -> origin/branch320
 * [new branch]      branch321  -> origin/branch321
 * [new branch]      branch322  -> origin/branch322
 * [new branch]      branch323  -> origin/branch323
 * [new branch]      branch324  -> origin/branch324
 * [new branch]      branch325  -> origin/branch325
 * [new branch]      branch326  -> origin/branch326
 * [new branch]      branch327  -> origin/branch327
 * [new branch]      branch328  -> origin/branch328
 * [new branch]      branch329  -> origin/branch329
 * [new branch]      branch330  -> origin/branch330
 * [new branch]      branch331  -> origin/branch331
 * [new branch]      branch332  -> origin/branch332
 * [new branch]      branch333  -> origin/branch333
 * [new branch]      branch334  -> origin/branch334
 * [new branch]      branch335  -> origin/branch335
 * [new branch]      branch336  -> origin/branch336
 * [new branch]      branch337  -> origin/branch337
 * [new branch]      branch338  -> origin/branch338
 * [new branch]      branch339  -> origin/branch339
 * [new branch]      branch340  -> origin/branch340
 * [new branch]      branch341  -> origin/branch341
 * [new branch]      branch342  -> origin/branch342
 * [new branch]      branch343  -> origin/branch343
 * [new branch]      branch344  -> origin/branch344
 * [new branch]      branch345  -> origin/branch345
 * [new branch]      branch346  -> origin/branch346
 * [new branch]      branch347  -> origin/branch347
 * [new branch]      branch348  -> origin/branch348
 * [new branch]      branch349  -> origin/branch349
 * [new branch]      branch350  -> origin/branch350
 * [new branch]      branch351  -> origin/branch351
 * [new branch]      branch352  -> origin/branch352
 * [new branch]      branch353  -> origin/branch353
 * [new branch]      branch354  -> origin/branch354
 * [new branch]      branch355  -> origin/branch355
 * [new branch]      branch356  -> origin/branch356
 * [new branch]      branch357  -> origin/branch357
 * [new branch]      branch358  -> origin/branch358
 * [new branch]      branch359  -> origin/branch359
 * [new branch]      branch360  -> origin/branch360
 * [new branch]      branch361  -> origin/branch361
 * [new branch]      branch362  -> origin/branch362
 * [new branch]      branch363  -> origin/branch363
 * [new branch]      branch364  -> origin/branch364
 * [new branch]      branch365  -> origin/branch365
 * [new branch]      branch366  -> origin/branch366
 * [new branch]      branch367  -> origin/branch367
 * [new branch]      branch368  -> origin/branch368
 * [new branch]      branch369  -> origin/branch369
 * [new branch]      branch370  -> origin/branch370
 * [new branch]      branch371  -> origin/branch371
 * [new branch]      branch372  -> origin/branch372
 * [new branch]      branch373  -> origin/branch373
 * [new branch]      branch374  -> origin/branch374
 * [new branch]      branch375  -> origin/branch375
 * [new branch]      branch376  -> origin/branch376
 * [new branch]      branch377  -> origin/branch377
 * [new branch]      branch378  -> origin/branch378
 * [new branch]      branch379  -> origin/branch379
 * [new branch]      branch380  -> origin/branch380
 * [new branch]      branch381  -> origin/branch381
 * [new branch]      branch382  -> origin/branch382
 * [new branch]      branch383  -> origin/branch383
 * [new branch]      branch384  -> origin/branch384
 * [new branch]      branch385  -> origin/branch385
 * [new branch]      branch386  -> origin/branch386
 * [new branch]      branch387  -> origin/branch387
 * [new branch]      branch388  -> origin/branch388
 * [new branch]      branch389  -> origin/branch389
 * [new branch]      branch390  -> origin/branch390
 * [new branch]      branch391  -> origin/branch391
 * [new branch]      branch392  -> origin/branch392
 * [new branch]      branch393  -> origin/branch393
 * [new branch]      branch394  -> origin/branch394
 * [new branch]      branch395  -> origin/branch395
 * [new branch]      branch396  -> origin/branch396
 * [new branch]      branch397  -> origin/branch397
 * [new branch]      branch398  -> origin/branch398
 * [new branch]      branch399  -> origin/branch399
 * [new branch]      branch400  -> origin/branch400
 * [new branch]      branch401  -> origin/branch401
 * [new branch]      branch402  -> origin/branch402
 * [new branch]      branch403  -> origin/branch403
 * [new branch]      branch404  -> origin/branch404
 * [new branch]      branch405  -> origin/branch405
 * [new branch]      branch406  -> origin/branch406
 * [new branch]      branch407  -> origin/branch407
 * [new branch]      branch408  -> origin/branch408
 * [new branch]      branch409  -> origin/branch409
 * [new branch]      branch410  -> origin/branch410
 * [new branch]      branch411  -> origin/branch411
 * [new branch]      branch412  -> origin/branch412
 * [new branch]      branch413  -> origin/branch413
 * [new branch]      branch414  -> origin/branch414
 * [new branch]      branch415  -> origin/branch415
 * [new branch]      branch416  -> origin/branch416
 * [new branch]      branch417  -> origin/branch417
 * [new branch]      branch418  -> origin/branch418
 * [new branch]      branch419  -> origin/branch419
 * [new branch]      branch420  -> origin/branch420
 * [new branch]      branch421  -> origin/branch421
 * [new branch]      branch422  -> origin/branch422
 * [new branch]      branch423  -> origin/branch423
 * [new branch]      branch424  -> origin/branch424
 * [new branch]      branch425  -> origin/branch425
 * [new branch]      branch426  -> origin/branch426
 * [new branch]      branch427  -> origin/branch427
 * [new branch]      branch428  -> origin/branch428
 * [new branch]      branch429  -> origin/branch429
 * [new branch]      branch430  -> origin/branch430
 * [new branch]      branch431  -> origin/branch431
 * [new branch]      branch432  -> origin/branch432
 * [new branch]      branch433  -> origin/branch433
 * [new branch]      branch434  -> origin/branch434
 * [new branch]      branch435  -> origin/branch435
 * [new branch]      branch436  -> origin/branch436
 * [new branch]      branch437  -> origin/branch437
 * [new branch]      branch438  -> origin/branch438
 * [new branch]      branch439  -> origin/branch439
 * [new branch]      branch440  -> origin/branch440
 * [new branch]      branch441  -> origin/branch441
 * [new branch]      branch442  -> origin/branch442
 * [new branch]      branch443  -> origin/branch443
 * [new branch]      branch444  -> origin/branch444
 * [new branch]      branch445  -> origin/branch445
 * [new branch]      branch446  -> origin/branch446
 * [new branch]      branch447  -> origin/branch447
 * [new branch]      branch448  -> origin/branch448
 * [new branch]      branch449  -> origin/branch449
 * [new branch]      branch450  -> origin/branch450
 * [new branch]      branch451  -> origin/branch451
 * [new branch]      branch452  -> origin/branch452
 * [new branch]      branch453  -> origin/branch453
 * [new branch]      branch454  -> origin/branch454
 * [new branch]      branch455  -> origin/branch455
 * [new branch]      branch456  -> origin/branch456
 * [new branch]      branch457  -> origin/branch457
 * [new branch]      branch458  -> origin/branch458
 * [new branch]      branch459  -> origin/branch459
 * [new branch]      branch460  -> origin/branch460
 * [new branch]      branch461  -> origin/branch461
 * [new branch]      branch462  -> origin/branch462
 * [new branch]      branch463  -> origin/branch463
 * [new branch]      branch464  -> origin/branch464
 * [new branch]      branch465  -> origin/branch465
 * [new branch]      branch466  -> origin/branch466
 * [new branch]      branch467  -> origin/branch467
 * [new branch]      branch468  -> origin/branch468
 * [new branch]      branch469  -> origin/branch469
 * [new branch]      branch470  -> origin/branch470
 * [new branch]      branch471  -> origin/branch471
 * [new branch]      branch472  -> origin/branch472
 * [new branch]      branch473  -> origin/branch473
 * [new branch]      branch474  -> origin/branch474
 * [new branch]      branch475  -> origin/branch475
 * [new branch]      branch476  -> origin/branch476
 * [new branch]      branch477  -> origin/branch477
 * [new branch]      branch478  -> origin/branch478
 * [new branch]      branch479  -> origin/branch479
 * [new branch]      branch480  -> origin/branch480
 * [new branch]      branch481  -> origin/branch481
 * [new branch]      branch482  -> origin/branch482
 * [new branch]      branch483  -> origin/branch483
 * [new branch]      branch484  -> origin/branch484
 * [new branch]      branch485  -> origin/branch485
 * [new branch]      branch486  -> origin/branch486
 * [new branch]      branch487  -> origin/branch487
 * [new branch]      branch488  -> origin/branch488
 * [new branch]      branch489  -> origin/branch489
 * [new branch]      branch490  -> origin/branch490
 * [new branch]      branch491  -> origin/branch491
 * [new branch]      branch492  -> origin/branch492
 * [new branch]      branch493  -> origin/branch493
 * [new branch]      branch494  -> origin/branch494
 * [new branch]      branch495  -> origin/branch495
 * [new branch]      branch496  -> origin/branch496
 * [new branch]      branch497  -> origin/branch497
 * [new branch]      branch498  -> origin/branch498
 * [new branch]      branch499  -> origin/branch499
 * [new branch]      branch500  -> origin/branch500
 * [new branch]      branch501  -> origin/branch501
 * [new branch]      branch502  -> origin/branch502
 * [new branch]      branch503  -> origin/branch503
 * [new branch]      branch504  -> origin/branch504
 * [new branch]      branch505  -> origin/branch505
 * [new branch]      branch506  -> origin/branch506
 * [new branch]      branch507  -> origin/branch507
 * [new branch]      branch508  -> origin/branch508
 * [new branch]      branch509  -> origin/branch509
 * [new branch]      branch510  -> origin/branch510
 * [new branch]      branch511  -> origin/branch511
 * [new branch]      branch512  -> origin/branch512
 * [new branch]      branch513  -> origin/branch513
 * [new branch]      branch514  -> origin/branch514
 * [new branch]      branch515  -> origin/branch515
 * [new branch]      branch516  -> origin/branch516
 * [new branch]      branch517  -> origin/branch517
 * [new branch]      branch518  -> origin/branch518
 * [new branch]      branch519  -> origin/branch519
 * [new branch]      branch520  -> origin/branch520
 * [new branch]      branch521  -> origin/branch521
 * [new branch]      branch522  -> origin/branch522
 * [new branch]      branch523  -> origin/branch523
 * [new branch]      branch524  -> origin/branch524
 * [new branch]      branch525  -> origin/branch525
 * [new branch]      branch526  -> origin/branch526
 * [new branch]      branch527  -> origin/branch527
 * [new branch]      branch528  -> origin/branch528
 * [new branch]      branch529  -> origin/branch529
 * [new branch]      branch530  -> origin/branch530
 * [new branch]      branch531  -> origin/branch531
 * [new branch]      branch532  -> origin/branch532
 * [new branch]      branch533  -> origin/branch533
 * [new branch]      branch534  -> origin/branch534
 * [new branch]      branch535  -> origin/branch535
 * [new branch]      branch536  -> origin/branch536
 * [new branch]      branch537  -> origin/branch537
 * [new branch]      branch538  -> origin/branch538
 * [new branch]      branch539  -> origin/branch539
 * [new branch]      branch540  -> origin/branch540
 * [new branch]      branch541  -> origin/branch541
 * [new branch]      branch542  -> origin/branch542
 * [new branch]      branch543  -> origin/branch543
 * [new branch]      branch544  -> origin/branch544
 * [new branch]      branch545  -> origin/branch545
 * [new branch]      branch546  -> origin/branch546
 * [new branch]      branch547  -> origin/branch547
 * [new branch]      branch548  -> origin/branch548
 * [new branch]      branch549  -> origin/branch549
 * [new branch]      branch550  -> origin/branch550
 * [new branch]      branch551  -> origin/branch551
 * [new branch]      branch552  -> origin/branch552
 * [new branch]      branch553  -> origin/branch553
 * [new branch]      branch554  -> origin/branch554
 * [new branch]      branch555  -> origin/branch555
 * [new branch]      branch556  -> origin/branch556
 * [new branch]      branch557  -> origin/branch557
 * [new branch]      branch558  -> origin/branch558
 * [new branch]      branch559  -> origin/branch559
 * [new branch]      branch560  -> origin/branch560
 * [new branch]      branch561  -> origin/branch561
 * [new branch]      branch562  -> origin/branch562
 * [new branch]      branch563  -> origin/branch563
 * [new branch]      branch564  -> origin/branch564
 * [new branch]      branch565  -> origin/branch565
 * [new branch]      branch566  -> origin/branch566
 * [new branch]      branch567  -> origin/branch567
 * [new branch]      branch568  -> origin/branch568
 * [new branch]      branch569  -> origin/branch569
 * [new branch]      branch570  -> origin/branch570
 * [new branch]      branch571  -> origin/branch571
 * [new branch]      branch572  -> origin/branch572
 * [new branch]      branch573  -> origin/branch573
 * [new branch]      branch574  -> origin/branch574
 * [new branch]      branch575  -> origin/branch575
 * [new branch]      branch576  -> origin/branch576
 * [new branch]      branch577  -> origin/branch577
 * [new branch]      branch578  -> origin/branch578
 * [new branch]      branch579  -> origin/branch579
 * [new branch]      branch580  -> origin/branch580
 * [new branch]      branch581  -> origin/branch581
 * [new branch]      branch582  -> origin/branch582
 * [new branch]      branch583  -> origin/branch583
 * [new branch]      branch584  -> origin/branch584
 * [new branch]      branch585  -> origin/branch585
 * [new branch]      branch586  -> origin/branch586
 * [new branch]      branch587  -> origin/branch587
 * [new branch]      branch588  -> origin/branch588
 * [new branch]      branch589  -> origin/branch589
 * [new branch]      branch590  -> origin/branch590
 * [new branch]      branch591  -> origin/branch591
 * [new branch]      branch592  -> origin/branch592
 * [new branch]      branch593  -> origin/branch593
 * [new branch]      branch594  -> origin/branch594
 * [new branch]      branch595  -> origin/branch595
 * [new branch]      branch596  -> origin/branch596
 * [new branch]      branch597  -> origin/branch597
 * [new branch]      branch598  -> origin/branch598
 * [new branch]      branch599  -> origin/branch599
 * [new branch]      branch600  -> origin/branch600
 * [new branch]      branch601  -> origin/branch601
 * [new branch]      branch602  -> origin/branch602
 * [new branch]      branch603  -> origin/branch603
 * [new branch]      branch604  -> origin/branch604
 * [new branch]      branch605  -> origin/branch605
 * [new branch]      branch606  -> origin/branch606
 * [new branch]      branch607  -> origin/branch607
 * [new branch]      branch608  -> origin/branch608
 * [new branch]      branch609  -> origin/branch609
 * [new branch]      branch610  -> origin/branch610
 * [new branch]      branch611  -> origin/branch611
 * [new branch]      branch612  -> origin/branch612
 * [new branch]      branch613  -> origin/branch613
 * [new branch]      branch614  -> origin/branch614
 * [new branch]      branch615  -> origin/branch615
 * [new branch]      branch616  -> origin/branch616
 * [new branch]      branch617  -> origin/branch617
 * [new branch]      branch618  -> origin/branch618
 * [new branch]      branch619  -> origin/branch619
 * [new branch]      branch620  -> origin/branch620
 * [new branch]      branch621  -> origin/branch621
 * [new branch]      branch622  -> origin/branch622
 * [new branch]      branch623  -> origin/branch623
 * [new branch]      branch624  -> origin/branch624
 * [new branch]      branch625  -> origin/branch625
 * [new branch]      branch626  -> origin/branch626
 * [new branch]      branch627  -> origin/branch627
 * [new branch]      branch628  -> origin/branch628
 * [new branch]      branch629  -> origin/branch629
 * [new branch]      branch630  -> origin/branch630
 * [new branch]      branch631  -> origin/branch631
 * [new branch]      branch632  -> origin/branch632
 * [new branch]      branch633  -> origin/branch633
 * [new branch]      branch634  -> origin/branch634
 * [new branch]      branch635  -> origin/branch635
 * [new branch]      branch636  -> origin/branch636
 * [new branch]      branch637  -> origin/branch637
 * [new branch]      branch638  -> origin/branch638
 * [new branch]      branch639  -> origin/branch639
 * [new branch]      branch640  -> origin/branch640
 * [new branch]      branch641  -> origin/branch641
 * [new branch]      branch642  -> origin/branch642
 * [new branch]      branch643  -> origin/branch643
 * [new branch]      branch644  -> origin/branch644
 * [new branch]      branch645  -> origin/branch645
 * [new branch]      branch646  -> origin/branch646
 * [new branch]      branch647  -> origin/branch647
 * [new branch]      branch648  -> origin/branch648
 * [new branch]      branch649  -> origin/branch649
 * [new branch]      branch650  -> origin/branch650
 * [new branch]      branch651  -> origin/branch651
 * [new branch]      branch652  -> origin/branch652
 * [new branch]      branch653  -> origin/branch653
 * [new branch]      branch654  -> origin/branch654
 * [new branch]      branch655  -> origin/branch655
 * [new branch]      branch656  -> origin/branch656
 * [new branch]      branch657  -> origin/branch657
 * [new branch]      branch658  -> origin/branch658
 * [new branch]      branch659  -> origin/branch659
 * [new branch]      branch660  -> origin/branch660
 * [new branch]      branch661  -> origin/branch661
 * [new branch]      branch662  -> origin/branch662
 * [new branch]      branch663  -> origin/branch663
 * [new branch]      branch664  -> origin/branch664
 * [new branch]      branch665  -> origin/branch665
 * [new branch]      branch666  -> origin/branch666
 * [new branch]      branch667  -> origin/branch667
 * [new branch]      branch668  -> origin/branch668
 * [new branch]      branch669  -> origin/branch669
 * [new branch]      branch670  -> origin/branch670
 * [new branch]      branch671  -> origin/branch671
 * [new branch]      branch672  -> origin/branch672
 * [new branch]      branch673  -> origin/branch673
 * [new branch]      branch674  -> origin/branch674
 * [new branch]      branch675  -> origin/branch675
 * [new branch]      branch676  -> origin/branch676
 * [new branch]      branch677  -> origin/branch677
 * [new branch]      branch678  -> origin/branch678
 * [new branch]      branch679  -> origin/branch679
 * [new branch]      branch680  -> origin/branch680
 * [new branch]      branch681  -> origin/branch681
 * [new branch]      branch682  -> origin/branch682
 * [new branch]      branch683  -> origin/branch683
 * [new branch]      branch684  -> origin/branch684
 * [new branch]      branch685  -> origin/branch685
 * [new branch]      branch686  -> origin/branch686
 * [new branch]      branch687  -> origin/branch687
 * [new branch]      branch688  -> origin/branch688
 * [new branch]      branch689  -> origin/branch689
 * [new branch]      branch690  -> origin/branch690
 * [new branch]      branch691  -> origin/branch691
 * [new branch]      branch692  -> origin/branch692
 * [new branch]      branch693  -> origin/branch693
 * [new branch]      branch694  -> origin/branch694
 * [new branch]      branch695  -> origin/branch695
 * [new branch]      branch696  -> origin/branch696
 * [new branch]      branch697  -> origin/branch697
 * [new branch]      branch698  -> origin/branch698
 * [new branch]      branch699  -> origin/branch699
 * [new branch]      branch700  -> origin/branch700
 * [new branch]      branch701  -> origin/branch701
 * [new branch]      branch702  -> origin/branch702
 * [new branch]      branch703  -> origin/branch703
 * [new branch]      branch704  -> origin/branch704
 * [new branch]      branch705  -> origin/branch705
 * [new branch]      branch706  -> origin/branch706
 * [new branch]      branch707  -> origin/branch707
 * [new branch]      branch708  -> origin/branch708
 * [new branch]      branch709  -> origin/branch709
 * [new branch]      branch710  -> origin/branch710
 * [new branch]      branch711  -> origin/branch711
 * [new branch]      branch712  -> origin/branch712
 * [new branch]      branch713  -> origin/branch713
 * [new branch]      branch714  -> origin/branch714
 * [new branch]      branch715  -> origin/branch715
 * [new branch]      branch716  -> origin/branch716
 * [new branch]      branch717  -> origin/branch717
 * [new branch]      branch718  -> origin/branch718
 * [new branch]      branch719  -> origin/branch719
 * [new branch]      branch720  -> origin/branch720
 * [new branch]      branch721  -> origin/branch721
 * [new branch]      branch722  -> origin/branch722
 * [new branch]      branch723  -> origin/branch723
 * [new branch]      branch724  -> origin/branch724
 * [new branch]      branch725  -> origin/branch725
 * [new branch]      branch726  -> origin/branch726
 * [new branch]      branch727  -> origin/branch727
 * [new branch]      branch728  -> origin/branch728
 * [new branch]      branch729  -> origin/branch729
 * [new branch]      branch730  -> origin/branch730
 * [new branch]      branch731  -> origin/branch731
 * [new branch]      branch732  -> origin/branch732
 * [new branch]      branch733  -> origin/branch733
 * [new branch]      branch734  -> origin/branch734
 * [new branch]      branch735  -> origin/branch735
 * [new branch]      branch736  -> origin/branch736
 * [new branch]      branch737  -> origin/branch737
 * [new branch]      branch738  -> origin/branch738
 * [new branch]      branch739  -> origin/branch739
 * [new branch]      branch740  -> origin/branch740
 * [new branch]      branch741  -> origin/branch741
 * [new branch]      branch742  -> origin/branch742
 * [new branch]      branch743  -> origin/branch743
 * [new branch]      branch744  -> origin/branch744
 * [new branch]      branch745  -> origin/branch745
 * [new branch]      branch746  -> origin/branch746
 * [new branch]      branch747  -> origin/branch747
 * [new branch]      branch748  -> origin/branch748
 * [new branch]      branch749  -> origin/branch749
 * [new branch]      branch750  -> origin/branch750
 * [new branch]      branch751  -> origin/branch751
 * [new branch]      branch752  -> origin/branch752
 * [new branch]      branch753  -> origin/branch753
 * [new branch]      branch754  -> origin/branch754
 * [new branch]      branch755  -> origin/branch755
 * [new branch]      branch756  -> origin/branch756
 * [new branch]      branch757  -> origin/branch757
 * [new branch]      branch758  -> origin/branch758
 * [new branch]      branch759  -> origin/branch759
 * [new branch]      branch760  -> origin/branch760
 * [new branch]      branch761  -> origin/branch761
 * [new branch]      branch762  -> origin/branch762
 * [new branch]      branch763  -> origin/branch763
 * [new branch]      branch764  -> origin/branch764
 * [new branch]      branch765  -> origin/branch765
 * [new branch]      branch766  -> origin/branch766
 * [new branch]      branch767  -> origin/branch767
 * [new branch]      branch768  -> origin/branch768
 * [new branch]      branch769  -> origin/branch769
 * [new branch]      branch770  -> origin/branch770
 * [new branch]      branch771  -> origin/branch771
 * [new branch]      branch772  -> origin/branch772
 * [new branch]      branch773  -> origin/branch773
 * [new branch]      branch774  -> origin/branch774
 * [new branch]      branch775  -> origin/branch775
 * [new branch]      branch776  -> origin/branch776
 * [new branch]      branch777  -> origin/branch777
 * [new branch]      branch778  -> origin/branch778
 * [new branch]      branch779  -> origin/branch779
 * [new branch]      branch780  -> origin/branch780
 * [new branch]      branch781  -> origin/branch781
 * [new branch]      branch782  -> origin/branch782
 * [new branch]      branch783  -> origin/branch783
 * [new branch]      branch784  -> origin/branch784
 * [new branch]      branch785  -> origin/branch785
 * [new branch]      branch786  -> origin/branch786
 * [new branch]      branch787  -> origin/branch787
 * [new branch]      branch788  -> origin/branch788
 * [new branch]      branch789  -> origin/branch789
 * [new branch]      branch790  -> origin/branch790
 * [new branch]      branch791  -> origin/branch791
 * [new branch]      branch792  -> origin/branch792
 * [new branch]      branch793  -> origin/branch793
 * [new branch]      branch794  -> origin/branch794
 * [new branch]      branch795  -> origin/branch795
 * [new branch]      branch796  -> origin/branch796
 * [new branch]      branch797  -> origin/branch797
 * [new branch]      branch798  -> origin/branch798
 * [new branch]      branch799  -> origin/branch799
 * [new branch]      branch800  -> origin/branch800
 * [new branch]      branch801  -> origin/branch801
 * [new branch]      branch802  -> origin/branch802
 * [new branch]      branch803  -> origin/branch803
 * [new branch]      branch804  -> origin/branch804
 * [new branch]      branch805  -> origin/branch805
 * [new branch]      branch806  -> origin/branch806
 * [new branch]      branch807  -> origin/branch807
 * [new branch]      branch808  -> origin/branch808
 * [new branch]      branch809  -> origin/branch809
 * [new branch]      branch810  -> origin/branch810
 * [new branch]      branch811  -> origin/branch811
 * [new branch]      branch812  -> origin/branch812
 * [new branch]      branch813  -> origin/branch813
 * [new branch]      branch814  -> origin/branch814
 * [new branch]      branch815  -> origin/branch815
 * [new branch]      branch816  -> origin/branch816
 * [new branch]      branch817  -> origin/branch817
 * [new branch]      branch818  -> origin/branch818
 * [new branch]      branch819  -> origin/branch819
 * [new branch]      branch820  -> origin/branch820
 * [new branch]      branch821  -> origin/branch821
 * [new branch]      branch822  -> origin/branch822
 * [new branch]      branch823  -> origin/branch823
 * [new branch]      branch824  -> origin/branch824
 * [new branch]      branch825  -> origin/branch825
 * [new branch]      branch826  -> origin/branch826
 * [new branch]      branch827  -> origin/branch827
 * [new branch]      branch828  -> origin/branch828
 * [new branch]      branch829  -> origin/branch829
 * [new branch]      branch830  -> origin/branch830
 * [new branch]      branch831  -> origin/branch831
 * [new branch]      branch832  -> origin/branch832
 * [new branch]      branch833  -> origin/branch833
 * [new branch]      branch834  -> origin/branch834
 * [new branch]      branch835  -> origin/branch835
 * [new branch]      branch836  -> origin/branch836
 * [new branch]      branch837  -> origin/branch837
 * [new branch]      branch838  -> origin/branch838
 * [new branch]      branch839  -> origin/branch839
 * [new branch]      branch840  -> origin/branch840
 * [new branch]      branch841  -> origin/branch841
 * [new branch]      branch842  -> origin/branch842
 * [new branch]      branch843  -> origin/branch843
 * [new branch]      branch844  -> origin/branch844
 * [new branch]      branch845  -> origin/branch845
 * [new branch]      branch846  -> origin/branch846
 * [new branch]      branch847  -> origin/branch847
 * [new branch]      branch848  -> origin/branch848
 * [new branch]      branch849  -> origin/branch849
 * [new branch]      branch850  -> origin/branch850
 * [new branch]      branch851  -> origin/branch851
 * [new branch]      branch852  -> origin/branch852
 * [new branch]      branch853  -> origin/branch853
 * [new branch]      branch854  -> origin/branch854
 * [new branch]      branch855  -> origin/branch855
 * [new branch]      branch856  -> origin/branch856
 * [new branch]      branch857  -> origin/branch857
 * [new branch]      branch858  -> origin/branch858
 * [new branch]      branch859  -> origin/branch859
 * [new branch]      branch860  -> origin/branch860
 * [new branch]      branch861  -> origin/branch861
 * [new branch]      branch862  -> origin/branch862
 * [new branch]      branch863  -> origin/branch863
 * [new branch]      branch864  -> origin/branch864
 * [new branch]      branch865  -> origin/branch865
 * [new branch]      branch866  -> origin/branch866
 * [new branch]      branch867  -> origin/branch867
 * [new branch]      branch868  -> origin/branch868
 * [new branch]      branch869  -> origin/branch869
 * [new branch]      branch870  -> origin/branch870
 * [new branch]      branch871  -> origin/branch871
 * [new branch]      branch872  -> origin/branch872
 * [new branch]      branch873  -> origin/branch873
 * [new branch]      branch874  -> origin/branch874
 * [new branch]      branch875  -> origin/branch875
 * [new branch]      branch876  -> origin/branch876
 * [new branch]      branch877  -> origin/branch877
 * [new branch]      branch878  -> origin/branch878
 * [new branch]      branch879  -> origin/branch879
 * [new branch]      branch880  -> origin/branch880
 * [new branch]      branch881  -> origin/branch881
 * [new branch]      branch882  -> origin/branch882
 * [new branch]      branch883  -> origin/branch883
 * [new branch]      branch884  -> origin/branch884
 * [new branch]      branch885  -> origin/branch885
 * [new branch]      branch886  -> origin/branch886
 * [new branch]      branch887  -> origin/branch887
 * [new branch]      branch888  -> origin/branch888
 * [new branch]      branch889  -> origin/branch889
 * [new branch]      branch890  -> origin/branch890
 * [new branch]      branch891  -> origin/branch891
 * [new branch]      branch892  -> origin/branch892
 * [new branch]      branch893  -> origin/branch893
 * [new branch]      branch894  -> origin/branch894
 * [new branch]      branch895  -> origin/branch895
 * [new branch]      branch896  -> origin/branch896
 * [new branch]      branch897  -> origin/branch897
 * [new branch]      branch898  -> origin/branch898
 * [new branch]      branch899  -> origin/branch899
 * [new branch]      branch900  -> origin/branch900
 * [new branch]      branch901  -> origin/branch901
 * [new branch]      branch902  -> origin/branch902
 * [new branch]      branch903  -> origin/branch903
 * [new branch]      branch904  -> origin/branch904
 * [new branch]      branch905  -> origin/branch905
 * [new branch]      branch906  -> origin/branch906
 * [new branch]      branch907  -> origin/branch907
 * [new branch]      branch908  -> origin/branch908
 * [new branch]      branch909  -> origin/branch909
 * [new branch]      branch910  -> origin/branch910
 * [new branch]      branch911  -> origin/branch911
 * [new branch]      branch912  -> origin/branch912
 * [new branch]      branch913  -> origin/branch913
 * [new branch]      branch914  -> origin/branch914
 * [new branch]      branch915  -> origin/branch915
 * [new branch]      branch916  -> origin/branch916
 * [new branch]      branch917  -> origin/branch917
 * [new branch]      branch918  -> origin/branch918
 * [new branch]      branch919  -> origin/branch919
 * [new branch]      branch920  -> origin/branch920
 * [new branch]      branch921  -> origin/branch921
 * [new branch]      branch922  -> origin/branch922
 * [new branch]      branch923  -> origin/branch923
 * [new branch]      branch924  -> origin/branch924
 * [new branch]      branch925  -> origin/branch925
 * [new branch]      branch926  -> origin/branch926
 * [new branch]      branch927  -> origin/branch927
 * [new branch]      branch928  -> origin/branch928
 * [new branch]      branch929  -> origin/branch929
 * [new branch]      branch930  -> origin/branch930
 * [new branch]      branch931  -> origin/branch931
 * [new branch]      branch932  -> origin/branch932
 * [new branch]      branch933  -> origin/branch933
 * [new branch]      branch934  -> origin/branch934
 * [new branch]      branch935  -> origin/branch935
 * [new branch]      branch936  -> origin/branch936
 * [new branch]      branch937  -> origin/branch937
 * [new branch]      branch938  -> origin/branch938
 * [new branch]      branch939  -> origin/branch939
 * [new branch]      branch940  -> origin/branch940
 * [new branch]      branch941  -> origin/branch941
 * [new branch]      branch942  -> origin/branch942
 * [new branch]      branch943  -> origin/branch943
 * [new branch]      branch944  -> origin/branch944
 * [new branch]      branch945  -> origin/branch945
 * [new branch]      branch946  -> origin/branch946
 * [new branch]      branch947  -> origin/branch947
 * [new branch]      branch948  -> origin/branch948
 * [new branch]      branch949  -> origin/branch949
 * [new branch]      branch950  -> origin/branch950
 * [new branch]      branch951  -> origin/branch951
 * [new branch]      branch952  -> origin/branch952
 * [new branch]      branch953  -> origin/branch953
 * [new branch]      branch954  -> origin/branch954
 * [new branch]      branch955  -> origin/branch955
 * [new branch]      branch956  -> origin/branch956
 * [new branch]      branch957  -> origin/branch957
 * [new branch]      branch958  -> origin/branch958
 * [new branch]      branch959  -> origin/branch959
 * [new branch]      branch960  -> origin/branch960
 * [new branch]      branch961  -> origin/branch961
 * [new branch]      branch962  -> origin/branch962
 * [new branch]      branch963  -> origin/branch963
 * [new branch]      branch964  -> origin/branch964
 * [new branch]      branch965  -> origin/branch965
 * [new branch]      branch966  -> origin/branch966
 * [new branch]      branch967  -> origin/branch967
 * [new branch]      branch968  -> origin/branch968
 * [new branch]      branch969  -> origin/branch969
 * [new branch]      branch970  -> origin/branch970
 * [new branch]      branch971  -> origin/branch971
 * [new branch]      branch972  -> origin/branch972
 * [new branch]      branch973  -> origin/branch973
 * [new branch]      branch974  -> origin/branch974
 * [new branch]      branch975  -> origin/branch975
 * [new branch]      branch976  -> origin/branch976
 * [new branch]      branch977  -> origin/branch977
 * [new branch]      branch978  -> origin/branch978
 * [new branch]      branch979  -> origin/branch979
 * [new branch]      branch980  -> origin/branch980
 * [new branch]      branch981  -> origin/branch981
 * [new branch]      branch982  -> origin/branch982
 * [new branch]      branch983  -> origin/branch983
 * [new branch]      branch984  -> origin/branch984
 * [new branch]      branch985  -> origin/branch985
 * [new branch]      branch986  -> origin/branch986
 * [new branch]      branch987  -> origin/branch987
 * [new branch]      branch988  -> origin/branch988
 * [new branch]      branch989  -> origin/branch989
 * [new branch]      branch990  -> origin/branch990
 * [new branch]      branch991  -> origin/branch991
 * [new branch]      branch992  -> origin/branch992
 * [new branch]      branch993  -> origin/branch993
 * [new branch]      branch994  -> origin/branch994
 * [new branch]      branch995  -> origin/branch995
 * [new branch]      branch996  -> origin/branch996
 * [new branch]      branch997  -> origin/branch997
 * [new branch]      branch998  -> origin/branch998
 * [new branch]      branch999  -> origin/branch999
ok 7 - quickfetch should handle ~1000 refs (on Windows)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5503-tagfollow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5503-tagfollow/.git/
expecting success of 5503.1 'setup': 
	test_tick &&
	echo ichi >file &&
	git add file &&
	git commit -m L &&
	L=$(git rev-parse --verify HEAD) &&

	(
		mkdir cloned &&
		cd cloned &&
		git init-db &&
		git remote add -f origin ..
	) &&

	test_tick &&
	echo A >file &&
	git add file &&
	git commit -m A &&
	A=$(git rev-parse --verify HEAD)

[main (root-commit) 6a9c5e4] L
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5503-tagfollow/cloned/.git/
Updating origin
From ..
 * [new branch]      main       -> origin/main
[main c06aaaf] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5503.2 'setup expect': 
cat - <<EOF >expect
want $A
EOF

ok 2 - setup expect

expecting success of 5503.3 'fetch A (new commit : 1 connection)': 
	rm -f $U &&
	(
		cd cloned &&
		GIT_TRACE_PACKET=$UPATH git fetch &&
		test $A = $(git rev-parse --verify origin/main)
	) &&
	get_needs $U >actual &&
	test_cmp expect actual

From ..
   6a9c5e4..c06aaaf  main       -> origin/main
ok 3 - fetch A (new commit : 1 connection)

expecting success of 5503.4 'create tag T on A, create C on branch cat': 
	git tag -a -m tag1 tag1 $A &&
	T=$(git rev-parse --verify tag1) &&

	git checkout -b cat &&
	echo C >file &&
	git add file &&
	git commit -m C &&
	C=$(git rev-parse --verify HEAD) &&
	git checkout main

Switched to a new branch 'cat'
[cat f888ed6] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 4 - create tag T on A, create C on branch cat

expecting success of 5503.5 'setup expect': 
cat - <<EOF >expect
want $C
want $T
EOF

ok 5 - setup expect

expecting success of 5503.6 'fetch C, T (new branch, tag : 1 connection)': 
	rm -f $U &&
	(
		cd cloned &&
		GIT_TRACE_PACKET=$UPATH git fetch &&
		test $C = $(git rev-parse --verify origin/cat) &&
		test $T = $(git rev-parse --verify tag1) &&
		test $A = $(git rev-parse --verify tag1^0)
	) &&
	get_needs $U >actual &&
	test_cmp expect actual

From ..
 * [new branch]      cat        -> origin/cat
 * [new tag]         tag1       -> tag1
ok 6 - fetch C, T (new branch, tag : 1 connection)

expecting success of 5503.7 'create commits O, B, tag S on B': 
	test_tick &&
	echo O >file &&
	git add file &&
	git commit -m O &&

	test_tick &&
	echo B >file &&
	git add file &&
	git commit -m B &&
	B=$(git rev-parse --verify HEAD) &&

	git tag -a -m tag2 tag2 $B &&
	S=$(git rev-parse --verify tag2)

[main 0129221] O
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 8e10cf4] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - create commits O, B, tag S on B

expecting success of 5503.8 'setup expect': 
cat - <<EOF >expect
want $B
want $S
EOF

ok 8 - setup expect

expecting success of 5503.9 'fetch B, S (commit and tag : 1 connection)': 
	rm -f $U &&
	(
		cd cloned &&
		GIT_TRACE_PACKET=$UPATH git fetch &&
		test $B = $(git rev-parse --verify origin/main) &&
		test $B = $(git rev-parse --verify tag2^0) &&
		test $S = $(git rev-parse --verify tag2)
	) &&
	get_needs $U >actual &&
	test_cmp expect actual

From ..
   c06aaaf..8e10cf4  main       -> origin/main
 * [new tag]         tag2       -> tag2
ok 9 - fetch B, S (commit and tag : 1 connection)

expecting success of 5503.10 'setup expect': 
cat - <<EOF >expect
want $B
want $S
EOF

ok 10 - setup expect

expecting success of 5503.11 'new clone fetch main and tags': 
	test_might_fail git branch -D cat &&
	rm -f $U &&
	(
		mkdir clone2 &&
		cd clone2 &&
		git init &&
		git remote add origin .. &&
		GIT_TRACE_PACKET=$UPATH git fetch &&
		test $B = $(git rev-parse --verify origin/main) &&
		test $S = $(git rev-parse --verify tag2) &&
		test $B = $(git rev-parse --verify tag2^0) &&
		test $T = $(git rev-parse --verify tag1) &&
		test $A = $(git rev-parse --verify tag1^0)
	) &&
	get_needs $U >actual &&
	test_cmp expect actual

Deleted branch cat (was f888ed6).
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5503-tagfollow/clone2/.git/
From ..
 * [new branch]      main       -> origin/main
 * [new tag]         tag2       -> tag2
 * [new tag]         tag1       -> tag1
ok 11 - new clone fetch main and tags

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5504-fetch-receive-strict.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/.git/
expecting success of 5504.1 'setup and inject "corrupt or missing" object': 
	echo hello >greetings &&
	git add greetings &&
	git commit -m greetings &&

	S=$(git rev-parse :greetings | sed -e "s|^..|&/|") &&
	X=$(echo bye | git hash-object -w --stdin | sed -e "s|^..|&/|") &&
	echo $S >S &&
	echo $X >X &&
	cp .git/objects/$S .git/objects/$S.back &&
	mv -f .git/objects/$X .git/objects/$S &&

	test_must_fail git fsck

[main (root-commit) 1b9525e] greetings
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 greetings
bad sha1 file: .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a.back
error: b023018cabc396e7692c70bbf5784a93d3f738ab: hash-path mismatch, found at: .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
missing blob ce013625030ba8dba906f756967f9e9ca394464a
ok 1 - setup and inject "corrupt or missing" object

expecting success of 5504.2 'fetch without strict': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config fetch.fsckobjects false &&
		git config transfer.fsckobjects false &&
		test_must_fail git fetch ../.git main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'
error: ../.git did not send all necessary objects

ok 2 - fetch without strict

expecting success of 5504.3 'fetch with !fetch.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config fetch.fsckobjects false &&
		git config transfer.fsckobjects true &&
		test_must_fail git fetch ../.git main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'
error: ../.git did not send all necessary objects

ok 3 - fetch with !fetch.fsckobjects

expecting success of 5504.4 'fetch with fetch.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config fetch.fsckobjects true &&
		git config transfer.fsckobjects false &&
		test_must_fail git fetch ../.git main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
fatal: did not receive expected object ce013625030ba8dba906f756967f9e9ca394464a
fatal: index-pack failed
ok 4 - fetch with fetch.fsckobjects

expecting success of 5504.5 'fetch with transfer.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config transfer.fsckobjects true &&
		test_must_fail git fetch ../.git main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
fatal: did not receive expected object ce013625030ba8dba906f756967f9e9ca394464a
fatal: index-pack failed
ok 5 - fetch with transfer.fsckobjects

expecting success of 5504.6 'push without strict': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config fetch.fsckobjects false &&
		git config transfer.fsckobjects false
	) &&
	test_must_fail git push --porcelain dst main:refs/heads/test >act &&
	test_cmp exp act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'        
fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'
error: failed to push some refs to 'dst'
ok 6 - push without strict

expecting success of 5504.7 'push with !receive.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config receive.fsckobjects false &&
		git config transfer.fsckobjects true
	) &&
	test_must_fail git push --porcelain dst main:refs/heads/test >act &&
	test_cmp exp act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'        
fatal: missing blob object 'ce013625030ba8dba906f756967f9e9ca394464a'
error: failed to push some refs to 'dst'
ok 7 - push with !receive.fsckobjects

expecting success of 5504.8 'push with receive.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config receive.fsckobjects true &&
		git config transfer.fsckobjects false
	) &&
	test_must_fail git push --porcelain dst main:refs/heads/test >act &&
	test_cmp exp act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: fatal: object of unexpected type        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
ok 8 - push with receive.fsckobjects

expecting success of 5504.9 'push with transfer.fsckobjects': 
	rm -rf dst &&
	git init dst &&
	(
		cd dst &&
		git config transfer.fsckobjects true
	) &&
	test_must_fail git push --porcelain dst main:refs/heads/test >act &&
	test_cmp exp act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: fatal: object of unexpected type        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
ok 9 - push with transfer.fsckobjects

expecting success of 5504.10 'repair the "corrupt or missing" object': 
	mv -f .git/objects/$(cat S) .git/objects/$(cat X) &&
	mv .git/objects/$(cat S).back .git/objects/$(cat S) &&
	rm -rf .git/objects/$(cat X) &&
	git fsck

ok 10 - repair the "corrupt or missing" object

expecting success of 5504.11 'setup bogus commit': 
	commit="$(git hash-object -t commit -w --stdin <bogus-commit)"

ok 11 - setup bogus commit

expecting success of 5504.12 'fsck with no skipList input': 
	test_must_fail git fsck 2>err &&
	test_i18ngrep "missingEmail" err

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
error in commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
ok 12 - fsck with no skipList input

expecting success of 5504.13 'setup sorted and unsorted skipLists': 
	cat >SKIP.unsorted <<-EOF &&
	$(test_oid 004)
	$(test_oid 002)
	$commit
	$(test_oid 001)
	$(test_oid 003)
	EOF
	sort SKIP.unsorted >SKIP.sorted

ok 13 - setup sorted and unsorted skipLists

expecting success of 5504.14 'fsck with sorted skipList': 
	git -c fsck.skipList=SKIP.sorted fsck

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
ok 14 - fsck with sorted skipList

expecting success of 5504.15 'fsck with unsorted skipList': 
	git -c fsck.skipList=SKIP.unsorted fsck

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
ok 15 - fsck with unsorted skipList

expecting success of 5504.16 'fsck with invalid or bogus skipList input': 
	git -c fsck.skipList=/dev/null -c fsck.missingEmail=ignore fsck &&
	test_must_fail git -c fsck.skipList=does-not-exist -c fsck.missingEmail=ignore fsck 2>err &&
	test_i18ngrep "could not open.*: does-not-exist" err &&
	test_must_fail git -c fsck.skipList=.git/config -c fsck.missingEmail=ignore fsck 2>err &&
	test_i18ngrep "invalid object name: \[core\]" err

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
fatal: could not open object name list: does-not-exist
fatal: invalid object name: [core]
ok 16 - fsck with invalid or bogus skipList input

expecting success of 5504.17 'fsck with other accepted skipList input (comments & empty lines)': 
	cat >SKIP.with-comment <<-EOF &&
	# Some bad commit
	$(test_oid 001)
	EOF
	test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment &&
	test_i18ngrep "missingEmail" err-with-comment &&
	cat >SKIP.with-empty-line <<-EOF &&
	$(test_oid 001)

	$(test_oid 002)
	EOF
	test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line &&
	test_i18ngrep "missingEmail" err-with-empty-line

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
error in commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
error in commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
ok 17 - fsck with other accepted skipList input (comments & empty lines)

expecting success of 5504.18 'fsck no garbage output from comments & empty lines errors': 
	test_line_count = 1 err-with-comment &&
	test_line_count = 1 err-with-empty-line

ok 18 - fsck no garbage output from comments & empty lines errors

expecting success of 5504.19 'fsck with invalid abbreviated skipList input': 
	echo $commit | test_copy_bytes 20 >SKIP.abbreviated &&
	test_must_fail git -c fsck.skipList=SKIP.abbreviated fsck 2>err-abbreviated &&
	test_i18ngrep "^fatal: invalid object name: " err-abbreviated

fatal: invalid object name: 6516fe4a6d0c92028617
ok 19 - fsck with invalid abbreviated skipList input

expecting success of 5504.20 'fsck with exhaustive accepted skipList input (various types of comments etc.)': 
	>SKIP.exhaustive &&
	echo "# A commented line" >>SKIP.exhaustive &&
	echo "" >>SKIP.exhaustive &&
	echo " " >>SKIP.exhaustive &&
	echo " # Comment after whitespace" >>SKIP.exhaustive &&
	echo "$commit # Our bad commit (with leading whitespace and trailing comment)" >>SKIP.exhaustive &&
	echo "# Some bad commit (leading whitespace)" >>SKIP.exhaustive &&
	echo "  $(test_oid 001)" >>SKIP.exhaustive &&
	git -c fsck.skipList=SKIP.exhaustive fsck 2>err &&
	test_must_be_empty err

dangling commit 6516fe4a6d0c9202861748d549d2e2b20e5210c9
ok 20 - fsck with exhaustive accepted skipList input (various types of comments etc.)

expecting success of 5504.21 'push with receive.fsck.skipList': 
	git push . $commit:refs/heads/bogus &&
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config receive.fsckObjects true &&
	test_must_fail git push --porcelain dst bogus &&
	echo $commit >dst/.git/SKIP &&

	# receive.fsck.* does not fall back on fsck.*
	git --git-dir=dst/.git config fsck.skipList SKIP &&
	test_must_fail git push --porcelain dst bogus &&

	# Invalid and/or bogus skipList input
	git --git-dir=dst/.git config receive.fsck.skipList /dev/null &&
	test_must_fail git push --porcelain dst bogus &&
	git --git-dir=dst/.git config receive.fsck.skipList does-not-exist &&
	test_must_fail git push --porcelain dst bogus 2>err &&
	test_i18ngrep "could not open.*: does-not-exist" err &&
	git --git-dir=dst/.git config receive.fsck.skipList config &&
	test_must_fail git push --porcelain dst bogus 2>err &&
	test_i18ngrep "invalid object name: \[core\]" err &&

	git --git-dir=dst/.git config receive.fsck.skipList SKIP &&
	git push --porcelain dst bogus

To .
 * [new branch]      6516fe4a6d0c9202861748d549d2e2b20e5210c9 -> bogus
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
remote: fatal: fsck error in packed object        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
remote: fatal: fsck error in packed object        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
remote: fatal: fsck error in packed object        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: fatal: could not open object name list: does-not-exist        
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: fatal: invalid object name: [core]        
To dst
*	refs/heads/bogus:refs/heads/bogus	[new branch]
Done
ok 21 - push with receive.fsck.skipList

expecting success of 5504.22 'fetch with fetch.fsck.skipList': 
	refspec=refs/heads/bogus:refs/heads/bogus &&
	git push . $commit:refs/heads/bogus &&
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config fetch.fsckObjects true &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&
	git --git-dir=dst/.git config fetch.fsck.skipList /dev/null &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&
	echo $commit >dst/.git/SKIP &&

	# fetch.fsck.* does not fall back on fsck.*
	git --git-dir=dst/.git config fsck.skipList dst/.git/SKIP &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&

	# Invalid and/or bogus skipList input
	git --git-dir=dst/.git config fetch.fsck.skipList /dev/null &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&
	git --git-dir=dst/.git config fetch.fsck.skipList does-not-exist &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec 2>err &&
	test_i18ngrep "could not open.*: does-not-exist" err &&
	git --git-dir=dst/.git config fetch.fsck.skipList dst/.git/config &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec 2>err &&
	test_i18ngrep "invalid object name: \[core\]" err &&

	git --git-dir=dst/.git config fetch.fsck.skipList dst/.git/SKIP &&
	git --git-dir=dst/.git fetch "file://$(pwd)" $refspec

Everything up-to-date
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
fatal: could not open object name list: does-not-exist
fatal: invalid object name: [core]
From file:///<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict
 * [new branch]      bogus      -> bogus
ok 22 - fetch with fetch.fsck.skipList

expecting success of 5504.23 'fsck.<unknownmsg-id> dies': 
	test_must_fail git -c fsck.whatEver=ignore fsck 2>err &&
	test_i18ngrep "Unhandled message id: whatever" err

fatal: Unhandled message id: whatever
ok 23 - fsck.<unknownmsg-id> dies

expecting success of 5504.24 'push with receive.fsck.missingEmail=warn': 
	git push . $commit:refs/heads/bogus &&
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config receive.fsckobjects true &&
	test_must_fail git push --porcelain dst bogus &&

	# receive.fsck.<msg-id> does not fall back on fsck.<msg-id>
	git --git-dir=dst/.git config fsck.missingEmail warn &&
	test_must_fail git push --porcelain dst bogus &&

	# receive.fsck.<unknownmsg-id> warns
	git --git-dir=dst/.git config \
		receive.fsck.whatEver error &&

	git --git-dir=dst/.git config \
		receive.fsck.missingEmail warn &&
	git push --porcelain dst bogus >act 2>&1 &&
	grep "missingEmail" act &&
	test_i18ngrep "skipping unknown msg id.*whatever" act &&
	git --git-dir=dst/.git branch -D bogus &&
	git --git-dir=dst/.git config --add \
		receive.fsck.missingEmail ignore &&
	git push --porcelain dst bogus >act 2>&1 &&
	! grep "missingEmail" act

Everything up-to-date
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
remote: fatal: fsck error in packed object        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
remote: fatal: fsck error in packed object        
error: remote unpack failed: unpack-objects abnormal exit
error: failed to push some refs to 'dst'
To dst
!	refs/heads/bogus:refs/heads/bogus	[remote rejected] (unpacker error)
remote: warning: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email        
warning: skipping unknown msg id 'whatever'
Deleted branch bogus (was 6516fe4).
ok 24 - push with receive.fsck.missingEmail=warn

expecting success of 5504.25 'fetch with fetch.fsck.missingEmail=warn': 
	refspec=refs/heads/bogus:refs/heads/bogus &&
	git push . $commit:refs/heads/bogus &&
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config fetch.fsckobjects true &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&

	# fetch.fsck.<msg-id> does not fall back on fsck.<msg-id>
	git --git-dir=dst/.git config fsck.missingEmail warn &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&

	# receive.fsck.<unknownmsg-id> warns
	git --git-dir=dst/.git config \
		fetch.fsck.whatEver error &&

	git --git-dir=dst/.git config \
		fetch.fsck.missingEmail warn &&
	git --git-dir=dst/.git fetch "file://$(pwd)" $refspec >act 2>&1 &&
	grep "missingEmail" act &&
	test_i18ngrep "Skipping unknown msg id.*whatever" act &&
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config fetch.fsckobjects true &&
	git --git-dir=dst/.git config \
		fetch.fsck.missingEmail ignore &&
	git --git-dir=dst/.git fetch "file://$(pwd)" $refspec >act 2>&1 &&
	! grep "missingEmail" act

Everything up-to-date
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
error: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
fatal: fsck error in packed object
fatal: index-pack failed
warning: object 6516fe4a6d0c9202861748d549d2e2b20e5210c9: missingEmail: invalid author/committer line - missing email
warning: Skipping unknown msg id 'whatever'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
ok 25 - fetch with fetch.fsck.missingEmail=warn

expecting success of 5504.26 'receive.fsck.unterminatedHeader=warn triggers error': 
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config receive.fsckobjects true &&
	git --git-dir=dst/.git config \
		receive.fsck.unterminatedheader warn &&
	test_must_fail git push --porcelain dst HEAD >act 2>&1 &&
	grep "Cannot demote unterminatedheader" act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
remote: fatal: Cannot demote unterminatedheader to warn        
ok 26 - receive.fsck.unterminatedHeader=warn triggers error

expecting success of 5504.27 'fetch.fsck.unterminatedHeader=warn triggers error': 
	rm -rf dst &&
	git init dst &&
	git --git-dir=dst/.git config fetch.fsckobjects true &&
	git --git-dir=dst/.git config \
		fetch.fsck.unterminatedheader warn &&
	test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" HEAD &&
	grep "Cannot demote unterminatedheader" act

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst/.git/
fatal: Cannot demote unterminatedheader to warn
fatal: index-pack failed
remote: fatal: Cannot demote unterminatedheader to warn        
ok 27 - fetch.fsck.unterminatedHeader=warn triggers error

expecting success of 5504.28 'badFilemode is not a strict error': 
	git init --bare badmode.git &&
	tree=$(
		cd badmode.git &&
		blob=$(echo blob | git hash-object -w --stdin | hex2oct) &&
		printf "123456 foo\0${blob}" |
		git hash-object -t tree --stdin -w --literally
	) &&

	rm -rf dst.git &&
	git init --bare dst.git &&
	git -C dst.git config transfer.fsckObjects true &&

	git -C badmode.git push ../dst.git $tree:refs/tags/tree 2>err &&
	grep "$tree: badFilemode" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/badmode.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5504-fetch-receive-strict/dst.git/
remote: warning: object 278276cbf8114c5faab23d27287904183b155e9c: badFilemode: contains bad file modes        
ok 28 - badFilemode is not a strict error

# passed all 28 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5506-remote-groups.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5506-remote-groups/.git/
expecting success of 5506.1 'setup': 
	mkdir one && (cd one && git init) &&
	mkdir two && (cd two && git init) &&
	git remote add -m main one one &&
	git remote add -m main two two

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5506-remote-groups/one/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5506-remote-groups/two/.git/
ok 1 - setup

expecting success of 5506.2 'no group updates all': 
	mark update-all &&
	update_repos &&
	git remote update &&
	repo_fetched one &&
	repo_fetched two

[main (root-commit) e3d2b21] update-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main (root-commit) e3d2b21] update-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Fetching one
From one
 * [new branch]      main       -> one/main
Fetching two
From two
 * [new branch]      main       -> two/main
repo was fetched: one
repo was fetched: two
ok 2 - no group updates all

expecting success of 5506.3 'nonexistent group produces error': 
	mark nonexistent &&
	update_repos &&
	test_must_fail git remote update nonexistent &&
	! repo_fetched one &&
	! repo_fetched two

[main 5183ee7] nonexistent
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 5183ee7] nonexistent
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
fatal: no such remote or remote group: nonexistent
repo was not fetched: one
repo was not fetched: two
ok 3 - nonexistent group produces error

expecting success of 5506.4 'updating group updates all members (remote update)': 
	mark group-all &&
	update_repos &&
	git config --add remotes.all one &&
	git config --add remotes.all two &&
	git remote update all &&
	repo_fetched one &&
	repo_fetched two

[main 76ca780] group-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 76ca780] group-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Fetching one
From one
   e3d2b21..76ca780  main       -> one/main
Fetching two
From two
   e3d2b21..76ca780  main       -> two/main
repo was fetched: one
repo was fetched: two
ok 4 - updating group updates all members (remote update)

expecting success of 5506.5 'updating group updates all members (fetch)': 
	mark fetch-group-all &&
	update_repos &&
	git fetch all &&
	repo_fetched one &&
	repo_fetched two

[main 72c2514] fetch-group-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 72c2514] fetch-group-all
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Fetching one
From one
   76ca780..72c2514  main       -> one/main
Fetching two
From two
   76ca780..72c2514  main       -> two/main
repo was fetched: one
repo was fetched: two
ok 5 - updating group updates all members (fetch)

expecting success of 5506.6 'updating group does not update non-members (remote update)': 
	mark group-some &&
	update_repos &&
	git config --add remotes.some one &&
	git remote update some &&
	repo_fetched one &&
	! repo_fetched two

[main a4a07c1] group-some
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main a4a07c1] group-some
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Fetching one
From one
   72c2514..a4a07c1  main       -> one/main
repo was fetched: one
repo was not fetched: two
ok 6 - updating group does not update non-members (remote update)

expecting success of 5506.7 'updating group does not update non-members (fetch)': 
	mark fetch-group-some &&
	update_repos &&
	git config --add remotes.some one &&
	git remote update some &&
	repo_fetched one &&
	! repo_fetched two

[main 09f8b0e] fetch-group-some
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 09f8b0e] fetch-group-some
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Fetching one
From one
   a4a07c1..09f8b0e  main       -> one/main
Fetching one
repo was fetched: one
repo was not fetched: two
ok 7 - updating group does not update non-members (fetch)

expecting success of 5506.8 'updating remote name updates that remote': 
	mark remote-name &&
	update_repos &&
	git remote update one &&
	repo_fetched one &&
	! repo_fetched two

[main 1609587] remote-name
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 1609587] remote-name
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Fetching one
From one
   09f8b0e..1609587  main       -> one/main
repo was fetched: one
repo was not fetched: two
ok 8 - updating remote name updates that remote

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5507-remote-environment.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5507-remote-environment/.git/
expecting success of 5507.1 'set up "remote" push situation': 
	test_commit one &&
	git config push.default current &&
	git init remote

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5507-remote-environment/remote/.git/
ok 1 - set up "remote" push situation

expecting success of 5507.2 'set up fake ssh': 
	GIT_SSH_COMMAND="f() {
		cd \"\$TRASH_DIRECTORY\" &&
		eval \"\$2\"
	}; f" &&
	export GIT_SSH_COMMAND &&
	export TRASH_DIRECTORY

ok 2 - set up fake ssh

expecting success of 5507.3 'confirm default push fails': 
	test_must_fail git push remote

remote: error: refusing to update checked out branch: refs/heads/master        
remote: error: By default, updating the current branch in a non-bare repository        
remote: is denied, because it will make the index and work tree inconsistent        
remote: with what you pushed, and will require 'git reset --hard' to match        
remote: the work tree to HEAD.        
remote: 
remote: You can set the 'receive.denyCurrentBranch' configuration variable        
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into        
remote: its current branch; however, this is not recommended unless you        
remote: arranged to update its work tree to match what you pushed in some        
remote: other way.        
remote: 
remote: To squelch this message and still keep the default behaviour, set        
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.        
To remote
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'remote'
ok 3 - confirm default push fails

expecting success of 5507.4 'config does not travel over same-machine push': 
	test_must_fail git -c receive.denyCurrentBranch=false push remote

remote: error: refusing to update checked out branch: refs/heads/master        
remote: error: By default, updating the current branch in a non-bare repository        
remote: is denied, because it will make the index and work tree inconsistent        
remote: with what you pushed, and will require 'git reset --hard' to match        
remote: the work tree to HEAD.        
remote: 
remote: You can set the 'receive.denyCurrentBranch' configuration variable        
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into        
remote: its current branch; however, this is not recommended unless you        
remote: arranged to update its work tree to match what you pushed in some        
remote: other way.        
remote: 
remote: To squelch this message and still keep the default behaviour, set        
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.        
To remote
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'remote'
ok 4 - config does not travel over same-machine push

expecting success of 5507.5 'config does not travel over ssh push': 
	test_must_fail git -c receive.denyCurrentBranch=false push host:remote

remote: error: refusing to update checked out branch: refs/heads/master        
remote: error: By default, updating the current branch in a non-bare repository        
remote: is denied, because it will make the index and work tree inconsistent        
remote: with what you pushed, and will require 'git reset --hard' to match        
remote: the work tree to HEAD.        
remote: 
remote: You can set the 'receive.denyCurrentBranch' configuration variable        
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into        
remote: its current branch; however, this is not recommended unless you        
remote: arranged to update its work tree to match what you pushed in some        
remote: other way.        
remote: 
remote: To squelch this message and still keep the default behaviour, set        
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.        
To host:remote
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'host:remote'
ok 5 - config does not travel over ssh push

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5411-proc-receive-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5411-proc-receive-hook/.git/
expecting success of 5411.1 'setup upstream and workbench': 
		rm -rf upstream.git &&
		rm -rf workbench &&
		git init --bare upstream.git &&
		git init workbench &&
		create_commits_in workbench A B &&
		(
			cd workbench &&
			# Try to make a stable fixed width for abbreviated commit ID,
			# this fixed-width oid will be replaced with "<OID>".
			git config core.abbrev 7 &&
			git tag -m "v123" v123 $A &&
			git remote add origin ../upstream.git &&
			git push origin main &&
			git update-ref refs/heads/main $A $B &&
			git -C ../upstream.git update-ref \
				refs/heads/main $A $B
		) &&
		TAG=$(git -C workbench rev-parse v123) &&

		# setup pre-receive hook
		test_hook --setup -C upstream.git pre-receive <<-\EOF &&
		exec >&2
		echo "# pre-receive hook"
		while read old new ref
		do
			echo "pre-receive< $old $new $ref"
		done
		EOF

		# setup post-receive hook
		test_hook --setup -C upstream.git post-receive <<-\EOF &&
		exec >&2
		echo "# post-receive hook"
		while read old new ref
		do
			echo "post-receive< $old $new $ref"
		done
		EOF

		upstream=upstream.git
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5411-proc-receive-hook/upstream.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5411-proc-receive-hook/workbench/.git/
[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
To ../upstream.git
 * [new branch]      main -> main
ok 1 - setup upstream and workbench

expecting success of 5411.2 'setup receive.procReceiveRefs': 
	git -C "$upstream" config --add receive.procReceiveRefs refs/for

ok 2 - setup receive.procReceiveRefs

expecting success of 5411.3 'setup proc-receive hook': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic1" \
		-r "option fall-through" \
		-r "ok refs/for/main/topic2" \
		-r "option refname refs/for/changes/23/123/1" \
		-r "option new-oid $A" \
		-r "ok refs/for/main/topic2" \
		-r "option refname refs/for/changes/24/124/2" \
		-r "option old-oid $B" \
		-r "option new-oid $A" \
		-r "option forced-update" \
		-r "ng refs/for/next/topic target branch not exist"
	EOF

ok 3 - setup proc-receive hook

expecting success of 5411.4 'proc-receive: report status v1': 
	{
		if test -z "$GIT_DEFAULT_HASH" || test "$GIT_DEFAULT_HASH" = "sha1"
		then
			printf "%s %s refs/heads/main\0report-status\n" \
				$A $B | packetize_raw
		else
			printf "%s %s refs/heads/main\0report-status object-format=$GIT_DEFAULT_HASH\n" \
				$A $B | packetize_raw
		fi &&
		printf "%s %s refs/for/main/topic1\n" \
			$ZERO_OID $A | packetize &&
		printf "%s %s refs/heads/foo\n" \
			$ZERO_OID $A | packetize &&
		printf "%s %s refs/for/next/topic\n" \
			$ZERO_OID $A | packetize &&
		printf "%s %s refs/for/main/topic2\n" \
			$ZERO_OID $A | packetize &&
		printf 0000 &&
		printf "" | git -C "$upstream" pack-objects --stdout
	} | git receive-pack "$upstream" --stateless-rpc \
	>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	cat >expect <<-EOF &&
	# pre-receive hook
	pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
	pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic1
	pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
	pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
	pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic2
	# proc-receive hook
	proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic1
	proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
	proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic2
	proc-receive> ok refs/for/main/topic1
	proc-receive> option fall-through
	proc-receive> ok refs/for/main/topic2
	proc-receive> option refname refs/for/changes/23/123/1
	proc-receive> option new-oid <COMMIT-A>
	proc-receive> ok refs/for/main/topic2
	proc-receive> option refname refs/for/changes/24/124/2
	proc-receive> option old-oid <COMMIT-B>
	proc-receive> option new-oid <COMMIT-A>
	proc-receive> option forced-update
	proc-receive> ng refs/for/next/topic target branch not exist
	000eunpack ok
	0017ok refs/heads/main
	001cok refs/for/main/topic1
	0016ok refs/heads/foo
	0033ng refs/for/next/topic target branch not exist
	001cok refs/for/main/topic2
	0000# post-receive hook
	post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
	post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic1
	post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
	post-receive< <ZERO-OID> <COMMIT-A> refs/for/changes/23/123/1
	post-receive< <COMMIT-B> <COMMIT-A> refs/for/changes/24/124/2
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/for/main/topic1
	<COMMIT-A> refs/heads/foo
	<COMMIT-B> refs/heads/main
	EOF

ok 4 - proc-receive: report status v1

expecting success of 5411.5 'setup upstream and workbench': 
		rm -rf upstream.git &&
		rm -rf workbench &&
		git init --bare upstream.git &&
		git init workbench &&
		create_commits_in workbench A B &&
		(
			cd workbench &&
			# Try to make a stable fixed width for abbreviated commit ID,
			# this fixed-width oid will be replaced with "<OID>".
			git config core.abbrev 7 &&
			git tag -m "v123" v123 $A &&
			git remote add origin ../upstream.git &&
			git push origin main &&
			git update-ref refs/heads/main $A $B &&
			git -C ../upstream.git update-ref \
				refs/heads/main $A $B
		) &&
		TAG=$(git -C workbench rev-parse v123) &&

		# setup pre-receive hook
		test_hook --setup -C upstream.git pre-receive <<-\EOF &&
		exec >&2
		echo "# pre-receive hook"
		while read old new ref
		do
			echo "pre-receive< $old $new $ref"
		done
		EOF

		# setup post-receive hook
		test_hook --setup -C upstream.git post-receive <<-\EOF &&
		exec >&2
		echo "# post-receive hook"
		while read old new ref
		do
			echo "post-receive< $old $new $ref"
		done
		EOF

		upstream=upstream.git
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5411-proc-receive-hook/upstream.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5411-proc-receive-hook/workbench/.git/
[main (root-commit) a3899a0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 7763d60] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
To ../upstream.git
 * [new branch]      main -> main
ok 5 - setup upstream and workbench

expecting success of 5411.6 'git-push (builtin protocol)': 
	git -C workbench push origin \
		$B:refs/heads/main \
		HEAD:refs/heads/next \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
	>  * [new branch]      HEAD -> next
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 6 - git-push (builtin protocol)

expecting success of 5411.7 'git-push --atomic (builtin protocol)': 
	test_must_fail git -C workbench push --atomic origin \
		main \
		$B:refs/heads/next \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> To <URL/of/upstream.git>
	>  ! [rejected]        main -> main (non-fast-forward)
	>  ! [rejected]        <COMMIT-B> -> next (atomic push failed)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 7 - git-push --atomic (builtin protocol)

expecting success of 5411.8 'non-fast-forward git-push (builtin protocol)': 
	test_must_fail git \
		-C workbench \
		-c advice.pushUpdateRejected=false \
		push origin \
		main \
		$B:refs/heads/next \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> next
	>  ! [rejected]        main -> main (non-fast-forward)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-B> refs/heads/next
	EOF

ok 8 - non-fast-forward git-push (builtin protocol)

expecting success of 5411.9 'git-push -f (builtin protocol)': 
	git -C workbench push -f origin \
		refs/tags/v123 \
		:refs/heads/next \
		main \
		main:refs/review/main/topic \
		HEAD:refs/heads/a/b/c \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
	> To <URL/of/upstream.git>
	>  + <COMMIT-B>...<COMMIT-A> main -> main (forced update)
	>  - [deleted]         next
	>  * [new tag]         v123 -> v123
	>  * [new reference]   main -> refs/review/main/topic
	>  * [new branch]      HEAD -> a/b/c
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/a/b/c
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/review/main/topic
	<TAG-v123> refs/tags/v123
	EOF

ok 9 - git-push -f (builtin protocol)

expecting success of 5411.10 'cleanup (builtin protocol)': 
	(
		cd "$upstream" &&
		git update-ref -d refs/review/main/topic &&
		git update-ref -d refs/tags/v123 &&
		git update-ref -d refs/heads/a/b/c
	)

ok 10 - cleanup (builtin protocol)

expecting success of 5411.11 'git-push (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		$B:refs/heads/main \
		HEAD:refs/heads/next \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
	> *	HEAD:refs/heads/next	[new branch]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 11 - git-push (builtin protocol/porcelain)

expecting success of 5411.12 'git-push --atomic (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --atomic --porcelain origin \
		main \
		$B:refs/heads/next \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "s/^# GETTEXT POISON #//" \
		-e "/^To / { p; }" \
		-e "/^!/ { p; }" \
		<out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> To <URL/of/upstream.git>
	> !	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
	> !	<COMMIT-B>:refs/heads/next	[rejected] (atomic push failed)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 12 - git-push --atomic (builtin protocol/porcelain)

expecting success of 5411.13 'non-fast-forward git-push (builtin protocol/porcelain)': 
	test_must_fail git \
		-C workbench \
		-c advice.pushUpdateRejected=false \
		push --porcelain origin \
		main \
		$B:refs/heads/next \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>  	<COMMIT-B>:refs/heads/next	<COMMIT-A>..<COMMIT-B>
	> !	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	<COMMIT-B> refs/heads/next
	EOF

ok 13 - non-fast-forward git-push (builtin protocol/porcelain)

expecting success of 5411.14 'git-push -f (builtin protocol/porcelain)': 
	git -C workbench push --porcelain -f origin \
		refs/tags/v123 \
		:refs/heads/next \
		main \
		main:refs/review/main/topic \
		HEAD:refs/heads/a/b/c \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
	> To <URL/of/upstream.git>
	> +	refs/heads/main:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
	> -	:refs/heads/next	[deleted]
	> *	refs/tags/v123:refs/tags/v123	[new tag]
	> *	refs/heads/main:refs/review/main/topic	[new reference]
	> *	HEAD:refs/heads/a/b/c	[new branch]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/a/b/c
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/review/main/topic
	<TAG-v123> refs/tags/v123
	EOF

ok 14 - git-push -f (builtin protocol/porcelain)

expecting success of 5411.15 'cleanup (builtin protocol/porcelain)': 
	(
		cd "$upstream" &&
		git update-ref -d refs/review/main/topic &&
		git update-ref -d refs/tags/v123 &&
		git update-ref -d refs/heads/a/b/c
	)

ok 15 - cleanup (builtin protocol/porcelain)

expecting success of 5411.16 'setup pre-receive hook (builtin protocol)': 
	mv "$upstream/hooks/pre-receive" "$upstream/hooks/pre-receive.ok" &&
	test_hook -C "$upstream" --clobber pre-receive <<-\EOF
	exit 1
	EOF

ok 16 - setup pre-receive hook (builtin protocol)

expecting success of 5411.17 'git-push is declined (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		$B:refs/heads/main \
		HEAD:refs/heads/next \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] <COMMIT-B> -> main (pre-receive hook declined)
	 ! [remote rejected] HEAD -> next (pre-receive hook declined)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-\EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 17 - git-push is declined (builtin protocol)

expecting success of 5411.18 'cleanup (builtin protocol)': 
	mv "$upstream/hooks/pre-receive.ok" "$upstream/hooks/pre-receive"

ok 18 - cleanup (builtin protocol)

expecting success of 5411.19 'setup pre-receive hook (builtin protocol/porcelain)': 
	mv "$upstream/hooks/pre-receive" "$upstream/hooks/pre-receive.ok" &&
	test_hook -C "$upstream" --clobber pre-receive <<-\EOF
	exit 1
	EOF

ok 19 - setup pre-receive hook (builtin protocol/porcelain)

expecting success of 5411.20 'git-push is declined (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		$B:refs/heads/main \
		HEAD:refs/heads/next \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> To <URL/of/upstream.git>
	> !	<COMMIT-B>:refs/heads/main	[remote rejected] (pre-receive hook declined)
	> !	HEAD:refs/heads/next	[remote rejected] (pre-receive hook declined)
	Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 20 - git-push is declined (builtin protocol/porcelain)

expecting success of 5411.21 'cleanup (builtin protocol/porcelain)': 
	mv "$upstream/hooks/pre-receive.ok" "$upstream/hooks/pre-receive"

ok 21 - cleanup (builtin protocol/porcelain)

expecting success of 5411.22 'add two receive.procReceiveRefs settings': 
	(
		cd "$upstream" &&
		git config --add receive.procReceiveRefs refs/for &&
		git config --add receive.procReceiveRefs refs/review/
	)

ok 22 - add two receive.procReceiveRefs settings

expecting success of 5411.23 'proc-receive: no hook, fail to push special ref (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:next \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: error: cannot find hook "proc-receive"        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>  * [new branch]      HEAD -> next
	>  ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 23 - proc-receive: no hook, fail to push special ref (builtin protocol)

expecting success of 5411.24 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 24 - cleanup (builtin protocol)

expecting success of 5411.25 'proc-receive: no hook, all failed for atomic push (builtin protocol)': 
	test_must_fail git -C workbench push --atomic origin \
		$B:main \
		HEAD:next \
		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: error: cannot find hook "proc-receive"        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] <COMMIT-B> -> main (fail to run proc-receive hook)
	>  ! [remote rejected] HEAD -> next (fail to run proc-receive hook)
	>  ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 25 - proc-receive: no hook, all failed for atomic push (builtin protocol)

expecting success of 5411.26 'proc-receive: no hook, fail to push special ref (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:next \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: error: cannot find hook "proc-receive"        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/heads/next	[new branch]
	> !	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 26 - proc-receive: no hook, fail to push special ref (builtin protocol/porcelain)

expecting success of 5411.27 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 27 - cleanup (builtin protocol/porcelain)

expecting success of 5411.28 'proc-receive: no hook, all failed for atomic push (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain --atomic origin \
		$B:main \
		HEAD:next \
		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: error: cannot find hook "proc-receive"        Z
	> To <URL/of/upstream.git>
	> !	<COMMIT-B>:refs/heads/main	[remote rejected] (fail to run proc-receive hook)
	> !	HEAD:refs/heads/next	[remote rejected] (fail to run proc-receive hook)
	> !	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 28 - proc-receive: no hook, all failed for atomic push (builtin protocol/porcelain)

expecting success of 5411.29 'setup proc-receive hook (unknown version, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --version 2
	EOF

ok 29 - setup proc-receive hook (unknown version, builtin protocol)

expecting success of 5411.30 'proc-receive: bad protocol (unknown version, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&

	# Check status report for git-push
	sed -n \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<actual >actual-report &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual-report &&

	# Check error message from "receive-pack", but ignore unstable fatal error
	# message ("remote: fatal: the remote end hung up unexpectedly") which
	# is different from the remote HTTP server with different locale settings.
	grep "^remote: error:" <actual >actual-error &&
	format_and_save_expect <<-EOF &&
	> remote: error: proc-receive version "2" is not supported        Z
	EOF
	test_cmp expect actual-error &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 30 - proc-receive: bad protocol (unknown version, builtin protocol)

expecting success of 5411.31 'setup proc-receive hook (hook --die-read-version, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-version
	EOF

ok 31 - setup proc-receive hook (hook --die-read-version, builtin protocol)

expecting success of 5411.32 'proc-receive: bad protocol (hook --die-read-version, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-version option" out-$test_count &&
	grep "remote: error: fail to negotiate version with proc-receive hook" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-\EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-version option        
remote: error: fail to negotiate version with proc-receive hook        
ok 32 - proc-receive: bad protocol (hook --die-read-version, builtin protocol)

expecting success of 5411.33 'setup proc-receive hook (hook --die-write-version, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-write-version
	EOF

ok 33 - setup proc-receive hook (hook --die-write-version, builtin protocol)

expecting success of 5411.34 'proc-receive: bad protocol (hook --die-write-version, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-write-version option" out-$test_count &&
	grep "remote: error: fail to negotiate version with proc-receive hook" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-write-version option        
remote: error: fail to negotiate version with proc-receive hook        
ok 34 - proc-receive: bad protocol (hook --die-write-version, builtin protocol)

expecting success of 5411.35 'setup proc-receive hook (hook --die-read-commands, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-commands
	EOF

ok 35 - setup proc-receive hook (hook --die-read-commands, builtin protocol)

expecting success of 5411.36 'proc-receive: bad protocol (hook --die-read-commands, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-commands option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-commands option        
ok 36 - proc-receive: bad protocol (hook --die-read-commands, builtin protocol)

expecting success of 5411.37 'setup proc-receive hook (hook --die-read-push-options, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-push-options
	EOF

ok 37 - setup proc-receive hook (hook --die-read-push-options, builtin protocol)

expecting success of 5411.38 'proc-receive: bad protocol (hook --die-read-push-options, builtin protocol)': 
	git -C "$upstream" config receive.advertisePushOptions true &&
	test_must_fail git -C workbench push origin \
		-o reviewers=user1,user2 \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-push-options option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-push-options option        
ok 38 - proc-receive: bad protocol (hook --die-read-push-options, builtin protocol)

expecting success of 5411.39 'setup proc-receive hook (hook --die-write-report, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-write-report
	EOF

ok 39 - setup proc-receive hook (hook --die-write-report, builtin protocol)

expecting success of 5411.40 'proc-receive: bad protocol (hook --die-write-report, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; }" \
		-e "/^ ! / { p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-write-report option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-write-report option        
ok 40 - proc-receive: bad protocol (hook --die-write-report, builtin protocol)

expecting success of 5411.41 'setup proc-receive hook (no report, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v
	EOF

ok 41 - setup proc-receive hook (no report, builtin protocol)

expecting success of 5411.42 'proc-receive: bad protocol (no report, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	>  * [new branch]      HEAD -> next
	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 42 - proc-receive: bad protocol (no report, builtin protocol)

expecting success of 5411.43 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref -d refs/heads/next


ok 43 - cleanup (builtin protocol)

expecting success of 5411.44 'setup proc-receive hook (no ref, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok"
	EOF

ok 44 - setup proc-receive hook (no ref, builtin protocol)

expecting success of 5411.45 'proc-receive: bad protocol (no ref, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic\
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok        Z
	> remote: error: proc-receive reported incomplete status line: "ok"        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 45 - proc-receive: bad protocol (no ref, builtin protocol)

expecting success of 5411.46 'setup proc-receive hook (unknown status, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "xx refs/for/main/topic"
	EOF

ok 46 - setup proc-receive hook (unknown status, builtin protocol)

expecting success of 5411.47 'proc-receive: bad protocol (unknown status, builtin protocol)': 
	test_must_fail git -C workbench push origin \
			HEAD:refs/for/main/topic \
			>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> xx refs/for/main/topic        Z
	> remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 47 - proc-receive: bad protocol (unknown status, builtin protocol)

expecting success of 5411.48 'setup proc-receive hook (unknown version, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --version 2
	EOF

ok 48 - setup proc-receive hook (unknown version, builtin protocol/porcelain)

expecting success of 5411.49 'proc-receive: bad protocol (unknown version, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&

	# Check status report for git-push
	sed -n \
		-e "/^To / { p; n; p; n; p; }" \
		<actual >actual-report &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual-report &&

	# Check error message from "receive-pack", but ignore unstable fatal error
	# message ("remote: fatal: the remote end hung up unexpectedly") which
	# is different from the remote HTTP server with different locale settings.
	grep "^remote: error:" <actual >actual-error &&
	format_and_save_expect <<-EOF &&
	> remote: error: proc-receive version "2" is not supported        Z
	EOF
	test_cmp expect actual-error &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 49 - proc-receive: bad protocol (unknown version, builtin protocol/porcelain)

expecting success of 5411.50 'setup proc-receive hook (hook --die-read-version, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-version
	EOF

ok 50 - setup proc-receive hook (hook --die-read-version, builtin protocol/porcelain)

expecting success of 5411.51 'proc-receive: bad protocol (hook --die-read-version, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; n; p; n; p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-version option" out-$test_count &&
	grep "remote: error: fail to negotiate version with proc-receive hook" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-version option        
remote: error: fail to negotiate version with proc-receive hook        
ok 51 - proc-receive: bad protocol (hook --die-read-version, builtin protocol/porcelain)

expecting success of 5411.52 'setup proc-receive hook (hook --die-write-version, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-write-version
	EOF

ok 52 - setup proc-receive hook (hook --die-write-version, builtin protocol/porcelain)

expecting success of 5411.53 'proc-receive: bad protocol (hook --die-write-version, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; n; p; n; p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-write-version option" out-$test_count &&
	grep "remote: error: fail to negotiate version with proc-receive hook" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-write-version option        
remote: error: fail to negotiate version with proc-receive hook        
ok 53 - proc-receive: bad protocol (hook --die-write-version, builtin protocol/porcelain)

expecting success of 5411.54 'setup proc-receive hook (hook --die-read-commands, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-commands
	EOF

ok 54 - setup proc-receive hook (hook --die-read-commands, builtin protocol/porcelain)

expecting success of 5411.55 'proc-receive: bad protocol (hook --die-read-commands, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; n; p; n; p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-commands option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-commands option        
ok 55 - proc-receive: bad protocol (hook --die-read-commands, builtin protocol/porcelain)

expecting success of 5411.56 'setup proc-receive hook (hook --die-read-push-options, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-read-push-options
	EOF

ok 56 - setup proc-receive hook (hook --die-read-push-options, builtin protocol/porcelain)

expecting success of 5411.57 'proc-receive: bad protocol (hook --die-read-push-options, builtin protocol/porcelain)': 
	git -C "$upstream" config receive.advertisePushOptions true &&
	test_must_fail git -C workbench push --porcelain origin \
		-o reviewers=user1,user2 \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; n; p; n; p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-read-push-options option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-read-push-options option        
ok 57 - proc-receive: bad protocol (hook --die-read-push-options, builtin protocol/porcelain)

expecting success of 5411.58 'setup proc-receive hook (hook --die-write-report, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v --die-write-report
	EOF

ok 58 - setup proc-receive hook (hook --die-write-report, builtin protocol/porcelain)

expecting success of 5411.59 'proc-receive: bad protocol (hook --die-write-report, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	filter_out_user_friendly_and_stable_output \
		-e "/^To / { p; n; p; n; p; }" \
		<out-$test_count >actual &&
	cat >expect <<-EOF &&
	To <URL/of/upstream.git>
	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
	Done
	EOF
	test_cmp expect actual &&
	grep "remote: fatal: die with the --die-write-report option" out-$test_count &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

remote: fatal: die with the --die-write-report option        
ok 59 - proc-receive: bad protocol (hook --die-write-report, builtin protocol/porcelain)

expecting success of 5411.60 'setup proc-receive hook (no report, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v
	EOF

ok 60 - setup proc-receive hook (no report, builtin protocol/porcelain)

expecting success of 5411.61 'proc-receive: bad protocol (no report, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/heads/next	[new branch]
	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 61 - proc-receive: bad protocol (no report, builtin protocol/porcelain)

expecting success of 5411.62 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 62 - cleanup (builtin protocol/porcelain)

expecting success of 5411.63 'setup proc-receive hook (no ref, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok"
	EOF

ok 63 - setup proc-receive hook (no ref, builtin protocol/porcelain)

expecting success of 5411.64 'proc-receive: bad protocol (no ref, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic\
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok        Z
	> remote: error: proc-receive reported incomplete status line: "ok"        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 64 - proc-receive: bad protocol (no ref, builtin protocol/porcelain)

expecting success of 5411.65 'setup proc-receive hook (unknown status, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "xx refs/for/main/topic"
	EOF

ok 65 - setup proc-receive hook (unknown status, builtin protocol/porcelain)

expecting success of 5411.66 'proc-receive: bad protocol (unknown status, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
			HEAD:refs/for/main/topic \
			>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> xx refs/for/main/topic        Z
	> remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 66 - proc-receive: bad protocol (unknown status, builtin protocol/porcelain)

expecting success of 5411.67 'setup proc-receive hook (ng, no message, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ng refs/for/main/topic"
	EOF

ok 67 - setup proc-receive hook (ng, no message, builtin protocol)

expecting success of 5411.68 'proc-receive: fail to update (ng, no message, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ng refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/main/topic (failed)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 68 - proc-receive: fail to update (ng, no message, builtin protocol)

expecting success of 5411.69 'setup proc-receive hook (ng message, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ng refs/for/main/topic error msg"
	EOF

ok 69 - setup proc-receive hook (ng message, builtin protocol)

expecting success of 5411.70 'proc-receive: fail to update (ng, with message, builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ng refs/for/main/topic error msg        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/main/topic (error msg)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 70 - proc-receive: fail to update (ng, with message, builtin protocol)

expecting success of 5411.71 'setup proc-receive hook (ng, no message, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ng refs/for/main/topic"
	EOF

ok 71 - setup proc-receive hook (ng, no message, builtin protocol/porcelain)

expecting success of 5411.72 'proc-receive: fail to update (ng, no message, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ng refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/main/topic	[remote rejected] (failed)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 72 - proc-receive: fail to update (ng, no message, builtin protocol/porcelain)

expecting success of 5411.73 'setup proc-receive hook (ng message, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ng refs/for/main/topic error msg"
	EOF

ok 73 - setup proc-receive hook (ng message, builtin protocol/porcelain)

expecting success of 5411.74 'proc-receive: fail to update (ng, with message, builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ng refs/for/main/topic error msg        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/main/topic	[remote rejected] (error msg)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 74 - proc-receive: fail to update (ng, with message, builtin protocol/porcelain)

expecting success of 5411.75 'setup proc-receive hook (unexpected ref, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main"
	EOF

ok 75 - setup proc-receive hook (unexpected ref, builtin protocol)

expecting success of 5411.76 'proc-receive: report unexpected ref (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		$B:refs/heads/main \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: error: proc-receive reported status on unexpected ref: refs/heads/main        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	EOF

ok 76 - proc-receive: report unexpected ref (builtin protocol)

expecting success of 5411.77 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref refs/heads/main $A

ok 77 - cleanup (builtin protocol)

expecting success of 5411.78 'setup proc-receive hook (unexpected ref, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main"
	EOF

ok 78 - setup proc-receive hook (unexpected ref, builtin protocol/porcelain)

expecting success of 5411.79 'proc-receive: report unexpected ref (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		$B:refs/heads/main \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: error: proc-receive reported status on unexpected ref: refs/heads/main        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> To <URL/of/upstream.git>
	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/main
	EOF

ok 79 - proc-receive: report unexpected ref (builtin protocol/porcelain)

expecting success of 5411.80 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref refs/heads/main $A

ok 80 - cleanup (builtin protocol/porcelain)

expecting success of 5411.81 'setup proc-receive hook (unexpected ref, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 81 - setup proc-receive hook (unexpected ref, builtin protocol)

expecting success of 5411.82 'proc-receive: report unknown reference (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/a/b/c/my/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: error: proc-receive reported status on unknown ref: refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/a/b/c/my/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 82 - proc-receive: report unknown reference (builtin protocol)

expecting success of 5411.83 'setup proc-receive hook (unexpected ref, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 83 - setup proc-receive hook (unexpected ref, builtin protocol/porcelain)

expecting success of 5411.84 'proc-receive: report unknown reference (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/a/b/c/my/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: error: proc-receive reported status on unknown ref: refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/a/b/c/my/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 84 - proc-receive: report unknown reference (builtin protocol/porcelain)

expecting success of 5411.85 'setup proc-receive hook and disable push-options (builtin protocol)': 
	git -C "$upstream" config receive.advertisePushOptions false &&
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 85 - setup proc-receive hook and disable push-options (builtin protocol)

expecting success of 5411.86 'proc-receive: not support push options (builtin protocol)': 
	test_must_fail git -C workbench push \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	test_i18ngrep "fatal: the receiving end does not support push options" \
		actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

fatal: the receiving end does not support push options
ok 86 - proc-receive: not support push options (builtin protocol)

expecting success of 5411.87 'enable push options (builtin protocol)': 
	git -C "$upstream" config receive.advertisePushOptions true

ok 87 - enable push options (builtin protocol)

expecting success of 5411.88 'setup version=0 for proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		--version 0 \
		-r "ok refs/for/main/topic"
	EOF

ok 88 - setup version=0 for proc-receive hook (builtin protocol)

expecting success of 5411.89 'proc-receive: ignore push-options for version 0 (builtin protocol)': 
	git -C workbench push \
		--atomic \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  * [new branch]      HEAD -> next
	>  * [new reference]   HEAD -> refs/for/main/topic
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 89 - proc-receive: ignore push-options for version 0 (builtin protocol)

expecting success of 5411.90 'restore proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 90 - restore proc-receive hook (builtin protocol)

expecting success of 5411.91 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 91 - cleanup (builtin protocol)

expecting success of 5411.92 'proc-receive: push with options (builtin protocol)': 
	git -C workbench push \
		--atomic \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive: atomic push_options        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< issue=123        Z
	> remote: proc-receive< reviewer=user1        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  * [new branch]      HEAD -> next
	>  * [new reference]   HEAD -> refs/for/main/topic
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 92 - proc-receive: push with options (builtin protocol)

expecting success of 5411.93 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 93 - cleanup (builtin protocol)

expecting success of 5411.94 'setup proc-receive hook and disable push-options (builtin protocol/porcelain)': 
	git -C "$upstream" config receive.advertisePushOptions false &&
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 94 - setup proc-receive hook and disable push-options (builtin protocol/porcelain)

expecting success of 5411.95 'proc-receive: not support push options (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push \
		--porcelain \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	test_i18ngrep "fatal: the receiving end does not support push options" \
		actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

fatal: the receiving end does not support push options
ok 95 - proc-receive: not support push options (builtin protocol/porcelain)

expecting success of 5411.96 'enable push options (builtin protocol/porcelain)': 
	git -C "$upstream" config receive.advertisePushOptions true

ok 96 - enable push options (builtin protocol/porcelain)

expecting success of 5411.97 'setup version=0 for proc-receive hook (builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		--version 0 \
		-r "ok refs/for/main/topic"
	EOF

ok 97 - setup version=0 for proc-receive hook (builtin protocol/porcelain)

expecting success of 5411.98 'proc-receive: ignore push-options for version 0 (builtin protocol/porcelain)': 
	git -C workbench push \
		--porcelain \
		--atomic \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/heads/next	[new branch]
	> *	HEAD:refs/for/main/topic	[new reference]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 98 - proc-receive: ignore push-options for version 0 (builtin protocol/porcelain)

expecting success of 5411.99 'restore proc-receive hook (builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 99 - restore proc-receive hook (builtin protocol/porcelain)

expecting success of 5411.100 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 100 - cleanup (builtin protocol/porcelain)

expecting success of 5411.101 'proc-receive: push with options (builtin protocol/porcelain)': 
	git -C workbench push \
		--porcelain \
		--atomic \
		-o issue=123 \
		-o reviewer=user1 \
		origin \
		HEAD:refs/heads/next \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive: atomic push_options        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< issue=123        Z
	> remote: proc-receive< reviewer=user1        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/heads/next	[new branch]
	> *	HEAD:refs/for/main/topic	[new reference]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/next
	EOF

ok 101 - proc-receive: push with options (builtin protocol/porcelain)

expecting success of 5411.102 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref -d refs/heads/next

ok 102 - cleanup (builtin protocol/porcelain)

expecting success of 5411.103 'setup proc-receive hook (ok, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 103 - setup proc-receive hook (ok, builtin protocol)

expecting success of 5411.104 'proc-receive: ok (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/for/main/topic
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 104 - proc-receive: ok (builtin protocol)

expecting success of 5411.105 'setup proc-receive hook (ok, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic"
	EOF

ok 105 - setup proc-receive hook (ok, builtin protocol/porcelain)

expecting success of 5411.106 'proc-receive: ok (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/for/main/topic	[new reference]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 106 - proc-receive: ok (builtin protocol/porcelain)

expecting success of 5411.107 'setup proc-receive hook (option without matching ok, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $B"
	EOF

ok 107 - setup proc-receive hook (option without matching ok, builtin protocol)

expecting success of 5411.108 'proc-receive: report option without matching ok (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: error: proc-receive reported "option" without a matching "ok/ng" directive        Z
	> To <URL/of/upstream.git>
	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
	EOF
	test_cmp expect actual

ok 108 - proc-receive: report option without matching ok (builtin protocol)

expecting success of 5411.109 'setup proc-receive hook (option refname, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head"
	EOF

ok 109 - setup proc-receive hook (option refname, builtin protocol)

expecting success of 5411.110 'proc-receive: report option refname (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/pull/123/head
	EOF
	test_cmp expect actual

ok 110 - proc-receive: report option refname (builtin protocol)

expecting success of 5411.111 'setup proc-receive hook (option refname and forced-update, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option forced-update"
	EOF

ok 111 - setup proc-receive hook (option refname and forced-update, builtin protocol)

expecting success of 5411.112 'proc-receive: report option refname and forced-update (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/pull/123/head
	EOF
	test_cmp expect actual

ok 112 - proc-receive: report option refname and forced-update (builtin protocol)

expecting success of 5411.113 'setup proc-receive hook (option refname and old-oid, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $B"
	EOF

ok 113 - setup proc-receive hook (option refname and old-oid, builtin protocol)

expecting success of 5411.114 'proc-receive: report option refname and old-oid (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-B>..<COMMIT-A>  HEAD -> refs/pull/123/head
	EOF
	test_cmp expect actual

ok 114 - proc-receive: report option refname and old-oid (builtin protocol)

expecting success of 5411.115 'setup proc-receive hook (option old-oid, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $B"
	EOF

ok 115 - setup proc-receive hook (option old-oid, builtin protocol)

expecting success of 5411.116 'proc-receive: report option old-oid (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-B>..<COMMIT-A>  HEAD -> refs/for/main/topic
	EOF
	test_cmp expect actual

ok 116 - proc-receive: report option old-oid (builtin protocol)

expecting success of 5411.117 'setup proc-receive hook (option old-oid and new-oid, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 117 - setup proc-receive hook (option old-oid and new-oid, builtin protocol)

expecting success of 5411.118 'proc-receive: report option old-oid and new-oid (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
	EOF
	test_cmp expect actual

ok 118 - proc-receive: report option old-oid and new-oid (builtin protocol)

expecting success of 5411.119 'setup proc-receive hook (report with multiple rewrites, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/a/b/c/topic" \
		-r "ok refs/for/next/topic" \
		-r "option refname refs/pull/123/head" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/124/head" \
		-r "option old-oid $B" \
		-r "option forced-update" \
		-r "option new-oid $A"
	EOF

ok 119 - setup proc-receive hook (report with multiple rewrites, builtin protocol)

expecting success of 5411.120 'proc-receive: report with multiple rewrites (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/next/topic \
		HEAD:refs/for/a/b/c/topic \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/a/b/c/topic        Z
	> remote: proc-receive> ok refs/for/next/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/pull/123/head
	>  * [new reference]   HEAD -> refs/for/a/b/c/topic
	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/pull/124/head (forced update)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 120 - proc-receive: report with multiple rewrites (builtin protocol)

expecting success of 5411.121 'setup proc-receive hook (option without matching ok, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $B"
	EOF

ok 121 - setup proc-receive hook (option without matching ok, builtin protocol/porcelain)

expecting success of 5411.122 'proc-receive: report option without matching ok (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: error: proc-receive reported "option" without a matching "ok/ng" directive        Z
	> To <URL/of/upstream.git>
	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual

ok 122 - proc-receive: report option without matching ok (builtin protocol/porcelain)

expecting success of 5411.123 'setup proc-receive hook (option refname, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head"
	EOF

ok 123 - setup proc-receive hook (option refname, builtin protocol/porcelain)

expecting success of 5411.124 'proc-receive: report option refname (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/pull/123/head	[new reference]
	> Done
	EOF
	test_cmp expect actual

ok 124 - proc-receive: report option refname (builtin protocol/porcelain)

expecting success of 5411.125 'setup proc-receive hook (option refname and forced-update, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option forced-update"
	EOF

ok 125 - setup proc-receive hook (option refname and forced-update, builtin protocol/porcelain)

expecting success of 5411.126 'proc-receive: report option refname and forced-update (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/pull/123/head	[new reference]
	> Done
	EOF
	test_cmp expect actual

ok 126 - proc-receive: report option refname and forced-update (builtin protocol/porcelain)

expecting success of 5411.127 'setup proc-receive hook (option refname and old-oid, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $B"
	EOF

ok 127 - setup proc-receive hook (option refname and old-oid, builtin protocol/porcelain)

expecting success of 5411.128 'proc-receive: report option refname and old-oid (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head        Z
	> To <URL/of/upstream.git>
	>  	HEAD:refs/pull/123/head	<COMMIT-B>..<COMMIT-A>
	> Done
	EOF
	test_cmp expect actual

ok 128 - proc-receive: report option refname and old-oid (builtin protocol/porcelain)

expecting success of 5411.129 'setup proc-receive hook (option old-oid, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $B"
	EOF

ok 129 - setup proc-receive hook (option old-oid, builtin protocol/porcelain)

expecting success of 5411.130 'proc-receive: report option old-oid (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  	HEAD:refs/for/main/topic	<COMMIT-B>..<COMMIT-A>
	> Done
	EOF
	test_cmp expect actual

ok 130 - proc-receive: report option old-oid (builtin protocol/porcelain)

expecting success of 5411.131 'setup proc-receive hook (option old-oid and new-oid, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 131 - setup proc-receive hook (option old-oid and new-oid, builtin protocol/porcelain)

expecting success of 5411.132 'proc-receive: report option old-oid and new-oid (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
	> Done
	EOF
	test_cmp expect actual

ok 132 - proc-receive: report option old-oid and new-oid (builtin protocol/porcelain)

expecting success of 5411.133 'setup proc-receive hook (report with multiple rewrites, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/a/b/c/topic" \
		-r "ok refs/for/next/topic" \
		-r "option refname refs/pull/123/head" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/124/head" \
		-r "option old-oid $B" \
		-r "option forced-update" \
		-r "option new-oid $A"

	EOF

ok 133 - setup proc-receive hook (report with multiple rewrites, builtin protocol/porcelain)

expecting success of 5411.134 'proc-receive: report with multiple rewrites (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/next/topic \
		HEAD:refs/for/a/b/c/topic \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/a/b/c/topic        Z
	> remote: proc-receive> ok refs/for/next/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/pull/123/head	[new reference]
	> *	HEAD:refs/for/a/b/c/topic	[new reference]
	> +	HEAD:refs/pull/124/head	<COMMIT-B>...<COMMIT-A> (forced update)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 134 - proc-receive: report with multiple rewrites (builtin protocol/porcelain)

expecting success of 5411.135 'setup proc-receive hook (ft, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option fall-through"
	EOF

ok 135 - setup proc-receive hook (ft, builtin protocol)

expecting success of 5411.136 'proc-receive: fall throught, let receive-pack to execute (builtin protocol)': 
	git -C workbench push origin \
		$B:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option fall-through        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   <COMMIT-B> -> refs/for/main/topic
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/for/main/topic
	<COMMIT-A> refs/heads/main
	EOF

ok 136 - proc-receive: fall throught, let receive-pack to execute (builtin protocol)

expecting success of 5411.137 'cleanup (builtin protocol)': 
	git -C "$upstream" update-ref -d refs/for/main/topic

ok 137 - cleanup (builtin protocol)

expecting success of 5411.138 'setup proc-receive hook (fall-through, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-\EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option fall-through"
	EOF

ok 138 - setup proc-receive hook (fall-through, builtin protocol/porcelain)

expecting success of 5411.139 'proc-receive: fall throught, let receive-pack to execute (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		$B:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option fall-through        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	> *	<COMMIT-B>:refs/for/main/topic	[new reference]
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/for/main/topic
	<COMMIT-A> refs/heads/main
	EOF

ok 139 - proc-receive: fall throught, let receive-pack to execute (builtin protocol/porcelain)

expecting success of 5411.140 'cleanup (builtin protocol/porcelain)': 
	git -C "$upstream" update-ref -d refs/for/main/topic

ok 140 - cleanup (builtin protocol/porcelain)

expecting success of 5411.141 'setup git config for remote-tracking of special refs': 
	(
		cd workbench &&
		if ! git config --get-all remote.origin.fetch | grep refs/for/
		then
			git config --add remote.origin.fetch \
				"+refs/for/*:refs/t/for/*" &&
			git config --add remote.origin.fetch \
				"+refs/pull/*:refs/t/pull/*" &&
			git config --add remote.origin.fetch \
				"+refs/changes/*:refs/t/changes/*"
		fi
	)

ok 141 - setup git config for remote-tracking of special refs

expecting success of 5411.142 'setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/1" \
		-r "option old-oid $ZERO_OID" \
		-r "option new-oid $A" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/25/125/1" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 142 - setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, builtin protocol)

expecting success of 5411.143 'proc-receive: multiple rewrite for one ref, no refname for the 1st rewrite (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/1        Z
	> remote: proc-receive> option old-oid <ZERO-OID>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/25/125/1        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
	>  * [new reference]   HEAD -> refs/changes/24/124/1
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/changes/25/125/1
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 143 - proc-receive: multiple rewrite for one ref, no refname for the 1st rewrite (builtin protocol)

expecting success of 5411.144 'proc-receive: check remote-tracking #1 (builtin protocol)': 
	git -C workbench show-ref |
		grep -v -e refs/remotes -e refs/heads -e refs/tags >out &&
	make_user_friendly_and_stable_output <out >actual &&
	cat >expect <<-EOF &&
	<COMMIT-A> refs/t/changes/24/124/1
	<COMMIT-B> refs/t/changes/25/125/1
	<COMMIT-B> refs/t/for/main/topic
	EOF
	test_cmp expect actual &&
	git -C workbench update-ref -d refs/t/for/main/topic &&
	git -C workbench update-ref -d refs/t/changes/24/124/1 &&
	git -C workbench update-ref -d refs/t/changes/25/125/1

ok 144 - proc-receive: check remote-tracking #1 (builtin protocol)

expecting success of 5411.145 'setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/1" \
		-r "option old-oid $ZERO_OID" \
		-r "option new-oid $A" \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/25/125/1" \
		-r "option old-oid $B" \
		-r "option new-oid $A" \
		-r "option forced-update"
	EOF

ok 145 - setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, builtin protocol)

expecting success of 5411.146 'proc-receive: multiple rewrites for one ref, no refname for the 2nd rewrite (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/1        Z
	> remote: proc-receive> option old-oid <ZERO-OID>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/25/125/1        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/changes/24/124/1
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/changes/25/125/1 (forced update)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 146 - proc-receive: multiple rewrites for one ref, no refname for the 2nd rewrite (builtin protocol)

expecting success of 5411.147 'proc-receive: check remote-tracking #2 (builtin protocol)': 
	git -C workbench show-ref |
		grep -v -e refs/remotes -e refs/heads -e refs/tags >out &&
	make_user_friendly_and_stable_output <out >actual &&
	cat >expect <<-EOF &&
	<COMMIT-A> refs/t/changes/24/124/1
	<COMMIT-A> refs/t/changes/25/125/1
	<COMMIT-B> refs/t/for/main/topic
	EOF
	test_cmp expect actual &&
	git -C workbench update-ref -d refs/t/for/main/topic &&
	git -C workbench update-ref -d refs/t/changes/24/124/1 &&
	git -C workbench update-ref -d refs/t/changes/25/125/1

ok 147 - proc-receive: check remote-tracking #2 (builtin protocol)

expecting success of 5411.148 'setup proc-receive hook (multiple rewrites for one ref, builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/23/123/1" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/2" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 148 - setup proc-receive hook (multiple rewrites for one ref, builtin protocol)

expecting success of 5411.149 'proc-receive: multiple rewrites for one ref (builtin protocol)': 
	git -C workbench push origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/23/123/1        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/2        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2        Z
	> To <URL/of/upstream.git>
	>  * [new reference]   HEAD -> refs/changes/23/123/1
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/changes/24/124/2
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 149 - proc-receive: multiple rewrites for one ref (builtin protocol)

expecting success of 5411.150 'proc-receive: check remote-tracking #3 (builtin protocol)': 
	git -C workbench show-ref |
		grep -v -e refs/remotes -e refs/heads -e refs/tags >out &&
	make_user_friendly_and_stable_output <out >actual &&
	cat >expect <<-EOF &&
	<COMMIT-A> refs/t/changes/23/123/1
	<COMMIT-B> refs/t/changes/24/124/2
	EOF
	test_cmp expect actual &&
	git -C workbench update-ref -d refs/t/changes/24/124/1 &&
	git -C workbench update-ref -d refs/t/changes/25/125/2

ok 150 - proc-receive: check remote-tracking #3 (builtin protocol)

expecting success of 5411.151 'setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/1" \
		-r "option old-oid $ZERO_OID" \
		-r "option new-oid $A" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/25/125/1" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 151 - setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, builtin protocol/porcelain)

expecting success of 5411.152 'proc-receive: multiple rewrite for one ref, no refname for the 1st rewrite (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/1        Z
	> remote: proc-receive> option old-oid <ZERO-OID>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/25/125/1        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1        Z
	> To <URL/of/upstream.git>
	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
	> *	HEAD:refs/changes/24/124/1	[new reference]
	>  	HEAD:refs/changes/25/125/1	<COMMIT-A>..<COMMIT-B>
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 152 - proc-receive: multiple rewrite for one ref, no refname for the 1st rewrite (builtin protocol/porcelain)

expecting success of 5411.153 'setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/1" \
		-r "option old-oid $ZERO_OID" \
		-r "option new-oid $A" \
		-r "ok refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/25/125/1" \
		-r "option old-oid $B" \
		-r "option new-oid $A" \
		-r "option forced-update"
	EOF

ok 153 - setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, builtin protocol/porcelain)

expecting success of 5411.154 'proc-receive: multiple rewrites for one ref, no refname for the 2nd rewrite (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/1        Z
	> remote: proc-receive> option old-oid <ZERO-OID>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/25/125/1        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/changes/24/124/1	[new reference]
	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
	> +	HEAD:refs/changes/25/125/1	<COMMIT-B>...<COMMIT-A> (forced update)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 154 - proc-receive: multiple rewrites for one ref, no refname for the 2nd rewrite (builtin protocol/porcelain)

expecting success of 5411.155 'setup proc-receive hook (multiple rewrites for one ref, builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/23/123/1" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/changes/24/124/2" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 155 - setup proc-receive hook (multiple rewrites for one ref, builtin protocol/porcelain)

expecting success of 5411.156 'proc-receive: multiple rewrites for one ref (builtin protocol/porcelain)': 
	git -C workbench push --porcelain origin \
		HEAD:refs/for/main/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/23/123/1        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/changes/24/124/2        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2        Z
	> To <URL/of/upstream.git>
	> *	HEAD:refs/changes/23/123/1	[new reference]
	>  	HEAD:refs/changes/24/124/2	<COMMIT-A>..<COMMIT-B>
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 156 - proc-receive: multiple rewrites for one ref (builtin protocol/porcelain)

expecting success of 5411.157 'setup proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/next/topic2" \
		-r "ng refs/for/next/topic1 fail to call Web API" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 157 - setup proc-receive hook (builtin protocol)

expecting success of 5411.158 'proc-receive: report update of mixed refs (builtin protocol)': 
	test_must_fail git -C workbench push origin \
		$B:refs/heads/main \
		HEAD:refs/heads/bar \
		HEAD:refs/heads/baz \
		HEAD:refs/for/next/topic2 \
		HEAD:refs/for/next/topic1 \
		HEAD:refs/heads/foo \
		HEAD:refs/for/main/topic \
		HEAD:refs/for/next/topic3 \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
	> remote: proc-receive> ok refs/for/next/topic2        Z
	> remote: proc-receive> ng refs/for/next/topic1 fail to call Web API        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
	>  * [new branch]      HEAD -> bar
	>  * [new branch]      HEAD -> baz
	>  * [new reference]   HEAD -> refs/for/next/topic2
	>  * [new branch]      HEAD -> foo
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
	>  ! [remote rejected] HEAD -> refs/for/next/topic1 (fail to call Web API)
	>  ! [remote rejected] HEAD -> refs/for/next/topic3 (proc-receive failed to report status)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/bar
	<COMMIT-A> refs/heads/baz
	<COMMIT-A> refs/heads/foo
	<COMMIT-B> refs/heads/main
	EOF

ok 158 - proc-receive: report update of mixed refs (builtin protocol)

expecting success of 5411.159 'cleanup (builtin protocol)': 
	(
		cd "$upstream" &&
		git update-ref refs/heads/main $A &&
		git update-ref -d refs/heads/foo &&
		git update-ref -d refs/heads/bar &&
		git update-ref -d refs/heads/baz
	)

ok 159 - cleanup (builtin protocol)

expecting success of 5411.160 'setup proc-receive hook (builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/for/next/topic2" \
		-r "ng refs/for/next/topic1 fail to call Web API" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/for/main/topic" \
		-r "option old-oid $A" \
		-r "option new-oid $B"
	EOF

ok 160 - setup proc-receive hook (builtin protocol/porcelain)

expecting success of 5411.161 'proc-receive: report update of mixed refs (builtin protocol/porcelain)': 
	test_must_fail git -C workbench push --porcelain origin \
		$B:refs/heads/main \
		HEAD:refs/heads/bar \
		HEAD:refs/heads/baz \
		HEAD:refs/for/next/topic2 \
		HEAD:refs/for/next/topic1 \
		HEAD:refs/heads/foo \
		HEAD:refs/for/main/topic \
		HEAD:refs/for/next/topic3 \
		>out-$test_count 2>&1 &&
	make_user_friendly_and_stable_output <out-$test_count >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
	> remote: proc-receive> ok refs/for/next/topic2        Z
	> remote: proc-receive> ng refs/for/next/topic1 fail to call Web API        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/for/main/topic        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
	> To <URL/of/upstream.git>
	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
	> *	HEAD:refs/heads/bar	[new branch]
	> *	HEAD:refs/heads/baz	[new branch]
	> *	HEAD:refs/for/next/topic2	[new reference]
	> *	HEAD:refs/heads/foo	[new branch]
	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
	> !	HEAD:refs/for/next/topic1	[remote rejected] (fail to call Web API)
	> !	HEAD:refs/for/next/topic3	[remote rejected] (proc-receive failed to report status)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/bar
	<COMMIT-A> refs/heads/baz
	<COMMIT-A> refs/heads/foo
	<COMMIT-B> refs/heads/main
	EOF

ok 161 - proc-receive: report update of mixed refs (builtin protocol/porcelain)

expecting success of 5411.162 'cleanup (builtin protocol/porcelain)': 
	(
		cd "$upstream" &&
		git update-ref refs/heads/main $A &&
		git update-ref -d refs/heads/foo &&
		git update-ref -d refs/heads/bar &&
		git update-ref -d refs/heads/baz
	)


ok 162 - cleanup (builtin protocol/porcelain)

expecting success of 5411.163 'config receive.procReceiveRefs = refs (builtin protocol)': 
	git -C "$upstream" config --unset-all receive.procReceiveRefs &&
	git -C "$upstream" config --add receive.procReceiveRefs refs

ok 163 - config receive.procReceiveRefs = refs (builtin protocol)

expecting success of 5411.164 'setup upstream branches (builtin protocol)': 
	(
		cd "$upstream" &&
		git update-ref refs/heads/main $B &&
		git update-ref refs/heads/foo $A &&
		git update-ref refs/heads/bar $A &&
		git update-ref refs/heads/baz $A
	)


ok 164 - setup upstream branches (builtin protocol)

expecting success of 5411.165 'setup proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main" \
		-r "option fall-through" \
		-r "ok refs/heads/foo" \
		-r "option fall-through" \
		-r "ok refs/heads/bar" \
		-r "option fall-through" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/next/topic" \
		-r "option refname refs/pull/124/head" \
		-r "option old-oid $B" \
		-r "option new-oid $A" \
		-r "option forced-update"
	EOF

ok 165 - setup proc-receive hook (builtin protocol)

expecting success of 5411.166 'proc-receive: process all refs (builtin protocol)': 
	git -C workbench push -f origin \
		HEAD:refs/heads/main \
		:refs/heads/foo \
		$B:refs/heads/bar \
		HEAD:refs/for/main/topic \
		HEAD:refs/for/next/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/heads/foo        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/heads/bar        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/next/topic        Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> bar
	>  - [deleted]         foo
	>  + <COMMIT-B>...<COMMIT-A> HEAD -> main (forced update)
	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/pull/123/head
	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/pull/124/head (forced update)
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/bar
	<COMMIT-A> refs/heads/baz
	<COMMIT-A> refs/heads/main
	EOF

ok 166 - proc-receive: process all refs (builtin protocol)

expecting success of 5411.167 'cleanup (builtin protocol)': 
	(
		cd "$upstream" &&
		git update-ref -d refs/heads/bar &&
		git update-ref -d refs/heads/baz
	)

ok 167 - cleanup (builtin protocol)

expecting success of 5411.168 'config receive.procReceiveRefs = refs (builtin protocol/porcelain)': 
	git -C "$upstream" config --unset-all receive.procReceiveRefs &&
	git -C "$upstream" config --add receive.procReceiveRefs refs

ok 168 - config receive.procReceiveRefs = refs (builtin protocol/porcelain)

expecting success of 5411.169 'setup upstream branches (builtin protocol/porcelain)': 
	(
		cd "$upstream" &&
		git update-ref refs/heads/main $B &&
		git update-ref refs/heads/foo $A &&
		git update-ref refs/heads/bar $A &&
		git update-ref refs/heads/baz $A
	)


ok 169 - setup upstream branches (builtin protocol/porcelain)

expecting success of 5411.170 'setup proc-receive hook (builtin protocol/porcelain)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main" \
		-r "option fall-through" \
		-r "ok refs/heads/foo" \
		-r "option fall-through" \
		-r "ok refs/heads/bar" \
		-r "option fall-through" \
		-r "ok refs/for/main/topic" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/for/next/topic" \
		-r "option refname refs/pull/124/head" \
		-r "option old-oid $B" \
		-r "option new-oid $A" \
		-r "option forced-update"
	EOF

ok 170 - setup proc-receive hook (builtin protocol/porcelain)

expecting success of 5411.171 'proc-receive: process all refs (builtin protocol/porcelain)': 
	git -C workbench push --porcelain -f origin \
		HEAD:refs/heads/main \
		:refs/heads/foo \
		$B:refs/heads/bar \
		HEAD:refs/for/main/topic \
		HEAD:refs/for/next/topic \
		>out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/heads/foo        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/heads/bar        Z
	> remote: proc-receive> option fall-through        Z
	> remote: proc-receive> ok refs/for/main/topic        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/for/next/topic        Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: proc-receive> option old-oid <COMMIT-B>        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: proc-receive> option forced-update        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
	> -	:refs/heads/foo	[deleted]
	> +	HEAD:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
	>  	HEAD:refs/pull/123/head	<COMMIT-A>..<COMMIT-B>
	> +	HEAD:refs/pull/124/head	<COMMIT-B>...<COMMIT-A> (forced update)
	> Done
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-B> refs/heads/bar
	<COMMIT-A> refs/heads/baz
	<COMMIT-A> refs/heads/main
	EOF

ok 171 - proc-receive: process all refs (builtin protocol/porcelain)

expecting success of 5411.172 'cleanup (builtin protocol/porcelain)': 
	(
		cd "$upstream" &&
		git update-ref -d refs/heads/bar &&
		git update-ref -d refs/heads/baz
	)

ok 172 - cleanup (builtin protocol/porcelain)

expecting success of 5411.173 'config receive.procReceiveRefs with modifiers (builtin protocol)': 
	(
		cd "$upstream" &&
		git config --unset-all receive.procReceiveRefs &&
		git config --add receive.procReceiveRefs m:refs/heads/main &&
		git config --add receive.procReceiveRefs ad:refs/heads &&
		git config --add receive.procReceiveRefs "a!:refs/heads"
	)

ok 173 - config receive.procReceiveRefs with modifiers (builtin protocol)

expecting success of 5411.174 'setup proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $A" \
		-r "option new-oid $B" \
		-r "ok refs/tags/v123 " \
		-r "option refname refs/pull/124/head"
	EOF

ok 174 - setup proc-receive hook (builtin protocol)

expecting success of 5411.175 'proc-receive: update branch and new tag (builtin protocol)': 
	git -C workbench push origin \
		$B:refs/heads/main \
		v123 >out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
	> remote: proc-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <COMMIT-B>        Z
	> remote: proc-receive> ok refs/tags/v123         Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> refs/pull/123/head
	>  * [new reference]   v123 -> refs/pull/124/head
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	EOF

ok 175 - proc-receive: update branch and new tag (builtin protocol)

expecting success of 5411.176 'setup upstream: create tags/v123 (builtin protocol)': 
	git -C "$upstream" update-ref refs/heads/topic $A &&
	git -C "$upstream" update-ref refs/tags/v123 $TAG &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-A> refs/heads/topic
	<TAG-v123> refs/tags/v123
	EOF

ok 176 - setup upstream: create tags/v123 (builtin protocol)

expecting success of 5411.177 'setup proc-receive hook (builtin protocol)': 
	test_hook -C "$upstream" --clobber proc-receive <<-EOF
	printf >&2 "# proc-receive hook\n"
	test-tool proc-receive -v \
		-r "ok refs/heads/main" \
		-r "option refname refs/pull/123/head" \
		-r "option old-oid $A" \
		-r "option new-oid $ZERO_OID" \
		-r "ok refs/heads/next" \
		-r "option refname refs/pull/124/head" \
		-r "option new-oid $A"
	EOF

ok 177 - setup proc-receive hook (builtin protocol)

expecting success of 5411.178 'proc-receive: create/delete branch, and delete tag (builtin protocol)': 
	git -C workbench push origin \
		:refs/heads/main \
		$B:refs/heads/topic \
		$A:refs/heads/next \
		:refs/tags/v123 >out 2>&1 &&
	make_user_friendly_and_stable_output <out >actual &&
	format_and_save_expect <<-EOF &&
	> remote: # pre-receive hook        Z
	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/main        Z
	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic        Z
	> remote: pre-receive< <TAG-v123> <ZERO-OID> refs/tags/v123        Z
	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: # proc-receive hook        Z
	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/main        Z
	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
	> remote: proc-receive> ok refs/heads/main        Z
	> remote: proc-receive> option refname refs/pull/123/head        Z
	> remote: proc-receive> option old-oid <COMMIT-A>        Z
	> remote: proc-receive> option new-oid <ZERO-OID>        Z
	> remote: proc-receive> ok refs/heads/next        Z
	> remote: proc-receive> option refname refs/pull/124/head        Z
	> remote: proc-receive> option new-oid <COMMIT-A>        Z
	> remote: # post-receive hook        Z
	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/pull/123/head        Z
	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic        Z
	> remote: post-receive< <TAG-v123> <ZERO-OID> refs/tags/v123        Z
	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/124/head        Z
	> To <URL/of/upstream.git>
	>  - [deleted]         refs/pull/123/head
	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> topic
	>  - [deleted]         v123
	>  * [new reference]   <COMMIT-A> -> refs/pull/124/head
	EOF
	test_cmp expect actual &&

	test_cmp_refs -C "$upstream" <<-EOF
	<COMMIT-A> refs/heads/main
	<COMMIT-B> refs/heads/topic
	EOF

ok 178 - proc-receive: create/delete branch, and delete tag (builtin protocol)

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 178 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..178
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5509-fetch-push-namespaces.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/.git/
expecting success of 5509.1 'setup': 
	git config --global protocol.ext.allow user &&
	test_tick &&
	git init original &&
	(
		cd original &&
		echo 0 >count &&
		git add count &&
		test_commit 0 &&
		echo 1 >count &&
		git add count &&
		test_commit 1 &&
		git remote add pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&
		git remote add pushee-unnamespaced ../pushee
	) &&
	commit0=$(cd original && git rev-parse HEAD^) &&
	commit1=$(cd original && git rev-parse HEAD) &&
	git init --bare pushee &&
	git init puller

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/original/.git/
[main (root-commit) fbdf431] 0
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 0.t
 create mode 100644 count
[main dc65a2e] 1
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/pushee/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/puller/.git/
ok 1 - setup

expecting success of 5509.2 'pushing into a repository using a ref namespace': 
	(
		cd original &&
		git push pushee-namespaced main &&
		git ls-remote pushee-namespaced >actual &&
		printf "$commit1\trefs/heads/main\n" >expected &&
		test_cmp expected actual &&
		git push pushee-namespaced --tags &&
		git ls-remote pushee-namespaced >actual &&
		printf "$commit0\trefs/tags/0\n" >>expected &&
		printf "$commit1\trefs/tags/1\n" >>expected &&
		test_cmp expected actual &&
		# Verify that the GIT_NAMESPACE environment variable works as well
		GIT_NAMESPACE=namespace git ls-remote "ext::git %s ../pushee" >actual &&
		test_cmp expected actual &&
		# Verify that --namespace overrides GIT_NAMESPACE
		GIT_NAMESPACE=garbage git ls-remote pushee-namespaced >actual &&
		test_cmp expected actual &&
		# Try a namespace with no content
		git ls-remote "ext::git --namespace=garbage %s ../pushee" >actual &&
		test_must_be_empty actual &&
		git ls-remote pushee-unnamespaced >actual &&
		sed -e "s|refs/|refs/namespaces/namespace/refs/|" expected >expected.unnamespaced &&
		test_cmp expected.unnamespaced actual
	)

To ext::git --namespace=namespace %s ../pushee
 * [new branch]      main -> main
To ext::git --namespace=namespace %s ../pushee
 * [new tag]         0 -> 0
 * [new tag]         1 -> 1
ok 2 - pushing into a repository using a ref namespace

expecting success of 5509.3 'pulling from a repository using a ref namespace': 
	(
		cd puller &&
		git remote add -f pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&
		git for-each-ref refs/ >actual &&
		printf "$commit1 commit\trefs/remotes/pushee-namespaced/main\n" >expected &&
		printf "$commit0 commit\trefs/tags/0\n" >>expected &&
		printf "$commit1 commit\trefs/tags/1\n" >>expected &&
		test_cmp expected actual
	)

Updating pushee-namespaced
From ext::git --namespace=namespace %s ../pushee
 * [new branch]      main       -> pushee-namespaced/main
 * [new tag]         1          -> 1
 * [new tag]         0          -> 0
Bad commandok 3 - pulling from a repository using a ref namespace

expecting success of 5509.4 'mirroring a repository using a ref namespace': 
	git clone --mirror pushee mirror &&
	(
		cd mirror &&
		git for-each-ref refs/ >actual &&
		printf "$commit1 commit\trefs/namespaces/namespace/refs/heads/main\n" >expected &&
		printf "$commit0 commit\trefs/namespaces/namespace/refs/tags/0\n" >>expected &&
		printf "$commit1 commit\trefs/namespaces/namespace/refs/tags/1\n" >>expected &&
		test_cmp expected actual
	)

Cloning into bare repository 'mirror'...
done.
ok 4 - mirroring a repository using a ref namespace

expecting success of 5509.5 'hide namespaced refs with transfer.hideRefs': 
	GIT_NAMESPACE=namespace \
		git -C pushee -c transfer.hideRefs=refs/tags \
		ls-remote "ext::git %s ." >actual &&
	printf "$commit1\trefs/heads/main\n" >expected &&
	test_cmp expected actual

ok 5 - hide namespaced refs with transfer.hideRefs

expecting success of 5509.6 'check that transfer.hideRefs does not match unstripped refs': 
	GIT_NAMESPACE=namespace \
		git -C pushee -c transfer.hideRefs=refs/namespaces/namespace/refs/tags \
		ls-remote "ext::git %s ." >actual &&
	printf "$commit1\trefs/heads/main\n" >expected &&
	printf "$commit0\trefs/tags/0\n" >>expected &&
	printf "$commit1\trefs/tags/1\n" >>expected &&
	test_cmp expected actual

ok 6 - check that transfer.hideRefs does not match unstripped refs

expecting success of 5509.7 'hide full refs with transfer.hideRefs': 
	GIT_NAMESPACE=namespace \
		git -C pushee -c transfer.hideRefs="^refs/namespaces/namespace/refs/tags" \
		ls-remote "ext::git %s ." >actual &&
	printf "$commit1\trefs/heads/main\n" >expected &&
	test_cmp expected actual

ok 7 - hide full refs with transfer.hideRefs

expecting success of 5509.8 'try to update a hidden ref': 
	test_config -C pushee transfer.hideRefs refs/heads/main &&
	test_must_fail git -C original push pushee-namespaced main

To ext::git --namespace=namespace %s ../pushee
 ! [remote rejected] main -> main (deny updating a hidden ref)
error: failed to push some refs to 'ext::git --namespace=namespace %s ../pushee'
ok 8 - try to update a hidden ref

expecting success of 5509.9 'try to update a ref that is not hidden': 
	test_config -C pushee transfer.hideRefs refs/namespaces/namespace/refs/heads/main &&
	git -C original push pushee-namespaced main

Everything up-to-date
ok 9 - try to update a ref that is not hidden

expecting success of 5509.10 'try to update a hidden full ref': 
	test_config -C pushee transfer.hideRefs "^refs/namespaces/namespace/refs/heads/main" &&
	test_must_fail git -C original push pushee-namespaced main

To ext::git --namespace=namespace %s ../pushee
 ! [remote rejected] main -> main (deny updating a hidden ref)
error: failed to push some refs to 'ext::git --namespace=namespace %s ../pushee'
ok 10 - try to update a hidden full ref

expecting success of 5509.11 'set up ambiguous HEAD': 
	git init ambiguous &&
	(
		cd ambiguous &&
		git commit --allow-empty -m foo &&
		git update-ref refs/namespaces/ns/refs/heads/one HEAD &&
		git update-ref refs/namespaces/ns/refs/heads/two HEAD &&
		git symbolic-ref refs/namespaces/ns/HEAD \
			refs/namespaces/ns/refs/heads/two
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/ambiguous/.git/
[main (root-commit) cbc461b] foo
 Author: A U Thor <author@example.com>
ok 11 - set up ambiguous HEAD

expecting success of 5509.12 'clone chooses correct HEAD (v0)': 
	GIT_NAMESPACE=ns git -c protocol.version=0 \
		clone ambiguous ambiguous-v0 &&
	echo refs/heads/two >expect &&
	git -C ambiguous-v0 symbolic-ref HEAD >actual &&
	test_cmp expect actual

Cloning into 'ambiguous-v0'...
done.
ok 12 - clone chooses correct HEAD (v0)

expecting success of 5509.13 'clone chooses correct HEAD (v2)': 
	GIT_NAMESPACE=ns git -c protocol.version=2 \
		clone ambiguous ambiguous-v2 &&
	echo refs/heads/two >expect &&
	git -C ambiguous-v2 symbolic-ref HEAD >actual &&
	test_cmp expect actual

Cloning into 'ambiguous-v2'...
done.
ok 13 - clone chooses correct HEAD (v2)

expecting success of 5509.14 'denyCurrentBranch and unborn branch with ref namespace': 
	(
		cd original &&
		git init unborn &&
		git remote add unborn-namespaced "ext::git --namespace=namespace %s unborn" &&
		test_must_fail git push unborn-namespaced HEAD:main &&
		git -C unborn config receive.denyCurrentBranch updateInstead &&
		git push unborn-namespaced HEAD:main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5509-fetch-push-namespaces/original/unborn/.git/
remote: error: refusing to update checked out branch: refs/heads/main        
remote: error: By default, updating the current branch in a non-bare repository        
remote: is denied, because it will make the index and work tree inconsistent        
remote: with what you pushed, and will require 'git reset --hard' to match        
remote: the work tree to HEAD.        
remote: 
remote: You can set the 'receive.denyCurrentBranch' configuration variable        
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into        
remote: its current branch; however, this is not recommended unless you        
remote: arranged to update its work tree to match what you pushed in some        
remote: other way.        
remote: 
remote: To squelch this message and still keep the default behaviour, set        
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.        
To ext::git --namespace=namespace %s unborn
 ! [remote rejected] HEAD -> main (branch is currently checked out)
error: failed to push some refs to 'ext::git --namespace=namespace %s unborn'
To ext::git --namespace=namespace %s unborn
 * [new branch]      HEAD -> main
ok 14 - denyCurrentBranch and unborn branch with ref namespace

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5511-refspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5511-refspec/.git/
expecting success of 5511.1 'push  (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec ''
ok 1 - push  (invalid)

expecting success of 5511.2 'push :': git ls-remote frotz
ok 2 - push :

expecting success of 5511.3 'push :: (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec '::'
ok 3 - push :: (invalid)

expecting success of 5511.4 'push +:': git ls-remote frotz
ok 4 - push +:

expecting success of 5511.5 'fetch ': git ls-remote frotz
ok 5 - fetch 

expecting success of 5511.6 'fetch :': git ls-remote frotz
ok 6 - fetch :

expecting success of 5511.7 'fetch :: (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec '::'
ok 7 - fetch :: (invalid)

expecting success of 5511.8 'push refs/heads/*:refs/remotes/frotz/*': git ls-remote frotz
ok 8 - push refs/heads/*:refs/remotes/frotz/*

expecting success of 5511.9 'push refs/heads/*:refs/remotes/frotz (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*:refs/remotes/frotz'
ok 9 - push refs/heads/*:refs/remotes/frotz (invalid)

expecting success of 5511.10 'push refs/heads:refs/remotes/frotz/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads:refs/remotes/frotz/*'
ok 10 - push refs/heads:refs/remotes/frotz/* (invalid)

expecting success of 5511.11 'push refs/heads/main:refs/remotes/frotz/xyzzy': git ls-remote frotz
ok 11 - push refs/heads/main:refs/remotes/frotz/xyzzy

expecting success of 5511.12 'fetch refs/heads/*:refs/remotes/frotz/*': git ls-remote frotz
ok 12 - fetch refs/heads/*:refs/remotes/frotz/*

expecting success of 5511.13 'fetch refs/heads/*:refs/remotes/frotz (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*:refs/remotes/frotz'
ok 13 - fetch refs/heads/*:refs/remotes/frotz (invalid)

expecting success of 5511.14 'fetch refs/heads:refs/remotes/frotz/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads:refs/remotes/frotz/*'
ok 14 - fetch refs/heads:refs/remotes/frotz/* (invalid)

expecting success of 5511.15 'fetch refs/heads/main:refs/remotes/frotz/xyzzy': git ls-remote frotz
ok 15 - fetch refs/heads/main:refs/remotes/frotz/xyzzy

expecting success of 5511.16 'fetch refs/heads/main::refs/remotes/frotz/xyzzy (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/main::refs/remotes/frotz/xyzzy'
ok 16 - fetch refs/heads/main::refs/remotes/frotz/xyzzy (invalid)

expecting success of 5511.17 'fetch refs/heads/maste :refs/remotes/frotz/xyzzy (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/maste :refs/remotes/frotz/xyzzy'
ok 17 - fetch refs/heads/maste :refs/remotes/frotz/xyzzy (invalid)

expecting success of 5511.18 'push main~1:refs/remotes/frotz/backup': git ls-remote frotz
ok 18 - push main~1:refs/remotes/frotz/backup

expecting success of 5511.19 'fetch main~1:refs/remotes/frotz/backup (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'main~1:refs/remotes/frotz/backup'
ok 19 - fetch main~1:refs/remotes/frotz/backup (invalid)

expecting success of 5511.20 'push HEAD~4:refs/remotes/frotz/new': git ls-remote frotz
ok 20 - push HEAD~4:refs/remotes/frotz/new

expecting success of 5511.21 'fetch HEAD~4:refs/remotes/frotz/new (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'HEAD~4:refs/remotes/frotz/new'
ok 21 - fetch HEAD~4:refs/remotes/frotz/new (invalid)

expecting success of 5511.22 'push HEAD': git ls-remote frotz
ok 22 - push HEAD

expecting success of 5511.23 'fetch HEAD': git ls-remote frotz
ok 23 - fetch HEAD

expecting success of 5511.24 'push @': git ls-remote frotz
ok 24 - push @

expecting success of 5511.25 'fetch @': git ls-remote frotz
ok 25 - fetch @

expecting success of 5511.26 'push refs/heads/ nitfol (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/ nitfol'
ok 26 - push refs/heads/ nitfol (invalid)

expecting success of 5511.27 'fetch refs/heads/ nitfol (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/ nitfol'
ok 27 - fetch refs/heads/ nitfol (invalid)

expecting success of 5511.28 'push HEAD: (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'HEAD:'
ok 28 - push HEAD: (invalid)

expecting success of 5511.29 'fetch HEAD:': git ls-remote frotz
ok 29 - fetch HEAD:

expecting success of 5511.30 'push refs/heads/ nitfol: (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/ nitfol:'
ok 30 - push refs/heads/ nitfol: (invalid)

expecting success of 5511.31 'fetch refs/heads/ nitfol: (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/ nitfol:'
ok 31 - fetch refs/heads/ nitfol: (invalid)

expecting success of 5511.32 'push :refs/remotes/frotz/deleteme': git ls-remote frotz
ok 32 - push :refs/remotes/frotz/deleteme

expecting success of 5511.33 'fetch :refs/remotes/frotz/HEAD-to-me': git ls-remote frotz
ok 33 - fetch :refs/remotes/frotz/HEAD-to-me

expecting success of 5511.34 'push :refs/remotes/frotz/delete me (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec ':refs/remotes/frotz/delete me'
ok 34 - push :refs/remotes/frotz/delete me (invalid)

expecting success of 5511.35 'fetch :refs/remotes/frotz/HEAD to me (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec ':refs/remotes/frotz/HEAD to me'
ok 35 - fetch :refs/remotes/frotz/HEAD to me (invalid)

expecting success of 5511.36 'fetch refs/heads/*/for-linus:refs/remotes/mine/*-blah': git ls-remote frotz
ok 36 - fetch refs/heads/*/for-linus:refs/remotes/mine/*-blah

expecting success of 5511.37 'push refs/heads/*/for-linus:refs/remotes/mine/*-blah': git ls-remote frotz
ok 37 - push refs/heads/*/for-linus:refs/remotes/mine/*-blah

expecting success of 5511.38 'fetch refs/heads*/for-linus:refs/remotes/mine/*': git ls-remote frotz
ok 38 - fetch refs/heads*/for-linus:refs/remotes/mine/*

expecting success of 5511.39 'push refs/heads*/for-linus:refs/remotes/mine/*': git ls-remote frotz
ok 39 - push refs/heads*/for-linus:refs/remotes/mine/*

expecting success of 5511.40 'fetch refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*/*/for-linus:refs/remotes/mine/*'
ok 40 - fetch refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)

expecting success of 5511.41 'push refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*/*/for-linus:refs/remotes/mine/*'
ok 41 - push refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)

expecting success of 5511.42 'fetch refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*g*/for-linus:refs/remotes/mine/*'
ok 42 - fetch refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)

expecting success of 5511.43 'push refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/*g*/for-linus:refs/remotes/mine/*'
ok 43 - push refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)

expecting success of 5511.44 'fetch refs/heads/*/for-linus:refs/remotes/mine/*': git ls-remote frotz
ok 44 - fetch refs/heads/*/for-linus:refs/remotes/mine/*

expecting success of 5511.45 'push refs/heads/*/for-linus:refs/remotes/mine/*': git ls-remote frotz
ok 45 - push refs/heads/*/for-linus:refs/remotes/mine/*

expecting success of 5511.46 'fetch refs/heads/Ä': git ls-remote frotz
ok 46 - fetch refs/heads/Ä

expecting success of 5511.47 'fetch refs/heads/	tab (invalid)': test_must_fail git ls-remote frotz
fatal: invalid refspec 'refs/heads/	tab'
ok 47 - fetch refs/heads/	tab (invalid)

# passed all 47 test(s)
1..47
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5505-remote.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/.git/
expecting success of 5505.1 'setup': 
	setup_repository one &&
	setup_repository two &&
	(
		cd two &&
		git branch another
	) &&
	git clone one test

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/one/.git/
[main (root-commit) 9d34b14] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to a new branch 'side'
[side 2ce9c50] Second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
Switched to branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/two/.git/
[main (root-commit) 9d34b14] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to a new branch 'side'
[side 2ce9c50] Second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
Switched to branch 'main'
Cloning into 'test'...
done.
ok 1 - setup

expecting success of 5505.2 'add remote whose URL agrees with url.<...>.insteadOf': 
	test_config url.git@host.com:team/repo.git.insteadOf myremote &&
	git remote add myremote git@host.com:team/repo.git

ok 2 - add remote whose URL agrees with url.<...>.insteadOf

expecting success of 5505.3 'remote information for the origin': 
	(
		cd test &&
		tokens_match origin "$(git remote)" &&
		check_remote_track origin main side &&
		check_tracking_branch origin HEAD main side
	)

ok 3 - remote information for the origin

expecting success of 5505.4 'add another remote': 
	(
		cd test &&
		git remote add -f second ../two &&
		tokens_match "origin second" "$(git remote)" &&
		check_tracking_branch second main side another &&
		git for-each-ref "--format=%(refname)" refs/remotes |
		sed -e "/^refs\/remotes\/origin\//d" \
		    -e "/^refs\/remotes\/second\//d" >actual &&
		test_must_be_empty actual
	)

Updating second
From ../two
 * [new branch]      another    -> second/another
 * [new branch]      main       -> second/main
 * [new branch]      side       -> second/side
ok 4 - add another remote

expecting success of 5505.5 'setup bare clone for server': 
	git clone --bare "file://$(pwd)/one" srv.bare &&
	git -C srv.bare config --local uploadpack.allowfilter 1 &&
	git -C srv.bare config --local uploadpack.allowanysha1inwant 1

Cloning into bare repository 'srv.bare'...
ok 5 - setup bare clone for server

expecting success of 5505.6 'filters for promisor remotes are listed by git remote -v': 
	test_when_finished "rm -rf pc" &&
	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
	git -C pc remote -v >out &&
	grep "srv.bare (fetch) \[blob:none\]" out &&

	git -C pc config remote.origin.partialCloneFilter object:type=commit &&
	git -C pc remote -v >out &&
	grep "srv.bare (fetch) \[object:type=commit\]" out

Cloning into 'pc'...
origin	file:///<<PKGBUILDDIR>>/t/trash directory.t5505-remote/srv.bare (fetch) [blob:none]
origin	file:///<<PKGBUILDDIR>>/t/trash directory.t5505-remote/srv.bare (fetch) [object:type=commit]
ok 6 - filters for promisor remotes are listed by git remote -v

expecting success of 5505.7 'filters should not be listed for non promisor remotes (remote -v)': 
	test_when_finished "rm -rf pc" &&
	git clone one pc &&
	git -C pc remote -v >out &&
	! grep "(fetch) \[.*\]" out

Cloning into 'pc'...
done.
ok 7 - filters should not be listed for non promisor remotes (remote -v)

expecting success of 5505.8 'filters are listed by git remote -v only': 
	test_when_finished "rm -rf pc" &&
	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
	git -C pc remote >out &&
	! grep "\[blob:none\]" out &&

	git -C pc remote show >out &&
	! grep "\[blob:none\]" out

Cloning into 'pc'...
ok 8 - filters are listed by git remote -v only

expecting success of 5505.9 'check remote-tracking': 
	(
		cd test &&
		check_remote_track origin main side &&
		check_remote_track second main side another
	)

ok 9 - check remote-tracking

expecting success of 5505.10 'remote forces tracking branches': 
	(
		cd test &&
		case $(git config remote.second.fetch) in
		+*) true ;;
		 *) false ;;
		esac
	)

ok 10 - remote forces tracking branches

expecting success of 5505.11 'remove remote': 
	(
		cd test &&
		git symbolic-ref refs/remotes/second/HEAD refs/remotes/second/main &&
		git remote rm second
	)

ok 11 - remove remote

expecting success of 5505.12 'remove remote': 
	(
		cd test &&
		tokens_match origin "$(git remote)" &&
		check_remote_track origin main side &&
		git for-each-ref "--format=%(refname)" refs/remotes |
		sed -e "/^refs\/remotes\/origin\//d" >actual &&
		test_must_be_empty actual
	)

ok 12 - remove remote

expecting success of 5505.13 'remove remote protects local branches': 
	(
		cd test &&
		cat >expect1 <<-\EOF &&
		Note: A branch outside the refs/remotes/ hierarchy was not removed;
		to delete it, use:
		  git branch -d main
		EOF
		cat >expect2 <<-\EOF &&
		Note: Some branches outside the refs/remotes/ hierarchy were not removed;
		to delete them, use:
		  git branch -d foobranch
		  git branch -d main
		EOF
		git tag footag &&
		git config --add remote.oops.fetch "+refs/*:refs/*" &&
		git remote remove oops 2>actual1 &&
		git branch foobranch &&
		git config --add remote.oops.fetch "+refs/*:refs/*" &&
		git remote rm oops 2>actual2 &&
		git branch -d foobranch &&
		git tag -d footag &&
		test_cmp expect1 actual1 &&
		test_cmp expect2 actual2
	)

Deleted branch foobranch (was 9d34b14).
Deleted tag 'footag' (was 9d34b14)
ok 13 - remove remote protects local branches

expecting success of 5505.14 'remove errors out early when deleting non-existent branch': 
	(
		cd test &&
		echo "error: No such remote: 'foo'" >expect &&
		test_expect_code 2 git remote rm foo 2>actual &&
		test_cmp expect actual
	)

ok 14 - remove errors out early when deleting non-existent branch

expecting success of 5505.15 'remove remote with a branch without configured merge': 
	test_when_finished "(
		git -C test checkout main;
		git -C test branch -D two;
		git -C test config --remove-section remote.two;
		git -C test config --remove-section branch.second;
		true
	)" &&
	(
		cd test &&
		git remote add two ../two &&
		git fetch two &&
		git checkout -b second two/main^0 &&
		git config branch.second.remote two &&
		git checkout main &&
		git remote rm two
	)

From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
Switched to a new branch 'second'
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
Already on 'main'
Your branch is up to date with 'origin/main'.
error: branch 'two' not found.
fatal: no such section: remote.two
fatal: no such section: branch.second
ok 15 - remove remote with a branch without configured merge

expecting success of 5505.16 'rename errors out early when deleting non-existent branch': 
	(
		cd test &&
		echo "error: No such remote: 'foo'" >expect &&
		test_expect_code 2 git remote rename foo bar 2>actual &&
		test_cmp expect actual
	)

ok 16 - rename errors out early when deleting non-existent branch

expecting success of 5505.17 'rename errors out early when new name is invalid': 
	test_config remote.foo.vcs bar &&
	echo "fatal: 'invalid...name' is not a valid remote name" >expect &&
	test_must_fail git remote rename foo invalid...name 2>actual &&
	test_cmp expect actual

ok 17 - rename errors out early when new name is invalid

expecting success of 5505.18 'add existing foreign_vcs remote': 
	test_config remote.foo.vcs bar &&
	echo "error: remote foo already exists." >expect &&
	test_expect_code 3 git remote add foo bar 2>actual &&
	test_cmp expect actual

ok 18 - add existing foreign_vcs remote

expecting success of 5505.19 'add existing foreign_vcs remote': 
	test_config remote.foo.vcs bar &&
	test_config remote.bar.vcs bar &&
	echo "error: remote bar already exists." >expect &&
	test_expect_code 3 git remote rename foo bar 2>actual &&
	test_cmp expect actual

ok 19 - add existing foreign_vcs remote

expecting success of 5505.20 'add invalid foreign_vcs remote': 
	echo "fatal: 'invalid...name' is not a valid remote name" >expect &&
	test_must_fail git remote add invalid...name bar 2>actual &&
	test_cmp expect actual

ok 20 - add invalid foreign_vcs remote

expecting success of 5505.21 'without subcommand': 
	echo origin >expect &&
	git -C test remote >actual &&
	test_cmp expect actual

ok 21 - without subcommand

expecting success of 5505.22 'without subcommand accepts -v': 
	cat >expect <<-EOF &&
	origin	$(pwd)/one (fetch)
	origin	$(pwd)/one (push)
	EOF
	git -C test remote -v >actual &&
	test_cmp expect actual

ok 22 - without subcommand accepts -v

expecting success of 5505.23 'without subcommand does not take arguments': 
	test_expect_code 129 git -C test remote origin 2>err &&
	grep "^error: unknown subcommand:" err

error: unknown subcommand: `origin'
ok 23 - without subcommand does not take arguments

expecting success of 5505.24 'show': 
	(
		cd test &&
		git config --add remote.origin.fetch refs/heads/main:refs/heads/upstream &&
		git fetch &&
		git checkout -b ahead origin/main &&
		echo 1 >>file &&
		test_tick &&
		git commit -m update file &&
		git checkout main &&
		git branch --track octopus origin/main &&
		git branch --track rebase origin/main &&
		git branch -d -r origin/main &&
		git config --add remote.two.url ../two &&
		git config --add remote.two.pushurl ../three &&
		git config branch.rebase.rebase true &&
		git config branch.octopus.merge "topic-a topic-b topic-c" &&
		(
			cd ../one &&
			echo 1 >file &&
			test_tick &&
			git commit -m update file
		) &&
		git config --add remote.origin.push : &&
		git config --add remote.origin.push refs/heads/main:refs/heads/upstream &&
		git config --add remote.origin.push +refs/tags/lastbackup &&
		git config --add remote.two.push +refs/heads/ahead:refs/heads/main &&
		git config --add remote.two.push refs/heads/main:refs/heads/another &&
		git remote show origin two >output &&
		git branch -d rebase octopus &&
		test_cmp expect output
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/one
 * [new branch]      main       -> upstream
Switched to a new branch 'ahead'
branch 'ahead' set up to track 'origin/main'.
[ahead 847549e] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
branch 'octopus' set up to track 'origin/main'.
branch 'rebase' set up to track 'origin/main'.
Deleted remote-tracking branch origin/main (was 9d34b14).
[main 6329a3c] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
error: src refspec refs/tags/lastbackup does not match any
Deleted branch rebase (was 9d34b14).
Deleted branch octopus (was 9d34b14).
ok 24 - show

expecting success of 5505.25 'show with negative refspecs': 
	test_when_finished "git -C test config --unset-all --fixed-value remote.origin.fetch ^refs/heads/main" &&
	git -C test config --add remote.origin.fetch ^refs/heads/main &&
	git -C test remote show origin >output &&
	test_cmp expect output

error: src refspec refs/tags/lastbackup does not match any
ok 25 - show with negative refspecs

checking known breakage of 5505.26 'show stale with negative refspecs': 
	test_when_finished "git -C test config --unset-all --fixed-value remote.origin.fetch ^refs/heads/side" &&
	git -C test config --add remote.origin.fetch ^refs/heads/side &&
	git -C test remote show origin >output &&
	test_cmp expect output

error: src refspec refs/tags/lastbackup does not match any
--- expect	2022-12-28 07:50:37.226076689 +0000
+++ output	2022-12-28 07:50:37.301079444 +0000
@@ -4,7 +4,7 @@
   HEAD branch: main
   Remote branches:
     main new (next fetch will store in remotes/origin)
-    side stale (use 'git remote prune' to remove)
+    side skipped
   Local branches configured for 'git pull':
     ahead merges with remote main
     main  merges with remote main
not ok 26 - show stale with negative refspecs # TODO known breakage

expecting success of 5505.27 'show -n': 
	mv one one.unreachable &&
	(
		cd test &&
		git remote show -n origin >output &&
		mv ../one.unreachable ../one &&
		test_cmp expect output
	)

ok 27 - show -n

expecting success of 5505.28 'prune': 
	(
		cd one &&
		git branch -m side side2
	) &&
	(
		cd test &&
		git fetch origin &&
		git remote prune origin &&
		git rev-parse refs/remotes/origin/side2 &&
		test_must_fail git rev-parse refs/remotes/origin/side
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/one
 * [new branch]      main       -> origin/main
 * [new branch]      side2      -> origin/side2
   9d34b14..6329a3c  main       -> upstream
Pruning origin
URL: /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/one
 * [pruned] origin/side
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
fatal: ambiguous argument 'refs/remotes/origin/side': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/side
ok 28 - prune

expecting success of 5505.29 'set-head --delete': 
	(
		cd test &&
		git symbolic-ref refs/remotes/origin/HEAD &&
		git remote set-head --delete origin &&
		test_must_fail git symbolic-ref refs/remotes/origin/HEAD
	)

refs/remotes/origin/main
fatal: ref refs/remotes/origin/HEAD is not a symbolic ref
ok 29 - set-head --delete

expecting success of 5505.30 'set-head --auto': 
	(
		cd test &&
		git remote set-head --auto origin &&
		echo refs/remotes/origin/main >expect &&
		git symbolic-ref refs/remotes/origin/HEAD >output &&
		test_cmp expect output
	)

origin/HEAD set to main
ok 30 - set-head --auto

expecting success of 5505.31 'set-head --auto has no problem w/multiple HEADs': 
	(
		cd test &&
		git fetch two "refs/heads/*:refs/remotes/two/*" &&
		git remote set-head --auto two >output 2>&1 &&
		echo "two/HEAD set to main" >expect &&
		test_cmp expect output
	)

From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
ok 31 - set-head --auto has no problem w/multiple HEADs

expecting success of 5505.32 'set-head explicit': 
	(
		cd test &&
		git remote set-head origin side2 &&
		git symbolic-ref refs/remotes/origin/HEAD >output &&
		git remote set-head origin main &&
		test_cmp expect output
	)

ok 32 - set-head explicit

expecting success of 5505.33 'prune --dry-run': 
	git -C one branch -m side2 side &&
	test_when_finished "git -C one branch -m side side2" &&
	(
		cd test &&
		git remote prune --dry-run origin >output &&
		git rev-parse refs/remotes/origin/side2 &&
		test_must_fail git rev-parse refs/remotes/origin/side &&
		test_cmp expect output
	)

2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
fatal: ambiguous argument 'refs/remotes/origin/side': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/side
ok 33 - prune --dry-run

expecting success of 5505.34 'add --mirror && prune': 
	mkdir mirror &&
	(
		cd mirror &&
		git init --bare &&
		git remote add --mirror -f origin ../one
	) &&
	(
		cd one &&
		git branch -m side2 side
	) &&
	(
		cd mirror &&
		git rev-parse --verify refs/heads/side2 &&
		test_must_fail git rev-parse --verify refs/heads/side &&
		git fetch origin &&
		git remote prune origin &&
		test_must_fail git rev-parse --verify refs/heads/side2 &&
		git rev-parse --verify refs/heads/side
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror/
warning: --mirror is dangerous and deprecated; please
	 use --mirror=fetch or --mirror=push instead
Updating origin
From ../one
 * [new branch]      main       -> main
 * [new branch]      side2      -> side2
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
fatal: Needed a single revision
From ../one
 * [new branch]      side       -> side
Pruning origin
URL: ../one
 * [pruned] refs/heads/side2
fatal: Needed a single revision
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
ok 34 - add --mirror && prune

expecting success of 5505.35 'add --mirror=fetch': 
	mkdir mirror-fetch &&
	git init -b main mirror-fetch/parent &&
	(
		cd mirror-fetch/parent &&
		test_commit one
	) &&
	git init --bare mirror-fetch/child &&
	(
		cd mirror-fetch/child &&
		git remote add --mirror=fetch -f parent ../parent
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-fetch/parent/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-fetch/child/
Updating parent
From ../parent
 * [new branch]      main       -> main
 * [new tag]         one        -> one
ok 35 - add --mirror=fetch

expecting success of 5505.36 'fetch mirrors act as mirrors during fetch': 
	(
		cd mirror-fetch/parent &&
		git branch new &&
		git branch -m main renamed
	) &&
	(
		cd mirror-fetch/child &&
		git fetch parent &&
		git rev-parse --verify refs/heads/new &&
		git rev-parse --verify refs/heads/renamed
	)

From ../parent
 * [new branch]      new        -> new
 * [new branch]      renamed    -> renamed
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
ok 36 - fetch mirrors act as mirrors during fetch

expecting success of 5505.37 'fetch mirrors can prune': 
	(
		cd mirror-fetch/child &&
		git remote prune parent &&
		test_must_fail git rev-parse --verify refs/heads/main
	)

Pruning parent
URL: ../parent
 * [pruned] refs/heads/main
fatal: Needed a single revision
ok 37 - fetch mirrors can prune

expecting success of 5505.38 'fetch mirrors do not act as mirrors during push': 
	(
		cd mirror-fetch/parent &&
		git checkout HEAD^0
	) &&
	(
		cd mirror-fetch/child &&
		git branch -m renamed renamed2 &&
		git push parent :
	) &&
	(
		cd mirror-fetch/parent &&
		git rev-parse --verify renamed &&
		test_must_fail git rev-parse --verify refs/heads/renamed2
	)

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d79ce16 one
Everything up-to-date
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
fatal: Needed a single revision
ok 38 - fetch mirrors do not act as mirrors during push

expecting success of 5505.39 'add fetch mirror with specific branches': 
	git init --bare mirror-fetch/track &&
	(
		cd mirror-fetch/track &&
		git remote add --mirror=fetch -t heads/new parent ../parent
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-fetch/track/
ok 39 - add fetch mirror with specific branches

expecting success of 5505.40 'fetch mirror respects specific branches': 
	(
		cd mirror-fetch/track &&
		git fetch parent &&
		git rev-parse --verify refs/heads/new &&
		test_must_fail git rev-parse --verify refs/heads/renamed
	)

From ../parent
 * [new branch]      new        -> new
 * [new tag]         one        -> one
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
fatal: Needed a single revision
ok 40 - fetch mirror respects specific branches

expecting success of 5505.41 'add --mirror=push': 
	mkdir mirror-push &&
	git init --bare mirror-push/public &&
	git init -b main mirror-push/private &&
	(
		cd mirror-push/private &&
		test_commit one &&
		git remote add --mirror=push public ../public
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-push/public/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-push/private/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 41 - add --mirror=push

expecting success of 5505.42 'push mirrors act as mirrors during push': 
	(
		cd mirror-push/private &&
		git branch new &&
		git branch -m main renamed &&
		git push public
	) &&
	(
		cd mirror-push/private &&
		git rev-parse --verify refs/heads/new &&
		git rev-parse --verify refs/heads/renamed &&
		test_must_fail git rev-parse --verify refs/heads/main
	)

To ../public
 * [new branch]      new -> new
 * [new branch]      renamed -> renamed
 * [new tag]         one -> one
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
fatal: Needed a single revision
ok 42 - push mirrors act as mirrors during push

expecting success of 5505.43 'push mirrors do not act as mirrors during fetch': 
	(
		cd mirror-push/public &&
		git branch -m renamed renamed2 &&
		git symbolic-ref HEAD refs/heads/renamed2
	) &&
	(
		cd mirror-push/private &&
		git fetch public &&
		git rev-parse --verify refs/heads/renamed &&
		test_must_fail git rev-parse --verify refs/heads/renamed2
	)

From ../public
 * branch            HEAD       -> FETCH_HEAD
d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
fatal: Needed a single revision
ok 43 - push mirrors do not act as mirrors during fetch

expecting success of 5505.44 'push mirrors do not allow you to specify refs': 
	git init mirror-push/track &&
	(
		cd mirror-push/track &&
		test_must_fail git remote add --mirror=push -t new public ../public
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/mirror-push/track/.git/
fatal: specifying branches to track makes sense only with fetch mirrors
ok 44 - push mirrors do not allow you to specify refs

expecting success of 5505.45 'add alt && prune': 
	mkdir alttst &&
	(
		cd alttst &&
		git init &&
		git remote add -f origin ../one &&
		git config remote.alt.url ../one &&
		git config remote.alt.fetch "+refs/heads/*:refs/remotes/origin/*"
	) &&
	(
		cd one &&
		git branch -m side side2
	) &&
	(
		cd alttst &&
		git rev-parse --verify refs/remotes/origin/side &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side2 &&
		git fetch alt &&
		git remote prune alt &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side &&
		git rev-parse --verify refs/remotes/origin/side2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/alttst/.git/
Updating origin
From ../one
 * [new branch]      main       -> origin/main
 * [new branch]      side       -> origin/side
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
fatal: Needed a single revision
From ../one
 * [new branch]      side2      -> origin/side2
Pruning alt
URL: ../one
 * [pruned] origin/side
fatal: Needed a single revision
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
ok 45 - add alt && prune

expecting success of 5505.46 'add with reachable tags (default)': 
	(
		cd one &&
		>foobar &&
		git add foobar &&
		git commit -m "Foobar" &&
		git tag -a -m "Foobar tag" foobar-tag &&
		git reset --hard HEAD~1 &&
		git tag -a -m "Some tag" some-tag
	) &&
	mkdir add-tags &&
	(
		cd add-tags &&
		git init &&
		git remote add -f origin ../one &&
		git tag -l some-tag >../test/output &&
		git tag -l foobar-tag >>../test/output &&
		test_must_fail git config remote.origin.tagopt
	) &&
	test_cmp test/expect test/output

[main b456d29] Foobar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foobar
HEAD is now at 6329a3c update
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/add-tags/.git/
Updating origin
From ../one
 * [new branch]      main       -> origin/main
 * [new branch]      side2      -> origin/side2
 * [new tag]         some-tag   -> some-tag
ok 46 - add with reachable tags (default)

expecting success of 5505.47 'add --tags': 
	rm -rf add-tags &&
	(
		mkdir add-tags &&
		cd add-tags &&
		git init &&
		git remote add -f --tags origin ../one &&
		git tag -l some-tag >../test/output &&
		git tag -l foobar-tag >>../test/output &&
		git config remote.origin.tagopt >>../test/output
	) &&
	test_cmp test/expect test/output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/add-tags/.git/
Updating origin
From ../one
 * [new branch]      main       -> origin/main
 * [new branch]      side2      -> origin/side2
 * [new tag]         foobar-tag -> foobar-tag
 * [new tag]         some-tag   -> some-tag
ok 47 - add --tags

expecting success of 5505.48 'add --no-tags': 
	rm -rf add-tags &&
	(
		mkdir add-no-tags &&
		cd add-no-tags &&
		git init &&
		git remote add -f --no-tags origin ../one &&
		grep tagOpt .git/config &&
		git tag -l some-tag >../test/output &&
		git tag -l foobar-tag >../test/output &&
		git config remote.origin.tagopt >>../test/output
	) &&
	(
		cd one &&
		git tag -d some-tag foobar-tag
	) &&
	test_cmp test/expect test/output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/add-no-tags/.git/
Updating origin
From ../one
 * [new branch]      main       -> origin/main
 * [new branch]      side2      -> origin/side2
	tagOpt = --no-tags
Deleted tag 'some-tag' (was 1e22f81)
Deleted tag 'foobar-tag' (was 2517e82)
ok 48 - add --no-tags

expecting success of 5505.49 'reject --no-no-tags': 
	(
		cd add-no-tags &&
		test_must_fail git remote add -f --no-no-tags neworigin ../one
	)

error: unknown option `no-no-tags'
usage: git remote add [<options>] <name> <url>

    -f, --fetch           fetch the remote branches
    --tags                import all tags and associated objects when fetching
                          or do not fetch any tag at all (--no-tags)
    -t, --track <branch>  branch(es) to track
    -m, --master <branch>
                          master branch
    --mirror[=(push|fetch)]
                          set up remote as a mirror to push to or fetch from

ok 49 - reject --no-no-tags

expecting success of 5505.50 'update': 
	(
		cd one &&
		git remote add drosophila ../two &&
		git remote add apis ../mirror &&
		git remote update &&
		git branch -r >output &&
		test_cmp expect output
	)

Fetching drosophila
From ../two
 * [new branch]      another    -> drosophila/another
 * [new branch]      main       -> drosophila/main
 * [new branch]      side       -> drosophila/side
Fetching apis
From ../mirror
 * [new branch]      main       -> apis/main
 * [new branch]      side       -> apis/side
ok 50 - update

expecting success of 5505.51 'update with arguments': 
	(
		cd one &&
		for b in $(git branch -r)
		do
		git branch -r -d $b || exit 1
		done &&
		git remote add manduca ../mirror &&
		git remote add megaloprepus ../mirror &&
		git config remotes.phobaeticus "drosophila megaloprepus" &&
		git config remotes.titanus manduca &&
		git remote update phobaeticus titanus &&
		git branch -r >output &&
		test_cmp expect output
	)

Deleted remote-tracking branch apis/main (was 6329a3c).
Deleted remote-tracking branch apis/side (was 2ce9c50).
Deleted remote-tracking branch drosophila/another (was 9d34b14).
Deleted remote-tracking branch drosophila/main (was 9d34b14).
Deleted remote-tracking branch drosophila/side (was 2ce9c50).
Fetching drosophila
From ../two
 * [new branch]      another    -> drosophila/another
 * [new branch]      main       -> drosophila/main
 * [new branch]      side       -> drosophila/side
Fetching megaloprepus
From ../mirror
 * [new branch]      main       -> megaloprepus/main
 * [new branch]      side       -> megaloprepus/side
Fetching manduca
From ../mirror
 * [new branch]      main       -> manduca/main
 * [new branch]      side       -> manduca/side
ok 51 - update with arguments

expecting success of 5505.52 'update --prune': 
	(
		cd one &&
		git branch -m side2 side3
	) &&
	(
		cd test &&
		git remote update --prune &&
		(
			cd ../one &&
			git branch -m side3 side2
		) &&
		git rev-parse refs/remotes/origin/side3 &&
		test_must_fail git rev-parse refs/remotes/origin/side2
	)

Fetching origin
From /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/one
 - [deleted]         (none)     -> origin/side2
 * [new branch]      side3      -> origin/side3
Fetching two
From ../two
 * branch            HEAD       -> FETCH_HEAD
2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f
fatal: ambiguous argument 'refs/remotes/origin/side2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/side2
ok 52 - update --prune

expecting success of 5505.53 'update default': 
	(
		cd one &&
		for b in $(git branch -r)
		do
		git branch -r -d $b || exit 1
		done &&
		git config remote.drosophila.skipDefaultUpdate true &&
		git remote update default &&
		git branch -r >output &&
		test_cmp expect output
	)

Deleted remote-tracking branch drosophila/another (was 9d34b14).
Deleted remote-tracking branch drosophila/main (was 9d34b14).
Deleted remote-tracking branch drosophila/side (was 2ce9c50).
Deleted remote-tracking branch manduca/main (was 6329a3c).
Deleted remote-tracking branch manduca/side (was 2ce9c50).
Deleted remote-tracking branch megaloprepus/main (was 6329a3c).
Deleted remote-tracking branch megaloprepus/side (was 2ce9c50).
Fetching apis
From ../mirror
 * [new branch]      main       -> apis/main
 * [new branch]      side       -> apis/side
Fetching manduca
From ../mirror
 * [new branch]      main       -> manduca/main
 * [new branch]      side       -> manduca/side
Fetching megaloprepus
From ../mirror
 * [new branch]      main       -> megaloprepus/main
 * [new branch]      side       -> megaloprepus/side
ok 53 - update default

expecting success of 5505.54 'update default (overridden, with funny whitespace)': 
	(
		cd one &&
		for b in $(git branch -r)
		do
		git branch -r -d $b || exit 1
		done &&
		git config remotes.default "$(printf "\t drosophila  \n")" &&
		git remote update default &&
		git branch -r >output &&
		test_cmp expect output
	)

Deleted remote-tracking branch apis/main (was 6329a3c).
Deleted remote-tracking branch apis/side (was 2ce9c50).
Deleted remote-tracking branch manduca/main (was 6329a3c).
Deleted remote-tracking branch manduca/side (was 2ce9c50).
Deleted remote-tracking branch megaloprepus/main (was 6329a3c).
Deleted remote-tracking branch megaloprepus/side (was 2ce9c50).
Fetching drosophila
From ../two
 * [new branch]      another    -> drosophila/another
 * [new branch]      main       -> drosophila/main
 * [new branch]      side       -> drosophila/side
ok 54 - update default (overridden, with funny whitespace)

expecting success of 5505.55 'update (with remotes.default defined)': 
	(
		cd one &&
		for b in $(git branch -r)
		do
		git branch -r -d $b || exit 1
		done &&
		git config remotes.default "drosophila" &&
		git remote update &&
		git branch -r >output &&
		test_cmp expect output
	)

Deleted remote-tracking branch drosophila/another (was 9d34b14).
Deleted remote-tracking branch drosophila/main (was 9d34b14).
Deleted remote-tracking branch drosophila/side (was 2ce9c50).
Fetching drosophila
From ../two
 * [new branch]      another    -> drosophila/another
 * [new branch]      main       -> drosophila/main
 * [new branch]      side       -> drosophila/side
ok 55 - update (with remotes.default defined)

expecting success of 5505.56 '"remote show" does not show symbolic refs': 
	git clone one three &&
	(
		cd three &&
		git remote show origin >output &&
		! grep "^ *HEAD$" < output &&
		! grep -i stale < output
	)

Cloning into 'three'...
done.
ok 56 - "remote show" does not show symbolic refs

expecting success of 5505.57 'reject adding remote with an invalid name': 
	test_must_fail git remote add some:url desired-name

fatal: 'some:url' is not a valid remote name
ok 57 - reject adding remote with an invalid name

expecting success of 5505.58 'rename a remote': 
	test_config_global remote.pushDefault origin &&
	git clone one four &&
	(
		cd four &&
		git config branch.main.pushRemote origin &&
		GIT_TRACE2_EVENT=$(pwd)/trace \
			git remote rename --progress origin upstream &&
		test_region progress "Renaming remote references" trace &&
		grep "pushRemote" .git/config &&
		test -z "$(git for-each-ref refs/remotes/origin)" &&
		test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/main" &&
		test "$(git rev-parse upstream/main)" = "$(git rev-parse main)" &&
		test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" &&
		test "$(git config branch.main.remote)" = "upstream" &&
		test "$(git config branch.main.pushRemote)" = "upstream" &&
		test "$(git config --global remote.pushDefault)" = "origin"
	)

Cloning into 'four'...
done.
Renaming remote references:  25% (1/4)
Renaming remote references:  50% (2/4)
Renaming remote references:  75% (3/4)
Renaming remote references: 100% (4/4)
Renaming remote references: 100% (4/4), done.
warning: The global configuration remote.pushDefault in:
	/<<PKGBUILDDIR>>/t/trash directory.t5505-remote/.gitconfig:2
now names the non-existent remote 'origin'
{"event":"region_enter","sid":"20221228T075047.728740Z-Hc64317c2-P000051e7","thread":"main","time":"2022-12-28T07:50:47.755330Z","file":"progress.c","line":268,"repo":1,"nesting":1,"category":"progress","label":"Renaming remote references"}
{"event":"region_leave","sid":"20221228T075047.728740Z-Hc64317c2-P000051e7","thread":"main","time":"2022-12-28T07:50:47.785567Z","file":"progress.c","line":346,"repo":1,"t_rel":0.030262,"nesting":1,"category":"progress","label":"Renaming remote references"}
	pushRemote = upstream
ok 58 - rename a remote

expecting success of 5505.59 'rename a remote renames repo remote.pushDefault': 
	git clone one four.1 &&
	(
		cd four.1 &&
		git config remote.pushDefault origin &&
		git remote rename origin upstream &&
		grep pushDefault .git/config &&
		test "$(git config --local remote.pushDefault)" = "upstream"
	)

Cloning into 'four.1'...
done.
	pushDefault = upstream
ok 59 - rename a remote renames repo remote.pushDefault

expecting success of 5505.60 'rename a remote renames repo remote.pushDefault but ignores global': 
	test_config_global remote.pushDefault other &&
	git clone one four.2 &&
	(
		cd four.2 &&
		git config remote.pushDefault origin &&
		git remote rename origin upstream &&
		test "$(git config --global remote.pushDefault)" = "other" &&
		test "$(git config --local remote.pushDefault)" = "upstream"
	)

Cloning into 'four.2'...
done.
ok 60 - rename a remote renames repo remote.pushDefault but ignores global

expecting success of 5505.61 'rename a remote renames repo remote.pushDefault but keeps global': 
	test_config_global remote.pushDefault origin &&
	git clone one four.3 &&
	(
		cd four.3 &&
		git config remote.pushDefault origin &&
		git remote rename origin upstream &&
		test "$(git config --global remote.pushDefault)" = "origin" &&
		test "$(git config --local remote.pushDefault)" = "upstream"
	)

Cloning into 'four.3'...
done.
ok 61 - rename a remote renames repo remote.pushDefault but keeps global

expecting success of 5505.62 'rename handles remote without fetch refspec': 
	git clone --bare one no-refspec.git &&
	# confirm assumption that bare clone does not create refspec
	test_expect_code 5 \
		git -C no-refspec.git config --unset-all remote.origin.fetch &&
	git -C no-refspec.git config remote.origin.url >expect &&
	git -C no-refspec.git remote rename origin foo &&
	git -C no-refspec.git config remote.foo.url >actual &&
	test_cmp expect actual

Cloning into bare repository 'no-refspec.git'...
done.
ok 62 - rename handles remote without fetch refspec

expecting success of 5505.63 'rename does not update a non-default fetch refspec': 
	git clone one four.one &&
	(
		cd four.one &&
		git config remote.origin.fetch +refs/heads/*:refs/heads/origin/* &&
		git remote rename origin upstream &&
		test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/heads/origin/*" &&
		git rev-parse -q origin/main
	)

Cloning into 'four.one'...
done.
warning: Not updating non-default fetch refspec
	+refs/heads/*:refs/heads/origin/*
	Please update the configuration manually if necessary.
6329a3ca5268a0b28a1dc29b602e8b72a0bc1b37
ok 63 - rename does not update a non-default fetch refspec

expecting success of 5505.64 'rename a remote with name part of fetch spec': 
	git clone one four.two &&
	(
		cd four.two &&
		git remote rename origin remote &&
		git remote rename remote upstream &&
		test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*"
	)

Cloning into 'four.two'...
done.
ok 64 - rename a remote with name part of fetch spec

expecting success of 5505.65 'rename a remote with name prefix of other remote': 
	git clone one four.three &&
	(
		cd four.three &&
		git remote add o git://example.com/repo.git &&
		git remote rename o upstream &&
		test "$(git rev-parse origin/main)" = "$(git rev-parse main)"
	)

Cloning into 'four.three'...
done.
ok 65 - rename a remote with name prefix of other remote

expecting success of 5505.66 'rename succeeds with existing remote.<target>.prune': 
	git clone one four.four &&
	test_when_finished git config --global --unset remote.upstream.prune &&
	git config --global remote.upstream.prune true &&
	git -C four.four remote rename origin upstream

Cloning into 'four.four'...
done.
ok 66 - rename succeeds with existing remote.<target>.prune

expecting success of 5505.67 'remove a remote': 
	test_config_global remote.pushDefault origin &&
	git clone one four.five &&
	(
		cd four.five &&
		git config branch.main.pushRemote origin &&
		git remote remove origin &&
		test -z "$(git for-each-ref refs/remotes/origin)" &&
		test_must_fail git config branch.main.remote &&
		test_must_fail git config branch.main.pushRemote &&
		test "$(git config --global remote.pushDefault)" = "origin"
	)

Cloning into 'four.five'...
done.
warning: The global configuration remote.pushDefault in:
	/<<PKGBUILDDIR>>/t/trash directory.t5505-remote/.gitconfig:2
now names the non-existent remote 'origin'
ok 67 - remove a remote

expecting success of 5505.68 'remove a remote removes repo remote.pushDefault': 
	git clone one four.five.1 &&
	(
		cd four.five.1 &&
		git config remote.pushDefault origin &&
		git remote remove origin &&
		test_must_fail git config --local remote.pushDefault
	)

Cloning into 'four.five.1'...
done.
ok 68 - remove a remote removes repo remote.pushDefault

expecting success of 5505.69 'remove a remote removes repo remote.pushDefault but ignores global': 
	test_config_global remote.pushDefault other &&
	git clone one four.five.2 &&
	(
		cd four.five.2 &&
		git config remote.pushDefault origin &&
		git remote remove origin &&
		test "$(git config --global remote.pushDefault)" = "other" &&
		test_must_fail git config --local remote.pushDefault
	)

Cloning into 'four.five.2'...
done.
ok 69 - remove a remote removes repo remote.pushDefault but ignores global

expecting success of 5505.70 'remove a remote removes repo remote.pushDefault but keeps global': 
	test_config_global remote.pushDefault origin &&
	git clone one four.five.3 &&
	(
		cd four.five.3 &&
		git config remote.pushDefault origin &&
		git remote remove origin &&
		test "$(git config --global remote.pushDefault)" = "origin" &&
		test_must_fail git config --local remote.pushDefault
	)

Cloning into 'four.five.3'...
done.
ok 70 - remove a remote removes repo remote.pushDefault but keeps global

expecting success of 5505.71 'migrate a remote from named file in $GIT_DIR/remotes': 
	git clone one five &&
	origin_url=$(pwd)/one &&
	(
		cd five &&
		git remote remove origin &&
		mkdir -p .git/remotes &&
		cat ../remotes_origin >.git/remotes/origin &&
		git remote rename origin origin &&
		test_path_is_missing .git/remotes/origin &&
		test "$(git config remote.origin.url)" = "$origin_url" &&
		cat >push_expected <<-\EOF &&
		refs/heads/main:refs/heads/upstream
		refs/heads/next:refs/heads/upstream2
		EOF
		cat >fetch_expected <<-\EOF &&
		refs/heads/main:refs/heads/origin
		refs/heads/next:refs/heads/origin2
		EOF
		git config --get-all remote.origin.push >push_actual &&
		git config --get-all remote.origin.fetch >fetch_actual &&
		test_cmp push_expected push_actual &&
		test_cmp fetch_expected fetch_actual
	)

Cloning into 'five'...
done.
ok 71 - migrate a remote from named file in $GIT_DIR/remotes

expecting success of 5505.72 'migrate a remote from named file in $GIT_DIR/branches': 
	git clone --template= one six &&
	origin_url=$(pwd)/one &&
	(
		cd six &&
		git remote rm origin &&
		mkdir .git/branches &&
		echo "$origin_url#main" >.git/branches/origin &&
		git remote rename origin origin &&
		test_path_is_missing .git/branches/origin &&
		test "$(git config remote.origin.url)" = "$origin_url" &&
		test "$(git config remote.origin.fetch)" = "refs/heads/main:refs/heads/origin" &&
		test "$(git config remote.origin.push)" = "HEAD:refs/heads/main"
	)

Cloning into 'six'...
done.
ok 72 - migrate a remote from named file in $GIT_DIR/branches

expecting success of 5505.73 'migrate a remote from named file in $GIT_DIR/branches (2)': 
	git clone --template= one seven &&
	(
		cd seven &&
		git remote rm origin &&
		mkdir .git/branches &&
		echo "quux#foom" > .git/branches/origin &&
		git remote rename origin origin &&
		test_path_is_missing .git/branches/origin &&
		test "$(git config remote.origin.url)" = "quux" &&
		test "$(git config remote.origin.fetch)" = "refs/heads/foom:refs/heads/origin" &&
		test "$(git config remote.origin.push)" = "HEAD:refs/heads/foom"
	)

Cloning into 'seven'...
done.
ok 73 - migrate a remote from named file in $GIT_DIR/branches (2)

expecting success of 5505.74 'remote prune to cause a dangling symref': 
	git clone one eight &&
	(
		cd one &&
		git checkout side2 &&
		git branch -D main
	) &&
	(
		cd eight &&
		git remote prune origin
	) >err 2>&1 &&
	test_i18ngrep "has become dangling" err &&

	: And the dangling symref will not cause other annoying errors &&
	(
		cd eight &&
		git branch -a
	) 2>err &&
	! grep "points nowhere" err &&
	(
		cd eight &&
		test_must_fail git branch nomore origin
	) 2>err &&
	test_i18ngrep "dangling symref" err

Cloning into 'eight'...
done.
Switched to branch 'side2'
Deleted branch main (was 6329a3c).
 refs/remotes/origin/HEAD has become dangling!
* main
  remotes/origin/side2
warning: ignoring dangling symref refs/remotes/origin/HEAD
ok 74 - remote prune to cause a dangling symref

expecting success of 5505.75 'show empty remote': 
	test_create_repo empty &&
	git clone empty empty-clone &&
	(
		cd empty-clone &&
		git remote show origin
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/empty/.git/
Cloning into 'empty-clone'...
warning: You appear to have cloned an empty repository.
done.
* remote origin
  Fetch URL: /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/empty
  Push  URL: /<<PKGBUILDDIR>>/t/trash directory.t5505-remote/empty
  HEAD branch: (unknown)
  Local branch configured for 'git pull':
    master merges with remote master
ok 75 - show empty remote

expecting success of 5505.76 'remote set-branches requires a remote': 
	test_must_fail git remote set-branches &&
	test_must_fail git remote set-branches --add

error: no remote specified
usage: git remote set-branches <name> <branch>...
   or: git remote set-branches --add <name> <branch>...

    --add                 add branch

error: no remote specified
usage: git remote set-branches <name> <branch>...
   or: git remote set-branches --add <name> <branch>...

    --add                 add branch

ok 76 - remote set-branches requires a remote

expecting success of 5505.77 'remote set-branches': 
	echo "+refs/heads/*:refs/remotes/scratch/*" >expect.initial &&
	sort <<-\EOF >expect.add &&
	+refs/heads/*:refs/remotes/scratch/*
	+refs/heads/other:refs/remotes/scratch/other
	EOF
	sort <<-\EOF >expect.replace &&
	+refs/heads/maint:refs/remotes/scratch/maint
	+refs/heads/main:refs/remotes/scratch/main
	+refs/heads/next:refs/remotes/scratch/next
	EOF
	sort <<-\EOF >expect.add-two &&
	+refs/heads/maint:refs/remotes/scratch/maint
	+refs/heads/main:refs/remotes/scratch/main
	+refs/heads/next:refs/remotes/scratch/next
	+refs/heads/seen:refs/remotes/scratch/seen
	+refs/heads/t/topic:refs/remotes/scratch/t/topic
	EOF
	sort <<-\EOF >expect.setup-ffonly &&
	refs/heads/main:refs/remotes/scratch/main
	+refs/heads/next:refs/remotes/scratch/next
	EOF
	sort <<-\EOF >expect.respect-ffonly &&
	refs/heads/main:refs/remotes/scratch/main
	+refs/heads/next:refs/remotes/scratch/next
	+refs/heads/seen:refs/remotes/scratch/seen
	EOF

	git clone .git/ setbranches &&
	(
		cd setbranches &&
		git remote rename origin scratch &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.initial &&

		git remote set-branches scratch --add other &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.add &&

		git remote set-branches scratch maint main next &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.replace &&

		git remote set-branches --add scratch seen t/topic &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.add-two &&

		git config --unset-all remote.scratch.fetch &&
		git config remote.scratch.fetch \
			refs/heads/main:refs/remotes/scratch/main &&
		git config --add remote.scratch.fetch \
			+refs/heads/next:refs/remotes/scratch/next &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.setup-ffonly &&

		git remote set-branches --add scratch seen &&
		git config --get-all remote.scratch.fetch >config-result &&
		sort <config-result >../actual.respect-ffonly
	) &&
	test_cmp expect.initial actual.initial &&
	test_cmp expect.add actual.add &&
	test_cmp expect.replace actual.replace &&
	test_cmp expect.add-two actual.add-two &&
	test_cmp expect.setup-ffonly actual.setup-ffonly &&
	test_cmp expect.respect-ffonly actual.respect-ffonly

Cloning into 'setbranches'...
warning: You appear to have cloned an empty repository.
done.
ok 77 - remote set-branches

expecting success of 5505.78 'remote set-branches with --mirror': 
	echo "+refs/*:refs/*" >expect.initial &&
	echo "+refs/heads/main:refs/heads/main" >expect.replace &&
	git clone --mirror .git/ setbranches-mirror &&
	(
		cd setbranches-mirror &&
		git remote rename origin scratch &&
		git config --get-all remote.scratch.fetch >../actual.initial &&

		git remote set-branches scratch heads/main &&
		git config --get-all remote.scratch.fetch >../actual.replace
	) &&
	test_cmp expect.initial actual.initial &&
	test_cmp expect.replace actual.replace

Cloning into bare repository 'setbranches-mirror'...
warning: You appear to have cloned an empty repository.
done.
warning: Not updating non-default fetch refspec
	+refs/*:refs/*
	Please update the configuration manually if necessary.
ok 78 - remote set-branches with --mirror

expecting success of 5505.79 'new remote': 
	git remote add someremote foo &&
	echo foo >expect &&
	git config --get-all remote.someremote.url >actual &&
	cmp expect actual

ok 79 - new remote

expecting success of 5505.80 'get-url on new remote': 
	echo foo | get_url_test someremote &&
	echo foo | get_url_test --all someremote &&
	echo foo | get_url_test --push someremote &&
	echo foo | get_url_test --push --all someremote

ok 80 - get-url on new remote

expecting success of 5505.81 'remote set-url with locked config': 
	test_when_finished "rm -f .git/config.lock" &&
	git config --get-all remote.someremote.url >expect &&
	>.git/config.lock &&
	test_must_fail git remote set-url someremote baz &&
	git config --get-all remote.someremote.url >actual &&
	cmp expect actual

error: could not lock config file .git/config: File exists
fatal: could not set 'remote.someremote.url' to 'baz'
ok 81 - remote set-url with locked config

expecting success of 5505.82 'remote set-url bar': 
	git remote set-url someremote bar &&
	echo bar >expect &&
	git config --get-all remote.someremote.url >actual &&
	cmp expect actual

ok 82 - remote set-url bar

expecting success of 5505.83 'remote set-url baz bar': 
	git remote set-url someremote baz bar &&
	echo baz >expect &&
	git config --get-all remote.someremote.url >actual &&
	cmp expect actual

ok 83 - remote set-url baz bar

expecting success of 5505.84 'remote set-url zot bar': 
	test_must_fail git remote set-url someremote zot bar &&
	echo baz >expect &&
	git config --get-all remote.someremote.url >actual &&
	cmp expect actual

fatal: No such URL found: bar
ok 84 - remote set-url zot bar

expecting success of 5505.85 'remote set-url --push zot baz': 
	test_must_fail git remote set-url --push someremote zot baz &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

fatal: No such URL found: baz
ok 85 - remote set-url --push zot baz

expecting success of 5505.86 'remote set-url --push zot': 
	git remote set-url --push someremote zot &&
	echo zot >expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 86 - remote set-url --push zot

expecting success of 5505.87 'get-url with different urls': 
	echo baz | get_url_test someremote &&
	echo baz | get_url_test --all someremote &&
	echo zot | get_url_test --push someremote &&
	echo zot | get_url_test --push --all someremote

ok 87 - get-url with different urls

expecting success of 5505.88 'remote set-url --push qux zot': 
	git remote set-url --push someremote qux zot &&
	echo qux >expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 88 - remote set-url --push qux zot

expecting success of 5505.89 'remote set-url --push foo qu+x': 
	git remote set-url --push someremote foo qu+x &&
	echo foo >expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 89 - remote set-url --push foo qu+x

expecting success of 5505.90 'remote set-url --push --add aaa': 
	git remote set-url --push --add someremote aaa &&
	echo foo >expect &&
	echo aaa >>expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 90 - remote set-url --push --add aaa

expecting success of 5505.91 'get-url on multi push remote': 
	echo foo | get_url_test --push someremote &&
	get_url_test --push --all someremote <<-\EOF
	foo
	aaa
	EOF

ok 91 - get-url on multi push remote

expecting success of 5505.92 'remote set-url --push bar aaa': 
	git remote set-url --push someremote bar aaa &&
	echo foo >expect &&
	echo bar >>expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 92 - remote set-url --push bar aaa

expecting success of 5505.93 'remote set-url --push --delete bar': 
	git remote set-url --push --delete someremote bar &&
	echo foo >expect &&
	echo "YYY" >>expect &&
	echo baz >>expect &&
	git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 93 - remote set-url --push --delete bar

expecting success of 5505.94 'remote set-url --push --delete foo': 
	git remote set-url --push --delete someremote foo &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 94 - remote set-url --push --delete foo

expecting success of 5505.95 'remote set-url --add bbb': 
	git remote set-url --add someremote bbb &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	echo bbb >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 95 - remote set-url --add bbb

expecting success of 5505.96 'get-url on multi fetch remote': 
	echo baz | get_url_test someremote &&
	get_url_test --all someremote <<-\EOF
	baz
	bbb
	EOF

ok 96 - get-url on multi fetch remote

expecting success of 5505.97 'remote set-url --delete .*': 
	test_must_fail git remote set-url --delete someremote .\* &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	echo bbb >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

fatal: Will not delete all non-push URLs
ok 97 - remote set-url --delete .*

expecting success of 5505.98 'remote set-url --delete bbb': 
	git remote set-url --delete someremote bbb &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 98 - remote set-url --delete bbb

expecting success of 5505.99 'remote set-url --delete baz': 
	test_must_fail git remote set-url --delete someremote baz &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

fatal: Will not delete all non-push URLs
ok 99 - remote set-url --delete baz

expecting success of 5505.100 'remote set-url --add ccc': 
	git remote set-url --add someremote ccc &&
	echo "YYY" >expect &&
	echo baz >>expect &&
	echo ccc >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 100 - remote set-url --add ccc

expecting success of 5505.101 'remote set-url --delete baz': 
	git remote set-url --delete someremote baz &&
	echo "YYY" >expect &&
	echo ccc >>expect &&
	test_must_fail git config --get-all remote.someremote.pushurl >actual &&
	echo "YYY" >>actual &&
	git config --get-all remote.someremote.url >>actual &&
	cmp expect actual

ok 101 - remote set-url --delete baz

expecting success of 5505.102 'extra args: setup': 
	# add a dummy origin so that this does not trigger failure
	git remote add origin .

ok 102 - extra args: setup

expecting success of 5505.103 'extra args: add nick url': 
		test_must_fail git remote add nick url bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote add [<options>] <name> <url>
ok 103 - extra args: add nick url

expecting success of 5505.104 'extra args: rename origin newname': 
		test_must_fail git remote rename origin newname bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote rename [--[no-]progress] <old> <new>
ok 104 - extra args: rename origin newname

expecting success of 5505.105 'extra args: remove origin': 
		test_must_fail git remote remove origin bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote remove <name>
ok 105 - extra args: remove origin

expecting success of 5505.106 'extra args: set-head origin main': 
		test_must_fail git remote set-head origin main bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
ok 106 - extra args: set-head origin main

expecting success of 5505.107 'extra args: get-url origin newurl': 
		test_must_fail git remote get-url origin newurl bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote get-url [--push] [--all] <name>
ok 107 - extra args: get-url origin newurl

expecting success of 5505.108 'extra args: set-url origin newurl oldurl': 
		test_must_fail git remote set-url origin newurl oldurl bogus_extra_arg 2>actual &&
		test_i18ngrep '^usage:' actual
	
usage: git remote set-url [--push] <name> <newurl> [<oldurl>]
ok 108 - extra args: set-url origin newurl oldurl

expecting success of 5505.109 'add remote matching the "insteadOf" URL': 
	git config url.xyz@example.com.insteadOf backup &&
	git remote add backup xyz@example.com

ok 109 - add remote matching the "insteadOf" URL

expecting success of 5505.110 'unqualified <dst> refspec DWIM and advice': 
	test_when_finished "(cd test && git tag -d some-tag)" &&
	(
		cd test &&
		git tag -a -m "Some tag" some-tag main &&
		for type in commit tag tree blob
		do
			if test "$type" = "blob"
			then
				oid=$(git rev-parse some-tag:file)
			else
				oid=$(git rev-parse some-tag^{$type})
			fi &&
			test_must_fail git push origin $oid:dst 2>err &&
			test_i18ngrep "error: The destination you" err &&
			test_i18ngrep "hint: Did you mean" err &&
			test_must_fail git -c advice.pushUnqualifiedRefName=false \
				push origin $oid:dst 2>err &&
			test_i18ngrep "error: The destination you" err &&
			test_i18ngrep ! "hint: Did you mean" err ||
			exit 1
		done
	)

error: The destination you provided is not a full refname (i.e.,
hint: Did you mean to create a new branch by pushing to
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
hint: Did you mean to create a new tag by pushing to
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
hint: Did you mean to tag a new tree by pushing to
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
hint: Did you mean to tag a new blob by pushing to
error: The destination you provided is not a full refname (i.e.,
Deleted tag 'some-tag' (was 87c70a4)
ok 110 - unqualified <dst> refspec DWIM and advice

expecting success of 5505.111 'refs/remotes/* <src> refspec and unqualified <dst> DWIM and advice': 
	(
		cd two &&
		git tag -a -m "Some tag" my-tag main &&
		git update-ref refs/trees/my-head-tree HEAD^{tree} &&
		git update-ref refs/blobs/my-file-blob HEAD:file
	) &&
	(
		cd test &&
		git config --add remote.two.fetch "+refs/tags/*:refs/remotes/tags-from-two/*" &&
		git config --add remote.two.fetch "+refs/trees/*:refs/remotes/trees-from-two/*" &&
		git config --add remote.two.fetch "+refs/blobs/*:refs/remotes/blobs-from-two/*" &&
		git fetch --no-tags two &&

		test_must_fail git push origin refs/remotes/two/another:dst 2>err &&
		test_i18ngrep "error: The destination you" err &&

		test_must_fail git push origin refs/remotes/tags-from-two/my-tag:dst-tag 2>err &&
		test_i18ngrep "error: The destination you" err &&

		test_must_fail git push origin refs/remotes/trees-from-two/my-head-tree:dst-tree 2>err &&
		test_i18ngrep "error: The destination you" err &&

		test_must_fail git push origin refs/remotes/blobs-from-two/my-file-blob:dst-blob 2>err &&
		test_i18ngrep "error: The destination you" err
	)

From ../two
 * [new tag]         my-tag                  -> tags-from-two/my-tag
 * [new ref]         refs/trees/my-head-tree -> trees-from-two/my-head-tree
 * [new ref]         refs/blobs/my-file-blob -> blobs-from-two/my-file-blob
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
error: The destination you provided is not a full refname (i.e.,
ok 111 - refs/remotes/* <src> refspec and unqualified <dst> DWIM and advice

# still have 1 known breakage(s)
# passed all remaining 110 test(s)
1..111
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5513-fetch-track.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5513-fetch-track/.git/
expecting success of 5513.1 'setup': 
	>file &&
	git add . &&
	test_tick &&
	git commit -m Initial &&
	git branch b-0 &&
	git branch b1 &&
	git branch b/one &&
	test_create_repo other &&
	(
		cd other &&
		git config remote.origin.url .. &&
		git config remote.origin.fetch "+refs/heads/b/*:refs/remotes/b/*"
	)

[master (root-commit) 9d34b14] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5513-fetch-track/other/.git/
ok 1 - setup

expecting success of 5513.2 'fetch': 
	(
		cd other && git fetch origin &&
		test "$(git for-each-ref --format="%(refname)")" = refs/remotes/b/one
	)

From ..
 * [new branch]      b/one      -> b/one
ok 2 - fetch

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5512-ls-remote.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5512-ls-remote/.git/
expecting success of 5512.1 'dies when no remote found': 
	test_must_fail git ls-remote

fatal: No remote configured to list refs from.
ok 1 - dies when no remote found

expecting success of 5512.2 'setup': 
	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git tag mark &&
	git tag mark1.1 &&
	git tag mark1.2 &&
	git tag mark1.10 &&
	git show-ref --tags -d >expected.tag.raw &&
	sed -e "s/ /	/" expected.tag.raw >expected.tag &&
	generate_references HEAD >expected.all &&
	git show-ref -d	>refs &&
	sed -e "s/ /	/" refs >>expected.all &&

	git remote add self "$(pwd)/.git" &&
	git remote add self2 "."

[main (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 2 - setup

expecting success of 5512.3 'ls-remote --tags .git': 
	git ls-remote --tags .git >actual &&
	test_cmp expected.tag actual

ok 3 - ls-remote --tags .git

expecting success of 5512.4 'ls-remote .git': 
	git ls-remote .git >actual &&
	test_cmp expected.all actual

ok 4 - ls-remote .git

expecting success of 5512.5 'ls-remote --tags self': 
	git ls-remote --tags self >actual &&
	test_cmp expected.tag actual

ok 5 - ls-remote --tags self

expecting success of 5512.6 'ls-remote self': 
	git ls-remote self >actual &&
	test_cmp expected.all actual

ok 6 - ls-remote self

expecting success of 5512.7 'ls-remote --sort="version:refname" --tags self': 
	generate_references \
		refs/tags/mark \
		refs/tags/mark1.1 \
		refs/tags/mark1.2 \
		refs/tags/mark1.10 >expect &&
	git ls-remote --sort="version:refname" --tags self >actual &&
	test_cmp expect actual

ok 7 - ls-remote --sort="version:refname" --tags self

expecting success of 5512.8 'ls-remote --sort="-version:refname" --tags self': 
	generate_references \
		refs/tags/mark1.10 \
		refs/tags/mark1.2 \
		refs/tags/mark1.1 \
		refs/tags/mark >expect &&
	git ls-remote --sort="-version:refname" --tags self >actual &&
	test_cmp expect actual

ok 8 - ls-remote --sort="-version:refname" --tags self

expecting success of 5512.9 'ls-remote --sort="-refname" --tags self': 
	generate_references \
		refs/tags/mark1.2 \
		refs/tags/mark1.10 \
		refs/tags/mark1.1 \
		refs/tags/mark >expect &&
	git ls-remote --sort="-refname" --tags self >actual &&
	test_cmp expect actual

ok 9 - ls-remote --sort="-refname" --tags self

expecting success of 5512.10 'dies when no remote specified, multiple remotes found, and no default specified': 
	test_must_fail git ls-remote

fatal: No remote configured to list refs from.
ok 10 - dies when no remote specified, multiple remotes found, and no default specified

expecting success of 5512.11 'succeeds when no remote specified but only one found': 
	test_when_finished git remote add self2 "." &&
	git remote remove self2 &&
	git ls-remote

From /<<PKGBUILDDIR>>/t/trash directory.t5512-ls-remote/.git
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	HEAD
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/heads/main
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.1
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.10
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.2
ok 11 - succeeds when no remote specified but only one found

expecting success of 5512.12 'use "origin" when no remote specified and multiple found': 
	URL="$(pwd)/.git" &&
	echo "From $URL" >exp_err &&

	git remote add origin "$URL" &&
	git ls-remote 2>actual_err >actual &&

	test_cmp exp_err actual_err &&
	test_cmp expected.all actual

ok 12 - use "origin" when no remote specified and multiple found

expecting success of 5512.13 'suppress "From <url>" with -q': 
	git ls-remote -q 2>actual_err &&
	! test_cmp exp_err actual_err

1bd44cb9d13204b0fe1958db0082f5028a16eb3a	HEAD
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/heads/main
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.1
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.10
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/mark1.2
--- exp_err	2022-12-28 07:50:58.541859846 +0000
+++ actual_err	2022-12-28 07:50:58.636863336 +0000
@@ -1 +0,0 @@
-From /<<PKGBUILDDIR>>/t/trash directory.t5512-ls-remote/.git
ok 13 - suppress "From <url>" with -q

expecting success of 5512.14 'use branch.<name>.remote if possible': 
	#
	# Test that we are indeed using branch.<name>.remote, not "origin", even
	# though the "origin" remote has been set.
	#

	# setup a new remote to differentiate from "origin"
	git clone . other.git &&
	(
		cd other.git &&
		echo "$(git rev-parse HEAD)	HEAD" &&
		git show-ref	| sed -e "s/ /	/"
	) >exp &&

	URL="other.git" &&
	echo "From $URL" >exp_err &&

	git remote add other $URL &&
	git config branch.main.remote other &&

	git ls-remote 2>actual_err >actual &&
	test_cmp exp_err actual_err &&
	test_cmp exp actual

Cloning into 'other.git'...
done.
ok 14 - use branch.<name>.remote if possible

expecting success of 5512.15 'confuses pattern as remote when no remote specified': 
	if test_have_prereq MINGW
	then
		# Windows does not like asterisks in pathname
		does_not_exist=main
	else
		does_not_exist="refs*main"
	fi &&
	cat >exp <<-EOF &&
	fatal: '$does_not_exist' does not appear to be a git repository
	fatal: Could not read from remote repository.

	Please make sure you have the correct access rights
	and the repository exists.
	EOF
	#
	# Do not expect "git ls-remote <pattern>" to work; ls-remote needs
	# <remote> if you want to feed <pattern>, just like you cannot say
	# fetch <branch>.
	# We could just as easily have used "main"; the "*" emphasizes its
	# role as a pattern.
	test_must_fail git ls-remote "$does_not_exist" >actual 2>&1 &&
	test_cmp exp actual

ok 15 - confuses pattern as remote when no remote specified

expecting success of 5512.16 'die with non-2 for wrong repository even with --exit-code': 
	{
		git ls-remote --exit-code ./no-such-repository
		status=$?
	} &&
	test $status != 2 && test $status != 0

fatal: './no-such-repository' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 16 - die with non-2 for wrong repository even with --exit-code

expecting success of 5512.17 'Report success even when nothing matches': 
	git ls-remote other.git "refs/nsn/*" >actual &&
	test_must_be_empty actual

ok 17 - Report success even when nothing matches

expecting success of 5512.18 'Report no-match with --exit-code': 
	test_expect_code 2 git ls-remote --exit-code other.git "refs/nsn/*" >actual &&
	test_must_be_empty actual

ok 18 - Report no-match with --exit-code

expecting success of 5512.19 'Report match with --exit-code': 
	git ls-remote --exit-code other.git "refs/tags/*" >actual &&
	git ls-remote . tags/mark* >expect &&
	test_cmp expect actual

ok 19 - Report match with --exit-code

expecting success of 5512.20 'set up some extra tags for ref hiding': 
	git tag magic/one &&
	git tag magic/two

ok 20 - set up some extra tags for ref hiding

expecting success of 5512.21 'Hide some refs with transfer.hiderefs': 
		test_config $configsection.hiderefs refs/tags &&
		git ls-remote . >actual &&
		test_unconfig $configsection.hiderefs &&
		git ls-remote . >expect.raw &&
		sed -e "/	refs\/tags\//d" expect.raw >expect &&
		test_cmp expect actual
	
ok 21 - Hide some refs with transfer.hiderefs

expecting success of 5512.22 'Override hiding of transfer.hiderefs': 
		test_when_finished "test_unconfig $configsection.hiderefs" &&
		git config --add $configsection.hiderefs refs/tags &&
		git config --add $configsection.hiderefs "!refs/tags/magic" &&
		git config --add $configsection.hiderefs refs/tags/magic/one &&
		git ls-remote . >actual &&
		grep refs/tags/magic/two actual &&
		! grep refs/tags/magic/one actual
	
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/magic/two
ok 22 - Override hiding of transfer.hiderefs

expecting success of 5512.23 'Hide some refs with uploadpack.hiderefs': 
		test_config $configsection.hiderefs refs/tags &&
		git ls-remote . >actual &&
		test_unconfig $configsection.hiderefs &&
		git ls-remote . >expect.raw &&
		sed -e "/	refs\/tags\//d" expect.raw >expect &&
		test_cmp expect actual
	
ok 23 - Hide some refs with uploadpack.hiderefs

expecting success of 5512.24 'Override hiding of uploadpack.hiderefs': 
		test_when_finished "test_unconfig $configsection.hiderefs" &&
		git config --add $configsection.hiderefs refs/tags &&
		git config --add $configsection.hiderefs "!refs/tags/magic" &&
		git config --add $configsection.hiderefs refs/tags/magic/one &&
		git ls-remote . >actual &&
		grep refs/tags/magic/two actual &&
		! grep refs/tags/magic/one actual
	
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/magic/two
ok 24 - Override hiding of uploadpack.hiderefs

expecting success of 5512.25 'overrides work between mixed transfer/upload-pack hideRefs': 
	test_config uploadpack.hiderefs refs/tags &&
	test_config transfer.hiderefs "!refs/tags/magic" &&
	git ls-remote . >actual &&
	grep refs/tags/magic actual

1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/magic/one
1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/tags/magic/two
ok 25 - overrides work between mixed transfer/upload-pack hideRefs

expecting success of 5512.26 'protocol v2 supports hiderefs': 
	test_config uploadpack.hiderefs refs/tags &&
	git -c protocol.version=2 ls-remote . >actual &&
	! grep refs/tags actual

ok 26 - protocol v2 supports hiderefs

expecting success of 5512.27 'ls-remote --symref': 
	git fetch origin &&
	echo "ref: refs/heads/main	HEAD" >expect &&
	generate_references \
		HEAD \
		refs/heads/main >>expect &&
	oid=$(git rev-parse HEAD) &&
	echo "$oid	refs/remotes/origin/HEAD" >>expect &&
	generate_references \
		refs/remotes/origin/main \
		refs/tags/mark \
		refs/tags/mark1.1 \
		refs/tags/mark1.10 \
		refs/tags/mark1.2 >>expect &&
	# Protocol v2 supports sending symrefs for refs other than HEAD, so use
	# protocol v0 here.
	GIT_TEST_PROTOCOL_VERSION=0 git ls-remote --symref >actual &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5512-ls-remote/
 * [new branch]      main       -> origin/main
From other.git
ok 27 - ls-remote --symref

expecting success of 5512.28 'ls-remote with filtered symref (refname)': 
	rev=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
	ref: refs/heads/main	HEAD
	$rev	HEAD
	EOF
	# Protocol v2 supports sending symrefs for refs other than HEAD, so use
	# protocol v0 here.
	GIT_TEST_PROTOCOL_VERSION=0 git ls-remote --symref . HEAD >actual &&
	test_cmp expect actual

ok 28 - ls-remote with filtered symref (refname)

checking known breakage of 5512.29 'ls-remote with filtered symref (--heads)': 
	git symbolic-ref refs/heads/foo refs/tags/mark &&
	cat >expect <<-EOF &&
	ref: refs/tags/mark	refs/heads/foo
	$rev	refs/heads/foo
	$rev	refs/heads/main
	EOF
	# Protocol v2 supports sending symrefs for refs other than HEAD, so use
	# protocol v0 here.
	GIT_TEST_PROTOCOL_VERSION=0 git ls-remote --symref --heads . >actual &&
	test_cmp expect actual

--- expect	2022-12-28 07:51:01.121954638 +0000
+++ actual	2022-12-28 07:51:01.171956475 +0000
@@ -1,3 +1,2 @@
-ref: refs/tags/mark	refs/heads/foo
 1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/heads/foo
 1bd44cb9d13204b0fe1958db0082f5028a16eb3a	refs/heads/main
not ok 29 - ls-remote with filtered symref (--heads) # TODO known breakage

expecting success of 5512.30 'ls-remote --symref omits filtered-out matches': 
	cat >expect <<-EOF &&
	$rev	refs/heads/foo
	$rev	refs/heads/main
	EOF
	# Protocol v2 supports sending symrefs for refs other than HEAD, so use
	# protocol v0 here.
	GIT_TEST_PROTOCOL_VERSION=0 git ls-remote --symref --heads . >actual &&
	test_cmp expect actual &&
	GIT_TEST_PROTOCOL_VERSION=0 git ls-remote --symref . "refs/heads/*" >actual &&
	test_cmp expect actual

ok 30 - ls-remote --symref omits filtered-out matches

checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
checking prerequisite: JGIT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-JGIT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-JGIT" &&
	jgit --version

)
t5512-ls-remote.sh: 7: eval: jgit: not found
prerequisite JGIT not satisfied
checking prerequisite: GIT_DAEMON

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GIT_DAEMON" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GIT_DAEMON" &&
	test_bool_env GIT_TEST_GIT_DAEMON true

)
prerequisite GIT_DAEMON ok
ok 31 # skip indicate no refs in standards-compliant empty remote (missing JGIT of PIPE,JGIT,GIT_DAEMON)

expecting success of 5512.32 'ls-remote works outside repository': 
	# It is important for this repo to be inside the nongit
	# area, as we want a repo name that does not include
	# slashes (because those inhibit some of our configuration
	# lookups).
	nongit git init --bare dst.git &&
	nongit git ls-remote dst.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5512-ls-remote/non-repo/dst.git/
ok 32 - ls-remote works outside repository

expecting success of 5512.33 'ls-remote --sort fails gracefully outside repository': 
	# Use a sort key that requires access to the referenced objects.
	nongit test_must_fail git ls-remote --sort=authordate "$TRASH_DIRECTORY" 2>err &&
	test_i18ngrep "^fatal: not a git repository, but the field 'authordate' requires access to object data" err

fatal: not a git repository, but the field 'authordate' requires access to object data
ok 33 - ls-remote --sort fails gracefully outside repository

expecting success of 5512.34 'ls-remote patterns work with all protocol versions': 
	git for-each-ref --format="%(objectname)	%(refname)" \
		refs/heads/main refs/remotes/origin/main >expect &&
	git -c protocol.version=1 ls-remote . main >actual.v1 &&
	test_cmp expect actual.v1 &&
	git -c protocol.version=2 ls-remote . main >actual.v2 &&
	test_cmp expect actual.v2

ok 34 - ls-remote patterns work with all protocol versions

expecting success of 5512.35 'ls-remote prefixes work with all protocol versions': 
	git for-each-ref --format="%(objectname)	%(refname)" \
		refs/heads/ refs/tags/ >expect &&
	git -c protocol.version=1 ls-remote --heads --tags . >actual.v1 &&
	test_cmp expect actual.v1 &&
	git -c protocol.version=2 ls-remote --heads --tags . >actual.v2 &&
	test_cmp expect actual.v2

ok 35 - ls-remote prefixes work with all protocol versions

# still have 1 known breakage(s)
# passed all remaining 34 test(s)
1..35
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5514-fetch-multiple.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5514-fetch-multiple/.git/
expecting success of 5514.1 'setup': 
	setup_repository one &&
	setup_repository two &&
	(
		cd two && git branch another
	) &&
	git clone --mirror two three &&
	git clone one test

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5514-fetch-multiple/one/.git/
[main (root-commit) 9d34b14] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to a new branch 'side'
[side 2ce9c50] Second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
Switched to branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5514-fetch-multiple/two/.git/
[main (root-commit) 9d34b14] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to a new branch 'side'
[side 2ce9c50] Second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 elif
Switched to branch 'main'
Cloning into bare repository 'three'...
done.
Cloning into 'test'...
done.
ok 1 - setup

expecting success of 5514.2 'git fetch --all': 
	(cd test &&
	 git remote add one ../one &&
	 git remote add two ../two &&
	 git remote add three ../three &&
	 git fetch --all &&
	 git branch -r > output &&
	 test_cmp expect output)

Fetching origin
Fetching one
From ../one
 * [new branch]      main       -> one/main
 * [new branch]      side       -> one/side
Fetching two
From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
Fetching three
From ../three
 * [new branch]      another    -> three/another
 * [new branch]      main       -> three/main
 * [new branch]      side       -> three/side
ok 2 - git fetch --all

expecting success of 5514.3 'git fetch --all should continue if a remote has errors': 
	(git clone one test2 &&
	 cd test2 &&
	 git remote add bad ../non-existing &&
	 git remote add one ../one &&
	 git remote add two ../two &&
	 git remote add three ../three &&
	 test_must_fail git fetch --all &&
	 git branch -r > output &&
	 test_cmp ../test/expect output)

Cloning into 'test2'...
done.
Fetching origin
Fetching bad
fatal: '../non-existing' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: could not fetch bad
Fetching one
From ../one
 * [new branch]      main       -> one/main
 * [new branch]      side       -> one/side
Fetching two
From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
Fetching three
From ../three
 * [new branch]      another    -> three/another
 * [new branch]      main       -> three/main
 * [new branch]      side       -> three/side
ok 3 - git fetch --all should continue if a remote has errors

expecting success of 5514.4 'git fetch --all does not allow non-option arguments': 
	(cd test &&
	 test_must_fail git fetch --all origin &&
	 test_must_fail git fetch --all origin main)

fatal: fetch --all does not take a repository argument
fatal: fetch --all does not make sense with refspecs
ok 4 - git fetch --all does not allow non-option arguments

expecting success of 5514.5 'git fetch --multiple (but only one remote)': 
	(git clone one test3 &&
	 cd test3 &&
	 git remote add three ../three &&
	 git fetch --multiple three &&
	 git branch -r > output &&
	 test_cmp ../expect output)

Cloning into 'test3'...
done.
Fetching three
From ../three
 * [new branch]      another    -> three/another
 * [new branch]      main       -> three/main
 * [new branch]      side       -> three/side
ok 5 - git fetch --multiple (but only one remote)

expecting success of 5514.6 'git fetch --multiple (two remotes)': 
	(git clone one test4 &&
	 cd test4 &&
	 git remote rm origin &&
	 git remote add one ../one &&
	 git remote add two ../two &&
	 GIT_TRACE=1 git fetch --multiple one two 2>trace &&
	 git branch -r > output &&
	 test_cmp ../expect output &&
	 grep "built-in: git maintenance" trace >gc &&
	 test_line_count = 1 gc
	)

Cloning into 'test4'...
done.
Fetching one
Fetching two
ok 6 - git fetch --multiple (two remotes)

expecting success of 5514.7 'git fetch --multiple (bad remote names)': 
	(cd test4 &&
	 test_must_fail git fetch --multiple four)

fatal: no such remote or remote group: four
ok 7 - git fetch --multiple (bad remote names)

expecting success of 5514.8 'git fetch --all (skipFetchAll)': 
	(cd test4 &&
	 for b in $(git branch -r)
	 do
		git branch -r -d $b || exit 1
	 done &&
	 git remote add three ../three &&
	 git config remote.three.skipFetchAll true &&
	 git fetch --all &&
	 git branch -r > output &&
	 test_cmp ../expect output)

Deleted remote-tracking branch one/main (was 9d34b14).
Deleted remote-tracking branch one/side (was 2ce9c50).
Deleted remote-tracking branch two/another (was 9d34b14).
Deleted remote-tracking branch two/main (was 9d34b14).
Deleted remote-tracking branch two/side (was 2ce9c50).
Fetching one
From ../one
 * [new branch]      main       -> one/main
 * [new branch]      side       -> one/side
Fetching two
From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
ok 8 - git fetch --all (skipFetchAll)

expecting success of 5514.9 'git fetch --multiple (ignoring skipFetchAll)': 
	(cd test4 &&
	 for b in $(git branch -r)
	 do
		git branch -r -d $b || exit 1
	 done &&
	 git fetch --multiple one two three &&
	 git branch -r > output &&
	 test_cmp ../expect output)

Deleted remote-tracking branch one/main (was 9d34b14).
Deleted remote-tracking branch one/side (was 2ce9c50).
Deleted remote-tracking branch two/another (was 9d34b14).
Deleted remote-tracking branch two/main (was 9d34b14).
Deleted remote-tracking branch two/side (was 2ce9c50).
Fetching one
From ../one
 * [new branch]      main       -> one/main
 * [new branch]      side       -> one/side
Fetching two
From ../two
 * [new branch]      another    -> two/another
 * [new branch]      main       -> two/main
 * [new branch]      side       -> two/side
Fetching three
From ../three
 * [new branch]      another    -> three/another
 * [new branch]      main       -> three/main
 * [new branch]      side       -> three/side
ok 9 - git fetch --multiple (ignoring skipFetchAll)

expecting success of 5514.10 'git fetch --all --no-tags': 
	git clone one test5 &&
	git clone test5 test6 &&
	(cd test5 && git tag test-tag) &&
	(
		cd test6 &&
		git fetch --all --no-tags &&
		git tag >output
	) &&
	test_must_be_empty test6/output

Cloning into 'test5'...
done.
Cloning into 'test6'...
done.
ok 10 - git fetch --all --no-tags

expecting success of 5514.11 'git fetch --all --tags': 
	echo test-tag >expect &&
	git clone one test7 &&
	git clone test7 test8 &&
	(
		cd test7 &&
		test_commit test-tag &&
		git reset --hard HEAD^
	) &&
	(
		cd test8 &&
		git fetch --all --tags &&
		git tag >output
	) &&
	test_cmp expect test8/output

Cloning into 'test7'...
done.
Cloning into 'test8'...
done.
[main 09d3cd3] test-tag
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-tag.t
HEAD is now at 9d34b14 Initial
From /<<PKGBUILDDIR>>/t/trash directory.t5514-fetch-multiple/test7
 * [new tag]         test-tag   -> test-tag
ok 11 - git fetch --all --tags

expecting success of 5514.12 'parallel': 
	git remote add one ./bogus1 &&
	git remote add two ./bogus2 &&

	test_must_fail env GIT_TRACE="$PWD/trace" \
		git fetch --jobs=2 --multiple one two 2>err &&
	grep "preparing to run up to 2 tasks" trace &&
	test_i18ngrep "could not fetch .one.*128" err &&
	test_i18ngrep "could not fetch .two.*128" err

Fetching one
Fetching two
run_processes_parallel: preparing to run up to 2 tasks
could not fetch 'one' (exit code: 128)
could not fetch 'two' (exit code: 128)
ok 12 - parallel

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5500-fetch-pack.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/.git/
expecting success of 5500.1 'setup': 
	mkdir client &&
	(
		cd client &&
		git init &&
		git config transfer.unpacklimit 0
	) &&
	add A1 &&
	prev=1 &&
	cur=2 &&
	while [ $cur -le 10 ]; do
		add A$cur $(eval echo \$A$prev) &&
		prev=$cur &&
		cur=$(($cur+1)) || return 1
	done &&
	add B1 $A1 &&
	git update-ref refs/heads/A "$ATIP" &&
	git update-ref refs/heads/B "$BTIP" &&
	git symbolic-ref HEAD refs/heads/B

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
ok 1 - setup

expecting success of 5500.2 '1st pull': 
		(
			cd client &&
			git fetch-pack -k -v .. $heads &&

			case "$heads" in
			    *A*)
				    git update-ref refs/heads/A "$ATIP";;
			esac &&
			case "$heads" in *B*)
			    git update-ref refs/heads/B "$BTIP";;
			esac &&

			git symbolic-ref HEAD refs/heads/$(
				echo $heads |
				sed -e "s/^\(.\).*$/\1/"
			) &&

			git fsck --full &&

			mv .git/objects/pack/pack-* . &&
			p=$(ls -1 pack-*.pack) &&
			git unpack-objects <$p &&
			git fsck --full &&

			idx=$(echo pack-*.idx) &&
			pack_count=$(git show-index <$idx | wc -l) &&
			test $pack_count = $count &&
			rm -f pack-*
		)
	
want 9980fc7e97f06bbd7341f45d570f0c5eb2a954f1 (refs/heads/A)
want ed6d498dac4948371a8c2a3954eef783312857f5 (refs/heads/B)
remote: Enumerating objects: 33, done.        
remote: Counting objects:   3% (1/33)        
remote: Counting objects:   6% (2/33)        
remote: Counting objects:   9% (3/33)        
remote: Counting objects:  12% (4/33)        
remote: Counting objects:  15% (5/33)        
remote: Counting objects:  18% (6/33)        
remote: Counting objects:  21% (7/33)        
remote: Counting objects:  24% (8/33)        
remote: Counting objects:  27% (9/33)        
remote: Counting objects:  30% (10/33)        
remote: Counting objects:  33% (11/33)        
remote: Counting objects:  36% (12/33)        
remote: Counting objects:  39% (13/33)        
remote: Counting objects:  42% (14/33)        
remote: Counting objects:  45% (15/33)        
remote: Counting objects:  48% (16/33)        
remote: Counting objects:  51% (17/33)        
remote: Counting objects:  54% (18/33)        
remote: Counting objects:  57% (19/33)        
remote: Counting objects:  60% (20/33)        
remote: Counting objects:  63% (21/33)        
remote: Counting objects:  66% (22/33)        
remote: Counting objects:  69% (23/33)        
remote: Counting objects:  72% (24/33)        
remote: Counting objects:  75% (25/33)        
remote: Counting objects:  78% (26/33)        
remote: Counting objects:  81% (27/33)        
remote: Counting objects:  84% (28/33)        
remote: Counting objects:  87% (29/33)        
remote: Counting objects:  90% (30/33)        
remote: Counting objects:  93% (31/33)        
remote: Counting objects:  96% (32/33)        
remote: Counting objects: 100% (33/33)        
remote: Counting objects: 100% (33/33), done.        
remote: Compressing objects:   9% (1/11)        
remote: Compressing objects:  18% (2/11)        
remote: Compressing objects:  27% (3/11)        
remote: Compressing objects:  36% (4/11)        
remote: Compressing objects:  45% (5/11)        
remote: Compressing objects:  54% (6/11)        
remote: Compressing objects:  63% (7/11)        
remote: Compressing objects:  72% (8/11)        
remote: Compressing objects:  81% (9/11)        
remote: Compressing objects:  90% (10/11)        
remote: Compressing objects: 100% (11/11)        
remote: Compressing objects: 100% (11/11), done.        
remote: Total 33 (delta 1), reused 0 (delta 0), pack-reused 0        
Receiving objects:   3% (1/33)
Receiving objects:   6% (2/33)
Receiving objects:   9% (3/33)
Receiving objects:  12% (4/33)
Receiving objects:  15% (5/33)
Receiving objects:  18% (6/33)
Receiving objects:  21% (7/33)
Receiving objects:  24% (8/33)
Receiving objects:  27% (9/33)
Receiving objects:  30% (10/33)
Receiving objects:  33% (11/33)
Receiving objects:  36% (12/33)
Receiving objects:  39% (13/33)
Receiving objects:  42% (14/33)
Receiving objects:  45% (15/33)
Receiving objects:  48% (16/33)
Receiving objects:  51% (17/33)
Receiving objects:  54% (18/33)
Receiving objects:  57% (19/33)
Receiving objects:  60% (20/33)
Receiving objects:  63% (21/33)
Receiving objects:  66% (22/33)
Receiving objects:  69% (23/33)
Receiving objects:  72% (24/33)
Receiving objects:  75% (25/33)
Receiving objects:  78% (26/33)
Receiving objects:  81% (27/33)
Receiving objects:  84% (28/33)
Receiving objects:  87% (29/33)
Receiving objects:  90% (30/33)
Receiving objects:  93% (31/33)
Receiving objects:  96% (32/33)
Receiving objects: 100% (33/33)
Receiving objects: 100% (33/33), done.
Resolving deltas:   0% (0/1)
Resolving deltas: 100% (1/1)
Resolving deltas: 100% (1/1), done.
pack	3791170b8839b1bcb89a066d52633bc8b213dcdf
9980fc7e97f06bbd7341f45d570f0c5eb2a954f1 refs/heads/A
ed6d498dac4948371a8c2a3954eef783312857f5 refs/heads/B
notice: HEAD points to an unborn branch (r)
notice: HEAD points to an unborn branch (r)
ok 2 - 1st pull

expecting success of 5500.3 'post 1st pull setup': 
	add A11 $A10 &&
	prev=1 &&
	cur=2 &&
	while [ $cur -le 65 ]; do
		add B$cur $(eval echo \$B$prev) &&
		prev=$cur &&
		cur=$(($cur+1)) || return 1
	done

ok 3 - post 1st pull setup

expecting success of 5500.4 '2nd pull': 
		(
			cd client &&
			git fetch-pack -k -v .. $heads &&

			case "$heads" in
			    *A*)
				    git update-ref refs/heads/A "$ATIP";;
			esac &&
			case "$heads" in *B*)
			    git update-ref refs/heads/B "$BTIP";;
			esac &&

			git symbolic-ref HEAD refs/heads/$(
				echo $heads |
				sed -e "s/^\(.\).*$/\1/"
			) &&

			git fsck --full &&

			mv .git/objects/pack/pack-* . &&
			p=$(ls -1 pack-*.pack) &&
			git unpack-objects <$p &&
			git fsck --full &&

			idx=$(echo pack-*.idx) &&
			pack_count=$(git show-index <$idx | wc -l) &&
			test $pack_count = $count &&
			rm -f pack-*
		)
	
want 27f494dfb7e67d2f9cd2282404adf1d97581aa34 (refs/heads/B)
remote: Enumerating objects: 192, done.        
remote: Counting objects:   0% (1/192)        
remote: Counting objects:   1% (2/192)        
remote: Counting objects:   2% (4/192)        
remote: Counting objects:   3% (6/192)        
remote: Counting objects:   4% (8/192)        
remote: Counting objects:   5% (10/192)        
remote: Counting objects:   6% (12/192)        
remote: Counting objects:   7% (14/192)        
remote: Counting objects:   8% (16/192)        
remote: Counting objects:   9% (18/192)        
remote: Counting objects:  10% (20/192)        
remote: Counting objects:  11% (22/192)        
remote: Counting objects:  12% (24/192)        
remote: Counting objects:  13% (25/192)        
remote: Counting objects:  14% (27/192)        
remote: Counting objects:  15% (29/192)        
remote: Counting objects:  16% (31/192)        
remote: Counting objects:  17% (33/192)        
remote: Counting objects:  18% (35/192)        
remote: Counting objects:  19% (37/192)        
remote: Counting objects:  20% (39/192)        
remote: Counting objects:  21% (41/192)        
remote: Counting objects:  22% (43/192)        
remote: Counting objects:  23% (45/192)        
remote: Counting objects:  24% (47/192)        
remote: Counting objects:  25% (48/192)        
remote: Counting objects:  26% (50/192)        
remote: Counting objects:  27% (52/192)        
remote: Counting objects:  28% (54/192)        
remote: Counting objects:  29% (56/192)        
remote: Counting objects:  30% (58/192)        
remote: Counting objects:  31% (60/192)        
remote: Counting objects:  32% (62/192)        
remote: Counting objects:  33% (64/192)        
remote: Counting objects:  34% (66/192)        
remote: Counting objects:  35% (68/192)        
remote: Counting objects:  36% (70/192)        
remote: Counting objects:  37% (72/192)        
remote: Counting objects:  38% (73/192)        
remote: Counting objects:  39% (75/192)        
remote: Counting objects:  40% (77/192)        
remote: Counting objects:  41% (79/192)        
remote: Counting objects:  42% (81/192)        
remote: Counting objects:  43% (83/192)        
remote: Counting objects:  44% (85/192)        
remote: Counting objects:  45% (87/192)        
remote: Counting objects:  46% (89/192)        
remote: Counting objects:  47% (91/192)        
remote: Counting objects:  48% (93/192)        
remote: Counting objects:  49% (95/192)        
remote: Counting objects:  50% (96/192)        
remote: Counting objects:  51% (98/192)        
remote: Counting objects:  52% (100/192)        
remote: Counting objects:  53% (102/192)        
remote: Counting objects:  54% (104/192)        
remote: Counting objects:  55% (106/192)        
remote: Counting objects:  56% (108/192)        
remote: Counting objects:  57% (110/192)        
remote: Counting objects:  58% (112/192)        
remote: Counting objects:  59% (114/192)        
remote: Counting objects:  60% (116/192)        
remote: Counting objects:  61% (118/192)        
remote: Counting objects:  62% (120/192)        
remote: Counting objects:  63% (121/192)        
remote: Counting objects:  64% (123/192)        
remote: Counting objects:  65% (125/192)        
remote: Counting objects:  66% (127/192)        
remote: Counting objects:  67% (129/192)        
remote: Counting objects:  68% (131/192)        
remote: Counting objects:  69% (133/192)        
remote: Counting objects:  70% (135/192)        
remote: Counting objects:  71% (137/192)        
remote: Counting objects:  72% (139/192)        
remote: Counting objects:  73% (141/192)        
remote: Counting objects:  74% (143/192)        
remote: Counting objects:  75% (144/192)        
remote: Counting objects:  76% (146/192)        
remote: Counting objects:  77% (148/192)        
remote: Counting objects:  78% (150/192)        
remote: Counting objects:  79% (152/192)        
remote: Counting objects:  80% (154/192)        
remote: Counting objects:  81% (156/192)        
remote: Counting objects:  82% (158/192)        
remote: Counting objects:  83% (160/192)        
remote: Counting objects:  84% (162/192)        
remote: Counting objects:  85% (164/192)        
remote: Counting objects:  86% (166/192)        
remote: Counting objects:  87% (168/192)        
remote: Counting objects:  88% (169/192)        
remote: Counting objects:  89% (171/192)        
remote: Counting objects:  90% (173/192)        
remote: Counting objects:  91% (175/192)        
remote: Counting objects:  92% (177/192)        
remote: Counting objects:  93% (179/192)        
remote: Counting objects:  94% (181/192)        
remote: Counting objects:  95% (183/192)        
remote: Counting objects:  96% (185/192)        
remote: Counting objects:  97% (187/192)        
remote: Counting objects:  98% (189/192)        
remote: Counting objects:  99% (191/192)        
remote: Counting objects: 100% (192/192)        
remote: Counting objects: 100% (192/192), done.        
remote: Compressing objects:   1% (1/64)        
remote: Compressing objects:   3% (2/64)        
remote: Compressing objects:   4% (3/64)        
remote: Compressing objects:   6% (4/64)        
remote: Compressing objects:   7% (5/64)        
remote: Compressing objects:   9% (6/64)        
remote: Compressing objects:  10% (7/64)        
remote: Compressing objects:  12% (8/64)        
remote: Compressing objects:  14% (9/64)        
remote: Compressing objects:  15% (10/64)        
remote: Compressing objects:  17% (11/64)        
remote: Compressing objects:  18% (12/64)        
remote: Compressing objects:  20% (13/64)        
remote: Compressing objects:  21% (14/64)        
remote: Compressing objects:  23% (15/64)        
remote: Compressing objects:  25% (16/64)        
remote: Compressing objects:  26% (17/64)        
remote: Compressing objects:  28% (18/64)        
remote: Compressing objects:  29% (19/64)        
remote: Compressing objects:  31% (20/64)        
remote: Compressing objects:  32% (21/64)        
remote: Compressing objects:  34% (22/64)        
remote: Compressing objects:  35% (23/64)        
remote: Compressing objects:  37% (24/64)        
remote: Compressing objects:  39% (25/64)        
remote: Compressing objects:  40% (26/64)        
remote: Compressing objects:  42% (27/64)        
remote: Compressing objects:  43% (28/64)        
remote: Compressing objects:  45% (29/64)        
remote: Compressing objects:  46% (30/64)        
remote: Compressing objects:  48% (31/64)        
remote: Compressing objects:  50% (32/64)        
remote: Compressing objects:  51% (33/64)        
remote: Compressing objects:  53% (34/64)        
remote: Compressing objects:  54% (35/64)        
remote: Compressing objects:  56% (36/64)        
remote: Compressing objects:  57% (37/64)        
remote: Compressing objects:  59% (38/64)        
remote: Compressing objects:  60% (39/64)        
remote: Compressing objects:  62% (40/64)        
remote: Compressing objects:  64% (41/64)        
remote: Compressing objects:  65% (42/64)        
remote: Compressing objects:  67% (43/64)        
remote: Compressing objects:  68% (44/64)        
remote: Compressing objects:  70% (45/64)        
remote: Compressing objects:  71% (46/64)        
remote: Compressing objects:  73% (47/64)        
remote: Compressing objects:  75% (48/64)        
remote: Compressing objects:  76% (49/64)        
remote: Compressing objects:  78% (50/64)        
remote: Compressing objects:  79% (51/64)        
remote: Compressing objects:  81% (52/64)        
remote: Compressing objects:  82% (53/64)        
remote: Compressing objects:  84% (54/64)        
remote: Compressing objects:  85% (55/64)        
remote: Compressing objects:  87% (56/64)        
remote: Compressing objects:  89% (57/64)        
remote: Compressing objects:  90% (58/64)        
remote: Compressing objects:  92% (59/64)        
remote: Compressing objects:  93% (60/64)        
remote: Compressing objects:  95% (61/64)        
remote: Compressing objects:  96% (62/64)        
remote: Compressing objects:  98% (63/64)        
remote: Compressing objects: 100% (64/64)        
remote: Compressing objects: 100% (64/64), done.        
Receiving objects:   0% (1/192)
Receiving objects:   1% (2/192)
Receiving objects:   2% (4/192)
Receiving objects:   3% (6/192)
Receiving objects:   4% (8/192)
Receiving objects:   5% (10/192)
Receiving objects:   6% (12/192)
Receiving objects:   7% (14/192)
Receiving objects:   8% (16/192)
Receiving objects:   9% (18/192)
Receiving objects:  10% (20/192)
Receiving objects:  11% (22/192)
Receiving objects:  12% (24/192)
Receiving objects:  13% (25/192)
Receiving objects:  14% (27/192)
Receiving objects:  15% (29/192)
Receiving objects:  16% (31/192)
Receiving objects:  17% (33/192)
Receiving objects:  18% (35/192)
Receiving objects:  19% (37/192)
Receiving objects:  20% (39/192)
Receiving objects:  21% (41/192)
Receiving objects:  22% (43/192)
Receiving objects:  23% (45/192)
Receiving objects:  24% (47/192)
Receiving objects:  25% (48/192)
Receiving objects:  26% (50/192)
Receiving objects:  27% (52/192)
Receiving objects:  28% (54/192)
Receiving objects:  29% (56/192)
Receiving objects:  30% (58/192)
Receiving objects:  31% (60/192)
Receiving objects:  32% (62/192)
Receiving objects:  33% (64/192)
Receiving objects:  34% (66/192)
Receiving objects:  35% (68/192)
Receiving objects:  36% (70/192)
Receiving objects:  37% (72/192)
Receiving objects:  38% (73/192)
Receiving objects:  39% (75/192)
Receiving objects:  40% (77/192)
Receiving objects:  41% (79/192)
remote: Total 192 (delta 0), reused 0 (delta 0), pack-reused 0        
Receiving objects:  42% (81/192)
Receiving objects:  43% (83/192)
Receiving objects:  44% (85/192)
Receiving objects:  45% (87/192)
Receiving objects:  46% (89/192)
Receiving objects:  47% (91/192)
Receiving objects:  48% (93/192)
Receiving objects:  49% (95/192)
Receiving objects:  50% (96/192)
Receiving objects:  51% (98/192)
Receiving objects:  52% (100/192)
Receiving objects:  53% (102/192)
Receiving objects:  54% (104/192)
Receiving objects:  55% (106/192)
Receiving objects:  56% (108/192)
Receiving objects:  57% (110/192)
Receiving objects:  58% (112/192)
Receiving objects:  59% (114/192)
Receiving objects:  60% (116/192)
Receiving objects:  61% (118/192)
Receiving objects:  62% (120/192)
Receiving objects:  63% (121/192)
Receiving objects:  64% (123/192)
Receiving objects:  65% (125/192)
Receiving objects:  66% (127/192)
Receiving objects:  67% (129/192)
Receiving objects:  68% (131/192)
Receiving objects:  69% (133/192)
Receiving objects:  70% (135/192)
Receiving objects:  71% (137/192)
Receiving objects:  72% (139/192)
Receiving objects:  73% (141/192)
Receiving objects:  74% (143/192)
Receiving objects:  75% (144/192)
Receiving objects:  76% (146/192)
Receiving objects:  77% (148/192)
Receiving objects:  78% (150/192)
Receiving objects:  79% (152/192)
Receiving objects:  80% (154/192)
Receiving objects:  81% (156/192)
Receiving objects:  82% (158/192)
Receiving objects:  83% (160/192)
Receiving objects:  84% (162/192)
Receiving objects:  85% (164/192)
Receiving objects:  86% (166/192)
Receiving objects:  87% (168/192)
Receiving objects:  88% (169/192)
Receiving objects:  89% (171/192)
Receiving objects:  90% (173/192)
Receiving objects:  91% (175/192)
Receiving objects:  92% (177/192)
Receiving objects:  93% (179/192)
Receiving objects:  94% (181/192)
Receiving objects:  95% (183/192)
Receiving objects:  96% (185/192)
Receiving objects:  97% (187/192)
Receiving objects:  98% (189/192)
Receiving objects:  99% (191/192)
Receiving objects: 100% (192/192)
Receiving objects: 100% (192/192), 16.30 KiB | 80.00 KiB/s, done.
pack	d6698cfcaf6e075007fcb2123d8a138210d6d911
27f494dfb7e67d2f9cd2282404adf1d97581aa34 refs/heads/B
notice: HEAD points to an unborn branch (r)
notice: HEAD points to an unborn branch (r)
ok 4 - 2nd pull

expecting success of 5500.5 '3rd pull': 
		(
			cd client &&
			git fetch-pack -k -v .. $heads &&

			case "$heads" in
			    *A*)
				    git update-ref refs/heads/A "$ATIP";;
			esac &&
			case "$heads" in *B*)
			    git update-ref refs/heads/B "$BTIP";;
			esac &&

			git symbolic-ref HEAD refs/heads/$(
				echo $heads |
				sed -e "s/^\(.\).*$/\1/"
			) &&

			git fsck --full &&

			mv .git/objects/pack/pack-* . &&
			p=$(ls -1 pack-*.pack) &&
			git unpack-objects <$p &&
			git fsck --full &&

			idx=$(echo pack-*.idx) &&
			pack_count=$(git show-index <$idx | wc -l) &&
			test $pack_count = $count &&
			rm -f pack-*
		)
	
Marking 27f494dfb7e67d2f9cd2282404adf1d97581aa34 as complete
want f85e353c1b377970afbb804118d9135948598eea (refs/heads/A)
remote: Enumerating objects: 3, done.        
remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
Receiving objects:  33% (1/3)
Receiving objects:  66% (2/3)
Receiving objects: 100% (3/3)
Receiving objects: 100% (3/3), done.
pack	8c2aba64d976b4b0893650f8d05017eac7cd6e21
f85e353c1b377970afbb804118d9135948598eea refs/heads/A
notice: HEAD points to an unborn branch (r)
notice: HEAD points to an unborn branch (r)
ok 5 - 3rd pull

expecting success of 5500.6 'single branch clone': 
	git clone --single-branch "file://$(pwd)/." singlebranch

Cloning into 'singlebranch'...
ok 6 - single branch clone

expecting success of 5500.7 'single branch object count': 
	GIT_DIR=singlebranch/.git git count-objects -v |
		grep "^in-pack:" > count.singlebranch &&
	echo "in-pack: 198" >expected &&
	test_cmp expected count.singlebranch

ok 7 - single branch object count

expecting success of 5500.8 'single given branch clone': 
	git clone --single-branch --branch A "file://$(pwd)/." branch-a &&
	test_must_fail git --git-dir=branch-a/.git rev-parse origin/B

Cloning into 'branch-a'...
fatal: ambiguous argument 'origin/B': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
origin/B
ok 8 - single given branch clone

expecting success of 5500.9 'clone shallow depth 1': 
	git clone --no-single-branch --depth 1 "file://$(pwd)/." shallow0 &&
	test "$(git --git-dir=shallow0/.git rev-list --count HEAD)" = 1

Cloning into 'shallow0'...
ok 9 - clone shallow depth 1

expecting success of 5500.10 'clone shallow depth 1 with fsck': 
	git config --global fetch.fsckobjects true &&
	git clone --no-single-branch --depth 1 "file://$(pwd)/." shallow0fsck &&
	test "$(git --git-dir=shallow0fsck/.git rev-list --count HEAD)" = 1 &&
	git config --global --unset fetch.fsckobjects

Cloning into 'shallow0fsck'...
ok 10 - clone shallow depth 1 with fsck

expecting success of 5500.11 'clone shallow': 
	git clone --no-single-branch --depth 2 "file://$(pwd)/." shallow

Cloning into 'shallow'...
ok 11 - clone shallow

expecting success of 5500.12 'clone shallow depth count': 
	test "$(git --git-dir=shallow/.git rev-list --count HEAD)" = 2

ok 12 - clone shallow depth count

expecting success of 5500.13 'clone shallow object count': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow &&
	grep "^in-pack: 12" count.shallow

in-pack: 12
ok 13 - clone shallow object count

expecting success of 5500.14 'clone shallow object count (part 2)': 
	sed -e "/^in-pack:/d" -e "/^packs:/d" -e "/^size-pack:/d" \
	    -e "/: 0$/d" count.shallow > count_output &&
	test_must_be_empty count_output

ok 14 - clone shallow object count (part 2)

expecting success of 5500.15 'fsck in shallow repo': 
	(
		cd shallow &&
		git fsck --full
	)

ok 15 - fsck in shallow repo

expecting success of 5500.16 'simple fetch in shallow repo': 
	(
		cd shallow &&
		git fetch
	)

ok 16 - simple fetch in shallow repo

expecting success of 5500.17 'no changes expected': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow.2 &&
	cmp count.shallow count.shallow.2

ok 17 - no changes expected

expecting success of 5500.18 'fetch same depth in shallow repo': 
	(
		cd shallow &&
		git fetch --depth=2
	)

ok 18 - fetch same depth in shallow repo

expecting success of 5500.19 'no changes expected': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow.3 &&
	cmp count.shallow count.shallow.3

ok 19 - no changes expected

expecting success of 5500.20 'add two more': 
	add B66 $B65 &&
	add B67 $B66

ok 20 - add two more

expecting success of 5500.21 'pull in shallow repo': 
	(
		cd shallow &&
		git pull .. B
	)

From ..
 * branch            B          -> FETCH_HEAD
Updating 27f494d..437bc54
Fast-forward
 test.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 21 - pull in shallow repo

expecting success of 5500.22 'clone shallow object count': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow &&
	grep "^count: 6" count.shallow

count: 6
ok 22 - clone shallow object count

expecting success of 5500.23 'add two more (part 2)': 
	add B68 $B67 &&
	add B69 $B68

ok 23 - add two more (part 2)

expecting success of 5500.24 'deepening pull in shallow repo': 
	(
		cd shallow &&
		git pull --depth 4 .. B
	)

From ..
 * branch            B          -> FETCH_HEAD
Updating 437bc54..9ca64d8
Fast-forward
 test.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 24 - deepening pull in shallow repo

expecting success of 5500.25 'clone shallow object count': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow &&
	grep "^count: 12" count.shallow

count: 12
ok 25 - clone shallow object count

expecting success of 5500.26 'deepening fetch in shallow repo': 
	(
		cd shallow &&
		git fetch --depth 4 .. A:A
	)

From ..
 * [new branch]      A          -> A
ok 26 - deepening fetch in shallow repo

expecting success of 5500.27 'clone shallow object count': 
	(
		cd shallow &&
		git count-objects -v
	) > count.shallow &&
	grep "^count: 18" count.shallow

count: 18
ok 27 - clone shallow object count

expecting success of 5500.28 'pull in shallow repo with missing merge base': 
	(
		cd shallow &&
		git fetch --depth 4 .. A &&
		test_must_fail git merge --allow-unrelated-histories FETCH_HEAD
	)

From ..
 * branch            A          -> FETCH_HEAD
Auto-merging test.txt
CONFLICT (add/add): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 28 - pull in shallow repo with missing merge base

expecting success of 5500.29 'additional simple shallow deepenings': 
	(
		cd shallow &&
		git fetch --depth=8 &&
		git fetch --depth=10 &&
		git fetch --depth=11
	)

From file:///<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/.
 + 27f494d...9ca64d8 B          -> origin/B  (forced update)
ok 29 - additional simple shallow deepenings

expecting success of 5500.30 'clone shallow depth count': 
	test "$(git --git-dir=shallow/.git rev-list --count HEAD)" = 11

ok 30 - clone shallow depth count

expecting success of 5500.31 'clone shallow object count': 
	(
		cd shallow &&
		git prune &&
		git count-objects -v
	) > count.shallow &&
	grep "^count: 54" count.shallow

count: 54
ok 31 - clone shallow object count

expecting success of 5500.32 'fetch --no-shallow on full repo': 
	test_must_fail git fetch --noshallow

error: unknown option `noshallow'
usage: git fetch [<options>] [<repository> [<refspec>...]]
   or: git fetch [<options>] <group>
   or: git fetch --multiple [<options>] [(<repository> | <group>)...]
   or: git fetch --all [<options>]

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --all                 fetch from all remotes
    --set-upstream        set upstream for git pull/fetch
    -a, --append          append to .git/FETCH_HEAD instead of overwriting
    --atomic              use atomic transaction to update references
    --upload-pack <path>  path to upload pack on remote end
    -f, --force           force overwrite of local reference
    -m, --multiple        fetch from multiple remotes
    -t, --tags            fetch all tags and associated objects
    -n                    do not fetch all tags (--no-tags)
    -j, --jobs <n>        number of submodules fetched in parallel
    --prefetch            modify the refspec to place all refs within refs/prefetch/
    -p, --prune           prune remote-tracking branches no longer on remote
    -P, --prune-tags      prune local tags no longer on remote and clobber changed tags
    --recurse-submodules[=<on-demand>]
                          control recursive fetching of submodules
    --dry-run             dry run
    --write-fetch-head    write fetched references to the FETCH_HEAD file
    -k, --keep            keep downloaded pack
    -u, --update-head-ok  allow updating of HEAD ref
    --progress            force progress reporting
    --depth <depth>       deepen history of shallow clone
    --shallow-since <time>
                          deepen history of shallow repository based on time
    --shallow-exclude <revision>
                          deepen history of shallow clone, excluding rev
    --deepen <n>          deepen history of shallow clone
    --unshallow           convert to a complete repository
    --refetch             re-fetch without negotiating common commits
    --update-shallow      accept refs that update .git/shallow
    --refmap <refmap>     specify fetch refmap
    -o, --server-option <server-specific>
                          option to transmit
    -4, --ipv4            use IPv4 addresses only
    -6, --ipv6            use IPv6 addresses only
    --negotiation-tip <revision>
                          report that we have only objects reachable from this object
    --negotiate-only      do not fetch a packfile; instead, print ancestors of negotiation tips
    --filter <args>       object filtering
    --auto-maintenance    run 'maintenance --auto' after fetching
    --auto-gc             run 'maintenance --auto' after fetching
    --show-forced-updates
                          check for forced-updates on all updated branches
    --write-commit-graph  write the commit-graph after fetching
    --stdin               accept refspecs from stdin

ok 32 - fetch --no-shallow on full repo

expecting success of 5500.33 'fetch --depth --no-shallow': 
	(
		cd shallow &&
		test_must_fail git fetch --depth=1 --noshallow
	)

error: unknown option `noshallow'
usage: git fetch [<options>] [<repository> [<refspec>...]]
   or: git fetch [<options>] <group>
   or: git fetch --multiple [<options>] [(<repository> | <group>)...]
   or: git fetch --all [<options>]

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --all                 fetch from all remotes
    --set-upstream        set upstream for git pull/fetch
    -a, --append          append to .git/FETCH_HEAD instead of overwriting
    --atomic              use atomic transaction to update references
    --upload-pack <path>  path to upload pack on remote end
    -f, --force           force overwrite of local reference
    -m, --multiple        fetch from multiple remotes
    -t, --tags            fetch all tags and associated objects
    -n                    do not fetch all tags (--no-tags)
    -j, --jobs <n>        number of submodules fetched in parallel
    --prefetch            modify the refspec to place all refs within refs/prefetch/
    -p, --prune           prune remote-tracking branches no longer on remote
    -P, --prune-tags      prune local tags no longer on remote and clobber changed tags
    --recurse-submodules[=<on-demand>]
                          control recursive fetching of submodules
    --dry-run             dry run
    --write-fetch-head    write fetched references to the FETCH_HEAD file
    -k, --keep            keep downloaded pack
    -u, --update-head-ok  allow updating of HEAD ref
    --progress            force progress reporting
    --depth <depth>       deepen history of shallow clone
    --shallow-since <time>
                          deepen history of shallow repository based on time
    --shallow-exclude <revision>
                          deepen history of shallow clone, excluding rev
    --deepen <n>          deepen history of shallow clone
    --unshallow           convert to a complete repository
    --refetch             re-fetch without negotiating common commits
    --update-shallow      accept refs that update .git/shallow
    --refmap <refmap>     specify fetch refmap
    -o, --server-option <server-specific>
                          option to transmit
    -4, --ipv4            use IPv4 addresses only
    -6, --ipv6            use IPv6 addresses only
    --negotiation-tip <revision>
                          report that we have only objects reachable from this object
    --negotiate-only      do not fetch a packfile; instead, print ancestors of negotiation tips
    --filter <args>       object filtering
    --auto-maintenance    run 'maintenance --auto' after fetching
    --auto-gc             run 'maintenance --auto' after fetching
    --show-forced-updates
                          check for forced-updates on all updated branches
    --write-commit-graph  write the commit-graph after fetching
    --stdin               accept refspecs from stdin

ok 33 - fetch --depth --no-shallow

expecting success of 5500.34 'turn shallow to complete repository': 
	(
		cd shallow &&
		git fetch --unshallow &&
		! test -f .git/shallow &&
		git fsck --full
	)

ok 34 - turn shallow to complete repository

expecting success of 5500.35 'clone shallow without --no-single-branch': 
	git clone --depth 1 "file://$(pwd)/." shallow2

Cloning into 'shallow2'...
ok 35 - clone shallow without --no-single-branch

expecting success of 5500.36 'clone shallow object count': 
	(
		cd shallow2 &&
		git count-objects -v
	) > count.shallow2 &&
	grep "^in-pack: 3" count.shallow2

in-pack: 3
ok 36 - clone shallow object count

expecting success of 5500.37 'clone shallow with --branch': 
	git clone --depth 1 --branch A "file://$(pwd)/." shallow3

Cloning into 'shallow3'...
ok 37 - clone shallow with --branch

expecting success of 5500.38 'clone shallow object count': 
	echo "in-pack: 3" > count3.expected &&
	GIT_DIR=shallow3/.git git count-objects -v |
		grep "^in-pack" > count3.actual &&
	test_cmp count3.expected count3.actual

ok 38 - clone shallow object count

expecting success of 5500.39 'clone shallow with detached HEAD': 
	git checkout HEAD^ &&
	git clone --depth 1 "file://$(pwd)/." shallow5 &&
	git checkout - &&
	GIT_DIR=shallow5/.git git rev-parse HEAD >actual &&
	git rev-parse HEAD^ >expected &&
	test_cmp expected actual

Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1250623 B68 437bc546da4e1741a26c6bfb6b7eeb6e56e2677f
Cloning into 'shallow5'...
Note: switching to '12506236f9d4e4c1150d951940e54aa6ef43c8d3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Previous HEAD position was 1250623 B68 437bc546da4e1741a26c6bfb6b7eeb6e56e2677f
Switched to branch 'B'
ok 39 - clone shallow with detached HEAD

expecting success of 5500.40 'shallow clone pulling tags': 
	git tag -a -m A TAGA1 A &&
	git tag -a -m B TAGB1 B &&
	git tag TAGA2 A &&
	git tag TAGB2 B &&
	git clone --depth 1 "file://$(pwd)/." shallow6 &&

	cat >taglist.expected <<\EOF &&
TAGB1
TAGB2
EOF
	GIT_DIR=shallow6/.git git tag -l >taglist.actual &&
	test_cmp taglist.expected taglist.actual &&

	echo "in-pack: 4" > count6.expected &&
	GIT_DIR=shallow6/.git git count-objects -v |
		grep "^in-pack" > count6.actual &&
	test_cmp count6.expected count6.actual

Cloning into 'shallow6'...
ok 40 - shallow clone pulling tags

expecting success of 5500.41 'shallow cloning single tag': 
	git clone --depth 1 --branch=TAGB1 "file://$(pwd)/." shallow7 &&
	cat >taglist.expected <<\EOF &&
TAGB1
TAGB2
EOF
	GIT_DIR=shallow7/.git git tag -l >taglist.actual &&
	test_cmp taglist.expected taglist.actual &&

	echo "in-pack: 4" > count7.expected &&
	GIT_DIR=shallow7/.git git count-objects -v |
		grep "^in-pack" > count7.actual &&
	test_cmp count7.expected count7.actual

Cloning into 'shallow7'...
Note: switching to '9ca64d8fd8038b086badca1d11ccd8bbcfdeace1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 41 - shallow cloning single tag

expecting success of 5500.42 'clone shallow with packed refs': 
	git pack-refs --all &&
	git clone --depth 1 --branch A "file://$(pwd)/." shallow8 &&
	echo "in-pack: 4" > count8.expected &&
	GIT_DIR=shallow8/.git git count-objects -v |
		grep "^in-pack" > count8.actual &&
	test_cmp count8.expected count8.actual

Cloning into 'shallow8'...
ok 42 - clone shallow with packed refs

expecting success of 5500.43 'in_vain not triggered before first ACK': 
	rm -rf myserver myclient &&
	git init myserver &&
	test_commit -C myserver foo &&
	git clone "file://$(pwd)/myserver" myclient &&

	# MAX_IN_VAIN is 256. Because of batching, the client will send 496
	# (16+32+64+128+256) commits, not 256, before giving up. So create 496
	# irrelevant commits.
	test_commit_bulk -C myclient 496 &&

	# The new commit that the client wants to fetch.
	test_commit -C myserver bar &&

	git -C myclient fetch --progress origin 2>log &&
	test_i18ngrep "remote: Total 3 " log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/myserver/.git/
[main (root-commit) d7cbd4c] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'myclient'...
d7cbd4c2632a48b8cc9f7dc6703a4342850c63cf
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:         1488 (         0 duplicates                  )
      blobs  :          496 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          496 (         0 duplicates        486 deltas of        486 attempts)
      commits:          496 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            497
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        501
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =     169114 /     169114
---------------------------------------------------------------------

Your branch is ahead of 'origin/main' by 496 commits.
  (use "git push" to publish your local commits)
[main f32f09e] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
ok 43 - in_vain not triggered before first ACK

expecting success of 5500.44 'in_vain resetted upon ACK': 
	test_when_finished rm -f log trace2 &&
	rm -rf myserver myclient &&
	git init myserver &&

	# Linked list of commits on main. The first is common; the rest are
	# not.
	test_commit -C myserver first_main_commit &&
	git clone "file://$(pwd)/myserver" myclient &&
	test_commit_bulk -C myclient 255 &&

	# Another linked list of commits on anotherbranch with no connection to
	# main. The first is common; the rest are not.
	git -C myserver checkout --orphan anotherbranch &&
	test_commit -C myserver first_anotherbranch_commit &&
	git -C myclient fetch origin anotherbranch:refs/heads/anotherbranch &&
	git -C myclient checkout anotherbranch &&
	test_commit_bulk -C myclient 255 &&

	# The new commit that the client wants to fetch.
	git -C myserver checkout main &&
	test_commit -C myserver to_fetch &&

	# The client will send (as "have"s) all 256 commits in anotherbranch
	# first. The 256th commit is common between the client and the server,
	# and should reset in_vain. This allows negotiation to continue until
	# the client reports that first_anotherbranch_commit is common.
	GIT_TRACE2_EVENT="$(pwd)/trace2" git -C myclient fetch --progress origin main 2>log &&
	grep \"key\":\"total_rounds\",\"value\":\"6\" trace2 &&
	test_i18ngrep "Total 3 " log

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/myserver/.git/
[main (root-commit) ffb0a27] first_main_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first_main_commit.t
Cloning into 'myclient'...
ffb0a27b810158186f8bd3976071db6116b3578d
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          765 (         0 duplicates                  )
      blobs  :          255 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          255 (         0 duplicates        250 deltas of        250 attempts)
      commits:          255 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            256
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        260
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =      70931 /      70931
---------------------------------------------------------------------

Your branch is ahead of 'origin/main' by 255 commits.
  (use "git push" to publish your local commits)
Switched to a new branch 'anotherbranch'
[anotherbranch (root-commit) 3ce43a5] first_anotherbranch_commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 first_anotherbranch_commit.t
 create mode 100644 first_main_commit.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/myserver
 * [new branch]      anotherbranch              -> anotherbranch
 * [new tag]         first_anotherbranch_commit -> first_anotherbranch_commit
 * [new branch]      anotherbranch              -> origin/anotherbranch
Switched to branch 'anotherbranch'
3ce43a5987a941dc71fca416ac29ce6a49f8aba6
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          510 (       255 duplicates                  )
      blobs  :            0 (       255 duplicates          0 deltas of          0 attempts)
      trees  :          255 (         0 duplicates        250 deltas of        250 attempts)
      commits:          255 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            257
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        256
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      65661 /      65661
---------------------------------------------------------------------

Switched to branch 'main'
[main eab4ed1] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
{"event":"data","sid":"20221228T075046.839396Z-Hc64317c2-P0000515e","thread":"main","time":"2022-12-28T07:50:47.006422Z","file":"fetch-pack.c","line":1753,"repo":1,"t_abs":0.171003,"t_rel":0.103667,"nesting":2,"category":"negotiation_v2","key":"total_rounds","value":"6"}
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
ok 44 - in_vain resetted upon ACK

expecting success of 5500.45 'fetch in shallow repo unreachable shallow objects': 
	(
		git clone --bare --branch B --single-branch "file://$(pwd)/." no-reflog &&
		git clone --depth 1 "file://$(pwd)/no-reflog" shallow9 &&
		cd no-reflog &&
		git tag -d TAGB1 TAGB2 &&
		git update-ref refs/heads/B B~~ &&
		git gc --prune=now &&
		cd ../shallow9 &&
		git fetch origin &&
		git fsck --no-dangling
	)

Cloning into bare repository 'no-reflog'...
Cloning into 'shallow9'...
Deleted tag 'TAGB1' (was a540a4d)
Deleted tag 'TAGB2' (was 9ca64d8)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/no-reflog
 + 9ca64d8...437bc54 B          -> origin/B  (forced update)
ok 45 - fetch in shallow repo unreachable shallow objects

expecting success of 5500.46 'fetch creating new shallow root': 
	(
		git clone "file://$(pwd)/." shallow10 &&
		git commit --allow-empty -m empty &&
		cd shallow10 &&
		git fetch --depth=1 --progress 2>actual &&
		# This should fetch only the empty commit, no tree or
		# blob objects
		test_i18ngrep "remote: Total 1" actual
	)

Cloning into 'shallow10'...
[B 65a21ef] empty
 Author: A U Thor <author@example.com>
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0        
ok 46 - fetch creating new shallow root

expecting success of 5500.47 'setup tests for the --stdin parameter': 
	for head in C D E F
	do
		add $head || return 1
	done &&
	for head in A B C D E F
	do
		git tag $head $head || return 1
	done &&
	cat >input <<-\EOF &&
	refs/heads/C
	refs/heads/A
	refs/heads/D
	refs/tags/C
	refs/heads/B
	refs/tags/A
	refs/heads/E
	refs/tags/B
	refs/tags/E
	refs/tags/D
	EOF
	sort <input >expect &&
	(
		echo refs/heads/E &&
		echo refs/tags/E &&
		cat input
	) >input.dup

ok 47 - setup tests for the --stdin parameter

expecting success of 5500.48 'setup fetch refs from cmdline v[12]': 
	cp -r client client0 &&
	cp -r client client1 &&
	cp -r client client2

ok 48 - setup fetch refs from cmdline v[12]

expecting success of 5500.49 'protocol.version= fetch refs from cmdline': 
		(
			cd client &&
			GIT_TEST_PROTOCOL_VERSION= git fetch-pack --no-progress .. $(cat ../input)
		) >output &&
		cut -d ' ' -f 2 <output | sort >actual &&
		test_cmp expect actual
	
ok 49 - protocol.version= fetch refs from cmdline

expecting success of 5500.50 'protocol.version=0 fetch refs from cmdline': 
		(
			cd client0 &&
			GIT_TEST_PROTOCOL_VERSION=0 git fetch-pack --no-progress .. $(cat ../input)
		) >output &&
		cut -d ' ' -f 2 <output | sort >actual &&
		test_cmp expect actual
	
ok 50 - protocol.version=0 fetch refs from cmdline

expecting success of 5500.51 'protocol.version=1 fetch refs from cmdline': 
		(
			cd client1 &&
			GIT_TEST_PROTOCOL_VERSION=1 git fetch-pack --no-progress .. $(cat ../input)
		) >output &&
		cut -d ' ' -f 2 <output | sort >actual &&
		test_cmp expect actual
	
ok 51 - protocol.version=1 fetch refs from cmdline

expecting success of 5500.52 'protocol.version=2 fetch refs from cmdline': 
		(
			cd client2 &&
			GIT_TEST_PROTOCOL_VERSION=2 git fetch-pack --no-progress .. $(cat ../input)
		) >output &&
		cut -d ' ' -f 2 <output | sort >actual &&
		test_cmp expect actual
	
ok 52 - protocol.version=2 fetch refs from cmdline

expecting success of 5500.53 'fetch refs from stdin': 
	(
		cd client &&
		git fetch-pack --stdin --no-progress .. <../input
	) >output &&
	cut -d " " -f 2 <output | sort >actual &&
	test_cmp expect actual

ok 53 - fetch refs from stdin

expecting success of 5500.54 'fetch mixed refs from cmdline and stdin': 
	(
		cd client &&
		tail -n +5 ../input |
		git fetch-pack --stdin --no-progress .. $(head -n 4 ../input)
	) >output &&
	cut -d " " -f 2 <output | sort >actual &&
	test_cmp expect actual

ok 54 - fetch mixed refs from cmdline and stdin

expecting success of 5500.55 'test duplicate refs from stdin': 
	(
	cd client &&
	git fetch-pack --stdin --no-progress .. <../input.dup
	) >output &&
	cut -d " " -f 2 <output | sort >actual &&
	test_cmp expect actual

ok 55 - test duplicate refs from stdin

expecting success of 5500.56 'set up tests of missing reference': 
	cat >expect-error <<-\EOF
	error: no such remote ref refs/heads/xyzzy
	EOF

ok 56 - set up tests of missing reference

expecting success of 5500.57 'test lonely missing ref': 
	(
		cd client &&
		test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy 2>../error-m
	) &&
	test_cmp expect-error error-m

ok 57 - test lonely missing ref

expecting success of 5500.58 'test missing ref after existing': 
	(
		cd client &&
		test_must_fail git fetch-pack --no-progress .. refs/heads/A refs/heads/xyzzy 2>../error-em
	) &&
	test_cmp expect-error error-em

f85e353c1b377970afbb804118d9135948598eea refs/heads/A
ok 58 - test missing ref after existing

expecting success of 5500.59 'test missing ref before existing': 
	(
		cd client &&
		test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy refs/heads/A 2>../error-me
	) &&
	test_cmp expect-error error-me

f85e353c1b377970afbb804118d9135948598eea refs/heads/A
ok 59 - test missing ref before existing

expecting success of 5500.60 'test --all, --depth, and explicit head': 
	(
		cd client &&
		git fetch-pack --no-progress --all --depth=1 .. refs/heads/A
	) >out-adh 2>error-adh

ok 60 - test --all, --depth, and explicit head

expecting success of 5500.61 'test --all, --depth, and explicit tag': 
	git tag OLDTAG refs/heads/B~5 &&
	(
		cd client &&
		git fetch-pack --no-progress --all --depth=1 .. refs/tags/OLDTAG
	) >out-adt 2>error-adt

ok 61 - test --all, --depth, and explicit tag

expecting success of 5500.62 'test --all with tag to non-tip': 
	git commit --allow-empty -m non-tip &&
	git commit --allow-empty -m tip &&
	git tag -m "annotated" non-tip HEAD^ &&
	(
		cd client &&
		git fetch-pack --all ..
	)

[B a108744] non-tip
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[B 7012540] tip
 Author: A U Thor <author@example.com>
remote: Enumerating objects: 30, done.        
remote: Counting objects:   3% (1/30)        
remote: Counting objects:   6% (2/30)        
remote: Counting objects:  10% (3/30)        
remote: Counting objects:  13% (4/30)        
remote: Counting objects:  16% (5/30)        
remote: Counting objects:  20% (6/30)        
remote: Counting objects:  23% (7/30)        
remote: Counting objects:  26% (8/30)        
remote: Counting objects:  30% (9/30)        
remote: Counting objects:  33% (10/30)        
remote: Counting objects:  36% (11/30)        
remote: Counting objects:  40% (12/30)        
remote: Counting objects:  43% (13/30)        
remote: Counting objects:  46% (14/30)        
remote: Counting objects:  50% (15/30)        
remote: Counting objects:  53% (16/30)        
remote: Counting objects:  56% (17/30)        
remote: Counting objects:  60% (18/30)        
remote: Counting objects:  63% (19/30)        
remote: Counting objects:  66% (20/30)        
remote: Counting objects:  70% (21/30)        
remote: Counting objects:  73% (22/30)        
remote: Counting objects:  76% (23/30)        
remote: Counting objects:  80% (24/30)        
remote: Counting objects:  83% (25/30)        
remote: Counting objects:  86% (26/30)        
remote: Counting objects:  90% (27/30)        
remote: Counting objects:  93% (28/30)        
remote: Counting objects:  96% (29/30)        
remote: Counting objects: 100% (30/30)        
remote: Counting objects: 100% (30/30), done.        
remote: Compressing objects:   7% (1/14)        
remote: Compressing objects:  14% (2/14)        
remote: Compressing objects:  21% (3/14)        
remote: Compressing objects:  28% (4/14)        
remote: Compressing objects:  35% (5/14)        
remote: Compressing objects:  42% (6/14)        
remote: Compressing objects:  50% (7/14)        
remote: Compressing objects:  57% (8/14)        
remote: Compressing objects:  64% (9/14)        
remote: Compressing objects:  71% (10/14)        
remote: Compressing objects:  78% (11/14)        
remote: Compressing objects:  85% (12/14)        
remote: Compressing objects:  92% (13/14)        
remote: Compressing objects: 100% (14/14)        
remote: Compressing objects: 100% (14/14), done.        
remote: Total 30 (delta 3), reused 0 (delta 0), pack-reused 0        
70125409534829fdfcb67d82de93f86282574cb4 HEAD
f85e353c1b377970afbb804118d9135948598eea refs/heads/A
70125409534829fdfcb67d82de93f86282574cb4 refs/heads/B
3d5c8ebfa0aa926cf58f8a65e108ca477828f5ff refs/heads/C
16644d392d426c8606c67151f6ac3b44796e76fc refs/heads/D
b6546657bdd589ca90eccc3d8e31a40055032fa8 refs/heads/E
94eb8a0d83d848a408ed329ae7306a07ed133d88 refs/heads/F
f85e353c1b377970afbb804118d9135948598eea refs/tags/A
65a21eff2b8d30e2baf5b70199cd90d3cf3e7bac refs/tags/B
3d5c8ebfa0aa926cf58f8a65e108ca477828f5ff refs/tags/C
16644d392d426c8606c67151f6ac3b44796e76fc refs/tags/D
b6546657bdd589ca90eccc3d8e31a40055032fa8 refs/tags/E
94eb8a0d83d848a408ed329ae7306a07ed133d88 refs/tags/F
27f494dfb7e67d2f9cd2282404adf1d97581aa34 refs/tags/OLDTAG
10e1d7b51cacf2f0478498681177f0e6f1e8392d refs/tags/TAGA1
f85e353c1b377970afbb804118d9135948598eea refs/tags/TAGA2
a540a4ddd2b16a9fe66e9539d5ec103c68052eaa refs/tags/TAGB1
9ca64d8fd8038b086badca1d11ccd8bbcfdeace1 refs/tags/TAGB2
05645eefa2f86f93b59fe4ce7ae03d2b7518eda3 refs/tags/non-tip
ok 62 - test --all with tag to non-tip

expecting success of 5500.63 'test --all wrt tag to non-commits': 
	# create tag-to-{blob,tree,commit,tag}, making sure all tagged objects
	# are reachable only via created tag references.
	blob=$(echo "hello blob" | git hash-object -t blob -w --stdin) &&
	git tag -a -m "tag -> blob" tag-to-blob $blob &&

	tree=$(printf "100644 blob $blob\tfile" | git mktree) &&
	git tag -a -m "tag -> tree" tag-to-tree $tree &&

	tree2=$(printf "100644 blob $blob\tfile2" | git mktree) &&
	commit=$(git commit-tree -m "hello commit" $tree) &&
	git tag -a -m "tag -> commit" tag-to-commit $commit &&

	blob2=$(echo "hello blob2" | git hash-object -t blob -w --stdin) &&
	tag=$(git mktag <<-EOF
		object $blob2
		type blob
		tag tag-to-blob2
		tagger author A U Thor <author@example.com> 0 +0000

		hello tag
	EOF
	) &&
	git tag -a -m "tag -> tag" tag-to-tag $tag &&

	# `fetch-pack --all` should succeed fetching all those objects.
	mkdir fetchall &&
	(
		cd fetchall &&
		git init &&
		git fetch-pack --all .. &&
		git cat-file blob $blob >/dev/null &&
		git cat-file tree $tree >/dev/null &&
		git cat-file commit $commit >/dev/null &&
		git cat-file tag $tag >/dev/null
	)

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag-to-tag 6b6a38641966e26d650cce323e028ca7e3083903^{}
hint: Disable this message with "git config advice.nestedTag false"
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/fetchall/.git/
remote: Enumerating objects: 267, done.        
remote: Counting objects:   0% (1/267)        
remote: Counting objects:   1% (3/267)        
remote: Counting objects:   2% (6/267)        
remote: Counting objects:   3% (9/267)        
remote: Counting objects:   4% (11/267)        
remote: Counting objects:   5% (14/267)        
remote: Counting objects:   6% (17/267)        
remote: Counting objects:   7% (19/267)        
remote: Counting objects:   8% (22/267)        
remote: Counting objects:   9% (25/267)        
remote: Counting objects:  10% (27/267)        
remote: Counting objects:  11% (30/267)        
remote: Counting objects:  12% (33/267)        
remote: Counting objects:  13% (35/267)        
remote: Counting objects:  14% (38/267)        
remote: Counting objects:  15% (41/267)        
remote: Counting objects:  16% (43/267)        
remote: Counting objects:  17% (46/267)        
remote: Counting objects:  18% (49/267)        
remote: Counting objects:  19% (51/267)        
remote: Counting objects:  20% (54/267)        
remote: Counting objects:  21% (57/267)        
remote: Counting objects:  22% (59/267)        
remote: Counting objects:  23% (62/267)        
remote: Counting objects:  24% (65/267)        
remote: Counting objects:  25% (67/267)        
remote: Counting objects:  26% (70/267)        
remote: Counting objects:  27% (73/267)        
remote: Counting objects:  28% (75/267)        
remote: Counting objects:  29% (78/267)        
remote: Counting objects:  30% (81/267)        
remote: Counting objects:  31% (83/267)        
remote: Counting objects:  32% (86/267)        
remote: Counting objects:  33% (89/267)        
remote: Counting objects:  34% (91/267)        
remote: Counting objects:  35% (94/267)        
remote: Counting objects:  36% (97/267)        
remote: Counting objects:  37% (99/267)        
remote: Counting objects:  38% (102/267)        
remote: Counting objects:  39% (105/267)        
remote: Counting objects:  40% (107/267)        
remote: Counting objects:  41% (110/267)        
remote: Counting objects:  42% (113/267)        
remote: Counting objects:  43% (115/267)        
remote: Counting objects:  44% (118/267)        
remote: Counting objects:  45% (121/267)        
remote: Counting objects:  46% (123/267)        
remote: Counting objects:  47% (126/267)        
remote: Counting objects:  48% (129/267)        
remote: Counting objects:  49% (131/267)        
remote: Counting objects:  50% (134/267)        
remote: Counting objects:  51% (137/267)        
remote: Counting objects:  52% (139/267)        
remote: Counting objects:  53% (142/267)        
remote: Counting objects:  54% (145/267)        
remote: Counting objects:  55% (147/267)        
remote: Counting objects:  56% (150/267)        
remote: Counting objects:  57% (153/267)        
remote: Counting objects:  58% (155/267)        
remote: Counting objects:  59% (158/267)        
remote: Counting objects:  60% (161/267)        
remote: Counting objects:  61% (163/267)        
remote: Counting objects:  62% (166/267)        
remote: Counting objects:  63% (169/267)        
remote: Counting objects:  64% (171/267)        
remote: Counting objects:  65% (174/267)        
remote: Counting objects:  66% (177/267)        
remote: Counting objects:  67% (179/267)        
remote: Counting objects:  68% (182/267)        
remote: Counting objects:  69% (185/267)        
remote: Counting objects:  70% (187/267)        
remote: Counting objects:  71% (190/267)        
remote: Counting objects:  72% (193/267)        
remote: Counting objects:  73% (195/267)        
remote: Counting objects:  74% (198/267)        
remote: Counting objects:  75% (201/267)        
remote: Counting objects:  76% (203/267)        
remote: Counting objects:  77% (206/267)        
remote: Counting objects:  78% (209/267)        
remote: Counting objects:  79% (211/267)        
remote: Counting objects:  80% (214/267)        
remote: Counting objects:  81% (217/267)        
remote: Counting objects:  82% (219/267)        
remote: Counting objects:  83% (222/267)        
remote: Counting objects:  84% (225/267)        
remote: Counting objects:  85% (227/267)        
remote: Counting objects:  86% (230/267)        
remote: Counting objects:  87% (233/267)        
remote: Counting objects:  88% (235/267)        
remote: Counting objects:  89% (238/267)        
remote: Counting objects:  90% (241/267)        
remote: Counting objects:  91% (243/267)        
remote: Counting objects:  92% (246/267)        
remote: Counting objects:  93% (249/267)        
remote: Counting objects:  94% (251/267)        
remote: Counting objects:  95% (254/267)        
remote: Counting objects:  96% (257/267)        
remote: Counting objects:  97% (259/267)        
remote: Counting objects:  98% (262/267)        
remote: Counting objects:  99% (265/267)        
remote: Counting objects: 100% (267/267)        
remote: Counting objects: 100% (267/267), done.        
remote: Compressing objects:   1% (1/96)        
remote: Compressing objects:   2% (2/96)        
remote: Compressing objects:   3% (3/96)        
remote: Compressing objects:   4% (4/96)        
remote: Compressing objects:   5% (5/96)        
remote: Compressing objects:   6% (6/96)        
remote: Compressing objects:   7% (7/96)        
remote: Compressing objects:   8% (8/96)        
remote: Compressing objects:   9% (9/96)        
remote: Compressing objects:  10% (10/96)        
remote: Compressing objects:  11% (11/96)        
remote: Compressing objects:  12% (12/96)        
remote: Compressing objects:  13% (13/96)        
remote: Compressing objects:  14% (14/96)        
remote: Compressing objects:  15% (15/96)        
remote: Compressing objects:  16% (16/96)        
remote: Compressing objects:  17% (17/96)        
remote: Compressing objects:  18% (18/96)        
remote: Compressing objects:  19% (19/96)        
remote: Compressing objects:  20% (20/96)        
remote: Compressing objects:  21% (21/96)        
remote: Compressing objects:  22% (22/96)        
remote: Compressing objects:  23% (23/96)        
remote: Compressing objects:  25% (24/96)        
remote: Compressing objects:  26% (25/96)        
remote: Compressing objects:  27% (26/96)        
remote: Compressing objects:  28% (27/96)        
remote: Compressing objects:  29% (28/96)        
remote: Compressing objects:  30% (29/96)        
remote: Compressing objects:  31% (30/96)        
remote: Compressing objects:  32% (31/96)        
remote: Compressing objects:  33% (32/96)        
remote: Compressing objects:  34% (33/96)        
remote: Compressing objects:  35% (34/96)        
remote: Compressing objects:  36% (35/96)        
remote: Compressing objects:  37% (36/96)        
remote: Compressing objects:  38% (37/96)        
remote: Compressing objects:  39% (38/96)        
remote: Compressing objects:  40% (39/96)        
remote: Compressing objects:  41% (40/96)        
remote: Compressing objects:  42% (41/96)        
remote: Compressing objects:  43% (42/96)        
remote: Compressing objects:  44% (43/96)        
remote: Compressing objects:  45% (44/96)        
remote: Compressing objects:  46% (45/96)        
remote: Compressing objects:  47% (46/96)        
remote: Compressing objects:  48% (47/96)        
remote: Compressing objects:  50% (48/96)        
remote: Compressing objects:  51% (49/96)        
remote: Compressing objects:  52% (50/96)        
remote: Compressing objects:  53% (51/96)        
remote: Compressing objects:  54% (52/96)        
remote: Compressing objects:  55% (53/96)        
remote: Compressing objects:  56% (54/96)        
remote: Compressing objects:  57% (55/96)        
remote: Compressing objects:  58% (56/96)        
remote: Compressing objects:  59% (57/96)        
remote: Compressing objects:  60% (58/96)        
remote: Compressing objects:  61% (59/96)        
remote: Compressing objects:  62% (60/96)        
remote: Compressing objects:  63% (61/96)        
remote: Compressing objects:  64% (62/96)        
remote: Compressing objects:  65% (63/96)        
remote: Compressing objects:  66% (64/96)        
remote: Compressing objects:  67% (65/96)        
remote: Compressing objects:  68% (66/96)        
remote: Compressing objects:  69% (67/96)        
remote: Compressing objects:  70% (68/96)        
remote: Compressing objects:  71% (69/96)        
remote: Compressing objects:  72% (70/96)        
remote: Compressing objects:  73% (71/96)        
remote: Compressing objects:  75% (72/96)        
remote: Compressing objects:  76% (73/96)        
remote: Compressing objects:  77% (74/96)        
remote: Compressing objects:  78% (75/96)        
remote: Compressing objects:  79% (76/96)        
remote: Compressing objects:  80% (77/96)        
remote: Compressing objects:  81% (78/96)        
remote: Compressing objects:  82% (79/96)        
remote: Compressing objects:  83% (80/96)        
remote: Compressing objects:  84% (81/96)        
remote: Compressing objects:  85% (82/96)        
remote: Compressing objects:  86% (83/96)        
remote: Compressing objects:  87% (84/96)        
remote: Compressing objects:  88% (85/96)        
remote: Compressing objects:  89% (86/96)        
remote: Compressing objects:  90% (87/96)        
remote: Compressing objects:  91% (88/96)        
remote: Compressing objects:  92% (89/96)        
remote: Compressing objects:  93% (90/96)        
remote: Compressing objects:  94% (91/96)        
remote: Compressing objects:  95% (92/96)        
remote: Compressing objects:  96% (93/96)        
remote: Compressing objects:  97% (94/96)        
remote: Compressing objects:  98% (95/96)        
remote: Compressing objects: 100% (96/96)        
remote: Compressing objects: 100% (96/96), done.        
Receiving objects:   0% (1/267)
Receiving objects:   1% (3/267)
Receiving objects:   2% (6/267)
Receiving objects:   3% (9/267)
Receiving objects:   4% (11/267)
Receiving objects:   5% (14/267)
Receiving objects:   6% (17/267)
Receiving objects:   7% (19/267)
Receiving objects:   8% (22/267)
Receiving objects:   9% (25/267)
Receiving objects:  10% (27/267)
Receiving objects:  11% (30/267)
Receiving objects:  12% (33/267)
Receiving objects:  13% (35/267)
Receiving objects:  14% (38/267)
Receiving objects:  15% (41/267)
Receiving objects:  16% (43/267)
Receiving objects:  17% (46/267)
Receiving objects:  18% (49/267)
Receiving objects:  19% (51/267)
Receiving objects:  20% (54/267)
Receiving objects:  21% (57/267)
Receiving objects:  22% (59/267)
Receiving objects:  23% (62/267)
Receiving objects:  24% (65/267)
Receiving objects:  25% (67/267)
Receiving objects:  26% (70/267)
Receiving objects:  27% (73/267)
Receiving objects:  28% (75/267)
Receiving objects:  29% (78/267)
Receiving objects:  30% (81/267)
Receiving objects:  31% (83/267)
Receiving objects:  32% (86/267)
Receiving objects:  33% (89/267)
Receiving objects:  34% (91/267)
Receiving objects:  35% (94/267)
Receiving objects:  36% (97/267)
Receiving objects:  37% (99/267)
Receiving objects:  38% (102/267)
Receiving objects:  39% (105/267)
Receiving objects:  40% (107/267)
Receiving objects:  41% (110/267)
Receiving objects:  42% (113/267)
Receiving objects:  43% (115/267)
Receiving objects:  44% (118/267)
Receiving objects:  45% (121/267)
Receiving objects:  46% (123/267)
Receiving objects:  47% (126/267)
Receiving objects:  48% (129/267)
Receiving objects:  49% (131/267)
Receiving objects:  50% (134/267)
remote: Total 267 (delta 3), reused 0 (delta 0), pack-reused 0        
Receiving objects:  51% (137/267)
Receiving objects:  52% (139/267)
Receiving objects:  53% (142/267)
Receiving objects:  54% (145/267)
Receiving objects:  55% (147/267)
Receiving objects:  56% (150/267)
Receiving objects:  57% (153/267)
Receiving objects:  58% (155/267)
Receiving objects:  59% (158/267)
Receiving objects:  60% (161/267)
Receiving objects:  61% (163/267)
Receiving objects:  62% (166/267)
Receiving objects:  63% (169/267)
Receiving objects:  64% (171/267)
Receiving objects:  65% (174/267)
Receiving objects:  66% (177/267)
Receiving objects:  67% (179/267)
Receiving objects:  68% (182/267)
Receiving objects:  69% (185/267)
Receiving objects:  70% (187/267)
Receiving objects:  71% (190/267)
Receiving objects:  72% (193/267)
Receiving objects:  73% (195/267)
Receiving objects:  74% (198/267)
Receiving objects:  75% (201/267)
Receiving objects:  76% (203/267)
Receiving objects:  77% (206/267)
Receiving objects:  78% (209/267)
Receiving objects:  79% (211/267)
Receiving objects:  80% (214/267)
Receiving objects:  81% (217/267)
Receiving objects:  82% (219/267)
Receiving objects:  83% (222/267)
Receiving objects:  84% (225/267)
Receiving objects:  85% (227/267)
Receiving objects:  86% (230/267)
Receiving objects:  87% (233/267)
Receiving objects:  88% (235/267)
Receiving objects:  89% (238/267)
Receiving objects:  90% (241/267)
Receiving objects:  91% (243/267)
Receiving objects:  92% (246/267)
Receiving objects:  93% (249/267)
Receiving objects:  94% (251/267)
Receiving objects:  95% (254/267)
Receiving objects:  96% (257/267)
Receiving objects:  97% (259/267)
Receiving objects:  98% (262/267)
Receiving objects:  99% (265/267)
Receiving objects: 100% (267/267)
Receiving objects: 100% (267/267), 22.41 KiB | 82.00 KiB/s, done.
Resolving deltas:   0% (0/3)
Resolving deltas:  33% (1/3)
Resolving deltas:  66% (2/3)
Resolving deltas: 100% (3/3)
Resolving deltas: 100% (3/3), done.
keep	af36a4e38ad65488701370467da12a1dc50c78d3
70125409534829fdfcb67d82de93f86282574cb4 HEAD
f85e353c1b377970afbb804118d9135948598eea refs/heads/A
70125409534829fdfcb67d82de93f86282574cb4 refs/heads/B
3d5c8ebfa0aa926cf58f8a65e108ca477828f5ff refs/heads/C
16644d392d426c8606c67151f6ac3b44796e76fc refs/heads/D
b6546657bdd589ca90eccc3d8e31a40055032fa8 refs/heads/E
94eb8a0d83d848a408ed329ae7306a07ed133d88 refs/heads/F
f85e353c1b377970afbb804118d9135948598eea refs/tags/A
65a21eff2b8d30e2baf5b70199cd90d3cf3e7bac refs/tags/B
3d5c8ebfa0aa926cf58f8a65e108ca477828f5ff refs/tags/C
16644d392d426c8606c67151f6ac3b44796e76fc refs/tags/D
b6546657bdd589ca90eccc3d8e31a40055032fa8 refs/tags/E
94eb8a0d83d848a408ed329ae7306a07ed133d88 refs/tags/F
27f494dfb7e67d2f9cd2282404adf1d97581aa34 refs/tags/OLDTAG
10e1d7b51cacf2f0478498681177f0e6f1e8392d refs/tags/TAGA1
f85e353c1b377970afbb804118d9135948598eea refs/tags/TAGA2
a540a4ddd2b16a9fe66e9539d5ec103c68052eaa refs/tags/TAGB1
9ca64d8fd8038b086badca1d11ccd8bbcfdeace1 refs/tags/TAGB2
05645eefa2f86f93b59fe4ce7ae03d2b7518eda3 refs/tags/non-tip
ea512a1c3dd5aaa54ad2d576a06c6f070459d4a3 refs/tags/tag-to-blob
ba024ec0752d67cd32a317d736a33d06c41cfc2f refs/tags/tag-to-commit
07bbb6bb6a9d90f5a891b2be3d2c577c2c6c4483 refs/tags/tag-to-tag
149e974fb3c816a12e49f322b2fc2def0a5d46a0 refs/tags/tag-to-tree
ok 63 - test --all wrt tag to non-commits

expecting success of 5500.64 'shallow fetch with tags does not break the repository': 
	mkdir repo1 &&
	(
		cd repo1 &&
		git init &&
		test_commit 1 &&
		test_commit 2 &&
		test_commit 3 &&
		mkdir repo2 &&
		cd repo2 &&
		git init &&
		git fetch --depth=2 ../.git main:branch &&
		git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/repo1/.git/
[main (root-commit) 65a45fd] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[main 20e144b] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[main da974ad] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/repo1/repo2/.git/
From ../
 * [new branch]      main       -> branch
 * [new tag]         3          -> 3
 * [new tag]         2          -> 2
notice: HEAD points to an unborn branch (main)
ok 64 - shallow fetch with tags does not break the repository

expecting success of 5500.65 'fetch-pack can fetch a raw sha1': 
	git init hidden &&
	(
		cd hidden &&
		test_commit 1 &&
		test_commit 2 &&
		git update-ref refs/hidden/one HEAD^ &&
		git config transfer.hiderefs refs/hidden &&
		git config uploadpack.allowtipsha1inwant true
	) &&
	git fetch-pack hidden $(git -C hidden rev-parse refs/hidden/one)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/hidden/.git/
[main (root-commit) 65a45fd] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[main 20e144b] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
remote: Enumerating objects: 3, done.        
remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
65a45fd2226c99abdced79fd890b7d73e302b4d3 65a45fd2226c99abdced79fd890b7d73e302b4d3
ok 65 - fetch-pack can fetch a raw sha1

expecting success of 5500.66 'fetch-pack can fetch a raw sha1 that is advertised as a ref': 
	rm -rf server client &&
	git init server &&
	test_commit -C server 1 &&

	git init client &&
	git -C client fetch-pack ../server \
		$(git -C server rev-parse refs/heads/main)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 65a45fd] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
remote: Enumerating objects: 3, done.        
remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
65a45fd2226c99abdced79fd890b7d73e302b4d3 65a45fd2226c99abdced79fd890b7d73e302b4d3
ok 66 - fetch-pack can fetch a raw sha1 that is advertised as a ref

expecting success of 5500.67 'fetch-pack can fetch a raw sha1 overlapping a named ref': 
	rm -rf server client &&
	git init server &&
	test_commit -C server 1 &&
	test_commit -C server 2 &&

	git init client &&
	git -C client fetch-pack ../server \
		$(git -C server rev-parse refs/tags/1) refs/tags/1

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) a66e81d] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[main 83da3cf] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
remote: Enumerating objects: 3, done.        
remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0        
a66e81da1b279f1f99f1852727eacb8787d60060 refs/tags/1
a66e81da1b279f1f99f1852727eacb8787d60060 a66e81da1b279f1f99f1852727eacb8787d60060
ok 67 - fetch-pack can fetch a raw sha1 overlapping a named ref

expecting success of 5500.68 'fetch-pack cannot fetch a raw sha1 that is not advertised as a ref': 
	rm -rf server &&

	git init server &&
	test_commit -C server 5 &&
	git -C server tag -d 5 &&
	test_commit -C server 6 &&

	git init client &&
	# Some protocol versions (e.g. 2) support fetching
	# unadvertised objects, so restrict this test to v0.
	test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -C client fetch-pack ../server \
		$(git -C server rev-parse refs/heads/main^) 2>err &&
	test_i18ngrep "Server does not allow request for unadvertised object" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 9dec34e] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
Deleted tag '5' (was 9dec34e)
[main 1a4cda2] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
error: Server does not allow request for unadvertised object 9dec34eba0316983f193ddda06802b4166cf2e5a
ok 68 - fetch-pack cannot fetch a raw sha1 that is not advertised as a ref

expecting success of 5500.69 'fetch-pack --diag-url ssh+git://host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 69 - fetch-pack --diag-url ssh+git://host/repo

expecting success of 5500.70 'fetch-pack --diag-url ssh+git://host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 70 - fetch-pack --diag-url ssh+git://host/~repo

expecting success of 5500.71 'fetch-pack --diag-url ssh+git://host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 71 - fetch-pack --diag-url ssh+git://host:/repo

expecting success of 5500.72 'fetch-pack --diag-url ssh+git://host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 72 - fetch-pack --diag-url ssh+git://host:/~repo

expecting success of 5500.73 'fetch-pack --diag-url ssh+git://user@host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 73 - fetch-pack --diag-url ssh+git://user@host/repo

expecting success of 5500.74 'fetch-pack --diag-url ssh+git://user@host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 74 - fetch-pack --diag-url ssh+git://user@host/~repo

expecting success of 5500.75 'fetch-pack --diag-url ssh+git://user@host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 75 - fetch-pack --diag-url ssh+git://user@host:/repo

expecting success of 5500.76 'fetch-pack --diag-url ssh+git://user@host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 76 - fetch-pack --diag-url ssh+git://user@host:/~repo

expecting success of 5500.77 'fetch-pack --diag-url ssh+git://user@[::1]/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 77 - fetch-pack --diag-url ssh+git://user@[::1]/repo

expecting success of 5500.78 'fetch-pack --diag-url ssh+git://user@[::1]/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 78 - fetch-pack --diag-url ssh+git://user@[::1]/~repo

expecting success of 5500.79 'fetch-pack --diag-url ssh+git://user@[::1]:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 79 - fetch-pack --diag-url ssh+git://user@[::1]:/repo

expecting success of 5500.80 'fetch-pack --diag-url ssh+git://user@[::1]:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 80 - fetch-pack --diag-url ssh+git://user@[::1]:/~repo

expecting success of 5500.81 'fetch-pack --diag-url ssh+git://user@::1/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 81 - fetch-pack --diag-url ssh+git://user@::1/repo

expecting success of 5500.82 'fetch-pack --diag-url ssh+git://user@::1/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 82 - fetch-pack --diag-url ssh+git://user@::1/~repo

expecting success of 5500.83 'fetch-pack --diag-url ssh+git://user@::1:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 83 - fetch-pack --diag-url ssh+git://user@::1:/repo

expecting success of 5500.84 'fetch-pack --diag-url ssh+git://user@::1:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 84 - fetch-pack --diag-url ssh+git://user@::1:/~repo

expecting success of 5500.85 'fetch-pack --diag-url ssh+git://host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 85 - fetch-pack --diag-url ssh+git://host:22/repo

expecting success of 5500.86 'fetch-pack --diag-url ssh+git://User@host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 86 - fetch-pack --diag-url ssh+git://User@host:22/repo

expecting success of 5500.87 'fetch-pack --diag-url ssh+git://User@[::1]:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 87 - fetch-pack --diag-url ssh+git://User@[::1]:22/repo

expecting success of 5500.88 'fetch-pack --diag-url git+ssh://host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 88 - fetch-pack --diag-url git+ssh://host/repo

expecting success of 5500.89 'fetch-pack --diag-url git+ssh://host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 89 - fetch-pack --diag-url git+ssh://host/~repo

expecting success of 5500.90 'fetch-pack --diag-url git+ssh://host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 90 - fetch-pack --diag-url git+ssh://host:/repo

expecting success of 5500.91 'fetch-pack --diag-url git+ssh://host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 91 - fetch-pack --diag-url git+ssh://host:/~repo

expecting success of 5500.92 'fetch-pack --diag-url git+ssh://user@host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 92 - fetch-pack --diag-url git+ssh://user@host/repo

expecting success of 5500.93 'fetch-pack --diag-url git+ssh://user@host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 93 - fetch-pack --diag-url git+ssh://user@host/~repo

expecting success of 5500.94 'fetch-pack --diag-url git+ssh://user@host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 94 - fetch-pack --diag-url git+ssh://user@host:/repo

expecting success of 5500.95 'fetch-pack --diag-url git+ssh://user@host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 95 - fetch-pack --diag-url git+ssh://user@host:/~repo

expecting success of 5500.96 'fetch-pack --diag-url git+ssh://user@[::1]/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 96 - fetch-pack --diag-url git+ssh://user@[::1]/repo

expecting success of 5500.97 'fetch-pack --diag-url git+ssh://user@[::1]/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 97 - fetch-pack --diag-url git+ssh://user@[::1]/~repo

expecting success of 5500.98 'fetch-pack --diag-url git+ssh://user@[::1]:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 98 - fetch-pack --diag-url git+ssh://user@[::1]:/repo

expecting success of 5500.99 'fetch-pack --diag-url git+ssh://user@[::1]:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 99 - fetch-pack --diag-url git+ssh://user@[::1]:/~repo

expecting success of 5500.100 'fetch-pack --diag-url git+ssh://user@::1/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 100 - fetch-pack --diag-url git+ssh://user@::1/repo

expecting success of 5500.101 'fetch-pack --diag-url git+ssh://user@::1/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 101 - fetch-pack --diag-url git+ssh://user@::1/~repo

expecting success of 5500.102 'fetch-pack --diag-url git+ssh://user@::1:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 102 - fetch-pack --diag-url git+ssh://user@::1:/repo

expecting success of 5500.103 'fetch-pack --diag-url git+ssh://user@::1:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 103 - fetch-pack --diag-url git+ssh://user@::1:/~repo

expecting success of 5500.104 'fetch-pack --diag-url git+ssh://host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 104 - fetch-pack --diag-url git+ssh://host:22/repo

expecting success of 5500.105 'fetch-pack --diag-url git+ssh://User@host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 105 - fetch-pack --diag-url git+ssh://User@host:22/repo

expecting success of 5500.106 'fetch-pack --diag-url git+ssh://User@[::1]:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 106 - fetch-pack --diag-url git+ssh://User@[::1]:22/repo

expecting success of 5500.107 'fetch-pack --diag-url git://host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 107 - fetch-pack --diag-url git://host/repo

expecting success of 5500.108 'fetch-pack --diag-url git://host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 108 - fetch-pack --diag-url git://host/~repo

expecting success of 5500.109 'fetch-pack --diag-url git://host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 109 - fetch-pack --diag-url git://host:/repo

expecting success of 5500.110 'fetch-pack --diag-url git://host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 110 - fetch-pack --diag-url git://host:/~repo

expecting success of 5500.111 'fetch-pack --diag-url git://user@host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 111 - fetch-pack --diag-url git://user@host/repo

expecting success of 5500.112 'fetch-pack --diag-url git://user@host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 112 - fetch-pack --diag-url git://user@host/~repo

expecting success of 5500.113 'fetch-pack --diag-url git://user@host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 113 - fetch-pack --diag-url git://user@host:/repo

expecting success of 5500.114 'fetch-pack --diag-url git://user@host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 114 - fetch-pack --diag-url git://user@host:/~repo

expecting success of 5500.115 'fetch-pack --diag-url git://user@[::1]/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 115 - fetch-pack --diag-url git://user@[::1]/repo

expecting success of 5500.116 'fetch-pack --diag-url git://user@[::1]/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 116 - fetch-pack --diag-url git://user@[::1]/~repo

expecting success of 5500.117 'fetch-pack --diag-url git://user@[::1]:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 117 - fetch-pack --diag-url git://user@[::1]:/repo

expecting success of 5500.118 'fetch-pack --diag-url git://user@[::1]:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 118 - fetch-pack --diag-url git://user@[::1]:/~repo

expecting success of 5500.119 'fetch-pack --diag-url git://user@::1/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 119 - fetch-pack --diag-url git://user@::1/repo

expecting success of 5500.120 'fetch-pack --diag-url git://user@::1/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 120 - fetch-pack --diag-url git://user@::1/~repo

expecting success of 5500.121 'fetch-pack --diag-url git://user@::1:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 121 - fetch-pack --diag-url git://user@::1:/repo

expecting success of 5500.122 'fetch-pack --diag-url git://user@::1:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 122 - fetch-pack --diag-url git://user@::1:/~repo

expecting success of 5500.123 'fetch-pack --diag-url git://host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 123 - fetch-pack --diag-url git://host:22/repo

expecting success of 5500.124 'fetch-pack --diag-url git://User@host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 124 - fetch-pack --diag-url git://User@host:22/repo

expecting success of 5500.125 'fetch-pack --diag-url git://User@[::1]:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 125 - fetch-pack --diag-url git://User@[::1]:22/repo

expecting success of 5500.126 'fetch-pack --diag-url ssh://host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 126 - fetch-pack --diag-url ssh://host/repo

expecting success of 5500.127 'fetch-pack --diag-url ssh://host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 127 - fetch-pack --diag-url ssh://host/~repo

expecting success of 5500.128 'fetch-pack --diag-url ssh://host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 128 - fetch-pack --diag-url ssh://host:/repo

expecting success of 5500.129 'fetch-pack --diag-url ssh://host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 129 - fetch-pack --diag-url ssh://host:/~repo

expecting success of 5500.130 'fetch-pack --diag-url ssh://user@host/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 130 - fetch-pack --diag-url ssh://user@host/repo

expecting success of 5500.131 'fetch-pack --diag-url ssh://user@host/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 131 - fetch-pack --diag-url ssh://user@host/~repo

expecting success of 5500.132 'fetch-pack --diag-url ssh://user@host:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 132 - fetch-pack --diag-url ssh://user@host:/repo

expecting success of 5500.133 'fetch-pack --diag-url ssh://user@host:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 133 - fetch-pack --diag-url ssh://user@host:/~repo

expecting success of 5500.134 'fetch-pack --diag-url ssh://user@[::1]/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 134 - fetch-pack --diag-url ssh://user@[::1]/repo

expecting success of 5500.135 'fetch-pack --diag-url ssh://user@[::1]/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 135 - fetch-pack --diag-url ssh://user@[::1]/~repo

expecting success of 5500.136 'fetch-pack --diag-url ssh://user@[::1]:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 136 - fetch-pack --diag-url ssh://user@[::1]:/repo

expecting success of 5500.137 'fetch-pack --diag-url ssh://user@[::1]:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 137 - fetch-pack --diag-url ssh://user@[::1]:/~repo

expecting success of 5500.138 'fetch-pack --diag-url ssh://user@::1/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 138 - fetch-pack --diag-url ssh://user@::1/repo

expecting success of 5500.139 'fetch-pack --diag-url ssh://user@::1/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 139 - fetch-pack --diag-url ssh://user@::1/~repo

expecting success of 5500.140 'fetch-pack --diag-url ssh://user@::1:/repo': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 140 - fetch-pack --diag-url ssh://user@::1:/repo

expecting success of 5500.141 'fetch-pack --diag-url ssh://user@::1:/~repo': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 141 - fetch-pack --diag-url ssh://user@::1:/~repo

expecting success of 5500.142 'fetch-pack --diag-url ssh://host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 142 - fetch-pack --diag-url ssh://host:22/repo

expecting success of 5500.143 'fetch-pack --diag-url ssh://User@host:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 143 - fetch-pack --diag-url ssh://User@host:22/repo

expecting success of 5500.144 'fetch-pack --diag-url ssh://User@[::1]:22/repo': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 144 - fetch-pack --diag-url ssh://User@[::1]:22/repo

expecting success of 5500.145 'fetch-pack --diag-url file://User@[::1]/repo': 
			check_prot_path $p://$h/$r $p "/$r"
		
ok 145 - fetch-pack --diag-url file://User@[::1]/repo

ok 146 # skip fetch-pack --diag-url file://User@[::1]/repo (missing MINGW)

ok 147 # skip fetch-pack --diag-url file:///repo (missing MINGW)

expecting success of 5500.148 'fetch-pack --diag-url file://User@[::1]/~repo': 
			check_prot_path $p://$h/~$r $p "/~$r"
		
ok 148 - fetch-pack --diag-url file://User@[::1]/~repo

ok 149 # skip fetch-pack --diag-url file://User@[::1]/~repo (missing MINGW)

expecting success of 5500.150 'fetch-pack --diag-url ./nohost:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 150 - fetch-pack --diag-url ./nohost:repo

expecting success of 5500.151 'fetch-pack --diag-url ./file:nohost/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 151 - fetch-pack --diag-url ./file:nohost/~repo

expecting success of 5500.152 'fetch-pack --diag-url ./nohost:12:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 152 - fetch-pack --diag-url ./nohost:12:repo

expecting success of 5500.153 'fetch-pack --diag-url ./file:nohost:12/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 153 - fetch-pack --diag-url ./file:nohost:12/~repo

expecting success of 5500.154 'fetch-pack --diag-url ./[::1]:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 154 - fetch-pack --diag-url ./[::1]:repo

expecting success of 5500.155 'fetch-pack --diag-url ./file:[::1]/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 155 - fetch-pack --diag-url ./file:[::1]/~repo

expecting success of 5500.156 'fetch-pack --diag-url ./[::1]:23:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 156 - fetch-pack --diag-url ./[::1]:23:repo

expecting success of 5500.157 'fetch-pack --diag-url ./file:[::1]:23/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 157 - fetch-pack --diag-url ./file:[::1]:23/~repo

expecting success of 5500.158 'fetch-pack --diag-url ./[:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 158 - fetch-pack --diag-url ./[:repo

expecting success of 5500.159 'fetch-pack --diag-url ./file:[/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 159 - fetch-pack --diag-url ./file:[/~repo

expecting success of 5500.160 'fetch-pack --diag-url ./[:aa:repo': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 160 - fetch-pack --diag-url ./[:aa:repo

expecting success of 5500.161 'fetch-pack --diag-url ./file:[:aa/~repo': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 161 - fetch-pack --diag-url ./file:[:aa/~repo

expecting success of 5500.162 'fetch-pack --diag-url host:repo': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 162 - fetch-pack --diag-url host:repo

expecting success of 5500.163 'fetch-pack --diag-url host:/~repo': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 163 - fetch-pack --diag-url host:/~repo

expecting success of 5500.164 'fetch-pack --diag-url [::1]:repo': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 164 - fetch-pack --diag-url [::1]:repo

expecting success of 5500.165 'fetch-pack --diag-url [::1]:/~repo': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 165 - fetch-pack --diag-url [::1]:/~repo

expecting success of 5500.166 'fetch-pack --diag-url ssh+git://host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 166 - fetch-pack --diag-url ssh+git://host/re:po

expecting success of 5500.167 'fetch-pack --diag-url ssh+git://host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 167 - fetch-pack --diag-url ssh+git://host/~re:po

expecting success of 5500.168 'fetch-pack --diag-url ssh+git://host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 168 - fetch-pack --diag-url ssh+git://host:/re:po

expecting success of 5500.169 'fetch-pack --diag-url ssh+git://host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 169 - fetch-pack --diag-url ssh+git://host:/~re:po

expecting success of 5500.170 'fetch-pack --diag-url ssh+git://user@host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 170 - fetch-pack --diag-url ssh+git://user@host/re:po

expecting success of 5500.171 'fetch-pack --diag-url ssh+git://user@host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 171 - fetch-pack --diag-url ssh+git://user@host/~re:po

expecting success of 5500.172 'fetch-pack --diag-url ssh+git://user@host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 172 - fetch-pack --diag-url ssh+git://user@host:/re:po

expecting success of 5500.173 'fetch-pack --diag-url ssh+git://user@host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 173 - fetch-pack --diag-url ssh+git://user@host:/~re:po

expecting success of 5500.174 'fetch-pack --diag-url ssh+git://user@[::1]/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 174 - fetch-pack --diag-url ssh+git://user@[::1]/re:po

expecting success of 5500.175 'fetch-pack --diag-url ssh+git://user@[::1]/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 175 - fetch-pack --diag-url ssh+git://user@[::1]/~re:po

expecting success of 5500.176 'fetch-pack --diag-url ssh+git://user@[::1]:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 176 - fetch-pack --diag-url ssh+git://user@[::1]:/re:po

expecting success of 5500.177 'fetch-pack --diag-url ssh+git://user@[::1]:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 177 - fetch-pack --diag-url ssh+git://user@[::1]:/~re:po

expecting success of 5500.178 'fetch-pack --diag-url ssh+git://user@::1/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 178 - fetch-pack --diag-url ssh+git://user@::1/re:po

expecting success of 5500.179 'fetch-pack --diag-url ssh+git://user@::1/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 179 - fetch-pack --diag-url ssh+git://user@::1/~re:po

expecting success of 5500.180 'fetch-pack --diag-url ssh+git://user@::1:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 180 - fetch-pack --diag-url ssh+git://user@::1:/re:po

expecting success of 5500.181 'fetch-pack --diag-url ssh+git://user@::1:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 181 - fetch-pack --diag-url ssh+git://user@::1:/~re:po

expecting success of 5500.182 'fetch-pack --diag-url ssh+git://host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 182 - fetch-pack --diag-url ssh+git://host:22/re:po

expecting success of 5500.183 'fetch-pack --diag-url ssh+git://User@host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 183 - fetch-pack --diag-url ssh+git://User@host:22/re:po

expecting success of 5500.184 'fetch-pack --diag-url ssh+git://User@[::1]:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 184 - fetch-pack --diag-url ssh+git://User@[::1]:22/re:po

expecting success of 5500.185 'fetch-pack --diag-url git+ssh://host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 185 - fetch-pack --diag-url git+ssh://host/re:po

expecting success of 5500.186 'fetch-pack --diag-url git+ssh://host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 186 - fetch-pack --diag-url git+ssh://host/~re:po

expecting success of 5500.187 'fetch-pack --diag-url git+ssh://host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 187 - fetch-pack --diag-url git+ssh://host:/re:po

expecting success of 5500.188 'fetch-pack --diag-url git+ssh://host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 188 - fetch-pack --diag-url git+ssh://host:/~re:po

expecting success of 5500.189 'fetch-pack --diag-url git+ssh://user@host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 189 - fetch-pack --diag-url git+ssh://user@host/re:po

expecting success of 5500.190 'fetch-pack --diag-url git+ssh://user@host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 190 - fetch-pack --diag-url git+ssh://user@host/~re:po

expecting success of 5500.191 'fetch-pack --diag-url git+ssh://user@host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 191 - fetch-pack --diag-url git+ssh://user@host:/re:po

expecting success of 5500.192 'fetch-pack --diag-url git+ssh://user@host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 192 - fetch-pack --diag-url git+ssh://user@host:/~re:po

expecting success of 5500.193 'fetch-pack --diag-url git+ssh://user@[::1]/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 193 - fetch-pack --diag-url git+ssh://user@[::1]/re:po

expecting success of 5500.194 'fetch-pack --diag-url git+ssh://user@[::1]/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 194 - fetch-pack --diag-url git+ssh://user@[::1]/~re:po

expecting success of 5500.195 'fetch-pack --diag-url git+ssh://user@[::1]:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 195 - fetch-pack --diag-url git+ssh://user@[::1]:/re:po

expecting success of 5500.196 'fetch-pack --diag-url git+ssh://user@[::1]:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 196 - fetch-pack --diag-url git+ssh://user@[::1]:/~re:po

expecting success of 5500.197 'fetch-pack --diag-url git+ssh://user@::1/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 197 - fetch-pack --diag-url git+ssh://user@::1/re:po

expecting success of 5500.198 'fetch-pack --diag-url git+ssh://user@::1/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 198 - fetch-pack --diag-url git+ssh://user@::1/~re:po

expecting success of 5500.199 'fetch-pack --diag-url git+ssh://user@::1:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 199 - fetch-pack --diag-url git+ssh://user@::1:/re:po

expecting success of 5500.200 'fetch-pack --diag-url git+ssh://user@::1:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 200 - fetch-pack --diag-url git+ssh://user@::1:/~re:po

expecting success of 5500.201 'fetch-pack --diag-url git+ssh://host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 201 - fetch-pack --diag-url git+ssh://host:22/re:po

expecting success of 5500.202 'fetch-pack --diag-url git+ssh://User@host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 202 - fetch-pack --diag-url git+ssh://User@host:22/re:po

expecting success of 5500.203 'fetch-pack --diag-url git+ssh://User@[::1]:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 203 - fetch-pack --diag-url git+ssh://User@[::1]:22/re:po

expecting success of 5500.204 'fetch-pack --diag-url git://host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 204 - fetch-pack --diag-url git://host/re:po

expecting success of 5500.205 'fetch-pack --diag-url git://host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 205 - fetch-pack --diag-url git://host/~re:po

expecting success of 5500.206 'fetch-pack --diag-url git://host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 206 - fetch-pack --diag-url git://host:/re:po

expecting success of 5500.207 'fetch-pack --diag-url git://host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 207 - fetch-pack --diag-url git://host:/~re:po

expecting success of 5500.208 'fetch-pack --diag-url git://user@host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 208 - fetch-pack --diag-url git://user@host/re:po

expecting success of 5500.209 'fetch-pack --diag-url git://user@host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 209 - fetch-pack --diag-url git://user@host/~re:po

expecting success of 5500.210 'fetch-pack --diag-url git://user@host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 210 - fetch-pack --diag-url git://user@host:/re:po

expecting success of 5500.211 'fetch-pack --diag-url git://user@host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 211 - fetch-pack --diag-url git://user@host:/~re:po

expecting success of 5500.212 'fetch-pack --diag-url git://user@[::1]/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 212 - fetch-pack --diag-url git://user@[::1]/re:po

expecting success of 5500.213 'fetch-pack --diag-url git://user@[::1]/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 213 - fetch-pack --diag-url git://user@[::1]/~re:po

expecting success of 5500.214 'fetch-pack --diag-url git://user@[::1]:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 214 - fetch-pack --diag-url git://user@[::1]:/re:po

expecting success of 5500.215 'fetch-pack --diag-url git://user@[::1]:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 215 - fetch-pack --diag-url git://user@[::1]:/~re:po

expecting success of 5500.216 'fetch-pack --diag-url git://user@::1/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 216 - fetch-pack --diag-url git://user@::1/re:po

expecting success of 5500.217 'fetch-pack --diag-url git://user@::1/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 217 - fetch-pack --diag-url git://user@::1/~re:po

expecting success of 5500.218 'fetch-pack --diag-url git://user@::1:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 218 - fetch-pack --diag-url git://user@::1:/re:po

expecting success of 5500.219 'fetch-pack --diag-url git://user@::1:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 219 - fetch-pack --diag-url git://user@::1:/~re:po

expecting success of 5500.220 'fetch-pack --diag-url git://host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 220 - fetch-pack --diag-url git://host:22/re:po

expecting success of 5500.221 'fetch-pack --diag-url git://User@host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 221 - fetch-pack --diag-url git://User@host:22/re:po

expecting success of 5500.222 'fetch-pack --diag-url git://User@[::1]:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 222 - fetch-pack --diag-url git://User@[::1]:22/re:po

expecting success of 5500.223 'fetch-pack --diag-url ssh://host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 223 - fetch-pack --diag-url ssh://host/re:po

expecting success of 5500.224 'fetch-pack --diag-url ssh://host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 224 - fetch-pack --diag-url ssh://host/~re:po

expecting success of 5500.225 'fetch-pack --diag-url ssh://host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 225 - fetch-pack --diag-url ssh://host:/re:po

expecting success of 5500.226 'fetch-pack --diag-url ssh://host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 226 - fetch-pack --diag-url ssh://host:/~re:po

expecting success of 5500.227 'fetch-pack --diag-url ssh://user@host/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 227 - fetch-pack --diag-url ssh://user@host/re:po

expecting success of 5500.228 'fetch-pack --diag-url ssh://user@host/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 228 - fetch-pack --diag-url ssh://user@host/~re:po

expecting success of 5500.229 'fetch-pack --diag-url ssh://user@host:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 229 - fetch-pack --diag-url ssh://user@host:/re:po

expecting success of 5500.230 'fetch-pack --diag-url ssh://user@host:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 230 - fetch-pack --diag-url ssh://user@host:/~re:po

expecting success of 5500.231 'fetch-pack --diag-url ssh://user@[::1]/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 231 - fetch-pack --diag-url ssh://user@[::1]/re:po

expecting success of 5500.232 'fetch-pack --diag-url ssh://user@[::1]/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 232 - fetch-pack --diag-url ssh://user@[::1]/~re:po

expecting success of 5500.233 'fetch-pack --diag-url ssh://user@[::1]:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 233 - fetch-pack --diag-url ssh://user@[::1]:/re:po

expecting success of 5500.234 'fetch-pack --diag-url ssh://user@[::1]:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 234 - fetch-pack --diag-url ssh://user@[::1]:/~re:po

expecting success of 5500.235 'fetch-pack --diag-url ssh://user@::1/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 235 - fetch-pack --diag-url ssh://user@::1/re:po

expecting success of 5500.236 'fetch-pack --diag-url ssh://user@::1/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 236 - fetch-pack --diag-url ssh://user@::1/~re:po

expecting success of 5500.237 'fetch-pack --diag-url ssh://user@::1:/re:po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 237 - fetch-pack --diag-url ssh://user@::1:/re:po

expecting success of 5500.238 'fetch-pack --diag-url ssh://user@::1:/~re:po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 238 - fetch-pack --diag-url ssh://user@::1:/~re:po

expecting success of 5500.239 'fetch-pack --diag-url ssh://host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 239 - fetch-pack --diag-url ssh://host:22/re:po

expecting success of 5500.240 'fetch-pack --diag-url ssh://User@host:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 240 - fetch-pack --diag-url ssh://User@host:22/re:po

expecting success of 5500.241 'fetch-pack --diag-url ssh://User@[::1]:22/re:po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 241 - fetch-pack --diag-url ssh://User@[::1]:22/re:po

expecting success of 5500.242 'fetch-pack --diag-url file://User@[::1]/re:po': 
			check_prot_path $p://$h/$r $p "/$r"
		
ok 242 - fetch-pack --diag-url file://User@[::1]/re:po

ok 243 # skip fetch-pack --diag-url file://User@[::1]/re:po (missing MINGW)

ok 244 # skip fetch-pack --diag-url file:///re:po (missing MINGW)

expecting success of 5500.245 'fetch-pack --diag-url file://User@[::1]/~re:po': 
			check_prot_path $p://$h/~$r $p "/~$r"
		
ok 245 - fetch-pack --diag-url file://User@[::1]/~re:po

ok 246 # skip fetch-pack --diag-url file://User@[::1]/~re:po (missing MINGW)

expecting success of 5500.247 'fetch-pack --diag-url ./nohost:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 247 - fetch-pack --diag-url ./nohost:re:po

expecting success of 5500.248 'fetch-pack --diag-url ./file:nohost/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 248 - fetch-pack --diag-url ./file:nohost/~re:po

expecting success of 5500.249 'fetch-pack --diag-url ./nohost:12:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 249 - fetch-pack --diag-url ./nohost:12:re:po

expecting success of 5500.250 'fetch-pack --diag-url ./file:nohost:12/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 250 - fetch-pack --diag-url ./file:nohost:12/~re:po

expecting success of 5500.251 'fetch-pack --diag-url ./[::1]:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 251 - fetch-pack --diag-url ./[::1]:re:po

expecting success of 5500.252 'fetch-pack --diag-url ./file:[::1]/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 252 - fetch-pack --diag-url ./file:[::1]/~re:po

expecting success of 5500.253 'fetch-pack --diag-url ./[::1]:23:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 253 - fetch-pack --diag-url ./[::1]:23:re:po

expecting success of 5500.254 'fetch-pack --diag-url ./file:[::1]:23/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 254 - fetch-pack --diag-url ./file:[::1]:23/~re:po

expecting success of 5500.255 'fetch-pack --diag-url ./[:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 255 - fetch-pack --diag-url ./[:re:po

expecting success of 5500.256 'fetch-pack --diag-url ./file:[/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 256 - fetch-pack --diag-url ./file:[/~re:po

expecting success of 5500.257 'fetch-pack --diag-url ./[:aa:re:po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 257 - fetch-pack --diag-url ./[:aa:re:po

expecting success of 5500.258 'fetch-pack --diag-url ./file:[:aa/~re:po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 258 - fetch-pack --diag-url ./file:[:aa/~re:po

expecting success of 5500.259 'fetch-pack --diag-url host:re:po': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 259 - fetch-pack --diag-url host:re:po

expecting success of 5500.260 'fetch-pack --diag-url host:/~re:po': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 260 - fetch-pack --diag-url host:/~re:po

expecting success of 5500.261 'fetch-pack --diag-url [::1]:re:po': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 261 - fetch-pack --diag-url [::1]:re:po

expecting success of 5500.262 'fetch-pack --diag-url [::1]:/~re:po': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 262 - fetch-pack --diag-url [::1]:/~re:po

expecting success of 5500.263 'fetch-pack --diag-url ssh+git://host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 263 - fetch-pack --diag-url ssh+git://host/re/po

expecting success of 5500.264 'fetch-pack --diag-url ssh+git://host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 264 - fetch-pack --diag-url ssh+git://host/~re/po

expecting success of 5500.265 'fetch-pack --diag-url ssh+git://host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 265 - fetch-pack --diag-url ssh+git://host:/re/po

expecting success of 5500.266 'fetch-pack --diag-url ssh+git://host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 266 - fetch-pack --diag-url ssh+git://host:/~re/po

expecting success of 5500.267 'fetch-pack --diag-url ssh+git://user@host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 267 - fetch-pack --diag-url ssh+git://user@host/re/po

expecting success of 5500.268 'fetch-pack --diag-url ssh+git://user@host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 268 - fetch-pack --diag-url ssh+git://user@host/~re/po

expecting success of 5500.269 'fetch-pack --diag-url ssh+git://user@host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 269 - fetch-pack --diag-url ssh+git://user@host:/re/po

expecting success of 5500.270 'fetch-pack --diag-url ssh+git://user@host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 270 - fetch-pack --diag-url ssh+git://user@host:/~re/po

expecting success of 5500.271 'fetch-pack --diag-url ssh+git://user@[::1]/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 271 - fetch-pack --diag-url ssh+git://user@[::1]/re/po

expecting success of 5500.272 'fetch-pack --diag-url ssh+git://user@[::1]/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 272 - fetch-pack --diag-url ssh+git://user@[::1]/~re/po

expecting success of 5500.273 'fetch-pack --diag-url ssh+git://user@[::1]:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 273 - fetch-pack --diag-url ssh+git://user@[::1]:/re/po

expecting success of 5500.274 'fetch-pack --diag-url ssh+git://user@[::1]:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 274 - fetch-pack --diag-url ssh+git://user@[::1]:/~re/po

expecting success of 5500.275 'fetch-pack --diag-url ssh+git://user@::1/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 275 - fetch-pack --diag-url ssh+git://user@::1/re/po

expecting success of 5500.276 'fetch-pack --diag-url ssh+git://user@::1/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 276 - fetch-pack --diag-url ssh+git://user@::1/~re/po

expecting success of 5500.277 'fetch-pack --diag-url ssh+git://user@::1:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 277 - fetch-pack --diag-url ssh+git://user@::1:/re/po

expecting success of 5500.278 'fetch-pack --diag-url ssh+git://user@::1:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 278 - fetch-pack --diag-url ssh+git://user@::1:/~re/po

expecting success of 5500.279 'fetch-pack --diag-url ssh+git://host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 279 - fetch-pack --diag-url ssh+git://host:22/re/po

expecting success of 5500.280 'fetch-pack --diag-url ssh+git://User@host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 280 - fetch-pack --diag-url ssh+git://User@host:22/re/po

expecting success of 5500.281 'fetch-pack --diag-url ssh+git://User@[::1]:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 281 - fetch-pack --diag-url ssh+git://User@[::1]:22/re/po

expecting success of 5500.282 'fetch-pack --diag-url git+ssh://host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 282 - fetch-pack --diag-url git+ssh://host/re/po

expecting success of 5500.283 'fetch-pack --diag-url git+ssh://host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 283 - fetch-pack --diag-url git+ssh://host/~re/po

expecting success of 5500.284 'fetch-pack --diag-url git+ssh://host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 284 - fetch-pack --diag-url git+ssh://host:/re/po

expecting success of 5500.285 'fetch-pack --diag-url git+ssh://host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 285 - fetch-pack --diag-url git+ssh://host:/~re/po

expecting success of 5500.286 'fetch-pack --diag-url git+ssh://user@host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 286 - fetch-pack --diag-url git+ssh://user@host/re/po

expecting success of 5500.287 'fetch-pack --diag-url git+ssh://user@host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 287 - fetch-pack --diag-url git+ssh://user@host/~re/po

expecting success of 5500.288 'fetch-pack --diag-url git+ssh://user@host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 288 - fetch-pack --diag-url git+ssh://user@host:/re/po

expecting success of 5500.289 'fetch-pack --diag-url git+ssh://user@host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 289 - fetch-pack --diag-url git+ssh://user@host:/~re/po

expecting success of 5500.290 'fetch-pack --diag-url git+ssh://user@[::1]/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 290 - fetch-pack --diag-url git+ssh://user@[::1]/re/po

expecting success of 5500.291 'fetch-pack --diag-url git+ssh://user@[::1]/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 291 - fetch-pack --diag-url git+ssh://user@[::1]/~re/po

expecting success of 5500.292 'fetch-pack --diag-url git+ssh://user@[::1]:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 292 - fetch-pack --diag-url git+ssh://user@[::1]:/re/po

expecting success of 5500.293 'fetch-pack --diag-url git+ssh://user@[::1]:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 293 - fetch-pack --diag-url git+ssh://user@[::1]:/~re/po

expecting success of 5500.294 'fetch-pack --diag-url git+ssh://user@::1/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 294 - fetch-pack --diag-url git+ssh://user@::1/re/po

expecting success of 5500.295 'fetch-pack --diag-url git+ssh://user@::1/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 295 - fetch-pack --diag-url git+ssh://user@::1/~re/po

expecting success of 5500.296 'fetch-pack --diag-url git+ssh://user@::1:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 296 - fetch-pack --diag-url git+ssh://user@::1:/re/po

expecting success of 5500.297 'fetch-pack --diag-url git+ssh://user@::1:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 297 - fetch-pack --diag-url git+ssh://user@::1:/~re/po

expecting success of 5500.298 'fetch-pack --diag-url git+ssh://host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 298 - fetch-pack --diag-url git+ssh://host:22/re/po

expecting success of 5500.299 'fetch-pack --diag-url git+ssh://User@host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 299 - fetch-pack --diag-url git+ssh://User@host:22/re/po

expecting success of 5500.300 'fetch-pack --diag-url git+ssh://User@[::1]:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 300 - fetch-pack --diag-url git+ssh://User@[::1]:22/re/po

expecting success of 5500.301 'fetch-pack --diag-url git://host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 301 - fetch-pack --diag-url git://host/re/po

expecting success of 5500.302 'fetch-pack --diag-url git://host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 302 - fetch-pack --diag-url git://host/~re/po

expecting success of 5500.303 'fetch-pack --diag-url git://host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 303 - fetch-pack --diag-url git://host:/re/po

expecting success of 5500.304 'fetch-pack --diag-url git://host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 304 - fetch-pack --diag-url git://host:/~re/po

expecting success of 5500.305 'fetch-pack --diag-url git://user@host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 305 - fetch-pack --diag-url git://user@host/re/po

expecting success of 5500.306 'fetch-pack --diag-url git://user@host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 306 - fetch-pack --diag-url git://user@host/~re/po

expecting success of 5500.307 'fetch-pack --diag-url git://user@host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 307 - fetch-pack --diag-url git://user@host:/re/po

expecting success of 5500.308 'fetch-pack --diag-url git://user@host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 308 - fetch-pack --diag-url git://user@host:/~re/po

expecting success of 5500.309 'fetch-pack --diag-url git://user@[::1]/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 309 - fetch-pack --diag-url git://user@[::1]/re/po

expecting success of 5500.310 'fetch-pack --diag-url git://user@[::1]/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 310 - fetch-pack --diag-url git://user@[::1]/~re/po

expecting success of 5500.311 'fetch-pack --diag-url git://user@[::1]:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 311 - fetch-pack --diag-url git://user@[::1]:/re/po

expecting success of 5500.312 'fetch-pack --diag-url git://user@[::1]:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 312 - fetch-pack --diag-url git://user@[::1]:/~re/po

expecting success of 5500.313 'fetch-pack --diag-url git://user@::1/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 313 - fetch-pack --diag-url git://user@::1/re/po

expecting success of 5500.314 'fetch-pack --diag-url git://user@::1/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 314 - fetch-pack --diag-url git://user@::1/~re/po

expecting success of 5500.315 'fetch-pack --diag-url git://user@::1:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 315 - fetch-pack --diag-url git://user@::1:/re/po

expecting success of 5500.316 'fetch-pack --diag-url git://user@::1:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 316 - fetch-pack --diag-url git://user@::1:/~re/po

expecting success of 5500.317 'fetch-pack --diag-url git://host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 317 - fetch-pack --diag-url git://host:22/re/po

expecting success of 5500.318 'fetch-pack --diag-url git://User@host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 318 - fetch-pack --diag-url git://User@host:22/re/po

expecting success of 5500.319 'fetch-pack --diag-url git://User@[::1]:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 319 - fetch-pack --diag-url git://User@[::1]:22/re/po

expecting success of 5500.320 'fetch-pack --diag-url ssh://host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 320 - fetch-pack --diag-url ssh://host/re/po

expecting success of 5500.321 'fetch-pack --diag-url ssh://host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 321 - fetch-pack --diag-url ssh://host/~re/po

expecting success of 5500.322 'fetch-pack --diag-url ssh://host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 322 - fetch-pack --diag-url ssh://host:/re/po

expecting success of 5500.323 'fetch-pack --diag-url ssh://host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 323 - fetch-pack --diag-url ssh://host:/~re/po

expecting success of 5500.324 'fetch-pack --diag-url ssh://user@host/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 324 - fetch-pack --diag-url ssh://user@host/re/po

expecting success of 5500.325 'fetch-pack --diag-url ssh://user@host/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 325 - fetch-pack --diag-url ssh://user@host/~re/po

expecting success of 5500.326 'fetch-pack --diag-url ssh://user@host:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 326 - fetch-pack --diag-url ssh://user@host:/re/po

expecting success of 5500.327 'fetch-pack --diag-url ssh://user@host:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 327 - fetch-pack --diag-url ssh://user@host:/~re/po

expecting success of 5500.328 'fetch-pack --diag-url ssh://user@[::1]/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 328 - fetch-pack --diag-url ssh://user@[::1]/re/po

expecting success of 5500.329 'fetch-pack --diag-url ssh://user@[::1]/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 329 - fetch-pack --diag-url ssh://user@[::1]/~re/po

expecting success of 5500.330 'fetch-pack --diag-url ssh://user@[::1]:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 330 - fetch-pack --diag-url ssh://user@[::1]:/re/po

expecting success of 5500.331 'fetch-pack --diag-url ssh://user@[::1]:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 331 - fetch-pack --diag-url ssh://user@[::1]:/~re/po

expecting success of 5500.332 'fetch-pack --diag-url ssh://user@::1/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 332 - fetch-pack --diag-url ssh://user@::1/re/po

expecting success of 5500.333 'fetch-pack --diag-url ssh://user@::1/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 333 - fetch-pack --diag-url ssh://user@::1/~re/po

expecting success of 5500.334 'fetch-pack --diag-url ssh://user@::1:/re/po': 
					check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
				
ok 334 - fetch-pack --diag-url ssh://user@::1:/re/po

expecting success of 5500.335 'fetch-pack --diag-url ssh://user@::1:/~re/po': 
					check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
				
ok 335 - fetch-pack --diag-url ssh://user@::1:/~re/po

expecting success of 5500.336 'fetch-pack --diag-url ssh://host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 336 - fetch-pack --diag-url ssh://host:22/re/po

expecting success of 5500.337 'fetch-pack --diag-url ssh://User@host:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 337 - fetch-pack --diag-url ssh://User@host:22/re/po

expecting success of 5500.338 'fetch-pack --diag-url ssh://User@[::1]:22/re/po': 
				check_prot_host_port_path $p://$h:22/$r $p "$h" 22 "/$r"
			
ok 338 - fetch-pack --diag-url ssh://User@[::1]:22/re/po

expecting success of 5500.339 'fetch-pack --diag-url file://User@[::1]/re/po': 
			check_prot_path $p://$h/$r $p "/$r"
		
ok 339 - fetch-pack --diag-url file://User@[::1]/re/po

ok 340 # skip fetch-pack --diag-url file://User@[::1]/re/po (missing MINGW)

ok 341 # skip fetch-pack --diag-url file:///re/po (missing MINGW)

expecting success of 5500.342 'fetch-pack --diag-url file://User@[::1]/~re/po': 
			check_prot_path $p://$h/~$r $p "/~$r"
		
ok 342 - fetch-pack --diag-url file://User@[::1]/~re/po

ok 343 # skip fetch-pack --diag-url file://User@[::1]/~re/po (missing MINGW)

expecting success of 5500.344 'fetch-pack --diag-url ./nohost:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 344 - fetch-pack --diag-url ./nohost:re/po

expecting success of 5500.345 'fetch-pack --diag-url ./file:nohost/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 345 - fetch-pack --diag-url ./file:nohost/~re/po

expecting success of 5500.346 'fetch-pack --diag-url ./nohost:12:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 346 - fetch-pack --diag-url ./nohost:12:re/po

expecting success of 5500.347 'fetch-pack --diag-url ./file:nohost:12/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 347 - fetch-pack --diag-url ./file:nohost:12/~re/po

expecting success of 5500.348 'fetch-pack --diag-url ./[::1]:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 348 - fetch-pack --diag-url ./[::1]:re/po

expecting success of 5500.349 'fetch-pack --diag-url ./file:[::1]/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 349 - fetch-pack --diag-url ./file:[::1]/~re/po

expecting success of 5500.350 'fetch-pack --diag-url ./[::1]:23:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 350 - fetch-pack --diag-url ./[::1]:23:re/po

expecting success of 5500.351 'fetch-pack --diag-url ./file:[::1]:23/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 351 - fetch-pack --diag-url ./file:[::1]:23/~re/po

expecting success of 5500.352 'fetch-pack --diag-url ./[:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 352 - fetch-pack --diag-url ./[:re/po

expecting success of 5500.353 'fetch-pack --diag-url ./file:[/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 353 - fetch-pack --diag-url ./file:[/~re/po

expecting success of 5500.354 'fetch-pack --diag-url ./[:aa:re/po': 
			check_prot_path ./$h:$r $p "./$h:$r"
		
ok 354 - fetch-pack --diag-url ./[:aa:re/po

expecting success of 5500.355 'fetch-pack --diag-url ./file:[:aa/~re/po': 
		check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r"
		
ok 355 - fetch-pack --diag-url ./file:[:aa/~re/po

expecting success of 5500.356 'fetch-pack --diag-url host:re/po': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 356 - fetch-pack --diag-url host:re/po

expecting success of 5500.357 'fetch-pack --diag-url host:/~re/po': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 357 - fetch-pack --diag-url host:/~re/po

expecting success of 5500.358 'fetch-pack --diag-url [::1]:re/po': 
			check_prot_host_port_path $h:$r $p "$h" NONE "$r"
		
ok 358 - fetch-pack --diag-url [::1]:re/po

expecting success of 5500.359 'fetch-pack --diag-url [::1]:/~re/po': 
			check_prot_host_port_path $h:/~$r $p "$h" NONE "~$r"
		
ok 359 - fetch-pack --diag-url [::1]:/~re/po

ok 360 # skip fetch-pack --diag-url file://c:/repo (missing MINGW)

ok 361 # skip fetch-pack --diag-url c:repo (missing MINGW)

expecting success of 5500.362 'clone shallow since ...': 
	test_create_repo shallow-since &&
	(
	cd shallow-since &&
	GIT_COMMITTER_DATE="100000000 +0700" git commit --allow-empty -m one &&
	GIT_COMMITTER_DATE="200000000 +0700" git commit --allow-empty -m two &&
	GIT_COMMITTER_DATE="300000000 +0700" git commit --allow-empty -m three &&
	git clone --shallow-since "300000000 +0700" "file://$(pwd)/." ../shallow11 &&
	git -C ../shallow11 log --pretty=tformat:%s HEAD >actual &&
	echo three >expected &&
	test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-since/.git/
[main (root-commit) 4c9b2a3] one
 Author: A U Thor <author@example.com>
[main e491164] two
 Author: A U Thor <author@example.com>
[main 88fb92d] three
 Author: A U Thor <author@example.com>
Cloning into '../shallow11'...
ok 362 - clone shallow since ...

expecting success of 5500.363 'fetch shallow since ...': 
	git -C shallow11 fetch --shallow-since "200000000 +0700" origin &&
	git -C shallow11 log --pretty=tformat:%s origin/main >actual &&
	cat >expected <<-\EOF &&
	three
	two
	EOF
	test_cmp expected actual

ok 363 - fetch shallow since ...

expecting success of 5500.364 'clone shallow since selects no commits': 
	test_create_repo shallow-since-the-future &&
	(
	cd shallow-since-the-future &&
	GIT_COMMITTER_DATE="100000000 +0700" git commit --allow-empty -m one &&
	GIT_COMMITTER_DATE="200000000 +0700" git commit --allow-empty -m two &&
	GIT_COMMITTER_DATE="300000000 +0700" git commit --allow-empty -m three &&
	test_must_fail git clone --shallow-since "900000000 +0700" "file://$(pwd)/." ../shallow111
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-since-the-future/.git/
[main (root-commit) 4c9b2a3] one
 Author: A U Thor <author@example.com>
[main e491164] two
 Author: A U Thor <author@example.com>
[main 88fb92d] three
 Author: A U Thor <author@example.com>
Cloning into '../shallow111'...
fatal: no commits selected for shallow requests
fatal: the remote end hung up unexpectedly
ok 364 - clone shallow since selects no commits

expecting success of 5500.365 'shallow since with commit graph and already-seen commit': 
	test_create_repo shallow-since-graph &&
	(
	cd shallow-since-graph &&
	test_commit base &&
	test_commit main &&
	git checkout -b other HEAD^ &&
	test_commit other &&
	git commit-graph write --reachable &&
	git config core.commitGraph true &&

	GIT_PROTOCOL=version=2 git upload-pack . <<-EOF >/dev/null
	0012command=fetch
	$(echo "object-format=$(test_oid algo)" | packetize)
	00010013deepen-since 1
	$(echo "want $(git rev-parse other)" | packetize)
	$(echo "have $(git rev-parse main)" | packetize)
	0000
	EOF
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-since-graph/.git/
[main (root-commit) d3ae9fb] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[main a2ca354] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.t
Switched to a new branch 'other'
[other fb3d247] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
warning: refname 'other' is ambiguous.
warning: refname 'main' is ambiguous.
ok 365 - shallow since with commit graph and already-seen commit

expecting success of 5500.366 'shallow clone exclude tag two': 
	test_create_repo shallow-exclude &&
	(
	cd shallow-exclude &&
	test_commit one &&
	test_commit two &&
	test_commit three &&
	git clone --shallow-exclude two "file://$(pwd)/." ../shallow12 &&
	git -C ../shallow12 log --pretty=tformat:%s HEAD >actual &&
	echo three >expected &&
	test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-exclude/.git/
[main (root-commit) 7d32f63] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main ea3a09e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 28cfb97] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Cloning into '../shallow12'...
ok 366 - shallow clone exclude tag two

expecting success of 5500.367 'fetch exclude tag one': 
	git -C shallow12 fetch --shallow-exclude one origin &&
	git -C shallow12 log --pretty=tformat:%s origin/main >actual &&
	test_write_lines three two >expected &&
	test_cmp expected actual

From file:///<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-exclude/.
 * [new tag]         two        -> two
ok 367 - fetch exclude tag one

expecting success of 5500.368 'fetching deepen': 
	test_create_repo shallow-deepen &&
	(
	cd shallow-deepen &&
	test_commit one &&
	test_commit two &&
	test_commit three &&
	git clone --depth 1 "file://$(pwd)/." deepen &&
	test_commit four &&
	git -C deepen log --pretty=tformat:%s main >actual &&
	echo three >expected &&
	test_cmp expected actual &&
	git -C deepen fetch --deepen=1 &&
	git -C deepen log --pretty=tformat:%s origin/main >actual &&
	cat >expected <<-\EOF &&
	four
	three
	two
	EOF
	test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-deepen/.git/
[main (root-commit) 7d32f63] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main ea3a09e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 28cfb97] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Cloning into 'deepen'...
[main 8f42874] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/shallow-deepen/.
   28cfb97..8f42874  main       -> origin/main
 * [new tag]         four       -> four
 * [new tag]         two        -> two
ok 368 - fetching deepen

expecting success of 5500.369 'use ref advertisement to prune "have" lines sent': 
	test_negotiation_algorithm_default

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 4ec3e89] both_have_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 both_have_1.t
Deleted tag 'both_have_1' (was 4ec3e89)
[main 0e648cf] both_have_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 both_have_2.t
Cloning into 'client'...
done.
[main c107eb0] server_has
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 server_has.t
[main d1fea1f] client_has
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 client_has.t
From /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server
 * tag               server_has -> FETCH_HEAD
 * tag               both_have_2 -> FETCH_HEAD
packet:        fetch> have d1fea1f29cf9ed7dd3bad159c87b04602137107f
packet:  upload-pack< have d1fea1f29cf9ed7dd3bad159c87b04602137107f
packet:        fetch> have 0e648cf9d30d78592ceaaece245726ca9e279151
packet:  upload-pack< have 0e648cf9d30d78592ceaaece245726ca9e279151
From /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server
 * tag               server_has -> FETCH_HEAD
 * tag               both_have_2 -> FETCH_HEAD
packet:        fetch> have d1fea1f29cf9ed7dd3bad159c87b04602137107f
packet:  upload-pack< have d1fea1f29cf9ed7dd3bad159c87b04602137107f
packet:        fetch> have 0e648cf9d30d78592ceaaece245726ca9e279151
packet:  upload-pack< have 0e648cf9d30d78592ceaaece245726ca9e279151
ok 369 - use ref advertisement to prune "have" lines sent

expecting success of 5500.370 'same as last but with config overrides': 
	test_negotiation_algorithm_default \
		-c feature.experimental=true \
		-c fetch.negotiationAlgorithm=consecutive

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 9df98d9] both_have_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 both_have_1.t
Deleted tag 'both_have_1' (was 9df98d9)
[main 63eca65] both_have_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 both_have_2.t
Cloning into 'client'...
done.
[main d7eee63] server_has
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 server_has.t
[main 381c2f1] client_has
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 client_has.t
From /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server
 * tag               server_has -> FETCH_HEAD
 * tag               both_have_2 -> FETCH_HEAD
packet:        fetch> have 381c2f1c977599145037b617815f85808fe86d6c
packet:  upload-pack< have 381c2f1c977599145037b617815f85808fe86d6c
packet:        fetch> have 63eca652c410121f112d645c8a8840ae82123b3e
packet:  upload-pack< have 63eca652c410121f112d645c8a8840ae82123b3e
From /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server
 * tag               server_has -> FETCH_HEAD
 * tag               both_have_2 -> FETCH_HEAD
packet:        fetch> have 381c2f1c977599145037b617815f85808fe86d6c
packet:  upload-pack< have 381c2f1c977599145037b617815f85808fe86d6c
packet:        fetch> have 63eca652c410121f112d645c8a8840ae82123b3e
packet:  upload-pack< have 63eca652c410121f112d645c8a8840ae82123b3e
ok 370 - same as last but with config overrides

expecting success of 5500.371 'ensure bogus fetch.negotiationAlgorithm yields error': 
	test_when_finished rm -rf clientv0 &&
	cp -r client clientv0 &&
	test_must_fail git -C clientv0 --fetch.negotiationAlgorithm=bogus \
		       fetch origin server_has both_have_2

unknown option: --fetch.negotiationAlgorithm=bogus
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env=<name>=<envvar>]
           <command> [<args>]
ok 371 - ensure bogus fetch.negotiationAlgorithm yields error

expecting success of 5500.372 'filtering by size': 
	rm -rf server client &&
	test_create_repo server &&
	test_commit -C server one &&
	test_config -C server uploadpack.allowfilter 1 &&

	test_create_repo client &&
	git -C client fetch-pack --filter=blob:limit=0 ../server HEAD &&

	# Ensure that object is not inadvertently fetched
	commit=$(git -C server rev-parse HEAD) &&
	blob=$(git hash-object server/one.t) &&
	git -C client rev-list --objects --missing=allow-any "$commit" >oids &&
	! grep "$blob" oids

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) b73245b] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
remote: Enumerating objects: 2, done.        
remote: Counting objects:  50% (1/2)        
remote: Counting objects: 100% (2/2)        
remote: Counting objects: 100% (2/2), done.        
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0        
b73245b187a878a9334892236f3e85ef70d56705 HEAD
ok 372 - filtering by size

expecting success of 5500.373 'filtering by size has no effect if support for it is not advertised': 
	rm -rf server client &&
	test_create_repo server &&
	test_commit -C server one &&

	test_create_repo client &&
	git -C client fetch-pack --filter=blob:limit=0 ../server HEAD 2> err &&

	# Ensure that object is fetched
	commit=$(git -C server rev-parse HEAD) &&
	blob=$(git hash-object server/one.t) &&
	git -C client rev-list --objects --missing=allow-any "$commit" >oids &&
	grep "$blob" oids &&

	test_i18ngrep "filtering not recognized by server" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 946f2fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/client/.git/
946f2fc4f06e44010ec7f3ed95172068b132ee22 HEAD
5626abf0f72e58d7a153368ba57db4c673c0e171 one.t
warning: filtering not recognized by server, ignoring
ok 373 - filtering by size has no effect if support for it is not advertised

expecting success of 5500.374 'fetch with --filter=blob:limit=0': 
	fetch_filter_blob_limit_zero server server

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server/.git/
[main (root-commit) 65824a5] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'client'...
done.
[main e2f01e0] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5500-fetch-pack/server
 * [new ref]                    -> somewhere
 * [new tag]         two        -> two
e2f01e0f193ab9dc45dd1ee874c3edb2a176bf18
ok 374 - fetch with --filter=blob:limit=0

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 374 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..374
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5517-push-mirror.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/.git/
expecting success of 5517.1 'push mirror creates new branches': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/heads/main) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
ok 1 - push mirror creates new branches

expecting success of 5517.2 'push mirror updates existing branches': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git push --mirror up &&
		echo two >foo && git add foo && git commit -m two &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/heads/main) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 * [new reference]   up/main -> up/main
ok 2 - push mirror updates existing branches

expecting success of 5517.3 'push mirror force updates existing branches': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git push --mirror up &&
		echo two >foo && git add foo && git commit -m two &&
		git push --mirror up &&
		git reset --hard HEAD^ &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/heads/main) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 * [new reference]   up/main -> up/main
HEAD is now at 8b096fc one
remote: warning: updating the current branch        
To ../mirror
 + 85d7b0e...8b096fc main -> main (forced update)
   8b096fc..85d7b0e  up/main -> up/main
ok 3 - push mirror force updates existing branches

expecting success of 5517.4 'push mirror removes branches': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git branch remove main &&
		git push --mirror up &&
		git branch -D remove &&
		git push --mirror up
	) &&
	(
		cd mirror &&
		invert git show-ref -s --verify refs/heads/remove
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new branch]      remove -> remove
Deleted branch remove (was 8b096fc).
To ../mirror
 - [deleted]         remove
 * [new reference]   up/main -> up/main
 * [new reference]   up/remove -> up/remove
fatal: 'refs/heads/remove' - not a valid ref
ok 4 - push mirror removes branches

expecting success of 5517.5 'push mirror adds, updates and removes branches together': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git branch remove main &&
		git push --mirror up &&
		git branch -D remove &&
		git branch add main &&
		echo two >foo && git add foo && git commit -m two &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/heads/main) &&
	main_add=$(cd main && git show-ref -s --verify refs/heads/add) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) &&
	mirror_add=$(cd mirror && git show-ref -s --verify refs/heads/add) &&
	test "$main_main" = "$mirror_main" &&
	test "$main_add" = "$mirror_add" &&
	(
		cd mirror &&
		invert git show-ref -s --verify refs/heads/remove
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new branch]      remove -> remove
Deleted branch remove (was 8b096fc).
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 - [deleted]         remove
 * [new branch]      add -> add
 * [new reference]   up/main -> up/main
 * [new reference]   up/remove -> up/remove
fatal: 'refs/heads/remove' - not a valid ref
ok 5 - push mirror adds, updates and removes branches together

expecting success of 5517.6 'push mirror creates new tags': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git tag -f tmain main &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new tag]         tmain -> tmain
ok 6 - push mirror creates new tags

expecting success of 5517.7 'push mirror updates existing tags': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git tag -f tmain main &&
		git push --mirror up &&
		echo two >foo && git add foo && git commit -m two &&
		git tag -f tmain main &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new tag]         tmain -> tmain
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Updated tag 'tmain' (was 8b096fc)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 + 8b096fc...85d7b0e tmain -> tmain (forced update)
 * [new reference]   up/main -> up/main
ok 7 - push mirror updates existing tags

expecting success of 5517.8 'push mirror force updates existing tags': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git tag -f tmain main &&
		git push --mirror up &&
		echo two >foo && git add foo && git commit -m two &&
		git tag -f tmain main &&
		git push --mirror up &&
		git reset --hard HEAD^ &&
		git tag -f tmain main &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) &&
	test "$main_main" = "$mirror_main"


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new tag]         tmain -> tmain
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Updated tag 'tmain' (was 8b096fc)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 + 8b096fc...85d7b0e tmain -> tmain (forced update)
 * [new reference]   up/main -> up/main
HEAD is now at 8b096fc one
Updated tag 'tmain' (was 85d7b0e)
remote: warning: updating the current branch        
To ../mirror
 + 85d7b0e...8b096fc main -> main (forced update)
   8b096fc..85d7b0e  up/main -> up/main
 + 85d7b0e...8b096fc tmain -> tmain (forced update)
ok 8 - push mirror force updates existing tags

expecting success of 5517.9 'push mirror removes tags': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git tag -f tremove main &&
		git push --mirror up &&
		git tag -d tremove &&
		git push --mirror up
	) &&
	(
		cd mirror &&
		invert git show-ref -s --verify refs/tags/tremove
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new tag]         tremove -> tremove
Deleted tag 'tremove' (was 8b096fc)
To ../mirror
 - [deleted]         tremove
 * [new reference]   up/main -> up/main
fatal: 'refs/tags/tremove' - not a valid ref
ok 9 - push mirror removes tags

expecting success of 5517.10 'push mirror adds, updates and removes tags together': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git tag -f tmain main &&
		git tag -f tremove main &&
		git push --mirror up &&
		git tag -d tremove &&
		git tag tadd main &&
		echo two >foo && git add foo && git commit -m two &&
		git tag -f tmain main &&
		git push --mirror up
	) &&
	main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) &&
	main_add=$(cd main && git show-ref -s --verify refs/tags/tadd) &&
	mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) &&
	mirror_add=$(cd mirror && git show-ref -s --verify refs/tags/tadd) &&
	test "$main_main" = "$mirror_main" &&
	test "$main_add" = "$mirror_add" &&
	(
		cd mirror &&
		invert git show-ref -s --verify refs/tags/tremove
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      main -> main
 * [new tag]         tmain -> tmain
 * [new tag]         tremove -> tremove
Deleted tag 'tremove' (was 8b096fc)
[main 85d7b0e] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Updated tag 'tmain' (was 8b096fc)
remote: warning: updating the current branch        
To ../mirror
   8b096fc..85d7b0e  main -> main
 + 8b096fc...85d7b0e tmain -> tmain (forced update)
 - [deleted]         tremove
 * [new reference]   up/main -> up/main
 * [new tag]         tadd -> tadd
fatal: 'refs/tags/tremove' - not a valid ref
ok 10 - push mirror adds, updates and removes tags together

expecting success of 5517.11 'remote.foo.mirror adds and removes branches': 

	mk_repo_pair --mirror &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git branch keep main &&
		git branch remove main &&
		git push up &&
		git branch -D remove &&
		git push up
	) &&
	(
		cd mirror &&
		git show-ref -s --verify refs/heads/keep &&
		invert git show-ref -s --verify refs/heads/remove
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
warning: --mirror is dangerous and deprecated; please
	 use --mirror=fetch or --mirror=push instead
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
branch 'keep' set up to track 'up/main'.
branch 'remove' set up to track 'up/main'.
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      keep -> keep
 * [new branch]      main -> main
 * [new branch]      remove -> remove
Deleted branch remove (was 8b096fc).
To ../mirror
 - [deleted]         remove
8b096fc4c6715e368acaf2c14a0ce99f4b412a2b
fatal: 'refs/heads/remove' - not a valid ref
ok 11 - remote.foo.mirror adds and removes branches

expecting success of 5517.12 'remote.foo.mirror=no has no effect': 

	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git config --add remote.up.mirror no &&
		git branch keep main &&
		git push --mirror up &&
		git branch -D keep &&
		git push up :
	) &&
	(
		cd mirror &&
		git show-ref -s --verify refs/heads/keep
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To ../mirror
 * [new branch]      keep -> keep
 * [new branch]      main -> main
Deleted branch keep (was 8b096fc).
Everything up-to-date
8b096fc4c6715e368acaf2c14a0ce99f4b412a2b
ok 12 - remote.foo.mirror=no has no effect

expecting success of 5517.13 'push to mirrored repository with refspec fails': 
	mk_repo_pair &&
	(
		cd main &&
		echo one >foo && git add foo && git commit -m one &&
		git config --add remote.up.mirror true &&
		test_must_fail git push up main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/mirror/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5517-push-mirror/main/.git/
[main (root-commit) 8b096fc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
fatal: --mirror can't be combined with refspecs
ok 13 - push to mirrored repository with refspec fails

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5515-fetch-merge-logic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5515-fetch-merge-logic/.git/
expecting success of 5515.1 'setup': 
	GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
	GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&
	export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&

	test_oid_cache <<-EOF &&
	one sha1:8e32a6d901327a23ef831511badce7bf3bf46689
	one sha256:8739546433ab1ac72ee93088dce611210effee072b2b586ceac6dde43ebec9ce

	three_file sha1:0e3b14047d3ee365f4f2a1b673db059c3972589c
	three_file sha256:bc4447d50c07497a8bfe6eef817f2364ecca9d471452e43b52756cc1a908bd32

	main sha1:ecf3b3627b498bdcb735cc4343bf165f76964e9a
	main sha256:fff666109892bb4b1c80cd1649d2d8762a0663db8b5d46c8be98360b64fbba5f

	one_tree sha1:22feea448b023a2d864ef94b013735af34d238ba
	one_tree sha256:6e4743f4ef2356b881dda5e91f5c7cdffe870faf350bf7b312f80a20935f5d83

	three sha1:c61a82b60967180544e3c19f819ddbd0c9f89899
	three sha256:0cc6d1eda617ded715170786e31ba4e2d0185404ec5a3508dd0d73b324860c6a

	two sha1:525b7fb068d59950d185a8779dc957c77eed73ba
	two sha256:3b21de3440cd38c2a9e9b464adb923f7054949ed4c918e1a0ac4c95cd52774db

	topic_2 sha1:b4ab76b1a01ea602209932134a44f1e6bd610832
	topic_2 sha256:380ebae0113f877ce46fcdf39d5bc33e4dc0928db5c5a4d5fdc78381c4d55ae3

	two2 sha1:6134ee8f857693b96ff1cc98d3e2fd62b199e5a8
	two2 sha256:87a2d3ee29c83a3dc7afd41c0606b11f67603120b910a7be7840accdc18344d4

	three2 sha1:0567da4d5edd2ff4bb292a465ba9e64dcad9536b
	three2 sha256:cceb3e8eca364fa9a0a39a1efbebecacc664af86cbbd8070571f5faeb5f0e8c3
	EOF

	echo >file original &&
	git add file &&
	git commit -a -m One &&
	git tag tag-one &&
	git tag tag-one-tree HEAD^{tree} &&
	git branch one &&

	echo two >> file &&
	git commit -a -m Two &&
	git tag -a -m "Tag Two" tag-two &&
	git branch two &&

	echo three >> file &&
	git commit -a -m Three &&
	git tag -a -m "Tag Three" tag-three &&
	git tag -a -m "Tag Three file" tag-three-file HEAD^{tree}:file &&
	git branch three &&

	echo main >> file &&
	git commit -a -m Main &&
	git tag -a -m "Tag Main" tag-main &&

	git checkout three &&

	git clone . cloned &&
	cd cloned &&
	git config remote.origin.url ../.git/ &&

	git config remote.config-explicit.url ../.git/ &&
	git config remote.config-explicit.fetch refs/heads/main:remotes/rem/main &&
	git config --add remote.config-explicit.fetch refs/heads/one:remotes/rem/one &&
	git config --add remote.config-explicit.fetch two:remotes/rem/two &&
	git config --add remote.config-explicit.fetch refs/heads/three:remotes/rem/three &&
	remotes="config-explicit" &&

	git config remote.config-glob.url ../.git/ &&
	git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&
	remotes="$remotes config-glob" &&

	mkdir -p .git/remotes &&
	cat >.git/remotes/remote-explicit <<-\EOF &&
	URL: ../.git/
	Pull: refs/heads/main:remotes/rem/main
	Pull: refs/heads/one:remotes/rem/one
	Pull: two:remotes/rem/two
	Pull: refs/heads/three:remotes/rem/three
	EOF
	remotes="$remotes remote-explicit" &&

	cat >.git/remotes/remote-glob <<-\EOF &&
	URL: ../.git/
	Pull: refs/heads/*:refs/remotes/rem/*
	EOF
	remotes="$remotes remote-glob" &&

	mkdir -p .git/branches &&
	echo "../.git" > .git/branches/branches-default &&
	remotes="$remotes branches-default" &&

	echo "../.git#one" > .git/branches/branches-one &&
	remotes="$remotes branches-one" &&

	for remote in $remotes ; do
		git config branch.br-$remote.remote $remote &&
		git config branch.br-$remote-merge.remote $remote &&
		git config branch.br-$remote-merge.merge refs/heads/three &&
		git config branch.br-$remote-octopus.remote $remote &&
		git config branch.br-$remote-octopus.merge refs/heads/one &&
		git config --add branch.br-$remote-octopus.merge two || return 1
	done &&
	build_script sed_script

[main (root-commit) 8e32a6d] One
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 6134ee8] Two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 0567da4] Three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main b4ab76b] Main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'three'
Cloning into 'cloned'...
done.
ok 1 - setup

expecting success of 5515.2 'br-config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 2 - br-config-explicit

expecting success of 5515.3 'br-config-explicit config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 3 - br-config-explicit config-explicit

expecting success of 5515.4 'br-config-explicit-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 4 - br-config-explicit-merge

expecting success of 5515.5 'br-config-explicit-merge config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 5 - br-config-explicit-merge config-explicit

expecting success of 5515.6 'br-config-explicit-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 6 - br-config-explicit-octopus

expecting success of 5515.7 'br-config-explicit-octopus config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 7 - br-config-explicit-octopus config-explicit

expecting success of 5515.8 'br-config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 8 - br-config-glob

expecting success of 5515.9 'br-config-glob config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 9 - br-config-glob config-glob

expecting success of 5515.10 'br-config-glob-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 10 - br-config-glob-merge

expecting success of 5515.11 'br-config-glob-merge config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 11 - br-config-glob-merge config-glob

expecting success of 5515.12 'br-config-glob-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 12 - br-config-glob-octopus

expecting success of 5515.13 'br-config-glob-octopus config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 13 - br-config-glob-octopus config-glob

expecting success of 5515.14 'br-remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 14 - br-remote-explicit

expecting success of 5515.15 'br-remote-explicit remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 15 - br-remote-explicit remote-explicit

expecting success of 5515.16 'br-remote-explicit-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 16 - br-remote-explicit-merge

expecting success of 5515.17 'br-remote-explicit-merge remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 17 - br-remote-explicit-merge remote-explicit

expecting success of 5515.18 'br-remote-explicit-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 18 - br-remote-explicit-octopus

expecting success of 5515.19 'br-remote-explicit-octopus remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 19 - br-remote-explicit-octopus remote-explicit

expecting success of 5515.20 'br-remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 20 - br-remote-glob

expecting success of 5515.21 'br-remote-glob remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 21 - br-remote-glob remote-glob

expecting success of 5515.22 'br-remote-glob-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 22 - br-remote-glob-merge

expecting success of 5515.23 'br-remote-glob-merge remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      three          -> rem/three
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 23 - br-remote-glob-merge remote-glob

expecting success of 5515.24 'br-remote-glob-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 24 - br-remote-glob-octopus

expecting success of 5515.25 'br-remote-glob-octopus remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      main           -> rem/main
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 25 - br-remote-glob-octopus remote-glob

expecting success of 5515.26 'br-branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 26 - br-branches-default

expecting success of 5515.27 'br-branches-default branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 27 - br-branches-default branches-default

expecting success of 5515.28 'br-branches-default-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            three          -> FETCH_HEAD
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 28 - br-branches-default-merge

expecting success of 5515.29 'br-branches-default-merge branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            three          -> FETCH_HEAD
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 29 - br-branches-default-merge branches-default

expecting success of 5515.30 'br-branches-default-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one            -> FETCH_HEAD
 * branch            two            -> FETCH_HEAD
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 30 - br-branches-default-octopus

expecting success of 5515.31 'br-branches-default-octopus branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one            -> FETCH_HEAD
 * branch            two            -> FETCH_HEAD
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 31 - br-branches-default-octopus branches-default

expecting success of 5515.32 'br-branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 32 - br-branches-one

expecting success of 5515.33 'br-branches-one branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 33 - br-branches-one branches-one

expecting success of 5515.34 'br-branches-one-merge': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            three          -> FETCH_HEAD
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 34 - br-branches-one-merge

expecting success of 5515.35 'br-branches-one-merge branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            three          -> FETCH_HEAD
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 35 - br-branches-one-merge branches-one

expecting success of 5515.36 'br-branches-one-octopus': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * branch            two            -> FETCH_HEAD
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 36 - br-branches-one-octopus

expecting success of 5515.37 'br-branches-one-octopus branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * branch            two            -> FETCH_HEAD
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 37 - br-branches-one-octopus branches-one

expecting success of 5515.38 'main': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 38 - main

expecting success of 5515.39 'main config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 39 - main config-explicit

expecting success of 5515.40 'main config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 40 - main config-glob

expecting success of 5515.41 'main remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 41 - main remote-explicit

expecting success of 5515.42 'main remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 42 - main remote-glob

expecting success of 5515.43 'main branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 43 - main branches-default

expecting success of 5515.44 'main branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 44 - main branches-one

expecting success of 5515.45 'br-unconfig': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 45 - br-unconfig

expecting success of 5515.46 'br-unconfig config-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 46 - br-unconfig config-explicit

expecting success of 5515.47 'br-unconfig config-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 47 - br-unconfig config-glob

expecting success of 5515.48 'br-unconfig remote-explicit': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      two            -> rem/two
 * [new branch]      three          -> rem/three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 48 - br-unconfig remote-explicit

expecting success of 5515.49 'br-unconfig remote-glob': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> rem/main
 * [new branch]      one            -> rem/one
 * [new branch]      three          -> rem/three
 * [new branch]      two            -> rem/two
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 49 - br-unconfig remote-glob

expecting success of 5515.50 'br-unconfig branches-default': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      main           -> branches-default
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 50 - br-unconfig branches-default

expecting success of 5515.51 'br-unconfig branches-one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new branch]      one            -> branches-one
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 51 - br-unconfig branches-one

expecting success of 5515.52 'main ../.git': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            HEAD       -> FETCH_HEAD
ok 52 - main ../.git

expecting success of 5515.53 'main ../.git one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one        -> FETCH_HEAD
ok 53 - main ../.git one

expecting success of 5515.54 'main ../.git one two': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one        -> FETCH_HEAD
 * branch            two        -> FETCH_HEAD
ok 54 - main ../.git one two

expecting success of 5515.55 'main --tags ../.git': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            HEAD           -> FETCH_HEAD
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 55 - main --tags ../.git

expecting success of 5515.56 'main ../.git tag tag-one tag tag-three': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 56 - main ../.git tag tag-one tag tag-three

expecting success of 5515.57 'main ../.git tag tag-one-tree tag tag-three-file': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-two        -> tag-two
ok 57 - main ../.git tag tag-one-tree tag tag-three-file

expecting success of 5515.58 'main ../.git one tag tag-one tag tag-three-file': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one            -> FETCH_HEAD
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-two        -> tag-two
ok 58 - main ../.git one tag tag-one tag tag-three-file

expecting success of 5515.59 'br-unconfig ../.git': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            HEAD       -> FETCH_HEAD
ok 59 - br-unconfig ../.git

expecting success of 5515.60 'br-unconfig ../.git one': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one        -> FETCH_HEAD
ok 60 - br-unconfig ../.git one

expecting success of 5515.61 'br-unconfig ../.git one two': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one        -> FETCH_HEAD
 * branch            two        -> FETCH_HEAD
ok 61 - br-unconfig ../.git one two

expecting success of 5515.62 'br-unconfig --tags ../.git': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            HEAD           -> FETCH_HEAD
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 62 - br-unconfig --tags ../.git

expecting success of 5515.63 'br-unconfig ../.git tag tag-one tag tag-three': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-two        -> tag-two
ok 63 - br-unconfig ../.git tag tag-one tag tag-three

expecting success of 5515.64 'br-unconfig ../.git tag tag-one-tree tag tag-three-file': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-two        -> tag-two
ok 64 - br-unconfig ../.git tag tag-one-tree tag tag-three-file

expecting success of 5515.65 'br-unconfig ../.git one tag tag-one tag tag-three-file': 
		cp "$expect_f" expect_f &&
		convert_expected expect_f sed_script &&
		cp "$expect_r" expect_r &&
		convert_expected expect_r sed_script &&
		{
			echo "# $cmd" &&
			set x $cmd && shift &&
			git symbolic-ref HEAD refs/heads/$1 && shift &&
			rm -f .git/FETCH_HEAD &&
			git for-each-ref \
				refs/heads refs/remotes/rem refs/tags |
			while read val type refname
			do
				git update-ref -d "$refname" "$val" || return 1
			done &&
			git fetch "$@" >/dev/null &&
			cat .git/FETCH_HEAD
		} >"$actual_f" &&
		git show-ref >"$actual_r" &&
		if test -f "expect_f"
		then
			test_cmp "expect_f" "$actual_f" &&
			rm -f "$actual_f"
		else
			# this is to help developing new tests.
			cp "$actual_f" "$expect_f"
			false
		fi &&
		if test -f "expect_r"
		then
			test_cmp "expect_r" "$actual_r" &&
			rm -f "$actual_r"
		else
			# this is to help developing new tests.
			cp "$actual_r" "$expect_r"
			false
		fi
	
From ../
 * branch            one            -> FETCH_HEAD
 * [new tag]         tag-one        -> tag-one
 * [new tag]         tag-three-file -> tag-three-file
 * [new tag]         tag-main       -> tag-main
 * [new tag]         tag-one-tree   -> tag-one-tree
 * [new tag]         tag-three      -> tag-three
 * [new tag]         tag-two        -> tag-two
ok 65 - br-unconfig ../.git one tag tag-one tag tag-three-file

# passed all 65 test(s)
1..65
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5518-fetch-exit-status.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5518-fetch-exit-status/.git/
expecting success of 5518.1 'setup': 

	>file &&
	git add file &&
	git commit -m initial &&

	git checkout -b side &&
	echo side >file &&
	git commit -a -m side &&

	git checkout main &&
	echo next >file &&
	git commit -a -m next

[main (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Switched to a new branch 'side'
[side 2c17685] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
[main 883918d] next
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 5518.2 'non-fast-forward fetch': 

	test_must_fail git fetch . main:side


From .
 ! [rejected]        main       -> side  (non-fast-forward)
ok 2 - non-fast-forward fetch

expecting success of 5518.3 'forced update': 

	git fetch . +main:side


From .
 + 2c17685...883918d main       -> side  (forced update)
ok 3 - forced update

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5519-push-alternates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5519-push-alternates/.git/
expecting success of 5519.1 'setup': 
	mkdir alice-pub &&
	(
		cd alice-pub &&
		GIT_DIR=. git init
	) &&
	mkdir alice-work &&
	(
		cd alice-work &&
		git init &&
		>file &&
		git add . &&
		git commit -m initial &&
		git push ../alice-pub main
	) &&

	# Project Bob is a fork of project Alice
	mkdir bob-pub &&
	(
		cd bob-pub &&
		GIT_DIR=. git init &&
		mkdir -p objects/info &&
		echo ../../alice-pub/objects >objects/info/alternates
	) &&
	git clone alice-pub bob-work &&
	(
		cd bob-work &&
		git push ../bob-pub main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5519-push-alternates/alice-pub/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5519-push-alternates/alice-work/.git/
[main (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
To ../alice-pub
 * [new branch]      main -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5519-push-alternates/bob-pub/
Cloning into 'bob-work'...
done.
To ../bob-pub
 * [new branch]      main -> main
ok 1 - setup

expecting success of 5519.2 'alice works and pushes': 
	(
		cd alice-work &&
		echo more >file &&
		git commit -a -m second &&
		git push ../alice-pub :
	)

[main 4d906ec] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To ../alice-pub
   6ce5622..4d906ec  main -> main
ok 2 - alice works and pushes

expecting success of 5519.3 'bob fetches from alice, works and pushes': 
	(
		# Bob acquires what Alice did in his work tree first.
		# Even though these objects are not directly in
		# the public repository of Bob, this push does not
		# need to send the commit Bob received from Alice
		# to his public repository, as all the object Alice
		# has at her public repository are available to it
		# via its alternates.
		cd bob-work &&
		git pull ../alice-pub main &&
		echo more bob >file &&
		git commit -a -m third &&
		git push ../bob-pub :
	) &&

	# Check that the second commit by Alice is not sent
	# to ../bob-pub
	(
		cd bob-pub &&
		second=$(git rev-parse HEAD^) &&
		rm -f objects/info/alternates &&
		test_must_fail git cat-file -t $second &&
		echo ../../alice-pub/objects >objects/info/alternates
	)

From ../alice-pub
 * branch            main       -> FETCH_HEAD
Updating 6ce5622..4d906ec
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
[main 4ea5236] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../bob-pub
   6ce5622..4ea5236  main -> main
fatal: git cat-file: could not get object info
ok 3 - bob fetches from alice, works and pushes

expecting success of 5519.4 'clean-up in case the previous failed': 
	(
		cd bob-pub &&
		echo ../../alice-pub/objects >objects/info/alternates
	)

ok 4 - clean-up in case the previous failed

expecting success of 5519.5 'alice works and pushes again': 
	(
		# Alice does not care what Bob does.  She does not
		# even have to be aware of his existence.  She just
		# keeps working and pushing
		cd alice-work &&
		echo more alice >file &&
		git commit -a -m fourth &&
		git push ../alice-pub :
	)

[main 605b499] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../alice-pub
   4d906ec..605b499  main -> main
ok 5 - alice works and pushes again

expecting success of 5519.6 'bob works and pushes': 
	(
		# This time Bob does not pull from Alice, and
		# the main branch at her public repository points
		# at a commit Bob does not know about.  This should
		# not prevent the push by Bob from succeeding.
		cd bob-work &&
		echo yet more bob >file &&
		git commit -a -m fifth &&
		git push ../bob-pub :
	)

[main de7f69b] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../bob-pub
   4ea5236..de7f69b  main -> main
ok 6 - bob works and pushes

expecting success of 5519.7 'alice works and pushes yet again': 
	(
		# Alice does not care what Bob does.  She does not
		# even have to be aware of his existence.  She just
		# keeps working and pushing
		cd alice-work &&
		echo more and more alice >file &&
		git commit -a -m sixth.1 &&
		echo more and more alice >>file &&
		git commit -a -m sixth.2 &&
		echo more and more alice >>file &&
		git commit -a -m sixth.3 &&
		git push ../alice-pub :
	)

[main ea85bff] sixth.1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2dcce9e] sixth.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 30a147f] sixth.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To ../alice-pub
   605b499..30a147f  main -> main
ok 7 - alice works and pushes yet again

expecting success of 5519.8 'bob works and pushes again': 
	(
		cd alice-pub &&
		git cat-file commit main >../bob-work/commit
	) &&
	(
		# This time Bob does not pull from Alice, and
		# the main branch at her public repository points
		# at a commit Bob does not fully know about, but
		# he happens to have the commit object (but not the
		# necessary tree) in his repository from Alice.
		# This should not prevent the push by Bob from
		# succeeding.
		cd bob-work &&
		git hash-object -t commit -w commit &&
		echo even more bob >file &&
		git commit -a -m seventh &&
		git push ../bob-pub :
	)

30a147f90d294d00cfbd7300e6dee07a60be8019
[main 6e12bed] seventh
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../bob-pub
   de7f69b..6e12bed  main -> main
ok 8 - bob works and pushes again

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5521-pull-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/.git/
expecting success of 5521.1 'setup': 
	mkdir parent &&
	(cd parent && git init &&
	 echo one >file && git add file &&
	 git commit -m one)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/parent/.git/
[main (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 5521.2 'git pull -q --no-rebase': 
	mkdir clonedq &&
	(cd clonedq && git init &&
	git pull -q --no-rebase "../parent" >out 2>err &&
	test_must_be_empty err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedq/.git/
ok 2 - git pull -q --no-rebase

expecting success of 5521.3 'git pull -q --rebase': 
	mkdir clonedqrb &&
	(cd clonedqrb && git init &&
	git pull -q --rebase "../parent" >out 2>err &&
	test_must_be_empty err &&
	test_must_be_empty out &&
	git pull -q --rebase "../parent" >out 2>err &&
	test_must_be_empty err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedqrb/.git/
ok 3 - git pull -q --rebase

expecting success of 5521.4 'git pull --no-rebase': 
	mkdir cloned &&
	(cd cloned && git init &&
	git pull --no-rebase "../parent" >out 2>err &&
	test -s err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/cloned/.git/
ok 4 - git pull --no-rebase

expecting success of 5521.5 'git pull --rebase': 
	mkdir clonedrb &&
	(cd clonedrb && git init &&
	git pull --rebase "../parent" >out 2>err &&
	test -s err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedrb/.git/
ok 5 - git pull --rebase

expecting success of 5521.6 'git pull -v --no-rebase': 
	mkdir clonedv &&
	(cd clonedv && git init &&
	git pull -v --no-rebase "../parent" >out 2>err &&
	test -s err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedv/.git/
ok 6 - git pull -v --no-rebase

expecting success of 5521.7 'git pull -v --rebase': 
	mkdir clonedvrb &&
	(cd clonedvrb && git init &&
	git pull -v --rebase "../parent" >out 2>err &&
	test -s err &&
	test_must_be_empty out)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedvrb/.git/
ok 7 - git pull -v --rebase

expecting success of 5521.8 'git pull -v -q --no-rebase': 
	mkdir clonedvq &&
	(cd clonedvq && git init &&
	git pull -v -q --no-rebase "../parent" >out 2>err &&
	test_must_be_empty out &&
	test_must_be_empty err)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedvq/.git/
ok 8 - git pull -v -q --no-rebase

expecting success of 5521.9 'git pull -q -v --no-rebase': 
	mkdir clonedqv &&
	(cd clonedqv && git init &&
	git pull -q -v --no-rebase "../parent" >out 2>err &&
	test_must_be_empty out &&
	test -s err)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedqv/.git/
ok 9 - git pull -q -v --no-rebase

expecting success of 5521.10 'git pull --cleanup errors early on invalid argument': 
	mkdir clonedcleanup &&
	(cd clonedcleanup && git init &&
	test_must_fail git pull --no-rebase --cleanup invalid "../parent" >out 2>err &&
	test_must_be_empty out &&
	test -s err)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedcleanup/.git/
ok 10 - git pull --cleanup errors early on invalid argument

expecting success of 5521.11 'git pull --no-write-fetch-head fails': 
	mkdir clonedwfh &&
	(cd clonedwfh && git init &&
	test_expect_code 129 git pull --no-write-fetch-head "../parent" >out 2>err &&
	test_must_be_empty out &&
	test_i18ngrep "no-write-fetch-head" err)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedwfh/.git/
error: unknown option `no-write-fetch-head'
ok 11 - git pull --no-write-fetch-head fails

expecting success of 5521.12 'git pull --force': 
	mkdir clonedoldstyle &&
	(cd clonedoldstyle && git init &&
	cat >>.git/config <<-\EOF &&
	[remote "one"]
		url = ../parent
		fetch = refs/heads/main:refs/heads/mirror
	[remote "two"]
		url = ../parent
		fetch = refs/heads/main:refs/heads/origin
	[branch "main"]
		remote = two
		merge = refs/heads/main
	EOF
	git pull two &&
	test_commit A &&
	git branch -f origin &&
	git pull --no-rebase --all --force
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedoldstyle/.git/
From ../parent
 * [new branch]      main       -> origin
[main bda2e37] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Fetching one
From ../parent
 * [new branch]      main       -> mirror
Fetching two
From ../parent
 + bda2e37...1993c08 main       -> origin  (forced update)
Already up to date.
ok 12 - git pull --force

expecting success of 5521.13 'git pull --all': 
	mkdir clonedmulti &&
	(cd clonedmulti && git init &&
	cat >>.git/config <<-\EOF &&
	[remote "one"]
		url = ../parent
		fetch = refs/heads/*:refs/remotes/one/*
	[remote "two"]
		url = ../parent
		fetch = refs/heads/*:refs/remotes/two/*
	[branch "main"]
		remote = one
		merge = refs/heads/main
	EOF
	git pull --all
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedmulti/.git/
Fetching one
From ../parent
 * [new branch]      main       -> one/main
Fetching two
From ../parent
 * [new branch]      main       -> two/main
ok 13 - git pull --all

expecting success of 5521.14 'git pull --dry-run': 
	test_when_finished "rm -rf clonedry" &&
	git init clonedry &&
	(
		cd clonedry &&
		git pull --dry-run ../parent &&
		test_path_is_missing .git/FETCH_HEAD &&
		test_path_is_missing .git/refs/heads/main &&
		test_path_is_missing .git/index &&
		test_path_is_missing file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedry/.git/
From ../parent
 * branch            HEAD       -> FETCH_HEAD
ok 14 - git pull --dry-run

expecting success of 5521.15 'git pull --all --dry-run': 
	test_when_finished "rm -rf cloneddry" &&
	git init clonedry &&
	(
		cd clonedry &&
		git remote add origin ../parent &&
		git pull --all --dry-run &&
		test_path_is_missing .git/FETCH_HEAD &&
		test_path_is_missing .git/refs/remotes/origin/main &&
		test_path_is_missing .git/index &&
		test_path_is_missing file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/clonedry/.git/
From ../parent
 * [new branch]      main       -> origin/main
ok 15 - git pull --all --dry-run

expecting success of 5521.16 'git pull --allow-unrelated-histories': 
	test_when_finished "rm -fr src dst" &&
	git init src &&
	(
		cd src &&
		test_commit one &&
		test_commit two
	) &&
	git clone src dst &&
	(
		cd src &&
		git checkout --orphan side HEAD^ &&
		test_commit three
	) &&
	(
		cd dst &&
		test_must_fail git pull ../src side &&
		git pull --no-rebase --allow-unrelated-histories ../src side
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'dst'...
done.
Switched to a new branch 'side'
[side (root-commit) d8f6b98] three
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one.t
 create mode 100644 three.t
From ../src
 * branch            side       -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
From ../src
 * branch            side       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 three.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 16 - git pull --allow-unrelated-histories

expecting success of 5521.17 'git pull does not add a sign-off line': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_commit -C src two &&
	git -C dst pull --no-ff &&
	git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   d79ce16..139b20d  main       -> origin/main
 * [new tag]         two        -> two
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 17 - git pull does not add a sign-off line

expecting success of 5521.18 'git pull --no-signoff does not add sign-off line': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_commit -C src two &&
	git -C dst pull --no-signoff --no-ff &&
	git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) 4331c28] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 00bbe3d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   4331c28..00bbe3d  main       -> origin/main
 * [new tag]         two        -> two
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 18 - git pull --no-signoff does not add sign-off line

expecting success of 5521.19 'git pull --signoff add a sign-off line': 
	test_when_finished "rm -fr src dst expected actual" &&
	echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_commit -C src two &&
	git -C dst pull --signoff --no-ff &&
	git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) 6f4b17f] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 5c4888c] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   6f4b17f..5c4888c  main       -> origin/main
 * [new tag]         two        -> two
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 19 - git pull --signoff add a sign-off line

expecting success of 5521.20 'git pull --no-signoff flag cancels --signoff flag': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_commit -C src two &&
	git -C dst pull --signoff --no-signoff --no-ff &&
	git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) 06e07da] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 738d2f7] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   06e07da..738d2f7  main       -> origin/main
 * [new tag]         two        -> two
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 20 - git pull --no-signoff flag cancels --signoff flag

expecting success of 5521.21 'git pull --no-verify flag passed to merge': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_hook -C dst commit-msg <<-\EOF &&
	false
	EOF
	test_commit -C src two &&
	git -C dst pull --no-ff --no-verify

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) 0ba3da9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 9f92fa5] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   0ba3da9..9f92fa5  main       -> origin/main
 * [new tag]         two        -> two
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 21 - git pull --no-verify flag passed to merge

expecting success of 5521.22 'git pull --no-verify --verify passed to merge': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src one &&
	git clone src dst &&
	test_hook -C dst commit-msg <<-\EOF &&
	false
	EOF
	test_commit -C src two &&
	test_must_fail git -C dst pull --no-ff --no-verify --verify

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src/.git/
[main (root-commit) ac97c8d] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'dst'...
done.
[main 4ae1176] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5521-pull-options/src
   ac97c8d..4ae1176  main       -> origin/main
 * [new tag]         two        -> two
Not committing merge; use 'git commit' to complete the merge.
ok 22 - git pull --no-verify --verify passed to merge

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5522-pull-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5522-pull-symlink/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 5522.1 'setup': 
	mkdir subdir &&
	echo file >subdir/file &&
	git add subdir/file &&
	git commit -q -m file &&
	git clone -q . clone-repo &&
	ln -s clone-repo/subdir/ subdir-link &&
	(
		cd clone-repo &&
		git config receive.denyCurrentBranch warn
	) &&
	git config receive.denyCurrentBranch warn

ok 1 - setup

expecting success of 5522.2 'pulling from real subdir': 
	(
		echo real >subdir/file &&
		git commit -m real subdir/file &&
		cd clone-repo/subdir/ &&
		git pull &&
		test real = $(cat file)
	)

[master 2467d43] real
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5522-pull-symlink/.
   4df8d9d..2467d43  master     -> origin/master
Updating 4df8d9d..2467d43
Fast-forward
 subdir/file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - pulling from real subdir

expecting success of 5522.3 'pulling from symlinked subdir': 
	(
		echo link >subdir/file &&
		git commit -m link subdir/file &&
		cd subdir-link/ &&
		git pull &&
		test link = $(cat file)
	)

[master d98696f] link
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5522-pull-symlink/.
   2467d43..d98696f  master     -> origin/master
Updating 2467d43..d98696f
Fast-forward
 subdir/file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - pulling from symlinked subdir

expecting success of 5522.4 'pushing from symlinked subdir': 
	(
		cd subdir-link/ &&
		echo push >file &&
		git commit -m push ./file &&
		git push
	) &&
	test push = $(git show HEAD:subdir/file)

[master 4aa2d47] push
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
remote: warning: updating the current branch        
To /<<PKGBUILDDIR>>/t/trash directory.t5522-pull-symlink/.
   d98696f..4aa2d47  master -> master
ok 4 - pushing from symlinked subdir

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5523-push-upstream.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/.git/
expecting success of 5523.1 'setup bare parent': 
	ensure_fresh_upstream &&
	git remote add upstream parent

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 1 - setup bare parent

expecting success of 5523.2 'setup local commit': 
	echo content >file &&
	git add file &&
	git commit -m one

[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 2 - setup local commit

expecting success of 5523.3 'push -u main:main': 
	git push -u upstream main:main &&
	check_config main upstream refs/heads/main

To parent
 * [new branch]      main -> main
branch 'main' set up to track 'upstream/main'.
ok 3 - push -u main:main

expecting success of 5523.4 'push -u main:other': 
	git push -u upstream main:other &&
	check_config main upstream refs/heads/other

To parent
 * [new branch]      main -> other
branch 'main' set up to track 'upstream/other'.
ok 4 - push -u main:other

expecting success of 5523.5 'push -u --dry-run main:otherX': 
	git push -u --dry-run upstream main:otherX &&
	check_config main upstream refs/heads/other

To parent
 * [new branch]      main -> otherX
Would set upstream of 'main' to 'otherX' of 'upstream'
ok 5 - push -u --dry-run main:otherX

expecting success of 5523.6 'push -u topic_2:topic_2': 
	git branch topic_2 &&
	git push -u upstream topic_2:topic_2 &&
	check_config topic_2 upstream refs/heads/topic_2

To parent
 * [new branch]      topic_2 -> topic_2
branch 'topic_2' set up to track 'upstream/topic_2'.
ok 6 - push -u topic_2:topic_2

expecting success of 5523.7 'push -u topic_2:other2': 
	git push -u upstream topic_2:other2 &&
	check_config topic_2 upstream refs/heads/other2

To parent
 * [new branch]      topic_2 -> other2
branch 'topic_2' set up to track 'upstream/other2'.
ok 7 - push -u topic_2:other2

expecting success of 5523.8 'push -u :topic_2': 
	git push -u upstream :topic_2 &&
	check_config topic_2 upstream refs/heads/other2

To parent
 - [deleted]         topic_2
ok 8 - push -u :topic_2

expecting success of 5523.9 'push -u --all': 
	git branch all1 &&
	git branch all2 &&
	git push -u --all &&
	check_config all1 upstream refs/heads/all1 &&
	check_config all2 upstream refs/heads/all2

To parent
 * [new branch]      all1 -> all1
 * [new branch]      all2 -> all2
 * [new branch]      topic_2 -> topic_2
branch 'main' set up to track 'upstream/main'.
branch 'all1' set up to track 'upstream/all1'.
branch 'all2' set up to track 'upstream/all2'.
branch 'topic_2' set up to track 'upstream/topic_2'.
ok 9 - push -u --all

expecting success of 5523.10 'push -u HEAD': 
	git checkout -b headbranch &&
	git push -u upstream HEAD &&
	check_config headbranch upstream refs/heads/headbranch

Switched to a new branch 'headbranch'
To parent
 * [new branch]      HEAD -> headbranch
branch 'headbranch' set up to track 'upstream/headbranch'.
ok 10 - push -u HEAD

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
died of signal 15 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
prerequisite TTY ok
expecting success of 5523.11 'progress messages go to tty': 
	ensure_fresh_upstream &&

	test_terminal git push -u upstream main >out 2>err &&
	test_i18ngrep "Writing objects" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
Writing objects:  33% (1/3)
Writing objects:  66% (2/3)
Writing objects: 100% (3/3)
Writing objects: 100% (3/3), 220 bytes | 31.00 KiB/s, done.
ok 11 - progress messages go to tty

expecting success of 5523.12 'progress messages do not go to non-tty': 
	ensure_fresh_upstream &&

	# skip progress messages, since stderr is non-tty
	git push -u upstream main >out 2>err &&
	test_i18ngrep ! "Writing objects" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 12 - progress messages do not go to non-tty

expecting success of 5523.13 'progress messages go to non-tty (forced)': 
	ensure_fresh_upstream &&

	# force progress messages to stderr, even though it is non-tty
	git push -u --progress upstream main >out 2>err &&
	test_i18ngrep "Writing objects" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
Writing objects:  33% (1/3)
Writing objects:  66% (2/3)
Writing objects: 100% (3/3)
Writing objects: 100% (3/3), 220 bytes | 44.00 KiB/s, done.
ok 13 - progress messages go to non-tty (forced)

expecting success of 5523.14 'push -q suppresses progress': 
	ensure_fresh_upstream &&

	test_terminal git push -u -q upstream main >out 2>err &&
	test_i18ngrep ! "Writing objects" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 14 - push -q suppresses progress

expecting success of 5523.15 'push --no-progress suppresses progress': 
	ensure_fresh_upstream &&

	test_terminal git push -u --no-progress upstream main >out 2>err &&
	test_i18ngrep ! "Unpacking objects" err &&
	test_i18ngrep ! "Writing objects" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 15 - push --no-progress suppresses progress

expecting success of 5523.16 'quiet push': 
	ensure_fresh_upstream &&

	test_terminal git push --quiet --no-progress upstream main 2>&1 | tee output &&
	test_must_be_empty output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 16 - quiet push

expecting success of 5523.17 'quiet push -u': 
	ensure_fresh_upstream &&

	test_terminal git push --quiet -u --no-progress upstream main 2>&1 | tee output &&
	test_must_be_empty output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5523-push-upstream/parent/
ok 17 - quiet push -u

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5524-pull-msg.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.git/
expecting success of 5524.1 'setup': 
	test_commit initial afile original &&
	git clone . cloned &&
	(
		cd cloned &&
		echo added >bfile &&
		git add bfile &&
		test_tick &&
		git commit -m "add bfile"
	) &&
	test_tick && test_tick &&
	echo "second" >afile &&
	git add afile &&
	git commit -m "second commit" &&
	echo "original $dollar" >afile &&
	git add afile &&
	git commit -m "do not clobber $dollar signs"

[master (root-commit) f176df3] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 afile
Cloning into 'cloned'...
done.
[master 1facbb5] add bfile
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bfile
[master 4db85b7] second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 8393f95] do not clobber $Dollar signs
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5524.2 'pull': 
(
	cd cloned &&
	git pull --no-rebase --log &&
	git log -2 &&
	git cat-file commit HEAD >result &&
	grep Dollar result
)

From /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.
   f176df3..8393f95  master     -> origin/master
Merge made by the 'ort' strategy.
 afile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
commit 1d3067572d216aa060a831b558751452794809ba
Merge: 1facbb5 8393f95
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    Merge branch 'master' of /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.
    
    * 'master' of /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.:
      do not clobber $Dollar signs
      second commit

commit 8393f95971e86cb10f5e23411fa764a2751859f1
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    do not clobber $Dollar signs
  do not clobber $Dollar signs
ok 2 - pull

expecting success of 5524.3 '--log=1 limits shortlog length': 
(
	cd cloned &&
	git reset --hard HEAD^ &&
	test "$(cat afile)" = original &&
	test "$(cat bfile)" = added &&
	git pull --no-rebase --log=1 &&
	git log -3 &&
	git cat-file commit HEAD >result &&
	grep Dollar result &&
	! grep "second commit" result
)

HEAD is now at 1facbb5 add bfile
Merge made by the 'ort' strategy.
 afile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
commit 4f5db87eb3368b755af0206c8d9f440e234f111d
Merge: 1facbb5 8393f95
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    Merge branch 'master' of /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.
    
    * 'master' of /<<PKGBUILDDIR>>/t/trash directory.t5524-pull-msg/.: (2 commits)
      do not clobber $Dollar signs
      ...

commit 8393f95971e86cb10f5e23411fa764a2751859f1
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    do not clobber $Dollar signs

commit 4db85b7332a1f2dd47ed83e51fbde7f24b2baa43
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    second commit
  do not clobber $Dollar signs
ok 3 - --log=1 limits shortlog length

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5525-fetch-tagopt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5525-fetch-tagopt/.git/
expecting success of 5525.1 'setup': 
	test_commit test &&
	setup_clone one &&
	git config remote.remote_one.tagopt --no-tags &&
	setup_clone two &&
	git config remote.remote_two.tagopt --tags
	
[master (root-commit) 14f901a] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.t
Cloning into bare repository 'one'...
done.
branch 'branch_one' set up to track 'origin/master'.
Cloning into bare repository 'two'...
done.
branch 'branch_two' set up to track 'origin/master'.
ok 1 - setup

expecting success of 5525.2 'fetch with tagopt=--no-tags does not get tag': 
	git fetch remote_one &&
	test_must_fail git show-ref tag_one &&
	git show-ref remote_one/branch_one
	
From one
 * [new branch]      branch_one -> remote_one/branch_one
 * [new branch]      master     -> remote_one/master
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/remotes/remote_one/branch_one
ok 2 - fetch with tagopt=--no-tags does not get tag

expecting success of 5525.3 'fetch --tags with tagopt=--no-tags gets tag': 
	(
		cd one &&
		git branch second_branch_one
	) &&
	git fetch --tags remote_one &&
	git show-ref tag_one &&
	git show-ref remote_one/second_branch_one
	
branch 'second_branch_one' set up to track 'origin/master'.
From one
 * [new branch]      second_branch_one -> remote_one/second_branch_one
 * [new tag]         tag_one           -> tag_one
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/tags/tag_one
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/remotes/remote_one/second_branch_one
ok 3 - fetch --tags with tagopt=--no-tags gets tag

expecting success of 5525.4 'fetch --no-tags with tagopt=--tags does not get tag': 
	git fetch --no-tags remote_two &&
	test_must_fail git show-ref tag_two &&
	git show-ref remote_two/branch_two
	
From two
 * [new branch]      branch_two -> remote_two/branch_two
 * [new branch]      master     -> remote_two/master
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/remotes/remote_two/branch_two
ok 4 - fetch --no-tags with tagopt=--tags does not get tag

expecting success of 5525.5 'fetch with tagopt=--tags gets tag': 
	(
		cd two &&
		git branch second_branch_two
	) &&
	git fetch remote_two &&
	git show-ref tag_two &&
	git show-ref remote_two/second_branch_two
	
branch 'second_branch_two' set up to track 'origin/master'.
From two
 * [new branch]      second_branch_two -> remote_two/second_branch_two
 * [new tag]         tag_two           -> tag_two
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/tags/tag_two
14f901a95ebae912feb4805f40ef68f15b0192c2 refs/remotes/remote_two/second_branch_two
ok 5 - fetch with tagopt=--tags gets tag

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5520-pull.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/.git/
expecting success of 5520.1 'setup': 
	echo file >file &&
	git add file &&
	git commit -a -m original

[main (root-commit) 2cbe290] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 5520.2 'pulling into void': 
	git init cloned &&
	(
		cd cloned &&
		git pull ..
	) &&
	test_path_is_file file &&
	test_path_is_file cloned/file &&
	test_cmp file cloned/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned/.git/
From ..
 * branch            HEAD       -> FETCH_HEAD
ok 2 - pulling into void

expecting success of 5520.3 'pulling into void using main:main': 
	git init cloned-uho &&
	(
		cd cloned-uho &&
		git pull .. main:main
	) &&
	test_path_is_file file &&
	test_path_is_file cloned-uho/file &&
	test_cmp file cloned-uho/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned-uho/.git/
From ..
 * [new branch]      main       -> main
ok 3 - pulling into void using main:main

expecting success of 5520.4 'pulling into void does not overwrite untracked files': 
	git init cloned-untracked &&
	(
		cd cloned-untracked &&
		echo untracked >file &&
		test_must_fail git pull .. main &&
		echo untracked >expect &&
		test_cmp expect file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned-untracked/.git/
From ..
 * branch            main       -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
	file
Please move or remove them before you merge.
Aborting
ok 4 - pulling into void does not overwrite untracked files

expecting success of 5520.5 'pulling into void does not overwrite staged files': 
	git init cloned-staged-colliding &&
	(
		cd cloned-staged-colliding &&
		echo "alternate content" >file &&
		git add file &&
		test_must_fail git pull .. main &&
		echo "alternate content" >expect &&
		test_cmp expect file &&
		git cat-file blob :file >file.index &&
		test_cmp expect file.index
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned-staged-colliding/.git/
From ..
 * branch            main       -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
	file
Please commit your changes or stash them before you merge.
Aborting
ok 5 - pulling into void does not overwrite staged files

expecting success of 5520.6 'pulling into void does not remove new staged files': 
	git init cloned-staged-new &&
	(
		cd cloned-staged-new &&
		echo "new tracked file" >newfile &&
		git add newfile &&
		git pull .. main &&
		echo "new tracked file" >expect &&
		test_cmp expect newfile &&
		git cat-file blob :newfile >newfile.index &&
		test_cmp expect newfile.index
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned-staged-new/.git/
From ..
 * branch            main       -> FETCH_HEAD
ok 6 - pulling into void does not remove new staged files

expecting success of 5520.7 'pulling into void must not create an octopus': 
	git init cloned-octopus &&
	(
		cd cloned-octopus &&
		test_must_fail git pull .. main main &&
		test_path_is_missing file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/cloned-octopus/.git/
From ..
 * branch            main       -> FETCH_HEAD
 * branch            main       -> FETCH_HEAD
fatal: Cannot merge multiple branches into empty head.
ok 7 - pulling into void must not create an octopus

expecting success of 5520.8 'test . as a remote': 
	git branch copy main &&
	git config branch.copy.remote . &&
	git config branch.copy.merge refs/heads/main &&
	echo updated >file &&
	git commit -a -m updated &&
	git checkout copy &&
	echo file >expect &&
	test_cmp expect file &&
	git pull &&
	echo updated >expect &&
	test_cmp expect file &&
	git reflog -1 >reflog.actual &&
	sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
	echo "OBJID HEAD@{0}: pull: Fast-forward" >reflog.expected &&
	test_cmp reflog.expected reflog.fuzzy

[main 732015b] updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'copy'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
From .
 * branch            main       -> FETCH_HEAD
Updating 2cbe290..732015b
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 8 - test . as a remote

expecting success of 5520.9 'the default remote . should not break explicit pull': 
	git checkout -b second main^ &&
	echo modified >file &&
	git commit -a -m modified &&
	git checkout copy &&
	git reset --hard HEAD^ &&
	echo file >expect &&
	test_cmp expect file &&
	git pull --no-rebase . second &&
	echo modified >expect &&
	test_cmp expect file &&
	git reflog -1 >reflog.actual &&
	sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
	echo "OBJID HEAD@{0}: pull --no-rebase . second: Fast-forward" >reflog.expected &&
	test_cmp reflog.expected reflog.fuzzy

Switched to a new branch 'second'
[second 5cd3782] modified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'copy'
Your branch is up to date with 'main'.
HEAD is now at 2cbe290 original
From .
 * branch            second     -> FETCH_HEAD
Updating 2cbe290..5cd3782
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - the default remote . should not break explicit pull

expecting success of 5520.10 'fail if wildcard spec does not match any refs': 
	git checkout -b test copy^ &&
	test_when_finished "git checkout -f copy && git branch -D test" &&
	echo file >expect &&
	test_cmp expect file &&
	test_must_fail git pull . "refs/nonexisting1/*:refs/nonexisting2/*" 2>err &&
	test_i18ngrep "no candidates for merging" err &&
	test_cmp expect file

Switched to a new branch 'test'
There are no candidates for merging among the refs that you just fetched.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch test (was 2cbe290).
ok 10 - fail if wildcard spec does not match any refs

expecting success of 5520.11 'fail if no branches specified with non-default remote': 
	git remote add test_remote . &&
	test_when_finished "git remote remove test_remote" &&
	git checkout -b test copy^ &&
	test_when_finished "git checkout -f copy && git branch -D test" &&
	echo file >expect &&
	test_cmp expect file &&
	test_config branch.test.remote origin &&
	test_must_fail git pull test_remote 2>err &&
	test_i18ngrep "specify a branch on the command line" err &&
	test_cmp expect file

Switched to a new branch 'test'
for your current branch, you must specify a branch on the command line.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch test (was 2cbe290).
ok 11 - fail if no branches specified with non-default remote

expecting success of 5520.12 'fail if not on a branch': 
	git remote add origin . &&
	test_when_finished "git remote remove origin" &&
	git checkout HEAD^ &&
	test_when_finished "git checkout -f copy" &&
	echo file >expect &&
	test_cmp expect file &&
	test_must_fail git pull 2>err &&
	test_i18ngrep "not currently on a branch" err &&
	test_cmp expect file

Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2cbe290 original
You are not currently on a branch.
Previous HEAD position was 2cbe290 original
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
ok 12 - fail if not on a branch

expecting success of 5520.13 'fail if no configuration for current branch': 
	git remote add test_remote . &&
	test_when_finished "git remote remove test_remote" &&
	git checkout -b test copy^ &&
	test_when_finished "git checkout -f copy && git branch -D test" &&
	test_config branch.test.remote test_remote &&
	echo file >expect &&
	test_cmp expect file &&
	test_must_fail git pull 2>err &&
	test_i18ngrep "no tracking information" err &&
	test_cmp expect file

Switched to a new branch 'test'
There is no tracking information for the current branch.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch test (was 2cbe290).
ok 13 - fail if no configuration for current branch

expecting success of 5520.14 'pull --all: fail if no configuration for current branch': 
	git remote add test_remote . &&
	test_when_finished "git remote remove test_remote" &&
	git checkout -b test copy^ &&
	test_when_finished "git checkout -f copy && git branch -D test" &&
	test_config branch.test.remote test_remote &&
	echo file >expect &&
	test_cmp expect file &&
	test_must_fail git pull --all 2>err &&
	test_i18ngrep "There is no tracking information" err &&
	test_cmp expect file

Switched to a new branch 'test'
There is no tracking information for the current branch.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch test (was 2cbe290).
ok 14 - pull --all: fail if no configuration for current branch

expecting success of 5520.15 'fail if upstream branch does not exist': 
	git checkout -b test copy^ &&
	test_when_finished "git checkout -f copy && git branch -D test" &&
	test_config branch.test.remote . &&
	test_config branch.test.merge refs/heads/nonexisting &&
	echo file >expect &&
	test_cmp expect file &&
	test_must_fail git pull 2>err &&
	test_i18ngrep "no such ref was fetched" err &&
	test_cmp expect file

Switched to a new branch 'test'
from the remote, but no such ref was fetched.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch test (was 2cbe290).
ok 15 - fail if upstream branch does not exist

expecting success of 5520.16 'fetch upstream branch even if refspec excludes it': 
	# the branch names are not important here except that
	# the first one must not be a prefix of the second,
	# since otherwise the ref-prefix protocol extension
	# would match both
	git branch in-refspec HEAD^ &&
	git branch not-in-refspec HEAD &&
	git init -b in-refspec downstream &&
	git -C downstream remote add -t in-refspec origin "file://$(pwd)/.git" &&
	git -C downstream config branch.in-refspec.remote origin &&
	git -C downstream config branch.in-refspec.merge refs/heads/not-in-refspec &&
	git -C downstream pull &&
	git rev-parse --verify not-in-refspec >expect &&
	git -C downstream rev-parse --verify HEAD >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/downstream/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5520-pull/
 * branch            not-in-refspec -> FETCH_HEAD
 * [new branch]      in-refspec -> origin/in-refspec
ok 16 - fetch upstream branch even if refspec excludes it

expecting success of 5520.17 'fail if the index has unresolved entries': 
	git checkout -b third second^ &&
	test_when_finished "git checkout -f copy && git branch -D third" &&
	echo file >expect &&
	test_cmp expect file &&
	test_commit modified2 file &&
	git ls-files -u >unmerged &&
	test_must_be_empty unmerged &&
	test_must_fail git pull --no-rebase . second &&
	git ls-files -u >unmerged &&
	test_file_not_empty unmerged &&
	cp file expected &&
	test_must_fail git pull . second 2>err &&
	test_i18ngrep "Pulling is not possible because you have unmerged files." err &&
	test_cmp expected file &&
	git add file &&
	git ls-files -u >unmerged &&
	test_must_be_empty unmerged &&
	test_must_fail git pull . second 2>err &&
	test_i18ngrep "You have not concluded your merge" err &&
	test_cmp expected file

Switched to a new branch 'third'
[third 97401ed] modified2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From .
 * branch            second     -> FETCH_HEAD
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
error: Pulling is not possible because you have unmerged files.
error: You have not concluded your merge (MERGE_HEAD exists).
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch third (was 97401ed).
ok 17 - fail if the index has unresolved entries

expecting success of 5520.18 'fast-forwards working tree if branch head is updated': 
	git checkout -b third second^ &&
	test_when_finished "git checkout -f copy && git branch -D third" &&
	echo file >expect &&
	test_cmp expect file &&
	git pull . second:third 2>err &&
	test_i18ngrep "fetch updated the current branch head" err &&
	echo modified >expect &&
	test_cmp expect file &&
	test_cmp_rev third second

Switched to a new branch 'third'
Already up to date.
warning: fetch updated the current branch head.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch third (was 5cd3782).
ok 18 - fast-forwards working tree if branch head is updated

expecting success of 5520.19 'fast-forward fails with conflicting work tree': 
	git checkout -b third second^ &&
	test_when_finished "git checkout -f copy && git branch -D third" &&
	echo file >expect &&
	test_cmp expect file &&
	echo conflict >file &&
	test_must_fail git pull . second:third 2>err &&
	test_i18ngrep "Cannot fast-forward your working tree" err &&
	echo conflict >expect &&
	test_cmp expect file &&
	test_cmp_rev third second

Switched to a new branch 'third'
fatal: Cannot fast-forward your working tree.
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
Deleted branch third (was 5cd3782).
ok 19 - fast-forward fails with conflicting work tree

expecting success of 5520.20 '--rebase': 
	git branch to-rebase &&
	echo modified again >file &&
	git commit -m file file &&
	git checkout to-rebase &&
	echo new >file2 &&
	git add file2 &&
	git commit -m "new file" &&
	git tag before-rebase &&
	git pull --rebase . copy &&
	test_cmp_rev HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual

[copy f29aa66] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'to-rebase'
[to-rebase 885b28c] new file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 20 - --rebase

expecting success of 5520.21 '--rebase (merge) fast forward': 
	git reset --hard before-rebase &&
	git checkout -b ff &&
	echo another modification >file &&
	git commit -m third file &&

	git checkout to-rebase &&
	git -c rebase.backend=merge pull --rebase . ff &&
	test_cmp_rev HEAD ff &&

	# The above only validates the result.  Did we actually bypass rebase?
	git reflog -1 >reflog.actual &&
	sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
	echo "OBJID HEAD@{0}: pull --rebase . ff: Fast-forward" >reflog.expected &&
	test_cmp reflog.expected reflog.fuzzy

HEAD is now at 885b28c new file
Switched to a new branch 'ff'
[ff ae8c5c6] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'to-rebase'
From .
 * branch            ff         -> FETCH_HEAD
Updating 885b28c..ae8c5c6
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 21 - --rebase (merge) fast forward

expecting success of 5520.22 '--rebase (am) fast forward': 
	git reset --hard before-rebase &&

	git -c rebase.backend=apply pull --rebase . ff &&
	test_cmp_rev HEAD ff &&

	# The above only validates the result.  Did we actually bypass rebase?
	git reflog -1 >reflog.actual &&
	sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
	echo "OBJID HEAD@{0}: pull --rebase . ff: Fast-forward" >reflog.expected &&
	test_cmp reflog.expected reflog.fuzzy

HEAD is now at 885b28c new file
From .
 * branch            ff         -> FETCH_HEAD
Updating 885b28c..ae8c5c6
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 22 - --rebase (am) fast forward

expecting success of 5520.23 '--rebase --autostash fast forward': 
	test_when_finished "
		git reset --hard
		git checkout to-rebase
		git branch -D to-rebase-ff
		git branch -D behind" &&
	git branch behind &&
	git checkout -b to-rebase-ff &&
	echo another modification >>file &&
	git add file &&
	git commit -m mod &&

	git checkout behind &&
	echo dirty >file &&
	git pull --rebase --autostash . to-rebase-ff &&
	test_cmp_rev HEAD to-rebase-ff

Switched to a new branch 'to-rebase-ff'
[to-rebase-ff 9606fd6] mod
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'behind'
From .
 * branch            to-rebase-ff -> FETCH_HEAD
Updating ae8c5c6..9606fd6
Created autostash: ce98a07
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
Applying autostash resulted in conflicts.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
HEAD is now at 9606fd6 mod
Switched to branch 'to-rebase'
Deleted branch to-rebase-ff (was 9606fd6).
Deleted branch behind (was 9606fd6).
ok 23 - --rebase --autostash fast forward

expecting success of 5520.24 '--rebase with rebase.autostash succeeds on ff': 
	test_when_finished "rm -fr src dst actual" &&
	git init src &&
	test_commit -C src "initial" file "content" &&
	git clone src dst &&
	test_commit -C src --printf "more_content" file "more content\ncontent\n" &&
	echo "dirty" >>dst/file &&
	test_config -C dst rebase.autostash true &&
	git -C dst pull --rebase >actual 2>&1 &&
	grep -q "Fast-forward" actual &&
	grep -q "Applied autostash." actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/src/.git/
[main (root-commit) 1cff5a1] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'dst'...
done.
[main cbcd178] more_content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 24 - --rebase with rebase.autostash succeeds on ff

expecting success of 5520.25 '--rebase with conflicts shows advice': 
	test_when_finished "git rebase --abort; git checkout -f to-rebase" &&
	git checkout -b seq &&
	test_seq 5 >seq.txt &&
	git add seq.txt &&
	test_tick &&
	git commit -m "Add seq.txt" &&
	echo 6 >>seq.txt &&
	test_tick &&
	git commit -m "Append to seq.txt" seq.txt &&
	git checkout -b with-conflicts HEAD^ &&
	echo conflicting >>seq.txt &&
	test_tick &&
	git commit -m "Create conflict" seq.txt &&
	test_must_fail git pull --rebase . seq 2>err >out &&
	test_i18ngrep "Resolve all conflicts manually" err

Switched to a new branch 'seq'
[seq 6a59cbd] Add seq.txt
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 seq.txt
[seq 3aa99e3] Append to seq.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'with-conflicts'
[with-conflicts 7cd95f6] Create conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
hint: Resolve all conflicts manually, mark them as resolved with
Switched to branch 'to-rebase'
ok 25 - --rebase with conflicts shows advice

expecting success of 5520.26 'failed --rebase shows advice': 
	test_when_finished "git rebase --abort; git checkout -f to-rebase" &&
	git checkout -b diverging &&
	test_commit attributes .gitattributes "* text=auto" attrs &&
	sha1="$(printf "1\\r\\n" | git hash-object -w --stdin)" &&
	git update-index --cacheinfo 0644 $sha1 file &&
	git commit -m v1-with-cr &&
	# force checkout because `git reset --hard` will not leave clean `file`
	git checkout -f -b fails-to-rebase HEAD^ &&
	test_commit v2-without-cr file "2" file2-lf &&
	test_must_fail git pull --rebase . diverging 2>err >out &&
	test_i18ngrep "Resolve all conflicts manually" err

Switched to a new branch 'diverging'
[diverging d45e9d5] attributes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .gitattributes
[diverging f41506f] v1-with-cr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'fails-to-rebase'
[fails-to-rebase daaec46] v2-without-cr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
hint: Resolve all conflicts manually, mark them as resolved with
Switched to branch 'to-rebase'
ok 26 - failed --rebase shows advice

expecting success of 5520.27 '--rebase fails with multiple branches': 
	git reset --hard before-rebase &&
	test_must_fail git pull --rebase . copy main 2>err &&
	test_cmp_rev HEAD before-rebase &&
	test_i18ngrep "Cannot rebase onto multiple branches" err &&
	echo modified >expect &&
	git show HEAD:file >actual &&
	test_cmp expect actual

HEAD is now at 885b28c new file
fatal: Cannot rebase onto multiple branches.
ok 27 - --rebase fails with multiple branches

expecting success of 5520.28 'pull --rebase succeeds with dirty working directory and rebase.autostash set': 
	test_config rebase.autostash true &&
	test_pull_autostash 1 --rebase

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Rebasing (1/1)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 28 - pull --rebase succeeds with dirty working directory and rebase.autostash set

expecting success of 5520.29 'pull --rebase --autostash & rebase.autostash=true': 
	test_config rebase.autostash true &&
	test_pull_autostash 1 --rebase --autostash

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Rebasing (1/1)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 29 - pull --rebase --autostash & rebase.autostash=true

expecting success of 5520.30 'pull --rebase --autostash & rebase.autostash=false': 
	test_config rebase.autostash false &&
	test_pull_autostash 1 --rebase --autostash

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Rebasing (1/1)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 30 - pull --rebase --autostash & rebase.autostash=false

expecting success of 5520.31 'pull --rebase --autostash & rebase.autostash unset': 
	test_unconfig rebase.autostash &&
	test_pull_autostash 1 --rebase --autostash

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Rebasing (1/1)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 31 - pull --rebase --autostash & rebase.autostash unset

expecting success of 5520.32 'pull --rebase --no-autostash & rebase.autostash=true': 
	test_config rebase.autostash true &&
	test_pull_autostash_fail --rebase --no-autostash

HEAD is now at 885b28c new file
error: cannot pull with rebase: Your index contains uncommitted changes.
ok 32 - pull --rebase --no-autostash & rebase.autostash=true

expecting success of 5520.33 'pull --rebase --no-autostash & rebase.autostash=false': 
	test_config rebase.autostash false &&
	test_pull_autostash_fail --rebase --no-autostash

HEAD is now at 885b28c new file
error: cannot pull with rebase: Your index contains uncommitted changes.
ok 33 - pull --rebase --no-autostash & rebase.autostash=false

expecting success of 5520.34 'pull --rebase --no-autostash & rebase.autostash unset': 
	test_unconfig rebase.autostash &&
	test_pull_autostash_fail --rebase --no-autostash

HEAD is now at 885b28c new file
error: cannot pull with rebase: Your index contains uncommitted changes.
ok 34 - pull --rebase --no-autostash & rebase.autostash unset

expecting success of 5520.35 'pull succeeds with dirty working directory and merge.autostash set': 
	test_config merge.autostash true &&
	test_pull_autostash 2 --no-rebase

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 35 - pull succeeds with dirty working directory and merge.autostash set

expecting success of 5520.36 'pull --autostash & merge.autostash=true': 
	test_config merge.autostash true &&
	test_pull_autostash 2 --autostash --no-rebase

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 36 - pull --autostash & merge.autostash=true

expecting success of 5520.37 'pull --autostash & merge.autostash=false': 
	test_config merge.autostash false &&
	test_pull_autostash 2 --autostash --no-rebase

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 37 - pull --autostash & merge.autostash=false

expecting success of 5520.38 'pull --autostash & merge.autostash unset': 
	test_unconfig merge.autostash &&
	test_pull_autostash 2 --autostash --no-rebase

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 38 - pull --autostash & merge.autostash unset

expecting success of 5520.39 'pull --no-autostash & merge.autostash=true': 
	test_config merge.autostash true &&
	test_pull_autostash_fail --no-autostash --no-rebase

HEAD is now at 885b28c new file
error: Your local changes to the following files would be overwritten by merge:
ok 39 - pull --no-autostash & merge.autostash=true

expecting success of 5520.40 'pull --no-autostash & merge.autostash=false': 
	test_config merge.autostash false &&
	test_pull_autostash_fail --no-autostash --no-rebase

HEAD is now at 885b28c new file
error: Your local changes to the following files would be overwritten by merge:
ok 40 - pull --no-autostash & merge.autostash=false

expecting success of 5520.41 'pull --no-autostash & merge.autostash unset': 
	test_unconfig merge.autostash &&
	test_pull_autostash_fail --no-autostash --no-rebase

HEAD is now at 885b28c new file
error: Your local changes to the following files would be overwritten by merge:
ok 41 - pull --no-autostash & merge.autostash unset

expecting success of 5520.42 'pull.rebase': 
	git reset --hard before-rebase &&
	test_config pull.rebase true &&
	git pull . copy &&
	test_cmp_rev HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 42 - pull.rebase

expecting success of 5520.43 'pull --autostash & pull.rebase=true': 
	test_config pull.rebase true &&
	test_pull_autostash 1 --autostash

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Created autostash: bc3905e
Rebasing (1/1)
Applied autostash.

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 43 - pull --autostash & pull.rebase=true

expecting success of 5520.44 'pull --no-autostash & pull.rebase=true': 
	test_config pull.rebase true &&
	test_pull_autostash_fail --no-autostash

HEAD is now at 885b28c new file
error: cannot pull with rebase: Your index contains uncommitted changes.
ok 44 - pull --no-autostash & pull.rebase=true

expecting success of 5520.45 'branch.to-rebase.rebase': 
	git reset --hard before-rebase &&
	test_config branch.to-rebase.rebase true &&
	git pull . copy &&
	test_cmp_rev HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 45 - branch.to-rebase.rebase

expecting success of 5520.46 'branch.to-rebase.rebase should override pull.rebase': 
	git reset --hard before-rebase &&
	test_config pull.rebase true &&
	test_config branch.to-rebase.rebase false &&
	git pull . copy &&
	test_cmp_rev ! HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual

HEAD is now at 885b28c new file
From .
 * branch            copy       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 46 - branch.to-rebase.rebase should override pull.rebase

expecting success of 5520.47 'pull --rebase warns on --verify-signatures': 
	git reset --hard before-rebase &&
	git pull --rebase --verify-signatures . copy 2>err &&
	test_cmp_rev HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual &&
	test_i18ngrep "ignoring --verify-signatures for rebase" err

HEAD is now at 885b28c new file
warning: ignoring --verify-signatures for rebase
ok 47 - pull --rebase warns on --verify-signatures

expecting success of 5520.48 'pull --rebase does not warn on --no-verify-signatures': 
	git reset --hard before-rebase &&
	git pull --rebase --no-verify-signatures . copy 2>err &&
	test_cmp_rev HEAD^ copy &&
	echo new >expect &&
	git show HEAD:file2 >actual &&
	test_cmp expect actual &&
	test_i18ngrep ! "verify-signatures" err

HEAD is now at 885b28c new file
ok 48 - pull --rebase does not warn on --no-verify-signatures

expecting success of 5520.49 'preserve merge setup': 
	git reset --hard before-rebase &&
	git checkout -b keep-merge second^ &&
	test_commit file3 &&
	git checkout to-rebase &&
	git merge keep-merge &&
	git tag before-preserve-rebase

HEAD is now at 885b28c new file
Switched to a new branch 'keep-merge'
[keep-merge 5d5048c] file3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3.t
Switched to branch 'to-rebase'
Merge made by the 'ort' strategy.
 file3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file3.t
ok 49 - preserve merge setup

expecting success of 5520.50 'pull.rebase=false create a new merge commit': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase false &&
	git pull . copy &&
	test_cmp_rev HEAD^1 before-preserve-rebase &&
	test_cmp_rev HEAD^2 copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 50 - pull.rebase=false create a new merge commit

expecting success of 5520.51 'pull.rebase=true flattens keep-merge': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase true &&
	git pull . copy &&
	test_cmp_rev HEAD^^ copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 51 - pull.rebase=true flattens keep-merge

expecting success of 5520.52 'pull.rebase=1 is treated as true and flattens keep-merge': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase 1 &&
	git pull . copy &&
	test_cmp_rev HEAD^^ copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 52 - pull.rebase=1 is treated as true and flattens keep-merge

expecting success of 5520.53 'pull.rebase=interactive': 
	write_script "$TRASH_DIRECTORY/fake-editor" <<-\EOF &&
	echo I was here >fake.out &&
	false
	EOF
	test_set_editor "$TRASH_DIRECTORY/fake-editor" &&
	test_when_finished "test_might_fail git rebase --abort" &&
	test_must_fail git pull --rebase=interactive . copy &&
	echo "I was here" >expect &&
	test_cmp expect fake.out

From .
 * branch            copy       -> FETCH_HEAD
error: There was a problem with the editor '"$FAKE_EDITOR"'.
fatal: No rebase in progress?
ok 53 - pull.rebase=interactive

expecting success of 5520.54 'pull --rebase=i': 
	write_script "$TRASH_DIRECTORY/fake-editor" <<-\EOF &&
	echo I was here, too >fake.out &&
	false
	EOF
	test_set_editor "$TRASH_DIRECTORY/fake-editor" &&
	test_when_finished "test_might_fail git rebase --abort" &&
	test_must_fail git pull --rebase=i . copy &&
	echo "I was here, too" >expect &&
	test_cmp expect fake.out

From .
 * branch            copy       -> FETCH_HEAD
error: There was a problem with the editor '"$FAKE_EDITOR"'.
fatal: No rebase in progress?
ok 54 - pull --rebase=i

expecting success of 5520.55 'pull.rebase=invalid fails': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase invalid &&
	test_must_fail git pull . copy

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
fatal: invalid value for 'pull.rebase': 'invalid'
ok 55 - pull.rebase=invalid fails

expecting success of 5520.56 '--rebase=false create a new merge commit': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase true &&
	git pull --rebase=false . copy &&
	test_cmp_rev HEAD^1 before-preserve-rebase &&
	test_cmp_rev HEAD^2 copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 56 - --rebase=false create a new merge commit

expecting success of 5520.57 '--rebase=true rebases and flattens keep-merge': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase merges &&
	git pull --rebase=true . copy &&
	test_cmp_rev HEAD^^ copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 57 - --rebase=true rebases and flattens keep-merge

expecting success of 5520.58 '--rebase=invalid fails': 
	git reset --hard before-preserve-rebase &&
	test_must_fail git pull --rebase=invalid . copy

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
error: invalid value for '--rebase': 'invalid'
ok 58 - --rebase=invalid fails

expecting success of 5520.59 '--rebase overrides pull.rebase=merges and flattens keep-merge': 
	git reset --hard before-preserve-rebase &&
	test_config pull.rebase merges &&
	git pull --rebase . copy &&
	test_cmp_rev HEAD^^ copy &&
	echo file3 >expect &&
	git show HEAD:file3.t >actual &&
	test_cmp expect actual

HEAD is now at 7ccc38b Merge branch 'keep-merge' into to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 59 - --rebase overrides pull.rebase=merges and flattens keep-merge

expecting success of 5520.60 '--rebase with rebased upstream': 
	git remote add -f me . &&
	git checkout copy &&
	git tag copy-orig &&
	git reset --hard HEAD^ &&
	echo conflicting modification >file &&
	git commit -m conflict file &&
	git checkout to-rebase &&
	echo file >file2 &&
	git commit -m to-rebase file2 &&
	git tag to-rebase-orig &&
	git pull --rebase me copy &&
	echo "conflicting modification" >expect &&
	test_cmp expect file &&
	echo file >expect &&
	test_cmp expect file2

Updating me
From .
 * [new branch]      copy            -> me/copy
 * [new branch]      diverging       -> me/diverging
 * [new branch]      fails-to-rebase -> me/fails-to-rebase
 * [new branch]      ff              -> me/ff
 * [new branch]      in-refspec      -> me/in-refspec
 * [new branch]      keep-merge      -> me/keep-merge
 * [new branch]      main            -> me/main
 * [new branch]      not-in-refspec  -> me/not-in-refspec
 * [new branch]      second          -> me/second
 * [new branch]      seq             -> me/seq
 * [new branch]      to-rebase       -> me/to-rebase
 * [new branch]      with-conflicts  -> me/with-conflicts
Switched to branch 'copy'
Your branch and 'main' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
HEAD is now at 5cd3782 modified
[copy ae98574] conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'to-rebase'
[to-rebase cb9bf26] to-rebase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From .
 * branch            copy       -> FETCH_HEAD
 + f29aa66...ae98574 copy       -> me/copy  (forced update)
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 60 - --rebase with rebased upstream

expecting success of 5520.61 '--rebase -f with rebased upstream': 
	test_when_finished "test_might_fail git rebase --abort" &&
	git reset --hard to-rebase-orig &&
	git pull --rebase -f me copy &&
	echo "conflicting modification" >expect &&
	test_cmp expect file &&
	echo file >expect &&
	test_cmp expect file2

HEAD is now at cb9bf26 to-rebase
From .
 * branch            copy       -> FETCH_HEAD
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
fatal: No rebase in progress?
ok 61 - --rebase -f with rebased upstream

expecting success of 5520.62 '--rebase with rebased default upstream': 
	git update-ref refs/remotes/me/copy copy-orig &&
	git checkout --track -b to-rebase2 me/copy &&
	git reset --hard to-rebase-orig &&
	git pull --rebase &&
	echo "conflicting modification" >expect &&
	test_cmp expect file &&
	echo file >expect &&
	test_cmp expect file2

Switched to a new branch 'to-rebase2'
branch 'to-rebase2' set up to track 'me/copy'.
HEAD is now at cb9bf26 to-rebase
From .
 + f29aa66...ae98574 copy       -> me/copy  (forced update)
 + 30e0c29...efbde20 to-rebase  -> me/to-rebase  (forced update)
 * [new branch]      to-rebase2 -> me/to-rebase2
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase2.
ok 62 - --rebase with rebased default upstream

expecting success of 5520.63 'rebased upstream + fetch + pull --rebase': 

	git update-ref refs/remotes/me/copy copy-orig &&
	git reset --hard to-rebase-orig &&
	git checkout --track -b to-rebase3 me/copy &&
	git reset --hard to-rebase-orig &&
	git fetch &&
	git pull --rebase &&
	echo "conflicting modification" >expect &&
	test_cmp expect file &&
	echo file >expect &&
	test_cmp expect file2


HEAD is now at cb9bf26 to-rebase
Switched to a new branch 'to-rebase3'
branch 'to-rebase3' set up to track 'me/copy'.
HEAD is now at cb9bf26 to-rebase
From .
 + f29aa66...ae98574 copy       -> me/copy  (forced update)
 * [new branch]      to-rebase3 -> me/to-rebase3
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase3.
ok 63 - rebased upstream + fetch + pull --rebase

expecting success of 5520.64 'pull --rebase dies early with dirty working directory': 
	git checkout to-rebase &&
	git update-ref refs/remotes/me/copy copy^ &&
	COPY="$(git rev-parse --verify me/copy)" &&
	git rebase --onto $COPY copy &&
	test_config branch.to-rebase.remote me &&
	test_config branch.to-rebase.merge refs/heads/copy &&
	test_config branch.to-rebase.rebase true &&
	echo dirty >>file &&
	git add file &&
	test_must_fail git pull &&
	test_cmp_rev "$COPY" me/copy &&
	git checkout HEAD -- file &&
	git pull &&
	test_cmp_rev ! "$COPY" me/copy

Switched to branch 'to-rebase'
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
error: cannot pull with rebase: Your index contains uncommitted changes.
error: please commit or stash them.
From .
   5cd3782..ae98574  copy       -> me/copy
 + efbde20...09622e5 to-rebase  -> me/to-rebase  (forced update)
 + cb9bf26...efbde20 to-rebase3 -> me/to-rebase3  (forced update)
Rebasing (1/3)
Rebasing (2/3)
Rebasing (3/3)

                                                                                
Successfully rebased and updated refs/heads/to-rebase.
ok 64 - pull --rebase dies early with dirty working directory

expecting success of 5520.65 'pull --rebase works on branch yet to be born': 
	git rev-parse main >expect &&
	mkdir empty_repo &&
	(
		cd empty_repo &&
		git init &&
		git pull --rebase .. main &&
		git rev-parse HEAD >../actual
	) &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/empty_repo/.git/
From ..
 * branch            main       -> FETCH_HEAD
ok 65 - pull --rebase works on branch yet to be born

expecting success of 5520.66 'pull --rebase fails on unborn branch with staged changes': 
	test_when_finished "rm -rf empty_repo2" &&
	git init empty_repo2 &&
	(
		cd empty_repo2 &&
		echo staged-file >staged-file &&
		git add staged-file &&
		echo staged-file >expect &&
		git ls-files >actual &&
		test_cmp expect actual &&
		test_must_fail git pull --rebase .. main 2>err &&
		git ls-files >actual &&
		test_cmp expect actual &&
		git show :staged-file >actual &&
		test_cmp expect actual &&
		test_i18ngrep "unborn branch with changes added to the index" err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/empty_repo2/.git/
fatal: Updating an unborn branch with changes added to the index.
ok 66 - pull --rebase fails on unborn branch with staged changes

expecting success of 5520.67 'pull --rebase fails on corrupt HEAD': 
	test_when_finished "rm -rf corrupt" &&
	git init corrupt &&
	(
		cd corrupt &&
		test_commit one &&
		git rev-parse --verify HEAD >head &&
		obj=$(sed "s#^..#&/#" head) &&
		rm -f .git/objects/$obj &&
		test_must_fail git pull --rebase
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/corrupt/.git/
[main (root-commit) 276727f] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
error: cannot pull with rebase: Your index contains uncommitted changes.
error: please commit or stash them.
ok 67 - pull --rebase fails on corrupt HEAD

expecting success of 5520.68 'setup for detecting upstreamed changes': 
	test_create_repo src &&
	test_commit -C src --printf one stuff "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" &&
	git clone src dst &&
	(
		cd src &&
		modify s/5/43/ stuff &&
		git commit -a -m "5->43" &&
		modify s/6/42/ stuff &&
		git commit -a -m "Make it bigger"
	) &&
	(
		cd dst &&
		modify s/5/43/ stuff &&
		git commit -a -m "Independent discovery of 5->43"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/src/.git/
[main (root-commit) ca81fa5] one
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 stuff
Cloning into 'dst'...
done.
[main 7b6fb2a] 5->43
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 7fa95e6] Make it bigger
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2dad04b] Independent discovery of 5->43
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 68 - setup for detecting upstreamed changes

expecting success of 5520.69 'git pull --rebase detects upstreamed changes': 
	(
		cd dst &&
		git pull --rebase &&
		git ls-files -u >untracked &&
		test_must_be_empty untracked
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/src
   ca81fa5..7fa95e6  main       -> origin/main
warning: skipped previously applied commit 2dad04b
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"

                                                                                
Successfully rebased and updated refs/heads/main.
ok 69 - git pull --rebase detects upstreamed changes

expecting success of 5520.70 'setup for avoiding reapplying old patches': 
	(
		cd dst &&
		test_might_fail git rebase --abort &&
		git reset --hard origin/main
	) &&
	git clone --bare src src-replace.git &&
	rm -rf src &&
	mv src-replace.git src &&
	(
		cd dst &&
		modify s/2/22/ stuff &&
		git commit -a -m "Change 2" &&
		modify s/3/33/ stuff &&
		git commit -a -m "Change 3" &&
		modify s/4/44/ stuff &&
		git commit -a -m "Change 4" &&
		git push &&

		modify s/44/55/ stuff &&
		git commit --amend -a -m "Modified Change 4"
	)

fatal: No rebase in progress?
HEAD is now at 7fa95e6 Make it bigger
Cloning into bare repository 'src-replace.git'...
done.
[main f60d931] Change 2
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
[main facb2a6] Change 3
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
[main 4efc4b0] Change 4
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 3 deletions(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5520-pull/src
   7fa95e6..4efc4b0  main -> main
[main dc87852] Modified Change 4
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 3 insertions(+), 3 deletions(-)
ok 70 - setup for avoiding reapplying old patches

expecting success of 5520.71 'git pull --rebase does not reapply old patches': 
	(
		cd dst &&
		test_must_fail git pull --rebase &&
		cat .git/rebase-merge/done .git/rebase-merge/git-rebase-todo >work &&
		grep -v -e \# -e ^$ work >patches &&
		test_line_count = 1 patches &&
		rm -f work
	)

Rebasing (1/1)
Auto-merging stuff
CONFLICT (content): Merge conflict in stuff
error: could not apply dc87852... Modified Change 4
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply dc87852... Modified Change 4
ok 71 - git pull --rebase does not reapply old patches

expecting success of 5520.72 'git pull --rebase against local branch': 
	git checkout -b copy2 to-rebase-orig &&
	git pull --rebase . to-rebase &&
	echo "conflicting modification" >expect &&
	test_cmp expect file &&
	echo file >expect &&
	test_cmp expect file2

Switched to a new branch 'copy2'
From .
 * branch            to-rebase  -> FETCH_HEAD

                                                                                
Successfully rebased and updated refs/heads/copy2.
ok 72 - git pull --rebase against local branch

# passed all 72 test(s)
1..72
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5527-fetch-odd-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5527-fetch-odd-refs/.git/
expecting success of 5527.1 'setup repo with odd suffix ref': 
	echo content >file &&
	git add . &&
	git commit -m one &&
	git update-ref refs/for/refs/heads/main HEAD &&
	echo content >>file &&
	git commit -a -m two &&
	echo content >>file &&
	git commit -a -m three &&
	git checkout HEAD^

[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 5647d5f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main f883ace] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5647d5f two
ok 1 - setup repo with odd suffix ref

expecting success of 5527.2 'suffix ref is ignored during fetch': 
	git clone --bare file://"$PWD" suffix &&
	echo three >expect &&
	git --git-dir=suffix log -1 --format=%s refs/heads/main >actual &&
	test_cmp expect actual

Cloning into bare repository 'suffix'...
ok 2 - suffix ref is ignored during fetch

expecting success of 5527.3 'try to create repo with absurdly long refname': 
	ref240=$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID/$ZERO_OID &&
	ref1440=$ref240/$ref240/$ref240/$ref240/$ref240/$ref240 &&
	git init long &&
	(
		cd long &&
		test_commit long &&
		test_commit main
	) &&
	if git -C long update-ref refs/heads/$ref1440 long; then
		test_set_prereq LONG_REF
	else
		echo >&2 "long refs not supported"
	fi

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5527-fetch-odd-refs/long/.git/
[main (root-commit) 92be28b] long
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 long.t
[main c47af98] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.t
ok 3 - try to create repo with absurdly long refname

expecting success of 5527.4 'fetch handles extremely long refname': 
	git fetch long refs/heads/*:refs/remotes/long/* &&
	cat >expect <<-\EOF &&
	long
	main
	EOF
	git for-each-ref --format="%(subject)" refs/remotes/long >actual &&
	test_cmp expect actual

From long
 * [new branch]      0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000 -> long/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000
 * [new branch]      main       -> long/main
 * [new tag]         long       -> long
 * [new tag]         main       -> main
ok 4 - fetch handles extremely long refname

expecting success of 5527.5 'push handles extremely long refname': 
	git push long :refs/heads/$ref1440 &&
	git -C long for-each-ref --format="%(subject)" refs/heads >actual &&
	echo main >expect &&
	test_cmp expect actual

To long
 - [deleted]         0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000/0000000000000000000000000000000000000000
ok 5 - push handles extremely long refname

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5528-push-default.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5528-push-default/.git/
expecting success of 5528.1 'setup bare remotes': 
	git init --bare repo1 &&
	git remote add parent1 repo1 &&
	git init --bare repo2 &&
	git remote add parent2 repo2 &&
	test_commit one &&
	git push parent1 HEAD &&
	git push parent2 HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5528-push-default/repo1/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5528-push-default/repo2/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
To repo1
 * [new branch]      HEAD -> main
To repo2
 * [new branch]      HEAD -> main
ok 1 - setup bare remotes

expecting success of 5528.2 '"upstream" pushes to configured upstream': 
	git checkout main &&
	test_config branch.main.remote parent1 &&
	test_config branch.main.merge refs/heads/foo &&
	test_commit two &&
	test_push_success upstream foo

Already on 'main'
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
To repo1
 * [new branch]      main -> foo
ok 2 - "upstream" pushes to configured upstream

expecting success of 5528.3 '"upstream" does not push on unconfigured remote': 
	git checkout main &&
	test_unconfig branch.main.remote &&
	test_commit three &&
	test_push_failure upstream

Already on 'main'
[main 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

ok 3 - "upstream" does not push on unconfigured remote

expecting success of 5528.4 '"upstream" does not push on unconfigured branch': 
	git checkout main &&
	test_config branch.main.remote parent1 &&
	test_unconfig branch.main.merge &&
	test_commit four &&
	test_push_failure upstream

Already on 'main'
[main fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
fatal: The current branch main has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream parent1 main

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

ok 4 - "upstream" does not push on unconfigured branch

expecting success of 5528.5 '"upstream" does not push when remotes do not match': 
	git checkout main &&
	test_config branch.main.remote parent1 &&
	test_config branch.main.merge refs/heads/foo &&
	test_config push.default upstream &&
	test_commit five &&
	test_must_fail git push parent2

Already on 'main'
[main a383792] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
fatal: You are pushing to remote 'parent2', which is not the upstream of
your current branch 'main', without telling me what to push
to update which remote branch.
ok 5 - "upstream" does not push when remotes do not match

expecting success of 5528.6 '"current" does not push when multiple remotes and none origin': 
	git checkout main &&
	test_config push.default current &&
	test_commit current-multi &&
	test_must_fail git push

Already on 'main'
[main 4ca23d4] current-multi
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 current-multi.t
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

ok 6 - "current" does not push when multiple remotes and none origin

expecting success of 5528.7 '"current" pushes when remote explicitly specified': 
	git checkout main &&
	test_config push.default current &&
	test_commit current-specified &&
	git push parent1

Already on 'main'
[main 400b0d2] current-specified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 current-specified.t
To repo1
   d79ce16..400b0d2  main -> main
ok 7 - "current" pushes when remote explicitly specified

expecting success of 5528.8 '"current" pushes to origin when no remote specified among multiple': 
	git checkout main &&
	test_config remote.origin.url repo1 &&
	test_config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" &&
	test_commit current-origin &&
	test_push_success current main

Already on 'main'
[main 7eb4f8b] current-origin
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 current-origin.t
To repo1
   400b0d2..7eb4f8b  main -> main
ok 8 - "current" pushes to origin when no remote specified among multiple

expecting success of 5528.9 '"current" pushes to single remote even when not specified': 
	git checkout main &&
	test_when_finished git remote add parent1 repo1 &&
	git remote remove parent1 &&
	test_commit current-implied &&
	test_push_success current main repo2

Already on 'main'
[main ac06b97] current-implied
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 current-implied.t
To repo2
   d79ce16..ac06b97  main -> main
ok 9 - "current" pushes to single remote even when not specified

expecting success of 5528.10 'push from/to new branch with non-defaulted remote fails with upstream, matching, current and simple ': 
	git checkout -b new-branch &&
	test_push_failure simple &&
	test_push_failure matching &&
	test_push_failure upstream &&
	test_push_failure current

Switched to a new branch 'new-branch'
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

ok 10 - push from/to new branch with non-defaulted remote fails with upstream, matching, current and simple 

expecting success of 5528.11 'push from/to new branch fails with upstream and simple ': 
	git checkout -b new-branch-1 &&
	test_config branch.new-branch-1.remote parent1 &&
	test_push_failure simple &&
	test_push_failure upstream

Switched to a new branch 'new-branch-1'
fatal: The current branch new-branch-1 has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream parent1 new-branch-1

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

fatal: The current branch new-branch-1 has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream parent1 new-branch-1

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

ok 11 - push from/to new branch fails with upstream and simple 

checking known breakage of 5528.12 'push from/to new branch fails with matching ': 
	git checkout -b new-branch-2 &&
	test_config branch.new-branch-2.remote parent1 &&
	test_push_failure matching

Switched to a new branch 'new-branch-2'
To repo1
   7eb4f8b..ac06b97  main -> main
test_must_fail: command succeeded: git -c push.default=matching push
not ok 12 - push from/to new branch fails with matching  # TODO known breakage

expecting success of 5528.13 'push from/to branch with tracking fails with nothing ': 
	git checkout -b tracked-branch &&
	test_config branch.tracked-branch.remote parent1 &&
	test_config branch.tracked-branch.merge refs/heads/tracked-branch &&
	test_push_failure nothing

Switched to a new branch 'tracked-branch'
fatal: You didn't specify any refspecs to push, and push.default is "nothing".
ok 13 - push from/to branch with tracking fails with nothing 

expecting success of 5528.14 'push from/to new branch succeeds with upstream if push.autoSetupRemote': 
	git checkout -b new-branch-a &&
	test_config push.autoSetupRemote true &&
	test_config branch.new-branch-a.remote parent1 &&
	test_push_success upstream new-branch-a

Switched to a new branch 'new-branch-a'
To repo1
 * [new branch]      new-branch-a -> new-branch-a
branch 'new-branch-a' set up to track 'parent1/new-branch-a'.
ok 14 - push from/to new branch succeeds with upstream if push.autoSetupRemote

expecting success of 5528.15 'push from/to new branch succeeds with simple if push.autoSetupRemote': 
	git checkout -b new-branch-c &&
	test_config push.autoSetupRemote true &&
	test_config branch.new-branch-c.remote parent1 &&
	test_push_success simple new-branch-c

Switched to a new branch 'new-branch-c'
To repo1
 * [new branch]      new-branch-c -> new-branch-c
branch 'new-branch-c' set up to track 'parent1/new-branch-c'.
ok 15 - push from/to new branch succeeds with simple if push.autoSetupRemote

expecting success of 5528.16 '"matching" fails if none match': 
	git init --bare empty &&
	test_must_fail git push empty : 2>actual &&
	test_i18ngrep "Perhaps you should specify a branch" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5528-push-default/empty/
Perhaps you should specify a branch.
ok 16 - "matching" fails if none match

expecting success of 5528.17 'push ambiguously named branch with upstream, matching and simple': 
	git checkout -b ambiguous &&
	test_config branch.ambiguous.remote parent1 &&
	test_config branch.ambiguous.merge refs/heads/ambiguous &&
	git tag ambiguous &&
	test_push_success simple ambiguous &&
	test_push_success matching ambiguous &&
	test_push_success upstream ambiguous

Switched to a new branch 'ambiguous'
To repo1
 * [new branch]      ambiguous -> ambiguous
Everything up-to-date
Everything up-to-date
ok 17 - push ambiguously named branch with upstream, matching and simple

expecting success of 5528.18 'push from/to new branch with current creates remote branch': 
	test_config branch.new-branch.remote repo1 &&
	git checkout new-branch &&
	test_push_success current new-branch

Switched to branch 'new-branch'
To repo1
 * [new branch]      new-branch -> new-branch
ok 18 - push from/to new branch with current creates remote branch

expecting success of 5528.19 'push to existing branch, with no upstream configured': 
	test_config branch.main.remote repo1 &&
	git checkout main &&
	test_push_failure simple &&
	test_push_failure upstream

Switched to branch 'main'
fatal: The current branch main has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream repo1 main

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

fatal: The current branch main has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream repo1 main

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

ok 19 - push to existing branch, with no upstream configured

expecting success of 5528.20 'push to existing branch, upstream configured with same name': 
	test_config branch.main.remote repo1 &&
	test_config branch.main.merge refs/heads/main &&
	git checkout main &&
	test_commit six &&
	test_push_success upstream main &&
	test_commit seven &&
	test_push_success simple main

Already on 'main'
[main 09c26db] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 six.t
To repo1
   ac06b97..09c26db  main -> main
[main 5990f7c] seven
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 seven.t
To repo1
   09c26db..5990f7c  main -> main
ok 20 - push to existing branch, upstream configured with same name

expecting success of 5528.21 'push to existing branch, upstream configured with different name': 
	test_config branch.main.remote repo1 &&
	test_config branch.main.merge refs/heads/other-name &&
	git checkout main &&
	test_commit eight &&
	test_push_success upstream other-name &&
	test_commit nine &&
	test_push_failure simple &&
	git --git-dir=repo1 log -1 --format="%h %s" "other-name" >expect-other-name &&
	test_push_success current main &&
	git --git-dir=repo1 log -1 --format="%h %s" "other-name" >actual-other-name &&
	test_cmp expect-other-name actual-other-name

Already on 'main'
[main ce5228b] eight
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 eight.t
To repo1
 * [new branch]      main -> other-name
[main a4fa18b] nine
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 nine.t
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push repo1 HEAD:other-name

To push to the branch of the same name on the remote, use

    git push repo1 HEAD

To avoid automatically configuring an upstream branch when its name
won't match the local branch, see option 'simple' of branch.autoSetupMerge
in 'git help config'.

To repo1
   5990f7c..a4fa18b  main -> main
ok 21 - push to existing branch, upstream configured with different name

expecting success of 5528.22 'push.default = current success in central workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent1 &&
		test_commit commit-for-current &&
		test_push_success current main 
	
[main 9a2e3d7] commit-for-current
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-current.t
To repo1
   a4fa18b..9a2e3d7  main -> main
ok 22 - push.default = current success in central workflows

expecting success of 5528.23 'push.default = upstream success in central workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent1 &&
		test_commit commit-for-upstream &&
		test_push_success upstream foo 
	
[main 62006a2] commit-for-upstream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-upstream.t
To repo1
   139b20d..62006a2  main -> foo
ok 23 - push.default = upstream success in central workflows

expecting success of 5528.24 'push.default = simple failure in central workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent1 &&
		test_commit commit-for-simple &&
		test_push_failure simple main 
	
[main 1552b1b] commit-for-simple
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-simple.t
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push parent1 HEAD:foo

To push to the branch of the same name on the remote, use

    git push parent1 HEAD

To avoid automatically configuring an upstream branch when its name
won't match the local branch, see option 'simple' of branch.autoSetupMerge
in 'git help config'.

ok 24 - push.default = simple failure in central workflows

expecting success of 5528.25 'push.default = matching success in central workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent1 &&
		test_commit commit-for-matching &&
		test_push_success matching main 
	
[main 75f04d7] commit-for-matching
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-matching.t
To repo1
   9a2e3d7..75f04d7  main -> main
ok 25 - push.default = matching success in central workflows

expecting success of 5528.26 'push.default = current success in triangular workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent2 &&
		test_commit commit-for-current-triangular &&
		test_push_success current main repo2
	
[main 533b416] commit-for-current-triangular
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-current-triangular.t
To repo2
   ac06b97..533b416  main -> main
ok 26 - push.default = current success in triangular workflows

expecting success of 5528.27 'push.default = upstream failure in triangular workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent2 &&
		test_commit commit-for-upstream-triangular &&
		test_push_failure upstream foo repo2
	
[main c0923f2] commit-for-upstream-triangular
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-upstream-triangular.t
fatal: You are pushing to remote 'parent2', which is not the upstream of
your current branch 'main', without telling me what to push
to update which remote branch.
ok 27 - push.default = upstream failure in triangular workflows

expecting success of 5528.28 'push.default = simple success in triangular workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent2 &&
		test_commit commit-for-simple-triangular &&
		test_push_success simple main repo2
	
[main 1e888ee] commit-for-simple-triangular
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-simple-triangular.t
To repo2
   533b416..1e888ee  main -> main
ok 28 - push.default = simple success in triangular workflows

expecting success of 5528.29 'push.default = matching success in triangular workflows': 
		test_config branch.main.remote parent1 &&
		test_config branch.main.merge refs/heads/foo &&
		test_config remote.pushdefault parent2 &&
		test_commit commit-for-matching-triangular &&
		test_push_success matching main repo2
	
[main d27b2db] commit-for-matching-triangular
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-for-matching-triangular.t
To repo2
   1e888ee..d27b2db  main -> main
ok 29 - push.default = matching success in triangular workflows

expecting success of 5528.30 'default behavior allows "simple" push': 
	test_config branch.main.remote parent1 &&
	test_config branch.main.merge refs/heads/main &&
	test_config remote.pushdefault parent1 &&
	test_commit default-main-main &&
	test_push_success "" main

[main d645001] default-main-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 default-main-main.t
To repo1
   75f04d7..d645001  main -> main
ok 30 - default behavior allows "simple" push

expecting success of 5528.31 'default behavior rejects non-simple push': 
	test_config branch.main.remote parent1 &&
	test_config branch.main.merge refs/heads/foo &&
	test_config remote.pushdefault parent1 &&
	test_commit default-main-foo &&
	test_push_failure ""

[main 4b5e552] default-main-foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 default-main-foo.t
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push parent1 HEAD:foo

To push to the branch of the same name on the remote, use

    git push parent1 HEAD

To choose either option permanently, see push.default in 'git help config'.

To avoid automatically configuring an upstream branch when its name
won't match the local branch, see option 'simple' of branch.autoSetupMerge
in 'git help config'.

ok 31 - default behavior rejects non-simple push

expecting success of 5528.32 'default triangular behavior acts like "current"': 
	test_config branch.main.remote parent1 &&
	test_config branch.main.merge refs/heads/foo &&
	test_config remote.pushdefault parent2 &&
	test_commit default-triangular &&
	test_push_success "" main repo2

[main daf1bc1] default-triangular
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 default-triangular.t
To repo2
   d27b2db..daf1bc1  main -> main
ok 32 - default triangular behavior acts like "current"

# still have 1 known breakage(s)
# passed all remaining 31 test(s)
1..32
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5529-push-errors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5529-push-errors/.git/
expecting success of 5529.1 'setup commits': 
	test_commit one

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - setup commits

expecting success of 5529.2 'setup remote': 
	git init --bare remote.git &&
	git remote add origin remote.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5529-push-errors/remote.git/
ok 2 - setup remote

expecting success of 5529.3 'setup fake receive-pack': 
	FAKE_RP_ROOT=$(pwd) &&
	export FAKE_RP_ROOT &&
	write_script fake-rp <<-\EOF &&
	echo yes >"$FAKE_RP_ROOT"/rp-ran
	exit 1
	EOF
	git config remote.origin.receivepack "\"\$FAKE_RP_ROOT/fake-rp\""

ok 3 - setup fake receive-pack

expecting success of 5529.4 'detect missing branches early': 
	echo no >rp-ran &&
	echo no >expect &&
	test_must_fail git push origin missing &&
	test_cmp expect rp-ran

error: src refspec missing does not match any
error: failed to push some refs to 'remote.git'
ok 4 - detect missing branches early

expecting success of 5529.5 'detect missing sha1 expressions early': 
	echo no >rp-ran &&
	echo no >expect &&
	test_must_fail git push origin main~2:main &&
	test_cmp expect rp-ran

error: src refspec main~2 does not match any
error: failed to push some refs to 'remote.git'
ok 5 - detect missing sha1 expressions early

expecting success of 5529.6 'detect ambiguous refs early': 
	git branch foo &&
	git tag foo &&
	echo no >rp-ran &&
	echo no >expect &&
	test_must_fail git push origin foo &&
	test_cmp expect rp-ran

error: src refspec foo matches more than one
error: failed to push some refs to 'remote.git'
ok 6 - detect ambiguous refs early

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5530-upload-pack-error.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5530-upload-pack-error/.git/
expecting success of 5530.1 'setup and corrupt repository': 
	echo file >file &&
	git add file &&
	git rev-parse :file &&
	git commit -a -m original &&
	test_tick &&
	echo changed >file &&
	git commit -a -m changed &&
	corrupt_repo HEAD:file


f73f3093ff865c514c6c51f867e35f693487d0d3
[master (root-commit) 2cbe290] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 28c3702] changed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup and corrupt repository

expecting success of 5530.2 'fsck fails': 
	test_must_fail git fsck

missing blob 5ea2ed416fbd4a4cbe227b75fe255dd7fa6bd4d6
ok 2 - fsck fails

expecting success of 5530.3 'upload-pack fails due to error in pack-objects packing': 
	head=$(git rev-parse HEAD) &&
	hexsz=$(test_oid hexsz) &&
	printf "%04xwant %s\n00000009done\n0000" \
		$(($hexsz + 10)) $head >input &&
	test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
	test_i18ngrep "unable to read" output.err &&
	test_i18ngrep "pack-objects died" output.err

grep: output.err: binary file matches
grep: output.err: binary file matches
ok 3 - upload-pack fails due to error in pack-objects packing

expecting success of 5530.4 'corrupt repo differently': 

	git hash-object -w file &&
	corrupt_repo HEAD^^{tree}


5ea2ed416fbd4a4cbe227b75fe255dd7fa6bd4d6
ok 4 - corrupt repo differently

expecting success of 5530.5 'fsck fails': 
	test_must_fail git fsck

broken link from  commit 2cbe290f6e7f12b1021e10cbe824d1208f5edc19
              to    tree bec63e37d08c454ad3a60cde90b70f3f7d077852
dangling blob f73f3093ff865c514c6c51f867e35f693487d0d3
missing tree bec63e37d08c454ad3a60cde90b70f3f7d077852
ok 5 - fsck fails

expecting success of 5530.6 'upload-pack fails due to error in rev-list': 

	printf "%04xwant %s\n%04xshallow %s00000009done\n0000" \
		$(($hexsz + 10)) $(git rev-parse HEAD) \
		$(($hexsz + 12)) $(git rev-parse HEAD^) >input &&
	test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
	grep "bad tree object" output.err

grep: output.err: binary file matches
ok 6 - upload-pack fails due to error in rev-list

expecting success of 5530.7 'upload-pack fails due to bad want (no object)': 

	printf "%04xwant %s multi_ack_detailed\n00000009done\n0000" \
		$(($hexsz + 29)) $(test_oid deadbeef) >input &&
	test_must_fail git upload-pack . <input >output 2>output.err &&
	grep "not our ref" output.err &&
	grep "ERR" output &&
	! grep multi_ack_detailed output.err

fatal: git upload-pack: not our ref deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
grep: output: binary file matches
ok 7 - upload-pack fails due to bad want (no object)

expecting success of 5530.8 'upload-pack fails due to bad want (not tip)': 

	oid=$(echo an object we have | git hash-object -w --stdin) &&
	printf "%04xwant %s multi_ack_detailed\n00000009done\n0000" \
		$(($hexsz + 29)) "$oid" >input &&
	test_must_fail git upload-pack . <input >output 2>output.err &&
	grep "not our ref" output.err &&
	grep "ERR" output &&
	! grep multi_ack_detailed output.err

fatal: git upload-pack: not our ref 023832c7c4fbc3a6d75879d18bbbef0b476b78b5
grep: output: binary file matches
ok 8 - upload-pack fails due to bad want (not tip)

expecting success of 5530.9 'upload-pack fails due to error in pack-objects enumeration': 

	printf "%04xwant %s\n00000009done\n0000" \
		$((hexsz + 10)) $(git rev-parse HEAD) >input &&
	test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
	grep "bad tree object" output.err &&
	grep "pack-objects died" output.err

grep: output.err: binary file matches
grep: output.err: binary file matches
ok 9 - upload-pack fails due to error in pack-objects enumeration

expecting success of 5530.10 'upload-pack tolerates EOF just after stateless client wants': 
	test_commit initial &&
	head=$(git rev-parse HEAD) &&

	{
		packetize "want $head" &&
		packetize "shallow $head" &&
		packetize "deepen 1" &&
		printf "0000"
	} >request &&

	printf "0000" >expect &&

	git upload-pack --stateless-rpc . <request >actual &&
	test_cmp expect actual

[master 61923d4] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 10 - upload-pack tolerates EOF just after stateless client wants

expecting success of 5530.11 'create empty repository': 

	mkdir foo &&
	cd foo &&
	git init


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5530-upload-pack-error/foo/.git/
ok 11 - create empty repository

expecting success of 5530.12 'fetch fails': 

	test_must_fail git fetch .. main


fatal: couldn't find remote ref main
ok 12 - fetch fails

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5510-fetch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.git/
expecting success of 5510.1 'setup': 
	echo >file original &&
	git add file &&
	git commit -a -m original &&
	git branch -M main

[master (root-commit) 7fb3fb8] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 5510.2 'clone and setup child repos': 
	git clone . one &&
	(
		cd one &&
		echo >file updated by one &&
		git commit -a -m "updated by one"
	) &&
	git clone . two &&
	(
		cd two &&
		git config branch.main.remote one &&
		git config remote.one.url ../one/.git/ &&
		git config remote.one.fetch refs/heads/main:refs/heads/one
	) &&
	git clone . three &&
	(
		cd three &&
		git config branch.main.remote two &&
		git config branch.main.merge refs/heads/one &&
		mkdir -p .git/remotes &&
		cat >.git/remotes/two <<-\EOF
		URL: ../two/.git/
		Pull: refs/heads/main:refs/heads/two
		Pull: refs/heads/one:refs/heads/one
		EOF
	) &&
	git clone . bundle &&
	git clone . seven

Cloning into 'one'...
done.
[main ffc8fdd] updated by one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'two'...
done.
Cloning into 'three'...
done.
Cloning into 'bundle'...
done.
Cloning into 'seven'...
done.
ok 2 - clone and setup child repos

expecting success of 5510.3 'fetch test': 
	cd "$D" &&
	echo >file updated by origin &&
	git commit -a -m "updated by origin" &&
	cd two &&
	git fetch &&
	git rev-parse --verify refs/heads/one &&
	mine=$(git rev-parse refs/heads/one) &&
	his=$(cd ../one && git rev-parse refs/heads/main) &&
	test "z$mine" = "z$his"

[main 76a8623] updated by origin
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From ../one/
 * [new branch]      main       -> one
ffc8fdde31e0177ad02216ab27bb483fc88169f2
ok 3 - fetch test

expecting success of 5510.4 'fetch test for-merge': 
	cd "$D" &&
	cd three &&
	git fetch &&
	git rev-parse --verify refs/heads/two &&
	git rev-parse --verify refs/heads/one &&
	main_in_two=$(cd ../two && git rev-parse main) &&
	one_in_two=$(cd ../two && git rev-parse one) &&
	{
		echo "$one_in_two	" &&
		echo "$main_in_two	not-for-merge"
	} >expected &&
	cut -f -2 .git/FETCH_HEAD >actual &&
	test_cmp expected actual
From ../two/
 * [new branch]      one        -> one
 * [new branch]      main       -> two
7fb3fb8404d71a4825bdde839cc3884a77651888
ffc8fdde31e0177ad02216ab27bb483fc88169f2
ok 4 - fetch test for-merge

expecting success of 5510.5 'fetch --prune on its own works as expected': 
	cd "$D" &&
	git clone . prune &&
	cd prune &&
	git update-ref refs/remotes/origin/extrabranch main &&

	git fetch --prune origin &&
	test_must_fail git rev-parse origin/extrabranch

Cloning into 'prune'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/extrabranch
fatal: ambiguous argument 'origin/extrabranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
origin/extrabranch
ok 5 - fetch --prune on its own works as expected

expecting success of 5510.6 'fetch --prune with a branch name keeps branches': 
	cd "$D" &&
	git clone . prune-branch &&
	cd prune-branch &&
	git update-ref refs/remotes/origin/extrabranch main &&

	git fetch --prune origin main &&
	git rev-parse origin/extrabranch

Cloning into 'prune-branch'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 6 - fetch --prune with a branch name keeps branches

expecting success of 5510.7 'fetch --prune with a namespace keeps other namespaces': 
	cd "$D" &&
	git clone . prune-namespace &&
	cd prune-namespace &&

	git fetch --prune origin refs/heads/a/*:refs/remotes/origin/a/* &&
	git rev-parse origin/main

Cloning into 'prune-namespace'...
done.
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 7 - fetch --prune with a namespace keeps other namespaces

expecting success of 5510.8 'fetch --prune handles overlapping refspecs': 
	cd "$D" &&
	git update-ref refs/pull/42/head main &&
	git clone . prune-overlapping &&
	cd prune-overlapping &&
	git config --add remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&

	git fetch --prune origin &&
	git rev-parse origin/main &&
	git rev-parse origin/pr/42 &&

	git config --unset-all remote.origin.fetch &&
	git config remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
	git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* &&

	git fetch --prune origin &&
	git rev-parse origin/main &&
	git rev-parse origin/pr/42

Cloning into 'prune-overlapping'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new ref]         refs/pull/42/head -> origin/pr/42
76a8623cbad8bd56c933c6f20106742c826dad9e
76a8623cbad8bd56c933c6f20106742c826dad9e
76a8623cbad8bd56c933c6f20106742c826dad9e
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 8 - fetch --prune handles overlapping refspecs

expecting success of 5510.9 'fetch --prune --tags prunes branches but not tags': 
	cd "$D" &&
	git clone . prune-tags &&
	cd prune-tags &&
	git tag sometag main &&
	# Create what looks like a remote-tracking branch from an earlier
	# fetch that has since been deleted from the remote:
	git update-ref refs/remotes/origin/fake-remote main &&

	git fetch --prune --tags origin &&
	git rev-parse origin/main &&
	test_must_fail git rev-parse origin/fake-remote &&
	git rev-parse sometag

Cloning into 'prune-tags'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/fake-remote
76a8623cbad8bd56c933c6f20106742c826dad9e
fatal: ambiguous argument 'origin/fake-remote': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
origin/fake-remote
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 9 - fetch --prune --tags prunes branches but not tags

expecting success of 5510.10 'fetch --prune --tags with branch does not prune other things': 
	cd "$D" &&
	git clone . prune-tags-branch &&
	cd prune-tags-branch &&
	git tag sometag main &&
	git update-ref refs/remotes/origin/extrabranch main &&

	git fetch --prune --tags origin main &&
	git rev-parse origin/extrabranch &&
	git rev-parse sometag

Cloning into 'prune-tags-branch'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
76a8623cbad8bd56c933c6f20106742c826dad9e
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 10 - fetch --prune --tags with branch does not prune other things

expecting success of 5510.11 'fetch --prune --tags with refspec prunes based on refspec': 
	cd "$D" &&
	git clone . prune-tags-refspec &&
	cd prune-tags-refspec &&
	git tag sometag main &&
	git update-ref refs/remotes/origin/foo/otherbranch main &&
	git update-ref refs/remotes/origin/extrabranch main &&

	git fetch --prune --tags origin refs/heads/foo/*:refs/remotes/origin/foo/* &&
	test_must_fail git rev-parse refs/remotes/origin/foo/otherbranch &&
	git rev-parse origin/extrabranch &&
	git rev-parse sometag

Cloning into 'prune-tags-refspec'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/foo/otherbranch
fatal: ambiguous argument 'refs/remotes/origin/foo/otherbranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/foo/otherbranch
76a8623cbad8bd56c933c6f20106742c826dad9e
76a8623cbad8bd56c933c6f20106742c826dad9e
ok 11 - fetch --prune --tags with refspec prunes based on refspec

expecting success of 5510.12 'fetch --prune fails to delete branches': 
	cd "$D" &&
	git clone . prune-fail &&
	cd prune-fail &&
	git update-ref refs/remotes/origin/extrabranch main &&
	: this will prevent --prune from locking packed-refs for deleting refs, but adding loose refs still succeeds  &&
	>.git/packed-refs.new &&

	test_must_fail git fetch --prune origin

Cloning into 'prune-fail'...
done.
error: could not delete reference refs/remotes/origin/extrabranch: unable to create file /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/prune-fail/.git/packed-refs.new: File exists
error: could not delete reference refs/remotes/origin/extrabranch: 
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/extrabranch
ok 12 - fetch --prune fails to delete branches

expecting success of 5510.13 'fetch --atomic works with a single branch': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	git branch atomic-branch &&
	oid=$(git rev-parse atomic-branch) &&
	echo "$oid" >expected &&

	git -C atomic fetch --atomic origin &&
	git -C atomic rev-parse origin/atomic-branch >actual &&
	test_cmp expected actual &&
	test $oid = "$(git -C atomic rev-parse --verify FETCH_HEAD)"

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-branch -> origin/atomic-branch
ok 13 - fetch --atomic works with a single branch

expecting success of 5510.14 'fetch --atomic works with multiple branches': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	git branch atomic-branch-1 &&
	git branch atomic-branch-2 &&
	git branch atomic-branch-3 &&
	git rev-parse refs/heads/atomic-branch-1 refs/heads/atomic-branch-2 refs/heads/atomic-branch-3 >actual &&

	git -C atomic fetch --atomic origin &&
	git -C atomic rev-parse refs/remotes/origin/atomic-branch-1 refs/remotes/origin/atomic-branch-2 refs/remotes/origin/atomic-branch-3 >expected &&
	test_cmp expected actual

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-branch-1 -> origin/atomic-branch-1
 * [new branch]      atomic-branch-2 -> origin/atomic-branch-2
 * [new branch]      atomic-branch-3 -> origin/atomic-branch-3
ok 14 - fetch --atomic works with multiple branches

expecting success of 5510.15 'fetch --atomic works with mixed branches and tags': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	git branch atomic-mixed-branch &&
	git tag atomic-mixed-tag &&
	git rev-parse refs/heads/atomic-mixed-branch refs/tags/atomic-mixed-tag >actual &&

	git -C atomic fetch --tags --atomic origin &&
	git -C atomic rev-parse refs/remotes/origin/atomic-mixed-branch refs/tags/atomic-mixed-tag >expected &&
	test_cmp expected actual

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-mixed-branch -> origin/atomic-mixed-branch
 * [new tag]         atomic-mixed-tag    -> atomic-mixed-tag
ok 15 - fetch --atomic works with mixed branches and tags

expecting success of 5510.16 'fetch --atomic prunes references': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git branch atomic-prune-delete &&
	git clone . atomic &&
	git branch --delete atomic-prune-delete &&
	git branch atomic-prune-create &&
	git rev-parse refs/heads/atomic-prune-create >actual &&

	git -C atomic fetch --prune --atomic origin &&
	test_must_fail git -C atomic rev-parse refs/remotes/origin/atomic-prune-delete &&
	git -C atomic rev-parse refs/remotes/origin/atomic-prune-create >expected &&
	test_cmp expected actual

Cloning into 'atomic'...
done.
Deleted branch atomic-prune-delete (was 76a8623).
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/atomic-prune-delete
 * [new branch]      atomic-prune-create -> origin/atomic-prune-create
fatal: ambiguous argument 'refs/remotes/origin/atomic-prune-delete': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/atomic-prune-delete
ok 16 - fetch --atomic prunes references

expecting success of 5510.17 'fetch --atomic aborts with non-fast-forward update': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git branch atomic-non-ff &&
	git clone . atomic &&
	git rev-parse HEAD >actual &&

	git branch atomic-new-branch &&
	parent_commit=$(git rev-parse atomic-non-ff~) &&
	git update-ref refs/heads/atomic-non-ff $parent_commit &&

	test_must_fail git -C atomic fetch --atomic origin refs/heads/*:refs/remotes/origin/* &&
	test_must_fail git -C atomic rev-parse refs/remotes/origin/atomic-new-branch &&
	git -C atomic rev-parse refs/remotes/origin/atomic-non-ff >expected &&
	test_cmp expected actual &&
	test_must_be_empty atomic/.git/FETCH_HEAD

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-new-branch -> origin/atomic-new-branch
 ! [rejected]        atomic-non-ff     -> origin/atomic-non-ff  (non-fast-forward)
error: 
fatal: ambiguous argument 'refs/remotes/origin/atomic-new-branch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/atomic-new-branch
ok 17 - fetch --atomic aborts with non-fast-forward update

expecting success of 5510.18 'fetch --atomic executes a single reference transaction only': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	git branch atomic-hooks-1 &&
	git branch atomic-hooks-2 &&
	head_oid=$(git rev-parse HEAD) &&

	cat >expected <<-EOF &&
		prepared
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-1
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-2
		committed
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-1
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-2
	EOF

	rm -f atomic/actual &&
	test_hook -C atomic reference-transaction <<-\EOF &&
		( echo "$*" && cat ) >>actual
	EOF

	git -C atomic fetch --atomic origin &&
	test_cmp expected atomic/actual

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-hooks-1 -> origin/atomic-hooks-1
 * [new branch]      atomic-hooks-2 -> origin/atomic-hooks-2
ok 18 - fetch --atomic executes a single reference transaction only

expecting success of 5510.19 'fetch --atomic aborts all reference updates if hook aborts': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	git branch atomic-hooks-abort-1 &&
	git branch atomic-hooks-abort-2 &&
	git branch atomic-hooks-abort-3 &&
	git tag atomic-hooks-abort &&
	head_oid=$(git rev-parse HEAD) &&

	cat >expected <<-EOF &&
		prepared
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-1
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-2
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-3
		$ZERO_OID $head_oid refs/tags/atomic-hooks-abort
		aborted
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-1
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-2
		$ZERO_OID $head_oid refs/remotes/origin/atomic-hooks-abort-3
		$ZERO_OID $head_oid refs/tags/atomic-hooks-abort
	EOF

	rm -f atomic/actual &&
	test_hook -C atomic/.git reference-transaction <<-\EOF &&
		( echo "$*" && cat ) >>actual
		exit 1
	EOF

	git -C atomic for-each-ref >expected-refs &&
	test_must_fail git -C atomic fetch --tags --atomic origin &&
	git -C atomic for-each-ref >actual-refs &&
	test_cmp expected-refs actual-refs &&
	test_must_be_empty atomic/.git/FETCH_HEAD

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-hooks-abort-1 -> origin/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> origin/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> origin/atomic-hooks-abort-3
 * [new tag]         atomic-hooks-abort   -> atomic-hooks-abort
fatal: ref updates aborted by hook
ok 19 - fetch --atomic aborts all reference updates if hook aborts

expecting success of 5510.20 'fetch --atomic --append appends to FETCH_HEAD': 
	test_when_finished "rm -rf \"$D\"/atomic" &&

	cd "$D" &&
	git clone . atomic &&
	oid=$(git rev-parse HEAD) &&

	git branch atomic-fetch-head-1 &&
	git -C atomic fetch --atomic origin atomic-fetch-head-1 &&
	test_line_count = 1 atomic/.git/FETCH_HEAD &&

	git branch atomic-fetch-head-2 &&
	git -C atomic fetch --atomic --append origin atomic-fetch-head-2 &&
	test_line_count = 2 atomic/.git/FETCH_HEAD &&
	cp atomic/.git/FETCH_HEAD expected &&

	test_hook -C atomic reference-transaction <<-\EOF &&
		exit 1
	EOF

	git branch atomic-fetch-head-3 &&
	test_must_fail git -C atomic fetch --atomic --append origin atomic-fetch-head-3 &&
	test_cmp expected atomic/.git/FETCH_HEAD

Cloning into 'atomic'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            atomic-fetch-head-1 -> FETCH_HEAD
 * [new branch]      atomic-fetch-head-1 -> origin/atomic-fetch-head-1
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            atomic-fetch-head-2 -> FETCH_HEAD
 * [new branch]      atomic-fetch-head-2 -> origin/atomic-fetch-head-2
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            atomic-fetch-head-3 -> FETCH_HEAD
 * [new branch]      atomic-fetch-head-3 -> origin/atomic-fetch-head-3
fatal: ref updates aborted by hook
ok 20 - fetch --atomic --append appends to FETCH_HEAD

expecting success of 5510.21 '--refmap="" ignores configured refspec': 
	cd "$TRASH_DIRECTORY" &&
	git clone "$D" remote-refs &&
	git -C remote-refs rev-parse remotes/origin/main >old &&
	git -C remote-refs update-ref refs/remotes/origin/main main~1 &&
	git -C remote-refs rev-parse remotes/origin/main >new &&
	git -C remote-refs fetch --refmap= origin "+refs/heads/*:refs/hidden/origin/*" &&
	git -C remote-refs rev-parse remotes/origin/main >actual &&
	test_cmp new actual &&
	git -C remote-refs fetch origin &&
	git -C remote-refs rev-parse remotes/origin/main >actual &&
	test_cmp old actual

Cloning into 'remote-refs'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch
 * [new branch]      atomic-branch     -> refs/hidden/origin/atomic-branch
 * [new branch]      atomic-branch-1   -> refs/hidden/origin/atomic-branch-1
 * [new branch]      atomic-branch-2   -> refs/hidden/origin/atomic-branch-2
 * [new branch]      atomic-branch-3   -> refs/hidden/origin/atomic-branch-3
 * [new branch]      atomic-fetch-head-1 -> refs/hidden/origin/atomic-fetch-head-1
 * [new branch]      atomic-fetch-head-2 -> refs/hidden/origin/atomic-fetch-head-2
 * [new branch]      atomic-fetch-head-3 -> refs/hidden/origin/atomic-fetch-head-3
 * [new branch]      atomic-hooks-1    -> refs/hidden/origin/atomic-hooks-1
 * [new branch]      atomic-hooks-2    -> refs/hidden/origin/atomic-hooks-2
 * [new branch]      atomic-hooks-abort-1 -> refs/hidden/origin/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> refs/hidden/origin/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> refs/hidden/origin/atomic-hooks-abort-3
 * [new branch]      atomic-mixed-branch -> refs/hidden/origin/atomic-mixed-branch
 * [new branch]      atomic-new-branch -> refs/hidden/origin/atomic-new-branch
 * [new branch]      atomic-non-ff     -> refs/hidden/origin/atomic-non-ff
 * [new branch]      atomic-prune-create -> refs/hidden/origin/atomic-prune-create
 * [new branch]      main              -> refs/hidden/origin/main
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch
   7fb3fb8..76a8623  main       -> origin/main
ok 21 - --refmap="" ignores configured refspec

expecting success of 5510.22 '--refmap="" and --prune': 
	git -C remote-refs update-ref refs/remotes/origin/foo/otherbranch main &&
	git -C remote-refs update-ref refs/hidden/foo/otherbranch main &&
	git -C remote-refs fetch --prune --refmap="" origin +refs/heads/*:refs/hidden/* &&
	git -C remote-refs rev-parse remotes/origin/foo/otherbranch &&
	test_must_fail git -C remote-refs rev-parse refs/hidden/foo/otherbranch &&
	git -C remote-refs fetch --prune origin &&
	test_must_fail git -C remote-refs rev-parse remotes/origin/foo/otherbranch

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch
 - [deleted]         (none)     -> refs/hidden/foo/otherbranch
 - [deleted]         (none)     -> refs/hidden/origin/atomic-branch
 - [deleted]         (none)     -> refs/hidden/origin/atomic-branch-1
 - [deleted]         (none)     -> refs/hidden/origin/atomic-branch-2
 - [deleted]         (none)     -> refs/hidden/origin/atomic-branch-3
 - [deleted]         (none)     -> refs/hidden/origin/atomic-fetch-head-1
 - [deleted]         (none)     -> refs/hidden/origin/atomic-fetch-head-2
 - [deleted]         (none)     -> refs/hidden/origin/atomic-fetch-head-3
 - [deleted]         (none)     -> refs/hidden/origin/atomic-hooks-1
 - [deleted]         (none)     -> refs/hidden/origin/atomic-hooks-2
 - [deleted]         (none)     -> refs/hidden/origin/atomic-hooks-abort-1
 - [deleted]         (none)     -> refs/hidden/origin/atomic-hooks-abort-2
 - [deleted]         (none)     -> refs/hidden/origin/atomic-hooks-abort-3
 - [deleted]         (none)     -> refs/hidden/origin/atomic-mixed-branch
 - [deleted]         (none)     -> refs/hidden/origin/atomic-new-branch
 - [deleted]         (none)     -> refs/hidden/origin/atomic-non-ff
 - [deleted]         (none)     -> refs/hidden/origin/atomic-prune-create
 - [deleted]         (none)     -> refs/hidden/origin/main
 * [new branch]      atomic-branch        -> refs/hidden/atomic-branch
 * [new branch]      atomic-branch-1      -> refs/hidden/atomic-branch-1
 * [new branch]      atomic-branch-2      -> refs/hidden/atomic-branch-2
 * [new branch]      atomic-branch-3      -> refs/hidden/atomic-branch-3
 * [new branch]      atomic-fetch-head-1  -> refs/hidden/atomic-fetch-head-1
 * [new branch]      atomic-fetch-head-2  -> refs/hidden/atomic-fetch-head-2
 * [new branch]      atomic-fetch-head-3  -> refs/hidden/atomic-fetch-head-3
 * [new branch]      atomic-hooks-1       -> refs/hidden/atomic-hooks-1
 * [new branch]      atomic-hooks-2       -> refs/hidden/atomic-hooks-2
 * [new branch]      atomic-hooks-abort-1 -> refs/hidden/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> refs/hidden/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> refs/hidden/atomic-hooks-abort-3
 * [new branch]      atomic-mixed-branch  -> refs/hidden/atomic-mixed-branch
 * [new branch]      atomic-new-branch    -> refs/hidden/atomic-new-branch
 * [new branch]      atomic-non-ff        -> refs/hidden/atomic-non-ff
 * [new branch]      atomic-prune-create  -> refs/hidden/atomic-prune-create
 * [new branch]      main                 -> refs/hidden/main
76a8623cbad8bd56c933c6f20106742c826dad9e
fatal: ambiguous argument 'refs/hidden/foo/otherbranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/hidden/foo/otherbranch
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch
 - [deleted]         (none)     -> origin/foo/otherbranch
fatal: ambiguous argument 'remotes/origin/foo/otherbranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
remotes/origin/foo/otherbranch
ok 22 - --refmap="" and --prune

expecting success of 5510.23 'fetch tags when there is no tags': 

    cd "$D" &&

    mkdir notags &&
    cd notags &&
    git init &&

    git fetch -t ..


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/notags/.git/
From ..
 * branch            HEAD               -> FETCH_HEAD
 * [new tag]         atomic-hooks-abort -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag   -> atomic-mixed-tag
ok 23 - fetch tags when there is no tags

expecting success of 5510.24 'fetch following tags': 

	cd "$D" &&
	git tag -a -m "annotated" anno HEAD &&
	git tag light HEAD &&

	mkdir four &&
	cd four &&
	git init &&

	git fetch .. :track &&
	git show-ref --verify refs/tags/anno &&
	git show-ref --verify refs/tags/light


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/four/.git/
From ..
 * [new ref]                            -> track
 * [new tag]         anno               -> anno
 * [new tag]         atomic-hooks-abort -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag   -> atomic-mixed-tag
 * [new tag]         light              -> light
39bf91b30d24dba0a5dbe320673d4f8a1f67d1f1 refs/tags/anno
76a8623cbad8bd56c933c6f20106742c826dad9e refs/tags/light
ok 24 - fetch following tags

expecting success of 5510.25 'fetch uses remote ref names to describe new refs': 
	cd "$D" &&
	git init descriptive &&
	(
		cd descriptive &&
		git config remote.o.url .. &&
		git config remote.o.fetch "refs/heads/*:refs/crazyheads/*" &&
		git config --add remote.o.fetch "refs/others/*:refs/heads/*" &&
		git fetch o
	) &&
	git tag -a -m "Descriptive tag" descriptive-tag &&
	git branch descriptive-branch &&
	git checkout descriptive-branch &&
	echo "Nuts" >crazy &&
	git add crazy &&
	git commit -a -m "descriptive commit" &&
	git update-ref refs/others/crazy HEAD &&
	(
		cd descriptive &&
		git fetch o 2>actual &&
		test_i18ngrep "new branch.* -> refs/crazyheads/descriptive-branch$" actual &&
		test_i18ngrep "new tag.* -> descriptive-tag$" actual &&
		test_i18ngrep "new ref.* -> crazy$" actual
	) &&
	git checkout main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/descriptive/.git/
From ..
 * [new branch]      atomic-branch       -> refs/crazyheads/atomic-branch
 * [new branch]      atomic-branch-1     -> refs/crazyheads/atomic-branch-1
 * [new branch]      atomic-branch-2     -> refs/crazyheads/atomic-branch-2
 * [new branch]      atomic-branch-3     -> refs/crazyheads/atomic-branch-3
 * [new branch]      atomic-fetch-head-1 -> refs/crazyheads/atomic-fetch-head-1
 * [new branch]      atomic-fetch-head-2 -> refs/crazyheads/atomic-fetch-head-2
 * [new branch]      atomic-fetch-head-3 -> refs/crazyheads/atomic-fetch-head-3
 * [new branch]      atomic-hooks-1      -> refs/crazyheads/atomic-hooks-1
 * [new branch]      atomic-hooks-2      -> refs/crazyheads/atomic-hooks-2
 * [new branch]      atomic-hooks-abort-1 -> refs/crazyheads/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> refs/crazyheads/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> refs/crazyheads/atomic-hooks-abort-3
 * [new branch]      atomic-mixed-branch -> refs/crazyheads/atomic-mixed-branch
 * [new branch]      atomic-new-branch   -> refs/crazyheads/atomic-new-branch
 * [new branch]      atomic-non-ff       -> refs/crazyheads/atomic-non-ff
 * [new branch]      atomic-prune-create -> refs/crazyheads/atomic-prune-create
 * [new branch]      main                -> refs/crazyheads/main
 * [new tag]         anno                -> anno
 * [new tag]         atomic-hooks-abort  -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag    -> atomic-mixed-tag
 * [new tag]         light               -> light
Switched to branch 'descriptive-branch'
[descriptive-branch e7f94d4] descriptive commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 crazy
 * [new branch]      descriptive-branch -> refs/crazyheads/descriptive-branch
 * [new tag]         descriptive-tag    -> descriptive-tag
 * [new ref]         refs/others/crazy  -> crazy
Switched to branch 'main'
ok 25 - fetch uses remote ref names to describe new refs

expecting success of 5510.26 'fetch must not resolve short tag name': 

	cd "$D" &&

	mkdir five &&
	cd five &&
	git init &&

	test_must_fail git fetch .. anno:five


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/five/.git/
error: cannot update ref 'refs/heads/five': trying to write non-commit object 39bf91b30d24dba0a5dbe320673d4f8a1f67d1f1 to branch 'refs/heads/five'
From ..
 ! [new tag]         anno       -> five  (unable to update local ref)
 * [new tag]         anno       -> anno
ok 26 - fetch must not resolve short tag name

expecting success of 5510.27 'fetch can now resolve short remote name': 

	cd "$D" &&
	git update-ref refs/remotes/six/HEAD HEAD &&

	mkdir six &&
	cd six &&
	git init &&

	git fetch .. six:six

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/six/.git/
From ..
 * [new ref]         six/HEAD           -> six
 * [new tag]         anno               -> anno
 * [new tag]         atomic-hooks-abort -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag   -> atomic-mixed-tag
 * [new tag]         descriptive-tag    -> descriptive-tag
 * [new tag]         light              -> light
ok 27 - fetch can now resolve short remote name

expecting success of 5510.28 'create bundle 1': 
	cd "$D" &&
	echo >file updated again by origin &&
	git commit -a -m "tip" &&
	git bundle create --version=3 bundle1 main^..main

[main 1b60884] tip
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 28 - create bundle 1

expecting success of 5510.29 'header of bundle looks right': 
	cat >expect <<-EOF &&
	# v3 git bundle
	@object-format=$(test_oid algo)
	-OID updated by origin
	OID refs/heads/main

	EOF
	sed -e "s/$OID_REGEX/OID/g" -e "5q" "$D"/bundle1 >actual &&
	test_cmp expect actual

ok 29 - header of bundle looks right

expecting success of 5510.30 'create bundle 2': 
	cd "$D" &&
	git bundle create bundle2 main~2..main

ok 30 - create bundle 2

expecting success of 5510.31 'unbundle 1': 
	cd "$D/bundle" &&
	git checkout -b some-branch &&
	test_must_fail git fetch "$D/bundle1" main:main

Switched to a new branch 'some-branch'
error: Repository lacks these prerequisite commits:
error: 76a8623cbad8bd56c933c6f20106742c826dad9e 
ok 31 - unbundle 1

expecting success of 5510.32 'bundle 1 has only 3 files ': 
	cd "$D" &&
	test_bundle_object_count bundle1 3

e3759ee48778fefb71afa2815c2d903848b63eb6
ok 32 - bundle 1 has only 3 files 

expecting success of 5510.33 'unbundle 2': 
	cd "$D/bundle" &&
	git fetch ../bundle2 main:main &&
	test "tip" = "$(git log -1 --pretty=oneline main | cut -d" " -f2)"

From ../bundle2
   7fb3fb8..1b60884  main       -> main
ok 33 - unbundle 2

expecting success of 5510.34 'bundle does not prerequisite objects': 
	cd "$D" &&
	touch file2 &&
	git add file2 &&
	git commit -m add.file2 file2 &&
	git bundle create bundle3 -1 HEAD &&
	test_bundle_object_count bundle3 3

[main b4eae8a] add.file2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
92f477f64fe991be465f169fe8ba0908bf49305b
ok 34 - bundle does not prerequisite objects

expecting success of 5510.35 'bundle should be able to create a full history': 

	cd "$D" &&
	git tag -a -m "1.0" v1.0 main &&
	git bundle create bundle4 v1.0


ok 35 - bundle should be able to create a full history

expecting success of 5510.36 'fetch with a non-applying branch.<name>.merge': 
	git config branch.main.remote yeti &&
	git config branch.main.merge refs/heads/bigfoot &&
	git config remote.blub.url one &&
	git config remote.blub.fetch "refs/heads/*:refs/remotes/one/*" &&
	git fetch blub

From one
 * [new branch]      main       -> one/main
ok 36 - fetch with a non-applying branch.<name>.merge

expecting success of 5510.37 'fetch from GIT URL with a non-applying branch.<name>.merge [1]': 
	one_head=$(cd one && git rev-parse HEAD) &&
	this_head=$(git rev-parse HEAD) &&
	git update-ref -d FETCH_HEAD &&
	git fetch one &&
	test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
	test $this_head = "$(git rev-parse --verify HEAD)"

From one
 * branch            HEAD       -> FETCH_HEAD
ok 37 - fetch from GIT URL with a non-applying branch.<name>.merge [1]

expecting success of 5510.38 'fetch from GIT URL with a non-applying branch.<name>.merge [2]': 
	one_ref=$(cd one && git symbolic-ref HEAD) &&
	git config branch.main.remote blub &&
	git config branch.main.merge "$one_ref" &&
	git update-ref -d FETCH_HEAD &&
	git fetch one &&
	test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
	test $this_head = "$(git rev-parse --verify HEAD)"

From one
 * branch            HEAD       -> FETCH_HEAD
ok 38 - fetch from GIT URL with a non-applying branch.<name>.merge [2]

expecting success of 5510.39 'fetch from GIT URL with a non-applying branch.<name>.merge [3]': 
	git config branch.main.merge "${one_ref}_not" &&
	git update-ref -d FETCH_HEAD &&
	git fetch one &&
	test $one_head = "$(git rev-parse --verify FETCH_HEAD)" &&
	test $this_head = "$(git rev-parse --verify HEAD)"

From one
 * branch            HEAD       -> FETCH_HEAD
ok 39 - fetch from GIT URL with a non-applying branch.<name>.merge [3]

expecting success of 5510.40 'quoting of a strangely named repo': 
	test_must_fail git fetch "a\\!'b" > result 2>&1 &&
	grep "fatal: 'a\\\\!'b'" result

fatal: 'a\!'b' does not appear to be a git repository
ok 40 - quoting of a strangely named repo

expecting success of 5510.41 'bundle should record HEAD correctly': 

	cd "$D" &&
	git bundle create bundle5 HEAD main &&
	git bundle list-heads bundle5 >actual &&
	for h in HEAD refs/heads/main
	do
		echo "$(git rev-parse --verify $h) $h" || return 1
	done >expect &&
	test_cmp expect actual


ok 41 - bundle should record HEAD correctly

expecting success of 5510.42 'mark initial state of origin/main': 
	(
		cd three &&
		git tag base-origin-main refs/remotes/origin/main
	)

ok 42 - mark initial state of origin/main

expecting success of 5510.43 'explicit fetch should update tracking': 

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git fetch origin main &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" != "$n" &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
   7fb3fb8..b4eae8a  main       -> origin/main
fatal: Needed a single revision
ok 43 - explicit fetch should update tracking

expecting success of 5510.44 'explicit pull should update tracking': 

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git pull origin main &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" != "$n" &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
   7fb3fb8..b4eae8a  main       -> origin/main
Updating 7fb3fb8..b4eae8a
Fast-forward
 file  | 2 +-
 file2 | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 file2
fatal: Needed a single revision
ok 44 - explicit pull should update tracking

expecting success of 5510.45 'explicit --refmap is allowed only with command-line refspec': 
	cd "$D" &&
	(
		cd three &&
		test_must_fail git fetch --refmap="*:refs/remotes/none/*"
	)

fatal: --refmap option is only meaningful with command-line refspec(s)
ok 45 - explicit --refmap is allowed only with command-line refspec

expecting success of 5510.46 'explicit --refmap option overrides remote.*.fetch': 
	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git fetch --refmap="refs/heads/*:refs/remotes/other/*" origin main &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" = "$n" &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side &&
		git rev-parse --verify refs/remotes/other/main
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> other/main
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 46 - explicit --refmap option overrides remote.*.fetch

expecting success of 5510.47 'explicitly empty --refmap option disables remote.*.fetch': 
	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git fetch --refmap="" origin main &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" = "$n" &&
		test_must_fail git rev-parse --verify refs/remotes/origin/side
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
fatal: Needed a single revision
ok 47 - explicitly empty --refmap option disables remote.*.fetch

expecting success of 5510.48 'configured fetch updates tracking': 

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git fetch origin &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" != "$n" &&
		git rev-parse --verify refs/remotes/origin/side
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-branch        -> origin/atomic-branch
 * [new branch]      atomic-branch-1      -> origin/atomic-branch-1
 * [new branch]      atomic-branch-2      -> origin/atomic-branch-2
 * [new branch]      atomic-branch-3      -> origin/atomic-branch-3
 * [new branch]      atomic-fetch-head-1  -> origin/atomic-fetch-head-1
 * [new branch]      atomic-fetch-head-2  -> origin/atomic-fetch-head-2
 * [new branch]      atomic-fetch-head-3  -> origin/atomic-fetch-head-3
 * [new branch]      atomic-hooks-1       -> origin/atomic-hooks-1
 * [new branch]      atomic-hooks-2       -> origin/atomic-hooks-2
 * [new branch]      atomic-hooks-abort-1 -> origin/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> origin/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> origin/atomic-hooks-abort-3
 * [new branch]      atomic-mixed-branch  -> origin/atomic-mixed-branch
 * [new branch]      atomic-new-branch    -> origin/atomic-new-branch
 * [new branch]      atomic-non-ff        -> origin/atomic-non-ff
 * [new branch]      atomic-prune-create  -> origin/atomic-prune-create
 * [new branch]      descriptive-branch   -> origin/descriptive-branch
   7fb3fb8..b4eae8a  main                 -> origin/main
 * [new branch]      side                 -> origin/side
 * [new tag]         anno                 -> anno
 * [new tag]         atomic-hooks-abort   -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag     -> atomic-mixed-tag
 * [new tag]         descriptive-tag      -> descriptive-tag
 * [new tag]         light                -> light
 * [new tag]         v1.0                 -> v1.0
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 48 - configured fetch updates tracking

expecting success of 5510.49 'non-matching refspecs do not confuse tracking update': 
	cd "$D" &&
	git update-ref refs/odd/location HEAD &&
	(
		cd three &&
		git update-ref refs/remotes/origin/main base-origin-main &&
		git config --add remote.origin.fetch \
			refs/odd/location:refs/remotes/origin/odd &&
		o=$(git rev-parse --verify refs/remotes/origin/main) &&
		git fetch origin main &&
		n=$(git rev-parse --verify refs/remotes/origin/main) &&
		test "$o" != "$n" &&
		test_must_fail git rev-parse --verify refs/remotes/origin/odd
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * branch            main       -> FETCH_HEAD
   7fb3fb8..b4eae8a  main       -> origin/main
fatal: Needed a single revision
ok 49 - non-matching refspecs do not confuse tracking update

expecting success of 5510.50 'pushing nonexistent branch by mistake should not segv': 

	cd "$D" &&
	test_must_fail git push seven no:no


error: src refspec no does not match any
error: failed to push some refs to 'seven'
ok 50 - pushing nonexistent branch by mistake should not segv

expecting success of 5510.51 'auto tag following fetches minimum': 

	cd "$D" &&
	git clone .git follow &&
	git checkout HEAD^0 &&
	(
		for i in 1 2 3 4 5 6 7
		do
			echo $i >>file &&
			git commit -m $i -a &&
			git tag -a -m $i excess-$i || exit 1
		done
	) &&
	git checkout main &&
	(
		cd follow &&
		git fetch
	)

Cloning into 'follow'...
done.
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b4eae8a add.file2
[detached HEAD 43226b4] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD 10af796] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD 30e6c6b] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD ed46c7b] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD 6cdf330] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD f577462] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[detached HEAD babaf0e] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Previous HEAD position was babaf0e 7
Switched to branch 'main'
Your branch is based on 'one/main_not', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
ok 51 - auto tag following fetches minimum

expecting success of 5510.52 'refuse to fetch into the current branch': 

	test_must_fail git fetch . side:main


fatal: refusing to fetch into branch 'refs/heads/main' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t5510-fetch'
ok 52 - refuse to fetch into the current branch

expecting success of 5510.53 'fetch into the current branch with --update-head-ok': 

	git fetch --update-head-ok . side:main


ok 53 - fetch into the current branch with --update-head-ok

expecting success of 5510.54 'fetch --dry-run does not touch FETCH_HEAD, but still prints what would be written': 
	rm -f .git/FETCH_HEAD err &&
	git fetch --dry-run . 2>err &&
	! test -f .git/FETCH_HEAD &&
	grep FETCH_HEAD err

 * branch            HEAD       -> FETCH_HEAD
ok 54 - fetch --dry-run does not touch FETCH_HEAD, but still prints what would be written

expecting success of 5510.55 '--no-write-fetch-head does not touch FETCH_HEAD, and does not print what would be written': 
	rm -f .git/FETCH_HEAD err &&
	git fetch --no-write-fetch-head . 2>err &&
	! test -f .git/FETCH_HEAD &&
	! grep FETCH_HEAD err

ok 55 - --no-write-fetch-head does not touch FETCH_HEAD, and does not print what would be written

expecting success of 5510.56 '--write-fetch-head gets defeated by --dry-run': 
	rm -f .git/FETCH_HEAD &&
	git fetch --dry-run --write-fetch-head . &&
	! test -f .git/FETCH_HEAD

From .
 * branch            HEAD       -> FETCH_HEAD
ok 56 - --write-fetch-head gets defeated by --dry-run

expecting success of 5510.57 'should be able to fetch with duplicate refspecs': 
	mkdir dups &&
	(
		cd dups &&
		git init &&
		git config branch.main.remote three &&
		git config remote.three.url ../three/.git &&
		git config remote.three.fetch +refs/heads/*:refs/remotes/origin/* &&
		git config --add remote.three.fetch +refs/heads/*:refs/remotes/origin/* &&
		git fetch three
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/dups/.git/
From ../three/
 * [new branch]      main             -> origin/main
 * [new branch]      one              -> origin/one
 * [new branch]      two              -> origin/two
 * [new tag]         base-origin-main -> base-origin-main
 * [new tag]         v1.0             -> v1.0
 * [new tag]         anno               -> anno
 * [new tag]         atomic-hooks-abort -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag   -> atomic-mixed-tag
 * [new tag]         descriptive-tag    -> descriptive-tag
 * [new tag]         light              -> light
ok 57 - should be able to fetch with duplicate refspecs

expecting success of 5510.58 'LHS of refspec follows ref disambiguation rules': 
	mkdir lhs-ambiguous &&
	(
		cd lhs-ambiguous &&
		git init server &&
		test_commit -C server unwanted &&
		test_commit -C server wanted &&

		git init client &&

		# Check a name coming after "refs" alphabetically ...
		git -C server update-ref refs/heads/s wanted &&
		git -C server update-ref refs/heads/refs/heads/s unwanted &&
		git -C client fetch ../server +refs/heads/s:refs/heads/checkthis &&
		git -C server rev-parse wanted >expect &&
		git -C client rev-parse checkthis >actual &&
		test_cmp expect actual &&

		# ... and one before.
		git -C server update-ref refs/heads/q wanted &&
		git -C server update-ref refs/heads/refs/heads/q unwanted &&
		git -C client fetch ../server +refs/heads/q:refs/heads/checkthis &&
		git -C server rev-parse wanted >expect &&
		git -C client rev-parse checkthis >actual &&
		test_cmp expect actual &&

		# Tags are preferred over branches like refs/{heads,tags}/*
		git -C server update-ref refs/tags/t wanted &&
		git -C server update-ref refs/heads/t unwanted &&
		git -C client fetch ../server +t:refs/heads/checkthis &&
		git -C server rev-parse wanted >expect &&
		git -C client rev-parse checkthis >actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/lhs-ambiguous/server/.git/
[master (root-commit) 4bd74f6] unwanted
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unwanted.t
[master 2680c84] wanted
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 wanted.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/lhs-ambiguous/client/.git/
From ../server
 * [new branch]      s          -> checkthis
 * [new tag]         wanted     -> wanted
 * [new tag]         unwanted   -> unwanted
From ../server
 * [new tag]         t          -> t
ok 58 - LHS of refspec follows ref disambiguation rules

expecting success of 5510.59 'fetch.writeCommitGraph': 
	git clone three write &&
	(
		cd three &&
		test_commit new
	) &&
	(
		cd write &&
		git -c fetch.writeCommitGraph fetch origin &&
		test_path_is_file .git/objects/info/commit-graphs/commit-graph-chain
	)

Cloning into 'write'...
done.
[main 1a8b7a5] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/three
   b4eae8a..1a8b7a5  main       -> origin/main
 * [new tag]         new        -> new
ok 59 - fetch.writeCommitGraph

expecting success of 5510.60 'fetch.writeCommitGraph with submodules': 
	test_config_global protocol.file.allow always &&
	git clone dups super &&
	(
		cd super &&
		git submodule add "file://$TRASH_DIRECTORY/three" &&
		git commit -m "add submodule"
	) &&
	git clone "super" super-clone &&
	(
		cd super-clone &&
		rm -rf .git/objects/info &&
		git -c fetch.writeCommitGraph=true fetch origin &&
		test_path_is_file .git/objects/info/commit-graphs/commit-graph-chain
	)

Cloning into 'super'...
done.
warning: remote HEAD refers to nonexistent ref, unable to checkout
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/super/three'...
[master (root-commit) 8ca4bad] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 three
Cloning into 'super-clone'...
done.
ok 60 - fetch.writeCommitGraph with submodules

expecting success of 5510.61 'setup cmdline_setup variable for subsequent test': 
			remote_url="file://$(git -C one config remote.origin.url)" &&
			remote_fetch="$(git -C one config remote.origin.fetch)" &&
			cmdline_setup="\"$remote_url\" \"$remote_fetch\""
		
ok 61 - setup cmdline_setup variable for subsequent test

expecting success of 5510.62 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      atomic-branch        -> origin/atomic-branch
 * [new branch]      atomic-branch-1      -> origin/atomic-branch-1
 * [new branch]      atomic-branch-2      -> origin/atomic-branch-2
 * [new branch]      atomic-branch-3      -> origin/atomic-branch-3
 * [new branch]      atomic-fetch-head-1  -> origin/atomic-fetch-head-1
 * [new branch]      atomic-fetch-head-2  -> origin/atomic-fetch-head-2
 * [new branch]      atomic-fetch-head-3  -> origin/atomic-fetch-head-3
 * [new branch]      atomic-hooks-1       -> origin/atomic-hooks-1
 * [new branch]      atomic-hooks-2       -> origin/atomic-hooks-2
 * [new branch]      atomic-hooks-abort-1 -> origin/atomic-hooks-abort-1
 * [new branch]      atomic-hooks-abort-2 -> origin/atomic-hooks-abort-2
 * [new branch]      atomic-hooks-abort-3 -> origin/atomic-hooks-abort-3
 * [new branch]      atomic-mixed-branch  -> origin/atomic-mixed-branch
 * [new branch]      atomic-new-branch    -> origin/atomic-new-branch
 * [new branch]      atomic-non-ff        -> origin/atomic-non-ff
 * [new branch]      atomic-prune-create  -> origin/atomic-prune-create
 * [new branch]      descriptive-branch   -> origin/descriptive-branch
   7fb3fb8..b4eae8a  main                 -> origin/main
 * [new branch]      newbranch            -> origin/newbranch
 * [new branch]      side                 -> origin/side
 * [new tag]         anno                 -> anno
 * [new tag]         atomic-hooks-abort   -> atomic-hooks-abort
 * [new tag]         atomic-mixed-tag     -> atomic-mixed-tag
 * [new tag]         descriptive-tag      -> descriptive-tag
 * [new tag]         light                -> light
 * [new tag]         newtag               -> newtag
 * [new tag]         v1.0                 -> v1.0
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 62 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.63 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 63 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.64 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 64 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.65 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 65 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.66 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 66 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.67 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 67 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.68 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
 * [new tag]         excess-1   -> excess-1
 * [new tag]         excess-2   -> excess-2
 * [new tag]         excess-3   -> excess-3
 * [new tag]         excess-4   -> excess-4
 * [new tag]         excess-5   -> excess-5
 * [new tag]         excess-6   -> excess-6
 * [new tag]         excess-7   -> excess-7
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 68 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.69 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 69 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.70 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 70 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.71 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 71 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.72 'name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 72 - name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.73 'link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 73 - link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.74 'name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 74 - name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.75 'link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 75 - link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.76 'name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 76 - name prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.77 'link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 77 - link prune fetch.prune=false remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.78 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 78 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.79 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 79 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.80 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 80 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.81 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 81 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.82 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 82 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.83 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 83 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.84 'name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 84 - name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.85 'link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 85 - link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.86 'name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 86 - name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.87 'link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 87 - link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.88 'name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 88 - name prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.89 'link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 89 - link prune fetch.prune=unset remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.90 'name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 90 - name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.91 'link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 91 - link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.92 'name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 92 - name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.93 'link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 93 - link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.94 'name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 94 - name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.95 'link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 95 - link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.96 'name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 96 - name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.97 'link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 97 - link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.98 'name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 98 - name prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.99 'link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 99 - link prune fetch.prune=false remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.100 'name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 100 - name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.101 'link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 101 - link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.102 'name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 102 - name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.103 'link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 103 - link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.104 'name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 104 - name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.105 'link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 105 - link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.106 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 106 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.107 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 107 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.108 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 108 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.109 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 109 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.110 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 110 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.111 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 111 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.112 'name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 112 - name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.113 'link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 113 - link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.114 'name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 114 - name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.115 'link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 115 - link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.116 'name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 116 - name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.117 'link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 117 - link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.118 'name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 118 - name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.119 'link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 119 - link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset; branch:pruned tag:kept

expecting success of 5510.120 'name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 120 - name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.121 'link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 121 - link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept

expecting success of 5510.122 'name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 122 - name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.123 'link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --no-prune &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 123 - link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept

expecting success of 5510.124 'name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 124 - name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.125 'link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 125 - link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/*; branch:kept tag:pruned

expecting success of 5510.126 'name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 126 - name prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.127 'link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 127 - link prune fetch.prune=true remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=unset --prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:pruned

expecting success of 5510.128 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune-tags; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 128 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune-tags; branch:kept tag:kept

expecting success of 5510.129 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune-tags; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 129 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune-tags; branch:kept tag:kept

expecting success of 5510.130 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 130 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.131 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 131 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:kept tag:kept

expecting success of 5510.132 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 132 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true; branch:kept tag:kept

expecting success of 5510.133 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 133 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true; branch:kept tag:kept

expecting success of 5510.134 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 134 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags; branch:pruned tag:pruned

expecting success of 5510.135 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 135 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags; branch:pruned tag:pruned

expecting success of 5510.136 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 136 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned

expecting success of 5510.137 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 137 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned

expecting success of 5510.138 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 138 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true; branch:pruned tag:pruned

expecting success of 5510.139 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 139 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true; branch:pruned tag:pruned

expecting success of 5510.140 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 140 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned

expecting success of 5510.141 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 141 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset; branch:pruned tag:pruned

expecting success of 5510.142 'name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=false remote.origin.pruneTags=true; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 142 - name prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=false remote.origin.pruneTags=true; branch:pruned tag:pruned

expecting success of 5510.143 'link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=false remote.origin.pruneTags=true; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 143 - link prune fetch.prune=false remote.origin.prune=true fetch.pruneTags=false remote.origin.pruneTags=true; branch:pruned tag:pruned

expecting success of 5510.144 'name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=true remote.origin.pruneTags=false; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch  &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 144 - name prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=true remote.origin.pruneTags=false; branch:kept tag:kept

expecting success of 5510.145 'link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=true remote.origin.pruneTags=false; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 145 - link prune fetch.prune=true remote.origin.prune=false fetch.pruneTags=true remote.origin.pruneTags=false; branch:kept tag:kept

expecting success of 5510.146 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags origin +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 146 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.147 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 147 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.148 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 148 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.149 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 149 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.150 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 150 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.151 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. +refs/heads/*:refs/remotes/origin/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
fatal: Needed a single revision
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 151 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin +refs/heads/*:refs/remotes/origin/*; branch:pruned tag:kept

expecting success of 5510.152 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune-tags; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 152 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune-tags; branch:kept tag:kept

expecting success of 5510.153 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune-tags; branch:kept tag:kept': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
ok 153 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune-tags; branch:kept tag:kept

expecting success of 5510.154 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 154 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:pruned tag:pruned

expecting success of 5510.155 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 155 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned

expecting success of 5510.156 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 156 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin; branch:pruned tag:pruned

expecting success of 5510.157 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune --prune-tags file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 157 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune --prune-tags origin; branch:kept tag:pruned

expecting success of 5510.158 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 158 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin; branch:pruned tag:pruned

expecting success of 5510.159 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 159 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset --prune origin; branch:kept tag:pruned

expecting success of 5510.160 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 160 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin; branch:pruned tag:pruned

expecting success of 5510.161 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch --prune file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 161 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=true --prune origin; branch:kept tag:pruned

expecting success of 5510.162 'name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 162 - name prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:pruned tag:pruned

expecting success of 5510.163 'link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 163 - link prune fetch.prune=true remote.origin.prune=unset fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:kept tag:pruned

expecting success of 5510.164 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 164 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:pruned tag:pruned

expecting success of 5510.165 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 165 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=true remote.origin.pruneTags=unset origin; branch:kept tag:pruned

expecting success of 5510.166 'name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true origin; branch:pruned tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/newbranch
 - [deleted]         (none)     -> newtag
fatal: Needed a single revision
fatal: Needed a single revision
ok 166 - name prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true origin; branch:pruned tag:pruned

expecting success of 5510.167 'link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true origin; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. refs/tags/*:refs/tags/* &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new branch]      newbranch  -> origin/newbranch
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 167 - link prune fetch.prune=unset remote.origin.prune=true fetch.pruneTags=unset remote.origin.pruneTags=true origin; branch:kept tag:pruned

expecting success of 5510.168 'remove remote.origin.fetch "one"': 
	(
		cd one &&
		git config --unset-all remote.origin.fetch
	)

ok 168 - remove remote.origin.fetch "one"

expecting success of 5510.169 'name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch origin --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
 * branch            main       -> FETCH_HEAD
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 169 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned

expecting success of 5510.170 'link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned': 
		# make sure a newbranch is there in . and also in one
		git branch -f newbranch &&
		git tag -f newtag &&
		(
			cd one &&
			test_unconfig fetch.prune &&
			test_unconfig fetch.pruneTags &&
			test_unconfig remote.origin.prune &&
			test_unconfig remote.origin.pruneTags &&
			git fetch "file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/." "+refs/heads/*:refs/remotes/origin/*" &&
			git rev-parse --verify refs/remotes/origin/newbranch &&
			git rev-parse --verify refs/tags/newtag
		) &&

		# now remove them
		git branch -d newbranch &&
		git tag -d newtag &&

		# then test
		(
			cd one &&
			git_fetch_c="" &&
			set_config_tristate fetch.prune $fetch_prune &&
			set_config_tristate fetch.pruneTags $fetch_prune_tags &&
			set_config_tristate remote.origin.prune $remote_origin_prune &&
			set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&

			if test "$mode" != "link"
			then
				git_fetch_c=""
			fi &&
			git$git_fetch_c fetch file\:\/\/\/build\/git\-Eyg2tD\/git\-2\.39\.0\/t\/trash\ directory\.t5510\-fetch\/\. --prune --prune-tags &&
			case "$expected_branch" in
			pruned)
				test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
				;;
			kept)
				git rev-parse --verify refs/remotes/origin/newbranch
				;;
			esac &&
			case "$expected_tag" in
			pruned)
				test_must_fail git rev-parse --verify refs/tags/newtag
				;;
			kept)
				git rev-parse --verify refs/tags/newtag
				;;
			esac
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 * [new tag]         newtag     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
b4eae8a1c2baba90c41b436d5796ef43ea5df434
Deleted branch newbranch (was b4eae8a).
Deleted tag 'newtag' (was b4eae8a)
From file:///<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> newtag
b4eae8a1c2baba90c41b436d5796ef43ea5df434
fatal: Needed a single revision
ok 170 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset origin --prune --prune-tags; branch:kept tag:pruned

expecting success of 5510.171 'all boundary commits are excluded': 
	test_commit base &&
	test_commit oneside &&
	git checkout HEAD^ &&
	test_commit otherside &&
	git checkout main &&
	test_tick &&
	git merge otherside &&
	ad=$(git log --no-walk --format=%ad HEAD) &&
	git bundle create twoside-boundary.bdl main --since="$ad" &&
	test_bundle_object_count --thin twoside-boundary.bdl 3

[main dc1ab9d] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[main 9ab9525] oneside
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 oneside.t
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dc1ab9d base
[detached HEAD 5c45805] otherside
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 otherside.t
Previous HEAD position was 5c45805 otherside
Switched to branch 'main'
Your branch is based on 'one/main_not', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
Merge made by the 'ort' strategy.
 otherside.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 otherside.t
pack	fe30107d3d1ce0764ae8d8193ffe6b4c2fd3f327
ok 171 - all boundary commits are excluded

expecting success of 5510.172 'fetch --prune prints the remotes url': 
	git branch goodbye &&
	git clone . only-prunes &&
	git branch -D goodbye &&
	(
		cd only-prunes &&
		git fetch --prune origin 2>&1 | head -n1 >../actual
	) &&
	echo "From ${D}/." >expect &&
	test_cmp expect actual

Cloning into 'only-prunes'...
done.
Deleted branch goodbye (was a008302).
ok 172 - fetch --prune prints the remotes url

expecting success of 5510.173 'branchname D/F conflict resolved by --prune': 
	git branch dir/file &&
	git clone . prune-df-conflict &&
	git branch -D dir/file &&
	git branch dir &&
	(
		cd prune-df-conflict &&
		git fetch --prune &&
		git rev-parse origin/dir >../actual
	) &&
	git rev-parse dir >expect &&
	test_cmp expect actual

Cloning into 'prune-df-conflict'...
done.
Deleted branch dir/file (was a008302).
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/.
 - [deleted]         (none)     -> origin/dir/file
 * [new branch]      dir        -> origin/dir
ok 173 - branchname D/F conflict resolved by --prune

expecting success of 5510.174 'fetching a one-level ref works': 
	test_commit extra &&
	git reset --hard HEAD^ &&
	git update-ref refs/foo extra &&
	git init one-level &&
	(
		cd one-level &&
		git fetch .. HEAD refs/foo
	)

[main 445a4b6] extra
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 extra.t
HEAD is now at a008302 Merge tag 'otherside'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/one-level/.git/
From ..
 * branch            HEAD       -> FETCH_HEAD
 * branch            refs/foo   -> FETCH_HEAD
ok 174 - fetching a one-level ref works

expecting success of 5510.175 'fetching with auto-gc does not lock up': 
	write_script askyesno <<-\EOF &&
	echo "$*" &&
	false
	EOF
	git clone "file://$D" auto-gc &&
	test_commit test2 &&
	(
		cd auto-gc &&
		git config fetch.unpackLimit 1 &&
		git config gc.autoPackLimit 1 &&
		git config gc.autoDetach false &&
		GIT_ASK_YESNO="$D/askyesno" git fetch --verbose >fetch.out 2>&1 &&
		test_i18ngrep "Auto packing the repository" fetch.out &&
		! grep "Should I try again" fetch.out
	)

Cloning into 'auto-gc'...
[main d0a2253] test2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test2.t
Auto packing the repository for optimum performance.
ok 175 - fetching with auto-gc does not lock up

expecting success of 5510.176 'fetch aligned output': 
	git clone . full-output &&
	test_commit looooooooooooong-tag &&
	(
		cd full-output &&
		git -c fetch.output=full fetch origin >actual 2>&1 &&
		grep -e "->" actual | cut -c 22- >../actual
	) &&
	cat >expect <<-\EOF &&
	main                 -> origin/main
	looooooooooooong-tag -> looooooooooooong-tag
	EOF
	test_cmp expect actual

Cloning into 'full-output'...
done.
[main 9defc9d] looooooooooooong-tag
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 looooooooooooong-tag.t
ok 176 - fetch aligned output

expecting success of 5510.177 'fetch compact output': 
	git clone . compact &&
	test_commit extraaa &&
	(
		cd compact &&
		git -c fetch.output=compact fetch origin >actual 2>&1 &&
		grep -e "->" actual | cut -c 22- >../actual
	) &&
	cat >expect <<-\EOF &&
	main       -> origin/*
	extraaa    -> *
	EOF
	test_cmp expect actual

Cloning into 'compact'...
done.
[main aa6ccb2] extraaa
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 extraaa.t
ok 177 - fetch compact output

expecting success of 5510.178 '--no-show-forced-updates': 
	mkdir forced-updates &&
	(
		cd forced-updates &&
		git init &&
		test_commit 1 &&
		test_commit 2
	) &&
	git clone forced-updates forced-update-clone &&
	git clone forced-updates no-forced-update-clone &&
	git -C forced-updates reset --hard HEAD~1 &&
	(
		cd forced-update-clone &&
		git fetch --show-forced-updates origin 2>output &&
		test_i18ngrep "(forced update)" output
	) &&
	(
		cd no-forced-update-clone &&
		git fetch --no-show-forced-updates origin 2>output &&
		test_i18ngrep ! "(forced update)" output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/forced-updates/.git/
[master (root-commit) 11730cb] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 7634987] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Cloning into 'forced-update-clone'...
done.
Cloning into 'no-forced-update-clone'...
done.
HEAD is now at 11730cb 1
 + 7634987...11730cb master     -> origin/master  (forced update)
ok 178 - --no-show-forced-updates

expecting success of 5510.179 '--negotiation-tip limits "have" lines sent': 
	setup_negotiation_tip server server 0 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch \
		--negotiation-tip=alpha_1 --negotiation-tip=beta_1 \
		origin alpha_s beta_s &&
	check_negotiation_tip

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server/.git/
[main (root-commit) 8870ee7] alpha_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_1.t
[main 13d40be] alpha_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_2.t
Switched to a new branch 'beta'
[beta (root-commit) 8b58bcd] beta_1
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 alpha_1.t
 create mode 100644 alpha_2.t
 create mode 100644 beta_1.t
[beta 8717e02] beta_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_2.t
Cloning into 'client'...
done.
[beta 4e0d39f] beta_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_s.t
Switched to branch 'main'
[main e193389] alpha_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_s.t
Deleted tag 'alpha_1' (was 8870ee7)
Deleted tag 'alpha_2' (was 13d40be)
Deleted tag 'beta_1' (was 8b58bcd)
Deleted tag 'beta_2' (was 8717e02)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server
 * tag               alpha_s    -> FETCH_HEAD
 * tag               beta_s     -> FETCH_HEAD
packet:        fetch> have 8870ee78dee82f6c868de93e6270cecd30ea6dfa
packet:        fetch> have 8b58bcd779f7cba7f929390b9badcb8ce5a6f263
ok 179 - --negotiation-tip limits "have" lines sent

expecting success of 5510.180 '--negotiation-tip understands globs': 
	setup_negotiation_tip server server 0 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch \
		--negotiation-tip=*_1 \
		origin alpha_s beta_s &&
	check_negotiation_tip

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server/.git/
[main (root-commit) 5c7e6af] alpha_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_1.t
[main e1114f7] alpha_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_2.t
Switched to a new branch 'beta'
[beta (root-commit) 50cdf62] beta_1
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 alpha_1.t
 create mode 100644 alpha_2.t
 create mode 100644 beta_1.t
[beta dfec498] beta_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_2.t
Cloning into 'client'...
done.
[beta e77e52c] beta_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_s.t
Switched to branch 'main'
[main aa70094] alpha_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_s.t
Deleted tag 'alpha_1' (was 5c7e6af)
Deleted tag 'alpha_2' (was e1114f7)
Deleted tag 'beta_1' (was 50cdf62)
Deleted tag 'beta_2' (was dfec498)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server
 * tag               alpha_s    -> FETCH_HEAD
 * tag               beta_s     -> FETCH_HEAD
packet:        fetch> have 5c7e6af9b6b72477ca865b31116bac15243f0101
packet:        fetch> have 50cdf6286d0b8ad2b70f52ffe8f6fa4e6b7eb924
ok 180 - --negotiation-tip understands globs

expecting success of 5510.181 '--negotiation-tip understands abbreviated SHA-1': 
	setup_negotiation_tip server server 0 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch \
		--negotiation-tip=$(git -C client rev-parse --short alpha_1) \
		--negotiation-tip=$(git -C client rev-parse --short beta_1) \
		origin alpha_s beta_s &&
	check_negotiation_tip

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server/.git/
[main (root-commit) 652c3dc] alpha_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_1.t
[main c449b74] alpha_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_2.t
Switched to a new branch 'beta'
[beta (root-commit) 7367bdf] beta_1
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 alpha_1.t
 create mode 100644 alpha_2.t
 create mode 100644 beta_1.t
[beta e3b1411] beta_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_2.t
Cloning into 'client'...
done.
[beta 9ac7127] beta_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_s.t
Switched to branch 'main'
[main e2afba2] alpha_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_s.t
Deleted tag 'alpha_1' (was 652c3dc)
Deleted tag 'alpha_2' (was c449b74)
Deleted tag 'beta_1' (was 7367bdf)
Deleted tag 'beta_2' (was e3b1411)
From /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server
 * tag               alpha_s    -> FETCH_HEAD
 * tag               beta_s     -> FETCH_HEAD
packet:        fetch> have 652c3dc2ba7290d8007fbd4dbe88e04884d3b69d
packet:        fetch> have 7367bdf3be3d9d14e3f6384d6802f52582e5b877
ok 181 - --negotiation-tip understands abbreviated SHA-1

expecting success of 5510.182 '--negotiation-tip rejects missing OIDs': 
	setup_negotiation_tip server server 0 &&
	test_must_fail git -C client fetch \
		--negotiation-tip=alpha_1 \
		--negotiation-tip=$(test_oid zero) \
		origin alpha_s beta_s 2>err &&
	cat >fatal-expect <<-EOF &&
	fatal: the object $(test_oid zero) does not exist
EOF
	grep fatal: err >fatal-actual &&
	test_cmp fatal-expect fatal-actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5510-fetch/server/.git/
[main (root-commit) a84e4a9] alpha_1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_1.t
[main 7dd5cf4] alpha_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_2.t
Switched to a new branch 'beta'
[beta (root-commit) bcb5c65] beta_1
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 alpha_1.t
 create mode 100644 alpha_2.t
 create mode 100644 beta_1.t
[beta d3b6dcd] beta_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_2.t
Cloning into 'client'...
done.
[beta 6d12393] beta_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 beta_s.t
Switched to branch 'main'
[main ef318b3] alpha_s
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 alpha_s.t
Deleted tag 'alpha_1' (was a84e4a9)
Deleted tag 'alpha_2' (was 7dd5cf4)
Deleted tag 'beta_1' (was bcb5c65)
Deleted tag 'beta_2' (was d3b6dcd)
ok 182 - --negotiation-tip rejects missing OIDs

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 182 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..182
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5532-fetch-proxy.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5532-fetch-proxy/.git/
expecting success of 5532.1 'setup remote repo': 
	git init remote &&
	(cd remote &&
	 echo content >file &&
	 git add file &&
	 git commit -m one
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5532-fetch-proxy/remote/.git/
[master (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup remote repo

expecting success of 5532.2 'setup proxy script': 
	write_script proxy-get-cmd "$PERL_PATH" <<-\EOF &&
	read(STDIN, $buf, 4);
	my $n = hex($buf) - 4;
	read(STDIN, $buf, $n);
	my ($cmd, $other) = split /\0/, $buf;
	# drop absolute-path on repo name
	$cmd =~ s{ /}{ };
	print $cmd;
	EOF

	write_script proxy <<-\EOF
	echo >&2 "proxying for $*"
	cmd=$(./proxy-get-cmd)
	echo >&2 "Running $cmd"
	exec $cmd
	EOF

ok 2 - setup proxy script

expecting success of 5532.3 'setup local repo': 
	git remote add fake git://example.com/remote &&
	git config core.gitproxy ./proxy

ok 3 - setup local repo

expecting success of 5532.4 'fetch through proxy works': 
	git fetch fake &&
	echo one >expect &&
	git log -1 --format=%s FETCH_HEAD >actual &&
	test_cmp expect actual

proxying for example.com 9418
Running git-upload-pack remote
From git://example.com/remote
 * [new branch]      master     -> fake/master
ok 4 - fetch through proxy works

expecting success of 5532.5 'funny hostnames are rejected before running proxy': 
	test_must_fail git fetch git://-remote/repo.git 2>stderr &&
	! grep "proxying for" stderr

ok 5 - funny hostnames are rejected before running proxy

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5516-fetch-push.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.git/
expecting success of 5516.1 'setup': 

	>path1 &&
	git add path1 &&
	test_tick &&
	git commit -a -m repo &&
	the_first_commit=$(git show-ref -s --verify refs/heads/main) &&

	>path2 &&
	git add path2 &&
	test_tick &&
	git commit -a -m second &&
	the_commit=$(git show-ref -s --verify refs/heads/main)


[main (root-commit) b9c09d6] repo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path1
[main 9ad36e1] second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
ok 1 - setup

expecting success of 5516.2 'fetch without wildcard': 
	mk_empty testrepo &&
	(
		cd testrepo &&
		git fetch .. refs/heads/main:refs/remotes/origin/main &&

		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From ..
 * [new branch]      main       -> origin/main
ok 2 - fetch without wildcard

expecting success of 5516.3 'fetch with wildcard': 
	mk_empty testrepo &&
	(
		cd testrepo &&
		git config remote.up.url .. &&
		git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" &&
		git fetch up &&

		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From ..
 * [new branch]      main       -> origin/main
ok 3 - fetch with wildcard

expecting success of 5516.4 'fetch with insteadOf': 
	mk_empty testrepo &&
	(
		TRASH=$(pwd)/ &&
		cd testrepo &&
		git config "url.$TRASH.insteadOf" trash/ &&
		git config remote.up.url trash/. &&
		git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" &&
		git fetch up &&

		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.
 * [new branch]      main       -> origin/main
ok 4 - fetch with insteadOf

expecting success of 5516.5 'fetch with pushInsteadOf (should not rewrite)': 
	mk_empty testrepo &&
	(
		TRASH=$(pwd)/ &&
		cd testrepo &&
		git config "url.trash/.pushInsteadOf" "$TRASH" &&
		git config remote.up.url "$TRASH." &&
		git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" &&
		git fetch up &&

		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.
 * [new branch]      main       -> origin/main
ok 5 - fetch with pushInsteadOf (should not rewrite)

expecting success of 5516.6 'push without negotiation': 
	mk_empty testrepo &&
	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
	test_commit -C testrepo unrelated_commit &&
	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
	test_when_finished "rm event" &&
	GIT_TRACE2_EVENT="$(pwd)/event" git -c protocol.version=2 push testrepo refs/heads/main:refs/remotes/origin/main &&
	grep_wrote 5 event # 2 commits, 2 trees, 1 blob

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/first_commit
[main (root-commit) 1aad98e] unrelated_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated_commit.t
To testrepo
 * [new reference]   main -> origin/main
{"event":"data","sid":"20221228T075110.647214Z-Hc64317c2-P000064ef/20221228T075110.700445Z-Hc64317c2-P000064fd","thread":"main","time":"2022-12-28T07:51:10.727356Z","file":"builtin/pack-objects.c","line":1311,"repo":1,"t_abs":0.030143,"t_rel":0.010756,"nesting":2,"category":"pack-objects","key":"write_pack_file/wrote","value":"5"}
ok 6 - push without negotiation

expecting success of 5516.7 'push with negotiation': 
	mk_empty testrepo &&
	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
	test_commit -C testrepo unrelated_commit &&
	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
	test_when_finished "rm event" &&
	GIT_TRACE2_EVENT="$(pwd)/event" \
		git -c protocol.version=2 -c push.negotiate=1 \
		push testrepo refs/heads/main:refs/remotes/origin/main &&
	grep \"key\":\"total_rounds\",\"value\":\"1\" event &&
	grep_wrote 2 event # 1 commit, 1 tree

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/first_commit
[main (root-commit) 8e794eb] unrelated_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated_commit.t
To testrepo
 * [new reference]   main -> origin/main
{"event":"data","sid":"20221228T075111.390809Z-Hc64317c2-P000065a5/20221228T075111.443167Z-Hc64317c2-P000065b3","thread":"main","time":"2022-12-28T07:51:11.499864Z","file":"fetch-pack.c","line":2211,"repo":1,"t_abs":0.059767,"t_rel":0.000123,"nesting":3,"category":"negotiate_using_fetch","key":"total_rounds","value":"1"}
{"event":"data","sid":"20221228T075111.390809Z-Hc64317c2-P000065a5/20221228T075111.529032Z-Hc64317c2-P000065c9","thread":"main","time":"2022-12-28T07:51:11.547726Z","file":"builtin/pack-objects.c","line":1311,"repo":1,"t_abs":0.021674,"t_rel":0.004694,"nesting":2,"category":"pack-objects","key":"write_pack_file/wrote","value":"2"}
ok 7 - push with negotiation

expecting success of 5516.8 'push with negotiation proceeds anyway even if negotiation fails': 
	mk_empty testrepo &&
	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
	test_commit -C testrepo unrelated_commit &&
	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
	test_when_finished "rm event" &&
	GIT_TEST_PROTOCOL_VERSION=0 GIT_TRACE2_EVENT="$(pwd)/event" \
		git -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main 2>err &&
	grep_wrote 5 event && # 2 commits, 2 trees, 1 blob
	test_i18ngrep "push negotiation failed" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/first_commit
[main (root-commit) 294c9e5] unrelated_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated_commit.t
{"event":"data","sid":"20221228T075112.219274Z-Hc64317c2-P0000667a/20221228T075112.333973Z-Hc64317c2-P00006698","thread":"main","time":"2022-12-28T07:51:12.360021Z","file":"builtin/pack-objects.c","line":1311,"repo":1,"t_abs":0.028832,"t_rel":0.006355,"nesting":2,"category":"pack-objects","key":"write_pack_file/wrote","value":"5"}
warning: push negotiation failed; proceeding anyway with push
ok 8 - push with negotiation proceeds anyway even if negotiation fails

expecting success of 5516.9 'push with negotiation does not attempt to fetch submodules': 
	mk_empty submodule_upstream &&
	test_commit -C submodule_upstream submodule_commit &&
	test_config_global protocol.file.allow always &&
	git submodule add ./submodule_upstream submodule &&
	mk_empty testrepo &&
	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
	test_commit -C testrepo unrelated_commit &&
	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
	GIT_TRACE2_EVENT="$(pwd)/event"  git -c submodule.recurse=true \
		-c protocol.version=2 -c push.negotiate=1 \
		push testrepo refs/heads/main:refs/remotes/origin/main 2>err &&
	grep \"key\":\"total_rounds\",\"value\":\"1\" event &&
	! grep "Fetching submodule" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/submodule_upstream/.git/
[main (root-commit) 7c5b5fd] submodule_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 submodule_commit.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/submodule'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/first_commit
[main (root-commit) 3be3d20] unrelated_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated_commit.t
{"event":"data","sid":"20221228T075113.728226Z-Hc64317c2-P000067ec/20221228T075113.787463Z-Hc64317c2-P000067f9","thread":"main","time":"2022-12-28T07:51:13.848039Z","file":"fetch-pack.c","line":2211,"repo":1,"t_abs":0.065762,"t_rel":0.000104,"nesting":3,"category":"negotiate_using_fetch","key":"total_rounds","value":"1"}
ok 9 - push with negotiation does not attempt to fetch submodules

expecting success of 5516.10 'push without wildcard': 
	mk_empty testrepo &&

	git push testrepo refs/heads/main:refs/remotes/origin/main &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   main -> origin/main
ok 10 - push without wildcard

expecting success of 5516.11 'push with wildcard': 
	mk_empty testrepo &&

	git push testrepo "refs/heads/*:refs/remotes/origin/*" &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   main -> origin/main
ok 11 - push with wildcard

expecting success of 5516.12 'push with insteadOf': 
	mk_empty testrepo &&
	TRASH="$(pwd)/" &&
	test_config "url.$TRASH.insteadOf" trash/ &&
	git push trash/testrepo refs/heads/main:refs/remotes/origin/main &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 * [new reference]   main -> origin/main
ok 12 - push with insteadOf

expecting success of 5516.13 'push with pushInsteadOf': 
	mk_empty testrepo &&
	TRASH="$(pwd)/" &&
	test_config "url.$TRASH.pushInsteadOf" trash/ &&
	git push trash/testrepo refs/heads/main:refs/remotes/origin/main &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 * [new reference]   main -> origin/main
ok 13 - push with pushInsteadOf

expecting success of 5516.14 'push with pushInsteadOf and explicit pushurl (pushInsteadOf should not rewrite)': 
	mk_empty testrepo &&
	test_config "url.trash2/.pushInsteadOf" testrepo/ &&
	test_config "url.trash3/.pushInsteadOf" trash/wrong &&
	test_config remote.r.url trash/wrong &&
	test_config remote.r.pushurl "testrepo/" &&
	git push r refs/heads/main:refs/remotes/origin/main &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo/
 * [new reference]   main -> origin/main
ok 14 - push with pushInsteadOf and explicit pushurl (pushInsteadOf should not rewrite)

expecting success of 5516.15 'push with matching heads': 

	mk_test testrepo heads/main &&
	git push testrepo : &&
	check_push_result testrepo $the_commit heads/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 15 - push with matching heads

expecting success of 5516.16 'push with matching heads on the command line': 

	mk_test testrepo heads/main &&
	git push testrepo : &&
	check_push_result testrepo $the_commit heads/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 16 - push with matching heads on the command line

expecting success of 5516.17 'failed (non-fast-forward) push with matching heads': 

	mk_test testrepo heads/main &&
	git push testrepo : &&
	git commit --amend -massaged &&
	test_must_fail git push testrepo &&
	check_push_result testrepo $the_commit heads/main &&
	git reset --hard $the_commit


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
[main 84b8a29] assaged
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 path2
 create mode 160000 submodule
fatal: The current branch main has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream testrepo main

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

warning: unable to rmdir 'submodule': Directory not empty
HEAD is now at 9ad36e1 second
ok 17 - failed (non-fast-forward) push with matching heads

expecting success of 5516.18 'push --force with matching heads': 

	mk_test testrepo heads/main &&
	git push testrepo : &&
	git commit --amend -massaged &&
	git push --force testrepo : &&
	! check_push_result testrepo $the_commit heads/main &&
	git reset --hard $the_commit


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
[main 935970f] assaged
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
remote: warning: updating the current branch        
To testrepo
 + 9ad36e1...935970f main -> main (forced update)
--- expect	2022-12-28 07:51:19.292622204 +0000
+++ actual	2022-12-28 07:51:19.322623306 +0000
@@ -1 +1 @@
-9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f
+935970ff2fd2257ae1a73d15652c0ac6f837cf17
HEAD is now at 9ad36e1 second
ok 18 - push --force with matching heads

expecting success of 5516.19 'push with matching heads and forced update': 

	mk_test testrepo heads/main &&
	git push testrepo : &&
	git commit --amend -massaged &&
	git push testrepo +: &&
	! check_push_result testrepo $the_commit heads/main &&
	git reset --hard $the_commit


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
[main 935970f] assaged
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
remote: warning: updating the current branch        
To testrepo
 + 9ad36e1...935970f main -> main (forced update)
--- expect	2022-12-28 07:51:20.332660413 +0000
+++ actual	2022-12-28 07:51:20.352661148 +0000
@@ -1 +1 @@
-9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f
+935970ff2fd2257ae1a73d15652c0ac6f837cf17
HEAD is now at 9ad36e1 second
ok 19 - push with matching heads and forced update

expecting success of 5516.20 'push with no ambiguity (1)': 

	mk_test testrepo heads/main &&
	git push testrepo main:main &&
	check_push_result testrepo $the_commit heads/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 20 - push with no ambiguity (1)

expecting success of 5516.21 'push with no ambiguity (2)': 

	mk_test testrepo remotes/origin/main &&
	git push testrepo main:origin/main &&
	check_push_result testrepo $the_commit remotes/origin/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/main
notice: HEAD points to an unborn branch (main)
To testrepo
   b9c09d6..9ad36e1  main -> origin/main
notice: HEAD points to an unborn branch (main)
ok 21 - push with no ambiguity (2)

expecting success of 5516.22 'push with colon-less refspec, no ambiguity': 

	mk_test testrepo heads/main heads/t/main &&
	git branch -f t/main main &&
	git push testrepo main &&
	check_push_result testrepo $the_commit heads/main &&
	check_push_result testrepo $the_first_commit heads/t/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> t/main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 22 - push with colon-less refspec, no ambiguity

expecting success of 5516.23 'push with weak ambiguity (1)': 

	mk_test testrepo heads/main remotes/origin/main &&
	git push testrepo main:main &&
	check_push_result testrepo $the_commit heads/main &&
	check_push_result testrepo $the_first_commit remotes/origin/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 23 - push with weak ambiguity (1)

expecting success of 5516.24 'push with weak ambiguity (2)': 

	mk_test testrepo heads/main remotes/origin/main remotes/another/main &&
	git push testrepo main:main &&
	check_push_result testrepo $the_commit heads/main &&
	check_push_result testrepo $the_first_commit remotes/origin/main remotes/another/main


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> origin/main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> another/main
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 24 - push with weak ambiguity (2)

expecting success of 5516.25 'push with ambiguity': 

	mk_test testrepo heads/frotz tags/frotz &&
	test_must_fail git push testrepo main:frotz &&
	check_push_result testrepo $the_first_commit heads/frotz tags/frotz


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
To testrepo
 * [new tag]         b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
notice: HEAD points to an unborn branch (main)
error: dst refspec frotz matches more than one
error: failed to push some refs to 'testrepo'
notice: HEAD points to an unborn branch (main)
ok 25 - push with ambiguity

expecting success of 5516.26 'push with colon-less refspec (1)': 

	mk_test testrepo heads/frotz tags/frotz &&
	git branch -f frotz main &&
	git push testrepo frotz &&
	check_push_result testrepo $the_commit heads/frotz &&
	check_push_result testrepo $the_first_commit tags/frotz


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
To testrepo
 * [new tag]         b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
notice: HEAD points to an unborn branch (main)
To testrepo
   b9c09d6..9ad36e1  frotz -> frotz
notice: HEAD points to an unborn branch (main)
notice: HEAD points to an unborn branch (main)
ok 26 - push with colon-less refspec (1)

expecting success of 5516.27 'push with colon-less refspec (2)': 

	mk_test testrepo heads/frotz tags/frotz &&
	if git show-ref --verify -q refs/heads/frotz
	then
		git branch -D frotz
	fi &&
	git tag -f frotz &&
	git push -f testrepo frotz &&
	check_push_result testrepo $the_commit tags/frotz &&
	check_push_result testrepo $the_first_commit heads/frotz


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
To testrepo
 * [new tag]         b9c09d6cc74d3857142fb7c082dca65b88254c6d -> frotz
notice: HEAD points to an unborn branch (main)
Deleted branch frotz (was 9ad36e1).
To testrepo
 + b9c09d6...9ad36e1 frotz -> frotz (forced update)
notice: HEAD points to an unborn branch (main)
notice: HEAD points to an unborn branch (main)
ok 27 - push with colon-less refspec (2)

expecting success of 5516.28 'push with colon-less refspec (3)': 

	mk_test testrepo &&
	if git show-ref --verify -q refs/tags/frotz
	then
		git tag -d frotz
	fi &&
	git branch -f frotz main &&
	git push testrepo frotz &&
	check_push_result testrepo $the_commit heads/frotz &&
	test 1 = $( cd testrepo && git show-ref | wc -l )

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
Deleted tag 'frotz' (was 9ad36e1)
To testrepo
 * [new branch]      frotz -> frotz
notice: HEAD points to an unborn branch (main)
ok 28 - push with colon-less refspec (3)

expecting success of 5516.29 'push with colon-less refspec (4)': 

	mk_test testrepo &&
	if git show-ref --verify -q refs/heads/frotz
	then
		git branch -D frotz
	fi &&
	git tag -f frotz &&
	git push testrepo frotz &&
	check_push_result testrepo $the_commit tags/frotz &&
	test 1 = $( cd testrepo && git show-ref | wc -l )


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
Deleted branch frotz (was 9ad36e1).
To testrepo
 * [new tag]         frotz -> frotz
notice: HEAD points to an unborn branch (main)
ok 29 - push with colon-less refspec (4)

expecting success of 5516.30 'push head with non-existent, incomplete dest': 

	mk_test testrepo &&
	git push testrepo main:branch &&
	check_push_result testrepo $the_commit heads/branch


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
To testrepo
 * [new branch]      main -> branch
notice: HEAD points to an unborn branch (main)
ok 30 - push head with non-existent, incomplete dest

expecting success of 5516.31 'push tag with non-existent, incomplete dest': 

	mk_test testrepo &&
	git tag -f v1.0 &&
	git push testrepo v1.0:tag &&
	check_push_result testrepo $the_commit tags/tag


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
To testrepo
 * [new tag]         v1.0 -> tag
notice: HEAD points to an unborn branch (main)
ok 31 - push tag with non-existent, incomplete dest

expecting success of 5516.32 'push sha1 with non-existent, incomplete dest': 

	mk_test testrepo &&
	test_must_fail git push testrepo $(git rev-parse main):foo


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
error: The destination you provided is not a full refname (i.e.,
starting with "refs/"). We tried to guess what you meant by:

- Looking for a ref that matches 'foo' on the remote side.
- Checking if the <src> being pushed ('9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f')
  is a ref in "refs/{heads,tags}/". If so we add a corresponding
  refs/{heads,tags}/ prefix on the remote side.

Neither worked, so we gave up. You must fully qualify the ref.
hint: The <src> part of the refspec is a commit object.
hint: Did you mean to create a new branch by pushing to
hint: '9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f:refs/heads/foo'?
error: failed to push some refs to 'testrepo'
ok 32 - push sha1 with non-existent, incomplete dest

expecting success of 5516.33 'push ref expression with non-existent, incomplete dest': 

	mk_test testrepo &&
	test_must_fail git push testrepo main^:branch


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
error: The destination you provided is not a full refname (i.e.,
starting with "refs/"). We tried to guess what you meant by:

- Looking for a ref that matches 'branch' on the remote side.
- Checking if the <src> being pushed ('main^')
  is a ref in "refs/{heads,tags}/". If so we add a corresponding
  refs/{heads,tags}/ prefix on the remote side.

Neither worked, so we gave up. You must fully qualify the ref.
hint: The <src> part of the refspec is a commit object.
hint: Did you mean to create a new branch by pushing to
hint: 'main^:refs/heads/branch'?
error: failed to push some refs to 'testrepo'
ok 33 - push ref expression with non-existent, incomplete dest

expecting success of 5516.34 'push with HEAD': 
		mk_test testrepo heads/main &&
		git checkout main &&
		git push testrepo $head &&
		check_push_result testrepo $the_commit heads/main
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  HEAD -> main
ok 34 - push with HEAD

expecting success of 5516.35 'push with HEAD nonexisting at remote': 
		mk_test testrepo heads/main &&
		git checkout -b local main &&
		test_when_finished "git checkout main; git branch -D local" &&
		git push testrepo $head &&
		check_push_result testrepo $the_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Switched to a new branch 'local'
To testrepo
 * [new branch]      HEAD -> local
Switched to branch 'main'
Deleted branch local (was 9ad36e1).
ok 35 - push with HEAD nonexisting at remote

expecting success of 5516.36 'push with +HEAD': 
		mk_test testrepo heads/main &&
		git checkout -b local main &&
		test_when_finished "git checkout main; git branch -D local" &&
		git push testrepo main local &&
		check_push_result testrepo $the_commit heads/main &&
		check_push_result testrepo $the_commit heads/local &&

		# Without force rewinding should fail
		git reset --hard $head^ &&
		test_must_fail git push testrepo $head &&
		check_push_result testrepo $the_commit heads/local &&

		# With force rewinding should succeed
		git push testrepo +$head &&
		check_push_result testrepo $the_first_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Switched to a new branch 'local'
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
 * [new branch]      local -> local
HEAD is now at b9c09d6 repo
To testrepo
 ! [rejected]        HEAD -> local (non-fast-forward)
error: failed to push some refs to 'testrepo'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
To testrepo
 + 9ad36e1...b9c09d6 HEAD -> local (forced update)
Switched to branch 'main'
Deleted branch local (was b9c09d6).
ok 36 - push with +HEAD

expecting success of 5516.37 'push HEAD with non-existent, incomplete dest': 
		mk_test testrepo &&
		git checkout main &&
		git push testrepo $head:branch &&
		check_push_result testrepo $the_commit heads/branch

	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
Already on 'main'
To testrepo
 * [new branch]      HEAD -> branch
notice: HEAD points to an unborn branch (main)
ok 37 - push HEAD with non-existent, incomplete dest

expecting success of 5516.38 'push with config remote.*.push = HEAD': 
		mk_test testrepo heads/local &&
		git checkout main &&
		git branch -f local $the_commit &&
		test_when_finished "git branch -D local" &&
		(
			cd testrepo &&
			git checkout local &&
			git reset --hard $the_first_commit
		) &&
		test_config remote.there.url testrepo &&
		test_config remote.there.push $head &&
		test_config branch.main.remote there &&
		git push &&
		check_push_result testrepo $the_commit heads/main &&
		check_push_result testrepo $the_first_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> local
notice: HEAD points to an unborn branch (main)
Already on 'main'
Switched to branch 'local'
HEAD is now at b9c09d6 repo
To testrepo
 * [new branch]      HEAD -> main
Deleted branch local (was 9ad36e1).
ok 38 - push with config remote.*.push = HEAD

expecting success of 5516.39 'push with @': 
		mk_test testrepo heads/main &&
		git checkout main &&
		git push testrepo $head &&
		check_push_result testrepo $the_commit heads/main
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  HEAD -> main
ok 39 - push with @

expecting success of 5516.40 'push with @ nonexisting at remote': 
		mk_test testrepo heads/main &&
		git checkout -b local main &&
		test_when_finished "git checkout main; git branch -D local" &&
		git push testrepo $head &&
		check_push_result testrepo $the_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Switched to a new branch 'local'
To testrepo
 * [new branch]      HEAD -> local
Switched to branch 'main'
Deleted branch local (was 9ad36e1).
ok 40 - push with @ nonexisting at remote

expecting success of 5516.41 'push with +@': 
		mk_test testrepo heads/main &&
		git checkout -b local main &&
		test_when_finished "git checkout main; git branch -D local" &&
		git push testrepo main local &&
		check_push_result testrepo $the_commit heads/main &&
		check_push_result testrepo $the_commit heads/local &&

		# Without force rewinding should fail
		git reset --hard $head^ &&
		test_must_fail git push testrepo $head &&
		check_push_result testrepo $the_commit heads/local &&

		# With force rewinding should succeed
		git push testrepo +$head &&
		check_push_result testrepo $the_first_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Switched to a new branch 'local'
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
 * [new branch]      local -> local
HEAD is now at b9c09d6 repo
To testrepo
 ! [rejected]        HEAD -> local (non-fast-forward)
error: failed to push some refs to 'testrepo'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
To testrepo
 + 9ad36e1...b9c09d6 HEAD -> local (forced update)
Switched to branch 'main'
Deleted branch local (was b9c09d6).
ok 41 - push with +@

expecting success of 5516.42 'push @ with non-existent, incomplete dest': 
		mk_test testrepo &&
		git checkout main &&
		git push testrepo $head:branch &&
		check_push_result testrepo $the_commit heads/branch

	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
notice: HEAD points to an unborn branch (main)
notice: No default references
Already on 'main'
To testrepo
 * [new branch]      HEAD -> branch
notice: HEAD points to an unborn branch (main)
ok 42 - push @ with non-existent, incomplete dest

expecting success of 5516.43 'push with config remote.*.push = @': 
		mk_test testrepo heads/local &&
		git checkout main &&
		git branch -f local $the_commit &&
		test_when_finished "git branch -D local" &&
		(
			cd testrepo &&
			git checkout local &&
			git reset --hard $the_first_commit
		) &&
		test_config remote.there.url testrepo &&
		test_config remote.there.push $head &&
		test_config branch.main.remote there &&
		git push &&
		check_push_result testrepo $the_commit heads/main &&
		check_push_result testrepo $the_first_commit heads/local
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> local
notice: HEAD points to an unborn branch (main)
Already on 'main'
Switched to branch 'local'
HEAD is now at b9c09d6 repo
To testrepo
 * [new branch]      HEAD -> main
Deleted branch local (was 9ad36e1).
ok 43 - push with config remote.*.push = @

expecting success of 5516.44 'push to remote with no explicit refspec and config remote.*.push = src:dest': 
	mk_test testrepo heads/main &&
	git checkout $the_first_commit &&
	test_config remote.there.url testrepo &&
	test_config remote.there.push refs/heads/main:refs/heads/main &&
	git push there &&
	check_push_result testrepo $the_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Note: switching to 'b9c09d6cc74d3857142fb7c082dca65b88254c6d'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b9c09d6 repo
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 44 - push to remote with no explicit refspec and config remote.*.push = src:dest

expecting success of 5516.45 'push with remote.pushdefault': 
	mk_test up_repo heads/main &&
	mk_test down_repo heads/main &&
	test_config remote.up.url up_repo &&
	test_config remote.down.url down_repo &&
	test_config branch.main.remote up &&
	test_config remote.pushdefault down &&
	test_config push.default matching &&
	git push &&
	check_push_result up_repo $the_first_commit heads/main &&
	check_push_result down_repo $the_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/up_repo/.git/
remote: warning: updating the current branch        
To up_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/down_repo/.git/
remote: warning: updating the current branch        
To down_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To down_repo
   b9c09d6..9ad36e1  main -> main
ok 45 - push with remote.pushdefault

expecting success of 5516.46 'push with config remote.*.pushurl': 

	mk_test testrepo heads/main &&
	git checkout main &&
	test_config remote.there.url test2repo &&
	test_config remote.there.pushurl testrepo &&
	git push there : &&
	check_push_result testrepo $the_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Previous HEAD position was b9c09d6 repo
Switched to branch 'main'
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 46 - push with config remote.*.pushurl

expecting success of 5516.47 'push with config branch.*.pushremote': 
	mk_test up_repo heads/main &&
	mk_test side_repo heads/main &&
	mk_test down_repo heads/main &&
	test_config remote.up.url up_repo &&
	test_config remote.pushdefault side_repo &&
	test_config remote.down.url down_repo &&
	test_config branch.main.remote up &&
	test_config branch.main.pushremote down &&
	test_config push.default matching &&
	git push &&
	check_push_result up_repo $the_first_commit heads/main &&
	check_push_result side_repo $the_first_commit heads/main &&
	check_push_result down_repo $the_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/up_repo/.git/
remote: warning: updating the current branch        
To up_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/side_repo/.git/
remote: warning: updating the current branch        
To side_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/down_repo/.git/
remote: warning: updating the current branch        
To down_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To down_repo
   b9c09d6..9ad36e1  main -> main
ok 47 - push with config branch.*.pushremote

expecting success of 5516.48 'branch.*.pushremote config order is irrelevant': 
	mk_test one_repo heads/main &&
	mk_test two_repo heads/main &&
	test_config remote.one.url one_repo &&
	test_config remote.two.url two_repo &&
	test_config branch.main.pushremote two_repo &&
	test_config remote.pushdefault one_repo &&
	test_config push.default matching &&
	git push &&
	check_push_result one_repo $the_first_commit heads/main &&
	check_push_result two_repo $the_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/one_repo/.git/
remote: warning: updating the current branch        
To one_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/two_repo/.git/
remote: warning: updating the current branch        
To two_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To two_repo
   b9c09d6..9ad36e1  main -> main
ok 48 - branch.*.pushremote config order is irrelevant

expecting success of 5516.49 'push rejects empty branch name entries': 
	mk_test one_repo heads/main &&
	test_config remote.one.url one_repo &&
	test_config branch..remote one &&
	test_config branch..merge refs/heads/ &&
	test_config branch.main.remote one &&
	test_config branch.main.merge refs/heads/main &&
	test_must_fail git push 2>err &&
	grep "bad config variable .branch\.\." err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/one_repo/.git/
remote: warning: updating the current branch        
To one_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
fatal: bad config variable 'branch..remote' in file '.git/config' at line 12
ok 49 - push rejects empty branch name entries

expecting success of 5516.50 'push ignores "branch." config without subsection': 
	mk_test one_repo heads/main &&
	test_config remote.one.url one_repo &&
	test_config branch.autoSetupMerge true &&
	test_config branch.main.remote one &&
	test_config branch.main.merge refs/heads/main &&
	git push

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/one_repo/.git/
remote: warning: updating the current branch        
To one_repo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
To one_repo
   b9c09d6..9ad36e1  main -> main
ok 50 - push ignores "branch." config without subsection

expecting success of 5516.51 'push with dry-run': 

	mk_test testrepo heads/main &&
	old_commit=$(git -C testrepo show-ref -s --verify refs/heads/main) &&
	git push --dry-run testrepo : &&
	check_push_result testrepo $old_commit heads/main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
   b9c09d6..9ad36e1  main -> main
ok 51 - push with dry-run

expecting success of 5516.52 'push updates local refs': 

	mk_test testrepo heads/main &&
	mk_child testrepo child &&
	(
		cd child &&
		git pull .. main &&
		git push &&
		test $(git rev-parse main) = \
			$(git rev-parse remotes/origin/main)
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child'...
done.
From ..
 * branch            main       -> FETCH_HEAD
Updating b9c09d6..9ad36e1
Fast-forward
 path2 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
remote: warning: updating the current branch        
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
   b9c09d6..9ad36e1  main -> main
ok 52 - push updates local refs

expecting success of 5516.53 'push updates up-to-date local refs': 

	mk_test testrepo heads/main &&
	mk_child testrepo child1 &&
	mk_child testrepo child2 &&
	(cd child1 && git pull .. main && git push) &&
	(
		cd child2 &&
		git pull ../child1 main &&
		git push &&
		test $(git rev-parse main) = \
			$(git rev-parse remotes/origin/main)
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
From ..
 * branch            main       -> FETCH_HEAD
Updating b9c09d6..9ad36e1
Fast-forward
 path2 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
remote: warning: updating the current branch        
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
   b9c09d6..9ad36e1  main -> main
From ../child1
 * branch            main       -> FETCH_HEAD
Updating b9c09d6..9ad36e1
Fast-forward
 path2 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
Everything up-to-date
ok 53 - push updates up-to-date local refs

expecting success of 5516.54 'push preserves up-to-date packed refs': 

	mk_test testrepo heads/main &&
	mk_child testrepo child &&
	(
		cd child &&
		git push &&
		! test -f .git/refs/remotes/origin/main
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child'...
done.
Everything up-to-date
ok 54 - push preserves up-to-date packed refs

expecting success of 5516.55 'push does not update local refs on failure': 

	mk_test testrepo heads/main &&
	mk_child testrepo child &&
	echo "#!/no/frobnication/today" >testrepo/.git/hooks/pre-receive &&
	chmod +x testrepo/.git/hooks/pre-receive &&
	(
		cd child &&
		git pull .. main &&
		test_must_fail git push &&
		test $(git rev-parse main) != \
			$(git rev-parse remotes/origin/main)
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child'...
done.
From ..
 * branch            main       -> FETCH_HEAD
Updating b9c09d6..9ad36e1
Fast-forward
 path2 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
fatal: cannot run hooks/pre-receive: No such file or directory
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo'
ok 55 - push does not update local refs on failure

expecting success of 5516.56 'allow deleting an invalid remote ref': 

	mk_test testrepo heads/branch &&
	rm -f testrepo/.git/objects/??/* &&
	git push testrepo :refs/heads/branch &&
	(cd testrepo && test_must_fail git rev-parse --verify refs/heads/branch)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> branch
notice: HEAD points to an unborn branch (main)
remote: warning: allowing deletion of corrupt ref        
To testrepo
 - [deleted]         branch
fatal: Needed a single revision
ok 56 - allow deleting an invalid remote ref

expecting success of 5516.57 'pushing valid refs triggers post-receive and post-update hooks': 
	mk_test_with_hooks testrepo heads/main heads/next &&
	orgmain=$(cd testrepo && git show-ref -s --verify refs/heads/main) &&
	newmain=$(git show-ref -s --verify refs/heads/main) &&
	orgnext=$(cd testrepo && git show-ref -s --verify refs/heads/next) &&
	newnext=$ZERO_OID &&
	git push testrepo refs/heads/main:refs/heads/main :refs/heads/next &&
	(
		cd testrepo/.git &&
		cat >pre-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		$orgnext $newnext refs/heads/next
		EOF

		cat >update.expect <<-EOF &&
		refs/heads/main $orgmain $newmain
		refs/heads/next $orgnext $newnext
		EOF

		cat >post-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		$orgnext $newnext refs/heads/next
		EOF

		cat >post-update.expect <<-EOF &&
		refs/heads/main
		refs/heads/next
		EOF

		test_cmp pre-receive.expect pre-receive.actual &&
		test_cmp update.expect update.actual &&
		test_cmp post-receive.expect post-receive.actual &&
		test_cmp post-update.expect post-update.actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> next
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
 - [deleted]         next
ok 57 - pushing valid refs triggers post-receive and post-update hooks

expecting success of 5516.58 'deleting dangling ref triggers hooks with correct args': 
	mk_test_with_hooks testrepo heads/branch &&
	orig=$(git -C testrepo rev-parse refs/heads/branch) &&
	rm -f testrepo/.git/objects/??/* &&
	git push testrepo :refs/heads/branch &&
	(
		cd testrepo/.git &&
		cat >pre-receive.expect <<-EOF &&
		$orig $ZERO_OID refs/heads/branch
		EOF

		cat >update.expect <<-EOF &&
		refs/heads/branch $orig $ZERO_OID
		EOF

		cat >post-receive.expect <<-EOF &&
		$orig $ZERO_OID refs/heads/branch
		EOF

		cat >post-update.expect <<-EOF &&
		refs/heads/branch
		EOF

		test_cmp pre-receive.expect pre-receive.actual &&
		test_cmp update.expect update.actual &&
		test_cmp post-receive.expect post-receive.actual &&
		test_cmp post-update.expect post-update.actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> branch
notice: HEAD points to an unborn branch (main)
remote: warning: allowing deletion of corrupt ref        
To testrepo
 - [deleted]         branch
ok 58 - deleting dangling ref triggers hooks with correct args

expecting success of 5516.59 'deletion of a non-existent ref is not fed to post-receive and post-update hooks': 
	mk_test_with_hooks testrepo heads/main &&
	orgmain=$(cd testrepo && git show-ref -s --verify refs/heads/main) &&
	newmain=$(git show-ref -s --verify refs/heads/main) &&
	git push testrepo main :refs/heads/nonexistent &&
	(
		cd testrepo/.git &&
		cat >pre-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		$ZERO_OID $ZERO_OID refs/heads/nonexistent
		EOF

		cat >update.expect <<-EOF &&
		refs/heads/main $orgmain $newmain
		refs/heads/nonexistent $ZERO_OID $ZERO_OID
		EOF

		cat >post-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		EOF

		cat >post-update.expect <<-EOF &&
		refs/heads/main
		EOF

		test_cmp pre-receive.expect pre-receive.actual &&
		test_cmp update.expect update.actual &&
		test_cmp post-receive.expect post-receive.actual &&
		test_cmp post-update.expect post-update.actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
remote: warning: deleting a non-existent ref        
To testrepo
   b9c09d6..9ad36e1  main -> main
 - [deleted]         nonexistent
ok 59 - deletion of a non-existent ref is not fed to post-receive and post-update hooks

expecting success of 5516.60 'deletion of a non-existent ref alone does trigger post-receive and post-update hooks': 
	mk_test_with_hooks testrepo heads/main &&
	git push testrepo :refs/heads/nonexistent &&
	(
		cd testrepo/.git &&
		cat >pre-receive.expect <<-EOF &&
		$ZERO_OID $ZERO_OID refs/heads/nonexistent
		EOF

		cat >update.expect <<-EOF &&
		refs/heads/nonexistent $ZERO_OID $ZERO_OID
		EOF

		test_cmp pre-receive.expect pre-receive.actual &&
		test_cmp update.expect update.actual &&
		test_path_is_missing post-receive.actual &&
		test_path_is_missing post-update.actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: deleting a non-existent ref        
To testrepo
 - [deleted]         nonexistent
ok 60 - deletion of a non-existent ref alone does trigger post-receive and post-update hooks

expecting success of 5516.61 'mixed ref updates, deletes, invalid deletes trigger hooks with correct input': 
	mk_test_with_hooks testrepo heads/main heads/next heads/seen &&
	orgmain=$(cd testrepo && git show-ref -s --verify refs/heads/main) &&
	newmain=$(git show-ref -s --verify refs/heads/main) &&
	orgnext=$(cd testrepo && git show-ref -s --verify refs/heads/next) &&
	newnext=$ZERO_OID &&
	orgseen=$(cd testrepo && git show-ref -s --verify refs/heads/seen) &&
	newseen=$(git show-ref -s --verify refs/heads/main) &&
	git push testrepo refs/heads/main:refs/heads/main \
	    refs/heads/main:refs/heads/seen :refs/heads/next \
	    :refs/heads/nonexistent &&
	(
		cd testrepo/.git &&
		cat >pre-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		$orgnext $newnext refs/heads/next
		$orgseen $newseen refs/heads/seen
		$ZERO_OID $ZERO_OID refs/heads/nonexistent
		EOF

		cat >update.expect <<-EOF &&
		refs/heads/main $orgmain $newmain
		refs/heads/next $orgnext $newnext
		refs/heads/seen $orgseen $newseen
		refs/heads/nonexistent $ZERO_OID $ZERO_OID
		EOF

		cat >post-receive.expect <<-EOF &&
		$orgmain $newmain refs/heads/main
		$orgnext $newnext refs/heads/next
		$orgseen $newseen refs/heads/seen
		EOF

		cat >post-update.expect <<-EOF &&
		refs/heads/main
		refs/heads/next
		refs/heads/seen
		EOF

		test_cmp pre-receive.expect pre-receive.actual &&
		test_cmp update.expect update.actual &&
		test_cmp post-receive.expect post-receive.actual &&
		test_cmp post-update.expect post-update.actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> next
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> seen
remote: warning: updating the current branch        
remote: warning: deleting a non-existent ref        
To testrepo
   b9c09d6..9ad36e1  main -> main
 - [deleted]         next
   b9c09d6..9ad36e1  main -> seen
 - [deleted]         nonexistent
ok 61 - mixed ref updates, deletes, invalid deletes trigger hooks with correct input

expecting success of 5516.62 'allow deleting a ref using --delete': 
	mk_test testrepo heads/main &&
	(cd testrepo && git config receive.denyDeleteCurrent warn) &&
	git push testrepo --delete main &&
	(cd testrepo && test_must_fail git rev-parse --verify refs/heads/main)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
remote: warning: updating the current branch        
remote: warning: deleting the current branch        
To testrepo
 - [deleted]         main
fatal: Needed a single revision
ok 62 - allow deleting a ref using --delete

expecting success of 5516.63 'allow deleting a tag using --delete': 
	mk_test testrepo heads/main &&
	git tag -a -m dummy_message deltag heads/main &&
	git push testrepo --tags &&
	(cd testrepo && git rev-parse --verify -q refs/tags/deltag) &&
	git push testrepo --delete tag deltag &&
	(cd testrepo && test_must_fail git rev-parse --verify refs/tags/deltag)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new tag]         deltag -> deltag
 * [new tag]         frotz -> frotz
 * [new tag]         v1.0 -> v1.0
7bbc2bd37a7570491d071ea0fdc2120c9eed7718
To testrepo
 - [deleted]         deltag
fatal: Needed a single revision
ok 63 - allow deleting a tag using --delete

expecting success of 5516.64 'push --delete without args aborts': 
	mk_test testrepo heads/main &&
	test_must_fail git push testrepo --delete

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
fatal: --delete doesn't make sense without any refs
ok 64 - push --delete without args aborts

expecting success of 5516.65 'push --delete refuses src:dest refspecs': 
	mk_test testrepo heads/main &&
	test_must_fail git push testrepo --delete main:foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
fatal: --delete only accepts plain target ref names
ok 65 - push --delete refuses src:dest refspecs

expecting success of 5516.66 'push --delete refuses empty string': 
	mk_test testrepo heads/master &&
	test_must_fail git push testrepo --delete ""

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> master
notice: HEAD points to an unborn branch (main)
fatal: --delete only accepts plain target ref names
ok 66 - push --delete refuses empty string

expecting success of 5516.67 'warn on push to HEAD of non-bare repository': 
	mk_test testrepo heads/main &&
	(
		cd testrepo &&
		git checkout main &&
		git config receive.denyCurrentBranch warn
	) &&
	git push testrepo main 2>stderr &&
	grep "warning: updating the current branch" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
remote: warning: updating the current branch        
ok 67 - warn on push to HEAD of non-bare repository

expecting success of 5516.68 'deny push to HEAD of non-bare repository': 
	mk_test testrepo heads/main &&
	(
		cd testrepo &&
		git checkout main &&
		git config receive.denyCurrentBranch true
	) &&
	test_must_fail git push testrepo main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
remote: error: refusing to update checked out branch: refs/heads/main        
To testrepo
 ! [remote rejected] main -> main (branch is currently checked out)
error: failed to push some refs to 'testrepo'
ok 68 - deny push to HEAD of non-bare repository

expecting success of 5516.69 'allow push to HEAD of bare repository (bare)': 
	mk_test testrepo heads/main &&
	(
		cd testrepo &&
		git checkout main &&
		git config receive.denyCurrentBranch true &&
		git config core.bare true
	) &&
	git push testrepo main 2>stderr &&
	! grep "warning: updating the current branch" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
ok 69 - allow push to HEAD of bare repository (bare)

expecting success of 5516.70 'allow push to HEAD of non-bare repository (config)': 
	mk_test testrepo heads/main &&
	(
		cd testrepo &&
		git checkout main &&
		git config receive.denyCurrentBranch false
	) &&
	git push testrepo main 2>stderr &&
	! grep "warning: updating the current branch" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
ok 70 - allow push to HEAD of non-bare repository (config)

expecting success of 5516.71 'fetch with branches': 
	mk_empty testrepo &&
	git branch second $the_first_commit &&
	git checkout second &&
	mkdir testrepo/.git/branches &&
	echo ".." > testrepo/.git/branches/branch1 &&
	(
		cd testrepo &&
		git fetch branch1 &&
		echo "$the_commit commit	refs/heads/branch1" >expect &&
		git for-each-ref refs/heads >actual &&
		test_cmp expect actual
	) &&
	git checkout main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
Switched to branch 'second'
From ..
 * [new branch]      main       -> branch1
 * [new tag]         deltag     -> deltag
 * [new tag]         frotz      -> frotz
 * [new tag]         v1.0       -> v1.0
Switched to branch 'main'
ok 71 - fetch with branches

expecting success of 5516.72 'fetch with branches containing #': 
	mk_empty testrepo &&
	mkdir testrepo/.git/branches &&
	echo "..#second" > testrepo/.git/branches/branch2 &&
	(
		cd testrepo &&
		git fetch branch2 &&
		echo "$the_first_commit commit	refs/heads/branch2" >expect &&
		git for-each-ref refs/heads >actual &&
		test_cmp expect actual
	) &&
	git checkout main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From ..
 * [new branch]      second     -> branch2
Already on 'main'
ok 72 - fetch with branches containing #

expecting success of 5516.73 'push with branches': 
	mk_empty testrepo &&
	git checkout second &&

	test_when_finished "rm -rf .git/branches" &&
	mkdir .git/branches &&
	echo "testrepo" > .git/branches/branch1 &&

	git push branch1 &&
	(
		cd testrepo &&
		echo "$the_first_commit commit	refs/heads/main" >expect &&
		git for-each-ref refs/heads >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
Switched to branch 'second'
remote: warning: updating the current branch        
To testrepo
 * [new branch]      HEAD -> main
ok 73 - push with branches

expecting success of 5516.74 'push with branches containing #': 
	mk_empty testrepo &&

	test_when_finished "rm -rf .git/branches" &&
	mkdir .git/branches &&
	echo "testrepo#branch3" > .git/branches/branch2 &&

	git push branch2 &&
	(
		cd testrepo &&
		echo "$the_first_commit commit	refs/heads/branch3" >expect &&
		git for-each-ref refs/heads >actual &&
		test_cmp expect actual
	) &&
	git checkout main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new branch]      HEAD -> branch3
Switched to branch 'main'
ok 74 - push with branches containing #

expecting success of 5516.75 'push into aliased refs (consistent)': 
	mk_test testrepo heads/main &&
	mk_child testrepo child1 &&
	mk_child testrepo child2 &&
	(
		cd child1 &&
		git branch foo &&
		git symbolic-ref refs/heads/bar refs/heads/foo &&
		git config receive.denyCurrentBranch false
	) &&
	(
		cd child2 &&
		>path2 &&
		git add path2 &&
		test_tick &&
		git commit -a -m child2 &&
		git branch foo &&
		git branch bar &&
		git push ../child1 foo bar
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
[main aee3f74] child2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
To ../child1
   b9c09d6..aee3f74  bar -> bar
   b9c09d6..aee3f74  foo -> foo
ok 75 - push into aliased refs (consistent)

expecting success of 5516.76 'push into aliased refs (inconsistent)': 
	mk_test testrepo heads/main &&
	mk_child testrepo child1 &&
	mk_child testrepo child2 &&
	(
		cd child1 &&
		git branch foo &&
		git symbolic-ref refs/heads/bar refs/heads/foo &&
		git config receive.denyCurrentBranch false
	) &&
	(
		cd child2 &&
		>path2 &&
		git add path2 &&
		test_tick &&
		git commit -a -m child2 &&
		git branch foo &&
		>path3 &&
		git add path3 &&
		test_tick &&
		git commit -a -m child2 &&
		git branch bar &&
		test_must_fail git push ../child1 foo bar 2>stderr &&
		grep "refusing inconsistent update" stderr
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
[main aee3f74] child2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path2
[main a725715] child2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 path3
remote: error: refusing inconsistent update between symref 'refs/heads/bar' (b9c09d6..a725715) and its target 'refs/heads/foo' (b9c09d6..aee3f74)        
ok 76 - push into aliased refs (inconsistent)

expecting success of 5516.77 'force pushing required to update lightweight tag': 
		mk_test testrepo heads/main &&
		mk_child testrepo child1 &&
		mk_child testrepo child2 &&
		(
			cd child1 &&
			git tag testTag &&
			git push ../child2 testTag &&
			>file1 &&
			git add file1 &&
			git commit -m 'file1' &&
			git tag -f testTag &&
			test_must_fail git push ../child2 testTag &&
			git push --force ../child2 testTag &&
			git tag -f testTag HEAD~ &&
			test_must_fail git push ../child2 testTag &&
			git push --force ../child2 testTag &&

			# Clobbering without + in refspec needs --force
			git tag -f testTag &&
			test_must_fail git push ../child2 'refs/tags/*:refs/tags/*' &&
			git push --force ../child2 'refs/tags/*:refs/tags/*' &&

			# Clobbering with + in refspec does not need --force
			git tag -f testTag HEAD~ &&
			git push ../child2 '+refs/tags/*:refs/tags/*' &&

			# Clobbering with --no-force still obeys + in refspec
			git tag -f testTag &&
			git push --no-force ../child2 '+refs/tags/*:refs/tags/*' &&

			# Clobbering with/without --force and 'tag <name>' format
			git tag -f testTag HEAD~ &&
			test_must_fail git push ../child2 tag testTag &&
			git push --force ../child2 tag testTag
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
To ../child2
 * [new tag]         testTag -> testTag
[main 679dfc1] file1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
Updated tag 'testTag' (was b9c09d6)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + b9c09d6...679dfc1 testTag -> testTag (forced update)
Updated tag 'testTag' (was 679dfc1)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + 679dfc1...b9c09d6 testTag -> testTag (forced update)
Updated tag 'testTag' (was b9c09d6)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + b9c09d6...679dfc1 testTag -> testTag (forced update)
Updated tag 'testTag' (was 679dfc1)
To ../child2
 + 679dfc1...b9c09d6 testTag -> testTag (forced update)
Updated tag 'testTag' (was b9c09d6)
To ../child2
 + b9c09d6...679dfc1 testTag -> testTag (forced update)
Updated tag 'testTag' (was 679dfc1)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + 679dfc1...b9c09d6 testTag -> testTag (forced update)
ok 77 - force pushing required to update lightweight tag

expecting success of 5516.78 'force pushing required to update annotated tag': 
		mk_test testrepo heads/main &&
		mk_child testrepo child1 &&
		mk_child testrepo child2 &&
		(
			cd child1 &&
			git tag testTag &&
			git push ../child2 testTag &&
			>file1 &&
			git add file1 &&
			git commit -m 'file1' &&
			git tag -f -a -m'tag message' testTag &&
			test_must_fail git push ../child2 testTag &&
			git push --force ../child2 testTag &&
			git tag -f -a -m'tag message' testTag HEAD~ &&
			test_must_fail git push ../child2 testTag &&
			git push --force ../child2 testTag &&

			# Clobbering without + in refspec needs --force
			git tag -f testTag &&
			test_must_fail git push ../child2 'refs/tags/*:refs/tags/*' &&
			git push --force ../child2 'refs/tags/*:refs/tags/*' &&

			# Clobbering with + in refspec does not need --force
			git tag -f testTag HEAD~ &&
			git push ../child2 '+refs/tags/*:refs/tags/*' &&

			# Clobbering with --no-force still obeys + in refspec
			git tag -f testTag &&
			git push --no-force ../child2 '+refs/tags/*:refs/tags/*' &&

			# Clobbering with/without --force and 'tag <name>' format
			git tag -f testTag HEAD~ &&
			test_must_fail git push ../child2 tag testTag &&
			git push --force ../child2 tag testTag
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
To ../child2
 * [new tag]         testTag -> testTag
[main 679dfc1] file1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
Updated tag 'testTag' (was b9c09d6)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + b9c09d6...18e054b testTag -> testTag (forced update)
Updated tag 'testTag' (was 18e054b)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + 18e054b...4655ebe testTag -> testTag (forced update)
Updated tag 'testTag' (was 4655ebe)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + 4655ebe...679dfc1 testTag -> testTag (forced update)
Updated tag 'testTag' (was 679dfc1)
To ../child2
 + 679dfc1...b9c09d6 testTag -> testTag (forced update)
Updated tag 'testTag' (was b9c09d6)
To ../child2
 + b9c09d6...679dfc1 testTag -> testTag (forced update)
Updated tag 'testTag' (was 679dfc1)
To ../child2
 ! [rejected]        testTag -> testTag (already exists)
error: failed to push some refs to '../child2'
hint: Updates were rejected because the tag already exists in the remote.
To ../child2
 + 679dfc1...b9c09d6 testTag -> testTag (forced update)
ok 78 - force pushing required to update annotated tag

expecting success of 5516.79 'fetch will not clobber an existing lightweight tag without --force': 
		mk_test testrepo heads/main &&
		mk_child testrepo child1 &&
		mk_child testrepo child2 &&
		(
			cd testrepo &&
			git tag testTag &&
			git -C ../child1 fetch origin tag testTag &&
			>file1 &&
			git add file1 &&
			git commit -m 'file1' &&
			git tag -f testTag &&
			test_must_fail git -C ../child1 fetch origin tag testTag &&
			git -C ../child1 fetch origin '+refs/tags/*:refs/tags/*'
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 * [new tag]         testTag    -> testTag
[main 9770895] file1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename path1 => file1 (100%)
Updated tag 'testTag' (was b9c09d6)
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 ! [rejected]        testTag    -> testTag  (would clobber existing tag)
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 t [tag update]      testTag    -> testTag
ok 79 - fetch will not clobber an existing lightweight tag without --force

expecting success of 5516.80 'fetch will not clobber an existing annotated tag without --force': 
		mk_test testrepo heads/main &&
		mk_child testrepo child1 &&
		mk_child testrepo child2 &&
		(
			cd testrepo &&
			git tag testTag &&
			git -C ../child1 fetch origin tag testTag &&
			>file1 &&
			git add file1 &&
			git commit -m 'file1' &&
			git tag -f -a -m'tag message' testTag &&
			test_must_fail git -C ../child1 fetch origin tag testTag &&
			git -C ../child1 fetch origin '+refs/tags/*:refs/tags/*'
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Cloning into 'child1'...
done.
Cloning into 'child2'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 * [new tag]         testTag    -> testTag
[main 9770895] file1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename path1 => file1 (100%)
Updated tag 'testTag' (was b9c09d6)
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 ! [rejected]        testTag    -> testTag  (would clobber existing tag)
From /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo
 t [tag update]      testTag    -> testTag
ok 80 - fetch will not clobber an existing annotated tag without --force

expecting success of 5516.81 'push --porcelain': 
	mk_empty testrepo &&
	echo >.git/foo  "To testrepo" &&
	echo >>.git/foo "*	refs/heads/main:refs/remotes/origin/main	[new reference]"  &&
	echo >>.git/foo "Done" &&
	git push >.git/bar --porcelain  testrepo refs/heads/main:refs/remotes/origin/main &&
	(
		cd testrepo &&
		echo "$the_commit commit	refs/remotes/origin/main" >expect &&
		git for-each-ref refs/remotes/origin >actual &&
		test_cmp expect actual
	) &&
	test_cmp .git/foo .git/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
ok 81 - push --porcelain

expecting success of 5516.82 'push --porcelain bad url': 
	mk_empty testrepo &&
	test_must_fail git push >.git/bar --porcelain asdfasdfasd refs/heads/main:refs/remotes/origin/main &&
	! grep -q Done .git/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
fatal: 'asdfasdfasd' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 82 - push --porcelain bad url

expecting success of 5516.83 'push --porcelain rejected': 
	mk_empty testrepo &&
	git push testrepo refs/heads/main:refs/remotes/origin/main &&
	(cd testrepo &&
		git reset --hard origin/main^ &&
		git config receive.denyCurrentBranch true) &&

	echo >.git/foo  "To testrepo"  &&
	echo >>.git/foo "!	refs/heads/main:refs/heads/main	[remote rejected] (branch is currently checked out)" &&
	echo >>.git/foo "Done" &&

	test_must_fail git push >.git/bar --porcelain  testrepo refs/heads/main:refs/heads/main &&
	test_cmp .git/foo .git/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   main -> origin/main
HEAD is now at b9c09d6 repo
remote: error: refusing to update checked out branch: refs/heads/main        
error: failed to push some refs to 'testrepo'
ok 83 - push --porcelain rejected

expecting success of 5516.84 'push --porcelain --dry-run rejected': 
	mk_empty testrepo &&
	git push testrepo refs/heads/main:refs/remotes/origin/main &&
	(cd testrepo &&
		git reset --hard origin/main &&
		git config receive.denyCurrentBranch true) &&

	echo >.git/foo  "To testrepo"  &&
	echo >>.git/foo "!	refs/heads/main^:refs/heads/main	[rejected] (non-fast-forward)" &&
	echo >>.git/foo "Done" &&

	test_must_fail git push >.git/bar --porcelain  --dry-run testrepo refs/heads/main^:refs/heads/main &&
	test_cmp .git/foo .git/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   main -> origin/main
HEAD is now at 9ad36e1 second
error: failed to push some refs to 'testrepo'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ok 84 - push --porcelain --dry-run rejected

expecting success of 5516.85 'push --prune': 
	mk_test testrepo heads/main heads/second heads/foo heads/bar &&
	git push --prune testrepo : &&
	check_push_result testrepo $the_commit heads/main &&
	check_push_result testrepo $the_first_commit heads/second &&
	! check_push_result testrepo $the_first_commit heads/foo heads/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> second
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> foo
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> bar
remote: warning: updating the current branch        
To testrepo
 - [deleted]         bar
 - [deleted]         foo
   b9c09d6..9ad36e1  main -> main
fatal: 'refs/heads/foo' - not a valid ref
ok 85 - push --prune

expecting success of 5516.86 'push --prune refspec': 
	mk_test testrepo tmp/main tmp/second tmp/foo tmp/bar &&
	git push --prune testrepo "refs/heads/*:refs/tmp/*" &&
	check_push_result testrepo $the_commit tmp/main &&
	check_push_result testrepo $the_first_commit tmp/second &&
	! check_push_result testrepo $the_first_commit tmp/foo tmp/bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/tmp/main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/tmp/second
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/tmp/foo
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/tmp/bar
notice: HEAD points to an unborn branch (main)
To testrepo
 - [deleted]         refs/tmp/bar
 - [deleted]         refs/tmp/foo
   b9c09d6..9ad36e1  main -> refs/tmp/main
 * [new reference]   branch1 -> refs/tmp/branch1
 * [new reference]   branch2 -> refs/tmp/branch2
 * [new reference]   t/main -> refs/tmp/t/main
notice: HEAD points to an unborn branch (main)
notice: HEAD points to an unborn branch (main)
fatal: 'refs/tmp/foo' - not a valid ref
ok 86 - push --prune refspec

expecting success of 5516.87 'push to update a ref hidden by transfer.hiderefs': 
		mk_test testrepo heads/main hidden/one hidden/two hidden/three &&
		(
			cd testrepo &&
			git config $configsection.hiderefs refs/hidden
		) &&

		# push to unhidden ref succeeds normally
		git push testrepo main:refs/heads/main &&
		check_push_result testrepo $the_commit heads/main &&

		# push to update a hidden ref should fail
		test_must_fail git push testrepo main:refs/hidden/one &&
		check_push_result testrepo $the_first_commit hidden/one &&

		# push to delete a hidden ref should fail
		test_must_fail git push testrepo :refs/hidden/two &&
		check_push_result testrepo $the_first_commit hidden/two &&

		# idempotent push to update a hidden ref should fail
		test_must_fail git push testrepo $the_first_commit:refs/hidden/three &&
		check_push_result testrepo $the_first_commit hidden/three
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/one
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/two
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/three
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
To testrepo
 ! [remote rejected] main -> refs/hidden/one (deny updating a hidden ref)
error: failed to push some refs to 'testrepo'
To testrepo
 ! [remote rejected] refs/hidden/two (deny deleting a hidden ref)
error: failed to push some refs to 'testrepo'
To testrepo
 ! [remote rejected] b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/three (deny updating a hidden ref)
error: failed to push some refs to 'testrepo'
ok 87 - push to update a ref hidden by transfer.hiderefs

expecting success of 5516.88 'push to update a ref hidden by receive.hiderefs': 
		mk_test testrepo heads/main hidden/one hidden/two hidden/three &&
		(
			cd testrepo &&
			git config $configsection.hiderefs refs/hidden
		) &&

		# push to unhidden ref succeeds normally
		git push testrepo main:refs/heads/main &&
		check_push_result testrepo $the_commit heads/main &&

		# push to update a hidden ref should fail
		test_must_fail git push testrepo main:refs/hidden/one &&
		check_push_result testrepo $the_first_commit hidden/one &&

		# push to delete a hidden ref should fail
		test_must_fail git push testrepo :refs/hidden/two &&
		check_push_result testrepo $the_first_commit hidden/two &&

		# idempotent push to update a hidden ref should fail
		test_must_fail git push testrepo $the_first_commit:refs/hidden/three &&
		check_push_result testrepo $the_first_commit hidden/three
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/one
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/two
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/three
remote: warning: updating the current branch        
To testrepo
   b9c09d6..9ad36e1  main -> main
To testrepo
 ! [remote rejected] main -> refs/hidden/one (deny updating a hidden ref)
error: failed to push some refs to 'testrepo'
To testrepo
 ! [remote rejected] refs/hidden/two (deny deleting a hidden ref)
error: failed to push some refs to 'testrepo'
To testrepo
 ! [remote rejected] b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/three (deny updating a hidden ref)
error: failed to push some refs to 'testrepo'
ok 88 - push to update a ref hidden by receive.hiderefs

expecting success of 5516.89 'fetch exact SHA1': 
	mk_test testrepo heads/main hidden/one &&
	git push testrepo main:refs/hidden/one &&
	(
		cd testrepo &&
		git config transfer.hiderefs refs/hidden
	) &&
	check_push_result testrepo $the_commit hidden/one &&

	mk_child testrepo child &&
	(
		cd child &&

		# make sure $the_commit does not exist here
		git repack -a -d &&
		git prune &&
		test_must_fail git cat-file -t $the_commit &&

		# Some protocol versions (e.g. 2) support fetching
		# unadvertised objects, so restrict this test to v0.

		# fetching the hidden object should fail by default
		test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
			git fetch -v ../testrepo $the_commit:refs/heads/copy 2>err &&
		test_i18ngrep "Server does not allow request for unadvertised object" err &&
		test_must_fail git rev-parse --verify refs/heads/copy &&

		# the server side can allow it to succeed
		(
			cd ../testrepo &&
			git config uploadpack.allowtipsha1inwant true
		) &&

		git fetch -v ../testrepo $the_commit:refs/heads/copy main:refs/heads/extra &&
		cat >expect <<-EOF &&
		$the_commit
		$the_first_commit
		EOF
		{
			git rev-parse --verify refs/heads/copy &&
			git rev-parse --verify refs/heads/extra
		} >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/one
To testrepo
   b9c09d6..9ad36e1  main -> refs/hidden/one
Cloning into 'child'...
done.
fatal: git cat-file: could not get object info
error: Server does not allow request for unadvertised object 9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f
fatal: Needed a single revision
From ../testrepo
 * [new ref]         9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f -> copy
 * [new branch]      main                                     -> extra
ok 89 - fetch exact SHA1

expecting success of 5516.90 'fetch exact SHA1 in protocol v2': 
	mk_test testrepo heads/main hidden/one &&
	git push testrepo main:refs/hidden/one &&
	git -C testrepo config transfer.hiderefs refs/hidden &&
	check_push_result testrepo $the_commit hidden/one &&

	mk_child testrepo child &&
	git -C child config protocol.version 2 &&

	# make sure $the_commit does not exist here
	git -C child repack -a -d &&
	git -C child prune &&
	test_must_fail git -C child cat-file -t $the_commit &&

	# fetching the hidden object succeeds by default
	# NEEDSWORK: should this match the v0 behavior instead?
	git -C child fetch -v ../testrepo $the_commit:refs/heads/copy

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
To testrepo
 * [new reference]   b9c09d6cc74d3857142fb7c082dca65b88254c6d -> refs/hidden/one
To testrepo
   b9c09d6..9ad36e1  main -> refs/hidden/one
Cloning into 'child'...
done.
fatal: git cat-file: could not get object info
From ../testrepo
 * [new ref]         9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f -> copy
ok 90 - fetch exact SHA1 in protocol v2

expecting success of 5516.91 'shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=true': 
		mk_empty testrepo &&
		(
			cd testrepo &&
			git config uploadpack.allowtipsha1inwant $configallowtipsha1inwant &&
			git commit --allow-empty -m foo &&
			git commit --allow-empty -m bar
		) &&
		SHA1=$(git --git-dir=testrepo/.git rev-parse HEAD^) &&
		mk_empty shallow &&
		(
			cd shallow &&
			# Some protocol versions (e.g. 2) support fetching
			# unadvertised objects, so restrict this test to v0.
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch --depth=1 ../testrepo/.git $SHA1 &&
			git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
			git fetch --depth=1 ../testrepo/.git $SHA1 &&
			git cat-file commit $SHA1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
[main (root-commit) 27a428a] foo
 Author: A U Thor <author@example.com>
[main 0722cdc] bar
 Author: A U Thor <author@example.com>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/shallow/.git/
fatal: remote error: upload-pack: not our ref 27a428ae90b537d8c39cbd2f79affd38be38d173
fatal: git upload-pack: not our ref 27a428ae90b537d8c39cbd2f79affd38be38d173
From ../testrepo/
 * branch            27a428ae90b537d8c39cbd2f79affd38be38d173 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
ok 91 - shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=true

expecting success of 5516.92 'deny fetch unreachable SHA1, allowtipsha1inwant=true': 
		mk_empty testrepo &&
		(
			cd testrepo &&
			git config uploadpack.allowtipsha1inwant $configallowtipsha1inwant &&
			git commit --allow-empty -m foo &&
			git commit --allow-empty -m bar &&
			git commit --allow-empty -m xyz
		) &&
		SHA1_1=$(git --git-dir=testrepo/.git rev-parse HEAD^^) &&
		SHA1_2=$(git --git-dir=testrepo/.git rev-parse HEAD^) &&
		SHA1_3=$(git --git-dir=testrepo/.git rev-parse HEAD) &&
		(
			cd testrepo &&
			git reset --hard $SHA1_2 &&
			git cat-file commit $SHA1_1 &&
			git cat-file commit $SHA1_3
		) &&
		mk_empty shallow &&
		(
			cd shallow &&
			# Some protocol versions (e.g. 2) support fetching
			# unadvertised objects, so restrict this test to v0.
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_3 &&
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_1 &&
			git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
			git fetch ../testrepo/.git $SHA1_1 &&
			git cat-file commit $SHA1_1 &&
			test_must_fail git cat-file commit $SHA1_2 &&
			git fetch ../testrepo/.git $SHA1_2 &&
			git cat-file commit $SHA1_2 &&
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_3 2>err &&
			# ideally we would insist this be on a "remote error:"
			# line, but it is racy; see the commit message
			test_i18ngrep "not our ref.*$SHA1_3\$" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
[main (root-commit) 27a428a] foo
 Author: A U Thor <author@example.com>
[main 0722cdc] bar
 Author: A U Thor <author@example.com>
[main 53e3aa4] xyz
 Author: A U Thor <author@example.com>
HEAD is now at 0722cdc bar
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 0722cdcaa8018927dc8055be38d3931723602b78
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

xyz
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/shallow/.git/
fatal: git upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
fatal: remote error: upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
fatal: remote error: upload-pack: not our ref 27a428ae90b537d8c39cbd2f79affd38be38d173
fatal: git upload-pack: not our ref 27a428ae90b537d8c39cbd2f79affd38be38d173
From ../testrepo/
 * branch            27a428ae90b537d8c39cbd2f79affd38be38d173 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
fatal: git cat-file 0722cdcaa8018927dc8055be38d3931723602b78: bad file
From ../testrepo/
 * branch            0722cdcaa8018927dc8055be38d3931723602b78 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 27a428ae90b537d8c39cbd2f79affd38be38d173
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

bar
fatal: git upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
fatal: remote error: upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
ok 92 - deny fetch unreachable SHA1, allowtipsha1inwant=true

expecting success of 5516.93 'shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=false': 
		mk_empty testrepo &&
		(
			cd testrepo &&
			git config uploadpack.allowtipsha1inwant $configallowtipsha1inwant &&
			git commit --allow-empty -m foo &&
			git commit --allow-empty -m bar
		) &&
		SHA1=$(git --git-dir=testrepo/.git rev-parse HEAD^) &&
		mk_empty shallow &&
		(
			cd shallow &&
			# Some protocol versions (e.g. 2) support fetching
			# unadvertised objects, so restrict this test to v0.
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch --depth=1 ../testrepo/.git $SHA1 &&
			git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
			git fetch --depth=1 ../testrepo/.git $SHA1 &&
			git cat-file commit $SHA1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
[main (root-commit) 27a428a] foo
 Author: A U Thor <author@example.com>
[main 0722cdc] bar
 Author: A U Thor <author@example.com>
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/shallow/.git/
error: Server does not allow request for unadvertised object 27a428ae90b537d8c39cbd2f79affd38be38d173
From ../testrepo/
 * branch            27a428ae90b537d8c39cbd2f79affd38be38d173 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
ok 93 - shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=false

expecting success of 5516.94 'deny fetch unreachable SHA1, allowtipsha1inwant=false': 
		mk_empty testrepo &&
		(
			cd testrepo &&
			git config uploadpack.allowtipsha1inwant $configallowtipsha1inwant &&
			git commit --allow-empty -m foo &&
			git commit --allow-empty -m bar &&
			git commit --allow-empty -m xyz
		) &&
		SHA1_1=$(git --git-dir=testrepo/.git rev-parse HEAD^^) &&
		SHA1_2=$(git --git-dir=testrepo/.git rev-parse HEAD^) &&
		SHA1_3=$(git --git-dir=testrepo/.git rev-parse HEAD) &&
		(
			cd testrepo &&
			git reset --hard $SHA1_2 &&
			git cat-file commit $SHA1_1 &&
			git cat-file commit $SHA1_3
		) &&
		mk_empty shallow &&
		(
			cd shallow &&
			# Some protocol versions (e.g. 2) support fetching
			# unadvertised objects, so restrict this test to v0.
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_3 &&
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_1 &&
			git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
			git fetch ../testrepo/.git $SHA1_1 &&
			git cat-file commit $SHA1_1 &&
			test_must_fail git cat-file commit $SHA1_2 &&
			git fetch ../testrepo/.git $SHA1_2 &&
			git cat-file commit $SHA1_2 &&
			test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
				git fetch ../testrepo/.git $SHA1_3 2>err &&
			# ideally we would insist this be on a "remote error:"
			# line, but it is racy; see the commit message
			test_i18ngrep "not our ref.*$SHA1_3\$" err
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
[main (root-commit) 27a428a] foo
 Author: A U Thor <author@example.com>
[main 0722cdc] bar
 Author: A U Thor <author@example.com>
[main 53e3aa4] xyz
 Author: A U Thor <author@example.com>
HEAD is now at 0722cdc bar
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 0722cdcaa8018927dc8055be38d3931723602b78
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

xyz
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/shallow/.git/
error: Server does not allow request for unadvertised object 53e3aa4356160fbed444579cbd52c3ecb9817950
error: Server does not allow request for unadvertised object 27a428ae90b537d8c39cbd2f79affd38be38d173
From ../testrepo/
 * branch            27a428ae90b537d8c39cbd2f79affd38be38d173 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

foo
fatal: git cat-file 0722cdcaa8018927dc8055be38d3931723602b78: bad file
From ../testrepo/
 * branch            0722cdcaa8018927dc8055be38d3931723602b78 -> FETCH_HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 27a428ae90b537d8c39cbd2f79affd38be38d173
author A U Thor <author@example.com> 1112912353 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

bar
fatal: git upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
fatal: remote error: upload-pack: not our ref 53e3aa4356160fbed444579cbd52c3ecb9817950
ok 94 - deny fetch unreachable SHA1, allowtipsha1inwant=false

expecting success of 5516.95 'fetch follows tags by default': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	(
		cd src &&
		git pull ../testrepo main &&
		git tag -m "annotated" tag &&
		git for-each-ref >tmp1 &&
		sed -n "p; s|refs/heads/main$|refs/remotes/origin/main|p" tmp1 |
		sort -k 3 >../expect
	) &&
	test_when_finished "rm -rf dst" &&
	git init dst &&
	(
		cd dst &&
		git remote add origin ../src &&
		git config branch.main.remote origin &&
		git config branch.main.merge refs/heads/main &&
		git pull &&
		git for-each-ref >../actual
	) &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
From ../testrepo
 * branch            main       -> FETCH_HEAD
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/.git/
From ../src
 * [new branch]      main       -> origin/main
 * [new tag]         tag        -> tag
ok 95 - fetch follows tags by default

expecting success of 5516.96 'peeled advertisements are not considered ref tips': 
	mk_empty testrepo &&
	git -C testrepo commit --allow-empty -m one &&
	git -C testrepo commit --allow-empty -m two &&
	git -C testrepo tag -m foo mytag HEAD^ &&
	oid=$(git -C testrepo rev-parse mytag^{commit}) &&
	test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
		git fetch testrepo $oid 2>err &&
	test_i18ngrep "Server does not allow request for unadvertised object" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
[main (root-commit) ae80332] one
 Author: A U Thor <author@example.com>
[main 882ef1f] two
 Author: A U Thor <author@example.com>
error: Server does not allow request for unadvertised object ae8033205e59137fe14e6d2202714f7f9987ca7e
ok 96 - peeled advertisements are not considered ref tips

expecting success of 5516.97 'pushing a specific ref applies remote.$name.push as refmap': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	(
		cd src &&
		git pull ../testrepo main &&
		git branch next &&
		git config remote.dst.url ../dst &&
		git config remote.dst.push "+refs/heads/*:refs/remotes/src/*" &&
		git push dst main &&
		git show-ref refs/heads/main |
		sed -e "s|refs/heads/|refs/remotes/src/|" >../dst/expect
	) &&
	(
		cd dst &&
		test_must_fail git show-ref refs/heads/next &&
		test_must_fail git show-ref refs/heads/main &&
		git show-ref refs/remotes/src/main >actual
	) &&
	test_cmp dst/expect dst/actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/
From ../testrepo
 * branch            main       -> FETCH_HEAD
To ../dst
 * [new reference]   main -> src/main
ok 97 - pushing a specific ref applies remote.$name.push as refmap

expecting success of 5516.98 'with no remote.$name.push, it is not used as refmap': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	(
		cd src &&
		git pull ../testrepo main &&
		git branch next &&
		git config remote.dst.url ../dst &&
		git config push.default matching &&
		git push dst main &&
		git show-ref refs/heads/main >../dst/expect
	) &&
	(
		cd dst &&
		test_must_fail git show-ref refs/heads/next &&
		git show-ref refs/heads/main >actual
	) &&
	test_cmp dst/expect dst/actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/
From ../testrepo
 * branch            main       -> FETCH_HEAD
To ../dst
 * [new branch]      main -> main
ok 98 - with no remote.$name.push, it is not used as refmap

expecting success of 5516.99 'with no remote.$name.push, upstream mapping is used': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	(
		cd src &&
		git pull ../testrepo main &&
		git branch next &&
		git config remote.dst.url ../dst &&
		git config remote.dst.fetch "+refs/heads/*:refs/remotes/dst/*" &&
		git config push.default upstream &&

		git config branch.main.merge refs/heads/trunk &&
		git config branch.main.remote dst &&

		git push dst main &&
		git show-ref refs/heads/main |
		sed -e "s|refs/heads/main|refs/heads/trunk|" >../dst/expect
	) &&
	(
		cd dst &&
		test_must_fail git show-ref refs/heads/main &&
		test_must_fail git show-ref refs/heads/next &&
		git show-ref refs/heads/trunk >actual
	) &&
	test_cmp dst/expect dst/actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/
From ../testrepo
 * branch            main       -> FETCH_HEAD
To ../dst
 * [new branch]      main -> trunk
ok 99 - with no remote.$name.push, upstream mapping is used

expecting success of 5516.100 'push does not follow tags by default': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	(
		cd src &&
		git pull ../testrepo main &&
		git tag -m "annotated" tag &&
		git checkout -b another &&
		git commit --allow-empty -m "future commit" &&
		git tag -m "future" future &&
		git checkout main &&
		git for-each-ref refs/heads/main >../expect &&
		git push ../dst main
	) &&
	(
		cd dst &&
		git for-each-ref >../actual
	) &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/
From ../testrepo
 * branch            main       -> FETCH_HEAD
Switched to a new branch 'another'
[another a35c877] future commit
 Author: A U Thor <author@example.com>
Switched to branch 'main'
To ../dst
 * [new branch]      main -> main
ok 100 - push does not follow tags by default

expecting success of 5516.101 'push --follow-tags only pushes relevant tags': 
	mk_test testrepo heads/main &&
	test_when_finished "rm -rf src" &&
	git init src &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	(
		cd src &&
		git pull ../testrepo main &&
		git tag -m "annotated" tag &&
		git checkout -b another &&
		git commit --allow-empty -m "future commit" &&
		git tag -m "future" future &&
		git checkout main &&
		git for-each-ref refs/heads/main refs/tags/tag >../expect &&
		git push --follow-tags ../dst main
	) &&
	(
		cd dst &&
		git for-each-ref >../actual
	) &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst/
From ../testrepo
 * branch            main       -> FETCH_HEAD
Switched to a new branch 'another'
[another a35c877] future commit
 Author: A U Thor <author@example.com>
Switched to branch 'main'
To ../dst
 * [new branch]      main -> main
 * [new tag]         tag -> tag
ok 101 - push --follow-tags only pushes relevant tags

expecting success of 5516.102 'push --no-thin must produce non-thin pack': 
	cat >>path1 <<\EOF &&
keep base version of path1 big enough, compared to the new changes
later, in order to pass size heuristics in
builtin/pack-objects.c:try_delta()
EOF
	git commit -am initial &&
	git init no-thin &&
	git --git-dir=no-thin/.git config receive.unpacklimit 0 &&
	git push no-thin/.git refs/heads/main:refs/heads/foo &&
	echo modified >> path1 &&
	git commit -am modified &&
	git repack -adf &&
	rcvpck="git receive-pack --reject-thin-pack-for-testing" &&
	git push --no-thin --receive-pack="$rcvpck" no-thin/.git refs/heads/main:refs/heads/foo

[main b9296ea] initial
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/no-thin/.git/
To no-thin/.git
 * [new branch]      main -> foo
[main a9cf62b] modified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To no-thin/.git
   b9296ea..a9cf62b  main -> foo
ok 102 - push --no-thin must produce non-thin pack

expecting success of 5516.103 'pushing a tag pushes the tagged object': 
	blob=$(echo unreferenced | git hash-object -w --stdin) &&
	git tag -m foo tag-of-blob $blob &&
	test_when_finished "rm -rf dst.git" &&
	git init --bare dst.git &&
	git push dst.git tag-of-blob &&
	# the receiving index-pack should have noticed
	# any problems, but we double check
	echo unreferenced >expect &&
	git --git-dir=dst.git cat-file blob tag-of-blob >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst.git/
To dst.git
 * [new tag]         tag-of-blob -> tag-of-blob
ok 103 - pushing a tag pushes the tagged object

expecting success of 5516.104 'push into bare respects core.logallrefupdates': 
	test_when_finished "rm -rf dst.git" &&
	git init --bare dst.git &&
	git -C dst.git config core.logallrefupdates true &&

	# double push to test both with and without
	# the actual pack transfer
	git push dst.git main:one &&
	echo "one@{0} push" >expect &&
	git -C dst.git log -g --format="%gd %gs" one >actual &&
	test_cmp expect actual &&

	git push dst.git main:two &&
	echo "two@{0} push" >expect &&
	git -C dst.git log -g --format="%gd %gs" two >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst.git/
To dst.git
 * [new branch]      main -> one
To dst.git
 * [new branch]      main -> two
ok 104 - push into bare respects core.logallrefupdates

expecting success of 5516.105 'fetch into bare respects core.logallrefupdates': 
	test_when_finished "rm -rf dst.git" &&
	git init --bare dst.git &&
	(
		cd dst.git &&
		git config core.logallrefupdates true &&

		# as above, we double-fetch to test both
		# with and without pack transfer
		git fetch .. main:one &&
		echo "one@{0} fetch .. main:one: storing head" >expect &&
		git log -g --format="%gd %gs" one >actual &&
		test_cmp expect actual &&

		git fetch .. main:two &&
		echo "two@{0} fetch .. main:two: storing head" >expect &&
		git log -g --format="%gd %gs" two >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/dst.git/
From ..
 * [new branch]      main       -> one
 * [new tag]         deltag     -> deltag
 * [new tag]         frotz      -> frotz
 * [new tag]         v1.0       -> v1.0
From ..
 * [new branch]      main       -> two
ok 105 - fetch into bare respects core.logallrefupdates

expecting success of 5516.106 'receive.denyCurrentBranch = updateInstead': 
	mk_empty testrepo &&
	git push testrepo main &&
	(
		cd testrepo &&
		git reset --hard &&
		git config receive.denyCurrentBranch updateInstead
	) &&
	test_commit third path2 &&

	# Try pushing into a repository with pristine working tree
	git push testrepo main &&
	(
		cd testrepo &&
		git update-index -q --refresh &&
		git diff-files --quiet -- &&
		git diff-index --quiet --cached HEAD -- &&
		test third = "$(cat path2)" &&
		test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD)
	) &&

	# Try pushing into a repository with working tree needing a refresh
	(
		cd testrepo &&
		git reset --hard HEAD^ &&
		test $(git -C .. rev-parse HEAD^) = $(git rev-parse HEAD) &&
		test-tool chmtime +100 path1
	) &&
	git push testrepo main &&
	(
		cd testrepo &&
		git update-index -q --refresh &&
		git diff-files --quiet -- &&
		git diff-index --quiet --cached HEAD -- &&
		test_cmp ../path1 path1 &&
		test third = "$(cat path2)" &&
		test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD)
	) &&

	# Update what is to be pushed
	test_commit fourth path2 &&

	# Try pushing into a repository with a dirty working tree
	# (1) the working tree updated
	(
		cd testrepo &&
		echo changed >path1
	) &&
	test_must_fail git push testrepo main &&
	(
		cd testrepo &&
		test $(git -C .. rev-parse HEAD^) = $(git rev-parse HEAD) &&
		git diff --quiet --cached &&
		test changed = "$(cat path1)"
	) &&

	# (2) the index updated
	(
		cd testrepo &&
		echo changed >path1 &&
		git add path1
	) &&
	test_must_fail git push testrepo main &&
	(
		cd testrepo &&
		test $(git -C .. rev-parse HEAD^) = $(git rev-parse HEAD) &&
		git diff --quiet &&
		test changed = "$(cat path1)"
	) &&

	# Introduce a new file in the update
	test_commit fifth path3 &&

	# (3) the working tree has an untracked file that would interfere
	(
		cd testrepo &&
		git reset --hard &&
		echo changed >path3
	) &&
	test_must_fail git push testrepo main &&
	(
		cd testrepo &&
		test $(git -C .. rev-parse HEAD^^) = $(git rev-parse HEAD) &&
		git diff --quiet &&
		git diff --quiet --cached &&
		test changed = "$(cat path3)"
	) &&

	# (4) the target changes to what gets pushed but it still is a change
	(
		cd testrepo &&
		git reset --hard &&
		echo fifth >path3 &&
		git add path3
	) &&
	test_must_fail git push testrepo main &&
	(
		cd testrepo &&
		test $(git -C .. rev-parse HEAD^^) = $(git rev-parse HEAD) &&
		git diff --quiet &&
		test fifth = "$(cat path3)"
	) &&

	# (5) push into void
	test_when_finished "rm -rf void" &&
	git init void &&
	(
		cd void &&
		git config receive.denyCurrentBranch updateInstead
	) &&
	git push void main &&
	(
		cd void &&
		test $(git -C .. rev-parse main) = $(git rev-parse HEAD) &&
		git diff --quiet &&
		git diff --cached --quiet
	) &&

	# (6) updateInstead intervened by fast-forward check
	test_must_fail git push void main^:main &&
	test $(git -C void rev-parse HEAD) = $(git rev-parse main) &&
	git -C void diff --quiet &&
	git -C void diff --cached --quiet

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      main -> main
HEAD is now at a9cf62b modified
[main f026489] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To testrepo
   a9cf62b..f026489  main -> main
HEAD is now at a9cf62b modified
To testrepo
   a9cf62b..f026489  main -> main
[main 98a4253] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To testrepo
 ! [remote rejected] main -> main (Working directory has unstaged changes)
error: failed to push some refs to 'testrepo'
To testrepo
 ! [remote rejected] main -> main (Working directory has staged changes)
error: failed to push some refs to 'testrepo'
[main 7bb1bc8] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 path3
HEAD is now at f026489 third
error: Untracked working tree file 'path3' would be overwritten by merge.
To testrepo
 ! [remote rejected] main -> main (Could not update working tree to new HEAD)
error: failed to push some refs to 'testrepo'
HEAD is now at f026489 third
To testrepo
 ! [remote rejected] main -> main (Working directory has staged changes)
error: failed to push some refs to 'testrepo'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/void/.git/
To void
 * [new branch]      main -> main
To void
 ! [rejected]        main^ -> main (non-fast-forward)
error: failed to push some refs to 'void'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ok 106 - receive.denyCurrentBranch = updateInstead

expecting success of 5516.107 'updateInstead with push-to-checkout hook': 
	test_when_finished "rm -rf testrepo" &&
	git init testrepo &&
	git -C testrepo pull .. main &&
	git -C testrepo reset --hard HEAD^^ &&
	git -C testrepo tag initial &&
	git -C testrepo config receive.denyCurrentBranch updateInstead &&
	test_hook -C testrepo push-to-checkout <<-\EOF &&
	echo >&2 updating from $(git rev-parse HEAD)
	echo >&2 updating to "$1"

	git update-index -q --refresh &&
	git read-tree -u -m HEAD "$1" || {
		status=$?
		echo >&2 read-tree failed
		exit $status
	}
	EOF

	# Try pushing into a pristine
	git push testrepo main &&
	(
		cd testrepo &&
		git diff --quiet &&
		git diff HEAD --quiet &&
		test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD)
	) &&

	# Try pushing into a repository with conflicting change
	(
		cd testrepo &&
		git reset --hard initial &&
		echo conflicting >path2
	) &&
	test_must_fail git push testrepo main &&
	(
		cd testrepo &&
		test $(git rev-parse initial) = $(git rev-parse HEAD) &&
		test conflicting = "$(cat path2)" &&
		git diff-index --quiet --cached HEAD
	) &&

	# Try pushing into a repository with unrelated change
	(
		cd testrepo &&
		git reset --hard initial &&
		echo unrelated >path1 &&
		echo irrelevant >path5 &&
		git add path5
	) &&
	git push testrepo main &&
	(
		cd testrepo &&
		test "$(cat path1)" = unrelated &&
		test "$(cat path5)" = irrelevant &&
		test "$(git diff --name-only --cached HEAD)" = path5 &&
		test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD)
	) &&

	# push into void
	test_when_finished "rm -rf void" &&
	git init void &&
	git -C void config receive.denyCurrentBranch updateInstead &&
	test_hook -C void push-to-checkout <<-\EOF &&
	if git rev-parse --quiet --verify HEAD
	then
		has_head=yes
		echo >&2 updating from $(git rev-parse HEAD)
	else
		has_head=no
		echo >&2 pushing into void
	fi
	echo >&2 updating to "$1"

	git update-index -q --refresh &&
	case "$has_head" in
	yes)
		git read-tree -u -m HEAD "$1" ;;
	no)
		git read-tree -u -m "$1" ;;
	esac || {
		status=$?
		echo >&2 read-tree failed
		exit $status
	}
	EOF

	git push void main &&
	(
		cd void &&
		git diff --quiet &&
		git diff --cached --quiet &&
		test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
From ..
 * branch            main       -> FETCH_HEAD
HEAD is now at f026489 third
updating from f0264897557d25326474e587933c192b6d338b33
updating to 7bb1bc8bd0518772ab617a9b8715716f26c682ab
To testrepo
   f026489..7bb1bc8  main -> main
HEAD is now at f026489 third
updating from f0264897557d25326474e587933c192b6d338b33
updating to 7bb1bc8bd0518772ab617a9b8715716f26c682ab
error: Entry 'path2' not uptodate. Cannot merge.
read-tree failed
To testrepo
 ! [remote rejected] main -> main (push-to-checkout hook declined)
error: failed to push some refs to 'testrepo'
HEAD is now at f026489 third
updating from f0264897557d25326474e587933c192b6d338b33
updating to 7bb1bc8bd0518772ab617a9b8715716f26c682ab
To testrepo
   f026489..7bb1bc8  main -> main
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/void/.git/
pushing into void
updating to 7bb1bc8bd0518772ab617a9b8715716f26c682ab
To void
 * [new branch]      main -> main
ok 107 - updateInstead with push-to-checkout hook

expecting success of 5516.108 'denyCurrentBranch and worktrees': 
	git worktree add new-wt &&
	git clone . cloned &&
	test_commit -C cloned first &&
	test_config receive.denyCurrentBranch refuse &&
	test_must_fail git -C cloned push origin HEAD:new-wt &&
	test_config receive.denyCurrentBranch updateInstead &&
	git -C cloned push origin HEAD:new-wt &&
	test_path_exists new-wt/first.t &&
	test_must_fail git -C cloned push --delete origin new-wt

Preparing worktree (new branch 'new-wt')
HEAD is now at 7bb1bc8 fifth
Cloning into 'cloned'...
done.
[main 659b608] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
remote: error: refusing to update checked out branch: refs/heads/new-wt        
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.
 ! [remote rejected] HEAD -> new-wt (branch is currently checked out)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.'
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.
   7bb1bc8..659b608  HEAD -> new-wt
remote: error: By default, deleting the current branch is denied, because the next        
remote: 'git clone' won't result in any file checked out, causing confusion.        
remote: 
remote: You can set 'receive.denyDeleteCurrent' configuration variable to        
remote: 'warn' or 'ignore' in the remote repository to allow deleting the        
remote: current branch, with or without a warning message.        
remote: 
remote: To squelch this message, you can set it to 'refuse'.        
remote: error: refusing to delete the current branch: refs/heads/new-wt        
To /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.
 ! [remote rejected] new-wt (deletion of the current branch prohibited)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/.'
ok 108 - denyCurrentBranch and worktrees

expecting success of 5516.109 'denyCurrentBranch and bare repository worktrees': 
	test_when_finished "rm -fr bare.git" &&
	git clone --bare . bare.git &&
	git -C bare.git worktree add wt &&
	test_commit grape &&
	git -C bare.git config receive.denyCurrentBranch refuse &&
	test_must_fail git push bare.git HEAD:wt &&
	git -C bare.git config receive.denyCurrentBranch updateInstead &&
	git push bare.git HEAD:wt &&
	test_path_exists bare.git/wt/grape.t &&
	test_must_fail git push --delete bare.git wt

Cloning into bare repository 'bare.git'...
done.
Preparing worktree (new branch 'wt')
HEAD is now at 7bb1bc8 fifth
[main 9b41c21] grape
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 grape.t
remote: error: refusing to update checked out branch: refs/heads/wt        
To bare.git
 ! [remote rejected] HEAD -> wt (branch is currently checked out)
error: failed to push some refs to 'bare.git'
To bare.git
   7bb1bc8..9b41c21  HEAD -> wt
remote: error: By default, deleting the current branch is denied, because the next        
remote: 'git clone' won't result in any file checked out, causing confusion.        
remote: 
remote: You can set 'receive.denyDeleteCurrent' configuration variable to        
remote: 'warn' or 'ignore' in the remote repository to allow deleting the        
remote: current branch, with or without a warning message.        
remote: 
remote: To squelch this message, you can set it to 'refuse'.        
remote: error: refusing to delete the current branch: refs/heads/wt        
To bare.git
 ! [remote rejected] wt (deletion of the current branch prohibited)
error: failed to push some refs to 'bare.git'
ok 109 - denyCurrentBranch and bare repository worktrees

expecting success of 5516.110 'refuse fetch to current branch of worktree': 
	test_when_finished "git worktree remove --force wt && git branch -D wt" &&
	git worktree add wt &&
	test_commit apple &&
	test_must_fail git fetch . HEAD:wt &&
	git fetch -u . HEAD:wt

Preparing worktree (new branch 'wt')
HEAD is now at 9b41c21 grape
[main d190886] apple
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 apple.t
fatal: refusing to fetch into branch 'refs/heads/wt' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/wt'
From .
   9b41c21..d190886             -> wt
Deleted branch wt (was d190886).
ok 110 - refuse fetch to current branch of worktree

expecting success of 5516.111 'refuse fetch to current branch of bare repository worktree': 
	test_when_finished "rm -fr bare.git" &&
	git clone --bare . bare.git &&
	git -C bare.git worktree add wt &&
	test_commit banana &&
	test_must_fail git -C bare.git fetch .. HEAD:wt &&
	git -C bare.git fetch -u .. HEAD:wt

Cloning into bare repository 'bare.git'...
done.
Preparing worktree (new branch 'wt')
HEAD is now at d190886 apple
[main 35a3221] banana
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 banana.t
fatal: refusing to fetch into branch 'refs/heads/wt' checked out at '/<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/bare.git/wt'
From ..
   d190886..35a3221             -> wt
 * [new tag]         banana     -> banana
ok 111 - refuse fetch to current branch of bare repository worktree

expecting success of 5516.112 'refuse to push a hidden ref, and make sure do not pollute the repository': 
	mk_empty testrepo &&
	git -C testrepo config receive.hiderefs refs/hidden &&
	git -C testrepo config receive.unpackLimit 1 &&
	test_must_fail git push testrepo HEAD:refs/hidden/foo &&
	test_dir_is_empty testrepo/.git/objects/pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
To testrepo
 ! [remote rejected] HEAD -> refs/hidden/foo (deny updating a hidden ref)
error: failed to push some refs to 'testrepo'
ok 112 - refuse to push a hidden ref, and make sure do not pollute the repository

expecting success of 5516.113 'push with config push.useBitmaps': 
	mk_test testrepo heads/main &&
	git checkout main &&
	test_unconfig push.useBitmaps &&
	GIT_TRACE2_EVENT="$PWD/default" \
	git push --quiet testrepo main:test &&
	test_subcommand git pack-objects --all-progress-implied --revs --stdout \
		--thin --delta-base-offset -q <default &&

	test_config push.useBitmaps true &&
	GIT_TRACE2_EVENT="$PWD/true" \
	git push --quiet testrepo main:test2 &&
	test_subcommand git pack-objects --all-progress-implied --revs --stdout \
		--thin --delta-base-offset -q <true &&

	test_config push.useBitmaps false &&
	GIT_TRACE2_EVENT="$PWD/false" \
	git push --quiet testrepo main:test3 &&
	test_subcommand git pack-objects --all-progress-implied --revs --stdout \
		--thin --delta-base-offset -q --no-use-bitmap-index <false

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5516-fetch-push/testrepo/.git/
remote: warning: updating the current branch        
To testrepo
 * [new branch]      b9c09d6cc74d3857142fb7c082dca65b88254c6d -> main
Already on 'main'
{"event":"child_start","sid":"20221228T075259.015331Z-Hc64317c2-P0000333c","thread":"main","time":"2022-12-28T07:52:59.057948Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","pack-objects","--all-progress-implied","--revs","--stdout","--thin","--delta-base-offset","-q"]}
{"event":"child_start","sid":"20221228T075259.477938Z-Hc64317c2-P00003381","thread":"main","time":"2022-12-28T07:52:59.521196Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","pack-objects","--all-progress-implied","--revs","--stdout","--thin","--delta-base-offset","-q"]}
{"event":"child_start","sid":"20221228T075259.770791Z-Hc64317c2-P000033ad","thread":"main","time":"2022-12-28T07:52:59.805559Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","pack-objects","--all-progress-implied","--revs","--stdout","--thin","--delta-base-offset","-q","--no-use-bitmap-index"]}
ok 113 - push with config push.useBitmaps

# passed all 113 test(s)
1..113
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5534-push-signed.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/.git/
expecting success of 5534.1 'setup': 
	# main, ff and noff branches pointing at the same commit
	test_tick &&
	git commit --allow-empty -m initial &&

	git checkout -b noop &&
	git checkout -b ff &&
	git checkout -b noff &&

	# noop stays the same, ff advances, noff rewrites
	test_tick &&
	git commit --allow-empty --amend -m rewritten &&
	git checkout ff &&

	test_tick &&
	git commit --allow-empty -m second

[main (root-commit) 66fe8b3] initial
 Author: A U Thor <author@example.com>
Switched to a new branch 'noop'
Switched to a new branch 'ff'
Switched to a new branch 'noff'
[noff 6391b7f] rewritten
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
Switched to branch 'ff'
[ff 566fbd3] second
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 5534.2 'unsigned push does not send push certificate': 
	prepare_dst &&
	test_hook -C dst post-receive <<-\EOF &&
	# discard the update list
	cat >/dev/null
	# record the push certificate
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi
	EOF

	git push dst noop ff +noff &&
	! test -f dst/push-cert

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
To dst
   66fe8b3..566fbd3  ff -> ff
 + 66fe8b3...6391b7f noff -> noff (forced update)
ok 2 - unsigned push does not send push certificate

expecting success of 5534.3 'talking with a receiver without push certificate support': 
	prepare_dst &&
	test_hook -C dst post-receive <<-\EOF &&
	# discard the update list
	cat >/dev/null
	# record the push certificate
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi
	EOF

	git push dst noop ff +noff &&
	! test -f dst/push-cert

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
To dst
   66fe8b3..566fbd3  ff -> ff
 + 66fe8b3...6391b7f noff -> noff (forced update)
ok 3 - talking with a receiver without push certificate support

expecting success of 5534.4 'push --signed fails with a receiver without push certificate support': 
	prepare_dst &&
	test_must_fail git push --signed dst noop ff +noff 2>err &&
	test_i18ngrep "the receiving end does not support" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
fatal: the receiving end does not support --signed push
ok 4 - push --signed fails with a receiver without push certificate support

expecting success of 5534.5 'push --signed=1 is accepted': 
	prepare_dst &&
	test_must_fail git push --signed=1 dst noop ff +noff 2>err &&
	test_i18ngrep "the receiving end does not support" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
fatal: the receiving end does not support --signed push
ok 5 - push --signed=1 is accepted

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 5534.6 'no certificate for a signed push with no update': 
	prepare_dst &&
	test_hook -C dst post-receive <<-\EOF &&
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi
	EOF
	git push dst noop &&
	! test -f dst/push-cert

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
Everything up-to-date
ok 6 - no certificate for a signed push with no update

expecting success of 5534.7 'signed push sends push certificate': 
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	test_hook -C dst post-receive <<-\EOF &&
	# discard the update list
	cat >/dev/null
	# record the push certificate
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi &&

	cat >../push-cert-status <<E_O_F
	SIGNER=${GIT_PUSH_CERT_SIGNER-nobody}
	KEY=${GIT_PUSH_CERT_KEY-nokey}
	STATUS=${GIT_PUSH_CERT_STATUS-nostatus}
	NONCE_STATUS=${GIT_PUSH_CERT_NONCE_STATUS-nononcestatus}
	NONCE=${GIT_PUSH_CERT_NONCE-nononce}
	E_O_F

	EOF

	git push --signed dst noop ff +noff &&

	(
		cat <<-\EOF &&
		SIGNER=C O Mitter <committer@example.com>
		KEY=13B6F51ECDDE430D
		STATUS=G
		NONCE_STATUS=OK
		EOF
		sed -n -e "s/^nonce /NONCE=/p" -e "/^$/q" dst/push-cert
	) >expect &&

	noop=$(git rev-parse noop) &&
	ff=$(git rev-parse ff) &&
	noff=$(git rev-parse noff) &&
	grep "$noop $ff refs/heads/ff" dst/push-cert &&
	grep "$noop $noff refs/heads/noff" dst/push-cert &&
	test_cmp expect dst/push-cert-status

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
To dst
   66fe8b3..566fbd3  ff -> ff
 + 66fe8b3...6391b7f noff -> noff (forced update)
66fe8b3f2df5c2a6e67944af865f3a0893093d69 566fbd34a75c18947f0bcd052512caf55e7144ba refs/heads/ff
66fe8b3f2df5c2a6e67944af865f3a0893093d69 6391b7f36bc1393eab3cad0aaf8c08cdacbe78fa refs/heads/noff
ok 7 - signed push sends push certificate

checking prerequisite: GPGSSH

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
	ssh_version=$(ssh-keygen -Y find-principals -n "git" 2>&1)
	test $? != 127 || exit 1
	echo $ssh_version | grep -q "find-principals:missing signature file"
	test $? = 0 || exit 1;

	# Setup some keys and an allowed signers file
	mkdir -p "${GNUPGHOME}" &&
	chmod 0700 "${GNUPGHOME}" &&
	(setfacl -k "${GNUPGHOME}" 2>/dev/null || true) &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null &&
	ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null &&
	ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null &&
	ssh-keygen -t ecdsa -N "" -f "${GPGSSH_KEY_ECDSA}" >/dev/null &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null &&

	cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")"
	"principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")"
	"principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")"
	"principal with number 4" $(cat "${GPGSSH_KEY_ECDSA}.pub")"
	EOF

	# Verify if at least one key and ssh-keygen works as expected
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig &&
	ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig &&
	echo "testpayload" |
	ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig

)
prerequisite GPGSSH not satisfied
ok 8 # skip ssh signed push sends push certificate (missing GPGSSH)

expecting success of 5534.9 'inconsistent push options in signed push not allowed': 
	# First, invoke receive-pack with dummy input to obtain its preamble.
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	git -C dst config receive.advertisepushoptions 1 &&
	printf xxxx | test_might_fail git receive-pack dst >preamble &&

	# Then, invoke push. Simulate a receive-pack that sends the preamble we
	# obtained, followed by a dummy packet.
	write_script myscript <<-\EOF &&
		cat preamble &&
		printf xxxx &&
		cat >push
	EOF
	test_might_fail git push --push-option="foo" --push-option="bar" \
		--receive-pack="\"$(pwd)/myscript\"" --signed dst --delete ff &&

	# Replay the push output on a fresh dst, checking that ff is truly
	# deleted.
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	git -C dst config receive.advertisepushoptions 1 &&
	git receive-pack dst <push &&
	test_must_fail git -C dst rev-parse ff &&

	# Tweak the push output to make the push option outside the cert
	# different, then replay it on a fresh dst, checking that ff is not
	# deleted.
	perl -pe "s/([^ ])bar/\$1baz/" push >push.tweak &&
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	git -C dst config receive.advertisepushoptions 1 &&
	git receive-pack dst <push.tweak >out &&
	git -C dst rev-parse ff &&
	grep "inconsistent push options" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
fatal: protocol error: bad line length character: xxxx
fatal: protocol error: bad line length character: xxxx
fatal: the remote end hung up unexpectedly
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
00fa66fe8b3f2df5c2a6e67944af865f3a0893093d69 refs/heads/ffreport-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-cert=1672213987-2ca77090879e9eef4bbf190c06cb4fe85e94616a push-options object-format=sha1 agent=git/2.39.0
003d66fe8b3f2df5c2a6e67944af865f3a0893093d69 refs/heads/noff
003d66fe8b3f2df5c2a6e67944af865f3a0893093d69 refs/heads/noop
0000002c000eunpack ok
0015ok refs/heads/ff
00000000fatal: ambiguous argument 'ff': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ff
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
66fe8b3f2df5c2a6e67944af865f3a0893093d69
grep: out: binary file matches
ok 9 - inconsistent push options in signed push not allowed

expecting success of 5534.10 'fail without key and heed user.signingkey': 
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	test_hook -C dst post-receive <<-\EOF &&
	# discard the update list
	cat >/dev/null
	# record the push certificate
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi &&

	cat >../push-cert-status <<E_O_F
	SIGNER=${GIT_PUSH_CERT_SIGNER-nobody}
	KEY=${GIT_PUSH_CERT_KEY-nokey}
	STATUS=${GIT_PUSH_CERT_STATUS-nostatus}
	NONCE_STATUS=${GIT_PUSH_CERT_NONCE_STATUS-nononcestatus}
	NONCE=${GIT_PUSH_CERT_NONCE-nononce}
	E_O_F

	EOF

	test_config user.email hasnokey@nowhere.com &&
	(
		sane_unset GIT_COMMITTER_EMAIL &&
		test_must_fail git push --signed dst noop ff +noff
	) &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git push --signed dst noop ff +noff &&

	(
		cat <<-\EOF &&
		SIGNER=C O Mitter <committer@example.com>
		KEY=13B6F51ECDDE430D
		STATUS=G
		NONCE_STATUS=OK
		EOF
		sed -n -e "s/^nonce /NONCE=/p" -e "/^$/q" dst/push-cert
	) >expect &&

	noop=$(git rev-parse noop) &&
	ff=$(git rev-parse ff) &&
	noff=$(git rev-parse noff) &&
	grep "$noop $ff refs/heads/ff" dst/push-cert &&
	grep "$noop $noff refs/heads/noff" dst/push-cert &&
	test_cmp expect dst/push-cert-status

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
error: gpg failed to sign the data
fatal: failed to sign the push certificate
fatal: the remote end hung up unexpectedly
To dst
   66fe8b3..566fbd3  ff -> ff
 + 66fe8b3...6391b7f noff -> noff (forced update)
66fe8b3f2df5c2a6e67944af865f3a0893093d69 566fbd34a75c18947f0bcd052512caf55e7144ba refs/heads/ff
66fe8b3f2df5c2a6e67944af865f3a0893093d69 6391b7f36bc1393eab3cad0aaf8c08cdacbe78fa refs/heads/noff
ok 10 - fail without key and heed user.signingkey

checking prerequisite: GPGSM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
	test_have_prereq GPG &&
	# Available key info:
	# * see t/lib-gpg/gpgsm-gen-key.in
	# To generate new certificate:
	#  * no passphrase
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o /tmp/gpgsm.crt.user \
	#		--generate-key \
	#		--batch t/lib-gpg/gpgsm-gen-key.in
	# To import certificate:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		--import /tmp/gpgsm.crt.user
	# To export into a .p12 we can later import:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o t/lib-gpg/gpgsm_cert.p12 \
	#		--export-secret-key-p12 "committer@example.com"
	echo | gpgsm --homedir "${GNUPGHOME}" \
		--passphrase-fd 0 --pinentry-mode loopback \
		--import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&

	gpgsm --homedir "${GNUPGHOME}" -K --with-colons |
	awk -F ":" "/^fpr:/ {printf \"%s S relax\\n\", \$10}" \
		>"${GNUPGHOME}/trustlist.txt" &&
	(gpgconf --reload all || : ) &&

	echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
	       -u committer@example.com -o /dev/null --sign -

)
gpgsm: total number processed: 2
gpgsm:               imported: 1
gpgsm:       secret keys read: 1
gpgsm:   secret keys imported: 1
gpgsm: DBG: adding certificates at level -2
gpgsm: signature created
prerequisite GPGSM ok
expecting success of 5534.11 'fail without key and heed user.signingkey x509': 
	test_config gpg.format x509 &&
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	test_hook -C dst post-receive <<-\EOF &&
	# discard the update list
	cat >/dev/null
	# record the push certificate
	if test -n "${GIT_PUSH_CERT-}"
	then
		git cat-file blob $GIT_PUSH_CERT >../push-cert
	fi &&

	cat >../push-cert-status <<E_O_F
	SIGNER=${GIT_PUSH_CERT_SIGNER-nobody}
	KEY=${GIT_PUSH_CERT_KEY-nokey}
	STATUS=${GIT_PUSH_CERT_STATUS-nostatus}
	NONCE_STATUS=${GIT_PUSH_CERT_NONCE_STATUS-nononcestatus}
	NONCE=${GIT_PUSH_CERT_NONCE-nononce}
	E_O_F

	EOF

	test_config user.email hasnokey@nowhere.com &&
	test_config user.signingkey "" &&
	(
		sane_unset GIT_COMMITTER_EMAIL &&
		test_must_fail git push --signed dst noop ff +noff
	) &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	git push --signed dst noop ff +noff &&

	(
		cat <<-\EOF &&
		SIGNER=/CN=C O Mitter/O=Example/SN=C O/GN=Mitter
		KEY=
		STATUS=G
		NONCE_STATUS=OK
		EOF
		sed -n -e "s/^nonce /NONCE=/p" -e "/^$/q" dst/push-cert
	) >expect.in &&
	key=$(cat "${GNUPGHOME}/trustlist.txt" | cut -d" " -f1 | tr -d ":") &&
	sed -e "s/^KEY=/KEY=${key}/" expect.in >expect &&

	noop=$(git rev-parse noop) &&
	ff=$(git rev-parse ff) &&
	noff=$(git rev-parse noff) &&
	grep "$noop $ff refs/heads/ff" dst/push-cert &&
	grep "$noop $noff refs/heads/noff" dst/push-cert &&
	test_cmp expect dst/push-cert-status

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
error: gpg failed to sign the data
fatal: failed to sign the push certificate
fatal: the remote end hung up unexpectedly
To dst
   66fe8b3..566fbd3  ff -> ff
 + 66fe8b3...6391b7f noff -> noff (forced update)
66fe8b3f2df5c2a6e67944af865f3a0893093d69 566fbd34a75c18947f0bcd052512caf55e7144ba refs/heads/ff
66fe8b3f2df5c2a6e67944af865f3a0893093d69 6391b7f36bc1393eab3cad0aaf8c08cdacbe78fa refs/heads/noff
ok 11 - fail without key and heed user.signingkey x509

ok 12 # skip fail without key and heed user.signingkey ssh (missing GPGSSH)

expecting success of 5534.13 'failed atomic push does not execute GPG': 
	prepare_dst &&
	git -C dst config receive.certnonceseed sekrit &&
	write_script gpg <<-EOF &&
	# should check atomic push locally before running GPG.
	exit 1
	EOF
	test_must_fail env PATH="$TRASH_DIRECTORY:$PATH" git push \
			--signed --atomic --porcelain \
			dst noop ff noff >out 2>err &&

	test_i18ngrep ! "gpg failed to sign" err &&
	cat >expect <<-EOF &&
	To dst
	=	refs/heads/noop:refs/heads/noop	[up to date]
	!	refs/heads/ff:refs/heads/ff	[rejected] (atomic push failed)
	!	refs/heads/noff:refs/heads/noff	[rejected] (non-fast-forward)
	Done
	EOF
	test_cmp expect out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5534-push-signed/dst/.git/
To dst
 * [new branch]      main -> noop
 * [new branch]      main -> ff
 * [new branch]      main -> noff
ok 13 - failed atomic push does not execute GPG

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5535-fetch-push-symref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5535-fetch-push-symref/.git/
expecting success of 5535.1 'setup': 
	test_commit one &&
	git clone . src &&
	git clone src dst1 &&
	git clone src dst2 &&
	test_commit two &&
	( cd src && git pull )

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'src'...
done.
Cloning into 'dst1'...
done.
Cloning into 'dst2'...
done.
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From /<<PKGBUILDDIR>>/t/trash directory.t5535-fetch-push-symref/.
   d79ce16..139b20d  master     -> origin/master
 * [new tag]         two        -> two
Updating d79ce16..139b20d
Fast-forward
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - setup

expecting success of 5535.2 'push': 
	(
		cd src &&
		git push ../dst1 "refs/remotes/*:refs/remotes/*"
	) &&
	git ls-remote src "refs/remotes/*" >expect &&
	git ls-remote dst1 "refs/remotes/*" >actual &&
	test_cmp expect actual &&
	( cd src && git symbolic-ref refs/remotes/origin/HEAD ) >expect &&
	( cd dst1 && git symbolic-ref refs/remotes/origin/HEAD ) >actual &&
	test_cmp expect actual

To ../dst1
   d79ce16..139b20d  origin/HEAD -> origin/HEAD
   d79ce16..139b20d  origin/master -> origin/master
ok 2 - push

expecting success of 5535.3 'fetch': 
	(
		cd dst2 &&
		git fetch ../src "refs/remotes/*:refs/remotes/*"
	) &&
	git ls-remote src "refs/remotes/*" >expect &&
	git ls-remote dst2 "refs/remotes/*" >actual &&
	test_cmp expect actual &&
	( cd src && git symbolic-ref refs/remotes/origin/HEAD ) >expect &&
	( cd dst2 && git symbolic-ref refs/remotes/origin/HEAD ) >actual &&
	test_cmp expect actual

From ../src
   d79ce16..139b20d  origin/master -> origin/master
 * [new tag]         two           -> two
ok 3 - fetch

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5536-fetch-conflicts.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/.git/
expecting success of 5536.1 'setup': 
	git commit --allow-empty -m "Initial" &&
	git branch branch1 &&
	git tag tag1 &&
	git commit --allow-empty -m "First" &&
	git branch branch2 &&
	git tag tag2

[master (root-commit) d31adcd] Initial
 Author: A U Thor <author@example.com>
[master 1a200fb] First
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 5536.2 'fetch with no conflict': 
	setup_repository ok "+refs/heads/*:refs/remotes/origin/*" && (
		cd ok &&
		git fetch origin
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/ok/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts
 * [new branch]      branch1    -> origin/branch1
 * [new branch]      branch2    -> origin/branch2
 * [new branch]      master     -> origin/master
 * [new tag]         tag1       -> tag1
 * [new tag]         tag2       -> tag2
ok 2 - fetch with no conflict

expecting success of 5536.3 'fetch conflict: config vs. config': 
	setup_repository ccc \
		"+refs/heads/branch1:refs/remotes/origin/branch1" \
		"+refs/heads/branch2:refs/remotes/origin/branch1" && (
		cd ccc &&
		test_must_fail git fetch origin 2>error &&
		test_i18ngrep "fatal: Cannot fetch both refs/heads/branch1 and refs/heads/branch2 to refs/remotes/origin/branch1" error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/ccc/.git/
fatal: Cannot fetch both refs/heads/branch1 and refs/heads/branch2 to refs/remotes/origin/branch1
ok 3 - fetch conflict: config vs. config

expecting success of 5536.4 'fetch duplicate: config vs. config': 
	setup_repository dcc \
		"+refs/heads/*:refs/remotes/origin/*" \
		"+refs/heads/branch1:refs/remotes/origin/branch1" && (
		cd dcc &&
		git fetch origin
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/dcc/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts
 * [new branch]      branch1    -> origin/branch1
 * [new branch]      branch2    -> origin/branch2
 * [new branch]      master     -> origin/master
 * [new tag]         tag1       -> tag1
 * [new tag]         tag2       -> tag2
ok 4 - fetch duplicate: config vs. config

expecting success of 5536.5 'fetch conflict: arg overrides config': 
	setup_repository aoc \
		"+refs/heads/*:refs/remotes/origin/*" && (
		cd aoc &&
		git fetch origin refs/heads/branch2:refs/remotes/origin/branch1
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/aoc/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts
 * [new branch]      branch2    -> origin/branch1
 * [new tag]         tag2       -> tag2
 * [new branch]      branch2    -> origin/branch2
 * [new tag]         tag1       -> tag1
ok 5 - fetch conflict: arg overrides config

expecting success of 5536.6 'fetch conflict: arg vs. arg': 
	setup_repository caa && (
		cd caa &&
		test_must_fail git fetch origin \
			refs/heads/*:refs/remotes/origin/* \
			refs/heads/branch2:refs/remotes/origin/branch1 2>error &&
		test_i18ngrep "fatal: Cannot fetch both refs/heads/branch1 and refs/heads/branch2 to refs/remotes/origin/branch1" error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/caa/.git/
fatal: Cannot fetch both refs/heads/branch1 and refs/heads/branch2 to refs/remotes/origin/branch1
ok 6 - fetch conflict: arg vs. arg

expecting success of 5536.7 'fetch conflict: criss-cross args': 
	setup_repository xaa \
		"+refs/heads/*:refs/remotes/origin/*" && (
		cd xaa &&
		git fetch origin \
			refs/heads/branch1:refs/remotes/origin/branch2 \
			refs/heads/branch2:refs/remotes/origin/branch1 2>error &&
		test_i18ngrep "warning: refs/remotes/origin/branch1 usually tracks refs/heads/branch1, not refs/heads/branch2" error &&
		test_i18ngrep "warning: refs/remotes/origin/branch2 usually tracks refs/heads/branch2, not refs/heads/branch1" error
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5536-fetch-conflicts/xaa/.git/
warning: refs/remotes/origin/branch1 usually tracks refs/heads/branch1, not refs/heads/branch2
warning: refs/remotes/origin/branch2 usually tracks refs/heads/branch2, not refs/heads/branch1
ok 7 - fetch conflict: criss-cross args

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5531-deep-submodule-push.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/.git/
expecting success of 5531.1 'setup': 
	mkdir pub.git &&
	GIT_DIR=pub.git git init --bare &&
	GIT_DIR=pub.git git config receive.fsckobjects true &&
	mkdir work &&
	(
		cd work &&
		git init &&
		git config push.default matching &&
		mkdir -p gar/bage &&
		(
			cd gar/bage &&
			git init &&
			git config push.default matching &&
			>junk &&
			git add junk &&
			git commit -m "Initial junk"
		) &&
		git add gar/bage &&
		git commit -m "Initial superproject"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/pub.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/work/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/work/gar/bage/.git/
[main (root-commit) 6fbe593] Initial junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk
warning: adding embedded git repository: gar/bage
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> gar/bage
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached gar/bage
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) 38ca8a3] Initial superproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 gar/bage
ok 1 - setup

expecting success of 5531.2 'push works with recorded gitlink': 
	(
		cd work &&
		git push ../pub.git main
	)

To ../pub.git
 * [new branch]      main -> main
ok 2 - push works with recorded gitlink

expecting success of 5531.3 'push if submodule has no remote': 
	(
		cd work/gar/bage &&
		>junk2 &&
		git add junk2 &&
		git commit -m "Second junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Second commit for gar/bage" &&
		git push --recurse-submodules=check ../pub.git main
	)

[main def33d6] Second junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk2
[main 61d752a] Second commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../pub.git
   38ca8a3..61d752a  main -> main
ok 3 - push if submodule has no remote

expecting success of 5531.4 'push fails if submodule commit not on remote': 
	(
		cd work/gar &&
		git clone --bare bage ../../submodule.git &&
		cd bage &&
		git remote add origin ../../../submodule.git &&
		git fetch &&
		>junk3 &&
		git add junk3 &&
		git commit -m "Third junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Third commit for gar/bage" &&
		# the push should fail with --recurse-submodules=check
		# on the command line...
		test_must_fail git push --recurse-submodules=check ../pub.git main &&

		# ...or if specified in the configuration..
		test_must_fail git -c push.recurseSubmodules=check push ../pub.git main
	)

Cloning into bare repository '../../submodule.git'...
done.
From ../../../submodule
 * [new branch]      main       -> origin/main
[main 18a8afc] Third junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk3
[main 7484e0a] Third commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
ok 4 - push fails if submodule commit not on remote

expecting success of 5531.5 'push succeeds after commit was pushed to remote': 
	(
		cd work/gar/bage &&
		git push origin main
	) &&
	(
		cd work &&
		git push --recurse-submodules=check ../pub.git main
	)

To ../../../submodule.git
   def33d6..18a8afc  main -> main
To ../pub.git
   61d752a..7484e0a  main -> main
ok 5 - push succeeds after commit was pushed to remote

expecting success of 5531.6 'push succeeds if submodule commit not on remote but using on-demand on command line': 
	(
		cd work/gar/bage &&
		>recurse-on-demand-on-command-line &&
		git add recurse-on-demand-on-command-line &&
		git commit -m "Recurse on-demand on command line junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse on-demand on command line for gar/bage" &&
		git push --recurse-submodules=on-demand ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# Check that the submodule commit got there too
		cd gar/bage &&
		git diff --quiet origin/main main
	)

[main 04ec359] Recurse on-demand on command line junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-on-demand-on-command-line
[main 034803e] Recurse on-demand on command line for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   18a8afc..04ec359  main -> main
To ../pub.git
   7484e0a..034803e  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 6 - push succeeds if submodule commit not on remote but using on-demand on command line

expecting success of 5531.7 'push succeeds if submodule commit not on remote but using on-demand from config': 
	(
		cd work/gar/bage &&
		>recurse-on-demand-from-config &&
		git add recurse-on-demand-from-config &&
		git commit -m "Recurse on-demand from config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse on-demand from config for gar/bage" &&
		git -c push.recurseSubmodules=on-demand push ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# Check that the submodule commit got there too
		cd gar/bage &&
		git diff --quiet origin/main main
	)

[main cc28292] Recurse on-demand from config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-on-demand-from-config
[main 85a50af] Recurse on-demand from config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   04ec359..cc28292  main -> main
To ../pub.git
   034803e..85a50af  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 7 - push succeeds if submodule commit not on remote but using on-demand from config

expecting success of 5531.8 'push succeeds if submodule commit not on remote but using auto-on-demand via submodule.recurse config': 
	(
		cd work/gar/bage &&
		>recurse-on-demand-from-submodule-recurse-config &&
		git add recurse-on-demand-from-submodule-recurse-config &&
		git commit -m "Recurse submodule.recurse from config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse submodule.recurse from config for gar/bage" &&
		git -c submodule.recurse push ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# Check that the submodule commit got there too
		cd gar/bage &&
		git diff --quiet origin/main main
	)

[main f05bcc4] Recurse submodule.recurse from config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-on-demand-from-submodule-recurse-config
[main 937e43c] Recurse submodule.recurse from config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   cc28292..f05bcc4  main -> main
To ../pub.git
   85a50af..937e43c  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 8 - push succeeds if submodule commit not on remote but using auto-on-demand via submodule.recurse config

expecting success of 5531.9 'push recurse-submodules on command line overrides config': 
	(
		cd work/gar/bage &&
		>recurse-check-on-command-line-overriding-config &&
		git add recurse-check-on-command-line-overriding-config &&
		git commit -m "Recurse on command-line overriding config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse on command-line overriding config for gar/bage" &&

		# Ensure that we can override on-demand in the config
		# to just check submodules
		test_must_fail git -c push.recurseSubmodules=on-demand push --recurse-submodules=check ../pub.git main &&
		# Check that the supermodule commit did not get there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main^ &&
		# Check that the submodule commit did not get there
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# Ensure that we can override check in the config to
		# disable submodule recursion entirely
		(cd gar/bage && git diff --quiet origin/main main^) &&
		git -c push.recurseSubmodules=on-demand push --recurse-submodules=no ../pub.git main &&
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# Ensure that we can override check in the config to
		# disable submodule recursion entirely (alternative form)
		git -c push.recurseSubmodules=on-demand push --no-recurse-submodules ../pub.git main &&
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# Ensure that we can override check in the config to
		# push the submodule too
		git -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git main &&
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		(cd gar/bage && git diff --quiet origin/main main)
	)

[main b5bd2c4] Recurse on command-line overriding config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-check-on-command-line-overriding-config
[main 97693ab] Recurse on command-line overriding config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
From ../pub
 * branch            HEAD       -> FETCH_HEAD
To ../pub.git
   937e43c..97693ab  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
Everything up-to-date
From ../pub
 * branch            HEAD       -> FETCH_HEAD
Pushing submodule 'gar/bage'
To ../../../submodule.git
   f05bcc4..b5bd2c4  main -> main
Everything up-to-date
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 9 - push recurse-submodules on command line overrides config

expecting success of 5531.10 'push recurse-submodules last one wins on command line': 
	(
		cd work/gar/bage &&
		>recurse-check-on-command-line-overriding-earlier-command-line &&
		git add recurse-check-on-command-line-overriding-earlier-command-line &&
		git commit -m "Recurse on command-line overridiing earlier command-line junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse on command-line overriding earlier command-line for gar/bage" &&

		# should result in "check"
		test_must_fail git push --recurse-submodules=on-demand --recurse-submodules=check ../pub.git main &&
		# Check that the supermodule commit did not get there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main^ &&
		# Check that the submodule commit did not get there
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# should result in "no"
		git push --recurse-submodules=on-demand --recurse-submodules=no ../pub.git main &&
		# Check that the supermodule commit did get there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# Check that the submodule commit did not get there
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# should result in "no"
		git push --recurse-submodules=on-demand --no-recurse-submodules ../pub.git main &&
		# Check that the submodule commit did not get there
		(cd gar/bage && git diff --quiet origin/main main^) &&

		# But the options in the other order should push the submodule
		git push --recurse-submodules=check --recurse-submodules=on-demand ../pub.git main &&
		# Check that the submodule commit did get there
		git fetch ../pub.git &&
		(cd gar/bage && git diff --quiet origin/main main)
	)

[main 5786194] Recurse on command-line overridiing earlier command-line junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-check-on-command-line-overriding-earlier-command-line
[main 24751d1] Recurse on command-line overriding earlier command-line for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
From ../pub
 * branch            HEAD       -> FETCH_HEAD
To ../pub.git
   97693ab..24751d1  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
Everything up-to-date
Pushing submodule 'gar/bage'
To ../../../submodule.git
   b5bd2c4..5786194  main -> main
Everything up-to-date
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 10 - push recurse-submodules last one wins on command line

expecting success of 5531.11 'push succeeds if submodule commit not on remote using on-demand from cmdline overriding config': 
	(
		cd work/gar/bage &&
		>recurse-on-demand-on-command-line-overriding-config &&
		git add recurse-on-demand-on-command-line-overriding-config &&
		git commit -m "Recurse on-demand on command-line overriding config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse on-demand on command-line overriding config for gar/bage" &&
		git -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# Check that the submodule commit got there
		cd gar/bage &&
		git diff --quiet origin/main main
	)

[main 1e38ba1] Recurse on-demand on command-line overriding config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-on-demand-on-command-line-overriding-config
[main e6b601f] Recurse on-demand on command-line overriding config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   5786194..1e38ba1  main -> main
To ../pub.git
   24751d1..e6b601f  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
ok 11 - push succeeds if submodule commit not on remote using on-demand from cmdline overriding config

expecting success of 5531.12 'push succeeds if submodule commit disabling recursion from cmdline overriding config': 
	(
		cd work/gar/bage &&
		>recurse-disable-on-command-line-overriding-config &&
		git add recurse-disable-on-command-line-overriding-config &&
		git commit -m "Recurse disable on command-line overriding config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse disable on command-line overriding config for gar/bage" &&
		git -c push.recurseSubmodules=check push --recurse-submodules=no ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# But that the submodule commit did not
		( cd gar/bage && git diff --quiet origin/main main^ ) &&
		# Now push it to avoid confusing future tests
		git push --recurse-submodules=on-demand ../pub.git main
	)

[main 0ec5589] Recurse disable on command-line overriding config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-disable-on-command-line-overriding-config
[main 87771bd] Recurse disable on command-line overriding config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../pub.git
   e6b601f..87771bd  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
Pushing submodule 'gar/bage'
To ../../../submodule.git
   1e38ba1..0ec5589  main -> main
Everything up-to-date
ok 12 - push succeeds if submodule commit disabling recursion from cmdline overriding config

expecting success of 5531.13 'push succeeds if submodule commit disabling recursion from cmdline (alternative form) overriding config': 
	(
		cd work/gar/bage &&
		>recurse-disable-on-command-line-alt-overriding-config &&
		git add recurse-disable-on-command-line-alt-overriding-config &&
		git commit -m "Recurse disable on command-line alternative overriding config junk"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse disable on command-line alternative overriding config for gar/bage" &&
		git -c push.recurseSubmodules=check push --no-recurse-submodules ../pub.git main &&
		# Check that the supermodule commit got there
		git fetch ../pub.git &&
		git diff --quiet FETCH_HEAD main &&
		# But that the submodule commit did not
		( cd gar/bage && git diff --quiet origin/main main^ ) &&
		# Now push it to avoid confusing future tests
		git push --recurse-submodules=on-demand ../pub.git main
	)

[main 8a95ebc] Recurse disable on command-line alternative overriding config junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-disable-on-command-line-alt-overriding-config
[main 58db74b] Recurse disable on command-line alternative overriding config for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../pub.git
   87771bd..58db74b  main -> main
From ../pub
 * branch            HEAD       -> FETCH_HEAD
Pushing submodule 'gar/bage'
To ../../../submodule.git
   0ec5589..8a95ebc  main -> main
Everything up-to-date
ok 13 - push succeeds if submodule commit disabling recursion from cmdline (alternative form) overriding config

expecting success of 5531.14 'submodule entry pointing at a tag is error': 
	git -C work/gar/bage tag -a test1 -m "tag" &&
	tag=$(git -C work/gar/bage rev-parse test1^{tag}) &&
	git -C work update-index --cacheinfo 160000 "$tag" gar/bage &&
	git -C work commit -m "bad commit" &&
	test_when_finished "git -C work reset --hard HEAD^" &&
	test_must_fail git -C work push --recurse-submodules=on-demand ../pub.git main 2>err &&
	test_i18ngrep "is a tag, not a commit" err

[main 58d58de] bad commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: submodule entry 'gar/bage' (158eaa063541ac49203e71fb5012f43df9559cf6) is a tag, not a commit
HEAD is now at 58db74b Recurse disable on command-line alternative overriding config for gar/bage
ok 14 - submodule entry pointing at a tag is error

expecting success of 5531.15 'push fails if recurse submodules option passed as yes': 
	(
		cd work/gar/bage &&
		>recurse-push-fails-if-recurse-submodules-passed-as-yes &&
		git add recurse-push-fails-if-recurse-submodules-passed-as-yes &&
		git commit -m "Recurse push fails if recurse submodules option passed as yes"
	) &&
	(
		cd work &&
		git add gar/bage &&
		git commit -m "Recurse push fails if recurse submodules option passed as yes for gar/bage" &&
		test_must_fail git push --recurse-submodules=yes ../pub.git main &&
		test_must_fail git -c push.recurseSubmodules=yes push ../pub.git main &&
		git push --recurse-submodules=on-demand ../pub.git main
	)

[main 631ecb2] Recurse push fails if recurse submodules option passed as yes
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 recurse-push-fails-if-recurse-submodules-passed-as-yes
[main 8ffc817] Recurse push fails if recurse submodules option passed as yes for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: bad recurse-submodules argument: yes
fatal: bad push.recursesubmodules argument: yes
Pushing submodule 'gar/bage'
To ../../../submodule.git
   8a95ebc..631ecb2  main -> main
To ../pub.git
   58db74b..8ffc817  main -> main
ok 15 - push fails if recurse submodules option passed as yes

expecting success of 5531.16 'push fails when commit on multiple branches if one branch has no remote': 
	(
		cd work/gar/bage &&
		>junk4 &&
		git add junk4 &&
		git commit -m "Fourth junk"
	) &&
	(
		cd work &&
		git branch branch2 &&
		git add gar/bage &&
		git commit -m "Fourth commit for gar/bage" &&
		git checkout branch2 &&
		(
			cd gar/bage &&
			git checkout HEAD~1
		) &&
		>junk1 &&
		git add junk1 &&
		git commit -m "First junk" &&
		test_must_fail git push --recurse-submodules=check ../pub.git
	)

[main c5a29bf] Fourth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk4
[main 357d056] Fourth commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'branch2'
M	gar/bage
Note: switching to 'HEAD~1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 631ecb2 Recurse push fails if recurse submodules option passed as yes
[branch2 c7025c9] First junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk1
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
ok 16 - push fails when commit on multiple branches if one branch has no remote

expecting success of 5531.17 'push succeeds if submodule has no remote and is on the first superproject commit': 
	git init --bare a &&
	git clone a a1 &&
	(
		cd a1 &&
		git init b &&
		(
			cd b &&
			>junk &&
			git add junk &&
			git commit -m "initial"
		) &&
		git add b &&
		git commit -m "added submodule" &&
		git push --recurse-submodules=check origin main
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/a/
Cloning into 'a1'...
warning: You appear to have cloned an empty repository.
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/a1/b/.git/
[main (root-commit) f055ed5] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk
warning: adding embedded git repository: b
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> b
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached b
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) c2121a0] added submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 b
To /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/a
 * [new branch]      main -> main
ok 17 - push succeeds if submodule has no remote and is on the first superproject commit

expecting success of 5531.18 'push unpushed submodules when not needed': 
	(
		cd work &&
		(
			cd gar/bage &&
			git checkout main &&
			>junk5 &&
			git add junk5 &&
			git commit -m "Fifth junk" &&
			git push &&
			git rev-parse origin/main >../../../expected
		) &&
		git checkout main &&
		git add gar/bage &&
		git commit -m "Fifth commit for gar/bage" &&
		git push --recurse-submodules=on-demand ../pub.git main
	) &&
	(
		cd submodule.git &&
		git rev-parse main >../actual
	) &&
	test_cmp expected actual

Previous HEAD position was 631ecb2 Recurse push fails if recurse submodules option passed as yes
Switched to branch 'main'
[main 1c18247] Fifth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk5
To ../../../submodule.git
   631ecb2..1c18247  main -> main
Switched to branch 'main'
M	gar/bage
[main 7c1f605] Fifth commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../pub.git
   8ffc817..7c1f605  main -> main
ok 18 - push unpushed submodules when not needed

expecting success of 5531.19 'push unpushed submodules when not needed 2': 
	(
		cd submodule.git &&
		git rev-parse main >../expected
	) &&
	(
		cd work &&
		(
			cd gar/bage &&
			>junk6 &&
			git add junk6 &&
			git commit -m "Sixth junk"
		) &&
		>junk2 &&
		git add junk2 &&
		git commit -m "Second junk for work" &&
		git push --recurse-submodules=on-demand ../pub.git main
	) &&
	(
		cd submodule.git &&
		git rev-parse main >../actual
	) &&
	test_cmp expected actual

[main bf3a7b7] Sixth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk6
[main 4df5b78] Second junk for work
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk2
To ../pub.git
   7c1f605..4df5b78  main -> main
ok 19 - push unpushed submodules when not needed 2

expecting success of 5531.20 'push unpushed submodules recursively': 
	(
		cd work &&
		(
			cd gar/bage &&
			git checkout main &&
			> junk7 &&
			git add junk7 &&
			git commit -m "Seventh junk" &&
			git rev-parse main >../../../expected
		) &&
		git checkout main &&
		git add gar/bage &&
		git commit -m "Seventh commit for gar/bage" &&
		git push --recurse-submodules=on-demand ../pub.git main
	) &&
	(
		cd submodule.git &&
		git rev-parse main >../actual
	) &&
	test_cmp expected actual

Already on 'main'
[main e687a1f] Seventh junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk7
Already on 'main'
M	gar/bage
[main e7bbb73] Seventh commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   1c18247..e687a1f  main -> main
To ../pub.git
   4df5b78..e7bbb73  main -> main
ok 20 - push unpushed submodules recursively

expecting success of 5531.21 'push unpushable submodule recursively fails': 
	(
		cd work &&
		(
			cd gar/bage &&
			git rev-parse origin/main >../../../expected &&
			git checkout main~0 &&
			> junk8 &&
			git add junk8 &&
			git commit -m "Eighth junk"
		) &&
		git add gar/bage &&
		git commit -m "Eighth commit for gar/bage" &&
		test_must_fail git push --recurse-submodules=on-demand ../pub.git main
	) &&
	(
		cd submodule.git &&
		git rev-parse main >../actual
	) &&
	test_when_finished git -C work reset --hard main^ &&
	test_cmp expected actual

Note: switching to 'main~0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e687a1f Seventh junk
[detached HEAD 9c6181e] Eighth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk8
[main 55d30e4] Eighth commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
Everything up-to-date
The following submodule paths contain changes that can
not be found on any remote:
  gar/bage

Please try

	git push --recurse-submodules=on-demand

or cd to the path and use

	git push

to push them to a remote.

fatal: Aborting.
fatal: the remote end hung up unexpectedly
HEAD is now at e7bbb73 Seventh commit for gar/bage
ok 21 - push unpushable submodule recursively fails

expecting success of 5531.22 'push --dry-run does not recursively update submodules': 
	(
		cd work/gar/bage &&
		git checkout main &&
		git rev-parse main >../../../expected_submodule &&
		> junk9 &&
		git add junk9 &&
		git commit -m "Ninth junk" &&

		# Go up to work directory
		cd ../.. &&
		git checkout main &&
		git rev-parse main >../expected_pub &&
		git add gar/bage &&
		git commit -m "Ninth commit for gar/bage" &&
		git push --dry-run --recurse-submodules=on-demand ../pub.git main
	) &&
	git -C submodule.git rev-parse main >actual_submodule &&
	git -C pub.git rev-parse main >actual_pub &&
	test_cmp expected_pub actual_pub &&
	test_cmp expected_submodule actual_submodule

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  9c6181e Eighth junk

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 9c6181e

Switched to branch 'main'
[main 98997b9] Ninth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk9
Already on 'main'
M	gar/bage
[main abf9a2f] Ninth commit for gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   e687a1f..98997b9  main -> main
To ../pub.git
   e7bbb73..abf9a2f  main -> main
ok 22 - push --dry-run does not recursively update submodules

expecting success of 5531.23 'push --dry-run does not recursively update submodules': 
	git -C work push --dry-run --recurse-submodules=only ../pub.git main &&

	git -C submodule.git rev-parse main >actual_submodule &&
	git -C pub.git rev-parse main >actual_pub &&
	test_cmp expected_pub actual_pub &&
	test_cmp expected_submodule actual_submodule

Pushing submodule 'gar/bage'
To ../../../submodule.git
   e687a1f..98997b9  main -> main
Everything up-to-date
ok 23 - push --dry-run does not recursively update submodules

expecting success of 5531.24 'push only unpushed submodules recursively': 
	git -C work/gar/bage rev-parse main >expected_submodule &&
	git -C pub.git rev-parse main >expected_pub &&

	git -C work push --recurse-submodules=only ../pub.git main &&

	git -C submodule.git rev-parse main >actual_submodule &&
	git -C pub.git rev-parse main >actual_pub &&
	test_cmp expected_submodule actual_submodule &&
	test_cmp expected_pub actual_pub

Pushing submodule 'gar/bage'
To ../../../submodule.git
   e687a1f..98997b9  main -> main
Everything up-to-date
ok 24 - push only unpushed submodules recursively

expecting success of 5531.25 'push with push.recurseSubmodules=only on superproject': 
	test_when_finished rm -rf upstream downstream &&
	setup_subsub &&
	new_downstream_commits &&
	git -C downstream config push.recurseSubmodules only &&
	git -C downstream push origin downstream-branch &&

	test_must_fail git -C upstream rev-parse refs/heads/downstream-branch &&
	git -C upstream/sub rev-parse refs/heads/downstream-branch &&
	test_must_fail git -C upstream/sub/deepsub rev-parse refs/heads/downstream-branch

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/deepsub/.git/
[main (root-commit) 474120f] innermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 innermost.t
Adding existing repo at 'deepsub' to the index
[main (root-commit) 368641e] middle
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 deepsub
Adding existing repo at 'sub' to the index
[main (root-commit) 2115e6c] outermost
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'downstream'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/downstream/sub'...
done.
Submodule path 'sub': checked out '368641e94e5de2829cfae22976de19274d54c11a'
Submodule 'deepsub' (/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/deepsub) registered for path 'sub/deepsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/downstream/sub/deepsub'...
done.
Submodule path 'sub/deepsub': checked out '474120f894f05445b107cd92961d883bc2877e80'
Switched to a new branch 'downstream-branch'
Switched to a new branch 'downstream-branch'
Switched to a new branch 'downstream-branch'
[downstream-branch 0d0452a] new-innermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-innermost.t
[downstream-branch b40b258] new-middle
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[downstream-branch 84df116] new-outermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'sub'
To /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub
 * [new branch]      downstream-branch -> downstream-branch
Everything up-to-date
fatal: ambiguous argument 'refs/heads/downstream-branch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/downstream-branch
b40b2588b54182e5d2c2979598807b69c2e9ca4f
fatal: ambiguous argument 'refs/heads/downstream-branch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/downstream-branch
ok 25 - push with push.recurseSubmodules=only on superproject

expecting success of 5531.26 'push with push.recurseSubmodules=only on superproject and top-level submodule': 
	test_when_finished rm -rf upstream downstream &&
	setup_subsub &&
	new_downstream_commits &&
	git -C downstream config push.recurseSubmodules only &&
	git -C downstream/sub config push.recurseSubmodules only &&
	git -C downstream push origin downstream-branch 2> err &&

	test_must_fail git -C upstream rev-parse refs/heads/downstream-branch &&
	git -C upstream/sub rev-parse refs/heads/downstream-branch &&
	git -C upstream/sub/deepsub rev-parse refs/heads/downstream-branch &&
	grep "recursing into submodule with push.recurseSubmodules=only; using on-demand instead" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/deepsub/.git/
[main (root-commit) ff9df1c] innermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 innermost.t
Adding existing repo at 'deepsub' to the index
[main (root-commit) 1491354] middle
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 deepsub
Adding existing repo at 'sub' to the index
[main (root-commit) fc64eab] outermost
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'downstream'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/downstream/sub'...
done.
Submodule path 'sub': checked out '14913541b28e52bad23119683708fc45d9376bed'
Submodule 'deepsub' (/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/upstream/sub/deepsub) registered for path 'sub/deepsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5531-deep-submodule-push/downstream/sub/deepsub'...
done.
Submodule path 'sub/deepsub': checked out 'ff9df1cde3a7559405c3c1eeb7ea710d906115a8'
Switched to a new branch 'downstream-branch'
Switched to a new branch 'downstream-branch'
Switched to a new branch 'downstream-branch'
[downstream-branch 8f905ff] new-innermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-innermost.t
[downstream-branch 6cfd390] new-middle
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[downstream-branch bc3808e] new-outermost
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: ambiguous argument 'refs/heads/downstream-branch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/downstream-branch
6cfd3906f0122ec7421e24d2d05931a113c1bb83
8f905ff36854342cf7f1871351b72bfe2022e9d6
warning: recursing into submodule with push.recurseSubmodules=only; using on-demand instead
ok 26 - push with push.recurseSubmodules=only on superproject and top-level submodule

expecting success of 5531.27 'push propagating the remotes name to a submodule': 
	git -C work remote add origin ../pub.git &&
	git -C work remote add pub ../pub.git &&

	> work/gar/bage/junk10 &&
	git -C work/gar/bage add junk10 &&
	git -C work/gar/bage commit -m "Tenth junk" &&
	git -C work add gar/bage &&
	git -C work commit -m "Tenth junk added to gar/bage" &&

	# Fails when submodule does not have a matching remote
	test_must_fail git -C work push --recurse-submodules=on-demand pub main &&
	# Succeeds when submodules has matching remote and refspec
	git -C work push --recurse-submodules=on-demand origin main &&

	git -C submodule.git rev-parse main >actual_submodule &&
	git -C pub.git rev-parse main >actual_pub &&
	git -C work/gar/bage rev-parse main >expected_submodule &&
	git -C work rev-parse main >expected_pub &&
	test_cmp expected_submodule actual_submodule &&
	test_cmp expected_pub actual_pub

[main ba83752] Tenth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk10
[main 9ea36f0] Tenth junk added to gar/bage
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: remote 'pub' not configured
fatal: process for submodule 'gar/bage' failed
fatal: the remote end hung up unexpectedly
Pushing submodule 'gar/bage'
To ../../../submodule.git
   98997b9..ba83752  main -> main
To ../pub.git
   e7bbb73..9ea36f0  main -> main
ok 27 - push propagating the remotes name to a submodule

expecting success of 5531.28 'push propagating refspec to a submodule': 
	> work/gar/bage/junk11 &&
	git -C work/gar/bage add junk11 &&
	git -C work/gar/bage commit -m "Eleventh junk" &&

	git -C work checkout branch2 &&
	git -C work add gar/bage &&
	git -C work commit -m "updating gar/bage in branch2" &&

	# Fails when submodule does not have a matching branch
	test_must_fail git -C work push --recurse-submodules=on-demand origin branch2 &&
	# Fails when refspec includes an object id
	test_must_fail git -C work push --recurse-submodules=on-demand origin \
		"$(git -C work rev-parse branch2):refs/heads/branch2" &&
	# Fails when refspec includes HEAD and parent and submodule do not
	# have the same named branch checked out
	test_must_fail git -C work push --recurse-submodules=on-demand origin \
		HEAD:refs/heads/branch2 &&

	git -C work/gar/bage branch branch2 main &&
	git -C work push --recurse-submodules=on-demand origin branch2 &&

	git -C submodule.git rev-parse branch2 >actual_submodule &&
	git -C pub.git rev-parse branch2 >actual_pub &&
	git -C work/gar/bage rev-parse branch2 >expected_submodule &&
	git -C work rev-parse branch2 >expected_pub &&
	test_cmp expected_submodule actual_submodule &&
	test_cmp expected_pub actual_pub

[main f5bf038] Eleventh junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk11
Switched to branch 'branch2'
M	gar/bage
[branch2 e90f65a] updating gar/bage in branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: src refspec 'branch2' must name a ref
fatal: process for submodule 'gar/bage' failed
fatal: the remote end hung up unexpectedly
fatal: src refspec 'e90f65a59e381ada484131b40a354ef272b4fe2d' must name a ref
fatal: process for submodule 'gar/bage' failed
fatal: the remote end hung up unexpectedly
fatal: HEAD does not match the named branch in the superproject
fatal: process for submodule 'gar/bage' failed
fatal: the remote end hung up unexpectedly
Pushing submodule 'gar/bage'
To ../../../submodule.git
 * [new branch]      branch2 -> branch2
To ../pub.git
 * [new branch]      branch2 -> branch2
ok 28 - push propagating refspec to a submodule

expecting success of 5531.29 'push propagating HEAD refspec to a submodule': 
	git -C work/gar/bage checkout branch2 &&
	> work/gar/bage/junk12 &&
	git -C work/gar/bage add junk12 &&
	git -C work/gar/bage commit -m "Twelfth junk" &&

	git -C work checkout branch2 &&
	git -C work add gar/bage &&
	git -C work commit -m "updating gar/bage in branch2" &&

	# Passes since the superproject and submodules HEAD are both on branch2
	git -C work push --recurse-submodules=on-demand origin \
		HEAD:refs/heads/branch2 &&

	git -C submodule.git rev-parse branch2 >actual_submodule &&
	git -C pub.git rev-parse branch2 >actual_pub &&
	git -C work/gar/bage rev-parse branch2 >expected_submodule &&
	git -C work rev-parse branch2 >expected_pub &&
	test_cmp expected_submodule actual_submodule &&
	test_cmp expected_pub actual_pub

Switched to branch 'branch2'
[branch2 70ffd3e] Twelfth junk
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 junk12
Already on 'branch2'
M	gar/bage
[branch2 0c08f34] updating gar/bage in branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'gar/bage'
To ../../../submodule.git
   f5bf038..70ffd3e  HEAD -> branch2
To ../pub.git
   e90f65a..0c08f34  HEAD -> branch2
ok 29 - push propagating HEAD refspec to a submodule

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5537-fetch-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/.git/
expecting success of 5537.1 'setup': 
	commit 1 &&
	commit 2 &&
	commit 3 &&
	commit 4 &&
	git config --global transfer.fsckObjects true &&
	test_oid_cache <<-\EOF
	perl sha1:s/0034shallow %s/0036unshallow %s/
	perl sha256:s/004cshallow %s/004eunshallow %s/
	EOF

[main (root-commit) 866032c] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tracked
[main 5c48a96] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d5dbd47] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9c53269] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5537.2 'setup shallow clone': 
	git clone --no-local --depth=2 .git shallow &&
	git --git-dir=shallow/.git log --format=%s >actual &&
	test_write_lines 4 3 >expect &&
	test_cmp expect actual

Cloning into 'shallow'...
ok 2 - setup shallow clone

expecting success of 5537.3 'clone from shallow clone': 
	git clone --no-local shallow shallow2 &&
	(
	cd shallow2 &&
	git fsck &&
	git log --format=%s >actual &&
	test_write_lines 4 3 >expect &&
	test_cmp expect actual
	)

Cloning into 'shallow2'...
ok 3 - clone from shallow clone

expecting success of 5537.4 'fetch from shallow clone': 
	(
	cd shallow &&
	commit 5
	) &&
	(
	cd shallow2 &&
	git fetch &&
	git fsck &&
	git log --format=%s origin/main >actual &&
	test_write_lines 5 4 3 >expect &&
	test_cmp expect actual
	)

[main a94059e] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/shallow
   9c53269..a94059e  main       -> origin/main
ok 4 - fetch from shallow clone

expecting success of 5537.5 'fetch --depth from shallow clone': 
	(
	cd shallow &&
	commit 6
	) &&
	(
	cd shallow2 &&
	git fetch --depth=2 &&
	git fsck &&
	git log --format=%s origin/main >actual &&
	test_write_lines 6 5 >expect &&
	test_cmp expect actual
	)

[main 27db150] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/shallow
   a94059e..27db150  main       -> origin/main
ok 5 - fetch --depth from shallow clone

expecting success of 5537.6 'fetch --unshallow from shallow clone': 
	(
	cd shallow2 &&
	git fetch --unshallow &&
	git fsck &&
	git log --format=%s origin/main >actual &&
	test_write_lines 6 5 4 3 >expect &&
	test_cmp expect actual
	)

ok 6 - fetch --unshallow from shallow clone

expecting success of 5537.7 'fetch --unshallow from a full clone': 
	git clone --no-local --depth=2 .git shallow3 &&
	(
	cd shallow3 &&
	git log --format=%s >actual &&
	test_write_lines 4 3 >expect &&
	test_cmp expect actual &&
	git -c fetch.writeCommitGraph fetch --unshallow &&
	git log origin/main --format=%s >actual &&
	test_write_lines 4 3 2 1 >expect &&
	test_cmp expect actual
	)

Cloning into 'shallow3'...
ok 7 - fetch --unshallow from a full clone

expecting success of 5537.8 'fetch something upstream has but hidden by clients shallow boundaries': 
	# the blob "1" is available in .git but hidden by the
	# shallow2/.git/shallow and it should be resent
	! git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null &&
	echo 1 >1.t &&
	git add 1.t &&
	git commit -m add-1-back &&
	(
	cd shallow2 &&
	git fetch ../.git +refs/heads/main:refs/remotes/top/main &&
	git fsck &&
	git log --format=%s top/main >actual &&
	test_write_lines add-1-back 4 3 >expect &&
	test_cmp expect actual
	) &&
	git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null

fatal: git cat-file d00491fd7e5bb6fa28c517a0bb32b8b506539d4d: bad file
[main c7f5970] add-1-back
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
From ../
 * [new branch]      main       -> top/main
ok 8 - fetch something upstream has but hidden by clients shallow boundaries

expecting success of 5537.9 'fetch that requires changes in .git/shallow is filtered': 
	(
	cd shallow &&
	git checkout --orphan no-shallow &&
	commit no-shallow
	) &&
	git init notshallow &&
	(
	cd notshallow &&
	git fetch ../shallow/.git refs/heads/*:refs/remotes/shallow/* &&
	git for-each-ref --format="%(refname)" >actual.refs &&
	echo refs/remotes/shallow/no-shallow >expect.refs &&
	test_cmp expect.refs actual.refs &&
	git log --format=%s shallow/no-shallow >actual &&
	echo no-shallow >expect &&
	test_cmp expect actual
	)

Switched to a new branch 'no-shallow'
[no-shallow (root-commit) 20d88d1] no-shallow
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tracked
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/notshallow/.git/
warning: rejected refs/remotes/shallow/main because shallow roots are not allowed to be updated
From ../shallow/
 * [new branch]      no-shallow -> shallow/no-shallow
ok 9 - fetch that requires changes in .git/shallow is filtered

expecting success of 5537.10 'fetch --update-shallow': 
	(
	cd shallow &&
	git checkout main &&
	commit 7 &&
	git tag -m foo heavy-tag HEAD^ &&
	git tag light-tag HEAD^:tracked
	) &&
	(
	cd notshallow &&
	git fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/* &&
	git fsck &&
	git for-each-ref --sort=refname --format="%(refname)" >actual.refs &&
	cat <<-\EOF >expect.refs &&
	refs/remotes/shallow/main
	refs/remotes/shallow/no-shallow
	refs/tags/heavy-tag
	refs/tags/light-tag
	EOF
	test_cmp expect.refs actual.refs &&
	git log --format=%s shallow/main >actual &&
	test_write_lines 7 6 5 4 3 >expect &&
	test_cmp expect actual
	)

Switched to branch 'main'
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)
[main 96c85b9] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
error: Could not read 5c48a96478ec5c4cbce662a4a0a6f0be5ce4e6ab
error: Could not read 5c48a96478ec5c4cbce662a4a0a6f0be5ce4e6ab
From ../shallow/
 * [new branch]      main       -> shallow/main
 * [new tag]         heavy-tag  -> heavy-tag
 * [new tag]         light-tag  -> light-tag
notice: HEAD points to an unborn branch (main)
ok 10 - fetch --update-shallow

expecting success of 5537.11 'fetch --update-shallow into a repo with submodules': 
	test_config_global protocol.file.allow always &&

	git init a-submodule &&
	test_commit -C a-submodule foo &&

	test_when_finished "rm -rf repo-with-sub" &&
	git init repo-with-sub &&
	git -C repo-with-sub submodule add ../a-submodule a-submodule &&
	git -C repo-with-sub commit -m "added submodule" &&
	git -C repo-with-sub fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/*

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/a-submodule/.git/
[main (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/repo-with-sub/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/repo-with-sub/a-submodule'...
done.
[main (root-commit) 56fa32c] added submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 a-submodule
From ../shallow/
 * [new branch]      main       -> shallow/main
 * [new branch]      no-shallow -> shallow/no-shallow
 * [new tag]         heavy-tag  -> heavy-tag
 * [new tag]         light-tag  -> light-tag
ok 11 - fetch --update-shallow into a repo with submodules

expecting success of 5537.12 'fetch --update-shallow a commit that is also a shallow point into a repo with submodules': 
	test_when_finished "rm -rf repo-with-sub" &&
	git init repo-with-sub &&
	git -c protocol.file.allow=always -C repo-with-sub \
		submodule add ../a-submodule a-submodule &&
	git -C repo-with-sub commit -m "added submodule" &&

	SHALLOW=$(cat shallow/.git/shallow) &&
	git -C repo-with-sub fetch --update-shallow ../shallow/.git "$SHALLOW":refs/heads/a-shallow

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/repo-with-sub/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/repo-with-sub/a-submodule'...
done.
[main (root-commit) 56fa32c] added submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 a-submodule
From ../shallow/
 * [new ref]         d5dbd47cd66da3fef8e2dc8e29365d2cf57dc0a2 -> a-shallow
ok 12 - fetch --update-shallow a commit that is also a shallow point into a repo with submodules

expecting success of 5537.13 'fetch --update-shallow (with fetch.writeCommitGraph)': 
	(
	cd shallow &&
	git checkout main &&
	commit 8 &&
	git tag -m foo heavy-tag-for-graph HEAD^ &&
	git tag light-tag-for-graph HEAD^:tracked
	) &&
	test_config -C notshallow fetch.writeCommitGraph true &&
	(
	cd notshallow &&
	git fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/* &&
	git fsck &&
	git for-each-ref --sort=refname --format="%(refname)" >actual.refs &&
	cat <<-EOF >expect.refs &&
	refs/remotes/shallow/main
	refs/remotes/shallow/no-shallow
	refs/tags/heavy-tag
	refs/tags/heavy-tag-for-graph
	refs/tags/light-tag
	refs/tags/light-tag-for-graph
	EOF
	test_cmp expect.refs actual.refs &&
	git log --format=%s shallow/main >actual &&
	test_write_lines 8 7 6 5 4 3 >expect &&
	test_cmp expect actual
	)

Already on 'main'
Your branch is ahead of 'origin/main' by 3 commits.
  (use "git push" to publish your local commits)
[main a02f4de] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From ../shallow/
   96c85b9..a02f4de  main                -> shallow/main
 * [new tag]         heavy-tag-for-graph -> heavy-tag-for-graph
 * [new tag]         light-tag-for-graph -> light-tag-for-graph
notice: HEAD points to an unborn branch (main)
ok 13 - fetch --update-shallow (with fetch.writeCommitGraph)

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 5537.14 'shallow fetch from a read-only repo': 
	cp -R .git read-only.git &&
	test_when_finished "find read-only.git -type d -print | xargs chmod +w" &&
	find read-only.git -print | xargs chmod -w &&
	git clone --no-local --depth=2 read-only.git from-read-only &&
	git --git-dir=from-read-only/.git log --format=%s >actual &&
	test_write_lines add-1-back 4 >expect &&
	test_cmp expect actual

Cloning into 'from-read-only'...
ok 14 - shallow fetch from a read-only repo

expecting success of 5537.15 '.git/shallow is edited by repack': 
	git init shallow-server &&
	test_commit -C shallow-server A &&
	test_commit -C shallow-server B &&
	git -C shallow-server checkout -b branch &&
	test_commit -C shallow-server C &&
	test_commit -C shallow-server E &&
	test_commit -C shallow-server D &&
	d="$(git -C shallow-server rev-parse --verify D^0)" &&
	git -C shallow-server checkout main &&

	git clone --depth=1 --no-tags --no-single-branch \
		"file://$PWD/shallow-server" shallow-client &&

	: now remove the branch and fetch with prune &&
	git -C shallow-server branch -D branch &&
	git -C shallow-client fetch --prune --depth=1 \
		origin "+refs/heads/*:refs/remotes/origin/*" &&
	git -C shallow-client repack -adfl &&
	test_must_fail git -C shallow-client rev-parse --verify $d^0 &&
	! grep $d shallow-client/.git/shallow &&

	git -C shallow-server branch branch-orig $d &&
	git -C shallow-client fetch --prune --depth=2 \
		origin "+refs/heads/*:refs/remotes/origin/*"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/shallow-server/.git/
[main (root-commit) 508df12] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9db1b4] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'branch'
[branch 3f529c6] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[branch 71381ce] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
[branch f6a9dde] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Switched to branch 'main'
Cloning into 'shallow-client'...
Deleted branch branch (was f6a9dde).
From file:///<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/shallow-server
 - [deleted]         (none)     -> origin/branch
fatal: Needed a single revision
From file:///<<PKGBUILDDIR>>/t/trash directory.t5537-fetch-shallow/shallow-server
 * [new branch]      branch-orig -> origin/branch-orig
ok 15 - .git/shallow is edited by repack

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 15 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5539-fetch-http-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5539-fetch-http-shallow/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5540-http-push-webdav.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5540-http-push-webdav/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5541-http-push-smart.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5541-http-push-smart/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5542-push-http-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5542-push-http-shallow/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5538-push-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5538-push-shallow/.git/
expecting success of 5538.1 'setup': 
	git config --global transfer.fsckObjects true &&
	commit 1 &&
	commit 2 &&
	commit 3 &&
	commit 4 &&
	git clone . full &&
	(
	git init full-abc &&
	cd full-abc &&
	commit a &&
	commit b &&
	commit c
	) &&
	git clone --no-local --depth=2 .git shallow &&
	git --git-dir=shallow/.git log --format=%s >actual &&
	cat <<EOF >expect &&
4
3
EOF
	test_cmp expect actual &&
	git clone --no-local --depth=2 full-abc/.git shallow2 &&
	git --git-dir=shallow2/.git log --format=%s >actual &&
	cat <<EOF >expect &&
c
b
EOF
	test_cmp expect actual

[main (root-commit) 866032c] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tracked
[main 5c48a96] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d5dbd47] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9c53269] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'full'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5538-push-shallow/full-abc/.git/
[main (root-commit) 5f99454] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tracked
[main 1cf9806] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 90fec16] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'shallow'...
Cloning into 'shallow2'...
ok 1 - setup

expecting success of 5538.2 'push from shallow clone': 
	(
	cd shallow &&
	commit 5 &&
	git push ../.git +main:refs/remotes/shallow/main
	) &&
	git log --format=%s shallow/main >actual &&
	git fsck &&
	cat <<EOF >expect &&
5
4
3
2
1
EOF
	test_cmp expect actual

[main a94059e] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To ../.git
 * [new reference]   main -> shallow/main
ok 2 - push from shallow clone

expecting success of 5538.3 'push from shallow clone, with grafted roots': 
	(
	cd shallow2 &&
	test_must_fail git push ../.git +main:refs/remotes/shallow2/main 2>err &&
	grep "shallow2/main.*shallow update not allowed" err
	) &&
	test_must_fail git rev-parse shallow2/main &&
	git fsck

 ! [remote rejected] main -> shallow2/main (shallow update not allowed)
fatal: ambiguous argument 'shallow2/main': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
shallow2/main
ok 3 - push from shallow clone, with grafted roots

expecting success of 5538.4 'add new shallow root with receive.updateshallow on': 
	test_config receive.shallowupdate true &&
	(
	cd shallow2 &&
	git push ../.git +main:refs/remotes/shallow2/main
	) &&
	git log --format=%s shallow2/main >actual &&
	git fsck &&
	cat <<EOF >expect &&
c
b
EOF
	test_cmp expect actual

To ../.git
 * [new reference]   main -> shallow2/main
ok 4 - add new shallow root with receive.updateshallow on

expecting success of 5538.5 'push from shallow to shallow': 
	(
	cd shallow &&
	git --git-dir=../shallow2/.git config receive.shallowupdate true &&
	git push ../shallow2/.git +main:refs/remotes/shallow/main &&
	git --git-dir=../shallow2/.git config receive.shallowupdate false
	) &&
	(
	cd shallow2 &&
	git log --format=%s shallow/main >actual &&
	git fsck &&
	cat <<EOF >expect &&
5
4
3
EOF
	test_cmp expect actual
	)

To ../shallow2/.git
 * [new reference]   main -> shallow/main
ok 5 - push from shallow to shallow

expecting success of 5538.6 'push from full to shallow': 
	! git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) &&
	commit 1 &&
	git push shallow2/.git +main:refs/remotes/top/main &&
	(
	cd shallow2 &&
	git log --format=%s top/main >actual &&
	git fsck &&
	cat <<EOF >expect &&
1
4
3
EOF
	test_cmp expect actual &&
	git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null
	)

fatal: git cat-file d00491fd7e5bb6fa28c517a0bb32b8b506539d4d: bad file
[main 4cfd8cc] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To shallow2/.git
 * [new reference]   main -> top/main
ok 6 - push from full to shallow

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5544-pack-objects-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5544-pack-objects-hook/.git/
expecting success of 5544.1 'create some history to fetch': 
	test_commit one &&
	test_commit two

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 1 - create some history to fetch

expecting success of 5544.2 'create debugging hook script': 
	write_script .git/hook <<-\EOF
		echo >&2 "hook running"
		echo "$*" >hook.args
		cat >hook.stdin
		"$@" <hook.stdin >hook.stdout
		cat hook.stdout
	EOF

ok 2 - create debugging hook script

expecting success of 5544.3 'hook runs via global config': 
	clear_hook_results &&
	test_config_global uploadpack.packObjectsHook ./hook &&
	git clone --no-local . dst.git 2>stderr &&
	grep "hook running" stderr

remote: hook running        
ok 3 - hook runs via global config

expecting success of 5544.4 'hook outputs are sane': 
	# check that we recorded a usable pack
	git index-pack --stdin <.git/hook.stdout &&

	# check that we recorded args and stdin. We do not check
	# the full argument list or the exact pack contents, as it would make
	# the test brittle. So just sanity check that we could replay
	# the packing procedure.
	grep "^git" .git/hook.args &&
	$(cat .git/hook.args) <.git/hook.stdin >replay

pack	2a0b62213eae197db6150718d99ad9a6e24df950
git pack-objects --revs --thin --stdout --delta-base-offset
ok 4 - hook outputs are sane

expecting success of 5544.5 'hook runs from -c config': 
	clear_hook_results &&
	git clone --no-local \
	  -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \
	  . dst.git 2>stderr &&
	grep "hook running" stderr

remote: hook running        
ok 5 - hook runs from -c config

expecting success of 5544.6 'hook does not run from repo config': 
	clear_hook_results &&
	test_config uploadpack.packObjectsHook "./hook" &&
	git clone --no-local . dst.git 2>stderr &&
	! grep "hook running" stderr &&
	test_path_is_missing .git/hook.args &&
	test_path_is_missing .git/hook.stdin &&
	test_path_is_missing .git/hook.stdout &&

	# check that global config is used instead
	test_config_global uploadpack.packObjectsHook ./hook &&
	git clone --no-local . dst2.git 2>stderr &&
	grep "hook running" stderr

remote: hook running        
ok 6 - hook does not run from repo config

expecting success of 5544.7 'hook works with partial clone': 
	clear_hook_results &&
	test_config_global uploadpack.packObjectsHook ./hook &&
	test_config_global uploadpack.allowFilter true &&
	git clone --bare --no-local --filter=blob:none . dst.git &&
	git -C dst.git rev-list --objects --missing=allow-any --no-object-names --all >objects &&
	git -C dst.git cat-file --batch-check="%(objecttype)" <objects >types &&
	! grep blob types

Cloning into bare repository 'dst.git'...
remote: hook running        
ok 7 - hook works with partial clone

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5533-push-cas.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/.git/
expecting success of 5533.1 'setup': 
	# create template repository
	test_commit A &&
	test_commit B &&
	test_commit C

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
ok 1 - setup

expecting success of 5533.2 'push to update (protected)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		test_commit D &&
		test_must_fail git push --force-with-lease=main:main origin main 2>err &&
		grep "stale info" err
	) &&
	git ls-remote . refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
 ! [rejected]        main -> main (stale info)
ok 2 - push to update (protected)

expecting success of 5533.3 'push to update (protected, forced)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		test_commit D &&
		git push --force --force-with-lease=main:main origin main 2>err &&
		grep "forced update" err
	) &&
	git ls-remote dst refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
 + 35a8500...be8f64f main -> main (forced update)
ok 3 - push to update (protected, forced)

expecting success of 5533.4 'push to update (protected, tracking)': 
	setup_srcdst_basic &&
	(
		cd src &&
		git checkout main &&
		test_commit D &&
		git checkout HEAD^0
	) &&
	git ls-remote src refs/heads/main >expect &&
	(
		cd dst &&
		test_commit E &&
		git ls-remote . refs/remotes/origin/main >expect &&
		test_must_fail git push --force-with-lease=main origin main &&
		git ls-remote . refs/remotes/origin/main >actual &&
		test_cmp expect actual
	) &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at be8f64f D
[main 3e7056f] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 ! [rejected]        main -> main (stale info)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src'
ok 4 - push to update (protected, tracking)

expecting success of 5533.5 'push to update (protected, tracking, forced)': 
	setup_srcdst_basic &&
	(
		cd src &&
		git checkout main &&
		test_commit D &&
		git checkout HEAD^0
	) &&
	(
		cd dst &&
		test_commit E &&
		git ls-remote . refs/remotes/origin/main >expect &&
		git push --force --force-with-lease=main origin main
	) &&
	git ls-remote dst refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at be8f64f D
[main 3e7056f] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 + be8f64f...3e7056f main -> main (forced update)
ok 5 - push to update (protected, tracking, forced)

expecting success of 5533.6 'push to update (allowed)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		test_commit D &&
		git push --force-with-lease=main:main^ origin main
	) &&
	git ls-remote dst refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
   35a8500..be8f64f  main -> main
ok 6 - push to update (allowed)

expecting success of 5533.7 'push to update (allowed, tracking)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		test_commit D &&
		git push --force-with-lease=main origin main 2>err &&
		! grep "forced update" err
	) &&
	git ls-remote dst refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
ok 7 - push to update (allowed, tracking)

expecting success of 5533.8 'push to update (allowed even though no-ff)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		git reset --hard HEAD^ &&
		test_commit D &&
		git push --force-with-lease=main origin main 2>err &&
		grep "forced update" err
	) &&
	git ls-remote dst refs/heads/main >expect &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
HEAD is now at d9df450 B
[main 3e6e33e] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
 + 35a8500...3e6e33e main -> main (forced update)
ok 8 - push to update (allowed even though no-ff)

expecting success of 5533.9 'push to delete (protected)': 
	setup_srcdst_basic &&
	git ls-remote src refs/heads/main >expect &&
	(
		cd dst &&
		test_must_fail git push --force-with-lease=main:main^ origin :main
	) &&
	git ls-remote src refs/heads/main >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 ! [rejected]        (delete) -> main (stale info)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src'
ok 9 - push to delete (protected)

expecting success of 5533.10 'push to delete (protected, forced)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		git push --force --force-with-lease=main:main^ origin :main
	) &&
	git ls-remote src refs/heads/main >actual &&
	test_must_be_empty actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 - [deleted]         main
ok 10 - push to delete (protected, forced)

expecting success of 5533.11 'push to delete (allowed)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		git push --force-with-lease=main origin :main 2>err &&
		grep deleted err
	) &&
	git ls-remote src refs/heads/main >actual &&
	test_must_be_empty actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
 - [deleted]         main
ok 11 - push to delete (allowed)

expecting success of 5533.12 'cover everything with default force-with-lease (protected)': 
	setup_srcdst_basic &&
	(
		cd src &&
		git branch nain main^
	) &&
	git ls-remote src refs/heads/\* >expect &&
	(
		cd dst &&
		test_must_fail git push --force-with-lease origin main main:nain
	) &&
	git ls-remote src refs/heads/\* >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 ! [rejected]        main -> nain (stale info)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src'
ok 12 - cover everything with default force-with-lease (protected)

expecting success of 5533.13 'cover everything with default force-with-lease (allowed)': 
	setup_srcdst_basic &&
	(
		cd src &&
		git branch nain main^
	) &&
	(
		cd dst &&
		git fetch &&
		git push --force-with-lease origin main main:nain
	) &&
	git ls-remote dst refs/heads/main |
	sed -e "s/main/nain/" >expect &&
	git ls-remote src refs/heads/nain >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 * [new branch]      nain       -> origin/nain
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
   d9df450..35a8500  main -> nain
ok 13 - cover everything with default force-with-lease (allowed)

expecting success of 5533.14 'new branch covered by force-with-lease': 
	setup_srcdst_basic &&
	(
		cd dst &&
		git branch branch main &&
		git push --force-with-lease=branch origin branch
	) &&
	git ls-remote dst refs/heads/branch >expect &&
	git ls-remote src refs/heads/branch >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 * [new branch]      branch -> branch
ok 14 - new branch covered by force-with-lease

expecting success of 5533.15 'new branch covered by force-with-lease (explicit)': 
	setup_srcdst_basic &&
	(
		cd dst &&
		git branch branch main &&
		git push --force-with-lease=branch: origin branch
	) &&
	git ls-remote dst refs/heads/branch >expect &&
	git ls-remote src refs/heads/branch >actual &&
	test_cmp expect actual

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 * [new branch]      branch -> branch
ok 15 - new branch covered by force-with-lease (explicit)

expecting success of 5533.16 'new branch already exists': 
	setup_srcdst_basic &&
	(
		cd src &&
		git checkout -b branch main &&
		test_commit F
	) &&
	(
		cd dst &&
		git branch branch main &&
		test_must_fail git push --force-with-lease=branch: origin branch
	)

Cloning into 'src'...
Cloning into 'dst'...
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 35a8500 C
Switched to a new branch 'branch'
[branch b6ba73d] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src
 ! [rejected]        branch -> branch (stale info)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src'
ok 16 - new branch already exists

expecting success of 5533.17 'background updates of REMOTE can be mitigated with a non-updated REMOTE-push': 
	rm -rf src dst &&
	git init --bare src.bare &&
	test_when_finished "rm -rf src.bare" &&
	git clone --no-local src.bare dst &&
	test_when_finished "rm -rf dst" &&
	(
		cd dst &&
		test_commit G &&
		git remote add origin-push ../src.bare &&
		git push origin-push main:main
	) &&
	git clone --no-local src.bare dst2 &&
	test_when_finished "rm -rf dst2" &&
	(
		cd dst2 &&
		test_commit H &&
		git push
	) &&
	(
		cd dst &&
		test_commit I &&
		git fetch origin &&
		test_must_fail git push --force-with-lease origin-push &&
		git fetch origin-push &&
		git push --force-with-lease origin-push
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src.bare/
Cloning into 'dst'...
warning: You appear to have cloned an empty repository.
[main (root-commit) c0a8953] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
To ../src.bare
 * [new branch]      main -> main
Cloning into 'dst2'...
[main d19f4d4] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src.bare
   c0a8953..d19f4d4  main -> main
[main 91bb270] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/src.bare
 * [new branch]      main       -> origin/main
To ../src.bare
 ! [rejected]        main -> main (stale info)
error: failed to push some refs to '../src.bare'
From ../src.bare
   c0a8953..d19f4d4  main       -> origin-push/main
To ../src.bare
 + d19f4d4...91bb270 main -> main (forced update)
ok 17 - background updates of REMOTE can be mitigated with a non-updated REMOTE-push

expecting success of 5533.18 'background updates to remote can be mitigated with "--force-if-includes"': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	git ls-remote dst refs/heads/main >expect.main &&
	git ls-remote dst refs/heads/branch >expect.branch &&
	(
		cd src &&
		git switch branch &&
		test_commit I &&
		git switch main &&
		test_commit J &&
		git fetch --all &&
		test_must_fail git push --force-with-lease --force-if-includes --all
	) &&
	git ls-remote dst refs/heads/main >actual.main &&
	git ls-remote dst refs/heads/branch >actual.branch &&
	test_cmp expect.main actual.main &&
	test_cmp expect.branch actual.branch

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
[branch da1510b] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be2465f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   157d38b..b995a30  main       -> origin/main
   b63fbb1..9cdccac  branch     -> origin/branch
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 ! [rejected]        branch -> branch (remote ref updated since checkout)
 ! [rejected]        main -> main (remote ref updated since checkout)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst'
hint: Updates were rejected because the tip of the remote-tracking
hint: branch has been updated since the last checkout. You may want
hint: to integrate those changes locally (e.g., 'git pull ...')
hint: before forcing an update.
ok 18 - background updates to remote can be mitigated with "--force-if-includes"

expecting success of 5533.19 'background updates to remote can be mitigated with "push.useForceIfIncludes"': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	git ls-remote dst refs/heads/main >expect.main &&
	(
		cd src &&
		git switch branch &&
		test_commit I &&
		git switch main &&
		test_commit J &&
		git fetch --all &&
		git config --local push.useForceIfIncludes true &&
		test_must_fail git push --force-with-lease=main origin main
	) &&
	git ls-remote dst refs/heads/main >actual.main &&
	test_cmp expect.main actual.main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
[branch da1510b] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be2465f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   157d38b..b995a30  main       -> origin/main
   b63fbb1..9cdccac  branch     -> origin/branch
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 ! [rejected]        main -> main (remote ref updated since checkout)
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst'
hint: Updates were rejected because the tip of the remote-tracking
hint: branch has been updated since the last checkout. You may want
hint: to integrate those changes locally (e.g., 'git pull ...')
hint: before forcing an update.
ok 19 - background updates to remote can be mitigated with "push.useForceIfIncludes"

expecting success of 5533.20 '"--force-if-includes" should be disabled for --force-with-lease="<refname>:<expect>"': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	git ls-remote dst refs/heads/main >expect.main &&
	(
		cd src &&
		git switch branch &&
		test_commit I &&
		git switch main &&
		test_commit J &&
		remote_head="$(git rev-parse refs/remotes/origin/main)" &&
		git fetch --all &&
		test_must_fail git push --force-if-includes --force-with-lease="main:$remote_head" 2>err &&
		grep "stale info" err
	) &&
	git ls-remote dst refs/heads/main >actual.main &&
	test_cmp expect.main actual.main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
[branch da1510b] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be2465f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   157d38b..b995a30  main       -> origin/main
   b63fbb1..9cdccac  branch     -> origin/branch
 ! [rejected]        main -> main (stale info)
ok 20 - "--force-if-includes" should be disabled for --force-with-lease="<refname>:<expect>"

expecting success of 5533.21 '"--force-if-includes" should allow forced update after a rebase ("pull --rebase")': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	(
		cd src &&
		git switch branch &&
		test_commit I &&
		git switch main &&
		test_commit J &&
		git pull --rebase origin main &&
		git push --force-if-includes --force-with-lease="main"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
[branch da1510b] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be2465f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * branch            main       -> FETCH_HEAD
   157d38b..b995a30  main       -> origin/main
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/main.
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b995a30..7c16010  main -> main
ok 21 - "--force-if-includes" should allow forced update after a rebase ("pull --rebase")

expecting success of 5533.22 '"--force-if-includes" should allow forced update after a rebase ("pull --rebase", local rebase)': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	(
		cd src &&
		git switch branch &&
		test_commit I &&
		git switch main &&
		test_commit J &&
		git pull --rebase origin main &&
		git rebase --onto HEAD~4 HEAD~1 &&
		git push --force-if-includes --force-with-lease="main"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
[branch da1510b] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main be2465f] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * branch            main       -> FETCH_HEAD
   157d38b..b995a30  main       -> origin/main
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/main.
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/main.
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 + b995a30...e9c7db1 main -> main (forced update)
ok 22 - "--force-if-includes" should allow forced update after a rebase ("pull --rebase", local rebase)

expecting success of 5533.23 '"--force-if-includes" should allow deletes': 
	setup_src_dup_dst &&
	test_when_finished "rm -fr dst src dup" &&
	(
		cd src &&
		git switch branch &&
		git pull --rebase origin branch &&
		git push --force-if-includes --force-with-lease="branch" origin :branch
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst/
Cloning into 'src'...
warning: You appear to have cloned an empty repository.
Cloning into 'dup'...
warning: You appear to have cloned an empty repository.
[main (root-commit) 112d1ac] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main f9a2dac] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 157d38b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      main       -> origin/main
Switched to a new branch 'branch'
[branch ded492b] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch b63fbb1] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch -> branch
Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * [new branch]      branch     -> origin/branch
branch 'branch' set up to track 'origin/branch'.
Current branch main is up to date.
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
[main 00b6961] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
[main b995a30] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Switched to branch 'branch'
[branch 9cdccac] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
   b63fbb1..9cdccac  branch -> branch
   157d38b..b995a30  main -> main
Switched to branch 'branch'
Your branch is up to date with 'origin/branch'.
From /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 * branch            branch     -> FETCH_HEAD
   b63fbb1..9cdccac  branch     -> origin/branch
Updating b63fbb1..9cdccac
Fast-forward
 H.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
To /<<PKGBUILDDIR>>/t/trash directory.t5533-push-cas/dst
 - [deleted]         branch
ok 23 - "--force-if-includes" should allow deletes

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5526-fetch-submodules.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.git/
expecting success of 5526.1 'setup': 
	git config --global protocol.file.allow always &&
	mkdir deepsubmodule &&
	(
		cd deepsubmodule &&
		git init &&
		echo deepsubcontent > deepsubfile &&
		git add deepsubfile &&
		git commit -m new deepsubfile &&
		git branch -M deep
	) &&
	mkdir submodule &&
	(
		cd submodule &&
		git init &&
		echo subcontent > subfile &&
		git add subfile &&
		git submodule add "$pwd/deepsubmodule" subdir/deepsubmodule &&
		git commit -a -m new &&
		git branch -M sub
	) &&
	git submodule add "$pwd/submodule" submodule &&
	git commit -am initial &&
	git branch -M super &&
	git clone . downstream &&
	(
		cd downstream &&
		git submodule update --init --recursive
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule/.git/
[master (root-commit) d364e3f] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 deepsubfile
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule/subdir/deepsubmodule'...
done.
[master (root-commit) 6f8aeda] new
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subdir/deepsubmodule
 create mode 100644 subfile
Adding existing repo at 'submodule' to the index
[master (root-commit) 20e7733] initial
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into 'downstream'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream/submodule'...
done.
Submodule path 'submodule': checked out '6f8aeda1ccc641e7346032d6b7e2f85fd5998c94'
Submodule 'subdir/deepsubmodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule) registered for path 'submodule/subdir/deepsubmodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream/submodule/subdir/deepsubmodule'...
done.
Submodule path 'submodule/subdir/deepsubmodule': checked out 'd364e3fa383588e29e10638cdcd1bf65599026fa'
ok 1 - setup

expecting success of 5526.2 'fetch --recurse-submodules recurses into submodules': 
	add_submodule_commits &&
	(
		cd downstream &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 865db3b] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep d05c5e6] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - fetch --recurse-submodules recurses into submodules

expecting success of 5526.3 'submodule.recurse option triggers recursive fetch': 
	add_submodule_commits &&
	(
		cd downstream &&
		git -c submodule.recurse fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub d1be156] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep f6dcfe4] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 3 - submodule.recurse option triggers recursive fetch

expecting success of 5526.4 'fetch --recurse-submodules -j2 has the same output behaviour': 
	test_when_finished "rm -f trace.out" &&
	add_submodule_commits &&
	(
		cd downstream &&
		GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err &&
	grep "2 tasks" trace.out

[sub 763198d] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep c1702c1] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
run_processes_parallel: preparing to run up to 2 tasks
ok 4 - fetch --recurse-submodules -j2 has the same output behaviour

expecting success of 5526.5 'fetch alone only fetches superproject': 
	add_submodule_commits &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

[sub 86f8bca] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 958e568] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 5 - fetch alone only fetches superproject

expecting success of 5526.6 'fetch --no-recurse-submodules only fetches superproject': 
	(
		cd downstream &&
		git fetch --no-recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 6 - fetch --no-recurse-submodules only fetches superproject

expecting success of 5526.7 'using fetchRecurseSubmodules=true in .gitmodules recurses into submodules': 
	(
		cd downstream &&
		git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

ok 7 - using fetchRecurseSubmodules=true in .gitmodules recurses into submodules

expecting success of 5526.8 '--no-recurse-submodules overrides .gitmodules config': 
	add_submodule_commits &&
	(
		cd downstream &&
		git fetch --no-recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

[sub 7e16227] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 8ec704c] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 8 - --no-recurse-submodules overrides .gitmodules config

expecting success of 5526.9 'using fetchRecurseSubmodules=false in .git/config overrides setting in .gitmodules': 
	(
		cd downstream &&
		git config submodule.submodule.fetchRecurseSubmodules false &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 9 - using fetchRecurseSubmodules=false in .git/config overrides setting in .gitmodules

expecting success of 5526.10 '--recurse-submodules overrides fetchRecurseSubmodules setting from .git/config': 
	(
		cd downstream &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err &&
		git config --unset -f .gitmodules submodule.submodule.fetchRecurseSubmodules &&
		git config --unset submodule.submodule.fetchRecurseSubmodules
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

ok 10 - --recurse-submodules overrides fetchRecurseSubmodules setting from .git/config

expecting success of 5526.11 '--quiet propagates to submodules': 
	(
		cd downstream &&
		git fetch --recurse-submodules --quiet >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 11 - --quiet propagates to submodules

expecting success of 5526.12 '--quiet propagates to parallel submodules': 
	(
		cd downstream &&
		git fetch --recurse-submodules -j 2 --quiet  >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 12 - --quiet propagates to parallel submodules

expecting success of 5526.13 '--dry-run propagates to submodules': 
	add_submodule_commits &&
	(
		cd downstream &&
		git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 4fed9b1] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 6f18ea1] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 13 - --dry-run propagates to submodules

expecting success of 5526.14 'Without --dry-run propagates to submodules': 
	(
		cd downstream &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

ok 14 - Without --dry-run propagates to submodules

expecting success of 5526.15 'recurseSubmodules=true propagates into submodules': 
	add_submodule_commits &&
	(
		cd downstream &&
		git config fetch.recurseSubmodules true &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub ba8b5c2] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 6da3ae5] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 15 - recurseSubmodules=true propagates into submodules

expecting success of 5526.16 '--recurse-submodules overrides config in submodule': 
	add_submodule_commits &&
	(
		cd downstream &&
		(
			cd submodule &&
			git config fetch.recurseSubmodules false
		) &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub b5aabe4] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep ffd92d2] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 16 - --recurse-submodules overrides config in submodule

expecting success of 5526.17 '--no-recurse-submodules overrides config setting': 
	add_submodule_commits &&
	(
		cd downstream &&
		git config fetch.recurseSubmodules true &&
		git fetch --no-recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

[sub 3269070] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 51848d0] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 17 - --no-recurse-submodules overrides config setting

expecting success of 5526.18 'Recursion doesn't happen when no new commits are fetched in the superproject': 
	(
		cd downstream &&
		(
			cd submodule &&
			git config --unset fetch.recurseSubmodules
		) &&
		git config --unset fetch.recurseSubmodules &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

ok 18 - Recursion doesn't happen when no new commits are fetched in the superproject

expecting success of 5526.19 'Recursion stops when no new submodule commits are fetched': 
	git add submodule &&
	git commit -m "new submodule" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.deep &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err
	) &&
	verify_fetch_result actual.err &&
	test_must_be_empty actual.out

[super cdf7d60] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - Recursion stops when no new submodule commits are fetched

expecting success of 5526.20 'Recursion doesn't happen when new superproject commits don't change any submodules': 
	add_submodule_commits &&
	echo a > file &&
	git add file &&
	git commit -m "new file" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.sub &&
	rm expect.err.deep &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 0210f62] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep a566ecd] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super 6675f2c] new file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 20 - Recursion doesn't happen when new superproject commits don't change any submodules

expecting success of 5526.21 'Recursion picks up config in submodule': 
	(
		cd downstream &&
		git fetch --recurse-submodules &&
		(
			cd submodule &&
			git config fetch.recurseSubmodules true
		)
	) &&
	add_submodule_commits &&
	git add submodule &&
	git commit -m "new submodule" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err &&
		(
			cd submodule &&
			git config --unset fetch.recurseSubmodules
		)
	) &&
	verify_fetch_result actual.err &&
	test_must_be_empty actual.out

Fetching submodule submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
   3269070..0210f62  sub        -> origin/sub
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   ffd92d2..a566ecd  deep       -> origin/deep
[sub fcdc9c4] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep d909561] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super d0f2c59] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 21 - Recursion picks up config in submodule

expecting success of 5526.22 'Recursion picks up all submodules when necessary': 
	add_submodule_commits &&
	add_superproject_commits &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err
	) &&
	verify_fetch_result actual.err &&
	test_must_be_empty actual.out

[sub 5272475] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 1e9847a] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   d364e3f..1e9847a  deep       -> origin/deep
[sub 250a177] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super b0e18d6] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 22 - Recursion picks up all submodules when necessary

expecting success of 5526.23 ''--recurse-submodules=on-demand' doesn't recurse when no new commits are fetched in the superproject (and ignores config)': 
	add_submodule_commits &&
	(
		cd downstream &&
		git config fetch.recurseSubmodules true &&
		git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err &&
		git config --unset fetch.recurseSubmodules
	) &&
	test_must_be_empty actual.out &&
	test_must_be_empty actual.err

[sub 2c4338c] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 8fabd2e] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 23 - '--recurse-submodules=on-demand' doesn't recurse when no new commits are fetched in the superproject (and ignores config)

expecting success of 5526.24 ''--recurse-submodules=on-demand' recurses as deep as necessary (and ignores config)': 
	add_submodule_commits &&
	add_superproject_commits &&
	(
		cd downstream &&
		git config fetch.recurseSubmodules false &&
		(
			cd submodule &&
			git config -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive false
		) &&
		git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err &&
		git config --unset fetch.recurseSubmodules &&
		(
			cd submodule &&
			git config --unset -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive
		)
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 218f3fe] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 0ac03eb] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   1e9847a..0ac03eb  deep       -> origin/deep
[sub 9c85ab8] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super bb56fb6] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 24 - '--recurse-submodules=on-demand' recurses as deep as necessary (and ignores config)

expecting success of 5526.25 'setup downstream branch without submodules': 
	(
		cd downstream &&
		git checkout --recurse-submodules -b no-submodules &&
		git rm .gitmodules &&
		git rm submodule &&
		git commit -m "no submodules" &&
		git checkout --recurse-submodules super
	)

Switched to a new branch 'no-submodules'
rm '.gitmodules'
rm 'submodule'
[no-submodules 944fc49] no submodules
 Author: A U Thor <author@example.com>
 2 files changed, 4 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 submodule
Switched to branch 'super'
Your branch is behind 'origin/super' by 5 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
ok 25 - setup downstream branch without submodules

expecting success of 5526.26 ''--recurse-submodules=on-demand' should fetch submodule commits if the submodule is changed but the index has no submodules': 
	add_submodule_commits &&
	add_superproject_commits &&
	# Fetch the new superproject commit
	(
		cd downstream &&
		git switch --recurse-submodules no-submodules &&
		git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
	) &&
	super_head=$(git rev-parse --short HEAD) &&
	sub_head=$(git -C submodule rev-parse --short HEAD) &&
	deep_head=$(git -C submodule/subdir/deepsubmodule rev-parse --short HEAD) &&

	# assert that these are fetched from commits, not the index
	write_expected_sub $sub_head $super_head &&
	write_expected_deep $deep_head $sub_head &&

	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 78c43cc] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 2b75f87] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   0ac03eb..2b75f87  deep       -> origin/deep
[sub 694f9ab] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super ddf836f] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'no-submodules'
ok 26 - '--recurse-submodules=on-demand' should fetch submodule commits if the submodule is changed but the index has no submodules

expecting success of 5526.27 ''--recurse-submodules' should fetch submodule commits if the submodule is changed but the index has no submodules': 
	add_submodule_commits &&
	add_superproject_commits &&
	# Fetch the new superproject commit
	(
		cd downstream &&
		git switch --recurse-submodules no-submodules &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	super_head=$(git rev-parse --short HEAD) &&
	sub_head=$(git -C submodule rev-parse --short HEAD) &&
	deep_head=$(git -C submodule/subdir/deepsubmodule rev-parse --short HEAD) &&

	# assert that these are fetched from commits, not the index
	write_expected_sub $sub_head $super_head &&
	write_expected_deep $deep_head $sub_head &&

	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub f44d0f7] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 2bbb38d] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   2b75f87..2bbb38d  deep       -> origin/deep
[sub 8b4294d] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super 8e0e64c] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Already on 'no-submodules'
ok 27 - '--recurse-submodules' should fetch submodule commits if the submodule is changed but the index has no submodules

expecting success of 5526.28 ''--recurse-submodules' should ignore changed, inactive submodules': 
	add_submodule_commits &&
	add_superproject_commits &&

	# Fetch the new superproject commit
	(
		cd downstream &&
		git switch --recurse-submodules no-submodules &&
		git -c submodule.submodule.active=false fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	super_head=$(git rev-parse --short HEAD) &&
	write_expected_super $super_head &&
	# Neither should be fetched because the submodule is inactive
	rm expect.err.sub &&
	rm expect.err.deep &&
	verify_fetch_result actual.err

[sub 29e2bf2] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 0e608cc] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   2bbb38d..0e608cc  deep       -> origin/deep
[sub b8351f0] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super aa35752] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Already on 'no-submodules'
ok 28 - '--recurse-submodules' should ignore changed, inactive submodules

expecting success of 5526.29 'setup downstream branch with other submodule': 
	mkdir submodule2 &&
	(
		cd submodule2 &&
		git init &&
		echo sub2content >sub2file &&
		git add sub2file &&
		git commit -a -m new &&
		git branch -M sub2
	) &&
	git checkout -b super-sub2-only &&
	git submodule add "$pwd/submodule2" submodule2 &&
	git commit -m "add sub2" &&
	git checkout super &&
	(
		cd downstream &&
		git fetch --recurse-submodules origin &&
		git checkout super-sub2-only &&
		# Explicitly run "git submodule update" because sub2 is new
		# and has not been cloned.
		git submodule update --init &&
		git checkout --recurse-submodules super
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule2/.git/
[master (root-commit) 5376273] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2file
Switched to a new branch 'super-sub2-only'
Adding existing repo at 'submodule2' to the index
[super-sub2-only 839ecd6] add sub2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 submodule2
warning: unable to rmdir 'submodule2': Directory not empty
Switched to branch 'super'
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * [new branch]      super-sub2-only -> origin/super-sub2-only
Switched to a new branch 'super-sub2-only'
branch 'super-sub2-only' set up to track 'origin/super-sub2-only'.
Submodule 'submodule2' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule2) registered for path 'submodule2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream/submodule2'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
   8b4294d..b8351f0  sub        -> origin/sub
Fetching submodule subdir/deepsubmodule at commit b8351f0
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   2bbb38d..0e608cc  deep       -> origin/deep
Submodule path 'submodule': checked out 'b8351f09927e56a335d47926dbb33e8c59a4535d'
Submodule path 'submodule2': checked out '5376273fab74ba272d103588de84ee3d9446d8ae'
Switched to branch 'super'
Your branch is behind 'origin/super' by 8 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
ok 29 - setup downstream branch with other submodule

expecting success of 5526.30 ''--recurse-submodules' should fetch submodule commits in changed submodules and the index': 
	test_when_finished "rm expect.err.sub2" &&
	# Create new commit in origin/super
	add_submodule_commits &&
	add_superproject_commits &&

	# Create new commit in origin/super-sub2-only
	git checkout super-sub2-only &&
	(
		cd submodule2 &&
		test_commit --no-tag foo
	) &&
	git add submodule2 &&
	git commit -m "new submodule2" &&

	git checkout super &&
	(
		cd downstream &&
		git fetch --recurse-submodules >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	sub2_head=$(git -C submodule2 rev-parse --short HEAD) &&
	super_head=$(git rev-parse --short super) &&
	super_sub2_only_head=$(git rev-parse --short super-sub2-only) &&
	write_expected_sub2 $sub2_head $super_sub2_only_head &&

	# write_expected_super cannot handle >1 branch. Since this is a
	# one-off, construct expect.err.super manually.
	cat >"$pwd/expect.err.super" <<-EOF &&
	From $pwd/.
	   OLD_HEAD..$super_head  super           -> origin/super
	   OLD_HEAD..$super_sub2_only_head  super-sub2-only -> origin/super-sub2-only
	EOF
	verify_fetch_result actual.err

[sub 3ad20c8] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 224e17b] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   0e608cc..224e17b  deep       -> origin/deep
[sub 165c1db] new deep submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super 852a141] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'super-sub2-only'
M	submodule
[sub2 4f5f854] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[super-sub2-only 324edb3] new submodule2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: unable to rmdir 'submodule2': Directory not empty
Switched to branch 'super'
ok 30 - '--recurse-submodules' should fetch submodule commits in changed submodules and the index

expecting success of 5526.31 ''--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)': 
	add_submodule_commits &&
	echo a >> file &&
	git add file &&
	git commit -m "new file" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.sub &&
	rm expect.err.deep &&
	(
		cd downstream &&
		git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

[sub 48446e2] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep b9c0011] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super f53d861] new file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 31 - '--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)

expecting success of 5526.32 ''fetch.recurseSubmodules=on-demand' overrides global config': 
	(
		cd downstream &&
		git fetch --recurse-submodules
	) &&
	add_submodule_commits &&
	git config --global fetch.recurseSubmodules false &&
	git add submodule &&
	git commit -m "new submodule" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.deep &&
	(
		cd downstream &&
		git config fetch.recurseSubmodules on-demand &&
		git fetch >../actual.out 2>../actual.err
	) &&
	git config --global --unset fetch.recurseSubmodules &&
	(
		cd downstream &&
		git config --unset fetch.recurseSubmodules
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

Fetching submodule submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
   165c1db..48446e2  sub        -> origin/sub
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   224e17b..b9c0011  deep       -> origin/deep
[sub af525ad] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 8e3cffa] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super b34d4ef] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 32 - 'fetch.recurseSubmodules=on-demand' overrides global config

expecting success of 5526.33 ''submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules': 
	(
		cd downstream &&
		git fetch --recurse-submodules
	) &&
	add_submodule_commits &&
	git config fetch.recurseSubmodules false &&
	git add submodule &&
	git commit -m "new submodule" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.deep &&
	(
		cd downstream &&
		git config submodule.submodule.fetchRecurseSubmodules on-demand &&
		git fetch >../actual.out 2>../actual.err
	) &&
	git config --unset fetch.recurseSubmodules &&
	(
		cd downstream &&
		git config --unset submodule.submodule.fetchRecurseSubmodules
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err

Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   b9c0011..8e3cffa  deep       -> origin/deep
[sub 577816b] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 0db4bc6] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super f5f0dd8] new submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 33 - 'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules

expecting success of 5526.34 'don't fetch submodule when newly recorded commits are already present': 
	(
		cd submodule &&
		git checkout -q HEAD^^
	) &&
	git add submodule &&
	git commit -m "submodule rewound" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.sub &&
	# This file does not exist, but rm -f for readability
	rm -f expect.err.deep &&
	(
		cd downstream &&
		git fetch >../actual.out 2>../actual.err
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err &&
	(
		cd submodule &&
		git checkout -q sub
	)

[super 74103f1] submodule rewound
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 34 - don't fetch submodule when newly recorded commits are already present

expecting success of 5526.35 ''fetch.recurseSubmodules=on-demand' works also without .gitmodules entry': 
	(
		cd downstream &&
		git fetch --recurse-submodules
	) &&
	add_submodule_commits &&
	git add submodule &&
	git rm .gitmodules &&
	git commit -m "new submodule without .gitmodules" &&
	new_head=$(git rev-parse --short HEAD) &&
	write_expected_super $new_head &&
	rm expect.err.deep &&
	(
		cd downstream &&
		rm .gitmodules &&
		git config fetch.recurseSubmodules on-demand &&
		# fake submodule configuration to avoid skipping submodule handling
		git config -f .gitmodules submodule.fake.path fake &&
		git config -f .gitmodules submodule.fake.url fakeurl &&
		git add .gitmodules &&
		git config --unset submodule.submodule.url &&
		git fetch >../actual.out 2>../actual.err &&
		# cleanup
		git config --unset fetch.recurseSubmodules &&
		git reset --hard
	) &&
	test_must_be_empty actual.out &&
	verify_fetch_result actual.err &&
	git checkout HEAD^ -- .gitmodules &&
	git add .gitmodules &&
	git commit -m "new submodule restored .gitmodules"

Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   8e3cffa..0db4bc6  deep       -> origin/deep
[sub 474e193] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[deep 557536f] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
rm '.gitmodules'
[super 82249fa] new submodule without .gitmodules
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 4 deletions(-)
 delete mode 100644 .gitmodules
HEAD is now at 20e7733 initial
[super 9912c08] new submodule restored .gitmodules
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 .gitmodules
ok 35 - 'fetch.recurseSubmodules=on-demand' works also without .gitmodules entry

expecting success of 5526.36 'fetching submodules respects parallel settings': 
	git config fetch.recurseSubmodules true &&
	test_when_finished "rm -f downstream/trace.out" &&
	(
		cd downstream &&
		GIT_TRACE=$(pwd)/trace.out git fetch &&
		grep "1 tasks" trace.out &&
		>trace.out &&

		GIT_TRACE=$(pwd)/trace.out git fetch --jobs 7 &&
		grep "7 tasks" trace.out &&
		>trace.out &&

		git config submodule.fetchJobs 8 &&
		GIT_TRACE=$(pwd)/trace.out git fetch &&
		grep "8 tasks" trace.out &&
		>trace.out &&

		GIT_TRACE=$(pwd)/trace.out git fetch --jobs 9 &&
		grep "9 tasks" trace.out &&
		>trace.out &&

		GIT_TRACE=$(pwd)/trace.out git -c submodule.fetchJobs=0 fetch &&
		grep "preparing to run up to [0-9]* tasks" trace.out &&
		! grep "up to 0 tasks" trace.out &&
		>trace.out
	)

From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
   82249fa..9912c08  super      -> origin/super
run_processes_parallel: preparing to run up to 1 tasks
run_processes_parallel: preparing to run up to 7 tasks
run_processes_parallel: preparing to run up to 8 tasks
run_processes_parallel: preparing to run up to 9 tasks
run_processes_parallel: preparing to run up to 4 tasks
ok 36 - fetching submodules respects parallel settings

expecting success of 5526.37 'fetching submodule into a broken repository': 
	# Prepare src and src/sub nested in it
	git init src &&
	(
		cd src &&
		git init sub &&
		git -C sub commit --allow-empty -m "initial in sub" &&
		git submodule add -- ./sub sub &&
		git commit -m "initial in top"
	) &&

	# Clone the old-fashoned way
	git clone src dst &&
	git -C dst clone ../src/sub sub &&

	# Make sure that old-fashoned layout is still supported
	git -C dst status &&

	# "diff" would find no change
	git -C dst diff --exit-code &&

	# Recursive-fetch works fine
	git -C dst fetch --recurse-submodules &&

	# Break the receiving submodule
	rm -f dst/sub/.git/HEAD &&

	# NOTE: without the fix the following tests will recurse forever!
	# They should terminate with an error.

	test_must_fail git -C dst status &&
	test_must_fail git -C dst diff &&
	test_must_fail git -C dst fetch --recurse-submodules

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src/sub/.git/
[master (root-commit) 77c7502] initial in sub
 Author: A U Thor <author@example.com>
Adding existing repo at 'sub' to the index
[master (root-commit) 4a56cf6] initial in top
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'dst'...
done.
Cloning into 'sub'...
done.
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
Fetching submodule sub
fatal: 'sub/.git' not recognized as a git repository
fatal: 'sub/.git' not recognized as a git repository
Could not access submodule 'sub'
ok 37 - fetching submodule into a broken repository

expecting success of 5526.38 'fetch new commits when submodule got renamed': 
	git clone . downstream_rename &&
	(
		cd downstream_rename &&
		git submodule update --init --recursive &&
		git checkout -b rename &&
		git mv submodule submodule_renamed &&
		(
			cd submodule_renamed &&
			git checkout -b rename_sub &&
			echo a >a &&
			git add a &&
			git commit -ma &&
			git push origin rename_sub &&
			git rev-parse HEAD >../../expect
		) &&
		git add submodule_renamed &&
		git commit -m "update renamed submodule" &&
		git push origin rename
	) &&
	(
		cd downstream &&
		git fetch --recurse-submodules=on-demand &&
		(
			cd submodule &&
			git rev-parse origin/rename_sub >../../actual
		)
	) &&
	test_cmp expect actual

Cloning into 'downstream_rename'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream_rename/submodule'...
done.
Submodule path 'submodule': checked out '474e19376277d5a00807fa51226c937d62babf1f'
Submodule 'subdir/deepsubmodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule) registered for path 'submodule/subdir/deepsubmodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream_rename/submodule/subdir/deepsubmodule'...
done.
Submodule path 'submodule/subdir/deepsubmodule': checked out '224e17ba8e4722f323c35dbfc3a0346182bf479a'
Switched to a new branch 'rename'
Switched to a new branch 'rename_sub'
[rename_sub 844fd4d] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
 * [new branch]      rename_sub -> rename_sub
[rename 7307239] update renamed submodule
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 160000 submodule
 create mode 160000 submodule_renamed
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * [new branch]      rename -> rename
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * [new branch]      rename     -> origin/rename
Fetching submodule submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
 * [new branch]      rename_sub -> origin/rename_sub
ok 38 - fetch new commits when submodule got renamed

expecting success of 5526.39 'fetch new submodule commits on-demand outside standard refspec': 
	# add a second submodule and ensure it is around in downstream first
	git clone submodule sub1 &&
	git submodule add ./sub1 &&
	git commit -m "adding a second submodule" &&
	git -C downstream pull &&
	git -C downstream submodule update --init --recursive &&

	git checkout --detach &&

	C=$(git -C submodule commit-tree -m "new change outside refs/heads" HEAD^{tree}) &&
	git -C submodule update-ref refs/changes/1 $C &&
	git update-index --cacheinfo 160000 $C submodule &&
	test_tick &&

	D=$(git -C sub1 commit-tree -m "new change outside refs/heads" HEAD^{tree}) &&
	git -C sub1 update-ref refs/changes/2 $D &&
	git update-index --cacheinfo 160000 $D sub1 &&

	git commit -m "updated submodules outside of refs/heads" &&
	E=$(git rev-parse HEAD) &&
	git update-ref refs/changes/3 $E &&
	(
		cd downstream &&
		git fetch --recurse-submodules origin refs/changes/3:refs/heads/my_branch &&
		git -C submodule cat-file -t $C &&
		git -C sub1 cat-file -t $D &&
		git checkout --recurse-submodules FETCH_HEAD
	)

Cloning into 'sub1'...
done.
Adding existing repo at 'sub1' to the index
[super b8115af] adding a second submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub1
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
   9912c08..b8115af  super      -> origin/super
Updating 20e7733..b8115af
Fast-forward
 .gitmodules | 3 +++
 file        | 2 ++
 sub1        | 1 +
 submodule   | 2 +-
 4 files changed, 7 insertions(+), 1 deletion(-)
 create mode 100644 file
 create mode 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/./sub1) registered for path 'sub1'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream/sub1'...
done.
Submodule path 'sub1': checked out '474e19376277d5a00807fa51226c937d62babf1f'
Submodule 'subdir/deepsubmodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule) registered for path 'sub1/subdir/deepsubmodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/downstream/sub1/subdir/deepsubmodule'...
done.
Submodule path 'sub1/subdir/deepsubmodule': checked out '224e17ba8e4722f323c35dbfc3a0346182bf479a'
Submodule path 'submodule': checked out '474e19376277d5a00807fa51226c937d62babf1f'
Submodule path 'submodule/subdir/deepsubmodule': checked out '224e17ba8e4722f323c35dbfc3a0346182bf479a'
HEAD is now at b8115af adding a second submodule
[detached HEAD 8639a74] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * [new ref]         refs/changes/3 -> my_branch
Fetching submodule sub1
Fetching submodule sub1/subdir/deepsubmodule
Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/deepsubmodule
   0db4bc6..557536f  deep       -> origin/deep
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/./sub1
 * branch            26153a0a85ef437ae3ac72ae7c5cc2b4755d1d28 -> FETCH_HEAD
Fetching submodule sub1/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
 * branch            d5a6ca67ca2a6db33994fa10185082da294cc9e4 -> FETCH_HEAD
Fetching submodule submodule/subdir/deepsubmodule
commit
commit
Note: switching to 'FETCH_HEAD'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8639a74 updated submodules outside of refs/heads
ok 39 - fetch new submodule commits on-demand outside standard refspec

expecting success of 5526.40 'fetch new submodule commit on-demand in FETCH_HEAD': 
	# depends on the previous test for setup

	C=$(git -C submodule commit-tree -m "another change outside refs/heads" HEAD^{tree}) &&
	git -C submodule update-ref refs/changes/4 $C &&
	git update-index --cacheinfo 160000 $C submodule &&
	test_tick &&

	D=$(git -C sub1 commit-tree -m "another change outside refs/heads" HEAD^{tree}) &&
	git -C sub1 update-ref refs/changes/5 $D &&
	git update-index --cacheinfo 160000 $D sub1 &&

	git commit -m "updated submodules outside of refs/heads" &&
	E=$(git rev-parse HEAD) &&
	git update-ref refs/changes/6 $E &&
	(
		cd downstream &&
		git fetch --recurse-submodules origin refs/changes/6 &&
		git -C submodule cat-file -t $C &&
		git -C sub1 cat-file -t $D &&
		git checkout --recurse-submodules FETCH_HEAD
	)

[detached HEAD a9f41e2] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * branch            refs/changes/6 -> FETCH_HEAD
Fetching submodule sub1
Fetching submodule sub1/subdir/deepsubmodule
Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/./sub1
 * branch            042b87d66a31a0c5eb6547f55990d3774af5a883 -> FETCH_HEAD
Fetching submodule sub1/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
 * branch            d090b758d9d78022f39f41ff08e351de9548025d -> FETCH_HEAD
Fetching submodule submodule/subdir/deepsubmodule
commit
commit
Previous HEAD position was 8639a74 updated submodules outside of refs/heads
HEAD is now at a9f41e2 updated submodules outside of refs/heads
ok 40 - fetch new submodule commit on-demand in FETCH_HEAD

expecting success of 5526.41 'fetch new submodule commits on-demand without .gitmodules entry': 
	# depends on the previous test for setup

	git config -f .gitmodules --remove-section submodule.sub1 &&
	git add .gitmodules &&
	git commit -m "delete gitmodules file" &&
	git checkout -B super &&
	git -C downstream fetch &&
	git -C downstream checkout origin/super &&

	C=$(git -C submodule commit-tree -m "yet another change outside refs/heads" HEAD^{tree}) &&
	git -C submodule update-ref refs/changes/7 $C &&
	git update-index --cacheinfo 160000 $C submodule &&
	test_tick &&

	D=$(git -C sub1 commit-tree -m "yet another change outside refs/heads" HEAD^{tree}) &&
	git -C sub1 update-ref refs/changes/8 $D &&
	git update-index --cacheinfo 160000 $D sub1 &&

	git commit -m "updated submodules outside of refs/heads" &&
	E=$(git rev-parse HEAD) &&
	git update-ref refs/changes/9 $E &&
	(
		cd downstream &&
		git fetch --recurse-submodules origin refs/changes/9 &&
		git -C submodule cat-file -t $C &&
		git -C sub1 cat-file -t $D &&
		git checkout --recurse-submodules FETCH_HEAD
	)

[detached HEAD 152f552] delete gitmodules file
 Author: A U Thor <author@example.com>
 1 file changed, 3 deletions(-)
Switched to and reset branch 'super'
M	sub1
M	submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
   b8115af..152f552  super      -> origin/super
Previous HEAD position was a9f41e2 updated submodules outside of refs/heads
HEAD is now at 152f552 delete gitmodules file
[super 1eb8a99] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * branch            refs/changes/9 -> FETCH_HEAD
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
Fetching submodule sub1
Fetching submodule sub1/subdir/deepsubmodule
Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/./sub1
 * branch            80a37626ca8cca490f0d20f1687bb37971b69a59 -> FETCH_HEAD
Fetching submodule sub1/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/submodule
 * branch            ebdc49ba03034b913524db92cc81d2c426cd9d64 -> FETCH_HEAD
Fetching submodule submodule/subdir/deepsubmodule
commit
commit
Previous HEAD position was 152f552 delete gitmodules file
HEAD is now at 1eb8a99 updated submodules outside of refs/heads
M	sub1
ok 41 - fetch new submodule commits on-demand without .gitmodules entry

expecting success of 5526.42 'fetch new submodule commit intermittently referenced by superproject': 
	# depends on the previous test for setup

	D=$(git -C sub1 commit-tree -m "change 10 outside refs/heads" HEAD^{tree}) &&
	E=$(git -C sub1 commit-tree -m "change 11 outside refs/heads" HEAD^{tree}) &&
	F=$(git -C sub1 commit-tree -m "change 12 outside refs/heads" HEAD^{tree}) &&

	git -C sub1 update-ref refs/changes/10 $D &&
	git update-index --cacheinfo 160000 $D sub1 &&
	git commit -m "updated submodules outside of refs/heads" &&

	git -C sub1 update-ref refs/changes/11 $E &&
	git update-index --cacheinfo 160000 $E sub1 &&
	git commit -m "updated submodules outside of refs/heads" &&

	git -C sub1 update-ref refs/changes/12 $F &&
	git update-index --cacheinfo 160000 $F sub1 &&
	git commit -m "updated submodules outside of refs/heads" &&

	G=$(git rev-parse HEAD) &&
	git update-ref refs/changes/13 $G &&
	(
		cd downstream &&
		git fetch --recurse-submodules origin refs/changes/13 &&

		git -C sub1 cat-file -t $D &&
		git -C sub1 cat-file -t $E &&
		git -C sub1 cat-file -t $F
	)

[super 4d1196d] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super 720193f] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[super 9e146b6] updated submodules outside of refs/heads
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/.
 * branch            refs/changes/13 -> FETCH_HEAD
warning: 9e146b63a7de79a781544b57d4a5b5fdb9a6c0da:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 9e146b63a7de79a781544b57d4a5b5fdb9a6c0da:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 720193f23a65f500f7476c5c42e915d7d101dc07:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 720193f23a65f500f7476c5c42e915d7d101dc07:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 720193f23a65f500f7476c5c42e915d7d101dc07:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 720193f23a65f500f7476c5c42e915d7d101dc07:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 4d1196d7ae631d9c28aeb8396f3c8ad81b232199:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 4d1196d7ae631d9c28aeb8396f3c8ad81b232199:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 4d1196d7ae631d9c28aeb8396f3c8ad81b232199:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 4d1196d7ae631d9c28aeb8396f3c8ad81b232199:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 1eb8a99e6d013e389fcbf0f40c6c87a682430b87:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
warning: 9e146b63a7de79a781544b57d4a5b5fdb9a6c0da:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one!
warning: 9e146b63a7de79a781544b57d4a5b5fdb9a6c0da:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one!
Fetching submodule sub1
Fetching submodule sub1/subdir/deepsubmodule
Fetching submodule submodule
Fetching submodule submodule/subdir/deepsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/./sub1
 * branch            45531f438f68393db9283f4bfa2c99f8a733b6e5 -> FETCH_HEAD
 * branch            63550b98f5cc0364ff87103fe7c33a346b634ba6 -> FETCH_HEAD
 * branch            6a3c17f2be9724fdb47c8c8c71e74274e566b781 -> FETCH_HEAD
Fetching submodule sub1/subdir/deepsubmodule
commit
commit
commit
ok 42 - fetch new submodule commit intermittently referenced by superproject

expecting success of 5526.43 'setup nested submodule fetch test': 
	# does not depend on any previous test setups

	for repo in outer middle inner
	do
		git init --bare $repo &&
		git clone $repo ${repo}_content &&
		echo "$repo" >"${repo}_content/file" &&
		add_commit_push ${repo}_content "initial" file ||
		return 1
	done &&

	git clone outer A &&
	git -C A submodule add "$pwd/middle" &&
	git -C A/middle/ submodule add "$pwd/inner" &&
	add_commit_push A/middle/ "adding inner sub" .gitmodules inner &&
	add_commit_push A/ "adding middle sub" .gitmodules middle &&

	git clone outer B &&
	git -C B/ submodule update --init middle &&

	compare_refs_in_dir A HEAD B HEAD &&
	compare_refs_in_dir A/middle HEAD B/middle HEAD &&
	test_path_is_file B/file &&
	test_path_is_file B/middle/file &&
	test_path_is_missing B/middle/inner/file &&

	echo "change on inner repo of A" >"A/middle/inner/file" &&
	add_commit_push A/middle/inner "change on inner" file &&
	add_commit_push A/middle "change on inner" inner &&
	add_commit_push A "change on inner" middle

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/outer/
Cloning into 'outer_content'...
warning: You appear to have cloned an empty repository.
done.
[master (root-commit) da522e1] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/outer
 * [new branch]      master -> master
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle/
Cloning into 'middle_content'...
warning: You appear to have cloned an empty repository.
done.
[master (root-commit) c24b533] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle
 * [new branch]      master -> master
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/inner/
Cloning into 'inner_content'...
warning: You appear to have cloned an empty repository.
done.
[master (root-commit) f609b04] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/inner
 * [new branch]      master -> master
Cloning into 'A'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/A/middle'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/A/middle/inner'...
done.
[master 60a5d48] adding inner sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 inner
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle
   c24b533..60a5d48  master -> master
[master e17b831] adding middle sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 middle
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/outer
   da522e1..e17b831  master -> master
Cloning into 'B'...
done.
Submodule 'middle' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle) registered for path 'middle'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/B/middle'...
done.
Submodule path 'middle': checked out '60a5d486ca4492d5f2c3ad679d09fde655ea86ad'
[master eeca8c0] change on inner
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/inner
   f609b04..eeca8c0  master -> master
[master 779f63d] change on inner
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle
   60a5d48..779f63d  master -> master
[master f22b0bd] change on inner
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/outer
   e17b831..f22b0bd  master -> master
ok 43 - setup nested submodule fetch test

expecting success of 5526.44 'fetching a superproject containing an uninitialized sub/sub project': 
	# depends on previous test for setup

	git -C B/ fetch &&
	compare_refs_in_dir A origin/HEAD B origin/HEAD

From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/outer
   e17b831..f22b0bd  master     -> origin/master
Fetching submodule middle
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/middle
   60a5d48..779f63d  master     -> origin/master
ok 44 - fetching a superproject containing an uninitialized sub/sub project

expecting success of 5526.45 'setup recursive fetch with uninit submodule': 
	# does not depend on any previous test setups

	test_create_repo super &&
	test_commit -C super initial &&
	test_create_repo sub &&
	test_commit -C sub initial &&
	git -C sub rev-parse HEAD >expect &&

	git -C super submodule add ../sub &&
	git -C super commit -m "add sub" &&

	git clone super superclone &&
	git -C superclone submodule status >out &&
	sed -e "s/^-//" -e "s/ sub.*$//" out >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/super/.git/
[master (root-commit) 1935181] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/sub/.git/
[master (root-commit) 23fa7ba] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/super/sub'...
done.
[master cf1b802] add sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'superclone'...
done.
ok 45 - setup recursive fetch with uninit submodule

expecting success of 5526.46 'recursive fetch with uninit submodule': 
	# depends on previous test for setup

	fetch_with_recursion_abort superclone sub &&
	git -C superclone submodule status >out &&
	sed -e "s/^-//" -e "s/ sub$//" out >actual &&
	test_cmp expect actual

ok 46 - recursive fetch with uninit submodule

expecting success of 5526.47 'recursive fetch after deinit a submodule': 
	# depends on previous test for setup

	git -C superclone submodule update --init sub &&
	git -C superclone submodule deinit -f sub &&

	fetch_with_recursion_abort superclone sub &&
	git -C superclone submodule status >out &&
	sed -e "s/^-//" -e "s/ sub$//" out >actual &&
	test_cmp expect actual

Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/superclone/sub'...
done.
Submodule path 'sub': checked out '23fa7ba0bac2b782a788206006a3020e034efb1a'
Cleared directory 'sub'
Submodule 'sub' (../sub) unregistered for path 'sub'
ok 47 - recursive fetch after deinit a submodule

expecting success of 5526.48 'setup repo with upstreams that share a submodule name': 
	mkdir same-name-1 &&
	(
		cd same-name-1 &&
		git init -b main &&
		test_commit --no-tag a
	) &&
	git clone same-name-1 same-name-2 &&
	# same-name-1 and same-name-2 both add a submodule with the
	# name "submodule"
	(
		cd same-name-1 &&
		mkdir submodule &&
		git -C submodule init -b main &&
		test_commit -C submodule --no-tag a1 &&
		git submodule add "$pwd/same-name-1/submodule" &&
		git add submodule &&
		git commit -m "super-a1"
	) &&
	(
		cd same-name-2 &&
		mkdir submodule &&
		git -C submodule init -b main &&
		test_commit -C submodule --no-tag a2 &&
		git submodule add "$pwd/same-name-2/submodule" &&
		git add submodule &&
		git commit -m "super-a2"
	) &&
	git clone same-name-1 -o same-name-1 same-name-downstream &&
	(
		cd same-name-downstream &&
		git remote add same-name-2 ../same-name-2 &&
		git fetch --all &&
		# init downstream with same-name-1
		git submodule update --init
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1/.git/
[main (root-commit) f7cd21e] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Cloning into 'same-name-2'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1/submodule/.git/
[main (root-commit) 9135fd8] a1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a1.t
Adding existing repo at 'submodule' to the index
[main 0bdcad0] super-a1
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-2/submodule/.git/
[main (root-commit) 4603a19] a2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a2.t
Adding existing repo at 'submodule' to the index
[main 303e4ba] super-a2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into 'same-name-downstream'...
done.
Fetching same-name-1
Fetching same-name-2
From ../same-name-2
 * [new branch]      main       -> same-name-2/main
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-downstream/submodule'...
done.
Submodule path 'submodule': checked out '9135fd8f78d118d220908e92922e34b533d64976'
ok 48 - setup repo with upstreams that share a submodule name

expecting success of 5526.49 'fetch --recurse-submodules updates name-conflicted, populated submodule': 
	test_when_finished "git -C same-name-downstream checkout main" &&
	(
		cd same-name-1 &&
		test_commit -C submodule --no-tag b1 &&
		git add submodule &&
		git commit -m "super-b1"
	) &&
	(
		cd same-name-2 &&
		test_commit -C submodule --no-tag b2 &&
		git add submodule &&
		git commit -m "super-b2"
	) &&
	(
		cd same-name-downstream &&
		# even though the .gitmodules is correct, we cannot
		# fetch from same-name-2
		git checkout same-name-2/main &&
		git fetch --recurse-submodules same-name-1 &&
		test_must_fail git fetch --recurse-submodules same-name-2
	) &&
	super_head1=$(git -C same-name-1 rev-parse HEAD) &&
	git -C same-name-downstream cat-file -e $super_head1 &&

	super_head2=$(git -C same-name-2 rev-parse HEAD) &&
	git -C same-name-downstream cat-file -e $super_head2 &&

	sub_head1=$(git -C same-name-1/submodule rev-parse HEAD) &&
	git -C same-name-downstream/submodule cat-file -e $sub_head1 &&

	sub_head2=$(git -C same-name-2/submodule rev-parse HEAD) &&
	test_must_fail git -C same-name-downstream/submodule cat-file -e $sub_head2

[main 4d98905] b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.t
[main df772e9] super-b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main fa048cd] b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.t
[main 706b748] super-b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'same-name-2/main'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 303e4ba super-a2
M	submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1
   0bdcad0..df772e9  main       -> same-name-1/main
Fetching submodule submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1/submodule
   9135fd8..4d98905  main       -> origin/main
From ../same-name-2
   303e4ba..706b748  main       -> same-name-2/main
Fetching submodule submodule
fatal: git upload-pack: not our ref fa048cd49e61f07e0d3a0413cd12115bfd16d938
fatal: remote error: upload-pack: not our ref fa048cd49e61f07e0d3a0413cd12115bfd16d938
Errors during submodule fetch:
	submodule
Previous HEAD position was 303e4ba super-a2
Switched to branch 'main'
Your branch is behind 'same-name-1/main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
ok 49 - fetch --recurse-submodules updates name-conflicted, populated submodule

expecting success of 5526.50 'fetch --recurse-submodules updates name-conflicted, unpopulated submodule': 
	(
		cd same-name-1 &&
		test_commit -C submodule --no-tag c1 &&
		git add submodule &&
		git commit -m "super-c1"
	) &&
	(
		cd same-name-2 &&
		test_commit -C submodule --no-tag c2 &&
		git add submodule &&
		git commit -m "super-c2"
	) &&
	(
		cd same-name-downstream &&
		git checkout main &&
		git rm .gitmodules &&
		git rm submodule &&
		git commit -m "no submodules" &&
		git fetch --recurse-submodules same-name-1
	) &&
	head1=$(git -C same-name-1/submodule rev-parse HEAD) &&
	head2=$(git -C same-name-2/submodule rev-parse HEAD) &&
	(
		cd same-name-downstream/.git/modules/submodule &&
		# The submodule has core.worktree pointing to the "git
		# rm"-ed directory, overwrite the invalid value. See
		# comment in get_fetch_task_from_changed() for more
		# information.
		git --work-tree=. cat-file -e $head1 &&
		test_must_fail git --work-tree=. cat-file -e $head2
	)

[main c9df75f] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
[main cee96d4] super-c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0b3ef72] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.t
[main e4f86da] super-c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Already on 'main'
Your branch is behind 'same-name-1/main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
rm '.gitmodules'
rm 'submodule'
[main b20faf0] no submodules
 Author: A U Thor <author@example.com>
 2 files changed, 4 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 submodule
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1
   df772e9..cee96d4  main       -> same-name-1/main
Fetching submodule submodule at commit cee96d4
From /<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/same-name-1/submodule
   4d98905..c9df75f  main       -> origin/main
ok 50 - fetch --recurse-submodules updates name-conflicted, unpopulated submodule

expecting success of 5526.51 'fetch --all with --recurse-submodules': 
	test_when_finished "rm -fr src_clone" &&
	git clone --recurse-submodules src src_clone &&
	(
		cd src_clone &&
		git config submodule.recurse true &&
		git config fetch.parallel 0 &&
		git fetch --all 2>../fetch-log
	) &&
	grep "^Fetching submodule sub$" fetch-log >fetch-subs &&
	test_line_count = 1 fetch-subs

Cloning into 'src_clone'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src_clone/sub'...
done.
Submodule path 'sub': checked out '77c750218fd2379ad09b559df2108a4fa3f233e7'
ok 51 - fetch --all with --recurse-submodules

expecting success of 5526.52 'fetch --all with --recurse-submodules with multiple': 
	test_when_finished "rm -fr src_clone" &&
	git clone --recurse-submodules src src_clone &&
	(
		cd src_clone &&
		git remote add secondary ../src &&
		git config submodule.recurse true &&
		git config fetch.parallel 0 &&
		git fetch --all 2>../fetch-log
	) &&
	grep "Fetching submodule sub" fetch-log >fetch-subs &&
	test_line_count = 2 fetch-subs

Cloning into 'src_clone'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5526-fetch-submodules/src_clone/sub'...
done.
Submodule path 'sub': checked out '77c750218fd2379ad09b559df2108a4fa3f233e7'
Fetching origin
Fetching secondary
ok 52 - fetch --all with --recurse-submodules with multiple

# passed all 52 test(s)
1..52
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5546-receive-limits.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5546-receive-limits/.git/
expecting success of 5546.1 'create known-size (1024 bytes) commit': 
	test-tool genrandom foo 1024 >one-k &&
	git add one-k &&
	test_commit one-k

[master (root-commit) cba7046] one-k
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 one-k
 create mode 100644 one-k.t
ok 1 - create known-size (1024 bytes) commit

expecting success of 5546.2 'prepare destination repository': 
		rm -fr dest &&
		git --bare init dest
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5546-receive-limits/dest/
ok 2 - prepare destination repository

expecting success of 5546.3 'set unpacklimit to 1': 
		git --git-dir=dest config receive.unpacklimit "$unpack_limit"
	
ok 3 - set unpacklimit to 1

expecting success of 5546.4 'setting receive.maxInputSize to 512 rejects push': 
		git --git-dir=dest config receive.maxInputSize 512 &&
		test_must_fail git push dest HEAD
	
remote: fatal: pack exceeds maximum allowed size (512 bytes)        
error: remote unpack failed: index-pack abnormal exit
To dest
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to 'dest'
ok 4 - setting receive.maxInputSize to 512 rejects push

expecting success of 5546.5 'bumping limit to 4k allows push': 
		git --git-dir=dest config receive.maxInputSize 4k &&
		git push dest HEAD
	
To dest
 * [new branch]      HEAD -> master
ok 5 - bumping limit to 4k allows push

expecting success of 5546.6 'prepare destination repository (again)': 
		rm -fr dest &&
		git --bare init dest
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5546-receive-limits/dest/
ok 6 - prepare destination repository (again)

expecting success of 5546.7 'lifting the limit allows push': 
		git --git-dir=dest config receive.maxInputSize 0 &&
		git push dest HEAD
	
To dest
 * [new branch]      HEAD -> master
ok 7 - lifting the limit allows push

expecting success of 5546.8 'prepare destination repository': 
		rm -fr dest &&
		git --bare init dest
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5546-receive-limits/dest/
ok 8 - prepare destination repository

expecting success of 5546.9 'set unpacklimit to 10000': 
		git --git-dir=dest config receive.unpacklimit "$unpack_limit"
	
ok 9 - set unpacklimit to 10000

expecting success of 5546.10 'setting receive.maxInputSize to 512 rejects push': 
		git --git-dir=dest config receive.maxInputSize 512 &&
		test_must_fail git push dest HEAD
	
remote: fatal: pack exceeds maximum allowed size        
error: remote unpack failed: unpack-objects abnormal exit
To dest
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to 'dest'
ok 10 - setting receive.maxInputSize to 512 rejects push

expecting success of 5546.11 'bumping limit to 4k allows push': 
		git --git-dir=dest config receive.maxInputSize 4k &&
		git push dest HEAD
	
To dest
 * [new branch]      HEAD -> master
ok 11 - bumping limit to 4k allows push

expecting success of 5546.12 'prepare destination repository (again)': 
		rm -fr dest &&
		git --bare init dest
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5546-receive-limits/dest/
ok 12 - prepare destination repository (again)

expecting success of 5546.13 'lifting the limit allows push': 
		git --git-dir=dest config receive.maxInputSize 0 &&
		git push dest HEAD
	
To dest
 * [new branch]      HEAD -> master
ok 13 - lifting the limit allows push

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5547-push-quarantine.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5547-push-quarantine/.git/
expecting success of 5547.1 'create picky dest repo': 
	git init --bare dest.git &&
	test_hook --setup -C dest.git pre-receive <<-\EOF
	while read old new ref; do
		test "$(git log -1 --format=%s $new)" = reject && exit 1
	done
	exit 0
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5547-push-quarantine/dest.git/
ok 1 - create picky dest repo

expecting success of 5547.2 'accepted objects work': 
	test_commit ok &&
	git push dest.git HEAD &&
	commit=$(git rev-parse HEAD) &&
	git --git-dir=dest.git cat-file commit $commit

[master (root-commit) c6ea792] ok
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ok.t
To dest.git
 * [new branch]      HEAD -> master
tree b75e7563b6e3ea344e3d7eff513fde4da0914ed6
author A U Thor <author@example.com> 1112911993 -0700
committer C O Mitter <committer@example.com> 1112911993 -0700

ok
ok 2 - accepted objects work

expecting success of 5547.3 'rejected objects are not installed': 
	test_commit reject &&
	commit=$(git rev-parse HEAD) &&
	test_must_fail git push dest.git reject &&
	test_must_fail git --git-dir=dest.git cat-file commit $commit

[master d08c8eb] reject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 reject.t
To dest.git
 ! [remote rejected] reject -> reject (pre-receive hook declined)
error: failed to push some refs to 'dest.git'
fatal: git cat-file d08c8eba97f4e683ece08654c7c8d2ba0c03b129: bad file
ok 3 - rejected objects are not installed

expecting success of 5547.4 'rejected objects are removed': 
	echo "incoming-*" >expect &&
	(cd dest.git/objects && echo incoming-*) >actual &&
	test_cmp expect actual

ok 4 - rejected objects are removed

expecting success of 5547.5 'push to repo path with path separator (colon)': 
	# The interesting failure case here is when the
	# receiving end cannot access its original object directory,
	# so make it likely for us to generate a delta by having
	# a non-trivial file with multiple versions.

	test-tool genrandom foo 4096 >file.bin &&
	git add file.bin &&
	git commit -m bin &&

	if test_have_prereq MINGW
	then
		pathsep=";"
	else
		pathsep=":"
	fi &&
	git clone --bare . "xxx${pathsep}yyy.git" &&

	echo change >>file.bin &&
	git commit -am change &&
	# Note that we have to use the full path here, or it gets confused
	# with the ssh host:path syntax.
	git push "$(pwd)/xxx${pathsep}yyy.git" HEAD

[master f56dd63] bin
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file.bin
Cloning into bare repository 'xxx:yyy.git'...
done.
[master 0343f66] change
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5547-push-quarantine/xxx:yyy.git
   f56dd63..0343f66  HEAD -> master
ok 5 - push to repo path with path separator (colon)

expecting success of 5547.6 'updating a ref from quarantine is forbidden': 
	git init --bare update.git &&
	test_hook -C update.git pre-receive <<-\EOF &&
	read old new refname
	git update-ref refs/heads/unrelated $new
	exit 1
	EOF
	test_must_fail git push update.git HEAD &&
	git -C update.git fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5547-push-quarantine/update.git/
remote: fatal: update_ref failed for ref 'refs/heads/unrelated': ref updates forbidden inside quarantine environment        
To update.git
 ! [remote rejected] HEAD -> master (pre-receive hook declined)
error: failed to push some refs to 'update.git'
notice: HEAD points to an unborn branch (master)
notice: No default references
ok 6 - updating a ref from quarantine is forbidden

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5549-fetch-push-http.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5549-fetch-push-http/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5550-http-fetch-dumb.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5550-http-fetch-dumb/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5548-push-porcelain.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5548-push-porcelain/.git/
expecting success of 5548.1 'setup upstream repository and workbench': 
		rm -rf upstream.git workbench &&
		git init --bare upstream.git &&
		git init workbench &&
		create_commits_in workbench A B &&
		(
			cd workbench &&
			# Try to make a stable fixed width for abbreviated commit ID,
			# this fixed-width oid will be replaced with "<OID>".
			git config core.abbrev 7 &&
			git remote add origin ../upstream.git &&
			git update-ref refs/heads/main $A &&
			git push origin \
				$B:refs/heads/main \
				$A:refs/heads/foo \
				$A:refs/heads/bar \
				$A:refs/heads/baz
		) &&
		git -C "workbench" config advice.pushUpdateRejected false &&
		upstream=upstream.git
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5548-push-porcelain/upstream.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5548-push-porcelain/workbench/.git/
[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
To ../upstream.git
 * [new branch]      d9df4505cb3522088b9e29d6051ac16f1564154a -> main
 * [new branch]      0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 -> foo
 * [new branch]      0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 -> bar
 * [new branch]      0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 -> baz
ok 1 - setup upstream repository and workbench

expecting success of 5548.2 'porcelain output of successful git-push (builtin protocol)': 
		(
			cd workbench &&
			git update-ref refs/heads/main $A &&
			git update-ref refs/heads/baz $A &&
			git update-ref refs/heads/next $A &&
			git push --porcelain --force origin \
				main \
				:refs/heads/foo \
				$B:bar \
				baz \
				next
		) >out &&
		make_user_friendly_and_stable_output <out >actual &&
		format_and_save_expect <<-EOF &&
		> To <URL/of/upstream.git>
		> =	refs/heads/baz:refs/heads/baz	[up to date]
		>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
		> -	:refs/heads/foo	[deleted]
		> +	refs/heads/main:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
		> *	refs/heads/next:refs/heads/next	[new branch]
		> Done
		EOF
		test_cmp expect actual &&

		git -C "$upstream" show-ref >out &&
		make_user_friendly_and_stable_output <out >actual &&
		cat >expect <<-EOF &&
		<COMMIT-B> refs/heads/bar
		<COMMIT-A> refs/heads/baz
		<COMMIT-A> refs/heads/main
		<COMMIT-A> refs/heads/next
		EOF
		test_cmp expect actual
	
ok 2 - porcelain output of successful git-push (builtin protocol)

expecting success of 5548.3 'atomic push failed (builtin protocol)': 
		(
			cd workbench &&
			git update-ref refs/heads/main $B &&
			git update-ref refs/heads/bar $A &&
			test_must_fail git push --atomic --porcelain origin \
				main \
				bar \
				:baz \
				next
		) >out &&
		make_user_friendly_and_stable_output <out >actual &&
		format_and_save_expect <<-EOF &&
		To <URL/of/upstream.git>
		> =	refs/heads/next:refs/heads/next	[up to date]
		> !	refs/heads/bar:refs/heads/bar	[rejected] (non-fast-forward)
		> !	(delete):refs/heads/baz	[rejected] (atomic push failed)
		> !	refs/heads/main:refs/heads/main	[rejected] (atomic push failed)
		Done
		EOF
		test_cmp expect actual &&

		git -C "$upstream" show-ref >out &&
		make_user_friendly_and_stable_output <out >actual &&
		cat >expect <<-EOF &&
		<COMMIT-B> refs/heads/bar
		<COMMIT-A> refs/heads/baz
		<COMMIT-A> refs/heads/main
		<COMMIT-A> refs/heads/next
		EOF
		test_cmp expect actual
	
error: atomic push failed for ref refs/heads/bar. status: 2

fatal: the remote end hung up unexpectedly
error: failed to push some refs to '../upstream.git'
ok 3 - atomic push failed (builtin protocol)

expecting success of 5548.4 'prepare pre-receive hook (builtin protocol)': 
		test_hook --setup -C "$upstream" pre-receive <<-EOF
		exit 1
		EOF
	
ok 4 - prepare pre-receive hook (builtin protocol)

expecting success of 5548.5 'pre-receive hook declined (builtin protocol)': 
		(
			cd workbench &&
			git update-ref refs/heads/main $B &&
			git update-ref refs/heads/bar $A &&
			test_must_fail git push --porcelain --force origin \
				main \
				bar \
				:baz \
				next
		) >out &&
		make_user_friendly_and_stable_output <out >actual &&
		format_and_save_expect <<-EOF &&
		To <URL/of/upstream.git>
		> =	refs/heads/next:refs/heads/next	[up to date]
		> !	refs/heads/bar:refs/heads/bar	[remote rejected] (pre-receive hook declined)
		> !	:refs/heads/baz	[remote rejected] (pre-receive hook declined)
		> !	refs/heads/main:refs/heads/main	[remote rejected] (pre-receive hook declined)
		Done
		EOF
		test_cmp expect actual &&

		git -C "$upstream" show-ref >out &&
		make_user_friendly_and_stable_output <out >actual &&
		cat >expect <<-EOF &&
		<COMMIT-B> refs/heads/bar
		<COMMIT-A> refs/heads/baz
		<COMMIT-A> refs/heads/main
		<COMMIT-A> refs/heads/next
		EOF
		test_cmp expect actual
	
error: failed to push some refs to '../upstream.git'
ok 5 - pre-receive hook declined (builtin protocol)

expecting success of 5548.6 'remove pre-receive hook (builtin protocol)': 
		rm "$upstream/hooks/pre-receive"
	
ok 6 - remove pre-receive hook (builtin protocol)

expecting success of 5548.7 'non-fastforward push (builtin protocol)': 
		(
			cd workbench &&
			test_must_fail git push --porcelain origin \
				main \
				bar \
				:baz \
				next
		) >out &&
		make_user_friendly_and_stable_output <out >actual &&
		format_and_save_expect <<-EOF &&
		To <URL/of/upstream.git>
		> =	refs/heads/next:refs/heads/next	[up to date]
		> -	:refs/heads/baz	[deleted]
		>  	refs/heads/main:refs/heads/main	<COMMIT-A>..<COMMIT-B>
		> !	refs/heads/bar:refs/heads/bar	[rejected] (non-fast-forward)
		Done
		EOF
		test_cmp expect actual &&

		git -C "$upstream" show-ref >out &&
		make_user_friendly_and_stable_output <out >actual &&
		cat >expect <<-EOF &&
		<COMMIT-B> refs/heads/bar
		<COMMIT-B> refs/heads/main
		<COMMIT-A> refs/heads/next
		EOF
		test_cmp expect actual
	
error: failed to push some refs to '../upstream.git'
ok 7 - non-fastforward push (builtin protocol)

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 7 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5543-atomic-push.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/.git/
expecting success of 5543.1 'atomic push works for a single branch': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git push --atomic up main
	) &&
	test_refs main main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   d79ce16..139b20d  main -> main
ok 1 - atomic push works for a single branch

expecting success of 5543.2 'atomic push works for two branches': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git branch second &&
		git push --mirror up &&
		test_commit two &&
		git checkout second &&
		test_commit three &&
		git push --atomic up main second
	) &&
	test_refs main main &&
	test_refs second second

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to branch 'second'
[second 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
remote: warning: updating the current branch        
To ../upstream
   d79ce16..139b20d  main -> main
   d79ce16..897c206  second -> second
ok 2 - atomic push works for two branches

expecting success of 5543.3 'atomic push works in combination with --mirror': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git checkout -b second &&
		test_commit two &&
		git push --atomic --mirror up
	) &&
	test_refs main main &&
	test_refs second second

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'second'
[second 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         one -> one
 * [new tag]         two -> two
ok 3 - atomic push works in combination with --mirror

expecting success of 5543.4 'atomic push works in combination with --force': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git branch second main &&
		test_commit two_a &&
		git checkout second &&
		test_commit two_b &&
		test_commit three_b &&
		test_commit four &&
		git push --mirror up &&
		# The actual test is below
		git checkout main &&
		test_commit three_a &&
		git checkout second &&
		git reset --hard HEAD^ &&
		git push --force --atomic up main second
	) &&
	test_refs main main &&
	test_refs second second

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 0fd3f08] two_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two_a.t
Switched to branch 'second'
[second 476acd6] two_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two_b.t
[second 04c72ee] three_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three_b.t
[second f7b7ae4] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         four -> four
 * [new tag]         one -> one
 * [new tag]         three_b -> three_b
 * [new tag]         two_a -> two_a
 * [new tag]         two_b -> two_b
Switched to branch 'main'
[main 6413866] three_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three_a.t
Switched to branch 'second'
HEAD is now at 04c72ee three_b
remote: warning: updating the current branch        
To ../upstream
   0fd3f08..6413866  main -> main
 + f7b7ae4...04c72ee second -> second (forced update)
ok 4 - atomic push works in combination with --force

expecting success of 5543.5 'atomic push fails if one branch fails': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git checkout -b second main &&
		test_commit two &&
		test_commit three &&
		test_commit four &&
		git push --mirror up &&
		git reset --hard HEAD~2 &&
		test_commit five &&
		git checkout main &&
		test_commit six &&
		test_must_fail git push --atomic --all up
	) &&
	test_refs main HEAD@{7} &&
	test_refs second HEAD@{4}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'second'
[second 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[second 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[second fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         four -> four
 * [new tag]         one -> one
 * [new tag]         three -> three
 * [new tag]         two -> two
HEAD is now at 139b20d two
[second a9f66f4] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
Switched to branch 'main'
[main 29c9ea2] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 six.t
error: atomic push failed for ref refs/heads/second. status: 2

fatal: the remote end hung up unexpectedly
To ../upstream
 ! [rejected]        main -> main (atomic push failed)
 ! [rejected]        second -> second (non-fast-forward)
error: failed to push some refs to '../upstream'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ok 5 - atomic push fails if one branch fails

expecting success of 5543.6 'atomic push fails if one tag fails remotely': 
	# prepare the repo
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git checkout -b second main &&
		test_commit two &&
		git push --mirror up
	) &&
	# a third party modifies the server side:
	(
		cd upstream &&
		git checkout second &&
		git tag test_tag second
	) &&
	# see if we can now push both branches.
	(
		cd workbench &&
		git checkout main &&
		test_commit three &&
		git checkout second &&
		test_commit four &&
		git tag test_tag &&
		test_must_fail git push --tags --atomic up main second
	) &&
	test_refs main HEAD@{3} &&
	test_refs second HEAD@{1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'second'
[second 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         one -> one
 * [new tag]         two -> two
Switched to branch 'second'
Switched to branch 'main'
[main 846d065] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to branch 'second'
[second b6d6c1f] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
error: atomic push failed for ref refs/tags/test_tag. status: 3

fatal: the remote end hung up unexpectedly
To ../upstream
 ! [rejected]        main -> main (atomic push failed)
 ! [rejected]        second -> second (atomic push failed)
 ! [rejected]        test_tag -> test_tag (already exists)
 ! [rejected]        four -> four (atomic push failed)
 ! [rejected]        three -> three (atomic push failed)
error: failed to push some refs to '../upstream'
hint: Updates were rejected because the tag already exists in the remote.
ok 6 - atomic push fails if one tag fails remotely

expecting success of 5543.7 'atomic push obeys update hook preventing a branch to be pushed': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git checkout -b second main &&
		test_commit two &&
		git push --mirror up
	) &&
	test_hook -C upstream update <<-\EOF &&
	# only allow update to main from now on
	test "$1" = "refs/heads/main"
	EOF
	(
		cd workbench &&
		git checkout main &&
		test_commit three &&
		git checkout second &&
		test_commit four &&
		test_must_fail git push --atomic up main second
	) &&
	test_refs main HEAD@{3} &&
	test_refs second HEAD@{1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Switched to a new branch 'second'
[second 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new branch]      second -> second
 * [new tag]         one -> one
 * [new tag]         two -> two
Switched to branch 'main'
[main 846d065] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to branch 'second'
[second b6d6c1f] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
remote: warning: updating the current branch        
remote: error: hook declined to update refs/heads/second        
To ../upstream
 ! [remote rejected] main -> main (atomic push failure)
 ! [remote rejected] second -> second (hook declined)
error: failed to push some refs to '../upstream'
ok 7 - atomic push obeys update hook preventing a branch to be pushed

expecting success of 5543.8 'atomic push is not advertised if configured': 
	mk_repo_pair &&
	(
		cd upstream &&
		git config receive.advertiseatomic 0
	) &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		test_must_fail git push --atomic up main
	) &&
	test_refs main HEAD@{1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
fatal: the receiving end does not support --atomic push
fatal: the remote end hung up unexpectedly
ok 8 - atomic push is not advertised if configured

expecting success of 5543.9 'atomic push reports (reject by update hook)': 
	mk_repo_pair &&
	(
		cd workbench &&
		test_commit one &&
		git branch foo &&
		git push up main one foo &&
		git tag -d one
	) &&
	(
		mkdir -p upstream/.git/hooks &&
		cat >upstream/.git/hooks/update <<-EOF &&
		#!/bin/sh

		if test "\$1" = "refs/heads/bar"
		then
			echo >&2 "Pusing to branch bar is prohibited"
			exit 1
		fi
		EOF
		chmod a+x upstream/.git/hooks/update
	) &&
	(
		cd workbench &&
		test_commit two &&
		git branch bar
	) &&
	test_must_fail git -C workbench \
		push --atomic up main two bar >out 2>&1 &&
	fmt_status_report <out >actual &&
	cat >expect <<-EOF &&
	To ../upstream
	 ! [remote rejected] main -> main (atomic push failure)
	 ! [remote rejected] two -> two (atomic push failure)
	 ! [remote rejected] bar -> bar (hook declined)
	EOF
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5543-atomic-push/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
 * [new branch]      foo -> foo
Deleted tag 'one' (was d79ce16)
[main 51ba0d2] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 9 - atomic push reports (reject by update hook)

expecting success of 5543.10 'atomic push reports (mirror, but reject by update hook)': 
	(
		cd workbench &&
		git remote remove up &&
		git remote add up ../upstream
	) &&
	test_must_fail git -C workbench \
		push --atomic --mirror up >out 2>&1 &&
	fmt_status_report <out >actual &&
	cat >expect <<-EOF &&
	To ../upstream
	 ! [remote rejected] main -> main (atomic push failure)
	 ! [remote rejected] one (atomic push failure)
	 ! [remote rejected] bar -> bar (hook declined)
	 ! [remote rejected] two -> two (atomic push failure)
	EOF
	test_cmp expect actual

ok 10 - atomic push reports (mirror, but reject by update hook)

expecting success of 5543.11 'atomic push reports (reject by non-ff)': 
	rm upstream/.git/hooks/update &&
	(
		cd workbench &&
		git push up main &&
		git reset --hard HEAD^
	) &&
	test_must_fail git -C workbench \
		push --atomic up main foo bar >out 2>&1 &&
	fmt_status_report <out >actual &&
	cat >expect <<-EOF &&
	To ../upstream
	 ! [rejected] main -> main (non-fast-forward)
	 ! [rejected] bar -> bar (atomic push failed)
	EOF
	test_cmp expect actual

remote: warning: updating the current branch        
To ../upstream
   d79ce16..51ba0d2  main -> main
HEAD is now at d79ce16 one
ok 11 - atomic push reports (reject by non-ff)

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5551-http-fetch-smart.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5551-http-fetch-smart/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5554-noop-fetch-negotiator.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5554-noop-fetch-negotiator/.git/
expecting success of 5554.1 'noop negotiator does not emit any "have"': 
	rm -f trace &&

	test_create_repo server &&
	test_commit -C server to_fetch &&

	test_create_repo client &&
	test_commit -C client we_have &&

	test_config -C client fetch.negotiationalgorithm noop &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch "$(pwd)/server" &&

	! grep "fetch> have" trace &&
	grep "fetch> done" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5554-noop-fetch-negotiator/server/.git/
[master (root-commit) 92dc17d] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5554-noop-fetch-negotiator/client/.git/
[master (root-commit) c20e644] we_have
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 we_have.t
From /<<PKGBUILDDIR>>/t/trash directory.t5554-noop-fetch-negotiator/server
 * branch            HEAD       -> FETCH_HEAD
packet:        fetch> done
ok 1 - noop negotiator does not emit any "have"

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5545-push-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/.git/
expecting success of 5545.1 'one push option works for a single branch': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git push --push-option=asdf up main
	) &&
	test_refs main main &&
	echo "asdf" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   d79ce16..139b20d  main -> main
ok 1 - one push option works for a single branch

expecting success of 5545.2 'push option denied by remote': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions false &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		test_must_fail git push --push-option=asdf up main
	) &&
	test_refs main HEAD@{1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
fatal: the receiving end does not support push options
fatal: the remote end hung up unexpectedly
ok 2 - push option denied by remote

expecting success of 5545.3 'two push options work': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git push --push-option=asdf --push-option="more structured text" up main
	) &&
	test_refs main main &&
	printf "asdf\nmore structured text\n" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   d79ce16..139b20d  main -> main
ok 3 - two push options work

expecting success of 5545.4 'push options and submodules': 
	test_when_finished "rm -rf parent" &&
	test_when_finished "rm -rf parent_upstream" &&
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	cp -r upstream parent_upstream &&
	test_commit -C upstream one &&

	test_create_repo parent &&
	git -C parent remote add up ../parent_upstream &&
	test_commit -C parent one &&
	git -C parent push --mirror up &&

	test_config_global protocol.file.allow always &&
	git -C parent submodule add ../upstream workbench &&
	git -C parent/workbench remote add up ../../upstream &&
	git -C parent commit -m "add submodule" &&

	test_commit -C parent/workbench two &&
	git -C parent add workbench &&
	git -C parent commit -m "update workbench" &&

	git -C parent push \
		--push-option=asdf --push-option="more structured text" \
		--recurse-submodules=on-demand up main &&

	git -C upstream rev-parse --verify main >expect &&
	git -C parent/workbench rev-parse --verify main >actual &&
	test_cmp expect actual &&

	git -C parent_upstream rev-parse --verify main >expect &&
	git -C parent rev-parse --verify main >actual &&
	test_cmp expect actual &&

	printf "asdf\nmore structured text\n" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options &&
	test_cmp expect parent_upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect parent_upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/parent/.git/
[main (root-commit) b838542] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../parent_upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/parent/workbench'...
done.
[main 8b5c571] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 workbench
[main 8f1d4ef] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 2417cbb] update workbench
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Pushing submodule 'workbench'
remote: warning: updating the current branch        
To ../../upstream
   d79ce16..8f1d4ef  main -> main
remote: warning: updating the current branch        
To ../parent_upstream
   b838542..2417cbb  main -> main
ok 4 - push options and submodules

expecting success of 5545.5 'default push option': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git -c push.pushOption=default push up main
	) &&
	test_refs main main &&
	echo "default" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   af0b45c..1dd7f79  main -> main
ok 5 - default push option

expecting success of 5545.6 'two default push options': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git -c push.pushOption=default1 -c push.pushOption=default2 push up main
	) &&
	test_refs main main &&
	printf "default1\ndefault2\n" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   af0b45c..1dd7f79  main -> main
ok 6 - two default push options

expecting success of 5545.7 'push option from command line overrides from-config push option': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git -c push.pushOption=default push --push-option=manual up main
	) &&
	test_refs main main &&
	echo "manual" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   af0b45c..1dd7f79  main -> main
ok 7 - push option from command line overrides from-config push option

expecting success of 5545.8 'empty value of push.pushOption in config clears the list': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		git -c push.pushOption=default1 -c push.pushOption= -c push.pushOption=default2 push up main
	) &&
	test_refs main main &&
	echo "default2" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
	test_cmp expect upstream/.git/hooks/post-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
remote: warning: updating the current branch        
To ../upstream
   af0b45c..1dd7f79  main -> main
ok 8 - empty value of push.pushOption in config clears the list

expecting success of 5545.9 'invalid push option in config': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	(
		cd workbench &&
		test_commit one &&
		git push --mirror up &&
		test_commit two &&
		test_must_fail git -c push.pushOption push up main
	) &&
	test_refs main HEAD@{1}

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
 * [new tag]         one -> one
[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
error: missing value for 'push.pushoption'
fatal: unable to parse 'push.pushoption' from command-line config
ok 9 - invalid push option in config

expecting success of 5545.10 'push options keep quoted characters intact (direct)': 
	mk_repo_pair &&
	git -C upstream config receive.advertisePushOptions true &&
	test_commit -C workbench one &&
	git -C workbench push --push-option="\"embedded quotes\"" up main &&
	echo "\"embedded quotes\"" >expect &&
	test_cmp expect upstream/.git/hooks/pre-receive.push_options

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5545-push-options/workbench/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
remote: warning: updating the current branch        
To ../upstream
 * [new branch]      main -> main
ok 10 - push options keep quoted characters intact (direct)

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 10 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5557-http-get.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5557-http-get/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5555-http-smart-common.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5555-http-smart-common/.git/
expecting success of 5555.1 'setup': 
	test_commit --no-tag initial

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 1 - setup

expecting success of 5555.2 'git upload-pack --http-backend-info-refs and --advertise-refs are aliased': 
	git upload-pack --http-backend-info-refs . >expected 2>err.expected &&
	git upload-pack --advertise-refs . >actual 2>err.actual &&
	test_cmp err.expected err.actual &&
	test_cmp expected actual

ok 2 - git upload-pack --http-backend-info-refs and --advertise-refs are aliased

expecting success of 5555.3 'git receive-pack --http-backend-info-refs and --advertise-refs are aliased': 
	git receive-pack --http-backend-info-refs . >expected 2>err.expected &&
	git receive-pack --advertise-refs . >actual 2>err.actual &&
	test_cmp err.expected err.actual &&
	test_cmp expected actual

ok 3 - git receive-pack --http-backend-info-refs and --advertise-refs are aliased

expecting success of 5555.4 'git upload-pack --advertise-refs': 
	cat >expect <<-EOF &&
	$(git rev-parse HEAD) HEAD
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	# We only care about GIT_PROTOCOL, not GIT_TEST_PROTOCOL_VERSION
	sane_unset GIT_PROTOCOL &&
	GIT_TEST_PROTOCOL_VERSION=2 \
	git upload-pack --advertise-refs . >out 2>err &&

	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect &&

	# The --advertise-refs alias works
	git upload-pack --advertise-refs . >out 2>err &&

	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect

ok 4 - git upload-pack --advertise-refs

expecting success of 5555.5 'git upload-pack --advertise-refs: v0': 
	# With no specified protocol
	cat >expect <<-EOF &&
	$(git rev-parse HEAD) HEAD
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	git upload-pack --advertise-refs . >out 2>err &&
	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect &&

	# With explicit v0
	GIT_PROTOCOL=version=0 \
	git upload-pack --advertise-refs . >out 2>err &&
	test-tool pkt-line unpack <out >actual 2>err &&
	test_must_be_empty err &&
	test_cmp actual expect


ok 5 - git upload-pack --advertise-refs: v0

expecting success of 5555.6 'git receive-pack --advertise-refs: v0': 
	# With no specified protocol
	cat >expect <<-EOF &&
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	git receive-pack --advertise-refs . >out 2>err &&
	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect &&

	# With explicit v0
	GIT_PROTOCOL=version=0 \
	git receive-pack --advertise-refs . >out 2>err &&
	test-tool pkt-line unpack <out >actual 2>err &&
	test_must_be_empty err &&
	test_cmp actual expect


ok 6 - git receive-pack --advertise-refs: v0

expecting success of 5555.7 'git upload-pack --advertise-refs: v1': 
	# With no specified protocol
	cat >expect <<-EOF &&
	version 1
	$(git rev-parse HEAD) HEAD
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	GIT_PROTOCOL=version=1 \
	git upload-pack --advertise-refs . >out &&

	test-tool pkt-line unpack <out >actual 2>err &&
	test_must_be_empty err &&
	test_cmp actual expect

ok 7 - git upload-pack --advertise-refs: v1

expecting success of 5555.8 'git receive-pack --advertise-refs: v1': 
	# With no specified protocol
	cat >expect <<-EOF &&
	version 1
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	GIT_PROTOCOL=version=1 \
	git receive-pack --advertise-refs . >out &&

	test-tool pkt-line unpack <out >actual 2>err &&
	test_must_be_empty err &&
	test_cmp actual expect

ok 8 - git receive-pack --advertise-refs: v1

expecting success of 5555.9 'git upload-pack --advertise-refs: v2': 
	cat >expect <<-EOF &&
	version 2
	agent=FAKE
	ls-refs=unborn
	fetch=shallow wait-for-done
	server-option
	object-format=$(test_oid algo)
	object-info
	0000
	EOF

	GIT_PROTOCOL=version=2 \
	GIT_USER_AGENT=FAKE \
	git upload-pack --advertise-refs . >out 2>err &&

	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect

ok 9 - git upload-pack --advertise-refs: v2

expecting success of 5555.10 'git receive-pack --advertise-refs: v2': 
	# There is no v2 yet for receive-pack, implicit v0
	cat >expect <<-EOF &&
	$(git rev-parse HEAD) $(git symbolic-ref HEAD)
	0000
	EOF

	GIT_PROTOCOL=version=2 \
	git receive-pack --advertise-refs . >out 2>err &&

	test-tool pkt-line unpack <out >actual &&
	test_must_be_empty err &&
	test_cmp actual expect

ok 10 - git receive-pack --advertise-refs: v2

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5559-http-fetch-smart-http2.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5559-http-fetch-smart-http2/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5558-clone-bundle-uri.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/.git/
expecting success of 5558.1 'fail to clone from non-existent file': 
	test_when_finished rm -rf test &&
	git clone --bundle-uri="$(pwd)/does-not-exist" . test 2>err &&
	grep "failed to download bundle from URI" err

warning: failed to download bundle from URI '/<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/does-not-exist'
ok 1 - fail to clone from non-existent file

expecting success of 5558.2 'fail to clone from non-bundle file': 
	test_when_finished rm -rf test &&
	echo bogus >bogus &&
	git clone --bundle-uri="$(pwd)/bogus" . test 2>err &&
	grep "is not a bundle" err

warning: file at URI '/<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/bogus' is not a bundle or bundle list
ok 2 - fail to clone from non-bundle file

expecting success of 5558.3 'create bundle': 
	git init clone-from &&
	git -C clone-from checkout -b topic &&
	test_commit -C clone-from A &&
	test_commit -C clone-from B &&
	git -C clone-from bundle create B.bundle topic

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/clone-from/.git/
Switched to a new branch 'topic'
[topic (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[topic d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ok 3 - create bundle

expecting success of 5558.4 'clone with path bundle': 
	git clone --bundle-uri="clone-from/B.bundle" \
		clone-from clone-path &&
	git -C clone-path rev-parse refs/bundles/topic >actual &&
	git -C clone-from rev-parse topic >expect &&
	test_cmp expect actual

Cloning into 'clone-path'...
done.
ok 4 - clone with path bundle

expecting success of 5558.5 'clone with file:// bundle': 
	git clone --bundle-uri="file://$(pwd)/clone-from/B.bundle" \
		clone-from clone-file &&
	git -C clone-file rev-parse refs/bundles/topic >actual &&
	git -C clone-from rev-parse topic >expect &&
	test_cmp expect actual

Cloning into 'clone-file'...
done.
ok 5 - clone with file:// bundle

expecting success of 5558.6 'construct incremental bundle list': 
	(
		cd clone-from &&
		git checkout -b base &&
		test_commit 1 &&
		git checkout -b left &&
		test_commit 2 &&
		git checkout -b right base &&
		test_commit 3 &&
		git checkout -b merge left &&
		git merge right -m "4" &&

		git bundle create bundle-1.bundle base &&
		git bundle create bundle-2.bundle base..left &&
		git bundle create bundle-3.bundle base..right &&
		git bundle create bundle-4.bundle merge --not left right
	)

Switched to a new branch 'base'
[base 65d47d5] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Switched to a new branch 'left'
[left 918de9f] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Switched to a new branch 'right'
[right d1bc9f9] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
Switched to a new branch 'merge'
Merge made by the 'ort' strategy.
 3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
ok 6 - construct incremental bundle list

expecting success of 5558.7 'clone bundle list (file, no heuristic)': 
	cat >bundle-list <<-EOF &&
	[bundle]
		version = 1
		mode = all

	[bundle "bundle-1"]
		uri = file://$(pwd)/clone-from/bundle-1.bundle

	[bundle "bundle-2"]
		uri = file://$(pwd)/clone-from/bundle-2.bundle

	[bundle "bundle-3"]
		uri = file://$(pwd)/clone-from/bundle-3.bundle

	[bundle "bundle-4"]
		uri = file://$(pwd)/clone-from/bundle-4.bundle
	EOF

	git clone --bundle-uri="file://$(pwd)/bundle-list" \
		clone-from clone-list-file 2>err &&
	! grep "Repository lacks these prerequisite commits" err &&

	git -C clone-from for-each-ref --format="%(objectname)" >oids &&
	git -C clone-list-file cat-file --batch-check <oids &&

	git -C clone-list-file for-each-ref --format="%(refname)" >refs &&
	grep "refs/bundles/" refs >actual &&
	cat >expect <<-\EOF &&
	refs/bundles/base
	refs/bundles/left
	refs/bundles/merge
	refs/bundles/right
	EOF
	test_cmp expect actual

65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
475812ed564e3085586d0b0acc392cec0a90c18e commit 261
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 commit 165
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
ok 7 - clone bundle list (file, no heuristic)

expecting success of 5558.8 'clone bundle list (file, all mode, some failures)': 
	cat >bundle-list <<-EOF &&
	[bundle]
		version = 1
		mode = all

	# Does not exist. Should be skipped.
	[bundle "bundle-0"]
		uri = file://$(pwd)/clone-from/bundle-0.bundle

	[bundle "bundle-1"]
		uri = file://$(pwd)/clone-from/bundle-1.bundle

	[bundle "bundle-2"]
		uri = file://$(pwd)/clone-from/bundle-2.bundle

	# No bundle-3 means bundle-4 will not apply.

	[bundle "bundle-4"]
		uri = file://$(pwd)/clone-from/bundle-4.bundle

	# Does not exist. Should be skipped.
	[bundle "bundle-5"]
		uri = file://$(pwd)/clone-from/bundle-5.bundle
	EOF

	GIT_TRACE2_PERF=1 \
	git clone --bundle-uri="file://$(pwd)/bundle-list" \
		clone-from clone-all-some 2>err &&
	! grep "Repository lacks these prerequisite commits" err &&
	! grep "fatal" err &&
	grep "warning: failed to download bundle from URI" err &&

	git -C clone-from for-each-ref --format="%(objectname)" >oids &&
	git -C clone-all-some cat-file --batch-check <oids &&

	git -C clone-all-some for-each-ref --format="%(refname)" >refs &&
	grep "refs/bundles/" refs >actual &&
	cat >expect <<-\EOF &&
	refs/bundles/base
	refs/bundles/left
	EOF
	test_cmp expect actual

warning: failed to download bundle from URI 'file:///<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/clone-from/bundle-5.bundle'
warning: failed to download bundle from URI 'file:///<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/clone-from/bundle-0.bundle'
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
475812ed564e3085586d0b0acc392cec0a90c18e commit 261
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 commit 165
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
ok 8 - clone bundle list (file, all mode, some failures)

expecting success of 5558.9 'clone bundle list (file, all mode, all failures)': 
	cat >bundle-list <<-EOF &&
	[bundle]
		version = 1
		mode = all

	# Does not exist. Should be skipped.
	[bundle "bundle-0"]
		uri = file://$(pwd)/clone-from/bundle-0.bundle

	# Does not exist. Should be skipped.
	[bundle "bundle-5"]
		uri = file://$(pwd)/clone-from/bundle-5.bundle
	EOF

	git clone --bundle-uri="file://$(pwd)/bundle-list" \
		clone-from clone-all-fail 2>err &&
	! grep "Repository lacks these prerequisite commits" err &&
	! grep "fatal" err &&
	grep "warning: failed to download bundle from URI" err &&

	git -C clone-from for-each-ref --format="%(objectname)" >oids &&
	git -C clone-all-fail cat-file --batch-check <oids &&

	git -C clone-all-fail for-each-ref --format="%(refname)" >refs &&
	! grep "refs/bundles/" refs

warning: failed to download bundle from URI 'file:///<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/clone-from/bundle-5.bundle'
warning: failed to download bundle from URI 'file:///<<PKGBUILDDIR>>/t/trash directory.t5558-clone-bundle-uri/clone-from/bundle-0.bundle'
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
475812ed564e3085586d0b0acc392cec0a90c18e commit 261
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 commit 165
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
ok 9 - clone bundle list (file, all mode, all failures)

expecting success of 5558.10 'clone bundle list (file, any mode)': 
	cat >bundle-list <<-EOF &&
	[bundle]
		version = 1
		mode = any

	# Does not exist. Should be skipped.
	[bundle "bundle-0"]
		uri = file://$(pwd)/clone-from/bundle-0.bundle

	[bundle "bundle-1"]
		uri = file://$(pwd)/clone-from/bundle-1.bundle

	# Does not exist. Should be skipped.
	[bundle "bundle-5"]
		uri = file://$(pwd)/clone-from/bundle-5.bundle
	EOF

	git clone --bundle-uri="file://$(pwd)/bundle-list" \
		clone-from clone-any-file 2>err &&
	! grep "Repository lacks these prerequisite commits" err &&

	git -C clone-from for-each-ref --format="%(objectname)" >oids &&
	git -C clone-any-file cat-file --batch-check <oids &&

	git -C clone-any-file for-each-ref --format="%(refname)" >refs &&
	grep "refs/bundles/" refs >actual &&
	cat >expect <<-\EOF &&
	refs/bundles/base
	EOF
	test_cmp expect actual

65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
475812ed564e3085586d0b0acc392cec0a90c18e commit 261
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 commit 165
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
ok 10 - clone bundle list (file, any mode)

expecting success of 5558.11 'clone bundle list (file, any mode, all failures)': 
	cat >bundle-list <<-EOF &&
	[bundle]
		version = 1
		mode = any

	# Does not exist. Should be skipped.
	[bundle "bundle-0"]
		uri = $HTTPD_URL/bundle-0.bundle

	# Does not exist. Should be skipped.
	[bundle "bundle-5"]
		uri = $HTTPD_URL/bundle-5.bundle
	EOF

	git clone --bundle-uri="file://$(pwd)/bundle-list" \
		clone-from clone-any-fail 2>err &&
	! grep "fatal" err &&
	grep "warning: failed to download bundle from URI" err &&

	git -C clone-from for-each-ref --format="%(objectname)" >oids &&
	git -C clone-any-fail cat-file --batch-check <oids &&

	git -C clone-any-fail for-each-ref --format="%(refname)" >refs &&
	! grep "refs/bundles/" refs

warning: failed to download bundle from URI '/bundle-5.bundle'
warning: failed to download bundle from URI '/bundle-0.bundle'
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
475812ed564e3085586d0b0acc392cec0a90c18e commit 261
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
65d47d507bde981075d2f2532bb104e4b58b9170 commit 213
918de9f3988f29866b94f657626edb7247c7ddbd commit 213
d1bc9f9c222df7b7de791db57cdf7e8ba0627c3e commit 213
0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 commit 165
d9df4505cb3522088b9e29d6051ac16f1564154a commit 213
ok 11 - clone bundle list (file, any mode, all failures)

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 11 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5561-http-backend.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5561-http-backend/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5553-set-upstream.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream/.git/
expecting success of 5553.1 'setup bare parent fetch': 
	ensure_fresh_upstream &&
	git remote add upstream parent

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream/parent/
ok 1 - setup bare parent fetch

expecting success of 5553.2 'setup commit on main and other fetch': 
	test_commit one &&
	git push upstream main &&
	git checkout -b other &&
	test_commit two &&
	git push upstream other

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
To parent
 * [new branch]      main -> main
Switched to a new branch 'other'
[other 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
To parent
 * [new branch]      other -> other
ok 2 - setup commit on main and other fetch

expecting success of 5553.3 'fetch --set-upstream does not set upstream w/o branch': 
	clear_config main other &&
	git checkout main &&
	git fetch --set-upstream upstream &&
	check_config_missing main &&
	check_config_missing other

Switched to branch 'main'
warning: no source branch found;
you need to specify exactly one branch with the --set-upstream option
ok 3 - fetch --set-upstream does not set upstream w/o branch

expecting success of 5553.4 'fetch --set-upstream upstream main sets branch main but not other': 
	clear_config main other &&
	git fetch --set-upstream upstream main &&
	check_config main upstream refs/heads/main &&
	check_config_missing other

From parent
 * branch            main       -> FETCH_HEAD
ok 4 - fetch --set-upstream upstream main sets branch main but not other

expecting success of 5553.5 'fetch --set-upstream upstream other sets branch other': 
	clear_config main other &&
	git fetch --set-upstream upstream other &&
	check_config main upstream refs/heads/other &&
	check_config_missing other

From parent
 * branch            other      -> FETCH_HEAD
ok 5 - fetch --set-upstream upstream other sets branch other

expecting success of 5553.6 'fetch --set-upstream main:other does not set the branch other2': 
	clear_config other2 &&
	git fetch --set-upstream upstream main:other2 &&
	check_config_missing other2

From parent
 * [new branch]      main       -> other2
warning: no source branch found;
you need to specify exactly one branch with the --set-upstream option
ok 6 - fetch --set-upstream main:other does not set the branch other2

expecting success of 5553.7 'fetch --set-upstream http://nosuchdomain.example.com fails with invalid url': 
	# main explicitly not cleared, we check that it is not touched from previous value
	clear_config other other2 &&
	test_must_fail git fetch --set-upstream http://nosuchdomain.example.com &&
	check_config main upstream refs/heads/other &&
	check_config_missing other &&
	check_config_missing other2

fatal: unable to access 'http://nosuchdomain.example.com/': Could not resolve host: nosuchdomain.example.com
ok 7 - fetch --set-upstream http://nosuchdomain.example.com fails with invalid url

expecting success of 5553.8 'fetch --set-upstream with valid URL sets upstream to URL': 
	clear_config other other2 &&
	url="file://$PWD" &&
	git fetch --set-upstream "$url" &&
	check_config main "$url" HEAD &&
	check_config_missing other &&
	check_config_missing other2

From file:///<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream
 * branch            HEAD       -> FETCH_HEAD
ok 8 - fetch --set-upstream with valid URL sets upstream to URL

expecting success of 5553.9 'fetch --set-upstream with a detached HEAD': 
	git checkout HEAD^0 &&
	test_when_finished "git checkout -" &&
	cat >expect <<-\EOF &&
	warning: could not set upstream of HEAD to 'main' from 'upstream' when it does not point to any branch.
	EOF
	git fetch --set-upstream upstream main 2>actual.raw &&
	grep ^warning: actual.raw >actual &&
	test_cmp expect actual

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d79ce16 one
Switched to branch 'main'
ok 9 - fetch --set-upstream with a detached HEAD

expecting success of 5553.10 'setup bare parent pull': 
	git remote rm upstream &&
	ensure_fresh_upstream &&
	git remote add upstream parent

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream/parent/
ok 10 - setup bare parent pull

expecting success of 5553.11 'setup commit on main and other pull': 
	test_commit three &&
	git push --tags upstream main &&
	test_commit four &&
	git push upstream other

[main 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
To parent
 * [new branch]      main -> main
 * [new tag]         one -> one
 * [new tag]         three -> three
 * [new tag]         two -> two
[main 6f2ec4d] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
To parent
 * [new branch]      other -> other
ok 11 - setup commit on main and other pull

expecting success of 5553.12 'pull --set-upstream upstream main sets branch main but not other': 
	clear_config main other &&
	git pull --no-rebase --set-upstream upstream main &&
	check_config main upstream refs/heads/main &&
	check_config_missing other

From parent
 * branch            main       -> FETCH_HEAD
Already up to date.
ok 12 - pull --set-upstream upstream main sets branch main but not other

expecting success of 5553.13 'pull --set-upstream main:other2 does not set the branch other2': 
	clear_config other2 &&
	git pull --no-rebase --set-upstream upstream main:other2 &&
	check_config_missing other2

From parent
   d79ce16..897c206  main       -> other2
warning: no source branch found;
you need to specify exactly one branch with the --set-upstream option
Already up to date.
ok 13 - pull --set-upstream main:other2 does not set the branch other2

expecting success of 5553.14 'pull --set-upstream upstream other sets branch main': 
	clear_config main other &&
	git pull --no-rebase --set-upstream upstream other &&
	check_config main upstream refs/heads/other &&
	check_config_missing other

From parent
 * branch            other      -> FETCH_HEAD
Merge made by the 'ort' strategy.
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 14 - pull --set-upstream upstream other sets branch main

expecting success of 5553.15 'pull --set-upstream upstream tag does not set the tag': 
	clear_config three &&
	git pull --no-rebase --tags --set-upstream upstream three &&
	check_config_missing three

From parent
 * tag               three      -> FETCH_HEAD
warning: not setting upstream for a remote tag
Already up to date.
ok 15 - pull --set-upstream upstream tag does not set the tag

expecting success of 5553.16 'pull --set-upstream http://nosuchdomain.example.com fails with invalid url': 
	# main explicitly not cleared, we check that it is not touched from previous value
	clear_config other other2 three &&
	test_must_fail git pull --set-upstream http://nosuchdomain.example.com &&
	check_config main upstream refs/heads/other &&
	check_config_missing other &&
	check_config_missing other2 &&
	check_config_missing three

fatal: unable to access 'http://nosuchdomain.example.com/': Could not resolve host: nosuchdomain.example.com
ok 16 - pull --set-upstream http://nosuchdomain.example.com fails with invalid url

expecting success of 5553.17 'pull --set-upstream upstream HEAD sets branch HEAD': 
	clear_config main other &&
	git pull --no-rebase --set-upstream upstream HEAD &&
	check_config main upstream HEAD &&
	git checkout other &&
	git pull --no-rebase --set-upstream upstream HEAD &&
	check_config other upstream HEAD

From parent
 * branch            HEAD       -> FETCH_HEAD
Already up to date.
Switched to branch 'other'
From parent
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 three.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 17 - pull --set-upstream upstream HEAD sets branch HEAD

expecting success of 5553.18 'pull --set-upstream upstream with more than one branch does nothing': 
	clear_config main three &&
	git pull --no-rebase --set-upstream upstream main three &&
	check_config_missing main &&
	check_config_missing three

From parent
 * branch            main       -> FETCH_HEAD
 * tag               three      -> FETCH_HEAD
warning: multiple branches detected, incompatible with --set-upstream
Already up to date.
ok 18 - pull --set-upstream upstream with more than one branch does nothing

expecting success of 5553.19 'pull --set-upstream with valid URL sets upstream to URL': 
	clear_config main other other2 &&
	git checkout main &&
	url="file://$PWD" &&
	git pull --set-upstream "$url" &&
	check_config main "$url" HEAD &&
	check_config_missing other &&
	check_config_missing other2

Switched to branch 'main'
From file:///<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream
 * branch            HEAD       -> FETCH_HEAD
Already up to date.
ok 19 - pull --set-upstream with valid URL sets upstream to URL

expecting success of 5553.20 'pull --set-upstream with valid URL and branch sets branch': 
	clear_config main other other2 &&
	git checkout main &&
	url="file://$PWD" &&
	git pull --set-upstream "$url" main &&
	check_config main "$url" refs/heads/main &&
	check_config_missing other &&
	check_config_missing other2

Already on 'main'
From file:///<<PKGBUILDDIR>>/t/trash directory.t5553-set-upstream
 * branch            main       -> FETCH_HEAD
Already up to date.
ok 20 - pull --set-upstream with valid URL and branch sets branch

expecting success of 5553.21 'pull --set-upstream with a detached HEAD': 
	git checkout HEAD^0 &&
	test_when_finished "git checkout -" &&
	cat >expect <<-\EOF &&
	warning: could not set upstream of HEAD to 'main' from 'upstream' when it does not point to any branch.
	EOF
	git pull --no-rebase --set-upstream upstream main 2>actual.raw &&
	grep ^warning: actual.raw >actual &&
	test_cmp expect actual

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 066b1d4 Merge branch 'other' of parent
Already up to date.
Switched to branch 'main'
ok 21 - pull --set-upstream with a detached HEAD

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5560-http-backend-noserver.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver/.git/
expecting success of 5560.1 'setup repository': 
	echo content >file &&
	git add file &&
	git commit -m one &&

	mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
	(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
	 git --bare init &&
	 : >objects/info/alternates &&
	 : >objects/info/http-alternates
	) &&
	git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
	git push public main:main &&

	(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
	 git repack -a -d
	) &&

	echo other >file &&
	git add file &&
	git commit -m two &&
	git push public main:main &&

	LOOSE_URL=$(find_file objects/??) &&
	PACK_URL=$(find_file objects/pack/*.pack) &&
	IDX_URL=$(find_file objects/pack/*.idx)

[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver/repo.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver/repo.git
 * [new branch]      main -> main
[main 0149442] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To /<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver/repo.git
   f39a923..0149442  main -> main
ok 1 - setup repository

expecting success of 5560.2 'direct refs/heads/main not found': 
	GET refs/heads/main "404 Not Found"

ok 2 - direct refs/heads/main not found

expecting success of 5560.3 'static file is ok': 
	get_static_files "200 OK"

ok 3 - static file is ok

expecting success of 5560.4 'no export by default': 
	get_static_files "404 Not Found"

ok 4 - no export by default

expecting success of 5560.5 'export if git-daemon-export-ok': 
        (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
	 touch git-daemon-export-ok
	) &&
        get_static_files "200 OK"

ok 5 - export if git-daemon-export-ok

expecting success of 5560.6 'static file if http.getanyfile true is ok': 
	config http.getanyfile true &&
	get_static_files "200 OK"

ok 6 - static file if http.getanyfile true is ok

expecting success of 5560.7 'static file if http.getanyfile false fails': 
	config http.getanyfile false &&
	get_static_files "403 Forbidden"

ok 7 - static file if http.getanyfile false fails

expecting success of 5560.8 'http.uploadpack default enabled': 
	GET info/refs?service=git-upload-pack "200 OK"  &&
	POST git-upload-pack 0000 "200 OK"

ok 8 - http.uploadpack default enabled

expecting success of 5560.9 'http.uploadpack true': 
	config http.uploadpack true &&
	GET info/refs?service=git-upload-pack "200 OK" &&
	POST git-upload-pack 0000 "200 OK"

ok 9 - http.uploadpack true

expecting success of 5560.10 'http.uploadpack false': 
	config http.uploadpack false &&
	GET info/refs?service=git-upload-pack "403 Forbidden" &&
	POST git-upload-pack 0000 "403 Forbidden"

ok 10 - http.uploadpack false

expecting success of 5560.11 'http.receivepack default disabled': 
	GET info/refs?service=git-receive-pack "403 Forbidden"  &&
	POST git-receive-pack 0000 "403 Forbidden"

ok 11 - http.receivepack default disabled

expecting success of 5560.12 'http.receivepack true': 
	config http.receivepack true &&
	GET info/refs?service=git-receive-pack "200 OK" &&
	POST git-receive-pack 0000 "200 OK"

ok 12 - http.receivepack true

expecting success of 5560.13 'http.receivepack false': 
	config http.receivepack false &&
	GET info/refs?service=git-receive-pack "403 Forbidden" &&
	POST git-receive-pack 0000 "403 Forbidden"

ok 13 - http.receivepack false

expecting success of 5560.14 'http-backend blocks bad PATH_INFO': 
	config http.getanyfile true &&

	expect_aliased 0 /repo.git/HEAD &&

	expect_aliased 1 /repo.git/../HEAD &&
	expect_aliased 1 /../etc/passwd &&
	expect_aliased 1 ../etc/passwd &&
	expect_aliased 1 /etc//passwd &&
	expect_aliased 1 /etc/./passwd &&
	expect_aliased 1 //domain/data.txt

--- exp.err	2022-12-28 07:53:55.648365289 +0000
+++ act.err	2022-12-28 07:53:55.603363636 +0000
@@ -1 +0,0 @@
-fatal: '/repo.git/../HEAD': aliased
--- exp.err	2022-12-28 07:53:55.698367125 +0000
+++ act.err	2022-12-28 07:53:55.693366941 +0000
@@ -1 +1 @@
-fatal: '/../etc/passwd': aliased
+Request not supported: '/<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver//../etc/passwd'
\ No newline at end of file
--- exp.err	2022-12-28 07:53:55.748368961 +0000
+++ act.err	2022-12-28 07:53:55.743368778 +0000
@@ -1 +1 @@
-fatal: '../etc/passwd': aliased
+Request not supported: '/<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver/../etc/passwd'
\ No newline at end of file
--- exp.err	2022-12-28 07:53:55.798370798 +0000
+++ act.err	2022-12-28 07:53:55.798370798 +0000
@@ -1 +1 @@
-fatal: '/etc//passwd': aliased
+Request not supported: '/<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver//etc//passwd'
\ No newline at end of file
--- exp.err	2022-12-28 07:53:55.848372634 +0000
+++ act.err	2022-12-28 07:53:55.843372450 +0000
@@ -1 +1 @@
-fatal: '/etc/./passwd': aliased
+Request not supported: '/<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver//etc/./passwd'
\ No newline at end of file
--- exp.err	2022-12-28 07:53:55.898374470 +0000
+++ act.err	2022-12-28 07:53:55.893374286 +0000
@@ -1 +1 @@
-fatal: '//domain/data.txt': aliased
+Request not supported: '/<<PKGBUILDDIR>>/t/trash directory.t5560-http-backend-noserver///domain/data.txt'
\ No newline at end of file
ok 14 - http-backend blocks bad PATH_INFO

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5562-http-backend-content-length.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5562-http-backend-content-length/.git/
expecting success of 5562.1 'setup': 
	HTTP_CONTENT_ENCODING="identity" &&
	export HTTP_CONTENT_ENCODING &&
	git config http.receivepack true &&
	test_commit c0 &&
	test_commit c1 &&
	hash_head=$(git rev-parse HEAD) &&
	hash_prev=$(git rev-parse HEAD~1) &&
	{
		packetize "want $hash_head" &&
		printf 0000 &&
		packetize "have $hash_prev" &&
		packetize "done"
	} >fetch_body &&
	test_copy_bytes 10 <fetch_body >fetch_body.trunc &&
	hash_next=$(git commit-tree -p HEAD -m next HEAD^{tree}) &&
	{
		printf "%s %s refs/heads/newbranch\\0report-status object-format=%s\\n" \
			"$ZERO_OID" "$hash_next" "$(test_oid algo)" | packetize_raw &&
		printf 0000 &&
		echo "$hash_next" | git pack-objects --stdout
	} >push_body &&
	test_copy_bytes 10 <push_body >push_body.trunc &&
	: >empty_body

[master (root-commit) a44f171] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.t
[master 989de5e] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
ok 1 - setup

checking prerequisite: GZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GZIP" &&gzip --version
)
gzip 1.12
Copyright (C) 2018 Free Software Foundation, Inc.
Copyright (C) 1993 Jean-loup Gailly.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <https://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jean-loup Gailly.
prerequisite GZIP ok
expecting success of 5562.2 'setup, compression related': 
	gzip -c fetch_body >fetch_body.gz &&
	test_copy_bytes 10 <fetch_body.gz >fetch_body.gz.trunc &&
	gzip -c push_body >push_body.gz &&
	test_copy_bytes 10 <push_body.gz >push_body.gz.trunc

ok 2 - setup, compression related

expecting success of 5562.3 'fetch plain': 
	test_http_env upload fetch_body &&
	verify_http_result "200 OK"

ok 3 - fetch plain

expecting success of 5562.4 'fetch plain truncated': 
	test_http_env upload fetch_body.trunc &&
	! verify_http_result "200 OK"

fatal: the remote end hung up unexpectedly
ok 4 - fetch plain truncated

expecting success of 5562.5 'fetch plain empty': 
	test_http_env upload empty_body &&
	! verify_http_result "200 OK"

fatal: the remote end hung up unexpectedly
ok 5 - fetch plain empty

expecting success of 5562.6 'fetch gzipped': 
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env upload fetch_body.gz &&
	verify_http_result "200 OK"

ok 6 - fetch gzipped

expecting success of 5562.7 'fetch gzipped truncated': 
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env upload fetch_body.gz.trunc &&
	! verify_http_result "200 OK"

fatal: request ended in the middle of the gzip stream
ok 7 - fetch gzipped truncated

expecting success of 5562.8 'fetch gzipped empty': 
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env upload empty_body &&
	! verify_http_result "200 OK"

fatal: request ended in the middle of the gzip stream
ok 8 - fetch gzipped empty

expecting success of 5562.9 'push plain': 
	test_when_finished "git branch -D newbranch" &&
	test_http_env receive push_body &&
	verify_http_result "200 OK" &&
	git rev-parse newbranch >act.head &&
	echo "$hash_next" >exp.head &&
	test_cmp act.head exp.head

Deleted branch newbranch (was d8aa3fa).
ok 9 - push plain

expecting success of 5562.10 'push plain truncated': 
	test_http_env receive push_body.trunc &&
	! verify_http_result "200 OK"

fatal: the remote end hung up unexpectedly
ok 10 - push plain truncated

expecting success of 5562.11 'push plain empty': 
	test_http_env receive empty_body &&
	! verify_http_result "200 OK"

fatal: the remote end hung up unexpectedly
ok 11 - push plain empty

expecting success of 5562.12 'push gzipped': 
	test_when_finished "git branch -D newbranch" &&
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env receive push_body.gz &&
	verify_http_result "200 OK" &&
	git rev-parse newbranch >act.head &&
	echo "$hash_next" >exp.head &&
	test_cmp act.head exp.head

Deleted branch newbranch (was d8aa3fa).
ok 12 - push gzipped

expecting success of 5562.13 'push gzipped truncated': 
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env receive push_body.gz.trunc &&
	! verify_http_result "200 OK"

fatal: request ended in the middle of the gzip stream
ok 13 - push gzipped truncated

expecting success of 5562.14 'push gzipped empty': 
	test_env HTTP_CONTENT_ENCODING="gzip" test_http_env receive empty_body &&
	! verify_http_result "200 OK"

fatal: request ended in the middle of the gzip stream
ok 14 - push gzipped empty

expecting success of 5562.15 'CONTENT_LENGTH overflow ssite_t': 
	NOT_FIT_IN_SSIZE=$(ssize_b100dots) &&
	env \
		CONTENT_TYPE=application/x-git-upload-pack-request \
		QUERY_STRING=/repo.git/git-upload-pack \
		PATH_TRANSLATED="$PWD"/.git/git-upload-pack \
		GIT_HTTP_EXPORT_ALL=TRUE \
		REQUEST_METHOD=POST \
		CONTENT_LENGTH="$NOT_FIT_IN_SSIZE" \
		git http-backend </dev/null >/dev/null 2>err &&
	grep "fatal:.*CONTENT_LENGTH" err

fatal: failed to parse CONTENT_LENGTH: 2147483648
ok 15 - CONTENT_LENGTH overflow ssite_t

expecting success of 5562.16 'empty CONTENT_LENGTH': 
	env \
		QUERY_STRING="service=git-receive-pack" \
		PATH_TRANSLATED="$PWD"/.git/info/refs \
		GIT_HTTP_EXPORT_ALL=TRUE \
		REQUEST_METHOD=GET \
		CONTENT_LENGTH="" \
		git http-backend <empty_body >act.out.$test_count 2>act.err.$test_count &&
	verify_http_result "200 OK"

ok 16 - empty CONTENT_LENGTH

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5570-git-daemon.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/.git/
checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
Starting git daemon ...
[23783] Ready to rumble
expecting success of 5570.1 'setup repository': 
	git config push.default matching &&
	echo content >file &&
	git add file &&
	git commit -m one

[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup repository

expecting success of 5570.2 'create git-accessible bare repository': 
	mkdir "$GIT_DAEMON_DOCUMENT_ROOT_PATH/repo.git" &&
	(cd "$GIT_DAEMON_DOCUMENT_ROOT_PATH/repo.git" &&
	 git --bare init &&
	 : >git-daemon-export-ok
	) &&
	git remote add public "$GIT_DAEMON_DOCUMENT_ROOT_PATH/repo.git" &&
	git push public main:main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git
 * [new branch]      main -> main
ok 2 - create git-accessible bare repository

expecting success of 5570.3 'clone git repository': 
	git clone -v "$GIT_DAEMON_URL/repo.git" clone 2>stderr &&
	check_verbose_connect &&
	test_cmp file clone/file

[23889] Connection from 127.0.0.1:55664
[23889] Extended attribute "host": 127.0.0.1:5570
[23889] Extended attribute "protocol": version=2
[23889] Request upload-pack for '/repo.git'
[23783] [23889] Disconnected
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
ok 3 - clone git repository

expecting success of 5570.4 'fetch changes via git protocol': 
	echo content >>file &&
	git commit -a -m two &&
	git push public &&
	(cd clone && git pull -v) 2>stderr &&
	check_verbose_connect &&
	test_cmp file clone/file

[main 5647d5f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git
   f39a923..5647d5f  main -> main
[24006] Connection from 127.0.0.1:55666
[24006] Extended attribute "host": 127.0.0.1:5570
[24006] Extended attribute "protocol": version=2
[24006] Request upload-pack for '/repo.git'
[23783] [24006] Disconnected
Updating f39a923..5647d5f
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
ok 4 - fetch changes via git protocol

expecting success of 5570.5 'no-op fetch -v stderr is as expected': 
	(cd clone && git fetch -v) 2>stderr &&
	check_verbose_connect

[24073] Connection from 127.0.0.1:55668
[24073] Extended attribute "host": 127.0.0.1:5570
[24073] Extended attribute "protocol": version=2
[24073] Request upload-pack for '/repo.git'
[23783] [24073] Disconnected
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
Looking up 127.0.0.1 ... done.
Connecting to 127.0.0.1 (port 5570) ... 127.0.0.1 done.
ok 5 - no-op fetch -v stderr is as expected

expecting success of 5570.6 'no-op fetch without "-v" is quiet': 
	(cd clone && git fetch 2>../stderr) &&
	test_must_be_empty stderr

[24116] Connection from 127.0.0.1:55670
[24116] Extended attribute "host": 127.0.0.1:5570
[24116] Extended attribute "protocol": version=2
[24116] Request upload-pack for '/repo.git'
[23783] [24116] Disconnected
ok 6 - no-op fetch without "-v" is quiet

expecting success of 5570.7 'remote detects correct HEAD': 
	git push public main:other &&
	(cd clone &&
	 git remote set-head -d origin &&
	 git remote set-head -a origin &&
	 git symbolic-ref refs/remotes/origin/HEAD > output &&
	 echo refs/remotes/origin/main > expect &&
	 test_cmp expect output
	)

To /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git
 * [new branch]      main -> other
[24184] Connection from 127.0.0.1:55672
[24184] Extended attribute "host": 127.0.0.1:5570
[24184] Extended attribute "protocol": version=2
[24184] Request upload-pack for '/repo.git'
origin/HEAD set to main
[23783] [24184] Disconnected
ok 7 - remote detects correct HEAD

expecting success of 5570.8 'prepare pack objects': 
	cp -R "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo.git "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_pack.git &&
	(cd "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_pack.git &&
	 git --bare repack -a -d
	)

ok 8 - prepare pack objects

expecting success of 5570.9 'fetch notices corrupt pack': 
	cp -R "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_pack.git "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_bad1.git &&
	(cd "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_bad1.git &&
	 p=$(ls objects/pack/pack-*.pack) &&
	 chmod u+w $p &&
	 printf %0256d 0 | dd of=$p bs=256 count=1 seek=1 conv=notrunc
	) &&
	mkdir repo_bad1.git &&
	(cd repo_bad1.git &&
	 git --bare init &&
	 test_must_fail git --bare fetch "$GIT_DAEMON_URL/repo_bad1.git" &&
	 test 0 = $(ls objects/pack/pack-*.pack | wc -l)
	)

1+0 records in
1+0 records out
256 bytes copied, 0.000782696 s, 327 kB/s
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo_bad1.git/
[24263] Connection from 127.0.0.1:55674
[24263] Extended attribute "host": 127.0.0.1:5570
[24263] Extended attribute "protocol": version=2
[24263] Request upload-pack for '/repo_bad1.git'
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
fatal: remote error: upload-pack: not our ref 5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d
[24263] error: packfile ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.pack does not match index
[24263] fatal: git upload-pack: not our ref 5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d
[23783] [24263] Disconnected (with error)
ls: cannot access 'objects/pack/pack-*.pack': No such file or directory
ok 9 - fetch notices corrupt pack

expecting success of 5570.10 'fetch notices corrupt idx': 
	cp -R "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_pack.git "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_bad2.git &&
	(cd "$GIT_DAEMON_DOCUMENT_ROOT_PATH"/repo_bad2.git &&
	 rm -f objects/pack/multi-pack-index &&
	 p=$(ls objects/pack/pack-*.idx) &&
	 chmod u+w $p &&
	 printf %0256d 0 | dd of=$p bs=256 count=1 seek=1 conv=notrunc
	) &&
	mkdir repo_bad2.git &&
	(cd repo_bad2.git &&
	 git --bare init &&
	 test_must_fail git --bare fetch "$GIT_DAEMON_URL/repo_bad2.git" &&
	 test 0 = $(ls objects/pack | wc -l)
	)

1+0 records in
1+0 records out
256 bytes copied, 0.000494018 s, 518 kB/s
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo_bad2.git/
[24324] Connection from 127.0.0.1:55676
[24324] Extended attribute "host": 127.0.0.1:5570
[24324] Extended attribute "protocol": version=2
[24324] Request upload-pack for '/repo_bad2.git'
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
fatal: remote error: upload-pack: not our ref 5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] error: non-monotonic index ./objects/pack/pack-fab4bc85cf5cdc274f77111178e0d6d25aa0c504.idx
[24324] fatal: git upload-pack: not our ref 5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d
[23783] [24324] Disconnected (with error)
ok 10 - fetch notices corrupt idx

expecting success of 5570.11 'client refuses to ask for repo with newline': 
	test_must_fail git clone "$GIT_DAEMON_URL/repo$LF.git" dst 2>stderr &&
	test_i18ngrep newline.is.forbidden stderr

fatal: newline is forbidden in git:// hosts and repo paths
ok 11 - client refuses to ask for repo with newline

expecting success of 5570.12 'clone non-existent': test_remote_error    'access denied or repository not exported' clone nowhere.git
[24381] Connection from 127.0.0.1:55678
[24381] Extended attribute "host": 127.0.0.1:5570
[24381] Extended attribute "protocol": version=2
[24381] Request upload-pack for '/nowhere.git'
[24381] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/nowhere.git' does not appear to be a git repository
[23783] [24381] Disconnected (with error)
fatal: remote error: access denied or repository not exported: /nowhere.git
ok 12 - clone non-existent

expecting success of 5570.13 'push disabled': test_remote_error    'access denied or repository not exported' push  repo.git main
[24407] Connection from 127.0.0.1:55680
[24407] Extended attribute "host": 127.0.0.1:5570
[24407] Request receive-pack for '/repo.git'
[24407] 'receive-pack': service not enabled for '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git'
[23783] [24407] Disconnected (with error)
fatal: remote error: access denied or repository not exported: /repo.git
ok 13 - push disabled

expecting success of 5570.14 'read access denied': test_remote_error -x 'access denied or repository not exported' fetch repo.git
[24427] Connection from 127.0.0.1:55682
[24427] Extended attribute "host": 127.0.0.1:5570
[24427] Extended attribute "protocol": version=2
[24427] Request upload-pack for '/repo.git'
[24427] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git' does not appear to be a git repository
[23783] [24427] Disconnected (with error)
fatal: remote error: access denied or repository not exported: /repo.git
ok 14 - read access denied

expecting success of 5570.15 'not exported': test_remote_error -n 'access denied or repository not exported' fetch repo.git
[24446] Connection from 127.0.0.1:55684
[24446] Extended attribute "host": 127.0.0.1:5570
[24446] Extended attribute "protocol": version=2
[24446] Request upload-pack for '/repo.git'
[24446] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git': repository not exported.
[23783] [24446] Disconnected (with error)
fatal: remote error: access denied or repository not exported: /repo.git
ok 15 - not exported

Stopping git daemon ...
Terminated
Starting git daemon ...
[24472] Ready to rumble
expecting success of 5570.16 'clone non-existent': test_remote_error    'no such repository'      clone nowhere.git
[24483] Connection from 127.0.0.1:55686
[24483] Extended attribute "host": 127.0.0.1:5570
[24483] Extended attribute "protocol": version=2
[24483] Request upload-pack for '/nowhere.git'
[24483] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/nowhere.git' does not appear to be a git repository
[24472] [24483] Disconnected (with error)
fatal: remote error: no such repository: /nowhere.git
ok 16 - clone non-existent

expecting success of 5570.17 'push disabled': test_remote_error    'service not enabled'     push  repo.git main
[24493] Connection from 127.0.0.1:55688
[24493] Extended attribute "host": 127.0.0.1:5570
[24493] Request receive-pack for '/repo.git'
[24493] 'receive-pack': service not enabled for '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git'
[24472] [24493] Disconnected (with error)
fatal: remote error: service not enabled: /repo.git
ok 17 - push disabled

expecting success of 5570.18 'read access denied': test_remote_error -x 'no such repository'      fetch repo.git
[24502] Connection from 127.0.0.1:55690
[24502] Extended attribute "host": 127.0.0.1:5570
[24502] Extended attribute "protocol": version=2
[24502] Request upload-pack for '/repo.git'
[24502] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git' does not appear to be a git repository
[24472] [24502] Disconnected (with error)
fatal: remote error: no such repository: /repo.git
ok 18 - read access denied

expecting success of 5570.19 'not exported': test_remote_error -n 'repository not exported' fetch repo.git
[24512] Connection from 127.0.0.1:55692
[24512] Extended attribute "host": 127.0.0.1:5570
[24512] Extended attribute "protocol": version=2
[24512] Request upload-pack for '/repo.git'
[24512] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/repo.git': repository not exported.
[24472] [24512] Disconnected (with error)
fatal: remote error: repository not exported: /repo.git
ok 19 - not exported

Stopping git daemon ...
Terminated
Starting git daemon ...
[24528] Ready to rumble
expecting success of 5570.20 'access repo via interpolated hostname': 
	repo="$GIT_DAEMON_DOCUMENT_ROOT_PATH/localhost/interp.git" &&
	git init --bare "$repo" &&
	git push "$repo" HEAD &&
	>"$repo"/git-daemon-export-ok &&
	GIT_OVERRIDE_VIRTUAL_HOST=localhost \
		git ls-remote "$GIT_DAEMON_URL/interp.git" &&
	GIT_OVERRIDE_VIRTUAL_HOST=LOCALHOST \
		git ls-remote "$GIT_DAEMON_URL/interp.git"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/localhost/interp.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/localhost/interp.git
 * [new branch]      HEAD -> main
[24564] Connection from 127.0.0.1:55694
[24564] Extended attribute "host": localhost
[24564] Extended attribute "protocol": version=2
[24564] Request upload-pack for '/interp.git'
[24564] Interpolated dir '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/localhost/interp.git'
5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d	HEAD
5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d	refs/heads/main
[24528] [24564] Disconnected
[24584] Connection from 127.0.0.1:55696
[24584] Extended attribute "host": LOCALHOST
[24584] Extended attribute "protocol": version=2
[24584] Request upload-pack for '/interp.git'
[24584] Interpolated dir '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/localhost/interp.git'
5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d	HEAD
5647d5f1af3705f88c3fb89c9c7dd2cbbedd716d	refs/heads/main
ok 20 - access repo via interpolated hostname

[24528] [24584] Disconnected
expecting success of 5570.21 'hostname cannot break out of directory': 
	repo="$GIT_DAEMON_DOCUMENT_ROOT_PATH/../escape.git" &&
	git init --bare "$repo" &&
	git push "$repo" HEAD &&
	>"$repo"/git-daemon-export-ok &&
	test_must_fail \
		env GIT_OVERRIDE_VIRTUAL_HOST=.. \
		git ls-remote "$GIT_DAEMON_URL/escape.git"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/escape.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/../escape.git
 * [new branch]      HEAD -> main
[24630] Connection from 127.0.0.1:55698
[24630] Extended attribute "host": ..
[24630] Extended attribute "protocol": version=2
[24630] Request upload-pack for '/escape.git'
[24630] Interpolated dir '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo//escape.git'
[24630] '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo//escape.git' does not appear to be a git repository
fatal: remote error: access denied or repository not exported: /escape.git
ok 21 - hostname cannot break out of directory

[24528] [24630] Disconnected (with error)
checking prerequisite: FAKENC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAKENC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAKENC" &&
	perl -MIO::Socket::INET -e "exit 0"

)
prerequisite FAKENC ok
expecting success of 5570.22 'hostname interpolation works after LF-stripping': 
	{
		printf "git-upload-pack /interp.git\n\0host=localhost" | packetize_raw &&
		printf "0000"
	} >input &&
	fake_nc "$GIT_DAEMON_HOST_PORT" <input >output &&
	depacketize <output >output.raw &&

	# just pick out the value of main, which avoids any protocol
	# particulars
	perl -lne "print \$1 if m{^(\\S+) refs/heads/main}" <output.raw >actual &&
	git -C "$repo" rev-parse main >expect &&
	test_cmp expect actual

[24707] Connection from 127.0.0.1:55700
[24707] Extended attribute "host": localhost
[24707] Request upload-pack for '/interp.git'
[24707] Interpolated dir '/<<PKGBUILDDIR>>/t/trash directory.t5570-git-daemon/repo/localhost/interp.git'
[24528] [24707] Disconnected
ok 22 - hostname interpolation works after LF-stripping

Stopping git daemon ...
Terminated
# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5571-pre-push-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5571-pre-push-hook/.git/
expecting success of 5571.1 'setup': 
	test_hook pre-push <<-\EOF &&
	cat >actual
	EOF

	git config push.default upstream &&
	git init --bare repo1 &&
	git remote add parent1 repo1 &&
	test_commit one &&
	cat >expect <<-EOF &&
	HEAD $(git rev-parse HEAD) refs/heads/foreign $(test_oid zero)
	EOF

	test_when_finished "rm actual" &&
	git push parent1 HEAD:foreign &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5571-pre-push-hook/repo1/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
To repo1
 * [new branch]      HEAD -> foreign
ok 1 - setup

expecting success of 5571.2 'push with failing hook': 
	test_hook pre-push <<-\EOF &&
	cat >actual &&
	exit 1
	EOF

	test_commit two &&
	cat >expect <<-EOF &&
	HEAD $(git rev-parse HEAD) refs/heads/main $(test_oid zero)
	EOF

	test_when_finished "rm actual" &&
	test_must_fail git push parent1 HEAD &&
	test_cmp expect actual

[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
error: failed to push some refs to 'repo1'
ok 2 - push with failing hook

expecting success of 5571.3 '--no-verify bypasses hook': 
	git push --no-verify parent1 HEAD &&
	test_path_is_missing actual

To repo1
 * [new branch]      HEAD -> main
ok 3 - --no-verify bypasses hook

expecting success of 5571.4 'push with hook': 
	test_hook --setup pre-push <<-\EOF &&
	echo "$1" >actual
	echo "$2" >>actual
	cat >>actual
	EOF

	cat >expect <<-EOF &&
	parent1
	repo1
	refs/heads/main $COMMIT2 refs/heads/foreign $COMMIT1
	EOF

	git push parent1 main:foreign &&
	test_cmp expect actual

To repo1
   d79ce16..139b20d  main -> foreign
ok 4 - push with hook

expecting success of 5571.5 'add a branch': 
	git checkout -b other parent1/foreign &&
	test_commit three

Switched to a new branch 'other'
branch 'other' set up to track 'parent1/foreign'.
[other 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 5 - add a branch

expecting success of 5571.6 'push to default': 
	cat >expect <<-EOF &&
	parent1
	repo1
	refs/heads/other $COMMIT3 refs/heads/foreign $COMMIT2
	EOF
	git push &&
	test_cmp expect actual

To repo1
   139b20d..7c7cd71  other -> foreign
ok 6 - push to default

expecting success of 5571.7 'push non-branches': 
	cat >expect <<-EOF &&
	parent1
	repo1
	refs/tags/one $COMMIT1 refs/tags/tag1 $ZERO_OID
	HEAD~ $COMMIT2 refs/heads/prev $ZERO_OID
	EOF

	git push parent1 one:tag1 HEAD~:refs/heads/prev &&
	test_cmp expect actual

To repo1
 * [new tag]         one -> tag1
 * [new branch]      HEAD~ -> prev
ok 7 - push non-branches

expecting success of 5571.8 'push delete': 
	cat >expect <<-EOF &&
	parent1
	repo1
	(delete) $ZERO_OID refs/heads/prev $COMMIT2
	EOF

	git push parent1 :prev &&
	test_cmp expect actual

To repo1
 - [deleted]         prev
ok 8 - push delete

expecting success of 5571.9 'push to URL': 
	cat >expect <<-EOF &&
	repo1
	repo1
	HEAD $COMMIT3 refs/heads/other $ZERO_OID
	EOF

	git push repo1 HEAD &&
	test_cmp expect actual

To repo1
 * [new branch]      HEAD -> other
ok 9 - push to URL

expecting success of 5571.10 'set up many-ref tests': 
	{
		nr=1000 &&
		while test $nr -lt 2000
		do
			nr=$(( $nr + 1 )) &&
			echo "create refs/heads/b/$nr $COMMIT3" || return 1
		done
	} | git update-ref --stdin

ok 10 - set up many-ref tests

expecting success of 5571.11 'sigpipe does not cause pre-push hook failure': 
	test_hook --clobber pre-push <<-\EOF &&
	exit 0
	EOF
	git push parent1 "refs/heads/b/*:refs/heads/b/*"

To repo1
 * [new branch]      b/1001 -> b/1001
 * [new branch]      b/1002 -> b/1002
 * [new branch]      b/1003 -> b/1003
 * [new branch]      b/1004 -> b/1004
 * [new branch]      b/1005 -> b/1005
 * [new branch]      b/1006 -> b/1006
 * [new branch]      b/1007 -> b/1007
 * [new branch]      b/1008 -> b/1008
 * [new branch]      b/1009 -> b/1009
 * [new branch]      b/1010 -> b/1010
 * [new branch]      b/1011 -> b/1011
 * [new branch]      b/1012 -> b/1012
 * [new branch]      b/1013 -> b/1013
 * [new branch]      b/1014 -> b/1014
 * [new branch]      b/1015 -> b/1015
 * [new branch]      b/1016 -> b/1016
 * [new branch]      b/1017 -> b/1017
 * [new branch]      b/1018 -> b/1018
 * [new branch]      b/1019 -> b/1019
 * [new branch]      b/1020 -> b/1020
 * [new branch]      b/1021 -> b/1021
 * [new branch]      b/1022 -> b/1022
 * [new branch]      b/1023 -> b/1023
 * [new branch]      b/1024 -> b/1024
 * [new branch]      b/1025 -> b/1025
 * [new branch]      b/1026 -> b/1026
 * [new branch]      b/1027 -> b/1027
 * [new branch]      b/1028 -> b/1028
 * [new branch]      b/1029 -> b/1029
 * [new branch]      b/1030 -> b/1030
 * [new branch]      b/1031 -> b/1031
 * [new branch]      b/1032 -> b/1032
 * [new branch]      b/1033 -> b/1033
 * [new branch]      b/1034 -> b/1034
 * [new branch]      b/1035 -> b/1035
 * [new branch]      b/1036 -> b/1036
 * [new branch]      b/1037 -> b/1037
 * [new branch]      b/1038 -> b/1038
 * [new branch]      b/1039 -> b/1039
 * [new branch]      b/1040 -> b/1040
 * [new branch]      b/1041 -> b/1041
 * [new branch]      b/1042 -> b/1042
 * [new branch]      b/1043 -> b/1043
 * [new branch]      b/1044 -> b/1044
 * [new branch]      b/1045 -> b/1045
 * [new branch]      b/1046 -> b/1046
 * [new branch]      b/1047 -> b/1047
 * [new branch]      b/1048 -> b/1048
 * [new branch]      b/1049 -> b/1049
 * [new branch]      b/1050 -> b/1050
 * [new branch]      b/1051 -> b/1051
 * [new branch]      b/1052 -> b/1052
 * [new branch]      b/1053 -> b/1053
 * [new branch]      b/1054 -> b/1054
 * [new branch]      b/1055 -> b/1055
 * [new branch]      b/1056 -> b/1056
 * [new branch]      b/1057 -> b/1057
 * [new branch]      b/1058 -> b/1058
 * [new branch]      b/1059 -> b/1059
 * [new branch]      b/1060 -> b/1060
 * [new branch]      b/1061 -> b/1061
 * [new branch]      b/1062 -> b/1062
 * [new branch]      b/1063 -> b/1063
 * [new branch]      b/1064 -> b/1064
 * [new branch]      b/1065 -> b/1065
 * [new branch]      b/1066 -> b/1066
 * [new branch]      b/1067 -> b/1067
 * [new branch]      b/1068 -> b/1068
 * [new branch]      b/1069 -> b/1069
 * [new branch]      b/1070 -> b/1070
 * [new branch]      b/1071 -> b/1071
 * [new branch]      b/1072 -> b/1072
 * [new branch]      b/1073 -> b/1073
 * [new branch]      b/1074 -> b/1074
 * [new branch]      b/1075 -> b/1075
 * [new branch]      b/1076 -> b/1076
 * [new branch]      b/1077 -> b/1077
 * [new branch]      b/1078 -> b/1078
 * [new branch]      b/1079 -> b/1079
 * [new branch]      b/1080 -> b/1080
 * [new branch]      b/1081 -> b/1081
 * [new branch]      b/1082 -> b/1082
 * [new branch]      b/1083 -> b/1083
 * [new branch]      b/1084 -> b/1084
 * [new branch]      b/1085 -> b/1085
 * [new branch]      b/1086 -> b/1086
 * [new branch]      b/1087 -> b/1087
 * [new branch]      b/1088 -> b/1088
 * [new branch]      b/1089 -> b/1089
 * [new branch]      b/1090 -> b/1090
 * [new branch]      b/1091 -> b/1091
 * [new branch]      b/1092 -> b/1092
 * [new branch]      b/1093 -> b/1093
 * [new branch]      b/1094 -> b/1094
 * [new branch]      b/1095 -> b/1095
 * [new branch]      b/1096 -> b/1096
 * [new branch]      b/1097 -> b/1097
 * [new branch]      b/1098 -> b/1098
 * [new branch]      b/1099 -> b/1099
 * [new branch]      b/1100 -> b/1100
 * [new branch]      b/1101 -> b/1101
 * [new branch]      b/1102 -> b/1102
 * [new branch]      b/1103 -> b/1103
 * [new branch]      b/1104 -> b/1104
 * [new branch]      b/1105 -> b/1105
 * [new branch]      b/1106 -> b/1106
 * [new branch]      b/1107 -> b/1107
 * [new branch]      b/1108 -> b/1108
 * [new branch]      b/1109 -> b/1109
 * [new branch]      b/1110 -> b/1110
 * [new branch]      b/1111 -> b/1111
 * [new branch]      b/1112 -> b/1112
 * [new branch]      b/1113 -> b/1113
 * [new branch]      b/1114 -> b/1114
 * [new branch]      b/1115 -> b/1115
 * [new branch]      b/1116 -> b/1116
 * [new branch]      b/1117 -> b/1117
 * [new branch]      b/1118 -> b/1118
 * [new branch]      b/1119 -> b/1119
 * [new branch]      b/1120 -> b/1120
 * [new branch]      b/1121 -> b/1121
 * [new branch]      b/1122 -> b/1122
 * [new branch]      b/1123 -> b/1123
 * [new branch]      b/1124 -> b/1124
 * [new branch]      b/1125 -> b/1125
 * [new branch]      b/1126 -> b/1126
 * [new branch]      b/1127 -> b/1127
 * [new branch]      b/1128 -> b/1128
 * [new branch]      b/1129 -> b/1129
 * [new branch]      b/1130 -> b/1130
 * [new branch]      b/1131 -> b/1131
 * [new branch]      b/1132 -> b/1132
 * [new branch]      b/1133 -> b/1133
 * [new branch]      b/1134 -> b/1134
 * [new branch]      b/1135 -> b/1135
 * [new branch]      b/1136 -> b/1136
 * [new branch]      b/1137 -> b/1137
 * [new branch]      b/1138 -> b/1138
 * [new branch]      b/1139 -> b/1139
 * [new branch]      b/1140 -> b/1140
 * [new branch]      b/1141 -> b/1141
 * [new branch]      b/1142 -> b/1142
 * [new branch]      b/1143 -> b/1143
 * [new branch]      b/1144 -> b/1144
 * [new branch]      b/1145 -> b/1145
 * [new branch]      b/1146 -> b/1146
 * [new branch]      b/1147 -> b/1147
 * [new branch]      b/1148 -> b/1148
 * [new branch]      b/1149 -> b/1149
 * [new branch]      b/1150 -> b/1150
 * [new branch]      b/1151 -> b/1151
 * [new branch]      b/1152 -> b/1152
 * [new branch]      b/1153 -> b/1153
 * [new branch]      b/1154 -> b/1154
 * [new branch]      b/1155 -> b/1155
 * [new branch]      b/1156 -> b/1156
 * [new branch]      b/1157 -> b/1157
 * [new branch]      b/1158 -> b/1158
 * [new branch]      b/1159 -> b/1159
 * [new branch]      b/1160 -> b/1160
 * [new branch]      b/1161 -> b/1161
 * [new branch]      b/1162 -> b/1162
 * [new branch]      b/1163 -> b/1163
 * [new branch]      b/1164 -> b/1164
 * [new branch]      b/1165 -> b/1165
 * [new branch]      b/1166 -> b/1166
 * [new branch]      b/1167 -> b/1167
 * [new branch]      b/1168 -> b/1168
 * [new branch]      b/1169 -> b/1169
 * [new branch]      b/1170 -> b/1170
 * [new branch]      b/1171 -> b/1171
 * [new branch]      b/1172 -> b/1172
 * [new branch]      b/1173 -> b/1173
 * [new branch]      b/1174 -> b/1174
 * [new branch]      b/1175 -> b/1175
 * [new branch]      b/1176 -> b/1176
 * [new branch]      b/1177 -> b/1177
 * [new branch]      b/1178 -> b/1178
 * [new branch]      b/1179 -> b/1179
 * [new branch]      b/1180 -> b/1180
 * [new branch]      b/1181 -> b/1181
 * [new branch]      b/1182 -> b/1182
 * [new branch]      b/1183 -> b/1183
 * [new branch]      b/1184 -> b/1184
 * [new branch]      b/1185 -> b/1185
 * [new branch]      b/1186 -> b/1186
 * [new branch]      b/1187 -> b/1187
 * [new branch]      b/1188 -> b/1188
 * [new branch]      b/1189 -> b/1189
 * [new branch]      b/1190 -> b/1190
 * [new branch]      b/1191 -> b/1191
 * [new branch]      b/1192 -> b/1192
 * [new branch]      b/1193 -> b/1193
 * [new branch]      b/1194 -> b/1194
 * [new branch]      b/1195 -> b/1195
 * [new branch]      b/1196 -> b/1196
 * [new branch]      b/1197 -> b/1197
 * [new branch]      b/1198 -> b/1198
 * [new branch]      b/1199 -> b/1199
 * [new branch]      b/1200 -> b/1200
 * [new branch]      b/1201 -> b/1201
 * [new branch]      b/1202 -> b/1202
 * [new branch]      b/1203 -> b/1203
 * [new branch]      b/1204 -> b/1204
 * [new branch]      b/1205 -> b/1205
 * [new branch]      b/1206 -> b/1206
 * [new branch]      b/1207 -> b/1207
 * [new branch]      b/1208 -> b/1208
 * [new branch]      b/1209 -> b/1209
 * [new branch]      b/1210 -> b/1210
 * [new branch]      b/1211 -> b/1211
 * [new branch]      b/1212 -> b/1212
 * [new branch]      b/1213 -> b/1213
 * [new branch]      b/1214 -> b/1214
 * [new branch]      b/1215 -> b/1215
 * [new branch]      b/1216 -> b/1216
 * [new branch]      b/1217 -> b/1217
 * [new branch]      b/1218 -> b/1218
 * [new branch]      b/1219 -> b/1219
 * [new branch]      b/1220 -> b/1220
 * [new branch]      b/1221 -> b/1221
 * [new branch]      b/1222 -> b/1222
 * [new branch]      b/1223 -> b/1223
 * [new branch]      b/1224 -> b/1224
 * [new branch]      b/1225 -> b/1225
 * [new branch]      b/1226 -> b/1226
 * [new branch]      b/1227 -> b/1227
 * [new branch]      b/1228 -> b/1228
 * [new branch]      b/1229 -> b/1229
 * [new branch]      b/1230 -> b/1230
 * [new branch]      b/1231 -> b/1231
 * [new branch]      b/1232 -> b/1232
 * [new branch]      b/1233 -> b/1233
 * [new branch]      b/1234 -> b/1234
 * [new branch]      b/1235 -> b/1235
 * [new branch]      b/1236 -> b/1236
 * [new branch]      b/1237 -> b/1237
 * [new branch]      b/1238 -> b/1238
 * [new branch]      b/1239 -> b/1239
 * [new branch]      b/1240 -> b/1240
 * [new branch]      b/1241 -> b/1241
 * [new branch]      b/1242 -> b/1242
 * [new branch]      b/1243 -> b/1243
 * [new branch]      b/1244 -> b/1244
 * [new branch]      b/1245 -> b/1245
 * [new branch]      b/1246 -> b/1246
 * [new branch]      b/1247 -> b/1247
 * [new branch]      b/1248 -> b/1248
 * [new branch]      b/1249 -> b/1249
 * [new branch]      b/1250 -> b/1250
 * [new branch]      b/1251 -> b/1251
 * [new branch]      b/1252 -> b/1252
 * [new branch]      b/1253 -> b/1253
 * [new branch]      b/1254 -> b/1254
 * [new branch]      b/1255 -> b/1255
 * [new branch]      b/1256 -> b/1256
 * [new branch]      b/1257 -> b/1257
 * [new branch]      b/1258 -> b/1258
 * [new branch]      b/1259 -> b/1259
 * [new branch]      b/1260 -> b/1260
 * [new branch]      b/1261 -> b/1261
 * [new branch]      b/1262 -> b/1262
 * [new branch]      b/1263 -> b/1263
 * [new branch]      b/1264 -> b/1264
 * [new branch]      b/1265 -> b/1265
 * [new branch]      b/1266 -> b/1266
 * [new branch]      b/1267 -> b/1267
 * [new branch]      b/1268 -> b/1268
 * [new branch]      b/1269 -> b/1269
 * [new branch]      b/1270 -> b/1270
 * [new branch]      b/1271 -> b/1271
 * [new branch]      b/1272 -> b/1272
 * [new branch]      b/1273 -> b/1273
 * [new branch]      b/1274 -> b/1274
 * [new branch]      b/1275 -> b/1275
 * [new branch]      b/1276 -> b/1276
 * [new branch]      b/1277 -> b/1277
 * [new branch]      b/1278 -> b/1278
 * [new branch]      b/1279 -> b/1279
 * [new branch]      b/1280 -> b/1280
 * [new branch]      b/1281 -> b/1281
 * [new branch]      b/1282 -> b/1282
 * [new branch]      b/1283 -> b/1283
 * [new branch]      b/1284 -> b/1284
 * [new branch]      b/1285 -> b/1285
 * [new branch]      b/1286 -> b/1286
 * [new branch]      b/1287 -> b/1287
 * [new branch]      b/1288 -> b/1288
 * [new branch]      b/1289 -> b/1289
 * [new branch]      b/1290 -> b/1290
 * [new branch]      b/1291 -> b/1291
 * [new branch]      b/1292 -> b/1292
 * [new branch]      b/1293 -> b/1293
 * [new branch]      b/1294 -> b/1294
 * [new branch]      b/1295 -> b/1295
 * [new branch]      b/1296 -> b/1296
 * [new branch]      b/1297 -> b/1297
 * [new branch]      b/1298 -> b/1298
 * [new branch]      b/1299 -> b/1299
 * [new branch]      b/1300 -> b/1300
 * [new branch]      b/1301 -> b/1301
 * [new branch]      b/1302 -> b/1302
 * [new branch]      b/1303 -> b/1303
 * [new branch]      b/1304 -> b/1304
 * [new branch]      b/1305 -> b/1305
 * [new branch]      b/1306 -> b/1306
 * [new branch]      b/1307 -> b/1307
 * [new branch]      b/1308 -> b/1308
 * [new branch]      b/1309 -> b/1309
 * [new branch]      b/1310 -> b/1310
 * [new branch]      b/1311 -> b/1311
 * [new branch]      b/1312 -> b/1312
 * [new branch]      b/1313 -> b/1313
 * [new branch]      b/1314 -> b/1314
 * [new branch]      b/1315 -> b/1315
 * [new branch]      b/1316 -> b/1316
 * [new branch]      b/1317 -> b/1317
 * [new branch]      b/1318 -> b/1318
 * [new branch]      b/1319 -> b/1319
 * [new branch]      b/1320 -> b/1320
 * [new branch]      b/1321 -> b/1321
 * [new branch]      b/1322 -> b/1322
 * [new branch]      b/1323 -> b/1323
 * [new branch]      b/1324 -> b/1324
 * [new branch]      b/1325 -> b/1325
 * [new branch]      b/1326 -> b/1326
 * [new branch]      b/1327 -> b/1327
 * [new branch]      b/1328 -> b/1328
 * [new branch]      b/1329 -> b/1329
 * [new branch]      b/1330 -> b/1330
 * [new branch]      b/1331 -> b/1331
 * [new branch]      b/1332 -> b/1332
 * [new branch]      b/1333 -> b/1333
 * [new branch]      b/1334 -> b/1334
 * [new branch]      b/1335 -> b/1335
 * [new branch]      b/1336 -> b/1336
 * [new branch]      b/1337 -> b/1337
 * [new branch]      b/1338 -> b/1338
 * [new branch]      b/1339 -> b/1339
 * [new branch]      b/1340 -> b/1340
 * [new branch]      b/1341 -> b/1341
 * [new branch]      b/1342 -> b/1342
 * [new branch]      b/1343 -> b/1343
 * [new branch]      b/1344 -> b/1344
 * [new branch]      b/1345 -> b/1345
 * [new branch]      b/1346 -> b/1346
 * [new branch]      b/1347 -> b/1347
 * [new branch]      b/1348 -> b/1348
 * [new branch]      b/1349 -> b/1349
 * [new branch]      b/1350 -> b/1350
 * [new branch]      b/1351 -> b/1351
 * [new branch]      b/1352 -> b/1352
 * [new branch]      b/1353 -> b/1353
 * [new branch]      b/1354 -> b/1354
 * [new branch]      b/1355 -> b/1355
 * [new branch]      b/1356 -> b/1356
 * [new branch]      b/1357 -> b/1357
 * [new branch]      b/1358 -> b/1358
 * [new branch]      b/1359 -> b/1359
 * [new branch]      b/1360 -> b/1360
 * [new branch]      b/1361 -> b/1361
 * [new branch]      b/1362 -> b/1362
 * [new branch]      b/1363 -> b/1363
 * [new branch]      b/1364 -> b/1364
 * [new branch]      b/1365 -> b/1365
 * [new branch]      b/1366 -> b/1366
 * [new branch]      b/1367 -> b/1367
 * [new branch]      b/1368 -> b/1368
 * [new branch]      b/1369 -> b/1369
 * [new branch]      b/1370 -> b/1370
 * [new branch]      b/1371 -> b/1371
 * [new branch]      b/1372 -> b/1372
 * [new branch]      b/1373 -> b/1373
 * [new branch]      b/1374 -> b/1374
 * [new branch]      b/1375 -> b/1375
 * [new branch]      b/1376 -> b/1376
 * [new branch]      b/1377 -> b/1377
 * [new branch]      b/1378 -> b/1378
 * [new branch]      b/1379 -> b/1379
 * [new branch]      b/1380 -> b/1380
 * [new branch]      b/1381 -> b/1381
 * [new branch]      b/1382 -> b/1382
 * [new branch]      b/1383 -> b/1383
 * [new branch]      b/1384 -> b/1384
 * [new branch]      b/1385 -> b/1385
 * [new branch]      b/1386 -> b/1386
 * [new branch]      b/1387 -> b/1387
 * [new branch]      b/1388 -> b/1388
 * [new branch]      b/1389 -> b/1389
 * [new branch]      b/1390 -> b/1390
 * [new branch]      b/1391 -> b/1391
 * [new branch]      b/1392 -> b/1392
 * [new branch]      b/1393 -> b/1393
 * [new branch]      b/1394 -> b/1394
 * [new branch]      b/1395 -> b/1395
 * [new branch]      b/1396 -> b/1396
 * [new branch]      b/1397 -> b/1397
 * [new branch]      b/1398 -> b/1398
 * [new branch]      b/1399 -> b/1399
 * [new branch]      b/1400 -> b/1400
 * [new branch]      b/1401 -> b/1401
 * [new branch]      b/1402 -> b/1402
 * [new branch]      b/1403 -> b/1403
 * [new branch]      b/1404 -> b/1404
 * [new branch]      b/1405 -> b/1405
 * [new branch]      b/1406 -> b/1406
 * [new branch]      b/1407 -> b/1407
 * [new branch]      b/1408 -> b/1408
 * [new branch]      b/1409 -> b/1409
 * [new branch]      b/1410 -> b/1410
 * [new branch]      b/1411 -> b/1411
 * [new branch]      b/1412 -> b/1412
 * [new branch]      b/1413 -> b/1413
 * [new branch]      b/1414 -> b/1414
 * [new branch]      b/1415 -> b/1415
 * [new branch]      b/1416 -> b/1416
 * [new branch]      b/1417 -> b/1417
 * [new branch]      b/1418 -> b/1418
 * [new branch]      b/1419 -> b/1419
 * [new branch]      b/1420 -> b/1420
 * [new branch]      b/1421 -> b/1421
 * [new branch]      b/1422 -> b/1422
 * [new branch]      b/1423 -> b/1423
 * [new branch]      b/1424 -> b/1424
 * [new branch]      b/1425 -> b/1425
 * [new branch]      b/1426 -> b/1426
 * [new branch]      b/1427 -> b/1427
 * [new branch]      b/1428 -> b/1428
 * [new branch]      b/1429 -> b/1429
 * [new branch]      b/1430 -> b/1430
 * [new branch]      b/1431 -> b/1431
 * [new branch]      b/1432 -> b/1432
 * [new branch]      b/1433 -> b/1433
 * [new branch]      b/1434 -> b/1434
 * [new branch]      b/1435 -> b/1435
 * [new branch]      b/1436 -> b/1436
 * [new branch]      b/1437 -> b/1437
 * [new branch]      b/1438 -> b/1438
 * [new branch]      b/1439 -> b/1439
 * [new branch]      b/1440 -> b/1440
 * [new branch]      b/1441 -> b/1441
 * [new branch]      b/1442 -> b/1442
 * [new branch]      b/1443 -> b/1443
 * [new branch]      b/1444 -> b/1444
 * [new branch]      b/1445 -> b/1445
 * [new branch]      b/1446 -> b/1446
 * [new branch]      b/1447 -> b/1447
 * [new branch]      b/1448 -> b/1448
 * [new branch]      b/1449 -> b/1449
 * [new branch]      b/1450 -> b/1450
 * [new branch]      b/1451 -> b/1451
 * [new branch]      b/1452 -> b/1452
 * [new branch]      b/1453 -> b/1453
 * [new branch]      b/1454 -> b/1454
 * [new branch]      b/1455 -> b/1455
 * [new branch]      b/1456 -> b/1456
 * [new branch]      b/1457 -> b/1457
 * [new branch]      b/1458 -> b/1458
 * [new branch]      b/1459 -> b/1459
 * [new branch]      b/1460 -> b/1460
 * [new branch]      b/1461 -> b/1461
 * [new branch]      b/1462 -> b/1462
 * [new branch]      b/1463 -> b/1463
 * [new branch]      b/1464 -> b/1464
 * [new branch]      b/1465 -> b/1465
 * [new branch]      b/1466 -> b/1466
 * [new branch]      b/1467 -> b/1467
 * [new branch]      b/1468 -> b/1468
 * [new branch]      b/1469 -> b/1469
 * [new branch]      b/1470 -> b/1470
 * [new branch]      b/1471 -> b/1471
 * [new branch]      b/1472 -> b/1472
 * [new branch]      b/1473 -> b/1473
 * [new branch]      b/1474 -> b/1474
 * [new branch]      b/1475 -> b/1475
 * [new branch]      b/1476 -> b/1476
 * [new branch]      b/1477 -> b/1477
 * [new branch]      b/1478 -> b/1478
 * [new branch]      b/1479 -> b/1479
 * [new branch]      b/1480 -> b/1480
 * [new branch]      b/1481 -> b/1481
 * [new branch]      b/1482 -> b/1482
 * [new branch]      b/1483 -> b/1483
 * [new branch]      b/1484 -> b/1484
 * [new branch]      b/1485 -> b/1485
 * [new branch]      b/1486 -> b/1486
 * [new branch]      b/1487 -> b/1487
 * [new branch]      b/1488 -> b/1488
 * [new branch]      b/1489 -> b/1489
 * [new branch]      b/1490 -> b/1490
 * [new branch]      b/1491 -> b/1491
 * [new branch]      b/1492 -> b/1492
 * [new branch]      b/1493 -> b/1493
 * [new branch]      b/1494 -> b/1494
 * [new branch]      b/1495 -> b/1495
 * [new branch]      b/1496 -> b/1496
 * [new branch]      b/1497 -> b/1497
 * [new branch]      b/1498 -> b/1498
 * [new branch]      b/1499 -> b/1499
 * [new branch]      b/1500 -> b/1500
 * [new branch]      b/1501 -> b/1501
 * [new branch]      b/1502 -> b/1502
 * [new branch]      b/1503 -> b/1503
 * [new branch]      b/1504 -> b/1504
 * [new branch]      b/1505 -> b/1505
 * [new branch]      b/1506 -> b/1506
 * [new branch]      b/1507 -> b/1507
 * [new branch]      b/1508 -> b/1508
 * [new branch]      b/1509 -> b/1509
 * [new branch]      b/1510 -> b/1510
 * [new branch]      b/1511 -> b/1511
 * [new branch]      b/1512 -> b/1512
 * [new branch]      b/1513 -> b/1513
 * [new branch]      b/1514 -> b/1514
 * [new branch]      b/1515 -> b/1515
 * [new branch]      b/1516 -> b/1516
 * [new branch]      b/1517 -> b/1517
 * [new branch]      b/1518 -> b/1518
 * [new branch]      b/1519 -> b/1519
 * [new branch]      b/1520 -> b/1520
 * [new branch]      b/1521 -> b/1521
 * [new branch]      b/1522 -> b/1522
 * [new branch]      b/1523 -> b/1523
 * [new branch]      b/1524 -> b/1524
 * [new branch]      b/1525 -> b/1525
 * [new branch]      b/1526 -> b/1526
 * [new branch]      b/1527 -> b/1527
 * [new branch]      b/1528 -> b/1528
 * [new branch]      b/1529 -> b/1529
 * [new branch]      b/1530 -> b/1530
 * [new branch]      b/1531 -> b/1531
 * [new branch]      b/1532 -> b/1532
 * [new branch]      b/1533 -> b/1533
 * [new branch]      b/1534 -> b/1534
 * [new branch]      b/1535 -> b/1535
 * [new branch]      b/1536 -> b/1536
 * [new branch]      b/1537 -> b/1537
 * [new branch]      b/1538 -> b/1538
 * [new branch]      b/1539 -> b/1539
 * [new branch]      b/1540 -> b/1540
 * [new branch]      b/1541 -> b/1541
 * [new branch]      b/1542 -> b/1542
 * [new branch]      b/1543 -> b/1543
 * [new branch]      b/1544 -> b/1544
 * [new branch]      b/1545 -> b/1545
 * [new branch]      b/1546 -> b/1546
 * [new branch]      b/1547 -> b/1547
 * [new branch]      b/1548 -> b/1548
 * [new branch]      b/1549 -> b/1549
 * [new branch]      b/1550 -> b/1550
 * [new branch]      b/1551 -> b/1551
 * [new branch]      b/1552 -> b/1552
 * [new branch]      b/1553 -> b/1553
 * [new branch]      b/1554 -> b/1554
 * [new branch]      b/1555 -> b/1555
 * [new branch]      b/1556 -> b/1556
 * [new branch]      b/1557 -> b/1557
 * [new branch]      b/1558 -> b/1558
 * [new branch]      b/1559 -> b/1559
 * [new branch]      b/1560 -> b/1560
 * [new branch]      b/1561 -> b/1561
 * [new branch]      b/1562 -> b/1562
 * [new branch]      b/1563 -> b/1563
 * [new branch]      b/1564 -> b/1564
 * [new branch]      b/1565 -> b/1565
 * [new branch]      b/1566 -> b/1566
 * [new branch]      b/1567 -> b/1567
 * [new branch]      b/1568 -> b/1568
 * [new branch]      b/1569 -> b/1569
 * [new branch]      b/1570 -> b/1570
 * [new branch]      b/1571 -> b/1571
 * [new branch]      b/1572 -> b/1572
 * [new branch]      b/1573 -> b/1573
 * [new branch]      b/1574 -> b/1574
 * [new branch]      b/1575 -> b/1575
 * [new branch]      b/1576 -> b/1576
 * [new branch]      b/1577 -> b/1577
 * [new branch]      b/1578 -> b/1578
 * [new branch]      b/1579 -> b/1579
 * [new branch]      b/1580 -> b/1580
 * [new branch]      b/1581 -> b/1581
 * [new branch]      b/1582 -> b/1582
 * [new branch]      b/1583 -> b/1583
 * [new branch]      b/1584 -> b/1584
 * [new branch]      b/1585 -> b/1585
 * [new branch]      b/1586 -> b/1586
 * [new branch]      b/1587 -> b/1587
 * [new branch]      b/1588 -> b/1588
 * [new branch]      b/1589 -> b/1589
 * [new branch]      b/1590 -> b/1590
 * [new branch]      b/1591 -> b/1591
 * [new branch]      b/1592 -> b/1592
 * [new branch]      b/1593 -> b/1593
 * [new branch]      b/1594 -> b/1594
 * [new branch]      b/1595 -> b/1595
 * [new branch]      b/1596 -> b/1596
 * [new branch]      b/1597 -> b/1597
 * [new branch]      b/1598 -> b/1598
 * [new branch]      b/1599 -> b/1599
 * [new branch]      b/1600 -> b/1600
 * [new branch]      b/1601 -> b/1601
 * [new branch]      b/1602 -> b/1602
 * [new branch]      b/1603 -> b/1603
 * [new branch]      b/1604 -> b/1604
 * [new branch]      b/1605 -> b/1605
 * [new branch]      b/1606 -> b/1606
 * [new branch]      b/1607 -> b/1607
 * [new branch]      b/1608 -> b/1608
 * [new branch]      b/1609 -> b/1609
 * [new branch]      b/1610 -> b/1610
 * [new branch]      b/1611 -> b/1611
 * [new branch]      b/1612 -> b/1612
 * [new branch]      b/1613 -> b/1613
 * [new branch]      b/1614 -> b/1614
 * [new branch]      b/1615 -> b/1615
 * [new branch]      b/1616 -> b/1616
 * [new branch]      b/1617 -> b/1617
 * [new branch]      b/1618 -> b/1618
 * [new branch]      b/1619 -> b/1619
 * [new branch]      b/1620 -> b/1620
 * [new branch]      b/1621 -> b/1621
 * [new branch]      b/1622 -> b/1622
 * [new branch]      b/1623 -> b/1623
 * [new branch]      b/1624 -> b/1624
 * [new branch]      b/1625 -> b/1625
 * [new branch]      b/1626 -> b/1626
 * [new branch]      b/1627 -> b/1627
 * [new branch]      b/1628 -> b/1628
 * [new branch]      b/1629 -> b/1629
 * [new branch]      b/1630 -> b/1630
 * [new branch]      b/1631 -> b/1631
 * [new branch]      b/1632 -> b/1632
 * [new branch]      b/1633 -> b/1633
 * [new branch]      b/1634 -> b/1634
 * [new branch]      b/1635 -> b/1635
 * [new branch]      b/1636 -> b/1636
 * [new branch]      b/1637 -> b/1637
 * [new branch]      b/1638 -> b/1638
 * [new branch]      b/1639 -> b/1639
 * [new branch]      b/1640 -> b/1640
 * [new branch]      b/1641 -> b/1641
 * [new branch]      b/1642 -> b/1642
 * [new branch]      b/1643 -> b/1643
 * [new branch]      b/1644 -> b/1644
 * [new branch]      b/1645 -> b/1645
 * [new branch]      b/1646 -> b/1646
 * [new branch]      b/1647 -> b/1647
 * [new branch]      b/1648 -> b/1648
 * [new branch]      b/1649 -> b/1649
 * [new branch]      b/1650 -> b/1650
 * [new branch]      b/1651 -> b/1651
 * [new branch]      b/1652 -> b/1652
 * [new branch]      b/1653 -> b/1653
 * [new branch]      b/1654 -> b/1654
 * [new branch]      b/1655 -> b/1655
 * [new branch]      b/1656 -> b/1656
 * [new branch]      b/1657 -> b/1657
 * [new branch]      b/1658 -> b/1658
 * [new branch]      b/1659 -> b/1659
 * [new branch]      b/1660 -> b/1660
 * [new branch]      b/1661 -> b/1661
 * [new branch]      b/1662 -> b/1662
 * [new branch]      b/1663 -> b/1663
 * [new branch]      b/1664 -> b/1664
 * [new branch]      b/1665 -> b/1665
 * [new branch]      b/1666 -> b/1666
 * [new branch]      b/1667 -> b/1667
 * [new branch]      b/1668 -> b/1668
 * [new branch]      b/1669 -> b/1669
 * [new branch]      b/1670 -> b/1670
 * [new branch]      b/1671 -> b/1671
 * [new branch]      b/1672 -> b/1672
 * [new branch]      b/1673 -> b/1673
 * [new branch]      b/1674 -> b/1674
 * [new branch]      b/1675 -> b/1675
 * [new branch]      b/1676 -> b/1676
 * [new branch]      b/1677 -> b/1677
 * [new branch]      b/1678 -> b/1678
 * [new branch]      b/1679 -> b/1679
 * [new branch]      b/1680 -> b/1680
 * [new branch]      b/1681 -> b/1681
 * [new branch]      b/1682 -> b/1682
 * [new branch]      b/1683 -> b/1683
 * [new branch]      b/1684 -> b/1684
 * [new branch]      b/1685 -> b/1685
 * [new branch]      b/1686 -> b/1686
 * [new branch]      b/1687 -> b/1687
 * [new branch]      b/1688 -> b/1688
 * [new branch]      b/1689 -> b/1689
 * [new branch]      b/1690 -> b/1690
 * [new branch]      b/1691 -> b/1691
 * [new branch]      b/1692 -> b/1692
 * [new branch]      b/1693 -> b/1693
 * [new branch]      b/1694 -> b/1694
 * [new branch]      b/1695 -> b/1695
 * [new branch]      b/1696 -> b/1696
 * [new branch]      b/1697 -> b/1697
 * [new branch]      b/1698 -> b/1698
 * [new branch]      b/1699 -> b/1699
 * [new branch]      b/1700 -> b/1700
 * [new branch]      b/1701 -> b/1701
 * [new branch]      b/1702 -> b/1702
 * [new branch]      b/1703 -> b/1703
 * [new branch]      b/1704 -> b/1704
 * [new branch]      b/1705 -> b/1705
 * [new branch]      b/1706 -> b/1706
 * [new branch]      b/1707 -> b/1707
 * [new branch]      b/1708 -> b/1708
 * [new branch]      b/1709 -> b/1709
 * [new branch]      b/1710 -> b/1710
 * [new branch]      b/1711 -> b/1711
 * [new branch]      b/1712 -> b/1712
 * [new branch]      b/1713 -> b/1713
 * [new branch]      b/1714 -> b/1714
 * [new branch]      b/1715 -> b/1715
 * [new branch]      b/1716 -> b/1716
 * [new branch]      b/1717 -> b/1717
 * [new branch]      b/1718 -> b/1718
 * [new branch]      b/1719 -> b/1719
 * [new branch]      b/1720 -> b/1720
 * [new branch]      b/1721 -> b/1721
 * [new branch]      b/1722 -> b/1722
 * [new branch]      b/1723 -> b/1723
 * [new branch]      b/1724 -> b/1724
 * [new branch]      b/1725 -> b/1725
 * [new branch]      b/1726 -> b/1726
 * [new branch]      b/1727 -> b/1727
 * [new branch]      b/1728 -> b/1728
 * [new branch]      b/1729 -> b/1729
 * [new branch]      b/1730 -> b/1730
 * [new branch]      b/1731 -> b/1731
 * [new branch]      b/1732 -> b/1732
 * [new branch]      b/1733 -> b/1733
 * [new branch]      b/1734 -> b/1734
 * [new branch]      b/1735 -> b/1735
 * [new branch]      b/1736 -> b/1736
 * [new branch]      b/1737 -> b/1737
 * [new branch]      b/1738 -> b/1738
 * [new branch]      b/1739 -> b/1739
 * [new branch]      b/1740 -> b/1740
 * [new branch]      b/1741 -> b/1741
 * [new branch]      b/1742 -> b/1742
 * [new branch]      b/1743 -> b/1743
 * [new branch]      b/1744 -> b/1744
 * [new branch]      b/1745 -> b/1745
 * [new branch]      b/1746 -> b/1746
 * [new branch]      b/1747 -> b/1747
 * [new branch]      b/1748 -> b/1748
 * [new branch]      b/1749 -> b/1749
 * [new branch]      b/1750 -> b/1750
 * [new branch]      b/1751 -> b/1751
 * [new branch]      b/1752 -> b/1752
 * [new branch]      b/1753 -> b/1753
 * [new branch]      b/1754 -> b/1754
 * [new branch]      b/1755 -> b/1755
 * [new branch]      b/1756 -> b/1756
 * [new branch]      b/1757 -> b/1757
 * [new branch]      b/1758 -> b/1758
 * [new branch]      b/1759 -> b/1759
 * [new branch]      b/1760 -> b/1760
 * [new branch]      b/1761 -> b/1761
 * [new branch]      b/1762 -> b/1762
 * [new branch]      b/1763 -> b/1763
 * [new branch]      b/1764 -> b/1764
 * [new branch]      b/1765 -> b/1765
 * [new branch]      b/1766 -> b/1766
 * [new branch]      b/1767 -> b/1767
 * [new branch]      b/1768 -> b/1768
 * [new branch]      b/1769 -> b/1769
 * [new branch]      b/1770 -> b/1770
 * [new branch]      b/1771 -> b/1771
 * [new branch]      b/1772 -> b/1772
 * [new branch]      b/1773 -> b/1773
 * [new branch]      b/1774 -> b/1774
 * [new branch]      b/1775 -> b/1775
 * [new branch]      b/1776 -> b/1776
 * [new branch]      b/1777 -> b/1777
 * [new branch]      b/1778 -> b/1778
 * [new branch]      b/1779 -> b/1779
 * [new branch]      b/1780 -> b/1780
 * [new branch]      b/1781 -> b/1781
 * [new branch]      b/1782 -> b/1782
 * [new branch]      b/1783 -> b/1783
 * [new branch]      b/1784 -> b/1784
 * [new branch]      b/1785 -> b/1785
 * [new branch]      b/1786 -> b/1786
 * [new branch]      b/1787 -> b/1787
 * [new branch]      b/1788 -> b/1788
 * [new branch]      b/1789 -> b/1789
 * [new branch]      b/1790 -> b/1790
 * [new branch]      b/1791 -> b/1791
 * [new branch]      b/1792 -> b/1792
 * [new branch]      b/1793 -> b/1793
 * [new branch]      b/1794 -> b/1794
 * [new branch]      b/1795 -> b/1795
 * [new branch]      b/1796 -> b/1796
 * [new branch]      b/1797 -> b/1797
 * [new branch]      b/1798 -> b/1798
 * [new branch]      b/1799 -> b/1799
 * [new branch]      b/1800 -> b/1800
 * [new branch]      b/1801 -> b/1801
 * [new branch]      b/1802 -> b/1802
 * [new branch]      b/1803 -> b/1803
 * [new branch]      b/1804 -> b/1804
 * [new branch]      b/1805 -> b/1805
 * [new branch]      b/1806 -> b/1806
 * [new branch]      b/1807 -> b/1807
 * [new branch]      b/1808 -> b/1808
 * [new branch]      b/1809 -> b/1809
 * [new branch]      b/1810 -> b/1810
 * [new branch]      b/1811 -> b/1811
 * [new branch]      b/1812 -> b/1812
 * [new branch]      b/1813 -> b/1813
 * [new branch]      b/1814 -> b/1814
 * [new branch]      b/1815 -> b/1815
 * [new branch]      b/1816 -> b/1816
 * [new branch]      b/1817 -> b/1817
 * [new branch]      b/1818 -> b/1818
 * [new branch]      b/1819 -> b/1819
 * [new branch]      b/1820 -> b/1820
 * [new branch]      b/1821 -> b/1821
 * [new branch]      b/1822 -> b/1822
 * [new branch]      b/1823 -> b/1823
 * [new branch]      b/1824 -> b/1824
 * [new branch]      b/1825 -> b/1825
 * [new branch]      b/1826 -> b/1826
 * [new branch]      b/1827 -> b/1827
 * [new branch]      b/1828 -> b/1828
 * [new branch]      b/1829 -> b/1829
 * [new branch]      b/1830 -> b/1830
 * [new branch]      b/1831 -> b/1831
 * [new branch]      b/1832 -> b/1832
 * [new branch]      b/1833 -> b/1833
 * [new branch]      b/1834 -> b/1834
 * [new branch]      b/1835 -> b/1835
 * [new branch]      b/1836 -> b/1836
 * [new branch]      b/1837 -> b/1837
 * [new branch]      b/1838 -> b/1838
 * [new branch]      b/1839 -> b/1839
 * [new branch]      b/1840 -> b/1840
 * [new branch]      b/1841 -> b/1841
 * [new branch]      b/1842 -> b/1842
 * [new branch]      b/1843 -> b/1843
 * [new branch]      b/1844 -> b/1844
 * [new branch]      b/1845 -> b/1845
 * [new branch]      b/1846 -> b/1846
 * [new branch]      b/1847 -> b/1847
 * [new branch]      b/1848 -> b/1848
 * [new branch]      b/1849 -> b/1849
 * [new branch]      b/1850 -> b/1850
 * [new branch]      b/1851 -> b/1851
 * [new branch]      b/1852 -> b/1852
 * [new branch]      b/1853 -> b/1853
 * [new branch]      b/1854 -> b/1854
 * [new branch]      b/1855 -> b/1855
 * [new branch]      b/1856 -> b/1856
 * [new branch]      b/1857 -> b/1857
 * [new branch]      b/1858 -> b/1858
 * [new branch]      b/1859 -> b/1859
 * [new branch]      b/1860 -> b/1860
 * [new branch]      b/1861 -> b/1861
 * [new branch]      b/1862 -> b/1862
 * [new branch]      b/1863 -> b/1863
 * [new branch]      b/1864 -> b/1864
 * [new branch]      b/1865 -> b/1865
 * [new branch]      b/1866 -> b/1866
 * [new branch]      b/1867 -> b/1867
 * [new branch]      b/1868 -> b/1868
 * [new branch]      b/1869 -> b/1869
 * [new branch]      b/1870 -> b/1870
 * [new branch]      b/1871 -> b/1871
 * [new branch]      b/1872 -> b/1872
 * [new branch]      b/1873 -> b/1873
 * [new branch]      b/1874 -> b/1874
 * [new branch]      b/1875 -> b/1875
 * [new branch]      b/1876 -> b/1876
 * [new branch]      b/1877 -> b/1877
 * [new branch]      b/1878 -> b/1878
 * [new branch]      b/1879 -> b/1879
 * [new branch]      b/1880 -> b/1880
 * [new branch]      b/1881 -> b/1881
 * [new branch]      b/1882 -> b/1882
 * [new branch]      b/1883 -> b/1883
 * [new branch]      b/1884 -> b/1884
 * [new branch]      b/1885 -> b/1885
 * [new branch]      b/1886 -> b/1886
 * [new branch]      b/1887 -> b/1887
 * [new branch]      b/1888 -> b/1888
 * [new branch]      b/1889 -> b/1889
 * [new branch]      b/1890 -> b/1890
 * [new branch]      b/1891 -> b/1891
 * [new branch]      b/1892 -> b/1892
 * [new branch]      b/1893 -> b/1893
 * [new branch]      b/1894 -> b/1894
 * [new branch]      b/1895 -> b/1895
 * [new branch]      b/1896 -> b/1896
 * [new branch]      b/1897 -> b/1897
 * [new branch]      b/1898 -> b/1898
 * [new branch]      b/1899 -> b/1899
 * [new branch]      b/1900 -> b/1900
 * [new branch]      b/1901 -> b/1901
 * [new branch]      b/1902 -> b/1902
 * [new branch]      b/1903 -> b/1903
 * [new branch]      b/1904 -> b/1904
 * [new branch]      b/1905 -> b/1905
 * [new branch]      b/1906 -> b/1906
 * [new branch]      b/1907 -> b/1907
 * [new branch]      b/1908 -> b/1908
 * [new branch]      b/1909 -> b/1909
 * [new branch]      b/1910 -> b/1910
 * [new branch]      b/1911 -> b/1911
 * [new branch]      b/1912 -> b/1912
 * [new branch]      b/1913 -> b/1913
 * [new branch]      b/1914 -> b/1914
 * [new branch]      b/1915 -> b/1915
 * [new branch]      b/1916 -> b/1916
 * [new branch]      b/1917 -> b/1917
 * [new branch]      b/1918 -> b/1918
 * [new branch]      b/1919 -> b/1919
 * [new branch]      b/1920 -> b/1920
 * [new branch]      b/1921 -> b/1921
 * [new branch]      b/1922 -> b/1922
 * [new branch]      b/1923 -> b/1923
 * [new branch]      b/1924 -> b/1924
 * [new branch]      b/1925 -> b/1925
 * [new branch]      b/1926 -> b/1926
 * [new branch]      b/1927 -> b/1927
 * [new branch]      b/1928 -> b/1928
 * [new branch]      b/1929 -> b/1929
 * [new branch]      b/1930 -> b/1930
 * [new branch]      b/1931 -> b/1931
 * [new branch]      b/1932 -> b/1932
 * [new branch]      b/1933 -> b/1933
 * [new branch]      b/1934 -> b/1934
 * [new branch]      b/1935 -> b/1935
 * [new branch]      b/1936 -> b/1936
 * [new branch]      b/1937 -> b/1937
 * [new branch]      b/1938 -> b/1938
 * [new branch]      b/1939 -> b/1939
 * [new branch]      b/1940 -> b/1940
 * [new branch]      b/1941 -> b/1941
 * [new branch]      b/1942 -> b/1942
 * [new branch]      b/1943 -> b/1943
 * [new branch]      b/1944 -> b/1944
 * [new branch]      b/1945 -> b/1945
 * [new branch]      b/1946 -> b/1946
 * [new branch]      b/1947 -> b/1947
 * [new branch]      b/1948 -> b/1948
 * [new branch]      b/1949 -> b/1949
 * [new branch]      b/1950 -> b/1950
 * [new branch]      b/1951 -> b/1951
 * [new branch]      b/1952 -> b/1952
 * [new branch]      b/1953 -> b/1953
 * [new branch]      b/1954 -> b/1954
 * [new branch]      b/1955 -> b/1955
 * [new branch]      b/1956 -> b/1956
 * [new branch]      b/1957 -> b/1957
 * [new branch]      b/1958 -> b/1958
 * [new branch]      b/1959 -> b/1959
 * [new branch]      b/1960 -> b/1960
 * [new branch]      b/1961 -> b/1961
 * [new branch]      b/1962 -> b/1962
 * [new branch]      b/1963 -> b/1963
 * [new branch]      b/1964 -> b/1964
 * [new branch]      b/1965 -> b/1965
 * [new branch]      b/1966 -> b/1966
 * [new branch]      b/1967 -> b/1967
 * [new branch]      b/1968 -> b/1968
 * [new branch]      b/1969 -> b/1969
 * [new branch]      b/1970 -> b/1970
 * [new branch]      b/1971 -> b/1971
 * [new branch]      b/1972 -> b/1972
 * [new branch]      b/1973 -> b/1973
 * [new branch]      b/1974 -> b/1974
 * [new branch]      b/1975 -> b/1975
 * [new branch]      b/1976 -> b/1976
 * [new branch]      b/1977 -> b/1977
 * [new branch]      b/1978 -> b/1978
 * [new branch]      b/1979 -> b/1979
 * [new branch]      b/1980 -> b/1980
 * [new branch]      b/1981 -> b/1981
 * [new branch]      b/1982 -> b/1982
 * [new branch]      b/1983 -> b/1983
 * [new branch]      b/1984 -> b/1984
 * [new branch]      b/1985 -> b/1985
 * [new branch]      b/1986 -> b/1986
 * [new branch]      b/1987 -> b/1987
 * [new branch]      b/1988 -> b/1988
 * [new branch]      b/1989 -> b/1989
 * [new branch]      b/1990 -> b/1990
 * [new branch]      b/1991 -> b/1991
 * [new branch]      b/1992 -> b/1992
 * [new branch]      b/1993 -> b/1993
 * [new branch]      b/1994 -> b/1994
 * [new branch]      b/1995 -> b/1995
 * [new branch]      b/1996 -> b/1996
 * [new branch]      b/1997 -> b/1997
 * [new branch]      b/1998 -> b/1998
 * [new branch]      b/1999 -> b/1999
 * [new branch]      b/2000 -> b/2000
ok 11 - sigpipe does not cause pre-push hook failure

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5580-unc-paths.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5580-unc-paths/.git/
1..0 # SKIP skipping Windows-only path tests
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5581-http-curl-verbose.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5581-http-curl-verbose/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5573-pull-verify-signatures.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 5573.1 'create repositories with signed commits': 
	echo 1 >a && git add a &&
	test_tick && git commit -m initial &&
	git tag initial &&

	git clone . signed &&
	(
		cd signed &&
		echo 2 >b && git add b &&
		test_tick && git commit -S -m "signed"
	) &&

	git clone . unsigned &&
	(
		cd unsigned &&
		echo 3 >c && git add c &&
		test_tick && git commit -m "unsigned"
	) &&

	git clone . bad &&
	(
		cd bad &&
		echo 4 >d && git add d &&
		test_tick && git commit -S -m "bad" &&
		git cat-file commit HEAD >raw &&
		sed -e "s/^bad/forged bad/" raw >forged &&
		git hash-object -w -t commit forged >forged.commit &&
		git checkout $(cat forged.commit)
	) &&

	git clone . untrusted &&
	(
		cd untrusted &&
		echo 5 >e && git add e &&
		test_tick && git commit -SB7227189 -m "untrusted"
	)

[master (root-commit) 059e44e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Cloning into 'signed'...
done.
[master 0065fe5] signed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Cloning into 'unsigned'...
done.
[master d205cb3] unsigned
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
Cloning into 'bad'...
done.
[master b1b8aca] bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d
Note: switching to '4aec16e4906789131adc366e2c19f338403c5492'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4aec16e forged bad
Cloning into 'untrusted'...
done.
[master c81ad9d] untrusted
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e
ok 1 - create repositories with signed commits

expecting success of 5573.2 'pull unsigned commit with --verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git pull --ff-only --verify-signatures unsigned 2>pullerror &&
	test_i18ngrep "does not have a GPG signature" pullerror

fatal: Commit d205cb3 does not have a GPG signature.
HEAD is now at 059e44e initial
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 059e44e initial
ok 2 - pull unsigned commit with --verify-signatures

expecting success of 5573.3 'pull commit with bad signature with --verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git pull --ff-only --verify-signatures bad 2>pullerror &&
	test_i18ngrep "has a bad GPG signature" pullerror

fatal: Commit 4aec16e has a bad GPG signature allegedly by C O Mitter <committer@example.com>.
HEAD is now at 059e44e initial
HEAD is now at 059e44e initial
ok 3 - pull commit with bad signature with --verify-signatures

expecting success of 5573.4 'pull commit with untrusted signature with --verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git pull --ff-only --verify-signatures untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 059e44e initial
HEAD is now at 059e44e initial
ok 4 - pull commit with untrusted signature with --verify-signatures

expecting success of 5573.5 'pull commit with untrusted signature with --verify-signatures and minTrustLevel=ultimate': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config gpg.minTrustLevel ultimate &&
	test_must_fail git pull --ff-only --verify-signatures untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 059e44e initial
HEAD is now at 059e44e initial
ok 5 - pull commit with untrusted signature with --verify-signatures and minTrustLevel=ultimate

expecting success of 5573.6 'pull commit with untrusted signature with --verify-signatures and minTrustLevel=marginal': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config gpg.minTrustLevel marginal &&
	test_must_fail git pull --ff-only --verify-signatures untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 059e44e initial
HEAD is now at 059e44e initial
ok 6 - pull commit with untrusted signature with --verify-signatures and minTrustLevel=marginal

expecting success of 5573.7 'pull commit with untrusted signature with --verify-signatures and minTrustLevel=undefined': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config gpg.minTrustLevel undefined &&
	git pull --ff-only --verify-signatures untrusted >pulloutput &&
	test_i18ngrep "has a good GPG signature" pulloutput

From untrusted
 * branch            HEAD       -> FETCH_HEAD
Commit c81ad9d has a good GPG signature by Eris Discordia <discord@example.net>
HEAD is now at c81ad9d untrusted
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c81ad9d untrusted

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> c81ad9d

HEAD is now at 059e44e initial
ok 7 - pull commit with untrusted signature with --verify-signatures and minTrustLevel=undefined

expecting success of 5573.8 'pull signed commit with --verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	git pull --verify-signatures signed >pulloutput &&
	test_i18ngrep "has a good GPG signature" pulloutput

From signed
 * branch            HEAD       -> FETCH_HEAD
Commit 0065fe5 has a good GPG signature by C O Mitter <committer@example.com>
HEAD is now at 0065fe5 signed
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0065fe5 signed

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 0065fe5

HEAD is now at 059e44e initial
ok 8 - pull signed commit with --verify-signatures

expecting success of 5573.9 'pull commit with bad signature without verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	git pull --ff-only bad 2>pullerror

Updating 059e44e..4aec16e
Fast-forward
 d | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 d
HEAD is now at 4aec16e forged bad
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  4aec16e forged bad

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 4aec16e

HEAD is now at 059e44e initial
ok 9 - pull commit with bad signature without verification

expecting success of 5573.10 'pull commit with bad signature with --no-verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	test_config pull.verifySignatures true &&
	git pull --ff-only --no-verify-signatures bad 2>pullerror

Updating 059e44e..4aec16e
Fast-forward
 d | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 d
HEAD is now at 4aec16e forged bad
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  4aec16e forged bad

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 4aec16e

HEAD is now at 059e44e initial
ok 10 - pull commit with bad signature with --no-verify-signatures

expecting success of 5573.11 'pull unsigned commit into unborn branch': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_must_fail \
		git -C empty-repo pull --verify-signatures ..  2>pullerror &&
	test_i18ngrep "does not have a GPG signature" pullerror

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
fatal: Commit 059e44e does not have a GPG signature.
ok 11 - pull unsigned commit into unborn branch

expecting success of 5573.12 'pull commit into unborn branch with bad signature and --verify-signatures': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_must_fail \
		git -C empty-repo pull --ff-only --verify-signatures ../bad 2>pullerror &&
	test_i18ngrep "has a bad GPG signature" pullerror

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
fatal: Commit 4aec16e has a bad GPG signature allegedly by C O Mitter <committer@example.com>.
ok 12 - pull commit into unborn branch with bad signature and --verify-signatures

expecting success of 5573.13 'pull commit into unborn branch with untrusted signature and --verify-signatures': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_must_fail \
		git -C empty-repo pull --ff-only --verify-signatures ../untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
ok 13 - pull commit into unborn branch with untrusted signature and --verify-signatures

expecting success of 5573.14 'pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=ultimate': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_config_global gpg.minTrustLevel ultimate &&
	test_must_fail \
		git -C empty-repo pull --ff-only --verify-signatures ../untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
ok 14 - pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=ultimate

expecting success of 5573.15 'pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=marginal': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_config_global gpg.minTrustLevel marginal &&
	test_must_fail \
		git -C empty-repo pull --ff-only --verify-signatures ../untrusted 2>pullerror &&
	test_i18ngrep "has an untrusted GPG signature" pullerror

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
fatal: Commit c81ad9d has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
ok 15 - pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=marginal

expecting success of 5573.16 'pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=undefined': 
	test_when_finished "rm -rf empty-repo" &&
	git init empty-repo &&
	test_config_global gpg.minTrustLevel undefined &&
	git -C empty-repo pull --ff-only --verify-signatures ../untrusted >pulloutput &&
	test_i18ngrep "has a good GPG signature" pulloutput

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5573-pull-verify-signatures/empty-repo/.git/
From ../untrusted
 * branch            HEAD       -> FETCH_HEAD
Commit c81ad9d has a good GPG signature by Eris Discordia <discord@example.net>
ok 16 - pull commit into unborn branch with untrusted signature and --verify-signatures and minTrustLevel=undefined

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5600-clone-fail-cleanup.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5600-clone-fail-cleanup/.git/
expecting success of 5600.1 'clone of non-existent source should fail': 
	test_must_fail git clone foo bar

fatal: repository 'foo' does not exist
ok 1 - clone of non-existent source should fail

expecting success of 5600.2 'failed clone should not leave a directory': 
	test_path_is_missing bar

ok 2 - failed clone should not leave a directory

expecting success of 5600.3 'create a repo to clone': 
	test_create_repo foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5600-clone-fail-cleanup/foo/.git/
ok 3 - create a repo to clone

expecting success of 5600.4 'create objects in repo for later corruption': 
	test_commit -C foo file &&
	git -C foo checkout --detach &&
	test_commit -C foo detached

[master (root-commit) 4c1911f] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
HEAD is now at 4c1911f file
[detached HEAD 3928560] detached
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 detached.t
ok 4 - create objects in repo for later corruption

expecting success of 5600.5 'clone of non-existent (relative to $PWD) source should fail': 
	test_must_fail git clone ../foo baz

fatal: repository '../foo' does not exist
ok 5 - clone of non-existent (relative to $PWD) source should fail

expecting success of 5600.6 'clone should work now that source exists': 
	git clone foo bar

Cloning into 'bar'...
done.
Note: switching to '39285601caec51931a713514c1133dccc9cc7e13'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 6 - clone should work now that source exists

expecting success of 5600.7 'successful clone must leave the directory': 
	test_path_is_dir bar

ok 7 - successful clone must leave the directory

expecting success of 5600.8 'failed clone --separate-git-dir should not leave any directories': 
	corrupt_repo &&
	test_must_fail git clone --separate-git-dir gitdir foo worktree &&
	test_path_is_missing gitdir &&
	test_path_is_missing worktree

Cloning into 'worktree'...
done.
fatal: update_ref failed for ref 'HEAD': cannot update ref 'HEAD': trying to write ref 'HEAD' with nonexistent object 39285601caec51931a713514c1133dccc9cc7e13
ok 8 - failed clone --separate-git-dir should not leave any directories

expecting success of 5600.9 'failed clone into empty leaves directory (vanilla)': 
	mkdir -p empty &&
	corrupt_repo &&
	test_must_fail git clone foo empty &&
	test_dir_is_empty empty

Cloning into 'empty'...
done.
fatal: update_ref failed for ref 'HEAD': cannot update ref 'HEAD': trying to write ref 'HEAD' with nonexistent object 39285601caec51931a713514c1133dccc9cc7e13
ok 9 - failed clone into empty leaves directory (vanilla)

expecting success of 5600.10 'failed clone into empty leaves directory (bare)': 
	mkdir -p empty &&
	corrupt_repo &&
	test_must_fail git clone --bare foo empty &&
	test_dir_is_empty empty

Cloning into bare repository 'empty'...
done.
fatal: update_ref failed for ref 'HEAD': cannot update ref 'HEAD': trying to write ref 'HEAD' with nonexistent object 39285601caec51931a713514c1133dccc9cc7e13
ok 10 - failed clone into empty leaves directory (bare)

expecting success of 5600.11 'failed clone into empty leaves directory (separate)': 
	mkdir -p empty-git empty-wt &&
	corrupt_repo &&
	test_must_fail git clone --separate-git-dir empty-git foo empty-wt &&
	test_dir_is_empty empty-git &&
	test_dir_is_empty empty-wt

Cloning into 'empty-wt'...
fatal: empty-git already exists
ok 11 - failed clone into empty leaves directory (separate)

expecting success of 5600.12 'failed clone into empty leaves directory (separate, git)': 
	mkdir -p empty-git &&
	corrupt_repo &&
	test_must_fail git clone --separate-git-dir empty-git foo no-wt &&
	test_dir_is_empty empty-git &&
	test_path_is_missing no-wt

Cloning into 'no-wt'...
fatal: empty-git already exists
ok 12 - failed clone into empty leaves directory (separate, git)

expecting success of 5600.13 'failed clone into empty leaves directory (separate, wt)': 
	mkdir -p empty-wt &&
	corrupt_repo &&
	test_must_fail git clone --separate-git-dir no-git foo empty-wt &&
	test_path_is_missing no-git &&
	test_dir_is_empty empty-wt

Cloning into 'empty-wt'...
done.
fatal: update_ref failed for ref 'HEAD': cannot update ref 'HEAD': trying to write ref 'HEAD' with nonexistent object 39285601caec51931a713514c1133dccc9cc7e13
ok 13 - failed clone into empty leaves directory (separate, wt)

expecting success of 5600.14 'transport failure cleans up directory': 
	test_must_fail git clone --no-local \
		-u "f() { git-upload-pack \"\$@\"; return 1; }; f" \
		foo broken-clone &&
	test_path_is_missing broken-clone

Cloning into 'broken-clone'...
fatal: remote transport reported error
ok 14 - transport failure cleans up directory

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5582-fetch-negative-refspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5582-fetch-negative-refspec/.git/
expecting success of 5582.1 'setup': 
	echo >file original &&
	git add file &&
	git commit -a -m original

[main (root-commit) 7fb3fb8] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 5582.2 'clone and setup child repos': 
	git clone . one &&
	(
		cd one &&
		echo >file updated by one &&
		git commit -a -m "updated by one" &&
		git switch -c alternate &&
		echo >file updated again by one &&
		git commit -a -m "updated by one again" &&
		git switch main
	) &&
	git clone . two &&
	(
		cd two &&
		git config branch.main.remote one &&
		git config remote.one.url ../one/.git/ &&
		git config remote.one.fetch +refs/heads/*:refs/remotes/one/* &&
		git config --add remote.one.fetch ^refs/heads/alternate
	) &&
	git clone . three

Cloning into 'one'...
done.
[main ffc8fdd] updated by one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'alternate'
[alternate 8a3fcb7] updated by one again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)
Cloning into 'two'...
done.
Cloning into 'three'...
done.
ok 2 - clone and setup child repos

expecting success of 5582.3 'fetch one': 
	echo >file updated by origin &&
	git commit -a -m "updated by origin" &&
	(
		cd two &&
		test_must_fail git rev-parse --verify refs/remotes/one/alternate &&
		git fetch one &&
		test_must_fail git rev-parse --verify refs/remotes/one/alternate &&
		git rev-parse --verify refs/remotes/one/main &&
		mine=$(git rev-parse refs/remotes/one/main) &&
		his=$(cd ../one && git rev-parse refs/heads/main) &&
		test "z$mine" = "z$his"
	)

[main 76a8623] updated by origin
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
From ../one/
 * [new branch]      main       -> one/main
fatal: Needed a single revision
ffc8fdde31e0177ad02216ab27bb483fc88169f2
ok 3 - fetch one

expecting success of 5582.4 'fetch with negative refspec on commandline': 
	echo >file updated by origin again &&
	git commit -a -m "updated by origin again" &&
	(
		cd three &&
		alternate_in_one=$(cd ../one && git rev-parse refs/heads/alternate) &&
		echo $alternate_in_one >expect &&
		git fetch ../one/.git refs/heads/*:refs/remotes/one/* ^refs/heads/main &&
		cut -f -1 .git/FETCH_HEAD >actual &&
		test_cmp expect actual
	)

[main c0ae31c] updated by origin again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From ../one/
 * [new branch]      alternate  -> one/alternate
ok 4 - fetch with negative refspec on commandline

expecting success of 5582.5 'fetch with negative sha1 refspec fails': 
	echo >file updated by origin yet again &&
	git commit -a -m "updated by origin yet again" &&
	(
		cd three &&
		main_in_one=$(cd ../one && git rev-parse refs/heads/main) &&
		test_must_fail git fetch ../one/.git refs/heads/*:refs/remotes/one/* ^$main_in_one
	)

[main e30c41c] updated by origin yet again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: invalid refspec '^ffc8fdde31e0177ad02216ab27bb483fc88169f2'
ok 5 - fetch with negative sha1 refspec fails

expecting success of 5582.6 'fetch with negative pattern refspec': 
	echo >file updated by origin once more &&
	git commit -a -m "updated by origin once more" &&
	(
		cd three &&
		alternate_in_one=$(cd ../one && git rev-parse refs/heads/alternate) &&
		echo $alternate_in_one >expect &&
		git fetch ../one/.git refs/heads/*:refs/remotes/one/* ^refs/heads/m* &&
		cut -f -1 .git/FETCH_HEAD >actual &&
		test_cmp expect actual
	)

[main c5395f8] updated by origin once more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - fetch with negative pattern refspec

expecting success of 5582.7 'fetch with negative pattern refspec does not expand prefix': 
	echo >file updated by origin another time &&
	git commit -a -m "updated by origin another time" &&
	(
		cd three &&
		alternate_in_one=$(cd ../one && git rev-parse refs/heads/alternate) &&
		main_in_one=$(cd ../one && git rev-parse refs/heads/main) &&
		echo $alternate_in_one >expect &&
		echo $main_in_one >>expect &&
		git fetch ../one/.git refs/heads/*:refs/remotes/one/* ^main &&
		cut -f -1 .git/FETCH_HEAD >actual &&
		test_cmp expect actual
	)

[main b3d452f] updated by origin another time
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From ../one/
 * [new branch]      main       -> one/main
ok 7 - fetch with negative pattern refspec does not expand prefix

expecting success of 5582.8 'fetch with negative refspec avoids duplicate conflict': 
	(
		cd one &&
		git branch dups/a &&
		git branch dups/b &&
		git branch dups/c &&
		git branch other/a &&
		git rev-parse --verify refs/heads/other/a >../expect &&
		git rev-parse --verify refs/heads/dups/b >>../expect &&
		git rev-parse --verify refs/heads/dups/c >>../expect
	) &&
	(
		cd three &&
		git fetch ../one/.git ^refs/heads/dups/a refs/heads/dups/*:refs/dups/* refs/heads/other/a:refs/dups/a &&
		git rev-parse --verify refs/dups/a >../actual &&
		git rev-parse --verify refs/dups/b >>../actual &&
		git rev-parse --verify refs/dups/c >>../actual
	) &&
	test_cmp expect actual

From ../one/
 * [new branch]      dups/b     -> refs/dups/b
 * [new branch]      dups/c     -> refs/dups/c
 * [new branch]      other/a    -> refs/dups/a
ok 8 - fetch with negative refspec avoids duplicate conflict

expecting success of 5582.9 'push --prune with negative refspec': 
	(
		cd two &&
		git branch prune/a &&
		git branch prune/b &&
		git branch prune/c &&
		git push ../three refs/heads/prune/* &&
		git branch -d prune/a &&
		git branch -d prune/b &&
		git push --prune ../three refs/heads/prune/* ^refs/heads/prune/b
	) &&
	(
		cd three &&
		test_write_lines b c >expect &&
		git for-each-ref --format="%(refname:lstrip=3)" refs/heads/prune/ >actual &&
		test_cmp expect actual
	)

To ../three
 * [new branch]      prune/a -> prune/a
 * [new branch]      prune/b -> prune/b
 * [new branch]      prune/c -> prune/c
Deleted branch prune/a (was 7fb3fb8).
Deleted branch prune/b (was 7fb3fb8).
To ../three
 - [deleted]         prune/a
ok 9 - push --prune with negative refspec

expecting success of 5582.10 'push --prune with negative refspec apply to the destination': 
	(
		cd two &&
		git branch ours/a &&
		git branch ours/b &&
		git branch ours/c &&
		git push ../three refs/heads/ours/*:refs/heads/theirs/* &&
		git branch -d ours/a &&
		git branch -d ours/b &&
		git push --prune ../three refs/heads/ours/*:refs/heads/theirs/* ^refs/heads/theirs/b
	) &&
	(
		cd three &&
		test_write_lines b c >expect &&
		git for-each-ref --format="%(refname:lstrip=3)" refs/heads/theirs/ >actual &&
		test_cmp expect actual
	)

To ../three
 * [new branch]      ours/a -> theirs/a
 * [new branch]      ours/b -> theirs/b
 * [new branch]      ours/c -> theirs/c
Deleted branch ours/a (was 7fb3fb8).
Deleted branch ours/b (was 7fb3fb8).
To ../three
 - [deleted]         theirs/a
ok 10 - push --prune with negative refspec apply to the destination

expecting success of 5582.11 'fetch --prune with negative refspec': 
	(
		cd two &&
		git branch fetch/a &&
		git branch fetch/b &&
		git branch fetch/c
	) &&
	(
		cd three &&
		git fetch ../two/.git refs/heads/fetch/*:refs/heads/copied/*
	) &&
	(
		cd two &&
		git branch -d fetch/a &&
		git branch -d fetch/b
	) &&
	(
		cd three &&
		test_write_lines b c >expect &&
		git fetch -v ../two/.git --prune refs/heads/fetch/*:refs/heads/copied/* ^refs/heads/fetch/b &&
		git for-each-ref --format="%(refname:lstrip=3)" refs/heads/copied/ >actual &&
		test_cmp expect actual
	)

From ../two/
 * [new branch]      fetch/a    -> copied/a
 * [new branch]      fetch/b    -> copied/b
 * [new branch]      fetch/c    -> copied/c
Deleted branch fetch/a (was 7fb3fb8).
Deleted branch fetch/b (was 7fb3fb8).
From ../two/
 - [deleted]         (none)     -> copied/a
 = [up to date]      fetch/c    -> copied/c
ok 11 - fetch --prune with negative refspec

expecting success of 5582.12 'push with matching : and negative refspec': 
	# Manually handle cleanup, since test_config is not
	# prepared to take arbitrary options like --add
	test_when_finished "test_unconfig -C two remote.one.push" &&

	# For convenience, we use "master" to refer to the name of
	# the branch created by default in the following.
	#
	# Repositories two and one have branches other than "master"
	# but they have no overlap---"master" is the only one that
	# is shared between them.  And the master branch at two is
	# behind the master branch at one by one commit.
	git -C two config --add remote.one.push : &&

	# A matching push tries to update master, fails due to non-ff
	test_must_fail git -C two push one &&

	# "master" may actually not be "master"---find it out.
	current=$(git symbolic-ref HEAD) &&

	# If master is in negative refspec, then the command will not attempt
	# to push and succeed.
	git -C two config --add remote.one.push "^$current" &&

	# With "master" excluded, this push is a no-op.  Nothing gets
	# pushed and it succeeds.
	git -C two push -v one

To ../one/.git/
 ! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to '../one/.git/'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Pushing to ../one/.git/
Everything up-to-date
ok 12 - push with matching : and negative refspec

expecting success of 5582.13 'push with matching +: and negative refspec': 
	test_when_finished "test_unconfig -C two remote.one.push" &&

	# The same set-up as above, whose side-effect was a no-op.
	git -C two config --add remote.one.push +: &&

	# The push refuses to update the "master" branch that is checked
	# out in the "one" repository, even when it is forced with +:
	test_must_fail git -C two push one &&

	# "master" may actually not be "master"---find it out.
	current=$(git symbolic-ref HEAD) &&

	# If master is in negative refspec, then the command will not attempt
	# to push and succeed
	git -C two config --add remote.one.push "^$current" &&

	# With "master" excluded, this push is a no-op.  Nothing gets
	# pushed and it succeeds.
	git -C two push -v one

remote: error: refusing to update checked out branch: refs/heads/main        
remote: error: By default, updating the current branch in a non-bare repository        
remote: is denied, because it will make the index and work tree inconsistent        
remote: with what you pushed, and will require 'git reset --hard' to match        
remote: the work tree to HEAD.        
remote: 
remote: You can set the 'receive.denyCurrentBranch' configuration variable        
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into        
remote: its current branch; however, this is not recommended unless you        
remote: arranged to update its work tree to match what you pushed in some        
remote: other way.        
remote: 
remote: To squelch this message and still keep the default behaviour, set        
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.        
To ../one/.git/
 ! [remote rejected] main -> main (branch is currently checked out)
error: failed to push some refs to '../one/.git/'
Pushing to ../one/.git/
Everything up-to-date
ok 13 - push with matching +: and negative refspec

expecting success of 5582.14 '--prefetch correctly modifies refspecs': 
	git -C one config --unset-all remote.origin.fetch &&
	git -C one config --add remote.origin.fetch ^refs/heads/bogus/ignore &&
	git -C one config --add remote.origin.fetch "refs/tags/*:refs/tags/*" &&
	git -C one config --add remote.origin.fetch "refs/heads/bogus/*:bogus/*" &&

	git tag -a -m never never-fetch-tag HEAD &&

	git branch bogus/fetched HEAD~1 &&
	git branch bogus/ignore HEAD &&

	git -C one fetch --prefetch --no-tags &&
	test_must_fail git -C one rev-parse never-fetch-tag &&
	git -C one rev-parse refs/prefetch/bogus/fetched &&
	test_must_fail git -C one rev-parse refs/prefetch/bogus/ignore &&

	# correctly handle when refspec set becomes empty
	# after removing the refs/tags/* refspec.
	git -C one config --unset-all remote.origin.fetch &&
	git -C one config --add remote.origin.fetch "refs/tags/*:refs/tags/*" &&

	git -C one fetch --prefetch --no-tags &&
	test_must_fail git -C one rev-parse never-fetch-tag &&

	# The refspec for refs that are not fully qualified
	# are filtered multiple times.
	git -C one rev-parse refs/prefetch/bogus/fetched &&
	test_must_fail git -C one rev-parse refs/prefetch/bogus/ignore

From /<<PKGBUILDDIR>>/t/trash directory.t5582-fetch-negative-refspec/.
 * branch            main          -> FETCH_HEAD
 * [new branch]      bogus/fetched -> refs/prefetch/bogus/fetched
fatal: ambiguous argument 'never-fetch-tag': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
never-fetch-tag
c5395f864a4757fc219a4848a19568f14918687f
fatal: ambiguous argument 'refs/prefetch/bogus/ignore': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/prefetch/bogus/ignore
From /<<PKGBUILDDIR>>/t/trash directory.t5582-fetch-negative-refspec/.
 * branch            main       -> FETCH_HEAD
fatal: ambiguous argument 'never-fetch-tag': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
never-fetch-tag
c5395f864a4757fc219a4848a19568f14918687f
fatal: ambiguous argument 'refs/prefetch/bogus/ignore': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/prefetch/bogus/ignore
ok 14 - --prefetch correctly modifies refspecs

expecting success of 5582.15 '--prefetch succeeds when refspec becomes empty': 
	git checkout bogus/fetched &&
	test_commit extra &&

	git -C one config --unset-all remote.origin.fetch &&
	git -C one config --unset branch.main.remote &&
	git -C one config remote.origin.fetch "+refs/tags/extra" &&
	git -C one config remote.origin.skipfetchall true &&
	git -C one config remote.origin.tagopt "--no-tags" &&

	git -C one fetch --prefetch

Switched to branch 'bogus/fetched'
[bogus/fetched 8d8169a] extra
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 extra.t
ok 15 - --prefetch succeeds when refspec becomes empty

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5602-clone-remote-exec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5602-clone-remote-exec/.git/
expecting success of 5602.1 'setup': 
	echo "#!/bin/sh" > not_ssh &&
	echo "echo \"\$*\" > not_ssh_output" >> not_ssh &&
	echo "exit 1" >> not_ssh &&
	chmod +x not_ssh

ok 1 - setup

expecting success of 5602.2 'clone calls git upload-pack unqualified with no -u option': 
	test_must_fail env GIT_SSH=./not_ssh git clone localhost:/path/to/repo junk &&
	echo "localhost git-upload-pack '/path/to/repo'" >expected &&
	test_cmp expected not_ssh_output

Cloning into 'junk'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 2 - clone calls git upload-pack unqualified with no -u option

expecting success of 5602.3 'clone calls specified git upload-pack with -u option': 
	test_must_fail env GIT_SSH=./not_ssh \
		git clone -u ./something/bin/git-upload-pack localhost:/path/to/repo junk &&
	echo "localhost ./something/bin/git-upload-pack '/path/to/repo'" >expected &&
	test_cmp expected not_ssh_output

Cloning into 'junk'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 3 - clone calls specified git upload-pack with -u option

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5603-clone-dirname.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5603-clone-dirname/.git/
expecting success of 5603.1 'setup ssh wrapper': 
	write_script "$TRASH_DIRECTORY/ssh-wrapper" <<-\EOF &&
	git upload-pack "$TRASH_DIRECTORY"
	EOF
	GIT_SSH="$TRASH_DIRECTORY/ssh-wrapper" &&
	GIT_SSH_VARIANT=ssh &&
	export GIT_SSH &&
	export GIT_SSH_VARIANT &&
	export TRASH_DIRECTORY

ok 1 - setup ssh wrapper

expecting success of 5603.2 'clone of host:foo goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 2 - clone of host:foo goes to foo (non-bare)

expecting success of 5603.3 'clone of host:foo goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare host:foo &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 3 - clone of host:foo goes to foo.git (bare)

expecting success of 5603.4 'clone of host:foo.git goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo.git &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 4 - clone of host:foo.git goes to foo (non-bare)

expecting success of 5603.5 'clone of host:foo.git goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare host:foo.git &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 5 - clone of host:foo.git goes to foo.git (bare)

expecting success of 5603.6 'clone of host:foo/.git goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo/.git &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 6 - clone of host:foo/.git goes to foo (non-bare)

expecting success of 5603.7 'clone of host:foo/.git goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare host:foo/.git &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 7 - clone of host:foo/.git goes to foo.git (bare)

expecting success of 5603.8 'clone of ssh://host/foo goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 8 - clone of ssh://host/foo goes to foo (non-bare)

expecting success of 5603.9 'clone of ssh://host/foo goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare ssh://host/foo &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 9 - clone of ssh://host/foo goes to foo.git (bare)

expecting success of 5603.10 'clone of ssh://host/foo.git goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo.git &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 10 - clone of ssh://host/foo.git goes to foo (non-bare)

expecting success of 5603.11 'clone of ssh://host/foo.git goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare ssh://host/foo.git &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 11 - clone of ssh://host/foo.git goes to foo.git (bare)

expecting success of 5603.12 'clone of ssh://host/foo/.git goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo/.git &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 12 - clone of ssh://host/foo/.git goes to foo (non-bare)

expecting success of 5603.13 'clone of ssh://host/foo/.git goes to foo.git (bare)': 
		rm -rf foo.git &&
		git clone --bare ssh://host/foo/.git &&
		test_path_is_dir foo.git
	
Cloning into bare repository 'foo.git'...
warning: You appear to have cloned an empty repository.
ok 13 - clone of ssh://host/foo/.git goes to foo.git (bare)

expecting success of 5603.14 'clone of ssh://host/foo/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 14 - clone of ssh://host/foo/ goes to foo (non-bare)

expecting success of 5603.15 'clone of ssh://host/foo/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 15 - clone of ssh://host/foo/// goes to foo (non-bare)

expecting success of 5603.16 'clone of ssh://host/foo/.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo/.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 16 - clone of ssh://host/foo/.git/ goes to foo (non-bare)

expecting success of 5603.17 'clone of ssh://host/foo.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 17 - clone of ssh://host/foo.git/ goes to foo (non-bare)

expecting success of 5603.18 'clone of ssh://host/foo.git/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo.git/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 18 - clone of ssh://host/foo.git/// goes to foo (non-bare)

expecting success of 5603.19 'clone of ssh://host/foo///.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo///.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 19 - clone of ssh://host/foo///.git/ goes to foo (non-bare)

expecting success of 5603.20 'clone of ssh://host/foo/.git/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  ssh://host/foo/.git/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 20 - clone of ssh://host/foo/.git/// goes to foo (non-bare)

expecting success of 5603.21 'clone of host:foo/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 21 - clone of host:foo/ goes to foo (non-bare)

expecting success of 5603.22 'clone of host:foo/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 22 - clone of host:foo/// goes to foo (non-bare)

expecting success of 5603.23 'clone of host:foo.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 23 - clone of host:foo.git/ goes to foo (non-bare)

expecting success of 5603.24 'clone of host:foo/.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo/.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 24 - clone of host:foo/.git/ goes to foo (non-bare)

expecting success of 5603.25 'clone of host:foo.git/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo.git/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 25 - clone of host:foo.git/// goes to foo (non-bare)

expecting success of 5603.26 'clone of host:foo///.git/ goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo///.git/ &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 26 - clone of host:foo///.git/ goes to foo (non-bare)

expecting success of 5603.27 'clone of host:foo/.git/// goes to foo (non-bare)': 
		rm -rf foo &&
		git clone  host:foo/.git/// &&
		test_path_is_dir foo
	
Cloning into 'foo'...
warning: You appear to have cloned an empty repository.
ok 27 - clone of host:foo/.git/// goes to foo (non-bare)

expecting success of 5603.28 'clone of ssh://host/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://host/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 28 - clone of ssh://host/ goes to host (non-bare)

expecting success of 5603.29 'clone of ssh://host:1234/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://host:1234/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 29 - clone of ssh://host:1234/ goes to host (non-bare)

expecting success of 5603.30 'clone of ssh://user@host/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://user@host/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 30 - clone of ssh://user@host/ goes to host (non-bare)

expecting success of 5603.31 'clone of host:/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  host:/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 31 - clone of host:/ goes to host (non-bare)

expecting success of 5603.32 'clone of ssh://user:password@host/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://user:password@host/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 32 - clone of ssh://user:password@host/ goes to host (non-bare)

expecting success of 5603.33 'clone of ssh://user:password@host:1234/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://user:password@host:1234/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 33 - clone of ssh://user:password@host:1234/ goes to host (non-bare)

expecting success of 5603.34 'clone of ssh://user:passw@rd@host:1234/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  ssh://user:passw@rd@host:1234/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 34 - clone of ssh://user:passw@rd@host:1234/ goes to host (non-bare)

expecting success of 5603.35 'clone of user@host:/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  user@host:/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 35 - clone of user@host:/ goes to host (non-bare)

expecting success of 5603.36 'clone of user:password@host:/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  user:password@host:/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 36 - clone of user:password@host:/ goes to host (non-bare)

expecting success of 5603.37 'clone of user:passw@rd@host:/ goes to host (non-bare)': 
		rm -rf host &&
		git clone  user:passw@rd@host:/ &&
		test_path_is_dir host
	
Cloning into 'host'...
warning: You appear to have cloned an empty repository.
ok 37 - clone of user:passw@rd@host:/ goes to host (non-bare)

expecting success of 5603.38 'clone of ssh://host/foo@bar goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  ssh://host/foo@bar &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 38 - clone of ssh://host/foo@bar goes to foo@bar (non-bare)

expecting success of 5603.39 'clone of ssh://host/foo@bar.git goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  ssh://host/foo@bar.git &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 39 - clone of ssh://host/foo@bar.git goes to foo@bar (non-bare)

expecting success of 5603.40 'clone of ssh://user:password@host/foo@bar goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  ssh://user:password@host/foo@bar &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 40 - clone of ssh://user:password@host/foo@bar goes to foo@bar (non-bare)

expecting success of 5603.41 'clone of ssh://user:passw@rd@host/foo@bar.git goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  ssh://user:passw@rd@host/foo@bar.git &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 41 - clone of ssh://user:passw@rd@host/foo@bar.git goes to foo@bar (non-bare)

expecting success of 5603.42 'clone of host:/foo@bar goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  host:/foo@bar &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 42 - clone of host:/foo@bar goes to foo@bar (non-bare)

expecting success of 5603.43 'clone of host:/foo@bar.git goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  host:/foo@bar.git &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 43 - clone of host:/foo@bar.git goes to foo@bar (non-bare)

expecting success of 5603.44 'clone of user:password@host:/foo@bar goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  user:password@host:/foo@bar &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 44 - clone of user:password@host:/foo@bar goes to foo@bar (non-bare)

expecting success of 5603.45 'clone of user:passw@rd@host:/foo@bar.git goes to foo@bar (non-bare)': 
		rm -rf foo@bar &&
		git clone  user:passw@rd@host:/foo@bar.git &&
		test_path_is_dir foo@bar
	
Cloning into 'foo@bar'...
warning: You appear to have cloned an empty repository.
ok 45 - clone of user:passw@rd@host:/foo@bar.git goes to foo@bar (non-bare)

expecting success of 5603.46 'clone of ssh://user:password@host/test:1234 goes to 1234 (non-bare)': 
		rm -rf 1234 &&
		git clone  ssh://user:password@host/test:1234 &&
		test_path_is_dir 1234
	
Cloning into '1234'...
warning: You appear to have cloned an empty repository.
ok 46 - clone of ssh://user:password@host/test:1234 goes to 1234 (non-bare)

expecting success of 5603.47 'clone of ssh://user:password@host/test:1234.git goes to 1234 (non-bare)': 
		rm -rf 1234 &&
		git clone  ssh://user:password@host/test:1234.git &&
		test_path_is_dir 1234
	
Cloning into '1234'...
warning: You appear to have cloned an empty repository.
ok 47 - clone of ssh://user:password@host/test:1234.git goes to 1234 (non-bare)

# passed all 47 test(s)
1..47
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5552-skipping-fetch-negotiator.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/.git/
expecting success of 5552.1 'commits with no parents are sent regardless of skip distance': 
	git init server &&
	test_commit -C server to_fetch &&

	git init client &&
	for i in $(test_seq 7)
	do
		test_commit -C client c$i || return 1
	done &&

	# We send: "c7" (skip 1) "c5" (skip 2) "c2" (skip 4). After that, since
	# "c1" has no parent, it is still sent as "have" even though it would
	# normally be skipped.
	test_config -C client fetch.negotiationalgorithm skipping &&
	trace_fetch client "$(pwd)/server" &&
	have_sent c7 c5 c2 c1 &&
	have_not_sent c6 c4 c3

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server/.git/
[master (root-commit) 92dc17d] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/client/.git/
[master (root-commit) 9e22a6c] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
[master 0d7e994] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.t
[master 85a1cf7] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.t
[master 0849982] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.t
[master 0abab02] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.t
[master 796a96a] c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c6.t
[master 9b13844] c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c7.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server
 * branch            HEAD       -> FETCH_HEAD
packet:        fetch> have 9b13844ba1d52a28bb9487107b41cce9916b74c9
packet:        fetch> have 0abab022ac7e07f16265106cf36faf7cb5d87ab3
packet:        fetch> have 0d7e994c092abbb0a21e7d243114efa5ba452b8c
packet:        fetch> have 9e22a6c1b441ee1bcd54b8da801261ba8b15eac9
ok 1 - commits with no parents are sent regardless of skip distance

expecting success of 5552.2 'when two skips collide, favor the larger one': 
	rm -rf server client trace &&
	git init server &&
	test_commit -C server to_fetch &&

	git init client &&
	for i in $(test_seq 11)
	do
		test_commit -C client c$i || return 1
	done &&
	git -C client checkout c5 &&
	test_commit -C client c5side &&

	# Before reaching c5, we send "c5side" (skip 1) and "c11" (skip 1) "c9"
	# (skip 2) "c6" (skip 4). The larger skip (skip 4) takes precedence, so
	# the next "have" sent will be "c1" (from "c6" skip 4) and not "c4"
	# (from "c5side" skip 1).
	test_config -C client fetch.negotiationalgorithm skipping &&
	trace_fetch client "$(pwd)/server" &&
	have_sent c5side c11 c9 c6 c1 &&
	have_not_sent c10 c8 c7 c5 c4 c3 c2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server/.git/
[master (root-commit) 64a1f76] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/client/.git/
[master (root-commit) b01af94] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
[master 07d5339] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.t
[master 8f2ef21] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.t
[master 9d2630c] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.t
[master d8cbe2e] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.t
[master aca6100] c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c6.t
[master fdda5e1] c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c7.t
[master f0b665a] c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c8.t
[master fcf8794] c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c9.t
[master 06eaff6] c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c10.t
[master a35b909] c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c11.t
Note: switching to 'c5'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d8cbe2e c5
[detached HEAD 226a20b] c5side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5side.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server
 * branch            HEAD       -> FETCH_HEAD
packet:        fetch> have 226a20b602656dba97810f1f2561904b0d169e41
packet:        fetch> have a35b909323ca105f538a19d99700e608a031702a
packet:        fetch> have fcf87940f63ce8a750fcddc52500d5a06d0bf5ab
packet:        fetch> have aca61006be5d197924f709130cff24d306aa5c9c
packet:        fetch> have b01af940b8f8ec3bc97ba1544ff378f632f42249
ok 2 - when two skips collide, favor the larger one

expecting success of 5552.3 'use ref advertisement to filter out commits': 
	rm -rf server client trace &&
	git init server &&
	test_commit -C server c1 &&
	test_commit -C server c2 &&
	test_commit -C server c3 &&
	git -C server tag -d c1 c2 c3 &&

	git clone server client &&
	test_commit -C client c4 &&
	test_commit -C client c5 &&
	git -C client checkout c4^^ &&
	test_commit -C client c2side &&

	git -C server checkout --orphan anotherbranch &&
	test_commit -C server to_fetch &&

	# The server advertising "c3" (as "refs/heads/main") means that we do
	# not need to send any ancestors of "c3", but we still need to send "c3"
	# itself.
	test_config -C client fetch.negotiationalgorithm skipping &&

	# The ref advertisement itself is filtered when protocol v2 is used, so
	# use v0.
	(
		GIT_TEST_PROTOCOL_VERSION=0 &&
		export GIT_TEST_PROTOCOL_VERSION &&
		trace_fetch client origin to_fetch
	) &&
	have_sent c5 c4^ c2side &&
	have_not_sent c4 c4^^ c4^^^

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server/.git/
[master (root-commit) 70cad9f] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
[master 550345b] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.t
[master 7b877f2] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.t
Deleted tag 'c1' (was 70cad9f)
Deleted tag 'c2' (was 550345b)
Deleted tag 'c3' (was 7b877f2)
Cloning into 'client'...
done.
[master 11e5ac3] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.t
[master 09c7c89] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.t
Note: switching to 'c4^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 550345b c2
[detached HEAD a0be95f] c2side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2side.t
Switched to a new branch 'anotherbranch'
[anotherbranch (root-commit) be4fa7e] to_fetch
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 c1.t
 create mode 100644 c2.t
 create mode 100644 c3.t
 create mode 100644 to_fetch.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server
 * tag               to_fetch   -> FETCH_HEAD
packet:        fetch> have 09c7c89015589bcd5004089c52ec8a46bb57947a
packet:        fetch> have 7b877f2c4431642e5edd79513ff50bec7a3885fc
packet:        fetch> have a0be95f43f750e95eea1ea9ed85043b5d9193af5
ok 3 - use ref advertisement to filter out commits

expecting success of 5552.4 'handle clock skew': 
	rm -rf server client trace &&
	git init server &&
	test_commit -C server to_fetch &&

	git init client &&

	# 2 regular commits
	test_tick=2000000000 &&
	test_commit -C client c1 &&
	test_commit -C client c2 &&

	# 4 old commits
	test_tick=1000000000 &&
	git -C client checkout c1 &&
	test_commit -C client old1 &&
	test_commit -C client old2 &&
	test_commit -C client old3 &&
	test_commit -C client old4 &&

	# "c2" and "c1" are popped first, then "old4" to "old1". "old1" would
	# normally be skipped, but is treated as a commit without a parent here
	# and sent, because (due to clock skew) its only parent has already been
	# popped off the priority queue.
	test_config -C client fetch.negotiationalgorithm skipping &&
	trace_fetch client "$(pwd)/server" &&
	have_sent c2 c1 old4 old2 old1 &&
	have_not_sent old3

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server/.git/
[master (root-commit) ff85695] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/client/.git/
[master (root-commit) dc824fa] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.t
[master 9ab4692] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.t
Note: switching to 'c1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dc824fa c1
[detached HEAD e9a2c09] old1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old1.t
[detached HEAD 41bd8dc] old2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old2.t
[detached HEAD 4ff0db5] old3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old3.t
[detached HEAD caef059] old4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 old4.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server
 * branch            HEAD       -> FETCH_HEAD
packet:        fetch> have 9ab46928dc282aa09f4dbf96893a252e058e7e8e
packet:        fetch> have dc824fafb05f3229aedf1f320bbe572e35364dfe
packet:        fetch> have caef059de69917b9119176a11b88afcef769331d
packet:        fetch> have 41bd8dc092ee110ba80e350a346ec507ab2e42a0
packet:        fetch> have e9a2c092a8e911567a377c881a7f6031e7f892ea
ok 4 - handle clock skew

expecting success of 5552.5 'do not send "have" with ancestors of commits that server ACKed': 
	rm -rf server client trace &&
	git init server &&
	test_commit -C server to_fetch &&

	git init client &&
	for i in $(test_seq 8)
	do
		git -C client checkout --orphan b$i &&
		test_commit -C client b$i.c0 || return 1
	done &&
	for j in $(test_seq 19)
	do
		for i in $(test_seq 8)
		do
			git -C client checkout b$i &&
			test_commit -C client b$i.c$j || return 1
		done
	done &&

	# Copy this branch over to the server and add a commit on it so that it
	# is reachable but not advertised.
	git -C server fetch --no-tags "$(pwd)/client" b1:refs/heads/b1 &&
	git -C server checkout b1 &&
	test_commit -C server commit-on-b1 &&

	test_config -C client fetch.negotiationalgorithm skipping &&

	# NEEDSWORK: The number of "have"s sent depends on whether the transport
	# is stateful. If the overspecification of the result were reduced, this
	# test could be used for both stateful and stateless transports.
	(
		# Force protocol v0, in which local transport is stateful (in
		# protocol v2 it is stateless).
		GIT_TEST_PROTOCOL_VERSION=0 &&
		export GIT_TEST_PROTOCOL_VERSION &&
		trace_fetch client "$(pwd)/server" to_fetch
	) &&
	grep "  fetch" trace &&

	# fetch-pack sends 2 requests each containing 16 "have" lines before
	# processing the first response. In these 2 requests, 4 commits from
	# each branch are sent. Just check the first branch.
	have_sent b1.c19 b1.c17 b1.c14 b1.c9 &&
	have_not_sent b1.c18 b1.c16 b1.c15 b1.c13 b1.c12 b1.c11 b1.c10 &&

	# While fetch-pack is processing the first response, it should read that
	# the server ACKs b1.c19 and b1.c17.
	grep "fetch< ACK $(git -C client rev-parse b1.c19) common" trace &&
	grep "fetch< ACK $(git -C client rev-parse b1.c17) common" trace &&

	# fetch-pack should thus not send any more commits in the b1 branch, but
	# should still send the others (in this test, just check b2).
	for i in $(test_seq 0 8)
	do
		have_not_sent b1.c$i || return 1
	done &&
	have_sent b2.c1 b2.c0

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server/.git/
[master (root-commit) 184bd23] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/client/.git/
Switched to a new branch 'b1'
[b1 (root-commit) f66d2ca] b1.c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c0.t
Switched to a new branch 'b2'
[b2 (root-commit) c402344] b2.c0
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
Switched to a new branch 'b3'
[b3 (root-commit) 8252af3] b3.c0
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
Switched to a new branch 'b4'
[b4 (root-commit) 8bffdf8] b4.c0
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
 create mode 100644 b4.c0.t
Switched to a new branch 'b5'
[b5 (root-commit) ece05e8] b5.c0
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
 create mode 100644 b4.c0.t
 create mode 100644 b5.c0.t
Switched to a new branch 'b6'
[b6 (root-commit) ca6bc33] b6.c0
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
 create mode 100644 b4.c0.t
 create mode 100644 b5.c0.t
 create mode 100644 b6.c0.t
Switched to a new branch 'b7'
[b7 (root-commit) 063e256] b7.c0
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
 create mode 100644 b4.c0.t
 create mode 100644 b5.c0.t
 create mode 100644 b6.c0.t
 create mode 100644 b7.c0.t
Switched to a new branch 'b8'
[b8 (root-commit) 9f605c2] b8.c0
 Author: A U Thor <author@example.com>
 8 files changed, 8 insertions(+)
 create mode 100644 b1.c0.t
 create mode 100644 b2.c0.t
 create mode 100644 b3.c0.t
 create mode 100644 b4.c0.t
 create mode 100644 b5.c0.t
 create mode 100644 b6.c0.t
 create mode 100644 b7.c0.t
 create mode 100644 b8.c0.t
Switched to branch 'b1'
[b1 3f095eb] b1.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c1.t
Switched to branch 'b2'
[b2 89ecd55] b2.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c1.t
Switched to branch 'b3'
[b3 6592e0b] b3.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c1.t
Switched to branch 'b4'
[b4 4426873] b4.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c1.t
Switched to branch 'b5'
[b5 dbb467e] b5.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c1.t
Switched to branch 'b6'
[b6 6b911cf] b6.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c1.t
Switched to branch 'b7'
[b7 2414896] b7.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c1.t
Switched to branch 'b8'
[b8 768bfc5] b8.c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c1.t
Switched to branch 'b1'
[b1 e885a48] b1.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c2.t
Switched to branch 'b2'
[b2 7c818a7] b2.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c2.t
Switched to branch 'b3'
[b3 871f49f] b3.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c2.t
Switched to branch 'b4'
[b4 72680bb] b4.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c2.t
Switched to branch 'b5'
[b5 b4557a1] b5.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c2.t
Switched to branch 'b6'
[b6 6ca2925] b6.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c2.t
Switched to branch 'b7'
[b7 7b661b8] b7.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c2.t
Switched to branch 'b8'
[b8 2ecc389] b8.c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c2.t
Switched to branch 'b1'
[b1 5c8f104] b1.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c3.t
Switched to branch 'b2'
[b2 4a25303] b2.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c3.t
Switched to branch 'b3'
[b3 53d0287] b3.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c3.t
Switched to branch 'b4'
[b4 6a982e3] b4.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c3.t
Switched to branch 'b5'
[b5 beacf7c] b5.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c3.t
Switched to branch 'b6'
[b6 645ec77] b6.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c3.t
Switched to branch 'b7'
[b7 c245fa6] b7.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c3.t
Switched to branch 'b8'
[b8 e7e7720] b8.c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c3.t
Switched to branch 'b1'
[b1 42fd38e] b1.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c4.t
Switched to branch 'b2'
[b2 b2c5e5b] b2.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c4.t
Switched to branch 'b3'
[b3 f0835ff] b3.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c4.t
Switched to branch 'b4'
[b4 b60c575] b4.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c4.t
Switched to branch 'b5'
[b5 4981e16] b5.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c4.t
Switched to branch 'b6'
[b6 3b4c6b7] b6.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c4.t
Switched to branch 'b7'
[b7 500474e] b7.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c4.t
Switched to branch 'b8'
[b8 54ca498] b8.c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c4.t
Switched to branch 'b1'
[b1 3accc66] b1.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c5.t
Switched to branch 'b2'
[b2 82dee3b] b2.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c5.t
Switched to branch 'b3'
[b3 be215b2] b3.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c5.t
Switched to branch 'b4'
[b4 dabc132] b4.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c5.t
Switched to branch 'b5'
[b5 8561b1c] b5.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c5.t
Switched to branch 'b6'
[b6 318c581] b6.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c5.t
Switched to branch 'b7'
[b7 92d192b] b7.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c5.t
Switched to branch 'b8'
[b8 ea98a5a] b8.c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c5.t
Switched to branch 'b1'
[b1 4f95974] b1.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c6.t
Switched to branch 'b2'
[b2 c6b69d0] b2.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c6.t
Switched to branch 'b3'
[b3 0c5d942] b3.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c6.t
Switched to branch 'b4'
[b4 46bd8d8] b4.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c6.t
Switched to branch 'b5'
[b5 3eb11ae] b5.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c6.t
Switched to branch 'b6'
[b6 77cb153] b6.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c6.t
Switched to branch 'b7'
[b7 1fa72fc] b7.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c6.t
Switched to branch 'b8'
[b8 ddd2755] b8.c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c6.t
Switched to branch 'b1'
[b1 318aa43] b1.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c7.t
Switched to branch 'b2'
[b2 5e7b2f0] b2.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c7.t
Switched to branch 'b3'
[b3 9bf9a83] b3.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c7.t
Switched to branch 'b4'
[b4 794bc8f] b4.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c7.t
Switched to branch 'b5'
[b5 69fe812] b5.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c7.t
Switched to branch 'b6'
[b6 97ae47d] b6.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c7.t
Switched to branch 'b7'
[b7 403ab1f] b7.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c7.t
Switched to branch 'b8'
[b8 cff31fa] b8.c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c7.t
Switched to branch 'b1'
[b1 eccb3a8] b1.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c8.t
Switched to branch 'b2'
[b2 6e4ea02] b2.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c8.t
Switched to branch 'b3'
[b3 37e9829] b3.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c8.t
Switched to branch 'b4'
[b4 9ff00cf] b4.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c8.t
Switched to branch 'b5'
[b5 a42de58] b5.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c8.t
Switched to branch 'b6'
[b6 8fce737] b6.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c8.t
Switched to branch 'b7'
[b7 8a6b38a] b7.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c8.t
Switched to branch 'b8'
[b8 4e6a712] b8.c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c8.t
Switched to branch 'b1'
[b1 b76868e] b1.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c9.t
Switched to branch 'b2'
[b2 770eae6] b2.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c9.t
Switched to branch 'b3'
[b3 83458c8] b3.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c9.t
Switched to branch 'b4'
[b4 49c8cda] b4.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c9.t
Switched to branch 'b5'
[b5 0ed227c] b5.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c9.t
Switched to branch 'b6'
[b6 91e9203] b6.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c9.t
Switched to branch 'b7'
[b7 5f1aa7f] b7.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c9.t
Switched to branch 'b8'
[b8 e4190b4] b8.c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c9.t
Switched to branch 'b1'
[b1 431681a] b1.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c10.t
Switched to branch 'b2'
[b2 cdc2fe7] b2.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c10.t
Switched to branch 'b3'
[b3 04d742f] b3.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c10.t
Switched to branch 'b4'
[b4 a03b044] b4.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c10.t
Switched to branch 'b5'
[b5 1636ce4] b5.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c10.t
Switched to branch 'b6'
[b6 5636f71] b6.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c10.t
Switched to branch 'b7'
[b7 a986247] b7.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c10.t
Switched to branch 'b8'
[b8 3c735f4] b8.c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c10.t
Switched to branch 'b1'
[b1 d2b5e73] b1.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c11.t
Switched to branch 'b2'
[b2 f9d95c1] b2.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c11.t
Switched to branch 'b3'
[b3 62a89df] b3.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c11.t
Switched to branch 'b4'
[b4 ad26868] b4.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c11.t
Switched to branch 'b5'
[b5 5a4dfb9] b5.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c11.t
Switched to branch 'b6'
[b6 dc8930a] b6.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c11.t
Switched to branch 'b7'
[b7 3b76e60] b7.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c11.t
Switched to branch 'b8'
[b8 2ba6a3d] b8.c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c11.t
Switched to branch 'b1'
[b1 b8e826f] b1.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c12.t
Switched to branch 'b2'
[b2 4234dfd] b2.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c12.t
Switched to branch 'b3'
[b3 342bc7b] b3.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c12.t
Switched to branch 'b4'
[b4 108c1a4] b4.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c12.t
Switched to branch 'b5'
[b5 9a28ede] b5.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c12.t
Switched to branch 'b6'
[b6 3f5ace9] b6.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c12.t
Switched to branch 'b7'
[b7 93c4bac] b7.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c12.t
Switched to branch 'b8'
[b8 baa7561] b8.c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c12.t
Switched to branch 'b1'
[b1 95bc4bb] b1.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c13.t
Switched to branch 'b2'
[b2 8489a1d] b2.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c13.t
Switched to branch 'b3'
[b3 64d34a0] b3.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c13.t
Switched to branch 'b4'
[b4 bac01a4] b4.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c13.t
Switched to branch 'b5'
[b5 e86f129] b5.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c13.t
Switched to branch 'b6'
[b6 699548c] b6.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c13.t
Switched to branch 'b7'
[b7 103bf10] b7.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c13.t
Switched to branch 'b8'
[b8 c26a4fc] b8.c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c13.t
Switched to branch 'b1'
[b1 b89f649] b1.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c14.t
Switched to branch 'b2'
[b2 fe51ff5] b2.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c14.t
Switched to branch 'b3'
[b3 fc1ea38] b3.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c14.t
Switched to branch 'b4'
[b4 2b6a82d] b4.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c14.t
Switched to branch 'b5'
[b5 bd4af3f] b5.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c14.t
Switched to branch 'b6'
[b6 15633e6] b6.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c14.t
Switched to branch 'b7'
[b7 b2e9b68] b7.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c14.t
Switched to branch 'b8'
[b8 a1d75da] b8.c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c14.t
Switched to branch 'b1'
[b1 5e97e7c] b1.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c15.t
Switched to branch 'b2'
[b2 1c61ed4] b2.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c15.t
Switched to branch 'b3'
[b3 19afa9a] b3.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c15.t
Switched to branch 'b4'
[b4 9c413e1] b4.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c15.t
Switched to branch 'b5'
[b5 d014f6a] b5.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c15.t
Switched to branch 'b6'
[b6 f8c4313] b6.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c15.t
Switched to branch 'b7'
[b7 682d1c2] b7.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c15.t
Switched to branch 'b8'
[b8 d06805d] b8.c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c15.t
Switched to branch 'b1'
[b1 6280c6c] b1.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c16.t
Switched to branch 'b2'
[b2 54730b4] b2.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c16.t
Switched to branch 'b3'
[b3 450e72c] b3.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c16.t
Switched to branch 'b4'
[b4 1d556dd] b4.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c16.t
Switched to branch 'b5'
[b5 30d8e5b] b5.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c16.t
Switched to branch 'b6'
[b6 7b79d49] b6.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c16.t
Switched to branch 'b7'
[b7 15da705] b7.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c16.t
Switched to branch 'b8'
[b8 83492f9] b8.c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c16.t
Switched to branch 'b1'
[b1 17639a0] b1.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c17.t
Switched to branch 'b2'
[b2 0e8fe67] b2.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c17.t
Switched to branch 'b3'
[b3 a33f3b9] b3.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c17.t
Switched to branch 'b4'
[b4 bf65a8f] b4.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c17.t
Switched to branch 'b5'
[b5 d9ed2b1] b5.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c17.t
Switched to branch 'b6'
[b6 48b167c] b6.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c17.t
Switched to branch 'b7'
[b7 7f5656e] b7.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c17.t
Switched to branch 'b8'
[b8 e7bb01c] b8.c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c17.t
Switched to branch 'b1'
[b1 ea1e457] b1.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c18.t
Switched to branch 'b2'
[b2 611613a] b2.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c18.t
Switched to branch 'b3'
[b3 7497b4a] b3.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c18.t
Switched to branch 'b4'
[b4 b5d9485] b4.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c18.t
Switched to branch 'b5'
[b5 d9fd7d4] b5.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c18.t
Switched to branch 'b6'
[b6 f5d257d] b6.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c18.t
Switched to branch 'b7'
[b7 ca45808] b7.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c18.t
Switched to branch 'b8'
[b8 76929ae] b8.c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c18.t
Switched to branch 'b1'
[b1 e3496f0] b1.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b1.c19.t
Switched to branch 'b2'
[b2 124ff4f] b2.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b2.c19.t
Switched to branch 'b3'
[b3 155cfe5] b3.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b3.c19.t
Switched to branch 'b4'
[b4 29f3488] b4.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b4.c19.t
Switched to branch 'b5'
[b5 b722512] b5.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b5.c19.t
Switched to branch 'b6'
[b6 eb0ead1] b6.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b6.c19.t
Switched to branch 'b7'
[b7 334d40a] b7.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b7.c19.t
Switched to branch 'b8'
[b8 f65fc9b] b8.c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b8.c19.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/client
 * [new branch]      b1         -> b1
Switched to branch 'b1'
[b1 4fc6b0b] commit-on-b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-on-b1.t
From /<<PKGBUILDDIR>>/t/trash directory.t5552-skipping-fetch-negotiator/server
 * tag               to_fetch   -> FETCH_HEAD
packet:        fetch< 4fc6b0b77cfa2370eb0c417e5e26e40a980884fe HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/b1 object-format=sha1 agent=git/2.39.0
packet:        fetch< 4fc6b0b77cfa2370eb0c417e5e26e40a980884fe refs/heads/b1
packet:        fetch< 184bd23dc533e1e63153e7e181411bd29acca918 refs/heads/master
packet:        fetch< 4fc6b0b77cfa2370eb0c417e5e26e40a980884fe refs/tags/commit-on-b1
packet:        fetch< 184bd23dc533e1e63153e7e181411bd29acca918 refs/tags/to_fetch
packet:        fetch< 0000
packet:        fetch> want 184bd23dc533e1e63153e7e181411bd29acca918 multi_ack_detailed side-band-64k thin-pack no-progress ofs-delta deepen-since deepen-not agent=git/2.39.0
packet:        fetch> 0000
packet:        fetch> have f65fc9b4d5c1cb76494a7f8df0230d8d29a33e67
packet:        fetch> have 334d40a157dec5d93023976c30cd22b24bdc279a
packet:        fetch> have eb0ead13281c18fd207283425897500ff37b58a0
packet:        fetch> have b722512541a1c484f0269dbb06e0ebe809126be7
packet:        fetch> have 29f348829e91209e05b0f7277512e3815fd33d66
packet:        fetch> have 155cfe5fba134b2a3f290da550e227776793d1c5
packet:        fetch> have 124ff4f891c3955a682247533ec290603f9df504
packet:        fetch> have e3496f08debed7528bd7e4c4a12b71d1a99d697f
packet:        fetch> have e7bb01cb25bebd0341c9d62f4c7e929a99b6ed4b
packet:        fetch> have 7f5656e94770d527d4f909fd5e2ea274ec63177a
packet:        fetch> have 48b167c8c363708a36d20637466781d435df923e
packet:        fetch> have d9ed2b16325a06a2cc5061533b4935c526e4e64d
packet:        fetch> have bf65a8f944c8cdbf9d31b2f8656b07b1f3b7daf4
packet:        fetch> have a33f3b91e50fa0ce528590623af68f075a7d7f13
packet:        fetch> have 0e8fe67b3355336aecfc08fdd26397774c64247a
packet:        fetch> have 17639a004fe8511fe1de57dd9ddabf2ee0de902d
packet:        fetch> 0000
packet:        fetch> have a1d75daa2f482f89171f092778da506803e54531
packet:        fetch> have b2e9b68d2650b77283421888be8a950c18bab29d
packet:        fetch> have 15633e66d344ed5bf98eebac690942c9cb93d182
packet:        fetch> have bd4af3f8e2999e978ad2b792b1815f78f91a81d8
packet:        fetch> have 2b6a82df34178b75c650082ccc76cab0bc2d2537
packet:        fetch> have fc1ea38ba267d192a042f8c6efb76b4b37a3cd59
packet:        fetch> have fe51ff519f033bfe0b49a646f58762e393bdbd1d
packet:        fetch> have b89f6499d7cee40ef422edb15433a10f82de0206
packet:        fetch> have e4190b433240834c895347214d29426a094f2fe2
packet:        fetch> have 5f1aa7f016defcf74e5e1d4991342987c9d4b447
packet:        fetch> have 91e920349cc8fc80c282e69da054c2bfa3346e03
packet:        fetch> have 0ed227c5105634ad47b6e4351cb4933656eb6c83
packet:        fetch> have 49c8cda191a8dc56e3e99fe3207882c2409ecab9
packet:        fetch> have 83458c83eb7fd3f865319fc6c6436caa2268401c
packet:        fetch> have 770eae6e9055970583428d6c1ac289cec76525a9
packet:        fetch> have b76868e654ce45adb9e06f638e48a72556843361
packet:        fetch> 0000
packet:        fetch< ACK e3496f08debed7528bd7e4c4a12b71d1a99d697f common
packet:        fetch< ACK 17639a004fe8511fe1de57dd9ddabf2ee0de902d common
packet:        fetch< NAK
packet:        fetch> have 768bfc586d66909db8c6f75f809ecf54f353d2cb
packet:        fetch> have 2414896148937fcc3df5ca53e846ebd2481945b3
packet:        fetch> have 6b911cfac437ae1c8a0db544afef1c4dba87d26d
packet:        fetch> have dbb467e9a5ddb4b8148e8b7f214ceed3c4e0e71a
packet:        fetch> have 44268733d7e0371a0129a3776faa39beee58d3fe
packet:        fetch> have 6592e0bbee4f972ca359f25206af69a9962aac1c
packet:        fetch> have 89ecd55a5a20b633c82b7fbf2491660b45b37f5f
packet:        fetch> have 9f605c21b07f8dd321aa26907043464e8a8eb40d
packet:        fetch> have 063e25688044f8baf7ce6ce7bfb87ced658844c8
packet:        fetch> have ca6bc330e163fe097fd075d037ceacbdafee00f3
packet:        fetch> have ece05e896e3c6aaa553cb541f15203bcadc24468
packet:        fetch> have 8bffdf81ad07c0f1bb4beaab6f4db452cc745dd6
packet:        fetch> have 8252af32268388cf5b0de476a87325cfff99c560
packet:        fetch> have c402344c412528d24d8381cf5cc66e6c5df54169
packet:        fetch> done
packet:        fetch< ACK b89f6499d7cee40ef422edb15433a10f82de0206 common
packet:        fetch< ACK b76868e654ce45adb9e06f638e48a72556843361 common
packet:        fetch< NAK
packet:        fetch< ACK b76868e654ce45adb9e06f638e48a72556843361
packet:        fetch> have e3496f08debed7528bd7e4c4a12b71d1a99d697f
packet:        fetch> have 17639a004fe8511fe1de57dd9ddabf2ee0de902d
packet:        fetch> have b89f6499d7cee40ef422edb15433a10f82de0206
packet:        fetch> have b76868e654ce45adb9e06f638e48a72556843361
packet:        fetch< ACK e3496f08debed7528bd7e4c4a12b71d1a99d697f common
packet:        fetch< ACK 17639a004fe8511fe1de57dd9ddabf2ee0de902d common
packet:        fetch> have 89ecd55a5a20b633c82b7fbf2491660b45b37f5f
packet:        fetch> have c402344c412528d24d8381cf5cc66e6c5df54169
ok 5 - do not send "have" with ancestors of commits that server ACKed

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5604-clone-reference.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/.git/
expecting success of 5604.1 'preparing first repository': 
	test_create_repo A &&
	commit_in A file1

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/A/.git/
[main (root-commit) 1e119b0] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 1 - preparing first repository

expecting success of 5604.2 'preparing second repository': 
	git clone A B &&
	commit_in B file2 &&
	git -C B repack -ad &&
	git -C B prune

Cloning into 'B'...
done.
[main 4404391] file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 2 - preparing second repository

expecting success of 5604.3 'cloning with reference (-l -s)': 
	git clone -l -s --reference B A C

Cloning into 'C'...
done.
ok 3 - cloning with reference (-l -s)

expecting success of 5604.4 'existence of info/alternates': 
	test_line_count = 2 C/.git/objects/info/alternates

ok 4 - existence of info/alternates

expecting success of 5604.5 'pulling from reference': 
	git -C C pull ../B main

From ../B
 * branch            main       -> FETCH_HEAD
Updating 1e119b0..4404391
Fast-forward
 file2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 5 - pulling from reference

expecting success of 5604.6 'that reference gets used': 
	test_objcount C 0

ok 6 - that reference gets used

expecting success of 5604.7 'cloning with reference (no -l -s)': 
	GIT_TRACE_PACKET=$U.D git clone --reference B "file://$(pwd)/A" D

Cloning into 'D'...
ok 7 - cloning with reference (no -l -s)

expecting success of 5604.8 'fetched no objects': 
	test -s "$U.D" &&
	! grep " want" "$U.D"

ok 8 - fetched no objects

expecting success of 5604.9 'existence of info/alternates': 
	test_line_count = 1 D/.git/objects/info/alternates

ok 9 - existence of info/alternates

expecting success of 5604.10 'pulling from reference': 
	git -C D pull ../B main

From ../B
 * branch            main       -> FETCH_HEAD
Updating 1e119b0..4404391
Fast-forward
 file2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 10 - pulling from reference

expecting success of 5604.11 'that reference gets used': 
	test_objcount D 0

ok 11 - that reference gets used

expecting success of 5604.12 'updating origin': 
	commit_in A file3 &&
	git -C A repack -ad &&
	git -C A prune

[main b518c43] file3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 12 - updating origin

expecting success of 5604.13 'pulling changes from origin': 
	git -C C pull --no-rebase origin

From /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/A
   1e119b0..b518c43  main       -> origin/main
Merge made by the 'ort' strategy.
 file3 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 13 - pulling changes from origin

expecting success of 5604.14 'that alternate to origin gets used': 
	test_objcount C 2

ok 14 - that alternate to origin gets used

expecting success of 5604.15 'pulling changes from origin': 
	git -C D pull --no-rebase origin

From file:///<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/A
   1e119b0..b518c43  main       -> origin/main
Merge made by the 'ort' strategy.
 file3 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 15 - pulling changes from origin

expecting success of 5604.16 'check objects expected to exist locally': 
	test_objcount D 5

ok 16 - check objects expected to exist locally

expecting success of 5604.17 'preparing alternate repository #1': 
	test_create_repo F &&
	commit_in F file1

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/F/.git/
[main (root-commit) 1e119b0] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 17 - preparing alternate repository #1

expecting success of 5604.18 'cloning alternate repo #2 and adding changes to repo #1': 
	git clone F G &&
	commit_in F file2

Cloning into 'G'...
done.
[main 4404391] file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 18 - cloning alternate repo #2 and adding changes to repo #1

expecting success of 5604.19 'cloning alternate repo #1, using #2 as reference': 
	git clone --reference G F H

Cloning into 'H'...
done.
ok 19 - cloning alternate repo #1, using #2 as reference

expecting success of 5604.20 'cloning with reference being subset of source (-l -s)': 
	git clone -l -s --reference A B E

Cloning into 'E'...
done.
ok 20 - cloning with reference being subset of source (-l -s)

expecting success of 5604.21 'cloning with multiple references drops duplicates': 
	git clone -s --reference B --reference A --reference B A dups &&
	test_line_count = 2 dups/.git/objects/info/alternates

Cloning into 'dups'...
done.
ok 21 - cloning with multiple references drops duplicates

expecting success of 5604.22 'clone with reference from a tagged repository': 
	(
		cd A && git tag -a -m tagged HEAD
	) &&
	git clone --reference=A A I

Cloning into 'I'...
done.
ok 22 - clone with reference from a tagged repository

expecting success of 5604.23 'prepare branched repository': 
	git clone A J &&
	(
		cd J &&
		git checkout -b other main^ &&
		echo other >otherfile &&
		git add otherfile &&
		git commit -m other &&
		git checkout main
	)

Cloning into 'J'...
done.
Switched to a new branch 'other'
warning: refname 'HEAD' is ambiguous.
warning: refname 'HEAD' is ambiguous.
warning: refname 'HEAD' is ambiguous.
[other e812df9] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 otherfile
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
ok 23 - prepare branched repository

expecting success of 5604.24 'fetch with incomplete alternates': 
	git init K &&
	echo "$base_dir/A/.git/objects" >K/.git/objects/info/alternates &&
	(
		cd K &&
		git remote add J "file://$base_dir/J" &&
		GIT_TRACE_PACKET=$U.K git fetch J
	) &&
	main_object=$(cd A && git for-each-ref --format="%(objectname)" refs/heads/main) &&
	test -s "$U.K" &&
	! grep " want $main_object" "$U.K" &&
	tag_object=$(cd A && git for-each-ref --format="%(objectname)" refs/tags/HEAD) &&
	! grep " want $tag_object" "$U.K"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/K/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/J
 * [new branch]      main       -> J/main
 * [new branch]      other      -> J/other
 * [new tag]         HEAD       -> HEAD
ok 24 - fetch with incomplete alternates

expecting success of 5604.25 'clone using repo with gitfile as a reference': 
	git clone --separate-git-dir=L A M &&
	git clone --reference=M A N &&
	echo "$base_dir/L/objects" >expected &&
	test_cmp expected "$base_dir/N/.git/objects/info/alternates"

Cloning into 'M'...
done.
Cloning into 'N'...
done.
ok 25 - clone using repo with gitfile as a reference

expecting success of 5604.26 'clone using repo pointed at by gitfile as reference': 
	git clone --reference=M/.git A O &&
	echo "$base_dir/L/objects" >expected &&
	test_cmp expected "$base_dir/O/.git/objects/info/alternates"

Cloning into 'O'...
done.
ok 26 - clone using repo pointed at by gitfile as reference

expecting success of 5604.27 'clone and dissociate from reference': 
	git init P &&
	(
		cd P && test_commit one
	) &&
	git clone P Q &&
	(
		cd Q && test_commit two
	) &&
	git clone --no-local --reference=P Q R &&
	git clone --no-local --reference=P --dissociate Q S &&
	# removing the reference P would corrupt R but not S
	rm -fr P &&
	test_must_fail git -C R fsck &&
	git -C S fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/P/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'Q'...
done.
[main 51ba0d2] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'R'...
Cloning into 'S'...
error: unable to normalize alternate object path: /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/P/.git/objects
error: refs/tags/one: invalid sha1 pointer d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
broken link from  commit 51ba0d2036f9bf23b2826a3b2dcc450c417a1bc5
              to  commit d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
missing blob 5626abf0f72e58d7a153368ba57db4c673c0e171
missing commit d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
error: unable to normalize alternate object path: /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/P/.git/objects
ok 27 - clone and dissociate from reference

expecting success of 5604.28 'clone, dissociate from partial reference and repack': 
	rm -fr P Q R &&
	git init P &&
	(
		cd P &&
		test_commit one &&
		git repack &&
		test_commit two &&
		git repack
	) &&
	git clone --bare P Q &&
	(
		cd P &&
		git checkout -b second &&
		test_commit three &&
		git repack
	) &&
	git clone --bare --dissociate --reference=P Q R &&
	ls R/objects/pack/*.pack >packs.txt &&
	test_line_count = 1 packs.txt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/P/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into bare repository 'Q'...
done.
Switched to a new branch 'second'
[second 916c3f9] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Cloning into bare repository 'R'...
done.
ok 28 - clone, dissociate from partial reference and repack

expecting success of 5604.29 'clone, dissociate from alternates': 
	rm -fr A B C &&
	test_create_repo A &&
	commit_in A file1 &&
	git clone --reference=A A B &&
	test_line_count = 1 B/.git/objects/info/alternates &&
	git clone --local --dissociate B C &&
	! test -f C/.git/objects/info/alternates &&
	( cd C && git fsck )

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/A/.git/
[main (root-commit) 1e119b0] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Cloning into 'B'...
done.
Cloning into 'C'...
done.
ok 29 - clone, dissociate from alternates

expecting success of 5604.30 'setup repo with garbage in objects/*': 
	git init S &&
	(
		cd S &&
		test_commit A &&

		cd .git/objects &&
		>.some-hidden-file &&
		>some-file &&
		mkdir .some-hidden-dir &&
		>.some-hidden-dir/some-file &&
		>.some-hidden-dir/.some-dot-file &&
		mkdir some-dir &&
		>some-dir/some-file &&
		>some-dir/.some-dot-file
	)

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/S/.git/
[main 09b350a] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
ok 30 - setup repo with garbage in objects/*

expecting success of 5604.31 'clone a repo with garbage in objects/*': 
	for option in --local --no-hardlinks --shared --dissociate
	do
		git clone $option S S$option || return 1 &&
		git -C S$option fsck || return 1
	done &&
	find S-* -name "*some*" | sort >actual &&
	cat >expected <<-EOF &&
	S--dissociate/.git/objects/.some-hidden-dir
	S--dissociate/.git/objects/.some-hidden-dir/.some-dot-file
	S--dissociate/.git/objects/.some-hidden-dir/some-file
	S--dissociate/.git/objects/.some-hidden-file
	S--dissociate/.git/objects/some-dir
	S--dissociate/.git/objects/some-dir/.some-dot-file
	S--dissociate/.git/objects/some-dir/some-file
	S--dissociate/.git/objects/some-file
	S--local/.git/objects/.some-hidden-dir
	S--local/.git/objects/.some-hidden-dir/.some-dot-file
	S--local/.git/objects/.some-hidden-dir/some-file
	S--local/.git/objects/.some-hidden-file
	S--local/.git/objects/some-dir
	S--local/.git/objects/some-dir/.some-dot-file
	S--local/.git/objects/some-dir/some-file
	S--local/.git/objects/some-file
	S--no-hardlinks/.git/objects/.some-hidden-dir
	S--no-hardlinks/.git/objects/.some-hidden-dir/.some-dot-file
	S--no-hardlinks/.git/objects/.some-hidden-dir/some-file
	S--no-hardlinks/.git/objects/.some-hidden-file
	S--no-hardlinks/.git/objects/some-dir
	S--no-hardlinks/.git/objects/some-dir/.some-dot-file
	S--no-hardlinks/.git/objects/some-dir/some-file
	S--no-hardlinks/.git/objects/some-file
	EOF
	test_cmp expected actual

Cloning into 'S--local'...
done.
Cloning into 'S--no-hardlinks'...
done.
Cloning into 'S--shared'...
done.
Cloning into 'S--dissociate'...
done.
ok 31 - clone a repo with garbage in objects/*

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 5604.32 'setup repo with manually symlinked or unknown files at objects/': 
	git init T &&
	(
		cd T &&
		git config gc.auto 0 &&
		test_commit A &&
		git gc &&
		test_commit B &&

		cd .git/objects &&
		mv pack packs &&
		ln -s packs pack &&
		find ?? -type d >loose-dirs &&
		last_loose=$(tail -n 1 loose-dirs) &&
		mv $last_loose a-loose-dir &&
		ln -s a-loose-dir $last_loose &&
		first_loose=$(head -n 1 loose-dirs) &&
		rm -f loose-dirs &&

		cd $first_loose &&
		obj=$(ls *) &&
		mv $obj ../an-object &&
		ln -s ../an-object $obj &&

		cd ../ &&
		echo unknown_content >unknown_file
	) &&
	git -C T fsck &&
	git -C T rev-list --all --objects >T.objects

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5604-clone-reference/T/.git/
[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ok 32 - setup repo with manually symlinked or unknown files at objects/

expecting success of 5604.33 'clone repo with symlinked or unknown files at objects/': 
	# None of these options work when cloning locally, since T has
	# symlinks in its `$GIT_DIR/objects` directory
	for option in --local --no-hardlinks --dissociate
	do
		test_must_fail git clone $option T T$option 2>err || return 1 &&
		test_i18ngrep "symlink.*exists" err || return 1
	done &&

	# But `--shared` clones should still work, even when specifying
	# a local path *and* that repository has symlinks present in its
	# `$GIT_DIR/objects` directory.
	git clone --shared T T--shared &&
	git -C T--shared fsck &&
	git -C T--shared rev-list --all --objects >T--shared.objects &&
	test_cmp T.objects T--shared.objects &&
	(
		cd T--shared/.git/objects &&
		find . -type f | sort >../../../T--shared.objects-files.raw &&
		find . -type l | sort >../../../T--shared.objects-symlinks.raw
	) &&

	for raw in $(ls T*.raw)
	do
		sed -e "s!/../!/Y/!; s![0-9a-f]\{38,\}!Z!" -e "/commit-graph/d" \
		    -e "/multi-pack-index/d" -e "/rev/d" <$raw >$raw.de-sha-1 &&
		sort $raw.de-sha-1 >$raw.de-sha || return 1
	done &&

	echo ./info/alternates >expected-files &&
	test_cmp expected-files T--shared.objects-files.raw &&
	test_must_be_empty T--shared.objects-symlinks.raw

fatal: symlink '0f/bca9850869684085d654f9e1380c9780802570' exists, refusing to clone with --local
fatal: symlink '0f/bca9850869684085d654f9e1380c9780802570' exists, refusing to clone with --local
fatal: symlink '0f/bca9850869684085d654f9e1380c9780802570' exists, refusing to clone with --local
Cloning into 'T--shared'...
done.
ok 33 - clone repo with symlinked or unknown files at objects/

# passed all 33 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5605-clone-local.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/.git/
expecting success of 5605.1 'preparing origin repository': 
	: >file && git add . && git commit -m1 &&
	git clone --bare . a.git &&
	git clone --bare . x &&
	test "$(cd a.git && git config --bool core.bare)" = true &&
	test "$(cd x && git config --bool core.bare)" = true &&
	git bundle create b1.bundle --all &&
	git bundle create b2.bundle main &&
	mkdir dir &&
	cp b1.bundle dir/b3 &&
	cp b1.bundle b4 &&
	git branch not-main main &&
	git bundle create b5.bundle not-main

[main (root-commit) a4ae174] 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
Cloning into bare repository 'a.git'...
done.
Cloning into bare repository 'x'...
done.
ok 1 - preparing origin repository

expecting success of 5605.2 'local clone without .git suffix': 
	git clone -l -s a b &&
	(cd b &&
	test "$(git config --bool core.bare)" = false &&
	git fetch)

Cloning into 'b'...
done.
ok 2 - local clone without .git suffix

expecting success of 5605.3 'local clone with .git suffix': 
	git clone -l -s a.git c &&
	(cd c && git fetch)

Cloning into 'c'...
done.
ok 3 - local clone with .git suffix

expecting success of 5605.4 'local clone from x': 
	git clone -l -s x y &&
	(cd y && git fetch)

Cloning into 'y'...
done.
ok 4 - local clone from x

expecting success of 5605.5 'local clone from x.git that does not exist': 
	test_must_fail git clone -l -s x.git z

fatal: repository 'x.git' does not exist
ok 5 - local clone from x.git that does not exist

expecting success of 5605.6 'With -no-hardlinks, local will make a copy': 
	git clone --bare --no-hardlinks x w &&
	! repo_is_hardlinked w

Cloning into bare repository 'w'...
done.
test_line_count: line count for output != 0
w/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
w/objects/df/2b8fc99e1c1d4dbc0a854d9f72157f1d6ea078
w/objects/a4/ae174c9759876c669998f2c8e401fcb298b8d6
ok 6 - With -no-hardlinks, local will make a copy

expecting success of 5605.7 'Even without -l, local will make a hardlink': 
	rm -fr w &&
	git clone -l --bare x w &&
	repo_is_hardlinked w

Cloning into bare repository 'w'...
done.
ok 7 - Even without -l, local will make a hardlink

expecting success of 5605.8 'local clone of repo with nonexistent ref in HEAD': 
	echo "ref: refs/heads/nonexistent" > a.git/HEAD &&
	git clone a d &&
	(cd d &&
	git fetch &&
	test ! -e .git/refs/remotes/origin/HEAD)

Cloning into 'd'...
done.
warning: remote HEAD refers to nonexistent ref, unable to checkout
ok 8 - local clone of repo with nonexistent ref in HEAD

expecting success of 5605.9 'bundle clone without .bundle suffix': 
	git clone dir/b3 &&
	(cd b3 && git fetch)

Cloning into 'b3'...
ok 9 - bundle clone without .bundle suffix

expecting success of 5605.10 'bundle clone with .bundle suffix': 
	git clone b1.bundle &&
	(cd b1 && git fetch)

Cloning into 'b1'...
ok 10 - bundle clone with .bundle suffix

expecting success of 5605.11 'bundle clone from b4': 
	git clone b4 bdl &&
	(cd bdl && git fetch)

Cloning into 'bdl'...
ok 11 - bundle clone from b4

expecting success of 5605.12 'bundle clone from b4.bundle that does not exist': 
	test_must_fail git clone b4.bundle bb

fatal: repository 'b4.bundle' does not exist
ok 12 - bundle clone from b4.bundle that does not exist

expecting success of 5605.13 'bundle clone with nonexistent HEAD (match default)': 
	git clone b2.bundle b2 &&
	(cd b2 &&
	git fetch &&
	git rev-parse --verify refs/heads/main)

Cloning into 'b2'...
a4ae174c9759876c669998f2c8e401fcb298b8d6
ok 13 - bundle clone with nonexistent HEAD (match default)

expecting success of 5605.14 'bundle clone with nonexistent HEAD (no match default)': 
	git clone b5.bundle b5 &&
	(cd b5 &&
	git fetch &&
	test_must_fail git rev-parse --verify refs/heads/main &&
	test_must_fail git rev-parse --verify refs/heads/not-main)

Cloning into 'b5'...
warning: remote HEAD refers to nonexistent ref, unable to checkout
fatal: Needed a single revision
fatal: Needed a single revision
ok 14 - bundle clone with nonexistent HEAD (no match default)

expecting success of 5605.15 'clone empty repository': 
	mkdir empty &&
	(cd empty &&
	 git init &&
	 git config receive.denyCurrentBranch warn) &&
	git clone empty empty-clone &&
	test_tick &&
	(cd empty-clone &&
	 echo "content" >> foo &&
	 git add foo &&
	 git commit -m "Initial commit" &&
	 git push origin main &&
	 expected=$(git rev-parse main) &&
	 actual=$(git --git-dir=../empty/.git rev-parse main) &&
	 test $actual = $expected)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/empty/.git/
Cloning into 'empty-clone'...
warning: You appear to have cloned an empty repository.
done.
[main (root-commit) b8e7dd3] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
remote: warning: updating the current branch        
To /<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/empty
 * [new branch]      main -> main
ok 15 - clone empty repository

expecting success of 5605.16 'clone empty repository, and then push should not segfault.': 
	rm -fr empty/ empty-clone/ &&
	mkdir empty &&
	(cd empty && git init) &&
	git clone empty empty-clone &&
	(cd empty-clone &&
	test_must_fail git push)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/empty/.git/
Cloning into 'empty-clone'...
warning: You appear to have cloned an empty repository.
done.
error: src refspec refs/heads/main does not match any
error: failed to push some refs to '/<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/empty'
ok 16 - clone empty repository, and then push should not segfault.

expecting success of 5605.17 'cloning non-existent directory fails': 
	rm -rf does-not-exist &&
	test_must_fail git clone does-not-exist

fatal: repository 'does-not-exist' does not exist
ok 17 - cloning non-existent directory fails

expecting success of 5605.18 'cloning non-git directory fails': 
	rm -rf not-a-git-repo not-a-git-repo-clone &&
	mkdir not-a-git-repo &&
	test_must_fail git clone not-a-git-repo not-a-git-repo-clone

fatal: repository 'not-a-git-repo' does not exist
ok 18 - cloning non-git directory fails

expecting success of 5605.19 'cloning file:// does not hardlink': 
	git clone --bare file://"$(pwd)"/a non-local &&
	! repo_is_hardlinked non-local

Cloning into bare repository 'non-local'...
test_line_count: line count for output != 0
non-local/objects/pack/pack-f472b77358cba3f40ca4c0fa18efd9530a353a0b.pack
non-local/objects/pack/pack-f472b77358cba3f40ca4c0fa18efd9530a353a0b.idx
ok 19 - cloning file:// does not hardlink

expecting success of 5605.20 'cloning a local path with --no-local does not hardlink': 
	git clone --bare --no-local a force-nonlocal &&
	! repo_is_hardlinked force-nonlocal

Cloning into bare repository 'force-nonlocal'...
test_line_count: line count for output != 0
force-nonlocal/objects/pack/pack-f472b77358cba3f40ca4c0fa18efd9530a353a0b.pack
force-nonlocal/objects/pack/pack-f472b77358cba3f40ca4c0fa18efd9530a353a0b.idx
ok 20 - cloning a local path with --no-local does not hardlink

expecting success of 5605.21 'cloning locally respects "-u" for fetching refs': 
	test_must_fail git clone --bare -u false a should_not_work.git

Cloning into bare repository 'should_not_work.git'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 21 - cloning locally respects "-u" for fetching refs

expecting success of 5605.22 'local clone from repo with corrupt refs fails gracefully': 
	git init corrupt &&
	test_commit -C corrupt one &&
	echo a >corrupt/.git/refs/heads/topic &&

	test_must_fail git clone corrupt working 2>err &&
	grep "has a null OID" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5605-clone-local/corrupt/.git/
[main (root-commit) b838542] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
fatal: 'refs/remotes/origin/topic' has a null OID
ok 22 - local clone from repo with corrupt refs fails gracefully

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5601-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/.git/
expecting success of 5601.1 'setup': 

	rm -fr .git &&
	test_create_repo src &&
	(
		cd src &&
		>file &&
		git add file &&
		git commit -m initial &&
		echo 1 >file &&
		git add file &&
		git commit -m updated
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src/.git/
[main (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[main 6be483f] updated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 5601.2 'clone with excess parameters (1)': 

	rm -fr dst &&
	test_must_fail git clone -n src dst junk


fatal: Too many arguments.

usage: git clone [<options>] [--] <repo> [<dir>]

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --progress            force progress reporting
    --reject-shallow      don't clone shallow repository
    -n, --no-checkout     don't create a checkout
    --bare                create a bare repository
    --mirror              create a mirror repository (implies bare)
    -l, --local           to clone from a local repository
    --no-hardlinks        don't use local hardlinks, always copy
    -s, --shared          setup as shared repository
    --recurse-submodules[=<pathspec>]
                          initialize submodules in the clone
    --recursive ...       alias of --recurse-submodules
    -j, --jobs <n>        number of submodules cloned in parallel
    --template <template-directory>
                          directory from which templates will be used
    --reference <repo>    reference repository
    --reference-if-able <repo>
                          reference repository
    --dissociate          use --reference only while cloning
    -o, --origin <name>   use <name> instead of 'origin' to track upstream
    -b, --branch <branch>
                          checkout <branch> instead of the remote's HEAD
    -u, --upload-pack <path>
                          path to git-upload-pack on the remote
    --depth <depth>       create a shallow clone of that depth
    --shallow-since <time>
                          create a shallow clone since a specific time
    --shallow-exclude <revision>
                          deepen history of shallow clone, excluding rev
    --single-branch       clone only one branch, HEAD or --branch
    --no-tags             don't clone any tags, and make later fetches not to follow them
    --shallow-submodules  any cloned submodules will be shallow
    --separate-git-dir <gitdir>
                          separate git dir from working tree
    -c, --config <key=value>
                          set config inside the new repository
    --server-option <server-specific>
                          option to transmit
    -4, --ipv4            use IPv4 addresses only
    -6, --ipv6            use IPv6 addresses only
    --filter <args>       object filtering
    --also-filter-submodules
                          apply partial clone filters to submodules
    --remote-submodules   any cloned submodules will use their remote-tracking branch
    --sparse              initialize sparse-checkout file to include only files at root
    --bundle-uri <uri>    a URI for downloading bundles before fetching from origin remote

ok 2 - clone with excess parameters (1)

expecting success of 5601.3 'clone with excess parameters (2)': 

	rm -fr dst &&
	test_must_fail git clone -n "file://$(pwd)/src" dst junk


fatal: Too many arguments.

usage: git clone [<options>] [--] <repo> [<dir>]

    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --progress            force progress reporting
    --reject-shallow      don't clone shallow repository
    -n, --no-checkout     don't create a checkout
    --bare                create a bare repository
    --mirror              create a mirror repository (implies bare)
    -l, --local           to clone from a local repository
    --no-hardlinks        don't use local hardlinks, always copy
    -s, --shared          setup as shared repository
    --recurse-submodules[=<pathspec>]
                          initialize submodules in the clone
    --recursive ...       alias of --recurse-submodules
    -j, --jobs <n>        number of submodules cloned in parallel
    --template <template-directory>
                          directory from which templates will be used
    --reference <repo>    reference repository
    --reference-if-able <repo>
                          reference repository
    --dissociate          use --reference only while cloning
    -o, --origin <name>   use <name> instead of 'origin' to track upstream
    -b, --branch <branch>
                          checkout <branch> instead of the remote's HEAD
    -u, --upload-pack <path>
                          path to git-upload-pack on the remote
    --depth <depth>       create a shallow clone of that depth
    --shallow-since <time>
                          create a shallow clone since a specific time
    --shallow-exclude <revision>
                          deepen history of shallow clone, excluding rev
    --single-branch       clone only one branch, HEAD or --branch
    --no-tags             don't clone any tags, and make later fetches not to follow them
    --shallow-submodules  any cloned submodules will be shallow
    --separate-git-dir <gitdir>
                          separate git dir from working tree
    -c, --config <key=value>
                          set config inside the new repository
    --server-option <server-specific>
                          option to transmit
    -4, --ipv4            use IPv4 addresses only
    -6, --ipv6            use IPv6 addresses only
    --filter <args>       object filtering
    --also-filter-submodules
                          apply partial clone filters to submodules
    --remote-submodules   any cloned submodules will use their remote-tracking branch
    --sparse              initialize sparse-checkout file to include only files at root
    --bundle-uri <uri>    a URI for downloading bundles before fetching from origin remote

ok 3 - clone with excess parameters (2)

expecting success of 5601.4 'output from clone': 
	rm -fr dst &&
	git clone -n "file://$(pwd)/src" dst >output 2>&1 &&
	test $(grep Clon output | wc -l) = 1

ok 4 - output from clone

expecting success of 5601.5 'clone does not keep pack': 

	rm -fr dst &&
	git clone -n "file://$(pwd)/src" dst &&
	! test -f dst/file &&
	! (echo dst/.git/objects/pack/pack-* | grep "\.keep")


Cloning into 'dst'...
ok 5 - clone does not keep pack

expecting success of 5601.6 'clone checks out files': 

	rm -fr dst &&
	git clone src dst &&
	test -f dst/file


Cloning into 'dst'...
done.
ok 6 - clone checks out files

expecting success of 5601.7 'clone respects GIT_WORK_TREE': 

	GIT_WORK_TREE=worktree git clone src bare &&
	test -f bare/config &&
	test -f worktree/file


Cloning into 'bare'...
done.
ok 7 - clone respects GIT_WORK_TREE

expecting success of 5601.8 'clone from hooks': 

	test_create_repo r0 &&
	cd r0 &&
	test_commit initial &&
	cd .. &&
	git init r1 &&
	cd r1 &&
	test_hook pre-commit <<-\EOF &&
	git clone ../r0 ../r2
	exit 1
	EOF
	: >file &&
	git add file &&
	test_must_fail git commit -m invoke-hook &&
	cd .. &&
	test_cmp r0/.git/HEAD r2/.git/HEAD &&
	test_cmp r0/initial.t r2/initial.t


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/r0/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/r1/.git/
Cloning into '../r2'...
done.
ok 8 - clone from hooks

expecting success of 5601.9 'clone creates intermediate directories': 

	git clone src long/path/to/dst &&
	test -f long/path/to/dst/file


Cloning into 'long/path/to/dst'...
done.
ok 9 - clone creates intermediate directories

expecting success of 5601.10 'clone creates intermediate directories for bare repo': 

	git clone --bare src long/path/to/bare/dst &&
	test -f long/path/to/bare/dst/config


Cloning into bare repository 'long/path/to/bare/dst'...
done.
ok 10 - clone creates intermediate directories for bare repo

expecting success of 5601.11 'clone --mirror': 

	git clone --mirror src mirror &&
	test -f mirror/HEAD &&
	test ! -f mirror/file &&
	FETCH="$(cd mirror && git config remote.origin.fetch)" &&
	test "+refs/*:refs/*" = "$FETCH" &&
	MIRROR="$(cd mirror && git config --bool remote.origin.mirror)" &&
	test "$MIRROR" = true


Cloning into bare repository 'mirror'...
done.
ok 11 - clone --mirror

expecting success of 5601.12 'clone --mirror with detached HEAD': 

	( cd src && git checkout HEAD^ && git rev-parse HEAD >../expected ) &&
	git clone --mirror src mirror.detached &&
	( cd src && git checkout - ) &&
	GIT_DIR=mirror.detached git rev-parse HEAD >actual &&
	test_cmp expected actual


Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6ce5622 initial
Cloning into bare repository 'mirror.detached'...
done.
Previous HEAD position was 6ce5622 initial
Switched to branch 'main'
ok 12 - clone --mirror with detached HEAD

expecting success of 5601.13 'clone --bare with detached HEAD': 

	( cd src && git checkout HEAD^ && git rev-parse HEAD >../expected ) &&
	git clone --bare src bare.detached &&
	( cd src && git checkout - ) &&
	GIT_DIR=bare.detached git rev-parse HEAD >actual &&
	test_cmp expected actual


Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6ce5622 initial
Cloning into bare repository 'bare.detached'...
done.
Previous HEAD position was 6ce5622 initial
Switched to branch 'main'
ok 13 - clone --bare with detached HEAD

expecting success of 5601.14 'clone --bare names the local repository <name>.git': 

	git clone --bare src &&
	test -d src.git


Cloning into bare repository 'src.git'...
done.
ok 14 - clone --bare names the local repository <name>.git

expecting success of 5601.15 'clone --mirror does not repeat tags': 

	(cd src &&
	 git tag some-tag HEAD) &&
	git clone --mirror src mirror2 &&
	(cd mirror2 &&
	 git show-ref 2> clone.err > clone.out) &&
	! grep Duplicate mirror2/clone.err &&
	grep some-tag mirror2/clone.out


Cloning into bare repository 'mirror2'...
done.
6be483f3f83fa86dfa2fde82dc272e5e040d2078 refs/tags/some-tag
ok 15 - clone --mirror does not repeat tags

expecting success of 5601.16 'clone to destination with trailing /': 

	git clone src target-1/ &&
	T=$( cd target-1 && git rev-parse HEAD ) &&
	S=$( cd src && git rev-parse HEAD ) &&
	test "$T" = "$S"


Cloning into 'target-1'...
done.
ok 16 - clone to destination with trailing /

expecting success of 5601.17 'clone to destination with extra trailing /': 

	git clone src target-2/// &&
	T=$( cd target-2 && git rev-parse HEAD ) &&
	S=$( cd src && git rev-parse HEAD ) &&
	test "$T" = "$S"


Cloning into 'target-2'...
done.
ok 17 - clone to destination with extra trailing /

expecting success of 5601.18 'clone to an existing empty directory': 
	mkdir target-3 &&
	git clone src target-3 &&
	T=$( cd target-3 && git rev-parse HEAD ) &&
	S=$( cd src && git rev-parse HEAD ) &&
	test "$T" = "$S"

Cloning into 'target-3'...
done.
ok 18 - clone to an existing empty directory

expecting success of 5601.19 'clone to an existing non-empty directory': 
	mkdir target-4 &&
	>target-4/Fakefile &&
	test_must_fail git clone src target-4

fatal: destination path 'target-4' already exists and is not an empty directory.
ok 19 - clone to an existing non-empty directory

expecting success of 5601.20 'clone to an existing path': 
	>target-5 &&
	test_must_fail git clone src target-5

fatal: destination path 'target-5' already exists and is not an empty directory.
ok 20 - clone to an existing path

expecting success of 5601.21 'clone a void': 
	mkdir src-0 &&
	(
		cd src-0 && git init
	) &&
	git clone "file://$(pwd)/src-0" target-6 2>err-6 &&
	! grep "fatal:" err-6 &&
	(
		cd src-0 && test_commit A
	) &&
	git clone "file://$(pwd)/src-0" target-7 2>err-7 &&
	! grep "fatal:" err-7 &&
	# There is no reason to insist they are bit-for-bit
	# identical, but this test should suffice for now.
	test_cmp target-6/.git/config target-7/.git/config

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src-0/.git/
[main (root-commit) 508df12] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
ok 21 - clone a void

expecting success of 5601.22 'clone respects global branch.autosetuprebase': 
	(
		test_config="$HOME/.gitconfig" &&
		git config -f "$test_config" branch.autosetuprebase remote &&
		rm -fr dst &&
		git clone src dst &&
		cd dst &&
		actual="z$(git config branch.main.rebase)" &&
		test ztrue = $actual
	)

Cloning into 'dst'...
done.
ok 22 - clone respects global branch.autosetuprebase

expecting success of 5601.23 'respect url-encoding of file://': 
	git init x+y &&
	git clone "file://$PWD/x+y" xy-url-1 &&
	git clone "file://$PWD/x%2By" xy-url-2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/x+y/.git/
Cloning into 'xy-url-1'...
warning: You appear to have cloned an empty repository.
Cloning into 'xy-url-2'...
warning: You appear to have cloned an empty repository.
ok 23 - respect url-encoding of file://

expecting success of 5601.24 'do not query-string-decode + in URLs': 
	rm -rf x+y &&
	git init "x y" &&
	test_must_fail git clone "file://$PWD/x+y" xy-no-plus

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/x y/.git/
Cloning into 'xy-no-plus'...
fatal: '/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/x+y' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 24 - do not query-string-decode + in URLs

expecting success of 5601.25 'do not respect url-encoding of non-url path': 
	git init x+y &&
	test_must_fail git clone x%2By xy-regular &&
	git clone x+y xy-regular

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/x+y/.git/
fatal: repository 'x%2By' does not exist
Cloning into 'xy-regular'...
warning: You appear to have cloned an empty repository.
done.
ok 25 - do not respect url-encoding of non-url path

expecting success of 5601.26 'clone separate gitdir': 
	rm -rf dst &&
	git clone --separate-git-dir realgitdir src dst &&
	test -d realgitdir/refs

Cloning into 'dst'...
done.
ok 26 - clone separate gitdir

expecting success of 5601.27 'clone separate gitdir: output': 
	echo "gitdir: $(pwd)/realgitdir" >expected &&
	test_cmp expected dst/.git

ok 27 - clone separate gitdir: output

expecting success of 5601.28 'clone from .git file': 
	git clone dst/.git dst2

Cloning into 'dst2'...
done.
ok 28 - clone from .git file

expecting success of 5601.29 'fetch from .git gitfile': 
	(
		cd dst2 &&
		git fetch ../dst/.git
	)

From ../dst/
 * branch            HEAD       -> FETCH_HEAD
ok 29 - fetch from .git gitfile

expecting success of 5601.30 'fetch from gitfile parent': 
	(
		cd dst2 &&
		git fetch ../dst
	)

From ../dst
 * branch            HEAD       -> FETCH_HEAD
ok 30 - fetch from gitfile parent

expecting success of 5601.31 'clone separate gitdir where target already exists': 
	rm -rf dst &&
	echo foo=bar >>realgitdir/config &&
	test_must_fail git clone --separate-git-dir realgitdir src dst &&
	grep foo=bar realgitdir/config

fatal: repository path 'realgitdir' already exists and is not an empty directory.
foo=bar
ok 31 - clone separate gitdir where target already exists

expecting success of 5601.32 'clone --reference from original': 
	git clone --shared --bare src src-1 &&
	git clone --bare src src-2 &&
	git clone --reference=src-2 --bare src-1 target-8 &&
	grep /src-2/ target-8/objects/info/alternates

Cloning into bare repository 'src-1'...
done.
Cloning into bare repository 'src-2'...
done.
Cloning into bare repository 'target-8'...
done.
/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src-2/objects
ok 32 - clone --reference from original

expecting success of 5601.33 'clone with more than one --reference': 
	git clone --bare src src-3 &&
	git clone --bare src src-4 &&
	git clone --reference=src-3 --reference=src-4 src target-9 &&
	grep /src-3/ target-9/.git/objects/info/alternates &&
	grep /src-4/ target-9/.git/objects/info/alternates

Cloning into bare repository 'src-3'...
done.
Cloning into bare repository 'src-4'...
done.
Cloning into 'target-9'...
done.
/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src-3/objects
/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src-4/objects
ok 33 - clone with more than one --reference

expecting success of 5601.34 'clone from original with relative alternate': 
	mkdir nest &&
	git clone --bare src nest/src-5 &&
	echo ../../../src/.git/objects >nest/src-5/objects/info/alternates &&
	git clone --bare nest/src-5 target-10 &&
	grep /src/\\.git/objects target-10/objects/info/alternates

Cloning into bare repository 'nest/src-5'...
done.
Cloning into bare repository 'target-10'...
done.
/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/src/.git/objects
ok 34 - clone from original with relative alternate

expecting success of 5601.35 'clone checking out a tag': 
	git clone --branch=some-tag src dst.tag &&
	GIT_DIR=src/.git git rev-parse some-tag >expected &&
	GIT_DIR=dst.tag/.git git rev-parse HEAD >actual &&
	test_cmp expected actual &&
	GIT_DIR=dst.tag/.git git config remote.origin.fetch >fetch.actual &&
	echo "+refs/heads/*:refs/remotes/origin/*" >fetch.expected &&
	test_cmp fetch.expected fetch.actual

Cloning into 'dst.tag'...
done.
Note: switching to '6be483f3f83fa86dfa2fde82dc272e5e040d2078'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 35 - clone checking out a tag

expecting success of 5601.36 'set up ssh wrapper': 
	cp "$GIT_BUILD_DIR/t/helper/test-fake-ssh$X" \
		"$TRASH_DIRECTORY/ssh$X" &&
	GIT_SSH="$TRASH_DIRECTORY/ssh$X" &&
	export GIT_SSH &&
	export TRASH_DIRECTORY &&
	>"$TRASH_DIRECTORY"/ssh-output

ok 36 - set up ssh wrapper

expecting success of 5601.37 'clone myhost:src uses ssh': 
	GIT_TEST_PROTOCOL_VERSION=0 git clone myhost:src ssh-clone &&
	expect_ssh myhost src

Cloning into 'ssh-clone'...
ok 37 - clone myhost:src uses ssh

expecting success of 5601.38 'clone local path foo:bar': 
	cp -R src "foo:bar" &&
	git clone "foo:bar" foobar &&
	expect_ssh none

Cloning into 'foobar'...
done.
ok 38 - clone local path foo:bar

expecting success of 5601.39 'bracketed hostnames are still ssh': 
	GIT_TEST_PROTOCOL_VERSION=0 git clone "[myhost:123]:src" ssh-bracket-clone &&
	expect_ssh "-p 123" myhost src

Cloning into 'ssh-bracket-clone'...
ok 39 - bracketed hostnames are still ssh

expecting success of 5601.40 'OpenSSH variant passes -4': 
	GIT_TEST_PROTOCOL_VERSION=0 git clone -4 "[myhost:123]:src" ssh-ipv4-clone &&
	expect_ssh "-4 -p 123" myhost src

Cloning into 'ssh-ipv4-clone'...
ok 40 - OpenSSH variant passes -4

expecting success of 5601.41 'variant can be overridden': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/putty" &&
	git -c ssh.variant=putty clone -4 "[myhost:123]:src" ssh-putty-clone &&
	expect_ssh "-4 -P 123" myhost src

Cloning into 'ssh-putty-clone'...
ok 41 - variant can be overridden

expecting success of 5601.42 'variant=auto picks based on basename': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	git -c ssh.variant=auto clone -4 "[myhost:123]:src" ssh-auto-clone &&
	expect_ssh "-4 -P 123" myhost src

Cloning into 'ssh-auto-clone'...
ok 42 - variant=auto picks based on basename

expecting success of 5601.43 'simple does not support -4/-6': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/simple" &&
	test_must_fail git clone -4 "myhost:src" ssh-4-clone-simple

Cloning into 'ssh-4-clone-simple'...
fatal: ssh variant 'simple' does not support -4
ok 43 - simple does not support -4/-6

expecting success of 5601.44 'simple does not support port': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/simple" &&
	test_must_fail git clone "[myhost:123]:src" ssh-bracket-clone-simple

Cloning into 'ssh-bracket-clone-simple'...
fatal: ssh variant 'simple' does not support setting port
ok 44 - simple does not support port

expecting success of 5601.45 'uplink is treated as simple': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/uplink" &&
	test_must_fail git clone "[myhost:123]:src" ssh-bracket-clone-uplink &&
	git clone "myhost:src" ssh-clone-uplink &&
	expect_ssh myhost src

Cloning into 'ssh-bracket-clone-uplink'...
fatal: ssh variant 'simple' does not support setting port
Cloning into 'ssh-clone-uplink'...
ok 45 - uplink is treated as simple

expecting success of 5601.46 'OpenSSH-like uplink is treated as ssh': 
	write_script "$TRASH_DIRECTORY/uplink" <<-EOF &&
	if test "\$1" = "-G"
	then
		exit 0
	fi &&
	exec "\$TRASH_DIRECTORY/ssh$X" "\$@"
	EOF
	test_when_finished "rm -f \"\$TRASH_DIRECTORY/uplink\"" &&
	GIT_SSH="$TRASH_DIRECTORY/uplink" &&
	test_when_finished "GIT_SSH=\"\$TRASH_DIRECTORY/ssh\$X\"" &&
	GIT_TEST_PROTOCOL_VERSION=0 git clone "[myhost:123]:src" ssh-bracket-clone-sshlike-uplink &&
	expect_ssh "-p 123" myhost src

Cloning into 'ssh-bracket-clone-sshlike-uplink'...
ok 46 - OpenSSH-like uplink is treated as ssh

expecting success of 5601.47 'plink is treated specially (as putty)': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	git clone "[myhost:123]:src" ssh-bracket-clone-plink-0 &&
	expect_ssh "-P 123" myhost src

Cloning into 'ssh-bracket-clone-plink-0'...
ok 47 - plink is treated specially (as putty)

expecting success of 5601.48 'plink.exe is treated specially (as putty)': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
	git clone "[myhost:123]:src" ssh-bracket-clone-plink-1 &&
	expect_ssh "-P 123" myhost src

Cloning into 'ssh-bracket-clone-plink-1'...
ok 48 - plink.exe is treated specially (as putty)

expecting success of 5601.49 'tortoiseplink is like putty, with extra arguments': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/tortoiseplink" &&
	git clone "[myhost:123]:src" ssh-bracket-clone-plink-2 &&
	expect_ssh "-batch -P 123" myhost src

Cloning into 'ssh-bracket-clone-plink-2'...
ok 49 - tortoiseplink is like putty, with extra arguments

expecting success of 5601.50 'double quoted plink.exe in GIT_SSH_COMMAND': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
	GIT_SSH_COMMAND="\"$TRASH_DIRECTORY/plink.exe\" -v" \
		git clone "[myhost:123]:src" ssh-bracket-clone-plink-3 &&
	expect_ssh "-v -P 123" myhost src

Cloning into 'ssh-bracket-clone-plink-3'...
ok 50 - double quoted plink.exe in GIT_SSH_COMMAND

expecting success of 5601.51 'single quoted plink.exe in GIT_SSH_COMMAND': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
	GIT_SSH_COMMAND="$SQ$TRASH_DIRECTORY/plink.exe$SQ -v" \
		git clone "[myhost:123]:src" ssh-bracket-clone-plink-4 &&
	expect_ssh "-v -P 123" myhost src

Cloning into 'ssh-bracket-clone-plink-4'...
ok 51 - single quoted plink.exe in GIT_SSH_COMMAND

expecting success of 5601.52 'GIT_SSH_VARIANT overrides plink detection': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	GIT_TEST_PROTOCOL_VERSION=0 GIT_SSH_VARIANT=ssh \
		git clone "[myhost:123]:src" ssh-bracket-clone-variant-1 &&
	expect_ssh "-p 123" myhost src

Cloning into 'ssh-bracket-clone-variant-1'...
ok 52 - GIT_SSH_VARIANT overrides plink detection

expecting success of 5601.53 'ssh.variant overrides plink detection': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	GIT_TEST_PROTOCOL_VERSION=0 git -c ssh.variant=ssh \
		clone "[myhost:123]:src" ssh-bracket-clone-variant-2 &&
	expect_ssh "-p 123" myhost src

Cloning into 'ssh-bracket-clone-variant-2'...
ok 53 - ssh.variant overrides plink detection

expecting success of 5601.54 'GIT_SSH_VARIANT overrides plink detection to plink': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	GIT_SSH_VARIANT=plink \
	git clone "[myhost:123]:src" ssh-bracket-clone-variant-3 &&
	expect_ssh "-P 123" myhost src

Cloning into 'ssh-bracket-clone-variant-3'...
ok 54 - GIT_SSH_VARIANT overrides plink detection to plink

expecting success of 5601.55 'GIT_SSH_VARIANT overrides plink to tortoiseplink': 
	copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
	GIT_SSH_VARIANT=tortoiseplink \
	git clone "[myhost:123]:src" ssh-bracket-clone-variant-4 &&
	expect_ssh "-batch -P 123" myhost src

Cloning into 'ssh-bracket-clone-variant-4'...
ok 55 - GIT_SSH_VARIANT overrides plink to tortoiseplink

expecting success of 5601.56 'clean failure on broken quoting': 
	test_must_fail \
		env GIT_SSH_COMMAND="${SQ}plink.exe -v" \
		git clone "[myhost:123]:src" sq-failure

Cloning into 'sq-failure'...
fatal: ssh variant 'simple' does not support setting port
ok 56 - clean failure on broken quoting

expecting success of 5601.57 'clone c:temp is ssl': 
	test_clone_url c:temp c temp

Cloning into 'tmp1'...
fatal: 'temp' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 57 - clone c:temp is ssl

ok 58 # skip clone c:temp is dos drive (missing MINGW)

expecting success of 5601.59 'clone host:rep': 
		test_clone_url host:$repo host $repo
	
Cloning into 'tmp2'...
fatal: 'rep' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 59 - clone host:rep

expecting success of 5601.60 'clone host:rep/home/project': 
		test_clone_url host:$repo host $repo
	
Cloning into 'tmp3'...
fatal: 'rep/home/project' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 60 - clone host:rep/home/project

expecting success of 5601.61 'clone host:123': 
		test_clone_url host:$repo host $repo
	
Cloning into 'tmp4'...
fatal: '123' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 61 - clone host:123

expecting success of 5601.62 'clone [::1]:rep': 
		test_clone_url [::1]:$repo ::1 "$repo"
	
Cloning into 'tmp5'...
fatal: 'rep' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 62 - clone [::1]:rep

expecting success of 5601.63 'clone [::1]:rep/home/project': 
		test_clone_url [::1]:$repo ::1 "$repo"
	
Cloning into 'tmp6'...
fatal: 'rep/home/project' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 63 - clone [::1]:rep/home/project

expecting success of 5601.64 'clone [::1]:123': 
		test_clone_url [::1]:$repo ::1 "$repo"
	
Cloning into 'tmp7'...
fatal: '123' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 64 - clone [::1]:123

expecting success of 5601.65 'clone host:/~repo': 
	test_clone_url host:/~repo host "~repo"

Cloning into 'tmp8'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 65 - clone host:/~repo

expecting success of 5601.66 'clone [::1]:/~repo': 
	test_clone_url [::1]:/~repo ::1 "~repo"

Cloning into 'tmp9'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 66 - clone [::1]:/~repo

expecting success of 5601.67 'clone foo/bar:baz is not ssh': 
		test_clone_url $url none
	
Cloning into 'tmp10'...
fatal: 'foo/bar:baz' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 67 - clone foo/bar:baz is not ssh

expecting success of 5601.68 'clone [foo]bar/baz:qux is not ssh': 
		test_clone_url $url none
	
Cloning into 'tmp11'...
fatal: ']bar/baz:qux' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 68 - clone [foo]bar/baz:qux is not ssh

expecting success of 5601.69 'clone [foo/bar]:baz is not ssh': 
		test_clone_url $url none
	
Cloning into 'tmp12'...
fatal: ']:baz' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 69 - clone [foo/bar]:baz is not ssh

expecting success of 5601.70 'clone ssh://host.xz/home/user/repo': 
		test_clone_url "ssh://host.xz$tcol/home/user/repo" host.xz /home/user/repo
	
Cloning into 'tmp13'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 70 - clone ssh://host.xz/home/user/repo

expecting success of 5601.71 'clone ssh://host.xz/~repo': 
	test_clone_url "ssh://host.xz$tcol/~repo" host.xz "~repo"

Cloning into 'tmp14'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 71 - clone ssh://host.xz/~repo

expecting success of 5601.72 'clone ssh://host.xz:/home/user/repo': 
		test_clone_url "ssh://host.xz$tcol/home/user/repo" host.xz /home/user/repo
	
Cloning into 'tmp15'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 72 - clone ssh://host.xz:/home/user/repo

expecting success of 5601.73 'clone ssh://host.xz:/~repo': 
	test_clone_url "ssh://host.xz$tcol/~repo" host.xz "~repo"

Cloning into 'tmp16'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 73 - clone ssh://host.xz:/~repo

expecting success of 5601.74 'clone ssh://host.xz:22/home/user/repo': 
	test_clone_url "ssh://host.xz:22/home/user/repo" "-p 22 host.xz" "/home/user/repo"

Cloning into 'tmp17'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 74 - clone ssh://host.xz:22/home/user/repo

expecting success of 5601.75 'clone ssh://host.xz:22/~repo': 
	test_clone_url "ssh://host.xz:22/~repo" "-p 22 host.xz" "~repo"

Cloning into 'tmp18'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 75 - clone ssh://host.xz:22/~repo

expecting success of 5601.76 'clone ssh://::1/home/user/repo': 
	  test_clone_url ssh://::1/home/user/repo ::1 /home/user/repo
	
Cloning into 'tmp19'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 76 - clone ssh://::1/home/user/repo

expecting success of 5601.77 'clone ssh://[::1]/home/user/repo': 
	  test_clone_url ssh://[::1]/home/user/repo ::1 /home/user/repo
	
Cloning into 'tmp20'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 77 - clone ssh://[::1]/home/user/repo

expecting success of 5601.78 'clone ssh://[::1]:/home/user/repo': 
	  test_clone_url ssh://[::1]:/home/user/repo ::1 /home/user/repo
	
Cloning into 'tmp21'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 78 - clone ssh://[::1]:/home/user/repo

expecting success of 5601.79 'clone ssh://user@::1/home/user/repo': 
	  test_clone_url ssh://user@::1/home/user/repo user@::1 /home/user/repo
	
Cloning into 'tmp22'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 79 - clone ssh://user@::1/home/user/repo

expecting success of 5601.80 'clone ssh://user@[::1]/home/user/repo': 
	  test_clone_url ssh://user@[::1]/home/user/repo user@::1 /home/user/repo
	
Cloning into 'tmp23'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 80 - clone ssh://user@[::1]/home/user/repo

expecting success of 5601.81 'clone ssh://user@[::1]:/home/user/repo': 
	  test_clone_url ssh://user@[::1]:/home/user/repo user@::1 /home/user/repo
	
Cloning into 'tmp24'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 81 - clone ssh://user@[::1]:/home/user/repo

expecting success of 5601.82 'clone ssh://[user@::1]/home/user/repo': 
	  test_clone_url ssh://[user@::1]/home/user/repo user@::1 /home/user/repo
	
Cloning into 'tmp25'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 82 - clone ssh://[user@::1]/home/user/repo

expecting success of 5601.83 'clone ssh://[user@::1]:/home/user/repo': 
	  test_clone_url ssh://[user@::1]:/home/user/repo user@::1 /home/user/repo
	
Cloning into 'tmp26'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 83 - clone ssh://[user@::1]:/home/user/repo

expecting success of 5601.84 'clone ssh://::1/~repo': 
	  test_clone_url ssh://::1/~repo ::1 '~repo'
	
Cloning into 'tmp27'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 84 - clone ssh://::1/~repo

expecting success of 5601.85 'clone ssh://[::1]/~repo': 
	  test_clone_url ssh://[::1]/~repo ::1 '~repo'
	
Cloning into 'tmp28'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 85 - clone ssh://[::1]/~repo

expecting success of 5601.86 'clone ssh://user@::1/~repo': 
	  test_clone_url ssh://user@::1/~repo user@::1 '~repo'
	
Cloning into 'tmp29'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 86 - clone ssh://user@::1/~repo

expecting success of 5601.87 'clone ssh://user@[::1]/~repo': 
	  test_clone_url ssh://user@[::1]/~repo user@::1 '~repo'
	
Cloning into 'tmp30'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 87 - clone ssh://user@[::1]/~repo

expecting success of 5601.88 'clone ssh://[user@::1]/~repo': 
	  test_clone_url ssh://[user@::1]/~repo user@::1 '~repo'
	
Cloning into 'tmp31'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 88 - clone ssh://[user@::1]/~repo

expecting success of 5601.89 'clone ssh://[::1]:22/home/user/repo': 
	  test_clone_url ssh://[::1]:22/home/user/repo '-p 22' ::1 /home/user/repo
	
Cloning into 'tmp32'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 89 - clone ssh://[::1]:22/home/user/repo

expecting success of 5601.90 'clone ssh://user@[::1]:22/home/user/repo': 
	  test_clone_url ssh://user@[::1]:22/home/user/repo '-p 22' user@::1 /home/user/repo
	
Cloning into 'tmp33'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 90 - clone ssh://user@[::1]:22/home/user/repo

expecting success of 5601.91 'clone ssh://[user@::1]:22/home/user/repo': 
	  test_clone_url ssh://[user@::1]:22/home/user/repo '-p 22' user@::1 /home/user/repo
	
Cloning into 'tmp34'...
fatal: '/home/user/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 91 - clone ssh://[user@::1]:22/home/user/repo

expecting success of 5601.92 'clone ssh://[::1]:22/~repo': 
	  test_clone_url ssh://[::1]:22/~repo '-p 22' ::1 '~repo'
	
Cloning into 'tmp35'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 92 - clone ssh://[::1]:22/~repo

expecting success of 5601.93 'clone ssh://user@[::1]:22/~repo': 
	  test_clone_url ssh://user@[::1]:22/~repo '-p 22' user@::1 '~repo'
	
Cloning into 'tmp36'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 93 - clone ssh://user@[::1]:22/~repo

expecting success of 5601.94 'clone ssh://[user@::1]:22/~repo': 
	  test_clone_url ssh://[user@::1]:22/~repo '-p 22' user@::1 '~repo'
	
Cloning into 'tmp37'...
fatal: '~repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 94 - clone ssh://[user@::1]:22/~repo

expecting success of 5601.95 'clone from a repository with two identical branches': 

	(
		cd src &&
		git checkout -b another main
	) &&
	git clone src target-11 &&
	test "z$( cd target-11 && git symbolic-ref HEAD )" = zrefs/heads/another


Switched to a new branch 'another'
Cloning into 'target-11'...
done.
ok 95 - clone from a repository with two identical branches

expecting success of 5601.96 'shallow clone locally': 
	git clone --depth=1 --no-local src ssrrcc &&
	git clone ssrrcc ddsstt &&
	test_cmp ssrrcc/.git/shallow ddsstt/.git/shallow &&
	( cd ddsstt && git fsck )

Cloning into 'ssrrcc'...
Cloning into 'ddsstt'...
ok 96 - shallow clone locally

expecting success of 5601.97 'GIT_TRACE_PACKFILE produces a usable pack': 
	rm -rf dst.git &&
	GIT_TRACE_PACKFILE=$PWD/tmp.pack git clone --no-local --bare src dst.git &&
	git init --bare replay.git &&
	git -C replay.git index-pack -v --stdin <tmp.pack

Cloning into bare repository 'dst.git'...
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/replay.git/
Receiving objects:  16% (1/6)
Receiving objects:  33% (2/6)
Receiving objects:  50% (3/6)
Receiving objects:  66% (4/6)
Receiving objects:  83% (5/6)
Receiving objects: 100% (6/6)
Receiving objects: 100% (6/6), done.
pack	f67ec21158687048e0e289c72917fdb6bffcc50d
ok 97 - GIT_TRACE_PACKFILE produces a usable pack

expecting success of 5601.98 'clone on case-insensitive fs': 
	git init icasefs &&
	(
		cd icasefs &&
		o=$(git hash-object -w --stdin </dev/null | hex2oct) &&
		t=$(printf "100644 X\0${o}100644 x\0${o}" |
			git hash-object -w -t tree --stdin) &&
		c=$(git commit-tree -m bogus $t) &&
		git update-ref refs/heads/bogus $c &&
		git clone -b bogus . bogus 2>warning
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/icasefs/.git/
ok 98 - clone on case-insensitive fs

checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 99 # skip colliding file detection (missing CASE_INSENSITIVE_FS)

expecting success of 5601.100 'clone with GIT_DEFAULT_HASH': 
	(
		sane_unset GIT_DEFAULT_HASH &&
		git init --object-format=sha1 test-sha1 &&
		git init --object-format=sha256 test-sha256
	) &&
	test_commit -C test-sha1 foo &&
	test_commit -C test-sha256 foo &&
	GIT_DEFAULT_HASH=sha1 git clone test-sha256 test-clone-sha256 &&
	GIT_DEFAULT_HASH=sha256 git clone test-sha1 test-clone-sha1 &&
	git -C test-clone-sha1 status &&
	git -C test-clone-sha256 status

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/test-sha1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/test-sha256/.git/
[main (root-commit) 946e985] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[main (root-commit) ff872d8] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'test-clone-sha256'...
done.
Cloning into 'test-clone-sha1'...
done.
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
ok 100 - clone with GIT_DEFAULT_HASH

expecting success of 5601.101 'partial clone': 
	partial_clone server "file://$(pwd)/server"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 9d84c42] Revert "one"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 one.t
[main 3b7317f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'client'...
ok 101 - partial clone

expecting success of 5601.102 'partial clone with -o': 
	partial_clone_server server &&
	git clone -o blah --filter=blob:limit=0 "file://$(pwd)/server" client &&
	test_cmp_config -C client "blob:limit=0" --get-all remote.blah.partialclonefilter

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/.git/
[main (root-commit) 26cc6ba] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main b29d30d] Revert "one"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 one.t
[main dc14270] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'client'...
ok 102 - partial clone with -o

expecting success of 5601.103 'partial clone: warn if server does not support object filtering': 
	rm -rf server client &&
	test_create_repo server &&
	test_commit -C server one &&

	git clone --filter=blob:limit=0 "file://$(pwd)/server" client 2> err &&

	test_i18ngrep "filtering not recognized by server" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/.git/
[main (root-commit) d944c64] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
warning: filtering not recognized by server, ignoring
ok 103 - partial clone: warn if server does not support object filtering

expecting success of 5601.104 'batch missing blob request during checkout': 
	rm -rf server client &&

	test_create_repo server &&
	echo a >server/a &&
	echo b >server/b &&
	git -C server add a b &&

	git -C server commit -m x &&
	echo aa >server/a &&
	echo bb >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&

	git clone --filter=blob:limit=0 "file://$(pwd)/server" client &&

	# Ensure that there is only one negotiation by checking that there is
	# only "done" line sent. ("done" marks the end of negotiation.)
	GIT_TRACE_PACKET="$(pwd)/trace" \
		GIT_TRACE2_EVENT="$(pwd)/trace2_event" \
		git -C client -c trace2.eventNesting=5 checkout HEAD^ &&
	grep \"key\":\"total_rounds\",\"value\":\"1\" trace2_event >trace_lines &&
	test_line_count = 1 trace_lines &&
	grep "fetch> done" trace >done_lines &&
	test_line_count = 1 done_lines

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/.git/
[main (root-commit) 4824756] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
[main 145eb5d] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Cloning into 'client'...
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4824756 x
ok 104 - batch missing blob request during checkout

expecting success of 5601.105 'batch missing blob request does not inadvertently try to fetch gitlinks': 
	rm -rf server client &&

	test_create_repo repo_for_submodule &&
	test_commit -C repo_for_submodule x &&

	test_create_repo server &&
	echo a >server/a &&
	echo b >server/b &&
	git -C server add a b &&
	git -C server commit -m x &&

	echo aa >server/a &&
	echo bb >server/b &&
	# Also add a gitlink pointing to an arbitrary repository
	test_config_global protocol.file.allow always &&
	git -C server submodule add "$(pwd)/repo_for_submodule" c &&
	git -C server add a b c &&
	git -C server commit -m x &&

	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&

	# Make sure that it succeeds
	git clone --filter=blob:limit=0 "file://$(pwd)/server" client

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/repo_for_submodule/.git/
[main (root-commit) 1c117dc] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/.git/
[main (root-commit) afe4671] x
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5601-clone/server/c'...
done.
[main cf010cf] x
 Author: A U Thor <author@example.com>
 4 files changed, 6 insertions(+), 2 deletions(-)
 create mode 100644 .gitmodules
 create mode 160000 c
Cloning into 'client'...
ok 105 - batch missing blob request does not inadvertently try to fetch gitlinks

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 105 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..105
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5608-clone-2gb.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5608-clone-2gb/.git/
1..0 # SKIP expensive 2GB clone test; enable with GIT_TEST_CLONE_2GB=true
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5606-clone-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5606-clone-options/.git/
expecting success of 5606.1 'setup': 

	mkdir parent &&
	(cd parent && git init &&
	 echo one >file && git add file &&
	 git commit -m one) &&
	git clone --depth=1 --no-local parent shallow-repo


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5606-clone-options/parent/.git/
[main (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'shallow-repo'...
ok 1 - setup

expecting success of 5606.2 'submodule.stickyRecursiveClone flag manipulates submodule.recurse value': 

	test_config_global submodule.stickyRecursiveClone true &&
	git clone --recurse-submodules parent clone_recurse_true &&
	test_cmp_config -C clone_recurse_true true submodule.recurse &&

	test_config_global submodule.stickyRecursiveClone false &&
	git clone --recurse-submodules parent clone_recurse_false &&
	test_expect_code 1 git -C clone_recurse_false config --get submodule.recurse


Cloning into 'clone_recurse_true'...
done.
Cloning into 'clone_recurse_false'...
done.
ok 2 - submodule.stickyRecursiveClone flag manipulates submodule.recurse value

expecting success of 5606.3 'clone -o': 

	git clone -o foo parent clone-o &&
	git -C clone-o rev-parse --verify refs/remotes/foo/main


Cloning into 'clone-o'...
done.
1993c08d5743a2c4719f8ed3b8cc9b60d54d741e
ok 3 - clone -o

expecting success of 5606.4 'rejects invalid -o/--origin': 

	test_must_fail git clone -o "bad...name" parent clone-bad-name 2>err &&
	test_i18ngrep "'bad...name' is not a valid remote name" err


fatal: 'bad...name' is not a valid remote name
ok 4 - rejects invalid -o/--origin

expecting success of 5606.5 'clone --bare -o': 

	git clone -o foo --bare parent clone-bare-o &&
	(cd parent && pwd) >expect &&
	git -C clone-bare-o config remote.foo.url >actual &&
	test_cmp expect actual


Cloning into bare repository 'clone-bare-o'...
done.
ok 5 - clone --bare -o

expecting success of 5606.6 'disallows --bare with --separate-git-dir': 

	test_must_fail git clone --bare --separate-git-dir dot-git-destiation parent clone-bare-sgd 2>err &&
	test_debug "cat err" &&
	test_i18ngrep -e "options .--bare. and .--separate-git-dir. cannot be used together" err


fatal: options '--bare' and '--separate-git-dir' cannot be used together
ok 6 - disallows --bare with --separate-git-dir

expecting success of 5606.7 'disallows --bundle-uri with shallow options': 
	for option in --depth=1 --shallow-since=01-01-2000 --shallow-exclude=HEAD
	do
		test_must_fail git clone --bundle-uri=bundle $option from to 2>err &&
		grep "bundle-uri is incompatible" err || return 1
	done

fatal: --bundle-uri is incompatible with --depth, --shallow-since, and --shallow-exclude
fatal: --bundle-uri is incompatible with --depth, --shallow-since, and --shallow-exclude
fatal: --bundle-uri is incompatible with --depth, --shallow-since, and --shallow-exclude
ok 7 - disallows --bundle-uri with shallow options

expecting success of 5606.8 'reject cloning shallow repository': 
	test_when_finished "rm -rf repo" &&
	test_must_fail git clone --reject-shallow shallow-repo out 2>err &&
	test_i18ngrep -e "source repository is shallow, reject to clone." err &&

	git clone --no-reject-shallow shallow-repo repo

fatal: source repository is shallow, reject to clone.
Cloning into 'repo'...
ok 8 - reject cloning shallow repository

expecting success of 5606.9 'reject cloning non-local shallow repository': 
	test_when_finished "rm -rf repo" &&
	test_must_fail git clone --reject-shallow --no-local shallow-repo out 2>err &&
	test_i18ngrep -e "source repository is shallow, reject to clone." err &&

	git clone --no-reject-shallow --no-local shallow-repo repo

fatal: source repository is shallow, reject to clone.
Cloning into 'repo'...
ok 9 - reject cloning non-local shallow repository

expecting success of 5606.10 'succeed cloning normal repository': 
	test_when_finished "rm -rf chilad1 child2 child3 child4 " &&
	git clone --reject-shallow parent child1 &&
	git clone --reject-shallow --no-local parent child2 &&
	git clone --no-reject-shallow parent child3 &&
	git clone --no-reject-shallow --no-local parent child4

Cloning into 'child1'...
done.
Cloning into 'child2'...
Cloning into 'child3'...
done.
Cloning into 'child4'...
ok 10 - succeed cloning normal repository

expecting success of 5606.11 'uses "origin" for default remote name': 

	git clone parent clone-default-origin &&
	git -C clone-default-origin rev-parse --verify refs/remotes/origin/main


Cloning into 'clone-default-origin'...
done.
1993c08d5743a2c4719f8ed3b8cc9b60d54d741e
ok 11 - uses "origin" for default remote name

expecting success of 5606.12 'prefers --template config over normal config': 

	template="$TRASH_DIRECTORY/template-with-config" &&
	mkdir "$template" &&
	git config --file "$template/config" foo.bar from_template &&
	test_config_global foo.bar from_global &&
	git clone "--template=$template" parent clone-template-config &&
	test "$(git -C clone-template-config config --local foo.bar)" = "from_template"


Cloning into 'clone-template-config'...
done.
ok 12 - prefers --template config over normal config

expecting success of 5606.13 'prefers -c config over --template config': 

	template="$TRASH_DIRECTORY/template-with-ignored-config" &&
	mkdir "$template" &&
	git config --file "$template/config" foo.bar from_template &&
	git clone "--template=$template" -c foo.bar=inline parent clone-template-inline-config &&
	test "$(git -C clone-template-inline-config config --local foo.bar)" = "inline"


Cloning into 'clone-template-inline-config'...
done.
ok 13 - prefers -c config over --template config

expecting success of 5606.14 'prefers config "clone.defaultRemoteName" over default': 

	test_config_global clone.defaultRemoteName from_config &&
	git clone parent clone-config-origin &&
	git -C clone-config-origin rev-parse --verify refs/remotes/from_config/main


Cloning into 'clone-config-origin'...
done.
1993c08d5743a2c4719f8ed3b8cc9b60d54d741e
ok 14 - prefers config "clone.defaultRemoteName" over default

expecting success of 5606.15 'prefers --origin over -c config': 

	git clone -c clone.defaultRemoteName=inline --origin from_option parent clone-o-and-inline-config &&
	git -C clone-o-and-inline-config rev-parse --verify refs/remotes/from_option/main


Cloning into 'clone-o-and-inline-config'...
done.
1993c08d5743a2c4719f8ed3b8cc9b60d54d741e
ok 15 - prefers --origin over -c config

expecting success of 5606.16 'redirected clone does not show progress': 

	git clone "file://$(pwd)/parent" clone-redirected >out 2>err &&
	! grep % err &&
	test_i18ngrep ! "Checking connectivity" err


ok 16 - redirected clone does not show progress

expecting success of 5606.17 'redirected clone -v does show progress': 

	git clone --progress "file://$(pwd)/parent" clone-redirected-progress \
		>out 2>err &&
	grep % err


remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
Receiving objects:  33% (1/3)
Receiving objects:  66% (2/3)
Receiving objects: 100% (3/3)
Receiving objects: 100% (3/3), done.
ok 17 - redirected clone -v does show progress

expecting success of 5606.18 'clone does not segfault with --bare and core.bare=false': 
	test_config_global core.bare false &&
	git clone --bare parent clone-bare &&
	echo true >expect &&
	git -C clone-bare rev-parse --is-bare-repository >actual &&
	test_cmp expect actual

Cloning into bare repository 'clone-bare'...
done.
ok 18 - clone does not segfault with --bare and core.bare=false

expecting success of 5606.19 'chooses correct default initial branch name': 
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=foo init --bare empty &&
	test_config -C empty lsrefs.unborn advertise &&
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=up -c protocol.version=2 clone empty whats-up &&
	test refs/heads/foo = $(git -C whats-up symbolic-ref HEAD) &&
	test refs/heads/foo = $(git -C whats-up config branch.foo.merge)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5606-clone-options/empty/
Cloning into 'whats-up'...
warning: You appear to have cloned an empty repository.
done.
ok 19 - chooses correct default initial branch name

expecting success of 5606.20 'guesses initial branch name correctly': 
	git init --initial-branch=guess initial-branch &&
	test_commit -C initial-branch no-spoilers &&
	git -C initial-branch branch abc guess &&
	git clone initial-branch is-it &&
	test refs/heads/guess = $(git -C is-it symbolic-ref HEAD) &&

	git -c init.defaultBranch=none init --bare no-head &&
	git -C initial-branch push ../no-head guess abc &&
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git clone no-head is-it2 &&
	test_must_fail git -C is-it2 symbolic-ref refs/remotes/origin/HEAD &&
	git -C no-head update-ref --no-deref HEAD refs/heads/guess &&
	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=guess clone no-head is-it3 &&
	test refs/remotes/origin/guess = \
		$(git -C is-it3 symbolic-ref refs/remotes/origin/HEAD)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5606-clone-options/initial-branch/.git/
[guess (root-commit) d4c6c35] no-spoilers
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 no-spoilers.t
Cloning into 'is-it'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5606-clone-options/no-head/
To ../no-head
 * [new branch]      guess -> guess
 * [new branch]      abc -> abc
Cloning into 'is-it2'...
done.
warning: remote HEAD refers to nonexistent ref, unable to checkout
fatal: ref refs/remotes/origin/HEAD is not a symbolic ref
Cloning into 'is-it3'...
done.
ok 20 - guesses initial branch name correctly

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5607-clone-bundle.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5607-clone-bundle/.git/
expecting success of 5607.1 'setup': 
	test_oid_cache <<-EOF &&
	version sha1:2
	version sha256:3
	EOF
	test_commit initial &&
	test_tick &&
	git tag -m tag tag &&
	test_commit second &&
	test_commit third &&
	git tag -d initial &&
	git tag -d second &&
	git tag -d third

[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[main 21f74a9] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[main d31729a] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third.t
Deleted tag 'initial' (was 24b24cf)
Deleted tag 'second' (was 21f74a9)
Deleted tag 'third' (was d31729a)
ok 1 - setup

expecting success of 5607.2 '"verify" needs a worktree': 
	git bundle create tip.bundle -1 main &&
	nongit test_must_fail git bundle verify ../tip.bundle 2>err &&
	test_i18ngrep "need a repository" err

error: need a repository to verify a bundle
ok 2 - "verify" needs a worktree

expecting success of 5607.3 'annotated tags can be excluded by rev-list options': 
	git bundle create bundle --all --since=7.Apr.2005.15:14:00.-0700 &&
	cat >expect <<-EOF &&
	$(git rev-parse HEAD)	HEAD
	$(git rev-parse tag)	refs/tags/tag
	$(git rev-parse main)	refs/heads/main
	EOF
	git ls-remote bundle >actual &&
	test_cmp expect actual &&

	git bundle create bundle --all --since=7.Apr.2005.15:16:00.-0700 &&
	cat >expect <<-EOF &&
	$(git rev-parse HEAD)	HEAD
	$(git rev-parse main)	refs/heads/main
	EOF
	git ls-remote bundle >actual &&
	test_cmp expect actual

ok 3 - annotated tags can be excluded by rev-list options

expecting success of 5607.4 'die if bundle file cannot be created': 
	mkdir adir &&
	test_must_fail git bundle create adir --all

fatal: cannot create 'adir': Is a directory
ok 4 - die if bundle file cannot be created

expecting success of 5607.5 'bundle --stdin': 
	echo main | git bundle create stdin-bundle.bdl --stdin &&
	cat >expect <<-EOF &&
	$(git rev-parse main)	refs/heads/main
	EOF
	git ls-remote stdin-bundle.bdl >actual &&
	test_cmp expect actual

ok 5 - bundle --stdin

expecting success of 5607.6 'bundle --stdin <rev-list options>': 
	echo main | git bundle create hybrid-bundle.bdl --stdin tag &&
	cat >expect <<-EOF &&
	$(git rev-parse main)	refs/heads/main
	EOF
	git ls-remote stdin-bundle.bdl >actual &&
	test_cmp expect actual

ok 6 - bundle --stdin <rev-list options>

expecting success of 5607.7 'empty bundle file is rejected': 
	>empty-bundle &&
	test_must_fail git fetch empty-bundle

fatal: invalid gitfile format: empty-bundle
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ok 7 - empty bundle file is rejected

expecting success of 5607.8 'ridiculously long subject in boundary': 
	>file4 &&
	test_tick &&
	git add file4 &&
	printf "%01200d\n" 0 | git commit -F - &&
	test_commit fifth &&
	git bundle create long-subject-bundle.bdl HEAD^..HEAD &&
	cat >expect <<-EOF &&
	$(git rev-parse main) HEAD
	EOF
	git bundle list-heads long-subject-bundle.bdl >actual &&
	test_cmp expect actual &&

	git fetch long-subject-bundle.bdl &&

	algo=$(test_oid algo) &&
	if test "$algo" != sha1
	then
		echo "@object-format=sha256"
	fi >expect &&
	cat >>expect <<-EOF &&
	-$(git log --pretty=format:"%H %s" -1 HEAD^)
	$(git rev-parse HEAD) HEAD
	EOF

	if test "$algo" = sha1
	then
		head -n 3 long-subject-bundle.bdl
	else
		head -n 4 long-subject-bundle.bdl
	fi | grep -v "^#" >actual &&

	test_cmp expect actual

[main 731e220] 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file4
[main fc029ac] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fifth.t
From long-subject-bundle.bdl
 * branch            HEAD       -> FETCH_HEAD
ok 8 - ridiculously long subject in boundary

expecting success of 5607.9 'prerequisites with an empty commit message': 
	>file1 &&
	git add file1 &&
	test_tick &&
	git commit --allow-empty-message -m "" &&
	test_commit file2 &&
	git bundle create bundle HEAD^.. &&
	git bundle verify bundle

[main 1e44ac2] 
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
[main 3fdaba7] file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2.t
bundle is okay
The bundle contains this ref:
3fdaba71a8ccb4d44ffe75938a9a115cfea4806a HEAD
The bundle requires this ref:
1e44ac2f9ccb8d3590010e3ee941dc1d4be2e304 
The bundle uses this hash algorithm: sha1
ok 9 - prerequisites with an empty commit message

expecting success of 5607.10 'failed bundle creation does not leave cruft': 
	# This fails because the bundle would be empty.
	test_must_fail git bundle create fail.bundle main..main &&
	test_path_is_missing fail.bundle.lock

fatal: Refusing to create empty bundle.
ok 10 - failed bundle creation does not leave cruft

expecting success of 5607.11 'fetch SHA-1 from bundle': 
	test_create_repo foo &&
	test_commit -C foo x &&
	git -C foo bundle create tip.bundle -1 main &&
	git -C foo rev-parse HEAD >hash &&

	# Exercise to ensure that fetching a SHA-1 from a bundle works with no
	# errors
	git fetch --no-tags foo/tip.bundle "$(cat hash)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5607-clone-bundle/foo/.git/
[main (root-commit) 1c117dc] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
From foo/tip.bundle
 * branch            1c117dcf9e38d9b172303c96689665da0f42a973 -> FETCH_HEAD
ok 11 - fetch SHA-1 from bundle

expecting success of 5607.12 'git bundle uses expected default format': 
	git bundle create bundle HEAD^.. &&
	cat >expect <<-EOF &&
	# v$(test_oid version) git bundle
	EOF
	head -n1 bundle >actual &&
	test_cmp expect actual

ok 12 - git bundle uses expected default format

expecting success of 5607.13 'git bundle v3 has expected contents': 
	git branch side HEAD &&
	git bundle create --version=3 bundle HEAD^..side &&
	head -n2 bundle >actual &&
	cat >expect <<-EOF &&
	# v3 git bundle
	@object-format=$(test_oid algo)
	EOF
	test_cmp expect actual &&
	git bundle verify bundle

bundle is okay
The bundle contains this ref:
3fdaba71a8ccb4d44ffe75938a9a115cfea4806a refs/heads/side
The bundle requires this ref:
1e44ac2f9ccb8d3590010e3ee941dc1d4be2e304 
The bundle uses this hash algorithm: sha1
ok 13 - git bundle v3 has expected contents

expecting success of 5607.14 'git bundle v3 rejects unknown capabilities': 
	cat >new <<-EOF &&
	# v3 git bundle
	@object-format=$(test_oid algo)
	@unknown=silly
	EOF
	test_must_fail git bundle verify new 2>output &&
	test_i18ngrep "unknown capability .unknown=silly." output

error: unknown capability 'unknown=silly'
ok 14 - git bundle v3 rejects unknown capabilities

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5609-clone-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5609-clone-branch/.git/
expecting success of 5609.1 'setup': 
	mkdir parent &&
	(cd parent && git init &&
	 echo one >file && git add file && git commit -m one &&
	 git checkout -b two &&
	 echo two >file && git add file && git commit -m two &&
	 git checkout main) &&
	mkdir empty &&
	(cd empty && git init)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5609-clone-branch/parent/.git/
[main (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'two'
[two 2f98c16] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5609-clone-branch/empty/.git/
ok 1 - setup

expecting success of 5609.2 'vanilla clone chooses HEAD': 
	git clone parent clone &&
	(cd clone &&
	 check_HEAD main &&
	 check_file one
	)

Cloning into 'clone'...
done.
ok 2 - vanilla clone chooses HEAD

expecting success of 5609.3 'clone -b chooses specified branch': 
	git clone -b two parent clone-two &&
	(cd clone-two &&
	 check_HEAD two &&
	 check_file two
	)

Cloning into 'clone-two'...
done.
ok 3 - clone -b chooses specified branch

expecting success of 5609.4 'clone -b sets up tracking': 
	(cd clone-two &&
	 echo origin >expect &&
	 git config branch.two.remote >actual &&
	 echo refs/heads/two >>expect &&
	 git config branch.two.merge >>actual &&
	 test_cmp expect actual
	)

ok 4 - clone -b sets up tracking

expecting success of 5609.5 'clone -b does not munge remotes/origin/HEAD': 
	(cd clone-two &&
	 echo refs/remotes/origin/main >expect &&
	 git symbolic-ref refs/remotes/origin/HEAD >actual &&
	 test_cmp expect actual
	)

ok 5 - clone -b does not munge remotes/origin/HEAD

expecting success of 5609.6 'clone -b with bogus branch': 
	test_must_fail git clone -b bogus parent clone-bogus

Cloning into 'clone-bogus'...
fatal: Remote branch bogus not found in upstream origin
ok 6 - clone -b with bogus branch

expecting success of 5609.7 'clone -b not allowed with empty repos': 
	test_must_fail git clone -b branch empty clone-branch-empty

Cloning into 'clone-branch-empty'...
fatal: Remote branch branch not found in upstream origin
ok 7 - clone -b not allowed with empty repos

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5610-clone-detached.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5610-clone-detached/.git/
expecting success of 5610.1 'setup': 
	echo one >file &&
	git add file &&
	git commit -m one &&
	echo two >file &&
	git commit -a -m two &&
	git tag two &&
	echo three >file &&
	git commit -a -m three

[main (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 2f98c16] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0c9f2ac] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 5610.2 'clone repo (detached HEAD points to branch)': 
	git checkout main^0 &&
	git clone "file://$PWD" detached-branch

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0c9f2ac three
Cloning into 'detached-branch'...
ok 2 - clone repo (detached HEAD points to branch)

expecting success of 5610.3 'cloned HEAD matches': 
	echo three >expect &&
	git --git-dir=detached-branch/.git log -1 --format=%s >actual &&
	test_cmp expect actual

ok 3 - cloned HEAD matches

checking known breakage of 5610.4 'cloned HEAD is detached': 
	head_is_detached detached-branch

0c9f2ac7142a96473515181c5d9c2ce77c5ea4ed
refs/heads/main
test_must_fail: command succeeded: git --git-dir=detached-branch/.git symbolic-ref HEAD
not ok 4 - cloned HEAD is detached # TODO known breakage

expecting success of 5610.5 'clone repo (detached HEAD points to tag)': 
	git checkout two^0 &&
	git clone "file://$PWD" detached-tag

Previous HEAD position was 0c9f2ac three
HEAD is now at 2f98c16 two
Cloning into 'detached-tag'...
Note: switching to '2f98c16ed3231a950c127212a79f176334983d3a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 5 - clone repo (detached HEAD points to tag)

expecting success of 5610.6 'cloned HEAD matches': 
	echo two >expect &&
	git --git-dir=detached-tag/.git log -1 --format=%s >actual &&
	test_cmp expect actual

ok 6 - cloned HEAD matches

expecting success of 5610.7 'cloned HEAD is detached': 
	head_is_detached detached-tag

2f98c16ed3231a950c127212a79f176334983d3a
fatal: ref HEAD is not a symbolic ref
ok 7 - cloned HEAD is detached

expecting success of 5610.8 'clone repo (detached HEAD points to history)': 
	git checkout two^ &&
	git clone "file://$PWD" detached-history

Previous HEAD position was 2f98c16 two
HEAD is now at 1993c08 one
Cloning into 'detached-history'...
Note: switching to '1993c08d5743a2c4719f8ed3b8cc9b60d54d741e'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 8 - clone repo (detached HEAD points to history)

expecting success of 5610.9 'cloned HEAD matches': 
	echo one >expect &&
	git --git-dir=detached-history/.git log -1 --format=%s >actual &&
	test_cmp expect actual

ok 9 - cloned HEAD matches

expecting success of 5610.10 'cloned HEAD is detached': 
	head_is_detached detached-history

1993c08d5743a2c4719f8ed3b8cc9b60d54d741e
fatal: ref HEAD is not a symbolic ref
ok 10 - cloned HEAD is detached

expecting success of 5610.11 'clone repo (orphan detached HEAD)': 
	git checkout main^0 &&
	echo four >file &&
	git commit -a -m four &&
	git clone "file://$PWD" detached-orphan

Previous HEAD position was 1993c08 one
HEAD is now at 0c9f2ac three
[detached HEAD 09d9fb6] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'detached-orphan'...
Note: switching to '09d9fb6c1b2f666fb510a7b12d14c7884d01e34e'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

ok 11 - clone repo (orphan detached HEAD)

expecting success of 5610.12 'cloned HEAD matches': 
	echo four >expect &&
	git --git-dir=detached-orphan/.git log -1 --format=%s >actual &&
	test_cmp expect actual

ok 12 - cloned HEAD matches

expecting success of 5610.13 'cloned HEAD is detached': 
	head_is_detached detached-orphan

09d9fb6c1b2f666fb510a7b12d14c7884d01e34e
fatal: ref HEAD is not a symbolic ref
ok 13 - cloned HEAD is detached

# still have 1 known breakage(s)
# passed all remaining 12 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5611-clone-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5611-clone-config/.git/
expecting success of 5611.1 'clone -c sets config in cloned repo': 
	rm -rf child &&
	git clone -c core.foo=bar . child &&
	echo bar >expect &&
	git --git-dir=child/.git config core.foo >actual &&
	test_cmp expect actual

Cloning into 'child'...
warning: You appear to have cloned an empty repository.
done.
ok 1 - clone -c sets config in cloned repo

expecting success of 5611.2 'clone -c can set multi-keys': 
	rm -rf child &&
	git clone -c core.foo=bar -c core.foo=baz . child &&
	test_write_lines bar baz >expect &&
	git --git-dir=child/.git config --get-all core.foo >actual &&
	test_cmp expect actual

Cloning into 'child'...
warning: You appear to have cloned an empty repository.
done.
ok 2 - clone -c can set multi-keys

expecting success of 5611.3 'clone -c can set multi-keys, including some empty': 
	rm -rf child &&
	git clone -c credential.helper= -c credential.helper=hi . child &&
	printf "%s\n" "" hi >expect &&
	git --git-dir=child/.git config --get-all credential.helper >actual &&
	test_cmp expect actual

Cloning into 'child'...
warning: You appear to have cloned an empty repository.
done.
ok 3 - clone -c can set multi-keys, including some empty

expecting success of 5611.4 'clone -c without a value is boolean true': 
	rm -rf child &&
	git clone -c core.foo . child &&
	echo true >expect &&
	git --git-dir=child/.git config --bool core.foo >actual &&
	test_cmp expect actual

Cloning into 'child'...
warning: You appear to have cloned an empty repository.
done.
ok 4 - clone -c without a value is boolean true

expecting success of 5611.5 'clone -c config is available during clone': 
	echo content >file &&
	git add file &&
	git commit -m one &&
	rm -rf child &&
	git clone -c core.autocrlf . child &&
	printf "content\\r\\n" >expect &&
	test_cmp expect child/file

[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'child'...
done.
ok 5 - clone -c config is available during clone

expecting success of 5611.6 'clone -c remote.origin.fetch=<refspec> works': 
	rm -rf child &&
	git update-ref refs/grab/it refs/heads/main &&
	git update-ref refs/leave/out refs/heads/main &&
	git clone -c "remote.origin.fetch=+refs/grab/*:refs/grab/*" . child &&
	git -C child for-each-ref --format="%(refname)" >actual &&

	cat >expect <<-\EOF &&
	refs/grab/it
	refs/heads/main
	refs/remotes/origin/HEAD
	refs/remotes/origin/main
	EOF
	test_cmp expect actual

Cloning into 'child'...
done.
ok 6 - clone -c remote.origin.fetch=<refspec> works

expecting success of 5611.7 'git -c remote.origin.fetch=<refspec> clone works': 
	rm -rf child &&
	git -c "remote.origin.fetch=+refs/grab/*:refs/grab/*" clone . child &&
	git -C child for-each-ref --format="%(refname)" >actual &&

	cat >expect <<-\EOF &&
	refs/grab/it
	refs/heads/main
	refs/remotes/origin/HEAD
	refs/remotes/origin/main
	EOF
	test_cmp expect actual

Cloning into 'child'...
done.
ok 7 - git -c remote.origin.fetch=<refspec> clone works

expecting success of 5611.8 'clone -c remote.<remote>.fetch=<refspec> --origin=<name>': 
	rm -rf child &&
	git clone --origin=upstream \
		  -c "remote.upstream.fetch=+refs/grab/*:refs/grab/*" \
		  -c "remote.origin.fetch=+refs/leave/*:refs/leave/*" \
		  . child &&
	git -C child for-each-ref --format="%(refname)" >actual &&

	cat >expect <<-\EOF &&
	refs/grab/it
	refs/heads/main
	refs/remotes/upstream/HEAD
	refs/remotes/upstream/main
	EOF
	test_cmp expect actual

Cloning into 'child'...
done.
ok 8 - clone -c remote.<remote>.fetch=<refspec> --origin=<name>

expecting success of 5611.9 'set up shallow repository': 
	git clone --depth=1 --no-local . shallow-repo

Cloning into 'shallow-repo'...
ok 9 - set up shallow repository

expecting success of 5611.10 'clone.rejectshallow=true should reject cloning shallow repo': 
	test_when_finished "rm -rf out" &&
	test_must_fail git -c clone.rejectshallow=true clone --no-local shallow-repo out 2>err &&
	test_i18ngrep -e "source repository is shallow, reject to clone." err &&

	git -c clone.rejectshallow=false clone --no-local shallow-repo out

fatal: source repository is shallow, reject to clone.
Cloning into 'out'...
ok 10 - clone.rejectshallow=true should reject cloning shallow repo

expecting success of 5611.11 'option --[no-]reject-shallow override clone.rejectshallow config': 
	test_when_finished "rm -rf out" &&
	test_must_fail git -c clone.rejectshallow=false clone --reject-shallow --no-local shallow-repo out 2>err &&
	test_i18ngrep -e "source repository is shallow, reject to clone." err &&

	git -c clone.rejectshallow=true clone --no-reject-shallow --no-local shallow-repo out

fatal: source repository is shallow, reject to clone.
Cloning into 'out'...
ok 11 - option --[no-]reject-shallow override clone.rejectshallow config

expecting success of 5611.12 'clone.rejectshallow=true should succeed cloning normal repo': 
	test_when_finished "rm -rf out" &&
	git -c clone.rejectshallow=true clone --no-local . out

Cloning into 'out'...
ok 12 - clone.rejectshallow=true should succeed cloning normal repo

ok 13 # skip clone -c core.hideDotFiles (missing MINGW)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5613-info-alternate.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/.git/
expecting success of 5613.1 'preparing first repository': 
	test_create_repo A && (
		cd A &&
		echo "Hello World" > file1 &&
		git add file1 &&
		git commit -m "Initial commit" file1 &&
		git repack -a -d &&
		git prune
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/A/.git/
[master (root-commit) 7786e5c] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 1 - preparing first repository

expecting success of 5613.2 'preparing second repository': 
	git clone -l -s A B && (
		cd B &&
		echo "foo bar" > file2 &&
		git add file2 &&
		git commit -m "next commit" file2 &&
		git repack -a -d -l &&
		git prune
	)

Cloning into 'B'...
done.
[master 8f8dc2d] next commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 2 - preparing second repository

expecting success of 5613.3 'preparing third repository': 
	git clone -l -s B C && (
		cd C &&
		echo "Goodbye, cruel world" > file3 &&
		git add file3 &&
		git commit -m "one more" file3 &&
		git repack -a -d -l &&
		git prune
	)

Cloning into 'C'...
done.
[master 6554795] one more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 3 - preparing third repository

expecting success of 5613.4 'count-objects shows the alternates': 
	cat >expect <<-EOF &&
	alternate: $(pwd)/B/.git/objects
	alternate: $(pwd)/A/.git/objects
	EOF
	git -C C count-objects -v >actual &&
	grep ^alternate: actual >actual.alternates &&
	test_cmp expect actual.alternates

ok 4 - count-objects shows the alternates

expecting success of 5613.5 'creating too deep nesting': 
	git clone -l -s C D &&
	git clone -l -s D E &&
	git clone -l -s E F &&
	git clone -l -s F G &&
	git clone --bare -l -s G H

Cloning into 'D'...
done.
Cloning into 'E'...
done.
Cloning into 'F'...
done.
Cloning into 'G'...
done.
Cloning into bare repository 'H'...
done.
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
ok 5 - creating too deep nesting

expecting success of 5613.6 'validity of seventh repository': 
	git -C G fsck

ok 6 - validity of seventh repository

expecting success of 5613.7 'invalidity of eighth repository': 
	test_must_fail git -C H fsck

error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
broken link from  commit 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
              to  commit 7786e5cb9349ad9b68f922aa0bbab05887bb9b4e
broken link from    tree a34a1216018cdd9b811a02de226d708856167e0e
              to    blob 557db03de997c86a4a028e1ebd3a1ceb225be238
missing blob 557db03de997c86a4a028e1ebd3a1ceb225be238
missing commit 7786e5cb9349ad9b68f922aa0bbab05887bb9b4e
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
error: /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/B/.git/objects: ignoring alternate object stores, nesting too deep
ok 7 - invalidity of eighth repository

expecting success of 5613.8 'breaking of loops': 
	echo "$(pwd)"/B/.git/objects >>A/.git/objects/info/alternates &&
	git -C C fsck

ok 8 - breaking of loops

expecting success of 5613.9 'that info/alternates is necessary': 
	rm -f C/.git/objects/info/alternates &&
	test_must_fail git -C C fsck

error: refs/remotes/origin/HEAD: invalid sha1 pointer 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: refs/remotes/origin/master: invalid sha1 pointer 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: refs/remotes/origin/HEAD: invalid reflog entry 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: refs/heads/master: invalid reflog entry 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: refs/heads/master: invalid reflog entry 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: HEAD: invalid reflog entry 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
error: HEAD: invalid reflog entry 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
broken link from  commit 655479520d462677337cb8caf01b8d739b2d68ff
              to  commit 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
missing commit 8f8dc2d593d08b0b9b891c39417b36b4432fa10b
missing blob 557db03de997c86a4a028e1ebd3a1ceb225be238
missing blob d675fa44e50606caa705c3f48de02cf129c7f9a2
ok 9 - that info/alternates is necessary

expecting success of 5613.10 'that relative alternate is possible for current dir': 
	echo "../../../B/.git/objects" >C/.git/objects/info/alternates &&
	git fsck

notice: HEAD points to an unborn branch (master)
notice: No default references
ok 10 - that relative alternate is possible for current dir

expecting success of 5613.11 'that relative alternate is recursive': 
	git -C D fsck

ok 11 - that relative alternate is recursive

expecting success of 5613.12 'relative duplicates are eliminated': 
	mkdir -p deep/subdir &&
	git init --bare deep/subdir/duplicate.git &&
	cat >deep/subdir/duplicate.git/objects/info/alternates <<-\EOF &&
	../../../../C/.git/objects
	../../../../A/.git/objects
	EOF
	cat >expect <<-EOF &&
	alternate: $(pwd)/C/.git/objects
	alternate: $(pwd)/B/.git/objects
	alternate: $(pwd)/A/.git/objects
	EOF
	git -C deep/subdir/duplicate.git count-objects -v >actual &&
	grep ^alternate: actual >actual.alternates &&
	test_cmp expect actual.alternates

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5613-info-alternate/deep/subdir/duplicate.git/
ok 12 - relative duplicates are eliminated

checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
ok 13 # skip dup finding can be case-insensitive (missing CASE_INSENSITIVE_FS)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5615-alternate-env.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5615-alternate-env/.git/
expecting success of 5615.1 'create alternate repositories': 
	git init --bare one.git &&
	one=$(echo one | git -C one.git hash-object -w --stdin) &&
	git init --bare two.git &&
	two=$(echo two | git -C two.git hash-object -w --stdin)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5615-alternate-env/one.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5615-alternate-env/two.git/
ok 1 - create alternate repositories

expecting success of 5615.2 'objects inaccessible without alternates': 
	check_obj "" <<-EOF
	$one missing
	$two missing
	EOF

ok 2 - objects inaccessible without alternates

expecting success of 5615.3 'access alternate via absolute path': 
	check_obj "$PWD/one.git/objects" <<-EOF
	$one blob
	$two missing
	EOF

ok 3 - access alternate via absolute path

expecting success of 5615.4 'access multiple alternates': 
	check_obj "$PWD/one.git/objects:$PWD/two.git/objects" <<-EOF
	$one blob
	$two blob
	EOF

ok 4 - access multiple alternates

expecting success of 5615.5 'access alternate via relative path (bare)': 
	git init --bare bare.git &&
	check_obj "../one.git/objects" -C bare.git <<-EOF
	$one blob
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5615-alternate-env/bare.git/
ok 5 - access alternate via relative path (bare)

expecting success of 5615.6 'access alternate via relative path (worktree)': 
	git init worktree &&
	check_obj "../one.git/objects" -C worktree <<-EOF
	$one blob
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5615-alternate-env/worktree/.git/
ok 6 - access alternate via relative path (worktree)

expecting success of 5615.7 'access alternate via relative path (subdir)': 
	mkdir subdir &&
	check_obj "one.git/objects" -C subdir <<-EOF
	$one blob
	EOF

ok 7 - access alternate via relative path (subdir)

expecting success of 5615.8 'mix of quoted and unquoted alternates': 
	check_obj "$quoted:$unquoted" <<-EOF
	$one blob
	$two blob
	EOF

ok 8 - mix of quoted and unquoted alternates

expecting success of 5615.9 'broken quoting falls back to interpreting raw': 
	mv one.git \"one.git &&
	check_obj \"one.git/objects <<-EOF
	$one blob
	EOF

ok 9 - broken quoting falls back to interpreting raw

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5612-clone-refspec.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.git/
expecting success of 5612.1 'setup': 
	# Make two branches, "main" and "side"
	echo one >file &&
	git add file &&
	git commit -m one &&
	echo two >file &&
	git commit -a -m two &&
	git tag two &&
	echo three >file &&
	git commit -a -m three &&
	git checkout -b side &&
	echo four >file &&
	git commit -a -m four &&
	git checkout main &&
	git tag five &&

	# default clone
	git clone . dir_all &&

	# default clone --no-tags
	git clone --no-tags . dir_all_no_tags &&

	# default --single that follows HEAD=main
	git clone --single-branch . dir_main &&

	# default --single that follows HEAD=main with no tags
	git clone --single-branch --no-tags . dir_main_no_tags &&

	# default --single that follows HEAD=side
	git checkout side &&
	git clone --single-branch . dir_side &&

	# explicit --single that follows side
	git checkout main &&
	git clone --single-branch --branch side . dir_side2 &&

	# default --single with --mirror
	git clone --single-branch --mirror . dir_mirror &&

	# default --single with --branch and --mirror
	git clone --single-branch --mirror --branch side . dir_mirror_side &&

	# --single that does not know what branch to follow
	git checkout two^ &&
	git clone --single-branch . dir_detached &&

	# explicit --single with tag
	git clone --single-branch --branch two . dir_tag &&

	# explicit --single with tag and --no-tags
	git clone --single-branch --no-tags --branch two . dir_tag_no_tags &&

	# advance both "main" and "side" branches
	git checkout side &&
	echo five >file &&
	git commit -a -m five &&
	git checkout main &&
	echo six >file &&
	git commit -a -m six &&

	# update tag
	git tag -d two && git tag two

[main (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 2f98c16] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0c9f2ac] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
[side 09d9fb6] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Cloning into 'dir_all'...
done.
Cloning into 'dir_all_no_tags'...
done.
Cloning into 'dir_main'...
done.
Cloning into 'dir_main_no_tags'...
done.
Switched to branch 'side'
Cloning into 'dir_side'...
done.
Switched to branch 'main'
Cloning into 'dir_side2'...
done.
Cloning into bare repository 'dir_mirror'...
done.
Cloning into bare repository 'dir_mirror_side'...
done.
Note: switching to 'two^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1993c08 one
Cloning into 'dir_detached'...
done.
Note: switching to '1993c08d5743a2c4719f8ed3b8cc9b60d54d741e'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Cloning into 'dir_tag'...
done.
Note: switching to '2f98c16ed3231a950c127212a79f176334983d3a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Cloning into 'dir_tag_no_tags'...
done.
Note: switching to '2f98c16ed3231a950c127212a79f176334983d3a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Previous HEAD position was 1993c08 one
Switched to branch 'side'
[side c0aa622] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main 5efd04f] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Deleted tag 'two' (was 2f98c16)
ok 1 - setup

expecting success of 5612.2 'by default all branches will be kept updated': 
	(
		cd dir_all &&
		git fetch &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# follow both main and side
	git for-each-ref refs/heads >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   0c9f2ac..5efd04f  main       -> origin/main
   09d9fb6..c0aa622  side       -> origin/side
ok 2 - by default all branches will be kept updated

expecting success of 5612.3 'by default no tags will be kept updated': 
	(
		cd dir_all &&
		git fetch &&
		git for-each-ref refs/tags >../actual
	) &&
	git for-each-ref refs/tags >expect &&
	! test_cmp expect actual &&
	test_line_count = 2 actual

--- expect	2022-12-28 07:54:49.875356593 +0000
+++ actual	2022-12-28 07:54:49.855355858 +0000
@@ -1,2 +1,2 @@
 0c9f2ac7142a96473515181c5d9c2ce77c5ea4ed commit	refs/tags/five
-5efd04f7018dafa5c97b7431a71f14902ebbdf7e commit	refs/tags/two
+2f98c16ed3231a950c127212a79f176334983d3a commit	refs/tags/two
ok 3 - by default no tags will be kept updated

expecting success of 5612.4 'clone with --no-tags': 
	(
		cd dir_all_no_tags &&
		grep tagOpt .git/config &&
		git fetch &&
		git for-each-ref refs/tags >../actual
	) &&
	test_must_be_empty actual

	tagOpt = --no-tags
From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   0c9f2ac..5efd04f  main       -> origin/main
   09d9fb6..c0aa622  side       -> origin/side
ok 4 - clone with --no-tags

expecting success of 5612.5 '--single-branch while HEAD pointing at main': 
	(
		cd dir_main &&
		git fetch --force &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# only follow main
	git for-each-ref refs/heads/main >expect &&
	# get & check latest tags
	test_cmp expect actual &&
	(
		cd dir_main &&
		git fetch --tags --force &&
		git for-each-ref refs/tags >../actual
	) &&
	git for-each-ref refs/tags >expect &&
	test_cmp expect actual &&
	test_line_count = 2 actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   0c9f2ac..5efd04f  main       -> origin/main
From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 t [tag update]      two        -> two
ok 5 - --single-branch while HEAD pointing at main

expecting success of 5612.6 '--single-branch while HEAD pointing at main and --no-tags': 
	(
		cd dir_main_no_tags &&
		git fetch &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# only follow main
	git for-each-ref refs/heads/main >expect &&
	test_cmp expect actual &&
	# get tags (noop)
	(
		cd dir_main_no_tags &&
		git fetch &&
		git for-each-ref refs/tags >../actual
	) &&
	test_must_be_empty actual &&
	test_line_count = 0 actual &&
	# get tags with --tags overrides tagOpt
	(
		cd dir_main_no_tags &&
		git fetch --tags &&
		git for-each-ref refs/tags >../actual
	) &&
	git for-each-ref refs/tags >expect &&
	test_cmp expect actual &&
	test_line_count = 2 actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   0c9f2ac..5efd04f  main       -> origin/main
From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 * [new tag]         five       -> five
 * [new tag]         two        -> two
ok 6 - --single-branch while HEAD pointing at main and --no-tags

expecting success of 5612.7 '--single-branch while HEAD pointing at side': 
	(
		cd dir_side &&
		git fetch &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# only follow side
	git for-each-ref refs/heads/side >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   09d9fb6..c0aa622  side       -> origin/side
ok 7 - --single-branch while HEAD pointing at side

expecting success of 5612.8 '--single-branch with explicit --branch side': 
	(
		cd dir_side2 &&
		git fetch &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# only follow side
	git for-each-ref refs/heads/side >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   09d9fb6..c0aa622  side       -> origin/side
ok 8 - --single-branch with explicit --branch side

expecting success of 5612.9 '--single-branch with explicit --branch with tag fetches updated tag': 
	(
		cd dir_tag &&
		git fetch &&
		git for-each-ref refs/tags >../actual
	) &&
	git for-each-ref refs/tags >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 t [tag update]      two        -> two
ok 9 - --single-branch with explicit --branch with tag fetches updated tag

expecting success of 5612.10 '--single-branch with explicit --branch with tag fetches updated tag despite --no-tags': 
	(
		cd dir_tag_no_tags &&
		git fetch &&
		git for-each-ref refs/tags >../actual
	) &&
	git for-each-ref refs/tags/two >expect &&
	test_cmp expect actual &&
	test_line_count = 1 actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 t [tag update]      two        -> two
ok 10 - --single-branch with explicit --branch with tag fetches updated tag despite --no-tags

expecting success of 5612.11 '--single-branch with --mirror': 
	(
		cd dir_mirror &&
		git fetch &&
		git for-each-ref refs > ../actual
	) &&
	git for-each-ref refs >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
   0c9f2ac..5efd04f  main       -> main
 * [new branch]      side       -> side
 t [tag update]      two        -> two
ok 11 - --single-branch with --mirror

expecting success of 5612.12 '--single-branch with explicit --branch and --mirror': 
	(
		cd dir_mirror_side &&
		git fetch &&
		git for-each-ref refs > ../actual
	) &&
	git for-each-ref refs >expect &&
	test_cmp expect actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 * [new branch]      main       -> main
   09d9fb6..c0aa622  side       -> side
 t [tag update]      two        -> two
ok 12 - --single-branch with explicit --branch and --mirror

expecting success of 5612.13 '--single-branch with detached': 
	(
		cd dir_detached &&
		git fetch &&
		git for-each-ref refs/remotes/origin >refs &&
		sed -e "/HEAD$/d" \
		    -e "s|/remotes/origin/|/heads/|" refs >../actual
	) &&
	# nothing
	test_must_be_empty actual

From /<<PKGBUILDDIR>>/t/trash directory.t5612-clone-refspec/.
 * branch            HEAD       -> FETCH_HEAD
ok 13 - --single-branch with detached

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5614-clone-submodules-shallow.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/.git/
expecting success of 5614.1 'setup': 
	git checkout -b main &&
	test_commit commit1 &&
	test_commit commit2 &&
	mkdir sub &&
	(
		cd sub &&
		git init &&
		test_commit subcommit1 &&
		test_commit subcommit2 &&
		test_commit subcommit3
	) &&
	git submodule add "file://$pwd/sub" sub &&
	git commit -m "add submodule"

Switched to a new branch 'main'
[main (root-commit) ef004cf] commit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit1.t
[main 94955c5] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit2.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub/.git/
[master (root-commit) 6a80c79] subcommit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subcommit1.t
[master f6b6be8] subcommit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subcommit2.t
[master 5334747] subcommit3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subcommit3.t
Adding existing repo at 'sub' to the index
[main 2cdc003] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 1 - setup

expecting success of 5614.2 'nonshallow clone implies nonshallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --recurse-submodules "file://$pwd/." super_clone &&
	git -C super_clone log --oneline >lines &&
	test_line_count = 3 lines &&
	git -C super_clone/sub log --oneline >lines &&
	test_line_count = 3 lines

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 2 - nonshallow clone implies nonshallow submodule

expecting success of 5614.3 'shallow clone with shallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --recurse-submodules --depth 2 --shallow-submodules "file://$pwd/." super_clone &&
	git -C super_clone log --oneline >lines &&
	test_line_count = 2 lines &&
	git -C super_clone/sub log --oneline >lines &&
	test_line_count = 1 lines

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 3 - shallow clone with shallow submodule

expecting success of 5614.4 'shallow clone does not imply shallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone &&
	git -C super_clone log --oneline >lines &&
	test_line_count = 2 lines &&
	git -C super_clone/sub log --oneline >lines &&
	test_line_count = 3 lines

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 4 - shallow clone does not imply shallow submodule

expecting success of 5614.5 'shallow clone with non shallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --recurse-submodules --depth 2 --no-shallow-submodules "file://$pwd/." super_clone &&
	git -C super_clone log --oneline >lines &&
	test_line_count = 2 lines &&
	git -C super_clone/sub log --oneline >lines &&
	test_line_count = 3 lines

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 5 - shallow clone with non shallow submodule

expecting success of 5614.6 'non shallow clone with shallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --recurse-submodules --no-local --shallow-submodules "file://$pwd/." super_clone &&
	git -C super_clone log --oneline >lines &&
	test_line_count = 3 lines &&
	git -C super_clone/sub log --oneline >lines &&
	test_line_count = 1 lines

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 6 - non shallow clone with shallow submodule

expecting success of 5614.7 'clone follows shallow recommendation': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git config -f .gitmodules submodule.sub.shallow true &&
	git add .gitmodules &&
	git commit -m "recommend shallow for sub" &&
	git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 4 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 1 lines
	)

[main 4cafa4f] recommend shallow for sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 7 - clone follows shallow recommendation

expecting success of 5614.8 'get unshallow recommended shallow submodule': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git clone --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git submodule update --init --no-recommend-shallow &&
		git log --oneline >lines &&
		test_line_count = 4 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 8 - get unshallow recommended shallow submodule

expecting success of 5614.9 'clone follows non shallow recommendation': 
	test_when_finished "rm -rf super_clone" &&
	test_config_global protocol.file.allow always &&
	git config -f .gitmodules submodule.sub.shallow false &&
	git add .gitmodules &&
	git commit -m "recommend non shallow for sub" &&
	git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 5 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)

[main da7b4c9] recommend non shallow for sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5614-clone-submodules-shallow/super_clone/sub'...
Submodule path 'sub': checked out '53347473137b3c7bcd36cd24d83c719151112675'
ok 9 - clone follows non shallow recommendation

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5618-alternate-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5618-alternate-refs/.git/
expecting success of 5618.1 'set up local refs': 
	git checkout -b one &&
	test_tick &&
	git commit --allow-empty -m base &&
	test_tick &&
	git commit --allow-empty -m one &&
	git checkout -b two HEAD^ &&
	test_tick &&
	git commit --allow-empty -m two

Switched to a new branch 'one'
[one (root-commit) 00f38a4] base
 Author: A U Thor <author@example.com>
[one eae7140] one
 Author: A U Thor <author@example.com>
Switched to a new branch 'two'
[two e9067a7] two
 Author: A U Thor <author@example.com>
ok 1 - set up local refs

expecting success of 5618.2 'set up shared clone': 
	git clone -s . child &&
	cd child &&
	git merge origin/one

Cloning into 'child'...
done.
Merge made by the 'ort' strategy.
ok 2 - set up shared clone

expecting success of 5618.3 'rev-list --alternate-refs': 
	git rev-list --remotes=origin >expect &&
	git rev-list --alternate-refs >actual &&
	test_cmp expect actual

ok 3 - rev-list --alternate-refs

expecting success of 5618.4 'rev-list --not --alternate-refs': 
	git rev-parse HEAD >expect &&
	git rev-list HEAD --not --alternate-refs >actual &&
	test_cmp expect actual

ok 4 - rev-list --not --alternate-refs

expecting success of 5618.5 'limiting with alternateRefsPrefixes': 
	test_config core.alternateRefsPrefixes refs/heads/one &&
	git rev-list origin/one >expect &&
	git rev-list --alternate-refs >actual &&
	test_cmp expect actual

ok 5 - limiting with alternateRefsPrefixes

expecting success of 5618.6 'log --source shows .alternate marker': 
	git log --oneline --source --remotes=origin >expect.orig &&
	sed "s/origin.* /.alternate /" <expect.orig >expect &&
	git log --oneline --source --alternate-refs >actual &&
	test_cmp expect actual

ok 6 - log --source shows .alternate marker

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5617-clone-submodules-remote.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/.git/
expecting success of 5617.1 'setup': 
	git config --global protocol.file.allow always &&
	git checkout -b main &&
	test_commit commit1 &&
	mkdir sub &&
	(
		cd sub &&
		git init &&
		test_commit subcommit1 &&
		git tag sub_when_added_to_super &&
		git branch other
	) &&
	git submodule add "file://$pwd/sub" sub &&
	git commit -m "add submodule" &&
	(
		cd sub &&
		test_commit subcommit2
	)

Switched to a new branch 'main'
[main (root-commit) ef004cf] commit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit1.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub/.git/
[main (root-commit) 5110c63] subcommit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subcommit1.t
Adding existing repo at 'sub' to the index
[main 66376f1] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[main c24f10e] subcommit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subcommit2.t
ok 1 - setup

expecting success of 5617.2 'setup bare clone for server': 
	git clone --bare "file://$(pwd)/." srv.bare &&
	git -C srv.bare config --local uploadpack.allowfilter 1 &&
	git -C srv.bare config --local uploadpack.allowanysha1inwant 1

Cloning into bare repository 'srv.bare'...
ok 2 - setup bare clone for server

expecting success of 5617.3 'clone with --no-remote-submodules': 
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --no-remote-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone/sub &&
		git diff --exit-code sub_when_added_to_super
	)

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone/sub'...
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
ok 3 - clone with --no-remote-submodules

expecting success of 5617.4 'clone with --remote-submodules': 
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --remote-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone/sub &&
		git diff --exit-code remotes/origin/main
	)

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone/sub'...
Submodule path 'sub': checked out 'c24f10ee4103ccdd16360092dcb618ad35ca1288'
ok 4 - clone with --remote-submodules

expecting success of 5617.5 'check the default is --no-remote-submodules': 
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone/sub &&
		git diff --exit-code sub_when_added_to_super
	)

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone/sub'...
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
ok 5 - check the default is --no-remote-submodules

expecting success of 5617.6 'clone with --single-branch': 
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --single-branch "file://$pwd/." super_clone &&
	(
		cd super_clone/sub &&
		git rev-parse --verify origin/main &&
		test_must_fail git rev-parse --verify origin/other
	)

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone/sub'...
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
c24f10ee4103ccdd16360092dcb618ad35ca1288
fatal: Needed a single revision
ok 6 - clone with --single-branch

expecting success of 5617.7 'clone with --filter': 
	git clone --recurse-submodules \
		--filter blob:none --also-filter-submodules \
		"file://$pwd/srv.bare" super_clone &&
	test_cmp_config -C super_clone true remote.origin.promisor &&
	test_cmp_config -C super_clone blob:none remote.origin.partialclonefilter &&
	test_cmp_config -C super_clone/sub true remote.origin.promisor &&
	test_cmp_config -C super_clone/sub blob:none remote.origin.partialclonefilter

Cloning into 'super_clone'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone/sub'...
warning: filtering not recognized by server, ignoring
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
ok 7 - clone with --filter

expecting success of 5617.8 'filters applied with clone.filterSubmodules': 
	test_config_global clone.filterSubmodules true &&
	git clone --recurse-submodules --filter blob:none \
		"file://$pwd/srv.bare" super_clone2 &&
	test_cmp_config -C super_clone2 true remote.origin.promisor &&
	test_cmp_config -C super_clone2 blob:none remote.origin.partialclonefilter &&
	test_cmp_config -C super_clone2/sub true remote.origin.promisor &&
	test_cmp_config -C super_clone2/sub blob:none remote.origin.partialclonefilter

Cloning into 'super_clone2'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone2/sub'...
warning: filtering not recognized by server, ignoring
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
ok 8 - filters applied with clone.filterSubmodules

expecting success of 5617.9 '--no-also-filter-submodules overrides clone.filterSubmodules=true': 
	test_config_global clone.filterSubmodules true &&
	git clone --recurse-submodules --filter blob:none \
		--no-also-filter-submodules \
		"file://$pwd/srv.bare" super_clone3 &&
	test_cmp_config -C super_clone3 true remote.origin.promisor &&
	test_cmp_config -C super_clone3 blob:none remote.origin.partialclonefilter &&
	test_cmp_config -C super_clone3/sub false --default false remote.origin.promisor

Cloning into 'super_clone3'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5617-clone-submodules-remote/super_clone3/sub'...
Submodule path 'sub': checked out '5110c633865043debe00950928ed2147ea5b8714'
ok 9 - --no-also-filter-submodules overrides clone.filterSubmodules=true

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5700-protocol-v1.sh ***
checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
Starting git daemon ...
[2737] Ready to rumble
expecting success of 5700.1 'create repo to be served by git-daemon': 
	git init "$daemon_parent" &&
	test_commit -C "$daemon_parent" one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5700-protocol-v1/repo/parent/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - create repo to be served by git-daemon

expecting success of 5700.2 'clone with git:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -c protocol.version=1 \
		clone "$GIT_DAEMON_URL/parent" daemon_child 2>log &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v1
	grep "clone> .*\\\0\\\0version=1\\\0$" log &&
	# Server responded using protocol v1
	grep "clone< version 1" log

[2766] Connection from 127.0.0.1:50020
[2766] Extended attribute "host": 127.0.0.1:5700
[2766] Extended attribute "protocol": version=1
[2766] Request upload-pack for '/parent'
[2737] [2766] Disconnected
packet:        clone> git-upload-pack /parent\0host=127.0.0.1:5700\0\0version=1\0
packet:        clone< version 1
ok 2 - clone with git:// using protocol v1

expecting success of 5700.3 'fetch with git:// using protocol v1': 
	test_commit -C "$daemon_parent" two &&

	GIT_TRACE_PACKET=1 git -C daemon_child -c protocol.version=1 \
		fetch 2>log &&

	git -C daemon_child log -1 --format=%s origin/main >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v1
	grep "fetch> .*\\\0\\\0version=1\\\0$" log &&
	# Server responded using protocol v1
	grep "fetch< version 1" log

[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[2862] Connection from 127.0.0.1:50022
[2862] Extended attribute "host": 127.0.0.1:5700
[2862] Extended attribute "protocol": version=1
[2862] Request upload-pack for '/parent'
[2737] [2862] Disconnected
packet:        fetch> git-upload-pack /parent\0host=127.0.0.1:5700\0\0version=1\0
packet:        fetch< version 1
ok 3 - fetch with git:// using protocol v1

expecting success of 5700.4 'pull with git:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -C daemon_child -c protocol.version=1 \
		pull 2>log &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v1
	grep "fetch> .*\\\0\\\0version=1\\\0$" log &&
	# Server responded using protocol v1
	grep "fetch< version 1" log

[2937] Connection from 127.0.0.1:50024
[2937] Extended attribute "host": 127.0.0.1:5700
[2937] Extended attribute "protocol": version=1
[2937] Request upload-pack for '/parent'
[2737] [2937] Disconnected
Updating d79ce16..139b20d
Fast-forward
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
packet:        fetch> git-upload-pack /parent\0host=127.0.0.1:5700\0\0version=1\0
packet:        fetch< version 1
ok 4 - pull with git:// using protocol v1

expecting success of 5700.5 'push with git:// using protocol v1': 
	test_commit -C daemon_child three &&

	# Push to another branch, as the target repository has the
	# main branch checked out and we cannot push into it.
	GIT_TRACE_PACKET=1 git -C daemon_child -c protocol.version=1 \
		push origin HEAD:client_branch 2>log &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s client_branch >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v1
	grep "push> .*\\\0\\\0version=1\\\0$" log &&
	# Server responded using protocol v1
	grep "push< version 1" log

[main 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[3052] Connection from 127.0.0.1:50026
[3052] Extended attribute "host": 127.0.0.1:5700
[3052] Extended attribute "protocol": version=1
[3052] Request receive-pack for '/parent'
[2737] [3052] Disconnected
packet:         push> git-receive-pack /parent\0host=127.0.0.1:5700\0\0version=1\0
packet:         push< version 1
ok 5 - push with git:// using protocol v1

Stopping git daemon ...
Terminated
expecting success of 5700.6 'create repo to be served by file:// transport': 
	git init file_parent &&
	test_commit -C file_parent one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5700-protocol-v1/file_parent/.git/
[main (root-commit) af0b45c] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 6 - create repo to be served by file:// transport

expecting success of 5700.7 'clone with file:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -c protocol.version=1 \
		clone "file://$(pwd)/file_parent" file_child 2>log &&

	git -C file_child log -1 --format=%s >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "clone< version 1" log

packet:        clone< version 1
ok 7 - clone with file:// using protocol v1

expecting success of 5700.8 'fetch with file:// using protocol v1': 
	test_commit -C file_parent two &&

	GIT_TRACE_PACKET=1 git -C file_child -c protocol.version=1 \
		fetch 2>log &&

	git -C file_child log -1 --format=%s origin/main >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "fetch< version 1" log

[main 1dd7f79] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
packet:        fetch< version 1
ok 8 - fetch with file:// using protocol v1

expecting success of 5700.9 'pull with file:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -C file_child -c protocol.version=1 \
		pull 2>log &&

	git -C file_child log -1 --format=%s >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "fetch< version 1" log

Updating af0b45c..1dd7f79
Fast-forward
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
packet:        fetch< version 1
ok 9 - pull with file:// using protocol v1

expecting success of 5700.10 'push with file:// using protocol v1': 
	test_commit -C file_child three &&

	# Push to another branch, as the target repository has the
	# main branch checked out and we cannot push into it.
	GIT_TRACE_PACKET=1 git -C file_child -c protocol.version=1 \
		push origin HEAD:client_branch 2>log &&

	git -C file_child log -1 --format=%s >actual &&
	git -C file_parent log -1 --format=%s client_branch >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "push< version 1" log

[main a136e4a] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
packet:         push< version 1
ok 10 - push with file:// using protocol v1

expecting success of 5700.11 'cloning branchless tagless but not refless remote': 
	rm -rf server client &&

	git -c init.defaultbranch=main init server &&
	echo foo >server/foo.txt &&
	git -C server add foo.txt &&
	git -C server commit -m "message" &&
	git -C server update-ref refs/notbranch/alsonottag HEAD &&
	git -C server checkout --detach &&
	git -C server branch -D main &&
	git -C server symbolic-ref HEAD refs/heads/nonexistentbranch &&

	git -c protocol.version=1 clone "file://$(pwd)/server" client

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5700-protocol-v1/server/.git/
[main (root-commit) 271cf0d] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.txt
HEAD is now at 271cf0d message
Deleted branch main (was 271cf0d).
Cloning into 'client'...
warning: You appear to have cloned an empty repository.
ok 11 - cloning branchless tagless but not refless remote

expecting success of 5700.12 'setup ssh wrapper': 
	GIT_SSH="$GIT_BUILD_DIR/t/helper/test-fake-ssh" &&
	export GIT_SSH &&
	GIT_SSH_VARIANT=ssh &&
	export GIT_SSH_VARIANT &&
	export TRASH_DIRECTORY &&
	>"$TRASH_DIRECTORY"/ssh-output

ok 12 - setup ssh wrapper

expecting success of 5700.13 'create repo to be served by ssh:// transport': 
	git init ssh_parent &&
	test_commit -C ssh_parent one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5700-protocol-v1/ssh_parent/.git/
[main (root-commit) 06e07da] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 13 - create repo to be served by ssh:// transport

expecting success of 5700.14 'clone with ssh:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -c protocol.version=1 \
		clone "ssh://myhost:$(pwd)/ssh_parent" ssh_child 2>log &&
	expect_ssh git-upload-pack &&

	git -C ssh_child log -1 --format=%s >actual &&
	git -C ssh_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "clone< version 1" log

packet:        clone< version 1
ok 14 - clone with ssh:// using protocol v1

expecting success of 5700.15 'fetch with ssh:// using protocol v1': 
	test_commit -C ssh_parent two &&

	GIT_TRACE_PACKET=1 git -C ssh_child -c protocol.version=1 \
		fetch 2>log &&
	expect_ssh git-upload-pack &&

	git -C ssh_child log -1 --format=%s origin/main >actual &&
	git -C ssh_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "fetch< version 1" log

[main 738d2f7] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
packet:        fetch< version 1
ok 15 - fetch with ssh:// using protocol v1

expecting success of 5700.16 'pull with ssh:// using protocol v1': 
	GIT_TRACE_PACKET=1 git -C ssh_child -c protocol.version=1 \
		pull 2>log &&
	expect_ssh git-upload-pack &&

	git -C ssh_child log -1 --format=%s >actual &&
	git -C ssh_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "fetch< version 1" log

Updating 06e07da..738d2f7
Fast-forward
 two.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
packet:        fetch< version 1
ok 16 - pull with ssh:// using protocol v1

expecting success of 5700.17 'push with ssh:// using protocol v1': 
	test_commit -C ssh_child three &&

	# Push to another branch, as the target repository has the
	# main branch checked out and we cannot push into it.
	GIT_TRACE_PACKET=1 git -C ssh_child -c protocol.version=1 \
		push origin HEAD:client_branch 2>log &&
	expect_ssh git-receive-pack &&

	git -C ssh_child log -1 --format=%s >actual &&
	git -C ssh_parent log -1 --format=%s client_branch >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v1
	grep "push< version 1" log

[main 05cc2ac] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
packet:         push< version 1
ok 17 - push with ssh:// using protocol v1

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 17 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5701-git-serve.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5701-git-serve/.git/
expecting success of 5701.1 'test capability advertisement': 
	test_oid_cache <<-EOF &&
	wrong_algo sha1:sha256
	wrong_algo sha256:sha1
	EOF
	cat >expect <<-EOF &&
	version 2
	agent=git/$(git version | cut -d" " -f3)
	ls-refs=unborn
	fetch=shallow wait-for-done
	server-option
	object-format=$(test_oid algo)
	object-info
	0000
	EOF

	GIT_TEST_SIDEBAND_ALL=0 test-tool serve-v2 \
		--advertise-capabilities >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 1 - test capability advertisement

expecting success of 5701.2 'stateless-rpc flag does not list capabilities': 
	# Empty request
	test-tool pkt-line pack >in <<-EOF &&
	0000
	EOF
	test-tool serve-v2 --stateless-rpc >out <in &&
	test_must_be_empty out &&

	# EOF
	test-tool serve-v2 --stateless-rpc >out &&
	test_must_be_empty out

ok 2 - stateless-rpc flag does not list capabilities

expecting success of 5701.3 'request invalid capability': 
	test-tool pkt-line pack >in <<-EOF &&
	foobar
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	test_i18ngrep "unknown capability" err

fatal: unknown capability 'foobar'
ok 3 - request invalid capability

expecting success of 5701.4 'request with no command': 
	test-tool pkt-line pack >in <<-EOF &&
	agent=git/test
	object-format=$(test_oid algo)
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	test_i18ngrep "no command requested" err

fatal: no command requested
ok 4 - request with no command

expecting success of 5701.5 'request invalid command': 
	test-tool pkt-line pack >in <<-EOF &&
	command=foo
	object-format=$(test_oid algo)
	agent=git/test
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	test_i18ngrep "invalid command" err

fatal: invalid command 'foo'
ok 5 - request invalid command

expecting success of 5701.6 'request capability as command': 
	test-tool pkt-line pack >in <<-EOF &&
	command=agent
	object-format=$(test_oid algo)
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	grep invalid.command.*agent err

fatal: invalid command 'agent'
ok 6 - request capability as command

expecting success of 5701.7 'request command as capability': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	fetch
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	grep unknown.capability err

fatal: unknown capability 'fetch'
ok 7 - request command as capability

expecting success of 5701.8 'requested command is command=value': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs=whatever
	object-format=$(test_oid algo)
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	grep invalid.command.*ls-refs=whatever err

fatal: invalid command 'ls-refs=whatever'
ok 8 - requested command is command=value

expecting success of 5701.9 'wrong object-format': 
	test-tool pkt-line pack >in <<-EOF &&
	command=fetch
	agent=git/test
	object-format=$(test_oid wrong_algo)
	0000
	EOF
	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	test_i18ngrep "mismatched object format" err

fatal: mismatched object format: server sha1; client sha256
ok 9 - wrong object-format

expecting success of 5701.10 'setup some refs and tags': 
	test_commit one &&
	git branch dev main &&
	test_commit two &&
	git symbolic-ref refs/heads/release refs/heads/main &&
	git tag -a -m "annotated tag" annotated-tag

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 10 - setup some refs and tags

expecting success of 5701.11 'basics of ls-refs': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse HEAD) HEAD
	$(git rev-parse refs/heads/dev) refs/heads/dev
	$(git rev-parse refs/heads/main) refs/heads/main
	$(git rev-parse refs/heads/release) refs/heads/release
	$(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag
	$(git rev-parse refs/tags/one) refs/tags/one
	$(git rev-parse refs/tags/two) refs/tags/two
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 11 - basics of ls-refs

expecting success of 5701.12 'ls-refs complains about unknown options': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0001
	no-such-arg
	0000
	EOF

	test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
	grep unexpected.line.*no-such-arg err

fatal: unexpected line: 'no-such-arg'
ok 12 - ls-refs complains about unknown options

expecting success of 5701.13 'basic ref-prefixes': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0001
	ref-prefix refs/heads/main
	ref-prefix refs/tags/one
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse refs/heads/main) refs/heads/main
	$(git rev-parse refs/tags/one) refs/tags/one
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 13 - basic ref-prefixes

expecting success of 5701.14 'refs/heads prefix': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0001
	ref-prefix refs/heads/
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse refs/heads/dev) refs/heads/dev
	$(git rev-parse refs/heads/main) refs/heads/main
	$(git rev-parse refs/heads/release) refs/heads/release
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 14 - refs/heads prefix

expecting success of 5701.15 'ignore very large set of prefixes': 
	# generate a large number of ref-prefixes that we expect
	# to match nothing; the value here exceeds TOO_MANY_PREFIXES
	# from ls-refs.c.
	{
		echo command=ls-refs &&
		echo object-format=$(test_oid algo) &&
		echo 0001 &&
		perl -le "print \"ref-prefix refs/heads/\$_\" for (1..65536)" &&
		echo 0000
	} |
	test-tool pkt-line pack >in &&

	# and then confirm that we see unmatched prefixes anyway (i.e.,
	# that the prefix was not applied).
	cat >expect <<-EOF &&
	$(git rev-parse HEAD) HEAD
	$(git rev-parse refs/heads/dev) refs/heads/dev
	$(git rev-parse refs/heads/main) refs/heads/main
	$(git rev-parse refs/heads/release) refs/heads/release
	$(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag
	$(git rev-parse refs/tags/one) refs/tags/one
	$(git rev-parse refs/tags/two) refs/tags/two
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 15 - ignore very large set of prefixes

expecting success of 5701.16 'peel parameter': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0001
	peel
	ref-prefix refs/tags/
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag peeled:$(git rev-parse refs/tags/annotated-tag^{})
	$(git rev-parse refs/tags/one) refs/tags/one
	$(git rev-parse refs/tags/two) refs/tags/two
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 16 - peel parameter

expecting success of 5701.17 'symrefs parameter': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	0001
	symrefs
	ref-prefix refs/heads/
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse refs/heads/dev) refs/heads/dev
	$(git rev-parse refs/heads/main) refs/heads/main
	$(git rev-parse refs/heads/release) refs/heads/release symref-target:refs/heads/main
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 17 - symrefs parameter

expecting success of 5701.18 'sending server-options': 
	test-tool pkt-line pack >in <<-EOF &&
	command=ls-refs
	object-format=$(test_oid algo)
	server-option=hello
	server-option=world
	0001
	ref-prefix HEAD
	0000
	EOF

	cat >expect <<-EOF &&
	$(git rev-parse HEAD) HEAD
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 18 - sending server-options

expecting success of 5701.19 'unexpected lines are not allowed in fetch request': 
	git init server &&

	test-tool pkt-line pack >in <<-EOF &&
	command=fetch
	object-format=$(test_oid algo)
	0001
	this-is-not-a-command
	0000
	EOF

	(
		cd server &&
		test_must_fail test-tool serve-v2 --stateless-rpc
	) <in >/dev/null 2>err &&
	grep "unexpected line: .this-is-not-a-command." err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5701-git-serve/server/.git/
fatal: unexpected line: 'this-is-not-a-command'
ok 19 - unexpected lines are not allowed in fetch request

expecting success of 5701.20 'basics of object-info': 
	test-tool pkt-line pack >in <<-EOF &&
	command=object-info
	object-format=$(test_oid algo)
	0001
	size
	oid $(git rev-parse two:two.t)
	oid $(git rev-parse two:two.t)
	0000
	EOF

	cat >expect <<-EOF &&
	size
	$(git rev-parse two:two.t) $(wc -c <two.t | xargs)
	$(git rev-parse two:two.t) $(wc -c <two.t | xargs)
	0000
	EOF

	test-tool serve-v2 --stateless-rpc <in >out &&
	test-tool pkt-line unpack <out >actual &&
	test_cmp expect actual

ok 20 - basics of object-info

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5703-upload-pack-ref-in-want.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/.git/
expecting success of 5703.1 'setup repository': 
	test_commit a &&
	git branch -M main &&
	git checkout -b o/foo &&
	test_commit b &&
	test_commit c &&
	git checkout -b o/bar b &&
	test_commit d &&
	git checkout -b baz a &&
	test_commit e &&
	git checkout main &&
	test_commit f

[master (root-commit) ce450c7] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Switched to a new branch 'o/foo'
[o/foo 020ea9b] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[o/foo d9ea348] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Switched to a new branch 'o/bar'
[o/bar 1bd0260] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
Switched to a new branch 'baz'
[baz 10e5ce2] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e.t
Switched to branch 'main'
[main 0e847a7] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f.t
ok 1 - setup repository

expecting success of 5703.2 'config controls ref-in-want advertisement': 
	test-tool serve-v2 --advertise-capabilities >out &&
	perl -ne "/ref-in-want/ and print" out >out.filter &&
	test_must_be_empty out.filter &&

	git config uploadpack.allowRefInWant false &&
	test-tool serve-v2 --advertise-capabilities >out &&
	perl -ne "/ref-in-want/ and print" out >out.filter &&
	test_must_be_empty out.filter &&

	git config uploadpack.allowRefInWant true &&
	test-tool serve-v2 --advertise-capabilities >out &&
	perl -ne "/ref-in-want/ and print" out >out.filter &&
	test_file_not_empty out.filter

ok 2 - config controls ref-in-want advertisement

expecting success of 5703.3 'invalid want-ref line': 
	write_fetch_command >pkt <<-EOF &&
	want-ref refs/heads/non-existent
	EOF

	test-tool pkt-line pack <pkt >in &&
	test_must_fail test-tool serve-v2 --stateless-rpc 2>out <in &&
	grep "unknown ref" out

002bERR unknown ref refs/heads/non-existentfatal: unknown ref refs/heads/non-existent
ok 3 - invalid want-ref line

expecting success of 5703.4 'basic want-ref': 
	oid=$(git rev-parse f) &&
	cat >expected_refs <<-EOF &&
	$oid refs/heads/main
	EOF
	git rev-parse f >expected_commits &&

	write_fetch_command >pkt <<-EOF &&
	want-ref refs/heads/main
	have $(git rev-parse a)
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool serve-v2 --stateless-rpc >out <in &&
	check_output

2cd455c37d1f88f1dd99c20a05dc00950e0b98e4
ok 4 - basic want-ref

expecting success of 5703.5 'multiple want-ref lines': 
	oid_c=$(git rev-parse c) &&
	oid_d=$(git rev-parse d) &&
	cat >expected_refs <<-EOF &&
	$oid_c refs/heads/o/foo
	$oid_d refs/heads/o/bar
	EOF
	git rev-parse c d >expected_commits &&

	write_fetch_command >pkt <<-EOF &&
	want-ref refs/heads/o/foo
	want-ref refs/heads/o/bar
	have $(git rev-parse b)
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool serve-v2 --stateless-rpc >out <in &&
	check_output

ef76e7a7b2817dc4a77b2e06e9b82a4f147b87d7
ok 5 - multiple want-ref lines

expecting success of 5703.6 'mix want and want-ref': 
	oid=$(git rev-parse f) &&
	cat >expected_refs <<-EOF &&
	$oid refs/heads/main
	EOF
	git rev-parse e f >expected_commits &&

	write_fetch_command >pkt <<-EOF &&
	want-ref refs/heads/main
	want $(git rev-parse e)
	have $(git rev-parse a)
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool serve-v2 --stateless-rpc >out <in &&
	check_output

a3b2910e2bc93b88442ed713e2d9bfba846dfb4a
ok 6 - mix want and want-ref

expecting success of 5703.7 'want-ref with ref we already have commit for': 
	oid=$(git rev-parse c) &&
	cat >expected_refs <<-EOF &&
	$oid refs/heads/o/foo
	EOF
	>expected_commits &&

	write_fetch_command >pkt <<-EOF &&
	want-ref refs/heads/o/foo
	have $(git rev-parse c)
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool serve-v2 --stateless-rpc >out <in &&
	check_output

029d08823bd8a8eab510ad6ac75c823cfd3ed31e
ok 7 - want-ref with ref we already have commit for

expecting success of 5703.8 'setup repos for fetching with ref-in-want tests': 
	(
		git init -b main "$REPO" &&
		cd "$REPO" &&
		test_commit a &&

		# Local repo with many commits (so that negotiation will take
		# more than 1 request/response pair)
		rm -rf "$LOCAL_PRISTINE" &&
		git clone "file://$REPO" "$LOCAL_PRISTINE" &&
		cd "$LOCAL_PRISTINE" &&
		git checkout -b side &&
		test_commit_bulk --id=s 33 &&

		# Add novel commits to upstream
		git checkout main &&
		cd "$REPO" &&
		git checkout -b o/foo &&
		test_commit b &&
		test_commit c &&
		git checkout -b o/bar b &&
		test_commit d &&
		git checkout -b baz a &&
		test_commit e &&
		git checkout main &&
		test_commit f
	) &&
	git -C "$REPO" config uploadpack.allowRefInWant true &&
	git -C "$LOCAL_PRISTINE" config protocol.version 2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo/.git/
[main (root-commit) 4f50377] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/local_pristine'...
Switched to a new branch 'side'
4f50377a42e4bea2b0e56d986e7fe2da43d41a69
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           99 (         0 duplicates                  )
      blobs  :           33 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           33 (         0 duplicates         32 deltas of         32 attempts)
      commits:           33 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             34
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         38
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7553 /       7553
---------------------------------------------------------------------

Switched to branch 'main'
Your branch is up to date with 'origin/main'.
Switched to a new branch 'o/foo'
[o/foo f403802] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
[o/foo e460426] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Switched to a new branch 'o/bar'
[o/bar 2aa4ae0] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
Switched to a new branch 'baz'
[baz 882e407] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e.t
Switched to branch 'main'
[main cb86d32] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f.t
ok 8 - setup repos for fetching with ref-in-want tests

expecting success of 5703.9 'fetching with exact OID': 
	test_when_finished "rm -f log trace2" &&

	rm -rf local &&
	cp -r "$LOCAL_PRISTINE" local &&
	oid=$(git -C "$REPO" rev-parse d) &&
	GIT_TRACE_PACKET="$(pwd)/log" GIT_TRACE2_EVENT="$(pwd)/trace2" \
		git -C local fetch origin \
		"$oid":refs/heads/actual &&

	grep \"key\":\"total_rounds\",\"value\":\"2\" trace2 &&
	git -C "$REPO" rev-parse "d" >expected &&
	git -C local rev-parse refs/heads/actual >actual &&
	test_cmp expected actual &&
	grep "want $oid" log

From file:///<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo
 * [new ref]         2aa4ae04c2fc08d42ad2326101f5d3ee489ee8f5 -> actual
 * [new tag]         d                                        -> d
 * [new tag]         b                                        -> b
{"event":"data","sid":"20221228T075518.079163Z-Hc64317c2-P000014d2","thread":"main","time":"2022-12-28T07:55:18.168823Z","file":"fetch-pack.c","line":1753,"repo":1,"t_abs":0.092610,"t_rel":0.030503,"nesting":2,"category":"negotiation_v2","key":"total_rounds","value":"2"}
packet:        fetch> want 2aa4ae04c2fc08d42ad2326101f5d3ee489ee8f5
packet:  upload-pack< want 2aa4ae04c2fc08d42ad2326101f5d3ee489ee8f5
packet:        fetch> want 2aa4ae04c2fc08d42ad2326101f5d3ee489ee8f5
packet:  upload-pack< want 2aa4ae04c2fc08d42ad2326101f5d3ee489ee8f5
ok 9 - fetching with exact OID

expecting success of 5703.10 'fetching multiple refs': 
	test_when_finished "rm -f log" &&

	rm -rf local &&
	cp -r "$LOCAL_PRISTINE" local &&
	GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin main baz &&

	git -C "$REPO" rev-parse "main" "baz" >expected &&
	git -C local rev-parse refs/remotes/origin/main refs/remotes/origin/baz >actual &&
	test_cmp expected actual &&
	grep "want-ref refs/heads/main" log &&
	grep "want-ref refs/heads/baz" log

From file:///<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo
 * branch            main       -> FETCH_HEAD
 * branch            baz        -> FETCH_HEAD
   4f50377..cb86d32  main       -> origin/main
 * [new branch]      baz        -> origin/baz
packet:        fetch> want-ref refs/heads/main
packet:  upload-pack< want-ref refs/heads/main
packet:        fetch> want-ref refs/heads/main
packet:  upload-pack< want-ref refs/heads/main
packet:        fetch> want-ref refs/heads/baz
packet:  upload-pack< want-ref refs/heads/baz
packet:        fetch> want-ref refs/heads/baz
packet:  upload-pack< want-ref refs/heads/baz
ok 10 - fetching multiple refs

expecting success of 5703.11 'fetching ref and exact OID': 
	test_when_finished "rm -f log" &&

	rm -rf local &&
	cp -r "$LOCAL_PRISTINE" local &&
	oid=$(git -C "$REPO" rev-parse b) &&
	GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin \
		main "$oid":refs/heads/actual &&

	git -C "$REPO" rev-parse "main" "b" >expected &&
	git -C local rev-parse refs/remotes/origin/main refs/heads/actual >actual &&
	test_cmp expected actual &&
	grep "want $oid" log &&
	grep "want-ref refs/heads/main" log

From file:///<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo
 * branch            main                                     -> FETCH_HEAD
 * [new ref]         f403802d82ee291ad8692be584ed0f4e89e44b78 -> actual
 * [new tag]         b                                        -> b
 * [new tag]         f                                        -> f
   4f50377..cb86d32  main                                     -> origin/main
packet:        fetch> want f403802d82ee291ad8692be584ed0f4e89e44b78
packet:  upload-pack< want f403802d82ee291ad8692be584ed0f4e89e44b78
packet:        fetch> want f403802d82ee291ad8692be584ed0f4e89e44b78
packet:  upload-pack< want f403802d82ee291ad8692be584ed0f4e89e44b78
packet:        fetch> want-ref refs/heads/main
packet:  upload-pack< want-ref refs/heads/main
packet:        fetch> want-ref refs/heads/main
packet:  upload-pack< want-ref refs/heads/main
ok 11 - fetching ref and exact OID

expecting success of 5703.12 'fetching with wildcard that does not match any refs': 
	test_when_finished "rm -f log" &&

	rm -rf local &&
	cp -r "$LOCAL_PRISTINE" local &&
	git -C local fetch origin refs/heads/none*:refs/heads/* >out &&
	test_must_be_empty out

ok 12 - fetching with wildcard that does not match any refs

expecting success of 5703.13 'fetching with wildcard that matches multiple refs': 
	test_when_finished "rm -f log" &&

	rm -rf local &&
	cp -r "$LOCAL_PRISTINE" local &&
	GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin refs/heads/o*:refs/heads/o* &&

	git -C "$REPO" rev-parse "o/foo" "o/bar" >expected &&
	git -C local rev-parse "o/foo" "o/bar" >actual &&
	test_cmp expected actual &&
	grep "want-ref refs/heads/o/foo" log &&
	grep "want-ref refs/heads/o/bar" log

From file:///<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo
 * [new branch]      o/bar      -> o/bar
 * [new branch]      o/foo      -> o/foo
 * [new tag]         c          -> c
 * [new tag]         d          -> d
 * [new branch]      o/bar      -> origin/o/bar
 * [new branch]      o/foo      -> origin/o/foo
 * [new tag]         b          -> b
packet:        fetch> want-ref refs/heads/o/foo
packet:  upload-pack< want-ref refs/heads/o/foo
packet:        fetch> want-ref refs/heads/o/foo
packet:  upload-pack< want-ref refs/heads/o/foo
packet:        fetch> want-ref refs/heads/o/bar
packet:  upload-pack< want-ref refs/heads/o/bar
packet:        fetch> want-ref refs/heads/o/bar
packet:  upload-pack< want-ref refs/heads/o/bar
ok 13 - fetching with wildcard that matches multiple refs

expecting success of 5703.14 'setup namespaced repo': 
	(
		git init -b main "$REPO" &&
		cd "$REPO" &&
		test_commit a &&
		test_commit b &&
		git checkout a &&
		test_commit c &&
		git checkout a &&
		test_commit d &&
		git update-ref refs/heads/ns-no b &&
		git update-ref refs/namespaces/ns/refs/heads/ns-yes c &&
		git update-ref refs/namespaces/ns/refs/heads/hidden d
	) &&
	git -C "$REPO" config uploadpack.allowRefInWant true

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5703-upload-pack-ref-in-want/repo-ns/.git/
[main (root-commit) 4f50377] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
[main fd45aa7] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
Note: switching to 'a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4f50377 a
[detached HEAD 2bf1eff] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Previous HEAD position was 2bf1eff c
HEAD is now at 4f50377 a
[detached HEAD 203a6fb] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
ok 14 - setup namespaced repo

expecting success of 5703.15 'with namespace: want-ref is considered relative to namespace': 
	wanted_ref=refs/heads/ns-yes &&

	oid=$(git -C "$REPO" rev-parse "refs/namespaces/ns/$wanted_ref") &&
	cat >expected_refs <<-EOF &&
	$oid $wanted_ref
	EOF
	cat >expected_commits <<-EOF &&
	$oid
	$(git -C "$REPO" rev-parse a)
	EOF

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	GIT_NAMESPACE=ns test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	check_output

6540f670a9623805b0d3366c519a9aeabb2b2be9
ok 15 - with namespace: want-ref is considered relative to namespace

expecting success of 5703.16 'with namespace: want-ref outside namespace is unknown': 
	wanted_ref=refs/heads/ns-no &&

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	test_must_fail env GIT_NAMESPACE=ns \
		test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	grep "unknown ref" out

fatal: unknown ref refs/heads/ns-no
0024ERR unknown ref refs/heads/ns-no
ok 16 - with namespace: want-ref outside namespace is unknown

expecting success of 5703.17 'without namespace: want-ref outside namespace succeeds': 
	wanted_ref=refs/heads/ns-no &&

	oid=$(git -C "$REPO" rev-parse $wanted_ref) &&
	cat >expected_refs <<-EOF &&
	$oid $wanted_ref
	EOF
	cat >expected_commits <<-EOF &&
	$oid
	$(git -C "$REPO" rev-parse a)
	EOF

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	check_output

ff3210800e3d84fda6f96ffff1bf38b093f6f076
ok 17 - without namespace: want-ref outside namespace succeeds

expecting success of 5703.18 'with namespace: hideRefs is matched, relative to namespace': 
	wanted_ref=refs/heads/hidden &&
	git -C "$REPO" config transfer.hideRefs $wanted_ref &&

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	test_must_fail env GIT_NAMESPACE=ns \
		test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	grep "unknown ref" out

fatal: unknown ref refs/heads/hidden
0025ERR unknown ref refs/heads/hidden
ok 18 - with namespace: hideRefs is matched, relative to namespace

expecting success of 5703.19 'with namespace: want-ref succeeds if hideRefs is removed': 
	wanted_ref=refs/heads/hidden &&
	git -C "$REPO" config --unset transfer.hideRefs $wanted_ref &&

	oid=$(git -C "$REPO" rev-parse "refs/namespaces/ns/$wanted_ref") &&
	cat >expected_refs <<-EOF &&
	$oid $wanted_ref
	EOF
	cat >expected_commits <<-EOF &&
	$oid
	$(git -C "$REPO" rev-parse a)
	EOF

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	GIT_NAMESPACE=ns test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	check_output

035d4af45181cc76e0274465756506c19c3b4534
ok 19 - with namespace: want-ref succeeds if hideRefs is removed

expecting success of 5703.20 'without namespace: relative hideRefs does not match': 
	wanted_ref=refs/namespaces/ns/refs/heads/hidden &&
	git -C "$REPO" config transfer.hideRefs refs/heads/hidden &&

	oid=$(git -C "$REPO" rev-parse $wanted_ref) &&
	cat >expected_refs <<-EOF &&
	$oid $wanted_ref
	EOF
	cat >expected_commits <<-EOF &&
	$oid
	$(git -C "$REPO" rev-parse a)
	EOF

	write_fetch_command >pkt <<-EOF &&
	want-ref $wanted_ref
	EOF
	test-tool pkt-line pack <pkt >in &&

	test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
	check_output

035d4af45181cc76e0274465756506c19c3b4534
ok 20 - without namespace: relative hideRefs does not match

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 20 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5704-protocol-violations.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5704-protocol-violations/.git/
expecting success of 5704.1 'extra delim packet in v2 ls-refs args': 
	{
		packetize command=ls-refs &&
		packetize "object-format=$(test_oid algo)" &&
		printf 0001 &&
		# protocol expects 0000 flush here
		printf 0001
	} >input &&
	test_must_fail env GIT_PROTOCOL=version=2 \
		git upload-pack . <input 2>err &&
	test_i18ngrep "expected flush after ls-refs arguments" err

000eversion 2
0015agent=git/2.39.0
0013ls-refs=unborn
0020fetch=shallow wait-for-done
0012server-option
0017object-format=sha1
0010object-info
0000fatal: expected flush after ls-refs arguments
ok 1 - extra delim packet in v2 ls-refs args

expecting success of 5704.2 'extra delim packet in v2 fetch args': 
	{
		packetize command=fetch &&
		packetize "object-format=$(test_oid algo)" &&
		printf 0001 &&
		# protocol expects 0000 flush here
		printf 0001
	} >input &&
	test_must_fail env GIT_PROTOCOL=version=2 \
		git upload-pack . <input 2>err &&
	test_i18ngrep "expected flush after fetch arguments" err

000eversion 2
0015agent=git/2.39.0
0013ls-refs=unborn
0020fetch=shallow wait-for-done
0012server-option
0017object-format=sha1
0010object-info
0000fatal: expected flush after fetch arguments
ok 2 - extra delim packet in v2 fetch args

expecting success of 5704.3 'bogus symref in v0 capabilities': 
	test_commit foo &&
	oid=$(git rev-parse HEAD) &&
	dst=refs/heads/foo &&
	{
		printf "%s HEAD\0symref object-format=%s symref=HEAD:%s\n" \
			"$oid" "$GIT_DEFAULT_HASH" "$dst" |
			test-tool pkt-line pack-raw-stdin &&
		printf "0000"
	} >input &&
	git ls-remote --symref --upload-pack="cat input; read junk;:" . >actual &&
	printf "ref: %s\tHEAD\n%s\tHEAD\n" "$dst" "$oid" >expect &&
	test_cmp expect actual

[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 3 - bogus symref in v0 capabilities

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5702-protocol-v2.sh ***
checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
Starting git daemon ...
[3918] Ready to rumble
expecting success of 5702.1 'create repo to be served by git-daemon': 
	git init "$daemon_parent" &&
	test_commit -C "$daemon_parent" one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/repo/parent/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - create repo to be served by git-daemon

expecting success of 5702.2 'list refs with git:// using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		ls-remote --symref "$GIT_DAEMON_URL/parent" >actual &&

	# Client requested to use protocol v2
	grep "ls-remote> .*\\\0\\\0version=2\\\0$" log &&
	# Server responded using protocol v2
	grep "ls-remote< version 2" log &&

	git ls-remote --symref "$GIT_DAEMON_URL/parent" >expect &&
	test_cmp expect actual

[3953] Connection from 127.0.0.1:60420
[3953] Extended attribute "host": 127.0.0.1:5702
[3953] Extended attribute "protocol": version=2
[3953] Request upload-pack for '/parent'
[3918] [3953] Disconnected
packet:    ls-remote> git-upload-pack /parent\0host=127.0.0.1:5702\0\0version=2\0
packet:    ls-remote< version 2
[3973] Connection from 127.0.0.1:60422
[3973] Extended attribute "host": 127.0.0.1:5702
[3973] Extended attribute "protocol": version=2
[3973] Request upload-pack for '/parent'
[3918] [3973] Disconnected
ok 2 - list refs with git:// using protocol v2

expecting success of 5702.3 'ref advertisement is filtered with ls-remote using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		ls-remote "$GIT_DAEMON_URL/parent" main >actual &&

	cat >expect <<-EOF &&
	$(git -C "$daemon_parent" rev-parse refs/heads/main)$(printf "\t")refs/heads/main
	EOF

	test_cmp expect actual

[3991] Connection from 127.0.0.1:60424
[3991] Extended attribute "host": 127.0.0.1:5702
[3991] Extended attribute "protocol": version=2
[3991] Request upload-pack for '/parent'
[3918] [3991] Disconnected
ok 3 - ref advertisement is filtered with ls-remote using protocol v2

expecting success of 5702.4 'clone with git:// using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		clone "$GIT_DAEMON_URL/parent" daemon_child &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v2
	grep "clone> .*\\\0\\\0version=2\\\0$" log &&
	# Server responded using protocol v2
	grep "clone< version 2" log

Cloning into 'daemon_child'...
[4020] Connection from 127.0.0.1:60426
[4020] Extended attribute "host": 127.0.0.1:5702
[4020] Extended attribute "protocol": version=2
[4020] Request upload-pack for '/parent'
[3918] [4020] Disconnected
packet:        clone> git-upload-pack /parent\0host=127.0.0.1:5702\0\0version=2\0
packet:        clone< version 2
ok 4 - clone with git:// using protocol v2

expecting success of 5702.5 'fetch with git:// using protocol v2': 
	test_when_finished "rm -f log" &&

	test_commit -C "$daemon_parent" two &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C daemon_child -c protocol.version=2 \
		fetch &&

	git -C daemon_child log -1 --format=%s origin/main >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v2
	grep "fetch> .*\\\0\\\0version=2\\\0$" log &&
	# Server responded using protocol v2
	grep "fetch< version 2" log

[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[4084] Connection from 127.0.0.1:60428
[4084] Extended attribute "host": 127.0.0.1:5702
[4084] Extended attribute "protocol": version=2
[4084] Request upload-pack for '/parent'
[3918] [4084] Disconnected
From git://127.0.0.1:5702/parent
   d79ce16..139b20d  main       -> origin/main
 * [new tag]         two        -> two
packet:        fetch> git-upload-pack /parent\0host=127.0.0.1:5702\0\0version=2\0
packet:        fetch< version 2
ok 5 - fetch with git:// using protocol v2

expecting success of 5702.6 'fetch by hash without tag following with protocol v2 does not list refs': 
	test_when_finished "rm -f log" &&

	test_commit -C "$daemon_parent" two_a &&
	git -C "$daemon_parent" rev-parse two_a >two_a_hash &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C daemon_child -c protocol.version=2 \
		fetch --no-tags origin $(cat two_a_hash) &&

	grep "fetch< version 2" log &&
	! grep "fetch> command=ls-refs" log

[main 7e9f7d0] two_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two_a.t
[4188] Connection from 127.0.0.1:60430
[4188] Extended attribute "host": 127.0.0.1:5702
[4188] Extended attribute "protocol": version=2
[4188] Request upload-pack for '/parent'
[3918] [4188] Disconnected
From git://127.0.0.1:5702/parent
 * branch            7e9f7d092ed45f242659c87db76fd08923e99801 -> FETCH_HEAD
packet:        fetch< version 2
ok 6 - fetch by hash without tag following with protocol v2 does not list refs

expecting success of 5702.7 'pull with git:// using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C daemon_child -c protocol.version=2 \
		pull &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v2
	grep "fetch> .*\\\0\\\0version=2\\\0$" log &&
	# Server responded using protocol v2
	grep "fetch< version 2" log

[4238] Connection from 127.0.0.1:60432
[4238] Extended attribute "host": 127.0.0.1:5702
[4238] Extended attribute "protocol": version=2
[4238] Request upload-pack for '/parent'
From git://127.0.0.1:5702/parent
   139b20d..7e9f7d0  main       -> origin/main
 * [new tag]         two_a      -> two_a
[3918] [4238] Disconnected
Updating d79ce16..7e9f7d0
Fast-forward
 two.t   | 1 +
 two_a.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 two.t
 create mode 100644 two_a.t
packet:        fetch> git-upload-pack /parent\0host=127.0.0.1:5702\0\0version=2\0
packet:        fetch< version 2
ok 7 - pull with git:// using protocol v2

expecting success of 5702.8 'push with git:// and a config of v2 does not request v2': 
	test_when_finished "rm -f log" &&

	# Till v2 for push is designed, make sure that if a client has
	# protocol.version configured to use v2, that the client instead falls
	# back and uses v0.

	test_commit -C daemon_child three &&

	# Push to another branch, as the target repository has the
	# main branch checked out and we cannot push into it.
	GIT_TRACE_PACKET="$(pwd)/log" git -C daemon_child -c protocol.version=2 \
		push origin HEAD:client_branch &&

	git -C daemon_child log -1 --format=%s >actual &&
	git -C "$daemon_parent" log -1 --format=%s client_branch >expect &&
	test_cmp expect actual &&

	# Client requested to use protocol v2
	! grep "push> .*\\\0\\\0version=2\\\0$" log &&
	# Server responded using protocol v2
	! grep "push< version 2" log

[main 166f565] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[4334] Connection from 127.0.0.1:60434
[4334] Extended attribute "host": 127.0.0.1:5702
[4334] Request receive-pack for '/parent'
[3918] [4334] Disconnected
To git://127.0.0.1:5702/parent
 * [new branch]      HEAD -> client_branch
ok 8 - push with git:// and a config of v2 does not request v2

Stopping git daemon ...
Terminated
expecting success of 5702.9 'create repo to be served by file:// transport': 
	git init file_parent &&
	test_commit -C file_parent one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_parent/.git/
[main (root-commit) 6f4b17f] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 9 - create repo to be served by file:// transport

expecting success of 5702.10 'list refs with file:// using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		ls-remote --symref "file://$(pwd)/file_parent" >actual &&

	# Server responded using protocol v2
	grep "ls-remote< version 2" log &&

	git ls-remote --symref "file://$(pwd)/file_parent" >expect &&
	test_cmp expect actual

packet:    ls-remote< version 2
ok 10 - list refs with file:// using protocol v2

expecting success of 5702.11 'ref advertisement is filtered with ls-remote using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		ls-remote "file://$(pwd)/file_parent" main >actual &&

	cat >expect <<-EOF &&
	$(git -C file_parent rev-parse refs/heads/main)$(printf "\t")refs/heads/main
	EOF

	test_cmp expect actual

ok 11 - ref advertisement is filtered with ls-remote using protocol v2

expecting success of 5702.12 'server-options are sent when using ls-remote': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		ls-remote -o hello -o world "file://$(pwd)/file_parent" main >actual &&

	cat >expect <<-EOF &&
	$(git -C file_parent rev-parse refs/heads/main)$(printf "\t")refs/heads/main
	EOF

	test_cmp expect actual &&
	grep "server-option=hello" log &&
	grep "server-option=world" log

packet:    ls-remote> server-option=hello
packet:  upload-pack< server-option=hello
packet:    ls-remote> server-option=world
packet:  upload-pack< server-option=world
ok 12 - server-options are sent when using ls-remote

expecting success of 5702.13 'warn if using server-option with ls-remote with legacy protocol': 
	test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -c protocol.version=0 \
		ls-remote -o hello -o world "file://$(pwd)/file_parent" main 2>err &&

	test_i18ngrep "see protocol.version in" err &&
	test_i18ngrep "server options require protocol version 2 or later" err

hint: see protocol.version in 'git help config' for more details
fatal: server options require protocol version 2 or later
ok 13 - warn if using server-option with ls-remote with legacy protocol

expecting success of 5702.14 'clone with file:// using protocol v2': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		clone "file://$(pwd)/file_parent" file_child &&

	git -C file_child log -1 --format=%s >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v2
	grep "clone< version 2" log &&

	# Client sent ref-prefixes to filter the ref-advertisement
	grep "ref-prefix HEAD" log &&
	grep "ref-prefix refs/heads/" log &&
	grep "ref-prefix refs/tags/" log

Cloning into 'file_child'...
packet:        clone< version 2
packet:        clone> ref-prefix HEAD
packet:  upload-pack< ref-prefix HEAD
packet:        clone> ref-prefix refs/heads/
packet:  upload-pack< ref-prefix refs/heads/
packet:        clone> ref-prefix refs/tags/
packet:  upload-pack< ref-prefix refs/tags/
ok 14 - clone with file:// using protocol v2

expecting success of 5702.15 'clone of empty repo propagates name of default branch': 
	test_when_finished "rm -rf file_empty_parent file_empty_child" &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=mydefaultbranch init file_empty_parent &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=main -c protocol.version=2 \
		clone "file://$(pwd)/file_empty_parent" file_empty_child &&
	grep "refs/heads/mydefaultbranch" file_empty_child/.git/HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_empty_parent/.git/
Cloning into 'file_empty_child'...
warning: You appear to have cloned an empty repository.
ref: refs/heads/mydefaultbranch
ok 15 - clone of empty repo propagates name of default branch

expecting success of 5702.16 '...but not if explicitly forbidden by config': 
	test_when_finished "rm -rf file_empty_parent file_empty_child" &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=mydefaultbranch init file_empty_parent &&
	test_config -C file_empty_parent lsrefs.unborn ignore &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=main -c protocol.version=2 \
		clone "file://$(pwd)/file_empty_parent" file_empty_child &&
	! grep "refs/heads/mydefaultbranch" file_empty_child/.git/HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_empty_parent/.git/
Cloning into 'file_empty_child'...
warning: You appear to have cloned an empty repository.
ok 16 - ...but not if explicitly forbidden by config

expecting success of 5702.17 'bare clone propagates empty default branch': 
	test_when_finished "rm -rf file_empty_parent file_empty_child.git" &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=mydefaultbranch init file_empty_parent &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=main -c protocol.version=2 \
		clone --bare \
		"file://$(pwd)/file_empty_parent" file_empty_child.git &&
	grep "refs/heads/mydefaultbranch" file_empty_child.git/HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_empty_parent/.git/
Cloning into bare repository 'file_empty_child.git'...
warning: You appear to have cloned an empty repository.
ref: refs/heads/mydefaultbranch
ok 17 - bare clone propagates empty default branch

expecting success of 5702.18 'clone propagates unborn HEAD from non-empty repo': 
	test_when_finished "rm -rf file_unborn_parent file_unborn_child" &&

	git init file_unborn_parent &&
	(
		cd file_unborn_parent &&
		git checkout -b branchwithstuff &&
		test_commit --no-tag stuff &&
		git symbolic-ref HEAD refs/heads/mydefaultbranch
	) &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=main -c protocol.version=2 \
		clone "file://$(pwd)/file_unborn_parent" \
		file_unborn_child 2>stderr &&
	grep "refs/heads/mydefaultbranch" file_unborn_child/.git/HEAD &&
	grep "warning: remote HEAD refers to nonexistent ref" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_unborn_parent/.git/
Switched to a new branch 'branchwithstuff'
[branchwithstuff (root-commit) 3e54c7d] stuff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 stuff.t
ref: refs/heads/mydefaultbranch
warning: remote HEAD refers to nonexistent ref, unable to checkout
ok 18 - clone propagates unborn HEAD from non-empty repo

expecting success of 5702.19 'bare clone propagates unborn HEAD from non-empty repo': 
	test_when_finished "rm -rf file_unborn_parent file_unborn_child.git" &&

	git init file_unborn_parent &&
	(
		cd file_unborn_parent &&
		git checkout -b branchwithstuff &&
		test_commit --no-tag stuff &&
		git symbolic-ref HEAD refs/heads/mydefaultbranch
	) &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=main -c protocol.version=2 \
		clone --bare "file://$(pwd)/file_unborn_parent" \
		file_unborn_child.git 2>stderr &&
	grep "refs/heads/mydefaultbranch" file_unborn_child.git/HEAD &&
	! grep "warning:" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_unborn_parent/.git/
Switched to a new branch 'branchwithstuff'
[branchwithstuff (root-commit) 3e54c7d] stuff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 stuff.t
ref: refs/heads/mydefaultbranch
ok 19 - bare clone propagates unborn HEAD from non-empty repo

expecting success of 5702.20 'defaulted HEAD uses remote branch if available': 
	test_when_finished "rm -rf file_unborn_parent file_unborn_child" &&

	git init file_unborn_parent &&
	(
		cd file_unborn_parent &&
		git config lsrefs.unborn ignore &&
		git checkout -b branchwithstuff &&
		test_commit --no-tag stuff &&
		git symbolic-ref HEAD refs/heads/mydefaultbranch
	) &&

	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
	git -c init.defaultBranch=branchwithstuff -c protocol.version=2 \
		clone "file://$(pwd)/file_unborn_parent" \
		file_unborn_child 2>stderr &&
	grep "refs/heads/branchwithstuff" file_unborn_child/.git/HEAD &&
	test_path_is_file file_unborn_child/stuff.t &&
	! grep "warning:" stderr

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_unborn_parent/.git/
Switched to a new branch 'branchwithstuff'
[branchwithstuff (root-commit) 3e54c7d] stuff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 stuff.t
ref: refs/heads/branchwithstuff
ok 20 - defaulted HEAD uses remote branch if available

expecting success of 5702.21 'fetch with file:// using protocol v2': 
	test_when_finished "rm -f log" &&

	test_commit -C file_parent two &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
		fetch origin &&

	git -C file_child log -1 --format=%s origin/main >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	# Server responded using protocol v2
	grep "fetch< version 2" log

[main 5c4888c] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_parent
   6f4b17f..5c4888c  main       -> origin/main
 * [new tag]         two        -> two
packet:        fetch< version 2
ok 21 - fetch with file:// using protocol v2

expecting success of 5702.22 'ref advertisement is filtered during fetch using protocol v2': 
	test_when_finished "rm -f log" &&

	test_commit -C file_parent three &&
	git -C file_parent branch unwanted-branch three &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
		fetch origin main &&

	git -C file_child log -1 --format=%s origin/main >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	grep "refs/heads/main" log &&
	! grep "refs/heads/unwanted-branch" log

[main 3fa1c23] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_parent
 * branch            main       -> FETCH_HEAD
   5c4888c..3fa1c23  main       -> origin/main
packet:        fetch> ref-prefix refs/heads/main
packet:  upload-pack< ref-prefix refs/heads/main
packet:  upload-pack> 3fa1c2361a0cae4d34ddb1469c03fc84cd2e36bb refs/heads/main
packet:        fetch< 3fa1c2361a0cae4d34ddb1469c03fc84cd2e36bb refs/heads/main
ok 22 - ref advertisement is filtered during fetch using protocol v2

expecting success of 5702.23 'server-options are sent when fetching': 
	test_when_finished "rm -f log" &&

	test_commit -C file_parent four &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
		fetch -o hello -o world origin main &&

	git -C file_child log -1 --format=%s origin/main >actual &&
	git -C file_parent log -1 --format=%s >expect &&
	test_cmp expect actual &&

	grep "server-option=hello" log &&
	grep "server-option=world" log

[main acc6f16] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_parent
 * branch            main       -> FETCH_HEAD
   3fa1c23..acc6f16  main       -> origin/main
packet:        fetch> server-option=hello
packet:  upload-pack< server-option=hello
packet:        fetch> server-option=hello
packet:  upload-pack< server-option=hello
packet:        fetch> server-option=world
packet:  upload-pack< server-option=world
packet:        fetch> server-option=world
packet:  upload-pack< server-option=world
ok 23 - server-options are sent when fetching

expecting success of 5702.24 'warn if using server-option with fetch with legacy protocol': 
	test_when_finished "rm -rf temp_child" &&

	git init temp_child &&

	test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -C temp_child -c protocol.version=0 \
		fetch -o hello -o world "file://$(pwd)/file_parent" main 2>err &&

	test_i18ngrep "see protocol.version in" err &&
	test_i18ngrep "server options require protocol version 2 or later" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/temp_child/.git/
hint: see protocol.version in 'git help config' for more details
fatal: server options require protocol version 2 or later
ok 24 - warn if using server-option with fetch with legacy protocol

expecting success of 5702.25 'server-options are sent when cloning': 
	test_when_finished "rm -rf log myclone" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
		clone --server-option=hello --server-option=world \
		"file://$(pwd)/file_parent" myclone &&

	grep "server-option=hello" log &&
	grep "server-option=world" log

Cloning into 'myclone'...
packet:        clone> server-option=hello
packet:  upload-pack< server-option=hello
packet:        clone> server-option=hello
packet:  upload-pack< server-option=hello
packet:        clone> server-option=world
packet:  upload-pack< server-option=world
packet:        clone> server-option=world
packet:  upload-pack< server-option=world
ok 25 - server-options are sent when cloning

expecting success of 5702.26 'warn if using server-option with clone with legacy protocol': 
	test_when_finished "rm -rf myclone" &&

	test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -c protocol.version=0 \
		clone --server-option=hello --server-option=world \
		"file://$(pwd)/file_parent" myclone 2>err &&

	test_i18ngrep "see protocol.version in" err &&
	test_i18ngrep "server options require protocol version 2 or later" err

hint: see protocol.version in 'git help config' for more details
fatal: server options require protocol version 2 or later
ok 26 - warn if using server-option with clone with legacy protocol

expecting success of 5702.27 'upload-pack respects config using protocol v2': 
	git init server &&
	write_script server/.git/hook <<-\EOF &&
		touch hookout
		"$@"
	EOF
	test_commit -C server one &&

	test_config_global uploadpack.packobjectshook ./hook &&
	test_path_is_missing server/.git/hookout &&
	git -c protocol.version=2 clone "file://$(pwd)/server" client &&
	test_path_is_file server/.git/hookout

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 0ba3da9] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into 'client'...
ok 27 - upload-pack respects config using protocol v2

expecting success of 5702.28 'setup filter tests': 
	rm -rf server client &&
	git init server &&

	# 1 commit to create a file, and 1 commit to modify it
	test_commit -C server message1 a.txt &&
	test_commit -C server message2 a.txt &&
	git -C server config protocol.version 2 &&
	git -C server config uploadpack.allowfilter 1 &&
	git -C server config uploadpack.allowanysha1inwant 1 &&
	git -C server config protocol.version 2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 9f9a637] message1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
[main 3b911b1] message2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 28 - setup filter tests

expecting success of 5702.29 'partial clone': 
	GIT_TRACE_PACKET="$(pwd)/trace" git -c protocol.version=2 \
		clone --filter=blob:none "file://$(pwd)/server" client &&
	grep "version 2" trace &&

	# Ensure that the old version of the file is missing
	git -C client rev-list --quiet --objects --missing=print main \
		>observed.oids &&
	grep "$(git -C server rev-parse message1:a.txt)" observed.oids &&

	# Ensure that client passes fsck
	git -C client fsck

Cloning into 'client'...
packet:  upload-pack> version 2
packet:        clone< version 2
packet:  upload-pack> version 2
packet:        fetch< version 2
?8045c300940c3b486923ccfc4dc22e72d1a10616
ok 29 - partial clone

expecting success of 5702.30 'dynamically fetch missing object': 
	rm "$(pwd)/trace" &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		cat-file -p $(git -C server rev-parse message1:a.txt) &&
	grep "version 2" trace

message1
packet:  upload-pack> version 2
packet:        fetch< version 2
ok 30 - dynamically fetch missing object

expecting success of 5702.31 'when dynamically fetching missing object, do not list refs': 
	! grep "git> command=ls-refs" trace

ok 31 - when dynamically fetching missing object, do not list refs

expecting success of 5702.32 'partial fetch': 
	rm -rf client "$(pwd)/trace" &&
	git init client &&
	SERVER="file://$(pwd)/server" &&

	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch --filter=blob:none "$SERVER" main:refs/heads/other &&
	grep "version 2" trace &&

	# Ensure that the old version of the file is missing
	git -C client rev-list --quiet --objects --missing=print other \
		>observed.oids &&
	grep "$(git -C server rev-parse message1:a.txt)" observed.oids &&

	# Ensure that client passes fsck
	git -C client fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/client/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
 * [new branch]      main       -> other
 * [new tag]         message2   -> message2
 * [new tag]         message1   -> message1
packet:  upload-pack> version 2
packet:        fetch< version 2
?8045c300940c3b486923ccfc4dc22e72d1a10616
notice: HEAD points to an unborn branch (main)
ok 32 - partial fetch

expecting success of 5702.33 'do not advertise filter if not configured to do so': 
	SERVER="file://$(pwd)/server" &&

	rm "$(pwd)/trace" &&
	git -C server config uploadpack.allowfilter 1 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -c protocol.version=2 \
		ls-remote "$SERVER" &&
	grep "fetch=.*filter" trace &&

	rm "$(pwd)/trace" &&
	git -C server config uploadpack.allowfilter 0 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -c protocol.version=2 \
		ls-remote "$SERVER" &&
	grep "fetch=" trace >fetch_capabilities &&
	! grep filter fetch_capabilities

3b911b1bf820401c718047588b81902d5b7458b9	HEAD
3b911b1bf820401c718047588b81902d5b7458b9	refs/heads/main
9f9a637008eb8a901bafbb20928b41749ad6d174	refs/tags/message1
3b911b1bf820401c718047588b81902d5b7458b9	refs/tags/message2
packet:  upload-pack> fetch=shallow wait-for-done filter
packet:    ls-remote< fetch=shallow wait-for-done filter
3b911b1bf820401c718047588b81902d5b7458b9	HEAD
3b911b1bf820401c718047588b81902d5b7458b9	refs/heads/main
9f9a637008eb8a901bafbb20928b41749ad6d174	refs/tags/message1
3b911b1bf820401c718047588b81902d5b7458b9	refs/tags/message2
ok 33 - do not advertise filter if not configured to do so

expecting success of 5702.34 'partial clone warns if filter is not advertised': 
	rm -rf client &&
	git -C server config uploadpack.allowfilter 0 &&
	git -c protocol.version=2 \
		clone --filter=blob:none "file://$(pwd)/server" client 2>err &&
	test_i18ngrep "filtering not recognized by server, ignoring" err

warning: filtering not recognized by server, ignoring
ok 34 - partial clone warns if filter is not advertised

expecting success of 5702.35 'even with handcrafted request, filter does not work if not advertised': 
	git -C server config uploadpack.allowfilter 0 &&

	# Custom request that tries to filter even though it is not advertised.
	test-tool pkt-line pack >in <<-EOF &&
	command=fetch
	object-format=$(test_oid algo)
	0001
	want $(git -C server rev-parse main)
	filter blob:none
	0000
	EOF

	test_must_fail test-tool -C server serve-v2 --stateless-rpc \
		<in >/dev/null 2>err &&
	grep "unexpected line: .filter blob:none." err &&

	# Exercise to ensure that if advertised, filter works
	git -C server config uploadpack.allowfilter 1 &&
	test-tool -C server serve-v2 --stateless-rpc <in >/dev/null

fatal: unexpected line: 'filter blob:none'
ok 35 - even with handcrafted request, filter does not work if not advertised

expecting success of 5702.36 'default refspec is used to filter ref when fetchcing': 
	test_when_finished "rm -f log" &&

	GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
		fetch origin &&

	git -C file_child log -1 --format=%s three >actual &&
	git -C file_parent log -1 --format=%s three >expect &&
	test_cmp expect actual &&

	grep "ref-prefix refs/heads/" log &&
	grep "ref-prefix refs/tags/" log

From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/file_parent
 * [new branch]      unwanted-branch -> origin/unwanted-branch
 * [new tag]         four            -> four
 * [new tag]         three           -> three
packet:        fetch> ref-prefix refs/heads/
packet:        fetch> ref-prefix refs/heads/main
packet:  upload-pack< ref-prefix refs/heads/
packet:  upload-pack< ref-prefix refs/heads/main
packet:        fetch> ref-prefix refs/tags/
packet:  upload-pack< ref-prefix refs/tags/
ok 36 - default refspec is used to filter ref when fetchcing

expecting success of 5702.37 'fetch supports various ways of have lines': 
	rm -rf server client trace &&
	git init server &&
	test_commit -C server dwim &&
	TREE=$(git -C server rev-parse HEAD^{tree}) &&
	git -C server tag exact \
		$(git -C server commit-tree -m a "$TREE") &&
	git -C server tag dwim-unwanted \
		$(git -C server commit-tree -m b "$TREE") &&
	git -C server tag exact-unwanted \
		$(git -C server commit-tree -m c "$TREE") &&
	git -C server tag prefix1 \
		$(git -C server commit-tree -m d "$TREE") &&
	git -C server tag prefix2 \
		$(git -C server commit-tree -m e "$TREE") &&
	git -C server tag fetch-by-sha1 \
		$(git -C server commit-tree -m f "$TREE") &&
	git -C server tag completely-unrelated \
		$(git -C server commit-tree -m g "$TREE") &&

	git init client &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch "file://$(pwd)/server" \
		dwim \
		refs/tags/exact \
		refs/tags/prefix*:refs/tags/prefix* \
		"$(git -C server rev-parse fetch-by-sha1)" &&

	# Ensure that the appropriate prefixes are sent (using a sample)
	grep "fetch> ref-prefix dwim" trace &&
	grep "fetch> ref-prefix refs/heads/dwim" trace &&
	grep "fetch> ref-prefix refs/tags/prefix" trace &&

	# Ensure that the correct objects are returned
	git -C client cat-file -e $(git -C server rev-parse dwim) &&
	git -C client cat-file -e $(git -C server rev-parse exact) &&
	git -C client cat-file -e $(git -C server rev-parse prefix1) &&
	git -C client cat-file -e $(git -C server rev-parse prefix2) &&
	git -C client cat-file -e $(git -C server rev-parse fetch-by-sha1) &&
	test_must_fail git -C client cat-file -e \
		$(git -C server rev-parse dwim-unwanted) &&
	test_must_fail git -C client cat-file -e \
		$(git -C server rev-parse exact-unwanted) &&
	test_must_fail git -C client cat-file -e \
		$(git -C server rev-parse completely-unrelated)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 7f427d6] dwim
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dwim.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/client/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
 * tag               dwim          -> FETCH_HEAD
 * tag               exact         -> FETCH_HEAD
 * [new tag]         prefix1       -> prefix1
 * [new tag]         prefix2       -> prefix2
 * branch            6e00395e552e1231e0d9bf16c819be5a25ec09bf -> FETCH_HEAD
 * [new tag]         dwim          -> dwim
 * [new tag]         exact         -> exact
 * [new tag]         fetch-by-sha1 -> fetch-by-sha1
packet:        fetch> ref-prefix dwim
packet:        fetch> ref-prefix refs/heads/dwim
packet:        fetch> ref-prefix refs/tags/prefix
ok 37 - fetch supports various ways of have lines

expecting success of 5702.38 'fetch supports include-tag and tag following': 
	rm -rf server client trace &&
	git init server &&

	test_commit -C server to_fetch &&
	git -C server tag -a annotated_tag -m message &&

	git init client &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch "$(pwd)/server" to_fetch:to_fetch &&

	grep "fetch> ref-prefix to_fetch" trace &&
	grep "fetch> ref-prefix refs/tags/" trace &&
	grep "fetch> include-tag" trace &&

	git -C client cat-file -e $(git -C client rev-parse annotated_tag)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 23facce] to_fetch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_fetch.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/client/.git/
From /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
 * [new tag]         to_fetch      -> to_fetch
 * [new tag]         annotated_tag -> annotated_tag
 * [new tag]         to_fetch      -> to_fetch
packet:        fetch> ref-prefix to_fetch
packet:        fetch> ref-prefix refs/tags/to_fetch
packet:        fetch> ref-prefix refs/tags/
packet:        fetch> include-tag
ok 38 - fetch supports include-tag and tag following

expecting success of 5702.39 'upload-pack respects client shallows': 
	rm -rf server client trace &&

	git init server &&
	test_commit -C server base &&
	test_commit -C server client_has &&

	git clone --depth=1 "file://$(pwd)/server" client &&

	# Add extra commits to the client so that the whole fetch takes more
	# than 1 request (due to negotiation)
	test_commit_bulk -C client --id=c 32 &&

	git -C server checkout -b newbranch base &&
	test_commit -C server client_wants &&

	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch origin newbranch &&
	# Ensure that protocol v2 is used
	grep "fetch< version 2" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 7011515] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[main 35d129e] client_has
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 client_has.t
Cloning into 'client'...
35d129e7baa6ee4831bcbeb900efe4a30c2ed8b7
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           96 (         0 duplicates                  )
      blobs  :           32 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           32 (         0 duplicates         31 deltas of         31 attempts)
      commits:           32 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             34
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         37
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       7448 /       7448
---------------------------------------------------------------------

Your branch is ahead of 'origin/main' by 32 commits.
  (use "git push" to publish your local commits)
Switched to a new branch 'newbranch'
[newbranch c382fc6] client_wants
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 client_wants.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
 * branch            newbranch  -> FETCH_HEAD
packet:        fetch< version 2
ok 39 - upload-pack respects client shallows

expecting success of 5702.40 'ensure that multiple fetches in same process from a shallow repo works': 
	rm -rf server client trace &&

	test_create_repo server &&
	test_commit -C server one &&
	test_commit -C server two &&
	test_commit -C server three &&
	git clone --shallow-exclude two "file://$(pwd)/server" client &&

	git -C server tag -a -m "an annotated tag" twotag two &&

	# Triggers tag following (thus, 2 fetches in one process)
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch --shallow-exclude one origin &&
	# Ensure that protocol v2 is used
	grep "fetch< version 2" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 1581e3e] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 5680d21] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 94705d7] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Cloning into 'client'...
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
 * [new tag]         two        -> two
 * [new tag]         twotag     -> twotag
packet:        fetch< version 2
packet:        fetch< version 2
ok 40 - ensure that multiple fetches in same process from a shallow repo works

expecting success of 5702.41 'deepen-relative': 
	rm -rf server client trace &&

	test_create_repo server &&
	test_commit -C server one &&
	test_commit -C server two &&
	test_commit -C server three &&
	git clone --depth 1 "file://$(pwd)/server" client &&
	test_commit -C server four &&

	# Sanity check that only "three" is downloaded
	git -C client log --pretty=tformat:%s main >actual &&
	echo three >expected &&
	test_cmp expected actual &&

	GIT_TRACE_PACKET="$(pwd)/trace" git -C client -c protocol.version=2 \
		fetch --deepen=1 origin &&
	# Ensure that protocol v2 is used
	grep "fetch< version 2" trace &&

	git -C client log --pretty=tformat:%s origin/main >actual &&
	cat >expected <<-\EOF &&
	four
	three
	two
	EOF
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 3735e1b] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 581c9db] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main f6e0668] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Cloning into 'client'...
[main e79f779] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server
   f6e0668..e79f779  main       -> origin/main
 * [new tag]         four       -> four
 * [new tag]         two        -> two
packet:        fetch< version 2
packet:        fetch< version 2
ok 41 - deepen-relative

expecting success of 5702.42 'usage: --negotiate-only without --negotiation-tip': 
	SERVER="server" &&
	URI="file://$(pwd)/server" &&

	setup_negotiate_only "$SERVER" "$URI" &&

	cat >err.expect <<-\EOF &&
	fatal: --negotiate-only needs one or more --negotiation-tip=*
	EOF

	test_must_fail git -c protocol.version=2 -C client fetch \
		--negotiate-only \
		origin 2>err.actual &&
	test_cmp err.expect err.actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 7e477a7] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 862b305] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'client'...
[main 8803147] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 42 - usage: --negotiate-only without --negotiation-tip

expecting success of 5702.43 'usage: --negotiate-only with --recurse-submodules': 
	cat >err.expect <<-\EOF &&
	fatal: options '--negotiate-only' and '--recurse-submodules' cannot be used together
	EOF

	test_must_fail git -c protocol.version=2 -C client fetch \
		--negotiate-only \
		--recurse-submodules \
		origin 2>err.actual &&
	test_cmp err.expect err.actual

ok 43 - usage: --negotiate-only with --recurse-submodules

expecting success of 5702.44 'file:// --negotiate-only': 
	SERVER="server" &&
	URI="file://$(pwd)/server" &&

	setup_negotiate_only "$SERVER" "$URI" &&

	git -c protocol.version=2 -C client fetch \
		--no-tags \
		--negotiate-only \
		--negotiation-tip=$(git -C client rev-parse HEAD) \
		origin >out &&
	COMMON=$(git -C "$SERVER" rev-parse two) &&
	grep "$COMMON" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 6a4c2ac] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 2944a1a] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'client'...
[main 55428b5] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
2944a1ad614badae9d56b41b50bb5706f4126c41
ok 44 - file:// --negotiate-only

expecting success of 5702.45 'file:// --negotiate-only with protocol v0': 
	SERVER="server" &&
	URI="file://$(pwd)/server" &&

	setup_negotiate_only "$SERVER" "$URI" &&

	test_must_fail git -c protocol.version=0 -C client fetch \
		--no-tags \
		--negotiate-only \
		--negotiation-tip=$(git -C client rev-parse HEAD) \
		origin 2>err &&
	test_i18ngrep "negotiate-only requires protocol v2" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5702-protocol-v2/server/.git/
[main (root-commit) 2472fbc] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 6b8fd04] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Cloning into 'client'...
[main 27885d4] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
warning: --negotiate-only requires protocol v2
ok 45 - file:// --negotiate-only with protocol v0

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 45 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..45
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5750-bundle-uri-parse.sh ***
expecting success of 5750.1 'bundle_uri_parse_line() just URIs': 
	cat >in <<-\EOF &&
	bundle.one.uri=http://example.com/bundle.bdl
	bundle.two.uri=https://example.com/bundle.bdl
	bundle.three.uri=file:///usr/share/git/bundle.bdl
	EOF

	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	[bundle "one"]
		uri = http://example.com/bundle.bdl
	[bundle "two"]
		uri = https://example.com/bundle.bdl
	[bundle "three"]
		uri = file:///usr/share/git/bundle.bdl
	EOF

	test-tool bundle-uri parse-key-values in >actual 2>err &&
	test_must_be_empty err &&
	test_cmp_config_output expect actual

ok 1 - bundle_uri_parse_line() just URIs

expecting success of 5750.2 'bundle_uri_parse_line() parsing edge cases: empty key or value': 
	cat >in <<-\EOF &&
	=bogus-value
	bogus-key=
	EOF

	cat >err.expect <<-EOF &&
	error: bundle-uri: line has empty key or value
	error: bad line: '=bogus-value'
	error: bundle-uri: line has empty key or value
	error: bad line: 'bogus-key='
	EOF

	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	EOF

	test_must_fail test-tool bundle-uri parse-key-values in >actual 2>err &&
	test_cmp err.expect err &&
	test_cmp_config_output expect actual

ok 2 - bundle_uri_parse_line() parsing edge cases: empty key or value

expecting success of 5750.3 'bundle_uri_parse_line() parsing edge cases: empty lines': 
	cat >in <<-\EOF &&
	bundle.one.uri=http://example.com/bundle.bdl

	bundle.two.uri=https://example.com/bundle.bdl

	bundle.three.uri=file:///usr/share/git/bundle.bdl
	EOF

	cat >err.expect <<-\EOF &&
	error: bundle-uri: got an empty line
	error: bad line: ''
	error: bundle-uri: got an empty line
	error: bad line: ''
	EOF

	# We fail, but try to continue parsing regardless
	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	[bundle "one"]
		uri = http://example.com/bundle.bdl
	[bundle "two"]
		uri = https://example.com/bundle.bdl
	[bundle "three"]
		uri = file:///usr/share/git/bundle.bdl
	EOF

	test_must_fail test-tool bundle-uri parse-key-values in >actual 2>err &&
	test_cmp err.expect err &&
	test_cmp_config_output expect actual

ok 3 - bundle_uri_parse_line() parsing edge cases: empty lines

expecting success of 5750.4 'bundle_uri_parse_line() parsing edge cases: duplicate lines': 
	cat >in <<-\EOF &&
	bundle.one.uri=http://example.com/bundle.bdl
	bundle.two.uri=https://example.com/bundle.bdl
	bundle.one.uri=https://example.com/bundle-2.bdl
	bundle.three.uri=file:///usr/share/git/bundle.bdl
	EOF

	cat >err.expect <<-\EOF &&
	error: bad line: 'bundle.one.uri=https://example.com/bundle-2.bdl'
	EOF

	# We fail, but try to continue parsing regardless
	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	[bundle "one"]
		uri = http://example.com/bundle.bdl
	[bundle "two"]
		uri = https://example.com/bundle.bdl
	[bundle "three"]
		uri = file:///usr/share/git/bundle.bdl
	EOF

	test_must_fail test-tool bundle-uri parse-key-values in >actual 2>err &&
	test_cmp err.expect err &&
	test_cmp_config_output expect actual

ok 4 - bundle_uri_parse_line() parsing edge cases: duplicate lines

expecting success of 5750.5 'parse config format: just URIs': 
	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	[bundle "one"]
		uri = http://example.com/bundle.bdl
	[bundle "two"]
		uri = https://example.com/bundle.bdl
	[bundle "three"]
		uri = file:///usr/share/git/bundle.bdl
	EOF

	test-tool bundle-uri parse-config expect >actual 2>err &&
	test_must_be_empty err &&
	test_cmp_config_output expect actual

ok 5 - parse config format: just URIs

expecting success of 5750.6 'parse config format edge cases: empty key or value': 
	cat >in1 <<-\EOF &&
	= bogus-value
	EOF

	cat >err1 <<-EOF &&
	error: bad config line 1 in file in1
	EOF

	cat >expect <<-\EOF &&
	[bundle]
		version = 1
		mode = all
	EOF

	test_must_fail test-tool bundle-uri parse-config in1 >actual 2>err &&
	test_cmp err1 err &&
	test_cmp_config_output expect actual &&

	cat >in2 <<-\EOF &&
	bogus-key =
	EOF

	cat >err2 <<-EOF &&
	error: bad config line 1 in file in2
	EOF

	test_must_fail test-tool bundle-uri parse-config in2 >actual 2>err &&
	test_cmp err2 err &&
	test_cmp_config_output expect actual

ok 6 - parse config format edge cases: empty key or value

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5705-session-id-in-capabilities.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/.git/
expecting success of 5705.1 'setup repos for session ID capability tests': 
	git init "$REPO" &&
	test_commit -C "$REPO" a &&
	git clone "file://$REPO" "$LOCAL_PRISTINE" &&
	test_commit -C "$REPO" b

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo/.git/
[master (root-commit) ce450c7] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/local_pristine'...
[master 020ea9b] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
ok 1 - setup repos for session ID capability tests

expecting success of 5705.2 'session IDs not advertised by default (fetch v0)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
ok 2 - session IDs not advertised by default (fetch v0)

expecting success of 5705.3 'session IDs not advertised by default (push v0)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 3 - session IDs not advertised by default (push v0)

expecting success of 5705.4 'session IDs not advertised by default (fetch v1)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
ok 4 - session IDs not advertised by default (fetch v1)

expecting success of 5705.5 'session IDs not advertised by default (push v1)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 5 - session IDs not advertised by default (push v1)

expecting success of 5705.6 'session IDs not advertised by default (fetch v2)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
ok 6 - session IDs not advertised by default (fetch v2)

expecting success of 5705.7 'session IDs not advertised by default (push v2)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
		test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 7 - session IDs not advertised by default (push v2)

expecting success of 5705.8 'enable SID advertisement': 
	git -C "$REPO" config transfer.advertiseSID true &&
	git -C "$LOCAL_PRISTINE" config transfer.advertiseSID true

ok 8 - enable SID advertisement

expecting success of 5705.9 'session IDs advertised (fetch v0)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075528.686459Z-Hc64317c2-P00001c10","thread":"main","time":"2022-12-28T07:55:28.732116Z","file":"transport.c","line":340,"t_abs":0.048979,"t_rel":0.031147,"nesting":2,"category":"transfer","key":"server-sid","value":"20221228T075528.686459Z-Hc64317c2-P00001c10/20221228T075528.719228Z-Hc64317c2-P00001c16"}
{"event":"data","sid":"20221228T075528.686459Z-Hc64317c2-P00001c10/20221228T075528.719228Z-Hc64317c2-P00001c16","thread":"main","time":"2022-12-28T07:55:28.739042Z","file":"upload-pack.c","line":1122,"t_abs":0.022907,"t_rel":0.022907,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075528.686459Z-Hc64317c2-P00001c10"}
ok 9 - session IDs advertised (fetch v0)

expecting success of 5705.10 'session IDs advertised (push v0)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
{"event":"data","sid":"20221228T075529.366857Z-Hc64317c2-P00001c7c","thread":"main","time":"2022-12-28T07:55:29.406244Z","file":"transport.c","line":340,"t_abs":0.042656,"t_rel":0.028976,"nesting":3,"category":"transfer","key":"server-sid","value":"20221228T075529.366857Z-Hc64317c2-P00001c7c/20221228T075529.395844Z-Hc64317c2-P00001c82"}
{"event":"data","sid":"20221228T075529.366857Z-Hc64317c2-P00001c7c/20221228T075529.395844Z-Hc64317c2-P00001c82","thread":"main","time":"2022-12-28T07:55:29.410808Z","file":"builtin/receive-pack.c","line":2107,"t_abs":0.018334,"t_rel":0.018334,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075529.366857Z-Hc64317c2-P00001c7c"}
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 10 - session IDs advertised (push v0)

expecting success of 5705.11 'client & server log negotiated version (v0)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-client-events &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075529.881705Z-Hc64317c2-P00001cbc","thread":"main","time":"2022-12-28T07:55:29.932800Z","file":"connect.c","line":167,"t_abs":0.054254,"t_rel":0.037630,"nesting":2,"category":"transfer","key":"negotiated-version","value":"0"}
{"event":"data","sid":"20221228T075529.881705Z-Hc64317c2-P00001cbc/20221228T075529.918500Z-Hc64317c2-P00001cc2","thread":"main","time":"2022-12-28T07:55:29.927848Z","file":"protocol.c","line":76,"t_abs":0.012565,"t_rel":0.012565,"nesting":1,"category":"transfer","key":"negotiated-version","value":"0"}
ok 11 - client & server log negotiated version (v0)

expecting success of 5705.12 'session IDs advertised (fetch v1)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075530.278018Z-Hc64317c2-P00001cf3","thread":"main","time":"2022-12-28T07:55:30.322780Z","file":"transport.c","line":340,"t_abs":0.050965,"t_rel":0.032099,"nesting":2,"category":"transfer","key":"server-sid","value":"20221228T075530.278018Z-Hc64317c2-P00001cf3/20221228T075530.309849Z-Hc64317c2-P00001cf8"}
{"event":"data","sid":"20221228T075530.278018Z-Hc64317c2-P00001cf3/20221228T075530.309849Z-Hc64317c2-P00001cf8","thread":"main","time":"2022-12-28T07:55:30.330274Z","file":"upload-pack.c","line":1122,"t_abs":0.023839,"t_rel":0.023839,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075530.278018Z-Hc64317c2-P00001cf3"}
ok 12 - session IDs advertised (fetch v1)

expecting success of 5705.13 'session IDs advertised (push v1)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
{"event":"data","sid":"20221228T075530.968656Z-Hc64317c2-P00001d57","thread":"main","time":"2022-12-28T07:55:31.011877Z","file":"transport.c","line":340,"t_abs":0.049050,"t_rel":0.031956,"nesting":3,"category":"transfer","key":"server-sid","value":"20221228T075530.968656Z-Hc64317c2-P00001d57/20221228T075531.002669Z-Hc64317c2-P00001d5f"}
{"event":"data","sid":"20221228T075530.968656Z-Hc64317c2-P00001d57/20221228T075531.002669Z-Hc64317c2-P00001d5f","thread":"main","time":"2022-12-28T07:55:31.018143Z","file":"builtin/receive-pack.c","line":2107,"t_abs":0.018500,"t_rel":0.018500,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075530.968656Z-Hc64317c2-P00001d57"}
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 13 - session IDs advertised (push v1)

expecting success of 5705.14 'client & server log negotiated version (v1)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-client-events &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075531.492804Z-Hc64317c2-P00001dd7","thread":"main","time":"2022-12-28T07:55:31.532894Z","file":"connect.c","line":167,"t_abs":0.043175,"t_rel":0.025944,"nesting":2,"category":"transfer","key":"negotiated-version","value":"1"}
{"event":"data","sid":"20221228T075531.492804Z-Hc64317c2-P00001dd7/20221228T075531.526238Z-Hc64317c2-P00001de1","thread":"main","time":"2022-12-28T07:55:31.532415Z","file":"protocol.c","line":76,"t_abs":0.009489,"t_rel":0.009489,"nesting":1,"category":"transfer","key":"negotiated-version","value":"1"}
ok 14 - client & server log negotiated version (v1)

expecting success of 5705.15 'session IDs advertised (fetch v2)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075531.866032Z-Hc64317c2-P00001e22","thread":"main","time":"2022-12-28T07:55:31.911645Z","file":"transport.c","line":323,"t_abs":0.049466,"t_rel":0.027034,"nesting":2,"category":"transfer","key":"server-sid","value":"20221228T075531.866032Z-Hc64317c2-P00001e22/20221228T075531.903491Z-Hc64317c2-P00001e2b"}
{"event":"data","sid":"20221228T075531.866032Z-Hc64317c2-P00001e22/20221228T075531.903491Z-Hc64317c2-P00001e2b","thread":"main","time":"2022-12-28T07:55:31.922831Z","file":"serve.c","line":64,"t_abs":0.022752,"t_rel":0.022752,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075531.866032Z-Hc64317c2-P00001e22"}
ok 15 - session IDs advertised (fetch v2)

expecting success of 5705.16 'session IDs advertised (push v2)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		test_when_finished "git -C local push --delete origin new-branch" &&
		cp -r "$LOCAL_PRISTINE" local &&
		git -C local pull --no-rebase origin &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local push \
			--receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
			origin HEAD:new-branch &&
		grep \"key\":\"server-sid\" tr2-client-events &&
		grep \"key\":\"client-sid\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
Updating ce450c7..020ea9b
Fast-forward
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 * [new branch]      HEAD -> new-branch
{"event":"data","sid":"20221228T075532.563858Z-Hc64317c2-P00001eb6","thread":"main","time":"2022-12-28T07:55:32.602138Z","file":"transport.c","line":340,"t_abs":0.041347,"t_rel":0.027109,"nesting":3,"category":"transfer","key":"server-sid","value":"20221228T075532.563858Z-Hc64317c2-P00001eb6/20221228T075532.593066Z-Hc64317c2-P00001ec0"}
{"event":"data","sid":"20221228T075532.563858Z-Hc64317c2-P00001eb6/20221228T075532.593066Z-Hc64317c2-P00001ec0","thread":"main","time":"2022-12-28T07:55:32.605659Z","file":"builtin/receive-pack.c","line":2107,"t_abs":0.015605,"t_rel":0.015605,"nesting":1,"category":"transfer","key":"client-sid","value":"20221228T075532.563858Z-Hc64317c2-P00001eb6"}
To file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
 - [deleted]         new-branch
ok 16 - session IDs advertised (push v2)

expecting success of 5705.17 'client & server log negotiated version (v2)': 
		test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
		cp -r "$LOCAL_PRISTINE" local &&
		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
		git -c protocol.version=$PROTO -C local fetch \
			--upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \
			origin &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-client-events &&
		grep \"key\":\"negotiated-version\",\"value\":\"$PROTO\" tr2-server-events
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5705-session-id-in-capabilities/repo
   ce450c7..020ea9b  master     -> origin/master
 * [new tag]         b          -> b
{"event":"data","sid":"20221228T075532.995779Z-Hc64317c2-P00001f1e","thread":"main","time":"2022-12-28T07:55:33.038927Z","file":"connect.c","line":167,"t_abs":0.046465,"t_rel":0.028917,"nesting":2,"category":"transfer","key":"negotiated-version","value":"2"}
{"event":"data","sid":"20221228T075532.995779Z-Hc64317c2-P00001f1e/20221228T075533.031459Z-Hc64317c2-P00001f23","thread":"main","time":"2022-12-28T07:55:33.037864Z","file":"protocol.c","line":76,"t_abs":0.009710,"t_rel":0.009710,"nesting":1,"category":"transfer","key":"negotiated-version","value":"2"}
ok 17 - client & server log negotiated version (v2)

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5802-connect-helper.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5802-connect-helper/.git/
expecting success of 5802.1 'setup': 
	git config --global protocol.ext.allow user &&
	test_tick &&
	git commit --allow-empty -m initial &&
	test_tick &&
	git commit --allow-empty -m second &&
	test_tick &&
	git commit --allow-empty -m third &&
	test_tick &&
	git tag -a -m "tip three" three &&

	test_tick &&
	git commit --allow-empty -m fourth

[master (root-commit) 66fe8b3] initial
 Author: A U Thor <author@example.com>
[master 5ce2b00] second
 Author: A U Thor <author@example.com>
[master 8019b76] third
 Author: A U Thor <author@example.com>
[master b0c6cf2] fourth
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 5802.2 'clone': 
	cmd=$(echo "echo >&2 ext::sh invoked && %S .." | sed -e "s/ /% /g") &&
	git clone "ext::sh -c %S% ." dst &&
	git for-each-ref refs/heads/ refs/tags/ >expect &&
	(
		cd dst &&
		git config remote.origin.url "ext::sh -c $cmd" &&
		git for-each-ref refs/heads/ refs/tags/
	) >actual &&
	test_cmp expect actual

Cloning into 'dst'...
ok 2 - clone

expecting success of 5802.3 'update following tag': 
	test_tick &&
	git commit --allow-empty -m fifth &&
	test_tick &&
	git tag -a -m "tip five" five &&
	git for-each-ref refs/heads/ refs/tags/ >expect &&
	(
		cd dst &&
		git pull &&
		git for-each-ref refs/heads/ refs/tags/ >../actual
	) &&
	test_cmp expect actual

[master a643494] fifth
 Author: A U Thor <author@example.com>
ext::sh invoked
From ext::sh -c echo% >&2% ext::sh% invoked% &&% %S% ..
   b0c6cf2..a643494  master     -> origin/master
 * [new tag]         five       -> five
Updating b0c6cf2..a643494
Fast-forward
ok 3 - update following tag

expecting success of 5802.4 'update backfilled tag': 
	test_tick &&
	git commit --allow-empty -m sixth &&
	test_tick &&
	git tag -a -m "tip two" two three^1 &&
	git for-each-ref refs/heads/ refs/tags/ >expect &&
	(
		cd dst &&
		git pull &&
		git for-each-ref refs/heads/ refs/tags/ >../actual
	) &&
	test_cmp expect actual

[master 06b114e] sixth
 Author: A U Thor <author@example.com>
ext::sh invoked
From ext::sh -c echo% >&2% ext::sh% invoked% &&% %S% ..
   a643494..06b114e  master     -> origin/master
 * [new tag]         two        -> two
Updating a643494..06b114e
Fast-forward
ok 4 - update backfilled tag

expecting success of 5802.5 'update backfilled tag without primary transfer': 
	test_tick &&
	git tag -a -m "tip one " one two^1 &&
	git for-each-ref refs/heads/ refs/tags/ >expect &&
	(
		cd dst &&
		git pull &&
		git for-each-ref refs/heads/ refs/tags/ >../actual
	) &&
	test_cmp expect actual

ext::sh invoked
From ext::sh -c echo% >&2% ext::sh% invoked% &&% %S% ..
 * [new tag]         one        -> one
Already up to date.
ok 5 - update backfilled tag without primary transfer

expecting success of 5802.6 'set up fake git-daemon': 
	mkdir remote &&
	git init --bare remote/one.git &&
	mkdir remote/host &&
	git init --bare remote/host/two.git &&
	write_script fake-daemon <<-\EOF &&
	git daemon --inetd \
		--informative-errors \
		--export-all \
		--base-path="$TRASH_DIRECTORY/remote" \
		--interpolated-path="$TRASH_DIRECTORY/remote/%H%D" \
		"$TRASH_DIRECTORY/remote"
	EOF
	export TRASH_DIRECTORY &&
	PATH=$TRASH_DIRECTORY:$PATH

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5802-connect-helper/remote/one.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5802-connect-helper/remote/host/two.git/
ok 6 - set up fake git-daemon

expecting success of 5802.7 'ext command can connect to git daemon (no vhost)': 
	rm -rf dst &&
	git clone "ext::fake-daemon %G/one.git" dst

Cloning into 'dst'...
warning: You appear to have cloned an empty repository.
ok 7 - ext command can connect to git daemon (no vhost)

expecting success of 5802.8 'ext command can connect to git daemon (vhost)': 
	rm -rf dst &&
	git clone "ext::fake-daemon %G/two.git %Vhost" dst

Cloning into 'dst'...
warning: You appear to have cloned an empty repository.
ok 8 - ext command can connect to git daemon (vhost)

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5810-proto-disable-local.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/.git/
expecting success of 5810.1 'setup repository to clone': 
	test_commit one

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - setup repository to clone

expecting success of 5810.2 'clone file:// (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
ok 2 - clone file:// (enabled)

expecting success of 5810.3 'fetch file:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local
 * branch            HEAD       -> FETCH_HEAD
ok 3 - fetch file:// (enabled)

expecting success of 5810.4 'push file:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
To file:///<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local
 * [new branch]      HEAD -> pushed
ok 4 - push file:// (enabled)

expecting success of 5810.5 'push file:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'file' not allowed
ok 5 - push file:// (disabled)

expecting success of 5810.6 'fetch file:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'file' not allowed
ok 6 - fetch file:// (disabled)

expecting success of 5810.7 'clone file:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 7 - clone file:// (disabled)

expecting success of 5810.8 'clone file:// (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 8 - clone file:// (env var has precedence)

expecting success of 5810.9 'clone file:// (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ok 9 - clone file:// (enabled with config)

expecting success of 5810.10 'fetch file:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local
 * branch            HEAD       -> FETCH_HEAD
ok 10 - fetch file:// (enabled)

expecting success of 5810.11 'push file:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
Everything up-to-date
ok 11 - push file:// (enabled)

expecting success of 5810.12 'push file:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'file' not allowed
ok 12 - push file:// (disabled)

expecting success of 5810.13 'fetch file:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'file' not allowed
ok 13 - fetch file:// (disabled)

expecting success of 5810.14 'clone file:// (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 14 - clone file:// (disabled)

expecting success of 5810.15 'clone file:// (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ok 15 - clone file:// (enabled)

expecting success of 5810.16 'fetch file:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local
 * branch            HEAD       -> FETCH_HEAD
ok 16 - fetch file:// (enabled)

expecting success of 5810.17 'push file:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
Everything up-to-date
ok 17 - push file:// (enabled)

expecting success of 5810.18 'push file:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'file' not allowed
ok 18 - push file:// (disabled)

expecting success of 5810.19 'fetch file:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'file' not allowed
ok 19 - fetch file:// (disabled)

expecting success of 5810.20 'clone file:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 20 - clone file:// (disabled)

expecting success of 5810.21 'clone file:// (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ok 21 - clone file:// (enabled)

expecting success of 5810.22 'fetch file:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
From file:///<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local
 * branch            HEAD       -> FETCH_HEAD
ok 22 - fetch file:// (enabled)

expecting success of 5810.23 'push file:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
Everything up-to-date
ok 23 - push file:// (enabled)

expecting success of 5810.24 'push file:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'file' not allowed
ok 24 - push file:// (disabled)

expecting success of 5810.25 'fetch file:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'file' not allowed
ok 25 - fetch file:// (disabled)

expecting success of 5810.26 'clone file:// (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 26 - clone file:// (disabled)

expecting success of 5810.27 'clone path (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
done.
ok 27 - clone path (enabled)

expecting success of 5810.28 'fetch path (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
From /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/.
 * branch            HEAD       -> FETCH_HEAD
ok 28 - fetch path (enabled)

expecting success of 5810.29 'push path (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
Everything up-to-date
ok 29 - push path (enabled)

expecting success of 5810.30 'push path (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'file' not allowed
ok 30 - push path (disabled)

expecting success of 5810.31 'fetch path (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'file' not allowed
ok 31 - fetch path (disabled)

expecting success of 5810.32 'clone path (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 32 - clone path (disabled)

expecting success of 5810.33 'clone path (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 33 - clone path (env var has precedence)

expecting success of 5810.34 'clone path (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
done.
ok 34 - clone path (enabled with config)

expecting success of 5810.35 'fetch path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
From /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/.
 * branch            HEAD       -> FETCH_HEAD
ok 35 - fetch path (enabled)

expecting success of 5810.36 'push path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
Everything up-to-date
ok 36 - push path (enabled)

expecting success of 5810.37 'push path (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'file' not allowed
ok 37 - push path (disabled)

expecting success of 5810.38 'fetch path (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'file' not allowed
ok 38 - fetch path (disabled)

expecting success of 5810.39 'clone path (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 39 - clone path (disabled)

expecting success of 5810.40 'clone path (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
done.
ok 40 - clone path (enabled)

expecting success of 5810.41 'fetch path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
From /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/.
 * branch            HEAD       -> FETCH_HEAD
ok 41 - fetch path (enabled)

expecting success of 5810.42 'push path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
Everything up-to-date
ok 42 - push path (enabled)

expecting success of 5810.43 'push path (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'file' not allowed
ok 43 - push path (disabled)

expecting success of 5810.44 'fetch path (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'file' not allowed
ok 44 - fetch path (disabled)

expecting success of 5810.45 'clone path (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 45 - clone path (disabled)

expecting success of 5810.46 'clone path (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
done.
ok 46 - clone path (enabled)

expecting success of 5810.47 'fetch path (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
From /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/.
 * branch            HEAD       -> FETCH_HEAD
ok 47 - fetch path (enabled)

expecting success of 5810.48 'push path (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
Everything up-to-date
ok 48 - push path (enabled)

expecting success of 5810.49 'push path (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'file' not allowed
ok 49 - push path (disabled)

expecting success of 5810.50 'fetch path (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'file' not allowed
ok 50 - fetch path (disabled)

expecting success of 5810.51 'clone path (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'file' not allowed
ok 51 - clone path (disabled)

expecting success of 5810.52 'setup repo with dash': 
	git init --bare repo.git &&
	git push repo.git HEAD &&
	mv repo.git "$PWD/-repo.git"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/repo.git/
To repo.git
 * [new branch]      HEAD -> master
ok 52 - setup repo with dash

expecting success of 5810.53 'repo names starting with dash are rejected': 
	rm -f trace.out &&
	test_must_fail env GIT_TRACE="$PWD/trace.out" git fetch -- -repo.git &&
	! grep upload-pack trace.out

fatal: strange pathname '-repo.git' blocked
ok 53 - repo names starting with dash are rejected

expecting success of 5810.54 'full paths still work': 
	git fetch "$PWD/-repo.git"

From /<<PKGBUILDDIR>>/t/trash directory.t5810-proto-disable-local/-repo
 * branch            HEAD       -> FETCH_HEAD
ok 54 - full paths still work

# passed all 54 test(s)
1..54
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5616-partial-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/.git/
expecting success of 5616.1 'setup normal src repo': 
	echo "{print \$1}" >print_1.awk &&
	echo "{print \$2}" >print_2.awk &&

	git init src &&
	for n in 1 2 3 4
	do
		echo "This is file: $n" > src/file.$n.txt &&
		git -C src add file.$n.txt &&
		git -C src commit -m "file $n" &&
		git -C src ls-files -s file.$n.txt >>temp || return 1
	done &&
	awk -f print_2.awk <temp | sort >expect_1.oids &&
	test_line_count = 4 expect_1.oids

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src/.git/
[main (root-commit) a042509] file 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.1.txt
[main 6a6b7aa] file 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.2.txt
[main 2b2f6e6] file 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.3.txt
[main aeb0144] file 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.4.txt
ok 1 - setup normal src repo

expecting success of 5616.2 'setup bare clone for server': 
	git clone --bare "file://$(pwd)/src" srv.bare &&
	git -C srv.bare config --local uploadpack.allowfilter 1 &&
	git -C srv.bare config --local uploadpack.allowanysha1inwant 1

Cloning into bare repository 'srv.bare'...
ok 2 - setup bare clone for server

expecting success of 5616.3 'do partial clone 1': 
	git clone --no-checkout --filter=blob:none "file://$(pwd)/srv.bare" pc1 &&

	git -C pc1 rev-list --quiet --objects --missing=print HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/?//" |
	sort >observed.oids &&

	test_cmp expect_1.oids observed.oids &&
	test "$(git -C pc1 config --local core.repositoryformatversion)" = "1" &&
	test "$(git -C pc1 config --local remote.origin.promisor)" = "true" &&
	test "$(git -C pc1 config --local remote.origin.partialclonefilter)" = "blob:none"

Cloning into 'pc1'...
ok 3 - do partial clone 1

expecting success of 5616.4 'rev-list --missing=allow-promisor on partial clone': 
	git -C pc1 rev-list --objects --missing=allow-promisor HEAD >actual &&
	git -C pc1 rev-list --objects --missing=print HEAD >expect.raw &&
	grep -v "^?" expect.raw >expect &&
	test_cmp expect actual

ok 4 - rev-list --missing=allow-promisor on partial clone

expecting success of 5616.5 'verify that .promisor file contains refs fetched': 
	ls pc1/.git/objects/pack/pack-*.promisor >promisorlist &&
	test_line_count = 1 promisorlist &&
	git -C srv.bare rev-parse --verify HEAD >headhash &&
	grep "$(cat headhash) HEAD" $(cat promisorlist) &&
	grep "$(cat headhash) refs/heads/main" $(cat promisorlist)

aeb0144502699ac86da4c2c98d4cd3b741c6c645 HEAD
aeb0144502699ac86da4c2c98d4cd3b741c6c645 refs/heads/main
ok 5 - verify that .promisor file contains refs fetched

expecting success of 5616.6 'verify checkout with dynamic object fetch': 
	git -C pc1 rev-list --quiet --objects --missing=print HEAD >observed &&
	test_line_count = 4 observed &&
	git -C pc1 checkout main &&
	git -C pc1 rev-list --quiet --objects --missing=print HEAD >observed &&
	test_line_count = 0 observed

Already on 'main'
Your branch is up to date with 'origin/main'.
ok 6 - verify checkout with dynamic object fetch

expecting success of 5616.7 'push new commits to server': 
	git -C src remote add srv "file://$(pwd)/srv.bare" &&
	for x in a b c d e
	do
		echo "Mod file.1.txt $x" >>src/file.1.txt &&
		git -C src add file.1.txt &&
		git -C src commit -m "mod $x" || return 1
	done &&
	git -C src blame main -- file.1.txt >expect.blame &&
	git -C src push -u srv main

[main b4a5c87] mod a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 2260bed] mod b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 85d45de] mod c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main f571048] mod d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main d0edb11] mod e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   aeb0144..d0edb11  main -> main
branch 'main' set up to track 'srv/main'.
ok 7 - push new commits to server

expecting success of 5616.8 'partial fetch inherits filter settings': 
	git -C pc1 fetch origin &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 5 observed

From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   aeb0144..d0edb11  main       -> origin/main
ok 8 - partial fetch inherits filter settings

expecting success of 5616.9 'verify diff causes dynamic object fetch': 
	git -C pc1 diff main..origin/main -- file.1.txt &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		 main..origin/main >observed &&
	test_line_count = 4 observed

diff --git a/file.1.txt b/file.1.txt
index 54ff69b..5cc7250 100644
--- a/file.1.txt
+++ b/file.1.txt
@@ -1 +1,6 @@
 This is file: 1
+Mod file.1.txt a
+Mod file.1.txt b
+Mod file.1.txt c
+Mod file.1.txt d
+Mod file.1.txt e
ok 9 - verify diff causes dynamic object fetch

expecting success of 5616.10 'verify blame causes dynamic object fetch': 
	git -C pc1 blame origin/main -- file.1.txt >observed.blame &&
	test_cmp expect.blame observed.blame &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 0 observed

ok 10 - verify blame causes dynamic object fetch

expecting success of 5616.11 'push new commits to server for file.2.txt': 
	for x in a b c d e f
	do
		echo "Mod file.2.txt $x" >>src/file.2.txt &&
		git -C src add file.2.txt &&
		git -C src commit -m "mod $x" || return 1
	done &&
	git -C src push -u srv main

[main 50dbe65] mod a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 71d1ab3] mod b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main c2c95e9] mod c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 95992c5] mod d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main ac0a329] mod e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 03262f2] mod f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   d0edb11..03262f2  main -> main
branch 'main' set up to track 'srv/main'.
ok 11 - push new commits to server for file.2.txt

expecting success of 5616.12 'override inherited filter-spec using --no-filter': 
	git -C pc1 fetch --no-filter origin &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 0 observed

From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   d0edb11..03262f2  main       -> origin/main
ok 12 - override inherited filter-spec using --no-filter

expecting success of 5616.13 'push new commits to server for file.3.txt': 
	for x in a b c d e f
	do
		echo "Mod file.3.txt $x" >>src/file.3.txt &&
		git -C src add file.3.txt &&
		git -C src commit -m "mod $x" || return 1
	done &&
	git -C src push -u srv main

[main 2456429] mod a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main f359f06] mod b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main ed3a9d1] mod c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 42a1e60] mod d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 2827aa8] mod e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 3f5edd7] mod f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
To file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   03262f2..3f5edd7  main -> main
branch 'main' set up to track 'srv/main'.
ok 13 - push new commits to server for file.3.txt

expecting success of 5616.14 'manual prefetch of missing objects': 
	git -C pc1 fetch --filter=blob:none origin &&

	git -C pc1 rev-list --quiet --objects --missing=print \
		 main..origin/main >revs &&
	awk -f print_1.awk revs |
	sed "s/?//" |
	sort >observed.oids &&

	test_line_count = 6 observed.oids &&
	git -C pc1 fetch-pack --stdin "file://$(pwd)/srv.bare" <observed.oids &&

	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >revs &&
	awk -f print_1.awk revs |
	sed "s/?//" |
	sort >observed.oids &&

	test_line_count = 0 observed.oids

From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   03262f2..3f5edd7  main       -> origin/main
remote: Enumerating objects: 6, done.        
remote: Counting objects:  16% (1/6)        
remote: Counting objects:  33% (2/6)        
remote: Counting objects:  50% (3/6)        
remote: Counting objects:  66% (4/6)        
remote: Counting objects:  83% (5/6)        
remote: Counting objects: 100% (6/6)        
remote: Counting objects: 100% (6/6), done.        
remote: Compressing objects:  20% (1/5)        
remote: Compressing objects:  40% (2/5)        
remote: Compressing objects:  60% (3/5)        
remote: Compressing objects:  80% (4/5)        
remote: Compressing objects: 100% (5/5)        
remote: Compressing objects: 100% (5/5), done.        
remote: Total 6 (delta 4), reused 0 (delta 0), pack-reused 0        
7724cffe11579f391f6c098265878597ecd1ca74 7724cffe11579f391f6c098265878597ecd1ca74
7c22d416ccef0f2e04b1909d448fa12714ed0c5a 7c22d416ccef0f2e04b1909d448fa12714ed0c5a
7d87eff241fc01757db1d4f2f4710fbaeacd9950 7d87eff241fc01757db1d4f2f4710fbaeacd9950
9f8a0fb67784f4d9b9f81d22baf14c5bead82c7d 9f8a0fb67784f4d9b9f81d22baf14c5bead82c7d
a5e78dc6f3d20c8de85b54d4596946979a89d383 a5e78dc6f3d20c8de85b54d4596946979a89d383
e5f3bec205041acafa4538978741f185e437e1ee e5f3bec205041acafa4538978741f185e437e1ee
ok 14 - manual prefetch of missing objects

expecting success of 5616.15 'push new commits to server for file.4.txt': 
	for x in a b c d e f
	do
		echo "Mod file.4.txt $x" >src/file.4.txt &&
		if list_contains "a,b" "$x"; then
			printf "%10000s" X >>src/file.4.txt
		fi &&
		if list_contains "c,d" "$x"; then
			printf "%20000s" X >>src/file.4.txt
		fi &&
		git -C src add file.4.txt &&
		git -C src commit -m "mod $x" || return 1
	done &&
	git -C src push -u srv main

[main e9880ed] mod a
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 1 deletion(-)
[main b08fb33] mod b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main dc63000] mod c
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
[main d79e7f2] mod d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0e6343d] mod e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
[main 129c8a2] mod f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
To file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   3f5edd7..129c8a2  main -> main
branch 'main' set up to track 'srv/main'.
ok 15 - push new commits to server for file.4.txt

expecting success of 5616.16 'apply a different filter using --refetch': 
	git -C pc1 fetch --filter=blob:limit=999 origin &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 4 observed &&

	git -C pc1 fetch --filter=blob:limit=19999 --refetch origin &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 2 observed &&

	git -c protocol.version=0 -C pc1 fetch --filter=blob:limit=29999 \
		--refetch origin &&
	git -C pc1 rev-list --quiet --objects --missing=print \
		main..origin/main >observed &&
	test_line_count = 0 observed

From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   3f5edd7..129c8a2  main       -> origin/main
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
ok 16 - apply a different filter using --refetch

expecting success of 5616.17 'fetch --refetch works with a shallow clone': 
	git clone --no-checkout --depth=1 --filter=blob:none "file://$(pwd)/srv.bare" pc1s &&
	git -C pc1s rev-list --objects --missing=print HEAD >observed &&
	test_line_count = 6 observed &&

	GIT_TRACE=1 git -C pc1s fetch --filter=blob:limit=999 --refetch origin &&
	git -C pc1s rev-list --objects --missing=print HEAD >observed &&
	test_line_count = 6 observed

Cloning into 'pc1s'...
trace: built-in: git fetch --filter=blob:limit=999 --refetch origin
trace: run_command: unset GIT_PREFIX; GIT_PROTOCOL=version=2 'git-upload-pack '\''/<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare'\'''
trace: built-in: git upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare'
trace: run_command: git --shallow-file '' pack-objects --revs --thin --stdout --shallow --delta-base-offset --include-tag --filter=blob:limit=999
remote: trace: built-in: git pack-objects --revs --thin --stdout --shallow --delta-base-offset --include-tag --filter=blob:limit=999        
trace: run_command: git index-pack --stdin --fix-thin --promisor --pack_header=2,6
trace: built-in: git index-pack --stdin --fix-thin --promisor --pack_header=2,6
run_processes_parallel: preparing to run up to 1 tasks
run_processes_parallel: done
trace: run_command: git maintenance run --auto --no-quiet
trace: built-in: git maintenance run --auto --no-quiet
trace: run_command: git gc --auto --no-quiet
trace: built-in: git gc --auto --no-quiet
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
trace: run_command: git pack-refs --all --prune
trace: built-in: git pack-refs --all --prune
trace: run_command: git reflog expire --all
trace: built-in: git reflog expire --all
ok 17 - fetch --refetch works with a shallow clone

expecting success of 5616.18 'fetch --refetch triggers repacking': 
	GIT_TRACE2_CONFIG_PARAMS=gc.autoPackLimit,maintenance.incremental-repack.auto &&
	export GIT_TRACE2_CONFIG_PARAMS &&

	GIT_TRACE2_EVENT="$PWD/trace1.event" \
	git -C pc1 fetch --refetch origin &&
	test_subcommand git maintenance run --auto --no-quiet <trace1.event &&
	grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace1.event &&
	grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace1.event &&

	GIT_TRACE2_EVENT="$PWD/trace2.event" \
	git -c protocol.version=0 \
		-c gc.autoPackLimit=0 \
		-c maintenance.incremental-repack.auto=1234 \
		-C pc1 fetch --refetch origin &&
	test_subcommand git maintenance run --auto --no-quiet <trace2.event &&
	grep \"param\":\"gc.autopacklimit\",\"value\":\"0\" trace2.event &&
	grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace2.event &&

	GIT_TRACE2_EVENT="$PWD/trace3.event" \
	git -c protocol.version=0 \
		-c gc.autoPackLimit=1234 \
		-c maintenance.incremental-repack.auto=0 \
		-C pc1 fetch --refetch origin &&
	test_subcommand git maintenance run --auto --no-quiet <trace3.event &&
	grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace3.event &&
	grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"0\" trace3.event

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
{"event":"child_start","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b","thread":"main","time":"2022-12-28T07:55:04.083193Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","maintenance","run","--auto","--no-quiet"]}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f","thread":"main","time":"2022-12-28T07:55:04.107109Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65","thread":"main","time":"2022-12-28T07:55:04.135990Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.173215Z-Hc64317c2-P00000b6f","thread":"main","time":"2022-12-28T07:55:04.180705Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.206153Z-Hc64317c2-P00000b78","thread":"main","time":"2022-12-28T07:55:04.212931Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.270503Z-Hc64317c2-P00000b84","thread":"main","time":"2022-12-28T07:55:04.274759Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.270503Z-Hc64317c2-P00000b84/20221228T075504.292342Z-Hc64317c2-P00000b86","thread":"main","time":"2022-12-28T07:55:04.297211Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f","thread":"main","time":"2022-12-28T07:55:04.107326Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65","thread":"main","time":"2022-12-28T07:55:04.136116Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.173215Z-Hc64317c2-P00000b6f","thread":"main","time":"2022-12-28T07:55:04.180870Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.206153Z-Hc64317c2-P00000b78","thread":"main","time":"2022-12-28T07:55:04.213116Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.270503Z-Hc64317c2-P00000b84","thread":"main","time":"2022-12-28T07:55:04.274960Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"def_param","sid":"20221228T075503.768645Z-Hc64317c2-P00000b1b/20221228T075504.100821Z-Hc64317c2-P00000b5f/20221228T075504.129817Z-Hc64317c2-P00000b65/20221228T075504.270503Z-Hc64317c2-P00000b84/20221228T075504.292342Z-Hc64317c2-P00000b86","thread":"main","time":"2022-12-28T07:55:04.297384Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
{"event":"child_start","sid":"20221228T075504.374939Z-Hc64317c2-P00000b96","thread":"main","time":"2022-12-28T07:55:04.660899Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","maintenance","run","--auto","--no-quiet"]}
{"event":"def_param","sid":"20221228T075504.374939Z-Hc64317c2-P00000b96","thread":"main","time":"2022-12-28T07:55:04.384072Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"0"}
{"event":"def_param","sid":"20221228T075504.374939Z-Hc64317c2-P00000b96/20221228T075504.619923Z-Hc64317c2-P00000bc2","thread":"main","time":"2022-12-28T07:55:04.626453Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"0"}
{"event":"def_param","sid":"20221228T075504.374939Z-Hc64317c2-P00000b96/20221228T075504.685942Z-Hc64317c2-P00000bd0","thread":"main","time":"2022-12-28T07:55:04.695349Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"0"}
{"event":"def_param","sid":"20221228T075504.374939Z-Hc64317c2-P00000b96/20221228T075504.685942Z-Hc64317c2-P00000bd0","thread":"main","time":"2022-12-28T07:55:04.695637Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"-1"}
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
{"event":"child_start","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1","thread":"main","time":"2022-12-28T07:55:05.062366Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","maintenance","run","--auto","--no-quiet"]}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19","thread":"main","time":"2022-12-28T07:55:05.083940Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21","thread":"main","time":"2022-12-28T07:55:05.108903Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.129549Z-Hc64317c2-P00000c24","thread":"main","time":"2022-12-28T07:55:05.136490Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.154948Z-Hc64317c2-P00000c29","thread":"main","time":"2022-12-28T07:55:05.161940Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.202716Z-Hc64317c2-P00000c33","thread":"main","time":"2022-12-28T07:55:05.207175Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.202716Z-Hc64317c2-P00000c33/20221228T075505.226628Z-Hc64317c2-P00000c37","thread":"main","time":"2022-12-28T07:55:05.230898Z","file":"git.c","line":462,"scope":"command","param":"gc.autopacklimit","value":"1"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1","thread":"main","time":"2022-12-28T07:55:04.788220Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.012021Z-Hc64317c2-P00000c0a","thread":"main","time":"2022-12-28T07:55:05.019545Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19","thread":"main","time":"2022-12-28T07:55:05.083830Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21","thread":"main","time":"2022-12-28T07:55:05.108757Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.129549Z-Hc64317c2-P00000c24","thread":"main","time":"2022-12-28T07:55:05.136384Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.154948Z-Hc64317c2-P00000c29","thread":"main","time":"2022-12-28T07:55:05.161807Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.202716Z-Hc64317c2-P00000c33","thread":"main","time":"2022-12-28T07:55:05.207078Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.202716Z-Hc64317c2-P00000c33/20221228T075505.226628Z-Hc64317c2-P00000c37","thread":"main","time":"2022-12-28T07:55:05.230758Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
{"event":"def_param","sid":"20221228T075504.781236Z-Hc64317c2-P00000be1/20221228T075505.077303Z-Hc64317c2-P00000c19/20221228T075505.102462Z-Hc64317c2-P00000c21/20221228T075505.202716Z-Hc64317c2-P00000c33/20221228T075505.262433Z-Hc64317c2-P00000c3f","thread":"main","time":"2022-12-28T07:55:05.266342Z","file":"git.c","line":462,"scope":"command","param":"maintenance.incremental-repack.auto","value":"0"}
ok 18 - fetch --refetch triggers repacking

expecting success of 5616.19 'partial clone with transfer.fsckobjects=1 works with submodules': 
	test_create_repo submodule &&
	test_commit -C submodule mycommit &&

	test_create_repo src_with_sub &&
	test_config -C src_with_sub uploadpack.allowfilter 1 &&
	test_config -C src_with_sub uploadpack.allowanysha1inwant 1 &&

	test_config_global protocol.file.allow always &&

	git -C src_with_sub submodule add "file://$(pwd)/submodule" mysub &&
	git -C src_with_sub commit -m "commit with submodule" &&

	git -c transfer.fsckobjects=1 \
		clone --filter="blob:none" "file://$(pwd)/src_with_sub" dst &&
	test_when_finished rm -rf dst

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/submodule/.git/
[main (root-commit) 35ce5a7] mycommit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 mycommit.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src_with_sub/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src_with_sub/mysub'...
[main (root-commit) b9ea758] commit with submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 mysub
Cloning into 'dst'...
ok 19 - partial clone with transfer.fsckobjects=1 works with submodules

expecting success of 5616.20 'partial clone with transfer.fsckobjects=1 uses index-pack --fsck-objects': 
	git init src &&
	test_commit -C src x &&
	test_config -C src uploadpack.allowfilter 1 &&
	test_config -C src uploadpack.allowanysha1inwant 1 &&

	GIT_TRACE="$(pwd)/trace" git -c transfer.fsckobjects=1 \
		clone --filter="blob:none" "file://$(pwd)/src" dst &&
	grep "git index-pack.*--fsck-objects" trace

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src/.git/
[main 1fb08d4] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
Cloning into 'dst'...
trace: run_command: git index-pack --stdin --fix-thin '--keep=fetch-pack 3426 on testwandboard' --promisor --fsck-objects
trace: built-in: git index-pack --stdin --fix-thin '--keep=fetch-pack 3426 on testwandboard' --promisor --fsck-objects
trace: run_command: git index-pack --stdin --fix-thin --promisor --pack_header=2,5 --fsck-objects
trace: built-in: git index-pack --stdin --fix-thin --promisor --pack_header=2,5 --fsck-objects
ok 20 - partial clone with transfer.fsckobjects=1 uses index-pack --fsck-objects

expecting success of 5616.21 'use fsck before and after manually fetching a missing subtree': 
	# push new commit so server has a subtree
	mkdir src/dir &&
	echo "in dir" >src/dir/file.txt &&
	git -C src add dir/file.txt &&
	git -C src commit -m "file in dir" &&
	git -C src push -u srv main &&
	SUBTREE=$(git -C src rev-parse HEAD:dir) &&

	rm -rf dst &&
	git clone --no-checkout --filter=tree:0 "file://$(pwd)/srv.bare" dst &&
	git -C dst fsck &&

	# Make sure we only have commits, and all trees and blobs are missing.
	git -C dst rev-list --missing=allow-any --objects main \
		>fetched_objects &&
	awk -f print_1.awk fetched_objects |
	xargs -n1 git -C dst cat-file -t >fetched_types &&

	sort -u fetched_types >unique_types.observed &&
	echo commit >unique_types.expected &&
	test_cmp unique_types.expected unique_types.observed &&

	# Auto-fetch a tree with cat-file.
	git -C dst cat-file -p $SUBTREE >tree_contents &&
	grep file.txt tree_contents &&

	# fsck still works after an auto-fetch of a tree.
	git -C dst fsck &&

	# Auto-fetch all remaining trees and blobs with --missing=error
	git -C dst rev-list --missing=error --objects main >fetched_objects &&
	test_line_count = 88 fetched_objects &&

	awk -f print_1.awk fetched_objects |
	xargs -n1 git -C dst cat-file -t >fetched_types &&

	sort -u fetched_types >unique_types.observed &&
	test_write_lines blob commit tree >unique_types.expected &&
	test_cmp unique_types.expected unique_types.observed

[main 957c60b] file in dir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/file.txt
To file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   129c8a2..957c60b  main -> main
branch 'main' set up to track 'srv/main'.
Cloning into 'dst'...
100644 blob d2cebd4f0a9e97a48a6139d09cafdb513ad8fee3	file.txt
dangling tree bc1967ebf96a4e914801c7ef8328140456a10f41
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
ok 21 - use fsck before and after manually fetching a missing subtree

expecting success of 5616.22 'implicitly construct combine: filter with repeated flags': 
	GIT_TRACE=$(pwd)/trace git clone --bare \
		--filter=blob:none --filter=tree:1 \
		"file://$(pwd)/srv.bare" pc2 &&
	grep "trace:.* git pack-objects .*--filter=combine:blob:none+tree:1" \
		trace &&
	git -C pc2 rev-list --objects --missing=allow-any HEAD >objects &&

	# We should have gotten some root trees.
	grep " $" objects &&
	# Should not have gotten any non-root trees or blobs.
	! grep " ." objects &&

	xargs -n 1 git -C pc2 cat-file -t <objects >types &&
	sort -u types >unique_types.actual &&
	test_write_lines commit tree >unique_types.expected &&
	test_cmp unique_types.expected unique_types.actual

Cloning into bare repository 'pc2'...
trace: run_command: git pack-objects --revs --thin --stdout --delta-base-offset --filter=combine:blob:none+tree:1
trace: built-in: git pack-objects --revs --thin --stdout --delta-base-offset --filter=combine:blob:none+tree:1
849950ea25ea502730806953150a8b29fbc04fd1 
5e06b9e5aed2904563066a6d041bd48487b00cba 
94a1afd9afa4ab1486352ab1c059762e3e872ce4 
e77db3bdb5e7e6af01bd93bcd0f99a69d939d0aa 
e6f42a769ea1225565ede9aa9e708186165aad4c 
7eaccd314b25541fb2e12c6a9041510af10e1518 
fdb7f75e829001ecb4ca2d6217d7fd04457e275c 
f0075f67c4ce0cc5963de5143fb89b89762976ea 
e891efadd67ca0c01b1c518a2fd91130d40f5904 
b1ada3a7551c02bc311cab409bcdb3210cc0db2b 
a00681e4a08fb4916de7e62d89de5b662ef1860a 
6a1c4b6f6db25436faf11feadebfa98132273db5 
a7d56826180d177dcd33e04e00c6ae488eda8dd2 
91d0f663d7a546b2e8dfad2b8298f743aae0b020 
ddb185bb2b7d210636855cd4f053ea8ff15c8f1c 
974a5d9aee9b30da804ae932f36ed0eb7f5a2c50 
2ce2a26473b0751a79d9c42a2a4480fa73fe4f15 
f7e2c683a7004d4fb81563ae0a3087442db18354 
26f5e35d8a7ae9658923cf3ccdfc19c86a3e1424 
4c015c7e720cb846212f85d6513eaf497ea021fe 
b1d4c4f82f23b1f0779bc7e8f360950eaab333da 
aa3aad2daa2266f2379fa0b387e0c47ce7fc59bd 
5768e37e39ded4ab416a0e61f824cad46e996fec 
3a35e4cd4fbd2d3dbcd056d0e997a47518d10432 
3246c304205324149983025431c5211438f41931 
dfce1aed58f95775a6963107c4471a9f0bfff6e6 
25c201430fa73e4f524ad53e88ef255c807b27e0 
aa8fcdda393dec1e72abbb7f868b7d971b730a19 
3f2b9ee6d5378134943b47172ba029ae46a49419 
ok 22 - implicitly construct combine: filter with repeated flags

expecting success of 5616.23 'upload-pack complains of bogus filter config': 
	printf 0000 |
	test_must_fail git \
		-c uploadpackfilter.tree.maxdepth \
		upload-pack . >/dev/null 2>err &&
	test_i18ngrep "unable to parse.*tree.maxdepth" err

fatal: unable to parse 'uploadpackfilter.tree.maxdepth' from command-line config
ok 23 - upload-pack complains of bogus filter config

expecting success of 5616.24 'upload-pack fails banned object filters': 
	test_config -C srv.bare uploadpackfilter.blob:none.allow false &&
	test_must_fail ok=sigpipe git clone --no-checkout --filter=blob:none \
		"file://$(pwd)/srv.bare" pc3 2>err &&
	test_i18ngrep "filter 'blob:none' not supported" err

fatal: filter 'blob:none' not supported
fatal: remote error: filter 'blob:none' not supported
ok 24 - upload-pack fails banned object filters

expecting success of 5616.25 'upload-pack fails banned combine object filters': 
	test_config -C srv.bare uploadpackfilter.allow false &&
	test_config -C srv.bare uploadpackfilter.combine.allow true &&
	test_config -C srv.bare uploadpackfilter.tree.allow true &&
	test_config -C srv.bare uploadpackfilter.blob:none.allow false &&
	test_must_fail ok=sigpipe git clone --no-checkout --filter=tree:1 \
		--filter=blob:none "file://$(pwd)/srv.bare" pc3 2>err &&
	test_i18ngrep "filter 'blob:none' not supported" err

fatal: filter 'blob:none' not supported
fatal: remote error: filter 'blob:none' not supported
ok 25 - upload-pack fails banned combine object filters

expecting success of 5616.26 'upload-pack fails banned object filters with fallback': 
	test_config -C srv.bare uploadpackfilter.allow false &&
	test_must_fail ok=sigpipe git clone --no-checkout --filter=blob:none \
		"file://$(pwd)/srv.bare" pc3 2>err &&
	test_i18ngrep "filter 'blob:none' not supported" err

fatal: filter 'blob:none' not supported
fatal: remote error: filter 'blob:none' not supported
ok 26 - upload-pack fails banned object filters with fallback

expecting success of 5616.27 'upload-pack limits tree depth filters': 
	test_config -C srv.bare uploadpackfilter.allow false &&
	test_config -C srv.bare uploadpackfilter.tree.allow true &&
	test_config -C srv.bare uploadpackfilter.tree.maxDepth 0 &&
	test_must_fail ok=sigpipe git clone --no-checkout --filter=tree:1 \
		"file://$(pwd)/srv.bare" pc3 2>err &&
	test_i18ngrep "tree filter allows max depth 0, but got 1" err &&

	git clone --no-checkout --filter=tree:0 "file://$(pwd)/srv.bare" pc4 &&

	test_config -C srv.bare uploadpackfilter.tree.maxDepth 5 &&
	git clone --no-checkout --filter=tree:5 "file://$(pwd)/srv.bare" pc5 &&
	test_must_fail ok=sigpipe git clone --no-checkout --filter=tree:6 \
		"file://$(pwd)/srv.bare" pc6 2>err &&
	test_i18ngrep "tree filter allows max depth 5, but got 6" err

fatal: tree filter allows max depth 0, but got 1
fatal: remote error: tree filter allows max depth 0, but got 1
Cloning into 'pc4'...
Cloning into 'pc5'...
fatal: tree filter allows max depth 5, but got 6
fatal: remote error: tree filter allows max depth 5, but got 6
ok 27 - upload-pack limits tree depth filters

expecting success of 5616.28 'partial clone fetches blobs pointed to by refs even if normally filtered out': 
	rm -rf src dst &&
	git init src &&
	test_commit -C src x &&
	test_config -C src uploadpack.allowfilter 1 &&
	test_config -C src uploadpack.allowanysha1inwant 1 &&

	# Create a tag pointing to a blob.
	BLOB=$(echo blob-contents | git -C src hash-object --stdin -w) &&
	git -C src tag myblob "$BLOB" &&

	git clone --filter="blob:none" "file://$(pwd)/src" dst 2>err &&
	! grep "does not point to a valid object" err &&
	git -C dst fsck

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src/.git/
[main (root-commit) d63d3b7] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x.t
ok 28 - partial clone fetches blobs pointed to by refs even if normally filtered out

expecting success of 5616.29 'fetch what is specified on CLI even if already promised': 
	rm -rf src dst.git &&
	git init src &&
	test_commit -C src foo &&
	test_config -C src uploadpack.allowfilter 1 &&
	test_config -C src uploadpack.allowanysha1inwant 1 &&

	git hash-object --stdin <src/foo.t >blob &&

	git clone --bare --filter=blob:none "file://$(pwd)/src" dst.git &&
	git -C dst.git rev-list --objects --quiet --missing=print HEAD >missing_before &&
	grep "?$(cat blob)" missing_before &&
	git -C dst.git fetch origin $(cat blob) &&
	git -C dst.git rev-list --objects --quiet --missing=print HEAD >missing_after &&
	! grep "?$(cat blob)" missing_after

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src/.git/
[main (root-commit) f80cabb] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into bare repository 'dst.git'...
?257cc5642cb1a054f08cc83f2d943e56fd3ebe99
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src
 * branch            257cc5642cb1a054f08cc83f2d943e56fd3ebe99 -> FETCH_HEAD
ok 29 - fetch what is specified on CLI even if already promised

expecting success of 5616.30 'setup src repo for sparse filter': 
	git init sparse-src &&
	git -C sparse-src config --local uploadpack.allowfilter 1 &&
	git -C sparse-src config --local uploadpack.allowanysha1inwant 1 &&
	test_commit -C sparse-src one &&
	test_commit -C sparse-src two &&
	echo /one.t >sparse-src/only-one &&
	git -C sparse-src add . &&
	git -C sparse-src commit -m "add sparse checkout files"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/sparse-src/.git/
[main (root-commit) 6f4b17f] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 5c4888c] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main cc88d32] add sparse checkout files
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 only-one
ok 30 - setup src repo for sparse filter

expecting success of 5616.31 'partial clone with sparse filter succeeds': 
	rm -rf dst.git &&
	git clone --no-local --bare \
		  --filter=sparse:oid=main:only-one \
		  sparse-src dst.git &&
	(
		cd dst.git &&
		git rev-list --objects --missing=print HEAD >out &&
		grep "^$(git rev-parse HEAD:one.t)" out &&
		grep "^?$(git rev-parse HEAD:two.t)" out
	)

Cloning into bare repository 'dst.git'...
5626abf0f72e58d7a153368ba57db4c673c0e171 one.t
?f719efd430d52bcfc8566a43b2eb655688d38871
ok 31 - partial clone with sparse filter succeeds

expecting success of 5616.32 'partial clone with unresolvable sparse filter fails cleanly': 
	rm -rf dst.git &&
	test_must_fail git clone --no-local --bare \
				 --filter=sparse:oid=main:no-such-name \
				 sparse-src dst.git 2>err &&
	test_i18ngrep "unable to access sparse blob in .main:no-such-name" err &&
	test_must_fail git clone --no-local --bare \
				 --filter=sparse:oid=main \
				 sparse-src dst.git 2>err &&
	test_i18ngrep "unable to parse sparse filter data in" err

grep: err: binary file matches
grep: err: binary file matches
ok 32 - partial clone with unresolvable sparse filter fails cleanly

expecting success of 5616.33 'fetch lazy-fetches only to resolve deltas': 
	setup_triangle &&

	# Exercise to make sure it works. Git will not fetch anything from the
	# promisor remote other than for the big tree (because it needs to
	# resolve the delta).
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client \
		fetch "file://$(pwd)/server" main &&

	# Verify the assumption that the client needed to fetch the delta base
	# to resolve the delta.
	git -C server rev-parse HEAD~1^{tree} >hash &&
	grep "want $(cat hash)" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server/.git/
[main (root-commit) b380020] initial
 Author: A U Thor <author@example.com>
 100 files changed, 100 insertions(+)
 create mode 100644 file1
 create mode 100644 file10
 create mode 100644 file100
 create mode 100644 file11
 create mode 100644 file12
 create mode 100644 file13
 create mode 100644 file14
 create mode 100644 file15
 create mode 100644 file16
 create mode 100644 file17
 create mode 100644 file18
 create mode 100644 file19
 create mode 100644 file2
 create mode 100644 file20
 create mode 100644 file21
 create mode 100644 file22
 create mode 100644 file23
 create mode 100644 file24
 create mode 100644 file25
 create mode 100644 file26
 create mode 100644 file27
 create mode 100644 file28
 create mode 100644 file29
 create mode 100644 file3
 create mode 100644 file30
 create mode 100644 file31
 create mode 100644 file32
 create mode 100644 file33
 create mode 100644 file34
 create mode 100644 file35
 create mode 100644 file36
 create mode 100644 file37
 create mode 100644 file38
 create mode 100644 file39
 create mode 100644 file4
 create mode 100644 file40
 create mode 100644 file41
 create mode 100644 file42
 create mode 100644 file43
 create mode 100644 file44
 create mode 100644 file45
 create mode 100644 file46
 create mode 100644 file47
 create mode 100644 file48
 create mode 100644 file49
 create mode 100644 file5
 create mode 100644 file50
 create mode 100644 file51
 create mode 100644 file52
 create mode 100644 file53
 create mode 100644 file54
 create mode 100644 file55
 create mode 100644 file56
 create mode 100644 file57
 create mode 100644 file58
 create mode 100644 file59
 create mode 100644 file6
 create mode 100644 file60
 create mode 100644 file61
 create mode 100644 file62
 create mode 100644 file63
 create mode 100644 file64
 create mode 100644 file65
 create mode 100644 file66
 create mode 100644 file67
 create mode 100644 file68
 create mode 100644 file69
 create mode 100644 file7
 create mode 100644 file70
 create mode 100644 file71
 create mode 100644 file72
 create mode 100644 file73
 create mode 100644 file74
 create mode 100644 file75
 create mode 100644 file76
 create mode 100644 file77
 create mode 100644 file78
 create mode 100644 file79
 create mode 100644 file8
 create mode 100644 file80
 create mode 100644 file81
 create mode 100644 file82
 create mode 100644 file83
 create mode 100644 file84
 create mode 100644 file85
 create mode 100644 file86
 create mode 100644 file87
 create mode 100644 file88
 create mode 100644 file89
 create mode 100644 file9
 create mode 100644 file90
 create mode 100644 file91
 create mode 100644 file92
 create mode 100644 file93
 create mode 100644 file94
 create mode 100644 file95
 create mode 100644 file96
 create mode 100644 file97
 create mode 100644 file98
 create mode 100644 file99
Cloning into bare repository 'client'...
[main 85be905] incremental change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/promisor-remote/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            57347849e08bc08f191614c886e54d309cb293da -> FETCH_HEAD
count: 0
in-pack: 2
[main (root-commit) 06e07da] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
warning: filtering not recognized by server, ignoring
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            main       -> FETCH_HEAD
packet:        fetch> want 57347849e08bc08f191614c886e54d309cb293da
packet:  upload-pack< want 57347849e08bc08f191614c886e54d309cb293da
ok 33 - fetch lazy-fetches only to resolve deltas

expecting success of 5616.34 'fetch lazy-fetches only to resolve deltas, protocol v2': 
	setup_triangle &&

	git -C server config --local protocol.version 2 &&
	git -C client config --local protocol.version 2 &&
	git -C promisor-remote config --local protocol.version 2 &&

	# Exercise to make sure it works. Git will not fetch anything from the
	# promisor remote other than for the big blob (because it needs to
	# resolve the delta).
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client \
		fetch "file://$(pwd)/server" main &&

	# Verify that protocol version 2 was used.
	grep "fetch< version 2" trace &&

	# Verify the assumption that the client needed to fetch the delta base
	# to resolve the delta.
	git -C server rev-parse HEAD~1^{tree} >hash &&
	grep "want $(cat hash)" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server/.git/
[main (root-commit) 9bc3270] initial
 Author: A U Thor <author@example.com>
 100 files changed, 100 insertions(+)
 create mode 100644 file1
 create mode 100644 file10
 create mode 100644 file100
 create mode 100644 file11
 create mode 100644 file12
 create mode 100644 file13
 create mode 100644 file14
 create mode 100644 file15
 create mode 100644 file16
 create mode 100644 file17
 create mode 100644 file18
 create mode 100644 file19
 create mode 100644 file2
 create mode 100644 file20
 create mode 100644 file21
 create mode 100644 file22
 create mode 100644 file23
 create mode 100644 file24
 create mode 100644 file25
 create mode 100644 file26
 create mode 100644 file27
 create mode 100644 file28
 create mode 100644 file29
 create mode 100644 file3
 create mode 100644 file30
 create mode 100644 file31
 create mode 100644 file32
 create mode 100644 file33
 create mode 100644 file34
 create mode 100644 file35
 create mode 100644 file36
 create mode 100644 file37
 create mode 100644 file38
 create mode 100644 file39
 create mode 100644 file4
 create mode 100644 file40
 create mode 100644 file41
 create mode 100644 file42
 create mode 100644 file43
 create mode 100644 file44
 create mode 100644 file45
 create mode 100644 file46
 create mode 100644 file47
 create mode 100644 file48
 create mode 100644 file49
 create mode 100644 file5
 create mode 100644 file50
 create mode 100644 file51
 create mode 100644 file52
 create mode 100644 file53
 create mode 100644 file54
 create mode 100644 file55
 create mode 100644 file56
 create mode 100644 file57
 create mode 100644 file58
 create mode 100644 file59
 create mode 100644 file6
 create mode 100644 file60
 create mode 100644 file61
 create mode 100644 file62
 create mode 100644 file63
 create mode 100644 file64
 create mode 100644 file65
 create mode 100644 file66
 create mode 100644 file67
 create mode 100644 file68
 create mode 100644 file69
 create mode 100644 file7
 create mode 100644 file70
 create mode 100644 file71
 create mode 100644 file72
 create mode 100644 file73
 create mode 100644 file74
 create mode 100644 file75
 create mode 100644 file76
 create mode 100644 file77
 create mode 100644 file78
 create mode 100644 file79
 create mode 100644 file8
 create mode 100644 file80
 create mode 100644 file81
 create mode 100644 file82
 create mode 100644 file83
 create mode 100644 file84
 create mode 100644 file85
 create mode 100644 file86
 create mode 100644 file87
 create mode 100644 file88
 create mode 100644 file89
 create mode 100644 file9
 create mode 100644 file90
 create mode 100644 file91
 create mode 100644 file92
 create mode 100644 file93
 create mode 100644 file94
 create mode 100644 file95
 create mode 100644 file96
 create mode 100644 file97
 create mode 100644 file98
 create mode 100644 file99
Cloning into bare repository 'client'...
[main 014bae7] incremental change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/promisor-remote/.git/
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            57347849e08bc08f191614c886e54d309cb293da -> FETCH_HEAD
count: 0
in-pack: 2
[main (root-commit) d944c64] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
warning: filtering not recognized by server, ignoring
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            main       -> FETCH_HEAD
packet:        fetch< version 2
packet:        fetch< version 2
packet:        fetch< version 2
packet:        fetch< version 2
packet:        fetch> want 57347849e08bc08f191614c886e54d309cb293da
packet:  upload-pack< want 57347849e08bc08f191614c886e54d309cb293da
packet:        fetch> want 57347849e08bc08f191614c886e54d309cb293da
packet:  upload-pack< want 57347849e08bc08f191614c886e54d309cb293da
ok 34 - fetch lazy-fetches only to resolve deltas, protocol v2

expecting success of 5616.35 'fetch does not lazy-fetch missing targets of its refs': 
	rm -rf server client trace &&

	test_create_repo server &&
	test_config -C server uploadpack.allowfilter 1 &&
	test_config -C server uploadpack.allowanysha1inwant 1 &&
	test_commit -C server foo &&

	git clone --filter=blob:none "file://$(pwd)/server" client &&
	# Make all refs point to nothing by deleting all objects.
	rm client/.git/objects/pack/* &&

	test_commit -C server bar &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch \
		--no-tags --recurse-submodules=no \
		origin refs/tags/bar &&
	FOO_HASH=$(git -C server rev-parse foo) &&
	! grep "want $FOO_HASH" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server/.git/
[main (root-commit) 92a62de] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'client'...
[main 92e3d69] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * tag               bar        -> FETCH_HEAD
ok 35 - fetch does not lazy-fetch missing targets of its refs

expecting success of 5616.36 'verify fetch succeeds when asking for new tags': 
	git clone --filter=blob:none "file://$(pwd)/srv.bare" tag-test &&
	for i in I J K
	do
		test_commit -C src $i &&
		git -C src branch $i || return 1
	done &&
	git -C srv.bare fetch --tags origin +refs/heads/*:refs/heads/* &&
	git -C tag-test -c protocol.version=2 fetch --tags origin

Cloning into 'tag-test'...
[main f18c5f5] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
[main a03a6a6] J
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
[main 367cc8f] K
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 K.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src
 * [new branch]      I          -> I
 * [new branch]      J          -> J
 * [new branch]      K          -> K
 + 957c60b...367cc8f main       -> main  (forced update)
 * [new tag]         I          -> I
 * [new tag]         J          -> J
 * [new tag]         K          -> K
 * [new tag]         foo        -> foo
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
 + 957c60b...367cc8f main       -> origin/main  (forced update)
 * [new branch]      I          -> origin/I
 * [new branch]      J          -> origin/J
 * [new branch]      K          -> origin/K
 * [new tag]         I          -> I
 * [new tag]         J          -> J
 * [new tag]         K          -> K
 * [new tag]         foo        -> foo
ok 36 - verify fetch succeeds when asking for new tags

expecting success of 5616.37 'verify fetch downloads only one pack when updating refs': 
	git clone --filter=blob:none "file://$(pwd)/srv.bare" pack-test &&
	ls pack-test/.git/objects/pack/*pack >pack-list &&
	test_line_count = 2 pack-list &&
	for i in A B C
	do
		test_commit -C src $i &&
		git -C src branch $i || return 1
	done &&
	git -C srv.bare fetch origin +refs/heads/*:refs/heads/* &&
	git -C pack-test fetch origin &&
	ls pack-test/.git/objects/pack/*pack >pack-list &&
	test_line_count = 3 pack-list

Cloning into 'pack-test'...
[main bc03829] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 525529d] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 66f5bb0] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/src
 * [new branch]      A          -> A
 * [new branch]      B          -> B
 * [new branch]      C          -> C
   367cc8f..66f5bb0  main       -> main
 * [new tag]         A          -> A
 * [new tag]         B          -> B
 * [new tag]         C          -> C
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/srv.bare
   367cc8f..66f5bb0  main       -> origin/main
 * [new branch]      A          -> origin/A
 * [new branch]      B          -> origin/B
 * [new branch]      C          -> origin/C
 * [new tag]         A          -> A
 * [new tag]         B          -> B
 * [new tag]         C          -> C
ok 37 - verify fetch downloads only one pack when updating refs

expecting success of 5616.38 'single-branch tag following respects partial clone': 
	git clone --single-branch -b B --filter=blob:none \
		"file://$(pwd)/srv.bare" single &&
	git -C single rev-parse --verify refs/tags/B &&
	git -C single rev-parse --verify refs/tags/A &&
	test_must_fail git -C single rev-parse --verify refs/tags/C

Cloning into 'single'...
525529d87f8f318d404aa60b6d2b41ed0f49123b
bc03829a3804fb49ee75372a845d1554afc2e83f
fatal: Needed a single revision
ok 38 - single-branch tag following respects partial clone

expecting success of 5616.39 'fetch from a partial clone, protocol v0': 
	rm -rf server client trace &&

	# Pretend that the server is a partial clone
	git init server &&
	git -C server remote add a_remote "file://$(pwd)/" &&
	test_config -C server core.repositoryformatversion 1 &&
	test_config -C server extensions.partialclone a_remote &&
	test_config -C server protocol.version 0 &&
	test_commit -C server foo &&

	# Fetch from the server
	git init client &&
	test_config -C client protocol.version 0 &&
	test_commit -C client bar &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch "file://$(pwd)/server" &&
	! grep "version 2" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server/.git/
[main (root-commit) b259608] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/client/.git/
[main (root-commit) 76913b4] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
warning: no common commits
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            HEAD       -> FETCH_HEAD
ok 39 - fetch from a partial clone, protocol v0

expecting success of 5616.40 'fetch from a partial clone, protocol v2': 
	rm -rf server client trace &&

	# Pretend that the server is a partial clone
	git init server &&
	git -C server remote add a_remote "file://$(pwd)/" &&
	test_config -C server core.repositoryformatversion 1 &&
	test_config -C server extensions.partialclone a_remote &&
	test_config -C server protocol.version 2 &&
	test_commit -C server foo &&

	# Fetch from the server
	git init client &&
	test_config -C client protocol.version 2 &&
	test_commit -C client bar &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -C client fetch "file://$(pwd)/server" &&
	grep "version 2" trace

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server/.git/
[main (root-commit) bbef54c] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/client/.git/
[main (root-commit) 10dc217] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
From file:///<<PKGBUILDDIR>>/t/trash directory.t5616-partial-clone/server
 * branch            HEAD       -> FETCH_HEAD
packet:  upload-pack> version 2
packet:        fetch< version 2
ok 40 - fetch from a partial clone, protocol v2

expecting success of 5616.41 'repack does not loosen promisor objects': 
	rm -rf client trace &&
	git clone --bare --filter=blob:none "file://$(pwd)/srv.bare" client &&
	test_when_finished "rm -rf client trace" &&
	GIT_TRACE2_PERF="$(pwd)/trace" git -C client repack -A -d &&
	grep "loosen_unused_packed_objects/loosened:0" trace

Cloning into bare repository 'client'...
07:55:45.109034 builtin/pack-objects.c:3908  | d1 | main                     | data         | r0  |  0.018267 |  0.005883 | pack-objects | ..loosen_unused_packed_objects/loosened:0
ok 41 - repack does not loosen promisor objects

checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
# passed all 41 test(s)
# SKIP no web server found at '/usr/sbin/apache2'
1..41
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5812-proto-disable-http.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5812-proto-disable-http/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
1..0 # SKIP no web server found at '/usr/sbin/apache2'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5801-remote-helpers.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/.git/
expecting success of 5801.1 'setup repository': 
	git init server &&
	(cd server &&
	 echo content >file &&
	 git add file &&
	 git commit -m one)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server/.git/
[main (root-commit) f39a923] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup repository

expecting success of 5801.2 'cloning from local repo': 
	git clone "testgit::${PWD}/server" local &&
	test_cmp server/file local/file

Cloning into 'local'...
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
ok 2 - cloning from local repo

expecting success of 5801.3 'create new commit on remote': 
	(cd server &&
	 echo content >>file &&
	 git commit -a -m two)

[main 5647d5f] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 3 - create new commit on remote

expecting success of 5801.4 'pulling from local repo': 
	(cd local && git pull) &&
	test_cmp server/file local/file

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
From testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   f39a923..5647d5f  main       -> origin/main
Updating f39a923..5647d5f
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
ok 4 - pulling from local repo

expecting success of 5801.5 'pushing to local repo': 
	(cd local &&
	echo content >>file &&
	git commit -a -m three &&
	git push) &&
	compare_refs local HEAD server HEAD

[main f883ace] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   5647d5f..f883ace  main -> main
ok 5 - pushing to local repo

expecting success of 5801.6 'fetch new branch': 
	(cd server &&
	 git reset --hard &&
	 git checkout -b new &&
	 echo content >>file &&
	 git commit -a -m five
	) &&
	(cd local &&
	 git fetch origin new
	) &&
	compare_refs server HEAD local FETCH_HEAD

HEAD is now at f883ace three
Switched to a new branch 'new'
[new 9a8e2ab] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
From testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * branch            new        -> FETCH_HEAD
 * [new branch]      new        -> origin/new
ok 6 - fetch new branch

expecting success of 5801.7 'fetch multiple branches': 
	(cd local &&
	 git fetch
	) &&
	compare_refs server main local refs/remotes/origin/main &&
	compare_refs server new local refs/remotes/origin/new

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
ok 7 - fetch multiple branches

expecting success of 5801.8 'push when remote has extra refs': 
	(cd local &&
	 git reset --hard origin/main &&
	 echo content >>file &&
	 git commit -a -m six &&
	 git push
	) &&
	compare_refs local main server main

HEAD is now at f883ace three
[main 0d4cb61] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   f883ace..0d4cb61  main -> main
ok 8 - push when remote has extra refs

expecting success of 5801.9 'push new branch by name': 
	(cd local &&
	 git checkout -b new-name  &&
	 echo content >>file &&
	 git commit -a -m seven &&
	 git push origin new-name
	) &&
	compare_refs local HEAD server refs/heads/new-name

Switched to a new branch 'new-name'
[new-name 7c93a0d] seven
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      new-name -> new-name
ok 9 - push new branch by name

expecting success of 5801.10 'push new branch with old:new refspec': 
	(cd local &&
	 git push origin new-name:new-refspec
	) &&
	compare_refs local HEAD server refs/heads/new-refspec

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      new-name -> new-refspec
ok 10 - push new branch with old:new refspec

expecting success of 5801.11 'push new branch with HEAD:new refspec': 
	(cd local &&
	 git checkout new-name &&
	 git push origin HEAD:new-refspec-2
	) &&
	compare_refs local HEAD server refs/heads/new-refspec-2

Already on 'new-name'
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      HEAD -> new-refspec-2
ok 11 - push new branch with HEAD:new refspec

expecting success of 5801.12 'push delete branch': 
	(cd local &&
	 git push origin :new-name
	) &&
	test_must_fail git --git-dir="server/.git" \
	 rev-parse --verify refs/heads/new-name

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
Everything up-to-date
fatal: Needed a single revision
ok 12 - push delete branch

expecting success of 5801.13 'forced push': 
	(cd local &&
	git checkout -b force-test &&
	echo content >> file &&
	git commit -a -m eight &&
	git push origin force-test &&
	echo content >> file &&
	git commit -a --amend -m eight-modified &&
	git push --force origin force-test
	) &&
	compare_refs local refs/heads/force-test server refs/heads/force-test

Switched to a new branch 'force-test'
[force-test 518e3ec] eight
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      force-test -> force-test
[force-test b33c694] eight-modified
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 2 insertions(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   518e3ec..b33c694  force-test -> force-test
ok 13 - forced push

expecting success of 5801.14 'cloning without refspec': 
	GIT_REMOTE_TESTGIT_NOREFSPEC=1 \
	git clone "testgit::${PWD}/server" local2 2>error &&
	test_i18ngrep "this remote helper should implement refspec capability" error &&
	compare_refs local2 HEAD server HEAD

warning: this remote helper should implement refspec capability
ok 14 - cloning without refspec

expecting success of 5801.15 'pulling without refspecs': 
	(cd local2 &&
	git reset --hard &&
	GIT_REMOTE_TESTGIT_NOREFSPEC=1 git pull 2>../error) &&
	test_i18ngrep "this remote helper should implement refspec capability" error &&
	compare_refs local2 HEAD server HEAD

HEAD is now at 9a8e2ab five
Already up to date.
warning: this remote helper should implement refspec capability
ok 15 - pulling without refspecs

expecting success of 5801.16 'pushing without refspecs': 
	test_when_finished "(cd local2 && git reset --hard origin)" &&
	(cd local2 &&
	echo content >>file &&
	git commit -a -m ten &&
	GIT_REMOTE_TESTGIT_NOREFSPEC=1 &&
	export GIT_REMOTE_TESTGIT_NOREFSPEC &&
	test_must_fail git push 2>../error) &&
	test_i18ngrep "remote-helper doesn.t support push; refspec needed" error

[new 79634a5] ten
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
fatal: remote-helper doesn't support push; refspec needed
HEAD is now at 9a8e2ab five
ok 16 - pushing without refspecs

expecting success of 5801.17 'pulling without marks': 
	(cd local2 &&
	GIT_REMOTE_TESTGIT_NO_MARKS=1 git pull) &&
	compare_refs local2 HEAD server HEAD

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
Already up to date.
ok 17 - pulling without marks

checking known breakage of 5801.18 'pushing without marks': 
	test_when_finished "(cd local2 && git reset --hard origin)" &&
	(cd local2 &&
	echo content >>file &&
	git commit -a -m twelve &&
	GIT_REMOTE_TESTGIT_NO_MARKS=1 git push) &&
	compare_refs local2 HEAD server HEAD

[new 8990571] twelve
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
warning: Not updating refs/heads/new (new tip a81a4147c0db7a0bc38d047c3205b7c3ac8fc9c5 does not contain 9a8e2abfa604731e07ce2fb257109eb918e2280b)
Everything up-to-date
--- expect	2022-12-28 07:55:39.932194538 +0000
+++ actual	2022-12-28 07:55:39.957195456 +0000
@@ -1 +1 @@
-899057158430267bac82448fb89f21aa89c35cb0
+9a8e2abfa604731e07ce2fb257109eb918e2280b
HEAD is now at 9a8e2ab five
not ok 18 - pushing without marks # TODO known breakage

expecting success of 5801.19 'push all with existing object': 
	(cd local &&
	git branch dup2 main &&
	git push origin --all
	) &&
	compare_refs local dup2 server dup2

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      dup2 -> dup2
   7c93a0d..7c93a0d  new-name -> new-name
ok 19 - push all with existing object

expecting success of 5801.20 'push ref with existing object': 
	(cd local &&
	git branch dup main &&
	git push origin dup
	) &&
	compare_refs local dup server dup

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      dup -> dup
ok 20 - push ref with existing object

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 5801.21 'push signed tag': 
	(cd local &&
	git checkout main &&
	git tag -s -m signed-tag signed-tag &&
	git push origin signed-tag
	) &&
	compare_refs local signed-tag^{} server signed-tag^{} &&
	compare_refs ! local signed-tag server signed-tag

Switched to branch 'main'
Your branch is up to date with 'origin/main'.
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
warning: stripping signature from tag 95b69a5d2b9ac92965b5931a3a7e93353c35e562
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new tag]         signed-tag -> signed-tag
--- expect	2022-12-28 07:55:41.787262646 +0000
+++ actual	2022-12-28 07:55:41.807263381 +0000
@@ -1 +1 @@
-95b69a5d2b9ac92965b5931a3a7e93353c35e562
+bf2ae6ee2e8ffc93e7a79de318f46d4bdb187ca4
ok 21 - push signed tag

expecting success of 5801.22 'push signed tag with signed-tags capability': 
	(cd local &&
	git checkout main &&
	git tag -s -m signed-tag signed-tag-2 &&
	GIT_REMOTE_TESTGIT_SIGNED_TAGS=1 git push origin signed-tag-2
	) &&
	compare_refs local signed-tag-2 server signed-tag-2

Already on 'main'
Your branch is up to date with 'origin/main'.
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new tag]         signed-tag-2 -> signed-tag-2
ok 22 - push signed tag with signed-tags capability

expecting success of 5801.23 'push update refs': 
	(cd local &&
	git checkout -b update main &&
	echo update >>file &&
	git commit -a -m update &&
	git push origin update &&
	git rev-parse --verify remotes/origin/update >expect &&
	git rev-parse --verify testgit/origin/heads/update >actual &&
	test_cmp expect actual
	)

Switched to a new branch 'update'
[update 900950d] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      update -> update
ok 23 - push update refs

expecting success of 5801.24 'push update refs disabled by no-private-update': 
	(cd local &&
	echo more-update >>file &&
	git commit -a -m more-update &&
	git rev-parse --verify testgit/origin/heads/update >expect &&
	GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE=t git push origin update &&
	git rev-parse --verify testgit/origin/heads/update >actual &&
	test_cmp expect actual
	)

[update 297a32d] more-update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   900950d..297a32d  update -> update
ok 24 - push update refs disabled by no-private-update

expecting success of 5801.25 'push update refs failure': 
	(cd local &&
	git checkout update &&
	echo "update fail" >>file &&
	git commit -a -m "update fail" &&
	git rev-parse --verify testgit/origin/heads/update >expect &&
	test_expect_code 1 env GIT_REMOTE_TESTGIT_FAILURE="non-fast forward" \
		git push origin update &&
	git rev-parse --verify testgit/origin/heads/update >actual &&
	test_cmp expect actual
	)

Already on 'update'
[update 3e5dd5a] update fail
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
error: failed to push some refs to 'testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server'
ok 25 - push update refs failure

expecting success of 5801.26 'proper failure checks for fetching': 
	(cd local &&
	test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git fetch 2>error &&
	test_i18ngrep -q "error while running fast-import" error
	)

ok 26 - proper failure checks for fetching

expecting success of 5801.27 'proper failure checks for pushing': 
	test_when_finished "rm -rf local/git.marks local/testgit.marks" &&
	(cd local &&
	git checkout -b crash main &&
	echo crash >>file &&
	git commit -a -m crash &&
	test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git push --all &&
	clean_mark ".git/testgit/origin/git.marks" &&
	clean_mark ".git/testgit/origin/testgit.marks" &&
	test_cmp git.marks testgit.marks
	)

Switched to a new branch 'crash'
[crash b62b6af] crash
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
error: failed to push some refs to 'testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server'
ok 27 - proper failure checks for pushing

expecting success of 5801.28 'push messages': 
	(cd local &&
	git checkout -b new_branch main &&
	echo new >>file &&
	git commit -a -m new &&
	git push origin new_branch &&
	git fetch origin &&
	echo new >>file &&
	git commit -a -m new &&
	git push origin new_branch 2> msg &&
	! grep "\[new branch\]" msg
	)

Switched to a new branch 'new_branch'
[new_branch 0ff7576] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
To testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * [new branch]      new_branch -> new_branch
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
[new_branch 190f068] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 28 - push messages

expecting success of 5801.29 'fetch HEAD': 
	(cd server &&
	git checkout main &&
	echo more >>file &&
	git commit -a -m more
	) &&
	(cd local &&
	git fetch origin HEAD
	) &&
	compare_refs server HEAD local FETCH_HEAD

Switched to branch 'main'
[main b18cb6c] more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
From testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
 * branch            HEAD       -> FETCH_HEAD
ok 29 - fetch HEAD

expecting success of 5801.30 'fetch url': 
	(cd server &&
	git checkout main &&
	echo more >>file &&
	git commit -a -m more
	) &&
	(cd local &&
	git fetch "testgit::${PWD}/../server"
	) &&
	compare_refs server HEAD local FETCH_HEAD

Already on 'main'
[main 4a80143] more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
From testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/local/../server
 * branch            HEAD       -> FETCH_HEAD
ok 30 - fetch url

expecting success of 5801.31 'fetch tag': 
	(cd server &&
	 git tag v1.0
	) &&
	(cd local &&
	 git fetch
	) &&
	compare_refs local v1.0 server v1.0

/<<PKGBUILDDIR>>/t/t5801/git-remote-testgit: 145: test: =: unexpected operator
From testgit::/<<PKGBUILDDIR>>/t/trash directory.t5801-remote-helpers/server
   0d4cb61..4a80143  main       -> origin/main
 * [new tag]         v1.0       -> v1.0
ok 31 - fetch tag

# still have 1 known breakage(s)
# passed all remaining 30 test(s)
1..31
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5811-proto-disable-git.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5811-proto-disable-git/.git/
checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
Starting git daemon ...
[9934] Ready to rumble
expecting success of 5811.1 'create git-accessible repo': 
	bare="$GIT_DAEMON_DOCUMENT_ROOT_PATH/repo.git" &&
	test_commit one &&
	git --bare init "$bare" &&
	git push "$bare" HEAD &&
	>"$bare/git-daemon-export-ok" &&
	git -C "$bare" config daemon.receivepack true

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5811-proto-disable-git/repo/repo.git/
To /<<PKGBUILDDIR>>/t/trash directory.t5811-proto-disable-git/repo/repo.git
 * [new branch]      HEAD -> master
ok 1 - create git-accessible repo

expecting success of 5811.2 'clone git:// (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
[10026] Connection from 127.0.0.1:57936
[10026] Extended attribute "host": 127.0.0.1:5811
[10026] Extended attribute "protocol": version=2
[10026] Request upload-pack for '/repo.git'
[9934] [10026] Disconnected
ok 2 - clone git:// (enabled)

expecting success of 5811.3 'fetch git:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
[10059] Connection from 127.0.0.1:57938
[10059] Extended attribute "host": 127.0.0.1:5811
[10059] Extended attribute "protocol": version=2
[10059] Request upload-pack for '/repo.git'
From git://127.0.0.1:5811/repo
 * branch            HEAD       -> FETCH_HEAD
[9934] [10059] Disconnected
ok 3 - fetch git:// (enabled)

expecting success of 5811.4 'push git:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
[10085] Connection from 127.0.0.1:57940
[10085] Extended attribute "host": 127.0.0.1:5811
[10085] Request receive-pack for '/repo.git'
To git://127.0.0.1:5811/repo.git
 * [new branch]      [9934] [10085] Disconnected
HEAD -> pushed
ok 4 - push git:// (enabled)

expecting success of 5811.5 'push git:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'git' not allowed
ok 5 - push git:// (disabled)

expecting success of 5811.6 'fetch git:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'git' not allowed
ok 6 - fetch git:// (disabled)

expecting success of 5811.7 'clone git:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
ok 7 - clone git:// (disabled)

expecting success of 5811.8 'clone git:// (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
ok 8 - clone git:// (env var has precedence)

expecting success of 5811.9 'clone git:// (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
[10180] Connection from 127.0.0.1:57942
[10180] Extended attribute "host": 127.0.0.1:5811
[10180] Extended attribute "protocol": version=2
[10180] Request upload-pack for '/repo.git'
[9934] [10180] Disconnected
ok 9 - clone git:// (enabled with config)

expecting success of 5811.10 'fetch git:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
[10201] Connection from 127.0.0.1:57944
[10201] Extended attribute "host": 127.0.0.1:5811
[10201] Extended attribute "protocol": version=2
[10201] Request upload-pack for '/repo.git'
From git://127.0.0.1:5811/repo
 * branch            HEAD       -> FETCH_HEAD
[9934] [10201] Disconnected
ok 10 - fetch git:// (enabled)

expecting success of 5811.11 'push git:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
[10225] Connection from 127.0.0.1:57946
[10225] Extended attribute "host": 127.0.0.1:5811
[10225] Request receive-pack for '/repo.git'
Everything up-to-date
[9934] [10225] Disconnected
ok 11 - push git:// (enabled)

expecting success of 5811.12 'push git:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'git' not allowed
ok 12 - push git:// (disabled)

expecting success of 5811.13 'fetch git:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'git' not allowed
ok 13 - fetch git:// (disabled)

expecting success of 5811.14 'clone git:// (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
ok 14 - clone git:// (disabled)

expecting success of 5811.15 'clone git:// (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
[10282] Connection from 127.0.0.1:57948
[10282] Extended attribute "host": 127.0.0.1:5811
[10282] Extended attribute "protocol": version=2
[10282] Request upload-pack for '/repo.git'
[9934] [10282] Disconnected
ok 15 - clone git:// (enabled)

expecting success of 5811.16 'fetch git:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
[10332] Connection from 127.0.0.1:57950
[10332] Extended attribute "host": 127.0.0.1:5811
[10332] Extended attribute "protocol": version=2
[10332] Request upload-pack for '/repo.git'
From git://127.0.0.1:5811/repo
 * branch            HEAD       -> FETCH_HEAD
[9934] [10332] Disconnected
ok 16 - fetch git:// (enabled)

expecting success of 5811.17 'push git:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
[10368] Connection from 127.0.0.1:57952
[10368] Extended attribute "host": 127.0.0.1:5811
[10368] Request receive-pack for '/repo.git'
Everything up-to-date
[9934] [10368] Disconnected
ok 17 - push git:// (enabled)

expecting success of 5811.18 'push git:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'git' not allowed
ok 18 - push git:// (disabled)

expecting success of 5811.19 'fetch git:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'git' not allowed
ok 19 - fetch git:// (disabled)

expecting success of 5811.20 'clone git:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
ok 20 - clone git:// (disabled)

expecting success of 5811.21 'clone git:// (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
[10423] Connection from 127.0.0.1:57954
[10423] Extended attribute "host": 127.0.0.1:5811
[10423] Extended attribute "protocol": version=2
[10423] Request upload-pack for '/repo.git'
[9934] [10423] Disconnected
ok 21 - clone git:// (enabled)

expecting success of 5811.22 'fetch git:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
[10503] Connection from 127.0.0.1:57956
[10503] Extended attribute "host": 127.0.0.1:5811
[10503] Extended attribute "protocol": version=2
[10503] Request upload-pack for '/repo.git'
From git://127.0.0.1:5811/repo
 * branch            HEAD       -> FETCH_HEAD
[9934] [10503] Disconnected
ok 22 - fetch git:// (enabled)

expecting success of 5811.23 'push git:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
[10562] Connection from 127.0.0.1:57958
[10562] Extended attribute "host": 127.0.0.1:5811
[10562] Request receive-pack for '/repo.git'
Everything up-to-date
[9934] [10562] Disconnected
ok 23 - push git:// (enabled)

expecting success of 5811.24 'push git:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'git' not allowed
ok 24 - push git:// (disabled)

expecting success of 5811.25 'fetch git:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'git' not allowed
ok 25 - fetch git:// (disabled)

expecting success of 5811.26 'clone git:// (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'git' not allowed
ok 26 - clone git:// (disabled)

Stopping git daemon ...
Terminated
# passed all 26 test(s)
1..26
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5814-proto-disable-ext.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5814-proto-disable-ext/.git/
expecting success of 5814.1 'setup ext wrapper': 
		write_script fake-remote <<-\EOF &&
		echo >&2 "fake-remote: $*"
		cd "$TRASH_DIRECTORY/remote" &&
		eval "$*"
		EOF
		PATH=$TRASH_DIRECTORY:$PATH &&
		export TRASH_DIRECTORY
	
ok 1 - setup ext wrapper

expecting success of 5814.2 'setup repository to clone': 
	test_commit one &&
	mkdir remote &&
	git init --bare remote/repo.git &&
	git push remote/repo.git HEAD

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5814-proto-disable-ext/remote/repo.git/
To remote/repo.git
 * [new branch]      HEAD -> master
ok 2 - setup repository to clone

expecting success of 5814.3 'clone remote-helper (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fake-remote: git-upload-pack repo.git
ok 3 - clone remote-helper (enabled)

expecting success of 5814.4 'fetch remote-helper (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
fake-remote: git-upload-pack repo.git
From ext::fake-remote %S repo
 * branch            HEAD       -> FETCH_HEAD
ok 4 - fetch remote-helper (enabled)

expecting success of 5814.5 'push remote-helper (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
fake-remote: git-receive-pack repo.git
To ext::fake-remote %S repo.git
 * [new branch]      HEAD -> pushed
ok 5 - push remote-helper (enabled)

expecting success of 5814.6 'push remote-helper (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'ext' not allowed
ok 6 - push remote-helper (disabled)

expecting success of 5814.7 'fetch remote-helper (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'ext' not allowed
ok 7 - fetch remote-helper (disabled)

expecting success of 5814.8 'clone remote-helper (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
ok 8 - clone remote-helper (disabled)

expecting success of 5814.9 'clone remote-helper (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
ok 9 - clone remote-helper (env var has precedence)

expecting success of 5814.10 'clone remote-helper (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fake-remote: git-upload-pack repo.git
ok 10 - clone remote-helper (enabled with config)

expecting success of 5814.11 'fetch remote-helper (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
fake-remote: git-upload-pack repo.git
From ext::fake-remote %S repo
 * branch            HEAD       -> FETCH_HEAD
ok 11 - fetch remote-helper (enabled)

expecting success of 5814.12 'push remote-helper (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
fake-remote: git-receive-pack repo.git
Everything up-to-date
ok 12 - push remote-helper (enabled)

expecting success of 5814.13 'push remote-helper (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'ext' not allowed
ok 13 - push remote-helper (disabled)

expecting success of 5814.14 'fetch remote-helper (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'ext' not allowed
ok 14 - fetch remote-helper (disabled)

expecting success of 5814.15 'clone remote-helper (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
ok 15 - clone remote-helper (disabled)

expecting success of 5814.16 'clone remote-helper (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fake-remote: git-upload-pack repo.git
ok 16 - clone remote-helper (enabled)

expecting success of 5814.17 'fetch remote-helper (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
fake-remote: git-upload-pack repo.git
From ext::fake-remote %S repo
 * branch            HEAD       -> FETCH_HEAD
ok 17 - fetch remote-helper (enabled)

expecting success of 5814.18 'push remote-helper (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
fake-remote: git-receive-pack repo.git
Everything up-to-date
ok 18 - push remote-helper (enabled)

expecting success of 5814.19 'push remote-helper (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'ext' not allowed
ok 19 - push remote-helper (disabled)

expecting success of 5814.20 'fetch remote-helper (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'ext' not allowed
ok 20 - fetch remote-helper (disabled)

expecting success of 5814.21 'clone remote-helper (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
ok 21 - clone remote-helper (disabled)

expecting success of 5814.22 'clone remote-helper (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fake-remote: git-upload-pack repo.git
ok 22 - clone remote-helper (enabled)

expecting success of 5814.23 'fetch remote-helper (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
fake-remote: git-upload-pack repo.git
From ext::fake-remote %S repo
 * branch            HEAD       -> FETCH_HEAD
ok 23 - fetch remote-helper (enabled)

expecting success of 5814.24 'push remote-helper (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
fake-remote: git-receive-pack repo.git
Everything up-to-date
ok 24 - push remote-helper (enabled)

expecting success of 5814.25 'push remote-helper (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'ext' not allowed
ok 25 - push remote-helper (disabled)

expecting success of 5814.26 'fetch remote-helper (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'ext' not allowed
ok 26 - fetch remote-helper (disabled)

expecting success of 5814.27 'clone remote-helper (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ext' not allowed
ok 27 - clone remote-helper (disabled)

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5815-submodule-protos.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/.git/
expecting success of 5815.1 'setup ext wrapper': 
		write_script fake-remote <<-\EOF &&
		echo >&2 "fake-remote: $*"
		cd "$TRASH_DIRECTORY/remote" &&
		eval "$*"
		EOF
		PATH=$TRASH_DIRECTORY:$PATH &&
		export TRASH_DIRECTORY
	
ok 1 - setup ext wrapper

expecting success of 5815.2 'setup ssh wrapper': 
		write_script ssh-wrapper <<-\EOF &&
		echo >&2 "ssh: $*"
		host=$1; shift
		cd "$TRASH_DIRECTORY/$host" &&
		eval "$*"
		EOF
		GIT_SSH="$PWD/ssh-wrapper" &&
		export GIT_SSH &&
		export TRASH_DIRECTORY
	
ok 2 - setup ssh wrapper

expecting success of 5815.3 'setup repository with submodules': 
	mkdir remote &&
	git init remote/repo.git &&
	(cd remote/repo.git && test_commit one) &&
	# submodule-add should probably trust what we feed it on the cmdline,
	# but its implementation is overly conservative.
	GIT_ALLOW_PROTOCOL=ssh git submodule add remote:repo.git ssh-module &&
	GIT_ALLOW_PROTOCOL=ext git submodule add "ext::fake-remote %S repo.git" ext-module &&
	git commit -m "add submodules"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/remote/repo.git/.git/
[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/ssh-module'...
ssh: remote git-upload-pack 'repo.git'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/ext-module'...
fake-remote: git-upload-pack repo.git
[master (root-commit) 9de083d] add submodules
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 ext-module
 create mode 160000 ssh-module
ok 3 - setup repository with submodules

expecting success of 5815.4 'clone with recurse-submodules fails': 
	test_must_fail git clone --recurse-submodules . dst

Cloning into 'dst'...
done.
Submodule 'ext-module' (ext::fake-remote %S repo.git) registered for path 'ext-module'
Submodule 'ssh-module' (remote:repo.git) registered for path 'ssh-module'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module'...
fatal: transport 'ext' not allowed
fatal: clone of 'ext::fake-remote %S repo.git' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module' failed
Failed to clone 'ext-module'. Retry scheduled
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ssh-module'...
ssh: remote git-upload-pack 'repo.git'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module'...
fatal: transport 'ext' not allowed
fatal: clone of 'ext::fake-remote %S repo.git' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module' failed
Failed to clone 'ext-module' a second time, aborting
ok 4 - clone with recurse-submodules fails

expecting success of 5815.5 'setup individual updates': 
	rm -rf dst &&
	git clone . dst &&
	git -C dst submodule init

Cloning into 'dst'...
done.
Submodule 'ext-module' (ext::fake-remote %S repo.git) registered for path 'ext-module'
Submodule 'ssh-module' (remote:repo.git) registered for path 'ssh-module'
ok 5 - setup individual updates

expecting success of 5815.6 'update of ssh allowed': 
	git -C dst submodule update ssh-module

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ssh-module'...
ssh: remote git-upload-pack 'repo.git'
Submodule path 'ssh-module': checked out 'd79ce1670bdcb76e6d1da2ae095e890ccb326ae9'
ok 6 - update of ssh allowed

expecting success of 5815.7 'update of ext not allowed': 
	test_must_fail git -C dst submodule update ext-module

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module'...
fatal: transport 'ext' not allowed
fatal: clone of 'ext::fake-remote %S repo.git' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module' failed
Failed to clone 'ext-module'. Retry scheduled
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module'...
fatal: transport 'ext' not allowed
fatal: clone of 'ext::fake-remote %S repo.git' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module' failed
Failed to clone 'ext-module' a second time, aborting
ok 7 - update of ext not allowed

expecting success of 5815.8 'user can filter protocols with GIT_ALLOW_PROTOCOL': 
	GIT_ALLOW_PROTOCOL=ext git -C dst submodule update ext-module

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5815-submodule-protos/dst/ext-module'...
fake-remote: git-upload-pack repo.git
Submodule path 'ext-module': checked out 'd79ce1670bdcb76e6d1da2ae095e890ccb326ae9'
ok 8 - user can filter protocols with GIT_ALLOW_PROTOCOL

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6000-rev-list-misc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6000-rev-list-misc/.git/
expecting success of 6000.1 'setup': 
	echo content1 >wanted_file &&
	echo content2 >unwanted_file &&
	git add wanted_file unwanted_file &&
	test_tick &&
	git commit -m one

[main (root-commit) 8b046b3] one
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 unwanted_file
 create mode 100644 wanted_file
ok 1 - setup

expecting success of 6000.2 'rev-list --objects heeds pathspecs': 
	git rev-list --objects HEAD -- wanted_file >output &&
	grep wanted_file output &&
	! grep unwanted_file output

ac3e272b72bbf89def8657766b855d0656630ed4 wanted_file
ok 2 - rev-list --objects heeds pathspecs

expecting success of 6000.3 'rev-list --objects with pathspecs and deeper paths': 
	mkdir foo &&
	>foo/file &&
	git add foo/file &&
	test_tick &&
	git commit -m two &&

	git rev-list --objects HEAD -- foo >output &&
	grep foo/file output &&

	git rev-list --objects HEAD -- foo/file >output &&
	grep foo/file output &&
	! grep unwanted_file output

[main 0045dbd] two
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo/file
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 foo/file
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 foo/file
ok 3 - rev-list --objects with pathspecs and deeper paths

expecting success of 6000.4 'rev-list --objects with pathspecs and copied files': 
	git checkout --orphan junio-testcase &&
	git rm -rf . &&

	mkdir two &&
	echo frotz >one &&
	cp one two/three &&
	git add one two/three &&
	test_tick &&
	git commit -m that &&

	ONE=$(git rev-parse HEAD:one) &&
	git rev-list --objects HEAD two >output &&
	grep "$ONE two/three" output &&
	! grep one output

Switched to a new branch 'junio-testcase'
rm 'foo/file'
rm 'unwanted_file'
rm 'wanted_file'
[junio-testcase (root-commit) adaab4b] that
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one
 create mode 100644 two/three
8e4020bb5a8d8c873b25de15933e75cc0fc275df two/three
ok 4 - rev-list --objects with pathspecs and copied files

expecting success of 6000.5 'rev-list --objects --no-object-names has no space/names': 
	git rev-list --objects --no-object-names HEAD >output &&
	! grep wanted_file output &&
	! grep unwanted_file output &&
	! grep " " output

ok 5 - rev-list --objects --no-object-names has no space/names

expecting success of 6000.6 'rev-list --objects --no-object-names works with cat-file': 
	git rev-list --objects --no-object-names --all >list-output &&
	git cat-file --batch-check <list-output >cat-output &&
	! grep missing cat-output

ok 6 - rev-list --objects --no-object-names works with cat-file

expecting success of 6000.7 '--no-object-names and --object-names are last-one-wins': 
	git rev-list --objects --no-object-names --object-names --all >output &&
	grep wanted_file output &&
	git rev-list --objects --object-names --no-object-names --all >output &&
	! grep wanted_file output

637f0347d31dad180d6fc7f6720c187b05a8754c unwanted_file
ac3e272b72bbf89def8657766b855d0656630ed4 wanted_file
ok 7 - --no-object-names and --object-names are last-one-wins

expecting success of 6000.8 'rev-list A..B and rev-list ^A B are the same': 
	test_tick &&
	git commit --allow-empty -m another &&
	git tag -a -m "annotated" v1.0 &&
	git rev-list --objects ^v1.0^ v1.0 >expect &&
	git rev-list --objects v1.0^..v1.0 >actual &&
	test_cmp expect actual

[junio-testcase eefa24e] another
 Author: A U Thor <author@example.com>
ok 8 - rev-list A..B and rev-list ^A B are the same

expecting success of 6000.9 'propagate uninteresting flag down correctly': 
	git rev-list --objects ^HEAD^{tree} HEAD^{tree} >actual &&
	test_must_be_empty actual

ok 9 - propagate uninteresting flag down correctly

expecting success of 6000.10 'symleft flag bit is propagated down from tag': 
	git log --format="%m %s" --left-right v1.0...main >actual &&
	cat >expect <<-\EOF &&
	< another
	< that
	> two
	> one
	EOF
	test_cmp expect actual

ok 10 - symleft flag bit is propagated down from tag

expecting success of 6000.11 'rev-list can show index objects': 
	# Of the blobs and trees in the index, note:
	#
	#   - we do not show two/three, because it is the
	#     same blob as "one", and we show objects only once
	#
	#   - we do show the tree "two", because it has a valid cache tree
	#     from the last commit
	#
	#   - we do not show the root tree; since we updated the index, it
	#     does not have a valid cache tree
	#
	echo only-in-index >only-in-index &&
	test_when_finished "git reset --hard" &&
	rev1=$(git rev-parse HEAD:one) &&
	rev2=$(git rev-parse HEAD:two) &&
	revi=$(git hash-object only-in-index) &&
	cat >expect <<-EOF &&
	$rev1 one
	$revi only-in-index
	$rev2 two
	EOF
	git add only-in-index &&
	git rev-list --objects --indexed-objects >actual &&
	test_cmp expect actual

HEAD is now at eefa24e another
ok 11 - rev-list can show index objects

expecting success of 6000.12 'rev-list can negate index objects': 
	git rev-parse HEAD >expect &&
	git rev-list -1 --objects HEAD --not --indexed-objects >actual &&
	test_cmp expect actual

ok 12 - rev-list can negate index objects

expecting success of 6000.13 '--bisect and --first-parent can be combined': 
	git rev-list --bisect --first-parent HEAD

adaab4b805f0f10feaa65a52f3d14dfa87c675f1
ok 13 - --bisect and --first-parent can be combined

expecting success of 6000.14 '--header shows a NUL after each commit': 
	# We know that there is no Q in the true payload; names and
	# addresses of the authors and the committers do not have
	# any, and object names or header names do not, either.
	git rev-list --header --max-count=2 HEAD |
	nul_to_q |
	grep "^Q" >actual &&
	cat >expect <<-EOF &&
	Q$(git rev-parse HEAD~1)
	Q
	EOF
	test_cmp expect actual

ok 14 - --header shows a NUL after each commit

expecting success of 6000.15 'rev-list --end-of-options': 
	git update-ref refs/heads/--output=yikes HEAD &&
	git rev-list --end-of-options --output=yikes >actual &&
	test_path_is_missing yikes &&
	git rev-list HEAD >expect &&
	test_cmp expect actual

ok 15 - rev-list --end-of-options

expecting success of 6000.16 'rev-list --count': 
	count=$(git rev-list --count HEAD) &&
	git rev-list HEAD >actual &&
	test_line_count = $count actual

ok 16 - rev-list --count

expecting success of 6000.17 'rev-list --count --objects': 
	count=$(git rev-list --count --objects HEAD) &&
	git rev-list --objects HEAD >actual &&
	test_line_count = $count actual

ok 17 - rev-list --count --objects

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5813-proto-disable-ssh.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/.git/
expecting success of 5813.1 'setup ssh wrapper': 
		write_script ssh-wrapper <<-\EOF &&
		echo >&2 "ssh: $*"
		host=$1; shift
		cd "$TRASH_DIRECTORY/$host" &&
		eval "$*"
		EOF
		GIT_SSH="$PWD/ssh-wrapper" &&
		export GIT_SSH &&
		export TRASH_DIRECTORY
	
ok 1 - setup ssh wrapper

expecting success of 5813.2 'setup repository to clone': 
	test_commit one &&
	mkdir remote &&
	git init --bare remote/repo.git &&
	git push remote/repo.git HEAD

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git/
To remote/repo.git
 * [new branch]      HEAD -> master
ok 2 - setup repository to clone

expecting success of 5813.3 'clone host:path (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack 'repo.git'
ok 3 - clone host:path (enabled)

expecting success of 5813.4 'fetch host:path (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
ssh: remote git-upload-pack 'repo.git'
From remote:repo
 * branch            HEAD       -> FETCH_HEAD
ok 4 - fetch host:path (enabled)

expecting success of 5813.5 'push host:path (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
ssh: remote git-receive-pack 'repo.git'
To remote:repo.git
 * [new branch]      HEAD -> pushed
ok 5 - push host:path (enabled)

expecting success of 5813.6 'push host:path (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 6 - push host:path (disabled)

expecting success of 5813.7 'fetch host:path (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'ssh' not allowed
ok 7 - fetch host:path (disabled)

expecting success of 5813.8 'clone host:path (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 8 - clone host:path (disabled)

expecting success of 5813.9 'clone host:path (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 9 - clone host:path (env var has precedence)

expecting success of 5813.10 'clone host:path (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack 'repo.git'
ok 10 - clone host:path (enabled with config)

expecting success of 5813.11 'fetch host:path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
ssh: remote git-upload-pack 'repo.git'
From remote:repo
 * branch            HEAD       -> FETCH_HEAD
ok 11 - fetch host:path (enabled)

expecting success of 5813.12 'push host:path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
ssh: remote git-receive-pack 'repo.git'
Everything up-to-date
ok 12 - push host:path (enabled)

expecting success of 5813.13 'push host:path (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 13 - push host:path (disabled)

expecting success of 5813.14 'fetch host:path (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'ssh' not allowed
ok 14 - fetch host:path (disabled)

expecting success of 5813.15 'clone host:path (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 15 - clone host:path (disabled)

expecting success of 5813.16 'clone host:path (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack 'repo.git'
ok 16 - clone host:path (enabled)

expecting success of 5813.17 'fetch host:path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
ssh: remote git-upload-pack 'repo.git'
From remote:repo
 * branch            HEAD       -> FETCH_HEAD
ok 17 - fetch host:path (enabled)

expecting success of 5813.18 'push host:path (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
ssh: remote git-receive-pack 'repo.git'
Everything up-to-date
ok 18 - push host:path (enabled)

expecting success of 5813.19 'push host:path (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 19 - push host:path (disabled)

expecting success of 5813.20 'fetch host:path (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'ssh' not allowed
ok 20 - fetch host:path (disabled)

expecting success of 5813.21 'clone host:path (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 21 - clone host:path (disabled)

expecting success of 5813.22 'clone host:path (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack 'repo.git'
ok 22 - clone host:path (enabled)

expecting success of 5813.23 'fetch host:path (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
ssh: remote git-upload-pack 'repo.git'
From remote:repo
 * branch            HEAD       -> FETCH_HEAD
ok 23 - fetch host:path (enabled)

expecting success of 5813.24 'push host:path (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
ssh: remote git-receive-pack 'repo.git'
Everything up-to-date
ok 24 - push host:path (enabled)

expecting success of 5813.25 'push host:path (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 25 - push host:path (disabled)

expecting success of 5813.26 'fetch host:path (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'ssh' not allowed
ok 26 - fetch host:path (disabled)

expecting success of 5813.27 'clone host:path (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 27 - clone host:path (disabled)

expecting success of 5813.28 'clone ssh:// (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 28 - clone ssh:// (enabled)

expecting success of 5813.29 'fetch ssh:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 29 - fetch ssh:// (enabled)

expecting success of 5813.30 'push ssh:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 30 - push ssh:// (enabled)

expecting success of 5813.31 'push ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 31 - push ssh:// (disabled)

expecting success of 5813.32 'fetch ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'ssh' not allowed
ok 32 - fetch ssh:// (disabled)

expecting success of 5813.33 'clone ssh:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 33 - clone ssh:// (disabled)

expecting success of 5813.34 'clone ssh:// (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 34 - clone ssh:// (env var has precedence)

expecting success of 5813.35 'clone ssh:// (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 35 - clone ssh:// (enabled with config)

expecting success of 5813.36 'fetch ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 36 - fetch ssh:// (enabled)

expecting success of 5813.37 'push ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 37 - push ssh:// (enabled)

expecting success of 5813.38 'push ssh:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 38 - push ssh:// (disabled)

expecting success of 5813.39 'fetch ssh:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'ssh' not allowed
ok 39 - fetch ssh:// (disabled)

expecting success of 5813.40 'clone ssh:// (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 40 - clone ssh:// (disabled)

expecting success of 5813.41 'clone ssh:// (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 41 - clone ssh:// (enabled)

expecting success of 5813.42 'fetch ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 42 - fetch ssh:// (enabled)

expecting success of 5813.43 'push ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 43 - push ssh:// (enabled)

expecting success of 5813.44 'push ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 44 - push ssh:// (disabled)

expecting success of 5813.45 'fetch ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'ssh' not allowed
ok 45 - fetch ssh:// (disabled)

expecting success of 5813.46 'clone ssh:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 46 - clone ssh:// (disabled)

expecting success of 5813.47 'clone ssh:// (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 47 - clone ssh:// (enabled)

expecting success of 5813.48 'fetch ssh:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 48 - fetch ssh:// (enabled)

expecting success of 5813.49 'push ssh:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 49 - push ssh:// (enabled)

expecting success of 5813.50 'push ssh:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 50 - push ssh:// (disabled)

expecting success of 5813.51 'fetch ssh:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'ssh' not allowed
ok 51 - fetch ssh:// (disabled)

expecting success of 5813.52 'clone ssh:// (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 52 - clone ssh:// (disabled)

expecting success of 5813.53 'clone git+ssh:// (enabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 53 - clone git+ssh:// (enabled)

expecting success of 5813.54 'fetch git+ssh:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git fetch
		)
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From git+ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 54 - fetch git+ssh:// (enabled)

expecting success of 5813.55 'push git+ssh:// (enabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=$proto &&
			export GIT_ALLOW_PROTOCOL &&
			git push origin HEAD:pushed
		)
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 55 - push git+ssh:// (enabled)

expecting success of 5813.56 'push git+ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 56 - push git+ssh:// (disabled)

expecting success of 5813.57 'fetch git+ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git fetch
		)
	
fatal: transport 'ssh' not allowed
ok 57 - fetch git+ssh:// (disabled)

expecting success of 5813.58 'clone git+ssh:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 58 - clone git+ssh:// (disabled)

expecting success of 5813.59 'clone git+ssh:// (env var has precedence)': 
		rm -rf tmp.git &&
		(
			GIT_ALLOW_PROTOCOL=none &&
			export GIT_ALLOW_PROTOCOL &&
			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 59 - clone git+ssh:// (env var has precedence)

expecting success of 5813.60 'clone git+ssh:// (enabled with config)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 60 - clone git+ssh:// (enabled with config)

expecting success of 5813.61 'fetch git+ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From git+ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 61 - fetch git+ssh:// (enabled)

expecting success of 5813.62 'push git+ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 62 - push git+ssh:// (enabled)

expecting success of 5813.63 'push git+ssh:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 63 - push git+ssh:// (disabled)

expecting success of 5813.64 'fetch git+ssh:// (disabled)': 
		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
	
fatal: transport 'ssh' not allowed
ok 64 - fetch git+ssh:// (disabled)

expecting success of 5813.65 'clone git+ssh:// (disabled)': 
		rm -rf tmp.git &&
		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 65 - clone git+ssh:// (disabled)

expecting success of 5813.66 'clone git+ssh:// (enabled)': 
		rm -rf tmp.git &&
		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 66 - clone git+ssh:// (enabled)

expecting success of 5813.67 'fetch git+ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From git+ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 67 - fetch git+ssh:// (enabled)

expecting success of 5813.68 'push git+ssh:// (enabled)': 
		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 68 - push git+ssh:// (enabled)

expecting success of 5813.69 'push git+ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
		)
	
fatal: transport 'ssh' not allowed
ok 69 - push git+ssh:// (disabled)

expecting success of 5813.70 'fetch git+ssh:// (disabled)': 
		(
			cd tmp.git &&
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user fetch
		)
	
fatal: transport 'ssh' not allowed
ok 70 - fetch git+ssh:// (disabled)

expecting success of 5813.71 'clone git+ssh:// (disabled)': 
		rm -rf tmp.git &&
		(
			GIT_PROTOCOL_FROM_USER=0 &&
			export GIT_PROTOCOL_FROM_USER &&
			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
		)
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 71 - clone git+ssh:// (disabled)

expecting success of 5813.72 'clone git+ssh:// (enabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow always &&
		git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
ok 72 - clone git+ssh:// (enabled)

expecting success of 5813.73 'fetch git+ssh:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git fetch
	
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
From git+ssh://remote/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo
 * branch            HEAD       -> FETCH_HEAD
ok 73 - fetch git+ssh:// (enabled)

expecting success of 5813.74 'push git+ssh:// (enabled)': 
		test_config_global protocol.allow always &&
		git -C tmp.git push origin HEAD:pushed
	
ssh: remote git-receive-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/repo.git'
Everything up-to-date
ok 74 - push git+ssh:// (enabled)

expecting success of 5813.75 'push git+ssh:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git push origin HEAD:pushed
	
fatal: transport 'ssh' not allowed
ok 75 - push git+ssh:// (disabled)

expecting success of 5813.76 'fetch git+ssh:// (disabled)': 
		test_config_global protocol.allow never &&
		test_must_fail git -C tmp.git fetch
	
fatal: transport 'ssh' not allowed
ok 76 - fetch git+ssh:// (disabled)

expecting success of 5813.77 'clone git+ssh:// (disabled)': 
		rm -rf tmp.git &&
		test_config_global protocol.allow never &&
		test_must_fail git clone --bare "$url" tmp.git
	
Cloning into bare repository 'tmp.git'...
fatal: transport 'ssh' not allowed
ok 77 - clone git+ssh:// (disabled)

expecting success of 5813.78 'hostnames starting with dash are rejected': 
	test_must_fail git clone ssh://-remote/repo.git dash-host 2>stderr &&
	! grep ^ssh: stderr

ok 78 - hostnames starting with dash are rejected

expecting success of 5813.79 'setup repo with dash': 
	git init --bare remote/-repo.git &&
	git push remote/-repo.git HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/-repo.git/
To remote/-repo.git
 * [new branch]      HEAD -> master
ok 79 - setup repo with dash

expecting success of 5813.80 'repo names starting with dash are rejected': 
	test_must_fail git clone remote:-repo.git dash-path 2>stderr &&
	! grep ^ssh: stderr

ok 80 - repo names starting with dash are rejected

expecting success of 5813.81 'full paths still work': 
	git clone "remote:$PWD/remote/-repo.git" dash-path

Cloning into 'dash-path'...
ssh: remote git-upload-pack '/<<PKGBUILDDIR>>/t/trash directory.t5813-proto-disable-ssh/remote/-repo.git'
ok 81 - full paths still work

# passed all 81 test(s)
1..81
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5900-repo-selection.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/.git/
expecting success of 5900.1 'find .git dir in worktree': 
	reset &&
	make_tree foo &&
	get foo &&
	check foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo/.git/
[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 1 - find .git dir in worktree

expecting success of 5900.2 'automagically add .git suffix': 
	reset &&
	make_bare foo.git &&
	get foo &&
	check foo.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 2 - automagically add .git suffix

expecting success of 5900.3 'automagically add .git suffix to worktree': 
	reset &&
	make_tree foo.git &&
	get foo &&
	check foo.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/.git/
[master (root-commit) 98b6c1b] foo.git
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.git.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 3 - automagically add .git suffix to worktree

expecting success of 5900.4 'prefer worktree foo over bare foo.git': 
	reset &&
	make_tree foo &&
	make_bare foo.git &&
	get foo &&
	check foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo/.git/
[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 4 - prefer worktree foo over bare foo.git

expecting success of 5900.5 'prefer bare foo over bare foo.git': 
	reset &&
	make_bare foo &&
	make_bare foo.git &&
	get foo &&
	check foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 5 - prefer bare foo over bare foo.git

expecting success of 5900.6 'disambiguate with full foo.git': 
	reset &&
	make_bare foo &&
	make_bare foo.git &&
	get foo.git &&
	check foo.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 6 - disambiguate with full foo.git

expecting success of 5900.7 'we are not fooled by non-git foo directory': 
	reset &&
	make_bare foo.git &&
	mkdir foo &&
	get foo &&
	check foo.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 7 - we are not fooled by non-git foo directory

expecting success of 5900.8 'prefer inner .git over outer bare': 
	reset &&
	make_tree foo &&
	make_bare foo.git &&
	mv foo/.git foo.git &&
	get foo.git &&
	check foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo/.git/
[master (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/foo.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5900-repo-selection/fetch/
From ../foo
 * branch            HEAD       -> FETCH_HEAD
Cloning into 'clone'...
done.
ok 8 - prefer inner .git over outer bare

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6001-rev-list-graft.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6001-rev-list-graft/.git/
expecting success of 6001.1 'setup': 
	mkdir subdir &&
	echo >fileA fileA &&
	echo >subdir/fileB fileB &&
	git add fileA subdir/fileB &&
	git commit -a -m "Initial in one history." &&
	A0=$(git rev-parse --verify HEAD) &&

	echo >fileA fileA modified &&
	git commit -a -m "Second in one history." &&
	A1=$(git rev-parse --verify HEAD) &&

	echo >subdir/fileB fileB modified &&
	git commit -a -m "Third in one history." &&
	A2=$(git rev-parse --verify HEAD) &&

	git update-ref -d refs/heads/main &&
	rm -f .git/index &&

	echo >fileA fileA again &&
	echo >subdir/fileB fileB again &&
	git add fileA subdir/fileB &&
	git commit -a -m "Initial in alternate history." &&
	B0=$(git rev-parse --verify HEAD) &&

	echo >fileA fileA modified in alternate history &&
	git commit -a -m "Second in alternate history." &&
	B1=$(git rev-parse --verify HEAD) &&

	echo >subdir/fileB fileB modified in alternate history &&
	git commit -a -m "Third in alternate history." &&
	B2=$(git rev-parse --verify HEAD) &&
	: done

[main (root-commit) ef139ee] Initial in one history.
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA
 create mode 100644 subdir/fileB
[main c65f681] Second in one history.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 65ed2c0] Third in one history.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main (root-commit) 0d82fde] Initial in alternate history.
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA
 create mode 100644 subdir/fileB
[main a28d994] Second in alternate history.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 5e838f4] Third in alternate history.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6001.2 'without grafts': 
		rm -f .git/info/grafts &&
		check basic 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 2 - without grafts

expecting success of 6001.3 'with grafts': 
		mkdir -p .git/info &&
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check basic 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 c65f681a6ac45210ce25db8c004222384015f12d ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 3 - with grafts

expecting success of 6001.4 'without grafts, with pathlimit': 
		rm -f .git/info/grafts &&
		check basic 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 4 - without grafts, with pathlimit

expecting success of 6001.5 'with grafts, with pathlimit': 
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check basic 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 5 - with grafts, with pathlimit

expecting success of 6001.6 'without grafts': 
		rm -f .git/info/grafts &&
		check parents 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 6 - without grafts

expecting success of 6001.7 'with grafts': 
		mkdir -p .git/info &&
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check parents 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 c65f681a6ac45210ce25db8c004222384015f12d ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 7 - with grafts

expecting success of 6001.8 'without grafts, with pathlimit': 
		rm -f .git/info/grafts &&
		check parents 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 8 - without grafts, with pathlimit

expecting success of 6001.9 'with grafts, with pathlimit': 
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check parents 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 9 - with grafts, with pathlimit

expecting success of 6001.10 'without grafts': 
		rm -f .git/info/grafts &&
		check parents-raw 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 10 - without grafts

expecting success of 6001.11 'with grafts': 
		mkdir -p .git/info &&
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check parents-raw 5e838f46836efb51cd27c11e568fb921733be212 -- 5e838f46836efb51cd27c11e568fb921733be212 a28d9941a368a3739ddc8a9c67a28dd90a0ca669 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 c65f681a6ac45210ce25db8c004222384015f12d ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 11 - with grafts

expecting success of 6001.12 'without grafts, with pathlimit': 
		rm -f .git/info/grafts &&
		check parents-raw 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f
	
ok 12 - without grafts, with pathlimit

expecting success of 6001.13 'with grafts, with pathlimit': 
		echo '0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985' >.git/info/grafts &&
		check parents-raw 5e838f46836efb51cd27c11e568fb921733be212 subdir -- 5e838f46836efb51cd27c11e568fb921733be212 0d82fdeb5973938bdc4012a78789c9db5c3ee79f 65ed2c0025a333574f7366e073f53446a5f69985 ef139eef4eb52908138e45ec41c423805177fd0d
	
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 13 - with grafts, with pathlimit

expecting success of 6001.14 'show advice that grafts are deprecated': 
	git show HEAD 2>err &&
	test_i18ngrep "git replace" err &&
	test_config advice.graftFileDeprecated false &&
	git show HEAD 2>err &&
	test_i18ngrep ! "git replace" err

commit 5e838f46836efb51cd27c11e568fb921733be212
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    Third in alternate history.

diff --git a/subdir/fileB b/subdir/fileB
index 2da7ce9..8e5449e 100644
--- a/subdir/fileB
+++ b/subdir/fileB
@@ -1 +1 @@
-fileB again
+fileB modified in alternate history
hint: Please use "git replace --convert-graft-file"
commit 5e838f46836efb51cd27c11e568fb921733be212
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    Third in alternate history.

diff --git a/subdir/fileB b/subdir/fileB
index 2da7ce9..8e5449e 100644
--- a/subdir/fileB
+++ b/subdir/fileB
@@ -1 +1 @@
-fileB again
+fileB modified in alternate history
ok 14 - show advice that grafts are deprecated

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6004-rev-list-path-optim.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6004-rev-list-path-optim/.git/
expecting success of 6004.1 'setup': 
	echo Hello >a &&
	mkdir d &&
	echo World >d/f &&
	echo World >d/z &&
	git add a d &&
	test_tick &&
	git commit -m "Initial commit" &&
	git rev-parse --verify HEAD &&
	git tag initial

[main (root-commit) 5c8df84] Initial commit
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 a
 create mode 100644 d/f
 create mode 100644 d/z
5c8df8481b8e4f419cc2268f5e68a10e349bbe37
ok 1 - setup

expecting success of 6004.2 'path-optimization': 
	test_tick &&
	commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) &&
	test $(git rev-list $commit | wc -l) = 2 &&
	test $(git rev-list $commit -- . | wc -l) = 1

ok 2 - path-optimization

expecting success of 6004.3 'further setup': 
	git checkout -b side &&
	echo Irrelevant >c &&
	echo Irrelevant >d/f &&
	git add c d/f &&
	test_tick &&
	git commit -m "Side makes an irrelevant commit" &&
	git tag side_c0 &&
	echo "More Irrelevancy" >c &&
	git add c &&
	test_tick &&
	git commit -m "Side makes another irrelevant commit" &&
	echo Bye >a &&
	git add a &&
	test_tick &&
	git commit -m "Side touches a" &&
	git tag side_a1 &&
	echo "Yet more Irrelevancy" >c &&
	git add c &&
	test_tick &&
	git commit -m "Side makes yet another irrelevant commit" &&
	git checkout main &&
	echo Another >b &&
	echo Munged >d/z &&
	git add b d/z &&
	test_tick &&
	git commit -m "Main touches b" &&
	git tag main_b0 &&
	git merge side &&
	echo Touched >b &&
	git add b &&
	test_tick &&
	git commit -m "Main touches b again"

Switched to a new branch 'side'
[side d02d707] Side makes an irrelevant commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 c
[side 381f63c] Side makes another irrelevant commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[side e8cf16f] Side touches a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[side edbc4dc] Side makes yet another irrelevant commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main d829b82] Main touches b
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 b
Merge made by the 'ort' strategy.
 a   | 2 +-
 c   | 1 +
 d/f | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 c
[main 7bf8a87] Main touches b again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - further setup

expecting success of 6004.4 'path optimization 2': 
	git rev-parse side_a1 initial >expected &&
	git rev-list HEAD -- a >actual &&
	test_cmp expected actual

ok 4 - path optimization 2

expecting success of 6004.5 'pathspec with leading path': 
	git rev-parse main^ main_b0 side_c0 initial >expected &&
	git rev-list HEAD -- d >actual &&
	test_cmp expected actual

ok 5 - pathspec with leading path

expecting success of 6004.6 'pathspec with glob (1)': 
	git rev-parse main^ main_b0 side_c0 initial >expected &&
	git rev-list HEAD -- "d/*" >actual &&
	test_cmp expected actual

ok 6 - pathspec with glob (1)

expecting success of 6004.7 'pathspec with glob (2)': 
	git rev-parse side_c0 initial >expected &&
	git rev-list HEAD -- "d/[a-m]*" >actual &&
	test_cmp expected actual

ok 7 - pathspec with glob (2)

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6005-rev-list-count.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6005-rev-list-count/.git/
expecting success of 6005.1 'setup': 
    for n in 1 2 3 4 5 ; do
	echo $n > a &&
	git add a &&
	git commit -m "$n" || return 1
    done

[master (root-commit) 47c1352] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[master 2be59de] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 78f6408] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master f4d0cb6] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master a6a826a] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6005.2 'no options': 
	test_stdout_line_count = 5 git rev-list HEAD

ok 2 - no options

expecting success of 6005.3 '--max-count': 
	test_stdout_line_count = 0 git rev-list HEAD --max-count=0 &&
	test_stdout_line_count = 3 git rev-list HEAD --max-count=3 &&
	test_stdout_line_count = 5 git rev-list HEAD --max-count=5 &&
	test_stdout_line_count = 5 git rev-list HEAD --max-count=10

ok 3 - --max-count

expecting success of 6005.4 '--max-count all forms': 
	test_stdout_line_count = 1 git rev-list HEAD --max-count=1 &&
	test_stdout_line_count = 1 git rev-list HEAD -1 &&
	test_stdout_line_count = 1 git rev-list HEAD -n1 &&
	test_stdout_line_count = 1 git rev-list HEAD -n 1

ok 4 - --max-count all forms

expecting success of 6005.5 '--skip': 
	test_stdout_line_count = 5 git rev-list HEAD --skip=0 &&
	test_stdout_line_count = 2 git rev-list HEAD --skip=3 &&
	test_stdout_line_count = 0 git rev-list HEAD --skip=5 &&
	test_stdout_line_count = 0 git rev-list HEAD --skip=10

ok 5 - --skip

expecting success of 6005.6 '--skip --max-count': 
	test_stdout_line_count = 0 git rev-list HEAD --skip=0 --max-count=0 &&
	test_stdout_line_count = 5 git rev-list HEAD --skip=0 --max-count=10 &&
	test_stdout_line_count = 0 git rev-list HEAD --skip=3 --max-count=0 &&
	test_stdout_line_count = 1 git rev-list HEAD --skip=3 --max-count=1 &&
	test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=2 &&
	test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=10 &&
	test_stdout_line_count = 0 git rev-list HEAD --skip=5 --max-count=10 &&
	test_stdout_line_count = 0 git rev-list HEAD --skip=10 --max-count=10

ok 6 - --skip --max-count

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6002-rev-list-bisect.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6002-rev-list-bisect/.git/
expecting success of 6002.1 'bisection diff --bisect l0 ^root <= 0': test $_bisect_err -le $_max_diff
ok 1 - bisection diff --bisect l0 ^root <= 0

expecting success of 6002.2 'bisection diff --bisect l1 ^root <= 0': test $_bisect_err -le $_max_diff
ok 2 - bisection diff --bisect l1 ^root <= 0

expecting success of 6002.3 'bisection diff --bisect l2 ^root <= 0': test $_bisect_err -le $_max_diff
ok 3 - bisection diff --bisect l2 ^root <= 0

expecting success of 6002.4 'bisection diff --bisect a0 ^root <= 0': test $_bisect_err -le $_max_diff
ok 4 - bisection diff --bisect a0 ^root <= 0

expecting success of 6002.5 'bisection diff --bisect a1 ^root <= 0': test $_bisect_err -le $_max_diff
ok 5 - bisection diff --bisect a1 ^root <= 0

expecting success of 6002.6 'bisection diff --bisect a2 ^root <= 0': test $_bisect_err -le $_max_diff
ok 6 - bisection diff --bisect a2 ^root <= 0

expecting success of 6002.7 'bisection diff --bisect a3 ^root <= 0': test $_bisect_err -le $_max_diff
ok 7 - bisection diff --bisect a3 ^root <= 0

expecting success of 6002.8 'bisection diff --bisect b1 ^root <= 0': test $_bisect_err -le $_max_diff
ok 8 - bisection diff --bisect b1 ^root <= 0

expecting success of 6002.9 'bisection diff --bisect b2 ^root <= 0': test $_bisect_err -le $_max_diff
ok 9 - bisection diff --bisect b2 ^root <= 0

expecting success of 6002.10 'bisection diff --bisect b3 ^root <= 0': test $_bisect_err -le $_max_diff
ok 10 - bisection diff --bisect b3 ^root <= 0

expecting success of 6002.11 'bisection diff --bisect c1 ^root <= 0': test $_bisect_err -le $_max_diff
ok 11 - bisection diff --bisect c1 ^root <= 0

expecting success of 6002.12 'bisection diff --bisect c2 ^root <= 0': test $_bisect_err -le $_max_diff
ok 12 - bisection diff --bisect c2 ^root <= 0

expecting success of 6002.13 'bisection diff --bisect c3 ^root <= 0': test $_bisect_err -le $_max_diff
ok 13 - bisection diff --bisect c3 ^root <= 0

expecting success of 6002.14 'bisection diff --bisect E ^F <= 0': test $_bisect_err -le $_max_diff
ok 14 - bisection diff --bisect E ^F <= 0

expecting success of 6002.15 'bisection diff --bisect e1 ^F <= 0': test $_bisect_err -le $_max_diff
ok 15 - bisection diff --bisect e1 ^F <= 0

expecting success of 6002.16 'bisection diff --bisect e2 ^F <= 0': test $_bisect_err -le $_max_diff
ok 16 - bisection diff --bisect e2 ^F <= 0

expecting success of 6002.17 'bisection diff --bisect e3 ^F <= 0': test $_bisect_err -le $_max_diff
ok 17 - bisection diff --bisect e3 ^F <= 0

expecting success of 6002.18 'bisection diff --bisect e4 ^F <= 0': test $_bisect_err -le $_max_diff
ok 18 - bisection diff --bisect e4 ^F <= 0

expecting success of 6002.19 'bisection diff --bisect e5 ^F <= 0': test $_bisect_err -le $_max_diff
ok 19 - bisection diff --bisect e5 ^F <= 0

expecting success of 6002.20 'bisection diff --bisect e6 ^F <= 0': test $_bisect_err -le $_max_diff
ok 20 - bisection diff --bisect e6 ^F <= 0

expecting success of 6002.21 'bisection diff --bisect e7 ^F <= 0': test $_bisect_err -le $_max_diff
ok 21 - bisection diff --bisect e7 ^F <= 0

expecting success of 6002.22 'bisection diff --bisect f1 ^F <= 0': test $_bisect_err -le $_max_diff
ok 22 - bisection diff --bisect f1 ^F <= 0

expecting success of 6002.23 'bisection diff --bisect f2 ^F <= 0': test $_bisect_err -le $_max_diff
ok 23 - bisection diff --bisect f2 ^F <= 0

expecting success of 6002.24 'bisection diff --bisect f3 ^F <= 0': test $_bisect_err -le $_max_diff
ok 24 - bisection diff --bisect f3 ^F <= 0

expecting success of 6002.25 'bisection diff --bisect f4 ^F <= 0': test $_bisect_err -le $_max_diff
ok 25 - bisection diff --bisect f4 ^F <= 0

expecting success of 6002.26 'bisection diff --bisect E ^F <= 0': test $_bisect_err -le $_max_diff
ok 26 - bisection diff --bisect E ^F <= 0

expecting success of 6002.27 'bisection diff --bisect V ^U <= 1': test $_bisect_err -le $_max_diff
ok 27 - bisection diff --bisect V ^U <= 1

expecting success of 6002.28 'bisection diff --bisect V ^U ^u1 ^u2 ^u3 <= 0': test $_bisect_err -le $_max_diff
ok 28 - bisection diff --bisect V ^U ^u1 ^u2 ^u3 <= 0

expecting success of 6002.29 'bisection diff --bisect u1 ^U <= 0': test $_bisect_err -le $_max_diff
ok 29 - bisection diff --bisect u1 ^U <= 0

expecting success of 6002.30 'bisection diff --bisect u2 ^U <= 0': test $_bisect_err -le $_max_diff
ok 30 - bisection diff --bisect u2 ^U <= 0

expecting success of 6002.31 'bisection diff --bisect u3 ^U <= 0': test $_bisect_err -le $_max_diff
ok 31 - bisection diff --bisect u3 ^U <= 0

expecting success of 6002.32 'bisection diff --bisect u4 ^U <= 0': test $_bisect_err -le $_max_diff
ok 32 - bisection diff --bisect u4 ^U <= 0

expecting success of 6002.33 'bisection diff --bisect u5 ^U <= 0': test $_bisect_err -le $_max_diff
ok 33 - bisection diff --bisect u5 ^U <= 0

expecting success of 6002.34 '--bisect l5 ^root': check_output bisect-l5-root "git rev-list $_bisect_option l5 ^root"
ok 34 - --bisect l5 ^root

expecting success of 6002.35 '--bisect l5 ^root ^c3': check_output bisect-l5-root-c3 "git rev-list $_bisect_option l5 ^root ^c3"
ok 35 - --bisect l5 ^root ^c3

expecting success of 6002.36 '--bisect l5 ^root ^c3 ^b4': check_output bisect-l5-root-c3-b4 "git rev-list $_bisect_option l5 ^c3 ^b4"
ok 36 - --bisect l5 ^root ^c3 ^b4

expecting success of 6002.37 '--bisect l3 ^root ^c3 ^b4': check_output bisect-l3-root-c3-b4 "git rev-list $_bisect_option l3 ^root ^c3 ^b4"
ok 37 - --bisect l3 ^root ^c3 ^b4

expecting success of 6002.38 '--bisect l5 ^b3 ^a3 ^b4 ^a4': check_output bisect-l5-b3-a3-b4-a4 "git rev-list $_bisect_option l3 ^b3 ^a3 ^a4"
ok 38 - --bisect l5 ^b3 ^a3 ^b4 ^a4

expecting success of 6002.39 '--bisect l4 ^a2 ^a3 ^b ^a4': check_output bisect-l4-a2-a3-b-a4 "git rev-list $_bisect_option l4 ^a2 ^a3 ^a4"
ok 39 - --bisect l4 ^a2 ^a3 ^b ^a4

expecting success of 6002.40 '--bisect l3 ^a2 ^a3 ^b ^a4': check_output bisect-l3-a2-a3-b-a4 "git rev-list $_bisect_option l3 ^a2 ^a3 ^a4"
ok 40 - --bisect l3 ^a2 ^a3 ^b ^a4

expecting success of 6002.41 '--bisect a4 ^a2 ^a3 ^b4': check_output bisect-a4-a2-a3-b4 "git rev-list $_bisect_option a4 ^a2 ^a3 ^b4"
ok 41 - --bisect a4 ^a2 ^a3 ^b4

expecting success of 6002.42 '--bisect a4 ^a2 ^a3 ^b4 ^c2': check_output bisect-a4-a2-a3-b4-c2 "git rev-list $_bisect_option a4 ^a2 ^a3 ^b4 ^c2"
ok 42 - --bisect a4 ^a2 ^a3 ^b4 ^c2

expecting success of 6002.43 '--bisect a4 ^a2 ^a3 ^b4 ^c2 ^c3': check_output bisect-a4-a2-a3-b4-c2-c3 "git rev-list $_bisect_option a4 ^a2 ^a3 ^b4 ^c2 ^c3"
ok 43 - --bisect a4 ^a2 ^a3 ^b4 ^c2 ^c3

expecting success of 6002.44 '--bisect a4 ^a2 ^a3 ^b4': check_output bisect-a4-a2-a3-b4 "git rev-list $_bisect_option a4 ^a2 ^a3 ^b4"
ok 44 - --bisect a4 ^a2 ^a3 ^b4

expecting success of 6002.45 '--bisect c3 ^a2 ^a3 ^b4 ^c2': check_output bisect-c3-a2-a3-b4-c2 "git rev-list $_bisect_option c3 ^a2 ^a3 ^b4 ^c2"
ok 45 - --bisect c3 ^a2 ^a3 ^b4 ^c2

expecting success of 6002.46 'set up fake --bisect refs': 
	git update-ref refs/bisect/bad c3 &&
	good=$(git rev-parse b1) &&
	git update-ref refs/bisect/good-$good $good &&
	good=$(git rev-parse c1) &&
	git update-ref refs/bisect/good-$good $good

ok 46 - set up fake --bisect refs

expecting success of 6002.47 'rev-list --bisect can default to good/bad refs': 
	# the only thing between c3 and c1 is c2
	git rev-parse c2 >expect &&
	git rev-list --bisect >actual &&
	test_cmp expect actual

ok 47 - rev-list --bisect can default to good/bad refs

expecting success of 6002.48 'rev-parse --bisect can default to good/bad refs': 
	git rev-parse c3 ^b1 ^c1 >expect &&
	git rev-parse --bisect >actual &&

	# output order depends on the refnames, which in turn depends on
	# the exact sha1s. We just want to make sure we have the same set
	# of lines in any order.
	sort <expect >expect.sorted &&
	sort <actual >actual.sorted &&
	test_cmp expect.sorted actual.sorted

ok 48 - rev-parse --bisect can default to good/bad refs

expecting success of 6002.49 '--bisect --first-parent': check_output bisect-first-parent "git rev-list --bisect --first-parent E ^F"
ok 49 - --bisect --first-parent

expecting success of 6002.50 '--first-parent': check_output first-parent "git rev-list --first-parent E ^F"
ok 50 - --first-parent

expecting success of 6002.51 '--bisect-vars --first-parent': check_output bisect-vars-first-parent "git rev-list --bisect-vars --first-parent E ^F"
ok 51 - --bisect-vars --first-parent

expecting success of 6002.52 '--bisect-all --first-parent': 
	cat >expect.unsorted <<-EOF &&
	$(git rev-parse E) (tag: E, dist=0)
	$(git rev-parse e1) (tag: e1, dist=1)
	$(git rev-parse e2) (tag: e2, dist=2)
	$(git rev-parse e3) (tag: e3, dist=3)
	$(git rev-parse e4) (tag: e4, dist=4)
	$(git rev-parse e5) (tag: e5, dist=4)
	$(git rev-parse e6) (tag: e6, dist=3)
	$(git rev-parse e7) (tag: e7, dist=2)
	$(git rev-parse e8) (tag: e8, dist=1)
	EOF

	# expect results to be ordered by distance (descending),
	# commit hash (ascending)
	sort -k4,4r -k1,1 expect.unsorted >expect &&
	git rev-list --bisect-all --first-parent E ^F >actual &&
	test_cmp expect actual

ok 52 - --bisect-all --first-parent

# passed all 52 test(s)
1..52
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6003-rev-list-topo-order.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6003-rev-list-topo-order/.git/
expecting success of 6003.1 'rev-list has correct number of entries': check_output rev-list-has-correct-number-of-entries "git rev-list HEAD | wc -l | tr -d \" \""
ok 1 - rev-list has correct number of entries

expecting success of 6003.2 'simple topo order': check_output simple-topo-order "git rev-list --topo-order  HEAD"
ok 2 - simple topo order

expecting success of 6003.3 'simple date order': check_output simple-date-order "git rev-list --date-order  HEAD"
ok 3 - simple date order

expecting success of 6003.4 'simple author-date order': check_output simple-author-date-order "git rev-list --author-date-order  HEAD"
ok 4 - simple author-date order

expecting success of 6003.5 'two diamonds topo order (g6)': check_output two-diamonds-topo-order-g6 "git rev-list --topo-order  g4"
ok 5 - two diamonds topo order (g6)

expecting success of 6003.6 'multiple heads': check_output multiple-heads "git rev-list --topo-order a3 b3 c3"
ok 6 - multiple heads

expecting success of 6003.7 'multiple heads, prune at a1': check_output multiple-heads-prune-at-a1 "git rev-list --topo-order a3 b3 c3 ^a1"
ok 7 - multiple heads, prune at a1

expecting success of 6003.8 'multiple heads, prune at l1': check_output multiple-heads-prune-at-l1 "git rev-list --topo-order a3 b3 c3 ^l1"
ok 8 - multiple heads, prune at l1

expecting success of 6003.9 'cross-epoch, head at l5, prune at l1': check_output cross-epoch-head-at-l5-prune-at-l1 "git rev-list --topo-order l5 ^l1"
ok 9 - cross-epoch, head at l5, prune at l1

expecting success of 6003.10 'duplicated head arguments': check_output duplicated-head-arguments "git rev-list --topo-order l5 l5 ^l1"
ok 10 - duplicated head arguments

expecting success of 6003.11 'prune near topo': check_output prune-near-topo "git rev-list --topo-order a4 ^c3"
ok 11 - prune near topo

expecting success of 6003.12 'head has no parent': check_output head-has-no-parent "git rev-list --topo-order  root"
ok 12 - head has no parent

expecting success of 6003.13 'two nodes - one head, one base': check_output two-nodes-one-head-one-base "git rev-list --topo-order  l0"
ok 13 - two nodes - one head, one base

expecting success of 6003.14 'three nodes one head, one internal, one base': check_output three-nodes-one-head-one-internal-one-base "git rev-list --topo-order  l1"
ok 14 - three nodes one head, one internal, one base

expecting success of 6003.15 'linear prune l2 ^root': check_output linear-prune-l2-root "git rev-list --topo-order  l2 ^root"
ok 15 - linear prune l2 ^root

expecting success of 6003.16 'linear prune l2 ^l0': check_output linear-prune-l2-l0 "git rev-list --topo-order  l2 ^l0"
ok 16 - linear prune l2 ^l0

expecting success of 6003.17 'linear prune l2 ^l1': check_output linear-prune-l2-l1 "git rev-list --topo-order  l2 ^l1"
ok 17 - linear prune l2 ^l1

expecting success of 6003.18 'linear prune l5 ^a4': check_output linear-prune-l5-a4 "git rev-list --topo-order  l5 ^a4"
ok 18 - linear prune l5 ^a4

expecting success of 6003.19 'linear prune l5 ^l3': check_output linear-prune-l5-l3 "git rev-list --topo-order  l5 ^l3"
ok 19 - linear prune l5 ^l3

expecting success of 6003.20 'linear prune l5 ^l4': check_output linear-prune-l5-l4 "git rev-list --topo-order  l5 ^l4"
ok 20 - linear prune l5 ^l4

expecting success of 6003.21 'max-count 10 - topo order': check_output max-count-10-topo-order "git rev-list --topo-order  --max-count=10 l5"
ok 21 - max-count 10 - topo order

expecting success of 6003.22 'max-count 10 - non topo order': check_output max-count-10-non-topo-order "git rev-list --max-count=10 l5"
ok 22 - max-count 10 - non topo order

expecting success of 6003.23 '--max-age=c3, no --topo-order': check_output max-age-c3-no-topo-order "git rev-list --max-age=51148811 l5"
ok 23 - --max-age=c3, no --topo-order

expecting success of 6003.24 'one specified head reachable from another a4, c3, --topo-order': check_output one-specified-head-reachable-from-another-a4-c3-topo-order "list_duplicates git rev-list --topo-order a4 c3"
ok 24 - one specified head reachable from another a4, c3, --topo-order

expecting success of 6003.25 'one specified head reachable from another c3, a4, --topo-order': check_output one-specified-head-reachable-from-another-c3-a4-topo-order "list_duplicates git rev-list --topo-order c3 a4"
ok 25 - one specified head reachable from another c3, a4, --topo-order

expecting success of 6003.26 'one specified head reachable from another a4, c3, no --topo-order': check_output one-specified-head-reachable-from-another-a4-c3-no-topo-order "list_duplicates git rev-list a4 c3"
ok 26 - one specified head reachable from another a4, c3, no --topo-order

expecting success of 6003.27 'one specified head reachable from another c3, a4, no --topo-order': check_output one-specified-head-reachable-from-another-c3-a4-no-topo-order "list_duplicates git rev-list c3 a4"
ok 27 - one specified head reachable from another c3, a4, no --topo-order

expecting success of 6003.28 'graph with c3 and a4 parents of head': check_output graph-with-c3-and-a4-parents-of-head "list_duplicates git rev-list m1"
ok 28 - graph with c3 and a4 parents of head

expecting success of 6003.29 'graph with a4 and c3 parents of head': check_output graph-with-a4-and-c3-parents-of-head "list_duplicates git rev-list m2"
ok 29 - graph with a4 and c3 parents of head

expecting success of 6003.30 'head ^head --topo-order': git rev-list --topo-order  a3 ^a3
ok 30 - head ^head --topo-order

expecting success of 6003.31 'head ^head no --topo-order': git rev-list a3 ^a3
ok 31 - head ^head no --topo-order

expecting success of 6003.32 'simple topo order (l5r1)': check_output simple-topo-order-l5r1 "git rev-list --topo-order  l5r1"
ok 32 - simple topo order (l5r1)

expecting success of 6003.33 'simple topo order (r1l5)': check_output simple-topo-order-r1l5 "git rev-list --topo-order  r1l5"
ok 33 - simple topo order (r1l5)

expecting success of 6003.34 'don't print things unreachable from one branch': check_output don-t-print-things-unreachable-from-one-branch "git rev-list a3 ^b3 --topo-order"
ok 34 - don't print things unreachable from one branch

expecting success of 6003.35 '--topo-order a4 l3': check_output topo-order-a4-l3 "git rev-list --topo-order a4 l3"
ok 35 - --topo-order a4 l3

# passed all 35 test(s)
1..35
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6008-rev-list-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6008-rev-list-submodule/.git/
expecting success of 6008.1 'setup': 
	: > file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	echo 1 > file &&
	test_tick &&
	git commit -m second file &&
	echo 2 > file &&
	test_tick &&
	git commit -m third file &&

	rm .git/index &&

	: > super-file &&
	git add super-file &&
	git -c protocol.file.allow=always submodule add "$(pwd)" sub &&
	git symbolic-ref HEAD refs/heads/super &&
	test_tick &&
	git commit -m super-initial &&
	echo 1 > super-file &&
	test_tick &&
	git commit -m super-first super-file &&
	echo 2 > super-file &&
	test_tick &&
	git commit -m super-second super-file

[main (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[main 534ad2c] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 1795412] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6008-rev-list-submodule/sub'...
done.
[super (root-commit) 80952c5] super-initial
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 100644 super-file
[super 3c6e554] super-first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[super 45cde59] super-second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6008.2 'Ilari's test': 
	git rev-list --objects super main ^super^

45cde59b58d3a64d2e6c91bf12dc9e720f910d7e
17954123b4d2a45f7e0fec2fea14972db2b90a1f
534ad2c6e7b5b68dcaa4f008327c6c2ab1fa47ff
1bd44cb9d13204b0fe1958db0082f5028a16eb3a
e2fa00c294ecffc4d02d056ba00c81a11284c798 
0cfbf08886fca9a91cb753ec8734c84fcbe52c9f super-file
d9cc608eedd5d2cc63c262272b7a0f6ab6aed5dd 
f27c6ae26adb8396d3861976ba268f87ad8afa0b 
df2b8fc99e1c1d4dbc0a854d9f72157f1d6ea078 
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file
ok 2 - Ilari's test

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6006-rev-list-format.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6006-rev-list-format/.git/
expecting success of 6006.1 'setup': 
	: >foo &&
	git add foo &&
	git config i18n.commitEncoding $test_encoding &&
	echo "$added_iso88591" | git commit -F - &&
	head1=$(git rev-parse --verify HEAD) &&
	head1_short=$(git rev-parse --verify --short $head1) &&
	head1_short4=$(git rev-parse --verify --short=4 $head1) &&
	tree1=$(git rev-parse --verify HEAD:) &&
	tree1_short=$(git rev-parse --verify --short $tree1) &&
	echo "$changed" > foo &&
	echo "$changed_iso88591" | git commit -a -F - &&
	head2=$(git rev-parse --verify HEAD) &&
	head2_short=$(git rev-parse --verify --short $head2) &&
	head2_short4=$(git rev-parse --verify --short=4 $head2) &&
	tree2=$(git rev-parse --verify HEAD:) &&
	tree2_short=$(git rev-parse --verify --short $tree2) &&
	git config --unset i18n.commitEncoding

 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 6006.2 'format percent': 
		git rev-list  --pretty=format:'%%h' main >output.percent &&
		test_cmp expect.percent output.percent
	
ok 2 - format percent

expecting success of 6006.3 'format hash': 
		git rev-list  --pretty=format:'%H%n%h' main >output.hash &&
		test_cmp expect.hash output.hash
	
ok 3 - format hash

expecting success of 6006.4 'format hash-no-header': 
		git rev-list  --no-commit-header --pretty=format:'%H%n%h' main >output.hash-no-header &&
		test_cmp expect.hash-no-header output.hash-no-header
	
ok 4 - format hash-no-header

expecting success of 6006.5 'format hash-no-header-abbrev': 
		git rev-list  --abbrev-commit --abbrev=0 --no-commit-header --pretty=format:'%H%n%h' main >output.hash-no-header-abbrev &&
		test_cmp expect.hash-no-header-abbrev output.hash-no-header-abbrev
	
ok 5 - format hash-no-header-abbrev

expecting success of 6006.6 'format tree': 
		git rev-list  --pretty=format:'%T%n%t' main >output.tree &&
		test_cmp expect.tree output.tree
	
ok 6 - format tree

expecting success of 6006.7 'format parents': 
		git rev-list  --pretty=format:'%P%n%p' main >output.parents &&
		test_cmp expect.parents output.parents
	
ok 7 - format parents

expecting success of 6006.8 'format author': 
		git rev-list  --pretty=format:'%an%n%ae%n%al%n%ad%n%aD%n%at' main >output.author &&
		test_cmp expect.author output.author
	
ok 8 - format author

expecting success of 6006.9 'format committer': 
		git rev-list  --pretty=format:'%cn%n%ce%n%cl%n%cd%n%cD%n%ct' main >output.committer &&
		test_cmp expect.committer output.committer
	
ok 9 - format committer

expecting success of 6006.10 'format encoding': 
		git rev-list  --pretty=format:'%e' main >output.encoding &&
		test_cmp expect.encoding output.encoding
	
ok 10 - format encoding

expecting success of 6006.11 'format subject': 
		git rev-list  --pretty=format:'%s' main >output.subject &&
		test_cmp expect.subject output.subject
	
ok 11 - format subject

expecting success of 6006.12 'format subject-truncated': 
		git rev-list  --pretty=format:'%<(20,trunc)%s' main >output.subject-truncated &&
		test_cmp expect.subject-truncated output.subject-truncated
	
ok 12 - format subject-truncated

expecting success of 6006.13 'format body': 
		git rev-list  --pretty=format:'%b' main >output.body &&
		test_cmp expect.body output.body
	
ok 13 - format body

expecting success of 6006.14 'format raw-body': 
		git rev-list  --pretty=format:'%B' main >output.raw-body &&
		test_cmp expect.raw-body output.raw-body
	
ok 14 - format raw-body

expecting success of 6006.15 'format raw-body-no-header': 
		git rev-list  --no-commit-header --pretty=format:'%B' main >output.raw-body-no-header &&
		test_cmp expect.raw-body-no-header output.raw-body-no-header
	
ok 15 - format raw-body-no-header

expecting success of 6006.16 'pretty oneline (without --no-commit-header)': 
		git rev-list  --pretty='oneline' main >output.oneline &&
		test_cmp expect.oneline output.oneline
	
ok 16 - pretty oneline (without --no-commit-header)

expecting success of 6006.17 'pretty oneline (with --no-commit-header)': 
		git rev-list  --no-commit-header --pretty='oneline' main >output.oneline &&
		test_cmp expect.oneline output.oneline
	
ok 17 - pretty oneline (with --no-commit-header)

expecting success of 6006.18 'pretty short (without --no-commit-header)': 
		git rev-list  --pretty='short' main >output.short &&
		test_cmp expect.short output.short
	
ok 18 - pretty short (without --no-commit-header)

expecting success of 6006.19 'pretty short (with --no-commit-header)': 
		git rev-list  --no-commit-header --pretty='short' main >output.short &&
		test_cmp expect.short output.short
	
ok 19 - pretty short (with --no-commit-header)

expecting success of 6006.20 'basic colors': 
	cat >expect <<-EOF &&
	commit $head2
	<RED>foo<GREEN>bar<BLUE>baz<RESET>xyzzy
	EOF
	format="%Credfoo%Cgreenbar%Cbluebaz%Cresetxyzzy" &&
	git rev-list --color --format="$format" -1 main >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 20 - basic colors

expecting success of 6006.21 '%S is not a placeholder for rev-list yet': 
	git rev-list --format="%S" -1 main | grep "%S"

%S
ok 21 - %S is not a placeholder for rev-list yet

expecting success of 6006.22 'advanced colors': 
	cat >expect <<-EOF &&
	commit $head2
	<BOLD;RED;BYELLOW>foo<RESET>
	EOF
	format="%C(red yellow bold)foo%C(reset)" &&
	git rev-list --color --format="$format" -1 main >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect actual

ok 22 - advanced colors

expecting success of 6006.23 '%Cred does not enable color by default': 
		git log --format=$color -1 >actual &&
		has_no_color actual
	
ok 23 - %Cred does not enable color by default

expecting success of 6006.24 '%Cred enables colors for color.diff': 
		git -c color.diff=always log --format=$color -1 >actual &&
		has_color actual
	
ok 24 - %Cred enables colors for color.diff

expecting success of 6006.25 '%Cred enables colors for color.ui': 
		git -c color.ui=always log --format=$color -1 >actual &&
		has_color actual
	
ok 25 - %Cred enables colors for color.ui

expecting success of 6006.26 '%Cred respects --color': 
		git log --format=$color -1 --color >actual &&
		has_color actual
	
ok 26 - %Cred respects --color

expecting success of 6006.27 '%Cred respects --no-color': 
		git -c color.ui=always log --format=$color -1 --no-color >actual &&
		has_no_color actual
	
ok 27 - %Cred respects --no-color

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 6006.28 '%Cred respects --color=auto (stdout is tty)': 
		test_terminal git log --format=$color -1 --color=auto >actual &&
		has_color actual
	
ok 28 - %Cred respects --color=auto (stdout is tty)

expecting success of 6006.29 '%Cred respects --color=auto (stdout not tty)': 
		(
			TERM=vt100 && export TERM &&
			git log --format=$color -1 --color=auto >actual &&
			has_no_color actual
		)
	
ok 29 - %Cred respects --color=auto (stdout not tty)

expecting success of 6006.30 '%C(...) does not enable color by default': 
		git log --format=$color -1 >actual &&
		has_no_color actual
	
ok 30 - %C(...) does not enable color by default

expecting success of 6006.31 '%C(...) enables colors for color.diff': 
		git -c color.diff=always log --format=$color -1 >actual &&
		has_color actual
	
ok 31 - %C(...) enables colors for color.diff

expecting success of 6006.32 '%C(...) enables colors for color.ui': 
		git -c color.ui=always log --format=$color -1 >actual &&
		has_color actual
	
ok 32 - %C(...) enables colors for color.ui

expecting success of 6006.33 '%C(...) respects --color': 
		git log --format=$color -1 --color >actual &&
		has_color actual
	
ok 33 - %C(...) respects --color

expecting success of 6006.34 '%C(...) respects --no-color': 
		git -c color.ui=always log --format=$color -1 --no-color >actual &&
		has_no_color actual
	
ok 34 - %C(...) respects --no-color

expecting success of 6006.35 '%C(...) respects --color=auto (stdout is tty)': 
		test_terminal git log --format=$color -1 --color=auto >actual &&
		has_color actual
	
ok 35 - %C(...) respects --color=auto (stdout is tty)

expecting success of 6006.36 '%C(...) respects --color=auto (stdout not tty)': 
		(
			TERM=vt100 && export TERM &&
			git log --format=$color -1 --color=auto >actual &&
			has_no_color actual
		)
	
ok 36 - %C(...) respects --color=auto (stdout not tty)

expecting success of 6006.37 '%C(auto,...) does not enable color by default': 
		git log --format=$color -1 >actual &&
		has_no_color actual
	
ok 37 - %C(auto,...) does not enable color by default

expecting success of 6006.38 '%C(auto,...) enables colors for color.diff': 
		git -c color.diff=always log --format=$color -1 >actual &&
		has_color actual
	
ok 38 - %C(auto,...) enables colors for color.diff

expecting success of 6006.39 '%C(auto,...) enables colors for color.ui': 
		git -c color.ui=always log --format=$color -1 >actual &&
		has_color actual
	
ok 39 - %C(auto,...) enables colors for color.ui

expecting success of 6006.40 '%C(auto,...) respects --color': 
		git log --format=$color -1 --color >actual &&
		has_color actual
	
ok 40 - %C(auto,...) respects --color

expecting success of 6006.41 '%C(auto,...) respects --no-color': 
		git -c color.ui=always log --format=$color -1 --no-color >actual &&
		has_no_color actual
	
ok 41 - %C(auto,...) respects --no-color

expecting success of 6006.42 '%C(auto,...) respects --color=auto (stdout is tty)': 
		test_terminal git log --format=$color -1 --color=auto >actual &&
		has_color actual
	
ok 42 - %C(auto,...) respects --color=auto (stdout is tty)

expecting success of 6006.43 '%C(auto,...) respects --color=auto (stdout not tty)': 
		(
			TERM=vt100 && export TERM &&
			git log --format=$color -1 --color=auto >actual &&
			has_no_color actual
		)
	
ok 43 - %C(auto,...) respects --color=auto (stdout not tty)

expecting success of 6006.44 '%C(always,...) enables color even without tty': 
	git log --format=$ALWAYS_COLOR -1 >actual &&
	has_color actual

ok 44 - %C(always,...) enables color even without tty

expecting success of 6006.45 '%C(auto) respects --color': 
	git log --color --format="%C(auto)%H" -1 >actual.raw &&
	test_decode_color <actual.raw >actual &&
	echo "<YELLOW>$(git rev-parse HEAD)<RESET>" >expect &&
	test_cmp expect actual

ok 45 - %C(auto) respects --color

expecting success of 6006.46 '%C(auto) respects --no-color': 
	git log --no-color --format="%C(auto)%H" -1 >actual &&
	git rev-parse HEAD >expect &&
	test_cmp expect actual

ok 46 - %C(auto) respects --no-color

expecting success of 6006.47 'rev-list %C(auto,...) respects --color': 
	git rev-list --color --format="%C(auto,green)foo%C(auto,reset)" \
		-1 HEAD >actual.raw &&
	test_decode_color <actual.raw >actual &&
	cat >expect <<-EOF &&
	commit $(git rev-parse HEAD)
	<GREEN>foo<RESET>
	EOF
	test_cmp expect actual

ok 47 - rev-list %C(auto,...) respects --color

expecting success of 6006.48 'setup complex body': 
	git config i18n.commitencoding $test_encoding &&
	echo change2 >foo && git commit -a -F commit-msg &&
	head3=$(git rev-parse --verify HEAD) &&
	head3_short=$(git rev-parse --short $head3)

[main 79c1a11] Test printing of complex bodies
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 48 - setup complex body

expecting success of 6006.49 'format complex-encoding': 
		git rev-list  --pretty=format:'%e' main >output.complex-encoding &&
		test_cmp expect.complex-encoding output.complex-encoding
	
ok 49 - format complex-encoding

expecting success of 6006.50 'format complex-subject': 
		git rev-list  --pretty=format:'%s' main >output.complex-subject &&
		test_cmp expect.complex-subject output.complex-subject
	
ok 50 - format complex-subject

expecting success of 6006.51 'format complex-subject-trunc': 
		git rev-list  --pretty=format:'%<(20,trunc)%s' main >output.complex-subject-trunc &&
		test_cmp expect.complex-subject-trunc output.complex-subject-trunc
	
ok 51 - format complex-subject-trunc

expecting success of 6006.52 'format complex-subject-mtrunc': 
		git rev-list  --pretty=format:'%<(20,mtrunc)%s' main >output.complex-subject-mtrunc &&
		test_cmp expect.complex-subject-mtrunc output.complex-subject-mtrunc
	
ok 52 - format complex-subject-mtrunc

expecting success of 6006.53 'format complex-subject-ltrunc': 
		git rev-list  --pretty=format:'%<(20,ltrunc)%s' main >output.complex-subject-ltrunc &&
		test_cmp expect.complex-subject-ltrunc output.complex-subject-ltrunc
	
ok 53 - format complex-subject-ltrunc

expecting success of 6006.54 'setup expected messages (for test %b)': 
	cat <<-EOF >expected.utf-8 &&
	commit $head3
	This commit message is much longer than the others,
	and it will be encoded in $test_encoding. We should therefore
	include an ISO8859 character: ¡bueno!

	commit $head2
	commit $head1
	EOF
	iconv -f utf-8 -t $test_encoding expected.utf-8 >expected.ISO8859-1

ok 54 - setup expected messages (for test %b)

expecting success of 6006.55 'format complex-body': 
		git rev-list  --pretty=format:'%b' main >output.complex-body &&
		test_cmp expect.complex-body output.complex-body
	
ok 55 - format complex-body

expecting success of 6006.56 'format complex-subject-commitencoding-unset': 
		git rev-list  --pretty=format:'%s' main >output.complex-subject-commitencoding-unset &&
		test_cmp expect.complex-subject-commitencoding-unset output.complex-subject-commitencoding-unset
	
ok 56 - format complex-subject-commitencoding-unset

expecting success of 6006.57 'format complex-subject-commitencoding-unset-trunc': 
		git rev-list  --pretty=format:'%<(20,trunc)%s' main >output.complex-subject-commitencoding-unset-trunc &&
		test_cmp expect.complex-subject-commitencoding-unset-trunc output.complex-subject-commitencoding-unset-trunc
	
ok 57 - format complex-subject-commitencoding-unset-trunc

expecting success of 6006.58 'format complex-subject-commitencoding-unset-mtrunc': 
		git rev-list  --pretty=format:'%<(20,mtrunc)%s' main >output.complex-subject-commitencoding-unset-mtrunc &&
		test_cmp expect.complex-subject-commitencoding-unset-mtrunc output.complex-subject-commitencoding-unset-mtrunc
	
ok 58 - format complex-subject-commitencoding-unset-mtrunc

expecting success of 6006.59 'format complex-subject-commitencoding-unset-ltrunc': 
		git rev-list  --pretty=format:'%<(20,ltrunc)%s' main >output.complex-subject-commitencoding-unset-ltrunc &&
		test_cmp expect.complex-subject-commitencoding-unset-ltrunc output.complex-subject-commitencoding-unset-ltrunc
	
ok 59 - format complex-subject-commitencoding-unset-ltrunc

expecting success of 6006.60 'format complex-body-commitencoding-unset': 
		git rev-list  --pretty=format:'%b' main >output.complex-body-commitencoding-unset &&
		test_cmp expect.complex-body-commitencoding-unset output.complex-body-commitencoding-unset
	
ok 60 - format complex-body-commitencoding-unset

expecting success of 6006.61 '%x00 shows NUL': 
	echo  >expect commit $head3 &&
	echo >>expect fooQbar &&
	git rev-list -1 --format=foo%x00bar HEAD >actual.nul &&
	nul_to_q <actual.nul >actual &&
	test_cmp expect actual

ok 61 - %x00 shows NUL

expecting success of 6006.62 '%ad respects --date=': 
	echo 2005-04-07 >expect.ad-short &&
	git log -1 --date=short --pretty=tformat:%ad >output.ad-short main &&
	test_cmp expect.ad-short output.ad-short

ok 62 - %ad respects --date=

expecting success of 6006.63 'empty email': 
	test_tick &&
	C=$(GIT_AUTHOR_EMAIL= git commit-tree HEAD^{tree} </dev/null) &&
	A=$(git show --pretty=format:%an,%ae,%ad%n -s $C) &&
	verbose test "$A" = "$GIT_AUTHOR_NAME,,Thu Apr 7 15:14:13 2005 -0700"

ok 63 - empty email

expecting success of 6006.64 'del LF before empty (1)': 
	git show -s --pretty=format:"%s%n%-b%nThanks%n" HEAD^^ >actual &&
	test_line_count = 2 actual

ok 64 - del LF before empty (1)

expecting success of 6006.65 'del LF before empty (2)': 
	git show -s --pretty=format:"%s%n%-b%nThanks%n" HEAD >actual &&
	test_line_count = 6 actual &&
	grep "^$" actual


ok 65 - del LF before empty (2)

expecting success of 6006.66 'add LF before non-empty (1)': 
	git show -s --pretty=format:"%s%+b%nThanks%n" HEAD^^ >actual &&
	test_line_count = 2 actual

ok 66 - add LF before non-empty (1)

expecting success of 6006.67 'add LF before non-empty (2)': 
	git show -s --pretty=format:"%s%+b%nThanks%n" HEAD >actual &&
	test_line_count = 6 actual &&
	grep "^$" actual


ok 67 - add LF before non-empty (2)

expecting success of 6006.68 'add SP before non-empty (1)': 
	git show -s --pretty=format:"%s% bThanks" HEAD^^ >actual &&
	test $(wc -w <actual) = 3

ok 68 - add SP before non-empty (1)

expecting success of 6006.69 'add SP before non-empty (2)': 
	git show -s --pretty=format:"%s% sThanks" HEAD^^ >actual &&
	test $(wc -w <actual) = 6

ok 69 - add SP before non-empty (2)

expecting success of 6006.70 '--abbrev': 
	echo SHORT SHORT SHORT >expect2 &&
	echo LONG LONG LONG >expect3 &&
	git log -1 --format="%h %h %h" HEAD >actual1 &&
	git log -1 --abbrev=5 --format="%h %h %h" HEAD >actual2 &&
	git log -1 --abbrev=5 --format="%H %H %H" HEAD >actual3 &&
	sed -e "s/$OID_REGEX/LONG/g" -e "s/$_x05/SHORT/g" <actual2 >fuzzy2 &&
	sed -e "s/$OID_REGEX/LONG/g" -e "s/$_x05/SHORT/g" <actual3 >fuzzy3 &&
	test_cmp expect2 fuzzy2 &&
	test_cmp expect3 fuzzy3 &&
	! test_cmp actual1 actual2

--- actual1	2022-12-28 07:56:11.653359138 +0000
+++ actual2	2022-12-28 07:56:11.693360607 +0000
@@ -1 +1 @@
-79c1a11 79c1a11 79c1a11
+79c1a 79c1a 79c1a
ok 70 - --abbrev

expecting success of 6006.71 '%H is not affected by --abbrev-commit': 
	expected=$(($(test_oid hexsz) + 1)) &&
	git log -1 --format=%H --abbrev-commit --abbrev=20 HEAD >actual &&
	len=$(wc -c <actual) &&
	test $len = $expected

ok 71 - %H is not affected by --abbrev-commit

expecting success of 6006.72 '%h is not affected by --abbrev-commit': 
	git log -1 --format=%h --abbrev-commit --abbrev=20 HEAD >actual &&
	len=$(wc -c <actual) &&
	test $len = 21

ok 72 - %h is not affected by --abbrev-commit

expecting success of 6006.73 '"%h %gD: %gs" is same as git-reflog': 
	git reflog >expect &&
	git log -g --format="%h %gD: %gs" >actual &&
	test_cmp expect actual

ok 73 - "%h %gD: %gs" is same as git-reflog

expecting success of 6006.74 '"%h %gD: %gs" is same as git-reflog (with date)': 
	git reflog --date=raw >expect &&
	git log -g --format="%h %gD: %gs" --date=raw >actual &&
	test_cmp expect actual

ok 74 - "%h %gD: %gs" is same as git-reflog (with date)

expecting success of 6006.75 '"%h %gD: %gs" is same as git-reflog (with --abbrev)': 
	git reflog --abbrev=13 --date=raw >expect &&
	git log -g --abbrev=13 --format="%h %gD: %gs" --date=raw >actual &&
	test_cmp expect actual

ok 75 - "%h %gD: %gs" is same as git-reflog (with --abbrev)

expecting success of 6006.76 '%gd shortens ref name': 
	echo "main@{0}" >expect.gd-short &&
	git log -g -1 --format=%gd refs/heads/main >actual.gd-short &&
	test_cmp expect.gd-short actual.gd-short

ok 76 - %gd shortens ref name

expecting success of 6006.77 'reflog identity': 
	echo "$GIT_COMMITTER_NAME:$GIT_COMMITTER_EMAIL" >expect &&
	git log -g -1 --format="%gn:%ge" >actual &&
	test_cmp expect actual

ok 77 - reflog identity

expecting success of 6006.78 'oneline with empty message': 
	git commit --allow-empty --cleanup=verbatim -m "$LF" &&
	git commit --allow-empty --allow-empty-message &&
	git rev-list --oneline HEAD >test.txt &&
	test_line_count = 5 test.txt &&
	git rev-list --oneline --graph HEAD >testg.txt &&
	test_line_count = 5 testg.txt

[main 45d198f] 
 Author: A U Thor <author@example.com>
[main d12d4e0] 
 Author: A U Thor <author@example.com>
ok 78 - oneline with empty message

expecting success of 6006.79 'single-character name is parsed correctly': 
	git commit --author="a <a@example.com>" --allow-empty -m foo &&
	echo "a <a@example.com>" >expect &&
	git log -1 --format="%an <%ae>" >actual &&
	test_cmp expect actual

[main d066665] foo
 Author: a <a@example.com>
ok 79 - single-character name is parsed correctly

expecting success of 6006.80 'unused %G placeholders are passed through': 
	echo "%GX %G" >expect &&
	git log -1 --format="%GX %G" >actual &&
	test_cmp expect actual

ok 80 - unused %G placeholders are passed through

# passed all 80 test(s)
1..80
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6007-rev-list-cherry-pick-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6007-rev-list-cherry-pick-file/.git/
expecting success of 6007.1 'setup': 
	echo Hallo > foo &&
	git add foo &&
	test_tick &&
	git commit -m "A" &&
	git tag A &&
	git checkout -b branch &&
	echo Bello > foo &&
	echo Cello > bar &&
	git add foo bar &&
	test_tick &&
	git commit -m "C" &&
	git tag C &&
	echo Dello > bar &&
	git add bar &&
	test_tick &&
	git commit -m "E" &&
	git tag E &&
	git checkout main &&
	git checkout branch foo &&
	test_tick &&
	git commit -m "B" &&
	git tag B &&
	echo Cello > bar &&
	git add bar &&
	test_tick &&
	git commit -m "D" &&
	git tag D &&
	echo Nello > bar &&
	git add bar &&
	test_tick &&
	git commit -m "F" &&
	git tag F

[main (root-commit) 87a5b85] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Switched to a new branch 'branch'
[branch d81b112] C
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 bar
[branch 50f946e] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Updated 1 path from 75417d5
[main 9e00a87] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 9c68531] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[main 555ccf5] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6007.2 '--left-right': 
	git rev-list --left-right B...C > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 2 - --left-right

expecting success of 6007.3 '--count': 
	git rev-list --count B...C > actual &&
	test "$(cat actual)" = 2

ok 3 - --count

expecting success of 6007.4 '--cherry-pick foo comes up empty': 
	test -z "$(git rev-list --left-right --cherry-pick B...C -- foo)"

ok 4 - --cherry-pick foo comes up empty

expecting success of 6007.5 '--cherry-pick bar does not come up empty': 
	git rev-list --left-right --cherry-pick B...C -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 5 - --cherry-pick bar does not come up empty

expecting success of 6007.6 'bar does not come up empty': 
	git rev-list --left-right B...C -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 6 - bar does not come up empty

expecting success of 6007.7 '--cherry-pick bar does not come up empty (II)': 
	git rev-list --left-right --cherry-pick F...E -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 7 - --cherry-pick bar does not come up empty (II)

expecting success of 6007.8 'name-rev multiple --refs combine inclusive': 
	git rev-list --left-right --cherry-pick F...E -- bar >actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" \
		<actual >actual.named &&
	test_cmp expect actual.named

ok 8 - name-rev multiple --refs combine inclusive

expecting success of 6007.9 'name-rev --refs excludes non-matched patterns': 
	git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
	git rev-list --left-right --cherry-pick F...E -- bar >actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/F" \
		<actual >actual.named &&
	test_cmp expect actual.named

ok 9 - name-rev --refs excludes non-matched patterns

expecting success of 6007.10 'name-rev --exclude excludes matched patterns': 
	git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
	git rev-list --left-right --cherry-pick F...E -- bar >actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" --exclude="*E" \
		<actual >actual.named &&
	test_cmp expect actual.named

ok 10 - name-rev --exclude excludes matched patterns

expecting success of 6007.11 'name-rev --no-refs clears the refs list': 
	git rev-list --left-right --cherry-pick F...E -- bar >expect &&
	git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
		<expect >actual &&
	test_cmp expect actual

ok 11 - name-rev --no-refs clears the refs list

expecting success of 6007.12 '--cherry-mark': 
	git rev-list --cherry-mark F...E -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 12 - --cherry-mark

expecting success of 6007.13 '--cherry-mark --left-right': 
	git rev-list --cherry-mark --left-right F...E -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 13 - --cherry-mark --left-right

expecting success of 6007.14 '--cherry-pick --right-only': 
	git rev-list --cherry-pick --right-only F...E -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 14 - --cherry-pick --right-only

expecting success of 6007.15 '--cherry-pick --left-only': 
	git rev-list --cherry-pick --left-only E...F -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 15 - --cherry-pick --left-only

expecting success of 6007.16 '--cherry': 
	git rev-list --cherry F...E -- bar > actual &&
	git name-rev --annotate-stdin --name-only --refs="*tags/*" \
		< actual > actual.named &&
	test_cmp expect actual.named

ok 16 - --cherry

expecting success of 6007.17 '--cherry --count': 
	git rev-list --cherry --count F...E -- bar > actual &&
	test_cmp expect actual

ok 17 - --cherry --count

expecting success of 6007.18 '--cherry-mark --count': 
	git rev-list --cherry-mark --count F...E -- bar > actual &&
	test_cmp expect actual

ok 18 - --cherry-mark --count

expecting success of 6007.19 '--cherry-mark --left-right --count': 
	git rev-list --cherry-mark --left-right --count F...E -- bar > actual &&
	test_cmp expect actual

ok 19 - --cherry-mark --left-right --count

expecting success of 6007.20 '--cherry-pick with independent, but identical branches': 
	git symbolic-ref HEAD refs/heads/independent &&
	rm .git/index &&
	echo Hallo > foo &&
	git add foo &&
	test_tick &&
	git commit -m "independent" &&
	echo Bello > foo &&
	test_tick &&
	git commit -m "independent, too" foo &&
	test -z "$(git rev-list --left-right --cherry-pick \
		HEAD...main -- foo)"

[independent (root-commit) 5da548c] independent
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[independent de095d9] independent, too
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 20 - --cherry-pick with independent, but identical branches

expecting success of 6007.21 '--count --left-right': 
	git rev-list --count --left-right C...D > actual &&
	test_cmp expect actual

ok 21 - --count --left-right

expecting success of 6007.22 '--cherry-pick with duplicates on each side': 
	git checkout -b dup-orig &&
	test_commit dup-base &&
	git revert dup-base &&
	git cherry-pick dup-base &&
	git checkout -b dup-side HEAD~3 &&
	test_tick &&
	git cherry-pick -3 dup-orig &&
	git rev-list --cherry-pick dup-orig...dup-side >actual &&
	test_must_be_empty actual

Switched to a new branch 'dup-orig'
[dup-orig eb9d72c] dup-base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dup-base.t
[dup-orig 92ef1a2] Revert "dup-base"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 dup-base.t
[dup-orig 3f88b9e] dup-base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 dup-base.t
Switched to a new branch 'dup-side'
[dup-side d37dce7] dup-base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 dup-base.t
[dup-side 5e0bb86] Revert "dup-base"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 deletion(-)
 delete mode 100644 dup-base.t
[dup-side c48d64d] dup-base
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:21:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 dup-base.t
ok 22 - --cherry-pick with duplicates on each side

expecting success of 6007.23 '--cherry-pick avoids looking at full diffs': 
	git checkout -b shy-diff &&
	test_commit dont-look-at-me &&
	echo Hello >dont-look-at-me.t &&
	test_tick &&
	git commit -m tip dont-look-at-me.t &&
	git checkout -b mainline HEAD^ &&
	test_commit to-cherry-pick &&
	remove_loose_object shy-diff^:dont-look-at-me.t &&
	git rev-list --cherry-pick ...shy-diff

Switched to a new branch 'shy-diff'
[shy-diff 694eab7] dont-look-at-me
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dont-look-at-me.t
[shy-diff 065751b] tip
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'mainline'
[mainline edb671e] to-cherry-pick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-cherry-pick.t
edb671edd4843042c1e4b762a9eb9a82125402aa
065751bb4ac05081d62425d3a9670d9d9102f001
ok 23 - --cherry-pick avoids looking at full diffs

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6011-rev-list-with-bad-commit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6011-rev-list-with-bad-commit/.git/
expecting success of 6011.1 'setup': 
   git init &&
   git config core.compression 0 &&
   git config core.logallrefupdates false &&
   echo "foo" > foo &&
   git add foo &&
   git commit -m "first commit" &&
   echo "bar" > bar &&
   git add bar &&
   git commit -m "second commit" &&
   echo "baz" > baz &&
   git add baz &&
   git commit -m "third commit" &&
   echo "foo again" >> foo &&
   git add foo &&
   git commit -m "fourth commit" &&
   git repack -a -f -d
   
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6011-rev-list-with-bad-commit/.git/
[master (root-commit) 1e22a2b] first commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[master 869767e] second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[master 53fc376] third commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
[master 59070cc] fourth commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 6011.2 'verify number of revisions': 
   revs=$(git rev-list --all | wc -l) &&
   test $revs -eq 4 &&
   first_commit=$(git rev-parse HEAD~3)
   
ok 2 - verify number of revisions

expecting success of 6011.3 'corrupt second commit object': 
   perl -i.bak -pe "s/second commit/socond commit/" .git/objects/pack/*.pack &&
   test_must_fail git fsck --full
   
error: .git/objects/pack/pack-14931f0a002da21c186a836b8d79b815fcfaa9d3.pack pack checksum mismatch
error: index CRC mismatch for object 869767e8235beefc84738586055c7a2b7232db6d from .git/objects/pack/pack-14931f0a002da21c186a836b8d79b815fcfaa9d3.pack at offset 487
error: inflate: data stream error (incorrect data check)
error: cannot unpack 869767e8235beefc84738586055c7a2b7232db6d from .git/objects/pack/pack-14931f0a002da21c186a836b8d79b815fcfaa9d3.pack at offset 487
dangling tree 89ff1a2aefcbff0f09197f0fd8beeb19a7b6e51c
dangling commit 1e22a2b921014905366810d999b3d3a3e9514320
ok 3 - corrupt second commit object

expecting success of 6011.4 'rev-list should fail': 
	test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list --all > /dev/null

error: inflate: data stream error (incorrect data check)
fatal: packed object 869767e8235beefc84738586055c7a2b7232db6d (stored in .git/objects/pack/pack-14931f0a002da21c186a836b8d79b815fcfaa9d3.pack) is corrupt
ok 4 - rev-list should fail

expecting success of 6011.5 'git repack _MUST_ fail': 
   test_must_fail git repack -a -f -d
   
error: inflate: data stream error (incorrect data check)
fatal: packed object 869767e8235beefc84738586055c7a2b7232db6d (stored in .git/objects/pack/pack-14931f0a002da21c186a836b8d79b815fcfaa9d3.pack) is corrupt
ok 5 - git repack _MUST_ fail

expecting success of 6011.6 'first commit is still available': 
   git log $first_commit
   
commit 1e22a2b921014905366810d999b3d3a3e9514320
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    first commit
ok 6 - first commit is still available

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t5572-pull-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/.git/
expecting success of 5572.1 'git_pull: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_pull: added submodule creates empty directory

expecting success of 5572.2 'git_pull: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_pull: added submodule leaves existing empty directory alone

expecting success of 5572.3 'git_pull: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Deleted branch replace_file_with_sub1 (was 8b6fdfc).
Switched to a new branch 'replace_file_with_sub1'
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_pull: replace tracked file with submodule creates empty directory

expecting success of 5572.4 'git_pull: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Deleted branch replace_directory_with_sub1 (was a2e65d5).
Switched to a new branch 'replace_directory_with_sub1'
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_pull: replace directory with submodule

expecting success of 5572.5 'git_pull: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 5 - git_pull: removed submodule leaves submodule directory and its contents in place

expecting success of 5572.6 'git_pull: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 6 - git_pull: removed submodule leaves submodule containing a .git directory alone

expecting success of 5572.7 'git_pull: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 7 - git_pull: replace submodule with a directory must fail

expecting success of 5572.8 'git_pull: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 8 - git_pull: replace submodule containing a .git directory with a directory must fail

checking known breakage of 5572.9 'git_pull: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull
not ok 9 - git_pull: replace submodule with a file must fail # TODO known breakage

checking known breakage of 5572.10 'git_pull: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull
not ok 10 - git_pull: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 5572.11 'git_pull: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Deleted branch modify_sub1 (was cb2bda7).
Switched to a new branch 'modify_sub1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_pull: modified submodule does not update submodule work tree

expecting success of 5572.12 'git_pull: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Deleted branch invalid_sub1 (was e6169bf).
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_pull: modified submodule does not update submodule work tree to invalid commit

expecting success of 5572.13 'git_pull: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Deleted branch valid_sub1 (was 3036e4e).
Switched to a new branch 'valid_sub1'
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_pull: modified submodule does not update submodule work tree from invalid commit

expecting success of 5572.14 'git_pull: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 14 - git_pull: added submodule doesn't remove untracked unignored file with same name

expecting success of 5572.15 'git_pull_ff: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 15 - git_pull_ff: added submodule creates empty directory

expecting success of 5572.16 'git_pull_ff: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 16 - git_pull_ff: added submodule leaves existing empty directory alone

expecting success of 5572.17 'git_pull_ff: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Deleted branch replace_file_with_sub1 (was 8b6fdfc).
Switched to a new branch 'replace_file_with_sub1'
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 17 - git_pull_ff: replace tracked file with submodule creates empty directory

expecting success of 5572.18 'git_pull_ff: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Deleted branch replace_directory_with_sub1 (was a2e65d5).
Switched to a new branch 'replace_directory_with_sub1'
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 18 - git_pull_ff: replace directory with submodule

expecting success of 5572.19 'git_pull_ff: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 19 - git_pull_ff: removed submodule leaves submodule directory and its contents in place

expecting success of 5572.20 'git_pull_ff: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 20 - git_pull_ff: removed submodule leaves submodule containing a .git directory alone

expecting success of 5572.21 'git_pull_ff: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 21 - git_pull_ff: replace submodule with a directory must fail

expecting success of 5572.22 'git_pull_ff: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 22 - git_pull_ff: replace submodule containing a .git directory with a directory must fail

checking known breakage of 5572.23 'git_pull_ff: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --ff
not ok 23 - git_pull_ff: replace submodule with a file must fail # TODO known breakage

checking known breakage of 5572.24 'git_pull_ff: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --ff
not ok 24 - git_pull_ff: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 5572.25 'git_pull_ff: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Deleted branch modify_sub1 (was cb2bda7).
Switched to a new branch 'modify_sub1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 25 - git_pull_ff: modified submodule does not update submodule work tree

expecting success of 5572.26 'git_pull_ff: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Deleted branch invalid_sub1 (was e6169bf).
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 26 - git_pull_ff: modified submodule does not update submodule work tree to invalid commit

expecting success of 5572.27 'git_pull_ff: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Deleted branch valid_sub1 (was 3036e4e).
Switched to a new branch 'valid_sub1'
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 27 - git_pull_ff: modified submodule does not update submodule work tree from invalid commit

expecting success of 5572.28 'git_pull_ff: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 28 - git_pull_ff: added submodule doesn't remove untracked unignored file with same name

expecting success of 5572.29 'git_pull_ff_only: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 29 - git_pull_ff_only: added submodule creates empty directory

expecting success of 5572.30 'git_pull_ff_only: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 30 - git_pull_ff_only: added submodule leaves existing empty directory alone

expecting success of 5572.31 'git_pull_ff_only: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Deleted branch replace_file_with_sub1 (was 8b6fdfc).
Switched to a new branch 'replace_file_with_sub1'
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 31 - git_pull_ff_only: replace tracked file with submodule creates empty directory

expecting success of 5572.32 'git_pull_ff_only: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Deleted branch replace_directory_with_sub1 (was a2e65d5).
Switched to a new branch 'replace_directory_with_sub1'
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 32 - git_pull_ff_only: replace directory with submodule

expecting success of 5572.33 'git_pull_ff_only: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 33 - git_pull_ff_only: removed submodule leaves submodule directory and its contents in place

expecting success of 5572.34 'git_pull_ff_only: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 34 - git_pull_ff_only: removed submodule leaves submodule containing a .git directory alone

expecting success of 5572.35 'git_pull_ff_only: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 35 - git_pull_ff_only: replace submodule with a directory must fail

expecting success of 5572.36 'git_pull_ff_only: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 36 - git_pull_ff_only: replace submodule containing a .git directory with a directory must fail

checking known breakage of 5572.37 'git_pull_ff_only: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --ff-only
not ok 37 - git_pull_ff_only: replace submodule with a file must fail # TODO known breakage

checking known breakage of 5572.38 'git_pull_ff_only: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --ff-only
not ok 38 - git_pull_ff_only: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 5572.39 'git_pull_ff_only: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Deleted branch modify_sub1 (was cb2bda7).
Switched to a new branch 'modify_sub1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 39 - git_pull_ff_only: modified submodule does not update submodule work tree

expecting success of 5572.40 'git_pull_ff_only: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Deleted branch invalid_sub1 (was e6169bf).
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 40 - git_pull_ff_only: modified submodule does not update submodule work tree to invalid commit

expecting success of 5572.41 'git_pull_ff_only: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Deleted branch valid_sub1 (was 3036e4e).
Switched to a new branch 'valid_sub1'
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 41 - git_pull_ff_only: modified submodule does not update submodule work tree from invalid commit

expecting success of 5572.42 'git_pull_ff_only: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 42 - git_pull_ff_only: added submodule doesn't remove untracked unignored file with same name

expecting success of 5572.43 'git_pull_noff: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 43 - git_pull_noff: added submodule creates empty directory

expecting success of 5572.44 'git_pull_noff: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 44 - git_pull_noff: added submodule leaves existing empty directory alone

expecting success of 5572.45 'git_pull_noff: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Deleted branch replace_file_with_sub1 (was 8b6fdfc).
Switched to a new branch 'replace_file_with_sub1'
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 45 - git_pull_noff: replace tracked file with submodule creates empty directory

expecting success of 5572.46 'git_pull_noff: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Deleted branch replace_directory_with_sub1 (was a2e65d5).
Switched to a new branch 'replace_directory_with_sub1'
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 46 - git_pull_noff: replace directory with submodule

expecting success of 5572.47 'git_pull_noff: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Merge made by the 'ort' strategy.
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 47 - git_pull_noff: removed submodule leaves submodule directory and its contents in place

expecting success of 5572.48 'git_pull_noff: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Deleted branch remove_sub1 (was d6ba723).
Switched to a new branch 'remove_sub1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Merge made by the 'ort' strategy.
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 48 - git_pull_noff: removed submodule leaves submodule containing a .git directory alone

expecting success of 5572.49 'git_pull_noff: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 49 - git_pull_noff: replace submodule with a directory must fail

expecting success of 5572.50 'git_pull_noff: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Deleted branch replace_sub1_with_directory (was cb28587).
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 50 - git_pull_noff: replace submodule containing a .git directory with a directory must fail

checking known breakage of 5572.51 'git_pull_noff: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --no-ff
not ok 51 - git_pull_noff: replace submodule with a file must fail # TODO known breakage

checking known breakage of 5572.52 'git_pull_noff: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Deleted branch replace_sub1_with_file (was 2364f5a).
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git pull --no-ff
not ok 52 - git_pull_noff: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 5572.53 'git_pull_noff: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Deleted branch modify_sub1 (was cb2bda7).
Switched to a new branch 'modify_sub1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Merge made by the 'ort' strategy.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 53 - git_pull_noff: modified submodule does not update submodule work tree

expecting success of 5572.54 'git_pull_noff: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Deleted branch invalid_sub1 (was e6169bf).
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Merge made by the 'ort' strategy.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 54 - git_pull_noff: modified submodule does not update submodule work tree to invalid commit

expecting success of 5572.55 'git_pull_noff: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Deleted branch valid_sub1 (was 3036e4e).
Switched to a new branch 'valid_sub1'
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Merge made by the 'ort' strategy.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 55 - git_pull_noff: modified submodule does not update submodule work tree from invalid commit

expecting success of 5572.56 'git_pull_noff: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Deleted branch add_sub1 (was 09bcf53).
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 56 - git_pull_noff: added submodule doesn't remove untracked unignored file with same name

expecting success of 5572.57 'setup': 
	git config --global protocol.file.allow always

ok 57 - setup

expecting success of 5572.58 'pull --recurse-submodule setup': 
	test_create_repo child &&
	test_commit -C child bar &&

	test_create_repo parent &&
	test_commit -C child foo &&

	git -C parent submodule add ../child sub &&
	git -C parent commit -m "add submodule" &&

	git clone --recurse-submodules parent super

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child/.git/
[master (root-commit) 750fa6a] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent/.git/
[master 0e8869f] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent/sub'...
done.
[master (root-commit) e852c8d] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cloning into 'super'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/super/sub'...
done.
Submodule path 'sub': checked out '0e8869f4b19abd4315a34385d48a89d57d29fcef'
ok 58 - pull --recurse-submodule setup

expecting success of 5572.59 'recursive pull updates working tree': 
	test_commit -C child merge_strategy &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "update submodule" &&

	git -C super pull --no-rebase --recurse-submodules &&
	test_path_is_file super/sub/merge_strategy.t

[master f5118bb] merge_strategy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   0e8869f..f5118bb  master         -> origin/master
 * [new tag]         merge_strategy -> merge_strategy
Submodule path 'sub': checked out 'f5118bbe31591c1754caa4ae107e90ff56cba7a2'
[master e22797f] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent
   e852c8d..e22797f  master     -> origin/master
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   0e8869f..f5118bb  master         -> origin/master
 * [new tag]         merge_strategy -> merge_strategy
Updating e852c8d..e22797f
Fast-forward
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'sub': checked out 'f5118bbe31591c1754caa4ae107e90ff56cba7a2'
ok 59 - recursive pull updates working tree

expecting success of 5572.60 'submodule.recurse option triggers recursive pull': 
	test_commit -C child merge_strategy_2 &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "update submodule" &&

	git -C super -c submodule.recurse pull --no-rebase &&
	test_path_is_file super/sub/merge_strategy_2.t

[master 2656b36] merge_strategy_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy_2.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   f5118bb..2656b36  master           -> origin/master
 * [new tag]         merge_strategy_2 -> merge_strategy_2
Submodule path 'sub': checked out '2656b365d0a47009f5a9da9ec2de04ec5d400273'
[master c804116] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent
   e22797f..c804116  master     -> origin/master
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   f5118bb..2656b36  master           -> origin/master
 * [new tag]         merge_strategy_2 -> merge_strategy_2
Updating e22797f..c804116
Fast-forward
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'sub': checked out '2656b365d0a47009f5a9da9ec2de04ec5d400273'
ok 60 - submodule.recurse option triggers recursive pull

expecting success of 5572.61 ' --[no-]recurse-submodule and submodule.recurse': 
	test_commit -C child merge_strategy_3 &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "update submodule" &&

	git -C super -c submodule.recurse pull --no-recurse-submodules --no-rebase &&
	test_path_is_missing super/sub/merge_strategy_3.t &&
	git -C super -c submodule.recurse=false pull --recurse-submodules --no-rebase &&
	test_path_is_file super/sub/merge_strategy_3.t &&

	test_commit -C child merge_strategy_4 &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "update submodule" &&

	git -C super -c submodule.recurse=false pull --no-recurse-submodules --no-rebase &&
	test_path_is_missing super/sub/merge_strategy_4.t &&
	git -C super -c submodule.recurse=true pull --recurse-submodules --no-rebase &&
	test_path_is_file super/sub/merge_strategy_4.t

[master 685538c] merge_strategy_3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy_3.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   2656b36..685538c  master           -> origin/master
 * [new tag]         merge_strategy_3 -> merge_strategy_3
Submodule path 'sub': checked out '685538cca6f18f91014b4629a2f9b9136c6654cf'
[master 7995336] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent
   c804116..7995336  master     -> origin/master
Updating c804116..7995336
Fast-forward
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   2656b36..685538c  master           -> origin/master
 * [new tag]         merge_strategy_3 -> merge_strategy_3
Already up to date.
Submodule path 'sub': checked out '685538cca6f18f91014b4629a2f9b9136c6654cf'
[master c05caa7] merge_strategy_4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy_4.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   685538c..c05caa7  master           -> origin/master
 * [new tag]         merge_strategy_4 -> merge_strategy_4
Submodule path 'sub': checked out 'c05caa7403cd6cb57ebb9b5c078ede769845b6ac'
[master ab7e8d7] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent
   7995336..ab7e8d7  master     -> origin/master
Updating 7995336..ab7e8d7
Fast-forward
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   685538c..c05caa7  master           -> origin/master
 * [new tag]         merge_strategy_4 -> merge_strategy_4
Already up to date.
Submodule path 'sub': checked out 'c05caa7403cd6cb57ebb9b5c078ede769845b6ac'
ok 61 -  --[no-]recurse-submodule and submodule.recurse

expecting success of 5572.62 'fetch.recurseSubmodules option triggers recursive fetch (but not recursive update)': 
	test_commit -C child merge_strategy_5 &&
	# Omit the parent commit, otherwise this passes with the
	# default "pull" behavior.

	git -C super -c fetch.recursesubmodules=true pull --no-rebase &&
	# Check that the submodule commit was fetched
	sub_oid=$(git -C child rev-parse HEAD) &&
	git -C super/sub cat-file -e $sub_oid &&
	# Check that the submodule worktree did not update
	! test_path_is_file super/sub/merge_strategy_5.t

[master d4ae3d3] merge_strategy_5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy_5.t
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   c05caa7..d4ae3d3  master           -> origin/master
 * [new tag]         merge_strategy_5 -> merge_strategy_5
Already up to date.
File super/sub/merge_strategy_5.t doesn't exist
ok 62 - fetch.recurseSubmodules option triggers recursive fetch (but not recursive update)

expecting success of 5572.63 'fetch.recurseSubmodules takes precedence over submodule.recurse': 
	test_commit -C child merge_strategy_6 &&
	# Omit the parent commit, otherwise this passes with the
	# default "pull" behavior.

	git -C super -c submodule.recurse=false -c fetch.recursesubmodules=true pull --no-rebase &&
	# Check that the submodule commit was fetched
	sub_oid=$(git -C child rev-parse HEAD) &&
	git -C super/sub cat-file -e $sub_oid &&
	# Check that the submodule worktree did not update
	! test_path_is_file super/sub/merge_strategy_6.t

[master 1f3a5c4] merge_strategy_6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 merge_strategy_6.t
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   d4ae3d3..1f3a5c4  master           -> origin/master
 * [new tag]         merge_strategy_6 -> merge_strategy_6
Already up to date.
File super/sub/merge_strategy_6.t doesn't exist
ok 63 - fetch.recurseSubmodules takes precedence over submodule.recurse

expecting success of 5572.64 'pull --rebase --recurse-submodules (remote superproject submodule changes, local submodule changes)': 
	# This tests the following scenario :
	# - local submodule has new commits
	# - local superproject does not have new commits
	# - upstream superproject has new commits that change the submodule pointer

	# change upstream
	test_commit -C child rebase_strategy &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "update submodule" &&

	# also have local commits
	test_commit -C super/sub local_stuff &&

	git -C super pull --rebase --recurse-submodules &&
	test_path_is_file super/sub/rebase_strategy.t &&
	test_path_is_file super/sub/local_stuff.t

[master 4391f12] rebase_strategy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 rebase_strategy.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   c05caa7..4391f12  master          -> origin/master
 * [new tag]         rebase_strategy -> rebase_strategy
 * [new tag]         merge_strategy_5 -> merge_strategy_5
 * [new tag]         merge_strategy_6 -> merge_strategy_6
Submodule path 'sub': checked out '4391f120cab920b6a92bfc8c3d1803d384f7c2ab'
[master 7a9de42] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD a12280c] local_stuff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 local_stuff.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent
   ab7e8d7..7a9de42  master     -> origin/master
Fetching submodule sub
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   1f3a5c4..4391f12  master          -> origin/master
 * [new tag]         rebase_strategy -> rebase_strategy
Updating ab7e8d7..7a9de42
Fast-forward
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/1)

                                                                                
Successfully rebased and updated detached HEAD.
Submodule path 'sub': rebased into '4391f120cab920b6a92bfc8c3d1803d384f7c2ab'
ok 64 - pull --rebase --recurse-submodules (remote superproject submodule changes, local submodule changes)

expecting success of 5572.65 'pull --rebase --recurse-submodules fails if both sides record submodule changes': 
	# This tests the following scenario :
	# - local superproject has new commits that change the submodule pointer
	# - upstream superproject has new commits that change the submodule pointer

	# local changes in submodule recorded in superproject:
	test_commit -C super/sub local_stuff_2 &&
	git -C super add sub &&
	git -C super commit -m "local update submodule" &&

	# and in the remote as well:
	test_commit -C child important_upstream_work &&
	git -C parent submodule update --remote &&
	git -C parent add sub &&
	git -C parent commit -m "remote update submodule" &&

	# Unfortunately we fail here, despite no conflict in the
	# submodule itself, but the merge strategy in submodules
	# does not support rebase:
	test_must_fail git -C super pull --rebase --recurse-submodules 2>err &&
	test_i18ngrep "locally recorded submodule modifications" err

[detached HEAD 759ac20] local_stuff_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 local_stuff_2.t
[master 9fde00a] local update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master d4f9c29] important_upstream_work
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 important_upstream_work.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/child
   4391f12..d4f9c29  master                  -> origin/master
 * [new tag]         important_upstream_work -> important_upstream_work
Submodule path 'sub': checked out 'd4f9c29a61c7ee3ad315fbd2b54c0e503fbceb51'
[master 1555229] remote update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: cannot rebase with locally recorded submodule modifications
ok 65 - pull --rebase --recurse-submodules fails if both sides record submodule changes

expecting success of 5572.66 'pull --rebase --recurse-submodules (no submodule changes, no fork-point)': 
	# This tests the following scenario :
	# - local submodule does not have new commits
	# - local superproject has new commits that *do not* change the submodule pointer
	# - upstream superproject has new commits that *do not* change the submodule pointer
	# - local superproject branch has no fork-point with its remote-tracking counter-part

	# create upstream superproject
	test_create_repo submodule &&
	test_commit -C submodule first_in_sub &&

	test_create_repo superprojet &&
	test_commit -C superprojet first_in_super &&
	git -C superprojet submodule add ../submodule &&
	git -C superprojet commit -m "add submodule" &&
	test_commit -C superprojet third_in_super &&

	# clone superproject
	git clone --recurse-submodules superprojet superclone &&

	# add commits upstream
	test_commit -C superprojet fourth_in_super &&

	# create topic branch in clone, not based on any remote-tracking branch
	git -C superclone checkout -b feat HEAD~1 &&
	test_commit -C superclone first_on_feat &&
	git -C superclone pull --rebase --recurse-submodules origin HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule/.git/
[master (root-commit) 49dad2b] first_in_sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first_in_sub.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/superprojet/.git/
[master (root-commit) 71f9db3] first_in_super
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first_in_super.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/superprojet/submodule'...
done.
[master ef8874e] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
[master b90c0e9] third_in_super
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third_in_super.t
Cloning into 'superclone'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/superclone/submodule'...
done.
Submodule path 'submodule': checked out '49dad2bf2d37043f968daefcc5bfbeb341965350'
[master b1f89fe] fourth_in_super
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fourth_in_super.t
Switched to a new branch 'feat'
[feat 81a2d37] first_on_feat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first_on_feat.t
From /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/superprojet
 * branch            HEAD       -> FETCH_HEAD
Fetching submodule submodule
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/feat.
ok 66 - pull --rebase --recurse-submodules (no submodule changes, no fork-point)

expecting success of 5572.67 'branch has no merge base with remote-tracking counterpart': 
	rm -rf parent child &&

	test_create_repo a-submodule &&
	test_commit -C a-submodule foo &&

	test_create_repo parent &&
	git -C parent submodule add "$(pwd)/a-submodule" &&
	git -C parent commit -m foo &&

	git clone parent child &&

	# Reset the current branch so that it has no merge base with
	# the remote-tracking branch.
	OTHER=$(git -C child commit-tree -m bar \
		$(git -C child rev-parse HEAD^{tree})) &&
	git -C child reset --hard "$OTHER" &&

	git -C child pull --recurse-submodules --rebase

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/a-submodule/.git/
[master (root-commit) a4efc16] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t5572-pull-submodule/parent/a-submodule'...
done.
[master (root-commit) 5db89e0] foo
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 a-submodule
Cloning into 'child'...
done.
HEAD is now at cbe98b6 bar
warning: skipped previously applied commit cbe98b6
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"

                                                                                
Successfully rebased and updated refs/heads/master.
ok 67 - branch has no merge base with remote-tracking counterpart

# still have 8 known breakage(s)
# passed all remaining 59 test(s)
1..67
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6013-rev-list-reverse-parents.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6013-rev-list-reverse-parents/.git/
expecting success of 6013.1 'set up --reverse example': 
	commit one &&
	git tag root &&
	commit two &&
	git checkout -b side HEAD^ &&
	commit three &&
	git checkout main &&
	git merge -s ours side &&
	commit five
	
[main (root-commit) 86412ff] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main 4931c53] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
[side 0fcb03e] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Merge made by the 'ours' strategy.
[main 2ed4a76] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - set up --reverse example

expecting success of 6013.2 '--reverse --parents --full-history combines correctly': 
	git rev-list --parents --full-history main -- foo |
		perl -e "print reverse <>" > expected &&
	git rev-list --reverse --parents --full-history main -- foo \
		> actual &&
	test_cmp expected actual
	
ok 2 - --reverse --parents --full-history combines correctly

expecting success of 6013.3 '--boundary does too': 
	git rev-list --boundary --parents --full-history main ^root -- foo |
		perl -e "print reverse <>" > expected &&
	git rev-list --boundary --reverse --parents --full-history \
		main ^root -- foo > actual &&
	test_cmp expected actual
	
ok 3 - --boundary does too

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6014-rev-list-all.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6014-rev-list-all/.git/
expecting success of 6014.1 'setup': 

	commit one &&
	commit two &&
	git checkout HEAD^ &&
	commit detached


[master (root-commit) 86412ff] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[master 4931c53] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 86412ff one
[detached HEAD 13d8fe0] detached
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6014.2 'rev-list --all lists detached HEAD': 

	test 3 = $(git rev-list --all | wc -l)


ok 2 - rev-list --all lists detached HEAD

expecting success of 6014.3 'repack does not lose detached HEAD': 

	git gc &&
	git prune --expire=now &&
	git show HEAD


commit 13d8fe0bae4079d4dedb755a88319ddebda9a07b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    detached

diff --git a/foo b/foo
index 5626abf..9aa4e2b 100644
--- a/foo
+++ b/foo
@@ -1 +1 @@
-one
+detached
ok 3 - repack does not lose detached HEAD

expecting success of 6014.4 'rev-list --graph --no-walk is forbidden': 
	test_must_fail git rev-list --graph --no-walk HEAD

fatal: options '--no-walk' and '--graph' cannot be used together
ok 4 - rev-list --graph --no-walk is forbidden

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6009-rev-list-parent.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6009-rev-list-parent/.git/
expecting success of 6009.1 'setup': 

	touch file &&
	git add file &&

	test_commit one &&

	test_tick=$(($test_tick - 2400)) &&

	test_commit two &&
	test_commit three &&
	test_commit four &&

	git log --pretty=oneline --abbrev-commit

[main (root-commit) e622cea] one
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 file
 create mode 100644 one.t
[main bfa07e2] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main ecfa770] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[main 0906875] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
0906875 four
ecfa770 three
bfa07e2 two
e622cea one
ok 1 - setup

expecting success of 6009.2 'one is ancestor of others and should not be shown': 

	git rev-list one --not four >result &&
	test_must_be_empty result


ok 2 - one is ancestor of others and should not be shown

expecting success of 6009.3 'setup roots, merges and octopuses': 

	git checkout --orphan newroot &&
	test_commit five &&
	git checkout -b sidebranch two &&
	test_commit six &&
	git checkout -b anotherbranch three &&
	test_commit seven &&
	git checkout -b yetanotherbranch four &&
	test_commit eight &&
	git checkout main &&
	test_tick &&
	git merge --allow-unrelated-histories -m normalmerge newroot &&
	git tag normalmerge &&
	test_tick &&
	git merge -m tripus sidebranch anotherbranch &&
	git tag tripus &&
	git checkout -b tetrabranch normalmerge &&
	test_tick &&
	git merge -m tetrapus sidebranch anotherbranch yetanotherbranch &&
	git tag tetrapus &&
	git checkout main

Switched to a new branch 'newroot'
[newroot (root-commit) 04238a1] five
 Author: A U Thor <author@example.com>
 6 files changed, 5 insertions(+)
 create mode 100644 file
 create mode 100644 five.t
 create mode 100644 four.t
 create mode 100644 one.t
 create mode 100644 three.t
 create mode 100644 two.t
Switched to a new branch 'sidebranch'
[sidebranch e29a44f] six
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 six.t
Switched to a new branch 'anotherbranch'
[anotherbranch f863663] seven
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 seven.t
Switched to a new branch 'yetanotherbranch'
[yetanotherbranch 3e13a02] eight
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 eight.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 five.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
Trying simple merge with sidebranch
Trying simple merge with anotherbranch
Merge made by the 'octopus' strategy.
 seven.t | 1 +
 six.t   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 seven.t
 create mode 100644 six.t
Switched to a new branch 'tetrabranch'
Trying simple merge with sidebranch
Trying simple merge with anotherbranch
Trying simple merge with yetanotherbranch
Merge made by the 'octopus' strategy.
 eight.t | 1 +
 seven.t | 1 +
 six.t   | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 eight.t
 create mode 100644 seven.t
 create mode 100644 six.t
Switched to branch 'main'
ok 3 - setup roots, merges and octopuses

expecting success of 6009.4 'rev-list roots': 

	check_revlist "--max-parents=0" one five

ok 4 - rev-list roots

expecting success of 6009.5 'rev-list no merges': 

	check_revlist "--max-parents=1" one eight seven six five four three two &&
	check_revlist "--no-merges" one eight seven six five four three two

ok 5 - rev-list no merges

expecting success of 6009.6 'rev-list no octopuses': 

	check_revlist "--max-parents=2" one normalmerge eight seven six five four three two

ok 6 - rev-list no octopuses

expecting success of 6009.7 'rev-list no roots': 

	check_revlist "--min-parents=1" tetrapus tripus normalmerge eight seven six four three two

ok 7 - rev-list no roots

expecting success of 6009.8 'rev-list merges': 

	check_revlist "--min-parents=2" tetrapus tripus normalmerge &&
	check_revlist "--merges" tetrapus tripus normalmerge

ok 8 - rev-list merges

expecting success of 6009.9 'rev-list octopus': 

	check_revlist "--min-parents=3" tetrapus tripus

ok 9 - rev-list octopus

expecting success of 6009.10 'rev-list ordinary commits': 

	check_revlist "--min-parents=1 --max-parents=1" eight seven six four three two

ok 10 - rev-list ordinary commits

expecting success of 6009.11 'rev-list --merges --no-merges yields empty set': 

	check_revlist "--min-parents=2 --no-merges" &&
	check_revlist "--merges --no-merges" &&
	check_revlist "--no-merges --merges"

ok 11 - rev-list --merges --no-merges yields empty set

expecting success of 6009.12 'rev-list override and infinities': 

	check_revlist "--min-parents=2 --max-parents=1 --max-parents=3" tripus normalmerge &&
	check_revlist "--min-parents=1 --min-parents=2 --max-parents=7" tetrapus tripus normalmerge &&
	check_revlist "--min-parents=2 --max-parents=8" tetrapus tripus normalmerge &&
	check_revlist "--min-parents=2 --max-parents=-1" tetrapus tripus normalmerge &&
	check_revlist "--min-parents=2 --no-max-parents" tetrapus tripus normalmerge &&
	check_revlist "--max-parents=0 --min-parents=1 --no-min-parents" one five

ok 12 - rev-list override and infinities

expecting success of 6009.13 'dodecapus': 

	roots= &&
	for i in 1 2 3 4 5 6 7 8 9 10 11
	do
		git checkout -b root$i five &&
		test_commit $i &&
		roots="$roots root$i" ||
		return 1
	done &&
	git checkout main &&
	test_tick &&
	git merge -m dodecapus $roots &&
	git tag dodecapus &&

	check_revlist "--min-parents=4" dodecapus tetrapus &&
	check_revlist "--min-parents=8" dodecapus &&
	check_revlist "--min-parents=12" dodecapus &&
	check_revlist "--min-parents=13" &&
	check_revlist "--min-parents=4 --max-parents=11" tetrapus

Switched to a new branch 'root1'
[root1 9562ee3] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
Switched to a new branch 'root2'
[root2 1779fe6] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
Switched to a new branch 'root3'
[root3 cc9911e] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
Switched to a new branch 'root4'
[root4 35b702f] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
Switched to a new branch 'root5'
[root5 c532809] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
Switched to a new branch 'root6'
[root6 f4a589f] 6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6.t
Switched to a new branch 'root7'
[root7 4f77507] 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7.t
Switched to a new branch 'root8'
[root8 e4dbc7d] 8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8.t
Switched to a new branch 'root9'
[root9 446b36e] 9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9.t
Switched to a new branch 'root10'
[root10 120147b] 10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10.t
Switched to a new branch 'root11'
[root11 ce99f6d] 11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11.t
Switched to branch 'main'
Trying simple merge with root1
Trying simple merge with root2
Trying simple merge with root3
Trying simple merge with root4
Trying simple merge with root5
Trying simple merge with root6
Trying simple merge with root7
Trying simple merge with root8
Trying simple merge with root9
Trying simple merge with root10
Trying simple merge with root11
Merge made by the 'octopus' strategy.
 1.t  | 1 +
 10.t | 1 +
 11.t | 1 +
 2.t  | 1 +
 3.t  | 1 +
 4.t  | 1 +
 5.t  | 1 +
 6.t  | 1 +
 7.t  | 1 +
 8.t  | 1 +
 9.t  | 1 +
 11 files changed, 11 insertions(+)
 create mode 100644 1.t
 create mode 100644 10.t
 create mode 100644 11.t
 create mode 100644 2.t
 create mode 100644 3.t
 create mode 100644 4.t
 create mode 100644 5.t
 create mode 100644 6.t
 create mode 100644 7.t
 create mode 100644 8.t
 create mode 100644 9.t
ok 13 - dodecapus

expecting success of 6009.14 'ancestors with the same commit time': 

	test_tick_keep=$test_tick &&
	for i in 1 2 3 4 5 6 7 8; do
		test_tick=$test_tick_keep &&
		test_commit t$i || return 1
	done &&
	git rev-list t1^! --not t$i >result &&
	test_must_be_empty result

[main 1bc0b48] t1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t1.t
[main 145e5ab] t2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t2.t
[main 17e63bf] t3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t3.t
[main 47d7b66] t4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t4.t
[main a42aaab] t5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t5.t
[main aebfe15] t6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t6.t
[main 7cfb595] t7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t7.t
[main fea5200] t8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 t8.t
ok 14 - ancestors with the same commit time

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6010-merge-base.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6010-merge-base/.git/
expecting success of 6010.1 'setup': 
	T=$(git mktree </dev/null)

ok 1 - setup

expecting success of 6010.2 'set up G and H': 
	# E---D---C---B---A
	# \"-_         \   \
	#  \  `---------G   \
	#   \                \
	#    F----------------H
	E=$(doit 5 E) &&
	D=$(doit 4 D $E) &&
	F=$(doit 6 F $E) &&
	C=$(doit 3 C $D) &&
	B=$(doit 2 B $C) &&
	A=$(doit 1 A $B) &&
	G=$(doit 7 G $B $E) &&
	H=$(doit 8 H $A $F)

ok 2 - set up G and H

expecting success of 6010.3 'merge-base G H': 
	git name-rev $B >expected &&

	MB=$(git merge-base G H) &&
	git name-rev "$MB" >actual.single &&

	MB=$(git merge-base --all G H) &&
	git name-rev "$MB" >actual.all &&

	MB=$(git show-branch --merge-base G H) &&
	git name-rev "$MB" >actual.sb &&

	test_cmp expected actual.single &&
	test_cmp expected actual.all &&
	test_cmp expected actual.sb

ok 3 - merge-base G H

expecting success of 6010.4 'merge-base/show-branch --independent': 
	git name-rev "$H" >expected1 &&
	git name-rev "$H" "$G" >expected2 &&

	parents=$(git merge-base --independent H) &&
	git name-rev $parents >actual1.mb &&
	parents=$(git merge-base --independent A H G) &&
	git name-rev $parents >actual2.mb &&

	parents=$(git show-branch --independent H) &&
	git name-rev $parents >actual1.sb &&
	parents=$(git show-branch --independent A H G) &&
	git name-rev $parents >actual2.sb &&

	test_cmp expected1 actual1.mb &&
	test_cmp expected2 actual2.mb &&
	test_cmp expected1 actual1.sb &&
	test_cmp expected2 actual2.sb

ok 4 - merge-base/show-branch --independent

expecting success of 6010.5 'unsynchronized clocks': 
	# This test is to demonstrate that relying on timestamps in a distributed
	# SCM to provide a _consistent_ partial ordering of commits leads to
	# insanity.
	#
	#               Relative
	# Structure     timestamps
	#
	#   PL  PR        +4  +4
	#  /  \/  \      /  \/  \
	# L2  C2  R2    +3  -1  +3
	# |   |   |     |   |   |
	# L1  C1  R1    +2  -2  +2
	# |   |   |     |   |   |
	# L0  C0  R0    +1  -3  +1
	#   \ |  /        \ |  /
	#     S             0
	#
	# The left and right chains of commits can be of any length and complexity as
	# long as all of the timestamps are greater than that of S.

	S=$(doit  0 S) &&

	C0=$(doit -3 C0 $S) &&
	C1=$(doit -2 C1 $C0) &&
	C2=$(doit -1 C2 $C1) &&

	L0=$(doit  1 L0 $S) &&
	L1=$(doit  2 L1 $L0) &&
	L2=$(doit  3 L2 $L1) &&

	R0=$(doit  1 R0 $S) &&
	R1=$(doit  2 R1 $R0) &&
	R2=$(doit  3 R2 $R1) &&

	PL=$(doit  4 PL $L2 $C2) &&
	PR=$(doit  4 PR $C2 $R2) &&

	git name-rev $C2 >expected &&

	MB=$(git merge-base PL PR) &&
	git name-rev "$MB" >actual.single &&

	MB=$(git merge-base --all PL PR) &&
	git name-rev "$MB" >actual.all &&

	test_cmp expected actual.single &&
	test_cmp expected actual.all

ok 5 - unsynchronized clocks

expecting success of 6010.6 '--independent with unsynchronized clocks': 
	IB=$(doit 0 IB) &&
	I1=$(doit -10 I1 $IB) &&
	I2=$(doit  -9 I2 $I1) &&
	I3=$(doit  -8 I3 $I2) &&
	I4=$(doit  -7 I4 $I3) &&
	I5=$(doit  -6 I5 $I4) &&
	I6=$(doit  -5 I6 $I5) &&
	I7=$(doit  -4 I7 $I6) &&
	I8=$(doit  -3 I8 $I7) &&
	IH=$(doit  -2 IH $I8) &&

	echo $IH >expected &&
	git merge-base --independent IB IH >actual &&
	test_cmp expected actual

ok 6 - --independent with unsynchronized clocks

expecting success of 6010.7 'merge-base for octopus-step (setup)': 
	# Another set to demonstrate base between one commit and a merge
	# in the documentation.
	#
	# * C (MMC) * B (MMB) * A  (MMA)
	# * o       * o       * o
	# * o       * o       * o
	# * o       * o       * o
	# * o       | _______/
	# |         |/
	# |         * 1 (MM1)
	# | _______/
	# |/
	# * root (MMR)

	test_commit MMR &&
	test_commit MM1 &&
	test_commit MM-o &&
	test_commit MM-p &&
	test_commit MM-q &&
	test_commit MMA &&
	git checkout MM1 &&
	test_commit MM-r &&
	test_commit MM-s &&
	test_commit MM-t &&
	test_commit MMB &&
	git checkout MMR &&
	test_commit MM-u &&
	test_commit MM-v &&
	test_commit MM-w &&
	test_commit MM-x &&
	test_commit MMC

[master (root-commit) 0075405] MMR
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MMR.t
[master 91243c1] MM1
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM1.t
[master 4d5fde5] MM-o
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-o.t
[master ca22c18] MM-p
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-p.t
[master 2659ed6] MM-q
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-q.t
[master fdb9a8f] MMA
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MMA.t
Note: switching to 'MM1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 91243c1 MM1
[detached HEAD c35e31c] MM-r
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-r.t
[detached HEAD 44e361c] MM-s
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-s.t
[detached HEAD a5daa7f] MM-t
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-t.t
[detached HEAD bca1425] MMB
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MMB.t
Previous HEAD position was bca1425 MMB
HEAD is now at 0075405 MMR
[detached HEAD 174b4d1] MM-u
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-u.t
[detached HEAD c171a6c] MM-v
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-v.t
[detached HEAD c25d00b] MM-w
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-w.t
[detached HEAD 610cc22] MM-x
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MM-x.t
[detached HEAD 03ab457] MMC
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 MMC.t
ok 7 - merge-base for octopus-step (setup)

expecting success of 6010.8 'merge-base A B C': 
	git rev-parse --verify MM1 >expected &&
	git rev-parse --verify MMR >expected.sb &&

	git merge-base --all MMA MMB MMC >actual &&
	git merge-base --all --octopus MMA MMB MMC >actual.common &&
	git show-branch --merge-base MMA MMB MMC >actual.sb &&

	test_cmp expected actual &&
	test_cmp expected.sb actual.common &&
	test_cmp expected.sb actual.sb

ok 8 - merge-base A B C

expecting success of 6010.9 'criss-cross merge-base for octopus-step': 
	git reset --hard MMR &&
	test_commit CC1 &&
	git reset --hard E &&
	test_commit CC2 &&
	test_tick &&
	# E is a root commit unrelated to MMR root on which CC1 is based
	git merge -s ours --allow-unrelated-histories CC1 &&
	test_commit CC-o &&
	test_commit CCB &&
	git reset --hard CC1 &&
	# E is a root commit unrelated to MMR root on which CC1 is based
	git merge -s ours --allow-unrelated-histories CC2 &&
	test_commit CCA &&

	git rev-parse CC1 CC2 >expected &&
	git merge-base --all CCB CCA^^ CCA^^2 >actual &&

	sort expected >expected.sorted &&
	sort actual >actual.sorted &&
	test_cmp expected.sorted actual.sorted

HEAD is now at 0075405 MMR
[detached HEAD 4141141] CC1
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 CC1.t
HEAD is now at e34970a E
[detached HEAD d33e00c] CC2
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 CC2.t
Merge made by the 'ours' strategy.
[detached HEAD 48e3312] CC-o
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 CC-o.t
[detached HEAD dda5641] CCB
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 CCB.t
HEAD is now at 4141141 CC1
Merge made by the 'ours' strategy.
[detached HEAD 6d30b69] CCA
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 CCA.t
ok 9 - criss-cross merge-base for octopus-step

expecting success of 6010.10 'using reflog to find the fork point': 
	git reset --hard &&
	git checkout -b base $E &&

	(
		for count in 1 2 3
		do
			git commit --allow-empty -m "Base commit #$count" &&
			git rev-parse HEAD >expect$count &&
			git checkout -B derived &&
			git commit --allow-empty -m "Derived #$count" &&
			git rev-parse HEAD >derived$count &&
			git checkout -B base $E || exit 1
		done &&

		for count in 1 2 3
		do
			git merge-base --fork-point base $(cat derived$count) >actual &&
			test_cmp expect$count actual || exit 1
		done

	) &&
	# check that we correctly default to HEAD
	git checkout derived &&
	git merge-base --fork-point base >actual &&
	test_cmp expect3 actual

HEAD is now at 6d30b69 CCA
Previous HEAD position was 6d30b69 CCA
Switched to a new branch 'base'
[base 58b1909] Base commit #1
 Author: A U Thor <git@au.thor.xz>
Switched to a new branch 'derived'
[derived 8ef5ddb] Derived #1
 Author: A U Thor <git@au.thor.xz>
Switched to and reset branch 'base'
[base 9ef36f6] Base commit #2
 Author: A U Thor <git@au.thor.xz>
Switched to and reset branch 'derived'
[derived 6c4d828] Derived #2
 Author: A U Thor <git@au.thor.xz>
Switched to and reset branch 'base'
[base d6c9a6e] Base commit #3
 Author: A U Thor <git@au.thor.xz>
Switched to and reset branch 'derived'
[derived 3768cdc] Derived #3
 Author: A U Thor <git@au.thor.xz>
Switched to and reset branch 'base'
Switched to branch 'derived'
ok 10 - using reflog to find the fork point

expecting success of 6010.11 '--fork-point works with empty reflog': 
	git -c core.logallrefupdates=false branch no-reflog base &&
	git merge-base --fork-point no-reflog derived &&
	test_cmp expect3 actual

e34970abbab4461223052769885c56a229ee9299
ok 11 - --fork-point works with empty reflog

expecting success of 6010.12 'merge-base --octopus --all for complex tree': 
	# Best common ancestor for JE, JAA and JDD is JC
	#             JE
	#            / |
	#           /  |
	#          /   |
	#  JAA    /    |
	#   |\   /     |
	#   | \  | JDD |
	#   |  \ |/ |  |
	#   |   JC JD  |
	#   |    | /|  |
	#   |    |/ |  |
	#  JA    |  |  |
	#   |\  /|  |  |
	#   X JB |  X  X
	#   \  \ | /   /
	#    \__\|/___/
	#        J
	test_commit J &&
	test_commit JB &&
	git reset --hard J &&
	test_commit JC &&
	git reset --hard J &&
	test_commit JTEMP1 &&
	test_merge JA JB &&
	test_merge JAA JC &&
	git reset --hard J &&
	test_commit JTEMP2 &&
	test_merge JD JB &&
	test_merge JDD JC &&
	git reset --hard J &&
	test_commit JTEMP3 &&
	test_merge JE JC &&
	git rev-parse JC >expected &&
	git merge-base --all --octopus JAA JDD JE >actual &&
	test_cmp expected actual

[derived 3782338] J
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 J.t
[derived 83a274f] JB
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 JB.t
HEAD is now at 3782338 J
[derived cb75edb] JC
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 JC.t
HEAD is now at 3782338 J
[derived e9767d0] JTEMP1
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 JTEMP1.t
Merge made by the 'ort' strategy.
 JB.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 JB.t
Merge made by the 'ort' strategy.
 JC.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 JC.t
HEAD is now at 3782338 J
[derived d2ca2eb] JTEMP2
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 JTEMP2.t
Merge made by the 'ort' strategy.
 JB.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 JB.t
Merge made by the 'ort' strategy.
 JC.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 JC.t
HEAD is now at 3782338 J
[derived dc142e3] JTEMP3
 Author: A U Thor <git@au.thor.xz>
 1 file changed, 1 insertion(+)
 create mode 100644 JTEMP3.t
Merge made by the 'ort' strategy.
 JC.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 JC.t
ok 12 - merge-base --octopus --all for complex tree

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6016-rev-list-graph-simplify-history.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6016-rev-list-graph-simplify-history/.git/
expecting success of 6016.1 'set up rev-list --graph test': 
	# 3 commits on branch A
	test_commit A1 foo.txt &&
	test_commit A2 bar.txt &&
	test_commit A3 bar.txt &&
	git branch -m main A &&

	# 2 commits on branch B, started from A1
	git checkout -b B A1 &&
	test_commit B1 foo.txt &&
	test_commit B2 abc.txt &&

	# 2 commits on branch C, started from A2
	git checkout -b C A2 &&
	test_commit C1 xyz.txt &&
	test_commit C2 xyz.txt &&

	# Octopus merge B and C into branch A
	git checkout A &&
	git merge B C -m A4 &&
	git tag A4 &&

	test_commit A5 bar.txt &&

	# More commits on C, then merge C into A
	git checkout C &&
	test_commit C3 foo.txt &&
	test_commit C4 bar.txt &&
	git checkout A &&
	git merge -s ours C -m A6 &&
	git tag A6 &&

	test_commit A7 bar.txt

[main (root-commit) 9b00348] A1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.txt
[main 02e4832] A2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.txt
[main 993a1f0] A3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'B'
[B 4accf7e] B1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[B e76ada1] B2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abc.txt
Switched to a new branch 'C'
[C 0c196cf] C1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 xyz.txt
[C ea5d98c] C2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'A'
Trying simple merge with B
Trying simple merge with C
Merge made by the 'octopus' strategy.
 abc.txt | 1 +
 foo.txt | 2 +-
 xyz.txt | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 abc.txt
 create mode 100644 xyz.txt
[A 3f4a8d1] A5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'C'
[C f01c181] C3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[C 406947e] C4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'A'
Merge made by the 'ours' strategy.
[A 691bdad] A7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - set up rev-list --graph test

expecting success of 6016.2 '--graph --all': 
	check_graph --all <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	| * C3
	* | A5
	| |
	|  \
	*-. | A4
	|\ \|
	| | * C2
	| | * C1
	| * | B2
	| * | B1
	* | | A3
	| |/
	|/|
	* | A2
	|/
	* A1
	EOF

ok 2 - --graph --all

expecting success of 6016.3 '--graph --simplify-by-decoration': 
	git tag -d A4 &&
	check_graph --all --simplify-by-decoration <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	| * C3
	* | A5
	| |
	|  \
	*-. | A4
	|\ \|
	| | * C2
	| | * C1
	| * | B2
	| * | B1
	* | | A3
	| |/
	|/|
	* | A2
	|/
	* A1
	EOF

Deleted tag 'A4' (was c96d503)
ok 3 - --graph --simplify-by-decoration

expecting success of 6016.4 'setup: get rid of decorations on B': 
	git tag -d B2 &&
	git tag -d B1 &&
	git branch -d B

Deleted tag 'B2' (was e76ada1)
Deleted tag 'B1' (was 4accf7e)
Deleted branch B (was e76ada1).
ok 4 - setup: get rid of decorations on B

expecting success of 6016.5 '--graph --simplify-by-decoration prune branch B': 
	check_graph --simplify-by-decoration --all <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	| * C3
	* | A5
	* | A4
	|\|
	| * C2
	| * C1
	* | A3
	|/
	* A2
	* A1
	EOF

ok 5 - --graph --simplify-by-decoration prune branch B

expecting success of 6016.6 '--graph --full-history -- bar.txt': 
	check_graph --full-history --all -- bar.txt <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	* | A5
	* | A4
	|\|
	* | A3
	|/
	* A2
	EOF

ok 6 - --graph --full-history -- bar.txt

expecting success of 6016.7 '--graph --full-history --simplify-merges -- bar.txt': 
	check_graph --full-history --simplify-merges --all -- bar.txt <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	* | A5
	* | A3
	|/
	* A2
	EOF

ok 7 - --graph --full-history --simplify-merges -- bar.txt

expecting success of 6016.8 '--graph -- bar.txt': 
	check_graph --all -- bar.txt <<-\EOF
	* A7
	* A5
	* A3
	| * C4
	|/
	* A2
	EOF

ok 8 - --graph -- bar.txt

expecting success of 6016.9 '--graph --sparse -- bar.txt': 
	check_graph --sparse --all -- bar.txt <<-\EOF
	* A7
	* A6
	* A5
	* A4
	* A3
	| * C4
	| * C3
	| * C2
	| * C1
	|/
	* A2
	* A1
	EOF

ok 9 - --graph --sparse -- bar.txt

expecting success of 6016.10 '--graph ^C4': 
	check_graph --all ^C4 <<-\EOF
	* A7
	* A6
	* A5
	*   A4
	|\
	| * B2
	| * B1
	* A3
	EOF

ok 10 - --graph ^C4

expecting success of 6016.11 '--graph ^C3': 
	check_graph --all ^C3 <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	* A5
	*   A4
	|\
	| * B2
	| * B1
	* A3
	EOF

ok 11 - --graph ^C3

expecting success of 6016.12 '--graph --boundary ^C3': 
	check_graph --boundary --all ^C3 <<-\EOF
	* A7
	*   A6
	|\
	| * C4
	* | A5
	| |
	|  \
	*-. \   A4
	|\ \ \
	| * | | B2
	| * | | B1
	* | | | A3
	o | | | A2
	|/ / /
	o / / A1
	 / /
	| o C3
	|/
	o C2
	EOF

ok 12 - --graph --boundary ^C3

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6012-rev-list-simplify.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6012-rev-list-simplify/.git/
expecting success of 6012.1 'setup': 
	echo "Hi there" >file &&
	echo "initial" >lost &&
	git add file lost &&
	test_tick && git commit -m "Initial file and lost" &&
	note A &&

	git branch other-branch &&

	git symbolic-ref HEAD refs/heads/unrelated &&
	git rm -f "*" &&
	echo "Unrelated branch" >side &&
	git add side &&
	test_tick && git commit -m "Side root" &&
	note J &&
	git checkout main &&

	echo "Hello" >file &&
	echo "second" >lost &&
	git add file lost &&
	test_tick && GIT_AUTHOR_DATE=$(($test_tick + 120)) git commit -m "Modified file and lost" &&
	note B &&

	git checkout other-branch &&

	echo "Hello" >file &&
	>lost &&
	git add file lost &&
	test_tick && git commit -m "Modified the file identically" &&
	note C &&

	echo "This is a stupid example" >another-file &&
	git add another-file &&
	test_tick && git commit -m "Add another file" &&
	note D &&

	test_tick &&
	test_must_fail git merge -m "merge" main &&
	>lost && git commit -a -m "merge" &&
	note E &&

	echo "Yet another" >elif &&
	git add elif &&
	test_tick && git commit -m "Irrelevant change" &&
	note F &&

	git checkout main &&
	echo "Yet another" >elif &&
	git add elif &&
	test_tick && git commit -m "Another irrelevant change" &&
	note G &&

	test_tick && git merge -m "merge" other-branch &&
	note H &&

	echo "Final change" >file &&
	test_tick && git commit -a -m "Final change" &&
	note I &&

	git checkout main &&
	test_tick && git merge --allow-unrelated-histories -m "Coolest" unrelated &&
	note K &&

	echo "Immaterial" >elif &&
	git add elif &&
	test_tick && git commit -m "Last" &&
	note L

[main (root-commit) 2ce5a1a] Initial file and lost
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file
 create mode 100644 lost
rm 'file'
rm 'lost'
[unrelated (root-commit) efdd716] Side root
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side
Switched to branch 'main'
[main 1a21661] Modified file and lost
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to branch 'other-branch'
[other-branch 96e46c8] Modified the file identically
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 2 deletions(-)
[other-branch afa190a] Add another file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 another-file
Auto-merging lost
CONFLICT (content): Merge conflict in lost
Automatic merge failed; fix conflicts and then commit the result.
[other-branch 87e2285] merge
 Author: A U Thor <author@example.com>
[other-branch f67ebfb] Irrelevant change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
Switched to branch 'main'
[main b2dce95] Another irrelevant change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
Merge made by the 'ort' strategy.
 another-file | 1 +
 lost         | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 another-file
[main 62ab427] Final change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Already on 'main'
Merge made by the 'ort' strategy.
 side | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 side
[main 1be1b21] Last
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6012.2 'log --full-history --topo-order': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 2 - log --full-history --topo-order

expecting success of 6012.3 'log --full-history': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 3 - log --full-history

expecting success of 6012.4 'log --full-history --date-order': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 4 - log --full-history --date-order

expecting success of 6012.5 'log --full-history --author-date-order': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 5 - log --full-history --author-date-order

expecting success of 6012.6 'log --full-history -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 6 - log --full-history -- file

expecting success of 6012.7 'log --full-history --topo-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 7 - log --full-history --topo-order -- file

expecting success of 6012.8 'log --full-history --date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 8 - log --full-history --date-order -- file

expecting success of 6012.9 'log --full-history --author-date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 9 - log --full-history --author-date-order -- file

expecting success of 6012.10 'log --simplify-merges -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 10 - log --simplify-merges -- file

expecting success of 6012.11 'log --simplify-merges --topo-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 11 - log --simplify-merges --topo-order -- file

expecting success of 6012.12 'log --simplify-merges --date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 12 - log --simplify-merges --date-order -- file

expecting success of 6012.13 'log --simplify-merges --author-date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 13 - log --simplify-merges --author-date-order -- file

expecting success of 6012.14 'log -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 14 - log -- file

expecting success of 6012.15 'log --topo-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 15 - log --topo-order -- file

expecting success of 6012.16 'log --date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 16 - log --date-order -- file

expecting success of 6012.17 'log --author-date-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 17 - log --author-date-order -- file

expecting success of 6012.18 'log --first-parent -- another-file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 18 - log --first-parent -- another-file

expecting success of 6012.19 'log --first-parent --topo-order -- another-file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 19 - log --first-parent --topo-order -- another-file

expecting success of 6012.20 'log --first-parent L': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 20 - log --first-parent L

expecting success of 6012.21 'log --exclude-first-parent-only F ^L': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 21 - log --exclude-first-parent-only F ^L

expecting success of 6012.22 'log F ^L': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 22 - log F ^L

expecting success of 6012.23 'log L ^F': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 23 - log L ^F

expecting success of 6012.24 'log --exclude-first-parent-only L ^F': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 24 - log --exclude-first-parent-only L ^F

expecting success of 6012.25 'log --exclude-first-parent-only --first-parent L ^F': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 25 - log --exclude-first-parent-only --first-parent L ^F

expecting success of 6012.26 'log --full-history E -- lost': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 26 - log --full-history E -- lost

expecting success of 6012.27 'full history simplification without parent': 
	printf "%s\n" E C B A >expect &&
	git log --pretty="$FMT" --full-history E -- lost >out &&
	unnote >actual <out &&
	sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
	test_cmp expect check

ok 27 - full history simplification without parent

expecting success of 6012.28 '--full-diff is not affected by --parents': 
	git log -p --pretty="%H" --full-diff -- file >expected &&
	git log -p --pretty="%H" --full-diff --parents -- file >actual &&
	test_cmp expected actual

ok 28 - --full-diff is not affected by --parents

expecting success of 6012.29 'setup rebuild repo': 
	rm -rf .git * &&
	git init &&
	git switch -c topic &&

	echo base >file &&
	git add file &&
	test_commit I &&

	echo A >file &&
	git add file &&
	test_commit A &&

	git switch -c branchB I &&
	echo B >file &&
	git add file &&
	test_commit B &&

	git switch topic &&
	test_must_fail git merge -m "M" B &&
	echo A >file &&
	echo B >>file &&
	git add file &&
	git merge --continue &&
	note M &&

	echo C >other &&
	git add other &&
	test_commit C &&

	git switch -c branchX I &&
	echo X >file &&
	git add file &&
	test_commit X &&

	git switch -c branchR M &&
	git merge -m R -Xtheirs X &&
	note R &&

	git switch topic &&
	git merge -m N R &&
	note N &&

	git switch -c branchY M &&
	echo Y >y &&
	git add y &&
	test_commit Y &&

	git switch -c branchZ C &&
	echo Z >z &&
	git add z &&
	test_commit Z &&

	git switch topic &&
	git merge -m O Z &&
	note O &&

	git merge -m P Y &&
	note P

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6012-rev-list-simplify/.git/
Switched to a new branch 'topic'
[topic (root-commit) 8df680a] I
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 I.t
 create mode 100644 file
[topic 93fcd66] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 A.t
Switched to a new branch 'branchB'
[branchB 2bc7954] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 B.t
Switched to branch 'topic'
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
[topic 58a754c] M
 Author: A U Thor <author@example.com>
[topic f73bd6d] C
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 C.t
 create mode 100644 other
Switched to a new branch 'branchX'
[branchX a2f4788] X
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 X.t
Switched to a new branch 'branchR'
Auto-merging file
Merge made by the 'ort' strategy.
 X.t  | 1 +
 file | 3 +--
 2 files changed, 2 insertions(+), 2 deletions(-)
 create mode 100644 X.t
Switched to branch 'topic'
Merge made by the 'ort' strategy.
 X.t  | 1 +
 file | 3 +--
 2 files changed, 2 insertions(+), 2 deletions(-)
 create mode 100644 X.t
Switched to a new branch 'branchY'
[branchY 85e7a8e] Y
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 Y.t
 create mode 100644 y
Switched to a new branch 'branchZ'
[branchZ 35501c2] Z
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 Z.t
 create mode 100644 z
Switched to branch 'topic'
Merge made by the 'ort' strategy.
 Z.t | 1 +
 z   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 Z.t
 create mode 100644 z
Merge made by the 'ort' strategy.
 Y.t | 1 +
 y   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 Y.t
 create mode 100644 y
ok 29 - setup rebuild repo

expecting success of 6012.30 'log -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 30 - log -- file

expecting success of 6012.31 'log --show-pulls -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 31 - log --show-pulls -- file

expecting success of 6012.32 'log --full-history --topo-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 32 - log --full-history --topo-order -- file

expecting success of 6012.33 'log --simplify-merges --topo-order --show-pulls -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 33 - log --simplify-merges --topo-order --show-pulls -- file

expecting success of 6012.34 'log --simplify-merges --topo-order -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 34 - log --simplify-merges --topo-order -- file

expecting success of 6012.35 'log --first-parent -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 35 - log --first-parent -- file

expecting success of 6012.36 'log --first-parent --show-pulls -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 36 - log --first-parent --show-pulls -- file

expecting success of 6012.37 'log --topo-order --ancestry-path A..HEAD -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 37 - log --topo-order --ancestry-path A..HEAD -- file

expecting success of 6012.38 'log --topo-order --show-pulls --ancestry-path A..HEAD -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 38 - log --topo-order --show-pulls --ancestry-path A..HEAD -- file

expecting success of 6012.39 'log --topo-order --full-history --ancestry-path A..HEAD -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 39 - log --topo-order --full-history --ancestry-path A..HEAD -- file

expecting success of 6012.40 'log --topo-order --simplify-merges --ancestry-path A..HEAD -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 40 - log --topo-order --simplify-merges --ancestry-path A..HEAD -- file

expecting success of 6012.41 'log --topo-order --simplify-merges --show-pulls --ancestry-path A..HEAD -- file': 
		git log --pretty="$FMT" --parents $param >out &&
		unnote >actual <out &&
		sed -e "s/^.*	\([^ ]*\) .*/\1/" >check <actual &&
		test_cmp expect check
	
ok 41 - log --topo-order --simplify-merges --show-pulls --ancestry-path A..HEAD -- file

expecting success of 6012.42 'log --graph --simplify-merges --show-pulls': 
	cat >expect <<-\EOF &&
	* N
	*   R
	|\  
	| * X
	* |   M
	|\ \  
	| * | B
	| |/  
	* / A
	|/  
	* I
	EOF
	git log --graph --pretty="%s" \
		--simplify-merges --show-pulls \
		-- file >actual &&
	test_cmp expect actual

ok 42 - log --graph --simplify-merges --show-pulls

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6019-rev-list-ancestry-path.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6019-rev-list-ancestry-path/.git/
expecting success of 6019.1 'setup': 
	test_commit A &&
	test_commit B &&
	test_commit C &&
	test_commit D &&
	test_commit E &&
	test_commit F &&
	git reset --hard C &&
	test_commit G &&
	test_merge E H &&
	test_commit I &&
	test_merge F J &&
	git reset --hard A &&
	test_commit K &&
	test_merge J L &&
	test_commit M

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main be8f64f] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[main ee2ad00] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
[main 5374d8c] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.t
HEAD is now at 35a8500 C
[main fa55005] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
Merge made by the 'ours' strategy.
[main 4e719b9] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.t
Merge made by the 'ours' strategy.
HEAD is now at 0ddfaf1 A
[main 0f470b0] K
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 K.t
Merge made by the 'ours' strategy.
[main bcafe1b] M
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 M.t
ok 1 - setup

expecting success of 6019.2 'log D..M': 
		test_write_lines E F G H I J K L M >expect &&
		git log --format=%s D..M >raw &&

		if test -n "E F G H I J K L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 2 - log D..M

expecting success of 6019.3 'log --ancestry-path D..M': 
		test_write_lines E F H I J L M >expect &&
		git log --format=%s --ancestry-path D..M >raw &&

		if test -n "E F H I J L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 3 - log --ancestry-path D..M

expecting success of 6019.4 'log --ancestry-path=F D..M': 
		test_write_lines E F J L M >expect &&
		git log --format=%s --ancestry-path=F D..M >raw &&

		if test -n "E F J L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 4 - log --ancestry-path=F D..M

expecting success of 6019.5 'log --ancestry-path=G D..M': 
		test_write_lines G H I J L M >expect &&
		git log --format=%s --ancestry-path=G D..M >raw &&

		if test -n "G H I J L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 5 - log --ancestry-path=G D..M

expecting success of 6019.6 'log --ancestry-path=H D..M': 
		test_write_lines E G H I J L M >expect &&
		git log --format=%s --ancestry-path=H D..M >raw &&

		if test -n "E G H I J L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 6 - log --ancestry-path=H D..M

expecting success of 6019.7 'log --ancestry-path=K D..M': 
		test_write_lines K L M >expect &&
		git log --format=%s --ancestry-path=K D..M >raw &&

		if test -n "K L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 7 - log --ancestry-path=K D..M

expecting success of 6019.8 'log --ancestry-path=F --ancestry-path=K D..M': 
		test_write_lines E F J K L M >expect &&
		git log --format=%s --ancestry-path=F --ancestry-path=K D..M >raw &&

		if test -n "E F J K L M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 8 - log --ancestry-path=F --ancestry-path=K D..M

expecting success of 6019.9 'log D..M -- M.t': 
		test_write_lines M >expect &&
		git log --format=%s D..M -- M.t >raw &&

		if test -n "M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 9 - log D..M -- M.t

expecting success of 6019.10 'log --ancestry-path D..M -- M.t': 
		test_write_lines M >expect &&
		git log --format=%s --ancestry-path D..M -- M.t >raw &&

		if test -n "M"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 10 - log --ancestry-path D..M -- M.t

expecting success of 6019.11 'log F...I': 
		test_write_lines F G H I >expect &&
		git log --format=%s F...I >raw &&

		if test -n "F G H I"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 11 - log F...I

expecting success of 6019.12 'log --ancestry-path F...I': 
		test_write_lines F H I >expect &&
		git log --format=%s --ancestry-path F...I >raw &&

		if test -n "F H I"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 12 - log --ancestry-path F...I

expecting success of 6019.13 'log G..M -- G.t': 
		test_write_lines  >expect &&
		git log --format=%s G..M -- G.t >raw &&

		if test -n ""
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 13 - log G..M -- G.t

expecting success of 6019.14 'log --ancestry-path G..M -- G.t': 
		test_write_lines L >expect &&
		git log --format=%s --ancestry-path G..M -- G.t >raw &&

		if test -n "L"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 14 - log --ancestry-path G..M -- G.t

expecting success of 6019.15 'log --ancestry-path --simplify-merges G^..M -- G.t': 
		test_write_lines G L >expect &&
		git log --format=%s --ancestry-path --simplify-merges G^..M -- G.t >raw &&

		if test -n "G L"
		then
			sort raw >actual &&
			test_cmp expect actual
		else
			test_must_be_empty raw
		fi
	
ok 15 - log --ancestry-path --simplify-merges G^..M -- G.t

expecting success of 6019.16 'setup criss-cross': 
	mkdir criss-cross &&
	(cd criss-cross &&
	 git init &&
	 test_commit A &&
	 git checkout -b xb main &&
	 test_commit B &&
	 git checkout -b xc main &&
	 test_commit C &&
	 git checkout -b xbc xb -- &&
	 git merge xc &&
	 git checkout -b xcb xc -- &&
	 git merge xb &&
	 git checkout main)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6019-rev-list-ancestry-path/criss-cross/.git/
[main (root-commit) 617a709] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'xb'
[xb 7dfaf8e] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'xc'
[xc cf5ea0b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch 'xbc'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch 'xcb'
Merge made by the 'ort' strategy.
 B.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to branch 'main'
ok 16 - setup criss-cross

expecting success of 6019.17 'criss-cross: rev-list --ancestry-path cb..bc': 
	(cd criss-cross &&
	 git rev-list --ancestry-path xcb..xbc > actual &&
	 test_must_be_empty actual)

ok 17 - criss-cross: rev-list --ancestry-path cb..bc

expecting success of 6019.18 'criss-cross: rev-list --ancestry-path --all ^cb': 
	(cd criss-cross &&
	 git rev-list --ancestry-path --all ^xcb > actual &&
	 test_must_be_empty actual)

ok 18 - criss-cross: rev-list --ancestry-path --all ^cb

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6017-rev-list-stdin.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6017-rev-list-stdin/.git/
expecting success of 6017.1 'setup': 
	(
		for i in 0 $them
		do
			for j in $them
			do
				echo $i.$j >file-$j &&
				git add file-$j || exit
			done &&
			test_tick &&
			git commit -m $i || exit
		done &&
		for i in $them
		do
			git checkout -b side-$i main~$i &&
			echo updated $i >file-$i &&
			git add file-$i &&
			test_tick &&
			git commit -m side-$i || exit
		done
	)

[main (root-commit) b2718df] 0
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 create mode 100644 file-1
 create mode 100644 file-2
 create mode 100644 file-3
 create mode 100644 file-4
 create mode 100644 file-5
 create mode 100644 file-6
 create mode 100644 file-7
[main 4c7c799] 1
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main a24e200] 2
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main 72c7eca] 3
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main 680e5c3] 4
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main 496e2a9] 5
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main c5757f4] 6
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
[main a21e804] 7
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+), 7 deletions(-)
Switched to a new branch 'side-1'
[side-1 c52bcff] side-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-2'
[side-2 fe893aa] side-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-3'
[side-3 48694b2] side-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-4'
[side-4 e31c210] side-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-5'
[side-5 5786a4a] side-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-6'
[side-6 6879e94] side-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side-7'
[side-7 a65952b] side-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6017.2 'check rev-list main': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input main
output a21e80422823d665efde155c070bfdfb97c997e8
output c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output a24e2002dc3e76acd7262fac9934308ed5876528
output 4c7c79994a10176d26cb379d2f480e705687de5f
output b2718dfcca09d482353ed124d94698c230076ecb
ok 2 - check rev-list main

expecting success of 6017.3 'check log --stat main': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input main
output commit a21e80422823d665efde155c070bfdfb97c997e8
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:20:13 2005 -0700
output 
output     7
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:19:13 2005 -0700
output 
output     6
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:18:13 2005 -0700
output 
output     5
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:16:13 2005 -0700
output 
output     3
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit a24e2002dc3e76acd7262fac9934308ed5876528
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:15:13 2005 -0700
output 
output     2
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 4c7c79994a10176d26cb379d2f480e705687de5f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:14:13 2005 -0700
output 
output     1
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit b2718dfcca09d482353ed124d94698c230076ecb
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:13:13 2005 -0700
output 
output     0
output 
output  file-1 | 1 +
output  file-2 | 1 +
output  file-3 | 1 +
output  file-4 | 1 +
output  file-5 | 1 +
output  file-6 | 1 +
output  file-7 | 1 +
output  7 files changed, 7 insertions(+)
ok 3 - check log --stat main

expecting success of 6017.4 'check rev-list side-1 ^side-4': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-4
output c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
ok 4 - check rev-list side-1 ^side-4

expecting success of 6017.5 'check log --stat side-1 ^side-4': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-4
output commit c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:21:13 2005 -0700
output 
output     side-1
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:19:13 2005 -0700
output 
output     6
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:18:13 2005 -0700
output 
output     5
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
ok 5 - check log --stat side-1 ^side-4

expecting success of 6017.6 'check rev-list side-1 ^side-7 --': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
output c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output a24e2002dc3e76acd7262fac9934308ed5876528
output 4c7c79994a10176d26cb379d2f480e705687de5f
ok 6 - check rev-list side-1 ^side-7 --

expecting success of 6017.7 'check log --stat side-1 ^side-7 --': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
output commit c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:21:13 2005 -0700
output 
output     side-1
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:19:13 2005 -0700
output 
output     6
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:18:13 2005 -0700
output 
output     5
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:16:13 2005 -0700
output 
output     3
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit a24e2002dc3e76acd7262fac9934308ed5876528
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:15:13 2005 -0700
output 
output     2
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
output 
output commit 4c7c79994a10176d26cb379d2f480e705687de5f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:14:13 2005 -0700
output 
output     1
output 
output  file-1 | 2 +-
output  file-2 | 2 +-
output  file-3 | 2 +-
output  file-4 | 2 +-
output  file-5 | 2 +-
output  file-6 | 2 +-
output  file-7 | 2 +-
output  7 files changed, 7 insertions(+), 7 deletions(-)
ok 7 - check log --stat side-1 ^side-7 --

expecting success of 6017.8 'check rev-list side-1 ^side-7 -- file-1': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
input file-1
output c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output a24e2002dc3e76acd7262fac9934308ed5876528
output 4c7c79994a10176d26cb379d2f480e705687de5f
ok 8 - check rev-list side-1 ^side-7 -- file-1

expecting success of 6017.9 'check log --stat side-1 ^side-7 -- file-1': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
input file-1
output commit c52bcff3af5ff0d662f1e767ea6739034b17f0ea
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:21:13 2005 -0700
output 
output     side-1
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:19:13 2005 -0700
output 
output     6
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:18:13 2005 -0700
output 
output     5
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:16:13 2005 -0700
output 
output     3
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit a24e2002dc3e76acd7262fac9934308ed5876528
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:15:13 2005 -0700
output 
output     2
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 4c7c79994a10176d26cb379d2f480e705687de5f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:14:13 2005 -0700
output 
output     1
output 
output  file-1 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - check log --stat side-1 ^side-7 -- file-1

expecting success of 6017.10 'check rev-list side-1 ^side-7 -- file-2': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
input file-2
output c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output a24e2002dc3e76acd7262fac9934308ed5876528
output 4c7c79994a10176d26cb379d2f480e705687de5f
ok 10 - check rev-list side-1 ^side-7 -- file-2

expecting success of 6017.11 'check log --stat side-1 ^side-7 -- file-2': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-1
input ^side-7
input --
input file-2
output commit c5757f4c5b3e9d8ed81f0ef337de57e6bef4e611
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:19:13 2005 -0700
output 
output     6
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 496e2a9cb78c7f1f05c123ba68719cbb2850d28b
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:18:13 2005 -0700
output 
output     5
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 72c7ecae8123b34f77d6ec686c9dc4d38558e420
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:16:13 2005 -0700
output 
output     3
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit a24e2002dc3e76acd7262fac9934308ed5876528
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:15:13 2005 -0700
output 
output     2
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 4c7c79994a10176d26cb379d2f480e705687de5f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:14:13 2005 -0700
output 
output     1
output 
output  file-2 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
ok 11 - check log --stat side-1 ^side-7 -- file-2

expecting success of 6017.12 'check rev-list side-3 ^side-4 -- file-3': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-4
input --
input file-3
output 48694b20de8c3a7d2a1cac0c842191d9a9f1dc4f
output 680e5c39478a7f99f59d423c9d29c54c4cf23f21
ok 12 - check rev-list side-3 ^side-4 -- file-3

expecting success of 6017.13 'check log --stat side-3 ^side-4 -- file-3': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-4
input --
input file-3
output commit 48694b20de8c3a7d2a1cac0c842191d9a9f1dc4f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:23:13 2005 -0700
output 
output     side-3
output 
output  file-3 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
output 
output commit 680e5c39478a7f99f59d423c9d29c54c4cf23f21
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:17:13 2005 -0700
output 
output     4
output 
output  file-3 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - check log --stat side-3 ^side-4 -- file-3

expecting success of 6017.14 'check rev-list side-3 ^side-2': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-2
output 48694b20de8c3a7d2a1cac0c842191d9a9f1dc4f
ok 14 - check rev-list side-3 ^side-2

expecting success of 6017.15 'check log --stat side-3 ^side-2': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-2
output commit 48694b20de8c3a7d2a1cac0c842191d9a9f1dc4f
output Author: A U Thor <author@example.com>
output Date:   Thu Apr 7 15:23:13 2005 -0700
output 
output     side-3
output 
output  file-3 | 2 +-
output  1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - check log --stat side-3 ^side-2

expecting success of 6017.16 'check rev-list side-3 ^side-2 -- file-1': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-2
input --
input file-1
ok 16 - check rev-list side-3 ^side-2 -- file-1

expecting success of 6017.17 'check log --stat side-3 ^side-2 -- file-1': 
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		
input side-3
input ^side-2
input --
input file-1
ok 17 - check log --stat side-3 ^side-2 -- file-1

expecting success of 6017.18 'not only --stdin': 
	cat >expect <<-EOF &&
	7

	file-1
	file-2
	EOF
	cat >input <<-EOF &&
	^main^
	--
	file-2
	EOF
	git log --pretty=tformat:%s --name-only --stdin main -- file-1 \
		<input >actual &&
	test_cmp expect actual

ok 18 - not only --stdin

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6018-rev-list-glob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6018-rev-list-glob/.git/
expecting success of 6018.1 'setup': 

	commit main &&
	git checkout -b subspace/one main &&
	commit one &&
	git checkout -b subspace/two main &&
	commit two &&
	git checkout -b subspace-x main &&
	commit subspace-x &&
	git checkout -b other/three main &&
	commit three &&
	git checkout -b someref main &&
	commit some &&
	git checkout main &&
	commit topic_2 &&
	git tag foo/bar main &&
	commit topic_3 &&
	git update-ref refs/remotes/foo/baz main &&
	commit topic_4 &&
	git update-ref refs/remotes/upstream/one subspace/one &&
	git update-ref refs/remotes/upstream/two subspace/two &&
	git update-ref refs/remotes/upstream/x subspace-x &&
	git tag qux/one subspace/one &&
	git tag qux/two subspace/two &&
	git tag qux/x subspace-x

[main (root-commit) f9b107a] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Switched to a new branch 'subspace/one'
[subspace/one ca90b7f] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'subspace/two'
[subspace/two 65ee8ea] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'subspace-x'
[subspace-x e241fee] subspace-x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'other/three'
[other/three ec1efc4] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'someref'
[someref dffcf3f] some
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main 2bdf448] topic_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 0e3b4df] topic_3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 88fe3d2] topic_4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6018.2 'rev-parse --glob=refs/heads/subspace/*': 

	compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/*"


ok 2 - rev-parse --glob=refs/heads/subspace/*

expecting success of 6018.3 'rev-parse --glob=heads/subspace/*': 

	compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/*"


ok 3 - rev-parse --glob=heads/subspace/*

expecting success of 6018.4 'rev-parse --glob=refs/heads/subspace/': 

	compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/"


ok 4 - rev-parse --glob=refs/heads/subspace/

expecting success of 6018.5 'rev-parse --glob=heads/subspace/': 

	compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/"


ok 5 - rev-parse --glob=heads/subspace/

expecting success of 6018.6 'rev-parse --glob=heads/subspace': 

	compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace"


ok 6 - rev-parse --glob=heads/subspace

checking known breakage of 6018.7 'rev-parse accepts --glob as detached option': 

	compare rev-parse "subspace/one subspace/two" "--glob heads/subspace"


fatal: ambiguous argument 'heads/subspace': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
not ok 7 - rev-parse accepts --glob as detached option # TODO known breakage

checking known breakage of 6018.8 'rev-parse is not confused by option-like glob': 

	compare rev-parse "main" "--glob --symbolic main"


--- expected	2022-12-28 07:56:26.623908733 +0000
+++ actual	2022-12-28 07:56:26.643909467 +0000
@@ -1 +1,2 @@
-88fe3d283ae350159b6dcc1f45481c8fa40ad3d8
+--glob
+main
not ok 8 - rev-parse is not confused by option-like glob # TODO known breakage

expecting success of 6018.9 'rev-parse --branches=subspace/*': 

	compare rev-parse "subspace/one subspace/two" "--branches=subspace/*"


ok 9 - rev-parse --branches=subspace/*

expecting success of 6018.10 'rev-parse --branches=subspace/': 

	compare rev-parse "subspace/one subspace/two" "--branches=subspace/"


ok 10 - rev-parse --branches=subspace/

expecting success of 6018.11 'rev-parse --branches=subspace': 

	compare rev-parse "subspace/one subspace/two" "--branches=subspace"


ok 11 - rev-parse --branches=subspace

expecting success of 6018.12 'rev-parse --glob=heads/subspace/* --glob=heads/other/*': 

	compare rev-parse "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"


ok 12 - rev-parse --glob=heads/subspace/* --glob=heads/other/*

expecting success of 6018.13 'rev-parse --glob=heads/someref/* main': 

	compare rev-parse "main" "--glob=heads/someref/* main"


ok 13 - rev-parse --glob=heads/someref/* main

expecting success of 6018.14 'rev-parse --glob=heads/*': 

	compare rev-parse "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"


ok 14 - rev-parse --glob=heads/*

expecting success of 6018.15 'rev-parse --tags=foo': 

	compare rev-parse "foo/bar" "--tags=foo"


ok 15 - rev-parse --tags=foo

expecting success of 6018.16 'rev-parse --remotes=foo': 

	compare rev-parse "foo/baz" "--remotes=foo"


ok 16 - rev-parse --remotes=foo

expecting success of 6018.17 'rev-parse --exclude with --branches': 
	compare rev-parse "--exclude=*/* --branches" "main someref subspace-x"

ok 17 - rev-parse --exclude with --branches

expecting success of 6018.18 'rev-parse --exclude with --all': 
	compare rev-parse "--exclude=refs/remotes/* --all" "--branches --tags"

ok 18 - rev-parse --exclude with --all

expecting success of 6018.19 'rev-parse accumulates multiple --exclude': 
	compare rev-parse "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches

ok 19 - rev-parse accumulates multiple --exclude

expecting success of 6018.20 'rev-parse --branches clears --exclude': 
	compare rev-parse "--exclude=* --branches --branches" "--branches"

ok 20 - rev-parse --branches clears --exclude

expecting success of 6018.21 'rev-parse --tags clears --exclude': 
	compare rev-parse "--exclude=* --tags --tags" "--tags"

ok 21 - rev-parse --tags clears --exclude

expecting success of 6018.22 'rev-parse --all clears --exclude': 
	compare rev-parse "--exclude=* --all --all" "--all"

ok 22 - rev-parse --all clears --exclude

expecting success of 6018.23 'rev-parse --exclude=glob with --branches=glob': 
	compare rev-parse "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"

ok 23 - rev-parse --exclude=glob with --branches=glob

expecting success of 6018.24 'rev-parse --exclude=glob with --tags=glob': 
	compare rev-parse "--exclude=qux/? --tags=qux/*" "qux/one qux/two"

ok 24 - rev-parse --exclude=glob with --tags=glob

expecting success of 6018.25 'rev-parse --exclude=glob with --remotes=glob': 
	compare rev-parse "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"

ok 25 - rev-parse --exclude=glob with --remotes=glob

expecting success of 6018.26 'rev-parse --exclude=ref with --branches=glob': 
	compare rev-parse "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"

ok 26 - rev-parse --exclude=ref with --branches=glob

expecting success of 6018.27 'rev-parse --exclude=ref with --tags=glob': 
	compare rev-parse "--exclude=qux/x --tags=qux/*" "qux/one qux/two"

ok 27 - rev-parse --exclude=ref with --tags=glob

expecting success of 6018.28 'rev-parse --exclude=ref with --remotes=glob': 
	compare rev-parse "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"

ok 28 - rev-parse --exclude=ref with --remotes=glob

expecting success of 6018.29 'rev-parse --exclude-hidden=receive with --all': 
		compare "-c transfer.hideRefs=refs/remotes/ rev-parse" "--branches --tags" "--exclude-hidden=$section --all"
	
ok 29 - rev-parse --exclude-hidden=receive with --all

expecting success of 6018.30 'rev-parse --exclude-hidden=receive with --all': 
		compare "-c transfer.hideRefs=refs/heads/subspace/ rev-parse" "--exclude=refs/heads/subspace/* --all" "--exclude-hidden=$section --all"
	
ok 30 - rev-parse --exclude-hidden=receive with --all

expecting success of 6018.31 'rev-parse --exclude-hidden=receive with --glob': 
		compare "-c transfer.hideRefs=refs/heads/subspace/ rev-parse" "--exclude=refs/heads/subspace/* --glob=refs/heads/*" "--exclude-hidden=$section --glob=refs/heads/*"
	
ok 31 - rev-parse --exclude-hidden=receive with --glob

expecting success of 6018.32 'rev-parse --exclude-hidden=receive can be passed once per pseudo-ref': 
		compare "-c transfer.hideRefs=refs/remotes/ rev-parse" "--branches --tags --branches --tags" "--exclude-hidden=$section --all --exclude-hidden=$section --all"
	
ok 32 - rev-parse --exclude-hidden=receive can be passed once per pseudo-ref

expecting success of 6018.33 'rev-parse --exclude-hidden=receive can only be passed once per pseudo-ref': 
		echo "fatal: --exclude-hidden= passed more than once" >expected &&
		test_must_fail git rev-parse --exclude-hidden=$section --exclude-hidden=$section 2>err &&
		test_cmp expected err
	
ok 33 - rev-parse --exclude-hidden=receive can only be passed once per pseudo-ref

expecting success of 6018.34 'rev-parse --exclude-hidden=receive fails with --branches': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 34 - rev-parse --exclude-hidden=receive fails with --branches

expecting success of 6018.35 'rev-parse --exclude-hidden=receive fails with --branches=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 35 - rev-parse --exclude-hidden=receive fails with --branches=pattern

expecting success of 6018.36 'rev-parse --exclude-hidden=receive fails with --tags': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 36 - rev-parse --exclude-hidden=receive fails with --tags

expecting success of 6018.37 'rev-parse --exclude-hidden=receive fails with --tags=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 37 - rev-parse --exclude-hidden=receive fails with --tags=pattern

expecting success of 6018.38 'rev-parse --exclude-hidden=receive fails with --remotes': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 38 - rev-parse --exclude-hidden=receive fails with --remotes

expecting success of 6018.39 'rev-parse --exclude-hidden=receive fails with --remotes=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 39 - rev-parse --exclude-hidden=receive fails with --remotes=pattern

expecting success of 6018.40 'rev-parse --exclude-hidden=uploadpack with --all': 
		compare "-c transfer.hideRefs=refs/remotes/ rev-parse" "--branches --tags" "--exclude-hidden=$section --all"
	
ok 40 - rev-parse --exclude-hidden=uploadpack with --all

expecting success of 6018.41 'rev-parse --exclude-hidden=uploadpack with --all': 
		compare "-c transfer.hideRefs=refs/heads/subspace/ rev-parse" "--exclude=refs/heads/subspace/* --all" "--exclude-hidden=$section --all"
	
ok 41 - rev-parse --exclude-hidden=uploadpack with --all

expecting success of 6018.42 'rev-parse --exclude-hidden=uploadpack with --glob': 
		compare "-c transfer.hideRefs=refs/heads/subspace/ rev-parse" "--exclude=refs/heads/subspace/* --glob=refs/heads/*" "--exclude-hidden=$section --glob=refs/heads/*"
	
ok 42 - rev-parse --exclude-hidden=uploadpack with --glob

expecting success of 6018.43 'rev-parse --exclude-hidden=uploadpack can be passed once per pseudo-ref': 
		compare "-c transfer.hideRefs=refs/remotes/ rev-parse" "--branches --tags --branches --tags" "--exclude-hidden=$section --all --exclude-hidden=$section --all"
	
ok 43 - rev-parse --exclude-hidden=uploadpack can be passed once per pseudo-ref

expecting success of 6018.44 'rev-parse --exclude-hidden=uploadpack can only be passed once per pseudo-ref': 
		echo "fatal: --exclude-hidden= passed more than once" >expected &&
		test_must_fail git rev-parse --exclude-hidden=$section --exclude-hidden=$section 2>err &&
		test_cmp expected err
	
ok 44 - rev-parse --exclude-hidden=uploadpack can only be passed once per pseudo-ref

expecting success of 6018.45 'rev-parse --exclude-hidden=uploadpack fails with --branches': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 45 - rev-parse --exclude-hidden=uploadpack fails with --branches

expecting success of 6018.46 'rev-parse --exclude-hidden=uploadpack fails with --branches=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 46 - rev-parse --exclude-hidden=uploadpack fails with --branches=pattern

expecting success of 6018.47 'rev-parse --exclude-hidden=uploadpack fails with --tags': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 47 - rev-parse --exclude-hidden=uploadpack fails with --tags

expecting success of 6018.48 'rev-parse --exclude-hidden=uploadpack fails with --tags=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 48 - rev-parse --exclude-hidden=uploadpack fails with --tags=pattern

expecting success of 6018.49 'rev-parse --exclude-hidden=uploadpack fails with --remotes': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
			test_cmp expected err
		
ok 49 - rev-parse --exclude-hidden=uploadpack fails with --remotes

expecting success of 6018.50 'rev-parse --exclude-hidden=uploadpack fails with --remotes=pattern': 
			echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
			test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_cmp expected err
		
ok 50 - rev-parse --exclude-hidden=uploadpack fails with --remotes=pattern

expecting success of 6018.51 'rev-list --exclude=glob with --branches=glob': 
	compare rev-list "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"

ok 51 - rev-list --exclude=glob with --branches=glob

expecting success of 6018.52 'rev-list --exclude=glob with --tags=glob': 
	compare rev-list "--exclude=qux/? --tags=qux/*" "qux/one qux/two"

ok 52 - rev-list --exclude=glob with --tags=glob

expecting success of 6018.53 'rev-list --exclude=glob with --remotes=glob': 
	compare rev-list "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"

ok 53 - rev-list --exclude=glob with --remotes=glob

expecting success of 6018.54 'rev-list --exclude=ref with --branches=glob': 
	compare rev-list "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"

ok 54 - rev-list --exclude=ref with --branches=glob

expecting success of 6018.55 'rev-list --exclude=ref with --tags=glob': 
	compare rev-list "--exclude=qux/x --tags=qux/*" "qux/one qux/two"

ok 55 - rev-list --exclude=ref with --tags=glob

expecting success of 6018.56 'rev-list --exclude=ref with --remotes=glob': 
	compare rev-list "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"

ok 56 - rev-list --exclude=ref with --remotes=glob

expecting success of 6018.57 'rev-list --glob=refs/heads/subspace/*': 

	compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/*"


ok 57 - rev-list --glob=refs/heads/subspace/*

expecting success of 6018.58 'rev-list --glob refs/heads/subspace/*': 

	compare rev-list "subspace/one subspace/two" "--glob refs/heads/subspace/*"


ok 58 - rev-list --glob refs/heads/subspace/*

expecting success of 6018.59 'rev-list not confused by option-like --glob arg': 

	compare rev-list "main" "--glob -0 main"


ok 59 - rev-list not confused by option-like --glob arg

expecting success of 6018.60 'rev-list --glob=heads/subspace/*': 

	compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/*"


ok 60 - rev-list --glob=heads/subspace/*

expecting success of 6018.61 'rev-list --glob=refs/heads/subspace/': 

	compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/"


ok 61 - rev-list --glob=refs/heads/subspace/

expecting success of 6018.62 'rev-list --glob=heads/subspace/': 

	compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/"


ok 62 - rev-list --glob=heads/subspace/

expecting success of 6018.63 'rev-list --glob=heads/subspace': 

	compare rev-list "subspace/one subspace/two" "--glob=heads/subspace"


ok 63 - rev-list --glob=heads/subspace

expecting success of 6018.64 'rev-list --branches=subspace/*': 

	compare rev-list "subspace/one subspace/two" "--branches=subspace/*"


ok 64 - rev-list --branches=subspace/*

expecting success of 6018.65 'rev-list --branches=subspace/': 

	compare rev-list "subspace/one subspace/two" "--branches=subspace/"


ok 65 - rev-list --branches=subspace/

expecting success of 6018.66 'rev-list --branches=subspace': 

	compare rev-list "subspace/one subspace/two" "--branches=subspace"


ok 66 - rev-list --branches=subspace

expecting success of 6018.67 'rev-list --branches': 

	compare rev-list "main subspace-x someref other/three subspace/one subspace/two" "--branches"


ok 67 - rev-list --branches

expecting success of 6018.68 'rev-list --glob=heads/someref/* main': 

	compare rev-list "main" "--glob=heads/someref/* main"


ok 68 - rev-list --glob=heads/someref/* main

expecting success of 6018.69 'rev-list --glob=heads/subspace/* --glob=heads/other/*': 

	compare rev-list "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"


ok 69 - rev-list --glob=heads/subspace/* --glob=heads/other/*

expecting success of 6018.70 'rev-list --glob=heads/*': 

	compare rev-list "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"


ok 70 - rev-list --glob=heads/*

expecting success of 6018.71 'rev-list --tags=foo': 

	compare rev-list "foo/bar" "--tags=foo"


ok 71 - rev-list --tags=foo

expecting success of 6018.72 'rev-list --tags': 

	compare rev-list "foo/bar qux/x qux/two qux/one" "--tags"


ok 72 - rev-list --tags

expecting success of 6018.73 'rev-list --remotes=foo': 

	compare rev-list "foo/baz" "--remotes=foo"


ok 73 - rev-list --remotes=foo

expecting success of 6018.74 'rev-list --exclude with --branches': 
	compare rev-list "--exclude=*/* --branches" "main someref subspace-x"

ok 74 - rev-list --exclude with --branches

expecting success of 6018.75 'rev-list --exclude with --all': 
	compare rev-list "--exclude=refs/remotes/* --all" "--branches --tags"

ok 75 - rev-list --exclude with --all

expecting success of 6018.76 'rev-list accumulates multiple --exclude': 
	compare rev-list "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches

ok 76 - rev-list accumulates multiple --exclude

expecting success of 6018.77 'rev-list should succeed with empty output on empty stdin': 
	git rev-list --stdin </dev/null >actual &&
	test_must_be_empty actual

ok 77 - rev-list should succeed with empty output on empty stdin

expecting success of 6018.78 'rev-list should succeed with empty output with all refs excluded': 
	git rev-list --exclude=* --all >actual &&
	test_must_be_empty actual

ok 78 - rev-list should succeed with empty output with all refs excluded

expecting success of 6018.79 'rev-list should succeed with empty output with empty --all': 
	(
		test_create_repo empty &&
		cd empty &&
		git rev-list --all >actual &&
		test_must_be_empty actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6018-rev-list-glob/empty/.git/
ok 79 - rev-list should succeed with empty output with empty --all

expecting success of 6018.80 'rev-list should succeed with empty output with empty glob': 
	git rev-list --glob=does-not-match-anything >actual &&
	test_must_be_empty actual

ok 80 - rev-list should succeed with empty output with empty glob

expecting success of 6018.81 'rev-list should succeed with empty output when ignoring missing': 
	git rev-list --ignore-missing $ZERO_OID >actual &&
	test_must_be_empty actual

ok 81 - rev-list should succeed with empty output when ignoring missing

expecting success of 6018.82 'shortlog accepts --glob/--tags/--remotes': 

	compare shortlog "subspace/one subspace/two" --branches=subspace &&
	compare shortlog \
	  "main subspace-x someref other/three subspace/one subspace/two" \
	  --branches &&
	compare shortlog main "--glob=heads/someref/* main" &&
	compare shortlog "subspace/one subspace/two other/three" \
	  "--glob=heads/subspace/* --glob=heads/other/*" &&
	compare shortlog \
	  "main other/three someref subspace-x subspace/one subspace/two" \
	  "--glob=heads/*" &&
	compare shortlog foo/bar --tags=foo &&
	compare shortlog "foo/bar qux/one qux/two qux/x" --tags &&
	compare shortlog foo/baz --remotes=foo


ok 82 - shortlog accepts --glob/--tags/--remotes

checking known breakage of 6018.83 'shortlog accepts --glob as detached option': 

	compare shortlog \
	  "main other/three someref subspace-x subspace/one subspace/two" \
	  "--glob heads/*"


error: unknown option `--glob'
usage: git shortlog [<options>] [<revision-range>] [[--] <path>...]
   or: git log --pretty=short | git shortlog [<options>]

    -c, --committer       group by committer rather than author
    -n, --numbered        sort output according to the number of commits per author
    -s, --summary         suppress commit descriptions, only provides commit count
    -e, --email           show the email address of each author
    -w[<w>[,<i1>[,<i2>]]]
                          linewrap output
    --group <field>       group by field

not ok 83 - shortlog accepts --glob as detached option # TODO known breakage

checking known breakage of 6018.84 'shortlog --glob is not confused by option-like argument': 

	compare shortlog main "--glob -e main"


error: unknown option `--glob'
usage: git shortlog [<options>] [<revision-range>] [[--] <path>...]
   or: git log --pretty=short | git shortlog [<options>]

    -c, --committer       group by committer rather than author
    -n, --numbered        sort output according to the number of commits per author
    -s, --summary         suppress commit descriptions, only provides commit count
    -e, --email           show the email address of each author
    -w[<w>[,<i1>[,<i2>]]]
                          linewrap output
    --group <field>       group by field

not ok 84 - shortlog --glob is not confused by option-like argument # TODO known breakage

# still have 4 known breakage(s)
# passed all remaining 80 test(s)
1..84
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6021-rev-list-exclude-hidden.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6021-rev-list-exclude-hidden/.git/
expecting success of 6021.1 'setup': 
	test_commit_bulk --id=commit --ref=refs/heads/branch 1 &&
	COMMIT=$(git rev-parse refs/heads/branch) &&
	test_commit_bulk --id=tag --ref=refs/tags/lightweight 1 &&
	TAG=$(git rev-parse refs/tags/lightweight) &&
	test_commit_bulk --id=hidden --ref=refs/hidden/commit 1 &&
	HIDDEN=$(git rev-parse refs/hidden/commit) &&
	test_commit_bulk --id=namespace --ref=refs/namespaces/namespace/refs/namespaced/commit 1 &&
	NAMESPACE=$(git rev-parse refs/namespaces/namespace/refs/namespaced/commit)

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        225 /        225
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        228 /        228
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        235 /        235
---------------------------------------------------------------------

ok 1 - setup

expecting success of 6021.2 'invalid section': 
	echo "fatal: unsupported section for hidden refs: unsupported" >expected &&
	test_must_fail git rev-list --exclude-hidden=unsupported 2>err &&
	test_cmp expected err

ok 2 - invalid section

expecting success of 6021.3 'receive: passed multiple times': 
		echo "fatal: --exclude-hidden= passed more than once" >expected &&
		test_must_fail git rev-list --exclude-hidden=$section --exclude-hidden=$section 2>err &&
		test_cmp expected err
	
ok 3 - receive: passed multiple times

expecting success of 6021.4 'receive: without hiddenRefs': 
		git rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 4 - receive: without hiddenRefs

expecting success of 6021.5 'receive: hidden via transfer.hideRefs': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 5 - receive: hidden via transfer.hideRefs

expecting success of 6021.6 'receive: hidden via receive.hideRefs': 
		git -c $section.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 6 - receive: hidden via receive.hideRefs

expecting success of 6021.7 'receive: respects both transfer.hideRefs and receive.hideRefs': 
		git -c transfer.hideRefs=refs/tags/ -c $section.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$COMMIT
		EOF
		test_cmp expected out
	
ok 7 - receive: respects both transfer.hideRefs and receive.hideRefs

expecting success of 6021.8 'receive: negation without hidden refs marks everything as uninteresting': 
		git rev-list --all --exclude-hidden=$section --not --all >out &&
		test_must_be_empty out
	
ok 8 - receive: negation without hidden refs marks everything as uninteresting

expecting success of 6021.9 'receive: negation with hidden refs marks them as interesting': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --all --exclude-hidden=$section --not --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		EOF
		test_cmp expected out
	
ok 9 - receive: negation with hidden refs marks them as interesting

expecting success of 6021.10 'receive: hidden refs and excludes work together': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude=refs/tags/* --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$COMMIT
		EOF
		test_cmp expected out
	
ok 10 - receive: hidden refs and excludes work together

expecting success of 6021.11 'receive: excluded hidden refs get reset': 
		git -c transfer.hideRefs=refs/ rev-list --exclude-hidden=$section --all --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 11 - receive: excluded hidden refs get reset

expecting success of 6021.12 'receive: excluded hidden refs can be used with multiple pseudo-refs': 
		git -c transfer.hideRefs=refs/ rev-list --exclude-hidden=$section --all --exclude-hidden=$section --all >out &&
		test_must_be_empty out
	
ok 12 - receive: excluded hidden refs can be used with multiple pseudo-refs

expecting success of 6021.13 'receive: works with --glob': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --glob=refs/h* >out &&
		cat >expected <<-EOF &&
		$COMMIT
		EOF
		test_cmp expected out
	
ok 13 - receive: works with --glob

expecting success of 6021.14 'receive: operates on stripped refs by default': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=refs/namespaced/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 14 - receive: operates on stripped refs by default

expecting success of 6021.15 'receive: does not hide namespace by default': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=refs/namespaces/namespace/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 15 - receive: does not hide namespace by default

expecting success of 6021.16 'receive: can operate on unstripped refs': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=^refs/namespaces/namespace/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 16 - receive: can operate on unstripped refs

expecting success of 6021.17 'receive: fails with --remotes': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --remotes
ok 17 - receive: fails with --remotes

expecting success of 6021.18 'receive: fails with --remotes=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --remotes
ok 18 - receive: fails with --remotes=pattern

expecting success of 6021.19 'receive: fails with --branches': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --branches
ok 19 - receive: fails with --branches

expecting success of 6021.20 'receive: fails with --branches=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --branches
ok 20 - receive: fails with --branches=pattern

expecting success of 6021.21 'receive: fails with --tags': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --tags
ok 21 - receive: fails with --tags

expecting success of 6021.22 'receive: fails with --tags=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --tags
ok 22 - receive: fails with --tags=pattern

expecting success of 6021.23 'uploadpack: passed multiple times': 
		echo "fatal: --exclude-hidden= passed more than once" >expected &&
		test_must_fail git rev-list --exclude-hidden=$section --exclude-hidden=$section 2>err &&
		test_cmp expected err
	
ok 23 - uploadpack: passed multiple times

expecting success of 6021.24 'uploadpack: without hiddenRefs': 
		git rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 24 - uploadpack: without hiddenRefs

expecting success of 6021.25 'uploadpack: hidden via transfer.hideRefs': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 25 - uploadpack: hidden via transfer.hideRefs

expecting success of 6021.26 'uploadpack: hidden via uploadpack.hideRefs': 
		git -c $section.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 26 - uploadpack: hidden via uploadpack.hideRefs

expecting success of 6021.27 'uploadpack: respects both transfer.hideRefs and uploadpack.hideRefs': 
		git -c transfer.hideRefs=refs/tags/ -c $section.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$COMMIT
		EOF
		test_cmp expected out
	
ok 27 - uploadpack: respects both transfer.hideRefs and uploadpack.hideRefs

expecting success of 6021.28 'uploadpack: negation without hidden refs marks everything as uninteresting': 
		git rev-list --all --exclude-hidden=$section --not --all >out &&
		test_must_be_empty out
	
ok 28 - uploadpack: negation without hidden refs marks everything as uninteresting

expecting success of 6021.29 'uploadpack: negation with hidden refs marks them as interesting': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --all --exclude-hidden=$section --not --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		EOF
		test_cmp expected out
	
ok 29 - uploadpack: negation with hidden refs marks them as interesting

expecting success of 6021.30 'uploadpack: hidden refs and excludes work together': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude=refs/tags/* --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$COMMIT
		EOF
		test_cmp expected out
	
ok 30 - uploadpack: hidden refs and excludes work together

expecting success of 6021.31 'uploadpack: excluded hidden refs get reset': 
		git -c transfer.hideRefs=refs/ rev-list --exclude-hidden=$section --all --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 31 - uploadpack: excluded hidden refs get reset

expecting success of 6021.32 'uploadpack: excluded hidden refs can be used with multiple pseudo-refs': 
		git -c transfer.hideRefs=refs/ rev-list --exclude-hidden=$section --all --exclude-hidden=$section --all >out &&
		test_must_be_empty out
	
ok 32 - uploadpack: excluded hidden refs can be used with multiple pseudo-refs

expecting success of 6021.33 'uploadpack: works with --glob': 
		git -c transfer.hideRefs=refs/hidden/ rev-list --exclude-hidden=$section --glob=refs/h* >out &&
		cat >expected <<-EOF &&
		$COMMIT
		EOF
		test_cmp expected out
	
ok 33 - uploadpack: works with --glob

expecting success of 6021.34 'uploadpack: operates on stripped refs by default': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=refs/namespaced/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 34 - uploadpack: operates on stripped refs by default

expecting success of 6021.35 'uploadpack: does not hide namespace by default': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=refs/namespaces/namespace/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$NAMESPACE
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 35 - uploadpack: does not hide namespace by default

expecting success of 6021.36 'uploadpack: can operate on unstripped refs': 
		GIT_NAMESPACE=namespace git -c transfer.hideRefs=^refs/namespaces/namespace/ rev-list --exclude-hidden=$section --all >out &&
		cat >expected <<-EOF &&
		$HIDDEN
		$TAG
		$COMMIT
		EOF
		test_cmp expected out
	
ok 36 - uploadpack: can operate on unstripped refs

expecting success of 6021.37 'uploadpack: fails with --remotes': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --remotes
ok 37 - uploadpack: fails with --remotes

expecting success of 6021.38 'uploadpack: fails with --remotes=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --remotes
ok 38 - uploadpack: fails with --remotes=pattern

expecting success of 6021.39 'uploadpack: fails with --branches': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --branches
ok 39 - uploadpack: fails with --branches

expecting success of 6021.40 'uploadpack: fails with --branches=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --branches
ok 40 - uploadpack: fails with --branches=pattern

expecting success of 6021.41 'uploadpack: fails with --tags': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --tags
ok 41 - uploadpack: fails with --tags

expecting success of 6021.42 'uploadpack: fails with --tags=pattern': 
			test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
			test_i18ngrep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
		
error: --exclude-hidden cannot be used together with --tags
ok 42 - uploadpack: fails with --tags=pattern

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6040-tracking-info.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6040-tracking-info/.git/
expecting success of 6040.1 'setup': 
	advance a &&
	advance b &&
	advance c &&
	git clone . test &&
	(
		cd test &&
		git checkout -b b1 origin &&
		git reset --hard HEAD^ &&
		advance d &&
		git checkout -b b2 origin &&
		git reset --hard b1 &&
		git checkout -b b3 origin &&
		git reset --hard HEAD^ &&
		git checkout -b b4 origin &&
		advance e &&
		advance f &&
		git checkout -b brokenbase origin &&
		git checkout -b b5 --track brokenbase &&
		advance g &&
		git branch -d brokenbase &&
		git checkout -b b6 origin
	) &&
	git checkout -b follower --track main &&
	advance h

[main (root-commit) cc33353] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main 7e1cf2d] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
[main ac11e55] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
Cloning into 'test'...
done.
Switched to a new branch 'b1'
branch 'b1' set up to track 'origin/main'.
HEAD is now at 7e1cf2d b
[b1 afc0d66] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d
Switched to a new branch 'b2'
branch 'b2' set up to track 'origin/main'.
HEAD is now at afc0d66 d
Switched to a new branch 'b3'
branch 'b3' set up to track 'origin/main'.
HEAD is now at 7e1cf2d b
Switched to a new branch 'b4'
branch 'b4' set up to track 'origin/main'.
[b4 ec9b031] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e
[b4 59ecd1d] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f
Switched to a new branch 'brokenbase'
branch 'brokenbase' set up to track 'origin/main'.
Switched to a new branch 'b5'
branch 'b5' set up to track 'brokenbase'.
[b5 d8d0202] g
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g
Deleted branch brokenbase (was ac11e55).
Switched to a new branch 'b6'
branch 'b6' set up to track 'origin/main'.
Switched to a new branch 'follower'
branch 'follower' set up to track 'main'.
[follower 21abfbd] h
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 h
ok 1 - setup

expecting success of 6040.2 'branch -v': 
	(
		cd test &&
		git branch -v
	) |
	sed -n -e "$t6040_script" >actual &&
	test_cmp expect actual

ok 2 - branch -v

expecting success of 6040.3 'branch -vv': 
	(
		cd test &&
		git branch -vv
	) |
	sed -n -e "$t6040_script" >actual &&
	test_cmp expect actual

ok 3 - branch -vv

expecting success of 6040.4 'checkout (diverged from upstream)': 
	(
		cd test && git checkout b1
	) >actual &&
	test_i18ngrep "have 1 and 1 different" actual

Switched to branch 'b1'
and have 1 and 1 different commits each, respectively.
ok 4 - checkout (diverged from upstream)

expecting success of 6040.5 'checkout with local tracked branch': 
	git checkout main &&
	git checkout follower >actual &&
	test_i18ngrep "is ahead of" actual

Switched to branch 'main'
Switched to branch 'follower'
Your branch is ahead of 'main' by 1 commit.
ok 5 - checkout with local tracked branch

expecting success of 6040.6 'checkout (upstream is gone)': 
	(
		cd test &&
		git checkout b5
	) >actual &&
	test_i18ngrep "is based on .*, but the upstream is gone." actual

Switched to branch 'b5'
Your branch is based on 'brokenbase', but the upstream is gone.
ok 6 - checkout (upstream is gone)

expecting success of 6040.7 'checkout (up-to-date with upstream)': 
	(
		cd test && git checkout b6
	) >actual &&
	test_i18ngrep "Your branch is up to date with .origin/main" actual

Switched to branch 'b6'
Your branch is up to date with 'origin/main'.
ok 7 - checkout (up-to-date with upstream)

expecting success of 6040.8 'status (diverged from upstream)': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		# reports nothing to commit
		test_must_fail git commit --dry-run
	) >actual &&
	test_i18ngrep "have 1 and 1 different" actual

Switched to branch 'b1'
and have 1 and 1 different commits each, respectively.
ok 8 - status (diverged from upstream)

expecting success of 6040.9 'status (upstream is gone)': 
	(
		cd test &&
		git checkout b5 >/dev/null &&
		# reports nothing to commit
		test_must_fail git commit --dry-run
	) >actual &&
	test_i18ngrep "is based on .*, but the upstream is gone." actual

Switched to branch 'b5'
Your branch is based on 'brokenbase', but the upstream is gone.
ok 9 - status (upstream is gone)

expecting success of 6040.10 'status (up-to-date with upstream)': 
	(
		cd test &&
		git checkout b6 >/dev/null &&
		# reports nothing to commit
		test_must_fail git commit --dry-run
	) >actual &&
	test_i18ngrep "Your branch is up to date with .origin/main" actual

Switched to branch 'b6'
Your branch is up to date with 'origin/main'.
ok 10 - status (up-to-date with upstream)

expecting success of 6040.11 'status -s -b (diverged from upstream)': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_cmp expect actual

Switched to branch 'b1'
ok 11 - status -s -b (diverged from upstream)

expecting success of 6040.12 'status -s -b --no-ahead-behind (diverged from upstream)': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git status -s -b --no-ahead-behind | head -1
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 12 - status -s -b --no-ahead-behind (diverged from upstream)

expecting success of 6040.13 'status.aheadbehind=false status -s -b (diverged from upstream)': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git -c status.aheadbehind=false status -s -b | head -1
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 13 - status.aheadbehind=false status -s -b (diverged from upstream)

expecting success of 6040.14 'status --long --branch': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git status --long -b | head -3
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 14 - status --long --branch

expecting success of 6040.15 'status --long --branch': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git -c status.aheadbehind=true status --long -b | head -3
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 15 - status --long --branch

expecting success of 6040.16 'status --long --branch --no-ahead-behind': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git status --long -b --no-ahead-behind | head -2
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 16 - status --long --branch --no-ahead-behind

expecting success of 6040.17 'status.aheadbehind=false status --long --branch': 
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git -c status.aheadbehind=false status --long -b | head -2
	) >actual &&
	test_cmp expect actual

Already on 'b1'
ok 17 - status.aheadbehind=false status --long --branch

expecting success of 6040.18 'status -s -b (upstream is gone)': 
	(
		cd test &&
		git checkout b5 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_cmp expect actual

Switched to branch 'b5'
ok 18 - status -s -b (upstream is gone)

expecting success of 6040.19 'status -s -b (up-to-date with upstream)': 
	(
		cd test &&
		git checkout b6 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_cmp expect actual

Switched to branch 'b6'
ok 19 - status -s -b (up-to-date with upstream)

expecting success of 6040.20 'fail to track lightweight tags': 
	git checkout main &&
	git tag light &&
	test_must_fail git branch --track lighttrack light >actual &&
	test_i18ngrep ! "set up to track" actual &&
	test_must_fail git checkout lighttrack

Switched to branch 'main'
fatal: cannot set up tracking information; starting point 'light' is not a branch
error: pathspec 'lighttrack' did not match any file(s) known to git
ok 20 - fail to track lightweight tags

expecting success of 6040.21 'fail to track annotated tags': 
	git checkout main &&
	git tag -m heavy heavy &&
	test_must_fail git branch --track heavytrack heavy >actual &&
	test_i18ngrep ! "set up to track" actual &&
	test_must_fail git checkout heavytrack

Already on 'main'
fatal: cannot set up tracking information; starting point 'heavy' is not a branch
error: pathspec 'heavytrack' did not match any file(s) known to git
ok 21 - fail to track annotated tags

expecting success of 6040.22 '--set-upstream-to does not change branch': 
	git branch from-main main &&
	git branch --set-upstream-to main from-main &&
	git branch from-topic_2 main &&
	test_must_fail git config branch.from-topic_2.merge > actual &&
	git rev-list from-topic_2 &&
	git update-ref refs/heads/from-topic_2 from-topic_2^ &&
	git rev-parse from-topic_2 >expect2 &&
	git branch --set-upstream-to main from-topic_2 &&
	git config branch.from-main.merge > actual &&
	git rev-parse from-topic_2 >actual2 &&
	grep -q "^refs/heads/main$" actual &&
	cmp expect2 actual2

branch 'from-main' set up to track 'main'.
ac11e552c8e799a6af00e91a64888439b699d9fd
7e1cf2dc889e845623128125195d11533d8aef5e
cc33353f1c71fb0fa9b4671a6a0a8539ad9ecd0a
branch 'from-topic_2' set up to track 'main'.
ok 22 - --set-upstream-to does not change branch

expecting success of 6040.23 '--set-upstream-to @{-1}': 
	git checkout follower &&
	git checkout from-topic_2 &&
	git config branch.from-topic_2.merge > expect2 &&
	git branch --set-upstream-to @{-1} from-main &&
	git config branch.from-main.merge > actual &&
	git config branch.from-topic_2.merge > actual2 &&
	git branch --set-upstream-to follower from-main &&
	git config branch.from-main.merge > expect &&
	test_cmp expect2 actual2 &&
	test_cmp expect actual

Switched to branch 'follower'
Your branch is ahead of 'main' by 1 commit.
  (use "git push" to publish your local commits)
Switched to branch 'from-topic_2'
Your branch is behind 'main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
branch 'from-main' set up to track 'follower'.
branch 'from-main' set up to track 'follower'.
ok 23 - --set-upstream-to @{-1}

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6020-bundle-misc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/.git/
expecting success of 6020.1 'setup': 
	# Try to make a stable fixed width for abbreviated commit ID,
	# this fixed-width oid will be replaced with "<OID>".
	git config core.abbrev 7 &&

	# branch main: commit A & B
	test_commit_setvar A "Commit A" main.txt &&
	test_commit_setvar B "Commit B" main.txt &&

	# branch topic/1: commit C & D, refs/pull/1/head
	git checkout -b topic/1 &&
	test_commit_setvar C "Commit C" topic-1.txt &&
	test_commit_setvar D "Commit D" topic-1.txt &&
	git update-ref refs/pull/1/head HEAD &&

	# branch topic/1: commit E, tag v1
	git checkout main &&
	test_commit_setvar E "Commit E" main.txt &&
	test_commit_setvar --tag TAG1 v1 &&

	# branch topic/2: commit F & G, refs/pull/2/head
	git checkout -b topic/2 &&
	test_commit_setvar F "Commit F" topic-2.txt &&
	test_commit_setvar G "Commit G" topic-2.txt &&
	git update-ref refs/pull/2/head HEAD &&
	test_commit_setvar H "Commit H" topic-2.txt &&

	# branch main: merge commit I & J
	git checkout main &&
	test_commit_setvar --merge I topic/1 "Merge commit I" &&
	test_commit_setvar --merge J refs/pull/2/head "Merge commit J" &&

	# branch main: commit K
	git checkout main &&
	test_commit_setvar K "Commit K" main.txt &&

	# branch release:
	git checkout -b release &&
	test_commit_setvar L "Commit L" release.txt &&
	test_commit_setvar M "Commit M" release.txt &&
	test_commit_setvar --tag TAG2 v2 &&
	test_commit_setvar N "Commit N" release.txt &&
	test_commit_setvar --tag TAG3 v3 &&

	# branch main: merge commit O, commit P
	git checkout main &&
	test_commit_setvar --merge O tags/v2 "Merge commit O" &&
	test_commit_setvar P "Commit P" main.txt

[main (root-commit) ccd06f3] Commit A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.txt
[main 4c9e3a4] Commit B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'topic/1'
[topic/1 7bebff0] Commit C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 topic-1.txt
[topic/1 c01a682] Commit D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
[main 7caaa10] Commit E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'topic/2'
[topic/2 065b216] Commit F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 topic-2.txt
[topic/2 2ead555] Commit G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[topic/2 d1a87a2] Commit H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Merge made by the 'ort' strategy.
 topic-1.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 topic-1.txt
Merge made by the 'ort' strategy.
 topic-2.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 topic-2.txt
Already on 'main'
[main 81bc341] Commit K
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'release'
[release 5e98a21] Commit L
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 release.txt
[release 961846a] Commit M
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[release 75dc67d] Commit N
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Merge made by the 'ort' strategy.
 release.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 release.txt
[main da43db6] Commit P
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6020.2 'create bundle from special rev: main^!': 
	git bundle create special-rev.bdl "main^!" &&

	git bundle list-heads special-rev.bdl |
		make_user_friendly_and_stable_output >actual &&
	cat >expect <<-\EOF &&
	<COMMIT-P> refs/heads/main
	EOF
	test_cmp expect actual &&

	git bundle verify special-rev.bdl |
		make_user_friendly_and_stable_output >actual &&
	format_and_save_expect <<-EOF &&
	The bundle contains this ref:
	<COMMIT-P> refs/heads/main
	The bundle requires this ref:
	<COMMIT-O> Z
	$HASH_MESSAGE
	EOF
	test_cmp expect actual &&

	test_bundle_object_count special-rev.bdl 3

special-rev.bdl is okay
7696cea8d97b544e04fc553088e850feaa4d4a6a
ok 2 - create bundle from special rev: main^!

expecting success of 6020.3 'create bundle with --max-count option': 
	git bundle create max-count.bdl --max-count 1 \
		main \
		"^release" \
		refs/tags/v1 \
		refs/pull/1/head \
		refs/pull/2/head &&

	git bundle verify max-count.bdl |
		make_user_friendly_and_stable_output >actual &&
	format_and_save_expect <<-EOF &&
	The bundle contains these 2 refs:
	<COMMIT-P> refs/heads/main
	<TAG-1> refs/tags/v1
	The bundle requires this ref:
	<COMMIT-O> Z
	$HASH_MESSAGE
	EOF
	test_cmp expect actual &&

	test_bundle_object_count max-count.bdl 4

max-count.bdl is okay
9c7321ed0aaaf5a03665dec65aa9d42371c74f66
ok 3 - create bundle with --max-count option

expecting success of 6020.4 'create bundle with --since option': 
	git log -1 --pretty="%ad" $M >actual &&
	cat >expect <<-\EOF &&
	Thu Apr 7 15:26:13 2005 -0700
	EOF
	test_cmp expect actual &&

	git bundle create since.bdl \
		--since "Thu Apr 7 15:27:00 2005 -0700" \
		--all &&

	git bundle verify since.bdl |
		make_user_friendly_and_stable_output >actual &&
	format_and_save_expect <<-EOF &&
	The bundle contains these 5 refs:
	<COMMIT-P> refs/heads/main
	<COMMIT-N> refs/heads/release
	<TAG-2> refs/tags/v2
	<TAG-3> refs/tags/v3
	<COMMIT-P> HEAD
	The bundle requires these 2 refs:
	<COMMIT-M> Z
	<COMMIT-K> Z
	$HASH_MESSAGE
	EOF
	test_cmp expect actual &&

	test_bundle_object_count --thin since.bdl 13

warning: ref 'refs/heads/topic/1' is excluded by the rev-list options
warning: ref 'refs/heads/topic/2' is excluded by the rev-list options
warning: ref 'refs/pull/1/head' is excluded by the rev-list options
warning: ref 'refs/pull/2/head' is excluded by the rev-list options
since.bdl is okay
pack	28760d9eafb6db46ad14a1e184216684f150f058
ok 4 - create bundle with --since option

expecting success of 6020.5 'create bundle 1 - no prerequisites': 
	# create bundle from args
	git bundle create 1.bdl topic/1 topic/2 &&

	# create bundle from stdin
	cat >input <<-\EOF &&
	topic/1
	topic/2
	EOF
	git bundle create stdin-1.bdl --stdin <input &&

	format_and_save_expect <<-EOF &&
	The bundle contains these 2 refs:
	<COMMIT-D> refs/heads/topic/1
	<COMMIT-H> refs/heads/topic/2
	The bundle records a complete history.
	$HASH_MESSAGE
	EOF

	# verify bundle, which has no prerequisites
	git bundle verify 1.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	git bundle verify stdin-1.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	test_bundle_object_count       1.bdl 24 &&
	test_bundle_object_count stdin-1.bdl 24

1.bdl is okay
stdin-1.bdl is okay
fc1b47c4364c691cacf21c7812c14f9fe0810f9d
fc1b47c4364c691cacf21c7812c14f9fe0810f9d
ok 5 - create bundle 1 - no prerequisites

expecting success of 6020.6 'create bundle 2 - has prerequisites': 
	# create bundle from args
	git bundle create 2.bdl \
		--ignore-missing \
		^topic/deleted \
		^$D \
		^topic/2 \
		release &&

	# create bundle from stdin
	# input has a non-exist reference: "topic/deleted"
	cat >input <<-EOF &&
	^topic/deleted
	^$D
	^topic/2
	EOF
	git bundle create stdin-2.bdl \
		--ignore-missing \
		--stdin \
		release <input &&

	format_and_save_expect <<-EOF &&
	The bundle contains this ref:
	<COMMIT-N> refs/heads/release
	The bundle requires these 3 refs:
	<COMMIT-D> Z
	<COMMIT-E> Z
	<COMMIT-G> Z
	$HASH_MESSAGE
	EOF

	git bundle verify 2.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	git bundle verify stdin-2.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	test_bundle_object_count       2.bdl 16 &&
	test_bundle_object_count stdin-2.bdl 16

2.bdl is okay
stdin-2.bdl is okay
67e31c4a052133ac6423670d40df061e5e8d6402
67e31c4a052133ac6423670d40df061e5e8d6402
ok 6 - create bundle 2 - has prerequisites

expecting success of 6020.7 'fail to verify bundle without prerequisites': 
	git init --bare test1.git &&

	format_and_save_expect <<-\EOF &&
	error: Repository lacks these prerequisite commits:
	error: <COMMIT-D> Z
	error: <COMMIT-E> Z
	error: <COMMIT-G> Z
	EOF

	test_must_fail git -C test1.git bundle verify ../2.bdl 2>&1 |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	test_must_fail git -C test1.git bundle verify ../stdin-2.bdl 2>&1 |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/test1.git/
ok 7 - fail to verify bundle without prerequisites

expecting success of 6020.8 'create bundle 3 - two refs, same object': 
	# create bundle from args
	git bundle create --version=3 3.bdl \
		^release \
		^topic/1 \
		^topic/2 \
		main \
		HEAD &&

	# create bundle from stdin
	cat >input <<-\EOF &&
	^release
	^topic/1
	^topic/2
	EOF
	git bundle create --version=3 stdin-3.bdl \
		--stdin \
		main HEAD <input &&

	format_and_save_expect <<-EOF &&
	The bundle contains these 2 refs:
	<COMMIT-P> refs/heads/main
	<COMMIT-P> HEAD
	The bundle requires these 2 refs:
	<COMMIT-M> Z
	<COMMIT-K> Z
	$HASH_MESSAGE
	EOF

	git bundle verify 3.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	git bundle verify stdin-3.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	test_bundle_object_count       3.bdl 4 &&
	test_bundle_object_count stdin-3.bdl 4

3.bdl is okay
stdin-3.bdl is okay
26f60185a0e22eee88717e14f5771ff9294abe28
26f60185a0e22eee88717e14f5771ff9294abe28
ok 8 - create bundle 3 - two refs, same object

expecting success of 6020.9 'create bundle 4 - with tags': 
	# create bundle from args
	git bundle create 4.bdl \
		^main \
		^release \
		^topic/1 \
		^topic/2 \
		--all &&

	# create bundle from stdin
	cat >input <<-\EOF &&
	^main
	^release
	^topic/1
	^topic/2
	EOF
	git bundle create stdin-4.bdl \
		--ignore-missing \
		--stdin \
		--all <input &&

	cat >expect <<-EOF &&
	The bundle contains these 3 refs:
	<TAG-1> refs/tags/v1
	<TAG-2> refs/tags/v2
	<TAG-3> refs/tags/v3
	The bundle records a complete history.
	$HASH_MESSAGE
	EOF

	git bundle verify 4.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	git bundle verify stdin-4.bdl |
		make_user_friendly_and_stable_output >actual &&
	test_cmp expect actual &&

	test_bundle_object_count       4.bdl 3 &&
	test_bundle_object_count stdin-4.bdl 3

4.bdl is okay
stdin-4.bdl is okay
7892bf753220726226756d43102d34efa3c0cf30
7892bf753220726226756d43102d34efa3c0cf30
ok 9 - create bundle 4 - with tags

expecting success of 6020.10 'clone from bundle': 
	git clone --mirror 1.bdl mirror.git &&
	git -C mirror.git show-ref |
		make_user_friendly_and_stable_output >actual &&
	cat >expect <<-\EOF &&
	<COMMIT-D> refs/heads/topic/1
	<COMMIT-H> refs/heads/topic/2
	EOF
	test_cmp expect actual &&

	git -C mirror.git fetch ../2.bdl "+refs/*:refs/*" &&
	git -C mirror.git show-ref |
		make_user_friendly_and_stable_output >actual &&
	cat >expect <<-\EOF &&
	<COMMIT-N> refs/heads/release
	<COMMIT-D> refs/heads/topic/1
	<COMMIT-H> refs/heads/topic/2
	EOF
	test_cmp expect actual &&

	git -C mirror.git fetch ../3.bdl "+refs/*:refs/*" &&
	git -C mirror.git show-ref |
		make_user_friendly_and_stable_output >actual &&
	cat >expect <<-\EOF &&
	<COMMIT-P> refs/heads/main
	<COMMIT-N> refs/heads/release
	<COMMIT-D> refs/heads/topic/1
	<COMMIT-H> refs/heads/topic/2
	EOF
	test_cmp expect actual &&

	git -C mirror.git fetch ../4.bdl "+refs/*:refs/*" &&
	git -C mirror.git show-ref |
		make_user_friendly_and_stable_output >actual &&
	cat >expect <<-\EOF &&
	<COMMIT-P> refs/heads/main
	<COMMIT-N> refs/heads/release
	<COMMIT-D> refs/heads/topic/1
	<COMMIT-H> refs/heads/topic/2
	<TAG-1> refs/tags/v1
	<TAG-2> refs/tags/v2
	<TAG-3> refs/tags/v3
	EOF
	test_cmp expect actual

Cloning into bare repository 'mirror.git'...
From ../2.bdl
 * [new branch]      release    -> release
From ../3.bdl
 * [new branch]      main       -> main
From ../4.bdl
 * [new tag]         v3         -> v3
 * [new tag]         v2         -> v2
 * [new tag]         v1         -> v1
ok 10 - clone from bundle

expecting success of 6020.11 'unfiltered bundle with --objects': 
	git bundle create all-objects.bdl \
		--all --objects &&
	git bundle create all.bdl \
		--all &&

	# Compare the headers of these files.
	sed -n -e "/^$/q" -e "p" all.bdl >expect &&
	sed -n -e "/^$/q" -e "p" all-objects.bdl >actual &&
	test_cmp expect actual

ok 11 - unfiltered bundle with --objects

expecting success of 6020.12 'filtered bundle: blob:none': 
		test_when_finished rm -rf .git/objects/pack cloned unbundled &&
		git bundle create partial.bdl \
			--all \
			--filter=$filter &&

		git bundle verify partial.bdl >unfiltered &&
		make_user_friendly_and_stable_output <unfiltered >actual &&

		cat >expect <<-EOF &&
		The bundle contains these 10 refs:
		<COMMIT-P> refs/heads/main
		<COMMIT-N> refs/heads/release
		<COMMIT-D> refs/heads/topic/1
		<COMMIT-H> refs/heads/topic/2
		<COMMIT-D> refs/pull/1/head
		<COMMIT-G> refs/pull/2/head
		<TAG-1> refs/tags/v1
		<TAG-2> refs/tags/v2
		<TAG-3> refs/tags/v3
		<COMMIT-P> HEAD
		The bundle records a complete history.
		$HASH_MESSAGE
		The bundle uses this filter: $filter
		EOF
		test_cmp expect actual &&

		test_config uploadpack.allowfilter 1 &&
		test_config uploadpack.allowanysha1inwant 1 &&
		git clone --no-local --filter=$filter --bare "file://$(pwd)" cloned &&

		git init unbundled &&
		git -C unbundled bundle unbundle ../partial.bdl >ref-list.txt &&
		ls unbundled/.git/objects/pack/pack-*.promisor >promisor &&
		test_line_count = 1 promisor &&

		# Count the same number of reachable objects.
		reflist=$(git for-each-ref --format="%(objectname)") &&
		git rev-list --objects --filter=$filter --missing=allow-any \
			$reflist >expect &&
		for repo in cloned unbundled
		do
			git -C $repo rev-list --objects --missing=allow-any \
				$reflist >actual &&
			test_cmp expect actual || return 1
		done
	
partial.bdl is okay
Cloning into bare repository 'cloned'...
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/unbundled/.git/
ok 12 - filtered bundle: blob:none

expecting success of 6020.13 'filtered bundle: tree:0': 
		test_when_finished rm -rf .git/objects/pack cloned unbundled &&
		git bundle create partial.bdl \
			--all \
			--filter=$filter &&

		git bundle verify partial.bdl >unfiltered &&
		make_user_friendly_and_stable_output <unfiltered >actual &&

		cat >expect <<-EOF &&
		The bundle contains these 10 refs:
		<COMMIT-P> refs/heads/main
		<COMMIT-N> refs/heads/release
		<COMMIT-D> refs/heads/topic/1
		<COMMIT-H> refs/heads/topic/2
		<COMMIT-D> refs/pull/1/head
		<COMMIT-G> refs/pull/2/head
		<TAG-1> refs/tags/v1
		<TAG-2> refs/tags/v2
		<TAG-3> refs/tags/v3
		<COMMIT-P> HEAD
		The bundle records a complete history.
		$HASH_MESSAGE
		The bundle uses this filter: $filter
		EOF
		test_cmp expect actual &&

		test_config uploadpack.allowfilter 1 &&
		test_config uploadpack.allowanysha1inwant 1 &&
		git clone --no-local --filter=$filter --bare "file://$(pwd)" cloned &&

		git init unbundled &&
		git -C unbundled bundle unbundle ../partial.bdl >ref-list.txt &&
		ls unbundled/.git/objects/pack/pack-*.promisor >promisor &&
		test_line_count = 1 promisor &&

		# Count the same number of reachable objects.
		reflist=$(git for-each-ref --format="%(objectname)") &&
		git rev-list --objects --filter=$filter --missing=allow-any \
			$reflist >expect &&
		for repo in cloned unbundled
		do
			git -C $repo rev-list --objects --missing=allow-any \
				$reflist >actual &&
			test_cmp expect actual || return 1
		done
	
partial.bdl is okay
Cloning into bare repository 'cloned'...
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/unbundled/.git/
ok 13 - filtered bundle: tree:0

expecting success of 6020.14 'filtered bundle: tree:1': 
		test_when_finished rm -rf .git/objects/pack cloned unbundled &&
		git bundle create partial.bdl \
			--all \
			--filter=$filter &&

		git bundle verify partial.bdl >unfiltered &&
		make_user_friendly_and_stable_output <unfiltered >actual &&

		cat >expect <<-EOF &&
		The bundle contains these 10 refs:
		<COMMIT-P> refs/heads/main
		<COMMIT-N> refs/heads/release
		<COMMIT-D> refs/heads/topic/1
		<COMMIT-H> refs/heads/topic/2
		<COMMIT-D> refs/pull/1/head
		<COMMIT-G> refs/pull/2/head
		<TAG-1> refs/tags/v1
		<TAG-2> refs/tags/v2
		<TAG-3> refs/tags/v3
		<COMMIT-P> HEAD
		The bundle records a complete history.
		$HASH_MESSAGE
		The bundle uses this filter: $filter
		EOF
		test_cmp expect actual &&

		test_config uploadpack.allowfilter 1 &&
		test_config uploadpack.allowanysha1inwant 1 &&
		git clone --no-local --filter=$filter --bare "file://$(pwd)" cloned &&

		git init unbundled &&
		git -C unbundled bundle unbundle ../partial.bdl >ref-list.txt &&
		ls unbundled/.git/objects/pack/pack-*.promisor >promisor &&
		test_line_count = 1 promisor &&

		# Count the same number of reachable objects.
		reflist=$(git for-each-ref --format="%(objectname)") &&
		git rev-list --objects --filter=$filter --missing=allow-any \
			$reflist >expect &&
		for repo in cloned unbundled
		do
			git -C $repo rev-list --objects --missing=allow-any \
				$reflist >actual &&
			test_cmp expect actual || return 1
		done
	
partial.bdl is okay
Cloning into bare repository 'cloned'...
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/unbundled/.git/
ok 14 - filtered bundle: tree:1

expecting success of 6020.15 'filtered bundle: blob:limit=100': 
		test_when_finished rm -rf .git/objects/pack cloned unbundled &&
		git bundle create partial.bdl \
			--all \
			--filter=$filter &&

		git bundle verify partial.bdl >unfiltered &&
		make_user_friendly_and_stable_output <unfiltered >actual &&

		cat >expect <<-EOF &&
		The bundle contains these 10 refs:
		<COMMIT-P> refs/heads/main
		<COMMIT-N> refs/heads/release
		<COMMIT-D> refs/heads/topic/1
		<COMMIT-H> refs/heads/topic/2
		<COMMIT-D> refs/pull/1/head
		<COMMIT-G> refs/pull/2/head
		<TAG-1> refs/tags/v1
		<TAG-2> refs/tags/v2
		<TAG-3> refs/tags/v3
		<COMMIT-P> HEAD
		The bundle records a complete history.
		$HASH_MESSAGE
		The bundle uses this filter: $filter
		EOF
		test_cmp expect actual &&

		test_config uploadpack.allowfilter 1 &&
		test_config uploadpack.allowanysha1inwant 1 &&
		git clone --no-local --filter=$filter --bare "file://$(pwd)" cloned &&

		git init unbundled &&
		git -C unbundled bundle unbundle ../partial.bdl >ref-list.txt &&
		ls unbundled/.git/objects/pack/pack-*.promisor >promisor &&
		test_line_count = 1 promisor &&

		# Count the same number of reachable objects.
		reflist=$(git for-each-ref --format="%(objectname)") &&
		git rev-list --objects --filter=$filter --missing=allow-any \
			$reflist >expect &&
		for repo in cloned unbundled
		do
			git -C $repo rev-list --objects --missing=allow-any \
				$reflist >actual &&
			test_cmp expect actual || return 1
		done
	
partial.bdl is okay
Cloning into bare repository 'cloned'...
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6020-bundle-misc/unbundled/.git/
ok 15 - filtered bundle: blob:limit=100

expecting success of 6020.16 'cloning from filtered bundle has useful error': 
	git bundle create partial.bdl \
		--all \
		--filter=blob:none &&
	test_must_fail git clone --bare partial.bdl partial 2>err &&
	grep "cannot clone from filtered bundle" err

fatal: cannot clone from filtered bundle
ok 16 - cloning from filtered bundle has useful error

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6060-merge-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6060-merge-index/.git/
expecting success of 6060.1 'setup diverging branches': 
	test_write_lines 1 2 3 4 5 6 7 8 9 10 >file &&
	git add file &&
	git commit -m base &&
	git tag base &&
	sed s/2/two/ <file >tmp &&
	mv tmp file &&
	git commit -a -m two &&
	git tag two &&
	git checkout -b other HEAD^ &&
	sed s/10/ten/ <file >tmp &&
	mv tmp file &&
	git commit -a -m ten &&
	git tag ten

[master (root-commit) 69c42a0] base
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 file
[master 6a4bad4] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'other'
[other e88ef53] ten
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup diverging branches

expecting success of 6060.2 'read-tree does not resolve content merge': 
	git read-tree -i -m base ten two &&
	echo file >expect &&
	git diff-files --name-only --diff-filter=U >unmerged &&
	test_cmp expect unmerged

ok 2 - read-tree does not resolve content merge

expecting success of 6060.3 'git merge-index git-merge-one-file resolves': 
	git merge-index git-merge-one-file -a &&
	git diff-files --name-only --diff-filter=U >unmerged &&
	test_must_be_empty unmerged &&
	test_cmp expect-merged file &&
	git cat-file blob :file >file-index &&
	test_cmp expect-merged file-index

Auto-merging file
ok 3 - git merge-index git-merge-one-file resolves

expecting success of 6060.4 'setup bare merge': 
	git clone --bare . bare.git &&
	(cd bare.git &&
	 GIT_INDEX_FILE=$PWD/merge.index &&
	 export GIT_INDEX_FILE &&
	 git read-tree -i -m base ten two
	)

Cloning into bare repository 'bare.git'...
done.
ok 4 - setup bare merge

expecting success of 6060.5 'merge-one-file fails without a work tree': 
	(cd bare.git &&
	 GIT_INDEX_FILE=$PWD/merge.index &&
	 export GIT_INDEX_FILE &&
	 test_must_fail git merge-index git-merge-one-file -a
	)

fatal: this operation must be run in a work tree
Cannot chdir to $cdup, the toplevel of the working tree
fatal: merge program failed
ok 5 - merge-one-file fails without a work tree

expecting success of 6060.6 'merge-one-file respects GIT_WORK_TREE': 
	(cd bare.git &&
	 mkdir work &&
	 GIT_WORK_TREE=$PWD/work &&
	 export GIT_WORK_TREE &&
	 GIT_INDEX_FILE=$PWD/merge.index &&
	 export GIT_INDEX_FILE &&
	 git merge-index git-merge-one-file -a &&
	 git cat-file blob :file >work/file-index
	) &&
	test_cmp expect-merged bare.git/work/file &&
	test_cmp expect-merged bare.git/work/file-index

Auto-merging file
ok 6 - merge-one-file respects GIT_WORK_TREE

expecting success of 6060.7 'merge-one-file respects core.worktree': 
	mkdir subdir &&
	git clone . subdir/child &&
	(cd subdir &&
	 GIT_DIR=$PWD/child/.git &&
	 export GIT_DIR &&
	 git config core.worktree "$PWD/child" &&
	 git read-tree -i -m base ten two &&
	 git merge-index git-merge-one-file -a &&
	 git cat-file blob :file >file-index
	) &&
	test_cmp expect-merged subdir/child/file &&
	test_cmp expect-merged subdir/file-index

Cloning into 'subdir/child'...
done.
Auto-merging file
ok 7 - merge-one-file respects core.worktree

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6100-rev-list-in-order.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6100-rev-list-in-order/.git/
expecting success of 6100.1 'setup a commit history with trees, blobs': 
	for x in one two three four
	do
		echo $x >$x &&
		git add $x &&
		git commit -m "add file $x" ||
		return 1
	done &&
	for x in four three
	do
		git rm $x &&
		git commit -m "remove $x" ||
		return 1
	done

[master (root-commit) 852067c] add file one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
[master 090ebfd] add file two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two
[master 2101c65] add file three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three
[master 0846a08] add file four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four
rm 'four'
[master 37698d1] remove four
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 four
rm 'three'
[master 0ade3bd] remove three
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three
ok 1 - setup a commit history with trees, blobs

expecting success of 6100.2 'rev-list --in-commit-order': 
	git rev-list --in-commit-order --objects HEAD >actual.raw &&
	cut -d" " -f1 >actual <actual.raw &&

	git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
		HEAD^{commit}
		HEAD^{tree}
		HEAD^{tree}:one
		HEAD^{tree}:two
		HEAD~1^{commit}
		HEAD~1^{tree}
		HEAD~1^{tree}:three
		HEAD~2^{commit}
		HEAD~2^{tree}
		HEAD~2^{tree}:four
		HEAD~3^{commit}
		# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
		HEAD~4^{commit}
		# HEAD~4^{tree} skipped, same as HEAD^{tree}
		HEAD~5^{commit}
		HEAD~5^{tree}
	EOF
	grep -v "#" >expect <expect.raw &&

	test_cmp expect actual

ok 2 - rev-list --in-commit-order

expecting success of 6100.3 'rev-list lists blobs and trees after commits': 
	git rev-list --objects HEAD >actual.raw &&
	cut -d" " -f1 >actual <actual.raw &&

	git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
		HEAD^{commit}
		HEAD~1^{commit}
		HEAD~2^{commit}
		HEAD~3^{commit}
		HEAD~4^{commit}
		HEAD~5^{commit}
		HEAD^{tree}
		HEAD^{tree}:one
		HEAD^{tree}:two
		HEAD~1^{tree}
		HEAD~1^{tree}:three
		HEAD~2^{tree}
		HEAD~2^{tree}:four
		# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
		# HEAD~4^{tree} skipped, same as HEAD^{tree}
		HEAD~5^{tree}
	EOF
	grep -v "#" >expect <expect.raw &&

	test_cmp expect actual

ok 3 - rev-list lists blobs and trees after commits

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6050-replace.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6050-replace/.git/
expecting success of 6050.1 'set up buggy branch': 
     echo "line 1" >>hello &&
     echo "line 2" >>hello &&
     echo "line 3" >>hello &&
     echo "line 4" >>hello &&
     add_and_commit_file hello "4 lines" &&
     HASH1=$(git rev-parse --verify HEAD) &&
     echo "line BUG" >>hello &&
     echo "line 6" >>hello &&
     echo "line 7" >>hello &&
     echo "line 8" >>hello &&
     add_and_commit_file hello "4 more lines with a BUG" &&
     HASH2=$(git rev-parse --verify HEAD) &&
     echo "line 9" >>hello &&
     echo "line 10" >>hello &&
     add_and_commit_file hello "2 more lines" &&
     HASH3=$(git rev-parse --verify HEAD) &&
     echo "line 11" >>hello &&
     add_and_commit_file hello "1 more line" &&
     HASH4=$(git rev-parse --verify HEAD) &&
     sed -e "s/BUG/5/" hello >hello.new &&
     mv hello.new hello &&
     add_and_commit_file hello "BUG fixed" &&
     HASH5=$(git rev-parse --verify HEAD) &&
     echo "line 12" >>hello &&
     echo "line 13" >>hello &&
     add_and_commit_file hello "2 more lines" &&
     HASH6=$(git rev-parse --verify HEAD) &&
     echo "line 14" >>hello &&
     echo "line 15" >>hello &&
     echo "line 16" >>hello &&
     add_and_commit_file hello "again 3 more lines" &&
     HASH7=$(git rev-parse --verify HEAD)

ok 1 - set up buggy branch

expecting success of 6050.2 'replace the author': 
     git cat-file commit $HASH2 | grep "author A U Thor" &&
     R=$(git cat-file commit $HASH2 | sed -e "s/A U/O/" | git hash-object -t commit --stdin -w) &&
     git cat-file commit $R | grep "author O Thor" &&
     git update-ref refs/replace/$HASH2 $R &&
     git show HEAD~5 | grep "O Thor" &&
     git show $HASH2 | grep "O Thor"

author A U Thor <author@example.com> 1112912053 -0700
author O Thor <author@example.com> 1112912053 -0700
Author: O Thor <author@example.com>
Author: O Thor <author@example.com>
ok 2 - replace the author

expecting success of 6050.3 'test --no-replace-objects option': 
     git cat-file commit $HASH2 | grep "author O Thor" &&
     git --no-replace-objects cat-file commit $HASH2 | grep "author A U Thor" &&
     git show $HASH2 | grep "O Thor" &&
     git --no-replace-objects show $HASH2 | grep "A U Thor"

author O Thor <author@example.com> 1112912053 -0700
author A U Thor <author@example.com> 1112912053 -0700
Author: O Thor <author@example.com>
Author: A U Thor <author@example.com>
ok 3 - test --no-replace-objects option

expecting success of 6050.4 'test GIT_NO_REPLACE_OBJECTS env variable': 
     GIT_NO_REPLACE_OBJECTS=1 git cat-file commit $HASH2 | grep "author A U Thor" &&
     GIT_NO_REPLACE_OBJECTS=1 git show $HASH2 | grep "A U Thor"

author A U Thor <author@example.com> 1112912053 -0700
Author: A U Thor <author@example.com>
ok 4 - test GIT_NO_REPLACE_OBJECTS env variable

expecting success of 6050.5 'test core.usereplacerefs config option': 
	test_config core.usereplacerefs false &&
	git cat-file commit $HASH2 | grep "author A U Thor" &&
	git show $HASH2 | grep "A U Thor"

author A U Thor <author@example.com> 1112912053 -0700
Author: A U Thor <author@example.com>
ok 5 - test core.usereplacerefs config option

expecting success of 6050.6 'tag replaced commit': 
     git update-ref refs/tags/mytag $(git mktag <tag.sig)

ok 6 - tag replaced commit

expecting success of 6050.7 '"git fsck" works': 
     git fsck main >fsck_main.out &&
     test_i18ngrep "dangling commit $R" fsck_main.out &&
     test_i18ngrep "dangling tag $(git show-ref -s refs/tags/mytag)" fsck_main.out &&
     test -z "$(git fsck)"

dangling commit c06ac9b8cd2f38349af40ec00e5d5c761b3bf513
dangling tag e25dc7954f0832d962347872884aab2dffb426c5
ok 7 - "git fsck" works

expecting success of 6050.8 'repack, clone and fetch work': 
     git repack -a -d &&
     git clone --no-hardlinks . clone_dir &&
     (
	  cd clone_dir &&
	  git show HEAD~5 | grep "A U Thor" &&
	  git show $HASH2 | grep "A U Thor" &&
	  git cat-file commit $R &&
	  git repack -a -d &&
	  test_must_fail git cat-file commit $R &&
	  git fetch ../ "refs/replace/*:refs/replace/*" &&
	  git show HEAD~5 | grep "O Thor" &&
	  git show $HASH2 | grep "O Thor" &&
	  git cat-file commit $R
     )

Cloning into 'clone_dir'...
done.
Author: A U Thor <author@example.com>
Author: A U Thor <author@example.com>
tree 242e3e36d5c0616fbf715682c322254dadb55168
parent 00ad688edb1a79423184992de45a5f0322c8bdf5
author O Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700

hello: 4 more lines with a BUG
fatal: git cat-file c06ac9b8cd2f38349af40ec00e5d5c761b3bf513: bad file
From ..
 * [new ref]         refs/replace/4217adb325b9db7bfc0c7b223183cc8546638cf0 -> refs/replace/4217adb325b9db7bfc0c7b223183cc8546638cf0
Author: O Thor <author@example.com>
Author: O Thor <author@example.com>
tree 242e3e36d5c0616fbf715682c322254dadb55168
parent 00ad688edb1a79423184992de45a5f0322c8bdf5
author O Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700

hello: 4 more lines with a BUG
ok 8 - repack, clone and fetch work

expecting success of 6050.9 '"git replace" listing and deleting': 
     test "$HASH2" = "$(git replace -l)" &&
     test "$HASH2" = "$(git replace)" &&
     aa=${HASH2%??????????????????????????????????????} &&
     test "$HASH2" = "$(git replace --list "$aa*")" &&
     test_must_fail git replace -d $R &&
     test_must_fail git replace --delete &&
     test_must_fail git replace -l -d $HASH2 &&
     git replace -d $HASH2 &&
     git show $HASH2 | grep "A U Thor" &&
     test -z "$(git replace -l)"

error: replace ref 'c06ac9b8cd2f38349af40ec00e5d5c761b3bf513' not found
fatal: -d needs at least one argument

usage: git replace [-f] <object> <replacement>
   or: git replace [-f] --edit <object>
   or: git replace [-f] --graft <commit> [<parent>...]
   or: git replace [-f] --convert-graft-file
   or: git replace -d <object>...
   or: git replace [--format=<format>] [-l [<pattern>]]

    -l, --list            list replace refs
    -d, --delete          delete replace refs
    -e, --edit            edit existing object
    -g, --graft           change a commit's parents
    --convert-graft-file  convert existing graft file
    -f, --force           replace the ref if it exists
    --raw                 do not pretty-print contents for --edit
    --format <format>     use this format

error: switch `d' is incompatible with --list
Deleted replace ref '4217adb325b9db7bfc0c7b223183cc8546638cf0'
Author: A U Thor <author@example.com>
ok 9 - "git replace" listing and deleting

expecting success of 6050.10 '"git replace" replacing': 
     git replace $HASH2 $R &&
     git show $HASH2 | grep "O Thor" &&
     test_must_fail git replace $HASH2 $R &&
     git replace -f $HASH2 $R &&
     test_must_fail git replace -f &&
     test "$HASH2" = "$(git replace)"

Author: O Thor <author@example.com>
error: replace ref 'refs/replace/4217adb325b9db7bfc0c7b223183cc8546638cf0' already exists
fatal: -f only makes sense when writing a replacement

usage: git replace [-f] <object> <replacement>
   or: git replace [-f] --edit <object>
   or: git replace [-f] --graft <commit> [<parent>...]
   or: git replace [-f] --convert-graft-file
   or: git replace -d <object>...
   or: git replace [--format=<format>] [-l [<pattern>]]

    -l, --list            list replace refs
    -d, --delete          delete replace refs
    -e, --edit            edit existing object
    -g, --graft           change a commit's parents
    --convert-graft-file  convert existing graft file
    -f, --force           replace the ref if it exists
    --raw                 do not pretty-print contents for --edit
    --format <format>     use this format

ok 10 - "git replace" replacing

expecting success of 6050.11 '"git replace" resolves sha1': 
     SHORTHASH2=$(git rev-parse --short=8 $HASH2) &&
     git replace -d $SHORTHASH2 &&
     git replace $SHORTHASH2 $R &&
     git show $HASH2 | grep "O Thor" &&
     test_must_fail git replace $HASH2 $R &&
     git replace -f $HASH2 $R &&
     test_must_fail git replace --force &&
     test "$HASH2" = "$(git replace)"

Deleted replace ref '4217adb325b9db7bfc0c7b223183cc8546638cf0'
Author: O Thor <author@example.com>
error: replace ref 'refs/replace/4217adb325b9db7bfc0c7b223183cc8546638cf0' already exists
fatal: -f only makes sense when writing a replacement

usage: git replace [-f] <object> <replacement>
   or: git replace [-f] --edit <object>
   or: git replace [-f] --graft <commit> [<parent>...]
   or: git replace [-f] --convert-graft-file
   or: git replace -d <object>...
   or: git replace [--format=<format>] [-l [<pattern>]]

    -l, --list            list replace refs
    -d, --delete          delete replace refs
    -e, --edit            edit existing object
    -g, --graft           change a commit's parents
    --convert-graft-file  convert existing graft file
    -f, --force           replace the ref if it exists
    --raw                 do not pretty-print contents for --edit
    --format <format>     use this format

ok 11 - "git replace" resolves sha1

expecting success of 6050.12 'create parallel branch without the bug': 
     git replace -d $HASH2 &&
     git show $HASH2 | grep "A U Thor" &&
     git checkout $HASH1 &&
     git cherry-pick $HASH2 &&
     git show $HASH5 | git apply &&
     git commit --amend -m "hello: 4 more lines WITHOUT the bug" hello &&
     PARA2=$(git rev-parse --verify HEAD) &&
     git cherry-pick $HASH3 &&
     PARA3=$(git rev-parse --verify HEAD) &&
     git cherry-pick $HASH4 &&
     PARA4=$(git rev-parse --verify HEAD) &&
     git cherry-pick $HASH6 &&
     PARA6=$(git rev-parse --verify HEAD) &&
     git replace $HASH6 $PARA6 &&
     git checkout main &&
     cur=$(git rev-parse --verify HEAD) &&
     test "$cur" = "$HASH7" &&
     git log --pretty=oneline | grep $PARA2 &&
     git remote add cloned ./clone_dir

Deleted replace ref '4217adb325b9db7bfc0c7b223183cc8546638cf0'
Author: A U Thor <author@example.com>
Note: switching to '00ad688edb1a79423184992de45a5f0322c8bdf5'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 00ad688 hello: 4 lines
[detached HEAD dcda230] hello: 4 more lines with a BUG
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 4 insertions(+)
[detached HEAD af6d994] hello: 4 more lines WITHOUT the bug
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 4 insertions(+)
Auto-merging hello
[detached HEAD a3fb2e1] hello: 2 more lines
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 2 insertions(+)
Auto-merging hello
[detached HEAD f486255] hello: 1 more line
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
[detached HEAD 911408d] hello: 2 more lines
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 2 insertions(+)
Previous HEAD position was 911408d hello: 2 more lines
Switched to branch 'main'
af6d994c7106b0846fb80f09fa5bcbc460432c6d hello: 4 more lines WITHOUT the bug
ok 12 - create parallel branch without the bug

expecting success of 6050.13 'push to cloned repo': 
     git push cloned $HASH6^:refs/heads/parallel &&
     (
	  cd clone_dir &&
	  git checkout parallel &&
	  git log --pretty=oneline | grep $PARA2
     )

To ./clone_dir
 * [new branch]      14ac020163ea60a9d683ce68e36c946f31ecc856^ -> parallel
Switched to branch 'parallel'
af6d994c7106b0846fb80f09fa5bcbc460432c6d hello: 4 more lines WITHOUT the bug
ok 13 - push to cloned repo

expecting success of 6050.14 'push branch with replacement': 
     git cat-file commit $PARA3 | grep "author A U Thor" &&
     S=$(git cat-file commit $PARA3 | sed -e "s/A U/O/" | git hash-object -t commit --stdin -w) &&
     git cat-file commit $S | grep "author O Thor" &&
     git replace $PARA3 $S &&
     git show $HASH6~2 | grep "O Thor" &&
     git show $PARA3 | grep "O Thor" &&
     git push cloned $HASH6^:refs/heads/parallel2 &&
     (
	  cd clone_dir &&
	  git checkout parallel2 &&
	  git log --pretty=oneline | grep $PARA3 &&
	  git show $PARA3 | grep "A U Thor"
     )

author A U Thor <author@example.com> 1112912113 -0700
author O Thor <author@example.com> 1112912113 -0700
Author: O Thor <author@example.com>
Author: O Thor <author@example.com>
To ./clone_dir
 * [new branch]      14ac020163ea60a9d683ce68e36c946f31ecc856^ -> parallel2
Switched to branch 'parallel2'
a3fb2e1845a1aaf129b7975048973414dc172173 hello: 2 more lines
Author: A U Thor <author@example.com>
ok 14 - push branch with replacement

expecting success of 6050.15 'fetch branch with replacement': 
     git branch tofetch $HASH6 &&
     (
	  cd clone_dir &&
	  git fetch origin refs/heads/tofetch:refs/heads/parallel3 &&
	  git log --pretty=oneline parallel3 >output.txt &&
	  ! grep $PARA3 output.txt &&
	  git show $PARA3 >para3.txt &&
	  grep "A U Thor" para3.txt &&
	  git fetch origin "refs/replace/*:refs/replace/*" &&
	  git log --pretty=oneline parallel3 >output.txt &&
	  grep $PARA3 output.txt &&
	  git show $PARA3 >para3.txt &&
	  grep "O Thor" para3.txt
     )

From /<<PKGBUILDDIR>>/t/trash directory.t6050-replace/.
 * [new branch]      tofetch    -> parallel3
 * [new branch]      tofetch    -> origin/tofetch
Author: A U Thor <author@example.com>
From /<<PKGBUILDDIR>>/t/trash directory.t6050-replace/.
 * [new ref]         refs/replace/14ac020163ea60a9d683ce68e36c946f31ecc856 -> refs/replace/14ac020163ea60a9d683ce68e36c946f31ecc856
 * [new ref]         refs/replace/a3fb2e1845a1aaf129b7975048973414dc172173 -> refs/replace/a3fb2e1845a1aaf129b7975048973414dc172173
a3fb2e1845a1aaf129b7975048973414dc172173 hello: 2 more lines
Author: O Thor <author@example.com>
ok 15 - fetch branch with replacement

expecting success of 6050.16 'bisect and replacements': 
     git bisect start $HASH7 $HASH1 &&
     test "$PARA3" = "$(git rev-parse --verify HEAD)" &&
     git bisect reset &&
     GIT_NO_REPLACE_OBJECTS=1 git bisect start $HASH7 $HASH1 &&
     test "$HASH4" = "$(git rev-parse --verify HEAD)" &&
     git bisect reset &&
     git --no-replace-objects bisect start $HASH7 $HASH1 &&
     test "$HASH4" = "$(git rev-parse --verify HEAD)" &&
     git bisect reset

Bisecting: 2 revisions left to test after this (roughly 1 step)
[a3fb2e1845a1aaf129b7975048973414dc172173] hello: 2 more lines
Previous HEAD position was a3fb2e1 hello: 2 more lines
Switched to branch 'main'
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[40237c8b8add42b8ca9d277edebf9dd36b4edbd8] hello: 1 more line
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  40237c8 hello: 1 more line
  8fc2a8e hello: 2 more lines

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 40237c8

Switched to branch 'main'
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[40237c8b8add42b8ca9d277edebf9dd36b4edbd8] hello: 1 more line
Warning: you are leaving 2 commits behind, not connected to
any of your branches:

  40237c8 hello: 1 more line
  8fc2a8e hello: 2 more lines

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 40237c8

Switched to branch 'main'
ok 16 - bisect and replacements

expecting success of 6050.17 'index-pack and replacements': 
	git --no-replace-objects rev-list --objects HEAD |
	git --no-replace-objects pack-objects test- &&
	git index-pack test-*.pack

d06bfd96e506f4513fcb3d15f2d4a0d25e23b3e7
d06bfd96e506f4513fcb3d15f2d4a0d25e23b3e7
ok 17 - index-pack and replacements

expecting success of 6050.18 'not just commits': 
	echo replaced >file &&
	git add file &&
	REPLACED=$(git rev-parse :file) &&
	mv file file.replaced &&

	echo original >file &&
	git add file &&
	ORIGINAL=$(git rev-parse :file) &&
	git update-ref refs/replace/$ORIGINAL $REPLACED &&
	mv file file.original &&

	git checkout file &&
	test_cmp file.replaced file

Updated 1 path from the index
ok 18 - not just commits

expecting success of 6050.19 'replaced and replacement objects must be of the same type': 
	test_must_fail git replace mytag $HASH1 &&
	test_must_fail git replace HEAD^{tree} HEAD~1 &&
	BLOB=$(git rev-parse :file) &&
	test_must_fail git replace HEAD^ $BLOB

error: Objects must be of the same type.
'mytag' points to a replaced object of type 'tag'
while '00ad688edb1a79423184992de45a5f0322c8bdf5' points to a replacement object of type 'commit'.
error: Objects must be of the same type.
'HEAD^{tree}' points to a replaced object of type 'tree'
while 'HEAD~1' points to a replacement object of type 'commit'.
error: Objects must be of the same type.
'HEAD^' points to a replaced object of type 'commit'
while '4b48deed3a433909bfd6b6ab3d4b91348b6af464' points to a replacement object of type 'blob'.
ok 19 - replaced and replacement objects must be of the same type

expecting success of 6050.20 '-f option bypasses the type check': 
	git replace -f mytag $HASH1 &&
	git replace --force HEAD^{tree} HEAD~1 &&
	git replace -f HEAD^ $BLOB

ok 20 - -f option bypasses the type check

expecting success of 6050.21 'git cat-file --batch works on replace objects': 
	git replace | grep $PARA3 &&
	echo $PARA3 | git cat-file --batch

a3fb2e1845a1aaf129b7975048973414dc172173
a3fb2e1845a1aaf129b7975048973414dc172173 commit 229
tree 2b0c71265a7705e0c171a5530d9ed18d5e1c31a6
parent af6d994c7106b0846fb80f09fa5bcbc460432c6d
author O Thor <author@example.com> 1112912113 -0700
committer C O Mitter <committer@example.com> 1112912353 -0700

hello: 2 more lines

ok 21 - git cat-file --batch works on replace objects

expecting success of 6050.22 'test --format bogus': 
	test_must_fail git replace --format bogus >/dev/null 2>&1

ok 22 - test --format bogus

expecting success of 6050.23 'test --format short': 
	git replace --format=short >actual &&
	git replace >expected &&
	test_cmp expected actual

ok 23 - test --format short

expecting success of 6050.24 'test --format medium': 
	H1=$(git --no-replace-objects rev-parse HEAD~1) &&
	HT=$(git --no-replace-objects rev-parse HEAD^{tree}) &&
	MYTAG=$(git --no-replace-objects rev-parse mytag) &&
	{
		echo "$H1 -> $BLOB" &&
		echo "$BLOB -> $REPLACED" &&
		echo "$HT -> $H1" &&
		echo "$PARA3 -> $S" &&
		echo "$MYTAG -> $HASH1"
	} | sort >expected &&
	git replace -l --format medium | sort >actual &&
	test_cmp expected actual

ok 24 - test --format medium

expecting success of 6050.25 'test --format long': 
	{
		echo "$H1 (commit) -> $BLOB (blob)" &&
		echo "$BLOB (blob) -> $REPLACED (blob)" &&
		echo "$HT (tree) -> $H1 (commit)" &&
		echo "$PARA3 (commit) -> $S (commit)" &&
		echo "$MYTAG (tag) -> $HASH1 (commit)"
	} | sort >expected &&
	git replace --format=long | sort >actual &&
	test_cmp expected actual

ok 25 - test --format long

expecting success of 6050.26 'setup fake editors': 
	write_script fakeeditor <<-\EOF &&
		sed -e "s/A U Thor/A fake Thor/" "$1" >"$1.new"
		mv "$1.new" "$1"
	EOF
	write_script failingfakeeditor <<-\EOF
		./fakeeditor "$@"
		false
	EOF

ok 26 - setup fake editors

expecting success of 6050.27 '--edit with and without already replaced object': 
	test_must_fail env GIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&
	GIT_EDITOR=./fakeeditor git replace --force --edit "$PARA3" &&
	git replace -l | grep "$PARA3" &&
	git cat-file commit "$PARA3" | grep "A fake Thor" &&
	git replace -d "$PARA3" &&
	GIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&
	git replace -l | grep "$PARA3" &&
	git cat-file commit "$PARA3" | grep "A fake Thor"

error: replace ref 'refs/replace/a3fb2e1845a1aaf129b7975048973414dc172173' already exists
a3fb2e1845a1aaf129b7975048973414dc172173
author A fake Thor <author@example.com> 1112912113 -0700
Deleted replace ref 'a3fb2e1845a1aaf129b7975048973414dc172173'
a3fb2e1845a1aaf129b7975048973414dc172173
author A fake Thor <author@example.com> 1112912113 -0700
ok 27 - --edit with and without already replaced object

expecting success of 6050.28 '--edit and change nothing or command failed': 
	git replace -d "$PARA3" &&
	test_must_fail env GIT_EDITOR=true git replace --edit "$PARA3" &&
	test_must_fail env GIT_EDITOR="./failingfakeeditor" git replace --edit "$PARA3" &&
	GIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&
	git replace -l | grep "$PARA3" &&
	git cat-file commit "$PARA3" | grep "A fake Thor"

Deleted replace ref 'a3fb2e1845a1aaf129b7975048973414dc172173'
error: new object is the same as the old one: 'a3fb2e1845a1aaf129b7975048973414dc172173'
error: There was a problem with the editor './failingfakeeditor'.
error: editing object file failed
a3fb2e1845a1aaf129b7975048973414dc172173
author A fake Thor <author@example.com> 1112912113 -0700
ok 28 - --edit and change nothing or command failed

expecting success of 6050.29 'replace ref cleanup': 
	test -n "$(git replace)" &&
	git replace -d $(git replace) &&
	test -z "$(git replace)"

Deleted replace ref '14ac020163ea60a9d683ce68e36c946f31ecc856'
Deleted replace ref '4b48deed3a433909bfd6b6ab3d4b91348b6af464'
Deleted replace ref '5c37393794868bc8e708cccd7c9d9aaa7a5e53cb'
Deleted replace ref 'a3fb2e1845a1aaf129b7975048973414dc172173'
Deleted replace ref 'e25dc7954f0832d962347872884aab2dffb426c5'
ok 29 - replace ref cleanup

expecting success of 6050.30 '--graft with and without already replaced object': 
	git log --oneline >log &&
	test_line_count = 7 log &&
	git replace --graft $HASH5 &&
	git log --oneline >log &&
	test_line_count = 3 log &&
	commit_has_parents $HASH5 &&
	test_must_fail git replace --graft $HASH5 $HASH4 $HASH3 &&
	git replace --force -g $HASH5 $HASH4 $HASH3 &&
	commit_has_parents $HASH5 $HASH4 $HASH3 &&
	git replace -d $HASH5

fatal: Needed a single revision
error: replace ref 'refs/replace/093e41a79d4a8bfe3c758a96c95e5bf9e35ed89c' already exists
fatal: Needed a single revision
Deleted replace ref '093e41a79d4a8bfe3c758a96c95e5bf9e35ed89c'
ok 30 - --graft with and without already replaced object

expecting success of 6050.31 '--graft using a tag as the new parent': 
	git tag new_parent $HASH5 &&
	git replace --graft $HASH7 new_parent &&
	commit_has_parents $HASH7 $HASH5 &&
	git replace -d $HASH7 &&
	git tag -a -m "annotated new parent tag" annotated_new_parent $HASH5 &&
	git replace --graft $HASH7 annotated_new_parent &&
	commit_has_parents $HASH7 $HASH5 &&
	git replace -d $HASH7

fatal: Needed a single revision
Deleted replace ref 'ffccc9d552388844dbe94a361c07e7cb1731e12f'
fatal: Needed a single revision
Deleted replace ref 'ffccc9d552388844dbe94a361c07e7cb1731e12f'
ok 31 - --graft using a tag as the new parent

expecting success of 6050.32 '--graft using a tag as the replaced object': 
	git tag replaced_object $HASH7 &&
	git replace --graft replaced_object $HASH5 &&
	commit_has_parents $HASH7 $HASH5 &&
	git replace -d $HASH7 &&
	git tag -a -m "annotated replaced object tag" annotated_replaced_object $HASH7 &&
	git replace --graft annotated_replaced_object $HASH5 &&
	commit_has_parents $HASH7 $HASH5 &&
	git replace -d $HASH7

fatal: Needed a single revision
Deleted replace ref 'ffccc9d552388844dbe94a361c07e7cb1731e12f'
fatal: Needed a single revision
Deleted replace ref 'ffccc9d552388844dbe94a361c07e7cb1731e12f'
ok 32 - --graft using a tag as the replaced object

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t6050-replace/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t6050-replace/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 6050.33 'set up a signed commit': 
	echo "line 17" >>hello &&
	echo "line 18" >>hello &&
	git add hello &&
	test_tick &&
	git commit --quiet -S -m "hello: 2 more lines in a signed commit" &&
	HASH8=$(git rev-parse --verify HEAD) &&
	git verify-commit $HASH8

gpg: Signature made Wed Dec 28 07:56:49 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 33 - set up a signed commit

expecting success of 6050.34 '--graft with a signed commit': 
	git cat-file commit $HASH8 >orig &&
	git replace --graft $HASH8 &&
	git cat-file commit $HASH8 >repl &&
	commit_has_parents $HASH8 &&
	test_must_fail git verify-commit $HASH8 &&
	sed -n -e "/^tree /p" -e "/^author /p" -e "/^committer /p" orig >expected &&
	echo >>expected &&
	sed -e "/^$/q" repl >actual &&
	test_cmp expected actual &&
	git replace -d $HASH8

warning: the original commit 'b723fee557e459de996ecfac32a1595f527d0de6' has a gpg signature
warning: the signature will be removed in the replacement commit!
fatal: Needed a single revision
Deleted replace ref 'b723fee557e459de996ecfac32a1595f527d0de6'
ok 34 - --graft with a signed commit

expecting success of 6050.35 'set up a merge commit with a mergetag': 
	git reset --hard HEAD &&
	git checkout -b test_branch HEAD~2 &&
	echo "line 1 from test branch" >>hello &&
	echo "line 2 from test branch" >>hello &&
	git add hello &&
	test_tick &&
	git commit -m "hello: 2 more lines from a test branch" &&
	HASH9=$(git rev-parse --verify HEAD) &&
	git tag -s -m "tag for testing with a mergetag" test_tag HEAD &&
	git checkout main &&
	git merge -s ours test_tag &&
	HASH10=$(git rev-parse --verify HEAD) &&
	git cat-file commit $HASH10 | grep "^mergetag object"

HEAD is now at b723fee hello: 2 more lines in a signed commit
Switched to a new branch 'test_branch'
[test_branch b626dba] hello: 2 more lines from a test branch
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'main'
Merge made by the 'ours' strategy.
mergetag object b626dba35124fd887689d330b4f2e827b8367cae
ok 35 - set up a merge commit with a mergetag

expecting success of 6050.36 '--graft on a commit with a mergetag': 
	test_must_fail git replace --graft $HASH10 $HASH8^1 &&
	git replace --graft $HASH10 $HASH8^1 $HASH9 &&
	git replace -d $HASH10

error: original commit '6bddafc61b81123c2a73a166025eeda9c17553a7' contains mergetag '755e3ce80e0ec38b94b0a59ecfb8d865b59e9eba' that is discarded; use --edit instead of --graft
Deleted replace ref '6bddafc61b81123c2a73a166025eeda9c17553a7'
ok 36 - --graft on a commit with a mergetag

expecting success of 6050.37 '--convert-graft-file': 
	git checkout -b with-graft-file &&
	test_commit root2 &&
	git reset --hard root2^ &&
	test_commit root1 &&
	test_commit after-root1 &&
	test_tick &&
	git merge -m merge-root2 root2 &&

	: add and convert graft file &&
	printf "%s\n%s %s\n\n# comment\n%s\n" \
		$(git rev-parse HEAD^^ HEAD^ HEAD^^ HEAD^2) \
		>.git/info/grafts &&
	git status 2>stderr &&
	test_i18ngrep "hint:.*grafts is deprecated" stderr &&
	git replace --convert-graft-file 2>stderr &&
	test_i18ngrep ! "hint:.*grafts is deprecated" stderr &&
	test_path_is_missing .git/info/grafts &&

	: verify that the history is now "grafted" &&
	git rev-list HEAD >out &&
	test_line_count = 4 out &&

	: create invalid graft file and verify that it is not deleted &&
	test_when_finished "rm -f .git/info/grafts" &&
	echo $EMPTY_BLOB $EMPTY_TREE >.git/info/grafts &&
	test_must_fail git replace --convert-graft-file 2>err &&
	test_i18ngrep "$EMPTY_BLOB $EMPTY_TREE" err &&
	test_i18ngrep "$EMPTY_BLOB $EMPTY_TREE" .git/info/grafts

Switched to a new branch 'with-graft-file'
[with-graft-file ff39aac] root2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 root2.t
HEAD is now at 6bddafc Merge tag 'test_tag'
[with-graft-file 0d366ec] root1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 root1.t
[with-graft-file 36b0d42] after-root1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 after-root1.t
Merge made by the 'ort' strategy.
 root2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 root2.t
On branch with-graft-file
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	clone_dir/
	err
	expected
	failingfakeeditor
	fakeeditor
	file.original
	file.replaced
	fsck_main.out
	gpghome/
	log
	orig
	payload
	repl
	stderr
	tag.sig
	test--d06bfd96e506f4513fcb3d15f2d4a0d25e23b3e7.idx
	test--d06bfd96e506f4513fcb3d15f2d4a0d25e23b3e7.pack

nothing added to commit but untracked files present (use "git add" to track)
hint: Support for <GIT_DIR>/info/grafts is deprecated
	e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 4b825dc642cb6eb9a060e54bf8d69288fbee4904
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 4b825dc642cb6eb9a060e54bf8d69288fbee4904
ok 37 - --convert-graft-file

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6102-rev-list-unexpected-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6102-rev-list-unexpected-objects/.git/
expecting success of 6102.1 'setup well-formed objects': 
	blob="$(printf "foo" | git hash-object -w --stdin)" &&
	tree="$(printf "100644 blob $blob\tfoo" | git mktree)" &&
	commit="$(git commit-tree $tree -m "first commit")" &&
	git cat-file commit $commit >good-commit

ok 1 - setup well-formed objects

expecting success of 6102.2 'setup unexpected non-blob entry': 
	printf "100644 foo\0$(echo $tree | hex2oct)" >broken-tree &&
	broken_tree="$(git hash-object -w --literally -t tree broken-tree)"

ok 2 - setup unexpected non-blob entry

expecting success of 6102.3 'TODO (should fail!): traverse unexpected non-blob entry (lone)': 
	sed "s/Z$//" >expect <<-EOF &&
	$broken_tree Z
	$tree foo
	EOF
	git rev-list --objects $broken_tree >actual &&
	test_cmp expect actual

ok 3 - TODO (should fail!): traverse unexpected non-blob entry (lone)

expecting success of 6102.4 'traverse unexpected non-blob entry (seen)': 
	test_must_fail git rev-list --objects $tree $broken_tree >output 2>&1 &&
	test_i18ngrep "is not a blob" output

fatal: entry 'foo' in tree f9a0e545d60bd011757113bec85ba95242fa6c4e has blob mode, but is not a blob
ok 4 - traverse unexpected non-blob entry (seen)

expecting success of 6102.5 'setup unexpected non-tree entry': 
	printf "40000 foo\0$(echo $blob | hex2oct)" >broken-tree &&
	broken_tree="$(git hash-object -w --literally -t tree broken-tree)"

ok 5 - setup unexpected non-tree entry

expecting success of 6102.6 'traverse unexpected non-tree entry (lone)': 
	test_must_fail git rev-list --objects $broken_tree

error: Object 19102815663d23f8b75a47e7a01965dcdc96468c not a tree
fatal: bad tree object 19102815663d23f8b75a47e7a01965dcdc96468c
10cd09cb3996f045aaf5417c833c0fa1ee7227e9 
ok 6 - traverse unexpected non-tree entry (lone)

expecting success of 6102.7 'traverse unexpected non-tree entry (seen)': 
	test_must_fail git rev-list --objects $blob $broken_tree >output 2>&1 &&
	test_i18ngrep "is not a tree" output

fatal: entry 'foo' in tree 10cd09cb3996f045aaf5417c833c0fa1ee7227e9 has tree mode, but is not a tree
ok 7 - traverse unexpected non-tree entry (seen)

expecting success of 6102.8 'setup unexpected non-commit parent': 
	sed "/^author/ { h; s/.*/parent $blob/; G; }" <good-commit \
		>broken-commit &&
	broken_commit="$(git hash-object -w --literally -t commit \
		broken-commit)"

ok 8 - setup unexpected non-commit parent

expecting success of 6102.9 'traverse unexpected non-commit parent (lone)': 
	test_must_fail git rev-list --objects $broken_commit >output 2>&1 &&
	test_i18ngrep "not a commit" output

error: Object 19102815663d23f8b75a47e7a01965dcdc96468c not a commit
ok 9 - traverse unexpected non-commit parent (lone)

expecting success of 6102.10 'traverse unexpected non-commit parent (seen)': 
	test_must_fail git rev-list --objects $blob $broken_commit \
		>output 2>&1 &&
	test_i18ngrep "not a commit" output

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a blob, not a commit
ok 10 - traverse unexpected non-commit parent (seen)

expecting success of 6102.11 'setup unexpected non-tree root': 
	sed -e "s/$tree/$blob/" <good-commit >broken-commit &&
	broken_commit="$(git hash-object -w --literally -t commit \
		broken-commit)"

ok 11 - setup unexpected non-tree root

expecting success of 6102.12 'traverse unexpected non-tree root (lone)': 
	test_must_fail git rev-list --objects $broken_commit

error: Object 19102815663d23f8b75a47e7a01965dcdc96468c not a tree
fatal: bad tree object 19102815663d23f8b75a47e7a01965dcdc96468c
0751a6c0afe31568a8dfe6a1b216fc464faa46ae
ok 12 - traverse unexpected non-tree root (lone)

expecting success of 6102.13 'traverse unexpected non-tree root (seen)': 
	test_must_fail git rev-list --objects $blob $broken_commit \
		>output 2>&1 &&
	test_i18ngrep "not a tree" output

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a blob, not a tree
ok 13 - traverse unexpected non-tree root (seen)

expecting success of 6102.14 'setup unexpected non-commit tag': 
	git tag -a -m "tagged commit" tag $commit &&
	git cat-file tag tag >good-tag &&
	test_when_finished "git tag -d tag" &&
	sed -e "s/$commit/$blob/" <good-tag >broken-tag &&
	tag=$(git hash-object -w --literally -t tag broken-tag)

Deleted tag 'tag' (was a857fb4)
ok 14 - setup unexpected non-commit tag

expecting success of 6102.15 'traverse unexpected non-commit tag (lone)': 
	test_must_fail git rev-list --objects $tag

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a commit, not a blob
fatal: bad object 19102815663d23f8b75a47e7a01965dcdc96468c
ok 15 - traverse unexpected non-commit tag (lone)

expecting success of 6102.16 'traverse unexpected non-commit tag (seen)': 
	test_must_fail git rev-list --objects $blob $tag >output 2>&1 &&
	test_i18ngrep "not a commit" output

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a blob, not a commit
ok 16 - traverse unexpected non-commit tag (seen)

expecting success of 6102.17 'setup unexpected non-tree tag': 
	git tag -a -m "tagged tree" tag $tree &&
	git cat-file tag tag >good-tag &&
	test_when_finished "git tag -d tag" &&
	sed -e "s/$tree/$blob/" <good-tag >broken-tag &&
	tag=$(git hash-object -w --literally -t tag broken-tag)

Deleted tag 'tag' (was 7f85285)
ok 17 - setup unexpected non-tree tag

expecting success of 6102.18 'traverse unexpected non-tree tag (lone)': 
	test_must_fail git rev-list --objects $tag

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a tree, not a blob
fatal: bad object 19102815663d23f8b75a47e7a01965dcdc96468c
ok 18 - traverse unexpected non-tree tag (lone)

expecting success of 6102.19 'traverse unexpected non-tree tag (seen)': 
	test_must_fail git rev-list --objects $blob $tag >output 2>&1 &&
	test_i18ngrep "not a tree" output

error: object 19102815663d23f8b75a47e7a01965dcdc96468c is a blob, not a tree
ok 19 - traverse unexpected non-tree tag (seen)

expecting success of 6102.20 'setup unexpected non-blob tag': 
	git tag -a -m "tagged blob" tag $blob &&
	git cat-file tag tag >good-tag &&
	test_when_finished "git tag -d tag" &&
	sed -e "s/$blob/$commit/" <good-tag >broken-tag &&
	tag=$(git hash-object -w --literally -t tag broken-tag)

Deleted tag 'tag' (was 5ff9998)
ok 20 - setup unexpected non-blob tag

expecting success of 6102.21 'traverse unexpected non-blob tag (lone)': 
	test_must_fail git rev-list --objects $tag

error: object 23c6239dd2793ccb5d4754a117a3c891c1bb96fd is a blob, not a commit
fatal: bad object 23c6239dd2793ccb5d4754a117a3c891c1bb96fd
ok 21 - traverse unexpected non-blob tag (lone)

expecting success of 6102.22 'traverse unexpected non-blob tag (seen)': 
	test_must_fail git rev-list --objects $commit $tag >output 2>&1 &&
	test_i18ngrep "not a blob" output

error: object 23c6239dd2793ccb5d4754a117a3c891c1bb96fd is a commit, not a blob
ok 22 - traverse unexpected non-blob tag (seen)

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6110-rev-list-sparse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6110-rev-list-sparse/.git/
expecting success of 6110.1 'setup': 
	test_commit A &&
	test_commit B &&
	test_commit C &&
	git checkout -b side HEAD^ &&
	test_commit D &&
	test_commit E &&
	git merge main

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main 35a8500] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to a new branch 'side'
[side 3e6e33e] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[side dc25130] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
ok 1 - setup

expecting success of 6110.2 'rev-list --first-parent --boundary': 
	git rev-list --first-parent --boundary HEAD^..

e8ee201b06a2eb86519e2b246f4c082e43aa5e90
-35a8500a6c116c9ddf35e140fa3277a7fe0b4196
-dc25130fe5e9f5d4a18aa4e0dff022e489b22c75
ok 2 - rev-list --first-parent --boundary

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6101-rev-parse-parents.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6101-rev-parse-parents/.git/
expecting success of 6101.1 'setup': 
	test_commit start &&
	test_commit second &&
	git checkout --orphan tmp &&
	test_commit start2 &&
	git checkout main &&
	git merge -m next --allow-unrelated-histories start2 &&
	test_commit final &&

	mkdir .git/info &&
	test_seq 40 |
	while read i
	do
		git checkout --orphan "b$i" &&
		test_tick &&
		git commit --allow-empty -m "$i" &&
		commit=$(git rev-parse --verify HEAD) &&
		printf "$commit " >>.git/info/grafts || return 1
	done

[main (root-commit) bb4ab09] start
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 start.t
[main 79e4276] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
Switched to a new branch 'tmp'
[tmp (root-commit) 4c3ba1d] start2
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 start2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 start2.t
[main 28dcd76] final
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 final.t
Switched to a new branch 'b1'
[b1 (root-commit) f5f3b2c] 1
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b2'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b2 (root-commit) 618c8bc] 2
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b3'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b3 (root-commit) ba8105e] 3
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b4'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b4 (root-commit) 8edc64f] 4
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b5'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b5 (root-commit) e7bafe0] 5
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b6'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b6 (root-commit) 2c11482] 6
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b7'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b7 (root-commit) b7111a8] 7
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b8'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b8 (root-commit) edde8dd] 8
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b9'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b9 (root-commit) 78609ce] 9
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b10'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b10 (root-commit) 1b26416] 10
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b11'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b11 (root-commit) 85f564d] 11
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b12'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b12 (root-commit) e798eda] 12
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b13'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b13 (root-commit) 9cc2d0a] 13
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b14'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b14 (root-commit) 19a1614] 14
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b15'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b15 (root-commit) 9b6308c] 15
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b16'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b16 (root-commit) 25d33a4] 16
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b17'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b17 (root-commit) 0302283] 17
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b18'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b18 (root-commit) 4e1e05c] 18
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b19'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b19 (root-commit) 3d9cf61] 19
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b20'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b20 (root-commit) 99e88bd] 20
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b21'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b21 (root-commit) 2806eea] 21
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b22'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b22 (root-commit) a13e487] 22
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b23'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b23 (root-commit) b3430b4] 23
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b24'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b24 (root-commit) b41c7be] 24
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b25'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b25 (root-commit) b40f716] 25
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b26'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b26 (root-commit) f9b45eb] 26
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b27'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b27 (root-commit) ecd01c9] 27
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b28'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b28 (root-commit) 3d5358c] 28
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b29'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b29 (root-commit) c334e99] 29
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b30'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b30 (root-commit) ae87771] 30
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b31'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b31 (root-commit) 4a37771] 31
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b32'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b32 (root-commit) 7be2dd6] 32
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b33'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b33 (root-commit) dcbfd2a] 33
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b34'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b34 (root-commit) 7b802c2] 34
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b35'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b35 (root-commit) 507bd75] 35
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b36'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b36 (root-commit) 5ded625] 36
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b37'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b37 (root-commit) 8c1e87b] 37
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b38'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b38 (root-commit) c52a118] 38
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b39'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b39 (root-commit) aeb1d68] 39
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'b40'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b40 (root-commit) 44fb50a] 40
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 final.t
 create mode 100644 second.t
 create mode 100644 start.t
 create mode 100644 start2.t
ok 1 - setup

expecting success of 6101.2 'start is valid': 
	git rev-parse start | grep "^$OID_REGEX$"

bb4ab095e062556a5dc9dbf86833ee9040f06e90
ok 2 - start is valid

expecting success of 6101.3 'start^0': 
	test_cmp_rev_output tags/start "git rev-parse start^0"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 3 - start^0

expecting success of 6101.4 'start^1 not valid': 
	test_must_fail git rev-parse --verify start^1

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
fatal: Needed a single revision
ok 4 - start^1 not valid

expecting success of 6101.5 'second^1 = second^': 
	test_cmp_rev_output second^ "git rev-parse second^1"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 5 - second^1 = second^

expecting success of 6101.6 'final^1^1^1': 
	test_cmp_rev_output start "git rev-parse final^1^1^1"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 6 - final^1^1^1

expecting success of 6101.7 'final^1^1^1 = final^^^': 
	test_cmp_rev_output final^^^ "git rev-parse final^1^1^1"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 7 - final^1^1^1 = final^^^

expecting success of 6101.8 'final^1^2': 
	test_cmp_rev_output start2 "git rev-parse final^1^2"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 8 - final^1^2

expecting success of 6101.9 'final^1^2 != final^1^1': 
	test $(git rev-parse final^1^2) != $(git rev-parse final^1^1)

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 9 - final^1^2 != final^1^1

expecting success of 6101.10 'final^1^3 not valid': 
	test_must_fail git rev-parse --verify final^1^3

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
fatal: Needed a single revision
ok 10 - final^1^3 not valid

expecting success of 6101.11 '--verify start2^1': 
	test_must_fail git rev-parse --verify start2^1

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
fatal: Needed a single revision
ok 11 - --verify start2^1

expecting success of 6101.12 '--verify start2^0': 
	git rev-parse --verify start2^0

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
4c3ba1d81bd3bb3afbb826285419970794dbc343
ok 12 - --verify start2^0

expecting success of 6101.13 'final^1^@ = final^1^1 final^1^2': 
	git rev-parse final^1^1 final^1^2 >expect &&
	git rev-parse final^1^@ >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 13 - final^1^@ = final^1^1 final^1^2

expecting success of 6101.14 'symbolic final^1^@ = final^1^1 final^1^2': 
	git rev-parse --symbolic final^1^1 final^1^2 >expect &&
	git rev-parse --symbolic final^1^@ >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 14 - symbolic final^1^@ = final^1^1 final^1^2

expecting success of 6101.15 'final^1^! = final^1 ^final^1^1 ^final^1^2': 
	git rev-parse final^1 ^final^1^1 ^final^1^2 >expect &&
	git rev-parse final^1^! >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 15 - final^1^! = final^1 ^final^1^1 ^final^1^2

expecting success of 6101.16 'symbolic final^1^! = final^1 ^final^1^1 ^final^1^2': 
	git rev-parse --symbolic final^1 ^final^1^1 ^final^1^2 >expect &&
	git rev-parse --symbolic final^1^! >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 16 - symbolic final^1^! = final^1 ^final^1^1 ^final^1^2

expecting success of 6101.17 'large graft octopus': 
	test_cmp_rev_output b31 "git rev-parse --verify b1^30"

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 17 - large graft octopus

expecting success of 6101.18 'repack for next test': 
	git repack -a -d

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 18 - repack for next test

expecting success of 6101.19 'short SHA-1 works': 
	start=$(git rev-parse --verify start) &&
	test_cmp_rev_output start "git rev-parse ${start%?}"

ok 19 - short SHA-1 works

expecting success of 6101.20 'setup for rev^- tests': 
	test_commit one &&
	test_commit two &&
	test_commit three &&

	# Merge in a branch for testing rev^-
	git checkout -b branch &&
	git checkout HEAD^^ &&
	git merge -m merge --no-edit --no-ff branch &&
	git checkout -b merge

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b40 1d60cd0] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b40 e07f350] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
[b40 0086327] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'branch'
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Note: switching to 'HEAD^^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1d60cd0 one
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Merge made by the 'ort' strategy.
 three.t | 1 +
 two.t   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 three.t
 create mode 100644 two.t
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Switched to a new branch 'merge'
ok 20 - setup for rev^- tests

expecting success of 6101.21 'rev-list --count merge^- = merge^..merge': 
	git rev-list --count merge^..merge >expect &&
	echo 3 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 21 - rev-list --count merge^- = merge^..merge

expecting success of 6101.22 'rev-parse merge^- = merge^..merge': 
	git rev-parse merge^..merge >expect &&
	git rev-parse merge^- >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 22 - rev-parse merge^- = merge^..merge

expecting success of 6101.23 'rev-parse merge^-1 = merge^..merge': 
	git rev-parse merge^1..merge >expect &&
	git rev-parse merge^-1 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 23 - rev-parse merge^-1 = merge^..merge

expecting success of 6101.24 'rev-parse merge^-2 = merge^2..merge': 
	git rev-parse merge^2..merge >expect &&
	git rev-parse merge^-2 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 24 - rev-parse merge^-2 = merge^2..merge

expecting success of 6101.25 'symbolic merge^-1 = merge^1..merge': 
	git rev-parse --symbolic merge^1..merge >expect &&
	git rev-parse --symbolic merge^-1 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 25 - symbolic merge^-1 = merge^1..merge

expecting success of 6101.26 'rev-parse merge^-0 (invalid parent)': 
	test_must_fail git rev-parse merge^-0

fatal: ambiguous argument 'merge^-0': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
merge^-0
ok 26 - rev-parse merge^-0 (invalid parent)

expecting success of 6101.27 'rev-parse merge^-3 (invalid parent)': 
	test_must_fail git rev-parse merge^-3

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
fatal: ambiguous argument 'merge^-3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
merge^-3
ok 27 - rev-parse merge^-3 (invalid parent)

expecting success of 6101.28 'rev-parse merge^-^ (garbage after ^-)': 
	test_must_fail git rev-parse merge^-^

fatal: ambiguous argument 'merge^-^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
merge^-^
ok 28 - rev-parse merge^-^ (garbage after ^-)

expecting success of 6101.29 'rev-parse merge^-1x (garbage after ^-1)': 
	test_must_fail git rev-parse merge^-1x

fatal: ambiguous argument 'merge^-1x': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
merge^-1x
ok 29 - rev-parse merge^-1x (garbage after ^-1)

expecting success of 6101.30 'rev-list merge^- = merge^..merge': 
	git rev-list merge^..merge >expect &&
	git rev-list merge^- >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 30 - rev-list merge^- = merge^..merge

expecting success of 6101.31 'rev-list merge^-1 = merge^1..merge': 
	git rev-list merge^1..merge >expect &&
	git rev-list merge^-1 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 31 - rev-list merge^-1 = merge^1..merge

expecting success of 6101.32 'rev-list merge^-2 = merge^2..merge': 
	git rev-list merge^2..merge >expect &&
	git rev-list merge^-2 >actual &&
	test_cmp expect actual

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 32 - rev-list merge^-2 = merge^2..merge

expecting success of 6101.33 'rev-list merge^-0 (invalid parent)': 
	test_must_fail git rev-list merge^-0

fatal: ambiguous argument 'merge^-0': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 33 - rev-list merge^-0 (invalid parent)

expecting success of 6101.34 'rev-list merge^-3 (invalid parent)': 
	test_must_fail git rev-list merge^-3

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
fatal: ambiguous argument 'merge^-3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 34 - rev-list merge^-3 (invalid parent)

expecting success of 6101.35 'rev-list merge^-^ (garbage after ^-)': 
	test_must_fail git rev-list merge^-^

fatal: ambiguous argument 'merge^-^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 35 - rev-list merge^-^ (garbage after ^-)

expecting success of 6101.36 'rev-list merge^-1x (garbage after ^-1)': 
	test_must_fail git rev-list merge^-1x

fatal: ambiguous argument 'merge^-1x': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 36 - rev-list merge^-1x (garbage after ^-1)

expecting success of 6101.37 'rev-parse $garbage^@ does not segfault': 
	test_must_fail git rev-parse $EMPTY_TREE^@

error: object 4b825dc642cb6eb9a060e54bf8d69288fbee4904 is a tree, not a commit
fatal: ambiguous argument '4b825dc642cb6eb9a060e54bf8d69288fbee4904^@': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
4b825dc642cb6eb9a060e54bf8d69288fbee4904^@
ok 37 - rev-parse $garbage^@ does not segfault

expecting success of 6101.38 'rev-parse $garbage...$garbage does not segfault': 
	test_must_fail git rev-parse $EMPTY_TREE...$EMPTY_BLOB

error: object 4b825dc642cb6eb9a060e54bf8d69288fbee4904 is a tree, not a commit
fatal: ambiguous argument '4b825dc642cb6eb9a060e54bf8d69288fbee4904...e69de29bb2d1d6434b8b29ae775ad8c2e48c5391': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
4b825dc642cb6eb9a060e54bf8d69288fbee4904
4b825dc642cb6eb9a060e54bf8d69288fbee4904...e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 38 - rev-parse $garbage...$garbage does not segfault

# passed all 38 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6111-rev-list-treesame.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6111-rev-list-treesame/.git/
expecting success of 6111.1 'setup': 
	test_commit "Initial file" file "Hi there" A &&
	git branch other-branch &&

	test_commit "file=Hello" file "Hello" B &&
	git branch third-branch &&

	git checkout other-branch &&
	test_commit "Added other" other "Hello" C &&

	git checkout main &&
	test_merge D other-branch &&

	git checkout third-branch &&
	test_commit "Third file" third "Nothing" E &&

	git checkout main &&
	test_commit "file=Blah" file "Blah" F &&

	test_tick && git merge --no-commit third-branch &&
	git checkout third-branch file &&
	git commit &&
	note G &&
	git branch fiddler-branch &&

	git checkout -b part2-branch &&
	test_commit "file=Part 2" file "Part 2" H &&

	git checkout fiddler-branch &&
	test_commit "Bad commit" file "Silly" I &&

	test_tick && git revert I && note J &&

	git checkout main &&
	test_tick && git merge --no-ff fiddler-branch &&
	note K &&

	test_commit "file=Part 1" file "Part 1" L &&

	test_tick && test_must_fail git merge part2-branch &&
	test_commit M file "Parts 1+2"

[main (root-commit) bbceb0a] Initial file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 8d757e8] file=Hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'other-branch'
[other-branch 519d746] Added other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other
Switched to branch 'main'
Merge made by the 'ort' strategy.
 other | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 other
Switched to branch 'third-branch'
[third-branch 1c8927c] Third file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third
Switched to branch 'main'
[main 961a4fd] file=Blah
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Automatic merge went well; stopped before committing as requested
Updated 1 path from a37db59
[main 9f6f8b0] Merge branch 'third-branch'
 Author: A U Thor <author@example.com>
Switched to a new branch 'part2-branch'
[part2-branch 0977201] file=Part 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'fiddler-branch'
[fiddler-branch 882208b] Bad commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[fiddler-branch cc48266] Revert "Bad commit"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Merge made by the 'ort' strategy.
[main 8e014b3] file=Part 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
[main 11de2ca] M
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 6111.2 'log ': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 2 - log 

expecting success of 6111.3 'log ': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 3 - log 

expecting success of 6111.4 'log --topo-order': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 4 - log --topo-order

expecting success of 6111.5 'log -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 5 - log -- file

expecting success of 6111.6 'log --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 6 - log --parents -- file

expecting success of 6111.7 'log --full-history -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 7 - log --full-history -- file

expecting success of 6111.8 'log --full-history --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 8 - log --full-history --parents -- file

expecting success of 6111.9 'log --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 9 - log --simplify-merges -- file

expecting success of 6111.10 'log --first-parent': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 10 - log --first-parent

expecting success of 6111.11 'log --first-parent -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 11 - log --first-parent -- file

expecting success of 6111.12 'log F..M': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 12 - log F..M

expecting success of 6111.13 'log F..M --topo-order': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 13 - log F..M --topo-order

expecting success of 6111.14 'log F..M -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 14 - log F..M -- file

expecting success of 6111.15 'log --parents F..M -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 15 - log --parents F..M -- file

expecting success of 6111.16 'log F..M --full-history -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 16 - log F..M --full-history -- file

expecting success of 6111.17 'log F..M --full-history --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 17 - log F..M --full-history --parents -- file

expecting success of 6111.18 'log F..M --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 18 - log F..M --simplify-merges -- file

expecting success of 6111.19 'log F..M --ancestry-path': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 19 - log F..M --ancestry-path

expecting success of 6111.20 'log F..M --ancestry-path -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 20 - log F..M --ancestry-path -- file

expecting success of 6111.21 'log F..M --ancestry-path --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 21 - log F..M --ancestry-path --parents -- file

expecting success of 6111.22 'log F..M --ancestry-path --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 22 - log F..M --ancestry-path --simplify-merges -- file

expecting success of 6111.23 'log F..M --first-parent': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 23 - log F..M --first-parent

expecting success of 6111.24 'log F..M --first-parent -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 24 - log F..M --first-parent -- file

expecting success of 6111.25 'log E..M --ancestry-path': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 25 - log E..M --ancestry-path

expecting success of 6111.26 'log E..M --ancestry-path -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 26 - log E..M --ancestry-path -- file

expecting success of 6111.27 'log E..M --ancestry-path --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 27 - log E..M --ancestry-path --parents -- file

expecting success of 6111.28 'log E..M --ancestry-path --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 28 - log E..M --ancestry-path --simplify-merges -- file

expecting success of 6111.29 'log G..M': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 29 - log G..M

expecting success of 6111.30 'log G..M --topo-order': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 30 - log G..M --topo-order

expecting success of 6111.31 'log G..M -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 31 - log G..M -- file

expecting success of 6111.32 'log G..M --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 32 - log G..M --parents -- file

expecting success of 6111.33 'log G..M --full-history -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 33 - log G..M --full-history -- file

expecting success of 6111.34 'log G..M --full-history --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 34 - log G..M --full-history --parents -- file

expecting success of 6111.35 'log G..M --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 35 - log G..M --simplify-merges -- file

expecting success of 6111.36 'log G..M --ancestry-path': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 36 - log G..M --ancestry-path

expecting success of 6111.37 'log G..M --ancestry-path -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 37 - log G..M --ancestry-path -- file

expecting success of 6111.38 'log G..M --ancestry-path --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 38 - log G..M --ancestry-path --parents -- file

expecting success of 6111.39 'log G..M --ancestry-path --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 39 - log G..M --ancestry-path --simplify-merges -- file

expecting success of 6111.40 'log B..F': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 40 - log B..F

expecting success of 6111.41 'log B..F -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 41 - log B..F -- file

expecting success of 6111.42 'log B..F --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 42 - log B..F --parents -- file

expecting success of 6111.43 'log B..F --full-history -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 43 - log B..F --full-history -- file

expecting success of 6111.44 'log B..F --full-history --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 44 - log B..F --full-history --parents -- file

expecting success of 6111.45 'log B..F --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 45 - log B..F --simplify-merges -- file

expecting success of 6111.46 'log B..F --ancestry-path': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 46 - log B..F --ancestry-path

expecting success of 6111.47 'log B..F --ancestry-path -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 47 - log B..F --ancestry-path -- file

expecting success of 6111.48 'log B..F --ancestry-path --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 48 - log B..F --ancestry-path --parents -- file

expecting success of 6111.49 'log B..F --ancestry-path --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 49 - log B..F --ancestry-path --simplify-merges -- file

expecting success of 6111.50 'log B..F --first-parent': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 50 - log B..F --first-parent

expecting success of 6111.51 'log B..F --first-parent -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 51 - log B..F --first-parent -- file

expecting success of 6111.52 'log E F ^B -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 52 - log E F ^B -- file

expecting success of 6111.53 'log E...F -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 53 - log E...F -- file

expecting success of 6111.54 'log C..F': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 54 - log C..F

expecting success of 6111.55 'log C..F -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 55 - log C..F -- file

expecting success of 6111.56 'log C..F --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 56 - log C..F --parents -- file

expecting success of 6111.57 'log C..F --full-history -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 57 - log C..F --full-history -- file

expecting success of 6111.58 'log C..F --full-history --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 58 - log C..F --full-history --parents -- file

expecting success of 6111.59 'log C..F --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 59 - log C..F --simplify-merges -- file

expecting success of 6111.60 'log C..F --ancestry-path': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 60 - log C..F --ancestry-path

expecting success of 6111.61 'log C..F --ancestry-path -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 61 - log C..F --ancestry-path -- file

expecting success of 6111.62 'log C..F --ancestry-path --parents -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 62 - log C..F --ancestry-path --parents -- file

expecting success of 6111.63 'log C..F --ancestry-path --simplify-merges -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 63 - log C..F --ancestry-path --simplify-merges -- file

expecting success of 6111.64 'log C..F --first-parent': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 64 - log C..F --first-parent

expecting success of 6111.65 'log C..F --first-parent -- file': 
		git log --format="$FMT" $param |
		unnote >actual &&
		sed -e "$munge_actual" <actual >check &&
		test_cmp expect check
	
ok 65 - log C..F --first-parent -- file

# passed all 65 test(s)
1..65
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6112-rev-list-filters-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/.git/
expecting success of 6112.1 'setup r1': 
	echo "{print \$1}" >print_1.awk &&
	echo "{print \$2}" >print_2.awk &&

	git init r1 &&
	for n in 1 2 3 4 5
	do
		echo "This is file: $n" > r1/file.$n &&
		git -C r1 add file.$n &&
		git -C r1 commit -m "$n" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r1/.git/
[main (root-commit) a56c7ae] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.1
[main 7d743f2] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.2
[main fcc1d33] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.3
[main e1d918e] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.4
[main 90f11b5] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.5
ok 1 - setup r1

expecting success of 6112.2 'verify blob:none omits all 5 blobs': 
	git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 \
		>ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r1 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:none HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 2 - verify blob:none omits all 5 blobs

expecting success of 6112.3 'specify blob explicitly prevents filtering': 
	file_3=$(git -C r1 ls-files -s file.3 |
		 awk -f print_2.awk) &&

	file_4=$(git -C r1 ls-files -s file.4 |
		 awk -f print_2.awk) &&

	git -C r1 rev-list --objects --filter=blob:none HEAD $file_3 >observed &&
	grep "$file_3" observed &&
	! grep "$file_4" observed

d2c9288bc745d46e9af90d26e0a3b6e03c099dff 
ok 3 - specify blob explicitly prevents filtering

expecting success of 6112.4 'verify emitted+omitted == all': 
	git -C r1 rev-list --objects HEAD >revs &&
	awk -f print_1.awk revs |
	sort >expected &&

	git -C r1 rev-list --objects --filter-print-omitted --filter=blob:none \
		HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 4 - verify emitted+omitted == all

expecting success of 6112.5 'setup r2': 
	git init r2 &&
	for n in 1000 10000
	do
		printf "%"$n"s" X > r2/large.$n &&
		git -C r2 add large.$n &&
		git -C r2 commit -m "$n" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r2/.git/
[main (root-commit) 0c54972] 1000
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 large.1000
[main fdc71e4] 10000
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 large.10000
ok 5 - setup r2

expecting success of 6112.6 'verify blob:limit=500 omits all blobs': 
	git -C r2 ls-files -s large.1000 large.10000 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r2 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:limit=500 HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 6 - verify blob:limit=500 omits all blobs

expecting success of 6112.7 'verify emitted+omitted == all': 
	git -C r2 rev-list --objects HEAD >revs &&
	awk -f print_1.awk revs |
	sort >expected &&

	git -C r2 rev-list --objects --filter-print-omitted \
		--filter=blob:limit=500 HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 7 - verify emitted+omitted == all

expecting success of 6112.8 'verify blob:limit=1000': 
	git -C r2 ls-files -s large.1000 large.10000 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r2 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:limit=1000 HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 8 - verify blob:limit=1000

expecting success of 6112.9 'verify blob:limit=1001': 
	git -C r2 ls-files -s large.10000 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r2 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:limit=1001 HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 9 - verify blob:limit=1001

expecting success of 6112.10 'verify blob:limit=1k': 
	git -C r2 ls-files -s large.10000 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r2 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:limit=1k HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 10 - verify blob:limit=1k

expecting success of 6112.11 'verify blob:limit=1m': 
	git -C r2 rev-list --quiet --objects --filter-print-omitted \
		--filter=blob:limit=1m HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_must_be_empty observed

ok 11 - verify blob:limit=1m

expecting success of 6112.12 'setup object-type': 
	test_create_repo object-type &&
	test_commit --no-tag -C object-type message blob &&
	git -C object-type tag tag -m tag-message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/object-type/.git/
[main (root-commit) 667f9c5] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 blob
ok 12 - setup object-type

expecting success of 6112.13 'verify object:type= fails with invalid type': 
	test_must_fail git -C object-type rev-list --objects --filter=object:type= HEAD &&
	test_must_fail git -C object-type rev-list --objects --filter=object:type=invalid HEAD

fatal: '' for 'object:type=<type>' is not a valid object type
fatal: 'invalid' for 'object:type=<type>' is not a valid object type
ok 13 - verify object:type= fails with invalid type

expecting success of 6112.14 'verify object:type=blob prints blob and commit': 
	git -C object-type rev-parse HEAD >expected &&
	printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob) >>expected &&
	git -C object-type rev-list --objects --filter=object:type=blob HEAD >actual &&
	test_cmp expected actual

ok 14 - verify object:type=blob prints blob and commit

expecting success of 6112.15 'verify object:type=tree prints tree and commit': 
	(
		git -C object-type rev-parse HEAD &&
		printf "%s \n" $(git -C object-type rev-parse HEAD^{tree})
	) >expected &&
	git -C object-type rev-list --objects --filter=object:type=tree HEAD >actual &&
	test_cmp expected actual

ok 15 - verify object:type=tree prints tree and commit

expecting success of 6112.16 'verify object:type=commit prints commit': 
	git -C object-type rev-parse HEAD >expected &&
	git -C object-type rev-list --objects --filter=object:type=commit HEAD >actual &&
	test_cmp expected actual

ok 16 - verify object:type=commit prints commit

expecting success of 6112.17 'verify object:type=tag prints tag': 
	(
		git -C object-type rev-parse HEAD &&
		printf "%s tag\n" $(git -C object-type rev-parse tag)
	) >expected &&
	git -C object-type rev-list --objects --filter=object:type=tag tag >actual &&
	test_cmp expected actual

ok 17 - verify object:type=tag prints tag

expecting success of 6112.18 'verify object:type=blob prints only blob with --filter-provided-objects': 
	printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob) >expected &&
	git -C object-type rev-list --objects \
		--filter=object:type=blob --filter-provided-objects HEAD >actual &&
	test_cmp expected actual

ok 18 - verify object:type=blob prints only blob with --filter-provided-objects

expecting success of 6112.19 'verify object:type=tree prints only tree with --filter-provided-objects': 
	printf "%s \n" $(git -C object-type rev-parse HEAD^{tree}) >expected &&
	git -C object-type rev-list --objects \
		--filter=object:type=tree HEAD --filter-provided-objects >actual &&
	test_cmp expected actual

ok 19 - verify object:type=tree prints only tree with --filter-provided-objects

expecting success of 6112.20 'verify object:type=commit prints only commit with --filter-provided-objects': 
	git -C object-type rev-parse HEAD >expected &&
	git -C object-type rev-list --objects \
		--filter=object:type=commit --filter-provided-objects HEAD >actual &&
	test_cmp expected actual

ok 20 - verify object:type=commit prints only commit with --filter-provided-objects

expecting success of 6112.21 'verify object:type=tag prints only tag with --filter-provided-objects': 
	printf "%s tag\n" $(git -C object-type rev-parse tag) >expected &&
	git -C object-type rev-list --objects \
		--filter=object:type=tag --filter-provided-objects tag >actual &&
	test_cmp expected actual

ok 21 - verify object:type=tag prints only tag with --filter-provided-objects

expecting success of 6112.22 'setup r3': 
	git init r3 &&
	mkdir r3/dir1 &&
	for n in sparse1 sparse2
	do
		echo "This is file: $n" > r3/$n &&
		git -C r3 add $n &&
		echo "This is file: dir1/$n" > r3/dir1/$n &&
		git -C r3 add dir1/$n || return 1
	done &&
	git -C r3 commit -m "sparse" &&
	echo dir1/ >pattern1 &&
	echo sparse1 >pattern2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r3/.git/
[main (root-commit) c6d9eba] sparse
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 dir1/sparse1
 create mode 100644 dir1/sparse2
 create mode 100644 sparse1
 create mode 100644 sparse2
ok 22 - setup r3

expecting success of 6112.23 'verify sparse:path=pattern1 fails': 
	test_must_fail git -C r3 rev-list --quiet --objects \
		--filter-print-omitted --filter=sparse:path=../pattern1 HEAD

fatal: sparse:path filters support has been dropped
ok 23 - verify sparse:path=pattern1 fails

expecting success of 6112.24 'verify sparse:path=pattern2 fails': 
	test_must_fail git -C r3 rev-list --quiet --objects \
		--filter-print-omitted --filter=sparse:path=../pattern2 HEAD

fatal: sparse:path filters support has been dropped
ok 24 - verify sparse:path=pattern2 fails

expecting success of 6112.25 'setup r3 part 2': 
	echo dir1/ >r3/pattern &&
	git -C r3 add pattern &&
	git -C r3 commit -m "pattern"

[main 819b47c] pattern
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pattern
ok 25 - setup r3 part 2

expecting success of 6112.26 'verify sparse:oid=OID omits top-level files': 
	git -C r3 ls-files -s pattern sparse1 sparse2 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	oid=$(git -C r3 ls-files -s pattern | awk -f print_2.awk) &&

	git -C r3 rev-list --quiet --objects --filter-print-omitted \
		--filter=sparse:oid=$oid HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 26 - verify sparse:oid=OID omits top-level files

expecting success of 6112.27 'verify sparse:oid=oid-ish omits top-level files': 
	git -C r3 ls-files -s pattern sparse1 sparse2 >ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	git -C r3 rev-list --quiet --objects --filter-print-omitted \
		--filter=sparse:oid=main:pattern HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/~//" |
	sort >observed &&

	test_cmp expected observed

ok 27 - verify sparse:oid=oid-ish omits top-level files

expecting success of 6112.28 'rev-list W/ --missing=print and --missing=allow-any for trees': 
	TREE=$(git -C r3 rev-parse HEAD:dir1) &&

	# Create a spare repo because we will be deleting objects from this one.
	git clone r3 r3.b &&

	rm r3.b/.git/objects/$(echo $TREE | sed "s|^..|&/|") &&

	git -C r3.b rev-list --quiet --missing=print --objects HEAD \
		>missing_objs 2>rev_list_err &&
	echo "?$TREE" >expected &&
	test_cmp expected missing_objs &&

	# do not complain when a missing tree cannot be parsed
	test_must_be_empty rev_list_err &&

	git -C r3.b rev-list --missing=allow-any --objects HEAD \
		>objs 2>rev_list_err &&
	! grep $TREE objs &&
	test_must_be_empty rev_list_err

Cloning into 'r3.b'...
done.
ok 28 - rev-list W/ --missing=print and --missing=allow-any for trees

expecting success of 6112.29 'verify tree:0 includes trees in "filtered" output': 
	git -C r3 rev-list --quiet --objects --filter-print-omitted \
		--filter=tree:0 HEAD >revs &&

	awk -f print_1.awk revs |
	sed s/~// |
	xargs -n1 git -C r3 cat-file -t >unsorted_filtered_types &&

	sort -u unsorted_filtered_types >filtered_types &&
	test_write_lines blob tree >expected &&
	test_cmp expected filtered_types

ok 29 - verify tree:0 includes trees in "filtered" output

expecting success of 6112.30 'verify skipping tree iteration when not collecting omits': 
	GIT_TRACE=1 git -C r3 rev-list \
		--objects --filter=tree:0 HEAD 2>filter_trace &&
	grep "Skipping contents of tree [.][.][.]" filter_trace >actual &&
	# One line for each commit traversed.
	test_line_count = 2 actual &&

	# Make sure no other trees were considered besides the root.
	! grep "Skipping contents of tree [^.]" filter_trace &&

	# Try this again with "combine:". If both sub-filters are skipping
	# trees, the composite filter should also skip trees. This is not
	# important unless the user does combine:tree:X+tree:Y or another filter
	# besides "tree:" is implemented in the future which can skip trees.
	GIT_TRACE=1 git -C r3 rev-list \
		--objects --filter=combine:tree:1+tree:3 HEAD 2>filter_trace &&

	# Only skip the dir1/ tree, which is shared between the two commits.
	grep "Skipping contents of tree " filter_trace >actual &&
	test_write_lines "Skipping contents of tree dir1/..." >expected &&
	test_cmp expected actual

819b47c296d74a3901e11da74f4dce17d7857650
c6d9eba8e5d370e16f4d49d7e6e58da52c1f73a8
819b47c296d74a3901e11da74f4dce17d7857650
c6d9eba8e5d370e16f4d49d7e6e58da52c1f73a8
c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
ok 30 - verify skipping tree iteration when not collecting omits

expecting success of 6112.31 'verify tree:1 includes root trees': 
	git -C r3 rev-list --objects --filter=tree:1 HEAD >actual &&

	# We should get two root directories and two commits.
	expect_has HEAD "" &&
	expect_has HEAD~1 ""  &&
	test_line_count = 4 actual

c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
ok 31 - verify tree:1 includes root trees

expecting success of 6112.32 'verify tree:2 includes root trees and immediate children': 
	git -C r3 rev-list --objects --filter=tree:2 HEAD >actual &&

	expect_has HEAD "" &&
	expect_has HEAD~1 "" &&
	expect_has HEAD dir1 &&
	expect_has HEAD pattern &&
	expect_has HEAD sparse1 &&
	expect_has HEAD sparse2 &&

	# There are also 2 commit objects
	test_line_count = 8 actual

c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
7fb8905c4b5f7b3f55b0b3fc90d88bec9f49eab1 dir1
09b067cf80607fe0e4fa713babca9fd9939077dd pattern
0b432f4900db0d72f719347ebf446d97a8de793b sparse1
2cc3ed6c8b26d9cf6e92fdbef61b61f26068a554 sparse2
ok 32 - verify tree:2 includes root trees and immediate children

expecting success of 6112.33 'verify tree:3 includes everything expected': 
	git -C r3 rev-list --objects --filter=tree:3 HEAD >actual &&

	expect_has HEAD "" &&
	expect_has HEAD~1 "" &&
	expect_has HEAD dir1 &&
	expect_has HEAD dir1/sparse1 &&
	expect_has HEAD dir1/sparse2 &&
	expect_has HEAD pattern &&
	expect_has HEAD sparse1 &&
	expect_has HEAD sparse2 &&

	# There are also 2 commit objects
	test_line_count = 10 actual

c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
7fb8905c4b5f7b3f55b0b3fc90d88bec9f49eab1 dir1
40dffed725389f7a2be11e2a3ac34f878d767cdf dir1/sparse1
b1d6d0f3744cb998a08e4bbbd93b4e20aaf8fbe3 dir1/sparse2
09b067cf80607fe0e4fa713babca9fd9939077dd pattern
0b432f4900db0d72f719347ebf446d97a8de793b sparse1
2cc3ed6c8b26d9cf6e92fdbef61b61f26068a554 sparse2
ok 33 - verify tree:3 includes everything expected

expecting success of 6112.34 'combine:... for a simple combination': 
	git -C r3 rev-list --objects --filter=combine:tree:2+blob:none HEAD \
		>actual &&

	expect_has HEAD "" &&
	expect_has HEAD~1 "" &&
	expect_has HEAD dir1 &&

	# There are also 2 commit objects
	test_line_count = 5 actual &&

	cp actual expected &&

	# Try again using repeated --filter - this is equivalent to a manual
	# combine with "combine:...+..."
	git -C r3 rev-list --objects --filter=combine:tree:2 \
		--filter=blob:none HEAD >actual &&

	test_cmp expected actual

c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
7fb8905c4b5f7b3f55b0b3fc90d88bec9f49eab1 dir1
ok 34 - combine:... for a simple combination

expecting success of 6112.35 'combine:... with URL encoding': 
	git -C r3 rev-list --objects \
		--filter=combine:tree%3a2+blob:%6Eon%65 HEAD >actual &&

	expect_has HEAD "" &&
	expect_has HEAD~1 "" &&
	expect_has HEAD dir1 &&

	# There are also 2 commit objects
	test_line_count = 5 actual

c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
7fb8905c4b5f7b3f55b0b3fc90d88bec9f49eab1 dir1
ok 35 - combine:... with URL encoding

expecting success of 6112.36 'combine:... while URL-encoding things that should not be': 
	expect_invalid_filter_spec combine%3Atree:2+blob:none \
		"invalid filter-spec"

fatal: invalid filter-spec 'combine%3Atree:2+blob:none'
ok 36 - combine:... while URL-encoding things that should not be

expecting success of 6112.37 'combine: with nothing after the :': 
	expect_invalid_filter_spec combine: "expected something after combine:"

fatal: expected something after combine:
ok 37 - combine: with nothing after the :

expecting success of 6112.38 'parse error in first sub-filter in combine:': 
	expect_invalid_filter_spec combine:tree:asdf+blob:none \
		"expected .tree:<depth>."

fatal: expected 'tree:<depth>'
ok 38 - parse error in first sub-filter in combine:

expecting success of 6112.39 'combine:... with non-encoded reserved chars': 
	expect_invalid_filter_spec combine:tree:2+sparse:@xyz \
		"must escape char in sub-filter-spec: .@." &&
	expect_invalid_filter_spec combine:tree:2+sparse:\` \
		"must escape char in sub-filter-spec: .\`." &&
	expect_invalid_filter_spec combine:tree:2+sparse:~abc \
		"must escape char in sub-filter-spec: .\~."

fatal: must escape char in sub-filter-spec: '@'
fatal: must escape char in sub-filter-spec: '`'
fatal: must escape char in sub-filter-spec: '~'
ok 39 - combine:... with non-encoded reserved chars

expecting success of 6112.40 'validate err msg for "combine:<valid-filter>+"': 
	expect_invalid_filter_spec combine:tree:2+ "expected .tree:<depth>."

fatal: expected 'tree:<depth>'
ok 40 - validate err msg for "combine:<valid-filter>+"

expecting success of 6112.41 'combine:... with edge-case hex digits: Ff Aa 0 9': 
	git -C r3 rev-list --objects --filter="combine:tree:2+bl%6Fb:n%6fne" \
		HEAD >actual &&
	test_line_count = 5 actual &&
	git -C r3 rev-list --objects --filter="combine:tree%3A2+blob%3anone" \
		HEAD >actual &&
	test_line_count = 5 actual &&
	git -C r3 rev-list --objects --filter="combine:tree:%30" HEAD >actual &&
	test_line_count = 2 actual &&
	git -C r3 rev-list --objects --filter="combine:tree:%39+blob:none" \
		HEAD >actual &&
	test_line_count = 5 actual

ok 41 - combine:... with edge-case hex digits: Ff Aa 0 9

expecting success of 6112.42 'add sparse pattern blobs whose paths have reserved chars': 
	cp r3/pattern r3/pattern1+renamed% &&
	cp r3/pattern "r3/p;at%ter+n" &&
	cp r3/pattern r3/^~pattern &&
	git -C r3 add pattern1+renamed% "p;at%ter+n" ^~pattern &&
	git -C r3 commit -m "add sparse pattern files with reserved chars"

[main 5962055] add sparse pattern files with reserved chars
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 ^~pattern
 create mode 100644 p;at%ter+n
 create mode 100644 pattern1+renamed%
ok 42 - add sparse pattern blobs whose paths have reserved chars

expecting success of 6112.43 'combine:... with more than two sub-filters': 
	git -C r3 rev-list --objects \
		--filter=combine:tree:3+blob:limit=40+sparse:oid=main:pattern \
		HEAD >actual &&

	expect_has HEAD "" &&
	expect_has HEAD~1 "" &&
	expect_has HEAD~2 "" &&
	expect_has HEAD dir1 &&
	expect_has HEAD dir1/sparse1 &&
	expect_has HEAD dir1/sparse2 &&

	# Should also have 3 commits
	test_line_count = 9 actual &&

	# Try again, this time making sure the last sub-filter is only
	# URL-decoded once.
	cp actual expect &&

	git -C r3 rev-list --objects \
		--filter=combine:tree:3+blob:limit=40+sparse:oid=main:pattern1%2brenamed%25 \
		HEAD >actual &&
	test_cmp expect actual &&

	# Use the same composite filter again, but with a pattern file name that
	# requires encoding multiple characters, and use implicit filter
	# combining.
	test_when_finished "rm -f trace1" &&
	GIT_TRACE=$(pwd)/trace1 git -C r3 rev-list --objects \
		--filter=tree:3 --filter=blob:limit=40 \
		--filter=sparse:oid="main:p;at%ter+n" \
		HEAD >actual &&

	test_cmp expect actual &&
	grep "Add to combine filter-spec: sparse:oid=main:p%3bat%25ter%2bn" \
		trace1 &&

	# Repeat the above test, but this time, the characters to encode are in
	# the LHS of the combined filter.
	test_when_finished "rm -f trace2" &&
	GIT_TRACE=$(pwd)/trace2 git -C r3 rev-list --objects \
		--filter=sparse:oid=main:^~pattern \
		--filter=tree:3 --filter=blob:limit=40 \
		HEAD >actual &&

	test_cmp expect actual &&
	grep "Add to combine filter-spec: sparse:oid=main:%5e%7epattern" \
		trace2

9e0b8354abd113bca99cb72fa47c8e22018f84cf 
c87d0a60ab3e9c39852baa3d603a61217d40e22d 
3893fc5e03af47544851c43293284679cd419b5b 
7fb8905c4b5f7b3f55b0b3fc90d88bec9f49eab1 dir1
40dffed725389f7a2be11e2a3ac34f878d767cdf dir1/sparse1
b1d6d0f3744cb998a08e4bbbd93b4e20aaf8fbe3 dir1/sparse2
Add to combine filter-spec: sparse:oid=main:p%3bat%25ter%2bn
Add to combine filter-spec: sparse:oid=main:%5e%7epattern
ok 43 - combine:... with more than two sub-filters

expecting success of 6112.44 'setup r4': 
	git init r4 &&

	echo foo > r4/foo &&
	mkdir r4/subdir &&
	echo bar > r4/subdir/bar &&

	mkdir r4/filt &&
	cp -r r4/foo r4/subdir r4/filt &&

	git -C r4 add foo subdir filt &&
	git -C r4 commit -m "commit msg"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r4/.git/
[main (root-commit) cde7f52] commit msg
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 filt/foo
 create mode 100644 filt/subdir/bar
 create mode 100644 foo
 create mode 100644 subdir/bar
ok 44 - setup r4

expecting success of 6112.45 'test tree:# filter provisional omit for blob and tree': 
	git -C r4 rev-list --objects --filter-print-omitted --filter=tree:2 \
		HEAD >actual &&
	expect_has_with_different_name r4 filt/foo &&
	expect_has_with_different_name r4 filt/subdir

257cc5642cb1a054f08cc83f2d943e56fd3ebe99 foo
ee314a31b622b027c10981acaed7903a3607dbd4 subdir
ok 45 - test tree:# filter provisional omit for blob and tree

expecting success of 6112.46 'verify skipping tree iteration when collecting omits': 
	GIT_TRACE=1 git -C r4 rev-list --filter-print-omitted \
		--objects --filter=tree:0 HEAD 2>filter_trace &&
	grep "^Skipping contents of tree " filter_trace >actual &&

	echo "Skipping contents of tree subdir/..." >expect &&
	test_cmp expect actual

cde7f52c36fbf3baf928c2af5ef7f98c0289d8bb
~d78556fc6f1bfbd95227fadba9ed6515b2e10d55
~5716ca5987cbf97d6bb54920bea6adde242d87e6
~ee314a31b622b027c10981acaed7903a3607dbd4
~efb93ecccaaa415ab7f4a10a9de4acb792b002d0
~257cc5642cb1a054f08cc83f2d943e56fd3ebe99
ok 46 - verify skipping tree iteration when collecting omits

expecting success of 6112.47 'setup r5': 
	git init r5 &&
	mkdir -p r5/subdir &&

	echo 1     >r5/short-root          &&
	echo 12345 >r5/long-root           &&
	echo a     >r5/subdir/short-subdir &&
	echo abcde >r5/subdir/long-subdir  &&

	git -C r5 add short-root long-root subdir &&
	git -C r5 commit -m "commit msg"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r5/.git/
[main (root-commit) ff8baac] commit msg
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 long-root
 create mode 100644 short-root
 create mode 100644 subdir/long-subdir
 create mode 100644 subdir/short-subdir
ok 47 - setup r5

expecting success of 6112.48 'verify collecting omits in combined: filter': 
	# Note that this test guards against the naive implementation of simply
	# giving both filters the same "omits" set and expecting it to
	# automatically merge them.
	git -C r5 rev-list --objects --quiet --filter-print-omitted \
		--filter=combine:tree:2+blob:limit=3 HEAD >actual &&

	# Expect 0 trees/commits, 3 blobs omitted (all blobs except short-root)
	omitted_1=$(echo 12345 | git hash-object --stdin) &&
	omitted_2=$(echo a     | git hash-object --stdin) &&
	omitted_3=$(echo abcde | git hash-object --stdin) &&

	grep ~$omitted_1 actual &&
	grep ~$omitted_2 actual &&
	grep ~$omitted_3 actual &&
	test_line_count = 3 actual

~e56e15bb7ddb6bd0b6d924b18fcee53d8713d7ea
~78981922613b2afb6025042ff6bd878ac1994e85
~00dedf6bd5f3e493ce8b03c889912f47b01297d4
ok 48 - verify collecting omits in combined: filter

expecting success of 6112.49 'tree:<depth> where we iterate over tree at two levels': 
	git init r5 &&

	mkdir -p r5/a/subdir/b &&
	echo foo > r5/a/subdir/b/foo &&

	mkdir -p r5/subdir/b &&
	echo foo > r5/subdir/b/foo &&

	git -C r5 add a subdir &&
	git -C r5 commit -m "commit msg" &&

	git -C r5 rev-list --objects --filter=tree:4 HEAD >actual &&
	expect_has_with_different_name r5 a/subdir/b/foo

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6112-rev-list-filters-objects/r5/.git/
[main 8968c2f] commit msg
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a/subdir/b/foo
 create mode 100644 subdir/b/foo
257cc5642cb1a054f08cc83f2d943e56fd3ebe99 subdir/b/foo
ok 49 - tree:<depth> where we iterate over tree at two levels

expecting success of 6112.50 'tree:<depth> which filters out blob but given as arg': 
	blob_hash=$(git -C r4 rev-parse HEAD:subdir/bar) &&

	git -C r4 rev-list --objects --filter=tree:1 HEAD $blob_hash >actual &&
	grep ^$blob_hash actual

5716ca5987cbf97d6bb54920bea6adde242d87e6 
ok 50 - tree:<depth> which filters out blob but given as arg

expecting success of 6112.51 'rev-list W/ --missing=print': 
	git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 \
		>ls_files_result &&
	awk -f print_2.awk ls_files_result |
	sort >expected &&

	for id in `cat expected | sed "s|..|&/|"`
	do
		rm r1/.git/objects/$id || return 1
	done &&

	git -C r1 rev-list --quiet --missing=print --objects HEAD >revs &&
	awk -f print_1.awk revs |
	sed "s/?//" |
	sort >observed &&

	test_cmp expected observed

ok 51 - rev-list W/ --missing=print

expecting success of 6112.52 'rev-list W/O --missing fails': 
	test_must_fail git -C r1 rev-list --quiet --objects HEAD

fatal: missing blob object '54ff69bde100bd29db945c2fc62010675d3b5b14'
ok 52 - rev-list W/O --missing fails

expecting success of 6112.53 'rev-list W/ missing=allow-any': 
	git -C r1 rev-list --quiet --missing=allow-any --objects HEAD

ok 53 - rev-list W/ missing=allow-any

expecting success of 6112.54 'expand blob limit in protocol': 
	git -C r2 config --local uploadpack.allowfilter 1 &&
	GIT_TRACE_PACKET="$(pwd)/trace" git -c protocol.version=2 clone \
		--filter=blob:limit=1k "file://$(pwd)/r2" limit &&
	! grep "blob:limit=1k" trace &&
	grep "blob:limit=1024" trace

Cloning into 'limit'...
packet:        clone> filter blob:limit=1024
packet:  upload-pack< filter blob:limit=1024
ok 54 - expand blob limit in protocol

# passed all 54 test(s)
1..54
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6114-keep-packs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6114-keep-packs/.git/
expecting success of 6114.1 'setup': 
	test_commit loose &&
	test_commit packed &&
	test_commit kept &&

	KEPT_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF
	refs/tags/kept
	^refs/tags/packed
	EOF
	) &&
	MISC_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF
	refs/tags/packed
	^refs/tags/loose
	EOF
	) &&

	touch .git/objects/pack/pack-$KEPT_PACK.keep

[master (root-commit) c1488ad] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
[master 84721bd] packed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 packed.t
[master fb0b3cd] kept
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 kept.t
ok 1 - setup

expecting success of 6114.2 '--no-kept-objects excludes trees and blobs in .keep packs': 
	rev_list_objects --objects --all --no-object-names >kept &&
	rev_list_objects --objects --all --no-object-names --no-kept-objects >no-kept &&

	idx_objects .git/objects/pack/pack-$KEPT_PACK.idx >expect &&
	comm -3 kept no-kept >actual &&

	test_cmp expect actual

ok 2 - --no-kept-objects excludes trees and blobs in .keep packs

expecting success of 6114.3 '--no-kept-objects excludes kept non-MIDX object': 
	test_config core.multiPackIndex true &&

	# Create a pack with just the commit object in pack, and do not mark it
	# as kept (even though it appears in $KEPT_PACK, which does have a .keep
	# file).
	MIDX_PACK=$(git pack-objects .git/objects/pack/pack <<-EOF
	$(git rev-parse kept)
	EOF
	) &&

	# Write a MIDX containing all packs, but use the version of the commit
	# at "kept" in a non-kept pack by touching $MIDX_PACK.
	touch .git/objects/pack/pack-$MIDX_PACK.pack &&
	git multi-pack-index write &&

	rev_list_objects --objects --no-object-names --no-kept-objects HEAD >actual &&
	(
		idx_objects .git/objects/pack/pack-$MISC_PACK.idx &&
		git rev-list --objects --no-object-names refs/tags/loose
	) | sort >expect &&
	test_cmp expect actual

ok 3 - --no-kept-objects excludes kept non-MIDX object

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6113-rev-list-bitmap-filters.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6113-rev-list-bitmap-filters/.git/
expecting success of 6113.1 'set up bitmapped repo': 
	# one commit will have bitmaps, the other will not
	test_commit one &&
	test_commit much-larger-blob-one &&
	git repack -adb &&
	test_commit two &&
	test_commit much-larger-blob-two &&
	git tag tag

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master e6e7e90] much-larger-blob-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 much-larger-blob-one.t
[master 5ff67e3] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master bb132a8] much-larger-blob-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 much-larger-blob-two.t
ok 1 - set up bitmapped repo

expecting success of 6113.2 'filters fallback to non-bitmap traversal': 
	# use a path-based filter, since they are inherently incompatible with
	# bitmaps (i.e., this test will never get confused by later code to
	# combine the features)
	filter=$(echo "!one" | git hash-object -w --stdin) &&
	git rev-list --objects --filter=sparse:oid=$filter HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=sparse:oid=$filter HEAD >actual &&
	test_cmp expect actual

ok 2 - filters fallback to non-bitmap traversal

expecting success of 6113.3 'blob:none filter': 
	git rev-list --objects --filter=blob:none HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:none HEAD >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 3 - blob:none filter

expecting success of 6113.4 'blob:none filter with specified blob': 
	git rev-list --objects --filter=blob:none HEAD HEAD:two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:none HEAD HEAD:two.t >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 4 - blob:none filter with specified blob

expecting success of 6113.5 'blob:limit filter': 
	git rev-list --objects --filter=blob:limit=5 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=5 HEAD >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 5 - blob:limit filter

expecting success of 6113.6 'blob:limit filter with specified blob': 
	git rev-list --objects --filter=blob:limit=5 \
		     HEAD HEAD:much-larger-blob-two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=5 \
		     HEAD HEAD:much-larger-blob-two.t >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 6 - blob:limit filter with specified blob

expecting success of 6113.7 'tree:0 filter': 
	git rev-list --objects --filter=tree:0 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:0 HEAD >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 7 - tree:0 filter

expecting success of 6113.8 'tree:0 filter with specified blob, tree': 
	git rev-list --objects --filter=tree:0 HEAD HEAD:two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:0 HEAD HEAD:two.t >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 8 - tree:0 filter with specified blob, tree

expecting success of 6113.9 'tree:1 filter': 
	git rev-list --objects --filter=tree:1 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:1 HEAD >actual &&
	test_cmp expect actual

ok 9 - tree:1 filter

expecting success of 6113.10 'object:type filter': 
	git rev-list --objects --filter=object:type=tag tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=tag tag >actual &&
	test_cmp expect actual &&

	git rev-list --objects --filter=object:type=commit tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=commit tag >actual &&
	test_bitmap_traversal expect actual &&

	git rev-list --objects --filter=object:type=tree tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=tree tag >actual &&
	test_bitmap_traversal expect actual &&

	git rev-list --objects --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
expect actual differ: char 1, line 1
expect actual differ: char 1, line 1
ok 10 - object:type filter

expecting success of 6113.11 'object:type filter with --filter-provided-objects': 
	git rev-list --objects --filter-provided-objects --filter=object:type=tag tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=tag tag >actual &&
	test_cmp expect actual &&

	git rev-list --objects --filter-provided-objects --filter=object:type=commit tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=commit tag >actual &&
	test_bitmap_traversal expect actual &&

	git rev-list --objects --filter-provided-objects --filter=object:type=tree tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=tree tag >actual &&
	test_bitmap_traversal expect actual &&

	git rev-list --objects --filter-provided-objects --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
expect actual differ: char 1, line 1
expect actual differ: char 41, line 1
ok 11 - object:type filter with --filter-provided-objects

expecting success of 6113.12 'combine filter': 
	git rev-list --objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual

expect actual differ: char 1, line 1
ok 12 - combine filter

expecting success of 6113.13 'combine filter with --filter-provided-objects': 
	git rev-list --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual &&

	git cat-file --batch-check="%(objecttype) %(objectsize)" <actual >objects &&
	while read objecttype objectsize
	do
		test "$objecttype" = blob || return 1
		test "$objectsize" -le 1000 || return 1
	done <objects

expect actual differ: char 41, line 1
ok 13 - combine filter with --filter-provided-objects

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6115-rev-list-du.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6115-rev-list-du/.git/
expecting success of 6115.1 'set up repository': 
	test_commit --no-tag one &&
	test_commit --no-tag two &&
	git repack -adb &&
	git reset --hard HEAD^ &&
	test_commit --no-tag three &&
	test_commit --no-tag four &&
	git reset --hard HEAD^

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
HEAD is now at d79ce16 one
[master 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master 6f2ec4d] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
HEAD is now at 897c206 three
ok 1 - set up repository

expecting success of 6115.2 'generate expected size (HEAD)': 
		disk_usage_slow HEAD >expect
	
ok 2 - generate expected size (HEAD)

expecting success of 6115.3 'rev-list --disk-usage without bitmaps (HEAD)': 
		git rev-list --disk-usage HEAD >actual &&
		test_cmp expect actual
	
ok 3 - rev-list --disk-usage without bitmaps (HEAD)

expecting success of 6115.4 'rev-list --disk-usage with bitmaps (HEAD)': 
		git rev-list --disk-usage --use-bitmap-index HEAD >actual &&
		test_cmp expect actual
	
ok 4 - rev-list --disk-usage with bitmaps (HEAD)

expecting success of 6115.5 'generate expected size (--objects HEAD)': 
		disk_usage_slow --objects HEAD >expect
	
ok 5 - generate expected size (--objects HEAD)

expecting success of 6115.6 'rev-list --disk-usage without bitmaps (--objects HEAD)': 
		git rev-list --disk-usage --objects HEAD >actual &&
		test_cmp expect actual
	
ok 6 - rev-list --disk-usage without bitmaps (--objects HEAD)

expecting success of 6115.7 'rev-list --disk-usage with bitmaps (--objects HEAD)': 
		git rev-list --disk-usage --use-bitmap-index --objects HEAD >actual &&
		test_cmp expect actual
	
ok 7 - rev-list --disk-usage with bitmaps (--objects HEAD)

expecting success of 6115.8 'generate expected size (--objects HEAD^..HEAD)': 
		disk_usage_slow --objects HEAD^..HEAD >expect
	
ok 8 - generate expected size (--objects HEAD^..HEAD)

expecting success of 6115.9 'rev-list --disk-usage without bitmaps (--objects HEAD^..HEAD)': 
		git rev-list --disk-usage --objects HEAD^..HEAD >actual &&
		test_cmp expect actual
	
ok 9 - rev-list --disk-usage without bitmaps (--objects HEAD^..HEAD)

expecting success of 6115.10 'rev-list --disk-usage with bitmaps (--objects HEAD^..HEAD)': 
		git rev-list --disk-usage --use-bitmap-index --objects HEAD^..HEAD >actual &&
		test_cmp expect actual
	
ok 10 - rev-list --disk-usage with bitmaps (--objects HEAD^..HEAD)

expecting success of 6115.11 'rev-list --disk-usage=human': 
	git rev-list --objects HEAD --disk-usage=human >actual &&
	disk_usage_slow --objects HEAD >actual_size &&
	grep "$(cat actual_size) bytes" actual

446 bytes
ok 11 - rev-list --disk-usage=human

expecting success of 6115.12 'rev-list --disk-usage=human with bitmaps': 
	git rev-list --objects HEAD --use-bitmap-index --disk-usage=human >actual &&
	disk_usage_slow --objects HEAD >actual_size &&
	grep "$(cat actual_size) bytes" actual

446 bytes
ok 12 - rev-list --disk-usage=human with bitmaps

expecting success of 6115.13 'rev-list use --disk-usage unproperly': 
	test_must_fail git rev-list --objects HEAD --disk-usage=typo 2>err &&
	cat >expect <<-\EOF &&
	fatal: invalid value for '--disk-usage=<format>': 'typo', the only allowed format is 'human'
	EOF
	test_cmp err expect

ok 13 - rev-list use --disk-usage unproperly

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6130-pathspec-noglob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6130-pathspec-noglob/.git/
expecting success of 6130.1 'create commits with glob characters': 
	test_commit unrelated bar &&
	test_commit vanilla foo &&
	# insert file "f*" in the commit, but in a way that avoids
	# the name "f*" in the worktree, because it is not allowed
	# on Windows (the tests below do not depend on the presence
	# of the file in the worktree)
	git config core.protectNTFS false &&
	git update-index --add --cacheinfo 100644 "$(git rev-parse HEAD:foo)" "f*" &&
	test_tick &&
	git commit -m star &&
	test_commit bracket "f[o][o]"

[master (root-commit) f600089] unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[master 065b8fa] vanilla
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[master 306e39a] star
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f*
[master 48b9afb] bracket
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 f[o][o]
ok 1 - create commits with glob characters

expecting success of 6130.2 'vanilla pathspec matches literally': 
	echo vanilla >expect &&
	git log --format=%s -- foo >actual &&
	test_cmp expect actual

ok 2 - vanilla pathspec matches literally

expecting success of 6130.3 'star pathspec globs': 
	cat >expect <<-\EOF &&
	bracket
	star
	vanilla
	EOF
	git log --format=%s -- "f*" >actual &&
	test_cmp expect actual

ok 3 - star pathspec globs

expecting success of 6130.4 'star pathspec globs': 
	cat >expect <<-\EOF &&
	bracket
	star
	vanilla
	EOF
	git log --format=%s -- ":(glob)f*" >actual &&
	test_cmp expect actual

ok 4 - star pathspec globs

expecting success of 6130.5 'bracket pathspec globs and matches literal brackets': 
	cat >expect <<-\EOF &&
	bracket
	vanilla
	EOF
	git log --format=%s -- "f[o][o]" >actual &&
	test_cmp expect actual

ok 5 - bracket pathspec globs and matches literal brackets

expecting success of 6130.6 'bracket pathspec globs and matches literal brackets': 
	cat >expect <<-\EOF &&
	bracket
	vanilla
	EOF
	git log --format=%s -- ":(glob)f[o][o]" >actual &&
	test_cmp expect actual

ok 6 - bracket pathspec globs and matches literal brackets

expecting success of 6130.7 'no-glob option matches literally (vanilla)': 
	echo vanilla >expect &&
	git --literal-pathspecs log --format=%s -- foo >actual &&
	test_cmp expect actual

ok 7 - no-glob option matches literally (vanilla)

expecting success of 6130.8 'no-glob option matches literally (vanilla)': 
	echo vanilla >expect &&
	git log --format=%s -- ":(literal)foo" >actual &&
	test_cmp expect actual

ok 8 - no-glob option matches literally (vanilla)

expecting success of 6130.9 'no-glob option matches literally (star)': 
	echo star >expect &&
	git --literal-pathspecs log --format=%s -- "f*" >actual &&
	test_cmp expect actual

ok 9 - no-glob option matches literally (star)

expecting success of 6130.10 'no-glob option matches literally (star)': 
	echo star >expect &&
	git log --format=%s -- ":(literal)f*" >actual &&
	test_cmp expect actual

ok 10 - no-glob option matches literally (star)

expecting success of 6130.11 'no-glob option matches literally (bracket)': 
	echo bracket >expect &&
	git --literal-pathspecs log --format=%s -- "f[o][o]" >actual &&
	test_cmp expect actual

ok 11 - no-glob option matches literally (bracket)

expecting success of 6130.12 'no-glob option matches literally (bracket)': 
	echo bracket >expect &&
	git log --format=%s -- ":(literal)f[o][o]" >actual &&
	test_cmp expect actual

ok 12 - no-glob option matches literally (bracket)

expecting success of 6130.13 'no-glob option disables :(literal)': 
	git --literal-pathspecs log --format=%s -- ":(literal)foo" >actual &&
	test_must_be_empty actual

ok 13 - no-glob option disables :(literal)

expecting success of 6130.14 'no-glob environment variable works': 
	echo star >expect &&
	GIT_LITERAL_PATHSPECS=1 git log --format=%s -- "f*" >actual &&
	test_cmp expect actual

ok 14 - no-glob environment variable works

expecting success of 6130.15 'blame takes global pathspec flags': 
	git --literal-pathspecs blame -- foo &&
	git --icase-pathspecs   blame -- foo &&
	git --glob-pathspecs    blame -- foo &&
	git --noglob-pathspecs  blame -- foo

065b8faf (A U Thor 2005-04-07 15:14:13 -0700 1) vanilla
065b8faf (A U Thor 2005-04-07 15:14:13 -0700 1) vanilla
065b8faf (A U Thor 2005-04-07 15:14:13 -0700 1) vanilla
065b8faf (A U Thor 2005-04-07 15:14:13 -0700 1) vanilla
ok 15 - blame takes global pathspec flags

expecting success of 6130.16 'setup xxx/bar': 
	mkdir xxx &&
	test_commit xxx xxx/bar

[master 7cd4d15] xxx
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 xxx/bar
ok 16 - setup xxx/bar

expecting success of 6130.17 '**/ works with :(glob)': 
	cat >expect <<-\EOF &&
	xxx
	unrelated
	EOF
	git log --format=%s -- ":(glob)**/bar" >actual &&
	test_cmp expect actual

ok 17 - **/ works with :(glob)

expecting success of 6130.18 '**/ does not work with --noglob-pathspecs': 
	git --noglob-pathspecs log --format=%s -- "**/bar" >actual &&
	test_must_be_empty actual

ok 18 - **/ does not work with --noglob-pathspecs

expecting success of 6130.19 '**/ works with :(glob) and --noglob-pathspecs': 
	cat >expect <<-\EOF &&
	xxx
	unrelated
	EOF
	git --noglob-pathspecs log --format=%s -- ":(glob)**/bar" >actual &&
	test_cmp expect actual

ok 19 - **/ works with :(glob) and --noglob-pathspecs

expecting success of 6130.20 '**/ works with --glob-pathspecs': 
	cat >expect <<-\EOF &&
	xxx
	unrelated
	EOF
	git --glob-pathspecs log --format=%s -- "**/bar" >actual &&
	test_cmp expect actual

ok 20 - **/ works with --glob-pathspecs

expecting success of 6130.21 '**/ does not work with :(literal) and --glob-pathspecs': 
	git --glob-pathspecs log --format=%s -- ":(literal)**/bar" >actual &&
	test_must_be_empty actual

ok 21 - **/ does not work with :(literal) and --glob-pathspecs

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6131-pathspec-icase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6131-pathspec-icase/.git/
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
expecting success of 6131.1 'create commits with glob characters': 
	test_commit bar bar &&
	test_commit bAr bAr &&
	test_commit BAR BAR &&
	mkdir foo &&
	test_commit foo/bar foo/bar &&
	test_commit foo/bAr foo/bAr &&
	test_commit foo/BAR foo/BAR &&
	mkdir fOo &&
	test_commit fOo/bar fOo/bar &&
	test_commit fOo/bAr fOo/bAr &&
	test_commit fOo/BAR fOo/BAR &&
	mkdir FOO &&
	test_commit FOO/bar FOO/bar &&
	test_commit FOO/bAr FOO/bAr &&
	test_commit FOO/BAR FOO/BAR

[master (root-commit) b257e7a] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[master 09d2e74] bAr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bAr
[master ae27bbe] BAR
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 BAR
[master 016d22a] foo/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bar
[master f3c37ed] foo/bAr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/bAr
[master 98eb41e] foo/BAR
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo/BAR
[master edcb5cb] fOo/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fOo/bar
[master ed5b100] fOo/bAr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fOo/bAr
[master 2f49636] fOo/BAR
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fOo/BAR
[master c65ab92] FOO/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 FOO/bar
[master cd48380] FOO/bAr
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 FOO/bAr
[master 4e818f3] FOO/BAR
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 FOO/BAR
ok 1 - create commits with glob characters

expecting success of 6131.2 'tree_entry_interesting matches bar': 
	echo bar >expect &&
	git log --format=%s -- "bar" >actual &&
	test_cmp expect actual

ok 2 - tree_entry_interesting matches bar

expecting success of 6131.3 'tree_entry_interesting matches :(icase)bar': 
	cat <<-EOF >expect &&
	BAR
	bAr
	bar
	EOF
	git log --format=%s -- ":(icase)bar" >actual &&
	test_cmp expect actual

ok 3 - tree_entry_interesting matches :(icase)bar

expecting success of 6131.4 'tree_entry_interesting matches :(icase)bar with prefix': 
	cat <<-EOF >expect &&
	fOo/BAR
	fOo/bAr
	fOo/bar
	EOF
	( cd fOo && git log --format=%s -- ":(icase)bar" ) >actual &&
	test_cmp expect actual

ok 4 - tree_entry_interesting matches :(icase)bar with prefix

expecting success of 6131.5 'tree_entry_interesting matches :(icase)bar with empty prefix': 
	cat <<-EOF >expect &&
	FOO/BAR
	FOO/bAr
	FOO/bar
	fOo/BAR
	fOo/bAr
	fOo/bar
	foo/BAR
	foo/bAr
	foo/bar
	EOF
	( cd fOo && git log --format=%s -- ":(icase)../foo/bar" ) >actual &&
	test_cmp expect actual

ok 5 - tree_entry_interesting matches :(icase)bar with empty prefix

expecting success of 6131.6 'match_pathspec matches :(icase)bar': 
	cat <<-EOF >expect &&
	BAR
	bAr
	bar
	EOF
	git ls-files ":(icase)bar" >actual &&
	test_cmp expect actual

ok 6 - match_pathspec matches :(icase)bar

expecting success of 6131.7 'match_pathspec matches :(icase)bar with prefix': 
	cat <<-EOF >expect &&
	fOo/BAR
	fOo/bAr
	fOo/bar
	EOF
	( cd fOo && git ls-files --full-name ":(icase)bar" ) >actual &&
	test_cmp expect actual

ok 7 - match_pathspec matches :(icase)bar with prefix

expecting success of 6131.8 'match_pathspec matches :(icase)bar with empty prefix': 
	cat <<-EOF >expect &&
	bar
	fOo/BAR
	fOo/bAr
	fOo/bar
	EOF
	( cd fOo && git ls-files --full-name ":(icase)bar" ../bar ) >actual &&
	test_cmp expect actual

ok 8 - match_pathspec matches :(icase)bar with empty prefix

expecting success of 6131.9 '"git diff" can take magic :(icase) pathspec': 
	echo FOO/BAR >expect &&
	git diff --name-only HEAD^ HEAD -- ":(icase)foo/bar" >actual &&
	test_cmp expect actual

ok 9 - "git diff" can take magic :(icase) pathspec

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6041-bisect-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/.git/
expecting success of 6041.1 'git_bisect: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
[add_sub1 3f6af83] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 27611a5 Base
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[09bcf53b0522b9fb95c5988105da6608927c3e4b] Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_bisect: added submodule creates empty directory

expecting success of 6041.2 'git_bisect: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Switched to branch 'add_sub1'
Your branch is up to date with 'origin/add_sub1'.
[add_sub1 3f6af83] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 27611a5 Base
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[09bcf53b0522b9fb95c5988105da6608927c3e4b] Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_bisect: added submodule leaves existing empty directory alone

expecting success of 6041.3 'git_bisect: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Switched to branch 'replace_file_with_sub1'
Your branch is up to date with 'origin/replace_file_with_sub1'.
[replace_file_with_sub1 3ac086b] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 2364f5a Replace sub1 with file
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[8b6fdfce32c1964fe2bd8ab0e22d81c1a2bb0726] Revert "Replace sub1 with file"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_bisect: replace tracked file with submodule creates empty directory

expecting success of 6041.4 'git_bisect: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Switched to branch 'replace_directory_with_sub1'
Your branch is up to date with 'origin/replace_directory_with_sub1'.
[replace_directory_with_sub1 d02a28b] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at cb28587 Replace sub1 with directory
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[a2e65d520c4d6151077c503b94e88a2b0fc27137] Revert "Replace sub1 with directory"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_bisect: replace directory with submodule

expecting success of 6041.5 'git_bisect: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
[remove_sub1 62c9c0e] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 09bcf53 Add sub1
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
warning: unable to rmdir 'sub1': Directory not empty
[d6ba72308524467d7c42cc82695a9efb51c0c608] Revert "Add sub1"
ok 5 - git_bisect: removed submodule leaves submodule directory and its contents in place

expecting success of 6041.6 'git_bisect: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Switched to branch 'remove_sub1'
Your branch is up to date with 'origin/remove_sub1'.
[remove_sub1 62c9c0e] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 09bcf53 Add sub1
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
warning: unable to rmdir 'sub1': Directory not empty
[d6ba72308524467d7c42cc82695a9efb51c0c608] Revert "Add sub1"
ok 6 - git_bisect: removed submodule leaves submodule containing a .git directory alone

expecting success of 6041.7 'git_bisect: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 7 - git_bisect: replace submodule with a directory must fail

expecting success of 6041.8 'git_bisect: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1/file1
	sub1/file2
Please move or remove them before you switch branches.
Aborting
ok 8 - git_bisect: replace submodule containing a .git directory with a directory must fail

checking known breakage of 6041.9 'git_bisect: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 9 - git_bisect: replace submodule with a file must fail # TODO known breakage

checking known breakage of 6041.10 'git_bisect: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Switched to branch 'replace_sub1_with_file'
Your branch is up to date with 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git checkout replace_sub1_with_file
not ok 10 - git_bisect: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 6041.11 'git_bisect: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Switched to branch 'modify_sub1'
Your branch is up to date with 'origin/modify_sub1'.
[modify_sub1 bff37bb] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 09bcf53 Add sub1
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[cb2bda782feaa487c31d26515559b87318263154] Modify sub1
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_bisect: modified submodule does not update submodule work tree

expecting success of 6041.12 'git_bisect: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Switched to branch 'invalid_sub1'
Your branch is up to date with 'origin/invalid_sub1'.
[invalid_sub1 78d784c] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 09bcf53 Add sub1
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[e6169bf97522b7a7bdecb08ccbc816ccd15c6742] Invalid sub1 commit
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_bisect: modified submodule does not update submodule work tree to invalid commit

expecting success of 6041.13 'git_bisect: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Switched to branch 'valid_sub1'
Your branch is up to date with 'origin/valid_sub1'.
[valid_sub1 f880729] bisect bad
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at e6169bf Invalid sub1 commit
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3036e4e7a6b640ae42492f70ab2e4608d629980b] Revert "Invalid sub1 commit"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6041-bisect-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_bisect: modified submodule does not update submodule work tree from invalid commit

expecting success of 6041.14 'git_bisect: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by checkout:
	sub1
Please move or remove them before you switch branches.
Aborting
ok 14 - git_bisect: added submodule doesn't remove untracked unignored file with same name

# still have 2 known breakage(s)
# passed all remaining 12 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6133-pathspec-rev-dwim.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6133-pathspec-rev-dwim/.git/
expecting success of 6133.1 'setup': 
	test_commit base &&
	echo content >"br[ack]ets" &&
	git add . &&
	test_tick &&
	git commit -m brackets

[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 261aa52] brackets
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 br[ack]ets
ok 1 - setup

expecting success of 6133.2 'non-rev wildcard dwims to pathspec': 
	git log -- "*.t" >expect &&
	git log    "*.t" >actual &&
	test_cmp expect actual

ok 2 - non-rev wildcard dwims to pathspec

expecting success of 6133.3 'tree:path with metacharacters dwims to rev': 
	git show "HEAD:br[ack]ets" -- >expect &&
	git show "HEAD:br[ack]ets"    >actual &&
	test_cmp expect actual

ok 3 - tree:path with metacharacters dwims to rev

expecting success of 6133.4 '^{foo} with metacharacters dwims to rev': 
	git log "HEAD^{/b.*}" -- >expect &&
	git log "HEAD^{/b.*}"    >actual &&
	test_cmp expect actual

ok 4 - ^{foo} with metacharacters dwims to rev

expecting success of 6133.5 '@{foo} with metacharacters dwims to rev': 
	git log "HEAD@{now [or thereabouts]}" -- >expect &&
	git log "HEAD@{now [or thereabouts]}"    >actual &&
	test_cmp expect actual

ok 5 - @{foo} with metacharacters dwims to rev

expecting success of 6133.6 ':/*.t from a subdir dwims to a pathspec': 
	mkdir subdir &&
	(
		cd subdir &&
		git log -- ":/*.t" >expect &&
		git log    ":/*.t" >actual &&
		test_cmp expect actual
	)

ok 6 - :/*.t from a subdir dwims to a pathspec

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6134-pathspec-in-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6134-pathspec-in-submodule/.git/
expecting success of 6134.1 'setup a submodule': 
	test_create_repo pretzel &&
	: >pretzel/a &&
	git -C pretzel add a &&
	git -C pretzel commit -m "add a file" -- a &&
	git -c protocol.file.allow=always submodule add ./pretzel sub &&
	git commit -a -m "add submodule" &&
	git submodule deinit --all

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6134-pathspec-in-submodule/pretzel/.git/
[master (root-commit) c23f8b6] add a file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6134-pathspec-in-submodule/sub'...
done.
[master (root-commit) b7d593e] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
Cleared directory 'sub'
Submodule 'sub' (./pretzel) unregistered for path 'sub'
ok 1 - setup a submodule

expecting success of 6134.2 'error message for path inside submodule': 
	echo a >sub/a &&
	test_must_fail git add sub/a 2>actual &&
	test_cmp expect actual

ok 2 - error message for path inside submodule

expecting success of 6134.3 'error message for path inside submodule from within submodule': 
	test_must_fail git -C sub add . 2>actual &&
	test_i18ngrep "in unpopulated submodule" actual

fatal: in unpopulated submodule 'sub'
ok 3 - error message for path inside submodule from within submodule

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6132-pathspec-exclude.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6132-pathspec-exclude/.git/
expecting success of 6132.1 'setup': 
	for p in file sub/file sub/sub/file sub/file2 sub/sub/sub/file sub2/file; do
		if echo $p | grep /; then
			mkdir -p $(dirname $p)
		fi &&
		: >$p &&
		git add $p &&
		git commit -m $p || return 1
	done &&
	git log --oneline --format=%s >actual &&
	cat <<EOF >expect &&
sub2/file
sub/sub/sub/file
sub/file2
sub/sub/file
sub/file
file
EOF
	test_cmp expect actual

[master (root-commit) 229083b] file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
sub/file
[master dfdea7d] sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub/file
sub/sub/file
[master 37483ca] sub/sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub/sub/file
sub/file2
[master bc3972c] sub/file2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub/file2
sub/sub/sub/file
[master a62d33f] sub/sub/sub/file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub/sub/sub/file
sub2/file
[master ddefea6] sub2/file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub2/file
ok 1 - setup

expecting success of 6132.2 'exclude only pathspec uses default implicit pathspec': 
	git log --oneline --format=%s -- . ":(exclude)sub" >expect &&
	git log --oneline --format=%s -- ":(exclude)sub" >actual &&
	test_cmp expect actual

ok 2 - exclude only pathspec uses default implicit pathspec

expecting success of 6132.3 't_e_i() exclude sub': 
	git log --oneline --format=%s -- . ":(exclude)sub" >actual &&
	cat <<EOF >expect &&
sub2/file
file
EOF
	test_cmp expect actual

ok 3 - t_e_i() exclude sub

expecting success of 6132.4 't_e_i() exclude sub/sub/file': 
	git log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual &&
	cat <<EOF >expect &&
sub2/file
sub/sub/sub/file
sub/file2
sub/file
file
EOF
	test_cmp expect actual

ok 4 - t_e_i() exclude sub/sub/file

expecting success of 6132.5 't_e_i() exclude sub using mnemonic': 
	git log --oneline --format=%s -- . ":!sub" >actual &&
	cat <<EOF >expect &&
sub2/file
file
EOF
	test_cmp expect actual

ok 5 - t_e_i() exclude sub using mnemonic

expecting success of 6132.6 't_e_i() exclude :(icase)SUB': 
	git log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual &&
	cat <<EOF >expect &&
sub2/file
file
EOF
	test_cmp expect actual

ok 6 - t_e_i() exclude :(icase)SUB

expecting success of 6132.7 't_e_i() exclude sub2 from sub': 
	(
	cd sub &&
	git log --oneline --format=%s -- :/ ":/!sub2" >actual &&
	cat <<EOF >expect &&
sub/sub/sub/file
sub/file2
sub/sub/file
sub/file
file
EOF
	test_cmp expect actual
	)

ok 7 - t_e_i() exclude sub2 from sub

expecting success of 6132.8 't_e_i() exclude sub/*file': 
	git log --oneline --format=%s -- . ":(exclude)sub/*file" >actual &&
	cat <<EOF >expect &&
sub2/file
sub/file2
file
EOF
	test_cmp expect actual

ok 8 - t_e_i() exclude sub/*file

expecting success of 6132.9 't_e_i() exclude :(glob)sub/*/file': 
	git log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual &&
	cat <<EOF >expect &&
sub2/file
sub/sub/sub/file
sub/file2
sub/file
file
EOF
	test_cmp expect actual

ok 9 - t_e_i() exclude :(glob)sub/*/file

expecting success of 6132.10 'm_p_d() exclude sub': 
	git ls-files -- . ":(exclude)sub" >actual &&
	cat <<EOF >expect &&
file
sub2/file
EOF
	test_cmp expect actual

ok 10 - m_p_d() exclude sub

expecting success of 6132.11 'm_p_d() exclude sub/sub/file': 
	git ls-files -- . ":(exclude)sub/sub/file" >actual &&
	cat <<EOF >expect &&
file
sub/file
sub/file2
sub/sub/sub/file
sub2/file
EOF
	test_cmp expect actual

ok 11 - m_p_d() exclude sub/sub/file

expecting success of 6132.12 'm_p_d() exclude sub using mnemonic': 
	git ls-files -- . ":!sub" >actual &&
	cat <<EOF >expect &&
file
sub2/file
EOF
	test_cmp expect actual

ok 12 - m_p_d() exclude sub using mnemonic

expecting success of 6132.13 'm_p_d() exclude :(icase)SUB': 
	git ls-files -- . ":(exclude,icase)SUB" >actual &&
	cat <<EOF >expect &&
file
sub2/file
EOF
	test_cmp expect actual

ok 13 - m_p_d() exclude :(icase)SUB

expecting success of 6132.14 'm_p_d() exclude sub2 from sub': 
	(
	cd sub &&
	git ls-files -- :/ ":/!sub2" >actual &&
	cat <<EOF >expect &&
../file
file
file2
sub/file
sub/sub/file
EOF
	test_cmp expect actual
	)

ok 14 - m_p_d() exclude sub2 from sub

expecting success of 6132.15 'm_p_d() exclude sub/*file': 
	git ls-files -- . ":(exclude)sub/*file" >actual &&
	cat <<EOF >expect &&
file
sub/file2
sub2/file
EOF
	test_cmp expect actual

ok 15 - m_p_d() exclude sub/*file

expecting success of 6132.16 'm_p_d() exclude :(glob)sub/*/file': 
	git ls-files -- . ":(exclude,glob)sub/*/file" >actual &&
	cat <<EOF >expect &&
file
sub/file
sub/file2
sub/sub/sub/file
sub2/file
EOF
	test_cmp expect actual

ok 16 - m_p_d() exclude :(glob)sub/*/file

expecting success of 6132.17 'multiple exclusions': 
	git ls-files -- ":^*/file2" ":^sub2" >actual &&
	cat <<-\EOF >expect &&
	file
	sub/file
	sub/sub/file
	sub/sub/sub/file
	EOF
	test_cmp expect actual

ok 17 - multiple exclusions

expecting success of 6132.18 't_e_i() exclude case #8': 
	test_when_finished "rm -fr case8" &&
	git init case8 &&
	(
		cd case8 &&
		echo file >file1 &&
		echo file >file2 &&
		git add file1 file2 &&
		git commit -m twofiles &&
		git grep -l file HEAD :^file2 >actual &&
		echo HEAD:file1 >expected &&
		test_cmp expected actual &&
		git grep -l file HEAD :^file1 >actual &&
		echo HEAD:file2 >expected &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6132-pathspec-exclude/case8/.git/
[master (root-commit) e695e35] twofiles
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
ok 18 - t_e_i() exclude case #8

expecting success of 6132.19 'grep --untracked PATTERN': 
	# This test is not an actual test of exclude patterns, rather it
	# is here solely to ensure that if any tests are inserted, deleted, or
	# changed above, that we still have untracked files with the expected
	# contents for the NEXT two tests.
	cat <<-\EOF >expect-grep &&
	actual
	expect
	sub/actual
	sub/expect
	EOF
	git grep -l --untracked file -- >actual-grep &&
	test_cmp expect-grep actual-grep

ok 19 - grep --untracked PATTERN

expecting success of 6132.20 'grep --untracked PATTERN :(exclude)DIR': 
	cat <<-\EOF >expect-grep &&
	actual
	expect
	EOF
	git grep -l --untracked file -- ":(exclude)sub" >actual-grep &&
	test_cmp expect-grep actual-grep

ok 20 - grep --untracked PATTERN :(exclude)DIR

expecting success of 6132.21 'grep --untracked PATTERN :(exclude)*FILE': 
	cat <<-\EOF >expect-grep &&
	actual
	sub/actual
	EOF
	git grep -l --untracked file -- ":(exclude)*expect" >actual-grep &&
	test_cmp expect-grep actual-grep

ok 21 - grep --untracked PATTERN :(exclude)*FILE

expecting success of 6132.22 'archive with all negative': 
	git reset --hard &&
	git clean -f &&
	git -C sub archive --format=tar HEAD -- ":!sub/" >archive &&
	"$TAR" tf archive >actual &&
	cat >expect <<-\EOF &&
	file
	file2
	EOF
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
Removing actual
Removing actual-grep
Removing expect
Removing expect-grep
Removing sub/actual
Removing sub/expect
ok 22 - archive with all negative

expecting success of 6132.23 'add with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	git clean -f &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo smudge >>"$path" || return 1
	done &&
	git -C sub add -- ":!sub/" &&
	git diff --name-only --no-renames --cached >actual &&
	cat >expect <<-\EOF &&
	file
	sub/file
	sub2/file
	EOF
	test_cmp expect actual &&
	git diff --name-only --no-renames >actual &&
	echo sub/sub/file >expect &&
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
Removing actual
Removing archive
Removing expect
HEAD is now at ddefea6 sub2/file
ok 23 - add with all negative

checking prerequisite: ADD_I_USE_BUILTIN_OR_PERL

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN_OR_PERL" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN_OR_PERL" &&
	test_have_prereq ADD_I_USE_BUILTIN || test_have_prereq PERL

)
checking prerequisite: ADD_I_USE_BUILTIN

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ADD_I_USE_BUILTIN" &&
	test_bool_env GIT_TEST_ADD_I_USE_BUILTIN true

)
prerequisite ADD_I_USE_BUILTIN ok
prerequisite ADD_I_USE_BUILTIN_OR_PERL ok
expecting success of 6132.24 'add -p with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	git clean -f &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo smudge >>"$path" || return 1
	done &&
	yes | git -C sub add -p -- ":!sub/" &&
	git diff --name-only --no-renames --cached >actual &&
	cat >expect <<-\EOF &&
	file
	sub/file
	sub2/file
	EOF
	test_cmp expect actual &&
	git diff --name-only --no-renames >actual &&
	echo sub/sub/file >expect &&
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
Removing actual
Removing expect
diff --git a/file b/file
index e69de29..15f3720 100644
--- a/file
+++ b/file
@@ -0,0 +1 @@
+smudge
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
diff --git a/sub/file b/sub/file
index e69de29..15f3720 100644
--- a/sub/file
+++ b/sub/file
@@ -0,0 +1 @@
+smudge
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
diff --git a/sub2/file b/sub2/file
index e69de29..15f3720 100644
--- a/sub2/file
+++ b/sub2/file
@@ -0,0 +1 @@
+smudge
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
HEAD is now at ddefea6 sub2/file
ok 24 - add -p with all negative

expecting success of 6132.25 'clean with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	test_when_finished "git reset --hard $H && git clean -f" &&
	git clean -f &&
	for path in file9 sub/file9 sub/sub/file9 sub2/file9
	do
		echo cruft >"$path" || return 1
	done &&
	git -C sub clean -f -- ":!sub" &&
	test_path_is_file file9 &&
	test_path_is_missing sub/file9 &&
	test_path_is_file sub/sub/file9 &&
	test_path_is_file sub2/file9

HEAD is now at ddefea6 sub2/file
Removing actual
Removing expect
Removing file9
HEAD is now at ddefea6 sub2/file
Removing file9
Removing sub/sub/file9
Removing sub2/file9
ok 25 - clean with all negative

expecting success of 6132.26 'commit with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo smudge >>"$path" || return 1
	done &&
	git -C sub commit -m sample -- ":!sub/" &&
	git diff --name-only --no-renames HEAD^ HEAD >actual &&
	cat >expect <<-\EOF &&
	file
	sub/file
	sub2/file
	EOF
	test_cmp expect actual &&
	git diff --name-only --no-renames HEAD >actual &&
	echo sub/sub/file >expect &&
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
[master cff0290] sample
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
HEAD is now at ddefea6 sub2/file
ok 26 - commit with all negative

expecting success of 6132.27 'reset with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo smudge >>"$path" &&
		git add "$path" || return 1
	done &&
	git -C sub reset --quiet -- ":!sub/" &&
	git diff --name-only --no-renames --cached >actual &&
	echo sub/sub/file >expect &&
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
HEAD is now at ddefea6 sub2/file
ok 27 - reset with all negative

expecting success of 6132.28 'grep with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo "needle $path" >>"$path" || return 1
	done &&
	git -C sub grep -h needle -- ":!sub/" >actual &&
	cat >expect <<-\EOF &&
	needle sub/file
	EOF
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
HEAD is now at ddefea6 sub2/file
ok 28 - grep with all negative

expecting success of 6132.29 'ls-files with all negative': 
	git reset --hard &&
	git -C sub ls-files -- ":!sub/" >actual &&
	cat >expect <<-\EOF &&
	file
	file2
	EOF
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
ok 29 - ls-files with all negative

expecting success of 6132.30 'rm with all negative': 
	git reset --hard &&
	test_when_finished "git reset --hard" &&
	git -C sub rm -r --cached -- ":!sub/" >actual &&
	git diff --name-only --no-renames --diff-filter=D --cached >actual &&
	cat >expect <<-\EOF &&
	sub/file
	sub/file2
	EOF
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
HEAD is now at ddefea6 sub2/file
ok 30 - rm with all negative

expecting success of 6132.31 'stash with all negative': 
	H=$(git rev-parse HEAD) &&
	git reset --hard $H &&
	test_when_finished "git reset --hard $H" &&
	for path in file sub/file sub/sub/file sub2/file
	do
		echo smudge >>"$path" || return 1
	done &&
	git -C sub stash push -m sample -- ":!sub/" &&
	git diff --name-only --no-renames HEAD >actual &&
	echo sub/sub/file >expect &&
	test_cmp expect actual &&
	git stash show --name-only >actual &&
	cat >expect <<-\EOF &&
	file
	sub/file
	sub2/file
	EOF
	test_cmp expect actual

HEAD is now at ddefea6 sub2/file
Saved working directory and index state On master: sample
HEAD is now at ddefea6 sub2/file
ok 31 - stash with all negative

# passed all 31 test(s)
1..31
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6136-pathspec-in-bare.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6136-pathspec-in-bare/.git/
expecting success of 6136.1 'setup a bare and non-bare repository': 
	test_commit file1 &&
	git clone --bare . bare

[master (root-commit) 69af168] file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1.t
Cloning into bare repository 'bare'...
done.
ok 1 - setup a bare and non-bare repository

expecting success of 6136.2 'log and ls-files in a bare repository': 
	(
		cd bare &&
		test_must_fail git log -- .. >out 2>err &&
		test_must_be_empty out &&
		test_i18ngrep "outside repository" err &&

		test_must_fail git ls-files -- .. >out 2>err &&
		test_must_be_empty out &&
		test_i18ngrep "outside repository" err
	)

fatal: ..: '..' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t6136-pathspec-in-bare/bare/.'
fatal: ..: '..' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t6136-pathspec-in-bare/bare/.'
ok 2 - log and ls-files in a bare repository

expecting success of 6136.3 'log and ls-files in .git directory': 
	(
		cd .git &&
		test_must_fail git log -- .. >out 2>err &&
		test_must_be_empty out &&
		test_i18ngrep "outside repository" err &&

		test_must_fail git ls-files -- .. >out 2>err &&
		test_must_be_empty out &&
		test_i18ngrep "outside repository" err
	)

fatal: ..: '..' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t6136-pathspec-in-bare/.git/.'
fatal: ..: '..' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t6136-pathspec-in-bare/.git/.'
ok 3 - log and ls-files in .git directory

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6135-pathspec-with-attrs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6135-pathspec-with-attrs/.git/
expecting success of 6135.1 'setup a tree': 
	cat <<-\EOF >expect &&
	fileA
	fileAB
	fileAC
	fileB
	fileBC
	fileC
	fileNoLabel
	fileSetLabel
	fileUnsetLabel
	fileValue
	fileWrongLabel
	sub/fileA
	sub/fileAB
	sub/fileAC
	sub/fileB
	sub/fileBC
	sub/fileC
	sub/fileNoLabel
	sub/fileSetLabel
	sub/fileUnsetLabel
	sub/fileValue
	sub/fileWrongLabel
	EOF
	mkdir sub &&
	while read path
	do
		echo content >$path &&
		git add $path || return 1
	done <expect &&
	git commit -m "initial commit" &&
	git ls-files >actual &&
	test_cmp expect actual

[master (root-commit) d1545c4] initial commit
 Author: A U Thor <author@example.com>
 22 files changed, 22 insertions(+)
 create mode 100644 fileA
 create mode 100644 fileAB
 create mode 100644 fileAC
 create mode 100644 fileB
 create mode 100644 fileBC
 create mode 100644 fileC
 create mode 100644 fileNoLabel
 create mode 100644 fileSetLabel
 create mode 100644 fileUnsetLabel
 create mode 100644 fileValue
 create mode 100644 fileWrongLabel
 create mode 100644 sub/fileA
 create mode 100644 sub/fileAB
 create mode 100644 sub/fileAC
 create mode 100644 sub/fileB
 create mode 100644 sub/fileBC
 create mode 100644 sub/fileC
 create mode 100644 sub/fileNoLabel
 create mode 100644 sub/fileSetLabel
 create mode 100644 sub/fileUnsetLabel
 create mode 100644 sub/fileValue
 create mode 100644 sub/fileWrongLabel
ok 1 - setup a tree

expecting success of 6135.2 'pathspec with no attr': 
	test_must_fail git ls-files ":(attr:)"

fatal: attr spec must not be empty
ok 2 - pathspec with no attr

expecting success of 6135.3 'pathspec with labels and non existent .gitattributes': 
	git ls-files ":(attr:label)" >actual &&
	test_must_be_empty actual

ok 3 - pathspec with labels and non existent .gitattributes

expecting success of 6135.4 'pathspec with labels and non existent .gitattributes (2)': 
	test_must_fail git grep content HEAD -- ":(attr:label)"

ok 4 - pathspec with labels and non existent .gitattributes (2)

expecting success of 6135.5 'setup .gitattributes': 
	cat <<-\EOF >.gitattributes &&
	fileA labelA
	fileB labelB
	fileC labelC
	fileAB labelA labelB
	fileAC labelA labelC
	fileBC labelB labelC
	fileUnsetLabel -label
	fileSetLabel label
	fileValue label=foo
	fileWrongLabel label☺
	EOF
	git add .gitattributes &&
	git commit -m "add attributes"

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
[master 99eb60a] add attributes
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 .gitattributes
ok 5 - setup .gitattributes

expecting success of 6135.6 'check specific set attr': 
	cat <<-\EOF >expect &&
	fileSetLabel
	sub/fileSetLabel
	EOF
	git ls-files ":(attr:label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 6 - check specific set attr

expecting success of 6135.7 'check specific set attr (2)': 
	cat <<-\EOF >expect &&
	HEAD:fileSetLabel
	HEAD:sub/fileSetLabel
	EOF
	git grep -l content HEAD ":(attr:label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 7 - check specific set attr (2)

expecting success of 6135.8 'check specific unset attr': 
	cat <<-\EOF >expect &&
	fileUnsetLabel
	sub/fileUnsetLabel
	EOF
	git ls-files ":(attr:-label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 8 - check specific unset attr

expecting success of 6135.9 'check specific unset attr (2)': 
	cat <<-\EOF >expect &&
	HEAD:fileUnsetLabel
	HEAD:sub/fileUnsetLabel
	EOF
	git grep -l content HEAD ":(attr:-label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 9 - check specific unset attr (2)

expecting success of 6135.10 'check specific value attr': 
	cat <<-\EOF >expect &&
	fileValue
	sub/fileValue
	EOF
	git ls-files ":(attr:label=foo)" >actual &&
	test_cmp expect actual &&
	git ls-files ":(attr:label=bar)" >actual &&
	test_must_be_empty actual

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 10 - check specific value attr

expecting success of 6135.11 'check specific value attr (2)': 
	cat <<-\EOF >expect &&
	HEAD:fileValue
	HEAD:sub/fileValue
	EOF
	git grep -l content HEAD ":(attr:label=foo)" >actual &&
	test_cmp expect actual &&
	test_must_fail git grep -l content HEAD ":(attr:label=bar)"

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 11 - check specific value attr (2)

expecting success of 6135.12 'check unspecified attr': 
	cat <<-\EOF >expect &&
	.gitattributes
	fileA
	fileAB
	fileAC
	fileB
	fileBC
	fileC
	fileNoLabel
	fileWrongLabel
	sub/fileA
	sub/fileAB
	sub/fileAC
	sub/fileB
	sub/fileBC
	sub/fileC
	sub/fileNoLabel
	sub/fileWrongLabel
	EOF
	git ls-files ":(attr:!label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 12 - check unspecified attr

expecting success of 6135.13 'check unspecified attr (2)': 
	cat <<-\EOF >expect &&
	HEAD:.gitattributes
	HEAD:fileA
	HEAD:fileAB
	HEAD:fileAC
	HEAD:fileB
	HEAD:fileBC
	HEAD:fileC
	HEAD:fileNoLabel
	HEAD:fileWrongLabel
	HEAD:sub/fileA
	HEAD:sub/fileAB
	HEAD:sub/fileAC
	HEAD:sub/fileB
	HEAD:sub/fileBC
	HEAD:sub/fileC
	HEAD:sub/fileNoLabel
	HEAD:sub/fileWrongLabel
	EOF
	git grep -l ^ HEAD ":(attr:!label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 13 - check unspecified attr (2)

expecting success of 6135.14 'check multiple unspecified attr': 
	cat <<-\EOF >expect &&
	.gitattributes
	fileC
	fileNoLabel
	fileWrongLabel
	sub/fileC
	sub/fileNoLabel
	sub/fileWrongLabel
	EOF
	git ls-files ":(attr:!labelB !labelA !label)" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 14 - check multiple unspecified attr

expecting success of 6135.15 'check label with more labels but excluded path': 
	cat <<-\EOF >expect &&
	fileAB
	fileB
	fileBC
	EOF
	git ls-files ":(attr:labelB)" ":(exclude)sub/" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 15 - check label with more labels but excluded path

expecting success of 6135.16 'check label excluding other labels': 
	cat <<-\EOF >expect &&
	fileAB
	fileB
	fileBC
	sub/fileAB
	sub/fileB
	EOF
	git ls-files ":(attr:labelB)" ":(exclude,attr:labelC)sub/" >actual &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
label☺ is not a valid attribute name: .gitattributes:10
ok 16 - check label excluding other labels

expecting success of 6135.17 'fail on multiple attr specifiers in one pathspec item': 
	test_must_fail git ls-files . ":(attr:labelB,attr:labelC)" 2>actual &&
	test_i18ngrep "Only one" actual

fatal: Only one 'attr:' specification is allowed.
ok 17 - fail on multiple attr specifiers in one pathspec item

expecting success of 6135.18 'fail if attr magic is used places not implemented': 
	# The main purpose of this test is to check that we actually fail
	# when you attempt to use attr magic in commands that do not implement
	# attr magic. This test does not advocate git-add to stay that way,
	# though, but git-add is convenient as it has its own internal pathspec
	# parsing.
	test_must_fail git add ":(attr:labelB)" 2>actual &&
	test_i18ngrep "magic not supported" actual

fatal: :(attr:labelB): pathspec magic not supported by this command: 'attr'
ok 18 - fail if attr magic is used places not implemented

expecting success of 6135.19 'abort on giving invalid label on the command line': 
	test_must_fail git ls-files . ":(attr:☺)"

fatal: invalid attribute name ☺
ok 19 - abort on giving invalid label on the command line

expecting success of 6135.20 'abort on asking for wrong magic': 
	test_must_fail git ls-files . ":(attr:-label=foo)" &&
	test_must_fail git ls-files . ":(attr:!label=foo)"

fatal: invalid attribute name label=foo
fatal: invalid attribute name label=foo
ok 20 - abort on asking for wrong magic

expecting success of 6135.21 'check attribute list': 
	cat <<-EOF >>.gitattributes &&
	* whitespace=indent,trail,space
	EOF
	git ls-files ":(attr:whitespace=indent\,trail\,space)" >actual &&
	git ls-files >expect &&
	test_cmp expect actual

label☺ is not a valid attribute name: .gitattributes:10
ok 21 - check attribute list

expecting success of 6135.22 'backslash cannot be the last character': 
	test_must_fail git ls-files ":(attr:label=foo\\ labelA=bar)" 2>actual &&
	test_i18ngrep "not allowed as last character in attr value" actual

fatal: Escape character '\' not allowed as last character in attr value
ok 22 - backslash cannot be the last character

expecting success of 6135.23 'backslash cannot be used as a value': 
	test_must_fail git ls-files ":(attr:label=f\\\oo)" 2>actual &&
	test_i18ngrep "for value matching" actual

fatal: cannot use '\' for value matching
ok 23 - backslash cannot be used as a value

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6200-fmt-merge-msg.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg/.git/
expecting success of 6200.1 'setup': 
	echo one >one &&
	git add one &&
	test_tick &&
	git commit -m "Initial" &&

	git clone . remote &&

	echo uno >one &&
	echo dos >two &&
	git add two &&
	test_tick &&
	git commit -a -m "Second" &&

	git checkout -b left &&

	echo "c1" >one &&
	test_tick &&
	git commit -a -m "Common #1" &&

	echo "c2" >one &&
	test_tick &&
	git commit -a -m "Common #2" &&

	git branch right &&

	echo "l3" >two &&
	test_tick &&
	GIT_COMMITTER_NAME="Another Committer" \
	GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #3" &&

	echo "l4" >two &&
	test_tick &&
	GIT_COMMITTER_NAME="Another Committer" \
	GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #4" &&

	echo "l5" >two &&
	test_tick &&
	GIT_COMMITTER_NAME="Another Committer" \
	GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #5" &&
	git tag tag-l5 &&

	git checkout right &&

	echo "r3" >three &&
	git add three &&
	test_tick &&
	git commit -a -m "Right #3" &&
	git tag tag-r3 &&

	echo "r4" >three &&
	test_tick &&
	git commit -a -m "Right #4" &&

	echo "r5" >three &&
	test_tick &&
	git commit -a -m "Right #5" &&

	git checkout -b long &&
	test_commit_bulk --start=0 --message=%s --filename=one 30 &&

	git show-branch &&

	apos="'"

[main (root-commit) 883c9d3] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
Cloning into 'remote'...
done.
[main 2935695] Second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 two
Switched to a new branch 'left'
[left b86daf8] Common #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[left 9f2fd7e] Common #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[left 5b6ed2c] Left #3
 Author: Another Author <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[left e382d03] Left #4
 Author: Another Author <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[left 558a9dc] Left #5
 Author: Another Author <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'right'
[right 00c8e89] Right #3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three
[right ef8635d] Right #4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[right 2d2f597] Right #5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'long'
2d2f59764b2b471b254e97b85d19c5ba8d1ed287
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           90 (         0 duplicates                  )
      blobs  :           30 (         0 duplicates          0 deltas of          0 attempts)
      trees  :           30 (         0 duplicates         29 deltas of         29 attempts)
      commits:           30 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         31
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       6806 /       6806
---------------------------------------------------------------------

! [left] Left #5
 * [long] 29
  ! [main] Second
   ! [right] Right #5
----
 *   [long] 29
 *   [long^] 28
 *   [long~2] 27
 *   [long~3] 26
 *   [long~4] 25
 *   [long~5] 24
 *   [long~6] 23
 *   [long~7] 22
 *   [long~8] 21
 *   [long~9] 20
 *   [long~10] 19
 *   [long~11] 18
 *   [long~12] 17
 *   [long~13] 16
 *   [long~14] 15
 *   [long~15] 14
 *   [long~16] 13
 *   [long~17] 12
 *   [long~18] 11
 *   [long~19] 10
 *   [long~20] 9
 *   [long~21] 8
 *   [long~22] 7
 *   [long~23] 6
 *   [long~24] 5
 *   [long~25] 4
 *   [long~26] 3
 *   [long~27] 2
 *   [long~28] 1
 *   [long~29] 0
 * + [right] Right #5
 * + [right^] Right #4
 * + [right~2] Right #3
+    [left] Left #5
+    [left^] Left #4
+    [left~2] Left #3
+* + [right~3] Common #2
+* + [right~4] Common #1
+*++ [main] Second
ok 1 - setup

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 6200.2 'set up a signed tag': 
	git tag -s -m signed-tag-msg signed-good-tag left

ok 2 - set up a signed tag

checking prerequisite: GPGSSH

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
	ssh_version=$(ssh-keygen -Y find-principals -n "git" 2>&1)
	test $? != 127 || exit 1
	echo $ssh_version | grep -q "find-principals:missing signature file"
	test $? = 0 || exit 1;

	# Setup some keys and an allowed signers file
	mkdir -p "${GNUPGHOME}" &&
	chmod 0700 "${GNUPGHOME}" &&
	(setfacl -k "${GNUPGHOME}" 2>/dev/null || true) &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null &&
	ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null &&
	ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null &&
	ssh-keygen -t ecdsa -N "" -f "${GPGSSH_KEY_ECDSA}" >/dev/null &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null &&

	cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")"
	"principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")"
	"principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")"
	"principal with number 4" $(cat "${GPGSSH_KEY_ECDSA}.pub")"
	EOF

	# Verify if at least one key and ssh-keygen works as expected
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig &&
	ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig &&
	echo "testpayload" |
	ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig

)
prerequisite GPGSSH not satisfied
ok 3 # skip created ssh signed commit and tag (missing GPGSSH)

checking prerequisite: GPGSSH_VERIFYTIME

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
	# Check if ssh-keygen has a verify-time option by passing an invalid date to it
	ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" &&

	# Set up keys with key lifetimes
	ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null &&
	key_valid=$(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null &&
	key_invalid=$(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null &&
	key_expired=$(cat "${GPGSSH_KEY_EXPIRED}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null &&
	key_notyetvalid=$(cat "${GPGSSH_KEY_NOTYETVALID}.pub") &&

	# Timestamps outside of test_tick span
	ts2005a=20050401000000 ts2005b=200504020000 &&
	# Timestamps within test_tick span
	ts2005c=20050407000000 ts2005d=200504100000 &&
	# Definitely not yet valid / expired timestamps
	ts2000=20000101000000 ts2999=29990101000000 &&

	cat >>"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"timeboxed valid key" valid-after="$ts2005c",valid-before="$ts2005d" $key_valid"
	"timeboxed invalid key" valid-after="$ts2005a",valid-before="$ts2005b" $key_invalid"
	"principal with expired key" valid-before="$ts2000" $key_expired"
	"principal with not yet valid key" valid-after="$ts2999" $key_notyetvalid"
	EOF

	# and verify ssh-keygen verifies the key lifetime
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_EXPIRED}" >gpgssh_verifytime_prereq.sig &&
	! (ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with expired key" -s gpgssh_verifytime_prereq.sig)

)
prerequisite GPGSSH_VERIFYTIME not satisfied
ok 4 # skip create signed tags with keys having defined lifetimes (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

expecting success of 6200.5 'message for merging local branch': 
	echo "Merge branch ${apos}left${apos}" >expected &&

	git checkout main &&
	git fetch . left &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Switched to branch 'main'
From .
 * branch            left       -> FETCH_HEAD
ok 5 - message for merging local branch

expecting success of 6200.6 'message for merging local tag signed by good key': 
	git checkout main &&
	git fetch . signed-good-tag &&
	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	grep "^Merge tag ${apos}signed-good-tag${apos}" actual &&
	grep "^signed-tag-msg" actual &&
	grep "^# gpg: Signature made" actual &&
	grep "^# gpg: Good signature from" actual

Already on 'main'
From .
 * tag               signed-good-tag -> FETCH_HEAD
Merge tag 'signed-good-tag'
signed-tag-msg
# gpg: Signature made Wed Dec 28 07:57:27 2022 UTC
# gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 6 - message for merging local tag signed by good key

expecting success of 6200.7 'message for merging local tag signed by unknown key': 
	git checkout main &&
	git fetch . signed-good-tag &&
	GNUPGHOME=. git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	grep "^Merge tag ${apos}signed-good-tag${apos}" actual &&
	grep "^signed-tag-msg" actual &&
	grep "^# gpg: Signature made" actual &&
	grep -E "^# gpg: Can${apos}t check signature: (public key not found|No public key)" actual

Already on 'main'
From .
 * tag               signed-good-tag -> FETCH_HEAD
Merge tag 'signed-good-tag'
signed-tag-msg
# gpg: Signature made Wed Dec 28 07:57:27 2022 UTC
# gpg: Can't check signature: No public key
ok 7 - message for merging local tag signed by unknown key

ok 8 # skip message for merging local tag signed by good ssh key (missing GPGSSH)

ok 9 # skip message for merging local tag signed by unknown ssh key (missing GPGSSH)

ok 10 # skip message for merging local tag signed by expired ssh key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 11 # skip message for merging local tag signed by not yet valid ssh key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 12 # skip message for merging local tag signed by valid timeboxed ssh key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 13 # skip message for merging local tag signed by invalid timeboxed ssh key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

expecting success of 6200.14 'message for merging external branch': 
	echo "Merge branch ${apos}left${apos} of $(pwd)" >expected &&

	git checkout main &&
	git fetch "$(pwd)" left &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
From /<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg
 * branch            left       -> FETCH_HEAD
ok 14 - message for merging external branch

expecting success of 6200.15 '[merge] summary/log configuration': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	test_config merge.log true &&
	test_unconfig merge.summary &&

	git checkout main &&
	test_tick &&
	git fetch . left &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&

	test_unconfig merge.log &&
	test_config merge.summary true &&

	git checkout main &&
	test_tick &&
	git fetch . left &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&

	test_cmp expected actual1 &&
	test_cmp expected actual2

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
ok 15 - [merge] summary/log configuration

expecting success of 6200.16 'setup FETCH_HEAD': 
	git checkout main &&
	test_tick &&
	git fetch . left

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
ok 16 - setup FETCH_HEAD

expecting success of 6200.17 'merge.log=3 limits shortlog length': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left: (5 commits)
	  Left #5
	  Left #4
	  Left #3
	  ...
	EOF

	git -c merge.log=3 fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 17 - merge.log=3 limits shortlog length

expecting success of 6200.18 'merge.log=5 shows all 5 commits': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	git -c merge.log=5 fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 18 - merge.log=5 shows all 5 commits

expecting success of 6200.19 '--log=5 with custom comment character': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	x By Another Author (3) and A U Thor (2)
	x Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	git -c core.commentchar="x" fmt-merge-msg --log=5 <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 19 - --log=5 with custom comment character

expecting success of 6200.20 'merge.log=0 disables shortlog': 
	echo "Merge branch ${apos}left${apos}" >expected &&
	git -c merge.log=0 fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 20 - merge.log=0 disables shortlog

expecting success of 6200.21 '--log=3 limits shortlog length': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left: (5 commits)
	  Left #5
	  Left #4
	  Left #3
	  ...
	EOF

	git fmt-merge-msg --log=3 <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 21 - --log=3 limits shortlog length

expecting success of 6200.22 '--log=5 shows all 5 commits': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	git fmt-merge-msg --log=5 <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 22 - --log=5 shows all 5 commits

expecting success of 6200.23 '--no-log disables shortlog': 
	echo "Merge branch ${apos}left${apos}" >expected &&
	git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 23 - --no-log disables shortlog

expecting success of 6200.24 '--log=0 disables shortlog': 
	echo "Merge branch ${apos}left${apos}" >expected &&
	git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

ok 24 - --log=0 disables shortlog

expecting success of 6200.25 'fmt-merge-msg -m': 
	echo "Sync with left" >expected &&
	cat >expected.log <<-EOF &&
	Sync with left

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* ${apos}left${apos} of $(pwd):
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	test_unconfig merge.log &&
	test_unconfig merge.summary &&
	git checkout main &&
	git fetch "$(pwd)" left &&
	git fmt-merge-msg -m "Sync with left" <.git/FETCH_HEAD >actual &&
	git fmt-merge-msg --log -m "Sync with left" \
					<.git/FETCH_HEAD >actual.log &&
	test_config merge.log true &&
	git fmt-merge-msg -m "Sync with left" \
					<.git/FETCH_HEAD >actual.log-config &&
	git fmt-merge-msg --no-log -m "Sync with left" \
					<.git/FETCH_HEAD >actual.nolog &&

	test_cmp expected actual &&
	test_cmp expected.log actual.log &&
	test_cmp expected.log actual.log-config &&
	test_cmp expected actual.nolog

Already on 'main'
From /<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg
 * branch            left       -> FETCH_HEAD
ok 25 - fmt-merge-msg -m

expecting success of 6200.26 'setup: expected shortlog for two branches': 
	cat >expected <<-EOF
	Merge branches ${apos}left${apos} and ${apos}right${apos}

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1

	* right:
	  Right #5
	  Right #4
	  Right #3
	  Common #2
	  Common #1
	EOF

ok 26 - setup: expected shortlog for two branches

expecting success of 6200.27 'shortlog for two branches': 
	test_config merge.log true &&
	test_unconfig merge.summary &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&

	test_unconfig merge.log &&
	test_config merge.summary true &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&

	test_config merge.log yes &&
	test_unconfig merge.summary &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	git fmt-merge-msg <.git/FETCH_HEAD >actual3 &&

	test_unconfig merge.log &&
	test_config merge.summary yes &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	git fmt-merge-msg <.git/FETCH_HEAD >actual4 &&

	test_cmp expected actual1 &&
	test_cmp expected actual2 &&
	test_cmp expected actual3 &&
	test_cmp expected actual4

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
ok 27 - shortlog for two branches

expecting success of 6200.28 'merge-msg -F': 
	test_unconfig merge.log &&
	test_config merge.summary yes &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	git fmt-merge-msg -F .git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
ok 28 - merge-msg -F

expecting success of 6200.29 'merge-msg -F in subdirectory': 
	test_unconfig merge.log &&
	test_config merge.summary yes &&
	git checkout main &&
	test_tick &&
	git fetch . left right &&
	mkdir sub &&
	cp .git/FETCH_HEAD sub/FETCH_HEAD &&
	(
		cd sub &&
		git fmt-merge-msg -F FETCH_HEAD >../actual
	) &&
	test_cmp expected actual

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
ok 29 - merge-msg -F in subdirectory

expecting success of 6200.30 'merge-msg with nothing to merge': 
	test_unconfig merge.log &&
	test_config merge.summary yes &&

	(
		cd remote &&
		git checkout -b unrelated &&
		test_tick &&
		git fetch origin &&
		git fmt-merge-msg <.git/FETCH_HEAD >../actual
	) &&

	test_must_be_empty actual

Switched to a new branch 'unrelated'
From /<<PKGBUILDDIR>>/t/trash directory.t6200-fmt-merge-msg/.
 * [new branch]      left            -> origin/left
 * [new branch]      long            -> origin/long
   883c9d3..2935695  main            -> origin/main
 * [new branch]      right           -> origin/right
 * [new tag]         signed-good-tag -> signed-good-tag
 * [new tag]         tag-l5          -> tag-l5
 * [new tag]         tag-r3          -> tag-r3
ok 30 - merge-msg with nothing to merge

expecting success of 6200.31 'merge-msg tag': 
	cat >expected <<-EOF &&
	Merge tag ${apos}tag-r3${apos}

	* tag ${apos}tag-r3${apos}:
	  Right #3
	  Common #2
	  Common #1
	EOF

	test_unconfig merge.log &&
	test_config merge.summary yes &&

	git checkout main &&
	test_tick &&
	git fetch . tag tag-r3 &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
ok 31 - merge-msg tag

expecting success of 6200.32 'merge-msg two tags': 
	cat >expected <<-EOF &&
	Merge tags ${apos}tag-r3${apos} and ${apos}tag-l5${apos}

	* tag ${apos}tag-r3${apos}:
	  Right #3
	  Common #2
	  Common #1

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* tag ${apos}tag-l5${apos}:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	test_unconfig merge.log &&
	test_config merge.summary yes &&

	git checkout main &&
	test_tick &&
	git fetch . tag tag-r3 tag tag-l5 &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
ok 32 - merge-msg two tags

expecting success of 6200.33 'merge-msg tag and branch': 
	cat >expected <<-EOF &&
	Merge branch ${apos}left${apos}, tag ${apos}tag-r3${apos}

	* tag ${apos}tag-r3${apos}:
	  Right #3
	  Common #2
	  Common #1

	# By Another Author (3) and A U Thor (2)
	# Via Another Committer
	* left:
	  Left #5
	  Left #4
	  Left #3
	  Common #2
	  Common #1
	EOF

	test_unconfig merge.log &&
	test_config merge.summary yes &&

	git checkout main &&
	test_tick &&
	git fetch . tag tag-r3 left &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
From .
 * branch            left       -> FETCH_HEAD
ok 33 - merge-msg tag and branch

expecting success of 6200.34 'merge-msg lots of commits': 
	{
		cat <<-EOF &&
		Merge branch ${apos}long${apos}

		* long: (35 commits)
		EOF

		i=29 &&
		while test $i -gt 9
		do
			echo "  $i" &&
			i=$(($i-1)) || return 1
		done &&
		echo "  ..."
	} >expected &&

	test_config merge.summary yes &&

	git checkout main &&
	test_tick &&
	git fetch . long &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	test_cmp expected actual

Already on 'main'
From .
 * branch            long       -> FETCH_HEAD
ok 34 - merge-msg lots of commits

expecting success of 6200.35 'merge-msg with "merging" an annotated tag': 
	test_config merge.log true &&

	git checkout main^0 &&
	git commit --allow-empty -m "One step ahead" &&
	git tag -a -m "An annotated one" annote HEAD &&

	git checkout main &&
	git fetch . annote &&

	git fmt-merge-msg <.git/FETCH_HEAD >actual &&
	{
		cat <<-\EOF
		Merge tag 'annote'

		An annotated one

		* tag 'annote':
		  One step ahead
		EOF
	} >expected &&
	test_cmp expected actual &&

	test_when_finished "git reset --hard" &&
	annote=$(git rev-parse annote) &&
	git merge --no-commit --no-ff $annote &&
	{
		cat <<-EOF
		Merge tag '$annote'

		An annotated one

		* tag '$annote':
		  One step ahead
		EOF
	} >expected &&
	test_cmp expected .git/MERGE_MSG

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2935695 Second
[detached HEAD a1b29db] One step ahead
 Author: A U Thor <author@example.com>
Previous HEAD position was a1b29db One step ahead
Switched to branch 'main'
From .
 * tag               annote     -> FETCH_HEAD
Automatic merge went well; stopped before committing as requested
HEAD is now at 2935695 Second
ok 35 - merge-msg with "merging" an annotated tag

expecting success of 6200.36 'merge --into-name=<name>': 
	test_when_finished "git checkout main" &&
	git checkout -B side main &&
	git commit --allow-empty -m "One step ahead" &&

	git checkout --detach main &&
	git merge --no-ff side &&
	git show -s --format="%s" >full.0 &&
	head -n1 full.0 >actual &&
	# expect that HEAD is shown as-is
	grep -e "Merge branch .side. into HEAD$" actual &&

	git reset --hard main &&
	git merge --no-ff --into-name=main side &&
	git show -s --format="%s" >full.1 &&
	head -n1 full.1 >actual &&
	# expect that we pretend to be merging to main, that is suppressed
	grep -e "Merge branch .side.$" actual &&

	git checkout -b throwaway main &&
	git merge --no-ff --into-name=main side &&
	git show -s --format="%s" >full.2 &&
	head -n1 full.2 >actual &&
	# expect that we pretend to be merging to main, that is suppressed
	grep -e "Merge branch .side.$" actual

Switched to a new branch 'side'
[side a1b29db] One step ahead
 Author: A U Thor <author@example.com>
HEAD is now at 2935695 Second
Merge made by the 'ort' strategy.
Merge branch 'side' into HEAD
HEAD is now at 2935695 Second
Merge made by the 'ort' strategy.
Merge branch 'side'
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  e60d2f8 Merge branch 'side'

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> e60d2f8

Switched to a new branch 'throwaway'
Merge made by the 'ort' strategy.
Merge branch 'side'
Switched to branch 'main'
ok 36 - merge --into-name=<name>

expecting success of 6200.37 'merge.suppressDest configuration': 
	test_when_finished "git checkout main" &&
	git checkout -B side main &&
	git commit --allow-empty -m "One step ahead" &&
	git checkout main &&
	git fetch . side &&

	git -c merge.suppressDest="" fmt-merge-msg <.git/FETCH_HEAD >full.1 &&
	head -n1 full.1 >actual &&
	grep -e "Merge branch .side. into main" actual &&

	git -c merge.suppressDest="mast" fmt-merge-msg <.git/FETCH_HEAD >full.2 &&
	head -n1 full.2 >actual &&
	grep -e "Merge branch .side. into main$" actual &&

	git -c merge.suppressDest="ma?*[rn]" fmt-merge-msg <.git/FETCH_HEAD >full.3 &&
	head -n1 full.3 >actual &&
	grep -e "Merge branch .side." actual &&
	! grep -e " into main$" actual &&

	git checkout --detach HEAD &&
	git -c merge.suppressDest="main" fmt-merge-msg <.git/FETCH_HEAD >full.4 &&
	head -n1 full.4 >actual &&
	grep -e "Merge branch .side. into HEAD$" actual &&

	git -c merge.suppressDest="main" fmt-merge-msg \
		--into-name=main <.git/FETCH_HEAD >full.5 &&
	head -n1 full.5 >actual &&
	grep -e "Merge branch .side." actual &&
	! grep -e " into main$" actual &&
	! grep -e " into HEAD$" actual

Switched to and reset branch 'side'
[side a1b29db] One step ahead
 Author: A U Thor <author@example.com>
Switched to branch 'main'
From .
 * branch            side       -> FETCH_HEAD
Merge branch 'side' into main
Merge branch 'side' into main
Merge branch 'side'
HEAD is now at 2935695 Second
Merge branch 'side' into HEAD
Merge branch 'side'
Switched to branch 'main'
ok 37 - merge.suppressDest configuration

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6301-for-each-ref-errors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6301-for-each-ref-errors/.git/
expecting success of 6301.1 'setup': 
	MISSING=$(test_oid deadbeef) &&
	git commit --allow-empty -m "Initial" &&
	git tag testtag &&
	git for-each-ref >full-list &&
	git for-each-ref --format="%(objectname) %(refname)" >brief-list

[master (root-commit) d31adcd] Initial
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 6301.2 'Broken refs are reported correctly': 
	r=refs/heads/bogus &&
	: >.git/$r &&
	test_when_finished "rm -f .git/$r" &&
	echo "warning: ignoring broken ref $r" >broken-err &&
	git for-each-ref >out 2>err &&
	test_cmp full-list out &&
	test_cmp broken-err err

ok 2 - Broken refs are reported correctly

expecting success of 6301.3 'NULL_SHA1 refs are reported correctly': 
	r=refs/heads/zeros &&
	echo $ZEROS >.git/$r &&
	test_when_finished "rm -f .git/$r" &&
	echo "warning: ignoring broken ref $r" >zeros-err &&
	git for-each-ref >out 2>err &&
	test_cmp full-list out &&
	test_cmp zeros-err err &&
	git for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&
	test_cmp brief-list brief-out &&
	test_cmp zeros-err brief-err

ok 3 - NULL_SHA1 refs are reported correctly

expecting success of 6301.4 'Missing objects are reported correctly': 
	r=refs/heads/missing &&
	echo $MISSING >.git/$r &&
	test_when_finished "rm -f .git/$r" &&
	echo "fatal: missing object $MISSING for $r" >missing-err &&
	test_must_fail git for-each-ref 2>err &&
	test_cmp missing-err err &&
	(
		cat brief-list &&
		echo "$MISSING $r"
	) | sort -k 2 >missing-brief-expected &&
	git for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&
	test_cmp missing-brief-expected brief-out &&
	test_must_be_empty brief-err

ok 4 - Missing objects are reported correctly

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6302-for-each-ref-filter.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6302-for-each-ref-filter/.git/
expecting success of 6302.1 'setup some history and refs': 
	test_commit one &&
	git branch -M main &&
	test_commit two &&
	test_commit three &&
	git checkout -b side &&
	test_commit four &&
	git tag -m "An annotated tag" annotated-tag &&
	git tag -m "Annonated doubly" doubly-annotated-tag annotated-tag &&

	# Note that these "signed" tags might not actually be signed.
	# Tests which care about the distinction should be marked
	# with the GPG prereq.
	if test_have_prereq GPG
	then
		sign=-s
	else
		sign=
	fi &&
	git tag $sign -m "A signed tag" signed-tag &&
	git tag $sign -m "Signed doubly" doubly-signed-tag signed-tag &&

	git checkout main &&
	git update-ref refs/odd/spot main

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[main 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to a new branch 'side'
[side fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f doubly-annotated-tag annotated-tag^{}
hint: Disable this message with "git config advice.nestedTag false"
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t6302-for-each-ref-filter/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t6302-for-each-ref-filter/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f doubly-signed-tag signed-tag^{}
hint: Disable this message with "git config advice.nestedTag false"
Switched to branch 'main'
ok 1 - setup some history and refs

expecting success of 6302.2 'filtering with --points-at': 
	cat >expect <<-\EOF &&
	refs/heads/main
	refs/odd/spot
	refs/tags/three
	EOF
	git for-each-ref --format="%(refname)" --points-at=main >actual &&
	test_cmp expect actual

ok 2 - filtering with --points-at

expecting success of 6302.3 'check signed tags with --points-at': 
	sed -e "s/Z$//" >expect <<-\EOF &&
	refs/heads/side Z
	refs/tags/annotated-tag four
	refs/tags/four Z
	refs/tags/signed-tag four
	EOF
	git for-each-ref --format="%(refname) %(*subject)" --points-at=side >actual &&
	test_cmp expect actual

ok 3 - check signed tags with --points-at

expecting success of 6302.4 'filtering with --merged': 
	cat >expect <<-\EOF &&
	refs/heads/main
	refs/odd/spot
	refs/tags/one
	refs/tags/three
	refs/tags/two
	EOF
	git for-each-ref --format="%(refname)" --merged=main >actual &&
	test_cmp expect actual

ok 4 - filtering with --merged

expecting success of 6302.5 'filtering with --no-merged': 
	cat >expect <<-\EOF &&
	refs/heads/side
	refs/tags/annotated-tag
	refs/tags/doubly-annotated-tag
	refs/tags/doubly-signed-tag
	refs/tags/four
	refs/tags/signed-tag
	EOF
	git for-each-ref --format="%(refname)" --no-merged=main >actual &&
	test_cmp expect actual

ok 5 - filtering with --no-merged

expecting success of 6302.6 'filtering with --contains': 
	cat >expect <<-\EOF &&
	refs/heads/main
	refs/heads/side
	refs/odd/spot
	refs/tags/annotated-tag
	refs/tags/doubly-annotated-tag
	refs/tags/doubly-signed-tag
	refs/tags/four
	refs/tags/signed-tag
	refs/tags/three
	refs/tags/two
	EOF
	git for-each-ref --format="%(refname)" --contains=two >actual &&
	test_cmp expect actual

ok 6 - filtering with --contains

expecting success of 6302.7 'filtering with --no-contains': 
	cat >expect <<-\EOF &&
	refs/tags/one
	EOF
	git for-each-ref --format="%(refname)" --no-contains=two >actual &&
	test_cmp expect actual

ok 7 - filtering with --no-contains

expecting success of 6302.8 'filtering with --contains and --no-contains': 
	cat >expect <<-\EOF &&
	refs/tags/two
	EOF
	git for-each-ref --format="%(refname)" --contains=two --no-contains=three >actual &&
	test_cmp expect actual

ok 8 - filtering with --contains and --no-contains

expecting success of 6302.9 '%(color) must fail': 
	test_must_fail git for-each-ref --format="%(color)%(refname)"

fatal: expected format: %(color:<color>)
ok 9 - %(color) must fail

expecting success of 6302.10 '%(color:#aa22ac) must succeed': 
	test_when_finished rm -rf test &&
	git init test &&
	(
		cd test &&
		test_commit initial &&
		git branch -M main &&
		cat >expect <<-\EOF &&
		refs/heads/main
		refs/tags/initial
		EOF
		git remote add origin nowhere &&
		git config branch.main.remote origin &&
		git config branch.main.merge refs/heads/main &&
		git for-each-ref --format="%(color:#aa22ac)%(refname)" >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6302-for-each-ref-filter/test/.git/
[master (root-commit) 23fa7ba] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 10 - %(color:#aa22ac) must succeed

expecting success of 6302.11 'left alignment is default': 
	cat >expect <<-\EOF &&
	refname is refs/heads/main    |refs/heads/main
	refname is refs/heads/side    |refs/heads/side
	refname is refs/odd/spot      |refs/odd/spot
	refname is refs/tags/annotated-tag|refs/tags/annotated-tag
	refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
	refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
	refname is refs/tags/four     |refs/tags/four
	refname is refs/tags/one      |refs/tags/one
	refname is refs/tags/signed-tag|refs/tags/signed-tag
	refname is refs/tags/three    |refs/tags/three
	refname is refs/tags/two      |refs/tags/two
	EOF
	git for-each-ref --format="%(align:30)refname is %(refname)%(end)|%(refname)" >actual &&
	test_cmp expect actual

ok 11 - left alignment is default

expecting success of 6302.12 'middle alignment': 
	cat >expect <<-\EOF &&
	|  refname is refs/heads/main  |refs/heads/main
	|  refname is refs/heads/side  |refs/heads/side
	|   refname is refs/odd/spot   |refs/odd/spot
	|refname is refs/tags/annotated-tag|refs/tags/annotated-tag
	|refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
	|refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
	|  refname is refs/tags/four   |refs/tags/four
	|   refname is refs/tags/one   |refs/tags/one
	|refname is refs/tags/signed-tag|refs/tags/signed-tag
	|  refname is refs/tags/three  |refs/tags/three
	|   refname is refs/tags/two   |refs/tags/two
	EOF
	git for-each-ref --format="|%(align:middle,30)refname is %(refname)%(end)|%(refname)" >actual &&
	test_cmp expect actual

ok 12 - middle alignment

expecting success of 6302.13 'right alignment': 
	cat >expect <<-\EOF &&
	|    refname is refs/heads/main|refs/heads/main
	|    refname is refs/heads/side|refs/heads/side
	|      refname is refs/odd/spot|refs/odd/spot
	|refname is refs/tags/annotated-tag|refs/tags/annotated-tag
	|refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
	|refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
	|     refname is refs/tags/four|refs/tags/four
	|      refname is refs/tags/one|refs/tags/one
	|refname is refs/tags/signed-tag|refs/tags/signed-tag
	|    refname is refs/tags/three|refs/tags/three
	|      refname is refs/tags/two|refs/tags/two
	EOF
	git for-each-ref --format="|%(align:30,right)refname is %(refname)%(end)|%(refname)" >actual &&
	test_cmp expect actual

ok 13 - right alignment

expecting success of 6302.14 'align:middle,42': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 14 - align:middle,42

expecting success of 6302.15 'align:42,middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 15 - align:42,middle

expecting success of 6302.16 'align:position=middle,42': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 16 - align:position=middle,42

expecting success of 6302.17 'align:42,position=middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 17 - align:42,position=middle

expecting success of 6302.18 'align:middle,width=42': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 18 - align:middle,width=42

expecting success of 6302.19 'align:width=42,middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 19 - align:width=42,middle

expecting success of 6302.20 'align:position=middle,width=42': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 20 - align:position=middle,width=42

expecting success of 6302.21 'align:width=42,position=middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 21 - align:width=42,position=middle

expecting success of 6302.22 'align:32,width=42,middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 22 - align:32,width=42,middle

expecting success of 6302.23 'align:width=30,42,middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 23 - align:width=30,42,middle

expecting success of 6302.24 'align:width=42,position=right,middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 24 - align:width=42,position=right,middle

expecting success of 6302.25 'align:42,right,position=middle': 
			git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
			test_cmp expect actual
		
ok 25 - align:42,right,position=middle

expecting success of 6302.26 'alignment with format quote': 
	cat >expect <<-\EOF &&
	|'       '\''main| A U Thor'\''       '|
	|'       '\''side| A U Thor'\''       '|
	|'     '\''odd/spot| A U Thor'\''     '|
	|'      '\''annotated-tag| '\''       '|
	|'   '\''doubly-annotated-tag| '\''   '|
	|'    '\''doubly-signed-tag| '\''     '|
	|'       '\''four| A U Thor'\''       '|
	|'       '\''one| A U Thor'\''        '|
	|'        '\''signed-tag| '\''        '|
	|'      '\''three| A U Thor'\''       '|
	|'       '\''two| A U Thor'\''        '|
	EOF
	git for-each-ref --shell --format="|%(align:30,middle)'%(refname:short)| %(authorname)'%(end)|" >actual &&
	test_cmp expect actual

ok 26 - alignment with format quote

expecting success of 6302.27 'nested alignment with quote formatting': 
	cat >expect <<-\EOF &&
	|'           main               '|
	|'           side               '|
	|'       odd/spot               '|
	|'  annotated-tag               '|
	|'doubly-annotated-tag          '|
	|'doubly-signed-tag             '|
	|'           four               '|
	|'            one               '|
	|'     signed-tag               '|
	|'          three               '|
	|'            two               '|
	EOF
	git for-each-ref --shell --format='|%(align:30,left)%(align:15,right)%(refname:short)%(end)%(end)|' >actual &&
	test_cmp expect actual

ok 27 - nested alignment with quote formatting

expecting success of 6302.28 'check `%(contents:lines=1)`': 
	cat >expect <<-\EOF &&
	main |three
	side |four
	odd/spot |three
	annotated-tag |An annotated tag
	doubly-annotated-tag |Annonated doubly
	doubly-signed-tag |Signed doubly
	four |four
	one |one
	signed-tag |A signed tag
	three |three
	two |two
	EOF
	git for-each-ref --format="%(refname:short) |%(contents:lines=1)" >actual &&
	test_cmp expect actual

ok 28 - check `%(contents:lines=1)`

expecting success of 6302.29 'check `%(contents:lines=0)`': 
	cat >expect <<-\EOF &&
	main |
	side |
	odd/spot |
	annotated-tag |
	doubly-annotated-tag |
	doubly-signed-tag |
	four |
	one |
	signed-tag |
	three |
	two |
	EOF
	git for-each-ref --format="%(refname:short) |%(contents:lines=0)" >actual &&
	test_cmp expect actual

ok 29 - check `%(contents:lines=0)`

expecting success of 6302.30 'check `%(contents:lines=99999)`': 
	cat >expect <<-\EOF &&
	main |three
	side |four
	odd/spot |three
	annotated-tag |An annotated tag
	doubly-annotated-tag |Annonated doubly
	doubly-signed-tag |Signed doubly
	four |four
	one |one
	signed-tag |A signed tag
	three |three
	two |two
	EOF
	git for-each-ref --format="%(refname:short) |%(contents:lines=99999)" >actual &&
	test_cmp expect actual

ok 30 - check `%(contents:lines=99999)`

expecting success of 6302.31 '`%(contents:lines=-1)` should fail': 
	test_must_fail git for-each-ref --format="%(refname:short) |%(contents:lines=-1)"

fatal: positive value expected contents:lines=-1
ok 31 - `%(contents:lines=-1)` should fail

expecting success of 6302.32 'setup for version sort': 
	test_commit foo1.3 &&
	test_commit foo1.6 &&
	test_commit foo1.10

[main a83f331] foo1.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo1.3.t
[main 3b57b15] foo1.6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo1.6.t
[main bef9c52] foo1.10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo1.10.t
ok 32 - setup for version sort

expecting success of 6302.33 'version sort': 
	git for-each-ref --sort=version:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
	cat >expect <<-\EOF &&
	foo1.3
	foo1.6
	foo1.10
	EOF
	test_cmp expect actual

ok 33 - version sort

expecting success of 6302.34 'version sort (shortened)': 
	git for-each-ref --sort=v:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
	cat >expect <<-\EOF &&
	foo1.3
	foo1.6
	foo1.10
	EOF
	test_cmp expect actual

ok 34 - version sort (shortened)

expecting success of 6302.35 'reverse version sort': 
	git for-each-ref --sort=-version:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
	cat >expect <<-\EOF &&
	foo1.10
	foo1.6
	foo1.3
	EOF
	test_cmp expect actual

ok 35 - reverse version sort

expecting success of 6302.36 'improper usage of %(if), %(then), %(else) and %(end) atoms': 
	test_must_fail git for-each-ref --format="%(if)" &&
	test_must_fail git for-each-ref --format="%(then) %(end)" &&
	test_must_fail git for-each-ref --format="%(else) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(else) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(then) %(then) %(end)" &&
	test_must_fail git for-each-ref --format="%(then) %(else) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(else) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(then) %(else)" &&
	test_must_fail git for-each-ref --format="%(if) %(else) %(then) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(then) %(else) %(else) %(end)" &&
	test_must_fail git for-each-ref --format="%(if) %(end)"

fatal: format: %(end) atom missing
fatal: format: %(then) atom used without a %(if) atom
fatal: format: %(else) atom used without a %(if) atom
fatal: format: %(else) atom used without a %(then) atom
fatal: format: %(then) atom used more than once
fatal: format: %(then) atom used without a %(if) atom
fatal: format: %(else) atom used without a %(then) atom
fatal: format: %(end) atom missing
fatal: format: %(else) atom used without a %(then) atom
fatal: format: %(else) atom used more than once
fatal: format: %(if) atom used without a %(then) atom
ok 36 - improper usage of %(if), %(then), %(else) and %(end) atoms

expecting success of 6302.37 'check %(if)...%(then)...%(end) atoms': 
	git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Author: %(authorname)%(end)" >actual &&
	cat >expect <<-\EOF &&
	refs/heads/main Author: A U Thor
	refs/heads/side Author: A U Thor
	refs/odd/spot Author: A U Thor
	refs/tags/annotated-tag
	refs/tags/doubly-annotated-tag
	refs/tags/doubly-signed-tag
	refs/tags/foo1.10 Author: A U Thor
	refs/tags/foo1.3 Author: A U Thor
	refs/tags/foo1.6 Author: A U Thor
	refs/tags/four Author: A U Thor
	refs/tags/one Author: A U Thor
	refs/tags/signed-tag
	refs/tags/three Author: A U Thor
	refs/tags/two Author: A U Thor
	EOF
	test_cmp expect actual

ok 37 - check %(if)...%(then)...%(end) atoms

expecting success of 6302.38 'check %(if)...%(then)...%(else)...%(end) atoms': 
	git for-each-ref --format="%(if)%(authorname)%(then)%(authorname)%(else)No author%(end): %(refname)" >actual &&
	cat >expect <<-\EOF &&
	A U Thor: refs/heads/main
	A U Thor: refs/heads/side
	A U Thor: refs/odd/spot
	No author: refs/tags/annotated-tag
	No author: refs/tags/doubly-annotated-tag
	No author: refs/tags/doubly-signed-tag
	A U Thor: refs/tags/foo1.10
	A U Thor: refs/tags/foo1.3
	A U Thor: refs/tags/foo1.6
	A U Thor: refs/tags/four
	A U Thor: refs/tags/one
	No author: refs/tags/signed-tag
	A U Thor: refs/tags/three
	A U Thor: refs/tags/two
	EOF
	test_cmp expect actual

ok 38 - check %(if)...%(then)...%(else)...%(end) atoms

expecting success of 6302.39 'ignore spaces in %(if) atom usage': 
	git for-each-ref --format="%(refname:short): %(if)%(HEAD)%(then)Head ref%(else)Not Head ref%(end)" >actual &&
	cat >expect <<-\EOF &&
	main: Head ref
	side: Not Head ref
	odd/spot: Not Head ref
	annotated-tag: Not Head ref
	doubly-annotated-tag: Not Head ref
	doubly-signed-tag: Not Head ref
	foo1.10: Not Head ref
	foo1.3: Not Head ref
	foo1.6: Not Head ref
	four: Not Head ref
	one: Not Head ref
	signed-tag: Not Head ref
	three: Not Head ref
	two: Not Head ref
	EOF
	test_cmp expect actual

ok 39 - ignore spaces in %(if) atom usage

expecting success of 6302.40 'check %(if:equals=<string>)': 
	git for-each-ref --format="%(if:equals=main)%(refname:short)%(then)Found main%(else)Not main%(end)" refs/heads/ >actual &&
	cat >expect <<-\EOF &&
	Found main
	Not main
	EOF
	test_cmp expect actual

ok 40 - check %(if:equals=<string>)

expecting success of 6302.41 'check %(if:notequals=<string>)': 
	git for-each-ref --format="%(if:notequals=main)%(refname:short)%(then)Not main%(else)Found main%(end)" refs/heads/ >actual &&
	cat >expect <<-\EOF &&
	Found main
	Not main
	EOF
	test_cmp expect actual

ok 41 - check %(if:notequals=<string>)

expecting success of 6302.42 '--merged is compatible with --no-merged': 
	git for-each-ref --merged HEAD --no-merged HEAD

ok 42 - --merged is compatible with --no-merged

expecting success of 6302.43 'validate worktree atom': 
	cat >expect <<-EOF &&
	main: $(pwd)
	main_worktree: $(pwd)/worktree_dir
	side: not checked out
	EOF
	git worktree add -b main_worktree worktree_dir main &&
	git for-each-ref --format="%(refname:short): %(if)%(worktreepath)%(then)%(worktreepath)%(else)not checked out%(end)" refs/heads/ >actual &&
	rm -r worktree_dir &&
	git worktree prune &&
	test_cmp expect actual

Preparing worktree (new branch 'main_worktree')
HEAD is now at bef9c52 foo1.10
ok 43 - validate worktree atom

# passed all 43 test(s)
1..43
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6120-describe.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/.git/
expecting success of 6120.1 'setup': 
	test_commit initial file one &&
	test_commit second file two &&
	test_commit third file three &&
	test_commit --annotate A file A &&
	test_commit c file c &&

	git reset --hard second &&
	test_commit --annotate B side B &&

	test_tick &&
	git merge -m Merged c &&
	merged=$(git rev-parse HEAD) &&

	git reset --hard second &&
	test_commit --no-tag D another D &&

	test_tick &&
	git tag -a -m R R &&

	test_commit e another DD &&
	test_commit --no-tag "yet another" another DDD &&

	test_tick &&
	git merge -m Merged $merged &&

	test_commit --no-tag x file

[main (root-commit) 50b0198] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 612fe8f] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c48449d] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 4185ee1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2ad5867] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 612fe8f second
[main ab2da11] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 612fe8f second
[main de803f5] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 another
[main d7863c7] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 2976a87] yet another
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ort' strategy.
 file | 2 +-
 side | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 side
[main 8348027] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6120.2 'describe HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 2 - describe HEAD

expecting success of 6120.3 'describe HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 3 - describe HEAD^

expecting success of 6120.4 'describe HEAD^^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 4 - describe HEAD^^

expecting success of 6120.5 'describe HEAD^^2': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 5 - describe HEAD^^2

expecting success of 6120.6 'describe HEAD^^2^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 6 - describe HEAD^^2^

expecting success of 6120.7 'describe HEAD^^^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 7 - describe HEAD^^^

expecting success of 6120.8 'describe --tags HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 8 - describe --tags HEAD

expecting success of 6120.9 'describe --tags HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 9 - describe --tags HEAD^

expecting success of 6120.10 'describe --tags HEAD^^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 10 - describe --tags HEAD^^

expecting success of 6120.11 'describe --tags HEAD^^2': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 11 - describe --tags HEAD^^2

expecting success of 6120.12 'describe --tags HEAD^^2^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 12 - describe --tags HEAD^^2^

expecting success of 6120.13 'describe --tags HEAD^^^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 13 - describe --tags HEAD^^^

expecting success of 6120.14 'describe --all HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 14 - describe --all HEAD

expecting success of 6120.15 'describe --all HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 15 - describe --all HEAD^

expecting success of 6120.16 'describe --all HEAD^^^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 16 - describe --all HEAD^^^

expecting success of 6120.17 'describe --long HEAD^^2^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 17 - describe --long HEAD^^2^

expecting success of 6120.18 'describe --long HEAD^^2': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 18 - describe --long HEAD^^2

expecting success of 6120.19 'describe --tags': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 19 - describe --tags

expecting success of 6120.20 'describe --first-parent --tags': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 20 - describe --first-parent --tags

expecting success of 6120.21 'describe --contains defaults to HEAD without commit-ish': 
	echo "A^0" >expect &&
	git checkout A &&
	test_when_finished "git checkout -" &&
	git describe --contains >actual &&
	test_cmp expect actual

Note: switching to 'A'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4185ee1 A
Previous HEAD position was 4185ee1 A
Switched to branch 'main'
ok 21 - describe --contains defaults to HEAD without commit-ish

expecting success of 6120.22 'describe --all A^0': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 22 - describe --all A^0

expecting success of 6120.23 'renaming tag A to Q locally produces a warning': 
	git update-ref refs/tags/Q 55df63e2ee451f5e94b616290370a7fad83fc98b &&
	git update-ref -d refs/tags/A &&
	git describe HEAD 2>err >out &&
	cat >expected <<-\EOF &&
	warning: tag 'Q' is externally known as 'A'
	EOF
	test_cmp expected err &&
	grep -E '^A-8-g[0-9a-f]+$' out

A-8-g8348027
ok 23 - renaming tag A to Q locally produces a warning

expecting success of 6120.24 'misnamed annotated tag forces long output': 
	description=$(git describe --no-long Q^0) &&
	expr "$description" : "A-0-g[0-9a-f]*$" &&
	git rev-parse --verify "$description" >actual &&
	git rev-parse --verify Q^0 >expect &&
	test_cmp expect actual

warning: tag 'Q' is externally known as 'A'
12
ok 24 - misnamed annotated tag forces long output

expecting success of 6120.25 'abbrev=0 will not break misplaced tag (1)': 
	description=$(git describe --abbrev=0 Q^0) &&
	expr "$description" : "A-0-g[0-9a-f]*$"

warning: tag 'Q' is externally known as 'A'
45
ok 25 - abbrev=0 will not break misplaced tag (1)

expecting success of 6120.26 'abbrev=0 will not break misplaced tag (2)': 
	description=$(git describe --abbrev=0 c^0) &&
	expr "$description" : "A-1-g[0-9a-f]*$"

warning: tag 'Q' is externally known as 'A'
45
ok 26 - abbrev=0 will not break misplaced tag (2)

expecting success of 6120.27 'rename tag Q back to A': 
	git update-ref refs/tags/A $(git rev-parse refs/tags/Q) &&
	git update-ref -d refs/tags/Q

ok 27 - rename tag Q back to A

expecting success of 6120.28 'pack tag refs': git pack-refs
ok 28 - pack tag refs

expecting success of 6120.29 'describe HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 29 - describe HEAD

expecting success of 6120.30 'describe works from outside repo using --git-dir': 
	git clone --bare "$TRASH_DIRECTORY" "$TRASH_DIRECTORY/bare" &&
	git --git-dir "$TRASH_DIRECTORY/bare" describe >out &&
	grep -E "^A-8-g[0-9a-f]+$" out

Cloning into bare repository '/<<PKGBUILDDIR>>/t/trash directory.t6120-describe/bare'...
done.
A-8-g8348027
ok 30 - describe works from outside repo using --git-dir

expecting success of 6120.31 'describe --dirty': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 31 - describe --dirty

expecting success of 6120.32 'describe --dirty with --work-tree': 
	(
		cd "$TEST_DIRECTORY" &&
		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
	) &&
	grep -E "^A-8-g[0-9a-f]+$" out

A-8-g8348027
ok 32 - describe --dirty with --work-tree

expecting success of 6120.33 'set-up dirty work tree': 
	echo >>file

ok 33 - set-up dirty work tree

expecting success of 6120.34 'describe --dirty with --work-tree (dirty)': 
	git describe --dirty >expected &&
	(
		cd "$TEST_DIRECTORY" &&
		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
	) &&
	grep -E "^A-8-g[0-9a-f]+-dirty$" out &&
	test_cmp expected out

A-8-g8348027-dirty
ok 34 - describe --dirty with --work-tree (dirty)

expecting success of 6120.35 'describe --dirty=.mod with --work-tree (dirty)': 
	git describe --dirty=.mod >expected &&
	(
		cd "$TEST_DIRECTORY" &&
		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty=.mod >"$TRASH_DIRECTORY/out"
	) &&
	grep -E "^A-8-g[0-9a-f]+.mod$" out &&
	test_cmp expected out

A-8-g8348027.mod
ok 35 - describe --dirty=.mod with --work-tree (dirty)

expecting success of 6120.36 'describe --dirty HEAD': 
	test_must_fail git describe --dirty HEAD

fatal: option '--dirty' and commit-ishes cannot be used together
ok 36 - describe --dirty HEAD

expecting success of 6120.37 'set-up matching pattern tests': 
	git tag -a -m test-annotated test-annotated &&
	echo >>file &&
	test_tick &&
	git commit -a -m "one more" &&
	git tag test1-lightweight &&
	echo >>file &&
	test_tick &&
	git commit -a -m "yet another" &&
	git tag test2-lightweight &&
	echo >>file &&
	test_tick &&
	git commit -a -m "even more"


[main 56c7540] one more
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[main 06348ff] yet another
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 481b98d] even more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 37 - set-up matching pattern tests

expecting success of 6120.38 'describe --match=test-*': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 38 - describe --match=test-*

expecting success of 6120.39 'describe --tags --match=test1-*': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 39 - describe --tags --match=test1-*

expecting success of 6120.40 'describe --tags --match=test2-*': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 40 - describe --tags --match=test2-*

expecting success of 6120.41 'describe --long --tags --match=test2-* HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 41 - describe --long --tags --match=test2-* HEAD^

expecting success of 6120.42 'describe --long --tags --match=test1-* --match=test2-* HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 42 - describe --long --tags --match=test1-* --match=test2-* HEAD^

expecting success of 6120.43 'describe --long --tags --match=test1-* --no-match --match=test2-* HEAD^': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 43 - describe --long --tags --match=test1-* --no-match --match=test2-* HEAD^

expecting success of 6120.44 'describe --long --tags --match=test1-* --match=test3-* HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 44 - describe --long --tags --match=test1-* --match=test3-* HEAD

expecting success of 6120.45 'describe --long --tags --match=test3-* --match=test1-* HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 45 - describe --long --tags --match=test3-* --match=test1-* HEAD

expecting success of 6120.46 'set-up branches': 
	git branch branch_A A &&
	git branch branch_C c &&
	git update-ref refs/remotes/origin/remote_branch_A "A^{commit}" &&
	git update-ref refs/remotes/origin/remote_branch_C "c^{commit}" &&
	git update-ref refs/original/original_branch_A test-annotated~2

ok 46 - set-up branches

expecting success of 6120.47 'describe --all --match=branch_* --exclude=branch_C HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 47 - describe --all --match=branch_* --exclude=branch_C HEAD

expecting success of 6120.48 'describe --all --match=origin/remote_branch_* --exclude=origin/remote_branch_C HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 48 - describe --all --match=origin/remote_branch_* --exclude=origin/remote_branch_C HEAD

expecting success of 6120.49 'describe --all test-annotated~1': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 49 - describe --all test-annotated~1

expecting success of 6120.50 '--match does not work for other types': 
	test_must_fail git describe --all --match="*original_branch_*" test-annotated~1

fatal: No names found, cannot describe anything.
ok 50 - --match does not work for other types

expecting success of 6120.51 '--exclude does not work for other types': 
	R=$(git describe --all --exclude="any_pattern_even_not_matching" test-annotated~1) &&
	case "$R" in
	*original_branch_A*) echo "fail: Found unknown reference $R with --exclude"
		false;;
	*) echo ok: Found some known type;;
	esac

ok: Found some known type
ok 51 - --exclude does not work for other types

expecting success of 6120.52 'name-rev with exact tags': 
	echo A >expect &&
	tag_object=$(git rev-parse refs/tags/A) &&
	git name-rev --tags --name-only $tag_object >actual &&
	test_cmp expect actual &&

	echo "A^0" >expect &&
	tagged_commit=$(git rev-parse "refs/tags/A^0") &&
	git name-rev --tags --name-only $tagged_commit >actual &&
	test_cmp expect actual

ok 52 - name-rev with exact tags

expecting success of 6120.53 'name-rev --all': 
	>expect.unsorted &&
	for rev in $(git rev-list --all)
	do
		git name-rev $rev >>expect.unsorted || return 1
	done &&
	sort <expect.unsorted >expect &&
	git name-rev --all >actual.unsorted &&
	sort <actual.unsorted >actual &&
	test_cmp expect actual

ok 53 - name-rev --all

expecting success of 6120.54 'name-rev --annotate-stdin': 
	>expect.unsorted &&
	for rev in $(git rev-list --all)
	do
		name=$(git name-rev --name-only $rev) &&
		echo "$rev ($name)" >>expect.unsorted || return 1
	done &&
	sort <expect.unsorted >expect &&
	git rev-list --all | git name-rev --annotate-stdin >actual.unsorted &&
	sort <actual.unsorted >actual &&
	test_cmp expect actual

ok 54 - name-rev --annotate-stdin

expecting success of 6120.55 'name-rev --stdin deprecated': 
	git rev-list --all | git name-rev --stdin 2>actual &&
	grep -E 'warning: --stdin is deprecated' actual

481b98dc759b7c93b0c387163557c00de8889c23 (main)
06348ffaa4ae1477d2839b428def58f191cf82dd (tags/test2-lightweight)
56c75406622118002f72e47fa889e63b9ce7eef5 (tags/test1-lightweight)
834802700a921cf3a66bf0094ec2bbb84f556491 (tags/test-annotated^0)
f543096ac7562240dea61e024b2aded42890e6e4 (tags/test-annotated~1)
2976a872ebe86c6743c0b22cc2effc6b6690d35d (tags/test-annotated~2)
d7863c725e80ded9952135c05aa8e5d6f3c7d5eb (tags/e)
de803f50907ae7b3a6f342dc5237b17cf363824e (tags/R^0)
d761ce166f3234debb123d4ccd0429d0122850c8 (tags/test-annotated~1^2)
ab2da115f9a280ba80846007dce6cde8c8becad6 (tags/B^0)
2ad58678aa2bf02a72a408d80a6166d995d1108d (tags/c)
4185ee1c25ca8fa52bf846677e8fb33c39a38326 (tags/A^0)
c48449d08f67c820485130658d6d4199237173e6 (tags/third)
612fe8f0dd0c85a77a1743b12ad30b34d52c638a (tags/second)
50b0198675f2d86e1a5851d6a22cb3f904980f03 (tags/initial)
warning: --stdin is deprecated. Please use --annotate-stdin instead, which is functionally equivalent.
ok 55 - name-rev --stdin deprecated

expecting success of 6120.56 'describe --contains with the exact tags': 
	echo "A^0" >expect &&
	tag_object=$(git rev-parse refs/tags/A) &&
	git describe --contains $tag_object >actual &&
	test_cmp expect actual &&

	echo "A^0" >expect &&
	tagged_commit=$(git rev-parse "refs/tags/A^0") &&
	git describe --contains $tagged_commit >actual &&
	test_cmp expect actual

ok 56 - describe --contains with the exact tags

expecting success of 6120.57 'describe --contains and --match': 
	echo "A^0" >expect &&
	tagged_commit=$(git rev-parse "refs/tags/A^0") &&
	test_must_fail git describe --contains --match="B" $tagged_commit &&
	git describe --contains --match="B" --match="A" $tagged_commit >actual &&
	test_cmp expect actual

fatal: cannot describe '4185ee1c25ca8fa52bf846677e8fb33c39a38326'
ok 57 - describe --contains and --match

expecting success of 6120.58 'describe --exclude': 
	echo "c~1" >expect &&
	tagged_commit=$(git rev-parse "refs/tags/A^0") &&
	test_must_fail git describe --contains --match="B" $tagged_commit &&
	git describe --contains --match="?" --exclude="A" $tagged_commit >actual &&
	test_cmp expect actual

fatal: cannot describe '4185ee1c25ca8fa52bf846677e8fb33c39a38326'
ok 58 - describe --exclude

expecting success of 6120.59 'describe --contains and --no-match': 
	echo "A^0" >expect &&
	tagged_commit=$(git rev-parse "refs/tags/A^0") &&
	git describe --contains --match="B" --no-match $tagged_commit >actual &&
	test_cmp expect actual

ok 59 - describe --contains and --no-match

expecting success of 6120.60 'setup and absorb a submodule': 
	test_create_repo sub1 &&
	test_commit -C sub1 initial &&
	git submodule add ./sub1 &&
	git submodule absorbgitdirs &&
	git commit -a -m "add submodule" &&
	git describe --dirty >expect &&
	git describe --broken >out &&
	test_cmp expect out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/sub1/.git/
[main (root-commit) d8072fd] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Adding existing repo at 'sub1' to the index
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t6120-describe/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t6120-describe/.git/modules/sub1'
[main b120bfb] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
ok 60 - setup and absorb a submodule

expecting success of 6120.61 'describe chokes on severely broken submodules': 
	mv .git/modules/sub1/ .git/modules/sub_moved &&
	test_must_fail git describe --dirty

fatal: not a git repository: sub1/../.git/modules/sub1
ok 61 - describe chokes on severely broken submodules

expecting success of 6120.62 'describe ignoring a broken submodule': 
	git describe --broken >out &&
	grep broken out

fatal: not a git repository: sub1/../.git/modules/sub1
test-annotated-4-gb120bfb-broken
ok 62 - describe ignoring a broken submodule

expecting success of 6120.63 'describe with --work-tree ignoring a broken submodule': 
	(
		cd "$TEST_DIRECTORY" &&
		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --broken >"$TRASH_DIRECTORY/out"
	) &&
	test_when_finished "mv .git/modules/sub_moved .git/modules/sub1" &&
	grep broken out

fatal: not a git repository: sub1/../.git/modules/sub1
test-annotated-4-gb120bfb-broken
ok 63 - describe with --work-tree ignoring a broken submodule

expecting success of 6120.64 'describe a blob at a directly tagged commit': 
	echo "make it a unique blob" >file &&
	git add file && git commit -m "content in file" &&
	git tag -a -m "latest annotated tag" unique-file &&
	git describe HEAD:file >actual &&
	echo "unique-file:file" >expect &&
	test_cmp expect actual

[main 0327ce2] content in file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 5 deletions(-)
ok 64 - describe a blob at a directly tagged commit

expecting success of 6120.65 'describe a blob with its first introduction': 
	git commit --allow-empty -m "empty commit" &&
	git rm file &&
	git commit -m "delete blob" &&
	git revert HEAD &&
	git commit --allow-empty -m "empty commit" &&
	git describe HEAD:file >actual &&
	echo "unique-file:file" >expect &&
	test_cmp expect actual

[main d56ff78] empty commit
 Author: A U Thor <author@example.com>
rm 'file'
[main c9d39a6] delete blob
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file
[main 3aa223e] Revert "delete blob"
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:31:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 5b2edfd] empty commit
 Author: A U Thor <author@example.com>
ok 65 - describe a blob with its first introduction

expecting success of 6120.66 'describe directly tagged blob': 
	git tag test-blob unique-file:file &&
	git describe test-blob >actual &&
	echo "unique-file:file" >expect &&
	# suboptimal: we rather want to see "test-blob"
	test_cmp expect actual

ok 66 - describe directly tagged blob

expecting success of 6120.67 'describe tag object': 
	git tag test-blob-1 -a -m msg unique-file:file &&
	test_must_fail git describe test-blob-1 2>actual &&
	test_i18ngrep "fatal: test-blob-1 is neither a commit nor blob" actual

fatal: test-blob-1 is neither a commit nor blob
ok 67 - describe tag object

checking prerequisite: ULIMIT_STACK_SIZE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_STACK_SIZE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_STACK_SIZE" &&
	test_have_prereq !HPPA,!MINGW,!CYGWIN &&
	run_with_limited_stack true

)
prerequisite ULIMIT_STACK_SIZE ok
expecting success of 6120.68 'name-rev works in a deep repo': 
	i=1 &&
	while test $i -lt 8000
	do
		echo "commit refs/heads/main
committer A U Thor <author@example.com> $((1000000000 + $i * 100)) +0200
data <<EOF
commit #$i
EOF" &&
		if test $i = 1
		then
			echo "from refs/heads/main^0"
		fi &&
		i=$(($i + 1)) || return 1
	done | git fast-import &&
	git checkout main &&
	git tag far-far-away HEAD^ &&
	echo "HEAD~4000 tags/far-far-away~3999" >expect &&
	git name-rev HEAD~4000 >actual &&
	test_cmp expect actual &&
	run_with_limited_stack git name-rev HEAD~4000 >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:      10000
Total objects:         7999 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:         7999 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2758 KiB
       pools:          2133 KiB
     objects:           625 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =       8000
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =    1172067 /    1172067
---------------------------------------------------------------------

Already on 'main'
ok 68 - name-rev works in a deep repo

expecting success of 6120.69 'describe works in a deep repo': 
	git tag -f far-far-away HEAD~7999 &&
	echo "far-far-away" >expect &&
	git describe --tags --abbrev=0 HEAD~4000 >actual &&
	test_cmp expect actual &&
	run_with_limited_stack git describe --tags --abbrev=0 HEAD~4000 >actual &&
	test_cmp expect actual

Updated tag 'far-far-away' (was 92d391b)
ok 69 - describe works in a deep repo

expecting success of 6120.70 'describe --all A': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 70 - describe --all A

expecting success of 6120.71 'describe --all c': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 71 - describe --all c

expecting success of 6120.72 'describe --all --match=branch_* branch_A': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 72 - describe --all --match=branch_* branch_A

expecting success of 6120.73 'describe complains about tree object': 
	test_must_fail git describe HEAD^{tree}

fatal: HEAD^{tree} is neither a commit nor blob
ok 73 - describe complains about tree object

expecting success of 6120.74 'describe complains about missing object': 
	test_must_fail git describe $ZERO_OID

fatal: 0000000000000000000000000000000000000000 is neither a commit nor blob
ok 74 - describe complains about missing object

expecting success of 6120.75 'name-rev a rev shortly after epoch': 
	test_when_finished "git checkout main" &&

	git checkout --orphan no-timestamp-underflow &&
	# Any date closer to epoch than the CUTOFF_DATE_SLOP constant
	# in builtin/name-rev.c.
	GIT_COMMITTER_DATE="@1234 +0000" \
	git commit -m "committer date shortly after epoch" &&
	old_commit_oid=$(git rev-parse HEAD) &&

	echo "$old_commit_oid no-timestamp-underflow" >expect &&
	git name-rev $old_commit_oid >actual &&
	test_cmp expect actual

Switched to a new branch 'no-timestamp-underflow'
[no-timestamp-underflow (root-commit) c282cde] committer date shortly after epoch
 Author: A U Thor <author@example.com>
 5 files changed, 7 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 another
 create mode 100644 file
 create mode 100644 side
 create mode 160000 sub1
Switched to branch 'main'
ok 75 - name-rev a rev shortly after epoch

expecting success of 6120.76 'name-rev covers all conditions while looking at parents': 
	git init repo &&
	(
		cd repo &&

		echo A >file &&
		git add file &&
		git commit -m A &&
		A=$(git rev-parse HEAD) &&

		git checkout --detach &&
		echo B >file &&
		git commit -m B file &&
		B=$(git rev-parse HEAD) &&

		git checkout $A &&
		git merge --no-ff $B &&  # M1

		echo C >file &&
		git commit -m C file &&

		git checkout $A &&
		git merge --no-ff HEAD@{1} && # M2

		git checkout main &&
		git merge --no-ff HEAD@{1} &&

		echo "$B main^2^2~1^2" >expect &&
		git name-rev $B >actual &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/repo/.git/
[main (root-commit) 78654cc] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
HEAD is now at 78654cc A
[detached HEAD 6b45b22] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6b45b22 B

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 6b45b22

HEAD is now at 78654cc A
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD ea0b3e9] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  ea0b3e9 C
  212ac67 Merge commit '6b45b22f510f60512eeb67085e7ac91c21fef10c' into HEAD
  6b45b22 B

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> ea0b3e9

HEAD is now at 78654cc A
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Warning: you are leaving 4 commits behind, not connected to
any of your branches:

  d9d7e13 Merge commit 'HEAD@{1}' into HEAD
  ea0b3e9 C
  212ac67 Merge commit '6b45b22f510f60512eeb67085e7ac91c21fef10c' into HEAD
  6b45b22 B

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> d9d7e13

Switched to branch 'main'
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 76 - name-rev covers all conditions while looking at parents

expecting success of 6120.77 'non-monotonic commit dates setup': 
	UNIX_EPOCH_ZERO="@0 +0000" &&
	git init non-monotonic &&
	test_commit -C non-monotonic A &&
	test_commit -C non-monotonic --no-tag B &&
	test_commit -C non-monotonic --no-tag --date "$UNIX_EPOCH_ZERO" C &&
	test_commit -C non-monotonic D &&
	test_commit -C non-monotonic E

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/non-monotonic/.git/
[main (root-commit) 818c4b4] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 350dc83] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
[main f348e82] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main cc61a00] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[main 4bc3eeb] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
ok 77 - non-monotonic commit dates setup

expecting success of 6120.78 'name-rev with commitGraph handles non-monotonic timestamps': 
	test_config -C non-monotonic core.commitGraph true &&
	(
		cd non-monotonic &&

		git commit-graph write --reachable &&

		echo "main~3 tags/D~2" >expect &&
		git name-rev --tags main~3 >actual &&

		test_cmp expect actual
	)

ok 78 - name-rev with commitGraph handles non-monotonic timestamps

expecting success of 6120.79 'name-rev --all works with non-monotonic timestamps': 
	test_config -C non-monotonic core.commitGraph false &&
	(
		cd non-monotonic &&

		rm -rf .git/info/commit-graph* &&

		cat >tags <<-\EOF &&
		tags/E
		tags/D
		tags/D~1
		tags/D~2
		tags/A
		EOF

		git log --pretty=%H >revs &&

		paste -d" " revs tags | sort >expect &&

		git name-rev --tags --all | sort >actual &&
		test_cmp expect actual
	)

ok 79 - name-rev --all works with non-monotonic timestamps

expecting success of 6120.80 'name-rev --annotate-stdin works with non-monotonic timestamps': 
	test_config -C non-monotonic core.commitGraph false &&
	(
		cd non-monotonic &&

		rm -rf .git/info/commit-graph* &&

		cat >expect <<-\EOF &&
		E
		D
		D~1
		D~2
		A
		EOF

		git log --pretty=%H >revs &&
		git name-rev --tags --annotate-stdin --name-only <revs >actual &&
		test_cmp expect actual
	)

ok 80 - name-rev --annotate-stdin works with non-monotonic timestamps

expecting success of 6120.81 'name-rev --all works with commitGraph': 
	test_config -C non-monotonic core.commitGraph true &&
	(
		cd non-monotonic &&

		git commit-graph write --reachable &&

		cat >tags <<-\EOF &&
		tags/E
		tags/D
		tags/D~1
		tags/D~2
		tags/A
		EOF

		git log --pretty=%H >revs &&

		paste -d" " revs tags | sort >expect &&

		git name-rev --tags --all | sort >actual &&
		test_cmp expect actual
	)

ok 81 - name-rev --all works with commitGraph

expecting success of 6120.82 'name-rev --annotate-stdin works with commitGraph': 
	test_config -C non-monotonic core.commitGraph true &&
	(
		cd non-monotonic &&

		git commit-graph write --reachable &&

		cat >expect <<-\EOF &&
		E
		D
		D~1
		D~2
		A
		EOF

		git log --pretty=%H >revs &&
		git name-rev --tags --annotate-stdin --name-only <revs >actual &&
		test_cmp expect actual
	)

ok 82 - name-rev --annotate-stdin works with commitGraph

expecting success of 6120.83 'setup: describe commits with disjoint bases': 
	git init disjoint1 &&
	(
		cd disjoint1 &&

		echo o >> file && git add file && git commit -m o &&
		echo A >> file && git add file && git commit -m A &&
		git tag A -a -m A &&
		echo o >> file && git add file && git commit -m o &&

		git checkout --orphan branch && rm file &&
		echo B > file2 && git add file2 && git commit -m B &&
		git tag B -a -m B &&
		git merge --no-ff --allow-unrelated-histories main -m x
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/disjoint1/.git/
[main (root-commit) b0940a9] o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 5301387] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 04035f9] o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'branch'
[branch (root-commit) 38a9f24] B
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 file
 create mode 100644 file2
Merge made by the 'ort' strategy.
ok 83 - setup: describe commits with disjoint bases

expecting success of 6120.84 'describe HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 84 - describe HEAD

expecting success of 6120.85 'setup: describe commits with disjoint bases 2': 
	git init disjoint2 &&
	(
		cd disjoint2 &&

		echo A >> file && git add file && GIT_COMMITTER_DATE="2020-01-01 18:00" git commit -m A &&
		git tag A -a -m A &&
		echo o >> file && git add file && GIT_COMMITTER_DATE="2020-01-01 18:01" git commit -m o &&

		git checkout --orphan branch &&
		echo o >> file2 && git add file2 && GIT_COMMITTER_DATE="2020-01-01 15:00" git commit -m o &&
		echo o >> file2 && git add file2 && GIT_COMMITTER_DATE="2020-01-01 15:01" git commit -m o &&
		echo B >> file2 && git add file2 && GIT_COMMITTER_DATE="2020-01-01 15:02" git commit -m B &&
		git tag B -a -m B &&
		git merge --no-ff --allow-unrelated-histories main -m x
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6120-describe/disjoint2/.git/
[main (root-commit) baf66fb] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 36e11f3] o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'branch'
[branch (root-commit) 191fdf7] o
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+)
 create mode 100644 file
 create mode 100644 file2
[branch f10239c] o
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[branch 7ece6d3] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Merge made by the 'ort' strategy.
ok 85 - setup: describe commits with disjoint bases 2

expecting success of 6120.86 'describe HEAD': 
		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
		echo "$expect" >expect &&
		test_cmp expect actual
	
ok 86 - describe HEAD

# passed all 86 test(s)
1..86
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6401-merge-criss-cross.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6401-merge-criss-cross/.git/
expecting success of 6401.1 'prepare repository': 
	test_write_lines 1 2 3 4 5 6 7 8 9 >file &&
	git add file &&
	git commit -m "Initial commit" file &&

	git branch A &&
	git branch B &&
	git checkout A &&

	test_write_lines 1 2 3 4 5 6 7 "8 changed in B8, branch A" 9 >file &&
	git commit -m "B8" file &&
	git checkout B &&

	test_write_lines 1 2 "3 changed in C3, branch B" 4 5 6 7 8 9 >file &&
	git commit -m "C3" file &&
	git branch C3 &&

	git merge -m "pre E3 merge" A &&

	test_write_lines 1 2 "3 changed in E3, branch B. New file size" 4 5 6 7 "8 changed in B8, branch A" 9 >file &&
	git commit -m "E3" file &&

	git checkout A &&
	git merge -m "pre D8 merge" C3 &&
	test_write_lines 1 2 "3 changed in C3, branch B" 4 5 6 7 "8 changed in D8, branch A. New file size 2" 9 >file &&

	git commit -m D8 file

[master (root-commit) 40a1fcc] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 file
Switched to branch 'A'
[A 3e86c96] B8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'B'
[B 039abf7] C3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[B 4628fbc] E3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'A'
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[A 1f51d3d] D8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - prepare repository

expecting success of 6401.2 'Criss-cross merge': 
	git merge -m "final merge" B

  From inner merge:  Auto-merging file
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - Criss-cross merge

expecting success of 6401.3 'Criss-cross merge result': 
	cat <<-\EOF >file-expect &&
	1
	2
	3 changed in E3, branch B. New file size
	4
	5
	6
	7
	8 changed in D8, branch A. New file size 2
	9
	EOF

	test_cmp file-expect file

ok 3 - Criss-cross merge result

expecting success of 6401.4 'Criss-cross merge fails (-s resolve)': 
	git reset --hard A^ &&
	test_must_fail git merge -s resolve -m "final merge" B

HEAD is now at 1f51d3d D8
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging file
ERROR: content conflict in file
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - Criss-cross merge fails (-s resolve)

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6400-merge-df.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6400-merge-df/.git/
expecting success of 6400.1 'prepare repository': 
	echo Hello >init &&
	git add init &&
	git commit -m initial &&

	git branch B &&
	mkdir dir &&
	echo foo >dir/foo &&
	git add dir/foo &&
	git commit -m "File: dir/foo" &&

	git checkout B &&
	echo file dir >dir &&
	git add dir &&
	git commit -m "File: dir"

[main (root-commit) 9403789] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init
[main ea63978] File: dir/foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/foo
Switched to branch 'B'
[B 998507a] File: dir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir
ok 1 - prepare repository

expecting success of 6400.2 'Merge with d/f conflicts': 
	test_expect_code 1 git merge -m "merge msg" main

CONFLICT (file/directory): directory in the way of dir from HEAD; moving it to dir~HEAD instead.
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - Merge with d/f conflicts

expecting success of 6400.3 'F/D conflict': 
	git reset --hard &&
	git checkout main &&
	rm .git/index &&

	mkdir before &&
	echo FILE >before/one &&
	echo FILE >after &&
	git add . &&
	git commit -m first &&

	rm -f after &&
	git mv before after &&
	git commit -m move &&

	git checkout -b para HEAD^ &&
	echo COMPLETELY ANOTHER FILE >another &&
	git add . &&
	git commit -m para &&

	git merge main

HEAD is now at 998507a File: dir
Switched to branch 'main'
[main 982e047] first
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 after
 create mode 100644 before/one
[main deef361] move
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 delete mode 100644 after
 rename {before => after}/one (100%)
Switched to a new branch 'para'
[para c1294cb] para
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 another
Merge made by the 'ort' strategy.
 after                 | 1 -
 {before => after}/one | 0
 2 files changed, 1 deletion(-)
 delete mode 100644 after
 rename {before => after}/one (100%)
ok 3 - F/D conflict

expecting success of 6400.4 'setup modify/delete + directory/file conflict': 
	git checkout --orphan modify &&
	git rm -rf . &&
	git clean -fdqx &&

	printf "a\nb\nc\nd\ne\nf\ng\nh\n" >letters &&
	git add letters &&
	git commit -m initial &&

	# Throw in letters.txt for sorting order fun
	# ("letters.txt" sorts between "letters" and "letters/file")
	echo i >>letters &&
	echo "version 2" >letters.txt &&
	git add letters letters.txt &&
	git commit -m modified &&

	git checkout -b delete HEAD^ &&
	git rm letters &&
	mkdir letters &&
	>letters/file &&
	echo "version 1" >letters.txt &&
	git add letters letters.txt &&
	git commit -m deleted

Switched to a new branch 'modify'
rm 'after/one'
rm 'another'
rm 'dir/foo'
rm 'init'
[modify (root-commit) 461649b] initial
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 letters
[modify 4e26d91] modified
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 letters.txt
Switched to a new branch 'delete'
rm 'letters'
[delete 380ce95] deleted
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 8 deletions(-)
 delete mode 100644 letters
 create mode 100644 letters.txt
 create mode 100644 letters/file
ok 4 - setup modify/delete + directory/file conflict

expecting success of 6400.5 'modify/delete + directory/file conflict': 
	git checkout delete^0 &&
	test_must_fail git merge modify &&

	test_stdout_line_count = 5 git ls-files -s &&
	test_stdout_line_count = 4 git ls-files -u &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 0 git ls-files -o
	else
		test_stdout_line_count = 1 git ls-files -o
	fi &&

	test_path_is_file letters/file &&
	test_path_is_file letters.txt &&
	test_path_is_file letters~modify

Note: switching to 'delete^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 380ce95 deleted
Auto-merging letters.txt
CONFLICT (add/add): Merge conflict in letters.txt
CONFLICT (file/directory): directory in the way of letters from modify; moving it to letters~modify instead.
CONFLICT (modify/delete): letters~modify deleted in HEAD and modified in modify.  Version modify of letters~modify left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 5 - modify/delete + directory/file conflict

expecting success of 6400.6 'modify/delete + directory/file conflict; other way': 
	git reset --hard &&
	git clean -f &&
	git checkout modify^0 &&

	test_must_fail git merge delete &&

	test_stdout_line_count = 5 git ls-files -s &&
	test_stdout_line_count = 4 git ls-files -u &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 0 git ls-files -o
	else
		test_stdout_line_count = 1 git ls-files -o
	fi &&

	test_path_is_file letters/file &&
	test_path_is_file letters.txt &&
	test_path_is_file letters~HEAD

HEAD is now at 380ce95 deleted
Previous HEAD position was 380ce95 deleted
HEAD is now at 4e26d91 modified
Auto-merging letters.txt
CONFLICT (add/add): Merge conflict in letters.txt
CONFLICT (file/directory): directory in the way of letters from HEAD; moving it to letters~HEAD instead.
CONFLICT (modify/delete): letters~HEAD deleted in delete and modified in HEAD.  Version HEAD of letters~HEAD left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - modify/delete + directory/file conflict; other way

expecting success of 6400.7 'Simple merge in repo with interesting pathnames': 
	# Simple lexicographic ordering of files and directories would be:
	#     foo
	#     foo/bar
	#     foo/bar-2
	#     foo/bar/baz
	#     foo/bar-2/baz
	# The fact that foo/bar-2 appears between foo/bar and foo/bar/baz
	# can trip up some codepaths, and is the point of this test.
	git init name-ordering &&
	(
		cd name-ordering &&

		mkdir -p foo/bar &&
		mkdir -p foo/bar-2 &&
		>foo/bar/baz &&
		>foo/bar-2/baz &&
		git add . &&
		git commit -m initial &&

		git branch topic &&
		git branch other &&

		git checkout other &&
		echo other >foo/bar-2/baz &&
		git add -u &&
		git commit -m other &&

		git checkout topic &&
		echo topic >foo/bar/baz &&
		git add -u &&
		git commit -m topic &&

		git merge other &&
		git ls-files -s >out &&
		test_line_count = 2 out &&
		git rev-parse :0:foo/bar/baz :0:foo/bar-2/baz >actual &&
		git rev-parse HEAD~1:foo/bar/baz other:foo/bar-2/baz >expect &&
		test_cmp expect actual
	)


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6400-merge-df/name-ordering/.git/
[main (root-commit) 7254293] initial
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo/bar-2/baz
 create mode 100644 foo/bar/baz
Switched to branch 'other'
[other 73bbd97] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'topic'
[topic 7b6c4f9] topic
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Merge made by the 'ort' strategy.
 foo/bar-2/baz | 1 +
 1 file changed, 1 insertion(+)
ok 7 - Simple merge in repo with interesting pathnames

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6403-merge-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6403-merge-file/.git/
expecting success of 6403.1 'setup': 
	cat >orig.txt <<-\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.
	EOF

	cat >new1.txt <<-\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.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	cat >new2.txt <<-\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.
	EOF

	cat >new3.txt <<-\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.
	EOF

	cat >new4.txt <<-\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,
	EOF

	printf "propter nomen suum." >>new4.txt

ok 1 - setup

expecting success of 6403.2 'merge with no changes': 
	cp orig.txt test.txt &&
	git merge-file test.txt orig.txt orig.txt &&
	test_cmp test.txt orig.txt

ok 2 - merge with no changes

expecting success of 6403.3 'merge without conflict': 
	cp new1.txt test.txt &&
	git merge-file test.txt orig.txt new2.txt

ok 3 - merge without conflict

expecting success of 6403.4 'works in subdirectory': 
	mkdir dir &&
	cp new1.txt dir/a.txt &&
	cp orig.txt dir/o.txt &&
	cp new2.txt dir/b.txt &&
	( cd dir && git merge-file a.txt o.txt b.txt ) &&
	test_path_is_missing a.txt

ok 4 - works in subdirectory

expecting success of 6403.5 'merge without conflict (--quiet)': 
	cp new1.txt test.txt &&
	git merge-file --quiet test.txt orig.txt new2.txt

ok 5 - merge without conflict (--quiet)

checking known breakage of 6403.6 'merge without conflict (missing LF at EOF)': 
	cp new1.txt test2.txt &&
	git merge-file test2.txt orig.txt new4.txt

not ok 6 - merge without conflict (missing LF at EOF) # TODO known breakage

checking known breakage of 6403.7 'merge result added missing LF': 
	test_cmp test.txt test2.txt

--- test.txt	2022-12-28 07:57:47.541879046 +0000
+++ test2.txt	2022-12-28 07:57:47.581880515 +0000
@@ -3,7 +3,11 @@
 super aquam refectionis educavit me;
 animam meam convertit,
 deduxit me super semitas jusitiae,
+<<<<<<< test2.txt
 propter nomen suum.
 Nam et si ambulavero in medio umbrae mortis,
 non timebo mala, quoniam tu mecum es:
 virga tua et baculus tuus ipsa me consolata sunt.
+=======
+propter nomen suum.
+>>>>>>> new4.txt
not ok 7 - merge result added missing LF # TODO known breakage

expecting success of 6403.8 'merge without conflict (missing LF at EOF, away from change in the other file)': 
	cp new4.txt test3.txt &&
	git merge-file --quiet test3.txt new2.txt new3.txt

ok 8 - merge without conflict (missing LF at EOF, away from change in the other file)

expecting success of 6403.9 'merge does not add LF away of change': 
	cat >expect.txt <<-\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,
	EOF
	printf "propter nomen suum." >>expect.txt &&

	test_cmp expect.txt test3.txt

ok 9 - merge does not add LF away of change

expecting success of 6403.10 'merge with conflicts': 
	cp test.txt backup.txt &&
	test_must_fail git merge-file test.txt orig.txt new3.txt

ok 10 - merge with conflicts

expecting success of 6403.11 'expected conflict markers': 
	cat >expect.txt <<-\EOF &&
	<<<<<<< test.txt
	Dominus regit me, et nihil mihi deerit.
	=======
	DOMINUS regit me,
	et nihil mihi deerit.
	>>>>>>> new3.txt
	In loco pascuae ibi me collocavit,
	super aquam refectionis educavit me;
	animam meam convertit,
	deduxit me super semitas jusitiae,
	propter nomen suum.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	test_cmp expect.txt test.txt

ok 11 - expected conflict markers

expecting success of 6403.12 'merge conflicting with --ours': 
	cp backup.txt test.txt &&

	cat >expect.txt <<-\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.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	git merge-file --ours test.txt orig.txt new3.txt &&
	test_cmp expect.txt test.txt

ok 12 - merge conflicting with --ours

expecting success of 6403.13 'merge conflicting with --theirs': 
	cp backup.txt test.txt &&

	cat >expect.txt <<-\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.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	git merge-file --theirs test.txt orig.txt new3.txt &&
	test_cmp expect.txt test.txt

ok 13 - merge conflicting with --theirs

expecting success of 6403.14 'merge conflicting with --union': 
	cp backup.txt test.txt &&

	cat >expect.txt <<-\EOF &&
	Dominus regit me, et nihil mihi deerit.
	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.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	git merge-file --union test.txt orig.txt new3.txt &&
	test_cmp expect.txt test.txt

ok 14 - merge conflicting with --union

expecting success of 6403.15 'merge with conflicts, using -L': 
	cp backup.txt test.txt &&

	test_must_fail git merge-file -L 1 -L 2 test.txt orig.txt new3.txt

ok 15 - merge with conflicts, using -L

expecting success of 6403.16 'expected conflict markers, with -L': 
	cat >expect.txt <<-\EOF &&
	<<<<<<< 1
	Dominus regit me, et nihil mihi deerit.
	=======
	DOMINUS regit me,
	et nihil mihi deerit.
	>>>>>>> new3.txt
	In loco pascuae ibi me collocavit,
	super aquam refectionis educavit me;
	animam meam convertit,
	deduxit me super semitas jusitiae,
	propter nomen suum.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam tu mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	test_cmp expect.txt test.txt

ok 16 - expected conflict markers, with -L

expecting success of 6403.17 'conflict in removed tail': 
	sed "s/ tu / TU /" <new1.txt >new5.txt &&
	test_must_fail git merge-file -p orig.txt new1.txt new5.txt >out

ok 17 - conflict in removed tail

expecting success of 6403.18 'expected conflict markers': 
	cat >expect <<-\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.
	<<<<<<< orig.txt
	=======
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam TU mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	>>>>>>> new5.txt
	EOF

	test_cmp expect out

ok 18 - expected conflict markers

expecting success of 6403.19 'binary files cannot be merged': 
	test_must_fail git merge-file -p \
		orig.txt "$TEST_DIRECTORY"/test-binary-1.png new1.txt 2> merge.err &&
	grep "Cannot merge binary files" merge.err

error: Cannot merge binary files: /<<PKGBUILDDIR>>/t/test-binary-1.png
ok 19 - binary files cannot be merged

expecting success of 6403.20 'MERGE_ZEALOUS simplifies non-conflicts': 
	sed -e "s/deerit.\$/deerit;/" -e "s/me;\$/me./" <new5.txt >new6.txt &&
	sed -e "s/deerit.\$/deerit,/" -e "s/me;\$/me,/" <new5.txt >new7.txt &&

	test_must_fail git merge-file -p new6.txt new5.txt new7.txt > output &&
	test 1 = $(grep ======= <output | wc -l)

ok 20 - MERGE_ZEALOUS simplifies non-conflicts

expecting success of 6403.21 'ZEALOUS_ALNUM': 
	sed -e "s/deerit./&%%%%/" -e "s/locavit,/locavit;/" <new6.txt | tr % "\012" >new8.txt &&
	sed -e "s/deerit./&%%%%/" -e "s/locavit,/locavit --/" <new7.txt | tr % "\012" >new9.txt &&

	test_must_fail git merge-file -p \
		new8.txt new5.txt new9.txt >merge.out &&
	test 1 = $(grep ======= <merge.out | wc -l)

ok 21 - ZEALOUS_ALNUM

expecting success of 6403.22 '"diff3 -m" style output (1)': 
	cat >expect <<-\EOF &&
	Dominus regit me,
	<<<<<<< new8.txt
	et nihil mihi deerit;




	In loco pascuae ibi me collocavit;
	super aquam refectionis educavit me.
	||||||| new5.txt
	et nihil mihi deerit.
	In loco pascuae ibi me collocavit,
	super aquam refectionis educavit me;
	=======
	et nihil mihi deerit,




	In loco pascuae ibi me collocavit --
	super aquam refectionis educavit me,
	>>>>>>> new9.txt
	animam meam convertit,
	deduxit me super semitas jusitiae,
	propter nomen suum.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam TU mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	test_must_fail git merge-file -p --diff3 \
		new8.txt new5.txt new9.txt >actual &&
	test_cmp expect actual

ok 22 - "diff3 -m" style output (1)

expecting success of 6403.23 '"diff3 -m" style output (2)': 
	git config merge.conflictstyle diff3 &&
	test_must_fail git merge-file -p \
		new8.txt new5.txt new9.txt >actual &&
	test_cmp expect actual

ok 23 - "diff3 -m" style output (2)

expecting success of 6403.24 'marker size': 
	cat >expect <<-\EOF &&
	Dominus regit me,
	<<<<<<<<<< new8.txt
	et nihil mihi deerit;




	In loco pascuae ibi me collocavit;
	super aquam refectionis educavit me.
	|||||||||| new5.txt
	et nihil mihi deerit.
	In loco pascuae ibi me collocavit,
	super aquam refectionis educavit me;
	==========
	et nihil mihi deerit,




	In loco pascuae ibi me collocavit --
	super aquam refectionis educavit me,
	>>>>>>>>>> new9.txt
	animam meam convertit,
	deduxit me super semitas jusitiae,
	propter nomen suum.
	Nam et si ambulavero in medio umbrae mortis,
	non timebo mala, quoniam TU mecum es:
	virga tua et baculus tuus ipsa me consolata sunt.
	EOF

	test_must_fail git merge-file -p --marker-size=10 \
		new8.txt new5.txt new9.txt >actual &&
	test_cmp expect actual

ok 24 - marker size

expecting success of 6403.25 'conflict at EOF without LF resolved by --ours': 
	printf "line1\nline2\nline3" >nolf-orig.txt &&
	printf "line1\nline2\nline3x" >nolf-diff1.txt &&
	printf "line1\nline2\nline3y" >nolf-diff2.txt &&

	git merge-file -p --ours nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&
	printf "line1\nline2\nline3x" >expect.txt &&
	test_cmp expect.txt output.txt

ok 25 - conflict at EOF without LF resolved by --ours

expecting success of 6403.26 'conflict at EOF without LF resolved by --theirs': 
	git merge-file -p --theirs nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&
	printf "line1\nline2\nline3y" >expect.txt &&
	test_cmp expect.txt output.txt

ok 26 - conflict at EOF without LF resolved by --theirs

expecting success of 6403.27 'conflict at EOF without LF resolved by --union': 
	git merge-file -p --union nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&
	printf "line1\nline2\nline3x\nline3y" >expect.txt &&
	test_cmp expect.txt output.txt

ok 27 - conflict at EOF without LF resolved by --union

expecting success of 6403.28 'conflict sections match existing line endings': 
	printf "1\\r\\n2\\r\\n3" >crlf-orig.txt &&
	printf "1\\r\\n2\\r\\n4" >crlf-diff1.txt &&
	printf "1\\r\\n2\\r\\n5" >crlf-diff2.txt &&
	test_must_fail git -c core.eol=crlf merge-file -p \
		crlf-diff1.txt crlf-orig.txt crlf-diff2.txt >crlf.txt &&
	test $(tr "\015" Q <crlf.txt | grep "^[<=>].*Q$" | wc -l) = 3 &&
	test $(tr "\015" Q <crlf.txt | grep "[345]Q$" | wc -l) = 3 &&
	test_must_fail git -c core.eol=crlf merge-file -p \
		nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >nolf.txt &&
	test $(tr "\015" Q <nolf.txt | grep "^[<=>].*Q$" | wc -l) = 0

ok 28 - conflict sections match existing line endings

# still have 2 known breakage(s)
# passed all remaining 26 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6404-recursive-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6404-recursive-merge/.git/
expecting success of 6404.1 'setup tests': 
	GIT_TEST_COMMIT_GRAPH=0 &&
	export GIT_TEST_COMMIT_GRAPH &&
	echo 1 >a1 &&
	git add a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1 &&

	git checkout -b A main &&
	echo A >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1 &&

	git checkout -b B main &&
	echo B >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1 &&

	git checkout -b D A &&
	git rev-parse B >.git/MERGE_HEAD &&
	echo D >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D &&

	git symbolic-ref HEAD refs/heads/other &&
	echo 2 >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1 &&

	git checkout -b C &&
	echo C >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1 &&

	git checkout -b E C &&
	git rev-parse B >.git/MERGE_HEAD &&
	echo E >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E &&

	git checkout -b G E &&
	git rev-parse A >.git/MERGE_HEAD &&
	echo G >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G &&

	git checkout -b F D &&
	git rev-parse C >.git/MERGE_HEAD &&
	echo F >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F &&

	test_oid_cache <<-EOF
	idxstage1 sha1:ec3fe2a791706733f2d8fa7ad45d9a9672031f5e
	idxstage1 sha256:b3c8488929903aaebdeb22270cb6d36e5b8724b01ae0d4da24632f158c99676f
	EOF

[main (root-commit) 2cb59ab] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a1
Switched to a new branch 'A'
[A 9d821b5] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'B'
[B 7082aa6] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'D'
[D e1146db] D
 Author: A U Thor <author@example.com>
[other (root-commit) 216d386] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a1
Switched to a new branch 'C'
[C d264643] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'E'
[E 939285a] E
 Author: A U Thor <author@example.com>
Switched to a new branch 'G'
[G 26f86b6] G
 Author: A U Thor <author@example.com>
Switched to a new branch 'F'
[F 71b2f3d] F
 Author: A U Thor <author@example.com>
ok 1 - setup tests

expecting success of 6404.2 'combined merge conflicts': 
	test_must_fail git merge -m final G

  From inner merge:  Auto-merging a1
  From inner merge:  CONFLICT (add/add): Merge conflict in a1
  From inner merge:  Auto-merging a1
  From inner merge:  CONFLICT (content): Merge conflict in a1
Auto-merging a1
CONFLICT (content): Merge conflict in a1
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - combined merge conflicts

expecting success of 6404.3 'result contains a conflict': 
	cat >expect <<-\EOF &&
	<<<<<<< HEAD
	F
	=======
	G
	>>>>>>> G
	EOF

	test_cmp expect a1

ok 3 - result contains a conflict

expecting success of 6404.4 'virtual trees were processed': 
	# TODO: fragile test, relies on ambigious merge-base resolution
	git ls-files --stage >out &&

	cat >expect <<-EOF &&
	100644 $(test_oid idxstage1) 1	a1
	100644 $(git rev-parse F:a1) 2	a1
	100644 $(git rev-parse G:a1) 3	a1
	EOF

	test_cmp expect out

ok 4 - virtual trees were processed

expecting success of 6404.5 'refuse to merge binary files': 
	git reset --hard &&
	printf "\0" >binary-file &&
	git add binary-file &&
	git commit -m binary &&
	git checkout G &&
	printf "\0\0" >binary-file &&
	git add binary-file &&
	git commit -m binary2 &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_must_fail git merge F >merge_output
	else
		test_must_fail git merge F 2>merge_output
	fi &&
	grep "Cannot merge binary files: binary-file (HEAD vs. F)" merge_output

HEAD is now at 71b2f3d F
[F 585846d] binary
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 binary-file
Switched to branch 'G'
[G 4e36843] binary2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 binary-file
warning: Cannot merge binary files: binary-file (HEAD vs. F)
ok 5 - refuse to merge binary files

expecting success of 6404.6 'mark rename/delete as unmerged': 

	git reset --hard &&
	git checkout -b delete &&
	git rm a1 &&
	test_tick &&
	git commit -m delete &&
	git checkout -b rename HEAD^ &&
	git mv a1 a2 &&
	test_tick &&
	git commit -m rename &&
	test_must_fail git merge delete &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test 2 = $(git ls-files --unmerged | wc -l)
	else
		test 1 = $(git ls-files --unmerged | wc -l)
	fi &&
	git rev-parse --verify :2:a2 &&
	test_must_fail git rev-parse --verify :3:a2 &&
	git checkout -f delete &&
	test_must_fail git merge rename &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test 2 = $(git ls-files --unmerged | wc -l)
	else
		test 1 = $(git ls-files --unmerged | wc -l)
	fi &&
	test_must_fail git rev-parse --verify :2:a2 &&
	git rev-parse --verify :3:a2

HEAD is now at 4e36843 binary2
Switched to a new branch 'delete'
rm 'a1'
[delete d263b4e] delete
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 a1
Switched to a new branch 'rename'
[rename be2bcbd] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a1 => a2 (100%)
CONFLICT (rename/delete): a1 renamed to a2 in HEAD, but deleted in delete.
Automatic merge failed; fix conflicts and then commit the result.
fd7923529855d0b274795ae3349c5e0438333979
fatal: Needed a single revision
Switched to branch 'delete'
CONFLICT (rename/delete): a1 renamed to a2 in rename, but deleted in HEAD.
Automatic merge failed; fix conflicts and then commit the result.
fatal: Needed a single revision
fd7923529855d0b274795ae3349c5e0438333979
ok 6 - mark rename/delete as unmerged

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6030-bisect-porcelain.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6030-bisect-porcelain/.git/
expecting success of 6030.1 'set up basic repo with 1 file (hello) and 4 commits': 
     add_line_into_file "1: Hello World" hello &&
     HASH1=$(git rev-parse --verify HEAD) &&
     add_line_into_file "2: A new day for git" hello &&
     HASH2=$(git rev-parse --verify HEAD) &&
     add_line_into_file "3: Another new day for git" hello &&
     HASH3=$(git rev-parse --verify HEAD) &&
     add_line_into_file "4: Ciao for now" hello &&
     HASH4=$(git rev-parse --verify HEAD)

ok 1 - set up basic repo with 1 file (hello) and 4 commits

expecting success of 6030.2 'bisect starts with only one bad': 
	git bisect reset &&
	git bisect start &&
	git bisect bad $HASH4 &&
	git bisect next

We are not bisecting.
status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
warning: bisecting only with a bad commit
Bisecting: 1 revision left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
ok 2 - bisect starts with only one bad

expecting success of 6030.3 'bisect does not start with only one good': 
	git bisect reset &&
	git bisect start &&
	git bisect good $HASH1 &&
	test_must_fail git bisect next

Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'main'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
error: You need to give me at least one bad|new and good|old revision.
You can use "git bisect bad|new" and "git bisect good|old" for that.
ok 3 - bisect does not start with only one good

expecting success of 6030.4 'bisect start with one bad and good': 
	git bisect reset &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect next

Already on 'main'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
ok 4 - bisect start with one bad and good

expecting success of 6030.5 'bisect fails if given any junk instead of revs': 
	git bisect reset &&
	test_must_fail git bisect start foo $HASH1 -- &&
	test_must_fail git bisect start $HASH4 $HASH1 bar -- &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	test -z "$(ls .git/BISECT_* 2>/dev/null)" &&
	git bisect start &&
	test_must_fail git bisect good foo $HASH1 &&
	test_must_fail git bisect good $HASH1 bar &&
	test_must_fail git bisect bad frotz &&
	test_must_fail git bisect bad $HASH3 $HASH4 &&
	test_must_fail git bisect skip bar $HASH3 &&
	test_must_fail git bisect skip $HASH1 foo &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4

Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'main'
fatal: 'foo' does not appear to be a valid revision
fatal: 'bar' does not appear to be a valid revision
status: waiting for both good and bad commits
error: Bad rev input: foo
error: Bad rev input: bar
error: Bad rev input: frotz
error: 'git bisect bad' can take only one argument.
error: Bad rev input: bar
error: Bad rev input: foo
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
ok 5 - bisect fails if given any junk instead of revs

expecting success of 6030.6 'bisect start without -- takes unknown arg as pathspec': 
	git bisect reset &&
	git bisect start foo bar &&
	grep foo ".git/BISECT_NAMES" &&
	grep bar ".git/BISECT_NAMES"

Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'main'
status: waiting for both good and bad commits
 'foo' 'bar'
 'foo' 'bar'
ok 6 - bisect start without -- takes unknown arg as pathspec

expecting success of 6030.7 'bisect reset: back in the main branch': 
	git bisect reset &&
	echo "* main" > branch.expect &&
	git branch > branch.output &&
	cmp branch.expect branch.output

Already on 'main'
ok 7 - bisect reset: back in the main branch

expecting success of 6030.8 'bisect reset: back in another branch': 
	git checkout -b other &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH3 &&
	git bisect reset &&
	echo "  main" > branch.expect &&
	echo "* other" >> branch.expect &&
	git branch > branch.output &&
	cmp branch.expect branch.output

Switched to a new branch 'other'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 8 - bisect reset: back in another branch

expecting success of 6030.9 'bisect reset when not bisecting': 
	git bisect reset &&
	git branch > branch.output &&
	cmp branch.expect branch.output

We are not bisecting.
ok 9 - bisect reset when not bisecting

expecting success of 6030.10 'bisect reset removes packed refs': 
	git bisect reset &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH3 &&
	git pack-refs --all --prune &&
	git bisect next &&
	git bisect reset &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	test -z "$(git for-each-ref "refs/heads/bisect")"

We are not bisecting.
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 10 - bisect reset removes packed refs

expecting success of 6030.11 'bisect reset removes bisect state after --no-checkout': 
	git bisect reset &&
	git bisect start --no-checkout &&
	git bisect good $HASH1 &&
	git bisect bad $HASH3 &&
	git bisect next &&
	git bisect reset &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	test -z "$(git for-each-ref "refs/heads/bisect")" &&
	test -z "$(git for-each-ref "BISECT_HEAD")"

We are not bisecting.
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
ok 11 - bisect reset removes bisect state after --no-checkout

expecting success of 6030.12 'bisect start: back in good branch': 
	git branch > branch.output &&
	grep "* other" branch.output > /dev/null &&
	git bisect start $HASH4 $HASH1 -- &&
	git bisect good &&
	git bisect start $HASH4 $HASH1 -- &&
	git bisect bad &&
	git bisect reset &&
	git branch > branch.output &&
	grep "* other" branch.output > /dev/null

Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c is the first bad commit
commit 32a594a3fdac2d57cf6d02987e30eec68511498c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    Add <4: Ciao for now> into <hello>.

 hello | 1 +
 1 file changed, 1 insertion(+)
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 12 - bisect start: back in good branch

expecting success of 6030.13 'bisect start: no ".git/BISECT_START" created if junk rev': 
	git bisect reset &&
	test_must_fail git bisect start $HASH4 foo -- &&
	git branch > branch.output &&
	grep "* other" branch.output > /dev/null &&
	test_path_is_missing .git/BISECT_START

We are not bisecting.
fatal: 'foo' does not appear to be a valid revision
ok 13 - bisect start: no ".git/BISECT_START" created if junk rev

expecting success of 6030.14 'bisect start: existing ".git/BISECT_START" not modified if junk rev': 
	git bisect start $HASH4 $HASH1 -- &&
	git bisect good &&
	cp .git/BISECT_START saved &&
	test_must_fail git bisect start $HASH4 foo -- &&
	git branch > branch.output &&
	test_i18ngrep "* (no branch, bisect started on other)" branch.output > /dev/null &&
	test_cmp saved .git/BISECT_START

Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c is the first bad commit
commit 32a594a3fdac2d57cf6d02987e30eec68511498c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    Add <4: Ciao for now> into <hello>.

 hello | 1 +
 1 file changed, 1 insertion(+)
fatal: 'foo' does not appear to be a valid revision
ok 14 - bisect start: existing ".git/BISECT_START" not modified if junk rev

expecting success of 6030.15 'bisect start: no ".git/BISECT_START" if mistaken rev': 
	git bisect start $HASH4 $HASH1 -- &&
	git bisect good &&
	test_must_fail git bisect start $HASH1 $HASH4 -- &&
	git branch > branch.output &&
	grep "* other" branch.output > /dev/null &&
	test_path_is_missing .git/BISECT_START

Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c is the first bad commit
commit 32a594a3fdac2d57cf6d02987e30eec68511498c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    Add <4: Ciao for now> into <hello>.

 hello | 1 +
 1 file changed, 1 insertion(+)
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
Some good revs are not ancestors of the bad rev.
git bisect cannot work properly in this case.
Maybe you mistook good and bad revs?
ok 15 - bisect start: no ".git/BISECT_START" if mistaken rev

expecting success of 6030.16 'bisect start: no ".git/BISECT_START" if checkout error': 
	echo "temp stuff" > hello &&
	test_must_fail git bisect start $HASH4 $HASH1 -- &&
	git branch &&
	git branch > branch.output &&
	grep "* other" branch.output > /dev/null &&
	test_path_is_missing .git/BISECT_START &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	git checkout HEAD hello

Bisecting: 0 revisions left to test after this (roughly 1 step)
error: Your local changes to the following files would be overwritten by checkout:
	hello
Please commit your changes or stash them before you switch branches.
Aborting
  main
* other
Updated 1 path from 2c98925
ok 16 - bisect start: no ".git/BISECT_START" if checkout error

expecting success of 6030.17 'bisect skip: successful result': 
	test_when_finished git bisect reset &&
	git bisect reset &&
	git bisect start $HASH4 $HASH1 &&
	git bisect skip &&
	git bisect bad > my_bisect_log.txt &&
	grep "$HASH2 is the first bad commit" my_bisect_log.txt

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first bad commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 17 - bisect skip: successful result

expecting success of 6030.18 'bisect skip: cannot tell between 3 commits': 
	test_when_finished git bisect reset &&
	git bisect start $HASH4 $HASH1 &&
	git bisect skip &&
	test_expect_code 2 git bisect skip >my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt &&
	! grep $HASH1 my_bisect_log.txt &&
	grep $HASH2 my_bisect_log.txt &&
	grep $HASH3 my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt

Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
The first bad commit could be any of:
7b7f204a749c3125d5224ed61ea2ae1187ad046f
3de952f2416b6084f557ec417709eac740c6818c
32a594a3fdac2d57cf6d02987e30eec68511498c
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 18 - bisect skip: cannot tell between 3 commits

expecting success of 6030.19 'bisect skip: cannot tell between 2 commits': 
	test_when_finished git bisect reset &&
	git bisect start $HASH4 $HASH1 &&
	git bisect skip &&
	test_expect_code 2 git bisect good >my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt &&
	! grep $HASH1 my_bisect_log.txt &&
	! grep $HASH2 my_bisect_log.txt &&
	grep $HASH3 my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt

Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
The first bad commit could be any of:
3de952f2416b6084f557ec417709eac740c6818c
32a594a3fdac2d57cf6d02987e30eec68511498c
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 19 - bisect skip: cannot tell between 2 commits

expecting success of 6030.20 'bisect skip: with commit both bad and skipped': 
	test_when_finished git bisect reset &&
	git bisect start &&
	git bisect skip &&
	git bisect bad &&
	git bisect good $HASH1 &&
	git bisect skip &&
	test_expect_code 2 git bisect good >my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt &&
	! grep $HASH1 my_bisect_log.txt &&
	! grep $HASH2 my_bisect_log.txt &&
	grep $HASH3 my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt

status: waiting for both good and bad commits
status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
The first bad commit could be any of:
3de952f2416b6084f557ec417709eac740c6818c
32a594a3fdac2d57cf6d02987e30eec68511498c
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 20 - bisect skip: with commit both bad and skipped

expecting success of 6030.21 '"git bisect run" simple case': 
	write_script test_script.sh <<-\EOF &&
	! grep Another hello >/dev/null
	EOF
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$HASH3 is the first bad commit" my_bisect_log.txt &&
	git bisect reset

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
3de952f2416b6084f557ec417709eac740c6818c is the first bad commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 21 - "git bisect run" simple case

expecting success of 6030.22 '"git bisect run" simple case': 
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect run printf "%s %s\n" reset --bisect-skip >my_bisect_log.txt &&
	grep -e "reset --bisect-skip" my_bisect_log.txt &&
	git bisect reset

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
reset --bisect-skip
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
ok 22 - "git bisect run" simple case

expecting success of 6030.23 '"git bisect run" with more complex "git bisect start"': 
	write_script test_script.sh <<-\EOF &&
	! grep Ciao hello >/dev/null
	EOF
	git bisect start $HASH4 $HASH1 &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$HASH4 is the first bad commit" my_bisect_log.txt &&
	git bisect reset

Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c is the first bad commit
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
ok 23 - "git bisect run" with more complex "git bisect start"

expecting success of 6030.24 'bisect run accepts exit code 126 as bad': 
	test_when_finished "git bisect reset" &&
	write_script test_script.sh <<-\EOF &&
	! grep Another hello || exit 126 >/dev/null
	EOF
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$HASH3 is the first bad commit" my_bisect_log.txt

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
3de952f2416b6084f557ec417709eac740c6818c is the first bad commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 24 - bisect run accepts exit code 126 as bad

expecting success of 6030.25 'bisect run fails with non-executable test script': 
	test_when_finished "git bisect reset" &&
	>not-executable.sh &&
	chmod -x not-executable.sh &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	test_must_fail git bisect run ./not-executable.sh >my_bisect_log.txt &&
	! grep "is the first bad commit" my_bisect_log.txt

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
 './not-executable.sh': 1: ./not-executable.sh: Permission denied
 './not-executable.sh': 1: ./not-executable.sh: Permission denied
error: bogus exit code 126 for good revision
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
ok 25 - bisect run fails with non-executable test script

expecting success of 6030.26 'bisect run accepts exit code 127 as bad': 
	test_when_finished "git bisect reset" &&
	write_script test_script.sh <<-\EOF &&
	! grep Another hello || exit 127 >/dev/null
	EOF
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$HASH3 is the first bad commit" my_bisect_log.txt

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
3de952f2416b6084f557ec417709eac740c6818c is the first bad commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'other'
ok 26 - bisect run accepts exit code 127 as bad

expecting success of 6030.27 'bisect run fails with missing test script': 
	test_when_finished "git bisect reset" &&
	rm -f does-not-exist.sh &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	test_must_fail git bisect run ./does-not-exist.sh >my_bisect_log.txt &&
	! grep "is the first bad commit" my_bisect_log.txt

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
 './does-not-exist.sh': 1: ./does-not-exist.sh: not found
 './does-not-exist.sh': 1: ./does-not-exist.sh: not found
error: bogus exit code 127 for good revision
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
ok 27 - bisect run fails with missing test script

expecting success of 6030.28 'bisect skip: add line and then a new test': 
	add_line_into_file "5: Another new line." hello &&
	HASH5=$(git rev-parse --verify HEAD) &&
	git bisect start $HASH5 $HASH1 &&
	git bisect skip &&
	git bisect good > my_bisect_log.txt &&
	grep "$HASH5 is the first bad commit" my_bisect_log.txt &&
	git bisect log > log_to_replay.txt &&
	git bisect reset

Bisecting: 1 revision left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 1 revision left to test after this (roughly 1 step)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
3082e11d3a0f2edca194c8ce1eb802256e38e75e is the first bad commit
Previous HEAD position was 32a594a Add <4: Ciao for now> into <hello>.
Switched to branch 'other'
ok 28 - bisect skip: add line and then a new test

expecting success of 6030.29 'bisect skip and bisect replay': 
	git bisect replay log_to_replay.txt > my_bisect_log.txt &&
	grep "$HASH5 is the first bad commit" my_bisect_log.txt &&
	git bisect reset

3082e11d3a0f2edca194c8ce1eb802256e38e75e is the first bad commit
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'other'
ok 29 - bisect skip and bisect replay

expecting success of 6030.30 'bisect run & skip: cannot tell between 2': 
	add_line_into_file "6: Yet a line." hello &&
	HASH6=$(git rev-parse --verify HEAD) &&
	write_script test_script.sh <<-\EOF &&
	sed -ne \$p hello | grep Ciao >/dev/null && exit 125
	! grep line hello >/dev/null
	EOF
	git bisect start $HASH6 $HASH1 &&
	test_expect_code 2 git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt &&
	! grep $HASH3 my_bisect_log.txt &&
	! grep $HASH6 my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt &&
	grep $HASH5 my_bisect_log.txt

Bisecting: 2 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
error: bisect run cannot continue any more
The first bad commit could be any of:
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c
[3082e11d3a0f2edca194c8ce1eb802256e38e75e] Add <5: Another new line.> into <hello>.
3082e11d3a0f2edca194c8ce1eb802256e38e75e
ok 30 - bisect run & skip: cannot tell between 2

expecting success of 6030.31 'bisect run & skip: find first bad': 
	git bisect reset &&
	add_line_into_file "7: Should be the last line." hello &&
	HASH7=$(git rev-parse --verify HEAD) &&
	write_script test_script.sh <<-\EOF &&
	sed -ne \$p hello | grep Ciao >/dev/null && exit 125
	sed -ne \$p hello | grep day >/dev/null && exit 125
	! grep Yet hello >/dev/null
	EOF
	git bisect start $HASH7 $HASH1 &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$HASH6 is the first bad commit" my_bisect_log.txt

Previous HEAD position was 32a594a Add <4: Ciao for now> into <hello>.
Switched to branch 'other'
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
ff29dcbe6fe49a0b462bddf0691a013c12a53316 is the first bad commit
ok 31 - bisect run & skip: find first bad

expecting success of 6030.32 'bisect skip only one range': 
	git bisect reset &&
	git bisect start $HASH7 $HASH1 &&
	git bisect skip $HASH1..$HASH5 &&
	test "$HASH6" = "$(git rev-parse --verify HEAD)" &&
	test_must_fail git bisect bad > my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt

Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
Switched to branch 'other'
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[ff29dcbe6fe49a0b462bddf0691a013c12a53316] Add <6: Yet a line.> into <hello>.
The first bad commit could be any of:
ok 32 - bisect skip only one range

expecting success of 6030.33 'bisect skip many ranges': 
	git bisect start $HASH7 $HASH1 &&
	test "$HASH4" = "$(git rev-parse --verify HEAD)" &&
	git bisect skip $HASH2 $HASH2.. ..$HASH5 &&
	test "$HASH6" = "$(git rev-parse --verify HEAD)" &&
	test_must_fail git bisect bad > my_bisect_log.txt &&
	grep "first bad commit could be any of" my_bisect_log.txt

Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
Switched to branch 'other'
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[ff29dcbe6fe49a0b462bddf0691a013c12a53316] Add <6: Yet a line.> into <hello>.
The first bad commit could be any of:
ok 33 - bisect skip many ranges

expecting success of 6030.34 'bisect starting with a detached HEAD': 
	git bisect reset &&
	git checkout main^ &&
	HEAD=$(git rev-parse --verify HEAD) &&
	git bisect start &&
	test $HEAD = $(cat .git/BISECT_START) &&
	git bisect reset &&
	test $HEAD = $(git rev-parse --verify HEAD)

Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
Switched to branch 'other'
Note: switching to 'main^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 3de952f Add <3: Another new day for git> into <hello>.
status: waiting for both good and bad commits
HEAD is now at 3de952f Add <3: Another new day for git> into <hello>.
ok 34 - bisect starting with a detached HEAD

expecting success of 6030.35 'bisect errors out if bad and good are mistaken': 
	git bisect reset &&
	test_must_fail git bisect start $HASH2 $HASH4 2> rev_list_error &&
	test_i18ngrep "mistook good and bad" rev_list_error &&
	git bisect reset

We are not bisecting.
Maybe you mistook good and bad revs?
We are not bisecting.
ok 35 - bisect errors out if bad and good are mistaken

expecting success of 6030.36 'bisect does not create a "bisect" branch': 
	git bisect reset &&
	git bisect start $HASH7 $HASH1 &&
	git branch bisect &&
	rev_hash4=$(git rev-parse --verify HEAD) &&
	test "$rev_hash4" = "$HASH4" &&
	git branch -D bisect &&
	git bisect good &&
	git branch bisect &&
	rev_hash6=$(git rev-parse --verify HEAD) &&
	test "$rev_hash6" = "$HASH6" &&
	git bisect good > my_bisect_log.txt &&
	grep "$HASH7 is the first bad commit" my_bisect_log.txt &&
	git bisect reset &&
	rev_hash6=$(git rev-parse --verify bisect) &&
	test "$rev_hash6" = "$HASH6" &&
	git branch -D bisect

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
Deleted branch bisect (was 32a594a).
Bisecting: 0 revisions left to test after this (roughly 1 step)
[ff29dcbe6fe49a0b462bddf0691a013c12a53316] Add <6: Yet a line.> into <hello>.
3659270ffa1e67547111a107f53191676dff3424 is the first bad commit
Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
HEAD is now at 3de952f Add <3: Another new day for git> into <hello>.
Deleted branch bisect (was ff29dcb).
ok 36 - bisect does not create a "bisect" branch

expecting success of 6030.37 'side branch creation': 
	git bisect reset &&
	git checkout -b side $HASH4 &&
	add_line_into_file "5(side): first line on a side branch" hello2 &&
	SIDE_HASH5=$(git rev-parse --verify HEAD) &&
	add_line_into_file "6(side): second line on a side branch" hello2 &&
	SIDE_HASH6=$(git rev-parse --verify HEAD) &&
	add_line_into_file "7(side): third line on a side branch" hello2 &&
	SIDE_HASH7=$(git rev-parse --verify HEAD)

We are not bisecting.
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to a new branch 'side'
ok 37 - side branch creation

expecting success of 6030.38 'good merge base when good and bad are siblings': 
	git bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt &&
	git bisect good > my_bisect_log.txt &&
	! grep "merge base must be tested" my_bisect_log.txt &&
	grep $HASH6 my_bisect_log.txt &&
	git bisect reset

Bisecting: a merge base must be tested
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
[ff29dcbe6fe49a0b462bddf0691a013c12a53316] Add <6: Yet a line.> into <hello>.
Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
Switched to branch 'side'
ok 38 - good merge base when good and bad are siblings

expecting success of 6030.39 'skipped merge base when good and bad are siblings': 
	git bisect start "$SIDE_HASH7" "$HASH7" > my_bisect_log.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt &&
	git bisect skip > my_bisect_log.txt 2>&1 &&
	grep "warning" my_bisect_log.txt &&
	grep $SIDE_HASH6 my_bisect_log.txt &&
	git bisect reset

Bisecting: a merge base must be tested
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
warning: the merge base between 5f781ef4cb0a9c22dd8218d08759770f336c6b8b and [3659270ffa1e67547111a107f53191676dff3424] must be skipped.
[11ec2d5fe9fe0e901ce1c6680bb1025a3431ebcf] Add <6(side): second line on a side branch> into <hello2>.
Previous HEAD position was 11ec2d5 Add <6(side): second line on a side branch> into <hello2>.
Switched to branch 'side'
ok 39 - skipped merge base when good and bad are siblings

expecting success of 6030.40 'bad merge base when good and bad are siblings': 
	git bisect start "$HASH7" HEAD > my_bisect_log.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
	grep $HASH4 my_bisect_log.txt &&
	test_must_fail git bisect bad > my_bisect_log.txt 2>&1 &&
	test_i18ngrep "merge base $HASH4 is bad" my_bisect_log.txt &&
	test_i18ngrep "fixed between $HASH4 and \[$SIDE_HASH7\]" my_bisect_log.txt &&
	git bisect reset

Bisecting: a merge base must be tested
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
The merge base 32a594a3fdac2d57cf6d02987e30eec68511498c is bad.
This means the bug has been fixed between 32a594a3fdac2d57cf6d02987e30eec68511498c and [5f781ef4cb0a9c22dd8218d08759770f336c6b8b].
Previous HEAD position was 32a594a Add <4: Ciao for now> into <hello>.
Switched to branch 'side'
ok 40 - bad merge base when good and bad are siblings

expecting success of 6030.41 'many merge bases creation': 
	git checkout "$SIDE_HASH5" &&
	git merge -m "merge HASH5 and SIDE_HASH5" "$HASH5" &&
	A_HASH=$(git rev-parse --verify HEAD) &&
	git checkout side &&
	git merge -m "merge HASH7 and SIDE_HASH7" "$HASH7" &&
	B_HASH=$(git rev-parse --verify HEAD) &&
	git merge-base --all "$A_HASH" "$B_HASH" > merge_bases.txt &&
	test_line_count = 2 merge_bases.txt &&
	grep "$HASH5" merge_bases.txt &&
	grep "$SIDE_HASH5" merge_bases.txt

Note: switching to '7208484534e368cca8612445f78d2afcf429f37e'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7208484 Create file <hello2> with <5(side): first line on a side branch> inside.
Merge made by the 'ort' strategy.
 hello | 1 +
 1 file changed, 1 insertion(+)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b9ff094 merge HASH5 and SIDE_HASH5

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> b9ff094

Switched to branch 'side'
Merge made by the 'ort' strategy.
 hello | 3 +++
 1 file changed, 3 insertions(+)
3082e11d3a0f2edca194c8ce1eb802256e38e75e
7208484534e368cca8612445f78d2afcf429f37e
ok 41 - many merge bases creation

expecting success of 6030.42 '"git bisect run --first-parent" simple case': 
	git rev-list --first-parent $B_HASH ^$HASH4 >first_parent_chain.txt &&
	write_script test_script.sh <<-\EOF &&
	grep $(git rev-parse HEAD) first_parent_chain.txt || exit -1
	! grep line hello >/dev/null
	EOF
	git bisect start --first-parent &&
	test_path_is_file ".git/BISECT_FIRST_PARENT" &&
	git bisect good $HASH4 &&
	git bisect bad $B_HASH &&
	git bisect run ./test_script.sh >my_bisect_log.txt &&
	grep "$B_HASH is the first bad commit" my_bisect_log.txt &&
	git bisect reset &&
	test_path_is_missing .git/BISECT_FIRST_PARENT

status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 1 revision left to test after this (roughly 1 step)
[11ec2d5fe9fe0e901ce1c6680bb1025a3431ebcf] Add <6(side): second line on a side branch> into <hello2>.
fe9323c3283b1fd8f5356e35e66d011387629714 is the first bad commit
Previous HEAD position was 5f781ef Add <7(side): third line on a side branch> into <hello2>.
Switched to branch 'side'
ok 42 - "git bisect run --first-parent" simple case

expecting success of 6030.43 'good merge bases when good and bad are siblings': 
	git bisect start "$B_HASH" "$A_HASH" > my_bisect_log.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
	git bisect good > my_bisect_log2.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log2.txt &&
	{
		{
			grep "$SIDE_HASH5" my_bisect_log.txt &&
			grep "$HASH5" my_bisect_log2.txt
		} || {
			grep "$SIDE_HASH5" my_bisect_log2.txt &&
			grep "$HASH5" my_bisect_log.txt
		}
	} &&
	git bisect reset

Bisecting: a merge base must be tested
Bisecting: a merge base must be tested
[7208484534e368cca8612445f78d2afcf429f37e] Create file <hello2> with <5(side): first line on a side branch> inside.
[3082e11d3a0f2edca194c8ce1eb802256e38e75e] Add <5: Another new line.> into <hello>.
Previous HEAD position was 3082e11 Add <5: Another new line.> into <hello>.
Switched to branch 'side'
ok 43 - good merge bases when good and bad are siblings

expecting success of 6030.44 'optimized merge base checks': 
	git bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
	grep "$HASH4" my_bisect_log.txt &&
	git bisect good > my_bisect_log2.txt &&
	test -f ".git/BISECT_ANCESTORS_OK" &&
	test "$HASH6" = $(git rev-parse --verify HEAD) &&
	git bisect bad &&
	git bisect good "$A_HASH" > my_bisect_log4.txt &&
	test_i18ngrep "merge base must be tested" my_bisect_log4.txt &&
	test_path_is_missing ".git/BISECT_ANCESTORS_OK"

Bisecting: a merge base must be tested
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3082e11d3a0f2edca194c8ce1eb802256e38e75e] Add <5: Another new line.> into <hello>.
Bisecting: a merge base must be tested
ok 44 - optimized merge base checks

expecting success of 6030.45 '"parallel" side branch creation': 
	git bisect reset &&
	git checkout -b parallel $HASH1 &&
	mkdir dir1 dir2 &&
	add_line_into_file "1(para): line 1 on parallel branch" dir1/file1 &&
	PARA_HASH1=$(git rev-parse --verify HEAD) &&
	add_line_into_file "2(para): line 2 on parallel branch" dir2/file2 &&
	PARA_HASH2=$(git rev-parse --verify HEAD) &&
	add_line_into_file "3(para): line 3 on parallel branch" dir2/file3 &&
	PARA_HASH3=$(git rev-parse --verify HEAD) &&
	git merge -m "merge HASH4 and PARA_HASH3" "$HASH4" &&
	PARA_HASH4=$(git rev-parse --verify HEAD) &&
	add_line_into_file "5(para): add line on parallel branch" dir1/file1 &&
	PARA_HASH5=$(git rev-parse --verify HEAD) &&
	add_line_into_file "6(para): add line on parallel branch" dir2/file2 &&
	PARA_HASH6=$(git rev-parse --verify HEAD) &&
	git merge -m "merge HASH7 and PARA_HASH6" "$HASH7" &&
	PARA_HASH7=$(git rev-parse --verify HEAD)

Previous HEAD position was 3082e11 Add <5: Another new line.> into <hello>.
Switched to branch 'side'
Switched to a new branch 'parallel'
Merge made by the 'ort' strategy.
 hello | 3 +++
 1 file changed, 3 insertions(+)
Merge made by the 'ort' strategy.
 hello | 3 +++
 1 file changed, 3 insertions(+)
ok 45 - "parallel" side branch creation

expecting success of 6030.46 'restricting bisection on one dir': 
	git bisect reset &&
	git bisect start HEAD $HASH1 -- dir1 &&
	para1=$(git rev-parse --verify HEAD) &&
	test "$para1" = "$PARA_HASH1" &&
	git bisect bad > my_bisect_log.txt &&
	grep "$PARA_HASH1 is the first bad commit" my_bisect_log.txt

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[de049b9c4e10f2524a46e151b65aa4f156fd52d6] Create file <dir1/file1> with <1(para): line 1 on parallel branch> inside.
de049b9c4e10f2524a46e151b65aa4f156fd52d6 is the first bad commit
ok 46 - restricting bisection on one dir

expecting success of 6030.47 'restricting bisection on one dir and a file': 
	git bisect reset &&
	git bisect start HEAD $HASH1 -- dir1 hello &&
	para4=$(git rev-parse --verify HEAD) &&
	test "$para4" = "$PARA_HASH4" &&
	git bisect bad &&
	hash3=$(git rev-parse --verify HEAD) &&
	test "$hash3" = "$HASH3" &&
	git bisect good &&
	hash4=$(git rev-parse --verify HEAD) &&
	test "$hash4" = "$HASH4" &&
	git bisect good &&
	para1=$(git rev-parse --verify HEAD) &&
	test "$para1" = "$PARA_HASH1" &&
	git bisect good > my_bisect_log.txt &&
	grep "$PARA_HASH4 is the first bad commit" my_bisect_log.txt

Previous HEAD position was de049b9 Create file <dir1/file1> with <1(para): line 1 on parallel branch> inside.
Switched to branch 'parallel'
Bisecting: 4 revisions left to test after this (roughly 2 steps)
[3f04efc661812c541a2f96ecaae46a79c6ea2464] merge HASH4 and PARA_HASH3
Bisecting: 2 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 1 revision left to test after this (roughly 1 step)
[32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[de049b9c4e10f2524a46e151b65aa4f156fd52d6] Create file <dir1/file1> with <1(para): line 1 on parallel branch> inside.
3f04efc661812c541a2f96ecaae46a79c6ea2464 is the first bad commit
ok 47 - restricting bisection on one dir and a file

expecting success of 6030.48 'skipping away from skipped commit': 
	git bisect start $PARA_HASH7 $HASH1 &&
	para4=$(git rev-parse --verify HEAD) &&
	test "$para4" = "$PARA_HASH4" &&
        git bisect skip &&
	hash7=$(git rev-parse --verify HEAD) &&
	test "$hash7" = "$HASH7" &&
        git bisect skip &&
	para3=$(git rev-parse --verify HEAD) &&
	test "$para3" = "$PARA_HASH3"

Previous HEAD position was de049b9 Create file <dir1/file1> with <1(para): line 1 on parallel branch> inside.
Switched to branch 'parallel'
Bisecting: 5 revisions left to test after this (roughly 3 steps)
[3f04efc661812c541a2f96ecaae46a79c6ea2464] merge HASH4 and PARA_HASH3
Bisecting: 6 revisions left to test after this (roughly 3 steps)
[3659270ffa1e67547111a107f53191676dff3424] Add <7: Should be the last line.> into <hello>.
Bisecting: 6 revisions left to test after this (roughly 3 steps)
[a5a4dc83955e310a4f693ab6f6bcea46c8544843] Create file <dir2/file3> with <3(para): line 3 on parallel branch> inside.
ok 48 - skipping away from skipped commit

expecting success of 6030.49 'erroring out when using bad path arguments': 
	test_must_fail git bisect start $PARA_HASH7 $HASH1 -- foobar 2> error.txt &&
	test_i18ngrep "bad path arguments" error.txt

Maybe you started with bad path arguments?
ok 49 - erroring out when using bad path arguments

expecting success of 6030.50 'test bisection on bare repo - --no-checkout specified': 
	git clone --bare . bare.nocheckout &&
	(
		cd bare.nocheckout &&
		git bisect start --no-checkout &&
		git bisect good $HASH1 &&
		git bisect bad $HASH4 &&
		git bisect run eval \
			"test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \
			>../nocheckout.log
	) &&
	grep "$HASH3 is the first bad commit" nocheckout.log

Cloning into bare repository 'bare.nocheckout'...
done.
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
3de952f2416b6084f557ec417709eac740c6818c is the first bad commit
ok 50 - test bisection on bare repo - --no-checkout specified

expecting success of 6030.51 'test bisection on bare repo - --no-checkout defaulted': 
	git clone --bare . bare.defaulted &&
	(
		cd bare.defaulted &&
		git bisect start &&
		git bisect good $HASH1 &&
		git bisect bad $HASH4 &&
		git bisect run eval \
			"test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \
			>../defaulted.log
	) &&
	grep "$HASH3 is the first bad commit" defaulted.log

Cloning into bare repository 'bare.defaulted'...
done.
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
3de952f2416b6084f557ec417709eac740c6818c is the first bad commit
ok 51 - test bisection on bare repo - --no-checkout defaulted

expecting success of 6030.52 'broken branch creation': 
	git bisect reset &&
	git checkout -b broken $HASH4 &&
	git tag BROKEN_HASH4 $HASH4 &&
	add_line_into_file "5(broken): first line on a broken branch" hello2 &&
	git tag BROKEN_HASH5 &&
	mkdir missing &&
	:> missing/MISSING &&
	git add missing/MISSING &&
	git commit -m "6(broken): Added file that will be deleted" &&
	git tag BROKEN_HASH6 &&
	deleted=$(git rev-parse --verify HEAD:missing) &&
	add_line_into_file "7(broken): second line on a broken branch" hello2 &&
	git tag BROKEN_HASH7 &&
	add_line_into_file "8(broken): third line on a broken branch" hello2 &&
	git tag BROKEN_HASH8 &&
	git rm missing/MISSING &&
	git commit -m "9(broken): Remove missing file" &&
	git tag BROKEN_HASH9 &&
	rm .git/objects/$(test_oid_to_path $deleted)

We are not bisecting.
Switched to a new branch 'broken'
[broken 55bdac5] 6(broken): Added file that will be deleted
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 missing/MISSING
rm 'missing/MISSING'
[broken 508db08] 9(broken): Remove missing file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 missing/MISSING
ok 52 - broken branch creation

expecting success of 6030.53 'bisect fails if tree is broken on start commit': 
	git bisect reset &&
	test_must_fail git bisect start BROKEN_HASH7 BROKEN_HASH4 2>error.txt &&
	test_cmp expected.missing-tree.default error.txt

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 1 step)
ok 53 - bisect fails if tree is broken on start commit

expecting success of 6030.54 'bisect fails if tree is broken on trial commit': 
	git bisect reset &&
	test_must_fail git bisect start BROKEN_HASH9 BROKEN_HASH4 2>error.txt &&
	git reset --hard broken &&
	git checkout broken &&
	test_cmp expected.missing-tree.default error.txt

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 1 step)
HEAD is now at 508db08 9(broken): Remove missing file
Already on 'broken'
ok 54 - bisect fails if tree is broken on trial commit

expecting success of 6030.55 'bisect: --no-checkout - start commit bad': 
	git bisect reset &&
	git bisect start BROKEN_HASH7 BROKEN_HASH4 --no-checkout &&
	check_same BROKEN_HASH6 BISECT_HEAD &&
	git bisect reset

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
Checking BROKEN_HASH6 is the same as BISECT_HEAD
ok 55 - bisect: --no-checkout - start commit bad

expecting success of 6030.56 'bisect: --no-checkout - trial commit bad': 
	git bisect reset &&
	git bisect start broken BROKEN_HASH4 --no-checkout &&
	check_same BROKEN_HASH6 BISECT_HEAD &&
	git bisect reset

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
Checking BROKEN_HASH6 is the same as BISECT_HEAD
ok 56 - bisect: --no-checkout - trial commit bad

expecting success of 6030.57 'bisect: --no-checkout - target before breakage': 
	git bisect reset &&
	git bisect start broken BROKEN_HASH4 --no-checkout &&
	check_same BROKEN_HASH6 BISECT_HEAD &&
	git bisect bad BISECT_HEAD &&
	check_same BROKEN_HASH5 BISECT_HEAD &&
	git bisect bad BISECT_HEAD &&
	check_same BROKEN_HASH5 bisect/bad &&
	git bisect reset

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
Checking BROKEN_HASH6 is the same as BISECT_HEAD
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[fd9df6dc932ed4e1539696448c064bc31b947f3f] Create file <hello2> with <5(broken): first line on a broken branch> inside.
Checking BROKEN_HASH5 is the same as BISECT_HEAD
fd9df6dc932ed4e1539696448c064bc31b947f3f is the first bad commit
commit fd9df6dc932ed4e1539696448c064bc31b947f3f
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:28:13 2005 -0700

    Create file <hello2> with <5(broken): first line on a broken branch> inside.

 hello2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 hello2
Checking BROKEN_HASH5 is the same as bisect/bad
ok 57 - bisect: --no-checkout - target before breakage

expecting success of 6030.58 'bisect: --no-checkout - target in breakage': 
	git bisect reset &&
	git bisect start broken BROKEN_HASH4 --no-checkout &&
	check_same BROKEN_HASH6 BISECT_HEAD &&
	git bisect bad BISECT_HEAD &&
	check_same BROKEN_HASH5 BISECT_HEAD &&
	test_must_fail git bisect good BISECT_HEAD &&
	check_same BROKEN_HASH6 bisect/bad &&
	git bisect reset

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
Checking BROKEN_HASH6 is the same as BISECT_HEAD
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[fd9df6dc932ed4e1539696448c064bc31b947f3f] Create file <hello2> with <5(broken): first line on a broken branch> inside.
Checking BROKEN_HASH5 is the same as BISECT_HEAD
fatal: unable to read tree 39f7e61a724187ab767d2e08442d9b6b9dab587d
55bdac58da30a5a429094bf5466b8095b29ecbf0 is the first bad commit
Checking BROKEN_HASH6 is the same as bisect/bad
ok 58 - bisect: --no-checkout - target in breakage

expecting success of 6030.59 'bisect: --no-checkout - target after breakage': 
	git bisect reset &&
	git bisect start broken BROKEN_HASH4 --no-checkout &&
	check_same BROKEN_HASH6 BISECT_HEAD &&
	git bisect good BISECT_HEAD &&
	check_same BROKEN_HASH8 BISECT_HEAD &&
	test_must_fail git bisect good BISECT_HEAD &&
	check_same BROKEN_HASH9 bisect/bad &&
	git bisect reset

We are not bisecting.
Bisecting: 2 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
Checking BROKEN_HASH6 is the same as BISECT_HEAD
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3df15bfcf4745f4f8ff0007d5ca42e75eba04ff9] Add <8(broken): third line on a broken branch> into <hello2>.
Checking BROKEN_HASH8 is the same as BISECT_HEAD
fatal: unable to read tree 39f7e61a724187ab767d2e08442d9b6b9dab587d
508db08019a8b4b05c3cfe2447ada8a4c78fe3de is the first bad commit
Checking BROKEN_HASH9 is the same as bisect/bad
ok 59 - bisect: --no-checkout - target after breakage

expecting success of 6030.60 'bisect: demonstrate identification of damage boundary': 
	git bisect reset &&
	git checkout broken &&
	git bisect start broken main --no-checkout &&
	test_must_fail git bisect run "$SHELL_PATH" -c '
		GOOD=$(git for-each-ref "--format=%(objectname)" refs/bisect/good-*) &&
		git rev-list --objects BISECT_HEAD --not $GOOD >tmp.$$ &&
		git pack-objects --stdout >/dev/null < tmp.$$
		rc=$?
		rm -f tmp.$$
		test $rc = 0' &&
	check_same BROKEN_HASH6 bisect/bad &&
	git bisect reset

We are not bisecting.
Already on 'broken'
Bisecting: 2 revisions left to test after this (roughly 1 step)
[55bdac58da30a5a429094bf5466b8095b29ecbf0] 6(broken): Added file that will be deleted
running  '/bin/sh' '-c' '
		GOOD=$(git for-each-ref "--format=%(objectname)" refs/bisect/good-*) &&
		git rev-list --objects BISECT_HEAD --not $GOOD >tmp.$$ &&
		git pack-objects --stdout >/dev/null < tmp.$$
		rc=$?
		rm -f tmp.$$
		test $rc = 0'
fatal: bad tree object 39f7e61a724187ab767d2e08442d9b6b9dab587d
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[fd9df6dc932ed4e1539696448c064bc31b947f3f] Create file <hello2> with <5(broken): first line on a broken branch> inside.
running  '/bin/sh' '-c' '
		GOOD=$(git for-each-ref "--format=%(objectname)" refs/bisect/good-*) &&
		git rev-list --objects BISECT_HEAD --not $GOOD >tmp.$$ &&
		git pack-objects --stdout >/dev/null < tmp.$$
		rc=$?
		rm -f tmp.$$
		test $rc = 0'
fatal: unable to read tree 39f7e61a724187ab767d2e08442d9b6b9dab587d
Checking BROKEN_HASH6 is the same as bisect/bad
ok 60 - bisect: demonstrate identification of damage boundary

expecting success of 6030.61 'bisect log: successful result': 
	git bisect reset &&
	git bisect start $HASH4 $HASH2 &&
	git bisect good &&
	git bisect log >bisect-log.txt &&
	test_cmp expected.bisect-log bisect-log.txt &&
	git bisect reset

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
32a594a3fdac2d57cf6d02987e30eec68511498c is the first bad commit
commit 32a594a3fdac2d57cf6d02987e30eec68511498c
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    Add <4: Ciao for now> into <hello>.

 hello | 1 +
 1 file changed, 1 insertion(+)
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'broken'
ok 61 - bisect log: successful result

expecting success of 6030.62 'bisect log: only skip commits left': 
	git bisect reset &&
	git bisect start $HASH4 $HASH2 &&
	test_must_fail git bisect skip &&
	git bisect log >bisect-skip-log.txt &&
	test_cmp expected.bisect-skip-log bisect-skip-log.txt &&
	git bisect reset

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
There are only 'skip'ped commits left to test.
The first bad commit could be any of:
3de952f2416b6084f557ec417709eac740c6818c
32a594a3fdac2d57cf6d02987e30eec68511498c
We cannot bisect more!
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'broken'
ok 62 - bisect log: only skip commits left

expecting success of 6030.63 '"git bisect bad HEAD" behaves as "git bisect bad"': 
	git checkout parallel &&
	git bisect start HEAD $HASH1 &&
	git bisect good HEAD &&
	git bisect bad HEAD &&
	test "$HASH6" = $(git rev-parse --verify HEAD) &&
	git bisect reset

Switched to branch 'parallel'
Bisecting: 5 revisions left to test after this (roughly 3 steps)
[3f04efc661812c541a2f96ecaae46a79c6ea2464] merge HASH4 and PARA_HASH3
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[3659270ffa1e67547111a107f53191676dff3424] Add <7: Should be the last line.> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[ff29dcbe6fe49a0b462bddf0691a013c12a53316] Add <6: Yet a line.> into <hello>.
Previous HEAD position was ff29dcb Add <6: Yet a line.> into <hello>.
Switched to branch 'parallel'
ok 63 - "git bisect bad HEAD" behaves as "git bisect bad"

expecting success of 6030.64 'bisect starts with only one new': 
	git bisect reset &&
	git bisect start &&
	git bisect new $HASH4 &&
	git bisect next

We are not bisecting.
status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
warning: bisecting only with a new commit
Bisecting: 1 revision left to test after this (roughly 1 step)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
ok 64 - bisect starts with only one new

expecting success of 6030.65 'bisect does not start with only one old': 
	git bisect reset &&
	git bisect start &&
	git bisect old $HASH1 &&
	test_must_fail git bisect next

Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'parallel'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
error: You need to give me at least one bad|new and good|old revision.
You can use "git bisect bad|new" and "git bisect good|old" for that.
ok 65 - bisect does not start with only one old

expecting success of 6030.66 'bisect start with one new and old': 
	git bisect reset &&
	git bisect start &&
	git bisect old $HASH1 &&
	git bisect new $HASH4 &&
	git bisect new &&
	git bisect new >bisect_result &&
	grep "$HASH2 is the first new commit" bisect_result &&
	git bisect log >log_to_replay.txt &&
	git bisect reset

Already on 'parallel'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first new commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'parallel'
ok 66 - bisect start with one new and old

expecting success of 6030.67 'bisect replay with old and new': 
	git bisect replay log_to_replay.txt >bisect_result &&
	grep "$HASH2 is the first new commit" bisect_result &&
	git bisect reset

7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first new commit
Already on 'parallel'
ok 67 - bisect replay with old and new

expecting success of 6030.68 'bisect replay with CRLF log': 
	append_cr <log_to_replay.txt >log_to_replay_crlf.txt &&
	git bisect replay log_to_replay_crlf.txt >bisect_result_crlf &&
	grep "$HASH2 is the first new commit" bisect_result_crlf &&
	git bisect reset

7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first new commit
Already on 'parallel'
ok 68 - bisect replay with CRLF log

expecting success of 6030.69 'bisect cannot mix old/new and good/bad': 
	git bisect start &&
	git bisect bad $HASH4 &&
	test_must_fail git bisect old $HASH1

status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
error: Invalid command: you're currently in a bad/good bisect
ok 69 - bisect cannot mix old/new and good/bad

expecting success of 6030.70 'bisect terms needs 0 or 1 argument': 
	git bisect reset &&
	test_must_fail git bisect terms only-one &&
	test_must_fail git bisect terms 1 2 &&
	test_must_fail git bisect terms 2>actual &&
	echo "error: no terms defined" >expected &&
	test_cmp expected actual

Already on 'parallel'
error: no terms defined
error: --bisect-terms requires 0 or 1 argument
ok 70 - bisect terms needs 0 or 1 argument

expecting success of 6030.71 'bisect terms shows good/bad after start': 
	git bisect reset &&
	git bisect start HEAD $HASH1 &&
	git bisect terms --term-good >actual &&
	echo good >expected &&
	test_cmp expected actual &&
	git bisect terms --term-bad >actual &&
	echo bad >expected &&
	test_cmp expected actual

We are not bisecting.
Bisecting: 5 revisions left to test after this (roughly 3 steps)
[3f04efc661812c541a2f96ecaae46a79c6ea2464] merge HASH4 and PARA_HASH3
ok 71 - bisect terms shows good/bad after start

expecting success of 6030.72 'bisect start with one term1 and term2': 
	git bisect reset &&
	git bisect start --term-old term2 --term-new term1 &&
	git bisect term2 $HASH1 &&
	git bisect term1 $HASH4 &&
	git bisect term1 &&
	git bisect term1 >bisect_result &&
	grep "$HASH2 is the first term1 commit" bisect_result &&
	git bisect log >log_to_replay.txt &&
	git bisect reset

Previous HEAD position was 3f04efc merge HASH4 and PARA_HASH3
Switched to branch 'parallel'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first term1 commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'parallel'
ok 72 - bisect start with one term1 and term2

expecting success of 6030.73 'bisect replay with term1 and term2': 
	git bisect replay log_to_replay.txt >bisect_result &&
	grep "$HASH2 is the first term1 commit" bisect_result &&
	git bisect reset

7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first term1 commit
Already on 'parallel'
ok 73 - bisect replay with term1 and term2

expecting success of 6030.74 'bisect start term1 term2': 
	git bisect reset &&
	git bisect start --term-new term1 --term-old term2 $HASH4 $HASH1 &&
	git bisect term1 &&
	git bisect term1 >bisect_result &&
	grep "$HASH2 is the first term1 commit" bisect_result &&
	git bisect log >log_to_replay.txt &&
	git bisect reset

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.
7b7f204a749c3125d5224ed61ea2ae1187ad046f is the first term1 commit
Previous HEAD position was 7b7f204 Add <2: A new day for git> into <hello>.
Switched to branch 'parallel'
ok 74 - bisect start term1 term2

expecting success of 6030.75 'bisect cannot mix terms': 
	git bisect reset &&
	git bisect start --term-good term1 --term-bad term2 $HASH4 $HASH1 &&
	test_must_fail git bisect a &&
	test_must_fail git bisect b &&
	test_must_fail git bisect bad &&
	test_must_fail git bisect good &&
	test_must_fail git bisect new &&
	test_must_fail git bisect old

We are not bisecting.
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
error: unknown subcommand: `a'
usage: git bisect--helper --bisect-reset [<commit>]
   or: git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]
   or: git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<paths>...]
   or: git bisect--helper --bisect-next
   or: git bisect--helper --bisect-state (bad|new) [<rev>]
   or: git bisect--helper --bisect-state (good|old) [<rev>...]
   or: git bisect--helper --bisect-replay <filename>
   or: git bisect--helper --bisect-skip [(<rev>|<range>)...]
   or: git bisect--helper --bisect-visualize
   or: git bisect--helper --bisect-run <cmd>...

error: unknown subcommand: `b'
usage: git bisect--helper --bisect-reset [<commit>]
   or: git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]
   or: git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<paths>...]
   or: git bisect--helper --bisect-next
   or: git bisect--helper --bisect-state (bad|new) [<rev>]
   or: git bisect--helper --bisect-state (good|old) [<rev>...]
   or: git bisect--helper --bisect-replay <filename>
   or: git bisect--helper --bisect-skip [(<rev>|<range>)...]
   or: git bisect--helper --bisect-visualize
   or: git bisect--helper --bisect-run <cmd>...

error: Invalid command: you're currently in a term2/term1 bisect
error: Invalid command: you're currently in a term2/term1 bisect
error: Invalid command: you're currently in a term2/term1 bisect
error: Invalid command: you're currently in a term2/term1 bisect
ok 75 - bisect cannot mix terms

expecting success of 6030.76 'bisect terms rejects invalid terms': 
	git bisect reset &&
	test_must_fail git bisect start --term-good &&
	test_must_fail git bisect start --term-good invalid..term &&
	test_must_fail git bisect start --term-bad &&
	test_must_fail git bisect terms --term-bad invalid..term &&
	test_must_fail git bisect terms --term-good bad &&
	test_must_fail git bisect terms --term-good old &&
	test_must_fail git bisect terms --term-good skip &&
	test_must_fail git bisect terms --term-good reset &&
	test_path_is_missing .git/BISECT_TERMS

Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'parallel'
error: '' is not a valid term
error: 'invalid..term' is not a valid term
error: '' is not a valid term
error: --bisect-terms requires 0 or 1 argument
error: --bisect-terms requires 0 or 1 argument
error: --bisect-terms requires 0 or 1 argument
error: --bisect-terms requires 0 or 1 argument
error: --bisect-terms requires 0 or 1 argument
ok 76 - bisect terms rejects invalid terms

expecting success of 6030.77 'bisect start --term-* does store terms': 
	git bisect reset &&
	git bisect start --term-bad=one --term-good=two &&
	git bisect terms >actual &&
	cat <<-EOF >expected &&
	Your current terms are two for the old state
	and one for the new state.
	EOF
	test_cmp expected actual &&
	git bisect terms --term-bad >actual &&
	echo one >expected &&
	test_cmp expected actual &&
	git bisect terms --term-good >actual &&
	echo two >expected &&
	test_cmp expected actual

Already on 'parallel'
status: waiting for both good and bad commits
ok 77 - bisect start --term-* does store terms

expecting success of 6030.78 'bisect start takes options and revs in any order': 
	git bisect reset &&
	git bisect start --term-good one $HASH4 \
		--term-good two --term-bad bad-term \
		$HASH1 --term-good three -- &&
	(git bisect terms --term-bad && git bisect terms --term-good) >actual &&
	printf "%s\n%s\n" bad-term three >expected &&
	test_cmp expected actual

Already on 'parallel'
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
ok 78 - bisect start takes options and revs in any order

expecting success of 6030.79 'bisect skip works with --term*': 
	git bisect reset &&
	git bisect start --term-new=fixed --term-old=unfixed HEAD $HASH1 &&
	hash_skipped_from=$(git rev-parse --verify HEAD) &&
	git bisect skip &&
	hash_skipped_to=$(git rev-parse --verify HEAD) &&
	test "$hash_skipped_from" != "$hash_skipped_to"

Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'parallel'
Bisecting: 5 revisions left to test after this (roughly 3 steps)
[3f04efc661812c541a2f96ecaae46a79c6ea2464] merge HASH4 and PARA_HASH3
Bisecting: 6 revisions left to test after this (roughly 3 steps)
[3659270ffa1e67547111a107f53191676dff3424] Add <7: Should be the last line.> into <hello>.
ok 79 - bisect skip works with --term*

expecting success of 6030.80 'git bisect reset cleans bisection state properly': 
	git bisect reset &&
	git bisect start &&
	git bisect good $HASH1 &&
	git bisect bad $HASH4 &&
	git bisect reset &&
	test -z "$(git for-each-ref "refs/bisect/*")" &&
	test_path_is_missing ".git/BISECT_EXPECTED_REV" &&
	test_path_is_missing ".git/BISECT_ANCESTORS_OK" &&
	test_path_is_missing ".git/BISECT_LOG" &&
	test_path_is_missing ".git/BISECT_RUN" &&
	test_path_is_missing ".git/BISECT_TERMS" &&
	test_path_is_missing ".git/head-name" &&
	test_path_is_missing ".git/BISECT_HEAD" &&
	test_path_is_missing ".git/BISECT_START"

Previous HEAD position was 3659270 Add <7: Should be the last line.> into <hello>.
Switched to branch 'parallel'
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
Bisecting: 0 revisions left to test after this (roughly 1 step)
[3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.
Previous HEAD position was 3de952f Add <3: Another new day for git> into <hello>.
Switched to branch 'parallel'
ok 80 - git bisect reset cleans bisection state properly

expecting success of 6030.81 'bisect handles annotated tags': 
	test_commit commit-one &&
	git tag -m foo tag-one &&
	test_commit commit-two &&
	git tag -m foo tag-two &&
	git bisect start &&
	git bisect good tag-one &&
	git bisect bad tag-two >output &&
	bad=$(git rev-parse --verify tag-two^{commit}) &&
	grep "$bad is the first bad commit" output

[parallel f1585f4] commit-one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-one.t
[parallel e0be3ae] commit-two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit-two.t
status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
e0be3aebb5267e11957031f9de30f2ae54b3a230 is the first bad commit
ok 81 - bisect handles annotated tags

expecting success of 6030.82 'bisect run fails with exit code equals or greater than 128': 
	write_script test_script.sh <<-\EOF &&
	exit 128
	EOF
	test_must_fail git bisect run ./test_script.sh &&
	write_script test_script.sh <<-\EOF &&
	exit 255
	EOF
	test_must_fail git bisect run ./test_script.sh

running  './test_script.sh'
error: bisect run failed: exit code 128 from ' './test_script.sh'' is < 0 or >= 128
running  './test_script.sh'
error: bisect run failed: exit code 255 from ' './test_script.sh'' is < 0 or >= 128
ok 82 - bisect run fails with exit code equals or greater than 128

expecting success of 6030.83 'bisect visualize with a filename with dash and space': 
	echo "My test line" >>"./-hello 2" &&
	git add -- "./-hello 2" &&
	git commit --quiet -m "Add test line" -- "./-hello 2" &&
	git bisect visualize -p -- "-hello 2"

commit 3cbde3a4f793d47d680a620ed5dc56faa69ec7d6
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:32:13 2005 -0700

    Add test line

diff --git a/-hello 2 b/-hello 2
new file mode 100644
index 0000000..2b57c7c
--- /dev/null
+++ b/-hello 2	
@@ -0,0 +1 @@
+My test line
ok 83 - bisect visualize with a filename with dash and space

expecting success of 6030.84 'bisect state output with multiple good commits': 
	git bisect reset &&
	git bisect start >output &&
	grep "waiting for both good and bad commits" output &&
	git bisect log >output &&
	grep "waiting for both good and bad commits" output &&
	git bisect good "$HASH1" >output &&
	grep "waiting for bad commit, 1 good commit known" output &&
	git bisect log >output &&
	grep "waiting for bad commit, 1 good commit known" output &&
	git bisect good "$HASH2" >output &&
	grep "waiting for bad commit, 2 good commits known" output &&
	git bisect log >output &&
	grep "waiting for bad commit, 2 good commits known" output

Already on 'parallel'
status: waiting for both good and bad commits
# status: waiting for both good and bad commits
status: waiting for bad commit, 1 good commit known
# status: waiting for bad commit, 1 good commit known
status: waiting for bad commit, 2 good commits known
# status: waiting for bad commit, 2 good commits known
ok 84 - bisect state output with multiple good commits

expecting success of 6030.85 'bisect state output with bad commit': 
	git bisect reset &&
	git bisect start >output &&
	grep "waiting for both good and bad commits" output &&
	git bisect log >output &&
	grep "waiting for both good and bad commits" output &&
	git bisect bad "$HASH4" >output &&
	grep -F "waiting for good commit(s), bad commit known" output &&
	git bisect log >output &&
	grep -F "waiting for good commit(s), bad commit known" output

Already on 'parallel'
status: waiting for both good and bad commits
# status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
# status: waiting for good commit(s), bad commit known
ok 85 - bisect state output with bad commit

# passed all 85 test(s)
1..85
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6405-merge-symlinks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6405-merge-symlinks/.git/
expecting success of 6405.1 'setup': 
	git config core.symlinks false &&
	>file &&
	git add file &&
	git commit -m initial &&
	git branch b-symlink &&
	git branch b-file &&
	l=$(printf file | git hash-object -t blob -w --stdin) &&
	echo "120000 $l	symlink" | git update-index --index-info &&
	git commit -m main &&
	git checkout b-symlink &&
	l=$(printf file-different | git hash-object -t blob -w --stdin) &&
	echo "120000 $l	symlink" | git update-index --index-info &&
	git commit -m b-symlink &&
	git checkout b-file &&
	echo plain-file >symlink &&
	git add symlink &&
	git commit -m b-file

[main (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[main 5fce5e3] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 symlink
Switched to branch 'b-symlink'
[b-symlink efc53db] b-symlink
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 symlink
Switched to branch 'b-file'
[b-file 32029ee] b-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 symlink
ok 1 - setup

expecting success of 6405.2 'merge main into b-symlink, which has a different symbolic link': 
	git checkout b-symlink &&
	test_must_fail git merge main

Switched to branch 'b-symlink'
CONFLICT (add/add): Merge conflict in symlink
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - merge main into b-symlink, which has a different symbolic link

expecting success of 6405.3 'the merge result must be a file': 
	test_path_is_file symlink

ok 3 - the merge result must be a file

expecting success of 6405.4 'merge main into b-file, which has a file instead of a symbolic link': 
	git reset --hard &&
	git checkout b-file &&
	test_must_fail git merge main

HEAD is now at efc53db b-symlink
Switched to branch 'b-file'
CONFLICT (distinct types): symlink had different types on each side; renamed one of them so each can be recorded somewhere.
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - merge main into b-file, which has a file instead of a symbolic link

expecting success of 6405.5 'the merge result must be a file': 
	test_path_is_file symlink

ok 5 - the merge result must be a file

expecting success of 6405.6 'merge b-file, which has a file instead of a symbolic link, into main': 
	git reset --hard &&
	git checkout main &&
	test_must_fail git merge b-file

HEAD is now at 32029ee b-file
Switched to branch 'main'
CONFLICT (distinct types): symlink had different types on each side; renamed one of them so each can be recorded somewhere.
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - merge b-file, which has a file instead of a symbolic link, into main

expecting success of 6405.7 'the merge result must be a file': 
	test_path_is_file symlink

ok 7 - the merge result must be a file

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6300-for-each-ref.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6300-for-each-ref/.git/
expecting success of 6300.1 'setup': 
	test_oid_cache <<-EOF &&
	disklen sha1:138
	disklen sha256:154
	EOF
	setdate_and_increment &&
	echo "Using $datestamp" > one &&
	git add one &&
	git commit -m "Initial" &&
	git branch -M main &&
	setdate_and_increment &&
	git tag -a -m "Tagging at $datestamp" testtag &&
	git update-ref refs/remotes/origin/main main &&
	git remote add origin nowhere &&
	git config branch.main.remote origin &&
	git config branch.main.merge refs/heads/main &&
	git remote add myfork elsewhere &&
	git config remote.pushdefault myfork &&
	git config push.default current

[master (root-commit) ea12284] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
ok 1 - setup

expecting success of 6300.2 'basic atom: head refname': 
		git for-each-ref --format='%(refname)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 2 - basic atom: head refname

expecting success of 6300.3 'basic atom: head refname:': 
		git for-each-ref --format='%(refname:)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 3 - basic atom: head refname:

expecting success of 6300.4 'basic atom: head refname:short': 
		git for-each-ref --format='%(refname:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 4 - basic atom: head refname:short

expecting success of 6300.5 'basic atom: head refname:lstrip=1': 
		git for-each-ref --format='%(refname:lstrip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 5 - basic atom: head refname:lstrip=1

expecting success of 6300.6 'basic atom: head refname:lstrip=2': 
		git for-each-ref --format='%(refname:lstrip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 6 - basic atom: head refname:lstrip=2

expecting success of 6300.7 'basic atom: head refname:lstrip=-1': 
		git for-each-ref --format='%(refname:lstrip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 7 - basic atom: head refname:lstrip=-1

expecting success of 6300.8 'basic atom: head refname:lstrip=-2': 
		git for-each-ref --format='%(refname:lstrip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 8 - basic atom: head refname:lstrip=-2

expecting success of 6300.9 'basic atom: head refname:rstrip=1': 
		git for-each-ref --format='%(refname:rstrip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 9 - basic atom: head refname:rstrip=1

expecting success of 6300.10 'basic atom: head refname:rstrip=2': 
		git for-each-ref --format='%(refname:rstrip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 10 - basic atom: head refname:rstrip=2

expecting success of 6300.11 'basic atom: head refname:rstrip=-1': 
		git for-each-ref --format='%(refname:rstrip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 11 - basic atom: head refname:rstrip=-1

expecting success of 6300.12 'basic atom: head refname:rstrip=-2': 
		git for-each-ref --format='%(refname:rstrip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 12 - basic atom: head refname:rstrip=-2

expecting success of 6300.13 'basic atom: head refname:strip=1': 
		git for-each-ref --format='%(refname:strip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 13 - basic atom: head refname:strip=1

expecting success of 6300.14 'basic atom: head refname:strip=2': 
		git for-each-ref --format='%(refname:strip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 14 - basic atom: head refname:strip=2

expecting success of 6300.15 'basic atom: head refname:strip=-1': 
		git for-each-ref --format='%(refname:strip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 15 - basic atom: head refname:strip=-1

expecting success of 6300.16 'basic atom: head refname:strip=-2': 
		git for-each-ref --format='%(refname:strip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 16 - basic atom: head refname:strip=-2

expecting success of 6300.17 'basic atom: head upstream': 
		git for-each-ref --format='%(upstream)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 17 - basic atom: head upstream

expecting success of 6300.18 'basic atom: head upstream:short': 
		git for-each-ref --format='%(upstream:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 18 - basic atom: head upstream:short

expecting success of 6300.19 'basic atom: head upstream:lstrip=2': 
		git for-each-ref --format='%(upstream:lstrip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 19 - basic atom: head upstream:lstrip=2

expecting success of 6300.20 'basic atom: head upstream:lstrip=-2': 
		git for-each-ref --format='%(upstream:lstrip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 20 - basic atom: head upstream:lstrip=-2

expecting success of 6300.21 'basic atom: head upstream:rstrip=2': 
		git for-each-ref --format='%(upstream:rstrip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 21 - basic atom: head upstream:rstrip=2

expecting success of 6300.22 'basic atom: head upstream:rstrip=-2': 
		git for-each-ref --format='%(upstream:rstrip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 22 - basic atom: head upstream:rstrip=-2

expecting success of 6300.23 'basic atom: head upstream:strip=2': 
		git for-each-ref --format='%(upstream:strip=2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 23 - basic atom: head upstream:strip=2

expecting success of 6300.24 'basic atom: head upstream:strip=-2': 
		git for-each-ref --format='%(upstream:strip=-2)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 24 - basic atom: head upstream:strip=-2

expecting success of 6300.25 'basic atom: head push': 
		git for-each-ref --format='%(push)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 25 - basic atom: head push

expecting success of 6300.26 'basic atom: head push:short': 
		git for-each-ref --format='%(push:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 26 - basic atom: head push:short

expecting success of 6300.27 'basic atom: head push:lstrip=1': 
		git for-each-ref --format='%(push:lstrip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 27 - basic atom: head push:lstrip=1

expecting success of 6300.28 'basic atom: head push:lstrip=-1': 
		git for-each-ref --format='%(push:lstrip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 28 - basic atom: head push:lstrip=-1

expecting success of 6300.29 'basic atom: head push:rstrip=1': 
		git for-each-ref --format='%(push:rstrip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 29 - basic atom: head push:rstrip=1

expecting success of 6300.30 'basic atom: head push:rstrip=-1': 
		git for-each-ref --format='%(push:rstrip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 30 - basic atom: head push:rstrip=-1

expecting success of 6300.31 'basic atom: head push:strip=1': 
		git for-each-ref --format='%(push:strip=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 31 - basic atom: head push:strip=1

expecting success of 6300.32 'basic atom: head push:strip=-1': 
		git for-each-ref --format='%(push:strip=-1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 32 - basic atom: head push:strip=-1

expecting success of 6300.33 'basic atom: head objecttype': 
		git for-each-ref --format='%(objecttype)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 33 - basic atom: head objecttype

expecting success of 6300.34 'basic atom: head objectsize': 
		git for-each-ref --format='%(objectsize)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 34 - basic atom: head objectsize

expecting success of 6300.35 'basic atom: head objectsize:disk': 
		git for-each-ref --format='%(objectsize:disk)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 35 - basic atom: head objectsize:disk

expecting success of 6300.36 'basic atom: head deltabase': 
		git for-each-ref --format='%(deltabase)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 36 - basic atom: head deltabase

expecting success of 6300.37 'basic atom: head objectname': 
		git for-each-ref --format='%(objectname)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 37 - basic atom: head objectname

expecting success of 6300.38 'basic atom: head objectname:short': 
		git for-each-ref --format='%(objectname:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 38 - basic atom: head objectname:short

expecting success of 6300.39 'basic atom: head objectname:short=1': 
		git for-each-ref --format='%(objectname:short=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 39 - basic atom: head objectname:short=1

expecting success of 6300.40 'basic atom: head objectname:short=10': 
		git for-each-ref --format='%(objectname:short=10)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 40 - basic atom: head objectname:short=10

expecting success of 6300.41 'basic atom: head tree': 
		git for-each-ref --format='%(tree)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 41 - basic atom: head tree

expecting success of 6300.42 'basic atom: head tree:short': 
		git for-each-ref --format='%(tree:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 42 - basic atom: head tree:short

expecting success of 6300.43 'basic atom: head tree:short=1': 
		git for-each-ref --format='%(tree:short=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 43 - basic atom: head tree:short=1

expecting success of 6300.44 'basic atom: head tree:short=10': 
		git for-each-ref --format='%(tree:short=10)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 44 - basic atom: head tree:short=10

expecting success of 6300.45 'basic atom: head parent': 
		git for-each-ref --format='%(parent)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 45 - basic atom: head parent

expecting success of 6300.46 'basic atom: head parent:short': 
		git for-each-ref --format='%(parent:short)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 46 - basic atom: head parent:short

expecting success of 6300.47 'basic atom: head parent:short=1': 
		git for-each-ref --format='%(parent:short=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 47 - basic atom: head parent:short=1

expecting success of 6300.48 'basic atom: head parent:short=10': 
		git for-each-ref --format='%(parent:short=10)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 48 - basic atom: head parent:short=10

expecting success of 6300.49 'basic atom: head numparent': 
		git for-each-ref --format='%(numparent)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 49 - basic atom: head numparent

expecting success of 6300.50 'basic atom: head object': 
		git for-each-ref --format='%(object)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 50 - basic atom: head object

expecting success of 6300.51 'basic atom: head type': 
		git for-each-ref --format='%(type)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 51 - basic atom: head type

expecting success of 6300.52 'basic atom: head raw': 
		git for-each-ref --format='%(raw)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 52 - basic atom: head raw

expecting success of 6300.53 'basic atom: head *objectname': 
		git for-each-ref --format='%(*objectname)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 53 - basic atom: head *objectname

expecting success of 6300.54 'basic atom: head *objecttype': 
		git for-each-ref --format='%(*objecttype)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 54 - basic atom: head *objecttype

expecting success of 6300.55 'basic atom: head author': 
		git for-each-ref --format='%(author)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 55 - basic atom: head author

expecting success of 6300.56 'basic atom: head authorname': 
		git for-each-ref --format='%(authorname)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 56 - basic atom: head authorname

expecting success of 6300.57 'basic atom: head authoremail': 
		git for-each-ref --format='%(authoremail)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 57 - basic atom: head authoremail

expecting success of 6300.58 'basic atom: head authoremail:trim': 
		git for-each-ref --format='%(authoremail:trim)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 58 - basic atom: head authoremail:trim

expecting success of 6300.59 'basic atom: head authoremail:localpart': 
		git for-each-ref --format='%(authoremail:localpart)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 59 - basic atom: head authoremail:localpart

expecting success of 6300.60 'basic atom: head authordate': 
		git for-each-ref --format='%(authordate)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 60 - basic atom: head authordate

expecting success of 6300.61 'basic atom: head committer': 
		git for-each-ref --format='%(committer)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 61 - basic atom: head committer

expecting success of 6300.62 'basic atom: head committername': 
		git for-each-ref --format='%(committername)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 62 - basic atom: head committername

expecting success of 6300.63 'basic atom: head committeremail': 
		git for-each-ref --format='%(committeremail)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 63 - basic atom: head committeremail

expecting success of 6300.64 'basic atom: head committeremail:trim': 
		git for-each-ref --format='%(committeremail:trim)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 64 - basic atom: head committeremail:trim

expecting success of 6300.65 'basic atom: head committeremail:localpart': 
		git for-each-ref --format='%(committeremail:localpart)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 65 - basic atom: head committeremail:localpart

expecting success of 6300.66 'basic atom: head committerdate': 
		git for-each-ref --format='%(committerdate)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 66 - basic atom: head committerdate

expecting success of 6300.67 'basic atom: head tag': 
		git for-each-ref --format='%(tag)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 67 - basic atom: head tag

expecting success of 6300.68 'basic atom: head tagger': 
		git for-each-ref --format='%(tagger)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 68 - basic atom: head tagger

expecting success of 6300.69 'basic atom: head taggername': 
		git for-each-ref --format='%(taggername)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 69 - basic atom: head taggername

expecting success of 6300.70 'basic atom: head taggeremail': 
		git for-each-ref --format='%(taggeremail)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 70 - basic atom: head taggeremail

expecting success of 6300.71 'basic atom: head taggeremail:trim': 
		git for-each-ref --format='%(taggeremail:trim)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 71 - basic atom: head taggeremail:trim

expecting success of 6300.72 'basic atom: head taggeremail:localpart': 
		git for-each-ref --format='%(taggeremail:localpart)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 72 - basic atom: head taggeremail:localpart

expecting success of 6300.73 'basic atom: head taggerdate': 
		git for-each-ref --format='%(taggerdate)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 73 - basic atom: head taggerdate

expecting success of 6300.74 'basic atom: head creator': 
		git for-each-ref --format='%(creator)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 74 - basic atom: head creator

expecting success of 6300.75 'basic atom: head creatordate': 
		git for-each-ref --format='%(creatordate)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 75 - basic atom: head creatordate

expecting success of 6300.76 'basic atom: head subject': 
		git for-each-ref --format='%(subject)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 76 - basic atom: head subject

expecting success of 6300.77 'basic atom: head subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 77 - basic atom: head subject:sanitize

expecting success of 6300.78 'basic atom: head contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 78 - basic atom: head contents:subject

expecting success of 6300.79 'basic atom: head body': 
		git for-each-ref --format='%(body)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 79 - basic atom: head body

expecting success of 6300.80 'basic atom: head contents:body': 
		git for-each-ref --format='%(contents:body)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 80 - basic atom: head contents:body

expecting success of 6300.81 'basic atom: head contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 81 - basic atom: head contents:signature

expecting success of 6300.82 'basic atom: head contents': 
		git for-each-ref --format='%(contents)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 82 - basic atom: head contents

expecting success of 6300.83 'basic atom: head contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 83 - basic atom: head contents:size

expecting success of 6300.84 'basic atom: head HEAD': 
		git for-each-ref --format='%(HEAD)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 84 - basic atom: head HEAD

expecting success of 6300.85 'basic atom: tag refname': 
		git for-each-ref --format='%(refname)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 85 - basic atom: tag refname

expecting success of 6300.86 'basic atom: tag refname:short': 
		git for-each-ref --format='%(refname:short)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 86 - basic atom: tag refname:short

expecting success of 6300.87 'basic atom: tag upstream': 
		git for-each-ref --format='%(upstream)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 87 - basic atom: tag upstream

expecting success of 6300.88 'basic atom: tag push': 
		git for-each-ref --format='%(push)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 88 - basic atom: tag push

expecting success of 6300.89 'basic atom: tag objecttype': 
		git for-each-ref --format='%(objecttype)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 89 - basic atom: tag objecttype

expecting success of 6300.90 'basic atom: tag objectsize': 
		git for-each-ref --format='%(objectsize)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 90 - basic atom: tag objectsize

expecting success of 6300.91 'basic atom: tag objectsize:disk': 
		git for-each-ref --format='%(objectsize:disk)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 91 - basic atom: tag objectsize:disk

expecting success of 6300.92 'basic atom: tag *objectsize:disk': 
		git for-each-ref --format='%(*objectsize:disk)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 92 - basic atom: tag *objectsize:disk

expecting success of 6300.93 'basic atom: tag deltabase': 
		git for-each-ref --format='%(deltabase)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 93 - basic atom: tag deltabase

expecting success of 6300.94 'basic atom: tag *deltabase': 
		git for-each-ref --format='%(*deltabase)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 94 - basic atom: tag *deltabase

expecting success of 6300.95 'basic atom: tag objectname': 
		git for-each-ref --format='%(objectname)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 95 - basic atom: tag objectname

expecting success of 6300.96 'basic atom: tag objectname:short': 
		git for-each-ref --format='%(objectname:short)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 96 - basic atom: tag objectname:short

expecting success of 6300.97 'basic atom: head objectname:short=1': 
		git for-each-ref --format='%(objectname:short=1)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 97 - basic atom: head objectname:short=1

expecting success of 6300.98 'basic atom: head objectname:short=10': 
		git for-each-ref --format='%(objectname:short=10)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 98 - basic atom: head objectname:short=10

expecting success of 6300.99 'basic atom: tag tree': 
		git for-each-ref --format='%(tree)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 99 - basic atom: tag tree

expecting success of 6300.100 'basic atom: tag tree:short': 
		git for-each-ref --format='%(tree:short)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 100 - basic atom: tag tree:short

expecting success of 6300.101 'basic atom: tag tree:short=1': 
		git for-each-ref --format='%(tree:short=1)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 101 - basic atom: tag tree:short=1

expecting success of 6300.102 'basic atom: tag tree:short=10': 
		git for-each-ref --format='%(tree:short=10)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 102 - basic atom: tag tree:short=10

expecting success of 6300.103 'basic atom: tag parent': 
		git for-each-ref --format='%(parent)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 103 - basic atom: tag parent

expecting success of 6300.104 'basic atom: tag parent:short': 
		git for-each-ref --format='%(parent:short)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 104 - basic atom: tag parent:short

expecting success of 6300.105 'basic atom: tag parent:short=1': 
		git for-each-ref --format='%(parent:short=1)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 105 - basic atom: tag parent:short=1

expecting success of 6300.106 'basic atom: tag parent:short=10': 
		git for-each-ref --format='%(parent:short=10)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 106 - basic atom: tag parent:short=10

expecting success of 6300.107 'basic atom: tag numparent': 
		git for-each-ref --format='%(numparent)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 107 - basic atom: tag numparent

expecting success of 6300.108 'basic atom: tag object': 
		git for-each-ref --format='%(object)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 108 - basic atom: tag object

expecting success of 6300.109 'basic atom: tag type': 
		git for-each-ref --format='%(type)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 109 - basic atom: tag type

expecting success of 6300.110 'basic atom: tag *objectname': 
		git for-each-ref --format='%(*objectname)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 110 - basic atom: tag *objectname

expecting success of 6300.111 'basic atom: tag *objecttype': 
		git for-each-ref --format='%(*objecttype)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 111 - basic atom: tag *objecttype

expecting success of 6300.112 'basic atom: tag author': 
		git for-each-ref --format='%(author)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 112 - basic atom: tag author

expecting success of 6300.113 'basic atom: tag authorname': 
		git for-each-ref --format='%(authorname)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 113 - basic atom: tag authorname

expecting success of 6300.114 'basic atom: tag authoremail': 
		git for-each-ref --format='%(authoremail)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 114 - basic atom: tag authoremail

expecting success of 6300.115 'basic atom: tag authoremail:trim': 
		git for-each-ref --format='%(authoremail:trim)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 115 - basic atom: tag authoremail:trim

expecting success of 6300.116 'basic atom: tag authoremail:localpart': 
		git for-each-ref --format='%(authoremail:localpart)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 116 - basic atom: tag authoremail:localpart

expecting success of 6300.117 'basic atom: tag authordate': 
		git for-each-ref --format='%(authordate)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 117 - basic atom: tag authordate

expecting success of 6300.118 'basic atom: tag committer': 
		git for-each-ref --format='%(committer)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 118 - basic atom: tag committer

expecting success of 6300.119 'basic atom: tag committername': 
		git for-each-ref --format='%(committername)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 119 - basic atom: tag committername

expecting success of 6300.120 'basic atom: tag committeremail': 
		git for-each-ref --format='%(committeremail)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 120 - basic atom: tag committeremail

expecting success of 6300.121 'basic atom: tag committeremail:trim': 
		git for-each-ref --format='%(committeremail:trim)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 121 - basic atom: tag committeremail:trim

expecting success of 6300.122 'basic atom: tag committeremail:localpart': 
		git for-each-ref --format='%(committeremail:localpart)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 122 - basic atom: tag committeremail:localpart

expecting success of 6300.123 'basic atom: tag committerdate': 
		git for-each-ref --format='%(committerdate)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 123 - basic atom: tag committerdate

expecting success of 6300.124 'basic atom: tag tag': 
		git for-each-ref --format='%(tag)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 124 - basic atom: tag tag

expecting success of 6300.125 'basic atom: tag tagger': 
		git for-each-ref --format='%(tagger)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 125 - basic atom: tag tagger

expecting success of 6300.126 'basic atom: tag taggername': 
		git for-each-ref --format='%(taggername)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 126 - basic atom: tag taggername

expecting success of 6300.127 'basic atom: tag taggeremail': 
		git for-each-ref --format='%(taggeremail)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 127 - basic atom: tag taggeremail

expecting success of 6300.128 'basic atom: tag taggeremail:trim': 
		git for-each-ref --format='%(taggeremail:trim)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 128 - basic atom: tag taggeremail:trim

expecting success of 6300.129 'basic atom: tag taggeremail:localpart': 
		git for-each-ref --format='%(taggeremail:localpart)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 129 - basic atom: tag taggeremail:localpart

expecting success of 6300.130 'basic atom: tag taggerdate': 
		git for-each-ref --format='%(taggerdate)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 130 - basic atom: tag taggerdate

expecting success of 6300.131 'basic atom: tag creator': 
		git for-each-ref --format='%(creator)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 131 - basic atom: tag creator

expecting success of 6300.132 'basic atom: tag creatordate': 
		git for-each-ref --format='%(creatordate)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 132 - basic atom: tag creatordate

expecting success of 6300.133 'basic atom: tag subject': 
		git for-each-ref --format='%(subject)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 133 - basic atom: tag subject

expecting success of 6300.134 'basic atom: tag subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 134 - basic atom: tag subject:sanitize

expecting success of 6300.135 'basic atom: tag contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 135 - basic atom: tag contents:subject

expecting success of 6300.136 'basic atom: tag body': 
		git for-each-ref --format='%(body)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 136 - basic atom: tag body

expecting success of 6300.137 'basic atom: tag contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 137 - basic atom: tag contents:body

expecting success of 6300.138 'basic atom: tag contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 138 - basic atom: tag contents:signature

expecting success of 6300.139 'basic atom: tag contents': 
		git for-each-ref --format='%(contents)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 139 - basic atom: tag contents

expecting success of 6300.140 'basic atom: tag contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 140 - basic atom: tag contents:size

expecting success of 6300.141 'basic atom: tag HEAD': 
		git for-each-ref --format='%(HEAD)' refs/tags/testtag >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 141 - basic atom: tag HEAD

expecting success of 6300.142 'basic atom: refs/tags/testtag *raw': 
	git cat-file commit refs/tags/testtag^{} >expected &&
	git for-each-ref --format="%(*raw)" refs/tags/testtag >actual &&
	sanitize_pgp <expected >expected.clean &&
	echo >>expected.clean &&
	sanitize_pgp <actual >actual.clean &&
	test_cmp expected.clean actual.clean

ok 142 - basic atom: refs/tags/testtag *raw

expecting success of 6300.143 'Check invalid atoms names are errors': 
	test_must_fail git for-each-ref --format="%(INVALID)" refs/heads

fatal: unknown field name: INVALID
ok 143 - Check invalid atoms names are errors

expecting success of 6300.144 'Check format specifiers are ignored in naming date atoms': 
	git for-each-ref --format="%(authordate)" refs/heads &&
	git for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&
	git for-each-ref --format="%(authordate) %(authordate:default)" refs/heads &&
	git for-each-ref --format="%(authordate:default) %(authordate:default)" refs/heads

Tue Jul 4 01:18:44 2006 +0200
Tue Jul 4 01:18:44 2006 +0200 Tue Jul 4 01:18:44 2006 +0200
Tue Jul 4 01:18:44 2006 +0200 Tue Jul 4 01:18:44 2006 +0200
Tue Jul 4 01:18:44 2006 +0200 Tue Jul 4 01:18:44 2006 +0200
ok 144 - Check format specifiers are ignored in naming date atoms

expecting success of 6300.145 'Check valid format specifiers for date fields': 
	git for-each-ref --format="%(authordate:default)" refs/heads &&
	git for-each-ref --format="%(authordate:relative)" refs/heads &&
	git for-each-ref --format="%(authordate:short)" refs/heads &&
	git for-each-ref --format="%(authordate:local)" refs/heads &&
	git for-each-ref --format="%(authordate:iso8601)" refs/heads &&
	git for-each-ref --format="%(authordate:rfc2822)" refs/heads

Tue Jul 4 01:18:44 2006 +0200
16 years ago
2006-07-04
Mon Jul 3 23:18:44 2006
2006-07-04 01:18:44 +0200
Tue, 4 Jul 2006 01:18:44 +0200
ok 145 - Check valid format specifiers for date fields

expecting success of 6300.146 'Check invalid format specifiers are errors': 
	test_must_fail git for-each-ref --format="%(authordate:INVALID)" refs/heads

fatal: unknown date format INVALID
ok 146 - Check invalid format specifiers are errors

expecting success of 6300.147 'arguments to %(objectname:short=) must be positive integers': 
	test_must_fail git for-each-ref --format="%(objectname:short=0)" &&
	test_must_fail git for-each-ref --format="%(objectname:short=-1)" &&
	test_must_fail git for-each-ref --format="%(objectname:short=foo)"

fatal: positive value expected '0' in %(objectname:short=0)
fatal: positive value expected '-1' in %(objectname:short=-1)
fatal: positive value expected 'foo' in %(objectname:short=foo)
ok 147 - arguments to %(objectname:short=) must be positive integers

expecting success of 6300.148 'Check unformatted date fields output': 
	test_date "" \
		"Tue Jul 4 01:18:43 2006 +0200" \
		"Tue Jul 4 01:18:44 2006 +0200" \
		"Tue Jul 4 01:18:45 2006 +0200"

ok 148 - Check unformatted date fields output

expecting success of 6300.149 'Check format "default" formatted date fields output': 
	test_date default \
		"Tue Jul 4 01:18:43 2006 +0200" \
		"Tue Jul 4 01:18:44 2006 +0200" \
		"Tue Jul 4 01:18:45 2006 +0200"

ok 149 - Check format "default" formatted date fields output

expecting success of 6300.150 'Check format "default-local" date fields output': 
	test_date default-local "Mon Jul 3 23:18:43 2006" "Mon Jul 3 23:18:44 2006" "Mon Jul 3 23:18:45 2006"

ok 150 - Check format "default-local" date fields output

expecting success of 6300.151 'Check format "relative" date fields output': 
	f=relative &&
	(git for-each-ref --shell --format="%(refname) %(committerdate:$f) %(authordate:$f)" refs/heads &&
	git for-each-ref --shell --format="%(refname) %(taggerdate:$f)" refs/tags) >actual

ok 151 - Check format "relative" date fields output

expecting success of 6300.152 'Check format "relative-local" date fields output': 
	test_date relative-local \
		"$(git for-each-ref --format="%(committerdate:relative)" refs/heads)" \
		"$(git for-each-ref --format="%(authordate:relative)" refs/heads)" \
		"$(git for-each-ref --format="%(taggerdate:relative)" refs/tags)"

ok 152 - Check format "relative-local" date fields output

expecting success of 6300.153 'Check format "short" date fields output': 
	test_date short 2006-07-04 2006-07-04 2006-07-04

ok 153 - Check format "short" date fields output

expecting success of 6300.154 'Check format "short-local" date fields output': 
	test_date short-local 2006-07-03 2006-07-03 2006-07-03

ok 154 - Check format "short-local" date fields output

expecting success of 6300.155 'Check format "local" date fields output': 
	test_date local \
		"Mon Jul 3 23:18:43 2006" \
		"Mon Jul 3 23:18:44 2006" \
		"Mon Jul 3 23:18:45 2006"

ok 155 - Check format "local" date fields output

expecting success of 6300.156 'Check format "iso8601" date fields output': 
	test_date iso8601 \
		"2006-07-04 01:18:43 +0200" \
		"2006-07-04 01:18:44 +0200" \
		"2006-07-04 01:18:45 +0200"

ok 156 - Check format "iso8601" date fields output

expecting success of 6300.157 'Check format "iso8601-local" date fields output': 
	test_date iso8601-local "2006-07-03 23:18:43 +0000" "2006-07-03 23:18:44 +0000" "2006-07-03 23:18:45 +0000"

ok 157 - Check format "iso8601-local" date fields output

expecting success of 6300.158 'Check format "rfc2822" date fields output': 
	test_date rfc2822 \
		"Tue, 4 Jul 2006 01:18:43 +0200" \
		"Tue, 4 Jul 2006 01:18:44 +0200" \
		"Tue, 4 Jul 2006 01:18:45 +0200"

ok 158 - Check format "rfc2822" date fields output

expecting success of 6300.159 'Check format "rfc2822-local" date fields output': 
	test_date rfc2822-local "Mon, 3 Jul 2006 23:18:43 +0000" "Mon, 3 Jul 2006 23:18:44 +0000" "Mon, 3 Jul 2006 23:18:45 +0000"

ok 159 - Check format "rfc2822-local" date fields output

expecting success of 6300.160 'Check format "raw" date fields output': 
	test_date raw "1151968723 +0200" "1151968724 +0200" "1151968725 +0200"

ok 160 - Check format "raw" date fields output

expecting success of 6300.161 'Check format "raw-local" date fields output': 
	test_date raw-local "1151968723 +0000" "1151968724 +0000" "1151968725 +0000"

ok 161 - Check format "raw-local" date fields output

expecting success of 6300.162 'Check format of strftime date fields': 
	echo "my date is 2006-07-04" >expected &&
	git for-each-ref \
	  --format="%(authordate:format:my date is %Y-%m-%d)" \
	  refs/heads >actual &&
	test_cmp expected actual

ok 162 - Check format of strftime date fields

expecting success of 6300.163 'Check format of strftime-local date fields': 
	echo "my date is 2006-07-03" >expected &&
	git for-each-ref \
	  --format="%(authordate:format-local:my date is %Y-%m-%d)" \
	  refs/heads >actual &&
	test_cmp expected actual

ok 163 - Check format of strftime-local date fields

expecting success of 6300.164 'exercise strftime with odd fields': 
	echo >expected &&
	git for-each-ref --format="%(authordate:format:)" refs/heads >actual &&
	test_cmp expected actual &&
	long="long format -- $ZERO_OID$ZERO_OID$ZERO_OID$ZERO_OID$ZERO_OID$ZERO_OID$ZERO_OID" &&
	echo $long >expected &&
	git for-each-ref --format="%(authordate:format:$long)" refs/heads >actual &&
	test_cmp expected actual

ok 164 - exercise strftime with odd fields

expecting success of 6300.165 'Verify ascending sort': 
	git for-each-ref --format="%(refname)" --sort=refname >actual &&
	test_cmp expected actual

ok 165 - Verify ascending sort

expecting success of 6300.166 'Verify descending sort': 
	git for-each-ref --format="%(refname)" --sort=-refname >actual &&
	test_cmp expected actual

ok 166 - Verify descending sort

expecting success of 6300.167 'Give help even with invalid sort atoms': 
	test_expect_code 129 git for-each-ref --sort=bogus -h >actual 2>&1 &&
	grep "^usage: git for-each-ref" actual

usage: git for-each-ref [<options>] [<pattern>]
ok 167 - Give help even with invalid sort atoms

expecting success of 6300.168 'exercise patterns with prefixes': 
	git tag testtag-2 &&
	test_when_finished "git tag -d testtag-2" &&
	git for-each-ref --format="%(refname)" \
		refs/tags/testtag refs/tags/testtag-2 >actual &&
	test_cmp expected actual

Deleted tag 'testtag-2' (was ea12284)
ok 168 - exercise patterns with prefixes

expecting success of 6300.169 'exercise glob patterns with prefixes': 
	git tag testtag-2 &&
	test_when_finished "git tag -d testtag-2" &&
	git for-each-ref --format="%(refname)" \
		refs/tags/testtag "refs/tags/testtag-*" >actual &&
	test_cmp expected actual

Deleted tag 'testtag-2' (was ea12284)
ok 169 - exercise glob patterns with prefixes

expecting success of 6300.170 'Quoting style: shell': 
	git for-each-ref --shell --format="%(refname)" >actual &&
	test_cmp expected actual

ok 170 - Quoting style: shell

expecting success of 6300.171 'Quoting style: perl': 
	git for-each-ref --perl --format="%(refname)" >actual &&
	test_cmp expected actual

ok 171 - Quoting style: perl

expecting success of 6300.172 'Quoting style: python': 
	git for-each-ref --python --format="%(refname)" >actual &&
	test_cmp expected actual

ok 172 - Quoting style: python

expecting success of 6300.173 'Quoting style: tcl': 
	git for-each-ref --tcl --format="%(refname)" >actual &&
	test_cmp expected actual

ok 173 - Quoting style: tcl

expecting success of 6300.174 'more than one quoting style: --perl --shell': 
		test_must_fail git for-each-ref --perl --shell 2>err &&
		grep '^error: more than one quoting style' err
	
error: more than one quoting style?
ok 174 - more than one quoting style: --perl --shell

expecting success of 6300.175 'more than one quoting style: -s --python': 
		test_must_fail git for-each-ref -s --python 2>err &&
		grep '^error: more than one quoting style' err
	
error: more than one quoting style?
ok 175 - more than one quoting style: -s --python

expecting success of 6300.176 'more than one quoting style: --python --tcl': 
		test_must_fail git for-each-ref --python --tcl 2>err &&
		grep '^error: more than one quoting style' err
	
error: more than one quoting style?
ok 176 - more than one quoting style: --python --tcl

expecting success of 6300.177 'more than one quoting style: --tcl --perl': 
		test_must_fail git for-each-ref --tcl --perl 2>err &&
		grep '^error: more than one quoting style' err
	
error: more than one quoting style?
ok 177 - more than one quoting style: --tcl --perl

expecting success of 6300.178 'setup for upstream:track[short]': 
	test_commit two

[main 4ddde45] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 178 - setup for upstream:track[short]

expecting success of 6300.179 'basic atom: head upstream:track': 
		git for-each-ref --format='%(upstream:track)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 179 - basic atom: head upstream:track

expecting success of 6300.180 'basic atom: head upstream:trackshort': 
		git for-each-ref --format='%(upstream:trackshort)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 180 - basic atom: head upstream:trackshort

expecting success of 6300.181 'basic atom: head upstream:track,nobracket': 
		git for-each-ref --format='%(upstream:track,nobracket)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 181 - basic atom: head upstream:track,nobracket

expecting success of 6300.182 'basic atom: head upstream:nobracket,track': 
		git for-each-ref --format='%(upstream:nobracket,track)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 182 - basic atom: head upstream:nobracket,track

expecting success of 6300.183 'setup for push:track[short]': 
	test_commit third &&
	git update-ref refs/remotes/myfork/main main &&
	git reset main~1

[main f6c71aa] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third.t
ok 183 - setup for push:track[short]

expecting success of 6300.184 'basic atom: head push:track': 
		git for-each-ref --format='%(push:track)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 184 - basic atom: head push:track

expecting success of 6300.185 'basic atom: head push:trackshort': 
		git for-each-ref --format='%(push:trackshort)' refs/heads/main >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 185 - basic atom: head push:trackshort

expecting success of 6300.186 'Check that :track[short] cannot be used with other atoms': 
	test_must_fail git for-each-ref --format="%(refname:track)" 2>/dev/null &&
	test_must_fail git for-each-ref --format="%(refname:trackshort)" 2>/dev/null

ok 186 - Check that :track[short] cannot be used with other atoms

expecting success of 6300.187 'Check that :track[short] works when upstream is invalid': 
	cat >expected <<-\EOF &&
	[gone]

	EOF
	test_when_finished "git config branch.main.merge refs/heads/main" &&
	git config branch.main.merge refs/heads/does-not-exist &&
	git for-each-ref \
		--format="%(upstream:track)$LF%(upstream:trackshort)" \
		refs/heads >actual &&
	test_cmp expected actual

ok 187 - Check that :track[short] works when upstream is invalid

expecting success of 6300.188 'Check for invalid refname format': 
	test_must_fail git for-each-ref --format="%(refname:INVALID)"

fatal: unrecognized %(refname:INVALID) argument: INVALID
ok 188 - Check for invalid refname format

expecting success of 6300.189 'set up color tests': 
	cat >expected.color <<-EOF &&
	$(git rev-parse --short refs/heads/main) <GREEN>main<RESET>
	$(git rev-parse --short refs/remotes/myfork/main) <GREEN>myfork/main<RESET>
	$(git rev-parse --short refs/remotes/origin/main) <GREEN>origin/main<RESET>
	$(git rev-parse --short refs/tags/testtag) <GREEN>testtag<RESET>
	$(git rev-parse --short refs/tags/third) <GREEN>third<RESET>
	$(git rev-parse --short refs/tags/two) <GREEN>two<RESET>
	EOF
	sed "s/<[^>]*>//g" <expected.color >expected.bare &&
	color_format="%(objectname:short) %(color:green)%(refname:short)"

ok 189 - set up color tests

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 6300.190 '%(color) shows color with a tty': 
	test_terminal git for-each-ref --format="$color_format" >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expected.color actual

ok 190 - %(color) shows color with a tty

expecting success of 6300.191 '%(color) does not show color without tty': 
	TERM=vt100 git for-each-ref --format="$color_format" >actual &&
	test_cmp expected.bare actual

ok 191 - %(color) does not show color without tty

expecting success of 6300.192 '--color can override tty check': 
	git for-each-ref --color --format="$color_format" >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expected.color actual

ok 192 - --color can override tty check

expecting success of 6300.193 'color.ui=always does not override tty check': 
	git -c color.ui=always for-each-ref --format="$color_format" >actual &&
	test_cmp expected.bare actual

ok 193 - color.ui=always does not override tty check

expecting success of 6300.194 'Check ambiguous head and tag refs (strict)': 
	git config --bool core.warnambiguousrefs true &&
	git checkout -b newtag &&
	echo "Using $datestamp" > one &&
	git add one &&
	git commit -m "Branch" &&
	setdate_and_increment &&
	git tag -m "Tagging at $datestamp" main &&
	git for-each-ref --format "%(refname:short)" refs/heads/main refs/tags/main >actual &&
	test_cmp expected actual

Switched to a new branch 'newtag'
[newtag dd26b11] Branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 194 - Check ambiguous head and tag refs (strict)

expecting success of 6300.195 'Check ambiguous head and tag refs (loose)': 
	git config --bool core.warnambiguousrefs false &&
	git for-each-ref --format "%(refname:short)" refs/heads/main refs/tags/main >actual &&
	test_cmp expected actual

ok 195 - Check ambiguous head and tag refs (loose)

expecting success of 6300.196 'Check ambiguous head and tag refs II (loose)': 
	git checkout main &&
	git tag ambiguous testtag^0 &&
	git branch ambiguous testtag^0 &&
	git for-each-ref --format "%(refname:short)" refs/heads/ambiguous refs/tags/ambiguous >actual &&
	test_cmp expected actual

Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)
ok 196 - Check ambiguous head and tag refs II (loose)

expecting success of 6300.197 'create tag without tagger': 
	git tag -a -m "Broken tag" taggerless &&
	git tag -f taggerless $(git cat-file tag taggerless |
		sed -e "/^tagger /d" |
		git hash-object --stdin -w -t tag)

Updated tag 'taggerless' (was 6a6c6a7)
ok 197 - create tag without tagger

expecting success of 6300.198 'basic atom: refs/tags/taggerless type': 
		git for-each-ref --format='%(type)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 198 - basic atom: refs/tags/taggerless type

expecting success of 6300.199 'basic atom: refs/tags/taggerless tag': 
		git for-each-ref --format='%(tag)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 199 - basic atom: refs/tags/taggerless tag

expecting success of 6300.200 'basic atom: refs/tags/taggerless tagger': 
		git for-each-ref --format='%(tagger)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 200 - basic atom: refs/tags/taggerless tagger

expecting success of 6300.201 'basic atom: refs/tags/taggerless taggername': 
		git for-each-ref --format='%(taggername)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 201 - basic atom: refs/tags/taggerless taggername

expecting success of 6300.202 'basic atom: refs/tags/taggerless taggeremail': 
		git for-each-ref --format='%(taggeremail)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 202 - basic atom: refs/tags/taggerless taggeremail

expecting success of 6300.203 'basic atom: refs/tags/taggerless taggeremail:trim': 
		git for-each-ref --format='%(taggeremail:trim)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 203 - basic atom: refs/tags/taggerless taggeremail:trim

expecting success of 6300.204 'basic atom: refs/tags/taggerless taggeremail:localpart': 
		git for-each-ref --format='%(taggeremail:localpart)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 204 - basic atom: refs/tags/taggerless taggeremail:localpart

expecting success of 6300.205 'basic atom: refs/tags/taggerless taggerdate': 
		git for-each-ref --format='%(taggerdate)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 205 - basic atom: refs/tags/taggerless taggerdate

expecting success of 6300.206 'basic atom: refs/tags/taggerless committer': 
		git for-each-ref --format='%(committer)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 206 - basic atom: refs/tags/taggerless committer

expecting success of 6300.207 'basic atom: refs/tags/taggerless committername': 
		git for-each-ref --format='%(committername)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 207 - basic atom: refs/tags/taggerless committername

expecting success of 6300.208 'basic atom: refs/tags/taggerless committeremail': 
		git for-each-ref --format='%(committeremail)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 208 - basic atom: refs/tags/taggerless committeremail

expecting success of 6300.209 'basic atom: refs/tags/taggerless committeremail:trim': 
		git for-each-ref --format='%(committeremail:trim)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 209 - basic atom: refs/tags/taggerless committeremail:trim

expecting success of 6300.210 'basic atom: refs/tags/taggerless committeremail:localpart': 
		git for-each-ref --format='%(committeremail:localpart)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 210 - basic atom: refs/tags/taggerless committeremail:localpart

expecting success of 6300.211 'basic atom: refs/tags/taggerless committerdate': 
		git for-each-ref --format='%(committerdate)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 211 - basic atom: refs/tags/taggerless committerdate

expecting success of 6300.212 'basic atom: refs/tags/taggerless subject': 
		git for-each-ref --format='%(subject)' refs/tags/taggerless >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 212 - basic atom: refs/tags/taggerless subject

expecting success of 6300.213 'an unusual tag with an incomplete line': 

	git tag -m "bogo" bogo &&
	bogo=$(git cat-file tag bogo) &&
	bogo=$(printf "%s" "$bogo" | git mktag) &&
	git tag -f bogo "$bogo" &&
	git for-each-ref --format "%(body)" refs/tags/bogo


Updated tag 'bogo' (was 89437ea)

ok 213 - an unusual tag with an incomplete line

expecting success of 6300.214 'create tag with subject and body content': 
	cat >>msg <<-\EOF &&
		the subject line

		first body line
		second body line
	EOF
	git tag -F msg subject-body

ok 214 - create tag with subject and body content

expecting success of 6300.215 'basic atom: refs/tags/subject-body subject': 
		git for-each-ref --format='%(subject)' refs/tags/subject-body >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 215 - basic atom: refs/tags/subject-body subject

expecting success of 6300.216 'basic atom: refs/tags/subject-body subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/subject-body >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 216 - basic atom: refs/tags/subject-body subject:sanitize

expecting success of 6300.217 'basic atom: refs/tags/subject-body body': 
		git for-each-ref --format='%(body)' refs/tags/subject-body >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 217 - basic atom: refs/tags/subject-body body

expecting success of 6300.218 'basic atom: refs/tags/subject-body contents': 
		git for-each-ref --format='%(contents)' refs/tags/subject-body >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 218 - basic atom: refs/tags/subject-body contents

expecting success of 6300.219 'basic atom: refs/tags/subject-body contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 219 - basic atom: refs/tags/subject-body contents:size

expecting success of 6300.220 'create tag with multiline subject': 
	cat >msg <<-\EOF &&
		first subject line
		second subject line

		first body line
		second body line
	EOF
	git tag -F msg multiline

ok 220 - create tag with multiline subject

expecting success of 6300.221 'basic atom: refs/tags/multiline subject': 
		git for-each-ref --format='%(subject)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 221 - basic atom: refs/tags/multiline subject

expecting success of 6300.222 'basic atom: refs/tags/multiline subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 222 - basic atom: refs/tags/multiline subject:sanitize

expecting success of 6300.223 'basic atom: refs/tags/multiline contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 223 - basic atom: refs/tags/multiline contents:subject

expecting success of 6300.224 'basic atom: refs/tags/multiline body': 
		git for-each-ref --format='%(body)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 224 - basic atom: refs/tags/multiline body

expecting success of 6300.225 'basic atom: refs/tags/multiline contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 225 - basic atom: refs/tags/multiline contents:body

expecting success of 6300.226 'basic atom: refs/tags/multiline contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 226 - basic atom: refs/tags/multiline contents:signature

expecting success of 6300.227 'basic atom: refs/tags/multiline contents': 
		git for-each-ref --format='%(contents)' refs/tags/multiline >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 227 - basic atom: refs/tags/multiline contents

expecting success of 6300.228 'basic atom: refs/tags/multiline contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 228 - basic atom: refs/tags/multiline contents:size

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t6300-for-each-ref/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t6300-for-each-ref/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 6300.229 'create signed tags': 
	git tag -s -m "" signed-empty &&
	git tag -s -m "subject line" signed-short &&
	cat >msg <<-\EOF &&
	subject line

	body contents
	EOF
	git tag -s -F msg signed-long

ok 229 - create signed tags

expecting success of 6300.230 'basic atom: refs/tags/signed-empty subject': 
		git for-each-ref --format='%(subject)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 230 - basic atom: refs/tags/signed-empty subject

expecting success of 6300.231 'basic atom: refs/tags/signed-empty subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 231 - basic atom: refs/tags/signed-empty subject:sanitize

expecting success of 6300.232 'basic atom: refs/tags/signed-empty contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 232 - basic atom: refs/tags/signed-empty contents:subject

expecting success of 6300.233 'basic atom: refs/tags/signed-empty body': 
		git for-each-ref --format='%(body)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 233 - basic atom: refs/tags/signed-empty body

expecting success of 6300.234 'basic atom: refs/tags/signed-empty contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 234 - basic atom: refs/tags/signed-empty contents:body

expecting success of 6300.235 'basic atom: refs/tags/signed-empty contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 235 - basic atom: refs/tags/signed-empty contents:signature

expecting success of 6300.236 'basic atom: refs/tags/signed-empty contents': 
		git for-each-ref --format='%(contents)' refs/tags/signed-empty >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 236 - basic atom: refs/tags/signed-empty contents

expecting success of 6300.237 'basic atom: refs/tags/signed-empty contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 237 - basic atom: refs/tags/signed-empty contents:size

expecting success of 6300.238 'basic atom: refs/tags/signed-empty raw': 
	git cat-file tag refs/tags/signed-empty >expected &&
	git for-each-ref --format="%(raw)" refs/tags/signed-empty >actual &&
	sanitize_pgp <expected >expected.clean &&
	echo >>expected.clean &&
	sanitize_pgp <actual >actual.clean &&
	test_cmp expected.clean actual.clean

ok 238 - basic atom: refs/tags/signed-empty raw

expecting success of 6300.239 'basic atom: refs/tags/signed-short subject': 
		git for-each-ref --format='%(subject)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 239 - basic atom: refs/tags/signed-short subject

expecting success of 6300.240 'basic atom: refs/tags/signed-short subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 240 - basic atom: refs/tags/signed-short subject:sanitize

expecting success of 6300.241 'basic atom: refs/tags/signed-short contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 241 - basic atom: refs/tags/signed-short contents:subject

expecting success of 6300.242 'basic atom: refs/tags/signed-short body': 
		git for-each-ref --format='%(body)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 242 - basic atom: refs/tags/signed-short body

expecting success of 6300.243 'basic atom: refs/tags/signed-short contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 243 - basic atom: refs/tags/signed-short contents:body

expecting success of 6300.244 'basic atom: refs/tags/signed-short contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 244 - basic atom: refs/tags/signed-short contents:signature

expecting success of 6300.245 'basic atom: refs/tags/signed-short contents': 
		git for-each-ref --format='%(contents)' refs/tags/signed-short >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 245 - basic atom: refs/tags/signed-short contents

expecting success of 6300.246 'basic atom: refs/tags/signed-short contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 246 - basic atom: refs/tags/signed-short contents:size

expecting success of 6300.247 'basic atom: refs/tags/signed-short raw': 
	git cat-file tag refs/tags/signed-short >expected &&
	git for-each-ref --format="%(raw)" refs/tags/signed-short >actual &&
	sanitize_pgp <expected >expected.clean &&
	echo >>expected.clean &&
	sanitize_pgp <actual >actual.clean &&
	test_cmp expected.clean actual.clean

ok 247 - basic atom: refs/tags/signed-short raw

expecting success of 6300.248 'basic atom: refs/tags/signed-long subject': 
		git for-each-ref --format='%(subject)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 248 - basic atom: refs/tags/signed-long subject

expecting success of 6300.249 'basic atom: refs/tags/signed-long subject:sanitize': 
		git for-each-ref --format='%(subject:sanitize)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 249 - basic atom: refs/tags/signed-long subject:sanitize

expecting success of 6300.250 'basic atom: refs/tags/signed-long contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 250 - basic atom: refs/tags/signed-long contents:subject

expecting success of 6300.251 'basic atom: refs/tags/signed-long body': 
		git for-each-ref --format='%(body)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 251 - basic atom: refs/tags/signed-long body

expecting success of 6300.252 'basic atom: refs/tags/signed-long contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 252 - basic atom: refs/tags/signed-long contents:body

expecting success of 6300.253 'basic atom: refs/tags/signed-long contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 253 - basic atom: refs/tags/signed-long contents:signature

expecting success of 6300.254 'basic atom: refs/tags/signed-long contents': 
		git for-each-ref --format='%(contents)' refs/tags/signed-long >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 254 - basic atom: refs/tags/signed-long contents

expecting success of 6300.255 'basic atom: refs/tags/signed-long contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 255 - basic atom: refs/tags/signed-long contents:size

expecting success of 6300.256 'basic atom: refs/tags/signed-long raw': 
	git cat-file tag refs/tags/signed-long >expected &&
	git for-each-ref --format="%(raw)" refs/tags/signed-long >actual &&
	sanitize_pgp <expected >expected.clean &&
	echo >>expected.clean &&
	sanitize_pgp <actual >actual.clean &&
	test_cmp expected.clean actual.clean

ok 256 - basic atom: refs/tags/signed-long raw

expecting success of 6300.257 'set up refs pointing to tree and blob': 
	git update-ref refs/mytrees/first refs/heads/main^{tree} &&
	git update-ref refs/myblobs/first refs/heads/main:one

ok 257 - set up refs pointing to tree and blob

expecting success of 6300.258 'basic atom: refs/mytrees/first subject': 
		git for-each-ref --format='%(subject)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 258 - basic atom: refs/mytrees/first subject

expecting success of 6300.259 'basic atom: refs/mytrees/first contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 259 - basic atom: refs/mytrees/first contents:subject

expecting success of 6300.260 'basic atom: refs/mytrees/first body': 
		git for-each-ref --format='%(body)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 260 - basic atom: refs/mytrees/first body

expecting success of 6300.261 'basic atom: refs/mytrees/first contents:body': 
		git for-each-ref --format='%(contents:body)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 261 - basic atom: refs/mytrees/first contents:body

expecting success of 6300.262 'basic atom: refs/mytrees/first contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 262 - basic atom: refs/mytrees/first contents:signature

expecting success of 6300.263 'basic atom: refs/mytrees/first contents': 
		git for-each-ref --format='%(contents)' refs/mytrees/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 263 - basic atom: refs/mytrees/first contents

expecting success of 6300.264 'basic atom: refs/mytrees/first contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 264 - basic atom: refs/mytrees/first contents:size

expecting success of 6300.265 'basic atom: refs/mytrees/first raw': 
	git cat-file tree refs/mytrees/first >expected &&
	echo >>expected &&
	git for-each-ref --format="%(raw)" refs/mytrees/first >actual &&
	test_cmp expected actual &&
	git cat-file -s refs/mytrees/first >expected &&
	git for-each-ref --format="%(raw:size)" refs/mytrees/first >actual &&
	test_cmp expected actual

ok 265 - basic atom: refs/mytrees/first raw

expecting success of 6300.266 'basic atom: refs/myblobs/first subject': 
		git for-each-ref --format='%(subject)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 266 - basic atom: refs/myblobs/first subject

expecting success of 6300.267 'basic atom: refs/myblobs/first contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 267 - basic atom: refs/myblobs/first contents:subject

expecting success of 6300.268 'basic atom: refs/myblobs/first body': 
		git for-each-ref --format='%(body)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 268 - basic atom: refs/myblobs/first body

expecting success of 6300.269 'basic atom: refs/myblobs/first contents:body': 
		git for-each-ref --format='%(contents:body)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 269 - basic atom: refs/myblobs/first contents:body

expecting success of 6300.270 'basic atom: refs/myblobs/first contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 270 - basic atom: refs/myblobs/first contents:signature

expecting success of 6300.271 'basic atom: refs/myblobs/first contents': 
		git for-each-ref --format='%(contents)' refs/myblobs/first >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 271 - basic atom: refs/myblobs/first contents

expecting success of 6300.272 'basic atom: refs/myblobs/first contents:size': 
			type=$(git cat-file -t "$ref") &&
			case $type in
			tag)
				# We cannot use $3 as it expects sanitize_pgp to run
				git cat-file tag $ref >out &&
				expect=$(tail -n +6 out | wc -c) &&
				rm -f out ;;
			tree | blob)
				expect="" ;;
			commit)
				: "use the calculated expect" ;;
			*)
				BUG "unknown object type" ;;
			esac &&
			# Leave $expect unquoted to lose possible leading whitespaces
			echo $expect >expected &&
			git for-each-ref --format="%(contents:size)" "$ref" >actual &&
			test_cmp expected actual
		
ok 272 - basic atom: refs/myblobs/first contents:size

expecting success of 6300.273 'basic atom: refs/myblobs/first raw': 
	git cat-file blob refs/myblobs/first >expected &&
	echo >>expected &&
	git for-each-ref --format="%(raw)" refs/myblobs/first >actual &&
	test_cmp expected actual &&
	git cat-file -s refs/myblobs/first >expected &&
	git for-each-ref --format="%(raw:size)" refs/myblobs/first >actual &&
	test_cmp expected actual

ok 273 - basic atom: refs/myblobs/first raw

expecting success of 6300.274 'set up refs pointing to binary blob': 
	printf "a\0b\0c" >blob1 &&
	printf "a\0c\0b" >blob2 &&
	printf "\0a\0b\0c" >blob3 &&
	printf "abc" >blob4 &&
	printf "\0 \0 \0 " >blob5 &&
	printf "\0 \0a\0 " >blob6 &&
	printf "  " >blob7 &&
	>blob8 &&
	obj=$(git hash-object -w blob1) &&
	git update-ref refs/myblobs/blob1 "$obj" &&
	obj=$(git hash-object -w blob2) &&
	git update-ref refs/myblobs/blob2 "$obj" &&
	obj=$(git hash-object -w blob3) &&
	git update-ref refs/myblobs/blob3 "$obj" &&
	obj=$(git hash-object -w blob4) &&
	git update-ref refs/myblobs/blob4 "$obj" &&
	obj=$(git hash-object -w blob5) &&
	git update-ref refs/myblobs/blob5 "$obj" &&
	obj=$(git hash-object -w blob6) &&
	git update-ref refs/myblobs/blob6 "$obj" &&
	obj=$(git hash-object -w blob7) &&
	git update-ref refs/myblobs/blob7 "$obj" &&
	obj=$(git hash-object -w blob8) &&
	git update-ref refs/myblobs/blob8 "$obj"

ok 274 - set up refs pointing to binary blob

expecting success of 6300.275 'Verify sorts with raw': 
	cat >expected <<-EOF &&
	refs/myblobs/blob8
	refs/myblobs/blob5
	refs/myblobs/blob6
	refs/myblobs/blob3
	refs/myblobs/blob7
	refs/mytrees/first
	refs/myblobs/first
	refs/myblobs/blob1
	refs/myblobs/blob2
	refs/myblobs/blob4
	refs/heads/main
	EOF
	git for-each-ref --format="%(refname)" --sort=raw \
		refs/heads/main refs/myblobs/ refs/mytrees/first >actual &&
	test_cmp expected actual

ok 275 - Verify sorts with raw

expecting success of 6300.276 'Verify sorts with raw:size': 
	cat >expected <<-EOF &&
	refs/myblobs/blob8
	refs/myblobs/first
	refs/myblobs/blob7
	refs/heads/main
	refs/myblobs/blob4
	refs/myblobs/blob1
	refs/myblobs/blob2
	refs/myblobs/blob3
	refs/myblobs/blob5
	refs/myblobs/blob6
	refs/mytrees/first
	EOF
	git for-each-ref --format="%(refname)" --sort=raw:size \
		refs/heads/main refs/myblobs/ refs/mytrees/first >actual &&
	test_cmp expected actual

ok 276 - Verify sorts with raw:size

expecting success of 6300.277 'validate raw atom with %(if:equals)': 
	cat >expected <<-EOF &&
	not equals
	not equals
	not equals
	not equals
	not equals
	not equals
	refs/myblobs/blob4
	not equals
	not equals
	not equals
	not equals
	not equals
	EOF
	git for-each-ref --format="%(if:equals=abc)%(raw)%(then)%(refname)%(else)not equals%(end)" \
		refs/myblobs/ refs/heads/ >actual &&
	test_cmp expected actual

ok 277 - validate raw atom with %(if:equals)

expecting success of 6300.278 'validate raw atom with %(if:notequals)': 
	cat >expected <<-EOF &&
	refs/heads/ambiguous
	refs/heads/main
	refs/heads/newtag
	refs/myblobs/blob1
	refs/myblobs/blob2
	refs/myblobs/blob3
	equals
	refs/myblobs/blob5
	refs/myblobs/blob6
	refs/myblobs/blob7
	refs/myblobs/blob8
	refs/myblobs/first
	EOF
	git for-each-ref --format="%(if:notequals=abc)%(raw)%(then)%(refname)%(else)equals%(end)" \
		refs/myblobs/ refs/heads/ >actual &&
	test_cmp expected actual

ok 278 - validate raw atom with %(if:notequals)

expecting success of 6300.279 'empty raw refs with %(if)': 
	cat >expected <<-EOF &&
	refs/myblobs/blob1 not empty
	refs/myblobs/blob2 not empty
	refs/myblobs/blob3 not empty
	refs/myblobs/blob4 not empty
	refs/myblobs/blob5 not empty
	refs/myblobs/blob6 not empty
	refs/myblobs/blob7 empty
	refs/myblobs/blob8 empty
	refs/myblobs/first not empty
	EOF
	git for-each-ref --format="%(refname) %(if)%(raw)%(then)not empty%(else)empty%(end)" \
		refs/myblobs/ >actual &&
	test_cmp expected actual

ok 279 - empty raw refs with %(if)

expecting success of 6300.280 '%(raw) with --python must fail': 
	test_must_fail git for-each-ref --format="%(raw)" --python

fatal: --format=raw cannot be used with --python, --shell, --tcl
ok 280 - %(raw) with --python must fail

expecting success of 6300.281 '%(raw) with --tcl must fail': 
	test_must_fail git for-each-ref --format="%(raw)" --tcl

fatal: --format=raw cannot be used with --python, --shell, --tcl
ok 281 - %(raw) with --tcl must fail

expecting success of 6300.282 '%(raw) with --perl': 
	git for-each-ref --format="\$name= %(raw);
print \"\$name\"" refs/myblobs/blob1 --perl | perl >actual &&
	cmp blob1 actual &&
	git for-each-ref --format="\$name= %(raw);
print \"\$name\"" refs/myblobs/blob3 --perl | perl >actual &&
	cmp blob3 actual &&
	git for-each-ref --format="\$name= %(raw);
print \"\$name\"" refs/myblobs/blob8 --perl | perl >actual &&
	cmp blob8 actual &&
	git for-each-ref --format="\$name= %(raw);
print \"\$name\"" refs/myblobs/first --perl | perl >actual &&
	cmp one actual &&
	git cat-file tree refs/mytrees/first > expected &&
	git for-each-ref --format="\$name= %(raw);
print \"\$name\"" refs/mytrees/first --perl | perl >actual &&
	cmp expected actual

ok 282 - %(raw) with --perl

expecting success of 6300.283 '%(raw) with --shell must fail': 
	test_must_fail git for-each-ref --format="%(raw)" --shell

fatal: --format=raw cannot be used with --python, --shell, --tcl
ok 283 - %(raw) with --shell must fail

expecting success of 6300.284 '%(raw) with --shell and --sort=raw must fail': 
	test_must_fail git for-each-ref --format="%(raw)" --sort=raw --shell

fatal: --format=raw cannot be used with --python, --shell, --tcl
ok 284 - %(raw) with --shell and --sort=raw must fail

expecting success of 6300.285 '%(raw:size) with --shell': 
	git for-each-ref --format="%(raw:size)" | sed "s/^/$SQ/;s/$/$SQ/" >expect &&
	git for-each-ref --format="%(raw:size)" --shell >actual &&
	test_cmp expect actual

ok 285 - %(raw:size) with --shell

expecting success of 6300.286 'for-each-ref --format compare with cat-file --batch': 
	git rev-parse refs/mytrees/first | git cat-file --batch >expected &&
	git for-each-ref --format="%(objectname) %(objecttype) %(objectsize)
%(raw)" refs/mytrees/first >actual &&
	test_cmp expected actual

ok 286 - for-each-ref --format compare with cat-file --batch

expecting success of 6300.287 'set up multiple-sort tags': 
	for when in 100000 200000
	do
		for email in user1 user2
		do
			for ref in ref1 ref2
			do
				GIT_COMMITTER_DATE="@$when +0000" \
				GIT_COMMITTER_EMAIL="$email@example.com" \
				git tag -m "tag $ref-$when-$email" \
				multi-$ref-$when-$email || return 1
			done
		done
	done

ok 287 - set up multiple-sort tags

expecting success of 6300.288 'Verify sort with multiple keys': 
	cat >expected <<-\EOF &&
	100000 <user1@example.com> refs/tags/multi-ref2-100000-user1
	100000 <user1@example.com> refs/tags/multi-ref1-100000-user1
	100000 <user2@example.com> refs/tags/multi-ref2-100000-user2
	100000 <user2@example.com> refs/tags/multi-ref1-100000-user2
	200000 <user1@example.com> refs/tags/multi-ref2-200000-user1
	200000 <user1@example.com> refs/tags/multi-ref1-200000-user1
	200000 <user2@example.com> refs/tags/multi-ref2-200000-user2
	200000 <user2@example.com> refs/tags/multi-ref1-200000-user2
	EOF
	git for-each-ref \
		--format="%(taggerdate:unix) %(taggeremail) %(refname)" \
		--sort=-refname \
		--sort=taggeremail \
		--sort=taggerdate \
		"refs/tags/multi-*" >actual &&
	test_cmp expected actual

ok 288 - Verify sort with multiple keys

expecting success of 6300.289 'equivalent sorts fall back on refname': 
	cat >expected <<-\EOF &&
	100000 <user1@example.com> refs/tags/multi-ref1-100000-user1
	100000 <user2@example.com> refs/tags/multi-ref1-100000-user2
	100000 <user1@example.com> refs/tags/multi-ref2-100000-user1
	100000 <user2@example.com> refs/tags/multi-ref2-100000-user2
	200000 <user1@example.com> refs/tags/multi-ref1-200000-user1
	200000 <user2@example.com> refs/tags/multi-ref1-200000-user2
	200000 <user1@example.com> refs/tags/multi-ref2-200000-user1
	200000 <user2@example.com> refs/tags/multi-ref2-200000-user2
	EOF
	git for-each-ref \
		--format="%(taggerdate:unix) %(taggeremail) %(refname)" \
		--sort=taggerdate \
		"refs/tags/multi-*" >actual &&
	test_cmp expected actual

ok 289 - equivalent sorts fall back on refname

expecting success of 6300.290 '--no-sort cancels the previous sort keys': 
	cat >expected <<-\EOF &&
	100000 <user1@example.com> refs/tags/multi-ref1-100000-user1
	100000 <user2@example.com> refs/tags/multi-ref1-100000-user2
	100000 <user1@example.com> refs/tags/multi-ref2-100000-user1
	100000 <user2@example.com> refs/tags/multi-ref2-100000-user2
	200000 <user1@example.com> refs/tags/multi-ref1-200000-user1
	200000 <user2@example.com> refs/tags/multi-ref1-200000-user2
	200000 <user1@example.com> refs/tags/multi-ref2-200000-user1
	200000 <user2@example.com> refs/tags/multi-ref2-200000-user2
	EOF
	git for-each-ref \
		--format="%(taggerdate:unix) %(taggeremail) %(refname)" \
		--sort=-refname \
		--sort=taggeremail \
		--no-sort \
		--sort=taggerdate \
		"refs/tags/multi-*" >actual &&
	test_cmp expected actual

ok 290 - --no-sort cancels the previous sort keys

expecting success of 6300.291 'do not dereference NULL upon %(HEAD) on unborn branch': 
	test_when_finished "git checkout main" &&
	git for-each-ref --format="%(HEAD) %(refname:short)" refs/heads/ >actual &&
	sed -e "s/^\* /  /" actual >expect &&
	git checkout --orphan orphaned-branch &&
	git for-each-ref --format="%(HEAD) %(refname:short)" refs/heads/ >actual &&
	test_cmp expect actual

Switched to a new branch 'orphaned-branch'
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)
ok 291 - do not dereference NULL upon %(HEAD) on unborn branch

expecting success of 6300.292 'set up trailers for next test': 
	echo "Some contents" > two &&
	git add two &&
	git commit -F - <<-EOF
	trailers: this commit message has trailers

	Some message contents

	$(cat trailers)
	EOF

[main 36c72cc] trailers: this commit message has trailers
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two
ok 292 - set up trailers for next test

expecting success of 6300.293 '%(trailers:unfold) unfolds trailers': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 293 - %(trailers:unfold) unfolds trailers

expecting success of 6300.294 '%(trailers:only) shows only "key: value" trailers': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 294 - %(trailers:only) shows only "key: value" trailers

expecting success of 6300.295 '%(trailers:only=no,only=true) shows only "key: value" trailers': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 295 - %(trailers:only=no,only=true) shows only "key: value" trailers

expecting success of 6300.296 '%(trailers:only=yes) shows only "key: value" trailers': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 296 - %(trailers:only=yes) shows only "key: value" trailers

expecting success of 6300.297 '%(trailers:only=no) shows all trailers': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 297 - %(trailers:only=no) shows all trailers

expecting success of 6300.298 '%(trailers:only) and %(trailers:unfold) work together': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 298 - %(trailers:only) and %(trailers:unfold) work together

expecting success of 6300.299 '%(trailers:unfold) and %(trailers:only) work together': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 299 - %(trailers:unfold) and %(trailers:only) work together

expecting success of 6300.300 '%(trailers:key=foo) shows that trailer': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 300 - %(trailers:key=foo) shows that trailer

expecting success of 6300.301 '%(trailers:key=foo) is case insensitive': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 301 - %(trailers:key=foo) is case insensitive

expecting success of 6300.302 '%(trailers:key=foo:) trailing colon also works': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 302 - %(trailers:key=foo:) trailing colon also works

expecting success of 6300.303 '%(trailers:key=foo) multiple keys': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 303 - %(trailers:key=foo) multiple keys

expecting success of 6300.304 '%(trailers:key=nonexistent) becomes empty': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 304 - %(trailers:key=nonexistent) becomes empty

expecting success of 6300.305 '%(trailers:key=foo) handles multiple lines even if folded': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 305 - %(trailers:key=foo) handles multiple lines even if folded

expecting success of 6300.306 '%(trailers:key=foo,unfold) properly unfolds': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 306 - %(trailers:key=foo,unfold) properly unfolds

expecting success of 6300.307 '%(trailers:key=foo,only=no) also includes nontrailer lines': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 307 - %(trailers:key=foo,only=no) also includes nontrailer lines

expecting success of 6300.308 '%(trailers:key=foo,valueonly) shows only value': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 308 - %(trailers:key=foo,valueonly) shows only value

expecting success of 6300.309 '%(trailers:separator) changes separator': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 309 - %(trailers:separator) changes separator

expecting success of 6300.310 '%(trailers:key_value_separator) changes key-value separator': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 310 - %(trailers:key_value_separator) changes key-value separator

expecting success of 6300.311 '%(trailers:separator,key_value_separator) changes both separators': 
		git for-each-ref --format="%($option)" refs/heads/main >actual &&
		test_cmp expect actual &&
		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
		test_cmp expect actual
	
ok 311 - %(trailers:separator,key_value_separator) changes both separators

expecting success of 6300.312 '%(trailers) rejects unknown trailers arguments': 
		# error message cannot be checked under i18n
		test_must_fail git for-each-ref --format="%($option)" refs/heads/main 2>actual &&
		test_cmp expect actual &&
		test_must_fail git for-each-ref --format="%(contents:$option)" refs/heads/main 2>actual &&
		test_cmp expect actual
	
ok 312 - %(trailers) rejects unknown trailers arguments

expecting success of 6300.313 '%(trailers:key) without value is error': 
		# error message cannot be checked under i18n
		test_must_fail git for-each-ref --format="%($option)" refs/heads/main 2>actual &&
		test_cmp expect actual &&
		test_must_fail git for-each-ref --format="%(contents:$option)" refs/heads/main 2>actual &&
		test_cmp expect actual
	
ok 313 - %(trailers:key) without value is error

expecting success of 6300.314 'if arguments, %(contents:trailers) shows error if colon is missing': 
	cat >expect <<-EOF &&
	fatal: unrecognized %(contents) argument: trailersonly
	EOF
	test_must_fail git for-each-ref --format="%(contents:trailersonly)" 2>actual &&
	test_cmp expect actual

ok 314 - if arguments, %(contents:trailers) shows error if colon is missing

expecting success of 6300.315 'basic atom: head contents:trailers': 
	git for-each-ref --format="%(contents:trailers)" refs/heads/main >actual &&
	sanitize_pgp <actual >actual.clean &&
	# git for-each-ref ends with a blank line
	cat >expect <<-EOF &&
	$(cat trailers)

	EOF
	test_cmp expect actual.clean

ok 315 - basic atom: head contents:trailers

expecting success of 6300.316 'basic atom: rest must fail': 
	test_must_fail git for-each-ref --format="%(rest)" refs/heads/main

fatal: this command reject atom %(rest)
ok 316 - basic atom: rest must fail

expecting success of 6300.317 'trailer parsing not fooled by --- line': 
	git commit --allow-empty -F - <<-\EOF &&
	this is the subject

	This is the body. The message has a "---" line which would confuse a
	message+patch parser. But here we know we have only a commit message,
	so we get it right.

	trailer: wrong
	---
	This is more body.

	trailer: right
	EOF

	{
		echo "trailer: right" &&
		echo
	} >expect &&
	git for-each-ref --format="%(trailers)" refs/heads/main >actual &&
	test_cmp expect actual

[main 162c31a] this is the subject
 Author: A U Thor <author@example.com>
ok 317 - trailer parsing not fooled by --- line

expecting success of 6300.318 'Add symbolic ref for the following tests': 
	git symbolic-ref refs/heads/sym refs/heads/main

ok 318 - Add symbolic ref for the following tests

expecting success of 6300.319 'Verify usage of %(symref) atom': 
	git for-each-ref --format="%(symref)" refs/heads/sym >actual &&
	test_cmp expected actual

ok 319 - Verify usage of %(symref) atom

expecting success of 6300.320 'Verify usage of %(symref:short) atom': 
	git for-each-ref --format="%(symref:short)" refs/heads/sym >actual &&
	test_cmp expected actual

ok 320 - Verify usage of %(symref:short) atom

expecting success of 6300.321 'Verify usage of %(symref:lstrip) atom': 
	git for-each-ref --format="%(symref:lstrip=2)" refs/heads/sym > actual &&
	git for-each-ref --format="%(symref:lstrip=-2)" refs/heads/sym >> actual &&
	test_cmp expected actual &&

	git for-each-ref --format="%(symref:strip=2)" refs/heads/sym > actual &&
	git for-each-ref --format="%(symref:strip=-2)" refs/heads/sym >> actual &&
	test_cmp expected actual

ok 321 - Verify usage of %(symref:lstrip) atom

expecting success of 6300.322 'Verify usage of %(symref:rstrip) atom': 
	git for-each-ref --format="%(symref:rstrip=2)" refs/heads/sym > actual &&
	git for-each-ref --format="%(symref:rstrip=-2)" refs/heads/sym >> actual &&
	test_cmp expected actual

ok 322 - Verify usage of %(symref:rstrip) atom

expecting success of 6300.323 ':remotename and :remoteref': 
	git init remote-tests &&
	(
		cd remote-tests &&
		test_commit initial &&
		git branch -M main &&
		git remote add from fifth.coffee:blub &&
		git config branch.main.remote from &&
		git config branch.main.merge refs/heads/stable &&
		git remote add to southridge.audio:repo &&
		git config remote.to.push "refs/heads/*:refs/heads/pushed/*" &&
		git config branch.main.pushRemote to &&
		for pair in "%(upstream)=refs/remotes/from/stable" \
			"%(upstream:remotename)=from" \
			"%(upstream:remoteref)=refs/heads/stable" \
			"%(push)=refs/remotes/to/pushed/main" \
			"%(push:remotename)=to" \
			"%(push:remoteref)=refs/heads/pushed/main"
		do
			echo "${pair#*=}" >expect &&
			git for-each-ref --format="${pair%=*}" \
				refs/heads/main >actual &&
			test_cmp expect actual || exit 1
		done &&
		git branch push-simple &&
		git config branch.push-simple.pushRemote from &&
		actual="$(git for-each-ref \
			--format="%(push:remotename),%(push:remoteref)" \
			refs/heads/push-simple)" &&
		test from, = "$actual"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6300-for-each-ref/remote-tests/.git/
[master (root-commit) d39e3de] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 323 - :remotename and :remoteref

expecting success of 6300.324 'for-each-ref --ignore-case ignores case': 
	git for-each-ref --format="%(refname)" refs/heads/MAIN >actual &&
	test_must_be_empty actual &&

	echo refs/heads/main >expect &&
	git for-each-ref --format="%(refname)" --ignore-case \
		refs/heads/MAIN >actual &&
	test_cmp expect actual

ok 324 - for-each-ref --ignore-case ignores case

expecting success of 6300.325 'for-each-ref --ignore-case works on multiple sort keys': 
	# name refs numerically to avoid case-insensitive filesystem conflicts
	nr=0 &&
	for email in a A b B
	do
		for subject in a A b B
		do
			GIT_COMMITTER_EMAIL="$email@example.com" \
			git tag -m "tag $subject" icase-$(printf %02d $nr) &&
			nr=$((nr+1))||
			return 1
		done
	done &&
	git for-each-ref --ignore-case \
		--format="%(taggeremail) %(subject) %(refname)" \
		--sort=refname \
		--sort=subject \
		--sort=taggeremail \
		refs/tags/icase-* >actual &&
	cat >expect <<-\EOF &&
	<a@example.com> tag a refs/tags/icase-00
	<a@example.com> tag A refs/tags/icase-01
	<A@example.com> tag a refs/tags/icase-04
	<A@example.com> tag A refs/tags/icase-05
	<a@example.com> tag b refs/tags/icase-02
	<a@example.com> tag B refs/tags/icase-03
	<A@example.com> tag b refs/tags/icase-06
	<A@example.com> tag B refs/tags/icase-07
	<b@example.com> tag a refs/tags/icase-08
	<b@example.com> tag A refs/tags/icase-09
	<B@example.com> tag a refs/tags/icase-12
	<B@example.com> tag A refs/tags/icase-13
	<b@example.com> tag b refs/tags/icase-10
	<b@example.com> tag B refs/tags/icase-11
	<B@example.com> tag b refs/tags/icase-14
	<B@example.com> tag B refs/tags/icase-15
	EOF
	test_cmp expect actual

ok 325 - for-each-ref --ignore-case works on multiple sort keys

expecting success of 6300.326 'for-each-ref reports broken tags': 
	git tag -m "good tag" broken-tag-good HEAD &&
	git cat-file tag broken-tag-good >good &&
	sed s/commit/blob/ <good >bad &&
	bad=$(git hash-object -w -t tag bad) &&
	git update-ref refs/tags/broken-tag-bad $bad &&
	test_must_fail git for-each-ref --format="%(*objectname)" \
		refs/tags/broken-tag-*

error: object 162c31a2a5b32b318cc50810cb2d7e9167ed5df4 is a blob, not a commit
error: bad tag pointer to 162c31a2a5b32b318cc50810cb2d7e9167ed5df4 in e255b902e9d4c778ee8afe8f03860bf47e156c33
fatal: parse_object_buffer failed on e255b902e9d4c778ee8afe8f03860bf47e156c33 for refs/tags/broken-tag-good
ok 326 - for-each-ref reports broken tags

expecting success of 6300.327 'set up tag with signature and no blank lines': 
	git tag -F - fake-sig-no-blanks <<-\EOF
	this is the subject
	-----BEGIN PGP SIGNATURE-----
	not a real signature, but we just care about the
	subject/body parsing. It is important here that
	there are no blank lines in the signature.
	-----END PGP SIGNATURE-----
	EOF

ok 327 - set up tag with signature and no blank lines

expecting success of 6300.328 'basic atom: refs/tags/fake-sig-no-blanks contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/fake-sig-no-blanks >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 328 - basic atom: refs/tags/fake-sig-no-blanks contents:subject

expecting success of 6300.329 'basic atom: refs/tags/fake-sig-no-blanks contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/fake-sig-no-blanks >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 329 - basic atom: refs/tags/fake-sig-no-blanks contents:body

expecting success of 6300.330 'basic atom: refs/tags/fake-sig-no-blanks contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/fake-sig-no-blanks >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 330 - basic atom: refs/tags/fake-sig-no-blanks contents:signature

expecting success of 6300.331 'set up tag with CRLF signature': 
	append_cr <<-\EOF |
	this is the subject
	-----BEGIN PGP SIGNATURE-----

	not a real signature, but we just care about
	the subject/body parsing. It is important here
	that there is a blank line separating this
	from the signature header.
	-----END PGP SIGNATURE-----
	EOF
	git tag -F - --cleanup=verbatim fake-sig-crlf

ok 331 - set up tag with CRLF signature

expecting success of 6300.332 'basic atom: refs/tags/fake-sig-crlf contents:subject': 
		git for-each-ref --format='%(contents:subject)' refs/tags/fake-sig-crlf >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 332 - basic atom: refs/tags/fake-sig-crlf contents:subject

expecting success of 6300.333 'basic atom: refs/tags/fake-sig-crlf contents:body': 
		git for-each-ref --format='%(contents:body)' refs/tags/fake-sig-crlf >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 333 - basic atom: refs/tags/fake-sig-crlf contents:body

expecting success of 6300.334 'basic atom: refs/tags/fake-sig-crlf contents:signature': 
		git for-each-ref --format='%(contents:signature)' refs/tags/fake-sig-crlf >actual &&
		sanitize_pgp <actual >actual.clean &&
		test_cmp expected actual.clean
	
ok 334 - basic atom: refs/tags/fake-sig-crlf contents:signature

# passed all 334 test(s)
1..334
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6407-merge-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6407-merge-binary/.git/
expecting success of 6407.1 'setup': 

	cat "$TEST_DIRECTORY"/test-binary-1.png >m &&
	git add m &&
	git ls-files -s | sed -e "s/ 0	/ 1	/" >E1 &&
	test_tick &&
	git commit -m "initial" &&

	git branch side &&
	echo frotz >a &&
	git add a &&
	echo nitfol >>m &&
	git add a m &&
	git ls-files -s a >E0 &&
	git ls-files -s m | sed -e "s/ 0	/ 3	/" >E3 &&
	test_tick &&
	git commit -m "main adds some" &&

	git checkout side &&
	echo rezrov >>m &&
	git add m &&
	git ls-files -s m | sed -e "s/ 0	/ 2	/" >E2 &&
	test_tick &&
	git commit -m "side modifies" &&

	git tag anchor &&

	cat E0 E1 E2 E3 >expect

[main (root-commit) f315366] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 m
[main f94be88] main adds some
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 a
Switched to branch 'side'
[side 020cbcd] side modifies
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
ok 1 - setup

expecting success of 6407.2 'resolve': 

	rm -f a* m* &&
	git reset --hard anchor &&

	test_must_fail git merge -s resolve main &&
	git ls-files -s >current &&
	test_cmp expect current

HEAD is now at 020cbcd side modifies
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging m
error: Cannot merge binary files: .merge_file_3oYoR9
ERROR: content conflict in m
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - resolve

expecting success of 6407.3 'recursive': 

	rm -f a* m* &&
	git reset --hard anchor &&

	test_must_fail git merge -s recursive main &&
	git ls-files -s >current &&
	test_cmp expect current

HEAD is now at 020cbcd side modifies
warning: Cannot merge binary files: m (HEAD vs. main)
Auto-merging m
CONFLICT (content): Merge conflict in m
Automatic merge failed; fix conflicts and then commit the result.
ok 3 - recursive

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6408-merge-up-to-date.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6408-merge-up-to-date/.git/
expecting success of 6408.1 'setup': 
	>file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git tag c0 &&

	echo second >file &&
	git add file &&
	test_tick &&
	git commit -m second &&
	git tag c1 &&
	git branch test &&
	echo third >file &&
	git add file &&
	test_tick &&
	git commit -m third &&
	git tag c2

[master (root-commit) 1bd44cb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
[master e042178] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 52cad15] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 6408.2 'merge -s recursive up-to-date': 

	git reset --hard c1 &&
	test_tick &&
	git merge -s recursive c0 &&
	expect=$(git rev-parse c1) &&
	current=$(git rev-parse HEAD) &&
	test "$expect" = "$current"


HEAD is now at e042178 second
Already up to date.
ok 2 - merge -s recursive up-to-date

expecting success of 6408.3 'merge -s recursive fast-forward': 

	git reset --hard c0 &&
	test_tick &&
	git merge -s recursive c1 &&
	expect=$(git rev-parse c1) &&
	current=$(git rev-parse HEAD) &&
	test "$expect" = "$current"


HEAD is now at 1bd44cb initial
Updating 1bd44cb..e042178
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
ok 3 - merge -s recursive fast-forward

expecting success of 6408.4 'merge -s ours up-to-date': 

	git reset --hard c1 &&
	test_tick &&
	git merge -s ours c0 &&
	expect=$(git rev-parse c1) &&
	current=$(git rev-parse HEAD) &&
	test "$expect" = "$current"


HEAD is now at e042178 second
Already up to date.
ok 4 - merge -s ours up-to-date

expecting success of 6408.5 'merge -s ours fast-forward': 

	git reset --hard c0 &&
	test_tick &&
	git merge -s ours c1 &&
	expect=$(git rev-parse c0^{tree}) &&
	current=$(git rev-parse HEAD^{tree}) &&
	test "$expect" = "$current"


HEAD is now at 1bd44cb initial
Merge made by the 'ours' strategy.
ok 5 - merge -s ours fast-forward

expecting success of 6408.6 'merge -s subtree up-to-date': 

	git reset --hard c1 &&
	test_tick &&
	git merge -s subtree c0 &&
	expect=$(git rev-parse c1) &&
	current=$(git rev-parse HEAD) &&
	test "$expect" = "$current"


HEAD is now at e042178 second
Already up to date.
ok 6 - merge -s subtree up-to-date

expecting success of 6408.7 'merge fast-forward octopus': 

	git reset --hard c0 &&
	test_tick &&
	git merge c1 c2 &&
	expect=$(git rev-parse c2) &&
	current=$(git rev-parse HEAD) &&
	test "$expect" = "$current"

HEAD is now at 1bd44cb initial
Updating 1bd44cb..52cad15
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
ok 7 - merge fast-forward octopus

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6406-merge-attr.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6406-merge-attr/.git/
expecting success of 6406.1 'setup': 

	for f in text binary union
	do
		echo Initial >$f && git add $f || return 1
	done &&
	test_tick &&
	git commit -m Initial &&

	git branch side &&
	for f in text binary union
	do
		echo Main >>$f && git add $f || return 1
	done &&
	test_tick &&
	git commit -m Main &&

	git checkout side &&
	for f in text binary union
	do
		echo Side >>$f && git add $f || return 1
	done &&
	test_tick &&
	git commit -m Side &&

	git tag anchor &&

	cat >./custom-merge <<-\EOF &&
	#!/bin/sh

	orig="$1" ours="$2" theirs="$3" exit="$4" path=$5
	(
		echo "orig is $orig"
		echo "ours is $ours"
		echo "theirs is $theirs"
		echo "path is $path"
		echo "=== orig ==="
		cat "$orig"
		echo "=== ours ==="
		cat "$ours"
		echo "=== theirs ==="
		cat "$theirs"
	) >"$ours+"
	cat "$ours+" >"$ours"
	rm -f "$ours+"
	exit "$exit"
	EOF
	chmod +x ./custom-merge

[main (root-commit) 5f96ff8] Initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 binary
 create mode 100644 text
 create mode 100644 union
[main 7897ef4] Main
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
Switched to branch 'side'
[side 03d8861] Side
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
ok 1 - setup

expecting success of 6406.2 'merge': 

	cat >.gitattributes <<-\EOF &&
	binary -merge
	union merge=union
	EOF

	if git merge main
	then
		echo Gaah, should have conflicted
		false
	else
		echo Ok, conflicted.
	fi

warning: Cannot merge binary files: binary (HEAD vs. main)
Auto-merging binary
CONFLICT (content): Merge conflict in binary
Auto-merging text
CONFLICT (content): Merge conflict in text
Auto-merging union
Automatic merge failed; fix conflicts and then commit the result.
Ok, conflicted.
ok 2 - merge

expecting success of 6406.3 'check merge result in index': 

	git ls-files -u | grep binary &&
	git ls-files -u | grep text &&
	! (git ls-files -u | grep union)


100644 a77fa514de2720c72c1a861de098595959a2c97a 1	binary
100644 fb25c069fdd4d47c6cf8d3a457b8f620064cba41 2	binary
100644 3ed470c24e0f4b21922ae82fd1189ebd1d0fb1b3 3	binary
100644 a77fa514de2720c72c1a861de098595959a2c97a 1	text
100644 fb25c069fdd4d47c6cf8d3a457b8f620064cba41 2	text
100644 3ed470c24e0f4b21922ae82fd1189ebd1d0fb1b3 3	text
ok 3 - check merge result in index

expecting success of 6406.4 'check merge result in working tree': 

	git cat-file -p HEAD:binary >binary-orig &&
	grep "<<<<<<<" text &&
	cmp binary-orig binary &&
	! grep "<<<<<<<" union &&
	grep Main union &&
	grep Side union


<<<<<<< HEAD
Main
Side
ok 4 - check merge result in working tree

expecting success of 6406.5 'retry the merge with longer context': 
	echo text conflict-marker-size=32 >>.gitattributes &&
	git checkout -m text &&
	sed -ne "/^\([<=>]\)\1\1\1*/{
		s/ .*$//
		p
	}" >actual text &&
	grep ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" actual &&
	grep "================================" actual &&
	grep "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" actual

Recreated 1 merge conflict
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
================================
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ok 5 - retry the merge with longer context

expecting success of 6406.6 'custom merge backend': 

	echo "* merge=union" >.gitattributes &&
	echo "text merge=custom" >>.gitattributes &&

	git reset --hard anchor &&
	git config --replace-all \
	merge.custom.driver "./custom-merge %O %A %B 0 %P" &&
	git config --replace-all \
	merge.custom.name "custom merge driver for testing" &&

	git merge main &&

	cmp binary union &&
	sed -e 1,3d text >check-1 &&
	o=$(git unpack-file main^:text) &&
	a=$(git unpack-file side^:text) &&
	b=$(git unpack-file main:text) &&
	sh -c "./custom-merge $o $a $b 0 text" &&
	sed -e 1,3d $a >check-2 &&
	cmp check-1 check-2 &&
	rm -f $o $a $b

HEAD is now at 03d8861 Side
Auto-merging binary
Auto-merging text
Auto-merging union
Merge made by the 'ort' strategy.
 binary |  1 +
 text   | 10 ++++++++++
 union  |  1 +
 3 files changed, 12 insertions(+)
ok 6 - custom merge backend

expecting success of 6406.7 'custom merge backend': 

	git reset --hard anchor &&
	git config --replace-all \
	merge.custom.driver "./custom-merge %O %A %B 1 %P" &&
	git config --replace-all \
	merge.custom.name "custom merge driver for testing" &&

	if git merge main
	then
		echo "Eh? should have conflicted"
		false
	else
		echo "Ok, conflicted"
	fi &&

	cmp binary union &&
	sed -e 1,3d text >check-1 &&
	o=$(git unpack-file main^:text) &&
	a=$(git unpack-file anchor:text) &&
	b=$(git unpack-file main:text) &&
	sh -c "./custom-merge $o $a $b 0 text" &&
	sed -e 1,3d $a >check-2 &&
	cmp check-1 check-2 &&
	sed -e 1,3d -e 4q $a >check-3 &&
	echo "path is text" >expect &&
	cmp expect check-3 &&
	rm -f $o $a $b

HEAD is now at 03d8861 Side
Auto-merging binary
Auto-merging text
CONFLICT (content): Merge conflict in text
Auto-merging union
Automatic merge failed; fix conflicts and then commit the result.
Ok, conflicted
ok 7 - custom merge backend

expecting success of 6406.8 'up-to-date merge without common ancestor': 
	git init repo1 &&
	git init repo2 &&
	test_tick &&
	(
		cd repo1 &&
		>a &&
		git add a &&
		git commit -m initial
	) &&
	test_tick &&
	(
		cd repo2 &&
		git commit --allow-empty -m initial
	) &&
	test_tick &&
	(
		cd repo1 &&
		git fetch ../repo2 main &&
		git merge --allow-unrelated-histories FETCH_HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6406-merge-attr/repo1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6406-merge-attr/repo2/.git/
[main (root-commit) 94ef07c] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
[main (root-commit) de45b2c] initial
 Author: A U Thor <author@example.com>
From ../repo2
 * branch            main       -> FETCH_HEAD
Merge made by the 'ort' strategy.
ok 8 - up-to-date merge without common ancestor

expecting success of 6406.9 'custom merge does not lock index': 
	git reset --hard anchor &&
	write_script sleep-an-hour.sh <<-\EOF &&
		sleep 3600 &
		echo $! >sleep.pid
	EOF

	test_write_lines >.gitattributes \
		"* merge=ours" "text merge=sleep-an-hour" &&
	test_config merge.ours.driver true &&
	test_config merge.sleep-an-hour.driver ./sleep-an-hour.sh &&

	# We are testing that the custom merge driver does not block
	# index.lock on Windows due to an inherited file handle.
	# To ensure that the backgrounded process ran sufficiently
	# long (and has been started in the first place), we do not
	# ignore the result of the kill command.
	# By packaging the command in test_when_finished, we get both
	# the correctness check and the clean-up.
	test_when_finished "kill \$(cat sleep.pid)" &&
	git merge main

HEAD is now at 03d8861 Side
Auto-merging binary
Auto-merging text
Auto-merging union
Merge made by the 'ort' strategy.
ok 9 - custom merge does not lock index

expecting success of 6406.10 'binary files with union attribute': 
	git checkout -b bin-main &&
	printf "base\0" >bin.txt &&
	echo "bin.txt merge=union" >.gitattributes &&
	git add bin.txt .gitattributes &&
	git commit -m base &&

	printf "one\0" >bin.txt &&
	git commit -am one &&

	git checkout -b bin-side HEAD^ &&
	printf "two\0" >bin.txt &&
	git commit -am two &&

	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_must_fail git merge bin-main >output
	else
		test_must_fail git merge bin-main 2>output
	fi &&
	grep -i "warning.*cannot merge.*HEAD vs. bin-main" output

Switched to a new branch 'bin-main'
[bin-main 412f170] base
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 .gitattributes
 create mode 100644 bin.txt
[bin-main 9e9a744] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Switched to a new branch 'bin-side'
[bin-side 6e95fe3] two
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
warning: Cannot merge binary files: bin.txt (HEAD vs. bin-main)
ok 10 - binary files with union attribute

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6409-merge-subtree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6409-merge-subtree/.git/
expecting success of 6409.1 'setup': 

	s="1 2 3 4 5 6 7 8" &&
	test_write_lines $s >hello &&
	git add hello &&
	git commit -m initial &&
	git checkout -b side &&
	echo >>hello world &&
	git add hello &&
	git commit -m second &&
	git checkout main &&
	test_write_lines mundo $s >hello &&
	git add hello &&
	git commit -m main


[main (root-commit) 0333478] initial
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 hello
Switched to a new branch 'side'
[side 9067c9d] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
[main 88d037e] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 6409.2 'subtree available and works like recursive': 

	git merge -s subtree side &&
	test_write_lines mundo $s world >expect &&
	test_cmp expect hello


Merging:
88d037e main
virtual side
found 1 common ancestor:
0333478 initial
Auto-merging hello
Merge made by the 'subtree' strategy.
 hello | 1 +
 1 file changed, 1 insertion(+)
ok 2 - subtree available and works like recursive

expecting success of 6409.3 'setup branch sub': 
	git checkout --orphan sub &&
	git rm -rf . &&
	test_commit foo

Switched to a new branch 'sub'
rm 'hello'
[sub (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 3 - setup branch sub

expecting success of 6409.4 'setup topic branch': 
	git checkout -b topic main &&
	git merge -s ours --no-commit --allow-unrelated-histories sub &&
	git read-tree --prefix=dir/ -u sub &&
	git commit -m "initial merge of sub into topic" &&
	test_path_is_file dir/foo.t &&
	test_path_is_file hello

Switched to a new branch 'topic'
Automatic merge went well; stopped before committing as requested
[topic a9c3c06] initial merge of sub into topic
 Author: A U Thor <author@example.com>
ok 4 - setup topic branch

expecting success of 6409.5 'update branch sub': 
	git checkout sub &&
	test_commit bar

Switched to branch 'sub'
[sub 46a08c5] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 5 - update branch sub

expecting success of 6409.6 'update topic branch': 
	git checkout topic &&
	git merge -s subtree sub -m "second merge of sub into topic" &&
	test_path_is_file dir/bar.t &&
	test_path_is_file dir/foo.t &&
	test_path_is_file hello

Switched to branch 'topic'
Merging:
a9c3c06 initial merge of sub into topic
virtual sub
found 1 common ancestor:
ddd63c9 foo
Merge made by the 'subtree' strategy.
 dir/bar.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 dir/bar.t
ok 6 - update topic branch

expecting success of 6409.7 'setup': 
	mkdir git-gui &&
	cd git-gui &&
	git init &&
	echo git-gui > git-gui.sh &&
	o1=$(git hash-object git-gui.sh) &&
	git add git-gui.sh &&
	git commit -m "initial git-gui" &&
	cd .. &&
	mkdir git &&
	cd git &&
	git init &&
	echo git >git.c &&
	o2=$(git hash-object git.c) &&
	git add git.c &&
	git commit -m "initial git"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6409-merge-subtree/git-gui/.git/
[main (root-commit) a175596] initial git-gui
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 git-gui.sh
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6409-merge-subtree/git/.git/
[main (root-commit) 724c210] initial git
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 git.c
ok 7 - setup

expecting success of 6409.8 'initial merge': 
	git remote add -f gui ../git-gui &&
	git merge -s ours --no-commit --allow-unrelated-histories gui/main &&
	git read-tree --prefix=git-gui/ -u gui/main &&
	git commit -m "Merge git-gui as our subdirectory" &&
	git checkout -b work &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	git-gui/git-gui.sh" &&
		echo "100644 $o2 0	git.c"
	) >expected &&
	test_cmp expected actual

Updating gui
From ../git-gui
 * [new branch]      main       -> gui/main
Automatic merge went well; stopped before committing as requested
[main b741856] Merge git-gui as our subdirectory
 Author: A U Thor <author@example.com>
Switched to a new branch 'work'
ok 8 - initial merge

expecting success of 6409.9 'merge update': 
	cd ../git-gui &&
	echo git-gui2 > git-gui.sh &&
	o3=$(git hash-object git-gui.sh) &&
	git add git-gui.sh &&
	git checkout -b topic_2 &&
	git commit -m "update git-gui" &&
	cd ../git &&
	git pull --no-rebase -s subtree gui topic_2 &&
	git ls-files -s >actual &&
	(
		echo "100644 $o3 0	git-gui/git-gui.sh" &&
		echo "100644 $o2 0	git.c"
	) >expected &&
	test_cmp expected actual

Switched to a new branch 'topic_2'
[topic_2 c9333be] update git-gui
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From ../git-gui
 * branch            topic_2    -> FETCH_HEAD
 * [new branch]      topic_2    -> gui/topic_2
Merging:
b741856 Merge git-gui as our subdirectory
virtual c9333bebe07f90e76933cfa634ab72516dede3df
found 1 common ancestor:
a175596 initial git-gui
Merge made by the 'subtree' strategy.
 git-gui/git-gui.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - merge update

expecting success of 6409.10 'initial ambiguous subtree': 
	cd ../git &&
	git reset --hard main &&
	git checkout -b topic_2 &&
	git merge -s ours --no-commit gui/main &&
	git read-tree --prefix=git-gui2/ -u gui/main &&
	git commit -m "Merge git-gui2 as our subdirectory" &&
	git checkout -b work2 &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	git-gui/git-gui.sh" &&
		echo "100644 $o1 0	git-gui2/git-gui.sh" &&
		echo "100644 $o2 0	git.c"
	) >expected &&
	test_cmp expected actual

HEAD is now at b741856 Merge git-gui as our subdirectory
Switched to a new branch 'topic_2'
Already up to date.
[topic_2 b1fd074] Merge git-gui2 as our subdirectory
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 git-gui2/git-gui.sh
Switched to a new branch 'work2'
ok 10 - initial ambiguous subtree

expecting success of 6409.11 'merge using explicit': 
	cd ../git &&
	git reset --hard topic_2 &&
	git pull --no-rebase -Xsubtree=git-gui gui topic_2 &&
	git ls-files -s >actual &&
	(
		echo "100644 $o3 0	git-gui/git-gui.sh" &&
		echo "100644 $o1 0	git-gui2/git-gui.sh" &&
		echo "100644 $o2 0	git.c"
	) >expected &&
	test_cmp expected actual

HEAD is now at b1fd074 Merge git-gui2 as our subdirectory
From ../git-gui
 * branch            topic_2    -> FETCH_HEAD
Merge made by the 'ort' strategy.
 git-gui/git-gui.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 11 - merge using explicit

expecting success of 6409.12 'merge2 using explicit': 
	cd ../git &&
	git reset --hard topic_2 &&
	git pull --no-rebase -Xsubtree=git-gui2 gui topic_2 &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	git-gui/git-gui.sh" &&
		echo "100644 $o3 0	git-gui2/git-gui.sh" &&
		echo "100644 $o2 0	git.c"
	) >expected &&
	test_cmp expected actual

HEAD is now at b1fd074 Merge git-gui2 as our subdirectory
From ../git-gui
 * branch            topic_2    -> FETCH_HEAD
Merge made by the 'ort' strategy.
 git-gui2/git-gui.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - merge2 using explicit

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6413-merge-crlf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6413-merge-crlf/.git/
expecting success of 6413.1 'setup': 
	git config core.autocrlf true &&
	echo foo | append_cr >file &&
	git add file &&
	git commit -m "Initial" &&
	git tag initial &&
	git branch side &&
	echo line from a | append_cr >file &&
	git commit -m "add line from a" file &&
	git tag a &&
	git checkout side &&
	echo line from b | append_cr >file &&
	git commit -m "add line from b" file &&
	git tag b &&
	git checkout main

[main (root-commit) e0f7379] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 8798c05] add line from a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'side'
[side 5296996] add line from b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 1 - setup

expecting success of 6413.2 'Check "ours" is CRLF': 
	git reset --hard initial &&
	git merge side -s ours &&
	cat file | remove_cr | append_cr >file.temp &&
	test_cmp file file.temp

HEAD is now at e0f7379 Initial
Merge made by the 'ours' strategy.
ok 2 - Check "ours" is CRLF

expecting success of 6413.3 'Check that conflict file is CRLF': 
	git reset --hard a &&
	test_must_fail git merge side &&
	cat file | remove_cr | append_cr >file.temp &&
	test_cmp file file.temp

HEAD is now at 8798c05 add line from a
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
ok 3 - Check that conflict file is CRLF

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6411-merge-filemode.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6411-merge-filemode/.git/
expecting success of 6411.1 'set up mode change in one branch': 
	: >file1 &&
	git add file1 &&
	git commit -m initial &&
	git checkout -b a1 main &&
	: >dummy &&
	git add dummy &&
	git commit -m a &&
	git checkout -b b1 main &&
	test_chmod +x file1 &&
	git add file1 &&
	git commit -m b1

[main (root-commit) acd9408] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
Switched to a new branch 'a1'
[a1 8d8c073] a
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dummy
Switched to a new branch 'b1'
[b1 3dfda39] b1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 file1
ok 1 - set up mode change in one branch

expecting success of 6411.2 'resolve single mode change (recursive, a1)': 
		git checkout -f $us &&
		git merge -s $strategy $them &&
		git ls-files -s file1 | grep ^100755
	
Switched to branch 'a1'
Merge made by the 'ort' strategy.
 file1 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 file1
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	file1
ok 2 - resolve single mode change (recursive, a1)

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 6411.3 'verify executable bit on file (recursive, a1)': 
		test -x file1
	
ok 3 - verify executable bit on file (recursive, a1)

expecting success of 6411.4 'resolve single mode change (recursive, b1)': 
		git checkout -f $us &&
		git merge -s $strategy $them &&
		git ls-files -s file1 | grep ^100755
	
Switched to branch 'b1'
Updating 3dfda39..e9857f3
Fast-forward
 dummy | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dummy
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	file1
ok 4 - resolve single mode change (recursive, b1)

expecting success of 6411.5 'verify executable bit on file (recursive, b1)': 
		test -x file1
	
ok 5 - verify executable bit on file (recursive, b1)

expecting success of 6411.6 'resolve single mode change (resolve, a1)': 
		git checkout -f $us &&
		git merge -s $strategy $them &&
		git ls-files -s file1 | grep ^100755
	
Switched to branch 'a1'
Already up to date.
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	file1
ok 6 - resolve single mode change (resolve, a1)

expecting success of 6411.7 'verify executable bit on file (resolve, a1)': 
		test -x file1
	
ok 7 - verify executable bit on file (resolve, a1)

expecting success of 6411.8 'resolve single mode change (resolve, b1)': 
		git checkout -f $us &&
		git merge -s $strategy $them &&
		git ls-files -s file1 | grep ^100755
	
Switched to branch 'b1'
Already up to date.
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0	file1
ok 8 - resolve single mode change (resolve, b1)

expecting success of 6411.9 'verify executable bit on file (resolve, b1)': 
		test -x file1
	
ok 9 - verify executable bit on file (resolve, b1)

expecting success of 6411.10 'set up mode change in both branches': 
	git reset --hard HEAD &&
	git checkout -b a2 main &&
	: >file2 &&
	H=$(git hash-object file2) &&
	test_chmod +x file2 &&
	git commit -m a2 &&
	git checkout -b b2 main &&
	: >file2 &&
	git add file2 &&
	git commit -m b2 &&
	cat >expect <<-EOF
	100755 $H 2	file2
	100644 $H 3	file2
	EOF

HEAD is now at e9857f3 Merge branch 'b1' into a1
Switched to a new branch 'a2'
[a2 e027a38] a2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 file2
Switched to a new branch 'b2'
[b2 ef0d9fd] b2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
ok 10 - set up mode change in both branches

expecting success of 6411.11 'detect conflict on double mode change (recursive)': 
		git reset --hard &&
		git checkout -f a2 &&
		test_must_fail git merge -s $strategy b2 &&
		git ls-files -u >actual &&
		test_cmp expect actual &&
		git ls-files -s file2 | grep ^100755
	
HEAD is now at ef0d9fd b2
Switched to branch 'a2'
CONFLICT (add/add): Merge conflict in file2
Automatic merge failed; fix conflicts and then commit the result.
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 2	file2
ok 11 - detect conflict on double mode change (recursive)

expecting success of 6411.12 'verify executable bit on file (recursive)': 
		test -x file2
	
ok 12 - verify executable bit on file (recursive)

expecting success of 6411.13 'detect conflict on double mode change (resolve)': 
		git reset --hard &&
		git checkout -f a2 &&
		test_must_fail git merge -s $strategy b2 &&
		git ls-files -u >actual &&
		test_cmp expect actual &&
		git ls-files -s file2 | grep ^100755
	
HEAD is now at e027a38 a2
Already on 'a2'
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
ERROR: File file2 added identically in both branches,
ERROR: but permissions conflict 100755->100644.
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 2	file2
ok 13 - detect conflict on double mode change (resolve)

expecting success of 6411.14 'verify executable bit on file (resolve)': 
		test -x file2
	
ok 14 - verify executable bit on file (resolve)

expecting success of 6411.15 'set up delete/modechange scenario': 
	git reset --hard &&
	git checkout -b deletion main &&
	git rm file1 &&
	git commit -m deletion

HEAD is now at e027a38 a2
Switched to a new branch 'deletion'
rm 'file1'
[deletion 676a5f7] deletion
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 file1
ok 15 - set up delete/modechange scenario

expecting success of 6411.16 'detect delete/modechange conflict (recursive, b1)': 
		git reset --hard &&
		git checkout $us &&
		test_must_fail git merge -s $strategy $them
	
HEAD is now at 676a5f7 deletion
Switched to branch 'b1'
CONFLICT (modify/delete): file1 deleted in deletion and modified in HEAD.  Version HEAD of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 16 - detect delete/modechange conflict (recursive, b1)

expecting success of 6411.17 'detect delete/modechange conflict (recursive, deletion)': 
		git reset --hard &&
		git checkout $us &&
		test_must_fail git merge -s $strategy $them
	
HEAD is now at e9857f3 Merge branch 'b1' into a1
Switched to branch 'deletion'
CONFLICT (modify/delete): file1 deleted in HEAD and modified in b1.  Version b1 of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 17 - detect delete/modechange conflict (recursive, deletion)

expecting success of 6411.18 'detect delete/modechange conflict (resolve, b1)': 
		git reset --hard &&
		git checkout $us &&
		test_must_fail git merge -s $strategy $them
	
HEAD is now at 676a5f7 deletion
Switched to branch 'b1'
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
ERROR: File file1 deleted on one branch but had its
ERROR: permissions changed on the other.
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 18 - detect delete/modechange conflict (resolve, b1)

expecting success of 6411.19 'detect delete/modechange conflict (resolve, deletion)': 
		git reset --hard &&
		git checkout $us &&
		test_must_fail git merge -s $strategy $them
	
HEAD is now at e9857f3 Merge branch 'b1' into a1
Switched to branch 'deletion'
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
ERROR: File file1 deleted on one branch but had its
ERROR: permissions changed on the other.
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 19 - detect delete/modechange conflict (resolve, deletion)

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6414-merge-rename-nocruft.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6414-merge-rename-nocruft/.git/
expecting success of 6414.1 'setup': 
	cat >A <<-\EOF &&
	a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
	b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
	c cccccccccccccccccccccccccccccccccccccccccccccccc
	d dddddddddddddddddddddddddddddddddddddddddddddddd
	e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
	f ffffffffffffffffffffffffffffffffffffffffffffffff
	g gggggggggggggggggggggggggggggggggggggggggggggggg
	h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
	i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
	j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
	k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
	l llllllllllllllllllllllllllllllllllllllllllllllll
	m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
	n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
	o oooooooooooooooooooooooooooooooooooooooooooooooo
	EOF

	cat >M <<-\EOF &&
	A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
	C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
	D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
	E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
	F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
	G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
	H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
	I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
	J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
	K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
	L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
	M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
	N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
	O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
	EOF

	git add A M &&
	git commit -m "initial has A and M" &&
	git branch white &&
	git branch red &&
	git branch blue &&

	git checkout white &&
	sed -e "/^g /s/.*/g : white changes a line/" <A >B &&
	sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&
	rm -f A M &&
	git update-index --add --remove A B M N &&
	git commit -m "white renames A->B, M->N" &&

	git checkout red &&
	echo created by red >R &&
	git update-index --add R &&
	git commit -m "red creates R" &&

	git checkout blue &&
	sed -e "/^o /s/.*/g : blue changes a line/" <A >B &&
	rm -f A &&
	mv B A &&
	git update-index A &&
	git commit -m "blue modify A" &&

	git checkout main

[main (root-commit) 7bbb60a] initial has A and M
 Author: A U Thor <author@example.com>
 2 files changed, 30 insertions(+)
 create mode 100644 A
 create mode 100644 M
Switched to branch 'white'
[white 72f28f0] white renames A->B, M->N
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename A => B (93%)
 rename M => N (93%)
Switched to branch 'red'
[red f4afd94] red creates R
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 R
Switched to branch 'blue'
[blue ea35213] blue modify A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 1 - setup

expecting success of 6414.2 'merge white into red (A->B,M->N)': 
	git checkout -b red-white red &&
	git merge white &&
	git write-tree &&
	test_path_is_file B &&
	test_path_is_file N &&
	test_path_is_file R &&
	test_path_is_missing A &&
	test_path_is_missing M

Switched to a new branch 'red-white'
Merge made by the 'ort' strategy.
 A => B | 2 +-
 M => N | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename A => B (93%)
 rename M => N (93%)
2f1341e5f32ecb7f45a35d122e62999a76d463cf
ok 2 - merge white into red (A->B,M->N)

expecting success of 6414.3 'merge blue into white (A->B, mod A, A untracked)': 
	git checkout -b white-blue white &&
	echo dirty >A &&
	git merge blue &&
	git write-tree &&
	test_path_is_file A &&
	echo dirty >expect &&
	test_cmp expect A &&
	test_path_is_file B &&
	test_path_is_file N &&
	test_path_is_missing M

Switched to a new branch 'white-blue'
Auto-merging B
Merge made by the 'ort' strategy.
 B | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
1db6abaa095ec16043333967f8d0dbaa01cdf029
ok 3 - merge blue into white (A->B, mod A, A untracked)

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6412-merge-large-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6412-merge-large-rename/.git/
expecting success of 6412.1 'setup (initial)': 
	touch file &&
	git add . &&
	git commit -m initial &&
	git tag initial

[main (root-commit) 6ce5622] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 1 - setup (initial)

expecting success of 6412.2 'rename (5, ok)': 
	n=5 &&
	expect=ok &&
	git checkout -f main &&
	test_might_fail git branch -D test$n &&
	git reset --hard initial &&
	for i in $(count $n); do
		make_text $i initial initial >$i || return 1
	done &&
	git add . &&
	git commit -m add=$n &&
	for i in $(count $n); do
		make_text $i changed initial >$i || return 1
	done &&
	git commit -a -m change=$n &&
	git checkout -b test$n HEAD^ &&
	for i in $(count $n); do
		git rm $i &&
		make_text $i initial changed >$i.moved || return 1
	done &&
	git add . &&
	git commit -m change+rename=$n &&
	case "$expect" in
		ok) git merge main ;;
		 *) test_must_fail git merge main ;;
	esac
	
Already on 'main'
error: branch 'test5' not found.
HEAD is now at 6ce5622 initial
[main c717f7b] add=5
 Author: A U Thor <author@example.com>
 5 files changed, 110 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
 create mode 100644 5
[main c9ccf89] change=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
Switched to a new branch 'test5'
rm '1'
rm '2'
rm '3'
rm '4'
rm '5'
[test5 2d6f47f] change+rename=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
 rename 1 => 1.moved (91%)
 rename 2 => 2.moved (91%)
 rename 3 => 3.moved (91%)
 rename 4 => 4.moved (91%)
 rename 5 => 5.moved (91%)
Auto-merging 1.moved
Auto-merging 2.moved
Auto-merging 3.moved
Auto-merging 4.moved
Auto-merging 5.moved
Merge made by the 'ort' strategy.
 1.moved | 2 +-
 2.moved | 2 +-
 3.moved | 2 +-
 4.moved | 2 +-
 5.moved | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)
ok 2 - rename (5, ok)

expecting success of 6412.3 'set diff.renamelimit to 4': 
	git config diff.renamelimit 4

ok 3 - set diff.renamelimit to 4

expecting success of 6412.4 'rename (4, ok)': 
	n=4 &&
	expect=ok &&
	git checkout -f main &&
	test_might_fail git branch -D test$n &&
	git reset --hard initial &&
	for i in $(count $n); do
		make_text $i initial initial >$i || return 1
	done &&
	git add . &&
	git commit -m add=$n &&
	for i in $(count $n); do
		make_text $i changed initial >$i || return 1
	done &&
	git commit -a -m change=$n &&
	git checkout -b test$n HEAD^ &&
	for i in $(count $n); do
		git rm $i &&
		make_text $i initial changed >$i.moved || return 1
	done &&
	git add . &&
	git commit -m change+rename=$n &&
	case "$expect" in
		ok) git merge main ;;
		 *) test_must_fail git merge main ;;
	esac
	
Switched to branch 'main'
error: branch 'test4' not found.
HEAD is now at 6ce5622 initial
[main afd3780] add=4
 Author: A U Thor <author@example.com>
 4 files changed, 88 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
[main 3b454a4] change=4
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+), 4 deletions(-)
Switched to a new branch 'test4'
rm '1'
rm '2'
rm '3'
rm '4'
[test4 39a2161] change+rename=4
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+), 4 deletions(-)
 rename 1 => 1.moved (91%)
 rename 2 => 2.moved (91%)
 rename 3 => 3.moved (91%)
 rename 4 => 4.moved (91%)
Auto-merging 1.moved
Auto-merging 2.moved
Auto-merging 3.moved
Auto-merging 4.moved
Merge made by the 'ort' strategy.
 1.moved | 2 +-
 2.moved | 2 +-
 3.moved | 2 +-
 4.moved | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)
ok 4 - rename (4, ok)

expecting success of 6412.5 'rename (5, fail)': 
	n=5 &&
	expect=fail &&
	git checkout -f main &&
	test_might_fail git branch -D test$n &&
	git reset --hard initial &&
	for i in $(count $n); do
		make_text $i initial initial >$i || return 1
	done &&
	git add . &&
	git commit -m add=$n &&
	for i in $(count $n); do
		make_text $i changed initial >$i || return 1
	done &&
	git commit -a -m change=$n &&
	git checkout -b test$n HEAD^ &&
	for i in $(count $n); do
		git rm $i &&
		make_text $i initial changed >$i.moved || return 1
	done &&
	git add . &&
	git commit -m change+rename=$n &&
	case "$expect" in
		ok) git merge main ;;
		 *) test_must_fail git merge main ;;
	esac
	
Switched to branch 'main'
Deleted branch test5 (was 4b646a2).
HEAD is now at 6ce5622 initial
[main c717f7b] add=5
 Author: A U Thor <author@example.com>
 5 files changed, 110 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
 create mode 100644 5
[main c9ccf89] change=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
Switched to a new branch 'test5'
rm '1'
rm '2'
rm '3'
rm '4'
rm '5'
[test5 2d6f47f] change+rename=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
 rename 1 => 1.moved (91%)
 rename 2 => 2.moved (91%)
 rename 3 => 3.moved (91%)
 rename 4 => 4.moved (91%)
 rename 5 => 5.moved (91%)
CONFLICT (modify/delete): 1 deleted in HEAD and modified in main.  Version main of 1 left in tree.
CONFLICT (modify/delete): 2 deleted in HEAD and modified in main.  Version main of 2 left in tree.
CONFLICT (modify/delete): 3 deleted in HEAD and modified in main.  Version main of 3 left in tree.
CONFLICT (modify/delete): 4 deleted in HEAD and modified in main.  Version main of 4 left in tree.
CONFLICT (modify/delete): 5 deleted in HEAD and modified in main.  Version main of 5 left in tree.
warning: exhaustive rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 5 and retry the command.
Automatic merge failed; fix conflicts and then commit the result.
ok 5 - rename (5, fail)

expecting success of 6412.6 'set merge.renamelimit to 5': 
	git config merge.renamelimit 5

ok 6 - set merge.renamelimit to 5

expecting success of 6412.7 'rename (5, ok)': 
	n=5 &&
	expect=ok &&
	git checkout -f main &&
	test_might_fail git branch -D test$n &&
	git reset --hard initial &&
	for i in $(count $n); do
		make_text $i initial initial >$i || return 1
	done &&
	git add . &&
	git commit -m add=$n &&
	for i in $(count $n); do
		make_text $i changed initial >$i || return 1
	done &&
	git commit -a -m change=$n &&
	git checkout -b test$n HEAD^ &&
	for i in $(count $n); do
		git rm $i &&
		make_text $i initial changed >$i.moved || return 1
	done &&
	git add . &&
	git commit -m change+rename=$n &&
	case "$expect" in
		ok) git merge main ;;
		 *) test_must_fail git merge main ;;
	esac
	
Switched to branch 'main'
Deleted branch test5 (was 2d6f47f).
HEAD is now at 6ce5622 initial
[main c717f7b] add=5
 Author: A U Thor <author@example.com>
 5 files changed, 110 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
 create mode 100644 5
[main c9ccf89] change=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
Switched to a new branch 'test5'
rm '1'
rm '2'
rm '3'
rm '4'
rm '5'
[test5 2d6f47f] change+rename=5
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+), 5 deletions(-)
 rename 1 => 1.moved (91%)
 rename 2 => 2.moved (91%)
 rename 3 => 3.moved (91%)
 rename 4 => 4.moved (91%)
 rename 5 => 5.moved (91%)
Auto-merging 1.moved
Auto-merging 2.moved
Auto-merging 3.moved
Auto-merging 4.moved
Auto-merging 5.moved
Merge made by the 'ort' strategy.
 1.moved | 2 +-
 2.moved | 2 +-
 3.moved | 2 +-
 4.moved | 2 +-
 5.moved | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)
ok 7 - rename (5, ok)

expecting success of 6412.8 'rename (6, fail)': 
	n=6 &&
	expect=fail &&
	git checkout -f main &&
	test_might_fail git branch -D test$n &&
	git reset --hard initial &&
	for i in $(count $n); do
		make_text $i initial initial >$i || return 1
	done &&
	git add . &&
	git commit -m add=$n &&
	for i in $(count $n); do
		make_text $i changed initial >$i || return 1
	done &&
	git commit -a -m change=$n &&
	git checkout -b test$n HEAD^ &&
	for i in $(count $n); do
		git rm $i &&
		make_text $i initial changed >$i.moved || return 1
	done &&
	git add . &&
	git commit -m change+rename=$n &&
	case "$expect" in
		ok) git merge main ;;
		 *) test_must_fail git merge main ;;
	esac
	
Switched to branch 'main'
error: branch 'test6' not found.
HEAD is now at 6ce5622 initial
[main 09e502a] add=6
 Author: A U Thor <author@example.com>
 6 files changed, 132 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
 create mode 100644 4
 create mode 100644 5
 create mode 100644 6
[main ffecf28] change=6
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+), 6 deletions(-)
Switched to a new branch 'test6'
rm '1'
rm '2'
rm '3'
rm '4'
rm '5'
rm '6'
[test6 dcaf00c] change+rename=6
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+), 6 deletions(-)
 rename 1 => 1.moved (91%)
 rename 2 => 2.moved (91%)
 rename 3 => 3.moved (91%)
 rename 4 => 4.moved (91%)
 rename 5 => 5.moved (91%)
 rename 6 => 6.moved (91%)
CONFLICT (modify/delete): 1 deleted in HEAD and modified in main.  Version main of 1 left in tree.
CONFLICT (modify/delete): 2 deleted in HEAD and modified in main.  Version main of 2 left in tree.
CONFLICT (modify/delete): 3 deleted in HEAD and modified in main.  Version main of 3 left in tree.
CONFLICT (modify/delete): 4 deleted in HEAD and modified in main.  Version main of 4 left in tree.
CONFLICT (modify/delete): 5 deleted in HEAD and modified in main.  Version main of 5 left in tree.
CONFLICT (modify/delete): 6 deleted in HEAD and modified in main.  Version main of 6 left in tree.
warning: exhaustive rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 6 and retry the command.
Automatic merge failed; fix conflicts and then commit the result.
ok 8 - rename (6, fail)

expecting success of 6412.9 'setup large simple rename': 
	git config --unset merge.renamelimit &&
	git config --unset diff.renamelimit &&

	git reset --hard initial &&
	for i in $(count 200); do
		make_text foo bar baz >$i || return 1
	done &&
	git add . &&
	git commit -m create-files &&

	git branch simple-change &&
	git checkout -b simple-rename &&

	mkdir builtin &&
	git mv [0-9]* builtin/ &&
	git commit -m renamed &&

	git checkout simple-change &&
	>unrelated-change &&
	git add unrelated-change &&
	git commit -m unrelated-change

HEAD is now at 6ce5622 initial
[test6 47a98b9] create-files
 Author: A U Thor <author@example.com>
 200 files changed, 4400 insertions(+)
 create mode 100644 1
 create mode 100644 10
 create mode 100644 100
 create mode 100644 101
 create mode 100644 102
 create mode 100644 103
 create mode 100644 104
 create mode 100644 105
 create mode 100644 106
 create mode 100644 107
 create mode 100644 108
 create mode 100644 109
 create mode 100644 11
 create mode 100644 110
 create mode 100644 111
 create mode 100644 112
 create mode 100644 113
 create mode 100644 114
 create mode 100644 115
 create mode 100644 116
 create mode 100644 117
 create mode 100644 118
 create mode 100644 119
 create mode 100644 12
 create mode 100644 120
 create mode 100644 121
 create mode 100644 122
 create mode 100644 123
 create mode 100644 124
 create mode 100644 125
 create mode 100644 126
 create mode 100644 127
 create mode 100644 128
 create mode 100644 129
 create mode 100644 13
 create mode 100644 130
 create mode 100644 131
 create mode 100644 132
 create mode 100644 133
 create mode 100644 134
 create mode 100644 135
 create mode 100644 136
 create mode 100644 137
 create mode 100644 138
 create mode 100644 139
 create mode 100644 14
 create mode 100644 140
 create mode 100644 141
 create mode 100644 142
 create mode 100644 143
 create mode 100644 144
 create mode 100644 145
 create mode 100644 146
 create mode 100644 147
 create mode 100644 148
 create mode 100644 149
 create mode 100644 15
 create mode 100644 150
 create mode 100644 151
 create mode 100644 152
 create mode 100644 153
 create mode 100644 154
 create mode 100644 155
 create mode 100644 156
 create mode 100644 157
 create mode 100644 158
 create mode 100644 159
 create mode 100644 16
 create mode 100644 160
 create mode 100644 161
 create mode 100644 162
 create mode 100644 163
 create mode 100644 164
 create mode 100644 165
 create mode 100644 166
 create mode 100644 167
 create mode 100644 168
 create mode 100644 169
 create mode 100644 17
 create mode 100644 170
 create mode 100644 171
 create mode 100644 172
 create mode 100644 173
 create mode 100644 174
 create mode 100644 175
 create mode 100644 176
 create mode 100644 177
 create mode 100644 178
 create mode 100644 179
 create mode 100644 18
 create mode 100644 180
 create mode 100644 181
 create mode 100644 182
 create mode 100644 183
 create mode 100644 184
 create mode 100644 185
 create mode 100644 186
 create mode 100644 187
 create mode 100644 188
 create mode 100644 189
 create mode 100644 19
 create mode 100644 190
 create mode 100644 191
 create mode 100644 192
 create mode 100644 193
 create mode 100644 194
 create mode 100644 195
 create mode 100644 196
 create mode 100644 197
 create mode 100644 198
 create mode 100644 199
 create mode 100644 2
 create mode 100644 20
 create mode 100644 200
 create mode 100644 21
 create mode 100644 22
 create mode 100644 23
 create mode 100644 24
 create mode 100644 25
 create mode 100644 26
 create mode 100644 27
 create mode 100644 28
 create mode 100644 29
 create mode 100644 3
 create mode 100644 30
 create mode 100644 31
 create mode 100644 32
 create mode 100644 33
 create mode 100644 34
 create mode 100644 35
 create mode 100644 36
 create mode 100644 37
 create mode 100644 38
 create mode 100644 39
 create mode 100644 4
 create mode 100644 40
 create mode 100644 41
 create mode 100644 42
 create mode 100644 43
 create mode 100644 44
 create mode 100644 45
 create mode 100644 46
 create mode 100644 47
 create mode 100644 48
 create mode 100644 49
 create mode 100644 5
 create mode 100644 50
 create mode 100644 51
 create mode 100644 52
 create mode 100644 53
 create mode 100644 54
 create mode 100644 55
 create mode 100644 56
 create mode 100644 57
 create mode 100644 58
 create mode 100644 59
 create mode 100644 6
 create mode 100644 60
 create mode 100644 61
 create mode 100644 62
 create mode 100644 63
 create mode 100644 64
 create mode 100644 65
 create mode 100644 66
 create mode 100644 67
 create mode 100644 68
 create mode 100644 69
 create mode 100644 7
 create mode 100644 70
 create mode 100644 71
 create mode 100644 72
 create mode 100644 73
 create mode 100644 74
 create mode 100644 75
 create mode 100644 76
 create mode 100644 77
 create mode 100644 78
 create mode 100644 79
 create mode 100644 8
 create mode 100644 80
 create mode 100644 81
 create mode 100644 82
 create mode 100644 83
 create mode 100644 84
 create mode 100644 85
 create mode 100644 86
 create mode 100644 87
 create mode 100644 88
 create mode 100644 89
 create mode 100644 9
 create mode 100644 90
 create mode 100644 91
 create mode 100644 92
 create mode 100644 93
 create mode 100644 94
 create mode 100644 95
 create mode 100644 96
 create mode 100644 97
 create mode 100644 98
 create mode 100644 99
Switched to a new branch 'simple-rename'
[simple-rename 4602847] renamed
 Author: A U Thor <author@example.com>
 200 files changed, 0 insertions(+), 0 deletions(-)
 rename 1 => builtin/1 (100%)
 rename 10 => builtin/10 (100%)
 rename 100 => builtin/100 (100%)
 rename 101 => builtin/101 (100%)
 rename 102 => builtin/102 (100%)
 rename 103 => builtin/103 (100%)
 rename 104 => builtin/104 (100%)
 rename 105 => builtin/105 (100%)
 rename 106 => builtin/106 (100%)
 rename 107 => builtin/107 (100%)
 rename 108 => builtin/108 (100%)
 rename 109 => builtin/109 (100%)
 rename 11 => builtin/11 (100%)
 rename 110 => builtin/110 (100%)
 rename 111 => builtin/111 (100%)
 rename 112 => builtin/112 (100%)
 rename 113 => builtin/113 (100%)
 rename 114 => builtin/114 (100%)
 rename 115 => builtin/115 (100%)
 rename 116 => builtin/116 (100%)
 rename 117 => builtin/117 (100%)
 rename 118 => builtin/118 (100%)
 rename 119 => builtin/119 (100%)
 rename 12 => builtin/12 (100%)
 rename 120 => builtin/120 (100%)
 rename 121 => builtin/121 (100%)
 rename 122 => builtin/122 (100%)
 rename 123 => builtin/123 (100%)
 rename 124 => builtin/124 (100%)
 rename 125 => builtin/125 (100%)
 rename 126 => builtin/126 (100%)
 rename 127 => builtin/127 (100%)
 rename 128 => builtin/128 (100%)
 rename 129 => builtin/129 (100%)
 rename 13 => builtin/13 (100%)
 rename 130 => builtin/130 (100%)
 rename 131 => builtin/131 (100%)
 rename 132 => builtin/132 (100%)
 rename 133 => builtin/133 (100%)
 rename 134 => builtin/134 (100%)
 rename 135 => builtin/135 (100%)
 rename 136 => builtin/136 (100%)
 rename 137 => builtin/137 (100%)
 rename 138 => builtin/138 (100%)
 rename 139 => builtin/139 (100%)
 rename 14 => builtin/14 (100%)
 rename 140 => builtin/140 (100%)
 rename 141 => builtin/141 (100%)
 rename 142 => builtin/142 (100%)
 rename 143 => builtin/143 (100%)
 rename 144 => builtin/144 (100%)
 rename 145 => builtin/145 (100%)
 rename 146 => builtin/146 (100%)
 rename 147 => builtin/147 (100%)
 rename 148 => builtin/148 (100%)
 rename 149 => builtin/149 (100%)
 rename 15 => builtin/15 (100%)
 rename 150 => builtin/150 (100%)
 rename 151 => builtin/151 (100%)
 rename 152 => builtin/152 (100%)
 rename 153 => builtin/153 (100%)
 rename 154 => builtin/154 (100%)
 rename 155 => builtin/155 (100%)
 rename 156 => builtin/156 (100%)
 rename 157 => builtin/157 (100%)
 rename 158 => builtin/158 (100%)
 rename 159 => builtin/159 (100%)
 rename 16 => builtin/16 (100%)
 rename 160 => builtin/160 (100%)
 rename 161 => builtin/161 (100%)
 rename 162 => builtin/162 (100%)
 rename 163 => builtin/163 (100%)
 rename 164 => builtin/164 (100%)
 rename 165 => builtin/165 (100%)
 rename 166 => builtin/166 (100%)
 rename 167 => builtin/167 (100%)
 rename 168 => builtin/168 (100%)
 rename 169 => builtin/169 (100%)
 rename 17 => builtin/17 (100%)
 rename 170 => builtin/170 (100%)
 rename 171 => builtin/171 (100%)
 rename 172 => builtin/172 (100%)
 rename 173 => builtin/173 (100%)
 rename 174 => builtin/174 (100%)
 rename 175 => builtin/175 (100%)
 rename 176 => builtin/176 (100%)
 rename 177 => builtin/177 (100%)
 rename 178 => builtin/178 (100%)
 rename 179 => builtin/179 (100%)
 rename 18 => builtin/18 (100%)
 rename 180 => builtin/180 (100%)
 rename 181 => builtin/181 (100%)
 rename 182 => builtin/182 (100%)
 rename 183 => builtin/183 (100%)
 rename 184 => builtin/184 (100%)
 rename 185 => builtin/185 (100%)
 rename 186 => builtin/186 (100%)
 rename 187 => builtin/187 (100%)
 rename 188 => builtin/188 (100%)
 rename 189 => builtin/189 (100%)
 rename 19 => builtin/19 (100%)
 rename 190 => builtin/190 (100%)
 rename 191 => builtin/191 (100%)
 rename 192 => builtin/192 (100%)
 rename 193 => builtin/193 (100%)
 rename 194 => builtin/194 (100%)
 rename 195 => builtin/195 (100%)
 rename 196 => builtin/196 (100%)
 rename 197 => builtin/197 (100%)
 rename 198 => builtin/198 (100%)
 rename 199 => builtin/199 (100%)
 rename 2 => builtin/2 (100%)
 rename 20 => builtin/20 (100%)
 rename 200 => builtin/200 (100%)
 rename 21 => builtin/21 (100%)
 rename 22 => builtin/22 (100%)
 rename 23 => builtin/23 (100%)
 rename 24 => builtin/24 (100%)
 rename 25 => builtin/25 (100%)
 rename 26 => builtin/26 (100%)
 rename 27 => builtin/27 (100%)
 rename 28 => builtin/28 (100%)
 rename 29 => builtin/29 (100%)
 rename 3 => builtin/3 (100%)
 rename 30 => builtin/30 (100%)
 rename 31 => builtin/31 (100%)
 rename 32 => builtin/32 (100%)
 rename 33 => builtin/33 (100%)
 rename 34 => builtin/34 (100%)
 rename 35 => builtin/35 (100%)
 rename 36 => builtin/36 (100%)
 rename 37 => builtin/37 (100%)
 rename 38 => builtin/38 (100%)
 rename 39 => builtin/39 (100%)
 rename 4 => builtin/4 (100%)
 rename 40 => builtin/40 (100%)
 rename 41 => builtin/41 (100%)
 rename 42 => builtin/42 (100%)
 rename 43 => builtin/43 (100%)
 rename 44 => builtin/44 (100%)
 rename 45 => builtin/45 (100%)
 rename 46 => builtin/46 (100%)
 rename 47 => builtin/47 (100%)
 rename 48 => builtin/48 (100%)
 rename 49 => builtin/49 (100%)
 rename 5 => builtin/5 (100%)
 rename 50 => builtin/50 (100%)
 rename 51 => builtin/51 (100%)
 rename 52 => builtin/52 (100%)
 rename 53 => builtin/53 (100%)
 rename 54 => builtin/54 (100%)
 rename 55 => builtin/55 (100%)
 rename 56 => builtin/56 (100%)
 rename 57 => builtin/57 (100%)
 rename 58 => builtin/58 (100%)
 rename 59 => builtin/59 (100%)
 rename 6 => builtin/6 (100%)
 rename 60 => builtin/60 (100%)
 rename 61 => builtin/61 (100%)
 rename 62 => builtin/62 (100%)
 rename 63 => builtin/63 (100%)
 rename 64 => builtin/64 (100%)
 rename 65 => builtin/65 (100%)
 rename 66 => builtin/66 (100%)
 rename 67 => builtin/67 (100%)
 rename 68 => builtin/68 (100%)
 rename 69 => builtin/69 (100%)
 rename 7 => builtin/7 (100%)
 rename 70 => builtin/70 (100%)
 rename 71 => builtin/71 (100%)
 rename 72 => builtin/72 (100%)
 rename 73 => builtin/73 (100%)
 rename 74 => builtin/74 (100%)
 rename 75 => builtin/75 (100%)
 rename 76 => builtin/76 (100%)
 rename 77 => builtin/77 (100%)
 rename 78 => builtin/78 (100%)
 rename 79 => builtin/79 (100%)
 rename 8 => builtin/8 (100%)
 rename 80 => builtin/80 (100%)
 rename 81 => builtin/81 (100%)
 rename 82 => builtin/82 (100%)
 rename 83 => builtin/83 (100%)
 rename 84 => builtin/84 (100%)
 rename 85 => builtin/85 (100%)
 rename 86 => builtin/86 (100%)
 rename 87 => builtin/87 (100%)
 rename 88 => builtin/88 (100%)
 rename 89 => builtin/89 (100%)
 rename 9 => builtin/9 (100%)
 rename 90 => builtin/90 (100%)
 rename 91 => builtin/91 (100%)
 rename 92 => builtin/92 (100%)
 rename 93 => builtin/93 (100%)
 rename 94 => builtin/94 (100%)
 rename 95 => builtin/95 (100%)
 rename 96 => builtin/96 (100%)
 rename 97 => builtin/97 (100%)
 rename 98 => builtin/98 (100%)
 rename 99 => builtin/99 (100%)
Switched to branch 'simple-change'
[simple-change d125115] unrelated-change
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 unrelated-change
ok 9 - setup large simple rename

expecting success of 6412.10 'massive simple rename does not spam added files': 
	sane_unset GIT_MERGE_VERBOSITY &&
	git merge --no-stat simple-rename | grep -v Removing >output &&
	test_line_count -lt 5 output

ok 10 - massive simple rename does not spam added files

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6402-merge-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
expecting success of 6402.1 'setup': 
	cat >A <<-\EOF &&
	a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
	b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
	c cccccccccccccccccccccccccccccccccccccccccccccccc
	d dddddddddddddddddddddddddddddddddddddddddddddddd
	e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
	f ffffffffffffffffffffffffffffffffffffffffffffffff
	g gggggggggggggggggggggggggggggggggggggggggggggggg
	h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
	i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
	j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
	k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
	l llllllllllllllllllllllllllllllllllllllllllllllll
	m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
	n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
	o oooooooooooooooooooooooooooooooooooooooooooooooo
	EOF

	cat >M <<-\EOF &&
	A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
	C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
	D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
	E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
	F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
	G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
	H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
	I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
	J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
	K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
	L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
	M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
	N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
	O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
	EOF

	git add A M &&
	git commit -m "initial has A and M" &&
	git branch white &&
	git branch red &&
	git branch blue &&
	git branch yellow &&
	git branch change &&
	git branch change+rename &&

	sed -e "/^g /s/.*/g : main changes a line/" <A >A+ &&
	mv A+ A &&
	git commit -a -m "main updates A" &&

	git checkout yellow &&
	rm -f M &&
	git commit -a -m "yellow removes M" &&

	git checkout white &&
	sed -e "/^g /s/.*/g : white changes a line/" <A >B &&
	sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&
	rm -f A M &&
	git update-index --add --remove A B M N &&
	git commit -m "white renames A->B, M->N" &&

	git checkout red &&
	sed -e "/^g /s/.*/g : red changes a line/" <A >B &&
	sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&
	rm -f A M &&
	git update-index --add --remove A B M N &&
	git commit -m "red renames A->B, M->N" &&

	git checkout blue &&
	sed -e "/^g /s/.*/g : blue changes a line/" <A >C &&
	sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&
	rm -f A M &&
	git update-index --add --remove A C M N &&
	git commit -m "blue renames A->C, M->N" &&

	git checkout change &&
	sed -e "/^g /s/.*/g : changed line/" <A >A+ &&
	mv A+ A &&
	git commit -q -a -m "changed" &&

	git checkout change+rename &&
	sed -e "/^g /s/.*/g : changed line/" <A >B &&
	rm A &&
	git update-index --add B &&
	git commit -q -a -m "changed and renamed" &&

	git checkout main

[main (root-commit) 7bbb60a] initial has A and M
 Author: A U Thor <author@example.com>
 2 files changed, 30 insertions(+)
 create mode 100644 A
 create mode 100644 M
[main a533371] main updates A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'yellow'
[yellow 1f86866] yellow removes M
 Author: A U Thor <author@example.com>
 1 file changed, 15 deletions(-)
 delete mode 100644 M
Switched to branch 'white'
[white 72f28f0] white renames A->B, M->N
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename A => B (93%)
 rename M => N (93%)
Switched to branch 'red'
[red 9020b53] red renames A->B, M->N
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename A => B (93%)
 rename M => N (93%)
Switched to branch 'blue'
[blue b706750] blue renames A->C, M->N
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename A => C (93%)
 rename M => N (93%)
Switched to branch 'change'
Switched to branch 'change+rename'
Switched to branch 'main'
ok 1 - setup

expecting success of 6402.2 'pull renaming branch into unrenaming one': 
	git show-branch &&
	test_expect_code 1 git pull --no-rebase . white &&
	git ls-files -s &&
	test_stdout_line_count = 3 git ls-files -u B &&
	test_stdout_line_count = 1 git ls-files -s N &&
	sed -ne "/^g/{
	p
	q
	}" B | grep main &&
	git diff --exit-code white N

! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   * [main] main updates A
    ! [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   *    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
+++*+++ [yellow^] initial has A and M
From .
 * branch            white      -> FETCH_HEAD
Auto-merging B
CONFLICT (content): Merge conflict in B
Automatic merge failed; fix conflicts and then commit the result.
100644 aed72d761b68c20ffce8249a5a0426494098d376 1	B
100644 c66800d1e70e6f0f7285c884b0ccb4bdc1e54800 2	B
100644 2d603156dc5bdf6295c789cac08e3c9942a0b82a 3	B
100644 ba41fb96393979b22691106b06bf5231eab57b85 0	N
g : main changes a line
ok 2 - pull renaming branch into unrenaming one

expecting success of 6402.3 'pull renaming branch into another renaming one': 
	rm -f B &&
	git reset --hard &&
	git checkout red &&
	test_expect_code 1 git pull --no-rebase . white &&
	test_stdout_line_count = 3 git ls-files -u B &&
	test_stdout_line_count = 1 git ls-files -s N &&
	sed -ne "/^g/{
	p
	q
	}" B | grep red &&
	git diff --exit-code white N

HEAD is now at a533371 main updates A
Switched to branch 'red'
From .
 * branch            white      -> FETCH_HEAD
Auto-merging B
CONFLICT (content): Merge conflict in B
Automatic merge failed; fix conflicts and then commit the result.
g : red changes a line
ok 3 - pull renaming branch into another renaming one

expecting success of 6402.4 'pull unrenaming branch into renaming one': 
	git reset --hard &&
	git show-branch &&
	test_expect_code 1 git pull --no-rebase . main &&
	test_stdout_line_count = 3 git ls-files -u B &&
	test_stdout_line_count = 1 git ls-files -s N &&
	sed -ne "/^g/{
	p
	q
	}" B | grep red &&
	git diff --exit-code white N

HEAD is now at 9020b53 red renames A->B, M->N
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   ! [main] main updates A
    * [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    *   [red] red renames A->B, M->N
   +    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
++++*++ [yellow^] initial has A and M
From .
 * branch            main       -> FETCH_HEAD
Auto-merging B
CONFLICT (content): Merge conflict in B
Automatic merge failed; fix conflicts and then commit the result.
g : red changes a line
ok 4 - pull unrenaming branch into renaming one

expecting success of 6402.5 'pull conflicting renames': 
	git reset --hard &&
	git show-branch &&
	test_expect_code 1 git pull --no-rebase . blue &&
	test_stdout_line_count = 1 git ls-files -u A &&
	test_stdout_line_count = 1 git ls-files -u B &&
	test_stdout_line_count = 1 git ls-files -u C &&
	test_stdout_line_count = 1 git ls-files -s N &&
	sed -ne "/^g/{
	p
	q
	}" B | grep red &&
	git diff --exit-code white N

HEAD is now at 9020b53 red renames A->B, M->N
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   ! [main] main updates A
    * [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    *   [red] red renames A->B, M->N
   +    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
++++*++ [yellow^] initial has A and M
From .
 * branch            blue       -> FETCH_HEAD
Auto-merging A
CONFLICT (rename/rename): A renamed to B in HEAD and to C in b706750f611415f609730a3078d3ca7a6942b4f1.
Automatic merge failed; fix conflicts and then commit the result.
g : red changes a line
ok 5 - pull conflicting renames

expecting success of 6402.6 'interference with untracked working tree file': 
	git reset --hard &&
	git show-branch &&
	echo >A this file should not matter &&
	test_expect_code 1 git pull --no-rebase . white &&
	test_path_is_file A

HEAD is now at 9020b53 red renames A->B, M->N
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   ! [main] main updates A
    * [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    *   [red] red renames A->B, M->N
   +    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
++++*++ [yellow^] initial has A and M
From .
 * branch            white      -> FETCH_HEAD
Auto-merging B
CONFLICT (content): Merge conflict in B
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - interference with untracked working tree file

expecting success of 6402.7 'interference with untracked working tree file': 
	git reset --hard &&
	git checkout white &&
	git show-branch &&
	rm -f A &&
	echo >A this file should not matter &&
	test_expect_code 1 git pull --no-rebase . red &&
	test_path_is_file A

HEAD is now at 9020b53 red renames A->B, M->N
Switched to branch 'white'
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   ! [main] main updates A
    ! [red] red renames A->B, M->N
     * [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     *  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   +    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
+++++*+ [yellow^] initial has A and M
From .
 * branch            red        -> FETCH_HEAD
Auto-merging B
CONFLICT (content): Merge conflict in B
Automatic merge failed; fix conflicts and then commit the result.
ok 7 - interference with untracked working tree file

expecting success of 6402.8 'interference with untracked working tree file': 
	git reset --hard &&
	rm -f A M &&
	git checkout -f main &&
	git tag -f anchor &&
	git show-branch &&
	git pull --no-rebase . yellow &&
	test_path_is_missing M &&
	git reset --hard anchor

HEAD is now at 72f28f0 white renames A->B, M->N
Switched to branch 'main'
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   * [main] main updates A
    ! [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   *    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
+++*+++ [yellow^] initial has A and M
From .
 * branch            yellow     -> FETCH_HEAD
Merge made by the 'ort' strategy.
 M | 15 ---------------
 1 file changed, 15 deletions(-)
 delete mode 100644 M
HEAD is now at a533371 main updates A
ok 8 - interference with untracked working tree file

expecting success of 6402.9 'updated working tree file should prevent the merge': 
	git reset --hard &&
	rm -f A M &&
	git checkout -f main &&
	git tag -f anchor &&
	git show-branch &&
	echo >>M one line addition &&
	cat M >M.saved &&
	test_expect_code 128 git pull . yellow &&
	test_cmp M M.saved &&
	rm -f M.saved

HEAD is now at a533371 main updates A
Already on 'main'
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   * [main] main updates A
    ! [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   *    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
+++*+++ [yellow^] initial has A and M
From .
 * branch            yellow     -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
ok 9 - updated working tree file should prevent the merge

expecting success of 6402.10 'updated working tree file should prevent the merge': 
	git reset --hard &&
	rm -f A M &&
	git checkout -f main &&
	git tag -f anchor &&
	git show-branch &&
	echo >>M one line addition &&
	cat M >M.saved &&
	git update-index M &&
	test_expect_code 2 git pull --no-rebase . yellow &&
	test_cmp M M.saved &&
	rm -f M.saved

HEAD is now at a533371 main updates A
Already on 'main'
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   * [main] main updates A
    ! [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      ! [yellow] yellow removes M
-------
      + [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   *    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
+++*+++ [yellow^] initial has A and M
From .
 * branch            yellow     -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
  M
Merge with strategy ort failed.
ok 10 - updated working tree file should prevent the merge

expecting success of 6402.11 'interference with untracked working tree file': 
	git reset --hard &&
	rm -f A M &&
	git checkout -f yellow &&
	git tag -f anchor &&
	git show-branch &&
	echo >M this file should not matter &&
	git pull --no-rebase . main &&
	test_path_is_file M &&
	! {
		git ls-files -s |
		grep M
	} &&
	git reset --hard anchor

HEAD is now at a533371 main updates A
Switched to branch 'yellow'
Updated tag 'anchor' (was a533371)
! [blue] blue renames A->C, M->N
 ! [change] changed
  ! [change+rename] changed and renamed
   ! [main] main updates A
    ! [red] red renames A->B, M->N
     ! [white] white renames A->B, M->N
      * [yellow] yellow removes M
-------
      * [yellow] yellow removes M
     +  [white] white renames A->B, M->N
    +   [red] red renames A->B, M->N
   +    [main] main updates A
  +     [change+rename] changed and renamed
 +      [change] changed
+       [blue] blue renames A->C, M->N
++++++* [yellow^] initial has A and M
From .
 * branch            main       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 A | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 1f86866 yellow removes M
ok 11 - interference with untracked working tree file

expecting success of 6402.12 'merge of identical changes in a renamed file': 
	rm -f A M N &&
	git reset --hard &&
	git checkout change+rename &&

	test-tool chmtime --get -3600 B >old-mtime &&
	GIT_MERGE_VERBOSITY=3 git merge change >out &&

	test-tool chmtime --get B >new-mtime &&
	test_cmp old-mtime new-mtime &&

	git reset --hard HEAD^ &&
	git checkout change &&

	# A will be renamed to B; we check mtimes and file presence
	test_path_is_missing B &&
	test-tool chmtime --get -3600 A >old-mtime &&
	GIT_MERGE_VERBOSITY=3 git merge change+rename >out &&

	test_path_is_missing A &&
	test-tool chmtime --get B >new-mtime &&
	test $(cat old-mtime) -lt $(cat new-mtime)

HEAD is now at 1f86866 yellow removes M
Switched to branch 'change+rename'
HEAD is now at df47076 changed and renamed
Switched to branch 'change'
ok 12 - merge of identical changes in a renamed file

expecting success of 6402.13 'setup for rename + d/f conflicts': 
	git reset --hard &&
	git checkout --orphan dir-in-way &&
	git rm -rf . &&
	git clean -fdqx &&

	mkdir sub &&
	mkdir dir &&
	printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" >sub/file &&
	echo foo >dir/file-in-the-way &&
	git add -A &&
	git commit -m "Common commit" &&

	echo 11 >>sub/file &&
	echo more >>dir/file-in-the-way &&
	git add -u &&
	git commit -m "Commit to merge, with dir in the way" &&

	git checkout -b dir-not-in-way &&
	git reset --soft HEAD^ &&
	git rm -rf dir &&
	git commit -m "Commit to merge, with dir removed" -- dir sub/file &&

	git checkout -b renamed-file-has-no-conflicts dir-in-way~1 &&
	git rm -rf dir &&
	git rm sub/file &&
	printf "1\n2\n3\n4\n5555\n6\n7\n8\n9\n10\n" >dir &&
	git add dir &&
	git commit -m "Independent change" &&

	git checkout -b renamed-file-has-conflicts dir-in-way~1 &&
	git rm -rf dir &&
	git mv sub/file dir &&
	echo 12 >>dir &&
	git add dir &&
	git commit -m "Conflicting change"

HEAD is now at 5fdefee Merge branch 'change+rename' into change
Switched to a new branch 'dir-in-way'
rm 'B'
rm 'M'
[dir-in-way (root-commit) 90faa3c] Common commit
 Author: A U Thor <author@example.com>
 2 files changed, 11 insertions(+)
 create mode 100644 dir/file-in-the-way
 create mode 100644 sub/file
[dir-in-way cd90736] Commit to merge, with dir in the way
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to a new branch 'dir-not-in-way'
rm 'dir/file-in-the-way'
[dir-not-in-way a8845d3] Commit to merge, with dir removed
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 dir/file-in-the-way
Switched to a new branch 'renamed-file-has-no-conflicts'
rm 'dir/file-in-the-way'
rm 'sub/file'
[renamed-file-has-no-conflicts 8c7fff4] Independent change
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 2 deletions(-)
 rename sub/file => dir (79%)
 delete mode 100644 dir/file-in-the-way
Switched to a new branch 'renamed-file-has-conflicts'
rm 'dir/file-in-the-way'
[renamed-file-has-conflicts 53f2d73] Conflicting change
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename sub/file => dir (87%)
 delete mode 100644 dir/file-in-the-way
ok 13 - setup for rename + d/f conflicts

expecting success of 6402.14 'Rename+D/F conflict; renamed file merges + dir not in way': 
	git reset --hard &&
	git checkout -q renamed-file-has-no-conflicts^0 &&

	git merge --strategy=recursive dir-not-in-way &&

	git diff --quiet &&
	test_path_is_file dir &&
	test_write_lines 1 2 3 4 5555 6 7 8 9 10 11 >expected &&
	test_cmp expected dir

HEAD is now at 53f2d73 Conflicting change
Auto-merging dir
Merge made by the 'ort' strategy.
 dir | 1 +
 1 file changed, 1 insertion(+)
ok 14 - Rename+D/F conflict; renamed file merges + dir not in way

expecting success of 6402.15 'Rename+D/F conflict; renamed file merges but dir in way': 
	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q renamed-file-has-no-conflicts^0 &&
	test_must_fail git merge --strategy=recursive dir-in-way >output &&

	test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&
	test_i18ngrep "Auto-merging dir" output &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_i18ngrep "moving it to dir~HEAD instead" output
	else
		test_i18ngrep "Adding as dir~HEAD instead" output
	fi &&

	test_stdout_line_count = 3 git ls-files -u &&
	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&

	test_must_fail git diff --quiet &&
	test_must_fail git diff --cached --quiet &&

	test_path_is_file dir/file-in-the-way &&
	test_path_is_file dir~HEAD &&
	test_cmp expected dir~HEAD

HEAD is now at 7b1d99c Merge branch 'dir-not-in-way' into HEAD
CONFLICT (modify/delete): dir/file-in-the-way deleted in HEAD and modified in dir-in-way.  Version dir-in-way of dir/file-in-the-way left in tree.
Auto-merging dir~HEAD
CONFLICT (file/directory): directory in the way of dir from HEAD; moving it to dir~HEAD instead.
ok 15 - Rename+D/F conflict; renamed file merges but dir in way

expecting success of 6402.16 'Same as previous, but merged other way': 
	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q dir-in-way^0 &&
	test_must_fail git merge --strategy=recursive renamed-file-has-no-conflicts >output 2>errors &&

	! grep "error: refusing to lose untracked file at" errors &&
	test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&
	test_i18ngrep "Auto-merging dir" output &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_i18ngrep "moving it to dir~renamed-file-has-no-conflicts instead" output
	else
		test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output
	fi &&

	test_stdout_line_count = 3 git ls-files -u &&
	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&

	test_must_fail git diff --quiet &&
	test_must_fail git diff --cached --quiet &&

	test_path_is_file dir/file-in-the-way &&
	test_path_is_file dir~renamed-file-has-no-conflicts &&
	test_cmp expected dir~renamed-file-has-no-conflicts

HEAD is now at 8c7fff4 Independent change
CONFLICT (modify/delete): dir/file-in-the-way deleted in renamed-file-has-no-conflicts and modified in HEAD.  Version HEAD of dir/file-in-the-way left in tree.
Auto-merging dir~renamed-file-has-no-conflicts
CONFLICT (file/directory): directory in the way of dir from renamed-file-has-no-conflicts; moving it to dir~renamed-file-has-no-conflicts instead.
ok 16 - Same as previous, but merged other way

expecting success of 6402.17 'Rename+D/F conflict; renamed file cannot merge, dir not in way': 
	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q renamed-file-has-conflicts^0 &&
	test_must_fail git merge --strategy=recursive dir-not-in-way &&

	test_stdout_line_count = 3 git ls-files -u &&
	test_stdout_line_count = 3 git ls-files -u dir &&

	test_must_fail git diff --quiet &&
	test_must_fail git diff --cached --quiet &&

	test_path_is_file dir &&
	cat >expected <<-\EOF &&
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	<<<<<<< HEAD:dir
	12
	=======
	11
	>>>>>>> dir-not-in-way:sub/file
	EOF
	test_cmp expected dir

HEAD is now at cd90736 Commit to merge, with dir in the way
Auto-merging dir
CONFLICT (content): Merge conflict in dir
Automatic merge failed; fix conflicts and then commit the result.
ok 17 - Rename+D/F conflict; renamed file cannot merge, dir not in way

expecting success of 6402.18 'Rename+D/F conflict; renamed file cannot merge and dir in the way': 
	modify s/dir-not-in-way/dir-in-way/ expected &&

	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q renamed-file-has-conflicts^0 &&
	test_must_fail git merge --strategy=recursive dir-in-way &&

	test_stdout_line_count = 5 git ls-files -u &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 3 git ls-files -u dir~HEAD
	else
		git ls-files -u dir >out &&
		test 3 -eq $(grep -v file-in-the-way out | wc -l) &&
		rm -f out
	fi &&
	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&

	test_must_fail git diff --quiet &&
	test_must_fail git diff --cached --quiet &&

	test_path_is_file dir/file-in-the-way &&
	test_path_is_file dir~HEAD &&
	test_cmp expected dir~HEAD

HEAD is now at 53f2d73 Conflicting change
CONFLICT (modify/delete): dir/file-in-the-way deleted in HEAD and modified in dir-in-way.  Version dir-in-way of dir/file-in-the-way left in tree.
CONFLICT (file/directory): directory in the way of dir from HEAD; moving it to dir~HEAD instead.
Auto-merging dir~HEAD
CONFLICT (content): Merge conflict in dir~HEAD
Automatic merge failed; fix conflicts and then commit the result.
ok 18 - Rename+D/F conflict; renamed file cannot merge and dir in the way

expecting success of 6402.19 'Same as previous, but merged other way': 
	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q dir-in-way^0 &&
	test_must_fail git merge --strategy=recursive renamed-file-has-conflicts &&

	test_stdout_line_count = 5 git ls-files -u &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 3 git ls-files -u dir~renamed-file-has-conflicts
	else
		git ls-files -u dir >out &&
		test 3 -eq $(grep -v file-in-the-way out | wc -l) &&
		rm -f out
	fi &&
	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&

	test_must_fail git diff --quiet &&
	test_must_fail git diff --cached --quiet &&

	test_path_is_file dir/file-in-the-way &&
	test_path_is_file dir~renamed-file-has-conflicts &&
	cat >expected <<-\EOF &&
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	<<<<<<< HEAD:sub/file
	11
	=======
	12
	>>>>>>> renamed-file-has-conflicts:dir
	EOF
	test_cmp expected dir~renamed-file-has-conflicts

HEAD is now at 53f2d73 Conflicting change
CONFLICT (modify/delete): dir/file-in-the-way deleted in renamed-file-has-conflicts and modified in HEAD.  Version HEAD of dir/file-in-the-way left in tree.
CONFLICT (file/directory): directory in the way of dir from renamed-file-has-conflicts; moving it to dir~renamed-file-has-conflicts instead.
Auto-merging dir~renamed-file-has-conflicts
CONFLICT (content): Merge conflict in dir~renamed-file-has-conflicts
Automatic merge failed; fix conflicts and then commit the result.
ok 19 - Same as previous, but merged other way

expecting success of 6402.20 'setup both rename source and destination involved in D/F conflict': 
	git reset --hard &&
	git checkout --orphan rename-dest &&
	git rm -rf . &&
	git clean -fdqx &&

	mkdir one &&
	echo stuff >one/file &&
	git add -A &&
	git commit -m "Common commit" &&

	git mv one/file destdir &&
	git commit -m "Renamed to destdir" &&

	git checkout -b source-conflict HEAD~1 &&
	git rm -rf one &&
	mkdir destdir &&
	touch one destdir/foo &&
	git add -A &&
	git commit -m "Conflicts in the way"

HEAD is now at cd90736 Commit to merge, with dir in the way
Switched to a new branch 'rename-dest'
rm 'dir/file-in-the-way'
rm 'sub/file'
[rename-dest (root-commit) 3156d6d] Common commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one/file
[rename-dest 4fde1d0] Renamed to destdir
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename one/file => destdir (100%)
Switched to a new branch 'source-conflict'
rm 'one/file'
[source-conflict 58f64f9] Conflicts in the way
 Author: A U Thor <author@example.com>
 3 files changed, 1 deletion(-)
 create mode 100644 destdir/foo
 create mode 100644 one
 delete mode 100644 one/file
ok 20 - setup both rename source and destination involved in D/F conflict

expecting success of 6402.21 'both rename source and destination involved in D/F conflict': 
	git reset --hard &&
	rm -rf dir~* &&
	git checkout -q rename-dest^0 &&
	test_must_fail git merge --strategy=recursive source-conflict &&

	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 2 git ls-files -u
	else
		test_stdout_line_count = 1 git ls-files -u
	fi &&

	test_must_fail git diff --quiet &&

	test_path_is_file destdir/foo &&
	test_path_is_file one &&
	test_path_is_file destdir~HEAD &&
	test "stuff" = "$(cat destdir~HEAD)"

HEAD is now at 58f64f9 Conflicts in the way
CONFLICT (rename/delete): one/file renamed to destdir in HEAD, but deleted in source-conflict.
CONFLICT (file/directory): directory in the way of destdir from HEAD; moving it to destdir~HEAD instead.
Automatic merge failed; fix conflicts and then commit the result.
ok 21 - both rename source and destination involved in D/F conflict

expecting success of 6402.22 'setup pair rename to parent of other (D/F conflicts)': 
	git reset --hard &&
	git checkout --orphan rename-two &&
	git rm -rf . &&
	git clean -fdqx &&

	mkdir one &&
	mkdir two &&
	echo stuff >one/file &&
	echo other >two/file &&
	git add -A &&
	git commit -m "Common commit" &&

	git rm -rf one &&
	git mv two/file one &&
	git commit -m "Rename two/file -> one" &&

	git checkout -b rename-one HEAD~1 &&
	git rm -rf two &&
	git mv one/file two &&
	rm -r one &&
	git commit -m "Rename one/file -> two"

HEAD is now at 4fde1d0 Renamed to destdir
Switched to a new branch 'rename-two'
rm 'destdir'
[rename-two (root-commit) 0765ccc] Common commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 one/file
 create mode 100644 two/file
rm 'one/file'
[rename-two c518e9e] Rename two/file -> one
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename two/file => one (100%)
 delete mode 100644 one/file
Switched to a new branch 'rename-one'
rm 'two/file'
[rename-one a4e3198] Rename one/file -> two
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename one/file => two (100%)
 delete mode 100644 two/file
ok 22 - setup pair rename to parent of other (D/F conflicts)

expecting success of 6402.23 'pair rename to parent of other (D/F conflicts) w/ untracked dir': 
		git checkout -q rename-one^0 &&
		mkdir one &&
		test_must_fail git merge --strategy=recursive rename-two &&

		test_stdout_line_count = 4 git ls-files -u &&
		test_stdout_line_count = 2 git ls-files -u one &&
		test_stdout_line_count = 2 git ls-files -u two &&

		test_must_fail git diff --quiet &&

		test 3 -eq $(find . | grep -v .git | wc -l) &&

		test_path_is_file one &&
		test_path_is_file two &&
		test "other" = $(cat one) &&
		test "stuff" = $(cat two)
	
CONFLICT (rename/delete): two/file renamed to one in rename-two, but deleted in HEAD.
CONFLICT (rename/delete): one/file renamed to two in HEAD, but deleted in rename-two.
Automatic merge failed; fix conflicts and then commit the result.
ok 23 - pair rename to parent of other (D/F conflicts) w/ untracked dir

expecting success of 6402.24 'pair rename to parent of other (D/F conflicts) w/ clean start': 
	git reset --hard &&
	git clean -fdqx &&
	test_must_fail git merge --strategy=recursive rename-two &&

	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 4 git ls-files -u &&
		test_stdout_line_count = 2 git ls-files -u one &&
		test_stdout_line_count = 2 git ls-files -u two
	else
		test_stdout_line_count = 2 git ls-files -u &&
		test_stdout_line_count = 1 git ls-files -u one &&
		test_stdout_line_count = 1 git ls-files -u two
	fi &&

	test_must_fail git diff --quiet &&

	test 3 -eq $(find . | grep -v .git | wc -l) &&

	test_path_is_file one &&
	test_path_is_file two &&
	test "other" = $(cat one) &&
	test "stuff" = $(cat two)

HEAD is now at a4e3198 Rename one/file -> two
CONFLICT (rename/delete): two/file renamed to one in rename-two, but deleted in HEAD.
CONFLICT (rename/delete): one/file renamed to two in HEAD, but deleted in rename-two.
Automatic merge failed; fix conflicts and then commit the result.
ok 24 - pair rename to parent of other (D/F conflicts) w/ clean start

expecting success of 6402.25 'setup rename of one file to two, with directories in the way': 
	git reset --hard &&
	git checkout --orphan first-rename &&
	git rm -rf . &&
	git clean -fdqx &&

	echo stuff >original &&
	git add -A &&
	git commit -m "Common commit" &&

	mkdir two &&
	>two/file &&
	git add two/file &&
	git mv original one &&
	git commit -m "Put two/file in the way, rename to one" &&

	git checkout -b second-rename HEAD~1 &&
	mkdir one &&
	>one/file &&
	git add one/file &&
	git mv original two &&
	git commit -m "Put one/file in the way, rename to two"

HEAD is now at a4e3198 Rename one/file -> two
Switched to a new branch 'first-rename'
rm 'two'
[first-rename (root-commit) 3ec06ba] Common commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 original
[first-rename 1d86576] Put two/file in the way, rename to one
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename original => one (100%)
 create mode 100644 two/file
Switched to a new branch 'second-rename'
[second-rename 35e7177] Put one/file in the way, rename to two
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 one/file
 rename original => two (100%)
ok 25 - setup rename of one file to two, with directories in the way

expecting success of 6402.26 'check handling of differently renamed file with D/F conflicts': 
	git checkout -q first-rename^0 &&
	test_must_fail git merge --strategy=recursive second-rename &&

	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_stdout_line_count = 5 git ls-files -s &&
		test_stdout_line_count = 3 git ls-files -u &&
		test_stdout_line_count = 1 git ls-files -u one~HEAD &&
		test_stdout_line_count = 1 git ls-files -u two~second-rename &&
		test_stdout_line_count = 1 git ls-files -u original &&
		test_stdout_line_count = 0 git ls-files -o
	else
		test_stdout_line_count = 5 git ls-files -s &&
		test_stdout_line_count = 3 git ls-files -u &&
		test_stdout_line_count = 1 git ls-files -u one &&
		test_stdout_line_count = 1 git ls-files -u two &&
		test_stdout_line_count = 1 git ls-files -u original &&
		test_stdout_line_count = 2 git ls-files -o
	fi &&

	test_path_is_file one/file &&
	test_path_is_file two/file &&
	test_path_is_file one~HEAD &&
	test_path_is_file two~second-rename &&
	test_path_is_missing original

CONFLICT (file/directory): directory in the way of one from HEAD; moving it to one~HEAD instead.
CONFLICT (rename/rename): original renamed to one in HEAD and to two in second-rename.
CONFLICT (file/directory): directory in the way of two from second-rename; moving it to two~second-rename instead.
Automatic merge failed; fix conflicts and then commit the result.
ok 26 - check handling of differently renamed file with D/F conflicts

expecting success of 6402.27 'setup rename one file to two; directories moving out of the way': 
	git reset --hard &&
	git checkout --orphan first-rename-redo &&
	git rm -rf . &&
	git clean -fdqx &&

	echo stuff >original &&
	mkdir one two &&
	touch one/file two/file &&
	git add -A &&
	git commit -m "Common commit" &&

	git rm -rf one &&
	git mv original one &&
	git commit -m "Rename to one" &&

	git checkout -b second-rename-redo HEAD~1 &&
	git rm -rf two &&
	git mv original two &&
	git commit -m "Rename to two"

HEAD is now at 1d86576 Put two/file in the way, rename to one
Switched to a new branch 'first-rename-redo'
rm 'one'
rm 'two/file'
[first-rename-redo (root-commit) 7f6a382] Common commit
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 create mode 100644 one/file
 create mode 100644 original
 create mode 100644 two/file
rm 'one/file'
[first-rename-redo 5a00903] Rename to one
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename original => one (100%)
 delete mode 100644 one/file
Switched to a new branch 'second-rename-redo'
rm 'two/file'
[second-rename-redo 28aa9be] Rename to two
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename original => two (100%)
 delete mode 100644 two/file
ok 27 - setup rename one file to two; directories moving out of the way

expecting success of 6402.28 'check handling of differently renamed file with D/F conflicts': 
	git checkout -q first-rename-redo^0 &&
	test_must_fail git merge --strategy=recursive second-rename-redo &&

	test_stdout_line_count = 3 git ls-files -u &&
	test_stdout_line_count = 1 git ls-files -u one &&
	test_stdout_line_count = 1 git ls-files -u two &&
	test_stdout_line_count = 1 git ls-files -u original &&
	test_stdout_line_count = 0 git ls-files -o &&

	test_path_is_file one &&
	test_path_is_file two &&
	test_path_is_missing original

CONFLICT (rename/rename): original renamed to one in HEAD and to two in second-rename-redo.
Automatic merge failed; fix conflicts and then commit the result.
ok 28 - check handling of differently renamed file with D/F conflicts

expecting success of 6402.29 'setup avoid unnecessary update, normal rename': 
	git reset --hard &&
	git checkout --orphan avoid-unnecessary-update-1 &&
	git rm -rf . &&
	git clean -fdqx &&

	printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" >original &&
	git add -A &&
	git commit -m "Common commit" &&

	git mv original rename &&
	echo 11 >>rename &&
	git add -u &&
	git commit -m "Renamed and modified" &&

	git checkout -b merge-branch-1 HEAD~1 &&
	echo "random content" >random-file &&
	git add -A &&
	git commit -m "Random, unrelated changes"

HEAD is now at 5a00903 Rename to one
Switched to a new branch 'avoid-unnecessary-update-1'
rm 'one'
rm 'two/file'
[avoid-unnecessary-update-1 (root-commit) 2079f93] Common commit
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 original
[avoid-unnecessary-update-1 fb0186c] Renamed and modified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename original => rename (87%)
Switched to a new branch 'merge-branch-1'
[merge-branch-1 65bbd67] Random, unrelated changes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 random-file
ok 29 - setup avoid unnecessary update, normal rename

expecting success of 6402.30 'avoid unnecessary update, normal rename': 
	git checkout -q avoid-unnecessary-update-1^0 &&
	test-tool chmtime --get -3600 rename >expect &&
	git merge merge-branch-1 &&
	test-tool chmtime --get rename >actual &&
	test_cmp expect actual # "rename" should have stayed intact

Merge made by the 'ort' strategy.
 random-file | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 random-file
ok 30 - avoid unnecessary update, normal rename

expecting success of 6402.31 'setup to test avoiding unnecessary update, with D/F conflict': 
	git reset --hard &&
	git checkout --orphan avoid-unnecessary-update-2 &&
	git rm -rf . &&
	git clean -fdqx &&

	mkdir df &&
	printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" >df/file &&
	git add -A &&
	git commit -m "Common commit" &&

	git mv df/file temp &&
	rm -rf df &&
	git mv temp df &&
	echo 11 >>df &&
	git add -u &&
	git commit -m "Renamed and modified" &&

	git checkout -b merge-branch-2 HEAD~1 &&
	>unrelated-change &&
	git add unrelated-change &&
	git commit -m "Only unrelated changes"

HEAD is now at 284061b Merge branch 'merge-branch-1' into HEAD
Switched to a new branch 'avoid-unnecessary-update-2'
rm 'random-file'
rm 'rename'
[avoid-unnecessary-update-2 (root-commit) e635445] Common commit
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 df/file
[avoid-unnecessary-update-2 fb8c6d0] Renamed and modified
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename df/file => df (87%)
Switched to a new branch 'merge-branch-2'
[merge-branch-2 0787898] Only unrelated changes
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 unrelated-change
ok 31 - setup to test avoiding unnecessary update, with D/F conflict

expecting success of 6402.32 'avoid unnecessary update, with D/F conflict': 
	git checkout -q avoid-unnecessary-update-2^0 &&
	test-tool chmtime --get -3600 df >expect &&
	git merge merge-branch-2 &&
	test-tool chmtime --get df >actual &&
	test_cmp expect actual # "df" should have stayed intact

Merge made by the 'ort' strategy.
 unrelated-change | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 unrelated-change
ok 32 - avoid unnecessary update, with D/F conflict

expecting success of 6402.33 'setup avoid unnecessary update, dir->(file,nothing)': 
	git rm -rf . &&
	git clean -fdqx &&
	rm -rf .git &&
	git init &&

	>irrelevant &&
	mkdir df &&
	>df/file &&
	git add -A &&
	git commit -mA &&

	git checkout -b side &&
	git rm -rf df &&
	git commit -mB &&

	git checkout main &&
	git rm -rf df &&
	echo bla >df &&
	git add -A &&
	git commit -m "Add a newfile"

rm 'df'
rm 'unrelated-change'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
[main (root-commit) 0238749] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 df/file
 create mode 100644 irrelevant
Switched to a new branch 'side'
rm 'df/file'
[side 32a928c] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 df/file
Switched to branch 'main'
rm 'df/file'
[main 90ac8b3] Add a newfile
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 df
 delete mode 100644 df/file
ok 33 - setup avoid unnecessary update, dir->(file,nothing)

expecting success of 6402.34 'avoid unnecessary update, dir->(file,nothing)': 
	git checkout -q main^0 &&
	test-tool chmtime --get -3600 df >expect &&
	git merge side &&
	test-tool chmtime --get df >actual &&
	test_cmp expect actual # "df" should have stayed intact

Merge made by the 'ort' strategy.
ok 34 - avoid unnecessary update, dir->(file,nothing)

expecting success of 6402.35 'setup avoid unnecessary update, modify/delete': 
	git rm -rf . &&
	git clean -fdqx &&
	rm -rf .git &&
	git init &&

	>irrelevant &&
	>file &&
	git add -A &&
	git commit -mA &&

	git checkout -b side &&
	git rm -f file &&
	git commit -m "Delete file" &&

	git checkout main &&
	echo bla >file &&
	git add -A &&
	git commit -m "Modify file"

rm 'df'
rm 'irrelevant'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
[main (root-commit) bec55b4] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
 create mode 100644 irrelevant
Switched to a new branch 'side'
rm 'file'
[side d8f9927] Delete file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 file
Switched to branch 'main'
[main 27c30f6] Modify file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 35 - setup avoid unnecessary update, modify/delete

expecting success of 6402.36 'avoid unnecessary update, modify/delete': 
	git checkout -q main^0 &&
	test-tool chmtime --get -3600 file >expect &&
	test_must_fail git merge side &&
	test-tool chmtime --get file >actual &&
	test_cmp expect actual # "file" should have stayed intact

CONFLICT (modify/delete): file deleted in side and modified in HEAD.  Version HEAD of file left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 36 - avoid unnecessary update, modify/delete

expecting success of 6402.37 'setup avoid unnecessary update, rename/add-dest': 
	git rm -rf . &&
	git clean -fdqx &&
	rm -rf .git &&
	git init &&

	printf "1\n2\n3\n4\n5\n6\n7\n8\n" >file &&
	git add -A &&
	git commit -mA &&

	git checkout -b side &&
	cp file newfile &&
	git add -A &&
	git commit -m "Add file copy" &&

	git checkout main &&
	git mv file newfile &&
	git commit -m "Rename file"

rm 'file'
rm 'file'
rm 'irrelevant'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
[main (root-commit) 61e6524] A
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 file
Switched to a new branch 'side'
[side 8c16f55] Add file copy
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 newfile
Switched to branch 'main'
[main b01e819] Rename file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => newfile (100%)
ok 37 - setup avoid unnecessary update, rename/add-dest

expecting success of 6402.38 'avoid unnecessary update, rename/add-dest': 
	git checkout -q main^0 &&
	test-tool chmtime --get -3600 newfile >expect &&
	git merge side &&
	test-tool chmtime --get newfile >actual &&
	test_cmp expect actual # "file" should have stayed intact

Merge made by the 'ort' strategy.
ok 38 - avoid unnecessary update, rename/add-dest

expecting success of 6402.39 'setup merge of rename + small change': 
	git reset --hard &&
	git checkout --orphan rename-plus-small-change &&
	git rm -rf . &&
	git clean -fdqx &&

	echo ORIGINAL >file &&
	git add file &&

	test_tick &&
	git commit -m Initial &&
	git checkout -b rename_branch &&
	git mv file renamed_file &&
	git commit -m Rename &&
	git checkout rename-plus-small-change &&
	echo NEW-VERSION >file &&
	git commit -a -m Reformat

HEAD is now at 826dab9 Merge branch 'side' into HEAD
Switched to a new branch 'rename-plus-small-change'
rm 'newfile'
[rename-plus-small-change (root-commit) e44eadc] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'rename_branch'
[rename_branch f706812] Rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => renamed_file (100%)
Switched to branch 'rename-plus-small-change'
[rename-plus-small-change 068ab66] Reformat
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 39 - setup merge of rename + small change

expecting success of 6402.40 'merge rename + small change': 
	git merge rename_branch &&

	test_stdout_line_count = 1 git ls-files -s &&
	test_stdout_line_count = 0 git ls-files -o &&
	newhash=$(git rev-parse HEAD:renamed_file) &&
	oldhash=$(git rev-parse HEAD~1:file) &&
	test $newhash = $oldhash

Merge made by the 'ort' strategy.
 file => renamed_file | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => renamed_file (100%)
ok 40 - merge rename + small change

expecting success of 6402.41 'setup for use of extended merge markers': 
	git rm -rf . &&
	git clean -fdqx &&
	rm -rf .git &&
	git init &&

	printf "1\n2\n3\n4\n5\n6\n7\n8\n" >original_file &&
	git add original_file &&
	git commit -mA &&

	git checkout -b rename &&
	echo 9 >>original_file &&
	git add original_file &&
	git mv original_file renamed_file &&
	git commit -mB &&

	git checkout main &&
	echo 8.5 >>original_file &&
	git add original_file &&
	git commit -mC

rm 'renamed_file'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
[main (root-commit) 4847e8a] A
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 original_file
Switched to a new branch 'rename'
[rename e9adddb] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename original_file => renamed_file (88%)
Switched to branch 'main'
[main 0487bb6] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 41 - setup for use of extended merge markers

expecting success of 6402.42 'merge main into rename has correct extended markers': 
	git checkout rename^0 &&
	test_must_fail git merge -s recursive main^0 &&

	cat >expected <<-\EOF &&
	1
	2
	3
	4
	5
	6
	7
	8
	<<<<<<< HEAD:renamed_file
	9
	=======
	8.5
	>>>>>>> main^0:original_file
	EOF
	test_cmp expected renamed_file

Note: switching to 'rename^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e9adddb B
Auto-merging renamed_file
CONFLICT (content): Merge conflict in renamed_file
Automatic merge failed; fix conflicts and then commit the result.
ok 42 - merge main into rename has correct extended markers

expecting success of 6402.43 'merge rename into main has correct extended markers': 
	git reset --hard &&
	git checkout main^0 &&
	test_must_fail git merge -s recursive rename^0 &&

	cat >expected <<-\EOF &&
	1
	2
	3
	4
	5
	6
	7
	8
	<<<<<<< HEAD:original_file
	8.5
	=======
	9
	>>>>>>> rename^0:renamed_file
	EOF
	test_cmp expected renamed_file

HEAD is now at e9adddb B
Previous HEAD position was e9adddb B
HEAD is now at 0487bb6 C
Auto-merging renamed_file
CONFLICT (content): Merge conflict in renamed_file
Automatic merge failed; fix conflicts and then commit the result.
ok 43 - merge rename into main has correct extended markers

expecting success of 6402.44 'setup spurious "refusing to lose untracked" message': 
	git rm -rf . &&
	git clean -fdqx &&
	rm -rf .git &&
	git init &&

	> irrelevant_file &&
	printf "1\n2\n3\n4\n5\n6\n7\n8\n" >original_file &&
	git add irrelevant_file original_file &&
	git commit -mA &&

	git checkout -b rename &&
	git mv original_file renamed_file &&
	git commit -mB &&

	git checkout main &&
	git rm original_file &&
	git commit -mC

rm 'renamed_file'
rm 'renamed_file'
rm 'renamed_file'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6402-merge-rename/.git/
[main (root-commit) e476651] A
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 irrelevant_file
 create mode 100644 original_file
Switched to a new branch 'rename'
[rename 951e2d3] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename original_file => renamed_file (100%)
Switched to branch 'main'
rm 'original_file'
[main 52b2874] C
 Author: A U Thor <author@example.com>
 1 file changed, 8 deletions(-)
 delete mode 100644 original_file
ok 44 - setup spurious "refusing to lose untracked" message

expecting success of 6402.45 'no spurious "refusing to lose untracked" message': 
	git checkout main^0 &&
	test_must_fail git merge rename^0 2>errors.txt &&
	! grep "refusing to lose untracked file" errors.txt

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 52b2874 C
CONFLICT (rename/delete): original_file renamed to renamed_file in rename^0, but deleted in HEAD.
Automatic merge failed; fix conflicts and then commit the result.
ok 45 - no spurious "refusing to lose untracked" message

expecting success of 6402.46 'do not follow renames for empty files': 
	git checkout -f -b empty-base &&
	>empty1 &&
	git add empty1 &&
	git commit -m base &&
	echo content >empty1 &&
	git add empty1 &&
	git commit -m fill &&
	git checkout -b empty-topic HEAD^ &&
	git mv empty1 empty2 &&
	git commit -m rename &&
	test_must_fail git merge empty-base &&
	test_must_be_empty empty2

Switched to a new branch 'empty-base'
[empty-base a940ee2] base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty1
[empty-base d42ce4d] fill
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'empty-topic'
[empty-topic ab32619] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename empty1 => empty2 (100%)
CONFLICT (modify/delete): empty1 deleted in HEAD and modified in empty-base.  Version empty-base of empty1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 46 - do not follow renames for empty files

# passed all 46 test(s)
1..46
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6415-merge-dir-to-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6415-merge-dir-to-symlink/.git/
expecting success of 6415.1 'create a commit where dir a/b changed to symlink': 
	mkdir -p a/b/c a/b-2/c &&
	> a/b/c/d &&
	> a/b-2/c/d &&
	> a/x &&
	git add -A &&
	git commit -m base &&
	git tag start &&
	rm -rf a/b &&
	git add -A &&
	test_ln_s_add b-2 a/b &&
	git commit -m "dir to symlink"

[main (root-commit) d2c335b] base
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/b-2/c/d
 create mode 100644 a/b/c/d
 create mode 100644 a/x
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[main 1750beb] dir to symlink
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 a/b
 delete mode 100644 a/b/c/d
ok 1 - create a commit where dir a/b changed to symlink

expecting success of 6415.2 'checkout does not clobber untracked symlink': 
	git checkout HEAD^0 &&
	git reset --hard main &&
	git rm --cached a/b &&
	git commit -m "untracked symlink remains" &&
	test_must_fail git checkout start^0 &&
	git clean -fd    # Do not leave the untracked symlink in the way

Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1750beb dir to symlink
HEAD is now at 1750beb dir to symlink
rm 'a/b'
[detached HEAD 87dcb4b] untracked symlink remains
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 120000 a/b
error: The following untracked working tree files would be overwritten by checkout:
	a/b
Please move or remove them before you switch branches.
Aborting
Removing a/b
ok 2 - checkout does not clobber untracked symlink

expecting success of 6415.3 'a/b-2/c/d is kept when clobbering symlink b': 
	git checkout HEAD^0 &&
	git reset --hard main &&
	git rm --cached a/b &&
	git commit -m "untracked symlink remains" &&
	git checkout -f start^0 &&
	test_path_is_file a/b-2/c/d &&
	git clean -fd    # Do not leave the untracked symlink in the way

HEAD is now at 87dcb4b untracked symlink remains
HEAD is now at 1750beb dir to symlink
rm 'a/b'
[detached HEAD 87dcb4b] untracked symlink remains
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 120000 a/b
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  87dcb4b untracked symlink remains

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 87dcb4b

HEAD is now at d2c335b base
ok 3 - a/b-2/c/d is kept when clobbering symlink b

expecting success of 6415.4 'checkout should not have deleted a/b-2/c/d': 
	git checkout HEAD^0 &&
	git reset --hard main &&
	 git checkout start^0 &&
	 test_path_is_file a/b-2/c/d

HEAD is now at d2c335b base
HEAD is now at 1750beb dir to symlink
Previous HEAD position was 1750beb dir to symlink
HEAD is now at d2c335b base
ok 4 - checkout should not have deleted a/b-2/c/d

expecting success of 6415.5 'setup for merge test': 
	git reset --hard &&
	test_path_is_file a/b-2/c/d &&
	echo x > a/x &&
	git add a/x &&
	git commit -m x &&
	git tag baseline

HEAD is now at d2c335b base
[detached HEAD d35741f] x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 5 - setup for merge test

expecting success of 6415.6 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)': 
	git reset --hard &&
	git checkout baseline^0 &&
	git merge -s resolve main &&
	test_path_is_file a/b-2/c/d

HEAD is now at d35741f x
HEAD is now at d35741f x
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Adding a/b
Merge made by the 'resolve' strategy.
 a/b     | 1 +
 a/b/c/d | 0
 2 files changed, 1 insertion(+)
 create mode 120000 a/b
 delete mode 100644 a/b/c/d
ok 6 - Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)

expecting success of 6415.7 'a/b was resolved as symlink': 
	test -h a/b

ok 7 - a/b was resolved as symlink

expecting success of 6415.8 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)': 
	git reset --hard &&
	git checkout baseline^0 &&
	git merge -s recursive main &&
	test_path_is_file a/b-2/c/d

HEAD is now at deb429a Merge branch 'main' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  deb429a Merge branch 'main' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> deb429a

HEAD is now at d35741f x
Merge made by the 'ort' strategy.
 a/b     | 1 +
 a/b/c/d | 0
 2 files changed, 1 insertion(+)
 create mode 120000 a/b
 delete mode 100644 a/b/c/d
ok 8 - Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)

expecting success of 6415.9 'a/b was resolved as symlink': 
	test -h a/b

ok 9 - a/b was resolved as symlink

expecting success of 6415.10 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)': 
	git reset --hard &&
	git checkout main^0 &&
	git merge -s resolve baseline^0 &&
	test_path_is_file a/b-2/c/d

HEAD is now at deb429a Merge branch 'main' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  deb429a Merge branch 'main' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> deb429a

HEAD is now at 1750beb dir to symlink
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Merge made by the 'resolve' strategy.
 a/x | 1 +
 1 file changed, 1 insertion(+)
ok 10 - Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)

expecting success of 6415.11 'a/b was resolved as symlink': 
	test -h a/b

ok 11 - a/b was resolved as symlink

expecting success of 6415.12 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)': 
	git reset --hard &&
	git checkout main^0 &&
	git merge -s recursive baseline^0 &&
	test_path_is_file a/b-2/c/d

HEAD is now at d961b81 Merge commit 'baseline^0' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  d961b81 Merge commit 'baseline^0' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> d961b81

HEAD is now at 1750beb dir to symlink
Merge made by the 'ort' strategy.
 a/x | 1 +
 1 file changed, 1 insertion(+)
ok 12 - Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)

expecting success of 6415.13 'a/b was resolved as symlink': 
	test -h a/b

ok 13 - a/b was resolved as symlink

checking known breakage of 6415.14 'do not lose untracked in merge (resolve)': 
	git reset --hard &&
	git checkout baseline^0 &&
	>a/b/c/e &&
	test_must_fail git merge -s resolve main &&
	test_path_is_file a/b/c/e &&
	test_path_is_file a/b-2/c/d

HEAD is now at d961b81 Merge commit 'baseline^0' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  d961b81 Merge commit 'baseline^0' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> d961b81

HEAD is now at d35741f x
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Adding a/b
Merge made by the 'resolve' strategy.
 a/b     | 1 +
 a/b/c/d | 0
 2 files changed, 1 insertion(+)
 create mode 120000 a/b
 delete mode 100644 a/b/c/d
test_must_fail: command succeeded: git merge -s resolve main
not ok 14 - do not lose untracked in merge (resolve) # TODO known breakage

expecting success of 6415.15 'do not lose untracked in merge (recursive)': 
	git reset --hard &&
	git checkout baseline^0 &&
	>a/b/c/e &&
	test_must_fail git merge -s recursive main &&
	test_path_is_file a/b/c/e &&
	test_path_is_file a/b-2/c/d

HEAD is now at deb429a Merge branch 'main' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  deb429a Merge branch 'main' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> deb429a

HEAD is now at d35741f x
error: Updating the following directories would lose untracked files in them:
	a/b

Aborting
Merge with strategy ort failed.
ok 15 - do not lose untracked in merge (recursive)

expecting success of 6415.16 'do not lose modifications in merge (resolve)': 
	git reset --hard &&
	git checkout baseline^0 &&
	echo more content >>a/b/c/d &&
	test_must_fail git merge -s resolve main

HEAD is now at d35741f x
HEAD is now at d35741f x
error: Entry 'a/b/c/d' not uptodate. Cannot merge.
Trying really trivial in-index merge...
Nope.
error: Entry 'a/b/c/d' not uptodate. Cannot merge.
Merge with strategy resolve failed.
ok 16 - do not lose modifications in merge (resolve)

expecting success of 6415.17 'do not lose modifications in merge (recursive)': 
	git reset --hard &&
	git checkout baseline^0 &&
	echo more content >>a/b/c/d &&
	test_must_fail git merge -s recursive main

HEAD is now at d35741f x
HEAD is now at d35741f x
error: Updating the following directories would lose untracked files in them:
	a/b

Aborting
Merge with strategy ort failed.
ok 17 - do not lose modifications in merge (recursive)

expecting success of 6415.18 'setup a merge where dir a/b-2 changed to symlink': 
	git reset --hard &&
	git checkout start^0 &&
	rm -rf a/b-2 &&
	git add -A &&
	test_ln_s_add b a/b-2 &&
	git commit -m "dir a/b-2 to symlink" &&
	git tag test2

HEAD is now at d35741f x
Previous HEAD position was d35741f x
HEAD is now at d2c335b base
[detached HEAD 41d1436] dir a/b-2 to symlink
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 a/b-2
 rename a/{b-2/c/d => b/c/e} (100%)
ok 18 - setup a merge where dir a/b-2 changed to symlink

expecting success of 6415.19 'merge should not have D/F conflicts (resolve)': 
	git reset --hard &&
	git checkout baseline^0 &&
	git merge -s resolve test2 &&
	test_path_is_file a/b/c/d

HEAD is now at 41d1436 dir a/b-2 to symlink
Previous HEAD position was 41d1436 dir a/b-2 to symlink
HEAD is now at d35741f x
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Adding a/b-2
Merge made by the 'resolve' strategy.
 a/b-2                | 1 +
 a/{b-2/c/d => b/c/e} | 0
 2 files changed, 1 insertion(+)
 create mode 120000 a/b-2
 rename a/{b-2/c/d => b/c/e} (100%)
ok 19 - merge should not have D/F conflicts (resolve)

expecting success of 6415.20 'a/b-2 was resolved as symlink': 
	test -h a/b-2

ok 20 - a/b-2 was resolved as symlink

expecting success of 6415.21 'merge should not have D/F conflicts (recursive)': 
	git reset --hard &&
	git checkout baseline^0 &&
	git merge -s recursive test2 &&
	test_path_is_file a/b/c/d

HEAD is now at 57dad8a Merge tag 'test2' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  57dad8a Merge tag 'test2' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 57dad8a

HEAD is now at d35741f x
Merge made by the 'ort' strategy.
 a/b-2                | 1 +
 a/{b-2/c/d => b/c/e} | 0
 2 files changed, 1 insertion(+)
 create mode 120000 a/b-2
 rename a/{b-2/c/d => b/c/e} (100%)
ok 21 - merge should not have D/F conflicts (recursive)

expecting success of 6415.22 'a/b-2 was resolved as symlink': 
	test -h a/b-2

ok 22 - a/b-2 was resolved as symlink

expecting success of 6415.23 'merge should not have F/D conflicts (recursive)': 
	git reset --hard &&
	git checkout -b foo test2 &&
	git merge -s recursive baseline^0 &&
	test_path_is_file a/b/c/d

HEAD is now at 57dad8a Merge tag 'test2' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  57dad8a Merge tag 'test2' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 57dad8a

Switched to a new branch 'foo'
Merge made by the 'ort' strategy.
 a/x | 1 +
 1 file changed, 1 insertion(+)
ok 23 - merge should not have F/D conflicts (recursive)

expecting success of 6415.24 'a/b-2 was resolved as symlink': 
	test -h a/b-2

ok 24 - a/b-2 was resolved as symlink

# still have 1 known breakage(s)
# passed all remaining 23 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6419-merge-ignorecase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6419-merge-ignorecase/.git/
checking prerequisite: CASE_INSENSITIVE_FS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-CASE_INSENSITIVE_FS" &&
	echo good >CamelCase &&
	echo bad >camelcase &&
	test "$(cat CamelCase)" != good

)
prerequisite CASE_INSENSITIVE_FS not satisfied
1..0 # SKIP skipping case insensitive tests - case sensitive file system
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6417-merge-ours-theirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6417-merge-ours-theirs/.git/
expecting success of 6417.1 'setup': 
	test_write_lines 1 2 3 4 5 6 7 8 9 >file &&
	git add file &&
	cp file elif &&
	git commit -m initial &&

	sed -e "s/1/one/" -e "s/9/nine/" >file <elif &&
	git commit -a -m ours &&

	git checkout -b side HEAD^ &&

	sed -e "s/9/nueve/" >file <elif &&
	git commit -a -m theirs &&

	git checkout main^0

[main (root-commit) b1c5b20] initial
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 file
[main de72ed3] ours
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Switched to a new branch 'side'
[side 9035321] theirs
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at de72ed3 ours
ok 1 - setup

expecting success of 6417.2 'plain recursive - should conflict': 
	git reset --hard main &&
	test_must_fail git merge -s recursive side &&
	grep nine file &&
	grep nueve file &&
	! grep 9 file &&
	grep one file &&
	! grep 1 file

HEAD is now at de72ed3 ours
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
nine
nueve
one
ok 2 - plain recursive - should conflict

expecting success of 6417.3 'recursive favouring theirs': 
	git reset --hard main &&
	git merge -s recursive -Xtheirs side &&
	! grep nine file &&
	grep nueve file &&
	! grep 9 file &&
	grep one file &&
	! grep 1 file

HEAD is now at de72ed3 ours
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
nueve
one
ok 3 - recursive favouring theirs

expecting success of 6417.4 'recursive favouring ours': 
	git reset --hard main &&
	git merge -s recursive -X ours side &&
	grep nine file &&
	! grep nueve file &&
	! grep 9 file &&
	grep one file &&
	! grep 1 file

HEAD is now at de72ed3 ours
Auto-merging file
Merge made by the 'ort' strategy.
nine
one
ok 4 - recursive favouring ours

expecting success of 6417.5 'binary file with -Xours/-Xtheirs': 
	echo file binary >.gitattributes &&

	git reset --hard main &&
	git merge -s recursive -X theirs side &&
	git diff --exit-code side HEAD -- file &&

	git reset --hard main &&
	git merge -s recursive -X ours side &&
	git diff --exit-code main HEAD -- file

HEAD is now at de72ed3 ours
Auto-merging file
Merge made by the 'ort' strategy.
 file | Bin 23 -> 22 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
HEAD is now at de72ed3 ours
Auto-merging file
Merge made by the 'ort' strategy.
ok 5 - binary file with -Xours/-Xtheirs

expecting success of 6417.6 'pull passes -X to underlying merge': 
	git reset --hard main && git pull --no-rebase -s recursive -Xours . side &&
	git reset --hard main && git pull --no-rebase -s recursive -X ours . side &&
	git reset --hard main && git pull --no-rebase -s recursive -Xtheirs . side &&
	git reset --hard main && git pull --no-rebase -s recursive -X theirs . side &&
	git reset --hard main && test_must_fail git pull --no-rebase -s recursive -X bork . side

HEAD is now at de72ed3 ours
From .
 * branch            side       -> FETCH_HEAD
Auto-merging file
Merge made by the 'ort' strategy.
HEAD is now at de72ed3 ours
From .
 * branch            side       -> FETCH_HEAD
Auto-merging file
Merge made by the 'ort' strategy.
HEAD is now at de72ed3 ours
From .
 * branch            side       -> FETCH_HEAD
Auto-merging file
Merge made by the 'ort' strategy.
 file | Bin 23 -> 22 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
HEAD is now at de72ed3 ours
From .
 * branch            side       -> FETCH_HEAD
Auto-merging file
Merge made by the 'ort' strategy.
 file | Bin 23 -> 22 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
HEAD is now at de72ed3 ours
From .
 * branch            side       -> FETCH_HEAD
fatal: unknown strategy option: -Xbork
ok 6 - pull passes -X to underlying merge

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 6417.7 'symlink with -Xours/-Xtheirs': 
	git reset --hard main &&
	git checkout -b two main &&
	ln -s target-zero link &&
	git add link &&
	git commit -m "add link pointing to zero" &&

	ln -f -s target-two link &&
	git commit -m "add link pointing to two" link &&

	git checkout -b one HEAD^ &&
	ln -f -s target-one link &&
	git commit -m "add link pointing to one" link &&

	# we expect symbolic links not to resolve automatically, of course
	git checkout one^0 &&
	test_must_fail git merge -s recursive two &&

	# favor theirs to resolve to target-two?
	git reset --hard &&
	git checkout one^0 &&
	git merge -s recursive -X theirs two &&
	git diff --exit-code two HEAD link &&

	# favor ours to resolve to target-one?
	git reset --hard &&
	git checkout one^0 &&
	git merge -s recursive -X ours two &&
	git diff --exit-code one HEAD link


HEAD is now at de72ed3 ours
Switched to a new branch 'two'
[two c4561a4] add link pointing to zero
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 link
[two 6164de8] add link pointing to two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'one'
[one 4961603] add link pointing to one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'one^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4961603 add link pointing to one
CONFLICT (content): Merge conflict in link
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 4961603 add link pointing to one
HEAD is now at 4961603 add link pointing to one
Merge made by the 'ort' strategy.
 link | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 6efe9ee Merge branch 'two' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6efe9ee Merge branch 'two' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 6efe9ee

HEAD is now at 4961603 add link pointing to one
Merge made by the 'ort' strategy.
ok 7 - symlink with -Xours/-Xtheirs

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6418-merge-text-auto.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6418-merge-text-auto/.git/
expecting success of 6418.1 'setup': 
	git config core.autocrlf false &&

	echo first line | append_cr >file &&
	echo first line >control_file &&
	echo only line >inert_file &&

	git add file control_file inert_file &&
	test_tick &&
	git commit -m "Initial" &&
	git tag initial &&
	git branch side &&

	echo "* text=auto" >.gitattributes &&
	echo first line >file &&
	git add .gitattributes file &&
	test_tick &&
	git commit -m "normalize file" &&

	echo same line | append_cr >>file &&
	echo same line >>control_file &&
	git add file control_file &&
	test_tick &&
	git commit -m "add line from a" &&
	git tag a &&

	git rm .gitattributes &&
	rm file &&
	git checkout file &&
	test_tick &&
	git commit -m "remove .gitattributes" &&
	git tag c &&

	git checkout side &&
	echo same line | append_cr >>file &&
	echo same line >>control_file &&
	git add file control_file &&
	test_tick &&
	git commit -m "add line from b" &&
	git tag b &&

	git checkout main

[main (root-commit) 1c56df1] Initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 control_file
 create mode 100644 file
 create mode 100644 inert_file
[main 2747e77] normalize file
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 .gitattributes
warning: in the working copy of 'file', CRLF will be replaced by LF the next time Git touches it
[main 99f8882] add line from a
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
rm '.gitattributes'
Updated 1 path from the index
[main 2f716ad] remove .gitattributes
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 .gitattributes
Switched to branch 'side'
[side 0d9ffb6] add line from b
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to branch 'main'
ok 1 - setup

expecting success of 6418.2 'set up fuzz_conflict() helper': 
	fuzz_conflict() {
		sed $SED_OPTIONS -e "s/^\([<>=]......\) .*/\1/" "$@"
	}

ok 2 - set up fuzz_conflict() helper

expecting success of 6418.3 'Merge after setting text=auto': 
	cat <<-\EOF >expected &&
	first line
	same line
	EOF

	if test_have_prereq NATIVE_CRLF; then
		append_cr <expected >expected.temp &&
		mv expected.temp expected
	fi &&
	git config merge.renormalize true &&
	git rm -fr . &&
	rm -f .gitattributes &&
	git reset --hard a &&
	git merge b &&
	compare_files expected file

rm 'control_file'
rm 'file'
rm 'inert_file'
HEAD is now at 99f8882 add line from a
Auto-merging file
Merge made by the 'ort' strategy.
ok 3 - Merge after setting text=auto

expecting success of 6418.4 'Merge addition of text=auto eol=LF': 
	git config core.eol lf &&
	cat <<-\EOF >expected &&
	first line
	same line
	EOF

	git config merge.renormalize true &&
	git rm -fr . &&
	rm -f .gitattributes &&
	git reset --hard b &&
	git merge a &&
	compare_files  expected file

rm '.gitattributes'
rm 'control_file'
rm 'file'
rm 'inert_file'
HEAD is now at 0d9ffb6 add line from b
Auto-merging file
Merge made by the 'ort' strategy.
 .gitattributes | 1 +
 file           | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 .gitattributes
ok 4 - Merge addition of text=auto eol=LF

expecting success of 6418.5 'Merge addition of text=auto eol=CRLF': 
	git config core.eol crlf &&
	cat <<-\EOF >expected &&
	first line
	same line
	EOF

	append_cr <expected >expected.temp &&
	mv expected.temp expected &&
	git config merge.renormalize true &&
	git rm -fr . &&
	rm -f .gitattributes &&
	git reset --hard b &&
	echo >&2 "After git reset --hard b" &&
	git ls-files -s --eol >&2 &&
	git merge a &&
	compare_files  expected file

rm '.gitattributes'
rm 'control_file'
rm 'file'
rm 'inert_file'
HEAD is now at 0d9ffb6 add line from b
After git reset --hard b
100644 99b633103c15c20cebebf821133ab526b0ff90b2 0	i/lf    w/lf    attr/                 	control_file
100644 ad55e240aeb42e0d9a0e18d6d8b02dd82ee3e527 0	i/crlf  w/crlf  attr/                 	file
100644 1bd3656f87a6720d97252137876e81ee56eef249 0	i/lf    w/lf    attr/                 	inert_file
Auto-merging file
Merge made by the 'ort' strategy.
 .gitattributes | 1 +
 file           | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 .gitattributes
ok 5 - Merge addition of text=auto eol=CRLF

expecting success of 6418.6 'Detect CRLF/LF conflict after setting text=auto': 
	git config core.eol native &&
	echo "<<<<<<<" >expected &&
	echo first line >>expected &&
	echo same line >>expected &&
	echo ======= >>expected &&
	echo first line | append_cr >>expected &&
	echo same line | append_cr >>expected &&
	echo ">>>>>>>" >>expected &&
	git config merge.renormalize false &&
	rm -f .gitattributes &&
	git reset --hard a &&
	test_must_fail git merge b &&
	fuzz_conflict file >file.fuzzy &&
	compare_files expected file.fuzzy

HEAD is now at 99f8882 add line from a
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - Detect CRLF/LF conflict after setting text=auto

expecting success of 6418.7 'Detect LF/CRLF conflict from addition of text=auto': 
	echo "<<<<<<<" >expected &&
	echo first line | append_cr >>expected &&
	echo same line | append_cr >>expected &&
	echo ======= >>expected &&
	echo first line >>expected &&
	echo same line >>expected &&
	echo ">>>>>>>" >>expected &&
	git config merge.renormalize false &&
	rm -f .gitattributes &&
	git reset --hard b &&
	test_must_fail git merge a &&
	fuzz_conflict file >file.fuzzy &&
	compare_files expected file.fuzzy

HEAD is now at 0d9ffb6 add line from b
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
ok 7 - Detect LF/CRLF conflict from addition of text=auto

expecting success of 6418.8 'checkout -m after setting text=auto': 
	cat <<-\EOF >expected &&
	first line
	same line
	EOF

	git config merge.renormalize true &&
	git rm -fr . &&
	rm -f .gitattributes &&
	git reset --hard initial &&
	git restore --source=a -- . &&
	git checkout -m b &&
	git diff --no-index --ignore-cr-at-eol expected file

rm '.gitattributes'
rm 'control_file'
rm 'file'
rm 'file'
rm 'file'
rm 'inert_file'
HEAD is now at 1c56df1 Initial
Note: switching to 'b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0d9ffb6 add line from b
M	file
ok 8 - checkout -m after setting text=auto

expecting success of 6418.9 'checkout -m addition of text=auto': 
	cat <<-\EOF >expected &&
	first line
	same line
	EOF

	git config merge.renormalize true &&
	git rm -fr . &&
	rm -f .gitattributes file &&
	git reset --hard initial &&
	git restore --source=b -- . &&
	git checkout -m a &&
	git diff --no-index --ignore-cr-at-eol expected file

rm 'control_file'
rm 'file'
rm 'inert_file'
HEAD is now at 1c56df1 Initial
Previous HEAD position was 1c56df1 Initial
HEAD is now at 99f8882 add line from a
ok 9 - checkout -m addition of text=auto

expecting success of 6418.10 'Test delete/normalize conflict': 
	git checkout -f side &&
	git rm -fr . &&
	rm -f .gitattributes &&
	git reset --hard initial &&
	git rm file &&
	git commit -m "remove file" &&
	git checkout main &&
	git reset --hard a^ &&
	git merge side &&
	test_path_is_missing file

Previous HEAD position was 99f8882 add line from a
Switched to branch 'side'
rm 'control_file'
rm 'file'
rm 'inert_file'
HEAD is now at 1c56df1 Initial
rm 'file'
[side 7dc5d25] remove file
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file
Switched to branch 'main'
HEAD is now at 2747e77 normalize file
Merge made by the 'ort' strategy.
 file | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 file
ok 10 - Test delete/normalize conflict

expecting success of 6418.11 'rename/delete vs. renormalization': 
	git init subrepo &&
	(
		cd subrepo &&
		echo foo >oldfile &&
		git add oldfile &&
		git commit -m original &&

		git branch rename &&
		git branch nuke &&

		git checkout rename &&
		git mv oldfile newfile &&
		git commit -m renamed &&

		git checkout nuke &&
		git rm oldfile &&
		git commit -m deleted &&

		git checkout rename^0 &&
		test_must_fail git -c merge.renormalize=true merge nuke >out &&

		grep "rename/delete" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6418-merge-text-auto/subrepo/.git/
[main (root-commit) 6bccdb0] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 oldfile
Switched to branch 'rename'
[rename 0094749] renamed
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename oldfile => newfile (100%)
Switched to branch 'nuke'
rm 'oldfile'
[nuke 5c3f422] deleted
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 oldfile
Note: switching to 'rename^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0094749 renamed
CONFLICT (rename/delete): oldfile renamed to newfile in HEAD, but deleted in nuke.
ok 11 - rename/delete vs. renormalization

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6421-merge-partial-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6421-merge-partial-clone/.git/
expecting success of 6421.1 'Objects downloaded for single relevant rename': 
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-single &&
	(
		cd objects-single &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-single &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:2
		fetch_count:1
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 2 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 2 + 1 = 3 objects
		test_line_count = 3 old
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6421-merge-partial-clone/server/.git/
[master (root-commit) fb87a8e] O
 Author: A U Thor <author@example.com>
 103 files changed, 150 insertions(+)
 create mode 100644 basename/numbers
 create mode 100644 basename/sequence
 create mode 100644 basename/values
 create mode 100644 dir/subdir/Makefile
 create mode 100644 dir/subdir/a
 create mode 100644 dir/subdir/b
 create mode 100644 dir/subdir/c
 create mode 100644 dir/subdir/d
 create mode 100644 dir/subdir/e
 create mode 100644 dir/subdir/tweaked/Makefile
 create mode 100644 dir/subdir/tweaked/f
 create mode 100644 dir/subdir/tweaked/g
 create mode 100644 dir/subdir/tweaked/h
 create mode 100644 dir/unchanged/file_1
 create mode 100644 dir/unchanged/file_10
 create mode 100644 dir/unchanged/file_11
 create mode 100644 dir/unchanged/file_12
 create mode 100644 dir/unchanged/file_13
 create mode 100644 dir/unchanged/file_14
 create mode 100644 dir/unchanged/file_15
 create mode 100644 dir/unchanged/file_16
 create mode 100644 dir/unchanged/file_17
 create mode 100644 dir/unchanged/file_18
 create mode 100644 dir/unchanged/file_19
 create mode 100644 dir/unchanged/file_2
 create mode 100644 dir/unchanged/file_20
 create mode 100644 dir/unchanged/file_21
 create mode 100644 dir/unchanged/file_22
 create mode 100644 dir/unchanged/file_23
 create mode 100644 dir/unchanged/file_24
 create mode 100644 dir/unchanged/file_25
 create mode 100644 dir/unchanged/file_26
 create mode 100644 dir/unchanged/file_27
 create mode 100644 dir/unchanged/file_28
 create mode 100644 dir/unchanged/file_29
 create mode 100644 dir/unchanged/file_3
 create mode 100644 dir/unchanged/file_30
 create mode 100644 dir/unchanged/file_31
 create mode 100644 dir/unchanged/file_32
 create mode 100644 dir/unchanged/file_33
 create mode 100644 dir/unchanged/file_34
 create mode 100644 dir/unchanged/file_35
 create mode 100644 dir/unchanged/file_36
 create mode 100644 dir/unchanged/file_37
 create mode 100644 dir/unchanged/file_38
 create mode 100644 dir/unchanged/file_39
 create mode 100644 dir/unchanged/file_4
 create mode 100644 dir/unchanged/file_40
 create mode 100644 dir/unchanged/file_41
 create mode 100644 dir/unchanged/file_42
 create mode 100644 dir/unchanged/file_43
 create mode 100644 dir/unchanged/file_44
 create mode 100644 dir/unchanged/file_45
 create mode 100644 dir/unchanged/file_46
 create mode 100644 dir/unchanged/file_47
 create mode 100644 dir/unchanged/file_48
 create mode 100644 dir/unchanged/file_49
 create mode 100644 dir/unchanged/file_5
 create mode 100644 dir/unchanged/file_50
 create mode 100644 dir/unchanged/file_51
 create mode 100644 dir/unchanged/file_52
 create mode 100644 dir/unchanged/file_53
 create mode 100644 dir/unchanged/file_54
 create mode 100644 dir/unchanged/file_55
 create mode 100644 dir/unchanged/file_56
 create mode 100644 dir/unchanged/file_57
 create mode 100644 dir/unchanged/file_58
 create mode 100644 dir/unchanged/file_59
 create mode 100644 dir/unchanged/file_6
 create mode 100644 dir/unchanged/file_60
 create mode 100644 dir/unchanged/file_61
 create mode 100644 dir/unchanged/file_62
 create mode 100644 dir/unchanged/file_63
 create mode 100644 dir/unchanged/file_64
 create mode 100644 dir/unchanged/file_65
 create mode 100644 dir/unchanged/file_66
 create mode 100644 dir/unchanged/file_67
 create mode 100644 dir/unchanged/file_68
 create mode 100644 dir/unchanged/file_69
 create mode 100644 dir/unchanged/file_7
 create mode 100644 dir/unchanged/file_70
 create mode 100644 dir/unchanged/file_71
 create mode 100644 dir/unchanged/file_72
 create mode 100644 dir/unchanged/file_73
 create mode 100644 dir/unchanged/file_74
 create mode 100644 dir/unchanged/file_75
 create mode 100644 dir/unchanged/file_76
 create mode 100644 dir/unchanged/file_77
 create mode 100644 dir/unchanged/file_78
 create mode 100644 dir/unchanged/file_79
 create mode 100644 dir/unchanged/file_8
 create mode 100644 dir/unchanged/file_80
 create mode 100644 dir/unchanged/file_81
 create mode 100644 dir/unchanged/file_82
 create mode 100644 dir/unchanged/file_83
 create mode 100644 dir/unchanged/file_84
 create mode 100644 dir/unchanged/file_85
 create mode 100644 dir/unchanged/file_86
 create mode 100644 dir/unchanged/file_87
 create mode 100644 dir/unchanged/file_88
 create mode 100644 dir/unchanged/file_9
 create mode 100644 general/leap1
 create mode 100644 general/leap2
Switched to branch 'A'
rm 'general/leap1'
rm 'general/leap2'
rm 'dir/subdir/tweaked/f'
[A b0c40f6] A
 Author: A U Thor <author@example.com>
 105 files changed, 10 insertions(+), 2 deletions(-)
 rename basename/{ => subdir}/numbers (92%)
 rename basename/{ => subdir}/sequence (92%)
 rename basename/{ => subdir}/values (92%)
 delete mode 100644 dir/subdir/e
 delete mode 100644 dir/subdir/tweaked/f
 rename {dir => folder}/subdir/Makefile (87%)
 rename {dir => folder}/subdir/a (100%)
 rename {dir => folder}/subdir/b (100%)
 rename {dir => folder}/subdir/c (100%)
 rename {dir => folder}/subdir/d (100%)
 create mode 100644 folder/subdir/newsubdir/e
 create mode 100644 folder/subdir/newsubdir/newfile.rs
 rename {dir => folder}/subdir/tweaked/Makefile (81%)
 rename {dir => folder}/subdir/tweaked/g (100%)
 rename {dir => folder}/subdir/tweaked/h (100%)
 rename {dir => folder}/unchanged/file_1 (100%)
 rename {dir => folder}/unchanged/file_10 (100%)
 rename {dir => folder}/unchanged/file_11 (100%)
 rename {dir => folder}/unchanged/file_12 (100%)
 rename {dir => folder}/unchanged/file_13 (100%)
 rename {dir => folder}/unchanged/file_14 (100%)
 rename {dir => folder}/unchanged/file_15 (100%)
 rename {dir => folder}/unchanged/file_16 (100%)
 rename {dir => folder}/unchanged/file_17 (100%)
 rename {dir => folder}/unchanged/file_18 (100%)
 rename {dir => folder}/unchanged/file_19 (100%)
 rename {dir => folder}/unchanged/file_2 (100%)
 rename {dir => folder}/unchanged/file_20 (100%)
 rename {dir => folder}/unchanged/file_21 (100%)
 rename {dir => folder}/unchanged/file_22 (100%)
 rename {dir => folder}/unchanged/file_23 (100%)
 rename {dir => folder}/unchanged/file_24 (100%)
 rename {dir => folder}/unchanged/file_25 (100%)
 rename {dir => folder}/unchanged/file_26 (100%)
 rename {dir => folder}/unchanged/file_27 (100%)
 rename {dir => folder}/unchanged/file_28 (100%)
 rename {dir => folder}/unchanged/file_29 (100%)
 rename {dir => folder}/unchanged/file_3 (100%)
 rename {dir => folder}/unchanged/file_30 (100%)
 rename {dir => folder}/unchanged/file_31 (100%)
 rename {dir => folder}/unchanged/file_32 (100%)
 rename {dir => folder}/unchanged/file_33 (100%)
 rename {dir => folder}/unchanged/file_34 (100%)
 rename {dir => folder}/unchanged/file_35 (100%)
 rename {dir => folder}/unchanged/file_36 (100%)
 rename {dir => folder}/unchanged/file_37 (100%)
 rename {dir => folder}/unchanged/file_38 (100%)
 rename {dir => folder}/unchanged/file_39 (100%)
 rename {dir => folder}/unchanged/file_4 (100%)
 rename {dir => folder}/unchanged/file_40 (100%)
 rename {dir => folder}/unchanged/file_41 (100%)
 rename {dir => folder}/unchanged/file_42 (100%)
 rename {dir => folder}/unchanged/file_43 (100%)
 rename {dir => folder}/unchanged/file_44 (100%)
 rename {dir => folder}/unchanged/file_45 (100%)
 rename {dir => folder}/unchanged/file_46 (100%)
 rename {dir => folder}/unchanged/file_47 (100%)
 rename {dir => folder}/unchanged/file_48 (100%)
 rename {dir => folder}/unchanged/file_49 (100%)
 rename {dir => folder}/unchanged/file_5 (100%)
 rename {dir => folder}/unchanged/file_50 (100%)
 rename {dir => folder}/unchanged/file_51 (100%)
 rename {dir => folder}/unchanged/file_52 (100%)
 rename {dir => folder}/unchanged/file_53 (100%)
 rename {dir => folder}/unchanged/file_54 (100%)
 rename {dir => folder}/unchanged/file_55 (100%)
 rename {dir => folder}/unchanged/file_56 (100%)
 rename {dir => folder}/unchanged/file_57 (100%)
 rename {dir => folder}/unchanged/file_58 (100%)
 rename {dir => folder}/unchanged/file_59 (100%)
 rename {dir => folder}/unchanged/file_6 (100%)
 rename {dir => folder}/unchanged/file_60 (100%)
 rename {dir => folder}/unchanged/file_61 (100%)
 rename {dir => folder}/unchanged/file_62 (100%)
 rename {dir => folder}/unchanged/file_63 (100%)
 rename {dir => folder}/unchanged/file_64 (100%)
 rename {dir => folder}/unchanged/file_65 (100%)
 rename {dir => folder}/unchanged/file_66 (100%)
 rename {dir => folder}/unchanged/file_67 (100%)
 rename {dir => folder}/unchanged/file_68 (100%)
 rename {dir => folder}/unchanged/file_69 (100%)
 rename {dir => folder}/unchanged/file_7 (100%)
 rename {dir => folder}/unchanged/file_70 (100%)
 rename {dir => folder}/unchanged/file_71 (100%)
 rename {dir => folder}/unchanged/file_72 (100%)
 rename {dir => folder}/unchanged/file_73 (100%)
 rename {dir => folder}/unchanged/file_74 (100%)
 rename {dir => folder}/unchanged/file_75 (100%)
 rename {dir => folder}/unchanged/file_76 (100%)
 rename {dir => folder}/unchanged/file_77 (100%)
 rename {dir => folder}/unchanged/file_78 (100%)
 rename {dir => folder}/unchanged/file_79 (100%)
 rename {dir => folder}/unchanged/file_8 (100%)
 rename {dir => folder}/unchanged/file_80 (100%)
 rename {dir => folder}/unchanged/file_81 (100%)
 rename {dir => folder}/unchanged/file_82 (100%)
 rename {dir => folder}/unchanged/file_83 (100%)
 rename {dir => folder}/unchanged/file_84 (100%)
 rename {dir => folder}/unchanged/file_85 (100%)
 rename {dir => folder}/unchanged/file_86 (100%)
 rename {dir => folder}/unchanged/file_87 (100%)
 rename {dir => folder}/unchanged/file_88 (100%)
 rename {dir => folder}/unchanged/file_9 (100%)
 rename general/{leap1 => jump1} (88%)
 rename general/{leap2 => jump2} (91%)
Switched to branch 'B-single'
[B-single 4be199b] B-single
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 general/newfile.pl
Switched to branch 'B-dir'
[B-dir 4ce2107] B-dir
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 dir/subdir/newfile.groovy
 create mode 100644 dir/subdir/newfile.java
 create mode 100644 dir/subdir/newfile.scala
Switched to branch 'B-many'
[B-many fa0fa91] B-many
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 rename basename/{ => subdir}/numbers (88%)
 rename basename/{ => subdir}/sequence (89%)
 rename basename/{ => subdir}/values (88%)
 create mode 100644 dir/subdir/newfile.c
 create mode 100644 dir/subdir/newsubdir/newfile.py
Switched to branch 'A'
Cloning into 'objects-single'...
Auto-merging folder/subdir/Makefile
Merge made by the 'ort' strategy.
ok 1 - Objects downloaded for single relevant rename

expecting success of 6421.2 'Objects downloaded when a directory rename triggered': 
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-dir &&
	(
		cd objects-dir &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-dir &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:6
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 1 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 6 objects
		test_line_count = 6 old
	)

Cloning into 'objects-dir'...
Path updated: dir/subdir/newfile.groovy added in origin/B-dir inside a directory that was renamed in HEAD; moving it to folder/subdir/newfile.groovy.
Path updated: dir/subdir/newfile.java added in origin/B-dir inside a directory that was renamed in HEAD; moving it to folder/subdir/newfile.java.
Path updated: dir/subdir/newfile.scala added in origin/B-dir inside a directory that was renamed in HEAD; moving it to folder/subdir/newfile.scala.
Merge made by the 'ort' strategy.
ok 2 - Objects downloaded when a directory rename triggered

expecting success of 6421.3 'Objects downloaded with lots of renames and modifications': 
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-many &&
	(
		cd objects-many &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-many &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:12
		fetch_count:5
		fetch_count:3
		fetch_count:2
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 4 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 12 + 5 + 3 + 2 = 22 objects
		test_line_count = 22 old
	)

Cloning into 'objects-many'...
Auto-merging basename/subdir/numbers
Auto-merging basename/subdir/sequence
Auto-merging basename/subdir/values
Path updated: dir/subdir/newfile.c added in origin/B-many inside a directory that was renamed in HEAD; moving it to folder/subdir/newfile.c.
Path updated: dir/subdir/newsubdir/newfile.py added in origin/B-many inside a directory that was renamed in HEAD; moving it to folder/subdir/newsubdir/newfile.py.
Auto-merging general/jump1
Auto-merging general/jump2
Merge made by the 'ort' strategy.
ok 3 - Objects downloaded with lots of renames and modifications

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6424-merge-unrelated-index-changes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6424-merge-unrelated-index-changes/.git/
expecting success of 6424.1 'setup trivial merges': 
	test_seq 1 10 >a &&
	git add a &&
	test_tick && git commit -m A &&

	git branch A &&
	git branch B &&
	git branch C &&
	git branch D &&
	git branch E &&
	git branch F &&

	git checkout B &&
	echo b >b &&
	echo 11 >>a &&
	git add a b &&
	test_tick && git commit -m B &&

	git checkout C &&
	echo c >c &&
	git add c &&
	test_tick && git commit -m C &&

	git checkout D &&
	test_seq 2 10 >a &&
	echo d >d &&
	git add a d &&
	test_tick && git commit -m D &&

	git checkout E &&
	mkdir subdir &&
	git mv a subdir/a &&
	echo e >subdir/e &&
	git add subdir &&
	test_tick && git commit -m E &&

	git checkout F &&
	test_tick && git commit --allow-empty -m F

[master (root-commit) 87af29c] A
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 a
Switched to branch 'B'
[B ed5d5a6] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 b
Switched to branch 'C'
[C 4fa59ce] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
Switched to branch 'D'
[D c3c5299] D
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 d
Switched to branch 'E'
[E b615563] E
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename a => subdir/a (100%)
 create mode 100644 subdir/e
Switched to branch 'F'
[F 83c2e21] F
 Author: A U Thor <author@example.com>
ok 1 - setup trivial merges

expecting success of 6424.2 'ff update': 
	git reset --hard &&
	git checkout A^0 &&

	touch random_file && git add random_file &&

	git merge E^0 &&

	test_must_fail git rev-parse HEAD:random_file &&
	test "$(git diff --name-only --cached E)" = "random_file" &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file

HEAD is now at 83c2e21 F
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 87af29c A
Updating 87af29c..b615563
Fast-forward
 a => subdir/a | 0
 subdir/e      | 1 +
 2 files changed, 1 insertion(+)
 rename a => subdir/a (100%)
 create mode 100644 subdir/e
fatal: path 'random_file' exists on disk, but not in 'HEAD'
HEAD:random_file
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 2 - ff update

expecting success of 6424.3 'ff update, important file modified': 
	git reset --hard &&
	git checkout A^0 &&

	mkdir subdir &&
	touch subdir/e &&
	git add subdir/e &&

	test_must_fail git merge E^0 &&
	test_path_is_file subdir/e &&
	git rev-parse --verify :subdir/e &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at b615563 E
Previous HEAD position was b615563 E
HEAD is now at 87af29c A
error: Your local changes to the following files would be overwritten by merge:
	subdir/e
Please commit your changes or stash them before you merge.
Aborting
Updating 87af29c..b615563
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 3 - ff update, important file modified

expecting success of 6424.4 'resolve, trivial': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s resolve C^0 &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at 87af29c A
Previous HEAD position was 87af29c A
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
  random_file
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 4 - resolve, trivial

expecting success of 6424.5 'resolve, non-trivial': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s resolve D^0 &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
  random_file
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 5 - resolve, non-trivial

expecting success of 6424.6 'resolve, trivial, related file removed': 
	git reset --hard &&
	git checkout B^0 &&

	git rm a &&
	test_path_is_missing a &&

	test_must_fail git merge -s resolve C^0 &&

	test_path_is_missing a &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
rm 'a'
error: Your local changes to the following files would be overwritten by merge:
  a
ok 6 - resolve, trivial, related file removed

expecting success of 6424.7 'resolve, non-trivial, related file removed': 
	git reset --hard &&
	git checkout B^0 &&

	git rm a &&
	test_path_is_missing a &&

	# We also ask for recursive in order to turn off the "allow_trivial"
	# setting in builtin/merge.c, and ensure that resolve really does
	# correctly fail the merge (I guess this also tests that recursive
	# correctly fails the merge, but the main thing we are attempting
	# to test here is resolve and are just using the side effect of
	# adding recursive to ensure that resolve is actually tested rather
	# than the trivial merge codepath)
	test_must_fail git merge -s resolve -s recursive D^0 &&

	test_path_is_missing a &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
rm 'a'
Trying merge strategy resolve...
Error: Your local changes to the following files would be overwritten by merge
    a
Rewinding the tree to pristine...
error: Your local changes to the following files would be overwritten by merge:
  a
Trying merge strategy ort...
No merge strategy handled the merge.
ok 7 - resolve, non-trivial, related file removed

expecting success of 6424.8 'recursive': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s recursive C^0 &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
  random_file
Merge with strategy ort failed.
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 8 - recursive

expecting success of 6424.9 'recursive, when merge branch matches merge base': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s recursive F^0 &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
  random_file
Merge with strategy ort failed.
ok 9 - recursive, when merge branch matches merge base

expecting success of 6424.10 'merge-recursive, when index==head but head!=HEAD': 
	git reset --hard &&
	git checkout C^0 &&

	# Make index match B
	git diff C B -- | git apply --cached &&
	test_when_finished "git clean -fd" &&  # Do not leave untracked around
	# Merge B & F, with B as "head"
	git merge-recursive A -- B F > out &&
	test_i18ngrep "Already up to date" out

HEAD is now at ed5d5a6 B
Previous HEAD position was ed5d5a6 B
HEAD is now at 4fa59ce C
Already up to date.
Removing c
Removing out
ok 10 - merge-recursive, when index==head but head!=HEAD

expecting success of 6424.11 'recursive, when file has staged changes not matching HEAD nor what a merge would give': 
	git reset --hard &&
	git checkout B^0 &&

	mkdir subdir &&
	test_seq 1 10 >subdir/a &&
	git add subdir/a &&
	git rev-parse --verify :subdir/a >expect &&

	# We have staged changes; merge should error out
	test_must_fail git merge -s recursive E^0 2>err &&
	git rev-parse --verify :subdir/a >actual &&
	test_cmp expect actual &&
	test_i18ngrep "changes to the following files would be overwritten" err

HEAD is now at 4fa59ce C
Previous HEAD position was 4fa59ce C
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
ok 11 - recursive, when file has staged changes not matching HEAD nor what a merge would give

expecting success of 6424.12 'recursive, when file has staged changes matching what a merge would give': 
	git reset --hard &&
	git checkout B^0 &&

	mkdir subdir &&
	test_seq 1 11 >subdir/a &&
	git add subdir/a &&
	git rev-parse --verify :subdir/a >expect &&

	# We have staged changes; merge should error out
	test_must_fail git merge -s recursive E^0 2>err &&
	git rev-parse --verify :subdir/a >actual &&
	test_cmp expect actual &&
	test_i18ngrep "changes to the following files would be overwritten" err

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
ok 12 - recursive, when file has staged changes matching what a merge would give

expecting success of 6424.13 'octopus, unrelated file touched': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_missing .git/MERGE_HEAD &&
	git rev-parse --verify :random_file &&
	test_path_exists random_file

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
Error: Your local changes to the following files would be overwritten by merge
    random_file
Merge with strategy octopus failed.
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 13 - octopus, unrelated file touched

expecting success of 6424.14 'octopus, related file removed': 
	git reset --hard &&
	git checkout B^0 &&

	git rm b &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_missing b &&
	test_must_fail git rev-parse --verify :b &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
rm 'b'
Error: Your local changes to the following files would be overwritten by merge
    b
Merge with strategy octopus failed.
fatal: Needed a single revision
ok 14 - octopus, related file removed

expecting success of 6424.15 'octopus, related file modified': 
	git reset --hard &&
	git checkout B^0 &&

	echo 12 >>a && git add a &&
	git rev-parse --verify :a >expect &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_file a &&
	git rev-parse --verify :a >actual &&
	test_cmp expect actual &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
Error: Your local changes to the following files would be overwritten by merge
    a
Merge with strategy octopus failed.
ok 15 - octopus, related file modified

expecting success of 6424.16 'ours': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s ours C^0 &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
Merge with strategy ours failed.
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 16 - ours

expecting success of 6424.17 'subtree': 
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s subtree E^0 &&
	test_path_is_file random_file &&
	git rev-parse --verify :random_file &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
error: Your local changes to the following files would be overwritten by merge:
  random_file
Merge with strategy subtree failed.
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
ok 17 - subtree

expecting success of 6424.18 'avoid failure due to stat-dirty files': 
	git reset --hard &&
	git checkout B^0 &&

	# Make "a" be stat-dirty
	test-tool chmtime =+1 a &&

	# stat-dirty file should not prevent stash creation in builtin/merge.c
	git merge -s resolve -s recursive D^0

HEAD is now at ed5d5a6 B
HEAD is now at ed5d5a6 B
Trying merge strategy resolve...
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging a
Merge made by the 'resolve' strategy.
 a | 1 -
 d | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 d
ok 18 - avoid failure due to stat-dirty files

expecting success of 6424.19 'with multiple strategies, recursive or ort failure do not early abort': 
	git reset --hard &&
	git checkout B^0 &&

	test_seq 0 10 >a &&
	git add a &&
	git rev-parse :a >expect &&

	sane_unset GIT_TEST_MERGE_ALGORITHM &&
	test_must_fail git merge -s recursive -s ort -s octopus C^0 >output 2>&1 &&

	grep "Trying merge strategy recursive..." output &&
	grep "Trying merge strategy ort..." output &&
	grep "Trying merge strategy octopus..." output &&
	grep "No merge strategy handled the merge." output &&

	# Changes to "a" should remain staged
	git rev-parse :a >actual &&
	test_cmp expect actual

HEAD is now at c1fdbe2 Merge commit 'D^0' into HEAD
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  c1fdbe2 Merge commit 'D^0' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> c1fdbe2

HEAD is now at ed5d5a6 B
Trying merge strategy recursive...
Trying merge strategy ort...
Trying merge strategy octopus...
No merge strategy handled the merge.
ok 19 - with multiple strategies, recursive or ort failure do not early abort

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6425-merge-rename-delete.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6425-merge-rename-delete/.git/
expecting success of 6425.1 'rename/delete': 
	echo foo >A &&
	git add A &&
	git commit -m "initial" &&

	git checkout -b rename &&
	git mv A B &&
	git commit -m "rename" &&

	git checkout main &&
	git rm A &&
	git commit -m "delete" &&

	test_must_fail git merge --strategy=recursive rename >output &&
	test_i18ngrep "CONFLICT (rename/delete): A.* renamed .*to B.* in rename" output &&
	test_i18ngrep "CONFLICT (rename/delete): A.*deleted in HEAD." output

[main (root-commit) 6604e52] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A
Switched to a new branch 'rename'
[rename f088787] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename A => B (100%)
Switched to branch 'main'
rm 'A'
[main b4eee36] delete
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 A
CONFLICT (rename/delete): A renamed to B in rename, but deleted in HEAD.
CONFLICT (rename/delete): A renamed to B in rename, but deleted in HEAD.
ok 1 - rename/delete

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6416-recursive-corner-cases.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/.git/
expecting success of 6416.1 'setup basic criss-cross + rename with no modifications': 
	git init basic-rename &&
	(
		cd basic-rename &&

		ten="0 1 2 3 4 5 6 7 8 9" &&
		printf "line %d in a sample file\n" $ten >one &&
		printf "line %d in another sample file\n" $ten >two &&
		git add one two &&
		test_tick && git commit -m initial &&

		git branch L1 &&
		git checkout -b R1 &&
		git mv one three &&
		test_tick && git commit -m R1 &&

		git checkout L1 &&
		git mv two three &&
		test_tick && git commit -m L1 &&

		git checkout L1^0 &&
		test_tick && git merge -s ours R1 &&
		git tag L2 &&

		git checkout R1^0 &&
		test_tick && git merge -s ours L1 &&
		git tag R2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/basic-rename/.git/
[main (root-commit) 4871052] initial
 Author: A U Thor <author@example.com>
 2 files changed, 20 insertions(+)
 create mode 100644 one
 create mode 100644 two
Switched to a new branch 'R1'
[R1 6592516] R1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename one => three (100%)
Switched to branch 'L1'
[L1 bd99445] L1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename two => three (100%)
Note: switching to 'L1^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bd99445 L1
Merge made by the 'ours' strategy.
Previous HEAD position was d46c613 Merge branch 'R1' into HEAD
HEAD is now at 6592516 R1
Merge made by the 'ours' strategy.
ok 1 - setup basic criss-cross + rename with no modifications

expecting success of 6416.2 'merge simple rename+criss-cross with no modifications': 
	(
		cd basic-rename &&

		git reset --hard &&
		git checkout L2^0 &&

		test_must_fail git merge -s recursive R2^0 &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect       \
			L2:three   R2:three &&
		git rev-parse   >actual     \
			:2:three   :3:three &&
		test_cmp expect actual
	)

HEAD is now at 01e4222 Merge branch 'L1' into HEAD
Previous HEAD position was 01e4222 Merge branch 'L1' into HEAD
HEAD is now at d46c613 Merge branch 'R1' into HEAD
  From inner merge:  Auto-merging three
  From inner merge:  CONFLICT (add/add): Merge conflict in three
Auto-merging three
CONFLICT (content): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - merge simple rename+criss-cross with no modifications

expecting success of 6416.3 'setup criss-cross + rename merges with basic modification': 
	git init rename-modify &&
	(
		cd rename-modify &&

		ten="0 1 2 3 4 5 6 7 8 9" &&
		printf "line %d in a sample file\n" $ten >one &&
		printf "line %d in another sample file\n" $ten >two &&
		git add one two &&
		test_tick && git commit -m initial &&

		git branch L1 &&
		git checkout -b R1 &&
		git mv one three &&
		echo more >>two &&
		git add two &&
		test_tick && git commit -m R1 &&

		git checkout L1 &&
		git mv two three &&
		test_tick && git commit -m L1 &&

		git checkout L1^0 &&
		test_tick && git merge -s ours R1 &&
		git tag L2 &&

		git checkout R1^0 &&
		test_tick && git merge -s ours L1 &&
		git tag R2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/rename-modify/.git/
[main (root-commit) 4871052] initial
 Author: A U Thor <author@example.com>
 2 files changed, 20 insertions(+)
 create mode 100644 one
 create mode 100644 two
Switched to a new branch 'R1'
[R1 edf7b54] R1
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename one => three (100%)
Switched to branch 'L1'
[L1 bd99445] L1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename two => three (100%)
Note: switching to 'L1^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bd99445 L1
Merge made by the 'ours' strategy.
Previous HEAD position was fb0e0c9 Merge branch 'R1' into HEAD
HEAD is now at edf7b54 R1
Merge made by the 'ours' strategy.
ok 3 - setup criss-cross + rename merges with basic modification

expecting success of 6416.4 'merge criss-cross + rename merges with basic modification': 
	(
		cd rename-modify &&

		git checkout L2^0 &&

		test_must_fail git merge -s recursive R2^0 &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect       \
			L2:three   R2:three &&
		git rev-parse   >actual     \
			:2:three   :3:three &&
		test_cmp expect actual
	)

Previous HEAD position was c7add50 Merge branch 'L1' into HEAD
HEAD is now at fb0e0c9 Merge branch 'R1' into HEAD
  From inner merge:  Auto-merging three
  From inner merge:  CONFLICT (add/add): Merge conflict in three
Auto-merging three
CONFLICT (content): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - merge criss-cross + rename merges with basic modification

expecting success of 6416.5 'setup differently handled merges of rename/add conflict': 
	git init rename-add &&
	(
		cd rename-add &&

		printf "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n" >a &&
		git add a &&
		test_tick && git commit -m A &&

		git branch B &&
		git checkout -b C &&
		echo 10 >>a &&
		test_write_lines 0 1 2 3 4 5 6 7 foobar >new_a &&
		git add a new_a &&
		test_tick && git commit -m C &&

		git checkout B &&
		git mv a new_a &&
		test_tick && git commit -m B &&

		git checkout B^0 &&
		test_must_fail git merge C &&
		git show :2:new_a >new_a &&
		git add new_a &&
		test_tick && git commit -m D &&
		git tag D &&

		git checkout C^0 &&
		test_must_fail git merge B &&
		test_write_lines 0 1 2 3 4 5 6 7 bad_merge >new_a &&
		git add -u &&
		test_tick && git commit -m E &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/rename-add/.git/
[main (root-commit) 1b84f42] A
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 a
Switched to a new branch 'C'
[C f1f358b] C
 Author: A U Thor <author@example.com>
 2 files changed, 10 insertions(+)
 create mode 100644 new_a
Switched to branch 'B'
[B 0496200] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => new_a (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0496200 B
Auto-merging new_a
CONFLICT (add/add): Merge conflict in new_a
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD fc47f4b] D
 Author: A U Thor <author@example.com>
Previous HEAD position was fc47f4b D
HEAD is now at f1f358b C
Auto-merging new_a
CONFLICT (add/add): Merge conflict in new_a
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD 1e98639] E
 Author: A U Thor <author@example.com>
ok 5 - setup differently handled merges of rename/add conflict

expecting success of 6416.6 'git detects differently handled merges conflict': 
	(
		cd rename-add &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git cat-file -p C:new_a >ours &&
		git cat-file -p C:a >theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "Temporary merge branch 1" \
			-L "" \
			-L "Temporary merge branch 2" \
			ours empty theirs &&
		sed -e "s/^\([<=>]\)/\1\1\1/" ours >ours-tweaked &&
		git hash-object ours-tweaked >expect &&
		git rev-parse >>expect      \
				  D:new_a  E:new_a &&
		git rev-parse   >actual     \
			:1:new_a :2:new_a :3:new_a &&
		test_cmp expect actual &&

		# Test that the two-way merge in new_a is as expected
		git cat-file -p D:new_a >ours &&
		git cat-file -p E:new_a >theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "E^0" \
			ours empty theirs &&
		sed -e "s/^\([<=>]\)/\1\1\1/" ours >expect &&
		git hash-object new_a >actual &&
		git hash-object ours  >expect &&
		test_cmp expect actual
	)

Previous HEAD position was 1e98639 E
HEAD is now at fc47f4b D
  From inner merge:  Auto-merging new_a
  From inner merge:  CONFLICT (add/add): Merge conflict in new_a
Auto-merging new_a
CONFLICT (content): Merge conflict in new_a
Automatic merge failed; fix conflicts and then commit the result.
ok 6 - git detects differently handled merges conflict

expecting success of 6416.7 'git detects differently handled merges conflict, swapped': 
	(
		cd rename-add &&

		# Difference #1: Do cleanup from previous testrun
		git reset --hard &&
		git clean -fdqx &&

		# Difference #2: Change commit timestamps
		btime=$(git log --no-walk --date=raw --format=%cd B | awk "{print \$1}") &&
		ctime=$(git log --no-walk --date=raw --format=%cd C | awk "{print \$1}") &&
		newctime=$(($btime+1)) &&
		git fast-export --no-data --all | sed -e s/$ctime/$newctime/ | git fast-import --force --quiet &&
		# End of most differences; rest is copy-paste of last test,
		# other than swapping C:a and C:new_a due to order switch

		git checkout D^0 &&
		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git cat-file -p C:a >ours &&
		git cat-file -p C:new_a >theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "Temporary merge branch 1" \
			-L "" \
			-L "Temporary merge branch 2" \
			ours empty theirs &&
		sed -e "s/^\([<=>]\)/\1\1\1/" ours >ours-tweaked &&
		git hash-object ours-tweaked >expect &&
		git rev-parse >>expect      \
				  D:new_a  E:new_a &&
		git rev-parse   >actual     \
			:1:new_a :2:new_a :3:new_a &&
		test_cmp expect actual &&

		# Test that the two-way merge in new_a is as expected
		git cat-file -p D:new_a >ours &&
		git cat-file -p E:new_a >theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "E^0" \
			ours empty theirs &&
		sed -e "s/^\([<=>]\)/\1\1\1/" ours >expect &&
		git hash-object new_a >actual &&
		git hash-object ours  >expect &&
		test_cmp expect actual
	)

HEAD is now at fc47f4b D
HEAD is now at 23cad11 D
  From inner merge:  Auto-merging new_a
  From inner merge:  CONFLICT (add/add): Merge conflict in new_a
Auto-merging new_a
CONFLICT (content): Merge conflict in new_a
Automatic merge failed; fix conflicts and then commit the result.
ok 7 - git detects differently handled merges conflict, swapped

expecting success of 6416.8 'setup criss-cross + modify/delete resolved differently': 
	git init modify-delete &&
	(
		cd modify-delete &&

		echo A >file &&
		git add file &&
		test_tick &&
		git commit -m A &&

		git branch B &&
		git checkout -b C &&
		git rm file &&
		test_tick &&
		git commit -m C &&

		git checkout B &&
		echo B >file &&
		git add file &&
		test_tick &&
		git commit -m B &&

		git checkout B^0 &&
		test_must_fail git merge C &&
		echo B >file &&
		git add file &&
		test_tick &&
		git commit -m D &&
		git tag D &&

		git checkout C^0 &&
		test_must_fail git merge B &&
		git rm file &&
		test_tick &&
		git commit -m E &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/modify-delete/.git/
[main (root-commit) 518fc48] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'C'
rm 'file'
[C cfc4799] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file
Switched to branch 'B'
[B 96c9208] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 96c9208 B
CONFLICT (modify/delete): file deleted in C and modified in HEAD.  Version HEAD of file left in tree.
Automatic merge failed; fix conflicts and then commit the result.
[detached HEAD 84ce14b] D
 Author: A U Thor <author@example.com>
Previous HEAD position was 84ce14b D
HEAD is now at cfc4799 C
CONFLICT (modify/delete): file deleted in HEAD and modified in B.  Version B of file left in tree.
Automatic merge failed; fix conflicts and then commit the result.
rm 'file'
[detached HEAD 75a2416] E
 Author: A U Thor <author@example.com>
ok 8 - setup criss-cross + modify/delete resolved differently

expecting success of 6416.9 'git detects conflict merging criss-cross+modify/delete': 
	(
		cd modify-delete &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&

		git rev-parse >expect       \
			main:file    B:file &&
		git rev-parse   >actual      \
			:1:file      :2:file &&
		test_cmp expect actual
	)

Previous HEAD position was 75a2416 E
HEAD is now at 84ce14b D
  From inner merge:  CONFLICT (modify/delete): file deleted in Temporary merge branch 1 and modified in Temporary merge branch 2.  Version Temporary merge branch 2 of file left in tree.
CONFLICT (modify/delete): file deleted in E^0 and modified in HEAD.  Version HEAD of file left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 9 - git detects conflict merging criss-cross+modify/delete

expecting success of 6416.10 'git detects conflict merging criss-cross+modify/delete, reverse direction': 
	(
		cd modify-delete &&

		git reset --hard &&
		git checkout E^0 &&

		test_must_fail git merge -s recursive D^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&

		git rev-parse >expect       \
			main:file    B:file &&
		git rev-parse   >actual      \
			:1:file      :3:file &&
		test_cmp expect actual
	)

HEAD is now at 84ce14b D
Previous HEAD position was 84ce14b D
HEAD is now at 75a2416 E
  From inner merge:  CONFLICT (modify/delete): file deleted in Temporary merge branch 1 and modified in Temporary merge branch 2.  Version Temporary merge branch 2 of file left in tree.
CONFLICT (modify/delete): file deleted in HEAD and modified in D^0.  Version D^0 of file left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 10 - git detects conflict merging criss-cross+modify/delete, reverse direction

expecting success of 6416.11 'setup differently handled merges of directory/file conflict': 
	git init directory-file &&
	(
		cd directory-file &&

		>ignore-me &&
		git add ignore-me &&
		test_tick &&
		git commit -m A &&
		git tag A &&

		git branch B &&
		git checkout -b C &&
		mkdir a &&
		test_write_lines a b c d e f g >a/file &&
		git add a/file &&
		test_tick &&
		git commit -m C &&

		git checkout B &&
		test_write_lines 1 2 3 4 5 6 7 >a &&
		git add a &&
		test_tick &&
		git commit -m B &&

		git checkout B^0 &&
		git merge -s ours -m D1 C^0 &&
		git tag D1 &&

		git checkout B^0 &&
		test_must_fail git merge C^0 &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git rm -rf a/ &&
			git rm a~HEAD
		else
			git clean -fd &&
			git rm -rf a/ &&
			git rm a
		fi &&
		git cat-file -p B:a >a2 &&
		git add a2 &&
		git commit -m D2 &&
		git tag D2 &&

		git checkout C^0 &&
		git merge -s ours -m E1 B^0 &&
		git tag E1 &&

		git checkout C^0 &&
		git merge -s ours -m E2 B^0 &&
		test_write_lines a b c d e f g h >a/file &&
		git add a/file &&
		git commit --amend -C HEAD &&
		git tag E2 &&

		git checkout C^0 &&
		test_must_fail git merge B^0 &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git rm a~B^0
		else
			git clean -fd
		fi &&
		git rm -rf a/ &&
		test_write_lines 1 2 3 4 5 6 7 8 >a &&
		git add a &&
		git commit -m E3 &&
		git tag E3 &&

		git checkout C^0 &&
		test_must_fail git merge B^0 &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git rm -rf a/ &&
			git rm a~B^0
		else
			git clean -fd &&
			git rm -rf a/ &&
			git rm a
		fi &&
		test_write_lines 1 2 3 4 5 6 7 8 >a2 &&
		git add a2 &&
		git commit -m E4 &&
		git tag E4
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/directory-file/.git/
[main (root-commit) a08e4c1] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ignore-me
Switched to a new branch 'C'
[C 4d18708] C
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 a/file
Switched to branch 'B'
[B fda518b] B
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 a
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fda518b B
Merge made by the 'ours' strategy.
Previous HEAD position was c17d257 D1
HEAD is now at fda518b B
CONFLICT (file/directory): directory in the way of a from HEAD; moving it to a~HEAD instead.
Automatic merge failed; fix conflicts and then commit the result.
rm 'a/file'
rm 'a~HEAD'
[detached HEAD 53fb160] D2
 Author: A U Thor <author@example.com>
Previous HEAD position was 53fb160 D2
HEAD is now at 4d18708 C
Merge made by the 'ours' strategy.
Previous HEAD position was 4e0c96b E1
HEAD is now at 4d18708 C
Merge made by the 'ours' strategy.
[detached HEAD 56cb482] E2
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
Previous HEAD position was 56cb482 E2
HEAD is now at 4d18708 C
CONFLICT (file/directory): directory in the way of a from B^0; moving it to a~B^0 instead.
Automatic merge failed; fix conflicts and then commit the result.
rm 'a~B^0'
rm 'a/file'
[detached HEAD e07b76f] E3
 Author: A U Thor <author@example.com>
Previous HEAD position was e07b76f E3
HEAD is now at 4d18708 C
CONFLICT (file/directory): directory in the way of a from B^0; moving it to a~B^0 instead.
Automatic merge failed; fix conflicts and then commit the result.
rm 'a/file'
rm 'a~B^0'
[detached HEAD f0b11dd] E4
 Author: A U Thor <author@example.com>
ok 11 - setup differently handled merges of directory/file conflict

expecting success of 6416.12 'merge of D1 & E1 fails but has appropriate contents': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout D1^0 &&

		test_must_fail git merge -s recursive E1^0 &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				A:ignore-me  B:a  D1:a &&
			git rev-parse   >actual   \
				:0:ignore-me :1:a :2:a &&
			test_cmp expect actual
		else
			git ls-files -s >out &&
			test_line_count = 2 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				A:ignore-me  B:a &&
			git rev-parse   >actual   \
				:0:ignore-me :2:a &&
			test_cmp expect actual
		fi
	)

Previous HEAD position was f0b11dd E4
HEAD is now at c17d257 D1
CONFLICT (rename/delete): a~Temporary merge branch 2 renamed to a in HEAD, but deleted in E1^0.
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at c17d257 D1
ok 12 - merge of D1 & E1 fails but has appropriate contents

expecting success of 6416.13 'merge of E1 & D1 fails but has appropriate contents': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout E1^0 &&

		test_must_fail git merge -s recursive D1^0 &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				A:ignore-me  B:a  D1:a &&
			git rev-parse   >actual   \
				:0:ignore-me :1:a :3:a &&
			test_cmp expect actual
		else
			git ls-files -s >out &&
			test_line_count = 2 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				A:ignore-me  B:a &&
			git rev-parse   >actual   \
				:0:ignore-me :3:a &&
			test_cmp expect actual
		fi
	)

Previous HEAD position was c17d257 D1
HEAD is now at 4e0c96b E1
CONFLICT (rename/delete): a~Temporary merge branch 2 renamed to a in D1^0, but deleted in HEAD.
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 4e0c96b E1
ok 13 - merge of E1 & D1 fails but has appropriate contents

expecting success of 6416.14 'merge of D1 & E2 fails but has appropriate contents': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout D1^0 &&

		test_must_fail git merge -s recursive E2^0 &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 5 out &&
			git ls-files -u >out &&
			test_line_count = 4 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				B:a       D1:a      E2:a/file  C:a/file   A:ignore-me &&
			git rev-parse   >actual   \
				:1:a~HEAD :2:a~HEAD :3:a/file  :1:a/file  :0:ignore-me
		else
			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 3 out &&
			git ls-files -o >out &&
			test_line_count = 2 out &&

			git rev-parse >expect    \
				B:a    E2:a/file  C:a/file   A:ignore-me &&
			git rev-parse   >actual   \
				:2:a   :3:a/file  :1:a/file  :0:ignore-me
		fi &&
		test_cmp expect actual &&

		test_path_is_file a~HEAD
	)

Previous HEAD position was 4e0c96b E1
HEAD is now at c17d257 D1
CONFLICT (rename/delete): a~Temporary merge branch 2 renamed to a in HEAD, but deleted in E2^0.
CONFLICT (modify/delete): a/file deleted in HEAD and modified in E2^0.  Version E2^0 of a/file left in tree.
CONFLICT (file/directory): directory in the way of a from HEAD; moving it to a~HEAD instead.
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at c17d257 D1
ok 14 - merge of D1 & E2 fails but has appropriate contents

expecting success of 6416.15 'merge of E2 & D1 fails but has appropriate contents': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout E2^0 &&

		test_must_fail git merge -s recursive D1^0 &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 5 out &&
			git ls-files -u >out &&
			test_line_count = 4 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >expect    \
				B:a       D1:a      E2:a/file  C:a/file   A:ignore-me &&
			git rev-parse   >actual   \
				:1:a~D1^0 :3:a~D1^0 :2:a/file  :1:a/file  :0:ignore-me
		else
			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 3 out &&
			git ls-files -o >out &&
			test_line_count = 2 out &&

			git rev-parse >expect    \
				B:a   E2:a/file  C:a/file   A:ignore-me &&
			git rev-parse   >actual   \
				:3:a  :2:a/file  :1:a/file  :0:ignore-me
		fi &&
		test_cmp expect actual &&

		test_path_is_file a~D1^0
	)

Previous HEAD position was c17d257 D1
HEAD is now at 56cb482 E2
CONFLICT (rename/delete): a~Temporary merge branch 2 renamed to a in D1^0, but deleted in HEAD.
CONFLICT (modify/delete): a/file deleted in D1^0 and modified in HEAD.  Version HEAD of a/file left in tree.
CONFLICT (file/directory): directory in the way of a from D1^0; moving it to a~D1^0 instead.
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 56cb482 E2
ok 15 - merge of E2 & D1 fails but has appropriate contents

expecting success of 6416.16 'merge of D1 & E3 succeeds': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout D1^0 &&

		git merge -s recursive E3^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect    \
			A:ignore-me  E3:a &&
		git rev-parse   >actual   \
			:0:ignore-me :0:a &&
		test_cmp expect actual
	)

Previous HEAD position was 56cb482 E2
HEAD is now at c17d257 D1
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Merge made by the 'ort' strategy.
 a | 1 +
 1 file changed, 1 insertion(+)
HEAD is now at 51bbc83 Merge commit 'E3^0' into HEAD
ok 16 - merge of D1 & E3 succeeds

expecting success of 6416.17 'merge of D1 & E4 puts merge of a and a2 in both a and a2': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout D1^0 &&

		test_must_fail git merge -s recursive E4^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect                  \
			A:ignore-me  B:a   E4:a2  E4:a2 &&
		git rev-parse   >actual                \
			:0:ignore-me :1:a~Temporary\ merge\ branch\ 2  :2:a  :3:a2 &&
		test_cmp expect actual
	)

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  51bbc83 Merge commit 'E3^0' into HEAD

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 51bbc83

HEAD is now at c17d257 D1
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
CONFLICT (rename/rename): a~Temporary merge branch 2 renamed to a in HEAD and to a2 in E4^0.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at c17d257 D1
ok 17 - merge of D1 & E4 puts merge of a and a2 in both a and a2

checking known breakage of 6416.18 'merge of D2 & E4 merges a2s & reports conflict for a/file': 
	test_when_finished "git -C directory-file reset --hard" &&
	test_when_finished "git -C directory-file clean -fdqx" &&
	(
		cd directory-file &&

		git checkout D2^0 &&

		test_must_fail git merge -s recursive E4^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 1 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect                 \
			A:ignore-me  E4:a2  D2:a/file &&
		git rev-parse   >actual               \
			:0:ignore-me :0:a2  :2:a/file &&
		test_cmp expect actual
	)

Previous HEAD position was c17d257 D1
HEAD is now at 53fb160 D2
  From inner merge:  CONFLICT (file/directory): directory in the way of a from Temporary merge branch 2; moving it to a~Temporary merge branch 2 instead.
Merge made by the 'ort' strategy.
 a2 | 1 +
 1 file changed, 1 insertion(+)
test_must_fail: command succeeded: git merge -s recursive E4^0
HEAD is now at 82b63e2 Merge commit 'E4^0' into HEAD
not ok 18 - merge of D2 & E4 merges a2s & reports conflict for a/file # TODO known breakage

expecting success of 6416.19 'setup rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify': 
	git init rename-squared-squared &&
	(
		cd rename-squared-squared &&

		printf "1\n2\n3\n4\n5\n6\n" >a &&
		git add a &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git mv a b &&
		echo 7 >>b &&
		git add -u &&
		git commit -m B &&

		git checkout -b C A &&
		git mv a c &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge --no-commit -s ours C^0 &&
		git mv b newname &&
		git commit -m "Merge commit C^0 into HEAD" &&
		git tag D &&

		git checkout -q C^0 &&
		git merge --no-commit -s ours B^0 &&
		git mv c newname &&
		printf "7\n8\n" >>newname &&
		git add -u &&
		git commit -m "Merge commit B^0 into HEAD" &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/rename-squared-squared/.git/
[main (root-commit) 295973b] A
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 a
Switched to a new branch 'B'
[B f21786f] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename a => b (85%)
Switched to a new branch 'C'
[C 4ba638b] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => c (100%)
Automatic merge went well; stopped before committing as requested
[detached HEAD f6e3f71] Merge commit C^0 into HEAD
 Author: A U Thor <author@example.com>
Automatic merge went well; stopped before committing as requested
[detached HEAD 9f79f94] Merge commit B^0 into HEAD
 Author: A U Thor <author@example.com>
ok 19 - setup rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify

expecting success of 6416.20 'handle rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify': 
	(
		cd rename-squared-squared &&

		git checkout D^0 &&

		git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 1 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
	)

Previous HEAD position was 9f79f94 Merge commit B^0 into HEAD
HEAD is now at f6e3f71 Merge commit C^0 into HEAD
  From inner merge:  CONFLICT (rename/rename): a renamed to c in Temporary merge branch 1 and to b in Temporary merge branch 2.
Merge made by the 'ort' strategy.
 newname | 1 +
 1 file changed, 1 insertion(+)
ok 20 - handle rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify

expecting success of 6416.21 'setup criss-cross + rename/rename/add-source + modify/modify': 
	git init rename-rename-add-source &&
	(
		cd rename-rename-add-source &&

		printf "lots\nof\nwords\nand\ncontent\n" >a &&
		git add a &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git mv a b &&
		git commit -m B &&

		git checkout -b C A &&
		git mv a c &&
		printf "2\n3\n4\n5\n6\n7\n" >a &&
		git add a &&
		git commit -m C &&

		git checkout B^0 &&
		git merge --no-commit -s ours C^0 &&
		git checkout C -- a c &&
		mv a old_a &&
		echo 1 >a &&
		cat old_a >>a &&
		rm old_a &&
		git add -u &&
		git commit -m "Merge commit C^0 into HEAD" &&
		git tag D &&

		git checkout C^0 &&
		git merge --no-commit -s ours B^0 &&
		git checkout B -- b &&
		echo 8 >>a &&
		git add -u &&
		git commit -m "Merge commit B^0 into HEAD" &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/rename-rename-add-source/.git/
[main (root-commit) b781d1e] A
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 a
Switched to a new branch 'B'
[B 03ced07] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
Switched to a new branch 'C'
[C 3f5d572] C
 Author: A U Thor <author@example.com>
 2 files changed, 11 insertions(+), 5 deletions(-)
 create mode 100644 c
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 03ced07 B
Automatic merge went well; stopped before committing as requested
[detached HEAD 9c83147] Merge commit C^0 into HEAD
 Author: A U Thor <author@example.com>
Previous HEAD position was 9c83147 Merge commit C^0 into HEAD
HEAD is now at 3f5d572 C
Automatic merge went well; stopped before committing as requested
[detached HEAD d777135] Merge commit B^0 into HEAD
 Author: A U Thor <author@example.com>
ok 21 - setup criss-cross + rename/rename/add-source + modify/modify

checking known breakage of 6416.22 'detect rename/rename/add-source for virtual merge-base': 
	(
		cd rename-rename-add-source &&

		git checkout D^0 &&

		git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		printf "1\n2\n3\n4\n5\n6\n7\n8\n" >correct &&
		git rev-parse >expect \
			A:a   A:a     \
			correct       &&
		git rev-parse   >actual  \
			:0:b  :0:c       &&
		git hash-object >>actual \
			a                &&
		test_cmp expect actual
	)

Previous HEAD position was d777135 Merge commit B^0 into HEAD
HEAD is now at 9c83147 Merge commit C^0 into HEAD
Auto-merging a
CONFLICT (add/add): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
not ok 22 - detect rename/rename/add-source for virtual merge-base # TODO known breakage

expecting success of 6416.23 'setup criss-cross+rename/rename/add-dest + simple modify': 
	git init rename-rename-add-dest &&
	(
		cd rename-rename-add-dest &&

		>a &&
		git add a &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git mv a b &&
		printf "1\n2\n3\n4\n5\n6\n7\n" >c &&
		git add c &&
		git commit -m B &&

		git checkout -b C A &&
		git mv a c &&
		git commit -m C &&

		git checkout B^0 &&
		git merge --no-commit -s ours C^0 &&
		git mv b a &&
		git commit -m "D is like B but renames b back to a" &&
		git tag D &&

		git checkout B^0 &&
		git merge --no-commit -s ours C^0 &&
		git mv b a &&
		echo 8 >>c &&
		git add c &&
		git commit -m "E like D but has mod in c" &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/rename-rename-add-dest/.git/
[main (root-commit) b21de87] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
Switched to a new branch 'B'
[B 47afb4b] B
 Author: A U Thor <author@example.com>
 2 files changed, 7 insertions(+)
 rename a => b (100%)
 create mode 100644 c
Switched to a new branch 'C'
[C 81b2b2a] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => c (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 47afb4b B
Automatic merge went well; stopped before committing as requested
[detached HEAD f5a14fe] D is like B but renames b back to a
 Author: A U Thor <author@example.com>
Previous HEAD position was f5a14fe D is like B but renames b back to a
HEAD is now at 47afb4b B
Automatic merge went well; stopped before committing as requested
[detached HEAD 5bb242a] E like D but has mod in c
 Author: A U Thor <author@example.com>
ok 23 - setup criss-cross+rename/rename/add-dest + simple modify

expecting success of 6416.24 'virtual merge base handles rename/rename(1to2)/add-dest': 
	(
		cd rename-rename-add-dest &&

		git checkout D^0 &&

		git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect \
			A:a   E:c     &&
		git rev-parse   >actual \
			:0:a  :0:c      &&
		test_cmp expect actual
	)

Previous HEAD position was 5bb242a E like D but has mod in c
HEAD is now at f5a14fe D is like B but renames b back to a
  From inner merge:  Auto-merging c
Merge made by the 'ort' strategy.
 c | 1 +
 1 file changed, 1 insertion(+)
ok 24 - virtual merge base handles rename/rename(1to2)/add-dest

expecting success of 6416.25 'setup symlink modify/modify': 
	git init symlink-modify-modify &&
	(
		cd symlink-modify-modify &&

		test_ln_s_add lagoon fickle &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git rm fickle &&
		test_ln_s_add disneyland fickle &&
		git commit -m B &&

		git checkout -b C A &&
		git rm fickle &&
		test_ln_s_add home fickle &&
		git add fickle &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/symlink-modify-modify/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[main (root-commit) a3b1e24] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 fickle
Switched to a new branch 'B'
rm 'fickle'
[B c99a710] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'C'
rm 'fickle'
[C 755f8fe] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 25 - setup symlink modify/modify

expecting success of 6416.26 'check symlink modify/modify': 
	(
		cd symlink-modify-modify &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was 2ddfe8a E
HEAD is now at e208a3f D
  From inner merge:  CONFLICT (content): Merge conflict in fickle
CONFLICT (content): Merge conflict in fickle
Automatic merge failed; fix conflicts and then commit the result.
ok 26 - check symlink modify/modify

expecting success of 6416.27 'setup symlink add/add': 
	git init symlink-add-add &&
	(
		cd symlink-add-add &&

		touch ignoreme &&
		git add ignoreme &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		test_ln_s_add disneyland fickle &&
		git commit -m B &&

		git checkout -b C A &&
		test_ln_s_add home fickle &&
		git add fickle &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/symlink-add-add/.git/
[main (root-commit) c21c0cc] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ignoreme
Switched to a new branch 'B'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[B ff19417] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 fickle
Switched to a new branch 'C'
[C a2b9cba] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 fickle
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 27 - setup symlink add/add

expecting success of 6416.28 'check symlink add/add': 
	(
		cd symlink-add-add &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was b8a9b65 E
HEAD is now at 34200e3 D
  From inner merge:  CONFLICT (add/add): Merge conflict in fickle
CONFLICT (add/add): Merge conflict in fickle
Automatic merge failed; fix conflicts and then commit the result.
ok 28 - check symlink add/add

expecting success of 6416.29 'setup submodule modify/modify': 
	git init submodule-modify-modify &&
	(
		cd submodule-modify-modify &&

		git init submod &&
		(
			cd submod &&
			touch file-A &&
			git add file-A &&
			git commit -m A &&
			git tag A &&

			git checkout -b B A &&
			touch file-B &&
			git add file-B &&
			git commit -m B &&
			git tag B &&

			git checkout -b C A &&
			touch file-C &&
			git add file-C &&
			git commit -m C &&
			git tag C
		) &&

		git -C submod reset --hard A &&
		git add submod &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git -C submod reset --hard B &&
		git add submod &&
		git commit -m B &&

		git checkout -b C A &&
		git -C submod reset --hard C &&
		git add submod &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-modify-modify/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-modify-modify/submod/.git/
[main (root-commit) 0b2025d] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-A
Switched to a new branch 'B'
[B c896f52] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-B
Switched to a new branch 'C'
[C a2c92fc] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-C
HEAD is now at 0b2025d A
warning: adding embedded git repository: submod
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submod
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submod
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) f4d8475] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 submod
Switched to a new branch 'B'
warning: refname 'B' is ambiguous.
warning: refname 'B' is ambiguous.
HEAD is now at c896f52 B
[B 104442b] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'C'
M	submod
warning: refname 'C' is ambiguous.
warning: refname 'C' is ambiguous.
HEAD is now at a2c92fc C
[C a2bce14] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 29 - setup submodule modify/modify

expecting success of 6416.30 'check submodule modify/modify': 
	(
		cd submodule-modify-modify &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was 1c9f70b E
HEAD is now at ce72099 D
M	submod
  From inner merge:  CONFLICT (submodule): Merge conflict in submod
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit a2c92fc
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
ok 30 - check submodule modify/modify

expecting success of 6416.31 'setup submodule add/add': 
	git init submodule-add-add &&
	(
		cd submodule-add-add &&

		git init submod &&
		(
			cd submod &&
			touch file-A &&
			git add file-A &&
			git commit -m A &&
			git tag A &&

			git checkout -b B A &&
			touch file-B &&
			git add file-B &&
			git commit -m B &&
			git tag B &&

			git checkout -b C A &&
			touch file-C &&
			git add file-C &&
			git commit -m C &&
			git tag C
		) &&

		touch irrelevant-file &&
		git add irrelevant-file &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git -C submod reset --hard B &&
		git add submod &&
		git commit -m B &&

		git checkout -b C A &&
		git -C submod reset --hard C &&
		git add submod &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-add-add/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-add-add/submod/.git/
[main (root-commit) 0b2025d] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-A
Switched to a new branch 'B'
[B c896f52] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-B
Switched to a new branch 'C'
[C a2c92fc] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-C
[main (root-commit) ffa7695] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 irrelevant-file
Switched to a new branch 'B'
warning: refname 'B' is ambiguous.
warning: refname 'B' is ambiguous.
HEAD is now at c896f52 B
warning: adding embedded git repository: submod
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submod
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submod
hint: 
hint: See "git help submodule" for more information.
[B b3ca9b5] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 submod
warning: unable to rmdir 'submod': Directory not empty
Switched to a new branch 'C'
warning: refname 'C' is ambiguous.
warning: refname 'C' is ambiguous.
HEAD is now at a2c92fc C
warning: adding embedded git repository: submod
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submod
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submod
hint: 
hint: See "git help submodule" for more information.
[C 5df2365] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 submod
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 31 - setup submodule add/add

expecting success of 6416.32 'check submodule add/add': 
	(
		cd submodule-add-add &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was 0141fc3 E
HEAD is now at 3e5a324 D
M	submod
  From inner merge:  Failed to merge submodule submod (no merge base)
  From inner merge:  CONFLICT (add/add): Merge conflict in submod
Failed to merge submodule submod (no merge base)
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit a2c92fc
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
ok 32 - check submodule add/add

expecting success of 6416.33 'setup conflicting entry types (submodule vs symlink)': 
	git init submodule-symlink-add-add &&
	(
		cd submodule-symlink-add-add &&

		git init path &&
		(
			cd path &&
			touch file-B &&
			git add file-B &&
			git commit -m B &&
			git tag B
		) &&

		touch irrelevant-file &&
		git add irrelevant-file &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		git -C path reset --hard B &&
		git add path &&
		git commit -m B &&

		git checkout -b C A &&
		rm -rf path/ &&
		test_ln_s_add irrelevant-file path &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-symlink-add-add/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/submodule-symlink-add-add/path/.git/
[main (root-commit) f80342e] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file-B
[main (root-commit) ffa7695] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 irrelevant-file
Switched to a new branch 'B'
HEAD is now at f80342e B
warning: adding embedded git repository: path
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> path
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached path
hint: 
hint: See "git help submodule" for more information.
[B 83ada27] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 path
warning: unable to rmdir 'path': Directory not empty
Switched to a new branch 'C'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[C 7d3c6ec] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 path
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 33 - setup conflicting entry types (submodule vs symlink)

expecting success of 6416.34 'check conflicting entry types (submodule vs symlink)': 
	(
		cd submodule-symlink-add-add &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was d862885 E
HEAD is now at cc49267 D
CONFLICT (distinct types): path had different types on each side; renamed both of them so each can be recorded somewhere.
Automatic merge failed; fix conflicts and then commit the result.
ok 34 - check conflicting entry types (submodule vs symlink)

expecting success of 6416.35 'setup conflicting modes for regular file': 
	git init regular-file-mode-conflict &&
	(
		cd regular-file-mode-conflict &&

		touch irrelevant-file &&
		git add irrelevant-file &&
		git commit -m A &&
		git tag A &&

		git checkout -b B A &&
		echo "command_to_run" >source_me.bash &&
		git add source_me.bash &&
		git commit -m B &&

		git checkout -b C A &&
		echo "command_to_run" >source_me.bash &&
		git add source_me.bash &&
		test_chmod +x source_me.bash &&
		git commit -m C &&

		git checkout -q B^0 &&
		git merge -s ours -m D C^0 &&
		git tag D &&

		git checkout -q C^0 &&
		git merge -s ours -m E B^0 &&
		git tag E
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/regular-file-mode-conflict/.git/
[main (root-commit) ffa7695] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 irrelevant-file
Switched to a new branch 'B'
[B b8c132e] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 source_me.bash
Switched to a new branch 'C'
[C 53e08af] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100755 source_me.bash
Merge made by the 'ours' strategy.
Merge made by the 'ours' strategy.
ok 35 - setup conflicting modes for regular file

checking known breakage of 6416.36 'check conflicting modes for regular file': 
	(
		cd regular-file-mode-conflict &&

		git checkout D^0 &&

		test_must_fail git merge -s recursive E^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out
	)

Previous HEAD position was 0f3ce8e E
HEAD is now at a770888 D
  From inner merge:  CONFLICT (add/add): Merge conflict in source_me.bash
Merge made by the 'ort' strategy.
test_must_fail: command succeeded: git merge -s recursive E^0
not ok 36 - check conflicting modes for regular file # TODO known breakage

expecting success of 6416.37 'setup nested conflicts': 
	git init nested_conflicts &&
	(
		cd nested_conflicts &&

		# Create some related files now
		printf "Random base content line %d\n" $(test_seq 1 10) >initial &&

		cp initial b_L1 &&
		cp initial b_R1 &&
		cp initial b_L2 &&
		cp initial b_R2 &&
		cp initial a_L1 &&
		cp initial a_R1 &&
		cp initial a_L2 &&
		cp initial a_R2 &&

		test_write_lines b b_L1 >>b_L1 &&
		test_write_lines b b_R1 >>b_R1 &&
		test_write_lines b b_L2 >>b_L2 &&
		test_write_lines b b_R2 >>b_R2 &&
		test_write_lines a a_L1 >>a_L1 &&
		test_write_lines a a_R1 >>a_R1 &&
		test_write_lines a a_L2 >>a_L2 &&
		test_write_lines a a_R2 >>a_R2 &&

		# Setup original commit (or merge-base), consisting of
		# files named "b" and "a"
		cp initial b &&
		cp initial a &&
		echo b >>b &&
		echo a >>a &&
		git add b a &&
		test_tick && git commit -m initial &&

		git branch L &&
		git branch R &&

		# Handle the left side
		git checkout L &&
		mv -f b_L1 b &&
		mv -f a_L1 a &&
		git add b a &&
		test_tick && git commit -m "version L1 of files" &&
		git tag L1 &&

		# Handle the right side
		git checkout R &&
		mv -f b_R1 b &&
		mv -f a_R1 a &&
		git add b a &&
		test_tick && git commit -m "version R1 of files" &&
		git tag R1 &&

		# Create first merge on left side
		git checkout L &&
		test_must_fail git merge R1 &&
		mv -f b_L2 b &&
		mv -f a_L2 a &&
		git add b a &&
		git mv b m &&
		test_tick && git commit -m "left merge, rename b->m" &&
		git tag L2 &&

		# Create first merge on right side
		git checkout R &&
		test_must_fail git merge L1 &&
		mv -f b_R2 b &&
		mv -f a_R2 a &&
		git add b a &&
		git mv a m &&
		test_tick && git commit -m "right merge, rename a->m" &&
		git tag R2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/nested_conflicts/.git/
[main (root-commit) 64965f6] initial
 Author: A U Thor <author@example.com>
 2 files changed, 22 insertions(+)
 create mode 100644 a
 create mode 100644 b
Switched to branch 'L'
[L e512e8b] version L1 of files
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to branch 'R'
[R ff2c09e] version R1 of files
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to branch 'L'
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (content): Merge conflict in b
Automatic merge failed; fix conflicts and then commit the result.
[L 4085c94] left merge, rename b->m
 Author: A U Thor <author@example.com>
Switched to branch 'R'
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (content): Merge conflict in b
Automatic merge failed; fix conflicts and then commit the result.
[R 6322e9f] right merge, rename a->m
 Author: A U Thor <author@example.com>
ok 37 - setup nested conflicts

expecting success of 6416.38 'check nested conflicts': 
	(
		cd nested_conflicts &&

		git clean -f &&
		MAIN=$(git rev-parse --short main) &&
		git checkout L2^0 &&

		# Merge must fail; there is a conflict
		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R2^0 &&

		# Make sure the index has the right number of entries
		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		# Ensure we have the correct number of untracked files
		git ls-files -o >out &&
		test_line_count = 1 out &&

		# Create a and b from virtual merge base X
		git cat-file -p main:a >base &&
		git cat-file -p L1:a >ours &&
		git cat-file -p R1:a >theirs &&
		test_must_fail git merge-file --diff3 \
			-L "Temporary merge branch 1" \
			-L "$MAIN"  \
			-L "Temporary merge branch 2" \
			ours  \
			base  \
			theirs &&
		sed -e "s/^\([<|=>]\)/\1\1/" ours >vmb_a &&

		git cat-file -p main:b >base &&
		git cat-file -p L1:b >ours &&
		git cat-file -p R1:b >theirs &&
		test_must_fail git merge-file --diff3 \
			-L "Temporary merge branch 1" \
			-L "$MAIN"  \
			-L "Temporary merge branch 2" \
			ours  \
			base  \
			theirs &&
		sed -e "s/^\([<|=>]\)/\1\1/" ours >vmb_b &&

		# Compare :2:m to expected values
		git cat-file -p L2:m >ours &&
		git cat-file -p R2:b >theirs &&
		test_must_fail git merge-file --diff3  \
			-L "HEAD:m"                    \
			-L "merged common ancestors:b" \
			-L "R2^0:b"                    \
			ours                           \
			vmb_b                          \
			theirs                         &&
		sed -e "s/^\([<|=>]\)/\1\1/" ours >m_stage_2 &&
		git cat-file -p :2:m >actual &&
		test_cmp m_stage_2 actual &&

		# Compare :3:m to expected values
		git cat-file -p L2:a >ours &&
		git cat-file -p R2:m >theirs &&
		test_must_fail git merge-file --diff3  \
			-L "HEAD:a"                    \
			-L "merged common ancestors:a" \
			-L "R2^0:m"                    \
			ours                           \
			vmb_a                          \
			theirs                         &&
		sed -e "s/^\([<|=>]\)/\1\1/" ours >m_stage_3 &&
		git cat-file -p :3:m >actual &&
		test_cmp m_stage_3 actual &&

		# Compare m to expected contents
		>empty &&
		cp m_stage_2 expected_final_m &&
		test_must_fail git merge-file --diff3 \
			-L "HEAD"                     \
			-L "merged common ancestors"  \
			-L "R2^0"                     \
			expected_final_m              \
			empty                         \
			m_stage_3                     &&
		test_cmp expected_final_m m
	)

Removing initial
Note: switching to 'L2^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4085c94 left merge, rename b->m
  From inner merge:  Auto-merging a
  From inner merge:  CONFLICT (content): Merge conflict in a
Auto-merging a
  From inner merge:  Auto-merging b
  From inner merge:  CONFLICT (content): Merge conflict in b
Auto-merging b
CONFLICT (rename involved in collision): rename of a -> m has content conflicts AND collides with another path; this may result in nested conflict markers.
CONFLICT (rename involved in collision): rename of b -> m has content conflicts AND collides with another path; this may result in nested conflict markers.
Auto-merging m
CONFLICT (add/add): Merge conflict in m
Automatic merge failed; fix conflicts and then commit the result.
ok 38 - check nested conflicts

expecting success of 6416.39 'setup virtual merge base with nested conflicts': 
	git init virtual_merge_base_has_nested_conflicts &&
	(
		cd virtual_merge_base_has_nested_conflicts &&

		# Create some related files now
		printf "Random base content line %d\n" $(test_seq 1 10) >content &&

		# Setup original commit
		git add content &&
		test_tick && git commit -m initial &&

		git branch L &&
		git branch R &&

		# Create L1
		git checkout L &&
		echo left >>content &&
		git add content &&
		test_tick && git commit -m "version L1 of content" &&
		git tag L1 &&

		# Create R1
		git checkout R &&
		echo right >>content &&
		git add content &&
		test_tick && git commit -m "version R1 of content" &&
		git tag R1 &&

		# Create L2
		git checkout L &&
		test_must_fail git -c merge.conflictstyle=diff3 merge R1 &&
		git checkout L1 content &&
		test_tick && git commit -m "version L2 of content" &&
		git tag L2 &&

		# Create R2
		git checkout R &&
		test_must_fail git -c merge.conflictstyle=diff3 merge L1 &&
		git checkout R1 content &&
		test_tick && git commit -m "version R2 of content" &&
		git tag R2 &&

		# Create L3
		git checkout L &&
		test_must_fail git -c merge.conflictstyle=diff3 merge R2 &&
		git checkout L1 content &&
		test_tick && git commit -m "version L3 of content" &&
		git tag L3 &&

		# Create R3
		git checkout R &&
		test_must_fail git -c merge.conflictstyle=diff3 merge L2 &&
		git checkout R1 content &&
		test_tick && git commit -m "version R3 of content" &&
		git tag R3
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6416-recursive-corner-cases/virtual_merge_base_has_nested_conflicts/.git/
[main (root-commit) 0e6d233] initial
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 content
Switched to branch 'L'
[L 80f6449] version L1 of content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'R'
[R 49ac0f6] version R1 of content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'L'
Auto-merging content
CONFLICT (content): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from 42730fb
[L b5f1211] version L2 of content
 Author: A U Thor <author@example.com>
Switched to branch 'R'
Auto-merging content
CONFLICT (content): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from 5ac3d63
[R d9b26ef] version R2 of content
 Author: A U Thor <author@example.com>
Switched to branch 'L'
  From inner merge:  Auto-merging content
  From inner merge:  CONFLICT (content): Merge conflict in content
Auto-merging content
CONFLICT (content): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from 42730fb
[L 747e690] version L3 of content
 Author: A U Thor <author@example.com>
Switched to branch 'R'
  From inner merge:  Auto-merging content
  From inner merge:  CONFLICT (content): Merge conflict in content
Auto-merging content
CONFLICT (content): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from 5ac3d63
[R 1e5e557] version R3 of content
 Author: A U Thor <author@example.com>
ok 39 - setup virtual merge base with nested conflicts

expecting success of 6416.40 'check virtual merge base with nested conflicts': 
	(
		cd virtual_merge_base_has_nested_conflicts &&

		MAIN=$(git rev-parse --short main) &&
		git checkout L3^0 &&

		# Merge must fail; there is a conflict
		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R3^0 &&

		# Make sure the index has the right number of entries
		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		# Ensure we have the correct number of untracked files
		git ls-files -o >out &&
		test_line_count = 1 out &&

		# Compare :[23]:content to expected values
		git rev-parse L1:content R1:content >expect &&
		git rev-parse :2:content :3:content >actual &&
		test_cmp expect actual &&

		# Imitate X1 merge base, except without long enough conflict
		# markers because a subsequent sed will modify them.  Put
		# result into vmb.
		git cat-file -p main:content >base &&
		git cat-file -p L:content >left &&
		git cat-file -p R:content >right &&
		cp left merged-once &&
		test_must_fail git merge-file --diff3 \
			-L "Temporary merge branch 1" \
			-L "$MAIN"  \
			-L "Temporary merge branch 2" \
			merged-once \
			base        \
			right       &&
		sed -e "s/^\([<|=>]\)/\1\1\1/" merged-once >vmb &&

		# Imitate X2 merge base, overwriting vmb.  Note that we
		# extend both sets of conflict markers to make them longer
		# with the sed command.
		cp left merged-twice &&
		test_must_fail git merge-file --diff3 \
			-L "Temporary merge branch 1" \
			-L "merged common ancestors"  \
			-L "Temporary merge branch 2" \
			merged-twice \
			vmb          \
			right        &&
		sed -e "s/^\([<|=>]\)/\1\1\1/" merged-twice >vmb &&

		# Compare :1:content to expected value
		git cat-file -p :1:content >actual &&
		test_cmp vmb actual &&

		# Determine expected content in final outer merge, compare to
		# what the merge generated.
		cp -f left expect &&
		test_must_fail git merge-file --diff3                      \
			-L "HEAD"  -L "merged common ancestors"  -L "R3^0" \
			expect     vmb                           right     &&
		test_cmp expect content
	)

Note: switching to 'L3^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 747e690 version L3 of content
  From inner merge:    Auto-merging content
  From inner merge:    CONFLICT (content): Merge conflict in content
  From inner merge:  Auto-merging content
  From inner merge:  CONFLICT (content): Merge conflict in content
Auto-merging content
CONFLICT (content): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
ok 40 - check virtual merge base with nested conflicts

# still have 3 known breakage(s)
# passed all remaining 37 test(s)
1..40
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6422-merge-rename-corner-cases.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/.git/
expecting success of 6422.1 'Does git preserve Gollum's precious artifact?': 
	test_setup_rename_delete_untracked &&
	(
		cd rename-delete-untracked &&

		test_must_fail git merge -s recursive rename-the-ring &&

		# Make sure git did not delete an untracked file
		test_path_is_file ring
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-delete-untracked/.git/
[main (root-commit) f8aae21] beginning
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ring
Switched to a new branch 'rename-the-ring'
[rename-the-ring a71a7c5] fullname
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename ring => one-ring-to-rule-them-all (100%)
Switched to branch 'people'
rm 'ring'
[people e4672ee] track-people-instead-of-objects
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 owner
 delete mode 100644 ring
CONFLICT (rename/delete): ring renamed to one-ring-to-rule-them-all in rename-the-ring, but deleted in HEAD.
Automatic merge failed; fix conflicts and then commit the result.
ok 1 - Does git preserve Gollum's precious artifact?

checking known breakage of 6422.2 'rename/modify/add-source conflict resolvable': 
	test_setup_rename_modify_add_source &&
	(
		cd rename-modify-add-source &&

		git checkout B^0 &&

		git merge -s recursive C^0 &&

		git rev-parse >expect \
			B:a   C:a     &&
		git rev-parse >actual \
			b     c       &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-modify-add-source/.git/
[main (root-commit) eef2933] A
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 a
Switched to a new branch 'B'
[B d291ce9] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'C'
[C 7609c5d] C
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+), 7 deletions(-)
 create mode 100644 b
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d291ce9 B
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
not ok 2 - rename/modify/add-source conflict resolvable # TODO known breakage

checking known breakage of 6422.3 'conflict caused if rename not detected': 
	test_setup_break_detection_1 &&
	(
		cd break-detection-1 &&

		git checkout -q C^0 &&
		git merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_line_count = 6 c &&
		git rev-parse >expect \
			B:a   A:b     &&
		git rev-parse >actual \
			:0:a  :0:b    &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/break-detection-1/.git/
[main (root-commit) 7188d2a] A
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 a
 create mode 100644 b
Switched to a new branch 'B'
[B 210328d] B
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+), 5 deletions(-)
 create mode 100644 c
Switched to a new branch 'C'
[C 3f41e07] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
not ok 3 - conflict caused if rename not detected # TODO known breakage

checking known breakage of 6422.4 'missed conflict if rename not detected': 
	test_setup_break_detection_2 &&
	(
		cd break-detection-2 &&

		git checkout -q E^0 &&
		test_must_fail git merge -s recursive D^0
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/break-detection-2/.git/
[main (root-commit) 7188d2a] A
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 a
 create mode 100644 b
Switched to a new branch 'D'
[D e118879] D
 Author: A U Thor <author@example.com>
 2 files changed, 7 insertions(+), 5 deletions(-)
 create mode 100644 c
Switched to a new branch 'E'
rm 'a'
[E 07bbe7e] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 5 deletions(-)
Merge made by the 'ort' strategy.
 c | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 c
test_must_fail: command succeeded: git merge -s recursive D^0
not ok 4 - missed conflict if rename not detected # TODO known breakage

checking known breakage of 6422.5 'detect rename/add-source and preserve all data': 
	test_setup_break_detection_3 &&
	(
		cd break-detection-3 &&

		git checkout B^0 &&

		git merge -s recursive C^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_file a &&
		test_path_is_file b &&

		git rev-parse >expect \
			A:a   C:a     &&
		git rev-parse >actual \
			:0:b  :0:a    &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/break-detection-3/.git/
[main (root-commit) 2c3ff52] A
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 a
Switched to a new branch 'B'
[B 7a8ac38] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
Switched to a new branch 'C'
[C 424023f] C
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+), 5 deletions(-)
 create mode 100644 b
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7a8ac38 B
Merge made by the 'ort' strategy.
 b | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
test_line_count: line count for out != 2
100644 323fae03f4606ea9991df8befbb2fca795e648fa 0	b
not ok 5 - detect rename/add-source and preserve all data # TODO known breakage

checking known breakage of 6422.6 'detect rename/add-source and preserve all data, merge other way': 
	test_setup_break_detection_3 &&
	(
		cd break-detection-3 &&

		git checkout C^0 &&

		git merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_file a &&
		test_path_is_file b &&

		git rev-parse >expect \
			A:a   C:a     &&
		git rev-parse >actual \
			:0:b  :0:a    &&
		test_cmp expect actual
	)

Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/break-detection-3/.git/
[detached HEAD 5da14de] A
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 a
fatal: tag 'A' already exists
not ok 6 - detect rename/add-source and preserve all data, merge other way # TODO known breakage

expecting success of 6422.7 'rename/directory conflict + clean content merge': 
	test_setup_rename_directory 1a &&
	(
		cd rename-directory-1a &&

		git checkout left-clean^0 &&

		test_must_fail git merge -s recursive right^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 1 out &&
		git ls-files -o >out &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_line_count = 1 out
		else
			test_line_count = 2 out
		fi &&

		echo 0 >expect &&
		git cat-file -p base:file >>expect &&
		echo 7 >>expect &&
		test_cmp expect newfile~HEAD &&

		test_path_is_file newfile/realfile &&
		test_path_is_file newfile~HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-directory-1a/.git/
[main (root-commit) 5d406c8] base
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 file
Switched to a new branch 'right'
[right dc837db] right
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile/realfile
Switched to a new branch 'left-conflict'
[left-conflict f852c67] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file => newfile (85%)
Switched to a new branch 'left-clean'
rm 'file'
[left-clean d514fb5] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file => newfile (85%)
Note: switching to 'left-clean^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d514fb5 left
CONFLICT (file/directory): directory in the way of newfile from HEAD; moving it to newfile~HEAD instead.
Auto-merging newfile~HEAD
Automatic merge failed; fix conflicts and then commit the result.
ok 7 - rename/directory conflict + clean content merge

expecting success of 6422.8 'rename/directory conflict + content merge conflict': 
	test_setup_rename_directory 1b &&
	(
		cd rename-directory-1b &&

		git reset --hard &&
		git clean -fdqx &&

		git checkout left-conflict^0 &&

		test_must_fail git merge -s recursive right^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_line_count = 1 out
		else
			test_line_count = 2 out
		fi &&

		git cat-file -p left-conflict:newfile >left &&
		git cat-file -p base:file    >base &&
		git cat-file -p right:file   >right &&
		test_must_fail git merge-file \
			-L "HEAD:newfile" \
			-L "" \
			-L "right^0:file" \
			left base right &&
		test_cmp left newfile~HEAD &&

		git rev-parse >expect   \
			base:file       left-conflict:newfile right:file &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git rev-parse >actual \
				:1:newfile~HEAD :2:newfile~HEAD :3:newfile~HEAD
		else
			git rev-parse >actual \
				:1:newfile      :2:newfile      :3:newfile
		fi &&
		test_cmp expect actual &&

		test_path_is_file newfile/realfile &&
		test_path_is_file newfile~HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-directory-1b/.git/
[main (root-commit) 5d406c8] base
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 file
Switched to a new branch 'right'
[right dc837db] right
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 newfile/realfile
Switched to a new branch 'left-conflict'
[left-conflict f852c67] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file => newfile (85%)
Switched to a new branch 'left-clean'
rm 'file'
[left-clean d514fb5] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file => newfile (85%)
HEAD is now at d514fb5 left
Note: switching to 'left-conflict^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f852c67 left
CONFLICT (file/directory): directory in the way of newfile from HEAD; moving it to newfile~HEAD instead.
Auto-merging newfile~HEAD
CONFLICT (content): Merge conflict in newfile~HEAD
Automatic merge failed; fix conflicts and then commit the result.
ok 8 - rename/directory conflict + content merge conflict

expecting success of 6422.9 'disappearing dir in rename/directory conflict handled': 
	test_setup_rename_directory_2 &&
	(
		cd rename-directory-2 &&

		git checkout left^0 &&

		git merge -s recursive right^0 &&

		git ls-files -s >out &&
		test_line_count = 1 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		echo 0 >expect &&
		git cat-file -p base:sub/file >>expect &&
		echo 7 >>expect &&
		test_cmp expect sub &&

		test_path_is_file sub
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-directory-2/.git/
[main (root-commit) e5bf87d] base
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 sub/file
Switched to a new branch 'right'
[right b3c3df6] right
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'left'
rm 'sub/file'
[left 8e220aa] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename sub/file => sub (85%)
Note: switching to 'left^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8e220aa left
Auto-merging sub
Merge made by the 'ort' strategy.
 sub | 1 +
 1 file changed, 1 insertion(+)
ok 9 - disappearing dir in rename/directory conflict handled

expecting success of 6422.10 'handle rename-with-content-merge vs. add': 
	test_setup_rename_with_content_merge_and_add AB &&
	(
		cd rename-with-content-merge-and-add-AB &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (.*/add)" out &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		# Also, make sure both unmerged entries are for "b"
		git ls-files -u b >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_missing a &&
		test_path_is_file b &&

		test_seq 0 6 >tmp &&
		git hash-object tmp >expect &&
		git rev-parse B:b >>expect &&
		git rev-parse >actual  \
			:2:b    :3:b   &&
		test_cmp expect actual &&

		# Test that the two-way merge in b is as expected
		git cat-file -p :2:b >>ours &&
		git cat-file -p :3:b >>theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "B^0" \
			ours empty theirs &&
		test_cmp ours b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-with-content-merge-and-add-AB/.git/
[main (root-commit) 4bec865] O
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 a
Switched to a new branch 'A'
[A fa96826] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename a => b (83%)
Switched to a new branch 'B'
[B 08800eb] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 b
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fa96826 A
CONFLICT (add/add): Merge conflict in b
ok 10 - handle rename-with-content-merge vs. add

expecting success of 6422.11 'handle rename-with-content-merge vs. add, merge other way': 
	test_setup_rename_with_content_merge_and_add BA &&
	(
		cd rename-with-content-merge-and-add-BA &&

		git reset --hard &&
		git clean -fdx &&

		git checkout B^0 &&

		test_must_fail git merge -s recursive A^0 >out &&
		test_i18ngrep "CONFLICT (.*/add)" out &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		# Also, make sure both unmerged entries are for "b"
		git ls-files -u b >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_missing a &&
		test_path_is_file b &&

		test_seq 0 6 >tmp &&
		git rev-parse B:b >expect &&
		git hash-object tmp >>expect &&
		git rev-parse >actual  \
			:2:b    :3:b   &&
		test_cmp expect actual &&

		# Test that the two-way merge in b is as expected
		git cat-file -p :2:b >>ours &&
		git cat-file -p :3:b >>theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "A^0" \
			ours empty theirs &&
		test_cmp ours b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-with-content-merge-and-add-BA/.git/
[main (root-commit) 4bec865] O
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 a
Switched to a new branch 'A'
[A fa96826] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename a => b (83%)
Switched to a new branch 'B'
[B 08800eb] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 b
HEAD is now at 08800eb B
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 08800eb B
CONFLICT (add/add): Merge conflict in b
ok 11 - handle rename-with-content-merge vs. add, merge other way

expecting success of 6422.12 'handle rename/rename (2to1) conflict correctly': 
	test_setup_rename_rename_2to1 &&
	(
		cd rename-rename-2to1 &&

		git checkout B^0 &&

		test_must_fail git merge -s recursive C^0 >out &&
		test_i18ngrep "CONFLICT (\(.*\)/\1)" out &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -u c >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_missing a &&
		test_path_is_missing b &&

		git rev-parse >expect  \
			C:a     B:b    &&
		git rev-parse >actual  \
			:2:c    :3:c   &&
		test_cmp expect actual &&

		# Test that the two-way merge in new_a is as expected
		git cat-file -p :2:c >>ours &&
		git cat-file -p :3:c >>theirs &&
		>empty &&
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "C^0" \
			ours empty theirs &&
		git hash-object c >actual &&
		git hash-object ours >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-rename-2to1/.git/
[main (root-commit) c6ec1f1] A
 Author: A U Thor <author@example.com>
 2 files changed, 10 insertions(+)
 create mode 100644 a
 create mode 100644 b
Switched to a new branch 'B'
[B b7837f7] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename a => c (100%)
Switched to a new branch 'C'
[C 5220d0a] C
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename b => c (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b7837f7 B
CONFLICT (add/add): Merge conflict in c
ok 12 - handle rename/rename (2to1) conflict correctly

expecting success of 6422.13 'merge has correct working tree contents': 
	test_setup_rename_rename_1to2 &&
	(
		cd rename-rename-1to2 &&

		git checkout C^0 &&

		test_must_fail git merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		test_path_is_missing a &&
		git rev-parse >expect   \
			A:a   A:a   A:a \
			A:a   A:a       &&
		git rev-parse >actual    \
			:1:a  :3:b  :2:c &&
		git hash-object >>actual \
			b     c          &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-rename-1to2/.git/
[main (root-commit) 11fad92] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Switched to a new branch 'B'
[B f879db6] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
Switched to a new branch 'C'
[C e1b84e2] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => c (100%)
Note: switching to 'C^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e1b84e2 C
CONFLICT (rename/rename): a renamed to c in HEAD and to b in B^0.
Automatic merge failed; fix conflicts and then commit the result.
ok 13 - merge has correct working tree contents

checking known breakage of 6422.14 'detect conflict with rename/rename(1to2)/add-source merge': 
	test_setup_rename_rename_1to2_add_source_1 &&
	(
		cd rename-rename-1to2-add-source-1 &&

		git checkout B^0 &&

		test_must_fail git merge -s recursive C^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect         \
			C:a   A:a   B:b   C:C &&
		git rev-parse >actual          \
			:3:a  :1:a  :2:b  :3:c &&
		test_cmp expect actual &&

		test_path_is_file a &&
		test_path_is_file b &&
		test_path_is_file c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-rename-1to2-add-source-1/.git/
[main (root-commit) eef2933] A
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 a
Switched to a new branch 'B'
[B 303177c] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
Switched to a new branch 'C'
[C 6d09113] C
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+), 7 deletions(-)
 create mode 100644 c
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 303177c B
Merge made by the 'ort' strategy.
 b | 8 +-------
 c | 7 +++++++
 2 files changed, 8 insertions(+), 7 deletions(-)
 create mode 100644 c
test_must_fail: command succeeded: git merge -s recursive C^0
not ok 14 - detect conflict with rename/rename(1to2)/add-source merge # TODO known breakage

checking known breakage of 6422.15 'rename/rename/add-source still tracks new a file': 
	test_setup_rename_rename_1to2_add_source_2 &&
	(
		cd rename-rename-1to2-add-source-2 &&

		git checkout C^0 &&
		git merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect \
			C:a   A:a     &&
		git rev-parse >actual \
			:0:a  :0:b    &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-rename-1to2-add-source-2/.git/
[main (root-commit) 43afe1f] base
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
Switched to a new branch 'B'
[B 866948e] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
Switched to a new branch 'C'
[C bbf1d8f] two
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 b
Note: switching to 'C^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bbf1d8f two
CONFLICT (modify/delete): a deleted in B^0 and modified in HEAD.  Version HEAD of a left in tree.
Automatic merge failed; fix conflicts and then commit the result.
not ok 15 - rename/rename/add-source still tracks new a file # TODO known breakage

expecting success of 6422.16 'rename/rename/add-dest merge still knows about conflicting file versions': 
	test_setup_rename_rename_1to2_add_dest &&
	(
		cd rename-rename-1to2-add-dest &&

		git checkout C^0 &&
		test_must_fail git merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u b >out &&
		test_line_count = 2 out &&
		git ls-files -u c >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >expect               \
			A:a   C:b   B:b   C:c   B:c &&
		git rev-parse >actual                \
			:1:a  :2:b  :3:b  :2:c  :3:c &&
		test_cmp expect actual &&

		# Record some contents for re-doing merges
		git cat-file -p A:a >stuff &&
		git cat-file -p C:b >important_info &&
		git cat-file -p B:c >precious_data &&
		>empty &&

		# Test the merge in b
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "B^0" \
			important_info empty stuff &&
		test_cmp important_info b &&

		# Test the merge in c
		test_must_fail git merge-file \
			-L "HEAD" \
			-L "" \
			-L "B^0" \
			stuff empty precious_data &&
		test_cmp stuff c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename-rename-1to2-add-dest/.git/
[main (root-commit) 5b8813c] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Switched to a new branch 'B'
[B bb6254e] one
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename a => b (100%)
 create mode 100644 c
Switched to a new branch 'C'
[C e1c123f] two
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 b
 rename a => c (100%)
Note: switching to 'C^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e1c123f two
CONFLICT (rename/rename): a renamed to c in HEAD and to b in B^0.
Auto-merging b
CONFLICT (add/add): Merge conflict in b
Auto-merging c
CONFLICT (add/add): Merge conflict in c
Automatic merge failed; fix conflicts and then commit the result.
ok 16 - rename/rename/add-dest merge still knows about conflicting file versions

expecting success of 6422.17 'rad-check: rename/add/delete conflict': 
	test_setup_rad &&
	(
		cd rad &&

		git checkout B^0 &&
		test_must_fail git merge -s recursive A^0 >out 2>err &&

		# Instead of requiring the output to contain one combined line
		#   CONFLICT (rename/add/delete)
		# or perhaps two lines:
		#   CONFLICT (rename/add): new file collides with rename target
		#   CONFLICT (rename/delete): rename source removed on other side
		# and instead of requiring "rename/add" instead of "add/add",
		# be flexible in the type of console output message(s) reported
		# for this particular case; we will be more stringent about the
		# contents of the index and working directory.
		test_i18ngrep "CONFLICT (.*/add)" out &&
		test_i18ngrep "CONFLICT (rename.*/delete)" out &&
		test_must_be_empty err &&

		git ls-files -s >file_count &&
		test_line_count = 2 file_count &&
		git ls-files -u >file_count &&
		test_line_count = 2 file_count &&
		git ls-files -o >file_count &&
		test_line_count = 3 file_count &&

		git rev-parse >actual \
			:2:bar :3:bar &&
		git rev-parse >expect \
			B:bar  A:bar  &&

		test_path_is_missing foo &&
		# bar should have two-way merged contents of the different
		# versions of bar; check that content from both sides is
		# present.
		grep original bar &&
		grep different bar
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rad/.git/
[main (root-commit) d2ac66b] original
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Switched to branch 'A'
rm 'foo'
[A 021778f] Remove foo, add bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 bar
 delete mode 100644 foo
Switched to branch 'B'
[B 73d5936] rename foo to bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename foo => bar (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 73d5936 rename foo to bar
CONFLICT (add/add): Merge conflict in bar
CONFLICT (rename/delete): foo renamed to bar in HEAD, but deleted in A^0.
original file
different file
ok 17 - rad-check: rename/add/delete conflict

expecting success of 6422.18 'rrdd-check: rename/rename(2to1)/delete/delete conflict': 
	test_setup_rrdd &&
	(
		cd rrdd &&

		git checkout A^0 &&
		test_must_fail git merge -s recursive B^0 >out 2>err &&

		# Instead of requiring the output to contain one combined line
		#   CONFLICT (rename/rename/delete/delete)
		# or perhaps two lines:
		#   CONFLICT (rename/rename): ...
		#   CONFLICT (rename/delete): info about pair 1
		#   CONFLICT (rename/delete): info about pair 2
		# and instead of requiring "rename/rename" instead of "add/add",
		# be flexible in the type of console output message(s) reported
		# for this particular case; we will be more stringent about the
		# contents of the index and working directory.
		test_i18ngrep "CONFLICT (\(.*\)/\1)" out &&
		test_i18ngrep "CONFLICT (rename.*delete)" out &&
		test_must_be_empty err &&

		git ls-files -s >file_count &&
		test_line_count = 2 file_count &&
		git ls-files -u >file_count &&
		test_line_count = 2 file_count &&
		git ls-files -o >file_count &&
		test_line_count = 3 file_count &&

		git rev-parse >actual \
			:2:baz :3:baz &&
		git rev-parse >expect \
			O:foo  O:bar  &&

		test_path_is_missing foo &&
		test_path_is_missing bar &&
		# baz should have two-way merged contents of the original
		# contents of foo and bar; check that content from both sides
		# is present.
		grep foo baz &&
		grep bar baz
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rrdd/.git/
[main (root-commit) 26bbce2] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
Switched to branch 'A'
rm 'bar'
[A 50d005d] Rename foo, remove bar
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 delete mode 100644 bar
 rename foo => baz (100%)
Switched to branch 'B'
rm 'foo'
[B 051a5bc] Rename bar, remove foo
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename bar => baz (100%)
 delete mode 100644 foo
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 50d005d Rename foo, remove bar
CONFLICT (add/add): Merge conflict in baz
CONFLICT (rename/delete): bar renamed to baz in B^0, but deleted in HEAD.
CONFLICT (rename/delete): foo renamed to baz in HEAD, but deleted in B^0.
foo
bar
ok 18 - rrdd-check: rename/rename(2to1)/delete/delete conflict

expecting success of 6422.19 'mod6-check: chains of rename/rename(1to2) and rename/rename(2to1)': 
	test_setup_mod6 &&
	(
		cd mod6 &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep "CONFLICT (rename/rename)" out &&
		test_must_be_empty err &&

		git ls-files -s >file_count &&
		test_line_count = 9 file_count &&
		git ls-files -u >file_count &&
		test_line_count = 9 file_count &&
		git ls-files -o >file_count &&
		test_line_count = 3 file_count &&

		test_seq 10 20 >merged-one &&
		test_seq 51 60 >merged-five &&
		# Determine what the merge of three would give us.
		test_seq 31 39 >three-base &&
		test_seq 31 40 >three-side-A &&
		test_seq 31 39 >three-side-B &&
		echo forty >>three-side-B &&
		test_must_fail git merge-file \
			-L "HEAD:four" \
			-L "" \
			-L "B^0:two" \
			three-side-A three-base three-side-B &&
		sed -e "s/^\([<=>]\)/\1\1/" three-side-A >merged-three &&

		# Verify the index is as expected
		git rev-parse >actual         \
			:2:two       :3:two   \
			:2:four      :3:four  \
			:2:six       :3:six   &&
		git hash-object >expect           \
			merged-one   merged-three \
			merged-three merged-five  \
			merged-five  merged-one   &&
		test_cmp expect actual &&

		git cat-file -p :2:two >expect &&
		git cat-file -p :3:two >other &&
		>empty &&
		test_must_fail git merge-file    \
			-L "HEAD"  -L ""  -L "B^0" \
			expect     empty  other &&
		test_cmp expect two &&

		git cat-file -p :2:four >expect &&
		git cat-file -p :3:four >other &&
		test_must_fail git merge-file    \
			-L "HEAD"  -L ""  -L "B^0" \
			expect     empty  other &&
		test_cmp expect four &&

		git cat-file -p :2:six >expect &&
		git cat-file -p :3:six >other &&
		test_must_fail git merge-file    \
			-L "HEAD"  -L ""  -L "B^0" \
			expect     empty  other &&
		test_cmp expect six
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/mod6/.git/
[main (root-commit) 4cc4b62] O
 Author: A U Thor <author@example.com>
 3 files changed, 27 insertions(+)
 create mode 100644 five
 create mode 100644 one
 create mode 100644 three
Switched to branch 'A'
[A dc12a0b] A
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 rename three => four (90%)
 rename five => six (100%)
 rename one => two (90%)
Switched to branch 'B'
[B 822cb48] B
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 rename five => four (90%)
 rename one => six (90%)
 rename three => two (81%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dc12a0b A
CONFLICT (rename/rename): five renamed to six in HEAD and to four in B^0.
CONFLICT (rename/rename): one renamed to two in HEAD and to six in B^0.
CONFLICT (rename/rename): three renamed to four in HEAD and to two in B^0.
ok 19 - mod6-check: chains of rename/rename(1to2) and rename/rename(2to1)

expecting success of 6422.20 'check simple rename/rename conflict': 
		test_setup_collision_conflict &&
		(
			cd simple_${sideL}_${sideR} &&

			git checkout L^0 &&

			# Merge must fail; there is a conflict
			test_must_fail git merge -s recursive R^0 &&

			# Make sure the index has the right number of entries
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			# Ensure we have the correct number of untracked files
			git ls-files -o >out &&
			test_line_count = 1 out &&

			# Nothing should have touched irrelevant_file
			git rev-parse >actual      \
				:0:irrelevant_file \
				:2:three           \
				:3:three           &&
			git rev-parse >expected        \
				main:irrelevant_file \
				file_v2                \
				file_v4                &&
			test_cmp expected actual &&

			# Make sure we have the correct merged contents for
			# three
			git show file_v1 >expected &&
			cat <<-\EOF >>expected &&
			<<<<<<< HEAD
			modification
			=======
			more stuff
			yet more stuff
			>>>>>>> R^0
			EOF

			test_cmp expected three
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/simple_rename_rename/.git/
Removing file_v1
Removing file_v2
Removing file_v3
Removing file_v4
[main (root-commit) e535363] initial
 Author: A U Thor <author@example.com>
 3 files changed, 21 insertions(+)
 create mode 100644 irrelevant_file
 create mode 100644 one
 create mode 100644 two
Switched to branch 'L'
[L 174eed7] L
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename one => three (100%)
Switched to branch 'R'
[R 70ee38b] R
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename two => three (100%)
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 174eed7 L
Auto-merging three
CONFLICT (add/add): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 20 - check simple rename/rename conflict

expecting success of 6422.21 'check simple rename/add conflict': 
		test_setup_collision_conflict &&
		(
			cd simple_${sideL}_${sideR} &&

			git checkout L^0 &&

			# Merge must fail; there is a conflict
			test_must_fail git merge -s recursive R^0 &&

			# Make sure the index has the right number of entries
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			# Ensure we have the correct number of untracked files
			git ls-files -o >out &&
			test_line_count = 1 out &&

			# Nothing should have touched irrelevant_file
			git rev-parse >actual      \
				:0:irrelevant_file \
				:2:three           \
				:3:three           &&
			git rev-parse >expected        \
				main:irrelevant_file \
				file_v2                \
				file_v4                &&
			test_cmp expected actual &&

			# Make sure we have the correct merged contents for
			# three
			git show file_v1 >expected &&
			cat <<-\EOF >>expected &&
			<<<<<<< HEAD
			modification
			=======
			more stuff
			yet more stuff
			>>>>>>> R^0
			EOF

			test_cmp expected three
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/simple_rename_add/.git/
Removing file_v1
Removing file_v2
Removing file_v3
Removing file_v4
[main (root-commit) 91a0f23] initial
 Author: A U Thor <author@example.com>
 2 files changed, 10 insertions(+)
 create mode 100644 irrelevant_file
 create mode 100644 one
Switched to branch 'L'
[L 1a5f997] L
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename one => three (100%)
Switched to branch 'R'
[R 321a394] R
 Author: A U Thor <author@example.com>
 2 files changed, 13 insertions(+)
 create mode 100644 three
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1a5f997 L
Auto-merging three
CONFLICT (add/add): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 21 - check simple rename/add conflict

expecting success of 6422.22 'check simple add/rename conflict': 
		test_setup_collision_conflict &&
		(
			cd simple_${sideL}_${sideR} &&

			git checkout L^0 &&

			# Merge must fail; there is a conflict
			test_must_fail git merge -s recursive R^0 &&

			# Make sure the index has the right number of entries
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			# Ensure we have the correct number of untracked files
			git ls-files -o >out &&
			test_line_count = 1 out &&

			# Nothing should have touched irrelevant_file
			git rev-parse >actual      \
				:0:irrelevant_file \
				:2:three           \
				:3:three           &&
			git rev-parse >expected        \
				main:irrelevant_file \
				file_v2                \
				file_v4                &&
			test_cmp expected actual &&

			# Make sure we have the correct merged contents for
			# three
			git show file_v1 >expected &&
			cat <<-\EOF >>expected &&
			<<<<<<< HEAD
			modification
			=======
			more stuff
			yet more stuff
			>>>>>>> R^0
			EOF

			test_cmp expected three
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/simple_add_rename/.git/
Removing file_v1
Removing file_v2
Removing file_v3
Removing file_v4
[main (root-commit) c609738] initial
 Author: A U Thor <author@example.com>
 2 files changed, 11 insertions(+)
 create mode 100644 irrelevant_file
 create mode 100644 two
Switched to branch 'L'
[L 8455a46] L
 Author: A U Thor <author@example.com>
 2 files changed, 12 insertions(+)
 create mode 100644 three
Switched to branch 'R'
[R 686dcd1] R
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename two => three (100%)
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8455a46 L
Auto-merging three
CONFLICT (add/add): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 22 - check simple add/rename conflict

expecting success of 6422.23 'check simple add/add conflict': 
		test_setup_collision_conflict &&
		(
			cd simple_${sideL}_${sideR} &&

			git checkout L^0 &&

			# Merge must fail; there is a conflict
			test_must_fail git merge -s recursive R^0 &&

			# Make sure the index has the right number of entries
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			# Ensure we have the correct number of untracked files
			git ls-files -o >out &&
			test_line_count = 1 out &&

			# Nothing should have touched irrelevant_file
			git rev-parse >actual      \
				:0:irrelevant_file \
				:2:three           \
				:3:three           &&
			git rev-parse >expected        \
				main:irrelevant_file \
				file_v2                \
				file_v4                &&
			test_cmp expected actual &&

			# Make sure we have the correct merged contents for
			# three
			git show file_v1 >expected &&
			cat <<-\EOF >>expected &&
			<<<<<<< HEAD
			modification
			=======
			more stuff
			yet more stuff
			>>>>>>> R^0
			EOF

			test_cmp expected three
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/simple_add_add/.git/
Removing file_v1
Removing file_v2
Removing file_v3
Removing file_v4
[main (root-commit) 8052021] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 irrelevant_file
Switched to branch 'L'
[L 0706354] L
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 three
Switched to branch 'R'
[R 42323fa] R
 Author: A U Thor <author@example.com>
 1 file changed, 12 insertions(+)
 create mode 100644 three
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0706354 L
Auto-merging three
CONFLICT (add/add): Merge conflict in three
Automatic merge failed; fix conflicts and then commit the result.
ok 23 - check simple add/add conflict

expecting success of 6422.24 'check nested conflicts from rename/rename(2to1)': 
	test_setup_nested_conflicts_from_rename_rename &&
	(
		cd nested_conflicts_from_rename_rename &&

		git checkout L^0 &&

		# Merge must fail; there is a conflict
		test_must_fail git merge -s recursive R^0 &&

		# Make sure the index has the right number of entries
		git ls-files -s >out &&
		test_line_count = 2 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		# Ensure we have the correct number of untracked files
		git ls-files -o >out &&
		test_line_count = 1 out &&

		# Compare :2:three to expected values
		git cat-file -p main:one >base &&
		git cat-file -p L:three >ours &&
		git cat-file -p R:one >theirs &&
		test_must_fail git merge-file    \
			-L "HEAD:three"  -L ""  -L "R^0:one" \
			ours             base   theirs &&
		sed -e "s/^\([<=>]\)/\1\1/" ours >L-three &&
		git cat-file -p :2:three >expect &&
		test_cmp expect L-three &&

		# Compare :2:three to expected values
		git cat-file -p main:two >base &&
		git cat-file -p L:two >ours &&
		git cat-file -p R:three >theirs &&
		test_must_fail git merge-file    \
			-L "HEAD:two"  -L ""  -L "R^0:three" \
			ours           base   theirs &&
		sed -e "s/^\([<=>]\)/\1\1/" ours >R-three &&
		git cat-file -p :3:three >expect &&
		test_cmp expect R-three &&

		# Compare three to expected contents
		>empty &&
		test_must_fail git merge-file    \
			-L "HEAD"  -L ""  -L "R^0" \
			L-three    empty  R-three &&
		test_cmp three L-three
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/nested_conflicts_from_rename_rename/.git/
[main (root-commit) 8e30406] english
 Author: A U Thor <author@example.com>
 2 files changed, 22 insertions(+)
 create mode 100644 one
 create mode 100644 two
Switched to branch 'L'
rm 'one'
rm 'two'
[L f3d294e] spanish
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename one => three (98%)
Switched to branch 'R'
rm 'one'
rm 'two'
[R 413cf6f] german
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename two => three (98%)
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f3d294e spanish
Auto-merging one
CONFLICT (rename involved in collision): rename of one -> three has content conflicts AND collides with another path; this may result in nested conflict markers.
CONFLICT (rename involved in collision): rename of two -> three has content conflicts AND collides with another path; this may result in nested conflict markers.
Auto-merging three
CONFLICT (add/add): Merge conflict in three
Auto-merging two
Automatic merge failed; fix conflicts and then commit the result.
ok 24 - check nested conflicts from rename/rename(2to1)

expecting success of 6422.25 'rename/rename(1to2) with a binary file': 
	test_setup_rename_rename_1_to_2_binary &&
	(
		cd rename_rename_1_to_2_binary &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 &&

		# Make sure the index has the right number of entries
		git ls-files -s >actual &&
		test_line_count = 4 actual &&

		git rev-parse A:orig-A B:orig-B >expect &&
		git hash-object orig-A orig-B >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6422-merge-rename-corner-cases/rename_rename_1_to_2_binary/.git/
[main (root-commit) 2af6002] orig
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitattributes
 create mode 100644 orig
Switched to branch 'A'
[A 7acac62] orig-A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename orig => orig-A (87%)
Switched to branch 'B'
[B b674041] orig-B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename orig => orig-B (91%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7acac62 orig-A
warning: Cannot merge binary files: orig (HEAD:orig-A vs. B^0:orig-B)
Auto-merging orig
CONFLICT (rename/rename): orig renamed to orig-A in HEAD and to orig-B in B^0.
Automatic merge failed; fix conflicts and then commit the result.
ok 25 - rename/rename(1to2) with a binary file

# still have 7 known breakage(s)
# passed all remaining 18 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6428-merge-conflicts-sparse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6428-merge-conflicts-sparse/.git/
expecting success of 6428.1 'conflicting entries written to worktree even if sparse': 
	test_setup_numerals plain &&
	(
		cd numerals_plain &&

		git checkout A^0 &&

		test_path_is_file README &&
		test_path_is_file numerals &&

		git sparse-checkout init &&
		git sparse-checkout set --no-cone README &&

		test_path_is_file README &&
		test_path_is_missing numerals &&

		test_must_fail git merge -s recursive B^0 &&

		git ls-files -t >index_files &&
		test_cmp expected-index index_files &&

		test_path_is_file README &&
		test_path_is_file numerals &&

		test_cmp expected-merge numerals &&

		# 4 other files:
		#   * expected-merge
		#   * expected-index
		#   * index_files
		#   * others
		git ls-files -o >others &&
		test_line_count = 4 others
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6428-merge-conflicts-sparse/numerals_plain/.git/
[master (root-commit) e14c99c] O
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+)
 create mode 100644 README
 create mode 100644 numerals
Switched to branch 'A'
[A 016e05e] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 5ca8904] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 016e05e A
warning: pass a leading slash before paths such as 'README' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
Auto-merging numerals
CONFLICT (content): Merge conflict in numerals
Automatic merge failed; fix conflicts and then commit the result.
ok 1 - conflicting entries written to worktree even if sparse

expecting success of 6428.2 'present-despite-SKIP_WORKTREE handled reasonably': 
	test_setup_numerals in_the_way &&
	(
		cd numerals_in_the_way &&

		git checkout A^0 &&

		test_path_is_file README &&
		test_path_is_file numerals &&

		git sparse-checkout init &&
		git sparse-checkout set --no-cone README &&

		test_path_is_file README &&
		test_path_is_missing numerals &&

		echo foobar >numerals &&

		test_must_fail git merge -s recursive B^0 &&

		test_path_is_missing .git/MERGE_HEAD &&

		test_path_is_file numerals &&

		# numerals should still have "foobar" in it
		echo foobar >expect &&
		test_cmp expect numerals
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6428-merge-conflicts-sparse/numerals_in_the_way/.git/
[master (root-commit) e14c99c] O
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+)
 create mode 100644 README
 create mode 100644 numerals
Switched to branch 'A'
[A 016e05e] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 5ca8904] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 016e05e A
warning: pass a leading slash before paths such as 'README' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
error: Your local changes to the following files would be overwritten by merge:
	numerals
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
ok 2 - present-despite-SKIP_WORKTREE handled reasonably

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6427-diff3-conflict-markers.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/.git/
expecting success of 6427.1 'setup no merge base': 
	git init no_merge_base &&
	(
		cd no_merge_base &&

		git checkout -b L &&
		test_commit A content A &&

		git checkout --orphan R &&
		test_commit B content B
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/no_merge_base/.git/
Switched to a new branch 'L'
[L (root-commit) ccbdd10] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content
Switched to a new branch 'R'
[R (root-commit) 8e39672] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 content
ok 1 - setup no merge base

expecting success of 6427.2 'check no merge base': 
	(
		cd no_merge_base &&

		git checkout L^0 &&

		test_must_fail git -c merge.conflictstyle=diff3 merge --allow-unrelated-histories -s recursive R^0 &&

		grep "|||||| empty tree" content
	)

Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ccbdd10 A
Auto-merging content
CONFLICT (add/add): Merge conflict in content
Automatic merge failed; fix conflicts and then commit the result.
||||||| empty tree
ok 2 - check no merge base

expecting success of 6427.3 'setup unique merge base': 
	git init unique_merge_base &&
	(
		cd unique_merge_base &&

		test_commit base content "1
2
3
4
5
" &&

		git branch L &&
		git branch R &&

		git checkout L &&
		test_commit L content "1
2
3
4
5
7" &&

		git checkout R &&
		git rm content &&
		test_commit R renamed "1
2
3
4
5
six"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/unique_merge_base/.git/
[main (root-commit) 8b7da6e] base
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 content
Switched to branch 'L'
[L e1c672f] L
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'R'
rm 'content'
[R 17f77e6] R
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename content => renamed (71%)
ok 3 - setup unique merge base

expecting success of 6427.4 'check unique merge base': 
	(
		cd unique_merge_base &&

		git checkout L^0 &&
		MAIN=$(git rev-parse --short main) &&

		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&

		grep "|||||| $MAIN:content" renamed
	)

warning: refname 'L' is ambiguous.
warning: refname 'L' is ambiguous.
Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e1c672f L
warning: refname 'R' is ambiguous.
warning: refname 'R' is ambiguous.
Auto-merging renamed
CONFLICT (content): Merge conflict in renamed
Automatic merge failed; fix conflicts and then commit the result.
||||||| 8b7da6e:content
ok 4 - check unique merge base

expecting success of 6427.5 'setup multiple merge bases': 
	git init multiple_merge_bases &&
	(
		cd multiple_merge_bases &&

		test_commit initial content "1
2
3
4
5" &&

		git branch L &&
		git branch R &&

		# Create L1
		git checkout L &&
		test_commit L1 content "0
1
2
3
4
5" &&

		# Create R1
		git checkout R &&
		test_commit R1 content "1
2
3
4
5
6" &&

		# Create L2
		git checkout L &&
		git merge R1 &&

		# Create R2
		git checkout R &&
		git merge L1 &&

		# Create L3
		git checkout L &&
		test_commit L3 content "0
1
2
3
4
5
A" &&

		# Create R3
		git checkout R &&
		git rm content &&
		test_commit R3 renamed "0
2
3
4
5
six"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/multiple_merge_bases/.git/
[main (root-commit) 79a87bb] initial
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 content
Switched to branch 'L'
[L 2e587ed] L1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'R'
[R 6e9e69f] R1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'L'
Auto-merging content
Merge made by the 'ort' strategy.
 content | 1 +
 1 file changed, 1 insertion(+)
Switched to branch 'R'
Auto-merging content
Merge made by the 'ort' strategy.
 content | 1 +
 1 file changed, 1 insertion(+)
Switched to branch 'L'
[L 614f030] L3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'R'
rm 'content'
[R 8a53b94] R3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
 rename content => renamed (71%)
ok 5 - setup multiple merge bases

expecting success of 6427.6 'check multiple merge bases': 
	(
		cd multiple_merge_bases &&

		git checkout L^0 &&

		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&

		grep "|||||| merged common ancestors:content" renamed
	)

Note: switching to 'L^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 614f030 L3
  From inner merge:  Auto-merging content
Auto-merging renamed
CONFLICT (content): Merge conflict in renamed
Automatic merge failed; fix conflicts and then commit the result.
||||||| merged common ancestors:content
ok 6 - check multiple merge bases

expecting success of 6427.7 'rebase --merge describes parent of commit being picked': 
	git init rebase &&
	(
		cd rebase &&
		test_commit base file &&
		test_commit main file &&
		git checkout -b side HEAD^ &&
		test_commit side file &&
		test_must_fail git -c merge.conflictstyle=diff3 rebase --merge main &&
		grep "||||||| parent of" file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/rebase/.git/
[main (root-commit) 215235d] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 9d7b901] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
[side 748f431] side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 748f431... side
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 748f431... side
||||||| parent of 748f431 (side)
ok 7 - rebase --merge describes parent of commit being picked

expecting success of 6427.8 'rebase --apply describes fake ancestor base': 
	(
		cd rebase &&
		git rebase --abort &&
		test_must_fail git -c merge.conflictstyle=diff3 rebase --apply main &&
		grep "||||||| constructed merge base" file
	)

warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
First, rewinding head to replay your work on top of it...
Applying: side
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
9d7b901 main
virtual side
found 1 common ancestor:
virtual 6d5f482d15035cdd7733b1b551d1fead28d22592
Auto-merging file
CONFLICT (content): Merge conflict in file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 side
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
||||||| constructed merge base
ok 8 - rebase --apply describes fake ancestor base

expecting success of 6427.9 'check zdiff3 markers': 
	test_setup_zdiff3 &&
	(
		cd zdiff3 &&

		git checkout left^0 &&

		base=$(git rev-parse --short HEAD^1) &&
		test_must_fail git -c merge.conflictstyle=zdiff3 merge -s recursive right^0 &&

		test_write_lines 1 2 3 4 A \
				 "<<<<<<< HEAD" B C D \
				 "||||||| $base" 5 6 \
				 ======= X C Y \
				 ">>>>>>> right^0" \
				 E 7 8 9 \
				 >expect &&
		test_cmp expect basic &&

		test_write_lines 1 2 3 \
				 "<<<<<<< HEAD" CC \
				 "||||||| $base" AA \
				 ======= EE \
				 ">>>>>>> right^0" \
				 4 5 \
				 "<<<<<<< HEAD" DD \
				 "||||||| $base" BB \
				 ======= FF \
				 ">>>>>>> right^0" \
				 6 7 8 \
				 >expect &&
		test_cmp expect middle-common &&

		test_write_lines 1 2 3 4 A B C \
				 "<<<<<<< HEAD" D E F \
				 "||||||| $base" 5 6 \
				 ======= 5 6 \
				 ">>>>>>> right^0" \
				 G H I J 7 8 9 \
				 >expect &&
		test_cmp expect interesting &&

		# Not passing this one yet; the common "B C" lines is still
		# being left in the conflict blocks on the left and right
		# sides.
		test_write_lines 1 2 3 4 \
				 "<<<<<<< HEAD" X A \
				 "||||||| $base" 5 6 \
				 ======= Y A B C \
				 ">>>>>>> right^0" \
				 B C 7 8 9 \
				 >expect &&
		test_cmp expect evil
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6427-diff3-conflict-markers/zdiff3/.git/
[main (root-commit) 682cee2] base
 Author: A U Thor <author@example.com>
 4 files changed, 37 insertions(+)
 create mode 100644 basic
 create mode 100644 evil
 create mode 100644 interesting
 create mode 100644 middle-common
Switched to branch 'left'
[left 8ffb720] letters
 Author: A U Thor <author@example.com>
 4 files changed, 21 insertions(+), 8 deletions(-)
Switched to branch 'right'
[right 11127f3] permuted
 Author: A U Thor <author@example.com>
 4 files changed, 20 insertions(+), 6 deletions(-)
Note: switching to 'left^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8ffb720 letters
Auto-merging basic
CONFLICT (content): Merge conflict in basic
Auto-merging evil
CONFLICT (content): Merge conflict in evil
Auto-merging interesting
CONFLICT (content): Merge conflict in interesting
Auto-merging middle-common
CONFLICT (content): Merge conflict in middle-common
Automatic merge failed; fix conflicts and then commit the result.
ok 9 - check zdiff3 markers

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6426-merge-skip-unneeded-updates.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/.git/
expecting success of 6426.1 '1a-L: Modify(A)/Modify(B), change on B subset of A': 
	test_setup_1a L &&
	(
		cd 1a_L &&

		git checkout A^0 &&

		test-tool chmtime --get -3600 b >old-mtime &&

		GIT_MERGE_VERBOSITY=3 git merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		# Make sure b was NOT updated
		test-tool chmtime --get b >new-mtime &&
		test_cmp old-mtime new-mtime &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:b &&
		git rev-parse >expect A:b &&
		test_cmp expect actual &&

		git hash-object b   >actual &&
		git rev-parse   A:b >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/1a_L/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A 14800cf] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 14800cf A
ok 1 - 1a-L: Modify(A)/Modify(B), change on B subset of A

expecting success of 6426.2 '1a-R: Modify(A)/Modify(B), change on B subset of A': 
	test_setup_1a R &&
	(
		cd 1a_R &&

		git checkout B^0 &&

		test-tool chmtime --get -3600 b >old-mtime &&
		GIT_MERGE_VERBOSITY=3 git merge -s recursive A^0 >out 2>err &&

		# Make sure b WAS updated
		test-tool chmtime --get b >new-mtime &&
		test $(cat old-mtime) -lt $(cat new-mtime) &&

		test_must_be_empty err &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:b &&
		git rev-parse >expect A:b &&
		test_cmp expect actual &&

		git hash-object b   >actual &&
		git rev-parse   A:b >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/1a_R/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A 14800cf] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dfd7e13 B
ok 2 - 1a-R: Modify(A)/Modify(B), change on B subset of A

expecting success of 6426.3 '2a-L: Modify/rename, merge into modify side': 
	test_setup_2a L &&
	(
		cd 2a_L &&

		git checkout A^0 &&

		test_path_is_missing c &&
		GIT_MERGE_VERBOSITY=3 git merge -s recursive B^0 >out 2>err &&

		test_path_is_file c &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:c &&
		git rev-parse >expect A:b &&
		test_cmp expect actual &&

		git hash-object c   >actual &&
		git rev-parse   A:b >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:b &&
		test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/2a_L/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A c2d59c7] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 6283fcf] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at c2d59c7 A
fatal: path 'b' does not exist in 'HEAD'
HEAD:b
ok 3 - 2a-L: Modify/rename, merge into modify side

expecting success of 6426.4 '2a-R: Modify/rename, merge into rename side': 
	test_setup_2a R &&
	(
		cd 2a_R &&

		git checkout B^0 &&

		test-tool chmtime --get -3600 c >old-mtime &&
		GIT_MERGE_VERBOSITY=3 git merge -s recursive A^0 >out 2>err &&

		# Make sure c WAS updated
		test-tool chmtime --get c >new-mtime &&
		test $(cat old-mtime) -lt $(cat new-mtime) &&

		test_must_be_empty err &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:c &&
		git rev-parse >expect A:b &&
		test_cmp expect actual &&

		git hash-object c   >actual &&
		git rev-parse   A:b >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:b &&
		test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/2a_R/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A c2d59c7] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 6283fcf] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6283fcf B
fatal: path 'b' does not exist in 'HEAD'
HEAD:b
ok 4 - 2a-R: Modify/rename, merge into rename side

expecting success of 6426.5 '2b-L: Rename+Mod(A)/Mod(B), B mods subset of A': 
	test_setup_2b L &&
	(
		cd 2b_L &&

		git checkout A^0 &&

		test-tool chmtime --get -3600 c >old-mtime &&
		GIT_MERGE_VERBOSITY=3 git merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		# Make sure c WAS updated
		test-tool chmtime --get c >new-mtime &&
		test_cmp old-mtime new-mtime &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:c &&
		git rev-parse >expect A:c &&
		test_cmp expect actual &&

		git hash-object c   >actual &&
		git rev-parse   A:c >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:b &&
		test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/2b_L/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A fed518a] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename b => c (70%)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fed518a A
fatal: path 'b' does not exist in 'HEAD'
HEAD:b
ok 5 - 2b-L: Rename+Mod(A)/Mod(B), B mods subset of A

expecting success of 6426.6 '2b-R: Rename+Mod(A)/Mod(B), B mods subset of A': 
	test_setup_2b R &&
	(
		cd 2b_R &&

		git checkout B^0 &&

		test_path_is_missing c &&
		GIT_MERGE_VERBOSITY=3 git merge -s recursive A^0 >out 2>err &&

		# Make sure c now present (and thus was updated)
		test_path_is_file c &&

		test_must_be_empty err &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual HEAD:c &&
		git rev-parse >expect A:c &&
		test_cmp expect actual &&

		git hash-object c   >actual &&
		git rev-parse   A:c >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:b &&
		test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/2b_R/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A fed518a] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename b => c (70%)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dfd7e13 B
fatal: path 'b' does not exist in 'HEAD'
HEAD:b
ok 6 - 2b-R: Rename+Mod(A)/Mod(B), B mods subset of A

expecting success of 6426.7 '2c: Modify b & add c VS rename b->c': 
	test_setup_2c &&
	(
		cd 2c &&

		git checkout A^0 &&

		test-tool chmtime --get -3600 c >old-mtime &&
		GIT_MERGE_VERBOSITY=3 &&
		export GIT_MERGE_VERBOSITY &&
		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep "CONFLICT (.*/add):" out &&
		test_must_be_empty err &&

		# Make sure c WAS updated
		test-tool chmtime --get c >new-mtime &&
		test $(cat old-mtime) -lt $(cat new-mtime)

		# FIXME: rename/add conflicts are horribly broken right now;
		# when I get back to my patch series fixing it and
		# rename/rename(2to1) conflicts to bring them in line with
		# how add/add conflicts behave, then checks like the below
		# could be added.  But that patch series is waiting until
		# the rename-directory-detection series lands, which this
		# is part of.  And in the mean time, I do not want to further
		# enforce broken behavior.  So for now, the main test is the
		# one above that err is an empty file.

		#git ls-files -s >index_files &&
		#test_line_count = 2 index_files &&

		#git rev-parse >actual :2:c :3:c &&
		#git rev-parse >expect A:b  A:c  &&
		#test_cmp expect actual &&

		#git cat-file -p A:b >>merged &&
		#git cat-file -p A:c >>merge-me &&
		#>empty &&
		#test_must_fail git merge-file \
		#	-L "Temporary merge branch 1" \
		#	-L "" \
		#	-L "Temporary merge branch 2" \
		#	merged empty merge-me &&
		#sed -e "s/^\([<=>]\)/\1\1\1/" merged >merged-internal &&

		#git hash-object c               >actual &&
		#git hash-object merged-internal >expect &&
		#test_cmp expect actual &&

		#test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/2c/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A edf631f] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 c
Switched to branch 'B'
[B 6283fcf] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at edf631f A
CONFLICT (add/add): Merge conflict in c
ok 7 - 2c: Modify b & add c VS rename b->c

expecting success of 6426.8 '3a-L: bq_1->foo/bq_2 on A, foo/->bar/ on B': 
	test_setup_3a L &&
	(
		cd 3a_L &&

		git checkout A^0 &&

		test_path_is_missing bar/bq &&
		GIT_MERGE_VERBOSITY=3 git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		test_path_is_file bar/bq &&

		git ls-files -s >index_files &&
		test_line_count = 2 index_files &&

		git rev-parse >actual HEAD:bar/bq HEAD:bar/whatever &&
		git rev-parse >expect A:foo/bq    A:foo/whatever &&
		test_cmp expect actual &&

		git hash-object bar/bq   bar/whatever   >actual &&
		git rev-parse   A:foo/bq A:foo/whatever >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:bq HEAD:foo/bq &&
		test_path_is_missing bq &&
		test_path_is_missing foo/bq &&
		test_path_is_missing foo/whatever
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/3a_L/.git/
[master (root-commit) 1e2aa57] O
 Author: A U Thor <author@example.com>
 2 files changed, 21 insertions(+)
 create mode 100644 bq
 create mode 100644 foo/whatever
Switched to branch 'A'
[A 5576138] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename bq => foo/bq (87%)
Switched to branch 'B'
[B 69c0854] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {foo => bar}/whatever (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5576138 A
fatal: path 'bq' does not exist in 'HEAD'
HEAD:bq
ok 8 - 3a-L: bq_1->foo/bq_2 on A, foo/->bar/ on B

expecting success of 6426.9 '3a-R: bq_1->foo/bq_2 on A, foo/->bar/ on B': 
	test_setup_3a R &&
	(
		cd 3a_R &&

		git checkout B^0 &&

		test_path_is_missing bar/bq &&
		GIT_MERGE_VERBOSITY=3 git -c merge.directoryRenames=true merge -s recursive A^0 >out 2>err &&

		test_must_be_empty err &&

		test_path_is_file bar/bq &&

		git ls-files -s >index_files &&
		test_line_count = 2 index_files &&

		git rev-parse >actual HEAD:bar/bq HEAD:bar/whatever &&
		git rev-parse >expect A:foo/bq    A:foo/whatever &&
		test_cmp expect actual &&

		git hash-object bar/bq   bar/whatever   >actual &&
		git rev-parse   A:foo/bq A:foo/whatever >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:bq HEAD:foo/bq &&
		test_path_is_missing bq &&
		test_path_is_missing foo/bq &&
		test_path_is_missing foo/whatever
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/3a_R/.git/
[master (root-commit) 1e2aa57] O
 Author: A U Thor <author@example.com>
 2 files changed, 21 insertions(+)
 create mode 100644 bq
 create mode 100644 foo/whatever
Switched to branch 'A'
[A 5576138] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename bq => foo/bq (87%)
Switched to branch 'B'
[B 69c0854] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {foo => bar}/whatever (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 69c0854 B
fatal: path 'bq' does not exist in 'HEAD'
HEAD:bq
ok 9 - 3a-R: bq_1->foo/bq_2 on A, foo/->bar/ on B

expecting success of 6426.10 '3b-L: bq_1->foo/bq_2 on A, foo/->bar/ on B': 
	test_setup_3b L &&
	(
		cd 3b_L &&

		git checkout A^0 &&

		test_path_is_missing bar/bq &&
		GIT_MERGE_VERBOSITY=3 git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		test_path_is_file bar/bq &&

		git ls-files -s >index_files &&
		test_line_count = 2 index_files &&

		git rev-parse >actual HEAD:bar/bq HEAD:bar/whatever &&
		git rev-parse >expect B:bq        A:foo/whatever &&
		test_cmp expect actual &&

		git hash-object bar/bq bar/whatever   >actual &&
		git rev-parse   B:bq   A:foo/whatever >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:bq HEAD:foo/bq &&
		test_path_is_missing bq &&
		test_path_is_missing foo/bq &&
		test_path_is_missing foo/whatever
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/3b_L/.git/
[master (root-commit) 1e2aa57] O
 Author: A U Thor <author@example.com>
 2 files changed, 21 insertions(+)
 create mode 100644 bq
 create mode 100644 foo/whatever
Switched to branch 'A'
[A d02b71c] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename bq => foo/bq (100%)
Switched to branch 'B'
[B 2f47892] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename {foo => bar}/whatever (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d02b71c A
fatal: path 'bq' does not exist in 'HEAD'
HEAD:bq
ok 10 - 3b-L: bq_1->foo/bq_2 on A, foo/->bar/ on B

expecting success of 6426.11 '3b-R: bq_1->foo/bq_2 on A, foo/->bar/ on B': 
	test_setup_3b R &&
	(
		cd 3b_R &&

		git checkout B^0 &&

		test_path_is_missing bar/bq &&
		GIT_MERGE_VERBOSITY=3 git -c merge.directoryRenames=true merge -s recursive A^0 >out 2>err &&

		test_must_be_empty err &&

		test_path_is_file bar/bq &&

		git ls-files -s >index_files &&
		test_line_count = 2 index_files &&

		git rev-parse >actual HEAD:bar/bq HEAD:bar/whatever &&
		git rev-parse >expect B:bq        A:foo/whatever &&
		test_cmp expect actual &&

		git hash-object bar/bq bar/whatever   >actual &&
		git rev-parse   B:bq   A:foo/whatever >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:bq HEAD:foo/bq &&
		test_path_is_missing bq &&
		test_path_is_missing foo/bq &&
		test_path_is_missing foo/whatever
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/3b_R/.git/
[master (root-commit) 1e2aa57] O
 Author: A U Thor <author@example.com>
 2 files changed, 21 insertions(+)
 create mode 100644 bq
 create mode 100644 foo/whatever
Switched to branch 'A'
[A d02b71c] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename bq => foo/bq (100%)
Switched to branch 'B'
[B 2f47892] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename {foo => bar}/whatever (100%)
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2f47892 B
fatal: path 'bq' does not exist in 'HEAD'
HEAD:bq
ok 11 - 3b-R: bq_1->foo/bq_2 on A, foo/->bar/ on B

expecting success of 6426.12 '4a: Change on A, change on B subset of A, dirty mods present': 
	test_setup_4a &&
	(
		cd 4a &&

		git checkout A^0 &&
		echo "File rewritten" >b &&

		test-tool chmtime --get -3600 b >old-mtime &&

		GIT_MERGE_VERBOSITY=3 git merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		# Make sure b was NOT updated
		test-tool chmtime --get b >new-mtime &&
		test_cmp old-mtime new-mtime &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual :0:b &&
		git rev-parse >expect A:b &&
		test_cmp expect actual &&

		git hash-object b >actual &&
		echo "File rewritten" | git hash-object --stdin >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/4a/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A 14800cf] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 14800cf A
ok 12 - 4a: Change on A, change on B subset of A, dirty mods present

expecting success of 6426.13 '4b: Rename+Mod(A)/Mod(B), change on B subset of A, dirty mods present': 
	test_setup_4b &&
	(
		cd 4b &&

		git checkout A^0 &&
		echo "File rewritten" >c &&

		test-tool chmtime --get -3600 c >old-mtime &&

		GIT_MERGE_VERBOSITY=3 git merge -s recursive B^0 >out 2>err &&

		test_must_be_empty err &&

		# Make sure c was NOT updated
		test-tool chmtime --get c >new-mtime &&
		test_cmp old-mtime new-mtime &&

		git ls-files -s >index_files &&
		test_line_count = 1 index_files &&

		git rev-parse >actual :0:c &&
		git rev-parse >expect A:c &&
		test_cmp expect actual &&

		git hash-object c >actual &&
		echo "File rewritten" | git hash-object --stdin >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:b &&
		test_path_is_missing b
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6426-merge-skip-unneeded-updates/4b/.git/
[master (root-commit) 105387b] O
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 b
Switched to branch 'A'
[A fed518a] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename b => c (70%)
Switched to branch 'B'
[B dfd7e13] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fed518a A
fatal: path 'b' does not exist in 'HEAD'
HEAD:b
ok 13 - 4b: Rename+Mod(A)/Mod(B), change on B subset of A, dirty mods present

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6431-merge-criscross.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6431-merge-criscross/.git/
expecting success of 6431.1 'setup repo with criss-cross history': 
	mkdir data &&

	# create a bunch of files
	n=1 &&
	while test $n -le 10
	do
		echo $n > data/$n &&
		n=$(($n+1)) ||
		return 1
	done &&

	# check them in
	git add data &&
	git commit -m A &&
	git branch A &&

	# a file in one branch
	git checkout -b B A &&
	git rm data/9 &&
	git add data &&
	git commit -m B &&

	# with a branch off of it
	git branch D &&

	# put some commits on D
	git checkout D &&
	echo testD > data/testD &&
	git add data &&
	git commit -m D &&

	# back up to the top, create another branch and cause
	# a rename conflict with the file we deleted earlier
	git checkout -b C A &&
	git mv data/9 data/new-9 &&
	git add data &&
	git commit -m C &&

	# with a branch off of it
	git branch E &&

	# put a commit on E
	git checkout E &&
	echo testE > data/testE &&
	git add data &&
	git commit -m E &&

	# now, merge E into B
	git checkout B &&
	test_must_fail git merge E &&
	# force-resolve
	git add data &&
	git commit -m F &&
	git branch F &&

	# and merge D into C
	git checkout C &&
	test_must_fail git merge D &&
	# force-resolve
	git add data &&
	git commit -m G &&
	git branch G

[master (root-commit) 7287aa7] A
 Author: A U Thor <author@example.com>
 10 files changed, 10 insertions(+)
 create mode 100644 data/1
 create mode 100644 data/10
 create mode 100644 data/2
 create mode 100644 data/3
 create mode 100644 data/4
 create mode 100644 data/5
 create mode 100644 data/6
 create mode 100644 data/7
 create mode 100644 data/8
 create mode 100644 data/9
Switched to a new branch 'B'
rm 'data/9'
[B 53e80c3] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 data/9
Switched to branch 'D'
[D c132a69] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 data/testD
Switched to a new branch 'C'
[C e11feee] C
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename data/{9 => new-9} (100%)
Switched to branch 'E'
[E da98b4a] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 data/testE
Switched to branch 'B'
CONFLICT (rename/delete): data/9 renamed to data/new-9 in E, but deleted in HEAD.
Automatic merge failed; fix conflicts and then commit the result.
[B 9eb2311] F
 Author: A U Thor <author@example.com>
Switched to branch 'C'
CONFLICT (rename/delete): data/9 renamed to data/new-9 in HEAD, but deleted in D.
Automatic merge failed; fix conflicts and then commit the result.
[C dc9a020] G
 Author: A U Thor <author@example.com>
ok 1 - setup repo with criss-cross history

expecting success of 6431.2 'recursive merge between F and G does not cause segfault': 
	git merge F

  From inner merge:  CONFLICT (rename/delete): data/9 renamed to data/new-9 in Temporary merge branch 1, but deleted in Temporary merge branch 2.
Merge made by the 'ort' strategy.
 data/testE | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 data/testE
ok 2 - recursive merge between F and G does not cause segfault

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6432-merge-recursive-space-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6432-merge-recursive-space-options/.git/
expecting success of 6432.1 'setup': 
	conflict_hunks () {
		sed $SED_OPTIONS -n -e "
			/^<<<</ b conflict
			b
			: conflict
			p
			/^>>>>/ b
			n
			b conflict
		" "$@"
	} &&

	cat <<-\EOF >text.txt &&
	    Hope, he says, cherishes the soul of him who lives in
	    justice and holiness and is the nurse of his age and the
	    companion of his journey;--hope which is mightiest to sway
	    the restless soul of man.

	How admirable are his words!  And the great blessing of riches, I do
	not say to every man, but to a good man, is, that he has had no
	occasion to deceive or to defraud others, either intentionally or
	unintentionally; and when he departs to the world below he is not in
	any apprehension about offerings due to the gods or debts which he owes
	to men.  Now to this peace of mind the possession of wealth greatly
	contributes; and therefore I say, that, setting one thing against
	another, of the many advantages which wealth has to give, to a man of
	sense this is in my opinion the greatest.

	Well said, Cephalus, I replied; but as concerning justice, what is
	it?--to speak the truth and to pay your debts--no more than this?  And
	even to this are there not exceptions?  Suppose that a friend when in
	his right mind has deposited arms with me and he asks for them when he
	is not in his right mind, ought I to give them back to him?  No one
	would say that I ought or that I should be right in doing so, any more
	than they would say that I ought always to speak the truth to one who
	is in his condition.

	You are quite right, he replied.

	But then, I said, speaking the truth and paying your debts is not a
	correct definition of justice.

	CEPHALUS - SOCRATES - POLEMARCHUS

	Quite correct, Socrates, if Simonides is to be believed, said
	Polemarchus interposing.

	I fear, said Cephalus, that I must go now, for I have to look after the
	sacrifices, and I hand over the argument to Polemarchus and the company.
	EOF
	git add text.txt &&
	test_tick &&
	git commit -m "Initial revision" &&

	git checkout -b remote &&
	sed -e "
			s/\.  /\. /g
			s/[?]  /? /g
			s/    /	/g
			s/--/---/g
			s/but as concerning/but as con cerning/
			/CEPHALUS - SOCRATES - POLEMARCHUS/ d
		" text.txt >text.txt+ &&
	mv text.txt+ text.txt &&
	git commit -a -m "Remove cruft" &&

	git checkout main &&
	sed -e "
			s/\(not in his right mind\),\(.*\)/\1;\2Q/
			s/Quite correct\(.*\)/It is too correct\1Q/
			s/unintentionally/un intentionally/
			/un intentionally/ s/$/Q/
			s/Polemarchus interposing./Polemarchus, interposing.Q/
			/justice and holiness/ s/$/Q/
			/pay your debts/ s/$/Q/
		" text.txt | q_to_cr >text.txt+ &&
	mv text.txt+ text.txt &&
	git commit -a -m "Clarify" &&
	git show-branch --all

[main (root-commit) c1e95d9] Initial revision
 Author: A U Thor <author@example.com>
 1 file changed, 36 insertions(+)
 create mode 100644 text.txt
Switched to a new branch 'remote'
[remote be82dcf] Remove cruft
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+), 10 deletions(-)
Switched to branch 'main'
[main 0ab7224] Clarify
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+), 6 deletions(-)
* [main] Clarify
 ! [remote] Remove cruft
--
 + [remote] Remove cruft
*  [main] Clarify
*+ [remote^] Initial revision
ok 1 - setup

expecting success of 6432.2 'naive merge fails': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive HEAD^ -- HEAD remote &&
	test_must_fail git update-index --refresh &&
	grep "<<<<<<" text.txt

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
CONFLICT (content): Merge conflict in text.txt
text.txt: needs merge
<<<<<<< HEAD
<<<<<<< HEAD
ok 2 - naive merge fails

expecting success of 6432.3 '--ignore-space-change makes merge succeed': 
	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 3 - --ignore-space-change makes merge succeed

expecting success of 6432.4 'naive cherry-pick fails': 
	git read-tree --reset -u HEAD &&
	test_must_fail git cherry-pick --no-commit remote &&
	git read-tree --reset -u HEAD &&
	test_must_fail git cherry-pick remote &&
	test_must_fail git update-index --refresh &&
	grep "<<<<<<" text.txt

Auto-merging text.txt
CONFLICT (content): Merge conflict in text.txt
error: could not apply be82dcf... Remove cruft
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
Auto-merging text.txt
CONFLICT (content): Merge conflict in text.txt
error: could not apply be82dcf... Remove cruft
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
text.txt: needs merge
<<<<<<< HEAD
<<<<<<< HEAD
ok 4 - naive cherry-pick fails

expecting success of 6432.5 '-Xignore-space-change makes cherry-pick succeed': 
	git read-tree --reset -u HEAD &&
	git cherry-pick --no-commit -Xignore-space-change remote

Auto-merging text.txt
ok 5 - -Xignore-space-change makes cherry-pick succeed

expecting success of 6432.6 '--ignore-space-change: our w/s-only change wins': 
	q_to_cr <<-\EOF >expected &&
	    justice and holiness and is the nurse of his age and theQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "justice and holiness" text.txt >actual &&
	test_cmp expected actual

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 6 - --ignore-space-change: our w/s-only change wins

expecting success of 6432.7 '--ignore-space-change: their real change wins over w/s': 
	cat <<-\EOF >expected &&
	it?---to speak the truth and to pay your debts---no more than this? And
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "pay your debts" text.txt >actual &&
	test_cmp expected actual

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 7 - --ignore-space-change: their real change wins over w/s

expecting success of 6432.8 '--ignore-space-change: does not ignore new spaces': 
	cat <<-\EOF >expected1 &&
	Well said, Cephalus, I replied; but as con cerning justice, what is
	EOF
	q_to_cr <<-\EOF >expected2 &&
	un intentionally; and when he departs to the world below he is not inQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "Well said" text.txt >actual1 &&
	grep "when he departs" text.txt >actual2 &&
	test_cmp expected1 actual1 &&
	test_cmp expected2 actual2

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 8 - --ignore-space-change: does not ignore new spaces

expecting success of 6432.9 '--ignore-all-space drops their new spaces': 
	cat <<-\EOF >expected &&
	Well said, Cephalus, I replied; but as concerning justice, what is
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
	grep "Well said" text.txt >actual &&
	test_cmp expected actual

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 9 - --ignore-all-space drops their new spaces

expecting success of 6432.10 '--ignore-all-space keeps our new spaces': 
	q_to_cr <<-\EOF >expected &&
	un intentionally; and when he departs to the world below he is not inQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
	grep "when he departs" text.txt >actual &&
	test_cmp expected actual

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
ok 10 - --ignore-all-space keeps our new spaces

expecting success of 6432.11 '--ignore-space-at-eol': 
	q_to_cr <<-\EOF >expected &&
	<<<<<<< HEAD
	is not in his right mind; ought I to give them back to him?  No oneQ
	=======
	is not in his right mind, ought I to give them back to him? No one
	>>>>>>> remote
	EOF

	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --ignore-space-at-eol \
						 HEAD^ -- HEAD remote &&
	conflict_hunks text.txt >actual &&
	test_cmp expected actual

Merging HEAD with remote
Merging:
0ab7224 Clarify
be82dcf Remove cruft
found 1 common ancestor:
c1e95d9 Initial revision
Auto-merging text.txt
CONFLICT (content): Merge conflict in text.txt
ok 11 - --ignore-space-at-eol

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6429-merge-sequence-rename-caching.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/.git/
expecting success of 6429.1 'caching renames does not preclude finding new ones': 
	git init caching-renames-and-new-renames &&
	(
		cd caching-renames-and-new-renames &&

		test_seq 2 10 >numbers &&
		test_seq 2 10 >values &&
		git add numbers values &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq 1 10 >numbers &&
		test_seq 1 10 >values &&
		git add numbers values &&
		git commit -m "Tweaked both files" &&

		git switch topic &&

		test_seq 2 12 >numbers &&
		git add numbers &&
		git mv numbers sequence &&
		git commit -m A &&

		test_seq 2 12 >values &&
		git add values &&
		git mv values scruples &&
		git commit -m B &&

		#
		# Actual testing
		#

		git switch upstream &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream~1..topic

		git ls-files >tracked-files &&
		test_line_count = 2 tracked-files &&
		test_seq 1 12 >expect &&
		test_cmp expect sequence &&
		test_cmp expect scruples
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/caching-renames-and-new-renames/.git/
[master (root-commit) 29f8a28] orig
 Author: A U Thor <author@example.com>
 2 files changed, 18 insertions(+)
 create mode 100644 numbers
 create mode 100644 values
Switched to branch 'upstream'
[upstream a12dbe8] Tweaked both files
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
Switched to branch 'topic'
[topic e84d01a] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename numbers => sequence (76%)
[topic 1354771] B
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename values => scruples (76%)
Switched to branch 'upstream'
Rebasing e84d01acefa5851c17c0ad3961c070af053cefe1...
Rebasing 13547719f36094a9485da61169f5c7c78e171e4a...
Done.
ok 1 - caching renames does not preclude finding new ones

expecting success of 6429.2 'cherry-pick both a commit and its immediate revert': 
	git init pick-commit-and-its-immediate-revert &&
	(
		cd pick-commit-and-its-immediate-revert &&

		test_seq 11 30 >numbers &&
		git add numbers &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq 1 30 >numbers &&
		git add numbers &&
		git mv numbers sequence &&
		git commit -m "Renamed (and modified) numbers -> sequence" &&

		git switch topic &&

		test_seq 11 13 >numbers &&
		git add numbers &&
		git commit -m A &&

		git revert HEAD &&

		#
		# Actual testing
		#

		git switch upstream &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream~1..topic &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 1 calls
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/pick-commit-and-its-immediate-revert/.git/
[master (root-commit) 4bf57ba] orig
 Author: A U Thor <author@example.com>
 1 file changed, 20 insertions(+)
 create mode 100644 numbers
Switched to branch 'upstream'
[upstream ab0f48c] Renamed (and modified) numbers -> sequence
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 rename numbers => sequence (74%)
Switched to branch 'topic'
[topic 0105939] A
 Author: A U Thor <author@example.com>
 1 file changed, 17 deletions(-)
[topic 5ed36dd] Revert "A"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 17 insertions(+)
Switched to branch 'upstream'
Rebasing 0105939d1772cb9fd554f25dfc46878e15988c6a...
Rebasing 5ed36dd5bad5e8bda3889d823c4fbfa37a8e91d7...
Done.
ok 2 - cherry-pick both a commit and its immediate revert

expecting success of 6429.3 'rename same file identically, then reintroduce it': 
	git init rename-rename-1to1-then-add-old-filename &&
	(
		cd rename-rename-1to1-then-add-old-filename &&

		test_seq 3 8 >sequence &&
		git add sequence &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq 1 8 >sequence &&
		git add sequence &&
		git mv sequence values &&
		git commit -m "Renamed (and modified) sequence -> values" &&

		git switch topic &&

		test_seq 3 10 >sequence &&
		git add sequence &&
		git mv sequence values &&
		git commit -m A &&

		test_write_lines A B C D E F G H I J >sequence &&
		git add sequence &&
		git commit -m B &&

		#
		# Actual testing
		#

		git switch upstream &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream~1..topic &&

		git ls-files >tracked &&
		test_line_count = 2 tracked &&
		test_path_is_file values &&
		test_path_is_file sequence &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 2 calls
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/rename-rename-1to1-then-add-old-filename/.git/
[master (root-commit) d064880] orig
 Author: A U Thor <author@example.com>
 1 file changed, 6 insertions(+)
 create mode 100644 sequence
Switched to branch 'upstream'
[upstream 685755c] Renamed (and modified) sequence -> values
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename sequence => values (75%)
Switched to branch 'topic'
[topic a049c8f] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 rename sequence => values (70%)
[topic ca60f7a] B
 Author: A U Thor <author@example.com>
 1 file changed, 10 insertions(+)
 create mode 100644 sequence
Switched to branch 'upstream'
Rebasing a049c8f897c5d113694bb6cd78066a1989481be8...
Rebasing ca60f7a3e4bd1109a29fd316a4ddc59942ba00ba...
Done.
ok 3 - rename same file identically, then reintroduce it

expecting success of 6429.4 'rename same file identically, then add file to old dir': 
	git init rename-rename-1to1-then-add-file-to-old-dir &&
	(
		cd rename-rename-1to1-then-add-file-to-old-dir &&

		mkdir olddir/ &&
		test_seq 3 8 >olddir/valuesZ &&
		test_seq 3 8 >olddir/valuesY &&
		test_seq 3 8 >olddir/valuesX &&
		git add olddir &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq 1 8 >olddir/valuesZ &&
		test_seq 1 8 >olddir/valuesY &&
		test_seq 1 8 >olddir/valuesX &&
		git add olddir &&
		mkdir dirA &&
		git mv olddir/valuesZ olddir/valuesY dirA &&
		git mv olddir/ dirB/ &&
		git commit -m "Renamed (and modified) values*" &&

		git switch topic &&

		test_seq 3 10 >olddir/valuesZ &&
		test_seq 3 10 >olddir/valuesY &&
		git add olddir &&
		mkdir dirA &&
		git mv olddir/valuesZ olddir/valuesY dirA &&
		git commit -m A &&

		>olddir/newfile &&
		git add olddir/newfile &&
		git commit -m B &&

		#
		# Actual testing
		#

		git switch upstream &&
		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream~1..topic &&

		git ls-files >tracked &&
		test_line_count = 4 tracked &&
		test_path_is_file dirA/valuesZ &&
		test_path_is_file dirA/valuesY &&
		test_path_is_file dirB/valuesX &&
		test_path_is_file dirB/newfile &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 3 calls
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/rename-rename-1to1-then-add-file-to-old-dir/.git/
[master (root-commit) c0deec2] orig
 Author: A U Thor <author@example.com>
 3 files changed, 18 insertions(+)
 create mode 100644 olddir/valuesX
 create mode 100644 olddir/valuesY
 create mode 100644 olddir/valuesZ
Switched to branch 'upstream'
[upstream 19abd35] Renamed (and modified) values*
 Author: A U Thor <author@example.com>
 3 files changed, 6 insertions(+)
 rename {olddir => dirA}/valuesY (75%)
 rename {olddir => dirA}/valuesZ (75%)
 rename {olddir => dirB}/valuesX (75%)
Switched to branch 'topic'
[topic bea1a85] A
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 rename {olddir => dirA}/valuesY (70%)
 rename {olddir => dirA}/valuesZ (70%)
[topic c04e0a1] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 olddir/newfile
Switched to branch 'upstream'
Rebasing bea1a85572a335efb74690f974d0633b6dd57c86...
Rebasing c04e0a1e593190d583735ca35d85df603895e5a8...
Done.
ok 4 - rename same file identically, then add file to old dir

expecting success of 6429.5 'cached dir rename does not prevent noticing later conflict': 
	git init dir-rename-cache-not-occluding-later-conflict &&
	(
		cd dir-rename-cache-not-occluding-later-conflict &&

		mkdir olddir &&
		test_seq 3 10 >olddir/a &&
		test_seq 3 10 >olddir/b &&
		git add olddir &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq 3 10 >olddir/a &&
		test_seq 3 10 >olddir/b &&
		git add olddir &&
		git mv olddir newdir &&
		git commit -m "Dir renamed" &&

		git switch topic &&

		>olddir/newfile &&
		git add olddir/newfile &&
		git commit -m A &&

		test_seq 1 8 >olddir/a &&
		test_seq 1 8 >olddir/b &&
		git add olddir &&
		git mv olddir otherdir &&
		git commit -m B &&

		#
		# Actual testing
		#

		git switch upstream &&
		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test_must_fail test-tool fast-rebase --onto HEAD upstream~1 topic >output &&
		#git cherry-pick upstream..topic &&

		grep CONFLICT..rename/rename output &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 2 calls
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/dir-rename-cache-not-occluding-later-conflict/.git/
[master (root-commit) de8bf0f] orig
 Author: A U Thor <author@example.com>
 2 files changed, 16 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
Switched to branch 'upstream'
[upstream 525dfa0] Dir renamed
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {olddir => newdir}/a (100%)
 rename {olddir => newdir}/b (100%)
Switched to branch 'topic'
[topic 2c93a7d] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 olddir/newfile
[topic 81a8875] B
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+), 4 deletions(-)
 rename {olddir => otherdir}/a (70%)
 rename {olddir => otherdir}/b (70%)
 rename {olddir => otherdir}/newfile (100%)
Switched to branch 'upstream'
Rebasing 2c93a7d661c24f27362ec7c27df66ddd4b06dafc...
Rebasing 81a8875e6ce3437419493459d0723289b19448ac...
Aborting: Hit a conflict.
CONFLICT (rename/rename): olddir/a renamed to newdir/a in HEAD and to otherdir/a in 81a8875.
CONFLICT (rename/rename): olddir/b renamed to newdir/b in HEAD and to otherdir/b in 81a8875.
ok 5 - cached dir rename does not prevent noticing later conflict

expecting success of 6429.6 'dir rename unneeded, then add new file to old dir': 
	test_setup_upstream_rename dir-rename-unneeded-until-new-file &&
	(
		cd dir-rename-unneeded-until-new-file &&

		git switch topic &&

		test_seq 3 10 >relevant-rename &&
		git add relevant-rename &&
		git commit -m A &&

		echo foo >olddir/newfile &&
		git add olddir/newfile &&
		git commit -m B &&

		echo bar >>olddir/newfile &&
		git add olddir/newfile &&
		git commit -m C &&

		#
		# Actual testing
		#

		git switch upstream &&
		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream..topic &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 2 calls &&

		git ls-files >tracked &&
		test_line_count = 5 tracked &&
		test_path_is_missing olddir/newfile &&
		test_path_is_file newdir/newfile
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/dir-rename-unneeded-until-new-file/.git/
[master (root-commit) af0596a] orig
 Author: A U Thor <author@example.com>
 4 files changed, 26 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 relevant-rename
 create mode 100644 somefile
Switched to branch 'upstream'
[upstream c545414] Dir renamed
 Author: A U Thor <author@example.com>
 4 files changed, 6 insertions(+)
 rename {olddir => newdir}/a (87%)
 rename {olddir => newdir}/b (87%)
 rename relevant-rename => renamed (75%)
Switched to branch 'topic'
[topic 63565df] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[topic 8540faf] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 olddir/newfile
[topic f859e8f] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'upstream'
Rebasing 63565df4887902e11528bb40460458bc39935c6a...
Rebasing 8540faf489c87a87665873f466cbc53ba5acd414...
Rebasing f859e8fd36bc8f0a6a2c00ae3ce01c15f7f0b309...
Done.
ok 6 - dir rename unneeded, then add new file to old dir

expecting success of 6429.7 'dir rename unneeded, then rename existing file into old dir': 
	test_setup_upstream_rename dir-rename-unneeded-until-file-moved-inside &&
	(
		cd dir-rename-unneeded-until-file-moved-inside &&

		git switch topic &&

		test_seq 3 10 >relevant-rename &&
		git add relevant-rename &&
		git commit -m A &&

		test_seq 1 10 >somefile &&
		git add somefile &&
		git mv somefile olddir/newfile &&
		git commit -m B &&

		test_seq 1 12 >olddir/newfile &&
		git add olddir/newfile &&
		git commit -m C &&

		#
		# Actual testing
		#

		git switch upstream &&
		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream..topic &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 3 calls &&

		test_path_is_missing somefile &&
		test_path_is_missing olddir/newfile &&
		test_path_is_file newdir/newfile &&
		git ls-files >tracked &&
		test_line_count = 4 tracked
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/dir-rename-unneeded-until-file-moved-inside/.git/
[master (root-commit) af0596a] orig
 Author: A U Thor <author@example.com>
 4 files changed, 26 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 relevant-rename
 create mode 100644 somefile
Switched to branch 'upstream'
[upstream c545414] Dir renamed
 Author: A U Thor <author@example.com>
 4 files changed, 6 insertions(+)
 rename {olddir => newdir}/a (87%)
 rename {olddir => newdir}/b (87%)
 rename relevant-rename => renamed (75%)
Switched to branch 'topic'
[topic 63565df] A
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[topic 538c5a2] B
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 rename somefile => olddir/newfile (57%)
[topic f3a758f] C
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
Switched to branch 'upstream'
Rebasing 63565df4887902e11528bb40460458bc39935c6a...
Rebasing 538c5a2c0cd21f3858090bd518b121e4d648d178...
Rebasing f3a758f0bd972e778a97f92193e20acad5ee860c...
Done.
ok 7 - dir rename unneeded, then rename existing file into old dir

expecting success of 6429.8 'caching renames only on upstream side, part 1': 
	test_setup_topic_rename cache-renames-only-upstream-add-file &&
	(
		cd cache-renames-only-upstream-add-file &&

		git switch upstream &&

		>olddir/newfile &&
		git add olddir/newfile &&
		git commit -m "Add newfile" &&

		#
		# Actual testing
		#

		git switch upstream &&

		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream..topic &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 1 calls &&

		git ls-files >tracked &&
		test_line_count = 5 tracked &&
		test_path_is_missing newdir/unrelated-file &&
		test_path_is_file olddir/unrelated-file &&
		test_path_is_file newdir/newfile &&
		test_path_is_file newdir/b &&
		test_path_is_file newdir/a &&
		test_path_is_file somefile
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/cache-renames-only-upstream-add-file/.git/
[master (root-commit) 3584a53] orig
 Author: A U Thor <author@example.com>
 3 files changed, 13 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 somefile
Switched to branch 'topic'
[topic 3a60cc7] Dir renamed
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 rename {olddir => newdir}/a (75%)
 rename {olddir => newdir}/b (100%)
[topic 4b8f8d7] Unrelated file in recreated old dir
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 olddir/unrelated-file
Switched to branch 'upstream'
[upstream a04aaa8] Add newfile
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 olddir/newfile
Already on 'upstream'
Rebasing 3a60cc7deddeb44e9551ed96d15ede1ef328ca47...
Rebasing 4b8f8d728e9638fc8b7d6a0d50e17b43ba61d54e...
Done.
ok 8 - caching renames only on upstream side, part 1

expecting success of 6429.9 'caching renames only on upstream side, part 2': 
	test_setup_topic_rename cache-renames-only-upstream-rename-file &&
	(
		cd cache-renames-only-upstream-rename-file &&

		git switch upstream &&

		git mv somefile olddir/newfile &&
		git commit -m "Add newfile" &&

		#
		# Actual testing
		#

		git switch upstream &&

		git config merge.directoryRenames true &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
		export GIT_TRACE2_PERF &&

		test-tool fast-rebase --onto HEAD upstream~1 topic &&
		#git cherry-pick upstream..topic &&

		grep region_enter.*diffcore_rename trace.output >calls &&
		test_line_count = 2 calls &&

		git ls-files >tracked &&
		test_line_count = 4 tracked &&
		test_path_is_missing newdir/unrelated-file &&
		test_path_is_file olddir/unrelated-file &&
		test_path_is_file newdir/newfile &&
		test_path_is_file newdir/b &&
		test_path_is_file newdir/a
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/cache-renames-only-upstream-rename-file/.git/
[master (root-commit) 3584a53] orig
 Author: A U Thor <author@example.com>
 3 files changed, 13 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
 create mode 100644 somefile
Switched to branch 'topic'
[topic 3a60cc7] Dir renamed
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 rename {olddir => newdir}/a (75%)
 rename {olddir => newdir}/b (100%)
[topic 4b8f8d7] Unrelated file in recreated old dir
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 olddir/unrelated-file
Switched to branch 'upstream'
[upstream 531f940] Add newfile
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename somefile => olddir/newfile (100%)
Already on 'upstream'
Rebasing 3a60cc7deddeb44e9551ed96d15ede1ef328ca47...
Rebasing 4b8f8d728e9638fc8b7d6a0d50e17b43ba61d54e...
Done.
ok 9 - caching renames only on upstream side, part 2

expecting success of 6429.10 'avoid assuming we detected renames': 
	git init redo-weirdness &&
	(
		cd redo-weirdness &&

		mkdir unrelated &&
		for i in $(test_seq 1 10)
		do
			>unrelated/$i || exit 1
		done &&
		test_seq  2 10 >numbers &&
		test_seq 12 20 >values &&
		git add numbers values unrelated/ &&
		git commit -m orig &&

		git branch upstream &&
		git branch topic &&

		git switch upstream &&
		test_seq  1 10 >numbers &&
		test_seq 11 20 >values &&
		git add numbers &&
		git commit -m "Some tweaks" &&

		git switch topic &&

		>unrelated/foo &&
		test_seq  2 12 >numbers &&
		test_seq 12 22 >values &&
		git add numbers values unrelated/ &&
		git mv numbers sequence &&
		git mv values progression &&
		git commit -m A &&

		#
		# Actual testing
		#

		git switch --detach topic^0 &&

		test_must_fail git -c merge.renameLimit=1 rebase upstream &&

		git ls-files -u >actual &&
		test_line_count = 2 actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6429-merge-sequence-rename-caching/redo-weirdness/.git/
[master (root-commit) f6e027e] orig
 Author: A U Thor <author@example.com>
 12 files changed, 18 insertions(+)
 create mode 100644 numbers
 create mode 100644 unrelated/1
 create mode 100644 unrelated/10
 create mode 100644 unrelated/2
 create mode 100644 unrelated/3
 create mode 100644 unrelated/4
 create mode 100644 unrelated/5
 create mode 100644 unrelated/6
 create mode 100644 unrelated/7
 create mode 100644 unrelated/8
 create mode 100644 unrelated/9
 create mode 100644 values
Switched to branch 'upstream'
[upstream df355b1] Some tweaks
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'topic'
M	values
[topic f96ebc9] A
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 rename values => progression (81%)
 rename numbers => sequence (76%)
 create mode 100644 unrelated/foo
HEAD is now at f96ebc9 A
Rebasing (1/1)
CONFLICT (modify/delete): numbers deleted in f96ebc9 (A) and modified in HEAD.  Version HEAD of numbers left in tree.
warning: exhaustive rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 2 and retry the command.
error: could not apply f96ebc9... A
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply f96ebc9... A
ok 10 - avoid assuming we detected renames

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6430-merge-recursive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6430-merge-recursive/.git/
expecting success of 6430.1 'setup 1': 

	echo hello >a &&
	o0=$(git hash-object a) &&
	cp a b &&
	cp a c &&
	mkdir d &&
	cp a d/e &&

	test_tick &&
	git add a b c d/e &&
	git commit -m initial &&
	c0=$(git rev-parse --verify HEAD) &&
	git branch side &&
	git branch df-1 &&
	git branch df-2 &&
	git branch df-3 &&
	git branch remove &&
	git branch submod &&
	git branch copy &&
	git branch rename &&
	git branch rename-ln &&

	echo hello >>a &&
	cp a d/e &&
	o1=$(git hash-object a) &&

	git add a d/e &&

	test_tick &&
	git commit -m "main modifies a and d/e" &&
	c1=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o1	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o1	d/e" &&
		echo "100644 $o1 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual

[main (root-commit) 88eeecf] initial
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 d/e
[main fdc9054] main modifies a and d/e
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
ok 1 - setup 1

expecting success of 6430.2 'setup 2': 

	rm -rf [abcd] &&
	git checkout side &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	echo goodbye >>a &&
	o2=$(git hash-object a) &&

	git add a &&

	test_tick &&
	git commit -m "side modifies a" &&
	c2=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o2	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o2 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual

Switched to branch 'side'
D	b
D	c
[side 4419332] side modifies a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - setup 2

expecting success of 6430.3 'setup 3': 

	rm -rf [abcd] &&
	git checkout df-1 &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	rm -f b && mkdir b && echo df-1 >b/c && git add b/c &&
	o3=$(git hash-object b/c) &&

	test_tick &&
	git commit -m "df-1 makes b/c" &&
	c3=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o3	b/c" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o3 0	b/c" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual

Switched to branch 'df-1'
D	b
D	c
D	d/e
[df-1 918ade1] df-1 makes b/c
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 b
 create mode 100644 b/c
ok 3 - setup 3

expecting success of 6430.4 'setup 4': 

	rm -rf [abcd] &&
	git checkout df-2 &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	rm -f a && mkdir a && echo df-2 >a/c && git add a/c &&
	o4=$(git hash-object a/c) &&

	test_tick &&
	git commit -m "df-2 makes a/c" &&
	c4=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o4	a/c" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o4 0	a/c" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual

Switched to branch 'df-2'
D	a
D	c
D	d/e
[df-2 833bf24] df-2 makes a/c
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 a
 create mode 100644 a/c
ok 4 - setup 4

expecting success of 6430.5 'setup 5': 

	rm -rf [abcd] &&
	git checkout remove &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	rm -f b &&
	echo remove-conflict >a &&

	git add a &&
	git rm b &&
	o5=$(git hash-object a) &&

	test_tick &&
	git commit -m "remove removes b and modifies a" &&
	c5=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o5	a" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o5 0	a" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual


Switched to branch 'remove'
D	b
D	c
D	d/e
rm 'b'
[remove 968f3e1] remove removes b and modifies a
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 2 deletions(-)
 delete mode 100644 b
ok 5 - setup 5

expecting success of 6430.6 'setup 6': 

	rm -rf [abcd] &&
	git checkout df-3 &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	rm -fr d && echo df-3 >d && git add d &&
	o6=$(git hash-object d) &&

	test_tick &&
	git commit -m "df-3 makes d" &&
	c6=$(git rev-parse --verify HEAD) &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o6	d" &&
		echo "100644 $o0 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o6 0	d"
	) >expected &&
	test_cmp expected actual

Switched to branch 'df-3'
D	c
D	d/e
[df-3 9d284b3] df-3 makes d
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 d
 delete mode 100644 d/e
ok 6 - setup 6

expecting success of 6430.7 'setup 7': 

	git checkout submod &&
	git rm d/e &&
	test_tick &&
	git commit -m "remove d/e" &&
	git update-index --add --cacheinfo 160000 $c1 d &&
	test_tick &&
	git commit -m "make d/ a submodule"

Switched to branch 'submod'
D	c
rm 'd/e'
[submod a09e90e] remove d/e
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 d/e
[submod 408d7a9] make d/ a submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 d
ok 7 - setup 7

expecting success of 6430.8 'setup 8': 
	git checkout rename &&
	git mv a e &&
	git add e &&
	test_tick &&
	git commit -m "rename a->e" &&
	c7=$(git rev-parse --verify HEAD) &&
	git checkout rename-ln &&
	git mv a e &&
	test_ln_s_add e a &&
	test_tick &&
	git commit -m "rename a->e, symlink a->e" &&
	oln=$(printf e | git hash-object --stdin)

Switched to branch 'rename'
D	c
[rename 5dd9bd8] rename a->e
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => e (100%)
Switched to branch 'rename-ln'
D	c
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[rename-ln 7e1ee82] rename a->e, symlink a->e
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 mode change 100644 => 120000 a
 create mode 100644 e
ok 8 - setup 8

expecting success of 6430.9 'setup 9': 
	git checkout copy &&
	cp a e &&
	git add e &&
	test_tick &&
	git commit -m "copy a->e"

Switched to branch 'copy'
D	c
[copy a40ced5] copy a->e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 e
ok 9 - setup 9

expecting success of 6430.10 'merge-recursive simple': 

	rm -fr [abcd] &&
	git checkout -f "$c2" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c2" "$c1"

Note: switching to '441933296d498d45ed4c5cbe9135259386a2e2b2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4419332 side modifies a
Merging 441933296d498d45ed4c5cbe9135259386a2e2b2 with fdc905408c9d6dd868ab5d3b6939a2a4f33e068e
Merging:
4419332 side modifies a
fdc9054 main modifies a and d/e
found 1 common ancestor:
88eeecf initial
Auto-merging a
CONFLICT (content): Merge conflict in a
ok 10 - merge-recursive simple

expecting success of 6430.11 'merge-recursive result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o0 1	a" &&
		echo "100644 $o2 2	a" &&
		echo "100644 $o1 3	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual


ok 11 - merge-recursive result

expecting success of 6430.12 'fail if the index has unresolved entries': 

	rm -fr [abcd] &&
	git checkout -f "$c1" &&

	test_must_fail git merge "$c5" &&
	test_must_fail git merge "$c5" 2> out &&
	test_i18ngrep "not possible because you have unmerged files" out &&
	git add -u &&
	test_must_fail git merge "$c5" 2> out &&
	test_i18ngrep "You have not concluded your merge" out &&
	rm -f .git/MERGE_HEAD &&
	test_must_fail git merge "$c5" 2> out &&
	test_i18ngrep "Your local changes to the following files would be overwritten by merge:" out

Previous HEAD position was 4419332 side modifies a
HEAD is now at fdc9054 main modifies a and d/e
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
error: Merging is not possible because you have unmerged files.
fatal: You have not concluded your merge (MERGE_HEAD exists).
error: Your local changes to the following files would be overwritten by merge:
ok 12 - fail if the index has unresolved entries

expecting success of 6430.13 'merge-recursive remove conflict': 

	rm -fr [abcd] &&
	git checkout -f "$c1" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c1" "$c5"

HEAD is now at fdc9054 main modifies a and d/e
Merging fdc905408c9d6dd868ab5d3b6939a2a4f33e068e with 968f3e182d39cc5676d733434b2b1fcade6d5fdb
Merging:
fdc9054 main modifies a and d/e
968f3e1 remove removes b and modifies a
found 1 common ancestor:
88eeecf initial
Removing b
Auto-merging a
CONFLICT (content): Merge conflict in a
ok 13 - merge-recursive remove conflict

expecting success of 6430.14 'merge-recursive remove conflict': 

	git ls-files -s >actual &&
	(
		echo "100644 $o0 1	a" &&
		echo "100644 $o1 2	a" &&
		echo "100644 $o5 3	a" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual


ok 14 - merge-recursive remove conflict

expecting success of 6430.15 'merge-recursive d/f simple': 
	rm -fr [abcd] &&
	git reset --hard &&
	git checkout -f "$c1" &&

	git merge-recursive "$c0" -- "$c1" "$c3"

HEAD is now at fdc9054 main modifies a and d/e
HEAD is now at fdc9054 main modifies a and d/e
Merging fdc905408c9d6dd868ab5d3b6939a2a4f33e068e with 918ade1d06dd1c0da47b644356c64b1b2122e705
Merging:
fdc9054 main modifies a and d/e
918ade1 df-1 makes b/c
found 1 common ancestor:
88eeecf initial
Adding b/c
Removing b to make room for subdirectory

Removing b
ok 15 - merge-recursive d/f simple

expecting success of 6430.16 'merge-recursive result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	a" &&
		echo "100644 $o3 0	b/c" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual


ok 16 - merge-recursive result

expecting success of 6430.17 'merge-recursive d/f conflict': 

	rm -fr [abcd] &&
	git reset --hard &&
	git checkout -f "$c1" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c1" "$c4"

HEAD is now at fdc9054 main modifies a and d/e
HEAD is now at fdc9054 main modifies a and d/e
Merging fdc905408c9d6dd868ab5d3b6939a2a4f33e068e with 833bf240c9e2636a0e5eb3dd8f735d2a92181f22
Merging:
fdc9054 main modifies a and d/e
833bf24 df-2 makes a/c
found 1 common ancestor:
88eeecf initial
Adding a/c
Removing a to make room for subdirectory

CONFLICT (modify/delete): a deleted in 833bf240c9e2636a0e5eb3dd8f735d2a92181f22 and modified in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Version fdc905408c9d6dd868ab5d3b6939a2a4f33e068e of a left in tree at a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e.
ok 17 - merge-recursive d/f conflict

expecting success of 6430.18 'merge-recursive d/f conflict result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o0 1	a" &&
		echo "100644 $o1 2	a" &&
		echo "100644 $o4 0	a/c" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual


ok 18 - merge-recursive d/f conflict result

expecting success of 6430.19 'merge-recursive d/f conflict the other way': 

	rm -fr [abcd] &&
	git reset --hard &&
	git checkout -f "$c4" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c4" "$c1"

HEAD is now at fdc9054 main modifies a and d/e
Previous HEAD position was fdc9054 main modifies a and d/e
HEAD is now at 833bf24 df-2 makes a/c
Merging 833bf240c9e2636a0e5eb3dd8f735d2a92181f22 with fdc905408c9d6dd868ab5d3b6939a2a4f33e068e
Merging:
833bf24 df-2 makes a/c
fdc9054 main modifies a and d/e
found 1 common ancestor:
88eeecf initial
Adding a/c
CONFLICT (modify/delete): a deleted in 833bf240c9e2636a0e5eb3dd8f735d2a92181f22 and modified in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Version fdc905408c9d6dd868ab5d3b6939a2a4f33e068e of a left in tree at a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e_0.
ok 19 - merge-recursive d/f conflict the other way

expecting success of 6430.20 'merge-recursive d/f conflict result the other way': 

	git ls-files -s >actual &&
	(
		echo "100644 $o0 1	a" &&
		echo "100644 $o1 3	a" &&
		echo "100644 $o4 0	a/c" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual


ok 20 - merge-recursive d/f conflict result the other way

expecting success of 6430.21 'merge-recursive d/f conflict': 

	rm -fr [abcd] &&
	git reset --hard &&
	git checkout -f "$c1" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c1" "$c6"

HEAD is now at 833bf24 df-2 makes a/c
Previous HEAD position was 833bf24 df-2 makes a/c
HEAD is now at fdc9054 main modifies a and d/e
Merging fdc905408c9d6dd868ab5d3b6939a2a4f33e068e with 9d284b3a95aea72df4581977e913e55da89d5e3d
Merging:
fdc9054 main modifies a and d/e
9d284b3 df-3 makes d
found 1 common ancestor:
88eeecf initial
CONFLICT (modify/delete): d/e deleted in 9d284b3a95aea72df4581977e913e55da89d5e3d and modified in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Version fdc905408c9d6dd868ab5d3b6939a2a4f33e068e of d/e left in tree.
CONFLICT (directory/file): There is a directory with name d in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Adding d as d~9d284b3a95aea72df4581977e913e55da89d5e3d
ok 21 - merge-recursive d/f conflict

expecting success of 6430.22 'merge-recursive d/f conflict result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o6 3	d" &&
		echo "100644 $o0 1	d/e" &&
		echo "100644 $o1 2	d/e"
	) >expected &&
	test_cmp expected actual


ok 22 - merge-recursive d/f conflict result

expecting success of 6430.23 'merge-recursive d/f conflict': 

	rm -fr [abcd] &&
	git reset --hard &&
	git checkout -f "$c6" &&

	test_expect_code 1 git merge-recursive "$c0" -- "$c6" "$c1"

HEAD is now at fdc9054 main modifies a and d/e
Previous HEAD position was fdc9054 main modifies a and d/e
HEAD is now at 9d284b3 df-3 makes d
Merging 9d284b3a95aea72df4581977e913e55da89d5e3d with fdc905408c9d6dd868ab5d3b6939a2a4f33e068e
Merging:
9d284b3 df-3 makes d
fdc9054 main modifies a and d/e
found 1 common ancestor:
88eeecf initial
CONFLICT (modify/delete): d/e deleted in 9d284b3a95aea72df4581977e913e55da89d5e3d and modified in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Version fdc905408c9d6dd868ab5d3b6939a2a4f33e068e of d/e left in tree.
Removing d to make room for subdirectory

CONFLICT (file/directory): There is a directory with name d in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Adding d as d~9d284b3a95aea72df4581977e913e55da89d5e3d_0
ok 23 - merge-recursive d/f conflict

expecting success of 6430.24 'merge-recursive d/f conflict result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o6 2	d" &&
		echo "100644 $o0 1	d/e" &&
		echo "100644 $o1 3	d/e"
	) >expected &&
	test_cmp expected actual


ok 24 - merge-recursive d/f conflict result

expecting success of 6430.25 'dir in working tree with symlink ancestor does not produce d/f conflict': 
	git init sym &&
	(
		cd sym &&
		ln -s . foo &&
		mkdir bar &&
		>bar/file &&
		git add foo bar/file &&
		git commit -m "foo symlink" &&

		git checkout -b branch1 &&
		git commit --allow-empty -m "empty commit" &&

		git checkout main &&
		git rm foo &&
		mkdir foo &&
		>foo/bar &&
		git add foo/bar &&
		git commit -m "replace foo symlink with real foo dir and foo/bar file" &&

		git checkout branch1 &&

		git cherry-pick main &&
		test_path_is_dir foo &&
		test_path_is_file foo/bar
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6430-merge-recursive/sym/.git/
[main (root-commit) 8fb1559] foo symlink
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 bar/file
 create mode 120000 foo
Switched to a new branch 'branch1'
[branch1 9371671] empty commit
 Author: A U Thor <author@example.com>
Switched to branch 'main'
rm 'foo'
[main 8f162ab] replace foo symlink with real foo dir and foo/bar file
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 delete mode 120000 foo
 create mode 100644 foo/bar
Switched to branch 'branch1'
[branch1 f190fac] replace foo symlink with real foo dir and foo/bar file
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:24:13 2005 -0700
 2 files changed, 1 deletion(-)
 delete mode 120000 foo
 create mode 100644 foo/bar
ok 25 - dir in working tree with symlink ancestor does not produce d/f conflict

expecting success of 6430.26 'reset and 3-way merge': 

	git reset --hard "$c2" &&
	git read-tree -m "$c0" "$c2" "$c1"


warning: unable to unlink 'd': Is a directory
HEAD is now at 4419332 side modifies a
ok 26 - reset and 3-way merge

expecting success of 6430.27 'reset and bind merge': 

	git reset --hard main &&
	git read-tree --prefix=M/ main &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	M/a" &&
		echo "100644 $o0 0	M/b" &&
		echo "100644 $o0 0	M/c" &&
		echo "100644 $o1 0	M/d/e" &&
		echo "100644 $o1 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	git read-tree --prefix=a1/ main &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	M/a" &&
		echo "100644 $o0 0	M/b" &&
		echo "100644 $o0 0	M/c" &&
		echo "100644 $o1 0	M/d/e" &&
		echo "100644 $o1 0	a" &&
		echo "100644 $o1 0	a1/a" &&
		echo "100644 $o0 0	a1/b" &&
		echo "100644 $o0 0	a1/c" &&
		echo "100644 $o1 0	a1/d/e" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e"
	) >expected &&
	test_cmp expected actual &&

	git read-tree --prefix=z/ main &&
	git ls-files -s >actual &&
	(
		echo "100644 $o1 0	M/a" &&
		echo "100644 $o0 0	M/b" &&
		echo "100644 $o0 0	M/c" &&
		echo "100644 $o1 0	M/d/e" &&
		echo "100644 $o1 0	a" &&
		echo "100644 $o1 0	a1/a" &&
		echo "100644 $o0 0	a1/b" &&
		echo "100644 $o0 0	a1/c" &&
		echo "100644 $o1 0	a1/d/e" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o1 0	d/e" &&
		echo "100644 $o1 0	z/a" &&
		echo "100644 $o0 0	z/b" &&
		echo "100644 $o0 0	z/c" &&
		echo "100644 $o1 0	z/d/e"
	) >expected &&
	test_cmp expected actual


HEAD is now at fdc9054 main modifies a and d/e
ok 27 - reset and bind merge

expecting success of 6430.28 'merge-recursive w/ empty work tree - ours has rename': 
	(
		GIT_WORK_TREE="$PWD/ours-has-rename-work" &&
		export GIT_WORK_TREE &&
		GIT_INDEX_FILE="$PWD/ours-has-rename-index" &&
		export GIT_INDEX_FILE &&
		mkdir "$GIT_WORK_TREE" &&
		git read-tree -i -m $c7 2>actual-err &&
		test_must_be_empty actual-err &&
		git update-index --ignore-missing --refresh 2>actual-err &&
		test_must_be_empty actual-err &&
		git merge-recursive $c0 -- $c7 $c3 2>actual-err &&
		test_must_be_empty actual-err &&
		git ls-files -s >actual-files 2>actual-err &&
		test_must_be_empty actual-err
	) &&
	cat >expected-files <<-EOF &&
	100644 $o3 0	b/c
	100644 $o0 0	c
	100644 $o0 0	d/e
	100644 $o0 0	e
	EOF
	test_cmp expected-files actual-files

Merging 5dd9bd8ddad823127f5e40fcbc297d40f91d9a53 with 918ade1d06dd1c0da47b644356c64b1b2122e705
Merging:
5dd9bd8 rename a->e
918ade1 df-1 makes b/c
found 1 common ancestor:
88eeecf initial
Skipped e (merged same as existing)
Adding b/c
Removing b to make room for subdirectory

Removing b
ok 28 - merge-recursive w/ empty work tree - ours has rename

expecting success of 6430.29 'merge-recursive w/ empty work tree - theirs has rename': 
	(
		GIT_WORK_TREE="$PWD/theirs-has-rename-work" &&
		export GIT_WORK_TREE &&
		GIT_INDEX_FILE="$PWD/theirs-has-rename-index" &&
		export GIT_INDEX_FILE &&
		mkdir "$GIT_WORK_TREE" &&
		git read-tree -i -m $c3 2>actual-err &&
		test_must_be_empty actual-err &&
		git update-index --ignore-missing --refresh 2>actual-err &&
		test_must_be_empty actual-err &&
		git merge-recursive $c0 -- $c3 $c7 2>actual-err &&
		test_must_be_empty actual-err &&
		git ls-files -s >actual-files 2>actual-err &&
		test_must_be_empty actual-err
	) &&
	cat >expected-files <<-EOF &&
	100644 $o3 0	b/c
	100644 $o0 0	c
	100644 $o0 0	d/e
	100644 $o0 0	e
	EOF
	test_cmp expected-files actual-files

Merging 918ade1d06dd1c0da47b644356c64b1b2122e705 with 5dd9bd8ddad823127f5e40fcbc297d40f91d9a53
Merging:
918ade1 df-1 makes b/c
5dd9bd8 rename a->e
found 1 common ancestor:
88eeecf initial
Adding b/c
ok 29 - merge-recursive w/ empty work tree - theirs has rename

expecting success of 6430.30 'merge removes empty directories': 

	git reset --hard main &&
	git checkout -b rm &&
	git rm d/e &&
	git commit -mremoved-d/e &&
	git checkout main &&
	git merge -s recursive rm &&
	test_path_is_missing d

HEAD is now at fdc9054 main modifies a and d/e
Switched to a new branch 'rm'
rm 'd/e'
[rm d70191d] removed-d/e
 Author: A U Thor <author@example.com>
 1 file changed, 2 deletions(-)
 delete mode 100644 d/e
Switched to branch 'main'
Updating fdc9054..d70191d
Fast-forward
 d/e | 2 --
 1 file changed, 2 deletions(-)
 delete mode 100644 d/e
ok 30 - merge removes empty directories

expecting success of 6430.31 'merge-recursive simple w/submodule': 

	git checkout submod &&
	git merge remove

Switched to branch 'submod'
Merge made by the 'ort' strategy.
 a | 2 +-
 b | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)
 delete mode 100644 b
ok 31 - merge-recursive simple w/submodule

expecting success of 6430.32 'merge-recursive simple w/submodule result': 

	git ls-files -s >actual &&
	(
		echo "100644 $o5 0	a" &&
		echo "100644 $o0 0	c" &&
		echo "160000 $c1 0	d"
	) >expected &&
	test_cmp expected actual

ok 32 - merge-recursive simple w/submodule result

expecting success of 6430.33 'merge-recursive copy vs. rename': 
	git checkout -f copy &&
	git merge rename &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 blob $o0	e" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e" &&
		echo "100644 $o0 0	e"
	) >expected &&
	test_cmp expected actual

Switched to branch 'copy'
Merge made by the 'ort' strategy.
 a | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 a
ok 33 - merge-recursive copy vs. rename

expecting success of 6430.34 'merge-recursive rename vs. rename/symlink': 

	git checkout -f rename &&
	git merge rename-ln &&
	( git ls-tree -r HEAD && git ls-files -s ) >actual &&
	(
		echo "120000 blob $oln	a" &&
		echo "100644 blob $o0	b" &&
		echo "100644 blob $o0	c" &&
		echo "100644 blob $o0	d/e" &&
		echo "100644 blob $o0	e" &&
		echo "120000 $oln 0	a" &&
		echo "100644 $o0 0	b" &&
		echo "100644 $o0 0	c" &&
		echo "100644 $o0 0	d/e" &&
		echo "100644 $o0 0	e"
	) >expected &&
	test_cmp expected actual

Switched to branch 'rename'
Merge made by the 'ort' strategy.
 a | 1 +
 1 file changed, 1 insertion(+)
 create mode 120000 a
ok 34 - merge-recursive rename vs. rename/symlink

expecting success of 6430.35 'merging with triple rename across D/F conflict': 
	git reset --hard HEAD &&
	git checkout -b topic &&
	git rm -rf . &&

	echo "just a file" >sub1 &&
	mkdir -p sub2 &&
	echo content1 >sub2/file1 &&
	echo content2 >sub2/file2 &&
	echo content3 >sub2/file3 &&
	mkdir simple &&
	echo base >simple/bar &&
	git add -A &&
	test_tick &&
	git commit -m base &&

	git checkout -b other &&
	echo more >>simple/bar &&
	test_tick &&
	git commit -a -m changesimplefile &&

	git checkout topic &&
	git rm sub1 &&
	git mv sub2 sub1 &&
	test_tick &&
	git commit -m changefiletodir &&

	test_tick &&
	git merge other

HEAD is now at b57c6be Merge branch 'rename-ln' into rename
Switched to a new branch 'topic'
rm 'a'
rm 'b'
rm 'c'
rm 'd/e'
rm 'e'
warning: adding embedded git repository: sym
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sym
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sym
hint: 
hint: See "git help submodule" for more information.
[topic ef65953] base
 Author: A U Thor <author@example.com>
 22 files changed, 42 insertions(+), 2 deletions(-)
 delete mode 120000 a
 create mode 100644 actual
 create mode 100644 actual-err
 create mode 100644 actual-files
 rename b => a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e (50%)
 rename c => a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e_0 (50%)
 create mode 100644 d~9d284b3a95aea72df4581977e913e55da89d5e3d
 create mode 100644 d~9d284b3a95aea72df4581977e913e55da89d5e3d_0
 delete mode 100644 e
 create mode 100644 expected
 create mode 100644 expected-files
 create mode 100644 ours-has-rename-index
 create mode 100644 ours-has-rename-work/b/c
 create mode 100644 out
 create mode 100644 simple/bar
 create mode 100644 sub1
 create mode 100644 sub2/file1
 create mode 100644 sub2/file2
 create mode 100644 sub2/file3
 create mode 160000 sym
 create mode 100644 theirs-has-rename-index
 rename {d => theirs-has-rename-work}/e (100%)
Switched to a new branch 'other'
[other 62b52bf] changesimplefile
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'topic'
rm 'sub1'
[topic 1befba4] changefiletodir
 Author: A U Thor <author@example.com>
 4 files changed, 1 deletion(-)
 delete mode 100644 sub1
 rename {sub2 => sub1}/file1 (100%)
 rename {sub2 => sub1}/file2 (100%)
 rename {sub2 => sub1}/file3 (100%)
Merge made by the 'ort' strategy.
 simple/bar | 1 +
 1 file changed, 1 insertion(+)
ok 35 - merging with triple rename across D/F conflict

expecting success of 6430.36 'merge-recursive remembers the names of all base trees': 
	git reset --hard HEAD &&

	# make the index match $c1 so that merge-recursive below does not
	# fail early
	git diff --binary HEAD $c1 -- | git apply --cached &&

	# more trees than static slots used by oid_to_hex()
	for commit in $c0 $c2 $c4 $c5 $c6 $c7
	do
		git rev-parse "$commit^{tree}" || return 1
	done >trees &&

	# ignore the return code; it only fails because the input is weird...
	test_must_fail git -c merge.verbosity=5 merge-recursive $(cat trees) -- $c1 $c3 >out &&

	# ...but make sure it fails in the expected way
	test_i18ngrep CONFLICT.*rename/rename out &&

	# merge-recursive prints in reverse order, but we do not care
	sort <trees >expect &&
	sed -n "s/^virtual //p" out | sort >actual &&
	test_cmp expect actual &&

	git clean -fd

HEAD is now at d0fed96 Merge branch 'other' into topic
CONFLICT (rename/rename): Rename e->a in fdc905408c9d6dd868ab5d3b6939a2a4f33e068e. Rename a~Temporary merge branch 2_0->a in 918ade1d06dd1c0da47b644356c64b1b2122e705
Removing actual
Removing actual-err
Removing actual-files
Removing a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e
Removing a~fdc905408c9d6dd868ab5d3b6939a2a4f33e068e_0
Removing d~9d284b3a95aea72df4581977e913e55da89d5e3d
Removing d~9d284b3a95aea72df4581977e913e55da89d5e3d_0
Removing expect
Removing expected
Removing expected-files
Removing ours-has-rename-index
Removing ours-has-rename-work/
Removing out
Removing simple/
Removing sub1/
Removing theirs-has-rename-index
Removing theirs-has-rename-work/
Removing trees
ok 36 - merge-recursive remembers the names of all base trees

expecting success of 6430.37 'merge-recursive internal merge resolves to the sameness': 
	git reset --hard HEAD &&

	# We are going to create a history leading to two criss-cross
	# branches A and B.  The common ancestor at the bottom, O0,
	# has two child commits O1 and O2, both of which will be merge
	# base between A and B, like so:
	#
	#       O1---A
	#      /  \ /
	#    O0    .
	#      \  / \
	#       O2---B
	#
	# The recently added "check to see if the index is different from
	# the tree into which something else is getting merged" check must
	# NOT kick in when an inner merge between O1 and O2 is made.  Both
	# O1 and O2 happen to have the same tree as O0 in this test to
	# trigger the bug---whether the inner merge is made by merging O2
	# into O1 or O1 into O2, their common ancestor O0 and the branch
	# being merged have the same tree.  We should not trigger the "is
	# the index dirty?" check in this case.

	echo "zero" >file &&
	git add file &&
	test_tick &&
	git commit -m "O0" &&
	O0=$(git rev-parse HEAD) &&

	test_tick &&
	git commit --allow-empty -m "O1" &&
	O1=$(git rev-parse HEAD) &&

	git reset --hard $O0 &&
	test_tick &&
	git commit --allow-empty -m "O2" &&
	O2=$(git rev-parse HEAD) &&

	test_tick &&
	git merge -s ours $O1 &&
	B=$(git rev-parse HEAD) &&

	git reset --hard $O1 &&
	test_tick &&
	git merge -s ours $O2 &&
	A=$(git rev-parse HEAD) &&

	git merge $B

HEAD is now at d0fed96 Merge branch 'other' into topic
[topic 106b92a] O0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[topic 8bae1d1] O1
 Author: A U Thor <author@example.com>
HEAD is now at 106b92a O0
[topic bfe7880] O2
 Author: A U Thor <author@example.com>
Merge made by the 'ours' strategy.
HEAD is now at 8bae1d1 O1
Merge made by the 'ours' strategy.
Merge made by the 'ort' strategy.
ok 37 - merge-recursive internal merge resolves to the sameness

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6435-merge-sparse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6435-merge-sparse/.git/
expecting success of 6435.1 'setup': 
	test_file checked-out init &&
	test_file modify_delete modify_delete_init &&
	test_commit_this init &&
	test_file modify_delete modify_delete_theirs &&
	test_commit_this theirs &&
	git reset --hard init &&
	git rm modify_delete &&
	test_commit_this ours &&
	git config core.sparseCheckout true &&
	mkdir .git/info &&
	echo "/checked-out" >.git/info/sparse-checkout &&
	git reset --hard &&
	test_must_fail git merge theirs

[master (root-commit) badb3ac] init
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 checked-out
 create mode 100644 modify_delete
[master 1c06c2f] theirs
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at badb3ac init
rm 'modify_delete'
[master 3dfe889] ours
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 modify_delete
HEAD is now at 3dfe889 ours
CONFLICT (modify/delete): modify_delete deleted in HEAD and modified in theirs.  Version theirs of modify_delete left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 1 - setup

expecting success of 6435.2 'reset --hard works after the conflict': 
	git reset --hard

HEAD is now at 3dfe889 ours
ok 2 - reset --hard works after the conflict

expecting success of 6435.3 'is reset properly': 
	git status --porcelain -- modify_delete >out &&
	test_must_be_empty out &&
	test_path_is_missing modify_delete

ok 3 - is reset properly

expecting success of 6435.4 'setup: conflict back': 
	test_must_fail git merge theirs

CONFLICT (modify/delete): modify_delete deleted in HEAD and modified in theirs.  Version theirs of modify_delete left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - setup: conflict back

expecting success of 6435.5 'Merge abort works after the conflict': 
	git merge --abort

ok 5 - Merge abort works after the conflict

expecting success of 6435.6 'is aborted properly': 
	git status --porcelain -- modify_delete >out &&
	test_must_be_empty out &&
	test_path_is_missing modify_delete

ok 6 - is aborted properly

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6433-merge-toplevel.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6433-merge-toplevel/.git/
expecting success of 6433.1 'setup': 
	test_commit one &&
	git branch left &&
	git branch right &&
	test_commit two &&
	git checkout left &&
	test_commit three &&
	git checkout right &&
	test_commit four &&
	git checkout --orphan newroot &&
	test_commit five &&
	git checkout main

[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[main 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
Switched to branch 'left'
[left 897c206] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
Switched to branch 'right'
[right bd0edcc] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
Switched to a new branch 'newroot'
[newroot (root-commit) 5280273] five
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 five.t
 create mode 100644 four.t
 create mode 100644 one.t
Switched to branch 'main'
ok 1 - setup

expecting success of 6433.2 'merge an octopus into void': 
	t3033_reset &&
	git checkout --orphan test &&
	git rm -fr . &&
	test_must_fail git merge left right &&
	test_must_fail git rev-parse --verify HEAD &&
	git diff --quiet &&
	test_must_fail git rev-parse HEAD

Reset branch 'main'
Switched to a new branch 'test'
rm 'one.t'
rm 'two.t'
fatal: Can merge only exactly one commit into empty head
fatal: Needed a single revision
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
HEAD
ok 2 - merge an octopus into void

expecting success of 6433.3 'merge an octopus, fast-forward (ff)': 
	t3033_reset &&
	git reset --hard one &&
	git merge left right &&
	# one is ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^3 &&
	git rev-parse HEAD^1 HEAD^2 | sort >actual &&
	git rev-parse three four | sort >expect &&
	test_cmp expect actual

Switched to and reset branch 'main'
HEAD is now at d79ce16 one
Fast-forwarding to: left
Trying simple merge with right
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 3 - merge an octopus, fast-forward (ff)

expecting success of 6433.4 'merge octopus, non-fast-forward (ff)': 
	t3033_reset &&
	git reset --hard one &&
	git merge --no-ff left right &&
	# one is ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse one three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
HEAD is now at d79ce16 one
Fast-forwarding to: left
Trying simple merge with right
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 4 - merge octopus, non-fast-forward (ff)

expecting success of 6433.5 'merge octopus, fast-forward (does not ff)': 
	t3033_reset &&
	git merge left right &&
	# two (main) is not an ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse two three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
Trying simple merge with left
Trying simple merge with right
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 5 - merge octopus, fast-forward (does not ff)

expecting success of 6433.6 'merge octopus, non-fast-forward': 
	t3033_reset &&
	git merge --no-ff left right &&
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse two three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
Trying simple merge with left
Trying simple merge with right
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 6 - merge octopus, non-fast-forward

expecting success of 6433.7 'merge FETCH_HEAD octopus into void': 
	t3033_reset &&
	git checkout --orphan test &&
	git rm -fr . &&
	git fetch . left right &&
	test_must_fail git merge FETCH_HEAD &&
	test_must_fail git rev-parse --verify HEAD &&
	git diff --quiet &&
	test_must_fail git rev-parse HEAD

Reset branch 'main'
Switched to a new branch 'test'
rm 'one.t'
rm 'two.t'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
fatal: Can merge only exactly one commit into empty head
fatal: Needed a single revision
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
HEAD
ok 7 - merge FETCH_HEAD octopus into void

expecting success of 6433.8 'merge FETCH_HEAD octopus fast-forward (ff)': 
	t3033_reset &&
	git reset --hard one &&
	git fetch . left right &&
	git merge FETCH_HEAD &&
	# one is ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^3 &&
	git rev-parse HEAD^1 HEAD^2 | sort >actual &&
	git rev-parse three four | sort >expect &&
	test_cmp expect actual

Switched to and reset branch 'main'
HEAD is now at d79ce16 one
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Fast-forwarding to: 897c20684b5db8602798bc55d628f0a264841fec
Trying simple merge with bd0edcc3f6e0375d96ab0d02fcc4c4a1fe1d8c5f
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 8 - merge FETCH_HEAD octopus fast-forward (ff)

expecting success of 6433.9 'merge FETCH_HEAD octopus non-fast-forward (ff)': 
	t3033_reset &&
	git reset --hard one &&
	git fetch . left right &&
	git merge --no-ff FETCH_HEAD &&
	# one is ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse one three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
HEAD is now at d79ce16 one
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Fast-forwarding to: 897c20684b5db8602798bc55d628f0a264841fec
Trying simple merge with bd0edcc3f6e0375d96ab0d02fcc4c4a1fe1d8c5f
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 9 - merge FETCH_HEAD octopus non-fast-forward (ff)

expecting success of 6433.10 'merge FETCH_HEAD octopus fast-forward (does not ff)': 
	t3033_reset &&
	git fetch . left right &&
	git merge FETCH_HEAD &&
	# two (main) is not an ancestor of three (left) and four (right)
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse two three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Trying simple merge with 897c20684b5db8602798bc55d628f0a264841fec
Trying simple merge with bd0edcc3f6e0375d96ab0d02fcc4c4a1fe1d8c5f
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 10 - merge FETCH_HEAD octopus fast-forward (does not ff)

expecting success of 6433.11 'merge FETCH_HEAD octopus non-fast-forward': 
	t3033_reset &&
	git fetch . left right &&
	git merge --no-ff FETCH_HEAD &&
	test_must_fail git rev-parse --verify HEAD^4 &&
	git rev-parse HEAD^1 HEAD^2 HEAD^3 | sort >actual &&
	git rev-parse two three four | sort >expect &&
	test_cmp expect actual

Reset branch 'main'
From .
 * branch            left       -> FETCH_HEAD
 * branch            right      -> FETCH_HEAD
Trying simple merge with 897c20684b5db8602798bc55d628f0a264841fec
Trying simple merge with bd0edcc3f6e0375d96ab0d02fcc4c4a1fe1d8c5f
Merge made by the 'octopus' strategy.
 four.t  | 1 +
 three.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 four.t
 create mode 100644 three.t
fatal: Needed a single revision
ok 11 - merge FETCH_HEAD octopus non-fast-forward

expecting success of 6433.12 'refuse two-project merge by default': 
	t3033_reset &&
	git reset --hard four &&
	test_must_fail git merge five

Reset branch 'main'
HEAD is now at bd0edcc four
fatal: refusing to merge unrelated histories
ok 12 - refuse two-project merge by default

expecting success of 6433.13 'refuse two-project merge by default, quit before --autostash happens': 
	t3033_reset &&
	git reset --hard four &&
	echo change >>one.t &&
	git diff >expect &&
	test_must_fail git merge --autostash five 2>err &&
	test_i18ngrep ! "stash" err &&
	git diff >actual &&
	test_cmp expect actual

Reset branch 'main'
HEAD is now at bd0edcc four
ok 13 - refuse two-project merge by default, quit before --autostash happens

expecting success of 6433.14 'two-project merge with --allow-unrelated-histories': 
	t3033_reset &&
	git reset --hard four &&
	git merge --allow-unrelated-histories five &&
	git diff --exit-code five

Reset branch 'main'
M	one.t
HEAD is now at bd0edcc four
Merge made by the 'ort' strategy.
 five.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
ok 14 - two-project merge with --allow-unrelated-histories

expecting success of 6433.15 'two-project merge with --allow-unrelated-histories with --autostash': 
	t3033_reset &&
	git reset --hard four &&
	echo change >>one.t &&
	git diff one.t >expect &&
	git merge --allow-unrelated-histories --autostash five 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git diff one.t >actual &&
	test_cmp expect actual

Reset branch 'main'
HEAD is now at bd0edcc four
Created autostash: 2969e55
Merge made by the 'ort' strategy.
 five.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
Applied autostash.
ok 15 - two-project merge with --allow-unrelated-histories with --autostash

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6434-merge-recursive-rename-options.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6434-merge-recursive-rename-options/.git/
expecting success of 6434.1 'setup repo': 
	cat <<-\EOF >3-old &&
	33a
	33b
	33c
	33d
	EOF
	sed s/33/22/ <3-old >2-old &&
	sed s/33/11/ <3-old >1-old &&
	sed s/33/00/ <3-old >0-old &&
	git add [0-3]-old &&
	git commit -m base &&
	git rm [0-3]-old &&
	git commit -m delete &&
	git checkout -b rename HEAD^ &&
	cp 3-old 3-new &&
	sed 1,1s/./x/ <2-old >2-new &&
	sed 1,2s/./x/ <1-old >1-new &&
	sed 1,3s/./x/ <0-old >0-new &&
	git add [0-3]-new &&
	git rm [0-3]-old &&
	git commit -m rename &&
	get_expected_stages 0 &&
	get_expected_stages 1 &&
	get_expected_stages 2 &&
	get_expected_stages 3 &&
	check_50="false" &&
	tail="HEAD^ -- HEAD main"

[main (root-commit) f9f9b59] base
 Author: A U Thor <author@example.com>
 4 files changed, 16 insertions(+)
 create mode 100644 0-old
 create mode 100644 1-old
 create mode 100644 2-old
 create mode 100644 3-old
rm '0-old'
rm '1-old'
rm '2-old'
rm '3-old'
[main f3f4da2] delete
 Author: A U Thor <author@example.com>
 4 files changed, 16 deletions(-)
 delete mode 100644 0-old
 delete mode 100644 1-old
 delete mode 100644 2-old
 delete mode 100644 3-old
Switched to a new branch 'rename'
rm '0-old'
rm '1-old'
rm '2-old'
rm '3-old'
[rename 056f2c0] rename
 Author: A U Thor <author@example.com>
 5 files changed, 7 insertions(+), 7 deletions(-)
 create mode 100644 0-new
 delete mode 100644 0-old
 rename 1-old => 1-new (50%)
 rename 2-old => 2-new (75%)
 rename 3-old => 3-new (100%)
ok 1 - setup repo

expecting success of 6434.2 'setup thresholds': 
	git diff --name-status -M01 HEAD^ HEAD >diff-output &&
	test_debug "cat diff-output" &&
	test_line_count = 4 diff-output &&
	grep "R[0-9][0-9][0-9]	\([0-3]\)-old	\1-new" diff-output \
		>grep-output &&
	test_cmp diff-output grep-output &&
	th0=$(sed -n "s/R\(...\)	0-old	0-new/\1/p" <diff-output) &&
	th1=$(sed -n "s/R\(...\)	1-old	1-new/\1/p" <diff-output) &&
	th2=$(sed -n "s/R\(...\)	2-old	2-new/\1/p" <diff-output) &&
	th3=$(sed -n "s/R\(...\)	3-old	3-new/\1/p" <diff-output) &&
	test "$th0" -lt "$th1" &&
	test "$th1" -lt "$th2" &&
	test "$th2" -lt "$th3" &&
	test "$th3" = 100 &&
	if test 50 -le "$th0"
	then
		check_50=check_threshold_0
	elif test 50 -le "$th1"
	then
		check_50=check_threshold_1
	elif test 50 -le "$th2"
	then
		check_50=check_threshold_2
	fi &&
	th0="$th0%" &&
	th1="$th1%" &&
	th2="$th2%" &&
	th3="$th3%"

ok 2 - setup thresholds

expecting success of 6434.3 'assumption for tests: rename detection with diff': 
	git diff --name-status -M$th0 --diff-filter=R HEAD^ HEAD \
		>diff-output-0 &&
	git diff --name-status -M$th1 --diff-filter=R HEAD^ HEAD \
		>diff-output-1 &&
	git diff --name-status -M$th2 --diff-filter=R HEAD^ HEAD \
		>diff-output-2 &&
	git diff --name-status -M100% --diff-filter=R HEAD^ HEAD \
		>diff-output-3 &&
	test_line_count = 4 diff-output-0 &&
	test_line_count = 3 diff-output-1 &&
	test_line_count = 2 diff-output-2 &&
	test_line_count = 1 diff-output-3

ok 3 - assumption for tests: rename detection with diff

expecting success of 6434.4 'default similarity threshold is 50%': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive $tail &&
	$check_50

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
ok 4 - default similarity threshold is 50%

expecting success of 6434.5 'low rename threshold': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=$th0 $tail &&
	check_threshold_0

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
CONFLICT (rename/delete): 0-old deleted in main and renamed to 0-new in HEAD. Version HEAD of 0-new left in tree.
ok 5 - low rename threshold

expecting success of 6434.6 'medium rename threshold': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=$th1 $tail &&
	check_threshold_1

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
ok 6 - medium rename threshold

expecting success of 6434.7 'high rename threshold': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=$th2 $tail &&
	check_threshold_2

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
ok 7 - high rename threshold

expecting success of 6434.8 'exact renames only': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=100% $tail &&
	check_exact_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
ok 8 - exact renames only

expecting success of 6434.9 'rename threshold is truncated': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=200% $tail &&
	check_exact_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
ok 9 - rename threshold is truncated

expecting success of 6434.10 'disabled rename detection': 
	git read-tree --reset -u HEAD &&
	git merge-recursive --no-renames $tail &&
	check_no_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
ok 10 - disabled rename detection

expecting success of 6434.11 'last wins in --find-renames=<m> --find-renames=<n>': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive \
		--find-renames=$th0 --find-renames=$th2 $tail &&
	check_threshold_2

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
ok 11 - last wins in --find-renames=<m> --find-renames=<n>

expecting success of 6434.12 '--find-renames resets threshold': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive \
		--find-renames=$th0 --find-renames $tail &&
	$check_50

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
ok 12 - --find-renames resets threshold

expecting success of 6434.13 'last wins in --no-renames --find-renames': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --no-renames --find-renames $tail &&
	$check_50

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
ok 13 - last wins in --no-renames --find-renames

expecting success of 6434.14 'last wins in --find-renames --no-renames': 
	git read-tree --reset -u HEAD &&
	git merge-recursive --find-renames --no-renames $tail &&
	check_no_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
ok 14 - last wins in --find-renames --no-renames

expecting success of 6434.15 'assumption for further tests: trivial merge succeeds': 
	git read-tree --reset -u HEAD &&
	git merge-recursive HEAD -- HEAD HEAD &&
	git diff --quiet --cached &&
	git merge-recursive --find-renames=$th0 HEAD -- HEAD HEAD &&
	git diff --quiet --cached &&
	git merge-recursive --find-renames=$th2 HEAD -- HEAD HEAD &&
	git diff --quiet --cached &&
	git merge-recursive --find-renames=100% HEAD -- HEAD HEAD &&
	git diff --quiet --cached &&
	git merge-recursive --no-renames HEAD -- HEAD HEAD &&
	git diff --quiet --cached

Merging HEAD with HEAD
Merging:
056f2c0 rename
056f2c0 rename
found 1 common ancestor:
056f2c0 rename
Already up to date.
Merging HEAD with HEAD
Merging:
056f2c0 rename
056f2c0 rename
found 1 common ancestor:
056f2c0 rename
Already up to date.
Merging HEAD with HEAD
Merging:
056f2c0 rename
056f2c0 rename
found 1 common ancestor:
056f2c0 rename
Already up to date.
Merging HEAD with HEAD
Merging:
056f2c0 rename
056f2c0 rename
found 1 common ancestor:
056f2c0 rename
Already up to date.
Merging HEAD with HEAD
Merging:
056f2c0 rename
056f2c0 rename
found 1 common ancestor:
056f2c0 rename
Already up to date.
ok 15 - assumption for further tests: trivial merge succeeds

expecting success of 6434.16 '--find-renames rejects negative argument': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=-25 \
		HEAD -- HEAD HEAD &&
	git diff --quiet --cached

fatal: unknown option --find-renames=-25
ok 16 - --find-renames rejects negative argument

expecting success of 6434.17 '--find-renames rejects non-numbers': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --find-renames=0xf \
		HEAD -- HEAD HEAD &&
	git diff --quiet --cached

fatal: unknown option --find-renames=0xf
ok 17 - --find-renames rejects non-numbers

expecting success of 6434.18 'rename-threshold=<n> is a synonym for find-renames=<n>': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --rename-threshold=$th0 $tail &&
	check_threshold_0

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
CONFLICT (rename/delete): 0-old deleted in main and renamed to 0-new in HEAD. Version HEAD of 0-new left in tree.
ok 18 - rename-threshold=<n> is a synonym for find-renames=<n>

expecting success of 6434.19 'last wins in --no-renames --rename-threshold=<n>': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --no-renames --rename-threshold=$th0 $tail &&
	check_threshold_0

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
CONFLICT (rename/delete): 0-old deleted in main and renamed to 0-new in HEAD. Version HEAD of 0-new left in tree.
ok 19 - last wins in --no-renames --rename-threshold=<n>

expecting success of 6434.20 'last wins in --rename-threshold=<n> --no-renames': 
	git read-tree --reset -u HEAD &&
	git merge-recursive --rename-threshold=$th0 --no-renames $tail &&
	check_no_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
ok 20 - last wins in --rename-threshold=<n> --no-renames

expecting success of 6434.21 '--rename-threshold=<n> rejects negative argument': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --rename-threshold=-25 \
		HEAD -- HEAD HEAD &&
	git diff --quiet --cached

fatal: unknown option --rename-threshold=-25
ok 21 - --rename-threshold=<n> rejects negative argument

expecting success of 6434.22 '--rename-threshold=<n> rejects non-numbers': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --rename-threshold=0xf \
		HEAD -- HEAD HEAD &&
	git diff --quiet --cached

fatal: unknown option --rename-threshold=0xf
ok 22 - --rename-threshold=<n> rejects non-numbers

expecting success of 6434.23 'last wins in --rename-threshold=<m> --find-renames=<n>': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive \
		--rename-threshold=$th0 --find-renames=$th2 $tail &&
	check_threshold_2

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
ok 23 - last wins in --rename-threshold=<m> --find-renames=<n>

expecting success of 6434.24 'last wins in --find-renames=<m> --rename-threshold=<n>': 
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive \
		--find-renames=$th2 --rename-threshold=$th0 $tail &&
	check_threshold_0

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
CONFLICT (rename/delete): 0-old deleted in main and renamed to 0-new in HEAD. Version HEAD of 0-new left in tree.
ok 24 - last wins in --find-renames=<m> --rename-threshold=<n>

expecting success of 6434.25 'merge.renames disables rename detection': 
	git read-tree --reset -u HEAD &&
	git -c merge.renames=false merge-recursive $tail &&
	check_no_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
ok 25 - merge.renames disables rename detection

expecting success of 6434.26 'merge.renames defaults to diff.renames': 
	git read-tree --reset -u HEAD &&
	git -c diff.renames=false merge-recursive $tail &&
	check_no_renames

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
ok 26 - merge.renames defaults to diff.renames

expecting success of 6434.27 'merge.renames overrides diff.renames': 
	git read-tree --reset -u HEAD &&
	test_must_fail git -c diff.renames=false -c merge.renames=true merge-recursive $tail &&
	$check_50

Merging HEAD with main
Merging:
056f2c0 rename
f3f4da2 delete
found 1 common ancestor:
f9f9b59 base
CONFLICT (rename/delete): 3-old deleted in main and renamed to 3-new in HEAD. Version HEAD of 3-new left in tree.
CONFLICT (rename/delete): 2-old deleted in main and renamed to 2-new in HEAD. Version HEAD of 2-new left in tree.
CONFLICT (rename/delete): 1-old deleted in main and renamed to 1-new in HEAD. Version HEAD of 1-new left in tree.
ok 27 - merge.renames overrides diff.renames

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6436-merge-overwrite.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6436-merge-overwrite/.git/
expecting success of 6436.1 'setup': 
	test_commit c0 c0.c &&
	test_commit c1 c1.c &&
	test_commit c1a c1.c "c1 a" &&
	git reset --hard c0 &&
	test_commit c2 c2.c &&
	git reset --hard c0 &&
	mkdir sub &&
	echo "sub/f" > sub/f &&
	mkdir sub2 &&
	echo "sub2/f" > sub2/f &&
	git add sub/f sub2/f &&
	git commit -m sub &&
	git tag sub &&
	echo "VERY IMPORTANT CHANGES" > important

[main (root-commit) 934056f] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[main 7b51d7c] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
[main 4e7fedb] c1a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 934056f c0
[main 48f99e1] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
HEAD is now at 934056f c0
[main 55608b7] sub
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 sub/f
 create mode 100644 sub2/f
ok 1 - setup

expecting success of 6436.2 'will not overwrite untracked file': 
	git reset --hard c1 &&
	cp important c2.c &&
	test_must_fail git merge c2 &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important c2.c

HEAD is now at 7b51d7c c1
error: The following untracked working tree files would be overwritten by merge:
	c2.c
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 2 - will not overwrite untracked file

expecting success of 6436.3 'will overwrite tracked file': 
	git reset --hard c1 &&
	cp important c2.c &&
	git add c2.c &&
	git commit -m important &&
	git checkout c2

HEAD is now at 7b51d7c c1
[main b7e8e56] important
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
Note: switching to 'c2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 48f99e1 c2
ok 3 - will overwrite tracked file

expecting success of 6436.4 'will not overwrite new file': 
	git reset --hard c1 &&
	cp important c2.c &&
	git add c2.c &&
	test_must_fail git merge c2 &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important c2.c

HEAD is now at 7b51d7c c1
error: Your local changes to the following files would be overwritten by merge:
  c2.c
Merge with strategy ort failed.
ok 4 - will not overwrite new file

expecting success of 6436.5 'will not overwrite staged changes': 
	git reset --hard c1 &&
	cp important c2.c &&
	git add c2.c &&
	rm c2.c &&
	test_must_fail git merge c2 &&
	test_path_is_missing .git/MERGE_HEAD &&
	git checkout c2.c &&
	test_cmp important c2.c

HEAD is now at 7b51d7c c1
error: Your local changes to the following files would be overwritten by merge:
  c2.c
Merge with strategy ort failed.
Updated 0 paths from the index
ok 5 - will not overwrite staged changes

expecting success of 6436.6 'will not overwrite removed file': 
	git reset --hard c1 &&
	git rm c1.c &&
	git commit -m "rm c1.c" &&
	cp important c1.c &&
	test_must_fail git merge c1a &&
	test_cmp important c1.c &&
	rm c1.c  # Do not leave untracked file in way of future tests

HEAD is now at 7b51d7c c1
rm 'c1.c'
[detached HEAD 86e44d1] rm c1.c
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 c1.c
error: The following untracked working tree files would be overwritten by merge:
	c1.c
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 6 - will not overwrite removed file

expecting success of 6436.7 'will not overwrite re-added file': 
	git reset --hard c1 &&
	git rm c1.c &&
	git commit -m "rm c1.c" &&
	cp important c1.c &&
	git add c1.c &&
	test_must_fail git merge c1a &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important c1.c

HEAD is now at 7b51d7c c1
rm 'c1.c'
[detached HEAD 86e44d1] rm c1.c
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 c1.c
error: Your local changes to the following files would be overwritten by merge:
  c1.c
Merge with strategy ort failed.
ok 7 - will not overwrite re-added file

expecting success of 6436.8 'will not overwrite removed file with staged changes': 
	git reset --hard c1 &&
	git rm c1.c &&
	git commit -m "rm c1.c" &&
	cp important c1.c &&
	git add c1.c &&
	rm c1.c &&
	test_must_fail git merge c1a &&
	test_path_is_missing .git/MERGE_HEAD &&
	git checkout c1.c &&
	test_cmp important c1.c

HEAD is now at 7b51d7c c1
rm 'c1.c'
[detached HEAD 86e44d1] rm c1.c
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 c1.c
error: Your local changes to the following files would be overwritten by merge:
  c1.c
Merge with strategy ort failed.
Updated 0 paths from the index
ok 8 - will not overwrite removed file with staged changes

expecting success of 6436.9 'will not overwrite unstaged changes in renamed file': 
	git reset --hard c1 &&
	git mv c1.c other.c &&
	git commit -m rename &&
	cp important other.c &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test_must_fail git merge c1a >out 2>err &&
		test_i18ngrep "would be overwritten by merge" err &&
		test_cmp important other.c &&
		test_path_is_missing .git/MERGE_HEAD
	else
		test_must_fail git merge c1a >out &&
		test_i18ngrep "Refusing to lose dirty file at other.c" out &&
		test_path_is_file other.c~HEAD &&
		test $(git hash-object other.c~HEAD) = $(git rev-parse c1a:c1.c) &&
		test_cmp important other.c
	fi

HEAD is now at 7b51d7c c1
[detached HEAD 891a741] rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename c1.c => other.c (100%)
error: Your local changes to the following files would be overwritten by merge:
ok 9 - will not overwrite unstaged changes in renamed file

expecting success of 6436.10 'will not overwrite untracked subtree': 
	git reset --hard c0 &&
	rm -rf sub &&
	mkdir -p sub/f &&
	cp important sub/f/important &&
	test_must_fail git merge sub &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important sub/f/important

HEAD is now at 934056f c0
error: Updating the following directories would lose untracked files in them:
	sub/f

Aborting
Updating 934056f..55608b7
ok 10 - will not overwrite untracked subtree

expecting success of 6436.11 'will not overwrite untracked file in leading path': 
	git reset --hard c0 &&
	rm -rf sub &&
	cp important sub &&
	cp important sub2 &&
	test_must_fail git merge sub 2>out &&
	test_cmp out expect &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important sub &&
	test_cmp important sub2 &&
	rm -f sub sub2

HEAD is now at 934056f c0
Updating 934056f..55608b7
ok 11 - will not overwrite untracked file in leading path

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 6436.12 'will not overwrite untracked symlink in leading path': 
	git reset --hard c0 &&
	rm -rf sub &&
	mkdir sub2 &&
	ln -s sub2 sub &&
	test_must_fail git merge sub &&
	test_path_is_missing .git/MERGE_HEAD

HEAD is now at 934056f c0
error: The following untracked working tree files would be overwritten by merge:
	sub
Please move or remove them before you merge.
Aborting
Updating 934056f..55608b7
ok 12 - will not overwrite untracked symlink in leading path

expecting success of 6436.13 'will not be confused by symlink in leading path': 
	git reset --hard c0 &&
	rm -rf sub &&
	test_ln_s_add sub2 sub &&
	git commit -m ln &&
	git checkout sub

HEAD is now at 934056f c0
[detached HEAD 6d387d8] ln
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 sub
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6d387d8 ln

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 6d387d8

HEAD is now at 55608b7 sub
ok 13 - will not be confused by symlink in leading path

expecting success of 6436.14 'will not overwrite untracked file on unborn branch': 
	git reset --hard c0 &&
	git rm -fr . &&
	git checkout --orphan new &&
	cp important c0.c &&
	test_must_fail git merge c0 2>out &&
	test_cmp out expect

HEAD is now at 934056f c0
rm 'c0.c'
Switched to a new branch 'new'
D	c0.c
ok 14 - will not overwrite untracked file on unborn branch

expecting success of 6436.15 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.': 
	test_when_finished "rm c0.c" &&
	test_path_is_missing .git/MERGE_HEAD &&
	test_cmp important c0.c

ok 15 - will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.

expecting success of 6436.16 'failed merge leaves unborn branch in the womb': 
	test_must_fail git rev-parse --verify HEAD

fatal: Needed a single revision
ok 16 - failed merge leaves unborn branch in the womb

expecting success of 6436.17 'set up unborn branch and content': 
	git symbolic-ref HEAD refs/heads/unborn &&
	rm -f .git/index &&
	echo foo > tracked-file &&
	git add tracked-file &&
	echo bar > untracked-file

ok 17 - set up unborn branch and content

expecting success of 6436.18 'will not clobber WT/index when merging into unborn': 
	git merge main &&
	grep foo tracked-file &&
	git show :tracked-file >expect &&
	grep foo expect &&
	grep bar untracked-file

foo
foo
bar
ok 18 - will not clobber WT/index when merging into unborn

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6439-merge-co-error-msgs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6439-merge-co-error-msgs/.git/
expecting success of 6439.1 'setup': 
	echo one >one &&
	git add one &&
	git commit -a -m First &&

	git checkout -b branch &&
	echo two >two &&
	echo three >three &&
	echo four >four &&
	echo five >five &&
	git add two three four five &&
	git commit -m Second &&

	git checkout main &&
	echo other >two &&
	echo other >three &&
	echo other >four &&
	echo other >five

[main (root-commit) 3083e2d] First
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one
Switched to a new branch 'branch'
[branch c53906c] Second
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 five
 create mode 100644 four
 create mode 100644 three
 create mode 100644 two
Switched to branch 'main'
ok 1 - setup

expecting success of 6439.2 'untracked files overwritten by merge (fast and non-fast forward)': 
	test_must_fail git merge branch 2>out &&
	test_cmp out expect &&
	git commit --allow-empty -m empty &&
	(
		GIT_MERGE_VERBOSITY=0 &&
		export GIT_MERGE_VERBOSITY &&
		test_must_fail git merge branch 2>out2
	) &&
	echo "Merge with strategy ${GIT_TEST_MERGE_ALGORITHM:-ort} failed." >>expect &&
	test_cmp out2 expect &&
	git reset --hard HEAD^

Updating 3083e2d..c53906c
[main 47a855e] empty
 Author: A U Thor <author@example.com>
HEAD is now at 3083e2d First
ok 2 - untracked files overwritten by merge (fast and non-fast forward)

expecting success of 6439.3 'untracked files or local changes ovewritten by merge': 
	git add two &&
	git add three &&
	git add four &&
	test_must_fail git merge branch 2>out &&
	test_cmp out expect

Updating 3083e2d..c53906c
ok 3 - untracked files or local changes ovewritten by merge

expecting success of 6439.4 'cannot switch branches because of local changes': 
	git add five &&
	mkdir rep &&
	echo one >rep/one &&
	echo two >rep/two &&
	git add rep/one rep/two &&
	git commit -m Fourth &&
	git checkout main &&
	echo uno >rep/one &&
	echo dos >rep/two &&
	test_must_fail git checkout branch 2>out &&
	test_cmp out expect

[main d37de72] Fourth
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 five
 create mode 100644 four
 create mode 100644 rep/one
 create mode 100644 rep/two
 create mode 100644 three
 create mode 100644 two
Already on 'main'
ok 4 - cannot switch branches because of local changes

expecting success of 6439.5 'not uptodate file porcelain checkout error': 
	git add rep/one rep/two &&
	test_must_fail git checkout branch 2>out &&
	test_cmp out expect

ok 5 - not uptodate file porcelain checkout error

expecting success of 6439.6 'not_uptodate_dir porcelain checkout error': 
	git init uptodate &&
	cd uptodate &&
	mkdir rep &&
	mkdir rep2 &&
	touch rep/foo &&
	touch rep2/foo &&
	git add rep/foo rep2/foo &&
	git commit -m init &&
	git checkout -b branch &&
	git rm rep -r &&
	git rm rep2 -r &&
	>rep &&
	>rep2 &&
	git add rep rep2 &&
	git commit -m "added test as a file" &&
	git checkout main &&
	>rep/untracked-file &&
	>rep2/untracked-file &&
	test_must_fail git checkout branch 2>out &&
	test_cmp out ../expect

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6439-merge-co-error-msgs/uptodate/.git/
[main (root-commit) 12cbe1c] init
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 rep/foo
 create mode 100644 rep2/foo
Switched to a new branch 'branch'
rm 'rep/foo'
rm 'rep2/foo'
[branch 5db55b7] added test as a file
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename rep/foo => rep (100%)
 rename rep2/foo => rep2 (100%)
Switched to branch 'main'
ok 6 - not_uptodate_dir porcelain checkout error

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6437-submodule-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/.git/
expecting success of 6437.1 'setup': 

	mkdir sub &&
	(cd sub &&
	 git init &&
	 echo original > file &&
	 git add file &&
	 test_tick &&
	 git commit -m sub-root) &&
	git add sub &&
	test_tick &&
	git commit -m root &&

	git checkout -b a main &&
	(cd sub &&
	 echo A > file &&
	 git add file &&
	 test_tick &&
	 git commit -m sub-a) &&
	git add sub &&
	test_tick &&
	git commit -m a &&

	git checkout -b b main &&
	(cd sub &&
	 echo B > file &&
	 git add file &&
	 test_tick &&
	 git commit -m sub-b) &&
	git add sub &&
	test_tick &&
	git commit -m b &&

	git checkout -b c a &&
	git merge -s ours b &&

	git checkout -b d b &&
	git merge -s ours a

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/sub/.git/
[main (root-commit) 0998b33] sub-root
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) 5c9ada4] root
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
Switched to a new branch 'a'
[main d98dfef] sub-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[a 6102a2a] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'b'
M	sub
[main ce35c37] sub-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[b 0405d8c] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'c'
M	sub
Merge made by the 'ours' strategy.
Switched to a new branch 'd'
Merge made by the 'ours' strategy.
ok 1 - setup

expecting success of 6437.2 'setup for merge search': 
	mkdir merge-search &&
	(cd merge-search &&
	git init &&
	mkdir sub &&
	(cd sub &&
	 git init &&
	 echo "file-a" > file-a &&
	 git add file-a &&
	 git commit -m "sub-a" &&
	 git branch sub-a) &&
	git commit --allow-empty -m init &&
	git branch init &&
	git add sub &&
	git commit -m "a" &&
	git branch a &&

	git checkout -b b &&
	(cd sub &&
	 git checkout -b sub-b &&
	 echo "file-b" > file-b &&
	 git add file-b &&
	 git commit -m "sub-b") &&
	git commit -a -m "b" &&

	git checkout -b c a &&
	(cd sub &&
	 git checkout -b sub-c sub-a &&
	 echo "file-c" > file-c &&
	 git add file-c &&
	 git commit -m "sub-c") &&
	git commit -a -m "c")

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/merge-search/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/merge-search/sub/.git/
[main (root-commit) 9c64145] sub-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-a
[main (root-commit) edb5fba] init
 Author: A U Thor <author@example.com>
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[main ea59e10] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
Switched to a new branch 'b'
Switched to a new branch 'sub-b'
[sub-b 1e4c5d4] sub-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-b
[b 65d3c25] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'c'
M	sub
Switched to a new branch 'sub-c'
[sub-c 18cac7c] sub-c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-c
[c 00fd913] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - setup for merge search

expecting success of 6437.3 'merging should conflict for non fast-forward': 
	test_when_finished "git -C merge-search reset --hard" &&
	(cd merge-search &&
	 git checkout -b test-nonforward-a b &&
	  if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	  then
		test_must_fail git merge c >actual &&
		sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
		grep "$sub_expect" actual
	  else
		test_must_fail git merge c 2> actual
	  fi)

Switched to a new branch 'test-nonforward-a'
M	sub
 - go to submodule (sub), and either merge commit 18cac7c
HEAD is now at 65d3c25 b
ok 3 - merging should conflict for non fast-forward

expecting success of 6437.4 'finish setup for merge-search': 
	(cd merge-search &&
	git checkout -b d a &&
	(cd sub &&
	 git checkout -b sub-d sub-b &&
	 git merge sub-c) &&
	git commit -a -m "d" &&
	git branch test b &&

	git checkout -b g init &&
	(cd sub &&
	 git checkout -b sub-g sub-c) &&
	git add sub &&
	git commit -a -m "g")

Switched to a new branch 'd'
M	sub
Switched to a new branch 'sub-d'
Merge made by the 'ort' strategy.
 file-c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file-c
[d 40eded3] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: unable to rmdir 'sub': Directory not empty
Switched to a new branch 'g'
Switched to a new branch 'sub-g'
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[g 61ce3a9] g
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
ok 4 - finish setup for merge-search

expecting success of 6437.5 'merge with one side as a fast-forward of the other': 
	(cd merge-search &&
	 git checkout -b test-forward b &&
	 git merge d &&
	 git ls-tree test-forward sub | cut -f1 | cut -f3 -d" " > actual &&
	 (cd sub &&
	  git rev-parse sub-d > ../expect) &&
	 test_cmp expect actual)

Switched to a new branch 'test-forward'
M	sub
Note: Fast-forwarding submodule sub to aafcfa2a62764282ab848d5d6bea86ba217c1b24
Merge made by the 'ort' strategy.
 sub | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 5 - merge with one side as a fast-forward of the other

expecting success of 6437.6 'merging should conflict for non fast-forward (resolution exists)': 
	(cd merge-search &&
	 git checkout -b test-nonforward-b b &&
	 (cd sub &&
	  git rev-parse --short sub-d > ../expect) &&
	  if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	  then
		test_must_fail git merge c >actual &&
		sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
		grep "$sub_expect" actual
	  else
		test_must_fail git merge c 2> actual
	  fi &&
	 grep $(cat expect) actual > /dev/null &&
	 git reset --hard)

Switched to a new branch 'test-nonforward-b'
M	sub
 - go to submodule (sub), and either merge commit 18cac7c
HEAD is now at 65d3c25 b
ok 6 - merging should conflict for non fast-forward (resolution exists)

expecting success of 6437.7 'merging should fail for ambiguous common parent': 
	(cd merge-search &&
	git checkout -b test-ambiguous b &&
	(cd sub &&
	 git checkout -b ambiguous sub-b &&
	 git merge sub-c &&
	 if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	 then
		git rev-parse --short sub-d >../expect1 &&
		git rev-parse --short ambiguous >../expect2
	 else
		git rev-parse sub-d > ../expect1 &&
		git rev-parse ambiguous > ../expect2
	 fi
	 ) &&
	 if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	 then
		test_must_fail git merge c >actual &&
		sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
		grep "$sub_expect" actual
	 else
		test_must_fail git merge c 2> actual
	 fi &&
	grep $(cat expect1) actual > /dev/null &&
	grep $(cat expect2) actual > /dev/null &&
	git reset --hard)

Switched to a new branch 'test-ambiguous'
M	sub
Switched to a new branch 'ambiguous'
Merge made by the 'ort' strategy.
 file-c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file-c
 - go to submodule (sub), and either merge commit 18cac7c
HEAD is now at 65d3c25 b
ok 7 - merging should fail for ambiguous common parent

expecting success of 6437.8 'merging should fail for changes that are backwards': 
	(cd merge-search &&
	git checkout -b bb a &&
	(cd sub &&
	 git checkout sub-b) &&
	git commit -a -m "bb" &&

	git checkout -b e bb &&
	(cd sub &&
	 git checkout sub-a) &&
	git commit -a -m "e" &&

	git checkout -b f bb &&
	(cd sub &&
	 git checkout sub-d) &&
	git commit -a -m "f" &&

	git checkout -b test-backward e &&
	test_must_fail git merge f >actual &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
    then
		sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-d)" &&
		grep "$sub_expect" actual
	fi)

Switched to a new branch 'bb'
M	sub
Switched to branch 'sub-b'
[bb 41fd2a8] bb
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'e'
Switched to branch 'sub-a'
[e 49e8960] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'f'
M	sub
Switched to branch 'sub-d'
[f ceec2f6] f
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'test-backward'
M	sub
 - go to submodule (sub), and either merge commit aafcfa2
ok 8 - merging should fail for changes that are backwards

expecting success of 6437.9 'git submodule status should display the merge conflict properly with merge base': 
       (cd merge-search &&
       cat >.gitmodules <<EOF &&
[submodule "sub"]
       path = sub
       url = $TRASH_DIRECTORY/sub
EOF
       cat >expect <<EOF &&
U$ZERO_OID sub
EOF
       git submodule status > actual &&
       test_cmp expect actual &&
	git reset --hard)

HEAD is now at 49e8960 e
ok 9 - git submodule status should display the merge conflict properly with merge base

expecting success of 6437.10 'git submodule status should display the merge conflict properly without merge-base': 
       (cd merge-search &&
	git checkout -b test-no-merge-base g &&
	test_must_fail git merge b &&
       cat >.gitmodules <<EOF &&
[submodule "sub"]
       path = sub
       url = $TRASH_DIRECTORY/sub
EOF
       cat >expect <<EOF &&
U$ZERO_OID sub
EOF
       git submodule status > actual &&
       test_cmp expect actual &&
       git reset --hard)

Switched to a new branch 'test-no-merge-base'
M	sub
Failed to merge submodule sub (no merge base)
CONFLICT (submodule): Merge conflict in sub
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (sub), and either merge commit 1e4c5d4
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add sub

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 61ce3a9 g
ok 10 - git submodule status should display the merge conflict properly without merge-base

expecting success of 6437.11 'merging with a modify/modify conflict between merge bases': 
	git reset --hard HEAD &&
	git checkout -b test2 c &&
	git merge d

HEAD is now at f35b3af Merge branch 'a' into d
Switched to a new branch 'test2'
M	sub
  From inner merge:  Note: Fast-forwarding submodule sub to ce35c37b7ac232e25ec1e4224f220de1cc360c38
Merge made by the 'ort' strategy.
ok 11 - merging with a modify/modify conflict between merge bases

expecting success of 6437.12 'setup for recursive merge with submodule': 
	mkdir merge-recursive &&
	(cd merge-recursive &&
	 git init &&
	 mkdir sub &&
	 (cd sub &&
	  git init &&
	  test_commit a &&
	  git checkout -b sub-b main &&
	  test_commit b &&
	  git checkout -b sub-c main &&
	  test_commit c &&
	  git checkout -b sub-bc sub-b &&
	  git merge sub-c &&
	  git checkout -b sub-cb sub-c &&
	  git merge sub-b &&
	  git checkout main) &&
	 git add sub &&
	 git commit -m a &&
	 git checkout -b top-b main &&
	 (cd sub && git checkout sub-b) &&
	 git add sub &&
	 git commit -m b &&
	 git checkout -b top-c main &&
	 (cd sub && git checkout sub-c) &&
	 git add sub &&
	 git commit -m c &&
	 git checkout -b top-bc top-b &&
	 git merge -s ours --no-commit top-c &&
	 (cd sub && git checkout sub-bc) &&
	 git add sub &&
	 git commit -m bc &&
	 git checkout -b top-cb top-c &&
	 git merge -s ours --no-commit top-b &&
	 (cd sub && git checkout sub-cb) &&
	 git add sub &&
	 git commit -m cb)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/merge-recursive/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/merge-recursive/sub/.git/
[main (root-commit) 9d932ab] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.t
Switched to a new branch 'sub-b'
[sub-b 8b32189] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
Switched to a new branch 'sub-c'
[sub-c 7d3d4d8] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Switched to a new branch 'sub-bc'
Merge made by the 'ort' strategy.
 c.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Switched to a new branch 'sub-cb'
Merge made by the 'ort' strategy.
 b.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
Switched to branch 'main'
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[main (root-commit) a2ff72f] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
Switched to a new branch 'top-b'
Switched to branch 'sub-b'
[top-b f6b4d5a] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'top-c'
M	sub
Switched to branch 'sub-c'
[top-c 4d9cfab] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'top-bc'
M	sub
Automatic merge went well; stopped before committing as requested
Switched to branch 'sub-bc'
[top-bc ff9bd9b] bc
 Author: A U Thor <author@example.com>
Switched to a new branch 'top-cb'
M	sub
Automatic merge went well; stopped before committing as requested
Switched to branch 'sub-cb'
[top-cb a0ac63b] cb
 Author: A U Thor <author@example.com>
ok 12 - setup for recursive merge with submodule

expecting success of 6437.13 'recursive merge with submodule': 
	(cd merge-recursive &&
	 test_must_fail git merge top-bc &&
	 echo "160000 $(git rev-parse top-cb:sub) 2	sub" > expect2 &&
	 echo "160000 $(git rev-parse top-bc:sub) 3	sub" > expect3 &&
	 git ls-files -u > actual &&
	 grep "$(cat expect2)" actual > /dev/null &&
	 grep "$(cat expect3)" actual > /dev/null)

  From inner merge:  CONFLICT (submodule): Merge conflict in sub
Failed to merge submodule sub
CONFLICT (submodule): Merge conflict in sub
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (sub), and either merge commit 8060496
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add sub

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
ok 13 - recursive merge with submodule

expecting success of 6437.14 'setup file/submodule conflict': 
	git init file-submodule &&
	(
		cd file-submodule &&

		git commit --allow-empty -m O &&

		git branch A &&
		git branch B &&

		git checkout B &&
		echo content >path &&
		git add path &&
		git commit -m B &&

		git checkout A &&
		git init path &&
		test_commit -C path world &&
		git submodule add ./path &&
		git commit -m A
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/file-submodule/.git/
[main (root-commit) f09f54e] O
 Author: A U Thor <author@example.com>
Switched to branch 'B'
[B 208816f] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 path
Switched to branch 'A'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/file-submodule/path/.git/
[main (root-commit) 26692a7] world
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world.t
Adding existing repo at 'path' to the index
[A 85fc078] A
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 path
ok 14 - setup file/submodule conflict

expecting success of 6437.15 'file/submodule conflict': 
	test_when_finished "git -C file-submodule reset --hard" &&
	(
		cd file-submodule &&

		git checkout A^0 &&
		test_must_fail git merge B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&

		# path/ is still a submodule
		test_path_is_dir path/.git &&

		# There is a submodule at "path", so B:path cannot be written
		# there.  We expect it to be written somewhere in the same
		# directory, though, so just grep for its content in all
		# files, and ignore "grep: path: Is a directory" message
		echo Checking if contents from B:path showed up anywhere &&
		grep -q content * 2>/dev/null
	)

Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 85fc078 A
CONFLICT (distinct types): path had different types on each side; renamed one of them so each can be recorded somewhere.
Automatic merge failed; fix conflicts and then commit the result.
Checking if contents from B:path showed up anywhere
HEAD is now at 85fc078 A
ok 15 - file/submodule conflict

expecting success of 6437.16 'file/submodule conflict; merge --abort works afterward': 
	test_when_finished "git -C file-submodule reset --hard" &&
	(
		cd file-submodule &&

		git checkout A^0 &&
		test_must_fail git merge B^0 >out 2>err &&

		test_path_is_file .git/MERGE_HEAD &&
		git merge --abort
	)

HEAD is now at 85fc078 A
HEAD is now at 85fc078 A
ok 16 - file/submodule conflict; merge --abort works afterward

expecting success of 6437.17 'setup directory/submodule conflict': 
	git init directory-submodule &&
	(
		cd directory-submodule &&

		git commit --allow-empty -m O &&

		git branch A &&
		git branch B1 &&
		git branch B2 &&

		git checkout B1 &&
		mkdir path &&
		echo contents >path/file &&
		git add path/file &&
		git commit -m B1 &&

		git checkout B2 &&
		mkdir path &&
		echo contents >path/world &&
		git add path/world &&
		git commit -m B2 &&

		git checkout A &&
		git init path &&
		test_commit -C path hello world &&
		git submodule add ./path &&
		git commit -m A
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/directory-submodule/.git/
[main (root-commit) f09f54e] O
 Author: A U Thor <author@example.com>
Switched to branch 'B1'
[B1 8ab0f0c] B1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 path/file
Switched to branch 'B2'
[B2 db2a533] B2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 path/world
Switched to branch 'A'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/directory-submodule/path/.git/
[main (root-commit) 2605480] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
Adding existing repo at 'path' to the index
[A 90b0bac] A
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 path
ok 17 - setup directory/submodule conflict

checking known breakage of 6437.18 'directory/submodule conflict; keep submodule clean': 
	test_when_finished "git -C directory-submodule reset --hard" &&
	(
		cd directory-submodule &&

		git checkout A^0 &&
		test_must_fail git merge B1^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 1 out &&

		# path/ is still a submodule
		test_path_is_dir path/.git &&

		echo Checking if contents from B1:path/file showed up &&
		# Would rather use grep -r, but that is GNU extension...
		git ls-files -co | xargs grep -q contents 2>/dev/null &&

		# However, B1:path/file should NOT have shown up at path/file,
		# because we should not write into the submodule
		test_path_is_missing path/file
	)

Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 90b0bac A
warning: unable to rmdir 'path': Directory not empty
CONFLICT (file/directory): directory in the way of path from HEAD; moving it to path~HEAD instead.
Automatic merge failed; fix conflicts and then commit the result.
Checking if contents from B1:path/file showed up
Path exists:
-rw-r--r-- 1 buildd buildd 9 Dec 28 07:59 path/file
HEAD is now at 90b0bac A
not ok 18 - directory/submodule conflict; keep submodule clean # TODO known breakage

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
expecting success of 6437.19 'directory/submodule conflict; should not treat submodule files as untracked or in the way': 
	test_when_finished "git -C directory-submodule/path reset --hard" &&
	test_when_finished "git -C directory-submodule reset --hard" &&
	(
		cd directory-submodule &&

		git checkout A^0 &&
		test_must_fail git merge B2^0 >out 2>err &&

		# We do not want files within the submodule to prevent the
		# merge from starting; we should not be writing to such paths
		# anyway.
		test_i18ngrep ! "refusing to lose untracked file at" err
	)

HEAD is now at 90b0bac A
HEAD is now at 90b0bac A
HEAD is now at 2605480 hello
ok 19 - directory/submodule conflict; should not treat submodule files as untracked or in the way

checking known breakage of 6437.20 'directory/submodule conflict; merge --abort works afterward': 
	test_when_finished "git -C directory-submodule/path reset --hard" &&
	test_when_finished "git -C directory-submodule reset --hard" &&
	(
		cd directory-submodule &&

		git checkout A^0 &&
		test_must_fail git merge B2^0 &&
		test_path_is_file .git/MERGE_HEAD &&

		# merge --abort should succeed, should clear .git/MERGE_HEAD,
		# and should not leave behind any conflicted files
		git merge --abort &&
		test_path_is_missing .git/MERGE_HEAD &&
		git ls-files -u >conflicts &&
		test_must_be_empty conflicts
	)

HEAD is now at 90b0bac A
error: The following untracked working tree files would be overwritten by merge:
	path/world
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
File .git/MERGE_HEAD doesn't exist
HEAD is now at 90b0bac A
HEAD is now at 2605480 hello
not ok 20 - directory/submodule conflict; merge --abort works afterward # TODO known breakage

expecting success of 6437.21 'setup for null merge base': 
	mkdir no-merge-base &&
	(cd no-merge-base &&
	git init &&
	mkdir sub &&
	(cd sub &&
	 git init &&
	 echo "file-a" > file-a &&
	 git add file-a &&
	 git commit -m "commit a") &&
	git commit --allow-empty -m init &&
	git branch init &&
	git checkout -b a init &&
	git add sub &&
	git commit -m "a" &&
	git switch main &&
	(cd sub &&
	 echo "file-b" > file-b &&
	 git add file-b &&
	 git commit -m "commit b"))

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/no-merge-base/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6437-submodule-merge/no-merge-base/sub/.git/
[main (root-commit) d61d855] commit a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-a
[main (root-commit) edb5fba] init
 Author: A U Thor <author@example.com>
Switched to a new branch 'a'
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[a 8b6337e] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
warning: unable to rmdir 'sub': Directory not empty
Switched to branch 'main'
[main dc37965] commit b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-b
ok 21 - setup for null merge base

expecting success of 6437.22 'merging should fail with no merge base': 
	(cd no-merge-base &&
	git checkout -b b init &&
	git add sub &&
	git commit -m "b" &&
	test_must_fail git merge a >actual &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
    then
		sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short HEAD^1)" &&
		grep "$sub_expect" actual
	fi)

Switched to a new branch 'b'
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[b 5e75592] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub
 - go to submodule (sub), and either merge commit d61d855
ok 22 - merging should fail with no merge base

# still have 2 known breakage(s)
# passed all remaining 20 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6500-gc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/.git/
expecting success of 6500.1 'setup': 
	# do not let the amount of physical memory affects gc
	# behavior, make sure we always pack everything to one pack by
	# default
	git config gc.bigPackThreshold 2g &&

	# These are simply values which, when hashed as a blob with a newline,
	# produce a hash where the first byte is 0x17 in their respective
	# algorithms.
	test_oid_cache <<-EOF
	obj1 sha1:263
	obj1 sha256:34

	obj2 sha1:410
	obj2 sha256:174

	obj3 sha1:523
	obj3 sha256:313

	obj4 sha1:790
	obj4 sha256:481
	EOF

ok 1 - setup

expecting success of 6500.2 'gc empty repository': 
	git gc

Nothing new to pack.
ok 2 - gc empty repository

expecting success of 6500.3 'gc does not leave behind pid file': 
	git gc &&
	test_path_is_missing .git/gc.pid

Nothing new to pack.
ok 3 - gc does not leave behind pid file

expecting success of 6500.4 'gc --gobbledegook': 
	test_expect_code 129 git gc --nonsense 2>err &&
	test_i18ngrep "[Uu]sage: git gc" err

usage: git gc [<options>]
ok 4 - gc --gobbledegook

expecting success of 6500.5 'gc -h with invalid configuration': 
	mkdir broken &&
	(
		cd broken &&
		git init &&
		echo "[gc] pruneexpire = CORRUPT" >>.git/config &&
		test_expect_code 129 git gc -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/broken/.git/
usage: git gc [<options>]
ok 5 - gc -h with invalid configuration

expecting success of 6500.6 'gc is not aborted due to a stale symref': 
	git init remote &&
	(
		cd remote &&
		test_commit initial &&
		git clone . ../client &&
		git branch -m develop &&
		cd ../client &&
		git fetch --prune &&
		git gc
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/remote/.git/
[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Cloning into '../client'...
done.
From /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/remote/.
 - [deleted]         (none)     -> origin/master
   (refs/remotes/origin/HEAD has become dangling)
 * [new branch]      develop    -> origin/develop
ok 6 - gc is not aborted due to a stale symref

expecting success of 6500.7 'gc --keep-largest-pack': 
	test_create_repo keep-pack &&
	(
		cd keep-pack &&
		test_commit one &&
		test_commit two &&
		test_commit three &&
		git gc &&
		( cd .git/objects/pack && ls *.pack ) >pack-list &&
		test_line_count = 1 pack-list &&
		cp pack-list base-pack-list &&
		test_commit four &&
		git repack -d &&
		test_commit five &&
		git repack -d &&
		( cd .git/objects/pack && ls *.pack ) >pack-list &&
		test_line_count = 3 pack-list &&
		git gc --keep-largest-pack &&
		( cd .git/objects/pack && ls *.pack ) >pack-list &&
		test_line_count = 2 pack-list &&
		awk "/^P /{print \$2}" <.git/objects/info/packs >pack-info &&
		test_line_count = 2 pack-info &&
		test_path_is_file .git/objects/pack/$(cat base-pack-list) &&
		git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/keep-pack/.git/
[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master fd8d77e] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
[master a383792] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
ok 7 - gc --keep-largest-pack

expecting success of 6500.8 'pre-auto-gc hook can stop auto gc': 
	cat >err.expect <<-\EOF &&
	no gc for you
	EOF

	git init pre-auto-gc-hook &&
	test_hook -C pre-auto-gc-hook pre-auto-gc <<-\EOF &&
	echo >&2 no gc for you &&
	exit 1
	EOF
	(
		cd pre-auto-gc-hook &&

		git config gc.auto 3 &&
		git config gc.autoDetach false &&

		# We need to create two object whose sha1s start with 17
		# since this is what git gc counts.  As it happens, these
		# two blobs will do so.
		test_commit "$(test_oid obj1)" &&
		test_commit "$(test_oid obj2)" &&

		git gc --auto >../out.actual 2>../err.actual
	) &&
	test_must_be_empty out.actual &&
	test_cmp err.expect err.actual &&

	cat >err.expect <<-\EOF &&
	will gc for you
	Auto packing the repository for optimum performance.
	See "git help gc" for manual housekeeping.
	EOF

	test_hook -C pre-auto-gc-hook --clobber pre-auto-gc <<-\EOF &&
	echo >&2 will gc for you &&
	exit 0
	EOF

	git -C pre-auto-gc-hook gc --auto >out.actual 2>err.actual &&

	test_must_be_empty out.actual &&
	test_cmp err.expect err.actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/pre-auto-gc-hook/.git/
[master (root-commit) 1808a60] 263
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 263.t
no gc for you
[master 9a14344] 410
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 410.t
ok 8 - pre-auto-gc hook can stop auto gc

expecting success of 6500.9 'auto gc with too many loose objects does not attempt to create bitmaps': 
	test_config gc.auto 3 &&
	test_config gc.autodetach false &&
	test_config pack.writebitmaps true &&
	# We need to create two object whose sha1s start with 17
	# since this is what git gc counts.  As it happens, these
	# two blobs will do so.
	test_commit "$(test_oid obj1)" &&
	test_commit "$(test_oid obj2)" &&
	# Our first gc will create a pack; our second will create a second pack
	git gc --auto &&
	ls .git/objects/pack/pack-*.pack | sort >existing_packs &&
	test_commit "$(test_oid obj3)" &&
	test_commit "$(test_oid obj4)" &&

	git gc --auto 2>err &&
	test_i18ngrep ! "^warning:" err &&
	ls .git/objects/pack/pack-*.pack | sort >post_packs &&
	comm -1 -3 existing_packs post_packs >new &&
	comm -2 -3 existing_packs post_packs >del &&
	test_line_count = 0 del && # No packs are deleted
	test_line_count = 1 new # There is one new pack

[master (root-commit) 1808a60] 263
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 263.t
Auto packing the repository for optimum performance.
See "git help gc" for manual housekeeping.
[master 9a14344] 410
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 410.t
[master 54e21e7] 523
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 523.t
Auto packing the repository for optimum performance.
See "git help gc" for manual housekeeping.
[master 60dd8ad] 790
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 790.t
ok 9 - auto gc with too many loose objects does not attempt to create bitmaps

expecting success of 6500.10 'gc --no-quiet': 
	GIT_PROGRESS_DELAY=0 git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr &&
	test_must_be_empty stdout &&
	test_i18ngrep "Computing commit graph generation numbers" stderr

Computing commit graph generation numbers:  25% (1/4)
Computing commit graph generation numbers:  50% (2/4)
Computing commit graph generation numbers:  75% (3/4)
Computing commit graph generation numbers: 100% (4/4)
Computing commit graph generation numbers: 100% (4/4), done.
ok 10 - gc --no-quiet

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 6500.11 'with TTY: gc --no-quiet': 
	test_terminal env GIT_PROGRESS_DELAY=0 \
		git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr &&
	test_must_be_empty stdout &&
	test_i18ngrep "Enumerating objects" stderr &&
	test_i18ngrep "Computing commit graph generation numbers" stderr

Enumerating objects: 12, done.
Computing commit graph generation numbers:  25% (1/4)
Computing commit graph generation numbers:  50% (2/4)
Computing commit graph generation numbers:  75% (3/4)
Computing commit graph generation numbers: 100% (4/4)
Computing commit graph generation numbers: 100% (4/4), done.
ok 11 - with TTY: gc --no-quiet

expecting success of 6500.12 'gc --quiet': 
	git -c gc.writeCommitGraph=true gc --quiet >stdout 2>stderr &&
	test_must_be_empty stdout &&
	test_must_be_empty stderr

ok 12 - gc --quiet

expecting success of 6500.13 'gc.reflogExpire{Unreachable,}=never skips "expire" via "gc"': 
	test_config gc.reflogExpire never &&
	test_config gc.reflogExpireUnreachable never &&

	GIT_TRACE=$(pwd)/trace.out git gc &&

	# Check that git-pack-refs is run as a sanity check (done via
	# gc_before_repack()) but that git-expire is not.
	grep -E "^trace: (built-in|exec|run_command): git pack-refs --" trace.out &&
	! grep -E "^trace: (built-in|exec|run_command): git reflog expire --" trace.out

trace: run_command: git pack-refs --all --prune
trace: built-in: git pack-refs --all --prune
ok 13 - gc.reflogExpire{Unreachable,}=never skips "expire" via "gc"

expecting success of 6500.14 'one of gc.reflogExpire{Unreachable,}=never does not skip "expire" via "gc"': 
	>trace.out &&
	test_config gc.reflogExpire never &&
	GIT_TRACE=$(pwd)/trace.out git gc &&
	grep -E "^trace: (built-in|exec|run_command): git reflog expire --" trace.out

trace: run_command: git reflog expire --all
trace: built-in: git reflog expire --all
ok 14 - one of gc.reflogExpire{Unreachable,}=never does not skip "expire" via "gc"

expecting success of 6500.15 'gc --cruft generates a cruft pack': 
	test_when_finished "rm -fr crufts" &&
	git init crufts &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git gc --cruft &&
		assert_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 15 - gc --cruft generates a cruft pack

expecting success of 6500.16 'gc.cruftPacks=true generates a cruft pack': 
	test_when_finished "rm -fr crufts" &&
	git init crufts &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git -c gc.cruftPacks=true gc &&
		assert_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 16 - gc.cruftPacks=true generates a cruft pack

expecting success of 6500.17 'feature.experimental=true generates a cruft pack': 
	git init crufts &&
	test_when_finished "rm -fr crufts" &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git -c feature.experimental=true gc &&
		assert_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 17 - feature.experimental=true generates a cruft pack

expecting success of 6500.18 'feature.experimental=false allows explicit cruft packs': 
	git init crufts &&
	test_when_finished "rm -fr crufts" &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git -c gc.cruftPacks=true -c feature.experimental=false gc &&
		assert_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 18 - feature.experimental=false allows explicit cruft packs

expecting success of 6500.19 'feature.experimental=true can be overridden': 
	git init crufts &&
	test_when_finished "rm -fr crufts" &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git -c feature.expiremental=true -c gc.cruftPacks=false gc &&
		assert_no_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 19 - feature.experimental=true can be overridden

expecting success of 6500.20 'feature.experimental=false avoids cruft packs by default': 
	git init crufts &&
	test_when_finished "rm -fr crufts" &&
	(
		cd crufts &&

		prepare_cruft_history &&
		git -c feature.experimental=false gc &&
		assert_no_cruft_packs
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6500-gc/crufts/.git/
[master (root-commit) b37f540] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 5f01bd4] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master a32252d] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
ok 20 - feature.experimental=false avoids cruft packs by default

expecting success of 6500.21 'background auto gc does not run if gc.log is present and recent but does if it is old': 
	test_commit foo &&
	test_commit bar &&
	git repack &&
	test_config gc.autopacklimit 1 &&
	test_config gc.autodetach true &&
	echo fleem >.git/gc.log &&
	git gc --auto 2>err &&
	test_i18ngrep "^warning:" err &&
	test_config gc.logexpiry 5.days &&
	test-tool chmtime =-345600 .git/gc.log &&
	git gc --auto &&
	test_config gc.logexpiry 2.days &&
	run_and_wait_for_auto_gc &&
	ls .git/objects/pack/pack-*.pack >packs &&
	test_line_count = 1 packs

[master b16b551] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[master fc616a4] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
warning: The last gc run reported the following. Please correct the root cause
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
warning: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log
Automatic cleanup will not be performed until the file is removed.

fleem

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
ok 21 - background auto gc does not run if gc.log is present and recent but does if it is old

expecting success of 6500.22 'background auto gc respects lock for all operations': 
	# make sure we run a background auto-gc
	test_commit make-pack &&
	git repack &&
	test_config gc.autopacklimit 1 &&
	test_config gc.autodetach true &&

	# create a ref whose loose presence we can use to detect a pack-refs run
	git update-ref refs/heads/should-be-loose HEAD &&
	(ls -1 .git/refs/heads .git/reftable >expect || true) &&

	# now fake a concurrent gc that holds the lock; we can use our
	# shell pid so that it looks valid.
	hostname=$(hostname || echo unknown) &&
	shell_pid=$$ &&
	if test_have_prereq MINGW && test -f /proc/$shell_pid/winpid
	then
		# In Git for Windows, Bash (actually, the MSYS2 runtime) has a
		# different idea of PIDs than git.exe (actually Windows). Use
		# the Windows PID in this case.
		shell_pid=$(cat /proc/$shell_pid/winpid)
	fi &&
	printf "%d %s" "$shell_pid" "$hostname" >.git/gc.pid &&

	# our gc should exit zero without doing anything
	run_and_wait_for_auto_gc &&
	(ls -1 .git/refs/heads .git/reftable >actual || true) &&
	test_cmp expect actual

[master 28ecdda] make-pack
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 make-pack.t
ls: cannot access '.git/reftable': No such file or directory
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
ls: cannot access '.git/reftable': No such file or directory
ok 22 - background auto gc respects lock for all operations

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6501-freshen-objects.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6501-freshen-objects/.git/
expecting success of 6501.1 'make repo completely empty (loose)': 
		rm -rf .git &&
		git init
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6501-freshen-objects/.git/
ok 1 - make repo completely empty (loose)

expecting success of 6501.2 'disable reflogs (loose)': 
		git config core.logallrefupdates false &&
		git reflog expire --expire=all --all
	
ok 2 - disable reflogs (loose)

expecting success of 6501.3 'setup basic history (loose)': 
		commit base
	
[main (root-commit) 8539479] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base
ok 3 - setup basic history (loose)

expecting success of 6501.4 'create and abandon some objects (loose)': 
		git checkout -b experiment &&
		commit abandon &&
		maybe_repack &&
		git checkout main &&
		git branch -D experiment
	
Switched to a new branch 'experiment'
[experiment 20673e5] abandon
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abandon
Switched to branch 'main'
Deleted branch experiment (was 20673e5).
ok 4 - create and abandon some objects (loose)

expecting success of 6501.5 'simulate time passing (loose)': 
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
1672127960
1672127960
1672127960
1672127960
1672127960
1672127960
ok 5 - simulate time passing (loose)

expecting success of 6501.6 'start writing new commit with old blob (loose)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add unrelated &&
			add abandon &&
			git write-tree
		)
	
ok 6 - start writing new commit with old blob (loose)

expecting success of 6501.7 'simultaneous gc (loose)': 
		git gc --prune=12.hours.ago
	
ok 7 - simultaneous gc (loose)

expecting success of 6501.8 'finish writing out commit (loose)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 8 - finish writing out commit (loose)

expecting success of 6501.9 'repository passes fsck (loose)': 
		git fsck
	
ok 9 - repository passes fsck (loose)

expecting success of 6501.10 'abandon objects again (loose)': 
		git reset --hard HEAD^ &&
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
HEAD is now at 8539479 base
1672127961
1672127961
1672127961
1672127961
1672127961
1672127961
1672127961
1672127961
ok 10 - abandon objects again (loose)

expecting success of 6501.11 'start writing new commit with same tree (loose)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add abandon &&
			add unrelated &&
			git write-tree
		)
	
ok 11 - start writing new commit with same tree (loose)

expecting success of 6501.12 'simultaneous gc (loose)': 
		git gc --prune=12.hours.ago
	
ok 12 - simultaneous gc (loose)

expecting success of 6501.13 'finish writing out commit (loose)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 13 - finish writing out commit (loose)

expecting success of 6501.14 'make repo completely empty (repack)': 
		rm -rf .git &&
		git init
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6501-freshen-objects/.git/
ok 14 - make repo completely empty (repack)

expecting success of 6501.15 'disable reflogs (repack)': 
		git config core.logallrefupdates false &&
		git reflog expire --expire=all --all
	
ok 15 - disable reflogs (repack)

expecting success of 6501.16 'setup basic history (repack)': 
		commit base
	
[main (root-commit) aa8ecd7] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base
ok 16 - setup basic history (repack)

expecting success of 6501.17 'create and abandon some objects (repack)': 
		git checkout -b experiment &&
		commit abandon &&
		maybe_repack &&
		git checkout main &&
		git branch -D experiment
	
Switched to a new branch 'experiment'
[experiment ff26f38] abandon
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abandon
Switched to branch 'main'
Deleted branch experiment (was ff26f38).
ok 17 - create and abandon some objects (repack)

expecting success of 6501.18 'simulate time passing (repack)': 
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
1672127962
1672127962
1672127962
ok 18 - simulate time passing (repack)

expecting success of 6501.19 'start writing new commit with old blob (repack)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add unrelated &&
			add abandon &&
			git write-tree
		)
	
ok 19 - start writing new commit with old blob (repack)

expecting success of 6501.20 'simultaneous gc (repack)': 
		git gc --prune=12.hours.ago
	
ok 20 - simultaneous gc (repack)

expecting success of 6501.21 'finish writing out commit (repack)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 21 - finish writing out commit (repack)

expecting success of 6501.22 'repository passes fsck (repack)': 
		git fsck
	
dangling commit ff26f380b0104eb69bd2bf57d64d6e29a12ae5fd
ok 22 - repository passes fsck (repack)

expecting success of 6501.23 'abandon objects again (repack)': 
		git reset --hard HEAD^ &&
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
HEAD is now at aa8ecd7 base
1672127962
1672127962
1672127963
1672127963
1672127962
1672127962
1672127962
1672127962
1672127962
1672127963
ok 23 - abandon objects again (repack)

expecting success of 6501.24 'start writing new commit with same tree (repack)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add abandon &&
			add unrelated &&
			git write-tree
		)
	
ok 24 - start writing new commit with same tree (repack)

expecting success of 6501.25 'simultaneous gc (repack)': 
		git gc --prune=12.hours.ago
	
ok 25 - simultaneous gc (repack)

expecting success of 6501.26 'finish writing out commit (repack)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 26 - finish writing out commit (repack)

expecting success of 6501.27 'make repo completely empty (bitmap)': 
		rm -rf .git &&
		git init
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6501-freshen-objects/.git/
ok 27 - make repo completely empty (bitmap)

expecting success of 6501.28 'disable reflogs (bitmap)': 
		git config core.logallrefupdates false &&
		git reflog expire --expire=all --all
	
ok 28 - disable reflogs (bitmap)

expecting success of 6501.29 'setup basic history (bitmap)': 
		commit base
	
[main (root-commit) 41163df] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base
ok 29 - setup basic history (bitmap)

expecting success of 6501.30 'create and abandon some objects (bitmap)': 
		git checkout -b experiment &&
		commit abandon &&
		maybe_repack &&
		git checkout main &&
		git branch -D experiment
	
Switched to a new branch 'experiment'
[experiment 155cd68] abandon
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abandon
Switched to branch 'main'
Deleted branch experiment (was 155cd68).
ok 30 - create and abandon some objects (bitmap)

expecting success of 6501.31 'simulate time passing (bitmap)': 
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
1672127964
1672127964
1672127964
1672127964
ok 31 - simulate time passing (bitmap)

expecting success of 6501.32 'start writing new commit with old blob (bitmap)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add unrelated &&
			add abandon &&
			git write-tree
		)
	
ok 32 - start writing new commit with old blob (bitmap)

expecting success of 6501.33 'simultaneous gc (bitmap)': 
		git gc --prune=12.hours.ago
	
ok 33 - simultaneous gc (bitmap)

expecting success of 6501.34 'finish writing out commit (bitmap)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 34 - finish writing out commit (bitmap)

expecting success of 6501.35 'repository passes fsck (bitmap)': 
		git fsck
	
dangling commit 155cd68c3a09dd48d8ccf822869623886fc88557
ok 35 - repository passes fsck (bitmap)

expecting success of 6501.36 'abandon objects again (bitmap)': 
		git reset --hard HEAD^ &&
		test-tool chmtime --get -86400 $(find .git/objects -type f)
	
HEAD is now at 41163df base
1672127964
1672127964
1672127964
1672127964
1672127964
1672127964
1672127964
1672127964
1672127964
1672127964
ok 36 - abandon objects again (bitmap)

expecting success of 6501.37 'start writing new commit with same tree (bitmap)': 
		tree=$(
			GIT_INDEX_FILE=index.tmp &&
			export GIT_INDEX_FILE &&
			git read-tree HEAD &&
			add abandon &&
			add unrelated &&
			git write-tree
		)
	
ok 37 - start writing new commit with same tree (bitmap)

expecting success of 6501.38 'simultaneous gc (bitmap)': 
		git gc --prune=12.hours.ago
	
ok 38 - simultaneous gc (bitmap)

expecting success of 6501.39 'finish writing out commit (bitmap)': 
		commit=$(echo foo | git commit-tree -p HEAD $tree) &&
		git update-ref HEAD $commit
	
ok 39 - finish writing out commit (bitmap)

expecting success of 6501.40 'do not complain about existing broken links (commit)': 
	cat >broken-commit <<-EOF &&
	tree $(test_oid 001)
	parent $(test_oid 002)
	author whatever <whatever@example.com> 1234 -0000
	committer whatever <whatever@example.com> 1234 -0000

	some message
	EOF
	commit=$(git hash-object -t commit -w broken-commit) &&
	git gc -q 2>stderr &&
	verbose git cat-file -e $commit &&
	test_must_be_empty stderr

ok 40 - do not complain about existing broken links (commit)

expecting success of 6501.41 'do not complain about existing broken links (tree)': 
	cat >broken-tree <<-EOF &&
	100644 blob $(test_oid 003)	foo
	EOF
	tree=$(git mktree --missing <broken-tree) &&
	git gc -q 2>stderr &&
	git cat-file -e $tree &&
	test_must_be_empty stderr

ok 41 - do not complain about existing broken links (tree)

expecting success of 6501.42 'do not complain about existing broken links (tag)': 
	cat >broken-tag <<-EOF &&
	object $(test_oid 004)
	type commit
	tag broken
	tagger whatever <whatever@example.com> 1234 -0000

	this is a broken tag
	EOF
	tag=$(git hash-object -t tag -w broken-tag) &&
	git gc -q 2>stderr &&
	git cat-file -e $tag &&
	test_must_be_empty stderr

ok 42 - do not complain about existing broken links (tag)

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6423-merge-rename-directories.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/.git/
expecting success of 6423.1 '1a: Simple directory rename detection': 
	test_setup_1a &&
	(
		cd 1a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:y/e/f &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:z/d    B:z/e/f &&
		test_cmp expect actual &&

		git hash-object y/d >actual &&
		git rev-parse B:z/d >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:z/d &&
		test_must_fail git rev-parse HEAD:z/e/f &&
		test_path_is_missing z/d &&
		test_path_is_missing z/e/f
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1a/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B aa97264] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/d
 create mode 100644 z/e/f
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
fatal: path 'z/d' does not exist in 'HEAD'
HEAD:z/d
fatal: path 'z/e/f' does not exist in 'HEAD'
HEAD:z/e/f
ok 1 - 1a: Simple directory rename detection

expecting success of 6423.2 '1b: Merge a directory with another': 
	test_setup_1b &&
	(
		cd 1b &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:y/e &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:y/d    A:z/e &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:z/e
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1b/.git/
[master (root-commit) 828128d] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 y/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 62cf902] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/e
Switched to branch 'B'
[B 2a8bd7d] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 62cf902 A
Path updated: z/e added in HEAD inside a directory that was renamed in B^0; moving it to y/e.
Merge made by the 'ort' strategy.
 {z => y}/b | 0
 {z => y}/c | 0
 {z => y}/e | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {z => y}/e (100%)
fatal: path 'z/e' does not exist in 'HEAD'
HEAD:z/e
ok 2 - 1b: Merge a directory with another

expecting success of 6423.3 '1c: Transitive renaming': 
	test_setup_1c &&
	(
		cd 1c &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:x/d &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:x/d &&
		test_must_fail git rev-parse HEAD:z/d &&
		test_path_is_missing z/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1c/.git/
[master (root-commit) 1e3967e] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 623f815] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B c9f07f0] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 623f815 A
fatal: path 'x/d' does not exist in 'HEAD'
HEAD:x/d
fatal: path 'z/d' does not exist in 'HEAD'
HEAD:z/d
ok 3 - 1c: Transitive renaming

expecting success of 6423.4 '1d: Directory renames cause a rename/rename(2to1) conflict': 
	test_setup_1d &&
	(
		cd 1d &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (\(.*\)/\1)" out &&

		git ls-files -s >out &&
		test_line_count = 8 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:x/b :0:x/c :0:x/d :0:x/e :0:x/m :0:x/n &&
		git rev-parse >expect \
			 O:z/b  O:z/c  O:y/d  O:y/e  A:y/m  B:z/n &&
		test_cmp expect actual &&

		test_must_fail git rev-parse :0:x/wham &&
		git rev-parse >actual \
			:2:x/wham :3:x/wham &&
		git rev-parse >expect \
			 A:y/wham  B:z/wham &&
		test_cmp expect actual &&

		# Test that the two-way merge in x/wham is as expected
		git cat-file -p :2:x/wham >expect &&
		git cat-file -p :3:x/wham >other &&
		>empty &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_must_fail git merge-file \
				-L "HEAD:y/wham" \
				-L "" \
				-L "B^0:z/wham" \
				expect empty other
		else
			test_must_fail git merge-file \
				-L "HEAD" \
				-L "" \
				-L "B^0" \
				expect empty other
		fi &&
		test_cmp expect x/wham
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1d/.git/
[master (root-commit) a5c945e] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 y/d
 create mode 100644 y/e
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A e0494ce] A
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 rename {z => x}/b (100%)
 rename {z => x}/c (100%)
 create mode 100644 y/m
 create mode 100644 y/wham
Switched to branch 'B'
[B 7f8e93c] B
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 rename {y => x}/d (100%)
 rename {y => x}/e (100%)
 create mode 100644 z/n
 create mode 100644 z/wham
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e0494ce A
CONFLICT (add/add): Merge conflict in x/wham
fatal: path 'x/wham' is in the index, but not at stage 0
hint: Did you mean ':2:x/wham'?
:0:x/wham
ok 4 - 1d: Directory renames cause a rename/rename(2to1) conflict

expecting success of 6423.5 '1e: Renamed directory, with all files being renamed too': 
	test_setup_1e &&
	(
		cd 1e &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			HEAD:y/newb HEAD:y/newc HEAD:y/d &&
		git rev-parse >expect \
			O:z/oldb    O:z/oldc    B:z/d &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:z/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1e/.git/
[master (root-commit) a0c453d] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/oldb
 create mode 100644 z/oldc
Switched to branch 'A'
[A e7f73d0] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename z/oldb => y/newb (100%)
 rename z/oldc => y/newc (100%)
Switched to branch 'B'
[B b36bf99] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e7f73d0 A
Path updated: z/d added in B^0 inside a directory that was renamed in HEAD; moving it to y/d.
Merge made by the 'ort' strategy.
 y/d | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 y/d
fatal: path 'z/d' does not exist in 'HEAD'
HEAD:z/d
ok 5 - 1e: Renamed directory, with all files being renamed too

expecting success of 6423.6 '1f: Split a directory into two other directories': 
	test_setup_1f &&
	(
		cd 1f &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:x/d HEAD:x/e HEAD:x/f HEAD:x/g &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:z/d    O:z/e    O:z/f    A:z/g &&
		test_cmp expect actual &&
		test_path_is_missing z/g &&
		test_must_fail git rev-parse HEAD:z/g
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/1f/.git/
[master (root-commit) bc89ae6] O
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
 create mode 100644 z/e
 create mode 100644 z/f
Switched to branch 'A'
[A d83c371] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/g
Switched to branch 'B'
[B 2106ef0] B
 Author: A U Thor <author@example.com>
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => x}/e (100%)
 rename {z => x}/f (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d83c371 A
Path updated: z/g added in HEAD inside a directory that was renamed in B^0; moving it to x/g.
Merge made by the 'ort' strategy.
 {z => x}/d | 0
 {z => x}/e | 0
 {z => x}/f | 0
 {z => x}/g | 0
 {z => y}/b | 0
 {z => y}/c | 0
 6 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => x}/e (100%)
 rename {z => x}/f (100%)
 rename {z => x}/g (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
fatal: path 'z/g' does not exist in 'HEAD'
HEAD:z/g
ok 6 - 1f: Split a directory into two other directories

expecting success of 6423.7 '2a: Directory split into two on one side, with equal numbers of paths': 
	test_setup_2a &&
	(
		cd 2a &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT.*directory rename split" out &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:w/c :0:z/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/2a/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 6af9a4d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => w}/c (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B db43152] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6af9a4d A
CONFLICT (directory rename split): Unclear where to rename z to; it was renamed to multiple other directories, with no destination getting a majority of the files.
ok 7 - 2a: Directory split into two on one side, with equal numbers of paths

expecting success of 6423.8 '2b: Directory split into two on one side, with equal numbers of paths': 
	test_setup_2b &&
	(
		cd 2b &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:w/c :0:x/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:x/d &&
		test_cmp expect actual &&
		test_i18ngrep ! "CONFLICT.*directory rename split" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/2b/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 6af9a4d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => w}/c (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B c2fe7fb] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 x/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6af9a4d A
ok 8 - 2b: Directory split into two on one side, with equal numbers of paths

expecting success of 6423.9 '3a: Avoid implicit rename if involved as source on other side': 
	test_setup_3a &&
	(
		cd 3a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:x/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/3a/.git/
[master (root-commit) 6c15033] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
[A 73b131e] A
 Author: A U Thor <author@example.com>
Switched to branch 'B'
[B d135340] B
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 73b131e A
Merge made by the 'ort' strategy.
 {z => x}/d | 0
 {z => y}/b | 0
 {z => y}/c | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
ok 9 - 3a: Avoid implicit rename if involved as source on other side

expecting success of 6423.10 '3b: Avoid implicit rename if involved as source on current side': 
	test_setup_3b &&
	(
		cd 3b &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep CONFLICT.*rename/rename.*z/d.*x/d.*w/d out &&
		test_i18ngrep ! CONFLICT.*rename/rename.*y/d out &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :1:z/d :2:x/d :3:w/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  O:z/d  O:z/d  O:z/d &&
		test_cmp expect actual &&

		test_path_is_missing z/d &&
		git hash-object >actual \
			x/d   w/d &&
		git rev-parse >expect \
			O:z/d O:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/3b/.git/
[master (root-commit) 6c15033] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
[A 5eead67] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B 464e387] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {z => w}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5eead67 A
CONFLICT (rename/rename): z/d renamed to x/d in HEAD and to w/d in B^0.
ok 10 - 3b: Avoid implicit rename if involved as source on current side

expecting success of 6423.11 '4a: Directory split, with original directory still present': 
	test_setup_4a &&
	(
		cd 4a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:z/e HEAD:z/f &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:z/d    O:z/e    B:z/f &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/4a/.git/
[master (root-commit) 9e2ca6f] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
 create mode 100644 z/e
Switched to branch 'A'
[A 9c11b44] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {z => y}/d (100%)
Switched to branch 'B'
[B aa71186] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/f
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9c11b44 A
Merge made by the 'ort' strategy.
 z/f | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 z/f
ok 11 - 4a: Directory split, with original directory still present

expecting success of 6423.12 '5a: Merge directories, other side adds files to original and target': 
	test_setup_5a &&
	(
		cd 5a &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT.*implicit dir rename" out &&

		git ls-files -s >out &&
		test_line_count = 6 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :0:y/d :0:y/e :0:z/e :0:y/f &&
		git rev-parse >expect \
			 O:z/b  O:z/c  O:y/d  A:y/e  A:z/e  A:z/f &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/5a/.git/
[master (root-commit) 828128d] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 y/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A b42bf3c] A
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 y/e
 create mode 100644 z/e
 create mode 100644 z/f
Switched to branch 'B'
[B 2a8bd7d] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b42bf3c A
CONFLICT (implicit dir rename): Existing file/dir at y/e in the way of implicit directory rename(s) putting the following path(s) there: z/e.
ok 12 - 5a: Merge directories, other side adds files to original and target

expecting success of 6423.13 '5b: Rename/delete in order to get add/add/add conflict': 
	test_setup_5b &&
	(
		cd 5b &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (add/add).* y/d" out &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :0:y/e :2:y/d :3:y/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:z/e  A:y/d  B:y/d &&
		test_cmp expect actual &&

		test_must_fail git rev-parse :1:y/d &&
		test_path_is_file y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/5b/.git/
[master (root-commit) 66a9911] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
rm 'z/d'
[A f5563b5] A
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+), 1 deletion(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d
 delete mode 100644 z/d
Switched to branch 'B'
[B 5ac66d1] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 y/d
 create mode 100644 z/e
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f5563b5 A
CONFLICT (add/add): Merge conflict in y/d
fatal: path 'y/d' is in the index, but not at stage 1
hint: Did you mean ':2:y/d'?
:1:y/d
ok 13 - 5b: Rename/delete in order to get add/add/add conflict

expecting success of 6423.14 '5c: Transitive rename would cause rename/rename/rename/add/add/add': 
	test_setup_5c &&
	(
		cd 5c &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/rename).*x/d.*w/d.*z/d" out &&
		test_i18ngrep "CONFLICT (add/add).* y/d" out &&

		git ls-files -s >out &&
		test_line_count = 9 out &&
		git ls-files -u >out &&
		test_line_count = 6 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :0:y/e &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:z/e &&
		test_cmp expect actual &&

		test_must_fail git rev-parse :1:y/d &&
		git rev-parse >actual \
			:2:w/d :3:w/d :1:x/d :2:y/d :3:y/d :3:z/d &&
		git rev-parse >expect \
			 O:x/d  B:w/d  O:x/d  A:y/d  B:y/d  O:x/d &&
		test_cmp expect actual &&

		git hash-object >actual \
			z/d &&
		git rev-parse >expect \
			O:x/d &&
		test_cmp expect actual &&
		test_path_is_missing x/d &&
		test_path_is_file y/d &&
		grep -q "<<<<" y/d  # conflict markers should be present
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/5c/.git/
[master (root-commit) cb15013] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A b27f493] A
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 rename {x => w}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d
Switched to branch 'B'
[B 535e6b3] B
 Author: A U Thor <author@example.com>
 4 files changed, 3 insertions(+)
 create mode 100644 w/d
 create mode 100644 y/d
 rename {x => z}/d (100%)
 create mode 100644 z/e
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b27f493 A
CONFLICT (rename/rename): x/d renamed to w/d in HEAD and to z/d in B^0.
CONFLICT (add/add): Merge conflict in y/d
fatal: path 'y/d' is in the index, but not at stage 1
hint: Did you mean ':2:y/d'?
:1:y/d
ok 14 - 5c: Transitive rename would cause rename/rename/rename/add/add/add

expecting success of 6423.15 '5d: Directory/file/file conflict due to directory rename': 
	test_setup_5d &&
	(
		cd 5d &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (file/directory).*y/d" out &&

		git ls-files -s >out &&
		test_line_count = 6 out &&
		git ls-files -u >out &&
		test_line_count = 1 out &&
		git ls-files -o >out &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_line_count = 1 out &&

			git rev-parse >actual \
			    :0:y/b :0:y/c :0:z/d :0:y/f :2:y/d~HEAD :0:y/d/e
		else
			test_line_count = 2 out &&

			git rev-parse >actual \
			    :0:y/b :0:y/c :0:z/d :0:y/f :2:y/d      :0:y/d/e
		fi &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:z/d  B:z/f  A:y/d  B:y/d/e &&
		test_cmp expect actual &&

		git hash-object y/d~HEAD >actual &&
		git rev-parse A:y/d >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/5d/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A ecc7afe] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d
Switched to branch 'B'
[B 67e12ad] B
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 y/d/e
 create mode 100644 z/d
 create mode 100644 z/f
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ecc7afe A
CONFLICT (file/directory): directory in the way of y/d from HEAD; moving it to y/d~HEAD instead.
ok 15 - 5d: Directory/file/file conflict due to directory rename

expecting success of 6423.16 '6a: Tricky rename/delete': 
	test_setup_6a &&
	(
		cd 6a &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/delete).*z/c.*y/c" out &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >actual \
				:0:y/b :1:y/c :3:y/c &&
			git rev-parse >expect \
				 O:z/b  O:z/c  O:z/c
		else
			git ls-files -s >out &&
			test_line_count = 2 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >actual \
				:0:y/b :3:y/c &&
			git rev-parse >expect \
				 O:z/b  O:z/c
		fi &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6a/.git/
[master (root-commit) 6c15033] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
rm 'z/c'
rm 'z/d'
[A 1476532] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 deletions(-)
 delete mode 100644 z/c
 delete mode 100644 z/d
Switched to branch 'B'
[B 53c1aba] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1476532 A
CONFLICT (rename/delete): z/c renamed to y/c in B^0, but deleted in HEAD.
ok 16 - 6a: Tricky rename/delete

expecting success of 6423.17 '6b1: Same renames done on both sides, plus another rename': 
	test_setup_6b1 &&
	(
		cd 6b1 &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:x/e HEAD:y/f &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:z/d    O:z/e    B:z/f &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6b1/.git/
[master (root-commit) 9e2ca6f] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
 create mode 100644 z/e
Switched to branch 'A'
[A e7863b2] A
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/e (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {z => y}/d (100%)
Switched to branch 'B'
[B de7c755] B
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {z => y}/d (100%)
 create mode 100644 z/f
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e7863b2 A
Path updated: z/f added in B^0 inside a directory that was renamed in HEAD; moving it to y/f.
Merge made by the 'ort' strategy.
 y/f | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 y/f
ok 17 - 6b1: Same renames done on both sides, plus another rename

expecting success of 6423.18 '6b2: Same rename done on both sides': 
	test_setup_6b2 &&
	(
		cd 6b2 &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6b2/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B 6ea17b2] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
Path updated: z/d added in B^0 inside a directory that was renamed in HEAD; moving it to y/d.
Merge made by the 'ort' strategy.
 y/d | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 y/d
ok 18 - 6b2: Same rename done on both sides

expecting success of 6423.19 '6c: Rename only done on same side': 
	test_setup_6c &&
	(
		cd 6c &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:z/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6c/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 405f2b4] A
 Author: A U Thor <author@example.com>
Switched to branch 'B'
[B 6ea17b2] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 405f2b4 A
Merge made by the 'ort' strategy.
 {z => y}/b | 0
 {z => y}/c | 0
 z/d        | 1 +
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 z/d
ok 19 - 6c: Rename only done on same side

expecting success of 6423.20 '6d: We do not always want transitive renaming': 
	test_setup_6d &&
	(
		cd 6d &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:z/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:x/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6d/.git/
[master (root-commit) 1e3967e] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 1491553] A
 Author: A U Thor <author@example.com>
Switched to branch 'B'
[B add22d4] B
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1491553 A
Merge made by the 'ort' strategy.
 {z => y}/b | 0
 {z => y}/c | 0
 {x => z}/d | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {x => z}/d (100%)
ok 20 - 6d: We do not always want transitive renaming

expecting success of 6423.21 '6e: Add/add from one side': 
	test_setup_6e &&
	(
		cd 6e &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:z/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:y/d    B:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/6e/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 405f2b4] A
 Author: A U Thor <author@example.com>
Switched to branch 'B'
[B c2a120e] B
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 405f2b4 A
Merge made by the 'ort' strategy.
 {z => y}/b | 0
 {z => y}/c | 0
 y/d        | 1 +
 z/d        | 1 +
 4 files changed, 2 insertions(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d
 create mode 100644 z/d
ok 21 - 6e: Add/add from one side

expecting success of 6423.22 '7a: rename-dir vs. rename-dir (NOT split evenly) PLUS add-other-file': 
	test_setup_7a &&
	(
		cd 7a &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/rename).*z/b.*y/b.*w/b" out &&
		test_i18ngrep "CONFLICT (rename/rename).*z/c.*y/c.*x/c" out &&

		git ls-files -s >out &&
		test_line_count = 7 out &&
		git ls-files -u >out &&
		test_line_count = 6 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:1:z/b :2:y/b :3:w/b :1:z/c :2:y/c :3:x/c :0:y/d &&
		git rev-parse >expect \
			 O:z/b  O:z/b  O:z/b  O:z/c  O:z/c  O:z/c  B:z/d &&
		test_cmp expect actual &&

		git hash-object >actual \
			y/b   w/b   y/c   x/c &&
		git rev-parse >expect \
			O:z/b O:z/b O:z/c O:z/c &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/7a/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B e02cee0] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => w}/b (100%)
 rename {z => x}/c (100%)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
CONFLICT (rename/rename): z/b renamed to y/b in HEAD and to w/b in B^0.
CONFLICT (rename/rename): z/c renamed to y/c in HEAD and to x/c in B^0.
ok 22 - 7a: rename-dir vs. rename-dir (NOT split evenly) PLUS add-other-file

expecting success of 6423.23 '7b: rename/rename(2to1), but only due to transitive rename': 
	test_setup_7b &&
	(
		cd 7b &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (\(.*\)/\1)" out &&

		git ls-files -s >out &&
		test_line_count = 4 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :2:y/d :3:y/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  O:w/d  O:x/d &&
		test_cmp expect actual &&

		# Test that the two-way merge in y/d is as expected
		git cat-file -p :2:y/d >expect &&
		git cat-file -p :3:y/d >other &&
		>empty &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_must_fail git merge-file \
				-L "HEAD:y/d" \
				-L "" \
				-L "B^0:z/d" \
				expect empty other
		else
			test_must_fail git merge-file \
				-L "HEAD" \
				-L "" \
				-L "B^0" \
				expect empty other
		fi &&
		test_cmp expect y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/7b/.git/
[master (root-commit) 3a7ba74] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 w/d
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 0808992] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {w => y}/d (100%)
Switched to branch 'B'
[B 946a998] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0808992 A
CONFLICT (add/add): Merge conflict in y/d
ok 23 - 7b: rename/rename(2to1), but only due to transitive rename

expecting success of 6423.24 '7c: rename/rename(1to...2or3); transitive rename may add complexity': 
	test_setup_7c &&
	(
		cd 7c &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/rename).*x/d.*w/d.*y/d" out &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 3 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :1:x/d :2:w/d :3:y/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  O:x/d  O:x/d  O:x/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/7c/.git/
[master (root-commit) 1e3967e] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 1e0f8cf] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => w}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B c9f07f0] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1e0f8cf A
CONFLICT (rename/rename): x/d renamed to w/d in HEAD and to y/d in B^0.
ok 24 - 7c: rename/rename(1to...2or3); transitive rename may add complexity

expecting success of 6423.25 '7d: transitive rename involved in rename/delete; how is it reported?': 
	test_setup_7d &&
	(
		cd 7d &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/delete).*x/d.*y/d" out &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >actual \
				:0:y/b :0:y/c :1:y/d :3:y/d &&
			git rev-parse >expect \
				 O:z/b  O:z/c  O:x/d  O:x/d
		else
			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >actual \
				:0:y/b :0:y/c :3:y/d &&
			git rev-parse >expect \
				 O:z/b  O:z/c  O:x/d
		fi &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/7d/.git/
[master (root-commit) 1e3967e] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
rm 'x/d'
[A 202563c] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 deletion(-)
 delete mode 100644 x/d
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B c9f07f0] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 202563c A
CONFLICT (rename/delete): x/d renamed to y/d in B^0, but deleted in HEAD.
ok 25 - 7d: transitive rename involved in rename/delete; how is it reported?

expecting success of 6423.26 '7e: transitive rename in rename/delete AND dirs in the way': 
	test_setup_7e &&
	(
		cd 7e &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (rename/delete).*x/d.*y/d" out &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			git ls-files -s >out &&
			test_line_count = 6 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 1 out &&

			git rev-parse >actual \
				:0:x/d/f :0:y/d/g :0:y/b :0:y/c :1:y/d~B^0 :3:y/d~B^0 &&
			git rev-parse >expect \
				 A:x/d/f  A:y/d/g  O:z/b  O:z/c  O:x/d      O:x/d
		else
			git ls-files -s >out &&
			test_line_count = 5 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 2 out &&

			git rev-parse >actual \
				:0:x/d/f :0:y/d/g :0:y/b :0:y/c :3:y/d &&
			git rev-parse >expect \
				 A:x/d/f  A:y/d/g  O:z/b  O:z/c  O:x/d
		fi &&
		test_cmp expect actual &&

		git hash-object y/d~B^0 >actual &&
		git rev-parse O:x/d >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/7e/.git/
[master (root-commit) cb15013] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
rm 'x/d'
[A 3ba9059] A
 Author: A U Thor <author@example.com>
 5 files changed, 2 insertions(+), 1 deletion(-)
 delete mode 100644 x/d
 create mode 100644 x/d/f
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 create mode 100644 y/d/g
Switched to branch 'B'
[B 0710b4b] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 3ba9059 A
CONFLICT (rename/delete): x/d renamed to y/d in B^0, but deleted in HEAD.
ok 26 - 7e: transitive rename in rename/delete AND dirs in the way

expecting success of 6423.27 '8a: Dual-directory rename, one into the others way': 
	test_setup_8a &&
	(
		cd 8a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 6 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/a HEAD:y/b HEAD:y/e HEAD:y/f HEAD:z/c HEAD:z/d &&
		git rev-parse >expect \
			O:x/a    O:x/b    A:x/e    A:y/f    O:y/c    O:y/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/8a/.git/
[master (root-commit) 644420a] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 x/a
 create mode 100644 x/b
 create mode 100644 y/c
 create mode 100644 y/d
Switched to branch 'A'
[A 6afefa0] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 x/e
 create mode 100644 y/f
Switched to branch 'B'
[B ccdb287] B
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => y}/a (100%)
 rename {x => y}/b (100%)
 rename {y => z}/c (100%)
 rename {y => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6afefa0 A
Path updated: x/e added in HEAD inside a directory that was renamed in B^0; moving it to y/e.
Merge made by the 'ort' strategy.
 {x => y}/a | 0
 {x => y}/b | 0
 {x => y}/e | 0
 {y => z}/c | 0
 {y => z}/d | 0
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => y}/a (100%)
 rename {x => y}/b (100%)
 rename {x => y}/e (100%)
 rename {y => z}/c (100%)
 rename {y => z}/d (100%)
ok 27 - 8a: Dual-directory rename, one into the others way

expecting success of 6423.28 '8b: Dual-directory rename, one into the others way, with conflicting filenames': 
	test_setup_8b &&
	(
		cd 8b &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 6 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/a HEAD:y/b HEAD:z/a HEAD:z/b HEAD:x/e HEAD:y/e &&
		git rev-parse >expect \
			O:x/a    O:x/b    O:y/a    O:y/b    A:x/e    A:y/e &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/8b/.git/
[master (root-commit) d95116f] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 x/a
 create mode 100644 x/b
 create mode 100644 y/a
 create mode 100644 y/b
Switched to branch 'A'
[A 8d5e46a] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 x/e
 create mode 100644 y/e
Switched to branch 'B'
[B a7bdbf9] B
 Author: A U Thor <author@example.com>
 6 files changed, 4 insertions(+), 4 deletions(-)
 delete mode 100644 x/a
 delete mode 100644 x/b
 create mode 100644 z/a
 create mode 100644 z/b
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8d5e46a A
Merge made by the 'ort' strategy.
 x/a | 1 -
 x/b | 1 -
 y/a | 2 +-
 y/b | 2 +-
 z/a | 1 +
 z/b | 1 +
 6 files changed, 4 insertions(+), 4 deletions(-)
 delete mode 100644 x/a
 delete mode 100644 x/b
 create mode 100644 z/a
 create mode 100644 z/b
ok 28 - 8b: Dual-directory rename, one into the others way, with conflicting filenames

expecting success of 6423.29 '8c: modify/delete or rename+modify/delete': 
	test_setup_8c &&
	(
		cd 8c &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "CONFLICT (modify/delete).* z/d" out &&

		git ls-files -s >out &&
		test_line_count = 5 out &&
		git ls-files -u >out &&
		test_line_count = 2 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			:0:y/b :0:y/c :0:y/e :1:z/d :3:z/d &&
		git rev-parse >expect \
			 O:z/b  O:z/c  B:z/e  O:z/d  B:z/d &&
		test_cmp expect actual &&

		test_must_fail git rev-parse :2:z/d &&
		git ls-files -s z/d | grep ^100755 &&
		test_path_is_file z/d &&
		test_path_is_missing y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/8c/.git/
[master (root-commit) a8ba9b3] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
rm 'z/d'
[A d5ba1c0] A
 Author: A U Thor <author@example.com>
 3 files changed, 10 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 delete mode 100644 z/d
Switched to branch 'B'
[B 1757e3f] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 10 deletions(-)
 mode change 100644 => 100755 z/d
 create mode 100644 z/e
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d5ba1c0 A
CONFLICT (modify/delete): z/d deleted in HEAD and modified in B^0.  Version B^0 of z/d left in tree.
fatal: path 'z/d' is in the index, but not at stage 2
hint: Did you mean ':1:z/d'?
:2:z/d
100755 b4de3947675361a7770d29b8982c407b0ec6b2a0 3	z/d
ok 29 - 8c: modify/delete or rename+modify/delete

expecting success of 6423.30 '8d: rename/delete...or not?': 
	test_setup_8d &&
	(
		cd 8d &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/e &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:z/e &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/8d/.git/
[master (root-commit) a8ba9b3] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
rm 'z/d'
[A d5ba1c0] A
 Author: A U Thor <author@example.com>
 3 files changed, 10 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 delete mode 100644 z/d
Switched to branch 'B'
[B 12eaccc] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/e
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d5ba1c0 A
Path updated: z/e added in B^0 inside a directory that was renamed in HEAD; moving it to y/e.
Merge made by the 'ort' strategy.
 y/e | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 y/e
ok 30 - 8d: rename/delete...or not?

expecting success of 6423.31 '8e: Both sides rename, one side adds to original directory': 
	test_setup_8e &&
	(
		cd 8e &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		test_i18ngrep CONFLICT.*rename/rename.*z/c.*y/c.*w/c out &&
		test_i18ngrep CONFLICT.*rename/rename.*z/b.*y/b.*w/b out &&

		git ls-files -s >out &&
		test_line_count = 7 out &&
		git ls-files -u >out &&
		test_line_count = 6 out &&
		git ls-files -o >out &&
		test_line_count = 2 out &&

		git rev-parse >actual \
			:1:z/b :2:y/b :3:w/b :1:z/c :2:y/c :3:w/c :0:y/d &&
		git rev-parse >expect \
			 O:z/b  O:z/b  O:z/b  O:z/c  O:z/c  O:z/c  B:z/d &&
		test_cmp expect actual &&

		git hash-object >actual \
			y/b   w/b   y/c   w/c &&
		git rev-parse >expect \
			O:z/b O:z/b O:z/c O:z/c &&
		test_cmp expect actual &&

		test_path_is_missing z/b &&
		test_path_is_missing z/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/8e/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B 7a02f25] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => w}/b (100%)
 rename {z => w}/c (100%)
 create mode 100644 z/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
CONFLICT (rename/rename): z/c renamed to y/c in HEAD and to w/c in B^0.
CONFLICT (rename/rename): z/b renamed to y/b in HEAD and to w/b in B^0.
ok 31 - 8e: Both sides rename, one side adds to original directory

expecting success of 6423.32 '9a: Inner renamed directory within outer renamed directory': 
	test_setup_9a &&
	(
		cd 9a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 7 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/i &&
		git rev-parse >expect \
			O:z/b    O:z/c    B:z/i &&
		test_cmp expect actual &&

		git rev-parse >actual \
			HEAD:x/w/e HEAD:x/w/f HEAD:x/w/g HEAD:x/w/h &&
		git rev-parse >expect \
			O:z/d/e    O:z/d/f    O:z/d/g    B:z/d/h &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9a/.git/
[master (root-commit) ad6f8a2] O
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d/e
 create mode 100644 z/d/f
 create mode 100644 z/d/g
Switched to branch 'A'
[A 9bfe686] A
 Author: A U Thor <author@example.com>
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename {z/d => x/w}/e (100%)
 rename {z/d => x/w}/f (100%)
 rename {z/d => x/w}/g (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B 004af77] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/d/h
 create mode 100644 z/i
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9bfe686 A
Path updated: z/d/h added in B^0 inside a directory that was renamed in HEAD; moving it to x/w/h.
Path updated: z/i added in B^0 inside a directory that was renamed in HEAD; moving it to y/i.
Merge made by the 'ort' strategy.
 x/w/h | 1 +
 y/i   | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 x/w/h
 create mode 100644 y/i
ok 32 - 9a: Inner renamed directory within outer renamed directory

expecting success of 6423.33 '9b: Transitive rename with content merge': 
	test_setup_9b &&
	(
		cd 9b &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		test_seq 0 11 >expected &&
		test_cmp expected y/d &&
		git add expected &&
		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    :0:expected &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:x/d &&
		test_must_fail git rev-parse HEAD:z/d &&
		test_path_is_missing z/d &&

		test $(git rev-parse HEAD:y/d) != $(git rev-parse O:x/d) &&
		test $(git rev-parse HEAD:y/d) != $(git rev-parse A:x/d) &&
		test $(git rev-parse HEAD:y/d) != $(git rev-parse B:z/d)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9b/.git/
[master (root-commit) f84ec32] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A a2010ab] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B ded5d1d] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename {x => z}/d (91%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at a2010ab A
Path updated: x/d renamed to z/d in B^0, inside a directory that was renamed in HEAD; moving it to y/d.
Auto-merging y/d
Merge made by the 'ort' strategy.
 {x => y}/d | 1 +
 1 file changed, 1 insertion(+)
 rename {x => y}/d (92%)
fatal: path 'x/d' does not exist in 'HEAD'
HEAD:x/d
fatal: path 'z/d' does not exist in 'HEAD'
HEAD:z/d
ok 33 - 9b: Transitive rename with content merge

expecting success of 6423.34 '9c: Doubly transitive rename?': 
	test_setup_9c &&
	(
		cd 9c &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "WARNING: Avoiding applying x -> z rename to x/f" out &&

		git ls-files -s >out &&
		test_line_count = 6 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:y/d HEAD:y/e HEAD:x/f HEAD:x/g &&
		git rev-parse >expect \
			O:z/b    O:z/c    O:x/d    O:x/e    O:w/f    A:x/g &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9c/.git/
[master (root-commit) f3e903b] O
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 w/f
 create mode 100644 x/d
 create mode 100644 x/e
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 8a6c5f2] A
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 rename {w => x}/f (100%)
 create mode 100644 x/g
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B 3f509fc] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
 rename {x => z}/e (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8a6c5f2 A
WARNING: Avoiding applying x -> z rename to x/f, because z itself was renamed.
ok 34 - 9c: Doubly transitive rename?

expecting success of 6423.35 '9d: N-way transitive rename?': 
	test_setup_9d &&
	(
		cd 9d &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		test_i18ngrep "WARNING: Avoiding applying z -> y rename to z/t" out &&
		test_i18ngrep "WARNING: Avoiding applying y -> x rename to y/a" out &&
		test_i18ngrep "WARNING: Avoiding applying x -> w rename to x/b" out &&
		test_i18ngrep "WARNING: Avoiding applying w -> v rename to w/c" out &&

		git ls-files -s >out &&
		test_line_count = 7 out &&
		git ls-files -o >out &&
		test_line_count = 1 out &&

		git rev-parse >actual \
			HEAD:z/t \
			HEAD:y/a HEAD:x/b HEAD:w/c \
			HEAD:u/d HEAD:u/e HEAD:u/f &&
		git rev-parse >expect \
			B:z/t    \
			O:z/a    O:y/b    O:x/c    \
			O:w/d    O:v/e    A:u/f &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9d/.git/
[master (root-commit) a77ae1c] O
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 u/f
 create mode 100644 v/e
 create mode 100644 w/d
 create mode 100644 x/c
 create mode 100644 y/b
 create mode 100644 z/a
Switched to branch 'A'
[A 67d374b] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {v => u}/e (100%)
 rename {x => w}/c (100%)
 rename {z => y}/a (100%)
Switched to branch 'B'
[B 9c7db88] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {w => v}/d (100%)
 rename {y => x}/b (100%)
 create mode 100644 z/t
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 67d374b A
WARNING: Avoiding applying z -> y rename to z/t, because y itself was renamed.
WARNING: Avoiding applying y -> x rename to y/a, because x itself was renamed.
WARNING: Avoiding applying x -> w rename to x/b, because w itself was renamed.
WARNING: Avoiding applying w -> v rename to w/c, because v itself was renamed.
ok 35 - 9d: N-way transitive rename?

expecting success of 6423.36 '9e: N-to-1 whammo': 
	test_setup_9e &&
	(
		cd 9e &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out &&
		grep "CONFLICT (implicit dir rename): Cannot map more than one path to combined/yo" out >error_line &&
		grep -q dir1/yo error_line &&
		grep -q dir2/yo error_line &&
		grep -q dir3/yo error_line &&
		grep -q dirN/yo error_line &&

		git ls-files -s >out &&
		test_line_count = 16 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 2 out &&

		git rev-parse >actual \
			:0:combined/a :0:combined/b :0:combined/c \
			:0:combined/d :0:combined/e :0:combined/f \
			:0:combined/g :0:combined/h :0:combined/i \
			:0:combined/j :0:combined/k :0:combined/l &&
		git rev-parse >expect \
			 O:dir1/a      O:dir1/b      A:dir1/c \
			 O:dir2/d      O:dir2/e      A:dir2/f \
			 O:dir3/g      O:dir3/h      A:dir3/i \
			 O:dirN/j      O:dirN/k      A:dirN/l &&
		test_cmp expect actual &&

		git rev-parse >actual \
			:0:dir1/yo :0:dir2/yo :0:dir3/yo :0:dirN/yo &&
		git rev-parse >expect \
			 A:dir1/yo  A:dir2/yo  A:dir3/yo  A:dirN/yo &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9e/.git/
[master (root-commit) 6b1b942] O
 Author: A U Thor <author@example.com>
 8 files changed, 8 insertions(+)
 create mode 100644 dir1/a
 create mode 100644 dir1/b
 create mode 100644 dir2/d
 create mode 100644 dir2/e
 create mode 100644 dir3/g
 create mode 100644 dir3/h
 create mode 100644 dirN/j
 create mode 100644 dirN/k
Switched to branch 'A'
[A 1129f61] A
 Author: A U Thor <author@example.com>
 8 files changed, 8 insertions(+)
 create mode 100644 dir1/c
 create mode 100644 dir1/yo
 create mode 100644 dir2/f
 create mode 100644 dir2/yo
 create mode 100644 dir3/i
 create mode 100644 dir3/yo
 create mode 100644 dirN/l
 create mode 100644 dirN/yo
Switched to branch 'B'
[B e5547de] B
 Author: A U Thor <author@example.com>
 8 files changed, 0 insertions(+), 0 deletions(-)
 rename {dir1 => combined}/a (100%)
 rename {dir1 => combined}/b (100%)
 rename {dir2 => combined}/d (100%)
 rename {dir2 => combined}/e (100%)
 rename {dir3 => combined}/g (100%)
 rename {dir3 => combined}/h (100%)
 rename {dirN => combined}/j (100%)
 rename {dirN => combined}/k (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1129f61 A
ok 36 - 9e: N-to-1 whammo

expecting success of 6423.37 '9f: Renamed directory that only contained immediate subdirs': 
	test_setup_9f &&
	(
		cd 9f &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:priority/a/foo \
			HEAD:priority/b/bar \
			HEAD:priority/b/baz \
			HEAD:priority/c &&
		git rev-parse >expect \
			O:goal/a/foo \
			O:goal/b/bar \
			O:goal/b/baz \
			B:goal/c &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:goal/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9f/.git/
[master (root-commit) 6480e53] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 goal/a/foo
 create mode 100644 goal/b/bar
 create mode 100644 goal/b/baz
Switched to branch 'A'
[A 96c4122] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {goal => priority}/a/foo (100%)
 rename {goal => priority}/b/bar (100%)
 rename {goal => priority}/b/baz (100%)
Switched to branch 'B'
[B 08998f4] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 goal/c
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 96c4122 A
Path updated: goal/c added in B^0 inside a directory that was renamed in HEAD; moving it to priority/c.
Merge made by the 'ort' strategy.
 priority/c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 priority/c
fatal: path 'goal/c' does not exist in 'HEAD'
HEAD:goal/c
ok 37 - 9f: Renamed directory that only contained immediate subdirs

checking known breakage of 6423.38 '9g: Renamed directory that only contained immediate subdirs, immediate subdirs renamed': 
	test_setup_9g &&
	(
		cd 9g &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:priority/alpha/foo \
			HEAD:priority/beta/bar  \
			HEAD:priority/beta/baz  \
			HEAD:priority/c &&
		git rev-parse >expect \
			O:goal/a/foo \
			O:goal/b/bar \
			O:goal/b/baz \
			B:goal/c &&
		test_cmp expect actual &&
		test_must_fail git rev-parse HEAD:goal/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9g/.git/
[master (root-commit) 6480e53] O
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 goal/a/foo
 create mode 100644 goal/b/bar
 create mode 100644 goal/b/baz
Switched to branch 'A'
[A f7fdc05] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {goal/a => priority/alpha}/foo (100%)
 rename {goal/b => priority/beta}/bar (100%)
 rename {goal/b => priority/beta}/baz (100%)
Switched to branch 'B'
[B 08998f4] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 goal/c
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f7fdc05 A
Merge made by the 'ort' strategy.
 goal/c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 goal/c
fatal: path 'priority/c' does not exist in 'HEAD'
not ok 38 - 9g: Renamed directory that only contained immediate subdirs, immediate subdirs renamed # TODO known breakage

expecting success of 6423.39 '9h: Avoid dir rename on merely modified path': 
	test_setup_9h &&
	(
		cd 9h &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			HEAD:y/b HEAD:y/c HEAD:x/d &&
		git rev-parse >expect \
			O:z/b    O:z/c    A:z/d &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/9h/.git/
[master (root-commit) 714b322] O
 Author: A U Thor <author@example.com>
 3 files changed, 11 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
 create mode 100644 z/d
Switched to branch 'A'
[A d51a99d] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'B'
[B 0435868] B
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d51a99d A
Merge made by the 'ort' strategy.
 {z => x}/d | 0
 {z => y}/b | 0
 {z => y}/c | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => x}/d (100%)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
ok 39 - 9h: Avoid dir rename on merely modified path

expecting success of 6423.40 '10a: Overwrite untracked with normal rename/delete': 
	test_setup_10a &&
	(
		cd 10a &&

		git checkout A^0 &&
		echo very >z/c &&
		echo important >z/d &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		test_path_is_missing .git/MERGE_HEAD &&
		test_i18ngrep "The following untracked working tree files would be overwritten by merge" err &&

		git ls-files -s >out &&
		test_line_count = 1 out &&
		git ls-files -o >out &&
		test_line_count = 4 out &&

		echo very >expect &&
		test_cmp expect z/c &&

		echo important >expect &&
		test_cmp expect z/d &&

		git rev-parse HEAD:z/b >actual &&
		git rev-parse O:z/b >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10a/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
rm 'z/c'
[A bc21cd8] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 z/c
Switched to branch 'B'
[B 7bb44f1] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename z/{c => d} (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at bc21cd8 A
error: The following untracked working tree files would be overwritten by merge:
ok 40 - 10a: Overwrite untracked with normal rename/delete

expecting success of 6423.41 '10b: Overwrite untracked with dir rename + delete': 
	test_setup_10b &&
	(
		cd 10b &&

		git checkout A^0 &&
		echo very >y/c &&
		echo important >y/d &&
		echo contents >y/e &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err &&

			git ls-files -s >out &&
			test_line_count = 1 out &&
			git ls-files -u >out &&
			test_line_count = 0 out &&
			git ls-files -o >out &&
			test_line_count = 5 out
		else
			test_i18ngrep "CONFLICT (rename/delete).*Version B\^0 of y/d left in tree at y/d~B\^0" out &&
			test_i18ngrep "Error: Refusing to lose untracked file at y/e; writing to y/e~B\^0 instead" out &&

			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 5 out &&

			git rev-parse >actual \
				:0:y/b :3:y/d :3:y/e &&
			git rev-parse >expect \
				O:z/b  O:z/c  B:z/e &&
			test_cmp expect actual
		fi &&

		echo very >expect &&
		test_cmp expect y/c &&

		echo important >expect &&
		test_cmp expect y/d &&

		echo contents >expect &&
		test_cmp expect y/e
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10b/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
rm 'z/c'
[A 3a1dd27] A
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename {z => y}/b (100%)
 delete mode 100644 z/c
Switched to branch 'B'
[B 13c0b2e] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename z/{c => d} (100%)
 create mode 100644 z/e
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 3a1dd27 A
error: The following untracked working tree files would be overwritten by merge:
ok 41 - 10b: Overwrite untracked with dir rename + delete

expecting success of 6423.42 '10c1: Overwrite untracked with dir rename/rename(1to2)': 
	test_setup_10c 1 &&
	(
		cd 10c_1 &&

		git checkout A^0 &&
		echo important >y/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err &&

			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 0 out &&
			git ls-files -o >out &&
			test_line_count = 3 out
		else
			test_i18ngrep "CONFLICT (rename/rename)" out &&
			test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~B\^0 instead" out &&

			git ls-files -s >out &&
			test_line_count = 6 out &&
			git ls-files -u >out &&
			test_line_count = 3 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :3:y/c &&
			git rev-parse >expect \
				 O:z/a  O:z/b  O:x/d  O:x/c  O:x/c  O:x/c &&
			test_cmp expect actual &&

			git hash-object y/c~B^0 >actual &&
			git rev-parse O:x/c >expect &&
			test_cmp expect actual
		fi &&

		echo important >expect &&
		test_cmp expect y/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10c_1/.git/
[master (root-commit) 1ee9006] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 x/c
 create mode 100644 x/d
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A e6a4b22] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => w}/c (100%)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B b8dbf85] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e6a4b22 A
error: The following untracked working tree files would be overwritten by merge:
ok 42 - 10c1: Overwrite untracked with dir rename/rename(1to2)

expecting success of 6423.43 '10c2: Overwrite untracked with dir rename/rename(1to2), other direction': 
	test_setup_10c 2 &&
	(
		cd 10c_2 &&

		git reset --hard &&
		git clean -fdqx &&

		git checkout B^0 &&
		mkdir y &&
		echo important >y/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive A^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err &&

			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 0 out &&
			git ls-files -o >out &&
			test_line_count = 3 out
		else
			test_i18ngrep "CONFLICT (rename/rename)" out &&
			test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~HEAD instead" out &&

			git ls-files -s >out &&
			test_line_count = 6 out &&
			git ls-files -u >out &&
			test_line_count = 3 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:y/a :0:y/b :0:x/d :1:x/c :3:w/c :2:y/c &&
			git rev-parse >expect \
				 O:z/a  O:z/b  O:x/d  O:x/c  O:x/c  O:x/c &&
			test_cmp expect actual &&

			git hash-object y/c~HEAD >actual &&
			git rev-parse O:x/c >expect &&
			test_cmp expect actual
		fi &&

		echo important >expect &&
		test_cmp expect y/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10c_2/.git/
[master (root-commit) 1ee9006] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 x/c
 create mode 100644 x/d
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A e6a4b22] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => w}/c (100%)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B b8dbf85] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/c (100%)
HEAD is now at b8dbf85 B
Note: switching to 'B^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b8dbf85 B
error: The following untracked working tree files would be overwritten by merge:
ok 43 - 10c2: Overwrite untracked with dir rename/rename(1to2), other direction

expecting success of 6423.44 '10d: Delete untracked with dir rename/rename(2to1)': 
	test_setup_10d &&
	(
		cd 10d &&

		git checkout A^0 &&
		echo important >y/wham &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: The following untracked working tree files would be overwritten by merge" err &&

			git ls-files -s >out &&
			test_line_count = 6 out &&
			git ls-files -u >out &&
			test_line_count = 0 out &&
			git ls-files -o >out &&
			test_line_count = 3 out
		else
			test_i18ngrep "CONFLICT (rename/rename)" out &&
			test_i18ngrep "Refusing to lose untracked file at y/wham" out &&

			git ls-files -s >out &&
			test_line_count = 6 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:y/a :0:y/b :0:y/d :0:y/e :2:y/wham :3:y/wham &&
			git rev-parse >expect \
				 O:z/a  O:z/b  O:x/d  O:x/e  O:z/c     O:x/f &&
			test_cmp expect actual &&

			test_must_fail git rev-parse :1:y/wham &&

			# Test that two-way merge in y/wham~merged is as expected
			git cat-file -p :2:y/wham >expect &&
			git cat-file -p :3:y/wham >other &&
			>empty &&
			test_must_fail git merge-file \
				-L "HEAD" \
				-L "" \
				-L "B^0" \
				expect empty other &&
			test_cmp expect y/wham~merged
		fi &&

		echo important >expect &&
		test_cmp expect y/wham
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10d/.git/
[master (root-commit) 1a4b546] O
 Author: A U Thor <author@example.com>
 6 files changed, 6 insertions(+)
 create mode 100644 x/d
 create mode 100644 x/e
 create mode 100644 x/f
 create mode 100644 z/a
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 9f961af] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename z/c => x/wham (100%)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B 6a20b58] B
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {x => y}/d (100%)
 rename {x => y}/e (100%)
 rename x/f => z/wham (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9f961af A
error: The following untracked working tree files would be overwritten by merge:
ok 44 - 10d: Delete untracked with dir rename/rename(2to1)

expecting success of 6423.45 '10e: Does git complain about untracked file that is not really in the way?': 
	test_setup_10e &&
	(
		cd 10e &&

		git checkout A^0 &&
		mkdir z &&
		echo random >z/c &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		test_i18ngrep ! "following untracked working tree files would be overwritten by merge" err &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -o >out &&
		test_line_count = 3 out &&

		git rev-parse >actual \
			:0:y/a :0:y/b :0:y/c &&
		git rev-parse >expect \
			 O:z/a  O:z/b  B:z/c &&
		test_cmp expect actual &&

		echo random >expect &&
		test_cmp expect z/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/10e/.git/
[master (root-commit) 75ee182] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A ac1ed31] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
Switched to branch 'B'
[B 095ac3d] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 z/c
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ac1ed31 A
ok 45 - 10e: Does git complain about untracked file that is not really in the way?

expecting success of 6423.46 '11a: Avoid losing dirty contents with simple rename': 
	test_setup_11a &&
	(
		cd 11a &&

		git checkout A^0 &&
		echo stuff >>z/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			test_i18ngrep "Refusing to lose dirty file at z/c" out &&

			git ls-files -s >out &&
			test_line_count = 2 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:z/a :2:z/c &&
			git rev-parse >expect \
				 O:z/a  B:z/b &&
			test_cmp expect actual &&

			git hash-object z/c~HEAD >actual &&
			git rev-parse B:z/b >expect &&
			test_cmp expect actual
		fi &&

		test_seq 1 10 >expected &&
		echo stuff >>expected &&
		test_cmp expected z/c

	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11a/.git/
[master (root-commit) d2da13d] O
 Author: A U Thor <author@example.com>
 2 files changed, 11 insertions(+)
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A 7a0ff52] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename z/{b => c} (100%)
Switched to branch 'B'
[B b7a4243] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7a0ff52 A
error: Your local changes to the following files would be overwritten by merge:
ok 46 - 11a: Avoid losing dirty contents with simple rename

expecting success of 6423.47 '11b: Avoid losing dirty file involved in directory rename': 
	test_setup_11b &&
	(
		cd 11b &&

		git checkout A^0 &&
		echo stuff >>z/c &&

		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
			test_i18ngrep "Refusing to lose dirty file at z/c" out &&

			git ls-files -s >out &&
			test_line_count = 3 out &&
			git ls-files -u >out &&
			test_line_count = 0 out &&
			git ls-files -m >out &&
			test_line_count = 0 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:x/b :0:y/a :0:y/c &&
			git rev-parse >expect \
				 O:x/b  O:z/a  B:x/c &&
			test_cmp expect actual &&

			git hash-object y/c >actual &&
			git rev-parse B:x/c >expect &&
			test_cmp expect actual
		fi &&

		grep -q stuff z/c &&
		test_seq 1 10 >expected &&
		echo stuff >>expected &&
		test_cmp expected z/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11b/.git/
[master (root-commit) 8ba0ed2] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/b
 create mode 100644 x/c
 create mode 100644 z/a
Switched to branch 'A'
[A 331ae41] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/c (100%)
Switched to branch 'B'
[B 0b664da] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename {z => y}/a (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 331ae41 A
error: Your local changes to the following files would be overwritten by merge:
ok 47 - 11b: Avoid losing dirty file involved in directory rename

expecting success of 6423.48 '11c: Avoid losing not-uptodate with rename + D/F conflict': 
	test_setup_11c &&
	(
		cd 11c &&

		git checkout A^0 &&
		echo stuff >>y/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			test_i18ngrep "following files would be overwritten by merge" err
		fi &&

		grep -q stuff y/c &&
		test_seq 1 10 >expected &&
		echo stuff >>expected &&
		test_cmp expected y/c &&

		git ls-files -s >out &&
		test_line_count = 3 out &&
		git ls-files -u >out &&
		test_line_count = 0 out &&
		git ls-files -m >out &&
		test_line_count = 1 out &&
		git ls-files -o >out &&
		test_line_count = 3 out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11c/.git/
[master (root-commit) c615350] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/b
 create mode 100644 x/c
 create mode 100644 y/a
Switched to branch 'A'
[A b42d3e1] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => y}/c (100%)
Switched to branch 'B'
[B 78faa62] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 y/c/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b42d3e1 A
error: Your local changes to the following files would be overwritten by merge:
ok 48 - 11c: Avoid losing not-uptodate with rename + D/F conflict

expecting success of 6423.49 '11d: Avoid losing not-uptodate with rename + D/F conflict': 
	test_setup_11d &&
	(
		cd 11d &&

		git checkout A^0 &&
		echo stuff >>z/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			test_i18ngrep "Refusing to lose dirty file at z/c" out &&

			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 1 out &&
			git ls-files -o >out &&
			test_line_count = 4 out &&

			git rev-parse >actual \
				:0:x/b :0:y/a :0:y/c/d :3:y/c &&
			git rev-parse >expect \
				 O:x/b  O:z/a  B:y/c/d  B:x/c &&
			test_cmp expect actual &&

			git hash-object y/c~HEAD >actual &&
			git rev-parse B:x/c >expect &&
			test_cmp expect actual
		fi &&

		grep -q stuff z/c &&
		test_seq 1 10 >expected &&
		echo stuff >>expected &&
		test_cmp expected z/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11d/.git/
[master (root-commit) 8ba0ed2] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/b
 create mode 100644 x/c
 create mode 100644 z/a
Switched to branch 'A'
[A 331ae41] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/c (100%)
Switched to branch 'B'
[B cbf14e5] B
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 rename {z => y}/a (100%)
 create mode 100644 y/c/d
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 331ae41 A
error: Your local changes to the following files would be overwritten by merge:
ok 49 - 11d: Avoid losing not-uptodate with rename + D/F conflict

expecting success of 6423.50 '11e: Avoid deleting not-uptodate with dir rename/rename(1to2)/add': 
	test_setup_11e &&
	(
		cd 11e &&

		git checkout A^0 &&
		echo mods >>y/c &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			test_i18ngrep "CONFLICT (rename/rename)" out &&
			test_i18ngrep "Refusing to lose dirty file at y/c" out &&

			git ls-files -s >out &&
			test_line_count = 7 out &&
			git ls-files -u >out &&
			test_line_count = 4 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			git rev-parse >actual \
				:0:y/a :0:y/b :0:x/d :1:x/c :2:w/c :2:y/c :3:y/c &&
			git rev-parse >expect \
				 O:z/a  O:z/b  O:x/d  O:x/c  O:x/c  A:y/c  O:x/c &&
			test_cmp expect actual &&

			# See if y/c~merged has expected contents; requires manually
			# doing the expected file merge
			git cat-file -p A:y/c >c1 &&
			git cat-file -p B:z/c >c2 &&
			>empty &&
			test_must_fail git merge-file \
				-L "HEAD" \
				-L "" \
				-L "B^0" \
				c1 empty c2 &&
			test_cmp c1 y/c~merged
		fi &&

		echo different >expected &&
		echo mods >>expected &&
		test_cmp expected y/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11e/.git/
[master (root-commit) 1ee9006] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 x/c
 create mode 100644 x/d
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A 0006594] A
 Author: A U Thor <author@example.com>
 4 files changed, 1 insertion(+)
 rename {x => w}/c (100%)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
 create mode 100644 y/c
Switched to branch 'B'
[B b8dbf85] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/c (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0006594 A
error: Your local changes to the following files would be overwritten by merge:
ok 50 - 11e: Avoid deleting not-uptodate with dir rename/rename(1to2)/add

expecting success of 6423.51 '11f: Avoid deleting not-uptodate with dir rename/rename(2to1)': 
	test_setup_11f &&
	(
		cd 11f &&

		git checkout A^0 &&
		echo important >>y/wham &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&
		if test "$GIT_TEST_MERGE_ALGORITHM" = ort
		then
			test_path_is_missing .git/MERGE_HEAD &&
			test_i18ngrep "error: Your local changes to the following files would be overwritten by merge" err
		else
			test_i18ngrep "CONFLICT (rename/rename)" out &&
			test_i18ngrep "Refusing to lose dirty file at y/wham" out &&

			git ls-files -s >out &&
			test_line_count = 4 out &&
			git ls-files -u >out &&
			test_line_count = 2 out &&
			git ls-files -o >out &&
			test_line_count = 3 out &&

			test_must_fail git rev-parse :1:y/wham &&

			git rev-parse >actual \
				:0:y/a :0:y/b :2:y/wham :3:y/wham &&
			git rev-parse >expect \
				 O:z/a  O:z/b  O:x/c     O:x/d &&
			test_cmp expect actual &&

			# Test that two-way merge in y/wham~merged is as expected
			git cat-file -p :2:y/wham >expect &&
			git cat-file -p :3:y/wham >other &&
			>empty &&
			test_must_fail git merge-file \
				-L "HEAD" \
				-L "" \
				-L "B^0" \
				expect empty other &&
			test_cmp expect y/wham~merged
		fi &&

		test_seq 1 10 >expected &&
		echo important >>expected &&
		test_cmp expected y/wham
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/11f/.git/
[master (root-commit) 2274342] O
 Author: A U Thor <author@example.com>
 4 files changed, 13 insertions(+)
 create mode 100644 x/c
 create mode 100644 x/d
 create mode 100644 z/a
 create mode 100644 z/b
Switched to branch 'A'
[A 6299452] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/a (100%)
 rename {z => y}/b (100%)
 rename x/c => y/wham (100%)
Switched to branch 'B'
[B 42fa76f] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename x/d => z/wham (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6299452 A
error: Your local changes to the following files would be overwritten by merge:
ok 51 - 11f: Avoid deleting not-uptodate with dir rename/rename(2to1)

expecting success of 6423.52 '12a: Moving one directory hierarchy into another': 
	test_setup_12a &&
	(
		cd 12a &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		git rev-parse >actual \
			HEAD:node1/leaf1 HEAD:node1/leaf2 HEAD:node1/leaf5 \
			HEAD:node1/node2/leaf3 \
			HEAD:node1/node2/leaf4 \
			HEAD:node1/node2/leaf6 &&
		git rev-parse >expect \
			O:node1/leaf1    O:node1/leaf2    B:node1/leaf5 \
			O:node2/leaf3 \
			O:node2/leaf4 \
			B:node2/leaf6 &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12a/.git/
[master (root-commit) 674d36e] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 node1/leaf1
 create mode 100644 node1/leaf2
 create mode 100644 node2/leaf3
 create mode 100644 node2/leaf4
Switched to branch 'A'
[A 494e77b] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {node2 => node1/node2}/leaf3 (100%)
 rename {node2 => node1/node2}/leaf4 (100%)
Switched to branch 'B'
[B 139a75f] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 node1/leaf5
 create mode 100644 node2/leaf6
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 494e77b A
Path updated: node2/leaf6 added in B^0 inside a directory that was renamed in HEAD; moving it to node1/node2/leaf6.
Merge made by the 'ort' strategy.
 node1/leaf5       | 1 +
 node1/node2/leaf6 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 node1/leaf5
 create mode 100644 node1/node2/leaf6
ok 52 - 12a: Moving one directory hierarchy into another

expecting success of 6423.53 '12b1: Moving two directory hierarchies into each other': 
	test_setup_12b1 &&
	(
		cd 12b1 &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:node2/node1/leaf1 \
			HEAD:node2/node1/leaf2 \
			HEAD:node1/node2/leaf3 \
			HEAD:node1/node2/leaf4 &&
		git rev-parse >expect \
			O:node1/leaf1 \
			O:node1/leaf2 \
			O:node2/leaf3 \
			O:node2/leaf4 &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12b1/.git/
[master (root-commit) 674d36e] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 node1/leaf1
 create mode 100644 node1/leaf2
 create mode 100644 node2/leaf3
 create mode 100644 node2/leaf4
Switched to branch 'A'
[A 494e77b] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {node2 => node1/node2}/leaf3 (100%)
 rename {node2 => node1/node2}/leaf4 (100%)
Switched to branch 'B'
[B 634f1d4] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {node1 => node2/node1}/leaf1 (100%)
 rename {node1 => node2/node1}/leaf2 (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 494e77b A
Merge made by the 'ort' strategy.
 {node1 => node2/node1}/leaf1 | 0
 {node1 => node2/node1}/leaf2 | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {node1 => node2/node1}/leaf1 (100%)
 rename {node1 => node2/node1}/leaf2 (100%)
ok 53 - 12b1: Moving two directory hierarchies into each other

expecting success of 6423.54 '12b2: Moving two directory hierarchies into each other': 
	test_setup_12b2 &&
	(
		cd 12b2 &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 6 out &&

		git rev-parse >actual \
			HEAD:node1/node2/node1/leaf1 \
			HEAD:node1/node2/node1/leaf2 \
			HEAD:node2/node1/node2/leaf3 \
			HEAD:node2/node1/node2/leaf4 \
			HEAD:node2/node1/leaf5       \
			HEAD:node1/node2/leaf6       &&
		git rev-parse >expect \
			O:node1/leaf1 \
			O:node1/leaf2 \
			O:node2/leaf3 \
			O:node2/leaf4 \
			A:node1/leaf5 \
			B:node2/leaf6 &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12b2/.git/
[master (root-commit) 674d36e] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 node1/leaf1
 create mode 100644 node1/leaf2
 create mode 100644 node2/leaf3
 create mode 100644 node2/leaf4
Switched to branch 'A'
[A 786826f] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 create mode 100644 node1/leaf5
 rename {node2 => node1/node2}/leaf3 (100%)
 rename {node2 => node1/node2}/leaf4 (100%)
Switched to branch 'B'
[B 9ae1186] B
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 create mode 100644 node2/leaf6
 rename {node1 => node2/node1}/leaf1 (100%)
 rename {node1 => node2/node1}/leaf2 (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 786826f A
Path updated: node2/leaf6 added in B^0 inside a directory that was renamed in HEAD; moving it to node1/node2/leaf6.
Path updated: node1/leaf1 renamed to node2/node1/leaf1 in B^0, inside a directory that was renamed in HEAD; moving it to node1/node2/node1/leaf1.
Path updated: node1/leaf2 renamed to node2/node1/leaf2 in B^0, inside a directory that was renamed in HEAD; moving it to node1/node2/node1/leaf2.
Path updated: node1/leaf5 added in HEAD inside a directory that was renamed in B^0; moving it to node2/node1/leaf5.
Path updated: node2/leaf3 renamed to node1/node2/leaf3 in HEAD, inside a directory that was renamed in B^0; moving it to node2/node1/node2/leaf3.
Path updated: node2/leaf4 renamed to node1/node2/leaf4 in HEAD, inside a directory that was renamed in B^0; moving it to node2/node1/node2/leaf4.
Merge made by the 'ort' strategy.
 node1/node2/leaf6                  | 1 +
 node1/{ => node2/node1}/leaf1      | 0
 node1/{ => node2/node1}/leaf2      | 0
 {node1 => node2/node1}/leaf5       | 0
 {node1 => node2/node1}/node2/leaf3 | 0
 {node1 => node2/node1}/node2/leaf4 | 0
 6 files changed, 1 insertion(+)
 create mode 100644 node1/node2/leaf6
 rename node1/{ => node2/node1}/leaf1 (100%)
 rename node1/{ => node2/node1}/leaf2 (100%)
 rename {node1 => node2/node1}/leaf5 (100%)
 rename {node1 => node2/node1}/node2/leaf3 (100%)
 rename {node1 => node2/node1}/node2/leaf4 (100%)
ok 54 - 12b2: Moving two directory hierarchies into each other

expecting success of 6423.55 '12c1: Moving one directory hierarchy into another w/ content merge': 
	test_setup_12c1 &&
	(
		cd 12c1 &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -u >out &&
		test_line_count = 12 out &&

		git rev-parse >actual \
			:1:node2/node1/leaf1 \
			:1:node2/node1/leaf2 \
			:1:node1/node2/leaf3 \
			:1:node1/node2/leaf4 \
			:2:node2/node1/leaf1 \
			:2:node2/node1/leaf2 \
			:2:node1/node2/leaf3 \
			:2:node1/node2/leaf4 \
			:3:node2/node1/leaf1 \
			:3:node2/node1/leaf2 \
			:3:node1/node2/leaf3 \
			:3:node1/node2/leaf4 &&
		git rev-parse >expect \
			O:node1/leaf1 \
			O:node1/leaf2 \
			O:node2/leaf3 \
			O:node2/leaf4 \
			A:node1/leaf1 \
			A:node1/leaf2 \
			A:node1/node2/leaf3 \
			A:node1/node2/leaf4 \
			B:node2/node1/leaf1 \
			B:node2/node1/leaf2 \
			B:node2/leaf3 \
			B:node2/leaf4 &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12c1/.git/
[master (root-commit) 0cf2f73] O
 Author: A U Thor <author@example.com>
 4 files changed, 36 insertions(+)
 create mode 100644 node1/leaf1
 create mode 100644 node1/leaf2
 create mode 100644 node2/leaf3
 create mode 100644 node2/leaf4
Switched to branch 'A'
[A 18ec7be] A
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 rename {node2 => node1/node2}/leaf3 (75%)
 rename {node2 => node1/node2}/leaf4 (75%)
Switched to branch 'B'
[B 705044c] B
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 rename {node1 => node2/node1}/leaf1 (75%)
 rename {node1 => node2/node1}/leaf2 (75%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 18ec7be A
Auto-merging node1/node2/leaf3
CONFLICT (content): Merge conflict in node1/node2/leaf3
Auto-merging node1/node2/leaf4
CONFLICT (content): Merge conflict in node1/node2/leaf4
Auto-merging node2/node1/leaf1
CONFLICT (content): Merge conflict in node2/node1/leaf1
Auto-merging node2/node1/leaf2
CONFLICT (content): Merge conflict in node2/node1/leaf2
Automatic merge failed; fix conflicts and then commit the result.
ok 55 - 12c1: Moving one directory hierarchy into another w/ content merge

expecting success of 6423.56 '12c2: Moving one directory hierarchy into another w/ content merge': 
	test_setup_12c2 &&
	(
		cd 12c2 &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 14 out &&
		git ls-files -u >out &&
		test_line_count = 12 out &&

		git rev-parse >actual \
			:1:node1/node2/node1/leaf1 \
			:1:node1/node2/node1/leaf2 \
			:1:node2/node1/node2/leaf3 \
			:1:node2/node1/node2/leaf4 \
			:2:node1/node2/node1/leaf1 \
			:2:node1/node2/node1/leaf2 \
			:2:node2/node1/node2/leaf3 \
			:2:node2/node1/node2/leaf4 \
			:3:node1/node2/node1/leaf1 \
			:3:node1/node2/node1/leaf2 \
			:3:node2/node1/node2/leaf3 \
			:3:node2/node1/node2/leaf4 \
			:0:node2/node1/leaf5       \
			:0:node1/node2/leaf6       &&
		git rev-parse >expect \
			O:node1/leaf1 \
			O:node1/leaf2 \
			O:node2/leaf3 \
			O:node2/leaf4 \
			A:node1/leaf1 \
			A:node1/leaf2 \
			A:node1/node2/leaf3 \
			A:node1/node2/leaf4 \
			B:node2/node1/leaf1 \
			B:node2/node1/leaf2 \
			B:node2/leaf3 \
			B:node2/leaf4 \
			A:node1/leaf5 \
			B:node2/leaf6 &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12c2/.git/
[master (root-commit) 0cf2f73] O
 Author: A U Thor <author@example.com>
 4 files changed, 36 insertions(+)
 create mode 100644 node1/leaf1
 create mode 100644 node1/leaf2
 create mode 100644 node2/leaf3
 create mode 100644 node2/leaf4
Switched to branch 'A'
[A c671e72] A
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 node1/leaf5
 rename {node2 => node1/node2}/leaf3 (75%)
 rename {node2 => node1/node2}/leaf4 (75%)
Switched to branch 'B'
[B 9d3c6b5] B
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 node2/leaf6
 rename {node1 => node2/node1}/leaf1 (75%)
 rename {node1 => node2/node1}/leaf2 (75%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at c671e72 A
Path updated: node2/leaf6 added in B^0 inside a directory that was renamed in HEAD; moving it to node1/node2/leaf6.
Path updated: node1/leaf1 renamed to node2/node1/leaf1 in B^0, inside a directory that was renamed in HEAD; moving it to node1/node2/node1/leaf1.
Auto-merging node1/node2/node1/leaf1
CONFLICT (content): Merge conflict in node1/node2/node1/leaf1
Path updated: node1/leaf2 renamed to node2/node1/leaf2 in B^0, inside a directory that was renamed in HEAD; moving it to node1/node2/node1/leaf2.
Auto-merging node1/node2/node1/leaf2
CONFLICT (content): Merge conflict in node1/node2/node1/leaf2
Path updated: node1/leaf5 added in HEAD inside a directory that was renamed in B^0; moving it to node2/node1/leaf5.
Path updated: node2/leaf3 renamed to node1/node2/leaf3 in HEAD, inside a directory that was renamed in B^0; moving it to node2/node1/node2/leaf3.
Auto-merging node2/node1/node2/leaf3
CONFLICT (content): Merge conflict in node2/node1/node2/leaf3
Path updated: node2/leaf4 renamed to node1/node2/leaf4 in HEAD, inside a directory that was renamed in B^0; moving it to node2/node1/node2/leaf4.
Auto-merging node2/node1/node2/leaf4
CONFLICT (content): Merge conflict in node2/node1/node2/leaf4
Automatic merge failed; fix conflicts and then commit the result.
ok 56 - 12c2: Moving one directory hierarchy into another w/ content merge

expecting success of 6423.57 '12d: Rename/merge subdir into the root, variant 1': 
	test_setup_12d &&
	(
		cd 12d &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&

		git rev-parse >actual \
			HEAD:subdir/foo.t   HEAD:bar.t &&
		git rev-parse >expect \
			O:a/b/subdir/foo.t  B:a/b/bar.t &&
		test_cmp expect actual &&

		git hash-object bar.t >actual &&
		git rev-parse B:a/b/bar.t >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:a/b/subdir/foo.t &&
		test_must_fail git rev-parse HEAD:a/b/bar.t &&
		test_path_is_missing a/ &&
		test_path_is_file bar.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12d/.git/
[master (root-commit) eb8da02] a/b/subdir/foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/b/subdir/foo.t
Switched to branch 'A'
[A 65a80b8] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {a/b/subdir => subdir}/foo.t (100%)
Switched to branch 'B'
[B f100ab2] a/b/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/b/bar.t
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 65a80b8 A
Path updated: a/b/bar.t added in B^0 inside a directory that was renamed in HEAD; moving it to bar.t.
Merge made by the 'ort' strategy.
 bar.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
fatal: path 'a/b/subdir/foo.t' does not exist in 'HEAD'
HEAD:a/b/subdir/foo.t
fatal: path 'a/b/bar.t' does not exist in 'HEAD'
HEAD:a/b/bar.t
ok 57 - 12d: Rename/merge subdir into the root, variant 1

expecting success of 6423.58 '12e: Rename/merge subdir into the root, variant 2': 
	test_setup_12e &&
	(
		cd 12e &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files -s >out &&
		test_line_count = 2 out &&

		git rev-parse >actual \
			HEAD:foo.t   HEAD:bar.t &&
		git rev-parse >expect \
			O:a/b/foo.t  B:a/b/bar.t &&
		test_cmp expect actual &&

		git hash-object bar.t >actual &&
		git rev-parse B:a/b/bar.t >expect &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:a/b/foo.t &&
		test_must_fail git rev-parse HEAD:a/b/bar.t &&
		test_path_is_missing a/ &&
		test_path_is_file bar.t
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12e/.git/
[master (root-commit) b044d92] a/b/foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/b/foo.t
Switched to branch 'A'
[A de696c4] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a/b/foo.t => foo.t (100%)
Switched to branch 'B'
[B e3eeb6b] a/b/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/b/bar.t
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at de696c4 A
Path updated: a/b/bar.t added in B^0 inside a directory that was renamed in HEAD; moving it to bar.t.
Merge made by the 'ort' strategy.
 bar.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
fatal: path 'a/b/foo.t' does not exist in 'HEAD'
HEAD:a/b/foo.t
fatal: path 'a/b/bar.t' does not exist in 'HEAD'
HEAD:a/b/bar.t
ok 58 - 12e: Rename/merge subdir into the root, variant 2

expecting success of 6423.59 '12f: Trivial directory resolve, caching, all kinds of fun': 
	test_setup_12f &&
	(
		cd 12f &&

		git checkout A^0 &&
		git branch Bmod B &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git -c merge.directoryRenames=true rebase A Bmod &&

		echo Checking the pick of B1... &&

		test_must_fail git rev-parse Bmod~1:dir &&

		git ls-tree -r Bmod~1 >out &&
		test_line_count = 98 out &&

		git diff --name-status A Bmod~1 >actual &&
		q_to_tab >expect <<-\EOF &&
		MQfolder/subdir/Makefile
		AQfolder/subdir/newfile.c
		MQfolder/subdir/newsubdir/e
		AQfolder/subdir/newsubdir/newfile.py
		MQfolder/subdir/tweaked/Makefile
		EOF
		test_cmp expect actual &&

		# Three-way merged files
		test_seq  2 11 >e_Merge1 &&
		test_seq 11 21 >Makefile_TOP &&
		test_seq 21 31 >Makefile_SUB &&
		git hash-object >expect      \
			e_Merge1             \
			Makefile_TOP         \
			Makefile_SUB         &&
		git rev-parse >actual              \
			Bmod~1:folder/subdir/newsubdir/e     \
			Bmod~1:folder/subdir/Makefile        \
			Bmod~1:folder/subdir/tweaked/Makefile &&
		test_cmp expect actual &&

		# New files showed up at the right location with right contents
		git rev-parse >expect                \
			B~1:dir/subdir/newfile.c            \
			B~1:dir/subdir/newsubdir/newfile.py &&
		git rev-parse >actual                      \
			Bmod~1:folder/subdir/newfile.c            \
			Bmod~1:folder/subdir/newsubdir/newfile.py &&
		test_cmp expect actual &&

		# Removed files
		test_path_is_missing folder/subdir/tweaked/f &&
		test_path_is_missing folder/subdir/tweaked/g &&

		# Unchanged files or directories
		git rev-parse >actual        \
			Bmod~1:folder/subdir/a          \
			Bmod~1:folder/subdir/b          \
			Bmod~1:folder/subdir/c          \
			Bmod~1:folder/subdir/d          \
			Bmod~1:folder/unchanged         \
			Bmod~1:folder/subdir/tweaked/h &&
		git rev-parse >expect          \
			O:dir/subdir/a         \
			O:dir/subdir/b         \
			O:dir/subdir/c         \
			O:dir/subdir/d         \
			O:dir/unchanged        \
			O:dir/subdir/tweaked/h &&
		test_cmp expect actual &&

		echo Checking the pick of B2... &&

		test_must_fail git rev-parse Bmod:dir &&

		git ls-tree -r Bmod >out &&
		test_line_count = 99 out &&

		git diff --name-status Bmod~1 Bmod >actual &&
		q_to_tab >expect <<-\EOF &&
		AQfolder/subdir/newfile.rs
		MQfolder/subdir/newsubdir/e
		EOF
		test_cmp expect actual &&

		# Three-way merged file
		test_seq  2 12 >e_Merge2 &&
		git hash-object e_Merge2 >expect &&
		git rev-parse Bmod:folder/subdir/newsubdir/e >actual &&
		test_cmp expect actual &&

		grep region_enter.*collect_merge_info trace.output >collect &&
		test_line_count = 4 collect &&
		grep region_enter.*process_entries$ trace.output >process &&
		test_line_count = 2 process
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12f/.git/
[master (root-commit) 362ed3d] O
 Author: A U Thor <author@example.com>
 98 files changed, 127 insertions(+)
 create mode 100644 dir/subdir/Makefile
 create mode 100644 dir/subdir/a
 create mode 100644 dir/subdir/b
 create mode 100644 dir/subdir/c
 create mode 100644 dir/subdir/d
 create mode 100644 dir/subdir/e
 create mode 100644 dir/subdir/tweaked/Makefile
 create mode 100644 dir/subdir/tweaked/f
 create mode 100644 dir/subdir/tweaked/g
 create mode 100644 dir/subdir/tweaked/h
 create mode 100644 dir/unchanged/file_1
 create mode 100644 dir/unchanged/file_10
 create mode 100644 dir/unchanged/file_11
 create mode 100644 dir/unchanged/file_12
 create mode 100644 dir/unchanged/file_13
 create mode 100644 dir/unchanged/file_14
 create mode 100644 dir/unchanged/file_15
 create mode 100644 dir/unchanged/file_16
 create mode 100644 dir/unchanged/file_17
 create mode 100644 dir/unchanged/file_18
 create mode 100644 dir/unchanged/file_19
 create mode 100644 dir/unchanged/file_2
 create mode 100644 dir/unchanged/file_20
 create mode 100644 dir/unchanged/file_21
 create mode 100644 dir/unchanged/file_22
 create mode 100644 dir/unchanged/file_23
 create mode 100644 dir/unchanged/file_24
 create mode 100644 dir/unchanged/file_25
 create mode 100644 dir/unchanged/file_26
 create mode 100644 dir/unchanged/file_27
 create mode 100644 dir/unchanged/file_28
 create mode 100644 dir/unchanged/file_29
 create mode 100644 dir/unchanged/file_3
 create mode 100644 dir/unchanged/file_30
 create mode 100644 dir/unchanged/file_31
 create mode 100644 dir/unchanged/file_32
 create mode 100644 dir/unchanged/file_33
 create mode 100644 dir/unchanged/file_34
 create mode 100644 dir/unchanged/file_35
 create mode 100644 dir/unchanged/file_36
 create mode 100644 dir/unchanged/file_37
 create mode 100644 dir/unchanged/file_38
 create mode 100644 dir/unchanged/file_39
 create mode 100644 dir/unchanged/file_4
 create mode 100644 dir/unchanged/file_40
 create mode 100644 dir/unchanged/file_41
 create mode 100644 dir/unchanged/file_42
 create mode 100644 dir/unchanged/file_43
 create mode 100644 dir/unchanged/file_44
 create mode 100644 dir/unchanged/file_45
 create mode 100644 dir/unchanged/file_46
 create mode 100644 dir/unchanged/file_47
 create mode 100644 dir/unchanged/file_48
 create mode 100644 dir/unchanged/file_49
 create mode 100644 dir/unchanged/file_5
 create mode 100644 dir/unchanged/file_50
 create mode 100644 dir/unchanged/file_51
 create mode 100644 dir/unchanged/file_52
 create mode 100644 dir/unchanged/file_53
 create mode 100644 dir/unchanged/file_54
 create mode 100644 dir/unchanged/file_55
 create mode 100644 dir/unchanged/file_56
 create mode 100644 dir/unchanged/file_57
 create mode 100644 dir/unchanged/file_58
 create mode 100644 dir/unchanged/file_59
 create mode 100644 dir/unchanged/file_6
 create mode 100644 dir/unchanged/file_60
 create mode 100644 dir/unchanged/file_61
 create mode 100644 dir/unchanged/file_62
 create mode 100644 dir/unchanged/file_63
 create mode 100644 dir/unchanged/file_64
 create mode 100644 dir/unchanged/file_65
 create mode 100644 dir/unchanged/file_66
 create mode 100644 dir/unchanged/file_67
 create mode 100644 dir/unchanged/file_68
 create mode 100644 dir/unchanged/file_69
 create mode 100644 dir/unchanged/file_7
 create mode 100644 dir/unchanged/file_70
 create mode 100644 dir/unchanged/file_71
 create mode 100644 dir/unchanged/file_72
 create mode 100644 dir/unchanged/file_73
 create mode 100644 dir/unchanged/file_74
 create mode 100644 dir/unchanged/file_75
 create mode 100644 dir/unchanged/file_76
 create mode 100644 dir/unchanged/file_77
 create mode 100644 dir/unchanged/file_78
 create mode 100644 dir/unchanged/file_79
 create mode 100644 dir/unchanged/file_8
 create mode 100644 dir/unchanged/file_80
 create mode 100644 dir/unchanged/file_81
 create mode 100644 dir/unchanged/file_82
 create mode 100644 dir/unchanged/file_83
 create mode 100644 dir/unchanged/file_84
 create mode 100644 dir/unchanged/file_85
 create mode 100644 dir/unchanged/file_86
 create mode 100644 dir/unchanged/file_87
 create mode 100644 dir/unchanged/file_88
 create mode 100644 dir/unchanged/file_9
Switched to branch 'A'
rm 'dir/subdir/tweaked/f'
rm 'dir/subdir/tweaked/g'
[A 9910422] A
 Author: A U Thor <author@example.com>
 98 files changed, 5 deletions(-)
 delete mode 100644 dir/subdir/tweaked/f
 delete mode 100644 dir/subdir/tweaked/g
 rename {dir => folder}/subdir/Makefile (90%)
 rename {dir => folder}/subdir/a (100%)
 rename {dir => folder}/subdir/b (100%)
 rename {dir => folder}/subdir/c (100%)
 rename {dir => folder}/subdir/d (100%)
 rename {dir/subdir => folder/subdir/newsubdir}/e (90%)
 rename {dir => folder}/subdir/tweaked/Makefile (90%)
 rename {dir => folder}/subdir/tweaked/h (100%)
 rename {dir => folder}/unchanged/file_1 (100%)
 rename {dir => folder}/unchanged/file_10 (100%)
 rename {dir => folder}/unchanged/file_11 (100%)
 rename {dir => folder}/unchanged/file_12 (100%)
 rename {dir => folder}/unchanged/file_13 (100%)
 rename {dir => folder}/unchanged/file_14 (100%)
 rename {dir => folder}/unchanged/file_15 (100%)
 rename {dir => folder}/unchanged/file_16 (100%)
 rename {dir => folder}/unchanged/file_17 (100%)
 rename {dir => folder}/unchanged/file_18 (100%)
 rename {dir => folder}/unchanged/file_19 (100%)
 rename {dir => folder}/unchanged/file_2 (100%)
 rename {dir => folder}/unchanged/file_20 (100%)
 rename {dir => folder}/unchanged/file_21 (100%)
 rename {dir => folder}/unchanged/file_22 (100%)
 rename {dir => folder}/unchanged/file_23 (100%)
 rename {dir => folder}/unchanged/file_24 (100%)
 rename {dir => folder}/unchanged/file_25 (100%)
 rename {dir => folder}/unchanged/file_26 (100%)
 rename {dir => folder}/unchanged/file_27 (100%)
 rename {dir => folder}/unchanged/file_28 (100%)
 rename {dir => folder}/unchanged/file_29 (100%)
 rename {dir => folder}/unchanged/file_3 (100%)
 rename {dir => folder}/unchanged/file_30 (100%)
 rename {dir => folder}/unchanged/file_31 (100%)
 rename {dir => folder}/unchanged/file_32 (100%)
 rename {dir => folder}/unchanged/file_33 (100%)
 rename {dir => folder}/unchanged/file_34 (100%)
 rename {dir => folder}/unchanged/file_35 (100%)
 rename {dir => folder}/unchanged/file_36 (100%)
 rename {dir => folder}/unchanged/file_37 (100%)
 rename {dir => folder}/unchanged/file_38 (100%)
 rename {dir => folder}/unchanged/file_39 (100%)
 rename {dir => folder}/unchanged/file_4 (100%)
 rename {dir => folder}/unchanged/file_40 (100%)
 rename {dir => folder}/unchanged/file_41 (100%)
 rename {dir => folder}/unchanged/file_42 (100%)
 rename {dir => folder}/unchanged/file_43 (100%)
 rename {dir => folder}/unchanged/file_44 (100%)
 rename {dir => folder}/unchanged/file_45 (100%)
 rename {dir => folder}/unchanged/file_46 (100%)
 rename {dir => folder}/unchanged/file_47 (100%)
 rename {dir => folder}/unchanged/file_48 (100%)
 rename {dir => folder}/unchanged/file_49 (100%)
 rename {dir => folder}/unchanged/file_5 (100%)
 rename {dir => folder}/unchanged/file_50 (100%)
 rename {dir => folder}/unchanged/file_51 (100%)
 rename {dir => folder}/unchanged/file_52 (100%)
 rename {dir => folder}/unchanged/file_53 (100%)
 rename {dir => folder}/unchanged/file_54 (100%)
 rename {dir => folder}/unchanged/file_55 (100%)
 rename {dir => folder}/unchanged/file_56 (100%)
 rename {dir => folder}/unchanged/file_57 (100%)
 rename {dir => folder}/unchanged/file_58 (100%)
 rename {dir => folder}/unchanged/file_59 (100%)
 rename {dir => folder}/unchanged/file_6 (100%)
 rename {dir => folder}/unchanged/file_60 (100%)
 rename {dir => folder}/unchanged/file_61 (100%)
 rename {dir => folder}/unchanged/file_62 (100%)
 rename {dir => folder}/unchanged/file_63 (100%)
 rename {dir => folder}/unchanged/file_64 (100%)
 rename {dir => folder}/unchanged/file_65 (100%)
 rename {dir => folder}/unchanged/file_66 (100%)
 rename {dir => folder}/unchanged/file_67 (100%)
 rename {dir => folder}/unchanged/file_68 (100%)
 rename {dir => folder}/unchanged/file_69 (100%)
 rename {dir => folder}/unchanged/file_7 (100%)
 rename {dir => folder}/unchanged/file_70 (100%)
 rename {dir => folder}/unchanged/file_71 (100%)
 rename {dir => folder}/unchanged/file_72 (100%)
 rename {dir => folder}/unchanged/file_73 (100%)
 rename {dir => folder}/unchanged/file_74 (100%)
 rename {dir => folder}/unchanged/file_75 (100%)
 rename {dir => folder}/unchanged/file_76 (100%)
 rename {dir => folder}/unchanged/file_77 (100%)
 rename {dir => folder}/unchanged/file_78 (100%)
 rename {dir => folder}/unchanged/file_79 (100%)
 rename {dir => folder}/unchanged/file_8 (100%)
 rename {dir => folder}/unchanged/file_80 (100%)
 rename {dir => folder}/unchanged/file_81 (100%)
 rename {dir => folder}/unchanged/file_82 (100%)
 rename {dir => folder}/unchanged/file_83 (100%)
 rename {dir => folder}/unchanged/file_84 (100%)
 rename {dir => folder}/unchanged/file_85 (100%)
 rename {dir => folder}/unchanged/file_86 (100%)
 rename {dir => folder}/unchanged/file_87 (100%)
 rename {dir => folder}/unchanged/file_88 (100%)
 rename {dir => folder}/unchanged/file_9 (100%)
Switched to branch 'B'
[B 9770da3] B1
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 dir/subdir/newfile.c
 create mode 100644 dir/subdir/newsubdir/newfile.py
[B 0eecb62] B2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 dir/subdir/newfile.rs
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9910422 A
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/Bmod.
Checking the pick of B1...
fatal: path 'dir' does not exist in 'Bmod~1'
Bmod~1:dir
Checking the pick of B2...
fatal: path 'dir' does not exist in 'Bmod'
Bmod:dir
ok 59 - 12f: Trivial directory resolve, caching, all kinds of fun

expecting success of 6423.60 '12g: Testcase with two kinds of "relevant" renames': 
	test_setup_12g &&
	(
		cd 12g &&

		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 &&

		test_write_lines once upon a time there was a repo >expect &&
		test_cmp expect newfile &&

		git ls-files -s >out &&
		test_line_count = 4 out &&

		git rev-parse >actual \
			HEAD:newdir/a  HEAD:newdir/b   HEAD:newdir/c &&
		git rev-parse >expect \
			B:newdir/a     B:newdir/b      A:subdir/c &&
		test_cmp expect actual &&

		test_must_fail git rev-parse HEAD:subdir/a &&
		test_must_fail git rev-parse HEAD:subdir/b &&
		test_must_fail git rev-parse HEAD:subdir/c &&
		test_path_is_missing subdir/ &&
		test_path_is_file newdir/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12g/.git/
[master (root-commit) 4f375a3] O
 Author: A U Thor <author@example.com>
 3 files changed, 22 insertions(+)
 create mode 100644 somefile
 create mode 100644 subdir/a
 create mode 100644 subdir/b
Switched to branch 'A'
[A 0338b5a] A
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 subdir/c
Switched to branch 'B'
[B a6ab9df] B
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 rename {subdir => newdir}/a (87%)
 rename {subdir => newdir}/b (82%)
 rename somefile => newfile (82%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0338b5a A
Path updated: subdir/c added in HEAD inside a directory that was renamed in B^0; moving it to newdir/c.
Auto-merging newfile
Merge made by the 'ort' strategy.
 {subdir => newdir}/a | 1 +
 {subdir => newdir}/b | 1 +
 {subdir => newdir}/c | 0
 somefile => newfile  | 1 +
 4 files changed, 3 insertions(+)
 rename {subdir => newdir}/a (87%)
 rename {subdir => newdir}/b (82%)
 rename {subdir => newdir}/c (100%)
 rename somefile => newfile (85%)
fatal: path 'subdir/a' does not exist in 'HEAD'
HEAD:subdir/a
fatal: path 'subdir/b' does not exist in 'HEAD'
HEAD:subdir/b
fatal: path 'subdir/c' does not exist in 'HEAD'
HEAD:subdir/c
ok 60 - 12g: Testcase with two kinds of "relevant" renames

checking known breakage of 6423.61 '12h: renaming a file within a renamed directory': 
	test_setup_12h &&
	(
		cd 12h &&

		git checkout A^0 &&

		test_might_fail git -c merge.directoryRenames=true merge -s recursive B^0 &&

		git ls-files >tracked &&
		test_line_count = 2 tracked &&

		test_path_is_missing olddir/a &&
		test_path_is_file newdir/alpha &&
		test_path_is_file newdir/b &&

		git rev-parse >actual \
			HEAD:newdir/alpha  HEAD:newdir/b &&
		git rev-parse >expect \
			A:newdir/a         O:oldir/b &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12h/.git/
[master (root-commit) 94e6431] orig
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 olddir/a
 create mode 100644 olddir/b
Switched to branch 'A'
[A 9bdc996] A
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 rename {olddir => newdir}/a (70%)
 rename {olddir => newdir}/b (100%)
Switched to branch 'B'
[B bec6409] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename olddir/{a => alpha} (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9bdc996 A
Path updated: olddir/a renamed to olddir/alpha in B^0, inside a directory that was renamed in HEAD; moving it to newdir/alpha.
CONFLICT (rename/rename): olddir/a renamed to newdir/a in HEAD and to newdir/alpha in B^0.
Automatic merge failed; fix conflicts and then commit the result.
test_line_count: line count for tracked != 2
newdir/a
newdir/alpha
newdir/b
olddir/a
not ok 61 - 12h: renaming a file within a renamed directory # TODO known breakage

expecting success of 6423.62 '12i: Directory rename causes rename-to-self': 
	test_setup_12i &&
	(
		cd 12i &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&

		test_path_is_missing source/subdir &&
		test_path_is_file source/bar &&
		test_path_is_file source/baz &&

		git ls-files | uniq >tracked &&
		test_line_count = 3 tracked &&

		git status --porcelain -uno >actual &&
		cat >expect <<-\EOF &&
		UU source/bar
		 M source/baz
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12i/.git/
[master (root-commit) 552586d] orig
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 source/bar
 create mode 100644 source/baz
 create mode 100644 source/subdir/foo
Switched to branch 'A'
[A 46a9eed] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename source/{subdir => }/foo (100%)
Switched to branch 'B'
[B 50b462a] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename source/{ => subdir}/bar (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 46a9eed A
M	source/baz
CONFLICT (file location): source/subdir/bar added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to source/bar.
Automatic merge failed; fix conflicts and then commit the result.
ok 62 - 12i: Directory rename causes rename-to-self

expecting success of 6423.63 '12j: Directory rename to root causes rename-to-self': 
	test_setup_12j &&
	(
		cd 12j &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&

		test_path_is_missing subdir &&
		test_path_is_file bar &&
		test_path_is_file baz &&

		git ls-files | uniq >tracked &&
		test_line_count = 3 tracked &&

		git status --porcelain -uno >actual &&
		cat >expect <<-\EOF &&
		UU bar
		 M baz
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12j/.git/
[master (root-commit) 59aeda9] orig
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 bar
 create mode 100644 baz
 create mode 100644 subdir/foo
Switched to branch 'A'
[A 493a8b6] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename subdir/foo => foo (100%)
Switched to branch 'B'
[B b7d0322] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename bar => subdir/bar (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 493a8b6 A
M	baz
CONFLICT (file location): subdir/bar added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to bar.
Automatic merge failed; fix conflicts and then commit the result.
ok 63 - 12j: Directory rename to root causes rename-to-self

expecting success of 6423.64 '12k: Directory rename with sibling causes rename-to-self': 
	test_setup_12k &&
	(
		cd 12k &&

		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&

		test_path_is_missing dirB &&
		test_path_is_file dirA/bar &&
		test_path_is_file dirA/baz &&

		git ls-files | uniq >tracked &&
		test_line_count = 3 tracked &&

		git status --porcelain -uno >actual &&
		cat >expect <<-\EOF &&
		UU dirA/bar
		 M dirA/baz
		EOF
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12k/.git/
[master (root-commit) d90d96e] orig
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 dirA/bar
 create mode 100644 dirA/baz
 create mode 100644 dirB/foo
Switched to branch 'A'
[A 1e2e223] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {dirB => dirA}/foo (100%)
Switched to branch 'B'
[B 8f7e5e2] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {dirA => dirB}/bar (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1e2e223 A
M	dirA/baz
CONFLICT (file location): dirB/bar added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to dirA/bar.
Automatic merge failed; fix conflicts and then commit the result.
ok 64 - 12k: Directory rename with sibling causes rename-to-self

expecting success of 6423.65 '12l (B into A): Rename into each other + add/add conflict': 
	test_setup_12l BintoA &&
	(
		cd 12l_BintoA &&

		git checkout -q A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 &&

		test_stdout_line_count = 5 git ls-files -s &&

		git rev-parse >actual \
			:0:sub3/file :0:sub3/newfile :0:sub3/sub2/other \
			:2:sub1/sub2/new_add_add_file \
			:3:sub1/sub2/new_add_add_file &&
		git rev-parse >expect \
			O:sub1/file  B:sub1/newfile O:sub2/other \
			A:sub2/new_add_add_file \
			B:sub1/sub2/new_add_add_file &&
		test_cmp expect actual &&

		git ls-files -o >actual &&
		test_write_lines actual expect >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12l_BintoA/.git/
[master (root-commit) 3d69f53] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 sub1/file
 create mode 100644 sub2/other
Switched to branch 'A'
[A e3180ab] A
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 sub2/new_add_add_file
 rename {sub1 => sub3}/file (100%)
Switched to branch 'B'
[B 4fbab5b] B
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 create mode 100644 sub1/newfile
 create mode 100644 sub1/sub2/new_add_add_file
 rename {sub2 => sub1/sub2}/other (100%)
Path updated: sub2/new_add_add_file added in HEAD inside a directory that was renamed in B^0; moving it to sub1/sub2/new_add_add_file.
Auto-merging sub1/sub2/new_add_add_file
CONFLICT (add/add): Merge conflict in sub1/sub2/new_add_add_file
Path updated: sub1/newfile added in B^0 inside a directory that was renamed in HEAD; moving it to sub3/newfile.
Path updated: sub2/other renamed to sub1/sub2/other in B^0, inside a directory that was renamed in HEAD; moving it to sub3/sub2/other.
Automatic merge failed; fix conflicts and then commit the result.
ok 65 - 12l (B into A): Rename into each other + add/add conflict

expecting success of 6423.66 '12l (A into B): Rename into each other + add/add conflict': 
	test_setup_12l AintoB &&
	(
		cd 12l_AintoB &&

		git checkout -q B^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive A^0 &&

		test_stdout_line_count = 5 git ls-files -s &&

		git rev-parse >actual \
			:0:sub3/file :0:sub3/newfile :0:sub3/sub2/other \
			:2:sub1/sub2/new_add_add_file \
			:3:sub1/sub2/new_add_add_file &&
		git rev-parse >expect \
			O:sub1/file  B:sub1/newfile O:sub2/other \
			B:sub1/sub2/new_add_add_file \
			A:sub2/new_add_add_file &&
		test_cmp expect actual &&

		git ls-files -o >actual &&
		test_write_lines actual expect >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12l_AintoB/.git/
[master (root-commit) 3d69f53] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 sub1/file
 create mode 100644 sub2/other
Switched to branch 'A'
[A e3180ab] A
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 sub2/new_add_add_file
 rename {sub1 => sub3}/file (100%)
Switched to branch 'B'
[B 4fbab5b] B
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 create mode 100644 sub1/newfile
 create mode 100644 sub1/sub2/new_add_add_file
 rename {sub2 => sub1/sub2}/other (100%)
Path updated: sub2/new_add_add_file added in A^0 inside a directory that was renamed in HEAD; moving it to sub1/sub2/new_add_add_file.
Auto-merging sub1/sub2/new_add_add_file
CONFLICT (add/add): Merge conflict in sub1/sub2/new_add_add_file
Path updated: sub1/newfile added in HEAD inside a directory that was renamed in A^0; moving it to sub3/newfile.
Path updated: sub2/other renamed to sub1/sub2/other in HEAD, inside a directory that was renamed in A^0; moving it to sub3/sub2/other.
Automatic merge failed; fix conflicts and then commit the result.
ok 66 - 12l (A into B): Rename into each other + add/add conflict

expecting success of 6423.67 '12m: Change parent of renamed-dir to symlink on other side': 
	test_setup_12m &&
	(
		cd 12m &&

		git checkout -q A^0 &&

		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&

		test_stdout_line_count = 3 git ls-files -s &&
		test_stdout_line_count = 2 ls -1 renamed-dir &&
		test_path_is_missing dir
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/12m/.git/
[master (root-commit) c5527ce] O
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/subdir/file
Switched to branch 'A'
[A 4ee9449] A
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {dir => renamed-dir}/subdir/file (100%)
Switched to branch 'B'
rm 'dir/subdir/file'
[B 7225d2a] B
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 120000 dir/subdir
 delete mode 100644 dir/subdir/file
CONFLICT (file location): dir/subdir added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to renamed-dir/subdir.
CONFLICT (rename/delete): dir/subdir/file renamed to renamed-dir/subdir/file in HEAD, but deleted in B^0.
CONFLICT (file/directory): directory in the way of renamed-dir/subdir from B^0; moving it to renamed-dir/subdir~B^0 instead.
Automatic merge failed; fix conflicts and then commit the result.
ok 67 - 12m: Change parent of renamed-dir to symlink on other side

expecting success of 6423.68 '13a(conflict): messages for newly added files': 
	test_setup_13a conflict &&
	(
		cd 13a_conflict &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep CONFLICT..file.location.*z/e/f.added.in.B^0.*y/e/f out &&
		test_i18ngrep CONFLICT..file.location.*z/d.added.in.B^0.*y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/[de]" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d &&
		test_path_is_missing z/e/f &&
		test_path_is_file    y/e/f
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13a_conflict/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B aa97264] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/d
 create mode 100644 z/e/f
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
CONFLICT (file location): z/e/f added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to y/e/f.
CONFLICT (file location): z/d added in B^0 inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to y/d.
y/d
y/e/f
ok 68 - 13a(conflict): messages for newly added files

expecting success of 6423.69 '13a(info): messages for newly added files': 
	test_setup_13a info &&
	(
		cd 13a_info &&

		git reset --hard &&
		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_i18ngrep Path.updated:.*z/e/f.added.in.B^0.*y/e/f out &&
		test_i18ngrep Path.updated:.*z/d.added.in.B^0.*y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/[de]" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d &&
		test_path_is_missing z/e/f &&
		test_path_is_file    y/e/f
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13a_info/.git/
[master (root-commit) 4e96174] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 4e9f86d] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B aa97264] B
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 z/d
 create mode 100644 z/e/f
HEAD is now at aa97264 B
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4e9f86d A
Path updated: z/e/f added in B^0 inside a directory that was renamed in HEAD; moving it to y/e/f.
Path updated: z/d added in B^0 inside a directory that was renamed in HEAD; moving it to y/d.
y/d
y/e/f
ok 69 - 13a(info): messages for newly added files

expecting success of 6423.70 '13b(conflict): messages for transitive rename with conflicted content': 
	test_setup_13b conflict &&
	(
		cd 13b_conflict &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep CONFLICT.*content.*Merge.conflict.in.y/d out &&
		test_i18ngrep CONFLICT..file.location.*x/d.renamed.to.z/d.*moved.to.y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/d" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13b_conflict/.git/
[master (root-commit) f84ec32] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A a2010ab] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B cd61ab0] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename {x => z}/d (75%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at a2010ab A
CONFLICT (content): Merge conflict in y/d
CONFLICT (file location): x/d renamed to z/d in B^0, inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to y/d.
y/d
y/d
y/d
ok 70 - 13b(conflict): messages for transitive rename with conflicted content

expecting success of 6423.71 '13b(info): messages for transitive rename with conflicted content': 
	test_setup_13b info &&
	(
		cd 13b_info &&

		git reset --hard &&
		git checkout A^0 &&

		test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_i18ngrep CONFLICT.*content.*Merge.conflict.in.y/d out &&
		test_i18ngrep Path.updated:.*x/d.renamed.to.z/d.in.B^0.*moving.it.to.y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/d" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13b_info/.git/
[master (root-commit) f84ec32] O
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+)
 create mode 100644 x/d
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A a2010ab] A
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
Switched to branch 'B'
[B cd61ab0] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename {x => z}/d (75%)
HEAD is now at cd61ab0 B
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at a2010ab A
CONFLICT (content): Merge conflict in y/d
Path updated: x/d renamed to z/d in B^0, inside a directory that was renamed in HEAD; moving it to y/d.
y/d
y/d
y/d
ok 71 - 13b(info): messages for transitive rename with conflicted content

expecting success of 6423.72 '13c(conflict): messages for rename/rename(1to1) via transitive rename': 
	test_setup_13c conflict &&
	(
		cd 13c_conflict &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep CONFLICT..file.location.*x/d.renamed.to.z/d.*moved.to.y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/d" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13c_conflict/.git/
[master (root-commit) 868129a] O
 Author: A U Thor <author@example.com>
 4 files changed, 13 insertions(+)
 create mode 100644 x/d
 create mode 100644 x/e
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 230cc6a] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {x => y}/d (100%)
Switched to branch 'B'
[B e9512b7] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 230cc6a A
CONFLICT (file location): x/d renamed to z/d in B^0, inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to y/d.
y/d
y/d
y/d
ok 72 - 13c(conflict): messages for rename/rename(1to1) via transitive rename

expecting success of 6423.73 '13c(info): messages for rename/rename(1to1) via transitive rename': 
	test_setup_13c info &&
	(
		cd 13c_info &&

		git reset --hard &&
		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_i18ngrep Path.updated:.*x/d.renamed.to.z/d.in.B^0.*moving.it.to.y/d out &&

		git ls-files >paths &&
		! grep z/ paths &&
		grep "y/d" paths &&

		test_path_is_missing z/d &&
		test_path_is_file    y/d
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13c_info/.git/
[master (root-commit) 868129a] O
 Author: A U Thor <author@example.com>
 4 files changed, 13 insertions(+)
 create mode 100644 x/d
 create mode 100644 x/e
 create mode 100644 z/b
 create mode 100644 z/c
Switched to branch 'A'
[A 230cc6a] A
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {z => y}/b (100%)
 rename {z => y}/c (100%)
 rename {x => y}/d (100%)
Switched to branch 'B'
[B e9512b7] B
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {x => z}/d (100%)
HEAD is now at e9512b7 B
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 230cc6a A
Path updated: x/d renamed to z/d in B^0, inside a directory that was renamed in HEAD; moving it to y/d.
y/d
ok 73 - 13c(info): messages for rename/rename(1to1) via transitive rename

expecting success of 6423.74 '13d(conflict): messages for rename/rename(1to1) via dual transitive rename': 
	test_setup_13d conflict &&
	(
		cd 13d_conflict &&

		git checkout A^0 &&

		test_must_fail git merge -s recursive B^0 >out 2>err &&

		test_i18ngrep CONFLICT..file.location.*a/y.renamed.to.b/y.*moved.to.d/y out &&
		test_i18ngrep CONFLICT..file.location.*a/y.renamed.to.c/y.*moved.to.d/y out &&

		git ls-files >paths &&
		! grep b/ paths &&
		! grep c/ paths &&
		grep "d/y" paths &&

		test_path_is_missing b/y &&
		test_path_is_missing c/y &&
		test_path_is_file    d/y
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13d_conflict/.git/
[master (root-commit) c14d00a] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 a/y
 create mode 100644 a/z
 create mode 100644 b/x
 create mode 100644 c/w
Switched to branch 'A'
[A e246998] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {a => b}/y (100%)
 rename {c => d}/w (100%)
Switched to branch 'B'
[B 0624e26] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {a => c}/y (100%)
 rename {b => d}/x (100%)
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e246998 A
CONFLICT (file location): a/y renamed to b/y in HEAD, inside a directory that was renamed in B^0, suggesting it should perhaps be moved to d/y.
CONFLICT (file location): a/y renamed to c/y in B^0, inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to d/y.
d/y
d/y
d/y
ok 74 - 13d(conflict): messages for rename/rename(1to1) via dual transitive rename

expecting success of 6423.75 '13d(info): messages for rename/rename(1to1) via dual transitive rename': 
	test_setup_13d info &&
	(
		cd 13d_info &&

		git reset --hard &&
		git checkout A^0 &&

		git -c merge.directoryRenames=true merge -s recursive B^0 >out 2>err &&

		test_i18ngrep Path.updated.*a/y.renamed.to.b/y.*moving.it.to.d/y out &&
		test_i18ngrep Path.updated.*a/y.renamed.to.c/y.*moving.it.to.d/y out &&

		git ls-files >paths &&
		! grep b/ paths &&
		! grep c/ paths &&
		grep "d/y" paths &&

		test_path_is_missing b/y &&
		test_path_is_missing c/y &&
		test_path_is_file    d/y
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13d_info/.git/
[master (root-commit) c14d00a] O
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 a/y
 create mode 100644 a/z
 create mode 100644 b/x
 create mode 100644 c/w
Switched to branch 'A'
[A e246998] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {a => b}/y (100%)
 rename {c => d}/w (100%)
Switched to branch 'B'
[B 0624e26] B
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {a => c}/y (100%)
 rename {b => d}/x (100%)
HEAD is now at 0624e26 B
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e246998 A
Path updated: a/y renamed to b/y in HEAD, inside a directory that was renamed in B^0; moving it to d/y.
Path updated: a/y renamed to c/y in B^0, inside a directory that was renamed in HEAD; moving it to d/y.
d/y
ok 75 - 13d(info): messages for rename/rename(1to1) via dual transitive rename

expecting success of 6423.76 '13e: directory rename detection in recursive case': 
	test_setup_13e &&
	(
		cd 13e &&

		git checkout --quiet D^0 &&

		git -c merge.directoryRenames=conflict merge -s recursive C^0 >out 2>err &&

		test_i18ngrep ! CONFLICT out &&
		test_i18ngrep ! BUG: err &&
		test_i18ngrep ! core.dumped err &&
		test_must_be_empty err &&

		git ls-files >paths &&
		! grep a/x paths &&
		grep b/x paths
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6423-merge-rename-directories/13e/.git/
[master (root-commit) 3de9c0f] O
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a/y
 create mode 100644 a/z
Switched to branch 'A'
[A 8654583] A
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {a => b}/y (100%)
 rename {a => b}/z (100%)
Switched to branch 'B'
[B 4f343f5] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/x
Switched to branch 'C'
CONFLICT (file location): a/x added in B inside a directory that was renamed in HEAD, suggesting it should perhaps be moved to b/x.
Automatic merge failed; fix conflicts and then commit the result.
[C 95c9ae8] C
 Author: A U Thor <author@example.com>
Switched to branch 'D'
CONFLICT (file location): a/x added in HEAD inside a directory that was renamed in A, suggesting it should perhaps be moved to b/x.
Automatic merge failed; fix conflicts and then commit the result.
[D e07996f] D
 Author: A U Thor <author@example.com>
b/x
ok 76 - 13e: directory rename detection in recursive case

# still have 2 known breakage(s)
# passed all remaining 74 test(s)
1..76
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7001-mv.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
expecting success of 7001.1 'mv -f refreshes updated index entry': 
	echo test >bar &&
	git add bar &&
	git commit -m test &&

	echo foo >foo &&
	git add foo &&

	# Wait one second to ensure ctime of rename will differ from original
	# file creation ctime.
	sleep 1 &&
	git mv -f foo bar &&
	git reset --merge HEAD &&

	# Verify the index has been reset
	git diff-files >out &&
	test_must_be_empty out

[master (root-commit) dd702a3] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
ok 1 - mv -f refreshes updated index entry

expecting success of 7001.2 'prepare reference tree': 
	mkdir path0 path1 &&
	COPYING_test_data >path0/COPYING &&
	git add path0/COPYING &&
	git commit -m add -a

[master a081f64] add
 Author: A U Thor <author@example.com>
 1 file changed, 18 insertions(+)
 create mode 100644 path0/COPYING
ok 2 - prepare reference tree

expecting success of 7001.3 'moving the file out of subdirectory': 
	git -C path0 mv COPYING ../path1/COPYING

ok 3 - moving the file out of subdirectory

expecting success of 7001.4 'commiting the change': 
	git commit -m move-out -a

[master e61e243] move-out
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {path0 => path1}/COPYING (100%)
ok 4 - commiting the change

expecting success of 7001.5 'checking the commit': 
	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
	grep "^R100..*path0/COPYING..*path1/COPYING" actual

R100	path0/COPYING	path1/COPYING
ok 5 - checking the commit

expecting success of 7001.6 'moving the file back into subdirectory': 
	git -C path0 mv ../path1/COPYING COPYING

ok 6 - moving the file back into subdirectory

expecting success of 7001.7 'commiting the change': 
	git commit -m move-in -a

[master 965f93d] move-in
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {path1 => path0}/COPYING (100%)
ok 7 - commiting the change

expecting success of 7001.8 'checking the commit': 
	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
	grep "^R100..*path1/COPYING..*path0/COPYING" actual

R100	path1/COPYING	path0/COPYING
ok 8 - checking the commit

expecting success of 7001.9 'mv --dry-run does not move file': 
	git mv -n path0/COPYING MOVED &&
	test_path_is_file path0/COPYING &&
	test_path_is_missing MOVED

Checking rename of 'path0/COPYING' to 'MOVED'
Renaming path0/COPYING to MOVED
ok 9 - mv --dry-run does not move file

expecting success of 7001.10 'checking -k on non-existing file': 
	git mv -k idontexist path0

ok 10 - checking -k on non-existing file

expecting success of 7001.11 'checking -k on untracked file': 
	>untracked1 &&
	git mv -k untracked1 path0 &&
	test_path_is_file untracked1 &&
	test_path_is_missing path0/untracked1

ok 11 - checking -k on untracked file

expecting success of 7001.12 'checking -k on multiple untracked files': 
	>untracked2 &&
	git mv -k untracked1 untracked2 path0 &&
	test_path_is_file untracked1 &&
	test_path_is_file untracked2 &&
	test_path_is_missing path0/untracked1 &&
	test_path_is_missing path0/untracked2

ok 12 - checking -k on multiple untracked files

expecting success of 7001.13 'checking -f on untracked file with existing target': 
	>path0/untracked1 &&
	test_must_fail git mv -f untracked1 path0 &&
	test_path_is_missing .git/index.lock &&
	test_path_is_file untracked1 &&
	test_path_is_file path0/untracked1

fatal: not under version control, source=untracked1, destination=path0/untracked1
ok 13 - checking -f on untracked file with existing target

expecting success of 7001.14 'moving to absent target with trailing slash': 
	test_must_fail git mv path0/COPYING no-such-dir/ &&
	test_must_fail git mv path0/COPYING no-such-dir// &&
	git mv path0/ no-such-dir/ &&
	test_path_is_dir no-such-dir

fatal: destination directory does not exist, source=path0/COPYING, destination=no-such-dir/
fatal: destination directory does not exist, source=path0/COPYING, destination=no-such-dir/
ok 14 - moving to absent target with trailing slash

expecting success of 7001.15 'clean up': 
	git reset --hard

HEAD is now at 965f93d move-in
ok 15 - clean up

expecting success of 7001.16 'moving to existing untracked target with trailing slash': 
	mkdir path1 &&
	git mv path0/ path1/ &&
	test_path_is_dir path1/path0/

ok 16 - moving to existing untracked target with trailing slash

expecting success of 7001.17 'moving to existing tracked target with trailing slash': 
	mkdir path2 &&
	>path2/file && git add path2/file &&
	git mv path1/path0/ path2/ &&
	test_path_is_dir path2/path0/

ok 17 - moving to existing tracked target with trailing slash

expecting success of 7001.18 'clean up': 
	git reset --hard

HEAD is now at 965f93d move-in
ok 18 - clean up

expecting success of 7001.19 'adding another file': 
	COPYING_test_data | tr A-Za-z N-ZA-Mn-za-m >path0/README &&
	git add path0/README &&
	git commit -m add2 -a

[master 0c7076e] add2
 Author: A U Thor <author@example.com>
 1 file changed, 18 insertions(+)
 create mode 100644 path0/README
ok 19 - adding another file

expecting success of 7001.20 'moving whole subdirectory': 
	git mv path0 path2

ok 20 - moving whole subdirectory

expecting success of 7001.21 'commiting the change': 
	git commit -m dir-move -a

[master d877af0] dir-move
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename {path0 => path2}/COPYING (100%)
 rename {path0 => path2}/README (100%)
ok 21 - commiting the change

expecting success of 7001.22 'checking the commit': 
	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
	grep "^R100..*path0/COPYING..*path2/COPYING" actual &&
	grep "^R100..*path0/README..*path2/README" actual

R100	path0/COPYING	path2/COPYING
R100	path0/README	path2/README
ok 22 - checking the commit

expecting success of 7001.23 'succeed when source is a prefix of destination': 
	git mv path2/COPYING path2/COPYING-renamed

ok 23 - succeed when source is a prefix of destination

expecting success of 7001.24 'moving whole subdirectory into subdirectory': 
	git mv path2 path1

ok 24 - moving whole subdirectory into subdirectory

expecting success of 7001.25 'commiting the change': 
	git commit -m dir-move -a

[master a4d744b] dir-move
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename path2/COPYING => path1/path2/COPYING-renamed (100%)
 rename {path2 => path1/path2}/README (100%)
ok 25 - commiting the change

expecting success of 7001.26 'checking the commit': 
	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
	grep "^R100..*path2/COPYING..*path1/path2/COPYING" actual &&
	grep "^R100..*path2/README..*path1/path2/README" actual

R100	path2/COPYING	path1/path2/COPYING-renamed
R100	path2/README	path1/path2/README
ok 26 - checking the commit

expecting success of 7001.27 'do not move directory over existing directory': 
	mkdir path0 &&
	mkdir path0/path2 &&
	test_must_fail git mv path2 path0

fatal: bad source, source=path2, destination=path0/path2
ok 27 - do not move directory over existing directory

expecting success of 7001.28 'move into "."': 
	git mv path1/path2/ .

ok 28 - move into "."

expecting success of 7001.29 'Michael Cassar's test case': 
	rm -fr .git papers partA &&
	git init &&
	mkdir -p papers/unsorted papers/all-papers partA &&
	echo a >papers/unsorted/Thesis.pdf &&
	echo b >partA/outline.txt &&
	echo c >papers/unsorted/_another &&
	git add papers partA &&
	T1=$(git write-tree) &&

	git mv papers/unsorted/Thesis.pdf papers/all-papers/moo-blah.pdf &&

	T=$(git write-tree) &&
	git ls-tree -r $T | verbose grep partA/outline.txt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
100644 blob 61780798228d17af2d34fce4cfbdf35556832472	partA/outline.txt
ok 29 - Michael Cassar's test case

expecting success of 7001.30 'Sergey Vlasov's test case': 
	rm -fr .git &&
	git init &&
	mkdir ab &&
	date >ab.c &&
	date >ab/d &&
	git add ab.c ab &&
	git commit -m "initial" &&
	git mv ab a

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
[master (root-commit) 26004db] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 ab.c
 create mode 100644 ab/d
ok 30 - Sergey Vlasov's test case

expecting success of 7001.31 'absolute pathname': 
	(
		rm -fr mine &&
		mkdir mine &&
		cd mine &&
		test_create_repo one &&
		cd one &&
		mkdir sub &&
		>sub/file &&
		git add sub/file &&

		git mv sub "$(pwd)/in" &&
		test_path_is_missing sub &&
		test_path_is_dir in &&
		git ls-files --error-unmatch in/file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/mine/one/.git/
in/file
ok 31 - absolute pathname

expecting success of 7001.32 'absolute pathname outside should fail': 
	(
		rm -fr mine &&
		mkdir mine &&
		cd mine &&
		out=$(pwd) &&
		test_create_repo one &&
		cd one &&
		mkdir sub &&
		>sub/file &&
		git add sub/file &&

		test_must_fail git mv sub "$out/out" &&
		test_path_is_dir sub &&
		test_path_is_missing ../in &&
		git ls-files --error-unmatch sub/file
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/mine/one/.git/
fatal: '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/mine/out' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/mine/one'
sub/file
ok 32 - absolute pathname outside should fail

expecting success of 7001.33 'git mv to move multiple sources into a directory': 
	rm -fr .git && git init &&
	mkdir dir other &&
	>dir/a.txt &&
	>dir/b.txt &&
	git add dir/?.txt &&
	git mv dir/a.txt dir/b.txt other &&
	git ls-files >actual &&
	cat >expect <<-\EOF &&
	other/a.txt
	other/b.txt
	EOF
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
ok 33 - git mv to move multiple sources into a directory

expecting success of 7001.34 'git mv should not change sha1 of moved cache entry': 
	rm -fr .git &&
	git init &&
	echo 1 >dirty &&
	git add dirty &&
	entry="$(git ls-files --stage dirty | cut -f 1)" &&
	git mv dirty dirty2 &&
	test "$entry" = "$(git ls-files --stage dirty2 | cut -f 1)" &&
	echo 2 >dirty2 &&
	git mv dirty2 dirty &&
	test "$entry" = "$(git ls-files --stage dirty | cut -f 1)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
ok 34 - git mv should not change sha1 of moved cache entry

expecting success of 7001.35 'git mv error on conflicted file': 
	rm -fr .git &&
	git init &&
	>conflict &&
	test_when_finished "rm -f conflict" &&
	cfhash=$(git hash-object -w conflict) &&
	q_to_tab <<-EOF | git update-index --index-info &&
	0 $cfhash 0Qconflict
	100644 $cfhash 1Qconflict
	EOF

	test_must_fail git mv conflict newname 2>actual &&
	test_i18ngrep "conflicted" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
fatal: conflicted, source=conflict, destination=newname
ok 35 - git mv error on conflicted file

expecting success of 7001.36 'git mv should overwrite symlink to a file': 
	rm -fr .git &&
	git init &&
	echo 1 >moved &&
	test_ln_s_add moved symlink &&
	git add moved &&
	test_must_fail git mv moved symlink &&
	git mv -f moved symlink &&
	test_path_is_missing moved &&
	test_path_is_file symlink &&
	test "$(cat symlink)" = 1 &&
	git update-index --refresh &&
	git diff-files --quiet

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
fatal: destination exists, source=moved, destination=symlink
ok 36 - git mv should overwrite symlink to a file

expecting success of 7001.37 'git mv should overwrite file with a symlink': 
	rm -fr .git &&
	git init &&
	echo 1 >moved &&
	test_ln_s_add moved symlink &&
	git add moved &&
	test_must_fail git mv symlink moved &&
	git mv -f symlink moved &&
	test_path_is_missing symlink &&
	git update-index --refresh &&
	git diff-files --quiet

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/.git/
fatal: destination exists, source=symlink, destination=moved
ok 37 - git mv should overwrite file with a symlink

expecting success of 7001.38 'check moved symlink': 
	test_path_is_symlink moved

ok 38 - check moved symlink

expecting success of 7001.39 'setup submodule': 
	test_config_global protocol.file.allow always &&
	git commit -m initial &&
	git reset --hard &&
	git submodule add ./. sub &&
	echo content >file &&
	git add file &&
	git commit -m "added sub and file" &&
	mkdir -p deep/directory/hierarchy &&
	git submodule add ./. deep/directory/hierarchy/sub &&
	git commit -m "added another submodule" &&
	git branch submodule

[master (root-commit) 335301e] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 120000 moved
HEAD is now at 335301e initial
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/sub'...
done.
[master 7b21d91] added sub and file
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 file
 create mode 160000 sub
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/deep/directory/hierarchy/sub'...
done.
[master d0b8d3f] added another submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 deep/directory/hierarchy/sub
ok 39 - setup submodule

expecting success of 7001.40 'git mv cannot move a submodule in a file': 
	test_must_fail git mv sub file

fatal: cannot move directory over file, source=sub, destination=file
ok 40 - git mv cannot move a submodule in a file

expecting success of 7001.41 'git mv moves a submodule with a .git directory and no .gitmodules': 
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	git rm .gitmodules &&
	(
		cd sub &&
		rm -f .git &&
		cp -R -P -p ../.git/modules/sub .git &&
		GIT_WORK_TREE=. git config --unset core.worktree
	) &&
	mkdir mod &&
	git mv sub mod/sub &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	git update-index --refresh &&
	git diff-files --quiet

rm '.gitmodules'
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
ok 41 - git mv moves a submodule with a .git directory and no .gitmodules

expecting success of 7001.42 'git mv moves a submodule with a .git directory and .gitmodules': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	(
		cd sub &&
		rm -f .git &&
		cp -R -P -p ../.git/modules/sub .git &&
		GIT_WORK_TREE=. git config --unset core.worktree
	) &&
	mkdir mod &&
	git mv sub mod/sub &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	echo mod/sub >expected &&
	git config -f .gitmodules submodule.sub.path >actual &&
	test_cmp expected actual &&
	git update-index --refresh &&
	git diff-files --quiet

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
HEAD detached at 335301e
nothing to commit, working tree clean
ok 42 - git mv moves a submodule with a .git directory and .gitmodules

expecting success of 7001.43 'git mv moves a submodule with gitfile': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	mkdir mod &&
	git -C mod mv ../sub/ . &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	echo mod/sub >expected &&
	git config -f .gitmodules submodule.sub.path >actual &&
	test_cmp expected actual &&
	git update-index --refresh &&
	git diff-files --quiet

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
HEAD detached at 335301e
nothing to commit, working tree clean
ok 43 - git mv moves a submodule with gitfile

expecting success of 7001.44 'mv does not complain when no .gitmodules file is found': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	git rm .gitmodules &&
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	mkdir mod &&
	git mv sub mod/sub 2>actual.err &&
	test_must_be_empty actual.err &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	git update-index --refresh &&
	git diff-files --quiet

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
rm '.gitmodules'
HEAD detached at 335301e
nothing to commit, working tree clean
ok 44 - mv does not complain when no .gitmodules file is found

expecting success of 7001.45 'mv will error out on a modified .gitmodules file unless staged': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	git config -f .gitmodules foo.bar true &&
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	mkdir mod &&
	test_must_fail git mv sub mod/sub 2>actual.err &&
	test_file_not_empty actual.err &&
	test_path_exists sub &&
	git diff-files --quiet -- sub &&
	git add .gitmodules &&
	git mv sub mod/sub 2>actual.err &&
	test_must_be_empty actual.err &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	git update-index --refresh &&
	git diff-files --quiet

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
HEAD detached at 335301e
nothing to commit, working tree clean
ok 45 - mv will error out on a modified .gitmodules file unless staged

expecting success of 7001.46 'mv issues a warning when section is not found in .gitmodules': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	git config -f .gitmodules --remove-section submodule.sub &&
	git add .gitmodules &&
	entry="$(git ls-files --stage sub | cut -f 1)" &&
	echo "warning: Could not find section in .gitmodules where path=sub" >expect.err &&
	mkdir mod &&
	git mv sub mod/sub 2>actual.err &&
	test_cmp expect.err actual.err &&
	test_path_is_missing sub &&
	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
	git -C mod/sub status &&
	git update-index --refresh &&
	git diff-files --quiet

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
HEAD detached at 335301e
nothing to commit, working tree clean
ok 46 - mv issues a warning when section is not found in .gitmodules

expecting success of 7001.47 'mv --dry-run does not touch the submodule or .gitmodules': 
	rm -rf mod &&
	git reset --hard &&
	git submodule update &&
	mkdir mod &&
	git mv -n sub mod/sub 2>actual.err &&
	test_path_is_file sub/.git &&
	git diff-index --exit-code HEAD &&
	git update-index --refresh &&
	git diff-files --quiet -- sub .gitmodules

HEAD is now at d0b8d3f added another submodule
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
Checking rename of 'sub' to 'mod/sub'
Renaming sub to mod/sub
ok 47 - mv --dry-run does not touch the submodule or .gitmodules

expecting success of 7001.48 'checking out a commit before submodule moved needs manual updates': 
	git mv sub sub2 &&
	git commit -m "moved sub to sub2" &&
	git checkout -q HEAD^ 2>actual &&
	test_i18ngrep "^warning: unable to rmdir 'sub2':" actual &&
	git status -s sub2 >actual &&
	echo "?? sub2/" >expected &&
	test_cmp expected actual &&
	test_path_is_missing sub/.git &&
	test_path_is_file sub2/.git &&
	git submodule update &&
	test_path_is_file sub/.git &&
	rm -rf sub2 &&
	git diff-index --exit-code HEAD &&
	git update-index --refresh &&
	git diff-files --quiet -- sub .gitmodules &&
	git status -s sub2 >actual &&
	test_must_be_empty actual

[master 6dd6220] moved sub to sub2
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename sub => sub2 (100%)
warning: unable to rmdir 'sub2': Directory not empty
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
ok 48 - checking out a commit before submodule moved needs manual updates

expecting success of 7001.49 'mv -k does not accidentally destroy submodules': 
	git checkout submodule &&
	mkdir dummy dest &&
	git mv -k dummy sub dest &&
	git status --porcelain >actual &&
	grep "^R  sub -> dest/sub" actual &&
	git reset --hard &&
	git checkout .

Switched to branch 'submodule'
R  sub -> dest/sub
warning: unable to rmdir 'dest/sub': Directory not empty
HEAD is now at d0b8d3f added another submodule
Updated 0 paths from the index
ok 49 - mv -k does not accidentally destroy submodules

expecting success of 7001.50 'moving a submodule in nested directories': 
	(
		cd deep &&
		git mv directory ../ &&
		# git status would fail if the update of linking git dir to
		# work dir of the submodule failed.
		git status &&
		git config -f ../.gitmodules submodule.deep/directory/hierarchy/sub.path >../actual &&
		echo "directory/hierarchy/sub" >../expect
	) &&
	test_cmp expect actual

On branch submodule
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   ../.gitmodules
	renamed:    directory/hierarchy/sub -> ../directory/hierarchy/sub

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	../.gitconfig
	../a/
	../ab.c
	../actual
	../actual.err
	../bar
	../dest/
	../expect
	../expect.err
	../expected
	../mine/
	../other/
	../out

ok 50 - moving a submodule in nested directories

expecting success of 7001.51 'moving nested submodules': 
	test_config_global protocol.file.allow always &&
	git commit -am "cleanup commit" &&
	mkdir sub_nested_nested &&
	(
		cd sub_nested_nested &&
		>nested_level2 &&
		git init &&
		git add . &&
		git commit -m "nested level 2"
	) &&
	mkdir sub_nested &&
	(
		cd sub_nested &&
		>nested_level1 &&
		git init &&
		git add . &&
		git commit -m "nested level 1" &&
		git submodule add ../sub_nested_nested &&
		git commit -m "add nested level 2"
	) &&
	git submodule add ./sub_nested nested_move &&
	git commit -m "add nested_move" &&
	git submodule update --init --recursive &&
	git mv nested_move sub_nested_moved &&
	git status

[submodule 61d0f20] cleanup commit
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename {deep/directory => directory}/hierarchy/sub (100%)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/sub_nested_nested/.git/
[master (root-commit) 3d81f5f] nested level 2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 nested_level2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7001-mv/sub_nested/.git/
[master (root-commit) 8e39d83] nested level 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 nested_level1
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/sub_nested/sub_nested_nested'...
done.
[master 4ba474d] add nested level 2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub_nested_nested
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/nested_move'...
done.
[submodule 4d404d9] add nested_move
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 nested_move
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/./.) registered for path 'directory/hierarchy/sub/sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/directory/hierarchy/sub/sub'...
done.
Submodule path 'directory/hierarchy/sub/sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
Submodule 'sub_nested_nested' (/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/sub_nested_nested) registered for path 'nested_move/sub_nested_nested'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7001-mv/nested_move/sub_nested_nested'...
done.
Submodule path 'nested_move/sub_nested_nested': checked out '3d81f5fbdb0173269895972bd0ca2f0372e7edc5'
Submodule path 'sub': checked out '335301e919c46841d94df945a64ff8626867ab66'
On branch submodule
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   .gitmodules
	renamed:    nested_move -> sub_nested_moved

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitconfig
	a/
	ab.c
	actual
	actual.err
	bar
	dest/
	expect
	expect.err
	expected
	mine/
	other/
	out
	sub_nested/
	sub_nested_nested/

ok 51 - moving nested submodules

# passed all 51 test(s)
1..51
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7002-mv-sparse-checkout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7002-mv-sparse-checkout/.git/
expecting success of 7002.1 'setup': 
	mkdir -p sub/dir sub/dir2 &&
	touch a b c sub/d sub/dir/e sub/dir2/e &&
	git add -A &&
	git commit -m files &&

	cat >sparse_error_header <<-EOF &&
	The following paths and/or pathspecs matched paths that exist
	outside of your sparse-checkout definition, so will not be
	updated in the index:
	EOF

	cat >sparse_hint <<-EOF &&
	hint: If you intend to update such entries, try one of the following:
	hint: * Use the --sparse option.
	hint: * Disable or modify the sparsity rules.
	hint: Disable this message with "git config advice.updateSparsePath false"
	EOF

	cat >dirty_error_header <<-EOF &&
	The following paths have been moved outside the
	sparse-checkout definition but are not sparse due to local
	modifications.
	EOF

	cat >dirty_hint <<-EOF
	hint: To correct the sparsity of these paths, do the following:
	hint: * Use "git add --sparse <paths>" to update the index
	hint: * Use "git sparse-checkout reapply" to apply the sparsity rules
	hint: Disable this message with "git config advice.updateSparsePath false"
	EOF

[master (root-commit) 127a813] files
 Author: A U Thor <author@example.com>
 6 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 sub/d
 create mode 100644 sub/dir/e
 create mode 100644 sub/dir2/e
ok 1 - setup

expecting success of 7002.2 'mv refuses to move sparse-to-sparse': 
	test_when_finished rm -f e &&
	git reset --hard &&
	git sparse-checkout set --no-cone a &&
	touch b &&
	test_must_fail git mv b e 2>stderr &&
	cat sparse_error_header >expect &&
	echo b >>expect &&
	echo e >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse b e 2>stderr &&
	test_must_be_empty stderr

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 2 - mv refuses to move sparse-to-sparse

expecting success of 7002.3 'mv refuses to move sparse-to-sparse, ignores failure': 
	test_when_finished rm -f b c e &&
	git reset --hard &&
	git sparse-checkout set a &&

	# tracked-to-untracked
	touch b &&
	git mv -k b e 2>stderr &&
	test_path_exists b &&
	test_path_is_missing e &&
	cat sparse_error_header >expect &&
	echo b >>expect &&
	echo e >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse b e 2>stderr &&
	test_must_be_empty stderr &&
	test_path_is_missing b &&
	test_path_exists e &&

	# tracked-to-tracked
	git reset --hard &&
	touch b &&
	git mv -k b c 2>stderr &&
	test_path_exists b &&
	test_path_is_missing c &&
	cat sparse_error_header >expect &&
	echo b >>expect &&
	echo c >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse b c 2>stderr &&
	test_must_be_empty stderr &&
	test_path_is_missing b &&
	test_path_exists c

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
error: Path 'e' not uptodate; will not remove from working tree.
HEAD is now at 127a813 files
ok 3 - mv refuses to move sparse-to-sparse, ignores failure

expecting success of 7002.4 'mv refuses to move non-sparse-to-sparse': 
	test_when_finished rm -f b c e &&
	git reset --hard &&
	git sparse-checkout set a &&

	# tracked-to-untracked
	test_must_fail git mv a e 2>stderr &&
	test_path_exists a &&
	test_path_is_missing e &&
	cat sparse_error_header >expect &&
	echo e >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse a e 2>stderr &&
	test_must_be_empty stderr &&
	test_path_is_missing a &&
	test_path_exists e &&

	# tracked-to-tracked
	rm e &&
	git reset --hard &&
	test_must_fail git mv a c 2>stderr &&
	test_path_exists a &&
	test_path_is_missing c &&
	cat sparse_error_header >expect &&
	echo c >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse a c 2>stderr &&
	test_must_be_empty stderr &&
	test_path_is_missing a &&
	test_path_exists c

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
HEAD is now at 127a813 files
ok 4 - mv refuses to move non-sparse-to-sparse

expecting success of 7002.5 'mv refuses to move sparse-to-non-sparse': 
	test_when_finished rm -f b c e &&
	git reset --hard &&
	git sparse-checkout set a e &&

	# tracked-to-untracked
	touch b &&
	test_must_fail git mv b e 2>stderr &&
	cat sparse_error_header >expect &&
	echo b >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse b e 2>stderr &&
	test_must_be_empty stderr

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 5 - mv refuses to move sparse-to-non-sparse

expecting success of 7002.6 'recursive mv refuses to move (possible) sparse': 
	test_when_finished rm -rf b c e sub2 &&
	git reset --hard &&
	# Without cone mode, "sub" and "sub2" do not match
	git sparse-checkout set sub/dir sub2/dir &&

	# Add contained contents to ensure we avoid non-existence errors
	mkdir sub/dir2 &&
	touch sub/d sub/dir2/e &&

	test_must_fail git mv sub sub2 2>stderr &&
	cat sparse_error_header >expect &&
	cat >>expect <<-\EOF &&
	sub/d
	sub2/d
	sub/dir2/e
	sub2/dir2/e
	EOF
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse sub sub2 2>stderr &&
	test_must_be_empty stderr &&
	git commit -m "moved sub to sub2" &&
	git rev-parse HEAD~1:sub >expect &&
	git rev-parse HEAD:sub2 >actual &&
	test_cmp expect actual &&
	git reset --hard HEAD~1

HEAD is now at 127a813 files
[master 361f042] moved sub to sub2
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {sub => sub2}/d (100%)
 rename {sub => sub2}/dir/e (100%)
 rename {sub => sub2}/dir2/e (100%)
error: Path 'sub2/d' not uptodate; will not remove from working tree.
error: Path 'sub2/dir2/e' not uptodate; will not remove from working tree.
HEAD is now at 127a813 files
ok 6 - recursive mv refuses to move (possible) sparse

expecting success of 7002.7 'recursive mv refuses to move sparse': 
	git reset --hard &&
	# Use cone mode so "sub/" matches the sparse-checkout patterns
	git sparse-checkout init --cone &&
	git sparse-checkout set sub/dir sub2/dir &&

	# Add contained contents to ensure we avoid non-existence errors
	mkdir sub/dir2 &&
	touch sub/dir2/e &&

	test_must_fail git mv sub sub2 2>stderr &&
	cat sparse_error_header >expect &&
	cat >>expect <<-\EOF &&
	sub/dir2/e
	sub2/dir2/e
	EOF
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&
	git mv --sparse sub sub2 2>stderr &&
	test_must_be_empty stderr &&
	git commit -m "moved sub to sub2" &&
	git rev-parse HEAD~1:sub >expect &&
	git rev-parse HEAD:sub2 >actual &&
	test_cmp expect actual &&
	git reset --hard HEAD~1

HEAD is now at 127a813 files
warning: unrecognized pattern: 'sub/dir'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'sub/dir'
warning: disabling cone pattern matching
[master 361f042] moved sub to sub2
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 rename {sub => sub2}/d (100%)
 rename {sub => sub2}/dir/e (100%)
 rename {sub => sub2}/dir2/e (100%)
error: Path 'sub2/dir2/e' not uptodate; will not remove from working tree.
HEAD is now at 127a813 files
ok 7 - recursive mv refuses to move sparse

expecting success of 7002.8 'can move files to non-sparse dir': 
	git reset --hard &&
	git sparse-checkout init --no-cone &&
	git sparse-checkout set a b c w !/x y/ &&
	mkdir -p w x/y &&

	git mv a w/new-a 2>stderr &&
	git mv b x/y/new-b 2>stderr &&
	test_must_be_empty stderr

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
warning: pass a leading slash before paths such as 'b' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
warning: pass a leading slash before paths such as 'c' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
ok 8 - can move files to non-sparse dir

expecting success of 7002.9 'refuse to move file to non-skip-worktree sparse path': 
	test_when_finished "cleanup_sparse_checkout" &&
	git reset --hard &&
	git sparse-checkout init --no-cone &&
	git sparse-checkout set a !/x y/ !x/y/z &&
	mkdir -p x/y/z &&

	test_must_fail git mv a x/y/z/new-a 2>stderr &&
	echo x/y/z/new-a | cat sparse_error_header - sparse_hint >expect &&
	test_cmp expect stderr

HEAD is now at 127a813 files
warning: pass a leading slash before paths such as 'a' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
HEAD is now at 127a813 files
ok 9 - refuse to move file to non-skip-worktree sparse path

expecting success of 7002.10 'refuse to move out-of-cone directory without --sparse': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&

	test_must_fail git mv folder1 sub 2>stderr &&
	cat sparse_error_header >expect &&
	echo folder1/file1 >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr

HEAD is now at 127a813 files
ok 10 - refuse to move out-of-cone directory without --sparse

expecting success of 7002.11 'can move out-of-cone directory with --sparse': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&

	git mv --sparse folder1 sub 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_dir sub/folder1 &&
	test_path_is_file sub/folder1/file1

HEAD is now at 127a813 files
ok 11 - can move out-of-cone directory with --sparse

expecting success of 7002.12 'refuse to move out-of-cone file without --sparse': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&

	test_must_fail git mv folder1/file1 sub 2>stderr &&
	cat sparse_error_header >expect &&
	echo folder1/file1 >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr

HEAD is now at 127a813 files
ok 12 - refuse to move out-of-cone file without --sparse

expecting success of 7002.13 'can move out-of-cone file with --sparse': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&

	git mv --sparse folder1/file1 sub 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_file sub/file1

HEAD is now at 127a813 files
ok 13 - can move out-of-cone file with --sparse

expecting success of 7002.14 'refuse to move sparse file to existing destination': 
	test_when_finished "cleanup_sparse_checkout" &&
	mkdir folder1 &&
	touch folder1/file1 &&
	touch sub/file1 &&
	git add folder1 sub/file1 &&
	git sparse-checkout set --cone sub &&

	test_must_fail git mv --sparse folder1/file1 sub 2>stderr &&
	echo "fatal: destination exists, source=folder1/file1, destination=sub/file1" >expect &&
	test_cmp expect stderr

HEAD is now at 127a813 files
ok 14 - refuse to move sparse file to existing destination

expecting success of 7002.15 'move sparse file to existing destination with --force and --sparse': 
	test_when_finished "cleanup_sparse_checkout" &&
	mkdir folder1 &&
	touch folder1/file1 &&
	touch sub/file1 &&
	echo "overwrite" >folder1/file1 &&
	git add folder1 sub/file1 &&
	git sparse-checkout set --cone sub &&

	git mv --sparse --force folder1/file1 sub 2>stderr &&
	test_must_be_empty stderr &&
	echo "overwrite" >expect &&
	test_cmp expect sub/file1

HEAD is now at 127a813 files
ok 15 - move sparse file to existing destination with --force and --sparse

expecting success of 7002.16 'move clean path from in-cone to out-of-cone': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&

	test_must_fail git mv sub/d folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/d" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse sub/d folder1 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_missing sub/d &&
	test_path_is_missing folder1/d &&
	git ls-files -t >actual &&
	! grep "^H sub/d\$" actual &&
	grep "S folder1/d" actual

S folder1/d
HEAD is now at 127a813 files
ok 16 - move clean path from in-cone to out-of-cone

expecting success of 7002.17 'move clean path from in-cone to out-of-cone overwrite': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&
	echo "sub/file1 overwrite" >sub/file1 &&
	git add sub/file1 &&

	test_must_fail git mv sub/file1 folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/file1" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	test_must_fail git mv --sparse sub/file1 folder1 2>stderr &&
	echo "fatal: destination exists in the index, source=sub/file1, destination=folder1/file1" \
	>expect &&
	test_cmp expect stderr &&

	git mv --sparse -f sub/file1 folder1 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_missing sub/file1 &&
	test_path_is_missing folder1/file1 &&
	git ls-files -t >actual &&
	! grep "H sub/file1" actual &&
	grep "S folder1/file1" actual &&

	# compare file content before move and after move
	echo "sub/file1 overwrite" >expect &&
	git ls-files -s -- folder1/file1 | awk "{print \$2}" >oid &&
	git cat-file blob $(cat oid) >actual &&
	test_cmp expect actual

S folder1/file1
HEAD is now at 127a813 files
ok 17 - move clean path from in-cone to out-of-cone overwrite

expecting success of 7002.18 'move clean path from in-cone to out-of-cone file overwrite': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&
	echo "sub/file1 overwrite" >sub/file1 &&
	git add sub/file1 &&

	test_must_fail git mv sub/file1 folder1/file1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/file1" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	test_must_fail git mv --sparse sub/file1 folder1/file1 2>stderr &&
	echo "fatal: destination exists in the index, source=sub/file1, destination=folder1/file1" \
	>expect &&
	test_cmp expect stderr &&

	git mv --sparse -f sub/file1 folder1/file1 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_missing sub/file1 &&
	test_path_is_missing folder1/file1 &&
	git ls-files -t >actual &&
	! grep "H sub/file1" actual &&
	grep "S folder1/file1" actual &&

	# compare file content before move and after move
	echo "sub/file1 overwrite" >expect &&
	git ls-files -s -- folder1/file1 | awk "{print \$2}" >oid &&
	git cat-file blob $(cat oid) >actual &&
	test_cmp expect actual

S folder1/file1
HEAD is now at 127a813 files
ok 18 - move clean path from in-cone to out-of-cone file overwrite

expecting success of 7002.19 'move directory with one of the files overwrite': 
	test_when_finished "cleanup_sparse_checkout" &&
	mkdir -p folder1/dir &&
	touch folder1/dir/file1 &&
	git add folder1 &&
	git sparse-checkout set --cone sub &&

	echo test >sub/dir/file1 &&
	git add sub/dir/file1 &&

	test_must_fail git mv sub/dir folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/dir/e" >>expect &&
	echo "folder1/dir/file1" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	test_must_fail git mv --sparse sub/dir folder1 2>stderr &&
	echo "fatal: destination exists in the index, source=sub/dir/file1, destination=folder1/dir/file1" \
	>expect &&
	test_cmp expect stderr &&

	git mv --sparse -f sub/dir folder1 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_missing sub/dir/file1 &&
	test_path_is_missing sub/dir/e &&
	test_path_is_missing folder1/file1 &&
	git ls-files -t >actual &&
	! grep "H sub/dir/file1" actual &&
	! grep "H sub/dir/e" actual &&
	grep "S folder1/dir/file1" actual &&

	# compare file content before move and after move
	echo test >expect &&
	git ls-files -s -- folder1/dir/file1 | awk "{print \$2}" >oid &&
	git cat-file blob $(cat oid) >actual &&
	test_cmp expect actual

S folder1/dir/file1
HEAD is now at 127a813 files
ok 19 - move directory with one of the files overwrite

expecting success of 7002.20 'move dirty path from in-cone to out-of-cone': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&
	echo "modified" >>sub/d &&

	test_must_fail git mv sub/d folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/d" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse sub/d folder1 2>stderr &&
	cat dirty_error_header >expect &&
	echo "folder1/d" >>expect &&
	cat dirty_hint >>expect &&
	test_cmp expect stderr &&

	test_path_is_missing sub/d &&
	test_path_is_file folder1/d &&
	git ls-files -t >actual &&
	! grep "^H sub/d\$" actual &&
	grep "H folder1/d" actual

H folder1/d
HEAD is now at 127a813 files
ok 20 - move dirty path from in-cone to out-of-cone

expecting success of 7002.21 'move dir from in-cone to out-of-cone': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&
	mkdir sub/dir/deep &&

	test_must_fail git mv sub/dir folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/dir/e" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse sub/dir folder1 2>stderr &&
	test_must_be_empty stderr &&

	test_path_is_missing sub/dir &&
	test_path_is_missing folder1 &&
	git ls-files -t >actual &&
	! grep "H sub/dir/e" actual &&
	grep "S folder1/dir/e" actual

S folder1/dir/e
HEAD is now at 127a813 files
ok 21 - move dir from in-cone to out-of-cone

expecting success of 7002.22 'move partially-dirty dir from in-cone to out-of-cone': 
	test_when_finished "cleanup_sparse_checkout" &&
	setup_sparse_checkout &&
	mkdir sub/dir/deep &&
	touch sub/dir/e2 sub/dir/e3 &&
	git add sub/dir/e2 sub/dir/e3 &&
	echo "modified" >>sub/dir/e2 &&
	echo "modified" >>sub/dir/e3 &&

	test_must_fail git mv sub/dir folder1 2>stderr &&
	cat sparse_error_header >expect &&
	echo "folder1/dir/e" >>expect &&
	echo "folder1/dir/e2" >>expect &&
	echo "folder1/dir/e3" >>expect &&
	cat sparse_hint >>expect &&
	test_cmp expect stderr &&

	git mv --sparse sub/dir folder1 2>stderr &&
	cat dirty_error_header >expect &&
	echo "folder1/dir/e2" >>expect &&
	echo "folder1/dir/e3" >>expect &&
	cat dirty_hint >>expect &&
	test_cmp expect stderr &&

	test_path_is_missing sub/dir &&
	test_path_is_missing folder1/dir/e &&
	test_path_is_file folder1/dir/e2 &&
	test_path_is_file folder1/dir/e3 &&
	git ls-files -t >actual &&
	! grep "H sub/dir/e" actual &&
	! grep "H sub/dir/e2" actual &&
	! grep "H sub/dir/e3" actual &&
	grep "S folder1/dir/e" actual &&
	grep "H folder1/dir/e2" actual &&
	grep "H folder1/dir/e3" actual

S folder1/dir/e
H folder1/dir/e2
H folder1/dir/e3
HEAD is now at 127a813 files
ok 22 - move partially-dirty dir from in-cone to out-of-cone

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6600-test-reach.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6600-test-reach/.git/
expecting success of 6600.1 'setup': 
	for i in $(test_seq 1 10)
	do
		test_commit "1-$i" &&
		git branch -f commit-1-$i &&
		git tag -a -m "1-$i" tag-1-$i commit-1-$i || return 1
	done &&
	for j in $(test_seq 1 9)
	do
		git reset --hard commit-$j-1 &&
		x=$(($j + 1)) &&
		test_commit "$x-1" &&
		git branch -f commit-$x-1 &&
		git tag -a -m "$x-1" tag-$x-1 commit-$x-1 &&

		for i in $(test_seq 2 10)
		do
			git merge commit-$j-$i -m "$x-$i" &&
			git branch -f commit-$x-$i &&
			git tag -a -m "$x-$i" tag-$x-$i commit-$x-$i || return 1
		done
	done &&
	git commit-graph write --reachable &&
	mv .git/objects/info/commit-graph commit-graph-full &&
	chmod u+w commit-graph-full &&
	git show-ref -s commit-5-5 | git commit-graph write --stdin-commits &&
	mv .git/objects/info/commit-graph commit-graph-half &&
	chmod u+w commit-graph-half &&
	git -c commitGraph.generationVersion=1 commit-graph write --reachable &&
	mv .git/objects/info/commit-graph commit-graph-no-gdat &&
	chmod u+w commit-graph-no-gdat &&
	git config core.commitGraph true

[master (root-commit) 0d15007] 1-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-1.t
[master d299b7f] 1-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
[master 4824988] 1-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
[master 365457e] 1-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
[master c37c079] 1-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
[master a87f56a] 1-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
[master e7afdd6] 1-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
[master 2855ea4] 1-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
[master 5d90ff6] 1-9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
[master be2c2f9] 1-10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 0d15007 1-1
[master 7393be9] 2-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 7393be9 2-1
[master 3195915] 3-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 3195915 3-1
[master af41a20] 4-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at af41a20 4-1
[master 2948e13] 5-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 2948e13 5-1
[master d213662] 6-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at d213662 6-1
[master 3c4cef0] 7-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 3c4cef0 7-1
[master 25a847a] 8-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 25a847a 8-1
[master 48082f2] 9-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
HEAD is now at 48082f2 9-1
[master b42f416] 10-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10-1.t
Merge made by the 'ort' strategy.
 1-2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-2.t
Merge made by the 'ort' strategy.
 1-3.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-3.t
Merge made by the 'ort' strategy.
 1-4.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-4.t
Merge made by the 'ort' strategy.
 1-5.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-5.t
Merge made by the 'ort' strategy.
 1-6.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-6.t
Merge made by the 'ort' strategy.
 1-7.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-7.t
Merge made by the 'ort' strategy.
 1-8.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-8.t
Merge made by the 'ort' strategy.
 1-9.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-9.t
Merge made by the 'ort' strategy.
 1-10.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 1-10.t
ok 1 - setup

expecting success of 6600.2 'ref_newer:miss': 
	cat >input <<-\EOF &&
	A:commit-5-7
	B:commit-4-9
	EOF
	echo "ref_newer(A,B):0" >expect &&
	test_all_modes ref_newer

ok 2 - ref_newer:miss

expecting success of 6600.3 'ref_newer:hit': 
	cat >input <<-\EOF &&
	A:commit-5-7
	B:commit-2-3
	EOF
	echo "ref_newer(A,B):1" >expect &&
	test_all_modes ref_newer

ok 3 - ref_newer:hit

expecting success of 6600.4 'in_merge_bases:hit': 
	cat >input <<-\EOF &&
	A:commit-5-7
	B:commit-8-8
	EOF
	echo "in_merge_bases(A,B):1" >expect &&
	test_all_modes in_merge_bases

ok 4 - in_merge_bases:hit

expecting success of 6600.5 'in_merge_bases:miss': 
	cat >input <<-\EOF &&
	A:commit-6-8
	B:commit-5-9
	EOF
	echo "in_merge_bases(A,B):0" >expect &&
	test_all_modes in_merge_bases

ok 5 - in_merge_bases:miss

expecting success of 6600.6 'in_merge_bases_many:hit': 
	cat >input <<-\EOF &&
	A:commit-6-8
	X:commit-6-9
	X:commit-5-7
	EOF
	echo "in_merge_bases_many(A,X):1" >expect &&
	test_all_modes in_merge_bases_many

ok 6 - in_merge_bases_many:hit

expecting success of 6600.7 'in_merge_bases_many:miss': 
	cat >input <<-\EOF &&
	A:commit-6-8
	X:commit-7-7
	X:commit-8-6
	EOF
	echo "in_merge_bases_many(A,X):0" >expect &&
	test_all_modes in_merge_bases_many

ok 7 - in_merge_bases_many:miss

expecting success of 6600.8 'in_merge_bases_many:miss-heuristic': 
	cat >input <<-\EOF &&
	A:commit-6-8
	X:commit-7-5
	X:commit-6-6
	EOF
	echo "in_merge_bases_many(A,X):0" >expect &&
	test_all_modes in_merge_bases_many

ok 8 - in_merge_bases_many:miss-heuristic

expecting success of 6600.9 'is_descendant_of:hit': 
	cat >input <<-\EOF &&
	A:commit-5-7
	X:commit-4-8
	X:commit-6-6
	X:commit-1-1
	EOF
	echo "is_descendant_of(A,X):1" >expect &&
	test_all_modes is_descendant_of

ok 9 - is_descendant_of:hit

expecting success of 6600.10 'is_descendant_of:miss': 
	cat >input <<-\EOF &&
	A:commit-6-8
	X:commit-5-9
	X:commit-4-10
	X:commit-7-6
	EOF
	echo "is_descendant_of(A,X):0" >expect &&
	test_all_modes is_descendant_of

ok 10 - is_descendant_of:miss

expecting success of 6600.11 'get_merge_bases_many': 
	cat >input <<-\EOF &&
	A:commit-5-7
	X:commit-4-8
	X:commit-6-6
	X:commit-8-3
	EOF
	{
		echo "get_merge_bases_many(A,X):" &&
		git rev-parse commit-5-6 \
			      commit-4-7 | sort
	} >expect &&
	test_all_modes get_merge_bases_many

ok 11 - get_merge_bases_many

expecting success of 6600.12 'reduce_heads': 
	cat >input <<-\EOF &&
	X:commit-1-10
	X:commit-2-8
	X:commit-3-6
	X:commit-4-4
	X:commit-1-7
	X:commit-2-5
	X:commit-3-3
	X:commit-5-1
	EOF
	{
		echo "reduce_heads(X):" &&
		git rev-parse commit-5-1 \
			      commit-4-4 \
			      commit-3-6 \
			      commit-2-8 \
			      commit-1-10 | sort
	} >expect &&
	test_all_modes reduce_heads

ok 12 - reduce_heads

expecting success of 6600.13 'can_all_from_reach:hit': 
	cat >input <<-\EOF &&
	X:commit-2-10
	X:commit-3-9
	X:commit-4-8
	X:commit-5-7
	X:commit-6-6
	X:commit-7-5
	X:commit-8-4
	X:commit-9-3
	Y:commit-1-9
	Y:commit-2-8
	Y:commit-3-7
	Y:commit-4-6
	Y:commit-5-5
	Y:commit-6-4
	Y:commit-7-3
	Y:commit-8-1
	EOF
	echo "can_all_from_reach(X,Y):1" >expect &&
	test_all_modes can_all_from_reach

ok 13 - can_all_from_reach:hit

expecting success of 6600.14 'can_all_from_reach:miss': 
	cat >input <<-\EOF &&
	X:commit-2-10
	X:commit-3-9
	X:commit-4-8
	X:commit-5-7
	X:commit-6-6
	X:commit-7-5
	X:commit-8-4
	X:commit-9-3
	Y:commit-1-9
	Y:commit-2-8
	Y:commit-3-7
	Y:commit-4-6
	Y:commit-5-5
	Y:commit-6-4
	Y:commit-8-5
	EOF
	echo "can_all_from_reach(X,Y):0" >expect &&
	test_all_modes can_all_from_reach

ok 14 - can_all_from_reach:miss

expecting success of 6600.15 'can_all_from_reach_with_flag: tags case': 
	cat >input <<-\EOF &&
	X:tag-2-10
	X:tag-3-9
	X:tag-4-8
	X:commit-5-7
	X:commit-6-6
	X:commit-7-5
	X:commit-8-4
	X:commit-9-3
	Y:tag-1-9
	Y:tag-2-8
	Y:tag-3-7
	Y:commit-4-6
	Y:commit-5-5
	Y:commit-6-4
	Y:commit-7-3
	Y:commit-8-1
	EOF
	echo "can_all_from_reach_with_flag(X,_,_,0,0):1" >expect &&
	test_all_modes can_all_from_reach_with_flag

ok 15 - can_all_from_reach_with_flag: tags case

expecting success of 6600.16 'commit_contains:hit': 
	cat >input <<-\EOF &&
	A:commit-7-7
	X:commit-2-10
	X:commit-3-9
	X:commit-4-8
	X:commit-5-7
	X:commit-6-6
	X:commit-7-5
	X:commit-8-4
	X:commit-9-3
	EOF
	echo "commit_contains(_,A,X,_):1" >expect &&
	test_all_modes commit_contains &&
	test_all_modes commit_contains --tag

ok 16 - commit_contains:hit

expecting success of 6600.17 'commit_contains:miss': 
	cat >input <<-\EOF &&
	A:commit-6-5
	X:commit-2-10
	X:commit-3-9
	X:commit-4-8
	X:commit-5-7
	X:commit-6-6
	X:commit-7-5
	X:commit-8-4
	X:commit-9-3
	EOF
	echo "commit_contains(_,A,X,_):0" >expect &&
	test_all_modes commit_contains &&
	test_all_modes commit_contains --tag

ok 17 - commit_contains:miss

expecting success of 6600.18 'rev-list: basic topo-order': 
	git rev-parse \
		commit-6-6 commit-5-6 commit-4-6 commit-3-6 commit-2-6 commit-1-6 \
		commit-6-5 commit-5-5 commit-4-5 commit-3-5 commit-2-5 commit-1-5 \
		commit-6-4 commit-5-4 commit-4-4 commit-3-4 commit-2-4 commit-1-4 \
		commit-6-3 commit-5-3 commit-4-3 commit-3-3 commit-2-3 commit-1-3 \
		commit-6-2 commit-5-2 commit-4-2 commit-3-2 commit-2-2 commit-1-2 \
		commit-6-1 commit-5-1 commit-4-1 commit-3-1 commit-2-1 commit-1-1 \
	>expect &&
	run_all_modes git rev-list --topo-order commit-6-6

ok 18 - rev-list: basic topo-order

expecting success of 6600.19 'rev-list: first-parent topo-order': 
	git rev-parse \
		commit-6-6 \
		commit-6-5 \
		commit-6-4 \
		commit-6-3 \
		commit-6-2 \
		commit-6-1 commit-5-1 commit-4-1 commit-3-1 commit-2-1 commit-1-1 \
	>expect &&
	run_all_modes git rev-list --first-parent --topo-order commit-6-6

ok 19 - rev-list: first-parent topo-order

expecting success of 6600.20 'rev-list: range topo-order': 
	git rev-parse \
		commit-6-6 commit-5-6 commit-4-6 commit-3-6 commit-2-6 commit-1-6 \
		commit-6-5 commit-5-5 commit-4-5 commit-3-5 commit-2-5 commit-1-5 \
		commit-6-4 commit-5-4 commit-4-4 commit-3-4 commit-2-4 commit-1-4 \
		commit-6-3 commit-5-3 commit-4-3 \
		commit-6-2 commit-5-2 commit-4-2 \
		commit-6-1 commit-5-1 commit-4-1 \
	>expect &&
	run_all_modes git rev-list --topo-order commit-3-3..commit-6-6

ok 20 - rev-list: range topo-order

expecting success of 6600.21 'rev-list: range topo-order': 
	git rev-parse \
		commit-6-6 commit-5-6 commit-4-6 \
		commit-6-5 commit-5-5 commit-4-5 \
		commit-6-4 commit-5-4 commit-4-4 \
		commit-6-3 commit-5-3 commit-4-3 \
		commit-6-2 commit-5-2 commit-4-2 \
		commit-6-1 commit-5-1 commit-4-1 \
	>expect &&
	run_all_modes git rev-list --topo-order commit-3-8..commit-6-6

ok 21 - rev-list: range topo-order

expecting success of 6600.22 'rev-list: first-parent range topo-order': 
	git rev-parse \
		commit-6-6 \
		commit-6-5 \
		commit-6-4 \
		commit-6-3 \
		commit-6-2 \
		commit-6-1 commit-5-1 commit-4-1 \
	>expect &&
	run_all_modes git rev-list --first-parent --topo-order commit-3-8..commit-6-6

ok 22 - rev-list: first-parent range topo-order

expecting success of 6600.23 'rev-list: ancestry-path topo-order': 
	git rev-parse \
		commit-6-6 commit-5-6 commit-4-6 commit-3-6 \
		commit-6-5 commit-5-5 commit-4-5 commit-3-5 \
		commit-6-4 commit-5-4 commit-4-4 commit-3-4 \
		commit-6-3 commit-5-3 commit-4-3 \
	>expect &&
	run_all_modes git rev-list --topo-order --ancestry-path commit-3-3..commit-6-6

ok 23 - rev-list: ancestry-path topo-order

expecting success of 6600.24 'rev-list: symmetric difference topo-order': 
	git rev-parse \
		commit-6-6 commit-5-6 commit-4-6 \
		commit-6-5 commit-5-5 commit-4-5 \
		commit-6-4 commit-5-4 commit-4-4 \
		commit-6-3 commit-5-3 commit-4-3 \
		commit-6-2 commit-5-2 commit-4-2 \
		commit-6-1 commit-5-1 commit-4-1 \
		commit-3-8 commit-2-8 commit-1-8 \
		commit-3-7 commit-2-7 commit-1-7 \
	>expect &&
	run_all_modes git rev-list --topo-order commit-3-8...commit-6-6

ok 24 - rev-list: symmetric difference topo-order

expecting success of 6600.25 'get_reachable_subset:all': 
	cat >input <<-\EOF &&
	X:commit-9-1
	X:commit-8-3
	X:commit-7-5
	X:commit-6-6
	X:commit-1-7
	Y:commit-3-3
	Y:commit-1-7
	Y:commit-5-6
	EOF
	(
		echo "get_reachable_subset(X,Y)" &&
		git rev-parse commit-3-3 \
			      commit-1-7 \
			      commit-5-6 | sort
	) >expect &&
	test_all_modes get_reachable_subset

ok 25 - get_reachable_subset:all

expecting success of 6600.26 'get_reachable_subset:some': 
	cat >input <<-\EOF &&
	X:commit-9-1
	X:commit-8-3
	X:commit-7-5
	X:commit-1-7
	Y:commit-3-3
	Y:commit-1-7
	Y:commit-5-6
	EOF
	(
		echo "get_reachable_subset(X,Y)" &&
		git rev-parse commit-3-3 \
			      commit-1-7 | sort
	) >expect &&
	test_all_modes get_reachable_subset

ok 26 - get_reachable_subset:some

expecting success of 6600.27 'get_reachable_subset:none': 
	cat >input <<-\EOF &&
	X:commit-9-1
	X:commit-8-3
	X:commit-7-5
	X:commit-1-7
	Y:commit-9-3
	Y:commit-7-6
	Y:commit-2-8
	EOF
	echo "get_reachable_subset(X,Y)" >expect &&
	test_all_modes get_reachable_subset

ok 27 - get_reachable_subset:none

# passed all 27 test(s)
1..27
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7005-editor.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7005-editor/.git/
expecting success of 7005.1 'determine default editor': 

	vi=$(TERM=vt100 git var GIT_EDITOR) &&
	test -n "$vi"


ok 1 - determine default editor

expecting success of 7005.2 'setup': 

	msg="Hand-edited" &&
	test_commit "$msg" &&
	echo "$msg" >expect &&
	git show -s --format=%s > actual &&
	test_cmp expect actual


[master (root-commit) 2ddcc77] Hand-edited
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 2 - setup

expecting success of 7005.3 'dumb should error out when falling back on vi': 

	if git commit --amend
	then
		echo "Oops?"
		false
	else
		: happy
	fi

error: Terminal is dumb, but EDITOR unset
Please supply the message using either -m or -F option.
ok 3 - dumb should error out when falling back on vi

expecting success of 7005.4 'dumb should prefer EDITOR to VISUAL': 

	EDITOR=./e-EDITOR.sh &&
	VISUAL=./e-VISUAL.sh &&
	export EDITOR VISUAL &&
	git commit --amend &&
	test "$(git show -s --format=%s)" = "Edited by EDITOR"


[master 7eecd8c] Edited by EDITOR
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 4 - dumb should prefer EDITOR to VISUAL

expecting success of 7005.5 'Using editor': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 5b7078a] Edited by editor
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 5 - Using editor

expecting success of 7005.6 'Using EDITOR': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 7eecd8c] Edited by EDITOR
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 6 - Using EDITOR

expecting success of 7005.7 'Using VISUAL': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 2ee1d44] Edited by VISUAL
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 7 - Using VISUAL

expecting success of 7005.8 'Using core_editor': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 1c851bb] Edited by core_editor
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 8 - Using core_editor

expecting success of 7005.9 'Using GIT_EDITOR': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 1bdd03b] Edited by GIT_EDITOR
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 9 - Using GIT_EDITOR

expecting success of 7005.10 'Using editor (override)': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 5b7078a] Edited by editor
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 10 - Using editor (override)

expecting success of 7005.11 'Using EDITOR (override)': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 7eecd8c] Edited by EDITOR
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 11 - Using EDITOR (override)

expecting success of 7005.12 'Using VISUAL (override)': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 2ee1d44] Edited by VISUAL
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 12 - Using VISUAL (override)

expecting success of 7005.13 'Using core_editor (override)': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 1c851bb] Edited by core_editor
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 13 - Using core_editor (override)

expecting success of 7005.14 'Using GIT_EDITOR (override)': 
		git --exec-path=. commit --amend &&
		git show -s --pretty=oneline |
		sed -e "s/^[0-9a-f]* //" >actual &&
		test_cmp expect actual
	
[master 1bdd03b] Edited by GIT_EDITOR
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 14 - Using GIT_EDITOR (override)

expecting success of 7005.15 'editor with a space': 
	echo "echo space >\"\$1\"" >"e space.sh" &&
	chmod a+x "e space.sh" &&
	GIT_EDITOR="./e\ space.sh" git commit --amend &&
	test space = "$(git show -s --pretty=format:%s)"


[master 5d9c28a] space
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 15 - editor with a space

expecting success of 7005.16 'core.editor with a space': 

	git config core.editor \"./e\ space.sh\" &&
	git commit --amend &&
	test space = "$(git show -s --pretty=format:%s)"


[master 5d9c28a] space
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 Hand-edited.t
ok 16 - core.editor with a space

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7004-tag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7004-tag/.git/
expecting success of 7004.1 'setup': 
	test_oid_cache <<-EOM
	othersigheader sha1:gpgsig-sha256
	othersigheader sha256:gpgsig
	EOM

ok 1 - setup

expecting success of 7004.2 'listing all tags in an empty tree should succeed': 
	git tag -l &&
	git tag

ok 2 - listing all tags in an empty tree should succeed

expecting success of 7004.3 'listing all tags in an empty tree should output nothing': 
	test $(git tag -l | wc -l) -eq 0 &&
	test $(git tag | wc -l) -eq 0

ok 3 - listing all tags in an empty tree should output nothing

expecting success of 7004.4 'sort tags, ignore case': 
	(
		git init sort &&
		cd sort &&
		test_commit initial &&
		git tag tag-one &&
		git tag TAG-two &&
		git tag -l >actual &&
		cat >expected <<-\EOF &&
		TAG-two
		initial
		tag-one
		EOF
		test_cmp expected actual &&
		git tag -l -i >actual &&
		cat >expected <<-\EOF &&
		initial
		tag-one
		TAG-two
		EOF
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7004-tag/sort/.git/
[main (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 4 - sort tags, ignore case

expecting success of 7004.5 'looking for a tag in an empty tree should fail': ! (tag_exists mytag)
ok 5 - looking for a tag in an empty tree should fail

expecting success of 7004.6 'creating a tag in an empty tree should fail': 
	test_must_fail git tag mynotag &&
	! tag_exists mynotag

fatal: Failed to resolve 'HEAD' as a valid ref.
ok 6 - creating a tag in an empty tree should fail

expecting success of 7004.7 'creating a tag for HEAD in an empty tree should fail': 
	test_must_fail git tag mytaghead HEAD &&
	! tag_exists mytaghead

fatal: Failed to resolve 'HEAD' as a valid ref.
ok 7 - creating a tag for HEAD in an empty tree should fail

expecting success of 7004.8 'creating a tag for an unknown revision should fail': 
	test_must_fail git tag mytagnorev aaaaaaaaaaa &&
	! tag_exists mytagnorev

fatal: Failed to resolve 'aaaaaaaaaaa' as a valid ref.
ok 8 - creating a tag for an unknown revision should fail

expecting success of 7004.9 'creating a tag using default HEAD should succeed': 
	test_config core.logAllRefUpdates true &&
	test_tick &&
	echo foo >foo &&
	git add foo &&
	git commit -m Foo &&
	git tag mytag &&
	test_must_fail git reflog exists refs/tags/mytag

[main (root-commit) 86e17e4] Foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
ok 9 - creating a tag using default HEAD should succeed

expecting success of 7004.10 'creating a tag with --create-reflog should create reflog': 
	git log -1 \
		--format="format:tag: tagging %h (%s, %cd)%n" \
		--date=format:%Y-%m-%d >expected &&
	test_when_finished "git tag -d tag_with_reflog1" &&
	git tag --create-reflog tag_with_reflog1 &&
	git reflog exists refs/tags/tag_with_reflog1 &&
	test-tool ref-store main for-each-reflog-ent refs/tags/tag_with_reflog1 | sed -e "s/^.*	//" >actual &&
	test_cmp expected actual

Deleted tag 'tag_with_reflog1' (was 86e17e4)
ok 10 - creating a tag with --create-reflog should create reflog

expecting success of 7004.11 'annotated tag with --create-reflog has correct message': 
	git log -1 \
		--format="format:tag: tagging %h (%s, %cd)%n" \
		--date=format:%Y-%m-%d >expected &&
	test_when_finished "git tag -d tag_with_reflog2" &&
	git tag -m "annotated tag" --create-reflog tag_with_reflog2 &&
	git reflog exists refs/tags/tag_with_reflog2 &&
	test-tool ref-store main for-each-reflog-ent refs/tags/tag_with_reflog2 | sed -e "s/^.*	//" >actual &&
	test_cmp expected actual

Deleted tag 'tag_with_reflog2' (was fcdbddb)
ok 11 - annotated tag with --create-reflog has correct message

expecting success of 7004.12 '--create-reflog does not create reflog on failure': 
	test_must_fail git tag --create-reflog mytag &&
	test_must_fail git reflog exists refs/tags/mytag

fatal: tag 'mytag' already exists
ok 12 - --create-reflog does not create reflog on failure

expecting success of 7004.13 'option core.logAllRefUpdates=always creates reflog': 
	test_when_finished "git tag -d tag_with_reflog3" &&
	test_config core.logAllRefUpdates always &&
	git tag tag_with_reflog3 &&
	git reflog exists refs/tags/tag_with_reflog3

Deleted tag 'tag_with_reflog3' (was 86e17e4)
ok 13 - option core.logAllRefUpdates=always creates reflog

expecting success of 7004.14 'listing all tags if one exists should succeed': 
	git tag -l &&
	git tag

mytag
mytag
ok 14 - listing all tags if one exists should succeed

expecting success of 7004.15 'Multiple -l or --list options are equivalent to one -l option': 
	git tag -l -l >actual &&
	test_cmp expect actual &&
	git tag --list --list >actual &&
	test_cmp expect actual &&
	git tag --list -l --list >actual &&
	test_cmp expect actual

ok 15 - Multiple -l or --list options are equivalent to one -l option

expecting success of 7004.16 'listing all tags if one exists should output that tag': 
	test $(git tag -l) = mytag &&
	test $(git tag) = mytag

ok 16 - listing all tags if one exists should output that tag

expecting success of 7004.17 'listing a tag using a matching pattern should succeed': git tag -l mytag
mytag
ok 17 - listing a tag using a matching pattern should succeed

expecting success of 7004.18 'listing a tag with --ignore-case': test $(git tag -l --ignore-case MYTAG) = mytag
ok 18 - listing a tag with --ignore-case

expecting success of 7004.19 'listing a tag using a matching pattern should output that tag': test $(git tag -l mytag) = mytag
ok 19 - listing a tag using a matching pattern should output that tag

expecting success of 7004.20 'listing tags using a non-matching pattern should succeed': git tag -l xxx
ok 20 - listing tags using a non-matching pattern should succeed

expecting success of 7004.21 'listing tags using a non-matching pattern should output nothing': test $(git tag -l xxx | wc -l) -eq 0
ok 21 - listing tags using a non-matching pattern should output nothing

expecting success of 7004.22 'trying to create a tag with the name of one existing should fail': test_must_fail git tag mytag
fatal: tag 'mytag' already exists
ok 22 - trying to create a tag with the name of one existing should fail

expecting success of 7004.23 'trying to create a tag with a non-valid name should fail': 
	test $(git tag -l | wc -l) -eq 1 &&
	test_must_fail git tag "" &&
	test_must_fail git tag .othertag &&
	test_must_fail git tag "other tag" &&
	test_must_fail git tag "othertag^" &&
	test_must_fail git tag "other~tag" &&
	test $(git tag -l | wc -l) -eq 1

fatal: '' is not a valid tag name.
fatal: '.othertag' is not a valid tag name.
fatal: 'other tag' is not a valid tag name.
fatal: 'othertag^' is not a valid tag name.
fatal: 'other~tag' is not a valid tag name.
ok 23 - trying to create a tag with a non-valid name should fail

expecting success of 7004.24 'creating a tag using HEAD directly should succeed': 
	git tag myhead HEAD &&
	tag_exists myhead

ok 24 - creating a tag using HEAD directly should succeed

expecting success of 7004.25 '--force can create a tag with the name of one existing': 
	tag_exists mytag &&
	git tag --force mytag &&
	tag_exists mytag
ok 25 - --force can create a tag with the name of one existing

expecting success of 7004.26 '--force is moot with a non-existing tag name': 
	test_when_finished git tag -d newtag forcetag &&
	git tag newtag >expect &&
	git tag --force forcetag >actual &&
	test_cmp expect actual

Deleted tag 'newtag' (was 86e17e4)
Deleted tag 'forcetag' (was 86e17e4)
ok 26 - --force is moot with a non-existing tag name

expecting success of 7004.27 'trying to delete an unknown tag should fail': 
	! tag_exists unknown-tag &&
	test_must_fail git tag -d unknown-tag

error: tag 'unknown-tag' not found.
ok 27 - trying to delete an unknown tag should fail

expecting success of 7004.28 'trying to delete tags without params should succeed and do nothing': 
	git tag -l > actual && test_cmp expect actual &&
	git tag -d &&
	git tag -l > actual && test_cmp expect actual

ok 28 - trying to delete tags without params should succeed and do nothing

expecting success of 7004.29 'deleting two existing tags in one command should succeed': 
	tag_exists mytag &&
	tag_exists myhead &&
	git tag -d mytag myhead &&
	! tag_exists mytag &&
	! tag_exists myhead

Deleted tag 'mytag' (was 86e17e4)
Deleted tag 'myhead' (was 86e17e4)
ok 29 - deleting two existing tags in one command should succeed

expecting success of 7004.30 'creating a tag with the name of another deleted one should succeed': 
	! tag_exists mytag &&
	git tag mytag &&
	tag_exists mytag

ok 30 - creating a tag with the name of another deleted one should succeed

expecting success of 7004.31 'trying to delete two tags, existing and not, should fail in the 2nd': 
	tag_exists mytag &&
	! tag_exists nonexistingtag &&
	test_must_fail git tag -d mytag nonexistingtag &&
	! tag_exists mytag &&
	! tag_exists nonexistingtag

error: tag 'nonexistingtag' not found.
Deleted tag 'mytag' (was 86e17e4)
ok 31 - trying to delete two tags, existing and not, should fail in the 2nd

expecting success of 7004.32 'trying to delete an already deleted tag should fail': test_must_fail git tag -d mytag
error: tag 'mytag' not found.
ok 32 - trying to delete an already deleted tag should fail

expecting success of 7004.33 'listing all tags should print them ordered': 
	git tag v1.0.1 &&
	git tag t211 &&
	git tag aa1 &&
	git tag v0.2.1 &&
	git tag v1.1.3 &&
	git tag cba &&
	git tag a1 &&
	git tag v1.0 &&
	git tag t210 &&
	git tag -l > actual &&
	test_cmp expect actual &&
	git tag > actual &&
	test_cmp expect actual

ok 33 - listing all tags should print them ordered

expecting success of 7004.34 'listing tags with substring as pattern must print those matching': 
	rm *a* &&
	git tag -l "*a*" > current &&
	test_cmp expect current

ok 34 - listing tags with substring as pattern must print those matching

expecting success of 7004.35 'listing tags with a suffix as pattern must print those matching': 
	git tag -l "*.1" > actual &&
	test_cmp expect actual

ok 35 - listing tags with a suffix as pattern must print those matching

expecting success of 7004.36 'listing tags with a prefix as pattern must print those matching': 
	git tag -l "t21*" > actual &&
	test_cmp expect actual

ok 36 - listing tags with a prefix as pattern must print those matching

expecting success of 7004.37 'listing tags using a name as pattern must print that one matching': 
	git tag -l a1 > actual &&
	test_cmp expect actual

ok 37 - listing tags using a name as pattern must print that one matching

expecting success of 7004.38 'listing tags using a name as pattern must print that one matching': 
	git tag -l v1.0 > actual &&
	test_cmp expect actual

ok 38 - listing tags using a name as pattern must print that one matching

expecting success of 7004.39 'listing tags with ? in the pattern should print those matching': 
	git tag -l "v1.?.?" > actual &&
	test_cmp expect actual

ok 39 - listing tags with ? in the pattern should print those matching

expecting success of 7004.40 'listing tags using v.* should print nothing because none have v.': 
	git tag -l "v.*" > actual &&
	test_must_be_empty actual

ok 40 - listing tags using v.* should print nothing because none have v.

expecting success of 7004.41 'listing tags using v* should print only those having v': 
	git tag -l "v*" > actual &&
	test_cmp expect actual

ok 41 - listing tags using v* should print only those having v

expecting success of 7004.42 'tag -l can accept multiple patterns': 
	git tag -l "v1*" "v0*" >actual &&
	test_cmp expect actual

ok 42 - tag -l can accept multiple patterns

expecting success of 7004.43 'tag -l <pattern> -l <pattern> works, as our buggy documentation previously suggested': 
	git tag -l "v1*" -l "v0*" >actual &&
	test_cmp expect actual

ok 43 - tag -l <pattern> -l <pattern> works, as our buggy documentation previously suggested

expecting success of 7004.44 'listing tags in column': 
	COLUMNS=41 git tag -l --column=row >actual &&
	cat >expected <<\EOF &&
a1      aa1     cba     t210    t211
v0.2.1  v1.0    v1.0.1  v1.1.3
EOF
	test_cmp expected actual

ok 44 - listing tags in column

expecting success of 7004.45 'listing tags in column with column.*': 
	test_config column.tag row &&
	test_config column.ui dense &&
	COLUMNS=40 git tag -l >actual &&
	cat >expected <<\EOF &&
a1      aa1   cba     t210    t211
v0.2.1  v1.0  v1.0.1  v1.1.3
EOF
	test_cmp expected actual

ok 45 - listing tags in column with column.*

expecting success of 7004.46 'listing tag with -n --column should fail': 
	test_must_fail git tag --column -n

fatal: options '--column' and '-n' cannot be used together
ok 46 - listing tag with -n --column should fail

expecting success of 7004.47 'listing tags -n in column with column.ui ignored': 
	test_config column.ui "row dense" &&
	COLUMNS=40 git tag -l -n >actual &&
	cat >expected <<\EOF &&
a1              Foo
aa1             Foo
cba             Foo
t210            Foo
t211            Foo
v0.2.1          Foo
v1.0            Foo
v1.0.1          Foo
v1.1.3          Foo
EOF
	test_cmp expected actual

ok 47 - listing tags -n in column with column.ui ignored

expecting success of 7004.48 'a non-annotated tag created without parameters should point to HEAD': 
	git tag non-annotated-tag &&
	test $(git cat-file -t non-annotated-tag) = commit &&
	test $(git rev-parse non-annotated-tag) = $(git rev-parse HEAD)

ok 48 - a non-annotated tag created without parameters should point to HEAD

expecting success of 7004.49 'trying to verify an unknown tag should fail': test_must_fail git tag -v unknown-tag
error: tag 'unknown-tag' not found.
ok 49 - trying to verify an unknown tag should fail

expecting success of 7004.50 'trying to verify a non-annotated and non-signed tag should fail': test_must_fail git tag -v non-annotated-tag
error: non-annotated-tag: cannot verify a non-tag object of type commit.
ok 50 - trying to verify a non-annotated and non-signed tag should fail

expecting success of 7004.51 'trying to verify many non-annotated or unknown tags, should fail': test_must_fail git tag -v unknown-tag1 non-annotated-tag unknown-tag2
error: tag 'unknown-tag1' not found.
error: non-annotated-tag: cannot verify a non-tag object of type commit.
error: tag 'unknown-tag2' not found.
ok 51 - trying to verify many non-annotated or unknown tags, should fail

expecting success of 7004.52 'creating an annotated tag with -m message should succeed': 
	git tag -m "A message" annotated-tag &&
	get_tag_msg annotated-tag >actual &&
	test_cmp expect actual

ok 52 - creating an annotated tag with -m message should succeed

expecting success of 7004.53 'set up editor': 
	write_script fakeeditor <<-\EOF
	sed -e "s/A message/An edited message/g" <"$1" >"$1-"
	mv "$1-" "$1"
	EOF

ok 53 - set up editor

expecting success of 7004.54 'creating an annotated tag with -m message --edit should succeed': 
	GIT_EDITOR=./fakeeditor git tag -m "A message" --edit annotated-tag-edit &&
	get_tag_msg annotated-tag-edit >actual &&
	test_cmp expect actual

ok 54 - creating an annotated tag with -m message --edit should succeed

expecting success of 7004.55 'creating an annotated tag with -F messagefile should succeed': 
	git tag -F msgfile file-annotated-tag &&
	get_tag_msg file-annotated-tag >actual &&
	test_cmp expect actual

ok 55 - creating an annotated tag with -F messagefile should succeed

expecting success of 7004.56 'set up editor': 
	write_script fakeeditor <<-\EOF
	sed -e "s/Another message/Another edited message/g" <"$1" >"$1-"
	mv "$1-" "$1"
	EOF

ok 56 - set up editor

expecting success of 7004.57 'creating an annotated tag with -F messagefile --edit should succeed': 
	GIT_EDITOR=./fakeeditor git tag -F msgfile --edit file-annotated-tag-edit &&
	get_tag_msg file-annotated-tag-edit >actual &&
	test_cmp expect actual

ok 57 - creating an annotated tag with -F messagefile --edit should succeed

expecting success of 7004.58 'creating an annotated tag with -F - should succeed': 
	git tag -F - stdin-annotated-tag <inputmsg &&
	get_tag_msg stdin-annotated-tag >actual &&
	test_cmp expect actual

ok 58 - creating an annotated tag with -F - should succeed

expecting success of 7004.59 'trying to create a tag with a non-existing -F file should fail': 
	! test -f nonexistingfile &&
	! tag_exists notag &&
	test_must_fail git tag -F nonexistingfile notag &&
	! tag_exists notag

fatal: could not open or read 'nonexistingfile': No such file or directory
ok 59 - trying to create a tag with a non-existing -F file should fail

expecting success of 7004.60 'trying to create tags giving both -m or -F options should fail': 
	echo "message file 1" >msgfile1 &&
	! tag_exists msgtag &&
	test_must_fail git tag -m "message 1" -F msgfile1 msgtag &&
	! tag_exists msgtag &&
	test_must_fail git tag -F msgfile1 -m "message 1" msgtag &&
	! tag_exists msgtag &&
	test_must_fail git tag -m "message 1" -F msgfile1 \
		-m "message 2" msgtag &&
	! tag_exists msgtag

fatal: options '-F' and '-m' cannot be used together
fatal: options '-F' and '-m' cannot be used together
fatal: options '-F' and '-m' cannot be used together
ok 60 - trying to create tags giving both -m or -F options should fail

expecting success of 7004.61 'creating a tag with an empty -m message should succeed': 
	git tag -m "" empty-annotated-tag &&
	get_tag_msg empty-annotated-tag >actual &&
	test_cmp expect actual

ok 61 - creating a tag with an empty -m message should succeed

expecting success of 7004.62 'creating a tag with an empty -F messagefile should succeed': 
	git tag -F emptyfile emptyfile-annotated-tag &&
	get_tag_msg emptyfile-annotated-tag >actual &&
	test_cmp expect actual

ok 62 - creating a tag with an empty -F messagefile should succeed

expecting success of 7004.63 'extra blanks in the message for an annotated tag should be removed': 
	git tag -F blanksfile blanks-annotated-tag &&
	get_tag_msg blanks-annotated-tag >actual &&
	test_cmp expect actual

ok 63 - extra blanks in the message for an annotated tag should be removed

expecting success of 7004.64 'creating a tag with blank -m message with spaces should succeed': 
	git tag -m "     " blank-annotated-tag &&
	get_tag_msg blank-annotated-tag >actual &&
	test_cmp expect actual

ok 64 - creating a tag with blank -m message with spaces should succeed

expecting success of 7004.65 'creating a tag with blank -F messagefile with spaces should succeed': 
	git tag -F blankfile blankfile-annotated-tag &&
	get_tag_msg blankfile-annotated-tag >actual &&
	test_cmp expect actual

ok 65 - creating a tag with blank -F messagefile with spaces should succeed

expecting success of 7004.66 'creating a tag with -F file of spaces and no newline should succeed': 
	git tag -F blanknonlfile blanknonlfile-annotated-tag &&
	get_tag_msg blanknonlfile-annotated-tag >actual &&
	test_cmp expect actual

ok 66 - creating a tag with -F file of spaces and no newline should succeed

expecting success of 7004.67 'creating a tag using a -F messagefile with #comments should succeed': 
	git tag -F commentsfile comments-annotated-tag &&
	get_tag_msg comments-annotated-tag >actual &&
	test_cmp expect actual

ok 67 - creating a tag using a -F messagefile with #comments should succeed

expecting success of 7004.68 'creating a tag with a #comment in the -m message should succeed': 
	git tag -m "#comment" comment-annotated-tag &&
	get_tag_msg comment-annotated-tag >actual &&
	test_cmp expect actual

ok 68 - creating a tag with a #comment in the -m message should succeed

expecting success of 7004.69 'creating a tag with #comments in the -F messagefile should succeed': 
	git tag -F commentfile commentfile-annotated-tag &&
	get_tag_msg commentfile-annotated-tag >actual &&
	test_cmp expect actual

ok 69 - creating a tag with #comments in the -F messagefile should succeed

expecting success of 7004.70 'creating a tag with a file of #comment and no newline should succeed': 
	git tag -F commentnonlfile commentnonlfile-annotated-tag &&
	get_tag_msg commentnonlfile-annotated-tag >actual &&
	test_cmp expect actual

ok 70 - creating a tag with a file of #comment and no newline should succeed

expecting success of 7004.71 'listing the one-line message of a non-signed tag should succeed': 
	git tag -m "A msg" tag-one-line &&

	echo "tag-one-line" >expect &&
	git tag -l | grep "^tag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^tag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l tag-one-line >actual &&
	test_cmp expect actual &&

	git tag -n0 | grep "^tag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n0 tag-one-line >actual &&
	test_cmp expect actual &&

	echo "tag-one-line    A msg" >expect &&
	git tag -n1 -l | grep "^tag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^tag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l tag-one-line >actual &&
	test_cmp expect actual &&
	git tag -n2 -l tag-one-line >actual &&
	test_cmp expect actual &&
	git tag -n999 -l tag-one-line >actual &&
	test_cmp expect actual

ok 71 - listing the one-line message of a non-signed tag should succeed

expecting success of 7004.72 'The -n 100 invocation means -n --list 100, not -n100': 
	git tag -n 100 >actual &&
	test_must_be_empty actual &&

	git tag -m "A msg" 100 &&
	echo "100             A msg" >expect &&
	git tag -n 100 >actual &&
	test_cmp expect actual

ok 72 - The -n 100 invocation means -n --list 100, not -n100

expecting success of 7004.73 'listing the zero-lines message of a non-signed tag should succeed': 
	git tag -m "" tag-zero-lines &&

	echo "tag-zero-lines" >expect &&
	git tag -l | grep "^tag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^tag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l tag-zero-lines >actual &&
	test_cmp expect actual &&

	echo "tag-zero-lines  " >expect &&
	git tag -n1 -l | grep "^tag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^tag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l tag-zero-lines >actual &&
	test_cmp expect actual &&
	git tag -n2 -l tag-zero-lines >actual &&
	test_cmp expect actual &&
	git tag -n999 -l tag-zero-lines >actual &&
	test_cmp expect actual

ok 73 - listing the zero-lines message of a non-signed tag should succeed

expecting success of 7004.74 'listing many message lines of a non-signed tag should succeed': 
	git tag -F annotagmsg tag-lines &&

	echo "tag-lines" >expect &&
	git tag -l | grep "^tag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^tag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l tag-lines >actual &&
	test_cmp expect actual &&

	echo "tag-lines       tag line one" >expect &&
	git tag -n1 -l | grep "^tag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^tag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l tag-lines >actual &&
	test_cmp expect actual &&

	echo "    tag line two" >>expect &&
	git tag -n2 -l | grep "^ *tag.line" >actual &&
	test_cmp expect actual &&
	git tag -n2 -l tag-lines >actual &&
	test_cmp expect actual &&

	echo "    tag line three" >>expect &&
	git tag -n3 -l | grep "^ *tag.line" >actual &&
	test_cmp expect actual &&
	git tag -n3 -l tag-lines >actual &&
	test_cmp expect actual &&
	git tag -n4 -l | grep "^ *tag.line" >actual &&
	test_cmp expect actual &&
	git tag -n4 -l tag-lines >actual &&
	test_cmp expect actual &&
	git tag -n99 -l | grep "^ *tag.line" >actual &&
	test_cmp expect actual &&
	git tag -n99 -l tag-lines >actual &&
	test_cmp expect actual

ok 74 - listing many message lines of a non-signed tag should succeed

expecting success of 7004.75 'annotations for blobs are empty': 
	blob=$(git hash-object -w --stdin <<-\EOF
	Blob paragraph 1.

	Blob paragraph 2.
	EOF
	) &&
	git tag tag-blob $blob &&
	echo "tag-blob        " >expect &&
	git tag -n1 -l tag-blob >actual &&
	test_cmp expect actual

ok 75 - annotations for blobs are empty

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7004-tag/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7004-tag/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7004.76 'trying to verify an annotated non-signed tag should fail': 
	tag_exists annotated-tag &&
	test_must_fail git tag -v annotated-tag

object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
ok 76 - trying to verify an annotated non-signed tag should fail

expecting success of 7004.77 'trying to verify a file-annotated non-signed tag should fail': 
	tag_exists file-annotated-tag &&
	test_must_fail git tag -v file-annotated-tag

object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another message
in a file.
error: no signature found
ok 77 - trying to verify a file-annotated non-signed tag should fail

expecting success of 7004.78 'trying to verify two annotated non-signed tags should fail': 
	tag_exists annotated-tag file-annotated-tag &&
	test_must_fail git tag -v annotated-tag file-annotated-tag

object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another message
in a file.
error: no signature found
ok 78 - trying to verify two annotated non-signed tags should fail

expecting success of 7004.79 'creating a signed tag with -m message should succeed': 
	git tag -s -m "A signed tag message" signed-tag &&
	get_tag_msg signed-tag >actual &&
	test_cmp expect actual

ok 79 - creating a signed tag with -m message should succeed

expecting success of 7004.80 'sign with a given key id': 

	git tag -u committer@example.com -m "Another message" u-signed-tag &&
	get_tag_msg u-signed-tag >actual &&
	test_cmp expect actual


ok 80 - sign with a given key id

expecting success of 7004.81 'sign with an unknown id (1)': 

	test_must_fail git tag -u author@example.com \
		-m "Another message" o-signed-tag


error: gpg failed to sign the data
error: unable to sign the tag
ok 81 - sign with an unknown id (1)

expecting success of 7004.82 'sign with an unknown id (2)': 

	test_must_fail git tag -u DEADBEEF -m "Another message" o-signed-tag


error: gpg failed to sign the data
error: unable to sign the tag
ok 82 - sign with an unknown id (2)

expecting success of 7004.83 '-u implies signed tag': 
	GIT_EDITOR=./fakeeditor git tag -u CDDE430D implied-sign &&
	get_tag_msg implied-sign >actual &&
	test_cmp expect actual

ok 83 - -u implies signed tag

expecting success of 7004.84 'creating a signed tag with -F messagefile should succeed': 
	git tag -s -F sigmsgfile file-signed-tag &&
	get_tag_msg file-signed-tag >actual &&
	test_cmp expect actual

ok 84 - creating a signed tag with -F messagefile should succeed

expecting success of 7004.85 'creating a signed tag with -F - should succeed': 
	git tag -s -F - stdin-signed-tag <siginputmsg &&
	get_tag_msg stdin-signed-tag >actual &&
	test_cmp expect actual

ok 85 - creating a signed tag with -F - should succeed

expecting success of 7004.86 '-s implies annotated tag': 
	GIT_EDITOR=./fakeeditor git tag -s implied-annotate &&
	get_tag_msg implied-annotate >actual &&
	test_cmp expect actual

ok 86 - -s implies annotated tag

expecting success of 7004.87 'git tag -s implied if configured with tag.forcesignannotated': test_config tag.forcesignannotated true &&
	git tag -m "A message" forcesignannotated-implied-sign &&
	get_tag_msg forcesignannotated-implied-sign >actual &&
	test_cmp expect actual

ok 87 - git tag -s implied if configured with tag.forcesignannotated

expecting success of 7004.88 'lightweight with no message when configured with tag.forcesignannotated': test_config tag.forcesignannotated true &&
	git tag forcesignannotated-lightweight &&
	tag_exists forcesignannotated-lightweight &&
	test_must_fail git tag -v forcesignannotated-no-message

error: tag 'forcesignannotated-no-message' not found.
ok 88 - lightweight with no message when configured with tag.forcesignannotated

expecting success of 7004.89 'git tag -a disable configured tag.forcesignannotated': test_config tag.forcesignannotated true &&
	git tag -a -m "A message" forcesignannotated-annotate &&
	get_tag_msg forcesignannotated-annotate >actual &&
	test_cmp expect actual &&
	test_must_fail git tag -v forcesignannotated-annotate

object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag forcesignannotated-annotate
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
ok 89 - git tag -a disable configured tag.forcesignannotated

expecting success of 7004.90 'git tag --sign enable GPG sign': test_config tag.forcesignannotated false &&
	git tag --sign -m "A message" forcesignannotated-disabled &&
	get_tag_msg forcesignannotated-disabled >actual &&
	test_cmp expect actual

ok 90 - git tag --sign enable GPG sign

expecting success of 7004.91 'git tag configured tag.gpgsign enables GPG sign': test_config tag.gpgsign true &&
	git tag -m "A message" gpgsign-enabled &&
	get_tag_msg gpgsign-enabled>actual &&
	test_cmp expect actual

ok 91 - git tag configured tag.gpgsign enables GPG sign

expecting success of 7004.92 'git tag --no-sign configured tag.gpgsign skip GPG sign': test_config tag.gpgsign true &&
	git tag -a --no-sign -m "A message" no-sign &&
	get_tag_msg no-sign>actual &&
	test_cmp expect actual

ok 92 - git tag --no-sign configured tag.gpgsign skip GPG sign

expecting success of 7004.93 'trying to create a signed tag with non-existing -F file should fail': 
	! test -f nonexistingfile &&
	! tag_exists nosigtag &&
	test_must_fail git tag -s -F nonexistingfile nosigtag &&
	! tag_exists nosigtag

fatal: could not open or read 'nonexistingfile': No such file or directory
ok 93 - trying to create a signed tag with non-existing -F file should fail

expecting success of 7004.94 'verifying a signed tag should succeed': git tag -v signed-tag
gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
ok 94 - verifying a signed tag should succeed

expecting success of 7004.95 'verifying two signed tags in one command should succeed': git tag -v signed-tag file-signed-tag
gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
gpg: Signature made Wed Dec 28 08:00:02 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another signed tag
message in a file.
ok 95 - verifying two signed tags in one command should succeed

expecting success of 7004.96 'verifying many signed and non-signed tags should fail': 
	test_must_fail git tag -v signed-tag annotated-tag &&
	test_must_fail git tag -v file-annotated-tag file-signed-tag &&
	test_must_fail git tag -v annotated-tag \
		file-signed-tag file-annotated-tag &&
	test_must_fail git tag -v signed-tag annotated-tag file-signed-tag

gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another message
in a file.
error: no signature found
gpg: Signature made Wed Dec 28 08:00:02 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another signed tag
message in a file.
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
gpg: Signature made Wed Dec 28 08:00:02 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another message
in a file.
error: no signature found
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another signed tag
message in a file.
gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag annotated-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A message
error: no signature found
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
gpg: Signature made Wed Dec 28 08:00:02 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag file-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Another signed tag
message in a file.
ok 96 - verifying many signed and non-signed tags should fail

expecting success of 7004.97 'verifying a forged tag should fail': 
	forged=$(git cat-file tag signed-tag |
		sed -e "s/signed-tag/forged-tag/" |
		git mktag) &&
	git tag forged-tag $forged &&
	test_must_fail git tag -v forged-tag

gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag forged-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
ok 97 - verifying a forged tag should fail

expecting success of 7004.98 'verifying a proper tag with --format pass and format accordingly': 
	cat >expect <<-\EOF &&
	tagname : signed-tag
	EOF
	git tag -v --format="tagname : %(tag)" "signed-tag" >actual &&
	test_cmp expect actual

ok 98 - verifying a proper tag with --format pass and format accordingly

expecting success of 7004.99 'verifying a forged tag with --format should fail silently': 
	test_must_fail git tag -v --format="tagname : %(tag)" "forged-tag" >actual &&
	test_must_be_empty actual

ok 99 - verifying a forged tag with --format should fail silently

expecting success of 7004.100 'creating a signed tag with an empty -m message should succeed': 
	git tag -s -m "" empty-signed-tag &&
	get_tag_msg empty-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v empty-signed-tag

gpg: Signature made Wed Dec 28 08:00:05 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag empty-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 100 - creating a signed tag with an empty -m message should succeed

expecting success of 7004.101 'creating a signed tag with an empty -F messagefile should succeed': 
	git tag -s -F sigemptyfile emptyfile-signed-tag &&
	get_tag_msg emptyfile-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v emptyfile-signed-tag

gpg: Signature made Wed Dec 28 08:00:05 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag emptyfile-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 101 - creating a signed tag with an empty -F messagefile should succeed

expecting success of 7004.102 'extra blanks in the message for a signed tag should be removed': 
	git tag -s -F sigblanksfile blanks-signed-tag &&
	get_tag_msg blanks-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v blanks-signed-tag

gpg: Signature made Wed Dec 28 08:00:05 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag blanks-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

Leading blank lines

Repeated blank lines

Trailing spaces

Trailing blank lines
ok 102 - extra blanks in the message for a signed tag should be removed

expecting success of 7004.103 'creating a signed tag with a blank -m message should succeed': 
	git tag -s -m "     " blank-signed-tag &&
	get_tag_msg blank-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v blank-signed-tag

gpg: Signature made Wed Dec 28 08:00:05 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag blank-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 103 - creating a signed tag with a blank -m message should succeed

expecting success of 7004.104 'creating a signed tag with blank -F file with spaces should succeed': 
	git tag -s -F sigblankfile blankfile-signed-tag &&
	get_tag_msg blankfile-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v blankfile-signed-tag

gpg: Signature made Wed Dec 28 08:00:05 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag blankfile-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 104 - creating a signed tag with blank -F file with spaces should succeed

expecting success of 7004.105 'creating a signed tag with spaces and no newline should succeed': 
	git tag -s -F sigblanknonlfile blanknonlfile-signed-tag &&
	get_tag_msg blanknonlfile-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v blanknonlfile-signed-tag

gpg: Signature made Wed Dec 28 08:00:06 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag blanknonlfile-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 105 - creating a signed tag with spaces and no newline should succeed

expecting success of 7004.106 'signed tag with embedded PGP message': 
	cat >msg <<-\EOF &&
	-----BEGIN PGP MESSAGE-----

	this is not a real PGP message
	-----END PGP MESSAGE-----
	EOF
	git tag -s -F msg confusing-pgp-message &&
	git tag -v confusing-pgp-message

gpg: Signature made Wed Dec 28 08:00:06 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag confusing-pgp-message
tagger C O Mitter <committer@example.com> 1112911993 -0700

-----BEGIN PGP MESSAGE-----

this is not a real PGP message
-----END PGP MESSAGE-----
ok 106 - signed tag with embedded PGP message

expecting success of 7004.107 'creating a signed tag with a -F file with #comments should succeed': 
	git tag -s -F sigcommentsfile comments-signed-tag &&
	get_tag_msg comments-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v comments-signed-tag

gpg: Signature made Wed Dec 28 08:00:06 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag comments-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

The message.
One line.

Another line.

Last line.
ok 107 - creating a signed tag with a -F file with #comments should succeed

expecting success of 7004.108 'creating a signed tag with #commented -m message should succeed': 
	git tag -s -m "#comment" comment-signed-tag &&
	get_tag_msg comment-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v comment-signed-tag

gpg: Signature made Wed Dec 28 08:00:06 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag comment-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 108 - creating a signed tag with #commented -m message should succeed

expecting success of 7004.109 'creating a signed tag with #commented -F messagefile should succeed': 
	git tag -s -F sigcommentfile commentfile-signed-tag &&
	get_tag_msg commentfile-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v commentfile-signed-tag

gpg: Signature made Wed Dec 28 08:00:07 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag commentfile-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 109 - creating a signed tag with #commented -F messagefile should succeed

expecting success of 7004.110 'creating a signed tag with a #comment and no newline should succeed': 
	git tag -s -F sigcommentnonlfile commentnonlfile-signed-tag &&
	get_tag_msg commentnonlfile-signed-tag >actual &&
	test_cmp expect actual &&
	git tag -v commentnonlfile-signed-tag

gpg: Signature made Wed Dec 28 08:00:07 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag commentnonlfile-signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

ok 110 - creating a signed tag with a #comment and no newline should succeed

expecting success of 7004.111 'listing the one-line message of a signed tag should succeed': 
	git tag -s -m "A message line signed" stag-one-line &&

	echo "stag-one-line" >expect &&
	git tag -l | grep "^stag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^stag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l stag-one-line >actual &&
	test_cmp expect actual &&

	echo "stag-one-line   A message line signed" >expect &&
	git tag -n1 -l | grep "^stag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^stag-one-line" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l stag-one-line >actual &&
	test_cmp expect actual &&
	git tag -n2 -l stag-one-line >actual &&
	test_cmp expect actual &&
	git tag -n999 -l stag-one-line >actual &&
	test_cmp expect actual

ok 111 - listing the one-line message of a signed tag should succeed

expecting success of 7004.112 'listing the zero-lines message of a signed tag should succeed': 
	git tag -s -m "" stag-zero-lines &&

	echo "stag-zero-lines" >expect &&
	git tag -l | grep "^stag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^stag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l stag-zero-lines >actual &&
	test_cmp expect actual &&

	echo "stag-zero-lines " >expect &&
	git tag -n1 -l | grep "^stag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^stag-zero-lines" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l stag-zero-lines >actual &&
	test_cmp expect actual &&
	git tag -n2 -l stag-zero-lines >actual &&
	test_cmp expect actual &&
	git tag -n999 -l stag-zero-lines >actual &&
	test_cmp expect actual

ok 112 - listing the zero-lines message of a signed tag should succeed

expecting success of 7004.113 'listing many message lines of a signed tag should succeed': 
	git tag -s -F sigtagmsg stag-lines &&

	echo "stag-lines" >expect &&
	git tag -l | grep "^stag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l | grep "^stag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n0 -l stag-lines >actual &&
	test_cmp expect actual &&

	echo "stag-lines      stag line one" >expect &&
	git tag -n1 -l | grep "^stag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n -l | grep "^stag-lines" >actual &&
	test_cmp expect actual &&
	git tag -n1 -l stag-lines >actual &&
	test_cmp expect actual &&

	echo "    stag line two" >>expect &&
	git tag -n2 -l | grep "^ *stag.line" >actual &&
	test_cmp expect actual &&
	git tag -n2 -l stag-lines >actual &&
	test_cmp expect actual &&

	echo "    stag line three" >>expect &&
	git tag -n3 -l | grep "^ *stag.line" >actual &&
	test_cmp expect actual &&
	git tag -n3 -l stag-lines >actual &&
	test_cmp expect actual &&
	git tag -n4 -l | grep "^ *stag.line" >actual &&
	test_cmp expect actual &&
	git tag -n4 -l stag-lines >actual &&
	test_cmp expect actual &&
	git tag -n99 -l | grep "^ *stag.line" >actual &&
	test_cmp expect actual &&
	git tag -n99 -l stag-lines >actual &&
	test_cmp expect actual

ok 113 - listing many message lines of a signed tag should succeed

expecting success of 7004.114 'creating a signed tag pointing to a tree should succeed': 
	git tag -s -m "A message for a tree" tree-signed-tag HEAD^{tree} &&
	get_tag_msg tree-signed-tag >actual &&
	test_cmp expect actual

ok 114 - creating a signed tag pointing to a tree should succeed

expecting success of 7004.115 'creating a signed tag pointing to a blob should succeed': 
	git tag -s -m "A message for a blob" blob-signed-tag HEAD:foo &&
	get_tag_msg blob-signed-tag >actual &&
	test_cmp expect actual

ok 115 - creating a signed tag pointing to a blob should succeed

expecting success of 7004.116 'creating a signed tag pointing to another tag should succeed': 
	git tag -s -m "A message for another tag" tag-signed-tag signed-tag &&
	get_tag_msg tag-signed-tag >actual &&
	test_cmp expect actual

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag-signed-tag signed-tag^{}
hint: Disable this message with "git config advice.nestedTag false"
ok 116 - creating a signed tag pointing to another tag should succeed

checking prerequisite: RFC1991

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-RFC1991" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-RFC1991" &&
	test_have_prereq GPG &&
	echo | gpg --homedir "${GNUPGHOME}" -b --rfc1991 >/dev/null

)
invalid option "--rfc1991"
prerequisite RFC1991 not satisfied
ok 117 # skip creating a signed tag with rfc1991 (missing RFC1991 of GPG,RFC1991)

ok 118 # skip reediting a signed tag body omits signature (missing RFC1991 of GPG,RFC1991)

ok 119 # skip verifying rfc1991 signature (missing RFC1991 of GPG,RFC1991)

ok 120 # skip list tag with rfc1991 signature (missing RFC1991 of GPG,RFC1991)

ok 121 # skip verifying rfc1991 signature without --rfc1991 (missing RFC1991 of GPG,RFC1991)

ok 122 # skip list tag with rfc1991 signature without --rfc1991 (missing RFC1991 of GPG,RFC1991)

ok 123 # skip reediting a signed tag body omits signature (missing RFC1991 of GPG,RFC1991)

expecting success of 7004.124 'git tag -s fails if gpg is misconfigured (bad key)': test_config user.signingkey BobTheMouse &&
	test_must_fail git tag -s -m tail tag-gpg-failure
error: gpg failed to sign the data
error: unable to sign the tag
ok 124 - git tag -s fails if gpg is misconfigured (bad key)

expecting success of 7004.125 'git tag -s fails if gpg is misconfigured (bad signature format)': test_config gpg.program echo &&
	 test_must_fail git tag -s -m tail tag-gpg-failure
error: gpg failed to sign the data
error: unable to sign the tag
ok 125 - git tag -s fails if gpg is misconfigured (bad signature format)

expecting success of 7004.126 'git verifies tag is valid with double signature': 
	git tag -s -m tail tag-gpg-double-sig &&
	git cat-file tag tag-gpg-double-sig >tag &&
	othersigheader=$(test_oid othersigheader) &&
	sed -ne "/^\$/q;p" tag >new-tag &&
	cat <<-EOM >>new-tag &&
	$othersigheader -----BEGIN PGP SIGNATURE-----
	 someinvaliddata
	 -----END PGP SIGNATURE-----
	EOM
	sed -e "1,/^tagger/d" tag >>new-tag &&
	new_tag=$(git hash-object -t tag -w new-tag) &&
	git update-ref refs/tags/tag-gpg-double-sig $new_tag &&
	git verify-tag tag-gpg-double-sig &&
	git fsck

gpg: Signature made Wed Dec 28 08:00:10 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
dangling tag 46b3c3d4715d30408c2d126130278246e1309d82
dangling tag fcdbddb58ccfe54bfa257f7d2af9b8a0c2fb83fb
ok 126 - git verifies tag is valid with double signature

checking prerequisite: GPGSM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
	test_have_prereq GPG &&
	# Available key info:
	# * see t/lib-gpg/gpgsm-gen-key.in
	# To generate new certificate:
	#  * no passphrase
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o /tmp/gpgsm.crt.user \
	#		--generate-key \
	#		--batch t/lib-gpg/gpgsm-gen-key.in
	# To import certificate:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		--import /tmp/gpgsm.crt.user
	# To export into a .p12 we can later import:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o t/lib-gpg/gpgsm_cert.p12 \
	#		--export-secret-key-p12 "committer@example.com"
	echo | gpgsm --homedir "${GNUPGHOME}" \
		--passphrase-fd 0 --pinentry-mode loopback \
		--import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&

	gpgsm --homedir "${GNUPGHOME}" -K --with-colons |
	awk -F ":" "/^fpr:/ {printf \"%s S relax\\n\", \$10}" \
		>"${GNUPGHOME}/trustlist.txt" &&
	(gpgconf --reload all || : ) &&

	echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
	       -u committer@example.com -o /dev/null --sign -

)
gpgsm: total number processed: 2
gpgsm:               imported: 1
gpgsm:       secret keys read: 1
gpgsm:   secret keys imported: 1
gpgsm: DBG: adding certificates at level -2
gpgsm: signature created
prerequisite GPGSM ok
expecting success of 7004.127 'git tag -s fails if gpgsm is misconfigured (bad key)': test_config user.signingkey BobTheMouse &&
	 test_config gpg.format x509 &&
	 test_must_fail git tag -s -m tail tag-gpg-failure
error: gpg failed to sign the data
error: unable to sign the tag
ok 127 - git tag -s fails if gpgsm is misconfigured (bad key)

expecting success of 7004.128 'git tag -s fails if gpgsm is misconfigured (bad signature format)': test_config gpg.x509.program echo &&
	 test_config gpg.format x509 &&
	 test_must_fail git tag -s -m tail tag-gpg-failure
error: gpg failed to sign the data
error: unable to sign the tag
ok 128 - git tag -s fails if gpgsm is misconfigured (bad signature format)

expecting success of 7004.129 'verify signed tag fails when public key is not present': test_must_fail git tag -v signed-tag
gpg: keyblock resource '/<<PKGBUILDDIR>>/t/trash directory.t7004-tag/gpghome/pubring.kbx': No such file or directory
gpg: Signature made Wed Dec 28 08:00:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Can't check signature: No public key
object 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b
type commit
tag signed-tag
tagger C O Mitter <committer@example.com> 1112911993 -0700

A signed tag message
ok 129 - verify signed tag fails when public key is not present

expecting success of 7004.130 'git tag -a fails if tag annotation is empty': 
	! (GIT_EDITOR=cat git tag -a initial-comment)


#
# Write a message for tag:
#   initial-comment
# Lines starting with '#' will be ignored.
fatal: no tag message?
ok 130 - git tag -a fails if tag annotation is empty

expecting success of 7004.131 'message in editor has initial comment': 
	! (GIT_EDITOR=cat git tag -a initial-comment > actual)

fatal: no tag message?
ok 131 - message in editor has initial comment

expecting success of 7004.132 'message in editor has initial comment: first line': 
	# check the first line --- should be empty
	echo >first.expect &&
	sed -e 1q <actual >first.actual &&
	test_cmp first.expect first.actual

ok 132 - message in editor has initial comment: first line

expecting success of 7004.133 'message in editor has initial comment: remainder': 
	# remove commented lines from the remainder -- should be empty
	sed -e 1d -e "/^#/d" <actual >rest.actual &&
	test_must_be_empty rest.actual

ok 133 - message in editor has initial comment: remainder

expecting success of 7004.134 'overwriting an annotated tag should use its previous body': 
	git tag -a -m "An annotation to be reused" reuse &&
	GIT_EDITOR=true git tag -f -a reuse &&
	get_tag_msg reuse >actual &&
	test_cmp expect actual

ok 134 - overwriting an annotated tag should use its previous body

expecting success of 7004.135 'filename for the message is relative to cwd': 
	mkdir subdir &&
	echo "Tag message in top directory" >msgfile-5 &&
	echo "Tag message in sub directory" >subdir/msgfile-5 &&
	(
		cd subdir &&
		git tag -a -F msgfile-5 tag-from-subdir
	) &&
	git cat-file tag tag-from-subdir | grep "in sub directory"

Tag message in sub directory
ok 135 - filename for the message is relative to cwd

expecting success of 7004.136 'filename for the message is relative to cwd': 
	echo "Tag message in sub directory" >subdir/msgfile-6 &&
	(
		cd subdir &&
		git tag -a -F msgfile-6 tag-from-subdir-2
	) &&
	git cat-file tag tag-from-subdir-2 | grep "in sub directory"

Tag message in sub directory
ok 136 - filename for the message is relative to cwd

expecting success of 7004.137 'creating second commit and tag': 
	echo foo-2.0 >foo &&
	git add foo &&
	git commit -m second &&
	git tag v2.0

[main d3200cb] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 137 - creating second commit and tag

expecting success of 7004.138 'creating third commit without tag': 
	echo foo-dev >foo &&
	git add foo &&
	git commit -m third

[main c282771] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 138 - creating third commit without tag

expecting success of 7004.139 'checking that first commit is in all tags (hash)': 
	git tag -l --contains 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b v* >actual &&
	test_cmp expected actual

ok 139 - checking that first commit is in all tags (hash)

expecting success of 7004.140 'checking that first commit is in all tags (tag)': 
	git tag -l --contains v1.0 v* >actual &&
	test_cmp expected actual

ok 140 - checking that first commit is in all tags (tag)

expecting success of 7004.141 'checking that first commit is in all tags (relative)': 
	git tag -l --contains HEAD~2 v* >actual &&
	test_cmp expected actual

ok 141 - checking that first commit is in all tags (relative)

expecting success of 7004.142 'checking that first commit is not listed in any tag with --no-contains  (hash)': 
	git tag -l --no-contains 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b v* >actual &&
	test_must_be_empty actual

ok 142 - checking that first commit is not listed in any tag with --no-contains  (hash)

expecting success of 7004.143 'checking that first commit is in all tags (tag)': 
	git tag -l --no-contains v1.0 v* >actual &&
	test_must_be_empty actual

ok 143 - checking that first commit is in all tags (tag)

expecting success of 7004.144 'checking that first commit is in all tags (relative)': 
	git tag -l --no-contains HEAD~2 v* >actual &&
	test_must_be_empty actual

ok 144 - checking that first commit is in all tags (relative)

expecting success of 7004.145 'checking that second commit only has one tag': 
	git tag -l --contains d3200cb2a2a0c653d5ddeedfef2b94eba9226013 v* >actual &&
	test_cmp expected actual

ok 145 - checking that second commit only has one tag

expecting success of 7004.146 'inverse of the last test, with --no-contains': 
	git tag -l --no-contains d3200cb2a2a0c653d5ddeedfef2b94eba9226013 v* >actual &&
	test_cmp expected actual

ok 146 - inverse of the last test, with --no-contains

expecting success of 7004.147 'checking that third commit has no tags': 
	git tag -l --contains c282771867dd40cef6c1f87644fce5e5bc6b13ad v* >actual &&
	test_must_be_empty actual

ok 147 - checking that third commit has no tags

expecting success of 7004.148 'conversely --no-contains on the third commit lists all tags': 
	git tag -l --no-contains c282771867dd40cef6c1f87644fce5e5bc6b13ad v* >actual &&
	test_cmp expected actual

ok 148 - conversely --no-contains on the third commit lists all tags

expecting success of 7004.149 'creating simple branch': 
	git branch stable v2.0 &&
        git checkout stable &&
	echo foo-3.0 > foo &&
	git commit foo -m fourth &&
	git tag v3.0

Switched to branch 'stable'
[stable 820ea75] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 149 - creating simple branch

expecting success of 7004.150 'checking that branch head only has one tag': 
	git tag -l --contains 820ea75a3bc5b6aafd076dbee5f2daa3dea70df9 v* >actual &&
	test_cmp expected actual

ok 150 - checking that branch head only has one tag

expecting success of 7004.151 'checking that branch head with --no-contains lists all but one tag': 
	git tag -l --no-contains 820ea75a3bc5b6aafd076dbee5f2daa3dea70df9 v* >actual &&
	test_cmp expected actual

ok 151 - checking that branch head with --no-contains lists all but one tag

expecting success of 7004.152 'merging original branch into this branch': 
	git merge --strategy=ours main &&
        git tag v4.0

Merge made by the 'ours' strategy.
ok 152 - merging original branch into this branch

expecting success of 7004.153 'checking that original branch head has one tag now': 
	git tag -l --contains c282771867dd40cef6c1f87644fce5e5bc6b13ad v* >actual &&
	test_cmp expected actual

ok 153 - checking that original branch head has one tag now

expecting success of 7004.154 'checking that original branch head with --no-contains lists all but one tag now': 
	git tag -l --no-contains c282771867dd40cef6c1f87644fce5e5bc6b13ad v* >actual &&
	test_cmp expected actual

ok 154 - checking that original branch head with --no-contains lists all but one tag now

expecting success of 7004.155 'checking that initial commit is in all tags': 
	git tag -l --contains 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b v* >actual &&
	test_cmp expected actual

ok 155 - checking that initial commit is in all tags

expecting success of 7004.156 'checking that --contains can be used in non-list mode': 
	git tag --contains $hash1 v* >actual &&
	test_cmp expected actual

ok 156 - checking that --contains can be used in non-list mode

expecting success of 7004.157 'checking that initial commit is in all tags with --no-contains': 
	git tag -l --no-contains 86e17e4ed4cddf9a4f960da789f8378f6ea1ff2b v* >actual &&
	test_must_be_empty actual

ok 157 - checking that initial commit is in all tags with --no-contains

expecting success of 7004.158 'mixing incompatibles modes and options is forbidden': 
	test_must_fail git tag -a &&
	test_must_fail git tag -a -l &&
	test_must_fail git tag -s &&
	test_must_fail git tag -s -l &&
	test_must_fail git tag -m &&
	test_must_fail git tag -m -l &&
	test_must_fail git tag -m "hlagh" &&
	test_must_fail git tag -m "hlagh" -l &&
	test_must_fail git tag -F &&
	test_must_fail git tag -F -l &&
	test_must_fail git tag -f &&
	test_must_fail git tag -f -l &&
	test_must_fail git tag -a -s -m -F &&
	test_must_fail git tag -a -s -m -F -l &&
	test_must_fail git tag -l -v &&
	test_must_fail git tag -l -d &&
	test_must_fail git tag -l -v -d &&
	test_must_fail git tag -n 100 -v &&
	test_must_fail git tag -l -m msg &&
	test_must_fail git tag -l -F some file &&
	test_must_fail git tag -v -s &&
	test_must_fail git tag --contains tag-tree &&
	test_must_fail git tag --contains tag-blob &&
	test_must_fail git tag --no-contains tag-tree &&
	test_must_fail git tag --no-contains tag-blob &&
	test_must_fail git tag --contains --no-contains &&
	test_must_fail git tag --no-with HEAD &&
	test_must_fail git tag --no-without HEAD

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

error: switch `m' requires a value
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

error: switch `F' requires a value
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

error: switch `v' is incompatible with --list
error: switch `d' is incompatible with --list
error: switch `v' is incompatible with --list
fatal: the '-n' option is only allowed in list mode
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

error: malformed object name tag-tree
error: object fc33d716ad1ef3e46e3c05586c188aef7c225de9 is a blob, not a commit
error: no such commit tag-blob
error: malformed object name tag-tree
error: object fc33d716ad1ef3e46e3c05586c188aef7c225de9 is a blob, not a commit
error: no such commit tag-blob
error: malformed object name --no-contains
error: unknown option `no-with'
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

error: unknown option `no-without'
usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
               <tagname> [<commit> | <object>]
   or: git tag -d <tagname>...
   or: git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
               [--points-at <object>] [--column[=<options>] | --no-column]
               [--create-reflog] [--sort=<key>] [--format=<format>]
               [--merged <commit>] [--no-merged <commit>] [<pattern>...]
   or: git tag -v [--format=<format>] <tagname>...

    -l, --list            list tag names
    -n[<n>]               print <n> lines of each tag message
    -d, --delete          delete tags
    -v, --verify          verify tags

Tag creation options
    -a, --annotate        annotated tag, needs a message
    -m, --message <message>
                          tag message
    -F, --file <file>     read message from file
    -e, --edit            force edit of tag message
    -s, --sign            annotated and GPG-signed tag
    --cleanup <mode>      how to strip spaces and #comments from message
    -u, --local-user <key-id>
                          use another key to sign the tag
    -f, --force           replace the tag if exists
    --create-reflog       create a reflog

Tag listing options
    --column[=<style>]    show tag list in columns
    --contains <commit>   print only tags that contain the commit
    --no-contains <commit>
                          print only tags that don't contain the commit
    --merged <commit>     print only tags that are merged
    --no-merged <commit>  print only tags that are not merged
    --sort <key>          field name to sort on
    --points-at <object>  print only tags of the object
    --format <format>     format to use for the output
    --color[=<when>]      respect format colors
    -i, --ignore-case     sorting and filtering are case insensitive

ok 158 - mixing incompatibles modes and options is forbidden

expecting success of 7004.159 'mixing incompatible modes with --contains is forbidden': 
		test_must_fail git tag -d --contains HEAD &&
		test_must_fail git tag -d --contains HEAD some-tag &&
		test_must_fail git tag -v --contains HEAD
	
fatal: the '--contains' option is only allowed in list mode
fatal: the '--contains' option is only allowed in list mode
fatal: the '--contains' option is only allowed in list mode
ok 159 - mixing incompatible modes with --contains is forbidden

expecting success of 7004.160 'Doing 'git tag --list-like --contains <commit> <pattern> is permitted': 
		git tag -n --contains HEAD HEAD &&
		git tag --contains HEAD HEAD &&
		git tag --contains
	
v4.0
ok 160 - Doing 'git tag --list-like --contains <commit> <pattern> is permitted

expecting success of 7004.161 'mixing incompatible modes with --with is forbidden': 
		test_must_fail git tag -d --with HEAD &&
		test_must_fail git tag -d --with HEAD some-tag &&
		test_must_fail git tag -v --with HEAD
	
fatal: the '--contains' option is only allowed in list mode
fatal: the '--contains' option is only allowed in list mode
fatal: the '--contains' option is only allowed in list mode
ok 161 - mixing incompatible modes with --with is forbidden

expecting success of 7004.162 'Doing 'git tag --list-like --with <commit> <pattern> is permitted': 
		git tag -n --with HEAD HEAD &&
		git tag --with HEAD HEAD &&
		git tag --with
	
v4.0
ok 162 - Doing 'git tag --list-like --with <commit> <pattern> is permitted

expecting success of 7004.163 'mixing incompatible modes with --no-contains is forbidden': 
		test_must_fail git tag -d --no-contains HEAD &&
		test_must_fail git tag -d --no-contains HEAD some-tag &&
		test_must_fail git tag -v --no-contains HEAD
	
fatal: the '--no-contains' option is only allowed in list mode
fatal: the '--no-contains' option is only allowed in list mode
fatal: the '--no-contains' option is only allowed in list mode
ok 163 - mixing incompatible modes with --no-contains is forbidden

expecting success of 7004.164 'Doing 'git tag --list-like --no-contains <commit> <pattern> is permitted': 
		git tag -n --no-contains HEAD HEAD &&
		git tag --no-contains HEAD HEAD &&
		git tag --no-contains
	
100
a1
aa1
annotated-tag
annotated-tag-edit
blank-annotated-tag
blank-signed-tag
blankfile-annotated-tag
blankfile-signed-tag
blanknonlfile-annotated-tag
blanknonlfile-signed-tag
blanks-annotated-tag
blanks-signed-tag
cba
comment-annotated-tag
comment-signed-tag
commentfile-annotated-tag
commentfile-signed-tag
commentnonlfile-annotated-tag
commentnonlfile-signed-tag
comments-annotated-tag
comments-signed-tag
confusing-pgp-message
empty-annotated-tag
empty-signed-tag
emptyfile-annotated-tag
emptyfile-signed-tag
file-annotated-tag
file-annotated-tag-edit
file-signed-tag
forcesignannotated-annotate
forcesignannotated-disabled
forcesignannotated-implied-sign
forcesignannotated-lightweight
forged-tag
gpgsign-enabled
implied-annotate
implied-sign
no-sign
non-annotated-tag
reuse
signed-tag
stag-lines
stag-one-line
stag-zero-lines
stdin-annotated-tag
stdin-signed-tag
t210
t211
tag-from-subdir
tag-from-subdir-2
tag-gpg-double-sig
tag-lines
tag-one-line
tag-signed-tag
tag-zero-lines
u-signed-tag
v0.2.1
v1.0
v1.0.1
v1.1.3
v2.0
v3.0
ok 164 - Doing 'git tag --list-like --no-contains <commit> <pattern> is permitted

expecting success of 7004.165 'mixing incompatible modes with --without is forbidden': 
		test_must_fail git tag -d --without HEAD &&
		test_must_fail git tag -d --without HEAD some-tag &&
		test_must_fail git tag -v --without HEAD
	
fatal: the '--no-contains' option is only allowed in list mode
fatal: the '--no-contains' option is only allowed in list mode
fatal: the '--no-contains' option is only allowed in list mode
ok 165 - mixing incompatible modes with --without is forbidden

expecting success of 7004.166 'Doing 'git tag --list-like --without <commit> <pattern> is permitted': 
		git tag -n --without HEAD HEAD &&
		git tag --without HEAD HEAD &&
		git tag --without
	
100
a1
aa1
annotated-tag
annotated-tag-edit
blank-annotated-tag
blank-signed-tag
blankfile-annotated-tag
blankfile-signed-tag
blanknonlfile-annotated-tag
blanknonlfile-signed-tag
blanks-annotated-tag
blanks-signed-tag
cba
comment-annotated-tag
comment-signed-tag
commentfile-annotated-tag
commentfile-signed-tag
commentnonlfile-annotated-tag
commentnonlfile-signed-tag
comments-annotated-tag
comments-signed-tag
confusing-pgp-message
empty-annotated-tag
empty-signed-tag
emptyfile-annotated-tag
emptyfile-signed-tag
file-annotated-tag
file-annotated-tag-edit
file-signed-tag
forcesignannotated-annotate
forcesignannotated-disabled
forcesignannotated-implied-sign
forcesignannotated-lightweight
forged-tag
gpgsign-enabled
implied-annotate
implied-sign
no-sign
non-annotated-tag
reuse
signed-tag
stag-lines
stag-one-line
stag-zero-lines
stdin-annotated-tag
stdin-signed-tag
t210
t211
tag-from-subdir
tag-from-subdir-2
tag-gpg-double-sig
tag-lines
tag-one-line
tag-signed-tag
tag-zero-lines
u-signed-tag
v0.2.1
v1.0
v1.0.1
v1.1.3
v2.0
v3.0
ok 166 - Doing 'git tag --list-like --without <commit> <pattern> is permitted

expecting success of 7004.167 'mixing incompatible modes with --merged is forbidden': 
		test_must_fail git tag -d --merged HEAD &&
		test_must_fail git tag -d --merged HEAD some-tag &&
		test_must_fail git tag -v --merged HEAD
	
fatal: the '--merged' option is only allowed in list mode
fatal: the '--merged' option is only allowed in list mode
fatal: the '--merged' option is only allowed in list mode
ok 167 - mixing incompatible modes with --merged is forbidden

expecting success of 7004.168 'Doing 'git tag --list-like --merged <commit> <pattern> is permitted': 
		git tag -n --merged HEAD HEAD &&
		git tag --merged HEAD HEAD &&
		git tag --merged
	
100
a1
aa1
annotated-tag
annotated-tag-edit
blank-annotated-tag
blank-signed-tag
blankfile-annotated-tag
blankfile-signed-tag
blanknonlfile-annotated-tag
blanknonlfile-signed-tag
blanks-annotated-tag
blanks-signed-tag
cba
comment-annotated-tag
comment-signed-tag
commentfile-annotated-tag
commentfile-signed-tag
commentnonlfile-annotated-tag
commentnonlfile-signed-tag
comments-annotated-tag
comments-signed-tag
confusing-pgp-message
empty-annotated-tag
empty-signed-tag
emptyfile-annotated-tag
emptyfile-signed-tag
file-annotated-tag
file-annotated-tag-edit
file-signed-tag
forcesignannotated-annotate
forcesignannotated-disabled
forcesignannotated-implied-sign
forcesignannotated-lightweight
forged-tag
gpgsign-enabled
implied-annotate
implied-sign
no-sign
non-annotated-tag
reuse
signed-tag
stag-lines
stag-one-line
stag-zero-lines
stdin-annotated-tag
stdin-signed-tag
t210
t211
tag-from-subdir
tag-from-subdir-2
tag-gpg-double-sig
tag-lines
tag-one-line
tag-signed-tag
tag-zero-lines
u-signed-tag
v0.2.1
v1.0
v1.0.1
v1.1.3
v2.0
v3.0
v4.0
ok 168 - Doing 'git tag --list-like --merged <commit> <pattern> is permitted

expecting success of 7004.169 'mixing incompatible modes with --no-merged is forbidden': 
		test_must_fail git tag -d --no-merged HEAD &&
		test_must_fail git tag -d --no-merged HEAD some-tag &&
		test_must_fail git tag -v --no-merged HEAD
	
fatal: the '--no-merged' option is only allowed in list mode
fatal: the '--no-merged' option is only allowed in list mode
fatal: the '--no-merged' option is only allowed in list mode
ok 169 - mixing incompatible modes with --no-merged is forbidden

expecting success of 7004.170 'Doing 'git tag --list-like --no-merged <commit> <pattern> is permitted': 
		git tag -n --no-merged HEAD HEAD &&
		git tag --no-merged HEAD HEAD &&
		git tag --no-merged
	
ok 170 - Doing 'git tag --list-like --no-merged <commit> <pattern> is permitted

expecting success of 7004.171 'mixing incompatible modes with --points-at is forbidden': 
		test_must_fail git tag -d --points-at HEAD &&
		test_must_fail git tag -d --points-at HEAD some-tag &&
		test_must_fail git tag -v --points-at HEAD
	
fatal: the '--points-at' option is only allowed in list mode
fatal: the '--points-at' option is only allowed in list mode
fatal: the '--points-at' option is only allowed in list mode
ok 171 - mixing incompatible modes with --points-at is forbidden

expecting success of 7004.172 'Doing 'git tag --list-like --points-at <commit> <pattern> is permitted': 
		git tag -n --points-at HEAD HEAD &&
		git tag --points-at HEAD HEAD &&
		git tag --points-at
	
v4.0
ok 172 - Doing 'git tag --list-like --points-at <commit> <pattern> is permitted

expecting success of 7004.173 '--points-at can be used in non-list mode': 
	echo v4.0 >expect &&
	git tag --points-at=v4.0 "v*" >actual &&
	test_cmp expect actual

ok 173 - --points-at can be used in non-list mode

expecting success of 7004.174 '--points-at is a synonym for --points-at HEAD': 
	echo v4.0 >expect &&
	git tag --points-at >actual &&
	test_cmp expect actual

ok 174 - --points-at is a synonym for --points-at HEAD

expecting success of 7004.175 '--points-at finds lightweight tags': 
	echo v4.0 >expect &&
	git tag --points-at v4.0 >actual &&
	test_cmp expect actual

ok 175 - --points-at finds lightweight tags

expecting success of 7004.176 '--points-at finds annotated tags of commits': 
	git tag -m "v4.0, annotated" annotated-v4.0 v4.0 &&
	echo annotated-v4.0 >expect &&
	git tag -l --points-at v4.0 "annotated*" >actual &&
	test_cmp expect actual

ok 176 - --points-at finds annotated tags of commits

expecting success of 7004.177 '--points-at finds annotated tags of tags': 
	git tag -m "describing the v4.0 tag object" \
		annotated-again-v4.0 annotated-v4.0 &&
	cat >expect <<-\EOF &&
	annotated-again-v4.0
	annotated-v4.0
	EOF
	git tag --points-at=annotated-v4.0 >actual &&
	test_cmp expect actual

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f annotated-again-v4.0 annotated-v4.0^{}
hint: Disable this message with "git config advice.nestedTag false"
ok 177 - --points-at finds annotated tags of tags

expecting success of 7004.178 'recursive tagging should give advice': 
	sed -e "s/|$//" <<-EOF >expect &&
	hint: You have created a nested tag. The object referred to by your new tag is
	hint: already a tag. If you meant to tag the object that it points to, use:
	hint: |
	hint: 	git tag -f nested annotated-v4.0^{}
	hint: Disable this message with "git config advice.nestedTag false"
	EOF
	git tag -m nested nested annotated-v4.0 2>actual &&
	test_cmp expect actual

ok 178 - recursive tagging should give advice

expecting success of 7004.179 'multiple --points-at are OR-ed together': 
	cat >expect <<-\EOF &&
	v2.0
	v3.0
	EOF
	git tag --points-at=v2.0 --points-at=v3.0 >actual &&
	test_cmp expect actual

ok 179 - multiple --points-at are OR-ed together

expecting success of 7004.180 'lexical sort': 
	git tag foo1.3 &&
	git tag foo1.6 &&
	git tag foo1.10 &&
	git tag -l --sort=refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.10
	foo1.3
	foo1.6
	EOF
	test_cmp expect actual

ok 180 - lexical sort

expecting success of 7004.181 'version sort': 
	git tag -l --sort=version:refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.3
	foo1.6
	foo1.10
	EOF
	test_cmp expect actual

ok 181 - version sort

expecting success of 7004.182 'reverse version sort': 
	git tag -l --sort=-version:refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.10
	foo1.6
	foo1.3
	EOF
	test_cmp expect actual

ok 182 - reverse version sort

expecting success of 7004.183 'reverse lexical sort': 
	git tag -l --sort=-refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.6
	foo1.3
	foo1.10
	EOF
	test_cmp expect actual

ok 183 - reverse lexical sort

expecting success of 7004.184 'configured lexical sort': 
	test_config tag.sort "v:refname" &&
	git tag -l "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.3
	foo1.6
	foo1.10
	EOF
	test_cmp expect actual

ok 184 - configured lexical sort

expecting success of 7004.185 'option override configured sort': 
	test_config tag.sort "v:refname" &&
	git tag -l --sort=-refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.6
	foo1.3
	foo1.10
	EOF
	test_cmp expect actual

ok 185 - option override configured sort

expecting success of 7004.186 'invalid sort parameter on command line': 
	test_must_fail git tag -l --sort=notvalid "foo*" >actual

fatal: unknown field name: notvalid
ok 186 - invalid sort parameter on command line

expecting success of 7004.187 'invalid sort parameter in configuratoin': 
	test_config tag.sort "v:notvalid" &&
	test_must_fail git tag -l "foo*"

fatal: unknown field name: notvalid
ok 187 - invalid sort parameter in configuratoin

expecting success of 7004.188 'version sort with prerelease reordering': 
	test_config versionsort.prereleaseSuffix -rc &&
	git tag foo1.6-rc1 &&
	git tag foo1.6-rc2 &&
	git tag -l --sort=version:refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.3
	foo1.6-rc1
	foo1.6-rc2
	foo1.6
	foo1.10
	EOF
	test_cmp expect actual

ok 188 - version sort with prerelease reordering

expecting success of 7004.189 'reverse version sort with prerelease reordering': 
	test_config versionsort.prereleaseSuffix -rc &&
	git tag -l --sort=-version:refname "foo*" >actual &&
	cat >expect <<-\EOF &&
	foo1.10
	foo1.6
	foo1.6-rc2
	foo1.6-rc1
	foo1.3
	EOF
	test_cmp expect actual

ok 189 - reverse version sort with prerelease reordering

expecting success of 7004.190 'version sort with prerelease reordering and common leading character': 
	test_config versionsort.prereleaseSuffix -before &&
	git tag foo1.7-before1 &&
	git tag foo1.7 &&
	git tag foo1.7-after1 &&
	git tag -l --sort=version:refname "foo1.7*" >actual &&
	cat >expect <<-\EOF &&
	foo1.7-before1
	foo1.7
	foo1.7-after1
	EOF
	test_cmp expect actual

ok 190 - version sort with prerelease reordering and common leading character

expecting success of 7004.191 'version sort with prerelease reordering, multiple suffixes and common leading character': 
	test_config versionsort.prereleaseSuffix -before &&
	git config --add versionsort.prereleaseSuffix -after &&
	git tag -l --sort=version:refname "foo1.7*" >actual &&
	cat >expect <<-\EOF &&
	foo1.7-before1
	foo1.7-after1
	foo1.7
	EOF
	test_cmp expect actual

ok 191 - version sort with prerelease reordering, multiple suffixes and common leading character

expecting success of 7004.192 'version sort with prerelease reordering, multiple suffixes match the same tag': 
	test_config versionsort.prereleaseSuffix -bar &&
	git config --add versionsort.prereleaseSuffix -foo-baz &&
	git config --add versionsort.prereleaseSuffix -foo-bar &&
	git tag foo1.8-foo-bar &&
	git tag foo1.8-foo-baz &&
	git tag foo1.8 &&
	git tag -l --sort=version:refname "foo1.8*" >actual &&
	cat >expect <<-\EOF &&
	foo1.8-foo-baz
	foo1.8-foo-bar
	foo1.8
	EOF
	test_cmp expect actual

ok 192 - version sort with prerelease reordering, multiple suffixes match the same tag

expecting success of 7004.193 'version sort with prerelease reordering, multiple suffixes match starting at the same position': 
	test_config versionsort.prereleaseSuffix -pre &&
	git config --add versionsort.prereleaseSuffix -prerelease &&
	git tag foo1.9-pre1 &&
	git tag foo1.9-pre2 &&
	git tag foo1.9-prerelease1 &&
	git tag -l --sort=version:refname "foo1.9*" >actual &&
	cat >expect <<-\EOF &&
	foo1.9-pre1
	foo1.9-pre2
	foo1.9-prerelease1
	EOF
	test_cmp expect actual

ok 193 - version sort with prerelease reordering, multiple suffixes match starting at the same position

expecting success of 7004.194 'version sort with general suffix reordering': 
	test_config versionsort.suffix -alpha &&
	git config --add versionsort.suffix -beta &&
	git config --add versionsort.suffix ""  &&
	git config --add versionsort.suffix -gamma &&
	git config --add versionsort.suffix -delta &&
	git tag foo1.10-alpha &&
	git tag foo1.10-beta &&
	git tag foo1.10-gamma &&
	git tag foo1.10-delta &&
	git tag foo1.10-unlisted-suffix &&
	git tag -l --sort=version:refname "foo1.10*" >actual &&
	cat >expect <<-\EOF &&
	foo1.10-alpha
	foo1.10-beta
	foo1.10
	foo1.10-unlisted-suffix
	foo1.10-gamma
	foo1.10-delta
	EOF
	test_cmp expect actual

ok 194 - version sort with general suffix reordering

expecting success of 7004.195 'versionsort.suffix overrides versionsort.prereleaseSuffix': 
	test_config versionsort.suffix -before &&
	test_config versionsort.prereleaseSuffix -after &&
	git tag -l --sort=version:refname "foo1.7*" >actual &&
	cat >expect <<-\EOF &&
	foo1.7-before1
	foo1.7
	foo1.7-after1
	EOF
	test_cmp expect actual

warning: ignoring versionsort.prereleasesuffix because versionsort.suffix is set
ok 195 - versionsort.suffix overrides versionsort.prereleaseSuffix

expecting success of 7004.196 'version sort with very long prerelease suffix': 
	test_config versionsort.prereleaseSuffix -very-looooooooooooooooooooooooong-prerelease-suffix &&
	git tag -l --sort=version:refname

100
a1
aa1
annotated-again-v4.0
annotated-tag
annotated-tag-edit
annotated-v4.0
blank-annotated-tag
blank-signed-tag
blankfile-annotated-tag
blankfile-signed-tag
blanknonlfile-annotated-tag
blanknonlfile-signed-tag
blanks-annotated-tag
blanks-signed-tag
blob-signed-tag
cba
comment-annotated-tag
comment-signed-tag
commentfile-annotated-tag
commentfile-signed-tag
commentnonlfile-annotated-tag
commentnonlfile-signed-tag
comments-annotated-tag
comments-signed-tag
confusing-pgp-message
empty-annotated-tag
empty-signed-tag
emptyfile-annotated-tag
emptyfile-signed-tag
file-annotated-tag
file-annotated-tag-edit
file-signed-tag
foo1.3
foo1.6
foo1.6-rc1
foo1.6-rc2
foo1.7
foo1.7-after1
foo1.7-before1
foo1.8
foo1.8-foo-bar
foo1.8-foo-baz
foo1.9-pre1
foo1.9-pre2
foo1.9-prerelease1
foo1.10
foo1.10-alpha
foo1.10-beta
foo1.10-delta
foo1.10-gamma
foo1.10-unlisted-suffix
forcesignannotated-annotate
forcesignannotated-disabled
forcesignannotated-implied-sign
forcesignannotated-lightweight
forged-tag
gpgsign-enabled
implied-annotate
implied-sign
nested
no-sign
non-annotated-tag
reuse
signed-tag
stag-lines
stag-one-line
stag-zero-lines
stdin-annotated-tag
stdin-signed-tag
t210
t211
tag-blob
tag-from-subdir
tag-from-subdir-2
tag-gpg-double-sig
tag-lines
tag-one-line
tag-signed-tag
tag-zero-lines
tree-signed-tag
u-signed-tag
v0.2.1
v1.0
v1.0.1
v1.1.3
v2.0
v3.0
v4.0
ok 196 - version sort with very long prerelease suffix

checking prerequisite: ULIMIT_STACK_SIZE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_STACK_SIZE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-ULIMIT_STACK_SIZE" &&
	test_have_prereq !HPPA,!MINGW,!CYGWIN &&
	run_with_limited_stack true

)
prerequisite ULIMIT_STACK_SIZE ok
expecting success of 7004.197 '--contains and --no-contains work in a deep repo': 
	i=1 &&
	while test $i -lt 8000
	do
		echo "commit refs/heads/main
committer A U Thor <author@example.com> $((1000000000 + $i * 100)) +0200
data <<EOF
commit #$i
EOF" &&
		if test $i = 1
		then
			echo "from refs/heads/main^0"
		fi &&
		i=$(($i + 1)) || return 1
	done | git fast-import &&
	git checkout main &&
	git tag far-far-away HEAD^ &&
	run_with_limited_stack git tag --contains HEAD >actual &&
	test_must_be_empty actual &&
	run_with_limited_stack git tag --no-contains HEAD >actual &&
	test_line_count "-gt" 10 actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:      10000
Total objects:         7999 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:         7999 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2758 KiB
       pools:          2133 KiB
     objects:           625 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =       8000
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =    1177891 /    1177891
---------------------------------------------------------------------

Switched to branch 'main'
ok 197 - --contains and --no-contains work in a deep repo

expecting success of 7004.198 '--format should list tags as per format given': 
	cat >expect <<-\EOF &&
	refname : refs/tags/v1.0
	refname : refs/tags/v1.0.1
	refname : refs/tags/v1.1.3
	EOF
	git tag -l --format="refname : %(refname)" "v1*" >actual &&
	test_cmp expect actual

ok 198 - --format should list tags as per format given

expecting success of 7004.199 'git tag -l with --format="%(rest)" must fail': 
	test_must_fail git tag -l --format="%(rest)" "v1*"

fatal: this command reject atom %(rest)
ok 199 - git tag -l with --format="%(rest)" must fail

expecting success of 7004.200 'set up color tests': 
	echo "<RED>v1.0<RESET>" >expect.color &&
	echo "v1.0" >expect.bare &&
	color_args="--format=%(color:red)%(refname:short) --list v1.0"

ok 200 - set up color tests

expecting success of 7004.201 '%(color) omitted without tty': 
	TERM=vt100 git tag $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.bare actual

ok 201 - %(color) omitted without tty

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 7004.202 '%(color) present with tty': 
	test_terminal git tag $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.color actual

ok 202 - %(color) present with tty

expecting success of 7004.203 '--color overrides auto-color': 
	git tag --color $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.color actual

ok 203 - --color overrides auto-color

expecting success of 7004.204 'color.ui=always overrides auto-color': 
	git -c color.ui=always tag $color_args >actual.raw &&
	test_decode_color <actual.raw >actual &&
	test_cmp expect.color actual

ok 204 - color.ui=always overrides auto-color

expecting success of 7004.205 'setup --merged test tags': 
	git tag mergetest-1 HEAD~2 &&
	git tag mergetest-2 HEAD~1 &&
	git tag mergetest-3 HEAD

ok 205 - setup --merged test tags

expecting success of 7004.206 '--merged can be used in non-list mode': 
	cat >expect <<-\EOF &&
	mergetest-1
	mergetest-2
	EOF
	git tag --merged=mergetest-2 "mergetest*" >actual &&
	test_cmp expect actual

ok 206 - --merged can be used in non-list mode

expecting success of 7004.207 '--merged is compatible with --no-merged': 
	git tag --merged HEAD --no-merged HEAD

ok 207 - --merged is compatible with --no-merged

expecting success of 7004.208 '--merged shows merged tags': 
	cat >expect <<-\EOF &&
	mergetest-1
	mergetest-2
	EOF
	git tag -l --merged=mergetest-2 mergetest-* >actual &&
	test_cmp expect actual

ok 208 - --merged shows merged tags

expecting success of 7004.209 '--no-merged show unmerged tags': 
	cat >expect <<-\EOF &&
	mergetest-3
	EOF
	git tag -l --no-merged=mergetest-2 mergetest-* >actual &&
	test_cmp expect actual

ok 209 - --no-merged show unmerged tags

expecting success of 7004.210 '--no-merged can be used in non-list mode': 
	git tag --no-merged=mergetest-2 mergetest-* >actual &&
	test_cmp expect actual

ok 210 - --no-merged can be used in non-list mode

expecting success of 7004.211 'ambiguous branch/tags not marked': 
	git tag ambiguous &&
	git branch ambiguous &&
	echo ambiguous >expect &&
	git tag -l ambiguous >actual &&
	test_cmp expect actual

ok 211 - ambiguous branch/tags not marked

expecting success of 7004.212 '--contains combined with --no-contains': 
	(
		git init no-contains &&
		cd no-contains &&
		test_commit v0.1 &&
		test_commit v0.2 &&
		test_commit v0.3 &&
		test_commit v0.4 &&
		test_commit v0.5 &&
		cat >expected <<-\EOF &&
		v0.2
		v0.3
		v0.4
		EOF
		git tag --contains v0.2 --no-contains v0.5 >actual &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7004-tag/no-contains/.git/
[main (root-commit) fdf35a1] v0.1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v0.1.t
[main 82f1d18] v0.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v0.2.t
[main 4c097b6] v0.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v0.3.t
[main 8804202] v0.4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v0.4.t
[main 947a091] v0.5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 v0.5.t
ok 212 - --contains combined with --no-contains

expecting success of 7004.213 'Does --[no-]contains stop at commits? Yes!': 
	cd no-contains &&
	blob=$(git rev-parse v0.3:v0.3.t) &&
	tree=$(git rev-parse v0.3^{tree}) &&
	git tag tag-blob $blob &&
	git tag tag-tree $tree &&
	git tag --contains v0.3 >actual &&
	cat >expected <<-\EOF &&
	v0.3
	v0.4
	v0.5
	EOF
	test_cmp expected actual &&
	git tag --no-contains v0.3 >actual &&
	cat >expected <<-\EOF &&
	v0.1
	v0.2
	EOF
	test_cmp expected actual

ok 213 - Does --[no-]contains stop at commits? Yes!

# passed all 213 test(s)
1..213
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7007-show.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7007-show/.git/
expecting success of 7007.1 'setup': 
	echo hello world >foo &&
	H=$(git hash-object -w foo) &&
	git tag -a foo-tag -m "Tags $H" $H &&
	HH=$(expr "$H" : "\(..\)") &&
	H38=$(expr "$H" : "..\(.*\)") &&
	rm -f .git/objects/$HH/$H38

ok 1 - setup

expecting success of 7007.2 'showing a tag that point at a missing object': 
	test_must_fail git --no-pager show foo-tag

error: could not read object 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
tag foo-tag
Tagger: C O Mitter <committer@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

Tags 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
ok 2 - showing a tag that point at a missing object

expecting success of 7007.3 'set up a bit of history': 
	test_commit main1 &&
	test_commit main2 &&
	test_commit main3 &&
	git tag -m "annotated tag" annotated &&
	git checkout -b side HEAD^^ &&
	test_commit side2 &&
	test_commit side3 &&
	test_merge merge main3

[master (root-commit) 9ca29bf] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1.t
[master 6983cd6] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2.t
[master 75daec8] main3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main3.t
Switched to a new branch 'side'
[side 2e812aa] side2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side2.t
[side 42b83a8] side3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 side3.t
Merge made by the 'ort' strategy.
 main2.t | 1 +
 main3.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main2.t
 create mode 100644 main3.t
ok 3 - set up a bit of history

expecting success of 7007.4 'showing two commits': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main2)
	commit $(git rev-parse main3)
	EOF
	git show main2 main3 >actual &&
	grep ^commit actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 4 - showing two commits

expecting success of 7007.5 'showing a tree': 
	cat >expected <<-EOF &&
	tree main1:

	main1.t
	EOF
	git show main1: >actual &&
	test_cmp expected actual

ok 5 - showing a tree

expecting success of 7007.6 'showing two trees': 
	cat >expected <<-EOF &&
	tree main1^{tree}

	main1.t

	tree main2^{tree}

	main1.t
	main2.t
	EOF
	git show main1^{tree} main2^{tree} >actual &&
	test_cmp expected actual

ok 6 - showing two trees

expecting success of 7007.7 'showing a trees is not recursive': 
	git worktree add not-recursive main1 &&
	mkdir not-recursive/a &&
	test_commit -C not-recursive a/file &&
	cat >expected <<-EOF &&
	tree HEAD^{tree}

	a/
	main1.t
	EOF
	git -C not-recursive show HEAD^{tree} >actual &&
	test_cmp expected actual

Preparing worktree (detached HEAD 9ca29bf)
HEAD is now at 9ca29bf main1
[detached HEAD 2da4daa] a/file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a/file.t
ok 7 - showing a trees is not recursive

expecting success of 7007.8 'showing a range walks (linear)': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main3)
	commit $(git rev-parse main2)
	EOF
	git show main1..main3 >actual &&
	grep ^commit actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 8 - showing a range walks (linear)

expecting success of 7007.9 'showing a range walks (Y shape, ^ first)': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main3)
	commit $(git rev-parse main2)
	EOF
	git show ^side3 main3 >actual &&
	grep ^commit actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 9 - showing a range walks (Y shape, ^ first)

expecting success of 7007.10 'showing a range walks (Y shape, ^ last)': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main3)
	commit $(git rev-parse main2)
	EOF
	git show main3 ^side3 >actual &&
	grep ^commit actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 10 - showing a range walks (Y shape, ^ last)

expecting success of 7007.11 'showing with -N walks': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main3)
	commit $(git rev-parse main2)
	EOF
	git show -2 main3 >actual &&
	grep ^commit actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 11 - showing with -N walks

expecting success of 7007.12 'showing annotated tag': 
	cat >expect <<-EOF &&
	tag annotated
	commit $(git rev-parse annotated^{commit})
	EOF
	git show annotated >actual &&
	grep -E "^(commit|tag)" actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 12 - showing annotated tag

expecting success of 7007.13 'showing annotated tag plus commit': 
	cat >expect <<-EOF &&
	tag annotated
	commit $(git rev-parse annotated^{commit})
	commit $(git rev-parse side3)
	EOF
	git show annotated side3 >actual &&
	grep -E "^(commit|tag)" actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 13 - showing annotated tag plus commit

expecting success of 7007.14 'showing range': 
	cat >expect <<-EOF &&
	commit $(git rev-parse main3)
	commit $(git rev-parse main2)
	EOF
	git show ^side3 annotated >actual &&
	grep -E "^(commit|tag)" actual >actual.filtered &&
	test_cmp expect actual.filtered

ok 14 - showing range

expecting success of 7007.15 '-s suppresses diff': 
	cat >expect <<-\EOF &&
	merge
	main3
	EOF
	git show -s --format=%s merge main3 >actual &&
	test_cmp expect actual

ok 15 - -s suppresses diff

expecting success of 7007.16 '--quiet suppresses diff': 
	echo main3 >expect &&
	git show --quiet --format=%s main3 >actual &&
	test_cmp expect actual

ok 16 - --quiet suppresses diff

expecting success of 7007.17 'show --graph is forbidden': 
  test_must_fail git show --graph HEAD

fatal: options '--no-walk' and '--graph' cannot be used together
ok 17 - show --graph is forbidden

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7008-filter-branch-null-sha1.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7008-filter-branch-null-sha1/.git/
expecting success of 7008.1 'setup: base commits': 
	test_commit one &&
	test_commit two &&
	test_commit three

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 139b20d] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master 7c7cd71] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
ok 1 - setup: base commits

expecting success of 7008.2 'setup: a commit with a bogus null sha1 in the tree': 
	{
		git ls-tree HEAD &&
		printf "160000 commit $ZERO_OID\\tbroken\\n"
	} >broken-tree &&
	echo "add broken entry" >msg &&

	tree=$(git mktree <broken-tree) &&
	test_tick &&
	commit=$(git commit-tree $tree -p HEAD <msg) &&
	git update-ref HEAD "$commit"

ok 2 - setup: a commit with a bogus null sha1 in the tree

expecting success of 7008.3 'setup: bring HEAD and index in sync': 
	test_tick &&
	git commit -a -m "back to normal"

[master 6fc1982] back to normal
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 160000 broken
ok 3 - setup: bring HEAD and index in sync

expecting success of 7008.4 'noop filter-branch complains': 
	test_must_fail git filter-branch \
		--force --prune-empty \
		--index-filter "true"


Rewrite d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 (1/5) (0 seconds passed, remaining 0 predicted)    
Rewrite 139b20d8e6c5b496de61f033f642d0e3dbff528d (2/5) (0 seconds passed, remaining 0 predicted)    
Rewrite 7c7cd714e262561f73f3079dfca4e8724682ac21 (3/5) (0 seconds passed, remaining 0 predicted)    
Rewrite e3ed0c3a94f05540151bd8cb9ac647b8777964a6 (4/5) (1 seconds passed, remaining 0 predicted)    warning: cache entry has null sha1: broken
error: invalid object 160000 0000000000000000000000000000000000000000 for 'broken'
fatal: git-write-tree: error building trees
fatal: not a valid object name 
could not write rewritten commit
ok 4 - noop filter-branch complains

expecting success of 7008.5 'filter commands are still checked': 
	test_must_fail git filter-branch \
		--force --prune-empty \
		--index-filter "git rm --cached --ignore-unmatch three.t"


Rewrite d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 (1/5) (0 seconds passed, remaining 0 predicted)    
Rewrite 139b20d8e6c5b496de61f033f642d0e3dbff528d (2/5) (1 seconds passed, remaining 1 predicted)    
Rewrite 7c7cd714e262561f73f3079dfca4e8724682ac21 (2/5) (1 seconds passed, remaining 1 predicted)    rm 'three.t'

Rewrite e3ed0c3a94f05540151bd8cb9ac647b8777964a6 (2/5) (1 seconds passed, remaining 1 predicted)    warning: cache entry has null sha1: broken
error: cache entry has null sha1: broken
fatal: Unable to write new index file
rm 'three.t'
index filter failed: git rm --cached --ignore-unmatch three.t
ok 5 - filter commands are still checked

expecting success of 7008.6 'removing the broken entry works': 
	echo three >expect &&
	git filter-branch \
		--force --prune-empty \
		--index-filter "git rm --cached --ignore-unmatch broken" &&
	git log -1 --format=%s >actual &&
	test_cmp expect actual


Rewrite d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 (1/5) (0 seconds passed, remaining 0 predicted)    
Rewrite 139b20d8e6c5b496de61f033f642d0e3dbff528d (2/5) (0 seconds passed, remaining 0 predicted)    
Rewrite 7c7cd714e262561f73f3079dfca4e8724682ac21 (3/5) (0 seconds passed, remaining 0 predicted)    
Rewrite e3ed0c3a94f05540151bd8cb9ac647b8777964a6 (4/5) (0 seconds passed, remaining 0 predicted)    warning: cache entry has null sha1: broken
rm 'broken'

Rewrite 6fc1982a7cbeec7380180353ef341fd996ac21f7 (5/5) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/master' was rewritten
ok 6 - removing the broken entry works

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t6438-submodule-directory-file-conflicts.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/.git/
expecting success of 6438.1 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 1 - git_test_func: added submodule creates empty directory

expecting success of 6438.2 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 2 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 6438.3 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 3 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 6438.4 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 4 - git_test_func: replace directory with submodule

expecting success of 6438.5 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 5 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 6438.6 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 6 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 6438.7 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 7 - git_test_func: replace submodule with a directory must fail

expecting success of 6438.8 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 8 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 6438.9 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge replace_sub1_with_file
not ok 9 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 6438.10 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge replace_sub1_with_file
not ok 10 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 6438.11 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 11 - git_test_func: modified submodule does not update submodule work tree

expecting success of 6438.12 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 12 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 6438.13 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 13 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 6438.14 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 14 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 6438.15 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 15 - git_test_func: added submodule creates empty directory

expecting success of 6438.16 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 16 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 6438.17 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 17 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 6438.18 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 18 - git_test_func: replace directory with submodule

expecting success of 6438.19 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 19 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 6438.20 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 20 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 6438.21 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 21 - git_test_func: replace submodule with a directory must fail

expecting success of 6438.22 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 22 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 6438.23 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --ff replace_sub1_with_file
not ok 23 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 6438.24 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --ff replace_sub1_with_file
not ok 24 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 6438.25 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 25 - git_test_func: modified submodule does not update submodule work tree

expecting success of 6438.26 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 26 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 6438.27 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 27 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 6438.28 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 28 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 6438.29 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 29 - git_test_func: added submodule creates empty directory

expecting success of 6438.30 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Updating 27611a5..09bcf53
Fast-forward
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 30 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 6438.31 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Updating 2364f5a..8b6fdfc
Fast-forward
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 31 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 6438.32 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Updating cb28587..a2e65d5
Fast-forward
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 32 - git_test_func: replace directory with submodule

expecting success of 6438.33 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 33 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 6438.34 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Updating 09bcf53..d6ba723
Fast-forward
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 34 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 6438.35 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 35 - git_test_func: replace submodule with a directory must fail

expecting success of 6438.36 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Updating 09bcf53..cb28587
ok 36 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 6438.37 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --ff-only replace_sub1_with_file
not ok 37 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 6438.38 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Updating 09bcf53..2364f5a
Fast-forward
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --ff-only replace_sub1_with_file
not ok 38 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 6438.39 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Updating 09bcf53..cb2bda7
Fast-forward
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 39 - git_test_func: modified submodule does not update submodule work tree

expecting success of 6438.40 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Updating 09bcf53..e6169bf
Fast-forward
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 40 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 6438.41 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Updating e6169bf..3036e4e
Fast-forward
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 41 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 6438.42 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Updating 27611a5..09bcf53
ok 42 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 6438.43 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 43 - git_test_func: added submodule creates empty directory

expecting success of 6438.44 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 44 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 6438.45 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ++++
 sub1        | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 45 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 6438.46 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ++++
 sub1/file1  | 1 -
 sub1/file2  | 1 -
 sub1/file3  | 1 -
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 46 - git_test_func: replace directory with submodule

expecting success of 6438.47 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Merge made by the 'ort' strategy.
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 47 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 6438.48 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
Merge made by the 'ort' strategy.
 .gitmodules | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 .gitmodules
ok 48 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 6438.49 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 49 - git_test_func: replace submodule with a directory must fail

expecting success of 6438.50 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: The following untracked working tree files would be overwritten by merge:
	sub1/file1
	sub1/file2
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 50 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 6438.51 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --no-ff replace_sub1_with_file
not ok 51 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 6438.52 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
Merge made by the 'ort' strategy.
 .gitmodules | 4 ----
 sub1        | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
test_must_fail: command succeeded: git merge --no-ff replace_sub1_with_file
not ok 52 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 6438.53 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Merge made by the 'ort' strategy.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 53 - git_test_func: modified submodule does not update submodule work tree

expecting success of 6438.54 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
Merge made by the 'ort' strategy.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 54 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 6438.55 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Merge made by the 'ort' strategy.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t6438-submodule-directory-file-conflicts/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 55 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 6438.56 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: The following untracked working tree files would be overwritten by merge:
	sub1
Please move or remove them before you merge.
Aborting
Merge with strategy ort failed.
ok 56 - git_test_func: added submodule doesn't remove untracked unignored file with same name

# still have 8 known breakage(s)
# passed all remaining 48 test(s)
1..56
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7010-setup.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7010-setup/.git/
expecting success of 7010.1 'setup': 

	mkdir -p a/b/c a/e &&
	D=$(pwd) &&
	>a/b/c/d &&
	>a/e/f


ok 1 - setup

expecting success of 7010.2 'git add (absolute)': 

	git add "$D/a/b/c/d" &&
	git ls-files >current &&
	echo a/b/c/d >expect &&
	test_cmp expect current


ok 2 - git add (absolute)

expecting success of 7010.3 'git add (funny relative)': 

	rm -f .git/index &&
	(
		cd a/b &&
		git add "../e/./f"
	) &&
	git ls-files >current &&
	echo a/e/f >expect &&
	test_cmp expect current


ok 3 - git add (funny relative)

expecting success of 7010.4 'git rm (absolute)': 

	rm -f .git/index &&
	git add a &&
	git rm -f --cached "$D/a/b/c/d" &&
	git ls-files >current &&
	echo a/e/f >expect &&
	test_cmp expect current


rm 'a/b/c/d'
ok 4 - git rm (absolute)

expecting success of 7010.5 'git rm (funny relative)': 

	rm -f .git/index &&
	git add a &&
	(
		cd a/b &&
		git rm -f --cached "../e/./f"
	) &&
	git ls-files >current &&
	echo a/b/c/d >expect &&
	test_cmp expect current


rm 'a/e/f'
ok 5 - git rm (funny relative)

expecting success of 7010.6 'git ls-files (absolute)': 

	rm -f .git/index &&
	git add a &&
	git ls-files "$D/a/e/../b" >current &&
	echo a/b/c/d >expect &&
	test_cmp expect current


ok 6 - git ls-files (absolute)

expecting success of 7010.7 'git ls-files (relative #1)': 

	rm -f .git/index &&
	git add a &&
	(
		cd a/b &&
		git ls-files "../b/c"
	)  >current &&
	echo c/d >expect &&
	test_cmp expect current


ok 7 - git ls-files (relative #1)

expecting success of 7010.8 'git ls-files (relative #2)': 

	rm -f .git/index &&
	git add a &&
	(
		cd a/b &&
		git ls-files --full-name "../e/f"
	)  >current &&
	echo a/e/f >expect &&
	test_cmp expect current


ok 8 - git ls-files (relative #2)

expecting success of 7010.9 'git ls-files (relative #3)': 

	rm -f .git/index &&
	git add a &&
	(
		cd a/b &&
		git ls-files "../e/f"
	)  >current &&
	echo ../e/f >expect &&
	test_cmp expect current


ok 9 - git ls-files (relative #3)

expecting success of 7010.10 'commit using absolute path names': 
	git commit -m "foo" &&
	echo aa >>a/b/c/d &&
	git commit -m "aa" "$(pwd)/a/b/c/d"

[master (root-commit) 2d7d991] foo
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a/b/c/d
 create mode 100644 a/e/f
[master 2049ba0] aa
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 10 - commit using absolute path names

expecting success of 7010.11 'log using absolute path names': 
	echo bb >>a/b/c/d &&
	git commit -m "bb" "$(pwd)/a/b/c/d" &&

	git log a/b/c/d >f1.txt &&
	git log "$(pwd)/a/b/c/d" >f2.txt &&
	test_cmp f1.txt f2.txt

[master 8d92247] bb
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 11 - log using absolute path names

expecting success of 7010.12 'blame using absolute path names': 
	git blame a/b/c/d >f1.txt &&
	git blame "$(pwd)/a/b/c/d" >f2.txt &&
	test_cmp f1.txt f2.txt

ok 12 - blame using absolute path names

expecting success of 7010.13 'setup deeper work tree': 
	test_create_repo tester

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7010-setup/tester/.git/
ok 13 - setup deeper work tree

expecting success of 7010.14 'add a directory outside the work tree': (
	cd tester &&
	d1="$(cd .. && pwd)" &&
	test_must_fail git add "$d1"
)
fatal: /<<PKGBUILDDIR>>/t/trash directory.t7010-setup: '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/tester'
ok 14 - add a directory outside the work tree

expecting success of 7010.15 'add a file outside the work tree, nasty case 1': (
	cd tester &&
	f="$(pwd)x" &&
	echo "$f" &&
	touch "$f" &&
	test_must_fail git add "$f"
)
/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testerx
fatal: /<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testerx: '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testerx' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/tester'
ok 15 - add a file outside the work tree, nasty case 1

expecting success of 7010.16 'add a file outside the work tree, nasty case 2': (
	cd tester &&
	f="$(pwd | sed "s/.$//")x" &&
	echo "$f" &&
	touch "$f" &&
	test_must_fail git add "$f"
)
/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testex
fatal: /<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testex: '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/testex' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7010-setup/tester'
ok 16 - add a file outside the work tree, nasty case 2

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7011-skip-worktree-reading.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7011-skip-worktree-reading/.git/
expecting success of 7011.1 'setup': 
	test_commit init &&
	mkdir sub &&
	touch ./1 ./2 sub/1 sub/2 &&
	git add 1 2 sub/1 sub/2 &&
	git update-index --skip-worktree 1 sub/1 &&
	git ls-files -t > result &&
	test_cmp expect.skip result

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
ok 1 - setup

expecting success of 7011.2 'update-index': 
	setup_absent &&
	git update-index 1 &&
	test_absent

ok 2 - update-index

expecting success of 7011.3 'update-index': 
	setup_dirty &&
	git update-index 1 &&
	test_dirty

ok 3 - update-index

expecting success of 7011.4 'update-index --remove': 
	setup_absent &&
	git update-index --remove 1 &&
	test -z "$(git ls-files 1)" &&
	test ! -f 1

ok 4 - update-index --remove

expecting success of 7011.5 'update-index --remove': 
	setup_dirty &&
	git update-index --remove 1 &&
	test -z "$(git ls-files 1)" &&
	echo dirty > expected &&
	test_cmp expected 1

ok 5 - update-index --remove

expecting success of 7011.6 'ls-files --deleted': 
	setup_absent &&
	test -z "$(git ls-files -d)"

ok 6 - ls-files --deleted

expecting success of 7011.7 'ls-files --deleted': 
	setup_dirty &&
	test -z "$(git ls-files -d)"

ok 7 - ls-files --deleted

expecting success of 7011.8 'ls-files --modified': 
	setup_absent &&
	test -z "$(git ls-files -m)"

ok 8 - ls-files --modified

expecting success of 7011.9 'ls-files --modified': 
	setup_dirty &&
	test -z "$(git ls-files -m)"

ok 9 - ls-files --modified

expecting success of 7011.10 'diff-index does not examine skip-worktree absent entries': 
	setup_absent &&
	git diff-index HEAD -- 1 > result &&
	test_cmp expected result

ok 10 - diff-index does not examine skip-worktree absent entries

expecting success of 7011.11 'diff-index does not examine skip-worktree dirty entries': 
	setup_dirty &&
	git diff-index HEAD -- 1 > result &&
	test_cmp expected result

ok 11 - diff-index does not examine skip-worktree dirty entries

expecting success of 7011.12 'diff-files does not examine skip-worktree absent entries': 
	setup_absent &&
	test -z "$(git diff-files -- one)"

ok 12 - diff-files does not examine skip-worktree absent entries

expecting success of 7011.13 'diff-files does not examine skip-worktree dirty entries': 
	setup_dirty &&
	test -z "$(git diff-files -- one)"

ok 13 - diff-files does not examine skip-worktree dirty entries

expecting success of 7011.14 'commit on skip-worktree absent entries': 
	git reset &&
	setup_absent &&
	test_must_fail git commit -m null 1

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	2
	expect.full
	expect.skip
	expected
	result
	sub/

nothing added to commit but untracked files present (use "git add" to track)
ok 14 - commit on skip-worktree absent entries

expecting success of 7011.15 'commit on skip-worktree dirty entries': 
	git reset &&
	setup_dirty &&
	test_must_fail git commit -m null 1

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	1
	2
	expect.full
	expect.skip
	expected
	result
	sub/

nothing added to commit but untracked files present (use "git add" to track)
ok 15 - commit on skip-worktree dirty entries

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7012-skip-worktree-writing.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7012-skip-worktree-writing/.git/
expecting success of 7012.1 'setup': 
	test_commit init &&
	echo modified >> init.t &&
	touch added &&
	git add init.t added &&
	git commit -m "modified and added" &&
	git tag top

[master (root-commit) 2519212] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 init.t
[master fa1ce8e] modified and added
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 added
ok 1 - setup

expecting success of 7012.2 'read-tree updates worktree, absent case': 
	git checkout -f top &&
	git update-index --skip-worktree init.t &&
	rm init.t &&
	git read-tree -m -u HEAD^ &&
	echo init > expected &&
	test_cmp expected init.t

Note: switching to 'top'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at fa1ce8e modified and added
ok 2 - read-tree updates worktree, absent case

expecting success of 7012.3 'read-tree updates worktree, dirty case': 
	git checkout -f top &&
	git update-index --skip-worktree init.t &&
	echo dirty >> init.t &&
	test_must_fail git read-tree -m -u HEAD^ &&
	grep -q dirty init.t &&
	test "$(git ls-files -t init.t)" = "S init.t" &&
	git update-index --no-skip-worktree init.t

HEAD is now at fa1ce8e modified and added
error: Entry 'init.t' not uptodate. Cannot merge.
ok 3 - read-tree updates worktree, dirty case

expecting success of 7012.4 'read-tree removes worktree, absent case': 
	git checkout -f top &&
	git update-index --skip-worktree added &&
	rm added &&
	git read-tree -m -u HEAD^ &&
	test ! -f added

HEAD is now at fa1ce8e modified and added
ok 4 - read-tree removes worktree, absent case

expecting success of 7012.5 'read-tree removes worktree, dirty case': 
	git checkout -f top &&
	git update-index --skip-worktree added &&
	echo dirty >> added &&
	test_must_fail git read-tree -m -u HEAD^ &&
	grep -q dirty added &&
	test "$(git ls-files -t added)" = "S added" &&
	git update-index --no-skip-worktree added

HEAD is now at fa1ce8e modified and added
error: Entry 'added' not uptodate. Cannot merge.
ok 5 - read-tree removes worktree, dirty case

expecting success of 7012.6 'index setup': 
	git checkout -f init &&
	mkdir sub &&
	touch ./1 ./2 sub/1 sub/2 &&
	git add 1 2 sub/1 sub/2 &&
	git update-index --skip-worktree 1 sub/1 &&
	git ls-files -t > result &&
	test_cmp expected result

Previous HEAD position was fa1ce8e modified and added
HEAD is now at 2519212 init
ok 6 - index setup

expecting success of 7012.7 'git-rm fails if worktree is dirty': 
	setup_dirty &&
	test_must_fail git rm 1 &&
	test_dirty

The following paths and/or pathspecs matched paths that exist
outside of your sparse-checkout definition, so will not be
updated in the index:
1
hint: If you intend to update such entries, try one of the following:
hint: * Use the --sparse option.
hint: * Disable or modify the sparsity rules.
hint: Disable this message with "git config advice.updateSparsePath false"
ok 7 - git-rm fails if worktree is dirty

expecting success of 7012.8 'git-clean, absent case': 
	setup_absent &&
	git clean -n > result &&
	test_cmp expected result

ok 8 - git-clean, absent case

expecting success of 7012.9 'git-clean, dirty case': 
	setup_dirty &&
	git clean -n > result &&
	test_cmp expected result

ok 9 - git-clean, dirty case

expecting success of 7012.10 '--ignore-skip-worktree-entries leaves worktree alone': 
	test_commit keep-me &&
	git update-index --skip-worktree keep-me.t &&
	rm keep-me.t &&

	: ignoring the worktree &&
	git update-index --remove --ignore-skip-worktree-entries keep-me.t &&
	git diff-index --cached --exit-code HEAD &&

	: not ignoring the worktree, a deletion is staged &&
	git update-index --remove keep-me.t &&
	test_must_fail git diff-index --cached --exit-code HEAD \
		--diff-filter=D -- keep-me.t

[detached HEAD 2b2ea08] keep-me
 Author: A U Thor <author@example.com>
 5 files changed, 1 insertion(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 keep-me.t
 create mode 100644 sub/1
 create mode 100644 sub/2
:100644 000000 f00f5e00581fe7be1be150ec748178e224a827d4 0000000000000000000000000000000000000000 D	keep-me.t
ok 10 - --ignore-skip-worktree-entries leaves worktree alone

expecting success of 7012.11 'stash restore in sparse checkout': 
	test_create_repo stash-restore &&
	(
		cd stash-restore &&

		mkdir subdir &&
		echo A >subdir/A &&
		echo untouched >untouched &&
		echo removeme >removeme &&
		echo modified >modified &&
		git add . &&
		git commit -m Initial &&

		echo AA >>subdir/A &&
		echo addme >addme &&
		echo tweaked >>modified &&
		rm removeme &&
		git add addme &&

		git stash push &&

		git sparse-checkout set --no-cone subdir &&

		# Ensure after sparse-checkout we only have expected files
		cat >expect <<-EOF &&
		S modified
		S removeme
		H subdir/A
		S untouched
		EOF
		git ls-files -t >actual &&
		test_cmp expect actual &&

		test_path_is_missing addme &&
		test_path_is_missing modified &&
		test_path_is_missing removeme &&
		test_path_is_file    subdir/A &&
		test_path_is_missing untouched &&

		# Put a file in the working directory in the way
		echo in the way >modified &&
		test_must_fail git stash apply 2>error&&

		grep "changes.*would be overwritten by merge" error &&

		echo in the way >expect &&
		test_cmp expect modified &&
		git diff --quiet HEAD ":!modified" &&

		# ...and that working directory reflects the files correctly
		test_path_is_missing addme &&
		test_path_is_file    modified &&
		test_path_is_missing removeme &&
		test_path_is_file    subdir/A &&
		test_path_is_missing untouched
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7012-skip-worktree-writing/stash-restore/.git/
[master (root-commit) 5e4d62b] Initial
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 modified
 create mode 100644 removeme
 create mode 100644 subdir/A
 create mode 100644 untouched
Saved working directory and index state WIP on master: 5e4d62b Initial
Merging Version stash was based on with Stashed changes
On branch master
You are in a sparse checkout with 50% of tracked files present.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	error
	expect

no changes added to commit (use "git add" and/or "git commit -a")
error: Your local changes to the following files would be overwritten by merge:
ok 11 - stash restore in sparse checkout

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7031-verify-tag-signed-ssh.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7031-verify-tag-signed-ssh/.git/
checking prerequisite: GPGSSH

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
	ssh_version=$(ssh-keygen -Y find-principals -n "git" 2>&1)
	test $? != 127 || exit 1
	echo $ssh_version | grep -q "find-principals:missing signature file"
	test $? = 0 || exit 1;

	# Setup some keys and an allowed signers file
	mkdir -p "${GNUPGHOME}" &&
	chmod 0700 "${GNUPGHOME}" &&
	(setfacl -k "${GNUPGHOME}" 2>/dev/null || true) &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null &&
	ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null &&
	ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null &&
	ssh-keygen -t ecdsa -N "" -f "${GPGSSH_KEY_ECDSA}" >/dev/null &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null &&

	cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")"
	"principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")"
	"principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")"
	"principal with number 4" $(cat "${GPGSSH_KEY_ECDSA}.pub")"
	EOF

	# Verify if at least one key and ssh-keygen works as expected
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig &&
	ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig &&
	echo "testpayload" |
	ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig

)
prerequisite GPGSSH not satisfied
ok 1 # skip create signed tags ssh (missing GPGSSH)

checking prerequisite: GPGSSH_VERIFYTIME

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
	# Check if ssh-keygen has a verify-time option by passing an invalid date to it
	ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" &&

	# Set up keys with key lifetimes
	ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null &&
	key_valid=$(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null &&
	key_invalid=$(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null &&
	key_expired=$(cat "${GPGSSH_KEY_EXPIRED}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null &&
	key_notyetvalid=$(cat "${GPGSSH_KEY_NOTYETVALID}.pub") &&

	# Timestamps outside of test_tick span
	ts2005a=20050401000000 ts2005b=200504020000 &&
	# Timestamps within test_tick span
	ts2005c=20050407000000 ts2005d=200504100000 &&
	# Definitely not yet valid / expired timestamps
	ts2000=20000101000000 ts2999=29990101000000 &&

	cat >>"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"timeboxed valid key" valid-after="$ts2005c",valid-before="$ts2005d" $key_valid"
	"timeboxed invalid key" valid-after="$ts2005a",valid-before="$ts2005b" $key_invalid"
	"principal with expired key" valid-before="$ts2000" $key_expired"
	"principal with not yet valid key" valid-after="$ts2999" $key_notyetvalid"
	EOF

	# and verify ssh-keygen verifies the key lifetime
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_EXPIRED}" >gpgssh_verifytime_prereq.sig &&
	! (ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with expired key" -s gpgssh_verifytime_prereq.sig)

)
prerequisite GPGSSH_VERIFYTIME not satisfied
ok 2 # skip create signed tags with keys having defined lifetimes (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 3 # skip verify and show ssh signatures (missing GPGSSH)

ok 4 # skip verify-tag exits failure on expired signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 5 # skip verify-tag exits failure on not yet valid signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 6 # skip verify-tag succeeds with tag date and key validity matching (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 7 # skip verify-tag failes with tag date outside of key validity (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 8 # skip detect fudged ssh signature (missing GPGSSH)

ok 9 # skip verify ssh signatures with --raw (missing GPGSSH)

ok 10 # skip verify signatures with --raw ssh (missing GPGSSH)

ok 11 # skip verify multiple tags ssh (missing GPGSSH)

ok 12 # skip verifying tag with --format - ssh (missing GPGSSH)

ok 13 # skip verifying a forged tag with --format should fail silently - ssh (missing GPGSSH)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7060-wtstatus.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7060-wtstatus/.git/
expecting success of 7060.1 'setup': 
	git config --global advice.statusuoption false &&
	test_commit A &&
	test_commit B oneside added &&
	git checkout A^0 &&
	test_commit C oneside created

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main 5747a32] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 oneside
Note: switching to 'A^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 0ddfaf1 A
[detached HEAD f7fe030] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 oneside
ok 1 - setup

expecting success of 7060.2 'A/A conflict': 
	git checkout B^0 &&
	test_must_fail git merge C

Previous HEAD position was f7fe030 C
HEAD is now at 5747a32 B
Auto-merging oneside
CONFLICT (add/add): Merge conflict in oneside
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - A/A conflict

expecting success of 7060.3 'Report path with conflict': 
	git diff --cached --name-status >actual &&
	echo "U	oneside" >expect &&
	test_cmp expect actual

ok 3 - Report path with conflict

expecting success of 7060.4 'Report new path with conflict': 
	git diff --cached --name-status HEAD^ >actual &&
	echo "U	oneside" >expect &&
	test_cmp expect actual

ok 4 - Report new path with conflict

expecting success of 7060.5 'M/D conflict does not segfault': 
	cat >expect <<EOF &&
On branch side
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)
	deleted by us:   foo

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	mkdir mdconflict &&
	(
		cd mdconflict &&
		git init &&
		test_commit initial foo "" &&
		test_commit modify foo foo &&
		git checkout -b side HEAD^ &&
		git rm foo &&
		git commit -m delete &&
		test_must_fail git merge main &&
		test_must_fail git commit --dry-run >../actual &&
		test_cmp ../expect ../actual &&
		git status >../actual &&
		test_cmp ../expect ../actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7060-wtstatus/mdconflict/.git/
[main (root-commit) a3c5375] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main efd4a38] modify
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'side'
rm 'foo'
[side 0599bc2] delete
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 foo
CONFLICT (modify/delete): foo deleted in HEAD and modified in main.  Version main of foo left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 5 - M/D conflict does not segfault

expecting success of 7060.6 'rename & unmerged setup': 
	git rm -f -r . &&
	cat "$TEST_DIRECTORY/README" >ONE &&
	git add ONE &&
	test_tick &&
	git commit -m "One commit with ONE" &&

	echo Modified >TWO &&
	cat ONE >>TWO &&
	cat ONE >>THREE &&
	git add TWO THREE &&
	sha1=$(git rev-parse :ONE) &&
	git rm --cached ONE &&
	(
		echo "100644 $sha1 1	ONE" &&
		echo "100644 $sha1 2	ONE" &&
		echo "100644 $sha1 3	ONE"
	) | git update-index --index-info &&
	echo Further >>THREE

rm 'A.t'
rm 'oneside'
rm 'oneside'
[detached HEAD f9ec28b] One commit with ONE
 Author: A U Thor <author@example.com>
rm 'ONE'
ok 6 - rename & unmerged setup

expecting success of 7060.7 'rename & unmerged status': 
	git status -suno >actual &&
	cat >expect <<-EOF &&
	UU ONE
	AM THREE
	A  TWO
	EOF
	test_cmp expect actual

ok 7 - rename & unmerged status

expecting success of 7060.8 'git diff-index --cached shows 2 added + 1 unmerged': 
	cat >expected <<-EOF &&
	U	ONE
	A	THREE
	A	TWO
	EOF
	git diff-index --cached --name-status HEAD >actual &&
	test_cmp expected actual

ok 8 - git diff-index --cached shows 2 added + 1 unmerged

expecting success of 7060.9 'git diff-index --cached -M shows 2 added + 1 unmerged': 
	cat >expected <<-EOF &&
	U	ONE
	A	THREE
	A	TWO
	EOF
	git diff-index --cached -M --name-status HEAD >actual &&
	test_cmp expected actual

ok 9 - git diff-index --cached -M shows 2 added + 1 unmerged

expecting success of 7060.10 'git diff-index --cached -C shows 2 copies + 1 unmerged': 
	cat >expected <<-EOF &&
	U	ONE
	C	ONE	THREE
	C	ONE	TWO
	EOF
	git diff-index --cached -C --name-status HEAD |
	sed "s/^C[0-9]*/C/g" >actual &&
	test_cmp expected actual

ok 10 - git diff-index --cached -C shows 2 copies + 1 unmerged

expecting success of 7060.11 'status when conflicts with add and rm advice (deleted by them)': 
	git reset --hard &&
	git checkout main &&
	test_commit init main.txt init &&
	git checkout -b second_branch &&
	git rm main.txt &&
	git commit -m "main.txt deleted on second_branch" &&
	test_commit second conflict.txt second &&
	git checkout main &&
	test_commit on_second main.txt on_second &&
	test_commit main conflict.txt main &&
	test_must_fail git merge second_branch &&
	cat >expected <<\EOF &&
On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)
	both added:      conflict.txt
	deleted by them: main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at f9ec28b One commit with ONE
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  f9ec28b One commit with ONE

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> f9ec28b

Switched to branch 'main'
[main e5fc44e] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.txt
Switched to a new branch 'second_branch'
rm 'main.txt'
[second_branch 1fd8046] main.txt deleted on second_branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 main.txt
[second_branch e4d0ede] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.txt
Switched to branch 'main'
[main 9824e6a] on_second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 62fe2e7] main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.txt
Auto-merging conflict.txt
CONFLICT (add/add): Merge conflict in conflict.txt
CONFLICT (modify/delete): main.txt deleted in second_branch and modified in HEAD.  Version HEAD of main.txt left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 11 - status when conflicts with add and rm advice (deleted by them)

expecting success of 7060.12 'prepare for conflicts': 
	git reset --hard &&
	git checkout -b conflict &&
	test_commit one main.txt one &&
	git branch conflict_second &&
	git mv main.txt sub_main.txt &&
	git commit -m "main.txt renamed in sub_main.txt" &&
	git checkout conflict_second &&
	git mv main.txt sub_second.txt &&
	git commit -m "main.txt renamed in sub_second.txt"

HEAD is now at 62fe2e7 main
Switched to a new branch 'conflict'
[conflict efc0b61] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[conflict 05be729] main.txt renamed in sub_main.txt
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename main.txt => sub_main.txt (100%)
Switched to branch 'conflict_second'
[conflict_second 8f2ff74] main.txt renamed in sub_second.txt
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename main.txt => sub_second.txt (100%)
ok 12 - prepare for conflicts

expecting success of 7060.13 'status when conflicts with add and rm advice (both deleted)': 
	test_must_fail git merge conflict &&
	cat >expected <<\EOF &&
On branch conflict_second
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)
	both deleted:    main.txt
	added by them:   sub_main.txt
	added by us:     sub_second.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

CONFLICT (rename/rename): main.txt renamed to sub_second.txt in HEAD and to sub_main.txt in conflict.
Automatic merge failed; fix conflicts and then commit the result.
ok 13 - status when conflicts with add and rm advice (both deleted)

expecting success of 7060.14 'status when conflicts with only rm advice (both deleted)': 
	git reset --hard conflict_second &&
	test_must_fail git merge conflict &&
	git add sub_main.txt &&
	git add sub_second.txt &&
	cat >expected <<\EOF &&
On branch conflict_second
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:
	new file:   sub_main.txt

Unmerged paths:
  (use "git rm <file>..." to mark resolution)
	both deleted:    main.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual &&
	git reset --hard &&
	git checkout main

HEAD is now at 8f2ff74 main.txt renamed in sub_second.txt
CONFLICT (rename/rename): main.txt renamed to sub_second.txt in HEAD and to sub_main.txt in conflict.
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 8f2ff74 main.txt renamed in sub_second.txt
warning: refname 'main' is ambiguous.
Switched to branch 'main'
ok 14 - status when conflicts with only rm advice (both deleted)

expecting success of 7060.15 'status --branch with detached HEAD': 
	git reset --hard &&
	git checkout main^0 &&
	git status --branch --porcelain >actual &&
	cat >expected <<-EOF &&
	## HEAD (no branch)
	?? .gitconfig
	?? actual
	?? expect
	?? expected
	?? mdconflict/
	EOF
	test_cmp expected actual

HEAD is now at 62fe2e7 main
warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 62fe2e7 main
ok 15 - status --branch with detached HEAD

expecting success of 7060.16 'status --porcelain=v1 --branch with detached HEAD': 
	git reset --hard &&
	git checkout main^0 &&
	git status --branch --porcelain=v1 >actual &&
	cat >expected <<-EOF &&
	## HEAD (no branch)
	?? .gitconfig
	?? actual
	?? expect
	?? expected
	?? mdconflict/
	EOF
	test_cmp expected actual

HEAD is now at 62fe2e7 main
warning: refname 'main' is ambiguous.
warning: refname 'main' is ambiguous.
HEAD is now at 62fe2e7 main
ok 16 - status --porcelain=v1 --branch with detached HEAD

expecting success of 7060.17 'status --porcelain=bogus': 
	test_must_fail git status --porcelain=bogus

fatal: unsupported porcelain version 'bogus'
ok 17 - status --porcelain=bogus

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7030-verify-tag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7030-verify-tag/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7030-verify-tag/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7030-verify-tag/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7030.1 'create signed tags': 
	echo 1 >file && git add file &&
	test_tick && git commit -m initial &&
	git tag -s -m initial initial &&
	git branch side &&

	echo 2 >file && test_tick && git commit -a -m second &&
	git tag -s -m second second &&

	git checkout side &&
	echo 3 >elif && git add elif &&
	test_tick && git commit -m "third on side" &&

	git checkout main &&
	test_tick && git merge -S side &&
	git tag -s -m merge merge &&

	echo 4 >file && test_tick && git commit -a -S -m "fourth unsigned" &&
	git tag -a -m fourth-unsigned fourth-unsigned &&

	test_tick && git commit --amend -S -m "fourth signed" &&
	git tag -s -m fourth fourth-signed &&

	echo 5 >file && test_tick && git commit -a -m "fifth" &&
	git tag fifth-unsigned &&

	git config commit.gpgsign true &&
	echo 6 >file && test_tick && git commit -a -m "sixth" &&
	git tag -a -m sixth sixth-unsigned &&

	test_tick && git rebase -f HEAD^^ && git tag -s -m 6th sixth-signed HEAD^ &&
	git tag -m seventh -s seventh-signed &&

	echo 8 >file && test_tick && git commit -a -m eighth &&
	git tag -uB7227189 -m eighth eighth-signed-alt

[main (root-commit) 777c62c] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 38545ae] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'side'
[side 684a8f8] third on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
Switched to branch 'main'
Merge made by the 'ort' strategy.
 elif | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 elif
[main cc562c9] fourth unsigned
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 755825c] fourth signed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 4968dde] fifth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 6db65d8] sixth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Current branch main is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
[main c05a86b] eighth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - create signed tags

checking prerequisite: GPGSM

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSM" &&
	test_have_prereq GPG &&
	# Available key info:
	# * see t/lib-gpg/gpgsm-gen-key.in
	# To generate new certificate:
	#  * no passphrase
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o /tmp/gpgsm.crt.user \
	#		--generate-key \
	#		--batch t/lib-gpg/gpgsm-gen-key.in
	# To import certificate:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		--import /tmp/gpgsm.crt.user
	# To export into a .p12 we can later import:
	#	gpgsm --homedir /tmp/gpghome/ \
	#		-o t/lib-gpg/gpgsm_cert.p12 \
	#		--export-secret-key-p12 "committer@example.com"
	echo | gpgsm --homedir "${GNUPGHOME}" \
		--passphrase-fd 0 --pinentry-mode loopback \
		--import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&

	gpgsm --homedir "${GNUPGHOME}" -K --with-colons |
	awk -F ":" "/^fpr:/ {printf \"%s S relax\\n\", \$10}" \
		>"${GNUPGHOME}/trustlist.txt" &&
	(gpgconf --reload all || : ) &&

	echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
	       -u committer@example.com -o /dev/null --sign -

)
gpgsm: total number processed: 2
gpgsm:               imported: 1
gpgsm:       secret keys read: 1
gpgsm:   secret keys imported: 1
gpgsm: DBG: adding certificates at level -2
gpgsm: signature created
prerequisite GPGSM ok
expecting success of 7030.2 'create signed tags x509 ': 
	test_config gpg.format x509 &&
	test_config user.signingkey $GIT_COMMITTER_EMAIL &&
	echo 9 >file && test_tick && git commit -a -m "ninth gpgsm-signed" &&
	git tag -s -m ninth ninth-signed-x509

[main 45fa7ca] ninth gpgsm-signed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 2 - create signed tags x509 

expecting success of 7030.3 'verify and show signatures': 
	(
		for tag in initial second merge fourth-signed sixth-signed seventh-signed
		do
			git verify-tag $tag 2>actual &&
			grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			echo $tag OK || exit 1
		done
	) &&
	(
		for tag in fourth-unsigned fifth-unsigned sixth-unsigned
		do
			test_must_fail git verify-tag $tag 2>actual &&
			! grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			echo $tag OK || exit 1
		done
	) &&
	(
		for tag in eighth-signed-alt
		do
			git verify-tag $tag 2>actual &&
			grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			grep "not certified" actual &&
			echo $tag OK || exit 1
		done
	)

gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
initial OK
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
second OK
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
merge OK
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
fourth-signed OK
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
sixth-signed OK
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
seventh-signed OK
fourth-unsigned OK
fifth-unsigned OK
sixth-unsigned OK
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
eighth-signed-alt OK
ok 3 - verify and show signatures

expecting success of 7030.4 'verify and show signatures x509': 
	git verify-tag ninth-signed-x509 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	echo ninth-signed-x509 OK

gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
ninth-signed-x509 OK
ok 4 - verify and show signatures x509

expecting success of 7030.5 'verify and show signatures x509 with low minTrustLevel': 
	test_config gpg.minTrustLevel undefined &&
	git verify-tag ninth-signed-x509 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	echo ninth-signed-x509 OK

gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
ninth-signed-x509 OK
ok 5 - verify and show signatures x509 with low minTrustLevel

expecting success of 7030.6 'verify and show signatures x509 with matching minTrustLevel': 
	test_config gpg.minTrustLevel fully &&
	git verify-tag ninth-signed-x509 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	echo ninth-signed-x509 OK

gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
ninth-signed-x509 OK
ok 6 - verify and show signatures x509 with matching minTrustLevel

expecting success of 7030.7 'verify and show signatures x509 with high minTrustLevel': 
	test_config gpg.minTrustLevel ultimate &&
	test_must_fail git verify-tag ninth-signed-x509 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	echo ninth-signed-x509 OK

gpgsm: Good signature from "/CN=C O Mitter/O=Example/SN=C O/GN=Mitter"
ninth-signed-x509 OK
ok 7 - verify and show signatures x509 with high minTrustLevel

expecting success of 7030.8 'detect fudged signature': 
	git cat-file tag seventh-signed >raw &&
	sed -e "/^tag / s/seventh/7th forged/" raw >forged1 &&
	git hash-object -w -t tag forged1 >forged1.tag &&
	test_must_fail git verify-tag $(cat forged1.tag) 2>actual1 &&
	grep "BAD signature from" actual1 &&
	! grep "Good signature from" actual1

gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
ok 8 - detect fudged signature

expecting success of 7030.9 'verify signatures with --raw': 
	(
		for tag in initial second merge fourth-signed sixth-signed seventh-signed
		do
			git verify-tag --raw $tag 2>actual &&
			grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			echo $tag OK || exit 1
		done
	) &&
	(
		for tag in fourth-unsigned fifth-unsigned sixth-unsigned
		do
			test_must_fail git verify-tag --raw $tag 2>actual &&
			! grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			echo $tag OK || exit 1
		done
	) &&
	(
		for tag in eighth-signed-alt
		do
			git verify-tag --raw $tag 2>actual &&
			grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			grep "TRUST_UNDEFINED" actual &&
			echo $tag OK || exit 1
		done
	)

[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
initial OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
second OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
merge OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
fourth-signed OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
sixth-signed OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
seventh-signed OK
fourth-unsigned OK
fifth-unsigned OK
sixth-unsigned OK
[GNUPG:] GOODSIG 65A0EEA02E30CAD7 Eris Discordia <discord@example.net>
[GNUPG:] TRUST_UNDEFINED 0 pgp
eighth-signed-alt OK
ok 9 - verify signatures with --raw

expecting success of 7030.10 'verify signatures with --raw x509': 
	git verify-tag --raw ninth-signed-x509 2>actual &&
	grep "GOODSIG" actual &&
	! grep "BADSIG" actual &&
	echo ninth-signed-x509 OK

[GNUPG:] GOODSIG F8BF62E0693D0694816377099909C779FA23FD65 /CN=C O Mitter/O=Example/SN=C O/GN=Mitter
ninth-signed-x509 OK
ok 10 - verify signatures with --raw x509

expecting success of 7030.11 'verify multiple tags': 
	tags="fourth-signed sixth-signed seventh-signed" &&
	for i in $tags
	do
		git verify-tag -v --raw $i || return 1
	done >expect.stdout 2>expect.stderr.1 &&
	grep "^.GNUPG:." <expect.stderr.1 >expect.stderr &&
	git verify-tag -v --raw $tags >actual.stdout 2>actual.stderr.1 &&
	grep "^.GNUPG:." <actual.stderr.1 >actual.stderr &&
	test_cmp expect.stdout actual.stdout &&
	test_cmp expect.stderr actual.stderr

ok 11 - verify multiple tags

expecting success of 7030.12 'verify multiple tags x509': 
	tags="seventh-signed ninth-signed-x509" &&
	for i in $tags
	do
		git verify-tag -v --raw $i || return 1
	done >expect.stdout 2>expect.stderr.1 &&
	grep "^.GNUPG:." <expect.stderr.1 >expect.stderr &&
	git verify-tag -v --raw $tags >actual.stdout 2>actual.stderr.1 &&
	grep "^.GNUPG:." <actual.stderr.1 >actual.stderr &&
	test_cmp expect.stdout actual.stdout &&
	test_cmp expect.stderr actual.stderr

ok 12 - verify multiple tags x509

expecting success of 7030.13 'verifying tag with --format': 
	cat >expect <<-\EOF &&
	tagname : fourth-signed
	EOF
	git verify-tag --format="tagname : %(tag)" "fourth-signed" >actual &&
	test_cmp expect actual

ok 13 - verifying tag with --format

expecting success of 7030.14 'verifying tag with --format="%(rest)" must fail': 
	test_must_fail git verify-tag --format="%(rest)" "fourth-signed"

fatal: this command reject atom %(rest)
ok 14 - verifying tag with --format="%(rest)" must fail

expecting success of 7030.15 'verifying a forged tag with --format should fail silently': 
	test_must_fail git verify-tag --format="tagname : %(tag)" $(cat forged1.tag) >actual-forged &&
	test_must_be_empty actual-forged

ok 15 - verifying a forged tag with --format should fail silently

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7062-wtstatus-ignorecase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7062-wtstatus-ignorecase/.git/
expecting success of 7062.1 'status with hash collisions': 
	# note: "V/", "V/XQANY/" and "WURZAUP/" produce the same hash code
	# in name-hash.c::hash_name
	mkdir V &&
	mkdir V/XQANY &&
	mkdir WURZAUP &&
	touch V/XQANY/test &&
	git config core.ignorecase true &&
	git add . &&
	# test is successful if git status completes (no endless loop)
	git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   V/XQANY/test

ok 1 - status with hash collisions

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7061-wtstatus-ignore.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7061-wtstatus-ignore/.git/
expecting success of 7061.1 'status untracked directory with --ignored': 
	echo "ignored" >.gitignore &&
	mkdir untracked &&
	: >untracked/ignored &&
	: >untracked/uncommitted &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 1 - status untracked directory with --ignored

expecting success of 7061.2 'same with gitignore starting with BOM': 
	printf "\357\273\277ignored\n" >.gitignore &&
	mkdir -p untracked &&
	: >untracked/ignored &&
	: >untracked/uncommitted &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 2 - same with gitignore starting with BOM

expecting success of 7061.3 'status untracked files --ignored with pathspec (no match)': 
	git status --porcelain --ignored -- untracked/i >actual &&
	test_must_be_empty actual &&
	git status --porcelain --ignored -- untracked/u >actual &&
	test_must_be_empty actual

ok 3 - status untracked files --ignored with pathspec (no match)

expecting success of 7061.4 'status untracked files --ignored with pathspec (literal match)': 
	git status --porcelain --ignored -- untracked/ignored >actual &&
	echo "!! untracked/ignored" >expected &&
	test_cmp expected actual &&
	git status --porcelain --ignored -- untracked/uncommitted >actual &&
	echo "?? untracked/uncommitted" >expected &&
	test_cmp expected actual

ok 4 - status untracked files --ignored with pathspec (literal match)

expecting success of 7061.5 'status untracked files --ignored with pathspec (glob match)': 
	git status --porcelain --ignored -- untracked/i\* >actual &&
	echo "!! untracked/ignored" >expected &&
	test_cmp expected actual &&
	git status --porcelain --ignored -- untracked/u\* >actual &&
	echo "?? untracked/uncommitted" >expected &&
	test_cmp expected actual

ok 5 - status untracked files --ignored with pathspec (glob match)

expecting success of 7061.6 'status untracked directory with --ignored -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 6 - status untracked directory with --ignored -u

expecting success of 7061.7 'status of untracked directory with --ignored works with or without prefix': 
	git status --porcelain --ignored >tmp &&
	grep untracked/ tmp >actual &&
	rm tmp &&
	test_cmp expected actual &&

	git status --porcelain --ignored untracked/ >actual &&
	test_cmp expected actual

ok 7 - status of untracked directory with --ignored works with or without prefix

expecting success of 7061.8 'status prefixed untracked sub-directory with --ignored -u': 
	git status --porcelain --ignored -u untracked/ >actual &&
	test_cmp expected actual

ok 8 - status prefixed untracked sub-directory with --ignored -u

expecting success of 7061.9 'status ignored directory with --ignore': 
	rm -rf untracked &&
	mkdir ignored &&
	: >ignored/uncommitted &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 9 - status ignored directory with --ignore

expecting success of 7061.10 'status ignored directory with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 10 - status ignored directory with --ignore -u

expecting success of 7061.11 'status empty untracked directory with --ignore': 
	rm -rf ignored &&
	mkdir untracked-ignored &&
	mkdir untracked-ignored/test &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 11 - status empty untracked directory with --ignore

expecting success of 7061.12 'status empty untracked directory with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 12 - status empty untracked directory with --ignore -u

expecting success of 7061.13 'status untracked directory with ignored files with --ignore': 
	: >untracked-ignored/ignored &&
	: >untracked-ignored/test/ignored &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 13 - status untracked directory with ignored files with --ignore

expecting success of 7061.14 'status untracked directory with ignored files with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 14 - status untracked directory with ignored files with --ignore -u

expecting success of 7061.15 'status ignored tracked directory with --ignore': 
	rm -rf untracked-ignored &&
	mkdir tracked &&
	: >tracked/committed &&
	git add tracked/committed &&
	git commit -m. &&
	echo "tracked" >.gitignore &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

[master (root-commit) e2a6909] .
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tracked/committed
ok 15 - status ignored tracked directory with --ignore

expecting success of 7061.16 'status ignored tracked directory with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 16 - status ignored tracked directory with --ignore -u

expecting success of 7061.17 'status ignored tracked directory and ignored file with --ignore': 
	echo "committed" >>.gitignore &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 17 - status ignored tracked directory and ignored file with --ignore

expecting success of 7061.18 'status ignored tracked directory and ignored file with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 18 - status ignored tracked directory and ignored file with --ignore -u

expecting success of 7061.19 'status ignored tracked directory and uncommitted file with --ignore': 
	echo "tracked" >.gitignore &&
	: >tracked/uncommitted &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 19 - status ignored tracked directory and uncommitted file with --ignore

expecting success of 7061.20 'status ignored tracked directory and uncommitted file with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 20 - status ignored tracked directory and uncommitted file with --ignore -u

expecting success of 7061.21 'status ignored tracked directory with uncommitted file in untracked subdir with --ignore': 
	rm -rf tracked/uncommitted &&
	mkdir tracked/ignored &&
	: >tracked/ignored/uncommitted &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

ok 21 - status ignored tracked directory with uncommitted file in untracked subdir with --ignore

expecting success of 7061.22 'status ignored tracked directory with uncommitted file in untracked subdir with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 22 - status ignored tracked directory with uncommitted file in untracked subdir with --ignore -u

expecting success of 7061.23 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore': 
	: >tracked/ignored/committed &&
	git add -f tracked/ignored/committed &&
	git commit -m. &&
	git status --porcelain --ignored >actual &&
	test_cmp expected actual

[master 8a62ec6] .
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tracked/ignored/committed
ok 23 - status ignored tracked directory with uncommitted file in tracked subdir with --ignore

expecting success of 7061.24 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u': 
	git status --porcelain --ignored -u >actual &&
	test_cmp expected actual

ok 24 - status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u

expecting success of 7061.25 'status ignores submodule in excluded directory': 
	git init tracked/submodule &&
	test_commit -C tracked/submodule initial &&
	git status --porcelain --ignored -u tracked/submodule >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7061-wtstatus-ignore/tracked/submodule/.git/
[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 25 - status ignores submodule in excluded directory

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7003-filter-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/.git/
expecting success of 7003.1 'setup': 
	test_commit A &&
	GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" &&
	test_commit --notick B &&
	git checkout -b branch B &&
	test_commit D &&
	mkdir dir &&
	test_commit dir/D &&
	test_commit E &&
	git checkout main &&
	test_commit C &&
	git checkout branch &&
	git merge C &&
	git tag F &&
	test_commit G &&
	test_commit H

[main (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[main e86e545] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'branch'
[branch bd662c1] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch 3abb9b5] dir/D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/D.t
[branch 48ac83b] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
Switched to branch 'main'
[main 0e63577] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to branch 'branch'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[branch 3c39262] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
[branch 110eac9] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
ok 1 - setup

expecting success of 7003.2 'rewrite identically': 
	git filter-branch branch


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (0 seconds passed, remaining 0 predicted)    
Rewrite bd662c15882f4e7910b78fc26a3d8fe1ffa802e5 (3/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 3abb9b554927997a06e6fafc3c62469a75ef32a3 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 48ac83b9774bbddb9c1cd6fe140d5380297aa69c (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 013e089e8403f3749848f7aafc6f271fb7179dbc (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 3c39262d23e70569701d337b4d27a1e97512c2d9 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 110eac945dc1713b27bdf49e74e5805db66971f0 (9/9) (1 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/branch' is unchanged
ok 2 - rewrite identically

expecting success of 7003.3 'result is really identical': 
	test $H = $(git rev-parse HEAD)

ok 3 - result is really identical

expecting success of 7003.4 'rewrite bare repository identically': 
	(git config core.bare true && cd .git &&
	 git filter-branch branch > filter-output 2>&1 &&
	! grep fatal filter-output)

ok 4 - rewrite bare repository identically

expecting success of 7003.5 'result is really identical': 
	test $H = $(git rev-parse HEAD)

ok 5 - result is really identical

expecting success of 7003.6 'correct GIT_DIR while using -d': 
	mkdir drepo &&
	( cd drepo &&
	git init &&
	test_commit drepo &&
	git filter-branch -d "$TRASHDIR/dfoo" \
		--index-filter "cp \"$TRASHDIR\"/dfoo/backup-refs \"$TRASHDIR\"" \
	) &&
	grep drepo "$TRASHDIR/backup-refs"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/drepo/.git/
[main (root-commit) 9f96758] drepo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 drepo.t

Rewrite 9f9675864b1443cf5a1e281c740a8ba331951fba (1/1) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/main' is unchanged
9f9675864b1443cf5a1e281c740a8ba331951fba commit	refs/tags/drepo
ok 6 - correct GIT_DIR while using -d

expecting success of 7003.7 'tree-filter works with -d': 
	git init drepo-tree &&
	(
		cd drepo-tree &&
		test_commit one &&
		git filter-branch -d "$TRASHDIR/dfoo" \
			--tree-filter "echo changed >one.t" &&
		echo changed >expect &&
		git cat-file blob HEAD:one.t >actual &&
		test_cmp expect actual &&
		test_cmp one.t actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/drepo-tree/.git/
[main (root-commit) d944c64] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t

Rewrite d944c643197c4e8b1e89974e6d9ba85df421b65d (1/1) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
ok 7 - tree-filter works with -d

expecting success of 7003.8 'Fail if commit filter fails': 
	test_must_fail git filter-branch -f --commit-filter "exit 1" HEAD


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    could not write rewritten commit
ok 8 - Fail if commit filter fails

expecting success of 7003.9 'rewrite, renaming a specific file': 
	git filter-branch -f --tree-filter "mv D.t doh || :" HEAD


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    mv: cannot stat 'D.t': No such file or directory

Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (1 seconds passed, remaining 3 predicted)    mv: cannot stat 'D.t': No such file or directory

Rewrite bd662c15882f4e7910b78fc26a3d8fe1ffa802e5 (2/9) (1 seconds passed, remaining 3 predicted)    
Rewrite 3abb9b554927997a06e6fafc3c62469a75ef32a3 (2/9) (1 seconds passed, remaining 3 predicted)    
Rewrite 48ac83b9774bbddb9c1cd6fe140d5380297aa69c (5/9) (2 seconds passed, remaining 1 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (5/9) (2 seconds passed, remaining 1 predicted)    mv: cannot stat 'D.t': No such file or directory

Rewrite 013e089e8403f3749848f7aafc6f271fb7179dbc (5/9) (2 seconds passed, remaining 1 predicted)    
Rewrite 3c39262d23e70569701d337b4d27a1e97512c2d9 (8/9) (2 seconds passed, remaining 0 predicted)    
Rewrite 110eac945dc1713b27bdf49e74e5805db66971f0 (8/9) (2 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
ok 9 - rewrite, renaming a specific file

expecting success of 7003.10 'test that the file was renamed': 
	test D = "$(git show HEAD:doh --)" &&
	! test -f D.t &&
	test -f doh &&
	test D = "$(cat doh)"

ok 10 - test that the file was renamed

expecting success of 7003.11 'rewrite, renaming a specific directory': 
	git filter-branch -f --tree-filter "mv dir diroh || :" HEAD


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    mv: cannot stat 'dir': No such file or directory

Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (0 seconds passed, remaining 0 predicted)    mv: cannot stat 'dir': No such file or directory

Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (3/9) (0 seconds passed, remaining 0 predicted)    mv: cannot stat 'dir': No such file or directory

Rewrite 28e3b83a5f2c2b87fa77b674df1529da9f4a66b4 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite b0e1a7fc77c44f8710a324ce0cdaa5f0e3f41f41 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (4/9) (1 seconds passed, remaining 1 predicted)    mv: cannot stat 'dir': No such file or directory

Rewrite 284d35b48d5c7cf8f258f9d25690e5c3c38bb8c3 (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 8d77ce9a0f051fe4d6b311099cfc061fc8fa238e (4/9) (1 seconds passed, remaining 1 predicted)    
Rewrite 3623c2fd76a1257ce6cfb529b64aa3e51d851ffd (9/9) (2 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
ok 11 - rewrite, renaming a specific directory

expecting success of 7003.12 'test that the directory was renamed': 
	test dir/D = "$(git show HEAD:diroh/D.t --)" &&
	! test -d dir &&
	test -d diroh &&
	! test -d diroh/dir &&
	test -f diroh/D.t &&
	test dir/D = "$(cat diroh/D.t)"

ok 12 - test that the directory was renamed

expecting success of 7003.13 'populate --state-branch': 
	git filter-branch --state-branch state -f --tree-filter "touch file || :" HEAD

Branch state does not exist. Will create

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (3/9) (1 seconds passed, remaining 2 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (3/9) (1 seconds passed, remaining 2 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (3/9) (1 seconds passed, remaining 2 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (3/9) (1 seconds passed, remaining 2 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (7/9) (2 seconds passed, remaining 0 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (7/9) (2 seconds passed, remaining 0 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (7/9) (2 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
Saving rewrite state to state
ok 13 - populate --state-branch

expecting success of 7003.14 'using --state-branch to skip already rewritten commits': 
	test_when_finished git reset --hard $V &&
	git reset --hard $V &&
	git filter-branch --state-branch state -f --tree-filter "touch file || :" HEAD &&
	test_cmp_rev $W HEAD

HEAD is now at 8a3423e H
Populating map from state (62b9c9fa908324bba33ac79ad962e765fd9a3958)

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (3/9) (0 seconds passed, remaining 0 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (4/9) (0 seconds passed, remaining 0 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (5/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (6/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (7/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (8/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (9/9) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
Saving rewrite state to state
HEAD is now at 8a3423e H
ok 14 - using --state-branch to skip already rewritten commits

expecting success of 7003.15 'rewrite one branch, keeping a side branch': 
	git branch modD oldD &&
	git filter-branch -f --tree-filter "mv B.t boh || :" D..modD


Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (2/2) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/modD' was rewritten
ok 15 - rewrite one branch, keeping a side branch

expecting success of 7003.16 'common ancestor is still common (unchanged)': 
	test "$(git merge-base modD D)" = "$(git rev-parse B)"

ok 16 - common ancestor is still common (unchanged)

expecting success of 7003.17 'filter subdirectory only': 
	mkdir subdir &&
	touch subdir/new &&
	git add subdir/new &&
	test_tick &&
	git commit -m "subdir" &&
	echo H > A.t &&
	test_tick &&
	git commit -m "not subdir" A.t &&
	echo A > subdir/new &&
	test_tick &&
	git commit -m "again subdir" subdir/new &&
	git rm A.t &&
	test_tick &&
	git commit -m "again not subdir" &&
	git branch sub &&
	git branch sub-earlier HEAD~2 &&
	git filter-branch -f --subdirectory-filter subdir \
		refs/heads/sub refs/heads/sub-earlier

[branch bb8f80d] subdir
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 subdir/new
[branch 5bae69c] not subdir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[branch 140072e] again subdir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
rm 'A.t'
[branch ead226b] again not subdir
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 A.t

Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (2/2) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/sub' was rewritten
Ref 'refs/heads/sub-earlier' was rewritten
ok 17 - filter subdirectory only

expecting success of 7003.18 'subdirectory filter result looks okay': 
	test 2 = $(git rev-list sub | wc -l) &&
	git show sub:new &&
	test_must_fail git show sub:subdir &&
	git show sub-earlier:new &&
	test_must_fail git show sub-earlier:subdir

A
fatal: path 'subdir' exists on disk, but not in 'sub'
fatal: path 'subdir' exists on disk, but not in 'sub-earlier'
ok 18 - subdirectory filter result looks okay

expecting success of 7003.19 'more setup': 
	git checkout main &&
	mkdir subdir &&
	echo A > subdir/new &&
	git add subdir/new &&
	test_tick &&
	git commit -m "subdir on main" subdir/new &&
	git rm A.t &&
	test_tick &&
	git commit -m "again subdir on main" &&
	git merge branch

Switched to branch 'main'
[main cb42fbf] subdir on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/new
rm 'A.t'
[main a1f80b9] again subdir on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 A.t
Merge made by the 'ort' strategy.
 E.t       | 1 +
 G.t       | 1 +
 H.t       | 1 +
 diroh/D.t | 1 +
 doh       | 1 +
 5 files changed, 5 insertions(+)
 create mode 100644 E.t
 create mode 100644 G.t
 create mode 100644 H.t
 create mode 100644 diroh/D.t
 create mode 100644 doh
ok 19 - more setup

expecting success of 7003.20 'use index-filter to move into a subdirectory': 
	git branch directorymoved &&
	git filter-branch -f --index-filter \
		 "git ls-files -s | sed \"s-	-&newsubdir/-\" |
	          GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \
			git update-index --index-info &&
		  mv \"\$GIT_INDEX_FILE.new\" \"\$GIT_INDEX_FILE\"" directorymoved &&
	git diff --exit-code HEAD directorymoved:newsubdir


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/16) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/16) (1 seconds passed, remaining 7 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (2/16) (1 seconds passed, remaining 7 predicted)    
Rewrite cb42fbf5b7b2d2717a15c7eb880151754077a891 (2/16) (1 seconds passed, remaining 7 predicted)    
Rewrite a1f80b99bf58d41c7e43e2e015579be4ed5ad662 (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (5/16) (1 seconds passed, remaining 2 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (11/16) (3 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (11/16) (3 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (11/16) (3 seconds passed, remaining 1 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (11/16) (3 seconds passed, remaining 1 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (15/16) (3 seconds passed, remaining 0 predicted)    
Rewrite 2ffef5d63485c35f57cd4861517a7a34b4545fb3 (15/16) (3 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/directorymoved' was rewritten
ok 20 - use index-filter to move into a subdirectory

expecting success of 7003.21 'stops when msg filter fails': 
	old=$(git rev-parse HEAD) &&
	test_must_fail git filter-branch -f --msg-filter false HEAD &&
	test $old = $(git rev-parse HEAD) &&
	rm -rf .git-rewrite


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/16) (0 seconds passed, remaining 0 predicted)    msg filter failed: false
ok 21 - stops when msg filter fails

expecting success of 7003.22 'author information is preserved': 
	: > i &&
	git add i &&
	test_tick &&
	GIT_AUTHOR_NAME="B V Uips" git commit -m bvuips &&
	git branch preserved-author &&
	(sane_unset GIT_AUTHOR_NAME &&
	 git filter-branch -f --msg-filter "cat; \
			test \$GIT_COMMIT != $(git rev-parse main) || \
			echo Hallo" \
		preserved-author) &&
	git rev-list --author="B V Uips" preserved-author >actual &&
	test_line_count = 1 actual

[main 7da14ef] bvuips
 Author: B V Uips <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 i

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/17) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/17) (1 seconds passed, remaining 7 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (2/17) (1 seconds passed, remaining 7 predicted)    
Rewrite cb42fbf5b7b2d2717a15c7eb880151754077a891 (2/17) (1 seconds passed, remaining 7 predicted)    
Rewrite a1f80b99bf58d41c7e43e2e015579be4ed5ad662 (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (5/17) (1 seconds passed, remaining 2 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite 2ffef5d63485c35f57cd4861517a7a34b4545fb3 (11/17) (2 seconds passed, remaining 1 predicted)    
Rewrite 7da14efb2638f7e6e18d6a3324eb5c7d8a1e0e09 (17/17) (3 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/preserved-author' was rewritten
ok 22 - author information is preserved

expecting success of 7003.23 'remove a certain author's commits': 
	echo i > i &&
	test_tick &&
	git commit -m i i &&
	git branch removed-author &&
	git filter-branch -f --commit-filter "\
		if [ \"\$GIT_AUTHOR_NAME\" = \"B V Uips\" ];\
		then\
			skip_commit \"\$@\";
		else\
			git commit-tree \"\$@\";\
		fi" removed-author &&
	cnt1=$(git rev-list main | wc -l) &&
	cnt2=$(git rev-list removed-author | wc -l) &&
	test $cnt1 -eq $(($cnt2 + 1)) &&
	git rev-list --author="B V Uips" removed-author >actual &&
	test_line_count = 0 actual

[main 0261af1] i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/18) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/18) (0 seconds passed, remaining 0 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (3/18) (0 seconds passed, remaining 0 predicted)    
Rewrite cb42fbf5b7b2d2717a15c7eb880151754077a891 (4/18) (0 seconds passed, remaining 0 predicted)    
Rewrite a1f80b99bf58d41c7e43e2e015579be4ed5ad662 (5/18) (0 seconds passed, remaining 0 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (6/18) (0 seconds passed, remaining 0 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (7/18) (1 seconds passed, remaining 1 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (15/18) (2 seconds passed, remaining 0 predicted)    
Rewrite 2ffef5d63485c35f57cd4861517a7a34b4545fb3 (15/18) (2 seconds passed, remaining 0 predicted)    
Rewrite 7da14efb2638f7e6e18d6a3324eb5c7d8a1e0e09 (15/18) (2 seconds passed, remaining 0 predicted)    
Rewrite 0261af146239dd954a19d76ae2a417dd3af8b791 (15/18) (2 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/removed-author' was rewritten
ok 23 - remove a certain author's commits

expecting success of 7003.24 'barf on invalid name': 
	test_must_fail git filter-branch -f main xy-problem &&
	test_must_fail git filter-branch -f HEAD^

fatal: ambiguous argument 'xy-problem': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
You must specify a ref to rewrite.
ok 24 - barf on invalid name

expecting success of 7003.25 '"map" works in commit filter': 
	git filter-branch -f --commit-filter "\
		parent=\$(git rev-parse \$GIT_COMMIT^) &&
		mapped=\$(map \$parent) &&
		actual=\$(echo \"\$@\" | sed \"s/^.*-p //\") &&
		test \$mapped = \$actual &&
		git commit-tree \"\$@\";" main~2..main &&
	git rev-parse --verify main


Rewrite 7da14efb2638f7e6e18d6a3324eb5c7d8a1e0e09 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite 0261af146239dd954a19d76ae2a417dd3af8b791 (2/2) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/main' is unchanged
0261af146239dd954a19d76ae2a417dd3af8b791
ok 25 - "map" works in commit filter

expecting success of 7003.26 'Name needing quotes': 

	git checkout -b rerere A &&
	mkdir foo &&
	name="れれれ" &&
	>foo/$name &&
	git add foo &&
	git commit -m "Adding a file" &&
	git filter-branch --tree-filter "rm -fr foo" &&
	test_must_fail git ls-files --error-unmatch "foo/$name" &&
	test $(git rev-parse --verify rerere) != $(git rev-parse --verify A)


Switched to a new branch 'rerere'
[rerere 1d45e88] Adding a file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "foo/\343\202\214\343\202\214\343\202\214"

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite 1d45e8854f1dd5452938be2dedb173087134c05c (2/2) (1 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/rerere' was rewritten
error: pathspec 'foo/れれれ' did not match any file(s) known to git
Did you forget to 'git add'?
ok 26 - Name needing quotes

expecting success of 7003.27 'Subdirectory filter with disappearing trees': 
	git reset --hard &&
	git checkout main &&

	mkdir foo &&
	touch foo/bar &&
	git add foo &&
	test_tick &&
	git commit -m "Adding foo" &&

	git rm -r foo &&
	test_tick &&
	git commit -m "Removing foo" &&

	mkdir foo &&
	touch foo/bar &&
	git add foo &&
	test_tick &&
	git commit -m "Re-adding foo" &&

	git filter-branch -f --subdirectory-filter foo &&
	git rev-list main >actual &&
	test_line_count = 3 actual

HEAD is now at 643bd56 Adding a file
Switched to branch 'main'
[main f7eadb2] Adding foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo/bar
rm 'foo/bar'
[main ee48524] Removing foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 foo/bar
[main 14fe8c6] Re-adding foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo/bar

Rewrite f7eadb255c93eb12be4926fbb2a3995c413564ba (1/3) (0 seconds passed, remaining 0 predicted)    
Rewrite ee48524f38405c7e2028be80dc8acfbef4c75c13 (2/3) (0 seconds passed, remaining 0 predicted)    
Rewrite 14fe8c608ef61b8d11aca607ef6c7a4e24b8b32d (3/3) (1 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
ok 27 - Subdirectory filter with disappearing trees

expecting success of 7003.28 'Tag name filtering retains tag message': 
	git tag -m atag T &&
	git cat-file tag T > expect &&
	git filter-branch -f --tag-name-filter cat &&
	git cat-file tag T > actual &&
	test_cmp expect actual


Rewrite f78b0905e139f6556b004c5f87cfe750aa8e3286 (1/3) (0 seconds passed, remaining 0 predicted)    
Rewrite c9fbe965b33cbcb81865d123297fe4df816d7555 (2/3) (0 seconds passed, remaining 0 predicted)    
Rewrite fea59ed4667894c7bd682b11f147174ab39c40bd (3/3) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/main' is unchanged
T -> T (fea59ed4667894c7bd682b11f147174ab39c40bd -> fea59ed4667894c7bd682b11f147174ab39c40bd)
ok 28 - Tag name filtering retains tag message

expecting success of 7003.29 'Tag name filtering strips gpg signature': 
	sha1=$(git rev-parse HEAD) &&
	sha1t=$(echo "$faux_gpg_tag" | sed -e s/XXXXXX/$sha1/ | git mktag) &&
	git update-ref "refs/tags/S" "$sha1t" &&
	echo "$faux_gpg_tag" | sed -e s/XXXXXX/$sha1/ | head -n 6 > expect &&
	git filter-branch -f --tag-name-filter cat &&
	git cat-file tag S > actual &&
	test_cmp expect actual


Rewrite f78b0905e139f6556b004c5f87cfe750aa8e3286 (1/3) (0 seconds passed, remaining 0 predicted)    
Rewrite c9fbe965b33cbcb81865d123297fe4df816d7555 (2/3) (0 seconds passed, remaining 0 predicted)    
Rewrite fea59ed4667894c7bd682b11f147174ab39c40bd (3/3) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/main' is unchanged
S -> S (fea59ed4667894c7bd682b11f147174ab39c40bd -> fea59ed4667894c7bd682b11f147174ab39c40bd)
gpg signature stripped from tag object 5e10caf7d74c3ace8930aa1d5449d4d0ceb2e9e0
T -> T (fea59ed4667894c7bd682b11f147174ab39c40bd -> fea59ed4667894c7bd682b11f147174ab39c40bd)
ok 29 - Tag name filtering strips gpg signature

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7003.30 'Filtering retains message of gpg signed commit': 
	mkdir gpg &&
	touch gpg/foo &&
	git add gpg &&
	test_tick &&
	git commit -S -m "Adding gpg" &&

	git log -1 --format="%s" > expect &&
	git filter-branch -f --msg-filter "cat" &&
	git log -1 --format="%s" > actual &&
	test_cmp expect actual

[main fd31159] Adding gpg
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 gpg/foo

Rewrite f78b0905e139f6556b004c5f87cfe750aa8e3286 (1/4) (0 seconds passed, remaining 0 predicted)    
Rewrite c9fbe965b33cbcb81865d123297fe4df816d7555 (2/4) (0 seconds passed, remaining 0 predicted)    
Rewrite fea59ed4667894c7bd682b11f147174ab39c40bd (3/4) (0 seconds passed, remaining 0 predicted)    
Rewrite fd31159796ae08f4dd30103a0dbb9dfad726d145 (4/4) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
ok 30 - Filtering retains message of gpg signed commit

expecting success of 7003.31 'Tag name filtering allows slashes in tag names': 
	git tag -m tag-with-slash X/1 &&
	git cat-file tag X/1 | sed -e s,X/1,X/2, > expect &&
	git filter-branch -f --tag-name-filter "echo X/2" &&
	git cat-file tag X/2 > actual &&
	test_cmp expect actual


Rewrite f78b0905e139f6556b004c5f87cfe750aa8e3286 (1/4) (0 seconds passed, remaining 0 predicted)    
Rewrite c9fbe965b33cbcb81865d123297fe4df816d7555 (2/4) (0 seconds passed, remaining 0 predicted)    
Rewrite fea59ed4667894c7bd682b11f147174ab39c40bd (3/4) (0 seconds passed, remaining 0 predicted)    
Rewrite ecd85101fddd95209f80a2603d99c1decb1c32b3 (4/4) (1 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/main' is unchanged
S -> X/2 (fea59ed4667894c7bd682b11f147174ab39c40bd -> fea59ed4667894c7bd682b11f147174ab39c40bd)
T -> X/2 (fea59ed4667894c7bd682b11f147174ab39c40bd -> fea59ed4667894c7bd682b11f147174ab39c40bd)
X/1 -> X/2 (ecd85101fddd95209f80a2603d99c1decb1c32b3 -> ecd85101fddd95209f80a2603d99c1decb1c32b3)
ok 31 - Tag name filtering allows slashes in tag names

expecting success of 7003.32 'setup --prune-empty comparisons': 
	git checkout --orphan main-no-a &&
	git rm -rf . &&
	unset test_tick &&
	test_tick &&
	GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" &&
	test_commit --notick B B.t B Bx &&
	git checkout -b branch-no-a Bx &&
	test_commit D D.t D Dx &&
	mkdir dir &&
	test_commit dir/D dir/D.t dir/D dir/Dx &&
	test_commit E E.t E Ex &&
	git checkout main-no-a &&
	test_commit C C.t C Cx &&
	git checkout branch-no-a &&
	git merge Cx -m "Merge tag 'C' into branch" &&
	git tag Fx &&
	test_commit G G.t G Gx &&
	test_commit H H.t H Hx &&
	git checkout branch

Switched to a new branch 'main-no-a'
rm 'bar'
rm 'gpg/foo'
[main-no-a (root-commit) 8d95d31] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'branch-no-a'
[branch-no-a 2d0b6b2] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
[branch-no-a 6b73242] dir/D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/D.t
[branch-no-a 6e45985] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.t
Switched to branch 'main-no-a'
[main-no-a 5a68040] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to branch 'branch-no-a'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[branch-no-a f0368e4] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.t
[branch-no-a 00fc75b] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.t
Switched to branch 'branch'
ok 32 - setup --prune-empty comparisons

expecting success of 7003.33 'Prune empty commits': 
	git rev-list HEAD > expect &&
	test_commit to_remove &&
	git filter-branch -f --index-filter "git update-index --remove to_remove.t" --prune-empty HEAD &&
	git rev-list HEAD > actual &&
	test_cmp expect actual

[branch 219a992] to_remove
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_remove.t

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/14) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/14) (1 seconds passed, remaining 6 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (2/14) (1 seconds passed, remaining 6 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (2/14) (1 seconds passed, remaining 6 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (5/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (11/14) (3 seconds passed, remaining 0 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (11/14) (3 seconds passed, remaining 0 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (11/14) (3 seconds passed, remaining 0 predicted)    
Rewrite 219a992bdcfa9f21a6ac93c218579aed7936acdd (11/14) (3 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
ok 33 - Prune empty commits

expecting success of 7003.34 'prune empty collapsed merges': 
	test_config merge.ff false &&
	git rev-list HEAD >expect &&
	test_commit to_remove_2 &&
	git reset --hard HEAD^ &&
	test_merge non-ff to_remove_2 &&
	git filter-branch -f --index-filter "git update-index --remove to_remove_2.t" --prune-empty HEAD &&
	git rev-list HEAD >actual &&
	test_cmp expect actual

[branch cb86908] to_remove_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to_remove_2.t
HEAD is now at ead226b again not subdir
Merge made by the 'ort' strategy.
 to_remove_2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 to_remove_2.t

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/15) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/15) (0 seconds passed, remaining 0 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (3/15) (0 seconds passed, remaining 0 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (4/15) (1 seconds passed, remaining 2 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (4/15) (1 seconds passed, remaining 2 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (4/15) (1 seconds passed, remaining 2 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (4/15) (1 seconds passed, remaining 2 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (4/15) (1 seconds passed, remaining 2 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (9/15) (2 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (9/15) (2 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (9/15) (2 seconds passed, remaining 1 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (9/15) (2 seconds passed, remaining 1 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (9/15) (2 seconds passed, remaining 1 predicted)    
Rewrite cb86908a399a1a40c4270055e48259f9034a5458 (14/15) (3 seconds passed, remaining 0 predicted)    
Rewrite 61efb63b91ac2be151fa30bc4f43e001cd3b8c86 (14/15) (3 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/branch' was rewritten
ok 34 - prune empty collapsed merges

expecting success of 7003.35 'prune empty works even without index/tree filters': 
	git rev-list HEAD >expect &&
	git commit --allow-empty -m empty &&
	git filter-branch -f --prune-empty HEAD &&
	git rev-list HEAD >actual &&
	test_cmp expect actual

[branch 5b6cb84] empty
 Author: A U Thor <author@example.com>

Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/14) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/14) (0 seconds passed, remaining 0 predicted)    
Rewrite 3d6c5360ccb48d27bbc524f53496821309a1fc79 (3/14) (1 seconds passed, remaining 3 predicted)    
Rewrite ef5df644a239016a9035ed6fe3e7f2b4b4a349bd (3/14) (1 seconds passed, remaining 3 predicted)    
Rewrite d66aa888e8e10ccecac31b04a73b006afcfb6ab2 (3/14) (1 seconds passed, remaining 3 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (3/14) (1 seconds passed, remaining 3 predicted)    
Rewrite 095b78eb9c1f77139224464f38f1e0aff8add3cf (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 20d07e95852c2683da5bd70d3badbd5028484552 (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 8a3423ee5559c5e0c32440a860f6b09a0e6020fc (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite bb8f80d463b54137409c5a381ad07ea6bf4b1867 (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 5bae69c6543c34be1d98816e26501bcda79d1d6b (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 140072ead29d56d10c1c5c473c117e3aed45a333 (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite ead226bc0b53c5d210f2326ae871b0fea3004df3 (7/14) (1 seconds passed, remaining 1 predicted)    
Rewrite 5b6cb848f343668f1f75c3258a59d12c1680d67f (7/14) (1 seconds passed, remaining 1 predicted)    
Ref 'refs/heads/branch' was rewritten
ok 35 - prune empty works even without index/tree filters

expecting success of 7003.36 '--prune-empty is able to prune root commit': 
	git rev-list branch-no-a >expect &&
	git branch testing H &&
	git filter-branch -f --prune-empty --index-filter "git update-index --remove A.t" testing &&
	git rev-list testing >actual &&
	git branch -D testing &&
	test_cmp expect actual


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/9) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/9) (0 seconds passed, remaining 0 predicted)    
Rewrite bd662c15882f4e7910b78fc26a3d8fe1ffa802e5 (3/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 3abb9b554927997a06e6fafc3c62469a75ef32a3 (4/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 48ac83b9774bbddb9c1cd6fe140d5380297aa69c (5/9) (0 seconds passed, remaining 0 predicted)    
Rewrite 0e63577b8a9dce52b69167d9c008f6a0e30de818 (6/9) (1 seconds passed, remaining 0 predicted)    
Rewrite 013e089e8403f3749848f7aafc6f271fb7179dbc (6/9) (1 seconds passed, remaining 0 predicted)    
Rewrite 3c39262d23e70569701d337b4d27a1e97512c2d9 (6/9) (1 seconds passed, remaining 0 predicted)    
Rewrite 110eac945dc1713b27bdf49e74e5805db66971f0 (6/9) (1 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/testing' was rewritten
Deleted branch testing (was 00fc75b).
ok 36 - --prune-empty is able to prune root commit

expecting success of 7003.37 '--prune-empty is able to prune entire branch': 
	git branch prune-entire B &&
	git filter-branch -f --prune-empty --index-filter "git update-index --remove A.t B.t" prune-entire &&
	test_must_fail git rev-parse refs/heads/prune-entire &&
	if test_have_prereq REFFILES
	then
		test_must_fail git reflog exists refs/heads/prune-entire
	fi


Rewrite 0ddfaf193ff13d6ab39b7cbd9eed645e3ee2f050 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite e86e54590a6764f0c4219b3fe8b5e971cd5a0ed8 (2/2) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/prune-entire' was deleted
fatal: ambiguous argument 'refs/heads/prune-entire': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/heads/prune-entire
ok 37 - --prune-empty is able to prune entire branch

expecting success of 7003.38 '--remap-to-ancestor with filename filters': 
	git checkout main &&
	git reset --hard A &&
	test_commit add-foo foo 1 &&
	git branch moved-foo &&
	test_commit add-bar bar a &&
	git branch invariant &&
	orig_invariant=$(git rev-parse invariant) &&
	git branch moved-bar &&
	test_commit change-foo foo 2 &&
	git filter-branch -f --remap-to-ancestor \
		moved-foo moved-bar A..main \
		-- -- foo &&
	test $(git rev-parse moved-foo) = $(git rev-parse moved-bar) &&
	test $(git rev-parse moved-foo) = $(git rev-parse main^) &&
	test $orig_invariant = $(git rev-parse invariant)

Switched to branch 'main'
HEAD is now at 0ddfaf1 A
[main 7d21991] add-foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main 2ff770b] add-bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[main b2d4813] change-foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

Rewrite 7d219912875c3b539add35fdb1e3d70e5572ca7c (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite b2d4813d3ebe523582008cb287d933f8c14917be (2/2) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/moved-foo' is unchanged
Ref 'refs/heads/moved-bar' was rewritten
Ref 'refs/heads/main' was rewritten
ok 38 - --remap-to-ancestor with filename filters

expecting success of 7003.39 'automatic remapping to ancestor with filename filters': 
	git checkout main &&
	git reset --hard A &&
	test_commit add-foo2 foo 1 &&
	git branch moved-foo2 &&
	test_commit add-bar2 bar a &&
	git branch invariant2 &&
	orig_invariant=$(git rev-parse invariant2) &&
	git branch moved-bar2 &&
	test_commit change-foo2 foo 2 &&
	git filter-branch -f \
		moved-foo2 moved-bar2 A..main \
		-- -- foo &&
	test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
	test $(git rev-parse moved-foo2) = $(git rev-parse main^) &&
	test $orig_invariant = $(git rev-parse invariant2)

Already on 'main'
HEAD is now at 0ddfaf1 A
[main 59b5b5a] add-foo2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[main 20d4afa] add-bar2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[main 1fe7e14] change-foo2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)

Rewrite 59b5b5af49738cc3e3cc6618c173c3d768334f67 (1/2) (0 seconds passed, remaining 0 predicted)    
Rewrite 1fe7e1483a7337eb5fecbd426d19506d3422d75d (2/2) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/moved-foo2' is unchanged
Ref 'refs/heads/moved-bar2' was rewritten
Ref 'refs/heads/main' was rewritten
ok 39 - automatic remapping to ancestor with filename filters

expecting success of 7003.40 'setup submodule': 
	rm -fr ?* .git &&
	git init &&
	test_commit file &&
	mkdir submod &&
	submodurl="$PWD/submod" &&
	( cd submod &&
	  git init &&
	  test_commit file-in-submod ) &&
	git submodule add "$submodurl" &&
	git commit -m "added submodule" &&
	test_commit add-file &&
	( cd submod && test_commit add-in-submodule ) &&
	git add submod &&
	git commit -m "changed submodule" &&
	git branch original HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/.git/
[main (root-commit) cc5d755] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7003-filter-branch/submod/.git/
[main (root-commit) bd0b946] file-in-submod
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file-in-submod.t
Adding existing repo at 'submod' to the index
[main 0173ef1] added submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submod
[main 3b77d93] add-file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 add-file.t
[main bf0f869] add-in-submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 add-in-submodule.t
[main abfacaa] changed submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 40 - setup submodule

expecting success of 7003.41 'rewrite submodule with another content': 
	git filter-branch --tree-filter "test -d submod && {
					 rm -rf submod &&
					 git rm -rf --quiet submod &&
					 mkdir submod &&
					 : > submod/file
					 } || :" HEAD &&
	test $orig_head != $(git show-ref --hash --head HEAD)


Rewrite cc5d7558673710c1da61856fa53718f4fe4029c5 (1/4) (0 seconds passed, remaining 0 predicted)    
Rewrite 0173ef1688c50594628d85815a4d7cd90b5621ac (2/4) (0 seconds passed, remaining 0 predicted)    
Rewrite 3b77d93afd2ae40efd754e094a32dae935fed4b4 (3/4) (0 seconds passed, remaining 0 predicted)    
Rewrite abfacaae1f3c4c68104f6b71cd8d3f662a75132a (4/4) (1 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
warning: unable to rmdir 'submod': Directory not empty
ok 41 - rewrite submodule with another content

expecting success of 7003.42 'replace submodule revision': 
	invalid=$(test_oid numeric) &&
	git reset --hard original &&
	git filter-branch -f --tree-filter \
	    "if git ls-files --error-unmatch -- submod > /dev/null 2>&1
	     then git update-index --cacheinfo 160000 $invalid submod
	     fi" HEAD &&
	test $orig_head != $(git show-ref --hash --head HEAD)

HEAD is now at abfacaa changed submodule

Rewrite cc5d7558673710c1da61856fa53718f4fe4029c5 (1/4) (0 seconds passed, remaining 0 predicted)    
Rewrite 0173ef1688c50594628d85815a4d7cd90b5621ac (2/4) (0 seconds passed, remaining 0 predicted)    
Rewrite 3b77d93afd2ae40efd754e094a32dae935fed4b4 (3/4) (0 seconds passed, remaining 0 predicted)    
Rewrite abfacaae1f3c4c68104f6b71cd8d3f662a75132a (4/4) (1 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
ok 42 - replace submodule revision

expecting success of 7003.43 'filter commit message without trailing newline': 
	git reset --hard original &&
	commit=$(printf "no newline" | git commit-tree HEAD^{tree}) &&
	git update-ref refs/heads/no-newline $commit &&
	git filter-branch -f refs/heads/no-newline &&
	echo $commit >expect &&
	git rev-parse refs/heads/no-newline >actual &&
	test_cmp expect actual

HEAD is now at abfacaa changed submodule

Rewrite d4710eee18a40b6194f1e2f8ca13d7f12a4b5523 (1/1) (0 seconds passed, remaining 0 predicted)    
WARNING: Ref 'refs/heads/no-newline' is unchanged
ok 43 - filter commit message without trailing newline

expecting success of 7003.44 'tree-filter deals with object name vs pathname ambiguity': 
	test_when_finished "git reset --hard original" &&
	ambiguous=$(git rev-list -1 HEAD) &&
	git filter-branch --tree-filter "mv file.t $ambiguous" HEAD^.. &&
	git show HEAD:$ambiguous


Rewrite abfacaae1f3c4c68104f6b71cd8d3f662a75132a (1/1) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten
file
HEAD is now at abfacaa changed submodule
ok 44 - tree-filter deals with object name vs pathname ambiguity

expecting success of 7003.45 'rewrite repository including refs that point at non-commit object': 
	test_when_finished "git reset --hard original" &&
	tree=$(git rev-parse HEAD^{tree}) &&
	test_when_finished "git replace -d $tree" &&
	echo A >new &&
	git add new &&
	new_tree=$(git write-tree) &&
	git replace $tree $new_tree &&
	git tag -a -m "tag to a tree" treetag $new_tree &&
	git reset --hard HEAD &&
	git filter-branch -f -- --all >filter-output 2>&1 &&
	! grep fatal filter-output

HEAD is now at abfacaa changed submodule
Deleted replace ref 'f8383c24c9c83ad34676280ad77d382177957a2e'
HEAD is now at abfacaa changed submodule
ok 45 - rewrite repository including refs that point at non-commit object

expecting success of 7003.46 'filter-branch handles ref deletion': 
	git switch --orphan empty-commit &&
	git commit --allow-empty -m "empty commit" &&
	git tag empty &&
	git branch to-delete &&
	git filter-branch -f --prune-empty to-delete >out 2>&1 &&
	grep "to-delete.*was deleted" out &&
	test_must_fail git rev-parse --verify to-delete

warning: unable to rmdir 'submod': Directory not empty
Switched to a new branch 'empty-commit'
[empty-commit (root-commit) dfb35d9] empty commit
 Author: A U Thor <author@example.com>
Ref 'refs/heads/to-delete' was deleted
fatal: Needed a single revision
ok 46 - filter-branch handles ref deletion

expecting success of 7003.47 'filter-branch handles ref rewrite': 
	git checkout empty &&
	test_commit to-drop &&
	git branch rewrite &&
	git filter-branch -f \
		--index-filter "git rm --ignore-unmatch --cached to-drop.t" \
		 rewrite >out 2>&1 &&
	grep "rewrite.*was rewritten" out &&
	! grep -i warning out &&
	git diff-tree empty rewrite

Note: switching to 'empty'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dfb35d9 empty commit
[detached HEAD 01ece84] to-drop
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-drop.t
Ref 'refs/heads/rewrite' was rewritten
ok 47 - filter-branch handles ref rewrite

expecting success of 7003.48 'filter-branch handles ancestor rewrite': 
	test_commit to-exclude &&
	git branch ancestor &&
	git filter-branch -f ancestor -- :^to-exclude.t >out 2>&1 &&
	grep "ancestor.*was rewritten" out &&
	! grep -i warning out &&
	git diff-tree HEAD^ ancestor

[detached HEAD 07a3627] to-exclude
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-exclude.t
Ref 'refs/heads/ancestor' was rewritten
ok 48 - filter-branch handles ancestor rewrite

# passed all 48 test(s)
1..48
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7101-reset-empty-subdirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7101-reset-empty-subdirs/.git/
expecting success of 7101.1 'creating initial files': 
     mkdir path0 &&
     COPYING_test_data >path0/COPYING &&
     git add path0/COPYING &&
     git commit -m add -a

[master (root-commit) eb5c9d9] add
 Author: A U Thor <author@example.com>
 1 file changed, 18 insertions(+)
 create mode 100644 path0/COPYING
ok 1 - creating initial files

expecting success of 7101.2 'creating second files': 
     mkdir path1 &&
     mkdir path1/path2 &&
     COPYING_test_data >path1/path2/COPYING &&
     COPYING_test_data >path1/COPYING &&
     COPYING_test_data >COPYING &&
     COPYING_test_data >path0/COPYING-TOO &&
     git add path1/path2/COPYING &&
     git add path1/COPYING &&
     git add COPYING &&
     git add path0/COPYING-TOO &&
     git commit -m change -a

[master 2982bdc] change
 Author: A U Thor <author@example.com>
 4 files changed, 72 insertions(+)
 create mode 100644 COPYING
 create mode 100644 path0/COPYING-TOO
 create mode 100644 path1/COPYING
 create mode 100644 path1/path2/COPYING
ok 2 - creating second files

expecting success of 7101.3 'resetting tree HEAD^': 
     git reset --hard HEAD^

HEAD is now at eb5c9d9 add
ok 3 - resetting tree HEAD^

expecting success of 7101.4 'checking initial files exist after rewind': 
     test -d path0 &&
     test -f path0/COPYING

ok 4 - checking initial files exist after rewind

expecting success of 7101.5 'checking lack of path1/path2/COPYING': 
    ! test -f path1/path2/COPYING

ok 5 - checking lack of path1/path2/COPYING

expecting success of 7101.6 'checking lack of path1/COPYING': 
    ! test -f path1/COPYING

ok 6 - checking lack of path1/COPYING

expecting success of 7101.7 'checking lack of COPYING': 
     ! test -f COPYING

ok 7 - checking lack of COPYING

expecting success of 7101.8 'checking checking lack of path1/COPYING-TOO': 
     ! test -f path0/COPYING-TOO

ok 8 - checking checking lack of path1/COPYING-TOO

expecting success of 7101.9 'checking lack of path1/path2': 
     ! test -d path1/path2

ok 9 - checking lack of path1/path2

expecting success of 7101.10 'checking lack of path1': 
     ! test -d path1

ok 10 - checking lack of path1

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7064-wtstatus-pv2.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7064-wtstatus-pv2/.git/
expecting success of 7064.1 'setup': 
	git checkout -f --orphan initial-branch &&
	test_tick &&
	git config core.autocrlf false &&
	echo x >file_x &&
	echo y >file_y &&
	echo z >file_z &&
	mkdir dir1 &&
	echo a >dir1/file_a &&
	echo b >dir1/file_b

Switched to a new branch 'initial-branch'
ok 1 - setup

expecting success of 7064.2 'before initial commit, nothing added, only untracked': 
	cat >expect <<-EOF &&
	# branch.oid (initial)
	# branch.head initial-branch
	? actual
	? dir1/
	? expect
	? file_x
	? file_y
	? file_z
	EOF

	git status --porcelain=v2 --branch --untracked-files=normal >actual &&
	test_cmp expect actual

ok 2 - before initial commit, nothing added, only untracked

expecting success of 7064.3 'before initial commit, things added': 
	git add file_x file_y file_z dir1 &&
	OID_A=$(git hash-object -t blob -- dir1/file_a) &&
	OID_B=$(git hash-object -t blob -- dir1/file_b) &&
	OID_X=$(git hash-object -t blob -- file_x) &&
	OID_Y=$(git hash-object -t blob -- file_y) &&
	OID_Z=$(git hash-object -t blob -- file_z) &&

	cat >expect <<-EOF &&
	# branch.oid (initial)
	# branch.head initial-branch
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_A dir1/file_a
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_B dir1/file_b
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_X file_x
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_Y file_y
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_Z file_z
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

ok 3 - before initial commit, things added

expecting success of 7064.4 'before initial commit, things added (-z)': 
	lf_to_nul >expect <<-EOF &&
	# branch.oid (initial)
	# branch.head initial-branch
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_A dir1/file_a
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_B dir1/file_b
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_X file_x
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_Y file_y
	1 A. N... 000000 100644 100644 $ZERO_OID $OID_Z file_z
	? actual
	? expect
	EOF

	git status -z --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

ok 4 - before initial commit, things added (-z)

expecting success of 7064.5 'make first commit, comfirm HEAD oid and branch': 
	git commit -m initial &&
	H0=$(git rev-parse HEAD) &&
	cat >expect <<-EOF &&
	# branch.oid $H0
	# branch.head initial-branch
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

[initial-branch (root-commit) bbc01be] initial
 Author: A U Thor <author@example.com>
 5 files changed, 5 insertions(+)
 create mode 100644 dir1/file_a
 create mode 100644 dir1/file_b
 create mode 100644 file_x
 create mode 100644 file_y
 create mode 100644 file_z
ok 5 - make first commit, comfirm HEAD oid and branch

expecting success of 7064.6 'after first commit, create unstaged changes': 
	echo x >>file_x &&
	OID_X1=$(git hash-object -t blob -- file_x) &&
	rm file_z &&
	H0=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $H0
	# branch.head initial-branch
	1 .M N... 100644 100644 100644 $OID_X $OID_X file_x
	1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

ok 6 - after first commit, create unstaged changes

expecting success of 7064.7 'after first commit, stash existing changes': 
	cat >expect <<-EOF &&
	# branch.oid $H0
	# branch.head initial-branch
	# stash 2
	EOF

	test_when_finished "git stash pop && git stash pop" &&

	git stash -- file_x &&
	git stash &&
	git status --porcelain=v2 --branch --show-stash --untracked-files=no >actual &&
	test_cmp expect actual

Saved working directory and index state WIP on initial-branch: bbc01be initial
Saved working directory and index state WIP on initial-branch: bbc01be initial
Merging Version stash was based on with Stashed changes
On branch initial-branch
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file_z

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (7d6b8e1b8ed7cd9791a23d6b5ab65250a4f45aff)
Merging Version stash was based on with Stashed changes
On branch initial-branch
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file_x
	deleted:    file_z

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	expect

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (eee214d8ade22cdf92454c5294f0fc57fe772547)
ok 7 - after first commit, stash existing changes

expecting success of 7064.8 'after first commit but omit untracked files and branch': 
	cat >expect <<-EOF &&
	1 .M N... 100644 100644 100644 $OID_X $OID_X file_x
	1 .D N... 100644 100644 000000 $OID_Z $OID_Z file_z
	EOF

	git status --porcelain=v2 --untracked-files=no >actual &&
	test_cmp expect actual

ok 8 - after first commit but omit untracked files and branch

expecting success of 7064.9 'after first commit, stage existing changes': 
	git add file_x &&
	git rm file_z &&
	H0=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $H0
	# branch.head initial-branch
	1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x
	1 D. N... 100644 000000 000000 $OID_Z $ZERO_OID file_z
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

rm 'file_z'
ok 9 - after first commit, stage existing changes

expecting success of 7064.10 'rename causes 2 path lines': 
	git mv file_y renamed_y &&
	H0=$(git rev-parse HEAD) &&

	q_to_tab >expect <<-EOF &&
	# branch.oid $H0
	# branch.head initial-branch
	1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x
	1 D. N... 100644 000000 000000 $OID_Z $ZERO_OID file_z
	2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

ok 10 - rename causes 2 path lines

expecting success of 7064.11 'rename causes 2 path lines (-z)': 
	H0=$(git rev-parse HEAD) &&

	## Lines use NUL path separator and line terminator, so double transform here.
	q_to_nul <<-EOF | lf_to_nul >expect &&
	# branch.oid $H0
	# branch.head initial-branch
	1 M. N... 100644 100644 100644 $OID_X $OID_X1 file_x
	1 D. N... 100644 000000 000000 $OID_Z $ZERO_OID file_z
	2 R. N... 100644 100644 100644 $OID_Y $OID_Y R100 renamed_yQfile_y
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all -z >actual &&
	test_cmp expect actual

ok 11 - rename causes 2 path lines (-z)

expecting success of 7064.12 'make second commit, confirm clean and new HEAD oid': 
	git commit -m second &&
	H1=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $H1
	# branch.head initial-branch
	? actual
	? expect
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

[initial-branch 84bf28d] second
 Author: A U Thor <author@example.com>
 3 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 file_z
 rename file_y => renamed_y (100%)
ok 12 - make second commit, confirm clean and new HEAD oid

expecting success of 7064.13 'confirm ignored files are not printed': 
	test_when_finished "rm -f x.ign .gitignore" &&
	echo x.ign >.gitignore &&
	echo "ignore me" >x.ign &&

	cat >expect <<-EOF &&
	? .gitignore
	? actual
	? expect
	EOF

	git status --porcelain=v2 --untracked-files=all >actual &&
	test_cmp expect actual

ok 13 - confirm ignored files are not printed

expecting success of 7064.14 'ignored files are printed with --ignored': 
	test_when_finished "rm -f x.ign .gitignore" &&
	echo x.ign >.gitignore &&
	echo "ignore me" >x.ign &&

	cat >expect <<-EOF &&
	? .gitignore
	? actual
	? expect
	! x.ign
	EOF

	git status --porcelain=v2 --ignored --untracked-files=all >actual &&
	test_cmp expect actual

ok 14 - ignored files are printed with --ignored

expecting success of 7064.15 'create and commit permanent ignore file': 
	cat >.gitignore <<-EOF &&
	actual*
	expect*
	EOF

	git add .gitignore &&
	git commit -m ignore_trash &&
	H1=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $H1
	# branch.head initial-branch
	EOF

	git status --porcelain=v2 --branch >actual &&
	test_cmp expect actual

[initial-branch f09abb9] ignore_trash
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore
ok 15 - create and commit permanent ignore file

expecting success of 7064.16 'verify --intent-to-add output': 
	test_when_finished "git rm -f intent1.add intent2.add" &&
	touch intent1.add &&
	echo test >intent2.add &&

	git add --intent-to-add intent1.add intent2.add &&

	cat >expect <<-EOF &&
	1 .A N... 000000 000000 100644 $ZERO_OID $ZERO_OID intent1.add
	1 .A N... 000000 000000 100644 $ZERO_OID $ZERO_OID intent2.add
	EOF

	git status --porcelain=v2 >actual &&
	test_cmp expect actual

rm 'intent1.add'
rm 'intent2.add'
ok 16 - verify --intent-to-add output

expecting success of 7064.17 'verify AA (add-add) conflict': 
	test_when_finished "git reset --hard" &&

	git branch AA_A initial-branch &&
	git checkout AA_A &&
	echo "Branch AA_A" >conflict.txt &&
	OID_AA_A=$(git hash-object -t blob -- conflict.txt) &&
	git add conflict.txt &&
	git commit -m "branch aa_a" &&

	git branch AA_B initial-branch &&
	git checkout AA_B &&
	echo "Branch AA_B" >conflict.txt &&
	OID_AA_B=$(git hash-object -t blob -- conflict.txt) &&
	git add conflict.txt &&
	git commit -m "branch aa_b" &&

	git branch AA_M AA_B &&
	git checkout AA_M &&
	test_must_fail git merge AA_A &&

	HM=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $HM
	# branch.head AA_M
	u AA N... 000000 100644 100644 100644 $ZERO_OID $OID_AA_B $OID_AA_A conflict.txt
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

Switched to branch 'AA_A'
[AA_A 55eca05] branch aa_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.txt
Switched to branch 'AA_B'
[AA_B 307553c] branch aa_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.txt
Switched to branch 'AA_M'
Auto-merging conflict.txt
CONFLICT (add/add): Merge conflict in conflict.txt
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 307553c branch aa_b
ok 17 - verify AA (add-add) conflict

expecting success of 7064.18 'verify UU (edit-edit) conflict': 
	test_when_finished "git reset --hard" &&

	git branch UU_ANC initial-branch &&
	git checkout UU_ANC &&
	echo "Ancestor" >conflict.txt &&
	OID_UU_ANC=$(git hash-object -t blob -- conflict.txt) &&
	git add conflict.txt &&
	git commit -m "UU_ANC" &&

	git branch UU_A UU_ANC &&
	git checkout UU_A &&
	echo "Branch UU_A" >conflict.txt &&
	OID_UU_A=$(git hash-object -t blob -- conflict.txt) &&
	git add conflict.txt &&
	git commit -m "branch uu_a" &&

	git branch UU_B UU_ANC &&
	git checkout UU_B &&
	echo "Branch UU_B" >conflict.txt &&
	OID_UU_B=$(git hash-object -t blob -- conflict.txt) &&
	git add conflict.txt &&
	git commit -m "branch uu_b" &&

	git branch UU_M UU_B &&
	git checkout UU_M &&
	test_must_fail git merge UU_A &&

	HM=$(git rev-parse HEAD) &&

	cat >expect <<-EOF &&
	# branch.oid $HM
	# branch.head UU_M
	u UU N... 100644 100644 100644 100644 $OID_UU_ANC $OID_UU_B $OID_UU_A conflict.txt
	EOF

	git status --porcelain=v2 --branch --untracked-files=all >actual &&
	test_cmp expect actual

Switched to branch 'UU_ANC'
[UU_ANC 70071ed] UU_ANC
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.txt
Switched to branch 'UU_A'
[UU_A a088b5d] branch uu_a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'UU_B'
[UU_B c5f3cc7] branch uu_b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'UU_M'
Auto-merging conflict.txt
CONFLICT (content): Merge conflict in conflict.txt
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at c5f3cc7 branch uu_b
ok 18 - verify UU (edit-edit) conflict

expecting success of 7064.19 'verify upstream fields in branch header': 
	git checkout initial-branch &&
	test_when_finished "rm -rf sub_repo" &&
	git clone . sub_repo &&
	(
		## Confirm local initial-branch tracks remote initial-branch.
		cd sub_repo &&
		HUF=$(git rev-parse HEAD) &&

		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		## Test ahead/behind.
		echo xyz >file_xyz &&
		git add file_xyz &&
		git commit -m xyz &&

		HUF=$(git rev-parse HEAD) &&

		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +1 -0
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		## Repeat the above but without --branch.
		git status --porcelain=v2 --untracked-files=all >actual &&
		test_must_be_empty actual &&

		## Test upstream-gone case. Fake this by pointing
		## origin/initial-branch at a non-existing commit.
		git update-ref -d refs/remotes/origin/initial-branch &&

		HUF=$(git rev-parse HEAD) &&

		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

Switched to branch 'initial-branch'
Cloning into 'sub_repo'...
done.
[initial-branch 638bb2b] xyz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file_xyz
ok 19 - verify upstream fields in branch header

expecting success of 7064.20 'verify --[no-]ahead-behind with V2 format': 
	git checkout initial-branch &&
	test_when_finished "rm -rf sub_repo" &&
	git clone . sub_repo &&
	(
		## Confirm local initial-branch tracks remote initial-branch.
		cd sub_repo &&
		HUF=$(git rev-parse HEAD) &&

		# Confirm --no-ahead-behind reports traditional branch.ab with 0/0 for equal branches.
		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		EOF

		git status --no-ahead-behind --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		# Confirm --ahead-behind reports traditional branch.ab with 0/0.
		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		EOF

		git status --ahead-behind --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		## Test non-equal ahead/behind.
		echo xyz >file_xyz &&
		git add file_xyz &&
		git commit -m xyz &&

		HUF=$(git rev-parse HEAD) &&

		# Confirm --no-ahead-behind reports branch.ab with ?/? for non-equal branches.
		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +? -?
		EOF

		git status --no-ahead-behind --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		# Confirm --ahead-behind reports traditional branch.ab with 1/0.
		cat >expect <<-EOF &&
		# branch.oid $HUF
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +1 -0
		EOF

		git status --ahead-behind --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		# Confirm that "status.aheadbehind" DOES NOT work on V2 format.
		git -c status.aheadbehind=false status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual &&

		# Confirm that "status.aheadbehind" DOES NOT work on V2 format.
		git -c status.aheadbehind=true status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

Already on 'initial-branch'
Cloning into 'sub_repo'...
done.
[initial-branch 638bb2b] xyz
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file_xyz
ok 20 - verify --[no-]ahead-behind with V2 format

expecting success of 7064.21 'create and add submodule, submodule appears clean (A. S...)': 
	git checkout initial-branch &&
	git clone . sub_repo &&
	git clone . super_repo &&
	test_config_global protocol.file.allow always &&
	(	cd super_repo &&
		git submodule add ../sub_repo sub1 &&

		## Confirm stage/add of clean submodule.
		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 A. S... 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

Already on 'initial-branch'
Cloning into 'sub_repo'...
done.
Cloning into 'super_repo'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7064-wtstatus-pv2/super_repo/sub1'...
done.
ok 21 - create and add submodule, submodule appears clean (A. S...)

expecting success of 7064.22 'untracked changes in added submodule (AM S..U)': 
	(	cd super_repo &&
		## create untracked file in the submodule.
		(	cd sub1 &&
			echo "xxxx" >file_in_sub
		) &&

		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 AM S..U 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

ok 22 - untracked changes in added submodule (AM S..U)

expecting success of 7064.23 'staged changes in added submodule (AM S.M.)': 
	(	cd super_repo &&
		## stage the changes in the submodule.
		(	cd sub1 &&
			git add file_in_sub
		) &&

		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 AM S.M. 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

ok 23 - staged changes in added submodule (AM S.M.)

expecting success of 7064.24 'staged and unstaged changes in added (AM S.M.)': 
	(	cd super_repo &&
		(	cd sub1 &&
			## make additional unstaged changes (on the same file) in the submodule.
			## This does not cause us to get S.MU (because the submodule does not report
			## a "?" line for the unstaged changes).
			echo "more changes" >>file_in_sub
		) &&

		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 AM S.M. 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

ok 24 - staged and unstaged changes in added (AM S.M.)

expecting success of 7064.25 'staged and untracked changes in added submodule (AM S.MU)': 
	(	cd super_repo &&
		(	cd sub1 &&
			## stage new changes in tracked file.
			git add file_in_sub &&
			## create new untracked file.
			echo "yyyy" >>another_file_in_sub
		) &&

		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 AM S.MU 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

ok 25 - staged and untracked changes in added submodule (AM S.MU)

expecting success of 7064.26 'commit within the submodule appears as new commit in super (AM SC..)': 
	(	cd super_repo &&
		(	cd sub1 &&
			## Make a new commit in the submodule.
			git add file_in_sub &&
			rm -f another_file_in_sub &&
			git commit -m "new commit"
		) &&

		HMOD=$(git hash-object -t blob -- .gitmodules) &&
		HSUP=$(git rev-parse HEAD) &&
		HSUB=$HSUP &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +0 -0
		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
		1 AM SC.. 000000 160000 160000 $ZERO_OID $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

[initial-branch 49ed2bd] new commit
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 file_in_sub
ok 26 - commit within the submodule appears as new commit in super (AM SC..)

expecting success of 7064.27 'stage submodule in super and commit': 
	(	cd super_repo &&
		## Stage the new submodule commit in the super.
		git add sub1 &&
		## Commit the super so that the sub no longer appears as added.
		git commit -m "super commit" &&

		HSUP=$(git rev-parse HEAD) &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +1 -0
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

[initial-branch 9939ebd] super commit
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
ok 27 - stage submodule in super and commit

expecting success of 7064.28 'make unstaged changes in existing submodule (.M S.M.)': 
	(	cd super_repo &&
		(	cd sub1 &&
			echo "zzzz" >>file_in_sub
		) &&

		HSUP=$(git rev-parse HEAD) &&
		HSUB=$(cd sub1 && git rev-parse HEAD) &&

		cat >expect <<-EOF &&
		# branch.oid $HSUP
		# branch.head initial-branch
		# branch.upstream origin/initial-branch
		# branch.ab +1 -0
		1 .M S.M. 160000 160000 160000 $HSUB $HSUB sub1
		EOF

		git status --porcelain=v2 --branch --untracked-files=all >actual &&
		test_cmp expect actual
	)

ok 28 - make unstaged changes in existing submodule (.M S.M.)

# passed all 28 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7103-reset-bare.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7103-reset-bare/.git/
expecting success of 7103.1 'setup non-bare': 
	echo one >file &&
	git add file &&
	git commit -m one &&
	echo two >file &&
	git commit -a -m two

[master (root-commit) 1993c08] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 2f98c16] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup non-bare

expecting success of 7103.2 '"hard" reset requires a worktree': 
	(cd .git &&
	 test_must_fail git reset --hard)

fatal: this operation must be run in a work tree
ok 2 - "hard" reset requires a worktree

expecting success of 7103.3 '"merge" reset requires a worktree': 
	(cd .git &&
	 test_must_fail git reset --merge)

fatal: this operation must be run in a work tree
ok 3 - "merge" reset requires a worktree

expecting success of 7103.4 '"keep" reset requires a worktree': 
	(cd .git &&
	 test_must_fail git reset --keep)

fatal: this operation must be run in a work tree
ok 4 - "keep" reset requires a worktree

expecting success of 7103.5 '"mixed" reset is ok': 
	(cd .git && git reset)

ok 5 - "mixed" reset is ok

expecting success of 7103.6 '"soft" reset is ok': 
	(cd .git && git reset --soft)

ok 6 - "soft" reset is ok

expecting success of 7103.7 'hard reset works with GIT_WORK_TREE': 
	mkdir worktree &&
	GIT_WORK_TREE=$PWD/worktree GIT_DIR=$PWD/.git git reset --hard &&
	test_cmp file worktree/file

HEAD is now at 2f98c16 two
ok 7 - hard reset works with GIT_WORK_TREE

expecting success of 7103.8 'setup bare': 
	git clone --bare . bare.git &&
	cd bare.git

Cloning into bare repository 'bare.git'...
done.
ok 8 - setup bare

expecting success of 7103.9 '"hard" reset is not allowed in bare': 
	test_must_fail git reset --hard HEAD^

fatal: this operation must be run in a work tree
ok 9 - "hard" reset is not allowed in bare

expecting success of 7103.10 '"merge" reset is not allowed in bare': 
	test_must_fail git reset --merge HEAD^

fatal: this operation must be run in a work tree
ok 10 - "merge" reset is not allowed in bare

expecting success of 7103.11 '"keep" reset is not allowed in bare': 
	test_must_fail git reset --keep HEAD^

fatal: this operation must be run in a work tree
ok 11 - "keep" reset is not allowed in bare

expecting success of 7103.12 '"mixed" reset is not allowed in bare': 
	test_must_fail git reset --mixed HEAD^

fatal: mixed reset is not allowed in a bare repository
ok 12 - "mixed" reset is not allowed in bare

expecting success of 7103.13 '"soft" reset is allowed in bare': 
	git reset --soft HEAD^ &&
	git show --pretty=format:%s >out &&
	echo one >expect &&
	head -n 1 out >actual &&
	test_cmp expect actual

ok 13 - "soft" reset is allowed in bare

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7104-reset-hard.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7104-reset-hard/.git/
expecting success of 7104.1 'setup': 

	mkdir before later &&
	>before/1 &&
	>before/2 &&
	>hello &&
	>later/3 &&
	git add before hello later &&
	git commit -m world &&

	H=$(git rev-parse :hello) &&
	git rm --cached hello &&
	echo "100644 $H 2	hello" | git update-index --index-info &&

	rm -f hello &&
	mkdir -p hello &&
	>hello/world &&
	test "$(git ls-files -o)" = hello/world


[master (root-commit) 53313cc] world
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 before/1
 create mode 100644 before/2
 create mode 100644 hello
 create mode 100644 later/3
rm 'hello'
ok 1 - setup

expecting success of 7104.2 'reset --hard should restore unmerged ones': 

	git reset --hard &&
	git ls-files --error-unmatch before/1 before/2 hello later/3 &&
	test -f hello


HEAD is now at 53313cc world
before/1
before/2
hello
later/3
ok 2 - reset --hard should restore unmerged ones

expecting success of 7104.3 'reset --hard did not corrupt index or cache-tree': 

	T=$(git write-tree) &&
	rm -f .git/index &&
	git add before hello later &&
	U=$(git write-tree) &&
	test "$T" = "$U"


ok 3 - reset --hard did not corrupt index or cache-tree

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7105-reset-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7105-reset-patch/.git/
expecting success of 7105.1 'setup': 
	mkdir dir &&
	echo parent > dir/foo &&
	echo dummy > bar &&
	git add dir &&
	git commit -m initial &&
	test_tick &&
	test_commit second dir/foo head &&
	set_and_save_state bar bar_work bar_index &&
	save_head

[master (root-commit) e9a8876] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dir/foo
[master 3877f48] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup

expecting success of 7105.2 'saying "n" does nothing': 
	set_and_save_state dir/foo work work &&
	test_write_lines n n | git reset -p &&
	verify_saved_state dir/foo &&
	verify_saved_state bar

diff --git a/bar b/bar
new file mode 100644
index 0000000..7780244
--- /dev/null
+++ b/bar
@@ -0,0 +1 @@
+bar_index
(1/1) Unstage addition [y,n,q,a,d,e,?]? 
diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Unstage this hunk [y,n,q,a,d,e,?]? 
ok 2 - saying "n" does nothing

expecting success of 7105.3 'git reset -p': 
	test_write_lines n y | git reset -p >output &&
	verify_state dir/foo work head &&
	verify_saved_state bar &&
	test_i18ngrep "Unstage" output

(1/1) Unstage addition [y,n,q,a,d,e,?]? 
(1/1) Unstage this hunk [y,n,q,a,d,e,?]? 
ok 3 - git reset -p

expecting success of 7105.4 'git reset -p HEAD^': 
	test_write_lines n y | git reset -p HEAD^ >output &&
	verify_state dir/foo work parent &&
	verify_saved_state bar &&
	test_i18ngrep "Apply" output

(1/1) Apply deletion to index [y,n,q,a,d,?]? 
(1/1) Apply this hunk to index [y,n,q,a,d,e,?]? 
ok 4 - git reset -p HEAD^

expecting success of 7105.5 'git reset -p HEAD^^{tree}': 
	test_write_lines n y | git reset -p HEAD^^{tree} >output &&
	verify_state dir/foo work parent &&
	verify_saved_state bar &&
	test_i18ngrep "Apply" output

(1/1) Apply deletion to index [y,n,q,a,d,?]? 
ok 5 - git reset -p HEAD^^{tree}

expecting success of 7105.6 'git reset -p HEAD^:dir/foo (blob fails)': 
	set_and_save_state dir/foo work work &&
	test_must_fail git reset -p HEAD^:dir/foo &&
	verify_saved_state dir/foo &&
	verify_saved_state bar

fatal: Could not parse object 'HEAD^:dir/foo'.
ok 6 - git reset -p HEAD^:dir/foo (blob fails)

expecting success of 7105.7 'git reset -p aaaaaaaa (unknown fails)': 
	set_and_save_state dir/foo work work &&
	test_must_fail git reset -p aaaaaaaa &&
	verify_saved_state dir/foo &&
	verify_saved_state bar

fatal: ambiguous argument 'aaaaaaaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 7 - git reset -p aaaaaaaa (unknown fails)

expecting success of 7105.8 'git reset -p dir': 
	set_state dir/foo work work &&
	test_write_lines y n | git reset -p dir &&
	verify_state dir/foo work head &&
	verify_saved_state bar

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Unstage this hunk [y,n,q,a,d,e,?]? 
ok 8 - git reset -p dir

expecting success of 7105.9 'git reset -p -- foo (inside dir)': 
	set_state dir/foo work work &&
	test_write_lines y n | (cd dir && git reset -p -- foo) &&
	verify_state dir/foo work head &&
	verify_saved_state bar

diff --git a/dir/foo b/dir/foo
index 564b12f..b8f99f5 100644
--- a/dir/foo
+++ b/dir/foo
@@ -1 +1 @@
-head
+work
(1/1) Unstage this hunk [y,n,q,a,d,e,?]? 
ok 9 - git reset -p -- foo (inside dir)

expecting success of 7105.10 'git reset -p HEAD^ -- dir': 
	test_write_lines y n | git reset -p HEAD^ -- dir &&
	verify_state dir/foo work parent &&
	verify_saved_state bar

diff --git b/dir/foo a/dir/foo
index 564b12f..9676f5b 100644
--- b/dir/foo
+++ a/dir/foo
@@ -1 +1 @@
-head
+parent
(1/1) Apply this hunk to index [y,n,q,a,d,e,?]? 
ok 10 - git reset -p HEAD^ -- dir

expecting success of 7105.11 'none of this moved HEAD': 
	verify_saved_head

ok 11 - none of this moved HEAD

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7106-reset-unborn-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7106-reset-unborn-branch/.git/
expecting success of 7106.1 'setup': 
	echo a >a &&
	echo b >b

ok 1 - setup

expecting success of 7106.2 'reset': 
	git add a b &&
	git reset &&

	git ls-files >actual &&
	test_must_be_empty actual

ok 2 - reset

expecting success of 7106.3 'reset HEAD': 
	rm .git/index &&
	git add a b &&
	test_must_fail git reset HEAD

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 3 - reset HEAD

expecting success of 7106.4 'reset $file': 
	rm .git/index &&
	git add a b &&
	git reset a &&

	echo b >expect &&
	git ls-files >actual &&
	test_cmp expect actual

ok 4 - reset $file

expecting success of 7106.5 'reset -p': 
	rm .git/index &&
	git add a &&
	echo y >yes &&
	git reset -p <yes >output &&

	git ls-files >actual &&
	test_must_be_empty actual &&
	test_i18ngrep "Unstage" output

(1/1) Unstage addition [y,n,q,a,d,e,?]? 
ok 5 - reset -p

expecting success of 7106.6 'reset --soft is a no-op': 
	rm .git/index &&
	git add a &&
	git reset --soft &&

	echo a >expect &&
	git ls-files >actual &&
	test_cmp expect actual

ok 6 - reset --soft is a no-op

expecting success of 7106.7 'reset --hard': 
	rm .git/index &&
	git add a &&
	test_when_finished "echo a >a" &&
	git reset --hard &&

	git ls-files >actual &&
	test_must_be_empty actual &&
	test_path_is_missing a

ok 7 - reset --hard

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7107-reset-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7107-reset-pathspec-file/.git/
expecting success of 7107.1 'setup': 
	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&
	git add . &&
	git commit --include . -m "Commit" &&
	git tag checkpoint

[master (root-commit) 4b301d4] Commit
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
 create mode 100644 fileC.t
 create mode 100644 fileD.t
ok 1 - setup

expecting success of 7107.2 '--pathspec-from-file from stdin': 
	restore_checkpoint &&

	git rm fileA.t &&
	echo fileA.t | git reset --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	 D fileA.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
Unstaged changes after reset:
D	fileA.t
ok 2 - --pathspec-from-file from stdin

expecting success of 7107.3 '--pathspec-from-file from file': 
	restore_checkpoint &&

	git rm fileA.t &&
	echo fileA.t >list &&
	git reset --pathspec-from-file=list &&

	cat >expect <<-\EOF &&
	 D fileA.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
Unstaged changes after reset:
D	fileA.t
ok 3 - --pathspec-from-file from file

expecting success of 7107.4 'NUL delimiters': 
	restore_checkpoint &&

	git rm fileA.t fileB.t &&
	printf "fileA.t\0fileB.t\0" | git reset --pathspec-from-file=- --pathspec-file-nul &&

	cat >expect <<-\EOF &&
	 D fileA.t
	 D fileB.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
rm 'fileB.t'
Unstaged changes after reset:
D	fileA.t
D	fileB.t
ok 4 - NUL delimiters

expecting success of 7107.5 'LF delimiters': 
	restore_checkpoint &&

	git rm fileA.t fileB.t &&
	printf "fileA.t\nfileB.t\n" | git reset --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	 D fileA.t
	 D fileB.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
rm 'fileB.t'
Unstaged changes after reset:
D	fileA.t
D	fileB.t
ok 5 - LF delimiters

expecting success of 7107.6 'no trailing delimiter': 
	restore_checkpoint &&

	git rm fileA.t fileB.t &&
	printf "fileA.t\nfileB.t" | git reset --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	 D fileA.t
	 D fileB.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
rm 'fileB.t'
Unstaged changes after reset:
D	fileA.t
D	fileB.t
ok 6 - no trailing delimiter

expecting success of 7107.7 'CRLF delimiters': 
	restore_checkpoint &&

	git rm fileA.t fileB.t &&
	printf "fileA.t\r\nfileB.t\r\n" | git reset --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	 D fileA.t
	 D fileB.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
rm 'fileB.t'
Unstaged changes after reset:
D	fileA.t
D	fileB.t
ok 7 - CRLF delimiters

expecting success of 7107.8 'quotes': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	git rm fileA.t &&
	git reset --pathspec-from-file=list &&

	cat >expect <<-\EOF &&
	 D fileA.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
Unstaged changes after reset:
D	fileA.t
ok 8 - quotes

expecting success of 7107.9 'quotes not compatible with --pathspec-file-nul': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	# Note: "git reset" has not yet learned to fail on wrong pathspecs
	git reset --pathspec-from-file=list --pathspec-file-nul &&

	cat >expect <<-\EOF &&
	 D fileA.t
	EOF
	verify_expect !

HEAD is now at 4b301d4 Commit
--- expect	2022-12-28 08:01:16.004454387 +0000
+++ actual	2022-12-28 08:01:16.004454387 +0000
@@ -1 +0,0 @@
- D fileA.t
ok 9 - quotes not compatible with --pathspec-file-nul

expecting success of 7107.10 'only touches what was listed': 
	restore_checkpoint &&

	git rm fileA.t fileB.t fileC.t fileD.t &&
	printf "fileB.t\nfileC.t\n" | git reset --pathspec-from-file=- &&

	cat >expect <<-\EOF &&
	D  fileA.t
	 D fileB.t
	 D fileC.t
	D  fileD.t
	EOF
	verify_expect

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
rm 'fileB.t'
rm 'fileC.t'
rm 'fileD.t'
Unstaged changes after reset:
D	fileB.t
D	fileC.t
ok 10 - only touches what was listed

expecting success of 7107.11 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&
	git rm fileA.t &&

	test_must_fail git reset --pathspec-from-file=list --patch 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--patch. cannot be used together" err &&

	test_must_fail git reset --pathspec-from-file=list -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git reset --pathspec-file-nul 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err &&

	test_must_fail git reset --soft --pathspec-from-file=list 2>err &&
	test_i18ngrep -e "fatal: Cannot do soft reset with paths" err &&

	test_must_fail git reset --hard --pathspec-from-file=list 2>err &&
	test_i18ngrep -e "fatal: Cannot do hard reset with paths" err

HEAD is now at 4b301d4 Commit
rm 'fileA.t'
fatal: options '--pathspec-from-file' and '--patch' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
fatal: Cannot do soft reset with paths.
fatal: Cannot do hard reset with paths.
ok 11 - error conditions

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7102-reset.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7102-reset/.git/
expecting success of 7102.1 'creating initial files and commits': 
	test_tick &&
	echo "1st file" >first &&
	git add first &&
	git commit -m "create 1st file" &&

	echo "2nd file" >second &&
	git add second &&
	git commit -m "create 2nd file" &&

	echo "2nd line 1st file" >>first &&
	git commit -a -m "modify 1st file" &&
	head5p2=$(git rev-parse --verify HEAD) &&
	head5p2f=$(git rev-parse --short HEAD:first) &&

	git rm first &&
	git mv second secondfile &&
	git commit -a -m "remove 1st and rename 2nd" &&
	head5p1=$(git rev-parse --verify HEAD) &&
	head5p1s=$(git rev-parse --short HEAD:secondfile) &&

	echo "1st line 2nd file" >secondfile &&
	echo "2nd line 2nd file" >>secondfile &&
	# "git commit -m" would break MinGW, as Windows refuse to pass
	# $test_encoding encoded parameter to git.
	commit_msg $test_encoding | git -c "i18n.commitEncoding=$test_encoding" commit -a -F - &&
	head5=$(git rev-parse --verify HEAD) &&
	head5s=$(git rev-parse --short HEAD:secondfile) &&
	head5sl=$(git rev-parse HEAD:secondfile)

[main (root-commit) 811bbdf] create 1st file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first
[main ba22ccd] create 2nd file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second
[main ddaefe0] modify 1st file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
rm 'first'
[main d1a4bc3] remove 1st and rename 2nd
 Author: A U Thor <author@example.com>
 2 files changed, 2 deletions(-)
 delete mode 100644 first
 rename second => secondfile (100%)
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 1 deletion(-)
ok 1 - creating initial files and commits

expecting success of 7102.2 'reset --hard message': 
	hex=$(git log -1 --format="%h") &&
	git reset --hard >.actual &&
	echo HEAD is now at $hex $(commit_msg) >.expected &&
	test_cmp .expected .actual

ok 2 - reset --hard message

expecting success of 7102.3 'reset --hard message (ISO8859-1 logoutputencoding)': 
	hex=$(git log -1 --format="%h") &&
	git -c "i18n.logOutputEncoding=$test_encoding" reset --hard >.actual &&
	echo HEAD is now at $hex $(commit_msg $test_encoding) >.expected &&
	test_cmp .expected .actual

ok 3 - reset --hard message (ISO8859-1 logoutputencoding)

expecting success of 7102.4 'giving a non existing revision should fail': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF

	test_must_fail git reset aaaaaa &&
	test_must_fail git reset --mixed aaaaaa &&
	test_must_fail git reset --soft aaaaaa &&
	test_must_fail git reset --hard aaaaaa &&
	check_changes $head5

fatal: ambiguous argument 'aaaaaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument 'aaaaaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument 'aaaaaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: ambiguous argument 'aaaaaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 4 - giving a non existing revision should fail

expecting success of 7102.5 'reset --soft with unmerged index should fail': 
	touch .git/MERGE_HEAD &&
	echo "100644 $head5sl 1	un" |
		git update-index --index-info &&
	test_must_fail git reset --soft HEAD &&
	rm .git/MERGE_HEAD &&
	git rm --cached -- un

fatal: Cannot do a soft reset in the middle of a merge.
rm 'un'
ok 5 - reset --soft with unmerged index should fail

expecting success of 7102.6 'giving paths with options different than --mixed should fail': 
	test_must_fail git reset --soft -- first &&
	test_must_fail git reset --hard -- first &&
	test_must_fail git reset --soft HEAD^ -- first &&
	test_must_fail git reset --hard HEAD^ -- first &&
	check_changes $head5

fatal: Cannot do soft reset with paths.
fatal: Cannot do hard reset with paths.
fatal: Cannot do soft reset with paths.
fatal: Cannot do hard reset with paths.
ok 6 - giving paths with options different than --mixed should fail

expecting success of 7102.7 'giving unrecognized options should fail': 
	test_must_fail git reset --other &&
	test_must_fail git reset -o &&
	test_must_fail git reset --mixed --other &&
	test_must_fail git reset --mixed -o &&
	test_must_fail git reset --soft --other &&
	test_must_fail git reset --soft -o &&
	test_must_fail git reset --hard --other &&
	test_must_fail git reset --hard -o &&
	check_changes $head5

error: unknown option `other'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown switch `o'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown option `other'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown switch `o'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown option `other'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown switch `o'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown option `other'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

error: unknown switch `o'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] [<tree-ish>] [--] <pathspec>...
   or: git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]
   or: git reset --patch [<tree-ish>] [--] [<pathspec>...]

    -q, --quiet           be quiet, only report errors
    --no-refresh          skip refreshing the index after reset
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

ok 7 - giving unrecognized options should fail

expecting success of 7102.8 'trying to do reset --soft with pending merge should fail': 
	git branch branch1 &&
	git branch branch2 &&

	git checkout branch1 &&
	echo "3rd line in branch1" >>secondfile &&
	git commit -a -m "change in branch1" &&

	git checkout branch2 &&
	echo "3rd line in branch2" >>secondfile &&
	git commit -a -m "change in branch2" &&

	test_must_fail git merge branch1 &&
	test_must_fail git reset --soft &&

	printf "1st line 2nd file\n2nd line 2nd file\n3rd line" >secondfile &&
	git commit -a -m "the change in branch2" &&

	git checkout main &&
	git branch -D branch1 branch2 &&
	check_changes $head5

Switched to branch 'branch1'
[branch1 6b78ea5] change in branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'branch2'
[branch2 f8a209f] change in branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging secondfile
CONFLICT (content): Merge conflict in secondfile
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a soft reset in the middle of a merge.
[branch2 8e8e261] the change in branch2
 Author: A U Thor <author@example.com>
Switched to branch 'main'
Deleted branch branch1 (was 6b78ea5).
Deleted branch branch2 (was 8e8e261).
ok 8 - trying to do reset --soft with pending merge should fail

expecting success of 7102.9 'trying to do reset --soft with pending checkout merge should fail': 
	git branch branch3 &&
	git branch branch4 &&

	git checkout branch3 &&
	echo "3rd line in branch3" >>secondfile &&
	git commit -a -m "line in branch3" &&

	git checkout branch4 &&
	echo "3rd line in branch4" >>secondfile &&

	git checkout -m branch3 &&
	test_must_fail git reset --soft &&

	printf "1st line 2nd file\n2nd line 2nd file\n3rd line" >secondfile &&
	git commit -a -m "the line in branch3" &&

	git checkout main &&
	git branch -D branch3 branch4 &&
	check_changes $head5

Switched to branch 'branch3'
[branch3 0b5021a] line in branch3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'branch4'
Switched to branch 'branch3'
M	secondfile
fatal: Cannot do a soft reset in the middle of a merge.
[branch3 dbe96ed] the line in branch3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
Deleted branch branch3 (was dbe96ed).
Deleted branch branch4 (was eed6733).
ok 9 - trying to do reset --soft with pending checkout merge should fail

expecting success of 7102.10 'resetting to HEAD with no changes should succeed and do nothing': 
	git reset --hard &&
		check_changes $head5 &&
	git reset --hard HEAD &&
		check_changes $head5 &&
	git reset --soft &&
		check_changes $head5 &&
	git reset --soft HEAD &&
		check_changes $head5 &&
	git reset --mixed &&
		check_changes $head5 &&
	git reset --mixed HEAD &&
		check_changes $head5 &&
	git reset &&
		check_changes $head5 &&
	git reset HEAD &&
		check_changes $head5

HEAD is now at eed6733 modify 2nd file (geändert)
HEAD is now at eed6733 modify 2nd file (geändert)
ok 10 - resetting to HEAD with no changes should succeed and do nothing

expecting success of 7102.11 '--soft reset only should show changes in diff --cached': 
	>.diff_expect &&
	cat >.cached_expect <<-EOF &&
	diff --git a/secondfile b/secondfile
	index $head5p1s..$head5s 100644
	--- a/secondfile
	+++ b/secondfile
	@@ -1 +1,2 @@
	-2nd file
	+1st line 2nd file
	+2nd line 2nd file
	EOF
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF
	git reset --soft HEAD^ &&
	check_changes $head5p1 &&
	test "$(git rev-parse ORIG_HEAD)" = \
			$head5

ok 11 - --soft reset only should show changes in diff --cached

expecting success of 7102.12 'changing files and redo the last commit should succeed': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	3rd line 2nd file
	EOF
	echo "3rd line 2nd file" >>secondfile &&
	git commit -a -C ORIG_HEAD &&
	head4=$(git rev-parse --verify HEAD) &&
	check_changes $head4 &&
	test "$(git rev-parse ORIG_HEAD)" = \
			$head5

[main b052eb8] modify 2nd file (geändert)
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 3 insertions(+), 1 deletion(-)
ok 12 - changing files and redo the last commit should succeed

expecting success of 7102.13 '--hard reset should change the files and undo commits permanently': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	first:
	1st file
	2nd line 1st file
	second:
	2nd file
	EOF
	git reset --hard HEAD~2 &&
	check_changes $head5p2 &&
	test "$(git rev-parse ORIG_HEAD)" = \
			$head4

HEAD is now at ddaefe0 modify 1st file
ok 13 - --hard reset should change the files and undo commits permanently

expecting success of 7102.14 'redoing changes adding them without commit them should succeed': 
	>.diff_expect &&
	cat >.cached_expect <<-EOF &&
	diff --git a/first b/first
	deleted file mode 100644
	index $head5p2f..0000000
	--- a/first
	+++ /dev/null
	@@ -1,2 +0,0 @@
	-1st file
	-2nd line 1st file
	diff --git a/second b/second
	deleted file mode 100644
	index $head5p1s..0000000
	--- a/second
	+++ /dev/null
	@@ -1 +0,0 @@
	-2nd file
	diff --git a/secondfile b/secondfile
	new file mode 100644
	index 0000000..$head5s
	--- /dev/null
	+++ b/secondfile
	@@ -0,0 +1,2 @@
	+1st line 2nd file
	+2nd line 2nd file
	EOF
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF
	git rm first &&
	git mv second secondfile &&

	echo "1st line 2nd file" >secondfile &&
	echo "2nd line 2nd file" >>secondfile &&
	git add secondfile &&
	check_changes $head5p2

rm 'first'
ok 14 - redoing changes adding them without commit them should succeed

expecting success of 7102.15 '--mixed reset to HEAD should unadd the files': 
	cat >.diff_expect <<-EOF &&
	diff --git a/first b/first
	deleted file mode 100644
	index $head5p2f..0000000
	--- a/first
	+++ /dev/null
	@@ -1,2 +0,0 @@
	-1st file
	-2nd line 1st file
	diff --git a/second b/second
	deleted file mode 100644
	index $head5p1s..0000000
	--- a/second
	+++ /dev/null
	@@ -1 +0,0 @@
	-2nd file
	EOF
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF
	git reset &&
	check_changes $head5p2 &&
	test "$(git rev-parse ORIG_HEAD)" = $head5p2

Unstaged changes after reset:
D	first
D	second
ok 15 - --mixed reset to HEAD should unadd the files

expecting success of 7102.16 'redoing the last two commits should succeed': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF
	git add secondfile &&
	git reset --hard $head5p2 &&
	git rm first &&
	git mv second secondfile &&
	git commit -a -m "remove 1st and rename 2nd" &&

	echo "1st line 2nd file" >secondfile &&
	echo "2nd line 2nd file" >>secondfile &&
	# "git commit -m" would break MinGW, as Windows refuse to pass
	# $test_encoding encoded parameter to git.
	commit_msg $test_encoding | git -c "i18n.commitEncoding=$test_encoding" commit -a -F - &&
	check_changes $head5

HEAD is now at ddaefe0 modify 1st file
rm 'first'
[main d1a4bc3] remove 1st and rename 2nd
 Author: A U Thor <author@example.com>
 2 files changed, 2 deletions(-)
 delete mode 100644 first
 rename second => secondfile (100%)
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 1 deletion(-)
ok 16 - redoing the last two commits should succeed

expecting success of 7102.17 '--hard reset to HEAD should clear a failed merge': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	3rd line in branch2
	EOF
	git branch branch1 &&
	git branch branch2 &&

	git checkout branch1 &&
	echo "3rd line in branch1" >>secondfile &&
	git commit -a -m "change in branch1" &&

	git checkout branch2 &&
	echo "3rd line in branch2" >>secondfile &&
	git commit -a -m "change in branch2" &&
	head3=$(git rev-parse --verify HEAD) &&

	test_must_fail git pull . branch1 &&
	git reset --hard &&
	check_changes $head3

Switched to branch 'branch1'
[branch1 6b78ea5] change in branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'branch2'
[branch2 f8a209f] change in branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From .
 * branch            branch1    -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
HEAD is now at f8a209f change in branch2
ok 17 - --hard reset to HEAD should clear a failed merge

expecting success of 7102.18 '--hard reset to ORIG_HEAD should clear a fast-forward merge': 
	>.diff_expect &&
	>.cached_expect &&
	cat >.cat_expect <<-\EOF &&
	secondfile:
	1st line 2nd file
	2nd line 2nd file
	EOF
	git reset --hard HEAD^ &&
	check_changes $head5 &&

	git pull . branch1 &&
	git reset --hard ORIG_HEAD &&
	check_changes $head5 &&

	git checkout main &&
	git branch -D branch1 branch2 &&
	check_changes $head5

HEAD is now at eed6733 modify 2nd file (geändert)
From .
 * branch            branch1    -> FETCH_HEAD
Updating eed6733..6b78ea5
Fast-forward
 secondfile | 1 +
 1 file changed, 1 insertion(+)
HEAD is now at eed6733 modify 2nd file (geändert)
Switched to branch 'main'
Deleted branch branch1 (was 6b78ea5).
Deleted branch branch2 (was eed6733).
ok 18 - --hard reset to ORIG_HEAD should clear a fast-forward merge

expecting success of 7102.19 'test --mixed <paths>': 
	echo 1 >file1 &&
	echo 2 >file2 &&
	git add file1 file2 &&
	test_tick &&
	git commit -m files &&
	before1=$(git rev-parse --short HEAD:file1) &&
	before2=$(git rev-parse --short HEAD:file2) &&
	git rm file2 &&
	echo 3 >file3 &&
	echo 4 >file4 &&
	echo 5 >file1 &&
	after1=$(git rev-parse --short $(git hash-object file1)) &&
	after4=$(git rev-parse --short $(git hash-object file4)) &&
	git add file1 file3 file4 &&
	git reset HEAD -- file1 file2 file3 &&
	test_must_fail git diff --quiet &&
	git diff >output &&

	cat >expect <<-EOF &&
	diff --git a/file1 b/file1
	index $before1..$after1 100644
	--- a/file1
	+++ b/file1
	@@ -1 +1 @@
	-1
	+5
	diff --git a/file2 b/file2
	deleted file mode 100644
	index $before2..0000000
	--- a/file2
	+++ /dev/null
	@@ -1 +0,0 @@
	-2
	EOF

	test_cmp expect output &&
	git diff --cached >output &&

	cat >cached_expect <<-EOF &&
	diff --git a/file4 b/file4
	new file mode 100644
	index 0000000..$after4
	--- /dev/null
	+++ b/file4
	@@ -0,0 +1 @@
	+4
	EOF

	test_cmp cached_expect output

[main 14b96fb] files
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
rm 'file2'
Unstaged changes after reset:
M	file1
D	file2
ok 19 - test --mixed <paths>

expecting success of 7102.20 'test resetting the index at give paths': 
	mkdir sub &&
	>sub/file1 &&
	>sub/file2 &&
	git update-index --add sub/file1 sub/file2 &&
	T=$(git write-tree) &&
	git reset HEAD sub/file2 &&
	test_must_fail git diff --quiet &&
	U=$(git write-tree) &&
	echo "$T" &&
	echo "$U" &&
	test_must_fail git diff-index --cached --exit-code "$T" &&
	test "$T" != "$U"

Unstaged changes after reset:
M	file1
D	file2
9571d9b5fb34d9c1274612948c5356f0615744bc
88880074c0c9957f91fd21817fee120b773fc32c
:100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D	sub/file2
ok 20 - test resetting the index at give paths

expecting success of 7102.21 'resetting an unmodified path is a no-op': 
	git reset --hard &&
	git reset -- file1 &&
	git diff-files --exit-code &&
	git diff-index --cached --exit-code HEAD

HEAD is now at 14b96fb files
ok 21 - resetting an unmodified path is a no-op

expecting success of 7102.22 '--mixed refreshes the index': 
	# Verify default behavior (without --[no-]refresh or reset.refresh)
	test_reset_refreshes_index &&

	# With --quiet
	test_reset_refreshes_index "" --quiet

HEAD is now at 14b96fb files
rm 'file2'
HEAD is now at 14b96fb files
rm 'file2'
ok 22 - --mixed refreshes the index

expecting success of 7102.23 '--mixed --[no-]refresh sets refresh behavior': 
	# Verify that --[no-]refresh controls index refresh
	test_reset_refreshes_index "" --refresh &&
	! test_reset_refreshes_index "" --no-refresh

HEAD is now at 14b96fb files
rm 'file2'
HEAD is now at 14b96fb files
rm 'file2'
'output.log' is not empty, it contains:
:100644 100644 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f 0000000000000000000000000000000000000000 M	file2
ok 23 - --mixed --[no-]refresh sets refresh behavior

expecting success of 7102.24 '--mixed preserves skip-worktree': 
	echo 123 >>file2 &&
	git add file2 &&
	git update-index --skip-worktree file2 &&
	git reset --mixed HEAD >output &&
	test_must_be_empty output &&

	cat >expect <<-\EOF &&
	Unstaged changes after reset:
	M	file2
	EOF
	git update-index --no-skip-worktree file2 &&
	git add file2 &&
	git reset --mixed HEAD >output &&
	test_cmp expect output

ok 24 - --mixed preserves skip-worktree

expecting success of 7102.25 'resetting specific path that is unmerged': 
	git rm --cached file2 &&
	F1=$(git rev-parse HEAD:file1) &&
	F2=$(git rev-parse HEAD:file2) &&
	F3=$(git rev-parse HEAD:secondfile) &&
	{
		echo "100644 $F1 1	file2" &&
		echo "100644 $F2 2	file2" &&
		echo "100644 $F3 3	file2"
	} | git update-index --index-info &&
	git ls-files -u &&
	git reset HEAD file2 &&
	test_must_fail git diff --quiet &&
	git diff-index --exit-code --cached HEAD

rm 'file2'
100644 d00491fd7e5bb6fa28c517a0bb32b8b506539d4d 1	file2
100644 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f 2	file2
100644 44c5b5884550c17758737edcced463447b91d42b 3	file2
Unstaged changes after reset:
M	file2
ok 25 - resetting specific path that is unmerged

expecting success of 7102.26 'disambiguation (1)': 
	git reset --hard &&
	>secondfile &&
	git add secondfile &&
	git reset secondfile &&
	test_must_fail git diff --quiet -- secondfile &&
	test -z "$(git diff --cached --name-only)" &&
	test -f secondfile &&
	test_must_be_empty secondfile

HEAD is now at 14b96fb files
Unstaged changes after reset:
M	secondfile
ok 26 - disambiguation (1)

expecting success of 7102.27 'disambiguation (2)': 
	git reset --hard &&
	>secondfile &&
	git add secondfile &&
	rm -f secondfile &&
	test_must_fail git reset secondfile &&
	test -n "$(git diff --cached --name-only -- secondfile)" &&
	test ! -f secondfile

HEAD is now at 14b96fb files
fatal: ambiguous argument 'secondfile': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 27 - disambiguation (2)

expecting success of 7102.28 'disambiguation (3)': 
	git reset --hard &&
	>secondfile &&
	git add secondfile &&
	rm -f secondfile &&
	git reset HEAD secondfile &&
	test_must_fail git diff --quiet &&
	test -z "$(git diff --cached --name-only)" &&
	test ! -f secondfile

HEAD is now at 14b96fb files
Unstaged changes after reset:
D	secondfile
ok 28 - disambiguation (3)

expecting success of 7102.29 'disambiguation (4)': 
	git reset --hard &&
	>secondfile &&
	git add secondfile &&
	rm -f secondfile &&
	git reset -- secondfile &&
	test_must_fail git diff --quiet &&
	test -z "$(git diff --cached --name-only)" &&
	test ! -f secondfile

HEAD is now at 14b96fb files
Unstaged changes after reset:
D	secondfile
ok 29 - disambiguation (4)

expecting success of 7102.30 'reset with paths accepts tree': 
	# for simpler tests, drop last commit containing added files
	git reset --hard HEAD^ &&
	git reset HEAD^^{tree} -- . &&
	git diff --cached HEAD^ --exit-code &&
	git diff HEAD --exit-code

HEAD is now at eed6733 modify 2nd file (geändert)
Unstaged changes after reset:
M	secondfile
ok 30 - reset with paths accepts tree

expecting success of 7102.31 'reset -N keeps removed files as intent-to-add': 
	echo new-file >new-file &&
	git add new-file &&
	git reset -N HEAD &&

	tree=$(git write-tree) &&
	git ls-tree $tree new-file >actual &&
	test_must_be_empty actual &&

	git diff --name-only >actual &&
	echo new-file >expect &&
	test_cmp expect actual

Unstaged changes after reset:
A	new-file
ok 31 - reset -N keeps removed files as intent-to-add

expecting success of 7102.32 'reset --mixed sets up work tree': 
	git init mixed_worktree &&
	(
		cd mixed_worktree &&
		test_commit dummy
	) &&
	git --git-dir=mixed_worktree/.git --work-tree=mixed_worktree reset >actual &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7102-reset/mixed_worktree/.git/
[main (root-commit) b737dfa] dummy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 dummy.t
ok 32 - reset --mixed sets up work tree

# passed all 32 test(s)
1..32
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7063-status-untracked-cache.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache/.git/
checking prerequisite: UNTRACKED_CACHE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNTRACKED_CACHE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNTRACKED_CACHE" &&
	{ git update-index --test-untracked-cache; ret=$?; } &&
	test $ret -ne 1

)
Testing mtime in '/<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache' ...... OK
prerequisite UNTRACKED_CACHE ok
expecting success of 7063.1 'core.untrackedCache is unset': 
	test_must_fail git config --get core.untrackedCache

ok 1 - core.untrackedCache is unset

expecting success of 7063.2 'setup': 
	git init --template= worktree &&
	cd worktree &&
	mkdir done dtwo dthree &&
	touch one two three done/one dtwo/two dthree/three &&
	test-tool chmtime =-300 one two three done/one dtwo/two dthree/three &&
	test-tool chmtime =-300 done dtwo dthree &&
	test-tool chmtime =-300 . &&
	git add one two done/one &&
	mkdir .git/info &&
	: >.git/info/exclude &&
	git update-index --untracked-cache &&
	test_oid_cache <<-EOF
	root sha1:e6fcc8f2ee31bae321d66afd183fcb7237afae6e
	root sha256:b90c672088c015b9c83876e919da311bad4cd39639fb139f988af6a11493b974

	exclude sha1:13263c0978fb9fad16b2d580fb800b6d811c3ff0
	exclude sha256:fe4aaa1bbbbce4cb8f73426748a14c5ad6026b26f90505a0bf2494b165a5b76c

	done sha1:1946f0437f90c5005533cbe1736a6451ca301714
	done sha256:7f079501d79f665b3acc50f5e0e9e94509084d5032ac20113a37dd5029b757cc
	EOF

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache/worktree/.git/
ok 2 - setup

expecting success of 7063.3 'untracked cache is empty': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect-empty <<EOF &&
info/exclude $ZERO_OID
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
EOF
	test_cmp ../expect-empty ../actual

ok 3 - untracked cache is empty

expecting success of 7063.4 'status first time (empty cache)': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:3
 ....gitignore-invalidation:1
 ....directory-invalidation:0
 ....opendir:4
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 4 - status first time (empty cache)

expecting success of 7063.5 'untracked cache after first status': 
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../dump.expect ../actual

ok 5 - untracked cache after first status

expecting success of 7063.6 'status second time (fully populated cache)': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:0
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 6 - status second time (fully populated cache)

expecting success of 7063.7 'untracked cache after second status': 
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../dump.expect ../actual

ok 7 - untracked cache after second status

expecting success of 7063.8 'untracked cache is bypassed with -uall': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status -uall --porcelain >../actual &&
	iuc status -uall --porcelain >../status.iuc &&
	test_cmp ../status_uall.expect ../status.iuc &&
	test_cmp ../status_uall.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 8 - untracked cache is bypassed with -uall

expecting success of 7063.9 'untracked cache remains after bypass': 
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../dump.expect ../actual

ok 9 - untracked cache remains after bypass

expecting success of 7063.10 'if -uall is configured, untracked cache gets populated by default': 
	test_config status.showuntrackedfiles all &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	test_cmp ../status_uall.expect ../status.iuc &&
	test_cmp ../status_uall.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:3
 ....gitignore-invalidation:1
 ....directory-invalidation:0
 ....opendir:4
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 10 - if -uall is configured, untracked cache gets populated by default

expecting success of 7063.11 'if -uall was configured, untracked cache is populated': 
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../dump_uall.expect ../actual

ok 11 - if -uall was configured, untracked cache is populated

expecting success of 7063.12 'if -uall is configured, untracked cache is used by default': 
	test_config status.showuntrackedfiles all &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	test_cmp ../status_uall.expect ../status.iuc &&
	test_cmp ../status_uall.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:0
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 12 - if -uall is configured, untracked cache is used by default

expecting success of 7063.13 'if -uall is configured, untracked cache is bypassed with -unormal': 
	test_config status.showuntrackedfiles all &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status -unormal --porcelain >../actual &&
	iuc status -unormal --porcelain >../status.iuc &&
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 13 - if -uall is configured, untracked cache is bypassed with -unormal

expecting success of 7063.14 'repopulate untracked cache for -unormal': 
	git status --porcelain

A  done/one
A  one
A  two
?? dthree/
?? dtwo/
?? three
ok 14 - repopulate untracked cache for -unormal

expecting success of 7063.15 'modify in root directory, one dir invalidation': 
	: >four &&
	test-tool chmtime =-240 four &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
A  done/one
A  one
A  two
?? dthree/
?? dtwo/
?? four
?? three
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:1
 ....opendir:1
EOF
	test_cmp ../trace.expect ../trace.relevant


ok 15 - modify in root directory, one dir invalidation

expecting success of 7063.16 'verify untracked cache dump': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $EMPTY_BLOB
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $ZERO_OID recurse valid
dthree/
dtwo/
four
three
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
three
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 16 - verify untracked cache dump

expecting success of 7063.17 'new .gitignore invalidates recursively': 
	echo four >.gitignore &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
A  done/one
A  one
A  two
?? .gitignore
?? dthree/
?? dtwo/
?? three
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:1
 ....directory-invalidation:1
 ....opendir:4
EOF
	test_cmp ../trace.expect ../trace.relevant


ok 17 - new .gitignore invalidates recursively

expecting success of 7063.18 'verify untracked cache dump': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $EMPTY_BLOB
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dthree/
dtwo/
three
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
three
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 18 - verify untracked cache dump

expecting success of 7063.19 'new info/exclude invalidates everything': 
	echo three >>.git/info/exclude &&
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
A  done/one
A  one
A  two
?? .gitignore
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:1
 ....directory-invalidation:0
 ....opendir:4
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 19 - new info/exclude invalidates everything

expecting success of 7063.20 'verify untracked cache dump': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 20 - verify untracked cache dump

expecting success of 7063.21 'move two from tracked to untracked': 
	git rm --cached two &&
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

rm 'two'
ok 21 - move two from tracked to untracked

expecting success of 7063.22 'status after the move': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
A  done/one
A  one
?? .gitignore
?? dtwo/
?? two
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:1
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 22 - status after the move

expecting success of 7063.23 'verify untracked cache dump': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
two
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 23 - verify untracked cache dump

expecting success of 7063.24 'move two from untracked to tracked': 
	git add two &&
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 24 - move two from untracked to tracked

expecting success of 7063.25 'status after the move': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
A  done/one
A  one
A  two
?? .gitignore
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:1
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 25 - status after the move

expecting success of 7063.26 'verify untracked cache dump': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 26 - verify untracked cache dump

expecting success of 7063.27 'set up for sparse checkout testing': 
	echo two >done/.gitignore &&
	echo three >>done/.gitignore &&
	echo two >done/two &&
	git add -f done/two done/.gitignore &&
	git commit -m "first commit"

[main (root-commit) 2d55d32] first commit
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+)
 create mode 100644 done/.gitignore
 create mode 100644 done/one
 create mode 100644 done/two
 create mode 100644 one
 create mode 100644 two
ok 27 - set up for sparse checkout testing

expecting success of 7063.28 'status after commit': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
?? .gitignore
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:2
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 28 - status after commit

expecting success of 7063.29 'untracked cache correct after commit': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
/done/ $ZERO_OID recurse valid
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 29 - untracked cache correct after commit

expecting success of 7063.30 'set up sparse checkout': 
	echo "done/[a-z]*" >.git/info/sparse-checkout &&
	test_config core.sparsecheckout true &&
	git checkout main &&
	git update-index --force-untracked-cache &&
	git status --porcelain >/dev/null && # prime the cache
	test_path_is_missing done/.gitignore &&
	test_path_is_file done/one

Already on 'main'
ok 30 - set up sparse checkout

expecting success of 7063.31 'create/modify files, some of which are gitignored': 
	echo two bis >done/two &&
	echo three >done/three && # three is gitignored
	echo four >done/four && # four is gitignored at a higher level
	echo five >done/five && # five is not gitignored
	test-tool chmtime =-180 done/two done/three done/four done/five done &&
	# we need to ensure that the root dir is touched (in the past);
	test-tool chmtime =-180 . &&
	sync_mtime

ok 31 - create/modify files, some of which are gitignored

expecting success of 7063.32 'test sparse status with untracked cache': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
 M done/two
?? .gitignore
?? done/five
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:1
 ....directory-invalidation:2
 ....opendir:2
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 32 - test sparse status with untracked cache

expecting success of 7063.33 'untracked cache correct after status': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
/done/ $(test_oid done) recurse valid
five
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect ../actual

ok 33 - untracked cache correct after status

expecting success of 7063.34 'test sparse status again with untracked cache': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
 M done/two
?? .gitignore
?? done/five
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:0
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 34 - test sparse status again with untracked cache

expecting success of 7063.35 'set up for test of subdir and sparse checkouts': 
	mkdir done/sub &&
	mkdir done/sub/sub &&
	echo "sub" > done/sub/sub/file &&
	test-tool chmtime =-120 done/sub/sub/file done/sub/sub done/sub done

ok 35 - set up for test of subdir and sparse checkouts

expecting success of 7063.36 'test sparse status with untracked cache and subdir': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
 M done/two
?? .gitignore
?? done/five
?? done/sub/
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:2
 ....gitignore-invalidation:0
 ....directory-invalidation:1
 ....opendir:3
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 36 - test sparse status with untracked cache and subdir

expecting success of 7063.37 'verify untracked cache dump (sparse/subdirs)': 
	test-tool dump-untracked-cache >../actual &&
	cat >../expect-from-test-dump <<EOF &&
info/exclude $(test_oid exclude)
core.excludesfile $ZERO_OID
exclude_per_dir .gitignore
flags 00000006
/ $(test_oid root) recurse valid
.gitignore
dtwo/
/done/ $(test_oid done) recurse valid
five
sub/
/done/sub/ $ZERO_OID recurse check_only valid
sub/
/done/sub/sub/ $ZERO_OID recurse check_only valid
file
/dthree/ $ZERO_OID recurse check_only valid
/dtwo/ $ZERO_OID recurse check_only valid
two
EOF
	test_cmp ../expect-from-test-dump ../actual

ok 37 - verify untracked cache dump (sparse/subdirs)

expecting success of 7063.38 'test sparse status again with untracked cache and subdir': 
	: >../trace.output &&
	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual &&
	get_relevant_traces ../trace.output ../trace.relevant &&
	cat >../trace.expect <<EOF &&
 ....path:
 ....node-creation:0
 ....gitignore-invalidation:0
 ....directory-invalidation:0
 ....opendir:0
EOF
	test_cmp ../trace.expect ../trace.relevant

ok 38 - test sparse status again with untracked cache and subdir

expecting success of 7063.39 'move entry in subdir from untracked to cached': 
	git add dtwo/two &&
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
 M done/two
A  dtwo/two
?? .gitignore
?? done/five
?? done/sub/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual

ok 39 - move entry in subdir from untracked to cached

expecting success of 7063.40 'move entry in subdir from cached to untracked': 
	git rm --cached dtwo/two &&
	git status --porcelain >../status.actual &&
	iuc status --porcelain >../status.iuc &&
	cat >../status.expect <<EOF &&
 M done/two
?? .gitignore
?? done/five
?? done/sub/
?? dtwo/
EOF
	test_cmp ../status.expect ../status.iuc &&
	test_cmp ../status.expect ../status.actual

rm 'dtwo/two'
ok 40 - move entry in subdir from cached to untracked

expecting success of 7063.41 '--no-untracked-cache removes the cache': 
	git update-index --no-untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	echo "no untracked cache" >../expect-no-uc &&
	test_cmp ../expect-no-uc ../actual

ok 41 - --no-untracked-cache removes the cache

expecting success of 7063.42 'git status does not change anything': 
	git status &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-no-uc ../actual

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	done/five
	done/sub/
	dtwo/

no changes added to commit (use "git add" and/or "git commit -a")
ok 42 - git status does not change anything

expecting success of 7063.43 'setting core.untrackedCache to true and using git status creates the cache': 
	git config core.untrackedCache true &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-no-uc ../actual &&
	git status &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-from-test-dump ../actual

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	done/five
	done/sub/
	dtwo/

no changes added to commit (use "git add" and/or "git commit -a")
ok 43 - setting core.untrackedCache to true and using git status creates the cache

expecting success of 7063.44 'using --no-untracked-cache does not fail when core.untrackedCache is true': 
	git update-index --no-untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-no-uc ../actual &&
	git update-index --untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-empty ../actual

warning: core.untrackedCache is set to true; remove or change it, if you really want to disable the untracked cache
ok 44 - using --no-untracked-cache does not fail when core.untrackedCache is true

expecting success of 7063.45 'setting core.untrackedCache to false and using git status removes the cache': 
	git config core.untrackedCache false &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-empty ../actual &&
	git status &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-no-uc ../actual

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	done/five
	done/sub/
	dtwo/

no changes added to commit (use "git add" and/or "git commit -a")
ok 45 - setting core.untrackedCache to false and using git status removes the cache

expecting success of 7063.46 'using --untracked-cache does not fail when core.untrackedCache is false': 
	git update-index --untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-empty ../actual

warning: core.untrackedCache is set to false; remove or change it, if you really want to enable the untracked cache
ok 46 - using --untracked-cache does not fail when core.untrackedCache is false

expecting success of 7063.47 'setting core.untrackedCache to keep': 
	git config core.untrackedCache keep &&
	git update-index --untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-empty ../actual &&
	git status &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-from-test-dump ../actual &&
	git update-index --no-untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-no-uc ../actual &&
	git update-index --force-untracked-cache &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-empty ../actual &&
	git status &&
	test-tool dump-untracked-cache >../actual &&
	test_cmp ../expect-from-test-dump ../actual

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	done/five
	done/sub/
	dtwo/

no changes added to commit (use "git add" and/or "git commit -a")
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	done/five
	done/sub/
	dtwo/

no changes added to commit (use "git add" and/or "git commit -a")
ok 47 - setting core.untrackedCache to keep

expecting success of 7063.48 'test ident field is working': 
	mkdir ../other_worktree &&
	cp -R done dthree dtwo four three ../other_worktree &&
	GIT_WORK_TREE=../other_worktree git status 2>../err &&
	echo "warning: untracked cache is disabled on this system or location" >../expect &&
	test_cmp ../expect ../err

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   done/two

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	done/five
	done/four
	done/sub/
	dtwo/
	four

no changes added to commit (use "git add" and/or "git commit -a")
ok 48 - test ident field is working

expecting success of 7063.49 'untracked cache survives a checkout': 
	git commit --allow-empty -m empty &&
	test-tool dump-untracked-cache >../before &&
	test_when_finished  "git checkout main" &&
	git checkout -b other_branch &&
	test-tool dump-untracked-cache >../after &&
	test_cmp ../before ../after &&
	test_commit test &&
	test-tool dump-untracked-cache >../before &&
	git checkout main &&
	test-tool dump-untracked-cache >../after &&
	test_cmp ../before ../after

[main 9462075] empty
 Author: A U Thor <author@example.com>
Switched to a new branch 'other_branch'
[other_branch b773b8a] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.t
Switched to branch 'main'
M	done/two
Already on 'main'
M	done/two
ok 49 - untracked cache survives a checkout

expecting success of 7063.50 'untracked cache survives a commit': 
	test-tool dump-untracked-cache >../before &&
	git add done/two &&
	git commit -m commit &&
	test-tool dump-untracked-cache >../after &&
	test_cmp ../before ../after

[main 527fa0b] commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 50 - untracked cache survives a commit

expecting success of 7063.51 'teardown worktree': 
	cd ..

ok 51 - teardown worktree

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7063.52 'setup worktree for symlink test': 
	git init worktree-symlink &&
	cd worktree-symlink &&
	git config core.untrackedCache true &&
	mkdir one two &&
	touch one/file two/file &&
	git add one/file two/file &&
	git commit -m"first commit" &&
	git rm -rf one &&
	ln -s two one &&
	git add one &&
	git commit -m"second commit"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache/worktree-symlink/.git/
[main (root-commit) 294fddc] first commit
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 one/file
 create mode 100644 two/file
rm 'one/file'
[main b7cd1f6] second commit
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 one
 delete mode 100644 one/file
ok 52 - setup worktree for symlink test

expecting success of 7063.53 '"status" after symlink replacement should be clean with UC=true': 
	git checkout HEAD~ &&
	status_is_clean &&
	status_is_clean &&
	git checkout main &&
	avoid_racy &&
	status_is_clean &&
	status_is_clean

Note: switching to 'HEAD~'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 294fddc first commit
Previous HEAD position was 294fddc first commit
Switched to branch 'main'
ok 53 - "status" after symlink replacement should be clean with UC=true

expecting success of 7063.54 '"status" after symlink replacement should be clean with UC=false': 
	git config core.untrackedCache false &&
	git checkout HEAD~ &&
	status_is_clean &&
	status_is_clean &&
	git checkout main &&
	avoid_racy &&
	status_is_clean &&
	status_is_clean

Note: switching to 'HEAD~'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 294fddc first commit
Previous HEAD position was 294fddc first commit
Switched to branch 'main'
ok 54 - "status" after symlink replacement should be clean with UC=false

expecting success of 7063.55 'setup worktree for non-symlink test': 
	git init worktree-non-symlink &&
	cd worktree-non-symlink &&
	git config core.untrackedCache true &&
	mkdir one two &&
	touch one/file two/file &&
	git add one/file two/file &&
	git commit -m"first commit" &&
	git rm -rf one &&
	cp two/file one &&
	git add one &&
	git commit -m"second commit"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache/worktree-symlink/worktree-non-symlink/.git/
[main (root-commit) 294fddc] first commit
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 one/file
 create mode 100644 two/file
rm 'one/file'
[main 0558445] second commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename one/file => one (100%)
ok 55 - setup worktree for non-symlink test

expecting success of 7063.56 '"status" after file replacement should be clean with UC=true': 
	git checkout HEAD~ &&
	status_is_clean &&
	status_is_clean &&
	git checkout main &&
	avoid_racy &&
	status_is_clean &&
	test-tool dump-untracked-cache >../actual &&
	grep -F "recurse valid" ../actual >../actual.grep &&
	cat >../expect.grep <<EOF &&
/ $ZERO_OID recurse valid
/two/ $ZERO_OID recurse valid
EOF
	status_is_clean &&
	test_cmp ../expect.grep ../actual.grep

Note: switching to 'HEAD~'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 294fddc first commit
Previous HEAD position was 294fddc first commit
Switched to branch 'main'
ok 56 - "status" after file replacement should be clean with UC=true

expecting success of 7063.57 '"status" after file replacement should be clean with UC=false': 
	git config core.untrackedCache false &&
	git checkout HEAD~ &&
	status_is_clean &&
	status_is_clean &&
	git checkout main &&
	avoid_racy &&
	status_is_clean &&
	status_is_clean

Note: switching to 'HEAD~'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 294fddc first commit
Previous HEAD position was 294fddc first commit
Switched to branch 'main'
ok 57 - "status" after file replacement should be clean with UC=false

expecting success of 7063.58 'empty repo (no index) and core.untrackedCache': 
	git init emptyrepo &&
	git -C emptyrepo -c core.untrackedCache=true write-tree

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7063-status-untracked-cache/worktree-symlink/worktree-non-symlink/emptyrepo/.git/
4b825dc642cb6eb9a060e54bf8d69288fbee4904
ok 58 - empty repo (no index) and core.untrackedCache

# passed all 58 test(s)
1..58
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7006-pager.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7006-pager/.git/
expecting success of 7006.1 'determine default pager': 
	test_might_fail git config --unset core.pager &&
	less=$(
		sane_unset PAGER GIT_PAGER &&
		git var GIT_PAGER
	) &&
	test -n "$less"

ok 1 - determine default pager

expecting success of 7006.2 'setup': 
	sane_unset GIT_PAGER GIT_PAGER_IN_USE &&
	test_unconfig core.pager &&

	PAGER="cat >paginated.out" &&
	export PAGER &&

	test_commit initial

[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
ok 2 - setup

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 7006.3 'some commands use a pager': 
	rm -f paginated.out &&
	test_terminal git log &&
	test_path_is_file paginated.out

ok 3 - some commands use a pager

checking known breakage of 7006.4 'pager runs from subdir': 
	echo subdir/paginated.out >expected &&
	mkdir -p subdir &&
	rm -f paginated.out subdir/paginated.out &&
	(
		cd subdir &&
		test_terminal git log
	) &&
	{
		ls paginated.out subdir/paginated.out ||
		:
	} >actual &&
	test_cmp expected actual

ls: cannot access 'subdir/paginated.out': No such file or directory
--- expected	2022-12-28 08:00:02.931804913 +0000
+++ actual	2022-12-28 08:00:03.691832469 +0000
@@ -1 +1 @@
-subdir/paginated.out
+paginated.out
not ok 4 - pager runs from subdir # TODO known breakage

expecting success of 7006.5 'LESS and LV envvars are set for pagination': 
	(
		sane_unset LESS LV &&
		PAGER="env >pager-env.out; wc" &&
		export PAGER &&

		test_terminal git log
	) &&
	grep ^LESS= pager-env.out &&
	grep ^LV= pager-env.out

      5      20     230
LESS=FRX
LV=-c
ok 5 - LESS and LV envvars are set for pagination

expecting success of 7006.6 'LESS and LV envvars set by git-sh-setup': 
	(
		sane_unset LESS LV &&
		PAGER="env >pager-env.out; wc" &&
		export PAGER &&
		PATH="$(git --exec-path):$PATH" &&
		export PATH &&
		test_terminal sh -c ". git-sh-setup && git_pager"
	) &&
	grep ^LESS= pager-env.out &&
	grep ^LV= pager-env.out

      0       0       0
LESS=FRX
LV=-c
ok 6 - LESS and LV envvars set by git-sh-setup

expecting success of 7006.7 'some commands do not use a pager': 
	rm -f paginated.out &&
	test_terminal git rev-list HEAD &&
	test_path_is_missing paginated.out

24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
ok 7 - some commands do not use a pager

expecting success of 7006.8 'no pager when stdout is a pipe': 
	rm -f paginated.out &&
	git log | cat &&
	test_path_is_missing paginated.out

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 8 - no pager when stdout is a pipe

expecting success of 7006.9 'no pager when stdout is a regular file': 
	rm -f paginated.out &&
	git log >file &&
	test_path_is_missing paginated.out

ok 9 - no pager when stdout is a regular file

expecting success of 7006.10 'git --paginate rev-list uses a pager': 
	rm -f paginated.out &&
	test_terminal git --paginate rev-list HEAD &&
	test_path_is_file paginated.out

ok 10 - git --paginate rev-list uses a pager

expecting success of 7006.11 'no pager even with --paginate when stdout is a pipe': 
	rm -f file paginated.out &&
	git --paginate log | cat &&
	test_path_is_missing paginated.out

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 11 - no pager even with --paginate when stdout is a pipe

expecting success of 7006.12 'no pager with --no-pager': 
	rm -f paginated.out &&
	test_terminal git --no-pager log &&
	test_path_is_missing paginated.out

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380 (HEAD -> master, tag: initial)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
ok 12 - no pager with --no-pager

expecting success of 7006.13 'configuration can disable pager': 
	rm -f paginated.out &&
	test_unconfig pager.grep &&
	test_terminal git grep initial &&
	test_path_is_file paginated.out &&

	rm -f paginated.out &&
	test_config pager.grep false &&
	test_terminal git grep initial &&
	test_path_is_missing paginated.out

initial.t:initial
ok 13 - configuration can disable pager

expecting success of 7006.14 'configuration can enable pager (from subdir)': 
	rm -f paginated.out &&
	mkdir -p subdir &&
	test_config pager.bundle true &&

	git bundle create test.bundle --all &&
	rm -f paginated.out subdir/paginated.out &&
	(
		cd subdir &&
		test_terminal git bundle unbundle ../test.bundle
	) &&
	{
		test_path_is_file paginated.out ||
		test_path_is_file subdir/paginated.out
	}

ok 14 - configuration can enable pager (from subdir)

expecting success of 7006.15 'git tag -l defaults to paging': 
	rm -f paginated.out &&
	test_terminal git tag -l &&
	test_path_is_file paginated.out

ok 15 - git tag -l defaults to paging

expecting success of 7006.16 'git tag -l respects pager.tag': 
	rm -f paginated.out &&
	test_terminal git -c pager.tag=false tag -l &&
	test_path_is_missing paginated.out

initial
ok 16 - git tag -l respects pager.tag

expecting success of 7006.17 'git tag -l respects --no-pager': 
	rm -f paginated.out &&
	test_terminal git -c pager.tag --no-pager tag -l &&
	test_path_is_missing paginated.out

initial
ok 17 - git tag -l respects --no-pager

expecting success of 7006.18 'git tag with no args defaults to paging': 
	# no args implies -l so this should page like -l
	rm -f paginated.out &&
	test_terminal git tag &&
	test_path_is_file paginated.out

ok 18 - git tag with no args defaults to paging

expecting success of 7006.19 'git tag with no args respects pager.tag': 
	# no args implies -l so this should page like -l
	rm -f paginated.out &&
	test_terminal git -c pager.tag=false tag &&
	test_path_is_missing paginated.out

initial
ok 19 - git tag with no args respects pager.tag

expecting success of 7006.20 'git tag --contains defaults to paging': 
	# --contains implies -l so this should page like -l
	rm -f paginated.out &&
	test_terminal git tag --contains &&
	test_path_is_file paginated.out

ok 20 - git tag --contains defaults to paging

expecting success of 7006.21 'git tag --contains respects pager.tag': 
	# --contains implies -l so this should page like -l
	rm -f paginated.out &&
	test_terminal git -c pager.tag=false tag --contains &&
	test_path_is_missing paginated.out

initial
ok 21 - git tag --contains respects pager.tag

expecting success of 7006.22 'git tag -a defaults to not paging': 
	test_when_finished "git tag -d newtag" &&
	rm -f paginated.out &&
	test_terminal git tag -am message newtag &&
	test_path_is_missing paginated.out

Deleted tag 'newtag' (was a052248)
ok 22 - git tag -a defaults to not paging

expecting success of 7006.23 'git tag -a ignores pager.tag': 
	test_when_finished "git tag -d newtag" &&
	rm -f paginated.out &&
	test_terminal git -c pager.tag tag -am message newtag &&
	test_path_is_missing paginated.out

Deleted tag 'newtag' (was a052248)
ok 23 - git tag -a ignores pager.tag

expecting success of 7006.24 'git tag -a respects --paginate': 
	test_when_finished "git tag -d newtag" &&
	rm -f paginated.out &&
	test_terminal git --paginate tag -am message newtag &&
	test_path_is_file paginated.out

Deleted tag 'newtag' (was a052248)
ok 24 - git tag -a respects --paginate

expecting success of 7006.25 'git tag as alias ignores pager.tag with -a': 
	test_when_finished "git tag -d newtag" &&
	rm -f paginated.out &&
	test_terminal git -c pager.tag -c alias.t=tag t -am message newtag &&
	test_path_is_missing paginated.out

Deleted tag 'newtag' (was a052248)
ok 25 - git tag as alias ignores pager.tag with -a

expecting success of 7006.26 'git tag as alias respects pager.tag with -l': 
	rm -f paginated.out &&
	test_terminal git -c pager.tag=false -c alias.t=tag t -l &&
	test_path_is_missing paginated.out

initial
ok 26 - git tag as alias respects pager.tag with -l

expecting success of 7006.27 'git branch defaults to paging': 
	rm -f paginated.out &&
	test_terminal git branch &&
	test_path_is_file paginated.out

ok 27 - git branch defaults to paging

expecting success of 7006.28 'git branch respects pager.branch': 
	rm -f paginated.out &&
	test_terminal git -c pager.branch=false branch &&
	test_path_is_missing paginated.out

* master
ok 28 - git branch respects pager.branch

expecting success of 7006.29 'git branch respects --no-pager': 
	rm -f paginated.out &&
	test_terminal git --no-pager branch &&
	test_path_is_missing paginated.out

* master
ok 29 - git branch respects --no-pager

expecting success of 7006.30 'git branch --edit-description ignores pager.branch': 
	rm -f paginated.out editor.used &&
	write_script editor <<-\EOF &&
		echo "New description" >"$1"
		touch editor.used
	EOF
	EDITOR=./editor test_terminal git -c pager.branch branch --edit-description &&
	test_path_is_missing paginated.out &&
	test_path_is_file editor.used

hint: Waiting for your editor to close the file... 
ok 30 - git branch --edit-description ignores pager.branch

expecting success of 7006.31 'git branch --set-upstream-to ignores pager.branch': 
	rm -f paginated.out &&
	git branch other &&
	test_when_finished "git branch -D other" &&
	test_terminal git -c pager.branch branch --set-upstream-to=other &&
	test_when_finished "git branch --unset-upstream" &&
	test_path_is_missing paginated.out

branch 'master' set up to track 'other'.
Deleted branch other (was 24b24cf).
ok 31 - git branch --set-upstream-to ignores pager.branch

expecting success of 7006.32 'git config ignores pager.config when setting': 
	rm -f paginated.out &&
	test_terminal git -c pager.config config foo.bar bar &&
	test_path_is_missing paginated.out

ok 32 - git config ignores pager.config when setting

expecting success of 7006.33 'git config --edit ignores pager.config': 
	rm -f paginated.out editor.used &&
	write_script editor <<-\EOF &&
		touch editor.used
	EOF
	EDITOR=./editor test_terminal git -c pager.config config --edit &&
	test_path_is_missing paginated.out &&
	test_path_is_file editor.used

hint: Waiting for your editor to close the file... 
ok 33 - git config --edit ignores pager.config

expecting success of 7006.34 'git config --get ignores pager.config': 
	rm -f paginated.out &&
	test_terminal git -c pager.config config --get foo.bar &&
	test_path_is_missing paginated.out

bar
ok 34 - git config --get ignores pager.config

expecting success of 7006.35 'git config --get-urlmatch defaults to paging': 
	rm -f paginated.out &&
	test_terminal git -c http."https://foo.com/".bar=foo \
			  config --get-urlmatch http https://foo.com &&
	test_path_is_file paginated.out

ok 35 - git config --get-urlmatch defaults to paging

expecting success of 7006.36 'git config --get-all respects pager.config': 
	rm -f paginated.out &&
	test_terminal git -c pager.config=false config --get-all foo.bar &&
	test_path_is_missing paginated.out

bar
ok 36 - git config --get-all respects pager.config

expecting success of 7006.37 'git config --list defaults to paging': 
	rm -f paginated.out &&
	test_terminal git config --list &&
	test_path_is_file paginated.out

ok 37 - git config --list defaults to paging

expecting success of 7006.38 'tests can detect color': 
	rm -f colorful.log colorless.log &&
	git log --no-color >colorless.log &&
	git log --color >colorful.log &&
	! colorful colorless.log &&
	colorful colorful.log

ok 38 - tests can detect color

expecting success of 7006.39 'no color when stdout is a regular file': 
	rm -f colorless.log &&
	test_config color.ui auto &&
	git log >colorless.log &&
	! colorful colorless.log

ok 39 - no color when stdout is a regular file

expecting success of 7006.40 'color when writing to a pager': 
	rm -f paginated.out &&
	test_config color.ui auto &&
	test_terminal git log &&
	colorful paginated.out

ok 40 - color when writing to a pager

expecting success of 7006.41 'colors are suppressed by color.pager': 
	rm -f paginated.out &&
	test_config color.ui auto &&
	test_config color.pager false &&
	test_terminal git log &&
	! colorful paginated.out

ok 41 - colors are suppressed by color.pager

expecting success of 7006.42 'color when writing to a file intended for a pager': 
	rm -f colorful.log &&
	test_config color.ui auto &&
	(
		TERM=vt100 &&
		GIT_PAGER_IN_USE=true &&
		export TERM GIT_PAGER_IN_USE &&
		git log >colorful.log
	) &&
	colorful colorful.log

ok 42 - color when writing to a file intended for a pager

expecting success of 7006.43 'colors are sent to pager for external commands': 
	test_config alias.externallog "!git log" &&
	test_config color.ui auto &&
	test_terminal git -p externallog &&
	colorful paginated.out

ok 43 - colors are sent to pager for external commands

expecting success of 7006.44 'setup: some aliases': 
	git config alias.aliasedlog log &&
	git config alias.true "!true"

ok 44 - setup: some aliases

expecting success of 7006.45 'git log - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git log
		) &&
		test_path_is_file default_pager_used
	
ok 45 - git log - default pager is used by default

expecting success of 7006.46 'git log - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git log &&
		test_path_is_file PAGER_used
	
ok 46 - git log - PAGER overrides default pager

expecting success of 7006.47 'git log - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git log &&
		test_path_is_file core.pager_used
	
ok 47 - git log - repository-local core.pager setting overrides PAGER

expecting success of 7006.48 'git log - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git log
		) &&
		test_path_is_file core.pager_used
	
ok 48 - git log - core.pager overrides PAGER from subdirectory

expecting success of 7006.49 'git log - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git log &&
		test_path_is_file GIT_PAGER_used
	
ok 49 - git log - GIT_PAGER overrides core.pager

expecting success of 7006.50 'git -p log - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git -p log
		) &&
		test_path_is_file default_pager_used
	
ok 50 - git -p log - default pager is used by default

expecting success of 7006.51 'git -p log - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git -p log &&
		test_path_is_file PAGER_used
	
ok 51 - git -p log - PAGER overrides default pager

expecting success of 7006.52 'git -p log - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git -p log &&
		test_path_is_file core.pager_used
	
ok 52 - git -p log - repository-local core.pager setting overrides PAGER

expecting success of 7006.53 'git -p log - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git -p log
		) &&
		test_path_is_file core.pager_used
	
ok 53 - git -p log - core.pager overrides PAGER from subdirectory

expecting success of 7006.54 'git -p log - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git -p log &&
		test_path_is_file GIT_PAGER_used
	
ok 54 - git -p log - GIT_PAGER overrides core.pager

expecting success of 7006.55 'git aliasedlog - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git aliasedlog
		) &&
		test_path_is_file default_pager_used
	
ok 55 - git aliasedlog - default pager is used by default

expecting success of 7006.56 'git aliasedlog - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git aliasedlog &&
		test_path_is_file PAGER_used
	
ok 56 - git aliasedlog - PAGER overrides default pager

expecting success of 7006.57 'git aliasedlog - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git aliasedlog &&
		test_path_is_file core.pager_used
	
ok 57 - git aliasedlog - repository-local core.pager setting overrides PAGER

expecting success of 7006.58 'git aliasedlog - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git aliasedlog
		) &&
		test_path_is_file core.pager_used
	
ok 58 - git aliasedlog - core.pager overrides PAGER from subdirectory

expecting success of 7006.59 'git aliasedlog - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git aliasedlog &&
		test_path_is_file GIT_PAGER_used
	
ok 59 - git aliasedlog - GIT_PAGER overrides core.pager

expecting success of 7006.60 'git -p aliasedlog - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git -p aliasedlog
		) &&
		test_path_is_file default_pager_used
	
ok 60 - git -p aliasedlog - default pager is used by default

expecting success of 7006.61 'git -p aliasedlog - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git -p aliasedlog &&
		test_path_is_file PAGER_used
	
ok 61 - git -p aliasedlog - PAGER overrides default pager

expecting success of 7006.62 'git -p aliasedlog - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git -p aliasedlog &&
		test_path_is_file core.pager_used
	
ok 62 - git -p aliasedlog - repository-local core.pager setting overrides PAGER

expecting success of 7006.63 'git -p aliasedlog - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git -p aliasedlog
		) &&
		test_path_is_file core.pager_used
	
ok 63 - git -p aliasedlog - core.pager overrides PAGER from subdirectory

expecting success of 7006.64 'git -p aliasedlog - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git -p aliasedlog &&
		test_path_is_file GIT_PAGER_used
	
ok 64 - git -p aliasedlog - GIT_PAGER overrides core.pager

expecting success of 7006.65 'git -p true - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git -p true
		) &&
		test_path_is_file default_pager_used
	
ok 65 - git -p true - default pager is used by default

expecting success of 7006.66 'git -p true - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git -p true &&
		test_path_is_file PAGER_used
	
ok 66 - git -p true - PAGER overrides default pager

expecting success of 7006.67 'git -p true - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git -p true &&
		test_path_is_file core.pager_used
	
ok 67 - git -p true - repository-local core.pager setting overrides PAGER

expecting success of 7006.68 'git -p true - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git -p true
		) &&
		test_path_is_file core.pager_used
	
ok 68 - git -p true - core.pager overrides PAGER from subdirectory

expecting success of 7006.69 'git -p true - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git -p true &&
		test_path_is_file GIT_PAGER_used
	
ok 69 - git -p true - GIT_PAGER overrides core.pager

expecting success of 7006.70 'git -p request-pull - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_must_fail test_terminal  git -p request-pull
		) &&
		test_path_is_file default_pager_used
	
ok 70 - git -p request-pull - default pager is used by default

expecting success of 7006.71 'git -p request-pull - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_must_fail test_terminal  git -p request-pull &&
		test_path_is_file PAGER_used
	
ok 71 - git -p request-pull - PAGER overrides default pager

expecting success of 7006.72 'git -p request-pull - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_must_fail test_terminal  git -p request-pull &&
		test_path_is_file core.pager_used
	
ok 72 - git -p request-pull - repository-local core.pager setting overrides PAGER

expecting success of 7006.73 'git -p request-pull - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_must_fail test_terminal  git -p request-pull
		) &&
		test_path_is_file core.pager_used
	
ok 73 - git -p request-pull - core.pager overrides PAGER from subdirectory

expecting success of 7006.74 'git -p request-pull - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_must_fail test_terminal  git -p request-pull &&
		test_path_is_file GIT_PAGER_used
	
ok 74 - git -p request-pull - GIT_PAGER overrides core.pager

expecting success of 7006.75 'git -p - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_must_fail test_terminal  git -p
		) &&
		test_path_is_file default_pager_used
	
ok 75 - git -p - default pager is used by default

expecting success of 7006.76 'git -p - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_must_fail test_terminal  git -p &&
		test_path_is_file PAGER_used
	
ok 76 - git -p - PAGER overrides default pager

checking known breakage of 7006.77 'git -p - repository-local core.pager setting is not used': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_must_fail test_terminal  git -p &&
		! test_path_is_file core.pager_used
	
not ok 77 - git -p - repository-local core.pager setting is not used # TODO known breakage

expecting success of 7006.78 'git -p - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_must_fail test_terminal  git -p &&
		test_path_is_file GIT_PAGER_used
	
ok 78 - git -p - GIT_PAGER overrides core.pager

expecting success of 7006.79 'core.pager in repo config works and retains cwd': 
	sane_unset GIT_PAGER &&
	test_config core.pager "cat >cwd-retained" &&
	(
		cd sub &&
		rm -f cwd-retained &&
		test_terminal git -p rev-parse HEAD &&
		test_path_is_file cwd-retained
	)

ok 79 - core.pager in repo config works and retains cwd

expecting success of 7006.80 'core.pager is found via alias in subdirectory': 
	sane_unset GIT_PAGER &&
	test_config core.pager "cat >via-alias" &&
	(
		cd sub &&
		rm -f via-alias &&
		test_terminal git -c alias.r="-p rev-parse" r HEAD &&
		test_path_is_file via-alias
	)

ok 80 - core.pager is found via alias in subdirectory

checking known breakage of 7006.81 'no pager for 'git -p nonsense'': 
		rm -f GIT_PAGER_used &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_must_fail test_terminal  git -p nonsense &&
		test_path_is_missing GIT_PAGER_used
	
Path exists:
-rw-r--r-- 1 buildd buildd 24 Dec 28 08:01 GIT_PAGER_used
not ok 81 - no pager for 'git -p nonsense' # TODO known breakage

expecting success of 7006.82 'git shortlog - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git shortlog
		) &&
		test_path_is_file default_pager_used
	
ok 82 - git shortlog - default pager is used by default

expecting success of 7006.83 'git shortlog - PAGER overrides default pager': 
		sane_unset GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f PAGER_used &&
		PAGER='wc >PAGER_used' &&
		export PAGER &&
		test_terminal  git shortlog &&
		test_path_is_file PAGER_used
	
ok 83 - git shortlog - PAGER overrides default pager

expecting success of 7006.84 'git shortlog - repository-local core.pager setting overrides PAGER': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		PAGER=wc &&
		export PAGER &&
		test_config core.pager 'wc >core.pager_used' &&
		test_terminal  git shortlog &&
		test_path_is_file core.pager_used
	
ok 84 - git shortlog - repository-local core.pager setting overrides PAGER

expecting success of 7006.85 'git shortlog - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git shortlog
		) &&
		test_path_is_file core.pager_used
	
ok 85 - git shortlog - core.pager overrides PAGER from subdirectory

expecting success of 7006.86 'git shortlog - GIT_PAGER overrides core.pager': 
		rm -f GIT_PAGER_used &&
		test_config core.pager wc &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git shortlog &&
		test_path_is_file GIT_PAGER_used
	
ok 86 - git shortlog - GIT_PAGER overrides core.pager

expecting success of 7006.87 'setup: configure shortlog not to paginate': 
	git config pager.shortlog false

ok 87 - setup: configure shortlog not to paginate

expecting success of 7006.88 'no pager for 'git shortlog'': 
		rm -f GIT_PAGER_used &&
		GIT_PAGER='wc >GIT_PAGER_used' &&
		export GIT_PAGER &&
		test_terminal  git shortlog &&
		test_path_is_missing GIT_PAGER_used
	
ok 88 - no pager for 'git shortlog'

expecting success of 7006.89 'git shortlog - core.pager is not used from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git shortlog
		) &&
		! test_path_is_file core.pager_used
	
File core.pager_used doesn't exist
ok 89 - git shortlog - core.pager is not used from subdirectory

expecting success of 7006.90 'git -p shortlog - default pager is used by default': 
		sane_unset PAGER GIT_PAGER &&
		test_unconfig core.pager &&
		rm -f default_pager_used &&
		cat >$less <<-\EOF &&
		#!/bin/sh
		wc >default_pager_used
		EOF
		chmod +x $less &&
		(
			PATH=.:$PATH &&
			export PATH &&
			test_terminal  git -p shortlog
		) &&
		test_path_is_file default_pager_used
	
ok 90 - git -p shortlog - default pager is used by default

expecting success of 7006.91 'git -p shortlog - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_terminal  git -p shortlog
		) &&
		test_path_is_file core.pager_used
	
ok 91 - git -p shortlog - core.pager overrides PAGER from subdirectory

expecting success of 7006.92 'git -p apply </dev/null - core.pager overrides PAGER from subdirectory': 
		sane_unset GIT_PAGER &&
		rm -f core.pager_used &&
		rm -fr sub &&
		PAGER=wc &&
		stampname=$(pwd)/core.pager_used &&
		export PAGER stampname &&
		test_config core.pager 'wc >"$stampname"' &&
		mkdir sub &&
		(
			cd sub &&
			test_must_fail test_terminal  git -p apply </dev/null
		) &&
		test_path_is_file core.pager_used
	
ok 92 - git -p apply </dev/null - core.pager overrides PAGER from subdirectory

expecting success of 7006.93 'command-specific pager': 
	sane_unset PAGER GIT_PAGER &&
	echo "foo:initial" >expect &&
	>actual &&
	test_unconfig core.pager &&
	test_config pager.log "sed s/^/foo:/ >actual" &&
	test_terminal git log --format=%s -1 &&
	test_cmp expect actual

ok 93 - command-specific pager

expecting success of 7006.94 'command-specific pager overrides core.pager': 
	sane_unset PAGER GIT_PAGER &&
	echo "foo:initial" >expect &&
	>actual &&
	test_config core.pager "exit 1" &&
	test_config pager.log "sed s/^/foo:/ >actual" &&
	test_terminal git log --format=%s -1 &&
	test_cmp expect actual

ok 94 - command-specific pager overrides core.pager

expecting success of 7006.95 'command-specific pager overridden by environment': 
	GIT_PAGER="sed s/^/foo:/ >actual" && export GIT_PAGER &&
	>actual &&
	echo "foo:initial" >expect &&
	test_config pager.log "exit 1" &&
	test_terminal git log --format=%s -1 &&
	test_cmp expect actual

ok 95 - command-specific pager overridden by environment

expecting success of 7006.96 'setup external command': 
	cat >git-external <<-\EOF &&
	#!/bin/sh
	git "$@"
	EOF
	chmod +x git-external

ok 96 - setup external command

expecting success of 7006.97 'command-specific pager works for external commands': 
	sane_unset PAGER GIT_PAGER &&
	echo "foo:initial" >expect &&
	>actual &&
	test_config pager.external "sed s/^/foo:/ >actual" &&
	test_terminal git --exec-path="$(pwd)" external log --format=%s -1 &&
	test_cmp expect actual

ok 97 - command-specific pager works for external commands

expecting success of 7006.98 'sub-commands of externals use their own pager': 
	sane_unset PAGER GIT_PAGER &&
	echo "foo:initial" >expect &&
	>actual &&
	test_config pager.log "sed s/^/foo:/ >actual" &&
	test_terminal git --exec-path=. external log --format=%s -1 &&
	test_cmp expect actual

ok 98 - sub-commands of externals use their own pager

expecting success of 7006.99 'external command pagers override sub-commands': 
	sane_unset PAGER GIT_PAGER &&
	>actual &&
	test_config pager.external false &&
	test_config pager.log "sed s/^/log:/ >actual" &&
	test_terminal git --exec-path=. external log --format=%s -1 &&
	test_must_be_empty actual

initial
ok 99 - external command pagers override sub-commands

expecting success of 7006.100 'command with underscores does not complain': 
	write_script git-under_score <<-\EOF &&
	echo ok
	EOF
	git --exec-path=. under_score >actual 2>&1 &&
	echo ok >expect &&
	test_cmp expect actual

ok 100 - command with underscores does not complain

expecting success of 7006.101 'git tag with auto-columns ': 
	test_commit one &&
	test_commit two &&
	test_commit three &&
	test_commit four &&
	test_commit five &&
	cat >expect <<-\EOF &&
	initial  one      two      three    four     five
	EOF
	test_terminal env PAGER="cat >actual" COLUMNS=80 \
		git -c column.ui=auto tag --sort=authordate &&
	test_cmp expect actual

[master bdf0f03] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master c613728] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
[master dbd092b] three
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.t
[master a0ce8ac] four
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 four.t
[master 03bd18b] five
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 five.t
ok 101 - git tag with auto-columns 

expecting success of 7006.102 'setup trace2': 
	GIT_TRACE2_BRIEF=1 &&
	export GIT_TRACE2_BRIEF

ok 102 - setup trace2

expecting success of 7006.103 'setup large log output': 
	perl -e "
		print \"this is a long commit message\" x 50000
	" >commit-msg &&
	git commit --allow-empty -F commit-msg

[master 06d9144] this is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit message
 Author: A U Thor <author@example.com>
ok 103 - setup large log output

expecting success of 7006.104 'git returns SIGPIPE on early pager exit': 
	test_when_finished "rm pager-used trace.normal" &&
	test_config core.pager ">pager-used; head -n 1; exit 0" &&
	GIT_TRACE2="$(pwd)/trace.normal" &&
	export GIT_TRACE2 &&
	test_when_finished "unset GIT_TRACE2" &&

	if test_have_prereq !MINGW
	then
		{ test_terminal git log >/dev/null; OUT=$?; } &&
		test_match_signal 13 "$OUT"
	else
		test_terminal git log
	fi &&

	grep child_exit trace.normal >child-exits &&
	test_line_count = 1 child-exits &&
	grep " code:0 " child-exits &&
	test_path_is_file pager-used

died of signal 13 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
child_exit[0] pid:8674 code:0 elapsed:0.068740
ok 104 - git returns SIGPIPE on early pager exit

expecting success of 7006.105 'git returns SIGPIPE on early pager non-zero exit': 
	test_when_finished "rm pager-used trace.normal" &&
	test_config core.pager ">pager-used; head -n 1; exit 1" &&
	GIT_TRACE2="$(pwd)/trace.normal" &&
	export GIT_TRACE2 &&
	test_when_finished "unset GIT_TRACE2" &&

	if test_have_prereq !MINGW
	then
		{ test_terminal git log >/dev/null; OUT=$?; } &&
		test_match_signal 13 "$OUT"
	else
		test_terminal git log
	fi &&

	grep child_exit trace.normal >child-exits &&
	test_line_count = 1 child-exits &&
	grep " code:1 " child-exits &&
	test_path_is_file pager-used

died of signal 13 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
child_exit[0] pid:8795 code:1 elapsed:0.048739
ok 105 - git returns SIGPIPE on early pager non-zero exit

expecting success of 7006.106 'git discards pager non-zero exit without SIGPIPE': 
	test_when_finished "rm pager-used trace.normal" &&
	test_config core.pager "wc >pager-used; exit 1" &&
	GIT_TRACE2="$(pwd)/trace.normal" &&
	export GIT_TRACE2 &&
	test_when_finished "unset GIT_TRACE2" &&

	test_terminal git log &&

	grep child_exit trace.normal >child-exits &&
	test_line_count = 1 child-exits &&
	grep " code:1 " child-exits &&
	test_path_is_file pager-used

child_exit[0] pid:8957 code:1 elapsed:0.205109
ok 106 - git discards pager non-zero exit without SIGPIPE

expecting success of 7006.107 'git skips paging nonexisting command': 
	test_when_finished "rm trace.normal" &&
	test_config core.pager "does-not-exist" &&
	GIT_TRACE2="$(pwd)/trace.normal" &&
	export GIT_TRACE2 &&
	test_when_finished "unset GIT_TRACE2" &&

	test_terminal git log &&

	grep child_exit trace.normal >child-exits &&
	test_line_count = 1 child-exits &&
	grep " code:-1 " child-exits

error: cannot run does-not-exist: No such file or directory
commit 06d91448ed6bcb5ffdc37124764a61bcba51446b (HEAD -> master)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    this is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit message

commit 03bd18bf9c6a24c4f9bfa66c60f8149f575b3d8c (tag: five)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    five

commit a0ce8acc638ab387caee0177f4744c6302740376 (tag: four)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:17:13 2005 -0700

    four

commit dbd092b7cae29732c548535ffeaa5488234632f1 (tag: three)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:16:13 2005 -0700

    three

commit c613728a2bb410d9873522d44a16e2bc26c0d12e (tag: two)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    two

commit bdf0f0369212eafe2b5ffb543ac5ec35ea38b136 (tag: one)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    one

commit 24b24cf8a829f5b8c30dfc018b0a459a2ccaf380 (tag: initial)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial
child_exit[0] pid:-1 code:-1 elapsed:0.000766
ok 107 - git skips paging nonexisting command

expecting success of 7006.108 'git returns SIGPIPE on propagated signals from pager': 
	test_when_finished "rm pager-used trace.normal" &&
	test_config core.pager ">pager-used; exec test-tool sigchain" &&
	GIT_TRACE2="$(pwd)/trace.normal" &&
	export GIT_TRACE2 &&
	test_when_finished "unset GIT_TRACE2" &&

	if test_have_prereq !MINGW
	then
		{ test_terminal git log >/dev/null; OUT=$?; } &&
		test_match_signal 13 "$OUT"
	else
		test_terminal git log
	fi &&

	grep child_exit trace.normal >child-exits &&
	test_line_count = 1 child-exits &&
	grep " code:143 " child-exits &&
	test_path_is_file pager-used

died of signal 13 at /<<PKGBUILDDIR>>/t/test-terminal.perl line 35.
child_exit[0] pid:9213 code:143 elapsed:0.055870
ok 108 - git returns SIGPIPE on propagated signals from pager

expecting success of 7006.109 'non-existent pager doesnt cause crash': 
	test_config pager.show invalid-pager &&
	test_terminal git show

error: cannot run invalid-pager: No such file or directory
error: cannot run invalid-pager: No such file or directory
commit 06d91448ed6bcb5ffdc37124764a61bcba51446b (HEAD -> master)
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    this is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit messagethis is a long commit message
ok 109 - non-existent pager doesnt cause crash

# still have 3 known breakage(s)
# passed all remaining 106 test(s)
1..109
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7110-reset-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7110-reset-merge/.git/
expecting success of 7110.1 'setup': 
    printf "line %d\n" 1 2 3 >file1 &&
    cat file1 >file2 &&
    git add file1 file2 &&
    test_tick &&
    git commit -m "Initial commit" &&
    git tag initial &&
    echo line 4 >>file1 &&
    cat file1 >file2 &&
    test_tick &&
    git commit -m "add line 4 to file1" file1 &&
    git tag second

[master (root-commit) 294b13e] Initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 6 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
[master 91b6f65] add line 4 to file1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 7110.2 'reset --merge is ok with changes in file it does not touch': 
    git reset --merge HEAD^ &&
    ! grep 4 file1 &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
    test -z "$(git diff --cached)"

line 4
ok 2 - reset --merge is ok with changes in file it does not touch

expecting success of 7110.3 'reset --merge is ok when switching back': 
    git reset --merge second &&
    grep 4 file1 &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)"

line 4
line 4
ok 3 - reset --merge is ok when switching back

expecting success of 7110.4 'reset --keep is ok with changes in file it does not touch': 
    git reset --hard second &&
    cat file1 >file2 &&
    git reset --keep HEAD^ &&
    ! grep 4 file1 &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
    test -z "$(git diff --cached)"

HEAD is now at 91b6f65 add line 4 to file1
line 4
ok 4 - reset --keep is ok with changes in file it does not touch

expecting success of 7110.5 'reset --keep is ok when switching back': 
    git reset --keep second &&
    grep 4 file1 &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)"

line 4
line 4
ok 5 - reset --keep is ok when switching back

expecting success of 7110.6 'reset --merge discards changes added to index (1)': 
    git reset --hard second &&
    cat file1 >file2 &&
    echo "line 5" >> file1 &&
    git add file1 &&
    git reset --merge HEAD^ &&
    ! grep 4 file1 &&
    ! grep 5 file1 &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
    test -z "$(git diff --cached)"

HEAD is now at 91b6f65 add line 4 to file1
line 4
ok 6 - reset --merge discards changes added to index (1)

expecting success of 7110.7 'reset --merge is ok again when switching back (1)': 
    git reset --hard initial &&
    echo "line 5" >> file2 &&
    git add file2 &&
    git reset --merge second &&
    ! grep 4 file2 &&
    ! grep 5 file1 &&
    grep 4 file1 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)"

HEAD is now at 294b13e Initial commit
line 4
ok 7 - reset --merge is ok again when switching back (1)

expecting success of 7110.8 'reset --keep fails with changes in index in files it touches': 
    git reset --hard second &&
    echo "line 5" >> file1 &&
    git add file1 &&
    test_must_fail git reset --keep HEAD^

HEAD is now at 91b6f65 add line 4 to file1
error: Entry 'file1' would be overwritten by merge. Cannot merge.
fatal: Could not reset index file to revision 'HEAD^'.
ok 8 - reset --keep fails with changes in index in files it touches

expecting success of 7110.9 'reset --merge discards changes added to index (2)': 
    git reset --hard second &&
    echo "line 4" >> file2 &&
    git add file2 &&
    git reset --merge HEAD^ &&
    ! grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
    test -z "$(git diff)" &&
    test -z "$(git diff --cached)"

HEAD is now at 91b6f65 add line 4 to file1
ok 9 - reset --merge discards changes added to index (2)

expecting success of 7110.10 'reset --merge is ok again when switching back (2)': 
    git reset --hard initial &&
    git reset --merge second &&
    ! grep 4 file2 &&
    grep 4 file1 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)"

HEAD is now at 294b13e Initial commit
line 4
ok 10 - reset --merge is ok again when switching back (2)

expecting success of 7110.11 'reset --keep keeps changes it does not touch': 
    git reset --hard second &&
    echo "line 4" >> file2 &&
    git add file2 &&
    git reset --keep HEAD^ &&
    grep 4 file2 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
    test -z "$(git diff --cached)"

HEAD is now at 91b6f65 add line 4 to file1
line 4
ok 11 - reset --keep keeps changes it does not touch

expecting success of 7110.12 'reset --keep keeps changes when switching back': 
    git reset --keep second &&
    grep 4 file2 &&
    grep 4 file1 &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)"

line 4
line 4
ok 12 - reset --keep keeps changes when switching back

expecting success of 7110.13 'reset --merge fails with changes in file it touches': 
    git reset --hard second &&
    echo "line 5" >> file1 &&
    test_tick &&
    git commit -m "add line 5" file1 &&
    sed -e "s/line 1/changed line 1/" <file1 >file3 &&
    mv file3 file1 &&
    test_must_fail git reset --merge HEAD^ 2>err.log &&
    grep file1 err.log | grep "not uptodate"

HEAD is now at 91b6f65 add line 4 to file1
[master 7799e7c] add line 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
error: Entry 'file1' not uptodate. Cannot merge.
ok 13 - reset --merge fails with changes in file it touches

expecting success of 7110.14 'reset --keep fails with changes in file it touches': 
    git reset --hard second &&
    echo "line 5" >> file1 &&
    test_tick &&
    git commit -m "add line 5" file1 &&
    sed -e "s/line 1/changed line 1/" <file1 >file3 &&
    mv file3 file1 &&
    test_must_fail git reset --keep HEAD^ 2>err.log &&
    grep file1 err.log | grep "not uptodate"

HEAD is now at 91b6f65 add line 4 to file1
[master f1894d3] add line 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
error: Entry 'file1' not uptodate. Cannot merge.
ok 14 - reset --keep fails with changes in file it touches

expecting success of 7110.15 'setup 3 different branches': 
    git reset --hard second &&
    git branch branch1 &&
    git branch branch2 &&
    git branch branch3 &&
    git checkout branch1 &&
    echo "line 5 in branch1" >> file1 &&
    test_tick &&
    git commit -a -m "change in branch1" &&
    git checkout branch2 &&
    echo "line 5 in branch2" >> file1 &&
    test_tick &&
    git commit -a -m "change in branch2" &&
    git tag third &&
    git checkout branch3 &&
    echo a new file >file3 &&
    rm -f file1 &&
    git add file3 &&
    test_tick &&
    git commit -a -m "change in branch3"

HEAD is now at 91b6f65 add line 4 to file1
Switched to branch 'branch1'
[branch1 4afd189] change in branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'branch2'
[branch2 077fd6d] change in branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'branch3'
[branch3 05419f2] change in branch3
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 4 deletions(-)
 delete mode 100644 file1
 create mode 100644 file3
ok 15 - setup 3 different branches

expecting success of 7110.16 '"reset --merge HEAD^" is ok with pending merge': 
    git checkout third &&
    test_must_fail git merge branch1 &&
    git reset --merge HEAD^ &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
    test -z "$(git diff --cached)" &&
    test -z "$(git diff)"

Note: switching to 'third'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 077fd6d change in branch2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
ok 16 - "reset --merge HEAD^" is ok with pending merge

expecting success of 7110.17 '"reset --keep HEAD^" fails with pending merge': 
    git reset --hard third &&
    test_must_fail git merge branch1 &&
    test_must_fail git reset --keep HEAD^ 2>err.log &&
    test_i18ngrep "middle of a merge" err.log

HEAD is now at 077fd6d change in branch2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a keep reset in the middle of a merge.
ok 17 - "reset --keep HEAD^" fails with pending merge

expecting success of 7110.18 '"reset --merge HEAD" is ok with pending merge': 
    git reset --hard third &&
    test_must_fail git merge branch1 &&
    git reset --merge HEAD &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse third)" &&
    test -z "$(git diff --cached)" &&
    test -z "$(git diff)"

HEAD is now at 077fd6d change in branch2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
ok 18 - "reset --merge HEAD" is ok with pending merge

expecting success of 7110.19 '"reset --keep HEAD" fails with pending merge': 
    git reset --hard third &&
    test_must_fail git merge branch1 &&
    test_must_fail git reset --keep HEAD 2>err.log &&
    test_i18ngrep "middle of a merge" err.log

HEAD is now at 077fd6d change in branch2
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a keep reset in the middle of a merge.
ok 19 - "reset --keep HEAD" fails with pending merge

expecting success of 7110.20 '--merge is ok with added/deleted merge': 
    git reset --hard third &&
    rm -f file2 &&
    test_must_fail git merge branch3 &&
    ! test -f file2 &&
    test -f file3 &&
    git diff --exit-code file3 &&
    git diff --exit-code branch3 file3 &&
    git reset --merge HEAD &&
    ! test -f file3 &&
    ! test -f file2 &&
    git diff --exit-code --cached

HEAD is now at 077fd6d change in branch2
CONFLICT (modify/delete): file1 deleted in branch3 and modified in HEAD.  Version HEAD of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
ok 20 - --merge is ok with added/deleted merge

expecting success of 7110.21 '--keep fails with added/deleted merge': 
    git reset --hard third &&
    rm -f file2 &&
    test_must_fail git merge branch3 &&
    ! test -f file2 &&
    test -f file3 &&
    git diff --exit-code file3 &&
    git diff --exit-code branch3 file3 &&
    test_must_fail git reset --keep HEAD 2>err.log &&
    test_i18ngrep "middle of a merge" err.log

HEAD is now at 077fd6d change in branch2
CONFLICT (modify/delete): file1 deleted in branch3 and modified in HEAD.  Version HEAD of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a keep reset in the middle of a merge.
ok 21 - --keep fails with added/deleted merge

# passed all 21 test(s)
1..21
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7113-post-index-change-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7113-post-index-change-hook/.git/
expecting success of 7113.1 'setup': 
	mkdir -p dir1 &&
	touch dir1/file1.txt &&
	echo testing >dir1/file2.txt &&
	git add . &&
	git commit -m "initial"

[main (root-commit) 7e53173] initial
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 dir1/file1.txt
 create mode 100644 dir1/file2.txt
ok 1 - setup

expecting success of 7113.2 'test status, add, commit, others trigger hook without flags set': 
	test_hook post-index-change <<-\EOF &&
		if test "$1" -eq 1; then
			echo "Invalid combination of flags passed to hook; updated_workdir is set." >testfailure
			exit 1
		fi
		if test "$2" -eq 1; then
			echo "Invalid combination of flags passed to hook; updated_skipworktree is set." >testfailure
			exit 1
		fi
		if test -f ".git/index.lock"; then
			echo ".git/index.lock exists" >testfailure
			exit 3
		fi
		if ! test -f ".git/index"; then
			echo ".git/index does not exist" >testfailure
			exit 3
		fi
		echo "success" >testsuccess
	EOF
	mkdir -p dir2 &&
	touch dir2/file1.txt &&
	touch dir2/file2.txt &&
	: force index to be dirty &&
	test-tool chmtime +60 dir1/file1.txt &&
	git status &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git add . &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git commit -m "second" &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git checkout -- dir1/file1.txt &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git update-index &&
	test_path_is_missing testsuccess &&
	test_path_is_missing testfailure &&
	git reset --soft &&
	test_path_is_missing testsuccess &&
	test_path_is_missing testfailure

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir2/

nothing added to commit but untracked files present (use "git add" to track)
[main 5070ba9] second
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir2/file1.txt
 create mode 100644 dir2/file2.txt
ok 2 - test status, add, commit, others trigger hook without flags set

expecting success of 7113.3 'test checkout and reset trigger the hook': 
	test_hook post-index-change <<-\EOF &&
		if test "$1" -eq 1 && test "$2" -eq 1; then
			echo "Invalid combination of flags passed to hook; updated_workdir and updated_skipworktree are both set." >testfailure
			exit 1
		fi
		if test "$1" -eq 0 && test "$2" -eq 0; then
			echo "Invalid combination of flags passed to hook; neither updated_workdir or updated_skipworktree are set." >testfailure
			exit 2
		fi
		if test "$1" -eq 1; then
			if test -f ".git/index.lock"; then
				echo "updated_workdir set but .git/index.lock exists" >testfailure
				exit 3
			fi
			if ! test -f ".git/index"; then
				echo "updated_workdir set but .git/index does not exist" >testfailure
				exit 3
			fi
		else
			echo "update_workdir should be set for checkout" >testfailure
			exit 4
		fi
		echo "success" >testsuccess
	EOF
	: force index to be dirty &&
	test-tool chmtime +60 dir1/file1.txt &&
	git checkout main &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	test-tool chmtime +60 dir1/file1.txt &&
	git checkout HEAD &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	test-tool chmtime +60 dir1/file1.txt &&
	git reset --hard &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git checkout -B test &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure

Already on 'main'
HEAD is now at 5070ba9 second
Switched to a new branch 'test'
ok 3 - test checkout and reset trigger the hook

expecting success of 7113.4 'test reset --mixed and update-index triggers the hook': 
	test_hook post-index-change <<-\EOF &&
		if test "$1" -eq 1 && test "$2" -eq 1; then
			echo "Invalid combination of flags passed to hook; updated_workdir and updated_skipworktree are both set." >testfailure
			exit 1
		fi
		if test "$1" -eq 0 && test "$2" -eq 0; then
			echo "Invalid combination of flags passed to hook; neither updated_workdir or updated_skipworktree are set." >testfailure
			exit 2
		fi
		if test "$2" -eq 1; then
			if test -f ".git/index.lock"; then
				echo "updated_skipworktree set but .git/index.lock exists" >testfailure
				exit 3
			fi
			if ! test -f ".git/index"; then
				echo "updated_skipworktree set but .git/index does not exist" >testfailure
				exit 3
			fi
		else
			echo "updated_skipworktree should be set for reset --mixed and update-index" >testfailure
			exit 4
		fi
		echo "success" >testsuccess
	EOF
	: force index to be dirty &&
	test-tool chmtime +60 dir1/file1.txt &&
	git reset --mixed --quiet HEAD~1 &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git hash-object -w --stdin <dir1/file2.txt >expect &&
	git update-index --cacheinfo 100644 "$(cat expect)" dir1/file1.txt &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure &&
	git update-index --skip-worktree dir1/file2.txt &&
	git update-index --remove dir1/file2.txt &&
	test_path_is_file testsuccess && rm -f testsuccess &&
	test_path_is_missing testfailure

ok 4 - test reset --mixed and update-index triggers the hook

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7111-reset-table.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7111-reset-table/.git/
expecting success of 7111.1 'creating initial commits': 
    test_commit E file1 &&
    test_commit D file1 &&
    test_commit C file1

[master (root-commit) 8464dc0] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[master 2131783] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 4bb0b07] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - creating initial commits

expecting success of 7111.2 'check: A B C D --soft A B D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 2 - check: A B C D --soft A B D

expecting success of 7111.3 'check: A B C D --mixed A D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 3 - check: A B C D --mixed A D D

expecting success of 7111.4 'check: A B C D --hard D D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 2131783 D
ok 4 - check: A B C D --hard D D D

expecting success of 7111.5 'check: A B C D --merge XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'D'.
ok 5 - check: A B C D --merge XXXXX  

expecting success of 7111.6 'check: A B C D --keep XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' would be overwritten by merge. Cannot merge.
fatal: Could not reset index file to revision 'D'.
ok 6 - check: A B C D --keep XXXXX  

expecting success of 7111.7 'check: A B C C --soft A B C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 7 - check: A B C C --soft A B C

expecting success of 7111.8 'check: A B C C --mixed A C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 8 - check: A B C C --mixed A C C

expecting success of 7111.9 'check: A B C C --hard C C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 4bb0b07 C
ok 9 - check: A B C C --hard C C C

expecting success of 7111.10 'check: A B C C --merge XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'C'.
ok 10 - check: A B C C --merge XXXXX  

expecting success of 7111.11 'check: A B C C --keep A C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 11 - check: A B C C --keep A C C

expecting success of 7111.12 'check: B B C D --soft B B D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 12 - check: B B C D --soft B B D

expecting success of 7111.13 'check: B B C D --mixed B D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 13 - check: B B C D --mixed B D D

expecting success of 7111.14 'check: B B C D --hard D D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 2131783 D
ok 14 - check: B B C D --hard D D D

expecting success of 7111.15 'check: B B C D --merge D D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 15 - check: B B C D --merge D D D

expecting success of 7111.16 'check: B B C D --keep XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' would be overwritten by merge. Cannot merge.
fatal: Could not reset index file to revision 'D'.
ok 16 - check: B B C D --keep XXXXX  

expecting success of 7111.17 'check: B B C C --soft B B C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 17 - check: B B C C --soft B B C

expecting success of 7111.18 'check: B B C C --mixed B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 18 - check: B B C C --mixed B C C

expecting success of 7111.19 'check: B B C C --hard C C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 4bb0b07 C
ok 19 - check: B B C C --hard C C C

expecting success of 7111.20 'check: B B C C --merge C C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 20 - check: B B C C --merge C C C

expecting success of 7111.21 'check: B B C C --keep B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 21 - check: B B C C --keep B C C

expecting success of 7111.22 'check: B C C D --soft B C D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 22 - check: B C C D --soft B C D

expecting success of 7111.23 'check: B C C D --mixed B D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 23 - check: B C C D --mixed B D D

expecting success of 7111.24 'check: B C C D --hard D D D': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 2131783 D
ok 24 - check: B C C D --hard D D D

expecting success of 7111.25 'check: B C C D --merge XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'D'.
ok 25 - check: B C C D --merge XXXXX  

expecting success of 7111.26 'check: B C C D --keep XXXXX  ': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
error: Entry 'file1' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'D'.
ok 26 - check: B C C D --keep XXXXX  

expecting success of 7111.27 'check: B C C C --soft B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 27 - check: B C C C --soft B C C

expecting success of 7111.28 'check: B C C C --mixed B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
Unstaged changes after reset:
M	file1
ok 28 - check: B C C C --mixed B C C

expecting success of 7111.29 'check: B C C C --hard C C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
HEAD is now at 4bb0b07 C
ok 29 - check: B C C C --hard C C C

expecting success of 7111.30 'check: B C C C --merge B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 30 - check: B C C C --merge B C C

expecting success of 7111.31 'check: B C C C --keep B C C': 
	git reset --hard C &&
	if test "$I1" != "$H1"
	then
	    echo "$I1" >file1 &&
	    git add file1
	fi &&
	if test "$W1" != "$I1"
	then
	    echo "$W1" >file1
	fi &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    test "$(cat file1)" = "$W2" &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at 4bb0b07 C
ok 31 - check: B C C C --keep B C C

expecting success of 7111.32 'setting up branches to test with unmerged entries': 
    git reset --hard C &&
    git branch branch1 &&
    git branch branch2 &&
    git checkout branch1 &&
    test_commit B1 file1 &&
    git checkout branch2 &&
    test_commit B file1

HEAD is now at 4bb0b07 C
Switched to branch 'branch1'
[branch1 5456cd2] B1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'branch2'
[branch2 aa272d3] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 32 - setting up branches to test with unmerged entries

expecting success of 7111.33 'check: X U B C --soft XXXXX  ': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a soft reset in the middle of a merge.
ok 33 - check: X U B C --soft XXXXX  

expecting success of 7111.34 'check: X U B C --mixed X C C': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
Unstaged changes after reset:
M	file1
ok 34 - check: X U B C --mixed X C C

expecting success of 7111.35 'check: X U B C --hard C C C': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 4bb0b07 C
ok 35 - check: X U B C --hard C C C

expecting success of 7111.36 'check: X U B C --merge C C C': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
ok 36 - check: X U B C --merge C C C

expecting success of 7111.37 'check: X U B C --keep XXXXX  ': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a keep reset in the middle of a merge.
ok 37 - check: X U B C --keep XXXXX  

expecting success of 7111.38 'check: X U B B --soft XXXXX  ': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a soft reset in the middle of a merge.
ok 38 - check: X U B B --soft XXXXX  

expecting success of 7111.39 'check: X U B B --mixed X B B': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
Unstaged changes after reset:
M	file1
ok 39 - check: X U B B --mixed X B B

expecting success of 7111.40 'check: X U B B --hard B B B': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at aa272d3 B
ok 40 - check: X U B B --hard B B B

expecting success of 7111.41 'check: X U B B --merge B B B': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
ok 41 - check: X U B B --merge B B B

expecting success of 7111.42 'check: X U B B --keep XXXXX  ': 
	git reset --hard B &&
	test_must_fail git merge branch1 &&
	cat file1 >X_file1 &&
	if test "$W2" != "XXXXX"
	then
	    git reset --$opt $T &&
	    if test "$W2" = "X"
	    then
		test_cmp file1 X_file1
	    else
		test "$(cat file1)" = "$W2"
	    fi &&
	    git checkout-index -f -- file1 &&
	    test "$(cat file1)" = "$I2" &&
	    git checkout -f HEAD -- file1 &&
	    test "$(cat file1)" = "$H2"
	else
	    test_must_fail git reset --$opt $T
	fi
    
HEAD is now at aa272d3 B
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
fatal: Cannot do a keep reset in the middle of a merge.
ok 42 - check: X U B B --keep XXXXX  

# passed all 42 test(s)
1..42
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7301-clean-interactive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7301-clean-interactive/.git/
expecting success of 7301.1 'setup': 

	mkdir -p src &&
	touch src/part1.c Makefile &&
	echo build >.gitignore &&
	echo \*.o >>.gitignore &&
	git add . &&
	git commit -m setup &&
	touch src/part2.c README &&
	git add .


[master (root-commit) c1a48e2] setup
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Makefile
 create mode 100644 src/part1.c
ok 1 - setup

expecting success of 7301.2 'git clean -i (c: clean hotkey)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	echo c | git clean -i &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test ! -f src/part4.c &&
	test ! -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part3.h  src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing src/part3.c
Removing src/part3.h
Removing src/part4.c
Removing src/part4.h
ok 2 - git clean -i (c: clean hotkey)

expecting success of 7301.3 'git clean -i (cl: clean prefix)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	echo cl | git clean -i &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test ! -f src/part4.c &&
	test ! -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part3.h  src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing src/part3.c
Removing src/part3.h
Removing src/part4.c
Removing src/part4.h
ok 3 - git clean -i (cl: clean prefix)

expecting success of 7301.4 'git clean -i (quit)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	echo quit | git clean -i &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part3.h  src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Bye.
ok 4 - git clean -i (quit)

expecting success of 7301.5 'git clean -i (Ctrl+D)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	echo "\04" | git clean -i &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part3.h  src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Huh ()?
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Bye.
ok 5 - git clean -i (Ctrl+D)

expecting success of 7301.6 'git clean -id (filter all)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines f "*" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>   a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
Input ignore patterns>> No more files to clean, exiting.
ok 6 - git clean -id (filter all)

expecting success of 7301.7 'git clean -id (filter patterns)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines f "part3.* *.out" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test ! -f src/part4.c &&
	test ! -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>   a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
Input ignore patterns>>   docs/        src/part4.c  src/part4.h
Input ignore patterns>> Would remove the following items:
  docs/        src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing docs/
Removing src/part4.c
Removing src/part4.h
ok 7 - git clean -id (filter patterns)

expecting success of 7301.8 'git clean -id (filter patterns 2)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines f "* !*.out" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>   a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
Input ignore patterns>>   a.out
Input ignore patterns>> Would remove the following item:
  a.out
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
ok 8 - git clean -id (filter patterns 2)

expecting success of 7301.9 'git clean -id (select - all)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "*" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test ! -f src/part4.c &&
	test ! -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>   * 1: a.out        * 2: docs/        * 3: src/part3.c  * 4: src/part3.h
  * 5: src/part4.c  * 6: src/part4.h
Select items to delete>> Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing docs/
Removing src/part3.c
Removing src/part3.h
Removing src/part4.c
Removing src/part4.h
ok 9 - git clean -id (select - all)

expecting success of 7301.10 'git clean -id (select - none)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>> No more files to clean, exiting.
ok 10 - git clean -id (select - none)

expecting success of 7301.11 'git clean -id (select - number)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s 3 "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>     1: a.out          2: docs/        * 3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>> Would remove the following item:
  src/part3.c
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing src/part3.c
ok 11 - git clean -id (select - number)

expecting success of 7301.12 'git clean -id (select - number 2)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "2 3" 5 "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test -f src/part3.h &&
	test ! -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>     1: a.out        * 2: docs/        * 3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>     1: a.out        * 2: docs/        * 3: src/part3.c    4: src/part3.h
  * 5: src/part4.c    6: src/part4.h
Select items to delete>> Would remove the following items:
  docs/        src/part3.c  src/part4.c
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing docs/
Removing src/part3.c
Removing src/part4.c
ok 12 - git clean -id (select - number 2)

expecting success of 7301.13 'git clean -id (select - number 3)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "3,4 5" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test ! -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>     1: a.out          2: docs/        * 3: src/part3.c  * 4: src/part3.h
  * 5: src/part4.c    6: src/part4.h
Select items to delete>> Would remove the following items:
  src/part3.c  src/part3.h  src/part4.c
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing src/part3.c
Removing src/part3.h
Removing src/part4.c
ok 13 - git clean -id (select - number 3)

expecting success of 7301.14 'git clean -id (select - filenames)': 

	mkdir -p build docs &&
	touch a.out foo.txt bar.txt baz.txt &&
	test_write_lines s "a.out fo ba bar" "" c |
	git clean -id &&
	test -f Makefile &&
	test ! -f a.out &&
	test ! -f foo.txt &&
	test ! -f bar.txt &&
	test -f baz.txt &&
	rm baz.txt


Would remove the following items:
  a.out        baz.txt      foo.txt
  bar.txt      docs/        src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: bar.txt        3: baz.txt        4: docs/
    5: foo.txt        6: src/part4.h
Select items to delete>> Huh (ba)?
  * 1: a.out        * 2: bar.txt        3: baz.txt        4: docs/
  * 5: foo.txt        6: src/part4.h
Select items to delete>> Would remove the following items:
  a.out    bar.txt  foo.txt
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing bar.txt
Removing foo.txt
ok 14 - git clean -id (select - filenames)

expecting success of 7301.15 'git clean -id (select - range)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "1,3-4" 2 "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test ! -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>   * 1: a.out          2: docs/        * 3: src/part3.c  * 4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>   * 1: a.out        * 2: docs/        * 3: src/part3.c  * 4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>> Would remove the following items:
  a.out        docs/        src/part3.c  src/part3.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing docs/
Removing src/part3.c
Removing src/part3.h
ok 15 - git clean -id (select - range)

expecting success of 7301.16 'git clean -id (select - range 2)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "4- 1" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test -f src/part3.c &&
	test ! -f src/part3.h &&
	test ! -f src/part4.c &&
	test ! -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>   * 1: a.out          2: docs/          3: src/part3.c  * 4: src/part3.h
  * 5: src/part4.c  * 6: src/part4.h
Select items to delete>> Would remove the following items:
  a.out        src/part3.h  src/part4.c  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing src/part3.h
Removing src/part4.c
Removing src/part4.h
ok 16 - git clean -id (select - range 2)

expecting success of 7301.17 'git clean -id (inverse select)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines s "*" "-5- 1 -2" "" c |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test ! -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: a.out          2: docs/          3: src/part3.c    4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>>   * 1: a.out        * 2: docs/        * 3: src/part3.c  * 4: src/part3.h
  * 5: src/part4.c  * 6: src/part4.h
Select items to delete>>   * 1: a.out          2: docs/        * 3: src/part3.c  * 4: src/part3.h
    5: src/part4.c    6: src/part4.h
Select items to delete>> Would remove the following items:
  a.out        src/part3.c  src/part3.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing a.out
Removing src/part3.c
Removing src/part3.h
ok 17 - git clean -id (inverse select)

expecting success of 7301.18 'git clean -id (ask)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines a Y y no yes bad "" |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f docs/manual.txt &&
	test -f src/part3.c &&
	test ! -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Remove a.out [y/N]? Remove docs/ [y/N]? Remove src/part3.c [y/N]? Remove src/part3.h [y/N]? Remove src/part4.c [y/N]? Remove src/part4.h [y/N]? Removing a.out
Removing docs/
Removing src/part3.h
ok 18 - git clean -id (ask)

expecting success of 7301.19 'git clean -id (ask - Ctrl+D)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	test_write_lines a Y no yes "\04" |
	git clean -id &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  a.out        src/part3.c  src/part4.c
  docs/        src/part3.h  src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Remove a.out [y/N]? Remove docs/ [y/N]? Remove src/part3.c [y/N]? Remove src/part3.h [y/N]? Remove src/part4.c [y/N]? 
Removing a.out
Removing src/part3.c
ok 19 - git clean -id (ask - Ctrl+D)

expecting success of 7301.20 'git clean -id with prefix and path (filter)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	(cd build/ &&
	 test_write_lines f docs "*.h" "" c |
	 git clean -id ..) &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test -f src/part3.h &&
	test ! -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  ../a.out        ../src/part3.c  ../src/part4.c
  ../docs/        ../src/part3.h  ../src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>   ../a.out        ../src/part3.c  ../src/part4.c
  ../docs/        ../src/part3.h  ../src/part4.h
Input ignore patterns>>   ../a.out        ../src/part3.h  ../src/part4.h
  ../src/part3.c  ../src/part4.c
Input ignore patterns>>   ../a.out        ../src/part3.c  ../src/part4.c
Input ignore patterns>> Would remove the following items:
  ../a.out        ../src/part3.c  ../src/part4.c
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing ../a.out
Removing ../src/part3.c
Removing ../src/part4.c
ok 20 - git clean -id with prefix and path (filter)

expecting success of 7301.21 'git clean -id with prefix and path (select by name)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	(cd build/ &&
	 test_write_lines s ../docs/ ../src/part3.c ../src/part4.c "" c |
	 git clean -id ..) &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f docs/manual.txt &&
	test ! -f src/part3.c &&
	test -f src/part3.h &&
	test ! -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  ../a.out        ../src/part3.c  ../src/part4.c
  ../docs/        ../src/part3.h  ../src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>     1: ../a.out          2: ../docs/          3: ../src/part3.c
    4: ../src/part3.h    5: ../src/part4.c    6: ../src/part4.h
Select items to delete>>     1: ../a.out        * 2: ../docs/          3: ../src/part3.c
    4: ../src/part3.h    5: ../src/part4.c    6: ../src/part4.h
Select items to delete>>     1: ../a.out        * 2: ../docs/        * 3: ../src/part3.c
    4: ../src/part3.h    5: ../src/part4.c    6: ../src/part4.h
Select items to delete>>     1: ../a.out        * 2: ../docs/        * 3: ../src/part3.c
    4: ../src/part3.h  * 5: ../src/part4.c    6: ../src/part4.h
Select items to delete>> Would remove the following items:
  ../docs/        ../src/part3.c  ../src/part4.c
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Removing ../docs/
Removing ../src/part3.c
Removing ../src/part4.c
ok 21 - git clean -id with prefix and path (select by name)

expecting success of 7301.22 'git clean -id with prefix and path (ask)': 

	mkdir -p build docs &&
	touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
	docs/manual.txt obj.o build/lib.so &&
	(cd build/ &&
	 test_write_lines a Y y no yes bad "" |
	 git clean -id ..) &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f docs/manual.txt &&
	test -f src/part3.c &&
	test ! -f src/part3.h &&
	test -f src/part4.c &&
	test -f src/part4.h &&
	test -f obj.o &&
	test -f build/lib.so


Would remove the following items:
  ../a.out        ../src/part3.c  ../src/part4.c
  ../docs/        ../src/part3.h  ../src/part4.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> Remove ../a.out [y/N]? Remove ../docs/ [y/N]? Remove ../src/part3.c [y/N]? Remove ../src/part3.h [y/N]? Remove ../src/part4.c [y/N]? Remove ../src/part4.h [y/N]? Removing ../a.out
Removing ../docs/
Removing ../src/part3.h
ok 22 - git clean -id with prefix and path (ask)

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 7301.23 'git clean -i paints the header in HEADER color': 
	>a.out &&
	echo q |
	test_terminal git clean -i |
	test_decode_color |
	head -n 1 >header &&
	# not i18ngrep
	grep "^<BOLD>" header

<BOLD>Would remove the following items:
ok 23 - git clean -i paints the header in HEADER color

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7300-clean.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/.git/
expecting success of 7300.1 'setup': 

	mkdir -p src &&
	touch src/part1.c Makefile &&
	echo build >.gitignore &&
	echo \*.o >>.gitignore &&
	git add . &&
	git commit -m setup &&
	touch src/part2.c README &&
	git add .


[master (root-commit) c1a48e2] setup
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Makefile
 create mode 100644 src/part1.c
ok 1 - setup

expecting success of 7300.2 'git clean with skip-worktree .gitignore': 
	git update-index --skip-worktree .gitignore &&
	rm .gitignore &&
	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so &&
	git update-index --no-skip-worktree .gitignore &&
	git checkout .gitignore

Removing a.out
Removing src/part3.c
Updated 1 path from the index
ok 2 - git clean with skip-worktree .gitignore

expecting success of 7300.3 'git clean': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing a.out
Removing src/part3.c
ok 3 - git clean

expecting success of 7300.4 'git clean src/': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean src/ &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing src/part3.c
ok 4 - git clean src/

expecting success of 7300.5 'git clean src/ src/': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean src/ src/ &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing src/part3.c
ok 5 - git clean src/ src/

expecting success of 7300.6 'git clean with prefix': 

	mkdir -p build docs src/test &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c &&
	(cd src/ && git clean) &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f src/part3.c &&
	test -f src/test/1.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing part3.c
ok 6 - git clean with prefix

expecting success of 7300.7 'git clean with relative prefix': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	would_clean=$(
		cd docs &&
		git clean -n ../src |
		grep part3 |
		sed -n -e "s|^Would remove ||p"
	) &&
	verbose test "$would_clean" = ../src/part3.c

ok 7 - git clean with relative prefix

expecting success of 7300.8 'git clean with absolute path': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	would_clean=$(
		cd docs &&
		git clean -n "$(pwd)/../src" |
		grep part3 |
		sed -n -e "s|^Would remove ||p"
	) &&
	verbose test "$would_clean" = ../src/part3.c

ok 8 - git clean with absolute path

expecting success of 7300.9 'git clean with out of work tree relative path': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	(
		cd docs &&
		test_must_fail git clean -n ../..
	)

fatal: ../..: '../..' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7300-clean'
ok 9 - git clean with out of work tree relative path

expecting success of 7300.10 'git clean with out of work tree absolute path': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	dd=$(cd .. && pwd) &&
	(
		cd docs &&
		test_must_fail git clean -n $dd
	)

fatal: /<<PKGBUILDDIR>>/t: '/<<PKGBUILDDIR>>/t' is outside repository at '/<<PKGBUILDDIR>>/t/trash directory.t7300-clean'
ok 10 - git clean with out of work tree absolute path

expecting success of 7300.11 'git clean -d with prefix and path': 

	mkdir -p build docs src/feature &&
	touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&
	(cd src/ && git clean -d feature/) &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f src/part3.c &&
	test ! -f src/feature/file.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing feature/
ok 11 - git clean -d with prefix and path

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7300.12 'git clean symbolic link': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	ln -s docs/manual.txt src/part4.c &&
	git clean &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test ! -f src/part4.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing a.out
Removing src/part3.c
Removing src/part4.c
ok 12 - git clean symbolic link

expecting success of 7300.13 'git clean with wildcard': 

	touch a.clean b.clean other.c &&
	git clean "*.clean" &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.clean &&
	test ! -f b.clean &&
	test -f other.c


Removing a.clean
Removing b.clean
ok 13 - git clean with wildcard

expecting success of 7300.14 'git clean -n': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -n &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Would remove a.out
Would remove other.c
Would remove src/part3.c
ok 14 - git clean -n

expecting success of 7300.15 'git clean -d': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -d &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test ! -d docs &&
	test -f obj.o &&
	test -f build/lib.so


Removing a.out
Removing docs/
Removing other.c
Removing src/part3.c
Removing src/test/
ok 15 - git clean -d

expecting success of 7300.16 'git clean -d src/ examples/': 

	mkdir -p build docs examples &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
	git clean -d src/ examples/ &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f src/part3.c &&
	test ! -f examples/1.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing examples/
Removing src/part3.c
ok 16 - git clean -d src/ examples/

expecting success of 7300.17 'git clean -x': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -x &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test ! -f obj.o &&
	test -f build/lib.so


Removing a.out
Removing obj.o
Removing src/part3.c
ok 17 - git clean -x

expecting success of 7300.18 'git clean -d -x': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -d -x &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test ! -d docs &&
	test ! -f obj.o &&
	test ! -d build


Removing a.out
Removing build/
Removing docs/
Removing obj.o
Removing src/part3.c
ok 18 - git clean -d -x

expecting success of 7300.19 'git clean -d -x with ignored tracked directory': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -d -x -e src &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test -f src/part3.c &&
	test ! -d docs &&
	test ! -f obj.o &&
	test ! -d build


Removing a.out
Removing build/
Removing docs/
Removing obj.o
ok 19 - git clean -d -x with ignored tracked directory

expecting success of 7300.20 'git clean -X': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -X &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f src/part3.c &&
	test -f docs/manual.txt &&
	test ! -f obj.o &&
	test -f build/lib.so


Removing obj.o
ok 20 - git clean -X

expecting success of 7300.21 'git clean -d -X': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -d -X &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f src/part3.c &&
	test -f docs/manual.txt &&
	test ! -f obj.o &&
	test ! -d build


Removing build/
Removing obj.o
ok 21 - git clean -d -X

expecting success of 7300.22 'git clean -d -X with ignored tracked directory': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -d -X -e src &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test ! -f obj.o &&
	test ! -d build


Removing build/
Removing obj.o
Removing src/part3.c
ok 22 - git clean -d -X with ignored tracked directory

expecting success of 7300.23 'clean.requireForce defaults to true': 

	git config --unset clean.requireForce &&
	test_must_fail git clean


fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
ok 23 - clean.requireForce defaults to true

expecting success of 7300.24 'clean.requireForce': 

	git config clean.requireForce true &&
	test_must_fail git clean


fatal: clean.requireForce set to true and neither -i, -n, nor -f given; refusing to clean
ok 24 - clean.requireForce

expecting success of 7300.25 'clean.requireForce and -n': 

	mkdir -p build docs &&
	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
	git clean -n &&
	test -f Makefile &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test -f a.out &&
	test -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Would remove a.out
Would remove src/part3.c
ok 25 - clean.requireForce and -n

expecting success of 7300.26 'clean.requireForce and -f': 

	git clean -f &&
	test -f README &&
	test -f src/part1.c &&
	test -f src/part2.c &&
	test ! -f a.out &&
	test ! -f src/part3.c &&
	test -f docs/manual.txt &&
	test -f obj.o &&
	test -f build/lib.so


Removing a.out
Removing src/part3.c
ok 26 - clean.requireForce and -f

expecting success of 7300.27 'core.excludesfile': 

	echo excludes >excludes &&
	echo included >included &&
	git config core.excludesfile excludes &&
	output=$(git clean -n excludes included 2>&1) &&
	expr "$output" : ".*included" >/dev/null &&
	! expr "$output" : ".*excludes" >/dev/null


ok 27 - core.excludesfile

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 7300.28 'removal failure': 

	mkdir foo &&
	touch foo/bar &&
	test_when_finished "chmod 755 foo" &&
	(exec <foo/bar &&
	 chmod 0 foo &&
	 test_must_fail git clean -f -d)

warning: could not open directory 'foo/': Permission denied
warning: failed to remove foo/: Directory not empty
Removing docs/
Removing included
ok 28 - removal failure

expecting success of 7300.29 'nested git work tree': 
	rm -fr foo bar baz &&
	mkdir -p foo bar baz/boo &&
	(
		cd foo &&
		git init &&
		test_commit nested hello.world
	) &&
	(
		cd bar &&
		>goodbye.people
	) &&
	(
		cd baz/boo &&
		git init &&
		test_commit deeply.nested deeper.world
	) &&
	git clean -f -d &&
	test -f foo/.git/index &&
	test -f foo/hello.world &&
	test -f baz/boo/.git/index &&
	test -f baz/boo/deeper.world &&
	! test -d bar

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/foo/.git/
[master (root-commit) abd8674] nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.world
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/baz/boo/.git/
[master (root-commit) 3f7f1fc] deeply.nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 deeper.world
Removing bar/
Skipping repository baz/boo
ok 29 - nested git work tree

expecting success of 7300.30 'should clean things that almost look like git but are not': 
	rm -fr almost_git almost_bare_git almost_submodule &&
	mkdir -p almost_git/.git/objects &&
	mkdir -p almost_git/.git/refs &&
	cat >almost_git/.git/HEAD <<-\EOF &&
	garbage
	EOF
	cp -r almost_git/.git/ almost_bare_git &&
	mkdir almost_submodule/ &&
	cat >almost_submodule/.git <<-\EOF &&
	garbage
	EOF
	test_when_finished "rm -rf almost_*" &&
	git clean -f -d &&
	test_path_is_missing almost_git &&
	test_path_is_missing almost_bare_git &&
	test_path_is_missing almost_submodule

Removing almost_bare_git/
Removing almost_git/
Removing almost_submodule/
Skipping repository baz/boo
ok 30 - should clean things that almost look like git but are not

expecting success of 7300.31 'should not clean submodules': 
	rm -fr repo to_clean sub1 sub2 &&
	mkdir repo to_clean &&
	(
		cd repo &&
		git init &&
		test_commit msg hello.world
	) &&
	test_config_global protocol.file.allow always &&
	git submodule add ./repo/.git sub1 &&
	git commit -m "sub1" &&
	git branch before_sub2 &&
	git submodule add ./repo/.git sub2 &&
	git commit -m "sub2" &&
	git checkout before_sub2 &&
	>to_clean/should_clean.this &&
	git clean -f -d &&
	test_path_is_file repo/.git/index &&
	test_path_is_file repo/hello.world &&
	test_path_is_file sub1/.git &&
	test_path_is_file sub1/hello.world &&
	test_path_is_file sub2/.git &&
	test_path_is_file sub2/hello.world &&
	test_path_is_missing to_clean

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/repo/.git/
[master (root-commit) 1af9d3b] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.world
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7300-clean/sub1'...
done.
[master a5d0902] sub1
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 README
 create mode 100644 src/part2.c
 create mode 160000 sub1
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7300-clean/sub2'...
done.
[master 8525980] sub2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub2
warning: unable to rmdir 'sub2': Directory not empty
Switched to branch 'before_sub2'
Removing .gitconfig
Skipping repository baz/boo
Removing to_clean/
ok 31 - should not clean submodules

expecting success of 7300.32 'should avoid cleaning possible submodules': 
	rm -fr to_clean possible_sub1 &&
	mkdir to_clean possible_sub1 &&
	test_when_finished "rm -rf possible_sub*" &&
	echo "gitdir: foo" >possible_sub1/.git &&
	>possible_sub1/hello.world &&
	chmod 0 possible_sub1/.git &&
	>to_clean/should_clean.this &&
	git clean -f -d &&
	test_path_is_file possible_sub1/.git &&
	test_path_is_file possible_sub1/hello.world &&
	test_path_is_missing to_clean

Skipping repository baz/boo
Removing to_clean/
ok 32 - should avoid cleaning possible submodules

expecting success of 7300.33 'nested (empty) git should be kept': 
	rm -fr empty_repo to_clean &&
	git init empty_repo &&
	mkdir to_clean &&
	>to_clean/should_clean.this &&
	git clean -f -d &&
	test_path_is_file empty_repo/.git/HEAD &&
	test_path_is_missing to_clean

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/empty_repo/.git/
Skipping repository baz/boo
Removing to_clean/
ok 33 - nested (empty) git should be kept

expecting success of 7300.34 'nested bare repositories should be cleaned': 
	rm -fr bare1 bare2 subdir &&
	git init --bare bare1 &&
	git clone --local --bare . bare2 &&
	mkdir subdir &&
	cp -r bare2 subdir/bare3 &&
	git clean -f -d &&
	test_path_is_missing bare1 &&
	test_path_is_missing bare2 &&
	test_path_is_missing subdir

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/bare1/
Cloning into bare repository 'bare2'...
done.
Removing bare1/
Removing bare2/
Skipping repository baz/boo
Removing subdir/
ok 34 - nested bare repositories should be cleaned

checking known breakage of 7300.35 'nested (empty) bare repositories should be cleaned even when in .git': 
	rm -fr strange_bare &&
	mkdir strange_bare &&
	git init --bare strange_bare/.git &&
	git clean -f -d &&
	test_path_is_missing strange_bare

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/strange_bare/.git/
Skipping repository baz/boo
Path exists:
drwxr-xr-x 1 buildd buildd 8 Dec 28 08:01 strange_bare
not ok 35 - nested (empty) bare repositories should be cleaned even when in .git # TODO known breakage

checking known breakage of 7300.36 'nested (non-empty) bare repositories should be cleaned even when in .git': 
	rm -fr strange_bare &&
	mkdir strange_bare &&
	git clone --local --bare . strange_bare/.git &&
	git clean -f -d &&
	test_path_is_missing strange_bare

Cloning into bare repository 'strange_bare/.git'...
done.
Skipping repository baz/boo
Path exists:
drwxr-xr-x 1 buildd buildd 8 Dec 28 08:01 strange_bare
not ok 36 - nested (non-empty) bare repositories should be cleaned even when in .git # TODO known breakage

expecting success of 7300.37 'giving path in nested git work tree will NOT remove it': 
	rm -fr repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&
		mkdir -p bar/baz &&
		test_commit msg bar/baz/hello.world
	) &&
	git clean -f -d repo/bar/baz &&
	test_path_is_file repo/.git/HEAD &&
	test_path_is_dir repo/bar/ &&
	test_path_is_file repo/bar/baz/hello.world

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/repo/.git/
[master (root-commit) 14dba50] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar/baz/hello.world
ok 37 - giving path in nested git work tree will NOT remove it

expecting success of 7300.38 'giving path to nested .git will not remove it': 
	rm -fr repo &&
	mkdir repo untracked &&
	(
		cd repo &&
		git init &&
		test_commit msg hello.world
	) &&
	git clean -f -d repo/.git &&
	test_path_is_file repo/.git/HEAD &&
	test_path_is_dir repo/.git/refs &&
	test_path_is_dir repo/.git/objects &&
	test_path_is_dir untracked/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/repo/.git/
[master (root-commit) 1af9d3b] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.world
ok 38 - giving path to nested .git will not remove it

expecting success of 7300.39 'giving path to nested .git/ will NOT remove contents': 
	rm -fr repo untracked &&
	mkdir repo untracked &&
	(
		cd repo &&
		git init &&
		test_commit msg hello.world
	) &&
	git clean -f -d repo/.git/ &&
	test_path_is_dir repo/.git &&
	test_path_is_file repo/.git/HEAD &&
	test_path_is_dir untracked/

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/repo/.git/
[master (root-commit) 1af9d3b] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.world
ok 39 - giving path to nested .git/ will NOT remove contents

expecting success of 7300.40 'force removal of nested git work tree': 
	rm -fr foo bar baz &&
	mkdir -p foo bar baz/boo &&
	(
		cd foo &&
		git init &&
		test_commit nested hello.world
	) &&
	(
		cd bar &&
		>goodbye.people
	) &&
	(
		cd baz/boo &&
		git init &&
		test_commit deeply.nested deeper.world
	) &&
	git clean -f -f -d &&
	! test -d foo &&
	! test -d bar &&
	! test -d baz

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/foo/.git/
[master (root-commit) abd8674] nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 hello.world
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/baz/boo/.git/
[master (root-commit) 3f7f1fc] deeply.nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 deeper.world
Removing bar/
Removing baz/
Removing empty_repo/
Removing foo/
Removing repo/
Removing strange_bare/
Removing sub2/
Removing untracked/
ok 40 - force removal of nested git work tree

expecting success of 7300.41 'git clean -e': 
	rm -fr repo &&
	mkdir repo &&
	(
		cd repo &&
		git init &&
		touch known 1 2 3 &&
		git add known &&
		git clean -f -e 1 -e 2 &&
		test -e 1 &&
		test -e 2 &&
		! (test -e 3) &&
		test -e known
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/repo/.git/
Removing 3
ok 41 - git clean -e

expecting success of 7300.42 'git clean -d with an unreadable empty directory': 
	mkdir foo &&
	chmod a= foo &&
	git clean -dfx foo &&
	! test -d foo

warning: could not open directory 'foo/': Permission denied
Removing foo/
ok 42 - git clean -d with an unreadable empty directory

expecting success of 7300.43 'git clean -d respects pathspecs (dir is prefix of pathspec)': 
	mkdir -p foo &&
	mkdir -p foobar &&
	git clean -df foobar &&
	test_path_is_dir foo &&
	test_path_is_missing foobar

Removing foobar/
ok 43 - git clean -d respects pathspecs (dir is prefix of pathspec)

expecting success of 7300.44 'git clean -d respects pathspecs (pathspec is prefix of dir)': 
	mkdir -p foo &&
	mkdir -p foobar &&
	git clean -df foo &&
	test_path_is_missing foo &&
	test_path_is_dir foobar

Removing foo/
ok 44 - git clean -d respects pathspecs (pathspec is prefix of dir)

expecting success of 7300.45 'git clean -d skips untracked dirs containing ignored files': 
	echo /foo/bar >.gitignore &&
	echo ignoreme >>.gitignore &&
	rm -rf foo &&
	mkdir -p foo/a/aa/aaa foo/b/bb/bbb &&
	touch foo/bar foo/baz foo/a/aa/ignoreme foo/b/ignoreme foo/b/bb/1 foo/b/bb/2 &&
	git clean -df &&
	test_path_is_dir foo &&
	test_path_is_file foo/bar &&
	test_path_is_missing foo/baz &&
	test_path_is_file foo/a/aa/ignoreme &&
	test_path_is_missing foo/a/aa/aaa &&
	test_path_is_file foo/b/ignoreme &&
	test_path_is_missing foo/b/bb

Removing build/
Removing foo/a/aa/aaa/
Removing foo/b/bb/
Removing foo/baz
Removing foobar/
Removing obj.o
ok 45 - git clean -d skips untracked dirs containing ignored files

expecting success of 7300.46 'git clean -d skips nested repo containing ignored files': 
	test_when_finished "rm -rf nested-repo-with-ignored-file" &&

	git init nested-repo-with-ignored-file &&
	(
		cd nested-repo-with-ignored-file &&
		>file &&
		git add file &&
		git commit -m Initial &&

		# This file is ignored by a .gitignore rule in the outer repo
		# added in the previous test.
		>ignoreme
	) &&

	git clean -fd &&

	test_path_is_file nested-repo-with-ignored-file/.git/index &&
	test_path_is_file nested-repo-with-ignored-file/ignoreme &&
	test_path_is_file nested-repo-with-ignored-file/file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/nested-repo-with-ignored-file/.git/
[master (root-commit) 4208a61] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 46 - git clean -d skips nested repo containing ignored files

expecting success of 7300.47 'git clean handles being told what to clean': 
	mkdir -p d1 d2 &&
	touch d1/ut d2/ut &&
	git clean -f */ut &&
	test_path_is_missing d1/ut &&
	test_path_is_missing d2/ut

Removing d1/ut
Removing d2/ut
ok 47 - git clean handles being told what to clean

expecting success of 7300.48 'git clean handles being told what to clean, with -d': 
	mkdir -p d1 d2 &&
	touch d1/ut d2/ut &&
	git clean -ffd */ut &&
	test_path_is_missing d1/ut &&
	test_path_is_missing d2/ut

Removing d1/ut
Removing d2/ut
ok 48 - git clean handles being told what to clean, with -d

expecting success of 7300.49 'git clean works if a glob is passed without -d': 
	mkdir -p d1 d2 &&
	touch d1/ut d2/ut &&
	git clean -f "*ut" &&
	test_path_is_missing d1/ut &&
	test_path_is_missing d2/ut

Removing d1/ut
Removing d2/ut
ok 49 - git clean works if a glob is passed without -d

expecting success of 7300.50 'git clean works if a glob is passed with -d': 
	mkdir -p d1 d2 &&
	touch d1/ut d2/ut &&
	git clean -ffd "*ut" &&
	test_path_is_missing d1/ut &&
	test_path_is_missing d2/ut

Removing d1/ut
Removing d2/ut
ok 50 - git clean works if a glob is passed with -d

ok 51 # skip handle clean & core.longpaths = false nicely (missing MINGW)

expecting success of 7300.52 'clean untracked paths by pathspec': 
	git init untracked &&
	mkdir untracked/dir &&
	echo >untracked/dir/file.txt &&
	git -C untracked clean -f dir/file.txt &&
	ls untracked/dir >actual &&
	test_must_be_empty actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/untracked/.git/
Removing dir/file.txt
ok 52 - clean untracked paths by pathspec

expecting success of 7300.53 'avoid traversing into ignored directories': 
	test_when_finished rm -f output error trace.* &&
	test_create_repo avoid-traversing-deep-hierarchy &&
	(
		cd avoid-traversing-deep-hierarchy &&

		mkdir -p untracked/subdir/with/a &&
		>untracked/subdir/with/a/random-file.txt &&

		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
		git clean -ffdxn -e untracked
	) &&

	# Make sure we only visited into the top-level directory, and did
	# not traverse into the "untracked" subdirectory since it was excluded
	grep data.*read_directo.*directories-visited trace.output |
		cut -d "|" -f 9 >trace.relevant &&
	cat >trace.expect <<-EOF &&
	 ..directories-visited:1
	EOF
	test_cmp trace.expect trace.relevant

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/avoid-traversing-deep-hierarchy/.git/
ok 53 - avoid traversing into ignored directories

expecting success of 7300.54 'traverse into directories that may have ignored entries': 
	test_when_finished rm -f output &&
	test_create_repo need-to-traverse-into-hierarchy &&
	(
		cd need-to-traverse-into-hierarchy &&
		mkdir -p modules/foobar/src/generated &&
		> modules/foobar/src/generated/code.c &&
		> modules/foobar/Makefile &&
		echo "/modules/**/src/generated/" >.gitignore &&

		git clean -fX modules/foobar >../output &&

		grep Removing ../output &&

		test_path_is_missing modules/foobar/src/generated/code.c &&
		test_path_is_file modules/foobar/Makefile
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7300-clean/need-to-traverse-into-hierarchy/.git/
Removing modules/foobar/src/
ok 54 - traverse into directories that may have ignored entries

# still have 2 known breakage(s)
# passed all remaining 52 test(s)
1..54
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7201-co.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7201-co/.git/
expecting success of 7201.1 'setup': 
	fill x y z >same &&
	fill 1 2 3 4 5 6 7 8 >one &&
	fill a b c d e >two &&
	git add same one two &&
	git commit -m "Initial A one, A two" &&

	git checkout -b renamer &&
	rm -f one &&
	fill 1 3 4 5 6 7 8 >uno &&
	git add uno &&
	fill a b c d e f >two &&
	git commit -a -m "Renamer R one->uno, M two" &&

	git checkout -b side main &&
	fill 1 2 3 4 5 6 7 >one &&
	fill A B C D E >three &&
	rm -f two &&
	git update-index --add --remove one two three &&
	git commit -m "Side M one, D two, A three" &&

	git checkout -b simple main &&
	rm -f one &&
	fill a c e >two &&
	git commit -a -m "Simple D one, M two" &&

	git checkout main

[main (root-commit) 7329388] Initial A one, A two
 Author: A U Thor <author@example.com>
 3 files changed, 16 insertions(+)
 create mode 100644 one
 create mode 100644 same
 create mode 100644 two
Switched to a new branch 'renamer'
[renamer 0420b41] Renamer R one->uno, M two
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename one => uno (87%)
Switched to a new branch 'side'
[side ab76817] Side M one, D two, A three
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+), 6 deletions(-)
 create mode 100644 three
 delete mode 100644 two
Switched to a new branch 'simple'
[simple 022ff9d] Simple D one, M two
 Author: A U Thor <author@example.com>
 2 files changed, 10 deletions(-)
 delete mode 100644 one
Switched to branch 'main'
ok 1 - setup

expecting success of 7201.2 'checkout from non-existing branch': 
	git checkout -b delete-me main &&
	git update-ref -d --no-deref refs/heads/delete-me &&
	test refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&
	git checkout main &&
	test refs/heads/main = "$(git symbolic-ref HEAD)"

Switched to a new branch 'delete-me'
Switched to branch 'main'
ok 2 - checkout from non-existing branch

expecting success of 7201.3 'checkout with dirty tree without -m': 
	fill 0 1 2 3 4 5 6 7 8 >one &&
	if git checkout side
	then
		echo Not happy
		false
	else
		echo "happy - failed correctly"
	fi

error: Your local changes to the following files would be overwritten by checkout:
	one
Please commit your changes or stash them before you switch branches.
Aborting
happy - failed correctly
ok 3 - checkout with dirty tree without -m

expecting success of 7201.4 'checkout with unrelated dirty tree without -m': 
	git checkout -f main &&
	fill 0 1 2 3 4 5 6 7 8 >same &&
	cp same kept &&
	git checkout side >messages &&
	test_cmp same kept &&
	printf "M\t%s\n" same >messages.expect &&
	test_cmp messages.expect messages

Already on 'main'
Switched to branch 'side'
ok 4 - checkout with unrelated dirty tree without -m

expecting success of 7201.5 'checkout -m with dirty tree': 
	git checkout -f main &&
	git clean -f &&

	fill 0 1 2 3 4 5 6 7 8 >one &&
	git checkout -m side >messages &&

	test "$(git symbolic-ref HEAD)" = "refs/heads/side" &&

	printf "M\t%s\n" one >expect.messages &&
	test_cmp expect.messages messages &&

	fill "M	one" "A	three" "D	two" >expect.main &&
	git diff --name-status main >current.main &&
	test_cmp expect.main current.main &&

	fill "M	one" >expect.side &&
	git diff --name-status side >current.side &&
	test_cmp expect.side current.side &&

	git diff --cached >current.index &&
	test_must_be_empty current.index

Switched to branch 'main'
Removing kept
Removing messages
Removing messages.expect
Switched to branch 'side'
ok 5 - checkout -m with dirty tree

expecting success of 7201.6 'checkout -m with dirty tree, renamed': 
	git checkout -f main && git clean -f &&

	fill 1 2 3 4 5 7 8 >one &&
	if git checkout renamer
	then
		echo Not happy
		false
	else
		echo "happy - failed correctly"
	fi &&

	git checkout -m renamer &&
	fill 1 3 4 5 7 8 >expect &&
	test_cmp expect uno &&
	! test -f one &&
	git diff --cached >current &&
	test_must_be_empty current

Switched to branch 'main'
Removing current.index
Removing current.main
Removing current.side
Removing expect.main
Removing expect.messages
Removing expect.side
Removing messages
error: Your local changes to the following files would be overwritten by checkout:
	one
Please commit your changes or stash them before you switch branches.
Aborting
happy - failed correctly
Switched to branch 'renamer'
M	uno
ok 6 - checkout -m with dirty tree, renamed

expecting success of 7201.7 'checkout -m with merge conflict': 
	git checkout -f main && git clean -f &&

	fill 1 T 3 4 5 6 S 8 >one &&
	if git checkout renamer
	then
		echo Not happy
		false
	else
		echo "happy - failed correctly"
	fi &&

	git checkout -m renamer &&

	git diff main:one :3:uno |
	sed -e "1,/^@@/d" -e "/^ /d" -e "s/^-/d/" -e "s/^+/a/" >current &&
	fill d2 aT d7 aS >expect &&
	test_cmp expect current &&
	git diff --cached two >current &&
	test_must_be_empty current

Switched to branch 'main'
Removing current
Removing expect
error: Your local changes to the following files would be overwritten by checkout:
	one
Please commit your changes or stash them before you switch branches.
Aborting
happy - failed correctly
Switched to branch 'renamer'
M	uno
ok 7 - checkout -m with merge conflict

expecting success of 7201.8 'format of merge conflict from checkout -m': 
	git checkout -f main &&
	git clean -f &&

	fill b d >two &&
	git checkout -m simple &&

	git ls-files >current &&
	fill same two two two >expect &&
	test_cmp expect current &&

	cat <<-EOF >expect &&
	<<<<<<< simple
	a
	c
	e
	=======
	b
	d
	>>>>>>> local
	EOF
	test_cmp expect two

Switched to branch 'main'
Removing current
Removing expect
Switched to branch 'simple'
M	two
ok 8 - format of merge conflict from checkout -m

expecting success of 7201.9 'checkout --merge --conflict=diff3 <branch>': 
	git checkout -f main &&
	git reset --hard &&
	git clean -f &&

	fill b d >two &&
	git checkout --merge --conflict=diff3 simple &&

	cat <<-EOF >expect &&
	<<<<<<< simple
	a
	c
	e
	||||||| main
	a
	b
	c
	d
	e
	=======
	b
	d
	>>>>>>> local
	EOF
	test_cmp expect two

Switched to branch 'main'
HEAD is now at 7329388 Initial A one, A two
Removing current
Removing expect
Switched to branch 'simple'
M	two
ok 9 - checkout --merge --conflict=diff3 <branch>

expecting success of 7201.10 'switch to another branch while carrying a deletion': 
	git checkout -f main &&
	git reset --hard &&
	git clean -f &&
	git rm two &&

	test_must_fail git checkout simple 2>errs &&
	test_i18ngrep overwritten errs &&

	test_must_fail git read-tree --quiet -m -u HEAD simple 2>errs &&
	test_must_be_empty errs

Switched to branch 'main'
HEAD is now at 7329388 Initial A one, A two
Removing expect
rm 'two'
error: Your local changes to the following files would be overwritten by checkout:
ok 10 - switch to another branch while carrying a deletion

expecting success of 7201.11 'checkout to detach HEAD (with advice declined)': 
	git config advice.detachedHead false &&
	rev=$(git rev-parse --short renamer^) &&
	git checkout -f renamer &&
	git clean -f &&
	git checkout renamer^ 2>messages &&
	test_i18ngrep "HEAD is now at $rev" messages &&
	test_line_count = 1 messages &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	if git symbolic-ref HEAD >/dev/null 2>&1
	then
		echo "OOPS, HEAD is still symbolic???"
		false
	else
		: happy
	fi

Switched to branch 'renamer'
Removing errs
HEAD is now at 7329388 Initial A one, A two
ok 11 - checkout to detach HEAD (with advice declined)

expecting success of 7201.12 'checkout to detach HEAD': 
	git config advice.detachedHead true &&
	rev=$(git rev-parse --short renamer^) &&
	git checkout -f renamer &&
	git clean -f &&
	git checkout renamer^ 2>messages &&
	grep "HEAD is now at $rev" messages &&
	test_line_count -gt 1 messages &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	if git symbolic-ref HEAD >/dev/null 2>&1
	then
		echo "OOPS, HEAD is still symbolic???"
		false
	else
		: happy
	fi

Previous HEAD position was 7329388 Initial A one, A two
Switched to branch 'renamer'
Removing messages
HEAD is now at 7329388 Initial A one, A two
ok 12 - checkout to detach HEAD

expecting success of 7201.13 'checkout to detach HEAD with branchname^': 
	git checkout -f main &&
	git clean -f &&
	git checkout renamer^ &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	if git symbolic-ref HEAD >/dev/null 2>&1
	then
		echo "OOPS, HEAD is still symbolic???"
		false
	else
		: happy
	fi

Switched to branch 'main'
Removing messages
Note: switching to 'renamer^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7329388 Initial A one, A two
ok 13 - checkout to detach HEAD with branchname^

expecting success of 7201.14 'checkout to detach HEAD with :/message': 
	git checkout -f main &&
	git clean -f &&
	git checkout ":/Initial" &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	if git symbolic-ref HEAD >/dev/null 2>&1
	then
		echo "OOPS, HEAD is still symbolic???"
		false
	else
		: happy
	fi

Switched to branch 'main'
Note: switching to ':/Initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7329388 Initial A one, A two
ok 14 - checkout to detach HEAD with :/message

expecting success of 7201.15 'checkout to detach HEAD with HEAD^0': 
	git checkout -f main &&
	git clean -f &&
	git checkout HEAD^0 &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	if git symbolic-ref HEAD >/dev/null 2>&1
	then
		echo "OOPS, HEAD is still symbolic???"
		false
	else
		: happy
	fi

Switched to branch 'main'
Note: switching to 'HEAD^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7329388 Initial A one, A two
ok 15 - checkout to detach HEAD with HEAD^0

expecting success of 7201.16 'checkout with ambiguous tag/branch names': 
	git tag both side &&
	git branch both main &&
	git reset --hard &&
	git checkout main &&

	git checkout both &&
	H=$(git rev-parse --verify HEAD) &&
	M=$(git show-ref -s --verify refs/heads/main) &&
	test "z$H" = "z$M" &&
	name=$(git symbolic-ref HEAD 2>/dev/null) &&
	test "z$name" = zrefs/heads/both

HEAD is now at 7329388 Initial A one, A two
Switched to branch 'main'
warning: refname 'both' is ambiguous.
Switched to branch 'both'
ok 16 - checkout with ambiguous tag/branch names

expecting success of 7201.17 'checkout with ambiguous tag/branch names': 
	git reset --hard &&
	git checkout main &&

	git tag frotz side &&
	git branch frotz main &&
	git reset --hard &&
	git checkout main &&

	git checkout tags/frotz &&
	H=$(git rev-parse --verify HEAD) &&
	S=$(git show-ref -s --verify refs/heads/side) &&
	test "z$H" = "z$S" &&
	if name=$(git symbolic-ref HEAD 2>/dev/null)
	then
		echo "Bad -- should have detached"
		false
	else
		: happy
	fi

HEAD is now at 7329388 Initial A one, A two
Switched to branch 'main'
HEAD is now at 7329388 Initial A one, A two
Already on 'main'
Note: switching to 'tags/frotz'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ab76817 Side M one, D two, A three
ok 17 - checkout with ambiguous tag/branch names

expecting success of 7201.18 'switch branches while in subdirectory': 
	git reset --hard &&
	git checkout main &&

	mkdir subs &&
	git -C subs checkout side &&
	! test -f subs/one &&
	rm -fr subs

HEAD is now at ab76817 Side M one, D two, A three
Previous HEAD position was ab76817 Side M one, D two, A three
Switched to branch 'main'
Switched to branch 'side'
ok 18 - switch branches while in subdirectory

expecting success of 7201.19 'checkout specific path while in subdirectory': 
	git reset --hard &&
	git checkout side &&
	mkdir subs &&
	>subs/bero &&
	git add subs/bero &&
	git commit -m "add subs/bero" &&

	git checkout main &&
	mkdir -p subs &&
	git -C subs checkout side -- bero &&
	test -f subs/bero

HEAD is now at ab76817 Side M one, D two, A three
Already on 'side'
[side bb04aa0] add subs/bero
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 subs/bero
Switched to branch 'main'
ok 19 - checkout specific path while in subdirectory

expecting success of 7201.20 'checkout w/--track sets up tracking': 
    git config branch.autosetupmerge false &&
    git checkout main &&
    git checkout --track -b track1 &&
    test "$(git config branch.track1.remote)" &&
    test "$(git config branch.track1.merge)"

Already on 'main'
A	subs/bero
Switched to a new branch 'track1'
A	subs/bero
branch 'track1' set up to track 'main'.
ok 20 - checkout w/--track sets up tracking

expecting success of 7201.21 'checkout w/autosetupmerge=always sets up tracking': 
    test_when_finished git config branch.autosetupmerge false &&
    git config branch.autosetupmerge always &&
    git checkout main &&
    git checkout -b track2 &&
    test "$(git config branch.track2.remote)" &&
    test "$(git config branch.track2.merge)"

Switched to branch 'main'
A	subs/bero
Switched to a new branch 'track2'
branch 'track2' set up to track 'main'.
ok 21 - checkout w/autosetupmerge=always sets up tracking

expecting success of 7201.22 'checkout w/--track from non-branch HEAD fails': 
    git checkout main^0 &&
    test_must_fail git symbolic-ref HEAD &&
    test_must_fail git checkout --track -b track &&
    test_must_fail git rev-parse --verify track &&
    test_must_fail git symbolic-ref HEAD &&
    test "z$(git rev-parse main^0)" = "z$(git rev-parse HEAD)"

Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7329388 Initial A one, A two
A	subs/bero
fatal: ref HEAD is not a symbolic ref
fatal: cannot set up tracking information; starting point 'HEAD' is not a branch
A	subs/bero
fatal: Needed a single revision
fatal: ref HEAD is not a symbolic ref
ok 22 - checkout w/--track from non-branch HEAD fails

expecting success of 7201.23 'checkout w/--track from tag fails': 
    git checkout main^0 &&
    test_must_fail git symbolic-ref HEAD &&
    test_must_fail git checkout --track -b track frotz &&
    test_must_fail git rev-parse --verify track &&
    test_must_fail git symbolic-ref HEAD &&
    test "z$(git rev-parse main^0)" = "z$(git rev-parse HEAD)"

HEAD is now at 7329388 Initial A one, A two
A	subs/bero
fatal: ref HEAD is not a symbolic ref
warning: refname 'frotz' is ambiguous.
warning: refname 'frotz' is ambiguous.
fatal: ambiguous object name: 'frotz'
A	subs/bero
fatal: Needed a single revision
fatal: ref HEAD is not a symbolic ref
ok 23 - checkout w/--track from tag fails

expecting success of 7201.24 'detach a symbolic link HEAD': 
    git checkout main &&
    git config --bool core.prefersymlinkrefs yes &&
    git checkout side &&
    git checkout main &&
    it=$(git symbolic-ref HEAD) &&
    test "z$it" = zrefs/heads/main &&
    here=$(git rev-parse --verify refs/heads/main) &&
    git checkout side^ &&
    test "z$(git rev-parse --verify refs/heads/main)" = "z$here"

Switched to branch 'main'
A	subs/bero
Switched to branch 'side'
Switched to branch 'main'
Note: switching to 'side^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ab76817 Side M one, D two, A three
ok 24 - detach a symbolic link HEAD

expecting success of 7201.25 'checkout with --track fakes a sensible -b <name>': 
    git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" &&
    git update-ref refs/remotes/origin/koala/bear renamer &&

    git checkout --track origin/koala/bear &&
    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&

    git checkout main && git branch -D koala/bear &&

    git checkout --track refs/remotes/origin/koala/bear &&
    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&

    git checkout main && git branch -D koala/bear &&

    git checkout --track remotes/origin/koala/bear &&
    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)"

Previous HEAD position was ab76817 Side M one, D two, A three
Switched to a new branch 'koala/bear'
branch 'koala/bear' set up to track 'origin/koala/bear'.
Switched to branch 'main'
Deleted branch koala/bear (was 0420b41).
Switched to a new branch 'koala/bear'
branch 'koala/bear' set up to track 'origin/koala/bear'.
Switched to branch 'main'
Deleted branch koala/bear (was 0420b41).
Switched to a new branch 'koala/bear'
branch 'koala/bear' set up to track 'origin/koala/bear'.
ok 25 - checkout with --track fakes a sensible -b <name>

expecting success of 7201.26 'checkout with --track, but without -b, fails with too short tracked name': 
    test_must_fail git checkout --track renamer

fatal: missing branch name; try -b
ok 26 - checkout with --track, but without -b, fails with too short tracked name

expecting success of 7201.27 'checkout an unmerged path should fail': 
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	test_must_fail git checkout fild file filf &&
	test_cmp sample fild &&
	test_cmp sample filf &&
	test_cmp sample file

error: path 'file' is unmerged
ok 27 - checkout an unmerged path should fail

expecting success of 7201.28 'checkout with an unmerged path can be ignored': 
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout -f fild file filf &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp sample file

warning: path 'file' is unmerged
Updated 2 paths from the index
ok 28 - checkout with an unmerged path can be ignored

expecting success of 7201.29 'checkout unmerged stage': 
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout --ours . &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp expect file &&
	git checkout --theirs file &&
	test ztheirside = "z$(cat file)"

Updated 3 paths from the index
Updated 1 path from the index
ok 29 - checkout unmerged stage

expecting success of 7201.30 'checkout with --merge': 
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout -m -- fild file filf &&
	(
		echo "<<<<<<< ours" &&
		echo ourside &&
		echo "=======" &&
		echo theirside &&
		echo ">>>>>>> theirs"
	) >merged &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp merged file

ok 30 - checkout with --merge

expecting success of 7201.31 'checkout with --merge, in diff3 -m style': 
	git config merge.conflictstyle diff3 &&
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout -m -- fild file filf &&
	(
		echo "<<<<<<< ours" &&
		echo ourside &&
		echo "||||||| base" &&
		echo original &&
		echo "=======" &&
		echo theirside &&
		echo ">>>>>>> theirs"
	) >merged &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp merged file

ok 31 - checkout with --merge, in diff3 -m style

expecting success of 7201.32 'checkout --conflict=merge, overriding config': 
	git config merge.conflictstyle diff3 &&
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout --conflict=merge -- fild file filf &&
	(
		echo "<<<<<<< ours" &&
		echo ourside &&
		echo "=======" &&
		echo theirside &&
		echo ">>>>>>> theirs"
	) >merged &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp merged file

ok 32 - checkout --conflict=merge, overriding config

expecting success of 7201.33 'checkout --conflict=diff3': 
	test_unconfig merge.conflictstyle &&
	setup_conflicting_index &&
	echo "none of the above" >sample &&
	echo ourside >expect &&
	cat sample >fild &&
	cat sample >file &&
	cat sample >filf &&
	git checkout --conflict=diff3 -- fild file filf &&
	(
		echo "<<<<<<< ours" &&
		echo ourside &&
		echo "||||||| base" &&
		echo original &&
		echo "=======" &&
		echo theirside &&
		echo ">>>>>>> theirs"
	) >merged &&
	test_cmp expect fild &&
	test_cmp expect filf &&
	test_cmp merged file

ok 33 - checkout --conflict=diff3

expecting success of 7201.34 'failing checkout -b should not break working tree': 
	git clean -fd &&  # Remove untracked files in the way
	git reset --hard main &&
	git symbolic-ref HEAD refs/heads/main &&
	test_must_fail git checkout -b renamer side^ &&
	test $(git symbolic-ref HEAD) = refs/heads/main &&
	git diff --exit-code &&
	git diff --cached --exit-code

Removing expect
Removing merged
Removing same
Removing sample
Removing two
Removing uno
HEAD is now at 7329388 Initial A one, A two
fatal: a branch named 'renamer' already exists
ok 34 - failing checkout -b should not break working tree

expecting success of 7201.35 'switch out of non-branch': 
	git reset --hard main &&
	git checkout main^0 &&
	echo modified >one &&
	test_must_fail git checkout renamer 2>error.log &&
	! grep "^Previous HEAD" error.log

HEAD is now at 7329388 Initial A one, A two
Note: switching to 'main^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7329388 Initial A one, A two
ok 35 - switch out of non-branch

expecting success of 7201.36 'custom merge driver with checkout -m': 
	git reset --hard &&

	git config merge.filfre.driver "./filfre.sh %O %A %B" &&
	git config merge.filfre.name "Feel-free merge driver" &&
	git config merge.filfre.recursive binary &&
	echo "arm merge=filfre" >.gitattributes &&

	git checkout -b left &&
	echo neutral >arm &&
	git add arm .gitattributes &&
	test_tick &&
	git commit -m neutral &&
	git branch right &&

	echo left >arm &&
	test_tick &&
	git commit -a -m left &&
	git checkout right &&

	echo right >arm &&
	test_tick &&
	git commit -a -m right &&

	test_must_fail git merge left &&
	(
		for t in filfre-common left right
		do
			grep $t arm || exit 1
		done
	) &&

	mv arm expect &&
	git checkout -m arm &&
	test_cmp expect arm

HEAD is now at 7329388 Initial A one, A two
Switched to a new branch 'left'
[left b257dc6] neutral
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 arm
[left 2459c9d] left
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'right'
[right 6b476b9] right
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging arm
CONFLICT (content): Merge conflict in arm
Automatic merge failed; fix conflicts and then commit the result.
||||||| filfre-common
left
right
Recreated 1 merge conflict
ok 36 - custom merge driver with checkout -m

expecting success of 7201.37 'tracking info copied with autoSetupMerge=inherit': 
	git reset --hard main &&
	# default config does not copy tracking info
	git checkout -b foo-no-inherit koala/bear &&
	test_cmp_config "" --default "" branch.foo-no-inherit.remote &&
	test_cmp_config "" --default "" branch.foo-no-inherit.merge &&
	# with autoSetupMerge=inherit, we copy tracking info from koala/bear
	test_config branch.autoSetupMerge inherit &&
	git checkout -b foo koala/bear &&
	test_cmp_config origin branch.foo.remote &&
	test_cmp_config refs/heads/koala/bear branch.foo.merge &&
	# no tracking info to inherit from main
	git checkout -b main2 main &&
	test_cmp_config "" --default "" branch.main2.remote &&
	test_cmp_config "" --default "" branch.main2.merge

HEAD is now at 7329388 Initial A one, A two
Switched to a new branch 'foo-no-inherit'
Switched to a new branch 'foo'
branch 'foo' set up to track 'origin/koala/bear'.
warning: asked to inherit tracking from 'main', but no remote is set
Switched to a new branch 'main2'
ok 37 - tracking info copied with autoSetupMerge=inherit

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7402-submodule-rebase.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7402-submodule-rebase/.git/
expecting success of 7402.1 'setup': 

	echo file > file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git clone . submodule &&
	git add submodule &&
	test_tick &&
	git commit -m submodule &&
	echo second line >> file &&
	(cd submodule && git pull) &&
	test_tick &&
	git commit -m file-and-submodule -a &&
	git branch added-submodule


[master (root-commit) ffefb50] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'submodule'...
done.
warning: adding embedded git repository: submodule
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> submodule
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached submodule
hint: 
hint: See "git help submodule" for more information.
[master 9bd10db] submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 submodule
From /<<PKGBUILDDIR>>/t/trash directory.t7402-submodule-rebase/.
   ffefb50..9bd10db  master     -> origin/master
Updating ffefb50..9bd10db
Fast-forward
 submodule | 1 +
 1 file changed, 1 insertion(+)
 create mode 160000 submodule
[master 041f541] file-and-submodule
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
ok 1 - setup

expecting success of 7402.2 'rebase with a dirty submodule': 

	(cd submodule &&
	 echo 3rd line >> file &&
	 test_tick &&
	 git commit -m fork -a) &&
	echo unrelated >> file2 &&
	git add file2 &&
	test_tick &&
	git commit -m unrelated file2 &&
	echo other line >> file &&
	test_tick &&
	git commit -m update file &&
	CURRENT=$(cd submodule && git rev-parse HEAD) &&
	EXPECTED=$(git rev-parse HEAD~2:submodule) &&
	GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&
	STORED=$(git rev-parse HEAD:submodule) &&
	test $EXPECTED = $STORED &&
	test $CURRENT = $(cd submodule && git rev-parse HEAD)


[master eb5e1a6] fork
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master b5e9d7b] unrelated
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[master a65f80c] update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
trace: built-in: git rebase --onto 'HEAD~2' HEAD^
Rebasing (1/1)
trace: run_command: git notes copy --for-rewrite=rebase
trace: built-in: git notes copy --for-rewrite=rebase

                                                                                
Successfully rebased and updated refs/heads/master.
ok 2 - rebase with a dirty submodule

expecting success of 7402.3 'interactive rebase with a dirty submodule': 

	test submodule = $(git diff --name-only) &&
	HEAD=$(git rev-parse HEAD) &&
	GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
		git rebase -i HEAD^ &&
	test submodule = $(git diff --name-only)


pick 81a011672801a6d53f73688ebde4d518274102e6

                                                                                
Successfully rebased and updated refs/heads/master.
ok 3 - interactive rebase with a dirty submodule

expecting success of 7402.4 'rebase with dirty file and submodule fails': 

	echo yet another line >> file &&
	test_tick &&
	git commit -m next file &&
	echo rewrite > file &&
	test_tick &&
	git commit -m rewrite file &&
	echo dirty > file &&
	test_must_fail git rebase --onto HEAD~2 HEAD^


[master 260764e] next
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 63179b5] rewrite
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
ok 4 - rebase with dirty file and submodule fails

expecting success of 7402.5 'stash with a dirty submodule': 

	echo new > file &&
	CURRENT=$(cd submodule && git rev-parse HEAD) &&
	git stash &&
	test new != $(cat file) &&
	test submodule = $(git diff --name-only) &&
	test $CURRENT = $(cd submodule && git rev-parse HEAD) &&
	git stash apply &&
	test new = $(cat file) &&
	test $CURRENT = $(cd submodule && git rev-parse HEAD)


Saved working directory and index state WIP on master: 63179b5 rewrite
Merging Version stash was based on with Stashed changes
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   file
	modified:   submodule (new commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	fake-editor.sh

no changes added to commit (use "git add" and/or "git commit -a")
ok 5 - stash with a dirty submodule

expecting success of 7402.6 'rebasing submodule that should conflict': 
	git reset --hard &&
	git checkout added-submodule &&
	git add submodule &&
	test_tick &&
	git commit -m third &&
	(
		cd submodule &&
		git commit --allow-empty -m extra
	) &&
	git add submodule &&
	test_tick &&
	git commit -m fourth &&

	test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 >actual_output &&
	git ls-files -s submodule >actual &&
	(
		cd submodule &&
		echo "160000 $(git rev-parse HEAD^) 1	submodule" &&
		echo "160000 $(git rev-parse HEAD^^) 2	submodule" &&
		echo "160000 $(git rev-parse HEAD) 3	submodule"
	) >expect &&
	test_cmp expect actual &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
    then
		sub_expect="go to submodule (submodule), and either merge commit $(git -C submodule rev-parse --short HEAD^0)" &&
		grep "$sub_expect" actual_output
	fi

HEAD is now at 63179b5 rewrite
Switched to branch 'added-submodule'
M	submodule
[added-submodule 3e80a7a] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[master 7d89a17] extra
 Author: A U Thor <author@example.com>
[added-submodule b58fe73] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (1/1)
error: could not apply b58fe73... fourth
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b58fe73... fourth
 - go to submodule (submodule), and either merge commit 7d89a17
ok 6 - rebasing submodule that should conflict

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7401-submodule-summary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7401-submodule-summary/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7401-submodule-summary/sm1/.git/
expecting success of 7401.1 'added submodule': 
	git add sm1 &&
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 0000000...a2c4dab (2):
	  > Add foo2

	EOF
	test_cmp expected actual

warning: adding embedded git repository: sm1
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm1
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm1
hint: 
hint: See "git help submodule" for more information.
ok 1 - added submodule

expecting success of 7401.2 'added submodule (subdirectory)': 
	mkdir sub &&
	(
		cd sub &&
		git submodule summary >../actual
	) &&
	cat >expected <<-EOF &&
	* ../sm1 0000000...a2c4dab (2):
	  > Add foo2

	EOF
	test_cmp expected actual

ok 2 - added submodule (subdirectory)

expecting success of 7401.3 'added submodule (subdirectory only)': 
	(
		cd sub &&
		git submodule summary . >../actual
	) &&
	test_must_be_empty actual

ok 3 - added submodule (subdirectory only)

expecting success of 7401.4 'added submodule (subdirectory with explicit path)': 
	(
		cd sub &&
		git submodule summary ../sm1 >../actual
	) &&
	cat >expected <<-EOF &&
	* ../sm1 0000000...a2c4dab (2):
	  > Add foo2

	EOF
	test_cmp expected actual

ok 4 - added submodule (subdirectory with explicit path)

expecting success of 7401.5 'modified submodule(forward)': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 a2c4dab...4c8d358 (1):
	  > Add foo3

	EOF
	test_cmp expected actual

ok 5 - modified submodule(forward)

expecting success of 7401.6 'modified submodule(forward), --files': 
	git submodule summary --files >actual &&
	cat >expected <<-EOF &&
	* sm1 a2c4dab...4c8d358 (1):
	  > Add foo3

	EOF
	test_cmp expected actual

ok 6 - modified submodule(forward), --files

expecting success of 7401.7 'no ignore=all setting has any effect': 
	git config -f .gitmodules submodule.sm1.path sm1 &&
	git config -f .gitmodules submodule.sm1.ignore all &&
	git config submodule.sm1.ignore all &&
	git config diff.ignoreSubmodules all &&
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 a2c4dab...4c8d358 (1):
	  > Add foo3

	EOF
	test_cmp expected actual &&
	git config --unset diff.ignoreSubmodules &&
	git config --remove-section submodule.sm1 &&
	git config -f .gitmodules --remove-section submodule.sm1

ok 7 - no ignore=all setting has any effect

expecting success of 7401.8 'modified submodule(backward)': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 4c8d358...db425b6 (2):
	  < Add foo3
	  < Add foo2

	EOF
	test_cmp expected actual

ok 8 - modified submodule(backward)

expecting success of 7401.9 'modified submodule(backward and forward)': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 4c8d358...41fbea9 (4):
	  > Add foo5
	  > Add foo4
	  < Add foo3
	  < Add foo2

	EOF
	test_cmp expected actual

ok 9 - modified submodule(backward and forward)

expecting success of 7401.10 '--summary-limit': 
	git submodule summary -n 3 >actual &&
	cat >expected <<-EOF &&
	* sm1 4c8d358...41fbea9 (4):
	  > Add foo5
	  > Add foo4
	  < Add foo3

	EOF
	test_cmp expected actual

ok 10 - --summary-limit

expecting success of 7401.11 'typechanged submodule(submodule->blob), --cached': 
	git submodule summary --cached >actual &&
	cat >expected <<-EOF &&
	* sm1 41fbea9(submodule)->9da5fb8(blob) (3):
	  < Add foo5

	EOF
	test_cmp expected actual

ok 11 - typechanged submodule(submodule->blob), --cached

expecting success of 7401.12 'typechanged submodule(submodule->blob), --files': 
	git submodule summary --files >actual &&
	cat >expected <<-EOF &&
	* sm1 9da5fb8(blob)->41fbea9(submodule) (3):
	  > Add foo5

	EOF
	test_cmp expected actual

ok 12 - typechanged submodule(submodule->blob), --files

expecting success of 7401.13 'typechanged submodule(submodule->blob)': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 41fbea9(submodule)->9da5fb8(blob):

	EOF
	test_cmp expected actual

fatal: exec 'rev-parse': cd to 'sm1' failed: Not a directory
ok 13 - typechanged submodule(submodule->blob)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7401-submodule-summary/sm1/.git/
expecting success of 7401.14 'nonexistent commit': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 41fbea9...6858906:
	  Warn: sm1 doesn't contain commit 41fbea99b81568012be3e9bcc31431971c1e5bc5

	EOF
	test_cmp expected actual

ok 14 - nonexistent commit

expecting success of 7401.15 'typechanged submodule(blob->submodule)': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 9da5fb8(blob)->6858906(submodule) (2):
	  > Add foo7

	EOF
	test_cmp expected actual

ok 15 - typechanged submodule(blob->submodule)

expecting success of 7401.16 'deleted submodule': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 6858906...0000000:

	EOF
	test_cmp expected actual

ok 16 - deleted submodule

expecting success of 7401.17 'create second submodule': 
	test_create_repo sm2 &&
	head7=$(add_file sm2 foo8 foo9) &&
	git add sm2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7401-submodule-summary/sm2/.git/
warning: adding embedded git repository: sm2
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm2
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm2
hint: 
hint: See "git help submodule" for more information.
ok 17 - create second submodule

expecting success of 7401.18 'multiple submodules': 
	git submodule summary >actual &&
	cat >expected <<-EOF &&
	* sm1 6858906...0000000:

	* sm2 0000000...fa9eeaf (2):
	  > Add foo9

	EOF
	test_cmp expected actual

ok 18 - multiple submodules

expecting success of 7401.19 'path filter': 
	git submodule summary sm2 >actual &&
	cat >expected <<-EOF &&
	* sm2 0000000...fa9eeaf (2):
	  > Add foo9

	EOF
	test_cmp expected actual

ok 19 - path filter

expecting success of 7401.20 'given commit': 
	git submodule summary HEAD^ >actual &&
	cat >expected <<-EOF &&
	* sm1 6858906...0000000:

	* sm2 0000000...fa9eeaf (2):
	  > Add foo9

	EOF
	test_cmp expected actual

ok 20 - given commit

expecting success of 7401.21 '--for-status': 
	git submodule summary --for-status HEAD^ >actual &&
	test_cmp - actual <<-EOF
	* sm1 6858906...0000000:

	* sm2 0000000...fa9eeaf (2):
	  > Add foo9

	EOF

ok 21 - --for-status

expecting success of 7401.22 'fail when using --files together with --cached': 
	test_must_fail git submodule summary --files --cached

fatal: options '--cached' and '--files' cannot be used together
ok 22 - fail when using --files together with --cached

expecting success of 7401.23 'should not fail in an empty repo': 
	git init xyzzy &&
	cd xyzzy &&
	git submodule summary >output 2>&1 &&
	test_must_be_empty output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7401-submodule-summary/xyzzy/.git/
ok 23 - should not fail in an empty repo

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7403-submodule-sync.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/.git/
expecting success of 7403.1 'setup': 
	git config --global protocol.file.allow always &&

	echo file >file &&
	git add file &&
	test_tick &&
	git commit -m upstream &&
	git clone . super &&
	git clone super submodule &&
	(
		cd submodule &&
		git submodule add ../submodule sub-submodule &&
		test_tick &&
		git commit -m "sub-submodule"
	) &&
	(
		cd super &&
		git submodule add ../submodule submodule &&
		test_tick &&
		git commit -m "submodule"
	) &&
	git clone super super-clone &&
	(
		cd super-clone &&
		git submodule update --init --recursive
	) &&
	git clone super empty-clone &&
	(
		cd empty-clone &&
		git submodule init
	) &&
	git clone super top-only-clone &&
	git clone super relative-clone &&
	(
		cd relative-clone &&
		git submodule update --init --recursive
	) &&
	git clone super recursive-clone &&
	(
		cd recursive-clone &&
		git submodule update --init --recursive
	)

[main (root-commit) 0c90624] upstream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'super'...
done.
Cloning into 'submodule'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule/sub-submodule'...
done.
[main 5a446ba] sub-submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub-submodule
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super/submodule'...
done.
[main 78df3af] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into 'super-clone'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super-clone/submodule'...
done.
Submodule path 'submodule': checked out '5a446ba52b7cd49fd2fdd854f363e71780faa9a8'
Submodule 'sub-submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule/sub-submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super-clone/submodule/sub-submodule'...
done.
Submodule path 'submodule/sub-submodule': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Cloning into 'empty-clone'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule'
Cloning into 'top-only-clone'...
done.
Cloning into 'relative-clone'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/relative-clone/submodule'...
done.
Submodule path 'submodule': checked out '5a446ba52b7cd49fd2fdd854f363e71780faa9a8'
Submodule 'sub-submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule/sub-submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/relative-clone/submodule/sub-submodule'...
done.
Submodule path 'submodule/sub-submodule': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Cloning into 'recursive-clone'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/recursive-clone/submodule'...
done.
Submodule path 'submodule': checked out '5a446ba52b7cd49fd2fdd854f363e71780faa9a8'
Submodule 'sub-submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule) registered for path 'submodule/sub-submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/recursive-clone/submodule/sub-submodule'...
done.
Submodule path 'submodule/sub-submodule': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
ok 1 - setup

expecting success of 7403.2 'change submodule': 
	(
		cd submodule &&
		echo second line >>file &&
		test_tick &&
		git commit -a -m "change submodule"
	)

[main c61fc01] change submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - change submodule

expecting success of 7403.3 'change submodule url': 
	(
		cd super &&
		cd submodule &&
		git checkout main &&
		git pull
	) &&
	mv submodule moved-submodule &&
	(
		cd moved-submodule &&
		git config -f .gitmodules submodule.sub-submodule.url ../moved-submodule &&
		test_tick &&
		git commit -a -m moved-sub-submodule
	) &&
	(
		cd super &&
		git config -f .gitmodules submodule.submodule.url ../moved-submodule &&
		test_tick &&
		git commit -a -m moved-submodule
	)

Already on 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/submodule
   5a446ba..c61fc01  main       -> origin/main
Updating 5a446ba..c61fc01
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
[main 9f583c0] moved-sub-submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main f2e88dd] moved-submodule
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 3 - change submodule url

expecting success of 7403.4 '"git submodule sync" should update submodule URLs': 
	(
		cd super-clone &&
		git pull --no-recurse-submodules &&
		git submodule sync
	) &&
	test -d "$(
		cd super-clone/submodule &&
		git config remote.origin.url
	)" &&
	test ! -d "$(
		cd super-clone/submodule/sub-submodule &&
		git config remote.origin.url
	)" &&
	(
		cd super-clone/submodule &&
		git checkout main &&
		git pull
	) &&
	(
		cd super-clone &&
		test -d "$(git config submodule.submodule.url)"
	)

From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super
   78df3af..f2e88dd  main       -> origin/main
Updating 78df3af..f2e88dd
Fast-forward
 .gitmodules | 2 +-
 submodule   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Synchronizing submodule url for 'submodule'
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/moved-submodule
   5a446ba..9f583c0  main       -> origin/main
Updating 5a446ba..9f583c0
Fast-forward
 .gitmodules | 2 +-
 file        | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
ok 4 - "git submodule sync" should update submodule URLs

expecting success of 7403.5 '"git submodule sync --recursive" should update all submodule URLs': 
	(
		cd super-clone &&
		(
			cd submodule &&
			git pull --no-recurse-submodules
		) &&
		git submodule sync --recursive
	) &&
	test -d "$(
		cd super-clone/submodule &&
		git config remote.origin.url
	)" &&
	test -d "$(
		cd super-clone/submodule/sub-submodule &&
		git config remote.origin.url
	)" &&
	(
		cd super-clone/submodule/sub-submodule &&
		git checkout main &&
		git pull
	)

Already up to date.
Synchronizing submodule url for 'submodule'
Synchronizing submodule url for 'submodule/sub-submodule'
Previous HEAD position was 0c90624 upstream
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/moved-submodule
   5a446ba..9f583c0  main       -> origin/main
Updating 5a446ba..9f583c0
Fast-forward
 .gitmodules | 2 +-
 file        | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
ok 5 - "git submodule sync --recursive" should update all submodule URLs

expecting success of 7403.6 'reset submodule URLs': 
	reset_submodule_urls super-clone

ok 6 - reset submodule URLs

expecting success of 7403.7 '"git submodule sync" should update submodule URLs - subdirectory': 
	(
		cd super-clone &&
		git pull --no-recurse-submodules &&
		mkdir -p sub &&
		cd sub &&
		git submodule sync >../../output
	) &&
	test_i18ngrep "\\.\\./submodule" output &&
	test -d "$(
		cd super-clone/submodule &&
		git config remote.origin.url
	)" &&
	test ! -d "$(
		cd super-clone/submodule/sub-submodule &&
		git config remote.origin.url
	)" &&
	(
		cd super-clone/submodule &&
		git checkout main &&
		git pull
	) &&
	(
		cd super-clone &&
		test -d "$(git config submodule.submodule.url)"
	)

Already up to date.
Synchronizing submodule url for '../submodule'
Already on 'main'
M	sub-submodule
Your branch is up to date with 'origin/main'.
Already up to date.
ok 7 - "git submodule sync" should update submodule URLs - subdirectory

expecting success of 7403.8 '"git submodule sync --recursive" should update all submodule URLs - subdirectory': 
	(
		cd super-clone &&
		(
			cd submodule &&
			git pull --no-recurse-submodules
		) &&
		mkdir -p sub &&
		cd sub &&
		git submodule sync --recursive >../../output
	) &&
	test_i18ngrep "\\.\\./submodule/sub-submodule" output &&
	test -d "$(
		cd super-clone/submodule &&
		git config remote.origin.url
	)" &&
	test -d "$(
		cd super-clone/submodule/sub-submodule &&
		git config remote.origin.url
	)" &&
	(
		cd super-clone/submodule/sub-submodule &&
		git checkout main &&
		git pull
	)

Already up to date.
Synchronizing submodule url for '../submodule/sub-submodule'
Already on 'main'
Your branch is up to date with 'origin/main'.
Already up to date.
ok 8 - "git submodule sync --recursive" should update all submodule URLs - subdirectory

expecting success of 7403.9 '"git submodule sync" should update known submodule URLs': 
	(
		cd empty-clone &&
		git pull &&
		git submodule sync &&
		test -d "$(git config submodule.submodule.url)"
	)

From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super
   78df3af..f2e88dd  main       -> origin/main
Could not access submodule 'submodule' at commit f2e88dd
Updating 78df3af..f2e88dd
Fast-forward
 .gitmodules | 2 +-
 submodule   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Synchronizing submodule url for 'submodule'
ok 9 - "git submodule sync" should update known submodule URLs

expecting success of 7403.10 '"git submodule sync" should not vivify uninteresting submodule': 
	(
		cd top-only-clone &&
		git pull &&
		git submodule sync &&
		test -z "$(git config submodule.submodule.url)" &&
		git submodule sync submodule &&
		test -z "$(git config submodule.submodule.url)"
	)

From /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/super
   78df3af..f2e88dd  main       -> origin/main
Updating 78df3af..f2e88dd
Fast-forward
 .gitmodules | 2 +-
 submodule   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 10 - "git submodule sync" should not vivify uninteresting submodule

expecting success of 7403.11 '"git submodule sync" handles origin URL of the form foo': 
	(
		cd relative-clone &&
		git remote set-url origin foo &&
		git submodule sync &&
		(
			cd submodule &&
			#actual fails with: "cannot strip off url foo
			test "$(git config remote.origin.url)" = "../submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 11 - "git submodule sync" handles origin URL of the form foo

expecting success of 7403.12 '"git submodule sync" handles origin URL of the form foo/bar': 
	(
		cd relative-clone &&
		git remote set-url origin foo/bar &&
		git submodule sync &&
		(
			cd submodule &&
			#actual foo/submodule
			test "$(git config remote.origin.url)" = "../foo/submodule"
		) &&
		(
			cd submodule/sub-submodule &&
			test "$(git config remote.origin.url)" != "../../foo/submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 12 - "git submodule sync" handles origin URL of the form foo/bar

expecting success of 7403.13 '"git submodule sync --recursive" propagates changes in origin': 
	(
		cd recursive-clone &&
		git remote set-url origin foo/bar &&
		git submodule sync --recursive &&
		(
			cd submodule &&
			#actual foo/submodule
			test "$(git config remote.origin.url)" = "../foo/submodule"
		) &&
		(
			cd submodule/sub-submodule &&
			test "$(git config remote.origin.url)" = "../../foo/submodule"
		)
	)

Synchronizing submodule url for 'submodule'
Synchronizing submodule url for 'submodule/sub-submodule'
ok 13 - "git submodule sync --recursive" propagates changes in origin

expecting success of 7403.14 '"git submodule sync" handles origin URL of the form ./foo': 
	(
		cd relative-clone &&
		git remote set-url origin ./foo &&
		git submodule sync &&
		(
			cd submodule &&
			#actual ./submodule
			test "$(git config remote.origin.url)" = "../submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 14 - "git submodule sync" handles origin URL of the form ./foo

expecting success of 7403.15 '"git submodule sync" handles origin URL of the form ./foo/bar': 
	(
		cd relative-clone &&
		git remote set-url origin ./foo/bar &&
		git submodule sync &&
		(
			cd submodule &&
			#actual ./foo/submodule
			test "$(git config remote.origin.url)" = "../foo/submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 15 - "git submodule sync" handles origin URL of the form ./foo/bar

expecting success of 7403.16 '"git submodule sync" handles origin URL of the form ../foo': 
	(
		cd relative-clone &&
		git remote set-url origin ../foo &&
		git submodule sync &&
		(
			cd submodule &&
			#actual ../submodule
			test "$(git config remote.origin.url)" = "../../submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 16 - "git submodule sync" handles origin URL of the form ../foo

expecting success of 7403.17 '"git submodule sync" handles origin URL of the form ../foo/bar': 
	(
		cd relative-clone &&
		git remote set-url origin ../foo/bar &&
		git submodule sync &&
		(
			cd submodule &&
			#actual ../foo/submodule
			test "$(git config remote.origin.url)" = "../../foo/submodule"
		)
	)

Synchronizing submodule url for 'submodule'
ok 17 - "git submodule sync" handles origin URL of the form ../foo/bar

expecting success of 7403.18 '"git submodule sync" handles origin URL of the form ../foo/bar with deeply nested submodule': 
	(
		cd relative-clone &&
		git remote set-url origin ../foo/bar &&
		mkdir -p a/b/c &&
		(
			cd a/b/c &&
			git init &&
			>.gitignore &&
			git add .gitignore &&
			test_tick &&
			git commit -m "initial commit"
		) &&
		git submodule add ../bar/a/b/c ./a/b/c &&
		git submodule sync &&
		(
			cd a/b/c &&
			#actual ../foo/bar/a/b/c
			test "$(git config remote.origin.url)" = "../../../../foo/bar/a/b/c"
		)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7403-submodule-sync/relative-clone/a/b/c/.git/
[main (root-commit) 1f9e67a] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
Adding existing repo at 'a/b/c' to the index
Synchronizing submodule url for 'a/b/c'
Synchronizing submodule url for 'submodule'
ok 18 - "git submodule sync" handles origin URL of the form ../foo/bar with deeply nested submodule

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7407-submodule-foreach.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/.git/
expecting success of 7407.1 'setup a submodule tree': 
	git config --global protocol.file.allow always &&
	echo file > file &&
	git add file &&
	test_tick &&
	git commit -m upstream &&
	git clone . super &&
	git clone super submodule &&
	(
		cd super &&
		git submodule add ../submodule sub1 &&
		git submodule add ../submodule sub2 &&
		git submodule add ../submodule sub3 &&
		git config -f .gitmodules --rename-section \
			submodule.sub1 submodule.foo1 &&
		git config -f .gitmodules --rename-section \
			submodule.sub2 submodule.foo2 &&
		git config -f .gitmodules --rename-section \
			submodule.sub3 submodule.foo3 &&
		git add .gitmodules &&
		test_tick &&
		git commit -m "submodules" &&
		git submodule init sub1 &&
		git submodule init sub2 &&
		git submodule init sub3
	) &&
	(
		cd submodule &&
		echo different > file &&
		git add file &&
		test_tick &&
		git commit -m "different"
	) &&
	(
		cd super &&
		(
			cd sub3 &&
			git pull
		) &&
		git add sub3 &&
		test_tick &&
		git commit -m "update sub3"
	)

[main (root-commit) 0c90624] upstream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'super'...
done.
Cloning into 'submodule'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/super/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/super/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/super/sub3'...
done.
[main 33b977a] submodules
 Author: A U Thor <author@example.com>
 4 files changed, 12 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
 create mode 160000 sub2
 create mode 160000 sub3
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub2'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
[main 509f622] different
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule
   0c90624..509f622  main       -> origin/main
Updating 0c90624..509f622
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ed2a820] update sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup a submodule tree

expecting success of 7407.2 'test basic "submodule foreach" usage': 
	git clone super clone &&
	(
		cd clone &&
		git submodule update --init -- sub1 sub3 &&
		git submodule foreach "echo \$toplevel-\$name-\$path-\$sha1" > ../actual &&
		git config foo.bar zar &&
		git submodule foreach "git config --file \"\$toplevel/.git/config\" foo.bar"
	) &&
	test_cmp expect actual

Cloning into 'clone'...
done.
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone/sub3'...
done.
Submodule path 'sub1': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub3': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
Entering 'sub1'
zar
Entering 'sub3'
zar
ok 2 - test basic "submodule foreach" usage

expecting success of 7407.3 'test "submodule foreach" from subdirectory': 
	mkdir clone/sub &&
	(
		cd clone/sub &&
		git submodule foreach "echo \$toplevel-\$name-\$sm_path-\$displaypath-\$sha1" >../../actual
	) &&
	test_cmp expect actual

ok 3 - test "submodule foreach" from subdirectory

expecting success of 7407.4 'setup nested submodules': 
	git clone submodule nested1 &&
	git clone submodule nested2 &&
	git clone submodule nested3 &&
	(
		cd nested3 &&
		git submodule add ../submodule submodule &&
		test_tick &&
		git commit -m "submodule" &&
		git submodule init submodule
	) &&
	(
		cd nested2 &&
		git submodule add ../nested3 nested3 &&
		test_tick &&
		git commit -m "nested3" &&
		git submodule init nested3
	) &&
	(
		cd nested1 &&
		git submodule add ../nested2 nested2 &&
		test_tick &&
		git commit -m "nested2" &&
		git submodule init nested2
	) &&
	(
		cd super &&
		git submodule add ../nested1 nested1 &&
		test_tick &&
		git commit -m "nested1" &&
		git submodule init nested1
	)

Cloning into 'nested1'...
done.
Cloning into 'nested2'...
done.
Cloning into 'nested3'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3/submodule'...
done.
[main 5ec8351] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2/nested3'...
done.
[main 2e69c85] nested3
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 nested3
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1/nested2'...
done.
[main b23f134] nested2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 nested2
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/super/nested1'...
done.
[main 427ccd0] nested1
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 nested1
ok 4 - setup nested submodules

expecting success of 7407.5 'use "submodule foreach" to checkout 2nd level submodule': 
	git clone super clone2 &&
	(
		cd clone2 &&
		test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
		test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
		git submodule update --init &&
		git rev-parse --resolve-git-dir sub1/.git &&
		git rev-parse --resolve-git-dir sub2/.git &&
		git rev-parse --resolve-git-dir sub3/.git &&
		git rev-parse --resolve-git-dir nested1/.git &&
		test_must_fail git rev-parse --resolve-git-dir nested1/nested2/.git &&
		git submodule foreach "git submodule update --init" &&
		git rev-parse --resolve-git-dir nested1/nested2/.git &&
		test_must_fail git rev-parse --resolve-git-dir nested1/nested2/nested3/.git
	)

Cloning into 'clone2'...
done.
fatal: not a gitdir 'sub1/.git'
fatal: not a gitdir 'sub2/.git'
fatal: not a gitdir 'sub3/.git'
fatal: not a gitdir 'nested1/.git'
Submodule 'nested1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1) registered for path 'nested1'
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub2'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/nested1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/sub3'...
done.
Submodule path 'nested1': checked out 'b23f134787d96fae589a6b76da41f4db112fc8db'
Submodule path 'sub1': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub2': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub3': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/foo1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/foo2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/foo3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/nested1
fatal: not a gitdir 'nested1/nested2/.git'
Entering 'nested1'
Submodule 'nested2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2) registered for path 'nested2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/nested1/nested2'...
done.
Submodule path 'nested2': checked out '2e69c85de92bf5f316f3c67b5e492f287f5a6542'
Entering 'sub1'
Entering 'sub2'
Entering 'sub3'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/nested1/modules/nested2
fatal: not a gitdir 'nested1/nested2/nested3/.git'
ok 5 - use "submodule foreach" to checkout 2nd level submodule

expecting success of 7407.6 'usage: foreach -- --not-an-option': 
	test_expect_code 1 git submodule foreach -- --not-an-option &&
	test_expect_code 1 git -C clone2 submodule foreach -- --not-an-option

usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
   or: git submodule [--quiet] set-branch (--default|--branch <branch>) [--] <path>
   or: git submodule [--quiet] set-url [--] <path> <newurl>
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]
usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
   or: git submodule [--quiet] set-branch (--default|--branch <branch>) [--] <path>
   or: git submodule [--quiet] set-url [--] <path> <newurl>
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]
ok 6 - usage: foreach -- --not-an-option

expecting success of 7407.7 'use "foreach --recursive" to checkout all submodules': 
	(
		cd clone2 &&
		git submodule foreach --recursive "git submodule update --init" &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
	)

Entering 'nested1'
Entering 'nested1/nested2'
Submodule 'nested3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3) registered for path 'nested3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/nested1/nested2/nested3'...
done.
Submodule path 'nested3': checked out '5ec83512b76a0b8170b899f8e643913c3e9b72d9'
Entering 'nested1/nested2/nested3'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/nested1/nested2/nested3/submodule'...
done.
Submodule path 'submodule': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
Entering 'nested1/nested2/nested3/submodule'
Entering 'sub1'
Entering 'sub2'
Entering 'sub3'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/nested1/modules/nested2/modules/nested3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone2/.git/modules/nested1/modules/nested2/modules/nested3/modules/submodule
ok 7 - use "foreach --recursive" to checkout all submodules

expecting success of 7407.8 'test messages from "foreach --recursive"': 
	(
		cd clone2 &&
		git submodule foreach --recursive "true" > ../actual
	) &&
	test_cmp expect actual

ok 8 - test messages from "foreach --recursive"

expecting success of 7407.9 'test messages from "foreach --recursive" from subdirectory': 
	(
		cd clone2 &&
		mkdir untracked &&
		cd untracked &&
		git submodule foreach --recursive >../../actual
	) &&
	test_cmp expect actual

ok 9 - test messages from "foreach --recursive" from subdirectory

expecting success of 7407.10 'test "submodule foreach --recursive" from subdirectory': 
	(
		cd clone2/untracked &&
		git submodule foreach --recursive "echo toplevel: \$toplevel name: \$name path: \$sm_path displaypath: \$displaypath hash: \$sha1" >../../actual
	) &&
	test_cmp expect actual

ok 10 - test "submodule foreach --recursive" from subdirectory

expecting success of 7407.11 'test "foreach --quiet --recursive"': 
	(
		cd clone2 &&
		git submodule foreach -q --recursive "echo \$name-\$path" > ../actual
	) &&
	test_cmp expect actual

ok 11 - test "foreach --quiet --recursive"

expecting success of 7407.12 'use "update --recursive" to checkout all submodules': 
	git clone super clone3 &&
	(
		cd clone3 &&
		test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
		test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
		git submodule update --init --recursive &&
		git rev-parse --resolve-git-dir sub1/.git &&
		git rev-parse --resolve-git-dir sub2/.git &&
		git rev-parse --resolve-git-dir sub3/.git &&
		git rev-parse --resolve-git-dir nested1/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
	)

Cloning into 'clone3'...
done.
fatal: not a gitdir 'sub1/.git'
fatal: not a gitdir 'sub2/.git'
fatal: not a gitdir 'sub3/.git'
fatal: not a gitdir 'nested1/.git'
Submodule 'nested1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1) registered for path 'nested1'
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub2'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/nested1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/sub3'...
done.
Submodule path 'nested1': checked out 'b23f134787d96fae589a6b76da41f4db112fc8db'
Submodule 'nested2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2) registered for path 'nested1/nested2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/nested1/nested2'...
done.
Submodule path 'nested1/nested2': checked out '2e69c85de92bf5f316f3c67b5e492f287f5a6542'
Submodule 'nested3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3) registered for path 'nested1/nested2/nested3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/nested1/nested2/nested3'...
done.
Submodule path 'nested1/nested2/nested3': checked out '5ec83512b76a0b8170b899f8e643913c3e9b72d9'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'nested1/nested2/nested3/submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/nested1/nested2/nested3/submodule'...
done.
Submodule path 'nested1/nested2/nested3/submodule': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
Submodule path 'sub1': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub2': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub3': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/foo1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/foo2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/foo3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/nested1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/nested1/modules/nested2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/nested1/modules/nested2/modules/nested3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone3/.git/modules/nested1/modules/nested2/modules/nested3/modules/submodule
ok 12 - use "update --recursive" to checkout all submodules

expecting success of 7407.13 'test "status --recursive"': 
	(
		cd clone3 &&
		git submodule status --recursive > ../actual
	) &&
	test_cmp expect actual

ok 13 - test "status --recursive"

expecting success of 7407.14 'ensure "status --cached --recursive" preserves the --cached flag': 
	(
		cd clone3 &&
		(
			cd nested1/nested2 &&
			test_commit file2
		) &&
		git submodule status --cached --recursive -- nested1 > ../actual
	) &&
	test_cmp expect actual

[detached HEAD 25d56d1] file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2.t
ok 14 - ensure "status --cached --recursive" preserves the --cached flag

expecting success of 7407.15 'test "status --recursive" from sub directory': 
	(
		cd clone3 &&
		mkdir tmp && cd tmp &&
		git submodule status --recursive > ../../actual
	) &&
	test_cmp expect actual

ok 15 - test "status --recursive" from sub directory

expecting success of 7407.16 'use "git clone --recursive" to checkout all submodules': 
	git clone --recursive super clone4 &&
	(
		cd clone4 &&
		git rev-parse --resolve-git-dir .git &&
		git rev-parse --resolve-git-dir sub1/.git &&
		git rev-parse --resolve-git-dir sub2/.git &&
		git rev-parse --resolve-git-dir sub3/.git &&
		git rev-parse --resolve-git-dir nested1/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
	)

Cloning into 'clone4'...
done.
Submodule 'nested1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1) registered for path 'nested1'
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub2'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/nested1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/sub3'...
done.
Submodule path 'nested1': checked out 'b23f134787d96fae589a6b76da41f4db112fc8db'
Submodule 'nested2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2) registered for path 'nested1/nested2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/nested1/nested2'...
done.
Submodule path 'nested1/nested2': checked out '2e69c85de92bf5f316f3c67b5e492f287f5a6542'
Submodule 'nested3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3) registered for path 'nested1/nested2/nested3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/nested1/nested2/nested3'...
done.
Submodule path 'nested1/nested2/nested3': checked out '5ec83512b76a0b8170b899f8e643913c3e9b72d9'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'nested1/nested2/nested3/submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/nested1/nested2/nested3/submodule'...
done.
Submodule path 'nested1/nested2/nested3/submodule': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
Submodule path 'sub1': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub2': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub3': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
.git
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/foo1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/foo2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/foo3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/nested1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/nested1/modules/nested2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/nested1/modules/nested2/modules/nested3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone4/.git/modules/nested1/modules/nested2/modules/nested3/modules/submodule
ok 16 - use "git clone --recursive" to checkout all submodules

expecting success of 7407.17 'test "update --recursive" with a flag with spaces': 
	git clone super "common objects" &&
	git clone super clone5 &&
	(
		cd clone5 &&
		test_must_fail git rev-parse --resolve-git-dir d nested1/.git &&
		git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" &&
		git rev-parse --resolve-git-dir nested1/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
		test -f .git/modules/nested1/objects/info/alternates &&
		test -f .git/modules/nested1/modules/nested2/objects/info/alternates &&
		test -f .git/modules/nested1/modules/nested2/modules/nested3/objects/info/alternates
	)

Cloning into 'common objects'...
done.
Cloning into 'clone5'...
done.
fatal: not a gitdir 'd'
Submodule 'nested1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1) registered for path 'nested1'
Submodule 'foo1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub1'
Submodule 'foo2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub2'
Submodule 'foo3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/nested1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/sub3'...
done.
Submodule path 'nested1': checked out 'b23f134787d96fae589a6b76da41f4db112fc8db'
Submodule 'nested2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2) registered for path 'nested1/nested2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/nested1/nested2'...
done.
Submodule path 'nested1/nested2': checked out '2e69c85de92bf5f316f3c67b5e492f287f5a6542'
Submodule 'nested3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3) registered for path 'nested1/nested2/nested3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/nested1/nested2/nested3'...
done.
Submodule path 'nested1/nested2/nested3': checked out '5ec83512b76a0b8170b899f8e643913c3e9b72d9'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'nested1/nested2/nested3/submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/nested1/nested2/nested3/submodule'...
done.
Submodule path 'nested1/nested2/nested3/submodule': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
Submodule path 'sub1': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub2': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'sub3': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/.git/modules/nested1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/.git/modules/nested1/modules/nested2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone5/.git/modules/nested1/modules/nested2/modules/nested3
ok 17 - test "update --recursive" with a flag with spaces

expecting success of 7407.18 'use "update --recursive nested1" to checkout all submodules rooted in nested1': 
	git clone super clone6 &&
	(
		cd clone6 &&
		test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
		test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
		git submodule update --init --recursive -- nested1 &&
		test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
		test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
		git rev-parse --resolve-git-dir nested1/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
	)

Cloning into 'clone6'...
done.
fatal: not a gitdir 'sub1/.git'
fatal: not a gitdir 'sub2/.git'
fatal: not a gitdir 'sub3/.git'
fatal: not a gitdir 'nested1/.git'
Submodule 'nested1' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested1) registered for path 'nested1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/nested1'...
done.
Submodule path 'nested1': checked out 'b23f134787d96fae589a6b76da41f4db112fc8db'
Submodule 'nested2' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested2) registered for path 'nested1/nested2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/nested1/nested2'...
done.
Submodule path 'nested1/nested2': checked out '2e69c85de92bf5f316f3c67b5e492f287f5a6542'
Submodule 'nested3' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/nested3) registered for path 'nested1/nested2/nested3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/nested1/nested2/nested3'...
done.
Submodule path 'nested1/nested2/nested3': checked out '5ec83512b76a0b8170b899f8e643913c3e9b72d9'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/submodule) registered for path 'nested1/nested2/nested3/submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/nested1/nested2/nested3/submodule'...
done.
Submodule path 'nested1/nested2/nested3/submodule': checked out '509f622a4f36a3e472affcf28fa959174f3dd5b5'
fatal: not a gitdir 'sub1/.git'
fatal: not a gitdir 'sub2/.git'
fatal: not a gitdir 'sub3/.git'
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/.git/modules/nested1
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/.git/modules/nested1/modules/nested2
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/.git/modules/nested1/modules/nested2/modules/nested3
/<<PKGBUILDDIR>>/t/trash directory.t7407-submodule-foreach/clone6/.git/modules/nested1/modules/nested2/modules/nested3/modules/submodule
ok 18 - use "update --recursive nested1" to checkout all submodules rooted in nested1

expecting success of 7407.19 'command passed to foreach retains notion of stdin': 
	(
		cd super &&
		git submodule foreach echo success >../expected &&
		yes | git submodule foreach "read y && test \"x\$y\" = xy && echo success" >../actual
	) &&
	test_cmp expected actual

ok 19 - command passed to foreach retains notion of stdin

expecting success of 7407.20 'command passed to foreach --recursive retains notion of stdin': 
	(
		cd clone2 &&
		git submodule foreach --recursive echo success >../expected &&
		yes | git submodule foreach --recursive "read y && test \"x\$y\" = xy && echo success" >../actual
	) &&
	test_cmp expected actual

ok 20 - command passed to foreach --recursive retains notion of stdin

expecting success of 7407.21 'multi-argument command passed to foreach is not shell-evaluated twice': 
	(
		cd super &&
		git submodule foreach "echo \\\"quoted\\\"" > ../expected &&
		git submodule foreach echo \"quoted\" > ../actual
	) &&
	test_cmp expected actual

ok 21 - multi-argument command passed to foreach is not shell-evaluated twice

expecting success of 7407.22 'option-like arguments passed to foreach commands are not lost': 
	(
		cd super &&
		git submodule foreach "echo be --quiet" > ../expected &&
		git submodule foreach echo be --quiet > ../actual
	) &&
	grep -sq -e "--quiet" expected &&
	test_cmp expected actual

ok 22 - option-like arguments passed to foreach commands are not lost

expecting success of 7407.23 'option-like arguments passed to foreach recurse correctly': 
	git -C clone2 submodule foreach --recursive "echo be --an-option" >expect &&
	git -C clone2 submodule foreach --recursive echo be --an-option >actual &&
	grep -e "--an-option" expect &&
	test_cmp expect actual

be --an-option
be --an-option
be --an-option
be --an-option
be --an-option
be --an-option
be --an-option
ok 23 - option-like arguments passed to foreach recurse correctly

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7408-submodule-reference.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/.git/
expecting success of 7408.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7408.2 'preparing first repository': 
	test_create_repo A &&
	(
		cd A &&
		echo first >file1 &&
		git add file1 &&
		git commit -m A-initial
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A/.git/
[master (root-commit) 3f492fa] A-initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 2 - preparing first repository

expecting success of 7408.3 'preparing second repository': 
	git clone A B &&
	(
		cd B &&
		echo second >file2 &&
		git add file2 &&
		git commit -m B-addition &&
		git repack -a -d &&
		git prune
	)

Cloning into 'B'...
done.
[master c9a83e7] B-addition
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 3 - preparing second repository

expecting success of 7408.4 'preparing superproject': 
	test_create_repo super &&
	(
		cd super &&
		echo file >file &&
		git add file &&
		git commit -m B-super-initial
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super/.git/
[master (root-commit) 0776138] B-super-initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 4 - preparing superproject

expecting success of 7408.5 'submodule add --reference uses alternates': 
	(
		cd super &&
		git submodule add --reference ../B "file://$base_dir/A" sub &&
		git commit -m B-super-added &&
		git repack -ad
	) &&
	test_alternate_is_used super/.git/modules/sub/objects/info/alternates super/sub

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super/sub'...
[master 1f8d8b9] B-super-added
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 5 - submodule add --reference uses alternates

expecting success of 7408.6 'submodule add --reference with --dissociate does not use alternates': 
	(
		cd super &&
		git submodule add --reference ../B --dissociate "file://$base_dir/A" sub-dissociate &&
		git commit -m B-super-added &&
		git repack -ad
	) &&
	test_path_is_missing super/.git/modules/sub-dissociate/objects/info/alternates

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super/sub-dissociate'...
[master 230494f] B-super-added
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub-dissociate
ok 6 - submodule add --reference with --dissociate does not use alternates

expecting success of 7408.7 'that reference gets used with add': 
	(
		cd super/sub &&
		echo "0 objects, 0 kilobytes" >expected &&
		git count-objects >current &&
		diff expected current
	)

ok 7 - that reference gets used with add

expecting success of 7408.8 'updating superproject keeps alternates': 
	test_when_finished "rm -rf super-clone" &&
	git clone super super-clone &&
	git -C super-clone submodule update --init --reference ../B &&
	test_alternate_is_used super-clone/.git/modules/sub/objects/info/alternates super-clone/sub

Cloning into 'super-clone'...
done.
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub-dissociate'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub-dissociate'...
Submodule path 'sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 8 - updating superproject keeps alternates

expecting success of 7408.9 'updating superproject with --dissociate does not keep alternates': 
	test_when_finished "rm -rf super-clone" &&
	git clone super super-clone &&
	git -C super-clone submodule update --init --reference ../B --dissociate &&
	test_path_is_missing super-clone/.git/modules/sub/objects/info/alternates

Cloning into 'super-clone'...
done.
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub-dissociate'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub-dissociate'...
Submodule path 'sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 9 - updating superproject with --dissociate does not keep alternates

expecting success of 7408.10 'submodules use alternates when cloning a superproject': 
	test_when_finished "rm -rf super-clone" &&
	git clone --reference super --recursive super super-clone &&
	(
		cd super-clone &&
		# test superproject has alternates setup correctly
		test_alternate_is_used .git/objects/info/alternates . &&
		# test submodule has correct setup
		test_alternate_is_used .git/modules/sub/objects/info/alternates sub
	)

Cloning into 'super-clone'...
done.
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub-dissociate'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub-dissociate'...
Submodule path 'sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 10 - submodules use alternates when cloning a superproject

expecting success of 7408.11 'missing submodule alternate fails clone and submodule update': 
	test_when_finished "rm -rf super-clone" &&
	git clone super super2 &&
	test_must_fail git clone --recursive --reference super2 super2 super-clone &&
	(
		cd super-clone &&
		# test superproject has alternates setup correctly
		test_alternate_is_used .git/objects/info/alternates . &&
		# update of the submodule succeeds
		test_must_fail git submodule update --init &&
		# and we have no alternates:
		test_path_is_missing .git/modules/sub/objects/info/alternates &&
		test_path_is_missing sub/file1
	)

Cloning into 'super2'...
done.
Cloning into 'super-clone'...
done.
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub-dissociate'
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub/' does not exist
Failed to clone 'sub'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub-dissociate' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub-dissociate/' does not exist
Failed to clone 'sub-dissociate'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub/' does not exist
Failed to clone 'sub' a second time, aborting
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub/' does not exist
Failed to clone 'sub'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub-dissociate' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub-dissociate/' does not exist
Failed to clone 'sub-dissociate'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub/' does not exist
Failed to clone 'sub' a second time, aborting
ok 11 - missing submodule alternate fails clone and submodule update

expecting success of 7408.12 'ignoring missing submodule alternates passes clone and submodule update': 
	test_when_finished "rm -rf super-clone" &&
	git clone --reference-if-able super2 --recursive super2 super-clone &&
	(
		cd super-clone &&
		# test superproject has alternates setup correctly
		test_alternate_is_used .git/objects/info/alternates . &&
		# update of the submodule succeeds
		git submodule update --init &&
		# and we have no alternates:
		test_path_is_missing .git/modules/sub/objects/info/alternates &&
		test_path_is_file sub/file1
	)

Cloning into 'super-clone'...
done.
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'sub-dissociate'
submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub/' does not exist
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub'...
submodule 'sub-dissociate' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super2/.git/modules/sub-dissociate/' does not exist
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super-clone/sub-dissociate'...
Submodule path 'sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 12 - ignoring missing submodule alternates passes clone and submodule update

expecting success of 7408.13 'preparing second superproject with a nested submodule plus partial clone': 
	test_create_repo supersuper &&
	(
		cd supersuper &&
		echo "I am super super." >file &&
		git add file &&
		git commit -m B-super-super-initial &&
		git submodule add "file://$base_dir/super" subwithsub &&
		git commit -m B-super-super-added &&
		git submodule update --init --recursive &&
		git repack -ad
	) &&
	git clone supersuper supersuper2 &&
	(
		cd supersuper2 &&
		git submodule update --init
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper/.git/
[master (root-commit) c928525] B-super-super-initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper/subwithsub'...
[master 84f40cc] B-super-super-added
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subwithsub
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub-dissociate'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper/subwithsub/sub'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper/subwithsub/sub-dissociate'...
Submodule path 'subwithsub/sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'subwithsub/sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Cloning into 'supersuper2'...
done.
Submodule 'subwithsub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super) registered for path 'subwithsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/subwithsub'...
Submodule path 'subwithsub': checked out '230494f660047c75647d471ed330c543d13eb07e'
ok 13 - preparing second superproject with a nested submodule plus partial clone

expecting success of 7408.14 'nested submodule alternate in works and is actually used': 
	test_when_finished "rm -rf supersuper-clone" &&
	git clone --recursive --reference supersuper supersuper supersuper-clone &&
	(
		cd supersuper-clone &&
		# test superproject has alternates setup correctly
		test_alternate_is_used .git/objects/info/alternates . &&
		# immediate submodule has alternate:
		test_alternate_is_used .git/modules/subwithsub/objects/info/alternates subwithsub &&
		# nested submodule also has alternate:
		test_alternate_is_used .git/modules/subwithsub/modules/sub/objects/info/alternates subwithsub/sub
	)

Cloning into 'supersuper-clone'...
done.
Submodule 'subwithsub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super) registered for path 'subwithsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub'...
Submodule path 'subwithsub': checked out '230494f660047c75647d471ed330c543d13eb07e'
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub-dissociate'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub/sub'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub/sub-dissociate'...
Submodule path 'subwithsub/sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'subwithsub/sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 14 - nested submodule alternate in works and is actually used

expecting success of 7408.15 'missing nested submodule alternate fails clone and submodule update': 
	test_when_finished "rm -rf supersuper-clone" &&
	test_must_fail git clone --recursive --reference supersuper2 supersuper2 supersuper-clone &&
	(
		cd supersuper-clone &&
		check_that_two_of_three_alternates_are_used &&
		# update of the submodule fails
		cat >expect <<-\EOF &&
		fatal: submodule 'sub' cannot add alternate: path ... does not exist
		Failed to clone 'sub'. Retry scheduled
		fatal: submodule 'sub-dissociate' cannot add alternate: path ... does not exist
		Failed to clone 'sub-dissociate'. Retry scheduled
		fatal: submodule 'sub' cannot add alternate: path ... does not exist
		Failed to clone 'sub' a second time, aborting
		fatal: Failed to recurse into submodule path ...
		EOF
		test_must_fail git submodule update --init --recursive 2>err &&
		grep -e fatal: -e ^Failed err >actual.raw &&
		sed -e "s/path $SQ[^$SQ]*$SQ/path .../" <actual.raw >actual &&
		test_cmp expect actual
	)

Cloning into 'supersuper-clone'...
done.
Submodule 'subwithsub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super) registered for path 'subwithsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub'...
Submodule path 'subwithsub': checked out '230494f660047c75647d471ed330c543d13eb07e'
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub-dissociate'
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/.git/modules/subwithsub/modules/sub/' does not exist
Failed to clone 'sub'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub-dissociate' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/.git/modules/subwithsub/modules/sub-dissociate/' does not exist
Failed to clone 'sub-dissociate'. Retry scheduled
hint: An alternate computed from a superproject's alternate is invalid.
hint: To allow Git to clone without an alternate in such a case, set
hint: submodule.alternateErrorStrategy to 'info' or, equivalently, clone with
hint: '--reference-if-able' instead of '--reference'.
fatal: submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/.git/modules/subwithsub/modules/sub/' does not exist
Failed to clone 'sub' a second time, aborting
fatal: Failed to recurse into submodule path 'subwithsub'
ok 15 - missing nested submodule alternate fails clone and submodule update

expecting success of 7408.16 'missing nested submodule alternate in --reference-if-able mode': 
	test_when_finished "rm -rf supersuper-clone" &&
	git clone --recursive --reference-if-able supersuper2 supersuper2 supersuper-clone &&
	(
		cd supersuper-clone &&
		check_that_two_of_three_alternates_are_used &&
		# update of the submodule succeeds
		git submodule update --init --recursive
	)

Cloning into 'supersuper-clone'...
done.
Submodule 'subwithsub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/super) registered for path 'subwithsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub'...
Submodule path 'subwithsub': checked out '230494f660047c75647d471ed330c543d13eb07e'
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub'
Submodule 'sub-dissociate' (file:///<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/A) registered for path 'subwithsub/sub-dissociate'
submodule 'sub' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/.git/modules/subwithsub/modules/sub/' does not exist
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub/sub'...
submodule 'sub-dissociate' cannot add alternate: path '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper2/.git/modules/subwithsub/modules/sub-dissociate/' does not exist
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7408-submodule-reference/supersuper-clone/subwithsub/sub-dissociate'...
Submodule path 'subwithsub/sub': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
Submodule path 'subwithsub/sub-dissociate': checked out '3f492fa355d2b55bd9e19f5535ac5e32c035e10f'
ok 16 - missing nested submodule alternate in --reference-if-able mode

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7409-submodule-detached-work-tree.sh ***
expecting success of 7409.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7409.2 'submodule on detached working tree': 
	git init --bare remote &&
	test_create_repo bundle1 &&
	(
		cd bundle1 &&
		test_commit "shoot" &&
		git rev-parse --verify HEAD >../expect
	) &&
	mkdir home &&
	(
		cd home &&
		GIT_WORK_TREE="$(pwd)" &&
		GIT_DIR="$(pwd)/.dotfiles" &&
		export GIT_WORK_TREE GIT_DIR &&
		git clone --bare ../remote .dotfiles &&
		git submodule add ../bundle1 .vim/bundle/sogood &&
		test_commit "sogood" &&
		(
			unset GIT_WORK_TREE GIT_DIR &&
			cd .vim/bundle/sogood &&
			git rev-parse --verify HEAD >actual &&
			test_cmp ../../../../expect actual
		) &&
		git push origin main
	) &&
	mkdir home2 &&
	(
		cd home2 &&
		git clone --bare ../remote .dotfiles &&
		GIT_WORK_TREE="$(pwd)" &&
		GIT_DIR="$(pwd)/.dotfiles" &&
		export GIT_WORK_TREE GIT_DIR &&
		git checkout main &&
		git submodule update --init &&
		(
			unset GIT_WORK_TREE GIT_DIR &&
			cd .vim/bundle/sogood &&
			git rev-parse --verify HEAD >actual &&
			test_cmp ../../../../expect actual
		)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/remote/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/bundle1/.git/
[main (root-commit) d074fcf] shoot
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 shoot.t
Cloning into bare repository '.dotfiles'...
warning: You appear to have cloned an empty repository.
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home/.vim/bundle/sogood'...
done.
[main (root-commit) 2f89248] sogood
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 .vim/bundle/sogood
 create mode 100644 sogood.t
To /<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home/../remote
 * [new branch]      main -> main
Cloning into bare repository '.dotfiles'...
done.
Already on 'main'
Submodule '.vim/bundle/sogood' (/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home2/../bundle1) registered for path '.vim/bundle/sogood'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home2/.vim/bundle/sogood'...
done.
Submodule path '.vim/bundle/sogood': checked out 'd074fcf17f7c15e9e139fe2d6e7ca796a5e616e7'
ok 2 - submodule on detached working tree

expecting success of 7409.3 'submodule on detached working pointed by core.worktree': 
	mkdir home3 &&
	(
		cd home3 &&
		GIT_DIR="$(pwd)/.dotfiles" &&
		export GIT_DIR &&
		git clone --bare ../remote "$GIT_DIR" &&
		git config core.bare false &&
		git config core.worktree .. &&
		git checkout main &&
		git submodule add ../bundle1 .vim/bundle/dupe &&
		test_commit "dupe" &&
		git push origin main
	) &&
	(
		cd home &&
		GIT_DIR="$(pwd)/.dotfiles" &&
		export GIT_DIR &&
		git config core.bare false &&
		git config core.worktree .. &&
		git pull &&
		git submodule update --init &&
		test -f .vim/bundle/dupe/shoot.t
	)

Cloning into bare repository '/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home3/.dotfiles'...
done.
Already on 'main'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home3/.vim/bundle/dupe'...
done.
[main e996493] dupe
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 160000 .vim/bundle/dupe
 create mode 100644 dupe.t
To /<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home3/../remote
   2f89248..e996493  main -> main
From /<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home/../remote
 * branch            HEAD       -> FETCH_HEAD
Updating 2f89248..e996493
Fast-forward
 .gitmodules      | 3 +++
 .vim/bundle/dupe | 1 +
 dupe.t           | 1 +
 3 files changed, 5 insertions(+)
 create mode 160000 .vim/bundle/dupe
 create mode 100644 dupe.t
Submodule '.vim/bundle/dupe' (/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home/../bundle1) registered for path '.vim/bundle/dupe'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7409-submodule-detached-work-tree/home/.vim/bundle/dupe'...
done.
Submodule path '.vim/bundle/dupe': checked out 'd074fcf17f7c15e9e139fe2d6e7ca796a5e616e7'
ok 3 - submodule on detached working pointed by core.worktree

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7411-submodule-config.sh ***
expecting success of 7411.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7411.2 'submodule config cache setup': 
	mkdir submodule &&
	(cd submodule &&
		git init &&
		echo a >a &&
		git add . &&
		git commit -ma
	) &&
	mkdir super &&
	(cd super &&
		git init &&
		git submodule add ../submodule &&
		git submodule add ../submodule a &&
		git commit -m "add as submodule and as a" &&
		git mv a b &&
		git commit -m "move a to b"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/submodule/.git/
[master (root-commit) 7bdc13c] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/super/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/super/submodule'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/super/a'...
done.
[master (root-commit) 27cd28d] add as submodule and as a
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 a
 create mode 160000 submodule
[master c15eddb] move a to b
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename a => b (100%)
ok 2 - submodule config cache setup

expecting success of 7411.3 'configuration parsing with error': 
	test_when_finished "rm -rf repo" &&
	test_create_repo repo &&
	cat >repo/.gitmodules <<-\EOF &&
	[submodule "s"]
		path
		ignore
	EOF
	(
		cd repo &&
		test_must_fail test-tool submodule-config "" s 2>actual &&
		test_i18ngrep "bad config" actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/repo/.git/
fatal: bad config line 2 in file /<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/repo/.gitmodules
ok 3 - configuration parsing with error

expecting success of 7411.4 'test parsing and lookup of submodule config by path': 
	(cd super &&
		test-tool submodule-config \
			HEAD^ a \
			HEAD b \
			HEAD^ submodule \
			HEAD submodule \
				>actual &&
		test_cmp expect actual
	)

ok 4 - test parsing and lookup of submodule config by path

expecting success of 7411.5 'test parsing and lookup of submodule config by name': 
	(cd super &&
		test-tool submodule-config --name \
			HEAD^ a \
			HEAD a \
			HEAD^ submodule \
			HEAD submodule \
				>actual &&
		test_cmp expect actual
	)

ok 5 - test parsing and lookup of submodule config by name

expecting success of 7411.6 'error in history of one submodule config lets continue, stderr message contains blob ref': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		cp .gitmodules .gitmodules.bak &&
		echo "	value = \"" >>.gitmodules &&
		git add .gitmodules &&
		mv .gitmodules.bak .gitmodules &&
		git commit -m "add error" &&
		sha1=$(git rev-parse HEAD) &&
		test-tool submodule-config \
			HEAD b \
			HEAD submodule \
				>actual \
				2>actual_stderr &&
		test_cmp expect_error actual &&
		test_i18ngrep "submodule-blob $sha1:.gitmodules" actual_stderr >/dev/null
	)

[master a5e5db0] add error
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at c15eddb move a to b
ok 6 - error in history of one submodule config lets continue, stderr message contains blob ref

expecting success of 7411.7 'using different treeishs works': 
	(
		cd super &&
		git tag new_tag &&
		tree=$(git rev-parse HEAD^{tree}) &&
		commit=$(git rev-parse HEAD^{commit}) &&
		test-tool submodule-config $commit b >expect &&
		test-tool submodule-config $tree b >actual.1 &&
		test-tool submodule-config new_tag b >actual.2 &&
		test_cmp expect actual.1 &&
		test_cmp expect actual.2
	)

ok 7 - using different treeishs works

expecting success of 7411.8 'error in history in fetchrecursesubmodule lets continue': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		git config -f .gitmodules \
			submodule.submodule.fetchrecursesubmodules blabla &&
		git add .gitmodules &&
		git config --unset -f .gitmodules \
			submodule.submodule.fetchrecursesubmodules &&
		git commit -m "add error in fetchrecursesubmodules" &&
		test-tool submodule-config \
			HEAD b \
			HEAD submodule \
				>actual &&
		test_cmp expect_error actual
	)

[master ea57126] add error in fetchrecursesubmodules
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at c15eddb move a to b
ok 8 - error in history in fetchrecursesubmodule lets continue

expecting success of 7411.9 'reading submodules config from the working tree': 
	(cd super &&
		echo "../submodule" >expect &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_cmp expect actual
	)

ok 9 - reading submodules config from the working tree

expecting success of 7411.10 'unsetting submodules config from the working tree': 
	(cd super &&
		test-tool submodule config-unset submodule.submodule.url &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_must_be_empty actual
	)

ok 10 - unsetting submodules config from the working tree

expecting success of 7411.11 'writing submodules config': 
	(cd super &&
		echo "new_url" >expect &&
		test-tool submodule config-set submodule.submodule.url "new_url" &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_cmp expect actual
	)

ok 11 - writing submodules config

expecting success of 7411.12 'overwriting unstaged submodules config': 
	test_when_finished "git -C super checkout .gitmodules" &&
	(cd super &&
		echo "newer_url" >expect &&
		test-tool submodule config-set submodule.submodule.url "newer_url" &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_cmp expect actual
	)

Updated 1 path from the index
ok 12 - overwriting unstaged submodules config

expecting success of 7411.13 'writeable .gitmodules when it is in the working tree': 
	test-tool -C super submodule config-writeable

ok 13 - writeable .gitmodules when it is in the working tree

expecting success of 7411.14 'writeable .gitmodules when it is nowhere in the repository': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		git rm .gitmodules &&
		git commit -m "remove .gitmodules from the current branch" &&
		test-tool submodule config-writeable
	)

rm '.gitmodules'
[master d504b72] remove .gitmodules from the current branch
 Author: A U Thor <author@example.com>
 1 file changed, 6 deletions(-)
 delete mode 100644 .gitmodules
HEAD is now at c15eddb move a to b
ok 14 - writeable .gitmodules when it is nowhere in the repository

expecting success of 7411.15 'non-writeable .gitmodules when it is in the index but not in the working tree': 
	test_when_finished "git -C super checkout .gitmodules" &&
	(cd super &&
		rm -f .gitmodules &&
		test_must_fail test-tool submodule config-writeable
	)

Updated 1 path from the index
ok 15 - non-writeable .gitmodules when it is in the index but not in the working tree

expecting success of 7411.16 'non-writeable .gitmodules when it is in the current branch but not in the index': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		git rm .gitmodules &&
		test_must_fail test-tool submodule config-writeable
	)

rm '.gitmodules'
HEAD is now at c15eddb move a to b
ok 16 - non-writeable .gitmodules when it is in the current branch but not in the index

expecting success of 7411.17 'reading submodules config from the index when .gitmodules is not in the working tree': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		test-tool submodule config-set submodule.submodule.url "staged_url" &&
		git add .gitmodules &&
		rm -f .gitmodules &&
		echo "staged_url" >expect &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_cmp expect actual
	)

HEAD is now at c15eddb move a to b
ok 17 - reading submodules config from the index when .gitmodules is not in the working tree

expecting success of 7411.18 'reading submodules config from the current branch when .gitmodules is not in the index': 
	ORIG=$(git -C super rev-parse HEAD) &&
	test_when_finished "git -C super reset --hard $ORIG" &&
	(cd super &&
		git rm .gitmodules &&
		echo "../submodule" >expect &&
		test-tool submodule config-list submodule.submodule.url >actual &&
		test_cmp expect actual
	)

rm '.gitmodules'
HEAD is now at c15eddb move a to b
ok 18 - reading submodules config from the current branch when .gitmodules is not in the index

expecting success of 7411.19 'reading nested submodules config': 
	(cd super &&
		git init submodule/nested_submodule &&
		echo "a" >submodule/nested_submodule/a &&
		git -C submodule/nested_submodule add a &&
		git -C submodule/nested_submodule commit -m "add a" &&
		git -C submodule submodule add ./nested_submodule &&
		git -C submodule add nested_submodule &&
		git -C submodule commit -m "added nested_submodule" &&
		git add submodule &&
		git commit -m "updated submodule" &&
		echo "./nested_submodule" >expect &&
		test-tool submodule-nested-repo-config \
			submodule submodule.nested_submodule.url >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7411-submodule-config/super/submodule/nested_submodule/.git/
[master (root-commit) 925677c] add a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Adding existing repo at 'nested_submodule' to the index
[master 62f7fd8] added nested_submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 nested_submodule
[master c00b231] updated submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - reading nested submodules config

expecting success of 7411.20 'reading nested submodules config when .gitmodules is not in the working tree': 
	test_when_finished "git -C super/submodule checkout .gitmodules" &&
	(cd super &&
		echo "./nested_submodule" >expect &&
		rm submodule/.gitmodules &&
		test-tool submodule-nested-repo-config \
			submodule submodule.nested_submodule.url >actual 2>warning &&
		test_must_be_empty warning &&
		test_cmp expect actual
	)

Updated 1 path from the index
ok 20 - reading nested submodules config when .gitmodules is not in the working tree

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7406-submodule-update.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/.git/
expecting success of 7406.1 'setup a submodule tree': 
	git config --global protocol.file.allow always &&
	echo file > file &&
	git add file &&
	test_tick &&
	git commit -m upstream &&
	git clone . super &&
	git clone super submodule &&
	git clone super rebasing &&
	git clone super merging &&
	git clone super none &&
	(cd super &&
	 git submodule add ../submodule submodule &&
	 test_tick &&
	 git commit -m "submodule" &&
	 git submodule init submodule
	) &&
	(cd submodule &&
	echo "line2" > file &&
	git add file &&
	git commit -m "Commit 2"
	) &&
	(cd super &&
	 (cd submodule &&
	  git pull --rebase origin
	 ) &&
	 git add submodule &&
	 git commit -m "submodule update"
	) &&
	(cd super &&
	 git submodule add ../rebasing rebasing &&
	 test_tick &&
	 git commit -m "rebasing"
	) &&
	(cd super &&
	 git submodule add ../merging merging &&
	 test_tick &&
	 git commit -m "rebasing"
	) &&
	(cd super &&
	 git submodule add ../none none &&
	 test_tick &&
	 git commit -m "none"
	) &&
	git clone . recursivesuper &&
	( cd recursivesuper &&
	 git submodule add ../super super
	)

[main (root-commit) 0c90624] upstream
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into 'super'...
done.
Cloning into 'submodule'...
done.
Cloning into 'rebasing'...
done.
Cloning into 'merging'...
done.
Cloning into 'none'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/submodule'...
done.
[main 3ae95bc] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
[main 4301fd3] Commit 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule
   0c90624..4301fd3  main       -> origin/main
Updating 0c90624..4301fd3
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[main fed7cea] submodule update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/rebasing'...
done.
[main 5366fa1] rebasing
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 rebasing
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/merging'...
done.
[main 7cb8417] rebasing
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 merging
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/none'...
done.
[main e1c6586] none
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 none
Cloning into 'recursivesuper'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/recursivesuper/super'...
done.
ok 1 - setup a submodule tree

expecting success of 7406.2 'update --remote falls back to using HEAD': 
	test_create_repo main-branch-submodule &&
	test_commit -C main-branch-submodule initial &&

	test_create_repo main-branch &&
	git -C main-branch submodule add ../main-branch-submodule &&
	git -C main-branch commit -m add-submodule &&

	git -C main-branch-submodule switch -c hello &&
	test_commit -C main-branch-submodule world &&

	git clone --recursive main-branch main-branch-clone &&
	git -C main-branch-clone submodule update --remote main-branch-submodule &&
	test_path_exists main-branch-clone/main-branch-submodule/world.t

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/main-branch-submodule/.git/
[main (root-commit) 5e30013] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/main-branch/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/main-branch/main-branch-submodule'...
done.
[main (root-commit) afd8121] add-submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 main-branch-submodule
Switched to a new branch 'hello'
[hello 5390c56] world
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world.t
Cloning into 'main-branch-clone'...
done.
Submodule 'main-branch-submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/main-branch-submodule) registered for path 'main-branch-submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/main-branch-clone/main-branch-submodule'...
done.
Submodule path 'main-branch-submodule': checked out '5e3001300c8a533bee3e24efd70fbfae3dfa27e3'
Submodule path 'main-branch-submodule': checked out '5390c56ee161c05a0e2e1d93e2ec9669e11defb7'
ok 2 - update --remote falls back to using HEAD

expecting success of 7406.3 'submodule update detaching the HEAD ': 
	(cd super/submodule &&
	 git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update submodule &&
	 cd submodule &&
	 ! compare_head
	)

HEAD is now at 0c90624 upstream
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 3 - submodule update detaching the HEAD 

expecting success of 7406.4 'submodule update from subdirectory': 
	(cd super/submodule &&
	 git reset --hard HEAD~1
	) &&
	mkdir super/sub &&
	(cd super/sub &&
	 (cd ../submodule &&
	  compare_head
	 ) &&
	 git submodule update ../submodule &&
	 cd ../submodule &&
	 ! compare_head
	)

HEAD is now at 0c90624 upstream
Submodule path '../submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 4 - submodule update from subdirectory

expecting success of 7406.5 'submodule update --init --recursive from subdirectory': 
	git -C recursivesuper/super reset --hard HEAD^ &&
	(cd recursivesuper &&
	 mkdir tmp &&
	 cd tmp &&
	 git submodule update --init --recursive ../super >../../actual 2>../../actual2
	) &&
	test_cmp expect actual &&
	sort actual2 >actual2.sorted &&
	test_cmp expect2 actual2.sorted

HEAD is now at 7cb8417 rebasing
ok 5 - submodule update --init --recursive from subdirectory

expecting success of 7406.6 'submodule update --init from and of subdirectory': 
	git init withsubs &&
	(cd withsubs &&
	 mkdir foo &&
	 git submodule add "$(pwd)/../rebasing" foo/sub &&
	 (cd foo &&
	  git submodule deinit -f sub &&
	  git submodule update --init sub 2>../../actual2
	 )
	) &&
	test_cmp expect2 actual2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/withsubs/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/withsubs/foo/sub'...
done.
Cleared directory 'sub'
Submodule 'foo/sub' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/withsubs/../rebasing) unregistered for path 'sub'
Submodule path 'sub': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
ok 6 - submodule update --init from and of subdirectory

expecting success of 7406.7 'submodule update does not fetch already present commits': 
	(cd submodule &&
	  echo line3 >> file &&
	  git add file &&
	  test_tick &&
	  git commit -m "upstream line3"
	) &&
	(cd super/submodule &&
	  head=$(git rev-parse --verify HEAD) &&
	  echo "Submodule path ${SQ}submodule$SQ: checked out $SQ$head$SQ" > ../../expected &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	  git submodule update > ../actual 2> ../actual.err
	) &&
	test_cmp expected actual &&
	test_must_be_empty actual.err

[main 640baa4] upstream line3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at 0c90624 upstream
ok 7 - submodule update does not fetch already present commits

expecting success of 7406.8 'submodule update should fail due to local changes': 
	(cd super/submodule &&
	 git reset --hard HEAD~1 &&
	 echo "local change" > file
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 test_must_fail git submodule update submodule 2>../actual.raw
	) &&
	sed "s/^> //" >expect <<-\EOF &&
	> error: Your local changes to the following files would be overwritten by checkout:
	> 	file
	> Please commit your changes or stash them before you switch branches.
	> Aborting
	> fatal: Unable to checkout OID in submodule path 'submodule'
	EOF
	sed -e "s/checkout $SQ[^$SQ]*$SQ/checkout OID/" <actual.raw >actual &&
	test_cmp expect actual


HEAD is now at 0c90624 upstream
ok 8 - submodule update should fail due to local changes

expecting success of 7406.9 'submodule update should throw away changes with --force ': 
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update --force submodule &&
	 cd submodule &&
	 ! compare_head
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 9 - submodule update should throw away changes with --force 

expecting success of 7406.10 'submodule update --force forcibly checks out submodules': 
	(cd super &&
	 (cd submodule &&
	  rm -f file
	 ) &&
	 git submodule update --force submodule &&
	 (cd submodule &&
	  test "$(git status -s file)" = ""
	 )
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 10 - submodule update --force forcibly checks out submodules

expecting success of 7406.11 'submodule update --remote should fetch upstream changes': 
	(cd submodule &&
	 echo line4 >> file &&
	 git add file &&
	 test_tick &&
	 git commit -m "upstream line4"
	) &&
	(cd super &&
	 git submodule update --remote --force submodule &&
	 cd submodule &&
	 test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline)"
	)

[main 2758ea9] upstream line4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule
   4301fd3..2758ea9  main       -> origin/main
Submodule path 'submodule': checked out '2758ea9cdd3f551b89e5fc3424c881031158c70d'
ok 11 - submodule update --remote should fetch upstream changes

expecting success of 7406.12 'submodule update --remote should fetch upstream changes with .': 
	(
		cd super &&
		git config -f .gitmodules submodule."submodule".branch "." &&
		git add .gitmodules &&
		git commit -m "submodules: update from the respective superproject branch"
	) &&
	(
		cd submodule &&
		echo line4a >> file &&
		git add file &&
		test_tick &&
		git commit -m "upstream line4a" &&
		git checkout -b test-branch &&
		test_commit on-test-branch
	) &&
	(
		cd super &&
		git submodule update --remote --force submodule &&
		git -C submodule log -1 --oneline >actual &&
		git -C ../submodule log -1 --oneline main >expect &&
		test_cmp expect actual &&
		git checkout -b test-branch &&
		git submodule update --remote --force submodule &&
		git -C submodule log -1 --oneline >actual &&
		git -C ../submodule log -1 --oneline test-branch >expect &&
		test_cmp expect actual &&
		git checkout main &&
		git branch -d test-branch &&
		git reset --hard HEAD^
	)

[main 5031a7c] submodules: update from the respective superproject branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main e64979d] upstream line4a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to a new branch 'test-branch'
[test-branch 6b9ecc1] on-test-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 on-test-branch.t
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule
   2758ea9..e64979d  main           -> origin/main
 * [new branch]      test-branch    -> origin/test-branch
 * [new tag]         on-test-branch -> on-test-branch
Submodule path 'submodule': checked out 'e64979d13b9a9301a3030b8c005b1d9fd5397a44'
Switched to a new branch 'test-branch'
Submodule path 'submodule': checked out '6b9ecc16dba533ab8642ff93fc3b7fe9267a8c51'
Switched to branch 'main'
M	submodule
Your branch is ahead of 'origin/main' by 6 commits.
  (use "git push" to publish your local commits)
Deleted branch test-branch (was 5031a7c).
HEAD is now at e1c6586 none
ok 12 - submodule update --remote should fetch upstream changes with .

expecting success of 7406.13 'local config should override .gitmodules branch': 
	(cd submodule &&
	 git checkout test-branch &&
	 echo line5 >> file &&
	 git add file &&
	 test_tick &&
	 git commit -m "upstream line5" &&
	 git checkout main
	) &&
	(cd super &&
	 git config submodule.submodule.branch test-branch &&
	 git submodule update --remote --force submodule &&
	 cd submodule &&
	 test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline test-branch)"
	)

Already on 'test-branch'
[test-branch 5124f33] upstream line5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 4 commits.
  (use "git push" to publish your local commits)
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule
   6b9ecc1..5124f33  test-branch -> origin/test-branch
Submodule path 'submodule': checked out '5124f33c895d18ac768733c2d5ce5a12240babd9'
ok 13 - local config should override .gitmodules branch

expecting success of 7406.14 'submodule update --rebase staying on main': 
	(cd super/submodule &&
	  git checkout main
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update --rebase submodule &&
	 cd submodule &&
	 compare_head
	)

Previous HEAD position was 5124f33 upstream line5
Switched to branch 'main'
Your branch is behind 'origin/main' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

                                                                                
Successfully rebased and updated refs/heads/main.
Submodule path 'submodule': rebased into '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 14 - submodule update --rebase staying on main

expecting success of 7406.15 'submodule update --merge staying on main': 
	(cd super/submodule &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update --merge submodule &&
	 cd submodule &&
	 compare_head
	)

HEAD is now at 0c90624 upstream
Updating 0c90624..4301fd3
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'submodule': merged in '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 15 - submodule update --merge staying on main

expecting success of 7406.16 'submodule update - rebase in .git/config': 
	(cd super &&
	 git config submodule.submodule.update rebase
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update submodule &&
	 cd submodule &&
	 compare_head
	)

HEAD is now at 0c90624 upstream

                                                                                
Successfully rebased and updated refs/heads/main.
Submodule path 'submodule': rebased into '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 16 - submodule update - rebase in .git/config

expecting success of 7406.17 'submodule update - checkout in .git/config but --rebase given': 
	(cd super &&
	 git config submodule.submodule.update checkout
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update --rebase submodule &&
	 cd submodule &&
	 compare_head
	)

HEAD is now at 0c90624 upstream

                                                                                
Successfully rebased and updated refs/heads/main.
Submodule path 'submodule': rebased into '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 17 - submodule update - checkout in .git/config but --rebase given

expecting success of 7406.18 'submodule update - merge in .git/config': 
	(cd super &&
	 git config submodule.submodule.update merge
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update submodule &&
	 cd submodule &&
	 compare_head
	)

HEAD is now at 0c90624 upstream
Updating 0c90624..4301fd3
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'submodule': merged in '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 18 - submodule update - merge in .git/config

expecting success of 7406.19 'submodule update - checkout in .git/config but --merge given': 
	(cd super &&
	 git config submodule.submodule.update checkout
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD~1
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update --merge submodule &&
	 cd submodule &&
	 compare_head
	)

HEAD is now at 0c90624 upstream
Updating 0c90624..4301fd3
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'submodule': merged in '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 19 - submodule update - checkout in .git/config but --merge given

expecting success of 7406.20 'submodule update - checkout in .git/config': 
	(cd super &&
	 git config submodule.submodule.update checkout
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD^
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update submodule &&
	 cd submodule &&
	 ! compare_head
	)

HEAD is now at 0c90624 upstream
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 20 - submodule update - checkout in .git/config

expecting success of 7406.21 'submodule update - command in .git/config': 
	(cd super &&
	 git config submodule.submodule.update "!git checkout"
	) &&
	(cd super/submodule &&
	  git reset --hard HEAD^
	) &&
	(cd super &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git submodule update submodule &&
	 cd submodule &&
	 ! compare_head
	)

HEAD is now at 0c90624 upstream
Previous HEAD position was 0c90624 upstream
HEAD is now at 4301fd3 Commit 2
Submodule path 'submodule': 'git checkout 4301fd3e4110d3b6212c19aed3094150392545b9'
ok 21 - submodule update - command in .git/config

expecting success of 7406.22 'submodule update - command in .gitmodules is rejected': 
	test_when_finished "git -C super reset --hard HEAD^" &&
	git -C super config -f .gitmodules submodule.submodule.update "!false" &&
	git -C super commit -a -m "add command to .gitmodules file" &&
	git -C super/submodule reset --hard $submodulesha1^ &&
	test_must_fail git -C super submodule update submodule

[main 9916237] add command to .gitmodules file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
HEAD is now at 0c90624 upstream
fatal: invalid value for 'submodule.submodule.update'
HEAD is now at e1c6586 none
ok 22 - submodule update - command in .gitmodules is rejected

expecting success of 7406.23 'fsck detects command in .gitmodules': 
	git init command-in-gitmodules &&
	(
		cd command-in-gitmodules &&
		git submodule add ../submodule submodule &&
		test_commit adding-submodule &&

		git config -f .gitmodules submodule.submodule.update "!false" &&
		git add .gitmodules &&
		test_commit configuring-update &&
		test_must_fail git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/command-in-gitmodules/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/command-in-gitmodules/submodule'...
done.
[main (root-commit) 54d926f] adding-submodule
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 adding-submodule.t
 create mode 160000 submodule
[main 663bd8b] configuring-update
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 configuring-update.t
error in blob 34075c13cf76fa2281e921a63acb1c52594ee0a0: gitmodulesUpdate: disallowed submodule update setting: !false
ok 23 - fsck detects command in .gitmodules

expecting success of 7406.24 'submodule update - command in .git/config catches failure': 
	(cd super &&
	 git config submodule.submodule.update "!false"
	) &&
	(cd super/submodule &&
	  git reset --hard $submodulesha1^
	) &&
	(cd super &&
	 test_must_fail git submodule update submodule 2>../actual
	) &&
	test_cmp actual expect

HEAD is now at 0c90624 upstream
ok 24 - submodule update - command in .git/config catches failure

expecting success of 7406.25 'submodule update - command in .git/config catches failure -- subdirectory': 
	(cd super &&
	 git config submodule.submodule.update "!false"
	) &&
	(cd super/submodule &&
	  git reset --hard $submodulesha1^
	) &&
	(cd super &&
	 mkdir tmp && cd tmp &&
	 test_must_fail git submodule update ../submodule 2>../../actual
	) &&
	test_cmp actual expect

HEAD is now at 0c90624 upstream
ok 25 - submodule update - command in .git/config catches failure -- subdirectory

expecting success of 7406.26 'submodule update - command run for initial population of submodule': 
	cat >expect <<-EOF &&
	fatal: Execution of 'false $submodulesha1' failed in submodule path 'submodule'
	EOF
	rm -rf super/submodule &&
	test_must_fail git -C super submodule update 2>actual &&
	test_cmp expect actual &&
	git -C super submodule update --checkout

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 26 - submodule update - command run for initial population of submodule

expecting success of 7406.27 'recursive submodule update - command in .git/config catches failure -- subdirectory': 
	(cd recursivesuper &&
	 git submodule update --remote super &&
	 git add super &&
	 git commit -m "update to latest to have more than one commit in submodules"
	) &&
	git -C recursivesuper/super config submodule.submodule.update "!false" &&
	git -C recursivesuper/super/submodule reset --hard $submodulesha1^ &&
	(cd recursivesuper &&
	 mkdir -p tmp && cd tmp &&
	 test_must_fail git submodule update --recursive ../super 2>../../actual
	) &&
	test_cmp actual expect

[main eae22a2] update to latest to have more than one commit in submodules
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 super
HEAD is now at 0c90624 upstream
ok 27 - recursive submodule update - command in .git/config catches failure -- subdirectory

expecting success of 7406.28 'submodule init does not copy command into .git/config': 
	test_when_finished "git -C super update-index --force-remove submodule1" &&
	test_when_finished git config -f super/.gitmodules \
		--remove-section submodule.submodule1 &&
	(cd super &&
	 git ls-files -s submodule >out &&
	 H=$(cut -d" " -f2 out) &&
	 mkdir submodule1 &&
	 git update-index --add --cacheinfo 160000 $H submodule1 &&
	 git config -f .gitmodules submodule.submodule1.path submodule1 &&
	 git config -f .gitmodules submodule.submodule1.url ../submodule &&
	 git config -f .gitmodules submodule.submodule1.update !false &&
	 test_must_fail git submodule init submodule1 &&
	 test_expect_code 1 git config submodule.submodule1.update >actual &&
	 test_must_be_empty actual
	)

fatal: invalid value for 'submodule.submodule1.update'
ok 28 - submodule init does not copy command into .git/config

expecting success of 7406.29 'submodule init picks up rebase': 
	(cd super &&
	 git config -f .gitmodules submodule.rebasing.update rebase &&
	 git submodule init rebasing &&
	 test "rebase" = "$(git config submodule.rebasing.update)"
	)

ok 29 - submodule init picks up rebase

expecting success of 7406.30 'submodule init picks up merge': 
	(cd super &&
	 git config -f .gitmodules submodule.merging.update merge &&
	 git submodule init merging &&
	 test "merge" = "$(git config submodule.merging.update)"
	)

ok 30 - submodule init picks up merge

expecting success of 7406.31 'submodule update --merge  - ignores --merge  for new submodules': 
	test_config -C super submodule.submodule.update checkout &&
	(cd super &&
	 rm -rf submodule &&
	 git submodule update submodule &&
	 git status -s submodule >expect &&
	 rm -rf submodule &&
	 git submodule update --merge submodule &&
	 git status -s submodule >actual &&
	 test_cmp expect actual
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 31 - submodule update --merge  - ignores --merge  for new submodules

expecting success of 7406.32 'submodule update --rebase - ignores --rebase for new submodules': 
	test_config -C super submodule.submodule.update checkout &&
	(cd super &&
	 rm -rf submodule &&
	 git submodule update submodule &&
	 git status -s submodule >expect &&
	 rm -rf submodule &&
	 git submodule update --rebase submodule &&
	 git status -s submodule >actual &&
	 test_cmp expect actual
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 32 - submodule update --rebase - ignores --rebase for new submodules

expecting success of 7406.33 'submodule update ignores update=merge config for new submodules': 
	(cd super &&
	 rm -rf submodule &&
	 git submodule update submodule &&
	 git status -s submodule >expect &&
	 rm -rf submodule &&
	 git config submodule.submodule.update merge &&
	 git submodule update submodule &&
	 git status -s submodule >actual &&
	 git config --unset submodule.submodule.update &&
	 test_cmp expect actual
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 33 - submodule update ignores update=merge config for new submodules

expecting success of 7406.34 'submodule update ignores update=rebase config for new submodules': 
	(cd super &&
	 rm -rf submodule &&
	 git submodule update submodule &&
	 git status -s submodule >expect &&
	 rm -rf submodule &&
	 git config submodule.submodule.update rebase &&
	 git submodule update submodule &&
	 git status -s submodule >actual &&
	 git config --unset submodule.submodule.update &&
	 test_cmp expect actual
	)

Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 34 - submodule update ignores update=rebase config for new submodules

expecting success of 7406.35 'submodule init picks up update=none': 
	(cd super &&
	 git config -f .gitmodules submodule.none.update none &&
	 git submodule init none &&
	 test "none" = "$(git config submodule.none.update)"
	)

ok 35 - submodule init picks up update=none

expecting success of 7406.36 'submodule update - update=none in .git/config': 
	(cd super &&
	 git config submodule.submodule.update none &&
	 (cd submodule &&
	  git checkout main &&
	  compare_head
	 ) &&
	 git diff --name-only >out &&
	 grep ^submodule$ out &&
	 git submodule update &&
	 git diff --name-only >out &&
	 grep ^submodule$ out &&
	 (cd submodule &&
	  compare_head
	 ) &&
	 git config --unset submodule.submodule.update &&
	 git submodule update submodule
	)

Previous HEAD position was 4301fd3 Commit 2
Switched to branch 'main'
Your branch is behind 'origin/main' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
submodule
Skipping submodule 'none'
Skipping submodule 'submodule'
submodule
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 36 - submodule update - update=none in .git/config

expecting success of 7406.37 'submodule update - update=none in .git/config but --checkout given': 
	(cd super &&
	 git config submodule.submodule.update none &&
	 (cd submodule &&
	  git checkout main &&
	  compare_head
	 ) &&
	 git diff --name-only >out &&
	 grep ^submodule$ out &&
	 git submodule update --checkout &&
	 git diff --name-only >out &&
	 ! grep ^submodule$ out &&
	 (cd submodule &&
	  ! compare_head
	 ) &&
	 git config --unset submodule.submodule.update
	)

Previous HEAD position was 4301fd3 Commit 2
Switched to branch 'main'
Your branch is behind 'origin/main' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
submodule
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 37 - submodule update - update=none in .git/config but --checkout given

expecting success of 7406.38 'submodule update --init skips submodule with update=none': 
	(cd super &&
	 git add .gitmodules &&
	 git commit -m ".gitmodules"
	) &&
	git clone super cloned &&
	(cd cloned &&
	 git submodule update --init &&
	 test_path_exists submodule/.git &&
	 test_path_is_missing none/.git
	)

[main aaa14d4] .gitmodules
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
Cloning into 'cloned'...
done.
Submodule 'merging' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/merging) registered for path 'merging'
Submodule 'none' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/none) registered for path 'none'
Submodule 'rebasing' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/rebasing) registered for path 'rebasing'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/cloned/merging'...
done.
Skipping submodule 'none'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/cloned/rebasing'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/cloned/submodule'...
done.
Submodule path 'merging': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'rebasing': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 38 - submodule update --init skips submodule with update=none

expecting success of 7406.39 'submodule update with pathspec warns against uninitialized ones': 
	test_when_finished "rm -fr selective" &&
	git clone super selective &&
	(
		cd selective &&
		git submodule init submodule &&

		git submodule update submodule 2>err &&
		! grep "Submodule path .* not initialized" err &&

		git submodule update rebasing 2>err &&
		grep "Submodule path .rebasing. not initialized" err &&

		test_path_exists submodule/.git &&
		test_path_is_missing rebasing/.git
	)


Cloning into 'selective'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'submodule'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
Submodule path 'rebasing' not initialized
ok 39 - submodule update with pathspec warns against uninitialized ones

expecting success of 7406.40 'submodule update without pathspec updates only initialized ones': 
	test_when_finished "rm -fr selective" &&
	git clone super selective &&
	(
		cd selective &&
		git submodule init submodule &&
		git submodule update 2>err &&
		test_path_exists submodule/.git &&
		test_path_is_missing rebasing/.git &&
		! grep "Submodule path .* not initialized" err
	)


Cloning into 'selective'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'submodule'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 40 - submodule update without pathspec updates only initialized ones

expecting success of 7406.41 'submodule update continues after checkout error': 
	(cd super &&
	 git reset --hard HEAD &&
	 git submodule add ../submodule submodule2 &&
	 git submodule init &&
	 git commit -am "new_submodule" &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../expect
	 ) &&
	 (cd submodule &&
	  test_commit "update_submodule" file
	 ) &&
	 (cd submodule2 &&
	  test_commit "update_submodule2" file
	 ) &&
	 git add submodule &&
	 git add submodule2 &&
	 git commit -m "two_new_submodule_commits" &&
	 (cd submodule &&
	  echo "" > file
	 ) &&
	 git checkout HEAD^ &&
	 test_must_fail git submodule update &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../actual
	 ) &&
	 test_cmp expect actual
	)

HEAD is now at aaa14d4 .gitmodules
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/submodule2'...
done.
[main eac0b19] new_submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 submodule2
[detached HEAD bf859b9] update_submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a877e2d] update_submodule2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
[main 589bc5b] two_new_submodule_commits
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at eac0b19 new_submodule
M	submodule
M	submodule2
Skipping submodule 'none'
error: Your local changes to the following files would be overwritten by checkout:
	file
Please commit your changes or stash them before you switch branches.
Aborting
fatal: Unable to checkout '4301fd3e4110d3b6212c19aed3094150392545b9' in submodule path 'submodule'
Submodule path 'submodule2': checked out 'e64979d13b9a9301a3030b8c005b1d9fd5397a44'
ok 41 - submodule update continues after checkout error

expecting success of 7406.42 'submodule update continues after recursive checkout error': 
	(cd super &&
	 git reset --hard HEAD &&
	 git checkout main &&
	 git submodule update &&
	 (cd submodule &&
	  git submodule add ../submodule subsubmodule &&
	  git submodule init &&
	  git commit -m "new_subsubmodule"
	 ) &&
	 git add submodule &&
	 git commit -m "update_submodule" &&
	 (cd submodule &&
	  (cd subsubmodule &&
	   test_commit "update_subsubmodule" file
	  ) &&
	  git add subsubmodule &&
	  test_commit "update_submodule_again" file &&
	  (cd subsubmodule &&
	   test_commit "update_subsubmodule_again" file
	  ) &&
	  test_commit "update_submodule_again_again" file
	 ) &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../expect &&
	  test_commit "update_submodule2_again" file
	 ) &&
	 git add submodule &&
	 git add submodule2 &&
	 git commit -m "new_commits" &&
	 git checkout HEAD^ &&
	 (cd submodule &&
	  git checkout HEAD^ &&
	  (cd subsubmodule &&
	   echo "" > file
	  )
	 ) &&
	 test_expect_code 1 git submodule update --recursive &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../actual
	 ) &&
	 test_cmp expect actual
	)

HEAD is now at eac0b19 new_submodule
Previous HEAD position was eac0b19 new_submodule
Switched to branch 'main'
M	submodule
M	submodule2
Your branch is ahead of 'origin/main' by 8 commits.
  (use "git push" to publish your local commits)
Skipping submodule 'none'
Submodule path 'submodule2': checked out 'a877e2d4bf03b4d9f4617d9894698a04062cafcb'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/submodule/subsubmodule'...
done.
[detached HEAD 13e98de] new_subsubmodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subsubmodule
[main 550d814] update_submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c5b9177] update_subsubmodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
[detached HEAD 7a52240] update_submodule_again
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
[main c86226f] update_subsubmodule_again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 36cba07] update_submodule_again_again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 6f5fed0] update_submodule2_again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main ddd1b9e] new_commits
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 550d814 update_submodule
M	submodule
M	submodule2
Previous HEAD position was 36cba07 update_submodule_again_again
HEAD is now at 7a52240 update_submodule_again
M	subsubmodule
Skipping submodule 'none'
Submodule path 'submodule': checked out '13e98de6d21cfd4c0d0ac89f9801423fd4a8848c'
error: Your local changes to the following files would be overwritten by checkout:
	file
Please commit your changes or stash them before you switch branches.
Aborting
fatal: Unable to checkout 'e64979d13b9a9301a3030b8c005b1d9fd5397a44' in submodule path 'submodule/subsubmodule'
fatal: Failed to recurse into submodule path 'submodule'
Submodule path 'submodule2': checked out 'a877e2d4bf03b4d9f4617d9894698a04062cafcb'
ok 42 - submodule update continues after recursive checkout error

expecting success of 7406.43 'submodule update exit immediately in case of merge conflict': 
	(cd super &&
	 git checkout main &&
	 git reset --hard HEAD &&
	 (cd submodule &&
	  (cd subsubmodule &&
	   git reset --hard HEAD
	  )
	 ) &&
	 git submodule update --recursive &&
	 (cd submodule &&
	  test_commit "update_submodule_2" file
	 ) &&
	 (cd submodule2 &&
	  test_commit "update_submodule2_2" file
	 ) &&
	 git add submodule &&
	 git add submodule2 &&
	 git commit -m "two_new_submodule_commits" &&
	 (cd submodule &&
	  git checkout main &&
	  test_commit "conflict" file &&
	  echo "conflict" > file
	 ) &&
	 git checkout HEAD^ &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../expect
	 ) &&
	 git config submodule.submodule.update merge &&
	 test_must_fail git submodule update &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../actual
	 ) &&
	 test_cmp expect actual
	)

Previous HEAD position was 550d814 update_submodule
Switched to branch 'main'
M	submodule
M	submodule2
Your branch is ahead of 'origin/main' by 10 commits.
  (use "git push" to publish your local commits)
HEAD is now at ddd1b9e new_commits
HEAD is now at c86226f update_subsubmodule_again
Skipping submodule 'none'
Submodule path 'submodule': checked out '36cba07de2dd3db68a7098ceff6e2441982207b1'
Submodule path 'submodule/subsubmodule': checked out 'c5b9177e5e719279dd558d927533a748252168f7'
Submodule path 'submodule2': checked out '6f5fed0da411cfed33516e12e385e026134bad56'
[detached HEAD ef00442] update_submodule_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD a8b9c2b] update_submodule2_2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main b5c2539] two_new_submodule_commits
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
warning: unable to rmdir 'subsubmodule': Directory not empty
Previous HEAD position was ef00442 update_submodule_2
Switched to branch 'main'
Your branch is behind 'origin/main' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
[main d727295] conflict
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at ddd1b9e new_commits
M	submodule
M	submodule2
Skipping submodule 'none'
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
fatal: Unable to merge '36cba07de2dd3db68a7098ceff6e2441982207b1' in submodule path 'submodule'
ok 43 - submodule update exit immediately in case of merge conflict

expecting success of 7406.44 'submodule update exit immediately after recursive rebase error': 
	(cd super &&
	 git checkout main &&
	 git reset --hard HEAD &&
	 (cd submodule &&
	  git reset --hard HEAD &&
	  git submodule update --recursive
	 ) &&
	 (cd submodule &&
	  test_commit "update_submodule_3" file
	 ) &&
	 (cd submodule2 &&
	  test_commit "update_submodule2_3" file
	 ) &&
	 git add submodule &&
	 git add submodule2 &&
	 git commit -m "two_new_submodule_commits" &&
	 (cd submodule &&
	  git checkout main &&
	  test_commit "conflict2" file &&
	  echo "conflict" > file
	 ) &&
	 git checkout HEAD^ &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../expect
	 ) &&
	 git config submodule.submodule.update rebase &&
	 test_must_fail git submodule update &&
	 (cd submodule2 &&
	  git rev-parse --verify HEAD >../actual
	 ) &&
	 test_cmp expect actual
	)

Previous HEAD position was ddd1b9e new_commits
Switched to branch 'main'
M	submodule
Your branch is ahead of 'origin/main' by 11 commits.
  (use "git push" to publish your local commits)
HEAD is now at b5c2539 two_new_submodule_commits
warning: unable to rmdir 'subsubmodule': Directory not empty
HEAD is now at d727295 conflict
[main b3ea5df] update_submodule_3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 9f300bf] update_submodule2_3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 45a22d0] two_new_submodule_commits
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Already on 'main'
Your branch and 'origin/main' have diverged,
and have 2 and 4 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
[main cf8450a] conflict2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b5c2539 two_new_submodule_commits
M	submodule
M	submodule2
Skipping submodule 'none'
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
fatal: Unable to rebase 'ef00442dab3d569479883a2d86505b87d824a88b' in submodule path 'submodule'
ok 44 - submodule update exit immediately after recursive rebase error

expecting success of 7406.45 'add different submodules to the same path': 
	(cd super &&
	 git submodule add ../submodule s1 &&
	 test_must_fail git submodule add ../merging s1
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/s1'...
done.
fatal: 's1' already exists in the index
ok 45 - add different submodules to the same path

expecting success of 7406.46 'submodule add places git-dir in superprojects git-dir': 
	(cd super &&
	 mkdir deeper &&
	 git submodule add ../submodule deeper/submodule &&
	 (cd deeper/submodule &&
	  git log > ../../expected
	 ) &&
	 (cd .git/modules/deeper/submodule &&
	  git log > ../../../../actual
	 ) &&
	 test_cmp expected actual
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super/deeper/submodule'...
done.
ok 46 - submodule add places git-dir in superprojects git-dir

expecting success of 7406.47 'submodule update places git-dir in superprojects git-dir': 
	(cd super &&
	 git commit -m "added submodule"
	) &&
	git clone super super2 &&
	(cd super2 &&
	 git submodule init deeper/submodule &&
	 git submodule update &&
	 (cd deeper/submodule &&
	  git log > ../../expected
	 ) &&
	 (cd .git/modules/deeper/submodule &&
	  git log > ../../../../actual
	 ) &&
	 test_cmp expected actual
	)

[detached HEAD 3a6f187] added submodule
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 160000 deeper/submodule
 create mode 160000 s1
Cloning into 'super2'...
done.
Note: switching to '3a6f1872cb4f0ffb018914be6f6215cb5d81f789'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Submodule 'deeper/submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'deeper/submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super2/deeper/submodule'...
done.
Skipping submodule 'none'
Submodule path 'deeper/submodule': checked out 'e64979d13b9a9301a3030b8c005b1d9fd5397a44'
ok 47 - submodule update places git-dir in superprojects git-dir

expecting success of 7406.48 'submodule add places git-dir in superprojects git-dir recursive': 
	(cd super2 &&
	 (cd deeper/submodule &&
	  git submodule add ../submodule subsubmodule &&
	  (cd subsubmodule &&
	   git log > ../../../expected
	  ) &&
	  git commit -m "added subsubmodule" &&
	  git push origin :
	 ) &&
	 (cd .git/modules/deeper/submodule/modules/subsubmodule &&
	  git log > ../../../../../actual
	 ) &&
	 git add deeper/submodule &&
	 git commit -m "update submodule" &&
	 git push origin : &&
	 test_cmp expected actual
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super2/deeper/submodule/subsubmodule'...
done.
[detached HEAD 0642c0f] added subsubmodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subsubmodule
Everything up-to-date
[detached HEAD 7b048b2] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Everything up-to-date
ok 48 - submodule add places git-dir in superprojects git-dir recursive

expecting success of 7406.49 'submodule update places git-dir in superprojects git-dir recursive': 
	mkdir super_update_r &&
	(cd super_update_r &&
	 git init --bare
	) &&
	mkdir subsuper_update_r &&
	(cd subsuper_update_r &&
	 git init --bare
	) &&
	mkdir subsubsuper_update_r &&
	(cd subsubsuper_update_r &&
	 git init --bare
	) &&
	git clone subsubsuper_update_r subsubsuper_update_r2 &&
	(cd subsubsuper_update_r2 &&
	 test_commit "update_subsubsuper" file &&
	 git push origin main
	) &&
	git clone subsuper_update_r subsuper_update_r2 &&
	(cd subsuper_update_r2 &&
	 test_commit "update_subsuper" file &&
	 git submodule add ../subsubsuper_update_r subsubmodule &&
	 git commit -am "subsubmodule" &&
	 git push origin main
	) &&
	git clone super_update_r super_update_r2 &&
	(cd super_update_r2 &&
	 test_commit "update_super" file &&
	 git submodule add ../subsuper_update_r submodule &&
	 git commit -am "submodule" &&
	 git push origin main
	) &&
	rm -rf super_update_r2 &&
	git clone super_update_r super_update_r2 &&
	(cd super_update_r2 &&
	 git submodule update --init --recursive >actual &&
	 test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&
	 (cd submodule/subsubmodule &&
	  git log > ../../expected
	 ) &&
	 (cd .git/modules/submodule/modules/subsubmodule &&
	  git log > ../../../../../actual
	 ) &&
	 test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super_update_r/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsuper_update_r/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsubsuper_update_r/
Cloning into 'subsubsuper_update_r2'...
warning: You appear to have cloned an empty repository.
done.
[main (root-commit) 0d20a78] update_subsubsuper
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
To /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsubsuper_update_r
 * [new branch]      main -> main
Cloning into 'subsuper_update_r2'...
warning: You appear to have cloned an empty repository.
done.
[main (root-commit) 635883b] update_subsuper
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsuper_update_r2/subsubmodule'...
done.
[main 86a3496] subsubmodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 subsubmodule
To /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsuper_update_r
 * [new branch]      main -> main
Cloning into 'super_update_r2'...
warning: You appear to have cloned an empty repository.
done.
[main (root-commit) c2de1fa] update_super
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super_update_r2/submodule'...
done.
[main 2d70acb] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
To /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super_update_r
 * [new branch]      main -> main
Cloning into 'super_update_r2'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsuper_update_r) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super_update_r2/submodule'...
done.
Submodule 'subsubmodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsubsuper_update_r) registered for path 'submodule/subsubmodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super_update_r2/submodule/subsubmodule'...
done.
Submodule path 'submodule/subsubmodule': checked out '0d20a783d558db53f3b7ea74da7db3bb1a32b21b'
ok 49 - submodule update places git-dir in superprojects git-dir recursive

expecting success of 7406.50 'submodule add properly re-creates deeper level submodules': 
	(cd super &&
	 git reset --hard main &&
	 rm -rf deeper/ &&
	 git submodule add --force ../submodule deeper/submodule
	)

warning: unable to rmdir 'deeper/submodule': Directory not empty
warning: unable to rmdir 's1': Directory not empty
HEAD is now at 45a22d0 two_new_submodule_commits
Reactivating local git directory for submodule 'deeper/submodule'
ok 50 - submodule add properly re-creates deeper level submodules

expecting success of 7406.51 'submodule update properly revives a moved submodule': 
	(cd super &&
	 H=$(git rev-parse --short HEAD) &&
	 git commit -am "pre move" &&
	 H2=$(git rev-parse --short HEAD) &&
	 git status >out &&
	 sed "s/$H/XXX/" out >expect &&
	 H=$(cd submodule2 && git rev-parse HEAD) &&
	 git rm --cached submodule2 &&
	 rm -rf submodule2 &&
	 mkdir -p "moved/sub module" &&
	 git update-index --add --cacheinfo 160000 $H "moved/sub module" &&
	 git config -f .gitmodules submodule.submodule2.path "moved/sub module" &&
	 git commit -am "post move" &&
	 git submodule update &&
	 git status > out &&
	 sed "s/$H2/XXX/" out >actual &&
	 test_cmp expect actual
	)

[detached HEAD d262110] pre move
 Author: A U Thor <author@example.com>
 3 files changed, 5 insertions(+), 1 deletion(-)
 create mode 160000 deeper/submodule
rm 'submodule2'
[detached HEAD db0a21b] post move
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename submodule2 => moved/sub module (100%)
Skipping submodule 'none'
Submodule path 'moved/sub module': checked out '9f300bf70a08f60a240990d98de1aaa8040994a1'
ok 51 - submodule update properly revives a moved submodule

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7406.52 'submodule update can handle symbolic links in pwd': 
	mkdir -p linked/dir &&
	ln -s linked/dir linkto &&
	(cd linkto &&
	 git clone "$TRASH_DIRECTORY"/super_update_r2 super &&
	 (cd super &&
	  git submodule update --init --recursive
	 )
	)

Cloning into 'super'...
done.
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsuper_update_r) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/linked/dir/super/submodule'...
done.
Submodule path 'submodule': checked out '86a3496a1d60636ce953ea5245c2a0f63a7a2aa8'
Submodule 'subsubmodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/subsubsuper_update_r) registered for path 'submodule/subsubmodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/linked/dir/super/submodule/subsubmodule'...
done.
Submodule path 'submodule/subsubmodule': checked out '0d20a783d558db53f3b7ea74da7db3bb1a32b21b'
ok 52 - submodule update can handle symbolic links in pwd

expecting success of 7406.53 'submodule update clone shallow submodule': 
	test_when_finished "rm -rf super3" &&
	first=$(git -C cloned rev-parse HEAD:submodule) &&
	second=$(git -C submodule rev-parse HEAD) &&
	commit_count=$(git -C submodule rev-list --count $first^..$second) &&
	git clone cloned super3 &&
	pwd=$(pwd) &&
	(
		cd super3 &&
		sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&
		mv -f .gitmodules.tmp .gitmodules &&
		git submodule update --init --depth=$commit_count &&
		git -C submodule log --oneline >out &&
		test_line_count = 1 out
	)

Cloning into 'super3'...
done.
Submodule 'merging' (file:///<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/merging) registered for path 'merging'
Submodule 'none' (file:///<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/none) registered for path 'none'
Submodule 'rebasing' (file:///<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/rebasing) registered for path 'rebasing'
Submodule 'submodule' (file:///<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super3/merging'...
Skipping submodule 'none'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super3/rebasing'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super3/submodule'...
Submodule path 'merging': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'rebasing': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 53 - submodule update clone shallow submodule

expecting success of 7406.54 'submodule update clone shallow submodule outside of depth': 
	test_when_finished "rm -rf super3" &&
	git clone cloned super3 &&
	pwd=$(pwd) &&
	(
		cd super3 &&
		sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&
		mv -f .gitmodules.tmp .gitmodules &&
		# Some protocol versions (e.g. 2) support fetching
		# unadvertised objects, so restrict this test to v0.
		test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 \
			git submodule update --init --depth=1 2>actual &&
		test_i18ngrep "Direct fetching of that commit failed." actual &&
		git -C ../submodule config uploadpack.allowReachableSHA1InWant true &&
		git submodule update --init --depth=1 >actual &&
		git -C submodule log --oneline >out &&
		test_line_count = 1 out
	)

Cloning into 'super3'...
done.
Submodule path 'merging': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'rebasing': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
fatal: Fetched in submodule path 'submodule', but it did not contain 4301fd3e4110d3b6212c19aed3094150392545b9. Direct fetching of that commit failed.
Skipping submodule 'none'
From file:///<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule
 * branch            4301fd3e4110d3b6212c19aed3094150392545b9 -> FETCH_HEAD
ok 54 - submodule update clone shallow submodule outside of depth

expecting success of 7406.55 'submodule update --recursive drops module name before recursing': 
	(cd super2 &&
	 (cd deeper/submodule/subsubmodule &&
	  git checkout HEAD^
	 ) &&
	 git submodule update --recursive deeper/submodule >actual &&
	 test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
	)

Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2758ea9 upstream line4
Submodule path 'deeper/submodule/subsubmodule': checked out 'e64979d13b9a9301a3030b8c005b1d9fd5397a44'
ok 55 - submodule update --recursive drops module name before recursing

expecting success of 7406.56 'submodule update can be run in parallel': 
	(cd super2 &&
	 GIT_TRACE=$(pwd)/trace.out git submodule update --jobs 7 &&
	 grep "7 tasks" trace.out &&
	 git config submodule.fetchJobs 8 &&
	 GIT_TRACE=$(pwd)/trace.out git submodule update &&
	 grep "8 tasks" trace.out &&
	 GIT_TRACE=$(pwd)/trace.out git submodule update --jobs 9 &&
	 grep "9 tasks" trace.out
	)

Skipping submodule 'none'
run_processes_parallel: preparing to run up to 7 tasks
Skipping submodule 'none'
run_processes_parallel: preparing to run up to 8 tasks
Skipping submodule 'none'
run_processes_parallel: preparing to run up to 9 tasks
ok 56 - submodule update can be run in parallel

expecting success of 7406.57 'git clone passes the parallel jobs config on to submodules': 
	test_when_finished "rm -rf super4" &&
	GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 7 . super4 &&
	grep "7 tasks" trace.out &&
	rm -rf super4 &&
	git config --global submodule.fetchJobs 8 &&
	GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules . super4 &&
	grep "8 tasks" trace.out &&
	rm -rf super4 &&
	GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 9 . super4 &&
	grep "9 tasks" trace.out &&
	rm -rf super4

Cloning into 'super4'...
done.
run_processes_parallel: preparing to run up to 7 tasks
Cloning into 'super4'...
done.
run_processes_parallel: preparing to run up to 8 tasks
Cloning into 'super4'...
done.
run_processes_parallel: preparing to run up to 9 tasks
ok 57 - git clone passes the parallel jobs config on to submodules

expecting success of 7406.58 'submodule update --quiet passes quietness to merge/rebase': 
	(cd super &&
	 test_commit -C rebasing message &&
	 git submodule update --rebase --quiet >out 2>err &&
	 test_must_be_empty out &&
	 test_must_be_empty err &&
	 git submodule update --rebase >out 2>err &&
	 test_file_not_empty out &&
	 test_must_be_empty err
	)

[main 271c4a7] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 message.t
ok 58 - submodule update --quiet passes quietness to merge/rebase

expecting success of 7406.59 'submodule update --quiet passes quietness to fetch with a shallow clone': 
	test_when_finished "rm -rf super4 super5 super6" &&
	git clone . super4 &&
	(cd super4 &&
	 git submodule add --quiet file://"$TRASH_DIRECTORY"/submodule submodule3 &&
	 git commit -am "setup submodule3"
	) &&
	(cd submodule &&
	  test_commit line6 file
	) &&
	git clone super4 super5 &&
	(cd super5 &&
	 git submodule update --quiet --init --depth=1 submodule3 >out 2>err &&
	 test_must_be_empty out &&
	 test_must_be_empty err
	) &&
	git clone super4 super6 &&
	(cd super6 &&
	 git submodule update --init --depth=1 submodule3 >out 2>err &&
	 test_file_not_empty out &&
	 test_file_not_empty err
	)

Cloning into 'super4'...
done.
[main 7cfcbb2] setup submodule3
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule3
[main a93a1f3] line6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
Cloning into 'super5'...
done.
Cloning into 'super6'...
done.
ok 59 - submodule update --quiet passes quietness to fetch with a shallow clone

expecting success of 7406.60 'submodule update --filter requires --init': 
	test_expect_code 129 git -C super submodule update --filter blob:none

usage: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]

    -f, --force           force checkout updates
    --init                initialize uninitialized submodules before update
    --remote              use SHA-1 of submodule's remote tracking branch
    --recursive           traverse submodules recursively
    -N, --no-fetch        don't fetch new objects from the remote site
    --checkout            use the 'checkout' update strategy (default)
    -m, --merge           use the 'merge' update strategy
    -r, --rebase          use the 'rebase' update strategy
    --reference <repo>    reference repository
    --dissociate          use --reference only while cloning
    --depth <n>           create a shallow clone truncated to the specified number of revisions
    -j, --jobs <n>        parallel jobs
    --recommend-shallow   whether the initial clone should follow the shallow recommendation
    -q, --quiet           don't print cloning progress
    --progress            force cloning progress
    --require-init        disallow cloning into non-empty directory, implies --init
    --single-branch       clone only one branch, HEAD or --branch
    --filter <args>       object filtering

ok 60 - submodule update --filter requires --init

expecting success of 7406.61 'submodule update --filter sets partial clone settings': 
	test_when_finished "rm -rf super-filter" &&
	git clone cloned super-filter &&
	git -C super-filter submodule update --init --filter blob:none &&
	test_cmp_config -C super-filter/submodule true remote.origin.promisor &&
	test_cmp_config -C super-filter/submodule blob:none remote.origin.partialclonefilter

Cloning into 'super-filter'...
done.
Submodule 'merging' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/merging) registered for path 'merging'
Submodule 'none' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/none) registered for path 'none'
Submodule 'rebasing' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/rebasing) registered for path 'rebasing'
Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/submodule) registered for path 'submodule'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super-filter/merging'...
warning: --filter is ignored in local clones; use file:// instead.
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super-filter/submodule'...
warning: --filter is ignored in local clones; use file:// instead.
done.
Skipping submodule 'none'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/super-filter/rebasing'...
warning: --filter is ignored in local clones; use file:// instead.
done.
Submodule path 'merging': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'rebasing': checked out '0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f'
Submodule path 'submodule': checked out '4301fd3e4110d3b6212c19aed3094150392545b9'
ok 61 - submodule update --filter sets partial clone settings

expecting success of 7406.62 'setup clean recursive superproject': 
	git init bottom &&
	test_commit -C bottom "bottom" &&
	git init middle &&
	git -C middle submodule add ../bottom bottom &&
	git -C middle commit -m "middle" &&
	git init top &&
	git -C top submodule add ../middle middle &&
	git -C top commit -m "top" &&
	git clone --recurse-submodules top top-clean

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/bottom/.git/
[main (root-commit) 581bdeb] bottom
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bottom.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/middle/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/middle/bottom'...
done.
[main (root-commit) 8c7b95e] middle
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 bottom
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/top/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/top/middle'...
done.
[main (root-commit) ab8145a] top
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 middle
Cloning into 'top-clean'...
done.
Submodule 'middle' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/middle) registered for path 'middle'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/top-clean/middle'...
done.
Submodule path 'middle': checked out '8c7b95e494a2782f61ae9299ca15d668e545d9a8'
Submodule 'bottom' (/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/bottom) registered for path 'middle/bottom'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/top-clean/middle/bottom'...
done.
Submodule path 'middle/bottom': checked out '581bdebe7becb965f64fee4b6315195d6f9b87df'
ok 62 - setup clean recursive superproject

expecting success of 7406.63 'submodule update should skip unmerged submodules': 
	test_when_finished "rm -fr top-cloned" &&
	cp -r top-clean top-cloned &&

	# Create an upstream commit in each repo, starting with bottom
	test_commit -C bottom upstream_commit &&
	# Create middle commit
	git -C middle/bottom fetch &&
	git -C middle/bottom checkout -f FETCH_HEAD &&
	git -C middle add bottom &&
	git -C middle commit -m "upstream_commit" &&
	# Create top commit
	git -C top/middle fetch &&
	git -C top/middle checkout -f FETCH_HEAD &&
	git -C top add middle &&
	git -C top commit -m "upstream_commit" &&

	# Create a downstream conflict
	test_commit -C top-cloned/middle/bottom downstream_commit &&
	git -C top-cloned/middle add bottom &&
	git -C top-cloned/middle commit -m "downstream_commit" &&
	git -C top-cloned/middle fetch --recurse-submodules origin &&
	test_must_fail git -C top-cloned/middle merge origin/main &&

	# Make the update of "middle" a no-op, otherwise we error out
	# because of its unmerged state
	test_config -C top-cloned submodule.middle.update !true &&
	git -C top-cloned submodule update --recursive 2>actual.err &&
	cat >expect.err <<-\EOF &&
	Skipping unmerged submodule middle/bottom
	EOF
	test_cmp expect.err actual.err

[main 1214144] upstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream_commit.t
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/bottom
   581bdeb..1214144  main            -> origin/main
 * [new tag]         upstream_commit -> upstream_commit
Note: switching to 'FETCH_HEAD'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 1214144 upstream_commit
[main 02206c0] upstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/middle
   8c7b95e..02206c0  main       -> origin/main
Note: switching to 'FETCH_HEAD'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 02206c0 upstream_commit
[main 3de434e] upstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[detached HEAD 732f4af] downstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 downstream_commit.t
[detached HEAD bd1874b] downstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/middle
   8c7b95e..02206c0  main       -> origin/main
Fetching submodule bottom
From /<<PKGBUILDDIR>>/t/trash directory.t7406-submodule-update/bottom
   581bdeb..1214144  main            -> origin/main
 * [new tag]         upstream_commit -> upstream_commit
Failed to merge submodule bottom
CONFLICT (submodule): Merge conflict in bottom
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (bottom), and either merge commit 1214144
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add bottom

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Submodule path 'middle': 'true 8c7b95e494a2782f61ae9299ca15d668e545d9a8'
ok 63 - submodule update should skip unmerged submodules

expecting success of 7406.64 'submodule update --recursive skip submodules with strategy=none': 
	test_when_finished "rm -fr top-cloned" &&
	cp -r top-clean top-cloned &&

	test_commit -C top-cloned/middle/bottom downstream_commit &&
	git -C top-cloned/middle config submodule.bottom.update none &&
	git -C top-cloned submodule update --recursive 2>actual.err &&
	cat >expect.err <<-\EOF &&
	Skipping submodule 'middle/bottom'
	EOF
	test_cmp expect.err actual.err

[detached HEAD 4ad2ba9] downstream_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 downstream_commit.t
ok 64 - submodule update --recursive skip submodules with strategy=none

# passed all 64 test(s)
1..64
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7412-submodule-absorbgitdirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/.git/
expecting success of 7412.1 'setup a real submodule': 
	git init sub1 &&
	test_commit -C sub1 first &&
	git submodule add ./sub1 &&
	test_tick &&
	git commit -m superproject

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Adding existing repo at 'sub1' to the index
[master (root-commit) 807c578] superproject
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
ok 1 - setup a real submodule

expecting success of 7412.2 'absorb the git dir': 
	>expect.1 &&
	>expect.2 &&
	>actual.1 &&
	>actual.2 &&
	git status >expect.1 &&
	git -C sub1 rev-parse HEAD >expect.2 &&
	git submodule absorbgitdirs &&
	git fsck &&
	test -f sub1/.git &&
	test -d .git/modules/sub1 &&
	git status >actual.1 &&
	git -C sub1 rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2

Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/.git/modules/sub1'
ok 2 - absorb the git dir

expecting success of 7412.3 'absorbing does not fail for deinitialized submodules': 
	test_when_finished "git submodule update --init" &&
	git submodule deinit --all &&
	git submodule absorbgitdirs &&
	test -d .git/modules/sub1 &&
	test -d sub1 &&
	! test -e sub1/.git

Cleared directory 'sub1'
Submodule 'sub1' (./sub1) unregistered for path 'sub1'
warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1) registered for path 'sub1'
Submodule path 'sub1': checked out '50e526bb426771f6036ad3a8b0c81d511d91fc2a'
ok 3 - absorbing does not fail for deinitialized submodules

expecting success of 7412.4 'setup nested submodule': 
	git init sub1/nested &&
	test_commit -C sub1/nested first_nested &&
	git -C sub1 submodule add ./nested &&
	test_tick &&
	git -C sub1 commit -m "add nested" &&
	git add sub1 &&
	git commit -m "sub1 to include nested submodule"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1/nested/.git/
[master (root-commit) 2139925] first_nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first_nested.t
Adding existing repo at 'nested' to the index
[detached HEAD 838ca49] add nested
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 nested
[master 4a7bb23] sub1 to include nested submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - setup nested submodule

expecting success of 7412.5 'absorb the git dir in a nested submodule': 
	git status >expect.1 &&
	git -C sub1/nested rev-parse HEAD >expect.2 &&
	git submodule absorbgitdirs &&
	test -f sub1/nested/.git &&
	test -d .git/modules/sub1/modules/nested &&
	git status >actual.1 &&
	git -C sub1/nested rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2

Migrating git directory of 'sub1/nested' from
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1/nested/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/.git/modules/sub1/modules/nested'
ok 5 - absorb the git dir in a nested submodule

expecting success of 7412.6 're-setup nested submodule': 
	# un-absorb the direct submodule, to test if the nested submodule
	# is still correct (needs a rewrite of the gitfile only)
	rm -rf sub1/.git &&
	mv .git/modules/sub1 sub1/.git &&
	GIT_WORK_TREE=. git -C sub1 config --unset core.worktree &&
	# fixup the nested submodule
	echo "gitdir: ../.git/modules/nested" >sub1/nested/.git &&
	GIT_WORK_TREE=../../../nested git -C sub1/.git/modules/nested config \
		core.worktree "../../../nested" &&
	# make sure this re-setup is correct
	git status --ignore-submodules=none &&

	# also make sure this old setup does not regress
	git submodule update --init --recursive >out 2>err &&
	test_must_be_empty out &&
	test_must_be_empty err

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual.1
	actual.2
	expect.1
	expect.2

nothing added to commit but untracked files present (use "git add" to track)
ok 6 - re-setup nested submodule

expecting success of 7412.7 'absorb the git dir in a nested submodule': 
	git status >expect.1 &&
	git -C sub1/nested rev-parse HEAD >expect.2 &&
	git submodule absorbgitdirs &&
	test -f sub1/.git &&
	test -f sub1/nested/.git &&
	test -d .git/modules/sub1/modules/nested &&
	git status >actual.1 &&
	git -C sub1/nested rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2

Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/.git/modules/sub1'
ok 7 - absorb the git dir in a nested submodule

expecting success of 7412.8 'setup a gitlink with missing .gitmodules entry': 
	git init sub2 &&
	test_commit -C sub2 first &&
	git add sub2 &&
	git commit -m superproject

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub2/.git/
[master (root-commit) 33e7427] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
warning: adding embedded git repository: sub2
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub2
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub2
hint: 
hint: See "git help submodule" for more information.
[master 23d83a4] superproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 160000 sub2
ok 8 - setup a gitlink with missing .gitmodules entry

expecting success of 7412.9 'absorbing the git dir fails for incomplete submodules': 
	git status >expect.1 &&
	git -C sub2 rev-parse HEAD >expect.2 &&
	test_must_fail git submodule absorbgitdirs &&
	git -C sub2 fsck &&
	test -d sub2/.git &&
	git status >actual &&
	git -C sub2 rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2

fatal: could not lookup name for submodule 'sub2'
ok 9 - absorbing the git dir fails for incomplete submodules

expecting success of 7412.10 'setup a submodule with multiple worktrees': 
	# first create another unembedded git dir in a new submodule
	git init sub3 &&
	test_commit -C sub3 first &&
	git submodule add ./sub3 &&
	test_tick &&
	git commit -m "add another submodule" &&
	git -C sub3 worktree add ../sub3_second_work_tree

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7412-submodule-absorbgitdirs/sub3/.git/
[master (root-commit) b9419e0] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
Adding existing repo at 'sub3' to the index
[master 8b0ea5c] add another submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 sub3
Preparing worktree (new branch 'sub3_second_work_tree')
HEAD is now at b9419e0 first
ok 10 - setup a submodule with multiple worktrees

expecting success of 7412.11 'absorbing fails for a submodule with multiple worktrees': 
	test_must_fail git submodule absorbgitdirs sub3 2>error &&
	test_i18ngrep "not supported" error

fatal: relocate_gitdir for submodule 'sub3' with more than one worktree not supported
ok 11 - absorbing fails for a submodule with multiple worktrees

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7414-submodule-mistakes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7414-submodule-mistakes/.git/
expecting success of 7414.1 'create embedded repository': 
	git init embed &&
	test_commit -C embed one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7414-submodule-mistakes/embed/.git/
[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - create embedded repository

expecting success of 7414.2 'git-add on embedded repository warns': 
	test_when_finished "git rm --cached -f embed" &&
	git add embed 2>stderr &&
	test_i18ngrep warning stderr

warning: adding embedded git repository: embed
rm 'embed'
ok 2 - git-add on embedded repository warns

expecting success of 7414.3 '--no-warn-embedded-repo suppresses warning': 
	test_when_finished "git rm --cached -f embed" &&
	git add --no-warn-embedded-repo embed 2>stderr &&
	test_i18ngrep ! warning stderr

rm 'embed'
ok 3 - --no-warn-embedded-repo suppresses warning

expecting success of 7414.4 'no warning when updating entry': 
	test_when_finished "git rm --cached -f embed" &&
	git add embed &&
	git -C embed commit --allow-empty -m two &&
	git add embed 2>stderr &&
	test_i18ngrep ! warning stderr

warning: adding embedded git repository: embed
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> embed
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached embed
hint: 
hint: See "git help submodule" for more information.
[master b0129aa] two
 Author: A U Thor <author@example.com>
rm 'embed'
ok 4 - no warning when updating entry

expecting success of 7414.5 'submodule add does not warn': 
	test_when_finished "git rm -rf submodule .gitmodules" &&
	git -c protocol.file.allow=always \
		submodule add ./embed submodule 2>stderr &&
	test_i18ngrep ! warning stderr

rm '.gitmodules'
rm 'submodule'
ok 5 - submodule add does not warn

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7400-submodule-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/.git/
expecting success of 7400.1 'setup - enable local submodules': 
	git config --global protocol.file.allow always

ok 1 - setup - enable local submodules

expecting success of 7400.2 'submodule usage: -h': 
	git submodule -h >out 2>err &&
	grep "^usage: git submodule" out &&
	test_must_be_empty err

usage: git submodule [--quiet] [--cached]
ok 2 - submodule usage: -h

expecting success of 7400.3 'submodule usage: --recursive': 
	test_expect_code 1 git submodule --recursive >out 2>err &&
	grep "^usage: git submodule" err &&
	test_must_be_empty out

usage: git submodule [--quiet] [--cached]
ok 3 - submodule usage: --recursive

expecting success of 7400.4 'submodule usage: status --': 
	test_expect_code 1 git submodule -- &&
	test_expect_code 1 git submodule --end-of-options

usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
   or: git submodule [--quiet] set-branch (--default|--branch <branch>) [--] <path>
   or: git submodule [--quiet] set-url [--] <path> <newurl>
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]
usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
   or: git submodule [--quiet] set-branch (--default|--branch <branch>) [--] <path>
   or: git submodule [--quiet] set-url [--] <path> <newurl>
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]
ok 4 - submodule usage: status --

expecting success of 7400.5 'submodule usage: status --quiet': 
		git submodule $opt &&
		git submodule status $opt &&
		git submodule $opt status
	
ok 5 - submodule usage: status --quiet

expecting success of 7400.6 'submodule usage: status --cached': 
		git submodule $opt &&
		git submodule status $opt &&
		git submodule $opt status
	
ok 6 - submodule usage: status --cached

expecting success of 7400.7 'submodule deinit works on empty repository': 
	git submodule deinit --all

ok 7 - submodule deinit works on empty repository

expecting success of 7400.8 'setup - initial commit': 
	>t &&
	git add t &&
	git commit -m "initial commit" &&
	git branch initial

[main (root-commit) 8f98e77] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
ok 8 - setup - initial commit

expecting success of 7400.9 'submodule init aborts on missing .gitmodules file': 
	test_when_finished "git update-index --remove sub" &&
	git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&
	# missing the .gitmodules file here
	test_must_fail git submodule init 2>actual &&
	test_i18ngrep "No url found for submodule path" actual

fatal: No url found for submodule path 'sub' in .gitmodules
ok 9 - submodule init aborts on missing .gitmodules file

expecting success of 7400.10 'submodule update aborts on missing .gitmodules file': 
	test_when_finished "git update-index --remove sub" &&
	git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&
	# missing the .gitmodules file here
	git submodule update sub 2>actual &&
	test_i18ngrep "Submodule path .sub. not initialized" actual

Submodule path 'sub' not initialized
ok 10 - submodule update aborts on missing .gitmodules file

expecting success of 7400.11 'submodule update aborts on missing gitmodules url': 
	test_when_finished "git update-index --remove sub" &&
	git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&
	test_when_finished "rm -f .gitmodules" &&
	git config -f .gitmodules submodule.s.path sub &&
	test_must_fail git submodule init

fatal: No url found for submodule path 'sub' in .gitmodules
ok 11 - submodule update aborts on missing gitmodules url

expecting success of 7400.12 'add aborts on repository with no commits': 
	cat >expect <<-\EOF &&
	fatal: 'repo-no-commits' does not have a commit checked out
	EOF
	git init repo-no-commits &&
	test_must_fail git submodule add ../a ./repo-no-commits 2>actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/repo-no-commits/.git/
ok 12 - add aborts on repository with no commits

expecting success of 7400.13 'status should ignore inner git repo when not added': 
	rm -fr inner &&
	mkdir inner &&
	(
		cd inner &&
		git init &&
		>t &&
		git add t &&
		git commit -m "initial"
	) &&
	test_must_fail git submodule status inner 2>output.err &&
	rm -fr inner &&
	test_i18ngrep "^error: .*did not match any file(s) known to git" output.err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/inner/.git/
[main (root-commit) 0ce53a8] initial
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
error: pathspec 'inner' did not match any file(s) known to git
ok 13 - status should ignore inner git repo when not added

expecting success of 7400.14 'setup - repository in init subdirectory': 
	mkdir init &&
	(
		cd init &&
		git init &&
		echo a >a &&
		git add a &&
		git commit -m "submodule commit 1" &&
		git tag -a -m "rev-1" rev-1
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init/.git/
[main (root-commit) 36aca32] submodule commit 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
ok 14 - setup - repository in init subdirectory

expecting success of 7400.15 'setup - commit with gitlink': 
	echo a >a &&
	echo z >z &&
	git add a init z &&
	git commit -m "super commit 1"

warning: adding embedded git repository: init
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> init
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached init
hint: 
hint: See "git help submodule" for more information.
[main 23ad8e1] super commit 1
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 a
 create mode 160000 init
 create mode 100644 z
ok 15 - setup - commit with gitlink

expecting success of 7400.16 'setup - hide init subdirectory': 
	mv init .subrepo

ok 16 - setup - hide init subdirectory

expecting success of 7400.17 'setup - repository to add submodules to': 
	git init addtest &&
	git init addtest-ignore

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest-ignore/.git/
ok 17 - setup - repository to add submodules to

expecting success of 7400.18 'submodule add': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add -q "$submodurl" submod >actual &&
		test_must_be_empty actual &&
		echo "gitdir: ../.git/modules/submod" >expect &&
		test_cmp expect submod/.git &&
		(
			cd submod &&
			git config core.worktree >actual &&
			echo "../../../submod" >expect &&
			test_cmp expect actual &&
			rm -f actual expect
		) &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/submod ../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

ok 18 - submodule add

expecting success of 7400.19 'submodule add (absolute path)': 
	test_when_finished "git reset --hard" &&
	git submodule add "$submodurl" "$submodurl/add-abs"

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/add-abs'...
done.
warning: unable to rmdir 'add-abs': Directory not empty
HEAD is now at 23ad8e1 super commit 1
ok 19 - submodule add (absolute path)

expecting success of 7400.20 'setup parent and one repository': 
	test_create_repo parent &&
	test_commit -C parent one

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/parent/.git/
[main (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 20 - setup parent and one repository

expecting success of 7400.21 'redirected submodule add does not show progress': 
	git -C addtest submodule add "file://$submodurl/parent" submod-redirected \
		2>err &&
	! grep % err &&
	test_i18ngrep ! "Checking connectivity" err

ok 21 - redirected submodule add does not show progress

expecting success of 7400.22 'redirected submodule add --progress does show progress': 
	git -C addtest submodule add --progress "file://$submodurl/parent" \
		submod-redirected-progress 2>err && \
	grep % err

remote: Counting objects:  33% (1/3)        
remote: Counting objects:  66% (2/3)        
remote: Counting objects: 100% (3/3)        
remote: Counting objects: 100% (3/3), done.        
Receiving objects:  33% (1/3)
Receiving objects:  66% (2/3)
Receiving objects: 100% (3/3)
Receiving objects: 100% (3/3), done.
ok 22 - redirected submodule add --progress does show progress

expecting success of 7400.23 'submodule add to .gitignored path fails': 
	(
		cd addtest-ignore &&
		cat <<-\EOF >expect &&
		The following paths are ignored by one of your .gitignore files:
		submod
		hint: Use -f if you really want to add them.
		hint: Turn this message off by running
		hint: "git config advice.addIgnoredFile false"
		EOF
		# Does not use test_commit due to the ignore
		echo "*" > .gitignore &&
		git add --force .gitignore &&
		git commit -m"Ignore everything" &&
		! git submodule add "$submodurl" submod >actual 2>&1 &&
		test_cmp expect actual
	)

[main (root-commit) 29c0beb] Ignore everything
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore
ok 23 - submodule add to .gitignored path fails

expecting success of 7400.24 'submodule add to .gitignored path with --force': 
	(
		cd addtest-ignore &&
		git submodule add --force "$submodurl" submod
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest-ignore/submod'...
done.
ok 24 - submodule add to .gitignored path with --force

expecting success of 7400.25 'submodule add to path with tracked content fails': 
	(
		cd addtest &&
		echo "fatal: 'dir-tracked' already exists in the index" >expect &&
		mkdir dir-tracked &&
		test_commit foo dir-tracked/bar &&
		test_must_fail git submodule add "$submodurl" dir-tracked >actual 2>&1 &&
		test_cmp expect actual
	)

[main (root-commit) 5029ef0] foo
 Author: A U Thor <author@example.com>
 5 files changed, 13 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 dir-tracked/bar
 create mode 160000 submod
 create mode 160000 submod-redirected
 create mode 160000 submod-redirected-progress
ok 25 - submodule add to path with tracked content fails

expecting success of 7400.26 'submodule add to reconfigure existing submodule with --force': 
	(
		cd addtest-ignore &&
		bogus_url="$(pwd)/bogus-url" &&
		git submodule add --force "$bogus_url" submod &&
		git submodule add --force -b initial "$submodurl" submod-branch &&
		test "$bogus_url" = "$(git config -f .gitmodules submodule.submod.url)" &&
		test "$bogus_url" = "$(git config submodule.submod.url)" &&
		# Restore the url
		git submodule add --force "$submodurl" submod &&
		test "$submodurl" = "$(git config -f .gitmodules submodule.submod.url)" &&
		test "$submodurl" = "$(git config submodule.submod.url)"
	)

Adding existing repo at 'submod' to the index
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest-ignore/submod-branch'...
done.
Adding existing repo at 'submod' to the index
ok 26 - submodule add to reconfigure existing submodule with --force

expecting success of 7400.27 'submodule add relays add --dry-run stderr': 
	test_when_finished "rm -rf addtest/.git/index.lock" &&
	(
		cd addtest &&
		: >.git/index.lock &&
		! git submodule add "$submodurl" sub-while-locked 2>output.err &&
		test_i18ngrep "^fatal: .*index\.lock" output.err &&
		test_path_is_missing sub-while-locked
	)

fatal: Unable to create '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/.git/index.lock': File exists.
ok 27 - submodule add relays add --dry-run stderr

expecting success of 7400.28 'submodule add --branch': 
	echo "refs/heads/initial" >expect-head &&
	cat <<-\EOF >expect-heads &&
	refs/heads/initial
	refs/heads/main
	EOF

	(
		cd addtest &&
		git submodule add -b initial "$submodurl" submod-branch &&
		test "initial" = "$(git config -f .gitmodules submodule.submod-branch.branch)" &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/submod-branch ../.. &&
	test_cmp expect-heads heads &&
	test_cmp expect-head head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/submod-branch'...
done.
ok 28 - submodule add --branch

expecting success of 7400.29 'submodule add with ./ in path': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add "$submodurl" ././dotsubmod/./frotz/./ &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/dotsubmod/frotz ../../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/dotsubmod/frotz'...
done.
ok 29 - submodule add with ./ in path

expecting success of 7400.30 'submodule add with /././ in path': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add "$submodurl" dotslashdotsubmod/././frotz/./ &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/dotslashdotsubmod/frotz ../../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/dotslashdotsubmod/frotz'...
done.
ok 30 - submodule add with /././ in path

expecting success of 7400.31 'submodule add with // in path': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add "$submodurl" slashslashsubmod///frotz// &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/slashslashsubmod/frotz ../../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/slashslashsubmod/frotz'...
done.
ok 31 - submodule add with // in path

expecting success of 7400.32 'submodule add with /.. in path': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add "$submodurl" dotdotsubmod/../realsubmod/frotz/.. &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/realsubmod ../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/realsubmod'...
done.
ok 32 - submodule add with /.. in path

expecting success of 7400.33 'submodule add with ./, /.. and // in path': 
	echo "refs/heads/main" >expect &&

	(
		cd addtest &&
		git submodule add "$submodurl" dot/dotslashsubmod/./../..////realsubmod2/a/b/c/d/../../../../frotz//.. &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/realsubmod2 ../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/realsubmod2'...
done.
ok 33 - submodule add with ./, /.. and // in path

expecting success of 7400.34 'submodule add with \\ in path': 
	test_when_finished "rm -rf parent sub\\with\\backslash" &&

	# Initialize a repo with a backslash in its name
	git init sub\\with\\backslash &&
	touch sub\\with\\backslash/empty.file &&
	git -C sub\\with\\backslash add empty.file &&
	git -C sub\\with\\backslash commit -m "Added empty.file" &&

	# Add that repository as a submodule
	git init parent &&
	git -C parent submodule add ../sub\\with\\backslash

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub\with\backslash/.git/
[main (root-commit) a129325] Added empty.file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 empty.file
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/parent/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/parent/sub\with\backslash'...
done.
ok 34 - submodule add with \\ in path

expecting success of 7400.35 'submodule add in subdirectory': 
	echo "refs/heads/main" >expect &&

	mkdir addtest/sub &&
	(
		cd addtest/sub &&
		git submodule add "$submodurl" ../realsubmod3 &&
		git submodule init
	) &&

	rm -f heads head untracked &&
	inspect addtest/realsubmod3 ../.. &&
	test_cmp expect heads &&
	test_cmp expect head &&
	test_must_be_empty untracked

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/realsubmod3'...
done.
ok 35 - submodule add in subdirectory

expecting success of 7400.36 'submodule add in subdirectory with relative path should fail': 
	(
		cd addtest/sub &&
		test_must_fail git submodule add ../../ submod3 2>../../output.err
	) &&
	test_i18ngrep toplevel output.err

fatal: Relative path can only be used from the toplevel of the working tree
ok 36 - submodule add in subdirectory with relative path should fail

expecting success of 7400.37 'setup - add an example entry to .gitmodules': 
	git config --file=.gitmodules submodule.example.url git://example.com/init.git

ok 37 - setup - add an example entry to .gitmodules

expecting success of 7400.38 'status should fail for unmapped paths': 
	test_must_fail git submodule status

fatal: no submodule mapping found in .gitmodules for path 'init'
ok 38 - status should fail for unmapped paths

expecting success of 7400.39 'setup - map path in .gitmodules': 
	cat <<\EOF >expect &&
[submodule "example"]
	url = git://example.com/init.git
	path = init
EOF

	git config --file=.gitmodules submodule.example.path init &&

	test_cmp expect .gitmodules

ok 39 - setup - map path in .gitmodules

expecting success of 7400.40 'status should only print one line': 
	git submodule status >lines &&
	test_line_count = 1 lines

ok 40 - status should only print one line

expecting success of 7400.41 'status from subdirectory should have the same SHA1': 
	test_when_finished "rmdir addtest/subdir" &&
	(
		cd addtest &&
		mkdir subdir &&
		git submodule status >output &&
		awk "{print \$1}" <output >expect &&
		cd subdir &&
		git submodule status >../output &&
		awk "{print \$1}" <../output >../actual &&
		test_cmp ../expect ../actual &&
		git -C ../submod checkout HEAD^ &&
		git submodule status >../output &&
		awk "{print \$1}" <../output >../actual2 &&
		cd .. &&
		git submodule status >output &&
		awk "{print \$1}" <output >expect2 &&
		test_cmp expect2 actual2 &&
		! test_cmp actual actual2
	)

Note: switching to 'HEAD^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8f98e77 initial commit
--- actual	2022-12-28 08:01:54.305843178 +0000
+++ actual2	2022-12-28 08:01:55.550888324 +0000
@@ -4,7 +4,7 @@
 23ad8e191a506339bc2aa0ae92a950f35303f38b
 23ad8e191a506339bc2aa0ae92a950f35303f38b
 23ad8e191a506339bc2aa0ae92a950f35303f38b
-23ad8e191a506339bc2aa0ae92a950f35303f38b
++8f98e7791903e3a21e37e7c040acf7518da96e03
 8f98e7791903e3a21e37e7c040acf7518da96e03
 d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
 d79ce1670bdcb76e6d1da2ae095e890ccb326ae9
ok 41 - status from subdirectory should have the same SHA1

expecting success of 7400.42 'setup - fetch commit name from submodule': 
	rev1=$(cd .subrepo && git rev-parse HEAD) &&
	printf "rev1: %s\n" "$rev1" &&
	test -n "$rev1"

rev1: 36aca326f3b39b6c280a410fa907ac252a2075c6
ok 42 - setup - fetch commit name from submodule

expecting success of 7400.43 'status should initially be "missing"': 
	git submodule status >lines &&
	grep "^-$rev1" lines

-36aca326f3b39b6c280a410fa907ac252a2075c6 init
ok 43 - status should initially be "missing"

expecting success of 7400.44 'init should register submodule url in .git/config': 
	echo git://example.com/init.git >expect &&

	git submodule init &&
	git config submodule.example.url >url &&
	git config submodule.example.url ./.subrepo &&

	test_cmp expect url

Submodule 'example' (git://example.com/init.git) registered for path 'init'
ok 44 - init should register submodule url in .git/config

expecting success of 7400.45 'status should still be "missing" after initializing': 
	rm -fr init &&
	mkdir init &&
	git submodule status >lines &&
	rm -fr init &&
	grep "^-$rev1" lines

-36aca326f3b39b6c280a410fa907ac252a2075c6 init
ok 45 - status should still be "missing" after initializing

expecting success of 7400.46 'init should fail with unknown submodule': 
	test_failure_with_unknown_submodule init

error: pathspec 'no-such-submodule' did not match any file(s) known to git
ok 46 - init should fail with unknown submodule

expecting success of 7400.47 'update should fail with unknown submodule': 
	test_failure_with_unknown_submodule update

error: pathspec 'no-such-submodule' did not match any file(s) known to git
ok 47 - update should fail with unknown submodule

expecting success of 7400.48 'status should fail with unknown submodule': 
	test_failure_with_unknown_submodule status

error: pathspec 'no-such-submodule' did not match any file(s) known to git
ok 48 - status should fail with unknown submodule

expecting success of 7400.49 'sync should fail with unknown submodule': 
	test_failure_with_unknown_submodule sync

error: pathspec 'no-such-submodule' did not match any file(s) known to git
ok 49 - sync should fail with unknown submodule

expecting success of 7400.50 'update should fail when path is used by a file': 
	echo hello >expect &&

	echo "hello" >init &&
	test_must_fail git submodule update &&

	test_cmp expect init

fatal: destination path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' already exists and is not an empty directory.
fatal: clone of './.subrepo' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' failed
Failed to clone 'init'. Retry scheduled
fatal: destination path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' already exists and is not an empty directory.
fatal: clone of './.subrepo' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' failed
Failed to clone 'init' a second time, aborting
ok 50 - update should fail when path is used by a file

expecting success of 7400.51 'update should fail when path is used by a nonempty directory': 
	echo hello >expect &&

	rm -fr init &&
	mkdir init &&
	echo "hello" >init/a &&

	test_must_fail git submodule update &&

	test_cmp expect init/a

fatal: destination path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' already exists and is not an empty directory.
fatal: clone of './.subrepo' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' failed
Failed to clone 'init'. Retry scheduled
fatal: destination path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' already exists and is not an empty directory.
fatal: clone of './.subrepo' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init' failed
Failed to clone 'init' a second time, aborting
ok 51 - update should fail when path is used by a nonempty directory

expecting success of 7400.52 'update should work when path is an empty dir': 
	rm -fr init &&
	rm -f head-sha1 &&
	echo "$rev1" >expect &&

	mkdir init &&
	git submodule update -q >update.out &&
	test_must_be_empty update.out &&

	inspect init &&
	test_cmp expect head-sha1

fatal: ref HEAD is not a symbolic ref
ok 52 - update should work when path is an empty dir

expecting success of 7400.53 'status should be "up-to-date" after update': 
	git submodule status >list &&
	grep "^ $rev1" list

 36aca326f3b39b6c280a410fa907ac252a2075c6 init (rev-1)
ok 53 - status should be "up-to-date" after update

expecting success of 7400.54 'status "up-to-date" from subdirectory': 
	mkdir -p sub &&
	(
		cd sub &&
		git submodule status >../list
	) &&
	grep "^ $rev1" list &&
	grep "\\.\\./init" list

 36aca326f3b39b6c280a410fa907ac252a2075c6 ../init (rev-1)
 36aca326f3b39b6c280a410fa907ac252a2075c6 ../init (rev-1)
ok 54 - status "up-to-date" from subdirectory

expecting success of 7400.55 'status "up-to-date" from subdirectory with path': 
	mkdir -p sub &&
	(
		cd sub &&
		git submodule status ../init >../list
	) &&
	grep "^ $rev1" list &&
	grep "\\.\\./init" list

 36aca326f3b39b6c280a410fa907ac252a2075c6 ../init (rev-1)
 36aca326f3b39b6c280a410fa907ac252a2075c6 ../init (rev-1)
ok 55 - status "up-to-date" from subdirectory with path

expecting success of 7400.56 'status should be "modified" after submodule commit': 
	(
		cd init &&
		echo b >b &&
		git add b &&
		git commit -m "submodule commit 2"
	) &&

	rev2=$(cd init && git rev-parse HEAD) &&
	test -n "$rev2" &&
	git submodule status >list &&

	grep "^+$rev2" list

[detached HEAD 8eafb57] submodule commit 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
+8eafb57b6146d899eeaa430c12864a09fcb0e7e1 init (rev-1-1-g8eafb57)
ok 56 - status should be "modified" after submodule commit

expecting success of 7400.57 '"submodule --cached" command forms should be identical': 
	git submodule status --cached >expect &&

	git submodule --cached >actual &&
	test_cmp expect actual &&

	git submodule --cached status >actual &&
	test_cmp expect actual

ok 57 - "submodule --cached" command forms should be identical

expecting success of 7400.58 'the --cached sha1 should be rev1': 
	git submodule --cached status >list &&
	grep "^+$rev1" list

+36aca326f3b39b6c280a410fa907ac252a2075c6 init (rev-1)
ok 58 - the --cached sha1 should be rev1

expecting success of 7400.59 'git diff should report the SHA1 of the new submodule commit': 
	git diff >diff &&
	grep "^+Subproject commit $rev2" diff

+Subproject commit 8eafb57b6146d899eeaa430c12864a09fcb0e7e1
ok 59 - git diff should report the SHA1 of the new submodule commit

expecting success of 7400.60 'update should checkout rev1': 
	rm -f head-sha1 &&
	echo "$rev1" >expect &&

	git submodule update init &&
	inspect init &&

	test_cmp expect head-sha1

Submodule path 'init': checked out '36aca326f3b39b6c280a410fa907ac252a2075c6'
fatal: ref HEAD is not a symbolic ref
ok 60 - update should checkout rev1

expecting success of 7400.61 'status should be "up-to-date" after update': 
	git submodule status >list &&
	grep "^ $rev1" list

 36aca326f3b39b6c280a410fa907ac252a2075c6 init (rev-1)
ok 61 - status should be "up-to-date" after update

expecting success of 7400.62 'checkout superproject with subproject already present': 
	git checkout initial &&
	git checkout main

warning: unable to rmdir 'init': Directory not empty
Switched to branch 'initial'
Switched to branch 'main'
ok 62 - checkout superproject with subproject already present

expecting success of 7400.63 'apply submodule diff': 
	git branch second &&
	(
		cd init &&
		echo s >s &&
		git add s &&
		git commit -m "change subproject"
	) &&
	git update-index --add init &&
	git commit -m "change init" &&
	git format-patch -1 --stdout >P.diff &&
	git checkout second &&
	git apply --index P.diff &&

	git diff --cached main >staged &&
	test_must_be_empty staged

[detached HEAD da28091] change subproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 s
[main cb68a4b] change init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'second'
M	init
warning: unable to rmdir 'init': Directory not empty
ok 63 - apply submodule diff

expecting success of 7400.64 'update --init': 
	mv init init2 &&
	git config -f .gitmodules submodule.example.url "$(pwd)/init2" &&
	git config --remove-section submodule.example &&
	test_must_fail git config submodule.example.url &&

	git submodule update init 2> update.out &&
	test_i18ngrep "not initialized" update.out &&
	test_must_fail git rev-parse --resolve-git-dir init/.git &&

	git submodule update --init init &&
	git rev-parse --resolve-git-dir init/.git

Submodule path 'init' not initialized
fatal: not a gitdir 'init/.git'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/.git/modules/example
ok 64 - update --init

expecting success of 7400.65 'update --init from subdirectory': 
	mv init init2 &&
	git config -f .gitmodules submodule.example.url "$(pwd)/init2" &&
	git config --remove-section submodule.example &&
	test_must_fail git config submodule.example.url &&

	mkdir -p sub &&
	(
		cd sub &&
		git submodule update ../init 2>update.out &&
		test_i18ngrep "not initialized" update.out &&
		test_must_fail git rev-parse --resolve-git-dir ../init/.git &&

		git submodule update --init ../init
	) &&
	git rev-parse --resolve-git-dir init/.git

Submodule path '../init' not initialized
fatal: not a gitdir '../init/.git'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path '../init'
Submodule path '../init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/.git/modules/example
ok 65 - update --init from subdirectory

expecting success of 7400.66 'do not add files from a submodule': 

	git reset --hard &&
	test_must_fail git add init/a


HEAD is now at 23ad8e1 super commit 1
fatal: Pathspec 'init/a' is in submodule 'init'
ok 66 - do not add files from a submodule

expecting success of 7400.67 'gracefully add/reset submodule with a trailing slash': 

	git reset --hard &&
	git commit -m "commit subproject" init &&
	(cd init &&
	 echo b > a) &&
	git add init/ &&
	git diff --exit-code --cached init &&
	commit=$(cd init &&
	 git commit -m update a >/dev/null &&
	 git rev-parse HEAD) &&
	git add init/ &&
	test_must_fail git diff --exit-code --cached init &&
	test $commit = $(git ls-files --stage |
		sed -n "s/^160000 \([^ ]*\).*/\1/p") &&
	git reset init/ &&
	git diff --exit-code --cached init


HEAD is now at 23ad8e1 super commit 1
[second 365536a] commit subproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/init b/init
index da28091..cf4817b 160000
--- a/init
+++ b/init
@@ -1 +1 @@
-Subproject commit da28091fa1960864823ed381ef2a1c41222b8351
+Subproject commit cf4817bea522d7a895a8f804894e1254c741baae
Unstaged changes after reset:
M	init
ok 67 - gracefully add/reset submodule with a trailing slash

expecting success of 7400.68 'ls-files gracefully handles trailing slash': 

	test "init" = "$(git ls-files init/)"


ok 68 - ls-files gracefully handles trailing slash

expecting success of 7400.69 'moving to a commit without submodule does not leave empty dir': 
	rm -rf init &&
	mkdir init &&
	git reset --hard &&
	git checkout initial &&
	test ! -d init &&
	git checkout second

HEAD is now at 365536a commit subproject
Switched to branch 'initial'
Switched to branch 'second'
ok 69 - moving to a commit without submodule does not leave empty dir

expecting success of 7400.70 'submodule <invalid-subcommand> fails': 
	test_must_fail git submodule no-such-subcommand

usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
   or: git submodule [--quiet] set-branch (--default|--branch <branch>) [--] <path>
   or: git submodule [--quiet] set-url [--] <path> <newurl>
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]
ok 70 - submodule <invalid-subcommand> fails

expecting success of 7400.71 'add submodules without specifying an explicit path': 
	mkdir repo &&
	(
		cd repo &&
		git init &&
		echo r >r &&
		git add r &&
		git commit -m "repo commit 1"
	) &&
	git clone --bare repo/ bare.git &&
	(
		cd addtest &&
		git submodule add "$submodurl/repo" &&
		git config -f .gitmodules submodule.repo.path repo &&
		git submodule add "$submodurl/bare.git" &&
		git config -f .gitmodules submodule.bare.path bare
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/repo/.git/
[main (root-commit) 0244caa] repo commit 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 r
Cloning into bare repository 'bare.git'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/repo'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/bare'...
done.
ok 71 - add submodules without specifying an explicit path

expecting success of 7400.72 'add should fail when path is used by a file': 
	(
		cd addtest &&
		touch file &&
		test_must_fail	git submodule add "$submodurl/repo" file
	)

fatal: destination path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/file' already exists and is not an empty directory.
fatal: clone of '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/repo' into submodule path '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/file' failed
ok 72 - add should fail when path is used by a file

expecting success of 7400.73 'add should fail when path is used by an existing directory': 
	(
		cd addtest &&
		mkdir empty-dir &&
		test_must_fail git submodule add "$submodurl/repo" empty-dir
	)

fatal: 'empty-dir' already exists and is not a valid git repo
ok 73 - add should fail when path is used by an existing directory

expecting success of 7400.74 'use superproject as upstream when path is relative and no url is set there': 
	(
		cd addtest &&
		git submodule add ../repo relative &&
		test "$(git config -f .gitmodules submodule.relative.url)" = ../repo &&
		git submodule sync relative &&
		test "$(git config submodule.relative.url)" = "$submodurl/repo"
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/addtest/relative'...
done.
Synchronizing submodule url for 'relative'
ok 74 - use superproject as upstream when path is relative and no url is set there

expecting success of 7400.75 'set up for relative path tests': 
	mkdir reltest &&
	(
		cd reltest &&
		git init &&
		mkdir sub &&
		(
			cd sub &&
			git init &&
			test_commit foo
		) &&
		git add sub &&
		git config -f .gitmodules submodule.sub.path sub &&
		git config -f .gitmodules submodule.sub.url ../subrepo &&
		cp .git/config pristine-.git-config &&
		cp .gitmodules pristine-.gitmodules
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/reltest/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/reltest/sub/.git/
[main (root-commit) 946e985] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
ok 75 - set up for relative path tests

expecting success of 7400.76 '../subrepo works with URL - ssh://hostname/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ssh://hostname/repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = ssh://hostname/subrepo
	)

Submodule 'sub' (ssh://hostname/subrepo) registered for path 'sub'
ok 76 - ../subrepo works with URL - ssh://hostname/repo

expecting success of 7400.77 '../subrepo works with port-qualified URL - ssh://hostname:22/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ssh://hostname:22/repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = ssh://hostname:22/subrepo
	)

Submodule 'sub' (ssh://hostname:22/subrepo) registered for path 'sub'
ok 77 - ../subrepo works with port-qualified URL - ssh://hostname:22/repo

expecting success of 7400.78 '../subrepo path works with local path - //somewhere else/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url "//somewhere else/repo" &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = "//somewhere else/subrepo"
	)

Submodule 'sub' (//somewhere else/subrepo) registered for path 'sub'
ok 78 - ../subrepo path works with local path - //somewhere else/repo

expecting success of 7400.79 '../subrepo works with file URL - file:///tmp/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url file:///tmp/repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = file:///tmp/subrepo
	)

Submodule 'sub' (file:///tmp/subrepo) registered for path 'sub'
ok 79 - ../subrepo works with file URL - file:///tmp/repo

expecting success of 7400.80 '../subrepo works with helper URL- helper:://hostname/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url helper:://hostname/repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = helper:://hostname/subrepo
	)

Submodule 'sub' (helper:://hostname/subrepo) registered for path 'sub'
ok 80 - ../subrepo works with helper URL- helper:://hostname/repo

expecting success of 7400.81 '../subrepo works with scp-style URL - user@host:repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		git config remote.origin.url user@host:repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = user@host:subrepo
	)

Submodule 'sub' (user@host:subrepo) registered for path 'sub'
ok 81 - ../subrepo works with scp-style URL - user@host:repo

expecting success of 7400.82 '../subrepo works with scp-style URL - user@host:path/to/repo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url user@host:path/to/repo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = user@host:path/to/subrepo
	)

Submodule 'sub' (user@host:path/to/subrepo) registered for path 'sub'
ok 82 - ../subrepo works with scp-style URL - user@host:path/to/repo

expecting success of 7400.83 '../subrepo works with relative local path - foo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url foo &&
		# actual: fails with an error
		git submodule init &&
		test "$(git config submodule.sub.url)" = subrepo
	)

Submodule 'sub' (subrepo) registered for path 'sub'
ok 83 - ../subrepo works with relative local path - foo

expecting success of 7400.84 '../subrepo works with relative local path - foo/bar': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url foo/bar &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = foo/subrepo
	)

Submodule 'sub' (foo/subrepo) registered for path 'sub'
ok 84 - ../subrepo works with relative local path - foo/bar

expecting success of 7400.85 '../subrepo works with relative local path - ./foo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ./foo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = subrepo
	)

Submodule 'sub' (subrepo) registered for path 'sub'
ok 85 - ../subrepo works with relative local path - ./foo

expecting success of 7400.86 '../subrepo works with relative local path - ./foo/bar': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ./foo/bar &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = foo/subrepo
	)

Submodule 'sub' (foo/subrepo) registered for path 'sub'
ok 86 - ../subrepo works with relative local path - ./foo/bar

expecting success of 7400.87 '../subrepo works with relative local path - ../foo': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ../foo &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = ../subrepo
	)

Submodule 'sub' (../subrepo) registered for path 'sub'
ok 87 - ../subrepo works with relative local path - ../foo

expecting success of 7400.88 '../subrepo works with relative local path - ../foo/bar': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		git config remote.origin.url ../foo/bar &&
		git submodule init &&
		test "$(git config submodule.sub.url)" = ../foo/subrepo
	)

Submodule 'sub' (../foo/subrepo) registered for path 'sub'
ok 88 - ../subrepo works with relative local path - ../foo/bar

expecting success of 7400.89 '../bar/a/b/c works with relative local path - ../foo/bar.git': 
	(
		cd reltest &&
		cp pristine-.git-config .git/config &&
		cp pristine-.gitmodules .gitmodules &&
		mkdir -p a/b/c &&
		(cd a/b/c && git init && test_commit msg) &&
		git config remote.origin.url ../foo/bar.git &&
		git submodule add ../bar/a/b/c ./a/b/c &&
		git submodule init &&
		test "$(git config submodule.a/b/c.url)" = ../foo/bar/a/b/c
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/reltest/a/b/c/.git/
[main (root-commit) 11e1cd7] msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 msg.t
Adding existing repo at 'a/b/c' to the index
Submodule 'sub' (../foo/subrepo) registered for path 'sub'
ok 89 - ../bar/a/b/c works with relative local path - ../foo/bar.git

expecting success of 7400.90 'moving the superproject does not break submodules': 
	(
		cd addtest &&
		git submodule status >expect
	) &&
	mv addtest addtest2 &&
	(
		cd addtest2 &&
		git submodule status >actual &&
		test_cmp expect actual
	)

ok 90 - moving the superproject does not break submodules

expecting success of 7400.91 'moving the submodule does not break the superproject': 
	(
		cd addtest2 &&
		git submodule status
	) >actual &&
	sed -e "s/^ \([^ ]* repo\) .*/-\1/" <actual >expect &&
	mv addtest2/repo addtest2/repo.bak &&
	test_when_finished "mv addtest2/repo.bak addtest2/repo" &&
	(
		cd addtest2 &&
		git submodule status
	) >actual &&
	test_cmp expect actual

ok 91 - moving the submodule does not break the superproject

expecting success of 7400.92 'submodule add --name allows to replace a submodule with another at the same path': 
	(
		cd addtest2 &&
		(
			cd repo &&
			echo "$submodurl/repo" >expect &&
			git config remote.origin.url >actual &&
			test_cmp expect actual &&
			echo "gitdir: ../.git/modules/repo" >expect &&
			test_cmp expect .git
		) &&
		rm -rf repo &&
		git rm repo &&
		git submodule add -q --name repo_new "$submodurl/bare.git" repo >actual &&
		test_must_be_empty actual &&
		echo "gitdir: ../.git/modules/submod" >expect &&
		test_cmp expect submod/.git &&
		(
			cd repo &&
			echo "$submodurl/bare.git" >expect &&
			git config remote.origin.url >actual &&
			test_cmp expect actual &&
			echo "gitdir: ../.git/modules/repo_new" >expect &&
			test_cmp expect .git
		) &&
		echo "repo" >expect &&
		test_must_fail git config -f .gitmodules submodule.repo.path &&
		git config -f .gitmodules submodule.repo_new.path >actual &&
		test_cmp expect actual &&
		echo "$submodurl/repo" >expect &&
		test_must_fail git config -f .gitmodules submodule.repo.url &&
		echo "$submodurl/bare.git" >expect &&
		git config -f .gitmodules submodule.repo_new.url >actual &&
		test_cmp expect actual &&
		echo "$submodurl/repo" >expect &&
		git config submodule.repo.url >actual &&
		test_cmp expect actual &&
		echo "$submodurl/bare.git" >expect &&
		git config submodule.repo_new.url >actual &&
		test_cmp expect actual
	)

rm 'repo'
ok 92 - submodule add --name allows to replace a submodule with another at the same path

expecting success of 7400.93 'recursive relative submodules stay relative': 
	test_when_finished "rm -rf super clone2 subsub sub3" &&
	mkdir subsub &&
	(
		cd subsub &&
		git init &&
		>t &&
		git add t &&
		git commit -m "initial commit"
	) &&
	mkdir sub3 &&
	(
		cd sub3 &&
		git init &&
		>t &&
		git add t &&
		git commit -m "initial commit" &&
		git submodule add ../subsub dirdir/subsub &&
		git commit -m "add submodule subsub"
	) &&
	mkdir super &&
	(
		cd super &&
		git init &&
		>t &&
		git add t &&
		git commit -m "initial commit" &&
		git submodule add ../sub3 &&
		git commit -m "add submodule sub"
	) &&
	git clone super clone2 &&
	(
		cd clone2 &&
		git submodule update --init --recursive &&
		echo "gitdir: ../.git/modules/sub3" >./sub3/.git_expect &&
		echo "gitdir: ../../../.git/modules/sub3/modules/dirdir/subsub" >./sub3/dirdir/subsub/.git_expect
	) &&
	test_cmp clone2/sub3/.git_expect clone2/sub3/.git &&
	test_cmp clone2/sub3/dirdir/subsub/.git_expect clone2/sub3/dirdir/subsub/.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/subsub/.git/
[main (root-commit) b53efa3] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub3/.git/
[main (root-commit) b53efa3] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub3/dirdir/subsub'...
done.
[main e6f2fcc] add submodule subsub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 dirdir/subsub
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/super/.git/
[main (root-commit) b53efa3] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/super/sub3'...
done.
[main a307821] add submodule sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub3
Cloning into 'clone2'...
done.
Submodule 'sub3' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub3) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/clone2/sub3'...
done.
Submodule path 'sub3': checked out 'e6f2fcc279299766e5fd82861e01a38b63aaaf3b'
Submodule 'dirdir/subsub' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/subsub) registered for path 'sub3/dirdir/subsub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/clone2/sub3/dirdir/subsub'...
done.
Submodule path 'sub3/dirdir/subsub': checked out 'b53efa3ba7e36ac5829f9621027fbe0575deb58e'
ok 93 - recursive relative submodules stay relative

expecting success of 7400.94 'submodule add with an existing name fails unless forced': 
	(
		cd addtest2 &&
		rm -rf repo &&
		git rm repo &&
		test_must_fail git submodule add -q --name repo_new "$submodurl/repo.git" repo &&
		test ! -d repo &&
		test_must_fail git config -f .gitmodules submodule.repo_new.path &&
		test_must_fail git config -f .gitmodules submodule.repo_new.url &&
		echo "$submodurl/bare.git" >expect &&
		git config submodule.repo_new.url >actual &&
		test_cmp expect actual &&
		git submodule add -f -q --name repo_new "$submodurl/repo.git" repo &&
		test -d repo &&
		echo "repo" >expect &&
		git config -f .gitmodules submodule.repo_new.path >actual &&
		test_cmp expect actual &&
		echo "$submodurl/repo.git" >expect &&
		git config -f .gitmodules submodule.repo_new.url >actual &&
		test_cmp expect actual &&
		echo "$submodurl/repo.git" >expect &&
		git config submodule.repo_new.url >actual &&
		test_cmp expect actual
	)

rm 'repo'
fatal: A git directory for 'repo_new' is found locally with remote(s):
  origin	/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/bare.git
If you want to reuse this local git directory instead of cloning again from
  /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/repo.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
Reactivating local git directory for submodule 'repo_new'
ok 94 - submodule add with an existing name fails unless forced

expecting success of 7400.95 'set up a second submodule': 
	git submodule add ./init2 example2 &&
	git commit -m "submodule example2 added"

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/example2'...
done.
[second 056f410] submodule example2 added
 Author: A U Thor <author@example.com>
 2 files changed, 7 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 example2
ok 95 - set up a second submodule

expecting success of 7400.96 'submodule deinit works on repository without submodules': 
	test_when_finished "rm -rf newdirectory" &&
	mkdir newdirectory &&
	(
		cd newdirectory &&
		git init &&
		>file &&
		git add file &&
		git commit -m "repo should not be empty" &&
		git submodule deinit . &&
		git submodule deinit --all
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/newdirectory/.git/
[main (root-commit) 9bf0f79] repo should not be empty
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file
ok 96 - submodule deinit works on repository without submodules

expecting success of 7400.97 'submodule deinit should remove the whole submodule section from .git/config': 
	git config submodule.example.foo bar &&
	git config submodule.example2.frotz nitfol &&
	git submodule deinit init &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test -n "$(git config --get-regexp "submodule\.example2\.")" &&
	test -f example2/.git &&
	rmdir init

Cleared directory 'init'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) unregistered for path 'init'
ok 97 - submodule deinit should remove the whole submodule section from .git/config

expecting success of 7400.98 'submodule deinit should unset core.worktree': 
	test_path_is_file .git/modules/example/config &&
	test_must_fail git config -f .git/modules/example/config core.worktree

ok 98 - submodule deinit should unset core.worktree

expecting success of 7400.99 'submodule deinit from subdirectory': 
	git submodule update --init &&
	git config submodule.example.foo bar &&
	mkdir -p sub &&
	(
		cd sub &&
		git submodule deinit ../init >../output
	) &&
	test_i18ngrep "\\.\\./init" output &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test -n "$(git config --get-regexp "submodule\.example2\.")" &&
	test -f example2/.git &&
	rmdir init

Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
Cleared directory '../init'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) unregistered for path '../init'
ok 99 - submodule deinit from subdirectory

expecting success of 7400.100 'submodule deinit . deinits all initialized submodules': 
	git submodule update --init &&
	git config submodule.example.foo bar &&
	git config submodule.example2.frotz nitfol &&
	test_must_fail git submodule deinit &&
	git submodule deinit . >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test -z "$(git config --get-regexp "submodule\.example2\.")" &&
	test_i18ngrep "Cleared directory .init" actual &&
	test_i18ngrep "Cleared directory .example2" actual &&
	rmdir init example2

Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
fatal: Use '--all' if you really want to deinitialize all submodules
Cleared directory 'init'
Cleared directory 'example2'
ok 100 - submodule deinit . deinits all initialized submodules

expecting success of 7400.101 'submodule deinit --all deinits all initialized submodules': 
	git submodule update --init &&
	git config submodule.example.foo bar &&
	git config submodule.example2.frotz nitfol &&
	test_must_fail git submodule deinit &&
	git submodule deinit --all >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test -z "$(git config --get-regexp "submodule\.example2\.")" &&
	test_i18ngrep "Cleared directory .init" actual &&
	test_i18ngrep "Cleared directory .example2" actual &&
	rmdir init example2

warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'example2' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'example2'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'example2': checked out 'cf4817bea522d7a895a8f804894e1254c741baae'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
fatal: Use '--all' if you really want to deinitialize all submodules
Cleared directory 'init'
Cleared directory 'example2'
ok 101 - submodule deinit --all deinits all initialized submodules

expecting success of 7400.102 'submodule deinit deinits a submodule when its work tree is missing or empty': 
	git submodule update --init &&
	rm -rf init example2/* example2/.git &&
	git submodule deinit init example2 >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test -z "$(git config --get-regexp "submodule\.example2\.")" &&
	test_i18ngrep ! "Cleared directory .init" actual &&
	test_i18ngrep "Cleared directory .example2" actual &&
	rmdir init

warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'example2' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'example2'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'example2': checked out 'cf4817bea522d7a895a8f804894e1254c741baae'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
Cleared directory 'example2'
ok 102 - submodule deinit deinits a submodule when its work tree is missing or empty

expecting success of 7400.103 'submodule deinit fails when the submodule contains modifications unless forced': 
	git submodule update --init &&
	echo X >>init/s &&
	test_must_fail git submodule deinit init &&
	test -n "$(git config --get-regexp "submodule\.example\.")" &&
	test -f example2/.git &&
	git submodule deinit -f init >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test_i18ngrep "Cleared directory .init" actual &&
	rmdir init

warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'example2' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'example2'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'example2': checked out 'cf4817bea522d7a895a8f804894e1254c741baae'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
error: the following file has local modifications:
    init
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'init' contains local modifications; use '-f' to discard them
Cleared directory 'init'
ok 103 - submodule deinit fails when the submodule contains modifications unless forced

expecting success of 7400.104 'submodule deinit fails when the submodule contains untracked files unless forced': 
	git submodule update --init &&
	echo X >>init/untracked &&
	test_must_fail git submodule deinit init &&
	test -n "$(git config --get-regexp "submodule\.example\.")" &&
	test -f example2/.git &&
	git submodule deinit -f init >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test_i18ngrep "Cleared directory .init" actual &&
	rmdir init

Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
error: the following file has local modifications:
    init
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'init' contains local modifications; use '-f' to discard them
Cleared directory 'init'
ok 104 - submodule deinit fails when the submodule contains untracked files unless forced

expecting success of 7400.105 'submodule deinit fails when the submodule HEAD does not match unless forced': 
	git submodule update --init &&
	(
		cd init &&
		git checkout HEAD^
	) &&
	test_must_fail git submodule deinit init &&
	test -n "$(git config --get-regexp "submodule\.example\.")" &&
	test -f example2/.git &&
	git submodule deinit -f init >actual &&
	test -z "$(git config --get-regexp "submodule\.example\.")" &&
	test_i18ngrep "Cleared directory .init" actual &&
	rmdir init

Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  da28091 change subproject

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> da28091

HEAD is now at 36aca32 submodule commit 1
error: the following file has local modifications:
    init
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'init' contains local modifications; use '-f' to discard them
Cleared directory 'init'
ok 105 - submodule deinit fails when the submodule HEAD does not match unless forced

expecting success of 7400.106 'submodule deinit is silent when used on an uninitialized submodule': 
	git submodule update --init &&
	git submodule deinit init >actual &&
	test_i18ngrep "Submodule .example. (.*) unregistered for path .init" actual &&
	test_i18ngrep "Cleared directory .init" actual &&
	git submodule deinit init >actual &&
	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&
	test_i18ngrep "Cleared directory .init" actual &&
	git submodule deinit . >actual &&
	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&
	test_i18ngrep "Submodule .example2. (.*) unregistered for path .example2" actual &&
	test_i18ngrep "Cleared directory .init" actual &&
	git submodule deinit . >actual &&
	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&
	test_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual &&
	test_i18ngrep "Cleared directory .init" actual &&
	git submodule deinit --all >actual &&
	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&
	test_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual &&
	test_i18ngrep "Cleared directory .init" actual &&
	rmdir init example2

Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
From /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/./.subrepo
 * branch            da28091fa1960864823ed381ef2a1c41222b8351 -> FETCH_HEAD
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) unregistered for path 'init'
Cleared directory 'init'
warning: Could not unset core.worktree setting in submodule 'init'
Cleared directory 'init'
warning: Could not unset core.worktree setting in submodule 'init'
Submodule 'example2' (./init2) unregistered for path 'example2'
Cleared directory 'init'
warning: Could not unset core.worktree setting in submodule 'example2'
warning: Could not unset core.worktree setting in submodule 'init'
Cleared directory 'init'
warning: Could not unset core.worktree setting in submodule 'example2'
warning: Could not unset core.worktree setting in submodule 'init'
Cleared directory 'init'
ok 106 - submodule deinit is silent when used on an uninitialized submodule

expecting success of 7400.107 'submodule deinit absorbs .git directory if .git is a directory': 
	git submodule update --init &&
	(
		cd init &&
		rm .git &&
		mv ../.git/modules/example .git &&
		GIT_WORK_TREE=. git config --unset core.worktree
	) &&
	git submodule deinit init &&
	test_path_is_missing init/.git &&
	test -z "$(git config --get-regexp "submodule\.example\.")"

warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'example2' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'example2'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) registered for path 'init'
Submodule path 'example2': checked out 'cf4817bea522d7a895a8f804894e1254c741baae'
Submodule path 'init': checked out 'da28091fa1960864823ed381ef2a1c41222b8351'
warning: Submodule work tree 'init' contains a .git directory. This will be replaced with a .git file by using absorbgitdirs.
Migrating git directory of 'init' from
'/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/.git/modules/example'
Cleared directory 'init'
Submodule 'example' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/init2) unregistered for path 'init'
ok 107 - submodule deinit absorbs .git directory if .git is a directory

expecting success of 7400.108 'submodule with UTF-8 name': 
	svname=$(printf "\303\245 \303\244\303\266") &&
	mkdir "$svname" &&
	(
		cd "$svname" &&
		git init &&
		>sub &&
		git add sub &&
		git commit -m "init sub"
	) &&
	git submodule add ./"$svname" &&
	git submodule >&2 &&
	test -n "$(git submodule | grep "$svname")"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/å äö/.git/
[main (root-commit) ea6909a] init sub
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sub
Adding existing repo at 'å äö' to the index
 cf4817bea522d7a895a8f804894e1254c741baae example2 (rev-1-2-gcf4817b)
-da28091fa1960864823ed381ef2a1c41222b8351 init
 ea6909a6ccbadc034edc8c42d9d2b85a69afe610 å äö (heads/main)
ok 108 - submodule with UTF-8 name

expecting success of 7400.109 'submodule add clone shallow submodule': 
	mkdir super &&
	pwd=$(pwd) &&
	(
		cd super &&
		git init &&
		git submodule add --depth=1 file://"$pwd"/example2 submodule &&
		(
			cd submodule &&
			test 1 = $(git log --oneline | wc -l)
		)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/super/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/super/submodule'...
ok 109 - submodule add clone shallow submodule

expecting success of 7400.110 'setup superproject with submodules': 
	git init sub1 &&
	test_commit -C sub1 test &&
	test_commit -C sub1 test2 &&
	git init multisuper &&
	git -C multisuper submodule add ../sub1 sub0 &&
	git -C multisuper submodule add ../sub1 sub1 &&
	git -C multisuper submodule add ../sub1 sub2 &&
	git -C multisuper submodule add ../sub1 sub3 &&
	git -C multisuper commit -m "add some submodules"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1/.git/
[main (root-commit) f9e7a82] test
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test.t
[main 71cddcb] test2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test2.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub0'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub3'...
done.
[main (root-commit) a188ac0] add some submodules
 Author: A U Thor <author@example.com>
 5 files changed, 16 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub0
 create mode 160000 sub1
 create mode 160000 sub2
 create mode 160000 sub3
ok 110 - setup superproject with submodules

expecting success of 7400.111 'submodule update --init with a specification': 
	test_when_finished "rm -rf multisuper_clone" &&
	pwd=$(pwd) &&
	git clone file://"$pwd"/multisuper multisuper_clone &&
	git -C multisuper_clone submodule update --init . ":(exclude)sub0" &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect actual

Cloning into 'multisuper_clone'...
Submodule 'sub1' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub1'
Submodule 'sub2' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub2'
Submodule 'sub3' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub1'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub2'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub3'...
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub2': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 111 - submodule update --init with a specification

expecting success of 7400.112 'submodule update --init with submodule.active set': 
	test_when_finished "rm -rf multisuper_clone" &&
	pwd=$(pwd) &&
	git clone file://"$pwd"/multisuper multisuper_clone &&
	git -C multisuper_clone config submodule.active "." &&
	git -C multisuper_clone config --add submodule.active ":(exclude)sub0" &&
	git -C multisuper_clone submodule update --init &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect actual

Cloning into 'multisuper_clone'...
Submodule 'sub1' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub1'
Submodule 'sub2' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub2'
Submodule 'sub3' (file:///<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub1'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub2'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub3'...
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub2': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 112 - submodule update --init with submodule.active set

expecting success of 7400.113 'submodule update and setting submodule.<name>.active': 
	test_when_finished "rm -rf multisuper_clone" &&
	pwd=$(pwd) &&
	git clone file://"$pwd"/multisuper multisuper_clone &&
	git -C multisuper_clone config --bool submodule.sub0.active "true" &&
	git -C multisuper_clone config --bool submodule.sub1.active "false" &&
	git -C multisuper_clone config --bool submodule.sub2.active "true" &&

	cat >expect <<-\EOF &&
	 sub0 (test2)
	-sub1
	 sub2 (test2)
	-sub3
	EOF
	git -C multisuper_clone submodule update &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect actual

Cloning into 'multisuper_clone'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub0'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub2'...
Submodule path 'sub0': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub2': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 113 - submodule update and setting submodule.<name>.active

expecting success of 7400.114 'clone active submodule without submodule url set': 
	test_when_finished "rm -rf test/test" &&
	mkdir test &&
	# another dir breaks accidental relative paths still being correct
	git clone file://"$pwd"/multisuper test/test &&
	(
		cd test/test &&
		git config submodule.active "." &&

		# do not pass --init flag, as the submodule is already active:
		git submodule update &&
		git submodule status >actual_raw &&

		cut -d" " -f3- actual_raw >actual &&
		cat >expect <<-\EOF &&
		sub0 (test2)
		sub1 (test2)
		sub2 (test2)
		sub3 (test2)
		EOF
		test_cmp expect actual
	)

Cloning into 'test/test'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/test/test/sub0'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/test/test/sub1'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/test/test/sub2'...
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/test/test/sub3'...
Submodule path 'sub0': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub2': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 114 - clone active submodule without submodule url set

expecting success of 7400.115 'clone --recurse-submodules with a pathspec works': 
	test_when_finished "rm -rf multisuper_clone" &&
	cat >expected <<-\EOF &&
	 sub0 (test2)
	-sub1
	-sub2
	-sub3
	EOF

	git clone --recurse-submodules="sub0" multisuper multisuper_clone &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expected actual

Cloning into 'multisuper_clone'...
done.
Submodule 'sub0' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub0'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub0'...
done.
Submodule path 'sub0': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 115 - clone --recurse-submodules with a pathspec works

expecting success of 7400.116 'clone with multiple --recurse-submodules options': 
	test_when_finished "rm -rf multisuper_clone" &&
	cat >expect <<-\EOF &&
	-sub0
	 sub1 (test2)
	-sub2
	 sub3 (test2)
	EOF

	git clone --recurse-submodules="." \
		  --recurse-submodules=":(exclude)sub0" \
		  --recurse-submodules=":(exclude)sub2" \
		  multisuper multisuper_clone &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect actual

Cloning into 'multisuper_clone'...
done.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub1'
Submodule 'sub3' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub3'...
done.
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 116 - clone with multiple --recurse-submodules options

expecting success of 7400.117 'clone and subsequent updates correctly auto-initialize submodules': 
	test_when_finished "rm -rf multisuper_clone" &&
	cat <<-\EOF >expect &&
	-sub0
	 sub1 (test2)
	-sub2
	 sub3 (test2)
	EOF

	cat <<-\EOF >expect2 &&
	-sub0
	 sub1 (test2)
	-sub2
	 sub3 (test2)
	-sub4
	 sub5 (test2)
	EOF

	git clone --recurse-submodules="." \
		  --recurse-submodules=":(exclude)sub0" \
		  --recurse-submodules=":(exclude)sub2" \
		  --recurse-submodules=":(exclude)sub4" \
		  multisuper multisuper_clone &&

	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect actual &&

	git -C multisuper submodule add ../sub1 sub4 &&
	git -C multisuper submodule add ../sub1 sub5 &&
	git -C multisuper commit -m "add more submodules" &&
	# obtain the new superproject
	git -C multisuper_clone pull &&
	git -C multisuper_clone submodule update --init &&
	git -C multisuper_clone submodule status | sed "s/$OID_REGEX //" >actual &&
	test_cmp expect2 actual

Cloning into 'multisuper_clone'...
done.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub1'
Submodule 'sub3' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub3'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub3'...
done.
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub4'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper/sub5'...
done.
[main 084f781] add more submodules
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 160000 sub4
 create mode 160000 sub5
From /<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper
   a188ac0..084f781  main       -> origin/main
Could not access submodule 'sub5' at commit 084f781
Updating a188ac0..084f781
Fast-forward
 .gitmodules | 6 ++++++
 sub4        | 1 +
 sub5        | 1 +
 3 files changed, 8 insertions(+)
 create mode 160000 sub4
 create mode 160000 sub5
Submodule 'sub5' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub5'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub5'...
done.
Submodule path 'sub5': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
ok 117 - clone and subsequent updates correctly auto-initialize submodules

expecting success of 7400.118 'init properly sets the config': 
	test_when_finished "rm -rf multisuper_clone" &&
	git clone --recurse-submodules="." \
		  --recurse-submodules=":(exclude)sub0" \
		  multisuper multisuper_clone &&

	git -C multisuper_clone submodule init -- sub0 sub1 &&
	git -C multisuper_clone config --get submodule.sub0.active &&
	test_must_fail git -C multisuper_clone config --get submodule.sub1.active

Cloning into 'multisuper_clone'...
done.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub1'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub2'
Submodule 'sub3' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub3'
Submodule 'sub4' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub4'
Submodule 'sub5' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub5'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub2'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub3'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub4'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/multisuper_clone/sub5'...
done.
Submodule path 'sub1': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub2': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub3': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub4': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule path 'sub5': checked out '71cddcbcdbe5634f8172f69e2745e3c01ba0d1bb'
Submodule 'sub0' (/<<PKGBUILDDIR>>/t/trash directory.t7400-submodule-basic/sub1) registered for path 'sub0'
true
ok 118 - init properly sets the config

expecting success of 7400.119 'recursive clone respects -q': 
	test_when_finished "rm -rf multisuper_clone" &&
	git clone -q --recurse-submodules multisuper multisuper_clone >actual &&
	test_must_be_empty actual

ok 119 - recursive clone respects -q

# passed all 119 test(s)
1..119
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7413-submodule-is-active.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/.git/
expecting success of 7413.1 'setup': 
	git config --global protocol.file.allow always &&
	git init sub &&
	test_commit -C sub initial &&
	git init super &&
	test_commit -C super initial &&
	git -C super submodule add ../sub sub1 &&
	git -C super submodule add ../sub sub2 &&

	# Remove submodule.<name>.active entries in order to test in an
	# environment where only URLs are present in the conifg
	git -C super config --unset submodule.sub1.active &&
	git -C super config --unset submodule.sub2.active &&

	git -C super commit -a -m "add 2 submodules at sub{1,2}"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/sub/.git/
[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super/.git/
[master (root-commit) 5e30013] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super/sub2'...
done.
[master b6e0cac] add 2 submodules at sub{1,2}
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
 create mode 160000 sub2
ok 1 - setup

expecting success of 7413.2 'is-active works with urls': 
	test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2 &&

	git -C super config --unset submodule.sub1.URL &&
	test_must_fail test-tool -C super submodule is-active sub1 &&
	git -C super config submodule.sub1.URL ../sub &&
	test-tool -C super submodule is-active sub1

ok 2 - is-active works with urls

expecting success of 7413.3 'is-active works with submodule.<name>.active config': 
	test_when_finished "git -C super config --unset submodule.sub1.active" &&
	test_when_finished "git -C super config submodule.sub1.URL ../sub" &&

	git -C super config --bool submodule.sub1.active "false" &&
	test_must_fail test-tool -C super submodule is-active sub1 &&

	git -C super config --bool submodule.sub1.active "true" &&
	git -C super config --unset submodule.sub1.URL &&
	test-tool -C super submodule is-active sub1

ok 3 - is-active works with submodule.<name>.active config

expecting success of 7413.4 'is-active works with basic submodule.active config': 
	test_when_finished "git -C super config submodule.sub1.URL ../sub" &&
	test_when_finished "git -C super config --unset-all submodule.active" &&

	git -C super config --add submodule.active "." &&
	git -C super config --unset submodule.sub1.URL &&

	test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2

ok 4 - is-active works with basic submodule.active config

expecting success of 7413.5 'is-active correctly works with paths that are not submodules': 
	test_when_finished "git -C super config --unset-all submodule.active" &&

	test_must_fail test-tool -C super submodule is-active not-a-submodule &&

	git -C super config --add submodule.active "." &&
	test_must_fail test-tool -C super submodule is-active not-a-submodule

ok 5 - is-active correctly works with paths that are not submodules

expecting success of 7413.6 'is-active works with exclusions in submodule.active config': 
	test_when_finished "git -C super config --unset-all submodule.active" &&

	git -C super config --add submodule.active "." &&
	git -C super config --add submodule.active ":(exclude)sub1" &&

	test_must_fail test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2

ok 6 - is-active works with exclusions in submodule.active config

expecting success of 7413.7 'is-active with submodule.active and submodule.<name>.active': 
	test_when_finished "git -C super config --unset-all submodule.active" &&
	test_when_finished "git -C super config --unset submodule.sub1.active" &&
	test_when_finished "git -C super config --unset submodule.sub2.active" &&

	git -C super config --add submodule.active "sub1" &&
	git -C super config --bool submodule.sub1.active "false" &&
	git -C super config --bool submodule.sub2.active "true" &&

	test_must_fail test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2

ok 7 - is-active with submodule.active and submodule.<name>.active

expecting success of 7413.8 'is-active, submodule.active and submodule add': 
	test_when_finished "rm -rf super2" &&
	git init super2 &&
	test_commit -C super2 initial &&
	git -C super2 config --add submodule.active "sub*" &&

	# submodule add should only add submodule.<name>.active
	# to the config if not matched by the pathspec
	git -C super2 submodule add ../sub sub1 &&
	test_must_fail git -C super2 config --get submodule.sub1.active &&

	git -C super2 submodule add ../sub mod &&
	git -C super2 config --get submodule.mod.active

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super2/.git/
[master (root-commit) d39e3de] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super2/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7413-submodule-is-active/super2/mod'...
done.
true
ok 8 - is-active, submodule.active and submodule add

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7417-submodule-path-url.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7417-submodule-path-url/.git/
expecting success of 7417.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7417.2 'create submodule with dash in path': 
	git init upstream &&
	git -C upstream commit --allow-empty -m base &&
	git submodule add ./upstream sub &&
	git mv sub ./-sub &&
	git commit -m submodule

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7417-submodule-path-url/upstream/.git/
[main (root-commit) a4b5938] base
 Author: A U Thor <author@example.com>
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7417-submodule-path-url/sub'...
done.
warning: ignoring 'submodule.sub.path' which may be interpreted as a command-line option: -sub
[main (root-commit) c0215d8] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 -sub
 create mode 100644 .gitmodules
ok 2 - create submodule with dash in path

expecting success of 7417.3 'clone rejects unprotected dash': 
	test_when_finished "rm -rf dst" &&
	git clone --recurse-submodules . dst 2>err &&
	test_i18ngrep ignoring err

warning: ignoring 'submodule.sub.path' which may be interpreted as a command-line option: -sub
ok 3 - clone rejects unprotected dash

expecting success of 7417.4 'fsck rejects unprotected dash': 
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesPath err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7417-submodule-path-url/dst/
remote: error: object 7e03af04dae731f9aa8e2febaf8b530bdafd3aa1: gitmodulesPath: disallowed submodule path: -sub        
ok 4 - fsck rejects unprotected dash

ok 5 # skip submodule paths disallows trailing spaces (missing MINGW)

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7419-submodule-set-branch.sh ***
expecting success of 7419.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7419.2 'submodule config cache setup': 
	mkdir submodule &&
	(cd submodule &&
		git init &&
		echo a >a &&
		git add . &&
		git commit -ma &&
		git checkout -b topic &&
		echo b >a &&
		git add . &&
		git commit -mb
	) &&
	mkdir super &&
	(cd super &&
		git init &&
		git submodule add ../submodule &&
		git commit -m "add submodule"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/submodule/.git/
[master (root-commit) 7bdc13c] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Switched to a new branch 'topic'
[topic 45d819c] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/super/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/super/submodule'...
done.
[master (root-commit) c72afe3] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 2 - submodule config cache setup

expecting success of 7419.3 'ensure submodule branch is unset': 
	(cd super &&
		! grep branch .gitmodules
	)

ok 3 - ensure submodule branch is unset

expecting success of 7419.4 'test submodule set-branch --branch': 
	(cd super &&
		git submodule set-branch --branch topic submodule &&
		grep "branch = topic" .gitmodules &&
		git submodule update --remote &&
		cat <<-\EOF >expect &&
		b
		EOF
		git -C submodule show -s --pretty=%s >actual &&
		test_cmp expect actual
	)

	branch = topic
ok 4 - test submodule set-branch --branch

expecting success of 7419.5 'test submodule set-branch --default': 
	test_commit -C submodule c &&
	(cd super &&
		git submodule set-branch --default submodule &&
		! grep branch .gitmodules &&
		git submodule update --remote &&
		cat <<-\EOF >expect &&
		c
		EOF
		git -C submodule show -s --pretty=%s >actual &&
		test_cmp expect actual
	)

[topic b6374c0] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
From /<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/submodule
   45d819c..b6374c0  topic      -> origin/topic
 * [new tag]         c          -> c
Submodule path 'submodule': checked out 'b6374c0adf91ec6b1b212e588788d842307a2277'
ok 5 - test submodule set-branch --default

expecting success of 7419.6 'test submodule set-branch -b': 
	test_commit -C submodule b &&
	(cd super &&
		git submodule set-branch -b topic submodule &&
		grep "branch = topic" .gitmodules &&
		git submodule update --remote &&
		cat <<-\EOF >expect &&
		b
		EOF
		git -C submodule show -s --pretty=%s >actual &&
		test_cmp expect actual
	)

[topic 6fa1e23] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b.t
	branch = topic
From /<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/submodule
   b6374c0..6fa1e23  topic      -> origin/topic
 * [new tag]         b          -> b
Submodule path 'submodule': checked out '6fa1e237438f9aaef5109afed920ac4730aa4c8d'
ok 6 - test submodule set-branch -b

expecting success of 7419.7 'test submodule set-branch -d': 
	test_commit -C submodule d &&
	(cd super &&
		git submodule set-branch -d submodule &&
		! grep branch .gitmodules &&
		git submodule update --remote &&
		cat <<-\EOF >expect &&
		d
		EOF
		git -C submodule show -s --pretty=%s >actual &&
		test_cmp expect actual
	)

[topic 79f1aa7] d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d.t
From /<<PKGBUILDDIR>>/t/trash directory.t7419-submodule-set-branch/submodule
   6fa1e23..79f1aa7  topic      -> origin/topic
 * [new tag]         d          -> d
Submodule path 'submodule': checked out '79f1aa7bcd4311dec63be21d2bb72e96c4a9adec'
ok 7 - test submodule set-branch -d

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7418-submodule-sparse-gitmodules.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/.git/
expecting success of 7418.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7418.2 'sparse checkout setup which hides .gitmodules': 
	git init upstream &&
	git init submodule &&
	(cd submodule &&
		echo file >file &&
		git add file &&
		test_tick &&
		git commit -m "Add file"
	) &&
	(cd upstream &&
		git submodule add ../submodule &&
		test_tick &&
		git commit -m "Add submodule"
	) &&
	git clone --template= upstream super &&
	(cd super &&
		mkdir .git/info &&
		cat >.git/info/sparse-checkout <<-\EOF &&
		/*
		!/.gitmodules
		EOF
		git config core.sparsecheckout true &&
		git read-tree -m -u HEAD &&
		test_path_is_missing .gitmodules
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/upstream/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule/.git/
[master (root-commit) a939200] Add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/upstream/submodule'...
done.
[master (root-commit) caa93e1] Add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
Cloning into 'super'...
done.
ok 2 - sparse checkout setup which hides .gitmodules

expecting success of 7418.3 'reading gitmodules config file when it is not checked out': 
	echo "../submodule" >expect &&
	test-tool -C super submodule config-list submodule.submodule.url >actual &&
	test_cmp expect actual

ok 3 - reading gitmodules config file when it is not checked out

expecting success of 7418.4 'not writing gitmodules config file when it is not checked out': 
	test_must_fail test-tool -C super submodule config-set submodule.submodule.url newurl &&
	test_path_is_missing super/.gitmodules

fatal: please make sure that the .gitmodules file is in the working tree
ok 4 - not writing gitmodules config file when it is not checked out

expecting success of 7418.5 'initialising submodule when the gitmodules config is not checked out': 
	test_must_fail git -C super config submodule.submodule.url &&
	git -C super submodule init &&
	git -C super config submodule.submodule.url >actual &&
	echo "$(pwd)/submodule" >expect &&
	test_cmp expect actual

Submodule 'submodule' (/<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule) registered for path 'submodule'
ok 5 - initialising submodule when the gitmodules config is not checked out

expecting success of 7418.6 'updating submodule when the gitmodules config is not checked out': 
	test_path_is_missing super/submodule/file &&
	git -C super submodule update &&
	test_cmp submodule/file super/submodule/file

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/super/submodule'...
done.
Submodule path 'submodule': checked out 'a939200cdece6d977c80e37469830b5cb29fd586'
ok 6 - updating submodule when the gitmodules config is not checked out

expecting success of 7418.7 're-updating submodule when the gitmodules config is not checked out': 
	test_when_finished "git -C submodule reset --hard $ORIG_SUBMODULE;
			    git -C upstream reset --hard $ORIG_UPSTREAM;
			    git -C super reset --hard $ORIG_SUPER;
			    git -C upstream submodule update --remote;
			    git -C super pull;
			    git -C super submodule update --remote" &&
	(cd submodule &&
		echo file2 >file2 &&
		git add file2 &&
		test_tick &&
		git commit -m "Add file2 to submodule"
	) &&
	(cd upstream &&
		git submodule update --remote &&
		git add submodule &&
		test_tick &&
		git commit -m "Update submodule"
	) &&
	git -C super pull &&
	# The --for-status options reads the gitmodules config
	git -C super submodule summary --for-status >actual &&
	rev1=$(git -C submodule rev-parse --short HEAD) &&
	rev2=$(git -C submodule rev-parse --short HEAD^) &&
	cat >expect <<-EOF &&
	* submodule ${rev1}...${rev2} (1):
	  < Add file2 to submodule

	EOF
	test_cmp expect actual &&
	# Test that the update actually succeeds
	test_path_is_missing super/submodule/file2 &&
	git -C super submodule update &&
	test_cmp submodule/file2 super/submodule/file2 &&
	git -C super status --short >output &&
	test_must_be_empty output

[master 83d36b8] Add file2 to submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule
   a939200..83d36b8  master     -> origin/master
Submodule path 'submodule': checked out '83d36b861ad581dea26a4034aeffa2f715923589'
[master 5ae4276] Update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/upstream
   caa93e1..5ae4276  master     -> origin/master
Fetching submodule submodule
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule
   a939200..83d36b8  master     -> origin/master
Updating caa93e1..5ae4276
Fast-forward
 submodule | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule path 'submodule': checked out '83d36b861ad581dea26a4034aeffa2f715923589'
HEAD is now at a939200 Add file
HEAD is now at caa93e1 Add submodule
HEAD is now at caa93e1 Add submodule
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule
 + 83d36b8...a939200 master     -> origin/master  (forced update)
Submodule path 'submodule': checked out 'a939200cdece6d977c80e37469830b5cb29fd586'
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/upstream
 + 5ae4276...caa93e1 master     -> origin/master  (forced update)
Already up to date.
From /<<PKGBUILDDIR>>/t/trash directory.t7418-submodule-sparse-gitmodules/submodule
 + 83d36b8...a939200 master     -> origin/master  (forced update)
Submodule path 'submodule': checked out 'a939200cdece6d977c80e37469830b5cb29fd586'
ok 7 - re-updating submodule when the gitmodules config is not checked out

expecting success of 7418.8 'not adding submodules when the gitmodules config is not checked out': 
	git clone submodule new_submodule &&
	test_must_fail git -C super submodule add ../new_submodule &&
	test_path_is_missing .gitmodules

Cloning into 'new_submodule'...
done.
fatal: please make sure that the .gitmodules file is in the working tree
ok 8 - not adding submodules when the gitmodules config is not checked out

expecting success of 7418.9 'init submodule still works even after the previous add failed': 
	git -C super submodule init

ok 9 - init submodule still works even after the previous add failed

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7416-submodule-dash-url.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/.git/
expecting success of 7416.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7416.2 'create submodule with protected dash in url': 
	git init upstream &&
	git -C upstream commit --allow-empty -m base &&
	mv upstream ./-upstream &&
	git submodule add ./-upstream sub &&
	git add sub .gitmodules &&
	git commit -m submodule

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/upstream/.git/
[master (root-commit) a4b5938] base
 Author: A U Thor <author@example.com>
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/sub'...
done.
[master (root-commit) a5de7d8] submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 2 - create submodule with protected dash in url

expecting success of 7416.3 'clone can recurse submodule': 
	test_when_finished "rm -rf dst" &&
	git clone --recurse-submodules . dst &&
	echo base >expect &&
	git -C dst/sub log -1 --format=%s >actual &&
	test_cmp expect actual

Cloning into 'dst'...
done.
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/./-upstream) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/sub'...
done.
Submodule path 'sub': checked out 'a4b5938bdb0638bd7b0fd149a017cda4db88b551'
ok 3 - clone can recurse submodule

expecting success of 7416.4 'fsck accepts protected dash': 
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	git push dst HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
To dst
 * [new branch]      HEAD -> master
ok 4 - fsck accepts protected dash

expecting success of 7416.5 'remove ./ protection from .gitmodules url': 
	perl -i -pe "s{\./}{}" .gitmodules &&
	git commit -am "drop protection"

[master 6caf163] drop protection
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 5 - remove ./ protection from .gitmodules url

expecting success of 7416.6 'clone rejects unprotected dash': 
	test_when_finished "rm -rf dst" &&
	test_must_fail git clone --recurse-submodules . dst 2>err &&
	test_i18ngrep ignoring err

warning: ignoring 'submodule.sub.url' which may be interpreted as a command-line option: -upstream
ok 6 - clone rejects unprotected dash

expecting success of 7416.7 'fsck rejects unprotected dash': 
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 3203a2d7fb3e9335b43e66a0c95b96887ed3670f: gitmodulesUrl: disallowed submodule url: -upstream        
ok 7 - fsck rejects unprotected dash

expecting success of 7416.8 'trailing backslash is handled correctly': 
	git init testmodule &&
	test_commit -C testmodule c &&
	git submodule add ./testmodule &&
	: ensure that the name ends in a double backslash &&
	sed -e "s|\\(submodule \"testmodule\\)\"|\\1\\\\\\\\\"|" \
		-e "s|url = .*|url = \" --should-not-be-an-option\"|" \
		<.gitmodules >.new &&
	mv .new .gitmodules &&
	git commit -am "Add testmodule" &&
	test_must_fail git clone --verbose --recurse-submodules . dolly 2>err &&
	test_i18ngrep ! "unknown option" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/testmodule/.git/
[master (root-commit) ea1ac38] c
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c.t
Adding existing repo at 'testmodule' to the index
[master 8635531] Add testmodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+), 1 deletion(-)
 create mode 160000 testmodule
ok 8 - trailing backslash is handled correctly

expecting success of 7416.9 'fsck rejects missing URL scheme': 
	git checkout --orphan missing-scheme &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = http::one.example.com/foo.git
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "gitmodules with missing URL scheme" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'missing-scheme'
[missing-scheme (root-commit) 43f6d1d] gitmodules with missing URL scheme
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 1b0034738c4ff76356b39245a20e6e3db27b9f16: gitmodulesUrl: disallowed submodule url: http::one.example.com/foo.git        
ok 9 - fsck rejects missing URL scheme

expecting success of 7416.10 'fsck rejects relative URL resolving to missing scheme': 
	git checkout --orphan relative-missing-scheme &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = "..\\../.\\../:one.example.com/foo.git"
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "gitmodules with relative URL that strips off scheme" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'relative-missing-scheme'
[relative-missing-scheme (root-commit) ae93fe4] gitmodules with relative URL that strips off scheme
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 7994991dc5ea69078db13d6a6fe8ebdb9095f4f6: gitmodulesUrl: disallowed submodule url: ..\../.\../:one.example.com/foo.git        
ok 10 - fsck rejects relative URL resolving to missing scheme

expecting success of 7416.11 'fsck rejects empty URL scheme': 
	git checkout --orphan empty-scheme &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = http::://one.example.com/foo.git
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "gitmodules with empty URL scheme" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'empty-scheme'
[empty-scheme (root-commit) 4daaf62] gitmodules with empty URL scheme
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 606181337c1ac6c1464989eddb68e626ebd5cebb: gitmodulesUrl: disallowed submodule url: http::://one.example.com/foo.git        
ok 11 - fsck rejects empty URL scheme

expecting success of 7416.12 'fsck rejects relative URL resolving to empty scheme': 
	git checkout --orphan relative-empty-scheme &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = ../../../:://one.example.com/foo.git
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "relative gitmodules URL resolving to empty scheme" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'relative-empty-scheme'
[relative-empty-scheme (root-commit) 266aaa0] relative gitmodules URL resolving to empty scheme
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 6e731804bddde8189151d1e3afed752027c01894: gitmodulesUrl: disallowed submodule url: ../../../:://one.example.com/foo.git        
ok 12 - fsck rejects relative URL resolving to empty scheme

expecting success of 7416.13 'fsck rejects empty hostname': 
	git checkout --orphan empty-host &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = http:///one.example.com/foo.git
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "gitmodules with extra slashes" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'empty-host'
[empty-host (root-commit) bfddfb4] gitmodules with extra slashes
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 86df12e51bea97cc0153a56ca357968b068043bb: gitmodulesUrl: disallowed submodule url: http:///one.example.com/foo.git        
ok 13 - fsck rejects empty hostname

expecting success of 7416.14 'fsck rejects relative url that produced empty hostname': 
	git checkout --orphan messy-relative &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = ../../..//one.example.com/foo.git
	EOF
	git add .gitmodules &&
	test_tick &&
	git commit -m "gitmodules abusing relative_path" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'messy-relative'
[messy-relative (root-commit) 126d5fa] gitmodules abusing relative_path
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object a2186f87385db0aacec85e7779234576bd406d14: gitmodulesUrl: disallowed submodule url: ../../..//one.example.com/foo.git        
ok 14 - fsck rejects relative url that produced empty hostname

expecting success of 7416.15 'fsck permits embedded newline with unrecognized scheme': 
	git checkout --orphan newscheme &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = "data://acjbkd%0akajfdickajkd"
	EOF
	git add .gitmodules &&
	git commit -m "gitmodules with unrecognized scheme" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	git push dst HEAD

Switched to a new branch 'newscheme'
[newscheme (root-commit) 75b80fe] gitmodules with unrecognized scheme
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
To dst
 * [new branch]      HEAD -> newscheme
ok 15 - fsck permits embedded newline with unrecognized scheme

expecting success of 7416.16 'fsck rejects embedded newline in url': 
	# create an orphan branch to avoid existing .gitmodules objects
	git checkout --orphan newline &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
	url = "https://one.example.com?%0ahost=two.example.com/foo.git"
	EOF
	git add .gitmodules &&
	git commit -m "gitmodules with newline" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'newline'
[newline (root-commit) f62dcd9] gitmodules with newline
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 59d2434e36eff88ddd704683001a17e1074748f7: gitmodulesUrl: disallowed submodule url: https://one.example.com?%0ahost=two.example.com/foo.git        
ok 16 - fsck rejects embedded newline in url

expecting success of 7416.17 'fsck rejects embedded newline in relative url': 
	git checkout --orphan relative-newline &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
		url = "./%0ahost=two.example.com/foo.git"
	EOF
	git add .gitmodules &&
	git commit -m "relative url with newline" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'relative-newline'
[relative-newline (root-commit) 66a85ea] relative url with newline
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 52bc96716641eb10811fc8e92cdfd07547964b6a: gitmodulesUrl: disallowed submodule url: ./%0ahost=two.example.com/foo.git        
ok 17 - fsck rejects embedded newline in relative url

expecting success of 7416.18 'fsck rejects embedded newline in git url': 
	git checkout --orphan git-newline &&
	cat >.gitmodules <<-\EOF &&
	[submodule "foo"]
	url = "git://example.com:1234/repo%0a.git"
	EOF
	git add .gitmodules &&
	git commit -m "git url with newline" &&
	test_when_finished "rm -rf dst" &&
	git init --bare dst &&
	git -C dst config transfer.fsckObjects true &&
	test_must_fail git push dst HEAD 2>err &&
	grep gitmodulesUrl err

Switched to a new branch 'git-newline'
[git-newline (root-commit) a8d2cc3] git url with newline
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
 create mode 160000 testmodule
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7416-submodule-dash-url/dst/
remote: error: object 9fbab0793cb64859d67bc4949d7feca5341bb05b: gitmodulesUrl: disallowed submodule url: git://example.com:1234/repo%0a.git        
ok 18 - fsck rejects embedded newline in git url

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7420-submodule-set-url.sh ***
expecting success of 7420.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7420.2 'submodule config cache setup': 
	mkdir submodule &&
	(
		cd submodule &&
		git init &&
		echo a >file &&
		git add file &&
		git commit -ma
	) &&
	mkdir super &&
	(
		cd super &&
		git init &&
		git submodule add ../submodule &&
		git commit -m "add submodule"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7420-submodule-set-url/submodule/.git/
[master (root-commit) 18350fc] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7420-submodule-set-url/super/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7420-submodule-set-url/super/submodule'...
done.
[master (root-commit) ad8b207] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 2 - submodule config cache setup

expecting success of 7420.3 'test submodule set-url': 
	# add a commit and move the submodule (change the url)
	(
		cd submodule &&
		echo b >>file &&
		git add file &&
		git commit -mb
	) &&
	mv submodule newsubmodule &&

	git -C newsubmodule show >expect &&
	(
		cd super &&
		test_must_fail git submodule update --remote &&
		git submodule set-url submodule ../newsubmodule &&
		grep -F "url = ../newsubmodule" .gitmodules &&
		git submodule update --remote
	) &&
	git -C super/submodule show >actual &&
	test_cmp expect actual

[master 8063db2] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
fatal: '/<<PKGBUILDDIR>>/t/trash directory.t7420-submodule-set-url/submodule' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: Unable to fetch in submodule path 'submodule'
Synchronizing submodule url for 'submodule'
	url = ../newsubmodule
From /<<PKGBUILDDIR>>/t/trash directory.t7420-submodule-set-url/newsubmodule
   18350fc..8063db2  master     -> origin/master
Submodule path 'submodule': checked out '8063db2e93a425b6bc293b09198d2c4c1480f345'
ok 3 - test submodule set-url

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7421-submodule-summary-add.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7421-submodule-summary-add/.git/
expecting success of 7421.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7421.2 'summary test environment setup': 
	git init sm &&
	test_commit -C sm "add file" file file-content file-tag &&

	git submodule add ./sm my-subm &&
	test_tick &&
	git commit -m "add submodule"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7421-submodule-summary-add/sm/.git/
[master (root-commit) 35b40f1] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7421-submodule-summary-add/my-subm'...
done.
[master (root-commit) 0d0296a] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 my-subm
ok 2 - summary test environment setup

expecting success of 7421.3 'submodule summary output for initialized submodule': 
	test_commit -C sm "add file2" file2 file2-content file2-tag &&
	git submodule update --remote &&
	test_tick &&
	git commit -m "update submodule" my-subm &&
	git submodule summary HEAD^ >actual &&
	rev1=$(git -C sm rev-parse --short HEAD^) &&
	rev2=$(git -C sm rev-parse --short HEAD) &&
	cat >expected <<-EOF &&
	* my-subm ${rev1}...${rev2} (1):
	  > add file2

	EOF
	test_cmp expected actual

[master dbd5fc8] add file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
From /<<PKGBUILDDIR>>/t/trash directory.t7421-submodule-summary-add/sm
   35b40f1..dbd5fc8  master     -> origin/master
 * [new tag]         file2-tag  -> file2-tag
Submodule path 'my-subm': checked out 'dbd5fc8f8fdf3ce2b5f5235cf1be586e62b60698'
[master c7068f0] update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - submodule summary output for initialized submodule

expecting success of 7421.4 'submodule summary output for deinitialized submodule': 
	git submodule deinit my-subm &&
	git submodule summary HEAD^ >actual &&
	test_must_be_empty actual &&
	git submodule update --init my-subm &&
	git submodule summary HEAD^ >actual &&
	rev1=$(git -C sm rev-parse --short HEAD^) &&
	rev2=$(git -C sm rev-parse --short HEAD) &&
	cat >expected <<-EOF &&
	* my-subm ${rev1}...${rev2} (1):
	  > add file2

	EOF
	test_cmp expected actual

Cleared directory 'my-subm'
Submodule 'my-subm' (./sm) unregistered for path 'my-subm'
warning: could not look up configuration 'remote.origin.url'. Assuming this repository is its own authoritative upstream.
Submodule 'my-subm' (/<<PKGBUILDDIR>>/t/trash directory.t7421-submodule-summary-add/sm) registered for path 'my-subm'
Submodule path 'my-subm': checked out 'dbd5fc8f8fdf3ce2b5f5235cf1be586e62b60698'
ok 4 - submodule summary output for deinitialized submodule

expecting success of 7421.5 'submodule summary output for submodules with changed paths': 
	git mv my-subm subm &&
	git commit -m "change submodule path" &&
	rev=$(git -C sm rev-parse --short HEAD^) &&
	git submodule summary HEAD^^ -- my-subm >actual 2>err &&
	test_must_be_empty err &&
	cat >expected <<-EOF &&
	* my-subm ${rev}...0000000:

	EOF
	test_cmp expected actual

[master 02e2066] change submodule path
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename my-subm => subm (100%)
ok 5 - submodule summary output for submodules with changed paths

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7450-bad-git-dotfiles.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/.git/
expecting success of 7450.1 'setup': 
	git config --global protocol.file.allow always

ok 1 - setup

expecting success of 7450.2 'check names': 
	cat >expect <<-\EOF &&
	valid
	valid/with/paths
	EOF

	test-tool submodule check-name >actual <<-\EOF &&
	valid
	valid/with/paths

	../foo
	/../foo
	..\foo
	\..\foo
	foo/..
	foo/../
	foo\..
	foo\..\
	foo/../bar
	EOF

	test_cmp expect actual

ok 2 - check names

expecting success of 7450.3 'create innocent subrepo': 
	git init innocent &&
	git -C innocent commit --allow-empty -m foo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/innocent/.git/
[master (root-commit) 2093db0] foo
 Author: A U Thor <author@example.com>
ok 3 - create innocent subrepo

expecting success of 7450.4 'submodule add refuses invalid names': 
	test_must_fail \
		git submodule add --name ../../modules/evil "$PWD/innocent" evil

fatal: '../../modules/evil' is not a valid submodule name
ok 4 - submodule add refuses invalid names

expecting success of 7450.5 'add evil submodule': 
	git submodule add "$PWD/innocent" evil &&

	mkdir modules &&
	cp -r .git/modules/evil modules &&
	write_script modules/evil/hooks/post-checkout <<-\EOF &&
	echo >&2 "RUNNING POST CHECKOUT"
	EOF

	git config -f .gitmodules submodule.evil.update checkout &&
	git config -f .gitmodules --rename-section \
		submodule.evil submodule.../../modules/evil &&
	git add modules &&
	git commit -am evil

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/evil'...
done.
warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
[master (root-commit) 9cedbe5] evil
 Author: A U Thor <author@example.com>
 29 files changed, 825 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 evil
 create mode 100644 modules/evil/HEAD
 create mode 100644 modules/evil/config
 create mode 100644 modules/evil/description
 create mode 100755 modules/evil/hooks/applypatch-msg.sample
 create mode 100755 modules/evil/hooks/commit-msg.sample
 create mode 100755 modules/evil/hooks/fsmonitor-watchman.sample
 create mode 100755 modules/evil/hooks/post-checkout
 create mode 100755 modules/evil/hooks/post-update.sample
 create mode 100755 modules/evil/hooks/pre-applypatch.sample
 create mode 100755 modules/evil/hooks/pre-commit.sample
 create mode 100755 modules/evil/hooks/pre-merge-commit.sample
 create mode 100755 modules/evil/hooks/pre-push.sample
 create mode 100755 modules/evil/hooks/pre-rebase.sample
 create mode 100755 modules/evil/hooks/pre-receive.sample
 create mode 100755 modules/evil/hooks/prepare-commit-msg.sample
 create mode 100755 modules/evil/hooks/push-to-checkout.sample
 create mode 100755 modules/evil/hooks/update.sample
 create mode 100644 modules/evil/index
 create mode 100644 modules/evil/info/exclude
 create mode 100644 modules/evil/logs/HEAD
 create mode 100644 modules/evil/logs/refs/heads/master
 create mode 100644 modules/evil/logs/refs/remotes/origin/HEAD
 create mode 100644 modules/evil/objects/20/93db06f424f426e05da2ca90f40d2663e89387
 create mode 100644 modules/evil/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 modules/evil/packed-refs
 create mode 100644 modules/evil/refs/heads/master
 create mode 100644 modules/evil/refs/remotes/origin/HEAD
ok 5 - add evil submodule

expecting success of 7450.6 'add other submodule': 
	git submodule add "$PWD/innocent" another-module &&
	git add another-module &&
	git commit -am another

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/another-module'...
done.
warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
[master 1f7d966] another
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 another-module
ok 6 - add other submodule

expecting success of 7450.7 'clone evil superproject': 
	git clone --recurse-submodules . victim >output 2>&1 &&
	! grep "RUNNING POST CHECKOUT" output

ok 7 - clone evil superproject

expecting success of 7450.8 'fsck detects evil superproject': 
	test_must_fail git fsck

error in blob f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil
error in blob f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil
error in blob f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil
error in blob 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error in blob 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error in blob 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
dangling blob 7b3cf8d2691cb844f9c6e0ebb0ec70e73df44507
ok 8 - fsck detects evil superproject

expecting success of 7450.9 'transfer.fsckObjects detects evil superproject (unpack)': 
	rm -rf dst.git &&
	git init --bare dst.git &&
	git -C dst.git config transfer.fsckObjects true &&
	test_must_fail git push dst.git HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/dst.git/
remote: error: object f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object f51ace76cfc573b0a9b5f52cca6036f00430d5d9: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: fatal: fsck error in pack objects        
error: remote unpack failed: unpack-objects abnormal exit
To dst.git
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to 'dst.git'
ok 9 - transfer.fsckObjects detects evil superproject (unpack)

expecting success of 7450.10 'transfer.fsckObjects detects evil superproject (index)': 
	rm -rf dst.git &&
	git init --bare dst.git &&
	git -C dst.git config transfer.fsckObjects true &&
	git -C dst.git config transfer.unpackLimit 1 &&
	test_must_fail git push dst.git HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/dst.git/
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil        
remote: fatal: fsck error in packed object        
error: remote unpack failed: index-pack abnormal exit
To dst.git
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to 'dst.git'
ok 10 - transfer.fsckObjects detects evil superproject (index)

expecting success of 7450.11 'create oddly ordered pack': 
	git checkout --orphan odd &&
	git rm -rf --cached . &&
	git add .gitmodules &&
	git commit -m odd &&
	{
		pack_header 3 &&
		pack_obj $(git rev-parse HEAD:.gitmodules) &&
		pack_obj $(git rev-parse HEAD^{tree}) &&
		pack_obj $(git rev-parse HEAD)
	} >odd.pack &&
	pack_trailer odd.pack

warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
warning: ignoring suspicious submodule name: ../../modules/evil
Switched to a new branch 'odd'
rm '.gitmodules'
rm 'another-module'
rm 'evil'
rm 'modules/evil/HEAD'
rm 'modules/evil/config'
rm 'modules/evil/description'
rm 'modules/evil/hooks/applypatch-msg.sample'
rm 'modules/evil/hooks/commit-msg.sample'
rm 'modules/evil/hooks/fsmonitor-watchman.sample'
rm 'modules/evil/hooks/post-checkout'
rm 'modules/evil/hooks/post-update.sample'
rm 'modules/evil/hooks/pre-applypatch.sample'
rm 'modules/evil/hooks/pre-commit.sample'
rm 'modules/evil/hooks/pre-merge-commit.sample'
rm 'modules/evil/hooks/pre-push.sample'
rm 'modules/evil/hooks/pre-rebase.sample'
rm 'modules/evil/hooks/pre-receive.sample'
rm 'modules/evil/hooks/prepare-commit-msg.sample'
rm 'modules/evil/hooks/push-to-checkout.sample'
rm 'modules/evil/hooks/update.sample'
rm 'modules/evil/index'
rm 'modules/evil/info/exclude'
rm 'modules/evil/logs/HEAD'
rm 'modules/evil/logs/refs/heads/master'
rm 'modules/evil/logs/refs/remotes/origin/HEAD'
rm 'modules/evil/objects/20/93db06f424f426e05da2ca90f40d2663e89387'
rm 'modules/evil/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904'
rm 'modules/evil/packed-refs'
rm 'modules/evil/refs/heads/master'
rm 'modules/evil/refs/remotes/origin/HEAD'
[odd (root-commit) aa71d7d] odd
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 .gitmodules
156+0 records in
156+0 records out
156 bytes copied, 0.00835997 s, 18.7 kB/s
50+0 records in
50+0 records out
50 bytes copied, 0.0027451 s, 18.2 kB/s
126+0 records in
126+0 records out
126 bytes copied, 0.00871165 s, 14.5 kB/s
ok 11 - create oddly ordered pack

expecting success of 7450.12 'transfer.fsckObjects handles odd pack (unpack)': 
	rm -rf dst.git &&
	git init --bare dst.git &&
	test_must_fail git -C dst.git unpack-objects --strict <odd.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/dst.git/
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
fatal: fsck error in pack objects
ok 12 - transfer.fsckObjects handles odd pack (unpack)

expecting success of 7450.13 'transfer.fsckObjects handles odd pack (index)': 
	rm -rf dst.git &&
	git init --bare dst.git &&
	test_must_fail git -C dst.git index-pack --strict --stdin <odd.pack

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/dst.git/
pack	65c014a90c586a3981620f6a2f2660e72c26bd10
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
fatal: fsck error in pack objects
ok 13 - transfer.fsckObjects handles odd pack (index)

expecting success of 7450.14 'index-pack --strict works for non-repo pack': 
	rm -rf dst.git &&
	git init --bare dst.git &&
	cp odd.pack dst.git &&
	test_must_fail git -C dst.git index-pack --strict odd.pack 2>output &&
	# Make sure we fail due to bad gitmodules content, not because we
	# could not read the blob in the first place.
	grep gitmodulesName output

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/dst.git/
65c014a90c586a3981620f6a2f2660e72c26bd10
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
error: object 830a6cbed4ebfebd4bdc5fc5ce9498e97be0d37e: gitmodulesName: disallowed submodule name: ../../modules/evil
ok 14 - index-pack --strict works for non-repo pack

expecting success of 7450.15 'set up repo with symlinked gitmodules (vanilla)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitmodules-vanilla/.git/
ok 15 - set up repo with symlinked gitmodules (vanilla)

expecting success of 7450.16 'fsck detects symlinked gitmodules (vanilla)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 92a1bae9572b2b879562fc523bd701bab2770bbe
error in tree 92a1bae9572b2b879562fc523bd701bab2770bbe: gitmodulesSymlink: .gitmodules is a symbolic link
ok 16 - fsck detects symlinked gitmodules (vanilla)

expecting success of 7450.17 'refuse to load symlinked gitmodules into index (vanilla)': 
		test_must_fail \
			git -C $dir \
			    -c core.protectntfs \
			    -c core.protecthfs \
			    read-tree $tree 2>err &&
		grep "invalid path.*$name" err &&
		git -C $dir ls-files -s >out &&
		test_must_be_empty out
	
error: invalid path '.gitmodules'
ok 17 - refuse to load symlinked gitmodules into index (vanilla)

expecting success of 7450.18 'set up repo with symlinked gitmodules (ntfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitmodules-ntfs/.git/
ok 18 - set up repo with symlinked gitmodules (ntfs)

expecting success of 7450.19 'fsck detects symlinked gitmodules (ntfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 3365ca04a2b687dbcdab9f698789ea89bb5dd11c
error in tree 3365ca04a2b687dbcdab9f698789ea89bb5dd11c: gitmodulesSymlink: .gitmodules is a symbolic link
ok 19 - fsck detects symlinked gitmodules (ntfs)

expecting success of 7450.20 'refuse to load symlinked gitmodules into index (ntfs)': 
		test_must_fail \
			git -C $dir \
			    -c core.protectntfs \
			    -c core.protecthfs \
			    read-tree $tree 2>err &&
		grep "invalid path.*$name" err &&
		git -C $dir ls-files -s >out &&
		test_must_be_empty out
	
error: invalid path '.gitmodules .'
ok 20 - refuse to load symlinked gitmodules into index (ntfs)

expecting success of 7450.21 'set up repo with symlinked gitmodules (hfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitmodules-hfs/.git/
ok 21 - set up repo with symlinked gitmodules (hfs)

expecting success of 7450.22 'fsck detects symlinked gitmodules (hfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree f05ff48ea625258cb75d6ae58769d88e38bd4d7b
error in tree f05ff48ea625258cb75d6ae58769d88e38bd4d7b: gitmodulesSymlink: .gitmodules is a symbolic link
ok 22 - fsck detects symlinked gitmodules (hfs)

expecting success of 7450.23 'refuse to load symlinked gitmodules into index (hfs)': 
		test_must_fail \
			git -C $dir \
			    -c core.protectntfs \
			    -c core.protecthfs \
			    read-tree $tree 2>err &&
		grep "invalid path.*$name" err &&
		git -C $dir ls-files -s >out &&
		test_must_be_empty out
	
error: invalid path '.‌gitmodules'
ok 23 - refuse to load symlinked gitmodules into index (hfs)

expecting success of 7450.24 'set up repo with symlinked gitattributes (vanilla)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitattributes-vanilla/.git/
ok 24 - set up repo with symlinked gitattributes (vanilla)

expecting success of 7450.25 'fsck detects symlinked gitattributes (vanilla)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 5c3f3062de94de544a8bfe6df8692677d998f33c
warning in tree 5c3f3062de94de544a8bfe6df8692677d998f33c: gitattributesSymlink: .gitattributes is a symlink
ok 25 - fsck detects symlinked gitattributes (vanilla)

expecting success of 7450.26 'set up repo with symlinked gitattributes (ntfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitattributes-ntfs/.git/
ok 26 - set up repo with symlinked gitattributes (ntfs)

expecting success of 7450.27 'fsck detects symlinked gitattributes (ntfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 365f92e02b471b96dd664ae519684e96be6b53c4
warning in tree 365f92e02b471b96dd664ae519684e96be6b53c4: gitattributesSymlink: .gitattributes is a symlink
ok 27 - fsck detects symlinked gitattributes (ntfs)

expecting success of 7450.28 'set up repo with symlinked gitattributes (hfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitattributes-hfs/.git/
ok 28 - set up repo with symlinked gitattributes (hfs)

expecting success of 7450.29 'fsck detects symlinked gitattributes (hfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 81bb9daf241a227a6d5442de207414e1493c35bf
warning in tree 81bb9daf241a227a6d5442de207414e1493c35bf: gitattributesSymlink: .gitattributes is a symlink
ok 29 - fsck detects symlinked gitattributes (hfs)

expecting success of 7450.30 'set up repo with symlinked gitignore (vanilla)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitignore-vanilla/.git/
ok 30 - set up repo with symlinked gitignore (vanilla)

expecting success of 7450.31 'fsck detects symlinked gitignore (vanilla)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 57a763a8fb76df34da5685f6fb4c4cc311857513
warning in tree 57a763a8fb76df34da5685f6fb4c4cc311857513: gitignoreSymlink: .gitignore is a symlink
ok 31 - fsck detects symlinked gitignore (vanilla)

expecting success of 7450.32 'set up repo with symlinked gitignore (ntfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitignore-ntfs/.git/
ok 32 - set up repo with symlinked gitignore (ntfs)

expecting success of 7450.33 'fsck detects symlinked gitignore (ntfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 6eaacfe52e1fc75cf8ea08bf598f2f70f44596eb
warning in tree 6eaacfe52e1fc75cf8ea08bf598f2f70f44596eb: gitignoreSymlink: .gitignore is a symlink
ok 33 - fsck detects symlinked gitignore (ntfs)

expecting success of 7450.34 'set up repo with symlinked gitignore (hfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-gitignore-hfs/.git/
ok 34 - set up repo with symlinked gitignore (hfs)

expecting success of 7450.35 'fsck detects symlinked gitignore (hfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 3331bf4831e6a71f5fc6d7f2fd128b77308e3e51
warning in tree 3331bf4831e6a71f5fc6d7f2fd128b77308e3e51: gitignoreSymlink: .gitignore is a symlink
ok 35 - fsck detects symlinked gitignore (hfs)

expecting success of 7450.36 'set up repo with symlinked mailmap (vanilla)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-mailmap-vanilla/.git/
ok 36 - set up repo with symlinked mailmap (vanilla)

expecting success of 7450.37 'fsck detects symlinked mailmap (vanilla)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 44cca4d5f38cb11a3661941ffdaa470af3a54ba6
warning in tree 44cca4d5f38cb11a3661941ffdaa470af3a54ba6: mailmapSymlink: .mailmap is a symlink
ok 37 - fsck detects symlinked mailmap (vanilla)

expecting success of 7450.38 'set up repo with symlinked mailmap (ntfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-mailmap-ntfs/.git/
ok 38 - set up repo with symlinked mailmap (ntfs)

expecting success of 7450.39 'fsck detects symlinked mailmap (ntfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 96f7049db21ead9d0c3d89a0fcbacac1e18320ca
warning in tree 96f7049db21ead9d0c3d89a0fcbacac1e18320ca: mailmapSymlink: .mailmap is a symlink
ok 39 - fsck detects symlinked mailmap (ntfs)

expecting success of 7450.40 'set up repo with symlinked mailmap (hfs)': 
		git init $dir &&
		(
			cd $dir &&

			# Make the tree directly to avoid index restrictions.
			#
			# Because symlinks store the target as a blob, choose
			# a pathname that could be parsed as a .gitmodules file
			# to trick naive non-symlink-aware checking.
			tricky="[foo]bar=true" &&
			content=$(git hash-object -w ../.gitmodules) &&
			target=$(printf "$tricky" | git hash-object -w --stdin) &&
			{
				printf "100644 blob $content\t$tricky\n" &&
				printf "120000 blob $target\t$path\n"
			} >bad-tree
		) &&
		tree=$(git -C $dir mktree <$dir/bad-tree)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/symlink-mailmap-hfs/.git/
ok 40 - set up repo with symlinked mailmap (hfs)

expecting success of 7450.41 'fsck detects symlinked mailmap (hfs)': 
		(
			cd $dir &&

			# Check not only that we fail, but that it is due to the
			# symlink detector
			$fsck_must_fail git fsck 2>output &&
			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
		)
	
dangling tree 5dd50ae971022207a718c066271666029f75faa2
warning in tree 5dd50ae971022207a718c066271666029f75faa2: mailmapSymlink: .mailmap is a symlink
ok 41 - fsck detects symlinked mailmap (hfs)

expecting success of 7450.42 'fsck detects non-blob .gitmodules': 
	git init non-blob &&
	(
		cd non-blob &&

		# As above, make the funny tree directly to avoid index
		# restrictions.
		mkdir subdir &&
		cp ../.gitmodules subdir/file &&
		git add subdir/file &&
		git commit -m ok &&
		git ls-tree HEAD | sed s/subdir/.gitmodules/ | git mktree &&

		test_must_fail git fsck 2>output &&
		test_i18ngrep gitmodulesBlob output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/non-blob/.git/
[master (root-commit) 24bbf3f] ok
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
 create mode 100644 subdir/file
46e046807e2e88824db8d783f16b8f34ae79f600
dangling tree 46e046807e2e88824db8d783f16b8f34ae79f600
error in tree 8fe8a84806a414f4da75794b1410ed9527bdc98c: gitmodulesBlob: non-blob found at .gitmodules
ok 42 - fsck detects non-blob .gitmodules

expecting success of 7450.43 'fsck detects corrupt .gitmodules': 
	git init corrupt &&
	(
		cd corrupt &&

		echo "[broken" >.gitmodules &&
		git add .gitmodules &&
		git commit -m "broken gitmodules" &&

		git fsck 2>output &&
		test_i18ngrep gitmodulesParse output &&
		test_i18ngrep ! "bad config" output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/corrupt/.git/
[master (root-commit) 3fe1e33] broken gitmodules
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 .gitmodules
warning in blob e39defa11acf1626d747f0b70076b6be5c0fd4c9: gitmodulesParse: could not parse gitmodules blob
ok 43 - fsck detects corrupt .gitmodules

ok 44 # skip prevent git~1 squatting on Windows (missing WINDOWS)

expecting success of 7450.45 'git dirs of sibling submodules must not be nested': 
	git init nested &&
	test_commit -C nested nested &&
	(
		cd nested &&
		cat >.gitmodules <<-EOF &&
		[submodule "hippo"]
			url = .
			path = thing1
		[submodule "hippo/hooks"]
			url = .
			path = thing2
		EOF
		git clone . thing1 &&
		git clone . thing2 &&
		git add .gitmodules thing1 thing2 &&
		test_tick &&
		git commit -m nested
	) &&
	test_must_fail git clone --recurse-submodules nested clone 2>err &&
	test_i18ngrep "is inside git dir" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/nested/.git/
[master (root-commit) 111f058] nested
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 nested.t
Cloning into 'thing1'...
done.
Cloning into 'thing2'...
done.
warning: adding embedded git repository: thing1
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> thing1
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached thing1
hint: 
hint: See "git help submodule" for more information.
warning: adding embedded git repository: thing2
[master f2f7cbd] nested
 Author: A U Thor <author@example.com>
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 thing1
 create mode 160000 thing2
error: submodule git dir '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/clone/.git/modules/hippo/hooks' is inside git dir '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/clone/.git/modules/hippo'
error: submodule git dir '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/clone/.git/modules/hippo/hooks' is inside git dir '/<<PKGBUILDDIR>>/t/trash directory.t7450-bad-git-dotfiles/clone/.git/modules/hippo'
ok 45 - git dirs of sibling submodules must not be nested

# passed all 45 test(s)
1..45
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7422-submodule-output.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/.git/
expecting success of 7422.1 'setup': 
	test_commit A &&
	test_commit B &&
	setup_sub S  &&
	setup_sub S.D &&
	setup_sub S.C &&
	setup_sub S.C.D &&
	setup_sub X &&
	git add S* &&
	test_commit C &&

	# recursive in X/
	git -C X pull &&
	GIT_ALLOW_PROTOCOL=file git -C X submodule update --init &&

	# dirty
	for d in S.D X/S.D
	do
		echo dirty >"$d"/A.t || return 1
	done &&

	# commit (for --cached)
	for d in S.C* X/S.C*
	do
		git -C "$d" reset --hard A || return 1
	done &&

	# dirty
	for d in S*.D X/S*.D
	do
		echo dirty >"$d/C2.t" || return 1
	done &&

	for ref in A B C
	do
		# Not different with SHA-1 and SHA-256, just (ab)using
		# test_oid_cache as a variable bag to avoid using
		# $(git rev-parse ...).
		oid=$(git rev-parse $ref) &&
		test_oid_cache <<-EOF || return 1
		$ref sha1:$oid
		$ref sha256:$oid
		EOF
	done

[master (root-commit) 0ddfaf1] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master d9df450] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Cloning into 'S'...
done.
Adding existing repo at 'S' to the index
Cloning into 'S.D'...
done.
Adding existing repo at 'S.D' to the index
Cloning into 'S.C'...
done.
Adding existing repo at 'S.C' to the index
Cloning into 'S.C.D'...
done.
Adding existing repo at 'S.C.D' to the index
Cloning into 'X'...
done.
Adding existing repo at 'X' to the index
[master 2377ff0] C
 Author: A U Thor <author@example.com>
 7 files changed, 21 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 C.t
 create mode 160000 S
 create mode 160000 S.C
 create mode 160000 S.C.D
 create mode 160000 S.D
 create mode 160000 X
From /<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/.
   d9df450..2377ff0  master     -> origin/master
 * [new tag]         C          -> C
Updating d9df450..2377ff0
Fast-forward
 .gitmodules | 15 +++++++++++++++
 C.t         |  1 +
 S           |  1 +
 S.C         |  1 +
 S.C.D       |  1 +
 S.D         |  1 +
 X           |  1 +
 7 files changed, 21 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 C.t
 create mode 160000 S
 create mode 160000 S.C
 create mode 160000 S.C.D
 create mode 160000 S.D
 create mode 160000 X
Submodule 'S' (/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/./S) registered for path 'S'
Submodule 'S.C' (/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/./S.C) registered for path 'S.C'
Submodule 'S.C.D' (/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/./S.C.D) registered for path 'S.C.D'
Submodule 'S.D' (/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/./S.D) registered for path 'S.D'
Submodule 'X' (/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/./X) registered for path 'X'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/X/S'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/X/S.C'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/X/S.C.D'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/X/S.D'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7422-submodule-output/X/X'...
done.
Submodule path 'S': checked out 'd9df4505cb3522088b9e29d6051ac16f1564154a'
Submodule path 'S.C': checked out 'd9df4505cb3522088b9e29d6051ac16f1564154a'
Submodule path 'S.C.D': checked out 'd9df4505cb3522088b9e29d6051ac16f1564154a'
Submodule path 'S.D': checked out 'd9df4505cb3522088b9e29d6051ac16f1564154a'
Submodule path 'X': checked out 'd9df4505cb3522088b9e29d6051ac16f1564154a'
HEAD is now at 0ddfaf1 A
HEAD is now at 0ddfaf1 A
HEAD is now at 0ddfaf1 A
HEAD is now at 0ddfaf1 A
ok 1 - setup

expecting success of 7422.2 'git submodule ': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid A) S.C (A)
		>+$(test_oid A) S.C.D (A)
		> $(test_oid B) S.D (B)
		>+$(test_oid C) X (C)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 2 - git submodule 

expecting success of 7422.3 'git submodule status': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid A) S.C (A)
		>+$(test_oid A) S.C.D (A)
		> $(test_oid B) S.D (B)
		>+$(test_oid C) X (C)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 3 - git submodule status

expecting success of 7422.4 'git submodule status --recursive': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid A) S.C (A)
		>+$(test_oid A) S.C.D (A)
		> $(test_oid B) S.D (B)
		>+$(test_oid C) X (C)
		> $(test_oid B) X/S (B)
		>+$(test_oid A) X/S.C (A)
		>+$(test_oid A) X/S.C.D (A)
		> $(test_oid B) X/S.D (B)
		> $(test_oid B) X/X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 4 - git submodule status --recursive

expecting success of 7422.5 'git submodule --quiet': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 5 - git submodule --quiet

expecting success of 7422.6 'git submodule --quiet status': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 6 - git submodule --quiet status

expecting success of 7422.7 'git submodule status --quiet': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 7 - git submodule status --quiet

expecting success of 7422.8 'git submodule --cached': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid B) S.C (B)
		>+$(test_oid B) S.C.D (B)
		> $(test_oid B) S.D (B)
		>+$(test_oid B) X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 8 - git submodule --cached

expecting success of 7422.9 'git submodule --cached status': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid B) S.C (B)
		>+$(test_oid B) S.C.D (B)
		> $(test_oid B) S.D (B)
		>+$(test_oid B) X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 9 - git submodule --cached status

expecting success of 7422.10 'git submodule status --cached': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid B) S.C (B)
		>+$(test_oid B) S.C.D (B)
		> $(test_oid B) S.D (B)
		>+$(test_oid B) X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 10 - git submodule status --cached

expecting success of 7422.11 'git submodule --cached --quiet': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 11 - git submodule --cached --quiet

expecting success of 7422.12 'git submodule --cached --quiet status': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 12 - git submodule --cached --quiet status

expecting success of 7422.13 'git submodule --cached status --quiet': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 13 - git submodule --cached status --quiet

expecting success of 7422.14 'git submodule --quiet status --cached': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 14 - git submodule --quiet status --cached

expecting success of 7422.15 'git submodule status --cached --quiet': 
		git submodule $opts >out &&
		test_must_be_empty out
	
ok 15 - git submodule status --cached --quiet

expecting success of 7422.16 'git submodule status --cached --recursive': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid B) S.C (B)
		>+$(test_oid B) S.C.D (B)
		> $(test_oid B) S.D (B)
		>+$(test_oid B) X (B)
		> $(test_oid B) X/S (B)
		>+$(test_oid B) X/S.C (B)
		>+$(test_oid B) X/S.C.D (B)
		> $(test_oid B) X/S.D (B)
		> $(test_oid B) X/X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 16 - git submodule status --cached --recursive

expecting success of 7422.17 'git submodule --cached status --recursive': 
		sed -e "s/^>//" >expect <<-EOF &&
		> $(test_oid B) S (B)
		>+$(test_oid B) S.C (B)
		>+$(test_oid B) S.C.D (B)
		> $(test_oid B) S.D (B)
		>+$(test_oid B) X (B)
		> $(test_oid B) X/S (B)
		>+$(test_oid B) X/S.C (B)
		>+$(test_oid B) X/S.C.D (B)
		> $(test_oid B) X/S.D (B)
		> $(test_oid B) X/X (B)
		EOF
		git submodule $opts >actual.raw &&
		normalize_status <actual.raw >actual &&
		test_cmp expect actual
	
ok 17 - git submodule --cached status --recursive

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7500-commit-template-squash-signoff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7500-commit-template-squash-signoff/.git/
expecting success of 7500.1 'a basic commit in an empty tree should succeed': 
	echo content > foo &&
	git add foo &&
	git commit -m "initial commit"

[master (root-commit) 02efb91] initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
ok 1 - a basic commit in an empty tree should succeed

expecting success of 7500.2 'nonexistent template file should return error': 
	echo changes >> foo &&
	git add foo &&
	(
		GIT_EDITOR="echo hello >\"\$1\"" &&
		export GIT_EDITOR &&
		test_must_fail git commit --template "$PWD"/notexist
	)

fatal: could not read '/<<PKGBUILDDIR>>/t/trash directory.t7500-commit-template-squash-signoff/notexist': No such file or directory
ok 2 - nonexistent template file should return error

expecting success of 7500.3 'nonexistent template file in config should return error': 
	test_config commit.template "$PWD"/notexist &&
	(
		GIT_EDITOR="echo hello >\"\$1\"" &&
		export GIT_EDITOR &&
		test_must_fail git commit
	)

fatal: could not read '/<<PKGBUILDDIR>>/t/trash directory.t7500-commit-template-squash-signoff/notexist': No such file or directory
ok 3 - nonexistent template file in config should return error

expecting success of 7500.4 'unedited template should not commit': 
	echo "template line" > "$TEMPLATE" &&
	test_must_fail git commit --template "$TEMPLATE"

Aborting commit; you did not edit the message.
ok 4 - unedited template should not commit

expecting success of 7500.5 'unedited template with comments should not commit': 
	echo "# comment in template" >> "$TEMPLATE" &&
	test_must_fail git commit --template "$TEMPLATE"

Aborting commit; you did not edit the message.
ok 5 - unedited template with comments should not commit

expecting success of 7500.6 'a Signed-off-by line by itself should not commit': 
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-signed-off &&
		test_must_fail git commit --template "$TEMPLATE"
	)

Aborting commit; you did not edit the message.
ok 6 - a Signed-off-by line by itself should not commit

expecting success of 7500.7 'adding comments to a template should not commit': 
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-comments &&
		test_must_fail git commit --template "$TEMPLATE"
	)

Aborting commit; you did not edit the message.
ok 7 - adding comments to a template should not commit

expecting success of 7500.8 'adding real content to a template should commit': 
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
		git commit --template "$TEMPLATE"
	) &&
	commit_msg_is "template linecommit message"

[master 0439be9] template line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 8 - adding real content to a template should commit

expecting success of 7500.9 '-t option should be short for --template': 
	echo "short template" > "$TEMPLATE" &&
	echo "new content" >> foo &&
	git add foo &&
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
		git commit -t "$TEMPLATE"
	) &&
	commit_msg_is "short templatecommit message"

[master e42593e] short template
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 9 - -t option should be short for --template

expecting success of 7500.10 'config-specified template should commit': 
	echo "new template" > "$TEMPLATE" &&
	test_config commit.template "$TEMPLATE" &&
	echo "more content" >> foo &&
	git add foo &&
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
		git commit
	) &&
	commit_msg_is "new templatecommit message"

[master 811561e] new template
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 10 - config-specified template should commit

expecting success of 7500.11 'explicit commit message should override template': 
	echo "still more content" >> foo &&
	git add foo &&
	GIT_EDITOR="$TEST_DIRECTORY"/t7500/add-content git commit --template "$TEMPLATE" \
		-m "command line msg" &&
	commit_msg_is "command line msg"

[master d8cbf96] command line msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 11 - explicit commit message should override template

expecting success of 7500.12 'commit message from file should override template': 
	echo "content galore" >> foo &&
	git add foo &&
	echo "standard input msg" |
	(
		test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
		git commit --template "$TEMPLATE" --file -
	) &&
	commit_msg_is "standard input msg"

[master 65e5eb1] standard input msg
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 12 - commit message from file should override template

expecting success of 7500.13 'commit message from template with whitespace issue': 
	echo "content galore" >>foo &&
	git add foo &&
	GIT_EDITOR=\""$TEST_DIRECTORY"\"/t7500/add-whitespaced-content \
	git commit --template "$TEMPLATE" &&
	commit_msg_is "commit message"

[master 5e66887] commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 13 - commit message from template with whitespace issue

expecting success of 7500.14 'using alternate GIT_INDEX_FILE (1)': 

	cp .git/index saved-index &&
	(
		echo some new content >file &&
	        GIT_INDEX_FILE=.git/another_index &&
		export GIT_INDEX_FILE &&
		git add file &&
		git commit -m "commit using another index" &&
		git diff-index --exit-code HEAD &&
		git diff-files --exit-code
	) &&
	cmp .git/index saved-index >/dev/null


[master 7c961fb] commit using another index
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 7 deletions(-)
 create mode 100644 file
 delete mode 100644 foo
ok 14 - using alternate GIT_INDEX_FILE (1)

expecting success of 7500.15 'using alternate GIT_INDEX_FILE (2)': 

	cp .git/index saved-index &&
	(
		rm -f .git/no-such-index &&
		GIT_INDEX_FILE=.git/no-such-index &&
		export GIT_INDEX_FILE &&
		git commit -m "commit using nonexistent index" &&
		test -z "$(git ls-files)" &&
		test -z "$(git ls-tree HEAD)"

	) &&
	cmp .git/index saved-index >/dev/null

[master 4e95e06] commit using nonexistent index
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file
ok 15 - using alternate GIT_INDEX_FILE (2)

expecting success of 7500.16 '--signoff': 
	echo "yet another content *narf*" >> foo &&
	echo "zort" | git commit -s -F - foo &&
	git cat-file commit HEAD | sed "1,/^\$/d" > output &&
	test_cmp expect output

[master 5b1a0f3] zort
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+)
 create mode 100644 foo
ok 16 - --signoff

expecting success of 7500.17 'commit message from file (1)': 
	mkdir subdir &&
	echo "Log in top directory" >log &&
	echo "Log in sub directory" >subdir/log &&
	(
		cd subdir &&
		git commit --allow-empty -F log
	) &&
	commit_msg_is "Log in sub directory"

[master 101c1bd] Log in sub directory
 Author: A U Thor <author@example.com>
ok 17 - commit message from file (1)

expecting success of 7500.18 'commit message from file (2)': 
	rm -f log &&
	echo "Log in sub directory" >subdir/log &&
	(
		cd subdir &&
		git commit --allow-empty -F log
	) &&
	commit_msg_is "Log in sub directory"

[master 83046dc] Log in sub directory
 Author: A U Thor <author@example.com>
ok 18 - commit message from file (2)

expecting success of 7500.19 'commit message from stdin': 
	(
		cd subdir &&
		echo "Log with foo word" | git commit --allow-empty -F -
	) &&
	commit_msg_is "Log with foo word"

[master 2f170f9] Log with foo word
 Author: A U Thor <author@example.com>
ok 19 - commit message from stdin

expecting success of 7500.20 'commit -F overrides -t': 
	(
		cd subdir &&
		echo "-F log" > f.log &&
		echo "-t template" > t.template &&
		git commit --allow-empty -F f.log -t t.template
	) &&
	commit_msg_is "-F log"

[master df55417] -F log
 Author: A U Thor <author@example.com>
ok 20 - commit -F overrides -t

expecting success of 7500.21 'Commit without message is allowed with --allow-empty-message': 
	echo "more content" >>foo &&
	git add foo &&
	>empty &&
	git commit --allow-empty-message <empty &&
	commit_msg_is "" &&
	git tag empty-message-commit

[master 5cf7fec] 
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 21 - Commit without message is allowed with --allow-empty-message

expecting success of 7500.22 'Commit without message is no-no without --allow-empty-message': 
	echo "more content" >>foo &&
	git add foo &&
	>empty &&
	test_must_fail git commit <empty

Aborting commit due to empty commit message.
ok 22 - Commit without message is no-no without --allow-empty-message

expecting success of 7500.23 'Commit a message with --allow-empty-message': 
	echo "even more content" >>foo &&
	git add foo &&
	git commit --allow-empty-message -m"hello there" &&
	commit_msg_is "hello there"

[master 1a05b50] hello there
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
ok 23 - Commit a message with --allow-empty-message

expecting success of 7500.24 'commit -C empty respects --allow-empty-message': 
	echo more >>foo &&
	git add foo &&
	test_must_fail git commit -C empty-message-commit &&
	git commit -C empty-message-commit --allow-empty-message &&
	commit_msg_is ""

Aborting commit due to empty commit message.
[master 7c3a153] 
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 24 - commit -C empty respects --allow-empty-message

expecting success of 7500.25 'commit --fixup provides correct one-line commit message': 
	commit_for_rebase_autosquash_setup &&
	EDITOR="echo ignored >>" git commit --fixup HEAD~1 &&
	commit_msg_is "fixup! target message subject line"

[master 9b5b399] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 5b2adcc] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 77c550c] fixup! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 25 - commit --fixup provides correct one-line commit message

expecting success of 7500.26 'commit --fixup -m"something" -m"extra"': 
	commit_for_rebase_autosquash_setup &&
	git commit --fixup HEAD~1 -m"something" -m"extra" &&
	commit_msg_is "fixup! target message subject linesomething

extra"

[master d870198] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 4134eb8] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master d256be7] fixup! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 26 - commit --fixup -m"something" -m"extra"

expecting success of 7500.27 'commit --fixup --edit': 
	commit_for_rebase_autosquash_setup &&
	EDITOR="printf \"something\nextra\" >>" git commit --fixup HEAD~1 --edit &&
	commit_msg_is "fixup! target message subject linesomething
extra"

[master 68474d9] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master d9cd24a] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master b813bdf] fixup! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 27 - commit --fixup --edit

expecting success of 7500.28 'commit --fixup=amend: creates amend! commit': 
	commit_for_rebase_autosquash_setup &&
	cat >expected <<-EOF &&
	amend! $(git log -1 --format=%s HEAD~)

	$(get_commit_msg HEAD~)

	edited
	EOF
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="edited" \
			git commit --fixup=amend:HEAD~
	) &&
	get_commit_msg HEAD >actual &&
	test_cmp expected actual

[master 25d4b87] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 49d2e45] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 6a95a22] amend! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 28 - commit --fixup=amend: creates amend! commit

expecting success of 7500.29 '--fixup=amend: --only ignores staged changes': 
	commit_for_rebase_autosquash_setup &&
	cat >expected <<-EOF &&
	amend! $(git log -1 --format=%s HEAD~)

	$(get_commit_msg HEAD~)

	edited
	EOF
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="edited" \
			git commit --fixup=amend:HEAD~ --only
	) &&
	get_commit_msg HEAD >actual &&
	test_cmp expected actual &&
	test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
	test_cmp_rev HEAD@{1} HEAD^ &&
	test_expect_code 1 git diff --cached --exit-code &&
	git cat-file blob :foo >actual &&
	test_cmp foo actual

[master 495438c] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master edaae07] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 948c995] amend! target message subject line
 Author: A U Thor <author@example.com>
diff --git a/foo b/foo
index 42c2cbb..b6c6366 100644
--- a/foo
+++ b/foo
@@ -24,3 +24,4 @@ second content line
 third content line
 first content line
 second content line
+third content line
ok 29 - --fixup=amend: --only ignores staged changes

expecting success of 7500.30 '--fixup=reword: ignores staged changes': 
	commit_for_rebase_autosquash_setup &&
	cat >expected <<-EOF &&
	amend! $(git log -1 --format=%s HEAD~)

	$(get_commit_msg HEAD~)

	edited
	EOF
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="edited" \
			git commit --fixup=reword:HEAD~
	) &&
	get_commit_msg HEAD >actual &&
	test_cmp expected actual &&
	test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
	test_cmp_rev HEAD@{1} HEAD^ &&
	test_expect_code 1 git diff --cached --exit-code &&
	git cat-file blob :foo >actual &&
	test_cmp foo actual

[master ed4d665] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 218b136] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master ee78bdc] amend! target message subject line
 Author: A U Thor <author@example.com>
diff --git a/foo b/foo
index 0b75f14..a67f15d 100644
--- a/foo
+++ b/foo
@@ -27,3 +27,4 @@ second content line
 third content line
 first content line
 second content line
+third content line
ok 30 - --fixup=reword: ignores staged changes

expecting success of 7500.31 '--fixup=reword: error out with -m option': 
	commit_for_rebase_autosquash_setup &&
	echo "fatal: options '-m' and '--fixup:reword' cannot be used together" >expect &&
	test_must_fail git commit --fixup=reword:HEAD~ -m "reword commit message" 2>actual &&
	test_cmp expect actual

[master 9d96c85] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 5b2f7bf] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 31 - --fixup=reword: error out with -m option

expecting success of 7500.32 '--fixup=amend: error out with -m option': 
	commit_for_rebase_autosquash_setup &&
	echo "fatal: options '-m' and '--fixup:amend' cannot be used together" >expect &&
	test_must_fail git commit --fixup=amend:HEAD~ -m "amend commit message" 2>actual &&
	test_cmp expect actual

[master a94321d] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 7600d55] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 32 - --fixup=amend: error out with -m option

expecting success of 7500.33 'consecutive amend! commits remove amend! line from commit msg body': 
	commit_for_rebase_autosquash_setup &&
	cat >expected <<-EOF &&
	amend! amend! $(git log -1 --format=%s HEAD~)

	$(get_commit_msg HEAD~)

	edited 1

	edited 2
	EOF
	echo "reword new commit message" >actual &&
	(
		set_fake_editor &&
		FAKE_COMMIT_AMEND="edited 1" \
			git commit --fixup=reword:HEAD~ &&
		FAKE_COMMIT_AMEND="edited 2" \
			git commit --fixup=reword:HEAD
	) &&
	get_commit_msg HEAD >actual &&
	test_cmp expected actual

[master 2a99715] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 550158e] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 38fd587] amend! target message subject line
 Author: A U Thor <author@example.com>
[master 1a502bb] amend! amend! target message subject line
 Author: A U Thor <author@example.com>
ok 33 - consecutive amend! commits remove amend! line from commit msg body

expecting success of 7500.34 'deny to create amend! commit if its commit msg body is empty': 
	commit_for_rebase_autosquash_setup &&
	echo "Aborting commit due to empty commit message body." >expected &&
	(
		set_fake_editor &&
		test_must_fail env FAKE_COMMIT_MESSAGE="amend! target message subject line" \
			git commit --fixup=amend:HEAD~ 2>actual
	) &&
	test_cmp expected actual

[master c428437] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master ac86728] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 34 - deny to create amend! commit if its commit msg body is empty

expecting success of 7500.35 'amend! commit allows empty commit msg body with --allow-empty-message': 
	commit_for_rebase_autosquash_setup &&
	cat >expected <<-EOF &&
	amend! $(git log -1 --format=%s HEAD~)
	EOF
	(
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE="amend! target message subject line" \
			git commit --fixup=amend:HEAD~ --allow-empty-message &&
		get_commit_msg HEAD >actual
	) &&
	test_cmp expected actual

[master d75d1dc] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 95b8327] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master a8cf642] amend! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 35 - amend! commit allows empty commit msg body with --allow-empty-message

expecting success of 7500.36 '--fixup=reword: incompatible with --all': 
		echo 'fatal: reword option of '\''--fixup'\'' and' 			''\''--patch/--interactive/--all/--include/--only'\' 			'cannot be used together' >expect &&
		test_must_fail git commit --fixup=reword:HEAD~ --all 2>actual &&
		test_cmp expect actual
	
ok 36 - --fixup=reword: incompatible with --all

expecting success of 7500.37 '--fixup=reword: incompatible with --include': 
		echo 'fatal: reword option of '\''--fixup'\'' and' 			''\''--patch/--interactive/--all/--include/--only'\' 			'cannot be used together' >expect &&
		test_must_fail git commit --fixup=reword:HEAD~ --include 2>actual &&
		test_cmp expect actual
	
ok 37 - --fixup=reword: incompatible with --include

expecting success of 7500.38 '--fixup=reword: incompatible with --only': 
		echo 'fatal: reword option of '\''--fixup'\'' and' 			''\''--patch/--interactive/--all/--include/--only'\' 			'cannot be used together' >expect &&
		test_must_fail git commit --fixup=reword:HEAD~ --only 2>actual &&
		test_cmp expect actual
	
ok 38 - --fixup=reword: incompatible with --only

expecting success of 7500.39 '--fixup=reword: incompatible with --interactive': 
		echo 'fatal: reword option of '\''--fixup'\'' and' 			''\''--patch/--interactive/--all/--include/--only'\' 			'cannot be used together' >expect &&
		test_must_fail git commit --fixup=reword:HEAD~ --interactive 2>actual &&
		test_cmp expect actual
	
ok 39 - --fixup=reword: incompatible with --interactive

expecting success of 7500.40 '--fixup=reword: incompatible with --patch': 
		echo 'fatal: reword option of '\''--fixup'\'' and' 			''\''--patch/--interactive/--all/--include/--only'\' 			'cannot be used together' >expect &&
		test_must_fail git commit --fixup=reword:HEAD~ --patch 2>actual &&
		test_cmp expect actual
	
ok 40 - --fixup=reword: incompatible with --patch

expecting success of 7500.41 '--fixup=reword: give error with pathsec': 
	commit_for_rebase_autosquash_setup &&
	echo "fatal: reword option of '--fixup' and path 'foo' cannot be used together" >expect &&
	test_must_fail git commit --fixup=reword:HEAD~ -- foo 2>actual &&
	test_cmp expect actual

[master c3507b6] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master f054bdc] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 41 - --fixup=reword: give error with pathsec

expecting success of 7500.42 '--fixup=reword: -F give error message': 
	echo "fatal: options '-F' and '--fixup' cannot be used together" >expect &&
	test_must_fail git commit --fixup=reword:HEAD~ -F msg  2>actual &&
	test_cmp expect actual

ok 42 - --fixup=reword: -F give error message

expecting success of 7500.43 'commit --squash works with -F': 
	commit_for_rebase_autosquash_setup &&
	echo "log message from file" >msgfile &&
	git commit --squash HEAD~1 -F msgfile  &&
	commit_msg_is "squash! target message subject linelog message from file"

[master 21cad69] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[master 2bfb665] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master bc37c4c] squash! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 43 - commit --squash works with -F

expecting success of 7500.44 'commit --squash works with -m': 
	commit_for_rebase_autosquash_setup &&
	git commit --squash HEAD~1 -m "foo bar\nbaz" &&
	commit_msg_is "squash! target message subject linefoo bar\nbaz"

[master 34d018d] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 9280558] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 74b4402] squash! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 44 - commit --squash works with -m

expecting success of 7500.45 'commit --squash works with -C': 
	commit_for_rebase_autosquash_setup &&
	git commit --squash HEAD~1 -C HEAD &&
	commit_msg_is "squash! target message subject lineintermediate commit"

[master 6ba9d60] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master a1fa052] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 3059308] squash! target message subject line
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 45 - commit --squash works with -C

expecting success of 7500.46 'commit --squash works with -c': 
	commit_for_rebase_autosquash_setup &&
	test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
	git commit --squash HEAD~1 -c HEAD &&
	commit_msg_is "squash! target message subject lineedited commit"

[master 2cb0c38] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 81a0468] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 9792f72] squash! target message subject line
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 46 - commit --squash works with -c

expecting success of 7500.47 'commit --squash works with -C for same commit': 
	commit_for_rebase_autosquash_setup &&
	git commit --squash HEAD -C HEAD &&
	commit_msg_is "squash! intermediate commit"

[master fcc9597] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 3fba3a1] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master b6827cd] squash! intermediate commit
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 47 - commit --squash works with -C for same commit

expecting success of 7500.48 'commit --squash works with -c for same commit': 
	commit_for_rebase_autosquash_setup &&
	test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
	git commit --squash HEAD -c HEAD &&
	commit_msg_is "squash! edited commit"

[master 35e184e] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 328d91f] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master d7c0314] squash! edited commit
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
ok 48 - commit --squash works with -c for same commit

expecting success of 7500.49 'commit --squash works with editor': 
	commit_for_rebase_autosquash_setup &&
	test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
	git commit --squash HEAD~1 &&
	commit_msg_is "squash! target message subject linecommit message"

[master acfdcf4] target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 5a82cf8] intermediate commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 8042530] squash! target message subject line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 49 - commit --squash works with editor

expecting success of 7500.50 'invalid message options when using --fixup': 
	echo changes >>foo &&
	echo "message" >log &&
	git add foo &&
	test_must_fail git commit --fixup HEAD~1 --squash HEAD~2 &&
	test_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&
	test_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&
	test_must_fail git commit --fixup HEAD~1 -F log

fatal: options '--squash' and '--fixup' cannot be used together
fatal: options '-C' and '--fixup' cannot be used together
fatal: options '-c' and '--fixup' cannot be used together
fatal: options '-F' and '--fixup' cannot be used together
ok 50 - invalid message options when using --fixup

expecting success of 7500.51 'new line found before status message in commit template': 
	git checkout -b commit-template-check &&
	git reset --hard HEAD &&
	touch commit-template-check &&
	git add commit-template-check &&
	GIT_EDITOR="cat >editor-input" git commit --untracked-files=no --allow-empty-message &&
	test_cmp expected-template editor-input

Switched to a new branch 'commit-template-check'
HEAD is now at 8042530 squash! target message subject line
[commit-template-check c1e58ac] 
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 commit-template-check
ok 51 - new line found before status message in commit template

expecting success of 7500.52 'setup empty commit with unstaged rename and copy': 
	test_create_repo unstaged_rename_and_copy &&
	(
		cd unstaged_rename_and_copy &&

		echo content >orig &&
		git add orig &&
		test_commit orig &&

		cp orig new_copy &&
		mv orig new_rename &&
		git add -N new_copy new_rename
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7500-commit-template-squash-signoff/unstaged_rename_and_copy/.git/
[master (root-commit) bac0952] orig
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 orig
 create mode 100644 orig.t
ok 52 - setup empty commit with unstaged rename and copy

expecting success of 7500.53 'check commit with unstaged rename and copy': 
	(
		cd unstaged_rename_and_copy &&

		test_must_fail git -c diff.renames=copy commit
	)

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	copied:     orig -> new_copy
	renamed:    orig -> new_rename

no changes added to commit (use "git add" and/or "git commit -a")
ok 53 - check commit with unstaged rename and copy

expecting success of 7500.54 'commit without staging files fails and displays hints': 
	echo "initial" >file &&
	git add file &&
	git commit -m initial &&
	echo "changes" >>file &&
	test_must_fail git commit -m update >actual &&
	test_i18ngrep "no changes added to commit (use \"git add\" and/or \"git commit -a\")" actual

[commit-template-check cfa8638] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
no changes added to commit (use "git add" and/or "git commit -a")
ok 54 - commit without staging files fails and displays hints

# passed all 54 test(s)
1..54
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7112-reset-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/.git/
expecting success of 7112.1 'git reset --keep --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1/.git/
[master (root-commit) 63c4304] Base inside first submodule
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub2/.git/
[master (root-commit) 27c5769] nested submodule base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_repo/.git/
[master (root-commit) 27611a5] Base
 Author: A U Thor <author@example.com>
 3 files changed, 4 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 file1
 create mode 100644 file2
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_repo/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_repo/uninitialized_sub'...
done.
[add_sub1 09bcf53] Add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 uninitialized_sub
Switched to a new branch 'remove_sub1'
warning: unable to rmdir 'sub1': Directory not empty
warning: unable to rmdir 'uninitialized_sub': Directory not empty
[remove_sub1 d6ba723] Revert "Add sub1"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 3 files changed, 9 deletions(-)
 delete mode 100644 .gitmodules
 delete mode 160000 sub1
 delete mode 160000 uninitialized_sub
Switched to a new branch 'modify_sub1'
Switched to a new branch 'modifications'
[modifications 03da4ea] modified file2 and added file3
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file3
To /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1
 * [new branch]      modifications -> modifications
[modify_sub1 cb2bda7] Modify sub1
 Author: A U Thor <author@example.com>
Switched to a new branch 'add_nested_sub'
Switched to a new branch 'add_nested_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_repo/sub1/sub2'...
done.
[add_nested_sub 8b3b335] add a nested submodule
 Author: A U Thor <author@example.com>
 2 files changed, 5 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[add_nested_sub 5bc57bf] update submodule, that updates a nested submodule
 Author: A U Thor <author@example.com>
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
Switched to a new branch 'modify_sub1_recursively'
[modify_sub1_recursively c7c4624] make a change in nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[modify_sub1_recursively 92fc14a] update nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[modify_sub1_recursively 953e869] update sub1, that updates nested sub
 Author: A U Thor <author@example.com>
To /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
To /<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub2
 * [new branch]      modify_sub1_recursively -> modify_sub1_recursively
Cleared directory 'sub2'
Submodule 'sub2' (../submodule_update_sub2) unregistered for path 'sub2'
Switched to a new branch 'replace_sub1_with_directory'
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Previous HEAD position was 63c4304 Base inside first submodule
Switched to branch 'modifications'
rm 'sub1'
[replace_sub1_with_directory cb28587] Replace sub1 with directory
 Author: A U Thor <author@example.com>
 5 files changed, 3 insertions(+), 5 deletions(-)
 delete mode 160000 sub1
 create mode 100644 sub1/file1
 create mode 100644 sub1/file2
 create mode 100644 sub1/file3
Switched to a new branch 'replace_directory_with_sub1'
[replace_directory_with_sub1 a2e65d5] Revert "Replace sub1 with directory"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 4 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 sub1/file1
 delete mode 100644 sub1/file2
 delete mode 100644 sub1/file3
Switched to a new branch 'replace_sub1_with_file'
rm 'sub1'
[replace_sub1_with_file 2364f5a] Replace sub1 with file
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 5 deletions(-)
 mode change 160000 => 100644 sub1
Switched to a new branch 'replace_file_with_sub1'
[replace_file_with_sub1 8b6fdfc] Revert "Replace sub1 with file"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 5 insertions(+), 1 deletion(-)
 mode change 100644 => 160000 sub1
Switched to a new branch 'invalid_sub1'
[invalid_sub1 e6169bf] Invalid sub1 commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'valid_sub1'
[valid_sub1 3036e4e] Revert "Invalid sub1 commit"
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
warning: unable to rmdir 'uninitialized_sub': Directory not empty
Switched to branch 'master'
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 1 - git reset --keep --recurse-submodules: added submodule is checked out

expecting success of 7112.2 'git reset --keep --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 2 - git reset --keep --recurse-submodules: added submodule is checked out in empty dir

expecting success of 7112.3 'git reset --keep --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
ok 3 - git reset --keep --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 7112.4 'git reset --keep --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
ok 4 - git reset --keep --recurse-submodules: replace directory with submodule

expecting success of 7112.5 'git reset --keep --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
ok 5 - git reset --keep --recurse-submodules: nested submodules are checked out

expecting success of 7112.6 'git reset --keep --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
ok 6 - git reset --keep --recurse-submodules: removed submodule removes submodules working tree

expecting success of 7112.7 'git reset --keep --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/.git/modules/sub1'
ok 7 - git reset --keep --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 7112.8 'git reset --keep --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 8 - git reset --keep --recurse-submodules: replace submodule with a file

checking known breakage of 7112.9 'git reset --keep --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git reset --keep --recurse-submodules replace_sub1_with_file
not ok 9 - git reset --keep --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 7112.10 'git reset --keep --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'no_submodule' set up to track 'origin/no_submodule'.
Directory sub1 doesn't exist
ok 10 - git reset --keep --recurse-submodules: worktrees of nested submodules are removed

expecting success of 7112.11 'git reset --keep --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 11 - git reset --keep --recurse-submodules: modified submodule updates submodule work tree

expecting success of 7112.12 'git reset --keep --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
error: Submodule 'sub1' cannot checkout new HEAD.
fatal: Could not reset index file to revision 'invalid_sub1'.
ok 12 - git reset --keep --recurse-submodules: updating to a missing submodule commit fails

expecting success of 7112.13 'git reset --keep --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
fatal: ref HEAD is not a symbolic ref
ok 13 - git reset --keep --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 7112.14 'git reset --keep --recurse-submodules: added submodule doesn't remove untracked file with same name': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			test_must_fail $command add_sub1 &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
fatal: Could not reset index file to revision 'add_sub1'.
ok 14 - git reset --keep --recurse-submodules: added submodule doesn't remove untracked file with same name

expecting success of 7112.15 'git reset --keep --recurse-submodules: added submodule removes an untracked ignored file': 
		test_when_finished "rm -rf submodule_update/.git/info" &&
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			: >sub1 &&
			mkdir .git/info &&
			echo sub1 >.git/info/exclude &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
ok 15 - git reset --keep --recurse-submodules: added submodule removes an untracked ignored file

checking known breakage of 7112.16 'git reset --keep --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_submodule_content sub1 origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
not ok 16 - git reset --keep --recurse-submodules: replace submodule with a directory # TODO known breakage

checking known breakage of 7112.17 'git reset --keep --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
not ok 17 - git reset --keep --recurse-submodules: replace submodule containing a .git directory with a directory must absorb the git dir # TODO known breakage

expecting success of 7112.18 'git reset --keep --recurse-submodules: replace submodule with a file works ignores ignored files in submodule': 
		test_when_finished "rm submodule_update/.git/modules/sub1/info/exclude" &&
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm -rf .git/modules/sub1/info &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			mkdir .git/modules/sub1/info &&
			echo ignored >.git/modules/sub1/info/exclude &&
			: >sub1/ignored &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
ok 18 - git reset --keep --recurse-submodules: replace submodule with a file works ignores ignored files in submodule

expecting success of 7112.19 'git -c submodule.recurse=true reset --keep: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			git -c submodule.recurse=true $cmd_args modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
ok 19 - git -c submodule.recurse=true reset --keep: modified submodule updates submodule work tree

expecting success of 7112.20 'git reset --keep --recurse-submodules: modified submodule updates submodule recursively': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
ok 20 - git reset --keep --recurse-submodules: modified submodule updates submodule recursively

expecting success of 7112.21 'git reset --hard --recurse-submodules: added submodule is checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
ok 21 - git reset --hard --recurse-submodules: added submodule is checked out

expecting success of 7112.22 'git reset --hard --recurse-submodules: added submodule is checked out in empty dir': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
ok 22 - git reset --hard --recurse-submodules: added submodule is checked out in empty dir

expecting success of 7112.23 'git reset --hard --recurse-submodules: replace tracked file with submodule checks out submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
HEAD is now at 8b6fdfc Revert "Replace sub1 with file"
ok 23 - git reset --hard --recurse-submodules: replace tracked file with submodule checks out submodule

expecting success of 7112.24 'git reset --hard --recurse-submodules: replace directory with submodule': 
		prolog &&
		reset_work_tree_to_interested replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
HEAD is now at a2e65d5 Revert "Replace sub1 with directory"
ok 24 - git reset --hard --recurse-submodules: replace directory with submodule

expecting success of 7112.25 'git reset --hard --recurse-submodules: nested submodules are checked out': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t modify_sub1_recursively origin/modify_sub1_recursively &&
			$command modify_sub1_recursively &&
			test_superproject_content origin/modify_sub1_recursively &&
			test_submodule_content sub1 origin/modify_sub1_recursively &&
			test_submodule_content -C sub1 sub2 origin/modify_sub1_recursively
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'modify_sub1_recursively' set up to track 'origin/modify_sub1_recursively'.
HEAD is now at 953e869 update sub1, that updates nested sub
ok 25 - git reset --hard --recurse-submodules: nested submodules are checked out

expecting success of 7112.26 'git reset --hard --recurse-submodules: removed submodule removes submodules working tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
HEAD is now at d6ba723 Revert "Add sub1"
ok 26 - git reset --hard --recurse-submodules: removed submodule removes submodules working tree

expecting success of 7112.27 'git reset --hard --recurse-submodules: removed submodule absorbs submodules .git directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			! test -e sub1 &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/.git/modules/sub1'
HEAD is now at d6ba723 Revert "Add sub1"
ok 27 - git reset --hard --recurse-submodules: removed submodule absorbs submodules .git directory

expecting success of 7112.28 'git reset --hard --recurse-submodules: replace submodule with a file': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file &&
			test -f sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
HEAD is now at 2364f5a Replace sub1 with file
ok 28 - git reset --hard --recurse-submodules: replace submodule with a file

checking known breakage of 7112.29 'git reset --hard --recurse-submodules: replace submodule with a file must fail with untracked files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/untrackedfile &&
			test_must_fail $command replace_sub1_with_file &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test -f sub1/untracked_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
HEAD is now at 2364f5a Replace sub1 with file
test_must_fail: command succeeded: git reset --hard --recurse-submodules replace_sub1_with_file
not ok 29 - git reset --hard --recurse-submodules: replace submodule with a file must fail with untracked files # TODO known breakage

expecting success of 7112.30 'git reset --hard --recurse-submodules: worktrees of nested submodules are removed': 
		prolog &&
		reset_work_tree_to_interested add_nested_sub &&
		(
			cd submodule_update &&
			git branch -t no_submodule origin/no_submodule &&
			$command no_submodule &&
			test_superproject_content origin/no_submodule &&
			! test_path_is_dir sub1 &&
			test_must_fail git config -f .git/modules/sub1/config core.worktree &&
			test_must_fail git config -f .git/modules/sub1/modules/sub2/config core.worktree
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_nested_sub'
branch 'add_nested_sub' set up to track 'origin/add_nested_sub'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '8b3b3353ac8999eb3d8af8e947e0ef2a08a60008'
Submodule 'sub2' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub2) registered for path 'sub1/sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/sub2'...
done.
Submodule path 'sub1/sub2': checked out '27c5769ac0ebf2d924e34d3aa503345baaaa98b2'
branch 'no_submodule' set up to track 'origin/no_submodule'.
HEAD is now at 27611a5 Base
Directory sub1 doesn't exist
ok 30 - git reset --hard --recurse-submodules: worktrees of nested submodules are removed

expecting success of 7112.31 'git reset --hard --recurse-submodules: modified submodule updates submodule work tree': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
HEAD is now at cb2bda7 Modify sub1
ok 31 - git reset --hard --recurse-submodules: modified submodule updates submodule work tree

expecting success of 7112.32 'git reset --hard --recurse-submodules: updating to a missing submodule commit fails': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			test_must_fail $command invalid_sub1 2>err &&
			test_i18ngrep sub1 err &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
error: Submodule 'sub1' could not be updated.
error: Submodule 'sub1' cannot checkout new HEAD.
fatal: Could not reset index file to revision 'invalid_sub1'.
ok 32 - git reset --hard --recurse-submodules: updating to a missing submodule commit fails

expecting success of 7112.33 'git reset --hard --recurse-submodules: submodule branch is not changed, detach HEAD instead': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git -C sub1 checkout -b keep_branch &&
			git -C sub1 rev-parse HEAD >expect &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1 &&
			git -C sub1 rev-parse keep_branch >actual &&
			test_cmp expect actual &&
			test_must_fail git -C sub1 symbolic-ref HEAD
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Switched to a new branch 'keep_branch'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
HEAD is now at cb2bda7 Modify sub1
fatal: ref HEAD is not a symbolic ref
ok 33 - git reset --hard --recurse-submodules: submodule branch is not changed, detach HEAD instead

expecting success of 7112.34 'git reset --hard --recurse-submodules: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to_interested no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
ok 34 - git reset --hard --recurse-submodules: added submodule does remove untracked unignored file with same name when forced

expecting success of 7112.35 'git reset --hard --recurse-submodules: replace submodule with a directory': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
HEAD is now at cb28587 Replace sub1 with directory
ok 35 - git reset --hard --recurse-submodules: replace submodule with a directory

expecting success of 7112.36 'git reset --hard --recurse-submodules: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			rm -rf .git/modules/sub1 &&
			$command replace_sub1_with_directory &&
			test_superproject_content origin/replace_sub1_with_directory &&
			test_git_directory_exists sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
Migrating git directory of 'sub1' from
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1/.git' to
'/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/.git/modules/sub1'
HEAD is now at cb28587 Replace sub1 with directory
ok 36 - git reset --hard --recurse-submodules: replace submodule containing a .git directory with a directory must fail

expecting success of 7112.37 'git reset --hard --recurse-submodules: replace submodule with a file ignoring ignored files': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			: >sub1/expect &&
			$command replace_sub1_with_file &&
			test_superproject_content origin/replace_sub1_with_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
HEAD is now at 2364f5a Replace sub1 with file
ok 37 - git reset --hard --recurse-submodules: replace submodule with a file ignoring ignored files

expecting success of 7112.38 'git reset --hard --recurse-submodules: modified submodule does update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to_interested invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
HEAD is now at 3036e4e Revert "Invalid sub1 commit"
ok 38 - git reset --hard --recurse-submodules: modified submodule does update submodule work tree from invalid commit

expecting success of 7112.39 'git reset --hard --recurse-submodules: updating submodules fixes .git links': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			echo "gitdir: bogus/path" >sub1/.git &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
HEAD is now at cb2bda7 Modify sub1
ok 39 - git reset --hard --recurse-submodules: updating submodules fixes .git links

expecting success of 7112.40 'git reset --hard --recurse-submodules: changed submodule worktree is reset': 
		prolog &&
		reset_work_tree_to_interested add_sub1 &&
		(
			cd submodule_update &&
			rm sub1/file1 &&
			: >sub1/new_file &&
			git -C sub1 add new_file &&
			$command HEAD &&
			test_path_is_file sub1/file1 &&
			test_path_is_missing sub1/new_file
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
HEAD is now at 09bcf53 Add sub1
ok 40 - git reset --hard --recurse-submodules: changed submodule worktree is reset

expecting success of 7112.41 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 41 - git_test_func: added submodule creates empty directory

expecting success of 7112.42 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 42 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 7112.43 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 43 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 7112.44 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 44 - git_test_func: replace directory with submodule

expecting success of 7112.45 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 45 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 7112.46 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 46 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 7112.47 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
ok 47 - git_test_func: replace submodule with a directory must fail

expecting success of 7112.48 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
ok 48 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 7112.49 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git reset --keep replace_sub1_with_file
not ok 49 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 7112.50 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git reset --keep replace_sub1_with_file
not ok 50 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 7112.51 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 51 - git_test_func: modified submodule does not update submodule work tree

expecting success of 7112.52 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 52 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 7112.53 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 53 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 7112.54 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
fatal: Could not reset index file to revision 'add_sub1'.
ok 54 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 7112.55 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 55 - git_test_func: added submodule creates empty directory

expecting success of 7112.56 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 56 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 7112.57 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 57 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 7112.58 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 58 - git_test_func: replace directory with submodule

expecting success of 7112.59 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 59 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 7112.60 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
ok 60 - git_test_func: removed submodule leaves submodule containing a .git directory alone

expecting success of 7112.61 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
ok 61 - git_test_func: replace submodule with a directory must fail

expecting success of 7112.62 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
error: Untracked working tree file 'sub1/file1' would be overwritten by merge.
fatal: Could not reset index file to revision 'replace_sub1_with_directory'.
ok 62 - git_test_func: replace submodule containing a .git directory with a directory must fail

checking known breakage of 7112.63 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git reset --merge replace_sub1_with_file
not ok 63 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 7112.64 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
test_must_fail: command succeeded: git reset --merge replace_sub1_with_file
not ok 64 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 7112.65 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 65 - git_test_func: modified submodule does not update submodule work tree

expecting success of 7112.66 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 66 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 7112.67 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 67 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 7112.68 'git_test_func: added submodule doesn't remove untracked unignored file with same name': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 test_must_fail &&
			test_superproject_content origin/no_submodule &&
			test_must_be_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
error: Untracked working tree file 'sub1' would be overwritten by merge.
fatal: Could not reset index file to revision 'add_sub1'.
ok 68 - git_test_func: added submodule doesn't remove untracked unignored file with same name

expecting success of 7112.69 'git_test_func: added submodule creates empty directory': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 69 - git_test_func: added submodule creates empty directory

expecting success of 7112.70 'git_test_func: added submodule leaves existing empty directory alone': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			mkdir sub1 &&
			git branch -t add_sub1 origin/add_sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 70 - git_test_func: added submodule leaves existing empty directory alone

expecting success of 7112.71 'git_test_func: replace tracked file with submodule creates empty directory': 
		prolog &&
		reset_work_tree_to replace_sub1_with_file &&
		(
			cd submodule_update &&
			git branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&
			$command replace_file_with_sub1 &&
			test_superproject_content origin/replace_file_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_file_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_file'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
fatal: Needed a single revision
branch 'replace_file_with_sub1' set up to track 'origin/replace_file_with_sub1'.
HEAD is now at 8b6fdfc Revert "Replace sub1 with file"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 71 - git_test_func: replace tracked file with submodule creates empty directory

expecting success of 7112.72 'git_test_func: replace directory with submodule': 
		prolog &&
		reset_work_tree_to replace_sub1_with_directory &&
		(
			cd submodule_update &&
			git branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&
			$command replace_directory_with_sub1 &&
			test_superproject_content origin/replace_directory_with_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/replace_directory_with_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'replace_sub1_with_directory'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
fatal: Needed a single revision
branch 'replace_directory_with_sub1' set up to track 'origin/replace_directory_with_sub1'.
HEAD is now at a2e65d5 Revert "Replace sub1 with directory"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 72 - git_test_func: replace directory with submodule

expecting success of 7112.73 'git_test_func: removed submodule leaves submodule directory and its contents in place': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
HEAD is now at d6ba723 Revert "Add sub1"
ok 73 - git_test_func: removed submodule leaves submodule directory and its contents in place

expecting success of 7112.74 'git_test_func: removed submodule leaves submodule containing a .git directory alone': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t remove_sub1 origin/remove_sub1 &&
			replace_gitfile_with_git_dir sub1 &&
			$command remove_sub1 &&
			test_superproject_content origin/remove_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'remove_sub1' set up to track 'origin/remove_sub1'.
warning: unable to rmdir 'sub1': Directory not empty
HEAD is now at d6ba723 Revert "Add sub1"
ok 74 - git_test_func: removed submodule leaves submodule containing a .git directory alone

checking known breakage of 7112.75 'git_test_func: replace submodule with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
HEAD is now at cb28587 Replace sub1 with directory
test_must_fail: command succeeded: git reset --hard replace_sub1_with_directory
not ok 75 - git_test_func: replace submodule with a directory must fail # TODO known breakage

checking known breakage of 7112.76 'git_test_func: replace submodule containing a .git directory with a directory must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_directory test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_directory' set up to track 'origin/replace_sub1_with_directory'.
warning: unable to rmdir 'sub1': Directory not empty
HEAD is now at cb28587 Replace sub1 with directory
test_must_fail: command succeeded: git reset --hard replace_sub1_with_directory
not ok 76 - git_test_func: replace submodule containing a .git directory with a directory must fail # TODO known breakage

checking known breakage of 7112.77 'git_test_func: replace submodule with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
HEAD is now at 2364f5a Replace sub1 with file
test_must_fail: command succeeded: git reset --hard replace_sub1_with_file
not ok 77 - git_test_func: replace submodule with a file must fail # TODO known breakage

checking known breakage of 7112.78 'git_test_func: replace submodule containing a .git directory with a file must fail': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t replace_sub1_with_file origin/replace_sub1_with_file &&
			replace_gitfile_with_git_dir sub1 &&
			$command replace_sub1_with_file test_must_fail &&
			test_superproject_content origin/add_sub1 &&
			test_git_directory_is_unchanged sub1 &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'replace_sub1_with_file' set up to track 'origin/replace_sub1_with_file'.
HEAD is now at 2364f5a Replace sub1 with file
test_must_fail: command succeeded: git reset --hard replace_sub1_with_file
not ok 78 - git_test_func: replace submodule containing a .git directory with a file must fail # TODO known breakage

expecting success of 7112.79 'git_test_func: modified submodule does not update submodule work tree': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t modify_sub1 origin/modify_sub1 &&
			$command modify_sub1 &&
			test_superproject_content origin/modify_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			git submodule update &&
			test_submodule_content sub1 origin/modify_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'modify_sub1' set up to track 'origin/modify_sub1'.
HEAD is now at cb2bda7 Modify sub1
Submodule path 'sub1': checked out '03da4ea88bb165bd26ee0b2e5c657f2858b23f53'
ok 79 - git_test_func: modified submodule does not update submodule work tree

expecting success of 7112.80 'git_test_func: modified submodule does not update submodule work tree to invalid commit': 
		prolog &&
		reset_work_tree_to add_sub1 &&
		(
			cd submodule_update &&
			git branch -t invalid_sub1 origin/invalid_sub1 &&
			$command invalid_sub1 &&
			test_superproject_content origin/invalid_sub1 &&
			test_submodule_content sub1 origin/add_sub1 &&
			test_must_fail git submodule update &&
			test_submodule_content sub1 origin/add_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'add_sub1'
branch 'add_sub1' set up to track 'origin/add_sub1'.
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
HEAD is now at e6169bf Invalid sub1 commit
fatal: git upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: remote error: upload-pack: not our ref 0123456789012345678901234567890123456789
fatal: Fetched in submodule path 'sub1', but it did not contain 0123456789012345678901234567890123456789. Direct fetching of that commit failed.
ok 80 - git_test_func: modified submodule does not update submodule work tree to invalid commit

expecting success of 7112.81 'git_test_func: modified submodule does not update submodule work tree from invalid commit': 
		prolog &&
		reset_work_tree_to invalid_sub1 &&
		(
			cd submodule_update &&
			git branch -t valid_sub1 origin/valid_sub1 &&
			$command valid_sub1 &&
			test_superproject_content origin/valid_sub1 &&
			test_dir_is_empty sub1 &&
			git submodule update --init --recursive &&
			test_submodule_content sub1 origin/valid_sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'invalid_sub1'
branch 'invalid_sub1' set up to track 'origin/invalid_sub1'.
fatal: Needed a single revision
branch 'valid_sub1' set up to track 'origin/valid_sub1'.
HEAD is now at 3036e4e Revert "Invalid sub1 commit"
Submodule 'sub1' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'sub1'
Submodule 'uninitialized_sub' (/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update_sub1) registered for path 'uninitialized_sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/sub1'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7112-reset-submodule/submodule_update/uninitialized_sub'...
done.
Submodule path 'sub1': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
Submodule path 'uninitialized_sub': checked out '63c430421a9604f896526f8a04236bdfe3ac1fc1'
ok 81 - git_test_func: modified submodule does not update submodule work tree from invalid commit

expecting success of 7112.82 'git_test_func: added submodule does remove untracked unignored file with same name when forced': 
		prolog &&
		reset_work_tree_to no_submodule &&
		(
			cd submodule_update &&
			git branch -t add_sub1 origin/add_sub1 &&
			>sub1 &&
			$command add_sub1 &&
			test_superproject_content origin/add_sub1 &&
			test_dir_is_empty sub1
		)
	
Cloning into 'submodule_update'...
done.
Switched to a new branch 'no_submodule'
branch 'no_submodule' set up to track 'origin/no_submodule'.
branch 'add_sub1' set up to track 'origin/add_sub1'.
HEAD is now at 09bcf53 Add sub1
ok 82 - git_test_func: added submodule does remove untracked unignored file with same name when forced

# still have 12 known breakage(s)
# passed all remaining 70 test(s)
1..82
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7503-pre-commit-and-pre-merge-commit-hooks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7503-pre-commit-and-pre-merge-commit-hooks/.git/
expecting success of 7503.1 'root commit': 
	echo "root" >file &&
	git add file &&
	git commit -m "zeroth" &&
	git checkout -b side &&
	echo "foo" >foo &&
	git add foo &&
	git commit -m "make it non-ff" &&
	git branch side-orig side &&
	git checkout main

[main (root-commit) 0e29351] zeroth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'side'
[side f4a0fae] make it non-ff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Switched to branch 'main'
ok 1 - root commit

expecting success of 7503.2 'setup conflicting branches': 
	test_when_finished "git checkout main" &&
	git checkout -b conflicting-a main &&
	echo a >conflicting &&
	git add conflicting &&
	git commit -m conflicting-a &&
	git checkout -b conflicting-b main &&
	echo b >conflicting &&
	git add conflicting &&
	git commit -m conflicting-b

Switched to a new branch 'conflicting-a'
[conflicting-a 3f25523] conflicting-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflicting
Switched to a new branch 'conflicting-b'
[conflicting-b 8c264fe] conflicting-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflicting
Switched to branch 'main'
ok 2 - setup conflicting branches

expecting success of 7503.3 'with no hook': 
	test_when_finished "rm -f actual_hooks" &&
	echo "foo" >file &&
	git add file &&
	git commit -m "first" &&
	test_path_is_missing actual_hooks

[main e0ed36d] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - with no hook

expecting success of 7503.4 'with no hook (merge)': 
	test_when_finished "rm -f actual_hooks" &&
	git branch -f side side-orig &&
	git checkout side &&
	git merge -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 4 - with no hook (merge)

expecting success of 7503.5 '--no-verify with no hook': 
	test_when_finished "rm -f actual_hooks" &&
	echo "bar" >file &&
	git add file &&
	git commit --no-verify -m "bar" &&
	test_path_is_missing actual_hooks

[main 9b1e6a8] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 5 - --no-verify with no hook

expecting success of 7503.6 '--no-verify with no hook (merge)': 
	test_when_finished "rm -f actual_hooks" &&
	git branch -f side side-orig &&
	git checkout side &&
	git merge --no-verify -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 6 - --no-verify with no hook (merge)

expecting success of 7503.7 'with succeeding hook': 
	setup_success_hook "pre-commit" &&
	echo "more" >>file &&
	git add file &&
	git commit -m "more" &&
	test_cmp expected_hooks actual_hooks

[main 7901543] more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 7 - with succeeding hook

expecting success of 7503.8 'with succeeding hook (merge)': 
	setup_success_hook "pre-merge-commit" &&
	git checkout side &&
	git merge -m "merge main" main &&
	git checkout main &&
	test_cmp expected_hooks actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 1 +
 1 file changed, 1 insertion(+)
Switched to branch 'main'
ok 8 - with succeeding hook (merge)

expecting success of 7503.9 'automatic merge fails; both hooks are available': 
	setup_success_hook "pre-commit" &&
	setup_success_hook "pre-merge-commit" &&

	git checkout conflicting-a &&
	test_must_fail git merge -m "merge conflicting-b" conflicting-b &&
	test_path_is_missing actual_hooks &&

	echo "pre-commit" >expected_hooks &&
	echo a+b >conflicting &&
	git add conflicting &&
	git commit -m "resolve conflict" &&
	test_cmp expected_hooks actual_hooks

Switched to branch 'conflicting-a'
Auto-merging conflicting
CONFLICT (add/add): Merge conflict in conflicting
Automatic merge failed; fix conflicts and then commit the result.
[conflicting-a ff0069b] resolve conflict
 Author: A U Thor <author@example.com>
ok 9 - automatic merge fails; both hooks are available

expecting success of 7503.10 '--no-verify with succeeding hook': 
	setup_success_hook "pre-commit" &&
	echo "even more" >>file &&
	git add file &&
	git commit --no-verify -m "even more" &&
	test_path_is_missing actual_hooks

[conflicting-a 79fc96c] even more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 10 - --no-verify with succeeding hook

expecting success of 7503.11 '--no-verify with succeeding hook (merge)': 
	setup_success_hook "pre-merge-commit" &&
	git branch -f side side-orig &&
	git checkout side &&
	git merge --no-verify -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Switched to branch 'main'
ok 11 - --no-verify with succeeding hook (merge)

expecting success of 7503.12 'with failing hook': 
	setup_failing_hook "pre-commit" &&
	test_when_finished "rm -f expected_hooks" &&
	echo "pre-commit-failing-hook" >expected_hooks &&

	echo "another" >>file &&
	git add file &&
	test_must_fail git commit -m "another" &&
	test_cmp expected_hooks actual_hooks

ok 12 - with failing hook

expecting success of 7503.13 '--no-verify with failing hook': 
	setup_failing_hook "pre-commit" &&
	echo "stuff" >>file &&
	git add file &&
	git commit --no-verify -m "stuff" &&
	test_path_is_missing actual_hooks

[main 9073eff] stuff
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
ok 13 - --no-verify with failing hook

expecting success of 7503.14 'with failing hook (merge)': 
	setup_failing_hook "pre-merge-commit" &&
	echo "pre-merge-commit-failing-hook" >expected_hooks &&
	git checkout side &&
	test_must_fail git merge -m "merge main" main &&
	git checkout main &&
	test_cmp expected_hooks actual_hooks

Switched to branch 'side'
Not committing merge; use 'git commit' to complete the merge.
Switched to branch 'main'
ok 14 - with failing hook (merge)

expecting success of 7503.15 '--no-verify with failing hook (merge)': 
	setup_failing_hook "pre-merge-commit" &&

	git branch -f side side-orig &&
	git checkout side &&
	git merge --no-verify -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
Switched to branch 'main'
ok 15 - --no-verify with failing hook (merge)

expecting success of 7503.16 'with non-executable hook': 
	setup_non_exec_hook "pre-commit" &&
	echo "content" >>file &&
	git add file &&
	git commit -m "content" &&
	test_path_is_missing actual_hooks

hint: The '.git/hooks/pre-commit' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
[main be1df3a] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 16 - with non-executable hook

expecting success of 7503.17 '--no-verify with non-executable hook': 
	setup_non_exec_hook "pre-commit" &&
	echo "more content" >>file &&
	git add file &&
	git commit --no-verify -m "more content" &&
	test_path_is_missing actual_hooks

[main dd373ff] more content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 17 - --no-verify with non-executable hook

expecting success of 7503.18 'with non-executable hook (merge)': 
	setup_non_exec_hook "pre-merge" &&
	git branch -f side side-orig &&
	git checkout side &&
	git merge -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
Switched to branch 'main'
ok 18 - with non-executable hook (merge)

expecting success of 7503.19 '--no-verify with non-executable hook (merge)': 
	setup_non_exec_hook "pre-merge" &&
	git branch -f side side-orig &&
	git checkout side &&
	git merge --no-verify -m "merge main" main &&
	git checkout main &&
	test_path_is_missing actual_hooks

Switched to branch 'side'
Merge made by the 'ort' strategy.
 file | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
Switched to branch 'main'
ok 19 - --no-verify with non-executable hook (merge)

expecting success of 7503.20 'with hook requiring GIT_PREFIX': 
	test_when_finished "rm -rf actual_hooks success" &&
	setup_require_prefix_hook &&
	echo "more content" >>file &&
	git add file &&
	mkdir success &&
	(
		cd success &&
		git commit -m "hook requires GIT_PREFIX = success/"
	) &&
	test_cmp expected_hooks actual_hooks

[main 91e0a75] hook requires GIT_PREFIX = success/
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 20 - with hook requiring GIT_PREFIX

expecting success of 7503.21 'with failing hook requiring GIT_PREFIX': 
	test_when_finished "rm -rf actual_hooks fail" &&
	setup_require_prefix_hook &&
	echo "more content" >>file &&
	git add file &&
	mkdir fail &&
	(
		cd fail &&
		test_must_fail git commit -m "hook must fail"
	) &&
	git checkout -- file &&
	test_cmp expected_hooks actual_hooks

ok 21 - with failing hook requiring GIT_PREFIX

expecting success of 7503.22 'check the author in hook': 
	setup_require_author_hook &&
	cat >expected_hooks <<-EOF &&
	check-author
	check-author
	check-author
	EOF
	test_must_fail git commit --allow-empty -m "by a.u.thor" &&
	(
		GIT_AUTHOR_NAME="New Author" &&
		GIT_AUTHOR_EMAIL="newauthor@example.com" &&
		export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
		git commit --allow-empty -m "by new.author via env" &&
		git show -s
	) &&
	git commit --author="New Author <newauthor@example.com>" \
		--allow-empty -m "by new.author via command line" &&
	git show -s &&
	test_cmp expected_hooks actual_hooks

[main 1b3a79e] by new.author via env
 Author: New Author <newauthor@example.com>
 1 file changed, 1 insertion(+)
commit 1b3a79eec1cf60fc72bbc0d27901d153c90e4abe
Author: New Author <newauthor@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    by new.author via env
[main 155e737] by new.author via command line
 Author: New Author <newauthor@example.com>
commit 155e73716852370372b22eca0576dacb5016aa2e
Author: New Author <newauthor@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    by new.author via command line
ok 22 - check the author in hook

# passed all 22 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7501-commit-basic-functionality.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7501-commit-basic-functionality/.git/
expecting success of 7501.1 'initial status': 
	echo bongo bongo >file &&
	git add file &&
	git status >actual &&
	test_i18ngrep "No commits yet" actual

No commits yet
ok 1 - initial status

expecting success of 7501.2 'fail initial amend': 
	test_must_fail git commit --amend

fatal: You have nothing to amend.
ok 2 - fail initial amend

expecting success of 7501.3 'setup: initial commit': 
	git commit -m initial

[main (root-commit) 402702b] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 3 - setup: initial commit

expecting success of 7501.4 '-m and -F do not mix': 
	git checkout HEAD file && echo >>file && git add file &&
	test_must_fail git commit -m foo -m bar -F file

Updated 0 paths from a0cb959
fatal: options '-m' and '-F' cannot be used together
ok 4 - -m and -F do not mix

expecting success of 7501.5 '-m and -C do not mix': 
	git checkout HEAD file && echo >>file && git add file &&
	test_must_fail git commit -C HEAD -m illegal

Updated 1 path from a0cb959
fatal: options '-m' and '-C' cannot be used together
ok 5 - -m and -C do not mix

expecting success of 7501.6 'paths and -a do not mix': 
	echo King of the bongo >file &&
	test_must_fail git commit -m foo -a file

fatal: paths 'file ...' with -a does not make sense
ok 6 - paths and -a do not mix

expecting success of 7501.7 'can use paths with --interactive': 
	echo bong-o-bong >file &&
	# 2: update, 1:st path, that is all, 7: quit
	test_write_lines 2 1 "" 7 |
	git commit -m foo --interactive file &&
	git reset --hard HEAD^

           staged     unstaged path
  1:        +1/-0        +1/-2 file

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:        +1/-0        +1/-2 [f]ile
Update>>            staged     unstaged path
* 1:        +1/-0        +1/-2 [f]ile
Update>> updated 1 path

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> Bye.
[main 54cbdc6] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 402702b initial
ok 7 - can use paths with --interactive

expecting success of 7501.8 'removed files and relative paths': 
	test_when_finished "rm -rf foo" &&
	git init foo &&
	>foo/foo.txt &&
	git -C foo add foo.txt &&
	git -C foo commit -m first &&
	git -C foo rm foo.txt &&

	mkdir -p foo/bar &&
	git -C foo/bar commit -m second ../foo.txt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7501-commit-basic-functionality/foo/.git/
[main (root-commit) c087cbd] first
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo.txt
rm 'foo.txt'
[main 332404f] second
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 foo.txt
ok 8 - removed files and relative paths

expecting success of 7501.9 'using invalid commit with -C': 
	test_must_fail git commit --allow-empty -C bogus

fatal: could not lookup commit bogus
ok 9 - using invalid commit with -C

expecting success of 7501.10 'nothing to commit': 
	git reset --hard &&
	test_must_fail git commit -m initial

HEAD is now at 402702b initial
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual

nothing added to commit but untracked files present (use "git add" to track)
ok 10 - nothing to commit

expecting success of 7501.11 '--dry-run fails with nothing to commit': 
	test_must_fail git commit -m initial --dry-run

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual

nothing added to commit but untracked files present (use "git add" to track)
ok 11 - --dry-run fails with nothing to commit

expecting success of 7501.12 '--short fails with nothing to commit': 
	test_must_fail git commit -m initial --short

?? actual
ok 12 - --short fails with nothing to commit

expecting success of 7501.13 '--porcelain fails with nothing to commit': 
	test_must_fail git commit -m initial --porcelain

?? actual
ok 13 - --porcelain fails with nothing to commit

expecting success of 7501.14 '--long fails with nothing to commit': 
	test_must_fail git commit -m initial --long

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual

nothing added to commit but untracked files present (use "git add" to track)
ok 14 - --long fails with nothing to commit

expecting success of 7501.15 'setup: non-initial commit': 
	echo bongo bongo bongo >file &&
	git commit -m next -a

[main b49f306] next
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - setup: non-initial commit

expecting success of 7501.16 '--dry-run with stuff to commit returns ok': 
	echo bongo bongo bongo >>file &&
	git commit -m next -a --dry-run

On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual

ok 16 - --dry-run with stuff to commit returns ok

expecting success of 7501.17 '--short with stuff to commit returns ok': 
	echo bongo bongo bongo >>file &&
	git commit -m next -a --short

M  file
?? actual
ok 17 - --short with stuff to commit returns ok

expecting success of 7501.18 '--porcelain with stuff to commit returns ok': 
	echo bongo bongo bongo >>file &&
	git commit -m next -a --porcelain

M  file
?? actual
ok 18 - --porcelain with stuff to commit returns ok

expecting success of 7501.19 '--long with stuff to commit returns ok': 
	echo bongo bongo bongo >>file &&
	git commit -m next -a --long

On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual

ok 19 - --long with stuff to commit returns ok

expecting success of 7501.20 'commit message from non-existing file': 
	echo more bongo: bongo bongo bongo bongo >file &&
	test_must_fail git commit -F gah -a

fatal: could not read log file 'gah': No such file or directory
ok 20 - commit message from non-existing file

expecting success of 7501.21 'empty commit message': 
	# Empty except stray tabs and spaces on a few lines.
	sed -e "s/@//g" >msg <<-\EOF &&
		@		@
		@@
		@  @
		@Signed-off-by: hula@
	EOF
	test_must_fail git commit -F msg -a

Aborting commit due to empty commit message.
ok 21 - empty commit message

expecting success of 7501.22 'template "emptyness" check does not kick in with -F': 
	git checkout HEAD file && echo >>file && git add file &&
	git commit -t file -F file

Updated 1 path from 8bdaf26
[main 09e25c4] bongo bongo bongo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 22 - template "emptyness" check does not kick in with -F

expecting success of 7501.23 'template "emptyness" check': 
	git checkout HEAD file && echo >>file && git add file &&
	test_must_fail git commit -t file 2>err &&
	test_i18ngrep "did not edit" err

Updated 0 paths from 943c1a3
Aborting commit; you did not edit the message.
ok 23 - template "emptyness" check

expecting success of 7501.24 'setup: commit message from file': 
	git checkout HEAD file && echo >>file && git add file &&
	echo this is the commit message, coming from a file >msg &&
	git commit -F msg -a

Updated 1 path from 943c1a3
[main 1c71493] this is the commit message, coming from a file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 24 - setup: commit message from file

expecting success of 7501.25 'amend commit': 
	cat >editor <<-\EOF &&
	#!/bin/sh
	sed -e "s/a file/an amend commit/g" <"$1" >"$1-"
	mv "$1-" "$1"
	EOF
	chmod 755 editor &&
	EDITOR=./editor git commit --amend

[main 68c258b] this is the commit message, coming from an amend commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 25 - amend commit

expecting success of 7501.26 'amend --only ignores staged contents': 
	cp file file.expect &&
	echo changed >file &&
	git add file &&
	git commit --no-edit --amend --only &&
	git cat-file blob HEAD:file >file.actual &&
	test_cmp file.expect file.actual &&
	git diff --exit-code

[main 68c258b] this is the commit message, coming from an amend commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 26 - amend --only ignores staged contents

expecting success of 7501.27 'allow-empty --only ignores staged contents': 
	echo changed-again >file &&
	git add file &&
	git commit --allow-empty --only -m "empty" &&
	git cat-file blob HEAD:file >file.actual &&
	test_cmp file.expect file.actual &&
	git diff --exit-code

[main a06079a] empty
 Author: A U Thor <author@example.com>
ok 27 - allow-empty --only ignores staged contents

expecting success of 7501.28 'set up editor': 
	cat >editor <<-\EOF &&
	#!/bin/sh
	sed -e "s/unamended/amended/g" <"$1" >"$1-"
	mv "$1-" "$1"
	EOF
	chmod 755 editor

ok 28 - set up editor

expecting success of 7501.29 'amend without launching editor': 
	echo unamended >expect &&
	git commit --allow-empty -m "unamended" &&
	echo needs more bongo >file &&
	git add file &&
	EDITOR=./editor git commit --no-edit --amend &&
	git diff --exit-code HEAD -- file &&
	git diff-tree -s --format=%s HEAD >msg &&
	test_cmp expect msg

[main 5edd280] unamended
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 3 deletions(-)
[main 0409337] unamended
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 3 deletions(-)
ok 29 - amend without launching editor

expecting success of 7501.30 '--amend --edit': 
	echo amended >expect &&
	git commit --allow-empty -m "unamended" &&
	echo bongo again >file &&
	git add file &&
	EDITOR=./editor git commit --edit --amend &&
	git diff-tree -s --format=%s HEAD >msg &&
	test_cmp expect msg

[main 875d4c4] unamended
 Author: A U Thor <author@example.com>
[main cf05365] amended
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 30 - --amend --edit

expecting success of 7501.31 '--amend --edit of empty message': 
	cat >replace <<-\EOF &&
	#!/bin/sh
	echo "amended" >"$1"
	EOF
	chmod 755 replace &&
	git commit --allow-empty --allow-empty-message -m "" &&
	echo more bongo >file &&
	git add file &&
	EDITOR=./replace git commit --edit --amend &&
	git diff-tree -s --format=%s HEAD >msg &&
	./replace expect &&
	test_cmp expect msg

[main d926e6e] 
 Author: A U Thor <author@example.com>
[main d776a7a] amended
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 31 - --amend --edit of empty message

expecting success of 7501.32 '--amend to set message to empty': 
	echo bata >file &&
	git add file &&
	git commit -m "unamended" &&
	git commit --amend --allow-empty-message -m "" &&
	git diff-tree -s --format=%s HEAD >msg &&
	echo "" >expect &&
	test_cmp expect msg

[main 912d328] unamended
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 48a480b] 
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 32 - --amend to set message to empty

expecting success of 7501.33 '--amend to set empty message needs --allow-empty-message': 
	echo conga >file &&
	git add file &&
	git commit -m "unamended" &&
	test_must_fail git commit --amend -m "" &&
	git diff-tree -s --format=%s HEAD >msg &&
	echo "unamended" >expect &&
	test_cmp expect msg

[main 1fbf045] unamended
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Aborting commit due to empty commit message.
ok 33 - --amend to set empty message needs --allow-empty-message

expecting success of 7501.34 '-m --edit': 
	echo amended >expect &&
	git commit --allow-empty -m buffer &&
	echo bongo bongo >file &&
	git add file &&
	EDITOR=./editor git commit -m unamended --edit &&
	git diff-tree -s  --format=%s HEAD >msg &&
	test_cmp expect msg

[main 6879f79] buffer
 Author: A U Thor <author@example.com>
[main 15d2fd0] amended
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 34 - -m --edit

expecting success of 7501.35 '-m and -F do not mix': 
	echo enough with the bongos >file &&
	test_must_fail git commit -F msg -m amending .

fatal: options '-m' and '-F' cannot be used together
ok 35 - -m and -F do not mix

expecting success of 7501.36 'using message from other commit': 
	git commit -C HEAD^ .

[main a5458b7] buffer
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 36 - using message from other commit

expecting success of 7501.37 'editing message from other commit': 
	cat >editor <<-\EOF &&
	#!/bin/sh
	sed -e "s/amend/older/g"  <"$1" >"$1-"
	mv "$1-" "$1"
	EOF
	chmod 755 editor &&
	echo hula hula >file &&
	EDITOR=./editor git commit -c HEAD^ -a

[main 7017bef] oldered
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 37 - editing message from other commit

expecting success of 7501.38 'message from stdin': 
	echo silly new contents >file &&
	echo commit message from stdin |
	git commit -F - -a

[main c876a10] commit message from stdin
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 38 - message from stdin

expecting success of 7501.39 'overriding author from command line': 
	echo gak >file &&
	git commit -m author \
		--author "Rubber Duck <rduck@convoy.org>" -a >output 2>&1 &&
	grep Rubber.Duck output

 Author: Rubber Duck <rduck@convoy.org>
ok 39 - overriding author from command line

expecting success of 7501.40 'interactive add': 
	echo 7 | test_must_fail git commit --interactive >out &&
	grep "What now" out

What now> Bye.
ok 40 - interactive add

expecting success of 7501.41 'commit --interactive doesn't change index if editor aborts': 
	echo zoo >file &&
	test_must_fail git diff --exit-code >diff1 &&
	test_write_lines u "*" q |
	(
		EDITOR=: &&
		export EDITOR &&
		test_must_fail git commit --interactive
	) &&
	git diff >diff2 &&
	compare_diff_patch diff1 diff2

           staged     unstaged path
  1:    unchanged        +1/-1 file

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now>            staged     unstaged path
  1:    unchanged        +1/-1 [f]ile
Update>> updated 1 path

*** Commands ***
  1: [s]tatus	  2: [u]pdate	  3: [r]evert	  4: [a]dd untracked
  5: [p]atch	  6: [d]iff	  7: [q]uit	  8: [h]elp
What now> Aborting commit due to empty commit message.
Bye.
ok 41 - commit --interactive doesn't change index if editor aborts

expecting success of 7501.42 'editor not invoked if -F is given': 
	cat >editor <<-\EOF &&
	#!/bin/sh
	sed -e s/good/bad/g <"$1" >"$1-"
	mv "$1-" "$1"
	EOF
	chmod 755 editor &&

	echo A good commit message. >msg &&
	echo moo >file &&

	EDITOR=./editor git commit -a -F msg &&
	git show -s --pretty=format:%s >subject &&
	grep -q good subject &&

	echo quack >file &&
	echo Another good message. |
	EDITOR=./editor git commit -a -F - &&
	git show -s --pretty=format:%s >subject &&
	grep -q good subject

[main b23b4f0] A good commit message.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 53d15e4] Another good message.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 42 - editor not invoked if -F is given

expecting success of 7501.43 'partial commit that involves removal (1)': 

	git rm --cached file &&
	mv file elif &&
	git add elif &&
	git commit -m "Partial: add elif" elif &&
	git diff-tree --name-status HEAD^ HEAD >current &&
	echo "A	elif" >expected &&
	test_cmp expected current


rm 'file'
[main 51d7488] Partial: add elif
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
ok 43 - partial commit that involves removal (1)

expecting success of 7501.44 'partial commit that involves removal (2)': 

	git commit -m "Partial: remove file" file &&
	git diff-tree --name-status HEAD^ HEAD >current &&
	echo "D	file" >expected &&
	test_cmp expected current


[main df7f16d] Partial: remove file
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 file
ok 44 - partial commit that involves removal (2)

expecting success of 7501.45 'partial commit that involves removal (3)': 

	git rm --cached elif &&
	echo elif >elif &&
	git commit -m "Partial: modify elif" elif &&
	git diff-tree --name-status HEAD^ HEAD >current &&
	echo "M	elif" >expected &&
	test_cmp expected current


rm 'elif'
[main 4c8c79b] Partial: modify elif
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 45 - partial commit that involves removal (3)

expecting success of 7501.46 'amend commit to fix author': 

	oldtick=$GIT_AUTHOR_DATE &&
	test_tick &&
	git reset --hard &&
	git cat-file -p HEAD >commit &&
	sed -e "s/author.*/author $author $oldtick/" \
		-e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" \
		commit >expected &&
	git commit --amend --author="$author" &&
	git cat-file -p HEAD >current &&
	test_cmp expected current


HEAD is now at 4c8c79b Partial: modify elif
[main dc545f5] Partial: modify elif
 Author: The Real Author <someguy@his.email.org>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 46 - amend commit to fix author

expecting success of 7501.47 'amend commit to fix date': 

	test_tick &&
	newtick=$GIT_AUTHOR_DATE &&
	git reset --hard &&
	git cat-file -p HEAD >commit &&
	sed -e "s/author.*/author $author $newtick/" \
		-e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" \
		commit >expected &&
	git commit --amend --date="$newtick" &&
	git cat-file -p HEAD >current &&
	test_cmp expected current


HEAD is now at dc545f5 Partial: modify elif
[main b80bbaf] Partial: modify elif
 Author: The Real Author <someguy@his.email.org>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 47 - amend commit to fix date

expecting success of 7501.48 'commit mentions forced date in output': 
	git commit --amend --date=2010-01-02T03:04:05 >output &&
	grep "Date: *Sat Jan 2 03:04:05 2010" output

 Date: Sat Jan 2 03:04:05 2010 +0000
ok 48 - commit mentions forced date in output

expecting success of 7501.49 'commit complains about completely bogus dates': 
	test_must_fail git commit --amend --date=seventeen

fatal: invalid date format: seventeen
ok 49 - commit complains about completely bogus dates

expecting success of 7501.50 'commit --date allows approxidate': 
	git commit --amend \
		--date="midnight the 12th of october, anno domini 1979" &&
	echo "Fri Oct 12 00:00:00 1979 +0000" >expect &&
	git log -1 --format=%ad >actual &&
	test_cmp expect actual

[main 1baf69c] Partial: modify elif
 Author: The Real Author <someguy@his.email.org>
 Date: Fri Oct 12 00:00:00 1979 +0000
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 50 - commit --date allows approxidate

expecting success of 7501.51 'sign off (1)': 

	echo 1 >positive &&
	git add positive &&
	git commit -s -m "thank you" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo thank you &&
		echo &&
		git var GIT_COMMITTER_IDENT >ident &&
		sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" ident
	) >expected &&
	test_cmp expected actual


[main 28b2e49] thank you
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 positive
ok 51 - sign off (1)

expecting success of 7501.52 'sign off (2)': 

	echo 2 >positive &&
	git add positive &&
	existing="Signed-off-by: Watch This <watchthis@example.com>" &&
	git commit -s -m "thank you

$existing" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo thank you &&
		echo &&
		echo $existing &&
		git var GIT_COMMITTER_IDENT >ident &&
		sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" ident
	) >expected &&
	test_cmp expected actual


[main f25b048] thank you
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 52 - sign off (2)

expecting success of 7501.53 'signoff gap': 

	echo 3 >positive &&
	git add positive &&
	alt="Alt-RFC-822-Header: Value" &&
	git commit -s -m "welcome

$alt" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo welcome &&
		echo &&
		echo $alt &&
		git var GIT_COMMITTER_IDENT >ident &&
		sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" ident
	) >expected &&
	test_cmp expected actual

[main ba070e0] welcome
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 53 - signoff gap

expecting success of 7501.54 'signoff gap 2': 

	echo 4 >positive &&
	git add positive &&
	alt="fixed: 34" &&
	git commit -s -m "welcome

We have now
$alt" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo welcome &&
		echo &&
		echo We have now &&
		echo $alt &&
		echo &&
		git var GIT_COMMITTER_IDENT >ident &&
		sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" ident
	) >expected &&
	test_cmp expected actual

[main 341d4d1] welcome
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 54 - signoff gap 2

expecting success of 7501.55 'signoff respects trailer config': 

	echo 5 >positive &&
	git add positive &&
	git commit -s -m "subject

non-trailer line
Myfooter: x" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo subject &&
		echo &&
		echo non-trailer line &&
		echo Myfooter: x &&
		echo &&
		echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
	) >expected &&
	test_cmp expected actual &&

	echo 6 >positive &&
	git add positive &&
	git -c "trailer.Myfooter.ifexists=add" commit -s -m "subject

non-trailer line
Myfooter: x" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo subject &&
		echo &&
		echo non-trailer line &&
		echo Myfooter: x &&
		echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
	) >expected &&
	test_cmp expected actual

[main a090629] subject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 275b02e] subject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 55 - signoff respects trailer config

expecting success of 7501.56 'signoff not confused by ---': 
	cat >expected <<-EOF &&
		subject

		body
		---
		these dashes confuse the parser!

		Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
	EOF
	# should be a noop, since we already signed
	git commit --allow-empty --signoff -F expected &&
	git log -1 --pretty=format:%B >actual &&
	test_cmp expected actual

[main b4f5f7d] subject
 Author: A U Thor <author@example.com>
ok 56 - signoff not confused by ---

expecting success of 7501.57 'multiple -m': 

	>negative &&
	git add negative &&
	git commit -m "one" -m "two" -m "three" &&
	git cat-file commit HEAD >commit &&
	sed -e "1,/^\$/d" commit >actual &&
	(
		echo one &&
		echo &&
		echo two &&
		echo &&
		echo three
	) >expected &&
	test_cmp expected actual


[main 86c3ac7] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 negative
ok 57 - multiple -m

expecting success of 7501.58 'amend commit to fix author': 

	oldtick=$GIT_AUTHOR_DATE &&
	test_tick &&
	git reset --hard &&
	git cat-file -p HEAD >commit &&
	sed -e "s/author.*/author $author $oldtick/" \
		-e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" \
		commit >expected &&
	git commit --amend --author="$author" &&
	git cat-file -p HEAD >current &&
	test_cmp expected current


HEAD is now at 86c3ac7 one
[main a321c59] one
 Author: The Real Author <someguy@his.email.org>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 negative
ok 58 - amend commit to fix author

expecting success of 7501.59 'git commit <file> with dirty index': 
	echo tacocat >elif &&
	echo tehlulz >chz &&
	git add chz &&
	git commit elif -m "tacocat is a palindrome" &&
	git show --stat >stat &&
	grep elif stat &&
	git diff --cached >diff &&
	grep chz diff

[main edc593d] tacocat is a palindrome
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 elif | 2 +-
diff --git a/chz b/chz
+++ b/chz
ok 59 - git commit <file> with dirty index

expecting success of 7501.60 'same tree (single parent)': 

	git reset --hard &&
	test_must_fail git commit -m empty


HEAD is now at edc593d tacocat is a palindrome
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	commit
	current
	diff
	diff1
	diff2
	editor
	err
	expect
	expected
	file.actual
	file.expect
	ident
	msg
	out
	output
	replace
	stat
	subject

nothing added to commit but untracked files present (use "git add" to track)
ok 60 - same tree (single parent)

expecting success of 7501.61 'same tree (single parent) --allow-empty': 

	git commit --allow-empty -m "forced empty" &&
	git cat-file commit HEAD >commit &&
	grep forced commit


[main e26b7af] forced empty
 Author: A U Thor <author@example.com>
forced empty
ok 61 - same tree (single parent) --allow-empty

expecting success of 7501.62 'same tree (merge and amend merge)': 

	git checkout -b side HEAD^ &&
	echo zero >zero &&
	git add zero &&
	git commit -m "add zero" &&
	git checkout main &&

	git merge -s ours side -m "empty ok" &&
	git diff HEAD^ HEAD >actual &&
	test_must_be_empty actual &&

	git commit --amend -m "empty really ok" &&
	git diff HEAD^ HEAD >actual &&
	test_must_be_empty actual


Switched to a new branch 'side'
[side fd41ad1] add zero
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 zero
Switched to branch 'main'
Merge made by the 'ours' strategy.
[main c63f6ad] empty really ok
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
ok 62 - same tree (merge and amend merge)

expecting success of 7501.63 'amend using the message from another commit': 

	git reset --hard &&
	test_tick &&
	git commit --allow-empty -m "old commit" &&
	old=$(git rev-parse --verify HEAD) &&
	test_tick &&
	git commit --allow-empty -m "new commit" &&
	new=$(git rev-parse --verify HEAD) &&
	test_tick &&
	git commit --allow-empty --amend -C "$old" &&
	git show --pretty="format:%ad %s" "$old" >expected &&
	git show --pretty="format:%ad %s" HEAD >actual &&
	test_cmp expected actual


HEAD is now at c63f6ad empty really ok
[main 2e22bd6] old commit
 Author: A U Thor <author@example.com>
[main 0e1e5b4] new commit
 Author: A U Thor <author@example.com>
[main f2dc992] old commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
ok 63 - amend using the message from another commit

expecting success of 7501.64 'amend using the message from a commit named with tag': 

	git reset --hard &&
	test_tick &&
	git commit --allow-empty -m "old commit" &&
	old=$(git rev-parse --verify HEAD) &&
	git tag -a -m "tag on old" tagged-old HEAD &&
	test_tick &&
	git commit --allow-empty -m "new commit" &&
	new=$(git rev-parse --verify HEAD) &&
	test_tick &&
	git commit --allow-empty --amend -C tagged-old &&
	git show --pretty="format:%ad %s" "$old" >expected &&
	git show --pretty="format:%ad %s" HEAD >actual &&
	test_cmp expected actual


HEAD is now at f2dc992 old commit
[main 4a62244] old commit
 Author: A U Thor <author@example.com>
[main bfa55a8] new commit
 Author: A U Thor <author@example.com>
[main 064768d] old commit
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
ok 64 - amend using the message from a commit named with tag

expecting success of 7501.65 'amend can copy notes': 

	git config notes.rewrite.amend true &&
	git config notes.rewriteRef "refs/notes/*" &&
	test_commit foo &&
	git notes add -m"a note" &&
	test_tick &&
	git commit --amend -m"new foo" &&
	test "$(git notes show)" = "a note"


[main dc1ec68] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[main 6539162] new foo
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 65 - amend can copy notes

expecting success of 7501.66 'commit a file whose name is a dash': 
	git reset --hard &&
	test_write_lines 1 2 3 4 5 >./- &&
	git add ./- &&
	test_tick &&
	git commit -m "add dash" >output </dev/null &&
	test_i18ngrep " changed, 5 insertions" output

HEAD is now at 6539162 new foo
 1 file changed, 5 insertions(+)
ok 66 - commit a file whose name is a dash

expecting success of 7501.67 '--only works on to-be-born branch': 
	# This test relies on having something in the index, as it
	# would not otherwise actually prove much.  So check this.
	test -n "$(git ls-files)" &&
	git checkout --orphan orphan &&
	echo foo >newfile &&
	git add newfile &&
	git commit --only newfile -m"--only on unborn branch" &&
	echo newfile >expected &&
	git ls-tree -r --name-only HEAD >actual &&
	test_cmp expected actual

Switched to a new branch 'orphan'
[orphan (root-commit) 80ebc6a] --only on unborn branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 newfile
ok 67 - --only works on to-be-born branch

expecting success of 7501.68 '--dry-run with conflicts fixed from a merge': 
	# setup two branches with conflicting information
	# in the same file, resolve the conflict,
	# call commit with --dry-run
	echo "Initial contents, unimportant" >test-file &&
	git add test-file &&
	git commit -m "Initial commit" &&
	echo "commit-1-state" >test-file &&
	git commit -m "commit 1" -i test-file &&
	git tag commit-1 &&
	git checkout -b branch-2 HEAD^1 &&
	echo "commit-2-state" >test-file &&
	git commit -m "commit 2" -i test-file &&
	test_must_fail git merge --no-commit commit-1 &&
	echo "commit-2-state" >test-file &&
	git add test-file &&
	git commit --dry-run &&
	git commit -m "conflicts fixed from merge."

[orphan e60d113] Initial commit
 Author: A U Thor <author@example.com>
 6 files changed, 9 insertions(+)
 create mode 100644 -
 create mode 100644 elif
 create mode 100644 foo.t
 create mode 100644 negative
 create mode 100644 positive
 create mode 100644 test-file
[orphan ec78cc8] commit 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch-2'
[branch-2 80f2ea2] commit 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging test-file
CONFLICT (content): Merge conflict in test-file
Automatic merge failed; fix conflicts and then commit the result.
On branch branch-2
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	actual
	commit
	current
	diff
	diff1
	diff2
	editor
	err
	expect
	expected
	file.actual
	file.expect
	ident
	msg
	out
	output
	replace
	stat
	subject

[branch-2 5e7a426] conflicts fixed from merge.
 Author: A U Thor <author@example.com>
ok 68 - --dry-run with conflicts fixed from a merge

expecting success of 7501.69 '--dry-run --short': 
	>test-file &&
	git add test-file &&
	git commit --dry-run --short

M  test-file
?? actual
?? commit
?? current
?? diff
?? diff1
?? diff2
?? editor
?? err
?? expect
?? expected
?? file.actual
?? file.expect
?? ident
?? msg
?? out
?? output
?? replace
?? stat
?? subject
ok 69 - --dry-run --short

# passed all 69 test(s)
1..69
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7504-commit-msg-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7504-commit-msg-hook/.git/
expecting success of 7504.1 'with no hook': 

	echo "foo" > file &&
	git add file &&
	git commit -m "first"


[main (root-commit) d6ab80b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - with no hook

expecting success of 7504.2 'with no hook (editor)': 

	echo "more foo" >> file &&
	git add file &&
	echo "more foo" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit


[main 8164a21] more foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - with no hook (editor)

expecting success of 7504.3 '--no-verify with no hook': 

	echo "bar" > file &&
	git add file &&
	git commit --no-verify -m "bar"


[main 854c7e2] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
ok 3 - --no-verify with no hook

expecting success of 7504.4 '--no-verify with no hook (editor)': 

	echo "more bar" > file &&
	git add file &&
	echo "more bar" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify


[main 0b79d34] more bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - --no-verify with no hook (editor)

expecting success of 7504.5 'setup: commit-msg hook that always succeeds': 
	test_hook --setup commit-msg <<-\EOF
	exit 0
	EOF

ok 5 - setup: commit-msg hook that always succeeds

expecting success of 7504.6 'with succeeding hook': 

	echo "more" >> file &&
	git add file &&
	git commit -m "more"


[main 329307f] more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 6 - with succeeding hook

expecting success of 7504.7 'with succeeding hook (editor)': 

	echo "more more" >> file &&
	git add file &&
	echo "more more" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit


[main 1c57244] more more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 7 - with succeeding hook (editor)

expecting success of 7504.8 '--no-verify with succeeding hook': 

	echo "even more" >> file &&
	git add file &&
	git commit --no-verify -m "even more"


[main f6c9c8b] even more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 8 - --no-verify with succeeding hook

expecting success of 7504.9 '--no-verify with succeeding hook (editor)': 

	echo "even more more" >> file &&
	git add file &&
	echo "even more more" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify


[main 64f8392] even more more
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 9 - --no-verify with succeeding hook (editor)

expecting success of 7504.10 'setup: commit-msg hook that always fails': 
	test_hook --clobber commit-msg <<-\EOF
	exit 1
	EOF

ok 10 - setup: commit-msg hook that always fails

expecting success of 7504.11 'with failing hook': 

	echo "another" >> file &&
	git add file &&
	test_must_fail git commit -m "another"


ok 11 - with failing hook

expecting success of 7504.12 'with failing hook (editor)': 

	echo "more another" >> file &&
	git add file &&
	echo "more another" > FAKE_MSG &&
	! (GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit)


ok 12 - with failing hook (editor)

expecting success of 7504.13 '--no-verify with failing hook': 

	echo "stuff" >> file &&
	git add file &&
	git commit --no-verify -m "stuff"


[main 95dce17] stuff
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
ok 13 - --no-verify with failing hook

expecting success of 7504.14 '-n followed by --verify with failing hook': 

	echo "even more" >> file &&
	git add file &&
	test_must_fail git commit -n --verify -m "even more"


ok 14 - -n followed by --verify with failing hook

expecting success of 7504.15 '--no-verify with failing hook (editor)': 

	echo "more stuff" >> file &&
	git add file &&
	echo "more stuff" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify


[main 254c35b] more stuff
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
ok 15 - --no-verify with failing hook (editor)

expecting success of 7504.16 'merge fails with failing hook': 

	test_when_finished "git branch -D newbranch" &&
	test_when_finished "git checkout -f main" &&
	git checkout --orphan newbranch &&
	: >file2 &&
	git add file2 &&
	git commit --no-verify file2 -m in-side-branch &&
	test_must_fail git merge --allow-unrelated-histories main &&
	commit_msg_is "in-side-branch" # HEAD before merge


Switched to a new branch 'newbranch'
[newbranch (root-commit) 73906b9] in-side-branch
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
error: Your local changes to the following files would be overwritten by merge:
  file
Merge with strategy ort failed.
Switched to branch 'main'
Deleted branch newbranch (was 73906b9).
ok 16 - merge fails with failing hook

expecting success of 7504.17 'merge bypasses failing hook with --no-verify': 

	test_when_finished "git branch -D newbranch" &&
	test_when_finished "git checkout -f main" &&
	git checkout --orphan newbranch &&
	git rm -f file &&
	: >file2 &&
	git add file2 &&
	git commit --no-verify file2 -m in-side-branch &&
	git merge --no-verify --allow-unrelated-histories main &&
	commit_msg_is "Merge branch 'main' into newbranch"

Switched to a new branch 'newbranch'
rm 'file'
[newbranch (root-commit) 73906b9] in-side-branch
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
Merge made by the 'ort' strategy.
 file | 10 ++++++++++
 1 file changed, 10 insertions(+)
 create mode 100644 file
Switched to branch 'main'
Deleted branch newbranch (was d8333d0).
ok 17 - merge bypasses failing hook with --no-verify

expecting success of 7504.18 'setup: commit-msg hook made non-executable': 
	git_dir="$(git rev-parse --git-dir)" &&
	chmod -x "$git_dir/hooks/commit-msg"

ok 18 - setup: commit-msg hook made non-executable

expecting success of 7504.19 'with non-executable hook': 

	echo "content" >file &&
	git add file &&
	git commit -m "content"


hint: The '.git/hooks/commit-msg' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
[main 89fb8ae] content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 10 deletions(-)
ok 19 - with non-executable hook

expecting success of 7504.20 'with non-executable hook (editor)': 

	echo "content again" >> file &&
	git add file &&
	echo "content again" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -m "content again"


hint: The '.git/hooks/commit-msg' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
[main 888e6c6] content again
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 20 - with non-executable hook (editor)

expecting success of 7504.21 '--no-verify with non-executable hook': 

	echo "more content" >> file &&
	git add file &&
	git commit --no-verify -m "more content"


[main 7569859] more content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 21 - --no-verify with non-executable hook

expecting success of 7504.22 '--no-verify with non-executable hook (editor)': 

	echo "even more content" >> file &&
	git add file &&
	echo "even more content" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify


[main 275f9c1] even more content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 22 - --no-verify with non-executable hook (editor)

expecting success of 7504.23 'setup: commit-msg hook that edits the commit message': 
	test_hook --clobber commit-msg <<-\EOF
	echo "new message" >"$1"
	exit 0
	EOF

ok 23 - setup: commit-msg hook that edits the commit message

expecting success of 7504.24 'hook edits commit message': 

	echo "additional" >> file &&
	git add file &&
	git commit -m "additional" &&
	commit_msg_is "new message"


[main fe8ba48] new message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 24 - hook edits commit message

expecting success of 7504.25 'hook edits commit message (editor)': 

	echo "additional content" >> file &&
	git add file &&
	echo "additional content" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
	commit_msg_is "new message"


[main 01f87e3] new message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 25 - hook edits commit message (editor)

expecting success of 7504.26 'hook doesn't edit commit message': 

	echo "plus" >> file &&
	git add file &&
	git commit --no-verify -m "plus" &&
	commit_msg_is "plus"


[main b89da1b] plus
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 26 - hook doesn't edit commit message

expecting success of 7504.27 'hook doesn't edit commit message (editor)': 

	echo "more plus" >> file &&
	git add file &&
	echo "more plus" > FAKE_MSG &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
	commit_msg_is "more plus"

[main f4fdd67] more plus
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 27 - hook doesn't edit commit message (editor)

expecting success of 7504.28 'hook called in git-merge picks up commit message': 
	test_when_finished "git branch -D newbranch" &&
	test_when_finished "git checkout -f main" &&
	git checkout --orphan newbranch &&
	git rm -f file &&
	: >file2 &&
	git add file2 &&
	git commit --no-verify file2 -m in-side-branch &&
	git merge --allow-unrelated-histories main &&
	commit_msg_is "new message"

Switched to a new branch 'newbranch'
rm 'file'
[newbranch (root-commit) 73906b9] in-side-branch
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file2
Merge made by the 'ort' strategy.
 file | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 file
Switched to branch 'main'
Deleted branch newbranch (was 8eb8126).
ok 28 - hook called in git-merge picks up commit message

checking known breakage of 7504.29 'merge --continue remembers --no-verify': 
	test_when_finished "git branch -D newbranch" &&
	test_when_finished "git checkout -f main" &&
	git checkout main &&
	echo a >file2 &&
	git add file2 &&
	git commit --no-verify -m "add file2 to main" &&
	git checkout -b newbranch main^ &&
	echo b >file2 &&
	git add file2 &&
	git commit --no-verify file2 -m in-side-branch &&
	git merge --no-verify -m not-rewritten-by-hook main &&
	# resolve conflict:
	echo c >file2 &&
	git add file2 &&
	git merge --continue &&
	commit_msg_is not-rewritten-by-hook

Already on 'main'
[main 4c03054] add file2 to main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Switched to a new branch 'newbranch'
[newbranch 7295afc] in-side-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Automatic merge failed; fix conflicts and then commit the result.
Switched to branch 'main'
Deleted branch newbranch (was 7295afc).
not ok 29 - merge --continue remembers --no-verify # TODO known breakage

expecting success of 7504.30 'hook is called for reword during `rebase -i`': 

	GIT_SEQUENCE_EDITOR="\"$REWORD_EDITOR\"" git rebase -i HEAD^ &&
	commit_msg_is "new message"


Rebasing (1/1)
[detached HEAD 7d30ea0] new message
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file2

                                                                                
Successfully rebased and updated refs/heads/main.
ok 30 - hook is called for reword during `rebase -i`

# still have 1 known breakage(s)
# passed all remaining 29 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7502-commit-porcelain.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7502-commit-porcelain/.git/
expecting success of 7502.1 'output summary format': 

	echo new >file1 &&
	git add file1 &&
	check_summary_oneline "root-commit" "initial" &&

	echo change >>file1 &&
	git add file1

ok 1 - output summary format

expecting success of 7502.2 'output summary format: root-commit': 
	check_summary_oneline "" "a change"

ok 2 - output summary format: root-commit

expecting success of 7502.3 'output summary format for commit with an empty diff': 

	check_summary_oneline "" "empty" "--allow-empty"

ok 3 - output summary format for commit with an empty diff

expecting success of 7502.4 'output summary format for merges': 

	git checkout -b recursive-base &&
	test_commit base file1 &&

	git checkout -b recursive-a recursive-base &&
	test_commit commit-a file1 &&

	git checkout -b recursive-b recursive-base &&
	test_commit commit-b file1 &&

	# conflict
	git checkout recursive-a &&
	test_must_fail git merge recursive-b &&
	# resolve the conflict
	echo commit-a >file1 &&
	git add file1 &&
	check_summary_oneline "" "Merge"

Switched to a new branch 'recursive-base'
[recursive-base e6f945f] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 2 deletions(-)
Switched to a new branch 'recursive-a'
[recursive-a 9300328] commit-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'recursive-b'
[recursive-b 2f9e083] commit-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'recursive-a'
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - output summary format for merges

expecting success of 7502.5 'the basics': 

	output_tests_cleanup &&

	echo doing partial >"commit is" &&
	mkdir not &&
	echo very much encouraged but we should >not/forbid &&
	git add "commit is" not &&
	echo update added "commit is" file >"commit is" &&
	echo also update another >not/forbid &&
	test_tick &&
	git commit -a -m "initial with -a" &&

	git cat-file blob HEAD:"commit is" >current.1 &&
	git cat-file blob HEAD:not/forbid >current.2 &&

	cmp current.1 "commit is" &&
	cmp current.2 not/forbid


Switched to branch 'main'
rm 'file1'
[main 34ca441] cleanup
 Author: A U Thor <author@example.com>
 1 file changed, 2 deletions(-)
 delete mode 100644 file1
[main 8a2203d] initial with -a
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 commit is
 create mode 100644 not/forbid
ok 5 - the basics

expecting success of 7502.6 'partial': 

	echo another >"commit is" &&
	echo another >not/forbid &&
	test_tick &&
	git commit -m "partial commit to handle a file" "commit is" &&

	changed=$(git diff-tree --name-only HEAD^ HEAD) &&
	test "$changed" = "commit is"


[main 3302250] partial commit to handle a file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - partial

expecting success of 7502.7 'partial modification in a subdirectory': 

	test_tick &&
	git commit -m "partial commit to subdirectory" not &&

	changed=$(git diff-tree -r --name-only HEAD^ HEAD) &&
	test "$changed" = "not/forbid"


[main 742b3a6] partial commit to subdirectory
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - partial modification in a subdirectory

expecting success of 7502.8 'partial removal': 

	git rm not/forbid &&
	git commit -m "partial commit to remove not/forbid" not &&

	changed=$(git diff-tree -r --name-only HEAD^ HEAD) &&
	test "$changed" = "not/forbid" &&
	remain=$(git ls-tree -r --name-only HEAD) &&
	test "$remain" = "commit is"


rm 'not/forbid'
[main 09fd303] partial commit to remove not/forbid
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 not/forbid
ok 8 - partial removal

expecting success of 7502.9 'sign off': 

	>positive &&
	git add positive &&
	git commit -s -m "thank you" &&
	git cat-file commit HEAD >commit.msg &&
	sed -ne "s/Signed-off-by: //p" commit.msg >actual &&
	git var GIT_COMMITTER_IDENT >ident &&
	sed -e "s/>.*/>/" ident >expected &&
	test_cmp expected actual


[main cc1232b] thank you
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 positive
ok 9 - sign off

expecting success of 7502.10 'commit --trailer with "="': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	EOF
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main c563787] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 10 - commit --trailer with "="

expecting success of 7502.11 'commit --trailer with -c and "replace" as ifexists': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Helped-by: C3 E3
	EOF
	git -c trailer.ifexists="replace" \
		commit --trailer "Mentored-by: C4 E4" \
		 --trailer "Helped-by: C3 E3" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d"  commit.msg >actual &&
	test_cmp expected actual

[main 9c665b9] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 743970c] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 11 - commit --trailer with -c and "replace" as ifexists

expecting success of 7502.12 'commit --trailer with -c and "add" as ifexists': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Reported-by: C3 E3
	Mentored-by: C4 E4
	EOF
	git -c trailer.ifexists="add" \
		commit --trailer "Reported-by: C3 E3" \
		--trailer "Mentored-by: C4 E4" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d"  commit.msg >actual &&
	test_cmp expected actual

[main c0ed76d] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 3065ecb] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 12 - commit --trailer with -c and "add" as ifexists

expecting success of 7502.13 'commit --trailer with -c and "donothing" as ifexists': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Reviewed-by: C6 E6
	EOF
	git -c trailer.ifexists="donothing" \
		commit --trailer "Mentored-by: C5 E5" \
		--trailer "Reviewed-by: C6 E6" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d"  commit.msg >actual &&
	test_cmp expected actual

[main 2dad5db] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 86cc013] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 13 - commit --trailer with -c and "donothing" as ifexists

expecting success of 7502.14 'commit --trailer with -c and "addIfDifferent" as ifexists': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Mentored-by: C5 E5
	EOF
	git -c trailer.ifexists="addIfDifferent" \
		commit --trailer "Reported-by: C3 E3" \
		--trailer "Mentored-by: C5 E5" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d"  commit.msg >actual &&
	test_cmp expected actual

[main bacbe07] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 9b53fef] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 14 - commit --trailer with -c and "addIfDifferent" as ifexists

expecting success of 7502.15 'commit --trailer with -c and "addIfDifferentNeighbor" as ifexists': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Reported-by: C3 E3
	EOF
	git -c trailer.ifexists="addIfDifferentNeighbor" \
		commit --trailer "Mentored-by: C4 E4" \
		--trailer "Reported-by: C3 E3" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d"  commit.msg >actual &&
	test_cmp expected actual

[main 5b19760] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main ea6f7b2] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 15 - commit --trailer with -c and "addIfDifferentNeighbor" as ifexists

expecting success of 7502.16 'commit --trailer with -c and "end" as where': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Reported-by: C3 E3
	Mentored-by: C4 E4
	EOF
	git -c trailer.where="end" \
		commit --trailer "Reported-by: C3 E3" \
		--trailer "Mentored-by: C4 E4" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 6edd712] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main abac1a7] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 16 - commit --trailer with -c and "end" as where

expecting success of 7502.17 'commit --trailer with -c and "start" as where': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C1 E1
	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	EOF
	git -c trailer.where="start" \
		commit --trailer "Signed-off-by: C O Mitter <committer@example.com>" \
		--trailer "Signed-off-by: C1 E1" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 49719a0] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 3210bcd] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 17 - commit --trailer with -c and "start" as where

expecting success of 7502.18 'commit --trailer with -c and "after" as where': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Mentored-by: C5 E5
	EOF
	git -c trailer.where="after" \
		commit --trailer "Mentored-by: C4 E4" \
		--trailer "Mentored-by: C5 E5" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 3a4a38a] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 30c3647] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 18 - commit --trailer with -c and "after" as where

expecting success of 7502.19 'commit --trailer with -c and "before" as where': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C2 E2
	Mentored-by: C3 E3
	Mentored-by: C4 E4
	EOF
	git -c trailer.where="before" \
		commit --trailer "Mentored-by: C3 E3" \
		--trailer "Mentored-by: C2 E2" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main e5407b4] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 2e57a8f] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 19 - commit --trailer with -c and "before" as where

expecting success of 7502.20 'commit --trailer with -c and "donothing" as ifmissing': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Helped-by: C5 E5
	EOF
	git -c trailer.ifmissing="donothing" \
		commit --trailer "Helped-by: C5 E5" \
		--trailer "Based-by: C6 E6" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 4b3be69] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main e71943e] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 20 - commit --trailer with -c and "donothing" as ifmissing

expecting success of 7502.21 'commit --trailer with -c and "add" as ifmissing': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Reported-by: C3 E3
	Mentored-by: C4 E4
	Helped-by: C5 E5
	Based-by: C6 E6
	EOF
	git -c trailer.ifmissing="add" \
		commit --trailer "Helped-by: C5 E5" \
		--trailer "Based-by: C6 E6" \
		--amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 8576769] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 3741b21] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 21 - commit --trailer with -c and "add" as ifmissing

expecting success of 7502.22 'commit --trailer with -c ack.key ': 
	echo "fun" >>file1 &&
	git add file1 &&
	cat >expected <<-\EOF &&
		hello

		Acked-by: Peff
	EOF
	git -c trailer.ack.key="Acked-by" \
		commit --trailer "ack = Peff" -m "hello" &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 5789976] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 22 - commit --trailer with -c ack.key 

expecting success of 7502.23 'commit --trailer with -c and ":=#" as separators': 
	echo "fun" >>file1 &&
	git add file1 &&
	cat >expected <<-\EOF &&
		I hate bug

		Bug #42
	EOF
	git -c trailer.separators=":=#" \
		-c trailer.bug.key="Bug #" \
		commit --trailer "bug = 42" -m "I hate bug" &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 6e78fd4] I hate bug
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 23 - commit --trailer with -c and ":=#" as separators

expecting success of 7502.24 'commit --trailer with -c and command': 
	trailer_commit_base &&
	cat >expected <<-\EOF &&
	hello

	Signed-off-by: C O Mitter <committer@example.com>
	Signed-off-by: C1 E1
	Helped-by: C2 E2
	Mentored-by: C4 E4
	Reported-by: A U Thor <author@example.com>
	EOF
	git -c trailer.report.key="Reported-by: " \
		-c trailer.report.ifexists="replace" \
		-c trailer.report.command="NAME=\"\$ARG\"; test -n \"\$NAME\" && \
		git log --author=\"\$NAME\" -1 --format=\"format:%aN <%aE>\" || true" \
		commit --trailer "report = author" --amend &&
	git cat-file commit HEAD >commit.msg &&
	sed -e "1,/^\$/d" commit.msg >actual &&
	test_cmp expected actual

[main 6b1e5e9] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 336e96f] hello
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:22:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 24 - commit --trailer with -c and command

expecting success of 7502.25 'multiple -m': 

	>negative &&
	git add negative &&
	git commit -m "one" -m "two" -m "three" &&
	actual=$(git cat-file commit HEAD >tmp && sed -e "1,/^\$/d" tmp && rm tmp) &&
	expected=$(test_write_lines "one" "" "two" "" "three") &&
	test "z$actual" = "z$expected"


[main 6e9736c] one
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 negative
ok 25 - multiple -m

expecting success of 7502.26 'verbose': 

	echo minus >negative &&
	git add negative &&
	git status -v >raw &&
	sed -ne "/^diff --git /p" raw >actual &&
	echo "diff --git a/negative b/negative" >expect &&
	test_cmp expect actual


ok 26 - verbose

expecting success of 7502.27 'verbose respects diff config': 

	test_config diff.noprefix true &&
	git status -v >actual &&
	grep "diff --git negative negative" actual

diff --git negative negative
ok 27 - verbose respects diff config

expecting success of 7502.28 'prepare file with comment line and trailing newlines': 
	printf "%s" "$mesg_with_comment_and_newlines" >expect

ok 28 - prepare file with comment line and trailing newlines

expecting success of 7502.29 'cleanup commit messages (verbatim option,-t)': 

	echo >>negative &&
	git commit --cleanup=verbatim --no-status -t expect -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual


[main c23e7ca] # text
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
ok 29 - cleanup commit messages (verbatim option,-t)

expecting success of 7502.30 'cleanup commit messages (verbatim option,-F)': 

	echo >>negative &&
	git commit --cleanup=verbatim -F expect -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual


[main c755105] # text
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 30 - cleanup commit messages (verbatim option,-F)

expecting success of 7502.31 'cleanup commit messages (verbatim option,-m)': 

	echo >>negative &&
	git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual


[main c90e3b0] # text
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 31 - cleanup commit messages (verbatim option,-m)

expecting success of 7502.32 'cleanup commit messages (whitespace option,-F)': 

	echo >>negative &&
	test_write_lines "" "# text" "" >text &&
	echo "# text" >expect &&
	git commit --cleanup=whitespace -F text -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual


[main 80412de] # text
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 32 - cleanup commit messages (whitespace option,-F)

expecting success of 7502.33 'cleanup commit messages (scissors option,-F,-e)': 

	echo >>negative &&
	cat >text <<-\EOF &&

	# to be kept

	  # ------------------------ >8 ------------------------
	# to be kept, too
	# ------------------------ >8 ------------------------
	to be removed
	# ------------------------ >8 ------------------------
	to be removed, too
	EOF

	cat >expect <<-\EOF &&
	# to be kept

	  # ------------------------ >8 ------------------------
	# to be kept, too
	EOF
	git commit --cleanup=scissors -e -F text -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual

[main 6863ea0] # to be kept
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 33 - cleanup commit messages (scissors option,-F,-e)

expecting success of 7502.34 'cleanup commit messages (scissors option,-F,-e, scissors on first line)': 

	echo >>negative &&
	cat >text <<-\EOF &&
	# ------------------------ >8 ------------------------
	to be removed
	EOF
	git commit --cleanup=scissors -e -F text -a --allow-empty-message &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_must_be_empty actual

[main cf0831a] 
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 34 - cleanup commit messages (scissors option,-F,-e, scissors on first line)

expecting success of 7502.35 'cleanup commit messages (strip option,-F)': 

	echo >>negative &&
	test_write_lines "" "# text" "sample" "" >text &&
	echo sample >expect &&
	git commit --cleanup=strip -F text -a &&
	git cat-file -p HEAD >raw &&
	sed -e "1,/^\$/d" raw >actual &&
	test_cmp expect actual


[main fa12314] sample
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 35 - cleanup commit messages (strip option,-F)

expecting success of 7502.36 'cleanup commit messages (strip option,-F,-e)': 

	echo >>negative &&
	test_write_lines "" "sample" "" >text &&
	git commit -e -F text -a &&
	head -n 4 .git/COMMIT_EDITMSG >actual

[main 468ebbb] sample
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 36 - cleanup commit messages (strip option,-F,-e)

expecting success of 7502.37 'cleanup commit messages (strip option,-F,-e): output': 
	test_cmp expect actual

ok 37 - cleanup commit messages (strip option,-F,-e): output

expecting success of 7502.38 'cleanup commit message (fail on invalid cleanup mode option)': 
	test_must_fail git commit --cleanup=non-existent

fatal: Invalid cleanup mode non-existent
ok 38 - cleanup commit message (fail on invalid cleanup mode option)

expecting success of 7502.39 'cleanup commit message (fail on invalid cleanup mode configuration)': 
	test_must_fail git -c commit.cleanup=non-existent commit

fatal: Invalid cleanup mode non-existent
ok 39 - cleanup commit message (fail on invalid cleanup mode configuration)

expecting success of 7502.40 'cleanup commit message (no config and no option uses default)': 
	echo content >>file &&
	git add file &&
	(
	  test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
	  git commit --no-status
	) &&
	commit_msg_is "commit message"

[main 8e260e3] commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 40 - cleanup commit message (no config and no option uses default)

expecting success of 7502.41 'cleanup commit message (option overrides default)': 
	echo content >>file &&
	git add file &&
	(
	  test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
	  git commit --cleanup=whitespace --no-status
	) &&
	commit_msg_is "commit message # comment"

[main b129884] commit message # comment
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 41 - cleanup commit message (option overrides default)

expecting success of 7502.42 'cleanup commit message (config overrides default)': 
	echo content >>file &&
	git add file &&
	(
	  test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
	  git -c commit.cleanup=whitespace commit --no-status
	) &&
	commit_msg_is "commit message # comment"

[main 966434a] commit message # comment
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 42 - cleanup commit message (config overrides default)

expecting success of 7502.43 'cleanup commit message (option overrides config)': 
	echo content >>file &&
	git add file &&
	(
	  test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
	  git -c commit.cleanup=whitespace commit --cleanup=default
	) &&
	commit_msg_is "commit message"

[main cd33024] commit message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 43 - cleanup commit message (option overrides config)

expecting success of 7502.44 'cleanup commit message (default, -m)': 
	echo content >>file &&
	git add file &&
	git commit -m "message #comment " &&
	commit_msg_is "message #comment"

[main 7fd8208] message #comment
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 44 - cleanup commit message (default, -m)

expecting success of 7502.45 'cleanup commit message (whitespace option, -m)': 
	echo content >>file &&
	git add file &&
	git commit --cleanup=whitespace --no-status -m "message #comment " &&
	commit_msg_is "message #comment"

[main eeaaed9] message #comment
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 45 - cleanup commit message (whitespace option, -m)

expecting success of 7502.46 'cleanup commit message (whitespace config, -m)': 
	echo content >>file &&
	git add file &&
	git -c commit.cleanup=whitespace commit --no-status -m "message #comment " &&
	commit_msg_is "message #comment"

[main f7bcaa8] message #comment
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 46 - cleanup commit message (whitespace config, -m)

expecting success of 7502.47 'message shows author when it is not equal to committer': 
	echo >>negative &&
	git commit -e -m "sample" -a &&
	test_i18ngrep \
	  "^# Author: *A U Thor <author@example.com>\$" \
	  .git/COMMIT_EDITMSG

[main b3f599f] sample
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Author:    A U Thor <author@example.com>
ok 47 - message shows author when it is not equal to committer

expecting success of 7502.48 'message shows date when it is explicitly set': 
	git commit --allow-empty -e -m foo --date="2010-01-02T03:04:05" &&
	test_i18ngrep \
	  "^# Date: *Sat Jan 2 03:04:05 2010 +0000" \
	  .git/COMMIT_EDITMSG

[main a7de0c0] foo
 Author: A U Thor <author@example.com>
 Date: Sat Jan 2 03:04:05 2010 +0000
# Date:      Sat Jan 2 03:04:05 2010 +0000
ok 48 - message shows date when it is explicitly set

checking prerequisite: AUTOIDENT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
	sane_unset GIT_AUTHOR_NAME &&
	sane_unset GIT_AUTHOR_EMAIL &&
	git var GIT_AUTHOR_IDENT

)
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'buildd@testwandboard.(none)')
prerequisite AUTOIDENT not satisfied
ok 49 # skip message shows committer when it is automatic (missing AUTOIDENT)

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
expecting success of 7502.50 'do not fire editor when committer is bogus': 
	>.git/result &&

	echo >>negative &&
	(
		sane_unset GIT_COMMITTER_EMAIL &&
		sane_unset GIT_COMMITTER_NAME &&
		GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" &&
		export GIT_EDITOR &&
		test_must_fail git commit -e -m sample -a
	) &&
	test_must_be_empty .git/result

Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'buildd@testwandboard.(none)')
ok 50 - do not fire editor when committer is bogus

expecting success of 7502.51 'do not fire editor if -m <msg> was given': 
	echo tick >file &&
	git add file &&
	echo "editor not started" >.git/result &&
	(GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" git commit -m tick) &&
	test "$(cat .git/result)" = "editor not started"

[main 794a068] tick
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 20 deletions(-)
ok 51 - do not fire editor if -m <msg> was given

expecting success of 7502.52 'do not fire editor if -m "" was given': 
	echo tock >file &&
	git add file &&
	echo "editor not started" >.git/result &&
	(GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" \
	 git commit -m "" --allow-empty-message) &&
	test "$(cat .git/result)" = "editor not started"

[main af1259f] 
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 52 - do not fire editor if -m "" was given

expecting success of 7502.53 'do not fire editor in the presence of conflicts': 

	git clean -f &&
	echo f >g &&
	git add g &&
	git commit -m "add g" &&
	git branch second &&
	echo main >g &&
	echo g >h &&
	git add g h &&
	git commit -m "modify g and add h" &&
	git checkout second &&
	echo second >g &&
	git add g &&
	git commit -m second &&
	# Must fail due to conflict
	test_must_fail git cherry-pick -n main &&
	echo "editor not started" >.git/result &&
	(
		GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" &&
		export GIT_EDITOR &&
		test_must_fail git commit
	) &&
	test "$(cat .git/result)" = "editor not started"

Removing act
Removing actual
Removing commit.msg
Removing commit_msg_is.actual
Removing commit_msg_is.expect
Removing current.1
Removing current.2
Removing exp
Removing expect
Removing expected
Removing ident
Removing raw
Removing text
[main 1bd2c97] add g
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 g
[main 8204884] modify g and add h
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 h
Switched to branch 'second'
M	negative
[second 2e6b8fe] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging g
CONFLICT (content): Merge conflict in g
error: could not apply 8204884... modify g and add h
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
U	g
ok 53 - do not fire editor in the presence of conflicts

expecting success of 7502.54 'a SIGTERM should break locks': 
	echo >>negative &&
	! "$SHELL_PATH" -c '
	  echo kill -TERM $$ >>.git/FAKE_EDITOR
	  GIT_EDITOR=.git/FAKE_EDITOR
	  export GIT_EDITOR
	  exec git commit -a' &&
	test ! -f .git/index.lock

Terminated
ok 54 - a SIGTERM should break locks

expecting success of 7502.55 'Hand committing of a redundant merge removes dups': 

	git rev-parse second main >expect &&
	test_must_fail git merge second main &&
	git checkout main g &&
	EDITOR=: git commit -a &&
	git cat-file commit HEAD >raw &&
	sed -n -e "s/^parent //p" -e "/^$/q" raw >actual &&
	test_cmp expect actual


Auto-merging g
CONFLICT (content): Merge conflict in g
Automatic merge failed; fix conflicts and then commit the result.
Updated 1 path from 890ab14
[second a98dd2d] Merge branch 'main' into second
 Author: A U Thor <author@example.com>
ok 55 - Hand committing of a redundant merge removes dups

expecting success of 7502.56 'A single-liner subject with a token plus colon is not a footer': 

	git reset --hard &&
	git commit -s -m "hello: kitty" --allow-empty &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_line_count = 3 actual


HEAD is now at a98dd2d Merge branch 'main' into second
[second b7b34b6] hello: kitty
 Author: A U Thor <author@example.com>
ok 56 - A single-liner subject with a token plus colon is not a footer

expecting success of 7502.57 'commit -s places sob on third line after two empty lines': 
	git commit -s --allow-empty --allow-empty-message &&
	cat <<-EOF >expect &&


	Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>

	EOF
	sed -e "/^#/d" -e "s/^:.*//" .git/COMMIT_EDITMSG >actual &&
	test_cmp expect actual

[second d79688e] Signed-off-by: C O Mitter <committer@example.com>
 Author: A U Thor <author@example.com>
ok 57 - commit -s places sob on third line after two empty lines

expecting success of 7502.58 'commit': 
		try_commit "" &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at d79688e Signed-off-by: C O Mitter <committer@example.com>
[second 241bed1] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Changes to be committed:
ok 58 - commit

expecting success of 7502.59 'commit --status': 
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 241bed1 message
[second 90a2252] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Changes to be committed:
ok 59 - commit --status

expecting success of 7502.60 'commit --no-status': 
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 90a2252 message
[second aedae81] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 60 - commit --no-status

expecting success of 7502.61 'commit with commit.status = yes': 
		test_config commit.status yes &&
		try_commit "" &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at aedae81 message
[second 60f3def] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Changes to be committed:
ok 61 - commit with commit.status = yes

expecting success of 7502.62 'commit with commit.status = no': 
		test_config commit.status no &&
		try_commit "" &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 60f3def message
[second 92bbd97] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 62 - commit with commit.status = no

expecting success of 7502.63 'commit --status with commit.status = yes': 
		test_config commit.status yes &&
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 92bbd97 message
[second d8a222f] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Changes to be committed:
ok 63 - commit --status with commit.status = yes

expecting success of 7502.64 'commit --no-status with commit.status = yes': 
		test_config commit.status yes &&
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at d8a222f message
[second 64e9d1a] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 64 - commit --no-status with commit.status = yes

expecting success of 7502.65 'commit --status with commit.status = no': 
		test_config commit.status no &&
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 64e9d1a message
[second 56642a0] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
# Changes to be committed:
ok 65 - commit --status with commit.status = no

expecting success of 7502.66 'commit --no-status with commit.status = no': 
		test_config commit.status no &&
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 56642a0 message
[second f07693e] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 66 - commit --no-status with commit.status = no

expecting success of 7502.67 'commit': 
		try_commit "" &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at f07693e message
[second 5234937] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
# Changes to be committed:
ok 67 - commit

expecting success of 7502.68 'commit --status': 
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 5234937 message
[second cf0cad8] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
# Changes to be committed:
ok 68 - commit --status

expecting success of 7502.69 'commit --no-status': 
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at cf0cad8 message
[second e28ce15] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
ok 69 - commit --no-status

expecting success of 7502.70 'commit with commit.status = yes': 
		test_config commit.status yes &&
		try_commit "" &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at e28ce15 message
[second 44d45d9] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
# Changes to be committed:
ok 70 - commit with commit.status = yes

expecting success of 7502.71 'commit with commit.status = no': 
		test_config commit.status no &&
		try_commit "" &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 44d45d9 message
[second 24274fe] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
ok 71 - commit with commit.status = no

expecting success of 7502.72 'commit --status with commit.status = yes': 
		test_config commit.status yes &&
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 24274fe message
[second 9d11bb5] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
# Changes to be committed:
ok 72 - commit --status with commit.status = yes

expecting success of 7502.73 'commit --no-status with commit.status = yes': 
		test_config commit.status yes &&
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 9d11bb5 message
[second 6e36efa] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
ok 73 - commit --no-status with commit.status = yes

expecting success of 7502.74 'commit --status with commit.status = no': 
		test_config commit.status no &&
		try_commit --status &&
		test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at 6e36efa message
[second d68f7ad] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
# Changes to be committed:
ok 74 - commit --status with commit.status = no

expecting success of 7502.75 'commit --no-status with commit.status = no': 
		test_config commit.status no &&
		try_commit --no-status &&
		test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
	
HEAD is now at d68f7ad message
[second cb3ad9b] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
ok 75 - commit --no-status with commit.status = no

expecting success of 7502.76 'commit --status with custom comment character': 
	test_config core.commentchar ";" &&
	try_commit --status &&
	test_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG

HEAD is now at cb3ad9b message
[second 734dfce] message ## Custom template
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
## Custom template
; Changes to be committed:
ok 76 - commit --status with custom comment character

expecting success of 7502.77 'switch core.commentchar': 
	test_commit "#foo" foo &&
	GIT_EDITOR=.git/FAKE_EDITOR git -c core.commentChar=auto commit --amend &&
	test_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG

[second be9bc55] #foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[second c275414] message #foo
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 foo
; Changes to be committed:
ok 77 - switch core.commentchar

expecting success of 7502.78 'switch core.commentchar but out of options': 
	cat >text <<\EOF &&
# 1
; 2
@ 3
! 4
$ 5
% 6
^ 7
& 8
| 9
: 10
EOF
	git commit --amend -F text &&
	(
		test_set_editor .git/FAKE_EDITOR &&
		test_must_fail git -c core.commentChar=auto commit --amend
	)

[second 9f233ef] # 1 ; 2 @ 3 ! 4 $ 5 % 6 ^ 7 & 8 | 9 : 10
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 foo
fatal: unable to select a comment character that is not used
in the current commit message
ok 78 - switch core.commentchar but out of options

# passed all 78 test(s)
1..78
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7507-commit-verbose.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7507-commit-verbose/.git/
expecting success of 7507.1 'setup': 
	echo content >file &&
	git add file &&
	git commit -F message

[master (root-commit) 5621fbe] subject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup

expecting success of 7507.2 'initial commit shows verbose diff': 
	git commit --amend -v &&
	test_line_count = 1 out

[master 5621fbe] subject
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 2 - initial commit shows verbose diff

expecting success of 7507.3 'second commit': 
	echo content modified >file &&
	git add file &&
	git commit -F message

[master aa8777f] subject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 3 - second commit

expecting success of 7507.4 'verbose diff is stripped out': 
	git commit --amend -v &&
	check_message message &&
	test_line_count = 1 out

[master aa8777f] subject
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - verbose diff is stripped out

expecting success of 7507.5 'verbose diff is stripped out (mnemonicprefix)': 
	git config diff.mnemonicprefix true &&
	git commit --amend -v &&
	check_message message &&
	test_line_count = 1 out

[master aa8777f] subject
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 5 - verbose diff is stripped out (mnemonicprefix)

expecting success of 7507.6 'diff in message is retained without -v': 
	git commit --amend -F diff &&
	check_message diff

[master 5165ef5] This is an example commit message that contains a diff.
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - diff in message is retained without -v

expecting success of 7507.7 'diff in message is retained with -v': 
	git commit --amend -F diff -v &&
	check_message diff

[master 5165ef5] This is an example commit message that contains a diff.
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - diff in message is retained with -v

expecting success of 7507.8 'submodule log is stripped out too with -v': 
	git config diff.submodule log &&
	test_config_global protocol.file.allow always &&
	git submodule add ./. sub &&
	git commit -m "sub added" &&
	(
		cd sub &&
		echo "more" >>file &&
		git commit -a -m "submodule commit"
	) &&
	(
		GIT_EDITOR=cat &&
		export GIT_EDITOR &&
		test_must_fail git commit -a -v 2>err
	) &&
	test_i18ngrep "Aborting commit due to empty commit message." err

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7507-commit-verbose/sub'...
done.
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[master 2b9398c] submodule commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Author:    A U Thor <author@example.com>
#
# On branch master
# Changes to be committed:
#	modified:   sub
#
# Untracked files:
#	.gitconfig
#	actual
#	check-for-diff
#	diff
#	err
#	message
#	out
#
# ------------------------ >8 ------------------------
# Do not modify or remove the line above.
# Everything below it will be ignored.
Submodule sub 5165ef5..2b9398c:
  > submodule commit
Aborting commit due to empty commit message.
ok 8 - submodule log is stripped out too with -v

expecting success of 7507.9 'verbose diff is stripped out with set core.commentChar': 
	(
		GIT_EDITOR=cat &&
		export GIT_EDITOR &&
		test_must_fail git -c core.commentchar=";" commit -a -v 2>err
	) &&
	test_i18ngrep "Aborting commit due to empty commit message." err


; Please enter the commit message for your changes. Lines starting
; with ';' will be ignored, and an empty message aborts the commit.
;
; Author:    A U Thor <author@example.com>
;
; On branch master
; Changes to be committed:
;	modified:   sub
;
; Untracked files:
;	.gitconfig
;	actual
;	check-for-diff
;	diff
;	err
;	message
;	out
;
; ------------------------ >8 ------------------------
; Do not modify or remove the line above.
; Everything below it will be ignored.
Submodule sub 5165ef5..2b9398c:
  > submodule commit
Aborting commit due to empty commit message.
ok 9 - verbose diff is stripped out with set core.commentChar

expecting success of 7507.10 'status does not verbose without --verbose': 
	git status >actual &&
	! grep "^diff --git" actual

ok 10 - status does not verbose without --verbose

expecting success of 7507.11 'setup -v -v': 
	echo dirty >file

ok 11 - setup -v -v

expecting success of 7507.12 'commit.verbose=true and --verbose omitted': 
		git -c commit.verbose=true commit --amend &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 12 - commit.verbose=true and --verbose omitted

expecting success of 7507.13 'commit.verbose=1 and --verbose omitted': 
		git -c commit.verbose=1 commit --amend &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 13 - commit.verbose=1 and --verbose omitted

expecting success of 7507.14 'commit.verbose=false and --verbose omitted': 
		git -c commit.verbose=false commit --amend &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 14 - commit.verbose=false and --verbose omitted

expecting success of 7507.15 'commit.verbose=-2 and --verbose omitted': 
		git -c commit.verbose=-2 commit --amend &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 15 - commit.verbose=-2 and --verbose omitted

expecting success of 7507.16 'commit.verbose=-1 and --verbose omitted': 
		git -c commit.verbose=-1 commit --amend &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 16 - commit.verbose=-1 and --verbose omitted

expecting success of 7507.17 'commit.verbose=0 and --verbose omitted': 
		git -c commit.verbose=0 commit --amend &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 17 - commit.verbose=0 and --verbose omitted

expecting success of 7507.18 'commit.verbose=2 and --verbose omitted': 
		git -c commit.verbose=2 commit --amend &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 18 - commit.verbose=2 and --verbose omitted

expecting success of 7507.19 'commit.verbose=3 and --verbose omitted': 
		git -c commit.verbose=3 commit --amend &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 19 - commit.verbose=3 and --verbose omitted

expecting success of 7507.20 'commit.verbose=true and --verbose': 
		git -c commit.verbose=true commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 20 - commit.verbose=true and --verbose

expecting success of 7507.21 'commit.verbose=true and --no-verbose': 
		git -c commit.verbose=true commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 21 - commit.verbose=true and --no-verbose

expecting success of 7507.22 'commit.verbose=true and -v -v': 
		git -c commit.verbose=true commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 22 - commit.verbose=true and -v -v

expecting success of 7507.23 'commit.verbose=false and --verbose': 
		git -c commit.verbose=false commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 23 - commit.verbose=false and --verbose

expecting success of 7507.24 'commit.verbose=false and --no-verbose': 
		git -c commit.verbose=false commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 24 - commit.verbose=false and --no-verbose

expecting success of 7507.25 'commit.verbose=false and -v -v': 
		git -c commit.verbose=false commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 25 - commit.verbose=false and -v -v

expecting success of 7507.26 'commit.verbose=-2 and --verbose': 
		git -c commit.verbose=-2 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 26 - commit.verbose=-2 and --verbose

expecting success of 7507.27 'commit.verbose=-2 and --no-verbose': 
		git -c commit.verbose=-2 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 27 - commit.verbose=-2 and --no-verbose

expecting success of 7507.28 'commit.verbose=-2 and -v -v': 
		git -c commit.verbose=-2 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 28 - commit.verbose=-2 and -v -v

expecting success of 7507.29 'commit.verbose=-1 and --verbose': 
		git -c commit.verbose=-1 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 29 - commit.verbose=-1 and --verbose

expecting success of 7507.30 'commit.verbose=-1 and --no-verbose': 
		git -c commit.verbose=-1 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 30 - commit.verbose=-1 and --no-verbose

expecting success of 7507.31 'commit.verbose=-1 and -v -v': 
		git -c commit.verbose=-1 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 31 - commit.verbose=-1 and -v -v

expecting success of 7507.32 'commit.verbose=0 and --verbose': 
		git -c commit.verbose=0 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 32 - commit.verbose=0 and --verbose

expecting success of 7507.33 'commit.verbose=0 and --no-verbose': 
		git -c commit.verbose=0 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 33 - commit.verbose=0 and --no-verbose

expecting success of 7507.34 'commit.verbose=0 and -v -v': 
		git -c commit.verbose=0 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 34 - commit.verbose=0 and -v -v

expecting success of 7507.35 'commit.verbose=1 and --verbose': 
		git -c commit.verbose=1 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 35 - commit.verbose=1 and --verbose

expecting success of 7507.36 'commit.verbose=1 and --no-verbose': 
		git -c commit.verbose=1 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 36 - commit.verbose=1 and --no-verbose

expecting success of 7507.37 'commit.verbose=1 and -v -v': 
		git -c commit.verbose=1 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 37 - commit.verbose=1 and -v -v

expecting success of 7507.38 'commit.verbose=2 and --verbose': 
		git -c commit.verbose=2 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 38 - commit.verbose=2 and --verbose

expecting success of 7507.39 'commit.verbose=2 and --no-verbose': 
		git -c commit.verbose=2 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 39 - commit.verbose=2 and --no-verbose

expecting success of 7507.40 'commit.verbose=2 and -v -v': 
		git -c commit.verbose=2 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 40 - commit.verbose=2 and -v -v

expecting success of 7507.41 'commit.verbose=3 and --verbose': 
		git -c commit.verbose=3 commit --amend --verbose &&
		test_line_count = 1 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 41 - commit.verbose=3 and --verbose

expecting success of 7507.42 'commit.verbose=3 and --no-verbose': 
		git -c commit.verbose=3 commit --amend --no-verbose &&
		test_line_count = 0 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 42 - commit.verbose=3 and --no-verbose

expecting success of 7507.43 'commit.verbose=3 and -v -v': 
		git -c commit.verbose=3 commit --amend -v -v &&
		test_line_count = 2 out
	
[master 2f750a4] sub added
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 43 - commit.verbose=3 and -v -v

expecting success of 7507.44 'status ignores commit.verbose=true': 
	git -c commit.verbose=true status >actual &&
	! grep "^diff --git actual"

ok 44 - status ignores commit.verbose=true

# passed all 44 test(s)
1..44
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7505-prepare-commit-msg-hook.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7505-prepare-commit-msg-hook/.git/
expecting success of 7505.1 'set up commits for rebasing': 
	test_commit root &&
	test_commit a a a &&
	test_commit b b b &&
	git checkout -b rebase-me root &&
	test_commit rebase-a a aa &&
	test_commit rebase-b b bb &&
	for i in $(test_seq 1 13)
	do
		test_commit rebase-$i c $i || return 1
	done &&
	git checkout main &&

	cat >rebase-todo <<-EOF
	pick $(git rev-parse rebase-a)
	pick $(git rev-parse rebase-b)
	fixup $(git rev-parse rebase-1)
	fixup $(git rev-parse rebase-2)
	pick $(git rev-parse rebase-3)
	fixup $(git rev-parse rebase-4)
	squash $(git rev-parse rebase-5)
	reword $(git rev-parse rebase-6)
	squash $(git rev-parse rebase-7)
	fixup $(git rev-parse rebase-8)
	fixup $(git rev-parse rebase-9)
	edit $(git rev-parse rebase-10)
	squash $(git rev-parse rebase-11)
	squash $(git rev-parse rebase-12)
	edit $(git rev-parse rebase-13)
	EOF

[main (root-commit) dc6f871] root
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 root.t
[main 0cf4349] a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[main e24f16d] b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Switched to a new branch 'rebase-me'
[rebase-me 0391433] rebase-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
[rebase-me 21e9a5f] rebase-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
[rebase-me 9bc7808] rebase-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c
[rebase-me 2bdc1d4] rebase-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 1aecffa] rebase-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 9284a05] rebase-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me e8f1437] rebase-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 111c466] rebase-6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 2238056] rebase-7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 55c53f7] rebase-8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 7ad5821] rebase-9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 58c3130] rebase-10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 2f28a77] rebase-11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 6339e66] rebase-12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase-me 8f82bdf] rebase-13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 1 - set up commits for rebasing

expecting success of 7505.2 'with no hook': 

	echo "foo" > file &&
	git add file &&
	git commit -m "first"


[main 1f7238d] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 2 - with no hook

expecting success of 7505.3 'setup fake editor for interactive editing': 
	write_script fake-editor <<-\EOF &&
	exit 0
	EOF

	## Not using test_set_editor here so we can easily ensure the editor variable
	## is only set for the editor tests
	FAKE_EDITOR="$(pwd)/fake-editor" &&
	export FAKE_EDITOR

ok 3 - setup fake editor for interactive editing

expecting success of 7505.4 'setup prepare-commit-msg hook': 
	test_hook --setup prepare-commit-msg <<\EOF
GIT_DIR=$(git rev-parse --git-dir)
if test -d "$GIT_DIR/rebase-merge"
then
	rebasing=1
else
	rebasing=0
fi

get_last_cmd () {
	tail -n1 "$GIT_DIR/rebase-merge/done" | {
		read cmd id _
		git log --pretty="[$cmd %s]" -n1 $id
	}
}

if test "$2" = commit
then
	if test $rebasing = 1
	then
		source="$3"
	else
		source=$(git rev-parse "$3")
	fi
else
	source=${2-default}
fi
test "$GIT_EDITOR" = : && source="$source (no editor)"

if test $rebasing = 1
then
	echo "$source $(get_last_cmd)" >"$1"
else
	sed -e "1s/.*/$source/" "$1" >msg.tmp
	mv msg.tmp "$1"
fi
exit 0
EOF

ok 4 - setup prepare-commit-msg hook

expecting success of 7505.5 'with hook (-m)': 

	echo "more" >> file &&
	git add file &&
	git commit -m "more" &&
	test "$(git log -1 --pretty=format:%s)" = "message (no editor)"


[main 3484e6e] message (no editor)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 5 - with hook (-m)

expecting success of 7505.6 'with hook (-m editor)': 

	echo "more" >> file &&
	git add file &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -e -m "more more" &&
	test "$(git log -1 --pretty=format:%s)" = message


[main 2a0b963] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 6 - with hook (-m editor)

expecting success of 7505.7 'with hook (-t)': 

	echo "more" >> file &&
	git add file &&
	git commit -t "$(git rev-parse --git-dir)/template" &&
	test "$(git log -1 --pretty=format:%s)" = template


[main f42c353] template
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 7 - with hook (-t)

expecting success of 7505.8 'with hook (-F)': 

	echo "more" >> file &&
	git add file &&
	(echo more | git commit -F -) &&
	test "$(git log -1 --pretty=format:%s)" = "message (no editor)"


[main b41531e] message (no editor)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 8 - with hook (-F)

expecting success of 7505.9 'with hook (-F editor)': 

	echo "more" >> file &&
	git add file &&
	(echo more more | GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -e -F -) &&
	test "$(git log -1 --pretty=format:%s)" = message


[main d73cd02] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 9 - with hook (-F editor)

expecting success of 7505.10 'with hook (-C)': 

	head=$(git rev-parse HEAD) &&
	echo "more" >> file &&
	git add file &&
	git commit -C $head &&
	test "$(git log -1 --pretty=format:%s)" = "$head (no editor)"


[main b4108db] d73cd02f48887fc07727596c4670b88c78bd0dc1 (no editor)
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 10 - with hook (-C)

expecting success of 7505.11 'with hook (editor)': 

	echo "more more" >> file &&
	git add file &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
	test "$(git log -1 --pretty=format:%s)" = default


[main 23ea42a] default
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 11 - with hook (editor)

expecting success of 7505.12 'with hook (--amend)': 

	head=$(git rev-parse HEAD) &&
	echo "more" >> file &&
	git add file &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --amend &&
	test "$(git log -1 --pretty=format:%s)" = "$head"


[main 145405a] 23ea42a596f1c37e87d80762ba2516f619fea230
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 1 file changed, 2 insertions(+)
ok 12 - with hook (--amend)

expecting success of 7505.13 'with hook (-c)': 

	head=$(git rev-parse HEAD) &&
	echo "more" >> file &&
	git add file &&
	GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -c $head &&
	test "$(git log -1 --pretty=format:%s)" = "$head"


[main a3af052] 145405a29530e37af3d6f413fa50ea2e361258ce
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 13 - with hook (-c)

expecting success of 7505.14 'with hook (merge)': 

	test_when_finished "git checkout -f main" &&
	git checkout -B other HEAD@{1} &&
	echo "more" >>file &&
	git add file &&
	git commit -m other &&
	git checkout - &&
	git merge --no-ff other &&
	test "$(git log -1 --pretty=format:%s)" = "merge (no editor)"

Switched to a new branch 'other'
[other 0b0ee29] message (no editor)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Merge made by the 'ort' strategy.
Already on 'main'
ok 14 - with hook (merge)

expecting success of 7505.15 'with hook and editor (merge)': 

	test_when_finished "git checkout -f main" &&
	git checkout -B other HEAD@{1} &&
	echo "more" >>file &&
	git add file &&
	git commit -m other &&
	git checkout - &&
	env GIT_EDITOR="\"\$FAKE_EDITOR\"" git merge --no-ff -e other &&
	test "$(git log -1 --pretty=format:%s)" = "merge"

Switched to and reset branch 'other'
[other 84ca9e8] message (no editor)
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Merge made by the 'ort' strategy.
 file | 1 +
 1 file changed, 1 insertion(+)
Already on 'main'
ok 15 - with hook and editor (merge)

expecting success of 7505.16 'with hook (rebase -i)': 
		test_when_finished "\
			git rebase --abort
			git checkout -f main
			git branch -D tmp" &&
		git checkout -b tmp rebase-me &&
		GIT_SEQUENCE_EDITOR="cp rebase-todo" &&
		GIT_EDITOR="\"$FAKE_EDITOR\"" &&
		(
			export GIT_SEQUENCE_EDITOR GIT_EDITOR &&
			test_must_fail git rebase -i $mode b &&
			echo x >a &&
			git add a &&
			test_must_fail git rebase --continue &&
			echo x >b &&
			git add b &&
			git commit &&
			git rebase --continue &&
			echo y >a &&
			git add a &&
			git commit &&
			git rebase --continue &&
			echo y >b &&
			git add b &&
			git rebase --continue
		) &&
		git log --pretty=%s -g -n18 HEAD@{1} >actual &&
		test_cmp "$TEST_DIRECTORY/t7505/expected-rebase${mode:--i}" actual
	
Switched to a new branch 'tmp'
Rebasing (1/15)
Auto-merging a
CONFLICT (add/add): Merge conflict in a
error: could not apply 0391433... rebase-a
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 0391433... 
[detached HEAD f04682c] message [pick rebase-a]
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/15)
Auto-merging b
CONFLICT (add/add): Merge conflict in b
error: could not apply 21e9a5f... rebase-b
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 21e9a5f... 
[detached HEAD fc19041] merge [pick rebase-b]
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (3/15)
Rebasing (4/15)
Rebasing (5/15)
Rebasing (6/15)
Rebasing (7/15)
[detached HEAD 597943f] message [squash rebase-5]
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (8/15)
[detached HEAD 62a0091] HEAD [reword rebase-6]
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (9/15)
Rebasing (10/15)
Rebasing (11/15)
[detached HEAD 332415b] message [fixup rebase-9]
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:23:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (12/15)

                                                                                
Stopped at 58c3130...  
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 6a3b292] default [edit rebase-10]
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (13/15)
Rebasing (14/15)
[detached HEAD c6c0051] message [squash rebase-12]
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 2 files changed, 2 insertions(+), 2 deletions(-)
Rebasing (15/15)

                                                                                
Stopped at 8f82bdf...  
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 8bcb406] message [edit rebase-13]
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:30:13 2005 -0700
 2 files changed, 2 insertions(+), 2 deletions(-)

                                                                                
Successfully rebased and updated refs/heads/tmp.
fatal: No rebase in progress?
Switched to branch 'main'
Deleted branch tmp (was 8bcb406).
ok 16 - with hook (rebase -i)

expecting success of 7505.17 'with hook (cherry-pick)': 
	test_when_finished "git checkout -f main" &&
	git checkout -B other b &&
	git cherry-pick rebase-1 &&
	test "$(git log -1 --pretty=format:%s)" = "message (no editor)"

Switched to and reset branch 'other'
[other 755fb84] message (no editor)
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 c
Switched to branch 'main'
ok 17 - with hook (cherry-pick)

expecting success of 7505.18 'with hook and editor (cherry-pick)': 
	test_when_finished "git checkout -f main" &&
	git checkout -B other b &&
	git cherry-pick -e rebase-1 &&
	test "$(git log -1 --pretty=format:%s)" = merge

Switched to and reset branch 'other'
[other 611267b] merge
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 c
Switched to branch 'main'
ok 18 - with hook and editor (cherry-pick)

expecting success of 7505.19 'setup: commit-msg hook that always fails': 
	test_hook --setup --clobber prepare-commit-msg <<-\EOF
	exit 1
	EOF

ok 19 - setup: commit-msg hook that always fails

expecting success of 7505.20 'with failing hook': 

	test_when_finished "git checkout -f main" &&
	head=$(git rev-parse HEAD) &&
	echo "more" >> file &&
	git add file &&
	test_must_fail env GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -c $head


Already on 'main'
ok 20 - with failing hook

expecting success of 7505.21 'with failing hook (--no-verify)': 

	test_when_finished "git checkout -f main" &&
	head=$(git rev-parse HEAD) &&
	echo "more" >> file &&
	git add file &&
	test_must_fail env GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify -c $head


Already on 'main'
ok 21 - with failing hook (--no-verify)

expecting success of 7505.22 'with failing hook (merge)': 

	test_when_finished "git checkout -f main" &&
	git checkout -B other HEAD@{1} &&
	echo "more" >> file &&
	git add file &&
	test_hook --remove prepare-commit-msg &&
	git commit -m other &&
	test_hook --setup prepare-commit-msg <<-\EOF &&
	exit 1
	EOF
	git checkout - &&
	test_must_fail git merge --no-ff other


Switched to and reset branch 'other'
[other 056e6c0] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Not committing merge; use 'git commit' to complete the merge.
Already on 'main'
ok 22 - with failing hook (merge)

expecting success of 7505.23 'with failing hook (cherry-pick)': 
	test_when_finished "git checkout -f main" &&
	git checkout -B other b &&
	test_must_fail git cherry-pick rebase-1 2>actual &&
	test $(grep -c prepare-commit-msg actual) = 1

Switched to and reset branch 'other'
Switched to branch 'main'
warning: cancelling a cherry picking in progress
ok 23 - with failing hook (cherry-pick)

# passed all 23 test(s)
1..23
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7506-status-submodule.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/.git/
expecting success of 7506.1 'setup': 
	test_create_repo_with_commit sub &&
	echo output > .gitignore &&
	git add sub .gitignore &&
	git commit -m "Add submodule sub"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/sub/.git/
[master (root-commit) 5dffd93]  Add bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
[master 3b5520a]  Add foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
warning: adding embedded git repository: sub
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sub
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sub
hint: 
hint: See "git help submodule" for more information.
[master (root-commit) b687689] Add submodule sub
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 160000 sub
ok 1 - setup

expecting success of 7506.2 'status clean': 
	git status >output &&
	test_i18ngrep "nothing to commit" output

nothing to commit, working tree clean
ok 2 - status clean

expecting success of 7506.3 'commit --dry-run -a clean': 
	test_must_fail git commit --dry-run -a >output &&
	test_i18ngrep "nothing to commit" output

nothing to commit, working tree clean
ok 3 - commit --dry-run -a clean

expecting success of 7506.4 'status with modified file in submodule': 
	(cd sub && git reset --hard) &&
	echo "changed" >sub/foo &&
	git status >output &&
	test_i18ngrep "modified:   sub (modified content)" output

HEAD is now at 3b5520a  Add foo
	modified:   sub (modified content)
ok 4 - status with modified file in submodule

expecting success of 7506.5 'status with modified file in submodule (porcelain)': 
	(cd sub && git reset --hard) &&
	echo "changed" >sub/foo &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at 3b5520a  Add foo
ok 5 - status with modified file in submodule (porcelain)

expecting success of 7506.6 'status with modified file in submodule (short)': 
	(cd sub && git reset --hard) &&
	echo "changed" >sub/foo &&
	git status --short >output &&
	diff output - <<-\EOF
	 m sub
	EOF

HEAD is now at 3b5520a  Add foo
ok 6 - status with modified file in submodule (short)

expecting success of 7506.7 'status with added file in submodule': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status >output &&
	test_i18ngrep "modified:   sub (modified content)" output

HEAD is now at 3b5520a  Add foo
	modified:   sub (modified content)
ok 7 - status with added file in submodule

expecting success of 7506.8 'status with added file in submodule (porcelain)': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at 3b5520a  Add foo
ok 8 - status with added file in submodule (porcelain)

expecting success of 7506.9 'status with added file in submodule (short)': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status --short >output &&
	diff output - <<-\EOF
	 m sub
	EOF

HEAD is now at 3b5520a  Add foo
ok 9 - status with added file in submodule (short)

expecting success of 7506.10 'status with untracked file in submodule': 
	(cd sub && git reset --hard) &&
	echo "content" >sub/new-file &&
	git status >output &&
	test_i18ngrep "modified:   sub (untracked content)" output

HEAD is now at 3b5520a  Add foo
	modified:   sub (untracked content)
ok 10 - status with untracked file in submodule

expecting success of 7506.11 'status -uno with untracked file in submodule': 
	git status -uno >output &&
	test_i18ngrep "^nothing to commit" output

nothing to commit (use -u to show untracked files)
ok 11 - status -uno with untracked file in submodule

expecting success of 7506.12 'status with untracked file in submodule (porcelain)': 
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

ok 12 - status with untracked file in submodule (porcelain)

expecting success of 7506.13 'status with untracked file in submodule (short)': 
	git status --short >output &&
	diff output - <<-\EOF
	 ? sub
	EOF

ok 13 - status with untracked file in submodule (short)

expecting success of 7506.14 'status with added and untracked file in submodule': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	echo "content" >sub/new-file &&
	git status >output &&
	test_i18ngrep "modified:   sub (modified content, untracked content)" output

HEAD is now at 3b5520a  Add foo
	modified:   sub (modified content, untracked content)
ok 14 - status with added and untracked file in submodule

expecting success of 7506.15 'status with added and untracked file in submodule (porcelain)': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	echo "content" >sub/new-file &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at 3b5520a  Add foo
ok 15 - status with added and untracked file in submodule (porcelain)

expecting success of 7506.16 'status with modified file in modified submodule': 
	(cd sub && git reset --hard) &&
	rm sub/new-file &&
	(cd sub && echo "next change" >foo && git commit -m "next change" foo) &&
	echo "changed" >sub/foo &&
	git status >output &&
	test_i18ngrep "modified:   sub (new commits, modified content)" output

HEAD is now at 3b5520a  Add foo
[master f86d50b] next change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
	modified:   sub (new commits, modified content)
ok 16 - status with modified file in modified submodule

expecting success of 7506.17 'status with modified file in modified submodule (porcelain)': 
	(cd sub && git reset --hard) &&
	echo "changed" >sub/foo &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at f86d50b next change
ok 17 - status with modified file in modified submodule (porcelain)

expecting success of 7506.18 'status with added file in modified submodule': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status >output &&
	test_i18ngrep "modified:   sub (new commits, modified content)" output

HEAD is now at f86d50b next change
	modified:   sub (new commits, modified content)
ok 18 - status with added file in modified submodule

expecting success of 7506.19 'status with added file in modified submodule (porcelain)': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at f86d50b next change
ok 19 - status with added file in modified submodule (porcelain)

expecting success of 7506.20 'status with untracked file in modified submodule': 
	(cd sub && git reset --hard) &&
	echo "content" >sub/new-file &&
	git status >output &&
	test_i18ngrep "modified:   sub (new commits, untracked content)" output

HEAD is now at f86d50b next change
	modified:   sub (new commits, untracked content)
ok 20 - status with untracked file in modified submodule

expecting success of 7506.21 'status with untracked file in modified submodule (porcelain)': 
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

ok 21 - status with untracked file in modified submodule (porcelain)

expecting success of 7506.22 'status with added and untracked file in modified submodule': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	echo "content" >sub/new-file &&
	git status >output &&
	test_i18ngrep "modified:   sub (new commits, modified content, untracked content)" output

HEAD is now at f86d50b next change
	modified:   sub (new commits, modified content, untracked content)
ok 22 - status with added and untracked file in modified submodule

expecting success of 7506.23 'status with added and untracked file in modified submodule (porcelain)': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	echo "content" >sub/new-file &&
	git status --porcelain >output &&
	diff output - <<-\EOF
	 M sub
	EOF

HEAD is now at f86d50b next change
ok 23 - status with added and untracked file in modified submodule (porcelain)

expecting success of 7506.24 'setup .git file for sub': 
	(cd sub &&
	 rm -f new-file &&
	 REAL="$(pwd)/../.real" &&
	 mv .git "$REAL" &&
	 echo "gitdir: $REAL" >.git) &&
	 echo .real >>.gitignore &&
	 git commit -m "added .real to .gitignore" .gitignore

[master 0444747] added .real to .gitignore
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 24 - setup .git file for sub

expecting success of 7506.25 'status with added file in modified submodule with .git file': 
	(cd sub && git reset --hard && echo >foo && git add foo) &&
	git status >output &&
	test_i18ngrep "modified:   sub (new commits, modified content)" output

HEAD is now at f86d50b next change
	modified:   sub (new commits, modified content)
ok 25 - status with added file in modified submodule with .git file

expecting success of 7506.26 'status with a lot of untracked files in the submodule': 
	(
		cd sub &&
		i=0 &&
		while test $i -lt 1024
		do
			>some-file-$i &&
			i=$(( $i + 1 )) || exit 1
		done
	) &&
	git status --porcelain sub 2>err.actual &&
	test_must_be_empty err.actual &&
	rm err.actual

 M sub
ok 26 - status with a lot of untracked files in the submodule

expecting success of 7506.27 'rm submodule contents': 
	rm -rf sub &&
	mkdir sub

ok 27 - rm submodule contents

expecting success of 7506.28 'status clean (empty submodule dir)': 
	git status >output &&
	test_i18ngrep "nothing to commit" output

nothing to commit, working tree clean
ok 28 - status clean (empty submodule dir)

expecting success of 7506.29 'status -a clean (empty submodule dir)': 
	test_must_fail git commit --dry-run -a >output &&
	test_i18ngrep "nothing to commit" output

nothing to commit, working tree clean
ok 29 - status -a clean (empty submodule dir)

expecting success of 7506.30 'status with merge conflict in .gitmodules': 
	git clone . super &&
	test_create_repo_with_commit sub1 &&
	test_tick &&
	test_create_repo_with_commit sub2 &&
	test_config_global protocol.file.allow always &&
	(
		cd super &&
		prev=$(git rev-parse HEAD) &&
		git checkout -b add_sub1 &&
		git submodule add ../sub1 &&
		git commit -m "add sub1" &&
		git checkout -b add_sub2 $prev &&
		git submodule add ../sub2 &&
		git commit -m "add sub2" &&
		git checkout -b merge_conflict_gitmodules &&
		test_must_fail git merge add_sub1 &&
		git status -s >../status_actual 2>&1
	) &&
	test_cmp status_actual status_expect

Cloning into 'super'...
done.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/sub1/.git/
[master (root-commit) 5dffd93]  Add bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
[master 3b5520a]  Add foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/sub2/.git/
[master (root-commit) f4dd8ee]  Add bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
[master 0c53b86]  Add foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
Switched to a new branch 'add_sub1'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/super/sub1'...
done.
[add_sub1 7faba24] add sub1
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub1
warning: unable to rmdir 'sub1': Directory not empty
Switched to a new branch 'add_sub2'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/super/sub2'...
done.
[add_sub2 b4b6be0] add sub2
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
Switched to a new branch 'merge_conflict_gitmodules'
Auto-merging .gitmodules
CONFLICT (add/add): Merge conflict in .gitmodules
Automatic merge failed; fix conflicts and then commit the result.
ok 30 - status with merge conflict in .gitmodules

expecting success of 7506.31 'diff with merge conflict in .gitmodules': 
	(
		cd super &&
		git diff >../diff_actual 2>&1
	) &&
	sanitize_diff diff_actual >diff_sanitized &&
	test_cmp diff_expect diff_sanitized

ok 31 - diff with merge conflict in .gitmodules

expecting success of 7506.32 'diff --submodule with merge conflict in .gitmodules': 
	(
		cd super &&
		git diff --submodule >../diff_submodule_actual 2>&1
	) &&
	sanitize_diff diff_submodule_actual >diff_sanitized &&
	test_cmp diff_submodule_expect diff_sanitized

ok 32 - diff --submodule with merge conflict in .gitmodules

expecting success of 7506.33 'setup superproject with untracked file in nested submodule': 
	test_config_global protocol.file.allow always &&
	(
		cd super &&
		git clean -dfx &&
		git rm .gitmodules &&
		git commit -m "remove .gitmodules" &&
		git submodule add -f ./sub1 &&
		git submodule add -f ./sub2 &&
		git submodule add -f ./sub1 sub3 &&
		git commit -a -m "messy merge in superproject" &&
		(
			cd sub1 &&
			git submodule add ../sub2 &&
			git commit -a -m "add sub2 to sub1"
		) &&
		git add sub1 &&
		git commit -a -m "update sub1 to contain nested sub"
	) &&
	echo content >super/sub1/sub2/file &&
	echo content >super/sub2/file &&
	git -C super/sub3 clone ../../sub2 untracked_repository

rm '.gitmodules'
[merge_conflict_gitmodules 13fb2a3] remove .gitmodules
 Author: A U Thor <author@example.com>
Adding existing repo at 'sub1' to the index
Adding existing repo at 'sub2' to the index
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/super/sub3'...
done.
[merge_conflict_gitmodules cbf5b44] messy merge in superproject
 Author: A U Thor <author@example.com>
 2 files changed, 10 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub3
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7506-status-submodule/super/sub1/sub2'...
done.
[master 3f03b6e] add sub2 to sub1
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub2
[merge_conflict_gitmodules 7b9e69d] update sub1 to contain nested sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'untracked_repository'...
done.
ok 33 - setup superproject with untracked file in nested submodule

expecting success of 7506.34 'status with untracked file in nested submodule (porcelain)': 
	git -C super status --porcelain >output &&
	diff output - <<-\EOF
	 M sub1
	 M sub2
	 M sub3
	EOF

ok 34 - status with untracked file in nested submodule (porcelain)

expecting success of 7506.35 'status with untracked file in nested submodule (porcelain=2)': 
	git -C super status --porcelain=2 >output &&
	sanitize_output output &&
	diff output - <<-\EOF
	1 .M S..U 160000 160000 160000 HASH HASH sub1
	1 .M S..U 160000 160000 160000 HASH HASH sub2
	1 .M S..U 160000 160000 160000 HASH HASH sub3
	EOF

ok 35 - status with untracked file in nested submodule (porcelain=2)

expecting success of 7506.36 'status with untracked file in nested submodule (short)': 
	git -C super status --short >output &&
	diff output - <<-\EOF
	 ? sub1
	 ? sub2
	 ? sub3
	EOF

ok 36 - status with untracked file in nested submodule (short)

expecting success of 7506.37 'setup superproject with modified file in nested submodule': 
	git -C super/sub1/sub2 add file &&
	git -C super/sub2 add file

ok 37 - setup superproject with modified file in nested submodule

expecting success of 7506.38 'status with added file in nested submodule (porcelain)': 
	git -C super status --porcelain >output &&
	diff output - <<-\EOF
	 M sub1
	 M sub2
	 M sub3
	EOF

ok 38 - status with added file in nested submodule (porcelain)

expecting success of 7506.39 'status with added file in nested submodule (porcelain=2)': 
	git -C super status --porcelain=2 >output &&
	sanitize_output output &&
	diff output - <<-\EOF
	1 .M S.M. 160000 160000 160000 HASH HASH sub1
	1 .M S.M. 160000 160000 160000 HASH HASH sub2
	1 .M S..U 160000 160000 160000 HASH HASH sub3
	EOF

ok 39 - status with added file in nested submodule (porcelain=2)

expecting success of 7506.40 'status with added file in nested submodule (short)': 
	git -C super status --short >output &&
	diff output - <<-\EOF
	 m sub1
	 m sub2
	 ? sub3
	EOF

ok 40 - status with added file in nested submodule (short)

# passed all 40 test(s)
1..40
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7509-commit-authorship.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7509-commit-authorship/.git/
expecting success of 7509.1 '-C option copies authorship and message': 
	test_commit --author Frigate\ \<flying@over.world\> \
		"Initial Commit" foo Initial Initial &&
	echo "Test 1" >>foo &&
	test_tick &&
	git commit -a -C Initial &&
	author_header Initial >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	message_body Initial >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

[master (root-commit) 6c1fd11] Initial Commit
 Author: Frigate <flying@over.world>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[master 19b40bf] Initial Commit
 Author: Frigate <flying@over.world>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 1 - -C option copies authorship and message

expecting success of 7509.2 '-C option copies only the message with --reset-author': 
	echo "Test 2" >>foo &&
	test_tick &&
	git commit -a -C Initial --reset-author &&
	echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	message_body Initial >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

[master 0381fd2] Initial Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - -C option copies only the message with --reset-author

expecting success of 7509.3 '-c option copies authorship and message': 
	echo "Test 3" >>foo &&
	test_tick &&
	EDITOR=: VISUAL=: git commit -a -c Initial &&
	author_header Initial >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual

[master fef56eb] Initial Commit
 Author: Frigate <flying@over.world>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 3 - -c option copies authorship and message

expecting success of 7509.4 '-c option copies only the message with --reset-author': 
	echo "Test 4" >>foo &&
	test_tick &&
	EDITOR=: VISUAL=: git commit -a -c Initial --reset-author &&
	echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	message_body Initial >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

[master d241f1c] Initial Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 4 - -c option copies only the message with --reset-author

expecting success of 7509.5 '--amend option copies authorship': 
	git checkout Initial &&
	echo "Test 5" >>foo &&
	test_tick &&
	git commit -a --amend -m "amend test" &&
	author_header Initial >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	echo "amend test" >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

Note: switching to 'Initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 6c1fd11 Initial Commit
[detached HEAD 7318ebc] amend test
 Author: Frigate <flying@over.world>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 2 insertions(+)
 create mode 100644 foo
ok 5 - --amend option copies authorship

expecting success of 7509.6 '--amend option with empty author': 
	git cat-file commit Initial >tmp &&
	sed "s/author [^<]* </author  </" tmp >empty-author &&
	sha=$(git hash-object -t commit -w empty-author) &&
	test_when_finished "remove_object $sha" &&
	git checkout $sha &&
	test_when_finished "git checkout Initial" &&
	echo "Empty author test" >>foo &&
	test_tick &&
	test_must_fail git commit -a -m "empty author" --amend 2>err &&
	test_i18ngrep "empty ident" err

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  7318ebc amend test

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 7318ebc

HEAD is now at 488af46 Initial Commit
fatal: empty ident name (for <flying@over.world>) not allowed
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  488af46 Initial Commit

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 488af46

HEAD is now at 6c1fd11 Initial Commit
M	foo
ok 6 - --amend option with empty author

expecting success of 7509.7 '--amend option with missing author': 
	git cat-file commit Initial >tmp &&
	sed "s/author [^<]* </author </" tmp >malformed &&
	sha=$(git hash-object -t commit -w malformed) &&
	test_when_finished "remove_object $sha" &&
	git checkout $sha &&
	test_when_finished "git checkout Initial" &&
	echo "Missing author test" >>foo &&
	test_tick &&
	test_must_fail git commit -a -m "malformed author" --amend 2>err &&
	test_i18ngrep "empty ident" err

Previous HEAD position was 6c1fd11 Initial Commit
HEAD is now at 1dcf28c Initial Commit
M	foo
fatal: empty ident name (for <flying@over.world>) not allowed
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  1dcf28c Initial Commit

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 1dcf28c

HEAD is now at 6c1fd11 Initial Commit
M	foo
ok 7 - --amend option with missing author

expecting success of 7509.8 '--reset-author makes the commit ours even with --amend option': 
	git checkout Initial &&
	echo "Test 6" >>foo &&
	test_tick &&
	git commit -a --reset-author -m "Changed again" --amend &&
	echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	echo "Changed again" >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

HEAD is now at 6c1fd11 Initial Commit
M	foo
[detached HEAD 16b5be6] Changed again
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 foo
ok 8 - --reset-author makes the commit ours even with --amend option

expecting success of 7509.9 '--reset-author and --author are mutually exclusive': 
	git checkout Initial &&
	echo "Test 7" >>foo &&
	test_tick &&
	test_must_fail git commit -a --reset-author --author="Xyzzy <frotz@nitfol.xz>"

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  16b5be6 Changed again

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 16b5be6

HEAD is now at 6c1fd11 Initial Commit
fatal: options '--reset-author' and '--author' cannot be used together
ok 9 - --reset-author and --author are mutually exclusive

expecting success of 7509.10 '--reset-author should be rejected without -c/-C/--amend': 
	git checkout Initial &&
	echo "Test 7" >>foo &&
	test_tick &&
	test_must_fail git commit -a --reset-author -m done

HEAD is now at 6c1fd11 Initial Commit
M	foo
fatal: --reset-author can be used only with -C, -c or --amend.
ok 10 - --reset-author should be rejected without -c/-C/--amend

expecting success of 7509.11 'commit respects CHERRY_PICK_HEAD and MERGE_MSG': 
	echo "cherry-pick 1a" >>foo &&
	test_tick &&
	git commit -am "cherry-pick 1" --author="Cherry <cherry@pick.er>" &&
	git tag cherry-pick-head &&
	git update-ref CHERRY_PICK_HEAD $(git rev-parse cherry-pick-head) &&
	echo "This is a MERGE_MSG" >.git/MERGE_MSG &&
	echo "cherry-pick 1b" >>foo &&
	test_tick &&
	git commit -a &&
	author_header cherry-pick-head >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual &&

	echo "This is a MERGE_MSG" >expect &&
	message_body HEAD >actual &&
	test_cmp expect actual

[detached HEAD 7db2008] cherry-pick 1
 Author: Cherry <cherry@pick.er>
 1 file changed, 3 insertions(+)
[detached HEAD b9f2fd6] This is a MERGE_MSG
 Author: Cherry <cherry@pick.er>
 Date: Thu Apr 7 15:24:13 2005 -0700
 1 file changed, 1 insertion(+)
ok 11 - commit respects CHERRY_PICK_HEAD and MERGE_MSG

expecting success of 7509.12 '--reset-author with CHERRY_PICK_HEAD': 
	git update-ref CHERRY_PICK_HEAD $(git rev-parse cherry-pick-head) &&
	echo "cherry-pick 2" >>foo &&
	test_tick &&
	git commit -am "cherry-pick 2" --reset-author &&
	echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
	author_header HEAD >actual &&
	test_cmp expect actual

[detached HEAD 9a09dbe] cherry-pick 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 12 - --reset-author with CHERRY_PICK_HEAD

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7511-status-index.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7511-status-index/.git/
expecting success of 7511.1 'status, filename length 1': 
		git add * &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   0
	new file:   1
	new file:   2
	new file:   3
	new file:   4
	new file:   5
	new file:   6
	new file:   7
	new file:   8
	new file:   9
	new file:   a
	new file:   b
	new file:   c
	new file:   d
	new file:   e
	new file:   f
	new file:   g
	new file:   h
	new file:   i
	new file:   j
	new file:   k
	new file:   l
	new file:   m
	new file:   n
	new file:   o
	new file:   p
	new file:   q
	new file:   r
	new file:   s
	new file:   t
	new file:   u
	new file:   v
	new file:   w
	new file:   x
	new file:   y
	new file:   z

ok 1 - status, filename length 1

expecting success of 7511.2 'status, filename length 2': 
		git add p* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   p0
	new file:   p1
	new file:   p2
	new file:   p3
	new file:   p4
	new file:   p5
	new file:   p6
	new file:   p7
	new file:   p8
	new file:   p9
	new file:   pa
	new file:   pb
	new file:   pc
	new file:   pd
	new file:   pe
	new file:   pf
	new file:   pg
	new file:   ph
	new file:   pi
	new file:   pj
	new file:   pk
	new file:   pl
	new file:   pm
	new file:   pn
	new file:   po
	new file:   pp
	new file:   pq
	new file:   pr
	new file:   ps
	new file:   pt
	new file:   pu
	new file:   pv
	new file:   pw
	new file:   px
	new file:   py
	new file:   pz

ok 2 - status, filename length 2

expecting success of 7511.3 'status, filename length 3': 
		git add px* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   px0
	new file:   px1
	new file:   px2
	new file:   px3
	new file:   px4
	new file:   px5
	new file:   px6
	new file:   px7
	new file:   px8
	new file:   px9
	new file:   pxa
	new file:   pxb
	new file:   pxc
	new file:   pxd
	new file:   pxe
	new file:   pxf
	new file:   pxg
	new file:   pxh
	new file:   pxi
	new file:   pxj
	new file:   pxk
	new file:   pxl
	new file:   pxm
	new file:   pxn
	new file:   pxo
	new file:   pxp
	new file:   pxq
	new file:   pxr
	new file:   pxs
	new file:   pxt
	new file:   pxu
	new file:   pxv
	new file:   pxw
	new file:   pxx
	new file:   pxy
	new file:   pxz

ok 3 - status, filename length 3

expecting success of 7511.4 'status, filename length 4': 
		git add pre* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   pre0
	new file:   pre1
	new file:   pre2
	new file:   pre3
	new file:   pre4
	new file:   pre5
	new file:   pre6
	new file:   pre7
	new file:   pre8
	new file:   pre9
	new file:   prea
	new file:   preb
	new file:   prec
	new file:   pred
	new file:   pree
	new file:   pref
	new file:   preg
	new file:   preh
	new file:   prei
	new file:   prej
	new file:   prek
	new file:   prel
	new file:   prem
	new file:   pren
	new file:   preo
	new file:   prep
	new file:   preq
	new file:   prer
	new file:   pres
	new file:   pret
	new file:   preu
	new file:   prev
	new file:   prew
	new file:   prex
	new file:   prey
	new file:   prez

ok 4 - status, filename length 4

expecting success of 7511.5 'status, filename length 5': 
		git add pref* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   pref0
	new file:   pref1
	new file:   pref2
	new file:   pref3
	new file:   pref4
	new file:   pref5
	new file:   pref6
	new file:   pref7
	new file:   pref8
	new file:   pref9
	new file:   prefa
	new file:   prefb
	new file:   prefc
	new file:   prefd
	new file:   prefe
	new file:   preff
	new file:   prefg
	new file:   prefh
	new file:   prefi
	new file:   prefj
	new file:   prefk
	new file:   prefl
	new file:   prefm
	new file:   prefn
	new file:   prefo
	new file:   prefp
	new file:   prefq
	new file:   prefr
	new file:   prefs
	new file:   preft
	new file:   prefu
	new file:   prefv
	new file:   prefw
	new file:   prefx
	new file:   prefy
	new file:   prefz

ok 5 - status, filename length 5

expecting success of 7511.6 'status, filename length 6': 
		git add prefi* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefi0
	new file:   prefi1
	new file:   prefi2
	new file:   prefi3
	new file:   prefi4
	new file:   prefi5
	new file:   prefi6
	new file:   prefi7
	new file:   prefi8
	new file:   prefi9
	new file:   prefia
	new file:   prefib
	new file:   prefic
	new file:   prefid
	new file:   prefie
	new file:   prefif
	new file:   prefig
	new file:   prefih
	new file:   prefii
	new file:   prefij
	new file:   prefik
	new file:   prefil
	new file:   prefim
	new file:   prefin
	new file:   prefio
	new file:   prefip
	new file:   prefiq
	new file:   prefir
	new file:   prefis
	new file:   prefit
	new file:   prefiu
	new file:   prefiv
	new file:   prefiw
	new file:   prefix
	new file:   prefiy
	new file:   prefiz

ok 6 - status, filename length 6

expecting success of 7511.7 'status, filename length 7': 
		git add prefix* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix0
	new file:   prefix1
	new file:   prefix2
	new file:   prefix3
	new file:   prefix4
	new file:   prefix5
	new file:   prefix6
	new file:   prefix7
	new file:   prefix8
	new file:   prefix9
	new file:   prefixa
	new file:   prefixb
	new file:   prefixc
	new file:   prefixd
	new file:   prefixe
	new file:   prefixf
	new file:   prefixg
	new file:   prefixh
	new file:   prefixi
	new file:   prefixj
	new file:   prefixk
	new file:   prefixl
	new file:   prefixm
	new file:   prefixn
	new file:   prefixo
	new file:   prefixp
	new file:   prefixq
	new file:   prefixr
	new file:   prefixs
	new file:   prefixt
	new file:   prefixu
	new file:   prefixv
	new file:   prefixw
	new file:   prefixx
	new file:   prefixy
	new file:   prefixz

ok 7 - status, filename length 7

expecting success of 7511.8 'status, filename length 8': 
		git add prefix-* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-0
	new file:   prefix-1
	new file:   prefix-2
	new file:   prefix-3
	new file:   prefix-4
	new file:   prefix-5
	new file:   prefix-6
	new file:   prefix-7
	new file:   prefix-8
	new file:   prefix-9
	new file:   prefix-a
	new file:   prefix-b
	new file:   prefix-c
	new file:   prefix-d
	new file:   prefix-e
	new file:   prefix-f
	new file:   prefix-g
	new file:   prefix-h
	new file:   prefix-i
	new file:   prefix-j
	new file:   prefix-k
	new file:   prefix-l
	new file:   prefix-m
	new file:   prefix-n
	new file:   prefix-o
	new file:   prefix-p
	new file:   prefix-q
	new file:   prefix-r
	new file:   prefix-s
	new file:   prefix-t
	new file:   prefix-u
	new file:   prefix-v
	new file:   prefix-w
	new file:   prefix-x
	new file:   prefix-y
	new file:   prefix-z

ok 8 - status, filename length 8

expecting success of 7511.9 'status, filename length 9': 
		git add prefix-p* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-p0
	new file:   prefix-p1
	new file:   prefix-p2
	new file:   prefix-p3
	new file:   prefix-p4
	new file:   prefix-p5
	new file:   prefix-p6
	new file:   prefix-p7
	new file:   prefix-p8
	new file:   prefix-p9
	new file:   prefix-pa
	new file:   prefix-pb
	new file:   prefix-pc
	new file:   prefix-pd
	new file:   prefix-pe
	new file:   prefix-pf
	new file:   prefix-pg
	new file:   prefix-ph
	new file:   prefix-pi
	new file:   prefix-pj
	new file:   prefix-pk
	new file:   prefix-pl
	new file:   prefix-pm
	new file:   prefix-pn
	new file:   prefix-po
	new file:   prefix-pp
	new file:   prefix-pq
	new file:   prefix-pr
	new file:   prefix-ps
	new file:   prefix-pt
	new file:   prefix-pu
	new file:   prefix-pv
	new file:   prefix-pw
	new file:   prefix-px
	new file:   prefix-py
	new file:   prefix-pz

ok 9 - status, filename length 9

expecting success of 7511.10 'status, filename length 10': 
		git add prefix-pr* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-pr0
	new file:   prefix-pr1
	new file:   prefix-pr2
	new file:   prefix-pr3
	new file:   prefix-pr4
	new file:   prefix-pr5
	new file:   prefix-pr6
	new file:   prefix-pr7
	new file:   prefix-pr8
	new file:   prefix-pr9
	new file:   prefix-pra
	new file:   prefix-prb
	new file:   prefix-prc
	new file:   prefix-prd
	new file:   prefix-pre
	new file:   prefix-prf
	new file:   prefix-prg
	new file:   prefix-prh
	new file:   prefix-pri
	new file:   prefix-prj
	new file:   prefix-prk
	new file:   prefix-prl
	new file:   prefix-prm
	new file:   prefix-prn
	new file:   prefix-pro
	new file:   prefix-prp
	new file:   prefix-prq
	new file:   prefix-prr
	new file:   prefix-prs
	new file:   prefix-prt
	new file:   prefix-pru
	new file:   prefix-prv
	new file:   prefix-prw
	new file:   prefix-prx
	new file:   prefix-pry
	new file:   prefix-prz

ok 10 - status, filename length 10

expecting success of 7511.11 'status, filename length 11': 
		git add prefix-pre* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-pre0
	new file:   prefix-pre1
	new file:   prefix-pre2
	new file:   prefix-pre3
	new file:   prefix-pre4
	new file:   prefix-pre5
	new file:   prefix-pre6
	new file:   prefix-pre7
	new file:   prefix-pre8
	new file:   prefix-pre9
	new file:   prefix-prea
	new file:   prefix-preb
	new file:   prefix-prec
	new file:   prefix-pred
	new file:   prefix-pree
	new file:   prefix-pref
	new file:   prefix-preg
	new file:   prefix-preh
	new file:   prefix-prei
	new file:   prefix-prej
	new file:   prefix-prek
	new file:   prefix-prel
	new file:   prefix-prem
	new file:   prefix-pren
	new file:   prefix-preo
	new file:   prefix-prep
	new file:   prefix-preq
	new file:   prefix-prer
	new file:   prefix-pres
	new file:   prefix-pret
	new file:   prefix-preu
	new file:   prefix-prev
	new file:   prefix-prew
	new file:   prefix-prex
	new file:   prefix-prey
	new file:   prefix-prez

ok 11 - status, filename length 11

expecting success of 7511.12 'status, filename length 12': 
		git add prefix-pref* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-pref0
	new file:   prefix-pref1
	new file:   prefix-pref2
	new file:   prefix-pref3
	new file:   prefix-pref4
	new file:   prefix-pref5
	new file:   prefix-pref6
	new file:   prefix-pref7
	new file:   prefix-pref8
	new file:   prefix-pref9
	new file:   prefix-prefa
	new file:   prefix-prefb
	new file:   prefix-prefc
	new file:   prefix-prefd
	new file:   prefix-prefe
	new file:   prefix-preff
	new file:   prefix-prefg
	new file:   prefix-prefh
	new file:   prefix-prefi
	new file:   prefix-prefj
	new file:   prefix-prefk
	new file:   prefix-prefl
	new file:   prefix-prefm
	new file:   prefix-prefn
	new file:   prefix-prefo
	new file:   prefix-prefp
	new file:   prefix-prefq
	new file:   prefix-prefr
	new file:   prefix-prefs
	new file:   prefix-preft
	new file:   prefix-prefu
	new file:   prefix-prefv
	new file:   prefix-prefw
	new file:   prefix-prefx
	new file:   prefix-prefy
	new file:   prefix-prefz

ok 12 - status, filename length 12

expecting success of 7511.13 'status, filename length 13': 
		git add prefix-prefi* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefi0
	new file:   prefix-prefi1
	new file:   prefix-prefi2
	new file:   prefix-prefi3
	new file:   prefix-prefi4
	new file:   prefix-prefi5
	new file:   prefix-prefi6
	new file:   prefix-prefi7
	new file:   prefix-prefi8
	new file:   prefix-prefi9
	new file:   prefix-prefia
	new file:   prefix-prefib
	new file:   prefix-prefic
	new file:   prefix-prefid
	new file:   prefix-prefie
	new file:   prefix-prefif
	new file:   prefix-prefig
	new file:   prefix-prefih
	new file:   prefix-prefii
	new file:   prefix-prefij
	new file:   prefix-prefik
	new file:   prefix-prefil
	new file:   prefix-prefim
	new file:   prefix-prefin
	new file:   prefix-prefio
	new file:   prefix-prefip
	new file:   prefix-prefiq
	new file:   prefix-prefir
	new file:   prefix-prefis
	new file:   prefix-prefit
	new file:   prefix-prefiu
	new file:   prefix-prefiv
	new file:   prefix-prefiw
	new file:   prefix-prefix
	new file:   prefix-prefiy
	new file:   prefix-prefiz

ok 13 - status, filename length 13

expecting success of 7511.14 'status, filename length 14': 
		git add prefix-prefix* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix0
	new file:   prefix-prefix1
	new file:   prefix-prefix2
	new file:   prefix-prefix3
	new file:   prefix-prefix4
	new file:   prefix-prefix5
	new file:   prefix-prefix6
	new file:   prefix-prefix7
	new file:   prefix-prefix8
	new file:   prefix-prefix9
	new file:   prefix-prefixa
	new file:   prefix-prefixb
	new file:   prefix-prefixc
	new file:   prefix-prefixd
	new file:   prefix-prefixe
	new file:   prefix-prefixf
	new file:   prefix-prefixg
	new file:   prefix-prefixh
	new file:   prefix-prefixi
	new file:   prefix-prefixj
	new file:   prefix-prefixk
	new file:   prefix-prefixl
	new file:   prefix-prefixm
	new file:   prefix-prefixn
	new file:   prefix-prefixo
	new file:   prefix-prefixp
	new file:   prefix-prefixq
	new file:   prefix-prefixr
	new file:   prefix-prefixs
	new file:   prefix-prefixt
	new file:   prefix-prefixu
	new file:   prefix-prefixv
	new file:   prefix-prefixw
	new file:   prefix-prefixx
	new file:   prefix-prefixy
	new file:   prefix-prefixz

ok 14 - status, filename length 14

expecting success of 7511.15 'status, filename length 15': 
		git add prefix-prefix-* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-0
	new file:   prefix-prefix-1
	new file:   prefix-prefix-2
	new file:   prefix-prefix-3
	new file:   prefix-prefix-4
	new file:   prefix-prefix-5
	new file:   prefix-prefix-6
	new file:   prefix-prefix-7
	new file:   prefix-prefix-8
	new file:   prefix-prefix-9
	new file:   prefix-prefix-a
	new file:   prefix-prefix-b
	new file:   prefix-prefix-c
	new file:   prefix-prefix-d
	new file:   prefix-prefix-e
	new file:   prefix-prefix-f
	new file:   prefix-prefix-g
	new file:   prefix-prefix-h
	new file:   prefix-prefix-i
	new file:   prefix-prefix-j
	new file:   prefix-prefix-k
	new file:   prefix-prefix-l
	new file:   prefix-prefix-m
	new file:   prefix-prefix-n
	new file:   prefix-prefix-o
	new file:   prefix-prefix-p
	new file:   prefix-prefix-q
	new file:   prefix-prefix-r
	new file:   prefix-prefix-s
	new file:   prefix-prefix-t
	new file:   prefix-prefix-u
	new file:   prefix-prefix-v
	new file:   prefix-prefix-w
	new file:   prefix-prefix-x
	new file:   prefix-prefix-y
	new file:   prefix-prefix-z

ok 15 - status, filename length 15

expecting success of 7511.16 'status, filename length 16': 
		git add prefix-prefix-p* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-p0
	new file:   prefix-prefix-p1
	new file:   prefix-prefix-p2
	new file:   prefix-prefix-p3
	new file:   prefix-prefix-p4
	new file:   prefix-prefix-p5
	new file:   prefix-prefix-p6
	new file:   prefix-prefix-p7
	new file:   prefix-prefix-p8
	new file:   prefix-prefix-p9
	new file:   prefix-prefix-pa
	new file:   prefix-prefix-pb
	new file:   prefix-prefix-pc
	new file:   prefix-prefix-pd
	new file:   prefix-prefix-pe
	new file:   prefix-prefix-pf
	new file:   prefix-prefix-pg
	new file:   prefix-prefix-ph
	new file:   prefix-prefix-pi
	new file:   prefix-prefix-pj
	new file:   prefix-prefix-pk
	new file:   prefix-prefix-pl
	new file:   prefix-prefix-pm
	new file:   prefix-prefix-pn
	new file:   prefix-prefix-po
	new file:   prefix-prefix-pp
	new file:   prefix-prefix-pq
	new file:   prefix-prefix-pr
	new file:   prefix-prefix-ps
	new file:   prefix-prefix-pt
	new file:   prefix-prefix-pu
	new file:   prefix-prefix-pv
	new file:   prefix-prefix-pw
	new file:   prefix-prefix-px
	new file:   prefix-prefix-py
	new file:   prefix-prefix-pz

ok 16 - status, filename length 16

expecting success of 7511.17 'status, filename length 17': 
		git add prefix-prefix-pr* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-pr0
	new file:   prefix-prefix-pr1
	new file:   prefix-prefix-pr2
	new file:   prefix-prefix-pr3
	new file:   prefix-prefix-pr4
	new file:   prefix-prefix-pr5
	new file:   prefix-prefix-pr6
	new file:   prefix-prefix-pr7
	new file:   prefix-prefix-pr8
	new file:   prefix-prefix-pr9
	new file:   prefix-prefix-pra
	new file:   prefix-prefix-prb
	new file:   prefix-prefix-prc
	new file:   prefix-prefix-prd
	new file:   prefix-prefix-pre
	new file:   prefix-prefix-prf
	new file:   prefix-prefix-prg
	new file:   prefix-prefix-prh
	new file:   prefix-prefix-pri
	new file:   prefix-prefix-prj
	new file:   prefix-prefix-prk
	new file:   prefix-prefix-prl
	new file:   prefix-prefix-prm
	new file:   prefix-prefix-prn
	new file:   prefix-prefix-pro
	new file:   prefix-prefix-prp
	new file:   prefix-prefix-prq
	new file:   prefix-prefix-prr
	new file:   prefix-prefix-prs
	new file:   prefix-prefix-prt
	new file:   prefix-prefix-pru
	new file:   prefix-prefix-prv
	new file:   prefix-prefix-prw
	new file:   prefix-prefix-prx
	new file:   prefix-prefix-pry
	new file:   prefix-prefix-prz

ok 17 - status, filename length 17

expecting success of 7511.18 'status, filename length 18': 
		git add prefix-prefix-pre* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-pre0
	new file:   prefix-prefix-pre1
	new file:   prefix-prefix-pre2
	new file:   prefix-prefix-pre3
	new file:   prefix-prefix-pre4
	new file:   prefix-prefix-pre5
	new file:   prefix-prefix-pre6
	new file:   prefix-prefix-pre7
	new file:   prefix-prefix-pre8
	new file:   prefix-prefix-pre9
	new file:   prefix-prefix-prea
	new file:   prefix-prefix-preb
	new file:   prefix-prefix-prec
	new file:   prefix-prefix-pred
	new file:   prefix-prefix-pree
	new file:   prefix-prefix-pref
	new file:   prefix-prefix-preg
	new file:   prefix-prefix-preh
	new file:   prefix-prefix-prei
	new file:   prefix-prefix-prej
	new file:   prefix-prefix-prek
	new file:   prefix-prefix-prel
	new file:   prefix-prefix-prem
	new file:   prefix-prefix-pren
	new file:   prefix-prefix-preo
	new file:   prefix-prefix-prep
	new file:   prefix-prefix-preq
	new file:   prefix-prefix-prer
	new file:   prefix-prefix-pres
	new file:   prefix-prefix-pret
	new file:   prefix-prefix-preu
	new file:   prefix-prefix-prev
	new file:   prefix-prefix-prew
	new file:   prefix-prefix-prex
	new file:   prefix-prefix-prey
	new file:   prefix-prefix-prez

ok 18 - status, filename length 18

expecting success of 7511.19 'status, filename length 19': 
		git add prefix-prefix-pref* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-pref0
	new file:   prefix-prefix-pref1
	new file:   prefix-prefix-pref2
	new file:   prefix-prefix-pref3
	new file:   prefix-prefix-pref4
	new file:   prefix-prefix-pref5
	new file:   prefix-prefix-pref6
	new file:   prefix-prefix-pref7
	new file:   prefix-prefix-pref8
	new file:   prefix-prefix-pref9
	new file:   prefix-prefix-prefa
	new file:   prefix-prefix-prefb
	new file:   prefix-prefix-prefc
	new file:   prefix-prefix-prefd
	new file:   prefix-prefix-prefe
	new file:   prefix-prefix-preff
	new file:   prefix-prefix-prefg
	new file:   prefix-prefix-prefh
	new file:   prefix-prefix-prefi
	new file:   prefix-prefix-prefj
	new file:   prefix-prefix-prefk
	new file:   prefix-prefix-prefl
	new file:   prefix-prefix-prefm
	new file:   prefix-prefix-prefn
	new file:   prefix-prefix-prefo
	new file:   prefix-prefix-prefp
	new file:   prefix-prefix-prefq
	new file:   prefix-prefix-prefr
	new file:   prefix-prefix-prefs
	new file:   prefix-prefix-preft
	new file:   prefix-prefix-prefu
	new file:   prefix-prefix-prefv
	new file:   prefix-prefix-prefw
	new file:   prefix-prefix-prefx
	new file:   prefix-prefix-prefy
	new file:   prefix-prefix-prefz

ok 19 - status, filename length 19

expecting success of 7511.20 'status, filename length 20': 
		git add prefix-prefix-prefi* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-prefi0
	new file:   prefix-prefix-prefi1
	new file:   prefix-prefix-prefi2
	new file:   prefix-prefix-prefi3
	new file:   prefix-prefix-prefi4
	new file:   prefix-prefix-prefi5
	new file:   prefix-prefix-prefi6
	new file:   prefix-prefix-prefi7
	new file:   prefix-prefix-prefi8
	new file:   prefix-prefix-prefi9
	new file:   prefix-prefix-prefia
	new file:   prefix-prefix-prefib
	new file:   prefix-prefix-prefic
	new file:   prefix-prefix-prefid
	new file:   prefix-prefix-prefie
	new file:   prefix-prefix-prefif
	new file:   prefix-prefix-prefig
	new file:   prefix-prefix-prefih
	new file:   prefix-prefix-prefii
	new file:   prefix-prefix-prefij
	new file:   prefix-prefix-prefik
	new file:   prefix-prefix-prefil
	new file:   prefix-prefix-prefim
	new file:   prefix-prefix-prefin
	new file:   prefix-prefix-prefio
	new file:   prefix-prefix-prefip
	new file:   prefix-prefix-prefiq
	new file:   prefix-prefix-prefir
	new file:   prefix-prefix-prefis
	new file:   prefix-prefix-prefit
	new file:   prefix-prefix-prefiu
	new file:   prefix-prefix-prefiv
	new file:   prefix-prefix-prefiw
	new file:   prefix-prefix-prefix
	new file:   prefix-prefix-prefiy
	new file:   prefix-prefix-prefiz

ok 20 - status, filename length 20

expecting success of 7511.21 'status, filename length 21': 
		git add prefix-prefix-prefix* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-prefix0
	new file:   prefix-prefix-prefix1
	new file:   prefix-prefix-prefix2
	new file:   prefix-prefix-prefix3
	new file:   prefix-prefix-prefix4
	new file:   prefix-prefix-prefix5
	new file:   prefix-prefix-prefix6
	new file:   prefix-prefix-prefix7
	new file:   prefix-prefix-prefix8
	new file:   prefix-prefix-prefix9
	new file:   prefix-prefix-prefixa
	new file:   prefix-prefix-prefixb
	new file:   prefix-prefix-prefixc
	new file:   prefix-prefix-prefixd
	new file:   prefix-prefix-prefixe
	new file:   prefix-prefix-prefixf
	new file:   prefix-prefix-prefixg
	new file:   prefix-prefix-prefixh
	new file:   prefix-prefix-prefixi
	new file:   prefix-prefix-prefixj
	new file:   prefix-prefix-prefixk
	new file:   prefix-prefix-prefixl
	new file:   prefix-prefix-prefixm
	new file:   prefix-prefix-prefixn
	new file:   prefix-prefix-prefixo
	new file:   prefix-prefix-prefixp
	new file:   prefix-prefix-prefixq
	new file:   prefix-prefix-prefixr
	new file:   prefix-prefix-prefixs
	new file:   prefix-prefix-prefixt
	new file:   prefix-prefix-prefixu
	new file:   prefix-prefix-prefixv
	new file:   prefix-prefix-prefixw
	new file:   prefix-prefix-prefixx
	new file:   prefix-prefix-prefixy
	new file:   prefix-prefix-prefixz

ok 21 - status, filename length 21

expecting success of 7511.22 'status, filename length 22': 
		git add prefix-prefix-prefix-* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-prefix-0
	new file:   prefix-prefix-prefix-1
	new file:   prefix-prefix-prefix-2
	new file:   prefix-prefix-prefix-3
	new file:   prefix-prefix-prefix-4
	new file:   prefix-prefix-prefix-5
	new file:   prefix-prefix-prefix-6
	new file:   prefix-prefix-prefix-7
	new file:   prefix-prefix-prefix-8
	new file:   prefix-prefix-prefix-9
	new file:   prefix-prefix-prefix-a
	new file:   prefix-prefix-prefix-b
	new file:   prefix-prefix-prefix-c
	new file:   prefix-prefix-prefix-d
	new file:   prefix-prefix-prefix-e
	new file:   prefix-prefix-prefix-f
	new file:   prefix-prefix-prefix-g
	new file:   prefix-prefix-prefix-h
	new file:   prefix-prefix-prefix-i
	new file:   prefix-prefix-prefix-j
	new file:   prefix-prefix-prefix-k
	new file:   prefix-prefix-prefix-l
	new file:   prefix-prefix-prefix-m
	new file:   prefix-prefix-prefix-n
	new file:   prefix-prefix-prefix-o
	new file:   prefix-prefix-prefix-p
	new file:   prefix-prefix-prefix-q
	new file:   prefix-prefix-prefix-r
	new file:   prefix-prefix-prefix-s
	new file:   prefix-prefix-prefix-t
	new file:   prefix-prefix-prefix-u
	new file:   prefix-prefix-prefix-v
	new file:   prefix-prefix-prefix-w
	new file:   prefix-prefix-prefix-x
	new file:   prefix-prefix-prefix-y
	new file:   prefix-prefix-prefix-z

ok 22 - status, filename length 22

expecting success of 7511.23 'status, filename length 23': 
		git add prefix-prefix-prefix-p* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-prefix-p0
	new file:   prefix-prefix-prefix-p1
	new file:   prefix-prefix-prefix-p2
	new file:   prefix-prefix-prefix-p3
	new file:   prefix-prefix-prefix-p4
	new file:   prefix-prefix-prefix-p5
	new file:   prefix-prefix-prefix-p6
	new file:   prefix-prefix-prefix-p7
	new file:   prefix-prefix-prefix-p8
	new file:   prefix-prefix-prefix-p9
	new file:   prefix-prefix-prefix-pa
	new file:   prefix-prefix-prefix-pb
	new file:   prefix-prefix-prefix-pc
	new file:   prefix-prefix-prefix-pd
	new file:   prefix-prefix-prefix-pe
	new file:   prefix-prefix-prefix-pf
	new file:   prefix-prefix-prefix-pg
	new file:   prefix-prefix-prefix-ph
	new file:   prefix-prefix-prefix-pi
	new file:   prefix-prefix-prefix-pj
	new file:   prefix-prefix-prefix-pk
	new file:   prefix-prefix-prefix-pl
	new file:   prefix-prefix-prefix-pm
	new file:   prefix-prefix-prefix-pn
	new file:   prefix-prefix-prefix-po
	new file:   prefix-prefix-prefix-pp
	new file:   prefix-prefix-prefix-pq
	new file:   prefix-prefix-prefix-pr
	new file:   prefix-prefix-prefix-ps
	new file:   prefix-prefix-prefix-pt
	new file:   prefix-prefix-prefix-pu
	new file:   prefix-prefix-prefix-pv
	new file:   prefix-prefix-prefix-pw
	new file:   prefix-prefix-prefix-px
	new file:   prefix-prefix-prefix-py
	new file:   prefix-prefix-prefix-pz

ok 23 - status, filename length 23

expecting success of 7511.24 'status, filename length 24': 
		git add prefix-prefix-prefix-pr* &&
		git status
	
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   prefix-prefix-prefix-pr0
	new file:   prefix-prefix-prefix-pr1
	new file:   prefix-prefix-prefix-pr2
	new file:   prefix-prefix-prefix-pr3
	new file:   prefix-prefix-prefix-pr4
	new file:   prefix-prefix-prefix-pr5
	new file:   prefix-prefix-prefix-pr6
	new file:   prefix-prefix-prefix-pr7
	new file:   prefix-prefix-prefix-pr8
	new file:   prefix-prefix-prefix-pr9
	new file:   prefix-prefix-prefix-pra
	new file:   prefix-prefix-prefix-prb
	new file:   prefix-prefix-prefix-prc
	new file:   prefix-prefix-prefix-prd
	new file:   prefix-prefix-prefix-pre
	new file:   prefix-prefix-prefix-prf
	new file:   prefix-prefix-prefix-prg
	new file:   prefix-prefix-prefix-prh
	new file:   prefix-prefix-prefix-pri
	new file:   prefix-prefix-prefix-prj
	new file:   prefix-prefix-prefix-prk
	new file:   prefix-prefix-prefix-prl
	new file:   prefix-prefix-prefix-prm
	new file:   prefix-prefix-prefix-prn
	new file:   prefix-prefix-prefix-pro
	new file:   prefix-prefix-prefix-prp
	new file:   prefix-prefix-prefix-prq
	new file:   prefix-prefix-prefix-prr
	new file:   prefix-prefix-prefix-prs
	new file:   prefix-prefix-prefix-prt
	new file:   prefix-prefix-prefix-pru
	new file:   prefix-prefix-prefix-prv
	new file:   prefix-prefix-prefix-prw
	new file:   prefix-prefix-prefix-prx
	new file:   prefix-prefix-prefix-pry
	new file:   prefix-prefix-prefix-prz

ok 24 - status, filename length 24

# passed all 24 test(s)
1..24
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7510-signed-commit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7510-signed-commit/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7510-signed-commit/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7510-signed-commit/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7510.1 'create signed commits': 
	test_oid_cache <<-\EOF &&
	header sha1:gpgsig
	header sha256:gpgsig-sha256
	EOF

	test_when_finished "test_unconfig commit.gpgsign" &&

	echo 1 >file && git add file &&
	test_tick && git commit -S -m initial &&
	git tag initial &&
	git branch side &&

	echo 2 >file && test_tick && git commit -a -S -m second &&
	git tag second &&

	git checkout side &&
	echo 3 >elif && git add elif &&
	test_tick && git commit -m "third on side" &&

	git checkout main &&
	test_tick && git merge -S side &&
	git tag merge &&

	echo 4 >file && test_tick && git commit -a -m "fourth unsigned" &&
	git tag fourth-unsigned &&

	test_tick && git commit --amend -S -m "fourth signed" &&
	git tag fourth-signed &&

	git config commit.gpgsign true &&
	echo 5 >file && test_tick && git commit -a -m "fifth signed" &&
	git tag fifth-signed &&

	git config commit.gpgsign false &&
	echo 6 >file && test_tick && git commit -a -m "sixth" &&
	git tag sixth-unsigned &&

	git config commit.gpgsign true &&
	echo 7 >file && test_tick && git commit -a -m "seventh" --no-gpg-sign &&
	git tag seventh-unsigned &&

	test_tick && git rebase -f HEAD^^ && git tag sixth-signed HEAD^ &&
	git tag seventh-signed &&

	echo 8 >file && test_tick && git commit -a -m eighth -SB7227189 &&
	git tag eighth-signed-alt &&

	# commit.gpgsign is still on but this must not be signed
	echo 9 | git commit-tree HEAD^{tree} >oid &&
	test_line_count = 1 oid &&
	git tag ninth-unsigned $(cat oid) &&
	# explicit -S of course must sign.
	echo 10 | git commit-tree -S HEAD^{tree} >oid &&
	test_line_count = 1 oid &&
	git tag tenth-signed $(cat oid) &&

	# --gpg-sign[=<key-id>] must sign.
	echo 11 | git commit-tree --gpg-sign HEAD^{tree} >oid &&
	test_line_count = 1 oid &&
	git tag eleventh-signed $(cat oid) &&
	echo 12 | git commit-tree --gpg-sign=B7227189 HEAD^{tree} >oid &&
	test_line_count = 1 oid &&
	git tag twelfth-signed-alt $(cat oid)

[main (root-commit) 4f12abe] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[main 658b9f5] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'side'
[side 27f93c8] third on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
Switched to branch 'main'
Merge made by the 'ort' strategy.
 elif | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 elif
[main 6fc4470] fourth unsigned
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c90a1a3] fourth signed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
[main c3a0ade] fifth signed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main a260375] sixth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 039f727] seventh
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Current branch main is up to date, rebase forced.
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/main.
[main f63c611] eighth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - create signed commits

expecting success of 7510.2 'verify and show signatures': 
	(
		for commit in initial second merge fourth-signed \
			fifth-signed sixth-signed seventh-signed tenth-signed \
			eleventh-signed
		do
			git verify-commit $commit &&
			git show --pretty=short --show-signature $commit >actual &&
			grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			echo $commit OK || exit 1
		done
	) &&
	(
		for commit in merge^2 fourth-unsigned sixth-unsigned \
			seventh-unsigned ninth-unsigned
		do
			test_must_fail git verify-commit $commit &&
			git show --pretty=short --show-signature $commit >actual &&
			! grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			echo $commit OK || exit 1
		done
	) &&
	(
		for commit in eighth-signed-alt twelfth-signed-alt
		do
			git show --pretty=short --show-signature $commit >actual &&
			grep "Good signature from" actual &&
			! grep "BAD signature from" actual &&
			grep "not certified" actual &&
			echo $commit OK || exit 1
		done
	)

gpg: Signature made Wed Dec 28 08:03:59 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
initial OK
gpg: Signature made Wed Dec 28 08:03:59 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
second OK
gpg: Signature made Wed Dec 28 08:04:00 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
merge OK
gpg: Signature made Wed Dec 28 08:04:00 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
fourth-signed OK
gpg: Signature made Wed Dec 28 08:04:00 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
fifth-signed OK
gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
sixth-signed OK
gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
seventh-signed OK
gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
tenth-signed OK
gpg: Signature made Wed Dec 28 08:04:02 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
eleventh-signed OK
merge^2 OK
fourth-unsigned OK
sixth-unsigned OK
seventh-unsigned OK
ninth-unsigned OK
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
eighth-signed-alt OK
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
twelfth-signed-alt OK
ok 2 - verify and show signatures

expecting success of 7510.3 'verify-commit exits failure on unknown signature': 
	test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit initial 2>actual &&
	! grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	grep -q -F -e "No public key" -e "public key not found" actual

ok 3 - verify-commit exits failure on unknown signature

expecting success of 7510.4 'verify-commit exits success on untrusted signature': 
	git verify-commit eighth-signed-alt 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual &&
	grep "not certified" actual

gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
ok 4 - verify-commit exits success on untrusted signature

expecting success of 7510.5 'verify-commit exits success with matching minTrustLevel': 
	test_config gpg.minTrustLevel ultimate &&
	git verify-commit sixth-signed

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 5 - verify-commit exits success with matching minTrustLevel

expecting success of 7510.6 'verify-commit exits success with low minTrustLevel': 
	test_config gpg.minTrustLevel fully &&
	git verify-commit sixth-signed

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 6 - verify-commit exits success with low minTrustLevel

expecting success of 7510.7 'verify-commit exits failure with high minTrustLevel': 
	test_config gpg.minTrustLevel ultimate &&
	test_must_fail git verify-commit eighth-signed-alt

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using RSA key F8364A59E07FFE9F4D63005A65A0EEA02E30CAD7
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: D4BE 2231 1AD3 131E 5EDA  29A4 6109 2E85 B722 7189
     Subkey fingerprint: F836 4A59 E07F FE9F 4D63  005A 65A0 EEA0 2E30 CAD7
ok 7 - verify-commit exits failure with high minTrustLevel

expecting success of 7510.8 'verify signatures with --raw': 
	(
		for commit in initial second merge fourth-signed fifth-signed sixth-signed seventh-signed
		do
			git verify-commit --raw $commit 2>actual &&
			grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			echo $commit OK || exit 1
		done
	) &&
	(
		for commit in merge^2 fourth-unsigned sixth-unsigned seventh-unsigned
		do
			test_must_fail git verify-commit --raw $commit 2>actual &&
			! grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			echo $commit OK || exit 1
		done
	) &&
	(
		for commit in eighth-signed-alt
		do
			git verify-commit --raw $commit 2>actual &&
			grep "GOODSIG" actual &&
			! grep "BADSIG" actual &&
			grep "TRUST_UNDEFINED" actual &&
			echo $commit OK || exit 1
		done
	)

[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
initial OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
second OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
merge OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
fourth-signed OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
fifth-signed OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
sixth-signed OK
[GNUPG:] GOODSIG 13B6F51ECDDE430D C O Mitter <committer@example.com>
seventh-signed OK
merge^2 OK
fourth-unsigned OK
sixth-unsigned OK
seventh-unsigned OK
[GNUPG:] GOODSIG 65A0EEA02E30CAD7 Eris Discordia <discord@example.net>
[GNUPG:] TRUST_UNDEFINED 0 pgp
eighth-signed-alt OK
ok 8 - verify signatures with --raw

expecting success of 7510.9 'proper header is used for hash algorithm': 
	git cat-file commit fourth-signed >output &&
	grep "^$(test_oid header) -----BEGIN PGP SIGNATURE-----" output

gpgsig -----BEGIN PGP SIGNATURE-----
ok 9 - proper header is used for hash algorithm

expecting success of 7510.10 'show signed commit with signature': 
	git show -s initial >commit &&
	git show -s --show-signature initial >show &&
	git verify-commit -v initial >verify.1 2>verify.2 &&
	git cat-file commit initial >cat &&
	grep -v -e "gpg: " -e "Warning: " show >show.commit &&
	grep -e "gpg: " -e "Warning: " show >show.gpg &&
	grep -v "^ " cat | grep -v "^gpgsig.* " >cat.commit &&
	test_cmp show.commit commit &&
	test_cmp show.gpg verify.2 &&
	test_cmp cat.commit verify.1

ok 10 - show signed commit with signature

expecting success of 7510.11 'detect fudged signature': 
	git cat-file commit seventh-signed >raw &&
	sed -e "s/^seventh/7th forged/" raw >forged1 &&
	git hash-object -w -t commit forged1 >forged1.commit &&
	test_must_fail git verify-commit $(cat forged1.commit) &&
	git show --pretty=short --show-signature $(cat forged1.commit) >actual1 &&
	grep "BAD signature from" actual1 &&
	! grep "Good signature from" actual1

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
ok 11 - detect fudged signature

expecting success of 7510.12 'detect fudged signature with NUL': 
	git cat-file commit seventh-signed >raw &&
	cat raw >forged2 &&
	echo Qwik | tr "Q" "\000" >>forged2 &&
	git hash-object -w -t commit forged2 >forged2.commit &&
	test_must_fail git verify-commit $(cat forged2.commit) &&
	git show --pretty=short --show-signature $(cat forged2.commit) >actual2 &&
	grep "BAD signature from" actual2 &&
	! grep "Good signature from" actual2

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
ok 12 - detect fudged signature with NUL

expecting success of 7510.13 'amending already signed commit': 
	git checkout -f fourth-signed^0 &&
	git commit --amend -S --no-edit &&
	git verify-commit HEAD &&
	git show -s --show-signature HEAD >actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual

Note: switching to 'fourth-signed^0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at c90a1a3 fourth signed
[detached HEAD cfa6661] fourth signed
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
gpg: Signature made Wed Dec 28 08:04:07 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 13 - amending already signed commit

expecting success of 7510.14 'show good signature with custom format': 
	cat >expect <<-\EOF &&
	G
	13B6F51ECDDE430D
	C O Mitter <committer@example.com>
	73D758744BE721698EC54E8713B6F51ECDDE430D
	73D758744BE721698EC54E8713B6F51ECDDE430D
	EOF
	git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" sixth-signed >actual &&
	test_cmp expect actual

ok 14 - show good signature with custom format

expecting success of 7510.15 'show bad signature with custom format': 
	cat >expect <<-\EOF &&
	B
	13B6F51ECDDE430D
	C O Mitter <committer@example.com>


	EOF
	git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" $(cat forged1.commit) >actual &&
	test_cmp expect actual

ok 15 - show bad signature with custom format

expecting success of 7510.16 'show untrusted signature with custom format': 
	cat >expect <<-\EOF &&
	U
	65A0EEA02E30CAD7
	Eris Discordia <discord@example.net>
	F8364A59E07FFE9F4D63005A65A0EEA02E30CAD7
	D4BE22311AD3131E5EDA29A461092E85B7227189
	EOF
	git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" eighth-signed-alt >actual &&
	test_cmp expect actual

ok 16 - show untrusted signature with custom format

expecting success of 7510.17 'show untrusted signature with undefined trust level': 
	cat >expect <<-\EOF &&
	undefined
	65A0EEA02E30CAD7
	Eris Discordia <discord@example.net>
	F8364A59E07FFE9F4D63005A65A0EEA02E30CAD7
	D4BE22311AD3131E5EDA29A461092E85B7227189
	EOF
	git log -1 --format="%GT%n%GK%n%GS%n%GF%n%GP" eighth-signed-alt >actual &&
	test_cmp expect actual

ok 17 - show untrusted signature with undefined trust level

expecting success of 7510.18 'show untrusted signature with ultimate trust level': 
	cat >expect <<-\EOF &&
	ultimate
	13B6F51ECDDE430D
	C O Mitter <committer@example.com>
	73D758744BE721698EC54E8713B6F51ECDDE430D
	73D758744BE721698EC54E8713B6F51ECDDE430D
	EOF
	git log -1 --format="%GT%n%GK%n%GS%n%GF%n%GP" sixth-signed >actual &&
	test_cmp expect actual

ok 18 - show untrusted signature with ultimate trust level

expecting success of 7510.19 'show unknown signature with custom format': 
	cat >expect <<-\EOF &&
	E
	65A0EEA02E30CAD7



	EOF
	GNUPGHOME="$GNUPGHOME_NOT_USED" git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" eighth-signed-alt >actual &&
	test_cmp expect actual

ok 19 - show unknown signature with custom format

expecting success of 7510.20 'show lack of signature with custom format': 
	cat >expect <<-\EOF &&
	N




	EOF
	git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" seventh-unsigned >actual &&
	test_cmp expect actual

ok 20 - show lack of signature with custom format

expecting success of 7510.21 'log.showsignature behaves like --show-signature': 
	test_config log.showsignature true &&
	git show initial >actual &&
	grep "gpg: Signature made" actual &&
	grep "gpg: Good signature" actual

gpg: Signature made Wed Dec 28 08:03:59 2022 UTC
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 21 - log.showsignature behaves like --show-signature

expecting success of 7510.22 'check config gpg.format values': 
	test_config gpg.format openpgp &&
	git commit -S --amend -m "success" &&
	test_config gpg.format OpEnPgP &&
	test_must_fail git commit -S --amend -m "fail"

[detached HEAD d409836] success
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
error: invalid value for 'gpg.format': 'OpEnPgP'
fatal: bad config variable 'gpg.format' in file '.git/config' at line 7
ok 22 - check config gpg.format values

expecting success of 7510.23 'detect fudged commit with double signature': 
	sed -e "/gpgsig/,/END PGP/d" forged1 >double-base &&
	sed -n -e "/gpgsig/,/END PGP/p" forged1 | \
		sed -e "s/^$(test_oid header)//;s/^ //" | gpg --dearmor >double-sig1.sig &&
	gpg -o double-sig2.sig -u 29472784 --detach-sign double-base &&
	cat double-sig1.sig double-sig2.sig | gpg --enarmor >double-combined.asc &&
	sed -e "s/^\(-.*\)ARMORED FILE/\1SIGNATURE/;1s/^/$(test_oid header) /;2,\$s/^/ /" \
		double-combined.asc > double-gpgsig &&
	sed -e "/committer/r double-gpgsig" double-base >double-commit &&
	git hash-object -w -t commit double-commit >double-commit.commit &&
	test_must_fail git verify-commit $(cat double-commit.commit) &&
	git show --pretty=short --show-signature $(cat double-commit.commit) >double-actual &&
	grep "BAD signature from" double-actual &&
	grep "Good signature from" double-actual

gpg: Signature made Wed Dec 28 08:04:01 2022 UTC
gpg:                using DSA key 73D758744BE721698EC54E8713B6F51ECDDE430D
gpg:                issuer "committer@example.com"
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Signature made Wed Dec 28 08:04:09 2022 UTC
gpg:                using RSA key F8364A59E07FFE9F4D63005A65A0EEA02E30CAD7
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: D4BE 2231 1AD3 131E 5EDA  29A4 6109 2E85 B722 7189
     Subkey fingerprint: F836 4A59 E07F FE9F 4D63  005A 65A0 EEA0 2E30 CAD7
gpg: BAD signature from "C O Mitter <committer@example.com>" [ultimate]
gpg: Good signature from "Eris Discordia <discord@example.net>" [unknown]
ok 23 - detect fudged commit with double signature

expecting success of 7510.24 'show double signature with custom format': 
	cat >expect <<-\EOF &&
	E




	EOF
	git log -1 --format="%G?%n%GK%n%GS%n%GF%n%GP" $(cat double-commit.commit) >actual &&
	test_cmp expect actual

ok 24 - show double signature with custom format

expecting success of 7510.25 'verify-commit verifies multiply signed commits': 
	git init multiply-signed &&
	cd multiply-signed &&
	test_commit first &&
	echo 1 >second &&
	git add second &&
	tree=$(git write-tree) &&
	parent=$(git rev-parse HEAD^{commit}) &&
	git commit --gpg-sign -m second &&
	git cat-file commit HEAD &&
	# Avoid trailing whitespace.
	sed -e "s/^Q//" -e "s/^Z/ /" >commit <<-EOF &&
	Qtree $tree
	Qparent $parent
	Qauthor A U Thor <author@example.com> 1112912653 -0700
	Qcommitter C O Mitter <committer@example.com> 1112912653 -0700
	Qgpgsig -----BEGIN PGP SIGNATURE-----
	QZ
	Q iHQEABECADQWIQRz11h0S+chaY7FTocTtvUezd5DDQUCX/uBDRYcY29tbWl0dGVy
	Q QGV4YW1wbGUuY29tAAoJEBO29R7N3kMNd+8AoK1I8mhLHviPH+q2I5fIVgPsEtYC
	Q AKCTqBh+VabJceXcGIZuF0Ry+udbBQ==
	Q =tQ0N
	Q -----END PGP SIGNATURE-----
	Qgpgsig-sha256 -----BEGIN PGP SIGNATURE-----
	QZ
	Q iHQEABECADQWIQRz11h0S+chaY7FTocTtvUezd5DDQUCX/uBIBYcY29tbWl0dGVy
	Q QGV4YW1wbGUuY29tAAoJEBO29R7N3kMN/NEAn0XO9RYSBj2dFyozi0JKSbssYMtO
	Q AJwKCQ1BQOtuwz//IjU8TiS+6S4iUw==
	Q =pIwP
	Q -----END PGP SIGNATURE-----
	Q
	Qsecond
	EOF
	head=$(git hash-object -t commit -w commit) &&
	git reset --hard $head &&
	git verify-commit $head 2>actual &&
	grep "Good signature from" actual &&
	! grep "BAD signature from" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7510-signed-commit/multiply-signed/.git/
[main (root-commit) 2ac709c] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[main 55a0c43] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second
tree dee19491977e73e485607928be1e1a34625a4ffd
parent 2ac709c836778e8203ecc9232daa5153a166cc0f
author A U Thor <author@example.com> 1112912653 -0700
committer C O Mitter <committer@example.com> 1112912653 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iHQEABECADQWIQRz11h0S+chaY7FTocTtvUezd5DDQUCY6v4ehYcY29tbWl0dGVy
 QGV4YW1wbGUuY29tAAoJEBO29R7N3kMN0g4AnjaeKyOuvDnwUDDysKHQ3QlPI3bj
 AKDZg1+5ou8oq7x6qnX3bo0I5q6erA==
 =agMb
 -----END PGP SIGNATURE-----

second
HEAD is now at cbceced second
gpg: Good signature from "C O Mitter <committer@example.com>" [ultimate]
ok 25 - verify-commit verifies multiply signed commits

# passed all 25 test(s)
1..25
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7513-interpret-trailers.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7513-interpret-trailers/.git/
expecting success of 7513.1 'setup': 
	: >empty &&
	cat >basic_message <<-\EOF &&
		subject

		body
	EOF
	cat >complex_message_body <<-\EOF &&
		my subject

		my body which is long
		and contains some special
		chars like : = ? !

	EOF
	sed -e "s/ Z\$/ /" >complex_message_trailers <<-\EOF &&
		Fixes: Z
		Acked-by: Z
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	cat >basic_patch <<-\EOF
		---
		 foo.txt | 2 +-
		 1 file changed, 1 insertion(+), 1 deletion(-)

		diff --git a/foo.txt b/foo.txt
		index 0353767..1d91aa1 100644
		--- a/foo.txt
		+++ b/foo.txt
		@@ -1,3 +1,3 @@

		-bar
		+baz

		--
		1.9.rc0.11.ga562ddc

	EOF

ok 1 - setup

expecting success of 7513.2 'with cmd': 
	test_when_finished "git config --remove-section trailer.bug" &&
	git config trailer.bug.key "Bug-maker: " &&
	git config trailer.bug.ifExists "add" &&
	git config trailer.bug.cmd "echo \"maybe is\"" &&
	cat >expected2 <<-EOF &&

	Bug-maker: maybe is him
	Bug-maker: maybe is me
	EOF
	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
		>actual2 &&
	test_cmp expected2 actual2

ok 2 - with cmd

expecting success of 7513.3 'with cmd and $1': 
	test_when_finished "git config --remove-section trailer.bug" &&
	git config trailer.bug.key "Bug-maker: " &&
	git config trailer.bug.ifExists "add" &&
	git config trailer.bug.cmd "echo \"\$1\" is" &&
	cat >expected2 <<-EOF &&

	Bug-maker: him is him
	Bug-maker: me is me
	EOF
	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
		>actual2 &&
	test_cmp expected2 actual2

ok 3 - with cmd and $1

expecting success of 7513.4 'with cmd and $1 with sh -c': 
	test_when_finished "git config --remove-section trailer.bug" &&
	git config trailer.bug.key "Bug-maker: " &&
	git config trailer.bug.ifExists "replace" &&
	git config trailer.bug.cmd "sh -c \"echo who is \"\$1\"\"" &&
	cat >expected2 <<-EOF &&

	Bug-maker: who is me
	EOF
	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
		>actual2 &&
	test_cmp expected2 actual2

ok 4 - with cmd and $1 with sh -c

expecting success of 7513.5 'with cmd and $1 with shell script': 
	test_when_finished "git config --remove-section trailer.bug" &&
	git config trailer.bug.key "Bug-maker: " &&
	git config trailer.bug.ifExists "replace" &&
	git config trailer.bug.cmd "./echoscript" &&
	cat >expected2 <<-EOF &&

	Bug-maker: who is me
	EOF
	cat >echoscript <<-EOF &&
	#!/bin/sh
	echo who is "\$1"
	EOF
	chmod +x echoscript &&
	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
		>actual2 &&
	test_cmp expected2 actual2

ok 5 - with cmd and $1 with shell script

expecting success of 7513.6 'without config': 
	sed -e "s/ Z\$/ /" >expected <<-\EOF &&

		ack: Peff
		Reviewed-by: Z
		Acked-by: Johan
	EOF
	git interpret-trailers --trailer "ack = Peff" --trailer "Reviewed-by" \
		--trailer "Acked-by: Johan" empty >actual &&
	test_cmp expected actual

ok 6 - without config

expecting success of 7513.7 'without config in another order': 
	sed -e "s/ Z\$/ /" >expected <<-\EOF &&

		Acked-by: Johan
		Reviewed-by: Z
		ack: Peff
	EOF
	git interpret-trailers --trailer "Acked-by: Johan" --trailer "Reviewed-by" \
		--trailer "ack = Peff" empty >actual &&
	test_cmp expected actual

ok 7 - without config in another order

expecting success of 7513.8 '--trim-empty without config': 
	cat >expected <<-\EOF &&

		ack: Peff
		Acked-by: Johan
	EOF
	git interpret-trailers --trim-empty --trailer ack=Peff \
		--trailer "Reviewed-by" --trailer "Acked-by: Johan" \
		--trailer "sob:" empty >actual &&
	test_cmp expected actual

ok 8 - --trim-empty without config

expecting success of 7513.9 'with config option on the command line': 
	cat >expected <<-\EOF &&

		Acked-by: Johan
		Reviewed-by: Peff
	EOF
	{ echo && echo "Acked-by: Johan"; } |
	git -c "trailer.Acked-by.ifexists=addifdifferent" interpret-trailers \
		--trailer "Reviewed-by: Peff" --trailer "Acked-by: Johan" >actual &&
	test_cmp expected actual

ok 9 - with config option on the command line

expecting success of 7513.10 'with only a title in the message': 
	cat >expected <<-\EOF &&
		area: change

		Reviewed-by: Peff
		Acked-by: Johan
	EOF
	echo "area: change" |
	git interpret-trailers --trailer "Reviewed-by: Peff" \
		--trailer "Acked-by: Johan" >actual &&
	test_cmp expected actual

ok 10 - with only a title in the message

expecting success of 7513.11 'with multiline title in the message': 
	cat >expected <<-\EOF &&
		place of
		code: change

		Reviewed-by: Peff
		Acked-by: Johan
	EOF
	printf "%s\n" "place of" "code: change" |
	git interpret-trailers --trailer "Reviewed-by: Peff" \
		--trailer "Acked-by: Johan" >actual &&
	test_cmp expected actual

ok 11 - with multiline title in the message

expecting success of 7513.12 'with non-trailer lines mixed with Signed-off-by': 
	cat >patch <<-\EOF &&

		this is not a trailer
		this is not a trailer
		Signed-off-by: a <a@example.com>
		this is not a trailer
	EOF
	cat >expected <<-\EOF &&

		this is not a trailer
		this is not a trailer
		Signed-off-by: a <a@example.com>
		this is not a trailer
		token: value
	EOF
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 12 - with non-trailer lines mixed with Signed-off-by

expecting success of 7513.13 'with non-trailer lines mixed with cherry picked from': 
	cat >patch <<-\EOF &&

		this is not a trailer
		this is not a trailer
		(cherry picked from commit x)
		this is not a trailer
	EOF
	cat >expected <<-\EOF &&

		this is not a trailer
		this is not a trailer
		(cherry picked from commit x)
		this is not a trailer
		token: value
	EOF
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 13 - with non-trailer lines mixed with cherry picked from

expecting success of 7513.14 'with non-trailer lines mixed with a configured trailer': 
	cat >patch <<-\EOF &&

		this is not a trailer
		this is not a trailer
		My-trailer: x
		this is not a trailer
	EOF
	cat >expected <<-\EOF &&

		this is not a trailer
		this is not a trailer
		My-trailer: x
		this is not a trailer
		token: value
	EOF
	test_config trailer.my.key "My-trailer: " &&
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 14 - with non-trailer lines mixed with a configured trailer

expecting success of 7513.15 'with non-trailer lines mixed with a non-configured trailer': 
	cat >patch <<-\EOF &&

		this is not a trailer
		this is not a trailer
		I-am-not-configured: x
		this is not a trailer
	EOF
	cat >expected <<-\EOF &&

		this is not a trailer
		this is not a trailer
		I-am-not-configured: x
		this is not a trailer

		token: value
	EOF
	test_config trailer.my.key "My-trailer: " &&
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 15 - with non-trailer lines mixed with a non-configured trailer

expecting success of 7513.16 'with all non-configured trailers': 
	cat >patch <<-\EOF &&

		I-am-not-configured: x
		I-am-also-not-configured: x
	EOF
	cat >expected <<-\EOF &&

		I-am-not-configured: x
		I-am-also-not-configured: x
		token: value
	EOF
	test_config trailer.my.key "My-trailer: " &&
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 16 - with all non-configured trailers

expecting success of 7513.17 'with non-trailer lines only': 
	cat >patch <<-\EOF &&

		this is not a trailer
	EOF
	cat >expected <<-\EOF &&

		this is not a trailer

		token: value
	EOF
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 17 - with non-trailer lines only

expecting success of 7513.18 'line with leading whitespace is not trailer': 
	q_to_tab >patch <<-\EOF &&

		Qtoken: value
	EOF
	q_to_tab >expected <<-\EOF &&

		Qtoken: value

		token: value
	EOF
	git interpret-trailers --trailer "token: value" patch >actual &&
	test_cmp expected actual

ok 18 - line with leading whitespace is not trailer

expecting success of 7513.19 'multiline field treated as one trailer for 25% check': 
	q_to_tab >patch <<-\EOF &&

		Signed-off-by: a <a@example.com>
		name: value on
		Qmultiple lines
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
	EOF
	q_to_tab >expected <<-\EOF &&

		Signed-off-by: a <a@example.com>
		name: value on
		Qmultiple lines
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
		this is not a trailer
		name: value
	EOF
	git interpret-trailers --trailer "name: value" patch >actual &&
	test_cmp expected actual

ok 19 - multiline field treated as one trailer for 25% check

expecting success of 7513.20 'multiline field treated as atomic for placement': 
	q_to_tab >patch <<-\EOF &&

		another: trailer
		name: value on
		Qmultiple lines
		another: trailer
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: value on
		Qmultiple lines
		name: value
		another: trailer
	EOF
	test_config trailer.name.where after &&
	git interpret-trailers --trailer "name: value" patch >actual &&
	test_cmp expected actual

ok 20 - multiline field treated as atomic for placement

expecting success of 7513.21 'multiline field treated as atomic for replacement': 
	q_to_tab >patch <<-\EOF &&

		another: trailer
		name: value on
		Qmultiple lines
		another: trailer
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		another: trailer
		name: value
	EOF
	test_config trailer.name.ifexists replace &&
	git interpret-trailers --trailer "name: value" patch >actual &&
	test_cmp expected actual

ok 21 - multiline field treated as atomic for replacement

expecting success of 7513.22 'multiline field treated as atomic for difference check': 
	q_to_tab >patch <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
	EOF
	test_config trailer.name.ifexists addIfDifferent &&

	q_to_tab >trailer <<-\EOF &&
		name: first line
		Qsecond line
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
	EOF
	git interpret-trailers --trailer "$(cat trailer)" patch >actual &&
	test_cmp expected actual &&

	q_to_tab >trailer <<-\EOF &&
		name: first line
		QQQQQsecond line
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
		name: first line
		QQQQQsecond line
	EOF
	git interpret-trailers --trailer "$(cat trailer)" patch >actual &&
	test_cmp expected actual &&

	q_to_tab >trailer <<-\EOF &&
		name: first line *DIFFERENT*
		Qsecond line
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
		name: first line *DIFFERENT*
		Qsecond line
	EOF
	git interpret-trailers --trailer "$(cat trailer)" patch >actual &&
	test_cmp expected actual

ok 22 - multiline field treated as atomic for difference check

expecting success of 7513.23 'multiline field treated as atomic for neighbor check': 
	q_to_tab >patch <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
	EOF
	test_config trailer.name.where after &&
	test_config trailer.name.ifexists addIfDifferentNeighbor &&

	q_to_tab >trailer <<-\EOF &&
		name: first line
		Qsecond line
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		another: trailer
	EOF
	git interpret-trailers --trailer "$(cat trailer)" patch >actual &&
	test_cmp expected actual &&

	q_to_tab >trailer <<-\EOF &&
		name: first line
		QQQQQsecond line
	EOF
	q_to_tab >expected <<-\EOF &&

		another: trailer
		name: first line
		Qsecond line
		name: first line
		QQQQQsecond line
		another: trailer
	EOF
	git interpret-trailers --trailer "$(cat trailer)" patch >actual &&
	test_cmp expected actual

ok 23 - multiline field treated as atomic for neighbor check

expecting success of 7513.24 'with config setup': 
	git config trailer.ack.key "Acked-by: " &&
	cat >expected <<-\EOF &&

		Acked-by: Peff
	EOF
	git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
	test_cmp expected actual &&
	git interpret-trailers --trim-empty --trailer "Acked-by = Peff" empty >actual &&
	test_cmp expected actual &&
	git interpret-trailers --trim-empty --trailer "Acked-by :Peff" empty >actual &&
	test_cmp expected actual

ok 24 - with config setup

expecting success of 7513.25 'with config setup and ":=" as separators': 
	git config trailer.separators ":=" &&
	git config trailer.ack.key "Acked-by= " &&
	cat >expected <<-\EOF &&

		Acked-by= Peff
	EOF
	git interpret-trailers --trim-empty --trailer "ack = Peff" empty >actual &&
	test_cmp expected actual &&
	git interpret-trailers --trim-empty --trailer "Acked-by= Peff" empty >actual &&
	test_cmp expected actual &&
	git interpret-trailers --trim-empty --trailer "Acked-by : Peff" empty >actual &&
	test_cmp expected actual

ok 25 - with config setup and ":=" as separators

expecting success of 7513.26 'with config setup and "%" as separators': 
	git config trailer.separators "%" &&
	cat >expected <<-\EOF &&

		bug% 42
		count% 10
		bug% 422
	EOF
	git interpret-trailers --trim-empty --trailer "bug = 42" \
		--trailer count%10 --trailer "test: stuff" \
		--trailer "bug % 422" empty >actual &&
	test_cmp expected actual

ok 26 - with config setup and "%" as separators

expecting success of 7513.27 'with "%" as separators and a message with trailers': 
	cat >special_message <<-\EOF &&
		Special Message

		bug% 42
		count% 10
		bug% 422
	EOF
	cat >expected <<-\EOF &&
		Special Message

		bug% 42
		count% 10
		bug% 422
		count% 100
	EOF
	git interpret-trailers --trailer count%100 \
		special_message >actual &&
	test_cmp expected actual

ok 27 - with "%" as separators and a message with trailers

expecting success of 7513.28 'with config setup and ":=#" as separators': 
	git config trailer.separators ":=#" &&
	git config trailer.bug.key "Bug #" &&
	cat >expected <<-\EOF &&

		Bug #42
	EOF
	git interpret-trailers --trim-empty --trailer "bug = 42" empty >actual &&
	test_cmp expected actual

ok 28 - with config setup and ":=#" as separators

expecting success of 7513.29 'with commit basic message': 
	cat basic_message >expected &&
	echo >>expected &&
	git interpret-trailers <basic_message >actual &&
	test_cmp expected actual

ok 29 - with commit basic message

expecting success of 7513.30 'with basic patch': 
	cat basic_message >input &&
	cat basic_patch >>input &&
	cat basic_message >expected &&
	echo >>expected &&
	cat basic_patch >>expected &&
	git interpret-trailers <input >actual &&
	test_cmp expected actual

ok 30 - with basic patch

expecting success of 7513.31 'with commit complex message as argument': 
	cat complex_message_body complex_message_trailers >complex_message &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	git interpret-trailers complex_message >actual &&
	test_cmp expected actual

ok 31 - with commit complex message as argument

expecting success of 7513.32 'with 2 files arguments': 
	cat basic_message >>expected &&
	echo >>expected &&
	cat basic_patch >>expected &&
	git interpret-trailers complex_message input >actual &&
	test_cmp expected actual

ok 32 - with 2 files arguments

expecting success of 7513.33 'with message that has comments (#)': 
		cat basic_message >message_with_comments &&
		sed -e "s/ Z\$/ /" \
		    -e "s/#/$char/g" >>message_with_comments <<-EOF &&
			# comment

			# other comment
			Cc: Z
			# yet another comment
			Reviewed-by: Johan
			Reviewed-by: Z
			# last comment

		EOF
		cat basic_patch >>message_with_comments &&
		cat basic_message >expected &&
		sed -e "s/#/$char/g" >>expected <<-\EOF &&
			# comment

			Reviewed-by: Johan
			Cc: Peff
			# last comment

		EOF
		cat basic_patch >>expected &&
		git $config interpret-trailers \
			--trim-empty --trailer "Cc: Peff" \
			message_with_comments >actual &&
		test_cmp expected actual
	
ok 33 - with message that has comments (#)

expecting success of 7513.34 'with message that has comments (;)': 
		cat basic_message >message_with_comments &&
		sed -e "s/ Z\$/ /" \
		    -e "s/#/$char/g" >>message_with_comments <<-EOF &&
			# comment

			# other comment
			Cc: Z
			# yet another comment
			Reviewed-by: Johan
			Reviewed-by: Z
			# last comment

		EOF
		cat basic_patch >>message_with_comments &&
		cat basic_message >expected &&
		sed -e "s/#/$char/g" >>expected <<-\EOF &&
			# comment

			Reviewed-by: Johan
			Cc: Peff
			# last comment

		EOF
		cat basic_patch >>expected &&
		git $config interpret-trailers \
			--trim-empty --trailer "Cc: Peff" \
			message_with_comments >actual &&
		test_cmp expected actual
	
ok 34 - with message that has comments (;)

expecting success of 7513.35 'with message that has an old style conflict block': 
	cat basic_message >message_with_comments &&
	sed -e "s/ Z\$/ /" >>message_with_comments <<-\EOF &&
		# comment

		# other comment
		Cc: Z
		# yet another comment
		Reviewed-by: Johan
		Reviewed-by: Z
		# last comment

		Conflicts:

	EOF
	cat basic_message >expected &&
	cat >>expected <<-\EOF &&
		# comment

		Reviewed-by: Johan
		Cc: Peff
		# last comment

		Conflicts:

	EOF
	git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
	test_cmp expected actual

ok 35 - with message that has an old style conflict block

expecting success of 7513.36 'with commit complex message and trailer args': 
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by: Z
		Signed-off-by: Z
		Acked-by= Peff
		Bug #42
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "bug: 42" <complex_message >actual &&
	test_cmp expected actual

ok 36 - with commit complex message and trailer args

expecting success of 7513.37 'with complex patch, args and --trim-empty': 
	cat complex_message >complex_patch &&
	cat basic_patch >>complex_patch &&
	cat complex_message_body >expected &&
	cat >>expected <<-\EOF &&
		Acked-by= Peff
		Bug #42
	EOF
	cat basic_patch >>expected &&
	git interpret-trailers --trim-empty --trailer "ack: Peff" \
		--trailer "bug: 42" <complex_patch >actual &&
	test_cmp expected actual

ok 37 - with complex patch, args and --trim-empty

expecting success of 7513.38 'in-place editing with basic patch': 
	cat basic_message >message &&
	cat basic_patch >>message &&
	cat basic_message >expected &&
	echo >>expected &&
	cat basic_patch >>expected &&
	git interpret-trailers --in-place message &&
	test_cmp expected message

ok 38 - in-place editing with basic patch

expecting success of 7513.39 'in-place editing with additional trailer': 
	cat basic_message >message &&
	cat basic_patch >>message &&
	cat basic_message >expected &&
	echo >>expected &&
	cat >>expected <<-\EOF &&
		Reviewed-by: Alice
	EOF
	cat basic_patch >>expected &&
	git interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&
	test_cmp expected message

ok 39 - in-place editing with additional trailer

expecting success of 7513.40 'in-place editing on stdin disallowed': 
	test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place < basic_message

fatal: no input file given for in-place editing
ok 40 - in-place editing on stdin disallowed

expecting success of 7513.41 'in-place editing on non-existing file': 
	test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place nonexisting &&
	test_path_is_missing nonexisting

fatal: could not read input file 'nonexisting': No such file or directory
ok 41 - in-place editing on non-existing file

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 7513.42 'in-place editing doesn't clobber original file on error': 
	cat basic_message >message &&
	chmod -r message &&
	test_must_fail git interpret-trailers --trailer "Reviewed-by: Alice" --in-place message &&
	chmod +r message &&
	test_cmp message basic_message

fatal: could not read input file 'message': Permission denied
ok 42 - in-place editing doesn't clobber original file on error

expecting success of 7513.43 'using "where = before"': 
	git config trailer.bug.where "before" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Reviewed-by: Z
		Signed-off-by: Z
		Acked-by= Peff
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "bug: 42" complex_message >actual &&
	test_cmp expected actual

ok 43 - using "where = before"

expecting success of 7513.44 'overriding configuration with "--where after"': 
	git config trailer.ack.where "before" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	git interpret-trailers --where after --trailer "ack: Peff" \
		complex_message >actual &&
	test_cmp expected actual

ok 44 - overriding configuration with "--where after"

expecting success of 7513.45 'using "where = before" with "--no-where"': 
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Peff
		Acked-by= Z
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	git interpret-trailers --where after --no-where --trailer "ack: Peff" \
		--trailer "bug: 42" complex_message >actual &&
	test_cmp expected actual

ok 45 - using "where = before" with "--no-where"

expecting success of 7513.46 'using "where = after"': 
	git config trailer.ack.where "after" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "bug: 42" complex_message >actual &&
	test_cmp expected actual

ok 46 - using "where = after"

expecting success of 7513.47 'using "where = end"': 
	git config trailer.review.key "Reviewed-by" &&
	git config trailer.review.where "end" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Reviewed-by: Z
		Signed-off-by: Z
		Reviewed-by: Junio
		Reviewed-by: Johannes
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
		complex_message >actual &&
	test_cmp expected actual

ok 47 - using "where = end"

expecting success of 7513.48 'using "where = start"': 
	git config trailer.review.key "Reviewed-by" &&
	git config trailer.review.where "start" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Reviewed-by: Johannes
		Reviewed-by: Junio
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Reviewed-by: Z
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "Reviewed-by: Junio" --trailer "Reviewed-by: Johannes" \
		complex_message >actual &&
	test_cmp expected actual

ok 48 - using "where = start"

expecting success of 7513.49 'using "where = before" for a token in the middle of the message': 
	git config trailer.review.key "Reviewed-by:" &&
	git config trailer.review.where "before" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Reviewed-by:Johan
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "bug: 42" \
		--trailer "review: Johan" <complex_message >actual &&
	test_cmp expected actual

ok 49 - using "where = before" for a token in the middle of the message

expecting success of 7513.50 'using "where = before" and --trim-empty': 
	cat complex_message_body >expected &&
	cat >>expected <<-\EOF &&
		Bug #46
		Bug #42
		Acked-by= Peff
		Reviewed-by:Johan
	EOF
	git interpret-trailers --trim-empty --trailer "ack: Peff" \
		--trailer "bug: 42" --trailer "review: Johan" \
		--trailer "Bug: 46" <complex_message >actual &&
	test_cmp expected actual

ok 50 - using "where = before" and --trim-empty

expecting success of 7513.51 'the default is "ifExists = addIfDifferentNeighbor"': 
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 51 - the default is "ifExists = addIfDifferentNeighbor"

expecting success of 7513.52 'default "ifExists" is now "addIfDifferent"': 
	git config trailer.ifexists "addIfDifferent" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Acked-by= Junio
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" --trailer "ack: Peff" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 52 - default "ifExists" is now "addIfDifferent"

expecting success of 7513.53 'using "ifExists = addIfDifferent" with "where = end"': 
	git config trailer.ack.ifExists "addIfDifferent" &&
	git config trailer.ack.where "end" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Acked-by= Peff
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 53 - using "ifExists = addIfDifferent" with "where = end"

expecting success of 7513.54 'using "ifExists = addIfDifferent" with "where = before"': 
	git config trailer.ack.ifExists "addIfDifferent" &&
	git config trailer.ack.where "before" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Peff
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 54 - using "ifExists = addIfDifferent" with "where = before"

expecting success of 7513.55 'using "ifExists = addIfDifferentNeighbor" with "where = end"': 
	git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
	git config trailer.ack.where "end" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Acked-by= Peff
		Acked-by= Junio
		Tested-by: Jakub
		Acked-by= Junio
		Acked-by= Peff
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" \
		--trailer "Tested-by: Jakub" --trailer "ack: Junio" \
		--trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 55 - using "ifExists = addIfDifferentNeighbor" with "where = end"

expecting success of 7513.56 'using "ifExists = addIfDifferentNeighbor"  with "where = after"': 
	git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
	git config trailer.ack.where "after" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
		Tested-by: Jakub
	EOF
	git interpret-trailers --trailer "ack: Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" \
		--trailer "Tested-by: Jakub" --trailer "ack: Junio" \
		--trailer "ack: Junio" --trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 56 - using "ifExists = addIfDifferentNeighbor"  with "where = after"

expecting success of 7513.57 'using "ifExists = addIfDifferentNeighbor" and --trim-empty': 
	git config trailer.ack.ifExists "addIfDifferentNeighbor" &&
	cat complex_message_body >expected &&
	cat >>expected <<-\EOF &&
		Bug #42
		Acked-by= Peff
		Acked-by= Junio
		Acked-by= Peff
	EOF
	git interpret-trailers --trim-empty --trailer "ack: Peff" \
		--trailer "Acked-by= Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 57 - using "ifExists = addIfDifferentNeighbor" and --trim-empty

expecting success of 7513.58 'using "ifExists = add" with "where = end"': 
	git config trailer.ack.ifExists "add" &&
	git config trailer.ack.where "end" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Acked-by= Peff
		Acked-by= Peff
		Tested-by: Jakub
		Acked-by= Junio
		Tested-by: Johannes
		Acked-by= Peff
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "Acked-by= Peff" --trailer "review:" \
		--trailer "Tested-by: Jakub" --trailer "ack: Junio" \
		--trailer "bug: 42" --trailer "Tested-by: Johannes" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 58 - using "ifExists = add" with "where = end"

expecting success of 7513.59 'using "ifExists = add" with "where = after"': 
	git config trailer.ack.ifExists "add" &&
	git config trailer.ack.where "after" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Acked-by= Peff
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "Acked-by= Peff" --trailer "review:" \
		--trailer "ack: Junio" --trailer "bug: 42" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 59 - using "ifExists = add" with "where = after"

expecting success of 7513.60 'overriding configuration with "--if-exists replace"': 
	git config trailer.fix.key "Fixes: " &&
	git config trailer.fix.ifExists "add" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Fixes: 22
	EOF
	git interpret-trailers --if-exists replace --trailer "review:" \
		--trailer "fix=53" --trailer "fix=22" --trailer "bug: 42" \
		<complex_message >actual &&
	test_cmp expected actual

ok 60 - overriding configuration with "--if-exists replace"

expecting success of 7513.61 'using "ifExists = replace"': 
	git config trailer.fix.key "Fixes: " &&
	git config trailer.fix.ifExists "replace" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
		Fixes: 22
	EOF
	git interpret-trailers --trailer "review:" \
		--trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
		--trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 61 - using "ifExists = replace"

expecting success of 7513.62 'using "ifExists = replace" with "where = after"': 
	git config trailer.fix.where "after" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: 22
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" \
		--trailer "fix=53" --trailer "ack: Junio" --trailer "fix=22" \
		--trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 62 - using "ifExists = replace" with "where = after"

expecting success of 7513.63 'using "ifExists = doNothing"': 
	git config trailer.fix.ifExists "doNothing" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "ack: Junio" --trailer "fix=22" \
		--trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 63 - using "ifExists = doNothing"

expecting success of 7513.64 'the default is "ifMissing = add"': 
	git config trailer.cc.key "Cc: " &&
	git config trailer.cc.where "before" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Cc: Linus
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "cc=Linus" --trailer "ack: Junio" \
		--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 64 - the default is "ifMissing = add"

expecting success of 7513.65 'overriding configuration with "--if-missing doNothing"': 
	git config trailer.ifmissing "add" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --if-missing doNothing \
		--trailer "review:" --trailer "fix=53" \
		--trailer "cc=Linus" --trailer "ack: Junio" \
		--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 65 - overriding configuration with "--if-missing doNothing"

expecting success of 7513.66 'when default "ifMissing" is "doNothing"': 
	git config trailer.ifmissing "doNothing" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "cc=Linus" --trailer "ack: Junio" \
		--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual &&
	git config trailer.ifmissing "add"

ok 66 - when default "ifMissing" is "doNothing"

expecting success of 7513.67 'using "ifMissing = add" with "where = end"': 
	git config trailer.cc.key "Cc: " &&
	git config trailer.cc.where "end" &&
	git config trailer.cc.ifMissing "add" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
		Cc: Linus
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "ack: Junio" --trailer "fix=22" \
		--trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 67 - using "ifMissing = add" with "where = end"

expecting success of 7513.68 'using "ifMissing = add" with "where = before"': 
	git config trailer.cc.key "Cc: " &&
	git config trailer.cc.where "before" &&
	git config trailer.cc.ifMissing "add" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Cc: Linus
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "ack: Junio" --trailer "fix=22" \
		--trailer "bug: 42" --trailer "cc=Linus" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 68 - using "ifMissing = add" with "where = before"

expecting success of 7513.69 'using "ifMissing = doNothing"': 
	git config trailer.cc.ifMissing "doNothing" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=53" \
		--trailer "cc=Linus" --trailer "ack: Junio" \
		--trailer "fix=22" --trailer "bug: 42" --trailer "ack: Peff" \
		<complex_message >actual &&
	test_cmp expected actual

ok 69 - using "ifMissing = doNothing"

expecting success of 7513.70 'default "where" is now "after"': 
	git config trailer.where "after" &&
	git config --unset trailer.ack.where &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Bug #42
		Fixes: Z
		Acked-by= Z
		Acked-by= Peff
		Acked-by= Peff
		Acked-by= Junio
		Acked-by= Peff
		Reviewed-by:
		Signed-off-by: Z
		Tested-by: Jakub
		Tested-by: Johannes
	EOF
	git interpret-trailers --trailer "ack: Peff" \
		--trailer "Acked-by= Peff" --trailer "review:" \
		--trailer "Tested-by: Jakub" --trailer "ack: Junio" \
		--trailer "bug: 42" --trailer "Tested-by: Johannes" \
		--trailer "ack: Peff" <complex_message >actual &&
	test_cmp expected actual

ok 70 - default "where" is now "after"

expecting success of 7513.71 'with simple command': 
	git config trailer.sign.key "Signed-off-by: " &&
	git config trailer.sign.where "after" &&
	git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
	git config trailer.sign.command "echo \"A U Thor <author@example.com>\"" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=22" \
		<complex_message >actual &&
	test_cmp expected actual

ok 71 - with simple command

expecting success of 7513.72 'with command using committer information': 
	git config trailer.sign.ifExists "addIfDifferent" &&
	git config trailer.sign.command "echo \"\$GIT_COMMITTER_NAME <\$GIT_COMMITTER_EMAIL>\"" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: C O Mitter <committer@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=22" \
		<complex_message >actual &&
	test_cmp expected actual

ok 72 - with command using committer information

expecting success of 7513.73 'with command using author information': 
	git config trailer.sign.key "Signed-off-by: " &&
	git config trailer.sign.where "after" &&
	git config trailer.sign.ifExists "addIfDifferentNeighbor" &&
	git config trailer.sign.command "echo \"\$GIT_AUTHOR_NAME <\$GIT_AUTHOR_EMAIL>\"" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=22" \
		<complex_message >actual &&
	test_cmp expected actual

ok 73 - with command using author information

expecting success of 7513.74 'setup a commit': 
	echo "Content of the first commit." > a.txt &&
	git add a.txt &&
	git commit -m "Add file a.txt"

[master (root-commit) 4043cf9] Add file a.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
ok 74 - setup a commit

expecting success of 7513.75 'cmd takes precedence over command': 
	test_when_finished "git config --unset trailer.fix.cmd" &&
	git config trailer.fix.ifExists "replace" &&
	git config trailer.fix.cmd "test -n \"\$1\" && git log -1 --oneline --format=\"%h (%aN)\" \
	--abbrev-commit --abbrev=14 \"\$1\" || true" &&
	git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" \
		--abbrev-commit --abbrev=14 \$ARG" &&
	FIXED=$(git log -1 --oneline --format="%h (%aN)" --abbrev-commit --abbrev=14 HEAD) &&
	cat complex_message_body >expected2 &&
	sed -e "s/ Z\$/ /" >>expected2 <<-EOF &&
		Fixes: $FIXED
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
		<complex_message >actual2 &&
	test_cmp expected2 actual2

ok 75 - cmd takes precedence over command

expecting success of 7513.76 'with command using $ARG': 
	git config trailer.fix.ifExists "replace" &&
	git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" &&
	FIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-EOF &&
		Fixes: $FIXED
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
		<complex_message >actual &&
	test_cmp expected actual

ok 76 - with command using $ARG

expecting success of 7513.77 'with failing command using $ARG': 
	git config trailer.fix.ifExists "replace" &&
	git config trailer.fix.command "false \$ARG" &&
	cat complex_message_body >expected &&
	sed -e "s/ Z\$/ /" >>expected <<-EOF &&
		Fixes: Z
		Acked-by= Z
		Reviewed-by:
		Signed-off-by: Z
		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
		<complex_message >actual &&
	test_cmp expected actual

error: running trailer command 'false ' failed
error: running trailer command 'false HEAD' failed
ok 77 - with failing command using $ARG

expecting success of 7513.78 'with empty tokens': 
	git config --unset trailer.fix.command &&
	cat >expected <<-EOF &&

		Signed-off-by: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer ":" --trailer ":test" >actual <<-EOF &&
	EOF
	test_cmp expected actual

error: empty trailer token in trailer ':'
error: empty trailer token in trailer ':test'
ok 78 - with empty tokens

expecting success of 7513.79 'with command but no key': 
	git config --unset trailer.sign.key &&
	cat >expected <<-EOF &&

		sign: A U Thor <author@example.com>
	EOF
	git interpret-trailers >actual <<-EOF &&
	EOF
	test_cmp expected actual

ok 79 - with command but no key

expecting success of 7513.80 'with no command and no key': 
	git config --unset trailer.review.key &&
	cat >expected <<-EOF &&

		review: Junio
		sign: A U Thor <author@example.com>
	EOF
	git interpret-trailers --trailer "review:Junio" >actual <<-EOF &&
	EOF
	test_cmp expected actual

ok 80 - with no command and no key

expecting success of 7513.81 'with cut line': 
	cat >expected <<-\EOF &&
		my subject

		review: Brian
		sign: A U Thor <author@example.com>
		# ------------------------ >8 ------------------------
		ignore this
	EOF
	git interpret-trailers --trailer review:Brian >actual <<-\EOF &&
		my subject
		# ------------------------ >8 ------------------------
		ignore this
	EOF
	test_cmp expected actual

ok 81 - with cut line

expecting success of 7513.82 'only trailers': 
	git config trailer.sign.command "echo config-value" &&
	cat >expected <<-\EOF &&
		existing: existing-value
		sign: config-value
		added: added-value
	EOF
	git interpret-trailers \
		--trailer added:added-value \
		--only-trailers >actual <<-\EOF &&
		my subject

		my body

		existing: existing-value
	EOF
	test_cmp expected actual

ok 82 - only trailers

expecting success of 7513.83 'only-trailers omits non-trailer in middle of block': 
	git config trailer.sign.command "echo config-value" &&
	cat >expected <<-\EOF &&
		Signed-off-by: nobody <nobody@nowhere>
		Signed-off-by: somebody <somebody@somewhere>
		sign: config-value
	EOF
	git interpret-trailers --only-trailers >actual <<-\EOF &&
		subject

		it is important that the trailers below are signed-off-by
		so that they meet the "25% trailers Git knows about" heuristic

		Signed-off-by: nobody <nobody@nowhere>
		this is not a trailer
		Signed-off-by: somebody <somebody@somewhere>
	EOF
	test_cmp expected actual

ok 83 - only-trailers omits non-trailer in middle of block

expecting success of 7513.84 'only input': 
	git config trailer.sign.command "echo config-value" &&
	cat >expected <<-\EOF &&
		existing: existing-value
	EOF
	git interpret-trailers \
		--only-trailers --only-input >actual <<-\EOF &&
		my subject

		my body

		existing: existing-value
	EOF
	test_cmp expected actual

ok 84 - only input

expecting success of 7513.85 'unfold': 
	cat >expected <<-\EOF &&
		foo: continued across several lines
	EOF
	# pass through tr to make leading and trailing whitespace more obvious
	tr _ " " <<-\EOF |
		my subject

		my body

		foo:_
		__continued
		___across
		____several
		_____lines
		___
	EOF
	git interpret-trailers --only-trailers --only-input --unfold >actual &&
	test_cmp expected actual

ok 85 - unfold

expecting success of 7513.86 'handling of --- lines in input': 
	echo "real-trailer: just right" >expected &&

	git interpret-trailers --parse >actual <<-\EOF &&
	subject

	body

	not-a-trailer: too soon
	------ this is just a line in the commit message with a bunch of
	------ dashes; it does not have any syntactic meaning.

	real-trailer: just right
	---
	below the dashed line may be a patch, etc.

	not-a-trailer: too late
	EOF

	test_cmp expected actual

ok 86 - handling of --- lines in input

expecting success of 7513.87 'suppress --- handling': 
	echo "real-trailer: just right" >expected &&

	git interpret-trailers --parse --no-divider >actual <<-\EOF &&
	subject

	This commit message has a "---" in it, but because we tell
	interpret-trailers not to respect that, it has no effect.

	not-a-trailer: too soon
	---

	This is still the commit message body.

	real-trailer: just right
	EOF

	test_cmp expected actual

ok 87 - suppress --- handling

# passed all 87 test(s)
1..87
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7514-commit-patch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7514-commit-patch/.git/
expecting success of 7514.1 'setup (initial)': 
	echo line1 >file &&
	git add file &&
	git commit -m commit1

[master (root-commit) 8d800e1] commit1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - setup (initial)

expecting success of 7514.2 'edit hunk "commit -p -m message"': 
	test_when_finished "rm -f editor_was_started" &&
	rm -f editor_was_started &&
	echo more >>file &&
	echo e | env GIT_EDITOR=": >editor_was_started" git commit -p -m commit2 file &&
	test -r editor_was_started

diff --git a/file b/file
index a29bdeb..3049d20 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
 line1
+more
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
[master 1e5318c] commit2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 2 - edit hunk "commit -p -m message"

expecting success of 7514.3 'edit hunk "commit --dry-run -p -m message"': 
	test_when_finished "rm -f editor_was_started" &&
	rm -f editor_was_started &&
	echo more >>file &&
	echo e | env GIT_EDITOR=": >editor_was_started" git commit -p -m commit3 file &&
	test -r editor_was_started

diff --git a/file b/file
index 3049d20..c1dcbdb 100644
--- a/file
+++ b/file
@@ -1,2 +1,3 @@
 line1
 more
+more
(1/1) Stage this hunk [y,n,q,a,d,e,?]? 
[master 0e7b2ea] commit3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 3 - edit hunk "commit --dry-run -p -m message"

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7515-status-symlinks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7515-status-symlinks/.git/
expecting success of 7515.1 'setup': 
	echo .gitignore >.gitignore &&
	echo actual >>.gitignore &&
	echo expect >>.gitignore &&
	mkdir dir &&
	echo x >dir/file1 &&
	echo y >dir/file2 &&
	git add dir &&
	git commit -m initial &&
	git tag initial

[master (root-commit) 1048606] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 dir/file1
 create mode 100644 dir/file2
ok 1 - setup

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7515.2 'symlink to a directory': 
	test_when_finished "rm symlink" &&
	ln -s dir symlink &&
	echo "?? symlink" >expect &&
	git status --porcelain >actual &&
	test_cmp expect actual

ok 2 - symlink to a directory

expecting success of 7515.3 'symlink replacing a directory': 
	test_when_finished "rm -rf copy && git reset --hard initial" &&
	mkdir copy &&
	cp dir/file1 copy/file1 &&
	echo "changed in copy" >copy/file2 &&
	git add copy &&
	git commit -m second &&
	rm -rf copy &&
	ln -s dir copy &&
	echo " D copy/file1" >expect &&
	echo " D copy/file2" >>expect &&
	echo "?? copy" >>expect &&
	git status --porcelain >actual &&
	test_cmp expect actual

[master a9708ba] second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 copy/file1
 create mode 100644 copy/file2
HEAD is now at 1048606 initial
ok 3 - symlink replacing a directory

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7516-commit-races.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7516-commit-races/.git/
expecting success of 7516.1 'race to create orphan commit': 
	write_script hare-editor <<-\EOF &&
	git commit --allow-empty -m hare
	EOF
	test_must_fail env EDITOR=./hare-editor git commit --allow-empty -m tortoise -e &&
	git show -s --pretty=format:%s >subject &&
	grep hare subject &&
	test -z "$(git show -s --pretty=format:%P)"

[master (root-commit) ba9015c] hare
 Author: A U Thor <author@example.com>
fatal: cannot lock ref 'HEAD': reference already exists
hare
ok 1 - race to create orphan commit

expecting success of 7516.2 'race to create non-orphan commit': 
	write_script airplane-editor <<-\EOF &&
	git commit --allow-empty -m airplane
	EOF
	git checkout --orphan branch &&
	git commit --allow-empty -m base &&
	git rev-parse HEAD >base &&
	test_must_fail env EDITOR=./airplane-editor git commit --allow-empty -m ship -e &&
	git show -s --pretty=format:%s >subject &&
	grep airplane subject &&
	git rev-parse HEAD^ >parent &&
	test_cmp base parent

Switched to a new branch 'branch'
[branch (root-commit) a4b5938] base
 Author: A U Thor <author@example.com>
[branch 7381062] airplane
 Author: A U Thor <author@example.com>
fatal: cannot lock ref 'HEAD': is at 7381062986c200ad56d9a48e7a49719e434604a0 but expected a4b5938bdb0638bd7b0fd149a017cda4db88b551
airplane
ok 2 - race to create non-orphan commit

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7518-ident-corner-cases.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7518-ident-corner-cases/.git/
expecting success of 7518.1 'empty name and missing email': 
	(
		sane_unset GIT_AUTHOR_EMAIL &&
		GIT_AUTHOR_NAME= &&
		test_must_fail git commit --allow-empty -m foo 2>err &&
		test_i18ngrep ! "(null)" err
	)

ok 1 - empty name and missing email

expecting success of 7518.2 'commit rejects all-crud name': 
	test_must_fail env GIT_AUTHOR_NAME=" .;<>" \
		git commit --allow-empty -m foo

fatal: name consists only of disallowed characters:  .;<>
ok 2 - commit rejects all-crud name

expecting success of 7518.3 'empty configured name does not auto-detect': 
	(
		sane_unset GIT_AUTHOR_NAME &&
		test_must_fail \
			git -c user.name= commit --allow-empty -m foo 2>err &&
		test_i18ngrep "empty ident name" err &&
		test_i18ngrep "Author identity unknown" err
	)

fatal: empty ident name (for <author@example.com>) not allowed
Author identity unknown
ok 3 - empty configured name does not auto-detect

expecting success of 7518.4 'empty configured name does not auto-detect for committer': 
	(
		sane_unset GIT_COMMITTER_NAME &&
		test_must_fail \
			git -c user.name= commit --allow-empty -m foo 2>err &&
		test_i18ngrep "empty ident name" err &&
		test_i18ngrep "Committer identity unknown" err
	)

fatal: empty ident name (for <committer@example.com>) not allowed
Committer identity unknown
ok 4 - empty configured name does not auto-detect for committer

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7517-per-repo-email.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7517-per-repo-email/.git/
expecting success of 7517.1 'setup a likely user.useConfigOnly use case': 
	# we want to make sure a reflog is written, since that needs
	# a non-strict ident. So be sure we have an actual commit.
	test_commit foo &&

	sane_unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
	sane_unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL &&
	git config user.name "test" &&
	git config --global user.useConfigOnly true

[main (root-commit) ddd63c9] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
ok 1 - setup a likely user.useConfigOnly use case

expecting success of 7517.2 'fails committing if clone email is not set': 
	test_must_fail git commit --allow-empty -m msg

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
ok 2 - fails committing if clone email is not set

expecting success of 7517.3 'fails committing if clone email is not set, but EMAIL set': 
	test_must_fail env EMAIL=test@fail.com git commit --allow-empty -m msg

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
ok 3 - fails committing if clone email is not set, but EMAIL set

expecting success of 7517.4 'succeeds committing if clone email is set': 
	test_config user.email "test@ok.com" &&
	git commit --allow-empty -m msg

[main f3d9b79] msg
ok 4 - succeeds committing if clone email is set

expecting success of 7517.5 'succeeds cloning if global email is not set': 
	git clone . clone

Cloning into 'clone'...
done.
ok 5 - succeeds cloning if global email is not set

expecting success of 7517.6 'set up rebase scenarios': 
	# temporarily enable an actual ident for this setup
	test_config user.email foo@example.com &&
	test_commit new &&
	git branch side-without-commit HEAD^ &&
	git checkout -b side-with-commit HEAD^ &&
	test_commit side

[main a31892e] new
 1 file changed, 1 insertion(+)
 create mode 100644 new.t
Switched to a new branch 'side-with-commit'
[side-with-commit 1946d3f] side
 1 file changed, 1 insertion(+)
 create mode 100644 side.t
ok 6 - set up rebase scenarios

expecting success of 7517.7 'fast-forward rebase does not care about ident': 
	git checkout -B tmp side-without-commit &&
	git rebase main

Switched to a new branch 'tmp'

                                                                                
Successfully rebased and updated refs/heads/tmp.
ok 7 - fast-forward rebase does not care about ident

expecting success of 7517.8 'non-fast-forward rebase refuses to write commits': 
	test_when_finished "git rebase --abort || true" &&
	git checkout -B tmp side-with-commit &&
	test_must_fail git rebase main

Reset branch 'tmp'
Rebasing (1/1)
Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
ok 8 - non-fast-forward rebase refuses to write commits

expecting success of 7517.9 'fast-forward rebase does not care about ident (interactive)': 
	git checkout -B tmp side-without-commit &&
	git rebase -i main

Reset branch 'tmp'

                                                                                
Successfully rebased and updated refs/heads/tmp.
ok 9 - fast-forward rebase does not care about ident (interactive)

expecting success of 7517.10 'non-fast-forward rebase refuses to write commits (interactive)': 
	test_when_finished "git rebase --abort || true" &&
	git checkout -B tmp side-with-commit &&
	test_must_fail git rebase -i main

Reset branch 'tmp'
Rebasing (1/1)
Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled
ok 10 - non-fast-forward rebase refuses to write commits (interactive)

expecting success of 7517.11 'noop interactive rebase does not care about ident': 
	git checkout -B tmp side-with-commit &&
	git rebase -i HEAD^

Reset branch 'tmp'

                                                                                
Successfully rebased and updated refs/heads/tmp.
ok 11 - noop interactive rebase does not care about ident

expecting success of 7517.12 'author.name overrides user.name': 
	test_config user.name user &&
	test_config user.email user@example.com &&
	test_config author.name author &&
	test_commit author-name-override-user &&
	echo author user@example.com > expected-author &&
	echo user user@example.com > expected-committer &&
	git log --format="%an %ae" -1 > actual-author &&
	git log --format="%cn %ce" -1 > actual-committer &&
	test_cmp expected-author actual-author &&
	test_cmp expected-committer actual-committer

[tmp 52999d1] author-name-override-user
 Author: author <user@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 author-name-override-user.t
ok 12 - author.name overrides user.name

expecting success of 7517.13 'author.email overrides user.email': 
	test_config user.name user &&
	test_config user.email user@example.com &&
	test_config author.email author@example.com &&
	test_commit author-email-override-user &&
	echo user author@example.com > expected-author &&
	echo user user@example.com > expected-committer &&
	git log --format="%an %ae" -1 > actual-author &&
	git log --format="%cn %ce" -1 > actual-committer &&
	test_cmp expected-author actual-author &&
	test_cmp expected-committer actual-committer

[tmp e6f53d6] author-email-override-user
 Author: user <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 author-email-override-user.t
ok 13 - author.email overrides user.email

expecting success of 7517.14 'committer.name overrides user.name': 
	test_config user.name user &&
	test_config user.email user@example.com &&
	test_config committer.name committer &&
	test_commit committer-name-override-user &&
	echo user user@example.com > expected-author &&
	echo committer user@example.com > expected-committer &&
	git log --format="%an %ae" -1 > actual-author &&
	git log --format="%cn %ce" -1 > actual-committer &&
	test_cmp expected-author actual-author &&
	test_cmp expected-committer actual-committer

[tmp bdc357a] committer-name-override-user
 Author: user <user@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 committer-name-override-user.t
ok 14 - committer.name overrides user.name

expecting success of 7517.15 'committer.email overrides user.email': 
	test_config user.name user &&
	test_config user.email user@example.com &&
	test_config committer.email committer@example.com &&
	test_commit committer-email-override-user &&
	echo user user@example.com > expected-author &&
	echo user committer@example.com > expected-committer &&
	git log --format="%an %ae" -1 > actual-author &&
	git log --format="%cn %ce" -1 > actual-committer &&
	test_cmp expected-author actual-author &&
	test_cmp expected-committer actual-committer

[tmp de2310d] committer-email-override-user
 Author: user <user@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 committer-email-override-user.t
ok 15 - committer.email overrides user.email

expecting success of 7517.16 'author and committer environment variables override config settings': 
	test_config user.name user &&
	test_config user.email user@example.com &&
	test_config author.name author &&
	test_config author.email author@example.com &&
	test_config committer.name committer &&
	test_config committer.email committer@example.com &&
	GIT_AUTHOR_NAME=env_author && export GIT_AUTHOR_NAME &&
	GIT_AUTHOR_EMAIL=env_author@example.com && export GIT_AUTHOR_EMAIL &&
	GIT_COMMITTER_NAME=env_commit && export GIT_COMMITTER_NAME &&
	GIT_COMMITTER_EMAIL=env_commit@example.com && export GIT_COMMITTER_EMAIL &&
	test_commit env-override-conf &&
	echo env_author env_author@example.com > expected-author &&
	echo env_commit env_commit@example.com > expected-committer &&
	git log --format="%an %ae" -1 > actual-author &&
	git log --format="%cn %ce" -1 > actual-committer &&
	sane_unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
	sane_unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL &&
	test_cmp expected-author actual-author &&
	test_cmp expected-committer actual-committer

[tmp 9b4fdf4] env-override-conf
 Author: env_author <env_author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 env-override-conf.t
ok 16 - author and committer environment variables override config settings

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7520-ignored-hook-warning.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7520-ignored-hook-warning/.git/
expecting success of 7520.1 'setup': 
	test_hook --setup pre-commit <<-\EOF
	exit 0
	EOF

ok 1 - setup

expecting success of 7520.2 'no warning if hook is not ignored': 
	git commit --allow-empty -m "more" 2>message &&
	test_i18ngrep ! -e "hook was ignored" message

[master (root-commit) 4140ed5] more
 Author: A U Thor <author@example.com>
ok 2 - no warning if hook is not ignored

expecting success of 7520.3 'warning if hook is ignored': 
	test_hook --disable pre-commit &&
	git commit --allow-empty -m "even more" 2>message &&
	test_i18ngrep -e "hook was ignored" message

[master d262933] even more
 Author: A U Thor <author@example.com>
hint: The '.git/hooks/pre-commit' hook was ignored because it's not set as executable.
ok 3 - warning if hook is ignored

expecting success of 7520.4 'no warning if advice.ignoredHook set to false': 
	test_config advice.ignoredHook false &&
	test_hook --disable pre-commit &&
	git commit --allow-empty -m "even more" 2>message &&
	test_i18ngrep ! -e "hook was ignored" message

[master 9fbd7b1] even more
 Author: A U Thor <author@example.com>
ok 4 - no warning if advice.ignoredHook set to false

expecting success of 7520.5 'no warning if unset advice.ignoredHook and hook removed': 
	test_hook --remove pre-commit &&
	test_unconfig advice.ignoredHook &&
	git commit --allow-empty -m "even more" 2>message &&
	test_i18ngrep ! -e "hook was ignored" message

[master f4891a6] even more
 Author: A U Thor <author@example.com>
ok 5 - no warning if unset advice.ignoredHook and hook removed

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7521-ignored-mode.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7521-ignored-mode/.git/
expecting success of 7521.1 'setup initial commit and ignore file': 
	cat >.gitignore <<-\EOF &&
	*.ign
	ignored_dir/
	!*.unignore
	EOF
	git add . &&
	git commit -m "Initial commit"

[master (root-commit) 09593c1] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 .gitignore
ok 1 - setup initial commit and ignore file

expecting success of 7521.2 'Verify behavior of status on directories with ignored files': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! dir/ignored/ignored_1.ign
	! dir/ignored/ignored_2.ign
	! ignored/ignored_1.ign
	! ignored/ignored_2.ign
	EOF

	mkdir -p ignored dir/ignored &&
	touch ignored/ignored_1.ign ignored/ignored_2.ign \
		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&

	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
	test_cmp expect output

Removing dir/
Removing expect
Removing ignored/
Removing output
ok 2 - Verify behavior of status on directories with ignored files

expecting success of 7521.3 'Verify status behavior on directory with tracked & ignored files': 
	test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! dir/tracked_ignored/ignored_1.ign
	! dir/tracked_ignored/ignored_2.ign
	! tracked_ignored/ignored_1.ign
	! tracked_ignored/ignored_2.ign
	EOF

	mkdir -p tracked_ignored dir/tracked_ignored &&
	touch tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
		tracked_ignored/ignored_1.ign tracked_ignored/ignored_2.ign \
		dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 \
		dir/tracked_ignored/ignored_1.ign dir/tracked_ignored/ignored_2.ign &&

	git add tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
		dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 &&
	git commit -m "commit tracked files" &&

	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
	test_cmp expect output

[master afee1ec] commit tracked files
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir/tracked_ignored/tracked_1
 create mode 100644 dir/tracked_ignored/tracked_2
 create mode 100644 tracked_ignored/tracked_1
 create mode 100644 tracked_ignored/tracked_2
Removing dir/tracked_ignored/ignored_1.ign
Removing dir/tracked_ignored/ignored_2.ign
Removing expect
Removing output
Removing tracked_ignored/ignored_1.ign
Removing tracked_ignored/ignored_2.ign
HEAD is now at 09593c1 Initial commit
ok 3 - Verify status behavior on directory with tracked & ignored files

expecting success of 7521.4 'Verify status behavior on directory with untracked and ignored files': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? dir/untracked_ignored/untracked_1
	? dir/untracked_ignored/untracked_2
	? expect
	? output
	? untracked_ignored/untracked_1
	? untracked_ignored/untracked_2
	! dir/untracked_ignored/ignored_1.ign
	! dir/untracked_ignored/ignored_2.ign
	! untracked_ignored/ignored_1.ign
	! untracked_ignored/ignored_2.ign
	EOF

	mkdir -p untracked_ignored dir/untracked_ignored &&
	touch untracked_ignored/untracked_1 untracked_ignored/untracked_2 \
		untracked_ignored/ignored_1.ign untracked_ignored/ignored_2.ign \
		dir/untracked_ignored/untracked_1 dir/untracked_ignored/untracked_2 \
		dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign &&

	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
	test_cmp expect output

Removing dir/
Removing expect
Removing output
Removing untracked_ignored/
ok 4 - Verify status behavior on directory with untracked and ignored files

expecting success of 7521.5 'Verify status matching ignored files on ignored directory': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! ignored_dir/
	EOF

	mkdir ignored_dir &&
	touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
		ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign &&

	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
	test_cmp expect output

Removing expect
Removing ignored_dir/
Removing output
ok 5 - Verify status matching ignored files on ignored directory

expecting success of 7521.6 'Verify status behavior on ignored directory containing tracked file': 
	test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! ignored_dir/ignored_1
	! ignored_dir/ignored_1.ign
	! ignored_dir/ignored_2
	! ignored_dir/ignored_2.ign
	EOF

	mkdir ignored_dir &&
	touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
		ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
		ignored_dir/tracked &&
	git add -f ignored_dir/tracked &&
	git commit -m "Force add file in ignored directory" &&
	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
	test_cmp expect output

[master 264b232] Force add file in ignored directory
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ignored_dir/tracked
Removing expect
Removing ignored_dir/ignored_1
Removing ignored_dir/ignored_1.ign
Removing ignored_dir/ignored_2
Removing ignored_dir/ignored_2.ign
Removing output
HEAD is now at 09593c1 Initial commit
ok 6 - Verify status behavior on ignored directory containing tracked file

expecting success of 7521.7 'Verify matching ignored files with --untracked-files=normal': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	? untracked_dir/
	! ignored_dir/
	! ignored_files/ignored_1.ign
	! ignored_files/ignored_2.ign
	EOF

	mkdir ignored_dir ignored_files untracked_dir &&
	touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
		ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
		untracked_dir/untracked &&
	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
	test_cmp expect output

Removing expect
Removing ignored_dir/
Removing ignored_files/
Removing output
Removing untracked_dir/
ok 7 - Verify matching ignored files with --untracked-files=normal

expecting success of 7521.8 'Verify matching ignored files with --untracked-files=normal': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	? untracked_dir/
	! ignored_dir/
	! ignored_files/ignored_1.ign
	! ignored_files/ignored_2.ign
	EOF

	mkdir ignored_dir ignored_files untracked_dir &&
	touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
		ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
		untracked_dir/untracked &&
	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
	test_cmp expect output

Removing expect
Removing ignored_dir/
Removing ignored_files/
Removing output
Removing untracked_dir/
ok 8 - Verify matching ignored files with --untracked-files=normal

expecting success of 7521.9 'Verify status behavior on ignored directory containing tracked file': 
	test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! ignored_dir/ignored_1
	! ignored_dir/ignored_1.ign
	! ignored_dir/ignored_2
	! ignored_dir/ignored_2.ign
	EOF

	mkdir ignored_dir &&
	touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
		ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
		ignored_dir/tracked &&
	git add -f ignored_dir/tracked &&
	git commit -m "Force add file in ignored directory" &&
	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
	test_cmp expect output

[master 264b232] Force add file in ignored directory
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ignored_dir/tracked
Removing expect
Removing ignored_dir/ignored_1
Removing ignored_dir/ignored_1.ign
Removing ignored_dir/ignored_2
Removing ignored_dir/ignored_2.ign
Removing output
HEAD is now at 09593c1 Initial commit
ok 9 - Verify status behavior on ignored directory containing tracked file

expecting success of 7521.10 'Verify behavior of status with --ignored=no': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	EOF

	mkdir -p ignored dir/ignored &&
	touch ignored/ignored_1.ign ignored/ignored_2.ign \
		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&

	git status --porcelain=v2 --ignored=no --untracked-files=all >output &&
	test_cmp expect output

Removing dir/
Removing expect
Removing ignored/
Removing output
ok 10 - Verify behavior of status with --ignored=no

expecting success of 7521.11 'Verify behavior of status with --ignored=traditional and --untracked-files=all': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! dir/ignored/ignored_1.ign
	! dir/ignored/ignored_2.ign
	! ignored/ignored_1.ign
	! ignored/ignored_2.ign
	EOF

	mkdir -p ignored dir/ignored &&
	touch ignored/ignored_1.ign ignored/ignored_2.ign \
		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&

	git status --porcelain=v2 --ignored=traditional --untracked-files=all >output &&
	test_cmp expect output

Removing dir/
Removing expect
Removing ignored/
Removing output
ok 11 - Verify behavior of status with --ignored=traditional and --untracked-files=all

expecting success of 7521.12 'Verify behavior of status with --ignored=traditional and --untracked-files=normal': 
	test_when_finished "git clean -fdx" &&
	cat >expect <<-\EOF &&
	? expect
	? output
	! dir/
	! ignored/
	EOF

	mkdir -p ignored dir/ignored &&
	touch ignored/ignored_1.ign ignored/ignored_2.ign \
		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&

	git status --porcelain=v2 --ignored=traditional --untracked-files=normal >output &&
	test_cmp expect output

Removing dir/
Removing expect
Removing ignored/
Removing output
ok 12 - Verify behavior of status with --ignored=traditional and --untracked-files=normal

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7524-commit-summary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7524-commit-summary/.git/
expecting success of 7524.1 'setup': 
	test_seq 101 200 >file &&
	git add file &&
	git commit -m initial &&
	git tag initial

[master (root-commit) 12dd244] initial
 Author: A U Thor <author@example.com>
 1 file changed, 100 insertions(+)
 create mode 100644 file
ok 1 - setup

expecting success of 7524.2 'commit summary ignores rewrites': 
	git reset --hard initial &&
	test_seq 200 300 >file &&

	git diff --stat >diffstat &&
	git diff --stat --break-rewrites >diffstatrewrite &&

	# make sure this scenario is a detectable rewrite
	! test_cmp_bin diffstat diffstatrewrite &&

	git add file &&
	git commit -m second >actual &&

	grep "1 file" <actual >actual.total &&
	grep "1 file" <diffstat >diffstat.total &&
	test_cmp diffstat.total actual.total

HEAD is now at 12dd244 initial
diffstat diffstatrewrite differ: char 9, line 1
ok 2 - commit summary ignores rewrites

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7525-status-rename.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7525-status-rename/.git/
expecting success of 7525.1 'setup': 
	echo 1 >original &&
	git add . &&
	git commit -m"Adding original file." &&
	mv original renamed &&
	echo 2 >> renamed &&
	git add . &&
	cat >.gitignore <<-\EOF
	.gitignore
	expect*
	actual*
	EOF

[master (root-commit) 8050378] Adding original file.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 original
ok 1 - setup

expecting success of 7525.2 'status no-options': 
	git status >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
ok 2 - status no-options

expecting success of 7525.3 'status --no-renames': 
	git status --no-renames >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 3 - status --no-renames

expecting success of 7525.4 'status.renames inherits from diff.renames false': 
	git -c diff.renames=false status >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 4 - status.renames inherits from diff.renames false

expecting success of 7525.5 'status.renames inherits from diff.renames true': 
	git -c diff.renames=true status >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
ok 5 - status.renames inherits from diff.renames true

expecting success of 7525.6 'status.renames overrides diff.renames false': 
	git -c diff.renames=true -c status.renames=false status >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 6 - status.renames overrides diff.renames false

expecting success of 7525.7 'status.renames overrides from diff.renames true': 
	git -c diff.renames=false -c status.renames=true status >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
ok 7 - status.renames overrides from diff.renames true

expecting success of 7525.8 'status status.renames=false': 
	git -c status.renames=false status >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 8 - status status.renames=false

expecting success of 7525.9 'status status.renames=true': 
	git -c status.renames=true status >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
ok 9 - status status.renames=true

expecting success of 7525.10 'commit honors status.renames=false': 
	git -c status.renames=false commit --dry-run >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 10 - commit honors status.renames=false

expecting success of 7525.11 'commit honors status.renames=true': 
	git -c status.renames=true commit --dry-run >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
ok 11 - commit honors status.renames=true

expecting success of 7525.12 'status config overridden': 
	git -c status.renames=true status --no-renames >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
ok 12 - status config overridden

expecting success of 7525.13 'status score=100%': 
	git status -M=100% >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual &&

	git status --find-renames=100% >actual &&
	test_i18ngrep "deleted:" actual &&
	test_i18ngrep "new file:" actual

	deleted:    original
	new file:   renamed
	deleted:    original
	new file:   renamed
ok 13 - status score=100%

expecting success of 7525.14 'status score=01%': 
	git status -M=01% >actual &&
	test_i18ngrep "renamed:" actual &&

	git status --find-renames=01% >actual &&
	test_i18ngrep "renamed:" actual

	renamed:    original -> renamed
	renamed:    original -> renamed
ok 14 - status score=01%

expecting success of 7525.15 'copies not overridden by find-renames': 
	cp renamed copy &&
	git add copy &&

	git -c status.renames=copies status -M=01% >actual &&
	test_i18ngrep "copied:" actual &&
	test_i18ngrep "renamed:" actual &&

	git -c status.renames=copies status --find-renames=01% >actual &&
	test_i18ngrep "copied:" actual &&
	test_i18ngrep "renamed:" actual

	copied:     original -> copy
	renamed:    original -> renamed
	copied:     original -> copy
	renamed:    original -> renamed
ok 15 - copies not overridden by find-renames

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7526-commit-pathspec-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7526-commit-pathspec-file/.git/
expecting success of 7526.1 'setup': 
	test_commit file0 &&
	git tag checkpoint &&

	echo A >fileA.t &&
	echo B >fileB.t &&
	echo C >fileC.t &&
	echo D >fileD.t &&
	git add fileA.t fileB.t fileC.t fileD.t

[master (root-commit) ad2e047] file0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file0.t
ok 1 - setup

expecting success of 7526.2 '--pathspec-from-file from stdin': 
	restore_checkpoint &&

	echo fileA.t | git commit --pathspec-from-file=- -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	EOF
	verify_expect

[master 95e22e1] Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileA.t
ok 2 - --pathspec-from-file from stdin

expecting success of 7526.3 '--pathspec-from-file from file': 
	restore_checkpoint &&

	echo fileA.t >list &&
	git commit --pathspec-from-file=list -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	EOF
	verify_expect

[master 95e22e1] Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileA.t
ok 3 - --pathspec-from-file from file

expecting success of 7526.4 'NUL delimiters': 
	restore_checkpoint &&

	printf "fileA.t\0fileB.t\0" | git commit --pathspec-from-file=- --pathspec-file-nul -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	A	fileB.t
	EOF
	verify_expect

[master ebcb447] Commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
ok 4 - NUL delimiters

expecting success of 7526.5 'LF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t\n" | git commit --pathspec-from-file=- -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	A	fileB.t
	EOF
	verify_expect

[master ebcb447] Commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
ok 5 - LF delimiters

expecting success of 7526.6 'no trailing delimiter': 
	restore_checkpoint &&

	printf "fileA.t\nfileB.t" | git commit --pathspec-from-file=- -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	A	fileB.t
	EOF
	verify_expect

[master ebcb447] Commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
ok 6 - no trailing delimiter

expecting success of 7526.7 'CRLF delimiters': 
	restore_checkpoint &&

	printf "fileA.t\r\nfileB.t\r\n" | git commit --pathspec-from-file=- -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	A	fileB.t
	EOF
	verify_expect

[master ebcb447] Commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileA.t
 create mode 100644 fileB.t
ok 7 - CRLF delimiters

expecting success of 7526.8 'quotes': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	git commit --pathspec-from-file=list -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileA.t
	EOF
	verify_expect expect

[master 95e22e1] Commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fileA.t
ok 8 - quotes

expecting success of 7526.9 'quotes not compatible with --pathspec-file-nul': 
	restore_checkpoint &&

	cat >list <<-\EOF &&
	"file\101.t"
	EOF

	test_must_fail git commit --pathspec-from-file=list --pathspec-file-nul -m "Commit"

error: pathspec '"file\101.t"
' did not match any file(s) known to git
ok 9 - quotes not compatible with --pathspec-file-nul

expecting success of 7526.10 'only touches what was listed': 
	restore_checkpoint &&

	printf "fileB.t\nfileC.t\n" | git commit --pathspec-from-file=- -m "Commit" &&

	cat >expect <<-\EOF &&
	A	fileB.t
	A	fileC.t
	EOF
	verify_expect

[master 6ba5a83] Commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 fileB.t
 create mode 100644 fileC.t
ok 10 - only touches what was listed

expecting success of 7526.11 'error conditions': 
	restore_checkpoint &&
	echo fileA.t >list &&
	>empty_list &&

	test_must_fail git commit --pathspec-from-file=list --interactive -m "Commit" 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--interactive/--patch. cannot be used together" err &&

	test_must_fail git commit --pathspec-from-file=list --patch -m "Commit" 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .--interactive/--patch. cannot be used together" err &&

	test_must_fail git commit --pathspec-from-file=list --all -m "Commit" 2>err &&
	test_i18ngrep -e "options .--pathspec-from-file. and .-a. cannot be used together" err &&

	test_must_fail git commit --pathspec-from-file=list -m "Commit" -- fileA.t 2>err &&
	test_i18ngrep -e ".--pathspec-from-file. and pathspec arguments cannot be used together" err &&

	test_must_fail git commit --pathspec-file-nul -m "Commit" 2>err &&
	test_i18ngrep -e "the option .--pathspec-file-nul. requires .--pathspec-from-file." err &&

	test_must_fail git commit --pathspec-from-file=empty_list --include -m "Commit" 2>err &&
	test_i18ngrep -e "No paths with --include/--only does not make sense." err &&

	test_must_fail git commit --pathspec-from-file=empty_list --only -m "Commit" 2>err &&
	test_i18ngrep -e "No paths with --include/--only does not make sense." err

fatal: options '--pathspec-from-file' and '--interactive/--patch' cannot be used together
fatal: options '--pathspec-from-file' and '--interactive/--patch' cannot be used together
fatal: options '--pathspec-from-file' and '-a' cannot be used together
fatal: '--pathspec-from-file' and pathspec arguments cannot be used together
fatal: the option '--pathspec-file-nul' requires '--pathspec-from-file'
fatal: No paths with --include/--only does not make sense.
fatal: No paths with --include/--only does not make sense.
ok 11 - error conditions

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7512-status-help.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7512-status-help/.git/
expecting success of 7512.1 'prepare for conflicts': 
	git config --global advice.statusuoption false &&
	test_commit init main.txt init &&
	git branch conflicts &&
	test_commit on_main main.txt on_main &&
	git checkout conflicts &&
	test_commit on_conflicts main.txt on_conflicts

[main (root-commit) 56c882b] init
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main.txt
[main 775788b] on_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'conflicts'
[conflicts 8f933df] on_conflicts
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - prepare for conflicts

expecting success of 7512.2 'status when conflicts unresolved': 
	test_must_fail git merge main &&
	cat >expected <<\EOF &&
On branch conflicts
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 2 - status when conflicts unresolved

expecting success of 7512.3 'status when conflicts resolved before commit': 
	git reset --hard conflicts &&
	test_must_fail git merge main &&
	echo one >main.txt &&
	git add main.txt &&
	cat >expected <<\EOF &&
On branch conflicts
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
	modified:   main.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 8f933df on_conflicts
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
Automatic merge failed; fix conflicts and then commit the result.
ok 3 - status when conflicts resolved before commit

expecting success of 7512.4 'prepare for rebase conflicts': 
	git reset --hard main &&
	git checkout -b rebase_conflicts &&
	test_commit one_rebase main.txt one &&
	test_commit two_rebase main.txt two &&
	test_commit three_rebase main.txt three

HEAD is now at 775788b on_main
Switched to a new branch 'rebase_conflicts'
[rebase_conflicts 6fcaf26] one_rebase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase_conflicts 592ae89] two_rebase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase_conflicts c974dce] three_rebase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 4 - prepare for rebase conflicts

expecting success of 7512.5 'status when rebase --apply in progress before resolving conflicts': 
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD^^) &&
	test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
	cat >expected <<EOF &&
rebase in progress; onto $ONTO
You are currently rebasing branch 'rebase_conflicts' on '$ONTO'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --skip" to skip this patch)
  (use "git rebase --abort" to check out the original branch)

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

First, rewinding head to replay your work on top of it...
Applying: three_rebase
Using index info to reconstruct a base tree...
M	main.txt
Falling back to patching base and 3-way merge...
Merging:
6fcaf26 one_rebase
virtual three_rebase
found 1 common ancestor:
virtual 022b39ca39aa226018ccf5f8138fd73f11c73790
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 three_rebase
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 5 - status when rebase --apply in progress before resolving conflicts

expecting success of 7512.6 'status when rebase --apply in progress before rebase --continue': 
	git reset --hard rebase_conflicts &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD^^) &&
	test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
	echo three >main.txt &&
	git add main.txt &&
	cat >expected <<EOF &&
rebase in progress; onto $ONTO
You are currently rebasing branch 'rebase_conflicts' on '$ONTO'.
  (all conflicts fixed: run "git rebase --continue")

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   main.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at c974dce three_rebase
First, rewinding head to replay your work on top of it...
Applying: three_rebase
Using index info to reconstruct a base tree...
M	main.txt
Falling back to patching base and 3-way merge...
Merging:
6fcaf26 one_rebase
virtual three_rebase
found 1 common ancestor:
virtual 022b39ca39aa226018ccf5f8138fd73f11c73790
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 three_rebase
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 6 - status when rebase --apply in progress before rebase --continue

expecting success of 7512.7 'prepare for rebase_i_conflicts': 
	git reset --hard main &&
	git checkout -b rebase_i_conflicts &&
	test_commit one_unmerge main.txt one_unmerge &&
	git branch rebase_i_conflicts_second &&
	test_commit one_main main.txt one_main &&
	git checkout rebase_i_conflicts_second &&
	test_commit one_second main.txt one_second

HEAD is now at 775788b on_main
Switched to a new branch 'rebase_i_conflicts'
[rebase_i_conflicts 7d4b4e3] one_unmerge
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase_i_conflicts d6b4653] one_main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'rebase_i_conflicts_second'
[rebase_i_conflicts_second b34e550] one_second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 7 - prepare for rebase_i_conflicts

expecting success of 7512.8 'status during rebase -i when conflicts unresolved': 
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short rebase_i_conflicts) &&
	LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
	test_must_fail git rebase -i rebase_i_conflicts &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last command done (1 command done):
   pick $LAST_COMMIT one_second
No commands remaining.
You are currently rebasing branch 'rebase_i_conflicts_second' on '$ONTO'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --skip" to skip this patch)
  (use "git rebase --abort" to check out the original branch)

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

Rebasing (1/1)
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: could not apply b34e550... one_second
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b34e550... one_second
ok 8 - status during rebase -i when conflicts unresolved

expecting success of 7512.9 'status during rebase -i after resolving conflicts': 
	git reset --hard rebase_i_conflicts_second &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short rebase_i_conflicts) &&
	LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
	test_must_fail git rebase -i rebase_i_conflicts &&
	git add main.txt &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last command done (1 command done):
   pick $LAST_COMMIT one_second
No commands remaining.
You are currently rebasing branch 'rebase_i_conflicts_second' on '$ONTO'.
  (all conflicts fixed: run "git rebase --continue")

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   main.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at b34e550 one_second
Rebasing (1/1)
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: could not apply b34e550... one_second
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply b34e550... one_second
ok 9 - status during rebase -i after resolving conflicts

expecting success of 7512.10 'status when rebasing -i in edit mode': 
	git reset --hard main &&
	git checkout -b rebase_i_edit &&
	test_commit one_rebase_i main.txt one &&
	test_commit two_rebase_i main.txt two &&
	COMMIT2=$(git rev-parse --short rebase_i_edit) &&
	test_commit three_rebase_i main.txt three &&
	COMMIT3=$(git rev-parse --short rebase_i_edit) &&
	FAKE_LINES="1 edit 2" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~2) &&
	git rebase -i HEAD~2 &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   pick $COMMIT2 two_rebase_i
   edit $COMMIT3 three_rebase_i
No commands remaining.
You are currently editing a commit while rebasing branch 'rebase_i_edit' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 775788b on_main
Switched to a new branch 'rebase_i_edit'
[rebase_i_edit 4d5a43a] one_rebase_i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase_i_edit d174283] two_rebase_i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[rebase_i_edit 4859a97] three_rebase_i
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick d174283 two_rebase_i
pick 4859a97 three_rebase_i

rebase -i script after editing:
pick d174283 two_rebase_i
edit 4859a97 three_rebase_i
Rebasing (2/2)

                                                                                
Stopped at 4859a97...  three_rebase_i
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
ok 10 - status when rebasing -i in edit mode

expecting success of 7512.11 'status when splitting a commit': 
	git reset --hard main &&
	git checkout -b split_commit &&
	test_commit one_split main.txt one &&
	test_commit two_split main.txt two &&
	COMMIT2=$(git rev-parse --short split_commit) &&
	test_commit three_split main.txt three &&
	COMMIT3=$(git rev-parse --short split_commit) &&
	test_commit four_split main.txt four &&
	COMMIT4=$(git rev-parse --short split_commit) &&
	FAKE_LINES="1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git reset HEAD^ &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   pick $COMMIT2 two_split
   edit $COMMIT3 three_split
Next command to do (1 remaining command):
   pick $COMMIT4 four_split
  (use "git rebase --edit-todo" to view and edit)
You are currently splitting a commit while rebasing branch 'split_commit' on '$ONTO'.
  (Once your working directory is clean, run "git rebase --continue")

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 775788b on_main
Switched to a new branch 'split_commit'
[split_commit 5271309] one_split
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[split_commit d51a33d] two_split
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[split_commit 5d269f8] three_split
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[split_commit 708197d] four_split
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick d51a33d two_split
pick 5d269f8 three_split
pick 708197d four_split

rebase -i script after editing:
pick d51a33d two_split
edit 5d269f8 three_split
pick 708197d four_split
Rebasing (2/3)

                                                                                
Stopped at 5d269f8...  three_split
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
ok 11 - status when splitting a commit

expecting success of 7512.12 'status after editing the last commit with --amend during a rebase -i': 
	git reset --hard main &&
	git checkout -b amend_last &&
	test_commit one_amend main.txt one &&
	test_commit two_amend main.txt two &&
	test_commit three_amend main.txt three &&
	COMMIT3=$(git rev-parse --short amend_last) &&
	test_commit four_amend main.txt four &&
	COMMIT4=$(git rev-parse --short amend_last) &&
	FAKE_LINES="1 2 edit 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git commit --amend -m "foo" &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (3 commands done):
   pick $COMMIT3 three_amend
   edit $COMMIT4 four_amend
  (see more in file .git/rebase-merge/done)
No commands remaining.
You are currently editing a commit while rebasing branch 'amend_last' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 775788b on_main
Switched to a new branch 'amend_last'
[amend_last 8a2163f] one_amend
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[amend_last fc3747b] two_amend
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[amend_last 72d65eb] three_amend
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[amend_last 7e881a0] four_amend
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
rebase -i script before editing:
pick fc3747b two_amend
pick 72d65eb three_amend
pick 7e881a0 four_amend

rebase -i script after editing:
pick fc3747b two_amend
pick 72d65eb three_amend
edit 7e881a0 four_amend
Rebasing (3/3)

                                                                                
Stopped at 7e881a0...  four_amend
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 7773bcc] foo
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:32:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - status after editing the last commit with --amend during a rebase -i

expecting success of 7512.13 'prepare for several edits': 
	git reset --hard main &&
	git checkout -b several_edits &&
	test_commit one_edits main.txt one &&
	test_commit two_edits main.txt two &&
	test_commit three_edits main.txt three &&
	test_commit four_edits main.txt four

HEAD is now at 775788b on_main
Switched to a new branch 'several_edits'
[several_edits e809b2a] one_edits
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_edits b4ac883] two_edits
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_edits c605a0f] three_edits
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_edits 106789e] four_edits
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - prepare for several edits

expecting success of 7512.14 'status: (continue first edit) second edit': 
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git rebase --continue &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
ok 14 - status: (continue first edit) second edit

expecting success of 7512.15 'status: (continue first edit) second edit and split': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git rebase --continue &&
	git reset HEAD^ &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently splitting a commit while rebasing branch 'several_edits' on '$ONTO'.
  (Once your working directory is clean, run "git rebase --continue")

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
ok 15 - status: (continue first edit) second edit and split

expecting success of 7512.16 'status: (continue first edit) second edit and amend': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git rebase --continue &&
	git commit --amend -m "foo" &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 2f6d348] foo
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:35:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 16 - status: (continue first edit) second edit and amend

expecting success of 7512.17 'status: (amend first edit) second edit': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git commit --amend -m "a" &&
	git rebase --continue &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 5270fdf] a
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:34:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
ok 17 - status: (amend first edit) second edit

expecting success of 7512.18 'status: (amend first edit) second edit and split': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	git rebase -i HEAD~3 &&
	git commit --amend -m "b" &&
	git rebase --continue &&
	git reset HEAD^ &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently splitting a commit while rebasing branch 'several_edits' on '$ONTO'.
  (Once your working directory is clean, run "git rebase --continue")

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 3d713bf] b
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:34:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
ok 18 - status: (amend first edit) second edit and split

expecting success of 7512.19 'status: (amend first edit) second edit and amend': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git commit --amend -m "c" &&
	git rebase --continue &&
	git commit --amend -m "d" &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 91e3024] c
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:34:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 3490803] d
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:35:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - status: (amend first edit) second edit and amend

expecting success of 7512.20 'status: (split first edit) second edit': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git reset HEAD^ &&
	git add main.txt &&
	git commit -m "e" &&
	git rebase --continue &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
[detached HEAD 7669fcb] e
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
ok 20 - status: (split first edit) second edit

expecting success of 7512.21 'status: (split first edit) second edit and split': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git reset HEAD^ &&
	git add main.txt &&
	git commit --amend -m "f" &&
	git rebase --continue &&
	git reset HEAD^ &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently splitting a commit while rebasing branch 'several_edits' on '$ONTO'.
  (Once your working directory is clean, run "git rebase --continue")

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
[detached HEAD a7b588d] f
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:33:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
ok 21 - status: (split first edit) second edit and split

expecting success of 7512.22 'status: (split first edit) second edit and amend': 
	git reset --hard several_edits &&
	FAKE_LINES="edit 1 edit 2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	COMMIT2=$(git rev-parse --short several_edits^^) &&
	COMMIT3=$(git rev-parse --short several_edits^) &&
	COMMIT4=$(git rev-parse --short several_edits) &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	git rebase -i HEAD~3 &&
	git reset HEAD^ &&
	git add main.txt &&
	git commit --amend -m "g" &&
	git rebase --continue &&
	git commit --amend -m "h" &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   edit $COMMIT2 two_edits
   edit $COMMIT3 three_edits
Next command to do (1 remaining command):
   pick $COMMIT4 four_edits
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_edits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 106789e four_edits
rebase -i script before editing:
pick b4ac883 two_edits
pick c605a0f three_edits
pick 106789e four_edits

rebase -i script after editing:
edit b4ac883 two_edits
edit c605a0f three_edits
pick 106789e four_edits
Rebasing (1/3)

                                                                                
Stopped at b4ac883...  two_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Unstaged changes after reset:
M	main.txt
[detached HEAD 2556f5b] g
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:33:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
Rebasing (2/3)

                                                                                
Stopped at c605a0f...  three_edits
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
[detached HEAD 394dd26] h
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:35:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 22 - status: (split first edit) second edit and amend

expecting success of 7512.23 'prepare am_session': 
	git reset --hard main &&
	git checkout -b am_session &&
	test_commit one_am one.txt "one" &&
	test_commit two_am two.txt "two" &&
	test_commit three_am three.txt "three"

HEAD is now at 775788b on_main
Switched to a new branch 'am_session'
[am_session 7711a11] one_am
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.txt
[am_session bf7b0b4] two_am
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.txt
[am_session d8e6e3b] three_am
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 three.txt
ok 23 - prepare am_session

expecting success of 7512.24 'status in an am session: file already exists': 
	git checkout -b am_already_exists &&
	test_when_finished "rm Maildir/* && git am --abort" &&
	git format-patch -1 -oMaildir &&
	test_must_fail git am Maildir/*.patch &&
	cat >expected <<\EOF &&
On branch am_already_exists
You are in the middle of an am session.
  (fix conflicts and then run "git am --continue")
  (use "git am --skip" to skip this patch)
  (use "git am --abort" to restore the original branch)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

Switched to a new branch 'am_already_exists'
Maildir/0001-three_am.patch
error: three.txt: already exists in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: three_am
Patch failed at 0001 three_am
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 24 - status in an am session: file already exists

expecting success of 7512.25 'status in an am session: file does not exist': 
	git reset --hard am_session &&
	git checkout -b am_not_exists &&
	git rm three.txt &&
	git commit -m "delete three.txt" &&
	test_when_finished "rm Maildir/* && git am --abort" &&
	git format-patch -1 -oMaildir &&
	test_must_fail git am Maildir/*.patch &&
	cat >expected <<\EOF &&
On branch am_not_exists
You are in the middle of an am session.
  (fix conflicts and then run "git am --continue")
  (use "git am --skip" to skip this patch)
  (use "git am --abort" to restore the original branch)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at d8e6e3b three_am
Switched to a new branch 'am_not_exists'
rm 'three.txt'
[am_not_exists 72d9b96] delete three.txt
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 three.txt
Maildir/0001-delete-three.txt.patch
error: three.txt: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: delete three.txt
Patch failed at 0001 delete three.txt
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ok 25 - status in an am session: file does not exist

expecting success of 7512.26 'status in an am session: empty patch': 
	git reset --hard am_session &&
	git checkout -b am_empty &&
	test_when_finished "rm Maildir/* && git am --abort" &&
	git format-patch -3 -oMaildir &&
	git rm one.txt two.txt three.txt &&
	git commit -m "delete all am_empty" &&
	echo error >Maildir/0002-two_am.patch &&
	test_must_fail git am Maildir/*.patch &&
	cat >expected <<\EOF &&
On branch am_empty
You are in the middle of an am session.
The current patch is empty.
  (use "git am --skip" to skip this patch)
  (use "git am --allow-empty" to record this patch as an empty commit)
  (use "git am --abort" to restore the original branch)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at d8e6e3b three_am
Switched to a new branch 'am_empty'
Maildir/0001-one_am.patch
Maildir/0002-two_am.patch
Maildir/0003-three_am.patch
rm 'one.txt'
rm 'three.txt'
rm 'two.txt'
[am_empty 01feaee] delete all am_empty
 Author: A U Thor <author@example.com>
 3 files changed, 3 deletions(-)
 delete mode 100644 one.txt
 delete mode 100644 three.txt
 delete mode 100644 two.txt
Applying: one_am
Patch is empty.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To record the empty patch as an empty commit, run "git am --allow-empty".
To restore the original branch and stop patching, run "git am --abort".
ok 26 - status in an am session: empty patch

expecting success of 7512.27 'status when bisecting': 
	git reset --hard main &&
	git checkout -b bisect &&
	test_commit one_bisect main.txt one &&
	test_commit two_bisect main.txt two &&
	test_commit three_bisect main.txt three &&
	test_when_finished "git bisect reset" &&
	git bisect start &&
	git bisect bad &&
	git bisect good one_bisect &&
	TGT=$(git rev-parse --short two_bisect) &&
	cat >expected <<EOF &&
HEAD detached at $TGT
You are currently bisecting, started from branch 'bisect'.
  (use "git bisect reset" to get back to the original branch)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 775788b on_main
Switched to a new branch 'bisect'
[bisect 4372ec6] one_bisect
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[bisect 3e82c5f] two_bisect
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[bisect f3f7929] three_bisect
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
status: waiting for both good and bad commits
status: waiting for good commit(s), bad commit known
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3e82c5f8c0479181858dcfad3220a78d3233a0e6] two_bisect
Previous HEAD position was 3e82c5f two_bisect
Switched to branch 'bisect'
ok 27 - status when bisecting

expecting success of 7512.28 'status when rebase --apply conflicts with statushints disabled': 
	git reset --hard main &&
	git checkout -b statushints_disabled &&
	test_when_finished "git config --local advice.statushints true" &&
	git config --local advice.statushints false &&
	test_commit one_statushints main.txt one &&
	test_commit two_statushints main.txt two &&
	test_commit three_statushints main.txt three &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD^^) &&
	test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
	cat >expected <<EOF &&
rebase in progress; onto $ONTO
You are currently rebasing branch 'statushints_disabled' on '$ONTO'.

Unmerged paths:
	both modified:   main.txt

no changes added to commit
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at 775788b on_main
Switched to a new branch 'statushints_disabled'
[statushints_disabled e8a5151] one_statushints
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[statushints_disabled d4c667b] two_statushints
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[statushints_disabled f4dbc50] three_statushints
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
First, rewinding head to replay your work on top of it...
Applying: three_statushints
Using index info to reconstruct a base tree...
M	main.txt
Falling back to patching base and 3-way merge...
Merging:
e8a5151 one_statushints
virtual three_statushints
found 1 common ancestor:
virtual 022b39ca39aa226018ccf5f8138fd73f11c73790
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 three_statushints
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
ok 28 - status when rebase --apply conflicts with statushints disabled

expecting success of 7512.29 'prepare for cherry-pick conflicts': 
	git reset --hard main &&
	git checkout -b cherry_branch &&
	test_commit one_cherry main.txt one &&
	test_commit two_cherries main.txt two &&
	git checkout -b cherry_branch_second &&
	test_commit second_cherry main.txt second &&
	git checkout cherry_branch &&
	test_commit three_cherries main.txt three

HEAD is now at 775788b on_main
Switched to a new branch 'cherry_branch'
[cherry_branch 9fba603] one_cherry
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[cherry_branch fbc256a] two_cherries
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'cherry_branch_second'
[cherry_branch_second 37a3ee7] second_cherry
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'cherry_branch'
[cherry_branch d875095] three_cherries
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 29 - prepare for cherry-pick conflicts

expecting success of 7512.30 'status when cherry-picking before resolving conflicts': 
	test_when_finished "git cherry-pick --abort" &&
	test_must_fail git cherry-pick cherry_branch_second &&
	TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
	cat >expected <<EOF &&
On branch cherry_branch
You are currently cherry-picking commit $TO_CHERRY_PICK.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   main.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: could not apply 37a3ee7... second_cherry
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 30 - status when cherry-picking before resolving conflicts

expecting success of 7512.31 'status when cherry-picking after resolving conflicts': 
	git reset --hard cherry_branch &&
	test_when_finished "git cherry-pick --abort" &&
	test_must_fail git cherry-pick cherry_branch_second &&
	TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
	echo end >main.txt &&
	git add main.txt &&
	cat >expected <<EOF &&
On branch cherry_branch
You are currently cherry-picking commit $TO_CHERRY_PICK.
  (all conflicts fixed: run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Changes to be committed:
	modified:   main.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at d875095 three_cherries
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: could not apply 37a3ee7... second_cherry
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
ok 31 - status when cherry-picking after resolving conflicts

expecting success of 7512.32 'status when cherry-picking after committing conflict resolution': 
	git reset --hard cherry_branch &&
	test_when_finished "git cherry-pick --abort" &&
	test_must_fail git cherry-pick cherry_branch_second one_cherry &&
	echo end >main.txt &&
	git commit -a &&
	cat >expected <<EOF &&
On branch cherry_branch
Cherry-pick currently in progress.
  (run "git cherry-pick --continue" to continue)
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at d875095 three_cherries
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
error: could not apply 37a3ee7... second_cherry
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
[cherry_branch 63531af] second_cherry
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:48:13 2005 -0700
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: You seem to have moved HEAD. Not rewinding, check your HEAD!
ok 32 - status when cherry-picking after committing conflict resolution

expecting success of 7512.33 'status shows cherry-pick with invalid oid': 
	mkdir .git/sequencer &&
	test_write_lines "pick invalid-oid" >.git/sequencer/todo &&
	git status --untracked-files=no >actual 2>err &&
	git cherry-pick --quit &&
	test_must_be_empty err &&
	test_cmp expected actual

ok 33 - status shows cherry-pick with invalid oid

expecting success of 7512.34 'status does not show error if .git/sequencer is a file': 
	test_when_finished "rm .git/sequencer" &&
	test_write_lines hello >.git/sequencer &&
	git status --untracked-files=no 2>err &&
	test_must_be_empty err

On branch cherry_branch
nothing to commit (use -u to show untracked files)
ok 34 - status does not show error if .git/sequencer is a file

expecting success of 7512.35 'status showing detached at and from a tag': 
	test_commit atag tagging &&
	git checkout atag &&
	cat >expected <<\EOF &&
HEAD detached at atag
nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual &&

	git reset --hard HEAD^ &&
	cat >expected <<\EOF &&
HEAD detached from atag
nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

[cherry_branch 4d82f88] atag
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tagging
Note: switching to 'atag'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4d82f88 atag
HEAD is now at 63531af second_cherry
ok 35 - status showing detached at and from a tag

expecting success of 7512.36 'status while reverting commit (conflicts)': 
	git checkout main &&
	echo before >to-revert.txt &&
	test_commit before to-revert.txt &&
	echo old >to-revert.txt &&
	test_commit old to-revert.txt &&
	echo new >to-revert.txt &&
	test_commit new to-revert.txt &&
	TO_REVERT=$(git rev-parse --short HEAD^) &&
	test_must_fail git revert $TO_REVERT &&
	cat >expected <<EOF &&
On branch main
You are currently reverting commit $TO_REVERT.
  (fix conflicts and run "git revert --continue")
  (use "git revert --skip" to skip this patch)
  (use "git revert --abort" to cancel the revert operation)

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   to-revert.txt

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

Previous HEAD position was 63531af second_cherry
Switched to branch 'main'
[main 7ab8b33] before
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 to-revert.txt
[main 02dad96] old
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main d6be654] new
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging to-revert.txt
CONFLICT (content): Merge conflict in to-revert.txt
error: could not revert 02dad96... old
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
ok 36 - status while reverting commit (conflicts)

expecting success of 7512.37 'status while reverting commit (conflicts resolved)': 
	echo reverted >to-revert.txt &&
	git add to-revert.txt &&
	cat >expected <<EOF &&
On branch main
You are currently reverting commit $TO_REVERT.
  (all conflicts fixed: run "git revert --continue")
  (use "git revert --skip" to skip this patch)
  (use "git revert --abort" to cancel the revert operation)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   to-revert.txt

Untracked files not listed (use -u option to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

ok 37 - status while reverting commit (conflicts resolved)

expecting success of 7512.38 'status after reverting commit': 
	git revert --continue &&
	cat >expected <<\EOF &&
On branch main
nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

[main c6e88df] Revert "old"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 38 - status after reverting commit

expecting success of 7512.39 'status while reverting after committing conflict resolution': 
	test_when_finished "git revert --abort" &&
	git reset --hard new &&
	test_must_fail git revert old new &&
	echo reverted >to-revert.txt &&
	git commit -a &&
	cat >expected <<EOF &&
On branch main
Revert currently in progress.
  (run "git revert --continue" to continue)
  (use "git revert --skip" to skip this patch)
  (use "git revert --abort" to cancel the revert operation)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

HEAD is now at d6be654 new
Auto-merging to-revert.txt
CONFLICT (content): Merge conflict in to-revert.txt
error: could not revert 02dad96... old
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
[main c6e88df] Revert "old"
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: You seem to have moved HEAD. Not rewinding, check your HEAD!
ok 39 - status while reverting after committing conflict resolution

expecting success of 7512.40 'prepare for different number of commits rebased': 
	git reset --hard main &&
	git checkout -b several_commits &&
	test_commit one_commit main.txt one &&
	test_commit two_commit main.txt two &&
	test_commit three_commit main.txt three &&
	test_commit four_commit main.txt four

HEAD is now at c6e88df Revert "old"
Switched to a new branch 'several_commits'
[several_commits 4447e0a] one_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_commits cfc8c19] two_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_commits 8794dbd] three_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[several_commits c4cbc26] four_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 40 - prepare for different number of commits rebased

expecting success of 7512.41 'status: one command done nothing remaining': 
	FAKE_LINES="exec_exit_15" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	test_must_fail git rebase -i HEAD~3 &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last command done (1 command done):
   exec exit 15
No commands remaining.
You are currently editing a commit while rebasing branch 'several_commits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

rebase -i script before editing:
pick cfc8c19 two_commit
pick 8794dbd three_commit
pick c4cbc26 four_commit

rebase -i script after editing:
exec exit 15
Rebasing (1/1)

                                                                                
Executing: exit 15
warning: execution failed: exit 15
You can fix the problem, and then run

  git rebase --continue


ok 41 - status: one command done nothing remaining

expecting success of 7512.42 'status: two commands done with some white lines in done file': 
	FAKE_LINES="1 > exec_exit_15  2 3" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~3) &&
	COMMIT4=$(git rev-parse --short HEAD) &&
	COMMIT3=$(git rev-parse --short HEAD^) &&
	COMMIT2=$(git rev-parse --short HEAD^^) &&
	test_must_fail git rebase -i HEAD~3 &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (2 commands done):
   pick $COMMIT2 two_commit
   exec exit 15
Next commands to do (2 remaining commands):
   pick $COMMIT3 three_commit
   pick $COMMIT4 four_commit
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_commits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

rebase -i script before editing:
pick cfc8c19 two_commit
pick 8794dbd three_commit
pick c4cbc26 four_commit

rebase -i script after editing:
pick cfc8c19 two_commit

exec exit 15
pick 8794dbd three_commit
pick c4cbc26 four_commit
Rebasing (3/5)

                                                                                
Executing: exit 15
warning: execution failed: exit 15
You can fix the problem, and then run

  git rebase --continue


ok 42 - status: two commands done with some white lines in done file

expecting success of 7512.43 'status: two remaining commands with some white lines in todo file': 
	FAKE_LINES="1 2 exec_exit_15 3 > 4" &&
	export FAKE_LINES &&
	test_when_finished "git rebase --abort" &&
	ONTO=$(git rev-parse --short HEAD~4) &&
	COMMIT4=$(git rev-parse --short HEAD) &&
	COMMIT3=$(git rev-parse --short HEAD^) &&
	COMMIT2=$(git rev-parse --short HEAD^^) &&
	test_must_fail git rebase -i HEAD~4 &&
	cat >expected <<EOF &&
interactive rebase in progress; onto $ONTO
Last commands done (3 commands done):
   pick $COMMIT2 two_commit
   exec exit 15
  (see more in file .git/rebase-merge/done)
Next commands to do (2 remaining commands):
   pick $COMMIT3 three_commit
   pick $COMMIT4 four_commit
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_commits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	git status --untracked-files=no >actual &&
	test_cmp expected actual

rebase -i script before editing:
pick 4447e0a one_commit
pick cfc8c19 two_commit
pick 8794dbd three_commit
pick c4cbc26 four_commit

rebase -i script after editing:
pick 4447e0a one_commit
pick cfc8c19 two_commit
exec exit 15
pick 8794dbd three_commit

pick c4cbc26 four_commit
Rebasing (3/6)

                                                                                
Executing: exit 15
warning: execution failed: exit 15
You can fix the problem, and then run

  git rebase --continue


ok 43 - status: two remaining commands with some white lines in todo file

expecting success of 7512.44 'status: handle not-yet-started rebase -i gracefully': 
	ONTO=$(git rev-parse --short HEAD^) &&
	COMMIT=$(git rev-parse --short HEAD) &&
	EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ &&
	cat >expected <<EOF &&
On branch several_commits
No commands done.
Next command to do (1 remaining command):
   pick $COMMIT four_commit
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'several_commits' on '$ONTO'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

nothing to commit (use -u to show untracked files)
EOF
	test_cmp expected actual


                                                                                
Successfully rebased and updated refs/heads/several_commits.
ok 44 - status: handle not-yet-started rebase -i gracefully

# passed all 44 test(s)
1..44
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7527-builtin-fsmonitor.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7527-builtin-fsmonitor/.git/
checking prerequisite: FSMONITOR_DAEMON

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
	git version --build-options >output &&
	grep "feature: fsmonitor--daemon" output

)
prerequisite FSMONITOR_DAEMON not satisfied
1..0 # SKIP fsmonitor--daemon is not supported on this platform
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7528-signed-commit-ssh.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7528-signed-commit-ssh/.git/
checking prerequisite: GPGSSH

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH" &&
	ssh_version=$(ssh-keygen -Y find-principals -n "git" 2>&1)
	test $? != 127 || exit 1
	echo $ssh_version | grep -q "find-principals:missing signature file"
	test $? = 0 || exit 1;

	# Setup some keys and an allowed signers file
	mkdir -p "${GNUPGHOME}" &&
	chmod 0700 "${GNUPGHOME}" &&
	(setfacl -k "${GNUPGHOME}" 2>/dev/null || true) &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null &&
	ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null &&
	ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null &&
	ssh-keygen -t ecdsa -N "" -f "${GPGSSH_KEY_ECDSA}" >/dev/null &&
	ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null &&

	cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")"
	"principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")"
	"principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")"
	"principal with number 4" $(cat "${GPGSSH_KEY_ECDSA}.pub")"
	EOF

	# Verify if at least one key and ssh-keygen works as expected
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig &&
	ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig &&
	echo "testpayload" |
	ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig

)
prerequisite GPGSSH not satisfied
ok 1 # skip create signed commits (missing GPGSSH)

ok 2 # skip sign commits using literal public keys with ssh-agent (missing GPGSSH)

checking prerequisite: GPGSSH_VERIFYTIME

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPGSSH_VERIFYTIME" &&
	# Check if ssh-keygen has a verify-time option by passing an invalid date to it
	ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" &&

	# Set up keys with key lifetimes
	ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null &&
	key_valid=$(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null &&
	key_invalid=$(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null &&
	key_expired=$(cat "${GPGSSH_KEY_EXPIRED}.pub") &&
	ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null &&
	key_notyetvalid=$(cat "${GPGSSH_KEY_NOTYETVALID}.pub") &&

	# Timestamps outside of test_tick span
	ts2005a=20050401000000 ts2005b=200504020000 &&
	# Timestamps within test_tick span
	ts2005c=20050407000000 ts2005d=200504100000 &&
	# Definitely not yet valid / expired timestamps
	ts2000=20000101000000 ts2999=29990101000000 &&

	cat >>"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF &&
	"timeboxed valid key" valid-after="$ts2005c",valid-before="$ts2005d" $key_valid"
	"timeboxed invalid key" valid-after="$ts2005a",valid-before="$ts2005b" $key_invalid"
	"principal with expired key" valid-before="$ts2000" $key_expired"
	"principal with not yet valid key" valid-after="$ts2999" $key_notyetvalid"
	EOF

	# and verify ssh-keygen verifies the key lifetime
	echo "testpayload" |
	ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_EXPIRED}" >gpgssh_verifytime_prereq.sig &&
	! (ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with expired key" -s gpgssh_verifytime_prereq.sig)

)
prerequisite GPGSSH_VERIFYTIME not satisfied
ok 3 # skip create signed commits with keys having defined lifetimes (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 4 # skip verify and show signatures (missing GPGSSH)

ok 5 # skip verify-commit exits failure on untrusted signature (missing GPGSSH)

ok 6 # skip verify-commit exits failure on expired signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 7 # skip verify-commit exits failure on not yet valid signature key (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 8 # skip verify-commit succeeds with commit date and key validity matching (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 9 # skip verify-commit exits failure with commit date outside of key validity (missing GPGSSH_VERIFYTIME,GPGSSH of GPGSSH,GPGSSH_VERIFYTIME)

ok 10 # skip verify-commit exits success with matching minTrustLevel (missing GPGSSH)

ok 11 # skip verify-commit exits success with low minTrustLevel (missing GPGSSH)

ok 12 # skip verify-commit exits failure with high minTrustLevel (missing GPGSSH)

ok 13 # skip verify signatures with --raw (missing GPGSSH)

ok 14 # skip proper header is used for hash algorithm (missing GPGSSH)

ok 15 # skip show signed commit with signature (missing GPGSSH)

ok 16 # skip detect fudged signature (missing GPGSSH)

ok 17 # skip detect fudged signature with NUL (missing GPGSSH)

ok 18 # skip amending already signed commit (missing GPGSSH)

ok 19 # skip show good signature with custom format (missing GPGSSH)

ok 20 # skip show bad signature with custom format (missing GPGSSH)

ok 21 # skip show untrusted signature with custom format (missing GPGSSH)

ok 22 # skip show untrusted signature with undefined trust level (missing GPGSSH)

ok 23 # skip show untrusted signature with ultimate trust level (missing GPGSSH)

ok 24 # skip show lack of signature with custom format (missing GPGSSH)

ok 25 # skip log.showsignature behaves like --show-signature (missing GPGSSH)

ok 26 # skip check config gpg.format values (missing GPGSSH)

ok 27 # skip detect fudged commit with double signature (TODO) (missing GPGSSH)

ok 28 # skip show double signature with custom format (TODO) (missing GPGSSH)

ok 29 # skip verify-commit verifies multiply signed commits (TODO) (missing GPGSSH)

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7519-status-fsmonitor.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/.git/
expecting success of 7519.1 'incompatible bare repo': 
	test_when_finished "rm -rf ./bare-clone actual expect" &&
	git init --bare bare-clone &&

	test_must_fail \
		git -C ./bare-clone -c core.fsmonitor=foo \
			update-index --fsmonitor 2>actual &&
	grep "bare repository .* is incompatible with fsmonitor" actual &&

	test_must_fail \
		git -C ./bare-clone -c core.fsmonitor=true \
			update-index --fsmonitor 2>actual &&
	grep "bare repository .* is incompatible with fsmonitor" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/bare-clone/
fatal: bare repository '/<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/bare-clone' is incompatible with fsmonitor
fatal: bare repository '/<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/bare-clone' is incompatible with fsmonitor
ok 1 - incompatible bare repo

checking prerequisite: FSMONITOR_DAEMON

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
	git version --build-options >output &&
	grep "feature: fsmonitor--daemon" output

)
prerequisite FSMONITOR_DAEMON not satisfied
ok 2 # skip run fsmonitor-daemon in bare repo (missing FSMONITOR_DAEMON)

ok 3 # skip run fsmonitor-daemon in virtual repo (missing FSMONITOR_DAEMON,MINGW of MINGW,FSMONITOR_DAEMON)

expecting success of 7519.4 'setup': 
	: >tracked &&
	: >modified &&
	mkdir dir1 &&
	: >dir1/tracked &&
	: >dir1/modified &&
	mkdir dir2 &&
	: >dir2/tracked &&
	: >dir2/modified &&
	git -c core.fsmonitor= add . &&
	git -c core.fsmonitor= commit -m initial &&
	git config core.fsmonitor .git/hooks/fsmonitor-test &&
	cat >.gitignore <<-\EOF
	.gitignore
	expect*
	actual*
	marker*
	trace2*
	EOF

[master (root-commit) 1851a93] initial
 Author: A U Thor <author@example.com>
 6 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir1/modified
 create mode 100644 dir1/tracked
 create mode 100644 dir2/modified
 create mode 100644 dir2/tracked
 create mode 100644 modified
 create mode 100644 tracked
ok 4 - setup

expecting success of 7519.5 'fsmonitor extension is off by default': 
	test-tool dump-fsmonitor >actual &&
	grep "^no fsmonitor" actual

no fsmonitor
ok 5 - fsmonitor extension is off by default

expecting success of 7519.6 'update-index --fsmonitor" adds the fsmonitor extension': 
	git update-index --fsmonitor &&
	test-tool dump-fsmonitor >actual &&
	grep "^fsmonitor last update" actual

fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fsmonitor last update 1672214655515031591
ok 6 - update-index --fsmonitor" adds the fsmonitor extension

expecting success of 7519.7 'update-index --no-fsmonitor" removes the fsmonitor extension': 
	git update-index --no-fsmonitor &&
	test-tool dump-fsmonitor >actual &&
	grep "^no fsmonitor" actual

fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
warning: core.fsmonitor is set; remove it if you really want to disable fsmonitor
no fsmonitor
ok 7 - update-index --no-fsmonitor" removes the fsmonitor extension

expecting success of 7519.8 'update-index --fsmonitor-valid" sets the fsmonitor valid bit': 
	test_hook fsmonitor-test<<-\EOF &&
		printf "last_update_token\0"
	EOF
	git update-index --fsmonitor &&
	git update-index --fsmonitor-valid dir1/modified &&
	git update-index --fsmonitor-valid dir2/modified &&
	git update-index --fsmonitor-valid modified &&
	git ls-files -f >actual &&
	test_cmp expect actual

ok 8 - update-index --fsmonitor-valid" sets the fsmonitor valid bit

expecting success of 7519.9 'update-index --no-fsmonitor-valid" clears the fsmonitor valid bit': 
	git update-index --no-fsmonitor-valid dir1/modified &&
	git update-index --no-fsmonitor-valid dir2/modified &&
	git update-index --no-fsmonitor-valid modified &&
	git ls-files -f >actual &&
	test_cmp expect actual

fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
fatal: cannot run .git/hooks/fsmonitor-test: No such file or directory
ok 9 - update-index --no-fsmonitor-valid" clears the fsmonitor valid bit

expecting success of 7519.10 'all files returned by integration script get flagged as invalid': 
	write_integration_script &&
	dirty_repo &&
	git update-index --fsmonitor &&
	git ls-files -f >actual &&
	test_cmp expect actual

ok 10 - all files returned by integration script get flagged as invalid

expecting success of 7519.11 'newly added files are marked valid': 
	test_hook --setup --clobber fsmonitor-test<<-\EOF &&
		printf "last_update_token\0"
	EOF
	git add new &&
	git add dir1/new &&
	git add dir2/new &&
	git ls-files -f >actual &&
	test_cmp expect actual

ok 11 - newly added files are marked valid

expecting success of 7519.12 'all unmodified files get marked valid': 
	# modified files result in update-index returning 1
	test_must_fail git update-index --refresh --force-write-index &&
	git ls-files -f >actual &&
	test_cmp expect actual

dir1/modified: needs update
dir2/modified: needs update
modified: needs update
ok 12 - all unmodified files get marked valid

expecting success of 7519.13 '*only* files returned by the integration script get flagged as invalid': 
	test_hook --clobber fsmonitor-test<<-\EOF &&
	printf "last_update_token\0"
	printf "dir1/modified\0"
	EOF
	clean_repo &&
	git update-index --refresh --force-write-index &&
	echo 1 >modified &&
	echo 2 >dir1/modified &&
	echo 3 >dir2/modified &&
	test_must_fail git update-index --refresh --force-write-index &&
	git ls-files -f >actual &&
	test_cmp expect actual

HEAD is now at 1851a93 initial
Removing dir1/untracked
Removing dir2/untracked
Removing untracked
dir1/modified: needs update
ok 13 - *only* files returned by the integration script get flagged as invalid

expecting success of 7519.14 'refresh_index() invalidates fsmonitor cache': 
	clean_repo &&
	dirty_repo &&
	write_integration_script &&
	git add . &&
	test_hook --clobber fsmonitor-test<<-\EOF &&
	EOF
	git commit -m "to reset" &&
	git reset HEAD~1 &&
	git status >actual &&
	git -c core.fsmonitor= status >expect &&
	test_cmp expect actual

HEAD is now at 1851a93 initial
warning: Empty last update token.
[master 6edcb70] to reset
 Author: A U Thor <author@example.com>
 9 files changed, 6 insertions(+)
 create mode 100644 dir1/new
 create mode 100644 dir1/untracked
 create mode 100644 dir2/new
 create mode 100644 dir2/untracked
 create mode 100644 new
 create mode 100644 untracked
warning: Empty last update token.
Unstaged changes after reset:
M	dir1/modified
M	dir2/modified
M	modified
warning: Empty last update token.
ok 14 - refresh_index() invalidates fsmonitor cache

expecting success of 7519.15 'setup preloadIndex to false': 
		git config core.preloadIndex $preload_val &&
		if test $preload_val = true
		then
			GIT_TEST_PRELOAD_INDEX=$preload_val && export GIT_TEST_PRELOAD_INDEX
		else
			sane_unset GIT_TEST_PRELOAD_INDEX
		fi
	
ok 15 - setup preloadIndex to false

checking prerequisite: UNTRACKED_CACHE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNTRACKED_CACHE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNTRACKED_CACHE" &&
	{ git update-index --test-untracked-cache; ret=$?; } &&
	test $ret -ne 1

)
warning: Empty last update token.
Testing mtime in '/<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor' ...... OK
prerequisite UNTRACKED_CACHE ok
expecting success of 7519.16 'setup untracked cache to false': 
			git config core.untrackedcache $uc_val
		
ok 16 - setup untracked cache to false

expecting success of 7519.17 'compare status with and without fsmonitor': 
			write_integration_script &&
			clean_repo &&
			dirty_repo &&
			git add new &&
			git add dir1/new &&
			git add dir2/new &&
			git status >actual &&
			git -c core.fsmonitor= status >expect &&
			test_cmp expect actual
		
HEAD is now at 1851a93 initial
Removing dir1/new
Removing dir1/untracked
Removing dir2/new
Removing dir2/untracked
Removing new
Removing untracked
ok 17 - compare status with and without fsmonitor

expecting success of 7519.18 'status doesn't detect unreported modifications': 
			test_hook --clobber fsmonitor-test<<-\EOF &&
			printf "last_update_token\0"
			:>marker
			EOF
			clean_repo &&
			git status &&
			test_path_is_file marker &&
			dirty_repo &&
			rm -f marker &&
			git status >actual &&
			test_path_is_file marker &&
			test_i18ngrep ! "Changes not staged for commit:" actual &&
			if test $uc_val = true
			then
				test_i18ngrep ! "Untracked files:" actual
			fi &&
			if test $uc_val = false
			then
				test_i18ngrep "Untracked files:" actual
			fi &&
			rm -f marker
		
HEAD is now at 1851a93 initial
Removing dir1/untracked
Removing dir2/untracked
Removing untracked
On branch master
nothing to commit, working tree clean
Untracked files:
ok 18 - status doesn't detect unreported modifications

expecting success of 7519.19 'setup untracked cache to true': 
			git config core.untrackedcache $uc_val
		
ok 19 - setup untracked cache to true

expecting success of 7519.20 'compare status with and without fsmonitor': 
			write_integration_script &&
			clean_repo &&
			dirty_repo &&
			git add new &&
			git add dir1/new &&
			git add dir2/new &&
			git status >actual &&
			git -c core.fsmonitor= status >expect &&
			test_cmp expect actual
		
HEAD is now at 1851a93 initial
Removing dir1/new
Removing dir1/untracked
Removing dir2/new
Removing dir2/untracked
Removing new
Removing untracked
ok 20 - compare status with and without fsmonitor

expecting success of 7519.21 'status doesn't detect unreported modifications': 
			test_hook --clobber fsmonitor-test<<-\EOF &&
			printf "last_update_token\0"
			:>marker
			EOF
			clean_repo &&
			git status &&
			test_path_is_file marker &&
			dirty_repo &&
			rm -f marker &&
			git status >actual &&
			test_path_is_file marker &&
			test_i18ngrep ! "Changes not staged for commit:" actual &&
			if test $uc_val = true
			then
				test_i18ngrep ! "Untracked files:" actual
			fi &&
			if test $uc_val = false
			then
				test_i18ngrep "Untracked files:" actual
			fi &&
			rm -f marker
		
HEAD is now at 1851a93 initial
Removing dir1/untracked
Removing dir2/untracked
Removing untracked
On branch master
nothing to commit, working tree clean
ok 21 - status doesn't detect unreported modifications

expecting success of 7519.22 'setup preloadIndex to true': 
		git config core.preloadIndex $preload_val &&
		if test $preload_val = true
		then
			GIT_TEST_PRELOAD_INDEX=$preload_val && export GIT_TEST_PRELOAD_INDEX
		else
			sane_unset GIT_TEST_PRELOAD_INDEX
		fi
	
ok 22 - setup preloadIndex to true

expecting success of 7519.23 'setup untracked cache to false': 
			git config core.untrackedcache $uc_val
		
ok 23 - setup untracked cache to false

expecting success of 7519.24 'compare status with and without fsmonitor': 
			write_integration_script &&
			clean_repo &&
			dirty_repo &&
			git add new &&
			git add dir1/new &&
			git add dir2/new &&
			git status >actual &&
			git -c core.fsmonitor= status >expect &&
			test_cmp expect actual
		
HEAD is now at 1851a93 initial
Removing dir1/new
Removing dir1/untracked
Removing dir2/new
Removing dir2/untracked
Removing new
Removing untracked
ok 24 - compare status with and without fsmonitor

expecting success of 7519.25 'status doesn't detect unreported modifications': 
			test_hook --clobber fsmonitor-test<<-\EOF &&
			printf "last_update_token\0"
			:>marker
			EOF
			clean_repo &&
			git status &&
			test_path_is_file marker &&
			dirty_repo &&
			rm -f marker &&
			git status >actual &&
			test_path_is_file marker &&
			test_i18ngrep ! "Changes not staged for commit:" actual &&
			if test $uc_val = true
			then
				test_i18ngrep ! "Untracked files:" actual
			fi &&
			if test $uc_val = false
			then
				test_i18ngrep "Untracked files:" actual
			fi &&
			rm -f marker
		
HEAD is now at 1851a93 initial
Removing dir1/untracked
Removing dir2/untracked
Removing untracked
On branch master
nothing to commit, working tree clean
Untracked files:
ok 25 - status doesn't detect unreported modifications

expecting success of 7519.26 'setup untracked cache to true': 
			git config core.untrackedcache $uc_val
		
ok 26 - setup untracked cache to true

expecting success of 7519.27 'compare status with and without fsmonitor': 
			write_integration_script &&
			clean_repo &&
			dirty_repo &&
			git add new &&
			git add dir1/new &&
			git add dir2/new &&
			git status >actual &&
			git -c core.fsmonitor= status >expect &&
			test_cmp expect actual
		
HEAD is now at 1851a93 initial
Removing dir1/new
Removing dir1/untracked
Removing dir2/new
Removing dir2/untracked
Removing new
Removing untracked
ok 27 - compare status with and without fsmonitor

expecting success of 7519.28 'status doesn't detect unreported modifications': 
			test_hook --clobber fsmonitor-test<<-\EOF &&
			printf "last_update_token\0"
			:>marker
			EOF
			clean_repo &&
			git status &&
			test_path_is_file marker &&
			dirty_repo &&
			rm -f marker &&
			git status >actual &&
			test_path_is_file marker &&
			test_i18ngrep ! "Changes not staged for commit:" actual &&
			if test $uc_val = true
			then
				test_i18ngrep ! "Untracked files:" actual
			fi &&
			if test $uc_val = false
			then
				test_i18ngrep "Untracked files:" actual
			fi &&
			rm -f marker
		
HEAD is now at 1851a93 initial
Removing dir1/untracked
Removing dir2/untracked
Removing untracked
On branch master
nothing to commit, working tree clean
ok 28 - status doesn't detect unreported modifications

expecting success of 7519.29 'splitting the index results in the same state': 
	write_integration_script &&
	dirty_repo &&
	git update-index --fsmonitor  &&
	git ls-files -f >expect &&
	test-tool dump-fsmonitor >&2 && echo &&
	git update-index --fsmonitor --split-index &&
	test-tool dump-fsmonitor >&2 && echo &&
	git ls-files -f >actual &&
	test_cmp expect actual

fsmonitor last update last_update_token
------
fsmonitor last update last_update_token
---
ok 29 - splitting the index results in the same state

expecting success of 7519.30 'ignore .git changes when invalidating UNTR': 
	test_create_repo dot-git &&
	(
		cd dot-git &&
		: >tracked &&
		test-tool chmtime =-60 tracked &&
		: >modified &&
		test-tool chmtime =-60 modified &&
		mkdir dir1 &&
		: >dir1/tracked &&
		test-tool chmtime =-60 dir1/tracked &&
		: >dir1/modified &&
		test-tool chmtime =-60 dir1/modified &&
		mkdir dir2 &&
		: >dir2/tracked &&
		test-tool chmtime =-60 dir2/tracked &&
		: >dir2/modified &&
		test-tool chmtime =-60 dir2/modified &&
		write_integration_script &&
		git config core.fsmonitor .git/hooks/fsmonitor-test &&
		git update-index --untracked-cache &&
		git update-index --fsmonitor &&
		git status &&
		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-before" \
		git status &&
		test-tool dump-untracked-cache >../before
	) &&
	cat >>dot-git/.git/hooks/fsmonitor-test <<-\EOF &&
	printf ".git\0"
	printf ".git/index\0"
	printf "dir1/.git\0"
	printf "dir1/.git/index\0"
	EOF
	(
		cd dot-git &&
		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-after" \
		git status &&
		test-tool dump-untracked-cache >../after
	) &&
	grep "directory-invalidation" trace-before | cut -d"|" -f 9 >>before &&
	grep "directory-invalidation" trace-after  | cut -d"|" -f 9 >>after &&
	# UNTR extension unchanged, dir invalidation count unchanged
	test_cmp before after

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/dot-git/.git/
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/
	dir2/
	modified
	tracked

nothing added to commit but untracked files present (use "git add" to track)
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/
	dir2/
	modified
	tracked

nothing added to commit but untracked files present (use "git add" to track)
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/
	dir2/
	modified
	tracked

nothing added to commit but untracked files present (use "git add" to track)
ok 30 - ignore .git changes when invalidating UNTR

expecting success of 7519.31 'discard_index() also discards fsmonitor info': 
	test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
	test_might_fail git update-index --refresh &&
	test-tool read-cache --print-and-refresh=tracked 2 >actual &&
	printf "tracked is%s up to date\n" "" " not" >expect &&
	test_cmp expect actual

dir1/modified: needs update
dir2/modified: needs update
modified: needs update
ok 31 - discard_index() also discards fsmonitor info

expecting success of 7519.32 'status succeeds after staging/unstaging': 
	test_create_repo fsmonitor-stage-unstage &&
	(
		cd fsmonitor-stage-unstage &&
		test_commit initial &&
		git update-index --fsmonitor &&
		removed=$(test_seq 1 100 | sed "s/^/z/") &&
		touch $removed &&
		git add $removed &&
		git config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-env" &&
		FSMONITOR_LIST="$removed" git restore -S $removed &&
		FSMONITOR_LIST="$removed" git status
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7519-status-fsmonitor/fsmonitor-stage-unstage/.git/
[master (root-commit) 24b24cf] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
warning: core.fsmonitor is unset; set it if you really want to enable fsmonitor
Unsupported core.fsmonitor hook version.
Unsupported core.fsmonitor hook version.
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	z1
	z10
	z100
	z11
	z12
	z13
	z14
	z15
	z16
	z17
	z18
	z19
	z2
	z20
	z21
	z22
	z23
	z24
	z25
	z26
	z27
	z28
	z29
	z3
	z30
	z31
	z32
	z33
	z34
	z35
	z36
	z37
	z38
	z39
	z4
	z40
	z41
	z42
	z43
	z44
	z45
	z46
	z47
	z48
	z49
	z5
	z50
	z51
	z52
	z53
	z54
	z55
	z56
	z57
	z58
	z59
	z6
	z60
	z61
	z62
	z63
	z64
	z65
	z66
	z67
	z68
	z69
	z7
	z70
	z71
	z72
	z73
	z74
	z75
	z76
	z77
	z78
	z79
	z8
	z80
	z81
	z82
	z83
	z84
	z85
	z86
	z87
	z88
	z89
	z9
	z90
	z91
	z92
	z93
	z94
	z95
	z96
	z97
	z98
	z99

nothing added to commit but untracked files present (use "git add" to track)
ok 32 - status succeeds after staging/unstaging

expecting success of 7519.33 'status succeeds with sparse index': 
	(
		sane_unset GIT_TEST_SPLIT_INDEX &&

		git clone . full &&
		git clone --sparse . sparse &&
		git -C sparse sparse-checkout init --cone --sparse-index &&
		git -C sparse sparse-checkout set dir1 dir2 &&

		test_hook --clobber fsmonitor-test <<-\EOF &&
			printf "last_update_token\0"
		EOF
		git -C full config core.fsmonitor ../.git/hooks/fsmonitor-test &&
		git -C sparse config core.fsmonitor ../.git/hooks/fsmonitor-test &&
		check_sparse_index_behavior ! &&

		test_hook --clobber fsmonitor-test <<-\EOF &&
			printf "last_update_token\0"
			printf "dir1/modified\0"
		EOF
		check_sparse_index_behavior ! &&

		git -C sparse sparse-checkout add dir1a &&

		for repo in full sparse
		do
			cp -r $repo/dir1 $repo/dir1a &&
			git -C $repo add dir1a &&
			git -C $repo commit -m "add dir1a" || return 1
		done &&
		git -C sparse sparse-checkout set dir1 dir2 &&

		# This one modifies outside the sparse-checkout definition
		# and hence we expect to expand the sparse-index.
		test_hook --clobber fsmonitor-test <<-\EOF &&
			printf "last_update_token\0"
			printf "dir1a/modified\0"
		EOF
		check_sparse_index_behavior
	)

Cloning into 'full'...
done.
Cloning into 'sparse'...
done.
{"event":"region_enter","sid":"20221228T080428.646215Z-Hc64317c2-P000044fc","thread":"main","time":"2022-12-28T08:04:28.657206Z","file":"fsmonitor.c","line":169,"nesting":1,"category":"fsm_hook","label":"query"}
{"event":"region_leave","sid":"20221228T080428.646215Z-Hc64317c2-P000044fc","thread":"main","time":"2022-12-28T08:04:28.670307Z","file":"fsmonitor.c","line":179,"t_rel":0.013093,"nesting":1,"category":"fsm_hook","label":"query"}
{"event":"region_enter","sid":"20221228T080428.873658Z-Hc64317c2-P0000452a","thread":"main","time":"2022-12-28T08:04:28.885387Z","file":"fsmonitor.c","line":169,"nesting":1,"category":"fsm_hook","label":"query"}
{"event":"region_leave","sid":"20221228T080428.873658Z-Hc64317c2-P0000452a","thread":"main","time":"2022-12-28T08:04:28.896789Z","file":"fsmonitor.c","line":179,"t_rel":0.011390,"nesting":1,"category":"fsm_hook","label":"query"}
[master 1279bb5] add dir1a
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir1a/modified
 create mode 100644 dir1a/tracked
[master 1279bb5] add dir1a
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dir1a/modified
 create mode 100644 dir1a/tracked
{"event":"region_enter","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.530841Z","file":"sparse-index.c","line":340,"repo":1,"nesting":2,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.574943Z","file":"sparse-index.c","line":340,"repo":1,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.538073Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.007243,"nesting":2,"category":"index","label":"ensure_full_index"}
{"event":"region_leave","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.576358Z","file":"sparse-index.c","line":422,"repo":1,"t_rel":0.001417,"nesting":1,"category":"index","label":"ensure_full_index"}
{"event":"region_enter","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.517738Z","file":"fsmonitor.c","line":169,"nesting":1,"category":"fsm_hook","label":"query"}
{"event":"region_enter","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.542437Z","file":"fsmonitor.c","line":169,"nesting":2,"category":"fsm_hook","label":"query"}
{"event":"region_leave","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.529004Z","file":"fsmonitor.c","line":179,"t_rel":0.011255,"nesting":1,"category":"fsm_hook","label":"query"}
{"event":"region_leave","sid":"20221228T080429.507608Z-Hc64317c2-P000045b1","thread":"main","time":"2022-12-28T08:04:29.555203Z","file":"fsmonitor.c","line":179,"t_rel":0.012747,"nesting":2,"category":"fsm_hook","label":"query"}
ok 33 - status succeeds with sparse index

# passed all 33 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7508-status.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7508-status/.git/
expecting success of 7508.1 'status -h in broken repository': 
	git config --global advice.statusuoption false &&
	mkdir broken &&
	test_when_finished "rm -fr broken" &&
	(
		cd broken &&
		git init &&
		echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
		test_expect_code 129 git status -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7508-status/broken/.git/
usage: git status [<options>] [--] [<pathspec>...]
ok 1 - status -h in broken repository

expecting success of 7508.2 'commit -h in broken repository': 
	mkdir broken &&
	test_when_finished "rm -fr broken" &&
	(
		cd broken &&
		git init &&
		echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
		test_expect_code 129 git commit -h >usage 2>&1
	) &&
	test_i18ngrep "[Uu]sage" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7508-status/broken/.git/
usage: git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
ok 2 - commit -h in broken repository

expecting success of 7508.3 'create upstream branch': 
	git checkout -b upstream &&
	test_commit upstream1 &&
	test_commit upstream2 &&
	# leave the first commit on main as root because several
	# tests depend on this case; for our upstream we only
	# care about commit counts anyway, so a totally divergent
	# history is OK
	git checkout --orphan main

Switched to a new branch 'upstream'
[upstream (root-commit) 8d383b3] upstream1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream1.t
[upstream 726fd3a] upstream2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 upstream2.t
Switched to a new branch 'main'
ok 3 - create upstream branch

expecting success of 7508.4 'setup': 
	: >tracked &&
	: >modified &&
	mkdir dir1 &&
	: >dir1/tracked &&
	: >dir1/modified &&
	mkdir dir2 &&
	: >dir1/tracked &&
	: >dir1/modified &&
	git add . &&

	git status >output &&

	test_tick &&
	git commit -m initial &&
	: >untracked &&
	: >dir1/untracked &&
	: >dir2/untracked &&
	echo 1 >dir1/modified &&
	echo 2 >dir2/modified &&
	echo 3 >dir2/added &&
	git add dir2/added &&

	git branch --set-upstream-to=upstream

[main (root-commit) 5b37b0a] initial
 Author: A U Thor <author@example.com>
 7 files changed, 4 insertions(+)
 create mode 100644 .gitconfig
 create mode 100644 dir1/modified
 create mode 100644 dir1/tracked
 create mode 100644 modified
 create mode 100644 tracked
 create mode 100644 upstream1.t
 create mode 100644 upstream2.t
branch 'main' set up to track 'upstream'.
ok 4 - setup

expecting success of 7508.5 'status (1)': 
	test_i18ngrep "use \"git rm --cached <file>\.\.\.\" to unstage" output

  (use "git rm --cached <file>..." to unstage)
ok 5 - status (1)

expecting success of 7508.6 'status --column': 
	cat >expect <<\EOF &&
# On branch main
# Your branch and 'upstream' have diverged,
# and have 1 and 2 different commits each, respectively.
#   (use "git pull" to merge the remote branch into yours)
#
# Changes to be committed:
#   (use "git restore --staged <file>..." to unstage)
#	new file:   dir2/added
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git restore <file>..." to discard changes in working directory)
#	modified:   dir1/modified
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#	dir1/untracked dir2/untracked
#	dir2/modified  untracked
#
EOF
	COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
	test_cmp expect output

ok 6 - status --column

expecting success of 7508.7 'status --column status.displayCommentPrefix=false': 
	strip_comments expect &&
	COLUMNS=49 git -c status.displayCommentPrefix=false status --column="column dense" >output &&
	test_cmp expect output

ok 7 - status --column status.displayCommentPrefix=false

expecting success of 7508.8 'status with status.displayCommentPrefix=true': 
	git -c status.displayCommentPrefix=true status >output &&
	test_cmp expect output

ok 8 - status with status.displayCommentPrefix=true

expecting success of 7508.9 'status with status.displayCommentPrefix=false': 
	strip_comments expect &&
	git -c status.displayCommentPrefix=false status >output &&
	test_cmp expect output

ok 9 - status with status.displayCommentPrefix=false

expecting success of 7508.10 'status -v': 
	(cat expect && git diff --cached) >expect-with-v &&
	git status -v >output &&
	test_cmp expect-with-v output

ok 10 - status -v

expecting success of 7508.11 'status -v -v': 
	(cat expect &&
	 echo "Changes to be committed:" &&
	 git -c diff.mnemonicprefix=true diff --cached &&
	 echo "--------------------------------------------------" &&
	 echo "Changes not staged for commit:" &&
	 git -c diff.mnemonicprefix=true diff) >expect-with-v &&
	git status -v -v >output &&
	test_cmp expect-with-v output

ok 11 - status -v -v

expecting success of 7508.12 'setup fake editor': 
	cat >.git/editor <<-\EOF &&
	#! /bin/sh
	cp "$1" output
EOF
	chmod 755 .git/editor

ok 12 - setup fake editor

expecting success of 7508.13 'commit ignores status.displayCommentPrefix=false in COMMIT_EDITMSG': 
	commit_template_commented

Aborting commit due to empty commit message.
ok 13 - commit ignores status.displayCommentPrefix=false in COMMIT_EDITMSG

expecting success of 7508.14 'status (advice.statusHints false)': 
	test_config advice.statusHints false &&
	git status >output &&
	test_cmp expect output


ok 14 - status (advice.statusHints false)

expecting success of 7508.15 'status -s': 

	git status -s >output &&
	test_cmp expect output


ok 15 - status -s

expecting success of 7508.16 'status with gitignore': 
	{
		echo ".gitignore" &&
		echo "expect*" &&
		echo "output" &&
		echo "untracked"
	} >.gitignore &&

	cat >expect <<-\EOF &&
	 M dir1/modified
	A  dir2/added
	?? dir2/modified
	EOF
	git status -s >output &&
	test_cmp expect output &&

	cat >expect <<-\EOF &&
	 M dir1/modified
	A  dir2/added
	?? dir2/modified
	!! .gitignore
	!! dir1/untracked
	!! dir2/untracked
	!! expect
	!! expect-with-v
	!! output
	!! untracked
	EOF
	git status -s --ignored >output &&
	test_cmp expect output &&

	cat >expect <<\EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir2/modified

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
	.gitignore
	dir1/untracked
	dir2/untracked
	expect
	expect-with-v
	output
	untracked

EOF
	git status --ignored >output &&
	test_cmp expect output

ok 16 - status with gitignore

expecting success of 7508.17 'status with gitignore (nothing untracked)': 
	{
		echo ".gitignore" &&
		echo "expect*" &&
		echo "dir2/modified" &&
		echo "output" &&
		echo "untracked"
	} >.gitignore &&

	cat >expect <<-\EOF &&
	 M dir1/modified
	A  dir2/added
	EOF
	git status -s >output &&
	test_cmp expect output &&

	cat >expect <<-\EOF &&
	 M dir1/modified
	A  dir2/added
	!! .gitignore
	!! dir1/untracked
	!! dir2/modified
	!! dir2/untracked
	!! expect
	!! expect-with-v
	!! output
	!! untracked
	EOF
	git status -s --ignored >output &&
	test_cmp expect output &&

	cat >expect <<\EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
	.gitignore
	dir1/untracked
	dir2/modified
	dir2/untracked
	expect
	expect-with-v
	output
	untracked

EOF
	git status --ignored >output &&
	test_cmp expect output

ok 17 - status with gitignore (nothing untracked)

expecting success of 7508.18 'status -s -b': 

	git status -s -b >output &&
	test_cmp expect output


ok 18 - status -s -b

expecting success of 7508.19 'status -s -z -b': 
	tr "\\n" Q <expect >expect.q &&
	mv expect.q expect &&
	git status -s -z -b >output &&
	nul_to_q <output >output.q &&
	mv output.q output &&
	test_cmp expect output

ok 19 - status -s -z -b

expecting success of 7508.20 'setup dir3': 
	mkdir dir3 &&
	: >dir3/untracked1 &&
	: >dir3/untracked2

ok 20 - setup dir3

expecting success of 7508.21 'status -uno': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files not listed (use -u option to show untracked files)
EOF
	git status -uno >output &&
	test_cmp expect output

ok 21 - status -uno

expecting success of 7508.22 'status (status.showUntrackedFiles no)': 
	test_config status.showuntrackedfiles no &&
	git status >output &&
	test_cmp expect output

ok 22 - status (status.showUntrackedFiles no)

expecting success of 7508.23 'status -uno (advice.statusHints false)': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.

Changes to be committed:
	new file:   dir2/added

Changes not staged for commit:
	modified:   dir1/modified

Untracked files not listed
EOF
	test_config advice.statusHints false &&
	git status -uno >output &&
	test_cmp expect output

ok 23 - status -uno (advice.statusHints false)

expecting success of 7508.24 'status -s -uno': 
	git status -s -uno >output &&
	test_cmp expect output

ok 24 - status -s -uno

expecting success of 7508.25 'status -s (status.showUntrackedFiles no)': 
	git config status.showuntrackedfiles no &&
	git status -s >output &&
	test_cmp expect output

ok 25 - status -s (status.showUntrackedFiles no)

expecting success of 7508.26 'status -unormal': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	dir3/
	untracked

EOF
	git status -unormal >output &&
	test_cmp expect output

ok 26 - status -unormal

expecting success of 7508.27 'status (status.showUntrackedFiles normal)': 
	test_config status.showuntrackedfiles normal &&
	git status >output &&
	test_cmp expect output

ok 27 - status (status.showUntrackedFiles normal)

expecting success of 7508.28 'status -s -unormal': 
	git status -s -unormal >output &&
	test_cmp expect output

ok 28 - status -s -unormal

expecting success of 7508.29 'status -s (status.showUntrackedFiles normal)': 
	git config status.showuntrackedfiles normal &&
	git status -s >output &&
	test_cmp expect output

ok 29 - status -s (status.showUntrackedFiles normal)

expecting success of 7508.30 'status -uall': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	dir3/untracked1
	dir3/untracked2
	untracked

EOF
	git status -uall >output &&
	test_cmp expect output

ok 30 - status -uall

expecting success of 7508.31 'status (status.showUntrackedFiles all)': 
	test_config status.showuntrackedfiles all &&
	git status >output &&
	test_cmp expect output

ok 31 - status (status.showUntrackedFiles all)

expecting success of 7508.32 'teardown dir3': 
	rm -rf dir3

ok 32 - teardown dir3

expecting success of 7508.33 'status -s -uall': 
	test_unconfig status.showuntrackedfiles &&
	git status -s -uall >output &&
	test_cmp expect output

ok 33 - status -s -uall

expecting success of 7508.34 'status -s (status.showUntrackedFiles all)': 
	test_config status.showuntrackedfiles all &&
	git status -s >output &&
	rm -rf dir3 &&
	test_cmp expect output

ok 34 - status -s (status.showUntrackedFiles all)

expecting success of 7508.35 'status with relative paths': 
	cat >expect <<\EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   ../dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	untracked
	../dir2/modified
	../dir2/untracked
	../untracked

EOF
	(cd dir1 && git status) >output &&
	test_cmp expect output

ok 35 - status with relative paths

expecting success of 7508.36 'status -s with relative paths': 

	(cd dir1 && git status -s) >output &&
	test_cmp expect output


ok 36 - status -s with relative paths

expecting success of 7508.37 'status --porcelain ignores relative paths setting': 

	(cd dir1 && git status --porcelain) >output &&
	test_cmp expect output


ok 37 - status --porcelain ignores relative paths setting

expecting success of 7508.38 'setup unique colors': 

	git config status.color.untracked blue &&
	git config status.color.branch green &&
	git config status.color.localBranch yellow &&
	git config status.color.remoteBranch cyan


ok 38 - setup unique colors

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 7508.39 'status with color.ui': 
	cat >expect <<\EOF &&
On branch <GREEN>main<RESET>
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	<GREEN>new file:   dir2/added<RESET>

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	<RED>modified:   dir1/modified<RESET>

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	<BLUE>dir1/untracked<RESET>
	<BLUE>dir2/modified<RESET>
	<BLUE>dir2/untracked<RESET>
	<BLUE>untracked<RESET>

EOF
	test_config color.ui auto &&
	test_terminal git status | test_decode_color >output &&
	test_cmp expect output

ok 39 - status with color.ui

expecting success of 7508.40 'status with color.status': 
	test_config color.status auto &&
	test_terminal git status | test_decode_color >output &&
	test_cmp expect output

ok 40 - status with color.status

expecting success of 7508.41 'status -s with color.ui': 

	git config color.ui auto &&
	test_terminal git status -s | test_decode_color >output &&
	test_cmp expect output


ok 41 - status -s with color.ui

expecting success of 7508.42 'status -s with color.status': 

	git config --unset color.ui &&
	git config color.status auto &&
	test_terminal git status -s | test_decode_color >output &&
	test_cmp expect output


ok 42 - status -s with color.status

expecting success of 7508.43 'status -s -b with color.status': 

	test_terminal git status -s -b | test_decode_color >output &&
	test_cmp expect output


ok 43 - status -s -b with color.status

expecting success of 7508.44 'status --porcelain ignores color.ui': 

	git config --unset color.status &&
	git config color.ui auto &&
	test_terminal git status --porcelain | test_decode_color >output &&
	test_cmp expect output


ok 44 - status --porcelain ignores color.ui

expecting success of 7508.45 'status --porcelain ignores color.status': 

	git config --unset color.ui &&
	git config color.status auto &&
	test_terminal git status --porcelain | test_decode_color >output &&
	test_cmp expect output


ok 45 - status --porcelain ignores color.status

expecting success of 7508.46 'status --porcelain respects -b': 

	git status --porcelain -b >output &&
	{
		echo "## main...upstream [ahead 1, behind 2]" &&
		cat expect
	} >tmp &&
	mv tmp expect &&
	test_cmp expect output


ok 46 - status --porcelain respects -b

expecting success of 7508.47 'status without relative paths': 
	cat >expect <<\EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	test_config status.relativePaths false &&
	(cd dir1 && git status) >output &&
	test_cmp expect output


ok 47 - status without relative paths

expecting success of 7508.48 'status -s without relative paths': 

	test_config status.relativePaths false &&
	(cd dir1 && git status -s) >output &&
	test_cmp expect output


ok 48 - status -s without relative paths

expecting success of 7508.49 'status -s without relative paths': 
	test_when_finished "git rm --cached \"file with spaces\"; rm -f file*" &&
	>"file with spaces" &&
	>"file with spaces 2" &&
	>"expect with spaces" &&
	git add "file with spaces" &&

	git status -s >output &&
	test_cmp expect output &&

	git status -s --ignored >output &&
	grep "^!! \"expect with spaces\"$" output &&
	grep -v "^!! " output >output-wo-ignored &&
	test_cmp expect output-wo-ignored

!! "expect with spaces"
rm 'file with spaces'
ok 49 - status -s without relative paths

expecting success of 7508.50 'dry-run of partial commit excluding new file in index': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/
	untracked

EOF
	git commit --dry-run dir1/modified >output &&
	test_cmp expect output

ok 50 - dry-run of partial commit excluding new file in index

expecting success of 7508.51 'status refreshes the index': 
	touch dir2/added &&
	git status &&
	git diff-files >output &&
	test_cmp expect output

On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

ok 51 - status refreshes the index

expecting success of 7508.52 'status shows detached HEAD properly after checking out non-local upstream branch': 
	test_when_finished rm -rf upstream downstream actual &&

	test_create_repo upstream &&
	test_commit -C upstream foo &&

	git clone upstream downstream &&
	git -C downstream checkout @{u} &&
	git -C downstream status >actual &&
	grep -E "HEAD detached at [0-9a-f]+" actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7508-status/upstream/.git/
[master (root-commit) f80cabb] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
Cloning into 'downstream'...
done.
Note: switching to '@{u}'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at f80cabb foo
HEAD detached at f80cabb
ok 52 - status shows detached HEAD properly after checking out non-local upstream branch

expecting success of 7508.53 'setup status submodule summary': 
	test_create_repo sm && (
		cd sm &&
		>foo &&
		git add foo &&
		git commit -m "Add foo"
	) &&
	git add sm

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7508-status/sm/.git/
[master (root-commit) a2af2f1] Add foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
warning: adding embedded git repository: sm
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint: 	git submodule add <url> sm
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint: 	git rm --cached sm
hint: 
hint: See "git help submodule" for more information.
ok 53 - setup status submodule summary

expecting success of 7508.54 'status submodule summary is disabled by default': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added
	new file:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git status >output &&
	test_cmp expect output

ok 54 - status submodule summary is disabled by default

expecting success of 7508.55 'status --untracked-files=all does not show submodule': 
	git status --untracked-files=all >output &&
	test_cmp expect output

ok 55 - status --untracked-files=all does not show submodule

expecting success of 7508.56 'status -s submodule summary is disabled by default': 
	git status -s >output &&
	test_cmp expect output

ok 56 - status -s submodule summary is disabled by default

expecting success of 7508.57 'status -s --untracked-files=all does not show submodule': 
	git status -s --untracked-files=all >output &&
	test_cmp expect output

ok 57 - status -s --untracked-files=all does not show submodule

expecting success of 7508.58 'status submodule summary': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 1 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   dir2/added
	new file:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Submodule changes to be committed:

* sm 0000000...$head (1):
  > Add foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git config status.submodulesummary 10 &&
	git status >output &&
	test_cmp expect output

ok 58 - status submodule summary

expecting success of 7508.59 'status submodule summary with status.displayCommentPrefix=false': 
	strip_comments expect &&
	git -c status.displayCommentPrefix=false status >output &&
	test_cmp expect output

ok 59 - status submodule summary with status.displayCommentPrefix=false

expecting success of 7508.60 'commit with submodule summary ignores status.displayCommentPrefix': 
	commit_template_commented

Aborting commit due to empty commit message.
ok 60 - commit with submodule summary ignores status.displayCommentPrefix

expecting success of 7508.61 'status -s submodule summary': 
	git status -s >output &&
	test_cmp expect output

ok 61 - status -s submodule summary

expecting success of 7508.62 'status submodule summary (clean submodule): commit': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git commit -m "commit submodule" &&
	git config status.submodulesummary 10 &&
	test_must_fail git commit --dry-run >output &&
	test_cmp expect output &&
	git status >output &&
	test_cmp expect output

[main 49f874e] commit submodule
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 dir2/added
 create mode 160000 sm
ok 62 - status submodule summary (clean submodule): commit

expecting success of 7508.63 'status -s submodule summary (clean submodule)': 
	git status -s >output &&
	test_cmp expect output

ok 63 - status -s submodule summary (clean submodule)

expecting success of 7508.64 'status -z implies porcelain': 
	git status --porcelain |
	perl -pe "s/\012/\000/g" >expect &&
	git status -z >output &&
	test_cmp expect output

ok 64 - status -z implies porcelain

expecting success of 7508.65 'commit --dry-run submodule summary (--amend)': 
	cat >expect <<EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --source=HEAD^1 --staged <file>..." to unstage)
	new file:   dir2/added
	new file:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Submodule changes to be committed:

* sm 0000000...$head (1):
  > Add foo

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git config status.submodulesummary 10 &&
	git commit --dry-run --amend >output &&
	test_cmp expect output

ok 65 - commit --dry-run submodule summary (--amend)

checking prerequisite: SANITY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SANITY" &&
	mkdir SANETESTD.1 SANETESTD.2 &&

	chmod +w SANETESTD.1 SANETESTD.2 &&
	>SANETESTD.1/x 2>SANETESTD.2/x &&
	chmod -w SANETESTD.1 &&
	chmod -r SANETESTD.1/x &&
	chmod -rx SANETESTD.2 ||
	BUG "cannot prepare SANETESTD"

	! test -r SANETESTD.1/x &&
	! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
	status=$?

	chmod +rwx SANETESTD.1 SANETESTD.2 &&
	rm -rf SANETESTD.1 SANETESTD.2 ||
	BUG "cannot clean SANETESTD"
	return $status

)
rm: cannot remove 'SANETESTD.1/x': Permission denied
prerequisite SANITY ok
expecting success of 7508.66 'status succeeds in a read-only repository': 
	test_when_finished "chmod 775 .git" &&
	(
		chmod a-w .git &&
		# make dir1/tracked stat-dirty
		>dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
		git status -s >output &&
		! grep dir1/tracked output &&
		# make sure "status" succeeded without writing index out
		git diff-files | grep dir1/tracked
	)

:100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M	dir1/tracked
ok 66 - status succeeds in a read-only repository

expecting success of 7508.67 '--ignore-submodules=untracked suppresses submodules with untracked content': 
	cat > expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Submodule changes to be committed:

* sm $head...$new_head (1):
  > Add bar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	echo modified  sm/untracked &&
	git status --ignore-submodules=untracked >output &&
	test_cmp expect output

modified sm/untracked
ok 67 - --ignore-submodules=untracked suppresses submodules with untracked content

expecting success of 7508.68 '.gitmodules ignore=untracked suppresses submodules with untracked content': 
	test_config diff.ignoreSubmodules dirty &&
	git status >output &&
	test_cmp expect output &&
	git config --add -f .gitmodules submodule.subname.ignore untracked &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 68 - .gitmodules ignore=untracked suppresses submodules with untracked content

expecting success of 7508.69 '.git/config ignore=untracked suppresses submodules with untracked content': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore untracked &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config --remove-section -f .gitmodules submodule.subname

ok 69 - .git/config ignore=untracked suppresses submodules with untracked content

expecting success of 7508.70 '--ignore-submodules=dirty suppresses submodules with untracked content': 
	git status --ignore-submodules=dirty >output &&
	test_cmp expect output

ok 70 - --ignore-submodules=dirty suppresses submodules with untracked content

expecting success of 7508.71 '.gitmodules ignore=dirty suppresses submodules with untracked content': 
	test_config diff.ignoreSubmodules dirty &&
	git status >output &&
	! test -s actual &&
	git config --add -f .gitmodules submodule.subname.ignore dirty &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 71 - .gitmodules ignore=dirty suppresses submodules with untracked content

expecting success of 7508.72 '.git/config ignore=dirty suppresses submodules with untracked content': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore dirty &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 72 - .git/config ignore=dirty suppresses submodules with untracked content

expecting success of 7508.73 '--ignore-submodules=dirty suppresses submodules with modified content': 
	echo modified >sm/foo &&
	git status --ignore-submodules=dirty >output &&
	test_cmp expect output

ok 73 - --ignore-submodules=dirty suppresses submodules with modified content

expecting success of 7508.74 '.gitmodules ignore=dirty suppresses submodules with modified content': 
	git config --add -f .gitmodules submodule.subname.ignore dirty &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 74 - .gitmodules ignore=dirty suppresses submodules with modified content

expecting success of 7508.75 '.git/config ignore=dirty suppresses submodules with modified content': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore dirty &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 75 - .git/config ignore=dirty suppresses submodules with modified content

expecting success of 7508.76 '--ignore-submodules=untracked doesn't suppress submodules with modified content': 
	cat > expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
	modified:   dir1/modified
	modified:   sm (modified content)

Submodule changes to be committed:

* sm $head...$new_head (1):
  > Add bar

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git status --ignore-submodules=untracked > output &&
	test_cmp expect output

ok 76 - --ignore-submodules=untracked doesn't suppress submodules with modified content

expecting success of 7508.77 '.gitmodules ignore=untracked doesn't suppress submodules with modified content': 
	git config --add -f .gitmodules submodule.subname.ignore untracked &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 77 - .gitmodules ignore=untracked doesn't suppress submodules with modified content

expecting success of 7508.78 '.git/config ignore=untracked doesn't suppress submodules with modified content': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore untracked &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 78 - .git/config ignore=untracked doesn't suppress submodules with modified content

expecting success of 7508.79 '--ignore-submodules=untracked doesn't suppress submodule summary': 
	cat > expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified
	modified:   sm (new commits)

Submodule changes to be committed:

* sm $head...$new_head (1):
  > Add bar

Submodules changed but not updated:

* sm $new_head...$head2 (1):
  > 2nd commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git status --ignore-submodules=untracked > output &&
	test_cmp expect output

ok 79 - --ignore-submodules=untracked doesn't suppress submodule summary

expecting success of 7508.80 '.gitmodules ignore=untracked doesn't suppress submodule summary': 
	git config --add -f .gitmodules submodule.subname.ignore untracked &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 80 - .gitmodules ignore=untracked doesn't suppress submodule summary

expecting success of 7508.81 '.git/config ignore=untracked doesn't suppress submodule summary': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore untracked &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 81 - .git/config ignore=untracked doesn't suppress submodule summary

expecting success of 7508.82 '--ignore-submodules=dirty doesn't suppress submodule summary': 
	git status --ignore-submodules=dirty > output &&
	test_cmp expect output

ok 82 - --ignore-submodules=dirty doesn't suppress submodule summary

expecting success of 7508.83 '.gitmodules ignore=dirty doesn't suppress submodule summary': 
	git config --add -f .gitmodules submodule.subname.ignore dirty &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 83 - .gitmodules ignore=dirty doesn't suppress submodule summary

expecting success of 7508.84 '.git/config ignore=dirty doesn't suppress submodule summary': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore dirty &&
	git config --add submodule.subname.path sm &&
	git status >output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 84 - .git/config ignore=dirty doesn't suppress submodule summary

expecting success of 7508.85 'status (core.commentchar with submodule summary)': 
	test_config core.commentchar ";" &&
	git -c status.displayCommentPrefix=true status >output &&
	test_cmp expect output

ok 85 - status (core.commentchar with submodule summary)

expecting success of 7508.86 'status (core.commentchar with two chars with submodule summary)': 
	test_config core.commentchar ";;" &&
	test_must_fail git -c status.displayCommentPrefix=true status

error: core.commentChar should only be one character
fatal: bad config variable 'core.commentchar' in file '.git/config' at line 6
ok 86 - status (core.commentchar with two chars with submodule summary)

expecting success of 7508.87 '--ignore-submodules=all suppresses submodule summary': 
	cat > expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

no changes added to commit (use "git add" and/or "git commit -a")
EOF
	git status --ignore-submodules=all > output &&
	test_cmp expect output

ok 87 - --ignore-submodules=all suppresses submodule summary

expecting success of 7508.88 '.gitmodules ignore=all suppresses unstaged submodule summary': 
	cat > expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

EOF
	git config --add -f .gitmodules submodule.subname.ignore all &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git status > output &&
	test_cmp expect output &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 88 - .gitmodules ignore=all suppresses unstaged submodule summary

expecting success of 7508.89 '.git/config ignore=all suppresses unstaged submodule summary': 
	git config --add -f .gitmodules submodule.subname.ignore none &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore all &&
	git config --add submodule.subname.path sm &&
	git status > output &&
	test_cmp expect output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

ok 89 - .git/config ignore=all suppresses unstaged submodule summary

expecting success of 7508.90 'setup of test environment': 
	git config status.showUntrackedFiles no &&
	git status -s >expected_short &&
	git status --no-short >expected_noshort

ok 90 - setup of test environment

expecting success of 7508.91 '"status.short=true" same as "-s"': 
	git -c status.short=true status >actual &&
	test_cmp expected_short actual

ok 91 - "status.short=true" same as "-s"

expecting success of 7508.92 '"status.short=true" weaker than "--no-short"': 
	git -c status.short=true status --no-short >actual &&
	test_cmp expected_noshort actual

ok 92 - "status.short=true" weaker than "--no-short"

expecting success of 7508.93 '"status.short=false" same as "--no-short"': 
	git -c status.short=false status >actual &&
	test_cmp expected_noshort actual

ok 93 - "status.short=false" same as "--no-short"

expecting success of 7508.94 '"status.short=false" weaker than "-s"': 
	git -c status.short=false status -s >actual &&
	test_cmp expected_short actual

ok 94 - "status.short=false" weaker than "-s"

expecting success of 7508.95 '"status.branch=true" same as "-b"': 
	git status -sb >expected_branch &&
	git -c status.branch=true status -s >actual &&
	test_cmp expected_branch actual

ok 95 - "status.branch=true" same as "-b"

expecting success of 7508.96 '"status.branch=true" different from "--no-branch"': 
	git status -s --no-branch  >expected_nobranch &&
	git -c status.branch=true status -s >actual &&
	! test_cmp expected_nobranch actual

--- expected_nobranch	2022-12-28 08:04:31.336537431 +0000
+++ actual	2022-12-28 08:04:31.406539970 +0000
@@ -1,2 +1,3 @@
+## main...upstream [ahead 2, behind 2]
  M dir1/modified
 MM sm
ok 96 - "status.branch=true" different from "--no-branch"

expecting success of 7508.97 '"status.branch=true" weaker than "--no-branch"': 
	git -c status.branch=true status -s --no-branch >actual &&
	test_cmp expected_nobranch actual

ok 97 - "status.branch=true" weaker than "--no-branch"

expecting success of 7508.98 '"status.branch=true" weaker than "--porcelain"': 
       git -c status.branch=true status --porcelain >actual &&
       test_cmp expected_nobranch actual

ok 98 - "status.branch=true" weaker than "--porcelain"

expecting success of 7508.99 '"status.branch=false" same as "--no-branch"': 
	git -c status.branch=false status -s >actual &&
	test_cmp expected_nobranch actual

ok 99 - "status.branch=false" same as "--no-branch"

expecting success of 7508.100 '"status.branch=false" weaker than "-b"': 
	git -c status.branch=false status -sb >actual &&
	test_cmp expected_branch actual

ok 100 - "status.branch=false" weaker than "-b"

expecting success of 7508.101 'Restore default test environment': 
	git config --unset status.showUntrackedFiles

ok 101 - Restore default test environment

expecting success of 7508.102 'git commit will commit a staged but ignored submodule': 
	git config --add -f .gitmodules submodule.subname.ignore all &&
	git config --add -f .gitmodules submodule.subname.path sm &&
	git config --add submodule.subname.ignore all &&
	git status -s --ignore-submodules=dirty >output &&
	test_i18ngrep "^M. sm" output &&
	GIT_EDITOR="echo hello >>\"\$1\"" &&
	export GIT_EDITOR &&
	git commit -uno &&
	git status -s --ignore-submodules=dirty >output &&
	test_i18ngrep ! "^M. sm" output

MM sm
[main a9ec044] hello /<<PKGBUILDDIR>>/t/trash directory.t7508-status/.git/COMMIT_EDITMSG
 Author: A U Thor <author@example.com>
ok 102 - git commit will commit a staged but ignored submodule

expecting success of 7508.103 'git commit --dry-run will show a staged but ignored submodule': 
	git reset HEAD^ &&
	git add sm &&
	cat >expect << EOF &&
On branch main
Your branch and 'upstream' have diverged,
and have 2 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   sm

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dir1/modified

Untracked files not listed (use -u option to show untracked files)
EOF
	git commit -uno --dry-run >output &&
	test_cmp expect output &&
	git status -s --ignore-submodules=dirty >output &&
	test_i18ngrep "^M. sm" output

Unstaged changes after reset:
M	dir1/modified
M	sm
M  sm
ok 103 - git commit --dry-run will show a staged but ignored submodule

expecting success of 7508.104 'git commit -m will commit a staged but ignored submodule': 
	git commit -uno -m message &&
	git status -s --ignore-submodules=dirty >output &&
	test_i18ngrep ! "^M. sm" output &&
	git config --remove-section submodule.subname &&
	git config -f .gitmodules  --remove-section submodule.subname

[main 45c17dd] message
 Author: A U Thor <author@example.com>
ok 104 - git commit -m will commit a staged but ignored submodule

expecting success of 7508.105 'show stash info with "--show-stash"': 
	git reset --hard &&
	git stash clear &&
	echo 1 >file &&
	git add file &&
	git stash &&
	git status >expected_default &&
	git status --show-stash >expected_with_stash &&
	test_i18ngrep "^Your stash currently has 1 entry$" expected_with_stash

HEAD is now at 45c17dd message
Saved working directory and index state WIP on main: 45c17dd message
Your stash currently has 1 entry
ok 105 - show stash info with "--show-stash"

expecting success of 7508.106 'no stash info with "--show-stash --no-show-stash"': 
	git status --show-stash --no-show-stash >expected_without_stash &&
	test_cmp expected_default expected_without_stash

ok 106 - no stash info with "--show-stash --no-show-stash"

expecting success of 7508.107 '"status.showStash=false" weaker than "--show-stash"': 
	git -c status.showStash=false status --show-stash >actual &&
	test_cmp expected_with_stash actual

ok 107 - "status.showStash=false" weaker than "--show-stash"

expecting success of 7508.108 '"status.showStash=true" weaker than "--no-show-stash"': 
	git -c status.showStash=true status --no-show-stash >actual &&
	test_cmp expected_without_stash actual

ok 108 - "status.showStash=true" weaker than "--no-show-stash"

expecting success of 7508.109 'no additional info if no stash entries': 
	git stash clear &&
	git -c status.showStash=true status >actual &&
	test_cmp expected_without_stash actual

ok 109 - no additional info if no stash entries

expecting success of 7508.110 '"No commits yet" should be noted in status output': 
	git checkout --orphan empty-branch-1 &&
	git status >output &&
	test_i18ngrep "No commits yet" output

Switched to a new branch 'empty-branch-1'
No commits yet
ok 110 - "No commits yet" should be noted in status output

expecting success of 7508.111 '"No commits yet" should not be noted in status output': 
	git checkout --orphan empty-branch-2 &&
	test_commit test-commit-1 &&
	git status >output &&
	test_i18ngrep ! "No commits yet" output

Switched to a new branch 'empty-branch-2'
[empty-branch-2 (root-commit) f194efb] test-commit-1
 Author: A U Thor <author@example.com>
 10 files changed, 7 insertions(+)
 create mode 100644 .gitconfig
 create mode 100644 dir1/modified
 create mode 100644 dir1/tracked
 create mode 100644 dir2/added
 create mode 100644 modified
 create mode 160000 sm
 create mode 100644 test-commit-1.t
 create mode 100644 tracked
 create mode 100644 upstream1.t
 create mode 100644 upstream2.t
ok 111 - "No commits yet" should not be noted in status output

expecting success of 7508.112 '"Initial commit" should be noted in commit template': 
	git checkout --orphan empty-branch-3 &&
	touch to_be_committed_1 &&
	git add to_be_committed_1 &&
	git commit --dry-run >output &&
	test_i18ngrep "Initial commit" output

Switched to a new branch 'empty-branch-3'
Initial commit
ok 112 - "Initial commit" should be noted in commit template

expecting success of 7508.113 '"Initial commit" should not be noted in commit template': 
	git checkout --orphan empty-branch-4 &&
	test_commit test-commit-2 &&
	touch to_be_committed_2 &&
	git add to_be_committed_2 &&
	git commit --dry-run >output &&
	test_i18ngrep ! "Initial commit" output

Switched to a new branch 'empty-branch-4'
[empty-branch-4 (root-commit) 92016e1] test-commit-2
 Author: A U Thor <author@example.com>
 12 files changed, 8 insertions(+)
 create mode 100644 .gitconfig
 create mode 100644 dir1/modified
 create mode 100644 dir1/tracked
 create mode 100644 dir2/added
 create mode 100644 modified
 create mode 160000 sm
 create mode 100644 test-commit-1.t
 create mode 100644 test-commit-2.t
 create mode 100644 to_be_committed_1
 create mode 100644 tracked
 create mode 100644 upstream1.t
 create mode 100644 upstream2.t
ok 113 - "Initial commit" should not be noted in commit template

expecting success of 7508.114 '--no-optional-locks prevents index update': 
	test_set_magic_mtime .git/index &&
	git --no-optional-locks status &&
	test_is_magic_mtime .git/index &&
	git status &&
	! test_is_magic_mtime .git/index

On branch empty-branch-4
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   to_be_committed_2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

On branch empty-branch-4
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   to_be_committed_2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

--- .git/test-mtime-expect	2022-12-28 08:04:42.016924747 +0000
+++ .git/test-mtime-actual	2022-12-28 08:04:42.036925472 +0000
@@ -1 +1 @@
-1234567890
+1672214681
ok 114 - --no-optional-locks prevents index update

expecting success of 7508.115 'racy timestamps will be fixed for clean worktree': 
	echo content >racy-dirty &&
	echo content >racy-racy &&
	git add racy* &&
	git commit -m "racy test files" &&
	# let status rewrite the index, if necessary; after that we expect
	# no more index writes unless caused by racy timestamps; note that
	# timestamps may already be racy now (depending on previous tests)
	git status &&
	test_set_magic_mtime .git/index &&
	git status &&
	! test_is_magic_mtime .git/index

[empty-branch-4 1041e20] racy test files
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+)
 create mode 100644 racy-dirty
 create mode 100644 racy-racy
 create mode 100644 to_be_committed_2
On branch empty-branch-4
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

nothing added to commit but untracked files present (use "git add" to track)
On branch empty-branch-4
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

nothing added to commit but untracked files present (use "git add" to track)
--- .git/test-mtime-expect	2022-12-28 08:04:43.421975700 +0000
+++ .git/test-mtime-actual	2022-12-28 08:04:43.436976244 +0000
@@ -1 +1 @@
-1234567890
+1672214682
ok 115 - racy timestamps will be fixed for clean worktree

expecting success of 7508.116 'racy timestamps will be fixed for dirty worktree': 
	echo content2 >racy-dirty &&
	git status &&
	test_set_magic_mtime .git/index &&
	git status &&
	! test_is_magic_mtime .git/index

On branch empty-branch-4
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   racy-dirty

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

no changes added to commit (use "git add" and/or "git commit -a")
On branch empty-branch-4
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   racy-dirty

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitmodules
	actual
	dir1/untracked
	dir2/modified
	dir2/untracked
	untracked

no changes added to commit (use "git add" and/or "git commit -a")
--- .git/test-mtime-expect	2022-12-28 08:04:44.692021757 +0000
+++ .git/test-mtime-actual	2022-12-28 08:04:44.712022482 +0000
@@ -1 +1 @@
-1234567890
+1672214684
ok 116 - racy timestamps will be fixed for dirty worktree

# passed all 116 test(s)
1..116
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7602-merge-octopus-many.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7602-merge-octopus-many/.git/
expecting success of 7602.1 'setup': 
	echo c0 > c0.c &&
	git add c0.c &&
	git commit -m c0 &&
	git tag c0 &&
	i=1 &&
	while test $i -le 30
	do
		git reset --hard c0 &&
		echo c$i > c$i.c &&
		git add c$i.c &&
		git commit -m c$i &&
		git tag c$i &&
		i=$(expr $i + 1) || return 1
	done

[master (root-commit) e4f5a3c] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
HEAD is now at e4f5a3c c0
[master 429abf0] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
HEAD is now at e4f5a3c c0
[master 028ea41] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
HEAD is now at e4f5a3c c0
[master c0f42ec] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.c
HEAD is now at e4f5a3c c0
[master b7e05d5] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.c
HEAD is now at e4f5a3c c0
[master c488b09] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.c
HEAD is now at e4f5a3c c0
[master ec4097b] c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c6.c
HEAD is now at e4f5a3c c0
[master 0ce0f8d] c7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c7.c
HEAD is now at e4f5a3c c0
[master ff3d47c] c8
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c8.c
HEAD is now at e4f5a3c c0
[master 7461614] c9
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c9.c
HEAD is now at e4f5a3c c0
[master 1afdb59] c10
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c10.c
HEAD is now at e4f5a3c c0
[master 0afbd17] c11
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c11.c
HEAD is now at e4f5a3c c0
[master 15bc59a] c12
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c12.c
HEAD is now at e4f5a3c c0
[master f06f676] c13
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c13.c
HEAD is now at e4f5a3c c0
[master a776bd6] c14
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c14.c
HEAD is now at e4f5a3c c0
[master 0d31625] c15
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c15.c
HEAD is now at e4f5a3c c0
[master 51ac193] c16
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c16.c
HEAD is now at e4f5a3c c0
[master 60d6a53] c17
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c17.c
HEAD is now at e4f5a3c c0
[master 3ce5753] c18
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c18.c
HEAD is now at e4f5a3c c0
[master 7a37c76] c19
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c19.c
HEAD is now at e4f5a3c c0
[master 4125031] c20
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c20.c
HEAD is now at e4f5a3c c0
[master f295446] c21
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c21.c
HEAD is now at e4f5a3c c0
[master aefb514] c22
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c22.c
HEAD is now at e4f5a3c c0
[master 6d1037c] c23
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c23.c
HEAD is now at e4f5a3c c0
[master 43701ce] c24
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c24.c
HEAD is now at e4f5a3c c0
[master 19740f9] c25
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c25.c
HEAD is now at e4f5a3c c0
[master bef4659] c26
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c26.c
HEAD is now at e4f5a3c c0
[master 5d3dacb] c27
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c27.c
HEAD is now at e4f5a3c c0
[master e1b2fdb] c28
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c28.c
HEAD is now at e4f5a3c c0
[master 2088804] c29
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c29.c
HEAD is now at e4f5a3c c0
[master fb57d80] c30
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c30.c
ok 1 - setup

expecting success of 7602.2 'merge c1 with c2, c3, c4, ... c29': 
	git reset --hard c1 &&
	i=2 &&
	refs="" &&
	while test $i -le 30
	do
		refs="$refs c$i" &&
		i=$(expr $i + 1) || return 1
	done &&
	git merge $refs &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	i=1 &&
	while test $i -le 30
	do
		test "$(git rev-parse c$i)" = "$(git rev-parse HEAD^$i)" &&
		i=$(expr $i + 1) || return 1
	done &&
	git diff --exit-code &&
	i=1 &&
	while test $i -le 30
	do
		test -f c$i.c &&
		i=$(expr $i + 1) || return 1
	done

HEAD is now at 429abf0 c1
Trying simple merge with c2
Trying simple merge with c3
Trying simple merge with c4
Trying simple merge with c5
Trying simple merge with c6
Trying simple merge with c7
Trying simple merge with c8
Trying simple merge with c9
Trying simple merge with c10
Trying simple merge with c11
Trying simple merge with c12
Trying simple merge with c13
Trying simple merge with c14
Trying simple merge with c15
Trying simple merge with c16
Trying simple merge with c17
Trying simple merge with c18
Trying simple merge with c19
Trying simple merge with c20
Trying simple merge with c21
Trying simple merge with c22
Trying simple merge with c23
Trying simple merge with c24
Trying simple merge with c25
Trying simple merge with c26
Trying simple merge with c27
Trying simple merge with c28
Trying simple merge with c29
Trying simple merge with c30
Merge made by the 'octopus' strategy.
 c10.c | 1 +
 c11.c | 1 +
 c12.c | 1 +
 c13.c | 1 +
 c14.c | 1 +
 c15.c | 1 +
 c16.c | 1 +
 c17.c | 1 +
 c18.c | 1 +
 c19.c | 1 +
 c2.c  | 1 +
 c20.c | 1 +
 c21.c | 1 +
 c22.c | 1 +
 c23.c | 1 +
 c24.c | 1 +
 c25.c | 1 +
 c26.c | 1 +
 c27.c | 1 +
 c28.c | 1 +
 c29.c | 1 +
 c3.c  | 1 +
 c30.c | 1 +
 c4.c  | 1 +
 c5.c  | 1 +
 c6.c  | 1 +
 c7.c  | 1 +
 c8.c  | 1 +
 c9.c  | 1 +
 29 files changed, 29 insertions(+)
 create mode 100644 c10.c
 create mode 100644 c11.c
 create mode 100644 c12.c
 create mode 100644 c13.c
 create mode 100644 c14.c
 create mode 100644 c15.c
 create mode 100644 c16.c
 create mode 100644 c17.c
 create mode 100644 c18.c
 create mode 100644 c19.c
 create mode 100644 c2.c
 create mode 100644 c20.c
 create mode 100644 c21.c
 create mode 100644 c22.c
 create mode 100644 c23.c
 create mode 100644 c24.c
 create mode 100644 c25.c
 create mode 100644 c26.c
 create mode 100644 c27.c
 create mode 100644 c28.c
 create mode 100644 c29.c
 create mode 100644 c3.c
 create mode 100644 c30.c
 create mode 100644 c4.c
 create mode 100644 c5.c
 create mode 100644 c6.c
 create mode 100644 c7.c
 create mode 100644 c8.c
 create mode 100644 c9.c
ok 2 - merge c1 with c2, c3, c4, ... c29

expecting success of 7602.3 'merge output uses pretty names': 
	git reset --hard c1 &&
	git merge c2 c3 c4 >actual &&
	test_cmp expected actual

HEAD is now at 429abf0 c1
ok 3 - merge output uses pretty names

expecting success of 7602.4 'merge reduces irrelevant remote heads': 
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		mv expected expected.tmp &&
		sed s/recursive/ort/ expected.tmp >expected &&
		rm expected.tmp
	fi &&
	GIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual &&
	test_cmp expected actual

ok 4 - merge reduces irrelevant remote heads

expecting success of 7602.5 'merge fast-forward output uses pretty names': 
	git reset --hard c0 &&
	git merge c1 c2 >actual &&
	test_cmp expected actual

HEAD is now at e4f5a3c c0
ok 5 - merge fast-forward output uses pretty names

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7604-merge-custom-message.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7604-merge-custom-message/.git/
expecting success of 7604.1 'setup': 
	echo c0 >c0.c &&
	git add c0.c &&
	git commit -m c0 &&
	git tag c0 &&
	echo c1 >c1.c &&
	git add c1.c &&
	git commit -m c1 &&
	git tag c1 &&
	git reset --hard c0 &&
	echo c2 >c2.c &&
	git add c2.c &&
	git commit -m c2 &&
	git tag c2 &&
	create_merge_msgs

[master (root-commit) e4f5a3c] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[master 429abf0] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
HEAD is now at e4f5a3c c0
[master 028ea41] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 1 - setup

expecting success of 7604.2 'merge c2 with a custom message': 
	git reset --hard c1 &&
	git merge -m "$(cat exp.subject)" c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp exp.subject actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 2 - merge c2 with a custom message

expecting success of 7604.3 'merge --log appends to custom message': 
	git reset --hard c1 &&
	git merge --log -m "$(cat exp.subject)" c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp exp.log actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 3 - merge --log appends to custom message

expecting success of 7604.4 'prepare file with comment line and trailing newlines': 
	printf "%s" "$mesg_with_comment_and_newlines" >expect

ok 4 - prepare file with comment line and trailing newlines

expecting success of 7604.5 'cleanup commit messages (verbatim option)': 
	git reset --hard c1 &&
	git merge --cleanup=verbatim -F expect c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 5 - cleanup commit messages (verbatim option)

expecting success of 7604.6 'cleanup commit messages (whitespace option)': 
	git reset --hard c1 &&
	test_write_lines "" "# text" "" >text &&
	echo "# text" >expect &&
	git merge --cleanup=whitespace -F text c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 6 - cleanup commit messages (whitespace option)

expecting success of 7604.7 'cleanup merge messages (scissors option)': 
	git reset --hard c1 &&
	cat >text <<-\EOF &&

	# to be kept

	  # ------------------------ >8 ------------------------
	# to be kept, too
	# ------------------------ >8 ------------------------
	to be removed
	# ------------------------ >8 ------------------------
	to be removed, too
	EOF

	cat >expect <<-\EOF &&
	# to be kept

	  # ------------------------ >8 ------------------------
	# to be kept, too
	EOF
	git merge --cleanup=scissors -e -F text c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 7 - cleanup merge messages (scissors option)

expecting success of 7604.8 'cleanup commit messages (strip option)': 
	git reset --hard c1 &&
	test_write_lines "" "# text" "sample" "" >text &&
	echo sample >expect &&
	git merge --cleanup=strip -F text c2 &&
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 8 - cleanup commit messages (strip option)

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7605-merge-resolve.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7605-merge-resolve/.git/
expecting success of 7605.1 'setup': 
	echo c0 > c0.c &&
	git add c0.c &&
	git commit -m c0 &&
	git tag c0 &&
	echo c1 > c1.c &&
	git add c1.c &&
	git commit -m c1 &&
	git tag c1 &&
	git reset --hard c0 &&
	echo c2 > c2.c &&
	git add c2.c &&
	git commit -m c2 &&
	git tag c2 &&
	git reset --hard c0 &&
	echo c3 > c2.c &&
	git add c2.c &&
	git commit -m c3 &&
	git tag c3

[master (root-commit) e4f5a3c] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[master 429abf0] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
HEAD is now at e4f5a3c c0
[master 028ea41] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
HEAD is now at e4f5a3c c0
[master c984a5f] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 1 - setup

expecting success of 7605.2 'merge c1 to c2': 
	git reset --hard c1 &&
	git merge -s resolve c2 &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
	git diff --exit-code &&
	test -f c0.c &&
	test -f c1.c &&
	test -f c2.c &&
	test 3 = $(git ls-tree -r HEAD | wc -l) &&
	test 3 = $(git ls-files | wc -l)

HEAD is now at 429abf0 c1
Trying really trivial in-index merge...
Wonderful.
In-index merge
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 2 - merge c1 to c2

expecting success of 7605.3 'merge c1 to c2, again': 
	git reset --hard c1 &&
	git merge -s resolve c2 &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
	git diff --exit-code &&
	test -f c0.c &&
	test -f c1.c &&
	test -f c2.c &&
	test 3 = $(git ls-tree -r HEAD | wc -l) &&
	test 3 = $(git ls-files | wc -l)

HEAD is now at 429abf0 c1
Trying really trivial in-index merge...
Wonderful.
In-index merge
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 3 - merge c1 to c2, again

expecting success of 7605.4 'merge c2 to c3 (fails)': 
	git reset --hard c2 &&
	test_must_fail git merge -s resolve c3

HEAD is now at 028ea41 c2
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Added c2.c in both, but differently.
fatal: unable to read blob object e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
error: Could not stat : No such file or directory
ERROR: content conflict in c2.c
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 4 - merge c2 to c3 (fails)

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7603-merge-reduce-heads.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7603-merge-reduce-heads/.git/
expecting success of 7603.1 'setup': 
	echo c0 > c0.c &&
	git add c0.c &&
	git commit -m c0 &&
	git tag c0 &&
	echo c1 > c1.c &&
	git add c1.c &&
	git commit -m c1 &&
	git tag c1 &&
	git reset --hard c0 &&
	echo c2 > c2.c &&
	git add c2.c &&
	git commit -m c2 &&
	git tag c2 &&
	git reset --hard c0 &&
	echo c3 > c3.c &&
	git add c3.c &&
	git commit -m c3 &&
	git tag c3 &&
	git reset --hard c0 &&
	echo c4 > c4.c &&
	git add c4.c &&
	git commit -m c4 &&
	git tag c4 &&
	echo c5 > c5.c &&
	git add c5.c &&
	git commit -m c5 &&
	git tag c5

[master (root-commit) e4f5a3c] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[master 429abf0] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
HEAD is now at e4f5a3c c0
[master 028ea41] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
HEAD is now at e4f5a3c c0
[master c0f42ec] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.c
HEAD is now at e4f5a3c c0
[master b7e05d5] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.c
[master dee44f7] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.c
ok 1 - setup

expecting success of 7603.2 'merge c1 with c2, c3, c4, c5': 
	git reset --hard c1 &&
	git merge c2 c3 c4 c5 &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
	test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
	git diff --exit-code &&
	test -f c0.c &&
	test -f c1.c &&
	test -f c2.c &&
	test -f c3.c &&
	test -f c4.c &&
	test -f c5.c &&
	git show --format=%s -s >actual &&
	! grep c1 actual &&
	grep c2 actual &&
	grep c3 actual &&
	! grep c4 actual &&
	grep c5 actual

HEAD is now at 429abf0 c1
Trying simple merge with c2
Trying simple merge with c3
Trying simple merge with c5
Merge made by the 'octopus' strategy.
 c2.c | 1 +
 c3.c | 1 +
 c4.c | 1 +
 c5.c | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 c2.c
 create mode 100644 c3.c
 create mode 100644 c4.c
 create mode 100644 c5.c
Merge tags 'c2', 'c3' and 'c5'
Merge tags 'c2', 'c3' and 'c5'
Merge tags 'c2', 'c3' and 'c5'
ok 2 - merge c1 with c2, c3, c4, c5

expecting success of 7603.3 'pull c2, c3, c4, c5 into c1': 
	git reset --hard c1 &&
	git pull --no-rebase . c2 c3 c4 c5 &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
	test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
	git diff --exit-code &&
	test -f c0.c &&
	test -f c1.c &&
	test -f c2.c &&
	test -f c3.c &&
	test -f c4.c &&
	test -f c5.c &&
	git show --format=%s -s >actual &&
	! grep c1 actual &&
	grep c2 actual &&
	grep c3 actual &&
	! grep c4 actual &&
	grep c5 actual

HEAD is now at 429abf0 c1
From .
 * tag               c2         -> FETCH_HEAD
 * tag               c3         -> FETCH_HEAD
 * tag               c4         -> FETCH_HEAD
 * tag               c5         -> FETCH_HEAD
Trying simple merge with 028ea418990be8404f3cdf85c3a920c2047edba1
Trying simple merge with c0f42ec4682bc999b51365f7ba89d0442f54d672
Trying simple merge with dee44f7dd26050a53b700857f3cd98e543cb641b
Merge made by the 'octopus' strategy.
 c2.c | 1 +
 c3.c | 1 +
 c4.c | 1 +
 c5.c | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 c2.c
 create mode 100644 c3.c
 create mode 100644 c4.c
 create mode 100644 c5.c
Merge tags 'c2', 'c3' and 'c5'
Merge tags 'c2', 'c3' and 'c5'
Merge tags 'c2', 'c3' and 'c5'
ok 3 - pull c2, c3, c4, c5 into c1

expecting success of 7603.4 'setup': 
	for i in A B C D E
	do
		echo $i > $i.c &&
		git add $i.c &&
		git commit -m $i &&
		git tag $i || return 1
	done &&
	git reset --hard A &&
	for i in F G H I
	do
		echo $i > $i.c &&
		git add $i.c &&
		git commit -m $i &&
		git tag $i || return 1
	done

[master ac8b23b] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.c
[master 4e1c755] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.c
[master 53e200e] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.c
[master 9557be5] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.c
[master 98c3d42] E
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 E.c
HEAD is now at ac8b23b A
[master 2433509] F
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F.c
[master 6188a96] G
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 G.c
[master c651c58] H
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 H.c
[master 29fd000] I
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 I.c
ok 4 - setup

expecting success of 7603.5 'merge E and I': 
	git reset --hard A &&
	git merge E I

HEAD is now at ac8b23b A
Fast-forwarding to: E
Trying simple merge with I
Merge made by the 'octopus' strategy.
 B.c | 1 +
 C.c | 1 +
 D.c | 1 +
 E.c | 1 +
 F.c | 1 +
 G.c | 1 +
 H.c | 1 +
 I.c | 1 +
 8 files changed, 8 insertions(+)
 create mode 100644 B.c
 create mode 100644 C.c
 create mode 100644 D.c
 create mode 100644 E.c
 create mode 100644 F.c
 create mode 100644 G.c
 create mode 100644 H.c
 create mode 100644 I.c
ok 5 - merge E and I

expecting success of 7603.6 'verify merge result': 
	test $(git rev-parse HEAD^1) = $(git rev-parse E) &&
	test $(git rev-parse HEAD^2) = $(git rev-parse I)

ok 6 - verify merge result

expecting success of 7603.7 'add conflicts': 
	git reset --hard E &&
	echo foo > file.c &&
	git add file.c &&
	git commit -m E2 &&
	git tag E2 &&
	git reset --hard I &&
	echo bar >file.c &&
	git add file.c &&
	git commit -m I2 &&
	git tag I2

HEAD is now at 98c3d42 E
[master cef0ecd] E2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.c
HEAD is now at 29fd000 I
[master a4105f8] I2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.c
ok 7 - add conflicts

expecting success of 7603.8 'merge E2 and I2, causing a conflict and resolve it': 
	git reset --hard A &&
	test_must_fail git merge E2 I2 &&
	echo baz > file.c &&
	git add file.c &&
	git commit -m "resolve conflict"

HEAD is now at ac8b23b A
Fast-forwarding to: E2
Trying simple merge with I2
Simple merge did not work, trying automatic merge.
Added file.c in both, but differently.
fatal: unable to read blob object e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
error: Could not stat : No such file or directory
ERROR: content conflict in file.c
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
[master fbfe01c] resolve conflict
 Author: A U Thor <author@example.com>
ok 8 - merge E2 and I2, causing a conflict and resolve it

expecting success of 7603.9 'verify merge result': 
	test $(git rev-parse HEAD^1) = $(git rev-parse E2) &&
	test $(git rev-parse HEAD^2) = $(git rev-parse I2)

ok 9 - verify merge result

expecting success of 7603.10 'fast-forward to redundant refs': 
	git reset --hard c0 &&
	git merge c4 c5

HEAD is now at e4f5a3c c0
Updating e4f5a3c..dee44f7
Fast-forward
 c4.c | 1 +
 c5.c | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 c4.c
 create mode 100644 c5.c
ok 10 - fast-forward to redundant refs

expecting success of 7603.11 'verify merge result': 
	test $(git rev-parse HEAD) = $(git rev-parse c5)

ok 11 - verify merge result

expecting success of 7603.12 'merge up-to-date redundant refs': 
	git reset --hard c5 &&
	git merge c0 c4

HEAD is now at dee44f7 c5
Already up to date.
ok 12 - merge up-to-date redundant refs

expecting success of 7603.13 'verify merge result': 
	test $(git rev-parse HEAD) = $(git rev-parse c5)

ok 13 - verify merge result

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7606-merge-custom.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7606-merge-custom/.git/
expecting success of 7606.1 'set up custom strategy': 
	cat >git-merge-theirs <<-EOF &&
	#!$SHELL_PATH
	eval git read-tree --reset -u \\\$\$#
	EOF

	chmod +x git-merge-theirs &&
	PATH=.:$PATH &&
	export PATH

ok 1 - set up custom strategy

expecting success of 7606.2 'setup': 
	test_commit c0 c0.c &&
	test_commit c1 c1.c &&
	git reset --keep c0 &&
	echo c1c1 >c1.c &&
	git add c1.c &&
	test_commit c2 c2.c &&
	git reset --keep c0 &&
	test_commit c3 c3.c

[master (root-commit) 934056f] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[master 7b51d7c] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
[master f06910a] c2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 c1.c
 create mode 100644 c2.c
[master 934e277] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.c
ok 2 - setup

expecting success of 7606.3 'merge c2 with a custom strategy': 
	git reset --hard c1 &&

	git rev-parse c1 >head.old &&
	git rev-parse c2 >second-parent.expected &&
	git rev-parse c2^{tree} >tree.expected &&
	git merge -s theirs c2 &&

	git rev-parse HEAD >head.new &&
	git rev-parse HEAD^1 >first-parent &&
	git rev-parse HEAD^2 >second-parent &&
	git rev-parse HEAD^{tree} >tree &&
	git update-index --refresh &&
	git diff --exit-code &&
	git diff --exit-code c2 HEAD &&
	git diff --exit-code c2 &&

	! test_cmp head.old head.new &&
	test_cmp head.old first-parent &&
	test_cmp second-parent.expected second-parent &&
	test_cmp tree.expected tree &&
	test -f c0.c &&
	grep c1c1 c1.c &&
	test -f c2.c

HEAD is now at 7b51d7c c1
Merge made by the 'theirs' strategy.
 c1.c | 2 +-
 c2.c | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 c2.c
--- head.old	2022-12-28 08:04:53.422338357 +0000
+++ head.new	2022-12-28 08:04:53.687347968 +0000
@@ -1 +1 @@
-7b51d7cdbd54b8c470d864639e1136d88ce718ef
+5127482d58f03334905cdbe3564c8d092aa56dbe
c1c1
ok 3 - merge c2 with a custom strategy

expecting success of 7606.4 'trivial merge with custom strategy': 
	git reset --hard c1 &&

	git rev-parse c1 >head.old &&
	git rev-parse c3 >second-parent.expected &&
	git rev-parse c3^{tree} >tree.expected &&
	git merge -s theirs c3 &&

	git rev-parse HEAD >head.new &&
	git rev-parse HEAD^1 >first-parent &&
	git rev-parse HEAD^2 >second-parent &&
	git rev-parse HEAD^{tree} >tree &&
	git update-index --refresh &&
	git diff --exit-code &&
	git diff --exit-code c3 HEAD &&
	git diff --exit-code c3 &&

	! test_cmp head.old head.new &&
	test_cmp head.old first-parent &&
	test_cmp second-parent.expected second-parent &&
	test_cmp tree.expected tree &&
	test -f c0.c &&
	! test -e c1.c &&
	test -f c3.c

HEAD is now at 7b51d7c c1
Merge made by the 'theirs' strategy.
 c1.c | 1 -
 c3.c | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 c1.c
 create mode 100644 c3.c
--- head.old	2022-12-28 08:04:54.022360117 +0000
+++ head.new	2022-12-28 08:04:54.292369909 +0000
@@ -1 +1 @@
-7b51d7cdbd54b8c470d864639e1136d88ce718ef
+f5f2abda42595469639ae786a37808202e35dcf0
ok 4 - trivial merge with custom strategy

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7601-merge-pull-config.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7601-merge-pull-config/.git/
expecting success of 7601.1 'setup': 
	echo c0 >c0.c &&
	git add c0.c &&
	git commit -m c0 &&
	git tag c0 &&
	echo c1 >c1.c &&
	git add c1.c &&
	git commit -m c1 &&
	git tag c1 &&
	git reset --hard c0 &&
	echo c2 >c2.c &&
	git add c2.c &&
	git commit -m c2 &&
	git tag c2 &&
	git reset --hard c0 &&
	echo c3 >c3.c &&
	git add c3.c &&
	git commit -m c3 &&
	git tag c3

[master (root-commit) e4f5a3c] c0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c0.c
[master 429abf0] c1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
HEAD is now at e4f5a3c c0
[master 028ea41] c2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
HEAD is now at e4f5a3c c0
[master c0f42ec] c3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c3.c
ok 1 - setup

expecting success of 7601.2 'pull.rebase not set, ff possible': 
	git reset --hard c0 &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 2 - pull.rebase not set, ff possible

expecting success of 7601.3 'pull.rebase not set and pull.ff=true': 
	git reset --hard c0 &&
	test_config pull.ff true &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 3 - pull.rebase not set and pull.ff=true

expecting success of 7601.4 'pull.rebase not set and pull.ff=false': 
	git reset --hard c0 &&
	test_config pull.ff false &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 4 - pull.rebase not set and pull.ff=false

expecting success of 7601.5 'pull.rebase not set and pull.ff=only': 
	git reset --hard c0 &&
	test_config pull.ff only &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 5 - pull.rebase not set and pull.ff=only

expecting success of 7601.6 'pull.rebase not set and --rebase given': 
	git reset --hard c0 &&
	git pull --rebase . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 6 - pull.rebase not set and --rebase given

expecting success of 7601.7 'pull.rebase not set and --no-rebase given': 
	git reset --hard c0 &&
	git pull --no-rebase . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 7 - pull.rebase not set and --no-rebase given

expecting success of 7601.8 'pull.rebase not set and --ff given': 
	git reset --hard c0 &&
	git pull --ff . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 8 - pull.rebase not set and --ff given

expecting success of 7601.9 'pull.rebase not set and --no-ff given': 
	git reset --hard c0 &&
	git pull --no-ff . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 9 - pull.rebase not set and --no-ff given

expecting success of 7601.10 'pull.rebase not set and --ff-only given': 
	git reset --hard c0 &&
	git pull --ff-only . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at e4f5a3c c0
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 10 - pull.rebase not set and --ff-only given

expecting success of 7601.11 'pull.rebase not set (not-fast-forward)': 
	git reset --hard c2 &&
	test_must_fail git -c color.advice=always pull . c1 2>err &&
	test_decode_color <err >decoded &&
	test_i18ngrep "<YELLOW>hint: " decoded &&
	test_i18ngrep "You have divergent branches" decoded

HEAD is now at 028ea41 c2
<YELLOW>hint: You have divergent branches and need to specify how to reconcile them.<RESET>
<YELLOW>hint: You can do so by running one of the following commands sometime before<RESET>
<YELLOW>hint: your next pull:<RESET>
<YELLOW>hint: <RESET>
<YELLOW>hint:   git config pull.rebase false  # merge<RESET>
<YELLOW>hint:   git config pull.rebase true   # rebase<RESET>
<YELLOW>hint:   git config pull.ff only       # fast-forward only<RESET>
<YELLOW>hint: <RESET>
<YELLOW>hint: You can replace "git config" with "git config --global" to set a default<RESET>
<YELLOW>hint: preference for all repositories. You can also pass --rebase, --no-rebase,<RESET>
<YELLOW>hint: or --ff-only on the command line to override the configured default per<RESET>
<YELLOW>hint: invocation.<RESET>
<YELLOW>hint: You have divergent branches and need to specify how to reconcile them.<RESET>
ok 11 - pull.rebase not set (not-fast-forward)

expecting success of 7601.12 'pull.rebase not set and pull.ff=true (not-fast-forward)': 
	git reset --hard c2 &&
	test_config pull.ff true &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 12 - pull.rebase not set and pull.ff=true (not-fast-forward)

expecting success of 7601.13 'pull.rebase not set and pull.ff=false (not-fast-forward)': 
	git reset --hard c2 &&
	test_config pull.ff false &&
	git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 13 - pull.rebase not set and pull.ff=false (not-fast-forward)

expecting success of 7601.14 'pull.rebase not set and pull.ff=only (not-fast-forward)': 
	git reset --hard c2 &&
	test_config pull.ff only &&
	test_must_fail git pull . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
ok 14 - pull.rebase not set and pull.ff=only (not-fast-forward)

expecting success of 7601.15 'pull.rebase not set and --rebase given (not-fast-forward)': 
	git reset --hard c2 &&
	git pull --rebase . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
ok 15 - pull.rebase not set and --rebase given (not-fast-forward)

expecting success of 7601.16 'pull.rebase not set and --no-rebase given (not-fast-forward)': 
	git reset --hard c2 &&
	git pull --no-rebase . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 16 - pull.rebase not set and --no-rebase given (not-fast-forward)

expecting success of 7601.17 'pull.rebase not set and --ff given (not-fast-forward)': 
	git reset --hard c2 &&
	git pull --ff . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 17 - pull.rebase not set and --ff given (not-fast-forward)

expecting success of 7601.18 'pull.rebase not set and --no-ff given (not-fast-forward)': 
	git reset --hard c2 &&
	git pull --no-ff . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 18 - pull.rebase not set and --no-ff given (not-fast-forward)

expecting success of 7601.19 'pull.rebase not set and --ff-only given (not-fast-forward)': 
	git reset --hard c2 &&
	test_must_fail git pull --ff-only . c1 2>err &&
	test_i18ngrep ! "You have divergent branches" err

HEAD is now at 028ea41 c2
ok 19 - pull.rebase not set and --ff-only given (not-fast-forward)

expecting success of 7601.20 '--ff-only overrides --rebase': 
	test_attempts_fast_forward pull --rebase --ff-only

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 20 - --ff-only overrides --rebase

expecting success of 7601.21 '--ff-only overrides --rebase even if first': 
	test_attempts_fast_forward pull --ff-only --rebase

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 21 - --ff-only overrides --rebase even if first

expecting success of 7601.22 '--ff-only overrides --no-rebase': 
	test_attempts_fast_forward pull --ff-only --no-rebase

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 22 - --ff-only overrides --no-rebase

expecting success of 7601.23 'pull.ff=only overrides pull.rebase=true': 
	test_attempts_fast_forward -c pull.ff=only -c pull.rebase=true pull

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 23 - pull.ff=only overrides pull.rebase=true

expecting success of 7601.24 'pull.ff=only overrides pull.rebase=false': 
	test_attempts_fast_forward -c pull.ff=only -c pull.rebase=false pull

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 24 - pull.ff=only overrides pull.rebase=false

expecting success of 7601.25 '--rebase overrides --no-ff': 
	test_does_rebase pull --rebase --no-ff

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 25 - --rebase overrides --no-ff

expecting success of 7601.26 '--rebase overrides --ff': 
	test_does_rebase pull --rebase --ff

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 26 - --rebase overrides --ff

expecting success of 7601.27 '--rebase fast-forwards when possible': 
	test_does_fast_forward pull --rebase --ff

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 27 - --rebase fast-forwards when possible

expecting success of 7601.28 'pull.rebase=true overrides pull.ff=false': 
	test_does_rebase -c pull.rebase=true -c pull.ff=false pull

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 28 - pull.rebase=true overrides pull.ff=false

expecting success of 7601.29 'pull.rebase=true overrides pull.ff=true': 
	test_does_rebase -c pull.rebase=true -c pull.ff=true pull

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 29 - pull.rebase=true overrides pull.ff=true

expecting success of 7601.30 '--ff-only takes precedence over pull.rebase=true': 
	test_attempts_fast_forward -c pull.rebase=true pull --ff-only

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 30 - --ff-only takes precedence over pull.rebase=true

expecting success of 7601.31 '--ff-only takes precedence over pull.rebase=false': 
	test_attempts_fast_forward -c pull.rebase=false pull --ff-only

HEAD is now at 028ea41 c2
fatal: Not possible to fast-forward, aborting.
ok 31 - --ff-only takes precedence over pull.rebase=false

expecting success of 7601.32 '--no-rebase takes precedence over pull.ff=only': 
	test_falls_back_to_full_merge -c pull.ff=only pull --no-rebase

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 32 - --no-rebase takes precedence over pull.ff=only

expecting success of 7601.33 '--rebase takes precedence over pull.ff=only': 
	test_does_rebase -c pull.ff=only pull --rebase

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 33 - --rebase takes precedence over pull.ff=only

expecting success of 7601.34 '--rebase overrides pull.ff=true': 
	test_does_rebase -c pull.ff=true pull --rebase

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 34 - --rebase overrides pull.ff=true

expecting success of 7601.35 '--rebase overrides pull.ff=false': 
	test_does_rebase -c pull.ff=false pull --rebase

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 35 - --rebase overrides pull.ff=false

expecting success of 7601.36 '--rebase overrides pull.ff unset': 
	test_does_rebase pull --rebase

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 36 - --rebase overrides pull.ff unset

expecting success of 7601.37 '--no-rebase works with --no-ff': 
	test_does_merge_when_ff_possible pull --no-rebase --no-ff

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 37 - --no-rebase works with --no-ff

expecting success of 7601.38 '--no-rebase works with --ff': 
	test_does_fast_forward pull --no-rebase --ff

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 38 - --no-rebase works with --ff

expecting success of 7601.39 '--no-rebase does ff if pull.ff unset': 
	test_does_fast_forward pull --no-rebase

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 39 - --no-rebase does ff if pull.ff unset

expecting success of 7601.40 '--no-rebase heeds pull.ff=true': 
	test_does_fast_forward -c pull.ff=true pull --no-rebase

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 40 - --no-rebase heeds pull.ff=true

expecting success of 7601.41 '--no-rebase heeds pull.ff=false': 
	test_does_merge_when_ff_possible -c pull.ff=false pull --no-rebase

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 41 - --no-rebase heeds pull.ff=false

expecting success of 7601.42 'pull.rebase=true and --no-ff': 
	test_does_rebase -c pull.rebase=true pull --no-ff

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 42 - pull.rebase=true and --no-ff

expecting success of 7601.43 'pull.rebase=true and --ff': 
	test_does_rebase -c pull.rebase=true pull --ff

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 43 - pull.rebase=true and --ff

expecting success of 7601.44 'pull.rebase=false and --no-ff': 
	test_does_merge_when_ff_possible -c pull.rebase=false pull --no-ff

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 44 - pull.rebase=false and --no-ff

expecting success of 7601.45 'pull.rebase=false and --ff, ff possible': 
	test_does_fast_forward -c pull.rebase=false pull --ff

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 45 - pull.rebase=false and --ff, ff possible

expecting success of 7601.46 'pull.rebase=false and --ff, ff not possible': 
	test_falls_back_to_full_merge -c pull.rebase=false pull --ff

HEAD is now at 028ea41 c2
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 46 - pull.rebase=false and --ff, ff not possible

expecting success of 7601.47 'Multiple heads warns about inability to fast forward': 
	git reset --hard c1 &&
	test_must_fail git pull . c2 c3 2>err &&
	test_i18ngrep "You have divergent branches" err

HEAD is now at 429abf0 c1
hint: You have divergent branches and need to specify how to reconcile them.
ok 47 - Multiple heads warns about inability to fast forward

expecting success of 7601.48 'Multiple can never be fast forwarded': 
	git reset --hard c0 &&
	test_must_fail git -c pull.ff=only pull . c1 c2 c3 2>err &&
	test_i18ngrep ! "You have divergent branches" err &&
	# In addition to calling out "cannot fast-forward", we very much
	# want the "multiple branches" piece to be called out to users.
	test_i18ngrep "Cannot fast-forward to multiple branches" err

HEAD is now at e4f5a3c c0
fatal: Cannot fast-forward to multiple branches.
ok 48 - Multiple can never be fast forwarded

expecting success of 7601.49 'Cannot rebase with multiple heads': 
	git reset --hard c0 &&
	test_must_fail git -c pull.rebase=true pull . c1 c2 c3 2>err &&
	test_i18ngrep ! "You have divergent branches" err &&
	test_i18ngrep "Cannot rebase onto multiple branches." err

HEAD is now at e4f5a3c c0
fatal: Cannot rebase onto multiple branches.
ok 49 - Cannot rebase with multiple heads

expecting success of 7601.50 'merge c1 with c2': 
	git reset --hard c1 &&
	test -f c0.c &&
	test -f c1.c &&
	test ! -f c2.c &&
	test ! -f c3.c &&
	git merge c2 &&
	test -f c1.c &&
	test -f c2.c

HEAD is now at 429abf0 c1
Merge made by the 'ort' strategy.
 c2.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c2.c
ok 50 - merge c1 with c2

expecting success of 7601.51 'fast-forward pull succeeds with "true" in pull.ff': 
	git reset --hard c0 &&
	test_config pull.ff true &&
	git pull . c1 &&
	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 51 - fast-forward pull succeeds with "true" in pull.ff

expecting success of 7601.52 'pull.ff=true overrides merge.ff=false': 
	git reset --hard c0 &&
	test_config merge.ff false &&
	test_config pull.ff true &&
	git pull . c1 &&
	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Updating e4f5a3c..429abf0
Fast-forward
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 52 - pull.ff=true overrides merge.ff=false

expecting success of 7601.53 'fast-forward pull creates merge with "false" in pull.ff': 
	git reset --hard c0 &&
	test_config pull.ff false &&
	git pull . c1 &&
	test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" &&
	test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)"

HEAD is now at e4f5a3c c0
From .
 * tag               c1         -> FETCH_HEAD
Merge made by the 'ort' strategy.
 c1.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c1.c
ok 53 - fast-forward pull creates merge with "false" in pull.ff

expecting success of 7601.54 'pull prevents non-fast-forward with "only" in pull.ff': 
	git reset --hard c1 &&
	test_config pull.ff only &&
	test_must_fail git pull . c3

HEAD is now at 429abf0 c1
From .
 * tag               c3         -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
ok 54 - pull prevents non-fast-forward with "only" in pull.ff

expecting success of 7601.55 'already-up-to-date pull succeeds with unspecified pull.ff': 
	git reset --hard c1 &&
	git pull . c0 &&
	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"

HEAD is now at 429abf0 c1
From .
 * tag               c0         -> FETCH_HEAD
Already up to date.
ok 55 - already-up-to-date pull succeeds with unspecified pull.ff

expecting success of 7601.56 'already-up-to-date pull succeeds with "only" in pull.ff': 
	git reset --hard c1 &&
	test_config pull.ff only &&
	git pull . c0 &&
	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"

HEAD is now at 429abf0 c1
From .
 * tag               c0         -> FETCH_HEAD
Already up to date.
ok 56 - already-up-to-date pull succeeds with "only" in pull.ff

expecting success of 7601.57 'already-up-to-date pull/rebase succeeds with "only" in pull.ff': 
	git reset --hard c1 &&
	test_config pull.ff only &&
	git -c pull.rebase=true pull . c0 &&
	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"

HEAD is now at 429abf0 c1
From .
 * tag               c0         -> FETCH_HEAD
Already up to date.
ok 57 - already-up-to-date pull/rebase succeeds with "only" in pull.ff

expecting success of 7601.58 'merge c1 with c2 (ours in pull.twohead)': 
	git reset --hard c1 &&
	git config pull.twohead ours &&
	git merge c2 &&
	test -f c1.c &&
	! test -f c2.c

HEAD is now at 429abf0 c1
Merge made by the 'ours' strategy.
ok 58 - merge c1 with c2 (ours in pull.twohead)

expecting success of 7601.59 'merge c1 with c2 and c3 (recursive in pull.octopus)': 
	git reset --hard c1 &&
	git config pull.octopus "recursive" &&
	test_must_fail git merge c2 c3 &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD)"

HEAD is now at 429abf0 c1
error: Not handling anything other than two heads merge.
Merge with strategy ort failed.
ok 59 - merge c1 with c2 and c3 (recursive in pull.octopus)

expecting success of 7601.60 'merge c1 with c2 and c3 (recursive and octopus in pull.octopus)': 
	git reset --hard c1 &&
	git config pull.octopus "recursive octopus" &&
	git merge c2 c3 &&
	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
	git diff --exit-code &&
	test -f c0.c &&
	test -f c1.c &&
	test -f c2.c &&
	test -f c3.c

HEAD is now at 429abf0 c1
error: Not handling anything other than two heads merge.
Trying merge strategy ort...
Rewinding the tree to pristine...
Trying merge strategy octopus...
Trying simple merge with c2
Trying simple merge with c3
Merge made by the 'octopus' strategy.
 c2.c | 1 +
 c3.c | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 c2.c
 create mode 100644 c3.c
ok 60 - merge c1 with c2 and c3 (recursive and octopus in pull.octopus)

expecting success of 7601.61 'setup conflicted merge': 
	git reset --hard c0 &&
	echo A >conflict.c &&
	git add conflict.c &&
	echo contents >foo.c &&
	git add foo.c &&
	git commit -m c4 &&
	git tag c4 &&
	echo B >conflict.c &&
	git add conflict.c &&
	git mv foo.c bar.c &&
	git commit -m c5 &&
	git tag c5 &&
	git reset --hard c4 &&
	echo C >conflict.c &&
	git add conflict.c &&
	echo secondline >> foo.c &&
	git add foo.c &&
	git commit -m c6 &&
	git tag c6

HEAD is now at e4f5a3c c0
[master fc941b1] c4
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 conflict.c
 create mode 100644 foo.c
[master 085299c] c5
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename foo.c => bar.c (100%)
HEAD is now at fc941b1 c4
[master cad9e93] c6
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
ok 61 - setup conflicted merge

expecting success of 7601.62 'merge picks up the best result': 
	git config --unset-all pull.twohead &&
	git reset --hard c5 &&
	test_must_fail git merge -s resolve c6 &&
	resolve_count=$(conflict_count) &&
	git reset --hard c5 &&
	test_must_fail git merge -s recursive c6 &&
	recursive_count=$(conflict_count) &&
	git reset --hard c5 &&
	test_must_fail git merge -s recursive -s resolve c6 &&
	auto_count=$(conflict_count) &&
	test $auto_count = $recursive_count &&
	test $auto_count != $resolve_count

HEAD is now at 085299c c5
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging conflict.c
ERROR: content conflict in conflict.c
ERROR: foo.c: Not handling case 12f00e90b6ef79117ce6e650416b8cf517099b78 ->  -> f09d25f6fef310fe4501c2b3ad8106df35603251
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 085299c c5
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 085299c c5
Trying merge strategy ort...
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Rewinding the tree to pristine...
Trying merge strategy resolve...
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging conflict.c
ERROR: content conflict in conflict.c
ERROR: foo.c: Not handling case 12f00e90b6ef79117ce6e650416b8cf517099b78 ->  -> f09d25f6fef310fe4501c2b3ad8106df35603251
fatal: merge program failed
Rewinding the tree to pristine...
Using the ort strategy to prepare resolving by hand.
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Automatic merge failed; fix conflicts and then commit the result.
ok 62 - merge picks up the best result

expecting success of 7601.63 'merge picks up the best result (from config)': 
	git config pull.twohead "recursive resolve" &&
	git reset --hard c5 &&
	test_must_fail git merge -s resolve c6 &&
	resolve_count=$(conflict_count) &&
	git reset --hard c5 &&
	test_must_fail git merge -s recursive c6 &&
	recursive_count=$(conflict_count) &&
	git reset --hard c5 &&
	test_must_fail git merge c6 &&
	auto_count=$(conflict_count) &&
	test $auto_count = $recursive_count &&
	test $auto_count != $resolve_count

HEAD is now at 085299c c5
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging conflict.c
ERROR: content conflict in conflict.c
ERROR: foo.c: Not handling case 12f00e90b6ef79117ce6e650416b8cf517099b78 ->  -> f09d25f6fef310fe4501c2b3ad8106df35603251
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 085299c c5
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 085299c c5
Trying merge strategy ort...
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Rewinding the tree to pristine...
Trying merge strategy resolve...
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging conflict.c
ERROR: content conflict in conflict.c
ERROR: foo.c: Not handling case 12f00e90b6ef79117ce6e650416b8cf517099b78 ->  -> f09d25f6fef310fe4501c2b3ad8106df35603251
fatal: merge program failed
Rewinding the tree to pristine...
Using the ort strategy to prepare resolving by hand.
Auto-merging conflict.c
CONFLICT (content): Merge conflict in conflict.c
Automatic merge failed; fix conflicts and then commit the result.
ok 63 - merge picks up the best result (from config)

expecting success of 7601.64 'merge errors out on invalid strategy': 
	git config pull.twohead "foobar" &&
	git reset --hard c5 &&
	test_must_fail git merge c6

HEAD is now at 085299c c5
Could not find merge strategy 'foobar'.
Available strategies are: octopus ours recursive resolve subtree.
ok 64 - merge errors out on invalid strategy

expecting success of 7601.65 'merge errors out on invalid strategy': 
	git config --unset-all pull.twohead &&
	git reset --hard c5 &&
	test_must_fail git merge -s "resolve recursive" c6

HEAD is now at 085299c c5
Could not find merge strategy 'resolve recursive'.
Available strategies are: octopus ours recursive resolve subtree.
ok 65 - merge errors out on invalid strategy

# passed all 65 test(s)
1..65
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7607-merge-state.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7607-merge-state/.git/
expecting success of 7607.1 'Ensure we restore original state if no merge strategy handles it': 
	test_commit --no-tag "Initial" base base &&

	for b in branch1 branch2 branch3
	do
		git checkout -b $b main &&
		test_commit --no-tag "Change on $b" base $b || return 1
	done &&

	git checkout branch1 &&
	# This is a merge that octopus cannot handle.  Note, that it does not
	# just hit conflicts, it completely fails and says that it cannot
	# handle this type of merge.
	test_expect_code 2 git merge branch2 branch3 >output 2>&1 &&
	grep "fatal: merge program failed" output &&
	grep "Should not be doing an octopus" output &&

	# Make sure we did not leave stray changes around when no appropriate
	# merge strategy was found
	git diff --exit-code --name-status &&
	test_path_is_missing .git/MERGE_HEAD

[main (root-commit) 9d985b8] Initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base
Switched to a new branch 'branch1'
[branch1 8246e40] Change on branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch2'
[branch2 34744a5] Change on branch2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branch3'
[branch3 efa3c31] Change on branch3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'branch1'
fatal: merge program failed
Should not be doing an octopus.
ok 1 - Ensure we restore original state if no merge strategy handles it

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7608-merge-messages.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7608-merge-messages/.git/
expecting success of 7608.1 'merge local branch': 
	test_commit main-1 &&
	git checkout -b local-branch &&
	test_commit branch-1 &&
	git checkout main &&
	test_commit main-2 &&
	git merge local-branch &&
	check_oneline "Merge branch Qlocal-branchQ"

[main (root-commit) 8ad97f7] main-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-1.t
Switched to a new branch 'local-branch'
[local-branch 7bd44c4] branch-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 branch-1.t
Switched to branch 'main'
[main 9b0bdc1] main-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-2.t
Merge made by the 'ort' strategy.
 branch-1.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 branch-1.t
ok 1 - merge local branch

expecting success of 7608.2 'merge octopus branches': 
	git checkout -b octopus-a main &&
	test_commit octopus-1 &&
	git checkout -b octopus-b main &&
	test_commit octopus-2 &&
	git checkout main &&
	git merge octopus-a octopus-b &&
	check_oneline "Merge branches Qoctopus-aQ and Qoctopus-bQ"

Switched to a new branch 'octopus-a'
[octopus-a d4e293f] octopus-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 octopus-1.t
Switched to a new branch 'octopus-b'
[octopus-b fd085cf] octopus-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 octopus-2.t
Switched to branch 'main'
Fast-forwarding to: octopus-a
Trying simple merge with octopus-b
Merge made by the 'octopus' strategy.
 octopus-1.t | 1 +
 octopus-2.t | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 octopus-1.t
 create mode 100644 octopus-2.t
ok 2 - merge octopus branches

expecting success of 7608.3 'merge tag': 
	git checkout -b tag-branch main &&
	test_commit tag-1 &&
	git checkout main &&
	test_commit main-3 &&
	git merge tag-1 &&
	check_oneline "Merge tag Qtag-1Q"

Switched to a new branch 'tag-branch'
[tag-branch 6757378] tag-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tag-1.t
Switched to branch 'main'
[main a5de04f] main-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-3.t
Merge made by the 'ort' strategy.
 tag-1.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 tag-1.t
ok 3 - merge tag

expecting success of 7608.4 'ambiguous tag': 
	git checkout -b ambiguous main &&
	test_commit ambiguous &&
	git checkout main &&
	test_commit main-4 &&
	git merge ambiguous &&
	check_oneline "Merge tag QambiguousQ"

Switched to a new branch 'ambiguous'
[ambiguous ab5df7f] ambiguous
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ambiguous.t
Switched to branch 'main'
[main f5d97b7] main-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-4.t
warning: refname 'ambiguous' is ambiguous.
warning: refname 'ambiguous' is ambiguous.
Merge made by the 'ort' strategy.
 ambiguous.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 ambiguous.t
ok 4 - ambiguous tag

expecting success of 7608.5 'remote-tracking branch': 
	git checkout -b remote main &&
	test_commit remote-1 &&
	git update-ref refs/remotes/origin/main remote &&
	git checkout main &&
	test_commit main-5 &&
	git merge origin/main &&
	check_oneline "Merge remote-tracking branch Qorigin/mainQ"

Switched to a new branch 'remote'
[remote 52036b0] remote-1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 remote-1.t
Switched to branch 'main'
[main 25894a3] main-5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main-5.t
Merge made by the 'ort' strategy.
 remote-1.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 remote-1.t
ok 5 - remote-tracking branch

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7611-merge-abort.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7611-merge-abort/.git/
expecting success of 7611.1 'setup': 
	# Create the above repo
	echo foo > foo &&
	echo bar > bar &&
	echo baz > baz &&
	git add foo bar baz &&
	git commit -m initial &&
	echo bazz > baz &&
	git commit -a -m "second" &&
	git checkout -b conflict_branch HEAD^ &&
	echo barf > bar &&
	echo bazf > baz &&
	git commit -a -m "conflict" &&
	git checkout -b clean_branch HEAD^ &&
	echo bart > bar &&
	git commit -a -m "clean" &&
	git checkout main

[main (root-commit) a2f18f2] initial
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 bar
 create mode 100644 baz
 create mode 100644 foo
[main 9b32786] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'conflict_branch'
[conflict_branch 98f9ce9] conflict
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to a new branch 'clean_branch'
[clean_branch e1014b4] clean
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 1 - setup

expecting success of 7611.2 'fails without MERGE_HEAD (unstarted merge)': 
	test_must_fail git merge --abort 2>output &&
	test_i18ngrep MERGE_HEAD output

fatal: There is no merge to abort (MERGE_HEAD missing).
ok 2 - fails without MERGE_HEAD (unstarted merge)

expecting success of 7611.3 'fails without MERGE_HEAD (unstarted merge): .git/MERGE_HEAD sanity': 
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)"

ok 3 - fails without MERGE_HEAD (unstarted merge): .git/MERGE_HEAD sanity

expecting success of 7611.4 'fails without MERGE_HEAD (completed merge)': 
	git merge clean_branch &&
	test ! -f .git/MERGE_HEAD &&
	# Merge successfully completed
	post_merge_head="$(git rev-parse HEAD)" &&
	test_must_fail git merge --abort 2>output &&
	test_i18ngrep MERGE_HEAD output

Merge made by the 'ort' strategy.
 bar | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: There is no merge to abort (MERGE_HEAD missing).
ok 4 - fails without MERGE_HEAD (completed merge)

expecting success of 7611.5 'fails without MERGE_HEAD (completed merge): .git/MERGE_HEAD sanity': 
	test ! -f .git/MERGE_HEAD &&
	test "$post_merge_head" = "$(git rev-parse HEAD)"

ok 5 - fails without MERGE_HEAD (completed merge): .git/MERGE_HEAD sanity

expecting success of 7611.6 'Forget previous merge': 
	git reset --hard "$pre_merge_head"

HEAD is now at 9b32786 second
ok 6 - Forget previous merge

expecting success of 7611.7 'Abort after --no-commit': 
	# Redo merge, but stop before creating merge commit
	git merge --no-commit clean_branch &&
	test -f .git/MERGE_HEAD &&
	# Abort non-conflicting merge
	git merge --abort &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff)" &&
	test -z "$(git diff --staged)"

Automatic merge went well; stopped before committing as requested
ok 7 - Abort after --no-commit

expecting success of 7611.8 'Abort after conflicts': 
	# Create conflicting merge
	test_must_fail git merge conflict_branch &&
	test -f .git/MERGE_HEAD &&
	# Abort conflicting merge
	git merge --abort &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff)" &&
	test -z "$(git diff --staged)"

Auto-merging baz
CONFLICT (content): Merge conflict in baz
Automatic merge failed; fix conflicts and then commit the result.
ok 8 - Abort after conflicts

expecting success of 7611.9 'Clean merge with dirty index fails': 
	echo xyzzy >> foo &&
	git add foo &&
	git diff --staged > expect &&
	test_must_fail git merge clean_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff)" &&
	git diff --staged > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
  foo
Merge with strategy ort failed.
ok 9 - Clean merge with dirty index fails

expecting success of 7611.10 'Conflicting merge with dirty index fails': 
	test_must_fail git merge conflict_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff)" &&
	git diff --staged > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
  foo
Merge with strategy ort failed.
ok 10 - Conflicting merge with dirty index fails

expecting success of 7611.11 'Reset index (but preserve worktree changes)': 
	git reset "$pre_merge_head" &&
	git diff > actual &&
	test_cmp expect actual

Unstaged changes after reset:
M	foo
ok 11 - Reset index (but preserve worktree changes)

expecting success of 7611.12 'Abort clean merge with non-conflicting dirty worktree': 
	git merge --no-commit clean_branch &&
	test -f .git/MERGE_HEAD &&
	# Abort merge
	git merge --abort &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

Automatic merge went well; stopped before committing as requested
ok 12 - Abort clean merge with non-conflicting dirty worktree

expecting success of 7611.13 'Abort conflicting merge with non-conflicting dirty worktree': 
	test_must_fail git merge conflict_branch &&
	test -f .git/MERGE_HEAD &&
	# Abort merge
	git merge --abort &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

Auto-merging baz
CONFLICT (content): Merge conflict in baz
Automatic merge failed; fix conflicts and then commit the result.
ok 13 - Abort conflicting merge with non-conflicting dirty worktree

expecting success of 7611.14 'Reset worktree changes': 
	git reset --hard "$pre_merge_head"

HEAD is now at 9b32786 second
ok 14 - Reset worktree changes

expecting success of 7611.15 'Fail clean merge with conflicting dirty worktree': 
	echo xyzzy >> bar &&
	git diff > expect &&
	test_must_fail git merge --no-commit clean_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
	bar
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
ok 15 - Fail clean merge with conflicting dirty worktree

expecting success of 7611.16 'Fail conflicting merge with conflicting dirty worktree': 
	test_must_fail git merge conflict_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
	bar
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
ok 16 - Fail conflicting merge with conflicting dirty worktree

expecting success of 7611.17 'Reset worktree changes': 
	git reset --hard "$pre_merge_head"

HEAD is now at 9b32786 second
ok 17 - Reset worktree changes

expecting success of 7611.18 'Fail clean merge with matching dirty worktree': 
	echo bart > bar &&
	git diff > expect &&
	test_must_fail git merge --no-commit clean_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
	bar
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
ok 18 - Fail clean merge with matching dirty worktree

expecting success of 7611.19 'Fail conflicting merge with matching dirty worktree': 
	echo barf > bar &&
	git diff > expect &&
	test_must_fail git merge conflict_branch &&
	test ! -f .git/MERGE_HEAD &&
	test "$pre_merge_head" = "$(git rev-parse HEAD)" &&
	test -z "$(git diff --staged)" &&
	git diff > actual &&
	test_cmp expect actual

error: Your local changes to the following files would be overwritten by merge:
	bar
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
ok 19 - Fail conflicting merge with matching dirty worktree

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7600-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/.git/
expecting success of 7600.1 'setup': 
	git add file &&
	test_tick &&
	git commit -m "commit 0" &&
	git tag c0 &&
	c0=$(git rev-parse HEAD) &&
	cp file.1 file &&
	git add file &&
	cp file.1 other &&
	git add other &&
	test_tick &&
	git commit -m "commit 1" &&
	git tag c1 &&
	c1=$(git rev-parse HEAD) &&
	git reset --hard "$c0" &&
	cp file.5 file &&
	git add file &&
	test_tick &&
	git commit -m "commit 2" &&
	git tag c2 &&
	c2=$(git rev-parse HEAD) &&
	git reset --hard "$c0" &&
	cp file.9y file &&
	git add file &&
	test_tick &&
	git commit -m "commit 7" &&
	git tag c7 &&
	git reset --hard "$c0" &&
	cp file.9 file &&
	git add file &&
	test_tick &&
	git commit -m "commit 3" &&
	git tag c3 &&
	c3=$(git rev-parse HEAD) &&
	git reset --hard "$c0" &&
	create_merge_msgs

[main (root-commit) 88012a2] commit 0
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 file
[main dc8b979] commit 1
 Author: A U Thor <author@example.com>
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
HEAD is now at 88012a2 commit 0
[main ac59201] commit 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 88012a2 commit 0
[main 63f6a48] commit 7
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 88012a2 commit 0
[main 8976188] commit 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 88012a2 commit 0
ok 1 - setup

expecting success of 7600.2 'test option parsing': 
	test_must_fail git merge -$ c1 &&
	test_must_fail git merge --no-such c1 &&
	test_must_fail git merge -s foobar c1 &&
	test_must_fail git merge -s=foobar c1 &&
	test_must_fail git merge -m &&
	test_must_fail git merge --abort foobar &&
	test_must_fail git merge --abort --quiet &&
	test_must_fail git merge --continue foobar &&
	test_must_fail git merge --continue --quiet &&
	test_must_fail git merge

error: unknown switch `$'
usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

error: unknown option `no-such'
usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

Could not find merge strategy 'foobar'.
Available strategies are: octopus ours recursive resolve subtree.
Could not find merge strategy '=foobar'.
Available strategies are: octopus ours recursive resolve subtree.
error: switch `m' requires a value
fatal: --abort expects no arguments

usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

fatal: --abort expects no arguments

usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

fatal: --continue expects no arguments

usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

fatal: --continue expects no arguments

usage: git merge [<options>] [<commit>...]
   or: git merge --abort
   or: git merge --continue

    -n                    do not show a diffstat at the end of the merge
    --stat                show a diffstat at the end of the merge
    --summary             (synonym to --stat)
    --log[=<n>]           add (at most <n>) entries from shortlog to merge commit message
    --squash              create a single commit instead of doing a merge
    --commit              perform a commit if the merge succeeds (default)
    -e, --edit            edit message before committing
    --cleanup <mode>      how to strip spaces and #comments from message
    --ff                  allow fast-forward (default)
    --ff-only             abort if fast-forward is not possible
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --verify-signatures   verify that the named commit has a valid GPG signature
    -s, --strategy <strategy>
                          merge strategy to use
    -X, --strategy-option <option=value>
                          option for selected merge strategy
    -m, --message <message>
                          merge commit message (for a non-fast-forward merge)
    -F, --file <path>     read message from file
    --into-name <name>    use <name> instead of the real target
    -v, --verbose         be more verbose
    -q, --quiet           be more quiet
    --abort               abort the current in-progress merge
    --quit                --abort but leave index and working tree alone
    --continue            continue the current in-progress merge
    --allow-unrelated-histories
                          allow merging unrelated histories
    --progress            force progress reporting
    -S, --gpg-sign[=<key-id>]
                          GPG sign commit
    --autostash           automatically stash/stash pop before and after
    --overwrite-ignore    update ignored files (default)
    --signoff             add a Signed-off-by trailer
    --no-verify           bypass pre-merge-commit and commit-msg hooks

fatal: No remote for the current branch.
ok 2 - test option parsing

expecting success of 7600.3 'merge -h with invalid index': 
	mkdir broken &&
	(
		cd broken &&
		git init &&
		>.git/index &&
		test_expect_code 129 git merge -h 2>usage
	) &&
	test_i18ngrep "[Uu]sage: git merge" broken/usage

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/broken/.git/
usage: git merge [<options>] [<commit>...]
ok 3 - merge -h with invalid index

expecting success of 7600.4 'reject non-strategy with a git-merge-foo name': 
	test_must_fail git merge -s index c1

Could not find merge strategy 'index'.
Available strategies are: octopus ours recursive resolve subtree.
ok 4 - reject non-strategy with a git-merge-foo name

expecting success of 7600.5 'merge c0 with c1': 
	echo "OBJID HEAD@{0}: merge c1: Fast-forward" >reflog.expected &&

	git reset --hard c0 &&
	git merge c1 &&
	verify_merge file result.1 &&
	verify_head "$c1" &&

	git reflog -1 >reflog.actual &&
	sed "s/$_x05[0-9a-f]*/OBJID/g" reflog.actual >reflog.fuzzy &&
	test_cmp reflog.expected reflog.fuzzy

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 5 - merge c0 with c1

expecting success of 7600.6 'merge c0 with c1 with --ff-only': 
	git reset --hard c0 &&
	git merge --ff-only c1 &&
	git merge --ff-only HEAD c0 c1 &&
	verify_merge file result.1 &&
	verify_head "$c1"

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
Already up to date.
ok 6 - merge c0 with c1 with --ff-only

expecting success of 7600.7 'merge from unborn branch': 
	git checkout -f main &&
	test_might_fail git branch -D kid &&

	echo "OBJID HEAD@{0}: initial pull" >reflog.expected &&

	git checkout --orphan kid &&
	test_when_finished "git checkout -f main" &&
	git rm -fr . &&
	test_tick &&
	git merge --ff-only c1 &&
	verify_merge file result.1 &&
	verify_head "$c1" &&

	git reflog -1 >reflog.actual &&
	sed "s/$_x05[0-9a-f][0-9a-f]/OBJID/g" reflog.actual >reflog.fuzzy &&
	test_cmp reflog.expected reflog.fuzzy

Already on 'main'
error: branch 'kid' not found.
Switched to a new branch 'kid'
rm 'file'
rm 'other'
Switched to branch 'main'
ok 7 - merge from unborn branch

expecting success of 7600.8 'merge c1 with c2': 
	git reset --hard c1 &&
	test_tick &&
	git merge c2 &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 8 - merge c1 with c2

expecting success of 7600.9 'merge --squash c3 with c7': 
	git reset --hard c3 &&
	test_must_fail git merge --squash c7 &&
	cat result.9z >file &&
	git commit --no-edit -a &&

	cat >expect <<-EOF &&
	Squashed commit of the following:

	$(git show -s c7)

	# Conflicts:
	#	file
	EOF
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 8976188 commit 3
Auto-merging file
CONFLICT (content): Merge conflict in file
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.
[main 211f9ce] Squashed commit of the following:
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - merge --squash c3 with c7

expecting success of 7600.10 'merge --squash --autostash conflict does not attempt to apply autostash': 
	git reset --hard c3 &&
	>unrelated &&
	git add unrelated &&
	test_must_fail git merge --squash c7 --autostash >out 2>err &&
	! grep "Applying autostash resulted in conflicts." err &&
	grep "When finished, apply stashed changes with \`git stash pop\`" out

HEAD is now at 8976188 commit 3
When finished, apply stashed changes with `git stash pop`
ok 10 - merge --squash --autostash conflict does not attempt to apply autostash

expecting success of 7600.11 'merge c3 with c7 with commit.cleanup = scissors': 
	git config commit.cleanup scissors &&
	git reset --hard c3 &&
	test_must_fail git merge c7 &&
	cat result.9z >file &&
	git commit --no-edit -a &&

	cat >expect <<-\EOF &&
	Merge tag 'c7'

	# ------------------------ >8 ------------------------
	# Do not modify or remove the line above.
	# Everything below it will be ignored.
	#
	# Conflicts:
	#	file
	EOF
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 8976188 commit 3
Autostash exists; creating a new stash entry.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
[main e024249] Merge tag 'c7'
 Author: A U Thor <author@example.com>
ok 11 - merge c3 with c7 with commit.cleanup = scissors

expecting success of 7600.12 'merge c3 with c7 with --squash commit.cleanup = scissors': 
	git config commit.cleanup scissors &&
	git reset --hard c3 &&
	test_must_fail git merge --squash c7 &&
	cat result.9z >file &&
	git commit --no-edit -a &&

	cat >expect <<-EOF &&
	Squashed commit of the following:

	$(git show -s c7)

	# ------------------------ >8 ------------------------
	# Do not modify or remove the line above.
	# Everything below it will be ignored.
	#
	# Conflicts:
	#	file
	EOF
	git cat-file commit HEAD >raw &&
	sed -e "1,/^$/d" raw >actual &&
	test_cmp expect actual

HEAD is now at 8976188 commit 3
Auto-merging file
CONFLICT (content): Merge conflict in file
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.
[main cb3ece3] Squashed commit of the following:
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 12 - merge c3 with c7 with --squash commit.cleanup = scissors

expecting success of 7600.13 'merge c1 with c2 and c3': 
	git reset --hard c1 &&
	test_tick &&
	git merge c2 c3 &&
	verify_merge file result.1-5-9 msg.1-5-9 &&
	verify_parents $c1 $c2 $c3

HEAD is now at dc8b979 commit 1
Trying simple merge with c2
Simple merge did not work, trying automatic merge.
Auto-merging file
Trying simple merge with c3
Simple merge did not work, trying automatic merge.
Auto-merging file
Merge made by the 'octopus' strategy.
 file | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
fatal: Needed a single revision
ok 13 - merge c1 with c2 and c3

expecting success of 7600.14 'merges with --ff-only': 
	git reset --hard c1 &&
	test_tick &&
	test_must_fail git merge --ff-only c2 &&
	test_must_fail git merge --ff-only c3 &&
	test_must_fail git merge --ff-only c2 c3 &&
	git reset --hard c0 &&
	git merge c3 &&
	verify_head $c3

HEAD is now at dc8b979 commit 1
fatal: Not possible to fast-forward, aborting.
fatal: Not possible to fast-forward, aborting.
fatal: Not possible to fast-forward, aborting.
HEAD is now at 88012a2 commit 0
Updating 88012a2..8976188
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 14 - merges with --ff-only

expecting success of 7600.15 'merges with merge.ff=only': 
	git reset --hard c1 &&
	test_tick &&
	test_config merge.ff "only" &&
	test_must_fail git merge c2 &&
	test_must_fail git merge c3 &&
	test_must_fail git merge c2 c3 &&
	git reset --hard c0 &&
	git merge c3 &&
	verify_head $c3

HEAD is now at dc8b979 commit 1
fatal: Not possible to fast-forward, aborting.
fatal: Not possible to fast-forward, aborting.
fatal: Not possible to fast-forward, aborting.
HEAD is now at 88012a2 commit 0
Updating 88012a2..8976188
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - merges with merge.ff=only

expecting success of 7600.16 'merge c0 with c1 (no-commit)': 
	git reset --hard c0 &&
	git merge --no-commit c1 &&
	verify_merge file result.1 &&
	verify_head $c1

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 16 - merge c0 with c1 (no-commit)

expecting success of 7600.17 'merge c1 with c2 (no-commit)': 
	git reset --hard c1 &&
	git merge --no-commit c2 &&
	verify_merge file result.1-5 &&
	verify_head $c1 &&
	verify_mergeheads $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Automatic merge went well; stopped before committing as requested
ok 17 - merge c1 with c2 (no-commit)

expecting success of 7600.18 'merge c1 with c2 and c3 (no-commit)': 
	git reset --hard c1 &&
	git merge --no-commit c2 c3 &&
	verify_merge file result.1-5-9 &&
	verify_head $c1 &&
	verify_mergeheads $c2 $c3

HEAD is now at dc8b979 commit 1
Trying simple merge with c2
Simple merge did not work, trying automatic merge.
Auto-merging file
Trying simple merge with c3
Simple merge did not work, trying automatic merge.
Auto-merging file
Automatic merge went well; stopped before committing as requested
ok 18 - merge c1 with c2 and c3 (no-commit)

expecting success of 7600.19 'merge c0 with c1 (squash)': 
	git reset --hard c0 &&
	git merge --squash c1 &&
	verify_merge file result.1 &&
	verify_head $c0 &&
	verify_no_mergehead &&
	test_cmp squash.1 .git/SQUASH_MSG

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
Squash commit -- not updating HEAD
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 19 - merge c0 with c1 (squash)

expecting success of 7600.20 'merge c0 with c1 (squash, ff-only)': 
	git reset --hard c0 &&
	git merge --squash --ff-only c1 &&
	verify_merge file result.1 &&
	verify_head $c0 &&
	verify_no_mergehead &&
	test_cmp squash.1 .git/SQUASH_MSG

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
Squash commit -- not updating HEAD
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 20 - merge c0 with c1 (squash, ff-only)

expecting success of 7600.21 'merge c1 with c2 (squash)': 
	git reset --hard c1 &&
	git merge --squash c2 &&
	verify_merge file result.1-5 &&
	verify_head $c1 &&
	verify_no_mergehead &&
	test_cmp squash.1-5 .git/SQUASH_MSG

HEAD is now at dc8b979 commit 1
Auto-merging file
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
ok 21 - merge c1 with c2 (squash)

expecting success of 7600.22 'unsuccessful merge of c1 with c2 (squash, ff-only)': 
	git reset --hard c1 &&
	test_must_fail git merge --squash --ff-only c2

HEAD is now at dc8b979 commit 1
fatal: Not possible to fast-forward, aborting.
ok 22 - unsuccessful merge of c1 with c2 (squash, ff-only)

expecting success of 7600.23 'merge c1 with c2 and c3 (squash)': 
	git reset --hard c1 &&
	git merge --squash c2 c3 &&
	verify_merge file result.1-5-9 &&
	verify_head $c1 &&
	verify_no_mergehead &&
	test_cmp squash.1-5-9 .git/SQUASH_MSG

HEAD is now at dc8b979 commit 1
Trying simple merge with c2
Simple merge did not work, trying automatic merge.
Auto-merging file
Trying simple merge with c3
Simple merge did not work, trying automatic merge.
Auto-merging file
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
ok 23 - merge c1 with c2 and c3 (squash)

expecting success of 7600.24 'merge c1 with c2 (no-commit in config)': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "--no-commit" &&
	git merge c2 &&
	verify_merge file result.1-5 &&
	verify_head $c1 &&
	verify_mergeheads $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Automatic merge went well; stopped before committing as requested
ok 24 - merge c1 with c2 (no-commit in config)

expecting success of 7600.25 'merge c1 with c2 (log in config)': 
	git reset --hard c1 &&
	git merge --log c2 &&
	git show -s --pretty=tformat:%s%n%b >expect &&

	test_config branch.main.mergeoptions "--log" &&
	git reset --hard c1 &&
	git merge c2 &&
	git show -s --pretty=tformat:%s%n%b >actual &&

	test_cmp expect actual

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 25 - merge c1 with c2 (log in config)

expecting success of 7600.26 'merge c1 with c2 (log in config gets overridden)': 
	git reset --hard c1 &&
	git merge c2 &&
	git show -s --pretty=tformat:%s%n%b >expect &&

	test_config branch.main.mergeoptions "--no-log" &&
	test_config merge.log "true" &&
	git reset --hard c1 &&
	git merge c2 &&
	git show -s --pretty=tformat:%s%n%b >actual &&

	test_cmp expect actual

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 26 - merge c1 with c2 (log in config gets overridden)

expecting success of 7600.27 'merge c1 with c2 (squash in config)': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "--squash" &&
	git merge c2 &&
	verify_merge file result.1-5 &&
	verify_head $c1 &&
	verify_no_mergehead &&
	test_cmp squash.1-5 .git/SQUASH_MSG

HEAD is now at dc8b979 commit 1
Auto-merging file
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
ok 27 - merge c1 with c2 (squash in config)

expecting success of 7600.28 'override config option -n with --summary': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "-n" &&
	test_tick &&
	git merge --summary c2 >diffstat.txt &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2 &&
	if ! grep "^ file |  *2 +-$" diffstat.txt
	then
		echo "[OOPS] diffstat was not generated with --summary"
		false
	fi

HEAD is now at dc8b979 commit 1
fatal: Needed a single revision
 file | 2 +-
ok 28 - override config option -n with --summary

expecting success of 7600.29 'override config option -n with --stat': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "-n" &&
	test_tick &&
	git merge --stat c2 >diffstat.txt &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2 &&
	if ! grep "^ file |  *2 +-$" diffstat.txt
	then
		echo "[OOPS] diffstat was not generated with --stat"
		false
	fi

HEAD is now at dc8b979 commit 1
fatal: Needed a single revision
 file | 2 +-
ok 29 - override config option -n with --stat

expecting success of 7600.30 'override config option --stat': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "--stat" &&
	test_tick &&
	git merge -n c2 >diffstat.txt &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2 &&
	if grep "^ file |  *2 +-$" diffstat.txt
	then
		echo "[OOPS] diffstat was generated"
		false
	fi

HEAD is now at dc8b979 commit 1
fatal: Needed a single revision
ok 30 - override config option --stat

expecting success of 7600.31 'merge c1 with c2 (override --no-commit)': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "--no-commit" &&
	test_tick &&
	git merge --commit c2 &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 31 - merge c1 with c2 (override --no-commit)

expecting success of 7600.32 'merge c1 with c2 (override --squash)': 
	git reset --hard c1 &&
	test_config branch.main.mergeoptions "--squash" &&
	test_tick &&
	git merge --no-squash c2 &&
	verify_merge file result.1-5 msg.1-5 &&
	verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 32 - merge c1 with c2 (override --squash)

expecting success of 7600.33 'merge c0 with c1 (no-ff)': 
	git reset --hard c0 &&
	test_tick &&
	git merge --no-ff c1 &&
	verify_merge file result.1 &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
fatal: Needed a single revision
ok 33 - merge c0 with c1 (no-ff)

expecting success of 7600.34 'merge c0 with c1 (merge.ff=false)': 
	git reset --hard c0 &&
	test_config merge.ff "false" &&
	test_tick &&
	git merge c1 &&
	verify_merge file result.1 &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
fatal: Needed a single revision
ok 34 - merge c0 with c1 (merge.ff=false)

expecting success of 7600.35 'combine branch.main.mergeoptions with merge.ff': 
	git reset --hard c0 &&
	test_config branch.main.mergeoptions "--ff" &&
	test_config merge.ff "false" &&
	test_tick &&
	git merge c1 &&
	verify_merge file result.1 &&
	verify_parents "$c0"

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
fatal: Needed a single revision
ok 35 - combine branch.main.mergeoptions with merge.ff

expecting success of 7600.36 'tolerate unknown values for merge.ff': 
	git reset --hard c0 &&
	test_config merge.ff "something-new" &&
	test_tick &&
	git merge c1 2>message &&
	verify_head "$c1" &&
	test_must_be_empty message

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 36 - tolerate unknown values for merge.ff

expecting success of 7600.37 'combining --squash and --no-ff is refused': 
	git reset --hard c0 &&
	test_must_fail git merge --squash --no-ff c1 &&
	test_must_fail git merge --no-ff --squash c1

HEAD is now at 88012a2 commit 0
fatal: options '--squash' and '--no-ff.' cannot be used together
fatal: options '--squash' and '--no-ff.' cannot be used together
ok 37 - combining --squash and --no-ff is refused

expecting success of 7600.38 'combining --squash and --commit is refused': 
	git reset --hard c0 &&
	test_must_fail git merge --squash --commit c1 &&
	test_must_fail git merge --commit --squash c1

HEAD is now at 88012a2 commit 0
fatal: options '--squash' and '--commit.' cannot be used together
fatal: options '--squash' and '--commit.' cannot be used together
ok 38 - combining --squash and --commit is refused

expecting success of 7600.39 'option --ff-only overwrites --no-ff': 
	git merge --no-ff --ff-only c1 &&
	test_must_fail git merge --no-ff --ff-only c2

Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
fatal: Not possible to fast-forward, aborting.
ok 39 - option --ff-only overwrites --no-ff

expecting success of 7600.40 'option --no-ff overrides merge.ff=only config': 
	git reset --hard c0 &&
	test_config merge.ff only &&
	git merge --no-ff c1

HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 40 - option --no-ff overrides merge.ff=only config

expecting success of 7600.41 'merge c0 with c1 (ff overrides no-ff)': 
	git reset --hard c0 &&
	test_config branch.main.mergeoptions "--no-ff" &&
	git merge --ff c1 &&
	verify_merge file result.1 &&
	verify_head $c1

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
ok 41 - merge c0 with c1 (ff overrides no-ff)

expecting success of 7600.42 'merge log message': 
	git reset --hard c0 &&
	git merge --no-log c2 &&
	git show -s --pretty=format:%b HEAD >msg.act &&
	test_must_be_empty msg.act &&

	git reset --hard c0 &&
	test_config branch.main.mergeoptions "--no-ff" &&
	git merge --no-log c2 &&
	git show -s --pretty=format:%b HEAD >msg.act &&
	test_must_be_empty msg.act &&

	git merge --log c3 &&
	git show -s --pretty=format:%b HEAD >msg.act &&
	test_cmp msg.log msg.act &&

	git reset --hard HEAD^ &&
	test_config merge.log "yes" &&
	git merge c3 &&
	git show -s --pretty=format:%b HEAD >msg.act &&
	test_cmp msg.log msg.act

HEAD is now at 88012a2 commit 0
Updating 88012a2..ac59201
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 8e82df1 Merge tag 'c2'
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 42 - merge log message

expecting success of 7600.43 'merge c1 with c0, c2, c0, and c1': 
       git reset --hard c1 &&
       test_tick &&
       git merge c0 c2 c0 c1 &&
       verify_merge file result.1-5 &&
       verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 43 - merge c1 with c0, c2, c0, and c1

expecting success of 7600.44 'merge c1 with c0, c2, c0, and c1': 
       git reset --hard c1 &&
       test_tick &&
       git merge c0 c2 c0 c1 &&
       verify_merge file result.1-5 &&
       verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 44 - merge c1 with c0, c2, c0, and c1

expecting success of 7600.45 'merge c1 with c1 and c2': 
       git reset --hard c1 &&
       test_tick &&
       git merge c1 c2 &&
       verify_merge file result.1-5 &&
       verify_parents $c1 $c2

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Needed a single revision
ok 45 - merge c1 with c1 and c2

expecting success of 7600.46 'merge fast-forward in a dirty tree': 
       git reset --hard c0 &&
       mv file file1 &&
       cat file1 >file &&
       rm -f file1 &&
       git merge c2

HEAD is now at 88012a2 commit 0
Updating 88012a2..ac59201
Fast-forward
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 46 - merge fast-forward in a dirty tree

expecting success of 7600.47 'in-index merge': 
	git reset --hard c0 &&
	git merge --no-ff -s resolve c1 >out &&
	test_i18ngrep "Wonderful." out &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Wonderful.
fatal: Needed a single revision
ok 47 - in-index merge

expecting success of 7600.48 'refresh the index before merging': 
	git reset --hard c1 &&
	cp file file.n && mv -f file.n file &&
	git merge c3

HEAD is now at dc8b979 commit 1
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 48 - refresh the index before merging

expecting success of 7600.49 'merge with --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git merge --autostash c2 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-5 merge-result &&
	test_cmp result.1-5-9 file

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 49 - merge with --autostash

expecting success of 7600.50 'merge with merge.autoStash': 
	test_config merge.autoStash true &&
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git merge c2 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-5 merge-result &&
	test_cmp result.1-5-9 file

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applied autostash.
ok 50 - merge with merge.autoStash

expecting success of 7600.51 'fast-forward merge with --autostash': 
	git reset --hard c0 &&
	git merge-file file file.orig file.5 &&
	git merge --autostash c1 2>err &&
	test_i18ngrep "Applied autostash." err &&
	test_cmp result.1-5 file

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Created autostash: 4d9e18f
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
Applied autostash.
ok 51 - fast-forward merge with --autostash

expecting success of 7600.52 'failed fast-forward merge with --autostash': 
	git reset --hard c0 &&
	git merge-file file file.orig file.5 &&
	cp file.5 other &&
	test_when_finished "rm other" &&
	test_must_fail git merge --autostash c1 2>err &&
	test_i18ngrep "Applied autostash." err &&
	test_cmp file.5 file

HEAD is now at 88012a2 commit 0
Updating 88012a2..dc8b979
Created autostash: 4d9e18f
Applied autostash.
ok 52 - failed fast-forward merge with --autostash

expecting success of 7600.53 'octopus merge with --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.3 &&
	git merge --autostash c2 c3 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-5-9 merge-result &&
	test_cmp result.1-3-5-9 file

HEAD is now at dc8b979 commit 1
Created autostash: 27fb9f9
Trying simple merge with c2
Simple merge did not work, trying automatic merge.
Auto-merging file
Trying simple merge with c3
Simple merge did not work, trying automatic merge.
Auto-merging file
Merge made by the 'octopus' strategy.
 file | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Applied autostash.
ok 53 - octopus merge with --autostash

expecting success of 7600.54 'failed merge (exit 2) with --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.5 &&
	test_must_fail git merge -s recursive --autostash c2 c3 2>err &&
	test_i18ngrep "Applied autostash." err &&
	test_cmp result.1-5 file

HEAD is now at dc8b979 commit 1
Created autostash: 92dee98
Applied autostash.
ok 54 - failed merge (exit 2) with --autostash

expecting success of 7600.55 'conflicted merge with --autostash, --abort restores stash': 
	git reset --hard c3 &&
	cp file.1 file &&
	test_must_fail git merge --autostash c7 &&
	git merge --abort 2>err &&
	test_i18ngrep "Applied autostash." err &&
	test_cmp file.1 file

HEAD is now at 8976188 commit 3
Created autostash: e782531
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
When finished, apply stashed changes with `git stash pop`
Applied autostash.
ok 55 - conflicted merge with --autostash, --abort restores stash

expecting success of 7600.56 'completed merge (git commit) with --no-commit and --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git diff >expect &&
	git merge --no-commit --autostash c2 &&
	git stash show -p MERGE_AUTOSTASH >actual &&
	test_cmp expect actual &&
	git commit 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-5 merge-result &&
	test_cmp result.1-5-9 file

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Automatic merge went well; stopped before committing as requested
When finished, apply stashed changes with `git stash pop`
[main 35e0f0d] Merge tag 'c2'
 Author: A U Thor <author@example.com>
Applied autostash.
ok 56 - completed merge (git commit) with --no-commit and --autostash

expecting success of 7600.57 'completed merge (git merge --continue) with --no-commit and --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git diff >expect &&
	git merge --no-commit --autostash c2 &&
	git stash show -p MERGE_AUTOSTASH >actual &&
	test_cmp expect actual &&
	git merge --continue 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-5 merge-result &&
	test_cmp result.1-5-9 file

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Automatic merge went well; stopped before committing as requested
When finished, apply stashed changes with `git stash pop`
[main 35e0f0d] Merge tag 'c2'
 Author: A U Thor <author@example.com>
Applied autostash.
ok 57 - completed merge (git merge --continue) with --no-commit and --autostash

expecting success of 7600.58 'aborted merge (merge --abort) with --no-commit and --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git diff >expect &&
	git merge --no-commit --autostash c2 &&
	git stash show -p MERGE_AUTOSTASH >actual &&
	test_cmp expect actual &&
	git merge --abort 2>err &&
	test_i18ngrep "Applied autostash." err &&
	git diff >actual &&
	test_cmp expect actual

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Automatic merge went well; stopped before committing as requested
When finished, apply stashed changes with `git stash pop`
Applied autostash.
ok 58 - aborted merge (merge --abort) with --no-commit and --autostash

expecting success of 7600.59 'aborted merge (reset --hard) with --no-commit and --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git diff >expect &&
	git merge --no-commit --autostash c2 &&
	git stash show -p MERGE_AUTOSTASH >actual &&
	test_cmp expect actual &&
	git reset --hard 2>err &&
	test_i18ngrep "Autostash exists; creating a new stash entry." err &&
	git diff --exit-code

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Automatic merge went well; stopped before committing as requested
When finished, apply stashed changes with `git stash pop`
HEAD is now at dc8b979 commit 1
Autostash exists; creating a new stash entry.
ok 59 - aborted merge (reset --hard) with --no-commit and --autostash

expecting success of 7600.60 'quit merge with --no-commit and --autostash': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9 &&
	git diff >expect &&
	git merge --no-commit --autostash c2 &&
	git stash show -p MERGE_AUTOSTASH >actual &&
	test_cmp expect actual &&
	git diff HEAD >expect &&
	git merge --quit 2>err &&
	test_i18ngrep "Autostash exists; creating a new stash entry." err &&
	git diff HEAD >actual &&
	test_cmp expect actual

HEAD is now at dc8b979 commit 1
Created autostash: a0a2bb4
Auto-merging file
Automatic merge went well; stopped before committing as requested
When finished, apply stashed changes with `git stash pop`
Autostash exists; creating a new stash entry.
ok 60 - quit merge with --no-commit and --autostash

expecting success of 7600.61 'merge with conflicted --autostash changes': 
	git reset --hard c1 &&
	git merge-file file file.orig file.9y &&
	git diff >expect &&
	test_when_finished "test_might_fail git stash drop" &&
	git merge --autostash c3 2>err &&
	test_i18ngrep "Applying autostash resulted in conflicts." err &&
	git show HEAD:file >merge-result &&
	test_cmp result.1-9 merge-result &&
	git stash show -p >actual &&
	test_cmp expect actual

HEAD is now at dc8b979 commit 1
Created autostash: 098cf2e
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Applying autostash resulted in conflicts.
Dropped refs/stash@{0} (098cf2e14a1e9d2feea2a6a4a433f28c1a9b286f)
ok 61 - merge with conflicted --autostash changes

expecting success of 7600.62 'merge early part of c2': 
	git reset --hard c3 &&
	echo c4 >c4.c &&
	git add c4.c &&
	git commit -m c4 &&
	git tag c4 &&
	echo c5 >c5.c &&
	git add c5.c &&
	git commit -m c5 &&
	git tag c5 &&
	git reset --hard c3 &&
	echo c6 >c6.c &&
	git add c6.c &&
	git commit -m c6 &&
	git tag c6 &&
	git branch -f c5-branch c5 &&
	git merge c5-branch~1 &&
	git show -s --pretty=tformat:%s HEAD >actual.branch &&
	git reset --keep HEAD^ &&
	git merge c5~1 &&
	git show -s --pretty=tformat:%s HEAD >actual.tag &&
	test_cmp expected.branch actual.branch &&
	test_cmp expected.tag actual.tag

HEAD is now at 8976188 commit 3
[main e193602] c4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c4.c
[main faccb43] c5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c5.c
HEAD is now at 8976188 commit 3
[main bfc1f93] c6
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 c6.c
Merge made by the 'ort' strategy.
 c4.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c4.c
Merge made by the 'ort' strategy.
 c4.c | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 c4.c
ok 62 - merge early part of c2

expecting success of 7600.63 'merge --no-ff --no-commit && commit': 
	git reset --hard c0 &&
	git merge --no-ff --no-commit c1 &&
	EDITOR=: git commit &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Automatic merge went well; stopped before committing as requested
[main 214792f] Merge tag 'c1'
 Author: A U Thor <author@example.com>
fatal: Needed a single revision
ok 63 - merge --no-ff --no-commit && commit

expecting success of 7600.64 'amending no-ff merge commit': 
	EDITOR=: git commit --amend &&
	verify_parents $c0 $c1

[main 214792f] Merge tag 'c1'
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:34:13 2005 -0700
fatal: Needed a single revision
ok 64 - amending no-ff merge commit

expecting success of 7600.65 'merge --no-ff --edit': 
	git reset --hard c0 &&
	EDITOR=./editor git merge --no-ff --edit c1 &&
	verify_parents $c0 $c1 &&
	git cat-file commit HEAD >raw &&
	grep "work done on the side branch" raw &&
	sed "1,/^$/d" >actual raw &&
	test_cmp expected actual

HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
fatal: Needed a single revision
Merge work done on the side branch c1
ok 65 - merge --no-ff --edit

expecting success of 7600.66 'merge annotated/signed tag w/o tracking': 
	test_when_finished "rm -rf dst; git tag -d anno1" &&
	git tag -a -m "anno c1" anno1 c1 &&
	git init dst &&
	git rev-parse c1 >dst/expect &&
	(
		# c0 fast-forwards to c1 but because this repository
		# is not a "downstream" whose refs/tags follows along
		# tag from the "upstream", this pull defaults to --no-ff
		cd dst &&
		git pull .. c0 &&
		git pull .. anno1 &&
		git rev-parse HEAD^2 >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/dst/.git/
From ..
 * tag               c0         -> FETCH_HEAD
From ..
 * tag               anno1      -> FETCH_HEAD
Merge made by the 'ort' strategy.
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
Deleted tag 'anno1' (was 0a8cfaf)
ok 66 - merge annotated/signed tag w/o tracking

expecting success of 7600.67 'merge annotated/signed tag w/ tracking': 
	test_when_finished "rm -rf dst; git tag -d anno1" &&
	git tag -a -m "anno c1" anno1 c1 &&
	git init dst &&
	git rev-parse c1 >dst/expect &&
	(
		# c0 fast-forwards to c1 and because this repository
		# is a "downstream" whose refs/tags follows along
		# tag from the "upstream", this pull defaults to --ff
		cd dst &&
		git remote add origin .. &&
		git pull origin c0 &&
		git fetch origin &&
		git merge anno1 &&
		git rev-parse HEAD >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/dst/.git/
From ..
 * tag               c0         -> FETCH_HEAD
From ..
 * [new branch]      c5-branch  -> origin/c5-branch
 * [new branch]      kid        -> origin/kid
 * [new branch]      main       -> origin/main
 * [new tag]         anno1      -> anno1
 * [new tag]         c0         -> c0
 * [new tag]         c1         -> c1
 * [new tag]         c5         -> c5
 * [new tag]         c3         -> c3
 * [new tag]         c4         -> c4
Updating 88012a2..dc8b979
Fast-forward
 file  | 2 +-
 other | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 other
Deleted tag 'anno1' (was 0a8cfaf)
ok 67 - merge annotated/signed tag w/ tracking

checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7600-merge/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7600.68 'merge --ff-only tag': 
	git reset --hard c0 &&
	git commit --allow-empty -m "A newer commit" &&
	git tag -s -m "A newer commit" signed &&
	git reset --hard c0 &&

	git merge --ff-only signed &&
	git rev-parse signed^0 >expect &&
	git rev-parse HEAD >actual &&
	test_cmp expect actual

HEAD is now at 88012a2 commit 0
[main b1508cc] A newer commit
 Author: A U Thor <author@example.com>
HEAD is now at 88012a2 commit 0
Updating 88012a2..b1508cc
Fast-forward
ok 68 - merge --ff-only tag

expecting success of 7600.69 'merge --no-edit tag should skip editor': 
	git reset --hard c0 &&
	git commit --allow-empty -m "A newer commit" &&
	git tag -f -s -m "A newer commit" signed &&
	git reset --hard c0 &&

	EDITOR=false git merge --no-edit --no-ff signed &&
	git rev-parse signed^0 >expect &&
	git rev-parse HEAD^2 >actual &&
	test_cmp expect actual

HEAD is now at 88012a2 commit 0
[main b1508cc] A newer commit
 Author: A U Thor <author@example.com>
HEAD is now at 88012a2 commit 0
Merge made by the 'ort' strategy.
ok 69 - merge --no-edit tag should skip editor

expecting success of 7600.70 'set up mod-256 conflict scenario': 
	# 256 near-identical stanzas...
	for i in $(test_seq 1 256); do
		for j in 1 2 3 4 5; do
			echo $i-$j || return 1
		done
	done >file &&
	git add file &&
	git commit -m base &&

	# one side changes the first line of each to "main"
	sed s/-1/-main/ file >tmp &&
	mv tmp file &&
	git commit -am main &&

	# and the other to "side"; merging the two will
	# yield 256 separate conflicts
	git checkout -b side HEAD^ &&
	sed s/-1/-side/ file >tmp &&
	mv tmp file &&
	git commit -am side

[main 3d0d8b1] base
 Author: A U Thor <author@example.com>
 1 file changed, 1280 insertions(+), 9 deletions(-)
[main 4cbb34c] main
 Author: A U Thor <author@example.com>
 1 file changed, 256 insertions(+), 256 deletions(-)
Switched to a new branch 'side'
[side 0165d9a] side
 Author: A U Thor <author@example.com>
 1 file changed, 256 insertions(+), 256 deletions(-)
ok 70 - set up mod-256 conflict scenario

expecting success of 7600.71 'merge detects mod-256 conflicts (recursive)': 
	git reset --hard &&
	test_must_fail git merge -s recursive main

HEAD is now at 0165d9a side
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
ok 71 - merge detects mod-256 conflicts (recursive)

expecting success of 7600.72 'merge detects mod-256 conflicts (resolve)': 
	git reset --hard &&
	test_must_fail git merge -s resolve main

HEAD is now at 0165d9a side
error: Merge requires file-level merging
Trying really trivial in-index merge...
Nope.
Trying simple merge.
Simple merge failed, trying Automatic merge.
Auto-merging file
ERROR: content conflict in file
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
ok 72 - merge detects mod-256 conflicts (resolve)

expecting success of 7600.73 'merge nothing into void': 
	git init void &&
	(
		cd void &&
		git remote add up .. &&
		git fetch up &&
		test_must_fail git merge FETCH_HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/void/.git/
From ..
 * [new branch]      c5-branch  -> up/c5-branch
 * [new branch]      kid        -> up/kid
 * [new branch]      main       -> up/main
 * [new branch]      side       -> up/side
 * [new tag]         c1         -> c1
 * [new tag]         c5         -> c5
 * [new tag]         c0         -> c0
 * [new tag]         c3         -> c3
 * [new tag]         c4         -> c4
 * [new tag]         signed     -> signed
fatal: FETCH_HEAD - not something we can merge
ok 73 - merge nothing into void

expecting success of 7600.74 'merge can be completed with --continue': 
	git reset --hard c0 &&
	git merge --no-ff --no-commit c1 &&
	git merge --continue &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Automatic merge went well; stopped before committing as requested
[side c2921bd] Merge tag 'c1' into side
 Author: A U Thor <author@example.com>
fatal: Needed a single revision
ok 74 - merge can be completed with --continue

expecting success of 7600.75 'killed merge can be completed with --continue': 
	git reset --hard c0 &&
	! "$SHELL_PATH" -c '
	  echo kill -TERM $$ >>.git/FAKE_EDITOR
	  GIT_EDITOR=.git/FAKE_EDITOR
	  export GIT_EDITOR
	  exec git merge --no-ff --edit c1' &&
	git merge --continue &&
	verify_parents $c0 $c1

HEAD is now at 88012a2 commit 0
Terminated
[side c2921bd] Merge tag 'c1' into side
 Author: A U Thor <author@example.com>
fatal: Needed a single revision
ok 75 - killed merge can be completed with --continue

expecting success of 7600.76 'merge --quit': 
	git init merge-quit &&
	(
		cd merge-quit &&
		test_commit base &&
		echo one >>base.t &&
		git commit -am one &&
		git branch one &&
		git checkout base &&
		echo two >>base.t &&
		git commit -am two &&
		test_must_fail git -c rerere.enabled=true merge one &&
		test_path_is_file .git/MERGE_HEAD &&
		test_path_is_file .git/MERGE_MODE &&
		test_path_is_file .git/MERGE_MSG &&
		git rerere status >rerere.before &&
		git merge --quit &&
		test_path_is_missing .git/MERGE_HEAD &&
		test_path_is_missing .git/MERGE_MODE &&
		test_path_is_missing .git/MERGE_MSG &&
		git rerere status >rerere.after &&
		test_must_be_empty rerere.after &&
		! test_cmp rerere.after rerere.before
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7600-merge/merge-quit/.git/
[main (root-commit) 814a92b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[main cc12456] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Note: switching to 'base'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 814a92b base
[detached HEAD 89504c3] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging base.t
CONFLICT (content): Merge conflict in base.t
Recorded preimage for 'base.t'
Automatic merge failed; fix conflicts and then commit the result.
--- rerere.after	2022-12-28 08:05:06.012794947 +0000
+++ rerere.before	2022-12-28 08:05:05.967793315 +0000
@@ -0,0 +1 @@
+base.t
ok 76 - merge --quit

expecting success of 7600.77 'merge suggests matching remote refname': 
	git commit --allow-empty -m not-local &&
	git update-ref refs/remotes/origin/not-local HEAD &&
	git reset --hard HEAD^ &&

	# This is white-box testing hackery; we happen to know
	# that reading packed refs is more picky about the memory
	# ownership of strings we pass to for_each_ref() callbacks.
	git pack-refs --all --prune &&

	test_must_fail git merge not-local 2>stderr &&
	grep origin/not-local stderr

[side 42f3c70] not-local
 Author: A U Thor <author@example.com>
HEAD is now at c2921bd Merge tag 'c1' into side
	origin/not-local
ok 77 - merge suggests matching remote refname

expecting success of 7600.78 'suggested names are not ambiguous': 
	git update-ref refs/heads/origin/not-local HEAD &&
	test_must_fail git merge not-local 2>stderr &&
	grep remotes/origin/not-local stderr

	remotes/origin/not-local
ok 78 - suggested names are not ambiguous

# passed all 78 test(s)
1..78
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7614-merge-signoff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7614-merge-signoff/.git/
expecting success of 7614.1 'setup': 
	test_setup

[main (root-commit) 6c54391] Initial empty commit
 Author: A U Thor <author@example.com>
Switched to a new branch 'other-branch'
[other-branch 5599d17] other-branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
ok 1 - setup

expecting success of 7614.2 'git merge --signoff adds a sign-off line': 
	git checkout main &&
	test_commit main-branch-2 file2 2 &&
	git checkout other-branch &&
	git merge main --signoff --no-edit &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-signed actual

Switched to branch 'main'
[main 3d2fc9d] main-branch-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
warning: refname 'other-branch' is ambiguous.
Switched to branch 'other-branch'
Merge made by the 'ort' strategy.
 file2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 2 - git merge --signoff adds a sign-off line

expecting success of 7614.3 'git merge does not add a sign-off line': 
	git checkout main &&
	test_commit main-branch-3 file3 3 &&
	git checkout other-branch &&
	git merge main --no-edit &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-unsigned actual

Switched to branch 'main'
[main fb2817d] main-branch-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
warning: refname 'other-branch' is ambiguous.
Switched to branch 'other-branch'
Merge made by the 'ort' strategy.
 file3 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 3 - git merge does not add a sign-off line

expecting success of 7614.4 'git merge --no-signoff flag cancels --signoff flag': 
	git checkout main &&
	test_commit main-branch-4 file4 4 &&
	git checkout other-branch &&
	git merge main --no-edit --signoff --no-signoff &&
	git cat-file commit HEAD | sed -e "1,/^\$/d" >actual &&
	test_cmp expected-unsigned actual

Switched to branch 'main'
[main 6807046] main-branch-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file4
warning: refname 'other-branch' is ambiguous.
Switched to branch 'other-branch'
Merge made by the 'ort' strategy.
 file4 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file4
ok 4 - git merge --no-signoff flag cancels --signoff flag

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7612-merge-verify-signatures.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7612-merge-verify-signatures/.git/
checking prerequisite: GPG

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-GPG" &&
	gpg_version=$(gpg --version 2>&1)
	test $? != 127 || exit 1

	# As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
	# the gpg version 1.0.6 did not parse trust packets correctly, so for
	# that version, creation of signed tags using the generated key fails.
	case "$gpg_version" in
	"gpg (GnuPG) 1.0.6"*)
		say "Your version of gpg (1.0.6) is too buggy for testing"
		exit 1
		;;
	*)
		# Available key info:
		# * Type DSA and Elgamal, size 2048 bits, no expiration date,
		#   name and email: C O Mitter <committer@example.com>
		# * Type RSA, size 2048 bits, no expiration date,
		#   name and email: Eris Discordia <discord@example.net>
		# No password given, to enable non-interactive operation.
		# To generate new key:
		#	gpg --homedir /tmp/gpghome --gen-key
		# To write armored exported key to keyring:
		#	gpg --homedir /tmp/gpghome --export-secret-keys \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		#	gpg --homedir /tmp/gpghome --export \
		#		--armor 0xDEADBEEF >> lib-gpg/keyring.gpg
		# To export ownertrust:
		#	gpg --homedir /tmp/gpghome --export-ownertrust \
		#		> lib-gpg/ownertrust
		mkdir "$GNUPGHOME" &&
		chmod 0700 "$GNUPGHOME" &&
		(gpgconf --kill all || : ) &&
		gpg --homedir "${GNUPGHOME}" --import \
			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
		gpg --homedir "${GNUPGHOME}" --import-ownertrust \
			"$TEST_DIRECTORY"/lib-gpg/ownertrust &&
		gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
			--sign -u committer@example.com
		;;
	esac

)
gpg: keybox '/<<PKGBUILDDIR>>/t/trash directory.t7612-merge-verify-signatures/gpghome/pubring.kbx' created
gpg: /<<PKGBUILDDIR>>/t/trash directory.t7612-merge-verify-signatures/gpghome/trustdb.gpg: trustdb created
gpg: key 13B6F51ECDDE430D: public key "C O Mitter <committer@example.com>" imported
gpg: key 13B6F51ECDDE430D: secret key imported
gpg: key 61092E85B7227189: public key "Eris Discordia <discord@example.net>" imported
gpg: key 61092E85B7227189: secret key imported
gpg: key 13B6F51ECDDE430D: "C O Mitter <committer@example.com>" not changed
gpg: key 61092E85B7227189: "Eris Discordia <discord@example.net>" not changed
gpg: Total number processed: 4
gpg:               imported: 2
gpg:              unchanged: 2
gpg:       secret keys read: 2
gpg:   secret keys imported: 2
gpg: inserting ownertrust of 6
gpg: inserting ownertrust of 3
prerequisite GPG ok
expecting success of 7612.1 'create signed commits': 
	echo 1 >file && git add file &&
	test_tick && git commit -m initial &&
	git tag initial &&

	git checkout -b side-signed &&
	echo 3 >elif && git add elif &&
	test_tick && git commit -S -m "signed on side" &&
	git checkout initial &&

	git checkout -b side-unsigned &&
	echo 3 >foo && git add foo &&
	test_tick && git commit -m "unsigned on side" &&
	git checkout initial &&

	git checkout -b side-bad &&
	echo 3 >bar && git add bar &&
	test_tick && git commit -S -m "bad on side" &&
	git cat-file commit side-bad >raw &&
	sed -e "s/^bad/forged bad/" raw >forged &&
	git hash-object -w -t commit forged >forged.commit &&
	git checkout initial &&

	git checkout -b side-untrusted &&
	echo 3 >baz && git add baz &&
	test_tick && git commit -SB7227189 -m "untrusted on side" &&

	git checkout main

[main (root-commit) 777c62c] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'side-signed'
[side-signed 8c84010] signed on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 elif
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 777c62c initial
Switched to a new branch 'side-unsigned'
[side-unsigned 477db0d] unsigned on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 777c62c initial
Switched to a new branch 'side-bad'
[side-bad 85c9b25] bad on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 777c62c initial
Switched to a new branch 'side-untrusted'
[side-untrusted ef0b9b4] untrusted on side
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 baz
Switched to branch 'main'
ok 1 - create signed commits

expecting success of 7612.2 'merge unsigned commit with verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git merge --ff-only --verify-signatures side-unsigned 2>mergeerror &&
	test_i18ngrep "does not have a GPG signature" mergeerror

fatal: Commit 477db0d does not have a GPG signature.
HEAD is now at 777c62c initial
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 777c62c initial
ok 2 - merge unsigned commit with verification

expecting success of 7612.3 'merge unsigned commit with merge.verifySignatures=true': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	test_must_fail git merge --ff-only side-unsigned 2>mergeerror &&
	test_i18ngrep "does not have a GPG signature" mergeerror

fatal: Commit 477db0d does not have a GPG signature.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 3 - merge unsigned commit with merge.verifySignatures=true

expecting success of 7612.4 'merge commit with bad signature with verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git merge --ff-only --verify-signatures $(cat forged.commit) 2>mergeerror &&
	test_i18ngrep "has a bad GPG signature" mergeerror

fatal: Commit 3e8fb0b has a bad GPG signature allegedly by C O Mitter <committer@example.com>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 4 - merge commit with bad signature with verification

expecting success of 7612.5 'merge commit with bad signature with merge.verifySignatures=true': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	test_must_fail git merge --ff-only $(cat forged.commit) 2>mergeerror &&
	test_i18ngrep "has a bad GPG signature" mergeerror

fatal: Commit 3e8fb0b has a bad GPG signature allegedly by C O Mitter <committer@example.com>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 5 - merge commit with bad signature with merge.verifySignatures=true

expecting success of 7612.6 'merge commit with untrusted signature with verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_must_fail git merge --ff-only --verify-signatures side-untrusted 2>mergeerror &&
	test_i18ngrep "has an untrusted GPG signature" mergeerror

fatal: Commit ef0b9b4 has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 6 - merge commit with untrusted signature with verification

expecting success of 7612.7 'merge commit with untrusted signature with verification and high minTrustLevel': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config gpg.minTrustLevel marginal &&
	test_must_fail git merge --ff-only --verify-signatures side-untrusted 2>mergeerror &&
	test_i18ngrep "has an untrusted GPG signature" mergeerror

fatal: Commit ef0b9b4 has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 7 - merge commit with untrusted signature with verification and high minTrustLevel

expecting success of 7612.8 'merge commit with untrusted signature with verification and low minTrustLevel': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config gpg.minTrustLevel undefined &&
	git merge --ff-only --verify-signatures side-untrusted >mergeoutput &&
	test_i18ngrep "has a good GPG signature" mergeoutput

Commit ef0b9b4 has a good GPG signature by Eris Discordia <discord@example.net>
HEAD is now at ef0b9b4 untrusted on side
Previous HEAD position was ef0b9b4 untrusted on side
HEAD is now at 777c62c initial
ok 8 - merge commit with untrusted signature with verification and low minTrustLevel

expecting success of 7612.9 'merge commit with untrusted signature with merge.verifySignatures=true': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	test_must_fail git merge --ff-only side-untrusted 2>mergeerror &&
	test_i18ngrep "has an untrusted GPG signature" mergeerror

fatal: Commit ef0b9b4 has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 9 - merge commit with untrusted signature with merge.verifySignatures=true

expecting success of 7612.10 'merge commit with untrusted signature with merge.verifySignatures=true and minTrustLevel': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	test_config gpg.minTrustLevel marginal &&
	test_must_fail git merge --ff-only side-untrusted 2>mergeerror &&
	test_i18ngrep "has an untrusted GPG signature" mergeerror

fatal: Commit ef0b9b4 has an untrusted GPG signature, allegedly by Eris Discordia <discord@example.net>.
HEAD is now at 777c62c initial
HEAD is now at 777c62c initial
ok 10 - merge commit with untrusted signature with merge.verifySignatures=true and minTrustLevel

expecting success of 7612.11 'merge signed commit with verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	git merge --verbose --ff-only --verify-signatures side-signed >mergeoutput &&
	test_i18ngrep "has a good GPG signature" mergeoutput

Commit 8c84010 has a good GPG signature by C O Mitter <committer@example.com>
HEAD is now at 8c84010 signed on side
Previous HEAD position was 8c84010 signed on side
HEAD is now at 777c62c initial
ok 11 - merge signed commit with verification

expecting success of 7612.12 'merge signed commit with merge.verifySignatures=true': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	git merge --verbose --ff-only side-signed >mergeoutput &&
	test_i18ngrep "has a good GPG signature" mergeoutput

Commit 8c84010 has a good GPG signature by C O Mitter <committer@example.com>
HEAD is now at 8c84010 signed on side
Previous HEAD position was 8c84010 signed on side
HEAD is now at 777c62c initial
ok 12 - merge signed commit with merge.verifySignatures=true

expecting success of 7612.13 'merge commit with bad signature without verification': 
	test_when_finished "git reset --hard && git checkout initial" &&
	git merge $(cat forged.commit)

Updating 777c62c..3e8fb0b
Fast-forward
 bar | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 3e8fb0b forged bad on side
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  3e8fb0b forged bad on side

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 3e8fb0b

HEAD is now at 777c62c initial
ok 13 - merge commit with bad signature without verification

expecting success of 7612.14 'merge commit with bad signature with merge.verifySignatures=false': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures false &&
	git merge $(cat forged.commit)

Updating 777c62c..3e8fb0b
Fast-forward
 bar | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 3e8fb0b forged bad on side
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  3e8fb0b forged bad on side

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 3e8fb0b

HEAD is now at 777c62c initial
ok 14 - merge commit with bad signature with merge.verifySignatures=false

expecting success of 7612.15 'merge commit with bad signature with merge.verifySignatures=true and --no-verify-signatures': 
	test_when_finished "git reset --hard && git checkout initial" &&
	test_config merge.verifySignatures true &&
	git merge --no-verify-signatures $(cat forged.commit)

Updating 777c62c..3e8fb0b
Fast-forward
 bar | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 bar
HEAD is now at 3e8fb0b forged bad on side
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  3e8fb0b forged bad on side

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 3e8fb0b

HEAD is now at 777c62c initial
ok 15 - merge commit with bad signature with merge.verifySignatures=true and --no-verify-signatures

expecting success of 7612.16 'merge unsigned commit into unborn branch': 
	test_when_finished "git checkout initial" &&
	git checkout --orphan unborn &&
	test_must_fail git merge --verify-signatures side-unsigned 2>mergeerror &&
	test_i18ngrep "does not have a GPG signature" mergeerror

Switched to a new branch 'unborn'
fatal: Commit 477db0d does not have a GPG signature.
Note: switching to 'initial'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 777c62c initial
ok 16 - merge unsigned commit into unborn branch

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7701-repack-unpack-unreachable.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7701-repack-unpack-unreachable/.git/
expecting success of 7701.1 '-A with -d option leaves unreachable objects unpacked': 
	echo content > file1 &&
	git add . &&
	test_tick &&
	git commit -m initial_commit &&
	# create a transient branch with unique content
	git checkout -b transient_branch &&
	echo more content >> file1 &&
	# record the objects created in the database for file, commit, tree
	fsha1=$(git hash-object file1) &&
	test_tick &&
	git commit -a -m more_content &&
	csha1=$(git rev-parse HEAD^{commit}) &&
	tsha1=$(git rev-parse HEAD^{tree}) &&
	git checkout main &&
	echo even more content >> file1 &&
	test_tick &&
	git commit -a -m even_more_content &&
	# delete the transient branch
	git branch -D transient_branch &&
	# pack the repo
	git repack -A -d -l &&
	# verify objects are packed in repository
	test 3 = $(git verify-pack -v -- .git/objects/pack/*.idx |
		   grep -E "^($fsha1|$csha1|$tsha1) " |
		   sort | uniq | wc -l) &&
	git show $fsha1 &&
	git show $csha1 &&
	git show $tsha1 &&
	# now expire the reflog, while keeping reachable ones but expiring
	# unreachables immediately
	test_tick &&
	sometimeago=$(( $test_tick - 10000 )) &&
	git reflog expire --expire=$sometimeago --expire-unreachable=$test_tick --all &&
	# and repack
	git repack -A -d -l &&
	# verify objects are retained unpacked
	test 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |
		   grep -E "^($fsha1|$csha1|$tsha1) " |
		   sort | uniq | wc -l) &&
	git show $fsha1 &&
	git show $csha1 &&
	git show $tsha1

[main (root-commit) 5236a77] initial_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Switched to a new branch 'transient_branch'
[transient_branch 24d3dd6] more_content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
[main 934cb86] even_more_content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Deleted branch transient_branch (was 24d3dd6).
content
more content
commit 24d3dd69fb58e8ee7cf49dd5cf55ba09486cf335
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    more_content

diff --git a/file1 b/file1
index d95f3ad..86436d0 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 content
+more content
tree 23dcdce1632612f22c2c58e14a653890ee9cb0aa

file1
content
more content
commit 24d3dd69fb58e8ee7cf49dd5cf55ba09486cf335
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    more_content

diff --git a/file1 b/file1
index d95f3ad..86436d0 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 content
+more content
tree 23dcdce1632612f22c2c58e14a653890ee9cb0aa

file1
ok 1 - -A with -d option leaves unreachable objects unpacked

expecting success of 7701.2 '-A without -d option leaves unreachable objects packed': 
	fsha1path=$(echo "$fsha1" | sed -e "s|\(..\)|\1/|") &&
	fsha1path=".git/objects/$fsha1path" &&
	csha1path=$(echo "$csha1" | sed -e "s|\(..\)|\1/|") &&
	csha1path=".git/objects/$csha1path" &&
	tsha1path=$(echo "$tsha1" | sed -e "s|\(..\)|\1/|") &&
	tsha1path=".git/objects/$tsha1path" &&
	git branch transient_branch $csha1 &&
	git repack -a -d -l &&
	test ! -f "$fsha1path" &&
	test ! -f "$csha1path" &&
	test ! -f "$tsha1path" &&
	test 1 = $(ls -1 .git/objects/pack/pack-*.pack | wc -l) &&
	packfile=$(ls .git/objects/pack/pack-*.pack) &&
	git branch -D transient_branch &&
	test_tick &&
	git repack -A -l &&
	test ! -f "$fsha1path" &&
	test ! -f "$csha1path" &&
	test ! -f "$tsha1path" &&
	git show $fsha1 &&
	git show $csha1 &&
	git show $tsha1

Deleted branch transient_branch (was 24d3dd6).
content
more content
commit 24d3dd69fb58e8ee7cf49dd5cf55ba09486cf335
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    more_content

diff --git a/file1 b/file1
index d95f3ad..86436d0 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 content
+more content
tree 23dcdce1632612f22c2c58e14a653890ee9cb0aa

file1
ok 2 - -A without -d option leaves unreachable objects packed

expecting success of 7701.3 'unpacked objects receive timestamp of pack file': 
	tmppack=".git/objects/pack/tmp_pack" &&
	ln "$packfile" "$tmppack" &&
	git repack -A -l -d &&
	test-tool chmtime --get "$tmppack" "$fsha1path" "$csha1path" "$tsha1path" \
		> mtimes &&
	compare_mtimes < mtimes

ok 3 - unpacked objects receive timestamp of pack file

expecting success of 7701.4 'do not bother loosening old objects': 
	obj1=$(echo one | git hash-object -w --stdin) &&
	obj2=$(echo two | git hash-object -w --stdin) &&
	pack1=$(echo $obj1 | git pack-objects .git/objects/pack/pack) &&
	pack2=$(echo $obj2 | git pack-objects .git/objects/pack/pack) &&
	git prune-packed &&
	git cat-file -p $obj1 &&
	git cat-file -p $obj2 &&
	test-tool chmtime =-86400 .git/objects/pack/pack-$pack2.pack &&
	git repack -A -d --unpack-unreachable=1.hour.ago &&
	git cat-file -p $obj1 &&
	test_must_fail git cat-file -p $obj2

one
two
one
fatal: Not a valid object name f719efd430d52bcfc8566a43b2eb655688d38871
ok 4 - do not bother loosening old objects

expecting success of 7701.5 'keep packed objects found only in index': 
	echo my-unique-content >file &&
	git add file &&
	git commit -m "make it reachable" &&
	git gc &&
	git reset HEAD^ &&
	git reflog expire --expire=now --all &&
	git add file &&
	test-tool chmtime =-86400 .git/objects/pack/* &&
	git gc --prune=1.hour.ago &&
	git cat-file blob :file

[main 73784a1] make it reachable
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
my-unique-content
ok 5 - keep packed objects found only in index

expecting success of 7701.6 'repack -k keeps unreachable packed objects': 
	# create packed-but-unreachable object
	sha1=$(echo unreachable-packed | git hash-object -w --stdin) &&
	pack=$(echo $sha1 | git pack-objects .git/objects/pack/pack) &&
	git prune-packed &&

	# -k should keep it
	git repack -adk &&
	git cat-file -p $sha1 &&

	# and double check that without -k it would have been removed
	git repack -ad &&
	test_must_fail git cat-file -p $sha1

unreachable-packed
fatal: Not a valid object name bdf1d55da464c8ffc31aa0891954caf1baf216e8
ok 6 - repack -k keeps unreachable packed objects

expecting success of 7701.7 'repack -k packs unreachable loose objects': 
	# create loose unreachable object
	sha1=$(echo would-be-deleted-loose | git hash-object -w --stdin) &&
	objpath=.git/objects/$(echo $sha1 | sed "s,..,&/,") &&
	test_path_is_file $objpath &&

	# and confirm that the loose object goes away, but we can
	# still access it (ergo, it is packed)
	git repack -adk &&
	test_path_is_missing $objpath &&
	git cat-file -p $sha1

would-be-deleted-loose
ok 7 - repack -k packs unreachable loose objects

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7609-mergetool--lib.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7609-mergetool--lib/.git/
expecting success of 7609.1 'mergetool --tool=vimdiff creates the expected layout': 
	. "$GIT_BUILD_DIR"/mergetools/vimdiff &&
	run_unit_tests

Test Case #01: OK
Test Case #02: OK
Test Case #03: OK
Test Case #04: OK
Test Case #05: OK
Test Case #06: OK
Test Case #07: OK
Test Case #08: OK
Test Case #09: OK
Test Case #10: OK
Test Case #11: OK
Test Case #12: OK
Test Case #13: OK
Test Case #14: OK
Test Case #15: OK
Test Case #16: OK
ok 1 - mergetool --tool=vimdiff creates the expected layout

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7702-repack-cyclic-alternate.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7702-repack-cyclic-alternate/.git/
expecting success of 7702.1 'setup': 
	GIT_OBJECT_DIRECTORY=.git//../.git/objects &&
	export GIT_OBJECT_DIRECTORY &&
	touch a &&
	git add a &&
	git commit -m 1 &&
	git repack -adl &&
	echo "$(pwd)"/.git/objects/../objects >.git/objects/info/alternates

[master (root-commit) 9b08673] 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
ok 1 - setup

expecting success of 7702.2 're-packing repository with itsself as alternate': 
	git repack -adl &&
	git fsck

ok 2 - re-packing repository with itsself as alternate

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7703-repack-geometric.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/.git/
expecting success of 7703.1 '--geometric with no packs': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		git repack --write-midx --geometric 2 >out &&
		test_i18ngrep "Nothing new to pack" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
Nothing new to pack.
ok 1 - --geometric with no packs

expecting success of 7703.2 '--geometric with one pack': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		test_commit "base" &&
		git repack -d &&

		git repack --geometric 2 >out &&

		test_i18ngrep "Nothing new to pack" out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
[master (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Nothing new to pack.
ok 2 - --geometric with one pack

expecting success of 7703.3 '--geometric with an intact progression': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		# These packs already form a geometric progression.
		test_commit_bulk --start=1 1 && # 3 objects
		test_commit_bulk --start=2 2 && # 6 objects
		test_commit_bulk --start=4 4 && # 12 objects

		find $objdir/pack -name "*.pack" | sort >expect &&
		git repack --geometric 2 -d &&
		find $objdir/pack -name "*.pack" | sort >actual &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

d8452bb98e031b9f6d1e3804a8cecc14e3124c9e
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        716 /        716
---------------------------------------------------------------------

123d744603d8c13997f7dd86b4f066cc68305762
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           12 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          3 deltas of          3 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1501 /       1501
---------------------------------------------------------------------

Nothing new to pack.
ok 3 - --geometric with an intact progression

expecting success of 7703.4 '--geometric with loose objects': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		# These packs already form a geometric progression.
		test_commit_bulk --start=1 1 && # 3 objects
		test_commit_bulk --start=2 2 && # 6 objects
		# The loose objects are packed together, breaking the
		# progression.
		test_commit loose && # 3 objects

		find $objdir/pack -name "*.pack" | sort >before &&
		git repack --geometric 2 -d &&
		find $objdir/pack -name "*.pack" | sort >after &&

		comm -13 before after >new &&
		comm -23 before after >removed &&

		test_line_count = 1 new &&
		test_must_be_empty removed &&

		git repack --geometric 2 -d &&
		find $objdir/pack -name "*.pack" | sort >after &&

		# The progression (3, 3, 6) is combined into one new pack.
		test_line_count = 1 after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

d8452bb98e031b9f6d1e3804a8cecc14e3124c9e
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        716 /        716
---------------------------------------------------------------------

[master 3de64bf] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 4 - --geometric with loose objects

expecting success of 7703.5 '--geometric with small-pack rollup': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		test_commit_bulk --start=1 1 && # 3 objects
		test_commit_bulk --start=2 1 && # 3 objects
		find $objdir/pack -name "*.pack" | sort >small &&
		test_commit_bulk --start=3 4 && # 12 objects
		test_commit_bulk --start=7 8 && # 24 objects
		find $objdir/pack -name "*.pack" | sort >before &&

		git repack --geometric 2 -d &&

		# Three packs in total; two of the existing large ones, and one
		# new one.
		find $objdir/pack -name "*.pack" | sort >after &&
		test_line_count = 3 after &&
		comm -3 small before | tr -d "\t" >large &&
		grep -qFf large after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

d8452bb98e031b9f6d1e3804a8cecc14e3124c9e
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        494 /        494
---------------------------------------------------------------------

446a0a30049ffec3f6a1af16c07e8c0941b11660
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           12 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          3 deltas of          3 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       1467 /       1467
---------------------------------------------------------------------

6cf975cad5d4c3afe9d9c1beb519506ab26f2968
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           24 (         0 duplicates                  )
      blobs  :            8 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            8 (         0 duplicates          7 deltas of          7 attempts)
      commits:            8 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             14
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         14
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       2954 /       2954
---------------------------------------------------------------------

ok 5 - --geometric with small-pack rollup

expecting success of 7703.6 '--geometric with small- and large-pack rollup': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		# size(small1) + size(small2) > size(medium) / 2
		test_commit_bulk --start=1 1 && # 3 objects
		test_commit_bulk --start=2 1 && # 3 objects
		test_commit_bulk --start=2 3 && # 7 objects
		test_commit_bulk --start=6 9 && # 27 objects &&

		find $objdir/pack -name "*.pack" | sort >before &&

		git repack --geometric 2 -d &&

		find $objdir/pack -name "*.pack" | sort >after &&
		comm -12 before after >untouched &&

		# Two packs in total; the largest pack from before running "git
		# repack", and one new one.
		test_line_count = 1 untouched &&
		test_line_count = 2 after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

d8452bb98e031b9f6d1e3804a8cecc14e3124c9e
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        494 /        494
---------------------------------------------------------------------

446a0a30049ffec3f6a1af16c07e8c0941b11660
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            7 (         1 duplicates                  )
      blobs  :            2 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            3 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          9
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       1173 /       1173
---------------------------------------------------------------------

3b6ba6da728b7d7f9d84a57cbdfe24243627f606
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           27 (         0 duplicates                  )
      blobs  :            9 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            9 (         0 duplicates          8 deltas of          8 attempts)
      commits:            9 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             13
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         15
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       2833 /       2833
---------------------------------------------------------------------

ok 6 - --geometric with small- and large-pack rollup

expecting success of 7703.7 '--geometric ignores kept packs': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		test_commit kept && # 3 objects
		test_commit pack && # 3 objects

		KEPT=$(git pack-objects --revs $objdir/pack/pack <<-EOF
		refs/tags/kept
		EOF
		) &&
		PACK=$(git pack-objects --revs $objdir/pack/pack <<-EOF
		refs/tags/pack
		^refs/tags/kept
		EOF
		) &&

		# neither pack contains more than twice the number of objects in
		# the other, so they should be combined. but, marking one as
		# .kept on disk will "freeze" it, so the pack structure should
		# remain unchanged.
		touch $objdir/pack/pack-$KEPT.keep &&

		find $objdir/pack -name "*.pack" | sort >before &&
		git repack --geometric 2 -d &&
		find $objdir/pack -name "*.pack" | sort >after &&

		# both packs should still exist
		test_path_is_file $objdir/pack/pack-$KEPT.pack &&
		test_path_is_file $objdir/pack/pack-$PACK.pack &&

		# and no new packs should be created
		test_cmp before after &&

		# Passing --pack-kept-objects causes packs with a .keep file to
		# be repacked, too.
		git repack --geometric 2 -d --pack-kept-objects &&

		# After repacking, two packs remain: one new one (containing the
		# objects in both the .keep and non-kept pack), and the .keep
		# pack (since `--pack-kept-objects -d` does not actually delete
		# the kept pack).
		find $objdir/pack -name "*.pack" >after &&
		test_line_count = 2 after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
[master (root-commit) 08c8142] kept
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 kept.t
[master e384986] pack
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pack.t
Nothing new to pack.
ok 7 - --geometric ignores kept packs

expecting success of 7703.8 '--geometric ignores --keep-pack packs': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		# Create two equal-sized packs
		test_commit kept && # 3 objects
		git repack -d &&
		test_commit pack && # 3 objects
		git repack -d &&

		find $objdir/pack -type f -name "*.pack" | sort >packs.before &&
		git repack --geometric 2 -dm \
			--keep-pack="$(basename "$(head -n 1 packs.before)")" >out &&
		find $objdir/pack -type f -name "*.pack" | sort >packs.after &&

		# Packs should not have changed (only one non-kept pack, no
		# loose objects), but $midx should now exist.
		grep "Nothing new to pack" out &&
		test_path_is_file $midx &&

		test_cmp packs.before packs.after &&

		git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
[master (root-commit) 08c8142] kept
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 kept.t
[master e384986] pack
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pack.t
Nothing new to pack.
ok 8 - --geometric ignores --keep-pack packs

expecting success of 7703.9 '--geometric chooses largest MIDX preferred pack': 
	git init geometric &&
	test_when_finished "rm -fr geometric" &&
	(
		cd geometric &&

		# These packs already form a geometric progression.
		test_commit_bulk --start=1 1 && # 3 objects
		test_commit_bulk --start=2 2 && # 6 objects
		ls $objdir/pack/pack-*.idx >before &&
		test_commit_bulk --start=4 4 && # 12 objects
		ls $objdir/pack/pack-*.idx >after &&

		git repack --geometric 2 -dbm &&

		comm -3 before after | xargs -n 1 basename >expect &&
		test-tool read-midx --preferred-pack $objdir >actual &&

		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/geometric/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        220 /        220
---------------------------------------------------------------------

d8452bb98e031b9f6d1e3804a8cecc14e3124c9e
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        716 /        716
---------------------------------------------------------------------

123d744603d8c13997f7dd86b4f066cc68305762
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           12 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          3 deltas of          3 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1501 /       1501
---------------------------------------------------------------------

Nothing new to pack.
ok 9 - --geometric chooses largest MIDX preferred pack

expecting success of 7703.10 '--geometric with pack.packSizeLimit': 
	git init pack-rewrite &&
	test_when_finished "rm -fr pack-rewrite" &&
	(
		cd pack-rewrite &&

		test-tool genrandom foo 1048576 >foo &&
		test-tool genrandom bar 1048576 >bar &&

		git add foo bar &&
		test_tick &&
		git commit -m base &&

		git rev-parse HEAD:foo HEAD:bar >p1.objects &&
		git rev-parse HEAD HEAD^{tree} >p2.objects &&

		# These two packs each contain two objects, so the following
		# `--geometric` repack will try to combine them.
		p1="$(git pack-objects $packdir/pack <p1.objects)" &&
		p2="$(git pack-objects $packdir/pack <p2.objects)" &&

		# Remove any loose objects in packs, since we do not want extra
		# copies around (which would mask over potential object
		# corruption issues).
		git prune-packed &&

		# Both p1 and p2 will be rolled up, but pack-objects will write
		# three packs:
		#
		#   - one containing object "foo",
		#   - another containing object "bar",
		#   - a final pack containing the commit and tree objects
		#     (identical to p2 above)
		git repack --geometric 2 -d --max-pack-size=1048576 &&

		# Ensure `repack` can detect that the third pack it wrote
		# (containing just the tree and commit objects) was identical to
		# one that was below the geometric split, so that we can save it
		# from deletion.
		#
		# If `repack` fails to do that, we will incorrectly delete p2,
		# causing object corruption.
		git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7703-repack-geometric/pack-rewrite/.git/
[master (root-commit) 6102f2f] base
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
 create mode 100644 foo
ok 10 - --geometric with pack.packSizeLimit

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7700-repack.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/.git/
expecting success of 7700.1 'objects in packs marked .keep are not repacked': 
	echo content1 >file1 &&
	echo content2 >file2 &&
	git add . &&
	test_tick &&
	git commit -m initial_commit &&
	# Create two packs
	# The first pack will contain all of the objects except one
	git rev-list --objects --all >objs &&
	grep -v file2 objs | git pack-objects pack &&
	# The second pack will contain the excluded object
	packid=$(grep file2 objs | git pack-objects pack) &&
	>pack-$packid.keep &&
	git verify-pack -v pack-$packid.idx >packlist &&
	oid=$(head -n 1 packlist | sed -e "s/^\($OID_REGEX\).*/\1/") &&
	mv pack-* .git/objects/pack/ &&
	git repack -A -d -l &&
	git prune-packed &&
	test_has_duplicate_object false

[master (root-commit) 3677360] initial_commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
647acebd8748a0656779e97a3d770aa9b59026ae
ok 1 - objects in packs marked .keep are not repacked

expecting success of 7700.2 'writing bitmaps via command-line can duplicate .keep objects': 
	# build on $oid, $packid, and .keep state from previous
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 git repack -Adbl &&
	test_has_duplicate_object true

637f0347d31dad180d6fc7f6720c187b05a8754c blob   9 18 162
DUPLICATE OBJECT FOUND
ok 2 - writing bitmaps via command-line can duplicate .keep objects

expecting success of 7700.3 'writing bitmaps via config can duplicate .keep objects': 
	# build on $oid, $packid, and .keep state from previous
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -c repack.writebitmaps=true repack -Adl &&
	test_has_duplicate_object true

637f0347d31dad180d6fc7f6720c187b05a8754c blob   9 18 162
DUPLICATE OBJECT FOUND
ok 3 - writing bitmaps via config can duplicate .keep objects

expecting success of 7700.4 'loose objects in alternate ODB are not repacked': 
	mkdir alt_objects &&
	echo $(pwd)/alt_objects >.git/objects/info/alternates &&
	echo content3 >file3 &&
	oid=$(GIT_OBJECT_DIRECTORY=alt_objects git hash-object -w file3) &&
	git add file3 &&
	test_tick &&
	git commit -m commit_file3 &&
	git repack -a -d -l &&
	git prune-packed &&
	test_has_duplicate_object false

[master 6f105e6] commit_file3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
ok 4 - loose objects in alternate ODB are not repacked

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7700.5 '--local keeps packs when alternate is objectdir ': 
	test_when_finished "rm -rf repo" &&
	git init repo &&
	test_commit -C repo A &&
	(
		cd repo &&
		git repack -a &&
		ls .git/objects/pack/*.pack >../expect &&
		ln -s objects .git/alt_objects &&
		echo "$(pwd)/.git/alt_objects" >.git/objects/info/alternates &&
		git repack -a -d -l &&
		ls .git/objects/pack/*.pack >../actual
	) &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/repo/.git/
[master (root-commit) a3899a0] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
ok 5 - --local keeps packs when alternate is objectdir 

expecting success of 7700.6 'packed obs in alt ODB are repacked even when local repo is packless': 
	mkdir alt_objects/pack &&
	mv .git/objects/pack/* alt_objects/pack &&
	git repack -a &&
	test_no_missing_in_packs

ok 6 - packed obs in alt ODB are repacked even when local repo is packless

expecting success of 7700.7 'packed obs in alt ODB are repacked when local repo has packs': 
	rm -f .git/objects/pack/* &&
	echo new_content >>file1 &&
	git add file1 &&
	test_tick &&
	git commit -m more_content &&
	git repack &&
	git repack -a -d &&
	test_no_missing_in_packs

[master 0e4e267] more_content
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 7 - packed obs in alt ODB are repacked when local repo has packs

expecting success of 7700.8 'packed obs in alternate ODB kept pack are repacked': 
	# swap the .keep so the commit object is in the pack with .keep
	for p in alt_objects/pack/*.pack
	do
		base_name=$(basename $p .pack) &&
		if test_path_is_file alt_objects/pack/$base_name.keep
		then
			rm alt_objects/pack/$base_name.keep
		else
			touch alt_objects/pack/$base_name.keep
		fi || return 1
	done &&
	git repack -a -d &&
	test_no_missing_in_packs

File alt_objects/pack/pack-09df7d90d739b5b997442ec62fb88ac0d68d7b68.keep doesn't exist
ok 8 - packed obs in alternate ODB kept pack are repacked

expecting success of 7700.9 'packed unreachable obs in alternate ODB are not loosened': 
	rm -f alt_objects/pack/*.keep &&
	mv .git/objects/pack/* alt_objects/pack/ &&
	coid=$(git rev-parse HEAD^{commit}) &&
	git reset --hard HEAD^ &&
	test_tick &&
	git reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&
	# The pack-objects call on the next line is equivalent to
	# git repack -A -d without the call to prune-packed
	git pack-objects --honor-pack-keep --non-empty --all --reflog \
	    --unpack-unreachable </dev/null pack &&
	rm -f .git/objects/pack/* &&
	mv pack-* .git/objects/pack/ &&
	git verify-pack -v -- .git/objects/pack/*.idx >packlist &&
	! grep "^$coid " packlist &&
	echo >.git/objects/info/alternates &&
	test_must_fail git show $coid

HEAD is now at 6f105e6 commit_file3
85f93d7925f6a606964869128f786c6de753b60c
fatal: bad object 0e4e2678b2cc15890fb9bac6ad40f9c31198b8af
ok 9 - packed unreachable obs in alternate ODB are not loosened

expecting success of 7700.10 'local packed unreachable obs that exist in alternate ODB are not loosened': 
	echo $(pwd)/alt_objects >.git/objects/info/alternates &&
	echo "$coid" | git pack-objects --non-empty --all --reflog pack &&
	rm -f .git/objects/pack/* &&
	mv pack-* .git/objects/pack/ &&
	# The pack-objects call on the next line is equivalent to
	# git repack -A -d without the call to prune-packed
	git pack-objects --honor-pack-keep --non-empty --all --reflog \
	    --unpack-unreachable </dev/null pack &&
	rm -f .git/objects/pack/* &&
	mv pack-* .git/objects/pack/ &&
	git verify-pack -v -- .git/objects/pack/*.idx >packlist &&
	! grep "^$coid " &&
	echo >.git/objects/info/alternates &&
	test_must_fail git show $coid

4f27fb8d5b73124b8c94f72b938bde9ae4f6999a
85f93d7925f6a606964869128f786c6de753b60c
fatal: bad object 0e4e2678b2cc15890fb9bac6ad40f9c31198b8af
ok 10 - local packed unreachable obs that exist in alternate ODB are not loosened

expecting success of 7700.11 'objects made unreachable by grafts only are kept': 
	test_tick &&
	git commit --allow-empty -m "commit 4" &&
	H0=$(git rev-parse HEAD) &&
	H1=$(git rev-parse HEAD^) &&
	H2=$(git rev-parse HEAD^^) &&
	echo "$H0 $H2" >.git/info/grafts &&
	git reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&
	git repack -a -d &&
	git cat-file -t $H1

[master 95a9e53] commit 4
 Author: A U Thor <author@example.com>
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
commit
ok 11 - objects made unreachable by grafts only are kept

expecting success of 7700.12 'repack --keep-pack': 
	test_create_repo keep-pack &&
	(
		cd keep-pack &&
		P1=$(commit_and_pack 1) &&
		P2=$(commit_and_pack 2) &&
		P3=$(commit_and_pack 3) &&
		P4=$(commit_and_pack 4) &&
		ls .git/objects/pack/*.pack >old-counts &&
		test_line_count = 4 old-counts &&
		git repack -a -d --keep-pack $P1 --keep-pack $P4 &&
		ls .git/objects/pack/*.pack >new-counts &&
		grep -q $P1 new-counts &&
		grep -q $P4 new-counts &&
		test_line_count = 3 new-counts &&
		git fsck
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/keep-pack/.git/
[master (root-commit) c034eb4] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 97f32c4] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master b19c9f9] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master a9c77cf] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
ok 12 - repack --keep-pack

expecting success of 7700.13 'bitmaps are created by default in bare repos': 
	git clone --bare .git bare.git &&
	rm -f bare.git/objects/pack/*.bitmap &&
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -C bare.git repack -ad &&
	bitmap=$(ls bare.git/objects/pack/*.bitmap) &&
	test_path_is_file "$bitmap"

Cloning into bare repository 'bare.git'...
done.
ok 13 - bitmaps are created by default in bare repos

expecting success of 7700.14 'incremental repack does not complain': 
	git -C bare.git repack -q 2>repack.err &&
	test_must_be_empty repack.err

ok 14 - incremental repack does not complain

expecting success of 7700.15 'bitmaps can be disabled on bare repos': 
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -c repack.writeBitmaps=false -C bare.git repack -ad &&
	bitmap=$(ls bare.git/objects/pack/*.bitmap || :) &&
	test -z "$bitmap"

ls: cannot access 'bare.git/objects/pack/*.bitmap': No such file or directory
ok 15 - bitmaps can be disabled on bare repos

expecting success of 7700.16 'no bitmaps created if .keep files present': 
	pack=$(ls bare.git/objects/pack/*.pack) &&
	test_path_is_file "$pack" &&
	keep=${pack%.pack}.keep &&
	test_when_finished "rm -f \"\$keep\"" &&
	>"$keep" &&
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -C bare.git repack -ad 2>stderr &&
	test_must_be_empty stderr &&
	find bare.git/objects/pack/ -type f -name "*.bitmap" >actual &&
	test_must_be_empty actual

Nothing new to pack.
ok 16 - no bitmaps created if .keep files present

expecting success of 7700.17 'auto-bitmaps do not complain if unavailable': 
	test_config -C bare.git pack.packSizeLimit 1M &&
	blob=$(test-tool genrandom big $((1024*1024)) |
	       git -C bare.git hash-object -w --stdin) &&
	git -C bare.git update-ref refs/tags/big $blob &&
	GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0 \
		git -C bare.git repack -ad 2>stderr &&
	test_must_be_empty stderr &&
	find bare.git/objects/pack -type f -name "*.bitmap" >actual &&
	test_must_be_empty actual

ok 17 - auto-bitmaps do not complain if unavailable

expecting success of 7700.18 'setup for --write-midx tests': 
	git init midx &&
	(
		cd midx &&
		git config core.multiPackIndex true &&

		test_commit base
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/midx/.git/
[master (root-commit) bf71f7c] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
ok 18 - setup for --write-midx tests

expecting success of 7700.19 '--write-midx unchanged': 
	(
		cd midx &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack &&
		test_path_is_missing $midx &&
		test_path_is_missing $midx-*.bitmap &&

		GIT_TEST_MULTI_PACK_INDEX=0 git repack --write-midx &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-*.bitmap &&
		test_midx_consistent $objdir
	)

Nothing new to pack.
ok 19 - --write-midx unchanged

expecting success of 7700.20 '--write-midx with a new pack': 
	(
		cd midx &&
		test_commit loose &&

		GIT_TEST_MULTI_PACK_INDEX=0 git repack --write-midx &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-*.bitmap &&
		test_midx_consistent $objdir
	)

[master add4380] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 20 - --write-midx with a new pack

expecting success of 7700.21 '--write-midx with -b': 
	(
		cd midx &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -mb &&

		test_path_is_file $midx &&
		test_path_is_file $midx-*.bitmap &&
		test_midx_consistent $objdir
	)

Nothing new to pack.
ok 21 - --write-midx with -b

expecting success of 7700.22 '--write-midx with -d': 
	(
		cd midx &&
		test_commit repack &&

		GIT_TEST_MULTI_PACK_INDEX=0 git repack -Ad --write-midx &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-*.bitmap &&
		test_midx_consistent $objdir
	)

[master c5a8e1e] repack
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repack.t
ok 22 - --write-midx with -d

expecting success of 7700.23 'cleans up MIDX when appropriate': 
	(
		cd midx &&

		test_commit repack-2 &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -Adb --write-midx &&

		checksum=$(midx_checksum $objdir) &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$checksum.bitmap &&

		test_commit repack-3 &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -Adb --write-midx &&

		test_path_is_file $midx &&
		test_path_is_missing $midx-$checksum.bitmap &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		test_commit repack-4 &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -Adb &&

		find $objdir/pack -type f -name "multi-pack-index*" >files &&
		test_must_be_empty files
	)

[master 10c6ab2] repack-2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repack-2.t
[master 789d6b0] repack-3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repack-3.t
[master 97148f2] repack-4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 repack-4.t
ok 23 - cleans up MIDX when appropriate

expecting success of 7700.24 '--write-midx with preferred bitmap tips': 
	git init midx-preferred-tips &&
	test_when_finished "rm -fr midx-preferred-tips" &&
	(
		cd midx-preferred-tips &&

		test_commit_bulk --message="%s" 103 &&

		git log --format="%H" >commits.raw &&
		sort <commits.raw >commits &&

		git log --format="create refs/tags/%s/%s %H" HEAD >refs &&
		git update-ref --stdin <refs &&

		git repack --write-midx --write-bitmap-index &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&

		test-tool bitmap list-commits | sort >bitmaps &&
		comm -13 bitmaps commits >before &&
		test_line_count = 1 before &&

		rm -fr $midx-$(midx_checksum $objdir).bitmap &&
		rm -fr $midx &&

		# instead of constructing the snapshot ourselves (c.f., the test
		# "write a bitmap with --refs-snapshot (preferred tips)" in
		# t5326), mark the missing commit as preferred by adding it to
		# the pack.preferBitmapTips configuration.
		git for-each-ref --format="%(refname:rstrip=1)" \
			--points-at="$(cat before)" >missing &&
		git config pack.preferBitmapTips "$(cat missing)" &&
		git repack --write-midx --write-bitmap-index &&

		test-tool bitmap list-commits | sort >bitmaps &&
		comm -13 bitmaps commits >after &&

		! test_cmp before after
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/midx-preferred-tips/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:          309 (         0 duplicates                  )
      blobs  :          103 (         0 duplicates          0 deltas of          0 attempts)
      trees  :          103 (         0 duplicates        100 deltas of        100 attempts)
      commits:          103 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            103
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =      26909 /      26909
---------------------------------------------------------------------

Nothing new to pack.
Nothing new to pack.
--- before	2022-12-28 08:05:23.703436499 +0000
+++ after	2022-12-28 08:05:24.193454270 +0000
@@ -1 +1 @@
-8cd3b9bb7db0d633144114a81b7374e6a2b1b22c
+3d2725684b43b31e3b81e5070d1847c9f1e2cf00
ok 24 - --write-midx with preferred bitmap tips

expecting success of 7700.25 '--write-midx -b packs non-kept objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		# Create a kept pack-file
		test_commit base &&
		git repack -ad &&
		find $objdir/pack -name "*.idx" >before &&
		test_line_count = 1 before &&
		before_name=$(cat before) &&
		>${before_name%.idx}.keep &&

		# Create a non-kept pack-file
		test_commit other &&
		git repack &&

		# Create loose objects
		test_commit loose &&

		# Repack everything
		git repack --write-midx -a -b -d &&

		# There should be two pack-files now, the
		# old, kept pack and the new, non-kept pack.
		find $objdir/pack -name "*.idx" | sort >after &&
		test_line_count = 2 after &&
		find $objdir/pack -name "*.keep" >kept &&
		kept_name=$(cat kept) &&
		echo ${kept_name%.keep}.idx >kept-idx &&
		test_cmp before kept-idx &&

		# Get object list from the kept pack.
		get_sorted_objects_from_pack before >old.objects &&

		# Get object list from the one non-kept pack-file
		comm -13 before after >new-pack &&
		test_line_count = 1 new-pack &&
		get_sorted_objects_from_pack new-pack >new.objects &&

		# None of the objects in the new pack should
		# exist within the kept pack.
		comm -12 old.objects new.objects >shared.objects &&
		test_must_be_empty shared.objects
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/repo/.git/
[master (root-commit) bf71f7c] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 29fd16f] other
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 other.t
[master abf480b] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
ok 25 - --write-midx -b packs non-kept objects

expecting success of 7700.26 '--write-midx removes stale pack-based bitmaps': 
       rm -fr repo &&
       git init repo &&
       test_when_finished "rm -fr repo" &&
       (
		cd repo &&
		test_commit base &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -Ab &&

		pack_bitmap=$(ls $objdir/pack/pack-*.bitmap) &&
		test_path_is_file "$pack_bitmap" &&

		test_commit tip &&
		GIT_TEST_MULTI_PACK_INDEX=0 git repack -bm &&

		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
		test_path_is_missing $pack_bitmap
       )

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/repo/.git/
[master (root-commit) bf71f7c] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[master 80dd058] tip
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tip.t
ok 26 - --write-midx removes stale pack-based bitmaps

expecting success of 7700.27 '--write-midx with --pack-kept-objects': 
	git init repo &&
	test_when_finished "rm -fr repo" &&
	(
		cd repo &&

		test_commit one &&
		test_commit two &&

		one="$(echo "one" | git pack-objects --revs $objdir/pack/pack)" &&
		two="$(echo "one..two" | git pack-objects --revs $objdir/pack/pack)" &&

		keep="$objdir/pack/pack-$one.keep" &&
		touch "$keep" &&

		git repack --write-midx --write-bitmap-index --geometric=2 -d \
			--pack-kept-objects &&

		test_path_is_file $keep &&
		test_path_is_file $midx &&
		test_path_is_file $midx-$(midx_checksum $objdir).bitmap
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/repo/.git/
[master (root-commit) 06e07da] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[master 738d2f7] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
ok 27 - --write-midx with --pack-kept-objects

checking prerequisite: TTY

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-TTY" &&
	test_have_prereq PERL &&

	# Reading from the pty master seems to get stuck _sometimes_
	# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
	#
	# Reproduction recipe: run
	#
	#	i=0
	#	while ./test-terminal.perl echo hi $i
	#	do
	#		: $((i = $i + 1))
	#	done
	#
	# After 2000 iterations or so it hangs.
	# https://rt.cpan.org/Ticket/Display.html?id=65692
	#
	test "$(uname -s)" != Darwin &&

	perl "$TEST_DIRECTORY"/test-terminal.perl \
		sh -c "test -t 1 && test -t 2"

)
prerequisite TTY ok
expecting success of 7700.28 '--quiet disables progress': 
	test_terminal env GIT_PROGRESS_DELAY=0 \
		git -C midx repack -ad --quiet --write-midx 2>stderr &&
	test_must_be_empty stderr

ok 28 - --quiet disables progress

expecting success of 7700.29 'clean up .tmp-* packs on error': 
	test_must_fail ok=sigpipe git \
		-c repack.cruftwindow=bogus \
		repack -ad --cruft &&
	find $objdir/pack -name .tmp-* >tmpfiles &&
	test_must_be_empty tmpfiles

hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
error: option `window' expects a numerical value
ok 29 - clean up .tmp-* packs on error

expecting success of 7700.30 'repack -ad cleans up old .tmp-* packs': 
	git rev-parse HEAD >input &&
	git pack-objects $objdir/pack/.tmp-1234 <input &&
	git repack -ad &&
	find $objdir/pack -name .tmp-* >tmpfiles &&
	test_must_be_empty tmpfiles

e3eb4c912613cba004926473486638766e8cc44e
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
ok 30 - repack -ad cleans up old .tmp-* packs

expecting success of 7700.31 'setup for update-server-info': 
	git init update-server-info &&
	test_commit -C update-server-info message

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/update-server-info/.git/
[master (root-commit) c5363f9] message
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 message.t
ok 31 - setup for update-server-info

expecting success of 7700.32 'updates server info by default': 
	test_server_info_cleanup &&
	git -C update-server-info repack &&
	test_server_info_present

ok 32 - updates server info by default

expecting success of 7700.33 '-n skips updating server info': 
	test_server_info_cleanup &&
	git -C update-server-info repack -n &&
	test_server_info_missing

Nothing new to pack.
ok 33 - -n skips updating server info

expecting success of 7700.34 'repack.updateServerInfo=true updates server info': 
	test_server_info_cleanup &&
	git -C update-server-info -c repack.updateServerInfo=true repack &&
	test_server_info_present

Nothing new to pack.
ok 34 - repack.updateServerInfo=true updates server info

expecting success of 7700.35 'repack.updateServerInfo=false skips updating server info': 
	test_server_info_cleanup &&
	git -C update-server-info -c repack.updateServerInfo=false repack &&
	test_server_info_missing

Nothing new to pack.
ok 35 - repack.updateServerInfo=false skips updating server info

expecting success of 7700.36 '-n overrides repack.updateServerInfo=true': 
	test_server_info_cleanup &&
	git -C update-server-info -c repack.updateServerInfo=true repack -n &&
	test_server_info_missing

Nothing new to pack.
ok 36 - -n overrides repack.updateServerInfo=true

expecting success of 7700.37 '--expire-to stores pruned objects (now)': 
	git init expire-to-now &&
	(
		cd expire-to-now &&

		git branch -M main &&

		test_commit base &&

		git checkout -b cruft &&
		test_commit --no-tag cruft &&

		git rev-list --objects --no-object-names main..cruft >moved.raw &&
		sort moved.raw >moved.want &&

		git rev-list --all --objects --no-object-names >expect.raw &&
		sort expect.raw >expect &&

		git checkout main &&
		git branch -D cruft &&
		git reflog expire --all --expire=all &&

		git init --bare expired.git &&
		git repack -d \
			--cruft --cruft-expiration="now" \
			--expire-to="expired.git/objects/pack/pack" &&

		expired="$(ls expired.git/objects/pack/pack-*.idx)" &&
		test_path_is_file "${expired%.idx}.mtimes" &&

		# Since the `--cruft-expiration` is "now", the effective
		# behavior is to move _all_ unreachable objects out to
		# the location in `--expire-to`.
		git show-index <$expired >expired.raw &&
		cut -d" " -f2 expired.raw | sort >expired.objects &&
		git rev-list --all --objects --no-object-names \
			>remaining.objects &&

		# ...in other words, the combined contents of this
		# repository and expired.git should be the same as the
		# set of objects we started with.
		cat expired.objects remaining.objects | sort >actual &&
		test_cmp expect actual &&

		# The "moved" objects (i.e., those in expired.git)
		# should be the same as the cruft objects which were
		# expired in the previous step.
		test_cmp moved.want expired.objects
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/expire-to-now/.git/
[main (root-commit) cd7dc8b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Switched to a new branch 'cruft'
[cruft 0ee0484] cruft
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cruft.t
Switched to branch 'main'
Deleted branch cruft (was 0ee0484).
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/expire-to-now/expired.git/
ok 37 - --expire-to stores pruned objects (now)

expecting success of 7700.38 '--expire-to stores pruned objects (5.minutes.ago)': 
	git init expire-to-5.minutes.ago &&
	(
		cd expire-to-5.minutes.ago &&

		git branch -M main &&

		test_commit base &&

		# Create two classes of unreachable objects, one which
		# is older than 5 minutes (stale), and another which is
		# newer (recent).
		for kind in stale recent
		do
			git checkout -b $kind main &&
			test_commit --no-tag $kind || return 1
		done &&

		git rev-list --objects --no-object-names main..stale >in &&
		stale="$(git pack-objects $objdir/pack/pack <in)" &&
		mtime="$(test-tool chmtime --get =-600 $objdir/pack/pack-$stale.pack)" &&

		# expect holds the set of objects we expect to find in
		# this repository after repacking
		git rev-list --objects --no-object-names recent >expect.raw &&
		sort expect.raw >expect &&

		# moved.want holds the set of objects we expect to find
		# in expired.git
		git rev-list --objects --no-object-names main..stale >out &&
		sort out >moved.want &&

		git checkout main &&
		git branch -D stale recent &&
		git reflog expire --all --expire=all &&
		git prune-packed &&

		git init --bare expired.git &&
		git repack -d \
			--cruft --cruft-expiration=5.minutes.ago \
			--expire-to="expired.git/objects/pack/pack" &&

		# Some of the remaining objects in this repository are
		# unreachable, so use `cat-file --batch-all-objects`
		# instead of `rev-list` to get their names
		git cat-file --batch-all-objects --batch-check="%(objectname)" \
			>remaining.objects &&
		sort remaining.objects >actual &&
		test_cmp expect actual &&

		(
			cd expired.git &&

			expired="$(ls objects/pack/pack-*.mtimes)" &&
			test-tool pack-mtimes $(basename $expired) >out &&
			cut -d" " -f1 out | sort >../moved.got &&

			# Ensure that there are as many objects with the
			# expected mtime as were moved to expired.git.
			#
			# In other words, ensure that the recorded
			# mtimes of any moved objects was written
			# correctly.
			grep " $mtime$" out >matching &&
			test_line_count = $(wc -l <../moved.want) matching
		) &&
		test_cmp moved.want moved.got
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/expire-to-5.minutes.ago/.git/
[main (root-commit) cd7dc8b] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
Switched to a new branch 'stale'
[stale e6ab413] stale
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 stale.t
Switched to a new branch 'recent'
[recent 54e72d6] recent
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 recent.t
Switched to branch 'main'
Deleted branch stale (was e6ab413).
Deleted branch recent (was 54e72d6).
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7700-repack/expire-to-5.minutes.ago/expired.git/
ok 38 - --expire-to stores pruned objects (5.minutes.ago)

# passed all 38 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7811-grep-open.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7811-grep-open/.git/
expecting success of 7811.1 'determine default pager': 
	test_might_fail git config --unset core.pager &&
	less=$(
		sane_unset PAGER GIT_PAGER &&
		git var GIT_PAGER
	) &&
	test -n "$less"

ok 1 - determine default pager

expecting success of 7811.2 'setup': 
	test_commit initial grep.h "
enum grep_pat_token {
	GREP_PATTERN,
	GREP_PATTERN_HEAD,
	GREP_PATTERN_BODY,
	GREP_AND,
	GREP_OPEN_PAREN,
	GREP_CLOSE_PAREN,
	GREP_NOT,
	GREP_OR,
};" &&

	test_commit add-user revision.c "
	}
	if (seen_dashdash)
		read_pathspec_from_stdin(revs, &sb, prune);
	strbuf_release(&sb);
}

static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what)
{
	append_grep_pattern(&revs->grep_filter, ptn, \"command line\", 0, what);
" &&

	mkdir subdir &&
	test_commit subdir subdir/grep.c "enum grep_pat_token" &&

	test_commit uninteresting unrelated "hello, world" &&

	echo GREP_PATTERN >untracked

[master (root-commit) 6a780d2] initial
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 grep.h
[master 7eeae3c] add-user
 Author: A U Thor <author@example.com>
 1 file changed, 11 insertions(+)
 create mode 100644 revision.c
[master 22c3f1e] subdir
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/grep.c
[master cd972f3] uninteresting
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unrelated
ok 2 - setup

expecting success of 7811.3 'git grep -O': 
	cat >$less <<-\EOF &&
	#!/bin/sh
	printf "%s\n" "$@" >pager-args
	EOF
	chmod +x $less &&
	cat >expect.less <<-\EOF &&
	+/*GREP_PATTERN
	grep.h
	EOF
	echo grep.h >expect.notless &&

	PATH=.:$PATH git grep -O GREP_PATTERN >out &&
	{
		test_cmp expect.less pager-args ||
		test_cmp expect.notless pager-args
	} &&
	test_must_be_empty out

--- expect.less	2022-12-28 08:05:32.933771241 +0000
+++ pager-args	2022-12-28 08:05:32.978772873 +0000
@@ -1,2 +1 @@
-+/*GREP_PATTERN
 grep.h
ok 3 - git grep -O

expecting success of 7811.4 'git grep -O --cached': 
	test_must_fail git grep --cached -O GREP_PATTERN >out 2>msg &&
	test_i18ngrep open-files-in-pager msg

fatal: --open-files-in-pager only works on the worktree
ok 4 - git grep -O --cached

expecting success of 7811.5 'git grep -O --no-index': 
	rm -f expect.less pager-args out &&
	cat >expect <<-\EOF &&
	grep.h
	untracked
	EOF

	(
		GIT_PAGER='printf "%s\n" >pager-args' &&
		export GIT_PAGER &&
		git grep --no-index -O GREP_PATTERN >out
	) &&
	test_cmp expect pager-args &&
	test_must_be_empty out

ok 5 - git grep -O --no-index

expecting success of 7811.6 'setup: fake "less"': 
	cat >less <<-\EOF &&
	#!/bin/sh
	printf "%s\n" "$@" >actual
	EOF
	chmod +x less

ok 6 - setup: fake "less"

expecting success of 7811.7 'git grep -O jumps to line in less': 
	cat >expect <<-\EOF &&
	+/*GREP_PATTERN
	grep.h
	EOF

	GIT_PAGER=./less git grep -O GREP_PATTERN >out &&
	test_cmp expect actual &&
	test_must_be_empty out &&

	git grep -O./less GREP_PATTERN >out2 &&
	test_cmp expect actual &&
	test_must_be_empty out2

ok 7 - git grep -O jumps to line in less

expecting success of 7811.8 'modified file': 
	rm -f actual &&
	cat >expect <<-\EOF &&
	+/*enum grep_pat_token
	grep.h
	revision.c
	subdir/grep.c
	unrelated
	EOF

	test_when_finished "git reset --hard" &&
	echo "enum grep_pat_token" >unrelated &&
	GIT_PAGER=./less git grep -F -O "enum grep_pat_token" >out &&
	test_cmp expect actual &&
	test_must_be_empty out

HEAD is now at cd972f3 uninteresting
ok 8 - modified file

expecting success of 7811.9 'copes with color settings': 
	rm -f actual &&
	echo grep.h >expect &&
	test_config color.grep always &&
	test_config color.grep.filename yellow &&
	test_config color.grep.separator green &&
	git grep -O'printf "%s\n" >actual' GREP_AND &&
	test_cmp expect actual

ok 9 - copes with color settings

expecting success of 7811.10 'run from subdir': 
	rm -f actual &&
	echo grep.c >expect &&

	(
		cd subdir &&
		export GIT_PAGER &&
		GIT_PAGER='printf "%s\n" >../args' &&
		git grep -O "enum grep_pat_token" >../out &&
		git grep -O"pwd >../dir; :" "enum grep_pat_token" >../out2
	) &&
	case $(cat dir) in
	*subdir)
		: good
		;;
	*)
		false
		;;
	esac &&
	test_cmp expect args &&
	test_must_be_empty out &&
	test_must_be_empty out2

ok 10 - run from subdir

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7812-grep-icase-non-ascii.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7812-grep-icase-non-ascii/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
ok 1 # skip setup (missing GETTEXT_LOCALE)

ok 2 # skip setup REGEX_LOCALE prerequisite (missing GETTEXT_LOCALE)

ok 3 # skip grep literal string, no -F (missing REGEX_LOCALE)

ok 4 # skip grep pcre utf-8 icase (missing GETTEXT_LOCALE of GETTEXT_LOCALE,PCRE)

ok 5 # skip grep pcre utf-8 string with "+" (missing GETTEXT_LOCALE of GETTEXT_LOCALE,PCRE)

ok 6 # skip grep literal string, with -F (missing REGEX_LOCALE)

ok 7 # skip grep string with regex, with -F (missing REGEX_LOCALE)

ok 8 # skip pickaxe -i on non-ascii (missing REGEX_LOCALE)

ok 9 # skip PCRE v2: setup invalid UTF-8 data (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 10 # skip PCRE v2: grep ASCII from invalid UTF-8 data (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 11 # skip PCRE v2: grep ASCII from invalid UTF-8 data (PCRE2 bug #2642) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 12 # skip PCRE v2: grep non-ASCII from invalid UTF-8 data (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 13 # skip PCRE v2: grep non-ASCII from invalid UTF-8 data (PCRE2 bug #2642) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 14 # skip PCRE v2: grep non-ASCII from invalid UTF-8 data with -i (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

checking prerequisite: PCRE2_MATCH_INVALID_UTF

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PCRE2_MATCH_INVALID_UTF" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PCRE2_MATCH_INVALID_UTF" &&
	test-tool pcre2-config has-PCRE2_MATCH_INVALID_UTF

)
prerequisite PCRE2_MATCH_INVALID_UTF ok
ok 15 # skip PCRE v2: grep non-ASCII from invalid UTF-8 data with -i (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2,PCRE2_MATCH_INVALID_UTF)

ok 16 # skip PCRE v2: grep non-ASCII from invalid UTF-8 data with -i (PCRE2 bug #2642) (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2,PCRE2_MATCH_INVALID_UTF)

ok 17 # skip PCRE v2: grep non-literal ASCII from UTF-8 (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

ok 18 # skip PCRE v2: grep avoid endless loop bug (missing GETTEXT_LOCALE of GETTEXT_LOCALE,LIBPCRE2)

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7813-grep-icase-iso.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7813-grep-icase-iso/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
ok 1 # skip setup (missing GETTEXT_ISO_LOCALE)

ok 2 # skip grep pcre string (missing GETTEXT_ISO_LOCALE of GETTEXT_ISO_LOCALE,PCRE)

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7810-grep.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7810-grep/.git/
expecting success of 7810.1 'setup': 
	cat >file <<-\EOF &&
	foo mmap bar
	foo_mmap bar
	foo_mmap bar mmap
	foo mmap bar_mmap
	foo_mmap bar mmap baz
	EOF
	cat >hello_world <<-\EOF &&
	Hello world
	HeLLo world
	Hello_world
	HeLLo_world
	EOF
	cat >ab <<-\EOF &&
	a+b*c
	a+bc
	abc
	EOF
	cat >d0 <<-\EOF &&
	d
	0
	EOF
	echo vvv >v &&
	echo ww w >w &&
	echo x x xx x >x &&
	echo y yy >y &&
	echo zzz > z &&
	mkdir t &&
	echo test >t/t &&
	echo vvv >t/v &&
	mkdir t/a &&
	echo vvv >t/a/v &&
	qz_to_tab_space >space <<-\EOF &&
	line without leading space1
	Zline with leading space1
	Zline with leading space2
	Zline with leading space3
	line without leading space2
	EOF
	cat >hello.ps1 <<-\EOF &&
	# No-op.
	function dummy() {}

	# Say hello.
	function hello() {
	  echo "Hello world."
	  echo "Hello again."
	} # hello

	# Still a no-op.
	function dummy() {}
	EOF
	if test_have_prereq FUNNYNAMES
	then
		echo unusual >"\"unusual\" pathname" &&
		echo unusual >"t/nested \"unusual\" pathname"
	fi &&
	if test_have_prereq MB_REGEX
	then
		echo "¿" >reverse-question-mark
	fi &&
	git add . &&
	test_tick &&
	git commit -m initial

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
[main (root-commit) 882350f] initial
 Author: A U Thor <author@example.com>
 17 files changed, 49 insertions(+)
 create mode 100644 "\"unusual\" pathname"
 create mode 100644 ab
 create mode 100644 d0
 create mode 100644 file
 create mode 100644 hello.c
 create mode 100644 hello.ps1
 create mode 100644 hello_world
 create mode 100644 space
 create mode 100644 t/a/v
 create mode 100644 "t/nested \"unusual\" pathname"
 create mode 100644 t/t
 create mode 100644 t/v
 create mode 100644 v
 create mode 100644 w
 create mode 100644 x
 create mode 100644 y
 create mode 100644 z
ok 1 - setup

expecting success of 7810.2 'grep should not segfault with a bad input': 
	test_must_fail git grep "("

fatal: unmatched parenthesis
ok 2 - grep should not segfault with a bad input

expecting success of 7810.3 'invalid expression: grep --and -e A': 
		test_must_fail git grep $params -- nonexisting
	
fatal: --and not preceded by pattern expression
ok 3 - invalid expression: grep --and -e A

expecting success of 7810.4 'grep -w HEAD': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:3:foo_mmap bar mmap
		${HC}file:4:foo mmap bar_mmap
		${HC}file:5:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=false grep -n -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 4 - grep -w HEAD

expecting success of 7810.5 'grep -w HEAD (with --column)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file:14:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:14:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 5 - grep -w HEAD (with --column)

expecting success of 7810.6 'grep -w HEAD (with --column, extended OR)': 
		cat >expected <<-EOF &&
		${HC}file:14:foo_mmap bar mmap
		${HC}file:19:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e mmap$ --or -e baz $H >actual &&
		test_cmp expected actual
	
ok 6 - grep -w HEAD (with --column, extended OR)

expecting success of 7810.7 'grep -w HEAD (with --column, --invert-match)': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:1:foo_mmap bar
		${HC}file:1:foo_mmap bar mmap
		${HC}file:1:foo mmap bar_mmap
		EOF
		git grep --column --invert-match -w -e baz $H -- file >actual &&
		test_cmp expected actual
	
ok 7 - grep -w HEAD (with --column, --invert-match)

expecting success of 7810.8 'grep HEAD (with --column, --invert-match, extended OR)': 
		cat >expected <<-EOF &&
		${HC}hello_world:6:HeLLo_world
		EOF
		git grep --column --invert-match -e ll --or --not -e _ $H -- hello_world \
			>actual &&
		test_cmp expected actual
	
ok 8 - grep HEAD (with --column, --invert-match, extended OR)

expecting success of 7810.9 'grep HEAD (with --column, --invert-match, extended AND)': 
		cat >expected <<-EOF &&
		${HC}hello_world:3:Hello world
		${HC}hello_world:3:Hello_world
		${HC}hello_world:6:HeLLo_world
		EOF
		git grep --column --invert-match --not -e _ --and --not -e ll $H -- hello_world \
			>actual &&
		test_cmp expected actual
	
ok 9 - grep HEAD (with --column, --invert-match, extended AND)

expecting success of 7810.10 'grep HEAD (with --column, double-negation)': 
		cat >expected <<-EOF &&
		${HC}file:1:foo_mmap bar mmap baz
		EOF
		git grep --column --not \( --not -e foo --or --not -e baz \) $H -- file \
			>actual &&
		test_cmp expected actual
	
ok 10 - grep HEAD (with --column, double-negation)

expecting success of 7810.11 'grep -w HEAD (with --column, -C)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file-foo_mmap bar
		${HC}file:14:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:14:foo_mmap bar mmap baz
		EOF
		git grep --column -w -C1 -e mmap $H >actual &&
		test_cmp expected actual
	
ok 11 - grep -w HEAD (with --column, -C)

expecting success of 7810.12 'grep -w HEAD (with --line-number, --column)': 
		cat >expected <<-EOF &&
		${HC}file:1:5:foo mmap bar
		${HC}file:3:14:foo_mmap bar mmap
		${HC}file:4:5:foo mmap bar_mmap
		${HC}file:5:14:foo_mmap bar mmap baz
		EOF
		git grep -n --column -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 12 - grep -w HEAD (with --line-number, --column)

expecting success of 7810.13 'grep -w HEAD (with non-extended patterns, --column)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file:10:foo_mmap bar
		${HC}file:10:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:10:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e bar -e mmap $H >actual &&
		test_cmp expected actual
	
ok 13 - grep -w HEAD (with non-extended patterns, --column)

expecting success of 7810.14 'grep -w HEAD': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:3:foo_mmap bar mmap
		${HC}file:4:foo mmap bar_mmap
		${HC}file:5:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=true grep -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 14 - grep -w HEAD

expecting success of 7810.15 'grep -w HEAD': 
		cat >expected <<-EOF &&
		${HC}file:foo mmap bar
		${HC}file:foo_mmap bar mmap
		${HC}file:foo mmap bar_mmap
		${HC}file:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=true grep --no-line-number -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 15 - grep -w HEAD

expecting success of 7810.16 'grep -w HEAD (w)': 
		test_must_fail git grep -n -w -e "^w" $H >actual &&
		test_must_be_empty actual
	
ok 16 - grep -w HEAD (w)

expecting success of 7810.17 'grep -w HEAD (x)': 
		cat >expected <<-EOF &&
		${HC}x:1:x x xx x
		EOF
		git grep -n -w -e "x xx* x" $H >actual &&
		test_cmp expected actual
	
ok 17 - grep -w HEAD (x)

expecting success of 7810.18 'grep -w HEAD (y-1)': 
		cat >expected <<-EOF &&
		${HC}y:1:y yy
		EOF
		git grep -n -w -e "^y" $H >actual &&
		test_cmp expected actual
	
ok 18 - grep -w HEAD (y-1)

expecting success of 7810.19 'grep -w HEAD (y-2)': 
		if git grep -n -w -e "^y y" $H >actual
		then
			echo should not have matched
			cat actual
			false
		else
			test_must_be_empty actual
		fi
	
ok 19 - grep -w HEAD (y-2)

expecting success of 7810.20 'grep -w HEAD (z)': 
		if git grep -n -w -e "^z" $H >actual
		then
			echo should not have matched
			cat actual
			false
		else
			test_must_be_empty actual
		fi
	
ok 20 - grep -w HEAD (z)

expecting success of 7810.21 'grep HEAD (with --column, --only-matching)': 
		cat >expected <<-EOF &&
		${HC}file:1:5:mmap
		${HC}file:2:5:mmap
		${HC}file:3:5:mmap
		${HC}file:3:13:mmap
		${HC}file:4:5:mmap
		${HC}file:4:13:mmap
		${HC}file:5:5:mmap
		${HC}file:5:13:mmap
		EOF
		git grep --column -n -o -e mmap $H >actual &&
		test_cmp expected actual
	
ok 21 - grep HEAD (with --column, --only-matching)

expecting success of 7810.22 'grep HEAD (t-1)': 
		echo "${HC}t/t:1:test" >expected &&
		git grep -n -e test $H >actual &&
		test_cmp expected actual
	
ok 22 - grep HEAD (t-1)

expecting success of 7810.23 'grep HEAD (t-2)': 
		echo "${HC}t:1:test" >expected &&
		(
			cd t &&
			git grep -n -e test $H
		) >actual &&
		test_cmp expected actual
	
ok 23 - grep HEAD (t-2)

expecting success of 7810.24 'grep HEAD (t-3)': 
		echo "${HC}t/t:1:test" >expected &&
		(
			cd t &&
			git grep --full-name -n -e test $H
		) >actual &&
		test_cmp expected actual
	
ok 24 - grep HEAD (t-3)

expecting success of 7810.25 'grep -c HEAD (no /dev/null)': 
		! git grep -c test $H | grep /dev/null
	
ok 25 - grep -c HEAD (no /dev/null)

expecting success of 7810.26 'grep --max-depth -1 HEAD': 
		cat >expected <<-EOF &&
		${HC}t/a/v:1:vvv
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth -1 -n -e vvv $H >actual &&
		test_cmp expected actual &&
		git grep --recursive -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 26 - grep --max-depth -1 HEAD

expecting success of 7810.27 'grep --max-depth 0 HEAD': 
		cat >expected <<-EOF &&
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 27 - grep --max-depth 0 HEAD

expecting success of 7810.28 'grep --max-depth 0 -- '*' HEAD': 
		cat >expected <<-EOF &&
		${HC}t/a/v:1:vvv
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- "*" >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- "*" >actual &&
		test_cmp expected actual
	
ok 28 - grep --max-depth 0 -- '*' HEAD

expecting success of 7810.29 'grep --max-depth 1 HEAD': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 1 -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 29 - grep --max-depth 1 HEAD

expecting success of 7810.30 'grep --max-depth 0 -- t HEAD': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- t >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- t >actual &&
		test_cmp expected actual
	
ok 30 - grep --max-depth 0 -- t HEAD

expecting success of 7810.31 'grep --max-depth 0 -- . t HEAD': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- . t >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- . t >actual &&
		test_cmp expected actual
	
ok 31 - grep --max-depth 0 -- . t HEAD

expecting success of 7810.32 'grep --max-depth 0 -- t . HEAD': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- t . >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- t . >actual &&
		test_cmp expected actual
	
ok 32 - grep --max-depth 0 -- t . HEAD

expecting success of 7810.33 'grep HEAD with '-c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 33 - grep HEAD with '-c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.34 'grep HEAD with '-c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 34 - grep HEAD with '-c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.35 'grep HEAD with '-c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 35 - grep HEAD with '-c grep.patternType=basic' interpreted as BRE

expecting success of 7810.36 'grep HEAD with '-c grep.patternType=extended' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 36 - grep HEAD with '-c grep.patternType=extended' interpreted as ERE

expecting success of 7810.37 'grep HEAD with '-c grep.patternType=fixed' interpreted as FIX': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 37 - grep HEAD with '-c grep.patternType=fixed' interpreted as FIX

expecting success of 7810.38 'grep HEAD with grep.patterntype=perl': 
		echo "${HC}ab:a+b*c" >expected &&
		git -c grep.patterntype=perl grep "a\x{2b}b\x{2a}c" $H ab >actual &&
		test_cmp expected actual
	
ok 38 - grep HEAD with grep.patterntype=perl

checking prerequisite: FAIL_PREREQS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FAIL_PREREQS" &&
		test_bool_env GIT_TEST_FAIL_PREREQS false
	
)
prerequisite FAIL_PREREQS not satisfied
ok 39 # skip grep HEAD with grep.patterntype=perl errors without PCRE (missing !PCRE of !FAIL_PREREQS,!PCRE)

expecting success of 7810.40 'grep HEAD with '-c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 40 - grep HEAD with '-c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.41 'grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 41 - grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.42 'grep HEAD with '-c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 42 - grep HEAD with '-c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE

expecting success of 7810.43 'grep HEAD with '-c grep.patternType=basic -c grep.extendedRegexp=true' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 43 - grep HEAD with '-c grep.patternType=basic -c grep.extendedRegexp=true' interpreted as BRE

expecting success of 7810.44 'grep HEAD with '-c grep.extendedRegexp=false -c grep.patternType=extended' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 44 - grep HEAD with '-c grep.extendedRegexp=false -c grep.patternType=extended' interpreted as ERE

expecting success of 7810.45 'grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 45 - grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE

expecting success of 7810.46 'grep HEAD with '-c grep.extendedRegexp=true -c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 46 - grep HEAD with '-c grep.extendedRegexp=true -c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.47 'grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=basic -c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 47 - grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=basic -c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.48 'grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 48 - grep HEAD with '-c grep.extendedRegexp=true -c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE

expecting success of 7810.49 'grep HEAD with '-c grep.patternType=fixed -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 49 - grep HEAD with '-c grep.patternType=fixed -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.50 'grep HEAD with '-c grep.extendedRegexp=false -c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 50 - grep HEAD with '-c grep.extendedRegexp=false -c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.51 'grep HEAD with '-c grep.extendedRegexp=false -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 51 - grep HEAD with '-c grep.extendedRegexp=false -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.52 'grep HEAD with '-c grep.patternType=default -c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 52 - grep HEAD with '-c grep.patternType=default -c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE

expecting success of 7810.53 'grep HEAD with '-c grep.patternType=extended -c grep.patternType=default' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 53 - grep HEAD with '-c grep.patternType=extended -c grep.patternType=default' interpreted as BRE

expecting success of 7810.54 'grep HEAD with '-c grep.patternType=extended -c grep.patternType=default -c grep.patternType=fixed' interpreted as FIX': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 54 - grep HEAD with '-c grep.patternType=extended -c grep.patternType=default -c grep.patternType=fixed' interpreted as FIX

expecting success of 7810.55 'grep --count HEAD': 
		echo ${HC}ab:3 >expected &&
		git grep --count -e b $H -- ab >actual &&
		test_cmp expected actual
	
ok 55 - grep --count HEAD

expecting success of 7810.56 'grep --count -h HEAD': 
		echo 3 >expected &&
		git grep --count -h -e b $H -- ab >actual &&
		test_cmp expected actual
	
ok 56 - grep --count -h HEAD

expecting success of 7810.57 'grep HEAD should quote unusual pathnames': 
		cat >expected <<-EOF &&
		${HC}"\"unusual\" pathname":unusual
		${HC}"t/nested \"unusual\" pathname":unusual
		EOF
		git grep unusual $H >actual &&
		test_cmp expected actual
	
ok 57 - grep HEAD should quote unusual pathnames

expecting success of 7810.58 'grep HEAD in subdir should quote unusual relative pathnames': 
		cat >expected <<-EOF &&
		${HC}"nested \"unusual\" pathname":unusual
		EOF
		(
			cd t &&
			git grep unusual $H
		) >actual &&
		test_cmp expected actual
	
ok 58 - grep HEAD in subdir should quote unusual relative pathnames

expecting success of 7810.59 'grep -z HEAD with unusual pathnames': 
		cat >expected <<-EOF &&
		${HC}"unusual" pathname:unusual
		${HC}t/nested "unusual" pathname:unusual
		EOF
		git grep -z unusual $H >actual &&
		tr "\0" ":" <actual >actual-replace-null &&
		test_cmp expected actual-replace-null
	
ok 59 - grep -z HEAD with unusual pathnames

expecting success of 7810.60 'grep -z HEAD in subdir with unusual relative pathnames': 
		cat >expected <<-EOF &&
		${HC}nested "unusual" pathname:unusual
		EOF
		(
			cd t &&
			git grep -z unusual $H
		) >actual &&
		tr "\0" ":" <actual >actual-replace-null &&
		test_cmp expected actual-replace-null
	
ok 60 - grep -z HEAD in subdir with unusual relative pathnames

expecting success of 7810.61 'grep -w in working tree': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:3:foo_mmap bar mmap
		${HC}file:4:foo mmap bar_mmap
		${HC}file:5:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=false grep -n -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 61 - grep -w in working tree

expecting success of 7810.62 'grep -w in working tree (with --column)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file:14:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:14:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 62 - grep -w in working tree (with --column)

expecting success of 7810.63 'grep -w in working tree (with --column, extended OR)': 
		cat >expected <<-EOF &&
		${HC}file:14:foo_mmap bar mmap
		${HC}file:19:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e mmap$ --or -e baz $H >actual &&
		test_cmp expected actual
	
ok 63 - grep -w in working tree (with --column, extended OR)

expecting success of 7810.64 'grep -w in working tree (with --column, --invert-match)': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:1:foo_mmap bar
		${HC}file:1:foo_mmap bar mmap
		${HC}file:1:foo mmap bar_mmap
		EOF
		git grep --column --invert-match -w -e baz $H -- file >actual &&
		test_cmp expected actual
	
ok 64 - grep -w in working tree (with --column, --invert-match)

expecting success of 7810.65 'grep in working tree (with --column, --invert-match, extended OR)': 
		cat >expected <<-EOF &&
		${HC}hello_world:6:HeLLo_world
		EOF
		git grep --column --invert-match -e ll --or --not -e _ $H -- hello_world \
			>actual &&
		test_cmp expected actual
	
ok 65 - grep in working tree (with --column, --invert-match, extended OR)

expecting success of 7810.66 'grep in working tree (with --column, --invert-match, extended AND)': 
		cat >expected <<-EOF &&
		${HC}hello_world:3:Hello world
		${HC}hello_world:3:Hello_world
		${HC}hello_world:6:HeLLo_world
		EOF
		git grep --column --invert-match --not -e _ --and --not -e ll $H -- hello_world \
			>actual &&
		test_cmp expected actual
	
ok 66 - grep in working tree (with --column, --invert-match, extended AND)

expecting success of 7810.67 'grep in working tree (with --column, double-negation)': 
		cat >expected <<-EOF &&
		${HC}file:1:foo_mmap bar mmap baz
		EOF
		git grep --column --not \( --not -e foo --or --not -e baz \) $H -- file \
			>actual &&
		test_cmp expected actual
	
ok 67 - grep in working tree (with --column, double-negation)

expecting success of 7810.68 'grep -w in working tree (with --column, -C)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file-foo_mmap bar
		${HC}file:14:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:14:foo_mmap bar mmap baz
		EOF
		git grep --column -w -C1 -e mmap $H >actual &&
		test_cmp expected actual
	
ok 68 - grep -w in working tree (with --column, -C)

expecting success of 7810.69 'grep -w in working tree (with --line-number, --column)': 
		cat >expected <<-EOF &&
		${HC}file:1:5:foo mmap bar
		${HC}file:3:14:foo_mmap bar mmap
		${HC}file:4:5:foo mmap bar_mmap
		${HC}file:5:14:foo_mmap bar mmap baz
		EOF
		git grep -n --column -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 69 - grep -w in working tree (with --line-number, --column)

expecting success of 7810.70 'grep -w in working tree (with non-extended patterns, --column)': 
		cat >expected <<-EOF &&
		${HC}file:5:foo mmap bar
		${HC}file:10:foo_mmap bar
		${HC}file:10:foo_mmap bar mmap
		${HC}file:5:foo mmap bar_mmap
		${HC}file:10:foo_mmap bar mmap baz
		EOF
		git grep --column -w -e bar -e mmap $H >actual &&
		test_cmp expected actual
	
ok 70 - grep -w in working tree (with non-extended patterns, --column)

expecting success of 7810.71 'grep -w in working tree': 
		cat >expected <<-EOF &&
		${HC}file:1:foo mmap bar
		${HC}file:3:foo_mmap bar mmap
		${HC}file:4:foo mmap bar_mmap
		${HC}file:5:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=true grep -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 71 - grep -w in working tree

expecting success of 7810.72 'grep -w in working tree': 
		cat >expected <<-EOF &&
		${HC}file:foo mmap bar
		${HC}file:foo_mmap bar mmap
		${HC}file:foo mmap bar_mmap
		${HC}file:foo_mmap bar mmap baz
		EOF
		git -c grep.linenumber=true grep --no-line-number -w -e mmap $H >actual &&
		test_cmp expected actual
	
ok 72 - grep -w in working tree

expecting success of 7810.73 'grep -w in working tree (w)': 
		test_must_fail git grep -n -w -e "^w" $H >actual &&
		test_must_be_empty actual
	
ok 73 - grep -w in working tree (w)

expecting success of 7810.74 'grep -w in working tree (x)': 
		cat >expected <<-EOF &&
		${HC}x:1:x x xx x
		EOF
		git grep -n -w -e "x xx* x" $H >actual &&
		test_cmp expected actual
	
ok 74 - grep -w in working tree (x)

expecting success of 7810.75 'grep -w in working tree (y-1)': 
		cat >expected <<-EOF &&
		${HC}y:1:y yy
		EOF
		git grep -n -w -e "^y" $H >actual &&
		test_cmp expected actual
	
ok 75 - grep -w in working tree (y-1)

expecting success of 7810.76 'grep -w in working tree (y-2)': 
		if git grep -n -w -e "^y y" $H >actual
		then
			echo should not have matched
			cat actual
			false
		else
			test_must_be_empty actual
		fi
	
ok 76 - grep -w in working tree (y-2)

expecting success of 7810.77 'grep -w in working tree (z)': 
		if git grep -n -w -e "^z" $H >actual
		then
			echo should not have matched
			cat actual
			false
		else
			test_must_be_empty actual
		fi
	
ok 77 - grep -w in working tree (z)

expecting success of 7810.78 'grep in working tree (with --column, --only-matching)': 
		cat >expected <<-EOF &&
		${HC}file:1:5:mmap
		${HC}file:2:5:mmap
		${HC}file:3:5:mmap
		${HC}file:3:13:mmap
		${HC}file:4:5:mmap
		${HC}file:4:13:mmap
		${HC}file:5:5:mmap
		${HC}file:5:13:mmap
		EOF
		git grep --column -n -o -e mmap $H >actual &&
		test_cmp expected actual
	
ok 78 - grep in working tree (with --column, --only-matching)

expecting success of 7810.79 'grep in working tree (t-1)': 
		echo "${HC}t/t:1:test" >expected &&
		git grep -n -e test $H >actual &&
		test_cmp expected actual
	
ok 79 - grep in working tree (t-1)

expecting success of 7810.80 'grep in working tree (t-2)': 
		echo "${HC}t:1:test" >expected &&
		(
			cd t &&
			git grep -n -e test $H
		) >actual &&
		test_cmp expected actual
	
ok 80 - grep in working tree (t-2)

expecting success of 7810.81 'grep in working tree (t-3)': 
		echo "${HC}t/t:1:test" >expected &&
		(
			cd t &&
			git grep --full-name -n -e test $H
		) >actual &&
		test_cmp expected actual
	
ok 81 - grep in working tree (t-3)

expecting success of 7810.82 'grep -c in working tree (no /dev/null)': 
		! git grep -c test $H | grep /dev/null
	
ok 82 - grep -c in working tree (no /dev/null)

expecting success of 7810.83 'grep --max-depth -1 in working tree': 
		cat >expected <<-EOF &&
		${HC}t/a/v:1:vvv
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth -1 -n -e vvv $H >actual &&
		test_cmp expected actual &&
		git grep --recursive -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 83 - grep --max-depth -1 in working tree

expecting success of 7810.84 'grep --max-depth 0 in working tree': 
		cat >expected <<-EOF &&
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 84 - grep --max-depth 0 in working tree

expecting success of 7810.85 'grep --max-depth 0 -- '*' in working tree': 
		cat >expected <<-EOF &&
		${HC}t/a/v:1:vvv
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- "*" >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- "*" >actual &&
		test_cmp expected actual
	
ok 85 - grep --max-depth 0 -- '*' in working tree

expecting success of 7810.86 'grep --max-depth 1 in working tree': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 1 -n -e vvv $H >actual &&
		test_cmp expected actual
	
ok 86 - grep --max-depth 1 in working tree

expecting success of 7810.87 'grep --max-depth 0 -- t in working tree': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- t >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- t >actual &&
		test_cmp expected actual
	
ok 87 - grep --max-depth 0 -- t in working tree

expecting success of 7810.88 'grep --max-depth 0 -- . t in working tree': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- . t >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- . t >actual &&
		test_cmp expected actual
	
ok 88 - grep --max-depth 0 -- . t in working tree

expecting success of 7810.89 'grep --max-depth 0 -- t . in working tree': 
		cat >expected <<-EOF &&
		${HC}t/v:1:vvv
		${HC}v:1:vvv
		EOF
		git grep --max-depth 0 -n -e vvv $H -- t . >actual &&
		test_cmp expected actual &&
		git grep --no-recursive -n -e vvv $H -- t . >actual &&
		test_cmp expected actual
	
ok 89 - grep --max-depth 0 -- t . in working tree

expecting success of 7810.90 'grep in working tree with '-c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 90 - grep in working tree with '-c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.91 'grep in working tree with '-c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 91 - grep in working tree with '-c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.92 'grep in working tree with '-c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 92 - grep in working tree with '-c grep.patternType=basic' interpreted as BRE

expecting success of 7810.93 'grep in working tree with '-c grep.patternType=extended' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 93 - grep in working tree with '-c grep.patternType=extended' interpreted as ERE

expecting success of 7810.94 'grep in working tree with '-c grep.patternType=fixed' interpreted as FIX': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 94 - grep in working tree with '-c grep.patternType=fixed' interpreted as FIX

expecting success of 7810.95 'grep in working tree with grep.patterntype=perl': 
		echo "${HC}ab:a+b*c" >expected &&
		git -c grep.patterntype=perl grep "a\x{2b}b\x{2a}c" $H ab >actual &&
		test_cmp expected actual
	
ok 95 - grep in working tree with grep.patterntype=perl

ok 96 # skip grep in working tree with grep.patterntype=perl errors without PCRE (missing !PCRE of !FAIL_PREREQS,!PCRE)

expecting success of 7810.97 'grep in working tree with '-c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 97 - grep in working tree with '-c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.98 'grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 98 - grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.99 'grep in working tree with '-c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 99 - grep in working tree with '-c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE

expecting success of 7810.100 'grep in working tree with '-c grep.patternType=basic -c grep.extendedRegexp=true' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 100 - grep in working tree with '-c grep.patternType=basic -c grep.extendedRegexp=true' interpreted as BRE

expecting success of 7810.101 'grep in working tree with '-c grep.extendedRegexp=false -c grep.patternType=extended' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 101 - grep in working tree with '-c grep.extendedRegexp=false -c grep.patternType=extended' interpreted as ERE

expecting success of 7810.102 'grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 102 - grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE

expecting success of 7810.103 'grep in working tree with '-c grep.extendedRegexp=true -c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 103 - grep in working tree with '-c grep.extendedRegexp=true -c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.104 'grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=basic -c grep.extendedRegexp=false' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 104 - grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=basic -c grep.extendedRegexp=false' interpreted as BRE

expecting success of 7810.105 'grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 105 - grep in working tree with '-c grep.extendedRegexp=true -c grep.patternType=extended -c grep.extendedRegexp=false' interpreted as ERE

expecting success of 7810.106 'grep in working tree with '-c grep.patternType=fixed -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 106 - grep in working tree with '-c grep.patternType=fixed -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.107 'grep in working tree with '-c grep.extendedRegexp=false -c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 107 - grep in working tree with '-c grep.extendedRegexp=false -c grep.patternType=default -c grep.extendedRegexp=true' interpreted as ERE

expecting success of 7810.108 'grep in working tree with '-c grep.extendedRegexp=false -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 108 - grep in working tree with '-c grep.extendedRegexp=false -c grep.extendedRegexp=true -c grep.patternType=default' interpreted as ERE

expecting success of 7810.109 'grep in working tree with '-c grep.patternType=default -c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 109 - grep in working tree with '-c grep.patternType=default -c grep.extendedRegexp=true -c grep.patternType=basic' interpreted as BRE

expecting success of 7810.110 'grep in working tree with '-c grep.patternType=extended -c grep.patternType=default' interpreted as BRE': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 110 - grep in working tree with '-c grep.patternType=extended -c grep.patternType=default' interpreted as BRE

expecting success of 7810.111 'grep in working tree with '-c grep.patternType=extended -c grep.patternType=default -c grep.patternType=fixed' interpreted as FIX': 
		echo $expected_str >expected &&
		git $config_str grep "a+b*c" $H ab >actual &&
		test_cmp expected actual
	
ok 111 - grep in working tree with '-c grep.patternType=extended -c grep.patternType=default -c grep.patternType=fixed' interpreted as FIX

expecting success of 7810.112 'grep --count in working tree': 
		echo ${HC}ab:3 >expected &&
		git grep --count -e b $H -- ab >actual &&
		test_cmp expected actual
	
ok 112 - grep --count in working tree

expecting success of 7810.113 'grep --count -h in working tree': 
		echo 3 >expected &&
		git grep --count -h -e b $H -- ab >actual &&
		test_cmp expected actual
	
ok 113 - grep --count -h in working tree

expecting success of 7810.114 'grep in working tree should quote unusual pathnames': 
		cat >expected <<-EOF &&
		${HC}"\"unusual\" pathname":unusual
		${HC}"t/nested \"unusual\" pathname":unusual
		EOF
		git grep unusual $H >actual &&
		test_cmp expected actual
	
ok 114 - grep in working tree should quote unusual pathnames

expecting success of 7810.115 'grep in working tree in subdir should quote unusual relative pathnames': 
		cat >expected <<-EOF &&
		${HC}"nested \"unusual\" pathname":unusual
		EOF
		(
			cd t &&
			git grep unusual $H
		) >actual &&
		test_cmp expected actual
	
ok 115 - grep in working tree in subdir should quote unusual relative pathnames

expecting success of 7810.116 'grep -z in working tree with unusual pathnames': 
		cat >expected <<-EOF &&
		${HC}"unusual" pathname:unusual
		${HC}t/nested "unusual" pathname:unusual
		EOF
		git grep -z unusual $H >actual &&
		tr "\0" ":" <actual >actual-replace-null &&
		test_cmp expected actual-replace-null
	
ok 116 - grep -z in working tree with unusual pathnames

expecting success of 7810.117 'grep -z in working tree in subdir with unusual relative pathnames': 
		cat >expected <<-EOF &&
		${HC}nested "unusual" pathname:unusual
		EOF
		(
			cd t &&
			git grep -z unusual $H
		) >actual &&
		tr "\0" ":" <actual >actual-replace-null &&
		test_cmp expected actual-replace-null
	
ok 117 - grep -z in working tree in subdir with unusual relative pathnames

ok 118 # skip grep exactly one char in single-char multibyte file (missing MB_REGEX)

ok 119 # skip grep two chars in single-char multibyte file (missing MB_REGEX)

expecting success of 7810.120 'grep -l -C': 
	git grep -l -C1 foo >actual &&
	test_cmp expected actual

ok 120 - grep -l -C

expecting success of 7810.121 'grep -c -C': 
	git grep -c -C1 foo >actual &&
	test_cmp expected actual

ok 121 - grep -c -C

expecting success of 7810.122 'grep -L -C': 
	git ls-files >expected &&
	git grep -L -C1 nonexistent_string >actual &&
	test_cmp expected actual

ok 122 - grep -L -C

expecting success of 7810.123 'grep --files-without-match --quiet': 
	git grep --files-without-match --quiet nonexistent_string >actual &&
	test_must_be_empty actual

ok 123 - grep --files-without-match --quiet

expecting success of 7810.124 'grep --max-count 0 (must exit with non-zero)': 
	test_must_fail git grep --max-count 0 foo >actual &&
	test_must_be_empty actual

ok 124 - grep --max-count 0 (must exit with non-zero)

expecting success of 7810.125 'grep --max-count 3': 
	cat >expected <<-EOF &&
	file:foo mmap bar
	file:foo_mmap bar
	file:foo_mmap bar mmap
	EOF
	git grep --max-count 3 foo >actual &&
	test_cmp expected actual

ok 125 - grep --max-count 3

expecting success of 7810.126 'grep --max-count -1 (no limit)': 
	cat >expected <<-EOF &&
	file:foo mmap bar
	file:foo_mmap bar
	file:foo_mmap bar mmap
	file:foo mmap bar_mmap
	file:foo_mmap bar mmap baz
	EOF
	git grep --max-count -1 foo >actual &&
	test_cmp expected actual

ok 126 - grep --max-count -1 (no limit)

expecting success of 7810.127 'grep --max-count 1 --context 2': 
	cat >expected <<-EOF &&
	file-foo mmap bar
	file:foo_mmap bar
	file-foo_mmap bar mmap
	EOF
	git grep --max-count 1 --context 1 foo_mmap >actual &&
	test_cmp expected actual

ok 127 - grep --max-count 1 --context 2

expecting success of 7810.128 'grep --max-count 1 --show-function': 
	cat >expected <<-EOF &&
	hello.ps1=function hello() {
	hello.ps1:  echo "Hello world."
	EOF
	git grep --max-count 1 --show-function Hello hello.ps1 >actual &&
	test_cmp expected actual

ok 128 - grep --max-count 1 --show-function

expecting success of 7810.129 'grep --max-count 2 --show-function': 
	cat >expected <<-EOF &&
	hello.ps1=function hello() {
	hello.ps1:  echo "Hello world."
	hello.ps1:  echo "Hello again."
	EOF
	git grep --max-count 2 --show-function Hello hello.ps1 >actual &&
	test_cmp expected actual

ok 129 - grep --max-count 2 --show-function

expecting success of 7810.130 'grep --max-count 1 --count': 
	cat >expected <<-EOF &&
	hello.ps1:1
	EOF
	git grep --max-count 1 --count Hello hello.ps1 >actual &&
	test_cmp expected actual

ok 130 - grep --max-count 1 --count

expecting success of 7810.131 'grep --max-count 1 (multiple files)': 
	cat >expected <<-EOF &&
	hello.c:#include <stdio.h>
	hello.ps1:# No-op.
	EOF
	git grep --max-count 1 -e o -- hello.\* >actual &&
	test_cmp expected actual

ok 131 - grep --max-count 1 (multiple files)

expecting success of 7810.132 'grep --max-count 1 --context 1 (multiple files)': 
	cat >expected <<-EOF &&
	hello.c-#include <assert.h>
	hello.c:#include <stdio.h>
	hello.c-
	--
	hello.ps1:# No-op.
	hello.ps1-function dummy() {}
	EOF
	git grep --max-count 1 --context 1 -e o -- hello.\* >actual &&
	test_cmp expected actual

ok 132 - grep --max-count 1 --context 1 (multiple files)

expecting success of 7810.133 'grep -e A --and -e B': 
	git grep -e "foo mmap" --and -e bar_mmap >actual &&
	test_cmp expected actual

ok 133 - grep -e A --and -e B

expecting success of 7810.134 'grep ( -e A --or -e B ) --and -e B': 
	git grep \( -e foo_ --or -e baz \) \
		--and -e " mmap" >actual &&
	test_cmp expected actual

ok 134 - grep ( -e A --or -e B ) --and -e B

expecting success of 7810.135 'grep -e A --and --not -e B': 
	git grep -e "foo mmap" --and --not -e bar_mmap >actual &&
	test_cmp expected actual

ok 135 - grep -e A --and --not -e B

expecting success of 7810.136 'grep should ignore GREP_OPTIONS': 
	GREP_OPTIONS=-v git grep " mmap bar\$" >actual &&
	test_cmp expected actual

ok 136 - grep should ignore GREP_OPTIONS

expecting success of 7810.137 'grep -f, non-existent file': 
	test_must_fail git grep -f patterns

fatal: cannot open 'patterns': No such file or directory
ok 137 - grep -f, non-existent file

expecting success of 7810.138 'grep -f, one pattern': 
	git grep -f pattern >actual &&
	test_cmp expected actual

ok 138 - grep -f, one pattern

expecting success of 7810.139 'grep -f, multiple patterns': 
	git grep -f patterns >actual &&
	test_cmp expected actual

ok 139 - grep -f, multiple patterns

expecting success of 7810.140 'grep, multiple patterns': 
	git grep "$(cat patterns)" >actual &&
	test_cmp expected actual

ok 140 - grep, multiple patterns

expecting success of 7810.141 'grep -f, ignore empty lines': 
	git grep -f patterns >actual &&
	test_cmp expected actual

ok 141 - grep -f, ignore empty lines

expecting success of 7810.142 'grep -f, ignore empty lines, read patterns from stdin': 
	git grep -f - <patterns >actual &&
	test_cmp expected actual

ok 142 - grep -f, ignore empty lines, read patterns from stdin

expecting success of 7810.143 'grep -q, silently report matches': 
	git grep -q mmap >actual &&
	test_must_be_empty actual &&
	test_must_fail git grep -q qfwfq >actual &&
	test_must_be_empty actual

ok 143 - grep -q, silently report matches

expecting success of 7810.144 'grep -C1 hunk mark between files': 
	git grep -C1 "^[yz]" >actual &&
	test_cmp expected actual

ok 144 - grep -C1 hunk mark between files

expecting success of 7810.145 'log grep setup': 
	test_commit --append --author "With * Asterisk <xyzzy@frotz.com>" second file a &&
	test_commit --append third file a &&
	test_commit --append --author "Night Fall <nitfol@frobozz.com>" fourth file a

[main e09e3e9] second
 Author: With * Asterisk <xyzzy@frotz.com>
 1 file changed, 1 insertion(+)
[main 981dc05] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 2d03b92] fourth
 Author: Night Fall <nitfol@frobozz.com>
 1 file changed, 1 insertion(+)
ok 145 - log grep setup

expecting success of 7810.146 'log grep (1)': 
	git log --author=author --pretty=tformat:%s >actual &&
	{
		echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 146 - log grep (1)

expecting success of 7810.147 'log grep (2)': 
	git log --author=" * " -F --pretty=tformat:%s >actual &&
	{
		echo second
	} >expect &&
	test_cmp expect actual

ok 147 - log grep (2)

expecting success of 7810.148 'log grep (3)': 
	git log --author="^A U" --pretty=tformat:%s >actual &&
	{
		echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 148 - log grep (3)

expecting success of 7810.149 'log grep (4)': 
	git log --author="frotz\.com>$" --pretty=tformat:%s >actual &&
	{
		echo second
	} >expect &&
	test_cmp expect actual

ok 149 - log grep (4)

expecting success of 7810.150 'log grep (5)': 
	git log --author=Thor -F --pretty=tformat:%s >actual &&
	{
		echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 150 - log grep (5)

expecting success of 7810.151 'log grep (6)': 
	git log --author=-0700  --pretty=tformat:%s >actual &&
	test_must_be_empty actual

ok 151 - log grep (6)

expecting success of 7810.152 'log grep (7)': 
	git log -g --grep-reflog="commit: third" --pretty=tformat:%s >actual &&
	echo third >expect &&
	test_cmp expect actual

ok 152 - log grep (7)

expecting success of 7810.153 'log grep (8)': 
	git log -g --grep-reflog="commit: third" --grep-reflog="commit: second" --pretty=tformat:%s >actual &&
	{
		echo third && echo second
	} >expect &&
	test_cmp expect actual

ok 153 - log grep (8)

expecting success of 7810.154 'log grep (9)': 
	git log -g --grep-reflog="commit: third" --author="Thor" --pretty=tformat:%s >actual &&
	echo third >expect &&
	test_cmp expect actual

ok 154 - log grep (9)

expecting success of 7810.155 'log grep (9)': 
	git log -g --grep-reflog="commit: third" --author="non-existent" --pretty=tformat:%s >actual &&
	test_must_be_empty actual

ok 155 - log grep (9)

expecting success of 7810.156 'log --grep-reflog can only be used under -g': 
	test_must_fail git log --grep-reflog="commit: third"

fatal: the option '--grep-reflog' requires '--walk-reflogs'
ok 156 - log --grep-reflog can only be used under -g

expecting success of 7810.157 'log with multiple --grep uses union': 
	git log --grep=i --grep=r --format=%s >actual &&
	{
		echo fourth && echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 157 - log with multiple --grep uses union

expecting success of 7810.158 'log --all-match with multiple --grep uses intersection': 
	git log --all-match --grep=i --grep=r --format=%s >actual &&
	{
		echo third
	} >expect &&
	test_cmp expect actual

ok 158 - log --all-match with multiple --grep uses intersection

expecting success of 7810.159 'log with multiple --author uses union': 
	git log --author="Thor" --author="Aster" --format=%s >actual &&
	{
	    echo third && echo second && echo initial
	} >expect &&
	test_cmp expect actual

ok 159 - log with multiple --author uses union

expecting success of 7810.160 'log --all-match with multiple --author still uses union': 
	git log --all-match --author="Thor" --author="Aster" --format=%s >actual &&
	{
	    echo third && echo second && echo initial
	} >expect &&
	test_cmp expect actual

ok 160 - log --all-match with multiple --author still uses union

expecting success of 7810.161 'log --grep --author uses intersection': 
	# grep matches only third and fourth
	# author matches only initial and third
	git log --author="A U Thor" --grep=r --format=%s >actual &&
	{
		echo third
	} >expect &&
	test_cmp expect actual

ok 161 - log --grep --author uses intersection

expecting success of 7810.162 'log --grep --grep --author takes union of greps and intersects with author': 
	# grep matches initial and second but not third
	# author matches only initial and third
	git log --author="A U Thor" --grep=s --grep=l --format=%s >actual &&
	{
		echo initial
	} >expect &&
	test_cmp expect actual

ok 162 - log --grep --grep --author takes union of greps and intersects with author

expecting success of 7810.163 'log ---all-match -grep --author --author still takes union of authors and intersects with grep': 
	# grep matches only initial and third
	# author matches all but second
	git log --all-match --author="Thor" --author="Night" --grep=i --format=%s >actual &&
	{
	    echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 163 - log ---all-match -grep --author --author still takes union of authors and intersects with grep

expecting success of 7810.164 'log --grep --author --author takes union of authors and intersects with grep': 
	# grep matches only initial and third
	# author matches all but second
	git log --author="Thor" --author="Night" --grep=i --format=%s >actual &&
	{
	    echo third && echo initial
	} >expect &&
	test_cmp expect actual

ok 164 - log --grep --author --author takes union of authors and intersects with grep

expecting success of 7810.165 'log --all-match --grep --grep --author takes intersection': 
	# grep matches only third
	# author matches only initial and third
	git log --all-match --author="A U Thor" --grep=i --grep=r --format=%s >actual &&
	{
		echo third
	} >expect &&
	test_cmp expect actual

ok 165 - log --all-match --grep --grep --author takes intersection

expecting success of 7810.166 'log --author does not search in timestamp': 
	git log --author="$GIT_AUTHOR_DATE" >actual &&
	test_must_be_empty actual

ok 166 - log --author does not search in timestamp

expecting success of 7810.167 'log --committer does not search in timestamp': 
	git log --committer="$GIT_COMMITTER_DATE" >actual &&
	test_must_be_empty actual

ok 167 - log --committer does not search in timestamp

expecting success of 7810.168 'grep with CE_VALID file': 
	git update-index --assume-unchanged t/t &&
	rm t/t &&
	test "$(git grep test)" = "t/t:test" &&
	git update-index --no-assume-unchanged t/t &&
	git checkout t/t

Updated 1 path from the index
ok 168 - grep with CE_VALID file

expecting success of 7810.169 'grep -p with userdiff': 
	git config diff.custom.funcname "^#" &&
	echo "hello.c diff=custom" >.gitattributes &&
	git grep -p return >actual &&
	test_cmp expected actual

ok 169 - grep -p with userdiff

expecting success of 7810.170 'grep -p': 
	rm -f .gitattributes &&
	git grep -p return >actual &&
	test_cmp expected actual

ok 170 - grep -p

expecting success of 7810.171 'grep -p -B5': 
	git grep -p -B5 return >actual &&
	test_cmp expected actual

ok 171 - grep -p -B5

expecting success of 7810.172 'grep -W': 
	git grep -W return >actual &&
	test_cmp expected actual

ok 172 - grep -W

expecting success of 7810.173 'grep -W shows no trailing empty lines': 
	git grep -W stdio >actual &&
	test_cmp expected actual

ok 173 - grep -W shows no trailing empty lines

expecting success of 7810.174 'grep -W with userdiff': 
	test_when_finished "rm -f .gitattributes" &&
	git config diff.custom.xfuncname "^function .*$" &&
	echo "hello.ps1 diff=custom" >.gitattributes &&
	git grep -W echo >function-context-userdiff-actual

ok 174 - grep -W with userdiff

expecting success of 7810.175 ' includes preceding comment': 
	grep "# Say hello" function-context-userdiff-actual

hello.ps1-# Say hello.
ok 175 -  includes preceding comment

expecting success of 7810.176 ' includes function line': 
	grep "=function hello" function-context-userdiff-actual

hello.ps1=function hello() {
ok 176 -  includes function line

expecting success of 7810.177 ' includes matching line': 
	grep ":  echo" function-context-userdiff-actual

hello.ps1:  echo "Hello world."
hello.ps1:  echo "Hello again."
ok 177 -  includes matching line

expecting success of 7810.178 ' includes last line of the function': 
	grep "} # hello" function-context-userdiff-actual

hello.ps1-} # hello
ok 178 -  includes last line of the function

expecting success of 7810.179 'grep --threads=0 & -c grep.threads=0': 
		git grep --threads=0 . >actual.0 &&
		if test 0 -ge 1
		then
			test_cmp actual.$((0 - 1)) actual.0
		fi &&
		git -c grep.threads=0 grep . >actual.0 &&
		if test 0 -ge 1
		then
			test_cmp actual.$((0 - 1)) actual.0
		fi
	
ok 179 - grep --threads=0 & -c grep.threads=0

expecting success of 7810.180 'grep --threads=1 & -c grep.threads=1': 
		git grep --threads=1 . >actual.1 &&
		if test 1 -ge 1
		then
			test_cmp actual.$((1 - 1)) actual.1
		fi &&
		git -c grep.threads=1 grep . >actual.1 &&
		if test 1 -ge 1
		then
			test_cmp actual.$((1 - 1)) actual.1
		fi
	
ok 180 - grep --threads=1 & -c grep.threads=1

expecting success of 7810.181 'grep --threads=2 & -c grep.threads=2': 
		git grep --threads=2 . >actual.2 &&
		if test 2 -ge 1
		then
			test_cmp actual.$((2 - 1)) actual.2
		fi &&
		git -c grep.threads=2 grep . >actual.2 &&
		if test 2 -ge 1
		then
			test_cmp actual.$((2 - 1)) actual.2
		fi
	
ok 181 - grep --threads=2 & -c grep.threads=2

expecting success of 7810.182 'grep --threads=3 & -c grep.threads=3': 
		git grep --threads=3 . >actual.3 &&
		if test 3 -ge 1
		then
			test_cmp actual.$((3 - 1)) actual.3
		fi &&
		git -c grep.threads=3 grep . >actual.3 &&
		if test 3 -ge 1
		then
			test_cmp actual.$((3 - 1)) actual.3
		fi
	
ok 182 - grep --threads=3 & -c grep.threads=3

expecting success of 7810.183 'grep --threads=4 & -c grep.threads=4': 
		git grep --threads=4 . >actual.4 &&
		if test 4 -ge 1
		then
			test_cmp actual.$((4 - 1)) actual.4
		fi &&
		git -c grep.threads=4 grep . >actual.4 &&
		if test 4 -ge 1
		then
			test_cmp actual.$((4 - 1)) actual.4
		fi
	
ok 183 - grep --threads=4 & -c grep.threads=4

expecting success of 7810.184 'grep --threads=5 & -c grep.threads=5': 
		git grep --threads=5 . >actual.5 &&
		if test 5 -ge 1
		then
			test_cmp actual.$((5 - 1)) actual.5
		fi &&
		git -c grep.threads=5 grep . >actual.5 &&
		if test 5 -ge 1
		then
			test_cmp actual.$((5 - 1)) actual.5
		fi
	
ok 184 - grep --threads=5 & -c grep.threads=5

expecting success of 7810.185 'grep --threads=6 & -c grep.threads=6': 
		git grep --threads=6 . >actual.6 &&
		if test 6 -ge 1
		then
			test_cmp actual.$((6 - 1)) actual.6
		fi &&
		git -c grep.threads=6 grep . >actual.6 &&
		if test 6 -ge 1
		then
			test_cmp actual.$((6 - 1)) actual.6
		fi
	
ok 185 - grep --threads=6 & -c grep.threads=6

expecting success of 7810.186 'grep --threads=7 & -c grep.threads=7': 
		git grep --threads=7 . >actual.7 &&
		if test 7 -ge 1
		then
			test_cmp actual.$((7 - 1)) actual.7
		fi &&
		git -c grep.threads=7 grep . >actual.7 &&
		if test 7 -ge 1
		then
			test_cmp actual.$((7 - 1)) actual.7
		fi
	
ok 186 - grep --threads=7 & -c grep.threads=7

expecting success of 7810.187 'grep --threads=8 & -c grep.threads=8': 
		git grep --threads=8 . >actual.8 &&
		if test 8 -ge 1
		then
			test_cmp actual.$((8 - 1)) actual.8
		fi &&
		git -c grep.threads=8 grep . >actual.8 &&
		if test 8 -ge 1
		then
			test_cmp actual.$((8 - 1)) actual.8
		fi
	
ok 187 - grep --threads=8 & -c grep.threads=8

expecting success of 7810.188 'grep --threads=9 & -c grep.threads=9': 
		git grep --threads=9 . >actual.9 &&
		if test 9 -ge 1
		then
			test_cmp actual.$((9 - 1)) actual.9
		fi &&
		git -c grep.threads=9 grep . >actual.9 &&
		if test 9 -ge 1
		then
			test_cmp actual.$((9 - 1)) actual.9
		fi
	
ok 188 - grep --threads=9 & -c grep.threads=9

expecting success of 7810.189 'grep --threads=10 & -c grep.threads=10': 
		git grep --threads=10 . >actual.10 &&
		if test 10 -ge 1
		then
			test_cmp actual.$((10 - 1)) actual.10
		fi &&
		git -c grep.threads=10 grep . >actual.10 &&
		if test 10 -ge 1
		then
			test_cmp actual.$((10 - 1)) actual.10
		fi
	
ok 189 - grep --threads=10 & -c grep.threads=10

ok 190 # skip grep --threads=N or pack.threads=N warns when no pthreads (missing !PTHREADS of !PTHREADS,!FAIL_PREREQS)

expecting success of 7810.191 'grep from a subdirectory to search wider area (1)': 
	mkdir -p s &&
	(
		cd s && git grep "x x x" ..
	)

../x:x x xx x
ok 191 - grep from a subdirectory to search wider area (1)

expecting success of 7810.192 'grep from a subdirectory to search wider area (2)': 
	mkdir -p s &&
	(
		cd s &&
		test_expect_code 1 git grep xxyyzz .. >out &&
		test_must_be_empty out
	)

ok 192 - grep from a subdirectory to search wider area (2)

expecting success of 7810.193 'grep -Fi': 
	git grep -Fi "CHAR *" >actual &&
	test_cmp expected actual

ok 193 - grep -Fi

expecting success of 7810.194 'outside of git repository': 
	rm -fr non &&
	mkdir -p non/git/sub &&
	echo hello >non/git/file1 &&
	echo world >non/git/sub/file2 &&
	{
		echo file1:hello &&
		echo sub/file2:world
	} >non/expect.full &&
	echo file2:world >non/expect.sub &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		test_must_fail git grep o &&
		git grep --no-index o >../actual.full &&
		test_cmp ../expect.full ../actual.full &&
		cd sub &&
		test_must_fail git grep o &&
		git grep --no-index o >../../actual.sub &&
		test_cmp ../../expect.sub ../../actual.sub
	) &&

	echo ".*o*" >non/git/.gitignore &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		test_must_fail git grep o &&
		git grep --no-index --exclude-standard o >../actual.full &&
		test_cmp ../expect.full ../actual.full &&

		{
			echo ".gitignore:.*o*" &&
			cat ../expect.full
		} >../expect.with.ignored &&
		git grep --no-index --no-exclude-standard o >../actual.full &&
		test_cmp ../expect.with.ignored ../actual.full
	)

fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
ok 194 - outside of git repository

expecting success of 7810.195 'outside of git repository with fallbackToNoIndex': 
	rm -fr non &&
	mkdir -p non/git/sub &&
	echo hello >non/git/file1 &&
	echo world >non/git/sub/file2 &&
	cat <<-\EOF >non/expect.full &&
	file1:hello
	sub/file2:world
	EOF
	echo file2:world >non/expect.sub &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
		git -c grep.fallbackToNoIndex=true grep o >../actual.full &&
		test_cmp ../expect.full ../actual.full &&
		cd sub &&
		test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
		git -c grep.fallbackToNoIndex=true grep o >../../actual.sub &&
		test_cmp ../../expect.sub ../../actual.sub
	) &&

	echo ".*o*" >non/git/.gitignore &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
		git -c grep.fallbackToNoIndex=true grep --exclude-standard o >../actual.full &&
		test_cmp ../expect.full ../actual.full &&

		{
			echo ".gitignore:.*o*" &&
			cat ../expect.full
		} >../expect.with.ignored &&
		git -c grep.fallbackToNoIndex grep --no-exclude-standard o >../actual.full &&
		test_cmp ../expect.with.ignored ../actual.full
	)

fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
ok 195 - outside of git repository with fallbackToNoIndex

expecting success of 7810.196 'inside git repository but with --no-index': 
	rm -fr is &&
	mkdir -p is/git/sub &&
	echo hello >is/git/file1 &&
	echo world >is/git/sub/file2 &&
	echo ".*o*" >is/git/.gitignore &&
	{
		echo file1:hello &&
		echo sub/file2:world
	} >is/expect.unignored &&
	{
		echo ".gitignore:.*o*" &&
		cat is/expect.unignored
	} >is/expect.full &&
	echo file2:world >is/expect.sub &&
	(
		cd is/git &&
		git init &&
		test_must_fail git grep o >../actual.full &&
		test_must_be_empty ../actual.full &&

		git grep --untracked o >../actual.unignored &&
		test_cmp ../expect.unignored ../actual.unignored &&

		git grep --no-index o >../actual.full &&
		test_cmp ../expect.full ../actual.full &&

		git grep --no-index --exclude-standard o >../actual.unignored &&
		test_cmp ../expect.unignored ../actual.unignored &&

		cd sub &&
		test_must_fail git grep o >../../actual.sub &&
		test_must_be_empty ../../actual.sub &&

		git grep --no-index o >../../actual.sub &&
		test_cmp ../../expect.sub ../../actual.sub &&

		git grep --untracked o >../../actual.sub &&
		test_cmp ../../expect.sub ../../actual.sub
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7810-grep/is/git/.git/
ok 196 - inside git repository but with --no-index

expecting success of 7810.197 'grep --no-index descends into repos, but not .git': 
	rm -fr non &&
	mkdir -p non/git &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&

		echo magic >file &&
		git init repo &&
		(
			cd repo &&
			echo magic >file &&
			git add file &&
			git commit -m foo &&
			echo magic >.git/file
		) &&

		cat >expect <<-\EOF &&
		file
		repo/file
		EOF
		git grep -l --no-index magic >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7810-grep/non/git/repo/.git/
[main (root-commit) 5e6fb5d] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 197 - grep --no-index descends into repos, but not .git

expecting success of 7810.198 'setup double-dash tests': 
cat >double-dash <<EOF &&
--
->
other
EOF
git add double-dash

ok 198 - setup double-dash tests

expecting success of 7810.199 'grep -- pattern': 
	git grep -- "->" >actual &&
	test_cmp expected actual

ok 199 - grep -- pattern

expecting success of 7810.200 'grep -- pattern -- pathspec': 
	git grep -- "->" -- double-dash >actual &&
	test_cmp expected actual

ok 200 - grep -- pattern -- pathspec

expecting success of 7810.201 'grep -e pattern -- path': 
	git grep -e "->" -- double-dash >actual &&
	test_cmp expected actual

ok 201 - grep -e pattern -- path

expecting success of 7810.202 'grep -e -- -- path': 
	git grep -e -- -- double-dash >actual &&
	test_cmp expected actual

ok 202 - grep -e -- -- path

expecting success of 7810.203 'dashdash disambiguates rev as rev': 
	test_when_finished "rm -f main" &&
	echo content >main &&
	echo main:hello.c >expect &&
	git grep -l o main -- hello.c >actual &&
	test_cmp expect actual

ok 203 - dashdash disambiguates rev as rev

expecting success of 7810.204 'dashdash disambiguates pathspec as pathspec': 
	test_when_finished "git rm -f main" &&
	echo content >main &&
	git add main &&
	echo main:content >expect &&
	git grep o -- main >actual &&
	test_cmp expect actual

rm 'main'
ok 204 - dashdash disambiguates pathspec as pathspec

expecting success of 7810.205 'report bogus arg without dashdash': 
	test_must_fail git grep o does-not-exist

fatal: ambiguous argument 'does-not-exist': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ok 205 - report bogus arg without dashdash

expecting success of 7810.206 'report bogus rev with dashdash': 
	test_must_fail git grep o hello.c --

fatal: unable to resolve revision: hello.c
ok 206 - report bogus rev with dashdash

expecting success of 7810.207 'allow non-existent path with dashdash': 
	# We need a real match so grep exits with success.
	tree=$(git ls-tree HEAD |
	       sed s/hello.c/not-in-working-tree/ |
	       git mktree) &&
	git grep o "$tree" -- not-in-working-tree

b1b813d0be79996ad191cdb754362be962d4aa2a:not-in-working-tree:#include <stdio.h>
b1b813d0be79996ad191cdb754362be962d4aa2a:not-in-working-tree:int main(int argc, const char **argv)
b1b813d0be79996ad191cdb754362be962d4aa2a:not-in-working-tree:	printf("Hello world.\n");
ok 207 - allow non-existent path with dashdash

expecting success of 7810.208 'grep --no-index pattern -- path': 
	rm -fr non &&
	mkdir -p non/git &&
	(
		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
		export GIT_CEILING_DIRECTORIES &&
		cd non/git &&
		echo hello >hello &&
		echo goodbye >goodbye &&
		echo hello:hello >expect &&
		git grep --no-index o -- hello >actual &&
		test_cmp expect actual
	)

ok 208 - grep --no-index pattern -- path

expecting success of 7810.209 'grep --no-index complains of revs': 
	test_must_fail git grep --no-index o main -- 2>err &&
	test_i18ngrep "cannot be used with revs" err

fatal: --no-index or --untracked cannot be used with revs
ok 209 - grep --no-index complains of revs

expecting success of 7810.210 'grep --no-index prefers paths to revs': 
	test_when_finished "rm -f main" &&
	echo content >main &&
	echo main:content >expect &&
	git grep --no-index o main >actual &&
	test_cmp expect actual

ok 210 - grep --no-index prefers paths to revs

expecting success of 7810.211 'grep --no-index does not "diagnose" revs': 
	test_must_fail git grep --no-index o :1:hello.c 2>err &&
	test_i18ngrep ! -i "did you mean" err

ok 211 - grep --no-index does not "diagnose" revs

expecting success of 7810.212 'grep --perl-regexp pattern': 
	git grep --perl-regexp "\p{Ps}.*?\p{Pe}" hello.c >actual &&
	test_cmp expected actual

ok 212 - grep --perl-regexp pattern

ok 213 # skip grep --perl-regexp pattern errors without PCRE (missing !PCRE of !FAIL_PREREQS,!PCRE)

expecting success of 7810.214 'grep -P pattern': 
	git grep -P "\p{Ps}.*?\p{Pe}" hello.c >actual &&
	test_cmp expected actual

ok 214 - grep -P pattern

expecting success of 7810.215 'grep -P with (*NO_JIT) doesn't error out': 
	git grep -P "(*NO_JIT)\p{Ps}.*?\p{Pe}" hello.c >actual &&
	test_cmp expected actual


ok 215 - grep -P with (*NO_JIT) doesn't error out

ok 216 # skip grep -P pattern errors without PCRE (missing !PCRE of !FAIL_PREREQS,!PCRE)

expecting success of 7810.217 'grep pattern with grep.extendedRegexp=true': 
	test_must_fail git -c grep.extendedregexp=true \
		grep "\p{Ps}.*?\p{Pe}" hello.c >actual &&
	test_must_be_empty actual

fatal: command line, '\p{Ps}.*?\p{Pe}': Invalid content of \{\}
ok 217 - grep pattern with grep.extendedRegexp=true

expecting success of 7810.218 'grep -P pattern with grep.extendedRegexp=true': 
	git -c grep.extendedregexp=true \
		grep -P "\p{Ps}.*?\p{Pe}" hello.c >actual &&
	test_cmp expected actual

ok 218 - grep -P pattern with grep.extendedRegexp=true

expecting success of 7810.219 'grep -P -v pattern': 
	cat >expected <<-\EOF &&
	ab:a+b*c
	ab:a+bc
	EOF
	git grep -P -v "abc" ab >actual &&
	test_cmp expected actual

ok 219 - grep -P -v pattern

expecting success of 7810.220 'grep -P -i pattern': 
	cat >expected <<-EOF &&
	hello.c:	printf("Hello world.\n");
	EOF
	git grep -P -i "PRINTF\([^\d]+\)" hello.c >actual &&
	test_cmp expected actual

ok 220 - grep -P -i pattern

expecting success of 7810.221 'grep -P -w pattern': 
	cat >expected <<-\EOF &&
	hello_world:Hello world
	hello_world:HeLLo world
	EOF
	git grep -P -w "He((?i)ll)o" hello_world >actual &&
	test_cmp expected actual

ok 221 - grep -P -w pattern

expecting success of 7810.222 'grep -P backreferences work (the PCRE NO_AUTO_CAPTURE flag is not set)': 
	git grep -P -h "(?P<one>.)(?P=one)" hello_world >actual &&
	test_cmp hello_world actual &&
	git grep -P -h "(.)\1" hello_world >actual &&
	test_cmp hello_world actual

ok 222 - grep -P backreferences work (the PCRE NO_AUTO_CAPTURE flag is not set)

expecting success of 7810.223 'grep -G invalidpattern properly dies ': 
	test_must_fail git grep -G "a["

fatal: command line, 'a[': Invalid regular expression
ok 223 - grep -G invalidpattern properly dies 

expecting success of 7810.224 'grep invalidpattern properly dies with grep.patternType=basic': 
	test_must_fail git -c grep.patterntype=basic grep "a["

fatal: command line, 'a[': Invalid regular expression
ok 224 - grep invalidpattern properly dies with grep.patternType=basic

expecting success of 7810.225 'grep -E invalidpattern properly dies ': 
	test_must_fail git grep -E "a["

fatal: command line, 'a[': Invalid regular expression
ok 225 - grep -E invalidpattern properly dies 

expecting success of 7810.226 'grep invalidpattern properly dies with grep.patternType=extended': 
	test_must_fail git -c grep.patterntype=extended grep "a["

fatal: command line, 'a[': Invalid regular expression
ok 226 - grep invalidpattern properly dies with grep.patternType=extended

expecting success of 7810.227 'grep -P invalidpattern properly dies ': 
	test_must_fail git grep -P "a["

fatal: command line, 'a[': missing terminating ] for character class
ok 227 - grep -P invalidpattern properly dies 

expecting success of 7810.228 'grep invalidpattern properly dies with grep.patternType=perl': 
	test_must_fail git -c grep.patterntype=perl grep "a["

fatal: command line, 'a[': missing terminating ] for character class
ok 228 - grep invalidpattern properly dies with grep.patternType=perl

expecting success of 7810.229 'grep -G -E -F pattern': 
	echo "ab:a+b*c" >expected &&
	git grep -G -E -F "a+b*c" ab >actual &&
	test_cmp expected actual

ok 229 - grep -G -E -F pattern

expecting success of 7810.230 'grep pattern with grep.patternType=basic, =extended, =fixed': 
	echo "ab:a+b*c" >expected &&
	git \
		-c grep.patterntype=basic \
		-c grep.patterntype=extended \
		-c grep.patterntype=fixed \
		grep "a+b*c" ab >actual &&
	test_cmp expected actual

ok 230 - grep pattern with grep.patternType=basic, =extended, =fixed

expecting success of 7810.231 'grep -E -F -G pattern': 
	echo "ab:a+bc" >expected &&
	git grep -E -F -G "a+b*c" ab >actual &&
	test_cmp expected actual

ok 231 - grep -E -F -G pattern

expecting success of 7810.232 'grep pattern with grep.patternType=extended, =fixed, =basic': 
	echo "ab:a+bc" >expected &&
	git \
		-c grep.patterntype=extended \
		-c grep.patterntype=fixed \
		-c grep.patterntype=basic \
		grep "a+b*c" ab >actual &&
	test_cmp expected actual

ok 232 - grep pattern with grep.patternType=extended, =fixed, =basic

expecting success of 7810.233 'grep -F -G -E pattern': 
	echo "ab:abc" >expected &&
	git grep -F -G -E "a+b*c" ab >actual &&
	test_cmp expected actual

ok 233 - grep -F -G -E pattern

expecting success of 7810.234 'grep pattern with grep.patternType=fixed, =basic, =extended': 
	echo "ab:abc" >expected &&
	git \
		-c grep.patterntype=fixed \
		-c grep.patterntype=basic \
		-c grep.patterntype=extended \
		grep "a+b*c" ab >actual &&
	test_cmp expected actual

ok 234 - grep pattern with grep.patternType=fixed, =basic, =extended

expecting success of 7810.235 'grep -G -F -P -E pattern': 
	echo "d0:d" >expected &&
	git grep -G -F -P -E "[\d]" d0 >actual &&
	test_cmp expected actual

ok 235 - grep -G -F -P -E pattern

expecting success of 7810.236 'grep pattern with grep.patternType=fixed, =basic, =perl, =extended': 
	echo "d0:d" >expected &&
	git \
		-c grep.patterntype=fixed \
		-c grep.patterntype=basic \
		-c grep.patterntype=perl \
		-c grep.patterntype=extended \
		grep "[\d]" d0 >actual &&
	test_cmp expected actual

ok 236 - grep pattern with grep.patternType=fixed, =basic, =perl, =extended

expecting success of 7810.237 'grep -G -F -E -P pattern': 
	echo "d0:0" >expected &&
	git grep -G -F -E -P "[\d]" d0 >actual &&
	test_cmp expected actual

ok 237 - grep -G -F -E -P pattern

expecting success of 7810.238 'grep pattern with grep.patternType=fixed, =basic, =extended, =perl': 
	echo "d0:0" >expected &&
	git \
		-c grep.patterntype=fixed \
		-c grep.patterntype=basic \
		-c grep.patterntype=extended \
		-c grep.patterntype=perl \
		grep "[\d]" d0 >actual &&
	test_cmp expected actual

ok 238 - grep pattern with grep.patternType=fixed, =basic, =extended, =perl

expecting success of 7810.239 'grep -P pattern with grep.patternType=fixed': 
	echo "ab:a+b*c" >expected &&
	git \
		-c grep.patterntype=fixed \
		grep -P "a\x{2b}b\x{2a}c" ab >actual &&
	test_cmp expected actual

ok 239 - grep -P pattern with grep.patternType=fixed

expecting success of 7810.240 'grep -F pattern with grep.patternType=basic': 
	echo "ab:a+b*c" >expected &&
	git \
		-c grep.patterntype=basic \
		grep -F "*c" ab >actual &&
	test_cmp expected actual

ok 240 - grep -F pattern with grep.patternType=basic

expecting success of 7810.241 'grep -G pattern with grep.patternType=fixed': 
	cat >expected <<-\EOF &&
	ab:a+b*c
	ab:a+bc
	EOF
	git \
		-c grep.patterntype=fixed \
		grep -G "a+b" ab >actual &&
	test_cmp expected actual

ok 241 - grep -G pattern with grep.patternType=fixed

expecting success of 7810.242 'grep -E pattern with grep.patternType=fixed': 
	cat >expected <<-\EOF &&
	ab:a+b*c
	ab:a+bc
	ab:abc
	EOF
	git \
		-c grep.patterntype=fixed \
		grep -E "a+" ab >actual &&
	test_cmp expected actual

ok 242 - grep -E pattern with grep.patternType=fixed

expecting success of 7810.243 'grep --color, separator': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		normal &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.match		normal &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	red &&

	git grep --color=always -A1 -e char -e lo_w hello.c hello_world |
	test_decode_color >actual &&
	test_cmp expected actual

ok 243 - grep --color, separator

expecting success of 7810.244 'grep --break': 
	git grep --break -e char -e lo_w hello.c hello_world >actual &&
	test_cmp expected actual

ok 244 - grep --break

expecting success of 7810.245 'grep --break with context': 
	git grep --break -A1 -e char -e lo_w hello.c hello_world >actual &&
	test_cmp expected actual

ok 245 - grep --break with context

expecting success of 7810.246 'grep --heading': 
	git grep --heading -e char -e lo_w hello.c hello_world >actual &&
	test_cmp expected actual

ok 246 - grep --heading

expecting success of 7810.247 'mimic ack-grep --group': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		"bold green" &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.match		"black yellow" &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	normal &&

	git grep --break --heading -n --color \
		-e char -e lo_w hello.c hello_world |
	test_decode_color >actual &&
	test_cmp expected actual

ok 247 - mimic ack-grep --group

expecting success of 7810.248 'grep -E "^ "': 
	git grep -E "^ " space >actual &&
	test_cmp expected actual

ok 248 - grep -E "^ "

expecting success of 7810.249 'grep -P "^ "': 
	git grep -P "^ " space >actual &&
	test_cmp expected actual

ok 249 - grep -P "^ "

expecting success of 7810.250 'grep --color -e A -e B with context': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		normal &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.matchContext	normal &&
	test_config color.grep.matchSelected	red &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	normal &&

	git grep --color=always -C2 -e "with " -e space2  space |
	test_decode_color >actual &&
	test_cmp expected actual

ok 250 - grep --color -e A -e B with context

expecting success of 7810.251 'grep --color -e A --and -e B with context': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		normal &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.matchContext	normal &&
	test_config color.grep.matchSelected	red &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	normal &&

	git grep --color=always -C2 -e "with " --and -e space2  space |
	test_decode_color >actual &&
	test_cmp expected actual

ok 251 - grep --color -e A --and -e B with context

expecting success of 7810.252 'grep --color -e A --and --not -e B with context': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		normal &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.matchContext	normal &&
	test_config color.grep.matchSelected	red &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	normal &&

	git grep --color=always -C2 -e "with " --and --not -e space2  space |
	test_decode_color >actual &&
	test_cmp expected actual

ok 252 - grep --color -e A --and --not -e B with context

expecting success of 7810.253 'grep --color -e A --and -e B -p with context': 
	test_config color.grep.context		normal &&
	test_config color.grep.filename		normal &&
	test_config color.grep.function		normal &&
	test_config color.grep.linenumber	normal &&
	test_config color.grep.matchContext	normal &&
	test_config color.grep.matchSelected	red &&
	test_config color.grep.selected		normal &&
	test_config color.grep.separator	normal &&

	git grep --color=always -p -C3 -e int --and -e Hello --no-index hello.c |
	test_decode_color >actual &&
	test_cmp expected actual

ok 253 - grep --color -e A --and -e B -p with context

expecting success of 7810.254 'grep can find things only in the work tree': 
	: >work-tree-only &&
	git add work-tree-only &&
	test_when_finished "git rm -f work-tree-only" &&
	echo "find in work tree" >work-tree-only &&
	git grep --quiet "find in work tree" &&
	test_must_fail git grep --quiet --cached "find in work tree" &&
	test_must_fail git grep --quiet "find in work tree" HEAD

rm 'work-tree-only'
ok 254 - grep can find things only in the work tree

expecting success of 7810.255 'grep can find things only in the work tree (i-t-a)': 
	echo "intend to add this" >intend-to-add &&
	git add -N intend-to-add &&
	test_when_finished "git rm -f intend-to-add" &&
	git grep --quiet "intend to add this" &&
	test_must_fail git grep --quiet --cached "intend to add this" &&
	test_must_fail git grep --quiet "intend to add this" HEAD

rm 'intend-to-add'
ok 255 - grep can find things only in the work tree (i-t-a)

expecting success of 7810.256 'grep does not search work tree with assume unchanged': 
	echo "intend to add this" >intend-to-add &&
	git add -N intend-to-add &&
	git update-index --assume-unchanged intend-to-add &&
	test_when_finished "git rm -f intend-to-add" &&
	test_must_fail git grep --quiet "intend to add this" &&
	test_must_fail git grep --quiet --cached "intend to add this" &&
	test_must_fail git grep --quiet "intend to add this" HEAD

rm 'intend-to-add'
ok 256 - grep does not search work tree with assume unchanged

expecting success of 7810.257 'grep can find things only in the index': 
	echo "only in the index" >cache-this &&
	git add cache-this &&
	rm cache-this &&
	test_when_finished "git rm --cached cache-this" &&
	test_must_fail git grep --quiet "only in the index" &&
	git grep --quiet --cached "only in the index" &&
	test_must_fail git grep --quiet "only in the index" HEAD

rm 'cache-this'
ok 257 - grep can find things only in the index

expecting success of 7810.258 'grep does not report i-t-a with -L --cached': 
	echo "intend to add this" >intend-to-add &&
	git add -N intend-to-add &&
	test_when_finished "git rm -f intend-to-add" &&
	git ls-files | grep -v "^intend-to-add\$" >expected &&
	git grep -L --cached "nonexistent_string" >actual &&
	test_cmp expected actual

rm 'intend-to-add'
ok 258 - grep does not report i-t-a with -L --cached

expecting success of 7810.259 'grep does not report i-t-a and assume unchanged with -L': 
	echo "intend to add this" >intend-to-add-assume-unchanged &&
	git add -N intend-to-add-assume-unchanged &&
	test_when_finished "git rm -f intend-to-add-assume-unchanged" &&
	git update-index --assume-unchanged intend-to-add-assume-unchanged &&
	git ls-files | grep -v "^intend-to-add-assume-unchanged\$" >expected &&
	git grep -L "nonexistent_string" >actual &&
	test_cmp expected actual

rm 'intend-to-add-assume-unchanged'
ok 259 - grep does not report i-t-a and assume unchanged with -L

# passed all 259 test(s)
1..259
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7815-grep-binary.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7815-grep-binary/.git/
expecting success of 7815.1 'setup': 
	echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
	git add a &&
	git commit -m.

[master (root-commit) 8fc33fb] .
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
ok 1 - setup

expecting success of 7815.2 'git grep ina a': 
	echo Binary file a matches >expect &&
	git grep ina a >actual &&
	test_cmp expect actual

ok 2 - git grep ina a

expecting success of 7815.3 'git grep -ah ina a': 
	git grep -ah ina a >actual &&
	test_cmp a actual

ok 3 - git grep -ah ina a

expecting success of 7815.4 'git grep -I ina a': 
	test_must_fail git grep -I ina a >actual &&
	test_must_be_empty actual

ok 4 - git grep -I ina a

expecting success of 7815.5 'git grep -c ina a': 
	echo a:1 >expect &&
	git grep -c ina a >actual &&
	test_cmp expect actual

ok 5 - git grep -c ina a

expecting success of 7815.6 'git grep -l ina a': 
	echo a >expect &&
	git grep -l ina a >actual &&
	test_cmp expect actual

ok 6 - git grep -l ina a

expecting success of 7815.7 'git grep -L bar a': 
	echo a >expect &&
	git grep -L bar a >actual &&
	test_cmp expect actual

ok 7 - git grep -L bar a

expecting success of 7815.8 'git grep -q ina a': 
	git grep -q ina a >actual &&
	test_must_be_empty actual

ok 8 - git grep -q ina a

expecting success of 7815.9 'git grep -F ile a': 
	git grep -F ile a

Binary file a matches
ok 9 - git grep -F ile a

expecting success of 7815.10 'git grep -Fi iLE a': 
	git grep -Fi iLE a

Binary file a matches
ok 10 - git grep -Fi iLE a

expecting success of 7815.11 'git grep ile a': 
	git grep ile a

Binary file a matches
ok 11 - git grep ile a

checking known breakage of 7815.12 'git grep .fi a': 
	git grep .fi a

not ok 12 - git grep .fi a # TODO known breakage

expecting success of 7815.13 'grep respects binary diff attribute': 
	echo text >t &&
	git add t &&
	echo t:text >expect &&
	git grep text t >actual &&
	test_cmp expect actual &&
	echo "t -diff" >.gitattributes &&
	echo "Binary file t matches" >expect &&
	git grep text t >actual &&
	test_cmp expect actual

ok 13 - grep respects binary diff attribute

expecting success of 7815.14 'grep --cached respects binary diff attribute': 
	git grep --cached text t >actual &&
	test_cmp expect actual

ok 14 - grep --cached respects binary diff attribute

expecting success of 7815.15 'grep --cached respects binary diff attribute (2)': 
	git add .gitattributes &&
	rm .gitattributes &&
	git grep --cached text t >actual &&
	test_when_finished "git rm --cached .gitattributes" &&
	test_when_finished "git checkout .gitattributes" &&
	test_cmp expect actual

Updated 1 path from the index
rm '.gitattributes'
ok 15 - grep --cached respects binary diff attribute (2)

expecting success of 7815.16 'grep revision respects binary diff attribute': 
	git commit -m new &&
	echo "Binary file HEAD:t matches" >expect &&
	git grep text HEAD -- t >actual &&
	test_when_finished "git reset HEAD^" &&
	test_cmp expect actual

[master 7e398e6] new
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t
ok 16 - grep revision respects binary diff attribute

expecting success of 7815.17 'grep respects not-binary diff attribute': 
	echo binQary | q_to_nul >b &&
	git add b &&
	echo "Binary file b matches" >expect &&
	git grep bin b >actual &&
	test_cmp expect actual &&
	echo "b diff" >.gitattributes &&
	echo "b:binQary" >expect &&
	git grep bin b >actual.raw &&
	nul_to_q <actual.raw >actual &&
	test_cmp expect actual

ok 17 - grep respects not-binary diff attribute

expecting success of 7815.18 'setup textconv filters': 
	echo a diff=foo >.gitattributes &&
	git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv

ok 18 - setup textconv filters

expecting success of 7815.19 'grep does not honor textconv': 
	test_must_fail git grep Qfile

ok 19 - grep does not honor textconv

expecting success of 7815.20 'grep --textconv honors textconv': 
	echo "a:binaryQfileQm[*]cQ*æQð" >expect &&
	git grep --textconv Qfile >actual &&
	test_cmp expect actual

ok 20 - grep --textconv honors textconv

expecting success of 7815.21 'grep --no-textconv does not honor textconv': 
	test_must_fail git grep --no-textconv Qfile

ok 21 - grep --no-textconv does not honor textconv

expecting success of 7815.22 'grep --textconv blob honors textconv': 
	echo "HEAD:a:binaryQfileQm[*]cQ*æQð" >expect &&
	git grep --textconv Qfile HEAD:a >actual &&
	test_cmp expect actual

ok 22 - grep --textconv blob honors textconv

# still have 1 known breakage(s)
# passed all remaining 21 test(s)
1..22
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7814-grep-recurse-submodules.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/.git/
expecting success of 7814.1 'setup directory structure and submodule': 
	echo "(1|2)d(3|4)" >a &&
	mkdir b &&
	echo "(3|4)" >b/b &&
	git add a b &&
	git commit -m "add a and b" &&
	test_tick &&
	git init submodule &&
	echo "(1|2)d(3|4)" >submodule/a &&
	git -C submodule add a &&
	git -C submodule commit -m "add a" &&
	git submodule add ./submodule &&
	git commit -m "added submodule" &&
	test_tick

[master (root-commit) 167e9ac] add a and b
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b/b
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/submodule/.git/
[master (root-commit) f764d75] add a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Adding existing repo at 'submodule' to the index
[master 24c453d] added submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 submodule
ok 1 - setup directory structure and submodule

expecting success of 7814.2 'grep correctly finds patterns in a submodule': 
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	b/b:(3|4)
	submodule/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules >actual &&
	test_cmp expect actual

ok 2 - grep correctly finds patterns in a submodule

expecting success of 7814.3 'grep finds patterns in a submodule via config': 
	test_config submodule.recurse true &&
	# expect from previous test
	git grep -e "(3|4)" >actual &&
	test_cmp expect actual

ok 3 - grep finds patterns in a submodule via config

expecting success of 7814.4 'grep --no-recurse-submodules overrides config': 
	test_config submodule.recurse true &&
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	b/b:(3|4)
	EOF

	git grep -e "(3|4)" --no-recurse-submodules >actual &&
	test_cmp expect actual

ok 4 - grep --no-recurse-submodules overrides config

expecting success of 7814.5 'grep and basic pathspecs': 
	cat >expect <<-\EOF &&
	submodule/a:(1|2)d(3|4)
	EOF

	git grep -e. --recurse-submodules -- submodule >actual &&
	test_cmp expect actual

ok 5 - grep and basic pathspecs

expecting success of 7814.6 'grep and nested submodules': 
	git init submodule/sub &&
	echo "(1|2)d(3|4)" >submodule/sub/a &&
	git -C submodule/sub add a &&
	git -C submodule/sub commit -m "add a" &&
	test_tick &&
	git -C submodule submodule add ./sub &&
	git -C submodule add sub &&
	git -C submodule commit -m "added sub" &&
	test_tick &&
	git add submodule &&
	git commit -m "updated submodule" &&
	test_tick &&

	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	b/b:(3|4)
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/submodule/sub/.git/
[master (root-commit) 0fb48cf] add a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Adding existing repo at 'sub' to the index
[master d30b891] added sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[master bea0037] updated submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 6 - grep and nested submodules

expecting success of 7814.7 'grep and multiple patterns': 
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --and -e "(1|2)" --recurse-submodules >actual &&
	test_cmp expect actual

ok 7 - grep and multiple patterns

expecting success of 7814.8 'grep and multiple patterns': 
	cat >expect <<-\EOF &&
	b/b:(3|4)
	EOF

	git grep -e "(3|4)" --and --not -e "(1|2)" --recurse-submodules >actual &&
	test_cmp expect actual

ok 8 - grep and multiple patterns

expecting success of 7814.9 'basic grep tree': 
	cat >expect <<-\EOF &&
	HEAD:a:(1|2)d(3|4)
	HEAD:b/b:(3|4)
	HEAD:submodule/a:(1|2)d(3|4)
	HEAD:submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD >actual &&
	test_cmp expect actual

ok 9 - basic grep tree

expecting success of 7814.10 'grep tree HEAD^': 
	cat >expect <<-\EOF &&
	HEAD^:a:(1|2)d(3|4)
	HEAD^:b/b:(3|4)
	HEAD^:submodule/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD^ >actual &&
	test_cmp expect actual

ok 10 - grep tree HEAD^

expecting success of 7814.11 'grep tree HEAD^^': 
	cat >expect <<-\EOF &&
	HEAD^^:a:(1|2)d(3|4)
	HEAD^^:b/b:(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD^^ >actual &&
	test_cmp expect actual

ok 11 - grep tree HEAD^^

expecting success of 7814.12 'grep tree and pathspecs': 
	cat >expect <<-\EOF &&
	HEAD:submodule/a:(1|2)d(3|4)
	HEAD:submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD -- submodule >actual &&
	test_cmp expect actual

ok 12 - grep tree and pathspecs

expecting success of 7814.13 'grep tree and pathspecs': 
	cat >expect <<-\EOF &&
	HEAD:submodule/a:(1|2)d(3|4)
	HEAD:submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD -- "submodule*a" >actual &&
	test_cmp expect actual

ok 13 - grep tree and pathspecs

expecting success of 7814.14 'grep tree and more pathspecs': 
	cat >expect <<-\EOF &&
	HEAD:submodule/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul?/a" >actual &&
	test_cmp expect actual

ok 14 - grep tree and more pathspecs

expecting success of 7814.15 'grep tree and more pathspecs': 
	cat >expect <<-\EOF &&
	HEAD:submodule/sub/a:(1|2)d(3|4)
	EOF

	git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul*/sub/a" >actual &&
	test_cmp expect actual

ok 15 - grep tree and more pathspecs

expecting success of 7814.16 'grep recurse submodule colon in name': 
	git init parent &&
	test_when_finished "rm -rf parent" &&
	echo "(1|2)d(3|4)" >"parent/fi:le" &&
	git -C parent add "fi:le" &&
	git -C parent commit -m "add fi:le" &&
	test_tick &&

	git init "su:b" &&
	test_when_finished "rm -rf su:b" &&
	echo "(1|2)d(3|4)" >"su:b/fi:le" &&
	git -C "su:b" add "fi:le" &&
	git -C "su:b" commit -m "add fi:le" &&
	test_tick &&

	test_config_global protocol.file.allow always &&
	git -C parent submodule add "../su:b" "su:b" &&
	git -C parent commit -m "add submodule" &&
	test_tick &&

	cat >expect <<-\EOF &&
	fi:le:(1|2)d(3|4)
	su:b/fi:le:(1|2)d(3|4)
	EOF
	git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	HEAD:fi:le:(1|2)d(3|4)
	HEAD:su:b/fi:le:(1|2)d(3|4)
	EOF
	git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/.git/
[master (root-commit) 8149a31] add fi:le
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fi:le
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/su:b/.git/
[master (root-commit) 94095b4] add fi:le
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 fi:le
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/su:b'...
done.
[master bedaa45] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 su:b
ok 16 - grep recurse submodule colon in name

expecting success of 7814.17 'grep history with moved submoules': 
	git init parent &&
	test_when_finished "rm -rf parent" &&
	echo "(1|2)d(3|4)" >parent/file &&
	git -C parent add file &&
	git -C parent commit -m "add file" &&
	test_tick &&

	git init sub &&
	test_when_finished "rm -rf sub" &&
	echo "(1|2)d(3|4)" >sub/file &&
	git -C sub add file &&
	git -C sub commit -m "add file" &&
	test_tick &&

	test_config_global protocol.file.allow always &&
	git -C parent submodule add ../sub dir/sub &&
	git -C parent commit -m "add submodule" &&
	test_tick &&

	cat >expect <<-\EOF &&
	dir/sub/file:(1|2)d(3|4)
	file:(1|2)d(3|4)
	EOF
	git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
	test_cmp expect actual &&

	git -C parent mv dir/sub sub-moved &&
	git -C parent commit -m "moved submodule" &&
	test_tick &&

	cat >expect <<-\EOF &&
	file:(1|2)d(3|4)
	sub-moved/file:(1|2)d(3|4)
	EOF
	git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
	test_cmp expect actual &&

	cat >expect <<-\EOF &&
	HEAD^:dir/sub/file:(1|2)d(3|4)
	HEAD^:file:(1|2)d(3|4)
	EOF
	git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD^ >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/.git/
[master (root-commit) 1d01947] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/sub/.git/
[master (root-commit) cc4006b] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/dir/sub'...
done.
[master 9f8bb21] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 dir/sub
[master cc98e46] moved submodule
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename dir/sub => sub-moved (100%)
ok 17 - grep history with moved submoules

expecting success of 7814.18 'grep using relative path': 
	test_when_finished "rm -rf parent sub" &&
	git init sub &&
	echo "(1|2)d(3|4)" >sub/file &&
	git -C sub add file &&
	git -C sub commit -m "add file" &&
	test_tick &&

	git init parent &&
	echo "(1|2)d(3|4)" >parent/file &&
	git -C parent add file &&
	mkdir parent/src &&
	echo "(1|2)d(3|4)" >parent/src/file2 &&
	git -C parent add src/file2 &&
	test_config_global protocol.file.allow always &&
	git -C parent submodule add ../sub &&
	git -C parent commit -m "add files and submodule" &&
	test_tick &&

	# From top works
	cat >expect <<-\EOF &&
	file:(1|2)d(3|4)
	src/file2:(1|2)d(3|4)
	sub/file:(1|2)d(3|4)
	EOF
	git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
	test_cmp expect actual &&

	# Relative path to top
	cat >expect <<-\EOF &&
	../file:(1|2)d(3|4)
	file2:(1|2)d(3|4)
	../sub/file:(1|2)d(3|4)
	EOF
	git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- .. >actual &&
	test_cmp expect actual &&

	# Relative path to submodule
	cat >expect <<-\EOF &&
	../sub/file:(1|2)d(3|4)
	EOF
	git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- ../sub >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/sub/.git/
[master (root-commit) 41913eb] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/sub'...
done.
[master (root-commit) 014e5fc] add files and submodule
 Author: A U Thor <author@example.com>
 4 files changed, 6 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 file
 create mode 100644 src/file2
 create mode 160000 sub
ok 18 - grep using relative path

expecting success of 7814.19 'grep from a subdir': 
	test_when_finished "rm -rf parent sub" &&
	git init sub &&
	echo "(1|2)d(3|4)" >sub/file &&
	git -C sub add file &&
	git -C sub commit -m "add file" &&
	test_tick &&

	git init parent &&
	mkdir parent/src &&
	echo "(1|2)d(3|4)" >parent/src/file &&
	git -C parent add src/file &&
	test_config_global protocol.file.allow always &&
	git -C parent submodule add ../sub src/sub &&
	git -C parent submodule add ../sub sub &&
	git -C parent commit -m "add files and submodules" &&
	test_tick &&

	# Verify grep from root works
	cat >expect <<-\EOF &&
	src/file:(1|2)d(3|4)
	src/sub/file:(1|2)d(3|4)
	sub/file:(1|2)d(3|4)
	EOF
	git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
	test_cmp expect actual &&

	# Verify grep from a subdir works
	cat >expect <<-\EOF &&
	file:(1|2)d(3|4)
	sub/file:(1|2)d(3|4)
	EOF
	git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/sub/.git/
[master (root-commit) 1a98ea2] add file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/.git/
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/src/sub'...
done.
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/parent/sub'...
done.
[master (root-commit) ca3476d] add files and submodules
 Author: A U Thor <author@example.com>
 4 files changed, 9 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 src/file
 create mode 160000 src/sub
 create mode 160000 sub
ok 19 - grep from a subdir

expecting success of 7814.20 '--recurse-submodules and --untracked are incompatible': 
		test_must_fail git grep -e. --recurse-submodules --untracked 2>actual &&
		test_i18ngrep 'not supported with --recurse-submodules' actual
	
fatal: --untracked not supported with --recurse-submodules
ok 20 - --recurse-submodules and --untracked are incompatible

expecting success of 7814.21 'grep --recurse-submodules --no-index ignores --recurse-submodules': 
	git grep --recurse-submodules --no-index -e "^(.|.)[\d]" >actual &&
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF
	test_cmp expect actual

ok 21 - grep --recurse-submodules --no-index ignores --recurse-submodules

expecting success of 7814.22 'grep --recurse-submodules should pass the pattern type along': 
	# Fixed
	test_must_fail git grep -F --recurse-submodules -e "(.|.)[\d]" &&
	test_must_fail git -c grep.patternType=fixed grep --recurse-submodules -e "(.|.)[\d]" &&

	# Basic
	git grep -G --recurse-submodules -e "(.|.)[\d]" >actual &&
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF
	test_cmp expect actual &&
	git -c grep.patternType=basic grep --recurse-submodules -e "(.|.)[\d]" >actual &&
	test_cmp expect actual &&

	# Extended
	git grep -E --recurse-submodules -e "(.|.)[\d]" >actual &&
	cat >expect <<-\EOF &&
	.gitmodules:[submodule "submodule"]
	.gitmodules:	path = submodule
	.gitmodules:	url = ./submodule
	a:(1|2)d(3|4)
	submodule/.gitmodules:[submodule "sub"]
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF
	test_cmp expect actual &&
	git -c grep.patternType=extended grep --recurse-submodules -e "(.|.)[\d]" >actual &&
	test_cmp expect actual &&
	git -c grep.extendedRegexp=true grep --recurse-submodules -e "(.|.)[\d]" >actual &&
	test_cmp expect actual &&

	# Perl
	if test_have_prereq PCRE
	then
		git grep -P --recurse-submodules -e "(.|.)[\d]" >actual &&
		cat >expect <<-\EOF &&
		a:(1|2)d(3|4)
		b/b:(3|4)
		submodule/a:(1|2)d(3|4)
		submodule/sub/a:(1|2)d(3|4)
		EOF
		test_cmp expect actual &&
		git -c grep.patternType=perl grep --recurse-submodules -e "(.|.)[\d]" >actual &&
		test_cmp expect actual
	fi

ok 22 - grep --recurse-submodules should pass the pattern type along

expecting success of 7814.23 'grep --recurse-submodules with submodules without .gitmodules in the working tree': 
	test_when_finished "git -C submodule checkout .gitmodules" &&
	rm submodule/.gitmodules &&
	git grep --recurse-submodules -e "(.|.)[\d]" >actual &&
	cat >expect <<-\EOF &&
	a:(1|2)d(3|4)
	submodule/a:(1|2)d(3|4)
	submodule/sub/a:(1|2)d(3|4)
	EOF
	test_cmp expect actual

Updated 1 path from the index
ok 23 - grep --recurse-submodules with submodules without .gitmodules in the working tree

expecting success of 7814.24 'grep --recurse-submodules without --cached considers worktree modifications': 
	reset_and_clean &&
	echo "A modified line in submodule" >>submodule/a &&
	echo "submodule/a:A modified line in submodule" >expect &&
	git grep --recurse-submodules "A modified line in submodule" >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
ok 24 - grep --recurse-submodules without --cached considers worktree modifications

expecting success of 7814.25 'grep --recurse-submodules with --cached ignores worktree modifications': 
	reset_and_clean &&
	echo "A modified line in submodule" >>submodule/a &&
	test_must_fail git grep --recurse-submodules --cached "A modified line in submodule" >actual 2>&1 &&
	test_must_be_empty actual

HEAD is now at bea0037 updated submodule
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
ok 25 - grep --recurse-submodules with --cached ignores worktree modifications

checking known breakage of 7814.26 'grep --textconv: superproject .gitattributes does not affect submodules': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&
	echo "a diff=d2x" >.gitattributes &&

	cat >expect <<-\EOF &&
	a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing actual
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
--- expect	2022-12-28 08:05:47.394295662 +0000
+++ actual	2022-12-28 08:05:47.494299289 +0000
@@ -1 +1,3 @@
 a:(1|2)x(3|4)
+submodule/a:(1|2)x(3|4)
+submodule/sub/a:(1|2)x(3|4)
not ok 26 - grep --textconv: superproject .gitattributes does not affect submodules # TODO known breakage

checking known breakage of 7814.27 'grep --textconv: superproject .gitattributes (from index) does not affect submodules': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&
	echo "a diff=d2x" >.gitattributes &&
	git add .gitattributes &&
	rm .gitattributes &&

	cat >expect <<-\EOF &&
	a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitattributes
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
--- expect	2022-12-28 08:05:48.389331748 +0000
+++ actual	2022-12-28 08:05:48.504335919 +0000
@@ -1 +1,3 @@
 a:(1|2)x(3|4)
+submodule/a:(1|2)x(3|4)
+submodule/sub/a:(1|2)x(3|4)
not ok 27 - grep --textconv: superproject .gitattributes (from index) does not affect submodules # TODO known breakage

checking known breakage of 7814.28 'grep --textconv: superproject .git/info/attributes does not affect submodules': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&
	super_info="$(git rev-parse --git-path info)" &&
	super_attr="$super_info/attributes" &&
	test_when_finished "rm -f \"$super_attr\"" &&
	mkdir "$super_info" &&
	echo "a diff=d2x" >"$super_attr" &&

	cat >expect <<-\EOF &&
	a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
--- expect	2022-12-28 08:05:49.384367834 +0000
+++ actual	2022-12-28 08:05:49.484371461 +0000
@@ -1 +1,3 @@
 a:(1|2)x(3|4)
+submodule/a:(1|2)x(3|4)
+submodule/sub/a:(1|2)x(3|4)
not ok 28 - grep --textconv: superproject .git/info/attributes does not affect submodules # TODO known breakage

checking known breakage of 7814.29 'grep --textconv correctly reads submodule .gitattributes': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&
	echo "a diff=d2x" >submodule/.gitattributes &&

	cat >expect <<-\EOF &&
	submodule/a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
--- expect	2022-12-28 08:05:50.354403013 +0000
+++ actual	2022-12-28 08:05:50.434405915 +0000
@@ -1 +1,2 @@
 submodule/a:(1|2)x(3|4)
+submodule/sub/a:(1|2)x(3|4)
not ok 29 - grep --textconv correctly reads submodule .gitattributes # TODO known breakage

checking known breakage of 7814.30 'grep --textconv correctly reads submodule .gitattributes (from index)': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&
	echo "a diff=d2x" >submodule/.gitattributes &&
	git -C submodule add .gitattributes &&
	rm submodule/.gitattributes &&

	cat >expect <<-\EOF &&
	submodule/a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Removing .gitattributes
Entering 'submodule/sub'
not ok 30 - grep --textconv correctly reads submodule .gitattributes (from index) # TODO known breakage

checking known breakage of 7814.31 'grep --textconv correctly reads submodule .git/info/attributes': 
	reset_and_clean &&
	test_config_global diff.d2x.textconv "sed -e \"s/d/x/\"" &&

	submodule_info="$(git -C submodule rev-parse --path-format=absolute --git-path info)" &&
	submodule_attr="$submodule_info/attributes" &&
	test_when_finished "rm -f \"$submodule_attr\"" &&
	echo "a diff=d2x" >"$submodule_attr" &&

	cat >expect <<-\EOF &&
	submodule/a:(1|2)x(3|4)
	EOF
	git grep --textconv --recurse-submodules x >actual &&
	test_cmp expect actual

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
not ok 31 - grep --textconv correctly reads submodule .git/info/attributes # TODO known breakage

checking known breakage of 7814.32 'grep saves textconv cache in the appropriate repository': 
	reset_and_clean &&
	test_config_global diff.d2x_cached.textconv "sed -e \"s/d/x/\"" &&
	test_config_global diff.d2x_cached.cachetextconv true &&
	echo "a diff=d2x_cached" >submodule/.gitattributes &&

	# We only read/write to the textconv cache when grepping from an OID,
	# as the working tree file might have modifications.
	git grep --textconv --cached --recurse-submodules x &&

	super_textconv_cache="$(git rev-parse --git-path refs/notes/textconv/d2x_cached)" &&
	sub_textconv_cache="$(git -C submodule rev-parse \
			--path-format=absolute --git-path refs/notes/textconv/d2x_cached)" &&
	test_path_is_missing "$super_textconv_cache" &&
	test_path_is_file "$sub_textconv_cache"

HEAD is now at bea0037 updated submodule
Removing .gitconfig
Removing actual
Removing expect
Entering 'submodule'
HEAD is now at d30b891 added sub
Entering 'submodule/sub'
HEAD is now at 0fb48cf add a
Entering 'submodule'
Entering 'submodule/sub'
submodule/a:(1|2)x(3|4)
submodule/sub/a:(1|2)x(3|4)
Path exists:
-rw-r--r-- 1 buildd buildd 41 Dec 28 08:05 .git/refs/notes/textconv/d2x_cached
not ok 32 - grep saves textconv cache in the appropriate repository # TODO known breakage

expecting success of 7814.33 'grep partially-cloned submodule': 
	# Set up clean superproject and submodule for partial cloning.
	test_config_global protocol.file.allow always &&
	git init super &&
	git init super/sub &&
	(
		cd super &&
		test_commit --no-tag "Add file in superproject" \
			super-file "Some content for super-file" &&
		test_commit -C sub --no-tag "Add file in submodule" \
			sub-file "Some content for sub-file" &&
		git submodule add ./sub &&
		git commit -m "Add other as submodule sub" &&
		test_tick &&
		test_commit -C sub --no-tag --append "Update file in submodule" \
			sub-file "Some more content for sub-file" &&
		git add sub &&
		git commit -m "Update submodule" &&
		test_tick &&
		git config --local uploadpack.allowfilter 1 &&
		git config --local uploadpack.allowanysha1inwant 1 &&
		git -C sub config --local uploadpack.allowfilter 1 &&
		git -C sub config --local uploadpack.allowanysha1inwant 1
	) &&
	# Clone the superproject & submodule, then make sure we can lazy-fetch submodule objects.
	git clone --filter=blob:none --also-filter-submodules \
		--recurse-submodules "file://$(pwd)/super" partial &&
	(
		cd partial &&
		cat >expect <<-\EOF &&
		HEAD^:sub/sub-file:Some content for sub-file
		HEAD^:super-file:Some content for super-file
		EOF

		GIT_TRACE2_EVENT="$(pwd)/trace2.log" git grep -e content \
			--recurse-submodules HEAD^ >actual &&
		test_cmp expect actual &&
		# Verify that we actually fetched data from the promisor remote:
		grep \"category\":\"promisor\",\"key\":\"fetch_count\",\"value\":\"1\" trace2.log
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/super/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/super/sub/.git/
[master (root-commit) 1314e8e] Add file in superproject
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 super-file
[master (root-commit) 1851742] Add file in submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub-file
Adding existing repo at 'sub' to the index
[master dc86339] Add other as submodule sub
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[master 289fae0] Update file in submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master db027f1] Update submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Cloning into 'partial'...
Submodule 'sub' (file:///<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/super/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7814-grep-recurse-submodules/partial/sub'...
Submodule path 'sub': checked out '289fae02a658deff257301016761eff04f091022'
{"event":"data","sid":"20221228T080555.926085Z-Hc64317c2-P00001ecf","thread":"th01:unknown","time":"2022-12-28T08:05:55.963846Z","file":"promisor-remote.c","line":35,"repo":2,"t_abs":0.041429,"t_rel":0.006461,"nesting":1,"category":"promisor","key":"fetch_count","value":"1"}
ok 33 - grep partially-cloned submodule

# still have 7 known breakage(s)
# passed all remaining 26 test(s)
1..33
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7800-difftool.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/.git/
expecting success of 7800.1 'basic usage requires no repo': 
	test_expect_code 129 git difftool -h >output &&
	test_i18ngrep ^usage: output &&
	# create a ceiling directory to prevent Git from finding a repo
	mkdir -p not/repo &&
	test_when_finished rm -r not &&
	test_expect_code 129 \
	env GIT_CEILING_DIRECTORIES="$(pwd)/not" \
	git -C not/repo difftool -h >output &&
	test_i18ngrep ^usage: output

usage: git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]
usage: git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]
ok 1 - basic usage requires no repo

expecting success of 7800.2 'setup': 
	echo main >file &&
	git add file &&
	git commit -m "added file" &&

	git checkout -b branch main &&
	echo branch >file &&
	git commit -a -m "branch changed file" &&
	git checkout main

[main (root-commit) 0600984] added file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'branch'
[branch 885008f] branch changed file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 2 - setup

expecting success of 7800.3 'custom commands': 
	difftool_test_setup &&
	test_config difftool.test-tool.cmd "cat \"\$REMOTE\"" &&
	echo main >expect &&
	git difftool --no-prompt branch >actual &&
	test_cmp expect actual &&

	test_config difftool.test-tool.cmd "cat \"\$LOCAL\"" &&
	echo branch >expect &&
	git difftool --no-prompt branch >actual &&
	test_cmp expect actual

ok 3 - custom commands

expecting success of 7800.4 'custom tool commands override built-ins': 
	test_config difftool.vimdiff.cmd "cat \"\$REMOTE\"" &&
	echo main >expect &&
	git difftool --tool vimdiff --no-prompt branch >actual &&
	test_cmp expect actual

ok 4 - custom tool commands override built-ins

expecting success of 7800.5 'difftool ignores bad --tool values': 
	: >expect &&
	test_must_fail \
		git difftool --no-prompt --tool=bad-tool branch >actual &&
	test_cmp expect actual

Unknown merge tool bad-tool
fatal: external diff died, stopping at file
ok 5 - difftool ignores bad --tool values

expecting success of 7800.6 'difftool forwards arguments to diff': 
	difftool_test_setup &&
	>for-diff &&
	git add for-diff &&
	echo changes>for-diff &&
	git add for-diff &&
	: >expect &&
	git difftool --cached --no-prompt -- for-diff >actual &&
	test_cmp expect actual &&
	git reset -- for-diff &&
	rm for-diff

ok 6 - difftool forwards arguments to diff

expecting success of 7800.7 'difftool ignores exit code': 
	test_config difftool.error.cmd false &&
	git difftool -y -t error branch

ok 7 - difftool ignores exit code

expecting success of 7800.8 'difftool forwards exit code with --trust-exit-code': 
	test_config difftool.error.cmd false &&
	test_must_fail git difftool -y --trust-exit-code -t error branch

fatal: external diff died, stopping at file
ok 8 - difftool forwards exit code with --trust-exit-code

expecting success of 7800.9 'difftool forwards exit code with --trust-exit-code for built-ins': 
	test_config difftool.vimdiff.path false &&
	test_must_fail git difftool -y --trust-exit-code -t vimdiff branch

fatal: external diff died, stopping at file
ok 9 - difftool forwards exit code with --trust-exit-code for built-ins

expecting success of 7800.10 'difftool honors difftool.trustExitCode = true': 
	test_config difftool.error.cmd false &&
	test_config difftool.trustExitCode true &&
	test_must_fail git difftool -y -t error branch

fatal: external diff died, stopping at file
ok 10 - difftool honors difftool.trustExitCode = true

expecting success of 7800.11 'difftool honors difftool.trustExitCode = false': 
	test_config difftool.error.cmd false &&
	test_config difftool.trustExitCode false &&
	git difftool -y -t error branch

ok 11 - difftool honors difftool.trustExitCode = false

expecting success of 7800.12 'difftool ignores exit code with --no-trust-exit-code': 
	test_config difftool.error.cmd false &&
	test_config difftool.trustExitCode true &&
	git difftool -y --no-trust-exit-code -t error branch

ok 12 - difftool ignores exit code with --no-trust-exit-code

expecting success of 7800.13 'difftool stops on error with --trust-exit-code': 
	test_when_finished "rm -f for-diff .git/fail-right-file" &&
	test_when_finished "git reset -- for-diff" &&
	write_script .git/fail-right-file <<-\EOF &&
	echo failed
	exit 1
	EOF
	>for-diff &&
	git add for-diff &&
	test_must_fail git difftool -y --trust-exit-code \
		--extcmd .git/fail-right-file branch >actual &&
	test_line_count = 1 actual

fatal: external diff died, stopping at file
ok 13 - difftool stops on error with --trust-exit-code

expecting success of 7800.14 'difftool honors exit status if command not found': 
	test_config difftool.nonexistent.cmd i-dont-exist &&
	test_config difftool.trustExitCode false &&
	test_must_fail git difftool -y -t nonexistent branch

/<<PKGBUILDDIR>>/git-difftool--helper: 1: eval: i-dont-exist: not found
fatal: external diff died, stopping at file
ok 14 - difftool honors exit status if command not found

expecting success of 7800.15 'difftool honors --gui': 
	difftool_test_setup &&
	test_config merge.tool bogus-tool &&
	test_config diff.tool bogus-tool &&
	test_config diff.guitool test-tool &&

	echo branch >expect &&
	git difftool --no-prompt --gui branch >actual &&
	test_cmp expect actual

ok 15 - difftool honors --gui

expecting success of 7800.16 'difftool --gui last setting wins': 
	difftool_test_setup &&
	: >expect &&
	git difftool --no-prompt --gui --no-gui >actual &&
	test_cmp expect actual &&

	test_config merge.tool bogus-tool &&
	test_config diff.tool bogus-tool &&
	test_config diff.guitool test-tool &&
	echo branch >expect &&
	git difftool --no-prompt --no-gui --gui branch >actual &&
	test_cmp expect actual

ok 16 - difftool --gui last setting wins

expecting success of 7800.17 'difftool --gui works without configured diff.guitool': 
	difftool_test_setup &&
	echo branch >expect &&
	git difftool --no-prompt --gui branch >actual &&
	test_cmp expect actual

ok 17 - difftool --gui works without configured diff.guitool

expecting success of 7800.18 'GIT_DIFF_TOOL variable': 
	difftool_test_setup &&
	git config --unset diff.tool &&
	echo branch >expect &&
	GIT_DIFF_TOOL=test-tool git difftool --no-prompt branch >actual &&
	test_cmp expect actual

ok 18 - GIT_DIFF_TOOL variable

expecting success of 7800.19 'GIT_DIFF_TOOL overrides': 
	difftool_test_setup &&
	test_config diff.tool bogus-tool &&
	test_config merge.tool bogus-tool &&

	echo branch >expect &&
	GIT_DIFF_TOOL=test-tool git difftool --no-prompt branch >actual &&
	test_cmp expect actual &&

	test_config diff.tool bogus-tool &&
	test_config merge.tool bogus-tool &&
	GIT_DIFF_TOOL=bogus-tool \
		git difftool --no-prompt --tool=test-tool branch >actual &&
	test_cmp expect actual

ok 19 - GIT_DIFF_TOOL overrides

expecting success of 7800.20 'GIT_DIFFTOOL_NO_PROMPT variable': 
	difftool_test_setup &&
	echo branch >expect &&
	GIT_DIFFTOOL_NO_PROMPT=true git difftool branch >actual &&
	test_cmp expect actual

ok 20 - GIT_DIFFTOOL_NO_PROMPT variable

expecting success of 7800.21 'GIT_DIFFTOOL_PROMPT variable': 
	difftool_test_setup &&
	test_config difftool.prompt false &&
	echo >input &&
	GIT_DIFFTOOL_PROMPT=true git difftool branch <input >output &&
	prompt=$(tail -1 <output) &&
	prompt_given "$prompt"

ok 21 - GIT_DIFFTOOL_PROMPT variable

expecting success of 7800.22 'difftool.prompt config variable is false': 
	difftool_test_setup &&
	test_config difftool.prompt false &&
	echo branch >expect &&
	git difftool branch >actual &&
	test_cmp expect actual

ok 22 - difftool.prompt config variable is false

expecting success of 7800.23 'difftool merge.prompt = false': 
	difftool_test_setup &&
	test_might_fail git config --unset difftool.prompt &&
	test_config mergetool.prompt false &&
	echo branch >expect &&
	git difftool branch >actual &&
	test_cmp expect actual

ok 23 - difftool merge.prompt = false

expecting success of 7800.24 'difftool.prompt can overridden with -y': 
	difftool_test_setup &&
	test_config difftool.prompt true &&
	echo branch >expect &&
	git difftool -y branch >actual &&
	test_cmp expect actual

ok 24 - difftool.prompt can overridden with -y

expecting success of 7800.25 'difftool.prompt can overridden with --prompt': 
	difftool_test_setup &&
	test_config difftool.prompt false &&
	echo >input &&
	git difftool --prompt branch <input >output &&
	prompt=$(tail -1 <output) &&
	prompt_given "$prompt"

ok 25 - difftool.prompt can overridden with --prompt

expecting success of 7800.26 'difftool last flag wins': 
	difftool_test_setup &&
	echo branch >expect &&
	git difftool --prompt --no-prompt branch >actual &&
	test_cmp expect actual &&
	echo >input &&
	git difftool --no-prompt --prompt branch <input >output &&
	prompt=$(tail -1 <output) &&
	prompt_given "$prompt"

ok 26 - difftool last flag wins

expecting success of 7800.27 'difftool + mergetool config variables': 
	test_config merge.tool test-tool &&
	test_config mergetool.test-tool.cmd "cat \$LOCAL" &&
	echo branch >expect &&
	git difftool --no-prompt branch >actual &&
	test_cmp expect actual &&
	git difftool --gui --no-prompt branch >actual &&
	test_cmp expect actual &&

	# set merge.tool to something bogus, diff.tool to test-tool
	test_config merge.tool bogus-tool &&
	test_config diff.tool test-tool &&
	git difftool --no-prompt branch >actual &&
	test_cmp expect actual &&
	git difftool --gui --no-prompt branch >actual &&
	test_cmp expect actual &&

	# set merge.tool, diff.tool to something bogus, merge.guitool to test-tool
	test_config diff.tool bogus-tool &&
	test_config merge.guitool test-tool &&
	git difftool --gui --no-prompt branch >actual &&
	test_cmp expect actual &&

	# set merge.tool, diff.tool, merge.guitool to something bogus, diff.guitool to test-tool
	test_config merge.guitool bogus-tool &&
	test_config diff.guitool test-tool &&
	git difftool --gui --no-prompt branch >actual &&
	test_cmp expect actual

ok 27 - difftool + mergetool config variables

expecting success of 7800.28 'difftool.<tool>.path': 
	test_config difftool.tkdiff.path echo &&
	git difftool --tool=tkdiff --no-prompt branch >output &&
	grep file output >grep-output &&
	test_line_count = 1 grep-output

ok 28 - difftool.<tool>.path

expecting success of 7800.29 'difftool --extcmd=cat': 
	echo branch >expect &&
	echo main >>expect &&
	git difftool --no-prompt --extcmd=cat branch >actual &&
	test_cmp expect actual

ok 29 - difftool --extcmd=cat

expecting success of 7800.30 'difftool --extcmd cat': 
	echo branch >expect &&
	echo main >>expect &&
	git difftool --no-prompt --extcmd=cat branch >actual &&
	test_cmp expect actual

ok 30 - difftool --extcmd cat

expecting success of 7800.31 'difftool -x cat': 
	echo branch >expect &&
	echo main >>expect &&
	git difftool --no-prompt -x cat branch >actual &&
	test_cmp expect actual

ok 31 - difftool -x cat

expecting success of 7800.32 'difftool --extcmd echo arg1': 
	echo file >expect &&
	git difftool --no-prompt \
		--extcmd sh\ -c\ \"echo\ \$1\" branch >actual &&
	test_cmp expect actual

ok 32 - difftool --extcmd echo arg1

expecting success of 7800.33 'difftool --extcmd cat arg1': 
	echo main >expect &&
	git difftool --no-prompt \
		--extcmd sh\ -c\ \"cat\ \$1\" branch >actual &&
	test_cmp expect actual

ok 33 - difftool --extcmd cat arg1

expecting success of 7800.34 'difftool --extcmd cat arg2': 
	echo branch >expect &&
	git difftool --no-prompt \
		--extcmd sh\ -c\ \"cat\ \\\"\$2\\\"\" branch >actual &&
	test_cmp expect actual

ok 34 - difftool --extcmd cat arg2

expecting success of 7800.35 'setup with 2 files different': 
	echo m2 >file2 &&
	git add file2 &&
	git commit -m "added file2" &&

	git checkout branch &&
	echo br2 >file2 &&
	git add file2 &&
	git commit -a -m "branch changed file2" &&
	git checkout main

[main 91db1b7] added file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Switched to branch 'branch'
[branch c006c9e] branch changed file2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
Switched to branch 'main'
ok 35 - setup with 2 files different

expecting success of 7800.36 'say no to the first file': 
	(echo n && echo) >input &&
	git difftool -x cat branch <input >output &&
	grep m2 output &&
	grep br2 output &&
	! grep main output &&
	! grep branch output

m2
Launch 'cat' [Y/n]? br2
ok 36 - say no to the first file

expecting success of 7800.37 'say no to the second file': 
	(echo && echo n) >input &&
	git difftool -x cat branch <input >output &&
	grep main output &&
	grep branch output &&
	! grep m2 output &&
	! grep br2 output

main
Launch 'cat' [Y/n]? branch
ok 37 - say no to the second file

expecting success of 7800.38 'ending prompt input with EOF': 
	git difftool -x cat branch </dev/null >output &&
	! grep main output &&
	! grep branch output &&
	! grep m2 output &&
	! grep br2 output

ok 38 - ending prompt input with EOF

expecting success of 7800.39 'difftool --tool-help': 
	git difftool --tool-help >output &&
	grep tool output

No suitable tool for 'git difftool --tool=<tool>' found.
The following tools are valid, but not currently available:
Some of the tools listed above only work in a windowed
ok 39 - difftool --tool-help

expecting success of 7800.40 'setup change in subdirectory': 
	git checkout main &&
	mkdir sub &&
	echo main >sub/sub &&
	git add sub/sub &&
	git commit -m "added sub/sub" &&
	git tag v1 &&
	echo test >>file &&
	echo test >>sub/sub &&
	git add file sub/sub &&
	git commit -m "modified both"

Already on 'main'
[main 5b8dc00] added sub/sub
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/sub
[main cc298da] modified both
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
ok 40 - setup change in subdirectory

expecting success of 7800.41 'difftool -d with growing paths': 
	a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
	git init growing &&
	(
		cd growing &&
		echo "test -f \"\$2/b\"" | write_script .git/test-for-b.sh &&
		one=$(printf 1 | git hash-object -w --stdin) &&
		two=$(printf 2 | git hash-object -w --stdin) &&
		git update-index --add \
			--cacheinfo 100644,$one,$a --cacheinfo 100644,$two,b &&
		tree1=$(git write-tree) &&
		git update-index --add \
			--cacheinfo 100644,$two,$a --cacheinfo 100644,$one,b &&
		tree2=$(git write-tree) &&
		git checkout -- $a &&
		git difftool -d --extcmd .git/test-for-b.sh $tree1 $tree2
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/growing/.git/
ok 41 - difftool -d with growing paths

expecting success of 7800.42 'difftool -d --no-symlinks': 
		symlinks=--no-symlinks &&
		
	git difftool -d $symlinks --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 42 - difftool -d --no-symlinks

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 7800.43 'difftool -d --symlinks': 
		symlinks=--symlinks &&
		
	git difftool -d $symlinks --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 43 - difftool -d --symlinks

expecting success of 7800.44 'difftool --dir-diff --no-symlinks': 
		symlinks=--no-symlinks &&
		
	git difftool --dir-diff $symlinks --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 44 - difftool --dir-diff --no-symlinks

expecting success of 7800.45 'difftool --dir-diff --symlinks': 
		symlinks=--symlinks &&
		
	git difftool --dir-diff $symlinks --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 45 - difftool --dir-diff --symlinks

expecting success of 7800.46 'difftool --dir-diff avoids repeated slashes in TMPDIR --no-symlinks': 
		symlinks=--no-symlinks &&
		
	TMPDIR="${TMPDIR:-/tmp}////" \
		git difftool --dir-diff $symlinks --extcmd echo branch >output &&
	grep -v // output >actual &&
	test_line_count = 1 actual

	
ok 46 - difftool --dir-diff avoids repeated slashes in TMPDIR --no-symlinks

expecting success of 7800.47 'difftool --dir-diff avoids repeated slashes in TMPDIR --symlinks': 
		symlinks=--symlinks &&
		
	TMPDIR="${TMPDIR:-/tmp}////" \
		git difftool --dir-diff $symlinks --extcmd echo branch >output &&
	grep -v // output >actual &&
	test_line_count = 1 actual

	
ok 47 - difftool --dir-diff avoids repeated slashes in TMPDIR --symlinks

expecting success of 7800.48 'difftool --dir-diff ignores --prompt --no-symlinks': 
		symlinks=--no-symlinks &&
		
	git difftool --dir-diff $symlinks --prompt --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 48 - difftool --dir-diff ignores --prompt --no-symlinks

expecting success of 7800.49 'difftool --dir-diff ignores --prompt --symlinks': 
		symlinks=--symlinks &&
		
	git difftool --dir-diff $symlinks --prompt --extcmd ls branch >output &&
	grep "^sub$" output &&
	grep "^file$" output

	
sub
file
file
ok 49 - difftool --dir-diff ignores --prompt --symlinks

expecting success of 7800.50 'difftool --dir-diff branch from subdirectory --no-symlinks': 
		symlinks=--no-symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls branch >output &&
		# "sub" must only exist in "right"
		# "file" and "file2" must be listed in both "left" and "right"
		grep "^sub$" output >sub-output &&
		test_line_count = 1 sub-output &&
		grep "^file$" output >file-output &&
		test_line_count = 2 file-output &&
		grep "^file2$" output >file2-output &&
		test_line_count = 2 file2-output
	)

	
ok 50 - difftool --dir-diff branch from subdirectory --no-symlinks

expecting success of 7800.51 'difftool --dir-diff branch from subdirectory --symlinks': 
		symlinks=--symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls branch >output &&
		# "sub" must only exist in "right"
		# "file" and "file2" must be listed in both "left" and "right"
		grep "^sub$" output >sub-output &&
		test_line_count = 1 sub-output &&
		grep "^file$" output >file-output &&
		test_line_count = 2 file-output &&
		grep "^file2$" output >file2-output &&
		test_line_count = 2 file2-output
	)

	
ok 51 - difftool --dir-diff branch from subdirectory --symlinks

expecting success of 7800.52 'difftool --dir-diff v1 from subdirectory --no-symlinks': 
		symlinks=--no-symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls v1 >output &&
		# "sub" and "file" exist in both v1 and HEAD.
		# "file2" is unchanged.
		grep "^sub$" output >sub-output &&
		test_line_count = 2 sub-output &&
		grep "^file$" output >file-output &&
		test_line_count = 2 file-output &&
		! grep "^file2$" output
	)

	
ok 52 - difftool --dir-diff v1 from subdirectory --no-symlinks

expecting success of 7800.53 'difftool --dir-diff v1 from subdirectory --symlinks': 
		symlinks=--symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls v1 >output &&
		# "sub" and "file" exist in both v1 and HEAD.
		# "file2" is unchanged.
		grep "^sub$" output >sub-output &&
		test_line_count = 2 sub-output &&
		grep "^file$" output >file-output &&
		test_line_count = 2 file-output &&
		! grep "^file2$" output
	)

	
ok 53 - difftool --dir-diff v1 from subdirectory --symlinks

expecting success of 7800.54 'difftool --dir-diff branch from subdirectory w/ pathspec --no-symlinks': 
		symlinks=--no-symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls branch -- .>output &&
		# "sub" only exists in "right"
		# "file" and "file2" must not be listed
		grep "^sub$" output >sub-output &&
		test_line_count = 1 sub-output &&
		! grep "^file$" output
	)

	
ok 54 - difftool --dir-diff branch from subdirectory w/ pathspec --no-symlinks

expecting success of 7800.55 'difftool --dir-diff branch from subdirectory w/ pathspec --symlinks': 
		symlinks=--symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls branch -- .>output &&
		# "sub" only exists in "right"
		# "file" and "file2" must not be listed
		grep "^sub$" output >sub-output &&
		test_line_count = 1 sub-output &&
		! grep "^file$" output
	)

	
ok 55 - difftool --dir-diff branch from subdirectory w/ pathspec --symlinks

expecting success of 7800.56 'difftool --dir-diff v1 from subdirectory w/ pathspec --no-symlinks': 
		symlinks=--no-symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls v1 -- .>output &&
		# "sub" exists in v1 and HEAD
		# "file" is filtered out by the pathspec
		grep "^sub$" output >sub-output &&
		test_line_count = 2 sub-output &&
		! grep "^file$" output
	)

	
ok 56 - difftool --dir-diff v1 from subdirectory w/ pathspec --no-symlinks

expecting success of 7800.57 'difftool --dir-diff v1 from subdirectory w/ pathspec --symlinks': 
		symlinks=--symlinks &&
		
	(
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls v1 -- .>output &&
		# "sub" exists in v1 and HEAD
		# "file" is filtered out by the pathspec
		grep "^sub$" output >sub-output &&
		test_line_count = 2 sub-output &&
		! grep "^file$" output
	)

	
ok 57 - difftool --dir-diff v1 from subdirectory w/ pathspec --symlinks

expecting success of 7800.58 'difftool --dir-diff from subdirectory with GIT_DIR set --no-symlinks': 
		symlinks=--no-symlinks &&
		
	(
		GIT_DIR=$(pwd)/.git &&
		export GIT_DIR &&
		GIT_WORK_TREE=$(pwd) &&
		export GIT_WORK_TREE &&
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls \
			branch -- sub >output &&
		grep "^sub$" output &&
		! grep "^file$" output
	)

	
sub
ok 58 - difftool --dir-diff from subdirectory with GIT_DIR set --no-symlinks

expecting success of 7800.59 'difftool --dir-diff from subdirectory with GIT_DIR set --symlinks': 
		symlinks=--symlinks &&
		
	(
		GIT_DIR=$(pwd)/.git &&
		export GIT_DIR &&
		GIT_WORK_TREE=$(pwd) &&
		export GIT_WORK_TREE &&
		cd sub &&
		git difftool --dir-diff $symlinks --extcmd ls \
			branch -- sub >output &&
		grep "^sub$" output &&
		! grep "^file$" output
	)

	
sub
ok 59 - difftool --dir-diff from subdirectory with GIT_DIR set --symlinks

expecting success of 7800.60 'difftool --dir-diff when worktree file is missing --no-symlinks': 
		symlinks=--no-symlinks &&
		
	test_when_finished git reset --hard &&
	rm file2 &&
	git difftool --dir-diff $symlinks --extcmd ls branch main >output &&
	grep "^file2$" output

	
file2
file2
HEAD is now at cc298da modified both
ok 60 - difftool --dir-diff when worktree file is missing --no-symlinks

expecting success of 7800.61 'difftool --dir-diff when worktree file is missing --symlinks': 
		symlinks=--symlinks &&
		
	test_when_finished git reset --hard &&
	rm file2 &&
	git difftool --dir-diff $symlinks --extcmd ls branch main >output &&
	grep "^file2$" output

	
file2
file2
HEAD is now at cc298da modified both
ok 61 - difftool --dir-diff when worktree file is missing --symlinks

expecting success of 7800.62 'difftool --dir-diff with unmerged files --no-symlinks': 
		symlinks=--no-symlinks &&
		
	test_when_finished git reset --hard &&
	test_config difftool.echo.cmd "echo ok" &&
	git checkout -B conflict-a &&
	git checkout -B conflict-b &&
	git checkout conflict-a &&
	echo a >>file &&
	git add file &&
	git commit -m conflict-a &&
	git checkout conflict-b &&
	echo b >>file &&
	git add file &&
	git commit -m conflict-b &&
	git checkout main &&
	git merge conflict-a &&
	test_must_fail git merge conflict-b &&
	cat >expect <<-EOF &&
		ok
	EOF
	git difftool --dir-diff $symlinks -t echo >actual &&
	test_cmp expect actual

	
Switched to a new branch 'conflict-a'
Switched to a new branch 'conflict-b'
Switched to branch 'conflict-a'
[conflict-a d4705f3] conflict-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'conflict-b'
[conflict-b de5cfa1] conflict-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Updating cc298da..d4705f3
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at d4705f3 conflict-a
ok 62 - difftool --dir-diff with unmerged files --no-symlinks

expecting success of 7800.63 'difftool --dir-diff with unmerged files --symlinks': 
		symlinks=--symlinks &&
		
	test_when_finished git reset --hard &&
	test_config difftool.echo.cmd "echo ok" &&
	git checkout -B conflict-a &&
	git checkout -B conflict-b &&
	git checkout conflict-a &&
	echo a >>file &&
	git add file &&
	git commit -m conflict-a &&
	git checkout conflict-b &&
	echo b >>file &&
	git add file &&
	git commit -m conflict-b &&
	git checkout main &&
	git merge conflict-a &&
	test_must_fail git merge conflict-b &&
	cat >expect <<-EOF &&
		ok
	EOF
	git difftool --dir-diff $symlinks -t echo >actual &&
	test_cmp expect actual

	
Switched to and reset branch 'conflict-a'
Switched to and reset branch 'conflict-b'
Switched to branch 'conflict-a'
[conflict-a f0c8de2] conflict-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'conflict-b'
[conflict-b 74d2100] conflict-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'main'
Updating d4705f3..f0c8de2
Fast-forward
 file | 1 +
 1 file changed, 1 insertion(+)
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at f0c8de2 conflict-a
ok 63 - difftool --dir-diff with unmerged files --symlinks

expecting success of 7800.64 'difftool --dir-diff --symlinks without unstaged changes': 
	cat >expect <<-EOF &&
	file
	$PWD/file
	file2
	$PWD/file2
	sub/sub
	$PWD/sub/sub
	EOF
	git difftool --dir-diff --symlinks \
		--extcmd "./.git/CHECK_SYMLINKS" branch HEAD &&
	test_cmp expect actual

ok 64 - difftool --dir-diff --symlinks without unstaged changes

expecting success of 7800.65 'difftool --dir-diff syncs worktree with unstaged change --no-symlinks': 
		symlinks=--no-symlinks &&
		
	test_when_finished git reset --hard &&
	echo "orig content" >file &&
	git difftool -d $symlinks --extcmd "$PWD/modify-right-file" branch &&
	echo "new content" >expect &&
	test_cmp expect file

	
HEAD is now at f0c8de2 conflict-a
ok 65 - difftool --dir-diff syncs worktree with unstaged change --no-symlinks

expecting success of 7800.66 'difftool --dir-diff syncs worktree with unstaged change --symlinks': 
		symlinks=--symlinks &&
		
	test_when_finished git reset --hard &&
	echo "orig content" >file &&
	git difftool -d $symlinks --extcmd "$PWD/modify-right-file" branch &&
	echo "new content" >expect &&
	test_cmp expect file

	
HEAD is now at f0c8de2 conflict-a
ok 66 - difftool --dir-diff syncs worktree with unstaged change --symlinks

expecting success of 7800.67 'difftool --dir-diff syncs worktree without unstaged change --no-symlinks': 
		symlinks=--no-symlinks &&
		
	test_when_finished git reset --hard &&
	git difftool -d $symlinks --extcmd "$PWD/modify-right-file" branch &&
	echo "new content" >expect &&
	test_cmp expect file

	
HEAD is now at f0c8de2 conflict-a
ok 67 - difftool --dir-diff syncs worktree without unstaged change --no-symlinks

expecting success of 7800.68 'difftool --dir-diff syncs worktree without unstaged change --symlinks': 
		symlinks=--symlinks &&
		
	test_when_finished git reset --hard &&
	git difftool -d $symlinks --extcmd "$PWD/modify-right-file" branch &&
	echo "new content" >expect &&
	test_cmp expect file

	
HEAD is now at f0c8de2 conflict-a
ok 68 - difftool --dir-diff syncs worktree without unstaged change --symlinks

expecting success of 7800.69 'difftool --no-symlinks does not overwrite working tree file ': 
	echo "orig content" >file &&
	git difftool --dir-diff --no-symlinks --extcmd "$PWD/modify-file" branch &&
	echo "new content" >expect &&
	test_cmp expect file

ok 69 - difftool --no-symlinks does not overwrite working tree file 

expecting success of 7800.70 'difftool --no-symlinks detects conflict ': 
	(
		TMPDIR=$TRASH_DIRECTORY &&
		export TMPDIR &&
		echo "orig content" >file &&
		test_must_fail git difftool --dir-diff --no-symlinks --extcmd "$PWD/modify-both-files" branch &&
		echo "wt content" >expect &&
		test_cmp expect file &&
		echo "tmp content" >expect &&
		test_cmp expect "$(cat tmpdir)/file"
	)

warning: both files modified: '/<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/file' and '/<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/git-difftool.cpvseO/right/file'.
warning: working tree file has been left.
warning: 
warning: temporary files exist in '/<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/git-difftool.cpvseO'.
warning: you may want to cleanup or recover these.
ok 70 - difftool --no-symlinks detects conflict 

expecting success of 7800.71 'difftool properly honors gitlink and core.worktree': 
	test_when_finished rm -rf submod/ule &&
	test_config_global protocol.file.allow always &&
	git submodule add ./. submod/ule &&
	test_config -C submod/ule diff.tool checktrees &&
	test_config -C submod/ule difftool.checktrees.cmd '
		test -d "$LOCAL" && test -d "$REMOTE" && echo good
		' &&
	(
		cd submod/ule &&
		echo good >expect &&
		git difftool --tool=checktrees --dir-diff HEAD~ >actual &&
		test_cmp expect actual &&
		rm -f expect actual
	)

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/submod/ule'...
done.
ok 71 - difftool properly honors gitlink and core.worktree

expecting success of 7800.72 'difftool --dir-diff symlinked directories': 
	test_when_finished git reset --hard &&
	git init dirlinks &&
	(
		cd dirlinks &&
		git config diff.tool checktrees &&
		git config difftool.checktrees.cmd "echo good" &&
		mkdir foo &&
		: >foo/bar &&
		git add foo/bar &&
		test_commit symlink-one &&
		ln -s foo link &&
		git add link &&
		test_commit symlink-two &&
		echo good >expect &&
		git difftool --tool=checktrees --dir-diff HEAD~ >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/dirlinks/.git/
[main (root-commit) f38528f] symlink-one
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 foo/bar
 create mode 100644 symlink-one.t
[main 669ece0] symlink-two
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 120000 link
 create mode 100644 symlink-two.t
HEAD is now at f0c8de2 conflict-a
ok 72 - difftool --dir-diff symlinked directories

expecting success of 7800.73 'difftool --dir-diff handles modified symlinks': 
	test_when_finished git reset --hard &&
	touch b &&
	ln -s b c &&
	git add b c &&
	test_tick &&
	git commit -m initial &&
	touch d &&
	rm c &&
	ln -s d c &&
	cat >expect <<-EOF &&
		c

		c
	EOF
	git difftool --symlinks --dir-diff --extcmd ls >output &&
	grep -v ^/ output >actual &&
	test_cmp expect actual &&

	git difftool --no-symlinks --dir-diff --extcmd ls >output &&
	grep -v ^/ output >actual &&
	test_cmp expect actual &&

	# The left side contains symlink "c" that points to "b"
	test_config difftool.cat.cmd "cat \$LOCAL/c" &&
	printf "%s\n" b >expect &&

	git difftool --symlinks --dir-diff --tool cat >actual &&
	test_cmp expect actual &&

	git difftool --symlinks --no-symlinks --dir-diff --tool cat >actual &&
	test_cmp expect actual &&

	# The right side contains symlink "c" that points to "d"
	test_config difftool.cat.cmd "cat \$REMOTE/c" &&
	printf "%s\n" d >expect &&

	git difftool --symlinks --dir-diff --tool cat >actual &&
	test_cmp expect actual &&

	git difftool --no-symlinks --dir-diff --tool cat >actual &&
	test_cmp expect actual &&

	# Deleted symlinks
	rm -f c &&
	cat >expect <<-EOF &&
		c

	EOF
	git difftool --symlinks --dir-diff --extcmd ls >output &&
	grep -v ^/ output >actual &&
	test_cmp expect actual &&

	git difftool --no-symlinks --dir-diff --extcmd ls >output &&
	grep -v ^/ output >actual &&
	test_cmp expect actual

[main 8845cd2] initial
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 b
 create mode 120000 c
HEAD is now at 8845cd2 initial
ok 73 - difftool --dir-diff handles modified symlinks

expecting success of 7800.74 'difftool --dir-diff writes symlinks as raw text': 
	# Start out on a branch called "branch-init".
	git init -b branch-init symlink-files &&
	(
		cd symlink-files &&
		# This test ensures that symlinks are written as raw text.
		# The "cat" tools output link and file contents.
		git config difftool.cat-left-link.cmd "cat \"\$LOCAL/link\"" &&
		git config difftool.cat-left-a.cmd "cat \"\$LOCAL/file-a\"" &&
		git config difftool.cat-right-link.cmd "cat \"\$REMOTE/link\"" &&
		git config difftool.cat-right-b.cmd "cat \"\$REMOTE/file-b\"" &&

		# Record the empty initial state so that we can come back here
		# later and not have to consider the any cases where difftool
		# will create symlinks back into the worktree.
		test_tick &&
		git commit --allow-empty -m init &&

		# Create a file called "file-a" with a symlink pointing to it.
		git switch -c branch-a &&
		echo a >file-a &&
		ln -s file-a link &&
		git add file-a link &&
		test_tick &&
		git commit -m link-to-file-a &&

		# Create a file called "file-b" and point the symlink to it.
		git switch -c branch-b &&
		echo b >file-b &&
		rm link &&
		ln -s file-b link &&
		git add file-b link &&
		git rm file-a &&
		test_tick &&
		git commit -m link-to-file-b &&

		# Checkout the initial branch so that the --symlinks behavior is
		# not activated. The two directories should be completely
		# independent with no symlinks pointing back here.
		git switch branch-init &&

		# The left link must be "file-a" and "file-a" must contain "a".
		echo file-a >expect &&
		git difftool --symlinks --dir-diff --tool cat-left-link \
			branch-a branch-b >actual &&
		test_cmp expect actual &&

		echo a >expect &&
		git difftool --symlinks --dir-diff --tool cat-left-a \
			branch-a branch-b >actual &&
		test_cmp expect actual &&

		# The right link must be "file-b" and "file-b" must contain "b".
		echo file-b >expect &&
		git difftool --symlinks --dir-diff --tool cat-right-link \
			branch-a branch-b >actual &&
		test_cmp expect actual &&

		echo b >expect &&
		git difftool --symlinks --dir-diff --tool cat-right-b \
			branch-a branch-b >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7800-difftool/symlink-files/.git/
[branch-init (root-commit) 88c0d10] init
 Author: A U Thor <author@example.com>
Switched to a new branch 'branch-a'
[branch-a 8d69823] link-to-file-a
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file-a
 create mode 120000 link
Switched to a new branch 'branch-b'
rm 'file-a'
[branch-b 3157a3f] link-to-file-b
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 file-a
 create mode 100644 file-b
Switched to branch 'branch-init'
ok 74 - difftool --dir-diff writes symlinks as raw text

expecting success of 7800.75 'add -N and difftool -d': 
	test_when_finished git reset --hard &&

	test_write_lines A B C >intent-to-add &&
	git add -N intent-to-add &&
	git difftool --dir-diff --extcmd ls

/tmp/git-difftool.UlFaqM/left/:

/tmp/git-difftool.UlFaqM/right/:
intent-to-add
HEAD is now at 8845cd2 initial
ok 75 - add -N and difftool -d

expecting success of 7800.76 'difftool --cached with unmerged files': 
	test_when_finished git reset --hard &&

	test_commit conflicting &&
	test_commit conflict-a conflict.t a &&
	git reset --hard conflicting &&
	test_commit conflict-b conflict.t b &&
	test_must_fail git merge conflict-a &&

	git difftool --cached --no-prompt >output &&
	test_must_be_empty output

[main c96db15] conflicting
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflicting.t
[main 9ef2780] conflict-a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.t
HEAD is now at c96db15 conflicting
[main 5616f6a] conflict-b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 conflict.t
warning: refname 'conflict-a' is ambiguous.
warning: refname 'conflict-a' is ambiguous.
Auto-merging conflict.t
CONFLICT (add/add): Merge conflict in conflict.t
Automatic merge failed; fix conflicts and then commit the result.

This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
kompare emerge vimdiff nvimdiff
No known diff tool is available.
HEAD is now at 5616f6a conflict-b
ok 76 - difftool --cached with unmerged files

expecting success of 7800.77 'outside worktree': 
	echo 1 >1 &&
	echo 2 >2 &&
	test_expect_code 1 nongit git \
		-c diff.tool=echo -c difftool.echo.cmd="echo \$LOCAL \$REMOTE" \
		difftool --no-prompt --no-index ../1 ../2 >actual &&
	echo "../1 ../2" >expect &&
	test_cmp expect actual

ok 77 - outside worktree

expecting success of 7800.78 'difftool --gui, --tool and --extcmd are mutually exclusive': 
	difftool_test_setup &&
	test_must_fail git difftool --gui --tool=test-tool &&
	test_must_fail git difftool --gui --extcmd=cat &&
	test_must_fail git difftool --tool=test-tool --extcmd=cat &&
	test_must_fail git difftool --gui --tool=test-tool --extcmd=cat

fatal: options '--gui' and '--tool' cannot be used together
fatal: options '--gui' and '--extcmd' cannot be used together
fatal: options '--tool' and '--extcmd' cannot be used together
fatal: options '--gui', '--tool', and '--extcmd' cannot be used together
ok 78 - difftool --gui, --tool and --extcmd are mutually exclusive

expecting success of 7800.79 'difftool --rotate-to': 
	difftool_test_setup &&
	test_when_finished git reset --hard &&
	echo 1 >1 &&
	echo 2 >2 &&
	echo 4 >4 &&
	git add 1 2 4 &&
	git commit -a -m "124" &&
	git difftool --no-prompt --extcmd=cat --rotate-to="2" HEAD^ >output &&
	cat >expect <<-\EOF &&
	2
	4
	1
	EOF
	test_cmp output expect

[main fd7dd6f] 124
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 4
HEAD is now at fd7dd6f 124
ok 79 - difftool --rotate-to

expecting success of 7800.80 'difftool --skip-to': 
	difftool_test_setup &&
	test_when_finished git reset --hard &&
	git difftool --no-prompt --extcmd=cat --skip-to="2" HEAD^ >output &&
	cat >expect <<-\EOF &&
	2
	4
	EOF
	test_cmp output expect

HEAD is now at fd7dd6f 124
ok 80 - difftool --skip-to

expecting success of 7800.81 'difftool --rotate/skip-to error condition': 
	test_must_fail git difftool --no-prompt --extcmd=cat --rotate-to="3" HEAD^ &&
	test_must_fail git difftool --no-prompt --extcmd=cat --skip-to="3" HEAD^

fatal: No such path '3' in the diff
fatal: No such path '3' in the diff
ok 81 - difftool --rotate/skip-to error condition

# passed all 81 test(s)
1..81
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7817-grep-sparse-checkout.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7817-grep-sparse-checkout/.git/
expecting success of 7817.1 'setup': 
	echo "text" >a &&
	echo "text" >b &&
	mkdir dir &&
	echo "text" >dir/c &&

	git init sub &&
	(
		cd sub &&
		mkdir A B &&
		echo "text" >A/a &&
		echo "text" >B/b &&
		git add A B &&
		git commit -m sub &&
		git sparse-checkout init --cone &&
		git sparse-checkout set B
	) &&

	git init sub2 &&
	(
		cd sub2 &&
		echo "text" >a &&
		git add a &&
		git commit -m sub2
	) &&

	git submodule add ./sub &&
	git submodule add ./sub2 &&
	git add a b dir &&
	git commit -m super &&
	git sparse-checkout init --no-cone &&
	git sparse-checkout set "/*" "!b" "!/*/" "sub" &&

	git tag -am tag-to-commit tag-to-commit HEAD &&
	tree=$(git rev-parse HEAD^{tree}) &&
	git tag -am tag-to-tree tag-to-tree $tree &&

	test_path_is_missing b &&
	test_path_is_missing dir &&
	test_path_is_missing sub/A &&
	test_path_is_file a &&
	test_path_is_file sub/B/b &&
	test_path_is_file sub2/a &&
	git branch -m main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7817-grep-sparse-checkout/sub/.git/
[master (root-commit) e98dfe7] sub
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 A/a
 create mode 100644 B/b
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7817-grep-sparse-checkout/sub2/.git/
[master (root-commit) 4767315] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 a
Adding existing repo at 'sub' to the index
Adding existing repo at 'sub2' to the index
[master (root-commit) 26900e7] super
 Author: A U Thor <author@example.com>
 6 files changed, 11 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 a
 create mode 100644 b
 create mode 100644 dir/c
 create mode 160000 sub
 create mode 160000 sub2
warning: unable to rmdir 'sub': Directory not empty
warning: unable to rmdir 'sub2': Directory not empty
warning: pass a leading slash before paths such as 'sub' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual).
warning: unable to rmdir 'sub2': Directory not empty
ok 1 - setup

expecting success of 7817.2 'working tree grep honors sparse checkout': 
	cat >expect <<-EOF &&
	a:text
	b:new-text
	EOF
	test_when_finished "rm -f b" &&
	echo "new-text" >b &&
	git grep "text" >actual &&
	test_cmp expect actual

ok 2 - working tree grep honors sparse checkout

expecting success of 7817.3 'grep searches unmerged file despite not matching sparsity patterns': 
	cat >expect <<-EOF &&
	b:modified-b-in-branchX
	b:modified-b-in-branchY
	EOF
	test_when_finished "test_might_fail git merge --abort && \
			    git checkout main && git sparse-checkout init" &&

	git sparse-checkout disable &&
	git checkout -b branchY main &&
	test_commit modified-b-in-branchY b &&
	git checkout -b branchX main &&
	test_commit modified-b-in-branchX b &&

	git sparse-checkout init &&
	test_path_is_missing b &&
	test_must_fail git merge branchY &&
	git grep "modified-b" >actual &&
	test_cmp expect actual

Switched to a new branch 'branchY'
[branchY 69623d1] modified-b-in-branchY
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'branchX'
[branchX 2555150] modified-b-in-branchX
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unable to rmdir 'sub2': Directory not empty
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unable to rmdir 'sub2': Directory not empty
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
Auto-merging b
CONFLICT (content): Merge conflict in b
Automatic merge failed; fix conflicts and then commit the result.
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unable to rmdir 'sub2': Directory not empty
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unable to rmdir 'sub2': Directory not empty
Switched to branch 'main'
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unable to rmdir 'sub2': Directory not empty
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 3 - grep searches unmerged file despite not matching sparsity patterns

expecting success of 7817.4 'grep --cached searches entries with the SKIP_WORKTREE bit': 
	cat >expect <<-EOF &&
	a:text
	b:text
	dir/c:text
	EOF
	git grep --cached "text" >actual &&
	test_cmp expect actual

warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 4 - grep --cached searches entries with the SKIP_WORKTREE bit

expecting success of 7817.5 'grep --recurse-submodules honors sparse checkout in submodule': 
	cat >expect <<-EOF &&
	a:text
	sub/B/b:text
	sub2/a:text
	EOF
	git update-index --skip-worktree sub2 &&
	git grep --recurse-submodules "text" >actual &&
	test_cmp expect actual

warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 5 - grep --recurse-submodules honors sparse checkout in submodule

expecting success of 7817.6 'grep --recurse-submodules --cached searches entries with the SKIP_WORKTREE bit': 
	cat >expect <<-EOF &&
	a:text
	b:text
	dir/c:text
	sub/A/a:text
	sub/B/b:text
	sub2/a:text
	EOF
	git grep --recurse-submodules --cached "text" >actual &&
	test_cmp expect actual

warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 6 - grep --recurse-submodules --cached searches entries with the SKIP_WORKTREE bit

expecting success of 7817.7 'working tree grep does not search the index with CE_VALID and SKIP_WORKTREE': 
	cat >expect <<-EOF &&
	a:text
	EOF
	test_when_finished "git update-index --no-assume-unchanged b" &&
	git update-index --assume-unchanged b &&
	git grep text >actual &&
	test_cmp expect actual

warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 7 - working tree grep does not search the index with CE_VALID and SKIP_WORKTREE

expecting success of 7817.8 'grep --cached searches index entries with both CE_VALID and SKIP_WORKTREE': 
	cat >expect <<-EOF &&
	a:text
	b:text
	dir/c:text
	EOF
	test_when_finished "git update-index --no-assume-unchanged b" &&
	git update-index --assume-unchanged b &&
	git grep --cached text >actual &&
	test_cmp expect actual

warning: unrecognized pattern: 'b'
warning: disabling cone pattern matching
ok 8 - grep --cached searches index entries with both CE_VALID and SKIP_WORKTREE

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7816-grep-binary-pattern.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7816-grep-binary-pattern/.git/
# lib-gettext: No is_IS UTF-8 locale available
# lib-gettext: No is_IS ISO-8859-1 locale available
expecting success of 7816.1 'setup': 
	echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
	git add a &&
	git commit -m.

[master (root-commit) 8fc33fb] .
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
ok 1 - setup

expecting success of 7816.2 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>f' a': 
			>stderr &&
			printf 'yQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 2 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>f' a

expecting success of 7816.3 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>f' a': 
			>stderr &&
			printf 'yQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 3 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>f' a

ok 4 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'y<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.5 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>x' a': 
			>stderr &&
			printf 'yQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 5 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>x' a

expecting success of 7816.6 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>x' a': 
			>stderr &&
			printf 'yQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 6 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>x' a

ok 7 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'y<NUL>x' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.8 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>f' a': 
			>stderr &&
			printf 'YQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 8 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>f' a

expecting success of 7816.9 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>f' a': 
			>stderr &&
			printf 'YQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 9 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>f' a

ok 10 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Y<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.11 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>x' a': 
			>stderr &&
			printf 'YQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 11 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>x' a

expecting success of 7816.12 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>x' a': 
			>stderr &&
			printf 'YQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 12 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>x' a

ok 13 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Y<NUL>x' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.14 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>f' a': 
			>stderr &&
			printf 'yQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 14 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>f' a

expecting success of 7816.15 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>f' a': 
			>stderr &&
			printf 'yQf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 15 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>f' a

ok 16 # skip LC_ALL='' git grep -P -f f  'y<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.17 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>x' a': 
			>stderr &&
			printf 'yQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 17 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>x' a

expecting success of 7816.18 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>x' a': 
			>stderr &&
			printf 'yQx' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 18 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>x' a

ok 19 # skip LC_ALL='' git grep -P -f f  'y<NUL>x' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.20 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>ð' a': 
			>stderr &&
			printf 'æQð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 20 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>ð' a

expecting success of 7816.21 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>ð' a': 
			>stderr &&
			printf 'æQð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 21 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>ð' a

ok 22 # skip LC_ALL='' git grep -P -f f  'æ<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.23 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'e<NUL>m[*]c' a': 
			>stderr &&
			printf 'eQm[*]c' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 23 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'e<NUL>m[*]c' a

expecting success of 7816.24 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'e<NUL>m[*]c' a': 
			>stderr &&
			printf 'eQm[*]c' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 24 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'e<NUL>m[*]c' a

ok 25 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'e<NUL>m[*]c' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.26 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'E<NUL>M[*]C' a': 
			>stderr &&
			printf 'EQM[*]C' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 26 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'E<NUL>M[*]C' a

expecting success of 7816.27 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'E<NUL>M[*]C' a': 
			>stderr &&
			printf 'EQM[*]C' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 27 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'E<NUL>M[*]C' a

ok 28 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'E<NUL>M[*]C' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.29 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 29 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a

expecting success of 7816.30 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 30 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a

ok 31 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'y<NUL>[f]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.32 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[y]<NUL>f' a': 
			>stderr &&
			printf '[y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 32 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[y]<NUL>f' a

expecting success of 7816.33 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[y]<NUL>f' a': 
			>stderr &&
			printf '[y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 33 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[y]<NUL>f' a

ok 34 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F '[y]<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.35 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 35 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a

expecting success of 7816.36 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 36 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a

ok 37 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Y<NUL>[F]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.38 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi '[Y]<NUL>F' a': 
			>stderr &&
			printf '[Y]QF' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 38 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi '[Y]<NUL>F' a

expecting success of 7816.39 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi '[Y]<NUL>F' a': 
			>stderr &&
			printf '[Y]QF' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 39 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi '[Y]<NUL>F' a

ok 40 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi '[Y]<NUL>F' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.41 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 41 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a

expecting success of 7816.42 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 42 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a

ok 43 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'æ<NUL>[ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.44 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[æ]<NUL>ð' a': 
			>stderr &&
			printf '[æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 44 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[æ]<NUL>ð' a

expecting success of 7816.45 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[æ]<NUL>ð' a': 
			>stderr &&
			printf '[æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 45 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F '[æ]<NUL>ð' a

ok 46 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F '[æ]<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.47 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>ð' a': 
			>stderr &&
			printf '[æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 47 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>ð' a

expecting success of 7816.48 'LC_ALL='C' git grep -P -f f -i '[æ]<NUL>ð' a': 
			printf '[æ]Qð' | q_to_nul >f &&
			LC_ALL='C' git grep -P -f f -i a
		
Binary file a matches
ok 48 - LC_ALL='C' git grep -P -f f -i '[æ]<NUL>ð' a

ok 49 # skip LC_ALL='' git grep -P -f f -i '[æ]<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.50 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 50 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a

expecting success of 7816.51 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 51 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a

ok 52 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Æ<NUL>[Ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.53 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 53 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a

expecting success of 7816.54 'LC_ALL='C' git grep -P -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -P -f f -i a 2>stderr &&
			test_i18ngrep ! 'This is only supported with -P under PCRE v2' stderr
		
ok 54 - LC_ALL='C' git grep -P -f f -i 'Æ<NUL>[Ð]' a

ok 55 # skip LC_ALL='' git grep -P -f f -i 'Æ<NUL>[Ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.56 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>Ð' a': 
			>stderr &&
			printf '[Æ]QÐ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 56 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>Ð' a

expecting success of 7816.57 'LC_ALL='C' git grep -P -f f -i '[Æ]<NUL>Ð' a': 
			>stderr &&
			printf '[Æ]QÐ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -P -f f -i a 2>stderr &&
			test_i18ngrep ! 'This is only supported with -P under PCRE v2' stderr
		
ok 57 - LC_ALL='C' git grep -P -f f -i '[Æ]<NUL>Ð' a

ok 58 # skip LC_ALL='' git grep -P -f f -i '[Æ]<NUL>Ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.59 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>ð' a': 
			>stderr &&
			printf '[Æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 59 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>ð' a

expecting success of 7816.60 'LC_ALL='C' git grep -P -f f -i '[Æ]<NUL>ð' a': 
			>stderr &&
			printf '[Æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -P -f f -i a 2>stderr &&
			test_i18ngrep ! 'This is only supported with -P under PCRE v2' stderr
		
ok 60 - LC_ALL='C' git grep -P -f f -i '[Æ]<NUL>ð' a

ok 61 # skip LC_ALL='' git grep -P -f f -i '[Æ]<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.62 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>Ð' a': 
			>stderr &&
			printf 'ÆQÐ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 62 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>Ð' a

expecting success of 7816.63 'LC_ALL='C' git grep -P -f f -i 'Æ<NUL>Ð' a': 
			>stderr &&
			printf 'ÆQÐ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -P -f f -i a 2>stderr &&
			test_i18ngrep ! 'This is only supported with -P under PCRE v2' stderr
		
ok 63 - LC_ALL='C' git grep -P -f f -i 'Æ<NUL>Ð' a

ok 64 # skip LC_ALL='' git grep -P -f f -i 'Æ<NUL>Ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.65 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 65 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>[f]' a

expecting success of 7816.66 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 66 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>[f]' a

ok 67 # skip LC_ALL='' git grep -P -f f  'y<NUL>[f]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.68 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '[y]<NUL>f' a': 
			>stderr &&
			printf '[y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 68 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '[y]<NUL>f' a

expecting success of 7816.69 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '[y]<NUL>f' a': 
			>stderr &&
			printf '[y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 69 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '[y]<NUL>f' a

ok 70 # skip LC_ALL='' git grep -P -f f  '[y]<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.71 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 71 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>[F]' a

expecting success of 7816.72 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 72 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>[F]' a

ok 73 # skip LC_ALL='' git grep -P -f f -i 'Y<NUL>[F]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.74 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Y]<NUL>f' a': 
			>stderr &&
			printf '[Y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 74 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Y]<NUL>f' a

expecting success of 7816.75 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Y]<NUL>f' a': 
			>stderr &&
			printf '[Y]Qf' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 75 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Y]<NUL>f' a

ok 76 # skip LC_ALL='' git grep -P -f f -i '[Y]<NUL>f' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.77 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 77 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>[ð]' a

expecting success of 7816.78 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 78 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'æ<NUL>[ð]' a

ok 79 # skip LC_ALL='' git grep -P -f f  'æ<NUL>[ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.80 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '[æ]<NUL>ð' a': 
			>stderr &&
			printf '[æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 80 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '[æ]<NUL>ð' a

expecting success of 7816.81 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '[æ]<NUL>ð' a': 
			>stderr &&
			printf '[æ]Qð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 81 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '[æ]<NUL>ð' a

ok 82 # skip LC_ALL='' git grep -P -f f  '[æ]<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.83 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 83 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a

expecting success of 7816.84 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 84 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a

ok 85 # skip LC_ALL='' git grep -P -f f -i 'Æ<NUL>[Ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.86 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m.*c<NUL>' a': 
			>stderr &&
			printf 'eQm.*cQ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 86 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m.*c<NUL>' a

expecting success of 7816.87 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m.*c<NUL>' a': 
			>stderr &&
			printf 'eQm.*cQ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 87 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m.*c<NUL>' a

ok 88 # skip LC_ALL='' git grep -P -f f  'e<NUL>m.*c<NUL>' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.89 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M.*c<NUL>' a': 
			>stderr &&
			printf 'EQM.*cQ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 89 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M.*c<NUL>' a

expecting success of 7816.90 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M.*c<NUL>' a': 
			>stderr &&
			printf 'EQM.*cQ' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 90 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M.*c<NUL>' a

ok 91 # skip LC_ALL='' git grep -P -f f -i 'E<NUL>M.*c<NUL>' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.92 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m[*]c' a': 
			>stderr &&
			printf 'eQm[*]c' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 92 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m[*]c' a

expecting success of 7816.93 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m[*]c' a': 
			>stderr &&
			printf 'eQm[*]c' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 93 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'e<NUL>m[*]c' a

ok 94 # skip LC_ALL='' git grep -P -f f  'e<NUL>m[*]c' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.95 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M[*]C' a': 
			>stderr &&
			printf 'EQM[*]C' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 95 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M[*]C' a

expecting success of 7816.96 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M[*]C' a': 
			>stderr &&
			printf 'EQM[*]C' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 96 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'E<NUL>M[*]C' a

ok 97 # skip LC_ALL='' git grep -P -f f -i 'E<NUL>M[*]C' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.98 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'NOMATCH<NUL>ð' a': 
			>stderr &&
			printf 'NOMATCHQð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 98 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'NOMATCH<NUL>ð' a

expecting success of 7816.99 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'NOMATCH<NUL>ð' a': 
			>stderr &&
			printf 'NOMATCHQð' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 99 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'NOMATCH<NUL>ð' a

ok 100 # skip LC_ALL='' git grep -P -f f -i 'NOMATCH<NUL>ð' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.101 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>NOMATCH' a': 
			>stderr &&
			printf '[Æ]QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 101 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>NOMATCH' a

expecting success of 7816.102 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>NOMATCH' a': 
			>stderr &&
			printf '[Æ]QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 102 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[Æ]<NUL>NOMATCH' a

ok 103 # skip LC_ALL='' git grep -P -f f -i '[Æ]<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.104 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>NOMATCH' a': 
			>stderr &&
			printf '[æ]QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 104 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>NOMATCH' a

expecting success of 7816.105 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>NOMATCH' a': 
			>stderr &&
			printf '[æ]QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 105 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '[æ]<NUL>NOMATCH' a

ok 106 # skip LC_ALL='' git grep -P -f f -i '[æ]<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.107 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 107 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a

expecting success of 7816.108 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a': 
			>stderr &&
			printf 'yQ[f]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 108 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'y<NUL>[f]' a

ok 109 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'y<NUL>[f]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.110 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 110 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a

expecting success of 7816.111 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a': 
			>stderr &&
			printf 'YQ[F]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 111 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Y<NUL>[F]' a

ok 112 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Y<NUL>[F]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.113 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NOMATCH' a': 
			>stderr &&
			printf 'yQNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 113 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NOMATCH' a

expecting success of 7816.114 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NOMATCH' a': 
			>stderr &&
			printf 'yQNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 114 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NOMATCH' a

ok 115 # skip LC_ALL='' git grep -P -f f  'y<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.116 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NOMATCH' a': 
			>stderr &&
			printf 'QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 116 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NOMATCH' a

expecting success of 7816.117 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NOMATCH' a': 
			>stderr &&
			printf 'QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 117 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NOMATCH' a

ok 118 # skip LC_ALL='' git grep -P -f f  '<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.119 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NOMATCH' a': 
			>stderr &&
			printf 'YQNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 119 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NOMATCH' a

expecting success of 7816.120 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NOMATCH' a': 
			>stderr &&
			printf 'YQNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 120 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NOMATCH' a

ok 121 # skip LC_ALL='' git grep -P -f f -i 'Y<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.122 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NOMATCH' a': 
			>stderr &&
			printf 'QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 122 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NOMATCH' a

expecting success of 7816.123 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NOMATCH' a': 
			>stderr &&
			printf 'QNOMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 123 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NOMATCH' a

ok 124 # skip LC_ALL='' git grep -P -f f -i '<NUL>NOMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.125 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 125 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a

expecting success of 7816.126 'error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a': 
			>stderr &&
			printf 'æQ[ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -F a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 126 - error, PCRE v2 only: LC_ALL='C' git grep -f f -F 'æ<NUL>[ð]' a

ok 127 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -F 'æ<NUL>[ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.128 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 128 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a

expecting success of 7816.129 'error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -Fi a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 129 - error, PCRE v2 only: LC_ALL='C' git grep -f f -Fi 'Æ<NUL>[Ð]' a

ok 130 # skip error, PCRE v2 only: LC_ALL='' git grep -f f -Fi 'Æ<NUL>[Ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.131 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 131 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a

expecting success of 7816.132 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a': 
			>stderr &&
			printf 'ÆQ[Ð]' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 132 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Æ<NUL>[Ð]' a

ok 133 # skip LC_ALL='' git grep -P -f f -i 'Æ<NUL>[Ð]' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.134 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'yQNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 134 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NÓMATCH' a

expecting success of 7816.135 'error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'yQNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 135 - error, PCRE v2 only: LC_ALL='C' git grep -f f  'y<NUL>NÓMATCH' a

ok 136 # skip LC_ALL='' git grep -P -f f  'y<NUL>NÓMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.137 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'QNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 137 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NÓMATCH' a

expecting success of 7816.138 'error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'QNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f  a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 138 - error, PCRE v2 only: LC_ALL='C' git grep -f f  '<NUL>NÓMATCH' a

ok 139 # skip LC_ALL='' git grep -P -f f  '<NUL>NÓMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.140 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'YQNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 140 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NÓMATCH' a

expecting success of 7816.141 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'YQNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 141 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i 'Y<NUL>NÓMATCH' a

ok 142 # skip LC_ALL='' git grep -P -f f -i 'Y<NUL>NÓMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

expecting success of 7816.143 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'QNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 143 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NÓMATCH' a

expecting success of 7816.144 'error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NÓMATCH' a': 
			>stderr &&
			printf 'QNÓMATCH' | q_to_nul >f &&
			test_must_fail env LC_ALL="C" git grep -f f -i a 2>stderr &&
			test_i18ngrep 'This is only supported with -P under PCRE v2' stderr
		
fatal: given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2
ok 144 - error, PCRE v2 only: LC_ALL='C' git grep -f f -i '<NUL>NÓMATCH' a

ok 145 # skip LC_ALL='' git grep -P -f f -i '<NUL>NÓMATCH' a (missing GETTEXT_LOCALE of LIBPCRE2,GETTEXT_LOCALE)

# passed all 145 test(s)
1..145
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8001-annotate.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8001-annotate/.git/
expecting success of 8001.1 'setup A lines': 
	echo "1A quick brown fox jumps over the" >file &&
	echo "lazy dog" >>file &&
	git add file &&
	GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \
	git commit -a -m "Initial."

[main (root-commit) 129283d] Initial.
 Author: A <A@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
ok 1 - setup A lines

expecting success of 8001.2 'blame 1 author': 
	check_count A 2

git annotate  file 
Author A (expected 2, attributed 2) good
ok 2 - blame 1 author

expecting success of 8001.3 'blame in a bare repo without starting commit': 
	git clone --bare . bare.git &&
	(
		cd bare.git &&
		check_count A 2
	)

Cloning into bare repository 'bare.git'...
done.
git annotate  file 
Author A (expected 2, attributed 2) good
ok 3 - blame in a bare repo without starting commit

expecting success of 8001.4 'blame by tag objects': 
	git tag -m "test tag" testTag &&
	git tag -m "test tag #2" testTag2 testTag &&
	check_count -h testTag A 2 &&
	check_count -h testTag2 A 2

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f testTag2 testTag^{}
hint: Disable this message with "git config advice.nestedTag false"
git annotate  file testTag
Author A (expected 2, attributed 2) good
git annotate  file testTag2
Author A (expected 2, attributed 2) good
ok 4 - blame by tag objects

expecting success of 8001.5 'setup B lines': 
	echo "2A quick brown fox jumps over the" >>file &&
	echo "lazy dog" >>file &&
	GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \
	git commit -a -m "Second."

[main 7e31098] Second.
 Author: B <B@test.git>
 1 file changed, 2 insertions(+)
ok 5 - setup B lines

expecting success of 8001.6 'blame 2 authors': 
	check_count A 2 B 2

git annotate  file 
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
ok 6 - blame 2 authors

expecting success of 8001.7 'setup B1 lines (branch1)': 
	git checkout -b branch1 main &&
	echo "3A slow green fox jumps into the" >>file &&
	echo "well." >>file &&
	GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" \
	git commit -a -m "Branch1-1"

Switched to a new branch 'branch1'
[branch1 1b9b47a] Branch1-1
 Author: B1 <B1@test.git>
 1 file changed, 2 insertions(+)
ok 7 - setup B1 lines (branch1)

expecting success of 8001.8 'blame 2 authors + 1 branch1 author': 
	check_count A 2 B 2 B1 2

git annotate  file 
Author B (expected 2, attributed 2) good
Author B1 (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
ok 8 - blame 2 authors + 1 branch1 author

expecting success of 8001.9 'setup B2 lines (branch2)': 
	git checkout -b branch2 main &&
	sed -e "s/2A quick brown/4A quick brown lazy dog/" <file >file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" \
	git commit -a -m "Branch2-1"

Switched to a new branch 'branch2'
[branch2 7d77deb] Branch2-1
 Author: B2 <B2@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - setup B2 lines (branch2)

expecting success of 8001.10 'blame 2 authors + 1 branch2 author': 
	check_count A 2 B 1 B2 1

git annotate  file 
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
ok 10 - blame 2 authors + 1 branch2 author

expecting success of 8001.11 'merge branch1 & branch2': 
	git merge branch1

Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 ++
 1 file changed, 2 insertions(+)
ok 11 - merge branch1 & branch2

expecting success of 8001.12 'blame 2 authors + 2 merged-in authors': 
	check_count A 2 B 1 B1 2 B2 1

git annotate  file 
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B1 (expected 2, attributed 2) good
ok 12 - blame 2 authors + 2 merged-in authors

expecting success of 8001.13 'blame --first-parent blames merge for branch1': 
	check_count --first-parent A 2 B 1 "A U Thor" 2 B2 1

git annotate  --first-parent file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author A U Thor (expected 2, attributed 2) good
ok 13 - blame --first-parent blames merge for branch1

expecting success of 8001.14 'blame ancestor': 
	check_count -h main A 2 B 2

git annotate  file main
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
ok 14 - blame ancestor

expecting success of 8001.15 'blame great-ancestor': 
	check_count -h main^ A 2

git annotate  file main^
Author A (expected 2, attributed 2) good
ok 15 - blame great-ancestor

expecting success of 8001.16 'setup evil merge': 
	echo "evil merge." >>file &&
	git commit -a --amend

[branch2 c413b3e] Merge branch 'branch1' into branch2
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
ok 16 - setup evil merge

expecting success of 8001.17 'blame evil merge': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1

git annotate  file 
Author A U Thor (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
ok 17 - blame evil merge

expecting success of 8001.18 'blame huge graft': 
	test_when_finished "git checkout branch2" &&
	test_when_finished "rm -rf .git/info" &&
	graft= &&
	for i in 0 1 2
	do
		for j in 0 1 2 3 4 5 6 7 8 9
		do
			git checkout --orphan "$i$j" &&
			printf "%s\n" "$i" "$j" >file &&
			test_tick &&
			GIT_AUTHOR_NAME=$i$j GIT_AUTHOR_EMAIL=$i$j@test.git \
			git commit -a -m "$i$j" &&
			commit=$(git rev-parse --verify HEAD) &&
			graft="$graft$commit " || return 1
		done
	done &&
	mkdir .git/info &&
	printf "%s " $graft >.git/info/grafts &&
	check_count -h 00 01 1 10 1

Switched to a new branch '00'
[00 (root-commit) e2c6177] 00
 Author: 00 <00@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '01'
[01 (root-commit) 0dbe04b] 01
 Author: 01 <01@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '02'
[02 (root-commit) 97fbca6] 02
 Author: 02 <02@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '03'
[03 (root-commit) 5cdbcd8] 03
 Author: 03 <03@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '04'
[04 (root-commit) 5a154cf] 04
 Author: 04 <04@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '05'
[05 (root-commit) a84e1de] 05
 Author: 05 <05@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '06'
[06 (root-commit) d4bea54] 06
 Author: 06 <06@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '07'
[07 (root-commit) 24ba6e8] 07
 Author: 07 <07@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '08'
[08 (root-commit) fe90088] 08
 Author: 08 <08@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '09'
[09 (root-commit) 773a2fb] 09
 Author: 09 <09@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '10'
[10 (root-commit) 80536e5] 10
 Author: 10 <10@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '11'
[11 (root-commit) 33c07c1] 11
 Author: 11 <11@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '12'
[12 (root-commit) ae7094b] 12
 Author: 12 <12@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '13'
[13 (root-commit) 19e767d] 13
 Author: 13 <13@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '14'
[14 (root-commit) f7159ac] 14
 Author: 14 <14@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '15'
[15 (root-commit) d95fecf] 15
 Author: 15 <15@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '16'
[16 (root-commit) d8bfdb9] 16
 Author: 16 <16@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '17'
[17 (root-commit) aa3f31e] 17
 Author: 17 <17@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '18'
[18 (root-commit) d76cb1d] 18
 Author: 18 <18@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '19'
[19 (root-commit) 95e03c5] 19
 Author: 19 <19@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '20'
[20 (root-commit) d40a964] 20
 Author: 20 <20@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '21'
[21 (root-commit) 6c3def2] 21
 Author: 21 <21@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '22'
[22 (root-commit) 78d2294] 22
 Author: 22 <22@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '23'
[23 (root-commit) 76a64d0] 23
 Author: 23 <23@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '24'
[24 (root-commit) 59f234a] 24
 Author: 24 <24@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '25'
[25 (root-commit) 26ac47a] 25
 Author: 25 <25@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '26'
[26 (root-commit) db7e855] 26
 Author: 26 <26@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '27'
[27 (root-commit) 279f565] 27
 Author: 27 <27@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '28'
[28 (root-commit) f691d9c] 28
 Author: 28 <28@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '29'
[29 (root-commit) c72134e] 29
 Author: 29 <29@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
git annotate  file 00
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Author 01 (expected 1, attributed 1) good
Author 10 (expected 1, attributed 1) good
Switched to branch 'branch2'
ok 18 - blame huge graft

expecting success of 8001.19 'setup incomplete line': 
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" \
	git commit -a -m "Incomplete"

[branch2 565fef5] Incomplete
 Author: C <C@test.git>
 1 file changed, 1 insertion(+)
ok 19 - setup incomplete line

expecting success of 8001.20 'blame incomplete line': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1

git annotate  file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author C (expected 1, attributed 1) good
Author B1 (expected 2, attributed 2) good
Author A U Thor (expected 1, attributed 1) good
ok 20 - blame incomplete line

expecting success of 8001.21 'setup edits': 
	mv file file.orig &&
	{
		cat file.orig &&
		echo
	} | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" >file &&
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" \
	git commit -a -m "edit"

[branch2 96588b8] edit
 Author: D <D@test.git>
 1 file changed, 1 insertion(+), 2 deletions(-)
ok 21 - setup edits

expecting success of 8001.22 'blame edits': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1

git annotate  file 
Author A U Thor (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 22 - blame edits

expecting success of 8001.23 'setup obfuscated email': 
	echo "No robots allowed" >file.new &&
	cat file >>file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" \
	git commit -a -m "norobots"

[branch2 04f7693] norobots
 Author: E <E at test dot git>
 1 file changed, 1 insertion(+)
ok 23 - setup obfuscated email

expecting success of 8001.24 'blame obfuscated email': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  file 
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 24 - blame obfuscated email

expecting success of 8001.25 'blame -L 1 (all)': 
	check_count -L1 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  -L1 file 
Author A U Thor (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 25 - blame -L 1 (all)

expecting success of 8001.26 'blame -L , (all)': 
	check_count -L, A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  -L, file 
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 26 - blame -L , (all)

expecting success of 8001.27 'blame -L X (X to end)': 
	check_count -L5 B1 1 C 1 D 1 "A U Thor" 1

git annotate  -L5 file 
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 27 - blame -L X (X to end)

expecting success of 8001.28 'blame -L X, (X to end)': 
	check_count -L5, B1 1 C 1 D 1 "A U Thor" 1

git annotate  -L5, file 
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 28 - blame -L X, (X to end)

expecting success of 8001.29 'blame -L ,Y (up to Y)': 
	check_count -L,3 A 1 B2 1 E 1

git annotate  -L,3 file 
Author E (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 29 - blame -L ,Y (up to Y)

expecting success of 8001.30 'blame -L X,X': 
	check_count -L3,3 B2 1

git annotate  -L3,3 file 
Author B2 (expected 1, attributed 1) good
ok 30 - blame -L X,X

expecting success of 8001.31 'blame -L X,Y': 
	check_count -L3,6 B 1 B1 1 B2 1 D 1

git annotate  -L3,6 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 31 - blame -L X,Y

expecting success of 8001.32 'blame -L Y,X (undocumented)': 
	check_count -L6,3 B 1 B1 1 B2 1 D 1

git annotate  -L6,3 file 
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 32 - blame -L Y,X (undocumented)

expecting success of 8001.33 'blame -L -X': 
	test_must_fail $PROG -L-1 file

fatal: -L invalid line number: -1
ok 33 - blame -L -X

expecting success of 8001.34 'blame -L 0': 
	test_must_fail $PROG -L0 file

fatal: -L invalid line number: 0
ok 34 - blame -L 0

expecting success of 8001.35 'blame -L ,0': 
	test_must_fail $PROG -L,0 file

fatal: -L invalid line number: 0
ok 35 - blame -L ,0

expecting success of 8001.36 'blame -L ,+0': 
	test_must_fail $PROG -L,+0 file

fatal: -L invalid empty range
ok 36 - blame -L ,+0

expecting success of 8001.37 'blame -L X,+0': 
	test_must_fail $PROG -L1,+0 file

fatal: -L invalid empty range
ok 37 - blame -L X,+0

expecting success of 8001.38 'blame -L X,+1': 
	check_count -L3,+1 B2 1

git annotate  -L3,+1 file 
Author B2 (expected 1, attributed 1) good
ok 38 - blame -L X,+1

expecting success of 8001.39 'blame -L X,+N': 
	check_count -L3,+4 B 1 B1 1 B2 1 D 1

git annotate  -L3,+4 file 
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 39 - blame -L X,+N

expecting success of 8001.40 'blame -L ,-0': 
	test_must_fail $PROG -L,-0 file

fatal: -L invalid empty range
ok 40 - blame -L ,-0

expecting success of 8001.41 'blame -L X,-0': 
	test_must_fail $PROG -L1,-0 file

fatal: -L invalid empty range
ok 41 - blame -L X,-0

expecting success of 8001.42 'blame -L X,-1': 
	check_count -L3,-1 B2 1

git annotate  -L3,-1 file 
Author B2 (expected 1, attributed 1) good
ok 42 - blame -L X,-1

expecting success of 8001.43 'blame -L X,-N': 
	check_count -L6,-4 B 1 B1 1 B2 1 D 1

git annotate  -L6,-4 file 
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 43 - blame -L X,-N

expecting success of 8001.44 'blame -L /RE/ (RE to end)': 
	check_count -L/evil/ C 1 "A U Thor" 1

git annotate  -L/evil/ file 
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 44 - blame -L /RE/ (RE to end)

expecting success of 8001.45 'blame -L /RE/,/RE2/': 
	check_count -L/robot/,/green/ A 1 B 1 B2 1 D 1 E 1

git annotate  -L/robot/,/green/ file 
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 45 - blame -L /RE/,/RE2/

expecting success of 8001.46 'blame -L X,/RE/': 
	check_count -L5,/evil/ B1 1 D 1 "A U Thor" 1

git annotate  -L5,/evil/ file 
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 46 - blame -L X,/RE/

expecting success of 8001.47 'blame -L /RE/,Y': 
	check_count -L/99/,7 B1 1 D 1 "A U Thor" 1

git annotate  -L/99/,7 file 
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 47 - blame -L /RE/,Y

expecting success of 8001.48 'blame -L /RE/,+N': 
	check_count -L/99/,+3 B1 1 D 1 "A U Thor" 1

git annotate  -L/99/,+3 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 48 - blame -L /RE/,+N

expecting success of 8001.49 'blame -L /RE/,-N': 
	check_count -L/99/,-3 B 1 B2 1 D 1

git annotate  -L/99/,-3 file 
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 49 - blame -L /RE/,-N

expecting success of 8001.50 'blame -L X (X == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n C 1

git annotate  -L8 file 
Author C (expected 1, attributed 1) good
ok 50 - blame -L X (X == nlines)

expecting success of 8001.51 'blame -L X (X == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	test_must_fail $PROG -L$n file

fatal: file file has only 8 lines
ok 51 - blame -L X (X == nlines + 1)

expecting success of 8001.52 'blame -L X (X > nlines)': 
	test_must_fail $PROG -L12345 file

fatal: file file has only 8 lines
ok 52 - blame -L X (X > nlines)

expecting success of 8001.53 'blame -L ,Y (Y == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  -L,8 file 
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 53 - blame -L ,Y (Y == nlines)

expecting success of 8001.54 'blame -L ,Y (Y == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  -L,9 file 
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 54 - blame -L ,Y (Y == nlines + 1)

expecting success of 8001.55 'blame -L ,Y (Y > nlines)': 
	check_count -L,12345 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git annotate  -L,12345 file 
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 55 - blame -L ,Y (Y > nlines)

expecting success of 8001.56 'blame -L multiple (disjoint)': 
	check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1

git annotate  -L2,3 -L6,7 file 
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 56 - blame -L multiple (disjoint)

expecting success of 8001.57 'blame -L multiple (disjoint: unordered)': 
	check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1

git annotate  -L6,7 -L2,3 file 
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 57 - blame -L multiple (disjoint: unordered)

expecting success of 8001.58 'blame -L multiple (adjacent)': 
	check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1

git annotate  -L2,3 -L4,5 file 
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 58 - blame -L multiple (adjacent)

expecting success of 8001.59 'blame -L multiple (adjacent: unordered)': 
	check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1

git annotate  -L4,5 -L2,3 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 59 - blame -L multiple (adjacent: unordered)

expecting success of 8001.60 'blame -L multiple (overlapping)': 
	check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1

git annotate  -L2,4 -L3,5 file 
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 60 - blame -L multiple (overlapping)

expecting success of 8001.61 'blame -L multiple (overlapping: unordered)': 
	check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1

git annotate  -L3,5 -L2,4 file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 61 - blame -L multiple (overlapping: unordered)

expecting success of 8001.62 'blame -L multiple (superset/subset)': 
	check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git annotate  -L2,8 -L3,5 file 
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 62 - blame -L multiple (superset/subset)

expecting success of 8001.63 'blame -L multiple (superset/subset: unordered)': 
	check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git annotate  -L3,5 -L2,8 file 
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 63 - blame -L multiple (superset/subset: unordered)

expecting success of 8001.64 'blame -L /RE/ (relative)': 
	check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1

git annotate  -L3,3 -L/fox/ file 
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 64 - blame -L /RE/ (relative)

expecting success of 8001.65 'blame -L /RE/ (relative: no preceding range)': 
	check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git annotate  -L/dog/ file 
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 65 - blame -L /RE/ (relative: no preceding range)

expecting success of 8001.66 'blame -L /RE/ (relative: adjacent)': 
	check_count -L1,1 -L/dog/,+1 A 1 E 1

git annotate  -L1,1 -L/dog/,+1 file 
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
ok 66 - blame -L /RE/ (relative: adjacent)

expecting success of 8001.67 'blame -L /RE/ (relative: not found)': 
	test_must_fail $PROG -L4,4 -L/dog/ file

fatal: -L parameter 'dog' starting at line 5: No match
ok 67 - blame -L /RE/ (relative: not found)

expecting success of 8001.68 'blame -L /RE/ (relative: end-of-file)': 
	test_must_fail $PROG -L, -L/$/ file

fatal: file file has only 8 lines
ok 68 - blame -L /RE/ (relative: end-of-file)

expecting success of 8001.69 'blame -L ^/RE/ (absolute)': 
	check_count -L3,3 -L^/dog/,+2 A 1 B2 1

git annotate  -L3,3 -L^/dog/,+2 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 69 - blame -L ^/RE/ (absolute)

expecting success of 8001.70 'blame -L ^/RE/ (absolute: no preceding range)': 
	check_count -L^/dog/,+2 A 1 B2 1

git annotate  -L^/dog/,+2 file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 70 - blame -L ^/RE/ (absolute: no preceding range)

expecting success of 8001.71 'blame -L ^/RE/ (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^/tambourine/ file

fatal: -L parameter 'tambourine' starting at line 1: No match
ok 71 - blame -L ^/RE/ (absolute: not found)

expecting success of 8001.72 'blame -L ^/RE/ (absolute: end-of-file)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n -L^/$/,+2 A 1 C 1 E 1

git annotate  -L8 -L^/$/,+2 file 
Author C (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
ok 72 - blame -L ^/RE/ (absolute: end-of-file)

expecting success of 8001.73 'setup -L :regex': 
	tr Q "\\t" >hello.c <<-\EOF &&
	int main(int argc, const char *argv[])
	{
	Qputs("hello");
	}
	EOF
	git add hello.c &&
	GIT_AUTHOR_NAME="F" GIT_AUTHOR_EMAIL="F@test.git" \
	git commit -m "hello" &&

	mv hello.c hello.orig &&
	sed -e "/}/ {x; s/$/Qputs(\"goodbye\");/; G;}" <hello.orig |
	tr Q "\\t" >hello.c &&
	GIT_AUTHOR_NAME="G" GIT_AUTHOR_EMAIL="G@test.git" \
	git commit -a -m "goodbye" &&

	mv hello.c hello.orig &&
	echo "#include <stdio.h>" >hello.c &&
	cat hello.orig >>hello.c &&
	tr Q "\\t" >>hello.c <<-\EOF &&
	void mail()
	{
	Qputs("mail");
	}
	EOF
	GIT_AUTHOR_NAME="H" GIT_AUTHOR_EMAIL="H@test.git" \
	git commit -a -m "mail"

[branch2 f82005e] hello
 Author: F <F@test.git>
 1 file changed, 4 insertions(+)
 create mode 100644 hello.c
[branch2 edbab84] goodbye
 Author: G <G@test.git>
 1 file changed, 1 insertion(+)
[branch2 846166b] mail
 Author: H <H@test.git>
 1 file changed, 5 insertions(+)
ok 73 - setup -L :regex

expecting success of 8001.74 'blame -L :literal': 
	check_count -f hello.c -L:main F 4 G 1

git annotate  -L:main hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 74 - blame -L :literal

expecting success of 8001.75 'blame -L :regex': 
	check_count -f hello.c "-L:m[a-z][a-z]l" H 4

git annotate  -L:m[a-z][a-z]l hello.c 
Author H (expected 4, attributed 4) good
ok 75 - blame -L :regex

expecting success of 8001.76 'blame -L :nomatch': 
	test_must_fail $PROG -L:nomatch hello.c

fatal: -L parameter 'nomatch' starting at line 1: no match
ok 76 - blame -L :nomatch

expecting success of 8001.77 'blame -L :RE (relative)': 
	check_count -f hello.c -L3,3 -L:ma.. F 1 H 4

git annotate  -L3,3 -L:ma.. hello.c 
Author F (expected 1, attributed 1) good
Author H (expected 4, attributed 4) good
ok 77 - blame -L :RE (relative)

expecting success of 8001.78 'blame -L :RE (relative: no preceding range)': 
	check_count -f hello.c -L:ma.. F 4 G 1

git annotate  -L:ma.. hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 78 - blame -L :RE (relative: no preceding range)

expecting success of 8001.79 'blame -L :RE (relative: not found)': 
	test_must_fail $PROG -L3,3 -L:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 4: no match
ok 79 - blame -L :RE (relative: not found)

expecting success of 8001.80 'blame -L :RE (relative: end-of-file)': 
	test_must_fail $PROG -L, -L:main hello.c

fatal: -L parameter 'main' starting at line 11: no match
ok 80 - blame -L :RE (relative: end-of-file)

expecting success of 8001.81 'blame -L ^:RE (absolute)': 
	check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1

git annotate  -L3,3 -L^:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 81 - blame -L ^:RE (absolute)

expecting success of 8001.82 'blame -L ^:RE (absolute: no preceding range)': 
	check_count -f hello.c -L^:ma.. F 4 G 1

git annotate  -L^:ma.. hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 82 - blame -L ^:RE (absolute: no preceding range)

expecting success of 8001.83 'blame -L ^:RE (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 1: no match
ok 83 - blame -L ^:RE (absolute: not found)

expecting success of 8001.84 'blame -L ^:RE (absolute: end-of-file)': 
	n=$(printf "%d" $(wc -l <hello.c)) &&
	check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1

git annotate  -L10 -L^:ma.. hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
Author H (expected 1, attributed 1) good
ok 84 - blame -L ^:RE (absolute: end-of-file)

expecting success of 8001.85 'blame -L :funcname with userdiff driver': 
	cat >file.template <<-\EOF &&
	DO NOT MATCH THIS LINE
	function RIGHT(a, b) result(c)
	AS THE DEFAULT DRIVER WOULD

	integer, intent(in) :: ChangeMe
	EOF

	fortran_file=file.f03 &&
	test_when_finished "rm .gitattributes" &&
	echo "$fortran_file diff=fortran" >.gitattributes &&

	test_commit --author "A <A@test.git>" \
		"add" "$fortran_file" \
		"$(cat file.template)" &&
	test_commit --author "B <B@test.git>" \
		"change" "$fortran_file" \
		"$(cat file.template | sed -e s/ChangeMe/IWasChanged/)" &&
	check_count -f "$fortran_file" -L:RIGHT A 3 B 1

[branch2 6b1b7a1] add
 Author: A <A@test.git>
 1 file changed, 5 insertions(+)
 create mode 100644 file.f03
[branch2 7caa17d] change
 Author: B <B@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
git annotate  -L:RIGHT file.f03 
Author B (expected 1, attributed 1) good
Author A (expected 3, attributed 3) good
ok 85 - blame -L :funcname with userdiff driver

expecting success of 8001.86 'setup incremental': 
	(
	GIT_AUTHOR_NAME=I &&
	export GIT_AUTHOR_NAME &&
	GIT_AUTHOR_EMAIL=I@test.git &&
	export GIT_AUTHOR_EMAIL &&
	>incremental &&
	git add incremental &&
	git commit -m "step 0" &&
	printf "partial" >>incremental &&
	git commit -a -m "step 0.5" &&
	echo >>incremental &&
	git commit -a -m "step 1"
	)

[branch2 6c56eef] step 0
 Author: I <I@test.git>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 incremental
[branch2 c79b19e] step 0.5
 Author: I <I@test.git>
 1 file changed, 1 insertion(+)
[branch2 f65a7a7] step 1
 Author: I <I@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 86 - setup incremental

expecting success of 8001.87 'blame empty': 
	check_count -h HEAD^^ -f incremental

git annotate  incremental HEAD^^
ok 87 - blame empty

expecting success of 8001.88 'blame -L 0 empty': 
	test_must_fail $PROG -L0 incremental HEAD^^

fatal: -L invalid line number: 0
ok 88 - blame -L 0 empty

expecting success of 8001.89 'blame -L 1 empty': 
	test_must_fail $PROG -L1 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 89 - blame -L 1 empty

expecting success of 8001.90 'blame -L 2 empty': 
	test_must_fail $PROG -L2 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 90 - blame -L 2 empty

expecting success of 8001.91 'blame half': 
	check_count -h HEAD^ -f incremental I 1

git annotate  incremental HEAD^
Author I (expected 1, attributed 1) good
ok 91 - blame half

expecting success of 8001.92 'blame -L 0 half': 
	test_must_fail $PROG -L0 incremental HEAD^

fatal: -L invalid line number: 0
ok 92 - blame -L 0 half

expecting success of 8001.93 'blame -L 1 half': 
	check_count -h HEAD^ -f incremental -L1 I 1

git annotate  -L1 incremental HEAD^
Author I (expected 1, attributed 1) good
ok 93 - blame -L 1 half

expecting success of 8001.94 'blame -L 2 half': 
	test_must_fail $PROG -L2 incremental HEAD^

fatal: file incremental has only 1 line
ok 94 - blame -L 2 half

expecting success of 8001.95 'blame -L 3 half': 
	test_must_fail $PROG -L3 incremental HEAD^

fatal: file incremental has only 1 line
ok 95 - blame -L 3 half

expecting success of 8001.96 'blame full': 
	check_count -f incremental I 1

git annotate  incremental 
Author I (expected 1, attributed 1) good
ok 96 - blame full

expecting success of 8001.97 'blame -L 0 full': 
	test_must_fail $PROG -L0 incremental

fatal: -L invalid line number: 0
ok 97 - blame -L 0 full

expecting success of 8001.98 'blame -L 1 full': 
	check_count -f incremental -L1 I 1

git annotate  -L1 incremental 
Author I (expected 1, attributed 1) good
ok 98 - blame -L 1 full

expecting success of 8001.99 'blame -L 2 full': 
	test_must_fail $PROG -L2 incremental

fatal: file incremental has only 1 line
ok 99 - blame -L 2 full

expecting success of 8001.100 'blame -L 3 full': 
	test_must_fail $PROG -L3 incremental

fatal: file incremental has only 1 line
ok 100 - blame -L 3 full

expecting success of 8001.101 'blame -L': 
	test_must_fail $PROG -L file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>

    <rev-opts> are documented in git-rev-list(1)

    --incremental         show blame entries as we find them, incrementally
    -b                    do not show object names of boundary commits (Default: off)
    --root                do not treat root commits as boundaries (Default: off)
    --show-stats          show work cost statistics
    --progress            force progress reporting
    --score-debug         show output score for blame entries
    -f, --show-name       show original filename (Default: auto)
    -n, --show-number     show original linenumber (Default: off)
    -p, --porcelain       show in a format designed for machine consumption
    --line-porcelain      show porcelain format with per-line commit information
    -c                    use the same output mode as git-annotate (Default: off)
    -t                    show raw timestamp (Default: off)
    -l                    show long commit SHA1 (Default: off)
    -s                    suppress author name and timestamp (Default: off)
    -e, --show-email      show author email instead of name (Default: off)
    -w                    ignore whitespace differences
    --ignore-rev <rev>    ignore <rev> when blaming
    --ignore-revs-file <file>
                          ignore revisions from <file>
    --color-lines         color redundant metadata from previous line differently
    --color-by-age        color lines by age
    --minimal             spend extra cycles to find better match
    -S <file>             use revisions from <file> instead of calling git-rev-list
    --contents <file>     use <file>'s contents as the final image
    -C[<score>]           find line copies within and across files
    -M[<score>]           find line movements within and across files
    -L <range>            process only line range <start>,<end> or function :<funcname>
    --abbrev[=<n>]        use <n> digits to display object names

ok 101 - blame -L

expecting success of 8001.102 'blame -L X,+': 
	test_must_fail $PROG -L1,+ file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 102 - blame -L X,+

expecting success of 8001.103 'blame -L X,-': 
	test_must_fail $PROG -L1,- file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 103 - blame -L X,-

expecting success of 8001.104 'blame -L X (non-numeric X)': 
	test_must_fail $PROG -LX file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 104 - blame -L X (non-numeric X)

expecting success of 8001.105 'blame -L X,Y (non-numeric Y)': 
	test_must_fail $PROG -L1,Y file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 105 - blame -L X,Y (non-numeric Y)

expecting success of 8001.106 'blame -L X,+N (non-numeric N)': 
	test_must_fail $PROG -L1,+N file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 106 - blame -L X,+N (non-numeric N)

expecting success of 8001.107 'blame -L X,-N (non-numeric N)': 
	test_must_fail $PROG -L1,-N file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 107 - blame -L X,-N (non-numeric N)

expecting success of 8001.108 'blame -L ,^/RE/': 
	test_must_fail $PROG -L1,^/99/ file

usage: git annotate [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 108 - blame -L ,^/RE/

expecting success of 8001.109 'blame progress on a full file': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (10/10), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

846166ba (H 2005-04-07 15:42:13 -0700  1) #include <stdio.h>
f82005e9 (F 2005-04-07 15:42:13 -0700  2) int main(int argc, const char *argv[])
f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  7) void mail()
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 109 - blame progress on a full file

expecting success of 8001.110 'blame progress on a single range': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (4/4), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700 3) {
f82005e9 (F 2005-04-07 15:42:13 -0700 4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700 5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700 6) }
ok 110 - blame progress on a single range

expecting success of 8001.111 'blame progress on multiple ranges': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (7/7), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 -L 8,10 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 111 - blame progress on multiple ranges

expecting success of 8001.112 'annotate old revision': 
	git annotate file main >actual &&
	awk "{ print \$3; }" <actual >authors &&
	test 2 = $(grep A <authors | wc -l) &&
	test 2 = $(grep B <authors | wc -l)

ok 112 - annotate old revision

# passed all 112 test(s)
1..112
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7900-maintenance.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/.git/
expecting success of 7900.1 'help text': 
	test_expect_code 129 git maintenance -h >actual &&
	test_i18ngrep "usage: git maintenance <subcommand>" actual &&
	test_expect_code 129 git maintenance barf 2>err &&
	test_i18ngrep "unknown subcommand: \`barf'" err &&
	test_i18ngrep "usage: git maintenance" err &&
	test_expect_code 129 git maintenance 2>err &&
	test_i18ngrep "error: need a subcommand" err &&
	test_i18ngrep "usage: git maintenance" err

usage: git maintenance <subcommand> [<options>]
error: unknown subcommand: `barf'
usage: git maintenance <subcommand> [<options>]
error: need a subcommand
usage: git maintenance <subcommand> [<options>]
ok 1 - help text

expecting success of 7900.2 'run [--auto|--quiet]': 
	GIT_TRACE2_EVENT="$(pwd)/run-no-auto.txt" \
		git maintenance run 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-auto.txt" \
		git maintenance run --auto 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-no-quiet.txt" \
		git maintenance run --no-quiet 2>/dev/null &&
	test_subcommand git gc --quiet <run-no-auto.txt &&
	test_subcommand ! git gc --auto --quiet <run-auto.txt &&
	test_subcommand git gc --no-quiet <run-no-quiet.txt

Nothing new to pack.
{"event":"child_start","sid":"20221228T080558.828706Z-Hc64317c2-P00002242","thread":"main","time":"2022-12-28T08:05:58.835888Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","gc","--quiet"]}
{"event":"child_start","sid":"20221228T080559.177615Z-Hc64317c2-P000022a9","thread":"main","time":"2022-12-28T08:05:59.186376Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","gc","--no-quiet"]}
ok 2 - run [--auto|--quiet]

expecting success of 7900.3 'maintenance.auto config option': 
	GIT_TRACE2_EVENT="$(pwd)/default" git commit --quiet --allow-empty -m 1 &&
	test_subcommand git maintenance run --auto --quiet <default &&
	GIT_TRACE2_EVENT="$(pwd)/true" \
		git -c maintenance.auto=true \
		commit --quiet --allow-empty -m 2 &&
	test_subcommand git maintenance run --auto --quiet  <true &&
	GIT_TRACE2_EVENT="$(pwd)/false" \
		git -c maintenance.auto=false \
		commit --quiet --allow-empty -m 3 &&
	test_subcommand ! git maintenance run --auto --quiet  <false

{"event":"child_start","sid":"20221228T080559.472899Z-Hc64317c2-P000022f7","thread":"main","time":"2022-12-28T08:05:59.507325Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","maintenance","run","--auto","--quiet"]}
{"event":"child_start","sid":"20221228T080559.572468Z-Hc64317c2-P00002311","thread":"main","time":"2022-12-28T08:05:59.613074Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","maintenance","run","--auto","--quiet"]}
ok 3 - maintenance.auto config option

expecting success of 7900.4 'maintenance.<task>.enabled': 
	git config maintenance.gc.enabled false &&
	git config maintenance.commit-graph.enabled true &&
	GIT_TRACE2_EVENT="$(pwd)/run-config.txt" git maintenance run 2>err &&
	test_subcommand ! git gc --quiet <run-config.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-config.txt

{"event":"child_start","sid":"20221228T080559.799480Z-Hc64317c2-P00002348","thread":"main","time":"2022-12-28T08:05:59.807393Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
ok 4 - maintenance.<task>.enabled

expecting success of 7900.5 'run --task=<task>': 
	GIT_TRACE2_EVENT="$(pwd)/run-commit-graph.txt" \
		git maintenance run --task=commit-graph 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-gc.txt" \
		git maintenance run --task=gc 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-commit-graph.txt" \
		git maintenance run --task=commit-graph 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-both.txt" \
		git maintenance run --task=commit-graph --task=gc 2>/dev/null &&
	test_subcommand ! git gc --quiet <run-commit-graph.txt &&
	test_subcommand git gc --quiet <run-gc.txt &&
	test_subcommand git gc --quiet <run-both.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-commit-graph.txt &&
	test_subcommand ! git commit-graph write --split --reachable --no-progress <run-gc.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-both.txt

{"event":"child_start","sid":"20221228T080559.981505Z-Hc64317c2-P00002391","thread":"main","time":"2022-12-28T08:05:59.990002Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","gc","--quiet"]}
{"event":"child_start","sid":"20221228T080600.379166Z-Hc64317c2-P0000240f","thread":"main","time":"2022-12-28T08:06:00.386043Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","gc","--quiet"]}
{"event":"child_start","sid":"20221228T080559.912183Z-Hc64317c2-P00002377","thread":"main","time":"2022-12-28T08:05:59.922141Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080600.321419Z-Hc64317c2-P000023fe","thread":"main","time":"2022-12-28T08:06:00.327693Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080600.379166Z-Hc64317c2-P0000240f","thread":"main","time":"2022-12-28T08:06:00.674831Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
ok 5 - run --task=<task>

expecting success of 7900.6 'core.commitGraph=false prevents write process': 
	GIT_TRACE2_EVENT="$(pwd)/no-commit-graph.txt" \
		git -c core.commitGraph=false maintenance run \
		--task=commit-graph 2>/dev/null &&
	test_subcommand ! git commit-graph write --split --reachable --no-progress \
		<no-commit-graph.txt

ok 6 - core.commitGraph=false prevents write process

expecting success of 7900.7 'commit-graph auto condition': 
	COMMAND="maintenance run --task=commit-graph --auto --quiet" &&

	GIT_TRACE2_EVENT="$(pwd)/cg-no.txt" \
		git -c maintenance.commit-graph.auto=1 $COMMAND &&
	GIT_TRACE2_EVENT="$(pwd)/cg-negative-means-yes.txt" \
		git -c maintenance.commit-graph.auto="-1" $COMMAND &&

	test_commit first &&

	GIT_TRACE2_EVENT="$(pwd)/cg-zero-means-no.txt" \
		git -c maintenance.commit-graph.auto=0 $COMMAND &&
	GIT_TRACE2_EVENT="$(pwd)/cg-one-satisfied.txt" \
		git -c maintenance.commit-graph.auto=1 $COMMAND &&

	git commit --allow-empty -m "second" &&
	git commit --allow-empty -m "third" &&

	GIT_TRACE2_EVENT="$(pwd)/cg-two-satisfied.txt" \
		git -c maintenance.commit-graph.auto=2 $COMMAND &&

	COMMIT_GRAPH_WRITE="git commit-graph write --split --reachable --no-progress" &&
	test_subcommand ! $COMMIT_GRAPH_WRITE <cg-no.txt &&
	test_subcommand $COMMIT_GRAPH_WRITE <cg-negative-means-yes.txt &&
	test_subcommand ! $COMMIT_GRAPH_WRITE <cg-zero-means-no.txt &&
	test_subcommand $COMMIT_GRAPH_WRITE <cg-one-satisfied.txt &&
	test_subcommand $COMMIT_GRAPH_WRITE <cg-two-satisfied.txt

[master a69f914] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[master 0c7e5e9] second
 Author: A U Thor <author@example.com>
[master fa248cf] third
 Author: A U Thor <author@example.com>
{"event":"child_start","sid":"20221228T080600.942720Z-Hc64317c2-P000024c2","thread":"main","time":"2022-12-28T08:06:00.951924Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080601.218476Z-Hc64317c2-P00002517","thread":"main","time":"2022-12-28T08:06:01.240279Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080601.487327Z-Hc64317c2-P00002555","thread":"main","time":"2022-12-28T08:06:01.501867Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
ok 7 - commit-graph auto condition

expecting success of 7900.8 'run --task=bogus': 
	test_must_fail git maintenance run --task=bogus 2>err &&
	test_i18ngrep "is not a valid task" err

error: 'bogus' is not a valid task
ok 8 - run --task=bogus

expecting success of 7900.9 'run --task duplicate': 
	test_must_fail git maintenance run --task=gc --task=gc 2>err &&
	test_i18ngrep "cannot be selected multiple times" err

error: task 'gc' cannot be selected multiple times
ok 9 - run --task duplicate

expecting success of 7900.10 'run --task=prefetch with no remotes': 
	git maintenance run --task=prefetch 2>err &&
	test_must_be_empty err

ok 10 - run --task=prefetch with no remotes

expecting success of 7900.11 'prefetch multiple remotes': 
	git clone . clone1 &&
	git clone . clone2 &&
	git remote add remote1 "file://$(pwd)/clone1" &&
	git remote add remote2 "file://$(pwd)/clone2" &&
	git -C clone1 switch -c one &&
	git -C clone2 switch -c two &&
	test_commit -C clone1 one &&
	test_commit -C clone2 two &&
	GIT_TRACE2_EVENT="$(pwd)/run-prefetch.txt" git maintenance run --task=prefetch 2>/dev/null &&
	fetchargs="--prefetch --prune --no-tags --no-write-fetch-head --recurse-submodules=no --quiet" &&
	test_subcommand git fetch remote1 $fetchargs <run-prefetch.txt &&
	test_subcommand git fetch remote2 $fetchargs <run-prefetch.txt &&
	test_path_is_missing .git/refs/remotes &&
	git log prefetch/remotes/remote1/one &&
	git log prefetch/remotes/remote2/two &&
	git fetch --all &&
	test_cmp_rev refs/remotes/remote1/one refs/prefetch/remotes/remote1/one &&
	test_cmp_rev refs/remotes/remote2/two refs/prefetch/remotes/remote2/two &&

	git log --oneline --decorate --all >log &&
	! grep "prefetch" log &&

	test_when_finished git config --unset remote.remote1.skipFetchAll &&
	git config remote.remote1.skipFetchAll true &&
	GIT_TRACE2_EVENT="$(pwd)/skip-remote1.txt" git maintenance run --task=prefetch 2>/dev/null &&
	test_subcommand ! git fetch remote1 $fetchargs <skip-remote1.txt &&
	test_subcommand git fetch remote2 $fetchargs <skip-remote1.txt

Cloning into 'clone1'...
done.
Cloning into 'clone2'...
done.
Switched to a new branch 'one'
Switched to a new branch 'two'
[one e779b39] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
[two 41188fb] two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 two.t
{"event":"child_start","sid":"20221228T080602.626921Z-Hc64317c2-P00002678","thread":"main","time":"2022-12-28T08:06:02.636133Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","fetch","remote1","--prefetch","--prune","--no-tags","--no-write-fetch-head","--recurse-submodules=no","--quiet"]}
{"event":"child_start","sid":"20221228T080602.626921Z-Hc64317c2-P00002678","thread":"main","time":"2022-12-28T08:06:02.900238Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","fetch","remote2","--prefetch","--prune","--no-tags","--no-write-fetch-head","--recurse-submodules=no","--quiet"]}
commit e779b3967abc4fd38a0961b501c6e2ec4b1da869
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:14:13 2005 -0700

    one

commit fa248cfd6f7af9061e71aa34bdf8603f49b12a5b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    third

commit 0c7e5e94681801e1ca3e9f2d77cc7ed455d17e75
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    second

commit a69f9140dbb5bbddf7198dcc8b3a47a087a097a9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    first

commit 54c6b2cd4fb50066683a197cc6d677689618505a
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    3

commit fc99def8b1df27bcab7d1f4b7ced73239f9bd7ec
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    2

commit a3a8cd3c82028671bf51502d77277baf14a2f528
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
commit 41188fb9f5dcfd3e516e0bf1c29bc446a9072e3d
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    two

commit fa248cfd6f7af9061e71aa34bdf8603f49b12a5b
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    third

commit 0c7e5e94681801e1ca3e9f2d77cc7ed455d17e75
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    second

commit a69f9140dbb5bbddf7198dcc8b3a47a087a097a9
Author: A U Thor <author@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    first

commit 54c6b2cd4fb50066683a197cc6d677689618505a
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    3

commit fc99def8b1df27bcab7d1f4b7ced73239f9bd7ec
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    2

commit a3a8cd3c82028671bf51502d77277baf14a2f528
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    1
Fetching remote1
From file:///<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/clone1
 * [new branch]      master     -> remote1/master
 * [new branch]      one        -> remote1/one
 * [new tag]         one        -> one
Fetching remote2
From file:///<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/clone2
 * [new branch]      master     -> remote2/master
 * [new branch]      two        -> remote2/two
 * [new tag]         two        -> two
{"event":"child_start","sid":"20221228T080603.797815Z-Hc64317c2-P000027a6","thread":"main","time":"2022-12-28T08:06:03.807699Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","fetch","remote2","--prefetch","--prune","--no-tags","--no-write-fetch-head","--recurse-submodules=no","--quiet"]}
ok 11 - prefetch multiple remotes

expecting success of 7900.12 'loose-objects task': 
	# Repack everything so we know the state of the object dir
	git repack -adk &&

	# Hack to stop maintenance from running during "git commit"
	echo in use >.git/objects/maintenance.lock &&

	# Assuming that "git commit" creates at least one loose object
	test_commit create-loose-object &&
	rm .git/objects/maintenance.lock &&

	ls .git/objects >obj-dir-before &&
	test_file_not_empty obj-dir-before &&
	ls .git/objects/pack/*.pack >packs-before &&
	test_line_count = 1 packs-before &&

	# The first run creates a pack-file
	# but does not delete loose objects.
	git maintenance run --task=loose-objects &&
	ls .git/objects >obj-dir-between &&
	test_cmp obj-dir-before obj-dir-between &&
	ls .git/objects/pack/*.pack >packs-between &&
	test_line_count = 2 packs-between &&
	ls .git/objects/pack/loose-*.pack >loose-packs &&
	test_line_count = 1 loose-packs &&

	# The second run deletes loose objects
	# but does not create a pack-file.
	git maintenance run --task=loose-objects &&
	ls .git/objects >obj-dir-after &&
	cat >expect <<-\EOF &&
	info
	pack
	EOF
	test_cmp expect obj-dir-after &&
	ls .git/objects/pack/*.pack >packs-after &&
	test_cmp packs-between packs-after

[master 765eeea] create-loose-object
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 create-loose-object.t
76f3951ecb34584aaf08a645cd287aaeb6c6975f
ok 12 - loose-objects task

expecting success of 7900.13 'maintenance.loose-objects.auto': 
	git repack -adk &&
	GIT_TRACE2_EVENT="$(pwd)/trace-lo1.txt" \
		git -c maintenance.loose-objects.auto=1 maintenance \
		run --auto --task=loose-objects 2>/dev/null &&
	test_subcommand ! git prune-packed --quiet <trace-lo1.txt &&
	printf data-A | git hash-object -t blob --stdin -w &&
	GIT_TRACE2_EVENT="$(pwd)/trace-loA" \
		git -c maintenance.loose-objects.auto=2 \
		maintenance run --auto --task=loose-objects 2>/dev/null &&
	test_subcommand ! git prune-packed --quiet <trace-loA &&
	printf data-B | git hash-object -t blob --stdin -w &&
	GIT_TRACE2_EVENT="$(pwd)/trace-loB" \
		git -c maintenance.loose-objects.auto=2 \
		maintenance run --auto --task=loose-objects 2>/dev/null &&
	test_subcommand git prune-packed --quiet <trace-loB &&
	GIT_TRACE2_EVENT="$(pwd)/trace-loC" \
		git -c maintenance.loose-objects.auto=2 \
		maintenance run --auto --task=loose-objects 2>/dev/null &&
	test_subcommand git prune-packed --quiet <trace-loC

07163daad06a0119b0a241cf1882adae4f88fd56
4e26d6d394bf76d04cf3ab6f994c0bcaaf1a0a2f
b45f8ed9850b966e2e4097582fd20e83ec6714cd
{"event":"child_start","sid":"20221228T080605.303097Z-Hc64317c2-P000028f6","thread":"main","time":"2022-12-28T08:06:05.313229Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080605.420013Z-Hc64317c2-P00002918","thread":"main","time":"2022-12-28T08:06:05.430885Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
ok 13 - maintenance.loose-objects.auto

expecting success of 7900.14 'incremental-repack task': 
	packDir=.git/objects/pack &&
	for i in $(test_seq 1 5)
	do
		test_commit $i || return 1
	done &&

	# Create three disjoint pack-files with size BIG, small, small.
	echo HEAD~2 | git pack-objects --revs $packDir/test-1 &&
	test_tick &&
	git pack-objects --revs $packDir/test-2 <<-\EOF &&
	HEAD~1
	^HEAD~2
	EOF
	test_tick &&
	git pack-objects --revs $packDir/test-3 <<-\EOF &&
	HEAD
	^HEAD~1
	EOF

	# Delete refs that have not been repacked in these packs.
	git for-each-ref --format="delete %(refname)" \
		refs/prefetch refs/tags refs/remotes >refs &&
	git update-ref --stdin <refs &&

	# Replace the object directory with this pack layout.
	rm -f $packDir/pack-* &&
	rm -f $packDir/loose-* &&
	ls $packDir/*.pack >packs-before &&
	test_line_count = 3 packs-before &&

	# make sure we do not have any broken refs that were
	# missed in the deletion above
	git for-each-ref &&

	# the job repacks the two into a new pack, but does not
	# delete the old ones.
	git maintenance run --task=incremental-repack &&
	ls $packDir/*.pack >packs-between &&
	test_line_count = 4 packs-between &&

	# the job deletes the two old packs, and does not write
	# a new one because the batch size is not high enough to
	# pack the largest pack-file.
	git maintenance run --task=incremental-repack &&
	ls .git/objects/pack/*.pack >packs-after &&
	test_line_count = 2 packs-after

[master 3c8869b] 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1.t
[master 2399dc1] 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2.t
[master b7d27f9] 3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3.t
[master b0737fd] 4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4.t
[master 70626b3] 5
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5.t
e47e5aa80e9b70c2b26c98277f97a2011efcd068
b828c1fd30682bb2bc80a3b7331978be5c6c2e26
c20fc1cb0ef9be625e4c591c8507f7f9cfc087b8
70626b3574ae58642e68da67a570eaa414d5aebf commit	refs/heads/master
ok 14 - incremental-repack task

checking prerequisite: EXPENSIVE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-EXPENSIVE" &&
	test -n "$GIT_TEST_LONG"

)
prerequisite EXPENSIVE not satisfied
ok 15 # skip incremental-repack 2g limit (missing EXPENSIVE)

expecting success of 7900.16 'maintenance.incremental-repack.auto': 
	rm -rf incremental-repack-true &&
	git init incremental-repack-true &&
	(
		cd incremental-repack-true &&
		git config core.multiPackIndex true &&
		run_incremental_repack_and_verify
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/incremental-repack-true/.git/
[master (root-commit) fa70208] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master ab54baa] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ba2455fe8b258f9311bea5fa32bd29103f57ba7e
[master 3983a09] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
2f10694fe702316bcde937d57f956fe5ae42f7fe
{"event":"child_start","sid":"20221228T080607.894258Z-Hc64317c2-P00002b69","thread":"main","time":"2022-12-28T08:06:07.905450Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","multi-pack-index","write","--no-progress"]}
ok 16 - maintenance.incremental-repack.auto

expecting success of 7900.17 'maintenance.incremental-repack.auto (when config is unset)': 
	rm -rf incremental-repack-unset &&
	git init incremental-repack-unset &&
	(
		cd incremental-repack-unset &&
		test_unconfig core.multiPackIndex &&
		run_incremental_repack_and_verify
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/incremental-repack-unset/.git/
[master (root-commit) fa70208] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
[master ab54baa] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
ba2455fe8b258f9311bea5fa32bd29103f57ba7e
[master 3983a09] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
2f10694fe702316bcde937d57f956fe5ae42f7fe
{"event":"child_start","sid":"20221228T080608.942381Z-Hc64317c2-P00002c36","thread":"main","time":"2022-12-28T08:06:08.952292Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","multi-pack-index","write","--no-progress"]}
ok 17 - maintenance.incremental-repack.auto (when config is unset)

expecting success of 7900.18 'pack-refs task': 
	for n in $(test_seq 1 5)
	do
		git branch -f to-pack/$n HEAD || return 1
	done &&
	GIT_TRACE2_EVENT="$(pwd)/pack-refs.txt" \
		git maintenance run --task=pack-refs &&
	test_subcommand git pack-refs --all --prune <pack-refs.txt

{"event":"child_start","sid":"20221228T080609.299142Z-Hc64317c2-P00002c7f","thread":"main","time":"2022-12-28T08:06:09.308429Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","pack-refs","--all","--prune"]}
ok 18 - pack-refs task

expecting success of 7900.19 '--auto and --schedule incompatible': 
	test_must_fail git maintenance run --auto --schedule=daily 2>err &&
	test_i18ngrep "at most one" err

fatal: use at most one of --auto and --schedule=<frequency>
ok 19 - --auto and --schedule incompatible

expecting success of 7900.20 'invalid --schedule value': 
	test_must_fail git maintenance run --schedule=annually 2>err &&
	test_i18ngrep "unrecognized --schedule" err

fatal: unrecognized --schedule argument 'annually'
ok 20 - invalid --schedule value

expecting success of 7900.21 '--schedule inheritance weekly -> daily -> hourly': 
	git config maintenance.loose-objects.enabled true &&
	git config maintenance.loose-objects.schedule hourly &&
	git config maintenance.commit-graph.enabled true &&
	git config maintenance.commit-graph.schedule daily &&
	git config maintenance.incremental-repack.enabled true &&
	git config maintenance.incremental-repack.schedule weekly &&

	GIT_TRACE2_EVENT="$(pwd)/hourly.txt" \
		git maintenance run --schedule=hourly 2>/dev/null &&
	test_subcommand git prune-packed --quiet <hourly.txt &&
	test_subcommand ! git commit-graph write --split --reachable \
		--no-progress <hourly.txt &&
	test_subcommand ! git multi-pack-index write --no-progress <hourly.txt &&

	GIT_TRACE2_EVENT="$(pwd)/daily.txt" \
		git maintenance run --schedule=daily 2>/dev/null &&
	test_subcommand git prune-packed --quiet <daily.txt &&
	test_subcommand git commit-graph write --split --reachable \
		--no-progress <daily.txt &&
	test_subcommand ! git multi-pack-index write --no-progress <daily.txt &&

	GIT_TRACE2_EVENT="$(pwd)/weekly.txt" \
		git maintenance run --schedule=weekly 2>/dev/null &&
	test_subcommand git prune-packed --quiet <weekly.txt &&
	test_subcommand git commit-graph write --split --reachable \
		--no-progress <weekly.txt &&
	test_subcommand git multi-pack-index write --no-progress <weekly.txt

{"event":"child_start","sid":"20221228T080609.613921Z-Hc64317c2-P00002cc9","thread":"main","time":"2022-12-28T08:06:09.622855Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080609.737328Z-Hc64317c2-P00002ce5","thread":"main","time":"2022-12-28T08:06:09.745642Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080609.737328Z-Hc64317c2-P00002ce5","thread":"main","time":"2022-12-28T08:06:09.774890Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080609.885973Z-Hc64317c2-P00002d08","thread":"main","time":"2022-12-28T08:06:09.894691Z","file":"run-command.c","line":722,"child_id":0,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080609.885973Z-Hc64317c2-P00002d08","thread":"main","time":"2022-12-28T08:06:09.995729Z","file":"run-command.c","line":722,"child_id":4,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080609.885973Z-Hc64317c2-P00002d08","thread":"main","time":"2022-12-28T08:06:09.921312Z","file":"run-command.c","line":722,"child_id":1,"child_class":"?","use_shell":false,"argv":["git","multi-pack-index","write","--no-progress"]}
ok 21 - --schedule inheritance weekly -> daily -> hourly

expecting success of 7900.22 'maintenance.strategy inheritance': 
	for task in commit-graph loose-objects incremental-repack
	do
		git config --unset maintenance.$task.schedule || return 1
	done &&

	test_when_finished git config --unset maintenance.strategy &&
	git config maintenance.strategy incremental &&

	GIT_TRACE2_EVENT="$(pwd)/incremental-hourly.txt" \
		git maintenance run --schedule=hourly --quiet &&
	GIT_TRACE2_EVENT="$(pwd)/incremental-daily.txt" \
		git maintenance run --schedule=daily --quiet &&
	GIT_TRACE2_EVENT="$(pwd)/incremental-weekly.txt" \
		git maintenance run --schedule=weekly --quiet &&

	test_subcommand git commit-graph write --split --reachable \
		--no-progress <incremental-hourly.txt &&
	test_subcommand ! git prune-packed --quiet <incremental-hourly.txt &&
	test_subcommand ! git multi-pack-index write --no-progress \
		<incremental-hourly.txt &&
	test_subcommand ! git pack-refs --all --prune \
		<incremental-hourly.txt &&

	test_subcommand git commit-graph write --split --reachable \
		--no-progress <incremental-daily.txt &&
	test_subcommand git prune-packed --quiet <incremental-daily.txt &&
	test_subcommand git multi-pack-index write --no-progress \
		<incremental-daily.txt &&
	test_subcommand ! git pack-refs --all --prune \
		<incremental-daily.txt &&

	test_subcommand git commit-graph write --split --reachable \
		--no-progress <incremental-weekly.txt &&
	test_subcommand git prune-packed --quiet <incremental-weekly.txt &&
	test_subcommand git multi-pack-index write --no-progress \
		<incremental-weekly.txt &&
	test_subcommand git pack-refs --all --prune \
		<incremental-weekly.txt &&

	# Modify defaults
	git config maintenance.commit-graph.schedule daily &&
	git config maintenance.loose-objects.schedule hourly &&
	git config maintenance.incremental-repack.enabled false &&

	GIT_TRACE2_EVENT="$(pwd)/modified-hourly.txt" \
		git maintenance run --schedule=hourly --quiet &&
	GIT_TRACE2_EVENT="$(pwd)/modified-daily.txt" \
		git maintenance run --schedule=daily --quiet &&

	test_subcommand ! git commit-graph write --split --reachable \
		--no-progress <modified-hourly.txt &&
	test_subcommand git prune-packed --quiet <modified-hourly.txt &&
	test_subcommand ! git multi-pack-index write --no-progress \
		<modified-hourly.txt &&

	test_subcommand git commit-graph write --split --reachable \
		--no-progress <modified-daily.txt &&
	test_subcommand git prune-packed --quiet <modified-daily.txt &&
	test_subcommand ! git multi-pack-index write --no-progress \
		<modified-daily.txt

e2fec807c0f920d0361f890beb2cb31019219ebe
{"event":"child_start","sid":"20221228T080610.190561Z-Hc64317c2-P00002d43","thread":"main","time":"2022-12-28T08:06:10.728243Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080610.800452Z-Hc64317c2-P00002dbc","thread":"main","time":"2022-12-28T08:06:11.289611Z","file":"run-command.c","line":722,"child_id":7,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080610.800452Z-Hc64317c2-P00002dbc","thread":"main","time":"2022-12-28T08:06:11.072684Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080610.800452Z-Hc64317c2-P00002dbc","thread":"main","time":"2022-12-28T08:06:11.147538Z","file":"run-command.c","line":722,"child_id":4,"child_class":"?","use_shell":false,"argv":["git","multi-pack-index","write","--no-progress"]}
{"event":"child_start","sid":"20221228T080611.354229Z-Hc64317c2-P00002e2a","thread":"main","time":"2022-12-28T08:06:11.731753Z","file":"run-command.c","line":722,"child_id":6,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080611.354229Z-Hc64317c2-P00002e2a","thread":"main","time":"2022-12-28T08:06:11.600702Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080611.354229Z-Hc64317c2-P00002e2a","thread":"main","time":"2022-12-28T08:06:11.641986Z","file":"run-command.c","line":722,"child_id":3,"child_class":"?","use_shell":false,"argv":["git","multi-pack-index","write","--no-progress"]}
{"event":"child_start","sid":"20221228T080611.354229Z-Hc64317c2-P00002e2a","thread":"main","time":"2022-12-28T08:06:11.777898Z","file":"run-command.c","line":722,"child_id":7,"child_class":"?","use_shell":false,"argv":["git","pack-refs","--all","--prune"]}
{"event":"child_start","sid":"20221228T080612.080689Z-Hc64317c2-P00002ec9","thread":"main","time":"2022-12-28T08:06:12.333107Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
{"event":"child_start","sid":"20221228T080612.390955Z-Hc64317c2-P00002f08","thread":"main","time":"2022-12-28T08:06:12.691235Z","file":"run-command.c","line":722,"child_id":3,"child_class":"?","use_shell":false,"argv":["git","commit-graph","write","--split","--reachable","--no-progress"]}
{"event":"child_start","sid":"20221228T080612.390955Z-Hc64317c2-P00002f08","thread":"main","time":"2022-12-28T08:06:12.659757Z","file":"run-command.c","line":722,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","prune-packed","--quiet"]}
ok 22 - maintenance.strategy inheritance

expecting success of 7900.23 'register and unregister': 
	test_when_finished git config --global --unset-all maintenance.repo &&

	test_must_fail git maintenance unregister 2>err &&
	grep "is not registered" err &&
	git maintenance unregister --force &&

	git config --global --add maintenance.repo /existing1 &&
	git config --global --add maintenance.repo /existing2 &&
	git config --global --get-all maintenance.repo >before &&

	git maintenance register &&
	test_cmp_config false maintenance.auto &&
	git config --global --get-all maintenance.repo >between &&
	cp before expect &&
	pwd >>expect &&
	test_cmp expect between &&

	git maintenance unregister &&
	git config --global --get-all maintenance.repo >actual &&
	test_cmp before actual &&

	git config --file ./other --add maintenance.repo /existing1 &&
	git config --file ./other --add maintenance.repo /existing2 &&
	git config --file ./other --get-all maintenance.repo >before &&

	git maintenance register --config-file ./other &&
	test_cmp_config false maintenance.auto &&
	git config --file ./other --get-all maintenance.repo >between &&
	cp before expect &&
	pwd >>expect &&
	test_cmp expect between &&

	git maintenance unregister --config-file ./other &&
	git config --file ./other --get-all maintenance.repo >actual &&
	test_cmp before actual &&

	test_must_fail git maintenance unregister 2>err &&
	grep "is not registered" err &&
	git maintenance unregister --force &&

	test_must_fail git maintenance unregister --config-file ./other 2>err &&
	grep "is not registered" err &&
	git maintenance unregister --config-file ./other --force

fatal: repository '/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance' is not registered
fatal: repository '/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance' is not registered
fatal: repository '/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance' is not registered
ok 23 - register and unregister

expecting success of 7900.24 'register and unregister with regex metacharacters': 
	META="a+b*c" &&
	git init "$META" &&
	git -C "$META" maintenance register &&
	git config --get-all --show-origin maintenance.repo &&
	git config --get-all --global --fixed-value \
		maintenance.repo "$(pwd)/$META" &&
	git -C "$META" maintenance unregister &&
	test_must_fail git config --get-all --global --fixed-value \
		maintenance.repo "$(pwd)/$META"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/a+b*c/.git/
file:/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/.gitconfig	/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/a+b*c
/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/a+b*c
ok 24 - register and unregister with regex metacharacters

expecting success of 7900.25 'start --scheduler=<scheduler>': 
	test_expect_code 129 git maintenance start --scheduler=foo 2>err &&
	test_i18ngrep "unrecognized --scheduler argument" err &&

	test_expect_code 129 git maintenance start --no-scheduler 2>err &&
	test_i18ngrep "unknown option" err &&

	test_expect_code 128 \
		env GIT_TEST_MAINT_SCHEDULER="launchctl:true,schtasks:true" \
		git maintenance start --scheduler=crontab 2>err &&
	test_i18ngrep "fatal: crontab scheduler is not available" err

error: unrecognized --scheduler argument 'foo'
error: unknown option `no-scheduler'
fatal: crontab scheduler is not available
ok 25 - start --scheduler=<scheduler>

expecting success of 7900.26 'start from empty cron table': 
	GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt" git maintenance start --scheduler=crontab &&

	# start registers the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	grep "for-each-repo --config=maintenance.repo maintenance run --schedule=daily" cron.txt &&
	grep "for-each-repo --config=maintenance.repo maintenance run --schedule=hourly" cron.txt &&
	grep "for-each-repo --config=maintenance.repo maintenance run --schedule=weekly" cron.txt

/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
0 0 * * 1-6 "/<<PKGBUILDDIR>>/git" --exec-path="/<<PKGBUILDDIR>>" for-each-repo --config=maintenance.repo maintenance run --schedule=daily
0 1-23 * * * "/<<PKGBUILDDIR>>/git" --exec-path="/<<PKGBUILDDIR>>" for-each-repo --config=maintenance.repo maintenance run --schedule=hourly
0 0 * * 0 "/<<PKGBUILDDIR>>/git" --exec-path="/<<PKGBUILDDIR>>" for-each-repo --config=maintenance.repo maintenance run --schedule=weekly
ok 26 - start from empty cron table

expecting success of 7900.27 'stop from existing schedule': 
	GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt" git maintenance stop &&

	# stop does not unregister the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	# Operation is idempotent
	GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt" git maintenance stop &&
	test_must_be_empty cron.txt

/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
ok 27 - stop from existing schedule

expecting success of 7900.28 'start preserves existing schedule': 
	echo "Important information!" >cron.txt &&
	GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt" git maintenance start --scheduler=crontab &&
	grep "Important information!" cron.txt

Important information!
ok 28 - start preserves existing schedule

expecting success of 7900.29 'magic markers are correct': 
	grep "GIT MAINTENANCE SCHEDULE" cron.txt >actual &&
	cat >expect <<-\EOF &&
	# BEGIN GIT MAINTENANCE SCHEDULE
	# END GIT MAINTENANCE SCHEDULE
	EOF
	test_cmp actual expect

ok 29 - magic markers are correct

expecting success of 7900.30 'stop preserves surrounding schedule': 
	echo "Crucial information!" >>cron.txt &&
	GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt" git maintenance stop &&
	grep "Important information!" cron.txt &&
	grep "Crucial information!" cron.txt

Important information!
Crucial information!
ok 30 - stop preserves surrounding schedule

expecting success of 7900.31 'start and stop macOS maintenance': 
	# ensure $HOME can be compared against hook arguments on all platforms
	pfx=$(cd "$HOME" && pwd) &&

	write_script print-args <<-\EOF &&
	echo $* | sed "s:gui/[0-9][0-9]*:gui/[UID]:" >>args
	EOF

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER=launchctl:./print-args git maintenance start --scheduler=launchctl &&

	# start registers the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	ls "$HOME/Library/LaunchAgents" >actual &&
	cat >expect <<-\EOF &&
	org.git-scm.git.daily.plist
	org.git-scm.git.hourly.plist
	org.git-scm.git.weekly.plist
	EOF
	test_cmp expect actual &&

	rm -f expect &&
	for frequency in hourly daily weekly
	do
		PLIST="$pfx/Library/LaunchAgents/org.git-scm.git.$frequency.plist" &&
		test_xmllint "$PLIST" &&
		grep schedule=$frequency "$PLIST" &&
		echo "bootout gui/[UID] $PLIST" >>expect &&
		echo "bootstrap gui/[UID] $PLIST" >>expect || return 1
	done &&
	test_cmp expect args &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER=launchctl:./print-args git maintenance stop &&

	# stop does not unregister the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	printf "bootout gui/[UID] $pfx/Library/LaunchAgents/org.git-scm.git.%s.plist\n" \
		hourly daily weekly >expect &&
	test_cmp expect args &&
	ls "$HOME/Library/LaunchAgents" >actual &&
	test_line_count = 0 actual

/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
checking prerequisite: XMLLINT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-XMLLINT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-XMLLINT" &&
	xmllint --version

)
t7900-maintenance.sh: 7: eval: xmllint: not found
prerequisite XMLLINT not satisfied
<string>--schedule=hourly</string>
<string>--schedule=daily</string>
<string>--schedule=weekly</string>
/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
ok 31 - start and stop macOS maintenance

expecting success of 7900.32 'use launchctl list to prevent extra work': 
	# ensure we are registered
	GIT_TEST_MAINT_SCHEDULER=launchctl:./print-args git maintenance start --scheduler=launchctl &&

	# do it again on a fresh args file
	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER=launchctl:./print-args git maintenance start --scheduler=launchctl &&

	ls "$HOME/Library/LaunchAgents" >actual &&
	cat >expect <<-\EOF &&
	list org.git-scm.git.hourly
	list org.git-scm.git.daily
	list org.git-scm.git.weekly
	EOF
	test_cmp expect args

ok 32 - use launchctl list to prevent extra work

expecting success of 7900.33 'start and stop Windows maintenance': 
	write_script print-args <<-\EOF &&
	echo $* >>args
	while test $# -gt 0
	do
		case "$1" in
		/xml) shift; xmlfile=$1; break ;;
		*) shift ;;
		esac
	done
	test -z "$xmlfile" || cp "$xmlfile" "$xmlfile.xml"
	EOF

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="schtasks:./print-args" git maintenance start --scheduler=schtasks &&

	# start registers the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	for frequency in hourly daily weekly
	do
		grep "/create /tn Git Maintenance ($frequency) /f /xml" args &&
		file=$(ls .git/schedule_${frequency}*.xml) &&
		test_xmllint "$file" || return 1
	done &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="schtasks:./print-args" git maintenance stop &&

	# stop does not unregister the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	printf "/delete /tn Git Maintenance (%s) /f\n" \
		hourly daily weekly >expect &&
	test_cmp expect args

/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
/create /tn Git Maintenance (hourly) /f /xml /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/.git/schedule_hourly_N59Ulj
/create /tn Git Maintenance (daily) /f /xml /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/.git/schedule_daily_AGpYjY
/create /tn Git Maintenance (weekly) /f /xml /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/.git/schedule_weekly_4aOFW0
/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
ok 33 - start and stop Windows maintenance

expecting success of 7900.34 'start and stop Linux/systemd maintenance': 
	write_script print-args <<-\EOF &&
	printf "%s\n" "$*" >>args
	EOF

	XDG_CONFIG_HOME="$PWD" &&
	export XDG_CONFIG_HOME &&
	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args" git maintenance start --scheduler=systemd-timer &&

	# start registers the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	test_systemd_analyze_verify "systemd/user/git-maintenance@.service" &&

	printf -- "--user enable --now git-maintenance@%s.timer\n" hourly daily weekly >expect &&
	test_cmp expect args &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args" git maintenance stop &&

	# stop does not unregister the repo
	git config --get --global --fixed-value maintenance.repo "$(pwd)" &&

	test_path_is_missing "systemd/user/git-maintenance@.timer" &&
	test_path_is_missing "systemd/user/git-maintenance@.service" &&

	printf -- "--user disable --now git-maintenance@%s.timer\n" hourly daily weekly >expect &&
	test_cmp expect args

/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
checking prerequisite: SYSTEMD_ANALYZE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYSTEMD_ANALYZE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYSTEMD_ANALYZE" &&
	systemd-analyze verify /lib/systemd/system/basic.target

)
t7900-maintenance.sh: 7: eval: systemd-analyze: not found
prerequisite SYSTEMD_ANALYZE not satisfied
/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance
ok 34 - start and stop Linux/systemd maintenance

expecting success of 7900.35 'start and stop when several schedulers are available': 
	write_script print-args <<-\EOF &&
	printf "%s\n" "$*" | sed "s:gui/[0-9][0-9]*:gui/[UID]:; s:\(schtasks /create .* /xml\).*:\1:;" >>args
	EOF

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args systemctl,launchctl:./print-args launchctl,schtasks:./print-args schtasks" git maintenance start --scheduler=systemd-timer &&
	printf "launchctl bootout gui/[UID] $pfx/Library/LaunchAgents/org.git-scm.git.%s.plist\n" \
		hourly daily weekly >expect &&
	printf "schtasks /delete /tn Git Maintenance (%s) /f\n" \
		hourly daily weekly >>expect &&
	printf -- "systemctl --user enable --now git-maintenance@%s.timer\n" hourly daily weekly >>expect &&
	test_cmp expect args &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args systemctl,launchctl:./print-args launchctl,schtasks:./print-args schtasks" git maintenance start --scheduler=launchctl &&
	printf -- "systemctl --user disable --now git-maintenance@%s.timer\n" hourly daily weekly >expect &&
	printf "schtasks /delete /tn Git Maintenance (%s) /f\n" \
		hourly daily weekly >>expect &&
	for frequency in hourly daily weekly
	do
		PLIST="$pfx/Library/LaunchAgents/org.git-scm.git.$frequency.plist" &&
		echo "launchctl bootout gui/[UID] $PLIST" >>expect &&
		echo "launchctl bootstrap gui/[UID] $PLIST" >>expect || return 1
	done &&
	test_cmp expect args &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args systemctl,launchctl:./print-args launchctl,schtasks:./print-args schtasks" git maintenance start --scheduler=schtasks &&
	printf -- "systemctl --user disable --now git-maintenance@%s.timer\n" hourly daily weekly >expect &&
	printf "launchctl bootout gui/[UID] $pfx/Library/LaunchAgents/org.git-scm.git.%s.plist\n" \
		hourly daily weekly >>expect &&
	printf "schtasks /create /tn Git Maintenance (%s) /f /xml\n" \
		hourly daily weekly >>expect &&
	test_cmp expect args &&

	rm -f args &&
	GIT_TEST_MAINT_SCHEDULER="systemctl:./print-args systemctl,launchctl:./print-args launchctl,schtasks:./print-args schtasks" git maintenance stop &&
	printf -- "systemctl --user disable --now git-maintenance@%s.timer\n" hourly daily weekly >expect &&
	printf "launchctl bootout gui/[UID] $pfx/Library/LaunchAgents/org.git-scm.git.%s.plist\n" \
		hourly daily weekly >>expect &&
	printf "schtasks /delete /tn Git Maintenance (%s) /f\n" \
		hourly daily weekly >>expect &&
	test_cmp expect args

ok 35 - start and stop when several schedulers are available

expecting success of 7900.36 'register preserves existing strategy': 
	git config maintenance.strategy none &&
	git maintenance register &&
	test_config maintenance.strategy none &&
	git config --unset maintenance.strategy &&
	git maintenance register &&
	test_config maintenance.strategy incremental

ok 36 - register preserves existing strategy

expecting success of 7900.37 'fails when running outside of a repository': 
	nongit test_must_fail git maintenance run &&
	nongit test_must_fail git maintenance stop &&
	nongit test_must_fail git maintenance start &&
	nongit test_must_fail git maintenance register &&
	nongit test_must_fail git maintenance unregister

fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
ok 37 - fails when running outside of a repository

expecting success of 7900.38 'register and unregister bare repo': 
	test_when_finished "git config --global --unset-all maintenance.repo || :" &&
	test_might_fail git config --global --unset-all maintenance.repo &&
	git init --bare barerepo &&
	(
		cd barerepo &&
		git maintenance register &&
		git config --get --global --fixed-value maintenance.repo "$(pwd)" &&
		git maintenance unregister &&
		test_must_fail git config --global --get-all maintenance.repo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/barerepo/
/<<PKGBUILDDIR>>/t/trash directory.t7900-maintenance/barerepo
ok 38 - register and unregister bare repo

# passed all 38 test(s)
1..38
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8004-blame-with-conflicts.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8004-blame-with-conflicts/.git/
expecting success of 8004.1 'setup first case': 
	# Create the old file
	echo "Old line" > file1 &&
	git add file1 &&
	git commit --author "Old Line <ol@localhost>" -m file1.a &&

	# Branch
	git checkout -b foo &&

	# Do an ugly move and change
	git rm file1 &&
	echo "New line ..."  > file2 &&
	echo "... and more" >> file2 &&
	git add file2 &&
	git commit --author "U Gly <ug@localhost>" -m ugly &&

	# Back to main and change something
	git checkout main &&
	echo "

bla" >> file1 &&
	git commit --author "Old Line <ol@localhost>" -a -m file1.b &&

	# Back to foo and merge main
	git checkout foo &&
	if git merge main; then
		echo needed conflict here
		exit 1
	else
		echo merge failed - resolving automatically
	fi &&
	echo "New line ...
... and more

bla
Even more" > file2 &&
	git rm file1 &&
	git commit --author "M Result <mr@localhost>" -a -m merged &&

	# Back to main and change file1 again
	git checkout main &&
	sed s/bla/foo/ <file1 >X &&
	rm file1 &&
	mv X file1 &&
	git commit --author "No Bla <nb@localhost>" -a -m replace &&

	# Try to merge into foo again
	git checkout foo &&
	if git merge main; then
		echo needed conflict here
		exit 1
	else
		echo merge failed - test is setup
	fi

[main (root-commit) a79605b] file1.a
 Author: Old Line <ol@localhost>
 1 file changed, 1 insertion(+)
 create mode 100644 file1
Switched to a new branch 'foo'
rm 'file1'
[foo 8c5d0c4] ugly
 Author: U Gly <ug@localhost>
 2 files changed, 2 insertions(+), 1 deletion(-)
 delete mode 100644 file1
 create mode 100644 file2
Switched to branch 'main'
[main 7948d65] file1.b
 Author: Old Line <ol@localhost>
 1 file changed, 3 insertions(+)
Switched to branch 'foo'
CONFLICT (modify/delete): file1 deleted in HEAD and modified in main.  Version main of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
merge failed - resolving automatically
rm 'file1'
[foo 0adbbaa] merged
 Author: M Result <mr@localhost>
Switched to branch 'main'
[main 93a049b] replace
 Author: No Bla <nb@localhost>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'foo'
CONFLICT (modify/delete): file1 deleted in HEAD and modified in main.  Version main of file1 left in tree.
Automatic merge failed; fix conflicts and then commit the result.
merge failed - test is setup
ok 1 - setup first case

expecting success of 8004.2 'blame runs on unconflicted file while other file has conflicts': 
	git blame file2

8c5d0c45 (U Gly    2005-04-01 13:14:15 +0200 1) New line ...
8c5d0c45 (U Gly    2005-04-01 13:14:15 +0200 2) ... and more
0adbbaae (M Result 2005-04-01 13:14:15 +0200 3) 
0adbbaae (M Result 2005-04-01 13:14:15 +0200 4) bla
0adbbaae (M Result 2005-04-01 13:14:15 +0200 5) Even more
ok 2 - blame runs on unconflicted file while other file has conflicts

expecting success of 8004.3 'blame does not crash with conflicted file in stages 1,3': 
	git blame file1

^a79605b (Old Line 2005-04-01 13:14:15 +0200 1) Old line
7948d659 (Old Line 2005-04-01 13:14:15 +0200 2) 
7948d659 (Old Line 2005-04-01 13:14:15 +0200 3) 
93a049bc (No Bla   2005-04-01 13:14:15 +0200 4) foo
ok 3 - blame does not crash with conflicted file in stages 1,3

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8005-blame-i18n.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8005-blame-i18n/.git/
expecting success of 8005.1 'setup the repository': 
	# Create the file
	echo "UTF-8 LINE" > file &&
	git add file &&
	git commit --author "$UTF8_NAME <utf8@localhost>" -m "$UTF8_MSG" &&

	echo "EUC-JAPAN LINE" >> file &&
	git add file &&
	git config i18n.commitencoding eucJP &&
	git commit --author "$EUC_JAPAN_NAME <euc-japan@localhost>" -m "$EUC_JAPAN_MSG" &&

	echo "SJIS LINE" >> file &&
	git add file &&
	git config i18n.commitencoding SJIS &&
	git commit --author "$SJIS_NAME <sjis@localhost>" -m "$SJIS_MSG"

[master (root-commit) 732dccd] ブレームのテストです。
 Author: 山田 太郎 <utf8@localhost>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master fd45e78] ブレームのテストです。
 1 file changed, 1 insertion(+)
[master 6624d04] ブレームのテストです。
 1 file changed, 1 insertion(+)
ok 1 - setup the repository

expecting success of 8005.2 'blame respects i18n.commitencoding': 
	git blame --incremental file >output &&
	filter_author_summary output >actual &&
	test_cmp expected actual

ok 2 - blame respects i18n.commitencoding

expecting success of 8005.3 'blame respects i18n.logoutputencoding': 
	git config i18n.logoutputencoding eucJP &&
	git blame --incremental file >output &&
	filter_author_summary output >actual &&
	test_cmp expected actual

ok 3 - blame respects i18n.logoutputencoding

expecting success of 8005.4 'blame respects --encoding=UTF-8': 
	git blame --incremental --encoding=UTF-8 file >output &&
	filter_author_summary output >actual &&
	test_cmp expected actual

ok 4 - blame respects --encoding=UTF-8

expecting success of 8005.5 'blame respects --encoding=none': 
	git blame --incremental --encoding=none file >output &&
	filter_author_summary output >actual &&
	test_cmp expected actual

ok 5 - blame respects --encoding=none

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8003-blame-corner-cases.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8003-blame-corner-cases/.git/
expecting success of 8003.1 'setup': 
	echo A A A A A >one &&
	echo B B B B B >two &&
	echo C C C C C >tres &&
	echo ABC >mouse &&
	test_write_lines 1 2 3 4 5 6 7 8 9 >nine_lines &&
	test_write_lines 1 2 3 4 5 6 7 8 9 a >ten_lines &&
	git add one two tres mouse nine_lines ten_lines &&
	test_tick &&
	GIT_AUTHOR_NAME=Initial git commit -m Initial &&

	cat one >uno &&
	mv two dos &&
	cat one >>tres &&
	echo DEF >>mouse &&
	git add uno dos tres mouse &&
	test_tick &&
	GIT_AUTHOR_NAME=Second git commit -a -m Second &&

	echo GHIJK >>mouse &&
	git add mouse &&
	test_tick &&
	GIT_AUTHOR_NAME=Third git commit -m Third &&

	cat mouse >cow &&
	git add cow &&
	test_tick &&
	GIT_AUTHOR_NAME=Fourth git commit -m Fourth &&

	cat >cow <<-\EOF &&
	ABC
	DEF
	XXXX
	GHIJK
	EOF
	git add cow &&
	test_tick &&
	GIT_AUTHOR_NAME=Fifth git commit -m Fifth

[main (root-commit) a7d6c31] Initial
 Author: Initial <author@example.com>
 6 files changed, 23 insertions(+)
 create mode 100644 mouse
 create mode 100644 nine_lines
 create mode 100644 one
 create mode 100644 ten_lines
 create mode 100644 tres
 create mode 100644 two
[main 480ef79] Second
 Author: Second <author@example.com>
 4 files changed, 3 insertions(+)
 rename two => dos (100%)
 create mode 100644 uno
[main 74385ca] Third
 Author: Third <author@example.com>
 1 file changed, 1 insertion(+)
[main 5b22ca3] Fourth
 Author: Fourth <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 cow
[main 018e313] Fifth
 Author: Fifth <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - setup

expecting success of 8003.2 'straight copy without -C': 

	git blame uno | grep Second


480ef79e (Second 2005-04-07 15:14:13 -0700 1) A A A A A
ok 2 - straight copy without -C

expecting success of 8003.3 'straight move without -C': 

	git blame dos | grep Initial


^a7d6c31 two (Initial 2005-04-07 15:13:13 -0700 1) B B B B B
ok 3 - straight move without -C

expecting success of 8003.4 'straight copy with -C': 

	git blame -C1 uno | grep Second


480ef79e (Second 2005-04-07 15:14:13 -0700 1) A A A A A
ok 4 - straight copy with -C

expecting success of 8003.5 'straight move with -C': 

	git blame -C1 dos | grep Initial


^a7d6c31 two (Initial 2005-04-07 15:13:13 -0700 1) B B B B B
ok 5 - straight move with -C

expecting success of 8003.6 'straight copy with -C -C': 

	git blame -C -C1 uno | grep Initial


^a7d6c31 one (Initial 2005-04-07 15:13:13 -0700 1) A A A A A
ok 6 - straight copy with -C -C

expecting success of 8003.7 'straight move with -C -C': 

	git blame -C -C1 dos | grep Initial


^a7d6c31 two (Initial 2005-04-07 15:13:13 -0700 1) B B B B B
ok 7 - straight move with -C -C

expecting success of 8003.8 'append without -C': 

	git blame -L2 tres | grep Second


480ef79e (Second 2005-04-07 15:14:13 -0700 2) A A A A A
ok 8 - append without -C

expecting success of 8003.9 'append with -C': 

	git blame -L2 -C1 tres | grep Second


480ef79e (Second 2005-04-07 15:14:13 -0700 2) A A A A A
ok 9 - append with -C

expecting success of 8003.10 'append with -C -C': 

	git blame -L2 -C -C1 tres | grep Second


480ef79e (Second 2005-04-07 15:14:13 -0700 2) A A A A A
ok 10 - append with -C -C

expecting success of 8003.11 'append with -C -C -C': 

	git blame -L2 -C -C -C1 tres | grep Initial


^a7d6c31 one (Initial 2005-04-07 15:13:13 -0700 2) A A A A A
ok 11 - append with -C -C -C

expecting success of 8003.12 'blame wholesale copy': 

	git blame -f -C -C1 HEAD^ -- cow | sed -e "$pick_fc" >current &&
	cat >expected <<-\EOF &&
	mouse-Initial
	mouse-Second
	mouse-Third
	EOF
	test_cmp expected current


ok 12 - blame wholesale copy

expecting success of 8003.13 'blame wholesale copy and more': 

	git blame -f -C -C1 HEAD -- cow | sed -e "$pick_fc" >current &&
	cat >expected <<-\EOF &&
	mouse-Initial
	mouse-Second
	cow-Fifth
	mouse-Third
	EOF
	test_cmp expected current


ok 13 - blame wholesale copy and more

expecting success of 8003.14 'blame wholesale copy and more in the index': 

	cat >horse <<-\EOF &&
	ABC
	DEF
	XXXX
	YYYY
	GHIJK
	EOF
	git add horse &&
	test_when_finished "git rm -f horse" &&
	git blame -f -C -C1 -- horse | sed -e "$pick_fc" >current &&
	cat >expected <<-\EOF &&
	mouse-Initial
	mouse-Second
	cow-Fifth
	horse-Not
	mouse-Third
	EOF
	test_cmp expected current


rm 'horse'
ok 14 - blame wholesale copy and more in the index

expecting success of 8003.15 'blame during cherry-pick with file rename conflict': 

	test_when_finished "git reset --hard && git checkout main" &&
	git checkout HEAD~3 &&
	echo MOUSE >> mouse &&
	git mv mouse rodent &&
	git add rodent &&
	GIT_AUTHOR_NAME=Rodent git commit -m "rodent" &&
	git checkout --detach main &&
	(git cherry-pick HEAD@{1} || test $? -eq 1) &&
	git show HEAD@{1}:rodent > rodent &&
	git add rodent &&
	git blame -f -C -C1 rodent | sed -e "$pick_fc" >current &&
	cat >expected <<-\EOF &&
	mouse-Initial
	mouse-Second
	rodent-Not
	EOF
	test_cmp expected current

Note: switching to 'HEAD~3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 480ef79 Second
[detached HEAD b1c6d57] rodent
 Author: Rodent <author@example.com>
 1 file changed, 1 insertion(+)
 rename mouse => rodent (57%)
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  b1c6d57 rodent

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> b1c6d57

HEAD is now at 018e313 Fifth
Auto-merging rodent
CONFLICT (content): Merge conflict in rodent
error: could not apply b1c6d57... rodent
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
HEAD is now at 018e313 Fifth
Switched to branch 'main'
ok 15 - blame during cherry-pick with file rename conflict

expecting success of 8003.16 'blame path that used to be a directory': 
	mkdir path &&
	echo A A A A A >path/file &&
	echo B B B B B >path/elif &&
	git add path &&
	test_tick &&
	git commit -m "path was a directory" &&
	rm -fr path &&
	echo A A A A A >path &&
	git add path &&
	test_tick &&
	git commit -m "path is a regular file" &&
	git blame HEAD^.. -- path

[main 0aef879] path was a directory
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 path/elif
 create mode 100644 path/file
[main 846e53e] path is a regular file
 Author: A U Thor <author@example.com>
 2 files changed, 1 deletion(-)
 rename path/file => path (100%)
 delete mode 100644 path/elif
^0aef879 path/file (A U Thor 2005-04-07 15:18:13 -0700 1) A A A A A
ok 16 - blame path that used to be a directory

expecting success of 8003.17 'blame to a commit with no author name': 
  TREE=$(git rev-parse HEAD:) &&
  cat >badcommit <<EOF &&
tree $TREE
author <noname> 1234567890 +0000
committer David Reiss <dreiss@facebook.com> 1234567890 +0000

some message
EOF
  COMMIT=$(git hash-object -t commit -w badcommit) &&
  git --no-pager blame $COMMIT -- uno >/dev/null

ok 17 - blame to a commit with no author name

expecting success of 8003.18 'blame -L with invalid start': 
	test_must_fail git blame -L5 tres 2>errors &&
	test_i18ngrep "has only 2 lines" errors

fatal: file tres has only 2 lines
ok 18 - blame -L with invalid start

expecting success of 8003.19 'blame -L with invalid end': 
	git blame -L1,5 tres >out &&
	test_line_count = 2 out

ok 19 - blame -L with invalid end

expecting success of 8003.20 'blame parses <end> part of -L': 
	git blame -L1,1 tres >out &&
	test_line_count = 1 out

ok 20 - blame parses <end> part of -L

expecting success of 8003.21 'blame -Ln,-(n+1)': 
	git blame -L3,-4 nine_lines >out &&
	test_line_count = 3 out

ok 21 - blame -Ln,-(n+1)

expecting success of 8003.22 'indent of line numbers, nine lines': 
	git blame nine_lines >actual &&
	test $(grep -c "  " actual) = 0

ok 22 - indent of line numbers, nine lines

expecting success of 8003.23 'indent of line numbers, ten lines': 
	git blame ten_lines >actual &&
	test $(grep -c "  " actual) = 9

ok 23 - indent of line numbers, ten lines

expecting success of 8003.24 'setup file with CRLF newlines': 
	git config core.autocrlf false &&
	printf "testcase\n" >crlffile &&
	git add crlffile &&
	git commit -m testcase &&
	printf "testcase\r\n" >crlffile

[main 281288b] testcase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 crlffile
ok 24 - setup file with CRLF newlines

expecting success of 8003.25 'blame file with CRLF core.autocrlf true': 
	git config core.autocrlf true &&
	git blame crlffile >actual &&
	grep "A U Thor" actual

281288b4 (A U Thor 2005-04-07 15:19:13 -0700 1) testcase
ok 25 - blame file with CRLF core.autocrlf true

expecting success of 8003.26 'blame file with CRLF attributes text': 
	git config core.autocrlf false &&
	echo "crlffile text" >.gitattributes &&
	git blame crlffile >actual &&
	grep "A U Thor" actual

281288b4 (A U Thor 2005-04-07 15:19:13 -0700 1) testcase
ok 26 - blame file with CRLF attributes text

expecting success of 8003.27 'blame file with CRLF core.autocrlf=true': 
	git config core.autocrlf false &&
	printf "testcase\r\n" >crlfinrepo &&
	>.gitattributes &&
	git add crlfinrepo &&
	git commit -m "add crlfinrepo" &&
	git config core.autocrlf true &&
	mv crlfinrepo tmp &&
	git checkout crlfinrepo &&
	rm tmp &&
	git blame crlfinrepo >actual &&
	grep "A U Thor" actual

[main 2b0eeed] add crlfinrepo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 crlfinrepo
Updated 1 path from the index
2b0eeed1 (A U Thor 2005-04-07 15:19:13 -0700 1) testcase
ok 27 - blame file with CRLF core.autocrlf=true

expecting success of 8003.28 'setup coalesce tests': 
	cat >giraffe <<-\EOF &&
	ABC
	DEF
	EOF
	git add giraffe &&
	git commit -m "original file" &&
	orig=$(git rev-parse HEAD) &&

	cat >giraffe <<-\EOF &&
	ABC
	SPLIT
	DEF
	EOF
	git add giraffe &&
	git commit -m "interior SPLIT line" &&
	split=$(git rev-parse HEAD) &&

	cat >giraffe <<-\EOF &&
	ABC
	DEF
	EOF
	git add giraffe &&
	git commit -m "same contents as original" &&
	final=$(git rev-parse HEAD)

warning: in the working copy of 'giraffe', LF will be replaced by CRLF the next time Git touches it
[main 7531dad] original file
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 giraffe
warning: in the working copy of 'giraffe', LF will be replaced by CRLF the next time Git touches it
[main e82fb63] interior SPLIT line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
warning: in the working copy of 'giraffe', LF will be replaced by CRLF the next time Git touches it
[main 39e6f40] same contents as original
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
ok 28 - setup coalesce tests

expecting success of 8003.29 'blame coalesce': 
	cat >expect <<-EOF &&
	$orig 1 1 2
	$orig 2 2
	EOF
	git blame --porcelain $final giraffe >actual.raw &&
	grep "^$orig" actual.raw >actual &&
	test_cmp expect actual

ok 29 - blame coalesce

expecting success of 8003.30 'blame does not coalesce non-adjacent result lines': 
	cat >expect <<-EOF &&
	$orig 1) ABC
	$orig 3) DEF
	EOF
	git blame --no-abbrev -s -L1,1 -L3,3 $split giraffe >actual &&
	test_cmp expect actual

ok 30 - blame does not coalesce non-adjacent result lines

# passed all 30 test(s)
1..30
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8007-cat-file-textconv.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8007-cat-file-textconv/.git/
expecting success of 8007.1 'setup ': 
	echo "bin: test" >one.bin &&
	test_ln_s_add one.bin symlink.bin &&
	git add . &&
	GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
	echo "bin: test version 2" >one.bin &&
	GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master (root-commit) 6a4de31] First
 Author: Number1 <author@example.com>
 Date: Fri Jan 1 18:00:00 2010 +0000
 3 files changed, 5 insertions(+)
 create mode 100755 helper
 create mode 100644 one.bin
 create mode 120000 symlink.bin
[master aa3beaa] Second
 Author: Number2 <author@example.com>
 Date: Fri Jan 1 20:00:00 2010 +0000
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - setup 

expecting success of 8007.2 'usage: <bad rev>': 
	cat >expect <<-\EOF &&
	fatal: Not a valid object name HEAD2
	EOF
	test_must_fail git cat-file --textconv HEAD2 2>actual &&
	test_cmp expect actual

ok 2 - usage: <bad rev>

expecting success of 8007.3 'usage: <bad rev>:<bad path>': 
	cat >expect <<-\EOF &&
	fatal: invalid object name 'HEAD2'.
	EOF
	test_must_fail git cat-file --textconv HEAD2:two.bin 2>actual &&
	test_cmp expect actual

ok 3 - usage: <bad rev>:<bad path>

expecting success of 8007.4 'usage: <rev>:<bad path>': 
	cat >expect <<-\EOF &&
	fatal: path 'two.bin' does not exist in 'HEAD'
	EOF
	test_must_fail git cat-file --textconv HEAD:two.bin 2>actual &&
	test_cmp expect actual

ok 4 - usage: <rev>:<bad path>

expecting success of 8007.5 'usage: <rev> with no <path>': 
	cat >expect <<-\EOF &&
	fatal: <object>:<path> required, only <object> 'HEAD' given
	EOF
	test_must_fail git cat-file --textconv HEAD 2>actual &&
	test_cmp expect actual

ok 5 - usage: <rev> with no <path>

expecting success of 8007.6 'usage: <bad rev>:<good (in HEAD) path>': 
	cat >expect <<-\EOF &&
	fatal: invalid object name 'HEAD2'.
	EOF
	test_must_fail git cat-file --textconv HEAD2:one.bin 2>actual &&
	test_cmp expect actual

ok 6 - usage: <bad rev>:<good (in HEAD) path>

expecting success of 8007.7 'no filter specified': 
	git cat-file --textconv :one.bin >result &&
	test_cmp expected result

ok 7 - no filter specified

expecting success of 8007.8 'setup textconv filters': 
	echo "*.bin diff=test" >.gitattributes &&
	git config diff.test.textconv ./helper &&
	git config diff.test.cachetextconv false

ok 8 - setup textconv filters

expecting success of 8007.9 'cat-file without --textconv': 
	git cat-file blob :one.bin >result &&
	test_cmp expected result

ok 9 - cat-file without --textconv

expecting success of 8007.10 'cat-file without --textconv on previous commit': 
	git cat-file -p HEAD^:one.bin >result &&
	test_cmp expected result

ok 10 - cat-file without --textconv on previous commit

expecting success of 8007.11 'cat-file --textconv on last commit': 
	git cat-file --textconv :one.bin >result &&
	test_cmp expected result

ok 11 - cat-file --textconv on last commit

expecting success of 8007.12 'cat-file --textconv on previous commit': 
	git cat-file --textconv HEAD^:one.bin >result &&
	test_cmp expected result

ok 12 - cat-file --textconv on previous commit

expecting success of 8007.13 'cat-file without --textconv (symlink)': 
	printf "%s" "one.bin" >expected &&
	git cat-file blob :symlink.bin >result &&
	test_cmp expected result

ok 13 - cat-file without --textconv (symlink)

expecting success of 8007.14 'cat-file --textconv on index (symlink)': 
	git cat-file --textconv :symlink.bin >result &&
	test_cmp expected result

ok 14 - cat-file --textconv on index (symlink)

expecting success of 8007.15 'cat-file --textconv on HEAD (symlink)': 
	git cat-file --textconv HEAD:symlink.bin >result &&
	test_cmp expected result

ok 15 - cat-file --textconv on HEAD (symlink)

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8008-blame-formats.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8008-blame-formats/.git/
expecting success of 8008.1 'setup': 
	echo a >file &&
	git add file &&
	test_tick &&
	git commit -m one &&
	echo b >>file &&
	echo c >>file &&
	echo d >>file &&
	test_tick &&
	git commit -a -m two &&
	ID1=$(git rev-parse HEAD^) &&
	shortID1="^$(git rev-parse HEAD^ |cut -c 1-17)" &&
	ID2=$(git rev-parse HEAD) &&
	shortID2="$(git rev-parse HEAD |cut -c 1-18)"

[master (root-commit) baf5e0b] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 8825379] two
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
ok 1 - setup

expecting success of 8008.2 'normal blame output': 
	git blame --abbrev=17 file >actual &&
	test_cmp expect actual

ok 2 - normal blame output

expecting success of 8008.3 'blame --porcelain output': 
	git blame --porcelain file >actual &&
	test_cmp expect actual

ok 3 - blame --porcelain output

expecting success of 8008.4 'blame --line-porcelain output': 
	git blame --line-porcelain file >actual &&
	test_cmp expect actual

ok 4 - blame --line-porcelain output

expecting success of 8008.5 '--porcelain detects first non-blank line as subject': 
	(
		GIT_INDEX_FILE=.git/tmp-index &&
		export GIT_INDEX_FILE &&
		echo "This is it" >single-file &&
		git add single-file &&
		tree=$(git write-tree) &&
		commit=$(printf "%s\n%s\n%s\n\n\n  \noneline\n\nbody\n" \
			"tree $tree" \
			"author A <a@b.c> 123456789 +0000" \
			"committer C <c@d.e> 123456789 +0000" |
		git hash-object -w -t commit --stdin) &&
		git blame --porcelain $commit -- single-file >output &&
		grep "^summary oneline$" output
	)

summary oneline
ok 5 - --porcelain detects first non-blank line as subject

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8006-blame-textconv.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8006-blame-textconv/.git/
expecting success of 8006.1 'setup ': 
	echo "bin: test number 0" >zero.bin &&
	echo "bin: test 1" >one.bin &&
	echo "bin: test number 2" >two.bin &&
	test_ln_s_add one.bin symlink.bin &&
	git add . &&
	GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
	echo "bin: test 1 version 2" >one.bin &&
	echo "bin: test number 2 version 2" >>two.bin &&
	rm -f symlink.bin &&
	test_ln_s_add two.bin symlink.bin &&
	GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[master (root-commit) 6a76d70] First
 Author: Number1 <author@example.com>
 Date: Fri Jan 1 18:00:00 2010 +0000
 5 files changed, 7 insertions(+)
 create mode 100755 helper
 create mode 100644 one.bin
 create mode 120000 symlink.bin
 create mode 100644 two.bin
 create mode 100644 zero.bin
[master 940e3a6] Second
 Author: Number2 <author@example.com>
 Date: Fri Jan 1 20:00:00 2010 +0000
 3 files changed, 3 insertions(+), 2 deletions(-)
ok 1 - setup 

expecting success of 8006.2 'no filter specified': 
	git blame one.bin >blame &&
	find_blame Number2 <blame >result &&
	test_cmp expected result

ok 2 - no filter specified

expecting success of 8006.3 'setup textconv filters': 
	echo "*.bin diff=test" >.gitattributes &&
	echo "zero.bin eol=crlf" >>.gitattributes &&
	git config diff.test.textconv ./helper &&
	git config diff.test.cachetextconv false

ok 3 - setup textconv filters

expecting success of 8006.4 'blame with --no-textconv': 
	git blame --no-textconv one.bin >blame &&
	find_blame <blame> result &&
	test_cmp expected result

ok 4 - blame with --no-textconv

expecting success of 8006.5 'basic blame on last commit': 
	git blame one.bin >blame &&
	find_blame  <blame >result &&
	test_cmp expected result

ok 5 - basic blame on last commit

expecting success of 8006.6 'blame --textconv going through revisions': 
	git blame --textconv two.bin >blame &&
	find_blame <blame >result &&
	test_cmp expected result

ok 6 - blame --textconv going through revisions

expecting success of 8006.7 'blame --textconv with local changes': 
	test_when_finished "git checkout zero.bin" &&
	printf "bin: updated number 0\015" >zero.bin &&
	git blame --textconv zero.bin >blame &&
	expect="(Not Committed Yet ....-..-.. ..:..:.. +0000 1)" &&
	expect="$expect converted: updated number 0" &&
	expr "$(find_blame <blame)" : "^$expect"

75
Updated 1 path from the index
ok 7 - blame --textconv with local changes

expecting success of 8006.8 'setup +cachetextconv': 
	git config diff.test.cachetextconv true

ok 8 - setup +cachetextconv

expecting success of 8006.9 'blame --textconv works with textconvcache': 
	git blame --textconv two.bin >blame &&
	find_blame <blame >result &&
	test_cmp expected result &&
	git blame --textconv one.bin >blame &&
	find_blame  <blame >result &&
	test_cmp expected_one result

ok 9 - blame --textconv works with textconvcache

expecting success of 8006.10 'setup -cachetextconv': 
	git config diff.test.cachetextconv false

ok 10 - setup -cachetextconv

expecting success of 8006.11 'make a new commit': 
	echo "bin: test number 2 version 3" >>two.bin &&
	GIT_AUTHOR_NAME=Number3 git commit -a -m Third --date="2010-01-01 22:00:00"

[master 31ce4ac] Third
 Author: Number3 <author@example.com>
 Date: Fri Jan 1 22:00:00 2010 +0000
 1 file changed, 1 insertion(+)
ok 11 - make a new commit

expecting success of 8006.12 'blame from previous revision': 
	git blame HEAD^ two.bin >blame &&
	find_blame <blame >result &&
	test_cmp expected result

ok 12 - blame from previous revision

expecting success of 8006.13 'blame with --no-textconv (on symlink)': 
	git blame --no-textconv symlink.bin >blame &&
	find_blame <blame >result &&
	test_cmp expected result

ok 13 - blame with --no-textconv (on symlink)

expecting success of 8006.14 'blame --textconv (on symlink)': 
	git blame --textconv symlink.bin >blame &&
	find_blame <blame >result &&
	test_cmp expected result

ok 14 - blame --textconv (on symlink)

expecting success of 8006.15 'make another new commit': 
	cat >three.bin <<\EOF &&
bin: test number 2
bin: test number 2 version 2
bin: test number 2 version 3
bin: test number 3
EOF
	git add three.bin &&
	GIT_AUTHOR_NAME=Number4 git commit -a -m Fourth --date="2010-01-01 23:00:00"

[master edd8eae] Fourth
 Author: Number4 <author@example.com>
 Date: Fri Jan 1 23:00:00 2010 +0000
 1 file changed, 4 insertions(+)
 create mode 100644 three.bin
ok 15 - make another new commit

expecting success of 8006.16 'blame on last commit (-C -C, symlink)': 
	git blame -C -C three.bin >blame &&
	find_blame <blame >result &&
	cat >expected <<\EOF &&
(Number1 2010-01-01 18:00:00 +0000 1) converted: test number 2
(Number2 2010-01-01 20:00:00 +0000 2) converted: test number 2 version 2
(Number3 2010-01-01 22:00:00 +0000 3) converted: test number 2 version 3
(Number4 2010-01-01 23:00:00 +0000 4) converted: test number 3
EOF
	test_cmp expected result

ok 16 - blame on last commit (-C -C, symlink)

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8002-blame.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8002-blame/.git/
expecting success of 8002.1 'setup A lines': 
	echo "1A quick brown fox jumps over the" >file &&
	echo "lazy dog" >>file &&
	git add file &&
	GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \
	git commit -a -m "Initial."

[main (root-commit) 129283d] Initial.
 Author: A <A@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
ok 1 - setup A lines

expecting success of 8002.2 'blame 1 author': 
	check_count A 2

git blame -c  file 
Author A (expected 2, attributed 2) good
ok 2 - blame 1 author

expecting success of 8002.3 'blame in a bare repo without starting commit': 
	git clone --bare . bare.git &&
	(
		cd bare.git &&
		check_count A 2
	)

Cloning into bare repository 'bare.git'...
done.
git blame -c  file 
Author A (expected 2, attributed 2) good
ok 3 - blame in a bare repo without starting commit

expecting success of 8002.4 'blame by tag objects': 
	git tag -m "test tag" testTag &&
	git tag -m "test tag #2" testTag2 testTag &&
	check_count -h testTag A 2 &&
	check_count -h testTag2 A 2

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f testTag2 testTag^{}
hint: Disable this message with "git config advice.nestedTag false"
git blame -c  file testTag
Author A (expected 2, attributed 2) good
git blame -c  file testTag2
Author A (expected 2, attributed 2) good
ok 4 - blame by tag objects

expecting success of 8002.5 'setup B lines': 
	echo "2A quick brown fox jumps over the" >>file &&
	echo "lazy dog" >>file &&
	GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \
	git commit -a -m "Second."

[main 7e31098] Second.
 Author: B <B@test.git>
 1 file changed, 2 insertions(+)
ok 5 - setup B lines

expecting success of 8002.6 'blame 2 authors': 
	check_count A 2 B 2

git blame -c  file 
Author B (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
ok 6 - blame 2 authors

expecting success of 8002.7 'setup B1 lines (branch1)': 
	git checkout -b branch1 main &&
	echo "3A slow green fox jumps into the" >>file &&
	echo "well." >>file &&
	GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" \
	git commit -a -m "Branch1-1"

Switched to a new branch 'branch1'
[branch1 1b9b47a] Branch1-1
 Author: B1 <B1@test.git>
 1 file changed, 2 insertions(+)
ok 7 - setup B1 lines (branch1)

expecting success of 8002.8 'blame 2 authors + 1 branch1 author': 
	check_count A 2 B 2 B1 2

git blame -c  file 
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
Author B1 (expected 2, attributed 2) good
ok 8 - blame 2 authors + 1 branch1 author

expecting success of 8002.9 'setup B2 lines (branch2)': 
	git checkout -b branch2 main &&
	sed -e "s/2A quick brown/4A quick brown lazy dog/" <file >file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" \
	git commit -a -m "Branch2-1"

Switched to a new branch 'branch2'
[branch2 7d77deb] Branch2-1
 Author: B2 <B2@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - setup B2 lines (branch2)

expecting success of 8002.10 'blame 2 authors + 1 branch2 author': 
	check_count A 2 B 1 B2 1

git blame -c  file 
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
ok 10 - blame 2 authors + 1 branch2 author

expecting success of 8002.11 'merge branch1 & branch2': 
	git merge branch1

Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 ++
 1 file changed, 2 insertions(+)
ok 11 - merge branch1 & branch2

expecting success of 8002.12 'blame 2 authors + 2 merged-in authors': 
	check_count A 2 B 1 B1 2 B2 1

git blame -c  file 
Author B1 (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
ok 12 - blame 2 authors + 2 merged-in authors

expecting success of 8002.13 'blame --first-parent blames merge for branch1': 
	check_count --first-parent A 2 B 1 "A U Thor" 2 B2 1

git blame -c  --first-parent file 
Author B2 (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 2, attributed 2) good
ok 13 - blame --first-parent blames merge for branch1

expecting success of 8002.14 'blame ancestor': 
	check_count -h main A 2 B 2

git blame -c  file main
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
ok 14 - blame ancestor

expecting success of 8002.15 'blame great-ancestor': 
	check_count -h main^ A 2

git blame -c  file main^
Author A (expected 2, attributed 2) good
ok 15 - blame great-ancestor

expecting success of 8002.16 'setup evil merge': 
	echo "evil merge." >>file &&
	git commit -a --amend

[branch2 c413b3e] Merge branch 'branch1' into branch2
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
ok 16 - setup evil merge

expecting success of 8002.17 'blame evil merge': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1

git blame -c  file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 2, attributed 2) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
ok 17 - blame evil merge

expecting success of 8002.18 'blame huge graft': 
	test_when_finished "git checkout branch2" &&
	test_when_finished "rm -rf .git/info" &&
	graft= &&
	for i in 0 1 2
	do
		for j in 0 1 2 3 4 5 6 7 8 9
		do
			git checkout --orphan "$i$j" &&
			printf "%s\n" "$i" "$j" >file &&
			test_tick &&
			GIT_AUTHOR_NAME=$i$j GIT_AUTHOR_EMAIL=$i$j@test.git \
			git commit -a -m "$i$j" &&
			commit=$(git rev-parse --verify HEAD) &&
			graft="$graft$commit " || return 1
		done
	done &&
	mkdir .git/info &&
	printf "%s " $graft >.git/info/grafts &&
	check_count -h 00 01 1 10 1

Switched to a new branch '00'
[00 (root-commit) e2c6177] 00
 Author: 00 <00@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '01'
[01 (root-commit) 0dbe04b] 01
 Author: 01 <01@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '02'
[02 (root-commit) 97fbca6] 02
 Author: 02 <02@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '03'
[03 (root-commit) 5cdbcd8] 03
 Author: 03 <03@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '04'
[04 (root-commit) 5a154cf] 04
 Author: 04 <04@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '05'
[05 (root-commit) a84e1de] 05
 Author: 05 <05@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '06'
[06 (root-commit) d4bea54] 06
 Author: 06 <06@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '07'
[07 (root-commit) 24ba6e8] 07
 Author: 07 <07@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '08'
[08 (root-commit) fe90088] 08
 Author: 08 <08@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '09'
[09 (root-commit) 773a2fb] 09
 Author: 09 <09@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '10'
[10 (root-commit) 80536e5] 10
 Author: 10 <10@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '11'
[11 (root-commit) 33c07c1] 11
 Author: 11 <11@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '12'
[12 (root-commit) ae7094b] 12
 Author: 12 <12@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '13'
[13 (root-commit) 19e767d] 13
 Author: 13 <13@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '14'
[14 (root-commit) f7159ac] 14
 Author: 14 <14@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '15'
[15 (root-commit) d95fecf] 15
 Author: 15 <15@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '16'
[16 (root-commit) d8bfdb9] 16
 Author: 16 <16@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '17'
[17 (root-commit) aa3f31e] 17
 Author: 17 <17@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '18'
[18 (root-commit) d76cb1d] 18
 Author: 18 <18@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '19'
[19 (root-commit) 95e03c5] 19
 Author: 19 <19@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '20'
[20 (root-commit) d40a964] 20
 Author: 20 <20@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '21'
[21 (root-commit) 6c3def2] 21
 Author: 21 <21@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '22'
[22 (root-commit) 78d2294] 22
 Author: 22 <22@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '23'
[23 (root-commit) 76a64d0] 23
 Author: 23 <23@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '24'
[24 (root-commit) 59f234a] 24
 Author: 24 <24@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '25'
[25 (root-commit) 26ac47a] 25
 Author: 25 <25@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '26'
[26 (root-commit) db7e855] 26
 Author: 26 <26@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '27'
[27 (root-commit) 279f565] 27
 Author: 27 <27@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '28'
[28 (root-commit) f691d9c] 28
 Author: 28 <28@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '29'
[29 (root-commit) c72134e] 29
 Author: 29 <29@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
git blame -c  file 00
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Author 10 (expected 1, attributed 1) good
Author 01 (expected 1, attributed 1) good
Switched to branch 'branch2'
ok 18 - blame huge graft

expecting success of 8002.19 'setup incomplete line': 
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" \
	git commit -a -m "Incomplete"

[branch2 565fef5] Incomplete
 Author: C <C@test.git>
 1 file changed, 1 insertion(+)
ok 19 - setup incomplete line

expecting success of 8002.20 'blame incomplete line': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1

git blame -c  file 
Author B1 (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 20 - blame incomplete line

expecting success of 8002.21 'setup edits': 
	mv file file.orig &&
	{
		cat file.orig &&
		echo
	} | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" >file &&
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" \
	git commit -a -m "edit"

[branch2 96588b8] edit
 Author: D <D@test.git>
 1 file changed, 1 insertion(+), 2 deletions(-)
ok 21 - setup edits

expecting success of 8002.22 'blame edits': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1

git blame -c  file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 22 - blame edits

expecting success of 8002.23 'setup obfuscated email': 
	echo "No robots allowed" >file.new &&
	cat file >>file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" \
	git commit -a -m "norobots"

[branch2 04f7693] norobots
 Author: E <E at test dot git>
 1 file changed, 1 insertion(+)
ok 23 - setup obfuscated email

expecting success of 8002.24 'blame obfuscated email': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  file 
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 24 - blame obfuscated email

expecting success of 8002.25 'blame -L 1 (all)': 
	check_count -L1 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L1 file 
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 25 - blame -L 1 (all)

expecting success of 8002.26 'blame -L , (all)': 
	check_count -L, A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L, file 
Author A U Thor (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 26 - blame -L , (all)

expecting success of 8002.27 'blame -L X (X to end)': 
	check_count -L5 B1 1 C 1 D 1 "A U Thor" 1

git blame -c  -L5 file 
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 27 - blame -L X (X to end)

expecting success of 8002.28 'blame -L X, (X to end)': 
	check_count -L5, B1 1 C 1 D 1 "A U Thor" 1

git blame -c  -L5, file 
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 28 - blame -L X, (X to end)

expecting success of 8002.29 'blame -L ,Y (up to Y)': 
	check_count -L,3 A 1 B2 1 E 1

git blame -c  -L,3 file 
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 29 - blame -L ,Y (up to Y)

expecting success of 8002.30 'blame -L X,X': 
	check_count -L3,3 B2 1

git blame -c  -L3,3 file 
Author B2 (expected 1, attributed 1) good
ok 30 - blame -L X,X

expecting success of 8002.31 'blame -L X,Y': 
	check_count -L3,6 B 1 B1 1 B2 1 D 1

git blame -c  -L3,6 file 
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 31 - blame -L X,Y

expecting success of 8002.32 'blame -L Y,X (undocumented)': 
	check_count -L6,3 B 1 B1 1 B2 1 D 1

git blame -c  -L6,3 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 32 - blame -L Y,X (undocumented)

expecting success of 8002.33 'blame -L -X': 
	test_must_fail $PROG -L-1 file

fatal: -L invalid line number: -1
ok 33 - blame -L -X

expecting success of 8002.34 'blame -L 0': 
	test_must_fail $PROG -L0 file

fatal: -L invalid line number: 0
ok 34 - blame -L 0

expecting success of 8002.35 'blame -L ,0': 
	test_must_fail $PROG -L,0 file

fatal: -L invalid line number: 0
ok 35 - blame -L ,0

expecting success of 8002.36 'blame -L ,+0': 
	test_must_fail $PROG -L,+0 file

fatal: -L invalid empty range
ok 36 - blame -L ,+0

expecting success of 8002.37 'blame -L X,+0': 
	test_must_fail $PROG -L1,+0 file

fatal: -L invalid empty range
ok 37 - blame -L X,+0

expecting success of 8002.38 'blame -L X,+1': 
	check_count -L3,+1 B2 1

git blame -c  -L3,+1 file 
Author B2 (expected 1, attributed 1) good
ok 38 - blame -L X,+1

expecting success of 8002.39 'blame -L X,+N': 
	check_count -L3,+4 B 1 B1 1 B2 1 D 1

git blame -c  -L3,+4 file 
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 39 - blame -L X,+N

expecting success of 8002.40 'blame -L ,-0': 
	test_must_fail $PROG -L,-0 file

fatal: -L invalid empty range
ok 40 - blame -L ,-0

expecting success of 8002.41 'blame -L X,-0': 
	test_must_fail $PROG -L1,-0 file

fatal: -L invalid empty range
ok 41 - blame -L X,-0

expecting success of 8002.42 'blame -L X,-1': 
	check_count -L3,-1 B2 1

git blame -c  -L3,-1 file 
Author B2 (expected 1, attributed 1) good
ok 42 - blame -L X,-1

expecting success of 8002.43 'blame -L X,-N': 
	check_count -L6,-4 B 1 B1 1 B2 1 D 1

git blame -c  -L6,-4 file 
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 43 - blame -L X,-N

expecting success of 8002.44 'blame -L /RE/ (RE to end)': 
	check_count -L/evil/ C 1 "A U Thor" 1

git blame -c  -L/evil/ file 
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 44 - blame -L /RE/ (RE to end)

expecting success of 8002.45 'blame -L /RE/,/RE2/': 
	check_count -L/robot/,/green/ A 1 B 1 B2 1 D 1 E 1

git blame -c  -L/robot/,/green/ file 
Author A (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 45 - blame -L /RE/,/RE2/

expecting success of 8002.46 'blame -L X,/RE/': 
	check_count -L5,/evil/ B1 1 D 1 "A U Thor" 1

git blame -c  -L5,/evil/ file 
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 46 - blame -L X,/RE/

expecting success of 8002.47 'blame -L /RE/,Y': 
	check_count -L/99/,7 B1 1 D 1 "A U Thor" 1

git blame -c  -L/99/,7 file 
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 47 - blame -L /RE/,Y

expecting success of 8002.48 'blame -L /RE/,+N': 
	check_count -L/99/,+3 B1 1 D 1 "A U Thor" 1

git blame -c  -L/99/,+3 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 48 - blame -L /RE/,+N

expecting success of 8002.49 'blame -L /RE/,-N': 
	check_count -L/99/,-3 B 1 B2 1 D 1

git blame -c  -L/99/,-3 file 
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 49 - blame -L /RE/,-N

expecting success of 8002.50 'blame -L X (X == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n C 1

git blame -c  -L8 file 
Author C (expected 1, attributed 1) good
ok 50 - blame -L X (X == nlines)

expecting success of 8002.51 'blame -L X (X == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	test_must_fail $PROG -L$n file

fatal: file file has only 8 lines
ok 51 - blame -L X (X == nlines + 1)

expecting success of 8002.52 'blame -L X (X > nlines)': 
	test_must_fail $PROG -L12345 file

fatal: file file has only 8 lines
ok 52 - blame -L X (X > nlines)

expecting success of 8002.53 'blame -L ,Y (Y == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,8 file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 53 - blame -L ,Y (Y == nlines)

expecting success of 8002.54 'blame -L ,Y (Y == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,9 file 
Author B1 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 54 - blame -L ,Y (Y == nlines + 1)

expecting success of 8002.55 'blame -L ,Y (Y > nlines)': 
	check_count -L,12345 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,12345 file 
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 55 - blame -L ,Y (Y > nlines)

expecting success of 8002.56 'blame -L multiple (disjoint)': 
	check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1

git blame -c  -L2,3 -L6,7 file 
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 56 - blame -L multiple (disjoint)

expecting success of 8002.57 'blame -L multiple (disjoint: unordered)': 
	check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1

git blame -c  -L6,7 -L2,3 file 
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 57 - blame -L multiple (disjoint: unordered)

expecting success of 8002.58 'blame -L multiple (adjacent)': 
	check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1

git blame -c  -L2,3 -L4,5 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 58 - blame -L multiple (adjacent)

expecting success of 8002.59 'blame -L multiple (adjacent: unordered)': 
	check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1

git blame -c  -L4,5 -L2,3 file 
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 59 - blame -L multiple (adjacent: unordered)

expecting success of 8002.60 'blame -L multiple (overlapping)': 
	check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1

git blame -c  -L2,4 -L3,5 file 
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 60 - blame -L multiple (overlapping)

expecting success of 8002.61 'blame -L multiple (overlapping: unordered)': 
	check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1

git blame -c  -L3,5 -L2,4 file 
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 61 - blame -L multiple (overlapping: unordered)

expecting success of 8002.62 'blame -L multiple (superset/subset)': 
	check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L2,8 -L3,5 file 
Author B2 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 62 - blame -L multiple (superset/subset)

expecting success of 8002.63 'blame -L multiple (superset/subset: unordered)': 
	check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L3,5 -L2,8 file 
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 63 - blame -L multiple (superset/subset: unordered)

expecting success of 8002.64 'blame -L /RE/ (relative)': 
	check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L3,3 -L/fox/ file 
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 64 - blame -L /RE/ (relative)

expecting success of 8002.65 'blame -L /RE/ (relative: no preceding range)': 
	check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L/dog/ file 
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 65 - blame -L /RE/ (relative: no preceding range)

expecting success of 8002.66 'blame -L /RE/ (relative: adjacent)': 
	check_count -L1,1 -L/dog/,+1 A 1 E 1

git blame -c  -L1,1 -L/dog/,+1 file 
Author E (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 66 - blame -L /RE/ (relative: adjacent)

expecting success of 8002.67 'blame -L /RE/ (relative: not found)': 
	test_must_fail $PROG -L4,4 -L/dog/ file

fatal: -L parameter 'dog' starting at line 5: No match
ok 67 - blame -L /RE/ (relative: not found)

expecting success of 8002.68 'blame -L /RE/ (relative: end-of-file)': 
	test_must_fail $PROG -L, -L/$/ file

fatal: file file has only 8 lines
ok 68 - blame -L /RE/ (relative: end-of-file)

expecting success of 8002.69 'blame -L ^/RE/ (absolute)': 
	check_count -L3,3 -L^/dog/,+2 A 1 B2 1

git blame -c  -L3,3 -L^/dog/,+2 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 69 - blame -L ^/RE/ (absolute)

expecting success of 8002.70 'blame -L ^/RE/ (absolute: no preceding range)': 
	check_count -L^/dog/,+2 A 1 B2 1

git blame -c  -L^/dog/,+2 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 70 - blame -L ^/RE/ (absolute: no preceding range)

expecting success of 8002.71 'blame -L ^/RE/ (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^/tambourine/ file

fatal: -L parameter 'tambourine' starting at line 1: No match
ok 71 - blame -L ^/RE/ (absolute: not found)

expecting success of 8002.72 'blame -L ^/RE/ (absolute: end-of-file)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n -L^/$/,+2 A 1 C 1 E 1

git blame -c  -L8 -L^/$/,+2 file 
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 72 - blame -L ^/RE/ (absolute: end-of-file)

expecting success of 8002.73 'setup -L :regex': 
	tr Q "\\t" >hello.c <<-\EOF &&
	int main(int argc, const char *argv[])
	{
	Qputs("hello");
	}
	EOF
	git add hello.c &&
	GIT_AUTHOR_NAME="F" GIT_AUTHOR_EMAIL="F@test.git" \
	git commit -m "hello" &&

	mv hello.c hello.orig &&
	sed -e "/}/ {x; s/$/Qputs(\"goodbye\");/; G;}" <hello.orig |
	tr Q "\\t" >hello.c &&
	GIT_AUTHOR_NAME="G" GIT_AUTHOR_EMAIL="G@test.git" \
	git commit -a -m "goodbye" &&

	mv hello.c hello.orig &&
	echo "#include <stdio.h>" >hello.c &&
	cat hello.orig >>hello.c &&
	tr Q "\\t" >>hello.c <<-\EOF &&
	void mail()
	{
	Qputs("mail");
	}
	EOF
	GIT_AUTHOR_NAME="H" GIT_AUTHOR_EMAIL="H@test.git" \
	git commit -a -m "mail"

[branch2 f82005e] hello
 Author: F <F@test.git>
 1 file changed, 4 insertions(+)
 create mode 100644 hello.c
[branch2 edbab84] goodbye
 Author: G <G@test.git>
 1 file changed, 1 insertion(+)
[branch2 846166b] mail
 Author: H <H@test.git>
 1 file changed, 5 insertions(+)
ok 73 - setup -L :regex

expecting success of 8002.74 'blame -L :literal': 
	check_count -f hello.c -L:main F 4 G 1

git blame -c  -L:main hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 74 - blame -L :literal

expecting success of 8002.75 'blame -L :regex': 
	check_count -f hello.c "-L:m[a-z][a-z]l" H 4

git blame -c  -L:m[a-z][a-z]l hello.c 
Author H (expected 4, attributed 4) good
ok 75 - blame -L :regex

expecting success of 8002.76 'blame -L :nomatch': 
	test_must_fail $PROG -L:nomatch hello.c

fatal: -L parameter 'nomatch' starting at line 1: no match
ok 76 - blame -L :nomatch

expecting success of 8002.77 'blame -L :RE (relative)': 
	check_count -f hello.c -L3,3 -L:ma.. F 1 H 4

git blame -c  -L3,3 -L:ma.. hello.c 
Author F (expected 1, attributed 1) good
Author H (expected 4, attributed 4) good
ok 77 - blame -L :RE (relative)

expecting success of 8002.78 'blame -L :RE (relative: no preceding range)': 
	check_count -f hello.c -L:ma.. F 4 G 1

git blame -c  -L:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 78 - blame -L :RE (relative: no preceding range)

expecting success of 8002.79 'blame -L :RE (relative: not found)': 
	test_must_fail $PROG -L3,3 -L:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 4: no match
ok 79 - blame -L :RE (relative: not found)

expecting success of 8002.80 'blame -L :RE (relative: end-of-file)': 
	test_must_fail $PROG -L, -L:main hello.c

fatal: -L parameter 'main' starting at line 11: no match
ok 80 - blame -L :RE (relative: end-of-file)

expecting success of 8002.81 'blame -L ^:RE (absolute)': 
	check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1

git blame -c  -L3,3 -L^:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 81 - blame -L ^:RE (absolute)

expecting success of 8002.82 'blame -L ^:RE (absolute: no preceding range)': 
	check_count -f hello.c -L^:ma.. F 4 G 1

git blame -c  -L^:ma.. hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 82 - blame -L ^:RE (absolute: no preceding range)

expecting success of 8002.83 'blame -L ^:RE (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 1: no match
ok 83 - blame -L ^:RE (absolute: not found)

expecting success of 8002.84 'blame -L ^:RE (absolute: end-of-file)': 
	n=$(printf "%d" $(wc -l <hello.c)) &&
	check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1

git blame -c  -L10 -L^:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
Author H (expected 1, attributed 1) good
ok 84 - blame -L ^:RE (absolute: end-of-file)

expecting success of 8002.85 'blame -L :funcname with userdiff driver': 
	cat >file.template <<-\EOF &&
	DO NOT MATCH THIS LINE
	function RIGHT(a, b) result(c)
	AS THE DEFAULT DRIVER WOULD

	integer, intent(in) :: ChangeMe
	EOF

	fortran_file=file.f03 &&
	test_when_finished "rm .gitattributes" &&
	echo "$fortran_file diff=fortran" >.gitattributes &&

	test_commit --author "A <A@test.git>" \
		"add" "$fortran_file" \
		"$(cat file.template)" &&
	test_commit --author "B <B@test.git>" \
		"change" "$fortran_file" \
		"$(cat file.template | sed -e s/ChangeMe/IWasChanged/)" &&
	check_count -f "$fortran_file" -L:RIGHT A 3 B 1

[branch2 6b1b7a1] add
 Author: A <A@test.git>
 1 file changed, 5 insertions(+)
 create mode 100644 file.f03
[branch2 7caa17d] change
 Author: B <B@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
git blame -c  -L:RIGHT file.f03 
Author A (expected 3, attributed 3) good
Author B (expected 1, attributed 1) good
ok 85 - blame -L :funcname with userdiff driver

expecting success of 8002.86 'setup incremental': 
	(
	GIT_AUTHOR_NAME=I &&
	export GIT_AUTHOR_NAME &&
	GIT_AUTHOR_EMAIL=I@test.git &&
	export GIT_AUTHOR_EMAIL &&
	>incremental &&
	git add incremental &&
	git commit -m "step 0" &&
	printf "partial" >>incremental &&
	git commit -a -m "step 0.5" &&
	echo >>incremental &&
	git commit -a -m "step 1"
	)

[branch2 6c56eef] step 0
 Author: I <I@test.git>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 incremental
[branch2 c79b19e] step 0.5
 Author: I <I@test.git>
 1 file changed, 1 insertion(+)
[branch2 f65a7a7] step 1
 Author: I <I@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 86 - setup incremental

expecting success of 8002.87 'blame empty': 
	check_count -h HEAD^^ -f incremental

git blame -c  incremental HEAD^^
ok 87 - blame empty

expecting success of 8002.88 'blame -L 0 empty': 
	test_must_fail $PROG -L0 incremental HEAD^^

fatal: -L invalid line number: 0
ok 88 - blame -L 0 empty

expecting success of 8002.89 'blame -L 1 empty': 
	test_must_fail $PROG -L1 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 89 - blame -L 1 empty

expecting success of 8002.90 'blame -L 2 empty': 
	test_must_fail $PROG -L2 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 90 - blame -L 2 empty

expecting success of 8002.91 'blame half': 
	check_count -h HEAD^ -f incremental I 1

git blame -c  incremental HEAD^
Author I (expected 1, attributed 1) good
ok 91 - blame half

expecting success of 8002.92 'blame -L 0 half': 
	test_must_fail $PROG -L0 incremental HEAD^

fatal: -L invalid line number: 0
ok 92 - blame -L 0 half

expecting success of 8002.93 'blame -L 1 half': 
	check_count -h HEAD^ -f incremental -L1 I 1

git blame -c  -L1 incremental HEAD^
Author I (expected 1, attributed 1) good
ok 93 - blame -L 1 half

expecting success of 8002.94 'blame -L 2 half': 
	test_must_fail $PROG -L2 incremental HEAD^

fatal: file incremental has only 1 line
ok 94 - blame -L 2 half

expecting success of 8002.95 'blame -L 3 half': 
	test_must_fail $PROG -L3 incremental HEAD^

fatal: file incremental has only 1 line
ok 95 - blame -L 3 half

expecting success of 8002.96 'blame full': 
	check_count -f incremental I 1

git blame -c  incremental 
Author I (expected 1, attributed 1) good
ok 96 - blame full

expecting success of 8002.97 'blame -L 0 full': 
	test_must_fail $PROG -L0 incremental

fatal: -L invalid line number: 0
ok 97 - blame -L 0 full

expecting success of 8002.98 'blame -L 1 full': 
	check_count -f incremental -L1 I 1

git blame -c  -L1 incremental 
Author I (expected 1, attributed 1) good
ok 98 - blame -L 1 full

expecting success of 8002.99 'blame -L 2 full': 
	test_must_fail $PROG -L2 incremental

fatal: file incremental has only 1 line
ok 99 - blame -L 2 full

expecting success of 8002.100 'blame -L 3 full': 
	test_must_fail $PROG -L3 incremental

fatal: file incremental has only 1 line
ok 100 - blame -L 3 full

expecting success of 8002.101 'blame -L': 
	test_must_fail $PROG -L file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>

    <rev-opts> are documented in git-rev-list(1)

    --incremental         show blame entries as we find them, incrementally
    -b                    do not show object names of boundary commits (Default: off)
    --root                do not treat root commits as boundaries (Default: off)
    --show-stats          show work cost statistics
    --progress            force progress reporting
    --score-debug         show output score for blame entries
    -f, --show-name       show original filename (Default: auto)
    -n, --show-number     show original linenumber (Default: off)
    -p, --porcelain       show in a format designed for machine consumption
    --line-porcelain      show porcelain format with per-line commit information
    -c                    use the same output mode as git-annotate (Default: off)
    -t                    show raw timestamp (Default: off)
    -l                    show long commit SHA1 (Default: off)
    -s                    suppress author name and timestamp (Default: off)
    -e, --show-email      show author email instead of name (Default: off)
    -w                    ignore whitespace differences
    --ignore-rev <rev>    ignore <rev> when blaming
    --ignore-revs-file <file>
                          ignore revisions from <file>
    --color-lines         color redundant metadata from previous line differently
    --color-by-age        color lines by age
    --minimal             spend extra cycles to find better match
    -S <file>             use revisions from <file> instead of calling git-rev-list
    --contents <file>     use <file>'s contents as the final image
    -C[<score>]           find line copies within and across files
    -M[<score>]           find line movements within and across files
    -L <range>            process only line range <start>,<end> or function :<funcname>
    --abbrev[=<n>]        use <n> digits to display object names

ok 101 - blame -L

expecting success of 8002.102 'blame -L X,+': 
	test_must_fail $PROG -L1,+ file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 102 - blame -L X,+

expecting success of 8002.103 'blame -L X,-': 
	test_must_fail $PROG -L1,- file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 103 - blame -L X,-

expecting success of 8002.104 'blame -L X (non-numeric X)': 
	test_must_fail $PROG -LX file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 104 - blame -L X (non-numeric X)

expecting success of 8002.105 'blame -L X,Y (non-numeric Y)': 
	test_must_fail $PROG -L1,Y file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 105 - blame -L X,Y (non-numeric Y)

expecting success of 8002.106 'blame -L X,+N (non-numeric N)': 
	test_must_fail $PROG -L1,+N file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 106 - blame -L X,+N (non-numeric N)

expecting success of 8002.107 'blame -L X,-N (non-numeric N)': 
	test_must_fail $PROG -L1,-N file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 107 - blame -L X,-N (non-numeric N)

expecting success of 8002.108 'blame -L ,^/RE/': 
	test_must_fail $PROG -L1,^/99/ file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 108 - blame -L ,^/RE/

expecting success of 8002.109 'blame progress on a full file': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (10/10), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

846166ba (H 2005-04-07 15:42:13 -0700  1) #include <stdio.h>
f82005e9 (F 2005-04-07 15:42:13 -0700  2) int main(int argc, const char *argv[])
f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  7) void mail()
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 109 - blame progress on a full file

expecting success of 8002.110 'blame progress on a single range': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (4/4), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700 3) {
f82005e9 (F 2005-04-07 15:42:13 -0700 4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700 5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700 6) }
ok 110 - blame progress on a single range

expecting success of 8002.111 'blame progress on multiple ranges': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (7/7), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 -L 8,10 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 111 - blame progress on multiple ranges

expecting success of 8002.112 'setup': 
	hexsz=$(test_oid hexsz)

ok 112 - setup

expecting success of 8002.113 'blame untracked file in empty repo': 
	>untracked &&
	test_must_fail git blame untracked

fatal: no such path 'untracked' in HEAD
ok 113 - blame untracked file in empty repo

expecting success of 8002.114 'blame --show-email': 
	check_count \
		"<A@test.git>" 1 \
		"<B@test.git>" 1 \
		"<B1@test.git>" 1 \
		"<B2@test.git>" 1 \
		"<author@example.com>" 1 \
		"<C@test.git>" 1 \
		"<D@test.git>" 1 \
		"<E at test dot git>" 1

git blame -c -e  file 
Author <E at test dot git> (expected 1, attributed 1) good
Author <B1@test.git> (expected 1, attributed 1) good
Author <B2@test.git> (expected 1, attributed 1) good
Author <B@test.git> (expected 1, attributed 1) good
Author <A@test.git> (expected 1, attributed 1) good
Author <D@test.git> (expected 1, attributed 1) good
Author <C@test.git> (expected 1, attributed 1) good
Author <author@example.com> (expected 1, attributed 1) good
ok 114 - blame --show-email

expecting success of 8002.115 'setup showEmail tests': 
	echo "bin: test number 1" >one &&
	git add one &&
	GIT_AUTHOR_NAME=name1 \
	GIT_AUTHOR_EMAIL=email1@test.git \
	git commit -m First --date="2010-01-01 01:00:00" &&
	cat >expected_n <<-\EOF &&
	(name1 2010-01-01 01:00:00 +0000 1) bin: test number 1
	EOF
	cat >expected_e <<-\EOF
	(<email1@test.git> 2010-01-01 01:00:00 +0000 1) bin: test number 1
	EOF

[branch2 c39471f] First
 Author: name1 <email1@test.git>
 Date: Fri Jan 1 01:00:00 2010 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 one
ok 115 - setup showEmail tests

expecting success of 8002.116 'blame with no options and no config': 
	git blame one >blame &&
	find_blame <blame >result &&
	test_cmp expected_n result

ok 116 - blame with no options and no config

expecting success of 8002.117 'blame with showemail options': 
	git blame --show-email one >blame1 &&
	find_blame <blame1 >result &&
	test_cmp expected_e result &&
	git blame -e one >blame2 &&
	find_blame <blame2 >result &&
	test_cmp expected_e result &&
	git blame --no-show-email one >blame3 &&
	find_blame <blame3 >result &&
	test_cmp expected_n result

ok 117 - blame with showemail options

expecting success of 8002.118 'blame with showEmail config false': 
	git config blame.showEmail false &&
	git blame one >blame1 &&
	find_blame <blame1 >result &&
	test_cmp expected_n result &&
	git blame --show-email one >blame2 &&
	find_blame <blame2 >result &&
	test_cmp expected_e result &&
	git blame -e one >blame3 &&
	find_blame <blame3 >result &&
	test_cmp expected_e result &&
	git blame --no-show-email one >blame4 &&
	find_blame <blame4 >result &&
	test_cmp expected_n result

ok 118 - blame with showEmail config false

expecting success of 8002.119 'blame with showEmail config true': 
	git config blame.showEmail true &&
	git blame one >blame1 &&
	find_blame <blame1 >result &&
	test_cmp expected_e result &&
	git blame --no-show-email one >blame2 &&
	find_blame <blame2 >result &&
	test_cmp expected_n result

ok 119 - blame with showEmail config true

expecting success of 8002.120 'set up abbrev tests': 
	test_commit abbrev &&
	sha1=$(git rev-parse --verify HEAD) &&
	check_abbrev () {
		expect=$1 && shift &&
		echo $sha1 | cut -c 1-$expect >expect &&
		git blame "$@" abbrev.t >actual &&
		perl -lne "/[0-9a-f]+/ and print \$&" <actual >actual.sha &&
		test_cmp expect actual.sha
	}

[branch2 32e5f6f] abbrev
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 abbrev.t
ok 120 - set up abbrev tests

expecting success of 8002.121 'blame --abbrev=<n> works': 
	# non-boundary commits get +1 for alignment
	check_abbrev 31 --abbrev=30 HEAD &&
	check_abbrev 30 --abbrev=30 ^HEAD

ok 121 - blame --abbrev=<n> works

expecting success of 8002.122 'blame -l aligns regular and boundary commits': 
	check_abbrev $hexsz         -l HEAD &&
	check_abbrev $((hexsz - 1)) -l ^HEAD

ok 122 - blame -l aligns regular and boundary commits

expecting success of 8002.123 'blame --abbrev with full length behaves like -l': 
	check_abbrev $hexsz         --abbrev=$hexsz HEAD &&
	check_abbrev $((hexsz - 1)) --abbrev=$hexsz ^HEAD

ok 123 - blame --abbrev with full length behaves like -l

expecting success of 8002.124 '--no-abbrev works like --abbrev with full length': 
	check_abbrev $hexsz --no-abbrev

ok 124 - --no-abbrev works like --abbrev with full length

expecting success of 8002.125 '--exclude-promisor-objects does not BUG-crash': 
	test_must_fail git blame --exclude-promisor-objects one

error: unknown option `--exclude-promisor-objects'
usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>

    <rev-opts> are documented in git-rev-list(1)

    --incremental         show blame entries as we find them, incrementally
    -b                    do not show object names of boundary commits (Default: off)
    --root                do not treat root commits as boundaries (Default: off)
    --show-stats          show work cost statistics
    --progress            force progress reporting
    --score-debug         show output score for blame entries
    -f, --show-name       show original filename (Default: auto)
    -n, --show-number     show original linenumber (Default: off)
    -p, --porcelain       show in a format designed for machine consumption
    --line-porcelain      show porcelain format with per-line commit information
    -c                    use the same output mode as git-annotate (Default: off)
    -t                    show raw timestamp (Default: off)
    -l                    show long commit SHA1 (Default: off)
    -s                    suppress author name and timestamp (Default: off)
    -e, --show-email      show author email instead of name (Default: off)
    -w                    ignore whitespace differences
    --ignore-rev <rev>    ignore <rev> when blaming
    --ignore-revs-file <file>
                          ignore revisions from <file>
    --color-lines         color redundant metadata from previous line differently
    --color-by-age        color lines by age
    --minimal             spend extra cycles to find better match
    -S <file>             use revisions from <file> instead of calling git-rev-list
    --contents <file>     use <file>'s contents as the final image
    -C[<score>]           find line copies within and across files
    -M[<score>]           find line movements within and across files
    -L <range>            process only line range <start>,<end> or function :<funcname>
    --abbrev[=<n>]        use <n> digits to display object names

ok 125 - --exclude-promisor-objects does not BUG-crash

expecting success of 8002.126 'blame with uncommitted edits in partial clone does not crash': 
	git init server &&
	echo foo >server/file.txt &&
	git -C server add file.txt &&
	git -C server commit -m file &&

	git clone --filter=blob:none "file://$(pwd)/server" client &&
	echo bar >>client/file.txt &&
	git -C client blame file.txt

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8002-blame/server/.git/
[main (root-commit) a09dc96] file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
Cloning into 'client'...
warning: filtering not recognized by server, ignoring
^a09dc96 (A U Thor          2005-04-07 15:45:13 -0700 1) foo
00000000 (Not Committed Yet 2022-12-28 08:06:25 +0000 2) bar
ok 126 - blame with uncommitted edits in partial clone does not crash

# passed all 126 test(s)
1..126
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8010-cat-file-filters.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8010-cat-file-filters/.git/
expecting success of 8010.1 'setup ': 
	echo "*.txt eol=crlf diff=txt" >.gitattributes &&
	echo "hello" | append_cr >world.txt &&
	git add .gitattributes world.txt &&
	test_tick &&
	git commit -m "Initial commit"

[master (root-commit) 7b708d0] Initial commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 world.txt
ok 1 - setup 

expecting success of 8010.2 'no filters with `git show`': 
	git show HEAD:world.txt >actual &&
	! has_cr actual


ok 2 - no filters with `git show`

expecting success of 8010.3 'no filters with cat-file': 
	git cat-file blob HEAD:world.txt >actual &&
	! has_cr actual

ok 3 - no filters with cat-file

expecting success of 8010.4 'cat-file --filters converts to worktree version': 
	git cat-file --filters HEAD:world.txt >actual &&
	has_cr actual

ok 4 - cat-file --filters converts to worktree version

expecting success of 8010.5 'cat-file --filters --path=<path> works': 
	sha1=$(git rev-parse -q --verify HEAD:world.txt) &&
	git cat-file --filters --path=world.txt $sha1 >actual &&
	has_cr actual

ok 5 - cat-file --filters --path=<path> works

expecting success of 8010.6 'cat-file --textconv --path=<path> works': 
	sha1=$(git rev-parse -q --verify HEAD:world.txt) &&
	test_config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <" &&
	git cat-file --textconv --path=hello.txt $sha1 >rot13 &&
	test uryyb = "$(cat rot13 | remove_cr)"

ok 6 - cat-file --textconv --path=<path> works

expecting success of 8010.7 '--path=<path> complains without --textconv/--filters': 
	sha1=$(git rev-parse -q --verify HEAD:world.txt) &&
	test_must_fail git cat-file --path=hello.txt blob $sha1 >actual 2>err &&
	test_must_be_empty actual &&
	grep "path.*needs.*filters" err

fatal: '--path=<path|tree-ish>' needs '--filters' or '--textconv'
ok 7 - --path=<path> complains without --textconv/--filters

expecting success of 8010.8 '--textconv/--filters complain without path': 
	test_must_fail git cat-file --textconv HEAD &&
	test_must_fail git cat-file --filters HEAD

fatal: <object>:<path> required, only <object> 'HEAD' given
fatal: <object>:<path> required, only <object> 'HEAD' given
ok 8 - --textconv/--filters complain without path

expecting success of 8010.9 'cat-file --textconv --batch works': 
	sha1=$(git rev-parse -q --verify HEAD:world.txt) &&
	test_config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <" &&
	printf "%s hello.txt\n%s hello\n" $sha1 $sha1 |
	git cat-file --textconv --batch >actual &&
	printf "%s blob 6\nuryyb\r\n\n%s blob 6\nhello\n\n" \
		$sha1 $sha1 >expect &&
	test_cmp expect actual

ok 9 - cat-file --textconv --batch works

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8009-blame-vs-topicbranches.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8009-blame-vs-topicbranches/.git/
expecting success of 8009.1 'setup': 
	test_commit A0 file.t line0 &&
	test_commit A1 &&
	git reset --hard A0 &&
	test_commit B1 &&
	test_commit B2 file.t line0changed &&
	git reset --hard A1 &&
	test_merge A2 B2 &&
	git reset --hard A1 &&
	test_commit C1 &&
	git reset --hard A2 &&
	test_merge A3 C1
	
[master (root-commit) 2152206] A0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.t
[master 5392e14] A1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A1.t
HEAD is now at 2152206 A0
[master 15a8c72] B1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B1.t
[master e1433f5] B2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at 5392e14 A1
Merge made by the 'ort' strategy.
 B1.t   | 1 +
 file.t | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 B1.t
HEAD is now at 5392e14 A1
[master fa266ba] C1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C1.t
HEAD is now at 6e3b304 A2
Merge made by the 'ort' strategy.
 C1.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C1.t
ok 1 - setup

expecting success of 8009.2 'blame --reverse --first-parent finds A1': 
	git blame --porcelain --reverse --first-parent A0..A3 -- file.t >actual_full &&
	head -n 1 <actual_full | sed -e "s/ .*//" >actual &&
	git rev-parse A1 >expect &&
	test_cmp expect actual
	
ok 2 - blame --reverse --first-parent finds A1

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8011-blame-split-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8011-blame-split-file/.git/
expecting success of 8011.1 'setup split file case': 
	# use lines long enough to trigger content detection
	test_seq 1000 1010 >one &&
	test_seq 2000 2010 >two &&
	git add one two &&
	test_commit base &&

	sed "6s/^/modified /" <one >one.tmp &&
	mv one.tmp one &&
	sed "6s/^/modified /" <two >two.tmp &&
	mv two.tmp two &&
	git add -u &&
	test_commit modified &&

	cat one two >combined &&
	git add combined &&
	git rm one two &&
	test_commit combined

[master (root-commit) ad6b874] base
 Author: A U Thor <author@example.com>
 3 files changed, 23 insertions(+)
 create mode 100644 base.t
 create mode 100644 one
 create mode 100644 two
[master 9b55153] modified
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 modified.t
rm 'one'
rm 'two'
[master cc1b823] combined
 Author: A U Thor <author@example.com>
 3 files changed, 12 insertions(+), 11 deletions(-)
 rename one => combined (50%)
 create mode 100644 combined.t
 delete mode 100644 two
ok 1 - setup split file case

expecting success of 8011.2 'setup simulated porcelain': 
	# This just reads porcelain-ish output and tries
	# to output the value of a given field for each line (either by
	# reading the field that accompanies this line, or referencing
	# the information found last time the commit was mentioned).
	cat >read-porcelain.pl <<-\EOF
	my $field = shift;
	while (<>) {
		if (/^[0-9a-f]{40,} /) {
			flush();
			$hash = $&;
		} elsif (/^$field (.*)/) {
			$cache{$hash} = $1;
		}
	}
	flush();

	sub flush {
		return unless defined $hash;
		if (defined $cache{$hash}) {
			print "$cache{$hash}\n";
		} else {
			print "NONE\n";
		}
	}
	EOF

ok 2 - setup simulated porcelain

expecting success of 8011.3 'generate --porcelain output': 
		git blame --root -C --$output combined >output
	
ok 3 - generate --porcelain output

expecting success of 8011.4 'porcelain output finds correct commits': 
		generate_expect >expect <<-\EOF &&
		5 base
		1 modified
		10 base
		1 modified
		5 base
		EOF
		perl read-porcelain.pl summary <output >actual &&
		test_cmp expect actual
	
ok 4 - porcelain output finds correct commits

expecting success of 8011.5 'porcelain output shows correct filenames': 
		generate_expect >expect <<-\EOF &&
		11 one
		11 two
		EOF
		perl read-porcelain.pl filename <output >actual &&
		test_cmp expect actual
	
ok 5 - porcelain output shows correct filenames

expecting success of 8011.6 'porcelain output shows correct previous pointer': 
		generate_expect >expect <<-EOF &&
		5 NONE
		1 $(git rev-parse modified^) one
		10 NONE
		1 $(git rev-parse modified^) two
		5 NONE
		EOF
		perl read-porcelain.pl previous <output >actual &&
		test_cmp expect actual
	
ok 6 - porcelain output shows correct previous pointer

expecting success of 8011.7 'generate --line-porcelain output': 
		git blame --root -C --$output combined >output
	
ok 7 - generate --line-porcelain output

expecting success of 8011.8 'line-porcelain output finds correct commits': 
		generate_expect >expect <<-\EOF &&
		5 base
		1 modified
		10 base
		1 modified
		5 base
		EOF
		perl read-porcelain.pl summary <output >actual &&
		test_cmp expect actual
	
ok 8 - line-porcelain output finds correct commits

expecting success of 8011.9 'line-porcelain output shows correct filenames': 
		generate_expect >expect <<-\EOF &&
		11 one
		11 two
		EOF
		perl read-porcelain.pl filename <output >actual &&
		test_cmp expect actual
	
ok 9 - line-porcelain output shows correct filenames

expecting success of 8011.10 'line-porcelain output shows correct previous pointer': 
		generate_expect >expect <<-EOF &&
		5 NONE
		1 $(git rev-parse modified^) one
		10 NONE
		1 $(git rev-parse modified^) two
		5 NONE
		EOF
		perl read-porcelain.pl previous <output >actual &&
		test_cmp expect actual
	
ok 10 - line-porcelain output shows correct previous pointer

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8013-blame-ignore-revs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8013-blame-ignore-revs/.git/
expecting success of 8013.1 'setup': 
	test_commit A file line1 &&

	echo line2 >>file &&
	git add file &&
	test_tick &&
	git commit -m B &&
	git tag B &&

	test_write_lines line-one line-two >file &&
	git add file &&
	test_tick &&
	git commit -m X &&
	git tag X &&
	git tag -a -m "X (annotated)" XT &&

	git blame --line-porcelain file >blame_raw &&

	grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse X >expect &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse X >expect &&
	test_cmp expect actual

[master (root-commit) 6d1c9f2] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
[master 5552443] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master abb9c4e] X
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
ok 1 - setup

expecting success of 8013.2 'validate --ignore-rev': 
	test_must_fail git blame --ignore-rev X^{tree} file

fatal: cannot find revision X^{tree} to ignore
ok 2 - validate --ignore-rev

expecting success of 8013.3 'validate --ignore-revs-file': 
	git rev-parse X^{tree} >ignore_x &&
	git blame --ignore-revs-file ignore_x file

abb9c4e3 (A U Thor 2005-04-07 15:15:13 -0700 1) line-one
abb9c4e3 (A U Thor 2005-04-07 15:15:13 -0700 2) line-two
ok 3 - validate --ignore-revs-file

expecting success of 8013.4 'ignore_rev_changing_lines (X)': 
		git blame --line-porcelain --ignore-rev $I file >blame_raw &&

		grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
		git rev-parse A >expect &&
		test_cmp expect actual &&

		grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
		git rev-parse B >expect &&
		test_cmp expect actual
	
ok 4 - ignore_rev_changing_lines (X)

expecting success of 8013.5 'ignore_rev_changing_lines (XT)': 
		git blame --line-porcelain --ignore-rev $I file >blame_raw &&

		grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
		git rev-parse A >expect &&
		test_cmp expect actual &&

		grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
		git rev-parse B >expect &&
		test_cmp expect actual
	
ok 5 - ignore_rev_changing_lines (XT)

expecting success of 8013.6 'ignore_rev_adding_unblamable_lines': 
	test_write_lines line-one-change line-two-changed y3 y4 >file &&
	git add file &&
	test_tick &&
	git commit -m Y &&
	git tag Y &&

	git rev-parse Y >expect &&
	git blame --line-porcelain file --ignore-rev Y >blame_raw &&

	grep -E "^[0-9a-f]+ [0-9]+ 3" blame_raw | sed -e "s/ .*//" >actual &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 4" blame_raw | sed -e "s/ .*//" >actual &&
	test_cmp expect actual

[master e0d35d6] Y
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+), 2 deletions(-)
ok 6 - ignore_rev_adding_unblamable_lines

expecting success of 8013.7 'ignore_revs_from_files': 
	git rev-parse X >ignore_x &&
	git rev-parse Y >ignore_y &&
	git blame --line-porcelain file --ignore-revs-file ignore_x --ignore-revs-file ignore_y >blame_raw &&

	grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse A >expect &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse B >expect &&
	test_cmp expect actual

ok 7 - ignore_revs_from_files

expecting success of 8013.8 'ignore_revs_from_configs_and_files': 
	git config --add blame.ignoreRevsFile ignore_x &&
	git blame --line-porcelain file --ignore-revs-file ignore_y >blame_raw &&

	grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse A >expect &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse B >expect &&
	test_cmp expect actual

ok 8 - ignore_revs_from_configs_and_files

expecting success of 8013.9 'override_ignore_revs_file': 
	git blame --line-porcelain file --ignore-revs-file "" --ignore-revs-file ignore_y >blame_raw &&
	git rev-parse X >expect &&

	grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual &&
	test_cmp expect actual
	
ok 9 - override_ignore_revs_file

expecting success of 8013.10 'bad_files_and_revs': 
	test_must_fail git blame file --ignore-rev NOREV 2>err &&
	test_i18ngrep "cannot find revision NOREV to ignore" err &&

	test_must_fail git blame file --ignore-revs-file NOFILE 2>err &&
	test_i18ngrep "could not open.*: NOFILE" err &&

	echo NOREV >ignore_norev &&
	test_must_fail git blame file --ignore-revs-file ignore_norev 2>err &&
	test_i18ngrep "invalid object name: NOREV" err

fatal: cannot find revision NOREV to ignore
fatal: could not open object name list: NOFILE
fatal: invalid object name: NOREV
ok 10 - bad_files_and_revs

expecting success of 8013.11 'mark_unblamable_lines': 
	git config --add blame.markUnblamableLines true &&

	git blame --ignore-rev Y file >blame_raw &&
	echo "*" >expect &&

	sed -n "3p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual &&

	sed -n "4p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual

ok 11 - mark_unblamable_lines

expecting success of 8013.12 'mark_ignored_lines': 
	git config --add blame.markIgnoredLines true &&

	test_write_lines line-one-Z line-two-Z y3 y4 >file &&
	git add file &&
	test_tick &&
	git commit -m Z &&
	git tag Z &&

	git blame --ignore-rev Z file >blame_raw &&
	echo "?" >expect &&

	sed -n "1p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual &&

	sed -n "2p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual &&

	sed -n "3p" blame_raw | cut -c1 >actual &&
	! test_cmp expect actual &&

	sed -n "4p" blame_raw | cut -c1 >actual &&
	! test_cmp expect actual

[master d1e4550] Z
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
--- expect	2022-12-28 08:06:30.045842481 +0000
+++ actual	2022-12-28 08:06:30.115845019 +0000
@@ -1 +1 @@
-?
+e
--- expect	2022-12-28 08:06:30.045842481 +0000
+++ actual	2022-12-28 08:06:30.140845926 +0000
@@ -1 +1 @@
-?
+e
ok 12 - mark_ignored_lines

expecting success of 8013.13 'mark_unblamable_lines_intermediate': 
	git config --add blame.markUnblamableLines true &&

	git blame --ignore-rev Y file >blame_raw 2>stderr &&
	echo "*" >expect &&

	sed -n "3p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual &&

	sed -n "4p" blame_raw | cut -c1 >actual &&
	test_cmp expect actual

ok 13 - mark_unblamable_lines_intermediate

expecting success of 8013.14 'ignored_chunk_negative_parent_size': 
	rm -rf .git/ &&
	git init &&

	test_write_lines L1 L2 L7 L8 L9 >file &&
	git add file &&
	test_tick &&
	git commit -m A &&
	git tag A &&

	test_write_lines L1 L2 L3 L4 L5 L6 L7 L8 L9 >file &&
	git add file &&
	test_tick &&
	git commit -m B &&
	git tag B &&

	test_write_lines L1 L2 L3 L4 xxx L6 L7 L8 L9 >file &&
	git add file &&
	test_tick &&
	git commit -m C &&
	git tag C &&

	git blame file --ignore-rev B >blame_raw

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8013-blame-ignore-revs/.git/
[master (root-commit) 0157998] A
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 file
[master a8e635b] B
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
[master 3b3594b] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 14 - ignored_chunk_negative_parent_size

expecting success of 8013.15 'ignore_merge': 
	rm -rf .git/ &&
	git init &&

	test_write_lines L1 L2 L3 L4 L5 L6 L7 L8 L9 >file &&
	git add file &&
	test_tick &&
	git commit -m A &&
	git tag A &&

	test_write_lines BB L2 L3 L4 L5 L6 L7 L8 L9 >file &&
	git add file &&
	test_tick &&
	git commit -m B &&
	git tag B &&

	git reset --hard A &&
	test_write_lines L1 L2 L3 L4 L5 L6 L7 L8 CC >file &&
	git add file &&
	test_tick &&
	git commit -m C &&
	git tag C &&

	test_merge M B &&
	git blame --line-porcelain file --ignore-rev M >blame_raw &&

	grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse B >expect &&
	test_cmp expect actual &&

	grep -E "^[0-9a-f]+ [0-9]+ 9" blame_raw | sed -e "s/ .*//" >actual &&
	git rev-parse C >expect &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8013-blame-ignore-revs/.git/
[master (root-commit) aebca2b] A
 Author: A U Thor <author@example.com>
 1 file changed, 9 insertions(+)
 create mode 100644 file
[master 38a4cbf] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
HEAD is now at aebca2b A
[master 1f9babe] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 15 - ignore_merge

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8014-blame-ignore-fuzzy.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8014-blame-ignore-fuzzy/.git/
expecting success of 8014.1 'setup': 
	for i in $(test_seq 2 $last_test)
	do
		# Append each line in a separate commit to make it easy to
		# check which original line the blame output relates to.

		line_count=0 &&
		while IFS= read line
		do
			line_count=$((line_count+1)) &&
			echo "$line" >>"$i" &&
			git add "$i" &&
			test_tick &&
			GIT_AUTHOR_NAME="$line_count" git commit -m "$line_count" || return 1
		done <"a$i"
	done &&

	for i in $(test_seq 2 $last_test)
	do
		# Overwrite the files with the final content.
		cp b$i $i &&
		git add $i || return 1
	done &&
	test_tick &&

	# Commit the final content all at once so it can all be
	# referred to with the same commit ID.
	GIT_AUTHOR_NAME=Final git commit -m Final &&

	IGNOREME=$(git rev-parse HEAD)

[master (root-commit) a459bb2] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 2
[master 455f594] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master ae356a5] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master 986ba04] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master 112fd1b] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+)
[master 55cb950] 6
 Author: 6 <author@example.com>
 1 file changed, 1 insertion(+)
[master fb44572] 7
 Author: 7 <author@example.com>
 1 file changed, 1 insertion(+)
[master 0193540] 8
 Author: 8 <author@example.com>
 1 file changed, 1 insertion(+)
[master 54573a7] 9
 Author: 9 <author@example.com>
 1 file changed, 1 insertion(+)
[master 2906ab9] 10
 Author: 10 <author@example.com>
 1 file changed, 1 insertion(+)
[master 993387a] 11
 Author: 11 <author@example.com>
 1 file changed, 1 insertion(+)
[master 5a378ed] 12
 Author: 12 <author@example.com>
 1 file changed, 1 insertion(+)
[master 07b780d] 13
 Author: 13 <author@example.com>
 1 file changed, 1 insertion(+)
[master 06d4280] 14
 Author: 14 <author@example.com>
 1 file changed, 1 insertion(+)
[master 83128e2] 15
 Author: 15 <author@example.com>
 1 file changed, 1 insertion(+)
[master c7dc60e] 16
 Author: 16 <author@example.com>
 1 file changed, 1 insertion(+)
[master b64f9f3] 17
 Author: 17 <author@example.com>
 1 file changed, 1 insertion(+)
[master b2112c8] 18
 Author: 18 <author@example.com>
 1 file changed, 1 insertion(+)
[master 6de54b3] 19
 Author: 19 <author@example.com>
 1 file changed, 1 insertion(+)
[master dd68dd4] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 3
[master ce31df2] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 843f64f] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master 35030af] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 4
[master 953d34c] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 8e827ec] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master 8c3589a] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master 84cd02a] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 5
[master e94eb23] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 32c6f85] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master bf2d22c] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master 2d1cc84] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+)
[master 74b81ac] 6
 Author: 6 <author@example.com>
 1 file changed, 1 insertion(+)
[master 0854834] 7
 Author: 7 <author@example.com>
 1 file changed, 1 insertion(+)
[master 4a530d1] 8
 Author: 8 <author@example.com>
 1 file changed, 1 insertion(+)
[master ad63694] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 6
[master 7e3e3c7] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 8c39144] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master 823725b] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master 5728ada] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+)
[master 9c5745d] 6
 Author: 6 <author@example.com>
 1 file changed, 1 insertion(+)
[master 7ce3865] 7
 Author: 7 <author@example.com>
 1 file changed, 1 insertion(+)
[master 9221615] 8
 Author: 8 <author@example.com>
 1 file changed, 1 insertion(+)
[master f7f2b1c] 9
 Author: 9 <author@example.com>
 1 file changed, 1 insertion(+)
[master c156520] 10
 Author: 10 <author@example.com>
 1 file changed, 1 insertion(+)
[master b387727] 11
 Author: 11 <author@example.com>
 1 file changed, 1 insertion(+)
[master 3da1770] 12
 Author: 12 <author@example.com>
 1 file changed, 1 insertion(+)
[master 9caa469] 13
 Author: 13 <author@example.com>
 1 file changed, 1 insertion(+)
[master 1449afa] 14
 Author: 14 <author@example.com>
 1 file changed, 1 insertion(+)
[master eafda23] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 7
[master 83d236f] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 77d14eb] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 8
[master 860eb54] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 0b8c3b6] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master 4dbae56] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 9
[master 654f4f9] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 1194a28] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master b071882] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master d878653] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+)
[master 04b3bcc] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 10
[master f574735] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master ecce56b] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master df40e26] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 11
[master dc03d7d] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master b4f9f1c] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master fb77c6a] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 12
[master eab48da] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 13
[master 0adab8f] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 207a501] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master c6621c4] 4
 Author: 4 <author@example.com>
 1 file changed, 1 insertion(+)
[master 3134814] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+)
[master 01c9204] Final
 Author: Final <author@example.com>
 12 files changed, 53 insertions(+), 65 deletions(-)
ok 1 - setup

expecting success of 8014.2 'Regression test for partially overlapping search ranges': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 2 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected2 actual
ok 2 - Regression test for partially overlapping search ranges

expecting success of 8014.3 'Combine 3 lines into 2': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 3 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected3 actual
ok 3 - Combine 3 lines into 2

expecting success of 8014.4 'Add curly brackets': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 4 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected4 actual
ok 4 - Add curly brackets

expecting success of 8014.5 'Combine many lines and change case': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 5 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected5 actual
ok 5 - Combine many lines and change case

expecting success of 8014.6 'Rename and combine lines': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 6 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected6 actual
ok 6 - Rename and combine lines

expecting success of 8014.7 'Same line twice': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 7 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected7 actual
ok 7 - Same line twice

expecting success of 8014.8 'Enforce line order': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 8 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected8 actual
ok 8 - Enforce line order

expecting success of 8014.9 'Expand lines and rename variables': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 9 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected9 actual
ok 9 - Expand lines and rename variables

expecting success of 8014.10 'Two close matches versus one less close match': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 10 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected10 actual
ok 10 - Two close matches versus one less close match

expecting success of 8014.11 'Piggy in the middle': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 11 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected11 actual
ok 11 - Piggy in the middle

expecting success of 8014.12 'No trailing newline': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 12 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected12 actual
ok 12 - No trailing newline

expecting success of 8014.13 'Reorder includes': git blame -M9 --ignore-rev 01c9204ad215bac1f8b21a95bd806f4910e7e8b9 13 >output &&
	sed -e "s/^[0-9a-f^]* *(\([^ ]*\) .*/\1/" output >actual &&
	test_cmp expected13 actual
ok 13 - Reorder includes

expecting success of 8014.14 'Diff chunks with no suspects': 
	test_write_lines xy1 A B C xy1 >file &&
	git add file &&
	test_tick &&
	GIT_AUTHOR_NAME=1 git commit -m 1 &&

	test_write_lines xy2 A B xy2 C xy2 >file &&
	git add file &&
	test_tick &&
	GIT_AUTHOR_NAME=2 git commit -m 2 &&
	REV_2=$(git rev-parse HEAD) &&

	test_write_lines xy3 A >file &&
	git add file &&
	test_tick &&
	GIT_AUTHOR_NAME=3 git commit -m 3 &&
	REV_3=$(git rev-parse HEAD) &&

	test_write_lines 1 1 >expected &&

	git blame --ignore-rev $REV_2 --ignore-rev $REV_3 file >output &&
	sed -e "$pick_author" output >actual &&

	test_cmp expected actual
	
[master c2d5eb7] 1
 Author: 1 <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 file
[master 06b555d] 2
 Author: 2 <author@example.com>
 1 file changed, 3 insertions(+), 2 deletions(-)
[master a1483a3] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+), 5 deletions(-)
ok 14 - Diff chunks with no suspects

expecting success of 8014.15 'position matching': 
	test_write_lines abc def >file2 &&
	git add file2 &&
	test_tick &&
	GIT_AUTHOR_NAME=1 git commit -m 1 &&

	test_write_lines abc def abc def >file2 &&
	git add file2 &&
	test_tick &&
	GIT_AUTHOR_NAME=2 git commit -m 2 &&

	test_write_lines abcx defx abcx defx >file2 &&
	git add file2 &&
	test_tick &&
	GIT_AUTHOR_NAME=3 git commit -m 3 &&
	REV_3=$(git rev-parse HEAD) &&

	test_write_lines abcy defy abcx defx >file2 &&
	git add file2 &&
	test_tick &&
	GIT_AUTHOR_NAME=4 git commit -m 4 &&
	REV_4=$(git rev-parse HEAD) &&

	test_write_lines 1 1 2 2 >expected &&

	git blame --ignore-rev $REV_3 --ignore-rev $REV_4 file2 >output &&
	sed -e "$pick_author" output >actual &&

	test_cmp expected actual
	
[master 35116cb] 1
 Author: 1 <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 file2
[master 2cf8ef0] 2
 Author: 2 <author@example.com>
 1 file changed, 2 insertions(+)
[master db13f6f] 3
 Author: 3 <author@example.com>
 1 file changed, 4 insertions(+), 4 deletions(-)
[master bf5dda1] 4
 Author: 4 <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
ok 15 - position matching

expecting success of 8014.16 'preserve order': 
	test_write_lines bcde >file3 &&
	git add file3 &&
	test_tick &&
	GIT_AUTHOR_NAME=1 git commit -m 1 &&

	test_write_lines bcde fghij >file3 &&
	git add file3 &&
	test_tick &&
	GIT_AUTHOR_NAME=2 git commit -m 2 &&

	test_write_lines bcde fghij abcd >file3 &&
	git add file3 &&
	test_tick &&
	GIT_AUTHOR_NAME=3 git commit -m 3 &&

	test_write_lines abcdx fghijx bcdex >file3 &&
	git add file3 &&
	test_tick &&
	GIT_AUTHOR_NAME=4 git commit -m 4 &&
	REV_4=$(git rev-parse HEAD) &&

	test_write_lines abcdx fghijy bcdex >file3 &&
	git add file3 &&
	test_tick &&
	GIT_AUTHOR_NAME=5 git commit -m 5 &&
	REV_5=$(git rev-parse HEAD) &&

	test_write_lines 1 2 3 >expected &&

	git blame --ignore-rev $REV_4 --ignore-rev $REV_5 file3 >output &&
	sed -e "$pick_author" output >actual &&

	test_cmp expected actual
	
[master 7405022] 1
 Author: 1 <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file3
[master 83ccc7b] 2
 Author: 2 <author@example.com>
 1 file changed, 1 insertion(+)
[master 56aa8aa] 3
 Author: 3 <author@example.com>
 1 file changed, 1 insertion(+)
[master a6b3442] 4
 Author: 4 <author@example.com>
 1 file changed, 3 insertions(+), 3 deletions(-)
[master 9acf8a7] 5
 Author: 5 <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 16 - preserve order

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9002-column.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9002-column/.git/
expecting success of 9002.1 'setup': 
	cat >lista <<\EOF
one
two
three
four
five
six
seven
eight
nine
ten
eleven
EOF

ok 1 - setup

expecting success of 9002.2 'never': 
	git column --indent=Z --mode=never <lista >actual &&
	test_cmp lista actual

ok 2 - never

expecting success of 9002.3 'always': 
	cat >expected <<\EOF &&
Zone
Ztwo
Zthree
Zfour
Zfive
Zsix
Zseven
Zeight
Znine
Zten
Zeleven
EOF
	git column --indent=Z --mode=plain <lista >actual &&
	test_cmp expected actual

ok 3 - always

expecting success of 9002.4 '--nl': 
	cat >expected <<\EOF &&
oneZ
twoZ
threeZ
fourZ
fiveZ
sixZ
sevenZ
eightZ
nineZ
tenZ
elevenZ
EOF
	git column --nl="Z$LF" --mode=plain <lista >actual &&
	test_cmp expected actual

ok 4 - --nl

expecting success of 9002.5 '80 columns': 
	cat >expected <<\EOF &&
one    two    three  four   five   six    seven  eight  nine   ten    eleven
EOF
	COLUMNS=80 git column --mode=column <lista >actual &&
	test_cmp expected actual

ok 5 - 80 columns

expecting success of 9002.6 'COLUMNS = 1': 
	COLUMNS=1 git column --mode=column <lista >actual &&
	test_cmp expected actual

ok 6 - COLUMNS = 1

expecting success of 9002.7 'width = 1': 
	git column --mode=column --width=1 <lista >actual &&
	test_cmp expected actual

ok 7 - width = 1

expecting success of 9002.8 '20 columns': 
	cat >expected <<\EOF &&
one    seven
two    eight
three  nine
four   ten
five   eleven
six
EOF
	git column --mode=column <lista >actual &&
	test_cmp expected actual

ok 8 - 20 columns

expecting success of 9002.9 '20 columns, nodense': 
	cat >expected <<\EOF &&
one    seven
two    eight
three  nine
four   ten
five   eleven
six
EOF
	git column --mode=column,nodense < lista > actual &&
	test_cmp expected actual

ok 9 - 20 columns, nodense

expecting success of 9002.10 '20 columns, dense': 
	cat >expected <<\EOF &&
one   five  nine
two   six   ten
three seven eleven
four  eight
EOF
	git column --mode=column,dense < lista > actual &&
	test_cmp expected actual

ok 10 - 20 columns, dense

expecting success of 9002.11 '20 columns, padding 2': 
	cat >expected <<\EOF &&
one     seven
two     eight
three   nine
four    ten
five    eleven
six
EOF
	git column --mode=column --padding 2 <lista >actual &&
	test_cmp expected actual

ok 11 - 20 columns, padding 2

expecting success of 9002.12 '20 columns, indented': 
	cat >expected <<\EOF &&
  one    seven
  two    eight
  three  nine
  four   ten
  five   eleven
  six
EOF
	git column --mode=column --indent="  " <lista >actual &&
	test_cmp expected actual

ok 12 - 20 columns, indented

expecting success of 9002.13 '20 columns, row first': 
	cat >expected <<\EOF &&
one    two
three  four
five   six
seven  eight
nine   ten
eleven
EOF
	git column --mode=row <lista >actual &&
	test_cmp expected actual

ok 13 - 20 columns, row first

expecting success of 9002.14 '20 columns, row first, nodense': 
	cat >expected <<\EOF &&
one    two
three  four
five   six
seven  eight
nine   ten
eleven
EOF
	git column --mode=row,nodense <lista >actual &&
	test_cmp expected actual

ok 14 - 20 columns, row first, nodense

expecting success of 9002.15 '20 columns, row first, dense': 
	cat >expected <<\EOF &&
one   two    three
four  five   six
seven eight  nine
ten   eleven
EOF
	git column --mode=row,dense <lista >actual &&
	test_cmp expected actual

ok 15 - 20 columns, row first, dense

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t8012-blame-colors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t8012-blame-colors/.git/
expecting success of 8012.1 'setup A lines': 
	echo "1A quick brown fox jumps over the" >file &&
	echo "lazy dog" >>file &&
	git add file &&
	GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \
	git commit -a -m "Initial."

[main (root-commit) 129283d] Initial.
 Author: A <A@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
ok 1 - setup A lines

expecting success of 8012.2 'blame 1 author': 
	check_count A 2

git blame -c  file 
Author A (expected 2, attributed 2) good
ok 2 - blame 1 author

expecting success of 8012.3 'blame in a bare repo without starting commit': 
	git clone --bare . bare.git &&
	(
		cd bare.git &&
		check_count A 2
	)

Cloning into bare repository 'bare.git'...
done.
git blame -c  file 
Author A (expected 2, attributed 2) good
ok 3 - blame in a bare repo without starting commit

expecting success of 8012.4 'blame by tag objects': 
	git tag -m "test tag" testTag &&
	git tag -m "test tag #2" testTag2 testTag &&
	check_count -h testTag A 2 &&
	check_count -h testTag2 A 2

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f testTag2 testTag^{}
hint: Disable this message with "git config advice.nestedTag false"
git blame -c  file testTag
Author A (expected 2, attributed 2) good
git blame -c  file testTag2
Author A (expected 2, attributed 2) good
ok 4 - blame by tag objects

expecting success of 8012.5 'setup B lines': 
	echo "2A quick brown fox jumps over the" >>file &&
	echo "lazy dog" >>file &&
	GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \
	git commit -a -m "Second."

[main 7e31098] Second.
 Author: B <B@test.git>
 1 file changed, 2 insertions(+)
ok 5 - setup B lines

expecting success of 8012.6 'blame 2 authors': 
	check_count A 2 B 2

git blame -c  file 
Author B (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
ok 6 - blame 2 authors

expecting success of 8012.7 'setup B1 lines (branch1)': 
	git checkout -b branch1 main &&
	echo "3A slow green fox jumps into the" >>file &&
	echo "well." >>file &&
	GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" \
	git commit -a -m "Branch1-1"

Switched to a new branch 'branch1'
[branch1 1b9b47a] Branch1-1
 Author: B1 <B1@test.git>
 1 file changed, 2 insertions(+)
ok 7 - setup B1 lines (branch1)

expecting success of 8012.8 'blame 2 authors + 1 branch1 author': 
	check_count A 2 B 2 B1 2

git blame -c  file 
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
Author B1 (expected 2, attributed 2) good
ok 8 - blame 2 authors + 1 branch1 author

expecting success of 8012.9 'setup B2 lines (branch2)': 
	git checkout -b branch2 main &&
	sed -e "s/2A quick brown/4A quick brown lazy dog/" <file >file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" \
	git commit -a -m "Branch2-1"

Switched to a new branch 'branch2'
[branch2 7d77deb] Branch2-1
 Author: B2 <B2@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 9 - setup B2 lines (branch2)

expecting success of 8012.10 'blame 2 authors + 1 branch2 author': 
	check_count A 2 B 1 B2 1

git blame -c  file 
Author A (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 10 - blame 2 authors + 1 branch2 author

expecting success of 8012.11 'merge branch1 & branch2': 
	git merge branch1

Auto-merging file
Merge made by the 'ort' strategy.
 file | 2 ++
 1 file changed, 2 insertions(+)
ok 11 - merge branch1 & branch2

expecting success of 8012.12 'blame 2 authors + 2 merged-in authors': 
	check_count A 2 B 1 B1 2 B2 1

git blame -c  file 
Author B (expected 1, attributed 1) good
Author B1 (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
ok 12 - blame 2 authors + 2 merged-in authors

expecting success of 8012.13 'blame --first-parent blames merge for branch1': 
	check_count --first-parent A 2 B 1 "A U Thor" 2 B2 1

git blame -c  --first-parent file 
Author A U Thor (expected 2, attributed 2) good
Author A (expected 2, attributed 2) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 13 - blame --first-parent blames merge for branch1

expecting success of 8012.14 'blame ancestor': 
	check_count -h main A 2 B 2

git blame -c  file main
Author A (expected 2, attributed 2) good
Author B (expected 2, attributed 2) good
ok 14 - blame ancestor

expecting success of 8012.15 'blame great-ancestor': 
	check_count -h main^ A 2

git blame -c  file main^
Author A (expected 2, attributed 2) good
ok 15 - blame great-ancestor

expecting success of 8012.16 'setup evil merge': 
	echo "evil merge." >>file &&
	git commit -a --amend

[branch2 c413b3e] Merge branch 'branch1' into branch2
 Author: A U Thor <author@example.com>
 Date: Fri Apr 1 13:14:15 2005 +0200
ok 16 - setup evil merge

expecting success of 8012.17 'blame evil merge': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1

git blame -c  file 
Author B (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 2, attributed 2) good
Author A U Thor (expected 1, attributed 1) good
ok 17 - blame evil merge

expecting success of 8012.18 'blame huge graft': 
	test_when_finished "git checkout branch2" &&
	test_when_finished "rm -rf .git/info" &&
	graft= &&
	for i in 0 1 2
	do
		for j in 0 1 2 3 4 5 6 7 8 9
		do
			git checkout --orphan "$i$j" &&
			printf "%s\n" "$i" "$j" >file &&
			test_tick &&
			GIT_AUTHOR_NAME=$i$j GIT_AUTHOR_EMAIL=$i$j@test.git \
			git commit -a -m "$i$j" &&
			commit=$(git rev-parse --verify HEAD) &&
			graft="$graft$commit " || return 1
		done
	done &&
	mkdir .git/info &&
	printf "%s " $graft >.git/info/grafts &&
	check_count -h 00 01 1 10 1

Switched to a new branch '00'
[00 (root-commit) e2c6177] 00
 Author: 00 <00@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '01'
[01 (root-commit) 0dbe04b] 01
 Author: 01 <01@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '02'
[02 (root-commit) 97fbca6] 02
 Author: 02 <02@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '03'
[03 (root-commit) 5cdbcd8] 03
 Author: 03 <03@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '04'
[04 (root-commit) 5a154cf] 04
 Author: 04 <04@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '05'
[05 (root-commit) a84e1de] 05
 Author: 05 <05@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '06'
[06 (root-commit) d4bea54] 06
 Author: 06 <06@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '07'
[07 (root-commit) 24ba6e8] 07
 Author: 07 <07@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '08'
[08 (root-commit) fe90088] 08
 Author: 08 <08@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '09'
[09 (root-commit) 773a2fb] 09
 Author: 09 <09@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '10'
[10 (root-commit) 80536e5] 10
 Author: 10 <10@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '11'
[11 (root-commit) 33c07c1] 11
 Author: 11 <11@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '12'
[12 (root-commit) ae7094b] 12
 Author: 12 <12@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '13'
[13 (root-commit) 19e767d] 13
 Author: 13 <13@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '14'
[14 (root-commit) f7159ac] 14
 Author: 14 <14@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '15'
[15 (root-commit) d95fecf] 15
 Author: 15 <15@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '16'
[16 (root-commit) d8bfdb9] 16
 Author: 16 <16@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '17'
[17 (root-commit) aa3f31e] 17
 Author: 17 <17@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '18'
[18 (root-commit) d76cb1d] 18
 Author: 18 <18@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '19'
[19 (root-commit) 95e03c5] 19
 Author: 19 <19@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '20'
[20 (root-commit) d40a964] 20
 Author: 20 <20@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '21'
[21 (root-commit) 6c3def2] 21
 Author: 21 <21@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '22'
[22 (root-commit) 78d2294] 22
 Author: 22 <22@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '23'
[23 (root-commit) 76a64d0] 23
 Author: 23 <23@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '24'
[24 (root-commit) 59f234a] 24
 Author: 24 <24@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '25'
[25 (root-commit) 26ac47a] 25
 Author: 25 <25@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '26'
[26 (root-commit) db7e855] 26
 Author: 26 <26@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '27'
[27 (root-commit) 279f565] 27
 Author: 27 <27@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '28'
[28 (root-commit) f691d9c] 28
 Author: 28 <28@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
Switched to a new branch '29'
[29 (root-commit) c72134e] 29
 Author: 29 <29@test.git>
 1 file changed, 2 insertions(+)
 create mode 100644 file
git blame -c  file 00
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint: 
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint: 
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Author 10 (expected 1, attributed 1) good
Author 01 (expected 1, attributed 1) good
Switched to branch 'branch2'
ok 18 - blame huge graft

expecting success of 8012.19 'setup incomplete line': 
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" \
	git commit -a -m "Incomplete"

[branch2 565fef5] Incomplete
 Author: C <C@test.git>
 1 file changed, 1 insertion(+)
ok 19 - setup incomplete line

expecting success of 8012.20 'blame incomplete line': 
	check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1

git blame -c  file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 2, attributed 2) good
Author B1 (expected 2, attributed 2) good
Author C (expected 1, attributed 1) good
ok 20 - blame incomplete line

expecting success of 8012.21 'setup edits': 
	mv file file.orig &&
	{
		cat file.orig &&
		echo
	} | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" >file &&
	echo "incomplete" | tr -d "\\012" >>file &&
	GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" \
	git commit -a -m "edit"

[branch2 96588b8] edit
 Author: D <D@test.git>
 1 file changed, 1 insertion(+), 2 deletions(-)
ok 21 - setup edits

expecting success of 8012.22 'blame edits': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1

git blame -c  file 
Author A U Thor (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 22 - blame edits

expecting success of 8012.23 'setup obfuscated email': 
	echo "No robots allowed" >file.new &&
	cat file >>file.new &&
	mv file.new file &&
	GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" \
	git commit -a -m "norobots"

[branch2 04f7693] norobots
 Author: E <E at test dot git>
 1 file changed, 1 insertion(+)
ok 23 - setup obfuscated email

expecting success of 8012.24 'blame obfuscated email': 
	check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  file 
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 24 - blame obfuscated email

expecting success of 8012.25 'blame -L 1 (all)': 
	check_count -L1 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L1 file 
Author E (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 25 - blame -L 1 (all)

expecting success of 8012.26 'blame -L , (all)': 
	check_count -L, A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L, file 
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 26 - blame -L , (all)

expecting success of 8012.27 'blame -L X (X to end)': 
	check_count -L5 B1 1 C 1 D 1 "A U Thor" 1

git blame -c  -L5 file 
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 27 - blame -L X (X to end)

expecting success of 8012.28 'blame -L X, (X to end)': 
	check_count -L5, B1 1 C 1 D 1 "A U Thor" 1

git blame -c  -L5, file 
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 28 - blame -L X, (X to end)

expecting success of 8012.29 'blame -L ,Y (up to Y)': 
	check_count -L,3 A 1 B2 1 E 1

git blame -c  -L,3 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
ok 29 - blame -L ,Y (up to Y)

expecting success of 8012.30 'blame -L X,X': 
	check_count -L3,3 B2 1

git blame -c  -L3,3 file 
Author B2 (expected 1, attributed 1) good
ok 30 - blame -L X,X

expecting success of 8012.31 'blame -L X,Y': 
	check_count -L3,6 B 1 B1 1 B2 1 D 1

git blame -c  -L3,6 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 31 - blame -L X,Y

expecting success of 8012.32 'blame -L Y,X (undocumented)': 
	check_count -L6,3 B 1 B1 1 B2 1 D 1

git blame -c  -L6,3 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 32 - blame -L Y,X (undocumented)

expecting success of 8012.33 'blame -L -X': 
	test_must_fail $PROG -L-1 file

fatal: -L invalid line number: -1
ok 33 - blame -L -X

expecting success of 8012.34 'blame -L 0': 
	test_must_fail $PROG -L0 file

fatal: -L invalid line number: 0
ok 34 - blame -L 0

expecting success of 8012.35 'blame -L ,0': 
	test_must_fail $PROG -L,0 file

fatal: -L invalid line number: 0
ok 35 - blame -L ,0

expecting success of 8012.36 'blame -L ,+0': 
	test_must_fail $PROG -L,+0 file

fatal: -L invalid empty range
ok 36 - blame -L ,+0

expecting success of 8012.37 'blame -L X,+0': 
	test_must_fail $PROG -L1,+0 file

fatal: -L invalid empty range
ok 37 - blame -L X,+0

expecting success of 8012.38 'blame -L X,+1': 
	check_count -L3,+1 B2 1

git blame -c  -L3,+1 file 
Author B2 (expected 1, attributed 1) good
ok 38 - blame -L X,+1

expecting success of 8012.39 'blame -L X,+N': 
	check_count -L3,+4 B 1 B1 1 B2 1 D 1

git blame -c  -L3,+4 file 
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 39 - blame -L X,+N

expecting success of 8012.40 'blame -L ,-0': 
	test_must_fail $PROG -L,-0 file

fatal: -L invalid empty range
ok 40 - blame -L ,-0

expecting success of 8012.41 'blame -L X,-0': 
	test_must_fail $PROG -L1,-0 file

fatal: -L invalid empty range
ok 41 - blame -L X,-0

expecting success of 8012.42 'blame -L X,-1': 
	check_count -L3,-1 B2 1

git blame -c  -L3,-1 file 
Author B2 (expected 1, attributed 1) good
ok 42 - blame -L X,-1

expecting success of 8012.43 'blame -L X,-N': 
	check_count -L6,-4 B 1 B1 1 B2 1 D 1

git blame -c  -L6,-4 file 
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 43 - blame -L X,-N

expecting success of 8012.44 'blame -L /RE/ (RE to end)': 
	check_count -L/evil/ C 1 "A U Thor" 1

git blame -c  -L/evil/ file 
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 44 - blame -L /RE/ (RE to end)

expecting success of 8012.45 'blame -L /RE/,/RE2/': 
	check_count -L/robot/,/green/ A 1 B 1 B2 1 D 1 E 1

git blame -c  -L/robot/,/green/ file 
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 45 - blame -L /RE/,/RE2/

expecting success of 8012.46 'blame -L X,/RE/': 
	check_count -L5,/evil/ B1 1 D 1 "A U Thor" 1

git blame -c  -L5,/evil/ file 
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 46 - blame -L X,/RE/

expecting success of 8012.47 'blame -L /RE/,Y': 
	check_count -L/99/,7 B1 1 D 1 "A U Thor" 1

git blame -c  -L/99/,7 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 47 - blame -L /RE/,Y

expecting success of 8012.48 'blame -L /RE/,+N': 
	check_count -L/99/,+3 B1 1 D 1 "A U Thor" 1

git blame -c  -L/99/,+3 file 
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 48 - blame -L /RE/,+N

expecting success of 8012.49 'blame -L /RE/,-N': 
	check_count -L/99/,-3 B 1 B2 1 D 1

git blame -c  -L/99/,-3 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 49 - blame -L /RE/,-N

expecting success of 8012.50 'blame -L X (X == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n C 1

git blame -c  -L8 file 
Author C (expected 1, attributed 1) good
ok 50 - blame -L X (X == nlines)

expecting success of 8012.51 'blame -L X (X == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	test_must_fail $PROG -L$n file

fatal: file file has only 8 lines
ok 51 - blame -L X (X == nlines + 1)

expecting success of 8012.52 'blame -L X (X > nlines)': 
	test_must_fail $PROG -L12345 file

fatal: file file has only 8 lines
ok 52 - blame -L X (X > nlines)

expecting success of 8012.53 'blame -L ,Y (Y == nlines)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,8 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 53 - blame -L ,Y (Y == nlines)

expecting success of 8012.54 'blame -L ,Y (Y == nlines + 1)': 
	n=$(expr $(wc -l <file) + 2) &&
	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,9 file 
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
ok 54 - blame -L ,Y (Y == nlines + 1)

expecting success of 8012.55 'blame -L ,Y (Y > nlines)': 
	check_count -L,12345 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1

git blame -c  -L,12345 file 
Author D (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 55 - blame -L ,Y (Y > nlines)

expecting success of 8012.56 'blame -L multiple (disjoint)': 
	check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1

git blame -c  -L2,3 -L6,7 file 
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 56 - blame -L multiple (disjoint)

expecting success of 8012.57 'blame -L multiple (disjoint: unordered)': 
	check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1

git blame -c  -L6,7 -L2,3 file 
Author A U Thor (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 57 - blame -L multiple (disjoint: unordered)

expecting success of 8012.58 'blame -L multiple (adjacent)': 
	check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1

git blame -c  -L2,3 -L4,5 file 
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 58 - blame -L multiple (adjacent)

expecting success of 8012.59 'blame -L multiple (adjacent: unordered)': 
	check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1

git blame -c  -L4,5 -L2,3 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 59 - blame -L multiple (adjacent: unordered)

expecting success of 8012.60 'blame -L multiple (overlapping)': 
	check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1

git blame -c  -L2,4 -L3,5 file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
ok 60 - blame -L multiple (overlapping)

expecting success of 8012.61 'blame -L multiple (overlapping: unordered)': 
	check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1

git blame -c  -L3,5 -L2,4 file 
Author B2 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
ok 61 - blame -L multiple (overlapping: unordered)

expecting success of 8012.62 'blame -L multiple (superset/subset)': 
	check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L2,8 -L3,5 file 
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 62 - blame -L multiple (superset/subset)

expecting success of 8012.63 'blame -L multiple (superset/subset: unordered)': 
	check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L3,5 -L2,8 file 
Author B1 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
ok 63 - blame -L multiple (superset/subset: unordered)

expecting success of 8012.64 'blame -L /RE/ (relative)': 
	check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L3,3 -L/fox/ file 
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
ok 64 - blame -L /RE/ (relative)

expecting success of 8012.65 'blame -L /RE/ (relative: no preceding range)': 
	check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1

git blame -c  -L/dog/ file 
Author A (expected 1, attributed 1) good
Author B1 (expected 1, attributed 1) good
Author B (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
Author D (expected 1, attributed 1) good
Author A U Thor (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
ok 65 - blame -L /RE/ (relative: no preceding range)

expecting success of 8012.66 'blame -L /RE/ (relative: adjacent)': 
	check_count -L1,1 -L/dog/,+1 A 1 E 1

git blame -c  -L1,1 -L/dog/,+1 file 
Author E (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 66 - blame -L /RE/ (relative: adjacent)

expecting success of 8012.67 'blame -L /RE/ (relative: not found)': 
	test_must_fail $PROG -L4,4 -L/dog/ file

fatal: -L parameter 'dog' starting at line 5: No match
ok 67 - blame -L /RE/ (relative: not found)

expecting success of 8012.68 'blame -L /RE/ (relative: end-of-file)': 
	test_must_fail $PROG -L, -L/$/ file

fatal: file file has only 8 lines
ok 68 - blame -L /RE/ (relative: end-of-file)

expecting success of 8012.69 'blame -L ^/RE/ (absolute)': 
	check_count -L3,3 -L^/dog/,+2 A 1 B2 1

git blame -c  -L3,3 -L^/dog/,+2 file 
Author B2 (expected 1, attributed 1) good
Author A (expected 1, attributed 1) good
ok 69 - blame -L ^/RE/ (absolute)

expecting success of 8012.70 'blame -L ^/RE/ (absolute: no preceding range)': 
	check_count -L^/dog/,+2 A 1 B2 1

git blame -c  -L^/dog/,+2 file 
Author A (expected 1, attributed 1) good
Author B2 (expected 1, attributed 1) good
ok 70 - blame -L ^/RE/ (absolute: no preceding range)

expecting success of 8012.71 'blame -L ^/RE/ (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^/tambourine/ file

fatal: -L parameter 'tambourine' starting at line 1: No match
ok 71 - blame -L ^/RE/ (absolute: not found)

expecting success of 8012.72 'blame -L ^/RE/ (absolute: end-of-file)': 
	n=$(expr $(wc -l <file) + 1) &&
	check_count -L$n -L^/$/,+2 A 1 C 1 E 1

git blame -c  -L8 -L^/$/,+2 file 
Author A (expected 1, attributed 1) good
Author C (expected 1, attributed 1) good
Author E (expected 1, attributed 1) good
ok 72 - blame -L ^/RE/ (absolute: end-of-file)

expecting success of 8012.73 'setup -L :regex': 
	tr Q "\\t" >hello.c <<-\EOF &&
	int main(int argc, const char *argv[])
	{
	Qputs("hello");
	}
	EOF
	git add hello.c &&
	GIT_AUTHOR_NAME="F" GIT_AUTHOR_EMAIL="F@test.git" \
	git commit -m "hello" &&

	mv hello.c hello.orig &&
	sed -e "/}/ {x; s/$/Qputs(\"goodbye\");/; G;}" <hello.orig |
	tr Q "\\t" >hello.c &&
	GIT_AUTHOR_NAME="G" GIT_AUTHOR_EMAIL="G@test.git" \
	git commit -a -m "goodbye" &&

	mv hello.c hello.orig &&
	echo "#include <stdio.h>" >hello.c &&
	cat hello.orig >>hello.c &&
	tr Q "\\t" >>hello.c <<-\EOF &&
	void mail()
	{
	Qputs("mail");
	}
	EOF
	GIT_AUTHOR_NAME="H" GIT_AUTHOR_EMAIL="H@test.git" \
	git commit -a -m "mail"

[branch2 f82005e] hello
 Author: F <F@test.git>
 1 file changed, 4 insertions(+)
 create mode 100644 hello.c
[branch2 edbab84] goodbye
 Author: G <G@test.git>
 1 file changed, 1 insertion(+)
[branch2 846166b] mail
 Author: H <H@test.git>
 1 file changed, 5 insertions(+)
ok 73 - setup -L :regex

expecting success of 8012.74 'blame -L :literal': 
	check_count -f hello.c -L:main F 4 G 1

git blame -c  -L:main hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 74 - blame -L :literal

expecting success of 8012.75 'blame -L :regex': 
	check_count -f hello.c "-L:m[a-z][a-z]l" H 4

git blame -c  -L:m[a-z][a-z]l hello.c 
Author H (expected 4, attributed 4) good
ok 75 - blame -L :regex

expecting success of 8012.76 'blame -L :nomatch': 
	test_must_fail $PROG -L:nomatch hello.c

fatal: -L parameter 'nomatch' starting at line 1: no match
ok 76 - blame -L :nomatch

expecting success of 8012.77 'blame -L :RE (relative)': 
	check_count -f hello.c -L3,3 -L:ma.. F 1 H 4

git blame -c  -L3,3 -L:ma.. hello.c 
Author H (expected 4, attributed 4) good
Author F (expected 1, attributed 1) good
ok 77 - blame -L :RE (relative)

expecting success of 8012.78 'blame -L :RE (relative: no preceding range)': 
	check_count -f hello.c -L:ma.. F 4 G 1

git blame -c  -L:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 78 - blame -L :RE (relative: no preceding range)

expecting success of 8012.79 'blame -L :RE (relative: not found)': 
	test_must_fail $PROG -L3,3 -L:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 4: no match
ok 79 - blame -L :RE (relative: not found)

expecting success of 8012.80 'blame -L :RE (relative: end-of-file)': 
	test_must_fail $PROG -L, -L:main hello.c

fatal: -L parameter 'main' starting at line 11: no match
ok 80 - blame -L :RE (relative: end-of-file)

expecting success of 8012.81 'blame -L ^:RE (absolute)': 
	check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1

git blame -c  -L3,3 -L^:ma.. hello.c 
Author G (expected 1, attributed 1) good
Author F (expected 4, attributed 4) good
ok 81 - blame -L ^:RE (absolute)

expecting success of 8012.82 'blame -L ^:RE (absolute: no preceding range)': 
	check_count -f hello.c -L^:ma.. F 4 G 1

git blame -c  -L^:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
ok 82 - blame -L ^:RE (absolute: no preceding range)

expecting success of 8012.83 'blame -L ^:RE (absolute: not found)': 
	test_must_fail $PROG -L4,4 -L^:tambourine hello.c

fatal: -L parameter 'tambourine' starting at line 1: no match
ok 83 - blame -L ^:RE (absolute: not found)

expecting success of 8012.84 'blame -L ^:RE (absolute: end-of-file)': 
	n=$(printf "%d" $(wc -l <hello.c)) &&
	check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1

git blame -c  -L10 -L^:ma.. hello.c 
Author F (expected 4, attributed 4) good
Author G (expected 1, attributed 1) good
Author H (expected 1, attributed 1) good
ok 84 - blame -L ^:RE (absolute: end-of-file)

expecting success of 8012.85 'blame -L :funcname with userdiff driver': 
	cat >file.template <<-\EOF &&
	DO NOT MATCH THIS LINE
	function RIGHT(a, b) result(c)
	AS THE DEFAULT DRIVER WOULD

	integer, intent(in) :: ChangeMe
	EOF

	fortran_file=file.f03 &&
	test_when_finished "rm .gitattributes" &&
	echo "$fortran_file diff=fortran" >.gitattributes &&

	test_commit --author "A <A@test.git>" \
		"add" "$fortran_file" \
		"$(cat file.template)" &&
	test_commit --author "B <B@test.git>" \
		"change" "$fortran_file" \
		"$(cat file.template | sed -e s/ChangeMe/IWasChanged/)" &&
	check_count -f "$fortran_file" -L:RIGHT A 3 B 1

[branch2 6b1b7a1] add
 Author: A <A@test.git>
 1 file changed, 5 insertions(+)
 create mode 100644 file.f03
[branch2 7caa17d] change
 Author: B <B@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
git blame -c  -L:RIGHT file.f03 
Author B (expected 1, attributed 1) good
Author A (expected 3, attributed 3) good
ok 85 - blame -L :funcname with userdiff driver

expecting success of 8012.86 'setup incremental': 
	(
	GIT_AUTHOR_NAME=I &&
	export GIT_AUTHOR_NAME &&
	GIT_AUTHOR_EMAIL=I@test.git &&
	export GIT_AUTHOR_EMAIL &&
	>incremental &&
	git add incremental &&
	git commit -m "step 0" &&
	printf "partial" >>incremental &&
	git commit -a -m "step 0.5" &&
	echo >>incremental &&
	git commit -a -m "step 1"
	)

[branch2 6c56eef] step 0
 Author: I <I@test.git>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 incremental
[branch2 c79b19e] step 0.5
 Author: I <I@test.git>
 1 file changed, 1 insertion(+)
[branch2 f65a7a7] step 1
 Author: I <I@test.git>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 86 - setup incremental

expecting success of 8012.87 'blame empty': 
	check_count -h HEAD^^ -f incremental

git blame -c  incremental HEAD^^
ok 87 - blame empty

expecting success of 8012.88 'blame -L 0 empty': 
	test_must_fail $PROG -L0 incremental HEAD^^

fatal: -L invalid line number: 0
ok 88 - blame -L 0 empty

expecting success of 8012.89 'blame -L 1 empty': 
	test_must_fail $PROG -L1 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 89 - blame -L 1 empty

expecting success of 8012.90 'blame -L 2 empty': 
	test_must_fail $PROG -L2 incremental HEAD^^

fatal: file incremental has only 0 lines
ok 90 - blame -L 2 empty

expecting success of 8012.91 'blame half': 
	check_count -h HEAD^ -f incremental I 1

git blame -c  incremental HEAD^
Author I (expected 1, attributed 1) good
ok 91 - blame half

expecting success of 8012.92 'blame -L 0 half': 
	test_must_fail $PROG -L0 incremental HEAD^

fatal: -L invalid line number: 0
ok 92 - blame -L 0 half

expecting success of 8012.93 'blame -L 1 half': 
	check_count -h HEAD^ -f incremental -L1 I 1

git blame -c  -L1 incremental HEAD^
Author I (expected 1, attributed 1) good
ok 93 - blame -L 1 half

expecting success of 8012.94 'blame -L 2 half': 
	test_must_fail $PROG -L2 incremental HEAD^

fatal: file incremental has only 1 line
ok 94 - blame -L 2 half

expecting success of 8012.95 'blame -L 3 half': 
	test_must_fail $PROG -L3 incremental HEAD^

fatal: file incremental has only 1 line
ok 95 - blame -L 3 half

expecting success of 8012.96 'blame full': 
	check_count -f incremental I 1

git blame -c  incremental 
Author I (expected 1, attributed 1) good
ok 96 - blame full

expecting success of 8012.97 'blame -L 0 full': 
	test_must_fail $PROG -L0 incremental

fatal: -L invalid line number: 0
ok 97 - blame -L 0 full

expecting success of 8012.98 'blame -L 1 full': 
	check_count -f incremental -L1 I 1

git blame -c  -L1 incremental 
Author I (expected 1, attributed 1) good
ok 98 - blame -L 1 full

expecting success of 8012.99 'blame -L 2 full': 
	test_must_fail $PROG -L2 incremental

fatal: file incremental has only 1 line
ok 99 - blame -L 2 full

expecting success of 8012.100 'blame -L 3 full': 
	test_must_fail $PROG -L3 incremental

fatal: file incremental has only 1 line
ok 100 - blame -L 3 full

expecting success of 8012.101 'blame -L': 
	test_must_fail $PROG -L file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>

    <rev-opts> are documented in git-rev-list(1)

    --incremental         show blame entries as we find them, incrementally
    -b                    do not show object names of boundary commits (Default: off)
    --root                do not treat root commits as boundaries (Default: off)
    --show-stats          show work cost statistics
    --progress            force progress reporting
    --score-debug         show output score for blame entries
    -f, --show-name       show original filename (Default: auto)
    -n, --show-number     show original linenumber (Default: off)
    -p, --porcelain       show in a format designed for machine consumption
    --line-porcelain      show porcelain format with per-line commit information
    -c                    use the same output mode as git-annotate (Default: off)
    -t                    show raw timestamp (Default: off)
    -l                    show long commit SHA1 (Default: off)
    -s                    suppress author name and timestamp (Default: off)
    -e, --show-email      show author email instead of name (Default: off)
    -w                    ignore whitespace differences
    --ignore-rev <rev>    ignore <rev> when blaming
    --ignore-revs-file <file>
                          ignore revisions from <file>
    --color-lines         color redundant metadata from previous line differently
    --color-by-age        color lines by age
    --minimal             spend extra cycles to find better match
    -S <file>             use revisions from <file> instead of calling git-rev-list
    --contents <file>     use <file>'s contents as the final image
    -C[<score>]           find line copies within and across files
    -M[<score>]           find line movements within and across files
    -L <range>            process only line range <start>,<end> or function :<funcname>
    --abbrev[=<n>]        use <n> digits to display object names

ok 101 - blame -L

expecting success of 8012.102 'blame -L X,+': 
	test_must_fail $PROG -L1,+ file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 102 - blame -L X,+

expecting success of 8012.103 'blame -L X,-': 
	test_must_fail $PROG -L1,- file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 103 - blame -L X,-

expecting success of 8012.104 'blame -L X (non-numeric X)': 
	test_must_fail $PROG -LX file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 104 - blame -L X (non-numeric X)

expecting success of 8012.105 'blame -L X,Y (non-numeric Y)': 
	test_must_fail $PROG -L1,Y file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 105 - blame -L X,Y (non-numeric Y)

expecting success of 8012.106 'blame -L X,+N (non-numeric N)': 
	test_must_fail $PROG -L1,+N file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 106 - blame -L X,+N (non-numeric N)

expecting success of 8012.107 'blame -L X,-N (non-numeric N)': 
	test_must_fail $PROG -L1,-N file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 107 - blame -L X,-N (non-numeric N)

expecting success of 8012.108 'blame -L ,^/RE/': 
	test_must_fail $PROG -L1,^/99/ file

usage: git blame [<options>] [<rev-opts>] [<rev>] [--] <file>
ok 108 - blame -L ,^/RE/

expecting success of 8012.109 'blame progress on a full file': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (10/10), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

846166ba (H 2005-04-07 15:42:13 -0700  1) #include <stdio.h>
f82005e9 (F 2005-04-07 15:42:13 -0700  2) int main(int argc, const char *argv[])
f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  7) void mail()
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 109 - blame progress on a full file

expecting success of 8012.110 'blame progress on a single range': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (4/4), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700 3) {
f82005e9 (F 2005-04-07 15:42:13 -0700 4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700 5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700 6) }
ok 110 - blame progress on a single range

expecting success of 8012.111 'blame progress on multiple ranges': 
	cat >expect <<-\EOF &&
	Blaming lines: 100% (7/7), done.
	EOF

	GIT_PROGRESS_DELAY=0 \
	git blame --progress -L 3,6 -L 8,10 hello.c 2>stderr &&

	get_progress_result <stderr >actual &&
	test_cmp expect actual

f82005e9 (F 2005-04-07 15:42:13 -0700  3) {
f82005e9 (F 2005-04-07 15:42:13 -0700  4) 	puts("hello");
edbab84e (G 2005-04-07 15:42:13 -0700  5) 	puts("goodbye");
f82005e9 (F 2005-04-07 15:42:13 -0700  6) }
846166ba (H 2005-04-07 15:42:13 -0700  8) {
846166ba (H 2005-04-07 15:42:13 -0700  9) 	puts("mail");
846166ba (H 2005-04-07 15:42:13 -0700 10) }
ok 111 - blame progress on multiple ranges

expecting success of 8012.112 'colored blame colors contiguous lines': 
	git -c color.blame.repeatedLines=yellow blame --color-lines --abbrev=12 hello.c >actual.raw &&
	git -c color.blame.repeatedLines=yellow -c blame.coloring=repeatedLines blame --abbrev=12 hello.c >actual.raw.2 &&
	test_cmp actual.raw actual.raw.2 &&
	test_decode_color <actual.raw >actual &&
	grep "<YELLOW>" <actual >darkened &&
	grep "(F" darkened > F.expect &&
	grep "(H" darkened > H.expect &&
	test_line_count = 2 F.expect &&
	test_line_count = 3 H.expect

ok 112 - colored blame colors contiguous lines

expecting success of 8012.113 'color by age consistently colors old code': 
	git blame --color-by-age hello.c >actual.raw &&
	git -c blame.coloring=highlightRecent blame hello.c >actual.raw.2 &&
	test_cmp actual.raw actual.raw.2 &&
	test_decode_color <actual.raw >actual &&
	grep "<BLUE>" <actual >colored &&
	test_line_count = 10 colored

ok 113 - color by age consistently colors old code

expecting success of 8012.114 'blame color by age: new code is different': 
	cat >>hello.c <<-EOF &&
		void qfunc();
	EOF
	git add hello.c &&
	GIT_AUTHOR_DATE="" git commit -m "new commit" &&

	git -c color.blame.highlightRecent="yellow,1 month ago, cyan" blame --color-by-age hello.c >actual.raw &&
	test_decode_color <actual.raw >actual &&

	grep "<YELLOW>" <actual >colored &&
	test_line_count = 10 colored &&

	grep "<CYAN>" <actual >colored &&
	test_line_count = 1 colored &&
	grep qfunc colored

[branch2 7df7488] new commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
<CYAN>7df74889 (A U Thor 2022-12-28 08:06:42 +0000 11) <RESET>void qfunc();
ok 114 - blame color by age: new code is different

# passed all 114 test(s)
1..114
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9004-example.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9004-example/.git/
expecting success of 9004.1 'decorate': 
	test-tool example-decorate

ok 1 - decorate

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9003-help-autocorrect.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9003-help-autocorrect/.git/
expecting success of 9003.1 'setup': 
	# An alias
	git config alias.lgf "log --format=%s --first-parent" &&

	# A random user-defined command
	write_script git-distimdistim <<-EOF &&
		echo distimdistim was called
	EOF

	PATH="$PATH:." &&
	export PATH &&

	git commit --allow-empty -m "a single log entry" &&

	# Sanity check
	git lgf >actual &&
	echo "a single log entry" >expect &&
	test_cmp expect actual &&

	git distimdistim >actual &&
	echo "distimdistim was called" >expect &&
	test_cmp expect actual

[master (root-commit) b57823c] a single log entry
 Author: A U Thor <author@example.com>
ok 1 - setup

expecting success of 9003.2 'autocorrect showing candidates': 
	git config help.autocorrect 0 &&

	test_must_fail git lfg 2>actual &&
	grep "^	lgf" actual &&

	test_must_fail git distimdist 2>actual &&
	grep "^	distimdistim" actual

	lgf
	distimdistim
ok 2 - autocorrect showing candidates

expecting success of 9003.3 'autocorrect running commands': 
		git config help.autocorrect $immediate &&

		git lfg >actual &&
		echo "a single log entry" >expect &&
		test_cmp expect actual &&

		git distimdist >actual &&
		echo "distimdistim was called" >expect &&
		test_cmp expect actual
	
WARNING: You called a Git command named 'lfg', which does not exist.
Continuing under the assumption that you meant 'lgf'.
WARNING: You called a Git command named 'distimdist', which does not exist.
Continuing under the assumption that you meant 'distimdistim'.
ok 3 - autocorrect running commands

expecting success of 9003.4 'autocorrect running commands': 
		git config help.autocorrect $immediate &&

		git lfg >actual &&
		echo "a single log entry" >expect &&
		test_cmp expect actual &&

		git distimdist >actual &&
		echo "distimdistim was called" >expect &&
		test_cmp expect actual
	
WARNING: You called a Git command named 'lfg', which does not exist.
Continuing under the assumption that you meant 'lgf'.
WARNING: You called a Git command named 'distimdist', which does not exist.
Continuing under the assumption that you meant 'distimdistim'.
ok 4 - autocorrect running commands

expecting success of 9003.5 'autocorrect can be declined altogether': 
	git config help.autocorrect never &&

	test_must_fail git lfg 2>actual &&
	grep "is not a git command" actual &&
	test_line_count = 1 actual

git: 'lfg' is not a git command. See 'git --help'.
ok 5 - autocorrect can be declined altogether

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t7610-mergetool.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7610-mergetool/.git/
expecting success of 7610.1 'setup': 
	test_config rerere.enabled true &&
	echo main >file1 &&
	echo main spaced >"spaced name" &&
	echo main file11 >file11 &&
	echo main file12 >file12 &&
	echo main file13 >file13 &&
	echo main file14 >file14 &&
	mkdir subdir &&
	echo main sub >subdir/file3 &&
	test_create_repo submod &&
	(
		cd submod &&
		: >foo &&
		git add foo &&
		git commit -m "Add foo"
	) &&
	git submodule add file:///dev/null submod &&
	git add file1 "spaced name" file1[1-4] subdir/file3 .gitmodules submod &&
	git commit -m "add initial versions" &&

	git checkout -b branch1 main &&
	git submodule update -N &&
	echo branch1 change >file1 &&
	echo branch1 newfile >file2 &&
	echo branch1 spaced >"spaced name" &&
	echo branch1 both added >both &&
	echo branch1 change file11 >file11 &&
	echo branch1 change file13 >file13 &&
	echo branch1 sub >subdir/file3 &&
	(
		cd submod &&
		echo branch1 submodule >bar &&
		git add bar &&
		git commit -m "Add bar on branch1" &&
		git checkout -b submod-branch1
	) &&
	git add file1 "spaced name" file11 file13 file2 subdir/file3 submod &&
	git add both &&
	git rm file12 &&
	git commit -m "branch1 changes" &&

	git checkout -b delete-base branch1 &&
	mkdir -p a/a &&
	test_write_lines one two 3 4 >a/a/file.txt &&
	git add a/a/file.txt &&
	git commit -m"base file" &&
	git checkout -b move-to-b delete-base &&
	mkdir -p b/b &&
	git mv a/a/file.txt b/b/file.txt &&
	test_write_lines one two 4 >b/b/file.txt &&
	git commit -a -m"move to b" &&
	git checkout -b move-to-c delete-base &&
	mkdir -p c/c &&
	git mv a/a/file.txt c/c/file.txt &&
	test_write_lines one two 3 >c/c/file.txt &&
	git commit -a -m"move to c" &&

	git checkout -b stash1 main &&
	echo stash1 change file11 >file11 &&
	git add file11 &&
	git commit -m "stash1 changes" &&

	git checkout -b stash2 main &&
	echo stash2 change file11 >file11 &&
	git add file11 &&
	git commit -m "stash2 changes" &&

	git checkout main &&
	git submodule update -N &&
	echo main updated >file1 &&
	echo main new >file2 &&
	echo main updated spaced >"spaced name" &&
	echo main both added >both &&
	echo main updated file12 >file12 &&
	echo main updated file14 >file14 &&
	echo main new sub >subdir/file3 &&
	(
		cd submod &&
		echo main submodule >bar &&
		git add bar &&
		git commit -m "Add bar on main" &&
		git checkout -b submod-main
	) &&
	git add file1 "spaced name" file12 file14 file2 subdir/file3 submod &&
	git add both &&
	git rm file11 &&
	git commit -m "main updates" &&

	git clean -fdx &&
	git checkout -b order-file-start main &&
	echo start >a &&
	echo start >b &&
	git add a b &&
	git commit -m start &&
	git checkout -b order-file-side1 order-file-start &&
	echo side1 >a &&
	echo side1 >b &&
	git add a b &&
	git commit -m side1 &&
	git checkout -b order-file-side2 order-file-start &&
	echo side2 >a &&
	echo side2 >b &&
	git add a b &&
	git commit -m side2 &&

	git config merge.tool mytool &&
	git config mergetool.mytool.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" &&
	git config mergetool.mytool.trustExitCode true &&
	git config mergetool.mybase.cmd "cat \"\$BASE\" >\"\$MERGED\"" &&
	git config mergetool.mybase.trustExitCode true

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7610-mergetool/submod/.git/
[main (root-commit) d8b1d8e] Add foo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
Adding existing repo at 'submod' to the index
[main (root-commit) 8119935] add initial versions
 Author: A U Thor <author@example.com>
 9 files changed, 11 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 file1
 create mode 100644 file11
 create mode 100644 file12
 create mode 100644 file13
 create mode 100644 file14
 create mode 100644 spaced name
 create mode 100644 subdir/file3
 create mode 160000 submod
Switched to a new branch 'branch1'
[main b5507ac] Add bar on branch1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'submod-branch1'
rm 'file12'
[branch1 b56897f] branch1 changes
 Author: A U Thor <author@example.com>
 9 files changed, 8 insertions(+), 7 deletions(-)
 create mode 100644 both
 delete mode 100644 file12
 create mode 100644 file2
Switched to a new branch 'delete-base'
[delete-base a20b9ac] base file
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 a/a/file.txt
Switched to a new branch 'move-to-b'
[move-to-b d173899] move to b
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 rename {a/a => b/b}/file.txt (83%)
Switched to a new branch 'move-to-c'
[move-to-c 7baa014] move to c
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 rename {a/a => c/c}/file.txt (83%)
Switched to a new branch 'stash1'
M	submod
[stash1 7727624] stash1 changes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'stash2'
M	submod
[stash2 3eeb9f3] stash2 changes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
M	submod
Submodule path 'submod': checked out 'd8b1d8e6424e753a8741ec5acadf448ece02afdc'
[detached HEAD d1fea44] Add bar on main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
Switched to a new branch 'submod-main'
rm 'file11'
[main 42ed12d] main updates
 Author: A U Thor <author@example.com>
 9 files changed, 8 insertions(+), 7 deletions(-)
 create mode 100644 both
 delete mode 100644 file11
 create mode 100644 file2
Removing a/
Switched to a new branch 'order-file-start'
[order-file-start 8e07b42] start
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 a
 create mode 100644 b
Switched to a new branch 'order-file-side1'
[order-file-side1 072d66b] side1
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
Switched to a new branch 'order-file-side2'
[order-file-side2 50ba26c] side2
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
ok 1 - setup

expecting success of 7610.2 'custom mergetool': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&
	yes "" | git mergetool both &&
	yes "" | git mergetool file1 file1 &&
	yes "" | git mergetool file2 "spaced name" &&
	yes "" | git mergetool subdir/file3 &&
	yes "d" | git mergetool file11 &&
	yes "d" | git mergetool file12 &&
	yes "l" | git mergetool submod &&
	echo "main updated" >expect &&
	test_cmp expect file1 &&
	echo "main new" >expect &&
	test_cmp expect file2 &&
	echo "main new sub" >expect &&
	test_cmp expect subdir/file3 &&
	echo "branch1 submodule" >expect &&
	test_cmp expect submod/bar &&
	git commit -m "branch1 resolved with mergetool"

Switched to a new branch 'test2'
M	submod
Submodule path 'submod': checked out 'b5507ac155b8908404766fca6098138868c8e266'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Recorded preimage for 'both'
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Recorded preimage for 'spaced name'
Recorded preimage for 'subdir/file3'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Merging:
file2
spaced name

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Recorded resolution for 'both'.
Recorded resolution for 'file1'.
Recorded resolution for 'file2'.
Recorded resolution for 'spaced name'.
Recorded resolution for 'subdir/file3'.
[test2 2c3a7d1] branch1 resolved with mergetool
 Author: A U Thor <author@example.com>
HEAD is now at 2c3a7d1 branch1 resolved with mergetool
ok 2 - custom mergetool

expecting success of 7610.3 'gui mergetool': 
	test_config merge.guitool myguitool &&
	test_config mergetool.myguitool.cmd "(printf \"gui \" && cat \"\$REMOTE\") >\"\$MERGED\"" &&
	test_config mergetool.myguitool.trustExitCode true &&
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&
	yes "" | git mergetool --gui both &&
	yes "" | git mergetool -g file1 file1 &&
	yes "" | git mergetool --gui file2 "spaced name" &&
	yes "" | git mergetool --gui subdir/file3 &&
	yes "d" | git mergetool --gui file11 &&
	yes "d" | git mergetool --gui file12 &&
	yes "l" | git mergetool --gui submod &&
	echo "gui main updated" >expect &&
	test_cmp expect file1 &&
	echo "gui main new" >expect &&
	test_cmp expect file2 &&
	echo "gui main new sub" >expect &&
	test_cmp expect subdir/file3 &&
	echo "branch1 submodule" >expect &&
	test_cmp expect submod/bar &&
	git commit -m "branch1 resolved with mergetool"

Switched to a new branch 'test3'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Merging:
file2
spaced name

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? [test3 531fc95] branch1 resolved with mergetool
 Author: A U Thor <author@example.com>
HEAD is now at 531fc95 branch1 resolved with mergetool
ok 3 - gui mergetool

expecting success of 7610.4 'gui mergetool without merge.guitool set falls back to merge.tool': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&
	yes "" | git mergetool --gui both &&
	yes "" | git mergetool -g file1 file1 &&
	yes "" | git mergetool --gui file2 "spaced name" &&
	yes "" | git mergetool --gui subdir/file3 &&
	yes "d" | git mergetool --gui file11 &&
	yes "d" | git mergetool --gui file12 &&
	yes "l" | git mergetool --gui submod &&
	echo "main updated" >expect &&
	test_cmp expect file1 &&
	echo "main new" >expect &&
	test_cmp expect file2 &&
	echo "main new sub" >expect &&
	test_cmp expect subdir/file3 &&
	echo "branch1 submodule" >expect &&
	test_cmp expect submod/bar &&
	git commit -m "branch1 resolved with mergetool"

Switched to a new branch 'test4'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Merging:
file2
spaced name

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? [test4 2c3a7d1] branch1 resolved with mergetool
 Author: A U Thor <author@example.com>
HEAD is now at 2c3a7d1 branch1 resolved with mergetool
ok 4 - gui mergetool without merge.guitool set falls back to merge.tool

expecting success of 7610.5 'mergetool crlf': 
	test_when_finished "git reset --hard" &&
	# This test_config line must go after the above reset line so that
	# core.autocrlf is unconfigured before reset runs.  (The
	# test_config command uses test_when_finished internally and
	# test_when_finished is LIFO.)
	test_config core.autocrlf true &&
	git checkout -b test$test_count branch1 &&
	test_must_fail git merge main &&
	yes "" | git mergetool file1 &&
	yes "" | git mergetool file2 &&
	yes "" | git mergetool "spaced name" &&
	yes "" | git mergetool both &&
	yes "" | git mergetool subdir/file3 &&
	yes "d" | git mergetool file11 &&
	yes "d" | git mergetool file12 &&
	yes "r" | git mergetool submod &&
	test "$(printf x | cat file1 -)" = "$(printf "main updated\r\nx")" &&
	test "$(printf x | cat file2 -)" = "$(printf "main new\r\nx")" &&
	test "$(printf x | cat subdir/file3 -)" = "$(printf "main new sub\r\nx")" &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	git commit -m "branch1 resolved with mergetool - autocrlf"

Switched to a new branch 'test5'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Recorded preimage for 'both'
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Recorded preimage for 'spaced name'
Recorded preimage for 'subdir/file3'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Merging:
file2

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file
Merging:
spaced name

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Submodule path 'submod': checked out 'd1fea44a66e64eaaa988fd26944c3d309b831631'
Recorded resolution for 'both'.
Recorded resolution for 'file1'.
Recorded resolution for 'file2'.
Recorded resolution for 'spaced name'.
Recorded resolution for 'subdir/file3'.
[test5 2674795] branch1 resolved with mergetool - autocrlf
 Author: A U Thor <author@example.com>
HEAD is now at 2674795 branch1 resolved with mergetool - autocrlf
ok 5 - mergetool crlf

expecting success of 7610.6 'mergetool in subdir': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	(
		cd subdir &&
		test_must_fail git merge main &&
		yes "" | git mergetool file3 &&
		echo "main new sub" >expect &&
		test_cmp expect file3
	)

Switched to a new branch 'test6'
M	submod
Submodule path 'submod': checked out 'b5507ac155b8908404766fca6098138868c8e266'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
HEAD is now at b56897f branch1 changes
ok 6 - mergetool in subdir

expecting success of 7610.7 'mergetool on file in parent dir': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	(
		cd subdir &&
		test_must_fail git merge main &&
		yes "" | git mergetool file3 &&
		yes "" | git mergetool ../file1 &&
		yes "" | git mergetool ../file2 ../spaced\ name &&
		yes "" | git mergetool ../both &&
		yes "d" | git mergetool ../file11 &&
		yes "d" | git mergetool ../file12 &&
		yes "l" | git mergetool ../submod &&
		echo "main updated" >expect &&
		test_cmp expect ../file1 &&
		echo "main new" >expect &&
		test_cmp expect ../file2 &&
		echo "branch1 submodule" >expect &&
		test_cmp expect ../submod/bar &&
		git commit -m "branch1 resolved with mergetool - subdir"
	)

Switched to a new branch 'test7'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Merging:
file2
spaced name

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? [test7 3b3d211] branch1 resolved with mergetool - subdir
 Author: A U Thor <author@example.com>
HEAD is now at 3b3d211 branch1 resolved with mergetool - subdir
ok 7 - mergetool on file in parent dir

expecting success of 7610.8 'mergetool skips autoresolved': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "d" | git mergetool file11 &&
	yes "d" | git mergetool file12 &&
	yes "l" | git mergetool submod &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging"

Switched to a new branch 'test8'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file11

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
file12

Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? HEAD is now at b56897f branch1 changes
ok 8 - mergetool skips autoresolved

expecting success of 7610.9 'mergetool merges all from subdir (rerere disabled)': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_config rerere.enabled false &&
	(
		cd subdir &&
		test_must_fail git merge main &&
		yes "r" | git mergetool ../submod &&
		yes "d" "d" | git mergetool --no-prompt &&
		echo "main updated" >expect &&
		test_cmp expect ../file1 &&
		echo "main new" >expect &&
		test_cmp expect ../file2 &&
		echo "main new sub" >expect &&
		test_cmp expect file3 &&
		( cd .. && git submodule update -N ) &&
		echo "main submodule" >expect &&
		test_cmp expect ../submod/bar &&
		git commit -m "branch2 resolved by mergetool from subdir"
	)

Switched to a new branch 'test9'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Merging:
both
file1
file11
file12
file2
spaced name
subdir/file3

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Submodule path 'submod': checked out 'd1fea44a66e64eaaa988fd26944c3d309b831631'
[test9 af143c6] branch2 resolved by mergetool from subdir
 Author: A U Thor <author@example.com>
HEAD is now at af143c6 branch2 resolved by mergetool from subdir
ok 9 - mergetool merges all from subdir (rerere disabled)

expecting success of 7610.10 'mergetool merges all from subdir (rerere enabled)': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_config rerere.enabled true &&
	rm -rf .git/rr-cache &&
	(
		cd subdir &&
		test_must_fail git merge main &&
		yes "r" | git mergetool ../submod &&
		yes "d" "d" | git mergetool --no-prompt &&
		echo "main updated" >expect &&
		test_cmp expect ../file1 &&
		echo "main new" >expect &&
		test_cmp expect ../file2 &&
		echo "main new sub" >expect &&
		test_cmp expect file3 &&
		( cd .. && git submodule update -N ) &&
		echo "main submodule" >expect &&
		test_cmp expect ../submod/bar &&
		git commit -m "branch2 resolved by mergetool from subdir"
	)

Switched to a new branch 'test10'
M	submod
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Recorded preimage for 'both'
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Recorded preimage for 'spaced name'
Recorded preimage for 'subdir/file3'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Merging:
both
file1
file11
file12
file2
spaced name
subdir/file3

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Recorded resolution for 'both'.
Recorded resolution for 'file1'.
Recorded resolution for 'file2'.
Recorded resolution for 'spaced name'.
Recorded resolution for 'subdir/file3'.
[test10 af143c6] branch2 resolved by mergetool from subdir
 Author: A U Thor <author@example.com>
HEAD is now at af143c6 branch2 resolved by mergetool from subdir
ok 10 - mergetool merges all from subdir (rerere enabled)

expecting success of 7610.11 'mergetool skips resolved paths when rerere is active': 
	test_when_finished "git reset --hard" &&
	test_config rerere.enabled true &&
	rm -rf .git/rr-cache &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&
	yes "l" | git mergetool --no-prompt submod &&
	yes "d" "d" | git mergetool --no-prompt &&
	git submodule update -N &&
	output="$(yes "n" | git mergetool --no-prompt)" &&
	test "$output" = "No files need merging"

Switched to a new branch 'test11'
M	submod
Submodule path 'submod': checked out 'b5507ac155b8908404766fca6098138868c8e266'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Recorded preimage for 'both'
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Recorded preimage for 'spaced name'
Recorded preimage for 'subdir/file3'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Merging:
both
file1
file11
file12
file2
spaced name
subdir/file3

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
HEAD is now at b56897f branch1 changes
ok 11 - mergetool skips resolved paths when rerere is active

expecting success of 7610.12 'conflicted stash sets up rerere': 
	test_when_finished "git reset --hard" &&
	test_config rerere.enabled true &&
	git checkout stash1 &&
	echo "Conflicting stash content" >file11 &&
	git stash &&

	git checkout --detach stash2 &&
	test_must_fail git stash apply &&

	test -n "$(git ls-files -u)" &&
	conflicts="$(git rerere remaining)" &&
	test "$conflicts" = "file11" &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" != "No files need merging" &&

	git commit -am "save the stash resolution" &&

	git reset --hard stash2 &&
	test_must_fail git stash apply &&

	test -n "$(git ls-files -u)" &&
	conflicts="$(git rerere remaining)" &&
	test -z "$conflicts" &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging"

Switched to branch 'stash1'
M	submod
Saved working directory and index state WIP on stash1: 7727624 stash1 changes
HEAD is now at 3eeb9f3 stash2 changes
M	submod
Merging Updated upstream with Stashed changes
Auto-merging file11
CONFLICT (content): Merge conflict in file11
Recorded preimage for 'file11'
HEAD detached at refs/heads/stash2
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   file11

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   submod (new commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	both.orig
	expect
	file1.orig
	file2.orig
	spaced name.orig
	subdir/expect
	subdir/file3.orig

no changes added to commit (use "git add" and/or "git commit -a")
Recorded resolution for 'file11'.
[detached HEAD 22fbead] save the stash resolution
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 2 deletions(-)
HEAD is now at 3eeb9f3 stash2 changes
Merging Updated upstream with Stashed changes
Auto-merging file11
CONFLICT (content): Merge conflict in file11
Resolved 'file11' using previous resolution.
HEAD detached at refs/heads/stash2
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   file11

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   submod (new commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	both.orig
	expect
	file1.orig
	file11.orig
	file2.orig
	spaced name.orig
	subdir/expect
	subdir/file3.orig

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at 3eeb9f3 stash2 changes
ok 12 - conflicted stash sets up rerere

expecting success of 7610.13 'mergetool takes partial path': 
	test_when_finished "git reset --hard" &&
	test_config rerere.enabled false &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	test_must_fail git merge main &&

	yes "" | git mergetool subdir &&

	echo "main new sub" >expect &&
	test_cmp expect subdir/file3

Previous HEAD position was 3eeb9f3 stash2 changes
Switched to a new branch 'test13'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Merging:
subdir/file3

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
HEAD is now at b56897f branch1 changes
ok 13 - mergetool takes partial path

expecting success of 7610.14 'mergetool delete/delete conflict': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count move-to-c &&
	test_must_fail git merge move-to-b &&
	echo d | git mergetool a/a/file.txt &&
	! test -f a/a/file.txt &&
	git reset --hard &&
	test_must_fail git merge move-to-b &&
	echo m | git mergetool a/a/file.txt &&
	test -f b/b/file.txt &&
	git reset --hard &&
	test_must_fail git merge move-to-b &&
	! echo a | git mergetool a/a/file.txt &&
	! test -f a/a/file.txt

Switched to a new branch 'test14'
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? HEAD is now at 7baa014 move to c
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? HEAD is now at 7baa014 move to c
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? HEAD is now at 7baa014 move to c
ok 14 - mergetool delete/delete conflict

expecting success of 7610.15 'mergetool produces no errors when keepBackup is used': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count move-to-c &&
	test_config mergetool.keepBackup true &&
	test_must_fail git merge move-to-b &&
	echo d | git mergetool a/a/file.txt 2>actual &&
	test_must_be_empty actual &&
	! test -d a

Switched to a new branch 'test15'
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? HEAD is now at 7baa014 move to c
ok 15 - mergetool produces no errors when keepBackup is used

expecting success of 7610.16 'mergetool honors tempfile config for deleted files': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count move-to-c &&
	test_config mergetool.keepTemporaries false &&
	test_must_fail git merge move-to-b &&
	echo d | git mergetool a/a/file.txt &&
	! test -d a

Switched to a new branch 'test16'
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? HEAD is now at 7baa014 move to c
ok 16 - mergetool honors tempfile config for deleted files

expecting success of 7610.17 'mergetool keeps tempfiles when aborting delete/delete': 
	test_when_finished "git reset --hard" &&
	test_when_finished "git clean -fdx" &&
	git checkout -b test$test_count move-to-c &&
	test_config mergetool.keepTemporaries true &&
	test_must_fail git merge move-to-b &&
	! test_write_lines a n | git mergetool a/a/file.txt &&
	test -d a/a &&
	cat >expect <<-\EOF &&
	file_BASE_.txt
	file_LOCAL_.txt
	file_REMOTE_.txt
	EOF
	ls -1 a/a | sed -e "s/[0-9]*//g" >actual &&
	test_cmp expect actual

Switched to a new branch 'test17'
Auto-merging a/a/file.txt
CONFLICT (rename/rename): a/a/file.txt renamed to c/c/file.txt in HEAD and to b/b/file.txt in move-to-b.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
a/a/file.txt

Deleted merge conflict for 'a/a/file.txt':
  {local}: deleted
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Removing a/a/file_BASE_9314.txt
Removing a/a/file_LOCAL_9314.txt
Removing a/a/file_REMOTE_9314.txt
Removing actual
Removing both.orig
Removing expect
Removing file1.orig
Removing file11.orig
Removing file2.orig
Removing spaced name.orig
Removing subdir/expect
Removing subdir/file3.orig
HEAD is now at 7baa014 move to c
ok 17 - mergetool keeps tempfiles when aborting delete/delete

expecting success of 7610.18 'deleted vs modified submodule': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	mv submod submod-movedaside &&
	git rm --cached submod &&
	git commit -m "Submodule deleted from branch" &&
	git checkout -b test$test_count.a test$test_count &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "r" | git mergetool submod &&
	rmdir submod && mv submod-movedaside submod &&
	echo "branch1 submodule" >expect &&
	test_cmp expect submod/bar &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping module" &&

	mv submod submod-movedaside &&
	git checkout -b test$test_count.b test$test_count &&
	git submodule update -N &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "l" | git mergetool submod &&
	test ! -e submod &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by deleting module" &&

	mv submod-movedaside submod &&
	git checkout -b test$test_count.c main &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "r" | git mergetool submod &&
	test ! -e submod &&
	test -d submod.orig &&
	git submodule update -N &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by deleting module" &&
	mv submod.orig submod &&

	git checkout -b test$test_count.d main &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "l" | git mergetool submod &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping module"

Switched to a new branch 'test18'
rm 'submod'
[test18 5815277] Submodule deleted from branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 160000 submod
Switched to a new branch 'test18.a'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (modify/delete): submod deleted in HEAD and modified in main.  Version main of submod left in tree.
Recorded preimage for 'both'
Recorded preimage for 'file1'
Recorded preimage for 'file2'
Recorded preimage for 'spaced name'
Recorded preimage for 'subdir/file3'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: deleted
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Submodule path 'submod': checked out 'd1fea44a66e64eaaa988fd26944c3d309b831631'
Recorded resolution for 'both'.
Recorded resolution for 'file1'.
Recorded resolution for 'file2'.
Recorded resolution for 'spaced name'.
Recorded resolution for 'subdir/file3'.
[test18.a 699f6ba] Merge resolved by keeping module
 Author: A U Thor <author@example.com>
Switched to a new branch 'test18.b'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (modify/delete): submod deleted in HEAD and modified in main.  Version main of submod left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: deleted
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? [test18.b ba131d0] Merge resolved by deleting module
 Author: A U Thor <author@example.com>
Switched to a new branch 'test18.c'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test18.  Version test18 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test18 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (modify/delete): submod deleted in test18 and modified in HEAD.  Version HEAD of submod left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
  {remote}: deleted
Use (l)ocal or (r)emote, or (a)bort? [test18.c 79dacce] Merge resolved by deleting module
 Author: A U Thor <author@example.com>
Switched to a new branch 'test18.d'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test18.  Version test18 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test18 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (modify/delete): submod deleted in test18 and modified in HEAD.  Version HEAD of submod left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
  {remote}: deleted
Use (l)ocal or (r)emote, or (a)bort? [test18.d 84e5f25] Merge resolved by keeping module
 Author: A U Thor <author@example.com>
HEAD is now at 84e5f25 Merge resolved by keeping module
ok 18 - deleted vs modified submodule

expecting success of 7610.19 'file vs modified submodule': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	mv submod submod-movedaside &&
	git rm --cached submod &&
	echo not a submodule >submod &&
	git add submod &&
	git commit -m "Submodule path becomes file" &&
	git checkout -b test$test_count.a branch1 &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "r" | git mergetool submod &&
	rmdir submod && mv submod-movedaside submod &&
	echo "branch1 submodule" >expect &&
	test_cmp expect submod/bar &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping module" &&

	mv submod submod-movedaside &&
	git checkout -b test$test_count.b test$test_count &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		yes "c" | git mergetool submod~HEAD &&
		git rm submod &&
		git mv submod~HEAD submod
	else
		yes "l" | git mergetool submod
	fi &&
	git submodule update -N &&
	echo "not a submodule" >expect &&
	test_cmp expect submod &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping file" &&

	git checkout -b test$test_count.c main &&
	rmdir submod && mv submod-movedaside submod &&
	test ! -e submod.orig &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		mv submod submod.orig &&
		git rm --cached submod &&
		yes "c" | git mergetool submod~test19 &&
		git mv submod~test19 submod
	else
		yes "r" | git mergetool submod
	fi &&
	test -d submod.orig &&
	git submodule update -N &&
	echo "not a submodule" >expect &&
	test_cmp expect submod &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping file" &&

	git checkout -b test$test_count.d main &&
	rmdir submod && mv submod.orig submod &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	yes "" | git mergetool file1 file2 spaced\ name subdir/file3 &&
	yes "" | git mergetool both &&
	yes "d" | git mergetool file11 file12 &&
	yes "l" | git mergetool submod &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		yes "d" | git mergetool submod~test19
	fi &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	output="$(git mergetool --no-prompt)" &&
	test "$output" = "No files need merging" &&
	git commit -m "Merge resolved by keeping module"

Switched to a new branch 'test19'
M	submod
Submodule path 'submod': checked out 'b5507ac155b8908404766fca6098138868c8e266'
rm 'submod'
[test19 51d579a] Submodule path becomes file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 160000 => 100644 submod
Switched to a new branch 'test19.a'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod (not checked out)
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit b5507ac155b8908404766fca6098138868c8e266
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? Submodule path 'submod': checked out 'd1fea44a66e64eaaa988fd26944c3d309b831631'
[test19.a a22d630] Merge resolved by keeping module
 Author: A U Thor <author@example.com>
Switched to a new branch 'test19.b'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (distinct types): submod had different types on each side; renamed one of them so each can be recorded somewhere.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod~HEAD

Deleted merge conflict for 'submod~HEAD':
  {local}: created file
  {remote}: deleted
Use (c)reated or (d)eleted file, or (a)bort? rm 'submod'
[test19.b 03808c9] Merge resolved by keeping file
 Author: A U Thor <author@example.com>
Switched to a new branch 'test19.c'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test19.  Version test19 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test19 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (distinct types): submod had different types on each side; renamed one of them so each can be recorded somewhere.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? rm 'submod'
Merging:
submod~test19

Deleted merge conflict for 'submod~test19':
  {local}: deleted
  {remote}: created file
Use (c)reated or (d)eleted file, or (a)bort? [test19.c d6fb010] Merge resolved by keeping file
 Author: A U Thor <author@example.com>
Switched to a new branch 'test19.d'
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test19.  Version test19 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test19 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (distinct types): submod had different types on each side; renamed one of them so each can be recorded somewhere.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1
file2
spaced name
subdir/file3

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'file2':
  {local}: created file
  {remote}: created file

Normal merge conflict for 'spaced name':
  {local}: modified file
  {remote}: modified file

Normal merge conflict for 'subdir/file3':
  {local}: modified file
  {remote}: modified file
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
Merging:
file11
file12

Deleted merge conflict for 'file11':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? 
Deleted merge conflict for 'file12':
  {local}: modified file
  {remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort? Merging:
submod

Submodule merge conflict for 'submod':
  {local}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
  {remote}: deleted
Use (l)ocal or (r)emote, or (a)bort? Merging:
submod~test19

Deleted merge conflict for 'submod~test19':
  {local}: deleted
  {remote}: created file
Use (c)reated or (d)eleted file, or (a)bort? [test19.d 78b901a] Merge resolved by keeping module
 Author: A U Thor <author@example.com>
HEAD is now at 78b901a Merge resolved by keeping module
ok 19 - file vs modified submodule

expecting success of 7610.20 'submodule in subdirectory': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	git submodule update -N &&
	(
		cd subdir &&
		test_create_repo subdir_module &&
		(
		cd subdir_module &&
		: >file15 &&
		git add file15 &&
		git commit -m "add initial versions"
		)
	) &&
	test_when_finished "rm -rf subdir/subdir_module" &&
	git submodule add file:///dev/null subdir/subdir_module &&
	git add subdir/subdir_module &&
	git commit -m "add submodule in subdirectory" &&

	git checkout -b test$test_count.a test$test_count &&
	git submodule update -N &&
	(
	cd subdir/subdir_module &&
		git checkout -b super10.a &&
		echo test$test_count.a >file15 &&
		git add file15 &&
		git commit -m "on branch 10.a"
	) &&
	git add subdir/subdir_module &&
	git commit -m "change submodule in subdirectory on test$test_count.a" &&

	git checkout -b test$test_count.b test$test_count &&
	git submodule update -N &&
	(
		cd subdir/subdir_module &&
		git checkout -b super10.b &&
		echo test$test_count.b >file15 &&
		git add file15 &&
		git commit -m "on branch 10.b"
	) &&
	git add subdir/subdir_module &&
	git commit -m "change submodule in subdirectory on test$test_count.b" &&

	test_must_fail git merge test$test_count.a &&
	(
		cd subdir &&
		yes "l" | git mergetool subdir_module
	) &&
	echo "test$test_count.b" >expect &&
	test_cmp expect subdir/subdir_module/file15 &&
	git submodule update -N &&
	echo "test$test_count.b" >expect &&
	test_cmp expect subdir/subdir_module/file15 &&
	git reset --hard &&
	git submodule update -N &&

	test_must_fail git merge test$test_count.a &&
	yes "r" | git mergetool subdir/subdir_module &&
	echo "test$test_count.b" >expect &&
	test_cmp expect subdir/subdir_module/file15 &&
	git submodule update -N &&
	echo "test$test_count.a" >expect &&
	test_cmp expect subdir/subdir_module/file15 &&
	git commit -m "branch1 resolved with mergetool"

Switched to a new branch 'test20'
M	submod
Submodule path 'submod': checked out 'b5507ac155b8908404766fca6098138868c8e266'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7610-mergetool/subdir/subdir_module/.git/
[main (root-commit) 4026e0d] add initial versions
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file15
Adding existing repo at 'subdir/subdir_module' to the index
[test20 fa030bf] add submodule in subdirectory
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 160000 subdir/subdir_module
Switched to a new branch 'test20.a'
Switched to a new branch 'super10.a'
[super10.a e51e504] on branch 10.a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[test20.a 36380aa] change submodule in subdirectory on test20.a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'test20.b'
M	subdir/subdir_module
Submodule path 'subdir/subdir_module': checked out '4026e0d3f7d9c9cd867521d1177656769bfa2be1'
Switched to a new branch 'super10.b'
[super10.b e7cb421] on branch 10.b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[test20.b 6eae923] change submodule in subdirectory on test20.b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Failed to merge submodule subdir/subdir_module
CONFLICT (submodule): Merge conflict in subdir/subdir_module
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (subdir/subdir_module), and either merge commit e51e504
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add subdir/subdir_module

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Merging:
subdir/subdir_module

Submodule merge conflict for 'subdir/subdir_module':
  {local}: submodule commit e7cb42147e351dde456e7d86fbe5ac89f43de679
  {remote}: submodule commit e51e504244acbfadc9e7ea9868c3cced1088346d
Use (l)ocal or (r)emote, or (a)bort? HEAD is now at 6eae923 change submodule in subdirectory on test20.b
Failed to merge submodule subdir/subdir_module
CONFLICT (submodule): Merge conflict in subdir/subdir_module
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (subdir/subdir_module), and either merge commit e51e504
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add subdir/subdir_module

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Automatic merge failed; fix conflicts and then commit the result.
Merging:
subdir/subdir_module

Submodule merge conflict for 'subdir/subdir_module':
  {local}: submodule commit e7cb42147e351dde456e7d86fbe5ac89f43de679
  {remote}: submodule commit e51e504244acbfadc9e7ea9868c3cced1088346d
Use (l)ocal or (r)emote, or (a)bort? Submodule path 'subdir/subdir_module': checked out 'e51e504244acbfadc9e7ea9868c3cced1088346d'
[test20.b 9ad20f7] branch1 resolved with mergetool
 Author: A U Thor <author@example.com>
HEAD is now at 9ad20f7 branch1 resolved with mergetool
ok 20 - submodule in subdirectory

expecting success of 7610.21 'directory vs modified submodule': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	mv submod submod-movedaside &&
	git rm --cached submod &&
	mkdir submod &&
	echo not a submodule >submod/file16 &&
	git add submod/file16 &&
	git commit -m "Submodule path becomes directory" &&

	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	yes "l" | git mergetool submod &&
	echo "not a submodule" >expect &&
	test_cmp expect submod/file16 &&
	rm -rf submod.orig &&

	git reset --hard &&
	test_must_fail git merge main &&
	test -n "$(git ls-files -u)" &&
	test ! -e submod.orig &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		yes "r" | git mergetool submod~main &&
		git mv submod submod.orig &&
		git mv submod~main submod
	else
		yes "r" | git mergetool submod
	fi &&
	test -d submod.orig &&
	echo "not a submodule" >expect &&
	test_cmp expect submod.orig/file16 &&
	rm -r submod.orig &&
	mv submod-movedaside/.git submod &&
	( cd submod && git clean -f && git reset --hard ) &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&
	git reset --hard &&
	rm -rf submod-movedaside &&

	git checkout -b test$test_count.c main &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	yes "l" | git mergetool submod &&
	git submodule update -N &&
	echo "main submodule" >expect &&
	test_cmp expect submod/bar &&

	git reset --hard &&
	git submodule update -N &&
	test_must_fail git merge test$test_count &&
	test -n "$(git ls-files -u)" &&
	test ! -e submod.orig &&
	yes "r" | git mergetool submod &&
	echo "not a submodule" >expect &&
	test_cmp expect submod/file16 &&

	git reset --hard main &&
	( cd submod && git clean -f && git reset --hard ) &&
	git submodule update -N

Switched to a new branch 'test21'
rm 'submod'
[test21 b88b6e4] Submodule path becomes directory
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 160000 submod
 create mode 100644 submod/file16
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (file/directory): directory in the way of submod from main; moving it to submod~main instead.
CONFLICT (modify/delete): submod~main deleted in HEAD and modified in main.  Version main of submod~main left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
No files need merging
HEAD is now at b88b6e4 Submodule path becomes directory
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (file/directory): directory in the way of submod from main; moving it to submod~main instead.
CONFLICT (modify/delete): submod~main deleted in HEAD and modified in main.  Version main of submod~main left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
submod~main

Submodule merge conflict for 'submod~main':
  {local}: deleted
  {remote}: submodule commit d1fea44a66e64eaaa988fd26944c3d309b831631
Use (l)ocal or (r)emote, or (a)bort? warning: Could not find section in .gitmodules where path=submod~main
HEAD is now at b5507ac Add bar on branch1
Submodule path 'submod': checked out 'd1fea44a66e64eaaa988fd26944c3d309b831631'
warning: unable to rmdir 'submod': Directory not empty
HEAD is now at b88b6e4 Submodule path becomes directory
Switched to a new branch 'test21.c'
warning: unable to rmdir 'submod': Directory not empty
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test21.  Version test21 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test21 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (file/directory): directory in the way of submod from HEAD; moving it to submod~HEAD instead.
CONFLICT (modify/delete): submod~HEAD deleted in test21 and modified in HEAD.  Version HEAD of submod~HEAD left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
No files need merging
Skipping unmerged submodule submod~HEAD
HEAD is now at 42ed12d main updates
warning: unable to rmdir 'submod': Directory not empty
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in HEAD and modified in test21.  Version test21 of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in test21 and modified in HEAD.  Version HEAD of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
CONFLICT (file/directory): directory in the way of submod from HEAD; moving it to submod~HEAD instead.
CONFLICT (modify/delete): submod~HEAD deleted in test21 and modified in HEAD.  Version HEAD of submod~HEAD left in tree.
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
No files need merging
HEAD is now at 42ed12d main updates
HEAD is now at d1fea44 Add bar on main
HEAD is now at 42ed12d main updates
ok 21 - directory vs modified submodule

expecting success of 7610.22 'file with no base': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_must_fail git merge main &&
	git mergetool --no-prompt --tool mybase -- both &&
	test_must_be_empty both

Switched to a new branch 'test22'
M	submod
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
HEAD is now at b56897f branch1 changes
ok 22 - file with no base

expecting success of 7610.23 'custom commands override built-ins': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_config mergetool.defaults.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" &&
	test_config mergetool.defaults.trustExitCode true &&
	test_must_fail git merge main &&
	git mergetool --no-prompt --tool defaults -- both &&
	echo main both added >expected &&
	test_cmp expected both

Switched to a new branch 'test23'
M	submod
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
Merging:
both

Normal merge conflict for 'both':
  {local}: created file
  {remote}: created file
HEAD is now at b56897f branch1 changes
ok 23 - custom commands override built-ins

expecting success of 7610.24 'filenames seen by tools start with ./': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_config mergetool.writeToTemp false &&
	test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
	test_config mergetool.myecho.trustExitCode true &&
	test_must_fail git merge main &&
	git mergetool --no-prompt --tool myecho -- both >actual &&
	grep ^\./both_LOCAL_ actual

Switched to a new branch 'test24'
M	submod
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
./both_LOCAL_20369
HEAD is now at b56897f branch1 changes
ok 24 - filenames seen by tools start with ./

checking prerequisite: MKTEMP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-MKTEMP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-MKTEMP" &&
	tempdir=$(mktemp -d -t foo.XXXXXX) &&
	test -d "$tempdir" &&
	rmdir "$tempdir"

)
prerequisite MKTEMP ok
expecting success of 7610.25 'temporary filenames are used with mergetool.writeToTemp': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count branch1 &&
	test_config mergetool.writeToTemp true &&
	test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
	test_config mergetool.myecho.trustExitCode true &&
	test_must_fail git merge main &&
	git mergetool --no-prompt --tool myecho -- both >actual &&
	! grep ^\./both_LOCAL_ actual &&
	grep /both_LOCAL_ actual

Switched to a new branch 'test25'
M	submod
Auto-merging both
CONFLICT (add/add): Merge conflict in both
Auto-merging file1
CONFLICT (content): Merge conflict in file1
CONFLICT (modify/delete): file11 deleted in main and modified in HEAD.  Version HEAD of file11 left in tree.
CONFLICT (modify/delete): file12 deleted in HEAD and modified in main.  Version main of file12 left in tree.
Auto-merging file2
CONFLICT (add/add): Merge conflict in file2
Auto-merging spaced name
CONFLICT (content): Merge conflict in spaced name
Auto-merging subdir/file3
CONFLICT (content): Merge conflict in subdir/file3
Failed to merge submodule submod
CONFLICT (submodule): Merge conflict in submod
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
 - go to submodule (submod), and either merge commit d1fea44
   or update to an existing commit which has merged those changes
 - come back to superproject and run:

      git add submod

   to record the above merge or update
 - resolve any other conflicts in the superproject
 - commit the resulting index in the superproject
Resolved 'both' using previous resolution.
Resolved 'file1' using previous resolution.
Resolved 'file2' using previous resolution.
Resolved 'spaced name' using previous resolution.
Resolved 'subdir/file3' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
/tmp/git-mergetool-8ng9Qq/both_LOCAL_20470
HEAD is now at b56897f branch1 changes
ok 25 - temporary filenames are used with mergetool.writeToTemp

expecting success of 7610.26 'diff.orderFile configuration is honored': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count order-file-side2 &&
	test_config diff.orderFile order-file &&
	test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
	test_config mergetool.myecho.trustExitCode true &&
	echo b >order-file &&
	echo a >>order-file &&
	test_must_fail git merge order-file-side1 &&
	cat >expect <<-\EOF &&
		Merging:
		b
		a
	EOF

	# make sure "order-file" that is ambiguous between
	# rev and path is understood correctly.
	git branch order-file HEAD &&

	git mergetool --no-prompt --tool myecho >output &&
	git grep --no-index -h -A2 Merging: output >actual &&
	test_cmp expect actual

Switched to a new branch 'test26'
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (content): Merge conflict in b
Recorded preimage for 'a'
Recorded preimage for 'b'
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 50ba26c side2
ok 26 - diff.orderFile configuration is honored

expecting success of 7610.27 'mergetool -Oorder-file is honored': 
	test_when_finished "git reset --hard" &&
	git checkout -b test$test_count order-file-side2 &&
	test_config diff.orderFile order-file &&
	test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
	test_config mergetool.myecho.trustExitCode true &&
	echo b >order-file &&
	echo a >>order-file &&
	test_must_fail git merge order-file-side1 &&
	cat >expect <<-\EOF &&
		Merging:
		a
		b
	EOF
	git mergetool -O/dev/null --no-prompt --tool myecho >output &&
	git grep --no-index -h -A2 Merging: output >actual &&
	test_cmp expect actual &&
	git reset --hard &&

	git config --unset diff.orderFile &&
	test_must_fail git merge order-file-side1 &&
	cat >expect <<-\EOF &&
		Merging:
		b
		a
	EOF
	git mergetool -Oorder-file --no-prompt --tool myecho >output &&
	git grep --no-index -h -A2 Merging: output >actual &&
	test_cmp expect actual

Switched to a new branch 'test27'
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (content): Merge conflict in b
Recorded preimage for 'a'
Recorded preimage for 'b'
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 50ba26c side2
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (content): Merge conflict in b
Recorded preimage for 'a'
Recorded preimage for 'b'
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at 50ba26c side2
ok 27 - mergetool -Oorder-file is honored

expecting success of 7610.28 'mergetool --tool-help shows recognized tools': 
	# Check a few known tools are correctly shown
	git mergetool --tool-help >mergetools &&
	grep vimdiff mergetools &&
	grep vimdiff3 mergetools &&
	grep gvimdiff2 mergetools &&
	grep araxis mergetools &&
	grep xxdiff mergetools &&
	grep meld mergetools

		gvimdiff         Use gVim (requires a graphical session) with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
		gvimdiff1        Use gVim (requires a graphical session) with a 2 panes layout (LOCAL and REMOTE)
		gvimdiff2        Use gVim (requires a graphical session) with a 3 panes layout (LOCAL, MERGED and REMOTE)
		gvimdiff3        Use gVim (requires a graphical session) where only the MERGED file is shown
		nvimdiff         Use Neovim with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
		nvimdiff1        Use Neovim with a 2 panes layout (LOCAL and REMOTE)
		nvimdiff2        Use Neovim with a 3 panes layout (LOCAL, MERGED and REMOTE)
		nvimdiff3        Use Neovim where only the MERGED file is shown
		vimdiff          Use Vim with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
		vimdiff1         Use Vim with a 2 panes layout (LOCAL and REMOTE)
		vimdiff2         Use Vim with a 3 panes layout (LOCAL, MERGED and REMOTE)
		vimdiff3         Use Vim where only the MERGED file is shown
		gvimdiff3        Use gVim (requires a graphical session) where only the MERGED file is shown
		nvimdiff3        Use Neovim where only the MERGED file is shown
		vimdiff3         Use Vim where only the MERGED file is shown
		gvimdiff2        Use gVim (requires a graphical session) with a 3 panes layout (LOCAL, MERGED and REMOTE)
		araxis           Use Araxis Merge (requires a graphical session)
		xxdiff           Use xxdiff (requires a graphical session)
		meld             Use Meld (requires a graphical session) with optional `auto merge` (see `git help mergetool`'s `CONFIGURATION` section)
ok 28 - mergetool --tool-help shows recognized tools

expecting success of 7610.29 'mergetool hideResolved': 
	test_config mergetool.hideResolved true &&
	test_when_finished "git reset --hard" &&
	git checkout -b test${test_count}_b main &&
	test_write_lines >file1 base "" a &&
	git commit -a -m "base" &&
	test_write_lines >file1 base "" c &&
	git commit -a -m "remote update" &&
	git checkout -b test${test_count}_a HEAD~ &&
	test_write_lines >file1 local "" b &&
	git commit -a -m "local update" &&
	test_must_fail git merge test${test_count}_b &&
	yes "" | git mergetool file1 &&
	test_write_lines >expect local "" c &&
	test_cmp expect file1 &&
	git commit -m "test resolved with mergetool"

Switched to a new branch 'test29_b'
[test29_b b1eadc5] base
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+), 1 deletion(-)
[test29_b 27f9bad] remote update
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'test29_a'
[test29_a a3aa5f2] local update
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Auto-merging file1
CONFLICT (content): Merge conflict in file1
Recorded preimage for 'file1'
Automatic merge failed; fix conflicts and then commit the result.
Merging:
file1

Normal merge conflict for 'file1':
  {local}: modified file
  {remote}: modified file
Recorded resolution for 'file1'.
[test29_a 90808e5] test resolved with mergetool
 Author: A U Thor <author@example.com>
HEAD is now at 90808e5 test resolved with mergetool
ok 29 - mergetool hideResolved

# passed all 29 test(s)
1..29
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9102-git-svn-deep-rmdir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9102-git-svn-deep-rmdir/.git/
expecting success of 9102.1 'initialize repo': 
	mkdir import &&
	(
		cd import &&
		mkdir -p deeply/nested/directory/number/1 &&
		mkdir -p deeply/nested/directory/number/2 &&
		echo foo >deeply/nested/directory/number/1/file &&
		echo foo >deeply/nested/directory/number/2/another &&
		svn_cmd import -m "import for git svn" . "$svnrepo"
	)
	
Adding         deeply
Adding         deeply/nested
Adding         deeply/nested/directory
Adding         deeply/nested/directory/number
Adding         deeply/nested/directory/number/1
Adding         deeply/nested/directory/number/1/file
Adding         deeply/nested/directory/number/2
Adding         deeply/nested/directory/number/2/another
Committing transaction...
Committed revision 1.
ok 1 - initialize repo

expecting success of 9102.2 'mirror via git svn': 
	git svn init "$svnrepo" &&
	git svn fetch &&
	git checkout -f -b test-rmdir remotes/git-svn
	
	A	deeply/nested/directory/number/1/file
	A	deeply/nested/directory/number/2/another
r1 = 71c1e1dfb97ddc12d02759abb808140a1649b622 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9102-git-svn-deep-rmdir/svnrepo r1
Switched to a new branch 'test-rmdir'
ok 2 - mirror via git svn

expecting success of 9102.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
	
rm 'deeply/nested/directory/number/2/another'
[test-rmdir bd697c9] remove another
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 deeply/nested/directory/number/2/another
	D	deeply/nested/directory/number/2/another
	D+	deeply/nested/directory/number/2/
	D	deeply/nested/directory/number/2/another
	D	deeply/nested/directory/number/2/
W: -empty_dir: deeply/nested/directory/number/2
r2 = 6ef1f7245cec213d6bcc32b7c3e069e359202a39 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
deeply/nested/directory/number/1/
deeply/nested/directory/number/1/file
ok 3 - Try a commit on rmdir

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9103-git-svn-tracked-directory-removed.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9103-git-svn-tracked-directory-removed/.git/
expecting success of 9103.1 'make history for tracking': 
	mkdir import &&
	mkdir import/trunk &&
	echo hello >> import/trunk/README &&
	svn_cmd import -m initial import "$svnrepo" &&
	rm -rf import &&
	svn_cmd co "$svnrepo"/trunk trunk &&
	echo bye bye >> trunk/README &&
	svn_cmd rm -m "gone" "$svnrepo"/trunk &&
	rm -rf trunk &&
	mkdir trunk &&
	echo "new" > trunk/FOLLOWME &&
	svn_cmd import -m "new trunk" trunk "$svnrepo"/trunk

Adding         import/trunk
Adding         import/trunk/README
Committing transaction...
Committed revision 1.
A    trunk/README
Checked out revision 1.
Committing transaction...
Committed revision 2.
Adding         trunk/FOLLOWME
Committing transaction...
Committed revision 3.
ok 1 - make history for tracking

expecting success of 9103.2 'clone repo with git': 
	git svn clone -s "$svnrepo" x &&
	test_path_is_file x/FOLLOWME &&
	test_path_is_missing x/README

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9103-git-svn-tracked-directory-removed/x/.git/
	A	README
r1 = 3937c3bedb2389e1a2cc8b3639e85efd7fa1295b (refs/remotes/origin/trunk)
	D	README
	A	FOLLOWME
r3 = 5d2d55104226232a595ef905ee77d1b364a312a2 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9103-git-svn-tracked-directory-removed/svnrepo/trunk r3
ok 2 - clone repo with git

expecting success of 9103.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_path_is_file README &&
		test_path_is_missing FOLLOWME &&
		test -z "$(git svn find-rev r2)"
	)

HEAD is now at 3937c3b initial
ok 3 - make sure r2 still has old file

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9101-git-svn-props.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9101-git-svn-props/.git/
expecting success of 9101.1 'checkout working copy from svn': svn co "$svnrepo" test_wc
A    test_wc/cr
A    test_wc/crlf
A    test_wc/empty
A    test_wc/empty_cr
A    test_wc/empty_crlf
A    test_wc/empty_lf
A    test_wc/kw.c
A    test_wc/lf
A    test_wc/ne_cr
A    test_wc/ne_crlf
A    test_wc/ne_lf
Checked out revision 1.
ok 1 - checkout working copy from svn

expecting success of 9101.2 'setup some commits to svn': 
	(
		cd test_wc &&
		echo Greetings >> kw.c &&
		poke kw.c &&
		svn_cmd commit -m "Not yet an Id" &&
		echo Hello world >> kw.c &&
		poke kw.c &&
		svn_cmd commit -m "Modified file, but still not yet an Id" &&
		svn_cmd propset svn:keywords Id kw.c &&
		poke kw.c &&
		svn_cmd commit -m "Propset Id"
	)

Sending        kw.c
Transmitting file data .done
Committing transaction...
Committed revision 2.
Sending        kw.c
Transmitting file data .done
Committing transaction...
Committed revision 3.
property 'svn:keywords' set on 'kw.c'
Sending        kw.c
Committing transaction...
Committed revision 4.
ok 2 - setup some commits to svn

expecting success of 9101.3 'initialize git svn': git svn init "$svnrepo"
ok 3 - initialize git svn

expecting success of 9101.4 'fetch revisions from svn': git svn fetch
	A	cr
	A	crlf
	A	empty
	A	empty_cr
	A	empty_crlf
	A	empty_lf
	A	kw.c
	A	lf
	A	ne_cr
	A	ne_crlf
	A	ne_lf
r1 = 3aeeb1a068e38cf32010a2b9131c28826c1000de (refs/remotes/git-svn)
	M	kw.c
r2 = b2f9aaeecf06e028b229e8b8411e3bc7eea29aab (refs/remotes/git-svn)
	M	kw.c
r3 = fcc4eb63084b489d753d2b7e8afbee4161df929c (refs/remotes/git-svn)
	M	kw.c
r4 = a6e3317b7c380c52d656795602deb620550a3ac7 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9101-git-svn-props/svnrepo r4
ok 4 - fetch revisions from svn

expecting success of 9101.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
Switched to a new branch 'mybranch'
[mybranch c62e11c] test keywords ignoring
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
	M	kw.c
	M	kw.c
r5 = 9f31eef05197272fe7f05e45eafde89e3dfc9186 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
From .
 * remote-tracking branch git-svn    -> FETCH_HEAD
Updating c62e11c..9f31eef
Fast-forward
ok 5 - test svn:keywords ignoring

expecting success of 9101.6 'raw $Id$ found in kw.c': test '/* $Id$ */' = '/* $Id$ */'
ok 6 - raw $Id$ found in kw.c

expecting success of 9101.7 'propset CR on crlf files': 
	(
		cd test_wc &&
		svn_cmd propset svn:eol-style CR empty &&
		svn_cmd propset svn:eol-style CR crlf &&
		svn_cmd propset svn:eol-style CR ne_crlf &&
		svn_cmd commit -m "propset CR on crlf files"
	 )

property 'svn:eol-style' set on 'empty'
property 'svn:eol-style' set on 'crlf'
property 'svn:eol-style' set on 'ne_crlf'
Sending        crlf
Sending        empty
Sending        ne_crlf
Transmitting file data ..done
Committing transaction...
Committed revision 6.
ok 7 - propset CR on crlf files

expecting success of 9101.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
	M	crlf
	M	empty
	M	ne_crlf
r6 = 054402d5d495314ae0dc3d682d2c9e85ddfc9cf2 (refs/remotes/git-svn)
From .
 * remote-tracking branch git-svn    -> FETCH_HEAD
Updating 9f31eef..054402d
Fast-forward
 crlf    | 3 +--
 ne_crlf | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)
A    new_wc/cr
A    new_wc/crlf
A    new_wc/empty
A    new_wc/empty_cr
A    new_wc/empty_crlf
A    new_wc/empty_lf
A    new_wc/kw.c
A    new_wc/lf
A    new_wc/ne_cr
A    new_wc/ne_crlf
A    new_wc/ne_lf
Checked out revision 6.
ok 8 - fetch and pull latest from svn and checkout a new wc

expecting success of 9101.9 'Comparing crlf': cmp crlf new_wc/crlf
ok 9 - Comparing crlf

expecting success of 9101.10 'Comparing ne_crlf': cmp ne_crlf new_wc/ne_crlf
ok 10 - Comparing ne_crlf

expecting success of 9101.11 'Comparing lf': cmp lf new_wc/lf
ok 11 - Comparing lf

expecting success of 9101.12 'Comparing ne_lf': cmp ne_lf new_wc/ne_lf
ok 12 - Comparing ne_lf

expecting success of 9101.13 'Comparing cr': cmp cr new_wc/cr
ok 13 - Comparing cr

expecting success of 9101.14 'Comparing ne_cr': cmp ne_cr new_wc/ne_cr
ok 14 - Comparing ne_cr

expecting success of 9101.15 'Comparing empty_cr': cmp empty_cr new_wc/empty_cr
ok 15 - Comparing empty_cr

expecting success of 9101.16 'Comparing empty_lf': cmp empty_lf new_wc/empty_lf
ok 16 - Comparing empty_lf

expecting success of 9101.17 'Comparing empty': cmp empty new_wc/empty
ok 17 - Comparing empty

expecting success of 9101.18 'Comparing empty_crlf': cmp empty_crlf new_wc/empty_crlf
ok 18 - Comparing empty_crlf

expecting success of 9101.19 'Set CRLF on cr files': svn_cmd propset svn:eol-style CRLF cr &&
	 svn_cmd propset svn:eol-style CRLF ne_cr &&
	 svn_cmd propset svn:keywords Id cr &&
	 svn_cmd propset svn:keywords Id ne_cr &&
	 svn_cmd commit -m "propset CRLF on cr files"
property 'svn:eol-style' set on 'cr'
property 'svn:eol-style' set on 'ne_cr'
property 'svn:keywords' set on 'cr'
property 'svn:keywords' set on 'ne_cr'
Sending        cr
Sending        ne_cr
Transmitting file data ..done
Committing transaction...
Committed revision 7.
ok 19 - Set CRLF on cr files

expecting success of 9101.20 'fetch and pull latest from svn': git svn fetch && git pull . remotes/git-svn
	M	cr
	M	ne_cr
r7 = cf70225c4e84edd1dc13c847cdfebaf19e9fe5a4 (refs/remotes/git-svn)
From .
 * remote-tracking branch git-svn    -> FETCH_HEAD
Updating 054402d..cf70225
Fast-forward
 cr    | 4 +++-
 ne_cr | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)
ok 20 - fetch and pull latest from svn

expecting success of 9101.21 'CRLF + $Id$': test 'f39bd49beefa1dff130e47c7a24777dfc3657ba2' = 'f39bd49beefa1dff130e47c7a24777dfc3657ba2'
ok 21 - CRLF + $Id$

expecting success of 9101.22 'CRLF + $Id$ (no newline)': test '41c5e77993f143876592cd19b5e9a6f6d2e4ff8a' = '41c5e77993f143876592cd19b5e9a6f6d2e4ff8a'
ok 22 - CRLF + $Id$ (no newline)

expecting success of 9101.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

A         deeply
A         deeply/nested
A         deeply/nested/directory
A         deeply/nested/directory/.keep
Updating '.':
U    kw.c
Updated to revision 7.
property 'svn:ignore' set on '.'
property 'svn:ignore' set on 'deeply'
property 'svn:ignore' set on 'deeply/nested'
property 'svn:ignore' set on 'deeply/nested/directory'
Sending        .
Adding         deeply
Adding         deeply/nested
Adding         deeply/nested/directory
Adding         deeply/nested/directory/.keep
Transmitting file data .done
Committing transaction...
Committed revision 8.
ok 23 - test show-ignore

expecting success of 9101.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 >ls_files_result &&
	grep gitignore ls_files_result | cmp - create-ignore-index.expect
	
	A	deeply/nested/directory/.keep
r8 = b53be571c873257c21a8c06b7019ca535b672ef0 (refs/remotes/git-svn)
From .
 * remote-tracking branch git-svn    -> FETCH_HEAD
Updating cf70225..b53be57
Fast-forward
 deeply/nested/directory/.keep | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 deeply/nested/directory/.keep
ok 24 - test create-ignore

expecting success of 9101.25 'test propget': 
	test_propget () {
		git svn propget $1 $2 >actual &&
		cmp $3 actual
	} &&
	test_propget svn:ignore . prop.expect &&
	cd deeply &&
	test_propget svn:ignore . ../prop.expect &&
	test_propget svn:entry:committed-rev nested/directory/.keep \
		../prop2.expect &&
	test_propget svn:ignore .. ../prop.expect &&
	test_propget svn:ignore nested/ ../prop.expect &&
	test_propget svn:ignore ./nested ../prop.expect &&
	test_propget svn:ignore .././deeply/nested ../prop.expect
	
ok 25 - test propget

expecting success of 9101.26 'test proplist': 
	git svn proplist . >actual &&
	cmp prop.expect actual &&

	git svn proplist nested/directory/.keep >actual &&
	cmp prop2.expect actual
	
ok 26 - test proplist

# passed all 26 test(s)
1..26
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9105-git-svn-commit-diff.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9105-git-svn-commit-diff/.git/
expecting success of 9105.1 'initialize repo': 
	mkdir import &&
	(
		cd import &&
		echo hello >readme &&
		svn_cmd import -m "initial" . "$svnrepo"
	) &&
	echo hello > readme &&
	git update-index --add readme &&
	git commit -a -m "initial" &&
	echo world >> readme &&
	git commit -a -m "another"
	
Adding         readme
Committing transaction...
Committed revision 1.
[master (root-commit) ecebef3] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 readme
[master 32e6dbc] another
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 1 - initialize repo

expecting success of 9105.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
	
	M	readme
Committed r2
A    wc/readme
Checked out revision 2.
ok 2 - test the commit-diff command

expecting success of 9105.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
	
Adding         import/readme
Committing transaction...
Committed revision 3.
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9105-git-svn-commit-diff/svnrepo/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9105-git-svn-commit-diff/svnrepo
	A	readme
r3 = 9810ef5f8e558a4f83a489736974a9e9d8f03b2b (refs/remotes/git-svn)
	M	readme
Committed r4
ok 3 - commit-diff to a sub-directory (with git svn config)

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9106-git-svn-commit-diff-clobber.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9106-git-svn-commit-diff-clobber/.git/
expecting success of 9106.1 'initialize repo': 
	mkdir import &&
	(
		cd import &&
		echo initial >file &&
		svn_cmd import -m "initial" . "$svnrepo"
	) &&
	echo initial > file &&
	git update-index --add file &&
	git commit -a -m "initial"
	
Adding         file
Committing transaction...
Committed revision 1.
[master (root-commit) 8d59b1f] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 1 - initialize repo

expecting success of 9106.2 'commit change from svn side': 
	svn_cmd co "$svnrepo" t.svn &&
	(
		cd t.svn &&
		echo second line from svn >>file &&
		poke file &&
		svn_cmd commit -m "second line from svn"
	) &&
	rm -rf t.svn
	
A    t.svn/file
Checked out revision 1.
Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 2.
ok 2 - commit change from svn side

expecting success of 9106.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"

[master 62e39e5] second line from git
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Transaction is out of date: File '/file' is out of date at /<<PKGBUILDDIR>>/git-svn line 1545.

ok 3 - commit conflicting change from git

expecting success of 9106.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"
	
HEAD is now at 8d59b1f initial
[master 3494a8f] second line from svn
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 57507a0] third line from git
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
	M	file
Committed r3
ok 4 - commit complementing change from git

expecting success of 9106.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
	
	A	file
r1 = bf49f0eaddd6030d17a1aed7f791a65fbe509c6e (refs/remotes/git-svn)
	M	file
r2 = 1f3c82c661bf044c324792c38f4d697797872b2f (refs/remotes/git-svn)
	M	file
r3 = e0739631a68b0abeaa56829a114d9e7a2b00f12d (refs/remotes/git-svn)
HEAD is now at e073963 third line from git
A    t.svn/file
Checked out revision 3.
Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 4.
[master b3bcf6b] fourth line from git
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9106-git-svn-commit-diff-clobber/svnrepo ...

ERROR from SVN:
Transaction is out of date: File '/file' is out of date
W: b3bcf6b90ce373f903612d842987a4c82c0a1cde and refs/remotes/git-svn differ, using rebase:
:100644 100644 faa34c792e6a485955b65cc9f20e8ab0dd63e45c d270188940c824ce4f1e8aa864ca5d2f8c75f939 M	file
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.

ok 5 - dcommit fails to commit because of conflict

expecting success of 9106.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
	
HEAD is now at e073963 third line from git
[master 7cfbe97] index merge
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
[master 86c1121] more changes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9106-git-svn-commit-diff-clobber/svnrepo ...
	A	file2
Committed r5
	M	file
r4 = 9d006efdcf04c9934be7bad16c8b3f02bba053cd (refs/remotes/git-svn)
	A	file2
r5 = 05ab1db5c3b5ff0e21f11c13b4239c55c7a89284 (refs/remotes/git-svn)
W: 7cfbe97a3ad3ab89fbdcba6e6eb153e680561686 and refs/remotes/git-svn differ, using rebase:
:100644 100644 d270188940c824ce4f1e8aa864ca5d2f8c75f939 b349877e032add143a5dc286d30e523181dea4ef M	file
warning: skipped previously applied commit 7cfbe97
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
	M	file2
Committed r6
	M	file2
r6 = 973809f399bdd01eb59dbb8335edc9a5bb506d63 (refs/remotes/git-svn)
No changes between e3bcf119546aab135522da5f438340f34b37fd62 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 6 - dcommit does the svn equivalent of an index merge

expecting success of 9106.7 'commit another change from svn side': 
	svn_cmd co "$svnrepo" t.svn &&
	(
		cd t.svn &&
		echo third line from svn >>file &&
		poke file &&
		svn_cmd commit -m "third line from svn"
	) &&
	rm -rf t.svn
	
A    t.svn/file
A    t.svn/file2
Checked out revision 6.
Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 7.
ok 7 - commit another change from svn side

expecting success of 9106.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
	
HEAD is now at 973809f more changes
[master 2fad96b] new file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new-file
[master 4efa0c8] clobber
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 4 deletions(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9106-git-svn-commit-diff-clobber/svnrepo ...
	A	new-file
Committed r8
	M	file
r7 = 55c75000389011a872726e00ee5f539cf3e6a462 (refs/remotes/git-svn)
	A	new-file
r8 = 73aa360941ce0defa06c4f3ca383311cf41df6ab (refs/remotes/git-svn)
W: 2fad96b0badb3a7857cccbe7b22e3cd5c1054dcb and refs/remotes/git-svn differ, using rebase:
:100644 100644 b349877e032add143a5dc286d30e523181dea4ef fad4bec9888fc6883cc5a8447f365d44b8e4ebba M	file
warning: skipped previously applied commit 2fad96b
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply 4efa0c8... clobber
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 4efa0c8... clobber
rebase refs/remotes/git-svn: command returned error: 1

ok 8 - multiple dcommit from git svn will not clobber svn

expecting success of 9106.9 'check that rebase really failed': 
	git status >output &&
	grep currently.rebasing output

You are currently rebasing branch 'master' on '73aa360'.
ok 9 - check that rebase really failed

expecting success of 9106.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
	
[detached HEAD db41820] clobber
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 5 deletions(-)

                                                                                
Successfully rebased and updated refs/heads/master.
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9106-git-svn-commit-diff-clobber/svnrepo ...
	M	file
Committed r9
	M	file
r9 = da2b7c977791c3a6e25a42aaf7651b30f10d1780 (refs/remotes/git-svn)
No changes between db41820f746f8472d0e72647988fc1017cba7e80 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 10 - resolve, continue the rebase and dcommit

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9001-send-email.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/.git/
expecting success of 9001.1 'prepare reference tree': 
	echo "1A quick brown fox jumps over the" >file &&
	echo "lazy dog" >>file &&
	git add file &&
	GIT_AUTHOR_NAME="A" git commit -a -m "Initial."

[main (root-commit) fbff2ba] Initial.
 Author: A <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 file
ok 1 - prepare reference tree

expecting success of 9001.2 'Setup helper tool': 
	write_script fake.sendmail <<-\EOF &&
	shift
	output=1
	while test -f commandline$output
	do
		output=$(($output+1))
	done
	for a
	do
		echo "!$a!"
	done >commandline$output
	cat >"msgtxt$output"
	EOF
	git add fake.sendmail &&
	GIT_AUTHOR_NAME="A" git commit -a -m "Second."

[main 60cacbf] Second.
 Author: A <author@example.com>
 1 file changed, 12 insertions(+)
 create mode 100755 fake.sendmail
ok 2 - Setup helper tool

expecting success of 9001.3 'Extract patches': 
	patches=$(git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1) &&
	threaded_patches=$(git format-patch -o threaded -s --in-reply-to="format" HEAD^1)

ok 3 - Extract patches

expecting success of 9001.4 'No confirm with --suppress-cc': 
	test_no_confirm --suppress-cc=sob &&
	check_no_confirm

ok 4 - No confirm with --suppress-cc

expecting success of 9001.5 'No confirm with --confirm=never': 
	test_no_confirm --confirm=never &&
	check_no_confirm

ok 5 - No confirm with --confirm=never

expecting success of 9001.6 'No confirm with sendemail.confirm=never': 
	git config sendemail.confirm never &&
	test_no_confirm --compose --subject=foo &&
	check_no_confirm

ok 6 - No confirm with sendemail.confirm=never

expecting success of 9001.7 'Send patches': 
	git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:38 +0000
Message-Id: <20221228080638.17811-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 7 - Send patches

expecting success of 9001.8 'setup expect': 
	cat >expected <<-\EOF
	!nobody@example.com!
	!author@example.com!
	!one@example.com!
	!two@example.com!
	EOF

ok 8 - setup expect

expecting success of 9001.9 'Verify commandline': 
	test_cmp expected commandline1

ok 9 - Verify commandline

expecting success of 9001.10 'Send patches with --envelope-sender': 
	clean_fake_sendmail &&
	git send-email --envelope-sender="Patch Contributor <patch@example.com>" --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -f patch@example.com -i nobody@example.com author@example.com one@example.com two@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:40 +0000
Message-Id: <20221228080640.18078-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 10 - Send patches with --envelope-sender

expecting success of 9001.11 'setup expect': 
	cat >expected <<-\EOF
	!patch@example.com!
	!-i!
	!nobody@example.com!
	!author@example.com!
	!one@example.com!
	!two@example.com!
	EOF

ok 11 - setup expect

expecting success of 9001.12 'Verify commandline': 
	test_cmp expected commandline1

ok 12 - Verify commandline

expecting success of 9001.13 'Send patches with --envelope-sender=auto': 
	clean_fake_sendmail &&
	git send-email --envelope-sender=auto --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -f nobody@example.com -i nobody@example.com author@example.com one@example.com two@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:41 +0000
Message-Id: <20221228080641.18336-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 13 - Send patches with --envelope-sender=auto

expecting success of 9001.14 'setup expect': 
	cat >expected <<-\EOF
	!nobody@example.com!
	!-i!
	!nobody@example.com!
	!author@example.com!
	!one@example.com!
	!two@example.com!
	EOF

ok 14 - setup expect

expecting success of 9001.15 'Verify commandline': 
	test_cmp expected commandline1

ok 15 - Verify commandline

expecting success of 9001.16 'setup expect for cc trailer': 
cat >expected-cc <<\EOF
!recipient@example.com!
!author@example.com!
!one@example.com!
!two@example.com!
!three@example.com!
!four@example.com!
!five@example.com!
!six@example.com!
EOF

ok 16 - setup expect for cc trailer

expecting success of 9001.17 'cc trailer with various syntax': 
	test_commit cc-trailer &&
	test_when_finished "git reset --hard HEAD^" &&
	git commit --amend -F - <<-EOF &&
	Test Cc: trailers.

	Cc: one@example.com
	Cc: <two@example.com> # trailing comments are ignored
	Cc: <three@example.com>, <not.four@example.com> one address per line
	Cc: "Some # Body" <four@example.com> [ <also.a.comment> ]
	Cc: five@example.com # not.six@example.com
	Cc: six@example.com, not.seven@example.com
	EOF
	clean_fake_sendmail &&
	git send-email -1 --to=recipient@example.com \
		--smtp-server="$(pwd)/fake.sendmail" &&
	test_cmp expected-cc commandline1

[main 8c74855] cc-trailer
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 cc-trailer.t
[main 642ae05] Test Cc: trailers.
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:13:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 cc-trailer.t
/tmp/vpVomf2UjK/0001-Test-Cc-trailers.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
(body) Adding cc: one@example.com from line 'Cc: one@example.com'
(body) Adding cc: <two@example.com> from line 'Cc: <two@example.com> # trailing comments are ignored'
(body) Adding cc: <three@example.com> from line 'Cc: <three@example.com>, <not.four@example.com> one address per line'
(body) Adding cc: "Some # Body" <four@example.com> from line 'Cc: "Some # Body" <four@example.com> [ <also.a.comment> ]'
(body) Adding cc: five@example.com from line 'Cc: five@example.com # not.six@example.com'
(body) Adding cc: six@example.com from line 'Cc: six@example.com, not.seven@example.com'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i recipient@example.com author@example.com one@example.com two@example.com three@example.com four@example.com five@example.com six@example.com
From: A U Thor <author@example.com>
To: recipient@example.com
Cc: A U Thor <author@example.com>,
	one@example.com,
	two@example.com,
	three@example.com,
	"Some # Body" <four@example.com>,
	five@example.com,
	six@example.com
Subject: [PATCH] Test Cc: trailers.
Date: Wed, 28 Dec 2022 08:06:43 +0000
Message-Id: <20221228080644.18743-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 17 - cc trailer with various syntax

expecting success of 9001.18 'setup fake get_maintainer.pl script for cc trailer': 
	write_script expected-cc-script.sh <<-EOF
	echo 'One Person <one@example.com> (supporter:THIS (FOO/bar))'
	echo 'Two Person <two@example.com> (maintainer:THIS THING)'
	echo 'Third List <three@example.com> (moderated list:THIS THING (FOO/bar))'
	echo '<four@example.com> (moderated list:FOR THING)'
	echo 'five@example.com (open list:FOR THING (FOO/bar))'
	echo 'six@example.com (open list)'
	EOF

ok 18 - setup fake get_maintainer.pl script for cc trailer

expecting success of 9001.19 'cc trailer with get_maintainer.pl output': 
	clean_fake_sendmail &&
	git send-email -1 --to=recipient@example.com \
		--cc-cmd=./expected-cc-script.sh \
		--smtp-server="$(pwd)/fake.sendmail" &&
	test_cmp expected-cc commandline1

/tmp/kkFP9eVBkd/0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(cc-cmd) Adding cc: One Person <one@example.com> from: './expected-cc-script.sh'
(cc-cmd) Adding cc: Two Person <two@example.com> from: './expected-cc-script.sh'
(cc-cmd) Adding cc: Third List <three@example.com> from: './expected-cc-script.sh'
(cc-cmd) Adding cc: <four@example.com> from: './expected-cc-script.sh'
(cc-cmd) Adding cc: five@example.com (open list:FOR THING (FOO/bar)) from: './expected-cc-script.sh'
(cc-cmd) Adding cc: six@example.com (open list) from: './expected-cc-script.sh'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i recipient@example.com author@example.com one@example.com two@example.com three@example.com four@example.com five@example.com six@example.com
From: A U Thor <author@example.com>
To: recipient@example.com
Cc: A <author@example.com>,
	One Person <one@example.com>,
	Two Person <two@example.com>,
	Third List <three@example.com>,
	four@example.com,
	five@example.com (open list:FOR THING (FOO/bar)),
	six@example.com (open list)
Subject: [PATCH] Second.
Date: Wed, 28 Dec 2022 08:06:45 +0000
Message-Id: <20221228080645.19202-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 19 - cc trailer with get_maintainer.pl output

expecting success of 9001.20 'setup expect': 
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<cc@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
RCPT TO:<bcc@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com,
	A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
In-Reply-To: <unique-message-id@example.com>
References: <unique-message-id@example.com>
Reply-To: Reply <reply@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 20 - setup expect

expecting success of 9001.21 'self name is suppressed': 
	test_suppress_self_unquoted 'A U Thor' 'author@example.com' 		'self_name_suppressed'

[main 1492ecc] unquoted-self_name_suppressed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unquoted-self_name_suppressed.t
[main 1098bff] test suppress-cc.self unquoted-self_name_suppressed with name A U Thor email author@example.com
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:14:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 unquoted-self_name_suppressed.t
suppress-self-unquoted-self_name_suppressed.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: A U Thor <author@example.com>
To: nobody@example.com
Subject: [PATCH] test suppress-cc.self unquoted-self_name_suppressed with name A U Thor email author@example.com
Date: Wed, 28 Dec 2022 08:06:46 +0000
Message-Id: <20221228080646.19426-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 21 - self name is suppressed

expecting success of 9001.22 'self name with dot is suppressed': 
	test_suppress_self_quoted 'A U. Thor' 'author@example.com' 		'self_name_dot_suppressed'

[main 2f6fe81] quoted-self_name_dot_suppressed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-self_name_dot_suppressed.t
[main 2799ef8] test suppress-cc.self quoted-self_name_dot_suppressed with name A U. Thor email author@example.com
 Author: A U. Thor <author@example.com>
 Date: Thu Apr 7 15:15:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-self_name_dot_suppressed.t
suppress-self-quoted-self_name_dot_suppressed.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: "A U. Thor" <author@example.com>
To: nobody@example.com
Subject: [PATCH] test suppress-cc.self quoted-self_name_dot_suppressed with name A U. Thor email author@example.com
Date: Wed, 28 Dec 2022 08:06:48 +0000
Message-Id: <20221228080648.19529-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 22 - self name with dot is suppressed

expecting success of 9001.23 'non-ascii self name is suppressed': 
	test_suppress_self_quoted 'Füñný Nâmé' 'odd_?=mail@example.com' 		'non_ascii_self_suppressed'

[main af91f84] quoted-non_ascii_self_suppressed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-non_ascii_self_suppressed.t
[main d9778ce] test suppress-cc.self quoted-non_ascii_self_suppressed with name Füñný Nâmé email odd_?=mail@example.com
 Author: Füñný Nâmé <odd_?=mail@example.com>
 Date: Thu Apr 7 15:16:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-non_ascii_self_suppressed.t
suppress-self-quoted-non_ascii_self_suppressed.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>
To: nobody@example.com
Subject: [PATCH] =?UTF-8?q?test=20suppress-cc.self=20quoted-non=5Fascii=5F?= =?UTF-8?q?self=5Fsuppressed=20with=20name=20F=C3=BC=C3=B1n=C3=BD=20N?= =?UTF-8?q?=C3=A2m=C3=A9=20email=20odd=5F=3F=3Dmail@example.com?=
Date: Wed, 28 Dec 2022 08:06:49 +0000
Message-Id: <20221228080649.19707-1-odd_?=mail@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 23 - non-ascii self name is suppressed

expecting success of 9001.24 'long non-ascii self name is suppressed': 
	test_suppress_self_quoted 'Ƒüñníęř €. Nâṁé' 'odd_?=mail@example.com' 		'long_non_ascii_self_suppressed'

[main a523e45] quoted-long_non_ascii_self_suppressed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-long_non_ascii_self_suppressed.t
[main 861d640] test suppress-cc.self quoted-long_non_ascii_self_suppressed with name Ƒüñníęř €. Nâṁé email odd_?=mail@example.com
 Author: Ƒüñníęř €. Nâṁé <odd_?=mail@example.com>
 Date: Thu Apr 7 15:17:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 quoted-long_non_ascii_self_suppressed.t
suppress-self-quoted-long_non_ascii_self_suppressed.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: =?UTF-8?q?=C6=91=C3=BC=C3=B1n=C3=AD=C4=99=C5=99=20=E2=82=AC=2E=20N=C3=A2=E1=B9=81=C3=A9?= <odd_?=mail@example.com>
To: nobody@example.com
Subject: [PATCH] =?UTF-8?q?test=20suppress-cc.self=20quoted-long=5Fnon=5Fa?= =?UTF-8?q?scii=5Fself=5Fsuppressed=20with=20name=20=C6=91=C3=BC=C3=B1n?= =?UTF-8?q?=C3=AD=C4=99=C5=99=20=E2=82=AC.=20N=C3=A2=E1=B9=81=C3=A9=20emai?= =?UTF-8?q?l=20odd=5F=3F=3Dmail@example.com?=
Date: Wed, 28 Dec 2022 08:06:51 +0000
Message-Id: <20221228080651.19848-1-odd_?=mail@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 24 - long non-ascii self name is suppressed

expecting success of 9001.25 'sanitized self name is suppressed': 
	test_suppress_self_unquoted '"A U. Thor"' 'author@example.com' 		'self_name_sanitized_suppressed'

[main b5c373a] unquoted-self_name_sanitized_suppressed
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 unquoted-self_name_sanitized_suppressed.t
[main 2856aac] test suppress-cc.self unquoted-self_name_sanitized_suppressed with name "A U. Thor" email author@example.com
 Author: A U. Thor <author@example.com>
 Date: Thu Apr 7 15:18:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 unquoted-self_name_sanitized_suppressed.t
suppress-self-unquoted-self_name_sanitized_suppressed.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: "A U. Thor" <author@example.com>
To: nobody@example.com
Subject: [PATCH] test suppress-cc.self unquoted-self_name_sanitized_suppressed with name "A U. Thor" email author@example.com
Date: Wed, 28 Dec 2022 08:06:52 +0000
Message-Id: <20221228080653.20018-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 25 - sanitized self name is suppressed

expecting success of 9001.26 'Show all headers': 
	git send-email \
		--dry-run \
		--suppress-cc=sob \
		--from="Example <from@example.com>" \
		--reply-to="Reply <reply@example.com>" \
		--to=to@example.com \
		--cc=cc@example.com \
		--bcc=bcc@example.com \
		--in-reply-to="<unique-message-id@example.com>" \
		--smtp-server relay.example.com \
		$patches | replace_variable_fields \
		>actual-show-all-headers &&
	test_cmp expected-show-all-headers actual-show-all-headers

ok 26 - Show all headers

expecting success of 9001.27 'Prompting works': 
	clean_fake_sendmail &&
	(echo "to@example.com" &&
	 echo ""
	) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches \
		2>errors &&
		grep "^From: A U Thor <author@example.com>\$" msgtxt1 &&
		grep "^To: to@example.com\$" msgtxt1

0001-Second.patch
To whom should the emails be sent (if anyone)? Message-ID to be used as In-Reply-To for the first email (if any)? (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i to@example.com author@example.com one@example.com two@example.com committer@example.com
From: A U Thor <author@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:55 +0000
Message-Id: <20221228080655.20275-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
From: A U Thor <author@example.com>
To: to@example.com
ok 27 - Prompting works

checking prerequisite: AUTOIDENT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-AUTOIDENT" &&
	sane_unset GIT_AUTHOR_NAME &&
	sane_unset GIT_AUTHOR_EMAIL &&
	git var GIT_AUTHOR_IDENT

)
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'buildd@testwandboard.(none)')
prerequisite AUTOIDENT not satisfied
ok 28 # skip implicit ident is allowed (missing AUTOIDENT of PERL,AUTOIDENT)

expecting success of 9001.29 'broken implicit ident aborts send-email': 
	clean_fake_sendmail &&
	(sane_unset GIT_AUTHOR_NAME &&
	sane_unset GIT_AUTHOR_EMAIL &&
	sane_unset GIT_COMMITTER_NAME &&
	sane_unset GIT_COMMITTER_EMAIL &&
	GIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY &&
	test_must_fail git send-email \
		--smtp-server="$(pwd)/fake.sendmail" \
		--to=to@example.com \
		$patches </dev/null 2>errors &&
	test_i18ngrep "tell me who you are" errors
	)

0001-Second.patch
*** Please tell me who you are.
ok 29 - broken implicit ident aborts send-email

expecting success of 9001.30 'setup tocmd and cccmd scripts': 
	write_script tocmd-sed <<-\EOF &&
	sed -n -e "s/^tocmd--//p" "$1"
	EOF
	write_script cccmd-sed <<-\EOF
	sed -n -e "s/^cccmd--//p" "$1"
	EOF

ok 30 - setup tocmd and cccmd scripts

expecting success of 9001.31 'tocmd works': 
	clean_fake_sendmail &&
	cp $patches tocmd.patch &&
	echo tocmd--tocmd@example.com >>tocmd.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to-cmd=./tocmd-sed \
		--smtp-server="$(pwd)/fake.sendmail" \
		tocmd.patch \
		&&
	grep "^To: tocmd@example.com" msgtxt1

tocmd.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
(to-cmd) Adding to: tocmd@example.com from: './tocmd-sed'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i tocmd@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: tocmd@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:57 +0000
Message-Id: <20221228080657.20495-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
To: tocmd@example.com
ok 31 - tocmd works

expecting success of 9001.32 'cccmd works': 
	clean_fake_sendmail &&
	cp $patches cccmd.patch &&
	echo "cccmd--  cccmd@example.com" >>cccmd.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--cc-cmd=./cccmd-sed \
		--smtp-server="$(pwd)/fake.sendmail" \
		cccmd.patch \
		&&
	grep "^	cccmd@example.com" msgtxt1

cccmd.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
(cc-cmd) Adding cc: cccmd@example.com from: './cccmd-sed'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com cccmd@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>,
	cccmd@example.com
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:06:58 +0000
Message-Id: <20221228080658.20639-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
	cccmd@example.com
ok 32 - cccmd works

expecting success of 9001.33 'reject long lines': 
	z8=zzzzzzzz &&
	z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
	z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
	clean_fake_sendmail &&
	cp $patches longline.patch &&
	cat >>longline.patch <<-EOF &&
	$z512$z512
	not a long line
	$z512$z512
	EOF
	test_must_fail git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--transfer-encoding=8bit \
		$patches longline.patch \
		2>actual &&
	cat >expect <<-\EOF &&
	fatal: longline.patch:35 is longer than 998 characters
	warning: no patches were sent
	EOF
	test_cmp expect actual

ok 33 - reject long lines

expecting success of 9001.34 'no patch was sent': 
	! test -e commandline1

ok 34 - no patch was sent

expecting success of 9001.35 'Author From: in message body': 
	clean_fake_sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	sed "1,/^\$/d" <msgtxt1 >msgbody1 &&
	grep "From: A <author@example.com>" msgbody1

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:01 +0000
Message-Id: <20221228080701.20895-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
From: A <author@example.com>
ok 35 - Author From: in message body

expecting success of 9001.36 'Author From: not in message body': 
	clean_fake_sendmail &&
	git send-email \
		--from="A <author@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	sed "1,/^\$/d" <msgtxt1 >msgbody1 &&
	! grep "From: A <author@example.com>" msgbody1

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: A <author@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:02 +0000
Message-Id: <20221228080702.21041-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 36 - Author From: not in message body

expecting success of 9001.37 'allow long lines with --no-validate': 
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--no-validate \
		$patches longline.patch \
		2>errors

0001-Second.patch
longline.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:02 +0000
Message-Id: <20221228080703.21265-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:03 +0000
Message-Id: <20221228080703.21265-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080703.21265-1-nobody@example.com>
References: <20221228080703.21265-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
ok 37 - allow long lines with --no-validate

expecting success of 9001.38 'short lines with auto encoding are 8bit': 
	clean_fake_sendmail &&
	git send-email \
		--from="A <author@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--transfer-encoding=auto \
		$patches &&
	grep "Content-Transfer-Encoding: 8bit" msgtxt1

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: A <author@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:05 +0000
Message-Id: <20221228080705.21576-1-author@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
Content-Transfer-Encoding: 8bit
ok 38 - short lines with auto encoding are 8bit

expecting success of 9001.39 'long lines with auto encoding are quoted-printable': 
	clean_fake_sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--transfer-encoding=auto \
		--no-validate \
		longline.patch &&
	grep "Content-Transfer-Encoding: quoted-printable" msgtxt1

longline.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:06 +0000
Message-Id: <20221228080706.21852-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
Content-Transfer-Encoding: quoted-printable
ok 39 - long lines with auto encoding are quoted-printable

expecting success of 9001.40 'carriage returns with auto encoding are quoted-printable': 
	clean_fake_sendmail &&
	cp $patches cr.patch &&
	printf "this is a line\r\n" >>cr.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--transfer-encoding=auto \
		--no-validate \
		cr.patch &&
	grep "Content-Transfer-Encoding: quoted-printable" msgtxt1

cr.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:07 +0000
Message-Id: <20221228080707.22077-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
Content-Transfer-Encoding: quoted-printable
ok 40 - carriage returns with auto encoding are quoted-printable

expecting success of 9001.41 '--validate passes with encoding auto': 
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			--validate \
			$patches longline.patch
	
0001-Second.patch
longline.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:07 +0000
Message-Id: <20221228080708.22169-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:08 +0000
Message-Id: <20221228080708.22169-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080708.22169-1-nobody@example.com>
References: <20221228080708.22169-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
ok 41 - --validate passes with encoding auto

expecting success of 9001.42 '--validate passes with encoding quoted-printable': 
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			--validate \
			$patches longline.patch
	
0001-Second.patch
longline.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:08 +0000
Message-Id: <20221228080709.22279-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:09 +0000
Message-Id: <20221228080709.22279-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080709.22279-1-nobody@example.com>
References: <20221228080709.22279-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
ok 42 - --validate passes with encoding quoted-printable

expecting success of 9001.43 '--validate passes with encoding base64': 
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			--validate \
			$patches longline.patch
	
0001-Second.patch
longline.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:10 +0000
Message-Id: <20221228080711.22378-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: base64

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:11 +0000
Message-Id: <20221228080711.22378-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080711.22378-1-nobody@example.com>
References: <20221228080711.22378-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: base64

Result: OK
ok 43 - --validate passes with encoding base64

expecting success of 9001.44 '--validate respects relative core.hooksPath path': 
	clean_fake_sendmail &&
	mkdir my-hooks &&
	test_when_finished "rm my-hooks.ran" &&
	write_script my-hooks/sendemail-validate <<-\EOF &&
	>my-hooks.ran
	exit 1
	EOF
	test_config core.hooksPath "my-hooks" &&
	test_must_fail git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--validate \
		longline.patch 2>actual &&
	test_path_is_file my-hooks.ran &&
	cat >expect <<-EOF &&
	fatal: longline.patch: rejected by sendemail-validate hook
	fatal: command 'git hook run --ignore-missing sendemail-validate -- <patch>' died with exit code 1
	warning: no patches were sent
	EOF
	test_cmp expect actual

ok 44 - --validate respects relative core.hooksPath path

expecting success of 9001.45 '--validate respects absolute core.hooksPath path': 
	hooks_path="$(pwd)/my-hooks" &&
	test_config core.hooksPath "$hooks_path" &&
	test_when_finished "rm my-hooks.ran" &&
	test_must_fail git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--validate \
		longline.patch 2>actual &&
	test_path_is_file my-hooks.ran &&
	cat >expect <<-EOF &&
	fatal: longline.patch: rejected by sendemail-validate hook
	fatal: command 'git hook run --ignore-missing sendemail-validate -- <patch>' died with exit code 1
	warning: no patches were sent
	EOF
	test_cmp expect actual

ok 45 - --validate respects absolute core.hooksPath path

expecting success of 9001.46 '--transfer-encoding=7bit produces correct header': 
		clean_fake_sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			$patches &&
		grep "Content-Transfer-Encoding: $enc" msgtxt1
	
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:14 +0000
Message-Id: <20221228080714.22543-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

Result: OK
Content-Transfer-Encoding: 7bit
ok 46 - --transfer-encoding=7bit produces correct header

expecting success of 9001.47 '--transfer-encoding=8bit produces correct header': 
		clean_fake_sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			$patches &&
		grep "Content-Transfer-Encoding: $enc" msgtxt1
	
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:15 +0000
Message-Id: <20221228080715.22602-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
Content-Transfer-Encoding: 8bit
ok 47 - --transfer-encoding=8bit produces correct header

expecting success of 9001.48 '--transfer-encoding=quoted-printable produces correct header': 
		clean_fake_sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			$patches &&
		grep "Content-Transfer-Encoding: $enc" msgtxt1
	
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:15 +0000
Message-Id: <20221228080715.22622-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Result: OK
Content-Transfer-Encoding: quoted-printable
ok 48 - --transfer-encoding=quoted-printable produces correct header

expecting success of 9001.49 '--transfer-encoding=base64 produces correct header': 
		clean_fake_sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--transfer-encoding=$enc \
			$patches &&
		grep "Content-Transfer-Encoding: $enc" msgtxt1
	
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:16 +0000
Message-Id: <20221228080716.22638-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: base64

Result: OK
Content-Transfer-Encoding: base64
ok 49 - --transfer-encoding=base64 produces correct header

expecting success of 9001.50 'Invalid In-Reply-To': 
	clean_fake_sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--in-reply-to=" " \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches \
		2>errors &&
	! grep "^In-Reply-To: < *>" msgtxt1

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:18 +0000
Message-Id: <20221228080718.22690-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 50 - Invalid In-Reply-To

expecting success of 9001.51 'Valid In-Reply-To when prompting': 
	clean_fake_sendmail &&
	(echo "From Example <from@example.com>" &&
	 echo "To Example <to@example.com>" &&
	 echo ""
	) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches 2>errors &&
	! grep "^In-Reply-To: < *>" msgtxt1

0001-Second.patch
To whom should the emails be sent (if anyone)? Message-ID to be used as In-Reply-To for the first email (if any)? (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i from@example.com author@example.com one@example.com two@example.com committer@example.com
From: A U Thor <author@example.com>
To: From Example <from@example.com>
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:19 +0000
Message-Id: <20221228080719.22779-1-author@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <To Example <to@example.com>
References: <To Example <to@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 51 - Valid In-Reply-To when prompting

expecting success of 9001.52 'In-Reply-To without --chain-reply-to': 
	clean_fake_sendmail &&
	echo "<unique-message-id@example.com>" >expect &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--no-chain-reply-to \
		--in-reply-to="$(cat expect)" \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches $patches $patches \
		2>errors &&
	# The first message is a reply to --in-reply-to
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
	test_cmp expect actual &&
	# Second and subsequent messages are replies to the first one
	sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
	test_cmp expect actual &&
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
	test_cmp expect actual

0001-Second.patch
0001-Second.patch
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:18 +0000
Message-Id: <20221228080720.22867-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <unique-message-id@example.com>
References: <unique-message-id@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:19 +0000
Message-Id: <20221228080720.22867-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080720.22867-1-nobody@example.com>
References: <unique-message-id@example.com>
 <20221228080720.22867-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:20 +0000
Message-Id: <20221228080720.22867-3-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080720.22867-1-nobody@example.com>
References: <unique-message-id@example.com>
 <20221228080720.22867-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 52 - In-Reply-To without --chain-reply-to

expecting success of 9001.53 'In-Reply-To with --chain-reply-to': 
	clean_fake_sendmail &&
	echo "<unique-message-id@example.com>" >expect &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--chain-reply-to \
		--in-reply-to="$(cat expect)" \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches $patches $patches \
		2>errors &&
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
	test_cmp expect actual &&
	sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
	test_cmp expect actual &&
	sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt2 >expect &&
	sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
	test_cmp expect actual

0001-Second.patch
0001-Second.patch
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:19 +0000
Message-Id: <20221228080721.22979-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <unique-message-id@example.com>
References: <unique-message-id@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:20 +0000
Message-Id: <20221228080721.22979-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080721.22979-1-nobody@example.com>
References: <unique-message-id@example.com>
 <20221228080721.22979-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:21 +0000
Message-Id: <20221228080721.22979-3-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080721.22979-2-nobody@example.com>
References: <unique-message-id@example.com>
 <20221228080721.22979-1-nobody@example.com>
 <20221228080721.22979-2-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 53 - In-Reply-To with --chain-reply-to

expecting success of 9001.54 'setup erroring fake editor': 
	write_script fake-editor <<-\EOF
	echo >&2 "I am about to error"
	exit 1
	EOF

ok 54 - setup erroring fake editor

expecting success of 9001.55 'fake editor dies with error': 
	clean_fake_sendmail &&
	test_must_fail git send-email \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches 2>err &&
	grep "I am about to error" err &&
	grep "the editor exited uncleanly, aborting everything" err

0001-Second.patch
I am about to error
the editor exited uncleanly, aborting everything at /<<PKGBUILDDIR>>/git-send-email line 252.
ok 55 - fake editor dies with error

expecting success of 9001.56 'setup fake editor': 
	write_script fake-editor <<-\EOF
	echo fake edit >>"$1"
	EOF

ok 56 - setup fake editor

expecting success of 9001.57 '--compose works': 
	clean_fake_sendmail &&
	git send-email \
	--compose --subject foo \
	--from="Example <nobody@example.com>" \
	--to=nobody@example.com \
	--smtp-server="$(pwd)/fake.sendmail" \
	$patches \
	2>errors

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:23 +0000
Message-Id: <20221228080724.23138-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:24 +0000
Message-Id: <20221228080724.23138-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080724.23138-1-nobody@example.com>
References: <20221228080724.23138-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 57 - --compose works

expecting success of 9001.58 'first message is compose text': 
	grep "^fake edit" msgtxt1

fake edit
ok 58 - first message is compose text

expecting success of 9001.59 'second message is patch': 
	grep "Subject:.*Second" msgtxt2

Subject: [PATCH 1/1] Second.
ok 59 - second message is patch

expecting success of 9001.60 'setup expect': 
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<cc@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com,
	A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 60 - setup expect

expecting success of 9001.61 'sendemail.cc set': 
	git config sendemail.cc cc@example.com &&
	test_suppression sob

ok 61 - sendemail.cc set

expecting success of 9001.62 'setup expect': 
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 62 - setup expect

expecting success of 9001.63 'sendemail.cc unset': 
	git config --unset sendemail.cc &&
	test_suppression sob

ok 63 - sendemail.cc unset

expecting success of 9001.64 'setup expect': 
cat >expected-suppress-cccmd <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
RCPT TO:<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 64 - setup expect

expecting success of 9001.65 'sendemail.cccmd': 
	write_script cccmd <<-\EOF &&
	echo cc-cmd@example.com
	EOF
	git config sendemail.cccmd ./cccmd &&
	test_suppression cccmd

ok 65 - sendemail.cccmd

expecting success of 9001.66 'setup expect': 
cat >expected-suppress-all <<\EOF
0001-Second.patch
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
From: Example <from@example.com>
To: to@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 66 - setup expect

expecting success of 9001.67 '--suppress-cc=all': 
	test_suppression all

ok 67 - --suppress-cc=all

expecting success of 9001.68 'setup expect': 
cat >expected-suppress-body <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(cc-cmd) Adding cc: cc-cmd@example.com from: './cccmd'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
RCPT TO:<cc-cmd@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	cc-cmd@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 68 - setup expect

expecting success of 9001.69 '--suppress-cc=body': 
	test_suppression body

ok 69 - --suppress-cc=body

expecting success of 9001.70 'setup expect': 
cat >expected-suppress-body-cccmd <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 70 - setup expect

expecting success of 9001.71 '--suppress-cc=body --suppress-cc=cccmd': 
	test_suppression body cccmd

ok 71 - --suppress-cc=body --suppress-cc=cccmd

expecting success of 9001.72 'setup expect': 
cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 72 - setup expect

expecting success of 9001.73 '--suppress-cc=sob': 
	test_might_fail git config --unset sendemail.cccmd &&
	test_suppression sob

ok 73 - --suppress-cc=sob

expecting success of 9001.74 'setup expect': 
cat >expected-suppress-bodycc <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<one@example.com>
RCPT TO:<two@example.com>
RCPT TO:<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 74 - setup expect

expecting success of 9001.75 '--suppress-cc=bodycc': 
	test_suppression bodycc

ok 75 - --suppress-cc=bodycc

expecting success of 9001.76 'setup expect': 
cat >expected-suppress-cc <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>
RCPT TO:<author@example.com>
RCPT TO:<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
EOF

ok 76 - setup expect

expecting success of 9001.77 '--suppress-cc=cc': 
	test_suppression cc

ok 77 - --suppress-cc=cc

expecting success of 9001.78 '--confirm=always': 
	test_confirm --confirm=always --suppress-cc=all

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 78 - --confirm=always

expecting success of 9001.79 '--confirm=auto': 
	test_confirm --confirm=auto

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 79 - --confirm=auto

expecting success of 9001.80 '--confirm=cc': 
	test_confirm --confirm=cc

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 80 - --confirm=cc

expecting success of 9001.81 '--confirm=compose': 
	test_confirm --confirm=compose --compose

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 81 - --confirm=compose

expecting success of 9001.82 'confirm by default (due to cc)': 
	test_when_finished git config sendemail.confirm never &&
	git config --unset sendemail.confirm &&
	test_confirm

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 82 - confirm by default (due to cc)

expecting success of 9001.83 'confirm by default (due to --compose)': 
	test_when_finished git config sendemail.confirm never &&
	git config --unset sendemail.confirm &&
	test_confirm --suppress-cc=all --compose

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): OK. Log says:
ok 83 - confirm by default (due to --compose)

expecting success of 9001.84 'confirm detects EOF (inform assumes y)': 
	test_when_finished git config sendemail.confirm never &&
	git config --unset sendemail.confirm &&
	rm -fr outdir &&
	git format-patch -2 -o outdir &&
	GIT_SEND_EMAIL_NOTTY=1 \
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			outdir/*.patch </dev/null

outdir/0001-Initial.patch
outdir/0002-Second.patch
outdir/0001-Initial.patch
outdir/0002-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'

From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>
Subject: [PATCH 1/2] Initial.
Date: Wed, 28 Dec 2022 08:07:42 +0000
Message-Id: <20221228080743.24378-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

    The Cc list above has been expanded by additional
    addresses found in the patch commit message. By default
    send-email prompts before sending whenever this occurs.
    This behavior is controlled by the sendemail.confirm
    configuration setting.

    For additional information, run 'git send-email --help'.
    To retain the current behavior, but squelch this message,
    run 'git config --global sendemail.confirm auto'.

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): 
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>
Subject: [PATCH 1/2] Initial.
Date: Wed, 28 Dec 2022 08:07:42 +0000
Message-Id: <20221228080743.24378-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'

From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>
Subject: [PATCH 2/2] Second.
Date: Wed, 28 Dec 2022 08:07:43 +0000
Message-Id: <20221228080743.24378-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080743.24378-1-nobody@example.com>
References: <20221228080743.24378-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): 
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>
Subject: [PATCH 2/2] Second.
Date: Wed, 28 Dec 2022 08:07:43 +0000
Message-Id: <20221228080743.24378-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080743.24378-1-nobody@example.com>
References: <20221228080743.24378-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 84 - confirm detects EOF (inform assumes y)

expecting success of 9001.85 'confirm detects EOF (auto causes failure)': 
	test_when_finished git config sendemail.confirm never &&
	git config sendemail.confirm auto &&
	GIT_SEND_EMAIL_NOTTY=1 &&
	export GIT_SEND_EMAIL_NOTTY &&
		test_must_fail git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			$patches </dev/null

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'

From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:44 +0000
Message-Id: <20221228080744.24430-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): 
Send this email reply required at /<<PKGBUILDDIR>>/git-send-email line 1585.
ok 85 - confirm detects EOF (auto causes failure)

expecting success of 9001.86 'confirm does not loop forever': 
	test_when_finished git config sendemail.confirm never &&
	git config sendemail.confirm auto &&
	GIT_SEND_EMAIL_NOTTY=1 &&
	export GIT_SEND_EMAIL_NOTTY &&
		yes "bogus" | test_must_fail git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			$patches

0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'

From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:45 +0000
Message-Id: <20221228080746.24463-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): Send this email reply required at /<<PKGBUILDDIR>>/git-send-email line 1585, <STDIN> line 10.
ok 86 - confirm does not loop forever

expecting success of 9001.87 'utf8 Cc is rfc2047 encoded': 
	clean_fake_sendmail &&
	rm -fr outdir &&
	git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" &&
	git send-email \
	--from="Example <nobody@example.com>" \
	--to=nobody@example.com \
	--smtp-server="$(pwd)/fake.sendmail" \
	outdir/*.patch &&
	grep "^	" msgtxt1 |
	grep "=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>"

outdir/0001-Second.patch
outdir/0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: "àéìöú" <utf8@example.com> from line 'Cc: àéìöú <utf8@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com utf8@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>
Subject: [PATCH] Second.
Date: Wed, 28 Dec 2022 08:07:46 +0000
Message-Id: <20221228080747.24536-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
	=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>
ok 87 - utf8 Cc is rfc2047 encoded

expecting success of 9001.88 '--compose adds MIME for utf8 body': 
	clean_fake_sendmail &&
	write_script fake-editor-utf8 <<-\EOF &&
	echo "utf8 body: àéìöú" >>"$1"
	EOF
	GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
	git send-email \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:47 +0000
Message-Id: <20221228080748.24570-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:48 +0000
Message-Id: <20221228080748.24570-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080748.24570-1-nobody@example.com>
References: <20221228080748.24570-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
utf8 body: àéìöú
Content-Type: text/plain; charset=UTF-8
ok 88 - --compose adds MIME for utf8 body

expecting success of 9001.89 '--compose respects user mime type': 
	clean_fake_sendmail &&
	write_script fake-editor-utf8-mime <<-\EOF &&
	cat >"$1" <<-\EOM
	MIME-Version: 1.0
	Content-Type: text/plain; charset=iso-8859-1
	Content-Transfer-Encoding: 8bit
	Subject: foo

	utf8 body: àéìöú
	EOM
	EOF
	GIT_EDITOR="\"$(pwd)/fake-editor-utf8-mime\"" \
	git send-email \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1 &&
	! grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:48 +0000
Message-Id: <20221228080749.24645-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1;
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:49 +0000
Message-Id: <20221228080749.24645-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080749.24645-1-nobody@example.com>
References: <20221228080749.24645-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
utf8 body: àéìöú
Content-Type: text/plain; charset=iso-8859-1;
ok 89 - --compose respects user mime type

expecting success of 9001.90 '--compose adds MIME for utf8 subject': 
	clean_fake_sendmail &&
	GIT_EDITOR="\"$(pwd)/fake-editor\"" \
	git send-email \
		--compose --subject utf8-sübjëct \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^fake edit" msgtxt1 &&
	grep "^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=
Date: Wed, 28 Dec 2022 08:07:50 +0000
Message-Id: <20221228080751.24755-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:51 +0000
Message-Id: <20221228080751.24755-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080751.24755-1-nobody@example.com>
References: <20221228080751.24755-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
fake edit
Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=
ok 90 - --compose adds MIME for utf8 subject

expecting success of 9001.91 'utf8 author is correctly passed on': 
	clean_fake_sendmail &&
	test_commit weird_author &&
	test_when_finished "git reset --hard HEAD^" &&
	git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
	git format-patch --stdout -1 >funny_name.patch &&
	git send-email --from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		funny_name.patch &&
	grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1

[main 1eb2fea] weird_author
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 weird_author.t
[main 1d0a257] weird_author
 Author: Füñný Nâmé <odd_?=mail@example.com>
 Date: Thu Apr 7 15:19:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 weird_author.t
funny_name.patch
(mbox) Adding cc: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com> from line 'From: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com odd_?=mail@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>
Subject: [PATCH] weird_author
Date: Wed, 28 Dec 2022 08:07:52 +0000
Message-Id: <20221228080752.24807-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Result: OK
From: Füñný Nâmé <odd_?=mail@example.com>
HEAD is now at 60cacbf Second.
ok 91 - utf8 author is correctly passed on

expecting success of 9001.92 'utf8 sender is not duplicated': 
	clean_fake_sendmail &&
	test_commit weird_sender &&
	test_when_finished "git reset --hard HEAD^" &&
	git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
	git format-patch --stdout -1 >funny_name.patch &&
	git send-email --from="Füñný Nâmé <odd_?=mail@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		funny_name.patch &&
	grep "^From: " msgtxt1 >msgfrom &&
	test_line_count = 1 msgfrom

[main f5250c3] weird_sender
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 weird_sender.t
[main e2aeb6c] weird_sender
 Author: Füñný Nâmé <odd_?=mail@example.com>
 Date: Thu Apr 7 15:20:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 weird_sender.t
funny_name.patch
(mbox) Adding cc: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com> from line 'From: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com odd_?=mail@example.com
From: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>
To: nobody@example.com
Cc: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?= <odd_?=mail@example.com>
Subject: [PATCH] weird_sender
Date: Wed, 28 Dec 2022 08:07:53 +0000
Message-Id: <20221228080753.24858-1-odd_?=mail@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
HEAD is now at 60cacbf Second.
ok 92 - utf8 sender is not duplicated

expecting success of 9001.93 'sendemail.composeencoding works': 
	clean_fake_sendmail &&
	git config sendemail.composeencoding iso-8859-1 &&
	write_script fake-editor-utf8 <<-\EOF &&
	echo "utf8 body: àéìöú" >>"$1"
	EOF
	GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
	git send-email \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:54 +0000
Message-Id: <20221228080755.25018-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:55 +0000
Message-Id: <20221228080755.25018-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080755.25018-1-nobody@example.com>
References: <20221228080755.25018-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
utf8 body: àéìöú
Content-Type: text/plain; charset=iso-8859-1
ok 93 - sendemail.composeencoding works

expecting success of 9001.94 '--compose-encoding works': 
	clean_fake_sendmail &&
	write_script fake-editor-utf8 <<-\EOF &&
	echo "utf8 body: àéìöú" >>"$1"
	EOF
	GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
	git send-email \
		--compose-encoding iso-8859-1 \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:55 +0000
Message-Id: <20221228080756.25080-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:56 +0000
Message-Id: <20221228080756.25080-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080756.25080-1-nobody@example.com>
References: <20221228080756.25080-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
utf8 body: àéìöú
Content-Type: text/plain; charset=iso-8859-1
ok 94 - --compose-encoding works

expecting success of 9001.95 '--compose-encoding overrides sendemail.composeencoding': 
	clean_fake_sendmail &&
	git config sendemail.composeencoding iso-8859-1 &&
	write_script fake-editor-utf8 <<-\EOF &&
	echo "utf8 body: àéìöú" >>"$1"
	EOF
	GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
	git send-email \
		--compose-encoding iso-8859-2 \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=iso-8859-2" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: foo
Date: Wed, 28 Dec 2022 08:07:56 +0000
Message-Id: <20221228080757.25138-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:57 +0000
Message-Id: <20221228080757.25138-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080757.25138-1-nobody@example.com>
References: <20221228080757.25138-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
utf8 body: àéìöú
Content-Type: text/plain; charset=iso-8859-2
ok 95 - --compose-encoding overrides sendemail.composeencoding

expecting success of 9001.96 '--compose-encoding adds correct MIME for subject': 
	clean_fake_sendmail &&
	GIT_EDITOR="\"$(pwd)/fake-editor\"" \
	git send-email \
		--compose-encoding iso-8859-2 \
		--compose --subject utf8-sübjëct \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches &&
	grep "^fake edit" msgtxt1 &&
	grep "^Subject: =?iso-8859-2?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1

0001-Second.patch
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Subject: =?iso-8859-2?q?utf8-s=C3=BCbj=C3=ABct?=
Date: Wed, 28 Dec 2022 08:07:57 +0000
Message-Id: <20221228080758.25213-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com one@example.com two@example.com committer@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A <author@example.com>,
	One <one@example.com>,
	two@example.com,
	C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: Wed, 28 Dec 2022 08:07:58 +0000
Message-Id: <20221228080758.25213-2-nobody@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <20221228080758.25213-1-nobody@example.com>
References: <20221228080758.25213-1-nobody@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
fake edit
Subject: =?iso-8859-2?q?utf8-s=C3=BCbj=C3=ABct?=
ok 96 - --compose-encoding adds correct MIME for subject

expecting success of 9001.97 'detects ambiguous reference/file conflict': 
	echo main >main &&
	git add main &&
	git commit -m"add main" &&
	test_must_fail git send-email --dry-run main 2>errors &&
	grep disambiguate errors

[main 4243c28] add main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main
to produce patches for.  Please disambiguate by...
ok 97 - detects ambiguous reference/file conflict

expecting success of 9001.98 'feed two files': 
	rm -fr outdir &&
	git format-patch -2 -o outdir &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		outdir/000?-*.patch 2>errors >out &&
	grep "^Subject: " out >subjects &&
	test "z$(sed -n -e 1p subjects)" = "zSubject: [PATCH 1/2] Second." &&
	test "z$(sed -n -e 2p subjects)" = "zSubject: [PATCH 2/2] add main"

outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 98 - feed two files

expecting success of 9001.99 'in-reply-to but no threading': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--in-reply-to="<in-reply-id@example.com>" \
		--no-thread \
		$patches >out &&
	grep "In-Reply-To: <in-reply-id@example.com>" out

In-Reply-To: <in-reply-id@example.com>
ok 99 - in-reply-to but no threading

expecting success of 9001.100 'no in-reply-to and no threading': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--no-thread \
		$patches >stdout &&
	! grep "In-Reply-To: " stdout

ok 100 - no in-reply-to and no threading

expecting success of 9001.101 'threading but no chain-reply-to': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--thread \
		--no-chain-reply-to \
		$patches $patches >stdout &&
	grep "In-Reply-To: " stdout

In-Reply-To: <20221228080805.25462-1-nobody@example.com>
ok 101 - threading but no chain-reply-to

expecting success of 9001.102 'override in-reply-to if no threading': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--no-thread \
		--in-reply-to="override" \
		$threaded_patches >stdout &&
	grep "In-Reply-To: <override>" stdout

In-Reply-To: <override>
ok 102 - override in-reply-to if no threading

expecting success of 9001.103 'sendemail.to works': 
	git config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		$patches >stdout &&
	grep "To: Somebody <somebody@ex.com>" stdout

To: Somebody <somebody@ex.com>
ok 103 - sendemail.to works

expecting success of 9001.104 'setup sendemail.identity': 
	git config --replace-all sendemail.to "default@example.com" &&
	git config --replace-all sendemail.isp.to "isp@example.com" &&
	git config --replace-all sendemail.cloud.to "cloud@example.com"

ok 104 - setup sendemail.identity

expecting success of 9001.105 'sendemail.identity: reads the correct identity config': 
	git -c sendemail.identity=cloud send-email \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: cloud@example.com" stdout

To: cloud@example.com
ok 105 - sendemail.identity: reads the correct identity config

expecting success of 9001.106 'sendemail.identity: identity overrides sendemail.identity': 
	git -c sendemail.identity=cloud send-email \
		--identity=isp \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: isp@example.com" stdout

To: isp@example.com
ok 106 - sendemail.identity: identity overrides sendemail.identity

expecting success of 9001.107 'sendemail.identity: --no-identity clears previous identity': 
	git -c sendemail.identity=cloud send-email \
		--no-identity \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: default@example.com" stdout

To: default@example.com
ok 107 - sendemail.identity: --no-identity clears previous identity

expecting success of 9001.108 'sendemail.identity: bool identity variable existence overrides': 
	git -c sendemail.identity=cloud \
		-c sendemail.xmailer=true \
		-c sendemail.cloud.xmailer=false \
		send-email \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: cloud@example.com" stdout &&
	! grep "X-Mailer" stdout

To: cloud@example.com
ok 108 - sendemail.identity: bool identity variable existence overrides

expecting success of 9001.109 'sendemail.identity: bool variable fallback': 
	git -c sendemail.identity=cloud \
		-c sendemail.xmailer=false \
		send-email \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: cloud@example.com" stdout &&
	! grep "X-Mailer" stdout

To: cloud@example.com
ok 109 - sendemail.identity: bool variable fallback

expecting success of 9001.110 'sendemail.identity: bool variable without a value': 
	git -c sendemail.xmailer \
		send-email \
		--dry-run \
		--from="nobody@example.com" \
		$patches >stdout &&
	grep "To: default@example.com" stdout &&
	grep "X-Mailer" stdout

To: default@example.com
X-Mailer: git-send-email 2.39.0
ok 110 - sendemail.identity: bool variable without a value

expecting success of 9001.111 '--no-to overrides sendemail.to': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--no-to \
		--to=nobody@example.com \
		$patches >stdout &&
	grep "To: nobody@example.com" stdout &&
	! grep "To: Somebody <somebody@ex.com>" stdout

To: nobody@example.com
ok 111 - --no-to overrides sendemail.to

expecting success of 9001.112 'sendemail.cc works': 
	git config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		$patches >stdout &&
	grep "Cc: Somebody <somebody@ex.com>" stdout

Cc: Somebody <somebody@ex.com>,
ok 112 - sendemail.cc works

expecting success of 9001.113 '--no-cc overrides sendemail.cc': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--no-cc \
		--cc=bodies@example.com \
		--to=nobody@example.com \
		$patches >stdout &&
	grep "Cc: bodies@example.com" stdout &&
	! grep "Cc: Somebody <somebody@ex.com>" stdout

Cc: bodies@example.com,
ok 113 - --no-cc overrides sendemail.cc

expecting success of 9001.114 'sendemail.bcc works': 
	git config --replace-all sendemail.bcc "Other <other@ex.com>" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server relay.example.com \
		$patches >stdout &&
	grep "RCPT TO:<other@ex.com>" stdout

RCPT TO:<other@ex.com>
ok 114 - sendemail.bcc works

expecting success of 9001.115 '--no-bcc overrides sendemail.bcc': 
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--no-bcc \
		--bcc=bodies@example.com \
		--to=nobody@example.com \
		--smtp-server relay.example.com \
		$patches >stdout &&
	grep "RCPT TO:<bodies@example.com>" stdout &&
	! grep "RCPT TO:<other@ex.com>" stdout

RCPT TO:<bodies@example.com>
ok 115 - --no-bcc overrides sendemail.bcc

expecting success of 9001.116 'patches To headers are used by default': 
	patch=$(git format-patch -1 --to="bodies@example.com") &&
	test_when_finished "rm $patch" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--smtp-server relay.example.com \
		$patch >stdout &&
	grep "RCPT TO:<bodies@example.com>" stdout

RCPT TO:<bodies@example.com>
ok 116 - patches To headers are used by default

expecting success of 9001.117 'patches To headers are appended to': 
	patch=$(git format-patch -1 --to="bodies@example.com") &&
	test_when_finished "rm $patch" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server relay.example.com \
		$patch >stdout &&
	grep "RCPT TO:<bodies@example.com>" stdout &&
	grep "RCPT TO:<nobody@example.com>" stdout

RCPT TO:<bodies@example.com>
RCPT TO:<nobody@example.com>
ok 117 - patches To headers are appended to

expecting success of 9001.118 'To headers from files reset each patch': 
	patch1=$(git format-patch -1 --to="bodies@example.com") &&
	patch2=$(git format-patch -1 --to="other@example.com" HEAD~) &&
	test_when_finished "rm $patch1 && rm $patch2" &&
	git send-email \
		--dry-run \
		--from="Example <nobody@example.com>" \
		--to="nobody@example.com" \
		--smtp-server relay.example.com \
		$patch1 $patch2 >stdout &&
	test $(grep -c "RCPT TO:<bodies@example.com>" stdout) = 1 &&
	test $(grep -c "RCPT TO:<nobody@example.com>" stdout) = 2 &&
	test $(grep -c "RCPT TO:<other@example.com>" stdout) = 1

ok 118 - To headers from files reset each patch

expecting success of 9001.119 'setup expect': 
cat >email-using-8bit <<\EOF
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
Message-Id: <bogus-message-id@example.com>
From: author@example.com
Date: Sat, 12 Jun 2010 15:53:58 +0200
Subject: subject goes here

Dieser deutsche Text enthält einen Umlaut!
EOF

ok 119 - setup expect

expecting success of 9001.120 'setup expect': 
	echo "Subject: subject goes here" >expected

ok 120 - setup expect

expecting success of 9001.121 'ASCII subject is not RFC2047 quoted': 
	clean_fake_sendmail &&
	echo bogus |
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--8bit-encoding=UTF-8 \
			email-using-8bit >stdout &&
	grep "Subject" msgtxt1 >actual &&
	test_cmp expected actual

ok 121 - ASCII subject is not RFC2047 quoted

expecting success of 9001.122 'setup expect': 
	cat >content-type-decl <<-\EOF
	MIME-Version: 1.0
	Content-Type: text/plain; charset=UTF-8
	Content-Transfer-Encoding: 8bit
	EOF

ok 122 - setup expect

expecting success of 9001.123 'asks about and fixes 8bit encodings': 
	clean_fake_sendmail &&
	echo |
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			email-using-8bit >stdout &&
	grep "do not declare a Content-Transfer-Encoding" stdout &&
	grep email-using-8bit stdout &&
	grep "Which 8bit encoding" stdout &&
	grep -E "Content|MIME" msgtxt1 >actual &&
	test_cmp content-type-decl actual

The following files are 8bit, but do not declare a Content-Transfer-Encoding.
email-using-8bit
    email-using-8bit
Which 8bit encoding should I declare [UTF-8]? (mbox) Adding cc: author@example.com from line 'From: author@example.com'
ok 123 - asks about and fixes 8bit encodings

expecting success of 9001.124 'sendemail.8bitEncoding works': 
	clean_fake_sendmail &&
	git config sendemail.assume8bitEncoding UTF-8 &&
	echo bogus |
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			email-using-8bit >stdout &&
	grep -E "Content|MIME" msgtxt1 >actual &&
	test_cmp content-type-decl actual

ok 124 - sendemail.8bitEncoding works

expecting success of 9001.125 'sendemail.8bitEncoding in .git/config overrides --global .gitconfig': 
	clean_fake_sendmail &&
	git config sendemail.assume8bitEncoding UTF-8 &&
	test_when_finished "rm -rf home" &&
	mkdir home &&
	git config -f home/.gitconfig sendemail.assume8bitEncoding "bogus too" &&
	echo bogus |
	env HOME="$(pwd)/home" DEBUG=1 \
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			email-using-8bit >stdout &&
	grep -E "Content|MIME" msgtxt1 >actual &&
	test_cmp content-type-decl actual

ok 125 - sendemail.8bitEncoding in .git/config overrides --global .gitconfig

expecting success of 9001.126 '--8bit-encoding overrides sendemail.8bitEncoding': 
	clean_fake_sendmail &&
	git config sendemail.assume8bitEncoding "bogus too" &&
	echo bogus |
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--8bit-encoding=UTF-8 \
			email-using-8bit >stdout &&
	grep -E "Content|MIME" msgtxt1 >actual &&
	test_cmp content-type-decl actual

ok 126 - --8bit-encoding overrides sendemail.8bitEncoding

expecting success of 9001.127 'setup expect': 
	cat >email-using-8bit <<-\EOF
	From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
	Message-Id: <bogus-message-id@example.com>
	From: author@example.com
	Date: Sat, 12 Jun 2010 15:53:58 +0200
	Subject: Dieser Betreff enthält auch einen Umlaut!

	Nothing to see here.
	EOF

ok 127 - setup expect

expecting success of 9001.128 'setup expect': 
	cat >expected <<-\EOF
	Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=
	EOF

ok 128 - setup expect

expecting success of 9001.129 '--8bit-encoding also treats subject': 
	clean_fake_sendmail &&
	echo bogus |
	git send-email --from=author@example.com --to=nobody@example.com \
			--smtp-server="$(pwd)/fake.sendmail" \
			--8bit-encoding=UTF-8 \
			email-using-8bit >stdout &&
	grep "Subject" msgtxt1 >actual &&
	test_cmp expected actual

ok 129 - --8bit-encoding also treats subject

expecting success of 9001.130 'setup expect': 
	cat >email-using-8bit <<-\EOF
	From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
	Message-Id: <bogus-message-id@example.com>
	From: A U Thor <author@example.com>
	Date: Sat, 12 Jun 2010 15:53:58 +0200
	Content-Type: text/plain; charset=UTF-8
	Subject: Nothing to see here.

	Dieser Betreff enthält auch einen Umlaut!
	EOF

ok 130 - setup expect

expecting success of 9001.131 '--transfer-encoding overrides sendemail.transferEncoding': 
	clean_fake_sendmail &&
	test_must_fail git -c sendemail.transferEncoding=8bit \
		send-email \
		--transfer-encoding=7bit \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-8bit \
		2>errors >out &&
	grep "cannot send message as 7bit" errors &&
	test -z "$(ls msgtxt*)"

cannot send message as 7bit at /<<PKGBUILDDIR>>/git-send-email line 2052.
ls: cannot access 'msgtxt*': No such file or directory
ok 131 - --transfer-encoding overrides sendemail.transferEncoding

expecting success of 9001.132 'sendemail.transferEncoding via config': 
	clean_fake_sendmail &&
	test_must_fail git -c sendemail.transferEncoding=7bit \
		send-email \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-8bit \
		2>errors >out &&
	grep "cannot send message as 7bit" errors &&
	test -z "$(ls msgtxt*)"

cannot send message as 7bit at /<<PKGBUILDDIR>>/git-send-email line 2052.
ls: cannot access 'msgtxt*': No such file or directory
ok 132 - sendemail.transferEncoding via config

expecting success of 9001.133 'sendemail.transferEncoding via cli': 
	clean_fake_sendmail &&
	test_must_fail git send-email \
		--transfer-encoding=7bit \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-8bit \
		2>errors >out &&
	grep "cannot send message as 7bit" errors &&
	test -z "$(ls msgtxt*)"

cannot send message as 7bit at /<<PKGBUILDDIR>>/git-send-email line 2052.
ls: cannot access 'msgtxt*': No such file or directory
ok 133 - sendemail.transferEncoding via cli

expecting success of 9001.134 'setup expect': 
	cat >expected <<-\EOF
	Dieser Betreff enth=C3=A4lt auch einen Umlaut!
	EOF

ok 134 - setup expect

expecting success of 9001.135 '8-bit and sendemail.transferencoding=quoted-printable': 
	clean_fake_sendmail &&
	git send-email \
		--transfer-encoding=quoted-printable \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-8bit \
		2>errors >out &&
	sed "1,/^$/d" msgtxt1 >actual &&
	test_cmp expected actual

ok 135 - 8-bit and sendemail.transferencoding=quoted-printable

expecting success of 9001.136 'setup expect': 
	cat >expected <<-\EOF
	RGllc2VyIEJldHJlZmYgZW50aMOkbHQgYXVjaCBlaW5lbiBVbWxhdXQhCg==
	EOF

ok 136 - setup expect

expecting success of 9001.137 '8-bit and sendemail.transferencoding=base64': 
	clean_fake_sendmail &&
	git send-email \
		--transfer-encoding=base64 \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-8bit \
		2>errors >out &&
	sed "1,/^$/d" msgtxt1 >actual &&
	test_cmp expected actual

ok 137 - 8-bit and sendemail.transferencoding=base64

expecting success of 9001.138 'setup expect': 
	cat >email-using-qp <<-\EOF
	From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
	Message-Id: <bogus-message-id@example.com>
	From: A U Thor <author@example.com>
	Date: Sat, 12 Jun 2010 15:53:58 +0200
	MIME-Version: 1.0
	Content-Transfer-Encoding: quoted-printable
	Content-Type: text/plain; charset=UTF-8
	Subject: Nothing to see here.

	Dieser Betreff enth=C3=A4lt auch einen Umlaut!
	EOF

ok 138 - setup expect

expecting success of 9001.139 'convert from quoted-printable to base64': 
	clean_fake_sendmail &&
	git send-email \
		--transfer-encoding=base64 \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-qp \
		2>errors >out &&
	sed "1,/^$/d" msgtxt1 >actual &&
	test_cmp expected actual

ok 139 - convert from quoted-printable to base64

expecting success of 9001.140 'setup expect': 
tr -d '\015' | tr '%' '\015' >email-using-crlf <<EOF
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
Message-Id: <bogus-message-id@example.com>
From: A U Thor <author@example.com>
Date: Sat, 12 Jun 2010 15:53:58 +0200
Content-Type: text/plain; charset=UTF-8
Subject: Nothing to see here.

Look, I have a CRLF and an = sign!%
EOF

ok 140 - setup expect

expecting success of 9001.141 'setup expect': 
	cat >expected <<-\EOF
	Look, I have a CRLF and an =3D sign!=0D
	EOF

ok 141 - setup expect

expecting success of 9001.142 'CRLF and sendemail.transferencoding=quoted-printable': 
	clean_fake_sendmail &&
	git send-email \
		--transfer-encoding=quoted-printable \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-crlf \
		2>errors >out &&
	sed "1,/^$/d" msgtxt1 >actual &&
	test_cmp expected actual

ok 142 - CRLF and sendemail.transferencoding=quoted-printable

expecting success of 9001.143 'setup expect': 
	cat >expected <<-\EOF
	TG9vaywgSSBoYXZlIGEgQ1JMRiBhbmQgYW4gPSBzaWduIQ0K
	EOF

ok 143 - setup expect

expecting success of 9001.144 'CRLF and sendemail.transferencoding=base64': 
	clean_fake_sendmail &&
	git send-email \
		--transfer-encoding=base64 \
		--smtp-server="$(pwd)/fake.sendmail" \
		email-using-crlf \
		2>errors >out &&
	sed "1,/^$/d" msgtxt1 >actual &&
	test_cmp expected actual

ok 144 - CRLF and sendemail.transferencoding=base64

expecting success of 9001.145 'refusing to send cover letter template': 
	clean_fake_sendmail &&
	rm -fr outdir &&
	git format-patch --cover-letter -2 -o outdir &&
	test_must_fail git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		outdir/0002-*.patch \
		outdir/0000-*.patch \
		outdir/0001-*.patch \
		2>errors >out &&
	grep "SUBJECT HERE" errors &&
	test -z "$(ls msgtxt*)"

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
has the template subject '*** SUBJECT HERE ***'. Pass --force if you really want to send.
ls: cannot access 'msgtxt*': No such file or directory
ok 145 - refusing to send cover letter template

expecting success of 9001.146 '--force sends cover letter template anyway': 
	clean_fake_sendmail &&
	rm -fr outdir &&
	git format-patch --cover-letter -2 -o outdir &&
	git send-email \
		--force \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		outdir/0002-*.patch \
		outdir/0000-*.patch \
		outdir/0001-*.patch \
		2>errors >out &&
	! grep "SUBJECT HERE" errors &&
	test -n "$(ls msgtxt*)"

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 146 - --force sends cover letter template anyway

expecting success of 9001.147 'to-cover adds To to all mail': 
	test_cover_addresses "To" --to-cover

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 147 - to-cover adds To to all mail

expecting success of 9001.148 'cc-cover adds Cc to all mail': 
	test_cover_addresses "Cc" --cc-cover

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 148 - cc-cover adds Cc to all mail

expecting success of 9001.149 'tocover adds To to all mail': 
	test_config sendemail.tocover true &&
	test_cover_addresses "To"

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 149 - tocover adds To to all mail

expecting success of 9001.150 'cccover adds Cc to all mail': 
	test_config sendemail.cccover true &&
	test_cover_addresses "Cc"

outdir/0000-cover-letter.patch
outdir/0001-Second.patch
outdir/0002-add-main.patch
ok 150 - cccover adds Cc to all mail

expecting success of 9001.151 'escaped quotes in sendemail.aliasfiletype=mutt': 
	clean_fake_sendmail &&
	echo "alias sbd \\\"Dot U. Sir\\\" <somebody@example.org>" >.mutt &&
	git config --replace-all sendemail.aliasesfile "$(pwd)/.mutt" &&
	git config sendemail.aliasfiletype mutt &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=sbd \
		--smtp-server="$(pwd)/fake.sendmail" \
		outdir/0001-*.patch \
		2>errors >out &&
	grep "^!somebody@example\.org!$" commandline1 &&
	grep -F "To: \"Dot U. Sir\" <somebody@example.org>" out

!somebody@example.org!
To: "Dot U. Sir" <somebody@example.org>
ok 151 - escaped quotes in sendemail.aliasfiletype=mutt

expecting success of 9001.152 'sendemail.aliasfiletype=mailrc': 
	clean_fake_sendmail &&
	echo "alias sbd  somebody@example.org" >.mailrc &&
	git config --replace-all sendemail.aliasesfile "$(pwd)/.mailrc" &&
	git config sendemail.aliasfiletype mailrc &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=sbd \
		--smtp-server="$(pwd)/fake.sendmail" \
		outdir/0001-*.patch \
		2>errors >out &&
	grep "^!somebody@example\.org!$" commandline1

!somebody@example.org!
ok 152 - sendemail.aliasfiletype=mailrc

expecting success of 9001.153 'sendemail.aliasesfile=~/.mailrc': 
	clean_fake_sendmail &&
	echo "alias sbd  someone@example.org" >"$HOME/.mailrc" &&
	git config --replace-all sendemail.aliasesfile "~/.mailrc" &&
	git config sendemail.aliasfiletype mailrc &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=sbd \
		--smtp-server="$(pwd)/fake.sendmail" \
		outdir/0001-*.patch \
		2>errors >out &&
	grep "^!someone@example\.org!$" commandline1

!someone@example.org!
ok 153 - sendemail.aliasesfile=~/.mailrc

expecting success of 9001.154 '--dump-aliases sendmail format': 
		clean_fake_sendmail && rm -fr outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype "$filetype" &&
		git send-email --dump-aliases 2>errors >actual &&
		test_cmp expect actual
	
ok 154 - --dump-aliases sendmail format

expecting success of 9001.155 '--dump-aliases mutt format': 
		clean_fake_sendmail && rm -fr outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype "$filetype" &&
		git send-email --dump-aliases 2>errors >actual &&
		test_cmp expect actual
	
ok 155 - --dump-aliases mutt format

expecting success of 9001.156 '--dump-aliases mailrc format': 
		clean_fake_sendmail && rm -fr outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype "$filetype" &&
		git send-email --dump-aliases 2>errors >actual &&
		test_cmp expect actual
	
ok 156 - --dump-aliases mailrc format

expecting success of 9001.157 '--dump-aliases pine format': 
		clean_fake_sendmail && rm -fr outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype "$filetype" &&
		git send-email --dump-aliases 2>errors >actual &&
		test_cmp expect actual
	
ok 157 - --dump-aliases pine format

expecting success of 9001.158 '--dump-aliases gnus format': 
		clean_fake_sendmail && rm -fr outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype "$filetype" &&
		git send-email --dump-aliases 2>errors >actual &&
		test_cmp expect actual
	
ok 158 - --dump-aliases gnus format

expecting success of 9001.159 '--dump-aliases must be used alone': 
	test_must_fail git send-email --dump-aliases --to=janice@example.com -1 refs/heads/accounting

--dump-aliases incompatible with other options
ok 159 - --dump-aliases must be used alone

expecting success of 9001.160 'aliases and sendemail.identity': 
	test_must_fail git \
		-c sendemail.identity=cloud \
		-c sendemail.aliasesfile=default-aliases \
		-c sendemail.cloud.aliasesfile=cloud-aliases \
		send-email -1 2>stderr &&
	test_i18ngrep "cloud-aliases" stderr

opening cloud-aliases: No such file or directory
ok 160 - aliases and sendemail.identity

expecting success of 9001.161 'sendemail.aliasfiletype=sendmail': 
		clean_fake_sendmail && rm -fr outdir &&
		git format-patch -1 -o outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=alice --to=bcgrp \
			--smtp-server="$(pwd)/fake.sendmail" \
			outdir/0001-*.patch \
			2>errors >out &&
		for i in $expect
		do
			grep "^!$i!$" commandline1 || return 1
		done
	
outdir/0001-add-main.patch
!awol@example.com!
!bob@example.com!
!chloe@example.com!
!o@example.com!
ok 161 - sendemail.aliasfiletype=sendmail

expecting success of 9001.162 'sendmail aliases line folding': 
		clean_fake_sendmail && rm -fr outdir &&
		git format-patch -1 -o outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=alice --to=bcgrp \
			--smtp-server="$(pwd)/fake.sendmail" \
			outdir/0001-*.patch \
			2>errors >out &&
		for i in $expect
		do
			grep "^!$i!$" commandline1 || return 1
		done
	
outdir/0001-add-main.patch
!alice1!
!bob1!
!bob2!
!chuck1!
!chuck2!
!darla1!
!darla2!
!darla3!
!elton1!
!elton2!
!elton3!
!fred1!
!fred2!
!greg1!
ok 162 - sendmail aliases line folding

expecting success of 9001.163 'sendmail aliases tolerate bogus line folding': 
		clean_fake_sendmail && rm -fr outdir &&
		git format-patch -1 -o outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=alice --to=bcgrp \
			--smtp-server="$(pwd)/fake.sendmail" \
			outdir/0001-*.patch \
			2>errors >out &&
		for i in $expect
		do
			grep "^!$i!$" commandline1 || return 1
		done
	
outdir/0001-add-main.patch
!alice1!
!bob1!
ok 163 - sendmail aliases tolerate bogus line folding

expecting success of 9001.164 'sendmail aliases empty': 
		clean_fake_sendmail && rm -fr outdir &&
		git format-patch -1 -o outdir &&
		git config --replace-all sendemail.aliasesfile \
			"$(pwd)/.tmp-email-aliases" &&
		git config sendemail.aliasfiletype sendmail &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=alice --to=bcgrp \
			--smtp-server="$(pwd)/fake.sendmail" \
			outdir/0001-*.patch \
			2>errors >out &&
		for i in $expect
		do
			grep "^!$i!$" commandline1 || return 1
		done
	
outdir/0001-add-main.patch
!alice!
!bcgrp!
ok 164 - sendmail aliases empty

expecting success of 9001.165 'alias support in To header': 
	clean_fake_sendmail &&
	echo "alias sbd  someone@example.org" >.mailrc &&
	test_config sendemail.aliasesfile ".mailrc" &&
	test_config sendemail.aliasfiletype mailrc &&
	git format-patch --stdout -1 --to=sbd >aliased.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--smtp-server="$(pwd)/fake.sendmail" \
		aliased.patch \
		2>errors >out &&
	grep "^!someone@example\.org!$" commandline1

!someone@example.org!
ok 165 - alias support in To header

expecting success of 9001.166 'alias support in Cc header': 
	clean_fake_sendmail &&
	echo "alias sbd  someone@example.org" >.mailrc &&
	test_config sendemail.aliasesfile ".mailrc" &&
	test_config sendemail.aliasfiletype mailrc &&
	git format-patch --stdout -1 --cc=sbd >aliased.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--smtp-server="$(pwd)/fake.sendmail" \
		aliased.patch \
		2>errors >out &&
	grep "^!someone@example\.org!$" commandline1

!someone@example.org!
ok 166 - alias support in Cc header

expecting success of 9001.167 'tocmd works with aliases': 
	clean_fake_sendmail &&
	echo "alias sbd  someone@example.org" >.mailrc &&
	test_config sendemail.aliasesfile ".mailrc" &&
	test_config sendemail.aliasfiletype mailrc &&
	git format-patch --stdout -1 >tocmd.patch &&
	echo tocmd--sbd >>tocmd.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to-cmd=./tocmd-sed \
		--smtp-server="$(pwd)/fake.sendmail" \
		tocmd.patch \
		2>errors >out &&
	grep "^!someone@example\.org!$" commandline1

!someone@example.org!
ok 167 - tocmd works with aliases

expecting success of 9001.168 'cccmd works with aliases': 
	clean_fake_sendmail &&
	echo "alias sbd  someone@example.org" >.mailrc &&
	test_config sendemail.aliasesfile ".mailrc" &&
	test_config sendemail.aliasfiletype mailrc &&
	git format-patch --stdout -1 >cccmd.patch &&
	echo cccmd--sbd >>cccmd.patch &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--cc-cmd=./cccmd-sed \
		--smtp-server="$(pwd)/fake.sendmail" \
		cccmd.patch \
		2>errors >out &&
	grep "^!someone@example\.org!$" commandline1

!someone@example.org!
ok 168 - cccmd works with aliases

expecting success of 9001.169 '--[no-]xmailer without any configuration': 
	do_xmailer_test 1 "--xmailer" &&
	do_xmailer_test 0 "--no-xmailer"

0001-add-main.patch
0001-add-main.patch
ok 169 - --[no-]xmailer without any configuration

expecting success of 9001.170 '--[no-]xmailer with sendemail.xmailer=true': 
	test_config sendemail.xmailer true &&
	do_xmailer_test 1 "" &&
	do_xmailer_test 0 "--no-xmailer" &&
	do_xmailer_test 1 "--xmailer"

0001-add-main.patch
0001-add-main.patch
0001-add-main.patch
ok 170 - --[no-]xmailer with sendemail.xmailer=true

expecting success of 9001.171 '--[no-]xmailer with sendemail.xmailer': 
	test_when_finished "test_unconfig sendemail.xmailer" &&
	cat >>.git/config <<-\EOF &&
	[sendemail]
		xmailer
	EOF
	test_config sendemail.xmailer true &&
	do_xmailer_test 1 "" &&
	do_xmailer_test 0 "--no-xmailer" &&
	do_xmailer_test 1 "--xmailer"

0001-add-main.patch
0001-add-main.patch
0001-add-main.patch
ok 171 - --[no-]xmailer with sendemail.xmailer

expecting success of 9001.172 '--[no-]xmailer with sendemail.xmailer=false': 
	test_config sendemail.xmailer false &&
	do_xmailer_test 0 "" &&
	do_xmailer_test 0 "--no-xmailer" &&
	do_xmailer_test 1 "--xmailer"

0001-add-main.patch
0001-add-main.patch
0001-add-main.patch
ok 172 - --[no-]xmailer with sendemail.xmailer=false

expecting success of 9001.173 '--[no-]xmailer with sendemail.xmailer=': 
	test_config sendemail.xmailer "" &&
	do_xmailer_test 0 "" &&
	do_xmailer_test 0 "--no-xmailer" &&
	do_xmailer_test 1 "--xmailer"

0001-add-main.patch
0001-add-main.patch
0001-add-main.patch
ok 173 - --[no-]xmailer with sendemail.xmailer=

expecting success of 9001.174 'setup expected-list': 
	git send-email \
	--dry-run \
	--from="Example <from@example.com>" \
	--to="To 1 <to1@example.com>" \
	--to="to2@example.com" \
	--to="to3@example.com" \
	--cc="Cc 1 <cc1@example.com>" \
	--cc="Cc2 <cc2@example.com>" \
	--bcc="bcc1@example.com" \
	--bcc="bcc2@example.com" \
	0001-add-main.patch | replace_variable_fields \
	>expected-list

ok 174 - setup expected-list

expecting success of 9001.175 'use email list in --cc --to and --bcc': 
	git send-email \
	--dry-run \
	--from="Example <from@example.com>" \
	--to="To 1 <to1@example.com>, to2@example.com" \
	--to="to3@example.com" \
	--cc="Cc 1 <cc1@example.com>, Cc2 <cc2@example.com>" \
	--bcc="bcc1@example.com, bcc2@example.com" \
	0001-add-main.patch | replace_variable_fields \
	>actual-list &&
	test_cmp expected-list actual-list

ok 175 - use email list in --cc --to and --bcc

expecting success of 9001.176 'aliases work with email list': 
	echo "alias to2 to2@example.com" >.mutt &&
	echo "alias cc1 Cc 1 <cc1@example.com>" >>.mutt &&
	test_config sendemail.aliasesfile ".mutt" &&
	test_config sendemail.aliasfiletype mutt &&
	git send-email \
	--dry-run \
	--from="Example <from@example.com>" \
	--to="To 1 <to1@example.com>, to2, to3@example.com" \
	--cc="cc1, Cc2 <cc2@example.com>" \
	--bcc="bcc1@example.com, bcc2@example.com" \
	0001-add-main.patch | replace_variable_fields \
	>actual-list &&
	test_cmp expected-list actual-list

ok 176 - aliases work with email list

expecting success of 9001.177 'leading and trailing whitespaces are removed': 
	echo "alias to2 to2@example.com" >.mutt &&
	echo "alias cc1 Cc 1 <cc1@example.com>" >>.mutt &&
	test_config sendemail.aliasesfile ".mutt" &&
	test_config sendemail.aliasfiletype mutt &&
	TO1=$(echo "QTo 1 <to1@example.com>" | q_to_tab) &&
	TO2=$(echo "QZto2" | qz_to_tab_space) &&
	CC1=$(echo "cc1" | append_cr) &&
	BCC1=$(echo " bcc1@example.com Q" | q_to_nul) &&
	git send-email \
	--dry-run \
	--from="	Example <from@example.com>" \
	--to="$TO1" \
	--to="$TO2" \
	--to="  to3@example.com   " \
	--cc="$CC1" \
	--cc="Cc2 <cc2@example.com>" \
	--bcc="$BCC1" \
	--bcc="bcc2@example.com" \
	0001-add-main.patch | replace_variable_fields \
	>actual-list &&
	test_cmp expected-list actual-list

ok 177 - leading and trailing whitespaces are removed

expecting success of 9001.178 'test using command name with --sendmail-cmd': 
	clean_fake_sendmail &&
	PATH="$PWD:$PATH" \
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--sendmail-cmd="fake.sendmail" \
		HEAD^ &&
	test_path_is_file commandline1

/tmp/znT5GOzYOT/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:28 +0000
Message-Id: <20221228080928.30488-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 178 - test using command name with --sendmail-cmd

expecting success of 9001.179 'test using arguments with --sendmail-cmd': 
	clean_fake_sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--sendmail-cmd='"$(pwd)/fake.sendmail" -f nobody@example.com' \
		HEAD^ &&
	test_path_is_file commandline1

/tmp/gdwKg1YbI5/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: "$(pwd)/fake.sendmail" -f nobody@example.com -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:29 +0000
Message-Id: <20221228080929.30610-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 179 - test using arguments with --sendmail-cmd

expecting success of 9001.180 'test shell expression with --sendmail-cmd': 
	clean_fake_sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--sendmail-cmd='f() { "$(pwd)/fake.sendmail" "$@"; };f' \
		HEAD^ &&
	test_path_is_file commandline1

/tmp/dMybtORyfc/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: f() { "$(pwd)/fake.sendmail" "$@"; };f -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:30 +0000
Message-Id: <20221228080930.30649-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 180 - test shell expression with --sendmail-cmd

expecting success of 9001.181 'set up in-reply-to/references patches': 
	cat >has-reply.patch <<-\EOF &&
	From: A U Thor <author@example.com>
	Subject: patch with in-reply-to
	Message-ID: <patch.with.in.reply.to@example.com>
	In-Reply-To: <replied.to@example.com>
	References: <replied.to@example.com>

	This is the body.
	EOF
	cat >no-reply.patch <<-\EOF
	From: A U Thor <author@example.com>
	Subject: patch without in-reply-to
	Message-ID: <patch.without.in.reply.to@example.com>

	This is the body.
	EOF

ok 181 - set up in-reply-to/references patches

expecting success of 9001.182 'patch reply headers correct with --no-thread': 
	clean_fake_sendmail &&
	git send-email \
		--no-thread \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		has-reply.patch no-reply.patch &&
	grep "In-Reply-To: <replied.to@example.com>" msgtxt1 &&
	grep "References: <replied.to@example.com>" msgtxt1 &&
	! grep replied.to@example.com msgtxt2

has-reply.patch
no-reply.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: A U Thor <author@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: patch with in-reply-to
Date: Wed, 28 Dec 2022 08:09:31 +0000
Message-Id: <patch.with.in.reply.to@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <replied.to@example.com>
References: <replied.to@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: A U Thor <author@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: patch without in-reply-to
Date: Wed, 28 Dec 2022 08:09:32 +0000
Message-Id: <patch.without.in.reply.to@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
In-Reply-To: <replied.to@example.com>
References: <replied.to@example.com>
ok 182 - patch reply headers correct with --no-thread

expecting success of 9001.183 'cmdline in-reply-to used with --no-thread': 
	clean_fake_sendmail &&
	git send-email \
		--no-thread \
		--in-reply-to="<cmdline.reply@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		has-reply.patch no-reply.patch &&
	grep "In-Reply-To: <cmdline.reply@example.com>" msgtxt1 &&
	grep "References: <cmdline.reply@example.com>" msgtxt1 &&
	grep "In-Reply-To: <cmdline.reply@example.com>" msgtxt2 &&
	grep "References: <cmdline.reply@example.com>" msgtxt2

has-reply.patch
no-reply.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: A U Thor <author@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: patch with in-reply-to
Date: Wed, 28 Dec 2022 08:09:32 +0000
Message-Id: <patch.with.in.reply.to@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <cmdline.reply@example.com>
References: <cmdline.reply@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: A U Thor <author@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: patch without in-reply-to
Date: Wed, 28 Dec 2022 08:09:33 +0000
Message-Id: <patch.without.in.reply.to@example.com>
X-Mailer: git-send-email 2.39.0
In-Reply-To: <cmdline.reply@example.com>
References: <cmdline.reply@example.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
In-Reply-To: <cmdline.reply@example.com>
References: <cmdline.reply@example.com>
In-Reply-To: <cmdline.reply@example.com>
References: <cmdline.reply@example.com>
ok 183 - cmdline in-reply-to used with --no-thread

expecting success of 9001.184 'invoke hook': 
	test_hook sendemail-validate <<-\EOF &&
	# test that we have the correct environment variable, pwd, and
	# argument
	case "$GIT_DIR" in
	*.git)
		true
		;;
	*)
		false
		;;
	esac &&
	test -f 0001-add-main.patch &&
	grep "add main" "$1"
	EOF

	mkdir subdir &&
	(
		# Test that it works even if we are not at the root of the
		# working tree
		cd subdir &&
		git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/../fake.sendmail" \
			../0001-add-main.patch &&

		# Verify error message when a patch is rejected by the hook
		sed -e "s/add main/x/" ../0001-add-main.patch >../another.patch &&
		test_must_fail git send-email \
			--from="Example <nobody@example.com>" \
			--to=nobody@example.com \
			--smtp-server="$(pwd)/../fake.sendmail" \
			../another.patch 2>err &&
		test_i18ngrep "rejected by sendemail-validate hook" err
	)

Subject: [PATCH] add main
../0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/subdir/../fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:34 +0000
Message-Id: <20221228080934.30842-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
fatal: ../another.patch: rejected by sendemail-validate hook
ok 184 - invoke hook

expecting success of 9001.185 'test that send-email works outside a repo': 
	nongit git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		"$(pwd)/0001-add-main.patch"

/<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'

From: Example <nobody@example.com>
To: nobody@example.com
Cc: A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:36 +0000
Message-Id: <20221228080936.30914-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

    The Cc list above has been expanded by additional
    addresses found in the patch commit message. By default
    send-email prompts before sending whenever this occurs.
    This behavior is controlled by the sendemail.confirm
    configuration setting.

    For additional information, run 'git send-email --help'.
    To retain the current behavior, but squelch this message,
    run 'git config --global sendemail.confirm auto'.

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): 
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com author@example.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:36 +0000
Message-Id: <20221228080936.30914-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 185 - test that send-email works outside a repo

expecting success of 9001.186 'test that sendmail config is rejected': 
	test_config sendmail.program sendmail &&
	test_must_fail git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		HEAD^ 2>err &&
	test_i18ngrep "found configuration options for 'sendmail'" err

fatal: found configuration options for 'sendmail'
ok 186 - test that sendmail config is rejected

expecting success of 9001.187 'test that sendmail config rejection is specific': 
	test_config resendmail.program sendmail &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		HEAD^

/tmp/xUpb26OEBp/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:39 +0000
Message-Id: <20221228080939.31144-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 187 - test that sendmail config rejection is specific

expecting success of 9001.188 'test forbidSendmailVariables behavior override': 
	test_config sendmail.program sendmail &&
	test_config sendemail.forbidSendmailVariables false &&
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		HEAD^

/tmp/yCUwOwtBq7/0001-add-main.patch
(mbox) Adding cc: A U Thor <author@example.com> from line 'From: A U Thor <author@example.com>'
OK. Log says:
Sendmail: /<<PKGBUILDDIR>>/t/trash directory.t9001-send-email/fake.sendmail -i nobody@example.com somebody@ex.com author@example.com other@ex.com
From: Example <nobody@example.com>
To: nobody@example.com
Cc: Somebody <somebody@ex.com>,
	A U Thor <author@example.com>
Subject: [PATCH] add main
Date: Wed, 28 Dec 2022 08:09:40 +0000
Message-Id: <20221228080940.31230-1-nobody@example.com>
X-Mailer: git-send-email 2.39.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Result: OK
ok 188 - test forbidSendmailVariables behavior override

# passed all 188 test(s)
1..188
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9100-git-svn-basic.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9100-git-svn-basic/.git/
expecting success of 9100.1 'git svn --version works anywhere': 
	nongit git svn --version

git-svn version 2.39.0 (svn 1.14.2)
ok 1 - git svn --version works anywhere

expecting success of 9100.2 'git svn help works anywhere': 
	nongit git svn help

git-svn - bidirectional operations between a single Subversion tree and git
usage: git svn <command> [options] [arguments]

Available commands:
  blame            Show what revision and author last modified each line of a file
                     --git-format 
  branch           Create a branch in the SVN repository
                     --commit-url <arg>
                     --destination, -d <arg>
                     --dry-run, -n 
                     --message, -m <arg>
                     --parents 
                     --tag, -t 
                     --username <arg>
  clone            Initialize and fetch revisions
                     --add-author-from 
                     --authors-file, -A <arg>
                     --authors-prog <arg>
                     --branches, --b=s@ 
                     --config-dir <arg>
                     --follow-parent, --follow! 
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --localtime 
                     --log-window-size <num>
                     --minimize-url, --m! 
                     --no-auth-cache 
                     --no-checkout 
                     --no-metadata 
                     --placeholder-filename <arg>
                     --prefix <arg>
                     --preserve-empty-dirs 
                     --quiet, --q+ 
                     --repack-flags, --repack-args, --repack-opts <arg>
                     --repack <num>
                     --revision, -r <arg>
                     --rewrite-root <arg>
                     --rewrite-uuid <arg>
                     --shared <arg>
                     --stdlayout, -s 
                     --tags, --t=s@ 
                     --template <arg>
                     --trunk, -T <arg>
                     --use-log-author 
                     --use-svm-props 
                     --use-svnsync-props 
                     --username <arg>
  commit-diff      Commit a diff between two trees
                     --copy-similarity, -C <num>
                     --edit, -e 
                     --file, -F <arg>
                     --find-copies-harder 
                     -l <num>
                     --message, -m <arg>
                     --revision, -r <arg>
                     --rmdir 
  create-ignore    Create a .gitignore per svn:ignore
                     --revision, -r <num>
  dcommit          Commit several diffs to merge with upstream
                     --add-author-from 
                     --authors-file, -A <arg>
                     --authors-prog <arg>
                     --commit-url <arg>
                     --config-dir <arg>
                     --copy-similarity, -C <num>
                     --dry-run, -n 
                     --edit, -e 
                     --fetch-all, --all 
                     --find-copies-harder 
                     --follow-parent, --follow! 
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --interactive, -i 
                     -l <num>
                     --localtime 
                     --log-window-size <num>
                     --mergeinfo <arg>
                     --merge, -m, -M 
                     --no-auth-cache 
                     --no-checkout 
                     --no-rebase 
                     --quiet, --q+ 
                     --repack-flags, --repack-args, --repack-opts <arg>
                     --repack <num>
                     --revision, -r <num>
                     --rmdir 
                     --set-svn-props <arg>
                     --strategy, -s <arg>
                     --use-log-author 
                     --username <arg>
                     --verbose, -v 
  fetch            Download new revisions from SVN
                     --add-author-from 
                     --authors-file, -A <arg>
                     --authors-prog <arg>
                     --config-dir <arg>
                     --fetch-all, --all 
                     --follow-parent, --follow! 
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --localtime 
                     --log-window-size <num>
                     --no-auth-cache 
                     --no-checkout 
                     --parent, -p 
                     --quiet, --q+ 
                     --repack-flags, --repack-args, --repack-opts <arg>
                     --repack <num>
                     --revision, -r <arg>
                     --use-log-author 
                     --username <arg>
  find-rev         Translate between SVN revision numbers and tree-ish
                     -A, --after 
                     -B, --before 
  gc               Compress unhandled.log files in .git/svn and remove index files in .git/svn
  info             Show info about the latest SVN revision
		     on the current branch
                     --url 
  init             Initialize a repo for tracking (requires URL argument)
                     --branches, --b=s@ 
                     --config-dir <arg>
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --minimize-url, --m! 
                     --no-auth-cache 
                     --no-metadata 
                     --prefix <arg>
                     --rewrite-root <arg>
                     --rewrite-uuid <arg>
                     --shared <arg>
                     --stdlayout, -s 
                     --tags, --t=s@ 
                     --template <arg>
                     --trunk, -T <arg>
                     --use-svm-props 
                     --use-svnsync-props 
                     --username <arg>
  log              Show commit logs
                     --authors-file, -A <arg>
                     --color 
                     --incremental 
                     --limit <num>
                     --non-recursive 
                     --oneline 
                     --pager <arg>
                     --revision, -r <arg>
                     --show-commit 
                     --verbose, -v 
  migrate          Migrate configuration/metadata/layout from
		        previous versions of git-svn
                     --config-dir <arg>
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --minimize 
                     --no-auth-cache 
                     --username <arg>
  mkdirs           recreate empty directories after a checkout
                     --revision, -r <num>
  propget          Print the value of a property on a file or directory
                     --revision, -r <num>
  proplist         List all properties of a file or directory
                     --revision, -r <num>
  propset          Set the value of a property on a file or directory - will be set on commit
  rebase           Fetch and rebase your working directory
                     --add-author-from 
                     --authors-file, -A <arg>
                     --authors-prog <arg>
                     --config-dir <arg>
                     --dry-run, -n 
                     --fetch-all, --all 
                     --follow-parent, --follow! 
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     --localtime 
                     --local, -l 
                     --log-window-size <num>
                     --merge, -m, -M 
                     --no-auth-cache 
                     --no-checkout 
                     --quiet, --q+ 
                     --rebase-merges, -p 
                     --repack-flags, --repack-args, --repack-opts <arg>
                     --repack <num>
                     --strategy, -s <arg>
                     --use-log-author 
                     --username <arg>
                     --verbose, -v 
  reset            Undo fetches back to the specified SVN revision
                     --parent, -p 
                     --revision, -r <arg>
  set-tree         Set an SVN repository to a git tree-ish
                     --add-author-from 
                     --authors-file, -A <arg>
                     --authors-prog <arg>
                     --config-dir <arg>
                     --copy-similarity, -C <num>
                     --edit, -e 
                     --find-copies-harder 
                     --follow-parent, --follow! 
                     --ignore-paths <arg>
                     --ignore-refs <arg>
                     --include-paths <arg>
                     -l <num>
                     --localtime 
                     --log-window-size <num>
                     --no-auth-cache 
                     --no-checkout 
                     --quiet, --q+ 
                     --repack-flags, --repack-args, --repack-opts <arg>
                     --repack <num>
                     --rmdir 
                     --stdin 
                     --use-log-author 
                     --username <arg>
  show-externals   Show svn:externals listings
                     --revision, -r <num>
  show-ignore      Show svn:ignore listings
                     --revision, -r <num>
  tag              Create a tag in the SVN repository
                     --commit-url <arg>
                     --destination, -d <arg>
                     --dry-run, -n 
                     --message, -m <arg>
                     --parents 
                     --username <arg>

GIT_SVN_ID may be set in the environment or via the --id/-i switch to an
arbitrary identifier if you're tracking multiple SVN branches/repositories in
one git repository and want to keep them separate.  See git-svn(1) for more
information.
ok 2 - git svn help works anywhere

expecting success of 9100.3 'initialize git svn': 
	mkdir import &&
	(
		cd import &&
		echo foo >foo &&
		ln -s foo foo.link &&
		mkdir -p dir/a/b/c/d/e &&
		echo "deep dir" >dir/a/b/c/d/e/file &&
		mkdir bar &&
		echo "zzz" >bar/zzz &&
		echo "#!/bin/sh" >exec.sh &&
		chmod +x exec.sh &&
		svn_cmd import -m "import for git svn" . "$svnrepo" >/dev/null
	) &&
	rm -rf import &&
	git svn init "$svnrepo"
ok 3 - initialize git svn

expecting success of 9100.4 'import an SVN revision into git': git svn fetch
	A	bar/zzz
	A	dir/a/b/c/d/e/file
	A	exec.sh
	A	foo
	A	foo.link
r1 = 74a7733b266b3c8cf4054777328a253cea427f08 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo r1
ok 4 - import an SVN revision into git

expecting success of 9100.5 'checkout from svn': svn co "$svnrepo" "$SVN_TREE"
A    .git/svn/refs/remotes/git-svn/svn-tree/bar
A    .git/svn/refs/remotes/git-svn/svn-tree/bar/zzz
A    .git/svn/refs/remotes/git-svn/svn-tree/dir
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a/b
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a/b/c
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a/b/c/d
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a/b/c/d/e
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/a/b/c/d/e/file
A    .git/svn/refs/remotes/git-svn/svn-tree/exec.sh
A    .git/svn/refs/remotes/git-svn/svn-tree/foo
A    .git/svn/refs/remotes/git-svn/svn-tree/foo.link
Checked out revision 1.
ok 5 - checkout from svn

expecting success of 9100.6 '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
Switched to a new branch 'mybranch'
[mybranch 376de12] try a deep --rmdir with a commit
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename dir/{a/b/c/d/e => }/file (100%)
 create mode 100644 file
	C	dir/a/b/c/d/e/file => dir/file
	R	dir/a/b/c/d/e/file => file
	D+	dir/a/b/c/d/e/
	D+	dir/a/b/c/d/
	D+	dir/a/b/c/
	D+	dir/a/b/
	D+	dir/a/
	D	dir/a/b/c/d/e/file
	D	dir/a/
	A	dir/file
	A	file
W: -empty_dir: dir/a
r2 = 1788fa2ffc17c7d7e2ecfa22484d81ff5a581a9e (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
D    .git/svn/refs/remotes/git-svn/svn-tree/dir/a
A    .git/svn/refs/remotes/git-svn/svn-tree/dir/file
A    .git/svn/refs/remotes/git-svn/svn-tree/file
Updated to revision 2.
ok 6 - try a deep --rmdir with a commit

expecting success of 9100.7 '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 "$name" &&
	test_must_fail git svn set-tree --find-copies-harder --rmdir \
		remotes/git-svn..mybranch

[mybranch 9c4516f] detect node change from file to directory #1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename dir/{ => file}/file (100%)
dir/file already exists in repository at r2 and it is not a directory (file/1)
ok 7 - detect node change from file to directory #1

expecting success of 9100.8 '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

Switched to a new branch 'mybranch2'
[mybranch2 1503daa] detect node change from directory to file #1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename bar/zzz => bar (100%)
Transaction is out of date: Directory '/bar' is out of date at /<<PKGBUILDDIR>>/perl/build/lib/Git/SVN.pm line 2079.

ok 8 - detect node change from directory to file #1

expecting success of 9100.9 '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" &&
	git svn set-tree --find-copies-harder --rmdir \
		remotes/git-svn..mybranch3 &&
	svn_cmd up "$SVN_TREE" &&
	test -d "$SVN_TREE"/bar/zzz &&
	test -e "$SVN_TREE"/bar/zzz/yyy

Switched to a new branch 'mybranch3'
[mybranch3 5e1a4e3] detect node change from file to directory #2
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 bar/zzz
 create mode 100644 bar/zzz/yyy
	D	bar/zzz
	A	bar/zzz/yyy
	D	bar/zzz
	A	bar/zzz/yyy
r3 = a645ed043062a5d46d468eab28296e3a9e4d02ba (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
D    .git/svn/refs/remotes/git-svn/svn-tree/bar/zzz
A    .git/svn/refs/remotes/git-svn/svn-tree/bar/zzz
A    .git/svn/refs/remotes/git-svn/svn-tree/bar/zzz/yyy
Updated to revision 3.
ok 9 - detect node change from file to directory #2

expecting success of 9100.10 '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

Switched to a new branch 'mybranch4'
[mybranch4 e9445ae] detect node change from directory to file #2
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 dir
 delete mode 100644 dir/file
	D	dir/file
Item already exists in filesystem: File already exists: filesystem '1028a120-6c94-4912-8548-b3bb132909ed', transaction '3-5', path '/dir' at /<<PKGBUILDDIR>>/perl/build/lib/Git/SVN.pm line 2079.

ok 10 - detect node change from directory to file #2

expecting success of 9100.11 '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
Switched to a new branch 'mybranch5'
[mybranch5 332587b] remove executable bit from a file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100755 => 100644 exec.sh
	M	exec.sh
	M	exec.sh
r4 = c2654c4cc6e9b1bfb1858a3236c68b43cb5e9895 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
 U   .git/svn/refs/remotes/git-svn/svn-tree/exec.sh
Updated to revision 4.
ok 11 - remove executable bit from a file

expecting success of 9100.12 '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
[mybranch5 f9fec6e] add executable bit back file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 exec.sh
	M	exec.sh
	M	exec.sh
r5 = 6c90b38753ddf7da407e1e163bb8f245c5d08e61 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
 U   .git/svn/refs/remotes/git-svn/svn-tree/exec.sh
Updated to revision 5.
ok 12 - add executable bit back file

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 9100.13 'executable file becomes a symlink to file': 
	rm exec.sh &&
	ln -s file 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
[mybranch5 08286db] executable file becomes a symlink to file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 100755 => 120000 exec.sh
	D	exec.sh
	A	exec.sh
	D	exec.sh
	A	exec.sh
W: -empty_dir: exec.sh
r6 = 0eea0bcc53c13ee9f891b0a90d6f029f341fb170 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
D    .git/svn/refs/remotes/git-svn/svn-tree/exec.sh
A    .git/svn/refs/remotes/git-svn/svn-tree/exec.sh
Updated to revision 6.
ok 13 - executable file becomes a symlink to file

expecting success of 9100.14 'new symlink is added to a file that was also just made executable': 
	chmod +x file &&
	ln -s file exec-2.sh &&
	git update-index --add file 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"/file &&
	test -h "$SVN_TREE"/exec-2.sh
[mybranch5 72c07ad] new symlink is added to a file that was also just made executable
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 120000 exec-2.sh
 mode change 100644 => 100755 file
	C	exec.sh => exec-2.sh
	M	file
	A	exec-2.sh
	M	file
r7 = 73aa11de1675596f05e861922360030b02c1be4e (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
A    .git/svn/refs/remotes/git-svn/svn-tree/exec-2.sh
 U   .git/svn/refs/remotes/git-svn/svn-tree/file
Updated to revision 7.
ok 14 - new symlink is added to a file that was also just made executable

expecting success of 9100.15 'modify a symlink to become a file': 
	echo git help >help &&
	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
[mybranch5 6c79e94] modify a symlink to become a file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 120000 => 100644 exec-2.sh
	D	exec-2.sh
	A	exec-2.sh
	D	exec-2.sh
	A	exec-2.sh
W: -empty_dir: exec-2.sh
r8 = 7e587d9a17ff85b80c276c3022c2395db3231b0e (refs/remotes/git-svn)
Done committing 1 revisions to SVN
Updating '.git/svn/refs/remotes/git-svn/svn-tree':
D    .git/svn/refs/remotes/git-svn/svn-tree/exec-2.sh
A    .git/svn/refs/remotes/git-svn/svn-tree/exec-2.sh
Updated to revision 8.
ok 15 - modify a symlink to become a file

expecting success of 9100.16 'commit with UTF-8 message: locale: C.utf8': 
	echo '# hello' >> exec-2.sh &&
	git update-index exec-2.sh &&
	git commit -m 'éï∏' &&
	git svn set-tree HEAD
[mybranch5 6b90dfa] éï∏
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
	M	exec-2.sh
	M	exec-2.sh
r9 = 542c52b7fddfac98971c5341a662f85ac260fef8 (refs/remotes/git-svn)
Done committing 1 revisions to SVN
ok 16 - commit with UTF-8 message: locale: C.utf8

expecting success of 9100.17 'test fetch functionality (svn => git) with alternate GIT_SVN_ID': git svn init "$svnrepo" && git svn fetch &&
     git log --format="tree %T %s" remotes/git-svn |
	awk "!seen[\$0]++ { print \$1, \$2 }" >a &&
     git log --format="tree %T" alt >b &&
     test_cmp a b
Using existing [svn-remote "svn"]
	A	bar/zzz
	A	dir/a/b/c/d/e/file
	A	exec.sh
	A	foo
	A	foo.link
r1 = 74a7733b266b3c8cf4054777328a253cea427f08 (refs/remotes/alt)
	D	dir/a/b/c/d/e/file
	D	dir/a/
	A	dir/file
	A	file
W: -empty_dir: dir/a
r2 = e861678f2a1d7bbfe0467c39fa33ed799026f1e3 (refs/remotes/alt)
	D	bar/zzz
	A	bar/zzz/yyy
r3 = 2e10b2ff0fee154433415e2d610abfe4ee908a44 (refs/remotes/alt)
	M	exec.sh
r4 = 9968439655fb41eedec5a4e8ae7f001560ea875d (refs/remotes/alt)
	M	exec.sh
r5 = c1ca81e44192029852e480df29cf4a52335aad56 (refs/remotes/alt)
	D	exec.sh
	A	exec.sh
W: -empty_dir: exec.sh
r6 = b970b7bb9bcd565f8d9382569d87718502ff1fab (refs/remotes/alt)
	A	exec-2.sh
	M	file
r7 = 8840883b6183b260c76b862c2b9f98d340ae1c23 (refs/remotes/alt)
	D	exec-2.sh
	A	exec-2.sh
W: -empty_dir: exec-2.sh
r8 = 159f1b4749fd9af629ae7dce0598fae1273a2fe7 (refs/remotes/alt)
	M	exec-2.sh
r9 = f1cb7604a3ef3ca7a2de61c34f48c53a59c4358c (refs/remotes/alt)
ok 17 - test fetch functionality (svn => git) with alternate GIT_SVN_ID

expecting success of 9100.18 'check imported tree checksums expected tree checksums': 
	test_cmp expected.$(test_oid algo) a

ok 18 - check imported tree checksums expected tree checksums

expecting success of 9100.19 'exit if remote refs are ambigious': 
        git config --add svn-remote.svn.fetch \
		bar:refs/remotes/git-svn &&
	test_must_fail git svn migrate

Remote ref refs/remote/git-svn is tracked by
  "svn-remote.svn.fetch=bar:refs/remotes/git-svn"
and
  "svn-remote.svn.fetch=:refs/remotes/git-svn"
Please resolve this ambiguity in your git configuration file before continuing

ok 19 - exit if remote refs are ambigious

expecting success of 9100.20 'exit if init-ing a would clobber a URL': 
        svnadmin create "${PWD}/svnrepo2" &&
        svn mkdir -m "mkdir bar" "${svnrepo}2/bar" &&
        git config --unset svn-remote.svn.fetch \
		"^bar:refs/remotes/git-svn$" &&
	test_must_fail git svn init "${svnrepo}2/bar"
        
Committing transaction...
Committed revision 1.
svn-remote.svn.url already set: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo
wanted to set to: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo2/bar

ok 20 - exit if init-ing a would clobber a URL

expecting success of 9100.21 '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$"
        
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo
bar:refs/remotes/bar
:refs/remotes/git-svn
ok 21 - init allows us to connect to another directory in the same repo

expecting success of 9100.22 '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 main &&
	git branch -D my-bar
	
	A	zzz
r1 = 87f80246ae4ba20194e682fa09a9ecd17665f0d1 (refs/remotes/bar)
	D	zzz
	A	zzz/yyy
r3 = fc8b218e6564d80b75ee3c42cd834c29799ffb1a (refs/remotes/bar)
Switched to a new branch 'my-bar'
[my-bar c4e6f10] change 1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
[my-bar 78abd1f] change 2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar ...
	A	foo
Committed r10
	A	foo
r10 = 7845e07f151b37e23e40d00e2ffaf1683297500c (refs/remotes/bar)
No changes between c4e6f104e5df18c0b3cc22b35ddaf73e1b5c54f3 and refs/remotes/bar
Resetting to the latest refs/remotes/bar
dcommitted on a detached HEAD because you gave a revision argument.
The rewritten commit is: 7845e07f151b37e23e40d00e2ffaf1683297500c
    change 1
Switched to branch 'main'
Deleted branch my-bar (was 78abd1f).
ok 22 - dcommit $rev does not clobber current branch

expecting success of 9100.23 '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)"

	A	bar/foo
r10 = 192cd5e1b2b7720b028a018456f3efa08844d39f (refs/remotes/alt)
Switched to a new branch 'my-bar'
[my-bar dc16a71] /bar/d should be in the log
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 d
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar ...
	A	d
Committed r11
	A	d
r11 = 6760a917c2fe4f8df3cd495977281ee46e415259 (refs/remotes/bar)
No changes between dc16a7156021541e527e4320757216e9cd736fb9 and refs/remotes/bar
Resetting to the latest refs/remotes/bar
[my-bar cf131dd] add a new directory
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 newdir/dir
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar ...
	A	newdir/dir
Committed r12
	A	newdir/dir
r12 = 283e33bd923dfe20ee173a7a4ee55b0978a5594b (refs/remotes/bar)
No changes between cf131ddc8863d7cd8f8166311463143c583ca348 and refs/remotes/bar
Resetting to the latest refs/remotes/bar
[my-bar c0c45bb] modify a file in new directory
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar ...
	M	newdir/dir
Committed r13
	M	newdir/dir
r13 = bb2583558f996389c566ceaa34e826a33a719dbe (refs/remotes/bar)
No changes between c0c45bbf3676630b5ee1369853bb3e42bab2c996 and refs/remotes/bar
Resetting to the latest refs/remotes/bar
ok 23 - able to dcommit to a subdirectory

expecting success of 9100.24 'dcommit should not fail with a touched file': 
	test_commit "commit-new-file-foo2" foo2 &&
	test-tool chmtime =-60 foo &&
	git svn dcommit

[my-bar dc513a8] commit-new-file-foo2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo2
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9100-git-svn-basic/svnrepo/bar ...
	A	foo2
Committed r14
	A	foo2
r14 = a7b79224722b2aa50ea275acd8b45191dade0a72 (refs/remotes/bar)
No changes between dc513a8c148ea38446b6b39bbab745ae324df833 and refs/remotes/bar
Resetting to the latest refs/remotes/bar
ok 24 - dcommit should not fail with a touched file

expecting success of 9100.25 'rebase should not fail with a touched file': 
	test-tool chmtime =-60 foo &&
	git svn rebase

Current branch my-bar is up to date.
ok 25 - rebase should not fail with a touched file

expecting success of 9100.26 '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)"

[my-bar cff8f57] update /bar/d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
	M	d
	M	d
r15 = 307ccf780d5bea1918576a9e1785885c4f164999 (refs/remotes/bar)
Done committing 1 revisions to SVN
ok 26 - able to set-tree to a subdirectory

expecting success of 9100.27 '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
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9100-git-svn-basic/bare-repo/
	A	bar/zzz
	A	dir/a/b/c/d/e/file
	A	exec.sh
	A	foo
	A	foo.link
r1 = 74a7733b266b3c8cf4054777328a253cea427f08 (refs/remotes/alt)
	D	dir/a/b/c/d/e/file
	D	dir/a/
	A	dir/file
	A	file
W: -empty_dir: dir/a
r2 = e861678f2a1d7bbfe0467c39fa33ed799026f1e3 (refs/remotes/alt)
	D	bar/zzz
	A	bar/zzz/yyy
r3 = 2e10b2ff0fee154433415e2d610abfe4ee908a44 (refs/remotes/alt)
	M	exec.sh
r4 = 9968439655fb41eedec5a4e8ae7f001560ea875d (refs/remotes/alt)
	M	exec.sh
r5 = c1ca81e44192029852e480df29cf4a52335aad56 (refs/remotes/alt)
	D	exec.sh
	A	exec.sh
W: -empty_dir: exec.sh
r6 = b970b7bb9bcd565f8d9382569d87718502ff1fab (refs/remotes/alt)
	A	exec-2.sh
	M	file
r7 = 8840883b6183b260c76b862c2b9f98d340ae1c23 (refs/remotes/alt)
	D	exec-2.sh
	A	exec-2.sh
W: -empty_dir: exec-2.sh
r8 = 159f1b4749fd9af629ae7dce0598fae1273a2fe7 (refs/remotes/alt)
	M	exec-2.sh
r9 = f1cb7604a3ef3ca7a2de61c34f48c53a59c4358c (refs/remotes/alt)
	A	bar/foo
r10 = 192cd5e1b2b7720b028a018456f3efa08844d39f (refs/remotes/alt)
	A	bar/d
r11 = ccefa8b1822b0017f5e2b25a55446a727d3806d9 (refs/remotes/alt)
	A	bar/newdir/dir
r12 = 1a546196cf0719a8535e691cb50418cd41ab3a3b (refs/remotes/alt)
	M	bar/newdir/dir
r13 = 655d096d2c2802d9c06154895d2d96e823fbeea0 (refs/remotes/alt)
	A	bar/foo2
r14 = 93b17720ee5bf236328ea7f906fbd368b691a61c (refs/remotes/alt)
	M	bar/d
r15 = 783421c839c229257b69f525a713d8adb6ba1597 (refs/remotes/alt)
ok 27 - git-svn works in a bare repository

expecting success of 9100.28 'git-svn works in a repository with a gitdir: link': 
	mkdir worktree gitdir &&
	( cd worktree &&
	git svn init "$svnrepo" &&
	git init --separate-git-dir ../gitdir &&
	git svn fetch ) &&
	rm -rf worktree gitdir
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9100-git-svn-basic/worktree/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9100-git-svn-basic/gitdir/
	A	bar/zzz
	A	dir/a/b/c/d/e/file
	A	exec.sh
	A	foo
	A	foo.link
r1 = 74a7733b266b3c8cf4054777328a253cea427f08 (refs/remotes/alt)
	D	dir/a/b/c/d/e/file
	D	dir/a/
	A	dir/file
	A	file
W: -empty_dir: dir/a
r2 = e861678f2a1d7bbfe0467c39fa33ed799026f1e3 (refs/remotes/alt)
	D	bar/zzz
	A	bar/zzz/yyy
r3 = 2e10b2ff0fee154433415e2d610abfe4ee908a44 (refs/remotes/alt)
	M	exec.sh
r4 = 9968439655fb41eedec5a4e8ae7f001560ea875d (refs/remotes/alt)
	M	exec.sh
r5 = c1ca81e44192029852e480df29cf4a52335aad56 (refs/remotes/alt)
	D	exec.sh
	A	exec.sh
W: -empty_dir: exec.sh
r6 = b970b7bb9bcd565f8d9382569d87718502ff1fab (refs/remotes/alt)
	A	exec-2.sh
	M	file
r7 = 8840883b6183b260c76b862c2b9f98d340ae1c23 (refs/remotes/alt)
	D	exec-2.sh
	A	exec-2.sh
W: -empty_dir: exec-2.sh
r8 = 159f1b4749fd9af629ae7dce0598fae1273a2fe7 (refs/remotes/alt)
	M	exec-2.sh
r9 = f1cb7604a3ef3ca7a2de61c34f48c53a59c4358c (refs/remotes/alt)
	A	bar/foo
r10 = 192cd5e1b2b7720b028a018456f3efa08844d39f (refs/remotes/alt)
	A	bar/d
r11 = ccefa8b1822b0017f5e2b25a55446a727d3806d9 (refs/remotes/alt)
	A	bar/newdir/dir
r12 = 1a546196cf0719a8535e691cb50418cd41ab3a3b (refs/remotes/alt)
	M	bar/newdir/dir
r13 = 655d096d2c2802d9c06154895d2d96e823fbeea0 (refs/remotes/alt)
	A	bar/foo2
r14 = 93b17720ee5bf236328ea7f906fbd368b691a61c (refs/remotes/alt)
	M	bar/d
r15 = 783421c839c229257b69f525a713d8adb6ba1597 (refs/remotes/alt)
ok 28 - git-svn works in a repository with a gitdir: link

# passed all 28 test(s)
1..28
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9108-git-svn-glob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9108-git-svn-glob/.git/
expecting success of 9108.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 >actual &&
	cut -d" " -f2- actual >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
	
Adding         trunk/doc
Adding         trunk/src
Adding         trunk/src/a
Adding         trunk/src/a/readme
Adding         trunk/src/b
Adding         trunk/src/b/readme
Committing transaction...
Committed revision 1.
A    tmp/trunk
A    tmp/trunk/doc
A    tmp/trunk/src
A    tmp/trunk/src/a
A    tmp/trunk/src/a/readme
A    tmp/trunk/src/b
A    tmp/trunk/src/b/readme
Checked out revision 1.
A         branches
A         tags
A         branches/start
Adding         branches
Adding         branches/start
Adding         tags
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
Sending        branches/start/src/a/readme
Sending        branches/start/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
A         tags/end
Adding         tags/end
Sending        tags/end/src/a/readme
Sending        tags/end/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 4.
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 5.
Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
	.git/svn
	(required for this version (2.39.0) of git-svn) does not exist.
Done migrating from a git-svn v1 layout
	A	readme
r1 = 8bff0f76620bb1e12d57b056499b7354ed0ff9e7 (refs/remotes/trunk)
branch_from: /trunk => /trunk/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/trunk/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/branches/start/src/a, 1
Found branch parent: (refs/remotes/branches/start) 8bff0f76620bb1e12d57b056499b7354ed0ff9e7
Following parent with do_switch
Successfully followed parent
r2 = 368f97497ee0139fdb8e37927a981fd66c3bf1e5 (refs/remotes/branches/start)
	M	readme
r3 = c572590e20c9c2162e22c9908a032124bbfdce2f (refs/remotes/branches/start)
branch_from: /branches/start => /branches/start/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/branches/start/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/tags/end/src/a, 3
Found branch parent: (refs/remotes/tags/end) c572590e20c9c2162e22c9908a032124bbfdce2f
Following parent with do_switch
	M	readme
Successfully followed parent
r4 = 27d4708b7a94b669deb26903ea3d71a705cc7a2d (refs/remotes/tags/end)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/trunk/src/a r1
fatal: ambiguous argument 'refs/remotes/tags/end@3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/tags/end@3
ok 1 - test refspec globbing

expecting success of 9108.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 &&
	git rev-list refs/remotes/two/tags/end >actual &&
	test_line_count = 6 actual &&
	git rev-list refs/remotes/two/branches/start >actual &&
	test_line_count = 3 actual &&
	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 >actual &&
	cut -d" " -f2- actual >output.two &&
	test_cmp expect.two output.two
	
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 6.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = a424e6b7c31360147a1765a4878cc8dd7e1b41e2 (refs/remotes/two/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/branches/start, 1
Found branch parent: (refs/remotes/two/branches/start) a424e6b7c31360147a1765a4878cc8dd7e1b41e2
Following parent with do_switch
Successfully followed parent
r2 = 9f0623a1c7716ccf946ffb8251694d67f434e50d (refs/remotes/two/branches/start)
	M	src/a/readme
	M	src/b/readme
r3 = 7fa714964924077e0769b872ab9956f2cded9344 (refs/remotes/two/branches/start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/branches/start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9108-git-svn-glob/svnrepo/tags/end, 3
Found branch parent: (refs/remotes/two/tags/end) 7fa714964924077e0769b872ab9956f2cded9344
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r4 = d1c5a9ce4e14fc612ef6140439b5877ef8d8fa7c (refs/remotes/two/tags/end)
	M	src/b/readme
r5 = 2dc941546b18fc6483d574f189329f71b6d5b5b7 (refs/remotes/two/tags/end)
	M	src/b/readme
r6 = cd41cca346e7cc7f50f14036e8edf63e06f6a74f (refs/remotes/two/tags/end)
ok 2 - test left-hand-side only globbing

expecting success of 9108.3 'prepare test disallow multi-globs': 
cat >expect.three <<EOF
Only one set of wildcards (e.g. '*' or '*/*/*') is supported: branches/*/t/*

EOF
	
ok 3 - prepare test disallow multi-globs

expecting success of 9108.4 'test disallow multi-globs': 
	git config --add svn-remote.three.url "$svnrepo" &&
	git config --add svn-remote.three.fetch \
	                 trunk:refs/remotes/three/trunk &&
	git config --add svn-remote.three.branches \
	                 "branches/*/t/*:refs/remotes/three/branches/*" &&
	git config --add svn-remote.three.tags \
	                 "tags/*/*:refs/remotes/three/tags/*" &&
	(
		cd tmp &&
		echo "try try" >> tags/end/src/b/readme &&
		poke tags/end/src/b/readme &&
		svn_cmd commit -m "try to try"
	) &&
	test_must_fail git svn fetch three 2> stderr.three &&
	test_cmp expect.three stderr.three
	
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 7.
ok 4 - test disallow multi-globs

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9107-git-svn-migrate.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9107-git-svn-migrate/.git/
expecting success of 9107.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
	
Adding         branches
Adding         branches/a
Adding         branches/a/README
Adding         branches/b
Adding         branches/b/README
Adding         tags
Adding         tags/0.1
Adding         tags/0.1/README
Adding         tags/0.2
Adding         tags/0.2/README
Adding         tags/0.3
Adding         tags/0.3/README
Adding         trunk
Adding         trunk/README
Committing transaction...
Committed revision 1.
	A	branches/a/README
	A	branches/b/README
	A	tags/0.1/README
	A	tags/0.2/README
	A	tags/0.3/README
	A	trunk/README
r1 = 931b4cd6897c3378c2b4a84286d49f0b036dde75 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo r1
ok 1 - setup old-looking metadata

expecting success of 9107.2 'git-svn-HEAD is a real HEAD': 
	git rev-parse --verify refs/heads/git-svn-HEAD^0

931b4cd6897c3378c2b4a84286d49f0b036dde75
ok 2 - git-svn-HEAD is a real HEAD

expecting success of 9107.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_escaped" &&
	test $(git config --get svn-remote.svn.fetch) = \
		":refs/remotes/git-svn"
	
Migrating from v0 layout...
Renaming ref: refs/heads/git-svn-HEAD => refs/remotes/git-svn
Renaming ref: refs/heads/svn-HEAD => refs/remotes/svn
Done migrating from v0 layout...
Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
	.git/svn
	(required for this version (2.39.0) of git-svn) does not exist.
 - .git/git-svn => .git/svn/git-svn
 - .git/svn/info => .git/svn/svn/info
Done migrating from a git-svn v1 layout
931b4cd6897c3378c2b4a84286d49f0b036dde75
931b4cd6897c3378c2b4a84286d49f0b036dde75
ok 3 - initialize old-style (v0) git svn layout

expecting success of 9107.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/origin/trunk$" fetch.out &&
	test -n "$(git config --get svn-remote.svn.branches \
		    "^branches/\*:refs/remotes/origin/\*$")" &&
	test -n "$(git config --get svn-remote.svn.tags \
		    "^tags/\*:refs/remotes/origin/tags/\*$")" &&
	git config --unset svn-remote.svn.branches \
	                        "^branches/\*:refs/remotes/origin/\*$" &&
	git config --unset svn-remote.svn.tags \
	                        "^tags/\*:refs/remotes/origin/tags/\*$" &&
	git config --add svn-remote.svn.fetch "branches/a:refs/remotes/origin/a" &&
	git config --add svn-remote.svn.fetch "branches/b:refs/remotes/origin/b" &&
	for i in tags/0.1 tags/0.2 tags/0.3
	do
		git config --add svn-remote.svn.fetch \
			$i:refs/remotes/origin/$i || return 1
	done &&
	git config --get-all svn-remote.svn.fetch > fetch.out &&
	grep "^trunk:refs/remotes/origin/trunk$" fetch.out &&
	grep "^branches/a:refs/remotes/origin/a$" fetch.out &&
	grep "^branches/b:refs/remotes/origin/b$" fetch.out &&
	grep "^tags/0\.1:refs/remotes/origin/tags/0\.1$" fetch.out &&
	grep "^tags/0\.2:refs/remotes/origin/tags/0\.2$" fetch.out &&
	grep "^tags/0\.3:refs/remotes/origin/tags/0\.3$" fetch.out &&
	grep "^:refs/remotes/git-svn" fetch.out
	
Using existing [svn-remote "svn"]
trunk:refs/remotes/origin/trunk
trunk:refs/remotes/origin/trunk
branches/a:refs/remotes/origin/a
branches/b:refs/remotes/origin/b
tags/0.1:refs/remotes/origin/tags/0.1
tags/0.2:refs/remotes/origin/tags/0.2
tags/0.3:refs/remotes/origin/tags/0.3
:refs/remotes/git-svn
ok 4 - initialize a multi-repository repo

expecting success of 9107.5 'multi-fetch works on partial urls + paths': 
	refs="trunk a b tags/0.1 tags/0.2 tags/0.3" &&
	git svn multi-fetch &&
	for i in $refs
	do
		git rev-parse --verify refs/remotes/origin/$i^0 || return 1;
	done >refs.out &&
	test -z "$(sort <refs.out | uniq -d)" &&
	for i in $refs
	do
		for j in $refs
		do
			git diff --exit-code refs/remotes/origin/$i \
					     refs/remotes/origin/$j ||
				return 1
		done
	done

Rebuilding .git/svn/git-svn/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 931b4cd6897c3378c2b4a84286d49f0b036dde75
Done rebuilding .git/svn/git-svn/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
	A	README
r1 = 759b4fe70f6ccb9cd51a3730dbf8fa4a3003a582 (refs/remotes/origin/trunk)
	A	README
r1 = b5230f6da210d1a7a823c3f4e97243e63b3737d3 (refs/remotes/origin/b)
	A	README
r1 = 3761e1291a98b80b7a6bd5313b775c9224f30063 (refs/remotes/origin/tags/0.1)
	A	README
r1 = 95551cd2a067d35a0423bd898f1583089d033b5c (refs/remotes/origin/tags/0.2)
	A	README
r1 = 08515c1538d120a3c9b5b3d3813236aa615e949d (refs/remotes/origin/a)
	A	README
r1 = a5afe763a2a2896836a862ca7c8dce1420b21a19 (refs/remotes/origin/tags/0.3)
ok 5 - multi-fetch works on partial urls + paths

expecting success of 9107.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=${i%%:*} &&
		ref=${i#*:} &&
		if test "$ref" = "${ref#refs/remotes/}"; 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 ||
		return 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/origin/trunk$" fetch.out &&
	grep "^branches/a:refs/remotes/origin/a$" fetch.out &&
	grep "^branches/b:refs/remotes/origin/b$" fetch.out &&
	grep "^tags/0\.1:refs/remotes/origin/tags/0\.1$" fetch.out &&
	grep "^tags/0\.2:refs/remotes/origin/tags/0\.2$" fetch.out &&
	grep "^tags/0\.3:refs/remotes/origin/tags/0\.3$" fetch.out &&
	grep "^:refs/remotes/git-svn" fetch.out
	
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/branches/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/branches/b => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/tags/0.1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/tags/0.2 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/tags/0.3 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9107-git-svn-migrate/svnrepo
trunk:refs/remotes/origin/trunk
branches/a:refs/remotes/origin/a
branches/b:refs/remotes/origin/b
tags/0.1:refs/remotes/origin/tags/0.1
tags/0.2:refs/remotes/origin/tags/0.2
tags/0.3:refs/remotes/origin/tags/0.3
:refs/remotes/git-svn
ok 6 - migrate --minimize on old inited layout

expecting success of 9107.7 '.rev_db auto-converted to .rev_map.UUID': 
	git svn fetch -i trunk &&
	test -z "$(ls "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_db.* 2>/dev/null)" &&
	expect="$(ls "$GIT_DIR"/svn/refs/remotes/origin/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/origin/trunk/.rev_db.* 2>/dev/null)" &&
	test ! -e "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_db &&
	test -f "$expect"
	
Rebuilding .git/svn/refs/remotes/git-svn/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 931b4cd6897c3378c2b4a84286d49f0b036dde75
Done rebuilding .git/svn/refs/remotes/git-svn/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/a/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 08515c1538d120a3c9b5b3d3813236aa615e949d
Done rebuilding .git/svn/refs/remotes/origin/a/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/b/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = b5230f6da210d1a7a823c3f4e97243e63b3737d3
Done rebuilding .git/svn/refs/remotes/origin/b/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/tags/0.1/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 3761e1291a98b80b7a6bd5313b775c9224f30063
Done rebuilding .git/svn/refs/remotes/origin/tags/0.1/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/tags/0.2/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 95551cd2a067d35a0423bd898f1583089d033b5c
Done rebuilding .git/svn/refs/remotes/origin/tags/0.2/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/tags/0.3/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = a5afe763a2a2896836a862ca7c8dce1420b21a19
Done rebuilding .git/svn/refs/remotes/origin/tags/0.3/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 759b4fe70f6ccb9cd51a3730dbf8fa4a3003a582
Done rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
Rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed ...
r1 = 759b4fe70f6ccb9cd51a3730dbf8fa4a3003a582
Done rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.5051febd-d3fc-43d5-8ff2-bbc3914aeeed
ok 7 - .rev_db auto-converted to .rev_map.UUID

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9110-git-svn-use-svm-props.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9110-git-svn-use-svm-props/.git/
expecting success of 9110.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
	
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo/mirror/arr => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo/mirror/argh => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo/mirror/argh/a/b/c/d/e => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo
	A	a/b/c/d/e/file
r9 (@1) = 79a1181387506bdda9e0f310c40ddb3f4eed7179 (refs/remotes/dir)
	A	file
r9 (@1) = 6aadfc98d31cbed4e89c9d601491ad7b5c46d857 (refs/remotes/e)
	D	a/b/c/d/e/file
	D	a/
	A	file
W: -empty_dir: mirror/argh/a
r10 (@2) = c165f07c4c5694be18c9c28331ca7efd46d78417 (refs/remotes/dir)
	A	zzz
r2 (@1) = 44a982ce17928f9542c6f3fce48affc197150e1e (refs/remotes/bar)
	M	zzz
r3 (@6) = 2ebd1f75bc1fdd83dcbcdf6194f8b9a16e4fdeb0 (refs/remotes/bar)
	A	d
r4 (@9) = 07c2950915eb3ada192043ac2e5efcf9d9e07de3 (refs/remotes/bar)
	A	newdir/dir
r5 (@10) = 7b59bc03f91e595ef213c16f436644c05d922782 (refs/remotes/bar)
	M	newdir/dir
r6 (@11) = 8775e0be15e9c3fd282c6f4e71a82766ab3e9231 (refs/remotes/bar)
	M	d
r7 (@12) = ab9ada04d293d792e2e941a664911858fe0167af (refs/remotes/bar)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9110-git-svn-use-svm-props/svnrepo/mirror/arr r7
ok 1 - load svm repo

expecting success of 9110.2 'verify metadata for /bar': 
	git cat-file commit refs/remotes/bar >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~1 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~2 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~3 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~4 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~5 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 2 - verify metadata for /bar

expecting success of 9110.3 'verify metadata for /dir/a/b/c/d/e': 
	git cat-file commit refs/remotes/e >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 3 - verify metadata for /dir/a/b/c/d/e

expecting success of 9110.4 'verify metadata for /dir': 
	git cat-file commit refs/remotes/dir >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/dir~1 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 4 - verify metadata for /dir

expecting success of 9110.5 'find commit based on SVN revision number': 
	git svn find-rev r12 >actual &&
	grep ab9ada04d293d792e2e941a664911858fe0167af actual
        
ab9ada04d293d792e2e941a664911858fe0167af
ok 5 - find commit based on SVN revision number

expecting success of 9110.6 'empty rebase': 
	git svn rebase
	
Current branch master is up to date.
ok 6 - empty rebase

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9111-git-svn-use-svnsync-props.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9111-git-svn-use-svnsync-props/.git/
expecting success of 9111.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
	
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo/bar => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo/dir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo/dir/a/b/c/d/e => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo
	A	file
r1 = 6aadfc98d31cbed4e89c9d601491ad7b5c46d857 (refs/remotes/e)
	A	a/b/c/d/e/file
r1 = 79a1181387506bdda9e0f310c40ddb3f4eed7179 (refs/remotes/dir)
	D	a/b/c/d/e/file
	D	a/
	A	file
W: -empty_dir: dir/a
r2 = c165f07c4c5694be18c9c28331ca7efd46d78417 (refs/remotes/dir)
	A	zzz
r1 = 44a982ce17928f9542c6f3fce48affc197150e1e (refs/remotes/bar)
	M	zzz
r6 = 2ebd1f75bc1fdd83dcbcdf6194f8b9a16e4fdeb0 (refs/remotes/bar)
	A	d
r9 = 07c2950915eb3ada192043ac2e5efcf9d9e07de3 (refs/remotes/bar)
	A	newdir/dir
r10 = 7b59bc03f91e595ef213c16f436644c05d922782 (refs/remotes/bar)
	M	newdir/dir
r11 = 8775e0be15e9c3fd282c6f4e71a82766ab3e9231 (refs/remotes/bar)
	M	d
r12 = ab9ada04d293d792e2e941a664911858fe0167af (refs/remotes/bar)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9111-git-svn-use-svnsync-props/svnrepo/bar r12
ok 1 - load svnsync repo

expecting success of 9111.2 'verify metadata for /bar': 
	git cat-file commit refs/remotes/bar >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~1 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~2 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~3 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~4 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/bar~5 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 2 - verify metadata for /bar

expecting success of 9111.3 'verify metadata for /dir/a/b/c/d/e': 
	git cat-file commit refs/remotes/e >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 3 - verify metadata for /dir/a/b/c/d/e

expecting success of 9111.4 'verify metadata for /dir': 
	git cat-file commit refs/remotes/dir >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89$' actual &&
	git cat-file commit refs/remotes/dir~1 >actual &&
	grep '^git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89$' actual
	
git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89
git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89
ok 4 - verify metadata for /dir

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9113-git-svn-dcommit-new-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9113-git-svn-dcommit-new-file/.git/
1..0 # SKIP skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9109-git-svn-multi-glob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9109-git-svn-multi-glob/.git/
expecting success of 9109.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 >actual &&
	cut -d" " -f2- actual >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
	
Adding         trunk/doc
Adding         trunk/src
Adding         trunk/src/a
Adding         trunk/src/a/readme
Adding         trunk/src/b
Adding         trunk/src/b/readme
Committing transaction...
Committed revision 1.
A    tmp/trunk
A    tmp/trunk/doc
A    tmp/trunk/src
A    tmp/trunk/src/a
A    tmp/trunk/src/a/readme
A    tmp/trunk/src/b
A    tmp/trunk/src/b/readme
Checked out revision 1.
A         branches
A         branches/v1
A         tags
A         branches/v1/start
Adding         branches
Adding         branches/v1
Adding         branches/v1/start
Adding         tags
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
Sending        branches/v1/start/src/a/readme
Sending        branches/v1/start/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
A         tags/end
Adding         tags/end
Sending        tags/end/src/a/readme
Sending        tags/end/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 4.
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 5.
Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
	.git/svn
	(required for this version (2.39.0) of git-svn) does not exist.
Done migrating from a git-svn v1 layout
	A	readme
r1 = 5fd219a4a5042e199612e51d0aabef67f9f8c3a9 (refs/remotes/trunk)
branch_from: /trunk => /trunk/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/trunk/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start/src/a, 1
Found branch parent: (refs/remotes/branches/v1/start) 5fd219a4a5042e199612e51d0aabef67f9f8c3a9
Following parent with do_switch
Successfully followed parent
r2 = 119d530c2514aa9d5ea3e7361dbe808cacf8cc49 (refs/remotes/branches/v1/start)
	M	readme
r3 = 2d7d020c6d35fb605ec32ef348921763ccaecdf1 (refs/remotes/branches/v1/start)
branch_from: /branches/v1/start => /branches/v1/start/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/tags/end/src/a, 3
Found branch parent: (refs/remotes/tags/end) 2d7d020c6d35fb605ec32ef348921763ccaecdf1
Following parent with do_switch
	M	readme
Successfully followed parent
r4 = d9fd28477386acbade6bc779fbac64b962b3a68b (refs/remotes/tags/end)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/trunk/src/a r1
fatal: ambiguous argument 'refs/remotes/tags/end@3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/tags/end@3
ok 1 - test refspec globbing

expecting success of 9109.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 &&
	git rev-list refs/remotes/two/tags/end >actual &&
	test_line_count = 6 actual &&
	git rev-list refs/remotes/two/branches/v1/start >actual &&
	test_line_count = 3 actual &&
	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 >actual &&
	cut -d" " -f2- actual >output.two &&
	test_cmp expect.two output.two
	
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 6.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = bda33b812c7af12a2b53496ae3c99f2354aece85 (refs/remotes/two/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start, 1
Found branch parent: (refs/remotes/two/branches/v1/start) bda33b812c7af12a2b53496ae3c99f2354aece85
Following parent with do_switch
Successfully followed parent
r2 = 6f87e0ba89181499489daef7c111d8092261120e (refs/remotes/two/branches/v1/start)
	M	src/a/readme
	M	src/b/readme
r3 = c5b6d11ab96a5a55c2bfb40d2153f5a904b27e11 (refs/remotes/two/branches/v1/start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/tags/end, 3
Found branch parent: (refs/remotes/two/tags/end) c5b6d11ab96a5a55c2bfb40d2153f5a904b27e11
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r4 = 8c877a886517f618a24ba1e1a673470ef7f2156a (refs/remotes/two/tags/end)
	M	src/b/readme
r5 = f82dd5ab59f9e84e053946a10c664a4aac98a68e (refs/remotes/two/tags/end)
	M	src/b/readme
r6 = 0e50ee1aa982b160fdd30796c2f73a509f0ce7bf (refs/remotes/two/tags/end)
ok 2 - test left-hand-side only globbing

expecting success of 9109.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 &&
	git rev-list refs/remotes/four/tags/next >actual &&
	test_line_count = 5 actual &&
	git rev-list refs/remotes/four/branches/v2/start >actual &&
	test_line_count = 3 actual &&
	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 >actual &&
	cut -d" " -f2- actual >output.four &&
	test_cmp expect.four output.four
	
A         branches/v2
A         branches/v2/start
Adding         branches/v2
Adding         branches/v2/start
Committing transaction...
Committed revision 7.
Updating '.':
At revision 7.
Sending        branches/v2/start/src/a/readme
Sending        branches/v2/start/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 8.
Updating '.':
At revision 8.
A         tags/next
Adding         tags/next
Sending        tags/next/src/a/readme
Sending        tags/next/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 9.
Sending        tags/next/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 10.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = bda33b812c7af12a2b53496ae3c99f2354aece85 (refs/remotes/four/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start, 1
Found branch parent: (refs/remotes/four/branches/v1/start) bda33b812c7af12a2b53496ae3c99f2354aece85
Following parent with do_switch
Successfully followed parent
r2 = 6f87e0ba89181499489daef7c111d8092261120e (refs/remotes/four/branches/v1/start)
	M	src/a/readme
	M	src/b/readme
r3 = c5b6d11ab96a5a55c2bfb40d2153f5a904b27e11 (refs/remotes/four/branches/v1/start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v1/start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/tags/end, 3
Found branch parent: (refs/remotes/four/tags/end) c5b6d11ab96a5a55c2bfb40d2153f5a904b27e11
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r4 = 8c877a886517f618a24ba1e1a673470ef7f2156a (refs/remotes/four/tags/end)
	M	src/b/readme
r5 = f82dd5ab59f9e84e053946a10c664a4aac98a68e (refs/remotes/four/tags/end)
	M	src/b/readme
r6 = 0e50ee1aa982b160fdd30796c2f73a509f0ce7bf (refs/remotes/four/tags/end)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v2/start, 3
Found branch parent: (refs/remotes/four/branches/v2/start) bda33b812c7af12a2b53496ae3c99f2354aece85
Following parent with do_switch
Successfully followed parent
r7 = 0018dc42cb5971163402ee909cf0f272f2cacde4 (refs/remotes/four/branches/v2/start)
	M	src/a/readme
	M	src/b/readme
r8 = a00ff2b4b9110df2aeaeae1114781109317d41ed (refs/remotes/four/branches/v2/start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/branches/v2/start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9109-git-svn-multi-glob/svnrepo/tags/next, 8
Found branch parent: (refs/remotes/four/tags/next) a00ff2b4b9110df2aeaeae1114781109317d41ed
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r9 = e42094ea7105aab717fd2a5750f984f0ee9741f0 (refs/remotes/four/tags/next)
	M	src/b/readme
r10 = 7efe0eb07ea15caa8fe2bfd4d2eb5274b5bf0c89 (refs/remotes/four/tags/next)
ok 3 - test another branch

expecting success of 9109.4 'prepare test disallow multiple globs': 
cat >expect.three <<EOF
Only one set of wildcards (e.g. '*' or '*/*/*') is supported: branches/*/t/*

EOF
	
ok 4 - prepare test disallow multiple globs

expecting success of 9109.5 'test disallow multiple globs': 
	git config --add svn-remote.three.url "$svnrepo" &&
	git config --add svn-remote.three.fetch \
	                 trunk:refs/remotes/three/trunk &&
	git config --add svn-remote.three.branches \
	                 "branches/*/t/*:refs/remotes/three/branches/*/*" &&
	git config --add svn-remote.three.tags \
	                 "tags/*:refs/remotes/three/tags/*" &&
	(
		cd tmp &&
		echo "try try" >> tags/end/src/b/readme &&
		poke tags/end/src/b/readme &&
		svn_cmd commit -m "try to try"
	) &&
	test_must_fail git svn fetch three 2> stderr.three &&
	test_cmp expect.three stderr.three
	
Sending        tags/end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 11.
ok 5 - test disallow multiple globs

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9112-git-svn-md5less-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9112-git-svn-md5less-file/.git/
expecting success of 9112.1 'load svn dumpfile': svnadmin load "$rawsvnrepo" < dumpfile.svn
<<< Started new transaction, based on original revision 1
     * editing path : md5less-file ... done.

------- Committed revision 1 >>>

ok 1 - load svn dumpfile

expecting success of 9112.2 'initialize git svn': git svn init "$svnrepo"
ok 2 - initialize git svn

expecting success of 9112.3 'fetch revisions from svn': git svn fetch
	A	md5less-file
r1 = 1a1c5a0cab09565d8d31a826ceb3d4b4d9a7a2cd (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9112-git-svn-md5less-file/svnrepo r1
ok 3 - fetch revisions from svn

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9114-git-svn-dcommit-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9114-git-svn-dcommit-merge/.git/
expecting success of 9114.1 'setup svn repository': 
	svn_cmd co "$svnrepo" mysvnwork &&
	mkdir -p mysvnwork/trunk &&
	(
		cd mysvnwork &&
		big_text_block >>trunk/README &&
		svn_cmd add trunk &&
		svn_cmd ci -m "first commit" trunk
	)
	
Checked out revision 0.
A         trunk
A         trunk/README
Adding         trunk
Adding         trunk/README
Transmitting file data .done
Committing transaction...
Committed revision 1.
ok 1 - setup svn repository

expecting success of 9114.2 'setup git mirror and merge': 
	git svn init "$svnrepo" -t tags -T trunk -b branches &&
	git svn fetch &&
	git checkout -b svn remotes/origin/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 merge merge
	
	A	README
r1 = d6b1da135a24cf3e8c898ca0d93471ae4fbf8b2d (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9114-git-svn-dcommit-merge/svnrepo/trunk r1
Switched to a new branch 'svn'
Switched to a new branch 'merge'
[merge c1da9c3] New file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new_file
[merge 2a8a25b] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[merge 4551131] add some stuff
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Switched to branch 'svn'
[svn b1f31c6] friend
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Auto-merging README
Merge made by the 'ort' strategy.
 README   | 1 +
 new_file | 2 ++
 2 files changed, 3 insertions(+)
 create mode 100644 new_file
ok 2 - setup git mirror and merge

expecting success of 9114.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^ >actual &&
	grep '^friend$' actual
	
friend
ok 3 - verify pre-merge ancestry

expecting success of 9114.4 'git svn dcommit merges': 
	git svn dcommit
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9114-git-svn-dcommit-merge/svnrepo/trunk ...
	M	README
Committed r2
	M	README
r2 = b5b71d3829c3e8568e94a635ac97c99b1845f39d (refs/remotes/origin/trunk)
	A	new_file
	M	README
Committed r3
	M	README
	A	new_file
r3 = 46d85effdfd508dcc41ac5686e00a5aee9146699 (refs/remotes/origin/trunk)
No changes between 4449b8453a07d970c79359e74d394a2714734877 and refs/remotes/origin/trunk
Resetting to the latest refs/remotes/origin/trunk
ok 4 - git svn dcommit merges

expecting success of 9114.5 'verify post-merge ancestry': 
	test x$(git rev-parse --verify refs/heads/svn) = 	     x$(git rev-parse --verify refs/remotes/origin/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^ >actual &&
	grep '^friend$' actual
	
friend
ok 5 - verify post-merge ancestry

expecting success of 9114.6 'verify merge commit message': 
	git rev-list --pretty=raw -1 refs/heads/svn >actual &&
	grep "    Merge branch 'merge' into svn" actual
	
    Merge branch 'merge' into svn
ok 6 - verify merge commit message

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9104-git-svn-follow-parent.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9104-git-svn-follow-parent/.git/
expecting success of 9104.1 'initialize repo': 
	mkdir import &&
	(
		cd import &&
		mkdir -p trunk &&
		echo hello >trunk/readme &&
		svn_cmd import -m "initial" . "$svnrepo"
	) &&
	svn_cmd co "$svnrepo" wc &&
	(
		cd wc &&
		echo world >>trunk/readme &&
		poke trunk/readme &&
		svn_cmd commit -m "another commit" &&
		svn_cmd up &&
		svn_cmd mv trunk thunk &&
		echo goodbye >>thunk/readme &&
		poke thunk/readme &&
		svn_cmd commit -m "bye now"
	)
	
Adding         trunk
Adding         trunk/readme
Committing transaction...
Committed revision 1.
A    wc/trunk
A    wc/trunk/readme
Checked out revision 1.
Sending        trunk/readme
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
A         thunk
D         trunk
D         trunk/readme
Adding         thunk
Sending        thunk/readme
Deleting       trunk
Transmitting file data .done
Committing transaction...
Committed revision 3.
ok 1 - initialize repo

expecting success of 9104.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)" &&
	git cat-file blob refs/remotes/thunk:readme >actual &&
	test "$(sed -n -e "3p" actual)" = goodbye &&
	test -z "$(git config --get svn-remote.svn.fetch \
		 "^trunk:refs/remotes/thunk@2$")"
	
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/thunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/thunk, 2
Initializing parent: refs/remotes/thunk@2
	A	readme
r1 = 47c2e16e193112e0eba50a203bf95f8339c7cbe3 (refs/remotes/thunk@2)
	M	readme
r2 = 4d87a23c71ee2b72d45101b01e8af0b46e113959 (refs/remotes/thunk@2)
Found branch parent: (refs/remotes/thunk) 4d87a23c71ee2b72d45101b01e8af0b46e113959
Following parent with do_switch
	M	readme
Successfully followed parent
r3 = 0b328d1356aa6fd0766f00f295056388a0d75ca7 (refs/remotes/thunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/thunk r3
ok 2 - init and fetch a moved directory

expecting success of 9104.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)" &&
	git cat-file blob refs/remotes/svn/thunk:readme >actual &&
	test "$(sed -n -e "3p" actual)" = goodbye
        
	A	readme
r1 = 47c2e16e193112e0eba50a203bf95f8339c7cbe3 (refs/remotes/svn/trunk)
	M	readme
r2 = 4d87a23c71ee2b72d45101b01e8af0b46e113959 (refs/remotes/svn/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/thunk, 2
Found branch parent: (refs/remotes/svn/thunk) 4d87a23c71ee2b72d45101b01e8af0b46e113959
Following parent with do_switch
	M	readme
Successfully followed parent
r3 = 0b328d1356aa6fd0766f00f295056388a0d75ca7 (refs/remotes/svn/thunk)
ok 3 - init and fetch from one svn-remote

expecting success of 9104.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)"
        
Committing transaction...
Committed revision 4.
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/junk, 2
Found branch parent: (refs/remotes/svn/junk) 4d87a23c71ee2b72d45101b01e8af0b46e113959
Following parent with do_switch
Successfully followed parent
r4 = 254d8ccc85ca4a9e167801b147fbfe68e90458ee (refs/remotes/svn/junk)
ok 4 - follow deleted parent

expecting success of 9104.5 'follow larger parent': 
        mkdir -p import/trunk/thunk/bump/thud &&
        echo hi > import/trunk/thunk/bump/thud/file &&
        svn import -m "import a larger parent" import "$svnrepo"/larger-parent &&
        svn cp -m "hi" "$svnrepo"/larger-parent "$svnrepo"/another-larger &&
        git svn init --minimize-url -i larger \
	  "$svnrepo"/larger-parent/trunk/thunk/bump/thud &&
        git svn fetch -i larger &&
	git svn init --minimize-url -i larger-parent \
	  "$svnrepo"/another-larger/trunk/thunk/bump/thud &&
	git svn fetch -i larger-parent &&
        git rev-parse --verify refs/remotes/larger &&
        git rev-parse --verify \
	   refs/remotes/larger-parent &&
	test "$(git merge-base \
		 refs/remotes/larger-parent \
		 refs/remotes/larger)" = \
	     "$(git rev-parse refs/remotes/larger)"
        
Adding         import/trunk
Adding         import/trunk/readme
Adding         import/trunk/thunk
Adding         import/trunk/thunk/bump
Adding         import/trunk/thunk/bump/thud
Adding         import/trunk/thunk/bump/thud/file
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/larger-parent/trunk/thunk/bump/thud => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
	A	file
r5 = 61e1d87f6def7192e83188e5172b1857f2578c11 (refs/remotes/larger)
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/another-larger/trunk/thunk/bump/thud => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
branch_from: /larger-parent => /larger-parent/trunk/thunk/bump/thud
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/larger-parent/trunk/thunk/bump/thud => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/another-larger/trunk/thunk/bump/thud, 5
Found branch parent: (refs/remotes/larger-parent) 61e1d87f6def7192e83188e5172b1857f2578c11
Following parent with do_switch
Successfully followed parent
r6 = 48fb2a084d5579b5d0cacd93ec534e123c068e5d (refs/remotes/larger-parent)
61e1d87f6def7192e83188e5172b1857f2578c11
48fb2a084d5579b5d0cacd93ec534e123c068e5d
ok 5 - follow larger parent

expecting success of 9104.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
        
Committing transaction...
Committed revision 7.
Checked out revision 7.
A         hi
Adding         hi
Transmitting file data .done
Committing transaction...
Committed revision 8.
Committing transaction...
Committed revision 9.
Committing transaction...
Committed revision 10.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob/blob => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/blob => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob/blob, 9
Initializing parent: refs/remotes/blob@9
r7 = 3cf65a6b4ecd731b5825461064d9982c0736da57 (refs/remotes/blob@9)
	A	hi
r8 = 27001058a0c17d41ce069fd475ef13eeb46a0ee8 (refs/remotes/blob@9)
Found branch parent: (refs/remotes/blob) 27001058a0c17d41ce069fd475ef13eeb46a0ee8
Following parent with do_switch
Successfully followed parent
r10 = ba92070fc5f5cdedfc018872318f0ac2015b28a3 (refs/remotes/blob)
ok 6 - follow higher-level parent

expecting success of 9104.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 &&
	git ls-tree refs/remotes/glob >actual &&
	test_line_count = 1 actual
	
Committing transaction...
Committed revision 11.
Committing transaction...
Committed revision 12.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
r9 = ebf6f5014af0af69048eb2534730ade1a1e72cd1 (refs/remotes/glob)
	A	blob/hi
r10 = 1c136ff1837faf80d6023d747ce95ff2205cbdc7 (refs/remotes/glob)
	D	hi
	A	bye
W: -empty_dir: glob/blob/hi
r11 = 1bf350a4ae5e634dcc4be6a3ab689cabab6aca78 (refs/remotes/blob)
	D	blob/hi
	A	blob/bye
W: -empty_dir: glob/blob/hi
r11 = 38d002e1b89931e03f28f4c48d8aa7d8c0f41afe (refs/remotes/glob)
ok 7 - follow deleted directory

expecting success of 9104.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 || return 1
	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 || return 1
		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)"
	
Adding         trunk
Adding         trunk/readme
Adding         trunk/subversion
Adding         trunk/subversion/bindings
Adding         trunk/subversion/bindings/swig
Adding         trunk/subversion/bindings/swig/perl
Adding         trunk/subversion/bindings/swig/perl/a.pm
Adding         trunk/subversion/bindings/swig/perl/another-larger
Adding         trunk/subversion/bindings/swig/perl/b.pm
Adding         trunk/subversion/bindings/swig/perl/c.pm
Adding         trunk/subversion/bindings/swig/perl/t
Adding         trunk/subversion/bindings/swig/perl/t/a.t
Adding         trunk/subversion/bindings/swig/perl/t/b.t
Adding         trunk/subversion/bindings/swig/perl/t/c.t
Adding         trunk/subversion/bindings/swig/perl/t/larger-parent
Adding         trunk/thunk
Adding         trunk/thunk/bump
Adding         trunk/thunk/bump/thud
Adding         trunk/thunk/bump/thud/file
Committing transaction...
Committed revision 13.
A    r9270/a.pm
A    r9270/another-larger
A    r9270/b.pm
A    r9270/c.pm
A    r9270/t
A    r9270/t/a.t
A    r9270/t/b.t
A    r9270/t/c.t
A    r9270/t/larger-parent
Checked out revision 13.
A         native
A         native/t
D         t
D         t/a.t
D         t/b.t
D         t/c.t
D         t/larger-parent
A         native/a.pm
D         a.pm
A         native/b.pm
D         b.pm
A         native/c.pm
D         c.pm
Deleting       a.pm
Deleting       b.pm
Deleting       c.pm
Adding         native
Adding         native/a.pm
Adding         native/b.pm
Adding         native/c.pm
Adding         native/t
Sending        native/t/c.t
Deleting       t
Transmitting file data .done
Committing transaction...
Committed revision 14.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t, 13
Initializing parent: refs/remotes/r9270-t@13
	A	a.t
	A	b.t
	A	c.t
	A	larger-parent
r13 = 99ff16dfb44db811d3c417bf98ce2154bed1f572 (refs/remotes/r9270-t@13)
Found branch parent: (refs/remotes/r9270-t) 99ff16dfb44db811d3c417bf98ce2154bed1f572
Following parent with do_switch
	M	c.t
Successfully followed parent
r14 = a60730c9982b926f3934b7ca95cb8a8858863bb6 (refs/remotes/r9270-t)
ok 8 - follow-parent avoids deleting relevant info

expecting success of 9104.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)"
	
Committing transaction...
Committed revision 15.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
branch_from: /r9270/trunk => /r9270/trunk/subversion/bindings/swig/perl/native/t
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t, 14
Found branch parent: (refs/remotes/r9270-d) a60730c9982b926f3934b7ca95cb8a8858863bb6
Following parent with do_switch
Successfully followed parent
r15 = 520c1ce58ab5cc8a305ad4e7e5dc6dcd1c0d382b (refs/remotes/r9270-d)
ok 9 - track initial change if it was only made to parent

expecting success of 9104.10 'follow-parent is atomic': 
	record_size=$(($(test_oid rawsz) + 4)) &&
	(
		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=$record_size 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)"
	
Updating '.':
A    another-larger
A    another-larger/trunk
A    another-larger/trunk/readme
A    another-larger/trunk/thunk
A    another-larger/trunk/thunk/bump
A    another-larger/trunk/thunk/bump/thud
A    another-larger/trunk/thunk/bump/thud/file
A    junk
A    junk/readme
A    larger-parent
A    larger-parent/trunk
A    larger-parent/trunk/readme
A    larger-parent/trunk/thunk
A    larger-parent/trunk/thunk/bump
A    larger-parent/trunk/thunk/bump/thud
A    larger-parent/trunk/thunk/bump/thud/file
A    r9270
A    r9270/drunk
A    r9270/drunk/readme
A    r9270/drunk/subversion
A    r9270/drunk/subversion/bindings
A    r9270/drunk/subversion/bindings/swig
A    r9270/drunk/subversion/bindings/swig/perl
A    r9270/drunk/subversion/bindings/swig/perl/another-larger
A    r9270/drunk/subversion/bindings/swig/perl/native
A    r9270/drunk/subversion/bindings/swig/perl/native/a.pm
A    r9270/drunk/subversion/bindings/swig/perl/native/b.pm
A    r9270/drunk/subversion/bindings/swig/perl/native/c.pm
A    r9270/drunk/subversion/bindings/swig/perl/native/t
A    r9270/drunk/subversion/bindings/swig/perl/native/t/a.t
A    r9270/drunk/subversion/bindings/swig/perl/native/t/b.t
A    r9270/drunk/subversion/bindings/swig/perl/native/t/c.t
A    r9270/drunk/subversion/bindings/swig/perl/native/t/larger-parent
A    r9270/drunk/thunk
A    r9270/drunk/thunk/bump
A    r9270/drunk/thunk/bump/thud
A    r9270/drunk/thunk/bump/thud/file
A    r9270/trunk
A    r9270/trunk/readme
A    r9270/trunk/subversion
A    r9270/trunk/subversion/bindings
A    r9270/trunk/subversion/bindings/swig
A    r9270/trunk/subversion/bindings/swig/perl
A    r9270/trunk/subversion/bindings/swig/perl/another-larger
A    r9270/trunk/subversion/bindings/swig/perl/native
A    r9270/trunk/subversion/bindings/swig/perl/native/a.pm
A    r9270/trunk/subversion/bindings/swig/perl/native/b.pm
A    r9270/trunk/subversion/bindings/swig/perl/native/c.pm
A    r9270/trunk/subversion/bindings/swig/perl/native/t
A    r9270/trunk/subversion/bindings/swig/perl/native/t/a.t
A    r9270/trunk/subversion/bindings/swig/perl/native/t/b.t
A    r9270/trunk/subversion/bindings/swig/perl/native/t/c.t
A    r9270/trunk/subversion/bindings/swig/perl/native/t/larger-parent
A    r9270/trunk/thunk
A    r9270/trunk/thunk/bump
A    r9270/trunk/thunk/bump/thud
A    r9270/trunk/thunk/bump/thud/file
Updated to revision 15.
A         stunk
A         stunk/readme
Adding         stunk
Adding         stunk/readme
Transmitting file data .done
Committing transaction...
Committed revision 16.
Sending        stunk/readme
Transmitting file data .done
Committing transaction...
Committed revision 17.
Sending        stunk/readme
Transmitting file data .done
Committing transaction...
Committed revision 18.
Committing transaction...
Committed revision 19.
Committing transaction...
Committed revision 20.
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
	A	readme
r16 = f78e839ef17872fd5c3be550d29c90446c1ea7ed (refs/remotes/stunk)
	M	readme
r17 = 05c8ce99186e612c2dc5465681eca25ee1e4da83 (refs/remotes/stunk)
	M	readme
r18 = b6be7d0a3a82283ee763084cb3eae688e23ffbda (refs/remotes/stunk)
1+0 records in
1+0 records out
24 bytes copied, 0.00054502 s, 44.0 kB/s
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunk, 18
Initializing parent: refs/remotes/flunk@18
	M	readme
r17 = 05c8ce99186e612c2dc5465681eca25ee1e4da83 (refs/remotes/flunk@18)
	M	readme
r18 = b6be7d0a3a82283ee763084cb3eae688e23ffbda (refs/remotes/flunk@18)
Found branch parent: (refs/remotes/flunk) b6be7d0a3a82283ee763084cb3eae688e23ffbda
Following parent with do_switch
Successfully followed parent
r19 = 531976fdc5b5573ff43b5648cfb5156b9291e41b (refs/remotes/flunk)
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
	A	readme
r16 = f78e839ef17872fd5c3be550d29c90446c1ea7ed (refs/remotes/stunk)
	M	readme
r17 = 05c8ce99186e612c2dc5465681eca25ee1e4da83 (refs/remotes/stunk)
	M	readme
r18 = b6be7d0a3a82283ee763084cb3eae688e23ffbda (refs/remotes/stunk)
Using existing [svn-remote "svn"]
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunked => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunked, 17
Found branch parent: (refs/remotes/flunked) 05c8ce99186e612c2dc5465681eca25ee1e4da83
Following parent with do_switch
Successfully followed parent
r20 = 3ed848e79f24032302d7ff3c61c41b9e49d585d9 (refs/remotes/flunked)
ok 10 - follow-parent is atomic

expecting success of 9104.11 'track multi-parent paths': 
	svn_cmd cp -m "resurrect /glob" "$svnrepo"/r9270 "$svnrepo"/glob &&
	git svn multi-fetch &&
	git cat-file commit refs/remotes/glob >actual &&
	grep "^parent " actual >actual2 &&
	test_line_count = 2 actual2
	
Committing transaction...
Committed revision 21.
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob, 20
Initializing parent: refs/remotes/glob@20
	A	trunk/readme
	A	trunk/subversion/bindings/swig/perl/a.pm
	A	trunk/subversion/bindings/swig/perl/another-larger
	A	trunk/subversion/bindings/swig/perl/b.pm
	A	trunk/subversion/bindings/swig/perl/c.pm
	A	trunk/subversion/bindings/swig/perl/t/a.t
	A	trunk/subversion/bindings/swig/perl/t/b.t
	A	trunk/subversion/bindings/swig/perl/t/c.t
	A	trunk/subversion/bindings/swig/perl/t/larger-parent
	A	trunk/thunk/bump/thud/file
r13 = c2453cc1ea2512b4b050e4d82e317bd9f24f744f (refs/remotes/glob@20)
	D	trunk/subversion/bindings/swig/perl/t/a.t
	D	trunk/subversion/bindings/swig/perl/t/b.t
	D	trunk/subversion/bindings/swig/perl/t/c.t
	D	trunk/subversion/bindings/swig/perl/t/larger-parent
	D	trunk/subversion/bindings/swig/perl/t/
	D	trunk/subversion/bindings/swig/perl/a.pm
	D	trunk/subversion/bindings/swig/perl/b.pm
	D	trunk/subversion/bindings/swig/perl/c.pm
	A	trunk/subversion/bindings/swig/perl/native/a.pm
	A	trunk/subversion/bindings/swig/perl/native/b.pm
	A	trunk/subversion/bindings/swig/perl/native/c.pm
	A	trunk/subversion/bindings/swig/perl/native/t/a.t
	A	trunk/subversion/bindings/swig/perl/native/t/b.t
	A	trunk/subversion/bindings/swig/perl/native/t/c.t
	A	trunk/subversion/bindings/swig/perl/native/t/larger-parent
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/a.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/b.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/c.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/t
r14 = 8433f2e9a6e12a1c2418797924e1c56bb35a2705 (refs/remotes/glob@20)
	A	drunk/readme
	A	drunk/subversion/bindings/swig/perl/another-larger
	A	drunk/subversion/bindings/swig/perl/native/a.pm
	A	drunk/subversion/bindings/swig/perl/native/b.pm
	A	drunk/subversion/bindings/swig/perl/native/c.pm
	A	drunk/subversion/bindings/swig/perl/native/t/a.t
	A	drunk/subversion/bindings/swig/perl/native/t/b.t
	A	drunk/subversion/bindings/swig/perl/native/t/c.t
	A	drunk/subversion/bindings/swig/perl/native/t/larger-parent
	A	drunk/thunk/bump/thud/file
r15 = cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c (refs/remotes/glob@20)
Found branch parent: (refs/remotes/glob) cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c
Index mismatch: 3cd9c37c278d8b60927f43385900d57622921efe != b80e441d0bfb8031c1110b908fb333507c1b9180
rereading cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c
Following parent with do_switch
Successfully followed parent
r21 = c97756257004e7977864059a21c5c83b60ef2934 (refs/remotes/glob)
ok 11 - track multi-parent paths

expecting success of 9104.12 'multi-fetch continues to work': 
	git svn multi-fetch
	
ok 12 - multi-fetch continues to work

expecting success of 9104.13 'multi-fetch works off a 'clean' repository': 
	rm -rf "$GIT_DIR/svn" &&
	git for-each-ref --format="option no-deref%0adelete %(refname)" refs/remotes |
	git update-ref --stdin &&
	git reflog expire --all --expire=all &&
	mkdir "$GIT_DIR/svn" &&
	git svn multi-fetch
	
	A	readme
r1 = 47c2e16e193112e0eba50a203bf95f8339c7cbe3 (refs/remotes/svn/trunk)
	M	readme
r2 = 4d87a23c71ee2b72d45101b01e8af0b46e113959 (refs/remotes/svn/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/thunk, 2
Found branch parent: (refs/remotes/svn/thunk) 4d87a23c71ee2b72d45101b01e8af0b46e113959
Following parent with do_switch
	M	readme
Successfully followed parent
r3 = 0b328d1356aa6fd0766f00f295056388a0d75ca7 (refs/remotes/svn/thunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/junk, 2
Found branch parent: (refs/remotes/svn/junk) 4d87a23c71ee2b72d45101b01e8af0b46e113959
Following parent with do_switch
Successfully followed parent
r4 = 254d8ccc85ca4a9e167801b147fbfe68e90458ee (refs/remotes/svn/junk)
	A	file
r5 = 61e1d87f6def7192e83188e5172b1857f2578c11 (refs/remotes/larger)
branch_from: /larger-parent => /larger-parent/trunk/thunk/bump/thud
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/larger-parent/trunk/thunk/bump/thud => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/another-larger/trunk/thunk/bump/thud, 5
Found branch parent: (refs/remotes/larger-parent) 61e1d87f6def7192e83188e5172b1857f2578c11
Following parent with do_switch
Successfully followed parent
r6 = 48fb2a084d5579b5d0cacd93ec534e123c068e5d (refs/remotes/larger-parent)
r9 = ebf6f5014af0af69048eb2534730ade1a1e72cd1 (refs/remotes/glob)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/blob => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob/blob, 9
Initializing parent: refs/remotes/blob@9
r7 = 3cf65a6b4ecd731b5825461064d9982c0736da57 (refs/remotes/blob@9)
	A	hi
r8 = 27001058a0c17d41ce069fd475ef13eeb46a0ee8 (refs/remotes/blob@9)
Found branch parent: (refs/remotes/blob) 27001058a0c17d41ce069fd475ef13eeb46a0ee8
Following parent with do_switch
Successfully followed parent
r10 = ba92070fc5f5cdedfc018872318f0ac2015b28a3 (refs/remotes/blob)
	A	blob/hi
r10 = 1c136ff1837faf80d6023d747ce95ff2205cbdc7 (refs/remotes/glob)
	D	hi
	A	bye
W: -empty_dir: glob/blob/hi
r11 = 1bf350a4ae5e634dcc4be6a3ab689cabab6aca78 (refs/remotes/blob)
	D	blob/hi
	A	blob/bye
W: -empty_dir: glob/blob/hi
r11 = 38d002e1b89931e03f28f4c48d8aa7d8c0f41afe (refs/remotes/glob)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t, 13
Initializing parent: refs/remotes/r9270-t@13
	A	a.t
	A	b.t
	A	c.t
	A	larger-parent
r13 = 99ff16dfb44db811d3c417bf98ce2154bed1f572 (refs/remotes/r9270-t@13)
Found branch parent: (refs/remotes/r9270-t) 99ff16dfb44db811d3c417bf98ce2154bed1f572
Following parent with do_switch
	M	c.t
Successfully followed parent
r14 = a60730c9982b926f3934b7ca95cb8a8858863bb6 (refs/remotes/r9270-t)
branch_from: /r9270/trunk => /r9270/trunk/subversion/bindings/swig/perl/native/t
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t, 14
Found branch parent: (refs/remotes/r9270-d) a60730c9982b926f3934b7ca95cb8a8858863bb6
Following parent with do_switch
Successfully followed parent
r15 = 520c1ce58ab5cc8a305ad4e7e5dc6dcd1c0d382b (refs/remotes/r9270-d)
	A	readme
r16 = f78e839ef17872fd5c3be550d29c90446c1ea7ed (refs/remotes/stunk)
	M	readme
r17 = 05c8ce99186e612c2dc5465681eca25ee1e4da83 (refs/remotes/stunk)
	M	readme
r18 = b6be7d0a3a82283ee763084cb3eae688e23ffbda (refs/remotes/stunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunk, 18
Found branch parent: (refs/remotes/flunk) b6be7d0a3a82283ee763084cb3eae688e23ffbda
Following parent with do_switch
Successfully followed parent
r19 = 531976fdc5b5573ff43b5648cfb5156b9291e41b (refs/remotes/flunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/stunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/flunked, 17
Found branch parent: (refs/remotes/flunked) 05c8ce99186e612c2dc5465681eca25ee1e4da83
Following parent with do_switch
Successfully followed parent
r20 = 3ed848e79f24032302d7ff3c61c41b9e49d585d9 (refs/remotes/flunked)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/r9270 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9104-git-svn-follow-parent/svnrepo/glob, 20
Initializing parent: refs/remotes/glob@20
	A	trunk/readme
	A	trunk/subversion/bindings/swig/perl/a.pm
	A	trunk/subversion/bindings/swig/perl/another-larger
	A	trunk/subversion/bindings/swig/perl/b.pm
	A	trunk/subversion/bindings/swig/perl/c.pm
	A	trunk/subversion/bindings/swig/perl/t/a.t
	A	trunk/subversion/bindings/swig/perl/t/b.t
	A	trunk/subversion/bindings/swig/perl/t/c.t
	A	trunk/subversion/bindings/swig/perl/t/larger-parent
	A	trunk/thunk/bump/thud/file
r13 = c2453cc1ea2512b4b050e4d82e317bd9f24f744f (refs/remotes/glob@20)
	D	trunk/subversion/bindings/swig/perl/t/a.t
	D	trunk/subversion/bindings/swig/perl/t/b.t
	D	trunk/subversion/bindings/swig/perl/t/c.t
	D	trunk/subversion/bindings/swig/perl/t/larger-parent
	D	trunk/subversion/bindings/swig/perl/t/
	D	trunk/subversion/bindings/swig/perl/a.pm
	D	trunk/subversion/bindings/swig/perl/b.pm
	D	trunk/subversion/bindings/swig/perl/c.pm
	A	trunk/subversion/bindings/swig/perl/native/a.pm
	A	trunk/subversion/bindings/swig/perl/native/b.pm
	A	trunk/subversion/bindings/swig/perl/native/c.pm
	A	trunk/subversion/bindings/swig/perl/native/t/a.t
	A	trunk/subversion/bindings/swig/perl/native/t/b.t
	A	trunk/subversion/bindings/swig/perl/native/t/c.t
	A	trunk/subversion/bindings/swig/perl/native/t/larger-parent
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/a.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/b.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/c.pm
W: -empty_dir: r9270/trunk/subversion/bindings/swig/perl/t
r14 = 8433f2e9a6e12a1c2418797924e1c56bb35a2705 (refs/remotes/glob@20)
	A	drunk/readme
	A	drunk/subversion/bindings/swig/perl/another-larger
	A	drunk/subversion/bindings/swig/perl/native/a.pm
	A	drunk/subversion/bindings/swig/perl/native/b.pm
	A	drunk/subversion/bindings/swig/perl/native/c.pm
	A	drunk/subversion/bindings/swig/perl/native/t/a.t
	A	drunk/subversion/bindings/swig/perl/native/t/b.t
	A	drunk/subversion/bindings/swig/perl/native/t/c.t
	A	drunk/subversion/bindings/swig/perl/native/t/larger-parent
	A	drunk/thunk/bump/thud/file
r15 = cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c (refs/remotes/glob@20)
Found branch parent: (refs/remotes/glob) cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c
Index mismatch: 3cd9c37c278d8b60927f43385900d57622921efe != b80e441d0bfb8031c1110b908fb333507c1b9180
rereading cf37ff7dd6e6760c20f79fc2c8d6d6cef5b3523c
Following parent with do_switch
Successfully followed parent
r21 = c97756257004e7977864059a21c5c83b60ef2934 (refs/remotes/glob)
ok 13 - multi-fetch works off a 'clean' repository

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9118-git-svn-funky-branch-names.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9118-git-svn-funky-branch-names/.git/
expecting success of 9118.1 'setup svnrepo': 
	mkdir project project/trunk project/branches project/tags &&
	echo foo > project/trunk/foo &&
	svn_cmd import -m "$test_description" project "$svnrepo/pr ject" &&
	rm -rf project &&
	svn_cmd cp -m "fun" "$svnrepo/pr ject/trunk" \
	                "$svnrepo/pr ject/branches/fun plugin" &&
	svn_cmd cp -m "more fun!" "$svnrepo/pr ject/branches/fun plugin" \
	                      "$svnrepo/pr ject/branches/more fun plugin!" &&
	svn_cmd cp -m "scary" "$svnrepo/pr ject/branches/fun plugin" \
	              "$svnrepo/pr ject/branches/$scary_uri" &&
	svn_cmd cp -m "leading dot" "$svnrepo/pr ject/trunk" \
			"$svnrepo/pr ject/branches/.leading_dot" &&
	if test_have_prereq !MINGW
	then
		svn_cmd cp -m "trailing dot" "$svnrepo/pr ject/trunk" \
			"$svnrepo/pr ject/branches/trailing_dot."
	fi &&
	svn_cmd cp -m "trailing .lock" "$svnrepo/pr ject/trunk" \
			"$svnrepo/pr ject/branches/trailing_dotlock.lock" &&
	svn_cmd cp -m "reflog" "$svnrepo/pr ject/trunk" \
			"$svnrepo/pr ject/branches/not-a@{0}reflog@" &&
	maybe_start_httpd
	
Adding         project/branches
Adding         project/tags
Adding         project/trunk
Adding         project/trunk/foo
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
Committing transaction...
Committed revision 8.
ok 1 - setup svnrepo

expecting success of 9118.2 'test clone with funky branch names': 
	git svn clone -s "$svnrepo/pr ject" project &&
	(
		cd project &&
		git rev-parse "refs/remotes/origin/fun%20plugin" &&
		git rev-parse "refs/remotes/origin/more%20fun%20plugin!" &&
		git rev-parse "refs/remotes/origin/$scary_ref" &&
		git rev-parse "refs/remotes/origin/%2Eleading_dot" &&
		if test_have_prereq !MINGW
		then
			git rev-parse "refs/remotes/origin/trailing_dot%2E"
		fi &&
		git rev-parse "refs/remotes/origin/trailing_dotlock%2Elock" &&
		git rev-parse "refs/remotes/origin/$non_reflog"
	)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9118-git-svn-funky-branch-names/project/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo
	A	foo
r1 = b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/fun%20plugin, 1
Found branch parent: (refs/remotes/origin/fun plugin) b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8
Following parent with do_switch
Successfully followed parent
r2 = 80374fbddf0434d6b267e54dd36733a32c963945 (refs/remotes/origin/fun plugin)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/fun%20plugin => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/more%20fun%20plugin!, 2
Found branch parent: (refs/remotes/origin/more fun plugin!) 80374fbddf0434d6b267e54dd36733a32c963945
Following parent with do_switch
Successfully followed parent
r3 = a5dfcf095c16ee42a8a09f17458593350ceaa123 (refs/remotes/origin/more fun plugin!)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/fun%20plugin => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/Abo-Uebernahme%20(Bug%20%23994), 3
Found branch parent: (refs/remotes/origin/Abo-Uebernahme (Bug #994)) 80374fbddf0434d6b267e54dd36733a32c963945
Following parent with do_switch
Successfully followed parent
r4 = a63168803f952142db01b918da1bdcd2664ccf17 (refs/remotes/origin/Abo-Uebernahme (Bug #994))
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/.leading_dot, 4
Found branch parent: (refs/remotes/origin/.leading_dot) b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8
Following parent with do_switch
Successfully followed parent
r5 = fe7eb9290dfbc2ea7cba5043ef5959a79a6b802a (refs/remotes/origin/.leading_dot)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/trailing_dot., 5
Found branch parent: (refs/remotes/origin/trailing_dot.) b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8
Following parent with do_switch
Successfully followed parent
r6 = aa268ce207eac957936a69541b49be1516ff9f94 (refs/remotes/origin/trailing_dot.)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/trailing_dotlock.lock, 6
Found branch parent: (refs/remotes/origin/trailing_dotlock.lock) b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8
Following parent with do_switch
Successfully followed parent
r7 = e7f2572098df9cee35a782d13d58d3b5e2996435 (refs/remotes/origin/trailing_dotlock.lock)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/not-a@%7B0%7Dreflog, 7
Found branch parent: (refs/remotes/origin/not-a@{0}reflog) b3eb7a1a0028d7a86c4fdee8228f7d657345d1a8
Following parent with do_switch
Successfully followed parent
r8 = 6a617b65e1aefa6417da790ebb9f7d445ee9703c (refs/remotes/origin/not-a@{0}reflog)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/trunk r1
80374fbddf0434d6b267e54dd36733a32c963945
a5dfcf095c16ee42a8a09f17458593350ceaa123
a63168803f952142db01b918da1bdcd2664ccf17
fe7eb9290dfbc2ea7cba5043ef5959a79a6b802a
aa268ce207eac957936a69541b49be1516ff9f94
e7f2572098df9cee35a782d13d58d3b5e2996435
6a617b65e1aefa6417da790ebb9f7d445ee9703c
ok 2 - test clone with funky branch names

expecting success of 9118.3 'test dcommit to funky branch': 
	(
		cd project &&
		git reset --hard 'refs/remotes/origin/more%20fun%20plugin!' &&
		echo hello >> foo &&
		git commit -m 'hello' -- foo &&
		git svn dcommit
	)
	
HEAD is now at a5dfcf0 more fun!
[master 4844f51] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/more%20fun%20plugin! ...
	M	foo
Committed r9
	M	foo
r9 = d2b107d58ecd428bda5863ede377d9d31528afd8 (refs/remotes/origin/more fun plugin!)
No changes between 4844f513871370ad8ce7a2be41e48dcf9afc57c9 and refs/remotes/origin/more%20fun%20plugin!
Resetting to the latest refs/remotes/origin/more%20fun%20plugin!
ok 3 - test dcommit to funky branch

expecting success of 9118.4 'test dcommit to scary branch': 
	(
		cd project &&
		git reset --hard "refs/remotes/origin/$scary_ref" &&
		echo urls are scary >> foo &&
		git commit -m "eep" -- foo &&
		git svn dcommit
	)
	
HEAD is now at a631688 scary
[master db28cde] eep
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/Abo-Uebernahme%20(Bug%20%23994) ...
	M	foo
Committed r10
	M	foo
r10 = f6908226f57ea926ebb4d7d236a782a5d52a849d (refs/remotes/origin/Abo-Uebernahme (Bug #994))
No changes between db28cde439f375ec849ec7aac11d18f770c5612f and refs/remotes/origin/Abo-Uebernahme%20(Bug%20#994)
Resetting to the latest refs/remotes/origin/Abo-Uebernahme%20(Bug%20#994)
ok 4 - test dcommit to scary branch

expecting success of 9118.5 'test dcommit to trailing_dotlock branch': 
	(
		cd project &&
		git reset --hard "refs/remotes/origin/trailing_dotlock%2Elock" &&
		echo who names branches like this anyway? >> foo &&
		git commit -m "bar" -- foo &&
		git svn dcommit
	)
	
HEAD is now at e7f2572 trailing .lock
[master c9b8276] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9118-git-svn-funky-branch-names/svnrepo/pr%20ject/branches/trailing_dotlock.lock ...
	M	foo
Committed r11
	M	foo
r11 = 68e8e6ccb6a0eac6a4d122af0c645f202f2db396 (refs/remotes/origin/trailing_dotlock.lock)
No changes between c9b827629a322c5a4e954c218feeec1957b06323 and refs/remotes/origin/trailing_dotlock%2Elock
Resetting to the latest refs/remotes/origin/trailing_dotlock%2Elock
ok 5 - test dcommit to trailing_dotlock branch

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9119-git-svn-info.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9119-git-svn-info/.git/
1..0 # SKIP skipping svn-info test (SVN version: 1.14.2 not supported)
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9117-git-svn-init-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/.git/
expecting success of 9117.1 'setup svnrepo': 
	mkdir project project/trunk project/branches project/tags &&
	echo foo > project/trunk/foo &&
	svn_cmd import -m "$test_description" project "$svnrepo"/project &&
	rm -rf project
	
Adding         project/branches
Adding         project/tags
Adding         project/trunk
Adding         project/trunk/foo
Committing transaction...
Committed revision 1.
ok 1 - setup svnrepo

expecting success of 9117.2 'basic clone': 
	test ! -d trunk &&
	git svn clone "$svnrepo"/project/trunk &&
	test -d trunk/.git/svn &&
	test -e trunk/foo &&
	rm -rf trunk
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/trunk/.git/
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project/trunk r1
ok 2 - basic clone

expecting success of 9117.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
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/target/.git/
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project/trunk r1
ok 3 - clone to target directory

expecting success of 9117.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
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/project/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project/trunk r1
ok 4 - clone with --stdlayout

expecting success of 9117.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
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/target/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project/trunk r1
ok 5 - clone to target directory with --stdlayout

expecting success of 9117.6 'init without -s/-T/-b/-t does not warn': 
	test ! -d trunk &&
	git svn init "$svnrepo"/project/trunk trunk 2>warning &&
	! grep -q prefix warning &&
	rm -rf trunk &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/trunk/.git/
ok 6 - init without -s/-T/-b/-t does not warn

expecting success of 9117.7 'clone without -s/-T/-b/-t does not warn': 
	test ! -d trunk &&
	git svn clone "$svnrepo"/project/trunk 2>warning &&
	! grep -q prefix warning &&
	rm -rf trunk &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/trunk/.git/
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/git-svn)
ok 7 - clone without -s/-T/-b/-t does not warn

expecting success of 9117.8 'init with -s/-T/-b/-t assumes --prefix=origin/': 
	test ! -d project &&
	git svn init -s "$svnrepo"/project project 2>warning &&
	! grep -q prefix warning &&
	test_svn_configured_prefix "origin/" &&
	rm -rf project &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/project/.git/
ok 8 - init with -s/-T/-b/-t assumes --prefix=origin/

expecting success of 9117.9 'clone with -s/-T/-b/-t assumes --prefix=origin/': 
	test ! -d project &&
	git svn clone -s "$svnrepo"/project 2>warning &&
	! grep -q prefix warning &&
	test_svn_configured_prefix "origin/" &&
	rm -rf project &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/project/.git/
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/origin/trunk)
ok 9 - clone with -s/-T/-b/-t assumes --prefix=origin/

expecting success of 9117.10 'init with -s/-T/-b/-t and --prefix "" still works': 
	test ! -d project &&
	git svn init -s "$svnrepo"/project project --prefix "" 2>warning &&
	! grep -q prefix warning &&
	test_svn_configured_prefix "" &&
	rm -rf project &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/project/.git/
ok 10 - init with -s/-T/-b/-t and --prefix "" still works

expecting success of 9117.11 'clone with -s/-T/-b/-t and --prefix "" still works': 
	test ! -d project &&
	git svn clone -s "$svnrepo"/project --prefix "" 2>warning &&
	! grep -q prefix warning &&
	test_svn_configured_prefix "" &&
	rm -rf project &&
	rm -f warning
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9117-git-svn-init-clone/project/.git/
	A	foo
r1 = 3f3ba651fce3e0ba594ff060f044a585533a6897 (refs/remotes/trunk)
ok 11 - clone with -s/-T/-b/-t and --prefix "" still works

expecting success of 9117.12 'init with -T as a full url works': 
	test ! -d project &&
	git svn init -T "$svnrepo"/project/trunk project &&
	rm -rf project
	
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9117-git-svn-init-clone/svnrepo
ok 12 - init with -T as a full url works

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9121-git-svn-fetch-renamed-dir.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9121-git-svn-fetch-renamed-dir/.git/
expecting success of 9121.1 'load repository with renamed directory': 
	svnadmin load -q "$rawsvnrepo" < "$TEST_DIRECTORY"/t9121/renamed-dir.dump
	
ok 1 - load repository with renamed directory

expecting success of 9121.2 'init and fetch repository': 
	git svn init "$svnrepo/newname" &&
	git svn fetch
	
	A	a.txt
r2 = 8019ed2ee84a8c12bb9cf19dc5f9381a4e08ce7f (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9121-git-svn-fetch-renamed-dir/svnrepo/newname r2
ok 2 - init and fetch repository

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9115-git-svn-dcommit-funky-renames.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9115-git-svn-dcommit-funky-renames/.git/
expecting success of 9115.1 'load repository with strange names': 
	svnadmin load -q "$rawsvnrepo" <"$TEST_DIRECTORY"/t9115/funky-names.dump

ok 1 - load repository with strange names

expecting success of 9115.2 'init and fetch repository': 
	git svn init "$svnrepo" &&
	git svn fetch &&
	git reset --hard git-svn
	
	A	 leading space file
	A	#{cool_name}
	A	file name with spaces
W: +empty_dir:  leading space
W: +empty_dir: #{bad_directory_name}
W: +empty_dir: dir name with spaces
W: +empty_dir: regular_dir_name
r1 = be0751cc7213501d7985b26084a5ccb47965b9ea (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo r1
creating empty directory:  leading space
creating empty directory: #{bad_directory_name}
creating empty directory: dir name with spaces
creating empty directory: regular_dir_name
HEAD is now at be0751c what will those wacky people think of next?
ok 2 - init and fetch repository

expecting success of 9115.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
	
[master f376398] new file in ugly parent
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 #{bad_directory_name}/ foo
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	A	#{bad_directory_name}/ foo
Committed r2
	A	#{bad_directory_name}/ foo
r2 = 3ac727a95c31b05caa30c9c71aab89c31330b42a (refs/remotes/git-svn)
No changes between f376398405572f0a147bf7403a88f7a09c3dff32 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 3 - create file in existing ugly and empty dir

expecting success of 9115.4 'rename ugly file': 
	git mv "#{bad_directory_name}/ foo" "file name with feces" &&
	git commit -m "rename ugly file" &&
	git svn dcommit
	
[master b7c0ba4] rename ugly file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename #{bad_directory_name}/ foo => file name with feces (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	R	#{bad_directory_name}/ foo => file name with feces
Committed r3
	D	#{bad_directory_name}/ foo
	A	file name with feces
W: -empty_dir: #{bad_directory_name}/ foo
r3 = a2304fc6eb6a2f26e8b45ebe402f19e5a98f39f1 (refs/remotes/git-svn)
No changes between b7c0ba458c0ec9880557372243758cecff6b3b13 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 4 - rename ugly file

expecting success of 9115.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
	
[master ba72aa4] pretty :x
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 pretty
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	A	pretty
Committed r4
	A	pretty
r4 = 03854a3921470270fd4e011090c8e521a732ba59 (refs/remotes/git-svn)
No changes between ba72aa42e2e0cab6a3bce787513b341db776d488 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
[master 54b2f93] moved pretty file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename pretty => regular_dir_name/pretty (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	R	pretty => regular_dir_name/pretty
Committed r5
	D	pretty
	A	regular_dir_name/pretty
W: -empty_dir: pretty
r5 = 1c61f7370a14062b4b5c1a398a3e2b3b6aa5a966 (refs/remotes/git-svn)
No changes between 54b2f9303fd8c0877415f8f1fec0f1b1a6e381b5 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 5 - rename pretty file

expecting success of 9115.6 'rename pretty file into ugly one': 
	git mv regular_dir_name/pretty "#{bad_directory_name}/ booboo" &&
	git commit -m booboo &&
	git svn dcommit
	
[master 3f0fd0a] booboo
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename regular_dir_name/pretty => #{bad_directory_name}/ booboo (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	R	regular_dir_name/pretty => #{bad_directory_name}/ booboo
Committed r6
	A	#{bad_directory_name}/ booboo
	D	regular_dir_name/pretty
W: -empty_dir: regular_dir_name/pretty
r6 = 78964f6258000c22fb1c81a6533760048afe958b (refs/remotes/git-svn)
No changes between 3f0fd0a4c90e29b9778648438b0cf9f6ef237503 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 6 - rename pretty file into ugly one

expecting success of 9115.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
	
[master 6d887b2] plus
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 +_+
[master ecf9ed6] plus_dir
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename +_+ => gtk+/_+_ (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	A	+_+
Committed r7
	A	+_+
r7 = ee96f73aa747b0e8ef8c20c00ba6caa8d610ed27 (refs/remotes/git-svn)
	R	+_+ => gtk+/_+_
Committed r8
	D	+_+
	A	gtk+/_+_
W: -empty_dir: +_+
r8 = 39645c119e0b39f3593c7fdc59f3d6ed45f9befa (refs/remotes/git-svn)
No changes between ecf9ed6d4d0c653e2f4ed194d9f971d9ede51821 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 7 - add a file with plus signs

expecting success of 9115.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
	)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9115-git-svn-dcommit-funky-renames/test-rebase/.git/
	A	 leading space file
	A	#{cool_name}
	A	file name with spaces
W: +empty_dir:  leading space
W: +empty_dir: #{bad_directory_name}
W: +empty_dir: dir name with spaces
W: +empty_dir: regular_dir_name
r1 = be0751cc7213501d7985b26084a5ccb47965b9ea (refs/remotes/git-svn)
	A	#{bad_directory_name}/ foo
r2 = 3ac727a95c31b05caa30c9c71aab89c31330b42a (refs/remotes/git-svn)
	D	#{bad_directory_name}/ foo
	A	file name with feces
W: -empty_dir: #{bad_directory_name}/ foo
r3 = a2304fc6eb6a2f26e8b45ebe402f19e5a98f39f1 (refs/remotes/git-svn)
	A	pretty
r4 = 03854a3921470270fd4e011090c8e521a732ba59 (refs/remotes/git-svn)
	D	pretty
	A	regular_dir_name/pretty
W: -empty_dir: pretty
r5 = 1c61f7370a14062b4b5c1a398a3e2b3b6aa5a966 (refs/remotes/git-svn)
	A	#{bad_directory_name}/ booboo
	D	regular_dir_name/pretty
W: -empty_dir: regular_dir_name/pretty
r6 = 78964f6258000c22fb1c81a6533760048afe958b (refs/remotes/git-svn)
	A	+_+
r7 = ee96f73aa747b0e8ef8c20c00ba6caa8d610ed27 (refs/remotes/git-svn)
	D	+_+
	A	gtk+/_+_
W: -empty_dir: +_+
r8 = 39645c119e0b39f3593c7fdc59f3d6ed45f9befa (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo r8
creating empty directory:  leading space
creating empty directory: dir name with spaces
creating empty directory: regular_dir_name
[master 96cabe8] test-rebase
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-rebase
ok 8 - clone the repository to test rebase

expecting success of 9115.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
	
[master 105c712] test-rebase-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 test-rebase-main
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
	A	test-rebase-main
Committed r9
	A	test-rebase-main
r9 = 2532161d5c9fbae00a27d8c62fb13c1b0eb99707 (refs/remotes/git-svn)
No changes between 105c71267dcba4d7bc948fc28bf51ca8c6df9036 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 9 - make a commit to test rebase

expecting success of 9115.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
	)
	A	test-rebase-main
r9 = 2532161d5c9fbae00a27d8c62fb13c1b0eb99707 (refs/remotes/git-svn)
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 10 - git svn rebase works inside a fresh-cloned repository

checking prerequisite: UTF8_NFD_TO_NFC

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UTF8_NFD_TO_NFC" &&
	# check whether FS converts nfd unicode to nfc
	auml=$(printf "\303\244")
	aumlcdiar=$(printf "\141\314\210")
	>"$auml" &&
	test -f "$aumlcdiar"

)
prerequisite UTF8_NFD_TO_NFC not satisfied
expecting success of 9115.11 'svn.pathnameencoding=cp932 new file on dcommit': 
	LC_ALL=$GIT_TEST_UTF8_LOCALE &&
	export LC_ALL &&
	neq=$(printf "\201\202") &&
	git config svn.pathnameencoding cp932 &&
	echo neq >"$neq" &&
	git add "$neq" &&
	git commit -m "neq" &&
	git svn dcommit

[master ce60e8b] neq
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 "\201\202"
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
Committed r10
r10 = dca59dfd54c1a8eace7a31aca908735cd3b8bc58 (refs/remotes/git-svn)
No changes between ce60e8bf621557f9f3eeecf6f06c8604d182eeca and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 11 - svn.pathnameencoding=cp932 new file on dcommit

expecting success of 9115.12 'svn.pathnameencoding=cp932 rename on dcommit': 
	LC_ALL=$GIT_TEST_UTF8_LOCALE &&
	export LC_ALL &&
	inf=$(printf "\201\207") &&
	git config svn.pathnameencoding cp932 &&
	echo inf >"$inf" &&
	git add "$inf" &&
	git commit -m "inf" &&
	git svn dcommit &&
	git mv "$inf" inf &&
	git commit -m "inf rename" &&
	git svn dcommit

[master 182ffda] inf
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 "\201\207"
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
Committed r11
r11 = 58e9976417c7ebbfeb70fcb926a08ec077741edc (refs/remotes/git-svn)
No changes between 182ffdacab0d0e6a310087daa2a9419de79b7720 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
[master 8024cbe] inf rename
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename "\201\207" => inf (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9115-git-svn-dcommit-funky-renames/svnrepo ...
Committed r12
	A	inf
W: -empty_dir: ∞
r12 = b0f5bfb2b4367d4f1848b7766b23a84e79a49e33 (refs/remotes/git-svn)
No changes between 8024cbe7c94911d604a75666f9663b15fe4c32ca and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 12 - svn.pathnameencoding=cp932 rename on dcommit

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9123-git-svn-rebuild-with-rewriteroot.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9123-git-svn-rebuild-with-rewriteroot/.git/
expecting success of 9123.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
	
	A	foo
r1 = 2bbb4a3015fa561b3978f8272cbaab109086d09b (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9123-git-svn-rebuild-with-rewriteroot/svnrepo r1
Switched to a new branch 'mybranch'
ok 1 - init, fetch and checkout repository

expecting success of 9123.2 'remove rev_map': 
	rm "$GIT_SVN_DIR"/.rev_map.*
	
ok 2 - remove rev_map

expecting success of 9123.3 'rebuild rev_map': 
	git svn rebase >/dev/null
	
ok 3 - rebuild rev_map

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9120-git-svn-clone-with-percent-escapes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/.git/
expecting success of 9120.1 'setup svnrepo': 
	mkdir project project/trunk project/branches project/tags &&
	echo foo > project/trunk/foo &&
	svn_cmd import -m "$test_description" project "$svnrepo/pr ject" &&
	svn_cmd cp -m "branch" "$svnrepo/pr ject/trunk" \
	  "$svnrepo/pr ject/branches/b" &&
	svn_cmd cp -m "tag" "$svnrepo/pr ject/trunk" \
	  "$svnrepo/pr ject/tags/v1" &&
	rm -rf project &&
	maybe_start_httpd

Adding         project/branches
Adding         project/tags
Adding         project/trunk
Adding         project/trunk/foo
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
ok 1 - setup svnrepo

expecting success of 9120.2 'test clone with percent escapes': 
	git svn clone "$svnrepo/pr%20ject" clone &&
	(
		cd clone &&
		git rev-parse refs/remotes/git-svn
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/clone/.git/
	A	trunk/foo
W: +empty_dir: branches
W: +empty_dir: tags
r1 = 8004bf060452c3f0bf6f4510901880101a86cb42 (refs/remotes/git-svn)
	A	branches/b/foo
r2 = d19e0334172c1bcd17b3f99834ae0e5cbd7a1616 (refs/remotes/git-svn)
	A	tags/v1/foo
r3 = 0006b6d8e75cd08e04bbc2c1f211f9cd611feeb2 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject r3
0006b6d8e75cd08e04bbc2c1f211f9cd611feeb2
ok 2 - test clone with percent escapes

expecting success of 9120.3 'svn checkout with percent escapes': 
	svn_cmd checkout "$svnrepo/pr%20ject" svn.percent &&
	svn_cmd checkout "$svnrepo/pr%20ject/trunk" svn.percent.trunk

A    svn.percent/branches
A    svn.percent/branches/b
A    svn.percent/branches/b/foo
A    svn.percent/tags
A    svn.percent/tags/v1
A    svn.percent/tags/v1/foo
A    svn.percent/trunk
A    svn.percent/trunk/foo
Checked out revision 3.
A    svn.percent.trunk/foo
Checked out revision 3.
ok 3 - svn checkout with percent escapes

expecting success of 9120.4 'svn checkout with space': 
	svn_cmd checkout "$svnrepo/pr ject" svn.space &&
	svn_cmd checkout "$svnrepo/pr ject/trunk" svn.space.trunk

A    svn.space/branches
A    svn.space/branches/b
A    svn.space/branches/b/foo
A    svn.space/tags
A    svn.space/tags/v1
A    svn.space/tags/v1/foo
A    svn.space/trunk
A    svn.space/trunk/foo
Checked out revision 3.
A    svn.space.trunk/foo
Checked out revision 3.
ok 4 - svn checkout with space

expecting success of 9120.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
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/minimize/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo
	A	foo
r1 = dcfd2b0c6976bf6b84500521edd8af469ab43e96 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk r1
dcfd2b0c6976bf6b84500521edd8af469ab43e96
ok 5 - test clone trunk with percent escapes and minimize-url

expecting success of 9120.6 'test clone trunk with percent escapes': 
	git svn clone "$svnrepo/pr%20ject/trunk" trunk &&
	(
		cd trunk &&
		git rev-parse refs/remotes/git-svn
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/trunk/.git/
	A	foo
r1 = dcfd2b0c6976bf6b84500521edd8af469ab43e96 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk r1
dcfd2b0c6976bf6b84500521edd8af469ab43e96
ok 6 - test clone trunk with percent escapes

expecting success of 9120.7 'test clone --stdlayout with percent escapes': 
	git svn clone --stdlayout "$svnrepo/pr%20ject" percent &&
	(
		cd percent &&
		git rev-parse refs/remotes/origin/trunk^0 &&
		git rev-parse refs/remotes/origin/b^0 &&
		git rev-parse refs/remotes/origin/tags/v1^0
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/percent/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo
	A	foo
r1 = dcfd2b0c6976bf6b84500521edd8af469ab43e96 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/branches/b, 1
Found branch parent: (refs/remotes/origin/b) dcfd2b0c6976bf6b84500521edd8af469ab43e96
Following parent with do_switch
Successfully followed parent
r2 = 899e142aed3bca729800d58a27faf4210c7f54ae (refs/remotes/origin/b)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/tags/v1, 2
Found branch parent: (refs/remotes/origin/tags/v1) dcfd2b0c6976bf6b84500521edd8af469ab43e96
Following parent with do_switch
Successfully followed parent
r3 = 5e4638e66c4f1ff0740f2b8fe633c2b259381566 (refs/remotes/origin/tags/v1)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk r1
dcfd2b0c6976bf6b84500521edd8af469ab43e96
899e142aed3bca729800d58a27faf4210c7f54ae
5e4638e66c4f1ff0740f2b8fe633c2b259381566
ok 7 - test clone --stdlayout with percent escapes

expecting success of 9120.8 'test clone -s with unescaped space': 
	git svn clone -s "$svnrepo/pr ject" --prefix origin/ space &&
	(
		cd space &&
		git rev-parse refs/remotes/origin/trunk^0 &&
		git rev-parse refs/remotes/origin/b^0 &&
		git rev-parse refs/remotes/origin/tags/v1^0
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9120-git-svn-clone-with-percent-escapes/space/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo
	A	foo
r1 = dcfd2b0c6976bf6b84500521edd8af469ab43e96 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/branches/b, 1
Found branch parent: (refs/remotes/origin/b) dcfd2b0c6976bf6b84500521edd8af469ab43e96
Following parent with do_switch
Successfully followed parent
r2 = 899e142aed3bca729800d58a27faf4210c7f54ae (refs/remotes/origin/b)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/tags/v1, 2
Found branch parent: (refs/remotes/origin/tags/v1) dcfd2b0c6976bf6b84500521edd8af469ab43e96
Following parent with do_switch
Successfully followed parent
r3 = 5e4638e66c4f1ff0740f2b8fe633c2b259381566 (refs/remotes/origin/tags/v1)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9120-git-svn-clone-with-percent-escapes/svnrepo/pr%20ject/trunk r1
dcfd2b0c6976bf6b84500521edd8af469ab43e96
899e142aed3bca729800d58a27faf4210c7f54ae
5e4638e66c4f1ff0740f2b8fe633c2b259381566
ok 8 - test clone -s with unescaped space

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9116-git-svn-log.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9116-git-svn-log/.git/
expecting success of 9116.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 origin/trunk &&
	echo bye >> README &&
	git commit -a -m bye &&
	git svn dcommit &&
	git reset --hard origin/a &&
	echo why >> FEEDME &&
	git update-index --add FEEDME &&
	git commit -m feedme &&
	git svn dcommit &&
	git reset --hard origin/trunk &&
	echo aye >> README &&
	git commit -a -m aye &&
	git svn dcommit &&
	git reset --hard origin/b &&
	echo spy >> README &&
	git commit -a -m spy &&
	echo try >> README &&
	git commit -a -m try &&
	git svn dcommit
	
Adding         branches
Adding         branches/a
Adding         branches/a/README
Adding         branches/b
Adding         branches/b/README
Adding         tags
Adding         tags/0.1
Adding         tags/0.1/README
Adding         tags/0.2
Adding         tags/0.2/README
Adding         tags/0.3
Adding         tags/0.3/README
Adding         trunk
Adding         trunk/README
Committing transaction...
Committed revision 1.
	A	README
r1 = 0c9df1490efface83428962356eaf045a78fd2f3 (refs/remotes/origin/a)
	A	README
r1 = 6dc9a2cba151e19b9649f653685a3a2de4395163 (refs/remotes/origin/b)
	A	README
r1 = e19229286b2f6c043da7846ca8e8f91b0977e287 (refs/remotes/origin/tags/0.2)
	A	README
r1 = 53b3b5bbbbf0c9c5e5ecd3063ce4bb11fedc9d5d (refs/remotes/origin/tags/0.1)
	A	README
r1 = 2525e8a6650ca222e31f8c41cae790048cf574da (refs/remotes/origin/trunk)
	A	README
r1 = 5f5ebf6b0cce3ec547d3db1a17ce8c15fb327cc1 (refs/remotes/origin/tags/0.3)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9116-git-svn-log/svnrepo/trunk r1
HEAD is now at 2525e8a test
[master a2b1a38] bye
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9116-git-svn-log/svnrepo/trunk ...
	M	README
Committed r2
	M	README
r2 = acdfc3187defac98a4f2129580e97cdc360816b5 (refs/remotes/origin/trunk)
No changes between a2b1a382a4c373e049ff8234e9fa6ca217791980 and refs/remotes/origin/trunk
Resetting to the latest refs/remotes/origin/trunk
HEAD is now at 0c9df14 test
[master c4e772d] feedme
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 FEEDME
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9116-git-svn-log/svnrepo/branches/a ...
	A	FEEDME
Committed r3
	A	FEEDME
r3 = dcb256aed56e92f6d09afb412d52dd9c5793a02c (refs/remotes/origin/a)
No changes between c4e772d155daeea4476bc1b15beb01e260bf8127 and refs/remotes/origin/a
Resetting to the latest refs/remotes/origin/a
HEAD is now at acdfc31 bye
[master 943875b] aye
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9116-git-svn-log/svnrepo/trunk ...
	M	README
Committed r4
	M	README
r4 = f6899d90753c82db6834a65adaf298025650e8eb (refs/remotes/origin/trunk)
No changes between 943875b69cb717eaaa01415ef91a0f67377dce95 and refs/remotes/origin/trunk
Resetting to the latest refs/remotes/origin/trunk
HEAD is now at 6dc9a2c test
[master b79f5c8] spy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 8117c02] try
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9116-git-svn-log/svnrepo/branches/b ...
	M	README
Committed r5
	M	README
r5 = 7ccd44f6b145102e17c884cf5fa0c176ba8918ff (refs/remotes/origin/b)
	M	README
Committed r6
	M	README
r6 = 21855dff29ab7da4386a1b1451e2725e098351eb (refs/remotes/origin/b)
No changes between 8117c02fa97f347611562b81bcbf2a4ea35fd256 and refs/remotes/origin/b
Resetting to the latest refs/remotes/origin/b
ok 1 - setup repository and import

expecting success of 9116.2 'run log': 
	git reset --hard origin/a &&
	git svn log -r2 origin/trunk >out &&
	grep ^r2 out &&
	git svn log -r4 origin/trunk >out &&
	grep ^r4 out &&
	git svn log -r3 >out &&
	grep ^r3 out
	
HEAD is now at dcb256a feedme
r2 | buildd | 2022-12-28 08:11:49 +0000 (Wed, 28 Dec 2022) | 2 lines
r4 | buildd | 2022-12-28 08:12:04 +0000 (Wed, 28 Dec 2022) | 2 lines
r3 | buildd | 2022-12-28 08:11:57 +0000 (Wed, 28 Dec 2022) | 2 lines
ok 2 - run log

expecting success of 9116.3 'run log against a from trunk': 
	git reset --hard origin/trunk &&
	git svn log -r3 origin/a >out &&
	grep ^r3 out
	
HEAD is now at f6899d9 aye
r3 | buildd | 2022-12-28 08:11:57 +0000 (Wed, 28 Dec 2022) | 2 lines
ok 3 - run log against a from trunk

expecting success of 9116.4 'test ascending revision range': 
	git reset --hard origin/trunk &&
	git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
	
HEAD is now at f6899d9 aye
ok 4 - test ascending revision range

expecting success of 9116.5 'test ascending revision range with --show-commit': 
	git reset --hard origin/trunk &&
	git svn log --show-commit -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
	
HEAD is now at f6899d9 aye
ok 5 - test ascending revision range with --show-commit

expecting success of 9116.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 origin/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
	
HEAD is now at f6899d9 aye
ok 6 - test ascending revision range with --show-commit (sha1)

expecting success of 9116.7 'test descending revision range': 
	git reset --hard origin/trunk &&
	git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4-r2-r1 -
	
HEAD is now at f6899d9 aye
ok 7 - test descending revision range

expecting success of 9116.8 'test ascending revision range with unreachable revision': 
	git reset --hard origin/trunk &&
	git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2 -
	
HEAD is now at f6899d9 aye
ok 8 - test ascending revision range with unreachable revision

expecting success of 9116.9 'test descending revision range with unreachable revision': 
	git reset --hard origin/trunk &&
	git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2-r1 -
	
HEAD is now at f6899d9 aye
ok 9 - test descending revision range with unreachable revision

expecting success of 9116.10 'test ascending revision range with unreachable upper boundary revision and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
	
HEAD is now at f6899d9 aye
ok 10 - test ascending revision range with unreachable upper boundary revision and 1 commit

expecting success of 9116.11 'test descending revision range with unreachable upper boundary revision and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
	
HEAD is now at f6899d9 aye
ok 11 - test descending revision range with unreachable upper boundary revision and 1 commit

expecting success of 9116.12 'test ascending revision range with unreachable lower boundary revision and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
	
HEAD is now at f6899d9 aye
ok 12 - test ascending revision range with unreachable lower boundary revision and 1 commit

expecting success of 9116.13 'test descending revision range with unreachable lower boundary revision and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
	
HEAD is now at f6899d9 aye
ok 13 - test descending revision range with unreachable lower boundary revision and 1 commit

expecting success of 9116.14 'test ascending revision range with unreachable boundary revisions and no commits': 
	git reset --hard origin/trunk &&
	git svn log -r 5:6 | test_cmp expected-separator -
	
HEAD is now at f6899d9 aye
ok 14 - test ascending revision range with unreachable boundary revisions and no commits

expecting success of 9116.15 'test descending revision range with unreachable boundary revisions and no commits': 
	git reset --hard origin/trunk &&
	git svn log -r 6:5 | test_cmp expected-separator -
	
HEAD is now at f6899d9 aye
ok 15 - test descending revision range with unreachable boundary revisions and no commits

expecting success of 9116.16 'test ascending revision range with unreachable boundary revisions and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
	
HEAD is now at f6899d9 aye
ok 16 - test ascending revision range with unreachable boundary revisions and 1 commit

expecting success of 9116.17 'test descending revision range with unreachable boundary revisions and 1 commit': 
	git reset --hard origin/trunk &&
	git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
	
HEAD is now at f6899d9 aye
ok 17 - test descending revision range with unreachable boundary revisions and 1 commit

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9122-git-svn-author.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9122-git-svn-author/.git/
expecting success of 9122.1 'setup svn repository': 
	svn_cmd checkout "$svnrepo" work.svn &&
	(
		cd work.svn &&
		echo >file &&
		svn_cmd add file &&
		svn_cmd commit -m "first commit" file
	)

Checked out revision 0.
A         file
Adding         file
Transmitting file data .done
Committing transaction...
Committed revision 1.
ok 1 - setup svn repository

expecting success of 9122.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
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9122-git-svn-author/work.git/.git/
	A	file
r1 = a0bebac425b03a798812d63b8825bdd656608588 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo r1
[master ee4339c] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo ...
	M	file
Committed r2
	M	file
r2 = 3f4c46439149d541e58305ca9671fa784f7cb09d (refs/remotes/git-svn)
No changes between ee4339c4cc37eadebb25b6e1159ab5523bf32adb and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
[master 2a39e61] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo ...
	M	file
Committed r3
	M	file
r3 = f4824b50e9dc1d752a7f159363391a47e7d7953c (refs/remotes/git-svn)
No changes between 2a39e611707d3a5d74eec215981dc6ac582a56f5 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
[master 813357e] fourth
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo ...
	M	file
Committed r4
	M	file
r4 = 42d52d948afe0bbe3d4612ada92ef3698be4d731 (refs/remotes/git-svn)
No changes between 813357ef946191d7ec5d788b3487a581467c5fea and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
commit 42d52d948afe0bbe3d4612ada92ef3698be4d731
Author: A U Thor <author@example.com>
Date:   Wed Dec 28 08:13:38 2022 +0000

    fourth
    
    From: A U Thor <author@example.com>
    
    git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo@4 b015dda4-a531-41d8-8e3b-11f31dafe7b2

commit f4824b50e9dc1d752a7f159363391a47e7d7953c
Author: buildd <buildd@b015dda4-a531-41d8-8e3b-11f31dafe7b2>
Date:   Wed Dec 28 08:13:31 2022 +0000

    third
    
    From: A U Thor <author@example.com>
    
    git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo@3 b015dda4-a531-41d8-8e3b-11f31dafe7b2

commit 3f4c46439149d541e58305ca9671fa784f7cb09d
Author: buildd <buildd@b015dda4-a531-41d8-8e3b-11f31dafe7b2>
Date:   Wed Dec 28 08:13:23 2022 +0000

    second
    
    git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo@2 b015dda4-a531-41d8-8e3b-11f31dafe7b2

commit a0bebac425b03a798812d63b8825bdd656608588
Author: buildd <buildd@b015dda4-a531-41d8-8e3b-11f31dafe7b2>
Date:   Wed Dec 28 08:13:09 2022 +0000

    first commit
    
    git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9122-git-svn-author/svnrepo@1 b015dda4-a531-41d8-8e3b-11f31dafe7b2
    From: A U Thor <author@example.com>
    From: A U Thor <author@example.com>
Author: A U Thor <author@example.com>
Updating '.':
U    file
Updated to revision 4.
ok 2 - interact with it via git svn

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9126-git-svn-follow-deleted-readded-directory.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9126-git-svn-follow-deleted-readded-directory/.git/
1..0 # SKIP skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9128-git-svn-cmd-branch.sh ***
skipping test t9128 altogether
1..0 # SKIP skip all tests in t9128
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9125-git-svn-multi-glob-branch-names.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9125-git-svn-multi-glob-branch-names/.git/
expecting success of 9125.1 'setup svnrepo': 
	mkdir project project/trunk project/branches \
			project/branches/v14.1 project/tags &&
	echo foo > project/trunk/foo &&
	svn_cmd import -m "$test_description" project "$svnrepo/project" &&
	rm -rf project &&
	svn_cmd cp -m "fun" "$svnrepo/project/trunk" \
	                "$svnrepo/project/branches/v14.1/beta" &&
	svn_cmd cp -m "more fun!" "$svnrepo/project/branches/v14.1/beta" \
	                      "$svnrepo/project/branches/v14.1/gold"
	
Adding         project/branches
Adding         project/branches/v14.1
Adding         project/tags
Adding         project/trunk
Adding         project/trunk/foo
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
ok 1 - setup svnrepo

expecting success of 9125.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/origin/v14.1/beta" &&
		git rev-parse "refs/remotes/origin/v14.1/gold"
	)
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9125-git-svn-multi-glob-branch-names/project/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo
	A	foo
r1 = 204326fc1f93e0829d8083d0691d35f834d67c02 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/branches/v14.1/beta, 1
Found branch parent: (refs/remotes/origin/v14.1/beta) 204326fc1f93e0829d8083d0691d35f834d67c02
Following parent with do_switch
Successfully followed parent
r2 = 3532aeec561a8a1de0ca261f41a8b37baa09aa1b (refs/remotes/origin/v14.1/beta)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/branches/v14.1/beta => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/branches/v14.1/gold, 2
Found branch parent: (refs/remotes/origin/v14.1/gold) 3532aeec561a8a1de0ca261f41a8b37baa09aa1b
Following parent with do_switch
Successfully followed parent
r3 = 3cf6e50b304e3a307e4e76f89f1284bad33d92a3 (refs/remotes/origin/v14.1/gold)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/trunk r1
3532aeec561a8a1de0ca261f41a8b37baa09aa1b
3cf6e50b304e3a307e4e76f89f1284bad33d92a3
ok 2 - test clone with multi-glob in branch names

expecting success of 9125.3 'test dcommit to multi-globbed branch': 
	(cd project &&
	git reset --hard 'refs/remotes/origin/v14.1/gold' &&
	echo hello >> foo &&
	git commit -m 'hello' -- foo &&
	git svn dcommit
	)
	
HEAD is now at 3cf6e50 more fun!
[master 3e0d675] hello
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9125-git-svn-multi-glob-branch-names/svnrepo/project/branches/v14.1/gold ...
	M	foo
Committed r4
	M	foo
r4 = 0adf1768e18bbb921262b44d2131503dc51e6e3f (refs/remotes/origin/v14.1/gold)
No changes between 3e0d6757d8fd83a372913522dea203b8ad39137f and refs/remotes/origin/v14.1/gold
Resetting to the latest refs/remotes/origin/v14.1/gold
ok 3 - test dcommit to multi-globbed branch

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9124-git-svn-dcommit-auto-props.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9124-git-svn-dcommit-auto-props/.git/
expecting success of 9124.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

Adding         foo
Committing transaction...
Committed revision 1.
	A	foo
r1 = 369f05ac9496470beafd51b803d39ee2d1ceb6ae (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9124-git-svn-dcommit-auto-props/svnrepo r1
ok 1 - initialize git svn

expecting success of 9124.2 'enable auto-props config': 
	mkdir user &&
	generate_auto_props yes >user/config

ok 2 - enable auto-props config

expecting success of 9124.3 'add files matching auto-props': 
	write_script exec1.sh </dev/null &&
	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

[master d5475ae] files for enabled auto-props
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100644 bar
 create mode 100755 exec1.sh
 create mode 100644 hello.txt
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9124-git-svn-dcommit-auto-props/svnrepo ...
	A	bar
	A	exec1.sh
	A	hello.txt
Committed r2
	A	bar
	A	exec1.sh
	A	hello.txt
r2 = f10f5cc6f0876501702057a783850b848683b4fd (refs/remotes/git-svn)
No changes between d5475ae2e2292c3b05c68f30cb75fcf1a50b5192 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 3 - add files matching auto-props

expecting success of 9124.4 'disable auto-props config': 
	generate_auto_props no >user/config

ok 4 - disable auto-props config

expecting success of 9124.5 'add files matching disabled auto-props': 
	write_script exec2.sh </dev/null &&
	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

[master b0af943] files for disabled auto-props
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+)
 create mode 100755 exec2.sh
 create mode 100644 world.txt
 create mode 100644 zot
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9124-git-svn-dcommit-auto-props/svnrepo ...
	A	exec2.sh
	A	world.txt
	A	zot
Committed r3
	A	exec2.sh
	A	world.txt
	A	zot
r3 = dce2e0060aec88573818fcbad942fd7bb3b1c837 (refs/remotes/git-svn)
No changes between b0af943f042ca86aa0b150f3e6598600f03c5523 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 5 - add files matching disabled auto-props

expecting success of 9124.6 'check resulting svn repository': 
(
	mkdir work &&
	cd work &&
	svn_cmd co "$svnrepo" &&
	cd svnrepo &&

	# Check properties from first commit.
	if test_have_prereq POSIXPERM
	then
		test "x$(svn_cmd propget svn:executable exec1.sh)" = "x*"
	fi &&
	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.
	if test_have_prereq POSIXPERM
	then
		test "x$(svn_cmd propget svn:executable exec2.sh)" = "x*"
	fi &&
	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"
)

A    svnrepo/bar
A    svnrepo/exec1.sh
A    svnrepo/exec2.sh
A    svnrepo/foo
A    svnrepo/hello.txt
A    svnrepo/world.txt
A    svnrepo/zot
Checked out revision 3.
svn: warning: W200017: Property 'svn:mime-type' not found on 'bar'
svn: E200000: A problem occurred; see other errors for details
svn: warning: W200017: Property 'svn:mime-type' not found on 'exec2.sh'
svn: E200000: A problem occurred; see other errors for details
svn: warning: W200017: Property 'svn:mime-type' not found on 'world.txt'
svn: E200000: A problem occurred; see other errors for details
svn: warning: W200017: Property 'svn:eol-style' not found on 'world.txt'
svn: E200000: A problem occurred; see other errors for details
svn: warning: W200017: Property 'svn:mime-type' not found on 'zot'
svn: E200000: A problem occurred; see other errors for details
ok 6 - check resulting svn repository

expecting success of 9124.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"
	)

[master 877bda2] foo => foo.sh
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename foo => foo.sh (100%)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9124-git-svn-dcommit-auto-props/svnrepo ...
	R	foo => foo.sh
Committed r4
	D	foo
	A	foo.sh
W: -empty_dir: foo
r4 = 5623ebb7858b592fd1f85a5698ec3dbbea0b3cdb (refs/remotes/git-svn)
No changes between 877bda2998bd7e775f2ab6654dcdda6992aa8a82 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Updating '.':
D    foo
A    foo.sh
Updated to revision 4.
ok 7 - check renamed file

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9127-git-svn-partial-rebuild.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9127-git-svn-partial-rebuild/.git/
expecting success of 9127.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"
	)

Committing transaction...
Committed revision 2.
A    trunk/foo
Checked out revision 2.
Sending        foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
A    a/foo
Checked out revision 3.
A         a
Adding         a
Transmitting file data .done
Committing transaction...
Committed revision 4.
ok 1 - initialize svnrepo

expecting success of 9127.2 'import an early SVN revision into git': 
	git svn fetch -r1:2

	A	foo
r1 = 92aafee8fd649b0c6892591aeaa7b875bbdb657b (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/branches/a, 1
Found branch parent: (refs/remotes/origin/a) 92aafee8fd649b0c6892591aeaa7b875bbdb657b
Following parent with do_switch
Successfully followed parent
r2 = 067c9d1ed56c84c1b4e31daaeda99b769c55c002 (refs/remotes/origin/a)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/trunk r1
ok 2 - import an early SVN revision into git

expecting success of 9127.3 'make full git mirror of SVN': 
	mkdir mirror &&
	(
		(cd mirror &&
		git init &&
		git svn init --stdlayout "$svnrepo" &&
		git svn fetch
		)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9127-git-svn-partial-rebuild/mirror/.git/
	A	foo
r1 = 92aafee8fd649b0c6892591aeaa7b875bbdb657b (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/branches/a, 1
Found branch parent: (refs/remotes/origin/a) 92aafee8fd649b0c6892591aeaa7b875bbdb657b
Following parent with do_switch
Successfully followed parent
r2 = 067c9d1ed56c84c1b4e31daaeda99b769c55c002 (refs/remotes/origin/a)
	M	foo
r3 = cbfb4aa8b3648a3d84c19bf8a356f67247cae83f (refs/remotes/origin/trunk)
	A	a
r4 = fda44d3dadcac87ab4685154202099bca97705dd (refs/remotes/origin/a)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9127-git-svn-partial-rebuild/svnrepo/trunk r3
ok 3 - make full git mirror of SVN

expecting success of 9127.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

From file:///<<PKGBUILDDIR>>/t/trash directory.t9127-git-svn-partial-rebuild/mirror/
   067c9d1..fda44d3  origin/a     -> origin/a
   92aafee..cbfb4aa  origin/trunk -> origin/trunk
Partial-rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.447477b0-bf98-4889-b6a2-620b4dd2d630 ...
Currently at 1 = 92aafee8fd649b0c6892591aeaa7b875bbdb657b
r3 = cbfb4aa8b3648a3d84c19bf8a356f67247cae83f
Done rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.447477b0-bf98-4889-b6a2-620b4dd2d630
Partial-rebuilding .git/svn/refs/remotes/origin/a/.rev_map.447477b0-bf98-4889-b6a2-620b4dd2d630 ...
Currently at 2 = 067c9d1ed56c84c1b4e31daaeda99b769c55c002
r4 = fda44d3dadcac87ab4685154202099bca97705dd
Done rebuilding .git/svn/refs/remotes/origin/a/.rev_map.447477b0-bf98-4889-b6a2-620b4dd2d630
ok 4 - fetch from git mirror and partial-rebuild

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9132-git-svn-broken-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9132-git-svn-broken-symlink/.git/
expecting success of 9132.1 'load svn dumpfile': 
	svnadmin load "$rawsvnrepo" <<EOF
SVN-fs-dump-format-version: 2

UUID: 60780f9a-7df5-43b4-83ab-60e2c0673ef7

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2008-11-26T07:17:27.590577Z
PROPS-END

Revision-number: 1
Prop-content-length: 111
Content-length: 111

K 7
svn:log
V 4
test
K 10
svn:author
V 12
normalperson
K 8
svn:date
V 27
2008-11-26T07:18:03.511836Z
PROPS-END

Node-path: bar
Node-kind: file
Node-action: add
Prop-content-length: 33
Text-content-length: 4
Text-content-md5: 912ec803b2ce49e4a541068d495ab570
Content-length: 37

K 11
svn:special
V 1
*
PROPS-END
asdf

Revision-number: 2
Prop-content-length: 121
Content-length: 121

K 7
svn:log
V 13
bar => doink

K 10
svn:author
V 12
normalperson
K 8
svn:date
V 27
2008-11-27T03:55:31.601672Z
PROPS-END

Node-path: bar
Node-kind: file
Node-action: change
Text-content-length: 10
Text-content-md5: 92ca4fe7a9721f877f765c252dcd66c9
Content-length: 10

link doink

EOF

<<< Started new transaction, based on original revision 1
     * editing path : bar ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * editing path : bar ... done.

------- Committed revision 2 >>>

ok 1 - load svn dumpfile

expecting success of 9132.2 'clone using git svn': git svn clone -r1 "$svnrepo" x
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9132-git-svn-broken-symlink/x/.git/
bar has mode 120000 but is not a link
	A	bar
r1 = 74848ba2f16dd2967fd1cad91646419fe8603314 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9132-git-svn-broken-symlink/svnrepo r1
ok 2 - clone using git svn

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 9132.3 '"bar" is a symlink that points to "asdf"': 
	test -L x/bar &&
	(cd x && test xasdf = x"$(git cat-file blob HEAD:bar)")

ok 3 - "bar" is a symlink that points to "asdf"

expecting success of 9132.4 'get "bar" => symlink fix from svn': 
	(cd x && git svn rebase)

Checksum mismatch: bar 5e40c0877058c504203932e5136051cf3cd3519b
expected: 912ec803b2ce49e4a541068d495ab570
     got: 3f9dfa058a15dc34057c51ec4d35393c
Retrying... (possibly a bad symlink from SVN)
	M	bar
r2 = 1f9c9df0a5b81a0a5051c3d6afe5916f5def863a (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 4 - get "bar" => symlink fix from svn

expecting success of 9132.5 '"bar" remains a proper symlink': 
	test -L x/bar &&
	(cd x && test xdoink = x"$(git cat-file blob HEAD:bar)")

ok 5 - "bar" remains a proper symlink

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9129-git-svn-i18n-commitencoding.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9129-git-svn-i18n-commitencoding/.git/
expecting success of 9129.1 'ISO8859-1 setup': 
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	
Committing transaction...
Committed revision 1.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9129-git-svn-i18n-commitencoding/ISO8859-1/.git/
r1 = 5e2417a7544142ff71a9aef36be75498e81fa23e (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO8859-1 r1
ok 1 - ISO8859-1 setup

expecting success of 9129.2 'eucJP setup': 
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	
Committing transaction...
Committed revision 2.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9129-git-svn-i18n-commitencoding/eucJP/.git/
r2 = 2dd28bb6d2fb68671fb94908a5a48c7365b1d95e (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/eucJP r2
ok 2 - eucJP setup

expecting success of 9129.3 'ISO-2022-JP setup': 
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	
Committing transaction...
Committed revision 3.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9129-git-svn-i18n-commitencoding/ISO-2022-JP/.git/
r3 = 1c256fb5b080d5f31a2ed3c6371a6130ebfc36af (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO-2022-JP r3
ok 3 - ISO-2022-JP setup

expecting success of 9129.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
	)
	
Switched to a new branch 't'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F
ok 4 - ISO8859-1 commit on git side

expecting success of 9129.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
	)
	
Switched to a new branch 't'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F
ok 5 - eucJP commit on git side

expecting success of 9129.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
	)
	
Switched to a new branch 't'
[t 4aa5d6e] $B$O$l$R$[$U(B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F
ok 6 - ISO-2022-JP commit on git side

expecting success of 9129.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
	)
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO8859-1 ...
	A	F
Committed r4
	A	F
r4 = 7e6ecc5975b7cb4c0449975a6ebaf3458fbbd7de (refs/remotes/git-svn)
No changes between 14969da392b1090e0edf839446cc848af5de69a5 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO8859-1@4 dc375716-ae3f-4a00-a530-99a1829160b8
ok 7 - ISO8859-1 dcommit to svn

expecting success of 9129.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
	)
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/eucJP ...
	A	F
Committed r5
	A	F
r5 = 41182930108f813b54ec28f49b44c0e6f8bfe35e (refs/remotes/git-svn)
No changes between e916c21dd321a15093510c2d8ead5597caa2a085 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/eucJP@5 dc375716-ae3f-4a00-a530-99a1829160b8
ok 8 - eucJP dcommit to svn

expecting success of 9129.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
	)
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO-2022-JP ...
	A	F
Committed r6
	A	F
r6 = eb7315e59bb0af17e47c56d1f91e7ae85b0c64b5 (refs/remotes/git-svn)
No changes between 4aa5d6e6392c52a8b487f660453591d217962dff and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9129-git-svn-i18n-commitencoding/svnrepo/ISO-2022-JP@6 dc375716-ae3f-4a00-a530-99a1829160b8
ok 9 - ISO-2022-JP dcommit to svn

expecting success of 9129.10 'ISO-8859-1 should match UTF-8 in svn': 
	(
		cd ISO8859-1 &&
		compare_svn_head_with "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
	)

ok 10 - ISO-8859-1 should match UTF-8 in svn

expecting success of 9129.11 'eucJP should match UTF-8 in svn': 
		(
			cd $H &&
			compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
		)
	
ok 11 - eucJP should match UTF-8 in svn

expecting success of 9129.12 'ISO-2022-JP should match UTF-8 in svn': 
		(
			cd $H &&
			compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
		)
	
ok 12 - ISO-2022-JP should match UTF-8 in svn

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9131-git-svn-empty-symlink.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9131-git-svn-empty-symlink/.git/
expecting success of 9131.1 'load svn dumpfile': 
	svnadmin load "$rawsvnrepo" <<EOF
SVN-fs-dump-format-version: 2

UUID: 60780f9a-7df5-43b4-83ab-60e2c0673ef7

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2008-11-26T07:17:27.590577Z
PROPS-END

Revision-number: 1
Prop-content-length: 111
Content-length: 111

K 7
svn:log
V 4
test
K 10
svn:author
V 12
normalperson
K 8
svn:date
V 27
2008-11-26T07:18:03.511836Z
PROPS-END

Node-path: bar
Node-kind: file
Node-action: add
Prop-content-length: 33
Text-content-length: 0
Text-content-md5: d41d8cd98f00b204e9800998ecf8427e
Content-length: 33

K 11
svn:special
V 1
*
PROPS-END

Revision-number: 2
Prop-content-length: 121
Content-length: 121

K 7
svn:log
V 13
bar => doink

K 10
svn:author
V 12
normalperson
K 8
svn:date
V 27
2008-11-27T03:55:31.601672Z
PROPS-END

Node-path: bar
Node-kind: file
Node-action: change
Text-content-length: 10
Text-content-md5: 92ca4fe7a9721f877f765c252dcd66c9
Content-length: 10

link doink

EOF

<<< Started new transaction, based on original revision 1
     * editing path : bar ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * editing path : bar ... done.

------- Committed revision 2 >>>

ok 1 - load svn dumpfile

expecting success of 9131.2 'clone using git svn': git svn clone -r1 "$svnrepo" x
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9131-git-svn-empty-symlink/x/.git/
bar has mode 120000 but it points to nothing
converting to an empty file with mode 100644
	A	bar
r1 = 99c009a43dd4f4fd7a354509b2424144cbbc1ad6 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9131-git-svn-empty-symlink/svnrepo r1
ok 2 - clone using git svn

expecting success of 9131.3 'enable broken symlink workaround': (cd x && git config svn.brokenSymlinkWorkaround true)
ok 3 - enable broken symlink workaround

expecting success of 9131.4 '"bar" is an empty file': test_must_be_empty x/bar
ok 4 - "bar" is an empty file

expecting success of 9131.5 'get "bar" => symlink fix from svn': (cd x && git svn rebase)
Scanning for empty symlinks, this may take a while if you have many empty files
You may disable this with `git config svn.brokenSymlinkWorkaround false'.
This may be done in a different terminal without restarting git svn
	M	bar
r2 = 6dcdefcdc186d906d2b2523073eea0d4676fbef1 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 5 - get "bar" => symlink fix from svn

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 9131.6 '"bar" becomes a symlink': test -h x/bar
ok 6 - "bar" becomes a symlink

expecting success of 9131.7 'clone using git svn': git svn clone -r1 "$svnrepo" y
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9131-git-svn-empty-symlink/y/.git/
bar has mode 120000 but it points to nothing
converting to an empty file with mode 100644
	A	bar
r1 = 99c009a43dd4f4fd7a354509b2424144cbbc1ad6 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9131-git-svn-empty-symlink/svnrepo r1
ok 7 - clone using git svn

expecting success of 9131.8 'disable broken symlink workaround': (cd y && git config svn.brokenSymlinkWorkaround false)
ok 8 - disable broken symlink workaround

expecting success of 9131.9 '"bar" is an empty file': test_must_be_empty y/bar
ok 9 - "bar" is an empty file

expecting success of 9131.10 'get "bar" => symlink fix from svn': (cd y && git svn rebase)
	M	bar
r2 = 37d6fc593892da996df01ecf53584d9f1f7ac049 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 10 - get "bar" => symlink fix from svn

expecting success of 9131.11 '"bar" does not become a symlink': ! test -L y/bar
ok 11 - "bar" does not become a symlink

expecting success of 9131.12 'clone using git svn': git svn clone -r1 "$svnrepo" z
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9131-git-svn-empty-symlink/z/.git/
bar has mode 120000 but it points to nothing
converting to an empty file with mode 100644
	A	bar
r1 = 99c009a43dd4f4fd7a354509b2424144cbbc1ad6 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9131-git-svn-empty-symlink/svnrepo r1
ok 12 - clone using git svn

expecting success of 9131.13 '"bar" is an empty file': test_must_be_empty z/bar
ok 13 - "bar" is an empty file

expecting success of 9131.14 'get "bar" => symlink fix from svn': (cd z && git svn rebase)
	M	bar
r2 = 37d6fc593892da996df01ecf53584d9f1f7ac049 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 14 - get "bar" => symlink fix from svn

expecting success of 9131.15 '"bar" does not become a symlink': ! test -L z/bar
ok 15 - "bar" does not become a symlink

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9130-git-svn-authors-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9130-git-svn-authors-file/.git/
expecting success of 9130.1 'setup svnrepo': 
	for i in aa bb cc dd
	do
		svn_cmd mkdir -m $i --username $i "$svnrepo"/$i || return 1
	done
	
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
ok 1 - setup svnrepo

expecting success of 9130.2 'start import with incomplete authors file': 
	test_must_fail git svn clone --authors-file=svn-authors "$svnrepo" x
	
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9130-git-svn-authors-file/x/.git/
W: +empty_dir: aa
r1 = a56d8f691edd12adc2adff800b2a1b1de8f7f32b (refs/remotes/git-svn)
W: +empty_dir: bb
r2 = 461867f46ae99172d103c19e16ba99d301aff287 (refs/remotes/git-svn)
W: +empty_dir: cc
Author: cc not defined in svn-authors file

ok 2 - start import with incomplete authors file

expecting success of 9130.3 'imported 2 revisions successfully': 
	(
		cd x &&
		git rev-list refs/remotes/git-svn >actual &&
		test_line_count = 2 actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn >actual &&
		grep "^author BBBBBBB BBBBBBB <bb@example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~1 >actual &&
		grep "^author AAAAAAA AAAAAAA <aa@example\.com> " actual
	)
	
author BBBBBBB BBBBBBB <bb@example.com> 1672215238 +0000
author AAAAAAA AAAAAAA <aa@example.com> 1672215236 +0000
ok 3 - imported 2 revisions successfully

expecting success of 9130.4 'continues to import once authors have been added': 
	(
		cd x &&
		git svn fetch --authors-file=../svn-authors &&
		git rev-list refs/remotes/git-svn >actual &&
		test_line_count = 4 actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn >actual &&
		grep "^author DDDDDDD DDDDDDD <dd@example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~1 >actual &&
		grep "^author CCCCCCC CCCCCCC <cc@example\.com> " actual
	)
	
W: +empty_dir: cc
r3 = 564a213ff535221d5cdb6a6a0f2965ba56479317 (refs/remotes/git-svn)
W: +empty_dir: dd
r4 = 9657363a32f03e0b9d53d6ef362d5af3bb018486 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9130-git-svn-authors-file/svnrepo r4
creating empty directory: aa
creating empty directory: bb
creating empty directory: cc
creating empty directory: dd
author DDDDDDD DDDDDDD <dd@example.com> 1672215240 +0000
author CCCCCCC CCCCCCC <cc@example.com> 1672215238 +0000
ok 4 - continues to import once authors have been added

expecting success of 9130.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" || return 1
	done
	
Committing transaction...
Committed revision 5.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9130-git-svn-authors-file/aa-work/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9130-git-svn-authors-file/svnrepo/aa => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9130-git-svn-authors-file/svnrepo
r5 = 8bd5a750d940c8961058219d27bc2c7eb88c215e (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9130-git-svn-authors-file/svnrepo/aa/trunk r5
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
Committing transaction...
Committed revision 8.
ok 5 - authors-file against globs

expecting success of 9130.6 'fetch fails on ee': 
	( cd aa-work && test_must_fail git svn fetch --authors-file=../svn-authors )
	
r6 = 6dad74d9c563c1306f54eee4b308b1f22926b3f9 (refs/remotes/origin/bb)
Author: ee not defined in ../svn-authors file

ok 6 - fetch fails on ee

expecting success of 9130.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)"
	)
	
ok 7 - failure happened without negative side effects

expecting success of 9130.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)"
	)
	
r7 = 4241cc6c60e73fc3c5ad5e5701fc77461e686bdb (refs/remotes/origin/ee)
r8 = be9c0d2a76f0e0b6057ad26af8041006cddf62cc (refs/remotes/origin/cc)
ok 8 - fetch continues after authors-file is fixed

expecting success of 9130.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 &&
		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 &&
		git log >actual &&
		nr_ex=$(grep "^Author:.*example.com" actual | wc -l) &&
		git rev-list HEAD >actual &&
		nr_rev=$(wc -l <actual) &&
		test $nr_rev -eq $nr_ex
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9130-git-svn-authors-file/gitconfig.clone/.git/
W: +empty_dir: aa
r1 = a56d8f691edd12adc2adff800b2a1b1de8f7f32b (refs/remotes/git-svn)
W: +empty_dir: bb
r2 = 461867f46ae99172d103c19e16ba99d301aff287 (refs/remotes/git-svn)
W: +empty_dir: cc
r3 = 564a213ff535221d5cdb6a6a0f2965ba56479317 (refs/remotes/git-svn)
W: +empty_dir: dd
r4 = 9657363a32f03e0b9d53d6ef362d5af3bb018486 (refs/remotes/git-svn)
W: +empty_dir: aa/branches
W: +empty_dir: aa/tags
W: +empty_dir: aa/trunk
r5 = eb96b92ead6d3bfb1aa3454a3c8a2c23d42e932a (refs/remotes/git-svn)
W: +empty_dir: aa/branches/bb
r6 = bda038dad1e67bbd5e709e986dd66f5c85936e92 (refs/remotes/git-svn)
W: +empty_dir: aa/branches/ee
r7 = 2dde353d4f21ab5516fda2140c8f7e006a98488f (refs/remotes/git-svn)
W: +empty_dir: aa/branches/cc
r8 = 2b4b7ce25f5de2a167123dc948542544644f8918 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9130-git-svn-authors-file/svnrepo r8
creating empty directory: aa
creating empty directory: aa/branches
creating empty directory: aa/branches/bb
creating empty directory: aa/branches/cc
creating empty directory: aa/branches/ee
creating empty directory: aa/tags
creating empty directory: aa/trunk
creating empty directory: bb
creating empty directory: cc
creating empty directory: dd
ok 9 - fresh clone with svn.authors-file in config

expecting success of 9130.10 'authors-file imported user without email': 
	svn_cmd mkdir -m aa/branches/ff --username ff "$svnrepo/aa/branches/ff" &&
	(
		cd aa-work &&
		git svn fetch --authors-file=../svn-authors &&
		git rev-list -1 --pretty=raw refs/remotes/origin/ff | \
		  grep "^author FFFFFFF FFFFFFF <> "
	)
	
Committing transaction...
Committed revision 9.
r9 = b3d709dd7bbfc5968de3fc6087d29096480add1a (refs/remotes/origin/ff)
author FFFFFFF FFFFFFF <> 1672215288 +0000
ok 10 - authors-file imported user without email

# passed all 10 test(s)
1..10
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9135-git-svn-moved-branch-empty-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9135-git-svn-moved-branch-empty-file/.git/
expecting success of 9135.1 'load svn dumpfile': 
	svnadmin load "$rawsvnrepo" < "${TEST_DIRECTORY}/t9135/svn.dump"
	
<<< Started new transaction, based on original revision 1
     * editing path : branches ... done.
     * editing path : trunk ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * editing path : branches/branch-b ...COPIED... done.

------- Committed revision 2 >>>

<<< Started new transaction, based on original revision 3
     * editing path : branches/branch-b/b1 ... done.

------- Committed revision 3 >>>

<<< Started new transaction, based on original revision 4
     * editing path : branches/branch-c ...COPIED... done.

------- Committed revision 4 >>>

<<< Started new transaction, based on original revision 5
     * editing path : branches/branch-c ... done.

------- Committed revision 5 >>>

<<< Started new transaction, based on original revision 6
     * editing path : branches/branch-c ...COPIED... done.

------- Committed revision 6 >>>

ok 1 - load svn dumpfile

expecting success of 9135.2 'clone using git svn': git svn clone -s "$svnrepo" x
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9135-git-svn-moved-branch-empty-file/x/.git/
r1 = 776ddd165700fd4e0349689b83e503aef038b87e (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/branches/branch-b, 1
Found branch parent: (refs/remotes/origin/branch-b) 776ddd165700fd4e0349689b83e503aef038b87e
Following parent with do_switch
Successfully followed parent
r2 = 0f815e4c29956fecf453626dc9caccd38e1c34f2 (refs/remotes/origin/branch-b)
	A	b1
r3 = 4bdfdbb498819ce3801daf1ba438ba66278e6c65 (refs/remotes/origin/branch-b)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/branches/branch-c, 3
Found branch parent: (refs/remotes/origin/branch-c) 776ddd165700fd4e0349689b83e503aef038b87e
Following parent with do_switch
Successfully followed parent
r4 = 920ff088aa1815aa35f08f34358b9f3bf6aafe2d (refs/remotes/origin/branch-c)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/branches/branch-b => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/branches/branch-c, 5
Found branch parent: (refs/remotes/origin/branch-c) 4bdfdbb498819ce3801daf1ba438ba66278e6c65
Index mismatch: 934e48f4addc4882a9b7b99615348569d531c873 != 4b825dc642cb6eb9a060e54bf8d69288fbee4904
rereading 4bdfdbb498819ce3801daf1ba438ba66278e6c65
Following parent with do_switch
Successfully followed parent
r6 = bd0d5762c46bcd41dd3e917d7103d908dc7de355 (refs/remotes/origin/branch-c)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9135-git-svn-moved-branch-empty-file/svnrepo/trunk r1
ok 2 - clone using git svn

expecting success of 9135.3 'test that b1 exists and is empty': 
	(
		cd x &&
		git reset --hard origin/branch-c &&
		test_must_be_empty b1
	)
	
HEAD is now at bd0d576 branch-c off of branch-b
ok 3 - test that b1 exists and is empty

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9133-git-svn-nested-git-repo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9133-git-svn-nested-git-repo/.git/
expecting success of 9133.1 'setup repo with a git repo inside it': 
	svn_cmd co "$svnrepo" s &&
	(
		cd s &&
		git init &&
		test -f .git/HEAD &&
		> .git/a &&
		echo a > a &&
		svn_cmd add .git a &&
		svn_cmd commit -m "create a nested git repo" &&
		svn_cmd up &&
		echo hi >> .git/a &&
		svn_cmd commit -m "modify .git/a" &&
		svn_cmd up
	)

Checked out revision 0.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9133-git-svn-nested-git-repo/s/.git/
A         .git
A         .git/objects
A         .git/objects/pack
A         .git/objects/info
A         .git/info
A         .git/info/exclude
A         .git/refs
A         .git/refs/tags
A         .git/refs/heads
A         .git/a
A         .git/HEAD
A         .git/hooks
A         .git/hooks/post-update.sample
A         .git/hooks/pre-rebase.sample
A         .git/hooks/pre-receive.sample
A         .git/hooks/prepare-commit-msg.sample
A         .git/hooks/applypatch-msg.sample
A         .git/hooks/pre-applypatch.sample
A         .git/hooks/pre-merge-commit.sample
A         .git/hooks/commit-msg.sample
A         .git/hooks/pre-commit.sample
A         .git/hooks/fsmonitor-watchman.sample
A         .git/hooks/push-to-checkout.sample
A         .git/hooks/update.sample
A         .git/hooks/pre-push.sample
A         .git/description
A         .git/branches
A         .git/config
A         a
Adding         .git
Adding         .git/HEAD
Adding         .git/a
Adding         .git/branches
Adding         .git/config
Adding         .git/description
Adding         .git/hooks
Adding         .git/hooks/applypatch-msg.sample
Adding         .git/hooks/commit-msg.sample
Adding         .git/hooks/fsmonitor-watchman.sample
Adding         .git/hooks/post-update.sample
Adding         .git/hooks/pre-applypatch.sample
Adding         .git/hooks/pre-commit.sample
Adding         .git/hooks/pre-merge-commit.sample
Adding         .git/hooks/pre-push.sample
Adding         .git/hooks/pre-rebase.sample
Adding         .git/hooks/pre-receive.sample
Adding         .git/hooks/prepare-commit-msg.sample
Adding         .git/hooks/push-to-checkout.sample
Adding         .git/hooks/update.sample
Adding         .git/info
Adding         .git/info/exclude
Adding         .git/objects
Adding         .git/objects/info
Adding         .git/objects/pack
Adding         .git/refs
Adding         .git/refs/heads
Adding         .git/refs/tags
Adding         a
Transmitting file data ...................done
Committing transaction...
Committed revision 1.
Updating '.':
At revision 1.
Sending        .git/a
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
ok 1 - setup repo with a git repo inside it

expecting success of 9133.2 'clone an SVN repo containing a git repo': 
	git svn clone "$svnrepo" g &&
	echo a > expect &&
	test_cmp expect g/a

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9133-git-svn-nested-git-repo/g/.git/
	A	a
r1 = 946b89d08b6e2a5c03d86f946c230e0b51cc7032 (refs/remotes/git-svn)
r2 = 1a88a7cca7912ca30180d5cbdfee38cc5096b092 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9133-git-svn-nested-git-repo/svnrepo r2
ok 2 - clone an SVN repo containing a git repo

expecting success of 9133.3 'SVN-side change outside of .git': 
	(
		cd s &&
		echo b >> a &&
		svn_cmd commit -m "SVN-side change outside of .git" &&
		svn_cmd up &&
		svn_cmd log -v | grep -F "SVN-side change outside of .git"
	)

Sending        a
Transmitting file data .done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
SVN-side change outside of .git
ok 3 - SVN-side change outside of .git

expecting success of 9133.4 'update git svn-cloned repo': 
	(
		cd g &&
		git svn rebase &&
		echo a > expect &&
		echo b >> expect &&
		test_cmp expect a &&
		rm expect
	)

	M	a
r3 = 8fc4f6377c1c6c1eca316e05b7c6fab36c268b38 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 4 - update git svn-cloned repo

expecting success of 9133.5 'SVN-side change inside of .git': 
	(
		cd s &&
		git add a &&
		git commit -m "add a inside an SVN repo" &&
		git log &&
		svn_cmd add --force .git &&
		svn_cmd commit -m "SVN-side change inside of .git" &&
		svn_cmd up &&
		svn_cmd log -v | grep -F "SVN-side change inside of .git"
	)

[master (root-commit) 2c8aa43] add a inside an SVN repo
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
 create mode 100644 a
commit 2c8aa43a22d2c918b77cfe09cfecdfbb4dce2117
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    add a inside an SVN repo
A  (bin)  .git/index
A         .git/objects/a3
A  (bin)  .git/objects/a3/8e8ab7e857af7a7ac6f49fa3d3821f26fedca8
A         .git/objects/2c
A  (bin)  .git/objects/2c/8aa43a22d2c918b77cfe09cfecdfbb4dce2117
A         .git/objects/42
A  (bin)  .git/objects/42/2c2b7ab3b3c668038da977e4e93a5fc623169c
A         .git/refs/heads/master
A         .git/COMMIT_EDITMSG
A         .git/logs
A         .git/logs/refs
A         .git/logs/refs/heads
A         .git/logs/refs/heads/master
A         .git/logs/HEAD
Adding         .git/COMMIT_EDITMSG
Adding  (bin)  .git/index
Adding         .git/logs
Adding         .git/logs/HEAD
Adding         .git/logs/refs
Adding         .git/logs/refs/heads
Adding         .git/logs/refs/heads/master
Adding         .git/objects/2c
Adding  (bin)  .git/objects/2c/8aa43a22d2c918b77cfe09cfecdfbb4dce2117
Adding         .git/objects/42
Adding  (bin)  .git/objects/42/2c2b7ab3b3c668038da977e4e93a5fc623169c
Adding         .git/objects/a3
Adding  (bin)  .git/objects/a3/8e8ab7e857af7a7ac6f49fa3d3821f26fedca8
Adding         .git/refs/heads/master
Transmitting file data ........done
Committing transaction...
Committed revision 4.
Updating '.':
At revision 4.
SVN-side change inside of .git
ok 5 - SVN-side change inside of .git

expecting success of 9133.6 'update git svn-cloned repo': 
	(
		cd g &&
		git svn rebase &&
		echo a > expect &&
		echo b >> expect &&
		test_cmp expect a &&
		rm expect
	)

r4 = 65d94983ac2b41008f26aa3d123d067036dab40a (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 6 - update git svn-cloned repo

expecting success of 9133.7 'SVN-side change in and out of .git': 
	(
		cd s &&
		echo c >> a &&
		git add a &&
		git commit -m "add a inside an SVN repo" &&
		svn_cmd commit -m "SVN-side change in and out of .git" &&
		svn_cmd up &&
		svn_cmd log -v | grep -F "SVN-side change in and out of .git"
	)

[master 1e2f668] add a inside an SVN repo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Sending        .git/index
Sending        .git/logs/HEAD
Sending        .git/logs/refs/heads/master
Sending        .git/refs/heads/master
Sending        a
Transmitting file data .....done
Committing transaction...
Committed revision 5.
Updating '.':
At revision 5.
SVN-side change in and out of .git
ok 7 - SVN-side change in and out of .git

expecting success of 9133.8 'update git svn-cloned repo again': 
	(
		cd g &&
		git svn rebase &&
		echo a > expect &&
		echo b >> expect &&
		echo c >> expect &&
		test_cmp expect a &&
		rm expect
	)

	M	a
r5 = 1487c96a2fa7ab5c434902e307bd5e11a8db1301 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 8 - update git svn-cloned repo again

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9136-git-svn-recreated-branch-empty-file.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9136-git-svn-recreated-branch-empty-file/.git/
expecting success of 9136.1 'load svn dumpfile': 
	svnadmin load "$rawsvnrepo" < "${TEST_DIRECTORY}/t9136/svn.dump"
	
<<< Started new transaction, based on original revision 1
     * editing path : branches ... done.
     * editing path : tags ... done.
     * editing path : trunk ... done.
     * editing path : trunk/file ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * editing path : tags/1.0 ...COPIED... done.

------- Committed revision 2 >>>

<<< Started new transaction, based on original revision 3
     * editing path : tags/1.0.1 ...COPIED... done.

------- Committed revision 3 >>>

<<< Started new transaction, based on original revision 4
     * editing path : tags/1.0.1 ... done.

------- Committed revision 4 >>>

<<< Started new transaction, based on original revision 5
     * editing path : branches/1.0 ...COPIED... done.

------- Committed revision 5 >>>

<<< Started new transaction, based on original revision 6
     * editing path : tags/1.0.1 ...COPIED... done.

------- Committed revision 6 >>>

ok 1 - load svn dumpfile

expecting success of 9136.2 'clone using git svn': git svn clone -s "$svnrepo" x
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9136-git-svn-recreated-branch-empty-file/x/.git/
	A	file
r1 = 925366bba522b35588229cf23b80f4127b127cba (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/tags/1.0, 1
Found branch parent: (refs/remotes/origin/tags/1.0) 925366bba522b35588229cf23b80f4127b127cba
Following parent with do_switch
Successfully followed parent
r2 = 3c828a93fe56a60f7839116f4c15a00dc09f6c9d (refs/remotes/origin/tags/1.0)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/tags/1.0 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/tags/1.0.1, 2
Found branch parent: (refs/remotes/origin/tags/1.0.1) 3c828a93fe56a60f7839116f4c15a00dc09f6c9d
Following parent with do_switch
Successfully followed parent
r3 = c58b3cb6530fc88e06bbcb52d96368079470cfab (refs/remotes/origin/tags/1.0.1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/tags/1.0 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/branches/1.0, 4
Found branch parent: (refs/remotes/origin/1.0) 3c828a93fe56a60f7839116f4c15a00dc09f6c9d
Following parent with do_switch
Successfully followed parent
r5 = b66b905b52ac85fab1e36bab4985a15e46220a3d (refs/remotes/origin/1.0)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/branches/1.0 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/tags/1.0.1, 5
Found branch parent: (refs/remotes/origin/tags/1.0.1) b66b905b52ac85fab1e36bab4985a15e46220a3d
Following parent with do_switch
Successfully followed parent
r6 = 2b7033993da3cef1d7f9c1f6bdf19e7146b8cea5 (refs/remotes/origin/tags/1.0.1)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9136-git-svn-recreated-branch-empty-file/svnrepo/trunk r1
ok 2 - clone using git svn

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9137-git-svn-dcommit-clobber-series.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9137-git-svn-dcommit-clobber-series/.git/
expecting success of 9137.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
	
Adding         file
Committing transaction...
Committed revision 1.
	A	file
r1 = e11d56b96edc0f1b0dd26de6122425661e4a5aa1 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9137-git-svn-dcommit-clobber-series/svnrepo r1
ok 1 - initialize repo

expecting success of 9137.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"
	)
	
A    tmp/file
Checked out revision 1.
Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 2.
ok 2 - (supposedly) non-conflicting change from SVN

expecting success of 9137.3 'some unrelated changes to git': 
	echo hi > life &&
	git update-index --add life &&
	git commit -m hi-life &&
	echo bye >> life &&
	git commit -m bye-life life
	
[master 108bd0b] hi-life
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 life
[master bb61bc8] bye-life
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 3 - some unrelated changes to git

expecting success of 9137.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
	
[master ea165cc] 4 => 4444, 7 => 7777
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+), 2 deletions(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9137-git-svn-dcommit-clobber-series/svnrepo ...
	A	life
Committed r3
	M	file
r2 = ee8a02432b3be169d54e50e5812b6cb88244bf88 (refs/remotes/git-svn)
	A	life
r3 = 2f3286dfcdbab9f4c32bcd85a75d079d98ca4b37 (refs/remotes/git-svn)
W: 108bd0b94424fa83486a29ab93e071cd1f34d9e5 and refs/remotes/git-svn differ, using rebase:
:100644 100644 55200b3d5d7c0e515eaccaf8465a295017e88249 15dcf092297e5fcea41cadcc3eb0a689aaa3e65e M	file
warning: skipped previously applied commit 108bd0b
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/master.
	M	life
Committed r4
	M	life
r4 = f29d0519e6e4fabdaeb83d403f3e343c8e3b82c4 (refs/remotes/git-svn)
	M	file
Committed r5
	M	file
r5 = 5faf2d3f89321e1edc5a596f2fe5e26ffc231fe6 (refs/remotes/git-svn)
No changes between 0afc0399fbd59039fcecfc4fb488d98de1ea7f90 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Updating 'tmp':
U    tmp/file
A    tmp/life
Updated to revision 5.
ok 4 - change file but in unrelated area

expecting success of 9137.5 'attempt to dcommit with a dirty index': 
	echo foo >>file &&
	git add file &&
	test_must_fail git svn dcommit

Cannot dcommit with a dirty index.  Commit your changes first, or stash them with `git stash'.
 at /<<PKGBUILDDIR>>/git-svn line 855.

ok 5 - attempt to dcommit with a dirty index

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9139-git-svn-non-utf8-commitencoding.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9139-git-svn-non-utf8-commitencoding/.git/
expecting success of 9139.1 'ISO8859-1 setup': 
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	
Committing transaction...
Committed revision 1.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9139-git-svn-non-utf8-commitencoding/ISO8859-1/.git/
r1 = 8c10cd5e4011efdea7ca1efe75b80ba468698fb9 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9139-git-svn-non-utf8-commitencoding/svnrepo/ISO8859-1 r1
ok 1 - ISO8859-1 setup

expecting success of 9139.2 'eucJP setup': 
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	
Committing transaction...
Committed revision 2.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9139-git-svn-non-utf8-commitencoding/eucJP/.git/
r2 = ba38b284da8767126c9e944b01c9708763f29ea9 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9139-git-svn-non-utf8-commitencoding/svnrepo/eucJP r2
ok 2 - eucJP setup

expecting success of 9139.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"
	)
	
Switched to a new branch 't'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F
ok 3 - ISO8859-1 commit on git side

expecting success of 9139.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"
	)
	
Switched to a new branch 't'
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 F
ok 4 - eucJP commit on git side

expecting success of 9139.5 'ISO8859-1 dcommit to svn': 
	(
		cd $H &&
		git config --unset i18n.commitencoding &&
		test_must_fail git svn dcommit
	)
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9139-git-svn-non-utf8-commitencoding/svnrepo/ISO8859-1 ...
Could not decode as UTF-8:

Perhaps you need to set i18n.commitencoding

ok 5 - ISO8859-1 dcommit to svn

expecting success of 9139.6 'eucJP dcommit to svn': 
	(
		cd $H &&
		git config --unset i18n.commitencoding &&
		test_must_fail git svn dcommit
	)
	
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9139-git-svn-non-utf8-commitencoding/svnrepo/eucJP ...
Could not decode as UTF-8:

Perhaps you need to set i18n.commitencoding

ok 6 - eucJP dcommit to svn

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9134-git-svn-ignore-paths.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9134-git-svn-ignore-paths/.git/
expecting success of 9134.1 'setup test repository': 
	svn_cmd co "$svnrepo" s &&
	(
		cd s &&
		mkdir qqq www &&
		echo test_qqq > qqq/test_qqq.txt &&
		echo test_www > www/test_www.txt &&
		svn_cmd add qqq &&
		svn_cmd add www &&
		svn_cmd commit -m "create some files" &&
		svn_cmd up &&
		echo hi >> www/test_www.txt &&
		svn_cmd commit -m "modify www/test_www.txt" &&
		svn_cmd up
	)

Checked out revision 0.
A         qqq
A         qqq/test_qqq.txt
A         www
A         www/test_www.txt
Adding         qqq
Adding         qqq/test_qqq.txt
Adding         www
Adding         www/test_www.txt
Transmitting file data ..done
Committing transaction...
Committed revision 1.
Updating '.':
At revision 1.
Sending        www/test_www.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
ok 1 - setup test repository

expecting success of 9134.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 || return 1; done &&
	test_cmp expect expect2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9134-git-svn-ignore-paths/g/.git/
	A	qqq/test_qqq.txt
r1 = 4cfc6ccbc55610ad600d398b7ff131282058c2dd (refs/remotes/git-svn)
r2 = 981c1f30cba58f515478892ce808c1042a183472 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9134-git-svn-ignore-paths/svnrepo r2
ok 2 - clone an SVN repository with ignored www directory

expecting success of 9134.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 || return 1; done &&
	test_cmp expect expect2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9134-git-svn-ignore-paths/c/.git/
	A	qqq/test_qqq.txt
r1 = 4cfc6ccbc55610ad600d398b7ff131282058c2dd (refs/remotes/git-svn)
r2 = 981c1f30cba58f515478892ce808c1042a183472 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9134-git-svn-ignore-paths/svnrepo r2
ok 3 - init+fetch an SVN repository with ignored www directory

expecting success of 9134.4 'verify ignore-paths config saved by clone': 
	(
	    cd g &&
	    git config --get svn-remote.svn.ignore-paths | grep www
	)

^www
ok 4 - verify ignore-paths config saved by clone

expecting success of 9134.5 'SVN-side change outside of www': 
	(
		cd s &&
		echo b >> qqq/test_qqq.txt &&
		svn_cmd commit -m "SVN-side change outside of www" &&
		svn_cmd up &&
		svn_cmd log -v | grep "SVN-side change outside of www"
	)

Sending        qqq/test_qqq.txt
Transmitting file data .done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
SVN-side change outside of www
ok 5 - SVN-side change outside of www

expecting success of 9134.6 'update git svn-cloned repo (config ignore)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r3 = 498edcf329b51fd58233894ddec0452a611109df (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 6 - update git svn-cloned repo (config ignore)

expecting success of 9134.7 'update git svn-cloned repo (option ignore)': 
	(
		cd c &&
		git svn rebase --ignore-paths="^www" &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r3 = 498edcf329b51fd58233894ddec0452a611109df (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 7 - update git svn-cloned repo (option ignore)

expecting success of 9134.8 'SVN-side change inside of ignored www': 
	(
		cd s &&
		echo zaq >> www/test_www.txt &&
		svn_cmd commit -m "SVN-side change inside of www/test_www.txt" &&
		svn_cmd up &&
		svn_cmd log -v | grep -F "SVN-side change inside of www/test_www.txt"
	)

Sending        www/test_www.txt
Transmitting file data .done
Committing transaction...
Committed revision 4.
Updating '.':
At revision 4.
SVN-side change inside of www/test_www.txt
ok 8 - SVN-side change inside of ignored www

expecting success of 9134.9 'update git svn-cloned repo (config ignore)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

r4 = 0188e17a45871381ee8339924d40575a625e0427 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 9 - update git svn-cloned repo (config ignore)

expecting success of 9134.10 'update git svn-cloned repo (option ignore)': 
	(
		cd c &&
		git svn rebase --ignore-paths="^www" &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

r4 = 0188e17a45871381ee8339924d40575a625e0427 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 10 - update git svn-cloned repo (option ignore)

expecting success of 9134.11 'SVN-side change in and out of ignored www': 
	(
		cd s &&
		echo cvf >> www/test_www.txt &&
		echo ygg >> qqq/test_qqq.txt &&
		svn_cmd commit -m "SVN-side change in and out of ignored www" &&
		svn_cmd up &&
		svn_cmd log -v | grep "SVN-side change in and out of ignored www"
	)

Sending        qqq/test_qqq.txt
Sending        www/test_www.txt
Transmitting file data ..done
Committing transaction...
Committed revision 5.
Updating '.':
At revision 5.
SVN-side change in and out of ignored www
ok 11 - SVN-side change in and out of ignored www

expecting success of 9134.12 'update git svn-cloned repo again (config ignore)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\nygg\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r5 = de73c1b0abae2767816bebbded42cbffba732098 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 12 - update git svn-cloned repo again (config ignore)

expecting success of 9134.13 'update git svn-cloned repo again (option ignore)': 
	(
		cd c &&
		git svn rebase --ignore-paths="^www" &&
		printf "test_qqq\nb\nygg\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r5 = de73c1b0abae2767816bebbded42cbffba732098 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 13 - update git svn-cloned repo again (option ignore)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9138-git-svn-authors-prog.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9138-git-svn-authors-prog/.git/
expecting success of 9138.1 'svn-authors setup': 
	cat >svn-authors <<-\EOF
	ff = FFFFFFF FFFFFFF <fFf@other.example.com>
	EOF

ok 1 - svn-authors setup

expecting success of 9138.2 'setup svnrepo': 
	for i in aa bb cc-sub dd-sub ee-foo ff
	do
		svn mkdir -m $i --username $i "$svnrepo"/$i || return 1
	done

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
ok 2 - setup svnrepo

expecting success of 9138.3 'import authors with prog and file': 
	git svn clone --authors-prog=./svn-authors-prog \
	    --authors-file=svn-authors "$svnrepo" x

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9138-git-svn-authors-prog/x/.git/
W: +empty_dir: aa
r1 = 0c6a4656b06bc995b94fe5c0fe89013abf7294fe (refs/remotes/git-svn)
W: +empty_dir: bb
r2 = 9ab310caf8cb16c76b461dfce6289d6e845bedc3 (refs/remotes/git-svn)
W: +empty_dir: cc-sub
r3 = 29f615465401c926f3828d17d44f9d399df45615 (refs/remotes/git-svn)
W: +empty_dir: dd-sub
r4 = 2af2055a64d4b4acc54c90f9f4a00215e7d9b908 (refs/remotes/git-svn)
W: +empty_dir: ee-foo
r5 = 5cb8d615e8a8b5aa3107e5da945ce3fdbbf17543 (refs/remotes/git-svn)
W: +empty_dir: ff
r6 = 32a4c047b38d312877549c7604618db94eb5bd61 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9138-git-svn-authors-prog/svnrepo r6
creating empty directory: aa
creating empty directory: bb
creating empty directory: cc-sub
creating empty directory: dd-sub
creating empty directory: ee-foo
creating empty directory: ff
ok 3 - import authors with prog and file

expecting success of 9138.4 'imported 6 revisions successfully': 
	(
		cd x &&
		git rev-list refs/remotes/git-svn >actual &&
		test_line_count = 6 actual
	)

ok 4 - imported 6 revisions successfully

expecting success of 9138.5 'authors-prog ran correctly': 
	(
		cd x &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~1 >actual &&
		grep "^author ee-foo <ee-foo@example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~2 >actual &&
		grep "^author dd <dd@sub\.example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~3 >actual &&
		grep "^author cc <cc@sub\.example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~4 >actual &&
		grep "^author bb <bb@example\.com> " actual &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn~5 >actual &&
		grep "^author aa <aa@example\.com> " actual
	)

author ee-foo <ee-foo@example.com> 1672215326 +0000
author dd <dd@sub.example.com> 1672215324 +0000
author cc <cc@sub.example.com> 1672215323 +0000
author bb <bb@example.com> 1672215321 +0000
author aa <aa@example.com> 1672215319 +0000
ok 5 - authors-prog ran correctly

expecting success of 9138.6 'authors-file overrode authors-prog': 
	(
		cd x &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn >actual &&
		grep "^author FFFFFFF FFFFFFF <fFf@other\.example\.com> " actual
	)

author FFFFFFF FFFFFFF <fFf@other.example.com> 1672215328 +0000
ok 6 - authors-file overrode authors-prog

expecting success of 9138.7 'authors-prog imported user without email': 
	svn mkdir -m gg --username gg-hermit "$svnrepo"/gg &&
	(
		cd x &&
		git svn fetch --authors-prog=../svn-authors-prog &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn | \
		  grep "^author gg <> "
	)

Committing transaction...
Committed revision 7.
W: +empty_dir: gg
r7 = 13ae0c564cea59d86bfab220e46483d37067fd58 (refs/remotes/git-svn)
author gg <> 1672215338 +0000
ok 7 - authors-prog imported user without email

expecting success of 9138.8 'imported without authors-prog and authors-file': 
	svn mkdir -m hh --username hh "$svnrepo"/hh &&
	(
		uuid=$(svn info "$svnrepo" |
			sed -n "s/^Repository UUID: //p") &&
		cd x &&
		git svn fetch &&
		git rev-list -1 --pretty=raw refs/remotes/git-svn | \
		  grep "^author hh <hh@$uuid> "
	)

Committing transaction...
Committed revision 8.
W: +empty_dir: hh
r8 = 8106cdae66312aaed0132d34651b145de828898c (refs/remotes/git-svn)
author hh <hh@523859ff-472b-4777-a619-8fffc38b7047> 1672215344 +0000
ok 8 - imported without authors-prog and authors-file

expecting success of 9138.9 '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 >actual &&
		grep "^author xyz; touch evil <xyz; touch evil@example\.com> " actual &&
		! test -f evil
	)

Committing transaction...
Committed revision 9.
W: +empty_dir: bad
r9 = 103a4258a5b965549d71a312cab0a665ed2518f4 (refs/remotes/git-svn)
author xyz; touch evil <xyz; touch evil@example.com> 1672215352 +0000
ok 9 - authors-prog handled special characters in username

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9142-git-svn-shallow-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9142-git-svn-shallow-clone/.git/
expecting success of 9142.1 'setup test repository': 
	svn_cmd mkdir -m "create standard layout" \
	  "$svnrepo"/trunk "$svnrepo"/branches "$svnrepo"/tags &&
	svn_cmd cp -m "branch off trunk" \
	  "$svnrepo"/trunk "$svnrepo"/branches/a &&
	svn_cmd co "$svnrepo"/branches/a &&
	(
		cd a &&
		> foo &&
		svn_cmd add foo &&
		svn_cmd commit -m "add foo"
	) &&
	maybe_start_httpd

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Checked out revision 2.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
ok 1 - setup test repository

expecting success of 9142.2 'clone trunk with "-r HEAD"': 
	git svn clone -r HEAD "$svnrepo/trunk" g &&
	( cd g && git rev-parse --symbolic --verify HEAD )

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9142-git-svn-shallow-clone/g/.git/
r1 = 81a0561ef720cd30e4878f6192e2ac752e5ed10b (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9142-git-svn-shallow-clone/svnrepo/trunk r1
HEAD
ok 2 - clone trunk with "-r HEAD"

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9143-git-svn-gc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9143-git-svn-gc/.git/
expecting success of 9143.1 'setup directories and test repo': 
	mkdir import &&
	mkdir tmp &&
	echo "Sample text for Subversion repository." > import/test.txt &&
	svn_cmd import -m "import for git svn" import "$svnrepo" > /dev/null
	
ok 1 - setup directories and test repo

expecting success of 9143.2 'checkout working copy from svn': svn_cmd co "$svnrepo" test_wc
A    test_wc/test.txt
Checked out revision 1.
ok 2 - checkout working copy from svn

expecting success of 9143.3 'set some properties to create an unhandled.log file': 
	(
		cd test_wc &&
		svn_cmd propset foo bar test.txt &&
		svn_cmd commit -m "property set"
	)
property 'foo' set on 'test.txt'
Sending        test.txt
Committing transaction...
Committed revision 2.
ok 3 - set some properties to create an unhandled.log file

expecting success of 9143.4 'Setup repo': git svn init "$svnrepo"
ok 4 - Setup repo

expecting success of 9143.5 'Fetch repo': git svn fetch
	A	test.txt
r1 = 6cbf208a3f02c84731442c6876791133ab76b6d1 (refs/remotes/git-svn)
	M	test.txt
r2 = 0a9a2451ff17038087c6e4a8a0192110a4df009f (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9143-git-svn-gc/svnrepo r2
ok 5 - Fetch repo

expecting success of 9143.6 'make backup copy of unhandled.log': 
	 cp .git/svn/refs/remotes/git-svn/unhandled.log tmp
	
ok 6 - make backup copy of unhandled.log

expecting success of 9143.7 'create leftover index': > .git/svn/refs/remotes/git-svn/index
ok 7 - create leftover index

expecting success of 9143.8 'git svn gc runs': git svn gc
ok 8 - git svn gc runs

expecting success of 9143.9 'git svn index removed': ! test -f .git/svn/refs/remotes/git-svn/index
ok 9 - git svn index removed

expecting success of 9143.10 'git svn gc produces a valid gzip file': 
		 gunzip .git/svn/refs/remotes/git-svn/unhandled.log.gz
		
ok 10 - git svn gc produces a valid gzip file

expecting success of 9143.11 'git svn gc does not change unhandled.log files': 
	 test_cmp .git/svn/refs/remotes/git-svn/unhandled.log tmp/unhandled.log
	
ok 11 - git svn gc does not change unhandled.log files

# passed all 11 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9140-git-svn-reset.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9140-git-svn-reset/.git/
expecting success of 9140.1 'setup test repository': 
	svn_cmd co "$svnrepo" s &&
	(
		cd s &&
		mkdir vis &&
		echo always visible > vis/vis.txt &&
		svn_cmd add vis &&
		svn_cmd commit -m "create visible files" &&
		mkdir hid &&
		echo initially hidden > hid/hid.txt &&
		svn_cmd add hid &&
		svn_cmd commit -m "create initially hidden files" &&
		svn_cmd up &&
		echo mod >> vis/vis.txt &&
		svn_cmd commit -m "modify vis" &&
		svn_cmd up
	)

Checked out revision 0.
A         vis
A         vis/vis.txt
Adding         vis
Adding         vis/vis.txt
Transmitting file data .done
Committing transaction...
Committed revision 1.
A         hid
A         hid/hid.txt
Adding         hid
Adding         hid/hid.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
Sending        vis/vis.txt
Transmitting file data .done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
ok 1 - setup test repository

expecting success of 9140.2 'clone SVN repository with hidden directory': 
	git svn init "$svnrepo" g &&
	( cd g && git svn fetch --ignore-paths="^hid" )

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9140-git-svn-reset/g/.git/
	A	vis/vis.txt
r1 = 2e298231343ad56266438821a1fb594cd1824fbb (refs/remotes/git-svn)
r2 = ac97a9b87d6f3304b59f6bd99acbf023bc2ac3ab (refs/remotes/git-svn)
	M	vis/vis.txt
r3 = 296c5da05f15dcffe19daacb9f51346d677a230d (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9140-git-svn-reset/svnrepo r3
ok 2 - clone SVN repository with hidden directory

expecting success of 9140.3 'modify hidden file in SVN repo': 
	( cd s &&
	  echo mod hidden >> hid/hid.txt &&
	  svn_cmd commit -m "modify hid" &&
	  svn_cmd up
	)

Sending        hid/hid.txt
Transmitting file data .done
Committing transaction...
Committed revision 4.
Updating '.':
At revision 4.
ok 3 - modify hidden file in SVN repo

expecting success of 9140.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 ) &&
	grep "not found in commit" errors &&
	test_cmp expect expect2

hid/hid.txt was not found in commit 296c5da05f15dcffe19daacb9f51346d677a230d (r3)
ok 4 - fetch fails on modified hidden file

expecting success of 9140.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

r1 = 2e298231343ad56266438821a1fb594cd1824fbb (refs/remotes/git-svn)
ok 5 - reset unwinds back to r1

expecting success of 9140.6 'refetch succeeds not ignoring any files': 
	( cd g &&
	  git svn fetch &&
	  git svn rebase &&
	  grep "mod hidden" hid/hid.txt
	)

Index mismatch: a4b5c203f79112e92d530cb82366ca4d706fa4a8 != 6b5a1244749c8cdb5442eefd0abc3689d666322d
rereading 2e298231343ad56266438821a1fb594cd1824fbb
	A	hid/hid.txt
r2 = 39f9953c27143cb14ddc65bed89e504bc05ebf7b (refs/remotes/git-svn)
	M	vis/vis.txt
r3 = c4d6b601eff9a08e98ae4d78205814df1a06068b (refs/remotes/git-svn)
	M	hid/hid.txt
r4 = 6e897d652ce09669fbff3b8c585fd01e3a331af1 (refs/remotes/git-svn)
warning: skipped previously applied commit 296c5da
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
mod hidden
ok 6 - refetch succeeds not ignoring any files

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9144-git-svn-old-rev_map.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9144-git-svn-old-rev_map/.git/
expecting success of 9144.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

Adding         i/a
Committing transaction...
Committed revision 1.
	A	a
r1 = e7f7c37f0648a1eae2f018e2ab8565203d035bb6 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9144-git-svn-old-rev_map/svnrepo r1
ok 1 - setup test repository with old layout

expecting success of 9144.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/

Adding         i/a
Committing transaction...
Committed revision 2.
	A	b/a
r2 = 6f50af477f3c3a4e5259a3ff4d5637c6c812cfe9 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
[master 881794e] -
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9144-git-svn-old-rev_map/svnrepo ...
	M	b/a
Committed r3
	M	b/a
r3 = 3a98b9d3b56a2380c1d2fc5bfeaf3cadc13b56f0 (refs/remotes/git-svn)
No changes between 881794e98682fa72d7a6003ea4d424a38b818484 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 2 - old layout continues to work

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9145-git-svn-master-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9145-git-svn-master-branch/.git/
expecting success of 9145.1 'setup test repository': 
	mkdir i &&
	> i/a &&
	svn_cmd import -m trunk i "$svnrepo/trunk" &&
	svn_cmd import -m b/a i "$svnrepo/branches/a" &&
	svn_cmd import -m b/b i "$svnrepo/branches/b"

Adding         i/a
Committing transaction...
Committed revision 1.
Adding         i/a
Committing transaction...
Committed revision 2.
Adding         i/a
Committing transaction...
Committed revision 3.
ok 1 - setup test repository

expecting success of 9145.2 'git svn clone --stdlayout sets up trunk as main': 
	git svn clone -s "$svnrepo" g &&
	(
		cd g &&
		test x$(git rev-parse --verify refs/remotes/origin/trunk^0) = \
		     x$(git rev-parse --verify refs/heads/main^0)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9145-git-svn-master-branch/g/.git/
	A	a
r1 = 62a5069e7424361163465f96772af9c0713bf8ca (refs/remotes/origin/trunk)
	A	a
r2 = 533e2131fa44c5b626c2cdded8da4733c3ed93f7 (refs/remotes/origin/a)
	A	a
r3 = d5c397197ce9d844583661af866d11f9061fce55 (refs/remotes/origin/b)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9145-git-svn-master-branch/svnrepo/trunk r1
ok 2 - git svn clone --stdlayout sets up trunk as main

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9147-git-svn-include-paths.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9147-git-svn-include-paths/.git/
expecting success of 9147.1 'setup test repository': 
	svn_cmd co "$svnrepo" s &&
	(
		cd s &&
		mkdir qqq www xxx &&
		echo test_qqq > qqq/test_qqq.txt &&
		echo test_www > www/test_www.txt &&
		echo test_xxx > xxx/test_xxx.txt &&
		svn_cmd add qqq &&
		svn_cmd add www &&
		svn_cmd add xxx &&
		svn_cmd commit -m "create some files" &&
		svn_cmd up &&
		echo hi >> www/test_www.txt &&
		svn_cmd commit -m "modify www/test_www.txt" &&
		svn_cmd up
	)

Checked out revision 0.
A         qqq
A         qqq/test_qqq.txt
A         www
A         www/test_www.txt
A         xxx
A         xxx/test_xxx.txt
Adding         qqq
Adding         qqq/test_qqq.txt
Adding         www
Adding         www/test_www.txt
Adding         xxx
Adding         xxx/test_xxx.txt
Transmitting file data ...done
Committing transaction...
Committed revision 1.
Updating '.':
At revision 1.
Sending        www/test_www.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
ok 1 - setup test repository

expecting success of 9147.2 'clone an SVN repository with filter to include qqq directory': 
	git svn clone --include-paths="qqq" "$svnrepo" g &&
	echo test_qqq > expect &&
	for i in g/*/*.txt; do cat $i >> expect2 || return 1; done &&
	test_cmp expect expect2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9147-git-svn-include-paths/g/.git/
	A	qqq/test_qqq.txt
r1 = c80e4a43bcc88efeb90528d716600e45b2a532f4 (refs/remotes/git-svn)
r2 = 74a7cb3f6adea274306659ed57bbe9bd7083a13c (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9147-git-svn-include-paths/svnrepo r2
ok 2 - clone an SVN repository with filter to include qqq directory

expecting success of 9147.3 'init+fetch an SVN repository with included qqq directory': 
	git svn init "$svnrepo" c &&
	( cd c && git svn fetch --include-paths="qqq" ) &&
	rm expect2 &&
	echo test_qqq > expect &&
	for i in c/*/*.txt; do cat $i >> expect2 || return 1; done &&
	test_cmp expect expect2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9147-git-svn-include-paths/c/.git/
	A	qqq/test_qqq.txt
r1 = c80e4a43bcc88efeb90528d716600e45b2a532f4 (refs/remotes/git-svn)
r2 = 74a7cb3f6adea274306659ed57bbe9bd7083a13c (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9147-git-svn-include-paths/svnrepo r2
ok 3 - init+fetch an SVN repository with included qqq directory

expecting success of 9147.4 'verify include-paths config saved by clone': 
	(
	    cd g &&
	    git config --get svn-remote.svn.include-paths | grep qqq
	)

qqq
ok 4 - verify include-paths config saved by clone

expecting success of 9147.5 'SVN-side change outside of www': 
	(
		cd s &&
		echo b >> qqq/test_qqq.txt &&
		svn_cmd commit -m "SVN-side change outside of www" &&
		svn_cmd up &&
		svn_cmd log -v | grep "SVN-side change outside of www"
	)

Sending        qqq/test_qqq.txt
Transmitting file data .done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
SVN-side change outside of www
ok 5 - SVN-side change outside of www

expecting success of 9147.6 'update git svn-cloned repo (config include)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r3 = 4f0d9a011a86eb40dd5e8558eaf1dee9452525dc (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 6 - update git svn-cloned repo (config include)

expecting success of 9147.7 'update git svn-cloned repo (option include)': 
	(
		cd c &&
		git svn rebase --include-paths="qqq" &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r3 = 4f0d9a011a86eb40dd5e8558eaf1dee9452525dc (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 7 - update git svn-cloned repo (option include)

expecting success of 9147.8 'SVN-side change inside of ignored www': 
	(
		cd s &&
		echo zaq >> www/test_www.txt &&
		svn_cmd commit -m "SVN-side change inside of www/test_www.txt" &&
		svn_cmd up &&
		svn_cmd log -v | grep "SVN-side change inside of www/test_www.txt"
	)

Sending        www/test_www.txt
Transmitting file data .done
Committing transaction...
Committed revision 4.
Updating '.':
At revision 4.
SVN-side change inside of www/test_www.txt
ok 8 - SVN-side change inside of ignored www

expecting success of 9147.9 'update git svn-cloned repo (config include)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

r4 = e3d17713a43f72c6dadcb23241a477b3668a2971 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 9 - update git svn-cloned repo (config include)

expecting success of 9147.10 'update git svn-cloned repo (option include)': 
	(
		cd c &&
		git svn rebase --include-paths="qqq" &&
		printf "test_qqq\nb\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

r4 = e3d17713a43f72c6dadcb23241a477b3668a2971 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 10 - update git svn-cloned repo (option include)

expecting success of 9147.11 'SVN-side change in and out of included qqq': 
	(
		cd s &&
		echo cvf >> www/test_www.txt &&
		echo ygg >> qqq/test_qqq.txt &&
		svn_cmd commit -m "SVN-side change in and out of ignored www" &&
		svn_cmd up &&
		svn_cmd log -v | grep "SVN-side change in and out of ignored www"
	)

Sending        qqq/test_qqq.txt
Sending        www/test_www.txt
Transmitting file data ..done
Committing transaction...
Committed revision 5.
Updating '.':
At revision 5.
SVN-side change in and out of ignored www
ok 11 - SVN-side change in and out of included qqq

expecting success of 9147.12 'update git svn-cloned repo again (config include)': 
	(
		cd g &&
		git svn rebase &&
		printf "test_qqq\nb\nygg\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r5 = 70f790bfe277d0a65a9acba192ad30880eca169d (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 12 - update git svn-cloned repo again (config include)

expecting success of 9147.13 'update git svn-cloned repo again (option include)': 
	(
		cd c &&
		git svn rebase --include-paths="qqq" &&
		printf "test_qqq\nb\nygg\n" > expect &&
		for i in */*.txt; do cat $i >> expect2 || exit 1; done &&
		test_cmp expect2 expect &&
		rm expect expect2
	)

	M	qqq/test_qqq.txt
r5 = 70f790bfe277d0a65a9acba192ad30880eca169d (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 13 - update git svn-cloned repo again (option include)

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9141-git-svn-multiple-branches.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9141-git-svn-multiple-branches/.git/
expecting success of 9141.1 'setup svnrepo': 
	mkdir	project \
		project/trunk \
		project/b_one \
		project/b_two \
		project/tags_A \
		project/tags_B &&
	echo 1 > project/trunk/a.file &&
	svn_cmd import -m "$test_description" project "$svnrepo/project" &&
	rm -rf project &&
	svn_cmd cp -m "Branch 1" "$svnrepo/project/trunk" \
				 "$svnrepo/project/b_one/first" &&
	svn_cmd cp -m "Tag 1" "$svnrepo/project/trunk" \
			      "$svnrepo/project/tags_A/1.0" &&
	svn_cmd co "$svnrepo/project" svn_project &&
	( cd svn_project &&
		echo 2 > trunk/a.file &&
		svn_cmd ci -m "Change 1" trunk/a.file &&
		svn_cmd cp -m "Branch 2" "$svnrepo/project/trunk" \
					 "$svnrepo/project/b_one/second" &&
		svn_cmd cp -m "Tag 2" "$svnrepo/project/trunk" \
				      "$svnrepo/project/tags_A/2.0" &&
		echo 3 > trunk/a.file &&
		svn_cmd ci -m "Change 2" trunk/a.file &&
		svn_cmd cp -m "Branch 3" "$svnrepo/project/trunk" \
					 "$svnrepo/project/b_two/1" &&
		svn_cmd cp -m "Tag 3" "$svnrepo/project/trunk" \
				      "$svnrepo/project/tags_A/3.0" &&
		echo 4 > trunk/a.file &&
		svn_cmd ci -m "Change 3" trunk/a.file &&
		svn_cmd cp -m "Branch 4" "$svnrepo/project/trunk" \
					 "$svnrepo/project/b_two/2" &&
		svn_cmd cp -m "Tag 4" "$svnrepo/project/trunk" \
				      "$svnrepo/project/tags_A/4.0" &&
		svn_cmd up &&
		echo 5 > b_one/first/a.file &&
		svn_cmd ci -m "Change 4" b_one/first/a.file &&
		svn_cmd cp -m "Tag 5" "$svnrepo/project/b_one/first" \
				      "$svnrepo/project/tags_B/v5" &&
		echo 6 > b_one/second/a.file &&
		svn_cmd ci -m "Change 5" b_one/second/a.file &&
		svn_cmd cp -m "Tag 6" "$svnrepo/project/b_one/second" \
				      "$svnrepo/project/tags_B/v6" &&
		echo 7 > b_two/1/a.file &&
		svn_cmd ci -m "Change 6" b_two/1/a.file &&
		svn_cmd cp -m "Tag 7" "$svnrepo/project/b_two/1" \
				      "$svnrepo/project/tags_B/v7" &&
		echo 8 > b_two/2/a.file &&
		svn_cmd ci -m "Change 7" b_two/2/a.file &&
		svn_cmd cp -m "Tag 8" "$svnrepo/project/b_two/2" \
				      "$svnrepo/project/tags_B/v8"
	)

Adding         project/b_one
Adding         project/b_two
Adding         project/tags_A
Adding         project/tags_B
Adding         project/trunk
Adding         project/trunk/a.file
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
A    svn_project/b_one
A    svn_project/b_one/first
A    svn_project/b_one/first/a.file
A    svn_project/b_two
A    svn_project/tags_A
A    svn_project/tags_A/1.0
A    svn_project/tags_A/1.0/a.file
A    svn_project/tags_B
A    svn_project/trunk
A    svn_project/trunk/a.file
Checked out revision 3.
Sending        trunk/a.file
Transmitting file data .done
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Sending        trunk/a.file
Transmitting file data .done
Committing transaction...
Committed revision 7.
Committing transaction...
Committed revision 8.
Committing transaction...
Committed revision 9.
Sending        trunk/a.file
Transmitting file data .done
Committing transaction...
Committed revision 10.
Committing transaction...
Committed revision 11.
Committing transaction...
Committed revision 12.
Updating '.':
A    b_one/second
A    b_one/second/a.file
A    b_two/1
A    b_two/1/a.file
A    b_two/2
A    b_two/2/a.file
A    tags_A/2.0
A    tags_A/2.0/a.file
A    tags_A/3.0
A    tags_A/3.0/a.file
A    tags_A/4.0
A    tags_A/4.0/a.file
Updated to revision 12.
Sending        b_one/first/a.file
Transmitting file data .done
Committing transaction...
Committed revision 13.
Committing transaction...
Committed revision 14.
Sending        b_one/second/a.file
Transmitting file data .done
Committing transaction...
Committed revision 15.
Committing transaction...
Committed revision 16.
Sending        b_two/1/a.file
Transmitting file data .done
Committing transaction...
Committed revision 17.
Committing transaction...
Committed revision 18.
Sending        b_two/2/a.file
Transmitting file data .done
Committing transaction...
Committed revision 19.
Committing transaction...
Committed revision 20.
ok 1 - setup svnrepo

expecting success of 9141.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/origin/first &&
		git rev-parse refs/remotes/origin/second &&
		git rev-parse refs/remotes/origin/1 &&
		git rev-parse refs/remotes/origin/2 &&
		git rev-parse refs/remotes/origin/tags/1.0 &&
		git rev-parse refs/remotes/origin/tags/2.0 &&
		git rev-parse refs/remotes/origin/tags/3.0 &&
		git rev-parse refs/remotes/origin/tags/4.0 &&
		git rev-parse refs/remotes/origin/tags/v5 &&
		git rev-parse refs/remotes/origin/tags/v6 &&
		git rev-parse refs/remotes/origin/tags/v7 &&
		git rev-parse refs/remotes/origin/tags/v8
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9141-git-svn-multiple-branches/git_project/.git/
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo
	A	a.file
r1 = 5530b98fe505abf407308d2298ee730303534e48 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/first, 1
Found branch parent: (refs/remotes/origin/first) 5530b98fe505abf407308d2298ee730303534e48
Following parent with do_switch
Successfully followed parent
r2 = 33bdc5adda6e8750eb3bf7b3ecca7f6e8df6d4ec (refs/remotes/origin/first)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/1.0, 2
Found branch parent: (refs/remotes/origin/tags/1.0) 5530b98fe505abf407308d2298ee730303534e48
Following parent with do_switch
Successfully followed parent
r3 = c6f2786005bf063079d86f4f3ba559fb13c73f2d (refs/remotes/origin/tags/1.0)
	M	a.file
r4 = 4849b530f3a1b30a7620f361c12944291a0b349a (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/second, 4
Found branch parent: (refs/remotes/origin/second) 4849b530f3a1b30a7620f361c12944291a0b349a
Following parent with do_switch
Successfully followed parent
r5 = e0d005df1db2ebf93a8bb9ad2cd34c4a8d19eff3 (refs/remotes/origin/second)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/2.0, 5
Found branch parent: (refs/remotes/origin/tags/2.0) 4849b530f3a1b30a7620f361c12944291a0b349a
Following parent with do_switch
Successfully followed parent
r6 = a24c3d6067c221a85859e6c3db58303d5b06dae1 (refs/remotes/origin/tags/2.0)
	M	a.file
r7 = 61112a35c2293141787dee6dad8ee895c832c7c1 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/1, 7
Found branch parent: (refs/remotes/origin/1) 61112a35c2293141787dee6dad8ee895c832c7c1
Following parent with do_switch
Successfully followed parent
r8 = cc7d73270320d4885a1dd8d787a2e699600ea0d0 (refs/remotes/origin/1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/3.0, 8
Found branch parent: (refs/remotes/origin/tags/3.0) 61112a35c2293141787dee6dad8ee895c832c7c1
Following parent with do_switch
Successfully followed parent
r9 = 21c8e2a53ed5c19d1cecb94cc5eebc8dffceff87 (refs/remotes/origin/tags/3.0)
	M	a.file
r10 = e8c813070c0958d980db2a00b143a918fd18269f (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/2, 10
Found branch parent: (refs/remotes/origin/2) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r11 = 893e96f5b7473b87c31b56c805af9b86898842d5 (refs/remotes/origin/2)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/4.0, 11
Found branch parent: (refs/remotes/origin/tags/4.0) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r12 = 79463c1e40f1afdd3e8fb9eada05e96c88e47991 (refs/remotes/origin/tags/4.0)
	M	a.file
r13 = b107860509225d80e6b3e4f80026e91b71e7ccfd (refs/remotes/origin/first)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/first => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/v5, 13
Found branch parent: (refs/remotes/origin/tags/v5) b107860509225d80e6b3e4f80026e91b71e7ccfd
Following parent with do_switch
Successfully followed parent
r14 = ad62c07c428a01bff67182fa887a997d5da45c43 (refs/remotes/origin/tags/v5)
	M	a.file
r15 = 9a76e82acfd545eff626dd613035d316c3523622 (refs/remotes/origin/second)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/second => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/v6, 15
Found branch parent: (refs/remotes/origin/tags/v6) 9a76e82acfd545eff626dd613035d316c3523622
Following parent with do_switch
Successfully followed parent
r16 = 6033aa5b3634f768cd77167d7bc9c85c4c9d6f5a (refs/remotes/origin/tags/v6)
	M	a.file
r17 = bfbe500e8e719d2282a4ca1d7f7578fb4bc8de7f (refs/remotes/origin/1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/v7, 17
Found branch parent: (refs/remotes/origin/tags/v7) bfbe500e8e719d2282a4ca1d7f7578fb4bc8de7f
Following parent with do_switch
Successfully followed parent
r18 = 56ebb7c68a52e116695bb17aca74476df700c51a (refs/remotes/origin/tags/v7)
	M	a.file
r19 = c2262b4fcded35678cbb359ce3dfddc36433a4ba (refs/remotes/origin/2)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/2 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/v8, 19
Found branch parent: (refs/remotes/origin/tags/v8) c2262b4fcded35678cbb359ce3dfddc36433a4ba
Following parent with do_switch
Successfully followed parent
r20 = 1c42a822c79b0b50116aeb7a875ab19484a39083 (refs/remotes/origin/tags/v8)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk r10
b107860509225d80e6b3e4f80026e91b71e7ccfd
9a76e82acfd545eff626dd613035d316c3523622
bfbe500e8e719d2282a4ca1d7f7578fb4bc8de7f
c2262b4fcded35678cbb359ce3dfddc36433a4ba
c6f2786005bf063079d86f4f3ba559fb13c73f2d
a24c3d6067c221a85859e6c3db58303d5b06dae1
21c8e2a53ed5c19d1cecb94cc5eebc8dffceff87
79463c1e40f1afdd3e8fb9eada05e96c88e47991
ad62c07c428a01bff67182fa887a997d5da45c43
6033aa5b3634f768cd77167d7bc9c85c4c9d6f5a
56ebb7c68a52e116695bb17aca74476df700c51a
1c42a822c79b0b50116aeb7a875ab19484a39083
ok 2 - clone multiple branch and tag paths

expecting success of 9141.3 'Multiple branch or tag paths require -d': 
	( cd git_project &&
		test_must_fail git svn branch -m "No new branch" Nope &&
		test_must_fail git svn tag -m "No new tag" Tagless &&
		test_must_fail git rev-parse refs/remotes/origin/Nope &&
		test_must_fail git rev-parse refs/remotes/origin/tags/Tagless
	) &&
	( cd svn_project &&
		svn_cmd up &&
		test_path_is_missing b_one/Nope &&
		test_path_is_missing b_two/Nope &&
		test_path_is_missing tags_A/Tagless &&
		test_path_is_missing tags_B/Tagless
	)

Multiple branch paths defined for Subversion repository.
You must specify where you want to create the branch with the --destination argument.

Multiple tag paths defined for Subversion repository.
You must specify where you want to create the tag with the --destination argument.

fatal: ambiguous argument 'refs/remotes/origin/Nope': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/Nope
fatal: ambiguous argument 'refs/remotes/origin/tags/Tagless': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/origin/tags/Tagless
Updating '.':
A    tags_B/v5
A    tags_B/v5/a.file
A    tags_B/v6
A    tags_B/v6/a.file
A    tags_B/v7
A    tags_B/v7/a.file
A    tags_B/v8
A    tags_B/v8/a.file
Updated to revision 20.
ok 3 - Multiple branch or tag paths require -d

expecting success of 9141.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 )

Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk at r10 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/New1...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_one/New1, 10
Found branch parent: (refs/remotes/origin/New1) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r21 = 86204f46fcd892ef7937fd2641fb48bc0f0c08f7 (refs/remotes/origin/New1)
Updating '.':
A    b_one/New1
A    b_one/New1/a.file
Updated to revision 21.
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk at r10 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/New2...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/b_two/New2, 10
Found branch parent: (refs/remotes/origin/New2) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r22 = 26049505b6bc67a86305e61e808b1ff9e847480f (refs/remotes/origin/New2)
Updating '.':
A    b_two/New2
A    b_two/New2/a.file
Updated to revision 22.
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk at r10 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/Tag1...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_A/Tag1, 10
Found branch parent: (refs/remotes/origin/tags/Tag1) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r23 = 911a3e152d405460d0313e606691293264c5c5b0 (refs/remotes/origin/tags/Tag1)
Updating '.':
A    tags_A/Tag1
A    tags_A/Tag1/a.file
Updated to revision 23.
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk at r10 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/Tag2...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9141-git-svn-multiple-branches/svnrepo/project/tags_B/Tag2, 10
Found branch parent: (refs/remotes/origin/tags/Tag2) e8c813070c0958d980db2a00b143a918fd18269f
Following parent with do_switch
Successfully followed parent
r24 = 661b131e63c54f299fe2ad46ea844f1f160f4ecb (refs/remotes/origin/tags/Tag2)
Updating '.':
A    tags_B/Tag2
A    tags_B/Tag2/a.file
Updated to revision 24.
ok 4 - create new branches and tags

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9148-git-svn-propset.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9148-git-svn-propset/.git/
expecting success of 9148.1 'setup propset via import': 
	test_when_finished "rm -rf import" &&

	foo_subdir2="subdir/subdir2/foo_subdir2" &&
	mkdir -p import/subdir/subdir2 &&
	(
		cd import &&
		# for "add props top level"
		>foo &&
		# for "add props relative"
		>subdir/foo_subdir &&
		# for "add props subdir"
		>"$foo_subdir2" &&
		svn_cmd import -m "import for git svn" . "$svnrepo"
	)

Adding         foo
Adding         subdir
Adding         subdir/foo_subdir
Adding         subdir/subdir2
Adding         subdir/subdir2/foo_subdir2
Committing transaction...
Committed revision 1.
ok 1 - setup propset via import

expecting success of 9148.2 'initialize git svn': 
	git svn init "$svnrepo"
	
ok 2 - initialize git svn

expecting success of 9148.3 'fetch revisions from svn': 
	git svn fetch
	
	A	foo
	A	subdir/foo_subdir
	A	subdir/subdir2/foo_subdir2
r1 = 4d0bfc4fd5371f1f3fe132bf236bd552ab460d06 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9148-git-svn-propset/svnrepo r1
ok 3 - fetch revisions from svn

expecting success of 9148.4 'add props top level': 
	set_props "." "foo" "svn:keywords" "FreeBSD=%H" &&
	git svn dcommit &&
	svn_cmd co "$svnrepo" svn_project &&
	confirm_props "." "foo" "svn:keywords" "FreeBSD=%H" &&
	rm -rf svn_project
	
[master e4c3c15] testing propset
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9148-git-svn-propset/svnrepo ...
	M	foo
Committed r2
	M	foo
r2 = 4a2027a5c48c6a471e4a44f9330492a85e0bf2d6 (refs/remotes/git-svn)
No changes between e4c3c1544ae574ad7eeb22789904419a725a3408 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
A    svn_project/foo
A    svn_project/subdir
A    svn_project/subdir/foo_subdir
A    svn_project/subdir/subdir2
A    svn_project/subdir/subdir2/foo_subdir2
Checked out revision 2.
ok 4 - add props top level

expecting success of 9148.5 'add multiple props': 
	set_props "." "foo" \
		"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&
	git svn dcommit &&
	svn_cmd co "$svnrepo" svn_project &&
	confirm_props "." "foo" \
		"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&
	rm -rf svn_project
	
[master 81d7791] testing propset
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9148-git-svn-propset/svnrepo ...
	M	foo
Committed r3
	M	foo
r3 = d99d30568f7b46e19c07f93f8404578cd6b9e642 (refs/remotes/git-svn)
No changes between 81d7791acbe086e2292def8867974fc6f3b0f822 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
A    svn_project/foo
A    svn_project/subdir
A    svn_project/subdir/foo_subdir
A    svn_project/subdir/subdir2
A    svn_project/subdir/subdir2/foo_subdir2
Checked out revision 3.
ok 5 - add multiple props

expecting success of 9148.6 'add props subdir': 
	set_props "." "$foo_subdir2" svn:keywords "FreeBSD=%H" &&
	git svn dcommit &&
	svn_cmd co "$svnrepo" svn_project &&
	confirm_props "." "$foo_subdir2" "svn:keywords" "FreeBSD=%H" &&
	rm -rf svn_project
	
[master f8d9602] testing propset
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9148-git-svn-propset/svnrepo ...
	M	subdir/subdir2/foo_subdir2
Committed r4
	M	subdir/subdir2/foo_subdir2
r4 = e6a2956f900ceb03217993db6e1e7bba5b9c1cfb (refs/remotes/git-svn)
No changes between f8d9602602b71bd509ff4359209e68552e44aa4e and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
A    svn_project/foo
A    svn_project/subdir
A    svn_project/subdir/foo_subdir
A    svn_project/subdir/subdir2
A    svn_project/subdir/subdir2/foo_subdir2
Checked out revision 4.
ok 6 - add props subdir

expecting success of 9148.7 'add props relative': 
	set_props "subdir/subdir2" "../foo_subdir" \
		svn:keywords "FreeBSD=%H" &&
	git svn dcommit &&
	svn_cmd co "$svnrepo" svn_project &&
	confirm_props "subdir/subdir2" "../foo_subdir" \
		svn:keywords "FreeBSD=%H" &&
	rm -rf svn_project
	
[master 29fdf3a] testing propset
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9148-git-svn-propset/svnrepo ...
	M	subdir/foo_subdir
Committed r5
	M	subdir/foo_subdir
r5 = e453db69c6c87e3f29324607ee9c851e6be31d3f (refs/remotes/git-svn)
No changes between 29fdf3ad92f5bc71e1797d37e02574b595ba40ec and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
A    svn_project/foo
A    svn_project/subdir
A    svn_project/subdir/foo_subdir
A    svn_project/subdir/subdir2
A    svn_project/subdir/subdir2/foo_subdir2
Checked out revision 5.
ok 7 - add props relative

# passed all 7 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9146-git-svn-empty-dirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9146-git-svn-empty-dirs/.git/
expecting success of 9146.1 'initialize repo': 
	for i in a b c d d/e d/e/f "weird file name"
	do
		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i" || return 1
	done

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
ok 1 - initialize repo

expecting success of 9146.2 'clone': git svn clone "$svnrepo" cloned
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9146-git-svn-empty-dirs/cloned/.git/
W: +empty_dir: a
r1 = 80c9b9894d92d3e4e5957aeaa10b3a758c0570d8 (refs/remotes/git-svn)
W: +empty_dir: b
r2 = 781d320fca362928deeccb7748701a9ae973b8f1 (refs/remotes/git-svn)
W: +empty_dir: c
r3 = 593f949530f4a66fb5b015696e3b05f2a8ea31e3 (refs/remotes/git-svn)
W: +empty_dir: d
r4 = 9b6f32e5181f47df4b6c3b020960613a12b4b1c0 (refs/remotes/git-svn)
W: +empty_dir: d/e
r5 = 5c3e5792b63e889212ff233f19c822613a4766bc (refs/remotes/git-svn)
W: +empty_dir: d/e/f
r6 = 75e46e6369e4280831f489b20a1d3ba4c1612fbc (refs/remotes/git-svn)
W: +empty_dir: weird file name
r7 = f7f399e5f2fe7868abfe2a8b60a25657ba320ee5 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9146-git-svn-empty-dirs/svnrepo r7
creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: d
creating empty directory: d/e
creating empty directory: d/e/f
creating empty directory: weird file name
ok 2 - clone

expecting success of 9146.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
	)

ok 3 - empty directories exist

expecting success of 9146.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
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9146-git-svn-empty-dirs/cloned-no-mkdirs/.git/
W: +empty_dir: a
r1 = 80c9b9894d92d3e4e5957aeaa10b3a758c0570d8 (refs/remotes/git-svn)
W: +empty_dir: b
r2 = 781d320fca362928deeccb7748701a9ae973b8f1 (refs/remotes/git-svn)
W: +empty_dir: c
r3 = 593f949530f4a66fb5b015696e3b05f2a8ea31e3 (refs/remotes/git-svn)
W: +empty_dir: d
r4 = 9b6f32e5181f47df4b6c3b020960613a12b4b1c0 (refs/remotes/git-svn)
W: +empty_dir: d/e
r5 = 5c3e5792b63e889212ff233f19c822613a4766bc (refs/remotes/git-svn)
W: +empty_dir: d/e/f
r6 = 75e46e6369e4280831f489b20a1d3ba4c1612fbc (refs/remotes/git-svn)
W: +empty_dir: weird file name
r7 = f7f399e5f2fe7868abfe2a8b60a25657ba320ee5 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9146-git-svn-empty-dirs/svnrepo r7
ok 4 - option automkdirs set to false

expecting success of 9146.5 'more emptiness': 
	svn_cmd mkdir -m "bang bang"  "$svnrepo"/"! !"

Committing transaction...
Committed revision 8.
ok 5 - more emptiness

expecting success of 9146.6 'git svn rebase creates empty directory': 
	( cd cloned && git svn rebase ) &&
	test -d cloned/"! !"

W: +empty_dir: ! !
r8 = d831ab1b191d97638a89735d63a10a98186a03dc (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
creating empty directory: ! !
ok 6 - git svn rebase creates empty directory

expecting success of 9146.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
	)

creating empty directory: ! !
creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: d
creating empty directory: d/e
creating empty directory: d/e/f
creating empty directory: weird file name
ok 7 - git svn mkdirs recreates empty directories

expecting success of 9146.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
	)

creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: d
creating empty directory: d/e
creating empty directory: d/e/f
creating empty directory: weird file name
creating empty directory: ! !
ok 8 - git svn mkdirs -r works

expecting success of 9146.9 'initialize trunk': 
	for i in trunk trunk/a trunk/"weird file name"
	do
		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i" || return 1
	done

Committing transaction...
Committed revision 9.
Committing transaction...
Committed revision 10.
Committing transaction...
Committed revision 11.
ok 9 - initialize trunk

expecting success of 9146.10 'clone trunk': git svn clone -s "$svnrepo" trunk
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9146-git-svn-empty-dirs/trunk/.git/
r9 = ee0b71542b21e2aa584ec166abc4c7f2eb35a6ec (refs/remotes/origin/trunk)
W: +empty_dir: trunk/a
r10 = 26a3995e45bb2e949cc7a9894ff168cc43b2cdca (refs/remotes/origin/trunk)
W: +empty_dir: trunk/weird file name
r11 = 7d4c60836e9e9c85bd9b0d7ccd65624e1f02e81e (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9146-git-svn-empty-dirs/svnrepo/trunk r11
creating empty directory: a
creating empty directory: weird file name
ok 10 - clone trunk

expecting success of 9146.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 11 - empty directories in trunk exist

expecting success of 9146.12 'remove a top-level directory from svn': 
	svn_cmd rm -m "remove d" "$svnrepo"/d

Committing transaction...
Committed revision 12.
ok 12 - remove a top-level directory from svn

expecting success of 9146.13 'removed top-level directory does not exist': 
	git svn clone "$svnrepo" removed &&
	test ! -e removed/d


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9146-git-svn-empty-dirs/removed/.git/
W: +empty_dir: a
r1 = 80c9b9894d92d3e4e5957aeaa10b3a758c0570d8 (refs/remotes/git-svn)
W: +empty_dir: b
r2 = 781d320fca362928deeccb7748701a9ae973b8f1 (refs/remotes/git-svn)
W: +empty_dir: c
r3 = 593f949530f4a66fb5b015696e3b05f2a8ea31e3 (refs/remotes/git-svn)
W: +empty_dir: d
r4 = 9b6f32e5181f47df4b6c3b020960613a12b4b1c0 (refs/remotes/git-svn)
W: +empty_dir: d/e
r5 = 5c3e5792b63e889212ff233f19c822613a4766bc (refs/remotes/git-svn)
W: +empty_dir: d/e/f
r6 = 75e46e6369e4280831f489b20a1d3ba4c1612fbc (refs/remotes/git-svn)
W: +empty_dir: weird file name
r7 = f7f399e5f2fe7868abfe2a8b60a25657ba320ee5 (refs/remotes/git-svn)
W: +empty_dir: ! !
r8 = d831ab1b191d97638a89735d63a10a98186a03dc (refs/remotes/git-svn)
W: +empty_dir: trunk
r9 = cff730e814b685133b15b067e29184ae33a7a4ee (refs/remotes/git-svn)
W: +empty_dir: trunk/a
r10 = 5c0fc54f5e587b63b14c8be0bafad85b4c14f138 (refs/remotes/git-svn)
W: +empty_dir: trunk/weird file name
r11 = 53890d3ec1e56863658860993f3005e973b161f1 (refs/remotes/git-svn)
	D	d
W: -empty_dir: d
r12 = 352c623cb6b1ab00320398aeb7ea0db9cc74b870 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9146-git-svn-empty-dirs/svnrepo r12
creating empty directory: ! !
creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: trunk
creating empty directory: trunk/a
creating empty directory: trunk/weird file name
creating empty directory: weird file name
ok 13 - removed top-level directory does not exist

expecting success of 9146.14 'git svn gc-ed files work': 
	(
		cd removed &&
		git svn gc &&
		: Compress::Zlib may not be available &&
		if test -f "$unhandled".gz
		then
			svn_cmd mkdir -m gz "$svnrepo"/gz &&
			git reset --hard $(git rev-list HEAD | tail -1) &&
			git svn rebase &&
			test -f "$unhandled".gz &&
			test -f "$unhandled" &&
			for i in a b c "weird file name" gz "! !"
			do
				if ! test -d "$i"
				then
					echo >&2 "$i does not exist" &&
					exit 1
				fi
			done
		fi
	)

Committing transaction...
Committed revision 13.
HEAD is now at 80c9b98 mkdir a
W: +empty_dir: gz
r13 = a811d682dbbafce269b24c01a024cd6477811393 (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
creating empty directory: gz
ok 14 - git svn gc-ed files work

# passed all 14 test(s)
1..14
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9150-svk-mergetickets.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9150-svk-mergetickets/.git/
expecting success of 9150.1 'load svk depot': 
	svnadmin load -q '/<<PKGBUILDDIR>>/t/trash directory.t9150-svk-mergetickets/svnrepo' 	  < '/<<PKGBUILDDIR>>/t/t9150/svk-merge.dump' &&
	git svn init --minimize-url -R svkmerge 	  --rewrite-root=http://svn.example.org 	  -T trunk -b branches 'file:///<<PKGBUILDDIR>>/t/trash directory.t9150-svk-mergetickets/svnrepo' &&
	git svn fetch --all
	
r1 = b53c4e1a175ef8929e6e4aab56280e58a0de64a8 (refs/remotes/origin/trunk)
	A	Makefile
r2 = 90f5e8071f5b77e35b17e90dec357e5c88edec7f (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9150-svk-mergetickets/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9150-svk-mergetickets/svnrepo/branches/left, 2
Found branch parent: (refs/remotes/origin/left) 90f5e8071f5b77e35b17e90dec357e5c88edec7f
Following parent with do_switch
Successfully followed parent
r3 = 79d9656e5bf2f11fc8ec4e9a20e1cea4615a760a (refs/remotes/origin/left)
	M	Makefile
r4 = 86c978a5a9e208309128c39af65ada54e20c81ab (refs/remotes/origin/left)
	M	Makefile
r5 = 242969651859ed31ccc35c99fab280c17353acd2 (refs/remotes/origin/trunk)
	M	Makefile
r6 = 9682859fd9aa34c6573af588d38b75aaaeaa1918 (refs/remotes/origin/left)
	M	Makefile
Found merge parent (svk:merge ticket): 9682859fd9aa34c6573af588d38b75aaaeaa1918
r7 = 8f305e8c49bb2f343a16bd4f0bd3386700698bf5 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9150-svk-mergetickets/svnrepo/trunk r7
ok 1 - load svk depot

expecting success of 9150.2 'svk merges were represented coming in': 
	[ 2 -eq 2 ]
	
ok 2 - svk merges were represented coming in

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9152-svn-empty-dirs-after-gc.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9152-svn-empty-dirs-after-gc/.git/
expecting success of 9152.1 'initialize repo': 
	for i in a b c d d/e d/e/f "weird file name"
	do
		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i" || return 1
	done

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
ok 1 - initialize repo

expecting success of 9152.2 'clone': git svn clone "$svnrepo" cloned
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9152-svn-empty-dirs-after-gc/cloned/.git/
W: +empty_dir: a
r1 = 3df3fbfd22c8b5b9897f9fd095ae3f19cacc35ef (refs/remotes/git-svn)
W: +empty_dir: b
r2 = 5d97cec8c8080668910e52b8af98ffcdd88740c5 (refs/remotes/git-svn)
W: +empty_dir: c
r3 = 78487680d46d3f81d2744d0757126ab4caa00cb3 (refs/remotes/git-svn)
W: +empty_dir: d
r4 = 3adb04b5db3cbeca832c9ee292b6e2ce023f7e8c (refs/remotes/git-svn)
W: +empty_dir: d/e
r5 = 67774a3d80c8d17c7abaa43e9efb9f7a2a43622c (refs/remotes/git-svn)
W: +empty_dir: d/e/f
r6 = b232279c725ed381ce5d2a47fe4da6d308b4fbb4 (refs/remotes/git-svn)
W: +empty_dir: weird file name
r7 = baa08cce4ac9b92b5ea7765a946dfc219d497c22 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9152-svn-empty-dirs-after-gc/svnrepo r7
creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: d
creating empty directory: d/e
creating empty directory: d/e/f
creating empty directory: weird file name
ok 2 - clone

expecting success of 9152.3 'git svn gc runs': 
	(
		cd cloned &&
		git svn gc
	)

ok 3 - git svn gc runs

expecting success of 9152.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
	)

creating empty directory: a
creating empty directory: b
creating empty directory: c
creating empty directory: d
creating empty directory: d/e
creating empty directory: d/e/f
creating empty directory: weird file name
ok 4 - git svn mkdirs recreates empty directories after git svn gc

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9153-git-svn-rewrite-uuid.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9153-git-svn-rewrite-uuid/.git/
expecting success of 9153.1 'load svn repo': 
	svnadmin load -q '/<<PKGBUILDDIR>>/t/trash directory.t9153-git-svn-rewrite-uuid/svnrepo' < '/<<PKGBUILDDIR>>/t/t9153/svn.dump' &&
	git svn init --minimize-url --rewrite-uuid='6cc8ada4-5932-4b4a-8242-3534ed8a3232' 'file:///<<PKGBUILDDIR>>/t/trash directory.t9153-git-svn-rewrite-uuid/svnrepo' &&
	git svn fetch
	
	A	foo
r1 = 74b248adf87984a46936aee7e5dfadb729671335 (refs/remotes/git-svn)
	M	foo
r2 = 3c4f8c224bd45f2aeb209fb3ca11dc4d5e7a714b (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9153-git-svn-rewrite-uuid/svnrepo r2
ok 1 - load svn repo

expecting success of 9153.2 'verify uuid': 
	git cat-file commit refs/remotes/git-svn~0 >actual &&
	grep '^git-svn-id: .*@2 6cc8ada4-5932-4b4a-8242-3534ed8a3232$' actual &&
	git cat-file commit refs/remotes/git-svn~1 >actual &&
	grep '^git-svn-id: .*@1 6cc8ada4-5932-4b4a-8242-3534ed8a3232$' actual
	
git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9153-git-svn-rewrite-uuid/svnrepo@2 6cc8ada4-5932-4b4a-8242-3534ed8a3232
git-svn-id: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9153-git-svn-rewrite-uuid/svnrepo@1 6cc8ada4-5932-4b4a-8242-3534ed8a3232
ok 2 - verify uuid

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9154-git-svn-fancy-glob.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9154-git-svn-fancy-glob/.git/
expecting success of 9154.1 'load svn repo': 
	svnadmin load -q '/<<PKGBUILDDIR>>/t/trash directory.t9154-git-svn-fancy-glob/svnrepo' < '/<<PKGBUILDDIR>>/t/t9154/svn.dump' &&
	git svn init --minimize-url -T trunk 'file:///<<PKGBUILDDIR>>/t/trash directory.t9154-git-svn-fancy-glob/svnrepo' &&
	git svn fetch
	
	A	foo
r1 = acfc40f82f9268a566fdac8d706daf19dcb2a71f (refs/remotes/origin/trunk)
	M	foo
r6 = 5fdac2832e6eb0e91459609334344bf8e15d6d08 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/trunk r6
ok 1 - load svn repo

expecting success of 9154.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
	
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/branches/red, 1
Found branch parent: (refs/remotes/red) acfc40f82f9268a566fdac8d706daf19dcb2a71f
Following parent with do_switch
Successfully followed parent
r2 = 03ff2b0f5324a5f680bd2e7a832267fd5d715e1e (refs/remotes/red)
	M	foo
r3 = b4ed043baf114437610ff1981f4e23fa589995f4 (refs/remotes/red)
b4ed043baf114437610ff1981f4e23fa589995f4
fatal: ambiguous argument 'refs/remotes/green': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/green
fatal: ambiguous argument 'refs/remotes/blue': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/blue
ok 2 - add red branch

expecting success of 9154.3 'add gre branch': 
	git config --file=.git/svn/.metadata --unset svn-remote.svn.branches-maxRev &&
	git config svn-remote.svn.branches 'branches/{red,gre}: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
	
b4ed043baf114437610ff1981f4e23fa589995f4
fatal: ambiguous argument 'refs/remotes/green': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/green
fatal: ambiguous argument 'refs/remotes/blue': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/blue
ok 3 - add gre branch

expecting success of 9154.4 'add green branch': 
	git config --file=.git/svn/.metadata --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
	
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/branches/green, 1
Found branch parent: (refs/remotes/green) acfc40f82f9268a566fdac8d706daf19dcb2a71f
Following parent with do_switch
Successfully followed parent
r2 = 24a86382a7e79ff48fb93fb5dd3660346151a990 (refs/remotes/green)
	M	foo
r4 = 2f4c1f5faa8a8f10fb5d0373990efccc2e3e3142 (refs/remotes/green)
b4ed043baf114437610ff1981f4e23fa589995f4
2f4c1f5faa8a8f10fb5d0373990efccc2e3e3142
fatal: ambiguous argument 'refs/remotes/blue': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/blue
ok 4 - add green branch

expecting success of 9154.5 'add all branches': 
	git config --file=.git/svn/.metadata --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
	
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9154-git-svn-fancy-glob/svnrepo/branches/blue, 1
Found branch parent: (refs/remotes/blue) acfc40f82f9268a566fdac8d706daf19dcb2a71f
Following parent with do_switch
Successfully followed parent
r2 = 3c07a03d96b54cd0548996f81fa1d3cf476d3070 (refs/remotes/blue)
	M	foo
r5 = 4a92516e92f8cb5efd8b0ab1d4b7915b9ab9576e (refs/remotes/blue)
b4ed043baf114437610ff1981f4e23fa589995f4
2f4c1f5faa8a8f10fb5d0373990efccc2e3e3142
4a92516e92f8cb5efd8b0ab1d4b7915b9ab9576e
ok 5 - add all branches

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9155-git-svn-fetch-deleted-tag.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9155-git-svn-fetch-deleted-tag/.git/
expecting success of 9155.1 'setup svn repo': 
	mkdir -p import/trunk/subdir &&
	mkdir -p import/branches &&
	mkdir -p import/tags &&
	echo "base" >import/trunk/subdir/file &&
	svn_cmd import -m "import for git svn" import "$svnrepo" &&
	rm -rf import &&

	svn_cmd mkdir -m "create mybranch directory" "$svnrepo/branches/mybranch" &&
	svn_cmd cp -m "create branch mybranch" "$svnrepo/trunk" "$svnrepo/branches/mybranch/trunk" &&

	svn_cmd co "$svnrepo/trunk" svn_project &&
	(cd svn_project &&
		echo "trunk change" >>subdir/file &&
		svn_cmd ci -m "trunk change" subdir/file &&

		svn_cmd switch "$svnrepo/branches/mybranch/trunk" &&
		echo "branch change" >>subdir/file &&
		svn_cmd ci -m "branch change" subdir/file
	) &&

	svn_cmd cp -m "create mytag attempt 1" -r5 "$svnrepo/trunk/subdir" "$svnrepo/tags/mytag" &&
	svn_cmd rm -m "delete mytag attempt 1" "$svnrepo/tags/mytag" &&
	svn_cmd cp -m "create mytag attempt 2" -r5 "$svnrepo/branches/mybranch/trunk/subdir" "$svnrepo/tags/mytag"

Adding         import/branches
Adding         import/tags
Adding         import/trunk
Adding         import/trunk/subdir
Adding         import/trunk/subdir/file
Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
A    svn_project/subdir
A    svn_project/subdir/file
Checked out revision 3.
Sending        subdir/file
Transmitting file data .done
Committing transaction...
Committed revision 4.
U    subdir/file
Updated to revision 4.
Sending        subdir/file
Transmitting file data .done
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
Committing transaction...
Committed revision 8.
ok 1 - setup svn repo

expecting success of 9155.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 origin/mybranch:trunk/subdir/file origin/tags/mytag:file &&
	git diff --exit-code main:subdir/file origin/tags/mytag^:file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9155-git-svn-fetch-deleted-tag/git_project/.git/
	A	subdir/file
r1 = 947639f5362a64567b73219a2ea16d53e808eac4 (refs/remotes/origin/trunk)
r2 = 3001bdde01e5fd314cf536feb7f6fe14c052a21b (refs/remotes/origin/mybranch)
	A	trunk/subdir/file
r3 = 3e14e78cb6c450fcc0e2eaa3ffd55fb343c48530 (refs/remotes/origin/mybranch)
	M	subdir/file
r4 = 001d8b172bf72bba9f66d8ed561957f85b8d0c8c (refs/remotes/origin/trunk)
	M	trunk/subdir/file
r5 = 98579b44bf06bda6b9bbc893a2b77358b8b22356 (refs/remotes/origin/mybranch)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/trunk/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/tags/mytag, 5
Initializing parent: refs/remotes/origin/tags/mytag@5
	A	file
r1 = 083288c8d22f7137139c12dbf84123ec767be791 (refs/remotes/origin/tags/mytag@5)
	M	file
r4 = 7610ab35f591033a49ac29fc83d172bc6d8818b2 (refs/remotes/origin/tags/mytag@5)
Found branch parent: (refs/remotes/origin/tags/mytag) 7610ab35f591033a49ac29fc83d172bc6d8818b2
Following parent with do_switch
Successfully followed parent
r6 = 48ed0149ddaa649efb7c5c1c0f05589d875f117a (refs/remotes/origin/tags/mytag)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/branches/mybranch/trunk/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/tags/mytag, 5
Initializing parent: refs/remotes/origin/tags/mytag@5-
branch_from: /trunk => /trunk/subdir
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/trunk/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/branches/mybranch/trunk/subdir, 2
Initializing parent: refs/remotes/origin/tags/mytag@2
	A	file
r1 = 083288c8d22f7137139c12dbf84123ec767be791 (refs/remotes/origin/tags/mytag@2)
Found branch parent: (refs/remotes/origin/tags/mytag@5-) 083288c8d22f7137139c12dbf84123ec767be791
Following parent with do_switch
Successfully followed parent
r3 = db606d7d0abb44986ab82dfb4dd369d1a20033a7 (refs/remotes/origin/tags/mytag@5-)
	M	file
r5 = fdf90ddd9de722753c18c1662b20e91272aca19a (refs/remotes/origin/tags/mytag@5-)
Found branch parent: (refs/remotes/origin/tags/mytag) fdf90ddd9de722753c18c1662b20e91272aca19a
Index mismatch: 13f9c6ca01f81b94d8eca8eba510eafa2445e890 != 343cf4718d6a013cf33cf3cea8e0dc0a8efa64dc
rereading fdf90ddd9de722753c18c1662b20e91272aca19a
Following parent with do_switch
Successfully followed parent
r8 = f971078282c40e37d2216c3132c0c77549ace503 (refs/remotes/origin/tags/mytag)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9155-git-svn-fetch-deleted-tag/svnrepo/trunk r4
ok 2 - fetch deleted tags from same revision with checksum error

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9156-git-svn-fetch-deleted-tag-2.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9156-git-svn-fetch-deleted-tag-2/.git/
expecting success of 9156.1 'setup svn repo': 
	mkdir -p import/branches &&
	mkdir -p import/tags &&
	mkdir -p import/trunk/subdir1 &&
	mkdir -p import/trunk/subdir2 &&
	mkdir -p import/trunk/subdir3 &&
	echo "file1" >import/trunk/subdir1/file &&
	echo "file2" >import/trunk/subdir2/file &&
	echo "file3" >import/trunk/subdir3/file &&
	svn_cmd import -m "import for git svn" import "$svnrepo" &&
	rm -rf import &&

	svn_cmd co "$svnrepo/trunk" svn_project &&
	(cd svn_project &&
		echo "change1" >>subdir1/file &&
		echo "change2" >>subdir2/file &&
		echo "change3" >>subdir3/file &&
		svn_cmd ci -m "change" .
	) &&

	svn_cmd cp -m "create mytag 1" -r2 "$svnrepo/trunk/subdir1" "$svnrepo/tags/mytag" &&
	svn_cmd rm -m "delete mytag 1" "$svnrepo/tags/mytag" &&
	svn_cmd cp -m "create mytag 2" -r2 "$svnrepo/trunk/subdir2" "$svnrepo/tags/mytag" &&
	svn_cmd rm -m "delete mytag 2" "$svnrepo/tags/mytag" &&
	svn_cmd cp -m "create mytag 3" -r2 "$svnrepo/trunk/subdir3" "$svnrepo/tags/mytag"

Adding         import/branches
Adding         import/tags
Adding         import/trunk
Adding         import/trunk/subdir1
Adding         import/trunk/subdir1/file
Adding         import/trunk/subdir2
Adding         import/trunk/subdir2/file
Adding         import/trunk/subdir3
Adding         import/trunk/subdir3/file
Committing transaction...
Committed revision 1.
A    svn_project/subdir1
A    svn_project/subdir1/file
A    svn_project/subdir2
A    svn_project/subdir2/file
A    svn_project/subdir3
A    svn_project/subdir3/file
Checked out revision 1.
Sending        subdir1/file
Sending        subdir2/file
Sending        subdir3/file
Transmitting file data ...done
Committing transaction...
Committed revision 2.
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
Committing transaction...
Committed revision 7.
ok 1 - setup svn repo

expecting success of 9156.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 main:subdir3/file origin/tags/mytag:file &&
	git diff --exit-code main:subdir2/file origin/tags/mytag^:file &&
	git diff --exit-code main:subdir1/file origin/tags/mytag^^:file

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9156-git-svn-fetch-deleted-tag-2/git_project/.git/
	A	subdir1/file
	A	subdir2/file
	A	subdir3/file
r1 = 3a0460fac458d5ea3f4193a5234b5f2801af0160 (refs/remotes/origin/trunk)
	M	subdir1/file
	M	subdir2/file
	M	subdir3/file
r2 = e102861a5563b9073cf5740de79eeeaa35366e50 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/trunk/subdir1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/tags/mytag, 2
Initializing parent: refs/remotes/origin/tags/mytag@2
	A	file
r1 = a8d6a94d50435a76ab8c0b299d13003a785a1b1a (refs/remotes/origin/tags/mytag@2)
	M	file
r2 = 8ec17b0890fa8ba4daede90030e89d6a8baf6045 (refs/remotes/origin/tags/mytag@2)
Found branch parent: (refs/remotes/origin/tags/mytag) 8ec17b0890fa8ba4daede90030e89d6a8baf6045
Following parent with do_switch
Successfully followed parent
r3 = ace4634b001b4f49b750071929fcfd58b549bd09 (refs/remotes/origin/tags/mytag)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/trunk/subdir2 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/tags/mytag, 2
Initializing parent: refs/remotes/origin/tags/mytag@2-
	A	file
r1 = 994b610f3d170e9636a842679d2a37830f1089a5 (refs/remotes/origin/tags/mytag@2-)
	M	file
r2 = 40e716f62eb513b1699127362c2591d1890d25e4 (refs/remotes/origin/tags/mytag@2-)
Found branch parent: (refs/remotes/origin/tags/mytag) 40e716f62eb513b1699127362c2591d1890d25e4
Index mismatch: 03a4eca29b077f8b0867e84854a2c6e71eeac380 != 7745dab6988f4d78b3241eec1b66b56c15e67e83
rereading 40e716f62eb513b1699127362c2591d1890d25e4
Following parent with do_switch
Successfully followed parent
r5 = c95a9b9aa4cf91eb8deb8c69f4dc1359bb38209a (refs/remotes/origin/tags/mytag)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/trunk/subdir3 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/tags/mytag, 2
Initializing parent: refs/remotes/origin/tags/mytag@2--
	A	file
r1 = 63a33c5638007e274c3230216af690d4377b66f5 (refs/remotes/origin/tags/mytag@2--)
	M	file
r2 = f1fbc532d08bbcfe4c007e4664f362f907367299 (refs/remotes/origin/tags/mytag@2--)
Found branch parent: (refs/remotes/origin/tags/mytag) f1fbc532d08bbcfe4c007e4664f362f907367299
Index mismatch: de577018db9919b0130637aa9ac28b5dabe70913 != 03a4eca29b077f8b0867e84854a2c6e71eeac380
rereading f1fbc532d08bbcfe4c007e4664f362f907367299
Following parent with do_switch
Successfully followed parent
r7 = 5bd1bdf58ec432954495e10bed5a866c136f658c (refs/remotes/origin/tags/mytag)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9156-git-svn-fetch-deleted-tag-2/svnrepo/trunk r2
ok 2 - fetch deleted tags from same revision with no checksum error

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9158-git-svn-mergeinfo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9158-git-svn-mergeinfo/.git/
expecting success of 9158.1 'initialize source svn repo': 
	svn_cmd mkdir -m x "$svnrepo"/trunk &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		touch foo &&
		svn_cmd add foo &&
		svn_cmd commit -m "initial commit"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Checked out revision 1.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 2.
ok 1 - initialize source svn repo

expecting success of 9158.2 'clone svn repo': 
	git svn init "$svnrepo"/trunk &&
	git svn fetch

r1 = b29c28e8a6304400a2fdd6744c311019d71dabbd (refs/remotes/git-svn)
	A	foo
r2 = eeec50e16f47df18173f76ca3142a91c0a82a485 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk r2
ok 2 - clone svn repo

expecting success of 9158.3 'change svn:mergeinfo': 
	touch bar &&
	git add bar &&
	git commit -m "bar" &&
	git svn dcommit --mergeinfo="/branches/foo:1-10"

[master b5c7554] bar
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk ...
	A	bar
Committed r3
	A	bar
Checking svn:mergeinfo changes since r2: 1 sources, 1 changed
Couldn't find revmap for file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk/branches/foo
r3 = fadca21236a7db43e2453a5d2290923a67f8d416 (refs/remotes/git-svn)
No changes between b5c75542804152f0e31f3e126ded026a7a088e50 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 3 - change svn:mergeinfo

expecting success of 9158.4 'verify svn:mergeinfo': 
	mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) &&
	test "$mergeinfo" = "/branches/foo:1-10"

ok 4 - verify svn:mergeinfo

expecting success of 9158.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"

[master 35abe2b] baz
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 baz
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk ...
	A	baz
Committed r4
	A	baz
Checking svn:mergeinfo changes since r3: 2 sources, 2 changed
Couldn't find revmap for file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk/branches/bar
Couldn't find revmap for file:///<<PKGBUILDDIR>>/t/trash%20directory.t9158-git-svn-mergeinfo/svnrepo/trunk/branches/other
r4 = 3eb37f32fedd5e530b19a5ca7de2ad56204315f9 (refs/remotes/git-svn)
No changes between 35abe2b26cf0e4c91e9e91f5c40a11bd21d36d63 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 5 - change svn:mergeinfo multiline

expecting success of 9158.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"

ok 6 - verify svn:mergeinfo multiline

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9159-git-svn-no-parent-mergeinfo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9159-git-svn-no-parent-mergeinfo/.git/
expecting success of 9159.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
	
Adding         init/branches
Adding         init/tags
Adding         init/trunk
Adding         init/trunk/file.txt
Committing transaction...
Committed revision 1.
A    tmp/branches
A    tmp/tags
A    tmp/trunk
A    tmp/trunk/file.txt
Checked out revision 1.
Sending        trunk/file.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.
A         branches/a
A         branches/a/file.txt
Adding         branches/a
Committing transaction...
Committed revision 3.
property 'svn:mergeinfo' set on 'branches/a'
Sending        branches/a
Committing transaction...
Committed revision 4.
A         branches/b
A         branches/b/file2.txt
Adding         branches/b
Adding         branches/b/file2.txt
Transmitting file data .done
Committing transaction...
Committed revision 5.
Sending        branches/b/file2.txt
Transmitting file data .done
Committing transaction...
Committed revision 6.
A         branches/c
A         branches/c/file2.txt
Adding         branches/c
Committing transaction...
Committed revision 7.
property 'svn:mergeinfo' set on 'branches/c'
Sending        branches/c
Committing transaction...
Committed revision 8.
	A	file.txt
r1 = da583f83a3ac7ce484e898e5e02156532041aa14 (refs/remotes/origin/trunk)
	M	file.txt
r2 = 6f404a7f14b3affa4cdfb4e3b94dc08cdbfff1c2 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9159-git-svn-no-parent-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9159-git-svn-no-parent-mergeinfo/svnrepo/branches/a, 1
Found branch parent: (refs/remotes/origin/a) da583f83a3ac7ce484e898e5e02156532041aa14
Following parent with do_switch
Successfully followed parent
r3 = 831ab6b3562b901ddf7a4bc55e13a5c503393c0d (refs/remotes/origin/a)
Checking svn:mergeinfo changes since r3: 1 sources, 1 changed
Found merge parent (/trunk:1-2): 6f404a7f14b3affa4cdfb4e3b94dc08cdbfff1c2
r4 = 335a83ead81a3503ee1db8a77bedee7faa1edb89 (refs/remotes/origin/a)
	A	file2.txt
r5 = de78216be63f3b602805c1f233c69944e0199956 (refs/remotes/origin/b)
	M	file2.txt
r6 = 573bff56f87b4859744260d6f019e8e0e74b6c94 (refs/remotes/origin/b)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9159-git-svn-no-parent-mergeinfo/svnrepo/branches/b => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9159-git-svn-no-parent-mergeinfo/svnrepo/branches/c, 5
Found branch parent: (refs/remotes/origin/c) de78216be63f3b602805c1f233c69944e0199956
Following parent with do_switch
Successfully followed parent
r7 = 30f165b704a934d041ca043d6451155bb82cc040 (refs/remotes/origin/c)
Checking svn:mergeinfo changes since r7: 1 sources, 1 changed
Found merge parent (/branches/b:5-6): 573bff56f87b4859744260d6f019e8e0e74b6c94
r8 = b3f2a10113eb8973cb4e28b52df898d0f61b321c (refs/remotes/origin/c)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9159-git-svn-no-parent-mergeinfo/svnrepo/trunk r2
ok 1 - test handling of root commits in merge ranges

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9157-git-svn-fetch-merge.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9157-git-svn-fetch-merge/.git/
expecting success of 9157.1 'initialize source svn repo': 
	svn_cmd mkdir -m x "$svnrepo"/trunk &&
	svn_cmd mkdir -m x "$svnrepo"/branches &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		touch foo &&
		svn add foo &&
		svn commit -m "initial commit" &&
		svn cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
		touch bar &&
		svn add bar &&
		svn commit -m x &&
		svn cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch2 &&
		svn switch "$svnrepo"/branches/branch1 &&
		touch baz &&
		svn add baz &&
		svn commit -m x &&
		svn switch "$svnrepo"/trunk &&
		svn merge "$svnrepo"/branches/branch1 &&
		svn commit -m "merge" &&
		svn switch "$svnrepo"/branches/branch1 &&
		svn commit -m x &&
		svn switch "$svnrepo"/branches/branch2 &&
		svn merge "$svnrepo"/branches/branch1 &&
		svn commit -m "merge branch1" &&
		svn switch "$svnrepo"/trunk &&
		svn merge "$svnrepo"/branches/branch2 &&
		svn resolved baz &&
		svn commit -m "merge branch2"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Checked out revision 2.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
A         bar
Adding         bar
Transmitting file data .done
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
D    bar
Updated to revision 6.
A         baz
Adding         baz
Transmitting file data .done
Committing transaction...
Committed revision 7.
D    baz
A    bar
Updated to revision 7.
--- Merging r4 through r7 into '.':
A    baz
--- Recording mergeinfo for merge of r4 through r7 into '.':
 U   .
Sending        .
Adding         baz
Committing transaction...
Committed revision 8.
D    bar
 U   .
Updated to revision 8.
D    baz
A    bar
Updated to revision 8.
--- Merging r4 through r8 into '.':
A    baz
--- Recording mergeinfo for merge of r4 through r8 into '.':
 U   .
Sending        .
Adding         baz
Committing transaction...
Committed revision 9.
 U   .
Updated to revision 9.
--- Merging r6 through r9 into '.':
   C baz
 G   .
--- Recording mergeinfo for merge of r6 through r9 into '.':
 G   .
Searching tree conflict details for 'baz' in repository:
 done
Summary of conflicts:
  Tree conflicts: 1
Resolved conflicted state of 'baz'
Sending        .
Committing transaction...
Committed revision 10.
ok 1 - initialize source svn repo

expecting success of 9157.2 'clone svn repo': 
	git svn init -s "$svnrepo" &&
	git svn fetch

r1 = d080e65f3193343ad52768a8612a80b7455708eb (refs/remotes/origin/trunk)
	A	foo
r3 = f30d19db83ef6e95a4b95a0b9c1ece9de07b3cfb (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9157-git-svn-fetch-merge/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9157-git-svn-fetch-merge/svnrepo/branches/branch1, 3
Found branch parent: (refs/remotes/origin/branch1) f30d19db83ef6e95a4b95a0b9c1ece9de07b3cfb
Following parent with do_switch
Successfully followed parent
r4 = 408ba4dbe912234cc578cd94df0757de78ee997a (refs/remotes/origin/branch1)
	A	bar
r5 = 7864138bdbfd9691576316e7323ffcee2181780d (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9157-git-svn-fetch-merge/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9157-git-svn-fetch-merge/svnrepo/branches/branch2, 5
Found branch parent: (refs/remotes/origin/branch2) 7864138bdbfd9691576316e7323ffcee2181780d
Following parent with do_switch
Successfully followed parent
r6 = 545072312e28cce1eb0038e77eace816f04bf04e (refs/remotes/origin/branch2)
	A	baz
r7 = d9084c1c541d622bc810fd779d8128e69a0bd9d1 (refs/remotes/origin/branch1)
	A	baz
Checking svn:mergeinfo changes since r5: 1 sources, 1 changed
Found merge parent (/branches/branch1:4-7): d9084c1c541d622bc810fd779d8128e69a0bd9d1
r8 = 5cc19656279e4d4b0f087f2582b22a1de8e45af7 (refs/remotes/origin/trunk)
	A	baz
Checking svn:mergeinfo changes since r6: 1 sources, 1 changed
Found merge parent (/branches/branch1:4-8): d9084c1c541d622bc810fd779d8128e69a0bd9d1
r9 = b81d0d839b9160722fa3f03be00b955697c88156 (refs/remotes/origin/branch2)
Checking svn:mergeinfo changes since r8: 2 sources, 2 changed
Found merge parent (/branches/branch2:6-9): b81d0d839b9160722fa3f03be00b955697c88156
r10 = fe5843f0e7f5b727baf1945e4c6c0c8d19a893a6 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9157-git-svn-fetch-merge/svnrepo/trunk r10
ok 2 - clone svn repo

expecting success of 9157.3 'verify merge commit': git rev-parse HEAD^2
b81d0d839b9160722fa3f03be00b955697c88156
ok 3 - verify merge commit

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9151-svn-mergeinfo.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9151-svn-mergeinfo/.git/
expecting success of 9151.1 'load svn dump': 
	svnadmin load -q '/<<PKGBUILDDIR>>/t/trash directory.t9151-svn-mergeinfo/svnrepo' 	  <'/<<PKGBUILDDIR>>/t/t9151/svn-mergeinfo.dump' &&
	git svn init --minimize-url -R svnmerge 	  --rewrite-root=http://svn.example.org 	  -T trunk -b branches 'file:///<<PKGBUILDDIR>>/t/trash directory.t9151-svn-mergeinfo/svnrepo' &&
	git svn fetch --all

r1 = 7ed7a8721885457b4b334110ca70ed04c4f8166a (refs/remotes/origin/trunk)
	A	Makefile
r2 = 2d5fcce57cec73616f628fbaed5a49ef3d0e42de (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/left, 1
Found branch parent: (refs/remotes/origin/left) 7ed7a8721885457b4b334110ca70ed04c4f8166a
Following parent with do_switch
	A	Makefile
Successfully followed parent
r3 = f9ab6c8a604f40729e9b681bb3a1e867f9fa3ae8 (refs/remotes/origin/left)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/right, 1
Found branch parent: (refs/remotes/origin/right) 7ed7a8721885457b4b334110ca70ed04c4f8166a
Following parent with do_switch
	A	Makefile
Successfully followed parent
r4 = ddaeba46f3443446ad10c8e9f9708015508a3b28 (refs/remotes/origin/right)
	M	Makefile
r5 = aec3f7b969e8f39a07d95041e1a0fa1084a62636 (refs/remotes/origin/left)
	M	Makefile
r6 = 4e8f83f1ab23aef5373017e90af34f1819af8cab (refs/remotes/origin/right)
	M	Makefile
r7 = 6bc3353f7fcec0c37010a59b688fa9d2584a744d (refs/remotes/origin/left)
	M	Makefile
r8 = 3126dfd1119e03e412157f726d08c90a3fd4d7d4 (refs/remotes/origin/left)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/left => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/left-sub, 3
Found branch parent: (refs/remotes/origin/left-sub) f9ab6c8a604f40729e9b681bb3a1e867f9fa3ae8
Following parent with do_switch
	M	Makefile
Successfully followed parent
r9 = 577c6d95762177126ca3068518ff8b75fcf0c25e (refs/remotes/origin/left-sub)
	A	README
r10 = 0f51792c59119f80d15583143eecc11a609f7f4b (refs/remotes/origin/left-sub)
	M	Makefile
Checking svn:mergeinfo changes since r2: 1 sources, 1 changed
Found merge parent (/branches/left:2-10): 3126dfd1119e03e412157f726d08c90a3fd4d7d4
r11 = 684711c1a28ba8ad47b8dbcc1fae523e6d7513a6 (refs/remotes/origin/trunk)
	A	zlonk
r12 = 48e21141201f46c911875b76b5656d8baac09a66 (refs/remotes/origin/left)
	A	bang
r13 = 2d65500a924079bcf2a63be861289fc72bc3e87f (refs/remotes/origin/right)
	M	Makefile
	A	bang
Checking svn:mergeinfo changes since r11: 2 sources, 1 changed
W: svn cherry-pick ignored (/branches/right:6-13) - missing 1 commit(s) (eg ddaeba46f3443446ad10c8e9f9708015508a3b28)
r14 = 963722fb11bb2d08a6acd03123060441585c7d97 (refs/remotes/origin/trunk)
Checking svn:mergeinfo changes since r14: 2 sources, 1 changed
Found merge parent (/branches/right:2-14): 2d65500a924079bcf2a63be861289fc72bc3e87f
r15 = 7a0288891e49f8f764fafb9c51e0da446284f6e3 (refs/remotes/origin/trunk)
	A	urkkk
r16 = acd76c6201c8a7f1ba7539daebe82128902deb28 (refs/remotes/origin/right)
	A	vronk
r17 = 3d987e350cb0b84c1a962f28322075148a4769f9 (refs/remotes/origin/trunk)
	M	Makefile
	A	bang
	A	urkkk
Checking svn:mergeinfo changes since r10: 1 sources, 1 changed
Found merge parent (/branches/right:2-17): acd76c6201c8a7f1ba7539daebe82128902deb28
r18 = 33a71c4853e3bc75096416afb6b6a3f84317e11f (refs/remotes/origin/left-sub)
	A	wham_eth
r19 = c18b93e7676efb39156e30479f389f162e075937 (refs/remotes/origin/left-sub)
	A	glurpp
r20 = d3a5e11772cce14223736862eaae254c6361de52 (refs/remotes/origin/left)
	A	wham_eth
Checking svn:mergeinfo changes since r20: 1 sources, 1 changed
W: svn cherry-pick ignored (/branches/left-sub:19) - missing 6 commit(s) (eg 0f51792c59119f80d15583143eecc11a609f7f4b)
r21 = 26f066648b9fbb8d41953f51720855ea7b504643 (refs/remotes/origin/left)
	M	Makefile
	A	README
	A	bang
	A	urkkk
Checking svn:mergeinfo changes since r21: 2 sources, 2 changed
Found merge parent (/branches/left-sub:4-19): c18b93e7676efb39156e30479f389f162e075937
Found merge parent (/branches/right:2-17): acd76c6201c8a7f1ba7539daebe82128902deb28
r22 = 873f392f3b5b995738db38ddb497e4133a1eabd6 (refs/remotes/origin/left)
	A	README
	A	glurpp
	A	urkkk
	A	wham_eth
	A	zlonk
Checking svn:mergeinfo changes since r17: 3 sources, 3 changed
Found merge parent (/branches/left:2-22): 873f392f3b5b995738db38ddb497e4133a1eabd6
Found merge parent (/branches/left-sub:4-19): c18b93e7676efb39156e30479f389f162e075937
Found merge parent (/branches/right:2-17): acd76c6201c8a7f1ba7539daebe82128902deb28
r23 = 10f41d438deef69896cd202a8dba696fccb1fc16 (refs/remotes/origin/trunk)
Checking svn:mergeinfo changes since r23: 3 sources, 1 changed
r24 = 8d72d496d3fd4fe5f56c4a458bb6b6bce8074ac3 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/b1, 24
Found branch parent: (refs/remotes/origin/b1) 8d72d496d3fd4fe5f56c4a458bb6b6bce8074ac3
Following parent with do_switch
Successfully followed parent
r25 = 9583bc1ca96e396c2e8a6afbe0d7677c952e76f9 (refs/remotes/origin/b1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/b2, 25
Found branch parent: (refs/remotes/origin/b2) 8d72d496d3fd4fe5f56c4a458bb6b6bce8074ac3
Following parent with do_switch
Successfully followed parent
r26 = b956cd3ea8808cb0732e51412dec60ce5d4c66de (refs/remotes/origin/b2)
	A	b2file
r27 = 689fa6c27d1d57acd4f5e2ed3b78bfd3818cfa48 (refs/remotes/origin/b2)
	A	b1file
r28 = c65e9d2dd0f29cc8756c66041aafca5ae7b40c87 (refs/remotes/origin/b1)
	A	b1file
Checking svn:mergeinfo changes since r24: 4 sources, 1 changed
Found merge parent (/branches/b1:25-28): c65e9d2dd0f29cc8756c66041aafca5ae7b40c87
r29 = 8a70eced3c8b9eb56742bb2b8182d3363ef65c9c (refs/remotes/origin/trunk)
	A	trunkfile
r30 = 94dd10334175598f49a097035fcfba8563928048 (refs/remotes/origin/trunk)
	A	b1file
	A	trunkfile
Checking svn:mergeinfo changes since r27: 5 sources, 2 changed
Found merge parent (/branches/b1:25-28): c65e9d2dd0f29cc8756c66041aafca5ae7b40c87
Found merge parent (/trunk:26-30): 94dd10334175598f49a097035fcfba8563928048
r31 = a38a7b8623e016fc7fa3d8e86138d2ac45bf8a24 (refs/remotes/origin/b2)
	A	b2file
Checking svn:mergeinfo changes since r30: 5 sources, 1 changed
Found merge parent (/branches/b2:26-31): a38a7b8623e016fc7fa3d8e86138d2ac45bf8a24
r32 = 8357602aacc215884be1cae384e21f61dbe8a70f (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/f1, 32
Found branch parent: (refs/remotes/origin/f1) 8357602aacc215884be1cae384e21f61dbe8a70f
Following parent with do_switch
	A	f1file
Successfully followed parent
r33 = f78f3a5d1e3b322462cb535cfa72092188e5b55f (refs/remotes/origin/f1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/f2, 33
Found branch parent: (refs/remotes/origin/f2) 8357602aacc215884be1cae384e21f61dbe8a70f
Following parent with do_switch
	A	f2file
Successfully followed parent
r34 = 1f35cafcf36f5273f266e0fdf53b2b0e5cae9932 (refs/remotes/origin/f2)
	A	f1file
	A	f2file
Checking svn:mergeinfo changes since r32: 7 sources, 2 changed
Found merge parent (/branches/f1:33-34): f78f3a5d1e3b322462cb535cfa72092188e5b55f
Found merge parent (/branches/f2:34): 1f35cafcf36f5273f266e0fdf53b2b0e5cae9932
r35 = 93881fcc99fb98b085dde9da85df5f471242a3d8 (refs/remotes/origin/trunk)
	A	subdir/cowboy
r36 = 71b29806ce50e7abcebc021bddd47ea9925b62d1 (refs/remotes/origin/left)
	A	subdir/cowboy
Checking svn:mergeinfo changes since r35: 7 sources, 1 changed
Found merge parent (/branches/left:2-36): 71b29806ce50e7abcebc021bddd47ea9925b62d1
r37 = a7818cc97d8d22845c6c4b16c4029f0a19580e17 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/partial, 37
Initializing parent: refs/remotes/origin/partial@37
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/left/subdir => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk/subdir, 36
Initializing parent: refs/remotes/origin/partial@36
	A	cowboy
r36 = 36ab2d3b9d077028fa3d659325ac8ca081e348bc (refs/remotes/origin/partial@36)
Found branch parent: (refs/remotes/origin/partial@37) 36ab2d3b9d077028fa3d659325ac8ca081e348bc
Following parent with do_switch
Successfully followed parent
r37 = 94ef88aa1ebfb64b5525f3aed8dd36d7ec63cecc (refs/remotes/origin/partial@37)
Found branch parent: (refs/remotes/origin/partial) 94ef88aa1ebfb64b5525f3aed8dd36d7ec63cecc
Following parent with do_switch
Successfully followed parent
r38 = 910f886650e45984540884fbce419222d5dbe772 (refs/remotes/origin/partial)
	A	palindromes
r39 = fdb537791ee8ba532e49c3d5a34a30feeb87bd59 (refs/remotes/origin/partial)
	A	subdir/palindromes
r40 = 90411e1b2118e11664e368a24a1eaa5e8749d150 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/tags/v1.0 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/branches/bugfix, 41
Initializing parent: refs/remotes/origin/bugfix@41
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/tags/v1.0, 40
Found branch parent: (refs/remotes/origin/bugfix@41) 90411e1b2118e11664e368a24a1eaa5e8749d150
Following parent with do_switch
Successfully followed parent
r41 = f4522c2fc7b8b6ab30592330d961ed5321c3ddc7 (refs/remotes/origin/bugfix@41)
Found branch parent: (refs/remotes/origin/bugfix) f4522c2fc7b8b6ab30592330d961ed5321c3ddc7
Following parent with do_switch
Successfully followed parent
r42 = 21d184ac3dd2fcbc5f88a25abde26db37e05d6db (refs/remotes/origin/bugfix)
	M	subdir/palindromes
r43 = a671eec900764a4ab85a6166def3e0d30f1a2664 (refs/remotes/origin/bugfix)
	M	subdir/palindromes
Checking svn:mergeinfo changes since r40: 9 sources, 2 changed
Couldn't find revmap for file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/tags/v1.0
Found merge parent (/branches/bugfix:42-43): a671eec900764a4ab85a6166def3e0d30f1a2664
r44 = a110dec28a4b152b394906b1303fbf19174f7d26 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9151-svn-mergeinfo/svnrepo/trunk r44
ok 1 - load svn dump

expecting success of 9151.2 'all svn merges became git merge commits': 
	git rev-list --all --no-merges --grep=Merge >unmarked &&
	test_must_be_empty unmarked

ok 2 - all svn merges became git merge commits

expecting success of 9151.3 'cherry picks did not become git merge commits': 
	git rev-list --all --merges --grep=Cherry >bad-cherries &&
	test_must_be_empty bad-cherries

ok 3 - cherry picks did not become git merge commits

expecting success of 9151.4 'svn non-merge merge commits did not become git merge commits': 
	git rev-list --all --merges --grep=non-merge >bad-non-merges &&
	test_must_be_empty bad-non-merges

ok 4 - svn non-merge merge commits did not become git merge commits

expecting success of 9151.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") &&
	git rev-list -1 $before_commit --not $merge_commit >not-reachable &&
	test_must_be_empty not-reachable

ok 5 - commit made to merged branch is reachable from the merge

expecting success of 9151.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") &&
	git rev-list -1 $f1_commit $f2_commit --not $merge_commit >not-reachable &&
	test_must_be_empty not-reachable

ok 6 - merging two branches in one commit is detected correctly

checking known breakage of 9151.7 'everything got merged in the end': 
	git rev-list --all --not main >unmerged &&
	test_must_be_empty unmerged

fatal: ambiguous argument 'main': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
not ok 7 - everything got merged in the end # TODO known breakage

# still have 1 known breakage(s)
# passed all remaining 6 test(s)
1..7
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9160-git-svn-preserve-empty-dirs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9160-git-svn-preserve-empty-dirs/.git/
expecting success of 9160.1 'initialize source svn repo containing empty dirs': 
	svn_cmd mkdir -m x "$svnrepo"/trunk &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		mkdir -p 1 2 3/a 3/b 4 5 6 &&
		echo "First non-empty file"  > 2/file1.txt &&
		echo "Second non-empty file" > 2/file2.txt &&
		echo "Third non-empty file"  > 3/a/file1.txt &&
		echo "Fourth non-empty file" > 3/b/file1.txt &&
		svn_cmd add 1 2 3 4 5 6 &&
		svn_cmd commit -m "initial commit" &&

		mkdir 4/a &&
		svn_cmd add 4/a &&
		svn_cmd commit -m "nested empty directory" &&
		mkdir 4/a/b &&
		svn_cmd add 4/a/b &&
		svn_cmd commit -m "deeply nested empty directory" &&
		mkdir 4/a/b/c &&
		svn_cmd add 4/a/b/c &&
		svn_cmd commit -m "really deeply nested empty directory" &&
		echo "Kill the placeholder file" > 4/a/b/c/foo &&
		svn_cmd add 4/a/b/c/foo &&
		svn_cmd commit -m "Regular file to remove placeholder" &&

		svn_cmd del 2/file2.txt &&
		svn_cmd del 3/b &&
		svn_cmd commit -m "delete non-last entry in directory" &&

		svn_cmd del 2/file1.txt &&
		svn_cmd del 3/a &&
		svn_cmd commit -m "delete last entry in directory" &&

		echo "Conflict file" > 5/.placeholder &&
		mkdir 6/.placeholder &&
		svn_cmd add 5/.placeholder 6/.placeholder &&
		svn_cmd commit -m "Placeholder Namespace conflict"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Checked out revision 1.
A         1
A         2
A         2/file1.txt
A         2/file2.txt
A         3
A         3/a
A         3/a/file1.txt
A         3/b
A         3/b/file1.txt
A         4
A         5
A         6
Adding         1
Adding         2
Adding         2/file1.txt
Adding         2/file2.txt
Adding         3
Adding         3/a
Adding         3/a/file1.txt
Adding         3/b
Adding         3/b/file1.txt
Adding         4
Adding         5
Adding         6
Transmitting file data ....done
Committing transaction...
Committed revision 2.
A         4/a
Adding         4/a
Committing transaction...
Committed revision 3.
A         4/a/b
Adding         4/a/b
Committing transaction...
Committed revision 4.
A         4/a/b/c
Adding         4/a/b/c
Committing transaction...
Committed revision 5.
A         4/a/b/c/foo
Adding         4/a/b/c/foo
Transmitting file data .done
Committing transaction...
Committed revision 6.
D         2/file2.txt
D         3/b
D         3/b/file1.txt
Deleting       2/file2.txt
Deleting       3/b
Committing transaction...
Committed revision 7.
D         2/file1.txt
D         3/a
D         3/a/file1.txt
Deleting       2/file1.txt
Deleting       3/a
Committing transaction...
Committed revision 8.
A         5/.placeholder
A         6/.placeholder
Adding         5/.placeholder
Adding         6/.placeholder
Transmitting file data .done
Committing transaction...
Committed revision 9.
ok 1 - initialize source svn repo containing empty dirs

expecting success of 9160.2 'clone svn repo with --preserve-empty-dirs': 
	git svn clone "$svnrepo"/trunk --preserve-empty-dirs "$GIT_REPO"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9160-git-svn-preserve-empty-dirs/git-svn-repo/.git/
r1 = ded1aaabe413dda96b984cfa5ca297a629a4a061 (refs/remotes/git-svn)
	A	2/file1.txt
	A	2/file2.txt
	A	3/a/file1.txt
	A	3/b/file1.txt
r2 = c5a75d15e4339dccd8f629b36d0e8452cadcf2cd (refs/remotes/git-svn)
	D	4/.gitignore
W: -empty_dir: 4/.gitignore
r3 = 83dd02d8fe180b2bd52d9a0551c801b1c64b08d5 (refs/remotes/git-svn)
	D	4/a/.gitignore
W: -empty_dir: 4/a/.gitignore
r4 = e340c8f31bf7e090bc67b4d17736183df17f0fda (refs/remotes/git-svn)
	D	4/a/b/.gitignore
W: -empty_dir: 4/a/b/.gitignore
r5 = 0bce2ac22b4fe0c769e58fd0cd31db21425121f3 (refs/remotes/git-svn)
	D	4/a/b/c/.gitignore
	A	4/a/b/c/foo
W: -empty_dir: 4/a/b/c/.gitignore
r6 = e6ad5b387f09d47f94e3e39c500ec7fabe9933a0 (refs/remotes/git-svn)
	D	2/file2.txt
	D	3/b/file1.txt
	D	3/b/
W: -empty_dir: 2/file2.txt
W: -empty_dir: 3/b
r7 = 5ea80ed32c1875696cb0406a9b8b33b2dfb5a45f (refs/remotes/git-svn)
	D	2/file1.txt
	D	3/a/file1.txt
	D	3/a/
W: -empty_dir: 2/file1.txt
W: -empty_dir: 3/a
r8 = b6941cceae8c3d6c799e8e622a7da3164b72be36 (refs/remotes/git-svn)
	D	5/.gitignore
	A	5/.placeholder
	D	6/.gitignore
W: -empty_dir: 5/.gitignore
W: -empty_dir: 6/.gitignore
r9 = 8b977cc2b10c53862a69038436c1c3e5926f39fb (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9160-git-svn-preserve-empty-dirs/svnrepo/trunk r9
ok 2 - clone svn repo with --preserve-empty-dirs

expecting success of 9160.3 'directory empty from inception': 
	test -f "$GIT_REPO"/1/.gitignore &&
	test $(find "$GIT_REPO"/1 -type f | wc -l) = "1"

ok 3 - directory empty from inception

expecting success of 9160.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"

ok 4 - directory empty from subsequent svn commit

expecting success of 9160.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

ok 5 - add entry to previously empty directory

expecting success of 9160.6 'remove non-last entry from directory': 
	(
		cd "$GIT_REPO" &&
		git checkout HEAD~2
	) &&
	test_path_is_missing "$GIT_REPO"/2/.gitignore &&
	test_path_is_missing "$GIT_REPO"/3/.gitignore

Note: switching to 'HEAD~2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5ea80ed delete non-last entry in directory
ok 6 - remove non-last entry from directory

expecting success of 9160.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"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9160-git-svn-preserve-empty-dirs/git-svn-repo/.git/
r1 = ded1aaabe413dda96b984cfa5ca297a629a4a061 (refs/remotes/git-svn)
	A	2/file1.txt
	A	2/file2.txt
	A	3/a/file1.txt
	A	3/b/file1.txt
r2 = 8557199722a325d79741eb99c3f0d8761c30e458 (refs/remotes/git-svn)
	D	4/.placeholder
W: -empty_dir: 4/.placeholder
r3 = 207203266b2fadd728a29c498a43e7c40f0656e6 (refs/remotes/git-svn)
	D	4/a/.placeholder
W: -empty_dir: 4/a/.placeholder
r4 = 8a68ed296827ec19ed776ebc2c626207446abaed (refs/remotes/git-svn)
	D	4/a/b/.placeholder
W: -empty_dir: 4/a/b/.placeholder
r5 = e3c2ce8ca9f23ca5938b208a5e88aefb4a361c0f (refs/remotes/git-svn)
	D	4/a/b/c/.placeholder
	A	4/a/b/c/foo
W: -empty_dir: 4/a/b/c/.placeholder
r6 = afd0654572dcaf18cf0dbe7b17afa088c45c521c (refs/remotes/git-svn)
	D	2/file2.txt
	D	3/b/file1.txt
	D	3/b/
W: -empty_dir: 2/file2.txt
W: -empty_dir: 3/b
r7 = f745739c6d956fdf9e755a9eba771ac8cd18c71f (refs/remotes/git-svn)
	D	2/file1.txt
	D	3/a/file1.txt
	D	3/a/
W: -empty_dir: 2/file1.txt
W: -empty_dir: 3/a
r8 = 67fa0d430fb252e0330521e8516ef2430990d22e (refs/remotes/git-svn)
	A	5/.placeholder
	D	6/.placeholder
r9 = cd2f6156152ee34427bd55fb13ba9dff7db0053f (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9160-git-svn-preserve-empty-dirs/svnrepo/trunk r9
git-svn-repo/1/.placeholder
git-svn-repo/2/.placeholder
git-svn-repo/3/.placeholder
git-svn-repo/5/.placeholder
git-svn-repo/6/.placeholder/.placeholder
ok 7 - clone svn repo with --placeholder-file specified

expecting success of 9160.8 'placeholder namespace conflict with file': 
	test -s "$GIT_REPO"/5/.placeholder

ok 8 - placeholder namespace conflict with file

expecting success of 9160.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"

ok 9 - placeholder namespace conflict with directory

expecting success of 9160.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
	)

A    .git/svn/refs/remotes/git-svn/svn-tree/1
A    .git/svn/refs/remotes/git-svn/svn-tree/2
A    .git/svn/refs/remotes/git-svn/svn-tree/3
A    .git/svn/refs/remotes/git-svn/svn-tree/4
A    .git/svn/refs/remotes/git-svn/svn-tree/4/a
A    .git/svn/refs/remotes/git-svn/svn-tree/4/a/b
A    .git/svn/refs/remotes/git-svn/svn-tree/4/a/b/c
A    .git/svn/refs/remotes/git-svn/svn-tree/4/a/b/c/foo
A    .git/svn/refs/remotes/git-svn/svn-tree/5
A    .git/svn/refs/remotes/git-svn/svn-tree/5/.placeholder
A    .git/svn/refs/remotes/git-svn/svn-tree/6
A    .git/svn/refs/remotes/git-svn/svn-tree/6/.placeholder
Checked out revision 9.
A         7
A         1/file1.txt
A         5/file1.txt
Adding         1/file1.txt
Adding         5/file1.txt
Adding         7
Transmitting file data ..done
Committing transaction...
Committed revision 10.
	D	1/.placeholder
	A	1/file1.txt
	A	5/file1.txt
W: -empty_dir: 1/.placeholder
r10 = bc7dddc3857201208a2ab575547134e95e36342f (refs/remotes/git-svn)

                                                                                
Successfully rebased and updated refs/heads/master.
ok 10 - second set of svn commits and rebase

expecting success of 9160.11 'flag persistence during subsqeuent rebase': 
	test -f "$GIT_REPO"/7/.placeholder &&
	test $(find "$GIT_REPO"/7 -type f | wc -l) = "1"

ok 11 - flag persistence during subsqeuent rebase

expecting success of 9160.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"

ok 12 - placeholder list persistence during subsqeuent rebase

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9162-git-svn-dcommit-interactive.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9162-git-svn-dcommit-interactive/.git/
expecting success of 9162.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
	
Committing transaction...
Committed revision 1.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9162-git-svn-dcommit-interactive/test-interactive/.git/
r1 = f0beab33e205876560232ef0dbfb33522a1ca12c (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive r1
[master bc6eb48] foo: first commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive ...
	A	foo
Committed r2
	A	foo
r2 = dd07950f06e9aa8fd441e92debac2181d2d2be04 (refs/remotes/git-svn)
No changes between bc6eb48f698128a3591892a9004bcb244b99f98b and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 1 - initialize repo

expecting success of 9162.2 'answers: y [\n] 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)
	)
	
[master 18c6688] change #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master e7adfbc] change #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 1132eaf] change #3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive ...
commit 18c6688159f1105bc67bfd4094572fe6d511c12a
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #1

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): commit e7adfbc21cae5dc4ad3efc107ce11b9141ed49fe
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #2

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): commit 1132eaf26efda1eba24fd8975769942f0a8583d6
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #3

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): 	M	foo
Committed r3
	M	foo
r3 = 25df2b1e3f6a2b47df621a55ceb928b4a7a1f637 (refs/remotes/git-svn)
	M	foo
Committed r4
	M	foo
r4 = f622eb8c569e1997c937f8863186e10d67fdec18 (refs/remotes/git-svn)
	M	foo
Committed r5
	M	foo
r5 = 660410b0fd0accbbe0811b0e725b7fee90da155b (refs/remotes/git-svn)
No changes between 1132eaf26efda1eba24fd8975769942f0a8583d6 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 2 - answers: y [\n] yes

expecting success of 9162.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
	)
	
[master cfd5b5f] change #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 25dd7b9] change #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master f2dc073] change #3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive ...
commit cfd5b5f81697f87235a89217434a5fca10034b72
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #1

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): commit 25dd7b9bc311482f2e7bd9079453ca7bc36a2b3e
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #2

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): commit f2dc073d4977401653ad089674054319bc896dd6
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #3

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): HEAD is now at 660410b change #3
ok 3 - answers: yes yes no

expecting success of 9162.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
	)
	
[master cfd5b5f] change #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 25dd7b9] change #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master f2dc073] change #3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive ...
commit cfd5b5f81697f87235a89217434a5fca10034b72
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #1

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): commit 25dd7b9bc311482f2e7bd9079453ca7bc36a2b3e
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #2

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): HEAD is now at 660410b change #3
ok 4 - answers: yes quit

expecting success of 9162.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
	)
	
[master cfd5b5f] change #1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 25dd7b9] change #2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master f2dc073] change #3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9162-git-svn-dcommit-interactive/svnrepo/test-interactive ...
commit cfd5b5f81697f87235a89217434a5fca10034b72
Author: A U Thor <author@example.com>
Date:   Fri Apr 1 13:14:15 2005 +0200

    change #1

Commit this patch to SVN? ([y]es (default)|[n]o|[q]uit|[a]ll): 	M	foo
Committed r6
	M	foo
r6 = 26317bcbf123ddb8a9ea3eab69208cbde9781d4f (refs/remotes/git-svn)
	M	foo
Committed r7
	M	foo
r7 = 8475eb83f55aef3d940feaaddec6f57aea4e43a2 (refs/remotes/git-svn)
	M	foo
Committed r8
	M	foo
r8 = 41212e4c4f562f5c70dfc79dc65649ee15678d04 (refs/remotes/git-svn)
No changes between f2dc073d4977401653ad089674054319bc896dd6 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
HEAD is now at 41212e4 change #3
ok 5 - answers: all

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9163-git-svn-reset-clears-caches.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9163-git-svn-reset-clears-caches/.git/
expecting success of 9163.1 'initialize source svn repo': 
	svn_cmd mkdir -m "create trunk" "$svnrepo"/trunk &&
	svn_cmd mkdir -m "create branches" "$svnrepo/branches" &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		touch foo &&
		svn_cmd add foo &&
		svn_cmd commit -m "a" &&
		svn_cmd cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
		svn_cmd switch "$svnrepo"/branches/branch1 &&
		touch bar &&
		svn_cmd add bar &&
		svn_cmd commit -m b &&
		svn_cmd switch "$svnrepo"/trunk &&
		touch baz &&
		svn_cmd add baz &&
		svn_cmd commit -m c &&
		svn_cmd up &&
		svn_cmd merge "$svnrepo"/branches/branch1 &&
		svn_cmd commit -m "m"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Checked out revision 2.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
At revision 4.
A         bar
Adding         bar
Transmitting file data .done
Committing transaction...
Committed revision 5.
D    bar
Updated to revision 5.
A         baz
Adding         baz
Transmitting file data .done
Committing transaction...
Committed revision 6.
Updating '.':
At revision 6.
--- Merging r4 through r6 into '.':
A    bar
--- Recording mergeinfo for merge of r4 through r6 into '.':
 U   .
Sending        .
Adding         bar
Committing transaction...
Committed revision 7.
ok 1 - initialize source svn repo

expecting success of 9163.2 'fetch to merge-base (a)': 
	git svn init -s "$svnrepo" &&
	git svn fetch --revision BASE:3

r1 = 9b92e72707841e2a057140f9e1357cdcb240ddc1 (refs/remotes/origin/trunk)
	A	foo
r3 = 7d1353e7fa641d5af5add62421960d5ffe17d82f (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9163-git-svn-reset-clears-caches/svnrepo/trunk r3
ok 2 - fetch to merge-base (a)

expecting success of 9163.3 'rebase looses SVN merge (m)': 
	git svn rebase &&
	git svn fetch &&
	test 1 = $(git cat-file -p main|grep parent|wc -l)

	A	baz
r6 = a4439ca11aaabd302655e0d5f79e8c949dce8a2d (refs/remotes/origin/trunk)
	A	bar
Checking svn:mergeinfo changes since r6: 1 sources, 1 changed
Couldn't find revmap for file:///<<PKGBUILDDIR>>/t/trash%20directory.t9163-git-svn-reset-clears-caches/svnrepo/branches/branch1
r7 = 303f4dcf37b1f00d74f48109b52fe0ec280e50c6 (refs/remotes/origin/trunk)

                                                                                
Successfully rebased and updated refs/heads/main.
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9163-git-svn-reset-clears-caches/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9163-git-svn-reset-clears-caches/svnrepo/branches/branch1, 3
Found branch parent: (refs/remotes/origin/branch1) 7d1353e7fa641d5af5add62421960d5ffe17d82f
Following parent with do_switch
Successfully followed parent
r4 = f7a85ba292a849c524409355808097f933e5d656 (refs/remotes/origin/branch1)
	A	bar
r5 = 2dd7aaf21a61af926ef3b64df04fca26e116a011 (refs/remotes/origin/branch1)
ok 3 - rebase looses SVN merge (m)

expecting success of 9163.4 'reset and fetch gets the SVN merge (m) correctly': 
	git svn reset -r 3 &&
	git reset --hard origin/trunk &&
	git svn fetch &&
	test 2 = $(git cat-file -p origin/trunk|grep parent|wc -l)

r3 = 7d1353e7fa641d5af5add62421960d5ffe17d82f (refs/remotes/origin/trunk)
HEAD is now at 7d1353e a
Index mismatch: 4d5fcadc293a348e88f777dc0920f11e7d71441c != 4e126a1a1821dd5763468eb219c1ecdb6f7f0fda
rereading 7d1353e7fa641d5af5add62421960d5ffe17d82f
	A	baz
r6 = a4439ca11aaabd302655e0d5f79e8c949dce8a2d (refs/remotes/origin/trunk)
	A	bar
Checking svn:mergeinfo changes since r6: 1 sources, 1 changed
Found merge parent (/branches/branch1:4-6): 2dd7aaf21a61af926ef3b64df04fca26e116a011
r7 = f290a1694d182d520e82284666836d59388b66cd (refs/remotes/origin/trunk)
ok 4 - reset and fetch gets the SVN merge (m) correctly

# passed all 4 test(s)
1..4
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9165-git-svn-fetch-merge-branch-of-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9165-git-svn-fetch-merge-branch-of-branch/.git/
expecting success of 9165.1 'initialize source svn repo': 
	svn_cmd mkdir -m x "$svnrepo"/trunk &&
	svn_cmd mkdir -m x "$svnrepo"/branches &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		touch foo &&
		svn_cmd add foo &&
		svn_cmd commit -m "initial commit" &&
		svn_cmd cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
		svn_cmd switch "$svnrepo"/branches/branch1 &&
		touch bar &&
		svn_cmd add bar &&
		svn_cmd commit -m branch1 &&
		svn_cmd cp -m branch "$svnrepo"/branches/branch1 "$svnrepo"/branches/branch2 &&
		svn_cmd switch "$svnrepo"/branches/branch2 &&
		touch baz &&
		svn_cmd add baz &&
		svn_cmd commit -m branch2 &&
		svn_cmd switch "$svnrepo"/trunk &&
		touch bar2 &&
		svn_cmd add bar2 &&
		svn_cmd commit -m trunk &&
		svn_cmd switch "$svnrepo"/branches/branch2 &&
		svn_cmd merge "$svnrepo"/trunk &&
		svn_cmd commit -m "merge trunk" &&
		svn_cmd switch "$svnrepo"/trunk &&
		svn_cmd merge --reintegrate "$svnrepo"/branches/branch2 &&
		svn_cmd commit -m "merge branch2"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Checked out revision 2.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
At revision 4.
A         bar
Adding         bar
Transmitting file data .done
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
At revision 6.
A         baz
Adding         baz
Transmitting file data .done
Committing transaction...
Committed revision 7.
D    baz
D    bar
Updated to revision 7.
A         bar2
Adding         bar2
Transmitting file data .done
Committing transaction...
Committed revision 8.
D    bar2
A    bar
A    baz
Updated to revision 8.
--- Merging r4 through r8 into '.':
A    bar2
--- Recording mergeinfo for merge of r4 through r8 into '.':
 U   .
Sending        .
Adding         bar2
Committing transaction...
Committed revision 9.
D    bar
D    baz
 U   .
Updated to revision 9.
--- Merging differences between repository URLs into '.':
A    bar
A    baz
--- Recording mergeinfo for merge between repository URLs into '.':
 U   .
Sending        .
Adding         bar
Adding         baz
Committing transaction...
Committed revision 10.
ok 1 - initialize source svn repo

expecting success of 9165.2 'clone svn repo': 
	git svn init -s "$svnrepo" &&
	git svn fetch

r1 = be50f45a494f025db04464cae2a8fabff932cc9d (refs/remotes/origin/trunk)
	A	foo
r3 = e71250c8bac758fd933e5e4524593e2462cb8793 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9165-git-svn-fetch-merge-branch-of-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9165-git-svn-fetch-merge-branch-of-branch/svnrepo/branches/branch1, 3
Found branch parent: (refs/remotes/origin/branch1) e71250c8bac758fd933e5e4524593e2462cb8793
Following parent with do_switch
Successfully followed parent
r4 = 9be167c014f425b42a488b3fe076444db017cfd8 (refs/remotes/origin/branch1)
	A	bar
r5 = ed0fd57584e66e4ac8106301be6656f34d8e8663 (refs/remotes/origin/branch1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9165-git-svn-fetch-merge-branch-of-branch/svnrepo/branches/branch1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9165-git-svn-fetch-merge-branch-of-branch/svnrepo/branches/branch2, 5
Found branch parent: (refs/remotes/origin/branch2) ed0fd57584e66e4ac8106301be6656f34d8e8663
Following parent with do_switch
Successfully followed parent
r6 = e09ee195028b956f213abd766860236c4c671a6f (refs/remotes/origin/branch2)
	A	baz
r7 = 0b3143adac69afacf03b4ceab82c38314582151b (refs/remotes/origin/branch2)
	A	bar2
r8 = eee3e395fe2d75c2396f486d109028c6eb781a7f (refs/remotes/origin/trunk)
	A	bar2
Checking svn:mergeinfo changes since r7: 1 sources, 1 changed
Found merge parent (/trunk:4-8): eee3e395fe2d75c2396f486d109028c6eb781a7f
r9 = 1e4a7db8c11c65b49398958b15d4d42ada6ef7bf (refs/remotes/origin/branch2)
	A	bar
	A	baz
Checking svn:mergeinfo changes since r8: 2 sources, 2 changed
Found merge parent (/branches/branch1:4-5): ed0fd57584e66e4ac8106301be6656f34d8e8663
Found merge parent (/branches/branch2:6-9): 1e4a7db8c11c65b49398958b15d4d42ada6ef7bf
r10 = 125f94af5c04e7542ede778f7af93b2e8f03f5d1 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9165-git-svn-fetch-merge-branch-of-branch/svnrepo/trunk r10
ok 2 - clone svn repo

expecting success of 9165.3 'verify merge commit': x=$(git rev-parse HEAD^2) &&
	y=$(git rev-parse origin/branch2) &&
	test "x$x" = "x$y"

ok 3 - verify merge commit

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9167-git-svn-cmd-branch-subproject.sh ***
skipping test t9167 altogether
1..0 # SKIP skip all tests in t9167
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9166-git-svn-fetch-merge-branch-of-branch2.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9166-git-svn-fetch-merge-branch-of-branch2/.git/
expecting success of 9166.1 'initialize source svn repo': 
	svn_cmd mkdir -m x "$svnrepo"/trunk &&
	svn_cmd mkdir -m x "$svnrepo"/branches &&
	svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
	(
		cd "$SVN_TREE" &&
		touch foo &&
		svn_cmd add foo &&
		svn_cmd commit -m "initial commit" &&
		svn_cmd cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
		svn_cmd switch "$svnrepo"/branches/branch1 &&
		touch bar &&
		svn_cmd add bar &&
		svn_cmd commit -m branch1 &&
		svn_cmd cp -m branch "$svnrepo"/branches/branch1 "$svnrepo"/branches/branch2 &&
		svn_cmd switch "$svnrepo"/branches/branch2 &&
		touch baz &&
		svn_cmd add baz &&
		svn_cmd commit -m branch2 &&
		svn_cmd switch "$svnrepo"/trunk &&
		svn_cmd merge --reintegrate "$svnrepo"/branches/branch2 &&
		svn_cmd commit -m "merge branch2"
	) &&
	rm -rf "$SVN_TREE"

Committing transaction...
Committed revision 1.
Committing transaction...
Committed revision 2.
Checked out revision 2.
A         foo
Adding         foo
Transmitting file data .done
Committing transaction...
Committed revision 3.
Committing transaction...
Committed revision 4.
At revision 4.
A         bar
Adding         bar
Transmitting file data .done
Committing transaction...
Committed revision 5.
Committing transaction...
Committed revision 6.
At revision 6.
A         baz
Adding         baz
Transmitting file data .done
Committing transaction...
Committed revision 7.
D    baz
D    bar
Updated to revision 7.
--- Merging differences between repository URLs into '.':
A    bar
A    baz
--- Recording mergeinfo for merge between repository URLs into '.':
 U   .
Sending        .
Adding         bar
Adding         baz
Committing transaction...
Committed revision 8.
ok 1 - initialize source svn repo

expecting success of 9166.2 'clone svn repo': 
	git svn init -s "$svnrepo" &&
	git svn fetch

r1 = c9cd61981029fd85dbe1314c33e0c0949d9e83f1 (refs/remotes/origin/trunk)
	A	foo
r3 = 6df952491a179f785bf8e3815a5b29530209dca6 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9166-git-svn-fetch-merge-branch-of-branch2/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9166-git-svn-fetch-merge-branch-of-branch2/svnrepo/branches/branch1, 3
Found branch parent: (refs/remotes/origin/branch1) 6df952491a179f785bf8e3815a5b29530209dca6
Following parent with do_switch
Successfully followed parent
r4 = 13e7982adf8afbe8aeaa53bd6d0be33047125061 (refs/remotes/origin/branch1)
	A	bar
r5 = 6d160651893696aff54000831f1cd18f5427315f (refs/remotes/origin/branch1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9166-git-svn-fetch-merge-branch-of-branch2/svnrepo/branches/branch1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9166-git-svn-fetch-merge-branch-of-branch2/svnrepo/branches/branch2, 5
Found branch parent: (refs/remotes/origin/branch2) 6d160651893696aff54000831f1cd18f5427315f
Following parent with do_switch
Successfully followed parent
r6 = 2ca4f21d456743eee310b5185792ff53fd968520 (refs/remotes/origin/branch2)
	A	baz
r7 = ce9e2dad440c9d146f2a2533f6a3b54667be2b00 (refs/remotes/origin/branch2)
	A	bar
	A	baz
Checking svn:mergeinfo changes since r3: 2 sources, 2 changed
Found merge parent (/branches/branch1:4-5): 6d160651893696aff54000831f1cd18f5427315f
Found merge parent (/branches/branch2:6-7): ce9e2dad440c9d146f2a2533f6a3b54667be2b00
r8 = 678abd65abddcdce0a2cedf0154700885b679132 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9166-git-svn-fetch-merge-branch-of-branch2/svnrepo/trunk r8
ok 2 - clone svn repo

expecting success of 9166.3 'verify merge commit': x=$(git rev-parse HEAD^2) &&
	y=$(git rev-parse origin/branch2) &&
	test "x$x" = "x$y"

ok 3 - verify merge commit

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9161-git-svn-mergeinfo-push.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9161-git-svn-mergeinfo-push/.git/
expecting success of 9161.1 'load svn dump': 
	svnadmin load -q '/<<PKGBUILDDIR>>/t/trash directory.t9161-git-svn-mergeinfo-push/svnrepo' 	  < '/<<PKGBUILDDIR>>/t/t9161/branches.dump' &&
	git svn init --minimize-url -R svnmerge 	  -T trunk -b branches 'file:///<<PKGBUILDDIR>>/t/trash directory.t9161-git-svn-mergeinfo-push/svnrepo' &&
	git svn fetch --all
	
r1 = 60b4ce936c7f2d58cd350f433a4a54386e980d77 (refs/remotes/origin/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1, 1
Found branch parent: (refs/remotes/origin/svnb1) 60b4ce936c7f2d58cd350f433a4a54386e980d77
Following parent with do_switch
Successfully followed parent
r2 = c1ee1a0fe67d49260d08bdf7a5ea9b9e880830fc (refs/remotes/origin/svnb1)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb2, 1
Found branch parent: (refs/remotes/origin/svnb2) 60b4ce936c7f2d58cd350f433a4a54386e980d77
Following parent with do_switch
Successfully followed parent
r3 = fcd22a051d8f3fb8eee112c9353e4ec515b0898e (refs/remotes/origin/svnb2)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb3, 1
Found branch parent: (refs/remotes/origin/svnb3) 60b4ce936c7f2d58cd350f433a4a54386e980d77
Following parent with do_switch
Successfully followed parent
r4 = 9f2fb5ac35479b18f07309c6bc981669ce3fa8a2 (refs/remotes/origin/svnb3)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb4, 1
Found branch parent: (refs/remotes/origin/svnb4) 60b4ce936c7f2d58cd350f433a4a54386e980d77
Following parent with do_switch
Successfully followed parent
r5 = 54e193c1dd5eb1174008a4fca7b727b93e46d162 (refs/remotes/origin/svnb4)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb5, 1
Found branch parent: (refs/remotes/origin/svnb5) 60b4ce936c7f2d58cd350f433a4a54386e980d77
Following parent with do_switch
Successfully followed parent
r6 = 4ed31937743c3534399b57ef2017637acf283475 (refs/remotes/origin/svnb5)
	A	b1file
r7 = aefb1f71a50fdce99d924ff86e19b5a028321a51 (refs/remotes/origin/svnb1)
	A	b2file
r8 = 7c3a23baa6431ebe0f83fadffa3bc55a728db18f (refs/remotes/origin/svnb2)
	A	b3file
r9 = 44a190c152c4ea13f56c2f71624ad38ac5100773 (refs/remotes/origin/svnb3)
	A	b4file
r10 = 8858cb5da23dd2e921009377377fec07b3698003 (refs/remotes/origin/svnb4)
	A	b5file
r11 = f35542252b0c58019de22ff0a44cba32772bac77 (refs/remotes/origin/svnb5)
	A	b5file
Checking svn:mergeinfo changes since r10: 1 sources, 1 changed
Found merge parent (/branches/svnb5:6,11): f35542252b0c58019de22ff0a44cba32772bac77
r12 = 5ebc8a258bfa8e7cd6382452cbcd0ac8a251c50a (refs/remotes/origin/svnb4)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/trunk r1
ok 1 - load svn dump

expecting success of 9161.2 'propagate merge information': 
	git config svn.pushmergeinfo yes &&
	git checkout origin/svnb1 &&
	git merge --no-ff origin/svnb2 &&
	git svn dcommit
	
Note: switching to 'origin/svnb1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at aefb1f7 b1 commit
Merge made by the 'ort' strategy.
 b2file | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b2file
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1 ...
	A	b2file
Committed r13
	A	b2file
Checking svn:mergeinfo changes since r7: 1 sources, 1 changed
Found merge parent (/branches/svnb2:3,8): 7c3a23baa6431ebe0f83fadffa3bc55a728db18f
r13 = 59e3d2f80beeea7a3cb569575c540827a16f3e9e (refs/remotes/origin/svnb1)
No changes between 6716fc5ac201a1acdde363bc9f7b99f080d70920 and refs/remotes/origin/svnb1
Resetting to the latest refs/remotes/origin/svnb1
ok 2 - propagate merge information

expecting success of 9161.3 'check svn:mergeinfo': 
	mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) &&
	test "$mergeinfo" = "/branches/svnb2:3,8"
	
ok 3 - check svn:mergeinfo

expecting success of 9161.4 'merge another branch': 
	git merge --no-ff origin/svnb3 &&
	git svn dcommit
	
Merge made by the 'ort' strategy.
 b3file | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b3file
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1 ...
	A	b3file
Committed r14
	A	b3file
Checking svn:mergeinfo changes since r13: 2 sources, 1 changed
Found merge parent (/branches/svnb3:4,9): 44a190c152c4ea13f56c2f71624ad38ac5100773
r14 = e069526015fc14be16591212bd0ac4fac8e612d4 (refs/remotes/origin/svnb1)
No changes between 54380b8cf53d6911bf74447f2652eca3e857e3c2 and refs/remotes/origin/svnb1
Resetting to the latest refs/remotes/origin/svnb1
ok 4 - merge another branch

expecting success of 9161.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"
	
ok 5 - check primary parent mergeinfo respected

expecting success of 9161.6 'merge existing merge': 
	git merge --no-ff origin/svnb4 &&
	git svn dcommit
	
Merge made by the 'ort' strategy.
 b4file | 0
 b5file | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b4file
 create mode 100644 b5file
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1 ...
	A	b4file
	A	b5file
Committed r15
	A	b4file
	A	b5file
Checking svn:mergeinfo changes since r14: 4 sources, 2 changed
Found merge parent (/branches/svnb4:5-6,10-12): 5ebc8a258bfa8e7cd6382452cbcd0ac8a251c50a
Found merge parent (/branches/svnb5:6,11): f35542252b0c58019de22ff0a44cba32772bac77
r15 = 2cbce5f3be7476bdb7d73aff0e7044f2520409f0 (refs/remotes/origin/svnb1)
No changes between b890b9d23b4e096d5b46203411c4180c7d6396c7 and refs/remotes/origin/svnb1
Resetting to the latest refs/remotes/origin/svnb1
ok 6 - merge existing merge

expecting success of 9161.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"
	
ok 7 - check both parents' mergeinfo respected

expecting success of 9161.8 'make further commits to branch': 
	git checkout origin/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
	
Previous HEAD position was 2cbce5f Merge remote-tracking branch 'origin/svnb4' into HEAD
HEAD is now at 7c3a23b b2 commit
[detached HEAD f8a5d0b] later b2 commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newb2file
[detached HEAD 3dd33e0] later b2 commit 2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newb2file-2
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb2 ...
	A	newb2file
Committed r16
	A	newb2file
r16 = 86284eae71e7f802a83c66fb104c381c00ed98f9 (refs/remotes/origin/svnb2)
	A	newb2file-2
Committed r17
	A	newb2file-2
r17 = bb99902e276e375b7aa1507c6d4e46da1140c83b (refs/remotes/origin/svnb2)
No changes between 3dd33e0b67d0f2f0f0b36f8f8bcedeff406c0844 and refs/remotes/origin/svnb2
Resetting to the latest refs/remotes/origin/svnb2
ok 8 - make further commits to branch

expecting success of 9161.9 'second forward merge': 
	git checkout origin/svnb1 &&
	git merge --no-ff origin/svnb2 &&
	git svn dcommit
	
Previous HEAD position was bb99902 later b2 commit 2
HEAD is now at 2cbce5f Merge remote-tracking branch 'origin/svnb4' into HEAD
Merge made by the 'ort' strategy.
 newb2file   | 0
 newb2file-2 | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newb2file
 create mode 100644 newb2file-2
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1 ...
	A	newb2file
	A	newb2file-2
Committed r18
	A	newb2file
	A	newb2file-2
Checking svn:mergeinfo changes since r15: 4 sources, 1 changed
Found merge parent (/branches/svnb2:8,16-17): bb99902e276e375b7aa1507c6d4e46da1140c83b
r18 = d08efa82688ebf78139b66ed96067cac81d7117b (refs/remotes/origin/svnb1)
No changes between e89866ecd210d83b4227f5f59fa70dd698acc5f9 and refs/remotes/origin/svnb1
Resetting to the latest refs/remotes/origin/svnb1
ok 9 - second forward merge

expecting success of 9161.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"
	
ok 10 - check new mergeinfo added

expecting success of 9161.11 'reintegration merge': 
	git checkout origin/svnb4 &&
	git merge --no-ff origin/svnb1 &&
	git svn dcommit
	
Previous HEAD position was d08efa8 Merge remote-tracking branch 'origin/svnb2' into HEAD
HEAD is now at 5ebc8a2 Merge remote-tracking branch 'svnb5' into HEAD
Merge made by the 'ort' strategy.
 b1file      | 0
 b2file      | 0
 b3file      | 0
 newb2file   | 0
 newb2file-2 | 0
 5 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b1file
 create mode 100644 b2file
 create mode 100644 b3file
 create mode 100644 newb2file
 create mode 100644 newb2file-2
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb4 ...
	A	b1file
	A	b2file
	A	b3file
	A	newb2file
	A	newb2file-2
Committed r19
	A	b1file
	A	b2file
	A	b3file
	A	newb2file
	A	newb2file-2
Checking svn:mergeinfo changes since r12: 4 sources, 3 changed
Found merge parent (/branches/svnb1:2-4,7-9,13-18): d08efa82688ebf78139b66ed96067cac81d7117b
Found merge parent (/branches/svnb2:3,8,16-17): bb99902e276e375b7aa1507c6d4e46da1140c83b
Found merge parent (/branches/svnb3:4,9): 44a190c152c4ea13f56c2f71624ad38ac5100773
r19 = 696799a0e6711fd3cae42f563c027985901614dc (refs/remotes/origin/svnb4)
No changes between df8ac31c505583ec642f9f96bfd8f304d9219a68 and refs/remotes/origin/svnb4
Resetting to the latest refs/remotes/origin/svnb4
ok 11 - reintegration merge

expecting success of 9161.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/svnb5:6,11"
	
ok 12 - check reintegration mergeinfo

expecting success of 9161.13 'dcommit a merge at the top of a stack': 
	git checkout origin/svnb1 &&
	touch anotherfile &&
	git add anotherfile &&
	git commit -m "a commit" &&
	git merge origin/svnb4 &&
	git svn dcommit
	
Previous HEAD position was 696799a Merge remote-tracking branch 'origin/svnb1' into HEAD
HEAD is now at d08efa8 Merge remote-tracking branch 'origin/svnb2' into HEAD
[detached HEAD 1f7ace1] a commit
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 anotherfile
Merge made by the 'ort' strategy.
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9161-git-svn-mergeinfo-push/svnrepo/branches/svnb1 ...
	A	anotherfile
Committed r20
	A	anotherfile
r20 = 8e5151d2ee4c66809e8bac230157782a11817552 (refs/remotes/origin/svnb1)
Committed r21
No changes
08cad60b48e9ff3598c75271d0faed01339ff676~1 == 08cad60b48e9ff3598c75271d0faed01339ff676
Checking svn:mergeinfo changes since r20: 4 sources, 1 changed
Found merge parent (/branches/svnb4:10-12,19): 696799a0e6711fd3cae42f563c027985901614dc
r21 = 8023905c14cdb0a2361a5291c9c95f9266d58bc7 (refs/remotes/origin/svnb1)
No changes between 08cad60b48e9ff3598c75271d0faed01339ff676 and refs/remotes/origin/svnb1
Resetting to the latest refs/remotes/origin/svnb1
ok 13 - dcommit a merge at the top of a stack

# passed all 13 test(s)
1..13
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9169-git-svn-dcommit-crlf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9169-git-svn-dcommit-crlf/.git/
expecting success of 9169.1 'setup commit repository': 
	svn_cmd mkdir -m "$test_description" "$svnrepo/dir" &&
	git svn clone "$svnrepo" work &&
	(
		cd work &&
		echo foo >>foo &&
		git update-index --add foo &&
		printf "a\\r\\n\\r\\nb\\r\\nc\\r\\n" >cmt &&
		p=$(git rev-parse HEAD) &&
		t=$(git write-tree) &&
		cmt=$(git commit-tree -p $p $t <cmt) &&
		git update-ref refs/heads/main $cmt &&
		git cat-file commit HEAD | tail -n4 >out &&
		test_cmp cmt out &&
		git svn dcommit &&
		printf "a\\n\\nb\\nc\\n" >exp &&
		git cat-file commit HEAD | sed -ne 6,9p >out &&
		test_cmp exp out
	)

Committing transaction...
Committed revision 1.
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9169-git-svn-dcommit-crlf/work/.git/
W: +empty_dir: dir
r1 = 4b0de35ef6f266b2e17a48062df34a929ce6614b (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9169-git-svn-dcommit-crlf/svnrepo r1
creating empty directory: dir
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9169-git-svn-dcommit-crlf/svnrepo ...
	A	foo
Committed r2
	A	foo
r2 = dc98612fe62583f3edd256b8ac0bf838d778b5e3 (refs/remotes/git-svn)
No changes between 44eeb90ef97e150d4b5c781a17cde427b8582d44 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
ok 1 - setup commit repository

# passed all 1 test(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9210-scalar.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/.git/
expecting success of 9210.1 'scalar shows a usage': 
	test_expect_code 129 scalar -h

usage: scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]

Commands:
	clone
	list
	register
	unregister
	run
	reconfigure
	delete
	help
	version
	diagnose

ok 1 - scalar shows a usage

expecting success of 9210.2 'scalar invoked on enlistment root': 
	test_when_finished rm -rf test src deeper &&

	for enlistment_root in test src deeper/test
	do
		git init ${enlistment_root}/src &&

		# Register
		scalar register ${enlistment_root} &&
		scalar list >out &&
		grep "$(pwd)/${enlistment_root}/src\$" out &&

		# Delete (including enlistment root)
		scalar delete $enlistment_root &&
		test_path_is_missing $enlistment_root &&
		scalar list >out &&
		! grep "^$(pwd)/${enlistment_root}/src\$" out || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src
ok 2 - scalar invoked on enlistment root

expecting success of 9210.3 'scalar invoked on enlistment src repo': 
	test_when_finished rm -rf test src deeper &&

	for enlistment_root in test src deeper/test
	do
		git init ${enlistment_root}/src &&

		# Register
		scalar register ${enlistment_root}/src &&
		scalar list >out &&
		grep "$(pwd)/${enlistment_root}/src\$" out &&

		# Delete (will not include enlistment root)
		scalar delete ${enlistment_root}/src &&
		test_path_is_dir $enlistment_root &&
		scalar list >out &&
		! grep "^$(pwd)/${enlistment_root}/src\$" out || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/src
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/src
ok 3 - scalar invoked on enlistment src repo

expecting success of 9210.4 'scalar invoked when enlistment root and repo are the same': 
	test_when_finished rm -rf test src deeper &&

	for enlistment_root in test src deeper/test
	do
		git init ${enlistment_root} &&

		# Register
		scalar register ${enlistment_root} &&
		scalar list >out &&
		grep "$(pwd)/${enlistment_root}\$" out &&

		# Delete (will not include enlistment root)
		scalar delete ${enlistment_root} &&
		test_path_is_missing $enlistment_root &&
		scalar list >out &&
		! grep "^$(pwd)/${enlistment_root}\$" out &&

		# Make sure we did not accidentally delete the trash dir
		test_path_is_dir "$TRASH_DIRECTORY" || return 1
	done

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/src
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/deeper/test
ok 4 - scalar invoked when enlistment root and repo are the same

expecting success of 9210.5 'scalar repo search respects GIT_CEILING_DIRECTORIES': 
	test_when_finished rm -rf test &&

	git init test/src &&
	mkdir -p test/src/deep &&
	GIT_CEILING_DIRECTORIES="$(pwd)/test/src" &&
	! scalar register test/src/deep 2>err &&
	grep "not a git repository" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src/.git/
fatal: not a git repository (or any of the parent directories): .git
ok 5 - scalar repo search respects GIT_CEILING_DIRECTORIES

expecting success of 9210.6 'scalar enlistments need a worktree': 
	test_when_finished rm -rf bare test &&

	git init --bare bare/src &&
	! scalar register bare/src 2>err &&
	grep "Scalar enlistments require a worktree" err &&

	git init test/src &&
	! scalar register test/src/.git 2>err &&
	grep "Scalar enlistments require a worktree" err

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/bare/src/
fatal: Scalar enlistments require a worktree
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/test/src/.git/
fatal: Scalar enlistments require a worktree
ok 6 - scalar enlistments need a worktree

checking prerequisite: FSMONITOR_DAEMON

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FSMONITOR_DAEMON" &&
	git version --build-options >output &&
	grep "feature: fsmonitor--daemon" output

)
prerequisite FSMONITOR_DAEMON not satisfied
ok 7 # skip scalar register starts fsmon daemon (missing FSMONITOR_DAEMON)

expecting success of 9210.8 'scalar unregister': 
	git init vanish/src &&
	scalar register vanish/src &&
	git config --get --global --fixed-value \
		maintenance.repo "$(pwd)/vanish/src" &&
	scalar list >scalar.repos &&
	grep -F "$(pwd)/vanish/src" scalar.repos &&
	rm -rf vanish/src/.git &&
	scalar unregister vanish &&
	test_must_fail git config --get --global --fixed-value \
		maintenance.repo "$(pwd)/vanish/src" &&
	scalar list >scalar.repos &&
	! grep -F "$(pwd)/vanish/src" scalar.repos &&

	# scalar unregister should be idempotent
	scalar unregister vanish

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/vanish/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/vanish/src
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/vanish/src
ok 8 - scalar unregister

expecting success of 9210.9 'set up repository to clone': 
	test_commit first &&
	test_commit second &&
	test_commit third &&
	git switch -c parallel first &&
	mkdir -p 1/2 &&
	test_commit 1/2/3 &&
	git config uploadPack.allowFilter true &&
	git config uploadPack.allowAnySHA1InWant true

[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[master d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[master cd7036d] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third.t
Switched to a new branch 'parallel'
[parallel afe5387] 1/2/3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1/2/3.t
ok 9 - set up repository to clone

expecting success of 9210.10 'scalar clone': 
	second=$(git rev-parse --verify second:second.t) &&
	scalar clone "file://$(pwd)" cloned --single-branch &&
	(
		cd cloned/src &&

		git config --get --global --fixed-value maintenance.repo \
			"$(pwd)" &&

		git for-each-ref --format="%(refname)" refs/remotes/origin/ >actual &&
		echo "refs/remotes/origin/parallel" >expect &&
		test_cmp expect actual &&

		test_path_is_missing 1/2 &&
		test_must_fail git rev-list --missing=print $second &&
		git rev-list $second &&
		git cat-file blob $second >actual &&
		echo "second" >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/src/.git/
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'parallel'
branch 'parallel' set up to track 'origin/parallel'.
Your branch is up to date with 'origin/parallel'.
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/src
fatal: bad object e019be006cf33489e2d0177a3837a2384eddebc5
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
ok 10 - scalar clone

expecting success of 9210.11 'scalar reconfigure': 
	git init one/src &&
	scalar register one &&
	git -C one/src config core.preloadIndex false &&
	scalar reconfigure one &&
	test true = "$(git -C one/src config core.preloadIndex)" &&
	git -C one/src config core.preloadIndex false &&
	scalar reconfigure -a &&
	test true = "$(git -C one/src config core.preloadIndex)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/one/src/.git/
ok 11 - scalar reconfigure

expecting success of 9210.12 '`reconfigure -a` removes stale config entries': 
	git init stale/src &&
	scalar register stale &&
	scalar list >scalar.repos &&
	grep stale scalar.repos &&

	grep -v stale scalar.repos >expect &&

	rm -rf stale &&
	scalar reconfigure -a &&
	scalar list >scalar.repos &&
	test_cmp expect scalar.repos

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/stale/src/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/stale/src
warning: removing stale scalar.repo '/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/stale/src'
ok 12 - `reconfigure -a` removes stale config entries

expecting success of 9210.13 'scalar delete without enlistment shows a usage': 
	test_expect_code 129 scalar delete

usage: scalar delete <enlistment>

ok 13 - scalar delete without enlistment shows a usage

expecting success of 9210.14 'scalar delete with enlistment': 
	scalar delete cloned &&
	test_path_is_missing cloned

/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/src
ok 14 - scalar delete with enlistment

expecting success of 9210.15 'scalar supports -c/-C': 
	test_when_finished "scalar delete sub" &&
	git init sub &&
	scalar -C sub -c status.aheadBehind=bogus register &&
	test -z "$(git -C sub config --local status.aheadBehind)" &&
	test true = "$(git -C sub config core.preloadIndex)"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/sub/.git/
/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/sub
ok 15 - scalar supports -c/-C

expecting success of 9210.16 '`scalar [...] <dir>` errors out when dir is missing': 
	! scalar run config cloned 2>err &&
	grep "cloned. does not exist" err

fatal: '/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned' does not exist
ok 16 - `scalar [...] <dir>` errors out when dir is missing

checking prerequisite: UNZIP

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-UNZIP" &&
	"$GIT_UNZIP" -v
	test $? -ne 127

)
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;
see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.

Compiled with gcc 11.3.0 for Unix (Linux ELF).

UnZip special compilation options:
        ACORN_FTYPE_NFS
        COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)
        SET_DIR_ATTRIB
        SYMLINKS (symbolic links supported, if RTL and file system permit)
        TIMESTAMP
        UNIXBACKUP
        USE_EF_UT_TIME
        USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)
        USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)
        UNICODE_SUPPORT [wide-chars, char coding: other] (handle UTF-8 paths)
        LARGE_FILE_SUPPORT (large files over 2 GiB supported)
        ZIP64_SUPPORT (archives using Zip64 for large files supported)
        USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.8, 13-Jul-2019)
        VMS_TEXT_CONV
        WILD_STOP_AT_DIR
        [decryption, version 2.11 of 05 Jan 2007]

UnZip and ZipInfo environment options:
           UNZIP:  [none]
        UNZIPOPT:  [none]
         ZIPINFO:  [none]
      ZIPINFOOPT:  [none]
prerequisite UNZIP ok
expecting success of 9210.17 'scalar diagnose': 
	scalar clone "file://$(pwd)" cloned --single-branch &&
	git repack &&
	echo "$(pwd)/.git/objects/" >>cloned/src/.git/objects/info/alternates &&
	test_commit -C cloned/src loose &&
	scalar diagnose cloned >out 2>err &&
	grep "Available space" out &&
	sed -n "s/.*$SQ\\(.*\\.zip\\)$SQ.*/\\1/p" <err >zip_path &&
	zip_path=$(cat zip_path) &&
	test -n "$zip_path" &&
	"$GIT_UNZIP" -v "$zip_path" &&
	folder=${zip_path%.zip} &&
	test_path_is_missing "$folder" &&
	"$GIT_UNZIP" -p "$zip_path" diagnostics.log >out &&
	test_file_not_empty out &&
	"$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
	grep "$(pwd)/.git/objects" out &&
	"$GIT_UNZIP" -p "$zip_path" objects-local.txt >out &&
	grep "^Total: [1-9]" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/src/.git/
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'parallel'
branch 'parallel' set up to track 'origin/parallel'.
Your branch is up to date with 'origin/parallel'.
[parallel 88d5063] loose
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 loose.t
Available space on '/<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/src': 204.12 GiB (mount flags 0x1000)
Archive:  /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/cloned/.scalarDiagnostics/git-diagnostics-20221228_082223.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
     358  Defl:N      219  39% 2022-12-28 08:22 ea11b279  diagnostics.log
     816  Defl:N      241  71% 2022-12-28 08:22 411e2111  packs-local.txt
     191  Defl:N      129  33% 2022-12-28 08:22 d3ccb818  objects-local.txt
      73  Defl:N       63  14% 2022-12-28 08:22 1f078b37  .git/description
      57  Defl:N       39  32% 2022-12-28 08:22 795d289e  .git/config.worktree
     404  Defl:N      176  56% 2022-12-28 08:22 3c03f58d  .git/FETCH_HEAD
      25  Stored       25   0% 2022-12-28 08:22 7ce4afd6  .git/HEAD
    1098  Defl:N      566  49% 2022-12-28 08:22 12311dcc  .git/config
     595  Defl:N      404  32% 2022-12-28 08:22 a2158763  .git/index
       6  Stored        6   0% 2022-12-28 08:22 183bc9be  .git/COMMIT_EDITMSG
     478  Defl:N      279  42% 2022-12-28 08:22 09f84f85  .git/hooks/applypatch-msg.sample
     896  Defl:N      503  44% 2022-12-28 08:22 10caf8e9  .git/hooks/commit-msg.sample
    4726  Defl:N     1814  62% 2022-12-28 08:22 793c7cef  .git/hooks/fsmonitor-watchman.sample
     189  Defl:N      138  27% 2022-12-28 08:22 c0f70c9a  .git/hooks/post-update.sample
     424  Defl:N      265  38% 2022-12-28 08:22 024cc0cf  .git/hooks/pre-applypatch.sample
    1643  Defl:N      908  45% 2022-12-28 08:22 0c32b3ef  .git/hooks/pre-commit.sample
     416  Defl:N      255  39% 2022-12-28 08:22 5ef33f44  .git/hooks/pre-merge-commit.sample
    1374  Defl:N      701  49% 2022-12-28 08:22 f90a0f0f  .git/hooks/pre-push.sample
    4898  Defl:N     2015  59% 2022-12-28 08:22 5158ec84  .git/hooks/pre-rebase.sample
     544  Defl:N      329  40% 2022-12-28 08:22 96f8c492  .git/hooks/pre-receive.sample
    1492  Defl:N      744  50% 2022-12-28 08:22 303613ed  .git/hooks/prepare-commit-msg.sample
    2783  Defl:N     1254  55% 2022-12-28 08:22 f00806d3  .git/hooks/push-to-checkout.sample
    3650  Defl:N     1173  68% 2022-12-28 08:22 06fcf0d9  .git/hooks/update.sample
     240  Defl:N      173  28% 2022-12-28 08:22 21cd3d77  .git/info/exclude
       8  Stored        8   0% 2022-12-28 08:22 4cc141be  .git/info/sparse-checkout
     169  Defl:N      121  28% 2022-12-28 08:22 ebd37c30  .git/logs/refs/remotes/origin/parallel
     319  Defl:N      164  49% 2022-12-28 08:22 b5b10679  .git/logs/refs/heads/parallel
     323  Defl:N      167  48% 2022-12-28 08:22 df9daca2  .git/logs/refs/heads/HEAD
      74  Defl:N       70   5% 2022-12-28 08:22 f43ef178  .git/objects/info/alternates
--------          -------  ---                            -------
   28269            12949  54%                            29 files
Contents of /<<PKGBUILDDIR>>/t/trash directory.t9210-scalar/.git/objects:
Total: 3 loose objects
ok 17 - scalar diagnose

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9211-scalar-clone.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/.git/
expecting success of 9211.1 'set up repository to clone': 
	rm -rf .git &&
	git init to-clone &&
	(
		cd to-clone &&
		git branch -m base &&

		test_commit first &&
		test_commit second &&
		test_commit third &&

		git switch -c parallel first &&
		mkdir -p 1/2 &&
		test_commit 1/2/3 &&

		git switch base &&

		# By default, permit
		git config uploadpack.allowfilter true &&
		git config uploadpack.allowanysha1inwant true
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/to-clone/.git/
[base (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
[base d662100] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 second.t
[base cd7036d] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 third.t
Switched to a new branch 'parallel'
[parallel afe5387] 1/2/3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 1/2/3.t
Switched to branch 'base'
ok 1 - set up repository to clone

expecting success of 9211.2 'creates content in enlistment root': 
	enlistment=cloned &&

	scalar clone "file://$(pwd)/to-clone" $enlistment &&
	ls -A $enlistment >enlistment-root &&
	test_line_count = 1 enlistment-root &&
	test_path_is_dir $enlistment/src &&
	test_path_is_dir $enlistment/src/.git &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/cloned/src/.git/
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
ok 2 - creates content in enlistment root

expecting success of 9211.3 'with spaces': 
	enlistment="cloned with space" &&

	scalar clone "file://$(pwd)/to-clone" "$enlistment" &&
	test_path_is_dir "$enlistment" &&
	test_path_is_dir "$enlistment/src" &&
	test_path_is_dir "$enlistment/src/.git" &&

	cleanup_clone "$enlistment"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/cloned with space/src/.git/
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
ok 3 - with spaces

expecting success of 9211.4 'partial clone if supported by server': 
	enlistment=partial-clone &&

	scalar clone "file://$(pwd)/to-clone" $enlistment &&

	(
		cd $enlistment/src &&

		# Two promisor packs: one for refs, the other for blobs
		ls .git/objects/pack/pack-*.promisor >promisorlist &&
		test_line_count = 2 promisorlist
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/partial-clone/src/.git/
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
ok 4 - partial clone if supported by server

expecting success of 9211.5 'fall back on full clone if partial unsupported': 
	enlistment=no-partial-support &&

	test_config -C to-clone uploadpack.allowfilter false &&
	test_config -C to-clone uploadpack.allowanysha1inwant false &&

	scalar clone "file://$(pwd)/to-clone" $enlistment 2>err &&
	grep "filtering not recognized by server, ignoring" err &&

	(
		cd $enlistment/src &&

		# Still get a refs promisor file, but none for blobs
		ls .git/objects/pack/pack-*.promisor >promisorlist &&
		test_line_count = 1 promisorlist
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/no-partial-support/src/.git/
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
warning: filtering not recognized by server, ignoring
ok 5 - fall back on full clone if partial unsupported

expecting success of 9211.6 'initializes sparse-checkout by default': 
	enlistment=sparse &&

	scalar clone "file://$(pwd)/to-clone" $enlistment &&
	(
		cd $enlistment/src &&
		test_cmp_config true core.sparseCheckout &&
		test_cmp_config true core.sparseCheckoutCone
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/sparse/src/.git/
warning: filtering not recognized by server, ignoring
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
ok 6 - initializes sparse-checkout by default

expecting success of 9211.7 '--full-clone does not create sparse-checkout': 
	enlistment=full-clone &&

	scalar clone --full-clone "file://$(pwd)/to-clone" $enlistment &&
	(
		cd $enlistment/src &&
		test_cmp_config "" --default "" core.sparseCheckout &&
		test_cmp_config "" --default "" core.sparseCheckoutCone
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/full-clone/src/.git/
warning: filtering not recognized by server, ignoring
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
ok 7 - --full-clone does not create sparse-checkout

expecting success of 9211.8 '--single-branch clones HEAD only': 
	enlistment=single-branch &&

	scalar clone --single-branch "file://$(pwd)/to-clone" $enlistment &&
	(
		cd $enlistment/src &&
		git for-each-ref refs/remotes/origin >out &&
		test_line_count = 1 out &&
		grep "refs/remotes/origin/base" out
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/single-branch/src/.git/
warning: filtering not recognized by server, ignoring
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
cd7036d3271be3d37ad73318fcc1838bd64f7f42 commit	refs/remotes/origin/base
ok 8 - --single-branch clones HEAD only

expecting success of 9211.9 '--no-single-branch clones all branches': 
	enlistment=no-single-branch &&

	scalar clone --no-single-branch "file://$(pwd)/to-clone" $enlistment &&
	(
		cd $enlistment/src &&
		git for-each-ref refs/remotes/origin >out &&
		test_line_count = 2 out &&
		grep "refs/remotes/origin/base" out &&
		grep "refs/remotes/origin/parallel" out
	) &&

	cleanup_clone $enlistment

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9211-scalar-clone/no-single-branch/src/.git/
warning: filtering not recognized by server, ignoring
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
warning: fetch normally indicates which branches had a forced update,
but that check has been disabled; to re-enable, use '--show-forced-updates'
flag or run 'git config fetch.showForcedUpdates true'
Switched to a new branch 'base'
branch 'base' set up to track 'origin/base'.
Your branch is up to date with 'origin/base'.
cd7036d3271be3d37ad73318fcc1838bd64f7f42 commit	refs/remotes/origin/base
afe53871bea8a7b2e02fc5f14f4076b8cbd8e537 commit	refs/remotes/origin/parallel
ok 9 - --no-single-branch clones all branches

# passed all 9 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9164-git-svn-dcommit-concurrent.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/.git/
expecting success of 9164.1 'setup svn repository': 
	svn_cmd checkout "$svnrepo" work.svn &&
	(
		cd work.svn &&
		echo >file && echo > auto_updated_file &&
		svn_cmd add file auto_updated_file &&
		svn_cmd commit -m "initial commit"
	) &&
	svn_cmd checkout "$svnrepo" work-auto-commits.svn

Checked out revision 0.
A         file
A         auto_updated_file
Adding         auto_updated_file
Adding         file
Transmitting file data ..done
Committing transaction...
Committed revision 1.
A    work-auto-commits.svn/auto_updated_file
A    work-auto-commits.svn/file
Checked out revision 1.
ok 1 - setup svn repository

expecting success of 9164.2 'check if post-commit hook creates a concurrent commit': 
	setup_hook post-commit 1 &&
	(
		cd work.svn &&
		cp auto_updated_file au_file_saved &&
		echo 1 >> file &&
		svn_cmd commit -m "changing file" &&
		svn_cmd up &&
		! test_cmp auto_updated_file au_file_saved
	)

Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 2.
Updating '.':
U    auto_updated_file
Updated to revision 3.
--- auto_updated_file	2022-12-28 08:20:43.231796895 +0000
+++ au_file_saved	2022-12-28 08:20:40.421694891 +0000
@@ -1,2 +1 @@
 
-6561
ok 2 - check if post-commit hook creates a concurrent commit

expecting success of 9164.3 'check if pre-commit hook fails': 
	setup_hook pre-commit 2 &&
	(
		cd work.svn &&
		echo 2 >> file &&
		svn_cmd commit -m "changing file once again" &&
		echo 3 >> file &&
		! svn_cmd commit -m "this commit should fail" &&
		svn_cmd revert file
	)

Sending        file
Transmitting file data .done
Committing transaction...
Committed revision 4.
Sending        file
Transmitting file data .done
Committing transaction...
svn: E165001: Commit failed (details follow):
svn: E165001: Commit blocked by pre-commit hook (exit code 1) with no output.
Reverted 'file'
ok 3 - check if pre-commit hook fails

expecting success of 9164.4 'dcommit error handling': 
	setup_hook pre-commit 2 &&
	next_N && git svn clone "$svnrepo" work$N.git &&
	(
		cd work$N.git &&
		echo 1 >> file && git commit -am "commit change $N.1" &&
		echo 2 >> file && git commit -am "commit change $N.2" &&
		echo 3 >> file && git commit -am "commit change $N.3" &&
		# should fail to dcommit 2nd and 3rd change
		# but still should leave the repository in reasonable state
		test_must_fail git svn dcommit &&
		git update-index --refresh &&
		git show HEAD~2   | grep -q git-svn-id &&
		! git show HEAD~1 | grep -q git-svn-id &&
		! git show HEAD   | grep -q git-svn-id
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/work1.git/.git/
	A	auto_updated_file
	A	file
r1 = d7c8799b07c012d9a8bccc7fbdc19fe7f44262da (refs/remotes/git-svn)
	M	file
r2 = 3a37b37a6198ad592856dba2ec3e07c8877d58dc (refs/remotes/git-svn)
	M	auto_updated_file
r3 = 9e7b4d7e39f82ca2fd2eb069c08ee0dbad8f8c5e (refs/remotes/git-svn)
	M	file
r4 = 5c02e6ff344298ecc97c0bcbb30910bd3742421f (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo r4
[master ac9d5fe] commit change 1.1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master e6ea7f1] commit change 1.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 686b293] commit change 1.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo ...
	M	file
Committed r5
	M	file
r5 = 300dfb29d39c6900b2d08f45f13155794c7119ca (refs/remotes/git-svn)
	M	file

ERROR from SVN:
A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with no output.
W: 686b293d8ede645a67b6c0a72a3b411807fb7d9d and refs/remotes/git-svn differ, using rebase:
:100644 100644 fb014dd41485c73acf40cd9548cd4cd812fee4ec e6ac0ef8373861d92d8eecf8d88e592606a70872 M	file
warning: skipped previously applied commit ac9d5fe
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Rebasing (2/2)

                                                                                
Successfully rebased and updated refs/heads/master.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.

ok 4 - dcommit error handling

expecting success of 9164.5 'dcommit concurrent change in non-changed file': 
	setup_hook post-commit 2 &&
	next_N && git svn clone "$svnrepo" work$N.git &&
	(
		cd work$N.git &&
		echo 1 >> file && git commit -am "commit change $N.1" &&
		echo 2 >> file && git commit -am "commit change $N.2" &&
		echo 3 >> file && git commit -am "commit change $N.3" &&
		# should rebase and leave the repository in reasonable state
		git svn dcommit &&
		git update-index --refresh &&
		check_contents &&
		git show HEAD~3 | grep -q git-svn-id &&
		git show HEAD~2 | grep -q git-svn-id &&
		git show HEAD~1 | grep -q auto-committing &&
		git show HEAD   | grep -q git-svn-id
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/work2.git/.git/
	A	auto_updated_file
	A	file
r1 = d7c8799b07c012d9a8bccc7fbdc19fe7f44262da (refs/remotes/git-svn)
	M	file
r2 = 3a37b37a6198ad592856dba2ec3e07c8877d58dc (refs/remotes/git-svn)
	M	auto_updated_file
r3 = 9e7b4d7e39f82ca2fd2eb069c08ee0dbad8f8c5e (refs/remotes/git-svn)
	M	file
r4 = 5c02e6ff344298ecc97c0bcbb30910bd3742421f (refs/remotes/git-svn)
	M	file
r5 = 300dfb29d39c6900b2d08f45f13155794c7119ca (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo r5
[master 81469a5] commit change 2.1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 90502de] commit change 2.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 5d1ccb4] commit change 2.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo ...
	M	file
Committed r6
	M	file
r6 = 3a8410373c7a3fc5124f897facf5dd263d540084 (refs/remotes/git-svn)
	M	file
Committed r7
	M	file
r7 = 1aa22effb8b8288332bf01a680b8e9c4eaea0fac (refs/remotes/git-svn)
	M	auto_updated_file
r8 = d15626f54a0dbb3b1efdcbdb38f831aa524157d4 (refs/remotes/git-svn)
W: 90502de3c8ee4bfa8255d53e1381d7c86a1326d4 and refs/remotes/git-svn differ, using rebase:
:100644 100644 831be450ef686a911f4a63e400f65aba73db9c26 6e0ad0c91c8b4abc89c9ef6969e813f8289e9815 M	auto_updated_file
warning: skipped previously applied commit 81469a5
warning: skipped previously applied commit 90502de
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
	M	file
Committed r9
	M	file
r9 = a16f83beb935fd42f3c15f96956a1b9937c0e94e (refs/remotes/git-svn)
No changes between 2dcd07f55470fde50688ff88da4e1ca9a013d3ef and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Updating '.':
U    file
U    auto_updated_file
Updated to revision 9.
ok 5 - dcommit concurrent change in non-changed file

expecting success of 9164.6 'dcommit concurrent non-conflicting change': 
	setup_hook post-commit 2 &&
	next_N && git svn clone "$svnrepo" work$N.git &&
	(
		cd work$N.git &&
		cat file >> auto_updated_file &&
			git commit -am "commit change $N.1" &&
		delete_first_line auto_updated_file &&
			git commit -am "commit change $N.2" &&
		delete_first_line auto_updated_file &&
			git commit -am "commit change $N.3" &&
		# should rebase and leave the repository in reasonable state
		git svn dcommit &&
		git update-index --refresh &&
		check_contents &&
		git show HEAD~3 | grep -q git-svn-id &&
		git show HEAD~2 | grep -q git-svn-id &&
		git show HEAD~1 | grep -q auto-committing &&
		git show HEAD   | grep -q git-svn-id
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/work3.git/.git/
	A	auto_updated_file
	A	file
r1 = d7c8799b07c012d9a8bccc7fbdc19fe7f44262da (refs/remotes/git-svn)
	M	file
r2 = 3a37b37a6198ad592856dba2ec3e07c8877d58dc (refs/remotes/git-svn)
	M	auto_updated_file
r3 = 9e7b4d7e39f82ca2fd2eb069c08ee0dbad8f8c5e (refs/remotes/git-svn)
	M	file
r4 = 5c02e6ff344298ecc97c0bcbb30910bd3742421f (refs/remotes/git-svn)
	M	file
r5 = 300dfb29d39c6900b2d08f45f13155794c7119ca (refs/remotes/git-svn)
	M	file
r6 = 3a8410373c7a3fc5124f897facf5dd263d540084 (refs/remotes/git-svn)
	M	file
r7 = 1aa22effb8b8288332bf01a680b8e9c4eaea0fac (refs/remotes/git-svn)
	M	auto_updated_file
r8 = d15626f54a0dbb3b1efdcbdb38f831aa524157d4 (refs/remotes/git-svn)
	M	file
r9 = a16f83beb935fd42f3c15f96956a1b9937c0e94e (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo r9
[master 6dd321f] commit change 3.1
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
[master 1089330] commit change 3.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
[master 609253e] commit change 3.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo ...
	M	auto_updated_file
Committed r10
	M	auto_updated_file
r10 = bdcaab871b4177b02efb42a4774e3f03aa5f9f22 (refs/remotes/git-svn)
	M	auto_updated_file
Committed r11
	M	auto_updated_file
r11 = 56fc470b4670f02e35066054a1467b1d371a75a3 (refs/remotes/git-svn)
	M	auto_updated_file
r12 = f829d7a2f34e6f3c4cf0b5583178452f72ffc9f8 (refs/remotes/git-svn)
W: 1089330868b7ed63625ab20fb880a5e445d5cbe1 and refs/remotes/git-svn differ, using rebase:
:100644 100644 df13174fb585baf092cf8b616b8999a1a78c57c5 eb75a1fdaed91680dd45ecf90a49391320a28d62 M	auto_updated_file
warning: skipped previously applied commit 6dd321f
warning: skipped previously applied commit 1089330
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/1)

                                                                                
Successfully rebased and updated refs/heads/master.
	M	auto_updated_file
Committed r13
	M	auto_updated_file
r13 = c040751e9f2174c12fdbe0ca27b8b8cf2f92e506 (refs/remotes/git-svn)
No changes between 49fc23e12af3299406a6d1c5396b080f854a9df4 and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Updating '.':
U    auto_updated_file
Updated to revision 13.
ok 6 - dcommit concurrent non-conflicting change

expecting success of 9164.7 'dcommit --no-rebase concurrent non-conflicting change': 
	setup_hook post-commit 2 &&
	next_N && git svn clone "$svnrepo" work$N.git &&
	(
		cd work$N.git &&
		cat file >> auto_updated_file &&
			git commit -am "commit change $N.1" &&
		delete_first_line auto_updated_file &&
			git commit -am "commit change $N.2" &&
		delete_first_line auto_updated_file &&
			git commit -am "commit change $N.3" &&
		# should fail as rebase is needed
		test_must_fail git svn dcommit --no-rebase &&
		# but should leave HEAD unchanged
		git update-index --refresh &&
		! git show HEAD~2 | grep -q git-svn-id &&
		! git show HEAD~1 | grep -q git-svn-id &&
		! git show HEAD   | grep -q git-svn-id
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/work4.git/.git/
	A	auto_updated_file
	A	file
r1 = d7c8799b07c012d9a8bccc7fbdc19fe7f44262da (refs/remotes/git-svn)
	M	file
r2 = 3a37b37a6198ad592856dba2ec3e07c8877d58dc (refs/remotes/git-svn)
	M	auto_updated_file
r3 = 9e7b4d7e39f82ca2fd2eb069c08ee0dbad8f8c5e (refs/remotes/git-svn)
	M	file
r4 = 5c02e6ff344298ecc97c0bcbb30910bd3742421f (refs/remotes/git-svn)
	M	file
r5 = 300dfb29d39c6900b2d08f45f13155794c7119ca (refs/remotes/git-svn)
	M	file
r6 = 3a8410373c7a3fc5124f897facf5dd263d540084 (refs/remotes/git-svn)
	M	file
r7 = 1aa22effb8b8288332bf01a680b8e9c4eaea0fac (refs/remotes/git-svn)
	M	auto_updated_file
r8 = d15626f54a0dbb3b1efdcbdb38f831aa524157d4 (refs/remotes/git-svn)
	M	file
r9 = a16f83beb935fd42f3c15f96956a1b9937c0e94e (refs/remotes/git-svn)
	M	auto_updated_file
r10 = bdcaab871b4177b02efb42a4774e3f03aa5f9f22 (refs/remotes/git-svn)
	M	auto_updated_file
r11 = 56fc470b4670f02e35066054a1467b1d371a75a3 (refs/remotes/git-svn)
	M	auto_updated_file
r12 = f829d7a2f34e6f3c4cf0b5583178452f72ffc9f8 (refs/remotes/git-svn)
	M	auto_updated_file
r13 = c040751e9f2174c12fdbe0ca27b8b8cf2f92e506 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo r13
[master 603bb91] commit change 4.1
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+)
[master ea4c0fa] commit change 4.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
[master e9581c6] commit change 4.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo ...
Attempting to commit more than one change while --no-rebase is enabled.
If these changes depend on each other, re-running without --no-rebase may be required. at /<<PKGBUILDDIR>>/git-svn line 895.
	M	auto_updated_file
Committed r14
	M	auto_updated_file
r14 = 40dd07a6938652ae2289c92b150aed7e09b5e009 (refs/remotes/git-svn)
	M	auto_updated_file
Committed r15
	M	auto_updated_file
r15 = 8500f7016ef4dd14b47f9a5fa2e3d7e4ff866e40 (refs/remotes/git-svn)
	M	auto_updated_file
r16 = 999664a3478b97e36aa5d42d570980c39587de26 (refs/remotes/git-svn)

ERROR from SVN:
Transaction is out of date: File '/auto_updated_file' is out of date
ERROR: Not all changes have been committed into SVN.
Please see the above messages for details.

ok 7 - dcommit --no-rebase concurrent non-conflicting change

expecting success of 9164.8 'dcommit fails on concurrent conflicting change': 
	setup_hook post-commit 1 &&
	next_N && git svn clone "$svnrepo" work$N.git &&
	(
		cd work$N.git &&
		echo a >> file &&
			git commit -am "commit change $N.1" &&
		echo b >> auto_updated_file &&
			git commit -am "commit change $N.2" &&
		echo c >> auto_updated_file &&
			git commit -am "commit change $N.3" &&
		test_must_fail git svn dcommit && # rebase should fail
		test_must_fail git update-index --refresh
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9164-git-svn-dcommit-concurrent/work5.git/.git/
	A	auto_updated_file
	A	file
r1 = d7c8799b07c012d9a8bccc7fbdc19fe7f44262da (refs/remotes/git-svn)
	M	file
r2 = 3a37b37a6198ad592856dba2ec3e07c8877d58dc (refs/remotes/git-svn)
	M	auto_updated_file
r3 = 9e7b4d7e39f82ca2fd2eb069c08ee0dbad8f8c5e (refs/remotes/git-svn)
	M	file
r4 = 5c02e6ff344298ecc97c0bcbb30910bd3742421f (refs/remotes/git-svn)
	M	file
r5 = 300dfb29d39c6900b2d08f45f13155794c7119ca (refs/remotes/git-svn)
	M	file
r6 = 3a8410373c7a3fc5124f897facf5dd263d540084 (refs/remotes/git-svn)
	M	file
r7 = 1aa22effb8b8288332bf01a680b8e9c4eaea0fac (refs/remotes/git-svn)
	M	auto_updated_file
r8 = d15626f54a0dbb3b1efdcbdb38f831aa524157d4 (refs/remotes/git-svn)
	M	file
r9 = a16f83beb935fd42f3c15f96956a1b9937c0e94e (refs/remotes/git-svn)
	M	auto_updated_file
r10 = bdcaab871b4177b02efb42a4774e3f03aa5f9f22 (refs/remotes/git-svn)
	M	auto_updated_file
r11 = 56fc470b4670f02e35066054a1467b1d371a75a3 (refs/remotes/git-svn)
	M	auto_updated_file
r12 = f829d7a2f34e6f3c4cf0b5583178452f72ffc9f8 (refs/remotes/git-svn)
	M	auto_updated_file
r13 = c040751e9f2174c12fdbe0ca27b8b8cf2f92e506 (refs/remotes/git-svn)
	M	auto_updated_file
r14 = 40dd07a6938652ae2289c92b150aed7e09b5e009 (refs/remotes/git-svn)
	M	auto_updated_file
r15 = 8500f7016ef4dd14b47f9a5fa2e3d7e4ff866e40 (refs/remotes/git-svn)
	M	auto_updated_file
r16 = 999664a3478b97e36aa5d42d570980c39587de26 (refs/remotes/git-svn)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo r16
[master f027858] commit change 5.1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 19960d2] commit change 5.2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 26c9754] commit change 5.3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Committing to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9164-git-svn-dcommit-concurrent/svnrepo ...
	M	file
Committed r17
	M	file
r17 = 28489a88ed8eb5073cc06206cbdc20bdaf22cc29 (refs/remotes/git-svn)
	M	auto_updated_file
r18 = db0aa6262119c0b4210b8e0e8e4869fdac15283d (refs/remotes/git-svn)
W: f027858782ea125698487bba1f8e88a4eb04219b and refs/remotes/git-svn differ, using rebase:
:100644 100644 dd696e4cead460ffdd7dbebe214199f83af97956 0fc68d446d88c01961e00f09df06e6aefaa18307 M	auto_updated_file
warning: skipped previously applied commit f027858
hint: use --reapply-cherry-picks to include skipped commits
hint: Disable this message with "git config advice.skippedCherryPicks false"
Rebasing (1/2)
Auto-merging auto_updated_file
CONFLICT (content): Merge conflict in auto_updated_file
error: could not apply 19960d2... commit change 5.2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 19960d2... commit change 5.2
rebase refs/remotes/git-svn: command returned error: 1

auto_updated_file: needs merge
ok 8 - dcommit fails on concurrent conflicting change

# passed all 8 test(s)
1..8
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9200-git-cvsexportcommit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
expecting success of 9200.1 'New file': mkdir A B C D E F &&
     echo hello1 >A/newfile1.txt &&
     echo hello2 >B/newfile2.txt &&
     cp "$TEST_DIRECTORY"/test-binary-1.png C/newfile3.png &&
     cp "$TEST_DIRECTORY"/test-binary-1.png D/newfile4.png &&
     git add A/newfile1.txt &&
     git add B/newfile2.txt &&
     git add C/newfile3.png &&
     git add D/newfile4.png &&
     git commit -a -m "Test: New file" &&
     id=$(git rev-list --max-count=1 HEAD) &&
     (cd "$CVSWORK" &&
     git cvsexportcommit -c $id &&
     check_entries A "newfile1.txt/1.1/" &&
     check_entries B "newfile2.txt/1.1/" &&
     check_entries C "newfile3.png/1.1/-kb" &&
     check_entries D "newfile4.png/1.1/-kb" &&
     test_cmp A/newfile1.txt ../A/newfile1.txt &&
     test_cmp B/newfile2.txt ../B/newfile2.txt &&
     test_cmp C/newfile3.png ../C/newfile3.png &&
     test_cmp D/newfile4.png ../D/newfile4.png
     )
[master 288d750] Test: New file
 Author: A U Thor <author@example.com>
 4 files changed, 2 insertions(+)
 create mode 100644 A/newfile1.txt
 create mode 100644 B/newfile2.txt
 create mode 100644 C/newfile3.png
 create mode 100644 D/newfile4.png
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/D put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/C put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/B put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/A put under version control
cvs add: scheduling file `A/newfile1.txt' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `B/newfile2.txt' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `C/newfile3.png' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `D/newfile4.png' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Test: New file
Autocommit
  cvs commit -F .msg 'A/newfile1.txt' 'B/newfile2.txt' 'C/newfile3.png' 'D/newfile4.png'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/A/newfile1.txt,v  <--  A/newfile1.txt
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/B/newfile2.txt,v  <--  B/newfile2.txt
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/C/newfile3.png,v  <--  C/newfile3.png
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/D/newfile4.png,v  <--  D/newfile4.png
initial revision: 1.1
Committed successfully to CVS
ok 1 - New file

expecting success of 9200.2 'Remove two files, add two and update two': echo Hello1 >>A/newfile1.txt &&
     rm -f B/newfile2.txt &&
     rm -f C/newfile3.png &&
     echo Hello5  >E/newfile5.txt &&
     cp "$TEST_DIRECTORY"/test-binary-2.png D/newfile4.png &&
     cp "$TEST_DIRECTORY"/test-binary-1.png F/newfile6.png &&
     git add E/newfile5.txt &&
     git add F/newfile6.png &&
     git commit -a -m "Test: Remove, add and update" &&
     id=$(git rev-list --max-count=1 HEAD) &&
     (cd "$CVSWORK" &&
     git cvsexportcommit -c $id &&
     check_entries A "newfile1.txt/1.2/" &&
     check_entries B "" &&
     check_entries C "" &&
     check_entries D "newfile4.png/1.2/-kb" &&
     check_entries E "newfile5.txt/1.1/" &&
     check_entries F "newfile6.png/1.1/-kb" &&
     test_cmp A/newfile1.txt ../A/newfile1.txt &&
     test_cmp D/newfile4.png ../D/newfile4.png &&
     test_cmp E/newfile5.txt ../E/newfile5.txt &&
     test_cmp F/newfile6.png ../F/newfile6.png
     )
[master 69b0239] Test: Remove, add and update
 Author: A U Thor <author@example.com>
 5 files changed, 2 insertions(+), 1 deletion(-)
 delete mode 100644 B/newfile2.txt
 create mode 100644 E/newfile5.txt
 rename C/newfile3.png => F/newfile6.png (100%)
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/F put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/E put under version control
cvs add: scheduling file `E/newfile5.txt' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `F/newfile6.png' for addition
cvs add: use `cvs commit' to add this file permanently
cvs remove: scheduling `B/newfile2.txt' for removal
cvs remove: use `cvs commit' to remove this file permanently
cvs remove: scheduling `C/newfile3.png' for removal
cvs remove: use `cvs commit' to remove this file permanently
Commit to CVS
Patch title (first comment line): Test: Remove, add and update
Autocommit
  cvs commit -F .msg 'A/newfile1.txt' 'B/newfile2.txt' 'C/newfile3.png' 'D/newfile4.png' 'E/newfile5.txt' 'F/newfile6.png'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/A/newfile1.txt,v  <--  A/newfile1.txt
new revision: 1.2; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/B/newfile2.txt,v  <--  B/newfile2.txt
new revision: delete; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/C/newfile3.png,v  <--  C/newfile3.png
new revision: delete; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/D/newfile4.png,v  <--  D/newfile4.png
new revision: 1.2; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/E/newfile5.txt,v  <--  E/newfile5.txt
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/F/newfile6.png,v  <--  F/newfile6.png
initial revision: 1.1
Committed successfully to CVS
ok 2 - Remove two files, add two and update two

expecting success of 9200.3 'Fail to change binary more than one generation old': cat F/newfile6.png >>D/newfile4.png &&
     git commit -a -m "generatiion 1" &&
     cat F/newfile6.png >>D/newfile4.png &&
     git commit -a -m "generation 2" &&
     id=$(git rev-list --max-count=1 HEAD) &&
     (cd "$CVSWORK" &&
     test_must_fail git cvsexportcommit -c $id
     )
[master 70e0115] generatiion 1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
[master d73a469] generation 2
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
Checking if patch will apply
Applying
error: the patch applies to 'D/newfile4.png' (ac22ccbd3ee9f03a3b38249ac8efdbe96b5da2cd), which does not match the current contents.
error: D/newfile4.png: patch does not apply
cannot patch at /<<PKGBUILDDIR>>/git-cvsexportcommit line 338.
ok 3 - Fail to change binary more than one generation old

expecting success of 9200.4 'Remove only binary files': git reset --hard HEAD^^ &&
     rm -f D/newfile4.png &&
     git commit -a -m "test: remove only a binary file" &&
     id=$(git rev-list --max-count=1 HEAD) &&
     (cd "$CVSWORK" &&
     git cvsexportcommit -c $id &&
     check_entries A "newfile1.txt/1.2/" &&
     check_entries B "" &&
     check_entries C "" &&
     check_entries D "" &&
     check_entries E "newfile5.txt/1.1/" &&
     check_entries F "newfile6.png/1.1/-kb" &&
     test_cmp A/newfile1.txt ../A/newfile1.txt &&
     test_cmp E/newfile5.txt ../E/newfile5.txt &&
     test_cmp F/newfile6.png ../F/newfile6.png
     )
HEAD is now at 69b0239 Test: Remove, add and update
[master 2a45f53] test: remove only a binary file
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 D/newfile4.png
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
cvs remove: scheduling `D/newfile4.png' for removal
cvs remove: use `cvs commit' to remove this file permanently
Commit to CVS
Patch title (first comment line): test: remove only a binary file
Autocommit
  cvs commit -F .msg 'D/newfile4.png'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/D/newfile4.png,v  <--  D/newfile4.png
new revision: delete; previous revision: 1.2
Committed successfully to CVS
ok 4 - Remove only binary files

expecting success of 9200.5 'Remove only a text file': rm -f A/newfile1.txt &&
     git commit -a -m "test: remove only a binary file" &&
     id=$(git rev-list --max-count=1 HEAD) &&
     (cd "$CVSWORK" &&
     git cvsexportcommit -c $id &&
     check_entries A "" &&
     check_entries B "" &&
     check_entries C "" &&
     check_entries D "" &&
     check_entries E "newfile5.txt/1.1/" &&
     check_entries F "newfile6.png/1.1/-kb" &&
     test_cmp E/newfile5.txt ../E/newfile5.txt &&
     test_cmp F/newfile6.png ../F/newfile6.png
     )
[master fa834fd] test: remove only a binary file
 Author: A U Thor <author@example.com>
 1 file changed, 2 deletions(-)
 delete mode 100644 A/newfile1.txt
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
cvs remove: scheduling `A/newfile1.txt' for removal
cvs remove: use `cvs commit' to remove this file permanently
Commit to CVS
Patch title (first comment line): test: remove only a binary file
Autocommit
  cvs commit -F .msg 'A/newfile1.txt'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/A/newfile1.txt,v  <--  A/newfile1.txt
new revision: delete; previous revision: 1.2
Committed successfully to CVS
ok 5 - Remove only a text file

expecting success of 9200.6 'New file with spaces in file name': mkdir "G g" &&
      echo ok then >"G g/with spaces.txt" &&
      git add "G g/with spaces.txt" && \
      cp "$TEST_DIRECTORY"/test-binary-1.png "G g/with spaces.png" && \
      git add "G g/with spaces.png" &&
      git commit -a -m "With spaces" &&
      id=$(git rev-list --max-count=1 HEAD) &&
      (cd "$CVSWORK" &&
      git cvsexportcommit -c $id &&
      check_entries "G g" "with spaces.png/1.1/-kb|with spaces.txt/1.1/"
      )
[master 7dad360] With spaces
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 G g/with spaces.png
 create mode 100644 G g/with spaces.txt
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G g put under version control
cvs add: scheduling file `G g/with spaces.png' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `G g/with spaces.txt' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): With spaces
Autocommit
  cvs commit -F .msg G g/with spaces.png G g/with spaces.txt
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G g/with spaces.png,v  <--  G g/with spaces.png
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G g/with spaces.txt,v  <--  G g/with spaces.txt
initial revision: 1.1
Committed successfully to CVS
ok 6 - New file with spaces in file name

expecting success of 9200.7 'Update file with spaces in file name': echo Ok then >>"G g/with spaces.txt" &&
      cat "$TEST_DIRECTORY"/test-binary-1.png >>"G g/with spaces.png" && \
      git add "G g/with spaces.png" &&
      git commit -a -m "Update with spaces" &&
      id=$(git rev-list --max-count=1 HEAD) &&
      (cd "$CVSWORK" &&
      git cvsexportcommit -c $id &&
      check_entries "G g" "with spaces.png/1.2/-kb|with spaces.txt/1.2/"
      )
[master 200512b] Update with spaces
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Commit to CVS
Patch title (first comment line): Update with spaces
Autocommit
  cvs commit -F .msg G g/with spaces.png G g/with spaces.txt
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G g/with spaces.png,v  <--  G g/with spaces.png
new revision: 1.2; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G g/with spaces.txt,v  <--  G g/with spaces.txt
new revision: 1.2; previous revision: 1.1
Committed successfully to CVS
ok 7 - Update file with spaces in file name

expecting success of 9200.8 'File with non-ascii file name': mkdir -p Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö &&
      echo Foo >Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt &&
      git add Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt &&
      cp "$TEST_DIRECTORY"/test-binary-1.png Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png &&
      git add Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png &&
      git commit -a -m "Går det så går det" && \
      id=$(git rev-list --max-count=1 HEAD) &&
      (cd "$CVSWORK" &&
      git cvsexportcommit -v -c $id &&
      check_entries \
      "Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö" \
      "gårdetsågårdet.png/1.1/-kb|gårdetsågårdet.txt/1.1/"
      )
[master 2dba919] Går det så går det
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 create mode 100644 "\303\205/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\303\245/\303\244/\303\266/g\303\245rdets\303\245g\303\245rdet.png"
 create mode 100644 "\303\205/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\303\245/\303\244/\303\266/g\303\245rdets\303\245g\303\245rdet.txt"
Applying to CVS commit 2dba9190cda577aa84017fec4349519cd1aadafb from parent 200512bccb19b444ac4f1e098c7d7d3578864bb4
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä put under version control
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö put under version control
cvs add: scheduling file `Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Går det så går det
Autocommit
  cvs commit -F .msg 'Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png' 'Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png,v  <--  Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt,v  <--  Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt
initial revision: 1.1
Committed successfully to CVS
ok 8 - File with non-ascii file name

expecting success of 9200.9 'Mismatching patch should fail': date >>"E/newfile5.txt" &&
      git add "E/newfile5.txt" &&
      git commit -a -m "Update one" &&
      date >>"E/newfile5.txt" &&
      git add "E/newfile5.txt" &&
      git commit -a -m "Update two" &&
      id=$(git rev-list --max-count=1 HEAD) &&
      (cd "$CVSWORK" &&
      test_must_fail git cvsexportcommit -c $id
      )
[master 515e2f6] Update one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[master 5f9a3c0] Update two
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Checking if patch will apply
Applying
error: patch failed: E/newfile5.txt:1
error: E/newfile5.txt: patch does not apply
cannot patch at /<<PKGBUILDDIR>>/git-cvsexportcommit line 338.
ok 9 - Mismatching patch should fail

checking prerequisite: FILEMODE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FILEMODE" &&
	test "$(git config --bool core.filemode)" = true

)
prerequisite FILEMODE ok
expecting success of 9200.10 'Retain execute bit': mkdir G &&
      echo executeon >G/on &&
      chmod +x G/on &&
      echo executeoff >G/off &&
      git add G/on &&
      git add G/off &&
      git commit -a -m "Execute test" &&
      (cd "$CVSWORK" &&
      git cvsexportcommit -c HEAD &&
      test -x G/on &&
      ! test -x G/off
      )
[master 1efc768] Execute test
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 G/off
 create mode 100755 G/on
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G put under version control
cvs add: scheduling file `G/off' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `G/on' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Execute test
Autocommit
  cvs commit -F .msg 'G/off' 'G/on'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G/off,v  <--  G/off
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/G/on,v  <--  G/on
initial revision: 1.1
Committed successfully to CVS
ok 10 - Retain execute bit

expecting success of 9200.11 '-w option should work with relative GIT_DIR': 
      mkdir W &&
      echo foobar >W/file1.txt &&
      echo bazzle >W/file2.txt &&
      git add W/file1.txt &&
      git add W/file2.txt &&
      git commit -m "More updates" &&
      id=$(git rev-list --max-count=1 HEAD) &&
      (cd "$GIT_DIR" &&
      GIT_DIR=. git cvsexportcommit -w "$CVSWORK" -c $id &&
      check_entries "$CVSWORK/W" "file1.txt/1.1/|file2.txt/1.1/" &&
      test_cmp "$CVSWORK/W/file1.txt" ../W/file1.txt &&
      test_cmp "$CVSWORK/W/file2.txt" ../W/file2.txt
      )

[master fe173b7] More updates
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 W/file1.txt
 create mode 100644 W/file2.txt
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Directory /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/W put under version control
cvs add: scheduling file `W/file1.txt' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `W/file2.txt' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): More updates
Autocommit
  cvs commit -F .msg 'W/file1.txt' 'W/file2.txt'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/W/file1.txt,v  <--  W/file1.txt
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/W/file2.txt,v  <--  W/file2.txt
initial revision: 1.1
Committed successfully to CVS
ok 11 - -w option should work with relative GIT_DIR

expecting success of 9200.12 'check files before directories': 

	echo Notes > release-notes &&
	git add release-notes &&
	git commit -m "Add release notes" release-notes &&
	id=$(git rev-parse HEAD) &&
	git cvsexportcommit -w "$CVSWORK" -c $id &&

	echo new > DS &&
	echo new > E/DS &&
	echo modified > release-notes &&
	git add DS E/DS release-notes &&
	git commit -m "Add two files with the same basename" &&
	id=$(git rev-parse HEAD) &&
	git cvsexportcommit -w "$CVSWORK" -c $id &&
	check_entries "$CVSWORK/E" "DS/1.1/|newfile5.txt/1.1/" &&
	check_entries "$CVSWORK" "DS/1.1/|release-notes/1.2/" &&
	test_cmp "$CVSWORK/DS" DS &&
	test_cmp "$CVSWORK/E/DS" E/DS &&
	test_cmp "$CVSWORK/release-notes" release-notes


[master bad940d] Add release notes
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 release-notes
Checking if patch will apply
cvs status: nothing known about `release-notes'
Applying
Patch applied successfully. Adding new files and directories to CVS
cvs add: scheduling file `release-notes' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Add release notes
Autocommit
  cvs commit -F .msg 'release-notes'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/release-notes,v  <--  release-notes
initial revision: 1.1
Committed successfully to CVS
[master 690ae72] Add two files with the same basename
 Author: A U Thor <author@example.com>
 3 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 DS
 create mode 100644 E/DS
Checking if patch will apply
cvs status: nothing known about `DS'
cvs status: nothing known about `E/DS'
Applying
Patch applied successfully. Adding new files and directories to CVS
cvs add: scheduling file `DS' for addition
cvs add: use `cvs commit' to add this file permanently
cvs add: scheduling file `E/DS' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Add two files with the same basename
Autocommit
  cvs commit -F .msg 'DS' 'E/DS' 'release-notes'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/DS,v  <--  DS
initial revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/release-notes,v  <--  release-notes
new revision: 1.2; previous revision: 1.1
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/E/DS,v  <--  E/DS
initial revision: 1.1
Committed successfully to CVS
ok 12 - check files before directories

expecting success of 9200.13 're-commit a removed filename which remains in CVS attic': 

    (cd "$CVSWORK" &&
     echo >attic_gremlin &&
     cvs -Q add attic_gremlin &&
     cvs -Q ci -m "added attic_gremlin" &&
     rm attic_gremlin &&
     cvs -Q rm attic_gremlin &&
     cvs -Q ci -m "removed attic_gremlin") &&

    echo > attic_gremlin &&
    git add attic_gremlin &&
    git commit -m "Added attic_gremlin" &&
	git cvsexportcommit -w "$CVSWORK" -c HEAD &&
    (cd "$CVSWORK" && cvs -Q update -d) &&
    test -f "$CVSWORK/attic_gremlin"

[master 6b9a457] Added attic_gremlin
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 attic_gremlin
Checking if patch will apply
Applying
<stdin>:7: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
Patch applied successfully. Adding new files and directories to CVS
cvs add: Re-adding file `attic_gremlin' after dead revision 1.2.
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Added attic_gremlin
Autocommit
  cvs commit -F .msg 'attic_gremlin'
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/attic_gremlin,v  <--  attic_gremlin
new revision: 1.3; previous revision: 1.2
Committed successfully to CVS
ok 13 - re-commit a removed filename which remains in CVS attic

expecting success of 9200.14 'commit a file with leading spaces in the name': 

	echo space > " space" &&
	git add " space" &&
	git commit -m "Add a file with a leading space" &&
	id=$(git rev-parse HEAD) &&
	git cvsexportcommit -w "$CVSWORK" -c $id &&
	check_entries "$CVSWORK" " space/1.1/|DS/1.1/|attic_gremlin/1.3/|release-notes/1.2/" &&
	test_cmp "$CVSWORK/ space" " space"


[master 8027462] Add a file with a leading space
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644  space
Checking if patch will apply
cvs status: nothing known about ` space'
Applying
Patch applied successfully. Adding new files and directories to CVS
cvs add: scheduling file ` space' for addition
cvs add: use `cvs commit' to add this file permanently
Commit to CVS
Patch title (first comment line): Add a file with a leading space
Autocommit
  cvs commit -F .msg  space
/<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/tmpcvsroot/ space,v  <--   space
initial revision: 1.1
Committed successfully to CVS
ok 14 - commit a file with leading spaces in the name

expecting success of 9200.15 'use the same checkout for Git and CVS': 

	(mkdir shared &&
	 cd shared &&
	 sane_unset GIT_DIR &&
	 cvs co . &&
	 git init &&
	 git add " space" &&
	 git commit -m "fake initial commit" &&
	 echo Hello >> " space" &&
	 git commit -m "Another change" " space" &&
	 git cvsexportcommit -W -p -u -c HEAD &&
	 grep Hello " space" &&
	 git diff-files)


cvs checkout: Updating .
U  space
U DS
U attic_gremlin
U release-notes
cvs checkout: Updating A
cvs checkout: Updating B
cvs checkout: Updating C
cvs checkout: Updating CVSROOT
U CVSROOT/checkoutlist
U CVSROOT/commitinfo
U CVSROOT/config
U CVSROOT/cvswrappers
U CVSROOT/loginfo
U CVSROOT/modules
U CVSROOT/notify
U CVSROOT/postadmin
U CVSROOT/postproxy
U CVSROOT/posttag
U CVSROOT/postwatch
U CVSROOT/preproxy
U CVSROOT/rcsinfo
U CVSROOT/taginfo
U CVSROOT/verifymsg
cvs checkout: Updating D
cvs checkout: Updating E
U E/DS
U E/newfile5.txt
cvs checkout: Updating F
U F/newfile6.png
cvs checkout: Updating G
U G/off
U G/on
cvs checkout: Updating G g
U G g/with spaces.png
U G g/with spaces.txt
cvs checkout: Updating W
U W/file1.txt
U W/file2.txt
cvs checkout: Updating Å
cvs checkout: Updating Å/goo
cvs checkout: Updating Å/goo/a
cvs checkout: Updating Å/goo/a/b
cvs checkout: Updating Å/goo/a/b/c
cvs checkout: Updating Å/goo/a/b/c/d
cvs checkout: Updating Å/goo/a/b/c/d/e
cvs checkout: Updating Å/goo/a/b/c/d/e/f
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä
cvs checkout: Updating Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö
U Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png
U Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9200-git-cvsexportcommit/shared/.git/
[master (root-commit) 93a1e74] fake initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644  space
[master 6935f1b] Another change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
Checking if patch will apply
Applying
Patch applied successfully. Adding new files and directories to CVS
Commit to CVS
Patch title (first comment line): Another change
Autocommit
  cvs commit -F .msg  space
Committed successfully to CVS
HEAD is now at 6935f1b Another change
Hello
ok 15 - use the same checkout for Git and CVS

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9302-fast-import-unpack-limit.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9302-fast-import-unpack-limit/.git/
expecting success of 9302.1 'create loose objects on import': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/main
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	initial
	COMMIT

	done
	INPUT_END

	git -c fastimport.unpackLimit=2 fast-import --done <input &&
	git fsck --no-progress &&
	test $(find .git/objects/?? -type f | wc -l) -eq 2 &&
	test $(find .git/objects/pack -type f | wc -l) -eq 0

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

notice: HEAD points to an unborn branch (master)
ok 1 - create loose objects on import

expecting success of 9302.2 'bigger packs are preserved': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/main
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	incremental should create a pack
	COMMIT
	from refs/heads/main^0

	commit refs/heads/branch
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	branch
	COMMIT

	done
	INPUT_END

	git -c fastimport.unpackLimit=2 fast-import --done <input &&
	git fsck --no-progress &&
	test $(find .git/objects/?? -type f | wc -l) -eq 2 &&
	test $(find .git/objects/pack -type f | wc -l) -eq 2

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           2 (         2 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        329 /        329
---------------------------------------------------------------------

notice: HEAD points to an unborn branch (master)
ok 2 - bigger packs are preserved

expecting success of 9302.3 'lookups after checkpoint works': 
	hello_id=$(echo hello | git hash-object --stdin -t blob) &&
	id="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE" &&
	before=$(git rev-parse refs/heads/main^0) &&
	(
		cat <<-INPUT_END &&
		blob
		mark :1
		data 6
		hello

		commit refs/heads/main
		mark :2
		committer $id
		data <<COMMIT
		checkpoint after this
		COMMIT
		from refs/heads/main^0
		M 100644 :1 hello

		# pre-checkpoint
		cat-blob :1
		cat-blob $hello_id
		checkpoint
		# post-checkpoint
		cat-blob :1
		cat-blob $hello_id
		INPUT_END

		n=0 &&
		from=$before &&
		while test x"$from" = x"$before"
		do
			if test $n -gt 30
			then
				echo >&2 "checkpoint did not update branch" &&
				exit 1
			else
				n=$(($n + 1))
			fi &&
			sleep 1 &&
			from=$(git rev-parse refs/heads/main^0)
		done &&
		cat <<-INPUT_END &&
		commit refs/heads/main
		committer $id
		data <<COMMIT
		make sure from "unpacked sha1 reference" works, too
		COMMIT
		from $from
		INPUT_END
		echo done
	) | git -c fastimport.unpackLimit=100 fast-import --done &&
	test $(find .git/objects/?? -type f | wc -l) -eq 6 &&
	test $(find .git/objects/pack -type f | wc -l) -eq 2

ce013625030ba8dba906f756967f9e9ca394464a blob 6
hello

ce013625030ba8dba906f756967f9e9ca394464a blob 6
hello

ce013625030ba8dba906f756967f9e9ca394464a blob 6
hello

ce013625030ba8dba906f756967f9e9ca394464a blob 6
hello

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         2 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          5
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          2
pack_report: pack_mapped              =        329 /        581
---------------------------------------------------------------------

ok 3 - lookups after checkpoint works

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9300-fast-import.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/.git/
expecting success of 9300.1 'empty stream succeeds': 
	git config fastimport.unpackLimit 0 &&
	git fast-import </dev/null

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 1 - empty stream succeeds

expecting success of 9300.2 'truncated stream complains': 
	echo "tag foo" | test_must_fail git fast-import

fatal: Expected from command, got 
fast-import: dumping crash report to .git/fast_import_crash_14355
ok 2 - truncated stream complains

expecting success of 9300.3 'A: create pack from stdin': 
	test_tick &&
	cat >input <<-INPUT_END &&
	blob
	mark :2
	data <<EOF
	$file2_data
	EOF

	blob
	mark :3
	data <<END
	$file3_data
	END

	blob
	mark :4
	data $file4_len
	$file4_data
	commit refs/heads/main
	mark :5
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	initial
	COMMIT

	M 644 :2 file2
	M 644 :3 file3
	M 755 :4 file4

	tag series-A
	from :5
	data <<EOF
	An annotated tag without a tagger
	EOF

	tag series-A-blob
	from :3
	data <<EOF
	An annotated tag that annotates a blob.
	EOF

	tag to-be-deleted
	from :3
	data <<EOF
	Another annotated tag that annotates a blob.
	EOF

	reset refs/tags/to-be-deleted
	from $ZERO_OID

	tag nested
	mark :6
	from :4
	data <<EOF
	Tag of our lovely commit
	EOF

	reset refs/tags/nested
	from $ZERO_OID

	tag nested
	mark :7
	from :6
	data <<EOF
	Tag of tag of our lovely commit
	EOF

	alias
	mark :8
	to :5

	INPUT_END
	git fast-import --export-marks=marks.out <input &&
	git whatchanged main

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            5 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           3 (         1 loads     )
      marks:           1024 (         7 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          9
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        841 /        841
---------------------------------------------------------------------

commit 5ba2d0485e3e071f4ccbfdb22c474b305ebd159c
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial

:000000 100644 0000000 7123f7f A	file2
:000000 100644 0000000 0d92e9f A	file3
:000000 100755 0000000 85df507 A	file4
ok 3 - A: create pack from stdin

expecting success of 9300.4 'A: verify pack': 
	verify_packs

ok 4 - A: verify pack

expecting success of 9300.5 'A: verify commit': 
	cat >expect <<-EOF &&
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	initial
	EOF
	git cat-file commit main | sed 1d >actual &&
	test_cmp expect actual

ok 5 - A: verify commit

expecting success of 9300.6 'A: verify tree': 
	cat >expect <<-EOF &&
	100644 blob file2
	100644 blob file3
	100755 blob file4
	EOF
	git cat-file -p main^{tree} | sed "s/ [0-9a-f]*	/ /" >actual &&
	test_cmp expect actual

ok 6 - A: verify tree

expecting success of 9300.7 'A: verify file2': 
	echo "$file2_data" >expect &&
	git cat-file blob main:file2 >actual &&
	test_cmp expect actual

ok 7 - A: verify file2

expecting success of 9300.8 'A: verify file3': 
	echo "$file3_data" >expect &&
	git cat-file blob main:file3 >actual &&
	test_cmp expect actual

ok 8 - A: verify file3

expecting success of 9300.9 'A: verify file4': 
	printf "$file4_data" >expect &&
	git cat-file blob main:file4 >actual &&
	test_cmp expect actual

ok 9 - A: verify file4

expecting success of 9300.10 'A: verify tag/series-A': 
	cat >expect <<-EOF &&
	object $(git rev-parse refs/heads/main)
	type commit
	tag series-A

	An annotated tag without a tagger
	EOF
	git cat-file tag tags/series-A >actual &&
	test_cmp expect actual

ok 10 - A: verify tag/series-A

expecting success of 9300.11 'A: verify tag/series-A-blob': 
	cat >expect <<-EOF &&
	object $(git rev-parse refs/heads/main:file3)
	type blob
	tag series-A-blob

	An annotated tag that annotates a blob.
	EOF
	git cat-file tag tags/series-A-blob >actual &&
	test_cmp expect actual

ok 11 - A: verify tag/series-A-blob

expecting success of 9300.12 'A: verify tag deletion is successful': 
	test_must_fail git rev-parse --verify refs/tags/to-be-deleted

fatal: Needed a single revision
ok 12 - A: verify tag deletion is successful

expecting success of 9300.13 'A: verify marks output': 
	cat >expect <<-EOF &&
	:2 $(git rev-parse --verify main:file2)
	:3 $(git rev-parse --verify main:file3)
	:4 $(git rev-parse --verify main:file4)
	:5 $(git rev-parse --verify main^0)
	:6 $(git cat-file tag nested | grep object | cut -d" " -f 2)
	:7 $(git rev-parse --verify nested)
	:8 $(git rev-parse --verify main^0)
	EOF
	test_cmp expect marks.out

ok 13 - A: verify marks output

expecting success of 9300.14 'A: verify marks import': 
	git fast-import \
		--import-marks=marks.out \
		--export-marks=marks.new \
		</dev/null &&
	test_cmp expect marks.new

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        841 /        841
---------------------------------------------------------------------

ok 14 - A: verify marks import

expecting success of 9300.15 'A: tag blob by sha1': 
	test_tick &&
	new_blob=$(echo testing | git hash-object --stdin) &&
	cat >input <<-INPUT_END &&
	tag series-A-blob-2
	from $(git rev-parse refs/heads/main:file3)
	data <<EOF
	Tag blob by sha1.
	EOF

	blob
	mark :6
	data <<EOF
	testing
	EOF

	commit refs/heads/new_blob
	committer  <> 0 +0000
	data 0
	M 644 :6 new_blob
	#pretend we got sha1 from fast-import
	ls "new_blob"

	tag series-A-blob-3
	from $new_blob
	data <<EOF
	Tag new_blob.
	EOF
	INPUT_END

	cat >expect <<-EOF &&
	object $(git rev-parse refs/heads/main:file3)
	type blob
	tag series-A-blob-2

	Tag blob by sha1.
	object $new_blob
	type blob
	tag series-A-blob-3

	Tag new_blob.
	EOF

	git fast-import <input &&
	git cat-file tag tags/series-A-blob-2 >actual &&
	git cat-file tag tags/series-A-blob-3 >>actual &&
	test_cmp expect actual

100644 blob 038d718da6a1ebbc6a7780a96ed75a70cc2ad6e2	new_blob
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            2 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1210 /       1210
---------------------------------------------------------------------

ok 15 - A: tag blob by sha1

expecting success of 9300.16 'A: verify marks import does not crash': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/verify--import-marks
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	recreate from :5
	COMMIT

	from :5
	M 755 :2 copy-of-file2

	INPUT_END

	git fast-import --import-marks=marks.out <input &&
	git whatchanged verify--import-marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         7 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1139 /       1139
---------------------------------------------------------------------

commit ac2b62088fe0283163c00fa7856bcd0489cf30de
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:15:13 2005 -0700

    recreate from :5

:000000 100755 0000000 7123f7f A	copy-of-file2

commit 5ba2d0485e3e071f4ccbfdb22c474b305ebd159c
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial

:000000 100644 0000000 7123f7f A	file2
:000000 100644 0000000 0d92e9f A	file3
:000000 100755 0000000 85df507 A	file4
ok 16 - A: verify marks import does not crash

expecting success of 9300.17 'A: verify pack': 
	verify_packs

ok 17 - A: verify pack

expecting success of 9300.18 'A: verify diff': 
	copy=$(git rev-parse --verify main:file2) &&
	cat >expect <<-EOF &&
	:000000 100755 $ZERO_OID $copy A	copy-of-file2
	EOF
	git diff-tree -M -r main verify--import-marks >actual &&
	compare_diff_raw expect actual &&
	test $(git rev-parse --verify main:file2) \
	    = $(git rev-parse --verify verify--import-marks:copy-of-file2)

ok 18 - A: verify diff

expecting success of 9300.19 'A: export marks with large values': 
	test_tick &&
	mt=$(git hash-object --stdin < /dev/null) &&
	>input.blob &&
	>marks.exp &&
	>tree.exp &&

	cat >input.commit <<-EOF &&
	commit refs/heads/verify--dump-marks
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	test the sparse array dumping routines with exponentially growing marks
	COMMIT
	EOF

	i=0 l=4 m=6 n=7 &&
	while test "$i" -lt 27
	do
		cat >>input.blob <<-EOF &&
		blob
		mark :$l
		data 0
		blob
		mark :$m
		data 0
		blob
		mark :$n
		data 0
		EOF
		echo "M 100644 :$l l$i" >>input.commit &&
		echo "M 100644 :$m m$i" >>input.commit &&
		echo "M 100644 :$n n$i" >>input.commit &&

		echo ":$l $mt" >>marks.exp &&
		echo ":$m $mt" >>marks.exp &&
		echo ":$n $mt" >>marks.exp &&

		printf "100644 blob $mt\tl$i\n" >>tree.exp &&
		printf "100644 blob $mt\tm$i\n" >>tree.exp &&
		printf "100644 blob $mt\tn$i\n" >>tree.exp &&

		l=$(($l + $l)) &&
		m=$(($m + $m)) &&
		n=$(($l + $n)) &&

		i=$((1 + $i)) || return 1
	done &&

	sort tree.exp > tree.exp_s &&

	cat input.blob input.commit | git fast-import --export-marks=marks.large &&
	git ls-tree refs/heads/verify--dump-marks >tree.out &&
	test_cmp tree.exp_s tree.out &&
	test_cmp marks.exp marks.large

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (        80 duplicates                  )
      blobs  :            1 (        80 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:     1073741824 (        81 unique    )
      atoms:             81
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        441 /        441
---------------------------------------------------------------------

ok 19 - A: export marks with large values

expecting success of 9300.20 'B: fail on invalid blob sha1': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	mark :1
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	corrupt
	COMMIT

	from refs/heads/main
	M 755 $(echo $ZERO_OID | sed -e "s/0$/1/") zero1

	INPUT_END

	test_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&
	test_must_fail git fast-import <input

fatal: Blob not found: M 755 0000000000000000000000000000000000000001 zero1
fast-import: dumping crash report to .git/fast_import_crash_14619
ok 20 - B: fail on invalid blob sha1

expecting success of 9300.21 'B: accept branch name "TEMP_TAG"': 
	cat >input <<-INPUT_END &&
	commit TEMP_TAG
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	tag base
	COMMIT

	from refs/heads/main

	INPUT_END

	test_when_finished "rm -f .git/TEMP_TAG
		git gc
		git prune" &&
	git fast-import <input &&
	test $(test-tool ref-store main resolve-ref TEMP_TAG 0 | cut -f1 -d " " ) != "$ZERO_OID" &&
	test $(git rev-parse main) = $(git rev-parse TEMP_TAG^)

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1025 /       1025
---------------------------------------------------------------------

ok 21 - B: accept branch name "TEMP_TAG"

expecting success of 9300.22 'B: accept empty committer': 
	cat >input <<-INPUT_END &&
	commit refs/heads/empty-committer-1
	committer  <> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/empty-committer-1
		git gc
		git prune" &&
	git fast-import <input &&
	out=$(git fsck) &&
	echo "$out" &&
	test -z "$out"

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        139 /        139
---------------------------------------------------------------------

warning in tag 0e22025f0f5cea5d83b68c3dc9fc334571f7196c: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 103553a16e02d76e288cec0f76240f1ad97caeb9: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 42d861d649a1b87eb8083ad1d94d9220ecf2c35f: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 3750af27267cae07dd3f8b7a9aac2291e374a66a: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 56c14ce987117cf2e391ebef3dbab65e4c1ed202: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag e0764732957e237a858c7535fca3c2b966065dac: missingTaggerEntry: invalid format - expected 'tagger' line

ok 22 - B: accept empty committer

expecting success of 9300.23 'B: reject invalid timezone': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-timezone
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1234567890 +051800
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-timezone" &&
	test_must_fail git fast-import <input

fatal: Invalid raw date "1234567890 +051800" in ident: C O Mitter <committer@example.com> 1234567890 +051800
fast-import: dumping crash report to .git/fast_import_crash_14746
ok 23 - B: reject invalid timezone

expecting success of 9300.24 'B: accept invalid timezone with raw-permissive': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-timezone
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1234567890 +051800
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	git init invalid-timezone &&
	git -C invalid-timezone fast-import --date-format=raw-permissive <input &&
	git -C invalid-timezone cat-file -p invalid-timezone >out &&
	grep "1234567890 [+]051800" out

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/invalid-timezone/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

author C O Mitter <committer@example.com> 1234567890 +051800
committer C O Mitter <committer@example.com> 1234567890 +051800
ok 24 - B: accept invalid timezone with raw-permissive

expecting success of 9300.25 'B: accept and fixup committer with no name': 
	cat >input <<-INPUT_END &&
	commit refs/heads/empty-committer-2
	committer <a@b.com> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/empty-committer-2
		git gc
		git prune" &&
	git fast-import <input &&
	out=$(git fsck) &&
	echo "$out" &&
	test -z "$out"

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        146 /        146
---------------------------------------------------------------------

warning in tag 0e22025f0f5cea5d83b68c3dc9fc334571f7196c: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 103553a16e02d76e288cec0f76240f1ad97caeb9: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 42d861d649a1b87eb8083ad1d94d9220ecf2c35f: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 3750af27267cae07dd3f8b7a9aac2291e374a66a: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 56c14ce987117cf2e391ebef3dbab65e4c1ed202: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag e0764732957e237a858c7535fca3c2b966065dac: missingTaggerEntry: invalid format - expected 'tagger' line

ok 25 - B: accept and fixup committer with no name

expecting success of 9300.26 'B: fail on invalid committer (1)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-committer
	committer Name email> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-committer" &&
	test_must_fail git fast-import <input

fatal: Missing < in ident string: Name email> 1112912233 -0700
fast-import: dumping crash report to .git/fast_import_crash_14823
ok 26 - B: fail on invalid committer (1)

expecting success of 9300.27 'B: fail on invalid committer (2)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-committer
	committer Name <e<mail> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-committer" &&
	test_must_fail git fast-import <input

fatal: Missing > in ident string: Name <e<mail> 1112912233 -0700
fast-import: dumping crash report to .git/fast_import_crash_14832
ok 27 - B: fail on invalid committer (2)

expecting success of 9300.28 'B: fail on invalid committer (3)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-committer
	committer Name <email>> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-committer" &&
	test_must_fail git fast-import <input

fatal: Missing space after > in ident string: Name <email>> 1112912233 -0700
fast-import: dumping crash report to .git/fast_import_crash_14841
ok 28 - B: fail on invalid committer (3)

expecting success of 9300.29 'B: fail on invalid committer (4)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-committer
	committer Name <email $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-committer" &&
	test_must_fail git fast-import <input

fatal: Missing > in ident string: Name <email 1112912233 -0700
fast-import: dumping crash report to .git/fast_import_crash_14852
ok 29 - B: fail on invalid committer (4)

expecting success of 9300.30 'B: fail on invalid committer (5)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/invalid-committer
	committer Name<email> $GIT_COMMITTER_DATE
	data <<COMMIT
	empty commit
	COMMIT
	INPUT_END

	test_when_finished "git update-ref -d refs/heads/invalid-committer" &&
	test_must_fail git fast-import <input

fatal: Missing space before < in ident string: Name<email> 1112912233 -0700
fast-import: dumping crash report to .git/fast_import_crash_14870
ok 30 - B: fail on invalid committer (5)

expecting success of 9300.31 'C: incremental import create pack from stdin': 
	newf=$(echo hi newf | git hash-object -w --stdin) &&
	oldf=$(git rev-parse --verify main:file2) &&
	thrf=$(git rev-parse --verify main:file3) &&
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	second
	COMMIT

	from refs/heads/main
	M 644 $oldf file2/oldf
	M 755 $newf file2/newf
	D file3

	INPUT_END

	git fast-import <input &&
	git whatchanged branch

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          5
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       1933 /       1933
---------------------------------------------------------------------

commit fe28762c62291fb256d192177ba8264d159a3872
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    second

:000000 100755 0000000 f1fb5da A	file2/newf
:100644 100644 7123f7f 7123f7f R100	file2	file2/oldf
:100644 000000 0d92e9f 0000000 D	file3

commit 5ba2d0485e3e071f4ccbfdb22c474b305ebd159c
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial

:000000 100644 0000000 7123f7f A	file2
:000000 100644 0000000 0d92e9f A	file3
:000000 100755 0000000 85df507 A	file4
ok 31 - C: incremental import create pack from stdin

expecting success of 9300.32 'C: verify pack': 
	verify_packs

ok 32 - C: verify pack

expecting success of 9300.33 'C: validate reuse existing blob': 
	test $newf = $(git rev-parse --verify branch:file2/newf) &&
	test $oldf = $(git rev-parse --verify branch:file2/oldf)

ok 33 - C: validate reuse existing blob

expecting success of 9300.34 'C: verify commit': 
	cat >expect <<-EOF &&
	parent $(git rev-parse --verify main^0)
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	second
	EOF

	git cat-file commit branch | sed 1d >actual &&
	test_cmp expect actual

ok 34 - C: verify commit

expecting success of 9300.35 'C: validate rename result': 
	zero=$ZERO_OID &&
	cat >expect <<-EOF &&
	:000000 100755 $zero $newf A	file2/newf
	:100644 100644 $oldf $oldf R100	file2	file2/oldf
	:100644 000000 $thrf $zero D	file3
	EOF
	git diff-tree -M -r main branch >actual &&
	compare_diff_raw expect actual

ok 35 - C: validate rename result

expecting success of 9300.36 'D: inline data in commit': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	third
	COMMIT

	from refs/heads/branch^0
	M 644 inline newdir/interesting
	data <<EOF
	$file5_data
	EOF

	M 755 inline newdir/exec.sh
	data <<EOF
	$file6_data
	EOF

	INPUT_END

	git fast-import <input &&
	git whatchanged branch

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        784 /        784
---------------------------------------------------------------------

commit f3aa51c819f0b3cc0ee594d10afaf6c84d7da579
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:19:13 2005 -0700

    third

:000000 100755 0000000 e74b7d4 A	newdir/exec.sh
:000000 100644 0000000 fcf778c A	newdir/interesting

commit fe28762c62291fb256d192177ba8264d159a3872
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    second

:000000 100755 0000000 f1fb5da A	file2/newf
:100644 100644 7123f7f 7123f7f R100	file2	file2/oldf
:100644 000000 0d92e9f 0000000 D	file3

commit 5ba2d0485e3e071f4ccbfdb22c474b305ebd159c
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial

:000000 100644 0000000 7123f7f A	file2
:000000 100644 0000000 0d92e9f A	file3
:000000 100755 0000000 85df507 A	file4
ok 36 - D: inline data in commit

expecting success of 9300.37 'D: verify pack': 
	verify_packs

ok 37 - D: verify pack

expecting success of 9300.38 'D: validate new files added': 
	f5id=$(echo "$file5_data" | git hash-object --stdin) &&
	f6id=$(echo "$file6_data" | git hash-object --stdin) &&
	cat >expect <<-EOF &&
	:000000 100755 $ZERO_OID $f6id A	newdir/exec.sh
	:000000 100644 $ZERO_OID $f5id A	newdir/interesting
	EOF
	git diff-tree -M -r branch^ branch >actual &&
	compare_diff_raw expect actual

ok 38 - D: validate new files added

expecting success of 9300.39 'D: verify file5': 
	echo "$file5_data" >expect &&
	git cat-file blob branch:newdir/interesting >actual &&
	test_cmp expect actual

ok 39 - D: verify file5

expecting success of 9300.40 'D: verify file6': 
	echo "$file6_data" >expect &&
	git cat-file blob branch:newdir/exec.sh >actual &&
	test_cmp expect actual

ok 40 - D: verify file6

expecting success of 9300.41 'E: rfc2822 date, --date-format=raw': 
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> Tue Feb 6 11:22:18 2007 -0500
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> Tue Feb 6 12:35:02 2007 -0500
	data <<COMMIT
	RFC 2822 type date
	COMMIT

	from refs/heads/branch^0

	INPUT_END

	test_must_fail git fast-import --date-format=raw <input

fatal: Invalid raw date "Tue Feb 6 11:22:18 2007 -0500" in ident: A U Thor <author@example.com> Tue Feb 6 11:22:18 2007 -0500
fast-import: dumping crash report to .git/fast_import_crash_15021
ok 41 - E: rfc2822 date, --date-format=raw

expecting success of 9300.42 'E: rfc2822 date, --date-format=rfc2822': 
	git fast-import --date-format=rfc2822 <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        656 /        656
---------------------------------------------------------------------

ok 42 - E: rfc2822 date, --date-format=rfc2822

expecting success of 9300.43 'E: verify pack': 
	verify_packs

ok 43 - E: verify pack

expecting success of 9300.44 'E: verify commit': 
	cat >expect <<-EOF &&
	author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 1170778938 -0500
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1170783302 -0500

	RFC 2822 type date
	EOF
	git cat-file commit branch | sed 1,2d >actual &&
	test_cmp expect actual

ok 44 - E: verify commit

expecting success of 9300.45 'F: non-fast-forward update skips': 
	old_branch=$(git rev-parse --verify branch^0) &&
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	losing things already?
	COMMIT

	from refs/heads/branch~1

	reset refs/heads/other
	from refs/heads/branch

	INPUT_END

	test_must_fail git fast-import <input &&
	# branch must remain unaffected
	test $old_branch = $(git rev-parse --verify branch^0)

warning: Not updating refs/heads/branch (new tip fb7baf16109664b6b1d3b3c98d6c252fa7051ae5 does not contain de5766c434bb93360ee19879605fe31f25cdcf20)
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           2 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1180 /       1180
---------------------------------------------------------------------

ok 45 - F: non-fast-forward update skips

expecting success of 9300.46 'F: verify pack': 
	verify_packs

ok 46 - F: verify pack

expecting success of 9300.47 'F: verify other commit': 
	cat >expect <<-EOF &&
	tree $(git rev-parse branch~1^{tree})
	parent $(git rev-parse branch~1)
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	losing things already?
	EOF
	git cat-file commit other >actual &&
	test_cmp expect actual

ok 47 - F: verify other commit

expecting success of 9300.48 'G: non-fast-forward update forced': 
	old_branch=$(git rev-parse --verify branch^0) &&
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/branch
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	losing things already?
	COMMIT

	from refs/heads/branch~1

	INPUT_END
	git fast-import --force <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        850 /        850
---------------------------------------------------------------------

ok 48 - G: non-fast-forward update forced

expecting success of 9300.49 'G: verify pack': 
	verify_packs

ok 49 - G: verify pack

expecting success of 9300.50 'G: branch changed, but logged': 
	test $old_branch != $(git rev-parse --verify branch^0) &&
	test $old_branch = $(git rev-parse --verify branch@{1})

ok 50 - G: branch changed, but logged

expecting success of 9300.51 'H: deletall, add 1': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/H
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	third
	COMMIT

	from refs/heads/branch^0
	M 644 inline i-will-die
	data <<EOF
	this file will never exist.
	EOF

	deleteall
	M 644 inline h/e/l/lo
	data <<EOF
	$file5_data
	EOF

	INPUT_END
	git fast-import <input &&
	git whatchanged H

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         1 duplicates                  )
      blobs  :            1 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              8
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =       1020 /       1020
---------------------------------------------------------------------

commit 8c1bf1b9f891df8805c27a54986e5043829939ad
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:22:13 2005 -0700

    third

:100755 000000 f1fb5da 0000000 D	file2/newf
:100644 000000 7123f7f 0000000 D	file2/oldf
:100755 000000 85df507 0000000 D	file4
:100644 100644 fcf778c fcf778c R100	newdir/interesting	h/e/l/lo
:100755 000000 e74b7d4 0000000 D	newdir/exec.sh

commit f3aa51c819f0b3cc0ee594d10afaf6c84d7da579
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:19:13 2005 -0700

    third

:000000 100755 0000000 e74b7d4 A	newdir/exec.sh
:000000 100644 0000000 fcf778c A	newdir/interesting

commit fe28762c62291fb256d192177ba8264d159a3872
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:18:13 2005 -0700

    second

:000000 100755 0000000 f1fb5da A	file2/newf
:100644 100644 7123f7f 7123f7f R100	file2	file2/oldf
:100644 000000 0d92e9f 0000000 D	file3

commit 5ba2d0485e3e071f4ccbfdb22c474b305ebd159c
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    initial

:000000 100644 0000000 7123f7f A	file2
:000000 100644 0000000 0d92e9f A	file3
:000000 100755 0000000 85df507 A	file4
ok 51 - H: deletall, add 1

expecting success of 9300.52 'H: verify pack': 
	verify_packs

ok 52 - H: verify pack

expecting success of 9300.53 'H: validate old files removed, new files added': 
	f4id=$(git rev-parse HEAD:file4) &&
	cat >expect <<-EOF &&
	:100755 000000 $newf $zero D	file2/newf
	:100644 000000 $oldf $zero D	file2/oldf
	:100755 000000 $f4id $zero D	file4
	:100644 100644 $f5id $f5id R100	newdir/interesting	h/e/l/lo
	:100755 000000 $f6id $zero D	newdir/exec.sh
	EOF
	git diff-tree -M -r H^ H >actual &&
	compare_diff_raw expect actual

ok 53 - H: validate old files removed, new files added

expecting success of 9300.54 'H: verify file': 
	echo "$file5_data" >expect &&
	git cat-file blob H:h/e/l/lo >actual &&
	test_cmp expect actual

ok 54 - H: verify file

expecting success of 9300.55 'I: export-pack-edges': 
	cat >input <<-INPUT_END &&
	commit refs/heads/export-boundary
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	we have a border.  its only 40 characters wide.
	COMMIT

	from refs/heads/branch

	INPUT_END
	git fast-import --export-pack-edges=edges.list <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        860 /        860
---------------------------------------------------------------------

ok 55 - I: export-pack-edges

expecting success of 9300.56 'I: verify edge list': 
	cat >expect <<-EOF &&
	.git/objects/pack/pack-.pack: $(git rev-parse --verify export-boundary)
	EOF
	sed -e s/pack-.*pack/pack-.pack/ edges.list >actual &&
	test_cmp expect actual

ok 56 - I: verify edge list

expecting success of 9300.57 'J: reset existing branch creates empty commit': 
	cat >input <<-INPUT_END &&
	commit refs/heads/J
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	create J
	COMMIT

	from refs/heads/branch

	reset refs/heads/J

	commit refs/heads/J
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	initialize J
	COMMIT

	INPUT_END
	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        965 /        965
---------------------------------------------------------------------

ok 57 - J: reset existing branch creates empty commit

expecting success of 9300.58 'J: branch has 1 commit, empty tree': 
	test 1 = $(git rev-list J | wc -l) &&
	test 0 = $(git ls-tree J | wc -l)

ok 58 - J: branch has 1 commit, empty tree

expecting success of 9300.59 'J: tag must fail on empty branch': 
	cat >input <<-INPUT_END &&
	reset refs/heads/J2

	tag wrong_tag
	from refs/heads/J2
	data <<EOF
	Tag branch that was reset.
	EOF
	INPUT_END
	test_must_fail git fast-import <input

fatal: Can't tag an empty branch.
fast-import: dumping crash report to .git/fast_import_crash_15284
ok 59 - J: tag must fail on empty branch

expecting success of 9300.60 'K: reinit branch with from': 
	cat >input <<-INPUT_END &&
	commit refs/heads/K
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	create K
	COMMIT

	from refs/heads/branch

	commit refs/heads/K
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	redo K
	COMMIT

	from refs/heads/branch^1

	INPUT_END
	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        980 /        980
---------------------------------------------------------------------

ok 60 - K: reinit branch with from

expecting success of 9300.61 'K: verify K^1 = branch^1': 
	test $(git rev-parse --verify branch^1) \
		= $(git rev-parse --verify K^1)

ok 61 - K: verify K^1 = branch^1

expecting success of 9300.62 'L: verify internal tree sorting': 
	cat >input <<-INPUT_END &&
	blob
	mark :1
	data <<EOF
	some data
	EOF

	blob
	mark :2
	data <<EOF
	other data
	EOF

	commit refs/heads/L
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	create L
	COMMIT

	M 644 :1 b.
	M 644 :1 b/other
	M 644 :1 ba

	commit refs/heads/L
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	update L
	COMMIT

	M 644 :2 b.
	M 644 :2 b/other
	M 644 :2 ba
	INPUT_END

	cat >expect <<-EXPECT_END &&
	:100644 100644 M	b.
	:040000 040000 M	b
	:100644 100644 M	ba
	EXPECT_END

	git fast-import <input &&
	GIT_PRINT_SHA1_ELLIPSIS="yes" git diff-tree --abbrev --raw L^ L >output &&
	cut -d" " -f1,2,5 output >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            8 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          0 deltas of          2 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         2 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        579 /        579
---------------------------------------------------------------------

ok 62 - L: verify internal tree sorting

expecting success of 9300.63 'L: nested tree copy does not corrupt deltas': 
	cat >input <<-INPUT_END &&
	blob
	mark :1
	data <<EOF
	the data
	EOF

	commit refs/heads/L2
	committer C O Mitter <committer@example.com> 1112912473 -0700
	data <<COMMIT
	init L2
	COMMIT
	M 644 :1 a/b/c
	M 644 :1 a/b/d
	M 644 :1 a/e/f

	commit refs/heads/L2
	committer C O Mitter <committer@example.com> 1112912473 -0700
	data <<COMMIT
	update L2
	COMMIT
	C a g
	C a/e g/b
	M 644 :1 g/b/h
	INPUT_END

	cat >expect <<-\EOF &&
	g/b/f
	g/b/h
	EOF

	test_when_finished "git update-ref -d refs/heads/L2" &&
	git fast-import <input &&
	git ls-tree L2 g/b/ >tmp &&
	cat tmp | cut -f 2 >actual &&
	test_cmp expect actual &&
	git fsck $(git rev-parse L2)

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           10 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            7 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              8
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        659 /        659
---------------------------------------------------------------------

warning in tag 0e22025f0f5cea5d83b68c3dc9fc334571f7196c: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 103553a16e02d76e288cec0f76240f1ad97caeb9: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 42d861d649a1b87eb8083ad1d94d9220ecf2c35f: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 3750af27267cae07dd3f8b7a9aac2291e374a66a: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag 56c14ce987117cf2e391ebef3dbab65e4c1ed202: missingTaggerEntry: invalid format - expected 'tagger' line
warning in tag e0764732957e237a858c7535fca3c2b966065dac: missingTaggerEntry: invalid format - expected 'tagger' line
dangling blob 8436d07c4b682e3c824ffae4608920535091c4d0
dangling commit 8cecdab6b3e4062de5b06ad3accf5bff1449e99b
dangling tag 0e22025f0f5cea5d83b68c3dc9fc334571f7196c
dangling commit 8c1bf1b9f891df8805c27a54986e5043829939ad
dangling tag 103553a16e02d76e288cec0f76240f1ad97caeb9
dangling commit 994b824fbe51b899f546383c3ba14a28a07c1022
dangling commit a53846236402ec769ea7f2fd7632de38e28f3273
dangling commit ac2b62088fe0283163c00fa7856bcd0489cf30de
dangling tag 3750af27267cae07dd3f8b7a9aac2291e374a66a
dangling commit 45b12606bd487d1bc687864db7641b9bfd4ddcd0
dangling tag 42d861d649a1b87eb8083ad1d94d9220ecf2c35f
dangling commit c85b9f480bbc2f7616de78fc96c08204e0f5b70e
dangling tag 56c14ce987117cf2e391ebef3dbab65e4c1ed202
dangling commit d892dc32fa7a52ea3a397cfc4449e9df8a39becf
dangling commit 5cdb3613534ced7561d4baa9c18f92e6f446501c
dangling commit de5766c434bb93360ee19879605fe31f25cdcf20
dangling commit 6b33e55cd592e91710d6c0afef1b0e6e3406a2a7
dangling commit fb7baf16109664b6b1d3b3c98d6c252fa7051ae5
ok 63 - L: nested tree copy does not corrupt deltas

expecting success of 9300.64 'M: rename file in same subdirectory': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/M1
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	file rename
	COMMIT

	from refs/heads/branch^0
	R file2/newf file2/n.e.w.f

	INPUT_END

	cat >expect <<-EOF &&
	:100755 100755 $newf $newf R100	file2/newf	file2/n.e.w.f
	EOF
	git fast-import <input &&
	git diff-tree -M -r M1^ M1 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1346 /       1346
---------------------------------------------------------------------

ok 64 - M: rename file in same subdirectory

expecting success of 9300.65 'M: rename file to new subdirectory': 
	cat >input <<-INPUT_END &&
	commit refs/heads/M2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	file rename
	COMMIT

	from refs/heads/branch^0
	R file2/newf i/am/new/to/you

	INPUT_END

	cat >expect <<-EOF &&
	:100755 100755 $newf $newf R100	file2/newf	i/am/new/to/you
	EOF
	git fast-import <input &&
	git diff-tree -M -r M2^ M2 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            7 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            6 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1491 /       1491
---------------------------------------------------------------------

ok 65 - M: rename file to new subdirectory

expecting success of 9300.66 'M: rename subdirectory to new subdirectory': 
	cat >input <<-INPUT_END &&
	commit refs/heads/M3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	file rename
	COMMIT

	from refs/heads/M2^0
	R i other/sub

	INPUT_END

	cat >expect <<-EOF &&
	:100755 100755 $newf $newf R100	i/am/new/to/you	other/sub/am/new/to/you
	EOF
	git fast-import <input &&
	git diff-tree -M -r M3^ M3 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        868 /        868
---------------------------------------------------------------------

ok 66 - M: rename subdirectory to new subdirectory

expecting success of 9300.67 'M: rename root to subdirectory': 
	cat >input <<-INPUT_END &&
	commit refs/heads/M4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	rename root
	COMMIT

	from refs/heads/M2^0
	R "" sub

	INPUT_END

	cat >expect <<-EOF &&
	:100644 100644 $oldf $oldf R100	file2/oldf	sub/file2/oldf
	:100755 100755 $f4id $f4id R100	file4	sub/file4
	:100755 100755 $newf $newf R100	i/am/new/to/you	sub/i/am/new/to/you
	:100755 100755 $f6id $f6id R100	newdir/exec.sh	sub/newdir/exec.sh
	:100644 100644 $f5id $f5id R100	newdir/interesting	sub/newdir/interesting
	EOF
	git fast-import <input &&
	git diff-tree -M -r M4^ M4 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        737 /        737
---------------------------------------------------------------------

ok 67 - M: rename root to subdirectory

expecting success of 9300.68 'N: copy file in same subdirectory': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N1
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	file copy
	COMMIT

	from refs/heads/branch^0
	C file2/newf file2/n.e.w.f

	INPUT_END

	cat >expect <<-EOF &&
	:100755 100755 $newf $newf C100	file2/newf	file2/n.e.w.f
	EOF
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r N1^ N1 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1345 /       1345
---------------------------------------------------------------------

ok 68 - N: copy file in same subdirectory

expecting success of 9300.69 'N: copy then modify subdirectory': 
	cat >input <<-INPUT_END &&
	commit refs/heads/N2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	clean directory copy
	COMMIT

	from refs/heads/branch^0
	C file2 file3

	commit refs/heads/N2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	modify directory copy
	COMMIT

	M 644 inline file3/file5
	data <<EOF
	$file5_data
	EOF

	INPUT_END

	cat >expect <<-EOF &&
	:100644 100644 $f5id $f5id C100	newdir/interesting	file3/file5
	:100755 100755 $newf $newf C100	file2/newf	file3/newf
	:100644 100644 $oldf $oldf C100	file2/oldf	file3/oldf
	EOF
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r N2^^ N2 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            3 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1585 /       1585
---------------------------------------------------------------------

ok 69 - N: copy then modify subdirectory

expecting success of 9300.70 'N: copy dirty subdirectory': 
	cat >input <<-INPUT_END &&
	commit refs/heads/N3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	dirty directory copy
	COMMIT

	from refs/heads/branch^0
	M 644 inline file2/file5
	data <<EOF
	$file5_data
	EOF

	C file2 file3
	D file2/file5

	INPUT_END

	git fast-import <input &&
	test $(git rev-parse N2^{tree}) = $(git rev-parse N3^{tree})

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         4 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         3 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1166 /       1166
---------------------------------------------------------------------

ok 70 - N: copy dirty subdirectory

expecting success of 9300.71 'N: copy directory by id': 
	cat >expect <<-EOF &&
	:100755 100755 $newf $newf C100	file2/newf	file3/newf
	:100644 100644 $oldf $oldf C100	file2/oldf	file3/oldf
	EOF
	subdir=$(git rev-parse refs/heads/branch^0:file2) &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy by tree hash
	COMMIT

	from refs/heads/branch^0
	M 040000 $subdir file3
	INPUT_END
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r N4^ N4 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1168 /       1168
---------------------------------------------------------------------

ok 71 - N: copy directory by id

checking prerequisite: PIPE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PIPE" &&
	# test whether the filesystem supports FIFOs
	test_have_prereq !MINGW,!CYGWIN &&
	rm -f testfifo && mkfifo testfifo

)
prerequisite PIPE ok
expecting success of 9300.72 'N: read and copy directory': 
	cat >expect <<-EOF &&
	:100755 100755 $newf $newf C100	file2/newf	file3/newf
	:100644 100644 $oldf $oldf C100	file2/oldf	file3/oldf
	EOF
	git update-ref -d refs/heads/N4 &&
	rm -f backflow &&
	mkfifo backflow &&
	(
		exec <backflow &&
		cat <<-EOF &&
		commit refs/heads/N4
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		copy by tree hash, part 2
		COMMIT

		from refs/heads/branch^0
		ls "file2"
		EOF
		read mode type tree filename &&
		echo "M 040000 $tree file3"
	) |
	git fast-import --cat-blob-fd=3 3>backflow &&
	git diff-tree -C --find-copies-harder -r N4^ N4 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1173 /       1173
---------------------------------------------------------------------

ok 72 - N: read and copy directory

expecting success of 9300.73 'N: empty directory reads as missing': 
	cat <<-\EOF >expect &&
	OBJNAME
	:000000 100644 OBJNAME OBJNAME A	unrelated
	EOF
	echo "missing src" >expect.response &&
	git update-ref -d refs/heads/read-empty &&
	rm -f backflow &&
	mkfifo backflow &&
	(
		exec <backflow &&
		cat <<-EOF &&
		commit refs/heads/read-empty
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		read "empty" (missing) directory
		COMMIT

		M 100644 inline src/greeting
		data <<BLOB
		hello
		BLOB
		C src/greeting dst1/non-greeting
		C src/greeting unrelated
		# leave behind "empty" src directory
		D src/greeting
		ls "src"
		EOF
		read -r line &&
		printf "%s\n" "$line" >response &&
		cat <<-\EOF
		D dst1
		D dst2
		EOF
	) |
	git fast-import --cat-blob-fd=3 3>backflow &&
	test_cmp expect.response response &&
	git rev-list read-empty |
	git diff-tree -r --root --stdin |
	sed "s/$OID_REGEX/OBJNAME/g" >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        235 /        235
---------------------------------------------------------------------

ok 73 - N: empty directory reads as missing

expecting success of 9300.74 'N: copy root directory by tree hash': 
	cat >expect <<-EOF &&
	:100755 000000 $newf $zero D	file3/newf
	:100644 000000 $oldf $zero D	file3/oldf
	EOF
	root=$(git rev-parse refs/heads/branch^0^{tree}) &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N6
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy root directory by tree hash
	COMMIT

	from refs/heads/branch^0
	M 040000 $root ""
	INPUT_END
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r N4 N6 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        848 /        848
---------------------------------------------------------------------

ok 74 - N: copy root directory by tree hash

expecting success of 9300.75 'N: copy root by path': 
	cat >expect <<-EOF &&
	:100755 100755 $newf $newf C100	file2/newf	oldroot/file2/newf
	:100644 100644 $oldf $oldf C100	file2/oldf	oldroot/file2/oldf
	:100755 100755 $f4id $f4id C100	file4	oldroot/file4
	:100755 100755 $f6id $f6id C100	newdir/exec.sh	oldroot/newdir/exec.sh
	:100644 100644 $f5id $f5id C100	newdir/interesting	oldroot/newdir/interesting
	EOF
	cat >input <<-INPUT_END &&
	commit refs/heads/N-copy-root-path
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy root directory by (empty) path
	COMMIT

	from refs/heads/branch^0
	C "" oldroot
	INPUT_END
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r branch N-copy-root-path >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        983 /        983
---------------------------------------------------------------------

ok 75 - N: copy root by path

expecting success of 9300.76 'N: delete directory by copying': 
	cat >expect <<-\EOF &&
	OBJID
	:100644 000000 OBJID OBJID D	foo/bar/qux
	OBJID
	:000000 100644 OBJID OBJID A	foo/bar/baz
	:000000 100644 OBJID OBJID A	foo/bar/qux
	EOF
	empty_tree=$(git mktree </dev/null) &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N-delete
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	collect data to be deleted
	COMMIT

	deleteall
	M 100644 inline foo/bar/baz
	data <<DATA_END
	hello
	DATA_END
	C "foo/bar/baz" "foo/bar/qux"
	C "foo/bar/baz" "foo/bar/quux/1"
	C "foo/bar/baz" "foo/bar/quuux"
	M 040000 $empty_tree foo/bar/quux
	M 040000 $empty_tree foo/bar/quuux

	commit refs/heads/N-delete
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	delete subdirectory
	COMMIT

	M 040000 $empty_tree foo/bar/qux
	INPUT_END
	git fast-import <input &&
	git rev-list N-delete |
		git diff-tree -r --stdin --root --always |
		sed -e "s/$OID_REGEX/OBJID/g" >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            8 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            6 (         0 duplicates          1 deltas of          3 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        542 /        542
---------------------------------------------------------------------

ok 76 - N: delete directory by copying

expecting success of 9300.77 'N: modify copied tree': 
	cat >expect <<-EOF &&
	:100644 100644 $f5id $f5id C100	newdir/interesting	file3/file5
	:100755 100755 $newf $newf C100	file2/newf	file3/newf
	:100644 100644 $oldf $oldf C100	file2/oldf	file3/oldf
	EOF
	subdir=$(git rev-parse refs/heads/branch^0:file2) &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N5
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy by tree hash
	COMMIT

	from refs/heads/branch^0
	M 040000 $subdir file3

	commit refs/heads/N5
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	modify directory copy
	COMMIT

	M 644 inline file3/file5
	data <<EOF
	$file5_data
	EOF
	INPUT_END
	git fast-import <input &&
	git diff-tree -C --find-copies-harder -r N5^^ N5 >actual &&
	compare_diff_raw expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         5 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         3 duplicates          0 deltas of          0 attempts)
      commits:            1 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1169 /       1169
---------------------------------------------------------------------

ok 77 - N: modify copied tree

expecting success of 9300.78 'N: reject foo/ syntax': 
	subdir=$(git rev-parse refs/heads/branch^0:file2) &&
	test_must_fail git fast-import <<-INPUT_END
	commit refs/heads/N5B
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy with invalid syntax
	COMMIT

	from refs/heads/branch^0
	M 040000 $subdir file3/
	INPUT_END

fatal: Empty path component found in input
fast-import: dumping crash report to .git/fast_import_crash_15555
ok 78 - N: reject foo/ syntax

expecting success of 9300.79 'N: reject foo/ syntax in copy source': 
	test_must_fail git fast-import <<-INPUT_END
	commit refs/heads/N5C
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy with invalid syntax
	COMMIT

	from refs/heads/branch^0
	C file2/ file3
	INPUT_END

fatal: Empty path component found in input
fast-import: dumping crash report to .git/fast_import_crash_15557
ok 79 - N: reject foo/ syntax in copy source

expecting success of 9300.80 'N: reject foo/ syntax in rename source': 
	test_must_fail git fast-import <<-INPUT_END
	commit refs/heads/N5D
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	rename with invalid syntax
	COMMIT

	from refs/heads/branch^0
	R file2/ file3
	INPUT_END

fatal: Path file2/ not in branch
fast-import: dumping crash report to .git/fast_import_crash_15565
ok 80 - N: reject foo/ syntax in rename source

expecting success of 9300.81 'N: reject foo/ syntax in ls argument': 
	test_must_fail git fast-import <<-INPUT_END
	commit refs/heads/N5E
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy with invalid syntax
	COMMIT

	from refs/heads/branch^0
	ls "file2/"
	INPUT_END

fatal: Empty path component found in input
fast-import: dumping crash report to .git/fast_import_crash_15573
ok 81 - N: reject foo/ syntax in ls argument

expecting success of 9300.82 'N: copy to root by id and modify': 
	echo "hello, world" >expect.foo &&
	echo hello >expect.bar &&
	git fast-import <<-SETUP_END &&
	commit refs/heads/N7
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	hello, tree
	COMMIT

	deleteall
	M 644 inline foo/bar
	data <<EOF
	hello
	EOF
	SETUP_END

	tree=$(git rev-parse --verify N7:) &&
	git fast-import <<-INPUT_END &&
	commit refs/heads/N8
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy to root by id and modify
	COMMIT

	M 040000 $tree ""
	M 644 inline foo/foo
	data <<EOF
	hello, world
	EOF
	INPUT_END
	git show N8:foo/foo >actual.foo &&
	git show N8:foo/bar >actual.bar &&
	test_cmp expect.foo actual.foo &&
	test_cmp expect.bar actual.bar

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        238 /        238
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          5
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        535 /        535
---------------------------------------------------------------------

ok 82 - N: copy to root by id and modify

expecting success of 9300.83 'N: extract subtree': 
	branch=$(git rev-parse --verify refs/heads/branch^{tree}) &&
	cat >input <<-INPUT_END &&
	commit refs/heads/N9
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	extract subtree branch:newdir
	COMMIT

	M 040000 $branch ""
	C "newdir" ""
	INPUT_END
	git fast-import <input &&
	git diff --exit-code branch:newdir N9

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        623 /        623
---------------------------------------------------------------------

ok 83 - N: extract subtree

expecting success of 9300.84 'N: modify subtree, extract it, and modify again': 
	echo hello >expect.baz &&
	echo hello, world >expect.qux &&
	git fast-import <<-SETUP_END &&
	commit refs/heads/N10
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	hello, tree
	COMMIT

	deleteall
	M 644 inline foo/bar/baz
	data <<EOF
	hello
	EOF
	SETUP_END

	tree=$(git rev-parse --verify N10:) &&
	git fast-import <<-INPUT_END &&
	commit refs/heads/N11
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	copy to root by id and modify
	COMMIT

	M 040000 $tree ""
	M 100644 inline foo/bar/qux
	data <<EOF
	hello, world
	EOF
	R "foo" ""
	C "bar/qux" "bar/quux"
	INPUT_END
	git show N11:bar/baz >actual.baz &&
	git show N11:bar/qux >actual.qux &&
	git show N11:bar/quux >actual.quux &&
	test_cmp expect.baz actual.baz &&
	test_cmp expect.qux actual.qux &&
	test_cmp expect.qux actual.quux
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         4 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         3 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        157 /        157
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        823 /        823
---------------------------------------------------------------------

ok 84 - N: modify subtree, extract it, and modify again

expecting success of 9300.85 'O: comments are all skipped': 
	cat >input <<-INPUT_END &&
	#we will
	commit refs/heads/O1
	# -- ignore all of this text
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	dirty directory copy
	COMMIT

	# do not forget the import blank line!
	#
	# yes, we started from our usual base of branch^0.
	# i like branch^0.
	from refs/heads/branch^0
	# and we need to reuse file2/file5 from N3 above.
	M 644 inline file2/file5
	# otherwise the tree will be different
	data <<EOF
	$file5_data
	EOF

	# do not forget to copy file2 to file3
	C file2 file3
	#
	# or to delete file5 from file2.
	D file2/file5
	# are we done yet?

	INPUT_END

	git fast-import <input &&
	test $(git rev-parse N3) = $(git rev-parse O1)

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         5 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         3 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1166 /       1166
---------------------------------------------------------------------

ok 85 - O: comments are all skipped

expecting success of 9300.86 'O: blank lines not necessary after data commands': 
	cat >input <<-INPUT_END &&
	commit refs/heads/O2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	dirty directory copy
	COMMIT
	from refs/heads/branch^0
	M 644 inline file2/file5
	data <<EOF
	$file5_data
	EOF
	C file2 file3
	D file2/file5

	INPUT_END

	git fast-import <input &&
	test $(git rev-parse N3) = $(git rev-parse O2)

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         5 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         3 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          4 /          4
pack_report: pack_mapped              =       1166 /       1166
---------------------------------------------------------------------

ok 86 - O: blank lines not necessary after data commands

expecting success of 9300.87 'O: repack before next test': 
	git repack -a -d

ok 87 - O: repack before next test

expecting success of 9300.88 'O: blank lines not necessary after other commands': 
	cat >input <<-INPUT_END &&
	commit refs/heads/O3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zstring
	COMMIT
	commit refs/heads/O3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zof
	COMMIT
	checkpoint
	commit refs/heads/O3
	mark :5
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zempty
	COMMIT
	checkpoint
	commit refs/heads/O3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zcommits
	COMMIT
	reset refs/tags/O3-2nd
	from :5
	reset refs/tags/O3-3rd
	from :5
	INPUT_END

	cat >expect <<-INPUT_END &&
	string
	of
	empty
	commits
	INPUT_END

	git fast-import <input &&
	ls -la .git/objects/pack/pack-*.pack >packlist &&
	ls -la .git/objects/pack/pack-*.pack >idxlist &&
	test_line_count = 4 idxlist &&
	test_line_count = 4 packlist &&
	test $(git rev-parse refs/tags/O3-2nd) = $(git rev-parse O3^) &&
	git log --reverse --pretty=oneline O3 | sed s/^.*z// >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           3 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        661 /        661
---------------------------------------------------------------------

ok 88 - O: blank lines not necessary after other commands

expecting success of 9300.89 'O: progress outputs as requested by input': 
	cat >input <<-INPUT_END &&
	commit refs/heads/O4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zstring
	COMMIT
	commit refs/heads/O4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zof
	COMMIT
	progress Two commits down, 2 to go!
	commit refs/heads/O4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zempty
	COMMIT
	progress Three commits down, 1 to go!
	commit refs/heads/O4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	zcommits
	COMMIT
	progress done!
	INPUT_END
	git fast-import <input >actual &&
	grep "progress " <input >expect &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         5 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            0 (         4 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        180 /        180
---------------------------------------------------------------------

ok 89 - O: progress outputs as requested by input

expecting success of 9300.90 'P: superproject & submodule mix': 
	cat >input <<-INPUT_END &&
	blob
	mark :1
	data 10
	test file

	reset refs/heads/sub
	commit refs/heads/sub
	mark :2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 12
	sub_initial
	M 100644 :1 file

	blob
	mark :3
	data <<DATAEND
	[submodule "sub"]
		path = sub
		url = "$(pwd)/sub"
	DATAEND

	commit refs/heads/subuse1
	mark :4
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 8
	initial
	from refs/heads/main
	M 100644 :3 .gitmodules
	M 160000 :2 sub

	blob
	mark :5
	data 20
	test file
	more data

	commit refs/heads/sub
	mark :6
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 11
	sub_second
	from :2
	M 100644 :5 file

	commit refs/heads/subuse1
	mark :7
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 7
	second
	from :4
	M 160000 :6 sub

	INPUT_END

	git fast-import <input &&
	git checkout subuse1 &&
	rm -rf sub &&
	mkdir sub &&
	(
		cd sub &&
		git init &&
		git fetch --update-head-ok .. refs/heads/sub:refs/heads/main &&
		git checkout main
	) &&
	git submodule init &&
	git submodule update

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           11 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            4 (         0 duplicates          1 deltas of          2 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           2 (         2 loads     )
      marks:           1024 (         7 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =       8493 /       8493
---------------------------------------------------------------------

Switched to branch 'subuse1'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/sub/.git/
From ..
 * [new branch]      sub        -> main
Already on 'main'
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/sub) registered for path 'sub'
ok 90 - P: superproject & submodule mix

expecting success of 9300.91 'P: verbatim SHA gitlinks': 
	SUBLAST=$(git rev-parse --verify sub) &&
	SUBPREV=$(git rev-parse --verify sub^) &&

	cat >input <<-INPUT_END &&
	blob
	mark :1
	data <<DATAEND
	[submodule "sub"]
		path = sub
		url = "$(pwd)/sub"
	DATAEND

	commit refs/heads/subuse2
	mark :2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 8
	initial
	from refs/heads/main
	M 100644 :1 .gitmodules
	M 160000 $SUBPREV sub

	commit refs/heads/subuse2
	mark :3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 7
	second
	from :2
	M 160000 $SUBLAST sub

	INPUT_END

	git branch -D sub &&
	git gc &&
	git prune &&
	git fast-import <input &&
	test $(git rev-parse --verify subuse2) = $(git rev-parse --verify subuse1)

Deleted branch sub (was 51a3fee).
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         5 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         2 duplicates          0 deltas of          0 attempts)
      commits:            0 (         2 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         3 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 91 - P: verbatim SHA gitlinks

expecting success of 9300.92 'P: fail on inline gitlink': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/subuse3
	mark :1
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	corrupt
	COMMIT

	from refs/heads/subuse2
	M 160000 inline sub
	data <<DATA
	$SUBPREV
	DATA

	INPUT_END

	test_must_fail git fast-import <input

fatal: Git links cannot be specified 'inline': M 160000 inline sub
fast-import: dumping crash report to .git/fast_import_crash_15838
ok 92 - P: fail on inline gitlink

expecting success of 9300.93 'P: fail on blob mark in gitlink': 
	test_tick &&
	cat >input <<-INPUT_END &&
	blob
	mark :1
	data <<DATA
	$SUBPREV
	DATA

	commit refs/heads/subuse3
	mark :2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	corrupt
	COMMIT

	from refs/heads/subuse2
	M 160000 :1 sub

	INPUT_END

	test_must_fail git fast-import <input

fatal: Not a commit (actually a blob): M 160000 :1 sub
fast-import: dumping crash report to .git/fast_import_crash_15841
ok 93 - P: fail on blob mark in gitlink

expecting success of 9300.94 'Q: commit notes': 
	note1_data="The first note for the first commit" &&
	note2_data="The first note for the second commit" &&
	note3_data="The first note for the third commit" &&
	note1b_data="The second note for the first commit" &&
	note1c_data="The third note for the first commit" &&
	note2b_data="The second note for the second commit" &&

	test_tick &&
	cat >input <<-INPUT_END &&
	blob
	mark :2
	data <<EOF
	$file2_data
	EOF

	commit refs/heads/notes-test
	mark :3
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	first (:3)
	COMMIT

	M 644 :2 file2

	blob
	mark :4
	data $file4_len
	$file4_data
	commit refs/heads/notes-test
	mark :5
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	second (:5)
	COMMIT

	M 644 :4 file4

	commit refs/heads/notes-test
	mark :6
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	third (:6)
	COMMIT

	M 644 inline file5
	data <<EOF
	$file5_data
	EOF

	M 755 inline file6
	data <<EOF
	$file6_data
	EOF

	blob
	mark :7
	data <<EOF
	$note1_data
	EOF

	blob
	mark :8
	data <<EOF
	$note2_data
	EOF

	commit refs/notes/foobar
	mark :9
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	notes (:9)
	COMMIT

	N :7 :3
	N :8 :5
	N inline :6
	data <<EOF
	$note3_data
	EOF

	commit refs/notes/foobar
	mark :10
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	notes (:10)
	COMMIT

	N inline :3
	data <<EOF
	$note1b_data
	EOF

	commit refs/notes/foobar2
	mark :11
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	notes (:11)
	COMMIT

	N inline :3
	data <<EOF
	$note1c_data
	EOF

	commit refs/notes/foobar
	mark :12
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	notes (:12)
	COMMIT

	deleteall
	N inline :5
	data <<EOF
	$note2b_data
	EOF

	INPUT_END

	git fast-import <input &&
	git whatchanged notes-test

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           20 (         4 duplicates                  )
      blobs  :            6 (         4 duplicates          0 deltas of          5 attempts)
      trees  :            7 (         0 duplicates          3 deltas of          3 attempts)
      commits:            7 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           3 (         3 loads     )
      marks:           1024 (        11 unique    )
      atoms:              7
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       1857 /       1857
---------------------------------------------------------------------

commit 7aa420e73b93d5b69059a2ff8e850a2ed9411187
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:27:13 2005 -0700

    third (:6)

:000000 100644 0000000 fcf778c A	file5
:000000 100755 0000000 e74b7d4 A	file6

commit 42eaf85509b2f5a0e75780657349147fbd74b4f3
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:27:13 2005 -0700

    second (:5)

:000000 100644 0000000 85df507 A	file4

commit 08ee95cbee172e3f9b93ebbb501101ad3023d6ed
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:27:13 2005 -0700

    first (:3)

:000000 100644 0000000 7123f7f A	file2
ok 94 - Q: commit notes

expecting success of 9300.95 'Q: verify pack': 
	verify_packs

ok 95 - Q: verify pack

expecting success of 9300.96 'Q: verify first commit': 
	commit1=$(git rev-parse notes-test~2) &&
	commit2=$(git rev-parse notes-test^) &&
	commit3=$(git rev-parse notes-test) &&

	cat >expect <<-EOF &&
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	first (:3)
	EOF
	git cat-file commit notes-test~2 | sed 1d >actual &&
	test_cmp expect actual

ok 96 - Q: verify first commit

expecting success of 9300.97 'Q: verify second commit': 
	cat >expect <<-EOF &&
	parent $commit1
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	second (:5)
	EOF
	git cat-file commit notes-test^ | sed 1d >actual &&
	test_cmp expect actual

ok 97 - Q: verify second commit

expecting success of 9300.98 'Q: verify third commit': 
	cat >expect <<-EOF &&
	parent $commit2
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	third (:6)
	EOF
	git cat-file commit notes-test | sed 1d >actual &&
	test_cmp expect actual

ok 98 - Q: verify third commit

expecting success of 9300.99 'Q: verify first notes commit': 
	cat >expect <<-EOF &&
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	notes (:9)
	EOF
	git cat-file commit refs/notes/foobar~2 | sed 1d >actual &&
	test_cmp expect actual

ok 99 - Q: verify first notes commit

expecting success of 9300.100 'Q: verify first notes tree': 
	cat >expect.unsorted <<-EOF &&
	100644 blob $commit1
	100644 blob $commit2
	100644 blob $commit3
	EOF
	cat expect.unsorted | sort >expect &&
	git cat-file -p refs/notes/foobar~2^{tree} | sed "s/ [0-9a-f]*	/ /" >actual &&
	test_cmp expect actual

ok 100 - Q: verify first notes tree

expecting success of 9300.101 'Q: verify first note for first commit': 
	echo "$note1_data" >expect &&
	git cat-file blob refs/notes/foobar~2:$commit1 >actual &&
	test_cmp expect actual

ok 101 - Q: verify first note for first commit

expecting success of 9300.102 'Q: verify first note for second commit': 
	echo "$note2_data" >expect &&
	git cat-file blob refs/notes/foobar~2:$commit2 >actual &&
	test_cmp expect actual

ok 102 - Q: verify first note for second commit

expecting success of 9300.103 'Q: verify first note for third commit': 
	echo "$note3_data" >expect &&
	git cat-file blob refs/notes/foobar~2:$commit3 >actual &&
	test_cmp expect actual

ok 103 - Q: verify first note for third commit

expecting success of 9300.104 'Q: verify second notes commit': 
	cat >expect <<-EOF &&
	parent $(git rev-parse --verify refs/notes/foobar~2)
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	notes (:10)
	EOF
	git cat-file commit refs/notes/foobar^ | sed 1d >actual &&
	test_cmp expect actual

ok 104 - Q: verify second notes commit

expecting success of 9300.105 'Q: verify second notes tree': 
	cat >expect.unsorted <<-EOF &&
	100644 blob $commit1
	100644 blob $commit2
	100644 blob $commit3
	EOF
	cat expect.unsorted | sort >expect &&
	git cat-file -p refs/notes/foobar^^{tree} | sed "s/ [0-9a-f]*	/ /" >actual &&
	test_cmp expect actual

ok 105 - Q: verify second notes tree

expecting success of 9300.106 'Q: verify second note for first commit': 
	echo "$note1b_data" >expect &&
	git cat-file blob refs/notes/foobar^:$commit1 >actual &&
	test_cmp expect actual

ok 106 - Q: verify second note for first commit

expecting success of 9300.107 'Q: verify first note for second commit': 
	echo "$note2_data" >expect &&
	git cat-file blob refs/notes/foobar^:$commit2 >actual &&
	test_cmp expect actual

ok 107 - Q: verify first note for second commit

expecting success of 9300.108 'Q: verify first note for third commit': 
	echo "$note3_data" >expect &&
	git cat-file blob refs/notes/foobar^:$commit3 >actual &&
	test_cmp expect actual

ok 108 - Q: verify first note for third commit

expecting success of 9300.109 'Q: verify third notes commit': 
	cat >expect <<-EOF &&
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	notes (:11)
	EOF
	git cat-file commit refs/notes/foobar2 | sed 1d >actual &&
	test_cmp expect actual

ok 109 - Q: verify third notes commit

expecting success of 9300.110 'Q: verify third notes tree': 
	cat >expect.unsorted <<-EOF &&
	100644 blob $commit1
	EOF
	cat expect.unsorted | sort >expect &&
	git cat-file -p refs/notes/foobar2^{tree} | sed "s/ [0-9a-f]*	/ /" >actual &&
	test_cmp expect actual

ok 110 - Q: verify third notes tree

expecting success of 9300.111 'Q: verify third note for first commit': 
	echo "$note1c_data" >expect &&
	git cat-file blob refs/notes/foobar2:$commit1 >actual &&
	test_cmp expect actual

ok 111 - Q: verify third note for first commit

expecting success of 9300.112 'Q: verify fourth notes commit': 
	cat >expect <<-EOF &&
	parent $(git rev-parse --verify refs/notes/foobar^)
	author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE

	notes (:12)
	EOF
	git cat-file commit refs/notes/foobar | sed 1d >actual &&
	test_cmp expect actual

ok 112 - Q: verify fourth notes commit

expecting success of 9300.113 'Q: verify fourth notes tree': 
	cat >expect.unsorted <<-EOF &&
	100644 blob $commit2
	EOF
	cat expect.unsorted | sort >expect &&
	git cat-file -p refs/notes/foobar^{tree} | sed "s/ [0-9a-f]*	/ /" >actual &&
	test_cmp expect actual

ok 113 - Q: verify fourth notes tree

expecting success of 9300.114 'Q: verify second note for second commit': 
	echo "$note2b_data" >expect &&
	git cat-file blob refs/notes/foobar:$commit2 >actual &&
	test_cmp expect actual

ok 114 - Q: verify second note for second commit

expecting success of 9300.115 'Q: deny note on empty branch': 
	cat >input <<-EOF &&
	reset refs/heads/Q0

	commit refs/heads/note-Q0
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	Note for an empty branch.
	COMMIT

	N inline refs/heads/Q0
	data <<NOTE
	some note
	NOTE
	EOF
	test_must_fail git fast-import <input

fatal: Can't add a note on empty branch.
fast-import: dumping crash report to .git/fast_import_crash_15991
ok 115 - Q: deny note on empty branch

expecting success of 9300.116 'R: abort on unsupported feature': 
	cat >input <<-EOF &&
	feature no-such-feature-exists
	EOF

	test_must_fail git fast-import <input

fatal: This version of fast-import does not support feature no-such-feature-exists.
fast-import: dumping crash report to .git/fast_import_crash_15994
ok 116 - R: abort on unsupported feature

expecting success of 9300.117 'R: supported feature is accepted': 
	cat >input <<-EOF &&
	feature date-format=now
	EOF

	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 117 - R: supported feature is accepted

expecting success of 9300.118 'R: abort on receiving feature after data command': 
	cat >input <<-EOF &&
	blob
	data 3
	hi
	feature date-format=now
	EOF

	test_must_fail git fast-import <input

fatal: Got feature command 'date-format=now' after data command
fast-import: dumping crash report to .git/fast_import_crash_16007
ok 118 - R: abort on receiving feature after data command

expecting success of 9300.119 'R: import-marks features forbidden by default': 
	>git.marks &&
	echo "feature import-marks=git.marks" >input &&
	test_must_fail git fast-import <input &&
	echo "feature import-marks-if-exists=git.marks" >input &&
	test_must_fail git fast-import <input

fatal: feature 'import-marks' forbidden in input without --allow-unsafe-features
fast-import: dumping crash report to .git/fast_import_crash_16011
fatal: feature 'import-marks-if-exists' forbidden in input without --allow-unsafe-features
fast-import: dumping crash report to .git/fast_import_crash_16014
ok 119 - R: import-marks features forbidden by default

expecting success of 9300.120 'R: only one import-marks feature allowed per stream': 
	>git.marks &&
	>git2.marks &&
	cat >input <<-EOF &&
	feature import-marks=git.marks
	feature import-marks=git2.marks
	EOF

	test_must_fail git fast-import --allow-unsafe-features <input

fatal: Only one import-marks command allowed per stream
fast-import: dumping crash report to .git/fast_import_crash_16018
ok 120 - R: only one import-marks feature allowed per stream

expecting success of 9300.121 'R: export-marks feature forbidden by default': 
	echo "feature export-marks=git.marks" >input &&
	test_must_fail git fast-import <input

fatal: feature 'export-marks=git.marks' forbidden in input without --allow-unsafe-features
fast-import: dumping crash report to .git/fast_import_crash_16020
ok 121 - R: export-marks feature forbidden by default

expecting success of 9300.122 'R: export-marks feature results in a marks file being created': 
	cat >input <<-EOF &&
	feature export-marks=git.marks
	blob
	mark :1
	data 3
	hi

	EOF

	git fast-import --allow-unsafe-features <input &&
	grep :1 git.marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

:1 45b983be36b73c0788dc9cbcb76cbb80fc7bb057
ok 122 - R: export-marks feature results in a marks file being created

expecting success of 9300.123 'R: export-marks options can be overridden by commandline options': 
	cat >input <<-\EOF &&
	feature export-marks=feature-sub/git.marks
	blob
	mark :1
	data 3
	hi

	EOF
	git fast-import --allow-unsafe-features \
			--export-marks=cmdline-sub/other.marks <input &&
	grep :1 cmdline-sub/other.marks &&
	test_path_is_missing feature-sub

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

:1 45b983be36b73c0788dc9cbcb76cbb80fc7bb057
ok 123 - R: export-marks options can be overridden by commandline options

expecting success of 9300.124 'R: catch typo in marks file name': 
	test_must_fail git fast-import --import-marks=nonexistent.marks </dev/null &&
	echo "feature import-marks=nonexistent.marks" |
	test_must_fail git fast-import --allow-unsafe-features

fatal: cannot read 'nonexistent.marks': No such file or directory
fast-import: dumping crash report to .git/fast_import_crash_16032
fatal: cannot read 'nonexistent.marks': No such file or directory
fast-import: dumping crash report to .git/fast_import_crash_16036
ok 124 - R: catch typo in marks file name

expecting success of 9300.125 'R: import and output marks can be the same file': 
	rm -f io.marks &&
	blob=$(echo hi | git hash-object --stdin) &&
	cat >expect <<-EOF &&
	:1 $blob
	:2 $blob
	EOF
	git fast-import --export-marks=io.marks <<-\EOF &&
	blob
	mark :1
	data 3
	hi

	EOF
	git fast-import --import-marks=io.marks --export-marks=io.marks <<-\EOF &&
	blob
	mark :2
	data 3
	hi

	EOF
	test_cmp expect io.marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         2 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =         44 /         44
---------------------------------------------------------------------

ok 125 - R: import and output marks can be the same file

expecting success of 9300.126 'R: --import-marks=foo --output-marks=foo to create foo fails': 
	rm -f io.marks &&
	test_must_fail git fast-import --import-marks=io.marks --export-marks=io.marks <<-\EOF
	blob
	mark :1
	data 3
	hi

	EOF

fatal: cannot read 'io.marks': No such file or directory
fast-import: dumping crash report to .git/fast_import_crash_16058
ok 126 - R: --import-marks=foo --output-marks=foo to create foo fails

expecting success of 9300.127 'R: --import-marks-if-exists': 
	rm -f io.marks &&
	blob=$(echo hi | git hash-object --stdin) &&
	echo ":1 $blob" >expect &&
	git fast-import --import-marks-if-exists=io.marks --export-marks=io.marks <<-\EOF &&
	blob
	mark :1
	data 3
	hi

	EOF
	test_cmp expect io.marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 127 - R: --import-marks-if-exists

expecting success of 9300.128 'R: feature import-marks-if-exists': 
	rm -f io.marks &&

	git fast-import --export-marks=io.marks \
			--allow-unsafe-features <<-\EOF &&
	feature import-marks-if-exists=not_io.marks
	EOF
	test_must_be_empty io.marks &&

	blob=$(echo hi | git hash-object --stdin) &&

	echo ":1 $blob" >io.marks &&
	echo ":1 $blob" >expect &&
	echo ":2 $blob" >>expect &&

	git fast-import --export-marks=io.marks \
			--allow-unsafe-features <<-\EOF &&
	feature import-marks-if-exists=io.marks
	blob
	mark :2
	data 3
	hi

	EOF
	test_cmp expect io.marks &&

	echo ":3 $blob" >>expect &&

	git fast-import --import-marks=io.marks \
			--export-marks=io.marks \
			--allow-unsafe-features <<-\EOF &&
	feature import-marks-if-exists=not_io.marks
	blob
	mark :3
	data 3
	hi

	EOF
	test_cmp expect io.marks &&

	git fast-import --import-marks-if-exists=not_io.marks \
			--export-marks=io.marks \
			--allow-unsafe-features <<-\EOF &&
	feature import-marks-if-exists=io.marks
	EOF
	test_must_be_empty io.marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         2 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =         44 /         44
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         1 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         3 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =         44 /         44
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 128 - R: feature import-marks-if-exists

expecting success of 9300.129 'R: import to output marks works without any content': 
	cat >input <<-EOF &&
	feature import-marks=marks.out
	feature export-marks=marks.new
	EOF

	git fast-import --allow-unsafe-features <input &&
	test_cmp marks.out marks.new

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 129 - R: import to output marks works without any content

expecting success of 9300.130 'R: import marks prefers commandline marks file over the stream': 
	cat >input <<-EOF &&
	feature import-marks=nonexistent.marks
	feature export-marks=marks.new
	EOF

	git fast-import --import-marks=marks.out --allow-unsafe-features <input &&
	test_cmp marks.out marks.new

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 130 - R: import marks prefers commandline marks file over the stream

expecting success of 9300.131 'R: multiple --import-marks= should be honoured': 
	cat >input <<-EOF &&
	feature import-marks=nonexistent.marks
	feature export-marks=combined.marks
	EOF

	head -n2 marks.out > one.marks &&
	tail -n +3 marks.out > two.marks &&
	git fast-import --import-marks=one.marks --import-marks=two.marks \
		--allow-unsafe-features <input &&
	test_cmp marks.out combined.marks

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 131 - R: multiple --import-marks= should be honoured

expecting success of 9300.132 'R: feature relative-marks should be honoured': 
	cat >input <<-EOF &&
	feature relative-marks
	feature import-marks=relative.in
	feature export-marks=relative.out
	EOF

	mkdir -p .git/info/fast-import/ &&
	cp marks.new .git/info/fast-import/relative.in &&
	git fast-import --allow-unsafe-features <input &&
	test_cmp marks.new .git/info/fast-import/relative.out

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 132 - R: feature relative-marks should be honoured

expecting success of 9300.133 'R: feature no-relative-marks should be honoured': 
	cat >input <<-EOF &&
	feature relative-marks
	feature import-marks=relative.in
	feature no-relative-marks
	feature export-marks=non-relative.out
	EOF

	git fast-import --allow-unsafe-features <input &&
	test_cmp marks.new non-relative.out

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         7 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 133 - R: feature no-relative-marks should be honoured

expecting success of 9300.134 'R: feature ls supported': 
	echo "feature ls" |
	git fast-import

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 134 - R: feature ls supported

expecting success of 9300.135 'R: feature cat-blob supported': 
	echo "feature cat-blob" |
	git fast-import

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 135 - R: feature cat-blob supported

expecting success of 9300.136 'R: cat-blob-fd must be a nonnegative integer': 
	test_must_fail git fast-import --cat-blob-fd=-1 </dev/null

fatal: --cat-blob-fd: argument must be a non-negative integer
fast-import: dumping crash report to .git/fast_import_crash_16142
ok 136 - R: cat-blob-fd must be a nonnegative integer

expecting success of 9300.137 'R: print old blob': 
	blob=$(echo "yes it can" | git hash-object -w --stdin) &&
	cat >expect <<-EOF &&
	${blob} blob 11
	yes it can

	EOF
	echo "cat-blob $blob" |
	git fast-import --cat-blob-fd=6 6>actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 137 - R: print old blob

expecting success of 9300.138 'R: in-stream cat-blob-fd not respected': 
	echo hello >greeting &&
	blob=$(git hash-object -w greeting) &&
	cat >expect <<-EOF &&
	${blob} blob 6
	hello

	EOF
	git fast-import --cat-blob-fd=3 3>actual.3 >actual.1 <<-EOF &&
	cat-blob $blob
	EOF
	test_cmp expect actual.3 &&
	test_must_be_empty actual.1 &&
	git fast-import 3>actual.3 >actual.1 <<-EOF &&
	option cat-blob-fd=3
	cat-blob $blob
	EOF
	test_must_be_empty actual.3 &&
	test_cmp expect actual.1

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =       7993 /       7993
---------------------------------------------------------------------

ok 138 - R: in-stream cat-blob-fd not respected

expecting success of 9300.139 'R: print mark for new blob': 
	echo "effluentish" | git hash-object --stdin >expect &&
	git fast-import --cat-blob-fd=6 6>actual <<-\EOF &&
	blob
	mark :1
	data <<BLOB_END
	effluentish
	BLOB_END
	get-mark :1
	EOF
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 139 - R: print mark for new blob

expecting success of 9300.140 'R: print new blob': 
	blob=$(echo "yep yep yep" | git hash-object --stdin) &&
	cat >expect <<-EOF &&
	${blob} blob 12
	yep yep yep

	EOF
	git fast-import --cat-blob-fd=6 6>actual <<-\EOF &&
	blob
	mark :1
	data <<BLOB_END
	yep yep yep
	BLOB_END
	cat-blob :1
	EOF
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /         48
---------------------------------------------------------------------

ok 140 - R: print new blob

expecting success of 9300.141 'R: print new blob by sha1': 
	blob=$(echo "a new blob named by sha1" | git hash-object --stdin) &&
	cat >expect <<-EOF &&
	${blob} blob 25
	a new blob named by sha1

	EOF
	git fast-import --cat-blob-fd=6 6>actual <<-EOF &&
	blob
	data <<BLOB_END
	a new blob named by sha1
	BLOB_END
	cat-blob $blob
	EOF
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          1
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /         67
---------------------------------------------------------------------

ok 141 - R: print new blob by sha1

expecting success of 9300.142 'setup: big file': 
	(
		echo "the quick brown fox jumps over the lazy dog" >big &&
		for i in 1 2 3
		do
			cat big big big big >bigger &&
			cat bigger bigger bigger bigger >big ||
			exit
		done
	)

ok 142 - setup: big file

expecting success of 9300.143 'R: print two blobs to stdout': 
	blob1=$(git hash-object big) &&
	blob1_len=$(wc -c <big) &&
	blob2=$(echo hello | git hash-object --stdin) &&
	{
		echo ${blob1} blob $blob1_len &&
		cat big &&
		cat <<-EOF

		${blob2} blob 6
		hello

		EOF
	} >expect &&
	{
		cat <<-\END_PART1 &&
			blob
			mark :1
			data <<data_end
		END_PART1
		cat big &&
		cat <<-\EOF
			data_end
			blob
			mark :2
			data <<data_end
			hello
			data_end
			cat-blob :1
			cat-blob :2
		EOF
	} |
	git fast-import >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            1 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         2 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          2
pack_report: pack_mapped              =       7993 /       8618
---------------------------------------------------------------------

ok 143 - R: print two blobs to stdout

expecting success of 9300.144 'R: copy using cat-file': 
	expect_id=$(git hash-object big) &&
	expect_len=$(wc -c <big) &&
	echo $expect_id blob $expect_len >expect.response &&

	rm -f blobs &&

	mkfifo blobs &&
	(
		export GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE &&
		cat <<-\EOF &&
		feature cat-blob
		blob
		mark :1
		data <<BLOB
		EOF
		cat big &&
		cat <<-\EOF &&
		BLOB
		cat-blob :1
		EOF

		read blob_id type size <&3 &&
		echo "$blob_id $type $size" >response &&
		test_copy_bytes $size >blob <&3 &&
		read newline <&3 &&

		cat <<-EOF &&
		commit refs/heads/copied
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		copy big file as file3
		COMMIT
		M 644 inline file3
		data <<BLOB
		EOF
		cat blob &&
		echo BLOB
	) 3<blobs |
	git fast-import --cat-blob-fd=3 3>blobs &&
	git show copied:file3 >actual &&
	test_cmp expect.response response &&
	test_cmp big actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         2 duplicates                  )
      blobs  :            0 (         2 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          3
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        830 /        830
---------------------------------------------------------------------

ok 144 - R: copy using cat-file

expecting success of 9300.145 'R: print blob mid-commit': 
	rm -f blobs &&
	echo "A blob from _before_ the commit." >expect &&
	mkfifo blobs &&
	(
		exec 3<blobs &&
		cat <<-EOF &&
		feature cat-blob
		blob
		mark :1
		data <<BLOB
		A blob from _before_ the commit.
		BLOB
		commit refs/heads/temporary
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		Empty commit
		COMMIT
		cat-blob :1
		EOF

		read blob_id type size <&3 &&
		test_copy_bytes $size >actual <&3 &&
		read newline <&3 &&

		echo
	) |
	git fast-import --cat-blob-fd=3 3>blobs &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         1 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          3
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        198 /        198
---------------------------------------------------------------------

ok 145 - R: print blob mid-commit

expecting success of 9300.146 'R: print staged blob within commit': 
	rm -f blobs &&
	echo "A blob from _within_ the commit." >expect &&
	mkfifo blobs &&
	(
		exec 3<blobs &&
		cat <<-EOF &&
		feature cat-blob
		commit refs/heads/within
		committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
		data <<COMMIT
		Empty commit
		COMMIT
		M 644 inline within
		data <<BLOB
		A blob from _within_ the commit.
		BLOB
		EOF

		to_get=$(
			echo "A blob from _within_ the commit." |
			git hash-object --stdin
		) &&
		echo "cat-blob $to_get" &&

		read blob_id type size <&3 &&
		test_copy_bytes $size >actual <&3 &&
		read newline <&3 &&

		echo deleteall
	) |
	git fast-import --cat-blob-fd=3 3>blobs &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         2 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          3
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        198 /        198
---------------------------------------------------------------------

ok 146 - R: print staged blob within commit

expecting success of 9300.147 'R: quiet option results in no stats being output': 
	cat >input <<-EOF &&
	option git quiet
	blob
	data 3
	hi

	EOF

	git fast-import 2>output <input &&
	test_must_be_empty output

ok 147 - R: quiet option results in no stats being output

expecting success of 9300.148 'R: feature done means terminating "done" is mandatory': 
	echo feature done | test_must_fail git fast-import &&
	test_must_fail git fast-import --done </dev/null

fatal: stream ends early
fast-import: dumping crash report to .git/fast_import_crash_16298
fatal: stream ends early
fast-import: dumping crash report to .git/fast_import_crash_16303
ok 148 - R: feature done means terminating "done" is mandatory

expecting success of 9300.149 'R: terminating "done" with trailing gibberish is ok': 
	git fast-import <<-\EOF &&
	feature done
	done
	trailing gibberish
	EOF
	git fast-import <<-\EOF
	done
	more trailing gibberish
	EOF

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 149 - R: terminating "done" with trailing gibberish is ok

expecting success of 9300.150 'R: terminating "done" within commit': 
	cat >expect <<-\EOF &&
	OBJID
	:000000 100644 OBJID OBJID A	hello.c
	:000000 100644 OBJID OBJID A	hello2.c
	EOF
	git fast-import <<-EOF &&
	commit refs/heads/done-ends
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<EOT
	Commit terminated by "done" command
	EOT
	M 100644 inline hello.c
	data <<EOT
	Hello, world.
	EOT
	C hello.c hello2.c
	done
	EOF
	git rev-list done-ends |
	git diff-tree -r --stdin --root --always |
	sed -e "s/$OID_REGEX/OBJID/g" >actual &&
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        245 /        245
---------------------------------------------------------------------

ok 150 - R: terminating "done" within commit

expecting success of 9300.151 'R: die on unknown option': 
	cat >input <<-EOF &&
	option git non-existing-option
	EOF

	test_must_fail git fast-import <input

fatal: This version of fast-import does not support option: non-existing-option
fast-import: dumping crash report to .git/fast_import_crash_16346
ok 151 - R: die on unknown option

expecting success of 9300.152 'R: unknown commandline options are rejected': \
	test_must_fail git fast-import --non-existing-option < /dev/null

fatal: unknown option --non-existing-option
fast-import: dumping crash report to .git/fast_import_crash_16356
ok 152 - R: unknown commandline options are rejected

expecting success of 9300.153 'R: die on invalid option argument': 
	echo "option git active-branches=-5" |
	test_must_fail git fast-import &&
	echo "option git depth=" |
	test_must_fail git fast-import &&
	test_must_fail git fast-import --depth="5 elephants" </dev/null

fatal: --active-branches: argument must be a non-negative integer
fast-import: dumping crash report to .git/fast_import_crash_16373
fatal: --depth: argument must be a non-negative integer
fast-import: dumping crash report to .git/fast_import_crash_16387
fatal: --depth: argument must be a non-negative integer
fast-import: dumping crash report to .git/fast_import_crash_16388
ok 153 - R: die on invalid option argument

expecting success of 9300.154 'R: ignore non-git options': 
	cat >input <<-EOF &&
	option non-existing-vcs non-existing-option
	EOF

	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 154 - R: ignore non-git options

expecting success of 9300.155 'R: corrupt lines do not mess marks file': 
	rm -f io.marks &&
	blob=$(echo hi | git hash-object --stdin) &&
	cat >expect <<-EOF &&
	:3 $ZERO_OID
	:1 $blob
	:2 $blob
	EOF
	cp expect io.marks &&
	test_must_fail git fast-import --import-marks=io.marks --export-marks=io.marks <<-\EOF &&

	EOF
	test_cmp expect io.marks

fatal: object not found: 0000000000000000000000000000000000000000
fast-import: dumping crash report to .git/fast_import_crash_16401
ok 155 - R: corrupt lines do not mess marks file

expecting success of 9300.156 'R: blob bigger than threshold': 
	blobsize=$((2*1024*1024 + 53)) &&
	test-tool genrandom bar $blobsize >expect &&
	cat >input <<-INPUT_END &&
	commit refs/heads/big-file
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	R - big file
	COMMIT

	M 644 inline big1
	data $blobsize
	INPUT_END
	cat expect >>input &&
	cat >>input <<-INPUT_END &&
	M 644 inline big2
	data $blobsize
	INPUT_END
	cat expect >>input &&
	echo >>input &&

	test_create_repo R &&
	git --git-dir=R/.git config fastimport.unpackLimit 0 &&
	git --git-dir=R/.git fast-import --big-file-threshold=1 <input

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/R/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         1 duplicates                  )
      blobs  :            1 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =    2098060 /    2098060
---------------------------------------------------------------------

ok 156 - R: blob bigger than threshold

expecting success of 9300.157 'R: verify created pack': 
	(
		cd R &&
		verify_packs -v > ../verify
	)

ok 157 - R: verify created pack

expecting success of 9300.158 'R: verify written objects': 
	git --git-dir=R/.git cat-file blob big-file:big1 >actual &&
	test_cmp_bin expect actual &&
	a=$(git --git-dir=R/.git rev-parse big-file:big1) &&
	b=$(git --git-dir=R/.git rev-parse big-file:big2) &&
	test $a = $b

ok 158 - R: verify written objects

expecting success of 9300.159 'R: blob appears only once': 
	n=$(grep $a verify | wc -l) &&
	test 1 = $n

ok 159 - R: blob appears only once

expecting success of 9300.160 'S: initialize for S tests': 
	test_tick &&

	cat >input <<-INPUT_END &&
	commit refs/heads/S
	mark :301
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit 1
	COMMIT
	M 100644 inline hello.c
	data <<BLOB
	blob 1
	BLOB

	commit refs/heads/S
	mark :302
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit 2
	COMMIT
	from :301
	M 100644 inline hello.c
	data <<BLOB
	blob 2
	BLOB

	blob
	mark :403
	data <<BLOB
	blob 3
	BLOB

	blob
	mark :202
	data <<BLOB
	note 2
	BLOB
	INPUT_END

	git fast-import --export-marks=marks <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            8 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        453 /        453
---------------------------------------------------------------------

ok 160 - S: initialize for S tests

expecting success of 9300.161 'S: filemodify with garbage after mark must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit N
	COMMIT
	M 100644 :403x hello.c
	EOF
	test_i18ngrep "space after mark" err

fatal: Missing space after mark: M 100644 :403x hello.c
ok 161 - S: filemodify with garbage after mark must fail

expecting success of 9300.162 'S: filemodify with garbage after inline must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit N
	COMMIT
	M 100644 inlineX hello.c
	data <<BLOB
	inline
	BLOB
	EOF
	test_i18ngrep "nvalid dataref" err

fatal: Invalid dataref: M 100644 inlineX hello.c
ok 162 - S: filemodify with garbage after inline must fail

expecting success of 9300.163 'S: filemodify with garbage after sha1 must fail': 
	sha1=$(grep :403 marks | cut -d\  -f2) &&
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit N
	COMMIT
	M 100644 ${sha1}x hello.c
	EOF
	test_i18ngrep "space after SHA1" err

fatal: Missing space after SHA1: M 100644 f4b9ac379fda0ad3560620918bf73440e46eeb8cx hello.c
ok 163 - S: filemodify with garbage after sha1 must fail

expecting success of 9300.164 'S: notemodify with garbage after mark dataref must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit S note dataref markref
	COMMIT
	N :202x :302
	EOF
	test_i18ngrep "space after mark" err

fatal: Missing space after mark: N :202x :302
ok 164 - S: notemodify with garbage after mark dataref must fail

expecting success of 9300.165 'S: notemodify with garbage after inline dataref must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit S note dataref inline
	COMMIT
	N inlineX :302
	data <<BLOB
	note blob
	BLOB
	EOF
	test_i18ngrep "nvalid dataref" err

fatal: Invalid dataref: N inlineX :302
ok 165 - S: notemodify with garbage after inline dataref must fail

expecting success of 9300.166 'S: notemodify with garbage after sha1 dataref must fail': 
	sha1=$(grep :202 marks | cut -d\  -f2) &&
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit S note dataref sha1
	COMMIT
	N ${sha1}x :302
	EOF
	test_i18ngrep "space after SHA1" err

fatal: Missing space after SHA1: N d2f48fdae4e23fc19cf4a8454054695714188709x :302
ok 166 - S: notemodify with garbage after sha1 dataref must fail

expecting success of 9300.167 'S: notemodify with garbage after mark commit-ish must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/Snotes
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit S note commit-ish
	COMMIT
	N :202 :302x
	EOF
	test_i18ngrep "after mark" err

fatal: Garbage after mark: N :202 :302x
ok 167 - S: notemodify with garbage after mark commit-ish must fail

expecting success of 9300.168 'S: from with garbage after mark must fail': 
	test_must_fail \
	git fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err &&
	commit refs/heads/S2
	mark :303
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit 3
	COMMIT
	from :301x
	M 100644 :403 hello.c
	EOF


	# go create the commit, need it for merge test
	git fast-import --import-marks=marks --export-marks=marks <<-EOF &&
	commit refs/heads/S2
	mark :303
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	commit 3
	COMMIT
	from :301
	M 100644 :403 hello.c
	EOF

	# now evaluate the error
	test_i18ngrep "after mark" err

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         5 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        678 /        678
---------------------------------------------------------------------

fatal: Garbage after mark: from :301x
ok 168 - S: from with garbage after mark must fail

expecting success of 9300.169 'S: merge with garbage after mark must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	commit refs/heads/S
	mark :304
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	merge 4
	COMMIT
	from :302
	merge :303x
	M 100644 :403 hello.c
	EOF
	test_i18ngrep "after mark" err

fatal: Garbage after mark: merge :303x
ok 169 - S: merge with garbage after mark must fail

expecting success of 9300.170 'S: tag with garbage after mark must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	tag refs/tags/Stag
	from :302x
	tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<TAG
	tag S
	TAG
	EOF
	test_i18ngrep "after mark" err

fatal: Garbage after mark: from :302x
ok 170 - S: tag with garbage after mark must fail

expecting success of 9300.171 'S: cat-blob with garbage after mark must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	cat-blob :403x
	EOF
	test_i18ngrep "after mark" err

fatal: Garbage after mark: cat-blob :403x
ok 171 - S: cat-blob with garbage after mark must fail

expecting success of 9300.172 'S: ls with garbage after mark must fail': 
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	ls :302x hello.c
	EOF
	test_i18ngrep "space after mark" err

fatal: Missing space after mark: ls :302x hello.c
ok 172 - S: ls with garbage after mark must fail

expecting success of 9300.173 'S: ls with garbage after sha1 must fail': 
	sha1=$(grep :302 marks | cut -d\  -f2) &&
	test_must_fail git fast-import --import-marks=marks <<-EOF 2>err &&
	ls ${sha1}x hello.c
	EOF
	test_i18ngrep "space after tree-ish" err

fatal: Missing space after tree-ish: ls 09b8212d623219bb80c949d5065e559b231d90adx hello.c
ok 173 - S: ls with garbage after sha1 must fail

expecting success of 9300.174 'T: ls root tree': 
	sed -e "s/Z\$//" >expect <<-EOF &&
	040000 tree $(git rev-parse S^{tree})	Z
	EOF
	sha1=$(git rev-parse --verify S) &&
	git fast-import --import-marks=marks <<-EOF >actual &&
	ls $sha1 ""
	EOF
	test_cmp expect actual

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         5 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        678 /        678
---------------------------------------------------------------------

ok 174 - T: ls root tree

expecting success of 9300.175 'T: delete branch': 
	git branch to-delete &&
	git fast-import <<-EOF &&
	reset refs/heads/to-delete
	from $ZERO_OID
	EOF
	test_must_fail git rev-parse --verify refs/heads/to-delete

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fatal: Needed a single revision
ok 175 - T: delete branch

expecting success of 9300.176 'T: empty reset doesnt delete branch': 
	git branch not-to-delete &&
	git fast-import <<-EOF &&
	reset refs/heads/not-to-delete
	EOF
	git show-ref &&
	git rev-parse --verify refs/heads/not-to-delete

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

8c1bf1b9f891df8805c27a54986e5043829939ad refs/heads/H
45b12606bd487d1bc687864db7641b9bfd4ddcd0 refs/heads/J
c85b9f480bbc2f7616de78fc96c08204e0f5b70e refs/heads/K
8cecdab6b3e4062de5b06ad3accf5bff1449e99b refs/heads/L
7144e0bde79efa21349b6a09f1b68b74e59da773 refs/heads/M1
0641406b2b83a2c327e6950aa51f13010fe647b1 refs/heads/M2
b258d10cb71ac72904c40ef2d07b67e3f444ce19 refs/heads/M3
afc4da065d1be07543ab49500b355f7342f5a0bf refs/heads/M4
d80c4052a8e9a163f90de3fa74ec993595d7f0b3 refs/heads/N-copy-root-path
d3d6f982387839292885129c8f925f0437fe8f8f refs/heads/N-delete
3a992f7db92c8513f272cb38ecd20b1891ea3618 refs/heads/N1
c5e590066ca8fc360460c8c12cb33cb852fe8d0e refs/heads/N10
0d366d7b90432787294f20469f92247cd2951e56 refs/heads/N11
feb51e70222384549d211ed8556032a4d8de86d5 refs/heads/N2
c9fa8f49cd89b0c79e2653acbf382fc67897cacc refs/heads/N3
9d4aea7a2664059c10686d61ddd966f87bb2e5e1 refs/heads/N4
72ab72aa5baed6139c0e3d8e970743a3b95c04ff refs/heads/N5
0cc1189ab86929904ba103aecb7d99a9f4ceefb0 refs/heads/N6
94c8d03670e041ed0d66ff5434e05078c76fe308 refs/heads/N7
6377394cead24e0a81b85518dd6aae87af60b2d5 refs/heads/N8
50a2b9031b6d523dbb219a9618b84e771592ce06 refs/heads/N9
c9fa8f49cd89b0c79e2653acbf382fc67897cacc refs/heads/O1
c9fa8f49cd89b0c79e2653acbf382fc67897cacc refs/heads/O2
5fda0e679bf57704417152105e584e0a694c013c refs/heads/O3
5fda0e679bf57704417152105e584e0a694c013c refs/heads/O4
09b8212d623219bb80c949d5065e559b231d90ad refs/heads/S
08ce2f4d8b480172783d3891735f90a7d7e00607 refs/heads/S2
f9eb178a57581c4b6ee59a2a22ee91689c065e26 refs/heads/branch
e539ffaa4ddf139e244fadc551da26e24df78619 refs/heads/copied
c04abfe6415075f472cd37c5c8655c105f9934e6 refs/heads/done-ends
d892dc32fa7a52ea3a397cfc4449e9df8a39becf refs/heads/export-boundary
5ba2d0485e3e071f4ccbfdb22c474b305ebd159c refs/heads/main
994b824fbe51b899f546383c3ba14a28a07c1022 refs/heads/new_blob
73bbab5b9021e6d6ff11745489342b854ee08c92 refs/heads/not-to-delete
7aa420e73b93d5b69059a2ff8e850a2ed9411187 refs/heads/notes-test
fb7baf16109664b6b1d3b3c98d6c252fa7051ae5 refs/heads/other
e908a53cdb6af68565f1b355f92ce0fc768a58b1 refs/heads/read-empty
73bbab5b9021e6d6ff11745489342b854ee08c92 refs/heads/subuse1
73bbab5b9021e6d6ff11745489342b854ee08c92 refs/heads/subuse2
65eaf13fb93713eb9d3f5e4e899ade4effc77e3e refs/heads/temporary
6b33e55cd592e91710d6c0afef1b0e6e3406a2a7 refs/heads/verify--dump-marks
ac2b62088fe0283163c00fa7856bcd0489cf30de refs/heads/verify--import-marks
65eaf13fb93713eb9d3f5e4e899ade4effc77e3e refs/heads/within
b8613b3cac8d5f3f8aecc431636e4c27c64699dc refs/notes/foobar
e684625a6e98f3faaa87d19d490e005e375de0e3 refs/notes/foobar2
c713cf4a9446ade70da02a4734370997de4d36e6 refs/tags/O3-2nd
c713cf4a9446ade70da02a4734370997de4d36e6 refs/tags/O3-3rd
0e22025f0f5cea5d83b68c3dc9fc334571f7196c refs/tags/nested
103553a16e02d76e288cec0f76240f1ad97caeb9 refs/tags/series-A
42d861d649a1b87eb8083ad1d94d9220ecf2c35f refs/tags/series-A-blob
3750af27267cae07dd3f8b7a9aac2291e374a66a refs/tags/series-A-blob-2
56c14ce987117cf2e391ebef3dbab65e4c1ed202 refs/tags/series-A-blob-3
73bbab5b9021e6d6ff11745489342b854ee08c92
ok 176 - T: empty reset doesnt delete branch

expecting success of 9300.177 'U: initialize for U tests': 
	cat >input <<-INPUT_END &&
	commit refs/heads/U
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	test setup
	COMMIT
	M 100644 inline hello.c
	data <<BLOB
	blob 1
	BLOB
	M 100644 inline good/night.txt
	data <<BLOB
	sleep well
	BLOB
	M 100644 inline good/bye.txt
	data <<BLOB
	au revoir
	BLOB

	INPUT_END

	f7id=$(echo "blob 1" | git hash-object --stdin) &&
	f8id=$(echo "sleep well" | git hash-object --stdin) &&
	f9id=$(echo "au revoir" | git hash-object --stdin) &&
	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         1 duplicates                  )
      blobs  :            2 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        348 /        348
---------------------------------------------------------------------

ok 177 - U: initialize for U tests

expecting success of 9300.178 'U: filedelete file succeeds': 
	cat >input <<-INPUT_END &&
	commit refs/heads/U
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	delete good/night.txt
	COMMIT
	from refs/heads/U^0
	D good/night.txt

	INPUT_END

	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          7
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        660 /        660
---------------------------------------------------------------------

ok 178 - U: filedelete file succeeds

expecting success of 9300.179 'U: validate file delete result': 
	cat >expect <<-EOF &&
	:100644 000000 $f8id $ZERO_OID D	good/night.txt
	EOF

	git diff-tree -M -r U^1 U >actual &&

	compare_diff_raw expect actual

ok 179 - U: validate file delete result

expecting success of 9300.180 'U: filedelete directory succeeds': 
	cat >input <<-INPUT_END &&
	commit refs/heads/U
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	delete good dir
	COMMIT
	from refs/heads/U^0
	D good

	INPUT_END

	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          2 /          2
pack_report: pack_mapped              =        498 /        498
---------------------------------------------------------------------

ok 180 - U: filedelete directory succeeds

expecting success of 9300.181 'U: validate directory delete result': 
	cat >expect <<-EOF &&
	:100644 000000 $f9id $ZERO_OID D	good/bye.txt
	EOF

	git diff-tree -M -r U^1 U >actual &&

	compare_diff_raw expect actual

ok 181 - U: validate directory delete result

expecting success of 9300.182 'U: filedelete root succeeds': 
	cat >input <<-INPUT_END &&
	commit refs/heads/U
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data <<COMMIT
	must succeed
	COMMIT
	from refs/heads/U^0
	D ""

	INPUT_END

	git fast-import <input

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          3 /          3
pack_report: pack_mapped              =        824 /        824
---------------------------------------------------------------------

ok 182 - U: filedelete root succeeds

expecting success of 9300.183 'U: validate root delete result': 
	cat >expect <<-EOF &&
	:100644 000000 $f7id $ZERO_OID D	hello.c
	EOF

	git diff-tree -M -r U^1 U >actual &&

	compare_diff_raw expect actual

ok 183 - U: validate root delete result

expecting success of 9300.184 'V: checkpoint helper does not get stuck with extra output': 
	cat >input <<-INPUT_END &&
	progress foo
	progress bar

	INPUT_END

	background_import_then_checkpoint "" input &&
	background_import_still_running

cruft: progress foo
cruft: progress bar
Terminated
ok 184 - V: checkpoint helper does not get stuck with extra output

expecting success of 9300.185 'V: checkpoint updates refs after reset': 
	cat >input <<-\INPUT_END &&
	reset refs/heads/V
	from refs/heads/U

	INPUT_END

	background_import_then_checkpoint "" input &&
	test "$(git rev-parse --verify V)" = "$(git rev-parse --verify U)" &&
	background_import_still_running

Terminated
ok 185 - V: checkpoint updates refs after reset

expecting success of 9300.186 'V: checkpoint updates refs and marks after commit': 
	cat >input <<-INPUT_END &&
	commit refs/heads/V
	mark :1
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 0
	from refs/heads/U

	INPUT_END

	background_import_then_checkpoint "--export-marks=marks.actual" input &&

	echo ":1 $(git rev-parse --verify V)" >marks.expected &&

	test "$(git rev-parse --verify V^)" = "$(git rev-parse --verify U)" &&
	test_cmp marks.expected marks.actual &&
	background_import_still_running

Terminated
ok 186 - V: checkpoint updates refs and marks after commit

expecting success of 9300.187 'V: checkpoint updates refs and marks after commit (no new objects)': 
	cat >input <<-INPUT_END &&
	commit refs/heads/V2
	mark :2
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 0
	from refs/heads/U

	INPUT_END

	background_import_then_checkpoint "--export-marks=marks.actual" input &&

	echo ":2 $(git rev-parse --verify V2)" >marks.expected &&

	test "$(git rev-parse --verify V2)" = "$(git rev-parse --verify V)" &&
	test_cmp marks.expected marks.actual &&
	background_import_still_running

Terminated
ok 187 - V: checkpoint updates refs and marks after commit (no new objects)

expecting success of 9300.188 'V: checkpoint updates tags after tag': 
	cat >input <<-INPUT_END &&
	tag Vtag
	from refs/heads/V
	tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 0

	INPUT_END

	background_import_then_checkpoint "" input &&
	git show-ref -d Vtag &&
	background_import_still_running

9e8ae085ab21a4ffaf0454b51c462f6da003a890 refs/tags/Vtag
36ba7a20a3519e8f29c55433436e0cdff8a48b97 refs/tags/Vtag^{}
Terminated
ok 188 - V: checkpoint updates tags after tag

expecting success of 9300.189 'W: get-mark & empty orphan commit with no newlines': 
	sed -e s/LFs// W-input | tr L "\n" | git fast-import

b5522bde54855bd5378728a9119bd1941276b996
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        161 /        161
---------------------------------------------------------------------

ok 189 - W: get-mark & empty orphan commit with no newlines

expecting success of 9300.190 'W: get-mark & empty orphan commit with one newline': 
	sed -e s/LFs/L/ W-input | tr L "\n" | git fast-import

b5522bde54855bd5378728a9119bd1941276b996
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         2 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        161 /        161
---------------------------------------------------------------------

ok 190 - W: get-mark & empty orphan commit with one newline

expecting success of 9300.191 'W: get-mark & empty orphan commit with ugly second newline': 
	# Technically, this should fail as it has too many linefeeds
	# according to the grammar in fast-import.txt.  But, for whatever
	# reason, it works.  Since using the correct number of newlines
	# does not work with older (pre-2.22) versions of git, allow apps
	# that used this second-newline workaround to keep working by
	# checking it with this test...
	sed -e s/LFs/LL/ W-input | tr L "\n" | git fast-import

b5522bde54855bd5378728a9119bd1941276b996
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         2 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         1 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        161 /        161
---------------------------------------------------------------------

ok 191 - W: get-mark & empty orphan commit with ugly second newline

expecting success of 9300.192 'W: get-mark & empty orphan commit with erroneous third newline': 
	# ...but do NOT allow more empty lines than that (see previous test).
	sed -e s/LFs/LLL/ W-input | tr L "\n" | test_must_fail git fast-import

fatal: Unsupported command: 
fast-import: dumping crash report to .git/fast_import_crash_17860
ok 192 - W: get-mark & empty orphan commit with erroneous third newline

expecting success of 9300.193 'X: handling encoding': 
	test_tick &&
	cat >input <<-INPUT_END &&
	commit refs/heads/encoding
	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	encoding iso-8859-7
	data <<COMMIT
	INPUT_END

	printf "Pi: \360\nCOMMIT\n" >>input &&

	git fast-import <input &&
	git cat-file -p encoding | grep $(printf "\360") &&
	git log -1 --format=%B encoding | grep $(printf "\317\200")

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         1 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         1 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          2
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =        169 /        169
---------------------------------------------------------------------

Pi: π
ok 193 - X: handling encoding

expecting success of 9300.194 'Y: setup': 
	test_oid_cache <<-EOF
	Ymain sha1:9afed2f9161ddf416c0a1863b8b0725b00070504
	Ymain sha256:c0a1010da1df187b2e287654793df01b464bd6f8e3f17fc1481a7dadf84caee3
	EOF

ok 194 - Y: setup

expecting success of 9300.195 'Y: rewrite submodules': 
	git init main1 &&
	(
		cd main1 &&
		git init sub2 &&
		git -C sub2 fast-import --export-marks=../sub2-marks <../Y-sub-input &&
		git fast-import --rewrite-submodules-from=sub:../Y-marks \
			--rewrite-submodules-to=sub:sub2-marks <../Y-main-input &&
		test "$(git rev-parse main)" = "$(test_oid Ymain)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/main1/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9300-fast-import/main1/sub2/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            9 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            3 (         0 duplicates          2 deltas of          2 attempts)
      commits:            3 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (        12 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 195 - Y: rewrite submodules

# passed all 195 test(s)
1..195
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9304-fast-import-marks.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9304-fast-import-marks/.git/
expecting success of 9304.1 'setup dump of basic history': 
	test_commit one &&
	git fast-export --export-marks=marks HEAD >dump

[master (root-commit) d79ce16] one
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 one.t
ok 1 - setup dump of basic history

expecting success of 9304.2 'setup large marks file': 
	# normally a marks file would have a lot of useful, unique
	# marks. But for our purposes, just having a lot of nonsense
	# ones is fine. Start at 1024 to avoid clashing with marks
	# legitimately used in our tiny dump.
	blob=$(git rev-parse HEAD:one.t) &&
	for i in $(test_seq 1024 16384)
	do
		echo ":$i $blob" || return 1
	done >>marks

ok 2 - setup large marks file

expecting success of 9304.3 'import with large marks file': 
	git fast-import --import-marks=marks <dump

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         2 duplicates                  )
      blobs  :            0 (         1 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         1 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:        1048576 (     15363 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 3 - import with large marks file

expecting success of 9304.4 'setup dump with submodule': 
	test_config_global protocol.file.allow always &&
	git submodule add "$PWD" sub &&
	git commit -m "add submodule" &&
	git fast-export HEAD >dump

Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t9304-fast-import-marks/sub'...
done.
[master 087572e] add submodule
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
ok 4 - setup dump with submodule

expecting success of 9304.5 'setup submodule mapping with large id': 
	old=$(git rev-parse HEAD:sub) &&
	new=$(echo $old | sed s/./a/g) &&
	echo ":12345 $old" >from &&
	echo ":12345 $new" >to

ok 5 - setup submodule mapping with large id

expecting success of 9304.6 'import with submodule mapping': 
	git init dst &&
	git -C dst fast-import \
		--rewrite-submodules-from=sub:../from \
		--rewrite-submodules-to=sub:../to \
		<dump &&
	git -C dst rev-parse HEAD:sub >actual &&
	echo "$new" >expect &&
	test_cmp expect actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9304-fast-import-marks/dst/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         6 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 6 - import with submodule mapping

# passed all 6 test(s)
1..6
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9303-fast-import-compression.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9303-fast-import-compression/.git/
expecting success of 9303.1 'fast-import (packed) with -c core.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 1 - fast-import (packed) with -c core.compression=0

expecting success of 9303.2 'fast-import (packed) with -c core.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 2 - fast-import (packed) with -c core.compression=9

expecting success of 9303.3 'fast-import (packed) with -c core.compression=0 -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 3 - fast-import (packed) with -c core.compression=0 -c pack.compression=0

expecting success of 9303.4 'fast-import (packed) with -c core.compression=9 -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 4 - fast-import (packed) with -c core.compression=9 -c pack.compression=0

expecting success of 9303.5 'fast-import (packed) with -c core.compression=0 -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 5 - fast-import (packed) with -c core.compression=0 -c pack.compression=9

expecting success of 9303.6 'fast-import (packed) with -c core.compression=9 -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 6 - fast-import (packed) with -c core.compression=9 -c pack.compression=9

expecting success of 9303.7 'fast-import (packed) with -c pack.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 7 - fast-import (packed) with -c pack.compression=0

expecting success of 9303.8 'fast-import (packed) with -c pack.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=0 $config &&
		sz=$(test_file_size .git/objects/pack/pack-*.pack) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 8 - fast-import (packed) with -c pack.compression=9

expecting success of 9303.9 'fast-import (loose) with -c core.compression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 9 - fast-import (loose) with -c core.compression=0

expecting success of 9303.10 'fast-import (loose) with -c core.compression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 10 - fast-import (loose) with -c core.compression=9

expecting success of 9303.11 'fast-import (loose) with -c core.compression=0 -c core.loosecompression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 11 - fast-import (loose) with -c core.compression=0 -c core.loosecompression=0

expecting success of 9303.12 'fast-import (loose) with -c core.compression=9 -c core.loosecompression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 12 - fast-import (loose) with -c core.compression=9 -c core.loosecompression=0

expecting success of 9303.13 'fast-import (loose) with -c core.compression=0 -c core.loosecompression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 13 - fast-import (loose) with -c core.compression=0 -c core.loosecompression=9

expecting success of 9303.14 'fast-import (loose) with -c core.compression=9 -c core.loosecompression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 14 - fast-import (loose) with -c core.compression=9 -c core.loosecompression=9

expecting success of 9303.15 'fast-import (loose) with -c core.loosecompression=0': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 15 - fast-import (loose) with -c core.loosecompression=0

expecting success of 9303.16 'fast-import (loose) with -c core.loosecompression=9': 
		test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
		test_when_finished "rm -rf .git/objects/??" &&
		import_large -c fastimport.unpacklimit=9 $config &&
		sz=$(test_file_size .git/objects/??/????*) &&
		case "$expect" in
		small) test "$sz" -le 100000 ;;
		large) test "$sz" -ge 100000 ;;
		esac
	
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 16 - fast-import (loose) with -c core.loosecompression=9

# passed all 16 test(s)
1..16
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9168-git-svn-partially-globbed-names.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9168-git-svn-partially-globbed-names/.git/
expecting success of 9168.1 'prepare test refspec prefixed globbing': 
	cat >expect.end <<EOF
the end
hi
start a new branch
initial
EOF
	
ok 1 - prepare test refspec prefixed globbing

expecting success of 9168.2 'test refspec prefixed 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/b_start &&
		svn_cmd commit -m "start a new branch" &&
		svn_cmd up &&
		echo "hi" >>branches/b_start/src/b/readme &&
		poke branches/b_start/src/b/readme &&
		echo "hey" >>branches/b_start/src/a/readme &&
		poke branches/b_start/src/a/readme &&
		svn_cmd commit -m "hi" &&
		svn_cmd up &&
		svn_cmd cp branches/b_start tags/t_end &&
		echo "bye" >>tags/t_end/src/b/readme &&
		poke tags/t_end/src/b/readme &&
		echo "aye" >>tags/t_end/src/a/readme &&
		poke tags/t_end/src/a/readme &&
		svn_cmd commit -m "the end" &&
		echo "byebye" >>tags/t_end/src/b/readme &&
		poke tags/t_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/b_*/src/a:refs/remotes/branches/b_*" &&
	git config --add svn-remote.svn.tags\
			 "tags/t_*/src/a:refs/remotes/tags/t_*" &&
	git svn multi-fetch &&
	git log --pretty=oneline refs/remotes/tags/t_end >actual &&
	cut -d" " -f2- actual >output.end &&
	test_cmp expect.end output.end &&
	test "$(git rev-parse refs/remotes/tags/t_end~1)" = \
		"$(git rev-parse refs/remotes/branches/b_start)" &&
	test "$(git rev-parse refs/remotes/branches/b_start~2)" = \
		"$(git rev-parse refs/remotes/trunk)" &&
	test_must_fail git rev-parse refs/remotes/tags/t_end@3
	
Adding         trunk/doc
Adding         trunk/src
Adding         trunk/src/a
Adding         trunk/src/a/readme
Adding         trunk/src/b
Adding         trunk/src/b/readme
Committing transaction...
Committed revision 1.
A    tmp/trunk
A    tmp/trunk/doc
A    tmp/trunk/src
A    tmp/trunk/src/a
A    tmp/trunk/src/a/readme
A    tmp/trunk/src/b
A    tmp/trunk/src/b/readme
Checked out revision 1.
A         branches
A         tags
A         branches/b_start
Adding         branches
Adding         branches/b_start
Adding         tags
Committing transaction...
Committed revision 2.
Updating '.':
At revision 2.
Sending        branches/b_start/src/a/readme
Sending        branches/b_start/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 3.
Updating '.':
At revision 3.
A         tags/t_end
Adding         tags/t_end
Sending        tags/t_end/src/a/readme
Sending        tags/t_end/src/b/readme
Transmitting file data ..done
Committing transaction...
Committed revision 4.
Sending        tags/t_end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 5.
Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
	.git/svn
	(required for this version (2.39.0) of git-svn) does not exist.
Done migrating from a git-svn v1 layout
	A	readme
r1 = d0f96114d10ae6632732fdd33700702fa71f4625 (refs/remotes/trunk)
branch_from: /trunk => /trunk/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start/src/a, 1
Found branch parent: (refs/remotes/branches/b_start) d0f96114d10ae6632732fdd33700702fa71f4625
Following parent with do_switch
Successfully followed parent
r2 = f57f27e15ce1fbe9d1a583ff305cad31995a619a (refs/remotes/branches/b_start)
	M	readme
r3 = f588269fb5355a1950f05509f29ed7c93aabf557 (refs/remotes/branches/b_start)
branch_from: /branches/b_start => /branches/b_start/src/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start/src/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/tags/t_end/src/a, 3
Found branch parent: (refs/remotes/tags/t_end) f588269fb5355a1950f05509f29ed7c93aabf557
Following parent with do_switch
	M	readme
Successfully followed parent
r4 = c81657bba929f679ebefc0223c6ef5694a762021 (refs/remotes/tags/t_end)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk/src/a r1
fatal: ambiguous argument 'refs/remotes/tags/t_end@3': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
refs/remotes/tags/t_end@3
ok 2 - test refspec prefixed globbing

expecting success of 9168.3 'prepare test left-hand-side only prefixed globbing': 
	echo try to try >expect.two &&
	echo nothing to see here >>expect.two &&
	cat expect.end >>expect.two
	
ok 3 - prepare test left-hand-side only prefixed globbing

expecting success of 9168.4 'test left-hand-side only prefixed 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/b_*:refs/remotes/two/branches/*" &&
	git config --add svn-remote.two.tags \
			 "tags/t_*:refs/remotes/two/tags/*" &&
	(
		cd tmp &&
		echo "try try" >>tags/t_end/src/b/readme &&
		poke tags/t_end/src/b/readme &&
		svn_cmd commit -m "try to try"
	) &&
	git svn fetch two &&
	git rev-list refs/remotes/two/tags/t_end >actual &&
	test_line_count = 6 actual &&
	git rev-list refs/remotes/two/branches/b_start >actual &&
	test_line_count = 3 actual &&
	test $(git rev-parse refs/remotes/two/branches/b_start~2) = \
	     $(git rev-parse refs/remotes/two/trunk) &&
	test $(git rev-parse refs/remotes/two/tags/t_end~3) = \
	     $(git rev-parse refs/remotes/two/branches/b_start) &&
	git log --pretty=oneline refs/remotes/two/tags/t_end >actual &&
	cut -d" " -f2- actual >output.two &&
	test_cmp expect.two output.two
	
Sending        tags/t_end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 6.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = 76ad3415c9715039f407174fa93a8753fa40b7e1 (refs/remotes/two/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start, 1
Found branch parent: (refs/remotes/two/branches/b_start) 76ad3415c9715039f407174fa93a8753fa40b7e1
Following parent with do_switch
Successfully followed parent
r2 = c38492ad4407cc39ee33d5f6a527b4fd9bdc19db (refs/remotes/two/branches/b_start)
	M	src/a/readme
	M	src/b/readme
r3 = 21b96c1e2dd3a2a45b1873c56f95216a92a38b5e (refs/remotes/two/branches/b_start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/tags/t_end, 3
Found branch parent: (refs/remotes/two/tags/t_end) 21b96c1e2dd3a2a45b1873c56f95216a92a38b5e
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r4 = e57028b32ecff246ebea885cfca9faf78bad8fd8 (refs/remotes/two/tags/t_end)
	M	src/b/readme
r5 = c261b029e481a95a383c7878fd37b11562fe26a3 (refs/remotes/two/tags/t_end)
	M	src/b/readme
r6 = 963b2e21545f063ff71ad061fba6ac045934ff36 (refs/remotes/two/tags/t_end)
ok 4 - test left-hand-side only prefixed globbing

expecting success of 9168.5 'prepare test prefixed globs match just prefix': 
	cat >expect.three <<EOF
Tag commit to t_
Branch commit to b_
initial
EOF
	
ok 5 - prepare test prefixed globs match just prefix

expecting success of 9168.6 'test prefixed globs match just prefix': 
	git config --add svn-remote.three.url "$svnrepo" &&
	git config --add svn-remote.three.fetch \
			 trunk:refs/remotes/three/trunk &&
	git config --add svn-remote.three.branches \
			 "branches/b_*:refs/remotes/three/branches/*" &&
	git config --add svn-remote.three.tags \
			 "tags/t_*:refs/remotes/three/tags/*" &&
	(
		cd tmp &&
		svn_cmd cp trunk branches/b_ &&
		echo "Branch commit to b_" >>branches/b_/src/a/readme &&
		poke branches/b_/src/a/readme &&
		svn_cmd commit -m "Branch commit to b_" &&
		svn_cmd up && svn_cmd cp branches/b_ tags/t_ &&
		echo "Tag commit to t_" >>tags/t_/src/a/readme &&
		poke tags/t_/src/a/readme &&
		svn_cmd commit -m "Tag commit to t_" &&
		svn_cmd up
	) &&
	git svn fetch three &&
	git rev-list refs/remotes/three/branches/b_ >actual &&
	test_line_count = 2 actual &&
	git rev-list refs/remotes/three/tags/t_ >actual &&
	test_line_count = 3 actual &&
	test $(git rev-parse refs/remotes/three/branches/b_~1) = \
	     $(git rev-parse refs/remotes/three/trunk) &&
	test $(git rev-parse refs/remotes/three/tags/t_~1) = \
	     $(git rev-parse refs/remotes/three/branches/b_) &&
	git log --pretty=oneline refs/remotes/three/tags/t_ >actual &&
	cut -d" " -f2- actual >output.three &&
	test_cmp expect.three output.three
	
A         branches/b_
Adding         branches/b_
Sending        branches/b_/src/a/readme
Transmitting file data .done
Committing transaction...
Committed revision 7.
Updating '.':
At revision 7.
A         tags/t_
Adding         tags/t_
Sending        tags/t_/src/a/readme
Transmitting file data .done
Committing transaction...
Committed revision 8.
Updating '.':
At revision 8.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = 76ad3415c9715039f407174fa93a8753fa40b7e1 (refs/remotes/three/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start, 1
Found branch parent: (refs/remotes/three/branches/b_start) 76ad3415c9715039f407174fa93a8753fa40b7e1
Following parent with do_switch
Successfully followed parent
r2 = c38492ad4407cc39ee33d5f6a527b4fd9bdc19db (refs/remotes/three/branches/b_start)
	M	src/a/readme
	M	src/b/readme
r3 = 21b96c1e2dd3a2a45b1873c56f95216a92a38b5e (refs/remotes/three/branches/b_start)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_start => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/tags/t_end, 3
Found branch parent: (refs/remotes/three/tags/t_end) 21b96c1e2dd3a2a45b1873c56f95216a92a38b5e
Following parent with do_switch
	M	src/a/readme
	M	src/b/readme
Successfully followed parent
r4 = e57028b32ecff246ebea885cfca9faf78bad8fd8 (refs/remotes/three/tags/t_end)
	M	src/b/readme
r5 = c261b029e481a95a383c7878fd37b11562fe26a3 (refs/remotes/three/tags/t_end)
	M	src/b/readme
r6 = 963b2e21545f063ff71ad061fba6ac045934ff36 (refs/remotes/three/tags/t_end)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_, 3
Found branch parent: (refs/remotes/three/branches/b_) 76ad3415c9715039f407174fa93a8753fa40b7e1
Following parent with do_switch
	M	src/a/readme
Successfully followed parent
r7 = 15abb633ee68d9c0cd3a5b73eeb910b1ff0aaac3 (refs/remotes/three/branches/b_)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/b_ => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/tags/t_, 7
Found branch parent: (refs/remotes/three/tags/t_) 15abb633ee68d9c0cd3a5b73eeb910b1ff0aaac3
Following parent with do_switch
	M	src/a/readme
Successfully followed parent
r8 = 484769913c6b2cb202513f6084811af1b81a270d (refs/remotes/three/tags/t_)
ok 6 - test prefixed globs match just prefix

expecting success of 9168.7 'prepare test disallow prefixed multi-globs': 
cat >expect.four <<EOF
Only one set of wildcards (e.g. '*' or '*/*/*') is supported: branches/b_*/t/*

EOF
	
ok 7 - prepare test disallow prefixed multi-globs

expecting success of 9168.8 'test disallow prefixed multi-globs': 
	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/b_*/t/*:refs/remotes/four/branches/*" &&
	git config --add svn-remote.four.tags \
			 "tags/t_*/*:refs/remotes/four/tags/*" &&
	(
		cd tmp &&
		echo "try try" >>tags/t_end/src/b/readme &&
		poke tags/t_end/src/b/readme &&
		svn_cmd commit -m "try to try"
	) &&
	test_must_fail git svn fetch four 2>stderr.four &&
	test_cmp expect.four stderr.four &&
	git config --unset svn-remote.four.branches &&
	git config --unset svn-remote.four.tags
	
Sending        tags/t_end/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 9.
ok 8 - test disallow prefixed multi-globs

expecting success of 9168.9 'prepare test globbing in the middle of the word': 
	cat >expect.five <<EOF
Tag commit to fghij
Branch commit to abcde
initial
EOF
	
ok 9 - prepare test globbing in the middle of the word

expecting success of 9168.10 'test globbing in the middle of the word': 
	git config --add svn-remote.five.url "$svnrepo" &&
	git config --add svn-remote.five.fetch \
			 trunk:refs/remotes/five/trunk &&
	git config --add svn-remote.five.branches \
			 "branches/a*e:refs/remotes/five/branches/*" &&
	git config --add svn-remote.five.tags \
			 "tags/f*j:refs/remotes/five/tags/*" &&
	(
		cd tmp &&
		svn_cmd cp trunk branches/abcde &&
		echo "Branch commit to abcde" >>branches/abcde/src/a/readme &&
		poke branches/b_/src/a/readme &&
		svn_cmd commit -m "Branch commit to abcde" &&
		svn_cmd up &&
		svn_cmd cp branches/abcde tags/fghij &&
		echo "Tag commit to fghij" >>tags/fghij/src/a/readme &&
		poke tags/fghij/src/a/readme &&
		svn_cmd commit -m "Tag commit to fghij" &&
		svn_cmd up
	) &&
	git svn fetch five &&
	git rev-list refs/remotes/five/branches/abcde >actual &&
	test_line_count = 2 actual &&
	git rev-list refs/remotes/five/tags/fghij >actual &&
	test_line_count = 3 actual &&
	test $(git rev-parse refs/remotes/five/branches/abcde~1) = \
	     $(git rev-parse refs/remotes/five/trunk) &&
	test $(git rev-parse refs/remotes/five/tags/fghij~1) = \
	     $(git rev-parse refs/remotes/five/branches/abcde) &&
	git log --pretty=oneline refs/remotes/five/tags/fghij >actual &&
	cut -d" " -f2- actual >output.five &&
	test_cmp expect.five output.five
	
A         branches/abcde
Adding         branches/abcde
Sending        branches/abcde/src/a/readme
Transmitting file data .done
Committing transaction...
Committed revision 10.
Updating '.':
At revision 10.
A         tags/fghij
Adding         tags/fghij
Sending        tags/fghij/src/a/readme
Transmitting file data .done
Committing transaction...
Committed revision 11.
Updating '.':
At revision 11.
	A	src/a/readme
	A	src/b/readme
W: +empty_dir: trunk/doc
r1 = 76ad3415c9715039f407174fa93a8753fa40b7e1 (refs/remotes/five/trunk)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/abcde, 8
Found branch parent: (refs/remotes/five/branches/abcde) 76ad3415c9715039f407174fa93a8753fa40b7e1
Following parent with do_switch
	M	src/a/readme
Successfully followed parent
r10 = 20e8a4f470ce8fd5cbebb70dca63589a4241684c (refs/remotes/five/branches/abcde)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/branches/abcde => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9168-git-svn-partially-globbed-names/svnrepo/tags/fghij, 10
Found branch parent: (refs/remotes/five/tags/fghij) 20e8a4f470ce8fd5cbebb70dca63589a4241684c
Following parent with do_switch
	M	src/a/readme
Successfully followed parent
r11 = 32799b0c360db3faa31e8d1fe6f96cd7e9f9a086 (refs/remotes/five/tags/fghij)
ok 10 - test globbing in the middle of the word

expecting success of 9168.11 'prepare test disallow multiple asterisks in one word': 
	echo "Only one '*' is allowed in a pattern: 'a*c*e'" >expect.six &&
	echo "" >>expect.six
	
ok 11 - prepare test disallow multiple asterisks in one word

expecting success of 9168.12 'test disallow multiple asterisks in one word': 
	git config --add svn-remote.six.url "$svnrepo" &&
	git config --add svn-remote.six.fetch \
			 trunk:refs/remotes/six/trunk &&
	git config --add svn-remote.six.branches \
			 "branches/a*c*e:refs/remotes/six/branches/*" &&
	git config --add svn-remote.six.tags \
			 "tags/f*h*j:refs/remotes/six/tags/*" &&
	(
		cd tmp &&
		echo "try try" >>tags/fghij/src/b/readme &&
		poke tags/fghij/src/b/readme &&
		svn_cmd commit -m "try to try"
	) &&
	test_must_fail git svn fetch six 2>stderr.six &&
	test_cmp expect.six stderr.six
	
Sending        tags/fghij/src/b/readme
Transmitting file data .done
Committing transaction...
Committed revision 12.
ok 12 - test disallow multiple asterisks in one word

# passed all 12 test(s)
1..12
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9351-fast-export-anonymize.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9351-fast-export-anonymize/.git/
expecting success of 9351.1 'setup simple repo': 
	test_commit base &&
	test_commit foo &&
	test_commit retain-me &&
	git checkout -b other HEAD^ &&
	mkdir subdir &&
	test_commit subdir/bar &&
	test_commit subdir/xyzzy &&
	fake_commit=$(echo $ZERO_OID | sed s/0/a/) &&
	git update-index --add --cacheinfo 160000,$fake_commit,link1 &&
	git update-index --add --cacheinfo 160000,$fake_commit,link2 &&
	git commit -m "add gitlink" &&
	git tag -m "annotated tag" mytag &&
	git tag -m "annotated tag with long message" longtag

[main (root-commit) d1ff1c9] base
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 base.t
[main 64bd085] foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo.t
[main 98733ca] retain-me
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 retain-me.t
Switched to a new branch 'other'
[other 7ff9039] subdir/bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/bar.t
[other 1427cb1] subdir/xyzzy
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/xyzzy.t
[other 73eb103] add gitlink
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 160000 link1
 create mode 160000 link2
ok 1 - setup simple repo

expecting success of 9351.2 'export anonymized stream': 
	git fast-export --anonymize --all \
		--anonymize-map=retain-me \
		--anonymize-map=xyzzy:custom-name \
		--anonymize-map=other \
		>stream

ok 2 - export anonymized stream

expecting success of 9351.3 'stream omits path names': 
	! grep base stream &&
	! grep foo stream &&
	! grep subdir stream &&
	! grep bar stream &&
	! grep xyzzy stream

ok 3 - stream omits path names

expecting success of 9351.4 'stream contains user-specified names': 
	grep retain-me stream &&
	grep custom-name stream

reset refs/tags/retain-me
commit refs/tags/ref3/custom-name
ok 4 - stream contains user-specified names

expecting success of 9351.5 'stream omits gitlink oids': 
	# avoid relying on the whole oid to remain hash-agnostic; this is
	# plenty to be unique within our test case
	! grep a000000000000000000 stream

ok 5 - stream omits gitlink oids

expecting success of 9351.6 'stream retains other as refname': 
	grep other stream

commit refs/heads/other
ok 6 - stream retains other as refname

expecting success of 9351.7 'stream omits other refnames': 
	! grep main stream &&
	! grep mytag stream &&
	! grep longtag stream

ok 7 - stream omits other refnames

expecting success of 9351.8 'stream omits identities': 
	! grep "$GIT_COMMITTER_NAME" stream &&
	! grep "$GIT_COMMITTER_EMAIL" stream &&
	! grep "$GIT_AUTHOR_NAME" stream &&
	! grep "$GIT_AUTHOR_EMAIL" stream

ok 8 - stream omits identities

expecting success of 9351.9 'stream omits tag message': 
	! grep "annotated tag" stream

ok 9 - stream omits tag message

expecting success of 9351.10 'import stream to new repository': 
	git init new &&
	cd new &&
	git fast-import <../stream

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9351-fast-export-anonymize/new/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           21 (         0 duplicates                  )
      blobs  :            5 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            8 (         0 duplicates          6 deltas of          6 attempts)
      commits:            6 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            2 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           7 (         6 loads     )
      marks:           1024 (        11 unique    )
      atoms:              8
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         12
pack_report: pack_mmap_calls          =          6
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       1442
---------------------------------------------------------------------

ok 10 - import stream to new repository

expecting success of 9351.11 'result has two branches': 
	git for-each-ref --format="%(refname)" refs/heads >branches &&
	test_line_count = 2 branches &&
	other_branch=refs/heads/other &&
	main_branch=$(grep -v $other_branch branches)

ok 11 - result has two branches

expecting success of 9351.12 'repo has original shape and timestamps': 
	shape () {
		git log --format="%m %ct" --left-right --boundary "$@"
	} &&
	(cd .. && shape main...other) >expect &&
	shape $main_branch...$other_branch >actual &&
	test_cmp expect actual

ok 12 - repo has original shape and timestamps

expecting success of 9351.13 'root tree has original shape': 
	# the output entries are not necessarily in the same
	# order, but we should at least have the same set of
	# object types.
	git -C .. ls-tree HEAD >orig-root &&
	cut -d" " -f2 <orig-root | sort >expect &&
	git ls-tree $other_branch >root &&
	cut -d" " -f2 <root | sort >actual &&
	test_cmp expect actual

ok 13 - root tree has original shape

expecting success of 9351.14 'paths in subdir ended up in one tree': 
	git -C .. ls-tree other:subdir >orig-subdir &&
	cut -d" " -f2 <orig-subdir | sort >expect &&
	tree=$(grep tree root | cut -f2) &&
	git ls-tree $other_branch:$tree >tree &&
	cut -d" " -f2 <tree >actual &&
	test_cmp expect actual

ok 14 - paths in subdir ended up in one tree

expecting success of 9351.15 'identical gitlinks got identical oid': 
	awk "/commit/ { print \$3 }" <root | sort -u >commits &&
	test_line_count = 1 commits

ok 15 - identical gitlinks got identical oid

expecting success of 9351.16 'all tags point to branch tip': 
	git rev-parse $other_branch >expect &&
	git for-each-ref --format="%(*objectname)" | grep . | uniq >actual &&
	test_cmp expect actual

ok 16 - all tags point to branch tip

expecting success of 9351.17 'idents are shared': 
	git log --all --format="%an <%ae>" >authors &&
	sort -u authors >unique &&
	test_line_count = 1 unique &&
	git log --all --format="%cn <%ce>" >committers &&
	sort -u committers >unique &&
	test_line_count = 1 unique &&
	! test_cmp authors committers

--- authors	2022-12-28 08:23:12.112201300 +0000
+++ committers	2022-12-28 08:23:12.162203116 +0000
@@ -1,6 +1,6 @@
-User 1 <user1@example.com>
-User 1 <user1@example.com>
-User 1 <user1@example.com>
-User 1 <user1@example.com>
-User 1 <user1@example.com>
-User 1 <user1@example.com>
+User 0 <user0@example.com>
+User 0 <user0@example.com>
+User 0 <user0@example.com>
+User 0 <user0@example.com>
+User 0 <user0@example.com>
+User 0 <user0@example.com>
ok 17 - idents are shared

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9301-fast-import-notes.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9301-fast-import-notes/.git/
expecting success of 9301.1 'set up main branch': 

	git fast-import <input &&
	git whatchanged main

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           17 (         0 duplicates                  )
      blobs  :            7 (         0 duplicates          0 deltas of          6 attempts)
      trees  :            6 (         0 duplicates          3 deltas of          4 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

commit 9a93771a958bca801f51ff270bc677be08b70970
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    fourth commit

:100755 100755 3c9b917 98d1b63 M	bar

commit dbe3ab44992634d04709231cc00251483e46cff8
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    third commit

:100644 100644 215df20 634bd2b M	foo

commit bcc89d2db5d163929b6fbd169c2559b47a076acb
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    second commit

:100644 100755 532386d be960bf M	baz/xyzzy
:100644 100644 df023b2 215df20 M	foo

commit 49f8b007d515fc33aed8245ee498753d4270cc78
Author: C O Mitter <committer@example.com>
Date:   Thu Apr 7 15:13:13 2005 -0700

    first commit

:000000 100755 0000000 3c9b917 A	bar
:000000 100644 0000000 532386d A	baz/xyzzy
:000000 100644 0000000 df023b2 A	foo
ok 1 - set up main branch

expecting success of 9301.2 'add notes with simple M command': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 2 - add notes with simple M command

expecting success of 9301.3 'add notes with simple N command': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            4 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 3 - add notes with simple N command

expecting success of 9301.4 'update existing notes with N command': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          3 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 4 - update existing notes with N command

expecting success of 9301.5 'add concatenation notes with M command': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           12 (         0 duplicates                  )
      blobs  :            7 (         0 duplicates          0 deltas of          6 attempts)
      trees  :            4 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 5 - add concatenation notes with M command

expecting success of 9301.6 'verify that deleteall also removes notes': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              6
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 6 - verify that deleteall also removes notes

expecting success of 9301.7 'verify that later N commands override earlier M commands': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/test git log | grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          3 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 7 - verify that later N commands override earlier M commands

expecting success of 9301.8 'add lots of commits and notes': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/many_notes git log refs/heads/many_commits |
	    grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:         1813 (         0 duplicates                  )
      blobs  :          803 (         0 duplicates        392 deltas of        695 attempts)
      trees  :          608 (         0 duplicates          2 deltas of        401 attempts)
      commits:          402 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           2 (         2 loads     )
      marks:           1024 (       400 unique    )
      atoms:            864
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          4
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =     129374 /     129374
---------------------------------------------------------------------

ok 8 - add lots of commits and notes

expecting success of 9301.9 'verify that lots of notes trigger a fanout scheme': 
	hexsz=$(test_oid hexsz) &&

	# None of the entries in the top-level notes tree should be a full SHA1
	git ls-tree --name-only refs/notes/many_notes |
	while read path
	do
		if test $(expr length "$path") -ge $hexsz
		then
			return 1
		fi
	done


ok 9 - verify that lots of notes trigger a fanout scheme

expecting success of 9301.10 'verify that importing a notes tree respects the fanout scheme': 
	git fast-import <input &&

	# None of the entries in the top-level notes tree should be a full SHA1
	git ls-tree --name-only refs/notes/other_notes |
	while read path
	do
		if test $(expr length "$path") -ge $hexsz
		then
			return 1
		fi
	done

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            2 (      1818 duplicates                  )
      blobs  :            0 (       805 duplicates          0 deltas of          0 attempts)
      trees  :            0 (       611 duplicates          0 deltas of          0 attempts)
      commits:            2 (       402 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           4 (         4 loads     )
      marks:           1024 (       400 unique    )
      atoms:            864
Memory total:          2532 KiB
       pools:          2219 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        212
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =     129374 /     129374
---------------------------------------------------------------------

ok 10 - verify that importing a notes tree respects the fanout scheme

expecting success of 9301.11 'verify that non-notes are untouched by a fanout change': 

	git cat-file -p refs/notes/many_notes:foobar/non-note.txt > actual &&
	test_cmp expect_non-note1 actual &&
	git cat-file -p refs/notes/many_notes:deadbeef > actual &&
	test_cmp expect_non-note2 actual &&
	git cat-file -p refs/notes/many_notes:de/adbeef > actual &&
	test_cmp expect_non-note3 actual


ok 11 - verify that non-notes are untouched by a fanout change

expecting success of 9301.12 'change a few existing notes': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/many_notes git log -n3 refs/heads/many_commits |
	    grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            8 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          2 deltas of          2 attempts)
      trees  :            4 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            608
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        216
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =     129374 /     129374
---------------------------------------------------------------------

ok 12 - change a few existing notes

expecting success of 9301.13 'verify that changing notes respect existing fanout': 

	# None of the entries in the top-level notes tree should be a full SHA1
	git ls-tree --name-only refs/notes/many_notes |
	while read path
	do
		if test $(expr length "$path") -ge $hexsz
		then
			return 1
		fi
	done


ok 13 - verify that changing notes respect existing fanout

expecting success of 9301.14 'remove lots of notes': 

	git fast-import <input &&
	GIT_NOTES_REF=refs/notes/many_notes git log refs/heads/many_commits |
	    grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         0 unique    )
      atoms:            618
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        593
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =     129374 /     129374
---------------------------------------------------------------------

ok 14 - remove lots of notes

expecting success of 9301.15 'verify that removing notes trigger fanout consolidation': 
	# All entries in the top-level notes tree should be a full SHA1
	git ls-tree --name-only -r refs/notes/many_notes |
	while read path
	do
		# Explicitly ignore the non-note paths
		test "$path" = "foobar/non-note.txt" && continue
		test "$path" = "deadbeef" && continue
		test "$path" = "de/adbeef" && continue

		if test $(expr length "$path") -ne $hexsz
		then
			return 1
		fi
	done


ok 15 - verify that removing notes trigger fanout consolidation

expecting success of 9301.16 'verify that non-notes are untouched by a fanout change': 

	git cat-file -p refs/notes/many_notes:foobar/non-note.txt > actual &&
	test_cmp expect_non-note1 actual &&
	git cat-file -p refs/notes/many_notes:deadbeef > actual &&
	test_cmp expect_non-note2 actual &&
	git cat-file -p refs/notes/many_notes:de/adbeef > actual &&
	test_cmp expect_non-note3 actual


ok 16 - verify that non-notes are untouched by a fanout change

expecting success of 9301.17 'add notes to 16 commits in each of 10 refs': 

	git fast-import --active-branches=5 <input &&
	GIT_NOTES_REF=refs/notes/more_notes_1 git log refs/heads/more_commits |
	    grep "^    " > actual &&
	test_cmp expect actual


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           46 (       282 duplicates                  )
      blobs  :            8 (       248 duplicates          0 deltas of          7 attempts)
      trees  :            2 (        34 duplicates          1 deltas of          1 attempts)
      commits:           36 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:          11 (        21 loads     )
      marks:           1024 (        16 unique    )
      atoms:             17
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =         10
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       6351
---------------------------------------------------------------------

ok 17 - add notes to 16 commits in each of 10 refs

# passed all 17 test(s)
1..17
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9350-fast-export.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/.git/
expecting success of 9350.1 'setup': 

	echo break it > file0 &&
	git add file0 &&
	test_tick &&
	echo Wohlauf > file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	echo die Luft > file &&
	echo geht frisch > file2 &&
	git add file file2 &&
	test_tick &&
	git commit -m second &&
	echo und > file2 &&
	test_tick &&
	git commit -m third file2 &&
	test_tick &&
	git tag rein &&
	git checkout -b wer HEAD^ &&
	echo lange > file2 &&
	test_tick &&
	git commit -m sitzt file2 &&
	test_tick &&
	git tag -a -m valentin muss &&
	git merge -s ours main


[main (root-commit) 283ea05] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file
 create mode 100644 file0
[main 300cb83] second
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file2
[main 80f15f4] third
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'wer'
[wer 708f3c9] sitzt
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merge made by the 'ours' strategy.
ok 1 - setup

expecting success of 9350.2 'fast-export | fast-import': 

	MAIN=$(git rev-parse --verify main) &&
	REIN=$(git rev-parse --verify rein) &&
	WER=$(git rev-parse --verify wer) &&
	MUSS=$(git rev-parse --verify muss) &&
	mkdir new &&
	git --git-dir=new/.git init &&
	git fast-export --all >actual &&
	(cd new &&
	 git fast-import &&
	 test $MAIN = $(git rev-parse --verify refs/heads/main) &&
	 test $REIN = $(git rev-parse --verify refs/tags/rein) &&
	 test $WER = $(git rev-parse --verify refs/heads/wer) &&
	 test $MUSS = $(git rev-parse --verify refs/tags/muss)) <actual


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/new/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           16 (         0 duplicates                  )
      blobs  :            6 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          3 deltas of          3 attempts)
      commits:            5 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            1 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           4 (         3 loads     )
      marks:           1024 (        11 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          5
pack_report: pack_mmap_calls          =          3
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       1158
---------------------------------------------------------------------

ok 2 - fast-export | fast-import

expecting success of 9350.3 'fast-export ^muss^{commit} muss': 
	git fast-export --tag-of-filtered-object=rewrite ^muss^{commit} muss >actual &&
	cat >expected <<-EOF &&
	tag muss
	from $(git rev-parse --verify muss^{commit})
	$(git cat-file tag muss | grep tagger)
	data 9
	valentin

	EOF
	test_cmp expected actual

ok 3 - fast-export ^muss^{commit} muss

expecting success of 9350.4 'fast-export --mark-tags ^muss^{commit} muss': 
	git fast-export --mark-tags --tag-of-filtered-object=rewrite ^muss^{commit} muss >actual &&
	cat >expected <<-EOF &&
	tag muss
	mark :1
	from $(git rev-parse --verify muss^{commit})
	$(git cat-file tag muss | grep tagger)
	data 9
	valentin

	EOF
	test_cmp expected actual

ok 4 - fast-export --mark-tags ^muss^{commit} muss

expecting success of 9350.5 'fast-export main~2..main': 

	git fast-export main~2..main >actual &&
	sed "s/main/partial/" actual |
		(cd new &&
		 git fast-import &&
		 test $MAIN != $(git rev-parse --verify refs/heads/partial) &&
		 git diff --exit-code main partial &&
		 git diff --exit-code main^ partial^ &&
		 test_must_fail git rev-parse partial~2)


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            8 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         6 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

fatal: ambiguous argument 'partial~2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
partial~2
ok 5 - fast-export main~2..main

expecting success of 9350.6 'fast-export --reference-excluded-parents main~2..main': 

	git fast-export --reference-excluded-parents main~2..main >actual &&
	grep commit.refs/heads/main actual >commit-count &&
	test_line_count = 2 commit-count &&
	sed "s/main/rewrite/" actual |
		(cd new &&
		 git fast-import &&
		 test $MAIN = $(git rev-parse --verify refs/heads/rewrite))

fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            7 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          1 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         5 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 6 - fast-export --reference-excluded-parents main~2..main

expecting success of 9350.7 'fast-export --show-original-ids': 

	git fast-export --show-original-ids main >output &&
	grep ^original-oid output| sed -e s/^original-oid.// | sort >actual &&
	git rev-list --objects main muss >objects-and-names &&
	awk "{print \$1}" objects-and-names | sort >commits-trees-blobs &&
	comm -23 actual commits-trees-blobs >unfound &&
	test_must_be_empty unfound

ok 7 - fast-export --show-original-ids

expecting success of 9350.8 'fast-export --show-original-ids | git fast-import': 

	git fast-export --show-original-ids main muss | git fast-import --quiet &&
	test $MAIN = $(git rev-parse --verify refs/heads/main) &&
	test $MUSS = $(git rev-parse --verify refs/tags/muss)

ok 8 - fast-export --show-original-ids | git fast-import

expecting success of 9350.9 'reencoding iso-8859-7': 

	test_when_finished "git reset --hard HEAD~1" &&
	test_config i18n.commitencoding iso-8859-7 &&
	test_tick &&
	echo rosten >file &&
	git commit -s -F "$TEST_DIRECTORY/t9350/simple-iso-8859-7-commit-message.txt" file &&
	git fast-export --reencode=yes wer^..wer >iso-8859-7.fi &&
	sed "s/wer/i18n/" iso-8859-7.fi |
		(cd new &&
		 git fast-import &&
		 # The commit object, if not re-encoded, would be 200 bytes plus hash.
		 # Removing the "encoding iso-8859-7\n" header drops 20 bytes.
		 # Re-encoding the Pi character from \xF0 (\360) in iso-8859-7
		 # to \xCF\x80 (\317\200) in UTF-8 adds a byte.  Check for
		 # the expected size.
		 test $(($(test_oid hexsz) + 181)) -eq "$(git cat-file -s i18n)" &&
		 # ...and for the expected translation of bytes.
		 git cat-file commit i18n >actual &&
		 grep $(printf "\317\200") actual &&
		 # Also make sure the commit does not have the "encoding" header
		 ! grep ^encoding actual)

 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

Pi: π
HEAD is now at 8954980 Merge branch 'main' into wer
ok 9 - reencoding iso-8859-7

expecting success of 9350.10 'aborting on iso-8859-7': 

	test_when_finished "git reset --hard HEAD~1" &&
	test_config i18n.commitencoding iso-8859-7 &&
	echo rosten >file &&
	git commit -s -F "$TEST_DIRECTORY/t9350/simple-iso-8859-7-commit-message.txt" file &&
	test_must_fail git fast-export --reencode=abort wer^..wer >iso-8859-7.fi

 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fatal: Encountered commit-specific encoding iso-8859-7 in commit 69412559de66ce43db5f4d5fd25191a3ab0b1823; use --reencode=[yes|no] to handle it
HEAD is now at 8954980 Merge branch 'main' into wer
ok 10 - aborting on iso-8859-7

expecting success of 9350.11 'preserving iso-8859-7': 

	test_when_finished "git reset --hard HEAD~1" &&
	test_config i18n.commitencoding iso-8859-7 &&
	echo rosten >file &&
	git commit -s -F "$TEST_DIRECTORY/t9350/simple-iso-8859-7-commit-message.txt" file &&
	git fast-export --reencode=no wer^..wer >iso-8859-7.fi &&
	sed "s/wer/i18n-no-recoding/" iso-8859-7.fi |
		(cd new &&
		 git fast-import &&
		 # The commit object, if not re-encoded, is 200 bytes plus hash.
		 # Removing the "encoding iso-8859-7\n" header would drops 20
		 # bytes.  Re-encoding the Pi character from \xF0 (\360) in
		 # iso-8859-7 to \xCF\x80 (\317\200) in UTF-8 adds a byte.
		 # Check for the expected size...
		 test $(($(test_oid hexsz) + 200)) -eq "$(git cat-file -s i18n-no-recoding)" &&
		 # ...as well as the expected byte.
		 git cat-file commit i18n-no-recoding >actual &&
		 grep $(printf "\360") actual &&
		 # Also make sure the commit has the "encoding" header
		 grep ^encoding actual)

 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

encoding iso-8859-7
HEAD is now at 8954980 Merge branch 'main' into wer
ok 11 - preserving iso-8859-7

expecting success of 9350.12 'encoding preserved if reencoding fails': 

	test_when_finished "git reset --hard HEAD~1" &&
	test_config i18n.commitencoding iso-8859-7 &&
	echo rosten >file &&
	git commit -s -F "$TEST_DIRECTORY/t9350/broken-iso-8859-7-commit-message.txt" file &&
	git fast-export --reencode=yes wer^..wer >iso-8859-7.fi &&
	sed "s/wer/i18n-invalid/" iso-8859-7.fi |
		(cd new &&
		 git fast-import &&
		 git cat-file commit i18n-invalid >actual &&
		 # Make sure the commit still has the encoding header
		 grep ^encoding actual &&
		 # Verify that the commit has the expected size; i.e.
		 # that no bytes were re-encoded to a different encoding.
		 test $(($(test_oid hexsz) + 212)) -eq "$(git cat-file -s i18n-invalid)" &&
		 # ...and check for the original special bytes
		 grep $(printf "\360") actual &&
		 grep $(printf "\377") actual)

 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            5 (         0 duplicates                  )
      blobs  :            3 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              3
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

encoding iso-8859-7
HEAD is now at 8954980 Merge branch 'main' into wer
ok 12 - encoding preserved if reencoding fails

expecting success of 9350.13 'import/export-marks': 

	git checkout -b marks main &&
	git fast-export --export-marks=tmp-marks HEAD &&
	test -s tmp-marks &&
	test_line_count = 3 tmp-marks &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks HEAD >actual &&
	test $(grep ^commit actual | wc -l) -eq 0 &&
	echo change > file &&
	git commit -m "last commit" file &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks HEAD >actual &&
	test $(grep ^commit\  actual | wc -l) -eq 1 &&
	test_line_count = 4 tmp-marks


Switched to a new branch 'marks'
blob
mark :1
data 8
Wohlauf

blob
mark :2
data 9
break it

reset refs/heads/marks
commit refs/heads/marks
mark :3
author A U Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700
data 8
initial
M 100644 :2 file0
M 100644 :1 file

blob
mark :4
data 9
die Luft

blob
mark :5
data 12
geht frisch

commit refs/heads/marks
mark :6
author A U Thor <author@example.com> 1112912113 -0700
committer C O Mitter <committer@example.com> 1112912113 -0700
data 7
second
from :3
M 100644 :5 file2
M 100644 :4 file

blob
mark :7
data 4
und

commit refs/heads/marks
mark :8
author A U Thor <author@example.com> 1112912173 -0700
committer C O Mitter <committer@example.com> 1112912173 -0700
data 6
third
from :6
M 100644 :7 file2

[marks 00d551b] last commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 13 - import/export-marks

expecting success of 9350.14 'set up faked signed tag': 

	cat signed-tag-import | git fast-import


fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            1 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            1 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 14 - set up faked signed tag

expecting success of 9350.15 'signed-tags=abort': 

	test_must_fail git fast-export --signed-tags=abort sign-your-name


fatal: encountered signed tag a3638f8ba890fd4c674f4a3c04947833ab5dcd43; use --signed-tags=<mode> to handle it
blob
mark :1
data 8
Wohlauf

blob
mark :2
data 9
break it

reset refs/tags/sign-your-name
commit refs/tags/sign-your-name
mark :3
author A U Thor <author@example.com> 1112912053 -0700
committer C O Mitter <committer@example.com> 1112912053 -0700
data 8
initial
M 100644 :2 file0
M 100644 :1 file

blob
mark :4
data 9
die Luft

blob
mark :5
data 12
geht frisch

commit refs/tags/sign-your-name
mark :6
author A U Thor <author@example.com> 1112912113 -0700
committer C O Mitter <committer@example.com> 1112912113 -0700
data 7
second
from :3
M 100644 :5 file2
M 100644 :4 file

blob
mark :7
data 4
und

commit refs/tags/sign-your-name
mark :8
author A U Thor <author@example.com> 1112912173 -0700
committer C O Mitter <committer@example.com> 1112912173 -0700
data 6
third
from :6
M 100644 :7 file2

blob
mark :9
data 7
change

commit refs/tags/sign-your-name
mark :10
author A U Thor <author@example.com> 1112912413 -0700
committer C O Mitter <committer@example.com> 1112912413 -0700
data 12
last commit
from :8
M 100644 :9 file

ok 15 - signed-tags=abort

expecting success of 9350.16 'signed-tags=verbatim': 

	git fast-export --signed-tags=verbatim sign-your-name > output &&
	grep PGP output


-----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
ok 16 - signed-tags=verbatim

expecting success of 9350.17 'signed-tags=strip': 

	git fast-export --signed-tags=strip sign-your-name > output &&
	! grep PGP output


ok 17 - signed-tags=strip

expecting success of 9350.18 'signed-tags=warn-strip': 
	git fast-export --signed-tags=warn-strip sign-your-name >output 2>err &&
	! grep PGP output &&
	test -s err

ok 18 - signed-tags=warn-strip

expecting success of 9350.19 'setup submodule': 

	test_config_global protocol.file.allow always &&
	git checkout -f main &&
	mkdir sub &&
	(
		cd sub &&
		git init  &&
		echo test file > file &&
		git add file &&
		git commit -m sub_initial
	) &&
	git submodule add "$(pwd)/sub" sub &&
	git commit -m initial &&
	test_tick &&
	(
		cd sub &&
		echo more data >> file &&
		git add file &&
		git commit -m sub_second
	) &&
	git add sub &&
	git commit -m second


Switched to branch 'main'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/sub/.git/
[main (root-commit) 075e849] sub_initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Adding existing repo at 'sub' to the index
[main 9f3b24a] initial
 Author: A U Thor <author@example.com>
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
[main 53da5af] sub_second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 78e0030] second
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 19 - setup submodule

expecting success of 9350.20 'submodule fast-export | fast-import': 

	test_config_global protocol.file.allow always &&
	SUBENT1=$(git ls-tree main^ sub) &&
	SUBENT2=$(git ls-tree main sub) &&
	rm -rf new &&
	mkdir new &&
	git --git-dir=new/.git init &&
	git fast-export --signed-tags=strip --all >actual &&
	(cd new &&
	 git fast-import &&
	 test "$SUBENT1" = "$(git ls-tree refs/heads/main^ sub)" &&
	 test "$SUBENT2" = "$(git ls-tree refs/heads/main sub)" &&
	 git checkout main &&
	 git submodule init &&
	 git submodule update &&
	 cmp sub/file ../sub/file) <actual


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/new/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           25 (         0 duplicates                  )
      blobs  :            8 (         0 duplicates          0 deltas of          1 attempts)
      trees  :            7 (         0 duplicates          6 deltas of          6 attempts)
      commits:            8 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            2 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           5 (         5 loads     )
      marks:           1024 (        16 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       1492
---------------------------------------------------------------------

Already on 'main'
Submodule 'sub' (/<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/sub) registered for path 'sub'
Cloning into '/<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/new/sub'...
done.
Submodule path 'sub': checked out '53da5af386a666416b61517c3f90dafe75821d2b'
ok 20 - submodule fast-export | fast-import

expecting success of 9350.21 'setup copies': 

	git checkout -b copy rein &&
	git mv file file3 &&
	git commit -m move1 &&
	test_tick &&
	cp file2 file4 &&
	git add file4 &&
	git mv file2 file5 &&
	git commit -m copy1 &&
	test_tick &&
	cp file3 file6 &&
	git add file6 &&
	git commit -m copy2 &&
	test_tick &&
	echo more text >> file6 &&
	echo even more text >> file6 &&
	git add file6 &&
	git commit -m modify &&
	test_tick &&
	cp file6 file7 &&
	echo test >> file7 &&
	git add file7 &&
	git commit -m copy_modify


warning: unable to rmdir 'sub': Directory not empty
Switched to a new branch 'copy'
[copy 16740da] move1
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file => file3 (100%)
[copy 0d83758] copy1
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+)
 rename file2 => file4 (100%)
 create mode 100644 file5
[copy 44ca68a] copy2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file6
[copy 22ab272] modify
 Author: A U Thor <author@example.com>
 1 file changed, 2 insertions(+)
[copy ed9d1ab] copy_modify
 Author: A U Thor <author@example.com>
 1 file changed, 4 insertions(+)
 create mode 100644 file7
ok 21 - setup copies

expecting success of 9350.22 'fast-export -C -C | fast-import': 

	ENTRY=$(git rev-parse --verify copy) &&
	rm -rf new &&
	mkdir new &&
	git --git-dir=new/.git init &&
	git fast-export -C -C --signed-tags=strip --all > output &&
	grep "^C file2 file4\$" output &&
	cat output |
	(cd new &&
	 git fast-import &&
	 test $ENTRY = $(git rev-parse --verify refs/heads/copy))


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/new/.git/
C file2 file4
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           37 (         0 duplicates                  )
      blobs  :           10 (         0 duplicates          1 deltas of          3 attempts)
      trees  :           12 (         0 duplicates         11 deltas of         11 attempts)
      commits:           13 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            2 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           6 (         6 loads     )
      marks:           1024 (        23 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =         10
pack_report: pack_mmap_calls          =          5
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       1938
---------------------------------------------------------------------

ok 22 - fast-export -C -C | fast-import

expecting success of 9350.23 'fast-export | fast-import when main is tagged': 

	git tag -m msg last &&
	git fast-export -C -C --signed-tags=strip --all > output &&
	test $(grep -c "^tag " output) = 3


ok 23 - fast-export | fast-import when main is tagged

expecting success of 9350.24 'cope with tagger-less tags': 

	TAG=$(git hash-object -t tag -w tag-content) &&
	git update-ref refs/tags/sonnenschein $TAG &&
	git fast-export -C -C --signed-tags=strip --all > output &&
	test $(grep -c "^tag " output) = 4 &&
	! grep "Unspecified Tagger" output &&
	git fast-export -C -C --signed-tags=strip --all \
		--fake-missing-tagger > output &&
	test $(grep -c "^tag " output) = 4 &&
	grep "Unspecified Tagger" output


tagger Unspecified Tagger <unspecified-tagger> 0 +0000
ok 24 - cope with tagger-less tags

expecting success of 9350.25 'setup for limiting exports by PATH': 
	mkdir limit-by-paths &&
	(
		cd limit-by-paths &&
		git init &&
		echo hi > there &&
		git add there &&
		git commit -m "First file" &&
		echo foo > bar &&
		git add bar &&
		git commit -m "Second file" &&
		git tag -a -m msg mytag &&
		echo morefoo >> bar &&
		git add bar &&
		git commit -m "Change to second file"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/limit-by-paths/.git/
[main (root-commit) c4bb517] First file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 there
[main 5b2b7c2] Second file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar
[main 49ac088] Change to second file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
ok 25 - setup for limiting exports by PATH

expecting success of 9350.26 'dropping tag of filtered out object': 
(
	cd limit-by-paths &&
	git fast-export --tag-of-filtered-object=drop mytag -- there > output &&
	test_cmp expected output
)

ok 26 - dropping tag of filtered out object

expecting success of 9350.27 'rewriting tag of filtered out object': 
(
	cd limit-by-paths &&
	git fast-export --tag-of-filtered-object=rewrite mytag -- there > output &&
	test_cmp expected output
)

ok 27 - rewriting tag of filtered out object

expecting success of 9350.28 'rewrite tag predating pathspecs to nothing': 
	test_create_repo rewrite_tag_predating_pathspecs &&
	(
		cd rewrite_tag_predating_pathspecs &&

		test_commit initial &&

		git tag -a -m "Some old tag" v0.0.0.0.0.0.1 &&

		test_commit bar &&

		git fast-export --tag-of-filtered-object=rewrite --all -- bar.t >output &&
		grep from.$ZERO_OID output
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/rewrite_tag_predating_pathspecs/.git/
[main (root-commit) f175d86] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
[main 3f8d6f0] bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 bar.t
from 0000000000000000000000000000000000000000
from 0000000000000000000000000000000000000000
ok 28 - rewrite tag predating pathspecs to nothing

checking known breakage of 9350.29 'no exact-ref revisions included': 
	(
		cd limit-by-paths &&
		git fast-export main~2..main~1 > output &&
		test_cmp expected output
	)

--- expected	2022-12-28 08:23:12.562217637 +0000
+++ output	2022-12-28 08:23:12.602219089 +0000
@@ -8,8 +8,7 @@
 data 3
 hi
 
-reset refs/heads/main
-commit refs/heads/main
+commit main~1
 mark :3
 author A U Thor <author@example.com> 1112912713 -0700
 committer C O Mitter <committer@example.com> 1112912713 -0700
not ok 29 - no exact-ref revisions included # TODO known breakage

expecting success of 9350.30 'path limiting with import-marks does not lose unmodified files': 
	git checkout -b simple marks~2 &&
	git fast-export --export-marks=marks simple -- file > /dev/null &&
	echo more content >> file &&
	test_tick &&
	git commit -mnext file &&
	git fast-export --import-marks=marks simple -- file file0 >actual &&
	grep file0 actual

Switched to a new branch 'simple'
[simple ed6c25d] next
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
M 100644 :6 file0
ok 30 - path limiting with import-marks does not lose unmodified files

expecting success of 9350.31 'path limiting works': 
	git fast-export simple -- file >actual &&
	sed -ne "s/^M .* //p" <actual | sort -u >actual.files &&
	echo file >expect &&
	test_cmp expect actual.files

ok 31 - path limiting works

expecting success of 9350.32 'avoid corrupt stream with non-existent mark': 
	test_create_repo avoid_non_existent_mark &&
	(
		cd avoid_non_existent_mark &&

		test_commit important-path &&

		test_commit ignored &&

		git branch A &&
		git branch B &&

		echo foo >>important-path.t &&
		git add important-path.t &&
		test_commit more changes &&

		git fast-export --all -- important-path.t | git fast-import --force
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/avoid_non_existent_mark/.git/
[main (root-commit) 8503f52] important-path
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 important-path.t
[main f2403bd] ignored
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 ignored.t
[main 0864148] more
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 changes
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           6 (         2 loads     )
      marks:           1024 (         4 unique    )
      atoms:              1
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          6
pack_report: pack_mmap_calls          =          2
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /        486
---------------------------------------------------------------------

ok 32 - avoid corrupt stream with non-existent mark

expecting success of 9350.33 'full-tree re-shows unmodified files': 
	git checkout -f simple &&
	git fast-export --full-tree simple >actual &&
	test $(grep -c file0 actual) -eq 3

Already on 'simple'
ok 33 - full-tree re-shows unmodified files

expecting success of 9350.34 'set-up a few more tags for tag export tests': 
	git checkout -f main &&
	HEAD_TREE=$(git show -s --pretty=raw HEAD | grep tree | sed "s/tree //") &&
	git tag    tree_tag        -m "tagging a tree" $HEAD_TREE &&
	git tag -a tree_tag-obj    -m "tagging a tree" $HEAD_TREE &&
	git tag    tag-obj_tag     -m "tagging a tag" tree_tag-obj &&
	git tag -a tag-obj_tag-obj -m "tagging a tag" tree_tag-obj

Switched to branch 'main'
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag-obj_tag tree_tag-obj^{}
hint: Disable this message with "git config advice.nestedTag false"
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag-obj_tag-obj tree_tag-obj^{}
hint: Disable this message with "git config advice.nestedTag false"
ok 34 - set-up a few more tags for tag export tests

expecting success of 9350.35 'tree_tag': 
	mkdir result &&
	(cd result && git init) &&
	git fast-export tree_tag > fe-stream &&
	(cd result && git fast-import < ../fe-stream)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/result/.git/
warning: Tag points to object of unexpected type tree, skipping.
warning: Omitting tag 103d35d3ade9096ef32ac28680addaf4e98543ca,
since tags of trees (or tags of tags of trees, etc.) are not supported.
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            0 (         0 duplicates                  )
      blobs  :            0 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            0 (         0 duplicates          0 deltas of          0 attempts)
      commits:            0 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           0 (         0 loads     )
      marks:           1024 (         0 unique    )
      atoms:              0
Memory total:          2360 KiB
       pools:          2048 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 35 - tree_tag

expecting success of 9350.36 'tree_tag-obj': git fast-export tree_tag-obj
warning: Tag points to object of unexpected type tree, skipping.
warning: Omitting tag 4f0f0024a0a4f19740a55f68987395bf1a291dc7,
since tags of trees (or tags of tags of trees, etc.) are not supported.
ok 36 - tree_tag-obj

expecting success of 9350.37 'tag-obj_tag': git fast-export tag-obj_tag
warning: Tag points to object of unexpected type tree, skipping.
warning: Omitting tag 4f0f0024a0a4f19740a55f68987395bf1a291dc7,
since tags of trees (or tags of tags of trees, etc.) are not supported.
warning: Omitting tag 70213f4b2355740736500c804b001017ad0b2778,
since tags of trees (or tags of tags of trees, etc.) are not supported.
ok 37 - tag-obj_tag

expecting success of 9350.38 'tag-obj_tag-obj': git fast-export tag-obj_tag-obj
warning: Tag points to object of unexpected type tree, skipping.
warning: Omitting tag 4f0f0024a0a4f19740a55f68987395bf1a291dc7,
since tags of trees (or tags of tags of trees, etc.) are not supported.
warning: Omitting tag 24a1e77e0c2090e0c17b61653f8785d1a3577f35,
since tags of trees (or tags of tags of trees, etc.) are not supported.
ok 38 - tag-obj_tag-obj

expecting success of 9350.39 'handling tags of blobs': 
	git tag -a -m "Tag of a blob" blobtag $(git rev-parse main:file) &&
	git fast-export blobtag >actual &&
	cat >expect <<-EOF &&
	blob
	mark :1
	data 9
	die Luft

	tag blobtag
	from :1
	tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
	data 14
	Tag of a blob

	EOF
	test_cmp expect actual

ok 39 - handling tags of blobs

expecting success of 9350.40 'handling nested tags': 
	git tag -a -m "This is a nested tag" nested muss &&
	git fast-export --mark-tags nested >output &&
	grep "^from $ZERO_OID$" output &&
	grep "^tag nested$" output >tag_lines &&
	test_line_count = 2 tag_lines

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f nested muss^{}
hint: Disable this message with "git config advice.nestedTag false"
from 0000000000000000000000000000000000000000
ok 40 - handling nested tags

expecting success of 9350.41 'directory becomes symlink': 
	git init dirtosymlink &&
	git init result &&
	(
		cd dirtosymlink &&
		mkdir foo &&
		mkdir bar &&
		echo hello > foo/world &&
		echo hello > bar/world &&
		git add foo/world bar/world &&
		git commit -q -mone &&
		git rm -r foo &&
		test_ln_s_add bar foo &&
		git commit -q -mtwo
	) &&
	(
		cd dirtosymlink &&
		git fast-export main -- foo |
		(cd ../result && git fast-import --quiet)
	) &&
	(cd result && git show main:foo)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/dirtosymlink/.git/
Reinitialized existing Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/result/.git/
rm 'foo/world'
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
barok 41 - directory becomes symlink

expecting success of 9350.42 'fast-export quotes pathnames': 
	git init crazy-paths &&
	test_config -C crazy-paths core.protectNTFS false &&
	(cd crazy-paths &&
	 blob=$(echo foo | git hash-object -w --stdin) &&
	 git -c core.protectNTFS=false update-index --add \
		--cacheinfo 100644 $blob "$(printf "path with\\nnewline")" \
		--cacheinfo 100644 $blob "path with \"quote\"" \
		--cacheinfo 100644 $blob "path with \\backslash" \
		--cacheinfo 100644 $blob "path with space" &&
	 git commit -m addition &&
	 git ls-files -z -s | perl -0pe "s{\\t}{$&subdir/}" >index &&
	 git read-tree --empty &&
	 git update-index -z --index-info <index &&
	 git commit -m rename &&
	 git read-tree --empty &&
	 git commit -m deletion &&
	 git fast-export -M HEAD >export.out &&
	 git rev-list HEAD >expect &&
	 git init result &&
	 cd result &&
	 git fast-import <../export.out &&
	 git rev-list HEAD >actual &&
	 test_cmp ../expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/crazy-paths/.git/
[main (root-commit) deac6af] addition
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 "path with\nnewline"
 create mode 100644 "path with \"quote\""
 create mode 100644 "path with \\backslash"
 create mode 100644 path with space
[main 89b4a6a] rename
 Author: A U Thor <author@example.com>
 4 files changed, 0 insertions(+), 0 deletions(-)
 rename "path with\nnewline" => "subdir/path with\nnewline" (100%)
 rename "path with \"quote\"" => "subdir/path with \"quote\"" (100%)
 rename "path with \\backslash" => "subdir/path with \\backslash" (100%)
 rename path with space => subdir/path with space (100%)
[main 39f052a] deletion
 Author: A U Thor <author@example.com>
 4 files changed, 4 deletions(-)
 delete mode 100644 "subdir/path with\nnewline"
 delete mode 100644 "subdir/path with \"quote\""
 delete mode 100644 "subdir/path with \\backslash"
 delete mode 100644 subdir/path with space
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/crazy-paths/result/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            7 (         1 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            3 (         1 duplicates          0 deltas of          1 attempts)
      commits:            3 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 42 - fast-export quotes pathnames

expecting success of 9350.43 'test bidirectionality': 
	git init marks-test &&
	git fast-export --export-marks=marks-cur --import-marks-if-exists=marks-cur --branches | \
	git --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks-if-exists=marks-new &&
	(cd marks-test &&
	git reset --hard &&
	echo Wohlauf > file &&
	git commit -a -m "back in time") &&
	git --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks-if-exists=marks-new --branches | \
	git fast-import --export-marks=marks-cur --import-marks-if-exists=marks-cur

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/marks-test/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           38 (         0 duplicates                  )
      blobs  :           11 (         0 duplicates          1 deltas of          4 attempts)
      trees  :           13 (         0 duplicates         12 deltas of         12 attempts)
      commits:           14 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           5 (         5 loads     )
      marks:           1024 (        25 unique    )
      atoms:             10
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          8
pack_report: pack_mmap_calls          =          4
pack_report: pack_open_windows        =          0 /          1
pack_report: pack_mapped              =          0 /       1492
---------------------------------------------------------------------

HEAD is now at 78e0030 second
[main f4aa696] back in time
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            3 (         0 duplicates                  )
      blobs  :            1 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            1 (         0 duplicates          0 deltas of          0 attempts)
      commits:            1 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           5 (         1 loads     )
      marks:           1024 (        16 unique    )
      atoms:              5
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 43 - test bidirectionality

expecting success of 9350.44 'avoid uninteresting refs': 
	> tmp-marks &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks main > /dev/null &&
	git tag v1.0 &&
	git branch uninteresting &&
	echo bump > file &&
	git commit -a -m bump &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks ^uninteresting ^v1.0 main > actual &&
	test_cmp expected actual

[main 64d65e0] bump
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 44 - avoid uninteresting refs

expecting success of 9350.45 'refs are updated even if no commits need to be exported': 
	> tmp-marks &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks main > /dev/null &&
	git fast-export --import-marks=tmp-marks \
		--export-marks=tmp-marks main > actual &&
	test_cmp expected actual

ok 45 - refs are updated even if no commits need to be exported

expecting success of 9350.46 'use refspec': 
	git fast-export --refspec refs/heads/main:refs/heads/foobar main >actual2 &&
	grep "^commit " actual2 | sort | uniq >actual &&
	echo "commit refs/heads/foobar" > expected &&
	test_cmp expected actual

ok 46 - use refspec

expecting success of 9350.47 'delete ref because entire history excluded': 
	git branch to-delete &&
	git fast-export to-delete ^to-delete >actual &&
	cat >expected <<-EOF &&
	reset refs/heads/to-delete
	from $ZERO_OID

	EOF
	test_cmp expected actual

ok 47 - delete ref because entire history excluded

expecting success of 9350.48 'delete refspec': 
	git fast-export --refspec :refs/heads/to-delete >actual &&
	cat >expected <<-EOF &&
	reset refs/heads/to-delete
	from $ZERO_OID

	EOF
	test_cmp expected actual

ok 48 - delete refspec

expecting success of 9350.49 'when using -C, do not declare copy when source of copy is also modified': 
	test_create_repo src &&
	echo a_line >src/file.txt &&
	git -C src add file.txt &&
	git -C src commit -m 1st_commit &&

	cp src/file.txt src/file2.txt &&
	echo another_line >>src/file.txt &&
	git -C src add file.txt file2.txt &&
	git -C src commit -m 2nd_commit &&

	test_create_repo dst &&
	git -C src fast-export --all -C >actual &&
	git -C dst fast-import <actual &&
	git -C src show >expected &&
	git -C dst show >actual &&
	test_cmp expected actual

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/src/.git/
[main (root-commit) b469450] 1st_commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
[main 85ccff7] 2nd_commit
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file2.txt
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/dst/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:            6 (         0 duplicates                  )
      blobs  :            2 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            2 (         0 duplicates          0 deltas of          1 attempts)
      commits:            2 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         4 unique    )
      atoms:              2
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 49 - when using -C, do not declare copy when source of copy is also modified

expecting success of 9350.50 'merge commit gets exported with --import-marks': 
	test_create_repo merging &&
	(
		cd merging &&
		test_commit initial &&
		git checkout -b topic &&
		test_commit on-topic &&
		git checkout main &&
		test_commit on-main &&
		test_tick &&
		git merge --no-ff -m Yeah topic &&

		echo ":1 $(git rev-parse HEAD^^)" >marks &&
		git fast-export --import-marks=marks main >out &&
		grep Yeah out
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/merging/.git/
[main (root-commit) 1aef781] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 initial.t
Switched to a new branch 'topic'
[topic bb9f331] on-topic
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 on-topic.t
Switched to branch 'main'
[main a2e3e6b] on-main
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 on-main.t
Merge made by the 'ort' strategy.
 on-topic.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 on-topic.t
Yeah
ok 50 - merge commit gets exported with --import-marks

expecting success of 9350.51 'fast-export --first-parent outputs all revisions output by revision walk': 
	git init first-parent &&
	(
		cd first-parent &&
		test_commit A &&
		git checkout -b topic1 &&
		test_commit B &&
		git checkout main &&
		git merge --no-ff topic1 &&

		git checkout -b topic2 &&
		test_commit C &&
		git checkout main &&
		git merge --no-ff topic2 &&

		test_commit D &&

		git fast-export main -- --first-parent >first-parent-export &&
		git fast-export main -- --first-parent --reverse >first-parent-reverse-export &&
		test_cmp first-parent-export first-parent-reverse-export &&

		git init import &&
		git -C import fast-import <first-parent-export &&

		git log --format="%ad %s" --first-parent main >expected &&
		git -C import log --format="%ad %s" --all >actual &&
		test_cmp expected actual &&
		test_line_count = 4 actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/first-parent/.git/
[main (root-commit) 40531c9] A
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 A.t
Switched to a new branch 'topic1'
[topic1 26bf445] B
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 B.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 B.t
Switched to a new branch 'topic2'
[topic2 3d54688] C
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
Switched to branch 'main'
Merge made by the 'ort' strategy.
 C.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 C.t
[main 0270458] D
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 D.t
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9350-fast-export/first-parent/import/.git/
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           12 (         0 duplicates                  )
      blobs  :            4 (         0 duplicates          0 deltas of          0 attempts)
      trees  :            4 (         0 duplicates          3 deltas of          3 attempts)
      commits:            4 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:           1024 (         8 unique    )
      atoms:              4
Memory total:          2446 KiB
       pools:          2133 KiB
     objects:           312 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =          0
pack_report: pack_mmap_calls          =          0
pack_report: pack_open_windows        =          0 /          0
pack_report: pack_mapped              =          0 /          0
---------------------------------------------------------------------

ok 51 - fast-export --first-parent outputs all revisions output by revision walk

# still have 1 known breakage(s)
# passed all remaining 50 test(s)
1..51
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9401-git-cvsserver-crlf.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9401-git-cvsserver-crlf/.git/
expecting success of 9401.1 'setup': 
    git config push.default matching &&
    echo "Simple text file" >textfile.c &&
    echo "File with embedded NUL: Q <- there" | q_to_nul > binfile.bin &&
    mkdir subdir &&
    echo "Another text file" > subdir/file.h &&
    echo "Another binary: Q (this time CR)" | q_to_cr > subdir/withCr.bin &&
    echo "Mixed up NUL, but marked text: Q <- there" | q_to_nul > mixedUp.c &&
    echo "Unspecified" > subdir/unspecified.other &&
    echo "/*.bin -crlf" > .gitattributes &&
    echo "/*.c crlf" >> .gitattributes &&
    echo "subdir/*.bin -crlf" >> .gitattributes &&
    echo "subdir/*.c crlf" >> .gitattributes &&
    echo "subdir/file.h crlf" >> .gitattributes &&
    git add .gitattributes textfile.c binfile.bin mixedUp.c subdir/* &&
    git commit -q -m "First Commit" &&
    git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
    GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
    GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"

ok 1 - setup

expecting success of 9401.2 'cvs co (default crlf)': 
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    test x"$(grep /-k cvswork/CVS/Entries cvswork/subdir/CVS/Entries)" = x""

ok 2 - cvs co (default crlf)

expecting success of 9401.3 'cvs co (allbinary)': 
    GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary true &&
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    marked_as cvswork textfile.c -kb &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes -kb &&
    marked_as cvswork mixedUp.c -kb &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h -kb &&
    marked_as cvswork/subdir unspecified.other -kb

ok 3 - cvs co (allbinary)

expecting success of 9401.4 'cvs co (use attributes/allbinary)': 
    GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr true &&
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes -kb &&
    marked_as cvswork mixedUp.c "" &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h "" &&
    marked_as cvswork/subdir unspecified.other -kb

ok 4 - cvs co (use attributes/allbinary)

expecting success of 9401.5 'cvs co (use attributes)': 
    GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary false &&
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes "" &&
    marked_as cvswork mixedUp.c "" &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h "" &&
    marked_as cvswork/subdir unspecified.other ""

ok 5 - cvs co (use attributes)

expecting success of 9401.6 'adding files': 
    (cd cvswork &&
    (cd subdir &&
    echo "more text" > src.c &&
    GIT_CONFIG="$git_config" cvs -Q add src.c >cvs.log 2>&1 &&
    marked_as . src.c "" &&
    echo "pseudo-binary" > temp.bin
    ) &&
    GIT_CONFIG="$git_config" cvs -Q add subdir/temp.bin >cvs.log 2>&1 &&
    marked_as subdir temp.bin "-kb" &&
    cd subdir &&
    GIT_CONFIG="$git_config" cvs -Q ci -m "adding files" >cvs.log 2>&1 &&
    marked_as . temp.bin "-kb" &&
    marked_as . src.c ""
    )

ok 6 - adding files

expecting success of 9401.7 'updating': 
    git pull gitcvs.git &&
    echo "hi" >subdir/newfile.bin &&
    echo "junk" >subdir/file.h &&
    echo "hi" >subdir/newfile.c &&
    echo "hello" >>binfile.bin &&
    git add subdir/newfile.bin subdir/file.h subdir/newfile.c binfile.bin &&
    git commit -q -m "Add and change some files" &&
    git push gitcvs.git >/dev/null &&
    (cd cvswork &&
    GIT_CONFIG="$git_config" cvs -Q update
    ) &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes "" &&
    marked_as cvswork mixedUp.c "" &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h "" &&
    marked_as cvswork/subdir unspecified.other "" &&
    marked_as cvswork/subdir newfile.bin -kb &&
    marked_as cvswork/subdir newfile.c "" &&
    echo "File with embedded NUL: Q <- there" | q_to_nul > tmpExpect1 &&
    echo "hello" >> tmpExpect1 &&
    cmp cvswork/binfile.bin tmpExpect1

From gitcvs
 * branch            HEAD       -> FETCH_HEAD
Updating 9796767..6d431cd
Fast-forward
 subdir/src.c    | 1 +
 subdir/temp.bin | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 subdir/src.c
 create mode 100644 subdir/temp.bin
To gitcvs.git
   6d431cd..faca8d4  main -> main
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
U binfile.bin
cvs update: `cvs.log' is no longer in the repository
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
cvs update: `subdir/cvs.log' is no longer in the repository
U subdir/file.h
U subdir/newfile.bin
U subdir/newfile.c
ok 7 - updating

expecting success of 9401.8 'cvs co (use attributes/guess)': 
    GIT_DIR="$SERVERDIR" git config gitcvs.allbinary guess &&
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes "" &&
    marked_as cvswork mixedUp.c "" &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h "" &&
    marked_as cvswork/subdir unspecified.other "" &&
    marked_as cvswork/subdir newfile.bin -kb &&
    marked_as cvswork/subdir newfile.c ""

ok 8 - cvs co (use attributes/guess)

expecting success of 9401.9 'setup multi-line files': 
    ( echo "line 1" &&
      echo "line 2" &&
      echo "line 3" &&
      echo "line 4 with NUL: Q <-" ) | q_to_nul > multiline.c &&
    git add multiline.c &&
    ( echo "line 1" &&
      echo "line 2" &&
      echo "line 3" &&
      echo "line 4" ) | q_to_nul > multilineTxt.c &&
    git add multilineTxt.c &&
    git commit -q -m "multiline files" &&
    git push gitcvs.git >/dev/null

To gitcvs.git
   faca8d4..509c7f1  main -> main
ok 9 - setup multi-line files

expecting success of 9401.10 'cvs co (guess)': 
    GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr false &&
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork main >cvs.log 2>&1 &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes "" &&
    marked_as cvswork mixedUp.c -kb &&
    marked_as cvswork multiline.c -kb &&
    marked_as cvswork multilineTxt.c "" &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h "" &&
    marked_as cvswork/subdir unspecified.other "" &&
    marked_as cvswork/subdir newfile.bin "" &&
    marked_as cvswork/subdir newfile.c ""

ok 10 - cvs co (guess)

expecting success of 9401.11 'cvs co another copy (guess)': 
    GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1 &&
    marked_as cvswork2 textfile.c "" &&
    marked_as cvswork2 binfile.bin -kb &&
    marked_as cvswork2 .gitattributes "" &&
    marked_as cvswork2 mixedUp.c -kb &&
    marked_as cvswork2 multiline.c -kb &&
    marked_as cvswork2 multilineTxt.c "" &&
    marked_as cvswork2/subdir withCr.bin -kb &&
    marked_as cvswork2/subdir file.h "" &&
    marked_as cvswork2/subdir unspecified.other "" &&
    marked_as cvswork2/subdir newfile.bin "" &&
    marked_as cvswork2/subdir newfile.c ""

ok 11 - cvs co another copy (guess)

expecting success of 9401.12 'cvs status - sticky options': 
    check_status_options cvswork2 textfile.c "" &&
    check_status_options cvswork2 binfile.bin -kb &&
    check_status_options cvswork2 .gitattributes "" &&
    check_status_options cvswork2 mixedUp.c -kb &&
    check_status_options cvswork2 multiline.c -kb &&
    check_status_options cvswork2 multilineTxt.c "" &&
    check_status_options cvswork2/subdir withCr.bin -kb &&
    check_status_options cvswork2 subdir/withCr.bin -kb &&
    check_status_options cvswork2/subdir file.h "" &&
    check_status_options cvswork2 subdir/file.h "" &&
    check_status_options cvswork2/subdir unspecified.other "" &&
    check_status_options cvswork2/subdir newfile.bin "" &&
    check_status_options cvswork2/subdir newfile.c ""

ok 12 - cvs status - sticky options

expecting success of 9401.13 'add text (guess)': 
    (cd cvswork &&
    echo "simpleText" > simpleText.c &&
    GIT_CONFIG="$git_config" cvs -Q add simpleText.c
    ) &&
    marked_as cvswork simpleText.c ""

cvs add: scheduling file `simpleText.c' for addition
cvs add: use `cvs commit' to add this file permanently
ok 13 - add text (guess)

expecting success of 9401.14 'add bin (guess)': 
    (cd cvswork &&
    echo "simpleBin: NUL: Q <- there" | q_to_nul > simpleBin.bin &&
    GIT_CONFIG="$git_config" cvs -Q add simpleBin.bin
    ) &&
    marked_as cvswork simpleBin.bin -kb

cvs add: scheduling file `simpleBin.bin' for addition
cvs add: use `cvs commit' to add this file permanently
ok 14 - add bin (guess)

expecting success of 9401.15 'remove files (guess)': 
    (cd cvswork &&
    GIT_CONFIG="$git_config" cvs -Q rm -f subdir/file.h &&
    (cd subdir &&
    GIT_CONFIG="$git_config" cvs -Q rm -f withCr.bin
    )) &&
    marked_as cvswork/subdir withCr.bin -kb &&
    marked_as cvswork/subdir file.h ""

cvs remove: scheduling `subdir/file.h' for removal
cvs remove: use `cvs commit' to remove this file permanently
cvs remove: scheduling `subdir/withCr.bin' for removal
cvs remove: use `cvs commit' to remove this file permanently
ok 15 - remove files (guess)

expecting success of 9401.16 'cvs ci (guess)': 
    (cd cvswork &&
    GIT_CONFIG="$git_config" cvs -Q ci -m "add/rm files" >cvs.log 2>&1
    ) &&
    marked_as cvswork textfile.c "" &&
    marked_as cvswork binfile.bin -kb &&
    marked_as cvswork .gitattributes "" &&
    marked_as cvswork mixedUp.c -kb &&
    marked_as cvswork multiline.c -kb &&
    marked_as cvswork multilineTxt.c "" &&
    not_present cvswork/subdir withCr.bin &&
    not_present cvswork/subdir file.h &&
    marked_as cvswork/subdir unspecified.other "" &&
    marked_as cvswork/subdir newfile.bin "" &&
    marked_as cvswork/subdir newfile.c "" &&
    marked_as cvswork simpleBin.bin -kb &&
    marked_as cvswork simpleText.c ""

ok 16 - cvs ci (guess)

expecting success of 9401.17 'update subdir of other copy (guess)': 
    (cd cvswork2/subdir &&
    GIT_CONFIG="$git_config" cvs -Q update
    ) &&
    marked_as cvswork2 textfile.c "" &&
    marked_as cvswork2 binfile.bin -kb &&
    marked_as cvswork2 .gitattributes "" &&
    marked_as cvswork2 mixedUp.c -kb &&
    marked_as cvswork2 multiline.c -kb &&
    marked_as cvswork2 multilineTxt.c "" &&
    not_present cvswork2/subdir withCr.bin &&
    not_present cvswork2/subdir file.h &&
    marked_as cvswork2/subdir unspecified.other "" &&
    marked_as cvswork2/subdir newfile.bin "" &&
    marked_as cvswork2/subdir newfile.c "" &&
    not_present cvswork2 simpleBin.bin &&
    not_present cvswork2 simpleText.c

cvs update: `subdir/file.h' is no longer in the repository
cvs update: `subdir/withCr.bin' is no longer in the repository
ok 17 - update subdir of other copy (guess)

expecting success of 9401.18 'update/merge full other copy (guess)': 
    git pull gitcvs.git main &&
    sed "s/3/replaced_3/" < multilineTxt.c > ml.temp &&
    mv ml.temp multilineTxt.c &&
    git add multilineTxt.c &&
    git commit -q -m "modify multiline file" >> "${WORKDIR}/marked.log" &&
    git push gitcvs.git >/dev/null &&
    (cd cvswork2 &&
    sed "s/1/replaced_1/" < multilineTxt.c > ml.temp &&
    mv ml.temp multilineTxt.c &&
    GIT_CONFIG="$git_config" cvs update > cvs.log 2>&1
    ) &&
    marked_as cvswork2 textfile.c "" &&
    marked_as cvswork2 binfile.bin -kb &&
    marked_as cvswork2 .gitattributes "" &&
    marked_as cvswork2 mixedUp.c -kb &&
    marked_as cvswork2 multiline.c -kb &&
    marked_as cvswork2 multilineTxt.c "" &&
    not_present cvswork2/subdir withCr.bin &&
    not_present cvswork2/subdir file.h &&
    marked_as cvswork2/subdir unspecified.other "" &&
    marked_as cvswork2/subdir newfile.bin "" &&
    marked_as cvswork2/subdir newfile.c "" &&
    marked_as cvswork2 simpleBin.bin -kb &&
    marked_as cvswork2 simpleText.c "" &&
    echo "line replaced_1" > tmpExpect2 &&
    echo "line 2" >> tmpExpect2 &&
    echo "line replaced_3" >> tmpExpect2 &&
    echo "line 4" | q_to_nul >> tmpExpect2 &&
    cmp cvswork2/multilineTxt.c tmpExpect2

From gitcvs
 * branch            main       -> FETCH_HEAD
Updating 509c7f1..11562e1
Fast-forward
 simpleBin.bin     | Bin 0 -> 27 bytes
 simpleText.c      |   1 +
 subdir/file.h     |   1 -
 subdir/withCr.bin |   1 -
 4 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 simpleBin.bin
 create mode 100644 simpleText.c
 delete mode 100644 subdir/file.h
 delete mode 100644 subdir/withCr.bin
To gitcvs.git
   11562e1..e3c7165  main -> main
ok 18 - update/merge full other copy (guess)

# passed all 18 test(s)
1..18
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9400-git-cvsserver-server.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9400-git-cvsserver-server/.git/
expecting success of 9400.1 'setup': 
  git config push.default matching &&
  echo >empty &&
  git add empty &&
  git commit -q -m "First Commit" &&
  mkdir secondroot &&
  ( cd secondroot &&
  git init &&
  touch secondrootfile &&
  git add secondrootfile &&
  git commit -m "second root") &&
  git fetch secondroot main &&
  git merge --allow-unrelated-histories FETCH_HEAD &&
  git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
  GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
  GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" &&
  GIT_DIR="$SERVERDIR" git config gitcvs.authdb "$SERVERDIR/auth.db" &&
  echo "cvsuser:$PWDHASH" >"$SERVERDIR/auth.db"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9400-git-cvsserver-server/secondroot/.git/
[main (root-commit) 0fe3a5e] second root
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 secondrootfile
From secondroot
 * branch            main       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 secondrootfile | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 secondrootfile
ok 1 - setup

expecting success of 9400.2 'basic checkout': GIT_CONFIG="$git_config" cvs -Q co -d cvswork main &&
   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&
   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \$p))" = "secondrootfile/1.1/"
U cvswork/empty
U cvswork/secondrootfile
ok 2 - basic checkout

expecting success of 9400.3 'pserver authentication': cat request-anonymous | git-cvsserver pserver >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 3 - pserver authentication

expecting success of 9400.4 'pserver authentication failure (non-anonymous user)': if cat request-git | git-cvsserver pserver >log 2>&1
   then
       false
   else
       true
   fi &&
   sed -ne \$p log | grep "^I HATE YOU\$"
I HATE YOU
ok 4 - pserver authentication failure (non-anonymous user)

expecting success of 9400.5 'pserver authentication success (non-anonymous user with password)': cat login-git-ok | git-cvsserver pserver >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 5 - pserver authentication success (non-anonymous user with password)

expecting success of 9400.6 'pserver authentication (login)': cat login-anonymous | git-cvsserver pserver >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 6 - pserver authentication (login)

expecting success of 9400.7 'pserver authentication failure (login/non-anonymous user)': if cat login-git | git-cvsserver pserver >log 2>&1
   then
       false
   else
       true
   fi &&
   sed -ne \$p log | grep "^I HATE YOU\$"
I HATE YOU
ok 7 - pserver authentication failure (login/non-anonymous user)

expecting success of 9400.8 'req_Root failure (relative pathname)': if cat request-relative | git-cvsserver pserver >log 2>&1
   then
       echo unexpected success
       false
   else
       true
   fi &&
   tail log | grep "^error 1 Root must be an absolute pathname$"
error 1 Root must be an absolute pathname
ok 8 - req_Root failure (relative pathname)

expecting success of 9400.9 'req_Root failure (conflicting roots)': cat request-conflict | git-cvsserver pserver >log 2>&1 &&
   tail log | grep "^error 1 Conflicting roots specified$"
error 1 Conflicting roots specified
ok 9 - req_Root failure (conflicting roots)

expecting success of 9400.10 'req_Root (strict paths)': cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 10 - req_Root (strict paths)

expecting success of 9400.11 'req_Root failure (strict-paths)': 
    ! cat request-anonymous |
    git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1

ok 11 - req_Root failure (strict-paths)

expecting success of 9400.12 'req_Root (w/o strict-paths)': cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 12 - req_Root (w/o strict-paths)

expecting success of 9400.13 'req_Root failure (w/o strict-paths)': 
    ! cat request-anonymous |
    git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1

ok 13 - req_Root failure (w/o strict-paths)

expecting success of 9400.14 'req_Root (base-path)': cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 14 - req_Root (base-path)

expecting success of 9400.15 'req_Root failure (base-path)': 
    ! cat request-anonymous |
    git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1

ok 15 - req_Root failure (base-path)

expecting success of 9400.16 'req_Root (export-all)': cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 16 - req_Root (export-all)

expecting success of 9400.17 'req_Root failure (export-all w/o directory list)': ! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)
ok 17 - req_Root failure (export-all w/o directory list)

expecting success of 9400.18 'req_Root (everything together)': cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&
   sed -ne \$p log | grep "^I LOVE YOU\$"
I LOVE YOU
ok 18 - req_Root (everything together)

expecting success of 9400.19 'gitcvs.enabled = false': GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&
   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1
   then
     echo unexpected cvs success
     false
   else
     true
   fi &&
   grep "GITCVS emulation disabled" cvs.log &&
   test ! -d cvswork2
GITCVS emulation disabled
ok 19 - gitcvs.enabled = false

expecting success of 9400.20 'gitcvs.ext.enabled = true': GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&
   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&
   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1 &&
   test_cmp cvswork cvswork2
Common subdirectories: cvswork/CVS and cvswork2/CVS
ok 20 - gitcvs.ext.enabled = true

expecting success of 9400.21 'gitcvs.ext.enabled = false': GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled false &&
   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1
   then
     echo unexpected cvs success
     false
   else
     true
   fi &&
   grep "GITCVS emulation disabled" cvs.log &&
   test ! -d cvswork2
GITCVS emulation disabled
ok 21 - gitcvs.ext.enabled = false

expecting success of 9400.22 'gitcvs.dbname': GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&
   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs.%a.%m.sqlite &&
   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1 &&
   test_cmp cvswork cvswork2 &&
   test -f "$SERVERDIR/gitcvs.ext.main.sqlite" &&
   cmp "$SERVERDIR/gitcvs.main.sqlite" "$SERVERDIR/gitcvs.ext.main.sqlite"
Common subdirectories: cvswork/CVS and cvswork2/CVS
ok 22 - gitcvs.dbname

expecting success of 9400.23 'gitcvs.ext.dbname': GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&
   GIT_DIR="$SERVERDIR" git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&
   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&
   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 main >cvs.log 2>&1 &&
   test_cmp cvswork cvswork2 &&
   test -f "$SERVERDIR/gitcvs1.ext.main.sqlite" &&
   test ! -f "$SERVERDIR/gitcvs2.ext.main.sqlite" &&
   cmp "$SERVERDIR/gitcvs.main.sqlite" "$SERVERDIR/gitcvs1.ext.main.sqlite"
Common subdirectories: cvswork/CVS and cvswork2/CVS
ok 23 - gitcvs.ext.dbname

expecting success of 9400.24 'cvs update (create new file)': echo testfile1 >testfile1 &&
   git add testfile1 &&
   git commit -q -m "Add testfile1" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.1/" &&
   test_cmp testfile1 ../testfile1
To gitcvs.git
   4ea9390..3c6a419  main -> main
U testfile1
ok 24 - cvs update (create new file)

expecting success of 9400.25 'cvs update (update existing file)': echo line 2 >>testfile1 &&
   git add testfile1 &&
   git commit -q -m "Append to testfile1" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.2/" &&
   test_cmp testfile1 ../testfile1
To gitcvs.git
   3c6a419..696e081  main -> main
U testfile1
ok 25 - cvs update (update existing file)

checking known breakage of 9400.26 'cvs update w/o -d doesn't create subdir (TODO)': 
   mkdir test &&
   echo >test/empty &&
   git add test &&
   git commit -q -m "Single Subdirectory" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test ! -d test

To gitcvs.git
   696e081..33879bd  main -> main
U test/empty
not ok 26 - cvs update w/o -d doesn't create subdir (TODO) # TODO known breakage

expecting success of 9400.27 'cvs update (subdirectories)': (for dir in A A/B A/B/C A/D E; do
      mkdir $dir &&
      echo "test file in $dir" >"$dir/file_in_$(echo $dir|sed -e "s#/# #g")"  &&
      git add $dir || exit 1
   done) &&
   git commit -q -m "deep sub directory structure" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update -d &&
   (for dir in A A/B A/B/C A/D E; do
      filename="file_in_$(echo $dir|sed -e "s#/# #g")" &&
      if test "$(echo $(grep -v ^D $dir/CVS/Entries|cut -d/ -f2,3,5))" = "$filename/1.1/" &&
	test_cmp "$dir/$filename" "../$dir/$filename"; then
        :
      else
	exit 1
      fi
    done)
To gitcvs.git
   33879bd..9436d83  main -> main
U A/file_in_A
U E/file_in_E
U A/B/file_in_A B
U A/D/file_in_A D
U A/B/C/file_in_A B C
ok 27 - cvs update (subdirectories)

expecting success of 9400.28 'cvs update (delete file)': git rm testfile1 &&
   git commit -q -m "Remove testfile1" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test -z "$(grep testfile1 CVS/Entries)" &&
   test ! -f testfile1
rm 'testfile1'
To gitcvs.git
   9436d83..09366c6  main -> main
cvs update: `testfile1' is no longer in the repository
ok 28 - cvs update (delete file)

expecting success of 9400.29 'cvs update (re-add deleted file)': echo readded testfile >testfile1 &&
   git add testfile1 &&
   git commit -q -m "Re-Add testfile1" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.4/" &&
   test_cmp testfile1 ../testfile1
To gitcvs.git
   09366c6..8ea0549  main -> main
U testfile1
ok 29 - cvs update (re-add deleted file)

expecting success of 9400.30 'cvs update (merge)': echo Line 0 >expected &&
   for i in 1 2 3 4 5 6 7
   do
     echo Line $i >>merge &&
     echo Line $i >>expected || return 1
   done &&
   echo Line 8 >>expected &&
   git add merge &&
   git commit -q -m "Merge test (pre-merge)" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test "$(echo $(grep merge CVS/Entries|cut -d/ -f2,3,5))" = "merge/1.1/" &&
   test_cmp merge ../merge &&
   ( echo Line 0 && cat merge ) >merge.tmp &&
   mv merge.tmp merge &&
   cd "$WORKDIR" &&
   echo Line 8 >>merge &&
   git add merge &&
   git commit -q -m "Merge test (merge)" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   sleep 1 && touch merge &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test_cmp merge ../expected
To gitcvs.git
   8ea0549..f31ee25  main -> main
U merge
To gitcvs.git
   f31ee25..792463d  main -> main
Merging differences between 1.1 and 1.2 into merge
M merge
ok 30 - cvs update (merge)

expecting success of 9400.31 'cvs update (conflict merge)': ( echo LINE 0 && cat merge ) >merge.tmp &&
   mv merge.tmp merge &&
   git add merge &&
   git commit -q -m "Merge test (conflict)" &&
   git push gitcvs.git >/dev/null &&
   cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update &&
   test_cmp merge ../expected.C
To gitcvs.git
   792463d..ba02484  main -> main
Merging differences between 1.2 and 1.3 into merge
cvs update: conflicts found in merge
C merge
ok 31 - cvs update (conflict merge)

expecting success of 9400.32 'cvs update (-C)': cd cvswork &&
   GIT_CONFIG="$git_config" cvs -Q update -C &&
   test_cmp merge ../merge
U empty
U merge
U secondrootfile
U testfile1
U A/file_in_A
U E/file_in_E
U test/empty
U A/B/file_in_A B
U A/D/file_in_A D
U A/B/C/file_in_A B C
ok 32 - cvs update (-C)

expecting success of 9400.33 'cvs update (merge no-op)': echo Line 9 >>merge &&
    cp merge cvswork/merge &&
    git add merge &&
    git commit -q -m "Merge test (no-op)" &&
    git push gitcvs.git >/dev/null &&
    cd cvswork &&
    sleep 1 && touch merge &&
    GIT_CONFIG="$git_config" cvs -Q update &&
    test_cmp merge ../merge
To gitcvs.git
   ba02484..2f86a26  main -> main
Merging differences between 1.3 and 1.4 into merge
M merge
ok 33 - cvs update (merge no-op)

expecting success of 9400.34 'cvs update (-p)': 
    touch really-empty &&
    echo Line 1 > no-lf &&
    printf "Line 2" >> no-lf &&
    git add really-empty no-lf &&
    git commit -q -m "Update -p test" &&
    git push gitcvs.git >/dev/null &&
    cd cvswork &&
    GIT_CONFIG="$git_config" cvs update &&
    for i in merge no-lf empty really-empty; do
	GIT_CONFIG="$git_config" cvs update -p "$i" >$i.out &&
	test_cmp $i.out ../$i || return 1
    done

To gitcvs.git
   2f86a26..9cef819  main -> main
cvs update: Updating .
M merge
U no-lf
U really-empty
cvs update: Updating A
cvs update: Updating E
cvs update: Updating test
cvs update: Updating A/B
cvs update: Updating A/D
cvs update: Updating A/B/C
ok 34 - cvs update (-p)

expecting success of 9400.35 'cvs update (module list supports packed refs)': 
    GIT_DIR="$SERVERDIR" git pack-refs --all &&
    GIT_CONFIG="$git_config" cvs -n up -d 2> out &&
    grep "cvs update: New directory \`main'" < out

cvs update: New directory `main'
ok 35 - cvs update (module list supports packed refs)

expecting success of 9400.36 'cvs status': 
    mkdir status.dir &&
    echo Line > status.dir/status.file &&
    echo Line > status.file &&
    git add status.dir status.file &&
    git commit -q -m "Status test" &&
    git push gitcvs.git >/dev/null &&
    cd cvswork &&
    GIT_CONFIG="$git_config" cvs update &&
    GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out &&
    test_line_count = 2 ../out

To gitcvs.git
   9cef819..590c22f  main -> main
cvs update: Updating .
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
cvs update: `empty.out' is no longer in the repository
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
M merge
cvs update: `merge.out' is no longer in the repository
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
cvs update: `no-lf.out' is no longer in the repository
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1267.
Use of uninitialized value $wrev in string ne at /<<PKGBUILDDIR>>/git-cvsserver line 1312.
cvs update: `really-empty.out' is no longer in the repository
U status.file
cvs update: Updating A
cvs update: Updating E
cvs update: Updating status.dir
U status.dir/status.file
cvs update: Updating test
cvs update: Updating A/B
cvs update: Updating A/D
cvs update: Updating A/B/C
ok 36 - cvs status

expecting success of 9400.37 'cvs status (nonrecursive)': 
    cd cvswork &&
    GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out &&
    test_line_count = 1 ../out

ok 37 - cvs status (nonrecursive)

expecting success of 9400.38 'cvs status (no subdirs in header)': 
    cd cvswork &&
    GIT_CONFIG="$git_config" cvs status | grep ^File: >../out &&
    ! grep / <../out

ok 38 - cvs status (no subdirs in header)

expecting success of 9400.39 'cvs co -c (shows module database)': 
    GIT_CONFIG="$git_config" cvs co -c > out &&
    grep "^main[	 ][ 	]*main$" <out &&
    ! grep -v "^main[	 ][ 	]*main$" <out

main	main
ok 39 - cvs co -c (shows module database)

expecting success of 9400.40 'cvs log': 
    cd cvswork &&
    test x"$expectStat" = x"0" &&
    GIT_CONFIG="$git_config" cvs log merge >../out &&
    sed -e "s%2[0-9][0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]%__DATE__%" ../out > ../actual &&
    test_cmp ../expect ../actual

ok 40 - cvs log

expecting success of 9400.41 'cvs annotate': 
    cd cvswork &&
    GIT_CONFIG="$git_config" cvs annotate merge >../out &&
    sed -e "s/ .*//" ../out >../actual &&
    printf "1.%d\n" 3 1 1 1 1 1 1 1 2 4 >../expect &&
    test_cmp ../expect ../actual

Annotations for merge
***************
ok 41 - cvs annotate

expecting success of 9400.42 'create remote-cvs helper': 
	write_script remote-cvs <<-\EOF
	exec git shell -c "cvs server"
	EOF

ok 42 - create remote-cvs helper

expecting success of 9400.43 'cvs server does not run with vanilla git-shell': 
	(
		cd cvswork &&
		CVS_SERVER=$WORKDIR/remote-cvs &&
		export CVS_SERVER &&
		! cvs log merge
	)

fatal: unrecognized command 'cvs server'
cvs [log aborted]: end of file from server (consult above messages if any)
ok 43 - cvs server does not run with vanilla git-shell

expecting success of 9400.44 'configure git shell to run cvs server': 
	mkdir "$HOME"/git-shell-commands &&

	write_script "$HOME"/git-shell-commands/cvs <<-\EOF &&
	if ! test $# = 1 && test "$1" = "server"
	then
		echo >&2 "git-cvsserver only handles \"server\""
		exit 1
	fi
	exec git cvsserver server
	EOF

	# Should not be used, but part of the recommended setup
	write_script "$HOME"/git-shell-commands/no-interactive-login <<-\EOF
	echo Interactive login forbidden
	EOF

ok 44 - configure git shell to run cvs server

expecting success of 9400.45 'cvs server can run with recommended config': 
	(
		cd cvswork &&
		CVS_SERVER=$WORKDIR/remote-cvs &&
		export CVS_SERVER &&
		cvs log merge
	)


RCS file: /<<PKGBUILDDIR>>/t/trash directory.t9400-git-cvsserver-server/gitcvs.git/main/merge,v
Working file: merge
head: 1.4
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 4;	selected revisions: 4
description:
----------------------------
revision 1.4
date: 2005/04/01 13:14:15;  author: author;  state: Exp;  lines: +2 -3

Merge test (no-op)
 
----------------------------
revision 1.3
date: 2005/04/01 13:14:15;  author: author;  state: Exp;  lines: +2 -3

Merge test (conflict)
 
----------------------------
revision 1.2
date: 2005/04/01 13:14:15;  author: author;  state: Exp;  lines: +2 -3

Merge test (merge)
 
----------------------------
revision 1.1
date: 2005/04/01 13:14:15;  author: author;  state: Exp;  lines: +2 -3

Merge test (pre-merge)
 
=============================================================================
ok 45 - cvs server can run with recommended config

# still have 1 known breakage(s)
# passed all remaining 44 test(s)
1..45
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9501-gitweb-standalone-http-status.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9501-gitweb-standalone-http-status/.git/
expecting success of 9501.1 'setup': 
	test_commit 'SnapshotTests' 'i can has snapshot'

[main (root-commit) cea0920] SnapshotTests
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 i can has snapshot
ok 1 - setup

expecting success of 9501.2 'snapshots: tgz only default format enabled': gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
    grep "Status: 200 OK" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&
    grep "403 - Unsupported snapshot format" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&
    grep "403 - Snapshot format not allowed" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
    grep "403 - Unsupported snapshot format" gitweb.output
grep: gitweb.output: binary file matches
403 - Unsupported snapshot format
403 - Snapshot format not allowed
403 - Unsupported snapshot format
ok 2 - snapshots: tgz only default format enabled

expecting success of 9501.3 'snapshots: all enabled in default, use default disabled value': gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
    grep "Status: 200 OK" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" &&
    grep "Status: 200 OK" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" &&
    grep "403 - Snapshot format not allowed" gitweb.output &&
    gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
    grep "Status: 200 OK" gitweb.output
grep: gitweb.output: binary file matches
grep: gitweb.output: binary file matches
403 - Snapshot format not allowed
grep: gitweb.output: binary file matches
ok 3 - snapshots: all enabled in default, use default disabled value

expecting success of 9501.4 'snapshots: zip explicitly disabled': gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" &&
    grep "403 - Snapshot format not allowed" gitweb.output
403 - Snapshot format not allowed
ok 4 - snapshots: zip explicitly disabled

expecting success of 9501.5 'snapshots: tgz explicitly enabled': gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" &&
    grep "Status: 200 OK" gitweb.output
grep: gitweb.output: binary file matches
ok 5 - snapshots: tgz explicitly enabled

expecting success of 9501.6 'snapshots: good tree-ish id': 
	gitweb_run "p=.git;a=snapshot;h=main;sf=tgz" &&
	grep "Status: 200 OK" gitweb.output

grep: gitweb.output: binary file matches
ok 6 - snapshots: good tree-ish id

expecting success of 9501.7 'snapshots: bad tree-ish id': 
	gitweb_run "p=.git;a=snapshot;h=frizzumFrazzum;sf=tgz" &&
	grep "404 - Object does not exist" gitweb.output

404 - Object does not exist
ok 7 - snapshots: bad tree-ish id

expecting success of 9501.8 'snapshots: bad tree-ish id (tagged object)': 
	echo object > tag-object &&
	git add tag-object &&
	test_tick && git commit -m "Object to be tagged" &&
	git tag tagged-object $(git hash-object tag-object) &&
	gitweb_run "p=.git;a=snapshot;h=tagged-object;sf=tgz" &&
	grep "400 - Object is not a tree-ish" gitweb.output

[main 031b7cf] Object to be tagged
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 tag-object
400 - Object is not a tree-ish
ok 8 - snapshots: bad tree-ish id (tagged object)

expecting success of 9501.9 'snapshots: good object id': 
	ID=$(git rev-parse --verify HEAD) &&
	gitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" &&
	grep "Status: 200 OK" gitweb.output

grep: gitweb.output: binary file matches
ok 9 - snapshots: good object id

expecting success of 9501.10 'snapshots: bad object id': 
	gitweb_run "p=.git;a=snapshot;h=abcdef01234;sf=tgz" &&
	grep "404 - Object does not exist" gitweb.output

404 - Object does not exist
ok 10 - snapshots: bad object id

expecting success of 9501.11 'modification: feed last-modified': 
	gitweb_run "p=.git;a=atom;h=main" &&
	grep "Status: 200 OK" gitweb.headers &&
	grep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers

Status: 200 OK
Last-modified: Thu, 7 Apr 2005 22:14:13 +0000
ok 11 - modification: feed last-modified

expecting success of 9501.12 'modification: feed if-modified-since (modified)': 
	HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&
	export HTTP_IF_MODIFIED_SINCE &&
	test_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&
	gitweb_run "p=.git;a=atom;h=main" &&
	grep "Status: 200 OK" gitweb.headers

Status: 200 OK
ok 12 - modification: feed if-modified-since (modified)

expecting success of 9501.13 'modification: feed if-modified-since (unmodified)': 
	HTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" &&
	export HTTP_IF_MODIFIED_SINCE &&
	test_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&
	gitweb_run "p=.git;a=atom;h=main" &&
	grep "Status: 304 Not Modified" gitweb.headers

Status: 304 Not Modified
ok 13 - modification: feed if-modified-since (unmodified)

expecting success of 9501.14 'modification: snapshot last-modified': 
	gitweb_run "p=.git;a=snapshot;h=main;sf=tgz" &&
	grep "Status: 200 OK" gitweb.headers &&
	grep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers

Status: 200 OK
Last-modified: Thu, 7 Apr 2005 22:14:13 +0000
ok 14 - modification: snapshot last-modified

expecting success of 9501.15 'modification: snapshot if-modified-since (modified)': 
	HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&
	export HTTP_IF_MODIFIED_SINCE &&
	test_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&
	gitweb_run "p=.git;a=snapshot;h=main;sf=tgz" &&
	grep "Status: 200 OK" gitweb.headers

Status: 200 OK
ok 15 - modification: snapshot if-modified-since (modified)

expecting success of 9501.16 'modification: snapshot if-modified-since (unmodified)': 
	HTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" &&
	export HTTP_IF_MODIFIED_SINCE &&
	test_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&
	gitweb_run "p=.git;a=snapshot;h=main;sf=tgz" &&
	grep "Status: 304 Not Modified" gitweb.headers

Status: 304 Not Modified
ok 16 - modification: snapshot if-modified-since (unmodified)

expecting success of 9501.17 'modification: tree snapshot': 
	ID=$(git rev-parse --verify HEAD^{tree}) &&
	HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" &&
	export HTTP_IF_MODIFIED_SINCE &&
	test_when_finished "unset HTTP_IF_MODIFIED_SINCE" &&
	gitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" &&
	grep "Status: 200 OK" gitweb.headers &&
	! grep -i "last-modified" gitweb.headers

Status: 200 OK
ok 17 - modification: tree snapshot

expecting success of 9501.18 'load checking: load too high (default action)': 
	gitweb_run "p=.git" &&
	grep "Status: 503 Service Unavailable" gitweb.headers &&
	grep "503 - The load average on the server is too high" gitweb.body

Status: 503 Service Unavailable
503 - The load average on the server is too high
ok 18 - load checking: load too high (default action)

expecting success of 9501.19 'invalid arguments: invalid regexp (in project search)': 
	gitweb_run "a=project_list;s=*\.git;sr=1" &&
	grep "Status: 400" gitweb.headers &&
	grep "400 - Invalid.*regexp" gitweb.body

Status: 400 Bad Request
400 - Invalid search regexp &#39;*\.git&#39;
ok 19 - invalid arguments: invalid regexp (in project search)

# passed all 19 test(s)
1..19
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9402-git-cvsserver-refs.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9402-git-cvsserver-refs/.git/
expecting success of 9402.1 'setup v1, b1': 
	echo "Simple text file" >textfile.c &&
	echo "t2" >t2 &&
	mkdir adir &&
	echo "adir/afile line1" >adir/afile &&
	echo "adir/afile line2" >>adir/afile &&
	echo "adir/afile line3" >>adir/afile &&
	echo "adir/afile line4" >>adir/afile &&
	echo "adir/a2file" >>adir/a2file &&
	mkdir adir/bdir &&
	echo "adir/bdir/bfile line 1" >adir/bdir/bfile &&
	echo "adir/bdir/bfile line 2" >>adir/bdir/bfile &&
	echo "adir/bdir/b2file" >adir/bdir/b2file &&
	git add textfile.c t2 adir &&
	git commit -q -m "First Commit (v1)" &&
	git tag v1 &&
	git branch b1 &&
	git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
	GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
	GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"

ok 1 - setup v1, b1

expecting success of 9402.2 'cvs co v1': 
	cvs -f -Q co -r v1 -d cvswork main >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 2 - cvs co v1

expecting success of 9402.3 'cvs co b1': 
	cvs -f co -r b1 -d cvswork main >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 3 - cvs co b1

expecting success of 9402.4 'cvs co b1 [cvswork3]': 
	cvs -f co -r b1 -d cvswork3 main >cvs.log 2>&1 &&
	check_start_tree cvswork3 &&
	check_file cvswork3 textfile.c v1 &&
	check_file cvswork3 t2 v1 &&
	check_file cvswork3 adir/afile v1 &&
	check_file cvswork3 adir/a2file v1 &&
	check_file cvswork3 adir/bdir/bfile v1 &&
	check_file cvswork3 adir/bdir/b2file v1 &&
	check_end_full_tree cvswork3 v1

ok 4 - cvs co b1 [cvswork3]

expecting success of 9402.5 'edit cvswork3 and save diff': 
	(
		cd cvswork3 &&
		sed -e "s/line1/line1 - data/" adir/afile >adir/afileNEW &&
		mv -f adir/afileNEW adir/afile &&
		echo "afile5" >adir/afile5 &&
		rm t2 &&
		cvs -f add adir/afile5 &&
		cvs -f rm t2 &&
		! cvs -f diff -N -u >"$WORKDIR/cvswork3edit.diff"
	)

cvs add: scheduling file `adir/afile5' for addition
cvs add: use `cvs commit' to add this file permanently
cvs remove: scheduling `t2' for removal
cvs remove: use `cvs commit' to remove this file permanently
ok 5 - edit cvswork3 and save diff

expecting success of 9402.6 'setup v1.2 on b1': 
	git checkout b1 &&
	echo "new v1.2" >t3 &&
	rm t2 &&
	sed -e "s/line3/line3 - more data/" adir/afile >adir/afileNEW &&
	mv -f adir/afileNEW adir/afile &&
	rm adir/a2file &&
	echo "a3file" >>adir/a3file &&
	echo "bfile line 3" >>adir/bdir/bfile &&
	rm adir/bdir/b2file &&
	echo "b3file" >adir/bdir/b3file &&
	mkdir cdir &&
	echo "cdir/cfile" >cdir/cfile &&
	git add -A cdir adir t3 t2 &&
	git commit -q -m "v1.2" &&
	git tag v1.2 &&
	git push --tags gitcvs.git b1:b1

Switched to branch 'b1'
To gitcvs.git
   a445389..5630bb8  b1 -> b1
 * [new tag]         v1.2 -> v1.2
ok 6 - setup v1.2 on b1

expecting success of 9402.7 'cvs -f up (on b1 adir)': 
	( cd cvswork/adir && cvs -f up -d ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1.2 &&
	check_file cvswork adir/a3file v1.2 &&
	check_file cvswork adir/bdir/bfile v1.2 &&
	check_file cvswork adir/bdir/b3file v1.2 &&
	check_end_tree cvswork

ok 7 - cvs -f up (on b1 adir)

expecting success of 9402.8 'cvs up (on b1 /)': 
	( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1.2 &&
	check_file cvswork t3 v1.2 &&
	check_file cvswork adir/afile v1.2 &&
	check_file cvswork adir/a3file v1.2 &&
	check_file cvswork adir/bdir/bfile v1.2 &&
	check_file cvswork adir/bdir/b3file v1.2 &&
	check_file cvswork cdir/cfile v1.2 &&
	check_end_tree cvswork

ok 8 - cvs up (on b1 /)

expecting success of 9402.9 'cvs up (on b1 /) (again; check CVS/Tag files)': 
	( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1.2 &&
	check_file cvswork t3 v1.2 &&
	check_file cvswork adir/afile v1.2 &&
	check_file cvswork adir/a3file v1.2 &&
	check_file cvswork adir/bdir/bfile v1.2 &&
	check_file cvswork adir/bdir/b3file v1.2 &&
	check_file cvswork cdir/cfile v1.2 &&
	check_end_tree cvswork

ok 9 - cvs up (on b1 /) (again; check CVS/Tag files)

expecting success of 9402.10 'cvs up -r v1': 
	( cd cvswork && cvs -f up -r v1 ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 10 - cvs up -r v1

expecting success of 9402.11 'cvs up': 
	( cd cvswork && cvs -f up ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 11 - cvs up

expecting success of 9402.12 'cvs up (again; check CVS/Tag files)': 
	( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 12 - cvs up (again; check CVS/Tag files)

expecting success of 9402.13 'setup simple b2': 
	git branch b2 v1 &&
	git push --tags gitcvs.git b2:b2

To gitcvs.git
 * [new branch]      b2 -> b2
ok 13 - setup simple b2

expecting success of 9402.14 'cvs co b2 [into cvswork2]': 
	cvs -f co -r b2 -d cvswork2 main >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_tree cvswork

ok 14 - cvs co b2 [into cvswork2]

expecting success of 9402.15 'root dir edit [cvswork2]': 
	(
		cd cvswork2 && echo "Line 2" >>textfile.c &&
		! cvs -f diff -u >"$WORKDIR/cvsEdit1.diff" &&
		cvs -f commit -m "edit textfile.c" textfile.c
	) >cvsEdit1.log 2>&1

ok 15 - root dir edit [cvswork2]

expecting success of 9402.16 'root dir rm file [cvswork2]': 
	(
		cd cvswork2 &&
		cvs -f rm -f t2 &&
		cvs -f diff -u >../cvsEdit2-empty.diff &&
		! cvs -f diff -N -u >"$WORKDIR/cvsEdit2-N.diff" &&
		cvs -f commit -m "rm t2"
	) >cvsEdit2.log 2>&1

ok 16 - root dir rm file [cvswork2]

expecting success of 9402.17 'subdir edit/add/rm files [cvswork2]': 
	(
		cd cvswork2 &&
		sed -e "s/line 1/line 1 (v2)/" adir/bdir/bfile >adir/bdir/bfileNEW &&
		mv -f adir/bdir/bfileNEW adir/bdir/bfile &&
		rm adir/bdir/b2file &&
		cd adir &&
		cvs -f rm bdir/b2file &&
		echo "4th file" >bdir/b4file &&
		cvs -f add bdir/b4file &&
		! cvs -f diff -N -u >"$WORKDIR/cvsEdit3.diff" &&
		git fetch gitcvs.git b2:b2 &&
		(
		  cd .. &&
		  ! cvs -f diff -u -N -r v1.2 >"$WORKDIR/cvsEdit3-v1.2.diff" &&
		  ! cvs -f diff -u -N -r v1.2 -r v1 >"$WORKDIR/cvsEdit3-v1.2-v1.diff"
		) &&
		cvs -f commit -m "various add/rm/edit"
	) >cvs.log 2>&1

ok 17 - subdir edit/add/rm files [cvswork2]

expecting success of 9402.18 'validate result of edits [cvswork2]': 
	git fetch gitcvs.git b2:b2 &&
	git tag v2 b2 &&
	git push --tags gitcvs.git b2:b2 &&
	check_start_tree cvswork2 &&
	check_file cvswork2 textfile.c v2 &&
	check_file cvswork2 adir/afile v2 &&
	check_file cvswork2 adir/a2file v2 &&
	check_file cvswork2 adir/bdir/bfile v2 &&
	check_file cvswork2 adir/bdir/b4file v2 &&
	check_end_full_tree cvswork2 v2

From gitcvs
   8bc3df8..2f22978  b2         -> b2
To gitcvs.git
 * [new tag]         v2 -> v2
ok 18 - validate result of edits [cvswork2]

expecting success of 9402.19 'validate basic diffs saved during above cvswork2 edits': 
	test $(grep Index: cvsEdit1.diff | wc -l) = 1 &&
	test_must_be_empty cvsEdit2-empty.diff &&
	test $(grep Index: cvsEdit2-N.diff | wc -l) = 1 &&
	test $(grep Index: cvsEdit3.diff | wc -l) = 3 &&
	rm -rf diffSandbox &&
	git clone -q -n . diffSandbox &&
	(
		cd diffSandbox &&
		git checkout v1 &&
		git apply -p0 --index <"$WORKDIR/cvsEdit1.diff" &&
		git apply -p0 --index <"$WORKDIR/cvsEdit2-N.diff" &&
		git apply -p0 --directory=adir --index <"$WORKDIR/cvsEdit3.diff" &&
		git diff --exit-code v2
	) >"check_diff_apply.out" 2>&1

ok 19 - validate basic diffs saved during above cvswork2 edits

expecting success of 9402.20 'validate v1.2 diff saved during last cvswork2 edit': 
	test $(grep Index: cvsEdit3-v1.2.diff | wc -l) = 9 &&
	check_diff cvsEdit3-v1.2.diff v1.2 v2

ok 20 - validate v1.2 diff saved during last cvswork2 edit

expecting success of 9402.21 'validate v1.2 v1 diff saved during last cvswork2 edit': 
	test $(grep Index: cvsEdit3-v1.2-v1.diff | wc -l) = 9 &&
	check_diff cvsEdit3-v1.2-v1.diff v1.2 v1

ok 21 - validate v1.2 v1 diff saved during last cvswork2 edit

expecting success of 9402.22 'cvs up [cvswork2]': 
	( cd cvswork2 && cvs -f up ) >cvs.log 2>&1 &&
	check_start_tree cvswork2 &&
	check_file cvswork2 textfile.c v2 &&
	check_file cvswork2 adir/afile v2 &&
	check_file cvswork2 adir/a2file v2 &&
	check_file cvswork2 adir/bdir/bfile v2 &&
	check_file cvswork2 adir/bdir/b4file v2 &&
	check_end_full_tree cvswork2 v2

ok 22 - cvs up [cvswork2]

expecting success of 9402.23 'cvs up -r b2 [back to cvswork]': 
	( cd cvswork && cvs -f up -r b2 ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v2 &&
	check_file cvswork adir/afile v2 &&
	check_file cvswork adir/a2file v2 &&
	check_file cvswork adir/bdir/bfile v2 &&
	check_file cvswork adir/bdir/b4file v2 &&
	check_end_full_tree cvswork v2

ok 23 - cvs up -r b2 [back to cvswork]

expecting success of 9402.24 'cvs up -r b1': 
	( cd cvswork && cvs -f up -r b1 ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1.2 &&
	check_file cvswork t3 v1.2 &&
	check_file cvswork adir/afile v1.2 &&
	check_file cvswork adir/a3file v1.2 &&
	check_file cvswork adir/bdir/bfile v1.2 &&
	check_file cvswork adir/bdir/b3file v1.2 &&
	check_file cvswork cdir/cfile v1.2 &&
	check_end_full_tree cvswork v1.2

ok 24 - cvs up -r b1

expecting success of 9402.25 'cvs up -A': 
	( cd cvswork && cvs -f up -A ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_full_tree cvswork v1

ok 25 - cvs up -A

expecting success of 9402.26 'cvs up (check CVS/Tag files)': 
	( cd cvswork && cvs -f up ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_full_tree cvswork v1

ok 26 - cvs up (check CVS/Tag files)

expecting success of 9402.27 'cvs up -r heads/b1': 
	( cd cvswork && cvs -f up -r heads/b1 ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1.2 &&
	check_file cvswork t3 v1.2 &&
	check_file cvswork adir/afile v1.2 &&
	check_file cvswork adir/a3file v1.2 &&
	check_file cvswork adir/bdir/bfile v1.2 &&
	check_file cvswork adir/bdir/b3file v1.2 &&
	check_file cvswork cdir/cfile v1.2 &&
	check_end_full_tree cvswork v1.2

ok 27 - cvs up -r heads/b1

expecting success of 9402.28 'cvs up -r heads_-s-b2 (cvsserver escape mechanism)': 
	( cd cvswork && cvs -f up -r heads_-s-b2 ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v2 &&
	check_file cvswork adir/afile v2 &&
	check_file cvswork adir/a2file v2 &&
	check_file cvswork adir/bdir/bfile v2 &&
	check_file cvswork adir/bdir/b4file v2 &&
	check_end_full_tree cvswork v2

ok 28 - cvs up -r heads_-s-b2 (cvsserver escape mechanism)

expecting success of 9402.29 'cvs up -r $(git rev-parse v1)': 
	test -n "$v1hash" &&
	( cd cvswork && cvs -f up -r "$v1hash" ) >cvs.log 2>&1 &&
	check_start_tree cvswork &&
	check_file cvswork textfile.c v1 &&
	check_file cvswork t2 v1 &&
	check_file cvswork adir/afile v1 &&
	check_file cvswork adir/a2file v1 &&
	check_file cvswork adir/bdir/bfile v1 &&
	check_file cvswork adir/bdir/b2file v1 &&
	check_end_full_tree cvswork v1

ok 29 - cvs up -r $(git rev-parse v1)

expecting success of 9402.30 'cvs diff -r v1 -u': 
	( cd cvswork && cvs -f diff -r v1 -u >../cvsDiff.out 2>../cvs.log ) &&
	test_must_be_empty cvsDiff.out &&
	test_must_be_empty cvs.log

ok 30 - cvs diff -r v1 -u

expecting success of 9402.31 'cvs diff -N -r v2 -u': 
	( cd cvswork && ! cvs -f diff -N -r v2 -u >../cvsDiff.out 2>../cvs.log ) &&
	test_must_be_empty cvs.log &&
	test -s cvsDiff.out &&
	check_diff cvsDiff.out v2 v1 >check_diff.out 2>&1

ok 31 - cvs diff -N -r v2 -u

expecting success of 9402.32 'cvs diff -N -r v2 -r v1.2': 
	( cd cvswork && ! cvs -f diff -N -r v2 -r v1.2 -u >../cvsDiff.out 2>../cvs.log ) &&
	test_must_be_empty cvs.log &&
	test -s cvsDiff.out &&
	check_diff cvsDiff.out v2 v1.2 >check_diff.out 2>&1

ok 32 - cvs diff -N -r v2 -r v1.2

expecting success of 9402.33 'apply early [cvswork3] diff to b3': 
	git clone -q . gitwork3 &&
	(
		cd gitwork3 &&
		git checkout -b b3 v1 &&
		git apply -p0 --index <"$WORKDIR/cvswork3edit.diff" &&
		git commit -m "cvswork3 edits applied"
	) &&
	git fetch gitwork3 b3:b3 &&
	git tag v3 b3

Switched to a new branch 'b3'
[b3 e1226ee] cvswork3 edits applied
 Author: A U Thor <author@example.com>
 3 files changed, 2 insertions(+), 2 deletions(-)
 create mode 100644 adir/afile5
 delete mode 100644 t2
From gitwork3
 * [new branch]      b3         -> b3
ok 33 - apply early [cvswork3] diff to b3

expecting success of 9402.34 'check [cvswork3] diff': 
	( cd cvswork3 && ! cvs -f diff -N -u >"$WORKDIR/cvsDiff.out" 2>../cvs.log ) &&
	test_must_be_empty cvs.log &&
	test -s cvsDiff.out &&
	test $(grep Index: cvsDiff.out | wc -l) = 3 &&
	test_cmp cvsDiff.out cvswork3edit.diff &&
	check_diff cvsDiff.out v1 v3 >check_diff.out 2>&1

ok 34 - check [cvswork3] diff

expecting success of 9402.35 'merge early [cvswork3] b3 with b1': 
	( cd gitwork3 && git merge -m "message" b1 ) &&
	git fetch gitwork3 b3:b3 &&
	git tag v3merged b3 &&
	git push --tags gitcvs.git b3:b3

Auto-merging adir/afile
Merge made by the 'ort' strategy.
 adir/a2file      | 1 -
 adir/a3file      | 1 +
 adir/afile       | 2 +-
 adir/bdir/b2file | 1 -
 adir/bdir/b3file | 1 +
 adir/bdir/bfile  | 1 +
 cdir/cfile       | 1 +
 t3               | 1 +
 8 files changed, 6 insertions(+), 3 deletions(-)
 delete mode 100644 adir/a2file
 create mode 100644 adir/a3file
 delete mode 100644 adir/bdir/b2file
 create mode 100644 adir/bdir/b3file
 create mode 100644 cdir/cfile
 create mode 100644 t3
From gitwork3
   e1226ee..21f047c  b3         -> b3
To gitcvs.git
 * [new branch]      b3 -> b3
 * [new tag]         v3 -> v3
 * [new tag]         v3merged -> v3merged
ok 35 - merge early [cvswork3] b3 with b1

expecting success of 9402.36 'cvs up dirty [cvswork3]': 
	(
		cd cvswork3 &&
		cvs -f up &&
		! cvs -f diff -N -u >"$WORKDIR/cvsDiff.out"
	) >cvs.log 2>&1 &&
	test -s cvsDiff.out &&
	test $(grep Index: cvsDiff.out | wc -l) = 2 &&
	check_start_tree cvswork3 &&
	check_file cvswork3 textfile.c v3merged &&
	check_file cvswork3 t3 v3merged &&
	check_file cvswork3 adir/afile v3merged &&
	check_file cvswork3 adir/a3file v3merged &&
	check_file cvswork3 adir/afile5 v3merged &&
	check_file cvswork3 adir/bdir/bfile v3merged &&
	check_file cvswork3 adir/bdir/b3file v3merged &&
	check_file cvswork3 cdir/cfile v3merged &&
	check_end_full_tree cvswork3 v3merged

ok 36 - cvs up dirty [cvswork3]

expecting success of 9402.37 'cvs commit [cvswork3]': 
	(
		cd cvswork3 &&
		cvs -f commit -m "dirty sandbox after auto-merge"
	) >cvs.log 2>&1 &&
	check_start_tree cvswork3 &&
	check_file cvswork3 textfile.c v3merged &&
	check_file cvswork3 t3 v3merged &&
	check_file cvswork3 adir/afile v3merged &&
	check_file cvswork3 adir/a3file v3merged &&
	check_file cvswork3 adir/afile5 v3merged &&
	check_file cvswork3 adir/bdir/bfile v3merged &&
	check_file cvswork3 adir/bdir/b3file v3merged &&
	check_file cvswork3 cdir/cfile v3merged &&
	check_end_full_tree cvswork3 v3merged &&
	git fetch gitcvs.git b3:b4 &&
	git tag v4.1 b4 &&
	git diff --exit-code v4.1 v3merged >check_diff_apply.out 2>&1

From gitcvs
 * [new branch]      b3         -> b4
ok 37 - cvs commit [cvswork3]

# passed all 37 test(s)
1..37
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9601-cvsimport-vendor-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9601-cvsimport-vendor-branch/.git/
expecting success of 9601.1 'import a module with a vendor branch': 

	git cvsimport -C module-git module


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9601-cvsimport-vendor-branch/module-git/.git/
Skipping #CVSPS_NO_BRANCH
ok 1 - import a module with a vendor branch

expecting success of 9601.2 'check HEAD out of cvs repository': test_cvs_co main
cvs checkout: Updating module-cvs-main
U module-cvs-main/added-imported.txt
U module-cvs-main/imported-anonymously.txt
U module-cvs-main/imported-modified-imported.txt
U module-cvs-main/imported-modified.txt
U module-cvs-main/imported-once.txt
U module-cvs-main/imported-twice.txt
ok 2 - check HEAD out of cvs repository

expecting success of 9601.3 'check main out of git repository': test_git_co main
Already on 'main'
ok 3 - check main out of git repository

expecting success of 9601.4 'check a file that was imported once': 

	test_cmp_branch_file main imported-once.txt


ok 4 - check a file that was imported once

checking known breakage of 9601.5 'check a file that was imported twice': 

	test_cmp_branch_file main imported-twice.txt


--- module-cvs-main/imported-twice.txt	2004-02-09 15:43:13.000000000 +0000
+++ module-git/imported-twice.txt	2022-12-28 08:25:10.481498387 +0000
@@ -1 +1 @@
-This is vtag-2 (on vbranchA) of imported-twice.txt.
+This is vtag-1 (on vbranchA) of imported-twice.txt.
not ok 5 - check a file that was imported twice # TODO known breakage

expecting success of 9601.6 'check a file that was imported then modified on HEAD': 

	test_cmp_branch_file main imported-modified.txt


ok 6 - check a file that was imported then modified on HEAD

expecting success of 9601.7 'check a file that was imported, modified, then imported again': 

	test_cmp_branch_file main imported-modified-imported.txt


ok 7 - check a file that was imported, modified, then imported again

expecting success of 9601.8 'check a file that was added to HEAD then imported': 

	test_cmp_branch_file main added-imported.txt


ok 8 - check a file that was added to HEAD then imported

expecting success of 9601.9 'a vendor branch whose tag has been removed': 

	test_cmp_branch_file main imported-anonymously.txt


ok 9 - a vendor branch whose tag has been removed

# still have 1 known breakage(s)
# passed all remaining 8 test(s)
1..9
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9502-gitweb-standalone-parse-output.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9502-gitweb-standalone-parse-output/.git/
expecting success of 9502.1 'setup': 
	test_commit first foo &&
	git branch xx/test &&
	FULL_ID=$(git rev-parse --verify HEAD) &&
	SHORT_ID=$(git rev-parse --verify --short=7 HEAD)

[main (root-commit) 1005c80] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 foo
ok 1 - setup

expecting success of 9502.2 'snapshot: full sha1': 
	gitweb_run "p=.git;a=snapshot;h=$FULL_ID;sf=tar" &&
	check_snapshot ".git-$SHORT_ID"

basename=.git-1005c80
ok 2 - snapshot: full sha1

expecting success of 9502.3 'snapshot: shortened sha1': 
	gitweb_run "p=.git;a=snapshot;h=$SHORT_ID;sf=tar" &&
	check_snapshot ".git-$SHORT_ID"

basename=.git-1005c80
ok 3 - snapshot: shortened sha1

expecting success of 9502.4 'snapshot: almost full sha1': 
	ID=$(git rev-parse --short=30 HEAD) &&
	gitweb_run "p=.git;a=snapshot;h=$ID;sf=tar" &&
	check_snapshot ".git-$SHORT_ID"

basename=.git-1005c80
ok 4 - snapshot: almost full sha1

expecting success of 9502.5 'snapshot: HEAD': 
	gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tar" &&
	check_snapshot ".git-HEAD-$SHORT_ID"

basename=.git-HEAD-1005c80
ok 5 - snapshot: HEAD

expecting success of 9502.6 'snapshot: short branch name (main)': 
	gitweb_run "p=.git;a=snapshot;h=main;sf=tar" &&
	ID=$(git rev-parse --verify --short=7 main) &&
	check_snapshot ".git-main-$ID"

basename=.git-main-1005c80
ok 6 - snapshot: short branch name (main)

expecting success of 9502.7 'snapshot: short tag name (first)': 
	gitweb_run "p=.git;a=snapshot;h=first;sf=tar" &&
	ID=$(git rev-parse --verify --short=7 first) &&
	check_snapshot ".git-first-$ID"

basename=.git-first-1005c80
ok 7 - snapshot: short tag name (first)

expecting success of 9502.8 'snapshot: full branch name (refs/heads/main)': 
	gitweb_run "p=.git;a=snapshot;h=refs/heads/main;sf=tar" &&
	ID=$(git rev-parse --verify --short=7 main) &&
	check_snapshot ".git-main-$ID"

basename=.git-main-1005c80
ok 8 - snapshot: full branch name (refs/heads/main)

expecting success of 9502.9 'snapshot: full tag name (refs/tags/first)': 
	gitweb_run "p=.git;a=snapshot;h=refs/tags/first;sf=tar" &&
	check_snapshot ".git-first"

basename=.git-first
ok 9 - snapshot: full tag name (refs/tags/first)

expecting success of 9502.10 'snapshot: hierarchical branch name (xx/test)': 
	gitweb_run "p=.git;a=snapshot;h=xx/test;sf=tar" &&
	! grep "filename=.*/" gitweb.headers

ok 10 - snapshot: hierarchical branch name (xx/test)

expecting success of 9502.11 'forks: setup': 
	git init --bare foo.git &&
	echo file > file &&
	git --git-dir=foo.git --work-tree=. add file &&
	git --git-dir=foo.git --work-tree=. commit -m "Initial commit" &&
	echo "foo" > foo.git/description &&
	git clone --bare foo.git foo.bar.git &&
	echo "foo.bar" > foo.bar.git/description &&
	git clone --bare foo.git foo_baz.git &&
	echo "foo_baz" > foo_baz.git/description &&
	rm -fr   foo &&
	mkdir -p foo &&
	(
		cd foo &&
		git clone --shared --bare ../foo.git foo-forked.git &&
		echo "fork of foo" > foo-forked.git/description
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9502-gitweb-standalone-parse-output/foo.git/
[main (root-commit) d29c088] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Cloning into bare repository 'foo.bar.git'...
done.
Cloning into bare repository 'foo_baz.git'...
done.
Cloning into bare repository 'foo-forked.git'...
done.
ok 11 - forks: setup

expecting success of 9502.12 'forks: not skipped unless "forks" feature enabled': 
	gitweb_run "a=project_list" &&
	grep -q ">\\.git<"               gitweb.body &&
	grep -q ">foo\\.git<"            gitweb.body &&
	grep -q ">foo_baz\\.git<"        gitweb.body &&
	grep -q ">foo\\.bar\\.git<"      gitweb.body &&
	grep -q ">foo_baz\\.git<"        gitweb.body &&
	grep -q ">foo/foo-forked\\.git<" gitweb.body &&
	grep -q ">fork of .*<"           gitweb.body

ok 12 - forks: not skipped unless "forks" feature enabled

expecting success of 9502.13 'enable forks feature': 
	cat >>gitweb_config.perl <<-\EOF
	$feature{"forks"}{"default"} = [1];
	EOF

ok 13 - enable forks feature

expecting success of 9502.14 'forks: forks skipped if "forks" feature enabled': 
	gitweb_run "a=project_list" &&
	grep -q ">\\.git<"               gitweb.body &&
	grep -q ">foo\\.git<"            gitweb.body &&
	grep -q ">foo_baz\\.git<"        gitweb.body &&
	grep -q ">foo\\.bar\\.git<"      gitweb.body &&
	grep -q ">foo_baz\\.git<"        gitweb.body &&
	grep -v ">foo/foo-forked\\.git<" gitweb.body &&
	grep -v ">fork of .*<"           gitweb.body

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
]>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<!-- git web interface version current, (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>, Christian Gierke -->
<!-- git core binaries version 2.39.0 -->
<head>
<meta name="generator" content="gitweb/current git/2.39.0"/>
<meta name="robots" content="index, nofollow"/>
<title>[localhost]</title>
<link rel="stylesheet" type="text/css" href="file:////<<PKGBUILDDIR>>/gitweb/static/gitweb.css"/>
<link rel="alternate" title="[localhost] projects list" href="/gitweb.cgi?a=project_index" type="text/plain; charset=utf-8" />
<link rel="alternate" title="[localhost] projects feeds" href="/gitweb.cgi?a=opml" type="text/x-opml" />
<link rel="shortcut icon" href="file:////<<PKGBUILDDIR>>/gitweb/static/git-favicon.png" type="image/png" />
</head>
<body>
<div class="page_header">
<a href="http://git-scm.com/" title="git homepage"><img alt="git" class="logo" height="27" src="file:////<<PKGBUILDDIR>>/gitweb/static/git-logo.png" width="72" /></a><a href="/gitweb.cgi">projects</a> / </div>
<div class="projsearch">
<form method="get" action="/gitweb.cgi" enctype="multipart/form-data"><input type="hidden" name="a" value="project_list"  />
<input type="text" name="s"  size="60" title="Search project by name and description" />
<span title="Extended regular expression"><label><input type="checkbox" name="sr" value="1" />re</label></span>
<input type="submit" name="btnS" value="Search" />
</form>
<a href="/gitweb.cgi">List all projects</a><br />
</div>
<table class="project_list">
<tr>
<th></th>
<th>Project</th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=descr">Description</a></th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=owner">Owner</a></th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=age">Last Change</a></th>
<th></th>
</tr>
<tr class="dark">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=.git;a=summary">.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=.git;a=summary" title="t9502-gitweb-standalone-parse-output.sh test repository">t9502-gitweb-standalone-parse... </a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=.git;a=log">log</a> | <a href="/gitweb.cgi?p=.git;a=tree">tree</a></td>
</tr>
<tr class="light">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=foo.bar.git;a=summary">foo.bar.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.bar.git;a=summary" title="foo.bar">foo.bar</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo.bar.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=tree">tree</a></td>
</tr>
<tr class="dark">
<td><a href="/gitweb.cgi?p=foo.git;a=forks" title="1 forks">+</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.git;a=summary">foo.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.git;a=summary" title="foo">foo</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo.git;a=tree">tree</a> | <a href="/gitweb.cgi?p=foo.git;a=forks">forks</a></td>
</tr>
<tr class="light">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=foo_baz.git;a=summary">foo_baz.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo_baz.git;a=summary" title="foo_baz">foo_baz</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo_baz.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=tree">tree</a></td>
</tr>
</table>
<div class="page_footer">
<a class="rss_logo" href="/gitweb.cgi?a=opml">OPML</a> <a class="rss_logo" href="/gitweb.cgi?a=project_index">TXT</a>
</div>
<script type="text/javascript" src="%2B%2BGITWEB_JS%2B%2B"></script>
<script type="text/javascript">
window.onload = function () {
	var tz_cookie = { name: 'gitweb_tz', expires: 14, path: '/' };
	onloadTZSetup('local', tz_cookie, 'datetime');
};
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
]>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<!-- git web interface version current, (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>, Christian Gierke -->
<!-- git core binaries version 2.39.0 -->
<head>
<meta name="generator" content="gitweb/current git/2.39.0"/>
<meta name="robots" content="index, nofollow"/>
<title>[localhost]</title>
<link rel="stylesheet" type="text/css" href="file:////<<PKGBUILDDIR>>/gitweb/static/gitweb.css"/>
<link rel="alternate" title="[localhost] projects list" href="/gitweb.cgi?a=project_index" type="text/plain; charset=utf-8" />
<link rel="alternate" title="[localhost] projects feeds" href="/gitweb.cgi?a=opml" type="text/x-opml" />
<link rel="shortcut icon" href="file:////<<PKGBUILDDIR>>/gitweb/static/git-favicon.png" type="image/png" />
</head>
<body>
<div class="page_header">
<a href="http://git-scm.com/" title="git homepage"><img alt="git" class="logo" height="27" src="file:////<<PKGBUILDDIR>>/gitweb/static/git-logo.png" width="72" /></a><a href="/gitweb.cgi">projects</a> / </div>
<div class="projsearch">
<form method="get" action="/gitweb.cgi" enctype="multipart/form-data"><input type="hidden" name="a" value="project_list"  />
<input type="text" name="s"  size="60" title="Search project by name and description" />
<span title="Extended regular expression"><label><input type="checkbox" name="sr" value="1" />re</label></span>
<input type="submit" name="btnS" value="Search" />
</form>
<a href="/gitweb.cgi">List all projects</a><br />
</div>
<table class="project_list">
<tr>
<th></th>
<th>Project</th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=descr">Description</a></th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=owner">Owner</a></th>
<th><a class="header" href="/gitweb.cgi?a=project_list;o=age">Last Change</a></th>
<th></th>
</tr>
<tr class="dark">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=.git;a=summary">.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=.git;a=summary" title="t9502-gitweb-standalone-parse-output.sh test repository">t9502-gitweb-standalone-parse... </a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=.git;a=log">log</a> | <a href="/gitweb.cgi?p=.git;a=tree">tree</a></td>
</tr>
<tr class="light">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=foo.bar.git;a=summary">foo.bar.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.bar.git;a=summary" title="foo.bar">foo.bar</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo.bar.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo.bar.git;a=tree">tree</a></td>
</tr>
<tr class="dark">
<td><a href="/gitweb.cgi?p=foo.git;a=forks" title="1 forks">+</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.git;a=summary">foo.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo.git;a=summary" title="foo">foo</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo.git;a=tree">tree</a> | <a href="/gitweb.cgi?p=foo.git;a=forks">forks</a></td>
</tr>
<tr class="light">
<td></td>
<td><a class="list" href="/gitweb.cgi?p=foo_baz.git;a=summary">foo_baz.git</a></td>
<td><a class="list" href="/gitweb.cgi?p=foo_baz.git;a=summary" title="foo_baz">foo_baz</a></td>
<td><i>Debian build daemon</i></td>
<td class="age2">17 years ago</td>
<td class="link"><a href="/gitweb.cgi?p=foo_baz.git;a=summary">summary</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=shortlog">shortlog</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=log">log</a> | <a href="/gitweb.cgi?p=foo_baz.git;a=tree">tree</a></td>
</tr>
</table>
<div class="page_footer">
<a class="rss_logo" href="/gitweb.cgi?a=opml">OPML</a> <a class="rss_logo" href="/gitweb.cgi?a=project_index">TXT</a>
</div>
<script type="text/javascript" src="%2B%2BGITWEB_JS%2B%2B"></script>
<script type="text/javascript">
window.onload = function () {
	var tz_cookie = { name: 'gitweb_tz', expires: 14, path: '/' };
	onloadTZSetup('local', tz_cookie, 'datetime');
};
</script>
</body>
</html>
ok 14 - forks: forks skipped if "forks" feature enabled

expecting success of 9502.15 'forks: "forks" action for forked repository': 
	gitweb_run "p=foo.git;a=forks" &&
	grep -q ">foo/foo-forked\\.git<" gitweb.body &&
	grep -q ">fork of foo<"          gitweb.body

ok 15 - forks: "forks" action for forked repository

expecting success of 9502.16 'forks: can access forked repository': 
	gitweb_run "p=foo/foo-forked.git;a=summary" &&
	grep -q "200 OK"        gitweb.headers &&
	grep -q ">fork of foo<" gitweb.body

ok 16 - forks: can access forked repository

expecting success of 9502.17 'forks: project_index lists all projects (incl. forks)': 
	cat >expected <<-\EOF &&
	.git
	foo.bar.git
	foo.git
	foo/foo-forked.git
	foo_baz.git
	EOF
	gitweb_run "a=project_index" &&
	sed -e "s/ .*//" <gitweb.body | sort >actual &&
	test_cmp expected actual

ok 17 - forks: project_index lists all projects (incl. forks)

expecting success of 9502.18 'xss checks': 
	TAG="<magic-xss-tag>" &&
	xss "a=rss&p=$TAG" &&
	xss "a=rss&p=foo.git&f=$TAG" &&
	xss "" "$TAG+"

Checking a=rss&p=<magic-xss-tag>...
Checking a=rss&p=foo.git&f=<magic-xss-tag>...
Checking  <magic-xss-tag>+...
ok 18 - xss checks

expecting success of 9502.19 'no http-equiv="content-type" in XHTML': 
	no_http_equiv_content_type &&
	no_http_equiv_content_type "p=.git" &&
	no_http_equiv_content_type "p=.git;a=log" &&
	no_http_equiv_content_type "p=.git;a=tree"

ok 19 - no http-equiv="content-type" in XHTML

expecting success of 9502.20 'Proper DOCTYPE with entity declarations': 
	proper_doctype &&
	proper_doctype "p=.git" &&
	proper_doctype "p=.git;a=log" &&
	proper_doctype "p=.git;a=tree"

<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
<!DOCTYPE html [
	<!ENTITY nbsp "&#xA0;">
	<!ENTITY sdot "&#x22C5;">
ok 20 - Proper DOCTYPE with entity declarations

# passed all 20 test(s)
1..20
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9600-cvsimport.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/.git/
checking prerequisite: NOT_ROOT

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-NOT_ROOT" &&
	uid=$(id -u) &&
	test "$uid" != 0

)
prerequisite NOT_ROOT ok
expecting success of 9600.1 'setup cvsroot environment': 
	CVSROOT=$(pwd)/cvsroot &&
	export CVSROOT

ok 1 - setup cvsroot environment

expecting success of 9600.2 'setup cvsroot': $CVS init
ok 2 - setup cvsroot

expecting success of 9600.3 'setup a cvs module': 

	mkdir "$CVSROOT/module" &&
	$CVS co -d module-cvs module &&
	(cd module-cvs &&
	cat <<EOF >o_fortuna &&
O Fortuna
velut luna
statu variabilis,

semper crescis
aut decrescis;
vita detestabilis

nunc obdurat
et tunc curat
ludo mentis aciem,

egestatem,
potestatem
dissolvit ut glaciem.
EOF
	$CVS add o_fortuna &&
	cat <<EOF >message &&
add "O Fortuna" lyrics

These public domain lyrics make an excellent sample text.
EOF
	$CVS commit -F message
	)

cvs checkout: Updating module-cvs
cvs add: scheduling file `o_fortuna' for addition
cvs add: use `cvs commit' to add this file permanently
cvs commit: Examining .
/<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/cvsroot/module/o_fortuna,v  <--  o_fortuna
initial revision: 1.1
ok 3 - setup a cvs module

expecting success of 9600.4 'import a trivial module': 

	git cvsimport -a -R -z 0 -C module-git module &&
	test_cmp module-cvs/o_fortuna module-git/o_fortuna


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/module-git/.git/
ok 4 - import a trivial module

expecting success of 9600.5 'pack refs': (cd module-git && git gc)
ok 5 - pack refs

expecting success of 9600.6 'initial import has correct .git/cvs-revisions': 

	(cd module-git &&
	 git log --format="o_fortuna 1.1 %H" -1) > expected &&
	test_cmp expected module-git/.git/cvs-revisions

ok 6 - initial import has correct .git/cvs-revisions

expecting success of 9600.7 'update cvs module': 
	(cd module-cvs &&
	cat <<EOF >o_fortuna &&
O Fortune,
like the moon
you are changeable,

ever waxing
and waning;
hateful life

first oppresses
and then soothes
as fancy takes it;

poverty
and power
it melts them like ice.
EOF
	cat <<EOF >message &&
translate to English

My Latin is terrible.
EOF
	$CVS commit -F message
	)

cvs commit: Examining .
/<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/cvsroot/module/o_fortuna,v  <--  o_fortuna
new revision: 1.2; previous revision: 1.1
ok 7 - update cvs module

expecting success of 9600.8 'update git module': 

	(cd module-git &&
	git config cvsimport.trackRevisions true &&
	git cvsimport -a -z 0 module &&
	git merge origin
	) &&
	test_cmp module-cvs/o_fortuna module-git/o_fortuna


Updating 9f29cd0..9654b01
Fast-forward (no commit created; -m option ignored)
 o_fortuna | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)
Already up to date.
ok 8 - update git module

expecting success of 9600.9 'update has correct .git/cvs-revisions': 

	(cd module-git &&
	 git log --format="o_fortuna 1.1 %H" -1 HEAD^ &&
	 git log --format="o_fortuna 1.2 %H" -1 HEAD) > expected &&
	test_cmp expected module-git/.git/cvs-revisions

ok 9 - update has correct .git/cvs-revisions

expecting success of 9600.10 'update cvs module': 

	(cd module-cvs &&
		echo 1 >tick &&
		$CVS add tick &&
		$CVS commit -m 1
	)

cvs add: scheduling file `tick' for addition
cvs add: use `cvs commit' to add this file permanently
cvs commit: Examining .
/<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/cvsroot/module/tick,v  <--  tick
initial revision: 1.1
ok 10 - update cvs module

expecting success of 9600.11 'cvsimport.module config works': 

	(cd module-git &&
		git config cvsimport.module module &&
		git config cvsimport.trackRevisions true &&
		git cvsimport -a -z0 &&
		git merge origin
	) &&
	test_cmp module-cvs/tick module-git/tick


Updating 9654b01..6126914
Fast-forward (no commit created; -m option ignored)
 tick | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 tick
Already up to date.
ok 11 - cvsimport.module config works

expecting success of 9600.12 'second update has correct .git/cvs-revisions': 

	(cd module-git &&
	 git log --format="o_fortuna 1.1 %H" -1 HEAD^^ &&
	 git log --format="o_fortuna 1.2 %H" -1 HEAD^ &&
	 git log --format="tick 1.1 %H" -1 HEAD) > expected &&
	test_cmp expected module-git/.git/cvs-revisions

ok 12 - second update has correct .git/cvs-revisions

expecting success of 9600.13 'import from a CVS working tree': 

	$CVS co -d import-from-wt module &&
	(cd import-from-wt &&
		git config cvsimport.trackRevisions false &&
		git cvsimport -a -z0 &&
		echo 1 >expect &&
		git log -1 --pretty=format:%s%n >actual &&
		test_cmp expect actual
	)


cvs checkout: Updating import-from-wt
U import-from-wt/o_fortuna
U import-from-wt/tick
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9600-cvsimport/import-from-wt/.git/
ok 13 - import from a CVS working tree

expecting success of 9600.14 'no .git/cvs-revisions created by default': 

	! test -e import-from-wt/.git/cvs-revisions


ok 14 - no .git/cvs-revisions created by default

expecting success of 9600.15 'test entire HEAD': test_cmp_branch_tree main
cvs checkout: Updating module-cvs-main
U module-cvs-main/o_fortuna
U module-cvs-main/tick
Already on 'main'
ok 15 - test entire HEAD

# passed all 15 test(s)
1..15
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9603-cvsimport-patchsets.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9603-cvsimport-patchsets/.git/
checking known breakage of 9603.1 'import with criss cross times on revisions': 
	git cvsimport -p"-x" -C module-git module &&
	(
		cd module-git &&
		git log --pretty=format:%s > ../actual-main &&
		git log A~2..A --pretty="format:%s %ad" -- > ../actual-A &&
		echo "" >> ../actual-main &&
		echo "" >> ../actual-A
	) &&
	echo "Rev 4
Rev 3
Rev 2
Rev 1" > expect-main &&
	test_cmp expect-main actual-main &&

	echo "Rev 5 Branch A Wed Mar 11 19:09:10 2009 +0000
Rev 4 Branch A Wed Mar 11 19:03:52 2009 +0000" > expect-A &&
	test_cmp expect-A actual-A

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9603-cvsimport-patchsets/module-git/.git/
--- expect-main	2022-12-28 08:25:16.636721842 +0000
+++ actual-main	2022-12-28 08:25:16.631721660 +0000
@@ -1,4 +1,4 @@
 Rev 4
 Rev 3
-Rev 2
 Rev 1
+Rev 2
not ok 1 - import with criss cross times on revisions # TODO known breakage

# still have 1 known breakage(s)
1..1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9700-perl-git.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9700-perl-git/.git/
checking prerequisite: PERL_TEST_MORE

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-PERL_TEST_MORE" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-PERL_TEST_MORE" &&
	perl -MTest::More -e 0

)
prerequisite PERL_TEST_MORE ok
expecting success of 9700.1 'set up test repository': echo "test file 1" > file1 &&
     echo "test file 2" > file2 &&
     mkdir directory1 &&
     echo "in directory1" >> directory1/file &&
     mkdir directory2 &&
     echo "in directory2" >> directory2/file &&
     git add . &&
     git commit -m "first commit" &&

     echo "new file in subdir 2" > directory2/file2 &&
     git add . &&
     git commit -m "commit in directory2" &&

     echo "changed file 1" > file1 &&
     git commit -a -m "second commit" &&

     git config --add color.test.slot1 green &&
     git config --add test.string value &&
     git config --add test.dupstring value1 &&
     git config --add test.dupstring value2 &&
     git config --add test.booltrue true &&
     git config --add test.boolfalse no &&
     git config --add test.boolother other &&
     git config --add test.int 2k &&
     git config --add test.path "~/foo" &&
     git config --add test.pathexpanded "$HOME/foo" &&
     git config --add test.pathmulti foo &&
     git config --add test.pathmulti bar
     
[master (root-commit) 0e23d58] first commit
 Author: A U Thor <author@example.com>
 4 files changed, 4 insertions(+)
 create mode 100644 directory1/file
 create mode 100644 directory2/file
 create mode 100644 file1
 create mode 100644 file2
[master ffba337] commit in directory2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 directory2/file2
[master 5d924b7] second commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 1 - set up test repository

expecting success of 9700.2 'set up bare repository': 
	git init --bare bare.git

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9700-perl-git/bare.git/
ok 2 - set up bare repository

expecting success of 9700.3 'use t9700/test.pl to test Git.pm': 
	"$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl 2>stderr &&
	test_must_be_empty stderr

ok 2 - use Git;
ok 3 - open repository
ok 4 - reject unsafe non-bare repository
ok 5 - unsafe error message
ok 6 - reject unsafe bare repository
ok 7 - unsafe error message
ok 8 - config scalar: string
ok 9 - config array: string
ok 10 - config scalar: nonexistent
ok 11 - config array: nonexistent
ok 12 - config_int: integer
ok 13 - config_int: nonexistent
ok 14 - config_bool: true
ok 15 - config_bool: false
ok 16 - config_path: ~/foo expansion
ok 17 - config_path: multiple values
ok 18 - get_color
ok 19 - config: multivar
ok 20 - config_bool: non-boolean values fail
ok 21 - ident scalar: author (type)
ok 22 - ident scalar: committer (type)
ok 23 - ident scalar: invalid ident string (no parsing)
ok 24 - ident array: author
ok 25 - ident array: author
ok 26 - ident array: ident string
ok 27 - ident array: invalid ident string
ok 28 - ident_person: author (type)
ok 29 - ident_person: ident string
ok 30 - ident_person: array
ok 31 - (get file hash)
ok 32 - cat_blob: size
ok 33 - cat_blob: data
ok 34 - hash_object: roundtrip
ok 35 - hash_and_insert_object: returns hash
ok 36 - cat_blob: roundtrip size
ok 37 - cat_blob: roundtrip data
ok 38 - repo_path
ok 39 - wc_path
ok 40 - wc_subdir initial
ok 41 - wc_subdir after wc_chdir
ok 42 - config after wc_chdir
ok 43 - repo_path (2)
ok 44 - wc_path (2)
ok 45 - wc_subdir initial (2)
ok 46 - rev-parse returned hash
ok 47 - log . does not show last commit
ok 48 - cat_blob(outside): size
ok 49 - unquote unquoted path
ok 50 - unquote simple quoted path
ok 51 - unquote escape sequences
1..51
ok 3 - use t9700/test.pl to test Git.pm

# passed all 3 test(s)
1..3
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9800-git-p4-basic.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9801-git-p4-branch.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9802-git-p4-filetype.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9803-git-p4-shell-metachars.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9804-git-p4-label.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9805-git-p4-skip-submit-edit.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9806-git-p4-options.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9807-git-p4-submit.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9808-git-p4-chdir.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9809-git-p4-client-view.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9810-git-p4-rcs.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9604-cvsimport-timestamps.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9604-cvsimport-timestamps/.git/
expecting success of 9604.1 'check timestamps are UTC (TZ=CST6CDT)': 

	TZ=CST6CDT git cvsimport -p"-x" -C module-1 module &&
	git cvsimport -p"-x" -C module-1 module &&
	(
		cd module-1 &&
		git log --format="%s %ai"
	) >actual-1 &&
	cat >expect-1 <<-EOF &&
	Rev 16 2006-10-29 07:00:01 +0000
	Rev 15 2006-10-29 06:59:59 +0000
	Rev 14 2006-04-02 08:00:01 +0000
	Rev 13 2006-04-02 07:59:59 +0000
	Rev 12 2005-12-01 00:00:00 +0000
	Rev 11 2005-11-01 00:00:00 +0000
	Rev 10 2005-10-01 00:00:00 +0000
	Rev  9 2005-09-01 00:00:00 +0000
	Rev  8 2005-08-01 00:00:00 +0000
	Rev  7 2005-07-01 00:00:00 +0000
	Rev  6 2005-06-01 00:00:00 +0000
	Rev  5 2005-05-01 00:00:00 +0000
	Rev  4 2005-04-01 00:00:00 +0000
	Rev  3 2005-03-01 00:00:00 +0000
	Rev  2 2005-02-01 00:00:00 +0000
	Rev  1 2005-01-01 00:00:00 +0000
	EOF
	test_cmp expect-1 actual-1

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9604-cvsimport-timestamps/module-1/.git/
Already up to date.
ok 1 - check timestamps are UTC (TZ=CST6CDT)

expecting success of 9604.2 'check timestamps with author-specific timezones': 

	cat >cvs-authors <<-EOF &&
	user1=User One <user1@domain.org>
	user2=User Two <user2@domain.org> CST6CDT
	user3=User Three <user3@domain.org> EST5EDT
	user4=User Four <user4@domain.org> MST7MDT
	EOF
	git cvsimport -p"-x" -A cvs-authors -C module-2 module &&
	(
		cd module-2 &&
		git log --format="%s %ai %an"
	) >actual-2 &&
	cat >expect-2 <<-EOF &&
	Rev 16 2006-10-29 01:00:01 -0600 User Two
	Rev 15 2006-10-29 01:59:59 -0500 User Two
	Rev 14 2006-04-02 03:00:01 -0500 User Two
	Rev 13 2006-04-02 01:59:59 -0600 User Two
	Rev 12 2005-11-30 17:00:00 -0700 User Four
	Rev 11 2005-10-31 19:00:00 -0500 User Three
	Rev 10 2005-09-30 19:00:00 -0500 User Two
	Rev  9 2005-09-01 00:00:00 +0000 User One
	Rev  8 2005-07-31 18:00:00 -0600 User Four
	Rev  7 2005-06-30 20:00:00 -0400 User Three
	Rev  6 2005-05-31 19:00:00 -0500 User Two
	Rev  5 2005-05-01 00:00:00 +0000 User One
	Rev  4 2005-03-31 17:00:00 -0700 User Four
	Rev  3 2005-02-28 19:00:00 -0500 User Three
	Rev  2 2005-01-31 18:00:00 -0600 User Two
	Rev  1 2005-01-01 00:00:00 +0000 User One
	EOF
	test_cmp expect-2 actual-2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9604-cvsimport-timestamps/module-2/.git/
ok 2 - check timestamps with author-specific timezones

# passed all 2 test(s)
1..2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9811-git-p4-label-import.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9602-cvsimport-branches-tags.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9602-cvsimport-branches-tags/.git/
expecting success of 9602.1 'import module': 

	git cvsimport -C module-git module


Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9602-cvsimport-branches-tags/module-git/.git/
ok 1 - import module

expecting success of 9602.2 'test branch main': 

	test_cmp_branch_tree main


cvs checkout: Updating module-cvs-main
U module-cvs-main/default
cvs checkout: Updating module-cvs-main/sub1
U module-cvs-main/sub1/default
cvs checkout: Updating module-cvs-main/sub1/subsubA
U module-cvs-main/sub1/subsubA/default
cvs checkout: Updating module-cvs-main/sub1/subsubB
U module-cvs-main/sub1/subsubB/default
cvs checkout: Updating module-cvs-main/sub2
U module-cvs-main/sub2/default
cvs checkout: Updating module-cvs-main/sub2/subsubA
U module-cvs-main/sub2/subsubA/default
cvs checkout: Updating module-cvs-main/sub3
U module-cvs-main/sub3/default
Already on 'main'
ok 2 - test branch main

expecting success of 9602.3 'test branch vendorbranch': 

	test_cmp_branch_tree vendorbranch


cvs checkout: Updating module-cvs-vendorbranch
U module-cvs-vendorbranch/default
cvs checkout: Updating module-cvs-vendorbranch/sub1
U module-cvs-vendorbranch/sub1/default
cvs checkout: Updating module-cvs-vendorbranch/sub1/subsubA
U module-cvs-vendorbranch/sub1/subsubA/default
cvs checkout: Updating module-cvs-vendorbranch/sub1/subsubB
U module-cvs-vendorbranch/sub1/subsubB/default
cvs checkout: Updating module-cvs-vendorbranch/sub2
U module-cvs-vendorbranch/sub2/default
cvs checkout: Updating module-cvs-vendorbranch/sub2/subsubA
U module-cvs-vendorbranch/sub2/subsubA/default
cvs checkout: Updating module-cvs-vendorbranch/sub3
U module-cvs-vendorbranch/sub3/default
Switched to branch 'vendorbranch'
ok 3 - test branch vendorbranch

checking known breakage of 9602.4 'test branch B_FROM_INITIALS': 

	test_cmp_branch_tree B_FROM_INITIALS


cvs checkout: Updating module-cvs-B_FROM_INITIALS
U module-cvs-B_FROM_INITIALS/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub1
U module-cvs-B_FROM_INITIALS/sub1/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub1/subsubA
U module-cvs-B_FROM_INITIALS/sub1/subsubA/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub1/subsubB
U module-cvs-B_FROM_INITIALS/sub1/subsubB/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub2
U module-cvs-B_FROM_INITIALS/sub2/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub2/subsubA
U module-cvs-B_FROM_INITIALS/sub2/subsubA/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS/sub3
U module-cvs-B_FROM_INITIALS/sub3/default
error: pathspec 'B_FROM_INITIALS' did not match any file(s) known to git
not ok 4 - test branch B_FROM_INITIALS # TODO known breakage

checking known breakage of 9602.5 'test branch B_FROM_INITIALS_BUT_ONE': 

	test_cmp_branch_tree B_FROM_INITIALS_BUT_ONE


cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE
U module-cvs-B_FROM_INITIALS_BUT_ONE/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub1
U module-cvs-B_FROM_INITIALS_BUT_ONE/sub1/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub1/subsubA
U module-cvs-B_FROM_INITIALS_BUT_ONE/sub1/subsubA/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub1/subsubB
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub2
U module-cvs-B_FROM_INITIALS_BUT_ONE/sub2/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub2/subsubA
U module-cvs-B_FROM_INITIALS_BUT_ONE/sub2/subsubA/default
cvs checkout: Updating module-cvs-B_FROM_INITIALS_BUT_ONE/sub3
U module-cvs-B_FROM_INITIALS_BUT_ONE/sub3/default
error: pathspec 'B_FROM_INITIALS_BUT_ONE' did not match any file(s) known to git
not ok 5 - test branch B_FROM_INITIALS_BUT_ONE # TODO known breakage

checking known breakage of 9602.6 'test branch B_MIXED': 

	test_cmp_branch_tree B_MIXED


cvs checkout: Updating module-cvs-B_MIXED
U module-cvs-B_MIXED/default
cvs checkout: Updating module-cvs-B_MIXED/sub1
U module-cvs-B_MIXED/sub1/default
cvs checkout: Updating module-cvs-B_MIXED/sub1/subsubA
U module-cvs-B_MIXED/sub1/subsubA/default
cvs checkout: Updating module-cvs-B_MIXED/sub1/subsubB
U module-cvs-B_MIXED/sub1/subsubB/default
cvs checkout: Updating module-cvs-B_MIXED/sub2
U module-cvs-B_MIXED/sub2/branch_B_MIXED_only
U module-cvs-B_MIXED/sub2/default
cvs checkout: Updating module-cvs-B_MIXED/sub2/subsubA
U module-cvs-B_MIXED/sub2/subsubA/default
cvs checkout: Updating module-cvs-B_MIXED/sub3
U module-cvs-B_MIXED/sub3/default
Switched to branch 'B_MIXED'
--- module-cvs-B_MIXED/./sub3/default	2003-05-23 00:15:26.000000000 +0000
+++ module-git/./sub3/default	2022-12-28 08:25:22.066918977 +0000
@@ -3,3 +3,5 @@
 Every directory in the `proj' project has a file named `default'.
 
 This line was added by the first commit (affecting two files).
+
+This line was added in the second commit (affecting all 7 files).
not ok 6 - test branch B_MIXED # TODO known breakage

expecting success of 9602.7 'test branch B_SPLIT': 

	test_cmp_branch_tree B_SPLIT


cvs checkout: Updating module-cvs-B_SPLIT
U module-cvs-B_SPLIT/default
cvs checkout: Updating module-cvs-B_SPLIT/sub1
U module-cvs-B_SPLIT/sub1/default
cvs checkout: Updating module-cvs-B_SPLIT/sub1/subsubA
U module-cvs-B_SPLIT/sub1/subsubA/default
cvs checkout: Updating module-cvs-B_SPLIT/sub1/subsubB
U module-cvs-B_SPLIT/sub1/subsubB/default
cvs checkout: Updating module-cvs-B_SPLIT/sub2
U module-cvs-B_SPLIT/sub2/default
cvs checkout: Updating module-cvs-B_SPLIT/sub2/subsubA
U module-cvs-B_SPLIT/sub2/subsubA/default
cvs checkout: Updating module-cvs-B_SPLIT/sub3
U module-cvs-B_SPLIT/sub3/default
Switched to branch 'B_SPLIT'
ok 7 - test branch B_SPLIT

checking known breakage of 9602.8 'test tag vendortag': 

	test_cmp_branch_tree vendortag


cvs checkout: Updating module-cvs-vendortag
U module-cvs-vendortag/default
cvs checkout: Updating module-cvs-vendortag/sub1
U module-cvs-vendortag/sub1/default
cvs checkout: Updating module-cvs-vendortag/sub1/subsubA
U module-cvs-vendortag/sub1/subsubA/default
cvs checkout: Updating module-cvs-vendortag/sub1/subsubB
U module-cvs-vendortag/sub1/subsubB/default
cvs checkout: Updating module-cvs-vendortag/sub2
U module-cvs-vendortag/sub2/default
cvs checkout: Updating module-cvs-vendortag/sub2/subsubA
U module-cvs-vendortag/sub2/subsubA/default
cvs checkout: Updating module-cvs-vendortag/sub3
U module-cvs-vendortag/sub3/default
error: pathspec 'vendortag' did not match any file(s) known to git
not ok 8 - test tag vendortag # TODO known breakage

expecting success of 9602.9 'test tag T_ALL_INITIAL_FILES': 

	test_cmp_branch_tree T_ALL_INITIAL_FILES


cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES
U module-cvs-T_ALL_INITIAL_FILES/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub1
U module-cvs-T_ALL_INITIAL_FILES/sub1/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub1/subsubA
U module-cvs-T_ALL_INITIAL_FILES/sub1/subsubA/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub1/subsubB
U module-cvs-T_ALL_INITIAL_FILES/sub1/subsubB/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub2
U module-cvs-T_ALL_INITIAL_FILES/sub2/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub2/subsubA
U module-cvs-T_ALL_INITIAL_FILES/sub2/subsubA/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES/sub3
U module-cvs-T_ALL_INITIAL_FILES/sub3/default
Note: switching to 'T_ALL_INITIAL_FILES'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e9bb65d Initial import.
ok 9 - test tag T_ALL_INITIAL_FILES

checking known breakage of 9602.10 'test tag T_ALL_INITIAL_FILES_BUT_ONE': 

	test_cmp_branch_tree T_ALL_INITIAL_FILES_BUT_ONE


cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub1
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub1/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub1/subsubA
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub1/subsubA/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub1/subsubB
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub2
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub2/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub2/subsubA
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub2/subsubA/default
cvs checkout: Updating module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub3
U module-cvs-T_ALL_INITIAL_FILES_BUT_ONE/sub3/default
error: pathspec 'T_ALL_INITIAL_FILES_BUT_ONE' did not match any file(s) known to git
not ok 10 - test tag T_ALL_INITIAL_FILES_BUT_ONE # TODO known breakage

checking known breakage of 9602.11 'test tag T_MIXED': 

	test_cmp_branch_tree T_MIXED


cvs checkout: Updating module-cvs-T_MIXED
U module-cvs-T_MIXED/default
cvs checkout: Updating module-cvs-T_MIXED/sub1
U module-cvs-T_MIXED/sub1/default
cvs checkout: Updating module-cvs-T_MIXED/sub1/subsubA
U module-cvs-T_MIXED/sub1/subsubA/default
cvs checkout: Updating module-cvs-T_MIXED/sub1/subsubB
U module-cvs-T_MIXED/sub1/subsubB/default
cvs checkout: Updating module-cvs-T_MIXED/sub2
U module-cvs-T_MIXED/sub2/default
cvs checkout: Updating module-cvs-T_MIXED/sub2/subsubA
U module-cvs-T_MIXED/sub2/subsubA/default
cvs checkout: Updating module-cvs-T_MIXED/sub3
U module-cvs-T_MIXED/sub3/default
Previous HEAD position was e9bb65d Initial import.
HEAD is now at d875d54 Second commit to proj, affecting all 7 files.
--- module-cvs-T_MIXED/./sub2/subsubA/default	2003-05-22 23:20:19.000000000 +0000
+++ module-git/./sub2/subsubA/default	2022-12-28 08:25:27.067100501 +0000
@@ -1,3 +1,5 @@
 This is sub2/subsub2/default.
 
 Every directory in the `proj' project has a file named `default'.
+
+This line was added in the second commit (affecting all 7 files).
not ok 11 - test tag T_MIXED # TODO known breakage

# still have 6 known breakage(s)
# passed all remaining 5 test(s)
1..11
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9812-git-p4-wildcards.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9813-git-p4-preserve-users.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9814-git-p4-rename.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9815-git-p4-submit-fail.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9816-git-p4-locked.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9817-git-p4-exclude.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9818-git-p4-block.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9819-git-p4-case-folding.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9820-git-p4-editor-handling.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9821-git-p4-path-variations.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9822-git-p4-path-encoding.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9823-git-p4-mock-lfs.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9824-git-p4-git-lfs.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9825-git-p4-handle-utf16-without-bom.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9826-git-p4-keep-empty-commits.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9827-git-p4-change-filetype.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9828-git-p4-map-user.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9829-git-p4-jobs.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9830-git-p4-symlink-dir.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9831-git-p4-triggers.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9832-unshelve.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9833-errors.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9834-git-p4-file-dir-bug.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9835-git-p4-metadata-encoding-python2.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9836-git-p4-metadata-encoding-python3.sh ***
1..0 # SKIP skipping git p4 tests; no p4 or p4d
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9850-shell.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9850-shell/.git/
expecting success of 9850.1 'shell allows upload-pack': 
	printf 0000 >input &&
	git upload-pack . <input >expect &&
	git shell -c "git-upload-pack $SQ.$SQ" <input >actual &&
	test_cmp expect actual

ok 1 - shell allows upload-pack

expecting success of 9850.2 'shell forbids other commands': 
	test_must_fail git shell -c "git config foo.bar baz"

fatal: unrecognized command 'git config foo.bar baz'
ok 2 - shell forbids other commands

expecting success of 9850.3 'shell forbids interactive use by default': 
	test_must_fail git shell

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
ok 3 - shell forbids interactive use by default

expecting success of 9850.4 'shell allows interactive command': 
	mkdir git-shell-commands &&
	write_script git-shell-commands/ping <<-\EOF &&
	echo pong
	EOF
	echo pong >expect &&
	echo ping | git shell >actual &&
	test_cmp expect actual

git> git> 
ok 4 - shell allows interactive command

expecting success of 9850.5 'shell complains of overlong commands': 
	perl -e "print \"a\" x 2**12 for (0..2**19)" |
	test_must_fail git shell 2>err &&
	grep "too long" err

git> fatal: invalid command format: input too long
ok 5 - shell complains of overlong commands

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9901-git-web--browse.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9901-git-web--browse/.git/
expecting success of 9901.1 'URL with an ampersand in it': 
	echo http://example.com/foo\&bar >expect &&
	git config browser.custom.cmd echo &&
	test_web_browse custom http://example.com/foo\&bar

ok 1 - URL with an ampersand in it

expecting success of 9901.2 'URL with a semi-colon in it': 
	echo http://example.com/foo\;bar >expect &&
	git config browser.custom.cmd echo &&
	test_web_browse custom http://example.com/foo\;bar

ok 2 - URL with a semi-colon in it

expecting success of 9901.3 'URL with a hash in it': 
	echo http://example.com/foo#bar >expect &&
	git config browser.custom.cmd echo &&
	test_web_browse custom http://example.com/foo#bar

ok 3 - URL with a hash in it

expecting success of 9901.4 'browser paths are properly quoted': 
	echo fake: http://example.com/foo >expect &&
	cat >"fake browser" <<-\EOF &&
	#!/bin/sh
	echo fake: "$@"
	EOF
	chmod +x "fake browser" &&
	git config browser.w3m.path "$(pwd)/fake browser" &&
	test_web_browse w3m http://example.com/foo

ok 4 - browser paths are properly quoted

expecting success of 9901.5 'browser command allows arbitrary shell code': 
	echo "arg: http://example.com/foo" >expect &&
	git config browser.custom.cmd "
		f() {
			for i in \"\$@\"; do
				echo arg: \$i
			done
		}
		f" &&
	test_web_browse custom http://example.com/foo

ok 5 - browser command allows arbitrary shell code

# passed all 5 test(s)
1..5
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9903-bash-prompt.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9903-bash-prompt/.git/
expecting success of 9903.1 'setup for prompt tests': 
	git init otherrepo &&
	echo 1 >file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git tag -a -m msg1 t1 &&
	git checkout -b b1 &&
	echo 2 >file &&
	git commit -m "second b1" file &&
	echo 3 >file &&
	git commit -m "third b1" file &&
	git tag -a -m msg2 t2 &&
	git checkout -b b2 main &&
	echo 0 >file &&
	git commit -m "second b2" file &&
	echo 00 >file &&
	git commit -m "another b2" file &&
	echo 000 >file &&
	git commit -m "yet another b2" file &&
	mkdir ignored_dir &&
	echo "ignored_dir/" >>.gitignore &&
	git checkout main

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9903-bash-prompt/otherrepo/.git/
[main (root-commit) 777c62c] initial
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
Switched to a new branch 'b1'
[b1 5792ca5] second b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[b1 f308b96] third b1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to a new branch 'b2'
[b2 ac373be] second b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[b2 78b9f52] another b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[b2 0de4521] yet another b2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'main'
ok 1 - setup for prompt tests

expecting success of 9903.2 'prompt - branch name': 
	printf " (main)" >expected &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

ok 2 - prompt - branch name

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 9903.3 'prompt - branch name - symlink symref': 
	printf " (main)" >expected &&
	test_when_finished "git checkout main" &&
	test_config core.preferSymlinkRefs true &&
	git checkout main &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Already on 'main'
Already on 'main'
ok 3 - prompt - branch name - symlink symref

expecting success of 9903.4 'prompt - unborn branch': 
	printf " (unborn)" >expected &&
	git checkout --orphan unborn &&
	test_when_finished "git checkout main" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Switched to a new branch 'unborn'
Switched to branch 'main'
ok 4 - prompt - unborn branch

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 9903.5 'prompt - with newline in path': 
    repo_with_newline="repo
with
newline" &&
	mkdir "$repo_with_newline" &&
	printf " (main)" >expected &&
	git init "$repo_with_newline" &&
	test_when_finished "rm -rf \"$repo_with_newline\"" &&
	mkdir "$repo_with_newline"/subdir &&
	(
		cd "$repo_with_newline/subdir" &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9903-bash-prompt/repo
with
newline/.git/
ok 5 - prompt - with newline in path

expecting success of 9903.6 'prompt - detached head': 
	printf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected &&
	test_config core.abbrev 13 &&
	git checkout b1^ &&
	test_when_finished "git checkout main" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Note: switching to 'b1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5792ca55e9344 second b1
Previous HEAD position was 5792ca55e9344 second b1
Switched to branch 'main'
ok 6 - prompt - detached head

expecting success of 9903.7 'prompt - describe detached head - contains': 
	printf " ((t2~1))" >expected &&
	git checkout b1^ &&
	test_when_finished "git checkout main" &&
	(
		GIT_PS1_DESCRIBE_STYLE=contains &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Note: switching to 'b1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5792ca5 second b1
Previous HEAD position was 5792ca5 second b1
Switched to branch 'main'
ok 7 - prompt - describe detached head - contains

expecting success of 9903.8 'prompt - describe detached head - branch': 
	printf " ((tags/t2~1))" >expected &&
	git checkout b1^ &&
	test_when_finished "git checkout main" &&
	(
		GIT_PS1_DESCRIBE_STYLE=branch &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Note: switching to 'b1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5792ca5 second b1
Previous HEAD position was 5792ca5 second b1
Switched to branch 'main'
ok 8 - prompt - describe detached head - branch

expecting success of 9903.9 'prompt - describe detached head - describe': 
	printf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) >expected &&
	git checkout b1^ &&
	test_when_finished "git checkout main" &&
	(
		GIT_PS1_DESCRIBE_STYLE=describe &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Note: switching to 'b1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5792ca5 second b1
Previous HEAD position was 5792ca5 second b1
Switched to branch 'main'
ok 9 - prompt - describe detached head - describe

expecting success of 9903.10 'prompt - describe detached head - default': 
	printf " ((t2))" >expected &&
	git checkout --detach b1 &&
	test_when_finished "git checkout main" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

HEAD is now at f308b96 third b1
Previous HEAD position was f308b96 third b1
Switched to branch 'main'
ok 10 - prompt - describe detached head - default

expecting success of 9903.11 'prompt - inside .git directory': 
	printf " (GIT_DIR!)" >expected &&
	(
		cd .git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 11 - prompt - inside .git directory

expecting success of 9903.12 'prompt - deep inside .git directory': 
	printf " (GIT_DIR!)" >expected &&
	(
		cd .git/objects &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 12 - prompt - deep inside .git directory

expecting success of 9903.13 'prompt - inside bare repository': 
	printf " (BARE:main)" >expected &&
	git init --bare bare.git &&
	test_when_finished "rm -rf bare.git" &&
	(
		cd bare.git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9903-bash-prompt/bare.git/
ok 13 - prompt - inside bare repository

expecting success of 9903.14 'prompt - interactive rebase': 
	printf " (b1|REBASE 2/3)" >expected &&
	write_script fake_editor.sh <<-\EOF &&
		echo "exec echo" >"$1"
		echo "edit $(git log -1 --format="%h")" >>"$1"
		echo "exec echo" >>"$1"
	EOF
	test_when_finished "rm -f fake_editor.sh" &&
	test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
	git checkout b1 &&
	test_when_finished "git checkout main" &&
	git rebase -i HEAD^ &&
	test_when_finished "git rebase --abort" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Switched to branch 'b1'
Rebasing (1/3)

                                                                                
Executing: echo

Rebasing (2/3)

                                                                                
Stopped at f308b96...  
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
Switched to branch 'main'
ok 14 - prompt - interactive rebase

expecting success of 9903.15 'prompt - rebase merge': 
	printf " (b2|REBASE 1/3)" >expected &&
	git checkout b2 &&
	test_when_finished "git checkout main" &&
	test_must_fail git rebase --merge b1 b2 &&
	test_when_finished "git rebase --abort" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Switched to branch 'b2'
Rebasing (1/3)
Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply ac373be... second b2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply ac373be... second b2
Switched to branch 'main'
ok 15 - prompt - rebase merge

expecting success of 9903.16 'prompt - rebase am': 
	printf " (b2|REBASE 1/3)" >expected &&
	git checkout b2 &&
	test_when_finished "git checkout main" &&
	test_must_fail git rebase --apply b1 b2 &&
	test_when_finished "git rebase --abort" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Switched to branch 'b2'
First, rewinding head to replay your work on top of it...
Applying: second b2
Using index info to reconstruct a base tree...
M	file
Falling back to patching base and 3-way merge...
Merging:
f308b96 third b1
virtual second b2
found 1 common ancestor:
virtual f27c6ae26adb8396d3861976ba268f87ad8afa0b
Auto-merging file
CONFLICT (content): Merge conflict in file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 second b2
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Switched to branch 'main'
ok 16 - prompt - rebase am

expecting success of 9903.17 'prompt - merge': 
	printf " (b1|MERGING)" >expected &&
	git checkout b1 &&
	test_when_finished "git checkout main" &&
	test_must_fail git merge b2 &&
	test_when_finished "git reset --hard" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Switched to branch 'b1'
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
HEAD is now at f308b96 third b1
Switched to branch 'main'
ok 17 - prompt - merge

expecting success of 9903.18 'prompt - cherry-pick': 
	printf " (main|CHERRY-PICKING)" >expected &&
	test_must_fail git cherry-pick b1 b1^ &&
	test_when_finished "git cherry-pick --abort" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual" &&
	git reset --merge &&
	test_must_fail git rev-parse CHERRY_PICK_HEAD &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

Auto-merging file
CONFLICT (content): Merge conflict in file
error: could not apply f308b96... third b1
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
fatal: ambiguous argument 'CHERRY_PICK_HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
CHERRY_PICK_HEAD
ok 18 - prompt - cherry-pick

expecting success of 9903.19 'prompt - revert': 
	printf " (main|REVERTING)" >expected &&
	test_must_fail git revert b1^ b1 &&
	test_when_finished "git revert --abort" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual" &&
	git reset --merge &&
	test_must_fail git rev-parse REVERT_HEAD &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

On branch main
Revert currently in progress.
  (run "git revert --continue" to continue)
  (use "git revert --skip" to skip this patch)
  (use "git revert --abort" to cancel the revert operation)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	actual
	expected
	otherrepo/

nothing added to commit but untracked files present (use "git add" to track)
fatal: ambiguous argument 'REVERT_HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
REVERT_HEAD
ok 19 - prompt - revert

expecting success of 9903.20 'prompt - bisect': 
	printf " (main|BISECTING)" >expected &&
	git bisect start &&
	test_when_finished "git bisect reset" &&
	__git_ps1 >"$actual" &&
	test_cmp expected "$actual"

status: waiting for both good and bad commits
Already on 'main'
ok 20 - prompt - bisect

expecting success of 9903.21 'prompt - dirty status indicator - clean': 
	printf " (main)" >expected &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 21 - prompt - dirty status indicator - clean

expecting success of 9903.22 'prompt - dirty status indicator - dirty worktree': 
	printf " (main *)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 22 - prompt - dirty status indicator - dirty worktree

expecting success of 9903.23 'prompt - dirty status indicator - dirty index': 
	printf " (main +)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	git add -u &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 23 - prompt - dirty status indicator - dirty index

expecting success of 9903.24 'prompt - dirty status indicator - dirty index and worktree': 
	printf " (main *+)" >expected &&
	echo "dirty index" >file &&
	test_when_finished "git reset --hard" &&
	git add -u &&
	echo "dirty worktree" >file &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 24 - prompt - dirty status indicator - dirty index and worktree

expecting success of 9903.25 'prompt - dirty status indicator - orphan branch - clean': 
	printf " (orphan #)" >expected &&
	test_when_finished "git checkout main" &&
	git checkout --orphan orphan &&
	git reset --hard &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Switched to a new branch 'orphan'
Switched to branch 'main'
ok 25 - prompt - dirty status indicator - orphan branch - clean

expecting success of 9903.26 'prompt - dirty status indicator - orphan branch - dirty index': 
	printf " (orphan +)" >expected &&
	test_when_finished "git checkout main" &&
	git checkout --orphan orphan &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Switched to a new branch 'orphan'
Switched to branch 'main'
ok 26 - prompt - dirty status indicator - orphan branch - dirty index

expecting success of 9903.27 'prompt - dirty status indicator - orphan branch - dirty index and worktree': 
	printf " (orphan *+)" >expected &&
	test_when_finished "git checkout main" &&
	git checkout --orphan orphan &&
	>file &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Switched to a new branch 'orphan'
Switched to branch 'main'
M	file
ok 27 - prompt - dirty status indicator - orphan branch - dirty index and worktree

expecting success of 9903.28 'prompt - dirty status indicator - shell variable unset with config disabled': 
	printf " (main)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	test_config bash.showDirtyState false &&
	(
		sane_unset GIT_PS1_SHOWDIRTYSTATE &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 28 - prompt - dirty status indicator - shell variable unset with config disabled

expecting success of 9903.29 'prompt - dirty status indicator - shell variable unset with config enabled': 
	printf " (main)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	test_config bash.showDirtyState true &&
	(
		sane_unset GIT_PS1_SHOWDIRTYSTATE &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 29 - prompt - dirty status indicator - shell variable unset with config enabled

expecting success of 9903.30 'prompt - dirty status indicator - shell variable set with config disabled': 
	printf " (main)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	test_config bash.showDirtyState false &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 30 - prompt - dirty status indicator - shell variable set with config disabled

expecting success of 9903.31 'prompt - dirty status indicator - shell variable set with config enabled': 
	printf " (main *)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	test_config bash.showDirtyState true &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 31 - prompt - dirty status indicator - shell variable set with config enabled

expecting success of 9903.32 'prompt - dirty status indicator - not shown inside .git directory': 
	printf " (GIT_DIR!)" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		cd .git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 32 - prompt - dirty status indicator - not shown inside .git directory

expecting success of 9903.33 'prompt - stash status indicator - no stash': 
	printf " (main)" >expected &&
	(
		GIT_PS1_SHOWSTASHSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 33 - prompt - stash status indicator - no stash

expecting success of 9903.34 'prompt - stash status indicator - stash': 
	printf " (main $)" >expected &&
	echo 2 >file &&
	git stash &&
	test_when_finished "git stash drop" &&
	git pack-refs --all &&
	(
		GIT_PS1_SHOWSTASHSTATE=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Saved working directory and index state WIP on main: 777c62c initial
Dropped refs/stash@{0} (bbb91ee0b4c7c8b5a0478ff4c0bd43e309077194)
ok 34 - prompt - stash status indicator - stash

expecting success of 9903.35 'prompt - stash status indicator - not shown inside .git directory': 
	printf " (GIT_DIR!)" >expected &&
	echo 2 >file &&
	git stash &&
	test_when_finished "git stash drop" &&
	(
		GIT_PS1_SHOWSTASHSTATE=y &&
		cd .git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Saved working directory and index state WIP on main: 777c62c initial
Dropped refs/stash@{0} (bbb91ee0b4c7c8b5a0478ff4c0bd43e309077194)
ok 35 - prompt - stash status indicator - not shown inside .git directory

expecting success of 9903.36 'prompt - untracked files status indicator - no untracked files': 
	printf " (main)" >expected &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		cd otherrepo &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 36 - prompt - untracked files status indicator - no untracked files

expecting success of 9903.37 'prompt - untracked files status indicator - untracked files': 
	printf " (main %%)" >expected &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 37 - prompt - untracked files status indicator - untracked files

expecting success of 9903.38 'prompt - untracked files status indicator - empty untracked dir': 
	printf " (main)" >expected &&
	mkdir otherrepo/untracked-dir &&
	test_when_finished "rm -rf otherrepo/untracked-dir" &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		cd otherrepo &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 38 - prompt - untracked files status indicator - empty untracked dir

expecting success of 9903.39 'prompt - untracked files status indicator - non-empty untracked dir': 
	printf " (main %%)" >expected &&
	mkdir otherrepo/untracked-dir &&
	test_when_finished "rm -rf otherrepo/untracked-dir" &&
	>otherrepo/untracked-dir/untracked-file &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		cd otherrepo &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 39 - prompt - untracked files status indicator - non-empty untracked dir

expecting success of 9903.40 'prompt - untracked files status indicator - untracked files outside cwd': 
	printf " (main %%)" >expected &&
	(
		mkdir -p ignored_dir &&
		cd ignored_dir &&
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 40 - prompt - untracked files status indicator - untracked files outside cwd

expecting success of 9903.41 'prompt - untracked files status indicator - shell variable unset with config disabled': 
	printf " (main)" >expected &&
	test_config bash.showUntrackedFiles false &&
	(
		sane_unset GIT_PS1_SHOWUNTRACKEDFILES &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 41 - prompt - untracked files status indicator - shell variable unset with config disabled

expecting success of 9903.42 'prompt - untracked files status indicator - shell variable unset with config enabled': 
	printf " (main)" >expected &&
	test_config bash.showUntrackedFiles true &&
	(
		sane_unset GIT_PS1_SHOWUNTRACKEDFILES &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 42 - prompt - untracked files status indicator - shell variable unset with config enabled

expecting success of 9903.43 'prompt - untracked files status indicator - shell variable set with config disabled': 
	printf " (main)" >expected &&
	test_config bash.showUntrackedFiles false &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 43 - prompt - untracked files status indicator - shell variable set with config disabled

expecting success of 9903.44 'prompt - untracked files status indicator - shell variable set with config enabled': 
	printf " (main %%)" >expected &&
	test_config bash.showUntrackedFiles true &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 44 - prompt - untracked files status indicator - shell variable set with config enabled

expecting success of 9903.45 'prompt - untracked files status indicator - not shown inside .git directory': 
	printf " (GIT_DIR!)" >expected &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		cd .git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 45 - prompt - untracked files status indicator - not shown inside .git directory

expecting success of 9903.46 'prompt - format string starting with dash': 
	printf -- "-main" >expected &&
	__git_ps1 "-%s" >"$actual" &&
	test_cmp expected "$actual"

ok 46 - prompt - format string starting with dash

expecting success of 9903.47 'prompt - pc mode': 
	printf "BEFORE: (\${__git_ps1_branch_name}):AFTER\\nmain" >expected &&
	(
		__git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
		test_must_be_empty "$actual" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 47 - prompt - pc mode

expecting success of 9903.48 'prompt - bash color pc mode - branch name': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear}):AFTER\\nmain" >expected &&
	(
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 48 - prompt - bash color pc mode - branch name

expecting success of 9903.49 'prompt - bash color pc mode - detached head': 
	printf "BEFORE: (${c_red}\${__git_ps1_branch_name}${c_clear}):AFTER\\n(%s...)" $(git log -1 --format="%h" b1^) >expected &&
	git checkout b1^ &&
	test_when_finished "git checkout main" &&
	(
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

Note: switching to 'b1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5792ca5 second b1
Previous HEAD position was 5792ca5 second b1
Switched to branch 'main'
ok 49 - prompt - bash color pc mode - detached head

expecting success of 9903.50 'prompt - bash color pc mode - dirty status indicator - dirty worktree': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}):AFTER\\nmain" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 50 - prompt - bash color pc mode - dirty status indicator - dirty worktree

expecting success of 9903.51 'prompt - bash color pc mode - dirty status indicator - dirty index': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_green}+${c_clear}):AFTER\\nmain" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	git add -u &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 51 - prompt - bash color pc mode - dirty status indicator - dirty index

expecting success of 9903.52 'prompt - bash color pc mode - dirty status indicator - dirty index and worktree': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}${c_green}+${c_clear}):AFTER\\nmain" >expected &&
	echo "dirty index" >file &&
	test_when_finished "git reset --hard" &&
	git add -u &&
	echo "dirty worktree" >file &&
	(
		GIT_PS1_SHOWCOLORHINTS=y &&
		GIT_PS1_SHOWDIRTYSTATE=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 52 - prompt - bash color pc mode - dirty status indicator - dirty index and worktree

expecting success of 9903.53 'prompt - bash color pc mode - dirty status indicator - before root commit': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_green}#${c_clear}):AFTER\\nmain" >expected &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		cd otherrepo &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 53 - prompt - bash color pc mode - dirty status indicator - before root commit

expecting success of 9903.54 'prompt - bash color pc mode - inside .git directory': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear}):AFTER\\nGIT_DIR!" >expected &&
	echo "dirty" >file &&
	test_when_finished "git reset --hard" &&
	(
		GIT_PS1_SHOWDIRTYSTATE=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		cd .git &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

HEAD is now at 777c62c initial
ok 54 - prompt - bash color pc mode - inside .git directory

expecting success of 9903.55 'prompt - bash color pc mode - stash status indicator': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_lblue}\$${c_clear}):AFTER\\nmain" >expected &&
	echo 2 >file &&
	git stash &&
	test_when_finished "git stash drop" &&
	(
		GIT_PS1_SHOWSTASHSTATE=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

Saved working directory and index state WIP on main: 777c62c initial
Dropped refs/stash@{0} (bbb91ee0b4c7c8b5a0478ff4c0bd43e309077194)
ok 55 - prompt - bash color pc mode - stash status indicator

expecting success of 9903.56 'prompt - bash color pc mode - untracked files status indicator': 
	printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}%%${c_clear}):AFTER\\nmain" >expected &&
	(
		GIT_PS1_SHOWUNTRACKEDFILES=y &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 56 - prompt - bash color pc mode - untracked files status indicator

expecting success of 9903.57 'prompt - zsh color pc mode': 
	printf "BEFORE: (%%F{green}main%%f):AFTER" >expected &&
	(
		ZSH_VERSION=5.0.0 &&
		GIT_PS1_SHOWCOLORHINTS=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s" "$PS1" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 57 - prompt - zsh color pc mode

expecting success of 9903.58 'prompt - hide if pwd ignored - env var unset, config disabled': 
	printf " (main)" >expected &&
	test_config bash.hideIfPwdIgnored false &&
	(
		cd ignored_dir &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 58 - prompt - hide if pwd ignored - env var unset, config disabled

expecting success of 9903.59 'prompt - hide if pwd ignored - env var unset, config disabled, pc mode': 
	printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
	test_config bash.hideIfPwdIgnored false &&
	(
		cd ignored_dir &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s" "$PS1" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 59 - prompt - hide if pwd ignored - env var unset, config disabled, pc mode

expecting success of 9903.60 'prompt - hide if pwd ignored - env var unset, config unset': 
	printf " (main)" >expected &&
	(
		cd ignored_dir &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 60 - prompt - hide if pwd ignored - env var unset, config unset

expecting success of 9903.61 'prompt - hide if pwd ignored - env var unset, config unset, pc mode': 
	printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
	(
		cd ignored_dir &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s" "$PS1" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 61 - prompt - hide if pwd ignored - env var unset, config unset, pc mode

expecting success of 9903.62 'prompt - hide if pwd ignored - env var set, config disabled': 
	printf " (main)" >expected &&
	test_config bash.hideIfPwdIgnored false &&
	(
		cd ignored_dir &&
		GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 62 - prompt - hide if pwd ignored - env var set, config disabled

expecting success of 9903.63 'prompt - hide if pwd ignored - env var set, config disabled, pc mode': 
	printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
	test_config bash.hideIfPwdIgnored false &&
	(
		cd ignored_dir &&
		GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s" "$PS1" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 63 - prompt - hide if pwd ignored - env var set, config disabled, pc mode

expecting success of 9903.64 'prompt - hide if pwd ignored - env var set, config unset': 
	(
		cd ignored_dir &&
		GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
		__git_ps1 >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 64 - prompt - hide if pwd ignored - env var set, config unset

expecting success of 9903.65 'prompt - hide if pwd ignored - env var set, config unset, pc mode': 
	printf "BEFORE::AFTER" >expected &&
	(
		cd ignored_dir &&
		GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
		__git_ps1 "BEFORE:" ":AFTER" &&
		printf "%s" "$PS1" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 65 - prompt - hide if pwd ignored - env var set, config unset, pc mode

expecting success of 9903.66 'prompt - hide if pwd ignored - inside gitdir': 
	printf " (GIT_DIR!)" >expected &&
	(
		GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
		cd .git &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 66 - prompt - hide if pwd ignored - inside gitdir

expecting success of 9903.67 'prompt - conflict indicator': 
	printf " (main|CONFLICT)" >expected &&
	echo "stash" >file &&
	git stash &&
	test_when_finished "git stash drop" &&
	echo "commit" >file &&
	git commit -m "commit" file &&
	test_when_finished "git reset --hard HEAD~" &&
	test_must_fail git stash apply &&
	(
		GIT_PS1_SHOWCONFLICTSTATE="yes" &&
		__git_ps1 >"$actual"
	) &&
	test_cmp expected "$actual"

Saved working directory and index state WIP on main: 777c62c initial
[main acefd9b] commit
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
Merging Updated upstream with Stashed changes
Auto-merging file
CONFLICT (content): Merge conflict in file
On branch main
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   file

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	actual
	expected
	otherrepo/

no changes added to commit (use "git add" and/or "git commit -a")
HEAD is now at 777c62c initial
Dropped refs/stash@{0} (e412858e8eccdfead521b04590e73924bcedba33)
ok 67 - prompt - conflict indicator

# passed all 67 test(s)
1..67
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9902-completion.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/.git/
expecting success of 9902.1 'setup for __git_find_repo_path/__gitdir tests': 
	mkdir -p subdir/subsubdir &&
	mkdir -p non-repo &&
	git init -b main otherrepo

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/otherrepo/.git/
ok 1 - setup for __git_find_repo_path/__gitdir tests

expecting success of 9902.2 '__git_find_repo_path - from command line (through $__git_dir)': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		__git_dir="$ROOT/otherrepo/.git" &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 2 - __git_find_repo_path - from command line (through $__git_dir)

expecting success of 9902.3 '__git_find_repo_path - .git directory in cwd': 
	echo ".git" >expected &&
	(
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 3 - __git_find_repo_path - .git directory in cwd

expecting success of 9902.4 '__git_find_repo_path - .git directory in parent': 
	echo "$ROOT/.git" >expected &&
	(
		cd subdir/subsubdir &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 4 - __git_find_repo_path - .git directory in parent

expecting success of 9902.5 '__git_find_repo_path - cwd is a .git directory': 
	echo "." >expected &&
	(
		cd .git &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 5 - __git_find_repo_path - cwd is a .git directory

expecting success of 9902.6 '__git_find_repo_path - parent is a .git directory': 
	echo "$ROOT/.git" >expected &&
	(
		cd .git/objects &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 6 - __git_find_repo_path - parent is a .git directory

expecting success of 9902.7 '__git_find_repo_path - $GIT_DIR set while .git directory in cwd': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		GIT_DIR="$ROOT/otherrepo/.git" &&
		export GIT_DIR &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 7 - __git_find_repo_path - $GIT_DIR set while .git directory in cwd

expecting success of 9902.8 '__git_find_repo_path - $GIT_DIR set while .git directory in parent': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		GIT_DIR="$ROOT/otherrepo/.git" &&
		export GIT_DIR &&
		cd subdir &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 8 - __git_find_repo_path - $GIT_DIR set while .git directory in parent

expecting success of 9902.9 '__git_find_repo_path - from command line while "git -C"': 
	echo "$ROOT/.git" >expected &&
	(
		__git_dir="$ROOT/.git" &&
		__git_C_args=(-C otherrepo) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 9 - __git_find_repo_path - from command line while "git -C"

expecting success of 9902.10 '__git_find_repo_path - relative dir from command line and "git -C"': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		cd subdir &&
		__git_dir="otherrepo/.git" &&
		__git_C_args=(-C ..) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 10 - __git_find_repo_path - relative dir from command line and "git -C"

expecting success of 9902.11 '__git_find_repo_path - $GIT_DIR set while "git -C"': 
	echo "$ROOT/.git" >expected &&
	(
		GIT_DIR="$ROOT/.git" &&
		export GIT_DIR &&
		__git_C_args=(-C otherrepo) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 11 - __git_find_repo_path - $GIT_DIR set while "git -C"

expecting success of 9902.12 '__git_find_repo_path - relative dir in $GIT_DIR and "git -C"': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		cd subdir &&
		GIT_DIR="otherrepo/.git" &&
		export GIT_DIR &&
		__git_C_args=(-C ..) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 12 - __git_find_repo_path - relative dir in $GIT_DIR and "git -C"

expecting success of 9902.13 '__git_find_repo_path - "git -C" while .git directory in cwd': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		__git_C_args=(-C otherrepo) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 13 - __git_find_repo_path - "git -C" while .git directory in cwd

expecting success of 9902.14 '__git_find_repo_path - "git -C" while cwd is a .git directory': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		cd .git &&
		__git_C_args=(-C .. -C otherrepo) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 14 - __git_find_repo_path - "git -C" while cwd is a .git directory

expecting success of 9902.15 '__git_find_repo_path - "git -C" while .git directory in parent': 
	echo "$ROOT/otherrepo/.git" >expected &&
	(
		cd subdir &&
		__git_C_args=(-C .. -C otherrepo) &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 15 - __git_find_repo_path - "git -C" while .git directory in parent

expecting success of 9902.16 '__git_find_repo_path - non-existing path in "git -C"': 
	(
		__git_C_args=(-C non-existing) &&
		test_must_fail __git_find_repo_path &&
		printf "$__git_repo_path" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 16 - __git_find_repo_path - non-existing path in "git -C"

expecting success of 9902.17 '__git_find_repo_path - non-existing path in $__git_dir': 
	(
		__git_dir="non-existing" &&
		test_must_fail __git_find_repo_path &&
		printf "$__git_repo_path" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 17 - __git_find_repo_path - non-existing path in $__git_dir

expecting success of 9902.18 '__git_find_repo_path - non-existing $GIT_DIR': 
	(
		GIT_DIR="$ROOT/non-existing" &&
		export GIT_DIR &&
		test_must_fail __git_find_repo_path &&
		printf "$__git_repo_path" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 18 - __git_find_repo_path - non-existing $GIT_DIR

expecting success of 9902.19 '__git_find_repo_path - gitfile in cwd': 
	echo "$ROOT/otherrepo/.git" >expected &&
	echo "gitdir: $ROOT/otherrepo/.git" >subdir/.git &&
	test_when_finished "rm -f subdir/.git" &&
	(
		cd subdir &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 19 - __git_find_repo_path - gitfile in cwd

expecting success of 9902.20 '__git_find_repo_path - gitfile in parent': 
	echo "$ROOT/otherrepo/.git" >expected &&
	echo "gitdir: $ROOT/otherrepo/.git" >subdir/.git &&
	test_when_finished "rm -f subdir/.git" &&
	(
		cd subdir/subsubdir &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 20 - __git_find_repo_path - gitfile in parent

checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
expecting success of 9902.21 '__git_find_repo_path - resulting path avoids symlinks': 
	echo "$ROOT/otherrepo/.git" >expected &&
	mkdir otherrepo/dir &&
	test_when_finished "rm -rf otherrepo/dir" &&
	ln -s otherrepo/dir link &&
	test_when_finished "rm -f link" &&
	(
		cd link &&
		__git_find_repo_path &&
		echo "$__git_repo_path" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 21 - __git_find_repo_path - resulting path avoids symlinks

expecting success of 9902.22 '__git_find_repo_path - not a git repository': 
	(
		cd non-repo &&
		GIT_CEILING_DIRECTORIES="$ROOT" &&
		export GIT_CEILING_DIRECTORIES &&
		test_must_fail __git_find_repo_path &&
		printf "$__git_repo_path" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 22 - __git_find_repo_path - not a git repository

expecting success of 9902.23 '__gitdir - finds repo': 
	echo "$ROOT/.git" >expected &&
	(
		cd subdir/subsubdir &&
		__gitdir >"$actual"
	) &&
	test_cmp expected "$actual"

ok 23 - __gitdir - finds repo

expecting success of 9902.24 '__gitdir - returns error when cannot find repo': 
	(
		__git_dir="non-existing" &&
		test_must_fail __gitdir >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 24 - __gitdir - returns error when cannot find repo

expecting success of 9902.25 '__gitdir - repo as argument': 
	echo "otherrepo/.git" >expected &&
	(
		__gitdir "otherrepo" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 25 - __gitdir - repo as argument

expecting success of 9902.26 '__gitdir - remote as argument': 
	echo "remote" >expected &&
	(
		__gitdir "remote" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 26 - __gitdir - remote as argument

expecting success of 9902.27 '__git_dequote - plain unquoted word': 
	__git_dequote unquoted-word &&
	verbose test unquoted-word = "$dequoted_word"

ok 27 - __git_dequote - plain unquoted word

expecting success of 9902.28 '__git_dequote - backslash escaped': 
	__git_dequote "b\a\c\k\\'\\\\\\\"s\l\a\s\h\es" &&
	verbose test "back'\\\"slashes" = "$dequoted_word"

ok 28 - __git_dequote - backslash escaped

expecting success of 9902.29 '__git_dequote - single quoted': 
	__git_dequote "sin'gle\\' '\"quo'ted" &&
	verbose test 'single\ "quoted' = "$dequoted_word"

ok 29 - __git_dequote - single quoted

expecting success of 9902.30 '__git_dequote - double quoted': 
	__git_dequote 'dou"ble\\" "\"\quot"ed' &&
	verbose test 'double\ "\quoted' = "$dequoted_word"

ok 30 - __git_dequote - double quoted

expecting success of 9902.31 '__git_dequote - open single quote': 
	__git_dequote "'open single quote" &&
	verbose test "open single quote" = "$dequoted_word"

ok 31 - __git_dequote - open single quote

expecting success of 9902.32 '__git_dequote - open double quote': 
	__git_dequote "\"open double quote" &&
	verbose test "open double quote" = "$dequoted_word"

ok 32 - __git_dequote - open double quote

expecting success of 9902.33 '__gitcomp_direct - puts everything into COMPREPLY as-is': 
	sed -e "s/Z$//g" >expected <<-EOF &&
	with-trailing-space Z
	without-trailing-spaceZ
	--option Z
	--option=Z
	$invalid_variable_name Z
	EOF
	(
		cur=should_be_ignored &&
		__gitcomp_direct "$(cat expected)" &&
		print_comp
	) &&
	test_cmp expected out

ok 33 - __gitcomp_direct - puts everything into COMPREPLY as-is

expecting success of 9902.34 '__gitcomp - trailing space - options': 
	test_gitcomp "--re" "--dry-run --reuse-message= --reedit-message=
		--reset-author" <<-EOF
	--reuse-message=Z
	--reedit-message=Z
	--reset-author Z
	EOF

ok 34 - __gitcomp - trailing space - options

expecting success of 9902.35 '__gitcomp - trailing space - config keys': 
	test_gitcomp "br" "branch. branch.autosetupmerge
		branch.autosetuprebase browser." <<-\EOF
	branch.Z
	branch.autosetupmerge Z
	branch.autosetuprebase Z
	browser.Z
	EOF

ok 35 - __gitcomp - trailing space - config keys

expecting success of 9902.36 '__gitcomp - option parameter': 
	test_gitcomp "--strategy=re" "octopus ours recursive resolve subtree" \
		"" "re" <<-\EOF
	recursive Z
	resolve Z
	EOF

ok 36 - __gitcomp - option parameter

expecting success of 9902.37 '__gitcomp - prefix': 
	test_gitcomp "branch.me" "remote merge mergeoptions rebase" \
		"branch.maint." "me" <<-\EOF
	branch.maint.merge Z
	branch.maint.mergeoptions Z
	EOF

ok 37 - __gitcomp - prefix

expecting success of 9902.38 '__gitcomp - suffix': 
	test_gitcomp "branch.me" "master maint next seen" "branch." \
		"ma" "." <<-\EOF
	branch.master.Z
	branch.maint.Z
	EOF

ok 38 - __gitcomp - suffix

expecting success of 9902.39 '__gitcomp - ignore optional negative options': 
	test_gitcomp "--" "--abc --def --no-one -- --no-two" <<-\EOF
	--abc Z
	--def Z
	--no-one Z
	--no-... Z
	EOF

ok 39 - __gitcomp - ignore optional negative options

expecting success of 9902.40 '__gitcomp - ignore/narrow optional negative options': 
	test_gitcomp "--a" "--abc --abcdef --no-one -- --no-two" <<-\EOF
	--abc Z
	--abcdef Z
	EOF

ok 40 - __gitcomp - ignore/narrow optional negative options

expecting success of 9902.41 '__gitcomp - ignore/narrow optional negative options': 
	test_gitcomp "--n" "--abc --def --no-one -- --no-two" <<-\EOF
	--no-one Z
	--no-... Z
	EOF

ok 41 - __gitcomp - ignore/narrow optional negative options

expecting success of 9902.42 '__gitcomp - expand all negative options': 
	test_gitcomp "--no-" "--abc --def --no-one -- --no-two" <<-\EOF
	--no-one Z
	--no-two Z
	EOF

ok 42 - __gitcomp - expand all negative options

expecting success of 9902.43 '__gitcomp - expand/narrow all negative options': 
	test_gitcomp "--no-o" "--abc --def --no-one -- --no-two" <<-\EOF
	--no-one Z
	EOF

ok 43 - __gitcomp - expand/narrow all negative options

expecting success of 9902.44 '__gitcomp - equal skip': 
	test_gitcomp "--option=" "--option=" <<-\EOF &&

	EOF
	test_gitcomp "option=" "option=" <<-\EOF

	EOF

ok 44 - __gitcomp - equal skip

expecting success of 9902.45 '__gitcomp - doesnt fail because of invalid variable name': 
	__gitcomp "$invalid_variable_name"

ok 45 - __gitcomp - doesnt fail because of invalid variable name

expecting success of 9902.46 '__gitcomp_nl - trailing space': 
	test_gitcomp_nl "m" "$refs" <<-EOF
	main Z
	maint Z
	EOF

ok 46 - __gitcomp_nl - trailing space

expecting success of 9902.47 '__gitcomp_nl - prefix': 
	test_gitcomp_nl "--fixup=m" "$refs" "--fixup=" "m" <<-EOF
	--fixup=main Z
	--fixup=maint Z
	EOF

ok 47 - __gitcomp_nl - prefix

expecting success of 9902.48 '__gitcomp_nl - suffix': 
	test_gitcomp_nl "branch.ma" "$refs" "branch." "ma" "." <<-\EOF
	branch.main.Z
	branch.maint.Z
	EOF

ok 48 - __gitcomp_nl - suffix

expecting success of 9902.49 '__gitcomp_nl - no suffix': 
	test_gitcomp_nl "ma" "$refs" "" "ma" "" <<-\EOF
	mainZ
	maintZ
	EOF

ok 49 - __gitcomp_nl - no suffix

expecting success of 9902.50 '__gitcomp_nl - doesnt fail because of invalid variable name': 
	__gitcomp_nl "$invalid_variable_name"

ok 50 - __gitcomp_nl - doesnt fail because of invalid variable name

expecting success of 9902.51 '__git_remotes - list remotes from $GIT_DIR/remotes and from config file': 
	cat >expect <<-EOF &&
	remote_from_file_1
	remote_from_file_2
	remote_in_config_1
	remote_in_config_2
	EOF
	test_when_finished "rm -rf .git/remotes" &&
	mkdir -p .git/remotes &&
	>.git/remotes/remote_from_file_1 &&
	>.git/remotes/remote_from_file_2 &&
	test_when_finished "git remote remove remote_in_config_1" &&
	git remote add remote_in_config_1 git://remote_1 &&
	test_when_finished "git remote remove remote_in_config_2" &&
	git remote add remote_in_config_2 git://remote_2 &&
	(
		__git_remotes >actual
	) &&
	test_cmp expect actual

ok 51 - __git_remotes - list remotes from $GIT_DIR/remotes and from config file

expecting success of 9902.52 '__git_is_configured_remote': 
	test_when_finished "git remote remove remote_1" &&
	git remote add remote_1 git://remote_1 &&
	test_when_finished "git remote remove remote_2" &&
	git remote add remote_2 git://remote_2 &&
	(
		verbose __git_is_configured_remote remote_2 &&
		test_must_fail __git_is_configured_remote non-existent
	)

ok 52 - __git_is_configured_remote

expecting success of 9902.53 'setup for ref completion': 
	git commit --allow-empty -m initial &&
	git branch -M main &&
	git branch matching-branch &&
	git tag matching-tag &&
	(
		cd otherrepo &&
		git commit --allow-empty -m initial &&
		git branch -m main main-in-other &&
		git branch branch-in-other &&
		git tag tag-in-other
	) &&
	git remote add other "$ROOT/otherrepo/.git" &&
	git fetch --no-tags other &&
	rm -f .git/FETCH_HEAD &&
	git init thirdrepo

[master (root-commit) 8b2b4f6] initial
 Author: A U Thor <author@example.com>
[main (root-commit) 8b2b4f6] initial
 Author: A U Thor <author@example.com>
From /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/otherrepo/
 * [new branch]      branch-in-other -> other/branch-in-other
 * [new branch]      main-in-other   -> other/main-in-other
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/thirdrepo/.git/
ok 53 - setup for ref completion

expecting success of 9902.54 '__git_refs - simple': 
	cat >expected <<-EOF &&
	HEAD
	main
	matching-branch
	other/branch-in-other
	other/main-in-other
	matching-tag
	EOF
	(
		cur= &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 54 - __git_refs - simple

expecting success of 9902.55 '__git_refs - full refs': 
	cat >expected <<-EOF &&
	refs/heads/main
	refs/heads/matching-branch
	refs/remotes/other/branch-in-other
	refs/remotes/other/main-in-other
	refs/tags/matching-tag
	EOF
	(
		cur=refs/heads/ &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 55 - __git_refs - full refs

expecting success of 9902.56 '__git_refs - repo given on the command line': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	tag-in-other
	EOF
	(
		__git_dir="$ROOT/otherrepo/.git" &&
		cur= &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 56 - __git_refs - repo given on the command line

expecting success of 9902.57 '__git_refs - remote on local file system': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	tag-in-other
	EOF
	(
		cur= &&
		__git_refs otherrepo >"$actual"
	) &&
	test_cmp expected "$actual"

ok 57 - __git_refs - remote on local file system

expecting success of 9902.58 '__git_refs - remote on local file system - full refs': 
	cat >expected <<-EOF &&
	refs/heads/branch-in-other
	refs/heads/main-in-other
	refs/tags/tag-in-other
	EOF
	(
		cur=refs/ &&
		__git_refs otherrepo >"$actual"
	) &&
	test_cmp expected "$actual"

ok 58 - __git_refs - remote on local file system - full refs

expecting success of 9902.59 '__git_refs - configured remote': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	EOF
	(
		cur= &&
		__git_refs other >"$actual"
	) &&
	test_cmp expected "$actual"

ok 59 - __git_refs - configured remote

expecting success of 9902.60 '__git_refs - configured remote - full refs': 
	cat >expected <<-EOF &&
	HEAD
	refs/heads/branch-in-other
	refs/heads/main-in-other
	refs/tags/tag-in-other
	EOF
	(
		cur=refs/ &&
		__git_refs other >"$actual"
	) &&
	test_cmp expected "$actual"

ok 60 - __git_refs - configured remote - full refs

expecting success of 9902.61 '__git_refs - configured remote - repo given on the command line': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	EOF
	(
		cd thirdrepo &&
		__git_dir="$ROOT/.git" &&
		cur= &&
		__git_refs other >"$actual"
	) &&
	test_cmp expected "$actual"

ok 61 - __git_refs - configured remote - repo given on the command line

expecting success of 9902.62 '__git_refs - configured remote - full refs - repo given on the command line': 
	cat >expected <<-EOF &&
	HEAD
	refs/heads/branch-in-other
	refs/heads/main-in-other
	refs/tags/tag-in-other
	EOF
	(
		cd thirdrepo &&
		__git_dir="$ROOT/.git" &&
		cur=refs/ &&
		__git_refs other >"$actual"
	) &&
	test_cmp expected "$actual"

ok 62 - __git_refs - configured remote - full refs - repo given on the command line

expecting success of 9902.63 '__git_refs - configured remote - remote name matches a directory': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	EOF
	mkdir other &&
	test_when_finished "rm -rf other" &&
	(
		cur= &&
		__git_refs other >"$actual"
	) &&
	test_cmp expected "$actual"

ok 63 - __git_refs - configured remote - remote name matches a directory

expecting success of 9902.64 '__git_refs - URL remote': 
	cat >expected <<-EOF &&
	HEAD
	branch-in-other
	main-in-other
	tag-in-other
	EOF
	(
		cur= &&
		__git_refs "file://$ROOT/otherrepo/.git" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 64 - __git_refs - URL remote

expecting success of 9902.65 '__git_refs - URL remote - full refs': 
	cat >expected <<-EOF &&
	HEAD
	refs/heads/branch-in-other
	refs/heads/main-in-other
	refs/tags/tag-in-other
	EOF
	(
		cur=refs/ &&
		__git_refs "file://$ROOT/otherrepo/.git" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 65 - __git_refs - URL remote - full refs

expecting success of 9902.66 '__git_refs - non-existing remote': 
	(
		cur= &&
		__git_refs non-existing >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 66 - __git_refs - non-existing remote

expecting success of 9902.67 '__git_refs - non-existing remote - full refs': 
	(
		cur=refs/ &&
		__git_refs non-existing >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 67 - __git_refs - non-existing remote - full refs

expecting success of 9902.68 '__git_refs - non-existing URL remote': 
	(
		cur= &&
		__git_refs "file://$ROOT/non-existing" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 68 - __git_refs - non-existing URL remote

expecting success of 9902.69 '__git_refs - non-existing URL remote - full refs': 
	(
		cur=refs/ &&
		__git_refs "file://$ROOT/non-existing" >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 69 - __git_refs - non-existing URL remote - full refs

expecting success of 9902.70 '__git_refs - not in a git repository': 
	(
		GIT_CEILING_DIRECTORIES="$ROOT" &&
		export GIT_CEILING_DIRECTORIES &&
		cd subdir &&
		cur= &&
		__git_refs >"$actual"
	) &&
	test_must_be_empty "$actual"

ok 70 - __git_refs - not in a git repository

expecting success of 9902.71 '__git_refs - unique remote branches for git checkout DWIMery': 
	cat >expected <<-EOF &&
	HEAD
	main
	matching-branch
	other/ambiguous
	other/branch-in-other
	other/main-in-other
	remote/ambiguous
	remote/branch-in-remote
	matching-tag
	branch-in-other
	branch-in-remote
	main-in-other
	EOF
	for remote_ref in refs/remotes/other/ambiguous \
		refs/remotes/remote/ambiguous \
		refs/remotes/remote/branch-in-remote
	do
		git update-ref $remote_ref main &&
		test_when_finished "git update-ref -d $remote_ref" || return 1
	done &&
	(
		cur= &&
		__git_refs "" 1 >"$actual"
	) &&
	test_cmp expected "$actual"

ok 71 - __git_refs - unique remote branches for git checkout DWIMery

expecting success of 9902.72 '__git_refs - after --opt=': 
	cat >expected <<-EOF &&
	HEAD
	main
	matching-branch
	other/branch-in-other
	other/main-in-other
	matching-tag
	EOF
	(
		cur="--opt=" &&
		__git_refs "" "" "" "" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 72 - __git_refs - after --opt=

expecting success of 9902.73 '__git_refs - after --opt= - full refs': 
	cat >expected <<-EOF &&
	refs/heads/main
	refs/heads/matching-branch
	refs/remotes/other/branch-in-other
	refs/remotes/other/main-in-other
	refs/tags/matching-tag
	EOF
	(
		cur="--opt=refs/" &&
		__git_refs "" "" "" refs/ >"$actual"
	) &&
	test_cmp expected "$actual"

ok 73 - __git_refs - after --opt= - full refs

expecting success of 9902.74 '__git refs - excluding refs': 
	cat >expected <<-EOF &&
	^HEAD
	^main
	^matching-branch
	^other/branch-in-other
	^other/main-in-other
	^matching-tag
	EOF
	(
		cur=^ &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 74 - __git refs - excluding refs

expecting success of 9902.75 '__git refs - excluding full refs': 
	cat >expected <<-EOF &&
	^refs/heads/main
	^refs/heads/matching-branch
	^refs/remotes/other/branch-in-other
	^refs/remotes/other/main-in-other
	^refs/tags/matching-tag
	EOF
	(
		cur=^refs/ &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 75 - __git refs - excluding full refs

expecting success of 9902.76 'setup for filtering matching refs': 
	git branch matching/branch &&
	git tag matching/tag &&
	git -C otherrepo branch matching/branch-in-other &&
	git fetch --no-tags other &&
	rm -f .git/FETCH_HEAD

From /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/otherrepo/
 * [new branch]      matching/branch-in-other -> other/matching/branch-in-other
ok 76 - setup for filtering matching refs

expecting success of 9902.77 '__git_refs - do not filter refs unless told so': 
	cat >expected <<-EOF &&
	HEAD
	main
	matching-branch
	matching/branch
	other/branch-in-other
	other/main-in-other
	other/matching/branch-in-other
	matching-tag
	matching/tag
	EOF
	(
		cur=main &&
		__git_refs >"$actual"
	) &&
	test_cmp expected "$actual"

ok 77 - __git_refs - do not filter refs unless told so

expecting success of 9902.78 '__git_refs - only matching refs': 
	cat >expected <<-EOF &&
	matching-branch
	matching/branch
	matching-tag
	matching/tag
	EOF
	(
		cur=mat &&
		__git_refs "" "" "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 78 - __git_refs - only matching refs

expecting success of 9902.79 '__git_refs - only matching refs - full refs': 
	cat >expected <<-EOF &&
	refs/heads/matching-branch
	refs/heads/matching/branch
	EOF
	(
		cur=refs/heads/mat &&
		__git_refs "" "" "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 79 - __git_refs - only matching refs - full refs

expecting success of 9902.80 '__git_refs - only matching refs - remote on local file system': 
	cat >expected <<-EOF &&
	main-in-other
	matching/branch-in-other
	EOF
	(
		cur=ma &&
		__git_refs otherrepo "" "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 80 - __git_refs - only matching refs - remote on local file system

expecting success of 9902.81 '__git_refs - only matching refs - configured remote': 
	cat >expected <<-EOF &&
	main-in-other
	matching/branch-in-other
	EOF
	(
		cur=ma &&
		__git_refs other "" "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 81 - __git_refs - only matching refs - configured remote

expecting success of 9902.82 '__git_refs - only matching refs - remote - full refs': 
	cat >expected <<-EOF &&
	refs/heads/main-in-other
	refs/heads/matching/branch-in-other
	EOF
	(
		cur=refs/heads/ma &&
		__git_refs other "" "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 82 - __git_refs - only matching refs - remote - full refs

expecting success of 9902.83 '__git_refs - only matching refs - checkout DWIMery': 
	cat >expected <<-EOF &&
	matching-branch
	matching/branch
	matching-tag
	matching/tag
	matching/branch-in-other
	EOF
	for remote_ref in refs/remotes/other/ambiguous \
		refs/remotes/remote/ambiguous \
		refs/remotes/remote/branch-in-remote
	do
		git update-ref $remote_ref main &&
		test_when_finished "git update-ref -d $remote_ref" || return 1
	done &&
	(
		cur=mat &&
		__git_refs "" 1 "" "$cur" >"$actual"
	) &&
	test_cmp expected "$actual"

ok 83 - __git_refs - only matching refs - checkout DWIMery

expecting success of 9902.84 'teardown after filtering matching refs': 
	git branch -d matching/branch &&
	git tag -d matching/tag &&
	git update-ref -d refs/remotes/other/matching/branch-in-other &&
	git -C otherrepo branch -D matching/branch-in-other

Deleted branch matching/branch (was 8b2b4f6).
Deleted tag 'matching/tag' (was 8b2b4f6)
Deleted branch matching/branch-in-other (was 8b2b4f6).
ok 84 - teardown after filtering matching refs

expecting success of 9902.85 '__git_refs - for-each-ref format specifiers in prefix': 
	cat >expected <<-EOF &&
	evil-%%-%42-%(refname)..main
	EOF
	(
		cur="evil-%%-%42-%(refname)..mai" &&
		__git_refs "" "" "evil-%%-%42-%(refname).." mai >"$actual"
	) &&
	test_cmp expected "$actual"

ok 85 - __git_refs - for-each-ref format specifiers in prefix

expecting success of 9902.86 '__git_complete_refs - simple': 
	sed -e "s/Z$//" >expected <<-EOF &&
	HEAD Z
	main Z
	matching-branch Z
	other/branch-in-other Z
	other/main-in-other Z
	matching-tag Z
	EOF
	(
		cur= &&
		__git_complete_refs &&
		print_comp
	) &&
	test_cmp expected out

ok 86 - __git_complete_refs - simple

expecting success of 9902.87 '__git_complete_refs - matching': 
	sed -e "s/Z$//" >expected <<-EOF &&
	matching-branch Z
	matching-tag Z
	EOF
	(
		cur=mat &&
		__git_complete_refs &&
		print_comp
	) &&
	test_cmp expected out

ok 87 - __git_complete_refs - matching

expecting success of 9902.88 '__git_complete_refs - remote': 
	sed -e "s/Z$//" >expected <<-EOF &&
	HEAD Z
	branch-in-other Z
	main-in-other Z
	EOF
	(
		cur= &&
		__git_complete_refs --remote=other &&
		print_comp
	) &&
	test_cmp expected out

ok 88 - __git_complete_refs - remote

expecting success of 9902.89 '__git_complete_refs - track': 
	sed -e "s/Z$//" >expected <<-EOF &&
	HEAD Z
	main Z
	matching-branch Z
	other/branch-in-other Z
	other/main-in-other Z
	matching-tag Z
	branch-in-other Z
	main-in-other Z
	EOF
	(
		cur= &&
		__git_complete_refs --track &&
		print_comp
	) &&
	test_cmp expected out

ok 89 - __git_complete_refs - track

expecting success of 9902.90 '__git_complete_refs - current word': 
	sed -e "s/Z$//" >expected <<-EOF &&
	matching-branch Z
	matching-tag Z
	EOF
	(
		cur="--option=mat" &&
		__git_complete_refs --cur="${cur#*=}" &&
		print_comp
	) &&
	test_cmp expected out

ok 90 - __git_complete_refs - current word

expecting success of 9902.91 '__git_complete_refs - prefix': 
	sed -e "s/Z$//" >expected <<-EOF &&
	v1.0..matching-branch Z
	v1.0..matching-tag Z
	EOF
	(
		cur=v1.0..mat &&
		__git_complete_refs --pfx=v1.0.. --cur=mat &&
		print_comp
	) &&
	test_cmp expected out

ok 91 - __git_complete_refs - prefix

expecting success of 9902.92 '__git_complete_refs - suffix': 
	cat >expected <<-EOF &&
	HEAD.
	main.
	matching-branch.
	other/branch-in-other.
	other/main-in-other.
	matching-tag.
	EOF
	(
		cur= &&
		__git_complete_refs --sfx=. &&
		print_comp
	) &&
	test_cmp expected out

ok 92 - __git_complete_refs - suffix

expecting success of 9902.93 '__git_complete_fetch_refspecs - simple': 
	sed -e "s/Z$//" >expected <<-EOF &&
	HEAD:HEAD Z
	branch-in-other:branch-in-other Z
	main-in-other:main-in-other Z
	EOF
	(
		cur= &&
		__git_complete_fetch_refspecs other &&
		print_comp
	) &&
	test_cmp expected out

ok 93 - __git_complete_fetch_refspecs - simple

expecting success of 9902.94 '__git_complete_fetch_refspecs - matching': 
	sed -e "s/Z$//" >expected <<-EOF &&
	branch-in-other:branch-in-other Z
	EOF
	(
		cur=br &&
		__git_complete_fetch_refspecs other "" br &&
		print_comp
	) &&
	test_cmp expected out

ok 94 - __git_complete_fetch_refspecs - matching

expecting success of 9902.95 '__git_complete_fetch_refspecs - prefix': 
	sed -e "s/Z$//" >expected <<-EOF &&
	+HEAD:HEAD Z
	+branch-in-other:branch-in-other Z
	+main-in-other:main-in-other Z
	EOF
	(
		cur="+" &&
		__git_complete_fetch_refspecs other "+" ""  &&
		print_comp
	) &&
	test_cmp expected out

ok 95 - __git_complete_fetch_refspecs - prefix

expecting success of 9902.96 '__git_complete_fetch_refspecs - fully qualified': 
	sed -e "s/Z$//" >expected <<-EOF &&
	refs/heads/branch-in-other:refs/heads/branch-in-other Z
	refs/heads/main-in-other:refs/heads/main-in-other Z
	refs/tags/tag-in-other:refs/tags/tag-in-other Z
	EOF
	(
		cur=refs/ &&
		__git_complete_fetch_refspecs other "" refs/ &&
		print_comp
	) &&
	test_cmp expected out

ok 96 - __git_complete_fetch_refspecs - fully qualified

expecting success of 9902.97 '__git_complete_fetch_refspecs - fully qualified & prefix': 
	sed -e "s/Z$//" >expected <<-EOF &&
	+refs/heads/branch-in-other:refs/heads/branch-in-other Z
	+refs/heads/main-in-other:refs/heads/main-in-other Z
	+refs/tags/tag-in-other:refs/tags/tag-in-other Z
	EOF
	(
		cur=+refs/ &&
		__git_complete_fetch_refspecs other + refs/ &&
		print_comp
	) &&
	test_cmp expected out

ok 97 - __git_complete_fetch_refspecs - fully qualified & prefix

expecting success of 9902.98 'git switch - with no options, complete local branches and unique remote branch names for DWIM logic': 
	test_completion "git switch " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 98 - git switch - with no options, complete local branches and unique remote branch names for DWIM logic

expecting success of 9902.99 'git checkout - completes refs and unique remote branches for DWIM': 
	test_completion "git checkout " <<-\EOF
	HEAD Z
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 99 - git checkout - completes refs and unique remote branches for DWIM

expecting success of 9902.100 'git switch - with --no-guess, complete only local branches': 
	test_completion "git switch --no-guess " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 100 - git switch - with --no-guess, complete only local branches

expecting success of 9902.101 'git switch - with GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete only local branches': 
	GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git switch " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 101 - git switch - with GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete only local branches

expecting success of 9902.102 'git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete local branches and unique remote names for DWIM logic': 
	GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git switch --guess " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 102 - git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete local branches and unique remote names for DWIM logic

expecting success of 9902.103 'git switch - a later --guess overrides previous --no-guess, complete local and remote unique branches for DWIM': 
	test_completion "git switch --no-guess --guess " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 103 - git switch - a later --guess overrides previous --no-guess, complete local and remote unique branches for DWIM

expecting success of 9902.104 'git switch - a later --no-guess overrides previous --guess, complete only local branches': 
	test_completion "git switch --guess --no-guess " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 104 - git switch - a later --no-guess overrides previous --guess, complete only local branches

expecting success of 9902.105 'git checkout - with GIT_COMPLETION_NO_GUESS=1 only completes refs': 
	GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git checkout " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 105 - git checkout - with GIT_COMPLETION_NO_GUESS=1 only completes refs

expecting success of 9902.106 'git checkout - --guess overrides GIT_COMPLETION_NO_GUESS=1, complete refs and unique remote branches for DWIM': 
	GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git checkout --guess " <<-\EOF
	HEAD Z
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 106 - git checkout - --guess overrides GIT_COMPLETION_NO_GUESS=1, complete refs and unique remote branches for DWIM

expecting success of 9902.107 'git checkout - with --no-guess, only completes refs': 
	test_completion "git checkout --no-guess " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 107 - git checkout - with --no-guess, only completes refs

expecting success of 9902.108 'git checkout - a later --guess overrides previous --no-guess, complete refs and unique remote branches for DWIM': 
	test_completion "git checkout --no-guess --guess " <<-\EOF
	HEAD Z
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 108 - git checkout - a later --guess overrides previous --no-guess, complete refs and unique remote branches for DWIM

expecting success of 9902.109 'git checkout - a later --no-guess overrides previous --guess, complete only refs': 
	test_completion "git checkout --guess --no-guess " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 109 - git checkout - a later --no-guess overrides previous --guess, complete only refs

expecting success of 9902.110 'git checkout - with checkout.guess = false, only completes refs': 
	test_config checkout.guess false &&
	test_completion "git checkout " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 110 - git checkout - with checkout.guess = false, only completes refs

expecting success of 9902.111 'git checkout - with checkout.guess = true, completes refs and unique remote branches for DWIM': 
	test_config checkout.guess true &&
	test_completion "git checkout " <<-\EOF
	HEAD Z
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 111 - git checkout - with checkout.guess = true, completes refs and unique remote branches for DWIM

expecting success of 9902.112 'git checkout - a later --guess overrides previous checkout.guess = false, complete refs and unique remote branches for DWIM': 
	test_config checkout.guess false &&
	test_completion "git checkout --guess " <<-\EOF
	HEAD Z
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 112 - git checkout - a later --guess overrides previous checkout.guess = false, complete refs and unique remote branches for DWIM

expecting success of 9902.113 'git checkout - a later --no-guess overrides previous checkout.guess = true, complete only refs': 
	test_config checkout.guess true &&
	test_completion "git checkout --no-guess " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 113 - git checkout - a later --no-guess overrides previous checkout.guess = true, complete only refs

expecting success of 9902.114 'git switch - with --detach, complete all references': 
	test_completion "git switch --detach " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 114 - git switch - with --detach, complete all references

expecting success of 9902.115 'git checkout - with --detach, complete only references': 
	test_completion "git checkout --detach " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 115 - git checkout - with --detach, complete only references

expecting success of 9902.116 'setup sparse-checkout tests': 
	# set up sparse-checkout repo
	git init sparse-checkout &&
	(
		cd sparse-checkout &&
		mkdir -p folder1/0/1 folder2/0 folder3 &&
		touch folder1/0/1/t.txt &&
		touch folder2/0/t.txt &&
		touch folder3/t.txt &&
		git add . &&
		git commit -am "Initial commit"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/sparse-checkout/.git/
[master (root-commit) 90153b3] Initial commit
 Author: A U Thor <author@example.com>
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 folder1/0/1/t.txt
 create mode 100644 folder2/0/t.txt
 create mode 100644 folder3/t.txt
ok 116 - setup sparse-checkout tests

expecting success of 9902.117 'sparse-checkout completes subcommands': 
	test_completion "git sparse-checkout " <<-\EOF
	list Z
	init Z
	set Z
	add Z
	reapply Z
	disable Z
	EOF

ok 117 - sparse-checkout completes subcommands

expecting success of 9902.118 'cone mode sparse-checkout completes directory names': 
	# initialize sparse-checkout definitions
	git -C sparse-checkout sparse-checkout set --cone folder1/0 folder3 &&

	# test tab completion
	(
		cd sparse-checkout &&
		test_completion "git sparse-checkout set f" <<-\EOF
		folder1/
		folder2/
		folder3/
		EOF
	) &&

	(
		cd sparse-checkout &&
		test_completion "git sparse-checkout set folder1/" <<-\EOF
		folder1/0/
		EOF
	) &&

	(
		cd sparse-checkout &&
		test_completion "git sparse-checkout set folder1/0/" <<-\EOF
		folder1/0/1/
		EOF
	) &&

	(
		cd sparse-checkout/folder1 &&
		test_completion "git sparse-checkout add 0" <<-\EOF
		0/
		EOF
	)

ok 118 - cone mode sparse-checkout completes directory names

expecting success of 9902.119 'cone mode sparse-checkout completes directory names with spaces and accents': 
	# reset sparse-checkout
	git -C sparse-checkout sparse-checkout disable &&
	(
		cd sparse-checkout &&
		mkdir "directory with spaces" &&
		mkdir "directory-with-áccent" &&
		>"directory with spaces/randomfile" &&
		>"directory-with-áccent/randomfile" &&
		git add . &&
		git commit -m "Add directory with spaces and directory with accent" &&
		git sparse-checkout set --cone "directory with spaces" \
			"directory-with-áccent" &&
		test_completion "git sparse-checkout add dir" <<-\EOF &&
		directory with spaces/
		directory-with-áccent/
		EOF
		rm -rf "directory with spaces" &&
		rm -rf "directory-with-áccent" &&
		git add . &&
		git commit -m "Remove directory with spaces and directory with accent"
	)

[master 5b5a765] Add directory with spaces and directory with accent
 Author: A U Thor <author@example.com>
 8 files changed, 6 insertions(+)
 create mode 100644 directory with spaces/randomfile
 create mode 100644 "directory-with-\303\241ccent/randomfile"
 create mode 100644 expected
 create mode 100644 folder1/expected
 create mode 100644 folder1/out
 create mode 100644 folder1/out_sorted
 create mode 100644 out
 create mode 100644 out_sorted
[master bc8bf01] Remove directory with spaces and directory with accent
 Author: A U Thor <author@example.com>
 5 files changed, 6 insertions(+), 3 deletions(-)
 delete mode 100644 directory with spaces/randomfile
 delete mode 100644 "directory-with-\303\241ccent/randomfile"
ok 119 - cone mode sparse-checkout completes directory names with spaces and accents

checking prerequisite: FUNNYNAMES

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-FUNNYNAMES" &&
	test_have_prereq !MINGW &&
	touch -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null &&
	rm -- \
		"FUNNYNAMES tab	embedded" \
		"FUNNYNAMES \"quote embedded\"" \
		"FUNNYNAMES newline
embedded" 2>/dev/null

)
prerequisite FUNNYNAMES ok
expecting success of 9902.120 'cone mode sparse-checkout completes directory names with tabs': 
	# reset sparse-checkout
	git -C sparse-checkout sparse-checkout disable &&
	(
		cd sparse-checkout &&
		mkdir "$(printf "directory\twith\ttabs")" &&
		>"$(printf "directory\twith\ttabs")/randomfile" &&
		git add . &&
		git commit -m "Add directory with tabs" &&
		git sparse-checkout set --cone \
			"$(printf "directory\twith\ttabs")" &&
		test_completion "git sparse-checkout add dir" <<-\EOF &&
		directory	with	tabs/
		EOF
		rm -rf "$(printf "directory\twith\ttabs")" &&
		git add . &&
		git commit -m "Remove directory with tabs"
	)

[master b56d8c6] Add directory with tabs
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "directory\twith\ttabs/randomfile"
[master 3025a92] Remove directory with tabs
 Author: A U Thor <author@example.com>
 4 files changed, 3 insertions(+), 6 deletions(-)
 delete mode 100644 "directory\twith\ttabs/randomfile"
ok 120 - cone mode sparse-checkout completes directory names with tabs

expecting success of 9902.121 'cone mode sparse-checkout completes directory names with backslashes': 
	# reset sparse-checkout
	git -C sparse-checkout sparse-checkout disable &&
	(
		cd sparse-checkout &&
		mkdir "directory\with\backslashes" &&
		>"directory\with\backslashes/randomfile" &&
		git add . &&
		git commit -m "Add directory with backslashes" &&
		git sparse-checkout set --cone \
			"directory\with\backslashes" &&
		test_completion "git sparse-checkout add dir" <<-\EOF &&
		directory\with\backslashes/
		EOF
		rm -rf "directory\with\backslashes" &&
		git add . &&
		git commit -m "Remove directory with backslashes"
	)

[master deaa6a4] Add directory with backslashes
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "directory\\with\\backslashes/randomfile"
[master e830e95] Remove directory with backslashes
 Author: A U Thor <author@example.com>
 4 files changed, 3 insertions(+), 3 deletions(-)
 delete mode 100644 "directory\\with\\backslashes/randomfile"
ok 121 - cone mode sparse-checkout completes directory names with backslashes

expecting success of 9902.122 'non-cone mode sparse-checkout uses bash completion': 
	# reset sparse-checkout repo to non-cone mode
	git -C sparse-checkout sparse-checkout disable &&
	git -C sparse-checkout sparse-checkout set --no-cone &&

	(
		cd sparse-checkout &&
		# expected to be empty since we have not configured
		# custom completion for non-cone mode
		test_completion "git sparse-checkout set f" <<-\EOF

		EOF
	)

ok 122 - non-cone mode sparse-checkout uses bash completion

expecting success of 9902.123 'git sparse-checkout set --cone completes directory names': 
	git -C sparse-checkout sparse-checkout disable &&

	(
		cd sparse-checkout &&
		test_completion "git sparse-checkout set --cone f" <<-\EOF
		folder1/
		folder2/
		folder3/
		EOF
	)

ok 123 - git sparse-checkout set --cone completes directory names

expecting success of 9902.124 'git switch - with -d, complete all references': 
	test_completion "git switch -d " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 124 - git switch - with -d, complete all references

expecting success of 9902.125 'git checkout - with -d, complete only references': 
	test_completion "git checkout -d " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 125 - git checkout - with -d, complete only references

expecting success of 9902.126 'git switch - with --track, complete only remote branches': 
	test_completion "git switch --track " <<-\EOF
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 126 - git switch - with --track, complete only remote branches

expecting success of 9902.127 'git checkout - with --track, complete only remote branches': 
	test_completion "git checkout --track " <<-\EOF
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 127 - git checkout - with --track, complete only remote branches

expecting success of 9902.128 'git switch - with --no-track, complete only local branch names': 
	test_completion "git switch --no-track " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 128 - git switch - with --no-track, complete only local branch names

expecting success of 9902.129 'git checkout - with --no-track, complete only local references': 
	test_completion "git checkout --no-track " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 129 - git checkout - with --no-track, complete only local references

expecting success of 9902.130 'git switch - with -c, complete all references': 
	test_completion "git switch -c new-branch " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 130 - git switch - with -c, complete all references

expecting success of 9902.131 'git switch - with -C, complete all references': 
	test_completion "git switch -C new-branch " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 131 - git switch - with -C, complete all references

expecting success of 9902.132 'git switch - with -c and --track, complete all references': 
	test_completion "git switch -c new-branch --track " <<-EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 132 - git switch - with -c and --track, complete all references

expecting success of 9902.133 'git switch - with -C and --track, complete all references': 
	test_completion "git switch -C new-branch --track " <<-EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 133 - git switch - with -C and --track, complete all references

expecting success of 9902.134 'git switch - with -c and --no-track, complete all references': 
	test_completion "git switch -c new-branch --no-track " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 134 - git switch - with -c and --no-track, complete all references

expecting success of 9902.135 'git switch - with -C and --no-track, complete all references': 
	test_completion "git switch -C new-branch --no-track " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 135 - git switch - with -C and --no-track, complete all references

expecting success of 9902.136 'git checkout - with -b, complete all references': 
	test_completion "git checkout -b new-branch " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 136 - git checkout - with -b, complete all references

expecting success of 9902.137 'git checkout - with -B, complete all references': 
	test_completion "git checkout -B new-branch " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 137 - git checkout - with -B, complete all references

expecting success of 9902.138 'git checkout - with -b and --track, complete all references': 
	test_completion "git checkout -b new-branch --track " <<-EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 138 - git checkout - with -b and --track, complete all references

expecting success of 9902.139 'git checkout - with -B and --track, complete all references': 
	test_completion "git checkout -B new-branch --track " <<-EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 139 - git checkout - with -B and --track, complete all references

expecting success of 9902.140 'git checkout - with -b and --no-track, complete all references': 
	test_completion "git checkout -b new-branch --no-track " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 140 - git checkout - with -b and --no-track, complete all references

expecting success of 9902.141 'git checkout - with -B and --no-track, complete all references': 
	test_completion "git checkout -B new-branch --no-track " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 141 - git checkout - with -B and --no-track, complete all references

expecting success of 9902.142 'git switch - for -c, complete local branches and unique remote branches': 
	test_completion "git switch -c " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 142 - git switch - for -c, complete local branches and unique remote branches

expecting success of 9902.143 'git switch - for -C, complete local branches and unique remote branches': 
	test_completion "git switch -C " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 143 - git switch - for -C, complete local branches and unique remote branches

expecting success of 9902.144 'git switch - for -c with --no-guess, complete local branches only': 
	test_completion "git switch --no-guess -c " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 144 - git switch - for -c with --no-guess, complete local branches only

expecting success of 9902.145 'git switch - for -C with --no-guess, complete local branches only': 
	test_completion "git switch --no-guess -C " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 145 - git switch - for -C with --no-guess, complete local branches only

expecting success of 9902.146 'git switch - for -c with --no-track, complete local branches only': 
	test_completion "git switch --no-track -c " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 146 - git switch - for -c with --no-track, complete local branches only

expecting success of 9902.147 'git switch - for -C with --no-track, complete local branches only': 
	test_completion "git switch --no-track -C " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 147 - git switch - for -C with --no-track, complete local branches only

expecting success of 9902.148 'git checkout - for -b, complete local branches and unique remote branches': 
	test_completion "git checkout -b " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 148 - git checkout - for -b, complete local branches and unique remote branches

expecting success of 9902.149 'git checkout - for -B, complete local branches and unique remote branches': 
	test_completion "git checkout -B " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 149 - git checkout - for -B, complete local branches and unique remote branches

expecting success of 9902.150 'git checkout - for -b with --no-guess, complete local branches only': 
	test_completion "git checkout --no-guess -b " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 150 - git checkout - for -b with --no-guess, complete local branches only

expecting success of 9902.151 'git checkout - for -B with --no-guess, complete local branches only': 
	test_completion "git checkout --no-guess -B " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 151 - git checkout - for -B with --no-guess, complete local branches only

expecting success of 9902.152 'git checkout - for -b with --no-track, complete local branches only': 
	test_completion "git checkout --no-track -b " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 152 - git checkout - for -b with --no-track, complete local branches only

expecting success of 9902.153 'git checkout - for -B with --no-track, complete local branches only': 
	test_completion "git checkout --no-track -B " <<-\EOF
	main Z
	matching-branch Z
	EOF

ok 153 - git checkout - for -B with --no-track, complete local branches only

expecting success of 9902.154 'git switch - with --orphan completes local branch names and unique remote branch names': 
	test_completion "git switch --orphan " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 154 - git switch - with --orphan completes local branch names and unique remote branch names

expecting success of 9902.155 'git switch - --orphan with branch already provided completes nothing else': 
	test_completion "git switch --orphan main " <<-\EOF

	EOF

ok 155 - git switch - --orphan with branch already provided completes nothing else

expecting success of 9902.156 'git checkout - with --orphan completes local branch names and unique remote branch names': 
	test_completion "git checkout --orphan " <<-\EOF
	branch-in-other Z
	main Z
	main-in-other Z
	matching-branch Z
	EOF

ok 156 - git checkout - with --orphan completes local branch names and unique remote branch names

expecting success of 9902.157 'git checkout - --orphan with branch already provided completes local refs for a start-point': 
	test_completion "git checkout --orphan main " <<-\EOF
	HEAD Z
	main Z
	matching-branch Z
	matching-tag Z
	other/branch-in-other Z
	other/main-in-other Z
	EOF

ok 157 - git checkout - --orphan with branch already provided completes local refs for a start-point

expecting success of 9902.158 'teardown after ref completion': 
	git branch -d matching-branch &&
	git tag -d matching-tag &&
	git remote remove other

Deleted branch matching-branch (was 8b2b4f6).
Deleted tag 'matching-tag' (was 8b2b4f6)
ok 158 - teardown after ref completion

expecting success of 9902.159 'setup for path completion tests': 
	mkdir simple-dir \
	      "spaces in dir" \
	      árvíztűrő &&
	touch simple-dir/simple-file \
	      "spaces in dir/spaces in file" \
	      "árvíztűrő/Сайн яваарай" &&
	if test_have_prereq !MINGW &&
	   mkdir BS\\dir \
		 separatorsindir &&
	   touch BS\\dir/DQ\"file \
		 separatorsindir/sepinfile
	then
		test_set_prereq FUNNIERNAMES
	else
		rm -rf BS\\dir separatorsindir
	fi

ok 159 - setup for path completion tests

expecting success of 9902.160 '__git_complete_index_file - simple': 
	test_path_completion simple simple-dir &&  # Bash is supposed to
						   # add the trailing /.
	test_path_completion simple-dir/simple simple-dir/simple-file

ok 160 - __git_complete_index_file - simple

expecting success of 9902.161 '__git_complete_index_file - escaped characters on cmdline': 
	test_path_completion spac "spaces in dir" &&  # Bash will turn this
						      # into "spaces\ in\ dir"
	test_path_completion "spaces\\ i" \
			     "spaces in dir" &&
	test_path_completion "spaces\\ in\\ dir/s" \
			     "spaces in dir/spaces in file" &&
	test_path_completion "spaces\\ in\\ dir/spaces\\ i" \
			     "spaces in dir/spaces in file"

ok 161 - __git_complete_index_file - escaped characters on cmdline

expecting success of 9902.162 '__git_complete_index_file - quoted characters on cmdline': 
	# Testing with an opening but without a corresponding closing
	# double quote is important.
	test_path_completion \"spac "spaces in dir" &&
	test_path_completion "\"spaces i" \
			     "spaces in dir" &&
	test_path_completion "\"spaces in dir/s" \
			     "spaces in dir/spaces in file" &&
	test_path_completion "\"spaces in dir/spaces i" \
			     "spaces in dir/spaces in file"

ok 162 - __git_complete_index_file - quoted characters on cmdline

expecting success of 9902.163 '__git_complete_index_file - UTF-8 in ls-files output': 
	test_path_completion á árvíztűrő &&
	test_path_completion árvíztűrő/С "árvíztűrő/Сайн яваарай"

ok 163 - __git_complete_index_file - UTF-8 in ls-files output

expecting success of 9902.164 '__git_complete_index_file - C-style escapes in ls-files output': 
	test_path_completion BS \
			     BS\\dir &&
	test_path_completion BS\\\\d \
			     BS\\dir &&
	test_path_completion BS\\\\dir/DQ \
			     BS\\dir/DQ\"file &&
	test_path_completion BS\\\\dir/DQ\\\"f \
			     BS\\dir/DQ\"file

ok 164 - __git_complete_index_file - C-style escapes in ls-files output

expecting success of 9902.165 '__git_complete_index_file - \nnn-escaped characters in ls-files output': 
	test_path_completion sep separatorsindir &&
	test_path_completion separatorsi \
			     separatorsindir &&
	test_path_completion separatorsindir/sep \
			     separatorsindir/sepinfile &&
	test_path_completion separatorsindir/sepi \
			     separatorsindir/sepinfile

ok 165 - __git_complete_index_file - \nnn-escaped characters in ls-files output

expecting success of 9902.166 '__git_complete_index_file - removing repeated quoted path components': 
	test_when_finished rm -r repeated-quoted &&
	mkdir repeated-quoted &&      # A directory whose name in itself
				      # would not be quoted ...
	>repeated-quoted/0-file &&
	>repeated-quoted/1\"file &&   # ... but here the file makes the
				      # dirname quoted ...
	>repeated-quoted/2-file &&
	>repeated-quoted/3\"file &&   # ... and here, too.

	# Still, we shold only list the directory name only once.
	test_path_completion repeated repeated-quoted

ok 166 - __git_complete_index_file - removing repeated quoted path components

expecting success of 9902.167 'teardown after path completion tests': 
	rm -rf simple-dir "spaces in dir" árvíztűrő \
	       BS\\dir separatorsindir

ok 167 - teardown after path completion tests

expecting success of 9902.168 '__git_find_on_cmdline - single match': 
	echo list >expect &&
	(
		words=(git command --opt list) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline "add list remove" >actual
	) &&
	test_cmp expect actual

ok 168 - __git_find_on_cmdline - single match

expecting success of 9902.169 '__git_find_on_cmdline - multiple matches': 
	echo remove >expect &&
	(
		words=(git command -o --opt remove list add) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline "add list remove" >actual
	) &&
	test_cmp expect actual

ok 169 - __git_find_on_cmdline - multiple matches

expecting success of 9902.170 '__git_find_on_cmdline - no match': 
	(
		words=(git command --opt branch) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline "add list remove" >actual
	) &&
	test_must_be_empty actual

ok 170 - __git_find_on_cmdline - no match

expecting success of 9902.171 '__git_find_on_cmdline - single match with index': 
	echo "3 list" >expect &&
	(
		words=(git command --opt list) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline --show-idx "add list remove" >actual
	) &&
	test_cmp expect actual

ok 171 - __git_find_on_cmdline - single match with index

expecting success of 9902.172 '__git_find_on_cmdline - multiple matches with index': 
	echo "4 remove" >expect &&
	(
		words=(git command -o --opt remove list add) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline --show-idx "add list remove" >actual
	) &&
	test_cmp expect actual

ok 172 - __git_find_on_cmdline - multiple matches with index

expecting success of 9902.173 '__git_find_on_cmdline - no match with index': 
	(
		words=(git command --opt branch) &&
		cword=${#words[@]} &&
		__git_cmd_idx=1 &&
		__git_find_on_cmdline --show-idx "add list remove" >actual
	) &&
	test_must_be_empty actual

ok 173 - __git_find_on_cmdline - no match with index

expecting success of 9902.174 '__git_find_on_cmdline - ignores matches before command with index': 
	echo "6 remove" >expect &&
	(
		words=(git -C remove command -o --opt remove list add) &&
		cword=${#words[@]} &&
		__git_cmd_idx=3 &&
		__git_find_on_cmdline --show-idx "add list remove" >actual
	) &&
	test_cmp expect actual

ok 174 - __git_find_on_cmdline - ignores matches before command with index

expecting success of 9902.175 '__git_get_config_variables': 
	cat >expect <<-EOF &&
	name-1
	name-2
	EOF
	test_config interesting.name-1 good &&
	test_config interesting.name-2 good &&
	test_config subsection.interesting.name-3 bad &&
	__git_get_config_variables interesting >actual &&
	test_cmp expect actual

ok 175 - __git_get_config_variables

expecting success of 9902.176 '__git_pretty_aliases': 
	cat >expect <<-EOF &&
	author
	hash
	EOF
	test_config pretty.author "%an %ae" &&
	test_config pretty.hash %H &&
	__git_pretty_aliases >actual &&
	test_cmp expect actual

ok 176 - __git_pretty_aliases

expecting success of 9902.177 'basic': 
	run_completion "git " &&
	# built-in
	grep -q "^add \$" out &&
	# script
	grep -q "^rebase \$" out &&
	# plumbing
	! grep -q "^ls-files \$" out &&

	run_completion "git r" &&
	! grep -q -v "^r" out

ok 177 - basic

expecting success of 9902.178 'double dash "git" itself': 
	test_completion "git --" <<-\EOF
	--paginate Z
	--no-pager Z
	--git-dir=
	--bare Z
	--version Z
	--exec-path Z
	--exec-path=
	--html-path Z
	--man-path Z
	--info-path Z
	--work-tree=
	--namespace=
	--no-replace-objects Z
	--help Z
	EOF

ok 178 - double dash "git" itself

expecting success of 9902.179 'double dash "git checkout"': 
	test_completion "git checkout --" <<-\EOF
	--quiet Z
	--detach Z
	--track Z
	--orphan=Z
	--ours Z
	--theirs Z
	--merge Z
	--conflict=Z
	--patch Z
	--ignore-skip-worktree-bits Z
	--ignore-other-worktrees Z
	--recurse-submodules Z
	--progress Z
	--guess Z
	--no-guess Z
	--no-... Z
	--overlay Z
	--pathspec-file-nul Z
	--pathspec-from-file=Z
	EOF

ok 179 - double dash "git checkout"

expecting success of 9902.180 'general options': 
	test_completion "git --ver" "--version " &&
	test_completion "git --hel" "--help " &&
	test_completion "git --exe" <<-\EOF &&
	--exec-path Z
	--exec-path=
	EOF
	test_completion "git --htm" "--html-path " &&
	test_completion "git --pag" "--paginate " &&
	test_completion "git --no-p" "--no-pager " &&
	test_completion "git --git" "--git-dir=" &&
	test_completion "git --wor" "--work-tree=" &&
	test_completion "git --nam" "--namespace=" &&
	test_completion "git --bar" "--bare " &&
	test_completion "git --inf" "--info-path " &&
	test_completion "git --no-r" "--no-replace-objects "

ok 180 - general options

expecting success of 9902.181 'general options plus command': 
	test_completion "git --version check" "checkout " &&
	test_completion "git --paginate check" "checkout " &&
	test_completion "git --git-dir=foo check" "checkout " &&
	test_completion "git --bare check" "checkout " &&
	test_completion "git --exec-path=foo check" "checkout " &&
	test_completion "git --html-path check" "checkout " &&
	test_completion "git --no-pager check" "checkout " &&
	test_completion "git --work-tree=foo check" "checkout " &&
	test_completion "git --namespace=foo check" "checkout " &&
	test_completion "git --paginate check" "checkout " &&
	test_completion "git --info-path check" "checkout " &&
	test_completion "git --no-replace-objects check" "checkout " &&
	test_completion "git --git-dir some/path check" "checkout " &&
	test_completion "git -c conf.var=value check" "checkout " &&
	test_completion "git -C some/path check" "checkout " &&
	test_completion "git --work-tree some/path check" "checkout " &&
	test_completion "git --namespace name/space check" "checkout "

ok 181 - general options plus command

expecting success of 9902.182 'git --help completion': 
	test_completion "git --help ad" "add " &&
	test_completion "git --help core" "core-tutorial "

ok 182 - git --help completion

expecting success of 9902.183 'completion.commands removes multiple commands': 
	test_config completion.commands "-cherry -mergetool" &&
	git --list-cmds=list-mainporcelain,list-complete,config >out &&
	! grep -E "^(cherry|mergetool)$" out

ok 183 - completion.commands removes multiple commands

expecting success of 9902.184 'setup for integration tests': 
	echo content >file1 &&
	echo more >file2 &&
	git add file1 file2 &&
	git commit -m one &&
	git branch mybranch &&
	git tag mytag

[main 7283b13] one
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 file1
 create mode 100644 file2
ok 184 - setup for integration tests

expecting success of 9902.185 'checkout completes ref names': 
	test_completion "git checkout m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 185 - checkout completes ref names

expecting success of 9902.186 'git -C <path> checkout uses the right repo': 
	test_completion "git -C subdir -C subsubdir -C .. -C ../otherrepo checkout b" <<-\EOF
	branch-in-other Z
	EOF

ok 186 - git -C <path> checkout uses the right repo

expecting success of 9902.187 'show completes all refs': 
	test_completion "git show m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 187 - show completes all refs

expecting success of 9902.188 '<ref>: completes paths': 
	test_completion "git show mytag:f" <<-\EOF
	file1Z
	file2Z
	EOF

ok 188 - <ref>: completes paths

expecting success of 9902.189 'complete tree filename with spaces': 
	echo content >"name with spaces" &&
	git add "name with spaces" &&
	git commit -m spaces &&
	test_completion "git show HEAD:nam" <<-\EOF
	name with spacesZ
	EOF

[main 7ec67a3] spaces
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 name with spaces
ok 189 - complete tree filename with spaces

expecting success of 9902.190 'complete tree filename with metacharacters': 
	echo content >"name with \${meta}" &&
	git add "name with \${meta}" &&
	git commit -m meta &&
	test_completion "git show HEAD:nam" <<-\EOF
	name with ${meta}Z
	name with spacesZ
	EOF

[main d94cc06] meta
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 name with ${meta}
ok 190 - complete tree filename with metacharacters

expecting success of 9902.191 'send-email': 
	test_completion "git send-email --cov" <<-\EOF &&
	--cover-from-description=Z
	--cover-letter Z
	EOF
	test_completion "git send-email --val" <<-\EOF &&
	--validate Z
	EOF
	test_completion "git send-email ma" "main "

ok 191 - send-email

expecting success of 9902.192 'complete files': 
	git init tmp && cd tmp &&
	test_when_finished "cd .. && rm -rf tmp" &&

	echo "expected" > .gitignore &&
	echo "out" >> .gitignore &&
	echo "out_sorted" >> .gitignore &&

	git add .gitignore &&
	test_completion "git commit " ".gitignore" &&

	git commit -m ignore &&

	touch new &&
	test_completion "git add " "new" &&

	git add new &&
	git commit -a -m new &&
	test_completion "git add " "" &&

	git mv new modified &&
	echo modify > modified &&
	test_completion "git add " "modified" &&

	mkdir -p some/deep &&
	touch some/deep/path &&
	test_completion "git add some/" "some/deep" &&
	git clean -f some &&

	touch untracked &&

	: TODO .gitignore should not be here &&
	test_completion "git rm " <<-\EOF &&
	.gitignore
	modified
	EOF

	test_completion "git clean " "untracked" &&

	: TODO .gitignore should not be here &&
	test_completion "git mv " <<-\EOF &&
	.gitignore
	modified
	EOF

	mkdir dir &&
	touch dir/file-in-dir &&
	git add dir/file-in-dir &&
	git commit -m dir &&

	mkdir untracked-dir &&

	: TODO .gitignore should not be here &&
	test_completion "git mv modified " <<-\EOF &&
	.gitignore
	dir
	modified
	untracked
	untracked-dir
	EOF

	test_completion "git commit " "modified" &&

	: TODO .gitignore should not be here &&
	test_completion "git ls-files " <<-\EOF &&
	.gitignore
	dir
	modified
	EOF

	touch momified &&
	test_completion "git add mom" "momified"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/tmp/.git/
[master (root-commit) 81eece7] ignore
 Author: A U Thor <author@example.com>
 1 file changed, 3 insertions(+)
 create mode 100644 .gitignore
[master 43fdfc6] new
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new
Removing some/
[master fd1c9cc] dir
 Author: A U Thor <author@example.com>
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename new => dir/file-in-dir (100%)
 create mode 100644 modified
ok 192 - complete files

expecting success of 9902.193 'simple alias': 
	test_config alias.co checkout &&
	test_completion "git co m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 193 - simple alias

expecting success of 9902.194 'recursive alias': 
	test_config alias.co checkout &&
	test_config alias.cod "co --detached" &&
	test_completion "git cod m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 194 - recursive alias

expecting success of 9902.195 'completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'': 
	test_config alias.co "!sh -c 'git checkout ...'" &&
	test_completion "git co m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 195 - completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'

expecting success of 9902.196 'completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }': 
	test_config alias.co "!f () { VAR=val git checkout ... ; } f" &&
	test_completion "git co m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 196 - completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }

expecting success of 9902.197 'completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }': 
	test_config alias.co "!f() { : git checkout ; if ... } f" &&
	test_completion "git co m" <<-\EOF
	main Z
	mybranch Z
	mytag Z
	EOF

ok 197 - completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }

expecting success of 9902.198 'completion without explicit _git_xxx function': 
	test_completion "git version --" <<-\EOF
	--build-options Z
	--no-build-options Z
	EOF

ok 198 - completion without explicit _git_xxx function

checking known breakage of 9902.199 'complete with tilde expansion': 
	git init tmp && cd tmp &&
	test_when_finished "cd .. && rm -rf tmp" &&

	touch ~/tmp/file &&

	test_completion "git add ~/tmp/" "~/tmp/file"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9902-completion/tmp/.git/
--- expected	2022-12-28 08:26:04.008441611 +0000
+++ out_sorted	2022-12-28 08:26:04.068443790 +0000
@@ -1 +1 @@
-~/tmp/file
+
not ok 199 - complete with tilde expansion # TODO known breakage

expecting success of 9902.200 'setup other remote for remote reference completion': 
	git remote add other otherrepo &&
	git fetch other

From otherrepo
 * [new branch]      branch-in-other -> other/branch-in-other
 * [new branch]      main-in-other   -> other/main-in-other
 * [new tag]         tag-in-other    -> tag-in-other
ok 200 - setup other remote for remote reference completion

expecting success of 9902.201 '__git_complete_remote_or_refspec - push -d other': 
		sed -e "s/Z$//" >expected <<-EOF &&
		main-in-other Z
		EOF
		(
			words=(git push -d other ma) &&
			cword=${#words[@]} cur=${words[cword-1]} &&
			__git_cmd_idx=1 &&
			__git_complete_remote_or_refspec &&
			print_comp
		) &&
		test_cmp expected out
	
ok 201 - __git_complete_remote_or_refspec - push -d other

checking known breakage of 9902.202 '__git_complete_remote_or_refspec - push other -d': 
		sed -e "s/Z$//" >expected <<-EOF &&
		main-in-other Z
		EOF
		(
			words=(git push other -d ma) &&
			cword=${#words[@]} cur=${words[cword-1]} &&
			__git_cmd_idx=1 &&
			__git_complete_remote_or_refspec &&
			print_comp
		) &&
		test_cmp expected out
	
--- expected	2022-12-28 08:26:04.353454137 +0000
+++ out	2022-12-28 08:26:04.393455589 +0000
@@ -1 +1 @@
-main-in-other 
+main 
not ok 202 - __git_complete_remote_or_refspec - push other -d # TODO known breakage

expecting success of 9902.203 '__git_complete_remote_or_refspec - push --delete other': 
		sed -e "s/Z$//" >expected <<-EOF &&
		main-in-other Z
		EOF
		(
			words=(git push --delete other ma) &&
			cword=${#words[@]} cur=${words[cword-1]} &&
			__git_cmd_idx=1 &&
			__git_complete_remote_or_refspec &&
			print_comp
		) &&
		test_cmp expected out
	
ok 203 - __git_complete_remote_or_refspec - push --delete other

checking known breakage of 9902.204 '__git_complete_remote_or_refspec - push other --delete': 
		sed -e "s/Z$//" >expected <<-EOF &&
		main-in-other Z
		EOF
		(
			words=(git push other --delete ma) &&
			cword=${#words[@]} cur=${words[cword-1]} &&
			__git_cmd_idx=1 &&
			__git_complete_remote_or_refspec &&
			print_comp
		) &&
		test_cmp expected out
	
--- expected	2022-12-28 08:26:04.533460672 +0000
+++ out	2022-12-28 08:26:04.573462124 +0000
@@ -1 +1 @@
-main-in-other 
+main 
not ok 204 - __git_complete_remote_or_refspec - push other --delete # TODO known breakage

expecting success of 9902.205 'git config - section': 
	test_completion "git config br" <<-\EOF
	branch.Z
	browser.Z
	EOF

ok 205 - git config - section

expecting success of 9902.206 'git config - section include, includeIf': 
	test_completion "git config inclu" <<-\EOF
	include.Z
	includeIf.Z
	EOF

ok 206 - git config - section include, includeIf

expecting success of 9902.207 'git config - variable name': 
	test_completion "git config log.d" <<-\EOF
	log.date Z
	log.decorate Z
	log.diffMerges Z
	EOF

ok 207 - git config - variable name

expecting success of 9902.208 'git config - variable name include': 
	test_completion "git config include.p" <<-\EOF
	include.path Z
	EOF

ok 208 - git config - variable name include

expecting success of 9902.209 'git config - value': 
	test_completion "git config color.pager " <<-\EOF
	false Z
	true Z
	EOF

ok 209 - git config - value

expecting success of 9902.210 'git -c - section': 
	test_completion "git -c br" <<-\EOF
	branch.Z
	browser.Z
	EOF

ok 210 - git -c - section

expecting success of 9902.211 'git -c - variable name': 
	test_completion "git -c log.d" <<-\EOF
	log.date=Z
	log.decorate=Z
	log.diffMerges=Z
	EOF

ok 211 - git -c - variable name

expecting success of 9902.212 'git -c - value': 
	test_completion "git -c color.pager=" <<-\EOF
	false Z
	true Z
	EOF

ok 212 - git -c - value

expecting success of 9902.213 'git clone --config= - section': 
	test_completion "git clone --config=br" <<-\EOF
	branch.Z
	browser.Z
	EOF

ok 213 - git clone --config= - section

expecting success of 9902.214 'git clone --config= - variable name': 
	test_completion "git clone --config=log.d" <<-\EOF
	log.date=Z
	log.decorate=Z
	log.diffMerges=Z
	EOF

ok 214 - git clone --config= - variable name

expecting success of 9902.215 'git clone --config= - value': 
	test_completion "git clone --config=color.pager=" <<-\EOF
	false Z
	true Z
	EOF

ok 215 - git clone --config= - value

expecting success of 9902.216 'options with value': 
	test_completion "git merge -X diff-algorithm=" <<-\EOF

	EOF

ok 216 - options with value

expecting success of 9902.217 'sourcing the completion script clears cached commands': 
	(
		__git_compute_all_commands &&
		verbose test -n "$__git_all_commands" &&
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		verbose test -z "$__git_all_commands"
	)

ok 217 - sourcing the completion script clears cached commands

expecting success of 9902.218 'sourcing the completion script clears cached merge strategies': 
	(
		__git_compute_merge_strategies &&
		verbose test -n "$__git_merge_strategies" &&
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		verbose test -z "$__git_merge_strategies"
	)

ok 218 - sourcing the completion script clears cached merge strategies

expecting success of 9902.219 'sourcing the completion script clears cached --options': 
	(
		__gitcomp_builtin checkout &&
		verbose test -n "$__gitcomp_builtin_checkout" &&
		__gitcomp_builtin notes_edit &&
		verbose test -n "$__gitcomp_builtin_notes_edit" &&
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		verbose test -z "$__gitcomp_builtin_checkout" &&
		verbose test -z "$__gitcomp_builtin_notes_edit"
	)

ok 219 - sourcing the completion script clears cached --options

expecting success of 9902.220 'option aliases are not shown by default': 
	test_completion "git clone --recurs" "--recurse-submodules "

ok 220 - option aliases are not shown by default

expecting success of 9902.221 'option aliases are shown with GIT_COMPLETION_SHOW_ALL': 
	(
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL &&
		test_completion "git clone --recurs" <<-\EOF
		--recurse-submodules Z
		--recursive Z
		EOF
	)

ok 221 - option aliases are shown with GIT_COMPLETION_SHOW_ALL

expecting success of 9902.222 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS': 
	(
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&

		# Just mainporcelain, not plumbing commands
		run_completion "git c" &&
		grep checkout out &&
		! grep cat-file out
	)

checkout 
ok 222 - plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS

expecting success of 9902.223 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)': 
	(
		. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
		GIT_COMPLETION_SHOW_ALL_COMMANDS=1 &&
		export GIT_COMPLETION_SHOW_ALL_COMMANDS &&
		sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&

		# Both mainporcelain and plumbing commands
		run_completion "git c" &&
		grep checkout out &&
		grep cat-file out &&

		# Check "gitk", a "main" command, but not a built-in + more plumbing
		run_completion "git g" &&
		grep gitk out &&
		grep get-tar-commit-id out
	)

checkout 
checkout-index 
checkout 
cat-file 
gitk 
get-tar-commit-id 
ok 223 - all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)

expecting success of 9902.224 '__git_complete': 
	unset -f __git_wrap__git_main &&

	__git_complete foo __git_main &&
	__git_have_func __git_wrap__git_main &&
	unset -f __git_wrap__git_main &&

	__git_complete gf _git_fetch &&
	__git_have_func __git_wrap_git_fetch &&

	__git_complete foo git &&
	__git_have_func __git_wrap__git_main &&
	unset -f __git_wrap__git_main &&

	__git_complete gd git_diff &&
	__git_have_func __git_wrap_git_diff &&

	test_must_fail __git_complete ga missing

ERROR: could not find function 'missing'
ok 224 - __git_complete

# still have 3 known breakage(s)
# passed all remaining 221 test(s)
1..224
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[4]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9500-gitweb-standalone-no-errors.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9500-gitweb-standalone-no-errors/.git/
expecting success of 9500.1 'no commits: projects_list (implicit)': gitweb_run
ok 1 - no commits: projects_list (implicit)

expecting success of 9500.2 'no commits: projects_index': gitweb_run "a=project_index"
ok 2 - no commits: projects_index

expecting success of 9500.3 'no commits: .git summary (implicit)': gitweb_run "p=.git"
ok 3 - no commits: .git summary (implicit)

expecting success of 9500.4 'no commits: .git commit (implicit HEAD)': gitweb_run "p=.git;a=commit"
ok 4 - no commits: .git commit (implicit HEAD)

expecting success of 9500.5 'no commits: .git commitdiff (implicit HEAD)': gitweb_run "p=.git;a=commitdiff"
ok 5 - no commits: .git commitdiff (implicit HEAD)

expecting success of 9500.6 'no commits: .git tree (implicit HEAD)': gitweb_run "p=.git;a=tree"
ok 6 - no commits: .git tree (implicit HEAD)

expecting success of 9500.7 'no commits: .git heads': gitweb_run "p=.git;a=heads"
ok 7 - no commits: .git heads

expecting success of 9500.8 'no commits: .git tags': gitweb_run "p=.git;a=tags"
ok 8 - no commits: .git tags

expecting success of 9500.9 'Make initial commit': echo "Not an empty file." >file &&
	 git add file &&
	 git commit -a -m "Initial commit." &&
	 git branch b
[main (root-commit) f6e1c08] Initial commit.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file
ok 9 - Make initial commit

expecting success of 9500.10 'projects_list (implicit)': gitweb_run
ok 10 - projects_list (implicit)

expecting success of 9500.11 'projects_index': gitweb_run "a=project_index"
ok 11 - projects_index

expecting success of 9500.12 '.git summary (implicit)': gitweb_run "p=.git"
ok 12 - .git summary (implicit)

expecting success of 9500.13 '.git commit (implicit HEAD)': gitweb_run "p=.git;a=commit"
ok 13 - .git commit (implicit HEAD)

expecting success of 9500.14 '.git commitdiff (implicit HEAD, root commit)': gitweb_run "p=.git;a=commitdiff"
ok 14 - .git commitdiff (implicit HEAD, root commit)

expecting success of 9500.15 '.git commitdiff_plain (implicit HEAD, root commit)': gitweb_run "p=.git;a=commitdiff_plain"
ok 15 - .git commitdiff_plain (implicit HEAD, root commit)

expecting success of 9500.16 '.git commit (HEAD)': gitweb_run "p=.git;a=commit;h=HEAD"
ok 16 - .git commit (HEAD)

expecting success of 9500.17 '.git tree (implicit HEAD)': gitweb_run "p=.git;a=tree"
ok 17 - .git tree (implicit HEAD)

expecting success of 9500.18 '.git blob (file)': gitweb_run "p=.git;a=blob;f=file"
ok 18 - .git blob (file)

expecting success of 9500.19 '.git blob_plain (file)': gitweb_run "p=.git;a=blob_plain;f=file"
ok 19 - .git blob_plain (file)

expecting success of 9500.20 '.git commit (non-existent)': gitweb_run "p=.git;a=commit;h=non-existent"
ok 20 - .git commit (non-existent)

expecting success of 9500.21 '.git commitdiff (non-existent)': gitweb_run "p=.git;a=commitdiff;h=non-existent"
ok 21 - .git commitdiff (non-existent)

expecting success of 9500.22 '.git commitdiff (non-existent vs HEAD)': gitweb_run "p=.git;a=commitdiff;hp=non-existent;h=HEAD"
ok 22 - .git commitdiff (non-existent vs HEAD)

expecting success of 9500.23 '.git tree (0000000000000000000000000000000000000000)': gitweb_run "p=.git;a=tree;h=0000000000000000000000000000000000000000"
ok 23 - .git tree (0000000000000000000000000000000000000000)

expecting success of 9500.24 '.git tag (0000000000000000000000000000000000000000)': gitweb_run "p=.git;a=tag;h=0000000000000000000000000000000000000000"
ok 24 - .git tag (0000000000000000000000000000000000000000)

expecting success of 9500.25 '.git blob (non-existent)': gitweb_run "p=.git;a=blob;f=non-existent"
ok 25 - .git blob (non-existent)

expecting success of 9500.26 '.git blob_plain (non-existent)': gitweb_run "p=.git;a=blob_plain;f=non-existent"
ok 26 - .git blob_plain (non-existent)

expecting success of 9500.27 'commitdiff(0): root': gitweb_run "p=.git;a=commitdiff"
ok 27 - commitdiff(0): root

expecting success of 9500.28 'commitdiff(0): file added': echo "New file" >new_file &&
	 git add new_file &&
	 git commit -a -m "File added." &&
	 gitweb_run "p=.git;a=commitdiff"
[main aef3daf] File added.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 new_file
ok 28 - commitdiff(0): file added

expecting success of 9500.29 'commitdiff(0): mode change': test_chmod +x new_file &&
	 git commit -a -m "Mode changed." &&
	 gitweb_run "p=.git;a=commitdiff"
[main 4d63074] Mode changed.
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 new_file
ok 29 - commitdiff(0): mode change

expecting success of 9500.30 'commitdiff(0): file renamed': git mv new_file renamed_file &&
	 git commit -a -m "File renamed." &&
	 gitweb_run "p=.git;a=commitdiff"
[main c3af6e3] File renamed.
 Author: A U Thor <author@example.com>
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename new_file => renamed_file (100%)
ok 30 - commitdiff(0): file renamed

expecting success of 9500.31 'commitdiff(0): file to symlink': rm renamed_file &&
	 test_ln_s_add file renamed_file &&
	 git commit -a -m "File to symlink." &&
	 gitweb_run "p=.git;a=commitdiff"
checking prerequisite: SYMLINKS

mkdir -p "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
(
	cd "$TRASH_DIRECTORY/prereq-test-dir-SYMLINKS" &&
	# test whether the filesystem supports symbolic links
	ln -s x y && test -h y

)
prerequisite SYMLINKS ok
[main 9d683f7] File to symlink.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 100755 => 120000 renamed_file
ok 31 - commitdiff(0): file to symlink

expecting success of 9500.32 'commitdiff(0): file deleted': git rm renamed_file &&
	 rm -f renamed_file &&
	 git commit -a -m "File removed." &&
	 gitweb_run "p=.git;a=commitdiff"
rm 'renamed_file'
[main a32c3dd] File removed.
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 120000 renamed_file
ok 32 - commitdiff(0): file deleted

expecting success of 9500.33 'commitdiff(0): file copied / new file': cp file file2 &&
	 git add file2 &&
	 git commit -a -m "File copied." &&
	 gitweb_run "p=.git;a=commitdiff"
[main 13afdf6] File copied.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 file2
ok 33 - commitdiff(0): file copied / new file

expecting success of 9500.34 'commitdiff(0): mode change and modified': echo "New line" >>file2 &&
	 test_chmod +x file2 &&
	 git commit -a -m "Mode change and modification." &&
	 gitweb_run "p=.git;a=commitdiff"
[main b2fe804] Mode change and modification.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 mode change 100644 => 100755 file2
ok 34 - commitdiff(0): mode change and modified

expecting success of 9500.35 'commitdiff(0): renamed and modified': cat >file2<<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.
EOF
	 git commit -a -m "File added." &&
	 git mv file2 file3 &&
	 echo "Propter nomen suum." >>file3 &&
	 git commit -a -m "File rename and modification." &&
	 gitweb_run "p=.git;a=commitdiff"
[main ce1348f] File added.
 Author: A U Thor <author@example.com>
 1 file changed, 7 insertions(+), 2 deletions(-)
[main 763e503] File rename and modification.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file2 => file3 (90%)
ok 35 - commitdiff(0): renamed and modified

expecting success of 9500.36 'commitdiff(0): renamed, mode change and modified': git mv file3 file2 &&
	 echo "Propter nomen suum." >>file2 &&
	 test_chmod +x file2 &&
	 git commit -a -m "File rename, mode change and modification." &&
	 gitweb_run "p=.git;a=commitdiff"
[main 54200a9] File rename, mode change and modification.
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 rename file3 => file2 (91%)
ok 36 - commitdiff(0): renamed, mode change and modified

expecting success of 9500.37 'setup typechange commits': 
	echo "hello world" >foo &&
	echo "hi planet" >bar &&
	git update-index --add foo bar &&
	git commit -m initial &&
	git branch initial &&
	rm -f foo &&
	test_ln_s_add bar foo &&
	git commit -m "foo symlinked to bar" &&
	git branch foo-symlinked-to-bar &&
	rm -f foo &&
	echo "how far is the sun?" >foo &&
	git update-index foo &&
	git commit -m "foo back to file" &&
	git branch foo-back-to-file &&
	rm -f foo &&
	git update-index --remove foo &&
	mkdir foo &&
	echo "if only I knew" >foo/baz &&
	git update-index --add foo/baz &&
	git commit -m "foo becomes a directory" &&
	git branch "foo-becomes-a-directory" &&
	echo "hello world" >foo/baz &&
	git update-index foo/baz &&
	git commit -m "foo/baz is the original foo" &&
	git branch foo-baz-renamed-from-foo
	
[main 1c15952] initial
 Author: A U Thor <author@example.com>
 2 files changed, 2 insertions(+)
 create mode 100644 bar
 create mode 100644 foo
[main fc2bb47] foo symlinked to bar
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 100644 => 120000 foo
[main 4ac81f8] foo back to file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
 mode change 120000 => 100644 foo
[main e02950a] foo becomes a directory
 Author: A U Thor <author@example.com>
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 foo
 create mode 100644 foo/baz
[main 758ecec] foo/baz is the original foo
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
ok 37 - setup typechange commits

expecting success of 9500.38 'commitdiff(2): file renamed from foo to foo/baz': gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-baz-renamed-from-foo"
ok 38 - commitdiff(2): file renamed from foo to foo/baz

expecting success of 9500.39 'commitdiff(2): file renamed from foo/baz to foo': gitweb_run "p=.git;a=commitdiff;hp=foo-baz-renamed-from-foo;h=initial"
ok 39 - commitdiff(2): file renamed from foo/baz to foo

expecting success of 9500.40 'commitdiff(2): directory becomes file': gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=initial"
ok 40 - commitdiff(2): directory becomes file

expecting success of 9500.41 'commitdiff(2): file becomes directory': gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-becomes-a-directory"
ok 41 - commitdiff(2): file becomes directory

expecting success of 9500.42 'commitdiff(2): file becomes symlink': gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-symlinked-to-bar"
ok 42 - commitdiff(2): file becomes symlink

expecting success of 9500.43 'commitdiff(2): symlink becomes file': gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-back-to-file"
ok 43 - commitdiff(2): symlink becomes file

expecting success of 9500.44 'commitdiff(2): symlink becomes directory': gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-becomes-a-directory"
ok 44 - commitdiff(2): symlink becomes directory

expecting success of 9500.45 'commitdiff(2): directory becomes symlink': gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=foo-symlinked-to-bar"
ok 45 - commitdiff(2): directory becomes symlink

expecting success of 9500.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

[main 726d325] Preparing for incomplete lines
 Author: A U Thor <author@example.com>
 1 file changed, 8 insertions(+), 1 deletion(-)
[main 5ece9db] Add incomplete line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
[main 7182367] Incomplete context line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 1 deletion(-)
[main 19ad71b] Change incomplete line
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+), 8 deletions(-)
[main 08fef32] Remove incomplete line
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
ok 46 - setup incomplete lines

expecting success of 9500.47 'commitdiff(1): addition of incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_add"

ok 47 - commitdiff(1): addition of incomplete line

expecting success of 9500.48 'commitdiff(1): incomplete line as context line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_ctx"

ok 48 - commitdiff(1): incomplete line as context line

expecting success of 9500.49 'commitdiff(1): change incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_chg"

ok 49 - commitdiff(1): change incomplete line

expecting success of 9500.50 'commitdiff(1): removal of incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_rem"

ok 50 - commitdiff(1): removal of incomplete line

expecting success of 9500.51 'Create a merge': git checkout b &&
	 echo "Branch" >>b &&
	 git add b &&
	 git commit -a -m "On branch" &&
	 git checkout main &&
	 git merge b &&
	 git tag merge_commit
Switched to branch 'b'
[b 3f8100f] On branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 b
Switched to branch 'main'
Merge made by the 'ort' strategy.
 b | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b
ok 51 - Create a merge

expecting success of 9500.52 'commit(0): merge commit': gitweb_run "p=.git;a=commit"
ok 52 - commit(0): merge commit

expecting success of 9500.53 'commitdiff(0): merge commit': gitweb_run "p=.git;a=commitdiff"
ok 53 - commitdiff(0): merge commit

expecting success of 9500.54 'Prepare large commit': git checkout b &&
	 echo "To be changed" >01-change &&
	 echo "To be renamed" >02-pure-rename-from &&
	 echo "To be deleted" >03-delete &&
	 echo "To be renamed and changed" >04-rename-from &&
	 echo "To have mode changed" >05-mode-change &&
	 echo "File to symlink" >06-file-or-symlink &&
	 echo "To be changed and have mode changed" >07-change-mode-change &&
	 git add 0* &&
	 git commit -a -m "Prepare large commit" &&
	 echo "Changed" >01-change &&
	 git mv 02-pure-rename-from 02-pure-rename-to &&
	 git rm 03-delete && rm -f 03-delete &&
	 echo "A new file" >03-new &&
	 git add 03-new &&
	 git mv 04-rename-from 04-rename-to &&
	 echo "Changed" >>04-rename-to &&
	 test_chmod +x 05-mode-change &&
	 rm -f 06-file-or-symlink &&
	 test_ln_s_add 01-change 06-file-or-symlink &&
	 echo "Changed and have mode changed" >07-change-mode-change &&
	 test_chmod +x 07-change-mode-change &&
	 git commit -a -m "Large commit" &&
	 git checkout main
Switched to branch 'b'
[b 42d1b13] Prepare large commit
 Author: A U Thor <author@example.com>
 7 files changed, 7 insertions(+)
 create mode 100644 01-change
 create mode 100644 02-pure-rename-from
 create mode 100644 03-delete
 create mode 100644 04-rename-from
 create mode 100644 05-mode-change
 create mode 100644 06-file-or-symlink
 create mode 100644 07-change-mode-change
rm '03-delete'
[b a99c658] Large commit
 Author: A U Thor <author@example.com>
 8 files changed, 5 insertions(+), 4 deletions(-)
 rename 02-pure-rename-from => 02-pure-rename-to (100%)
 delete mode 100644 03-delete
 create mode 100644 03-new
 rename 04-rename-from => 04-rename-to (76%)
 mode change 100644 => 100755 05-mode-change
 mode change 100644 => 120000 06-file-or-symlink
 mode change 100644 => 100755 07-change-mode-change
Switched to branch 'main'
ok 54 - Prepare large commit

expecting success of 9500.55 'commit(1): large commit': gitweb_run "p=.git;a=commit;h=b"
ok 55 - commit(1): large commit

expecting success of 9500.56 'commitdiff(1): large commit': gitweb_run "p=.git;a=commitdiff;h=b"
ok 56 - commitdiff(1): large commit

expecting success of 9500.57 'side-by-side: addition of incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_add;ds=sidebyside"

ok 57 - side-by-side: addition of incomplete line

expecting success of 9500.58 'side-by-side: incomplete line as context line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_ctx;ds=sidebyside"

ok 58 - side-by-side: incomplete line as context line

expecting success of 9500.59 'side-by-side: changed incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_chg;ds=sidebyside"

ok 59 - side-by-side: changed incomplete line

expecting success of 9500.60 'side-by-side: removal of incomplete line': 
	gitweb_run "p=.git;a=commitdiff;h=incomplete_lines_rem;ds=sidebyside"

ok 60 - side-by-side: removal of incomplete line

expecting success of 9500.61 'side-by-side: merge commit': 
	gitweb_run "p=.git;a=commitdiff;h=merge_commit;ds=sidebyside"

ok 61 - side-by-side: merge commit

expecting success of 9500.62 'tags: list of different types of tags': git checkout main &&
	 git tag -a -m "Tag commit object" tag-commit HEAD &&
	 git tag -a -m "" tag-commit-nomessage HEAD &&
	 git tag -a -m "Tag tag object" tag-tag tag-commit &&
	 git tag -a -m "Tag tree object" tag-tree HEAD^{tree} &&
	 git tag -a -m "Tag blob object" tag-blob HEAD:file &&
	 git tag lightweight/tag-commit HEAD &&
	 git tag lightweight/tag-tag tag-commit &&
	 git tag lightweight/tag-tree HEAD^{tree} &&
	 git tag lightweight/tag-blob HEAD:file &&
	 gitweb_run "p=.git;a=tags"
Already on 'main'
hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint: 
hint: 	git tag -f tag-tag tag-commit^{}
hint: Disable this message with "git config advice.nestedTag false"
ok 62 - tags: list of different types of tags

expecting success of 9500.63 'tag: Tag to commit object': gitweb_run "p=.git;a=tag;h=tag-commit"
ok 63 - tag: Tag to commit object

expecting success of 9500.64 'tag: on lightweight tag (invalid)': gitweb_run "p=.git;a=tag;h=lightweight/tag-commit"
ok 64 - tag: on lightweight tag (invalid)

expecting success of 9500.65 'logs: log (implicit HEAD)': gitweb_run "p=.git;a=log"
ok 65 - logs: log (implicit HEAD)

expecting success of 9500.66 'logs: shortlog (implicit HEAD)': gitweb_run "p=.git;a=shortlog"
ok 66 - logs: shortlog (implicit HEAD)

expecting success of 9500.67 'logs: history (implicit HEAD, file)': gitweb_run "p=.git;a=history;f=file"
ok 67 - logs: history (implicit HEAD, file)

expecting success of 9500.68 'logs: history (implicit HEAD, non-existent file)': gitweb_run "p=.git;a=history;f=non-existent"
ok 68 - logs: history (implicit HEAD, non-existent file)

expecting success of 9500.69 'logs: history (implicit HEAD, deleted file)': git checkout main &&
	 echo "to be deleted" >deleted_file &&
	 git add deleted_file &&
	 git commit -m "Add file to be deleted" &&
	 git rm deleted_file &&
	 git commit -m "Delete file" &&
	 gitweb_run "p=.git;a=history;f=deleted_file"
Already on 'main'
[main 0b30cc4] Add file to be deleted
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 deleted_file
rm 'deleted_file'
[main 07aeaf6] Delete file
 Author: A U Thor <author@example.com>
 1 file changed, 1 deletion(-)
 delete mode 100644 deleted_file
ok 69 - logs: history (implicit HEAD, deleted file)

expecting success of 9500.70 'path_info: project': gitweb_run "" "/.git"
ok 70 - path_info: project

expecting success of 9500.71 'path_info: project/branch': gitweb_run "" "/.git/b"
ok 71 - path_info: project/branch

expecting success of 9500.72 'path_info: project/branch:file': gitweb_run "" "/.git/main:file"
ok 72 - path_info: project/branch:file

expecting success of 9500.73 'path_info: project/branch:dir/': gitweb_run "" "/.git/main:foo/"
ok 73 - path_info: project/branch:dir/

expecting success of 9500.74 'path_info: project/branch (non-existent)': gitweb_run "" "/.git/non-existent"
ok 74 - path_info: project/branch (non-existent)

expecting success of 9500.75 'path_info: project/branch:filename (non-existent branch)': gitweb_run "" "/.git/non-existent:non-existent"
ok 75 - path_info: project/branch:filename (non-existent branch)

expecting success of 9500.76 'path_info: project/branch:file (non-existent)': gitweb_run "" "/.git/main:non-existent"
ok 76 - path_info: project/branch:file (non-existent)

expecting success of 9500.77 'path_info: project/branch:dir/ (non-existent)': gitweb_run "" "/.git/main:non-existent/"
ok 77 - path_info: project/branch:dir/ (non-existent)

expecting success of 9500.78 'path_info: project/branch:/file': gitweb_run "" "/.git/main:/file"
ok 78 - path_info: project/branch:/file

expecting success of 9500.79 'path_info: project/:/file (implicit HEAD)': gitweb_run "" "/.git/:/file"
ok 79 - path_info: project/:/file (implicit HEAD)

expecting success of 9500.80 'path_info: project/:/ (implicit HEAD, top tree)': gitweb_run "" "/.git/:/"
ok 80 - path_info: project/:/ (implicit HEAD, top tree)

expecting success of 9500.81 'feeds: OPML': gitweb_run "a=opml"
ok 81 - feeds: OPML

expecting success of 9500.82 'feed: RSS': gitweb_run "p=.git;a=rss"
ok 82 - feed: RSS

expecting success of 9500.83 'feed: Atom': gitweb_run "p=.git;a=atom"
ok 83 - feed: Atom

expecting success of 9500.84 'encode(commit): utf8': . "$TEST_DIRECTORY"/t3901/utf8.txt &&
	 test_when_finished "GIT_AUTHOR_NAME=\"A U Thor\"" &&
	 test_when_finished "GIT_COMMITTER_NAME=\"C O Mitter\"" &&
	 echo "UTF-8" >>file &&
	 git add file &&
	 git commit -F "$TEST_DIRECTORY"/t3900/1-UTF-8.txt &&
	 gitweb_run "p=.git;a=commit"
[main 18589a2] ÄËÑÏÖ
 Author: Áéí óú <author@example.com>
 1 file changed, 1 insertion(+)
ok 84 - encode(commit): utf8

expecting success of 9500.85 'encode(commit): iso-8859-1': . "$TEST_DIRECTORY"/t3901/8859-1.txt &&
	 test_when_finished "GIT_AUTHOR_NAME=\"A U Thor\"" &&
	 test_when_finished "GIT_COMMITTER_NAME=\"C O Mitter\"" &&
	 echo "ISO-8859-1" >>file &&
	 git add file &&
	 test_config i18n.commitencoding ISO-8859-1 &&
	 git commit -F "$TEST_DIRECTORY"/t3900/ISO8859-1.txt &&
	 gitweb_run "p=.git;a=commit"
[main c6c3c80] ÄËÑÏÖ
 1 file changed, 1 insertion(+)
ok 85 - encode(commit): iso-8859-1

expecting success of 9500.86 'encode(log): utf-8 and iso-8859-1': gitweb_run "p=.git;a=log"
ok 86 - encode(log): utf-8 and iso-8859-1

expecting success of 9500.87 'opt: log --no-merges': gitweb_run "p=.git;a=log;opt=--no-merges"
ok 87 - opt: log --no-merges

expecting success of 9500.88 'opt: atom --no-merges': gitweb_run "p=.git;a=log;opt=--no-merges"
ok 88 - opt: atom --no-merges

expecting success of 9500.89 'opt: "file" history --no-merges': gitweb_run "p=.git;a=history;f=file;opt=--no-merges"
ok 89 - opt: "file" history --no-merges

expecting success of 9500.90 'opt: log --no-such-option (invalid option)': gitweb_run "p=.git;a=log;opt=--no-such-option"
ok 90 - opt: log --no-such-option (invalid option)

expecting success of 9500.91 'opt: tree --no-merges (invalid option for action)': gitweb_run "p=.git;a=tree;opt=--no-merges"
ok 91 - opt: tree --no-merges (invalid option for action)

expecting success of 9500.92 'URL: no project URLs, no base URL': gitweb_run "p=.git;a=summary"
ok 92 - URL: no project URLs, no base URL

expecting success of 9500.93 'URL: project URLs via gitweb.url': git config --add gitweb.url git://example.com/git/trash.git &&
        git config --add gitweb.url http://example.com/git/trash.git &&
        gitweb_run "p=.git;a=summary"
ok 93 - URL: project URLs via gitweb.url

expecting success of 9500.94 'URL: project URLs via cloneurl file': gitweb_run "p=.git;a=summary"
ok 94 - URL: project URLs via cloneurl file

expecting success of 9500.95 'config override: projects list (implicit)': gitweb_run
ok 95 - config override: projects list (implicit)

expecting success of 9500.96 'config override: tree view, features not overridden in repo config': gitweb_run "p=.git;a=tree"
ok 96 - config override: tree view, features not overridden in repo config

expecting success of 9500.97 'config override: tree view, features disabled in repo config': git config gitweb.blame no &&
	 git config gitweb.snapshot none &&
	 git config gitweb.avatar gravatar &&
	 gitweb_run "p=.git;a=tree"
ok 97 - config override: tree view, features disabled in repo config

expecting success of 9500.98 'config override: tree view, features enabled in repo config (1)': git config gitweb.blame yes &&
	 git config gitweb.snapshot "zip,tgz, tbz2" &&
	 gitweb_run "p=.git;a=tree"
ok 98 - config override: tree view, features enabled in repo config (1)

expecting success of 9500.99 'setup': 
	version=$(git config core.repositoryformatversion) &&
	algo=$(test_might_fail git config extensions.objectformat) &&
	cat >.git/config <<-\EOF &&
	# testing noval and alternate separator
	[gitweb]
		blame
		snapshot = zip tgz
	EOF
	git config core.repositoryformatversion "$version" &&
	if test -n "$algo"
	then
		git config extensions.objectformat "$algo"
	fi

ok 99 - setup

expecting success of 9500.100 'config override: tree view, features enabled in repo config (2)': gitweb_run "p=.git;a=tree"
ok 100 - config override: tree view, features enabled in repo config (2)

expecting success of 9500.101 'search: preparation': echo "1st MATCH" >>file &&
	 echo "2nd MATCH" >>file &&
	 echo "MATCH" >>bar &&
	 git add file bar &&
	 git commit -m "Added MATCH word"
[main 13113e4] Added MATCH word
 Author: A U Thor <author@example.com>
 2 files changed, 3 insertions(+)
ok 101 - search: preparation

expecting success of 9500.102 'search: commit author': gitweb_run "p=.git;a=search;h=HEAD;st=author;s=A+U+Thor"
ok 102 - search: commit author

expecting success of 9500.103 'search: commit message': gitweb_run "p=.git;a=search;h=HEAD;st=commitr;s=MATCH"
ok 103 - search: commit message

expecting success of 9500.104 'search: grep': gitweb_run "p=.git;a=search;h=HEAD;st=grep;s=MATCH"
ok 104 - search: grep

expecting success of 9500.105 'search: pickaxe': gitweb_run "p=.git;a=search;h=HEAD;st=pickaxe;s=MATCH"
ok 105 - search: pickaxe

expecting success of 9500.106 'search: projects': gitweb_run "a=project_list;s=.git"
ok 106 - search: projects

expecting success of 9500.107 'README.html with non-ASCII characters (utf-8)': echo "<b>UTF-8 example:</b><br />" >.git/README.html &&
	 cat "$TEST_DIRECTORY"/t3900/1-UTF-8.txt >>.git/README.html &&
	 gitweb_run "p=.git;a=summary"
ok 107 - README.html with non-ASCII characters (utf-8)

Skipping syntax highlighting tests: 'highlight' not found
ok 108 # skip syntax highlighting (no highlight, unknown syntax) (missing HIGHLIGHT)

ok 109 # skip syntax highlighting (highlighted, shell script) (missing HIGHLIGHT)

ok 110 # skip syntax highlighting (highlighter language autodetection) (missing HIGHLIGHT)

expecting success of 9500.111 'forks: prepare': git init --bare foo.git &&
	 git --git-dir=foo.git --work-tree=. add file &&
	 git --git-dir=foo.git --work-tree=. commit -m "Initial commit" &&
	 echo "foo" >foo.git/description &&
	 mkdir -p foo &&
	 (cd foo &&
	  git clone --shared --bare ../foo.git foo-forked.git &&
	  echo "fork of foo" >foo-forked.git/description)
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9500-gitweb-standalone-no-errors/foo.git/
[main (root-commit) cae743e] Initial commit
 Author: A U Thor <author@example.com>
 1 file changed, 5 insertions(+)
 create mode 100644 file
Cloning into bare repository 'foo-forked.git'...
done.
ok 111 - forks: prepare

expecting success of 9500.112 'forks: projects list': gitweb_run
ok 112 - forks: projects list

expecting success of 9500.113 'forks: forks action': gitweb_run "p=foo.git;a=forks"
ok 113 - forks: forks action

expecting success of 9500.114 'ctags: tag cloud in projects list': mkdir .git/ctags &&
	 echo "2" >.git/ctags/foo &&
	 echo "1" >.git/ctags/bar &&
	gitweb_run
ok 114 - ctags: tag cloud in projects list

expecting success of 9500.115 'ctags: search projects by existing tag': gitweb_run "by_tag=foo"
ok 115 - ctags: search projects by existing tag

expecting success of 9500.116 'ctags: search projects by non existent tag': gitweb_run "by_tag=non-existent"
ok 116 - ctags: search projects by non existent tag

expecting success of 9500.117 'ctags: malformed tag weights': mkdir -p .git/ctags &&
	 echo "not-a-number" >.git/ctags/nan &&
	 echo "not-a-number-2" >.git/ctags/nan2 &&
	 echo "0.1" >.git/ctags/floating-point &&
	 gitweb_run
ok 117 - ctags: malformed tag weights

expecting success of 9500.118 'categories: projects list, only default category': echo "\$projects_list_group_categories = 1;" >>gitweb_config.perl &&
	 gitweb_run
ok 118 - categories: projects list, only default category

expecting success of 9500.119 'unborn HEAD: "summary" page (with "heads" subview)': {
		git checkout orphan_branch ||
		git checkout --orphan orphan_branch
	 } &&
	 test_when_finished "git checkout main" &&
	 gitweb_run "p=.git;a=summary"
error: pathspec 'orphan_branch' did not match any file(s) known to git
Switched to a new branch 'orphan_branch'
Switched to branch 'main'
ok 119 - unborn HEAD: "summary" page (with "heads" subview)

# passed all 119 test(s)
1..119
make[4]: Leaving directory '/<<PKGBUILDDIR>>/t'
/usr/bin/make aggregate-results
make[5]: Entering directory '/<<PKGBUILDDIR>>/t'
for f in 'test-results'/t*-*.counts; do \
	echo "$f"; \
done | '/bin/sh' ./aggregate-results.sh

missing prereq: !PCRE !PTHREADS !REFFILES AUTOIDENT BUILTIN_TXT_BISECT__HELPER BUILTIN_TXT_CHECKOUT__WORKER BUILTIN_TXT_ENV__HELPER BUILTIN_TXT_MERGE_OURS BUILTIN_TXT_MERGE_RECURSIVE BUILTIN_TXT_MERGE_RECURSIVE_OURS BUILTIN_TXT_MERGE_RECURSIVE_THEIRS BUILTIN_TXT_MERGE_SUBTREE BUILTIN_TXT_PICKAXE BUILTIN_TXT_SUBMODULE__HELPER BUILTIN_TXT_UPLOAD_ARCHIVE__WRITER CASE_INSENSITIVE_FS EXPENSIVE FSMONITOR_DAEMON GETTEXT_ISO_LOCALE GETTEXT_LOCALE GPGSSH GPGSSH_VERIFYTIME HIGHLIGHT JGIT LONG_IS_64BIT MB_REGEX MINGW NATIVE_CRLF PERLJSON PTHREAD REGEX_LOCALE RFC1991 RUNTIME_PREFIX SETFACL SIZE_T_IS_64BIT SYMLINKS_WINDOWS TAR_HUGE TAR_NEEDS_PAX_FALLBACK TIME_T_IS_64BIT USR_BIN_TIME UTF8_NFD_TO_NFC WINDOWS

fixed   0
success 26448
failed  0
broken  276
total   27024
make[5]: Leaving directory '/<<PKGBUILDDIR>>/t'
/usr/bin/make clean
make[5]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'chainlinttmp'
make[5]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[5]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'trash directory'.*
rm -f -r valgrind/bin
make[5]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[5]: Entering directory '/<<PKGBUILDDIR>>/t'
rm -f -r 'test-results'
rm -f .prove
make[5]: Leaving directory '/<<PKGBUILDDIR>>/t'
test -z 'test' || \
  GIT_TEST_OPTS='--verbose' \
  /usr/bin/make -C t \
  t9128-git-svn-cmd-branch.sh \
  t9167-git-svn-cmd-branch-subproject.sh \
  NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1 || :
make[2]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9167-git-svn-cmd-branch-subproject.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9167-git-svn-cmd-branch-subproject/.git/
expecting success of 9167.1 'initialize svnrepo': 
	mkdir import &&
	(
		cd import &&
		mkdir -p trunk/project branches tags &&
		(
			cd trunk/project &&
			echo foo > foo
		) &&
		svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null
	) &&
	rm -rf import &&
	svn_cmd co "$svnrepo"/trunk/project trunk/project &&
	(
		cd trunk/project &&
		echo bar >> foo &&
		svn_cmd ci -m "updated trunk"
	) &&
	rm -rf trunk

A    trunk/project/foo
Checked out revision 1.
Sending        foo
Transmitting file data .done
Committing transaction...
Committed revision 2.
ok 1 - initialize svnrepo

expecting success of 9167.2 'import into git': 
	git svn init --trunk=trunk/project --branches=branches/*/project \
		--tags=tags/*/project "$svnrepo" &&
	git svn fetch &&
	git checkout remotes/origin/trunk

	A	foo
r1 = 10731028c73ebedb7b7899c43fb4fec65a10509b (refs/remotes/origin/trunk)
	M	foo
r2 = 2283e9b63df0aed8dd37508cfbddac7231670974 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project r2
Note: switching to 'remotes/origin/trunk'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 2283e9b updated trunk
ok 2 - import into git

expecting success of 9167.3 'git svn branch tests': 
	test_must_fail git svn branch a &&
	git svn branch --parents a &&
	test_must_fail git svn branch -t tag1 &&
	git svn branch --parents -t tag1 &&
	test_must_fail git svn branch --tag tag2 &&
	git svn branch --parents --tag tag2 &&
	test_must_fail git svn tag tag3 &&
	git svn tag --parents tag3

Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/branches/a/project...
Filesystem has no item: File not found: transaction '2-2', path '/branches/a/project' at /<<PKGBUILDDIR>>/git-svn line 1206.

Creating parent folder file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/branches/a ...
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/branches/a/project...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/branches/a/project, 2
Found branch parent: (refs/remotes/origin/a) 2283e9b63df0aed8dd37508cfbddac7231670974
Following parent with do_switch
Successfully followed parent
r4 = c3e2eb7e0f0417bb4d806250593af4a51ce196b2 (refs/remotes/origin/a)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag1/project...
Filesystem has no item: File not found: transaction '4-5', path '/tags/tag1/project' at /<<PKGBUILDDIR>>/git-svn line 1206.

Creating parent folder file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag1 ...
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag1/project...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag1/project, 2
Found branch parent: (refs/remotes/origin/tags/tag1) 2283e9b63df0aed8dd37508cfbddac7231670974
Following parent with do_switch
Successfully followed parent
r6 = 3fcd9d5b22b2c222767c22bede9db1084a8f12b4 (refs/remotes/origin/tags/tag1)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag2/project...
Filesystem has no item: File not found: transaction '6-8', path '/tags/tag2/project' at /<<PKGBUILDDIR>>/git-svn line 1206.

Creating parent folder file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag2 ...
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag2/project...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag2/project, 2
Found branch parent: (refs/remotes/origin/tags/tag2) 2283e9b63df0aed8dd37508cfbddac7231670974
Following parent with do_switch
Successfully followed parent
r8 = eca7e16e8d7cf53e1f62862fd064c48a4d98c38c (refs/remotes/origin/tags/tag2)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag3/project...
Filesystem has no item: File not found: transaction '8-b', path '/tags/tag3/project' at /<<PKGBUILDDIR>>/git-svn line 1206.

Creating parent folder file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag3 ...
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag3/project...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/trunk/project => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9167-git-svn-cmd-branch-subproject/svnrepo/tags/tag3/project, 2
Found branch parent: (refs/remotes/origin/tags/tag3) 2283e9b63df0aed8dd37508cfbddac7231670974
Following parent with do_switch
Successfully followed parent
r10 = d44a9e46823bdc49f22e677c2fded42fac0cd8bd (refs/remotes/origin/tags/tag3)
ok 3 - git svn branch tests

# passed all 3 test(s)
1..3
make[2]: Leaving directory '/<<PKGBUILDDIR>>/t'
make[2]: Entering directory '/<<PKGBUILDDIR>>/t'
*** t9128-git-svn-cmd-branch.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t9128-git-svn-cmd-branch/.git/
expecting success of 9128.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
		) &&
		rm -rf import &&
		svn_cmd co "$svnrepo"/trunk trunk &&
		(cd trunk &&
		echo bar >> foo &&
		svn_cmd ci -m "updated trunk"
		) &&
		rm -rf trunk
	)

A    trunk/foo
Checked out revision 1.
Sending        foo
Transmitting file data .done
Committing transaction...
Committed revision 2.
ok 1 - initialize svnrepo

expecting success of 9128.2 'import into git': 
	git svn init --stdlayout "$svnrepo" &&
	git svn fetch &&
	git checkout remotes/origin/trunk

	A	foo
r1 = a1ef8323cffa1e598c7b10378c48c1af7070b253 (refs/remotes/origin/trunk)
	M	foo
r2 = b26df43ff39c62d55e044b38fc0171ccc8ba0b08 (refs/remotes/origin/trunk)
Checked out HEAD:
  file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk r2
Note: switching to 'remotes/origin/trunk'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at b26df43 updated trunk
ok 2 - import into git

expecting success of 9128.3 'git svn branch tests': 
	git svn branch a &&
	base=$(git rev-parse HEAD:) &&
	test $base = $(git rev-parse remotes/origin/a:) &&
	git svn branch -m "created branch b blah" b &&
	test $base = $(git rev-parse remotes/origin/b:) &&
	test_must_fail git branch -m "no branchname" &&
	git svn branch -n c &&
	test_must_fail git rev-parse remotes/origin/c &&
	test_must_fail git svn branch a &&
	git svn branch -t tag1 &&
	test $base = $(git rev-parse remotes/origin/tags/tag1:) &&
	git svn branch --tag tag2 &&
	test $base = $(git rev-parse remotes/origin/tags/tag2:) &&
	git svn tag tag3 &&
	test $base = $(git rev-parse remotes/origin/tags/tag3:) &&
	git svn tag -m "created tag4 foo" tag4 &&
	test $base = $(git rev-parse remotes/origin/tags/tag4:) &&
	test_must_fail git svn tag -m "no tagname" &&
	git svn tag -n tag5 &&
	test_must_fail git rev-parse remotes/origin/tags/tag5 &&
	test_must_fail git svn tag tag1

Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/a...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/a, 2
Found branch parent: (refs/remotes/origin/a) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r3 = 06daf4f284b416312683b3faf9ece62e5b21475f (refs/remotes/origin/a)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/b...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/b, 2
Found branch parent: (refs/remotes/origin/b) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r4 = fdc599a2f8872242124e1f298e4faa613bfd3265 (refs/remotes/origin/b)
fatal: cannot rename the current branch while not on any.
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/c...
fatal: ambiguous argument 'remotes/origin/c': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
remotes/origin/c
branch a already exists

Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag1...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag1, 2
Found branch parent: (refs/remotes/origin/tags/tag1) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r5 = 281307e79b5aad7fff5f79e458bcfa8c9a7a4a21 (refs/remotes/origin/tags/tag1)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag2...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag2, 2
Found branch parent: (refs/remotes/origin/tags/tag2) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r6 = f0934736fb45c15a75a138b707ad724c2a39e81f (refs/remotes/origin/tags/tag2)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag3...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag3, 2
Found branch parent: (refs/remotes/origin/tags/tag3) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r7 = ad0019793ae0dc392938884867456c00712fa6bd (refs/remotes/origin/tags/tag3)
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag4...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag4, 2
Found branch parent: (refs/remotes/origin/tags/tag4) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r8 = 4bc540e74c23ce52159b7220c0eb2dc5e651fc7c (refs/remotes/origin/tags/tag4)
tag name required

Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk at r2 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag5...
fatal: ambiguous argument 'remotes/origin/tags/tag5': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
remotes/origin/tags/tag5
branch tag1 already exists

ok 3 - git svn branch tests

expecting success of 9128.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

A    svn/branches
A    svn/branches/a
A    svn/branches/a/foo
A    svn/branches/b
A    svn/branches/b/foo
A    svn/tags
A    svn/tags/tag1
A    svn/tags/tag1/foo
A    svn/tags/tag2
A    svn/tags/tag2/foo
A    svn/tags/tag3
A    svn/tags/tag3/foo
A    svn/tags/tag4
A    svn/tags/tag4/foo
A    svn/trunk
A    svn/trunk/foo
Checked out revision 8.
A         mirror
A         mirror/trunk
A         mirror/tags
A         mirror/branches
Adding         mirror
Adding         mirror/branches
Adding         mirror/tags
Adding         mirror/trunk
Committing transaction...
Committed revision 9.
Using higher level of URL: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo
branch_from: /tags => /tags/tag1
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag1 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/tags/tag1, 8
Found branch parent: (refs/remotes/mirror/tags/tag1) 281307e79b5aad7fff5f79e458bcfa8c9a7a4a21
Following parent with do_switch
Successfully followed parent
r9 = 33540c8ee150bf6fe3a0fed8d5f0824f4dcc192a (refs/remotes/mirror/tags/tag1)
branch_from: /tags => /tags/tag4
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag4 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/tags/tag4, 8
Found branch parent: (refs/remotes/mirror/tags/tag4) 4bc540e74c23ce52159b7220c0eb2dc5e651fc7c
Following parent with do_switch
Successfully followed parent
r9 = 32231e93f0b9283fd180d5dc8ca6d87999d8b777 (refs/remotes/mirror/tags/tag4)
branch_from: /branches => /branches/a
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/a => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/branches/a, 8
Found branch parent: (refs/remotes/mirror/a) 06daf4f284b416312683b3faf9ece62e5b21475f
Following parent with do_switch
Successfully followed parent
r9 = 24dd11f03405686012e01d4774bd7cec7b3ca6aa (refs/remotes/mirror/a)
branch_from: /tags => /tags/tag2
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag2 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/tags/tag2, 8
Found branch parent: (refs/remotes/mirror/tags/tag2) f0934736fb45c15a75a138b707ad724c2a39e81f
Following parent with do_switch
Successfully followed parent
r9 = fabd3156820050bafed0f0cf2ed2b7db8ba6813d (refs/remotes/mirror/tags/tag2)
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/trunk, 8
Found branch parent: (refs/remotes/mirror/trunk) b26df43ff39c62d55e044b38fc0171ccc8ba0b08
Following parent with do_switch
Successfully followed parent
r9 = 1df48a66874d1e5fe2bf03c3292b54b44c7f48d5 (refs/remotes/mirror/trunk)
branch_from: /branches => /branches/b
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/branches/b => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/branches/b, 8
Found branch parent: (refs/remotes/mirror/b) fdc599a2f8872242124e1f298e4faa613bfd3265
Following parent with do_switch
Successfully followed parent
r9 = 39e239caaca4a68ddbf763726cf2e48da166abe6 (refs/remotes/mirror/b)
branch_from: /tags => /tags/tag3
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/tags/tag3 => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/tags/tag3, 8
Found branch parent: (refs/remotes/mirror/tags/tag3) ad0019793ae0dc392938884867456c00712fa6bd
Following parent with do_switch
Successfully followed parent
r9 = cce0cf04ad82f3e396513dbbf650e12167869779 (refs/remotes/mirror/tags/tag3)
Previous HEAD position was b26df43 updated trunk
HEAD is now at 1df48a6 made mirror
Copying file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/trunk at r9 to file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/branches/d...
Found possible branch point: file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/trunk => file:///<<PKGBUILDDIR>>/t/trash%20directory.t9128-git-svn-cmd-branch/svnrepo/mirror/branches/d, 9
Found branch parent: (refs/remotes/mirror/d) 1df48a66874d1e5fe2bf03c3292b54b44c7f48d5
Following parent with do_switch
Successfully followed parent
r10 = 34d2418544d758b78dbdb80b206b69cdcce87973 (refs/remotes/mirror/d)
fatal: ambiguous argument 'remotes/d': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
remotes/d
ok 4 - branch uses correct svn-remote

# passed all 4 test(s)
1..4
make[2]: Leaving directory '/<<PKGBUILDDIR>>/t'
test -z 'test' || \
  GIT_TEST_OPTS='--verbose' /usr/bin/make -C contrib/subtree test NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
/usr/bin/make -C ../../ GIT-VERSION-FILE
make[3]: 'GIT-VERSION-FILE' is up to date.
/usr/bin/make -C t/ test
make[3]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
rm -f -r '../../../t/test-results'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
/usr/bin/make aggregate-results-and-cleanup
make[4]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
*** t7900-subtree.sh ***
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/.git/
expecting success of 7900.1 'shows short help text for -h': 
	test_expect_code 129 git subtree -h >out 2>err &&
	test_must_be_empty err &&
	grep -e "^ *or: git subtree pull" out &&
	grep -e --annotate out

   or: git subtree pull  --prefix=<prefix> <repository> <ref>
    --annotate ...        add a prefix to commit message of new commits
ok 1 - shows short help text for -h

expecting success of 7900.2 'no merge from non-existent subtree': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		test_must_fail git subtree merge --prefix="sub dir" FETCH_HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/2/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/2/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
fatal: 'sub dir' does not exist; use 'git subtree add'
ok 2 - no merge from non-existent subtree

expecting success of 7900.3 'no pull from non-existent subtree': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/3/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/3/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
fatal: 'sub dir' does not exist; use 'git subtree add'
ok 3 - no pull from non-existent subtree

expecting success of 7900.4 'add rejects flags for split': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		test_wrong_flag git subtree add --prefix="sub dir" --annotate=foo FETCH_HEAD &&
		test_wrong_flag git subtree add --prefix="sub dir" --branch=foo FETCH_HEAD &&
		test_wrong_flag git subtree add --prefix="sub dir" --ignore-joins FETCH_HEAD &&
		test_wrong_flag git subtree add --prefix="sub dir" --onto=foo FETCH_HEAD &&
		test_wrong_flag git subtree add --prefix="sub dir" --rejoin FETCH_HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/4/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/4/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
fatal: the '--annotate' flag does not make sense with 'git subtree add'.
fatal: the '-b' flag does not make sense with 'git subtree add'.
fatal: the '--ignore-joins' flag does not make sense with 'git subtree add'.
fatal: the '--onto' flag does not make sense with 'git subtree add'.
fatal: the '--rejoin' flag does not make sense with 'git subtree add'.
ok 4 - add rejects flags for split

expecting success of 7900.5 'add subproj as subtree into sub dir/ with --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		test "$(last_commit_subject)" = "Add 'sub dir/' from commit '$(git rev-parse FETCH_HEAD)'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/5/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/5/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 5 - add subproj as subtree into sub dir/ with --prefix

expecting success of 7900.6 'add subproj as subtree into sub dir/ with --prefix and --message': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" --message="Added subproject" FETCH_HEAD &&
		test "$(last_commit_subject)" = "Added subproject"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/6/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/6/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 6 - add subproj as subtree into sub dir/ with --prefix and --message

expecting success of 7900.7 'add subproj as subtree into sub dir/ with --prefix as -P and --message as -m': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add -P "sub dir" -m "Added subproject" FETCH_HEAD &&
		test "$(last_commit_subject)" = "Added subproject"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/7/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/7/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 7 - add subproj as subtree into sub dir/ with --prefix as -P and --message as -m

expecting success of 7900.8 'add subproj as subtree into sub dir/ with --squash and --prefix and --message': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" --message="Added subproject with squash" --squash FETCH_HEAD &&
		test "$(last_commit_subject)" = "Added subproject with squash"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/8/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/8/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 8 - add subproj as subtree into sub dir/ with --squash and --prefix and --message

expecting success of 7900.9 'merge rejects flags for split': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		test_wrong_flag git subtree merge --prefix="sub dir" --annotate=foo FETCH_HEAD &&
		test_wrong_flag git subtree merge --prefix="sub dir" --branch=foo FETCH_HEAD &&
		test_wrong_flag git subtree merge --prefix="sub dir" --ignore-joins FETCH_HEAD &&
		test_wrong_flag git subtree merge --prefix="sub dir" --onto=foo FETCH_HEAD &&
		test_wrong_flag git subtree merge --prefix="sub dir" --rejoin FETCH_HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/9/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/9/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 92abdb3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
fatal: the '--annotate' flag does not make sense with 'git subtree merge'.
fatal: the '-b' flag does not make sense with 'git subtree merge'.
fatal: the '--ignore-joins' flag does not make sense with 'git subtree merge'.
fatal: the '--onto' flag does not make sense with 'git subtree merge'.
fatal: the '--rejoin' flag does not make sense with 'git subtree merge'.
ok 9 - merge rejects flags for split

expecting success of 7900.10 'merge new subproj history into sub dir/ with --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		test "$(last_commit_subject)" = "Merge commit '$(git rev-parse FETCH_HEAD)'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/10/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/10/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 92abdb3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
ok 10 - merge new subproj history into sub dir/ with --prefix

expecting success of 7900.11 'merge new subproj history into sub dir/ with --prefix and --message': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" --message="Merged changes from subproject" FETCH_HEAD &&
		test "$(last_commit_subject)" = "Merged changes from subproject"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/11/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/11/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 92abdb3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
ok 11 - merge new subproj history into sub dir/ with --prefix and --message

expecting success of 7900.12 'merge new subproj history into sub dir/ with --squash and --prefix and --message': 
	subtree_test_create_repo "$test_count/sub proj" &&
	subtree_test_create_repo "$test_count" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" --message="Merged changes from subproject using squash" --squash FETCH_HEAD &&
		test "$(last_commit_subject)" = "Merged changes from subproject using squash"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/12/sub proj/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/12/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 92abdb3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
ok 12 - merge new subproj history into sub dir/ with --squash and --prefix and --message

expecting success of 7900.13 'merge the added subproj again, should do nothing': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		# this shouldn not actually do anything, since FETCH_HEAD
		# is already a parent
		result=$(git merge -s ours -m "merge -s -ours" FETCH_HEAD) &&
		test "${result}" = "Already up to date."
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/13/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/13/sub proj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 13 - merge the added subproj again, should do nothing

expecting success of 7900.14 'merge new subproj history into subdir/ with a slash appended to the argument of --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/subproj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/subproj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./subproj HEAD &&
		git subtree add --prefix=subdir/ FETCH_HEAD
	) &&
	test_create_commit "$test_count/subproj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./subproj HEAD &&
		git subtree merge --prefix=subdir/ FETCH_HEAD &&
		test "$(last_commit_subject)" = "Merge commit '$(git rev-parse FETCH_HEAD)'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/14/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/14/subproj/.git/
[master (root-commit) 9b6e8f6] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 5280958] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./subproj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'subdir'
[master 92abdb3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./subproj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 subdir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 subdir/sub2
ok 14 - merge new subproj history into subdir/ with a slash appended to the argument of --prefix

expecting success of 7900.15 'merge with --squash after annotated tag was added/merged with --squash pre-v2.32.0 ': 
	test_create_pre2_32_repo "$test_count" &&
	git -C "$test_count-clone" fetch "../$test_count-sub" sub2  &&
	test_must_fail git -C "$test_count-clone" subtree merge --prefix="sub" --squash FETCH_HEAD &&
	git -C "$test_count-clone" subtree merge --prefix="sub" --squash FETCH_HEAD  "../$test_count-sub"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/15/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/15-sub/.git/
[master (root-commit) 9ca29bf] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1.t
[master (root-commit) 838835e] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1.t
git fetch ../15-sub sub1
From ../15-sub
 * tag               sub1       -> FETCH_HEAD
Added dir 'sub'
[master 49416b1] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2.t
Cloning into '15-clone'...
From ../15-sub
 * tag               sub2       -> FETCH_HEAD
fatal: could not rev-parse split hash ee9f6bdafab348b61843d13598aa55173a8fdb03 from commit d708504b4ba3cad2744e050f26f2f855b15333af
hint: hash might be a tag, try fetching it from the subtree repository:
hint:    git fetch <subtree-repository> ee9f6bdafab348b61843d13598aa55173a8fdb03
From ../15-sub
 * branch            ee9f6bdafab348b61843d13598aa55173a8fdb03 -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub/sub2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub/sub2.t
ok 15 - merge with --squash after annotated tag was added/merged with --squash pre-v2.32.0 

expecting success of 7900.16 'split requires option --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		echo "fatal: you must provide the --prefix option." >expected &&
		test_must_fail git subtree split >actual 2>&1 &&
		test_debug "printf expected: " &&
		test_debug "cat expected" &&
		test_debug "printf actual: " &&
		test_debug "cat actual" &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/16/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/16/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 16 - split requires option --prefix

expecting success of 7900.17 'split requires path given by option --prefix must exist': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		echo "fatal: 'non-existent-directory' does not exist; use 'git subtree add'" >expected &&
		test_must_fail git subtree split --prefix=non-existent-directory >actual 2>&1 &&
		test_debug "printf expected: " &&
		test_debug "cat expected" &&
		test_debug "printf actual: " &&
		test_debug "cat actual" &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/17/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/17/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 17 - split requires path given by option --prefix must exist

expecting success of 7900.18 'split rejects flags for add': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		test_wrong_flag git subtree split --prefix="sub dir" --squash &&
		test_wrong_flag git subtree split --prefix="sub dir" --message=foo
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/18/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/18/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
fatal: the '--squash' flag does not make sense with 'git subtree split'.
fatal: the '-m' flag does not make sense with 'git subtree split'.
ok 18 - split rejects flags for add

expecting success of 7900.19 'split sub dir/ with --rejoin': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree split --prefix="sub dir" --annotate="*" --rejoin &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$split_hash'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/19/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/19/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
b67c45bced0b24ddd222efb4914a061a8d3ff40f
ok 19 - split sub dir/ with --rejoin

expecting success of 7900.20 'split sub dir/ with --rejoin from scratch': 
	subtree_test_create_repo "$test_count" &&
	test_create_commit "$test_count" main1 &&
	(
		cd "$test_count" &&
		mkdir "sub dir" &&
		echo file >"sub dir"/file &&
		git add "sub dir/file" &&
		git commit -m"sub dir file" &&
		split_hash=$(git subtree split --prefix="sub dir" --rejoin) &&
		git subtree split --prefix="sub dir" --rejoin &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$split_hash'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/20/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master 574c2e7] sub dir file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/file
1/2 (0) [0]
2/2 (1) [0]
Added dir 'sub dir'
1/3 (0) [0]
2/3 (0) [0]
3/3 (0) [0]
Already up to date.
c7eedae2d5622586d83b85467c40807d72d05867
ok 20 - split sub dir/ with --rejoin from scratch

expecting success of 7900.21 'split sub dir/ with --rejoin and --message': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --message="Split & rejoin" --annotate="*" --rejoin &&
		test "$(last_commit_subject)" = "Split & rejoin"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/21/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/21/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
b67c45bced0b24ddd222efb4914a061a8d3ff40f
ok 21 - split sub dir/ with --rejoin and --message

expecting success of 7900.22 'split "sub dir"/ with --rejoin and --squash': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" --squash FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" --squash ./"sub proj" HEAD &&
		MAIN=$(git rev-parse --verify HEAD) &&
		SUB=$(git -C "sub proj" rev-parse --verify HEAD) &&

		SPLIT=$(git subtree split --prefix="sub dir" --annotate="*" --rejoin --squash) &&

		test_must_fail git merge-base --is-ancestor $SUB HEAD &&
		test_must_fail git merge-base --is-ancestor $SPLIT HEAD &&
		git rev-list HEAD ^$MAIN >commit-list &&
		test_line_count = 2 commit-list &&
		test "$(git rev-parse --verify HEAD:)"           = "$(git rev-parse --verify $MAIN:)" &&
		test "$(git rev-parse --verify HEAD:"sub dir")"  = "$(git rev-parse --verify $SPLIT:)" &&
		test "$(git rev-parse --verify HEAD^1)"          = $MAIN &&
		test "$(git rev-parse --verify HEAD^2)"         != $SPLIT &&
		test "$(git rev-parse --verify HEAD^2:)"         = "$(git rev-parse --verify $SPLIT:)" &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$SPLIT'"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/22/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/22/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master e842a28] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master ee591ba] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 2860269] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (1) [0]
3/8 (1) [0]
4/8 (2) [0]
5/8 (3) [0]
6/8 (4) [0]
7/8 (5) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
ok 22 - split "sub dir"/ with --rejoin and --squash

expecting success of 7900.23 'split then pull "sub dir"/ with --rejoin and --squash': 
	# 1. "add"
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	git -C "$test_count" subtree --prefix="sub dir" add --squash ./"sub proj" HEAD &&

	# 2. commit from parent
	test_create_commit "$test_count" "sub dir"/main-sub1 &&

	# 3. "split --rejoin --squash"
	git -C "$test_count" subtree --prefix="sub dir" split --rejoin --squash &&

	# 4. "pull --squash"
	test_create_commit "$test_count/sub proj" sub2 &&
	git -C "$test_count" subtree -d --prefix="sub dir" pull --squash ./"sub proj" HEAD &&

	test_must_fail git merge-base HEAD FETCH_HEAD

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/23/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/23/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
git fetch ./sub proj HEAD
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master e842a28] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
1/4 (0) [0]
2/4 (1) [0]
3/4 (1) [0]
4/4 (2) [0]
Merge made by the 'ort' strategy.
002633c3446bebc69fd0c847359083876ab15e26
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
command: {pull}
quiet: {}
dir: {sub dir}
opts: {./sub proj HEAD}

From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Looking for latest squash (dir=sub dir, repository=./sub proj)...
  START ffd3030fdadb0cc8ed4b9b4affee1f93173cd645 
  {{//}}
  Split 'sub dir/' into commit '002633c3446bebc69fd0c847359083876ab15e26'
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645//}}
    
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645//}}
  git-subtree-dir: sub dir
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645//}}
  git-subtree-mainline: e842a28cbb472a0ffb28981b4347bd14c2ea0c88 
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645//}}
  git-subtree-split: 002633c3446bebc69fd0c847359083876ab15e26 
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645/e842a28cbb472a0ffb28981b4347bd14c2ea0c88/}}
    
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645/e842a28cbb472a0ffb28981b4347bd14c2ea0c88/002633c3446bebc69fd0c847359083876ab15e26}}
  END  
  {{ffd3030fdadb0cc8ed4b9b4affee1f93173cd645/e842a28cbb472a0ffb28981b4347bd14c2ea0c88/002633c3446bebc69fd0c847359083876ab15e26}}
  Squash found: c46ea0e1b066c0371b162b0e5caead1a6dfa0bcb 002633c3446bebc69fd0c847359083876ab15e26
New squash commit: 68c35e14e3d1604849f876105d6d973dc3a19d07
Merge made by the 'ort' strategy.
 sub dir/main-sub1 | 1 -
 sub dir/sub2      | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 sub dir/main-sub1
 create mode 100644 sub dir/sub2
fatal: Not a valid object name HEAD
ok 23 - split then pull "sub dir"/ with --rejoin and --squash

expecting success of 7900.24 'split "sub dir"/ with --branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
		test "$(git rev-parse subproj-br)" = "$split_hash"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/24/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/24/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Created branch 'subproj-br'
b67c45bced0b24ddd222efb4914a061a8d3ff40f
ok 24 - split "sub dir"/ with --branch

expecting success of 7900.25 'check hash of split': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
		test "$(git rev-parse subproj-br)" = "$split_hash" &&
		# Check hash of split
		new_hash=$(git rev-parse subproj-br^2) &&
		(
			cd ./"sub proj" &&
			subdir_hash=$(git rev-parse HEAD) &&
			test "$new_hash" = "$subdir_hash"
		)
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/25/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/25/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Created branch 'subproj-br'
b67c45bced0b24ddd222efb4914a061a8d3ff40f
ok 25 - check hash of split

expecting success of 7900.26 'split "sub dir"/ with --branch for an existing branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git branch subproj-br FETCH_HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
		test "$(git rev-parse subproj-br)" = "$split_hash"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/26/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/26/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Updated branch 'subproj-br'
b67c45bced0b24ddd222efb4914a061a8d3ff40f
ok 26 - split "sub dir"/ with --branch for an existing branch

expecting success of 7900.27 'split "sub dir"/ with --branch for an incompatible branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git branch init HEAD &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		test_must_fail git subtree split --prefix="sub dir" --branch init
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/27/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/27/sub proj/.git/
[master (root-commit) a18fb3c] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) e2b8abe] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 59ba512] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 93c4ecd] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ea20fbd] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 28cd1b3] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
fatal: branch 'init' is not an ancestor of commit 'e63918057ed94a46ed4cce79b47c14ca78d9238b'.
ok 27 - split "sub dir"/ with --branch for an incompatible branch

expecting success of 7900.28 'split after annotated tag was added/merged with --squash pre-v2.32.0': 
	test_create_pre2_32_repo "$test_count" &&
	test_must_fail git -C "$test_count-clone" subtree split --prefix="sub" HEAD &&
	git -C "$test_count-clone" subtree split --prefix="sub" HEAD "../$test_count-sub"

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/28/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/28-sub/.git/
[master (root-commit) 8930ed7] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1.t
[master (root-commit) 0f2b237] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1.t
git fetch ../28-sub sub1
From ../28-sub
 * tag               sub1       -> FETCH_HEAD
Added dir 'sub'
[master a345e53] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2.t
Cloning into '28-clone'...
fatal: could not rev-parse split hash 7b6dfcee7f4578b0886a23acb2b9f50a2ba24581 from commit c9967752b2944d4c0a308d4e08570062e0066c06
hint: hash might be a tag, try fetching it from the subtree repository:
hint:    git fetch <subtree-repository> 7b6dfcee7f4578b0886a23acb2b9f50a2ba24581
From ../28-sub
 * branch            7b6dfcee7f4578b0886a23acb2b9f50a2ba24581 -> FETCH_HEAD
1/3 (0) [0]
2/3 (1) [0]
3/3 (1) [0]
0f2b237c8656ee6b2373d936a9fe5f3a434db58f
ok 28 - split after annotated tag was added/merged with --squash pre-v2.32.0

expecting success of 7900.29 'pull requires option --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		test_must_fail git subtree pull ./"sub proj" HEAD >out 2>err &&

		echo "fatal: you must provide the --prefix option." >expected &&
		test_must_be_empty out &&
		test_cmp expected err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/29/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/29/sub proj/.git/
[master (root-commit) c727e57] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 2788d90] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master a139099] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
ok 29 - pull requires option --prefix

expecting success of 7900.30 'pull requires path given by option --prefix must exist': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" HEAD >out 2>err &&

		echo "fatal: 'sub dir' does not exist; use 'git subtree add'" >expected &&
		test_must_be_empty out &&
		test_cmp expected err
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/30/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/30/sub proj/.git/
[master (root-commit) c727e57] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 2788d90] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
ok 30 - pull requires path given by option --prefix must exist

expecting success of 7900.31 'pull basic operation': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		exp=$(git -C "sub proj" rev-parse --verify HEAD:) &&
		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
		act=$(git rev-parse --verify HEAD:"sub dir") &&
		test "$act" = "$exp"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/31/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/31/sub proj/.git/
[master (root-commit) c727e57] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 2788d90] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master a139099] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
ok 31 - pull basic operation

expecting success of 7900.32 'pull rejects flags for split': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		test_must_fail git subtree pull --prefix="sub dir" --annotate=foo ./"sub proj" HEAD &&
		test_must_fail git subtree pull --prefix="sub dir" --branch=foo ./"sub proj" HEAD &&
		test_must_fail git subtree pull --prefix="sub dir" --ignore-joins ./"sub proj" HEAD &&
		test_must_fail git subtree pull --prefix="sub dir" --onto=foo ./"sub proj" HEAD &&
		test_must_fail git subtree pull --prefix="sub dir" --rejoin ./"sub proj" HEAD
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/32/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/32/sub proj/.git/
[master (root-commit) c727e57] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 2788d90] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master a139099] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
fatal: the '--annotate' flag does not make sense with 'git subtree pull'.
fatal: the '-b' flag does not make sense with 'git subtree pull'.
fatal: the '--ignore-joins' flag does not make sense with 'git subtree pull'.
fatal: the '--onto' flag does not make sense with 'git subtree pull'.
fatal: the '--rejoin' flag does not make sense with 'git subtree pull'.
ok 32 - pull rejects flags for split

expecting success of 7900.33 'pull with --squash after annotated tag was added/merged with --squash pre-v2.32.0 ': 
	test_create_pre2_32_repo "$test_count" &&
	git -C "$test_count-clone" subtree -d pull --prefix="sub" --squash "../$test_count-sub" sub2

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/33/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/33-sub/.git/
[master (root-commit) 208f99b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1.t
[master (root-commit) 7b46b16] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1.t
git fetch ../33-sub sub1
From ../33-sub
 * tag               sub1       -> FETCH_HEAD
Added dir 'sub'
[master 4684be3] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2.t
Cloning into '33-clone'...
command: {pull}
quiet: {}
dir: {sub}
opts: {../33-sub sub2}

From ../33-sub
 * tag               sub2       -> FETCH_HEAD
Looking for latest squash (dir=sub, repository=../33-sub)...
  START be4559e8719f47ffe659440318826fb868ace6f3 
  {{//}}
  Squashed 'sub/' content from commit 7b46b16
  {{be4559e8719f47ffe659440318826fb868ace6f3//}}
    
  {{be4559e8719f47ffe659440318826fb868ace6f3//}}
  git-subtree-dir: sub 
  {{be4559e8719f47ffe659440318826fb868ace6f3//}}
  git-subtree-split: 1888923c872dcf62ad3de21f4ba251d4a0b72669 
  {{be4559e8719f47ffe659440318826fb868ace6f3//}}
From ../33-sub
 * branch            1888923c872dcf62ad3de21f4ba251d4a0b72669 -> FETCH_HEAD
    
  {{be4559e8719f47ffe659440318826fb868ace6f3//7b46b163255c7ea1d0c39e79bbf32606dc1f2c44}}
    
  {{be4559e8719f47ffe659440318826fb868ace6f3//7b46b163255c7ea1d0c39e79bbf32606dc1f2c44}}
  END  
  {{be4559e8719f47ffe659440318826fb868ace6f3//7b46b163255c7ea1d0c39e79bbf32606dc1f2c44}}
  Squash found: be4559e8719f47ffe659440318826fb868ace6f3 7b46b163255c7ea1d0c39e79bbf32606dc1f2c44
New squash commit: 683495ff4ccc99c192f5867e0a92579db06cd21f
Merge made by the 'ort' strategy.
 sub/sub2.t | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub/sub2.t
ok 33 - pull with --squash after annotated tag was added/merged with --squash pre-v2.32.0 

expecting success of 7900.34 'push requires option --prefix': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		echo "fatal: you must provide the --prefix option." >expected &&
		test_must_fail git subtree push "./sub proj" from-mainline >actual 2>&1 &&
		test_debug "printf expected: " &&
		test_debug "cat expected" &&
		test_debug "printf actual: " &&
		test_debug "cat actual" &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/34/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/34/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 34 - push requires option --prefix

expecting success of 7900.35 'push requires path given by option --prefix must exist': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD &&
		echo "fatal: 'non-existent-directory' does not exist; use 'git subtree add'" >expected &&
		test_must_fail git subtree push --prefix=non-existent-directory "./sub proj" from-mainline >actual 2>&1 &&
		test_debug "printf expected: " &&
		test_debug "cat expected" &&
		test_debug "printf actual: " &&
		test_debug "cat actual" &&
		test_cmp expected actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/35/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/35/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
ok 35 - push requires path given by option --prefix must exist

expecting success of 7900.36 'push rejects flags for add': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		test_wrong_flag git subtree split --prefix="sub dir" --squash ./"sub proj" from-mainline &&
		test_wrong_flag git subtree split --prefix="sub dir" --message=foo ./"sub proj" from-mainline
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/36/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/36/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
fatal: the '--squash' flag does not make sense with 'git subtree split'.
fatal: the '-m' flag does not make sense with 'git subtree split'.
ok 36 - push rejects flags for add

expecting success of 7900.37 'push basic operation': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		before=$(git rev-parse --verify HEAD) &&
		split_hash=$(git subtree split --prefix="sub dir") &&
		git subtree push --prefix="sub dir" ./"sub proj" from-mainline &&
		test "$before" = "$(git rev-parse --verify HEAD)" &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/37/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/37/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
To ./sub proj
 * [new branch]      64ab963424d3756837a288c81d869de830027dac -> from-mainline
ok 37 - push basic operation

expecting success of 7900.38 'push sub dir/ with --rejoin': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree push --prefix="sub dir" --annotate="*" --rejoin ./"sub proj" from-mainline &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$split_hash'" &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/38/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/38/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
To ./sub proj
 * [new branch]      9640c39b2fe952fd90a33ac07b051954043e1726 -> from-mainline
ok 38 - push sub dir/ with --rejoin

expecting success of 7900.39 'push sub dir/ with --rejoin from scratch': 
	subtree_test_create_repo "$test_count" &&
	test_create_commit "$test_count" main1 &&
	(
		cd "$test_count" &&
		mkdir "sub dir" &&
		echo file >"sub dir"/file &&
		git add "sub dir/file" &&
		git commit -m"sub dir file" &&
		split_hash=$(git subtree split --prefix="sub dir" --rejoin) &&
		git init --bare "sub proj.git" &&
		git subtree push --prefix="sub dir" --rejoin ./"sub proj.git" from-mainline &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$split_hash'" &&
		test "$split_hash" = "$(git -C "sub proj.git" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/39/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master d49f0a6] sub dir file
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/file
1/2 (0) [0]
2/2 (1) [0]
Added dir 'sub dir'
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/39/sub proj.git/
git push using:  ./sub proj.git from-mainline
1/3 (0) [0]
2/3 (0) [0]
3/3 (0) [0]
Already up to date.
To ./sub proj.git
 * [new branch]      0d52ed24d8a2675f30397e0a5d214728a993b6cc -> from-mainline
ok 39 - push sub dir/ with --rejoin from scratch

expecting success of 7900.40 'push sub dir/ with --rejoin and --message': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree push --prefix="sub dir" --message="Split & rejoin" --annotate="*" --rejoin ./"sub proj" from-mainline &&
		test "$(last_commit_subject)" = "Split & rejoin" &&
		split_hash="$(git rev-parse --verify HEAD^2)" &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/40/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/40/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
To ./sub proj
 * [new branch]      9640c39b2fe952fd90a33ac07b051954043e1726 -> from-mainline
ok 40 - push sub dir/ with --rejoin and --message

expecting success of 7900.41 'push "sub dir"/ with --rejoin and --squash': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" --squash FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" --squash ./"sub proj" HEAD &&
		MAIN=$(git rev-parse --verify HEAD) &&
		SUB=$(git -C "sub proj" rev-parse --verify HEAD) &&

		SPLIT=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree push --prefix="sub dir" --annotate="*" --rejoin --squash ./"sub proj" from-mainline &&

		test_must_fail git merge-base --is-ancestor $SUB HEAD &&
		test_must_fail git merge-base --is-ancestor $SPLIT HEAD &&
		git rev-list HEAD ^$MAIN >commit-list &&
		test_line_count = 2 commit-list &&
		test "$(git rev-parse --verify HEAD:)"           = "$(git rev-parse --verify $MAIN:)" &&
		test "$(git rev-parse --verify HEAD:"sub dir")"  = "$(git rev-parse --verify $SPLIT:)" &&
		test "$(git rev-parse --verify HEAD^1)"          = $MAIN &&
		test "$(git rev-parse --verify HEAD^2)"         != $SPLIT &&
		test "$(git rev-parse --verify HEAD^2:)"         = "$(git rev-parse --verify $SPLIT:)" &&
		test "$(last_commit_subject)" = "Split 'sub dir/' into commit '$SPLIT'" &&
		test "$SPLIT" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/41/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/41/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master a21c8f3] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 595e681] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master 0d4acbb] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (1) [0]
3/8 (1) [0]
4/8 (2) [0]
5/8 (3) [0]
6/8 (4) [0]
7/8 (5) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (1) [0]
3/8 (1) [0]
4/8 (2) [0]
5/8 (3) [0]
6/8 (4) [0]
7/8 (5) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
To ./sub proj
 * [new branch]      c634ca3fec60bb63bb60456ad408f8cd38796fe9 -> from-mainline
ok 41 - push "sub dir"/ with --rejoin and --squash

expecting success of 7900.42 'push "sub dir"/ with --branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
		test "$(git rev-parse subproj-br)" = "$split_hash" &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/42/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/42/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Created branch 'subproj-br'
To ./sub proj
 * [new branch]      9640c39b2fe952fd90a33ac07b051954043e1726 -> from-mainline
ok 42 - push "sub dir"/ with --branch

expecting success of 7900.43 'check hash of push': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
		test "$(git rev-parse subproj-br)" = "$split_hash" &&
		# Check hash of split
		new_hash=$(git rev-parse subproj-br^2) &&
		(
			cd ./"sub proj" &&
			subdir_hash=$(git rev-parse HEAD) &&
			test "$new_hash" = "$subdir_hash"
		) &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/43/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/43/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Created branch 'subproj-br'
To ./sub proj
 * [new branch]      9640c39b2fe952fd90a33ac07b051954043e1726 -> from-mainline
ok 43 - check hash of push

expecting success of 7900.44 'push "sub dir"/ with --branch for an existing branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git branch subproj-br FETCH_HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
		test "$(git rev-parse subproj-br)" = "$split_hash" &&
		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/44/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/44/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Updated branch 'subproj-br'
To ./sub proj
 * [new branch]      9640c39b2fe952fd90a33ac07b051954043e1726 -> from-mainline
ok 44 - push "sub dir"/ with --branch for an existing branch

expecting success of 7900.45 'push "sub dir"/ with --branch for an incompatible branch': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git branch init HEAD &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		test_must_fail git subtree push --prefix="sub dir" --branch init "./sub proj" from-mainline
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/45/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/45/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 197653d] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master ce7335b] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master cb86690] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
git push using:  ./sub proj from-mainline
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
fatal: branch 'init' is not an ancestor of commit '64ab963424d3756837a288c81d869de830027dac'.

ok 45 - push "sub dir"/ with --branch for an incompatible branch

expecting success of 7900.46 'push "sub dir"/ with a local rev': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		bad_tree=$(git rev-parse --verify HEAD:"sub dir") &&
		good_tree=$(git rev-parse --verify HEAD^:"sub dir") &&
		git subtree push --prefix="sub dir" --annotate="*" ./"sub proj" HEAD^:from-mainline &&
		split_tree=$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline:) &&
		test "$split_tree" = "$good_tree"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/46/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/46/sub proj/.git/
[master (root-commit) 04b2d92] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) 660934a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 8263437] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 60be334] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
git push using:  ./sub proj HEAD^:from-mainline
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
To ./sub proj
 * [new branch]      b8e77c12175141613832afe1dde4e151d3719a2f -> from-mainline
ok 46 - push "sub dir"/ with a local rev

expecting success of 7900.47 'push after annotated tag was added/merged with --squash pre-v2.32.0': 
	test_create_pre2_32_repo "$test_count" &&
	test_create_commit "$test_count-clone" sub/main-sub1 &&
	git -C "$test_count-clone" subtree push --prefix="sub" "../$test_count-sub" from-mainline

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/47/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/47-sub/.git/
[master (root-commit) 967c632] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1.t
[master (root-commit) 90e671a] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1.t
git fetch ../47-sub sub1
From ../47-sub
 * tag               sub1       -> FETCH_HEAD
Added dir 'sub'
[master 3d2e36d] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2.t
Cloning into '47-clone'...
[master b0cc28a] sub/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub/main-sub1
git push using:  ../47-sub from-mainline
From ../47-sub
 * branch            c9df544758bd50dcbbdeb2ffde93c8c274d1d227 -> FETCH_HEAD
1/4 (0) [0]
2/4 (1) [0]
3/4 (1) [0]
4/4 (2) [0]
To ../47-sub
 * [new branch]      e374ced9af027c66588b5c920c88d7659e292ede -> from-mainline
ok 47 - push after annotated tag was added/merged with --squash pre-v2.32.0

expecting success of 7900.48 'make sure exactly the right set of files ends up in the subproj': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD &&

		test_write_lines main-sub1 main-sub2 main-sub3 main-sub4 \
			sub1 sub2 sub3 sub4 >expect &&
		git ls-files >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/48/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/48/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
ok 48 - make sure exactly the right set of files ends up in the subproj

expecting success of 7900.49 'make sure the subproj *only* contains commits that affect the "sub dir"': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD &&

		test_write_lines main-sub1 main-sub2 main-sub3 main-sub4 \
			sub1 sub2 sub3 sub4 >expect &&
		git log --name-only --pretty=format:"" >log &&
		sort <log | sed "/^\$/ d" >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/49/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/49/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
ok 49 - make sure the subproj *only* contains commits that affect the "sub dir"

expecting success of 7900.50 'make sure exactly the right set of files ends up in the mainline': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&

		test_write_lines main1 main2 >chkm &&
		test_write_lines main-sub1 main-sub2 main-sub3 main-sub4 >chkms &&
		sed "s,^,sub dir/," chkms >chkms_sub &&
		test_write_lines sub1 sub2 sub3 sub4 >chks &&
		sed "s,^,sub dir/," chks >chks_sub &&

		cat chkm chkms_sub chks_sub >expect &&
		git ls-files >actual &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/50/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/50/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub3 | 1 +
 sub dir/sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 sub dir/sub3
 create mode 100644 sub dir/sub4
ok 50 - make sure exactly the right set of files ends up in the mainline

expecting success of 7900.51 'make sure each filename changed exactly once in the entire history': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git config log.date relative &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&

		test_write_lines main1 main2 >chkm &&
		test_write_lines sub1 sub2 sub3 sub4 >chks &&
		test_write_lines main-sub1 main-sub2 main-sub3 main-sub4 >chkms &&
		sed "s,^,sub dir/," chkms >chkms_sub &&

		# main-sub?? and /"sub dir"/main-sub?? both change, because those are the
		# changes that were split into their own history.  And "sub dir"/sub?? never
		# change, since they were *only* changed in the subtree branch.
		git log --name-only --pretty=format:"" >log &&
		sort <log >sorted-log &&
		sed "/^$/ d" sorted-log >actual &&

		cat chkms chkm chks chkms_sub >expect-unsorted &&
		sort expect-unsorted >expect &&
		test_cmp expect actual
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/51/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/51/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub3 | 1 +
 sub dir/sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 sub dir/sub3
 create mode 100644 sub dir/sub4
ok 51 - make sure each filename changed exactly once in the entire history

expecting success of 7900.52 'make sure the --rejoin commits never make it into subproj': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
		test "$(git log --pretty=format:"%s" HEAD^2 | grep -i split)" = ""
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/52/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/52/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub3 | 1 +
 sub dir/sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 sub dir/sub3
 create mode 100644 sub dir/sub4
ok 52 - make sure the --rejoin commits never make it into subproj

expecting success of 7900.53 'make sure no "git subtree" tagged commits make it into subproj': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count/sub proj" sub3 &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		 git merge FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub4 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
	) &&
	(
		cd "$test_count/sub proj" &&
		git fetch .. subproj-br &&
		git merge FETCH_HEAD
	) &&
	(
		cd "$test_count" &&
		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&

		# They are meaningless to subproj since one side of the merge refers to the mainline
		test "$(git log --pretty=format:"%s%n%b" HEAD^2 | grep "git-subtree.*:")" = ""
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/53/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/53/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
1/8 (0) [0]
2/8 (0) [0]
3/8 (0) [0]
4/8 (1) [0]
5/8 (2) [0]
6/8 (3) [0]
7/8 (4) [0]
8/8 (5) [0]
Merge made by the 'ort' strategy.
Created branch 'subproj-br'
19cfc7c7458bed00f338e5111008365a5c184692
[master 583d2de] sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub3
[master 898adbd] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub1 | 1 +
 main-sub2 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub1
 create mode 100644 main-sub2
[master 0dbb0ef] sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub4
1/5 (0) [0]
2/5 (1) [0]
3/5 (1) [0]
4/5 (1) [0]
5/5 (2) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
077f7b567c9306a9b93f273fa871b1aed2de580c
[master abd0ec2] sub dir/main-sub4
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub4
1/4 (0) [0]
2/4 (0) [0]
3/4 (0) [0]
4/4 (1) [0]
Merge made by the 'ort' strategy.
Updated branch 'subproj-br'
869718de48cf6a02bccc653a4fd317a044e98025
From ..
 * branch            subproj-br -> FETCH_HEAD
Merge made by the 'ort' strategy.
 main-sub3 | 1 +
 main-sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 main-sub3
 create mode 100644 main-sub4
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub3 | 1 +
 sub dir/sub4 | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 sub dir/sub3
 create mode 100644 sub dir/sub4
ok 53 - make sure no "git subtree" tagged commits make it into subproj

expecting success of 7900.54 'make sure "git subtree split" find the correct parent': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git branch subproj-ref FETCH_HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --branch subproj-br &&

		# at this point, the new commit parent should be subproj-ref, if it is
		# not, something went wrong (the "newparent" of "HEAD~" commit should
		# have been sub2, but it was not, because its cache was not set to
		# itself)
		test "$(git log --pretty=format:%P -1 subproj-br)" = "$(git rev-parse subproj-ref)"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/54/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/54/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
[master c925b4f] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
1/6 (0) [0]
2/6 (0) [0]
3/6 (0) [0]
4/6 (1) [0]
5/6 (2) [0]
6/6 (3) [0]
Created branch 'subproj-br'
6edda83fbe5fb0714a385916ef2e144d6d2ec328
ok 54 - make sure "git subtree split" find the correct parent

expecting success of 7900.55 'split a new subtree without --onto option': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --branch subproj-br
	) &&
	mkdir "$test_count"/"sub dir2" &&
	test_create_commit "$test_count" "sub dir2"/main-sub2 &&
	(
		cd "$test_count" &&

		# also test that we still can split out an entirely new subtree
		# if the parent of the first commit in the tree is not empty,
		# then the new subtree has accidentally been attached to something
		git subtree split --prefix="sub dir2" --branch subproj2-br &&
		test "$(git log --pretty=format:%P -1 subproj2-br)" = ""
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/55/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/55/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
[master c925b4f] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
1/6 (0) [0]
2/6 (0) [0]
3/6 (0) [0]
4/6 (1) [0]
5/6 (2) [0]
6/6 (3) [0]
Created branch 'subproj-br'
6edda83fbe5fb0714a385916ef2e144d6d2ec328
[master 4af280c] sub dir2/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir2/main-sub2
1/7 (0) [0]
2/7 (1) [0]
3/7 (2) [0]
4/7 (3) [0]
5/7 (4) [0]
6/7 (5) [0]
7/7 (6) [0]
Created branch 'subproj2-br'
dc99ce626bd33257c19f07f1c1b34ec815f289cb
ok 55 - split a new subtree without --onto option

expecting success of 7900.56 'verify one file change per commit': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git branch sub1 FETCH_HEAD &&
		git subtree add --prefix="sub dir" sub1
	) &&
	test_create_commit "$test_count/sub proj" sub2 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir" --branch subproj-br
	) &&
	mkdir "$test_count"/"sub dir2" &&
	test_create_commit "$test_count" "sub dir2"/main-sub2 &&
	(
		cd "$test_count" &&
		git subtree split --prefix="sub dir2" --branch subproj2-br &&

		git log --format="%H" >commit-list &&
		while read commit
		do
			git log -n1 --format="" --name-only "$commit" >file-list &&
			test_line_count -le 1 file-list || return 1
		done <commit-list
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/56/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/56/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
[master c925b4f] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
1/6 (0) [0]
2/6 (0) [0]
3/6 (0) [0]
4/6 (1) [0]
5/6 (2) [0]
6/6 (3) [0]
Created branch 'subproj-br'
6edda83fbe5fb0714a385916ef2e144d6d2ec328
[master 4af280c] sub dir2/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir2/main-sub2
1/7 (0) [0]
2/7 (1) [0]
3/7 (2) [0]
4/7 (3) [0]
5/7 (4) [0]
6/7 (5) [0]
7/7 (6) [0]
Created branch 'subproj2-br'
dc99ce626bd33257c19f07f1c1b34ec815f289cb
ok 56 - verify one file change per commit

expecting success of 7900.57 'push split to subproj': 
	subtree_test_create_repo "$test_count" &&
	subtree_test_create_repo "$test_count/sub proj" &&
	test_create_commit "$test_count" main1 &&
	test_create_commit "$test_count/sub proj" sub1 &&
	(
		cd "$test_count" &&
		git fetch ./"sub proj" HEAD &&
		git subtree add --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub1 &&
	test_create_commit "$test_count" main2 &&
	test_create_commit "$test_count/sub proj" sub2 &&
	test_create_commit "$test_count" "sub dir"/main-sub2 &&
	(
		cd $test_count/"sub proj" &&
		git branch sub-branch-1 &&
		cd .. &&
		git fetch ./"sub proj" HEAD &&
		git subtree merge --prefix="sub dir" FETCH_HEAD
	) &&
	test_create_commit "$test_count" "sub dir"/main-sub3 &&
	(
		cd "$test_count" &&
		git subtree push ./"sub proj" --prefix "sub dir" sub-branch-1 &&
		cd ./"sub proj" &&
		git checkout sub-branch-1 &&
		test "$(last_commit_subject)" = "sub dir/main-sub3"
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/57/.git/
Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/57/sub proj/.git/
[master (root-commit) d05c47b] main1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main1
[master (root-commit) cc563f4] sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub1
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Added dir 'sub dir'
[master 9d38ebc] sub dir/main-sub1
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub1
[master 2ae4106] main2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 main2
[master 61376b0] sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub2
[master a62d36e] sub dir/main-sub2
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub2
From ./sub proj
 * branch            HEAD       -> FETCH_HEAD
Merge made by the 'ort' strategy.
 sub dir/sub2 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/sub2
[master 7111c4c] sub dir/main-sub3
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 sub dir/main-sub3
git push using:  ./sub proj sub-branch-1
1/9 (0) [0]
2/9 (0) [0]
3/9 (0) [0]
4/9 (1) [0]
5/9 (2) [0]
6/9 (3) [0]
7/9 (4) [0]
8/9 (5) [0]
9/9 (6) [0]
To ./sub proj
   61376b0..dacaac1  dacaac11118e7b866fbcbb60f7d89c6a130115b3 -> sub-branch-1
Switched to branch 'sub-branch-1'
ok 57 - push split to subproj

expecting success of 7900.58 'subtree descendant check': 
	subtree_test_create_repo "$test_count" &&
	defaultBranch=$(sed "s,ref: refs/heads/,," "$test_count/.git/HEAD") &&
	test_create_commit "$test_count" folder_subtree/a &&
	(
		cd "$test_count" &&
		git branch branch
	) &&
	test_create_commit "$test_count" folder_subtree/0 &&
	test_create_commit "$test_count" folder_subtree/b &&
	cherry=$(cd "$test_count" && git rev-parse HEAD) &&
	(
		cd "$test_count" &&
		git checkout branch
	) &&
	test_create_commit "$test_count" commit_on_branch &&
	(
		cd "$test_count" &&
		git cherry-pick $cherry &&
		git checkout $defaultBranch &&
		git merge -m "merge should be kept on subtree" branch &&
		git branch no_subtree_work_branch
	) &&
	test_create_commit "$test_count" folder_subtree/d &&
	(
		cd "$test_count" &&
		git checkout no_subtree_work_branch
	) &&
	test_create_commit "$test_count" not_a_subtree_change &&
	(
		cd "$test_count" &&
		git checkout $defaultBranch &&
		git merge -m "merge should be skipped on subtree" no_subtree_work_branch &&

		git subtree split --prefix folder_subtree/ --branch subtree_tip $defaultBranch &&
		git subtree split --prefix folder_subtree/ --branch subtree_branch branch &&
		test $(git rev-list --count subtree_tip..subtree_branch) = 0
	)

Initialized empty Git repository in /<<PKGBUILDDIR>>/t/trash directory.t7900-subtree/58/.git/
[master (root-commit) faba743] folder_subtree/a
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 folder_subtree/a
[master 0b5e1ed] folder_subtree/0
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 folder_subtree/0
[master 2368d5b] folder_subtree/b
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 folder_subtree/b
Switched to branch 'branch'
[branch ea11954] commit_on_branch
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 commit_on_branch
[branch 84249ad] folder_subtree/b
 Author: A U Thor <author@example.com>
 Date: Thu Apr 7 15:32:13 2005 -0700
 1 file changed, 1 insertion(+)
 create mode 100644 folder_subtree/b
Switched to branch 'master'
Merge made by the 'ort' strategy.
 commit_on_branch | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 commit_on_branch
[master 1373ef5] folder_subtree/d
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 folder_subtree/d
Switched to branch 'no_subtree_work_branch'
[no_subtree_work_branch 0625387] not_a_subtree_change
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 not_a_subtree_change
Switched to branch 'master'
Merge made by the 'ort' strategy.
 not_a_subtree_change | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 not_a_subtree_change
1/9 (0) [0]
2/9 (1) [0]
3/9 (2) [0]
4/9 (3) [0]
5/9 (4) [0]
6/9 (5) [0]
7/9 (6) [0]
8/9 (7) [0]
9/9 (8) [0]
Created branch 'subtree_tip'
2679dae83ca8509aab98ec31db3100ca494f5a20
1/3 (0) [0]
2/3 (1) [0]
3/3 (2) [0]
Created branch 'subtree_branch'
f5ae9033ce448f5ee7f2b318d0120676af592788
ok 58 - subtree descendant check

# passed all 58 test(s)
1..58
make[4]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
/usr/bin/make aggregate-results
make[5]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
for f in '../../../t/test-results'/t*-*.counts; do \
	echo "$f"; \
done | '/bin/sh' ../../../t/aggregate-results.sh
fixed   0
success 58
failed  0
broken  0
total   58
make[5]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
/usr/bin/make clean
make[5]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
rm -f -r 'trash directory'.*
rm -f -r valgrind/bin
make[5]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
make[5]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
rm -f -r '../../../t/test-results'
rm -f .prove
make[5]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree/t'
   create-stamp debian/debhelper-build-stamp
 fakeroot debian/rules binary-arch
dh binary-arch --with apache2 --without autoreconf
   dh_testroot -a
   dh_prep -a
   debian/rules override_dh_auto_install-arch
make[1]: Entering directory '/<<PKGBUILDDIR>>'
# git
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
DESTDIR='/<<PKGBUILDDIR>>/debian/git' /usr/bin/make install NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
make[2]: Entering directory '/<<PKGBUILDDIR>>'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/gitweb'
install -m 755 gitweb/gitweb.cgi '/<<PKGBUILDDIR>>/debian/git/usr/share/gitweb'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/gitweb/static'
install -m 644 gitweb/static/gitweb.js gitweb/static/gitweb.css gitweb/static/git-logo.png gitweb/static/git-favicon.png \
	'/<<PKGBUILDDIR>>/debian/git/usr/share/gitweb/static'
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsexportcommit.perl >git-cvsexportcommit+ && \
chmod +x git-cvsexportcommit+ && \
mv git-cvsexportcommit+ git-cvsexportcommit
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-archimport.perl >git-archimport+ && \
chmod +x git-archimport+ && \
mv git-archimport+ git-archimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-add--interactive.perl >git-add--interactive+ && \
chmod +x git-add--interactive+ && \
mv git-add--interactive+ git-add--interactive
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsimport.perl >git-cvsimport+ && \
chmod +x git-cvsimport+ && \
mv git-cvsimport+ git-cvsimport
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-send-email.perl >git-send-email+ && \
chmod +x git-send-email+ && \
mv git-send-email+ git-send-email
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-svn.perl >git-svn+ && \
chmod +x git-svn+ && \
mv git-svn+ git-svn
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1{' \
    -e '	s|#!.*perl|#!/usr/bin/perl|' \
    -e '	r GIT-PERL-HEADER' \
    -e '	G' \
    -e '}' \
    -e 's/@@GIT_VERSION@@/2.39.0/g' \
    git-cvsserver.perl >git-cvsserver+ && \
chmod +x git-cvsserver+ && \
mv git-cvsserver+ git-cvsserver
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
\
sed -e '1s|#!.*python|#!/usr/bin/python3|' \
    git-p4.py >git-p4+ && \
chmod +x git-p4+ && \
mv git-p4+ git-p4
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C git-gui  gitexecdir='/usr/lib/git-core' all
/usr/bin/make -C gitk-git  all
/usr/bin/make -C templates  SHELL_PATH='/bin/sh' PERL_PATH='/usr/bin/perl'
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
: no custom templates yet
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/bin'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
install   git-daemon git-http-backend git-imap-send git-sh-i18n--envsubst git-shell git-http-fetch git-http-push git-remote-http git-remote-https git-remote-ftp git-remote-ftps '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
install git-bisect git-difftool--helper git-filter-branch git-merge-octopus git-merge-one-file git-merge-resolve git-mergetool git-quiltimport git-request-pull git-submodule git-web--browse git-add--interactive git-archimport git-cvsexportcommit git-cvsimport git-cvsserver git-send-email git-svn git-p4 git-instaweb '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
install -m 644 git-mergetool--lib git-sh-i18n git-sh-setup '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
install  git scalar git-receive-pack git-shell git-upload-archive git-upload-pack '/<<PKGBUILDDIR>>/debian/git/usr/bin'
install git-cvsserver '/<<PKGBUILDDIR>>/debian/git/usr/bin'
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C templates DESTDIR='/<<PKGBUILDDIR>>/debian/git' install
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
: no custom templates yet
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
make[3]: Entering directory '/<<PKGBUILDDIR>>/templates'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/git-core/templates'
(cd blt && tar cf - .) | \
(cd '/<<PKGBUILDDIR>>/debian/git/usr/share/git-core/templates' && umask 022 && tar xof -)
make[3]: Leaving directory '/<<PKGBUILDDIR>>/templates'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core/mergetools'
install -m 644 mergetools/* '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core/mergetools'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/locale'
(cd po/build/locale && tar cf - .) | \
(cd '/<<PKGBUILDDIR>>/debian/git/usr/share/locale' && umask 022 && tar xof -)
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/perl5'
(cd perl/build/lib && tar cf - .) | \
(cd '/<<PKGBUILDDIR>>/debian/git/usr/share/perl5' && umask 022 && tar xof -)
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
/usr/bin/make -C gitk-git install
make[3]: Entering directory '/<<PKGBUILDDIR>>/gitk-git'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/bin'
install -m 755 gitk-wish '/<<PKGBUILDDIR>>/debian/git/usr/bin'/gitk
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs'
install -m 644 po/bg.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/ca.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/de.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/es.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/fr.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/hu.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/it.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/ja.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/pt_br.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/pt_pt.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/ru.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/sv.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/vi.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' &&  install -m 644 po/zh_cn.msg '/<<PKGBUILDDIR>>/debian/git/usr/share/gitk/lib/msgs' && true
make[3]: Leaving directory '/<<PKGBUILDDIR>>/gitk-git'
/usr/bin/make -C git-gui gitexecdir='/usr/lib/git-core' install
make[3]: Entering directory '/<<PKGBUILDDIR>>/git-gui'
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core' 
install -m 755 git-gui  '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
install -m 755 git-gui--askpass  '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core'
rm -f '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core/git-citool' && ln '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core/git-gui' '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core/git-citool'  && true
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' 
install -m 644 lib/tclIndex  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib'
install -m 644 lib/about.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/blame.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/branch.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/branch_checkout.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/branch_create.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/branch_delete.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/branch_rename.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/browser.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/checkout_op.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/choose_font.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/choose_repository.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/choose_rev.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/chord.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/class.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/commit.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/console.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/database.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/date.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/diff.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/encoding.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/error.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/index.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/line.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/logo.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/merge.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/mergetool.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/option.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/remote.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/remote_add.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/remote_branch_delete.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/search.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/shortcut.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/spellcheck.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/sshkey.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/status_bar.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/themed.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/tools.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/tools_dlg.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/transport.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/win32.tcl  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/git-gui.ico  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' &&  install -m 644 lib/win32_shortcut.js  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib' && true
install -d -m 755 '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' 
install -m 644 po/bg.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/de.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/el.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/fr.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/hu.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/it.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/ja.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/nb.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/pt_br.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/pt_pt.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/ru.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/sv.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/vi.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' &&  install -m 644 po/zh_cn.msg  '/<<PKGBUILDDIR>>/debian/git/usr/share/git-gui/lib/msgs' && true
make[3]: Leaving directory '/<<PKGBUILDDIR>>/git-gui'
make[2]: Entering directory '/<<PKGBUILDDIR>>'
bindir=$(cd '/<<PKGBUILDDIR>>/debian/git/usr/bin' && pwd) && \
execdir=$(cd '/<<PKGBUILDDIR>>/debian/git/usr/lib/git-core' && pwd) && \
destdir_from_execdir_SQ=$(echo 'lib/git-core' | sed -e 's|[^/][^/]*|..|g') && \
{ test "$bindir/" = "$execdir/" || \
  for p in git scalar git-shell git-cvsserver; do \
	rm -f "$execdir/$p" && \
	test -n "" && \
	ln -s "$destdir_from_execdir_SQ/bin/$p" "$execdir/$p" || \
	{ test -z "11" && \
	  ln "$bindir/$p" "$execdir/$p" 2>/dev/null || \
	  cp "$bindir/$p" "$execdir/$p" || exit; } \
  done; \
} && \
for p in git-receive-pack git-upload-archive git-upload-pack; do \
	rm -f "$bindir/$p" && \
	test -n "" && \
	ln -s "git" "$bindir/$p" || \
	{ test -z "1" && \
	  ln "$bindir/git" "$bindir/$p" 2>/dev/null || \
	  ln -s "git" "$bindir/$p" 2>/dev/null || \
	  cp "$bindir/git" "$bindir/$p" || exit; }; \
done && \
for p in git-add git-am git-annotate git-apply git-archive git-bisect--helper git-blame git-branch git-bugreport git-bundle git-cat-file git-check-attr git-check-ignore git-check-mailmap git-check-ref-format git-checkout--worker git-checkout-index git-checkout git-clean git-clone git-column git-commit-graph git-commit-tree git-commit git-config git-count-objects git-credential-cache--daemon git-credential-cache git-credential-store git-credential git-describe git-diagnose git-diff-files git-diff-index git-diff-tree git-diff git-difftool git-env--helper git-fast-export git-fast-import git-fetch-pack git-fetch git-fmt-merge-msg git-for-each-ref git-for-each-repo git-fsck git-fsmonitor--daemon git-gc git-get-tar-commit-id git-grep git-hash-object git-help git-hook git-index-pack git-init-db git-interpret-trailers git-log git-ls-files git-ls-remote git-ls-tree git-mailinfo git-mailsplit git-merge-base git-merge-file git-merge-index git-merge-ours git-merge-recursive git-merge-tree git-merge git-mktag git-mktree git-multi-pack-index git-mv git-name-rev git-notes git-pack-objects git-pack-redundant git-pack-refs git-patch-id git-prune-packed git-prune git-pull git-push git-range-diff git-read-tree git-rebase git-receive-pack git-reflog git-remote-ext git-remote-fd git-remote git-repack git-replace git-rerere git-reset git-rev-list git-rev-parse git-revert git-rm git-send-pack git-shortlog git-show-branch git-show-index git-show-ref git-sparse-checkout git-stash git-stripspace git-submodule--helper git-symbolic-ref git-tag git-unpack-file git-unpack-objects git-update-index git-update-ref git-update-server-info git-upload-archive git-upload-pack git-var git-verify-commit git-verify-pack git-verify-tag git-worktree git-write-tree git-cherry git-cherry-pick git-format-patch git-fsck-objects git-init git-maintenance git-merge-subtree git-restore git-show git-stage git-status git-switch git-version git-whatchanged; do \
	rm -f "$execdir/$p" && \
	if test -z ""; \
	then \
		test -n "" && \
		ln -s "$destdir_from_execdir_SQ/bin/git" "$execdir/$p" || \
		{ test -z "1" && \
		  ln "$execdir/git" "$execdir/$p" 2>/dev/null || \
		  ln -s "git" "$execdir/$p" 2>/dev/null || \
		  cp "$execdir/git" "$execdir/$p" || exit; }; \
	fi \
done && \
remote_curl_aliases="git-remote-https git-remote-ftp git-remote-ftps" && \
for p in $remote_curl_aliases; do \
	rm -f "$execdir/$p" && \
	test -n "" && \
	ln -s "git-remote-http" "$execdir/$p" || \
	{ test -z "1" && \
	  ln "$execdir/git-remote-http" "$execdir/$p" 2>/dev/null || \
	  ln -s "git-remote-http" "$execdir/$p" 2>/dev/null || \
	  cp "$execdir/git-remote-http" "$execdir/$p" || exit; } \
done
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
DESTDIR='/<<PKGBUILDDIR>>/debian/git' /usr/bin/make -C contrib/subtree install NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 PYTHON_PATH=/usr/bin/python3 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-z,relro' HOST_CPU='arm' V=1 USE_LIBPCRE2=1
/usr/bin/make -C ../../ GIT-VERSION-FILE
make[3]: 'GIT-VERSION-FILE' is up to date.
make[2]: Entering directory '/<<PKGBUILDDIR>>/contrib/subtree'
install -d -m 755 /<<PKGBUILDDIR>>/debian/git/usr/lib/git-core
install -m 755 git-subtree /<<PKGBUILDDIR>>/debian/git/usr/lib/git-core
make[2]: Leaving directory '/<<PKGBUILDDIR>>/contrib/subtree'
make[1]: Entering directory '/<<PKGBUILDDIR>>'
install -d -m0755 '/<<PKGBUILDDIR>>/debian/git'/var/lib/git
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/man
# don't include arch, cvs, p4, svn, email, gui tools, and gitk program
for i in git-archimport git-cvs git-p4 git-svn git-send-email \
 git-gui git-citool; do \
  rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/lib/git-core/$i*; \
done
rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/bin/git-cvsserver
rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/bin/gitk
# don't include git-gui's lib
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/git-gui/
# don't include gitk's lib
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/gitk/
# don't include git-svn's lib
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/perl5/Git/SVN*
# sanity check that #642603 fix is still in place
test $(stat -c%h '/<<PKGBUILDDIR>>/debian/git'/usr/lib/git-core/git-branch) -le 10
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   debian/rules override_dh_install-arch
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_install --arch
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/git-core/contrib/hooks/multimail
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_apache2 -a
   debian/rules override_dh_installdocs-arch
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installdocs --arch -X.gitignore
# These licenses are replaced with symlinks in git.links.
diff -q '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/persistent-https/LICENSE /usr/share/common-licenses/Apache-2.0
diff -bq '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/subtree/COPYING /usr/share/common-licenses/GPL-2
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/completion
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/emacs
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/hooks
rm -rf '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/mw-to-git
rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/subtree/git-subtree.1
rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/subtree/git-subtree.html
rm -f '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/contrib/subtree/git-subtree.xml
find '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/ -name .gitattributes | xargs rm -f
find '/<<PKGBUILDDIR>>/debian/git'/usr/share/doc/git/ -name .gitignore | xargs rm -f
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   debian/rules override_dh_installchangelogs
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installchangelogs debian/changelog.upstream
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_installexamples -a
   debian/rules override_dh_installinit
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installinit -pgit-daemon-sysvinit --name=git-daemon
dh_installinit: warning: All requested packages have been excluded (e.g. via a Build-Profile or due to architecture restrictions).
dh_installinit
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_lintian -a
   dh_perl -a
   dh_link -a
   dh_strip_nondeterminism -a
	Normalized debian/git/usr/share/locale/el/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/es/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/fr/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/id/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/is/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/bg/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/ca/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/de/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/it/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/ko/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/pl/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/pt_PT/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/ru/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/sv/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/tr/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/vi/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/zh_CN/LC_MESSAGES/git.mo
	Normalized debian/git/usr/share/locale/zh_TW/LC_MESSAGES/git.mo
   debian/rules override_dh_compress
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_compress -X.txt -Xcontrib
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_fixperms -a
   dh_missing -a
   dh_strip -a
   dh_makeshlibs -a
   dh_shlibdeps -a
dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/git/usr/lib/git-core/git-imap-send debian/git/usr/lib/git-core/git-daemon debian/git/usr/lib/git-core/git-http-fetch debian/git/usr/lib/git-core/git debian/git/usr/lib/git-core/git-http-backend debian/git/usr/lib/git-core/git-remote-http debian/git/usr/lib/git-core/scalar debian/git/usr/bin/scalar debian/git/usr/lib/git-core/git-sh-i18n--envsubst debian/git/usr/bin/git debian/git/usr/bin/git-shell debian/git/usr/lib/git-core/git-http-push debian/git/usr/lib/git-core/git-shell were not linked against ld-linux-armhf.so.3 (they use none of the library's symbols)
   dh_installdeb -a
   dh_gencontrol -a
dpkg-gencontrol: warning: package git: substitution variable ${perl:Depends} unused, but is defined
dpkg-gencontrol: warning: package git: substitution variable ${perl:Depends} unused, but is defined
   dh_md5sums -a
   dh_builddeb -a
dpkg-deb: building package 'git-dbgsym' in '../git-dbgsym_2.39.0-1_armhf.deb'.
dpkg-deb: building package 'git' in '../git_2.39.0-1_armhf.deb'.
 dpkg-genbuildinfo --build=any -O../git_2.39.0-1_armhf.buildinfo
 dpkg-genchanges --build=any -mRaspbian wandboard test autobuilder <root@raspbian.org> -O../git_2.39.0-1_armhf.changes
dpkg-genchanges: info: binary-only arch-specific upload (source code and arch-indep packages not included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
--------------------------------------------------------------------------------
Build finished at 2022-12-28T08:35:11Z

Finished
--------

I: Built successfully

+------------------------------------------------------------------------------+
| Post Build Chroot                                                            |
+------------------------------------------------------------------------------+


+------------------------------------------------------------------------------+
| Changes                                                                      |
+------------------------------------------------------------------------------+


git_2.39.0-1_armhf.changes:
---------------------------

Format: 1.8
Date: Mon, 12 Dec 2022 12:53:44 -0800
Source: git
Binary: git git-dbgsym
Architecture: armhf
Version: 1:2.39.0-1
Distribution: bookworm-staging
Urgency: low
Maintainer: Raspbian wandboard test autobuilder <root@raspbian.org>
Changed-By: Jonathan Nieder <jrnieder@gmail.com>
Description:
 git        - fast, scalable, distributed revision control system
Changes:
 git (1:2.39.0-1) unstable; urgency=low
 .
   * new upstream release (see RelNotes/2.39.0.txt).
Checksums-Sha1:
 5a8075d3acf14c1f3752aa1fbcb0c94fa1326b73 42753568 git-dbgsym_2.39.0-1_armhf.deb
 eea7fc971957184e7f27fe88ffd032eb64d31a33 7412 git_2.39.0-1_armhf.buildinfo
 fa0b3ce52bbe386bbf7d7f17ac67118c57960927 5460880 git_2.39.0-1_armhf.deb
Checksums-Sha256:
 5ab64d5461518c19ab7a25ea7efb6392f093372468089ed468cfbbf086af35ad 42753568 git-dbgsym_2.39.0-1_armhf.deb
 715a1facbbe41ae6ccaf4d0f158628851fb70f43aa4f1d4016d14eb97b8f2446 7412 git_2.39.0-1_armhf.buildinfo
 fe4748e93cce92a9d5ae555d63488f8b2c45ddd63132071afffbc6ea105bf1be 5460880 git_2.39.0-1_armhf.deb
Files:
 d3488f8fd31de3c9f52c0a18de6a74ec 42753568 debug optional git-dbgsym_2.39.0-1_armhf.deb
 2f4d733fe557b4681b36335f0c51744f 7412 vcs optional git_2.39.0-1_armhf.buildinfo
 b043a24087c388aaa165dbd85d07d48b 5460880 vcs optional git_2.39.0-1_armhf.deb

+------------------------------------------------------------------------------+
| Package contents                                                             |
+------------------------------------------------------------------------------+


git-dbgsym_2.39.0-1_armhf.deb
-----------------------------

 new Debian package, version 2.0.
 size 42753568 bytes: control archive=984 bytes.
     695 bytes,    12 lines      control              
    1060 bytes,    10 lines      md5sums              
 Package: git-dbgsym
 Source: git
 Version: 1:2.39.0-1
 Auto-Built-Package: debug-symbols
 Architecture: armhf
 Maintainer: Jonathan Nieder <jrnieder@gmail.com>
 Installed-Size: 44602
 Depends: git (= 1:2.39.0-1)
 Section: debug
 Priority: optional
 Description: debug symbols for git
 Build-Ids: 0db6d4ef1fd3066c414541d1dba3dc62d29e6330 24eb0483d97a612cfa70115ae7c60fc7b72098d6 649bad07e43b38dedc5d5cf0fe1d68fd65eb9286 6b92c2c5a30bdaa88db531d17f3adde95feed442 744e2c1563401e2b70223ef7803871d5b7bca7d7 9300da262547236a71aa770f9d757c3968fb526b 9396ade8df4a0ae226b6db59fe48a1c1f9b51b51 9651a5562ee344038cc3c40a2466f394efa97f0a 9c2a0cad03df60b8b01b9f56ae83ca52a3050652 a55b28031a467995d4e3b159950717e25ad1cc13

drwxr-xr-x root/root         0 2022-12-12 20:53 ./
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/0d/
-rw-r--r-- root/root   4229180 2022-12-12 20:53 ./usr/lib/debug/.build-id/0d/b6d4ef1fd3066c414541d1dba3dc62d29e6330.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/24/
-rw-r--r-- root/root   4362540 2022-12-12 20:53 ./usr/lib/debug/.build-id/24/eb0483d97a612cfa70115ae7c60fc7b72098d6.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/64/
-rw-r--r-- root/root   4341648 2022-12-12 20:53 ./usr/lib/debug/.build-id/64/9bad07e43b38dedc5d5cf0fe1d68fd65eb9286.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/6b/
-rw-r--r-- root/root   4320488 2022-12-12 20:53 ./usr/lib/debug/.build-id/6b/92c2c5a30bdaa88db531d17f3adde95feed442.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/74/
-rw-r--r-- root/root   4332316 2022-12-12 20:53 ./usr/lib/debug/.build-id/74/4e2c1563401e2b70223ef7803871d5b7bca7d7.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/93/
-rw-r--r-- root/root   4251940 2022-12-12 20:53 ./usr/lib/debug/.build-id/93/00da262547236a71aa770f9d757c3968fb526b.debug
-rw-r--r-- root/root   7060380 2022-12-12 20:53 ./usr/lib/debug/.build-id/93/96ade8df4a0ae226b6db59fe48a1c1f9b51b51.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/96/
-rw-r--r-- root/root   4229652 2022-12-12 20:53 ./usr/lib/debug/.build-id/96/51a5562ee344038cc3c40a2466f394efa97f0a.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/9c/
-rw-r--r-- root/root   4249608 2022-12-12 20:53 ./usr/lib/debug/.build-id/9c/2a0cad03df60b8b01b9f56ae83ca52a3050652.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/debug/.build-id/a5/
-rw-r--r-- root/root   4270568 2022-12-12 20:53 ./usr/lib/debug/.build-id/a5/5b28031a467995d4e3b159950717e25ad1cc13.debug
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/doc/git-dbgsym -> git


git_2.39.0-1_armhf.deb
----------------------

 new Debian package, version 2.0.
 size 5460880 bytes: control archive=16228 bytes.
      34 bytes,     1 lines      conffiles            
    1647 bytes,    28 lines      control              
   49783 bytes,   670 lines      md5sums              
     181 bytes,     5 lines   *  postinst             #!/bin/sh
     181 bytes,     5 lines   *  postrm               #!/bin/sh
     967 bytes,    37 lines   *  preinst              #!/bin/sh
     181 bytes,     5 lines   *  prerm                #!/bin/sh
 Package: git
 Version: 1:2.39.0-1
 Architecture: armhf
 Maintainer: Jonathan Nieder <jrnieder@gmail.com>
 Installed-Size: 38720
 Depends: libc6 (>= 2.34), libcurl3-gnutls (>= 7.56.1), libexpat1 (>= 2.0.1), libpcre2-8-0 (>= 10.34), zlib1g (>= 1:1.2.2), perl, liberror-perl, git-man (>> 1:2.39.0), git-man (<< 1:2.39.0-.)
 Recommends: ca-certificates, patch, less, ssh-client
 Suggests: gettext-base, git-daemon-run | git-daemon-sysvinit, git-doc, git-email, git-gui, gitk, gitweb, git-cvs, git-mediawiki, git-svn
 Breaks: bash-completion (<< 1:1.90-1), cogito (<= 0.18.2+), dgit (<< 5.1~), git-buildpackage (<< 0.6.5), git-el (<< 1:2.32.0~rc2-1~), gitosis (<< 0.2+20090917-7), gitpkg (<< 0.15), guilt (<< 0.33), openssh-client (<< 1:6.8), stgit (<< 0.15), stgit-contrib (<< 0.15)
 Provides: git-completion, git-core
 Section: vcs
 Priority: optional
 Multi-Arch: foreign
 Homepage: https://git-scm.com/
 Description: fast, scalable, distributed revision control system
  Git is popular version control system designed to handle very large
  projects with speed and efficiency; it is used for many high profile
  open source projects, most notably the Linux kernel.
  .
  Git falls in the category of distributed source code management tools.
  Every Git working directory is a full-fledged repository with full
  revision tracking capabilities, not dependent on network access or a
  central server.
  .
  This package provides the git main components with minimal dependencies.
  Additional functionality, e.g. a graphical user interface and revision
  tree visualizer, tools for interoperating with other VCS's, or a web
  interface, is provided as separate git* packages.

drwxr-xr-x root/root         0 2022-12-12 20:53 ./
drwxr-xr-x root/root         0 2022-12-12 20:53 ./etc/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./etc/bash_completion.d/
-rw-r--r-- root/root       439 2022-12-12 20:53 ./etc/bash_completion.d/git-prompt
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/bin/
-rwxr-xr-x root/root   2936820 2022-12-12 20:53 ./usr/bin/git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/bin/git-receive-pack -> git
-rwxr-xr-x root/root   1727604 2022-12-12 20:53 ./usr/bin/git-shell
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/bin/git-upload-archive -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/bin/git-upload-pack -> git
-rwxr-xr-x root/root   1729916 2022-12-12 20:53 ./usr/bin/scalar
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/git-core/
-rwxr-xr-x root/root   2936820 2022-12-12 20:53 ./usr/lib/git-core/git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-add -> git
-rwxr-xr-x root/root     47789 2022-12-12 20:53 ./usr/lib/git-core/git-add--interactive
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-am -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-annotate -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-apply -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-archive -> git
-rwxr-xr-x root/root      1625 2022-12-12 20:53 ./usr/lib/git-core/git-bisect
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-bisect--helper -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-blame -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-branch -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-bugreport -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-bundle -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-cat-file -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-check-attr -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-check-ignore -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-check-mailmap -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-check-ref-format -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-checkout -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-checkout--worker -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-checkout-index -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-cherry -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-cherry-pick -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-clean -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-clone -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-column -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-commit -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-commit-graph -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-commit-tree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-config -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-count-objects -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-credential -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-credential-cache -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-credential-cache--daemon -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-credential-store -> git
-rwxr-xr-x root/root   1727700 2022-12-12 20:53 ./usr/lib/git-core/git-daemon
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-describe -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-diagnose -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-diff -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-diff-files -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-diff-index -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-diff-tree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-difftool -> git
-rwxr-xr-x root/root      2503 2022-12-12 20:53 ./usr/lib/git-core/git-difftool--helper
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-env--helper -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fast-export -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fast-import -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fetch -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fetch-pack -> git
-rwxr-xr-x root/root     15857 2022-12-12 20:53 ./usr/lib/git-core/git-filter-branch
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fmt-merge-msg -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-for-each-ref -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-for-each-repo -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-format-patch -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fsck -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fsck-objects -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-fsmonitor--daemon -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-gc -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-get-tar-commit-id -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-grep -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-hash-object -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-help -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-hook -> git
-rwxr-xr-x root/root   1727764 2022-12-12 20:53 ./usr/lib/git-core/git-http-backend
-rwxr-xr-x root/root   1727944 2022-12-12 20:53 ./usr/lib/git-core/git-http-fetch
-rwxr-xr-x root/root   1793496 2022-12-12 20:53 ./usr/lib/git-core/git-http-push
-rwxr-xr-x root/root   1793716 2022-12-12 20:53 ./usr/lib/git-core/git-imap-send
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-index-pack -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-init -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-init-db -> git
-rwxr-xr-x root/root     22161 2022-12-12 20:53 ./usr/lib/git-core/git-instaweb
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-interpret-trailers -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-log -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-ls-files -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-ls-remote -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-ls-tree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-mailinfo -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-mailsplit -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-maintenance -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-base -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-file -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-index -> git
-rwxr-xr-x root/root      2477 2022-12-12 20:53 ./usr/lib/git-core/git-merge-octopus
-rwxr-xr-x root/root      3695 2022-12-12 20:53 ./usr/lib/git-core/git-merge-one-file
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-ours -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-recursive -> git
-rwxr-xr-x root/root      1226 2022-12-12 20:53 ./usr/lib/git-core/git-merge-resolve
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-subtree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-merge-tree -> git
-rwxr-xr-x root/root     11564 2022-12-12 20:53 ./usr/lib/git-core/git-mergetool
-rw-r--r-- root/root      9922 2022-12-12 20:53 ./usr/lib/git-core/git-mergetool--lib
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-mktag -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-mktree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-multi-pack-index -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-mv -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-name-rev -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-notes -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-pack-objects -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-pack-redundant -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-pack-refs -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-patch-id -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-prune -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-prune-packed -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-pull -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-push -> git
-rwxr-xr-x root/root      3693 2022-12-12 20:53 ./usr/lib/git-core/git-quiltimport
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-range-diff -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-read-tree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-rebase -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-receive-pack -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-reflog -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote-ext -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote-fd -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote-ftp -> git-remote-http
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote-ftps -> git-remote-http
-rwxr-xr-x root/root   1793512 2022-12-12 20:53 ./usr/lib/git-core/git-remote-http
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-remote-https -> git-remote-http
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-repack -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-replace -> git
-rwxr-xr-x root/root      4130 2022-12-12 20:53 ./usr/lib/git-core/git-request-pull
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-rerere -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-reset -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-restore -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-rev-list -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-rev-parse -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-revert -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-rm -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-send-pack -> git
-rw-r--r-- root/root      1683 2022-12-12 20:53 ./usr/lib/git-core/git-sh-i18n
-rwxr-xr-x root/root   1727572 2022-12-12 20:53 ./usr/lib/git-core/git-sh-i18n--envsubst
-rw-r--r-- root/root     18583 2022-12-12 20:53 ./usr/lib/git-core/git-sh-prompt
-rw-r--r-- root/root      8398 2022-12-12 20:53 ./usr/lib/git-core/git-sh-setup
-rwxr-xr-x root/root   1727604 2022-12-12 20:53 ./usr/lib/git-core/git-shell
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-shortlog -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-show -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-show-branch -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-show-index -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-show-ref -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-sparse-checkout -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-stage -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-stash -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-status -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-stripspace -> git
-rwxr-xr-x root/root     10475 2022-12-12 20:53 ./usr/lib/git-core/git-submodule
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-submodule--helper -> git
-rwxr-xr-x root/root     25019 2022-12-12 20:53 ./usr/lib/git-core/git-subtree
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-switch -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-symbolic-ref -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-tag -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-unpack-file -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-unpack-objects -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-update-index -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-update-ref -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-update-server-info -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-upload-archive -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-upload-pack -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-var -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-verify-commit -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-verify-pack -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-verify-tag -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-version -> git
-rwxr-xr-x root/root      4401 2022-12-12 20:53 ./usr/lib/git-core/git-web--browse
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-whatchanged -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-worktree -> git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/lib/git-core/git-write-tree -> git
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/lib/git-core/mergetools/
-rw-r--r-- root/root       515 2022-12-12 20:53 ./usr/lib/git-core/mergetools/araxis
-rw-r--r-- root/root       584 2022-12-12 20:53 ./usr/lib/git-core/mergetools/bc
-rw-r--r-- root/root       510 2022-12-12 20:53 ./usr/lib/git-core/mergetools/codecompare
-rw-r--r-- root/root       818 2022-12-12 20:53 ./usr/lib/git-core/mergetools/deltawalker
-rw-r--r-- root/root       460 2022-12-12 20:53 ./usr/lib/git-core/mergetools/diffmerge
-rw-r--r-- root/root       395 2022-12-12 20:53 ./usr/lib/git-core/mergetools/diffuse
-rw-r--r-- root/root       453 2022-12-12 20:53 ./usr/lib/git-core/mergetools/ecmerge
-rw-r--r-- root/root       535 2022-12-12 20:53 ./usr/lib/git-core/mergetools/emerge
-rw-r--r-- root/root       493 2022-12-12 20:53 ./usr/lib/git-core/mergetools/examdiff
-rw-r--r-- root/root       432 2022-12-12 20:53 ./usr/lib/git-core/mergetools/guiffy
-rw-r--r-- root/root        29 2022-12-12 20:53 ./usr/lib/git-core/mergetools/gvimdiff
-rw-r--r-- root/root       818 2022-12-12 20:53 ./usr/lib/git-core/mergetools/kdiff3
-rw-r--r-- root/root       264 2022-12-12 20:53 ./usr/lib/git-core/mergetools/kompare
-rw-r--r-- root/root      2213 2022-12-12 20:53 ./usr/lib/git-core/mergetools/meld
-rw-r--r-- root/root        29 2022-12-12 20:53 ./usr/lib/git-core/mergetools/nvimdiff
-rw-r--r-- root/root       418 2022-12-12 20:53 ./usr/lib/git-core/mergetools/opendiff
-rw-r--r-- root/root       784 2022-12-12 20:53 ./usr/lib/git-core/mergetools/p4merge
-rw-r--r-- root/root       423 2022-12-12 20:53 ./usr/lib/git-core/mergetools/smerge
-rw-r--r-- root/root       403 2022-12-12 20:53 ./usr/lib/git-core/mergetools/tkdiff
-rw-r--r-- root/root       761 2022-12-12 20:53 ./usr/lib/git-core/mergetools/tortoisemerge
-rw-r--r-- root/root     17505 2022-12-12 20:53 ./usr/lib/git-core/mergetools/vimdiff
-rw-r--r-- root/root       510 2022-12-12 20:53 ./usr/lib/git-core/mergetools/winmerge
-rw-r--r-- root/root       913 2022-12-12 20:53 ./usr/lib/git-core/mergetools/xxdiff
-rwxr-xr-x root/root   1729916 2022-12-12 20:53 ./usr/lib/git-core/scalar
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/bash-completion/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/bash-completion/completions/
-rw-r--r-- root/root     79837 2022-12-12 20:53 ./usr/share/bash-completion/completions/git
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/bash-completion/completions/gitk -> git
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/
-rw-r--r-- root/root      1053 2022-12-06 01:26 ./usr/share/doc/git/NEWS.Debian.gz
-rw-r--r-- root/root      2289 2022-12-06 01:26 ./usr/share/doc/git/README.Debian
-rw-r--r-- root/root       805 2022-12-06 01:26 ./usr/share/doc/git/README.emacs
-rw-r--r-- root/root      3639 2022-12-12 01:07 ./usr/share/doc/git/README.md
-rw-r--r-- root/root      3139 2022-12-06 01:26 ./usr/share/doc/git/README.source
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/RelNotes/
-rw-r--r-- root/root      1255 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.1.txt
-rw-r--r-- root/root      2308 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.2.txt
-rw-r--r-- root/root      1577 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.3.txt
-rw-r--r-- root/root       462 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.4.txt
-rw-r--r-- root/root       609 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.5.txt
-rw-r--r-- root/root       484 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.6.txt
-rw-r--r-- root/root       482 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.7.txt
-rw-r--r-- root/root     18638 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.0.txt
-rw-r--r-- root/root      2164 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.1.txt
-rw-r--r-- root/root      1651 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.2.txt
-rw-r--r-- root/root      1566 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.3.txt
-rw-r--r-- root/root       843 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.4.txt
-rw-r--r-- root/root      1430 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.5.txt
-rw-r--r-- root/root      1519 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.6.txt
-rw-r--r-- root/root     13288 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.1.txt
-rw-r--r-- root/root      1457 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.1.txt
-rw-r--r-- root/root      2086 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.2.txt
-rw-r--r-- root/root       796 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.3.txt
-rw-r--r-- root/root       802 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.4.txt
-rw-r--r-- root/root       928 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.5.txt
-rw-r--r-- root/root      7355 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.2.txt
-rw-r--r-- root/root       326 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.1.txt
-rw-r--r-- root/root      1931 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.2.txt
-rw-r--r-- root/root       896 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.3.txt
-rw-r--r-- root/root      1208 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.4.txt
-rw-r--r-- root/root      3376 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.5.txt
-rw-r--r-- root/root      1432 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.6.txt
-rw-r--r-- root/root      1584 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.7.txt
-rw-r--r-- root/root       783 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.8.txt
-rw-r--r-- root/root     14030 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.3.txt
-rw-r--r-- root/root       524 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.1.txt
-rw-r--r-- root/root      1530 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.2.txt
-rw-r--r-- root/root       997 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.3.txt
-rw-r--r-- root/root      2617 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.4.txt
-rw-r--r-- root/root      2241 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.5.txt
-rw-r--r-- root/root      1440 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.6.txt
-rw-r--r-- root/root       342 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.7.txt
-rw-r--r-- root/root     14424 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.4.txt
-rw-r--r-- root/root      1499 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.1.txt
-rw-r--r-- root/root       772 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.2.txt
-rw-r--r-- root/root       305 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.3.txt
-rw-r--r-- root/root       140 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.4.txt
-rw-r--r-- root/root       449 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.5.txt
-rw-r--r-- root/root       342 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.6.txt
-rw-r--r-- root/root      7596 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.5.txt
-rw-r--r-- root/root       793 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.1.txt
-rw-r--r-- root/root      1457 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.2.txt
-rw-r--r-- root/root      2113 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.3.txt
-rw-r--r-- root/root      1573 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.4.txt
-rw-r--r-- root/root      1041 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.5.txt
-rw-r--r-- root/root       342 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.6.txt
-rw-r--r-- root/root      3843 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.5.6.txt
-rw-r--r-- root/root      1188 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.1.txt
-rw-r--r-- root/root      2840 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.2.txt
-rw-r--r-- root/root      4315 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.3.txt
-rw-r--r-- root/root      1293 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.4.txt
-rw-r--r-- root/root      2014 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.5.txt
-rw-r--r-- root/root      1193 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.6.txt
-rw-r--r-- root/root     10049 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.0.txt
-rw-r--r-- root/root      1976 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.1.1.txt
-rw-r--r-- root/root      1640 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.1.2.txt
-rw-r--r-- root/root       847 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.1.3.txt
-rw-r--r-- root/root      1593 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.1.4.txt
-rw-r--r-- root/root     10322 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.1.txt
-rw-r--r-- root/root       597 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.1.txt
-rw-r--r-- root/root      1508 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.2.txt
-rw-r--r-- root/root       781 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.3.txt
-rw-r--r-- root/root      1351 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.4.txt
-rw-r--r-- root/root       688 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.5.txt
-rw-r--r-- root/root      5888 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.2.txt
-rw-r--r-- root/root       343 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.3.1.txt
-rw-r--r-- root/root      2271 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.3.2.txt
-rw-r--r-- root/root      1379 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.3.3.txt
-rw-r--r-- root/root      1206 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.3.4.txt
-rw-r--r-- root/root      6787 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.3.txt
-rw-r--r-- root/root      1906 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.1.txt
-rw-r--r-- root/root      1210 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.2.txt
-rw-r--r-- root/root      1146 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.3.txt
-rw-r--r-- root/root      1034 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.4.txt
-rw-r--r-- root/root       605 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.5.txt
-rw-r--r-- root/root      5353 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.4.txt
-rw-r--r-- root/root       549 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.1.txt
-rw-r--r-- root/root       581 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.2.txt
-rw-r--r-- root/root      2485 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.3.txt
-rw-r--r-- root/root      1274 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.4.txt
-rw-r--r-- root/root      1891 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.5.txt
-rw-r--r-- root/root       791 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.6.txt
-rw-r--r-- root/root       771 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.7.txt
-rw-r--r-- root/root       900 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.8.txt
-rw-r--r-- root/root       581 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.9.txt
-rw-r--r-- root/root      6290 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.5.txt
-rw-r--r-- root/root      1230 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.6.1.txt
-rw-r--r-- root/root      1599 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.6.2.txt
-rw-r--r-- root/root       751 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.6.3.txt
-rw-r--r-- root/root      9459 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.6.6.txt
-rw-r--r-- root/root      1287 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.1.txt
-rw-r--r-- root/root      1476 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.2.txt
-rw-r--r-- root/root      1176 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.3.txt
-rw-r--r-- root/root       888 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.4.txt
-rw-r--r-- root/root       915 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.5.txt
-rw-r--r-- root/root       365 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.6.txt
-rw-r--r-- root/root       467 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.7.txt
-rw-r--r-- root/root       452 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.8.txt
-rw-r--r-- root/root       219 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.9.txt
-rw-r--r-- root/root      8765 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.0.txt
-rw-r--r-- root/root      3825 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.1.1.txt
-rw-r--r-- root/root      1069 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.1.2.txt
-rw-r--r-- root/root       452 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.1.3.txt
-rw-r--r-- root/root       219 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.1.4.txt
-rw-r--r-- root/root      2941 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.1.txt
-rw-r--r-- root/root      3073 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.1.txt
-rw-r--r-- root/root      3445 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.2.txt
-rw-r--r-- root/root      1876 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.3.txt
-rw-r--r-- root/root      1057 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.4.txt
-rw-r--r-- root/root       397 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.5.txt
-rw-r--r-- root/root      9025 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.10.txt
-rw-r--r-- root/root       224 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.1.txt
-rw-r--r-- root/root      2291 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.2.txt
-rw-r--r-- root/root      2314 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.3.txt
-rw-r--r-- root/root      1171 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.4.txt
-rw-r--r-- root/root      1292 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.5.txt
-rw-r--r-- root/root      3436 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.6.txt
-rw-r--r-- root/root      1959 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.7.txt
-rw-r--r-- root/root      5506 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.11.txt
-rw-r--r-- root/root      5800 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.12.1.txt
-rw-r--r-- root/root      1767 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.12.2.txt
-rw-r--r-- root/root      1329 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.12.3.txt
-rw-r--r-- root/root       712 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.12.4.txt
-rw-r--r-- root/root      5336 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.12.txt
-rw-r--r-- root/root       806 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.1.txt
-rw-r--r-- root/root       695 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.2.txt
-rw-r--r-- root/root      1355 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.3.txt
-rw-r--r-- root/root       452 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.4.txt
-rw-r--r-- root/root       219 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.5.txt
-rw-r--r-- root/root      5978 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.2.txt
-rw-r--r-- root/root       425 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.1.txt
-rw-r--r-- root/root       149 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.2.txt
-rw-r--r-- root/root      2075 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.3.txt
-rw-r--r-- root/root      1639 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.4.txt
-rw-r--r-- root/root      1454 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.5.txt
-rw-r--r-- root/root      2642 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.3.txt
-rw-r--r-- root/root       899 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.1.txt
-rw-r--r-- root/root      2290 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.2.txt
-rw-r--r-- root/root      1245 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.3.txt
-rw-r--r-- root/root      1288 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.4.txt
-rw-r--r-- root/root       127 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.5.txt
-rw-r--r-- root/root      6502 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.4.txt
-rw-r--r-- root/root      1905 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.5.1.txt
-rw-r--r-- root/root      2189 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.5.2.txt
-rw-r--r-- root/root      1101 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.5.3.txt
-rw-r--r-- root/root       754 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.5.4.txt
-rw-r--r-- root/root      5329 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.5.txt
-rw-r--r-- root/root      2248 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.1.txt
-rw-r--r-- root/root       245 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.2.txt
-rw-r--r-- root/root       792 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.3.txt
-rw-r--r-- root/root      1264 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.4.txt
-rw-r--r-- root/root       969 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.5.txt
-rw-r--r-- root/root       587 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.6.txt
-rw-r--r-- root/root      5507 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.6.txt
-rw-r--r-- root/root      2432 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.1.txt
-rw-r--r-- root/root      1630 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.2.txt
-rw-r--r-- root/root       696 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.3.txt
-rw-r--r-- root/root       444 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.4.txt
-rw-r--r-- root/root       481 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.5.txt
-rw-r--r-- root/root       791 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.6.txt
-rw-r--r-- root/root       334 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.7.txt
-rw-r--r-- root/root      5408 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.7.txt
-rw-r--r-- root/root      1438 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.1.txt
-rw-r--r-- root/root      2925 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.2.txt
-rw-r--r-- root/root       431 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.3.txt
-rw-r--r-- root/root       921 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.4.txt
-rw-r--r-- root/root       606 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.5.txt
-rw-r--r-- root/root       621 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.6.txt
-rw-r--r-- root/root      6351 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.8.txt
-rw-r--r-- root/root      2461 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.1.txt
-rw-r--r-- root/root      2706 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.2.txt
-rw-r--r-- root/root      1958 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.3.txt
-rw-r--r-- root/root       887 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.4.txt
-rw-r--r-- root/root       731 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.5.txt
-rw-r--r-- root/root       432 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.6.txt
-rw-r--r-- root/root       371 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.7.txt
-rw-r--r-- root/root      4373 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.7.9.txt
-rw-r--r-- root/root      2454 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.0.1.txt
-rw-r--r-- root/root      1250 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.0.2.txt
-rw-r--r-- root/root       424 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.0.3.txt
-rw-r--r-- root/root     11072 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.0.txt
-rw-r--r-- root/root      3577 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.1.txt
-rw-r--r-- root/root       991 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.2.txt
-rw-r--r-- root/root      1740 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.3.txt
-rw-r--r-- root/root       337 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.4.txt
-rw-r--r-- root/root      1940 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.5.txt
-rw-r--r-- root/root      1563 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.6.txt
-rw-r--r-- root/root      9624 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.1.txt
-rw-r--r-- root/root      4561 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.2.1.txt
-rw-r--r-- root/root      2438 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.2.2.txt
-rw-r--r-- root/root       672 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.2.3.txt
-rw-r--r-- root/root     22140 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.2.txt
-rw-r--r-- root/root       433 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.3.1.txt
-rw-r--r-- root/root      2406 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.3.2.txt
-rw-r--r-- root/root      1778 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.3.3.txt
-rw-r--r-- root/root       700 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.3.4.txt
-rw-r--r-- root/root     18336 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.3.txt
-rw-r--r-- root/root      3012 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.1.txt
-rw-r--r-- root/root      3294 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.2.txt
-rw-r--r-- root/root      2208 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.3.txt
-rw-r--r-- root/root       342 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.4.txt
-rw-r--r-- root/root       421 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.5.txt
-rw-r--r-- root/root     21258 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.4.txt
-rw-r--r-- root/root       254 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.1.txt
-rw-r--r-- root/root       656 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.2.txt
-rw-r--r-- root/root       859 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.3.txt
-rw-r--r-- root/root      1912 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.4.txt
-rw-r--r-- root/root      1466 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.5.txt
-rw-r--r-- root/root      1686 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.6.txt
-rw-r--r-- root/root     20348 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.8.5.txt
-rw-r--r-- root/root     15197 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.0.txt
-rw-r--r-- root/root      2409 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.1.txt
-rw-r--r-- root/root      2807 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.2.txt
-rw-r--r-- root/root       635 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.3.txt
-rw-r--r-- root/root       607 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.4.txt
-rw-r--r-- root/root      1678 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/1.9.5.txt
-rw-r--r-- root/root     15911 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.0.txt
-rw-r--r-- root/root      5171 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.1.txt
-rw-r--r-- root/root      1350 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.2.txt
-rw-r--r-- root/root       592 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.3.txt
-rw-r--r-- root/root       153 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.4.txt
-rw-r--r-- root/root      1678 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.0.5.txt
-rw-r--r-- root/root     17336 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.1.0.txt
-rw-r--r-- root/root      1806 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.1.1.txt
-rw-r--r-- root/root       768 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.1.2.txt
-rw-r--r-- root/root       970 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.1.3.txt
-rw-r--r-- root/root      1678 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.1.4.txt
-rw-r--r-- root/root     30132 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.0.txt
-rw-r--r-- root/root      5730 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.1.txt
-rw-r--r-- root/root      5298 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.2.txt
-rw-r--r-- root/root      2353 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.3.txt
-rw-r--r-- root/root       124 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.4.txt
-rw-r--r-- root/root       561 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.10.5.txt
-rw-r--r-- root/root     27992 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.11.0.txt
-rw-r--r-- root/root      6815 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.11.1.txt
-rw-r--r-- root/root       479 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.11.2.txt
-rw-r--r-- root/root       124 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.11.3.txt
-rw-r--r-- root/root       561 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.11.4.txt
-rw-r--r-- root/root     22093 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.0.txt
-rw-r--r-- root/root      1611 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.1.txt
-rw-r--r-- root/root      3614 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.2.txt
-rw-r--r-- root/root      2539 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.3.txt
-rw-r--r-- root/root       124 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.4.txt
-rw-r--r-- root/root       561 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.12.5.txt
-rw-r--r-- root/root     28222 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.0.txt
-rw-r--r-- root/root      5026 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.1.txt
-rw-r--r-- root/root      2178 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.2.txt
-rw-r--r-- root/root      2388 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.3.txt
-rw-r--r-- root/root      1078 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.4.txt
-rw-r--r-- root/root       124 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.5.txt
-rw-r--r-- root/root       561 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.6.txt
-rw-r--r-- root/root       780 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.13.7.txt
-rw-r--r-- root/root     22728 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.0.txt
-rw-r--r-- root/root       124 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.1.txt
-rw-r--r-- root/root      4486 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.2.txt
-rw-r--r-- root/root      4010 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.4.txt
-rw-r--r-- root/root       578 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.5.txt
-rw-r--r-- root/root      2144 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.14.6.txt
-rw-r--r-- root/root     21971 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.15.0.txt
-rw-r--r-- root/root      3434 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.15.1.txt
-rw-r--r-- root/root      1894 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.15.2.txt
-rw-r--r-- root/root       210 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.15.3.txt
-rw-r--r-- root/root       482 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.15.4.txt
-rw-r--r-- root/root     20744 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.0.txt
-rw-r--r-- root/root       305 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.1.txt
-rw-r--r-- root/root      1083 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.2.txt
-rw-r--r-- root/root      1757 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.4.txt
-rw-r--r-- root/root       210 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.5.txt
-rw-r--r-- root/root       333 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.16.6.txt
-rw-r--r-- root/root     17884 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.0.txt
-rw-r--r-- root/root       617 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.1.txt
-rw-r--r-- root/root       493 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.2.txt
-rw-r--r-- root/root       490 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.3.txt
-rw-r--r-- root/root       520 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.4.txt
-rw-r--r-- root/root       828 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.5.txt
-rw-r--r-- root/root       511 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.17.6.txt
-rw-r--r-- root/root     26784 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.0.txt
-rw-r--r-- root/root       227 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.1.txt
-rw-r--r-- root/root       343 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.4.txt
-rw-r--r-- root/root       207 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.18.5.txt
-rw-r--r-- root/root     28138 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.0.txt
-rw-r--r-- root/root       227 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.1.txt
-rw-r--r-- root/root      4446 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.2.txt
-rw-r--r-- root/root       343 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.4.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.5.txt
-rw-r--r-- root/root       221 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.19.6.txt
-rw-r--r-- root/root     13338 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.2.0.txt
-rw-r--r-- root/root      1674 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.2.1.txt
-rw-r--r-- root/root      2357 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.2.2.txt
-rw-r--r-- root/root       284 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.2.3.txt
-rw-r--r-- root/root     32536 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.0.txt
-rw-r--r-- root/root       616 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.1.txt
-rw-r--r-- root/root       828 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.4.txt
-rw-r--r-- root/root       230 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.20.5.txt
-rw-r--r-- root/root     20130 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.21.0.txt
-rw-r--r-- root/root       530 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.21.1.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.21.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.21.3.txt
-rw-r--r-- root/root       239 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.21.4.txt
-rw-r--r-- root/root     26979 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.0.txt
-rw-r--r-- root/root      6233 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.1.txt
-rw-r--r-- root/root       377 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.4.txt
-rw-r--r-- root/root       248 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.22.5.txt
-rw-r--r-- root/root     13943 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.23.0.txt
-rw-r--r-- root/root       377 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.23.1.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.23.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.23.3.txt
-rw-r--r-- root/root       257 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.23.4.txt
-rw-r--r-- root/root     17750 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.24.0.txt
-rw-r--r-- root/root       377 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.24.1.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.24.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.24.3.txt
-rw-r--r-- root/root       266 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.24.4.txt
-rw-r--r-- root/root     16410 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.0.txt
-rw-r--r-- root/root      2141 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.1.txt
-rw-r--r-- root/root      2494 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.4.txt
-rw-r--r-- root/root       275 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.25.5.txt
-rw-r--r-- root/root     14305 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.26.0.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.26.1.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.26.2.txt
-rw-r--r-- root/root       284 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.26.3.txt
-rw-r--r-- root/root     23519 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.27.0.txt
-rw-r--r-- root/root       293 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.27.1.txt
-rw-r--r-- root/root      9709 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.28.0.txt
-rw-r--r-- root/root       302 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.28.1.txt
-rw-r--r-- root/root     23314 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.29.0.txt
-rw-r--r-- root/root       487 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.29.1.txt
-rw-r--r-- root/root       331 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.29.2.txt
-rw-r--r-- root/root       311 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.29.3.txt
-rw-r--r-- root/root     12859 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.0.txt
-rw-r--r-- root/root      1998 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.1.txt
-rw-r--r-- root/root       711 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.10.txt
-rw-r--r-- root/root      3009 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.2.txt
-rw-r--r-- root/root      1523 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.3.txt
-rw-r--r-- root/root      1150 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.4.txt
-rw-r--r-- root/root      1767 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.5.txt
-rw-r--r-- root/root       400 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.6.txt
-rw-r--r-- root/root       762 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.7.txt
-rw-r--r-- root/root       814 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.8.txt
-rw-r--r-- root/root       284 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.3.9.txt
-rw-r--r-- root/root     17380 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.0.txt
-rw-r--r-- root/root      1967 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.1.txt
-rw-r--r-- root/root       320 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.2.txt
-rw-r--r-- root/root       865 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.3.txt
-rw-r--r-- root/root       684 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.4.txt
-rw-r--r-- root/root       445 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.5.txt
-rw-r--r-- root/root      2252 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.30.6.txt
-rw-r--r-- root/root     15390 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.0.txt
-rw-r--r-- root/root       895 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.1.txt
-rw-r--r-- root/root       207 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.2.txt
-rw-r--r-- root/root       136 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.3.txt
-rw-r--r-- root/root       207 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.4.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.31.5.txt
-rw-r--r-- root/root     17430 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.32.0.txt
-rw-r--r-- root/root       221 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.32.1.txt
-rw-r--r-- root/root       136 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.32.2.txt
-rw-r--r-- root/root       221 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.32.3.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.32.4.txt
-rw-r--r-- root/root     12237 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.0.txt
-rw-r--r-- root/root      5164 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.1.txt
-rw-r--r-- root/root       500 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.2.txt
-rw-r--r-- root/root       136 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.3.txt
-rw-r--r-- root/root       230 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.4.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.33.5.txt
-rw-r--r-- root/root     18182 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.0.txt
-rw-r--r-- root/root       794 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.1.txt
-rw-r--r-- root/root       239 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.2.txt
-rw-r--r-- root/root       136 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.3.txt
-rw-r--r-- root/root       239 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.4.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.34.5.txt
-rw-r--r-- root/root     18055 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.0.txt
-rw-r--r-- root/root       195 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.1.txt
-rw-r--r-- root/root       248 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.2.txt
-rw-r--r-- root/root       136 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.3.txt
-rw-r--r-- root/root       248 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.4.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.35.5.txt
-rw-r--r-- root/root     19129 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.36.0.txt
-rw-r--r-- root/root      1208 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.36.1.txt
-rw-r--r-- root/root      2142 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.36.2.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.36.3.txt
-rw-r--r-- root/root     14902 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.37.0.txt
-rw-r--r-- root/root       580 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.37.1.txt
-rw-r--r-- root/root      3223 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.37.2.txt
-rw-r--r-- root/root      1718 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.37.3.txt
-rw-r--r-- root/root      2543 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.37.4.txt
-rw-r--r-- root/root     16057 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.38.0.txt
-rw-r--r-- root/root       167 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.38.1.txt
-rw-r--r-- root/root      2366 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.38.2.txt
-rw-r--r-- root/root     13163 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.39.0.txt
-rw-r--r-- root/root     22110 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.0.txt
-rw-r--r-- root/root      1654 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.1.txt
-rw-r--r-- root/root       711 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.10.txt
-rw-r--r-- root/root       424 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.11.txt
-rw-r--r-- root/root       479 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.12.txt
-rw-r--r-- root/root      1954 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.2.txt
-rw-r--r-- root/root      3066 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.3.txt
-rw-r--r-- root/root      1230 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.4.txt
-rw-r--r-- root/root      1066 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.5.txt
-rw-r--r-- root/root       744 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.6.txt
-rw-r--r-- root/root      2213 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.7.txt
-rw-r--r-- root/root       704 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.8.txt
-rw-r--r-- root/root       284 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.4.9.txt
-rw-r--r-- root/root     26158 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.0.txt
-rw-r--r-- root/root      2861 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.1.txt
-rw-r--r-- root/root      2654 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.2.txt
-rw-r--r-- root/root       565 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.3.txt
-rw-r--r-- root/root       709 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.4.txt
-rw-r--r-- root/root       420 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.5.txt
-rw-r--r-- root/root       475 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.5.6.txt
-rw-r--r-- root/root     16434 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.0.txt
-rw-r--r-- root/root       705 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.1.txt
-rw-r--r-- root/root      2678 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.2.txt
-rw-r--r-- root/root      4904 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.3.txt
-rw-r--r-- root/root      2163 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.4.txt
-rw-r--r-- root/root      2542 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.5.txt
-rw-r--r-- root/root       420 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.6.txt
-rw-r--r-- root/root       475 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.6.7.txt
-rw-r--r-- root/root     17498 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.0.txt
-rw-r--r-- root/root      3533 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.1.txt
-rw-r--r-- root/root      1739 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.2.txt
-rw-r--r-- root/root      2597 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.3.txt
-rw-r--r-- root/root       420 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.4.txt
-rw-r--r-- root/root       544 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.5.txt
-rw-r--r-- root/root       951 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.7.6.txt
-rw-r--r-- root/root     19677 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.0.txt
-rw-r--r-- root/root       255 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.1.txt
-rw-r--r-- root/root      2704 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.2.txt
-rw-r--r-- root/root      4433 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.3.txt
-rw-r--r-- root/root      3061 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.4.txt
-rw-r--r-- root/root       475 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.5.txt
-rw-r--r-- root/root       122 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.8.6.txt
-rw-r--r-- root/root     21836 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.0.txt
-rw-r--r-- root/root      4930 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.1.txt
-rw-r--r-- root/root       427 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.2.txt
-rw-r--r-- root/root      7466 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.3.txt
-rw-r--r-- root/root      4384 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.4.txt
-rw-r--r-- root/root       122 2022-12-12 01:07 ./usr/share/doc/git/RelNotes/2.9.5.txt
-rw-r--r-- root/root      3941 2022-12-12 20:53 ./usr/share/doc/git/changelog.Debian.gz
-rw-r--r-- root/root    958393 2022-12-12 20:53 ./usr/share/doc/git/changelog.gz
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/
-rw-r--r-- root/root      2113 2022-12-12 01:07 ./usr/share/doc/git/contrib/README
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/buildsystems/
-rw-r--r-- root/root     37341 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/CMakeLists.txt
-rw-r--r-- root/root      1102 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/Generators.pm
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/buildsystems/Generators/
-rw-r--r-- root/root      5063 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/Generators/QMake.pm
-rw-r--r-- root/root     14256 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/Generators/Vcproj.pm
-rw-r--r-- root/root     15287 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/Generators/Vcxproj.pm
-rw-r--r-- root/root     12244 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/engine.pl
-rw-r--r-- root/root      1208 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/generate
-rw-r--r-- root/root      6675 2022-12-12 01:07 ./usr/share/doc/git/contrib/buildsystems/parse.pl
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/coccinelle/
-rw-r--r-- root/root      4278 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/README
-rw-r--r-- root/root      2146 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/array.cocci
-rw-r--r-- root/root      1024 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/commit.cocci
-rw-r--r-- root/root       218 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/equals-null.cocci
-rw-r--r-- root/root       266 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/flex_alloc.cocci
-rw-r--r-- root/root       362 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/free.cocci
-rw-r--r-- root/root       254 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/hashmap.cocci
-rw-r--r-- root/root      1626 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/index-compatibility.cocci
-rw-r--r-- root/root       235 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/index-compatibility.pending.cocci
-rw-r--r-- root/root      1122 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/object_id.cocci
-rw-r--r-- root/root        36 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/preincr.cocci
-rw-r--r-- root/root       610 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/qsort.cocci
-rw-r--r-- root/root      7467 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/spatchcache
-rw-r--r-- root/root       843 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/strbuf.cocci
-rw-r--r-- root/root       257 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/swap.cocci
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/coccinelle/tests/
-rw-r--r-- root/root       104 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/tests/free.c
-rw-r--r-- root/root        92 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/tests/free.res
-rw-r--r-- root/root      1718 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/tests/unused.c
-rw-r--r-- root/root       740 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/tests/unused.res
-rw-r--r-- root/root      1832 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/the_repository.pending.cocci
-rw-r--r-- root/root       921 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/unused.cocci
-rw-r--r-- root/root        96 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/xcalloc.cocci
-rw-r--r-- root/root       295 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/xopen.cocci
-rw-r--r-- root/root        70 2022-12-12 01:07 ./usr/share/doc/git/contrib/coccinelle/xstrdup_or_null.cocci
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/contacts/
-rw-r--r-- root/root      1759 2022-12-12 01:07 ./usr/share/doc/git/contrib/contacts/Makefile
-rw-r--r-- root/root      4509 2022-12-12 01:07 ./usr/share/doc/git/contrib/contacts/git-contacts
-rw-r--r-- root/root      2584 2022-12-12 01:07 ./usr/share/doc/git/contrib/contacts/git-contacts.txt
-rw-r--r-- root/root      2097 2022-12-12 01:07 ./usr/share/doc/git/contrib/coverage-diff.sh
drwxr-xr-x root/root         0 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/credential/gnome-keyring/
-rw-r--r-- root/root       489 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/gnome-keyring/Makefile
-rw-r--r-- root/root     11608 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/credential/libsecret/
-rw-r--r-- root/root       477 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/libsecret/Makefile
-rw-r--r-- root/root      8913 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret.c
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/credential/netrc/
-rw-r--r-- root/root       694 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/Makefile
-rw-r--r-- root/root     10870 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/git-credential-netrc.perl
-rw-r--r-- root/root       430 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/t-git-credential-netrc.sh
-rw-r--r-- root/root        75 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/test.command-option-gpg
-rw-r--r-- root/root        71 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/test.git-config-gpg
-rw-r--r-- root/root       337 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/test.netrc
-rw-r--r-- root/root      4214 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/netrc/test.pl
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/credential/osxkeychain/
-rw-r--r-- root/root       420 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/osxkeychain/Makefile
-rw-r--r-- root/root      4097 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/osxkeychain/git-credential-osxkeychain.c
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/credential/wincred/
-rw-r--r-- root/root       438 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/wincred/Makefile
-rw-r--r-- root/root      8190 2022-12-12 01:07 ./usr/share/doc/git/contrib/credential/wincred/git-credential-wincred.c
drwxr-xr-x root/root         0 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/
-rw-r--r-- root/root      7054 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/DiffHighlight.pm
-rw-r--r-- root/root       395 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/Makefile
-rw-r--r-- root/root      8008 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/README
-rw-r--r-- root/root       211 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/diff-highlight.perl
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/diff-highlight/t/
-rw-r--r-- root/root       482 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/t/Makefile
-rw-r--r-- root/root      6719 2022-12-12 01:07 ./usr/share/doc/git/contrib/diff-highlight/t/t9400-diff-highlight.sh
drwxr-xr-x root/root         0 2022-12-12 01:07 ./usr/share/doc/git/contrib/examples/
-rw-r--r-- root/root       765 2022-12-12 01:07 ./usr/share/doc/git/contrib/examples/README
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/fast-import/
-rw-r--r-- root/root      1451 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/git-import.perl
-rw-r--r-- root/root       724 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/git-import.sh
-rw-r--r-- root/root       476 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/git-p4.README
-rw-r--r-- root/root     11140 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/import-directories.perl
-rw-r--r-- root/root      6251 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/import-tars.perl
-rw-r--r-- root/root      2241 2022-12-12 01:07 ./usr/share/doc/git/contrib/fast-import/import-zips.py
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/git-jump/
-rw-r--r-- root/root      3556 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-jump/README
-rw-r--r-- root/root      1604 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-jump/git-jump
-rw-r--r-- root/root      4357 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-resurrect.sh
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/git-shell-commands/
-rw-r--r-- root/root       839 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-shell-commands/README
-rw-r--r-- root/root       283 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-shell-commands/help
-rw-r--r-- root/root       227 2022-12-12 01:07 ./usr/share/doc/git/contrib/git-shell-commands/list
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/hg-to-git/
-rw-r--r-- root/root      8038 2022-12-12 01:07 ./usr/share/doc/git/contrib/hg-to-git/hg-to-git.py
-rw-r--r-- root/root       890 2022-12-12 01:07 ./usr/share/doc/git/contrib/hg-to-git/hg-to-git.txt
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/hooks -> ../../../git-core/contrib/hooks
drwxr-xr-x root/root         0 2022-12-12 01:07 ./usr/share/doc/git/contrib/long-running-filter/
-rw-r--r-- root/root      3073 2022-12-12 01:07 ./usr/share/doc/git/contrib/long-running-filter/example.pl
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/persistent-https/
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/persistent-https/LICENSE -> ../../../../common-licenses/Apache-2.0
-rw-r--r-- root/root      1500 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/Makefile
-rw-r--r-- root/root      1989 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/README
-rw-r--r-- root/root      4937 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/client.go
-rw-r--r-- root/root      2424 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/main.go
-rw-r--r-- root/root      4786 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/proxy.go
-rw-r--r-- root/root      2917 2022-12-12 01:07 ./usr/share/doc/git/contrib/persistent-https/socket.go
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/remote-helpers/
-rw-r--r-- root/root       649 2022-12-12 01:07 ./usr/share/doc/git/contrib/remote-helpers/README
-rw-r--r-- root/root       422 2022-12-12 01:07 ./usr/share/doc/git/contrib/remote-helpers/git-remote-bzr
-rw-r--r-- root/root       416 2022-12-12 01:07 ./usr/share/doc/git/contrib/remote-helpers/git-remote-hg
-rw-r--r-- root/root       770 2022-12-12 01:07 ./usr/share/doc/git/contrib/remotes2config.sh
-rw-r--r-- root/root      1657 2022-12-12 01:07 ./usr/share/doc/git/contrib/rerere-train.sh
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/stats/
-rw-r--r-- root/root       708 2022-12-12 01:07 ./usr/share/doc/git/contrib/stats/git-common-hash
-rw-r--r-- root/root      1319 2022-12-12 01:07 ./usr/share/doc/git/contrib/stats/mailmap.pl
-rw-r--r-- root/root      6675 2022-12-12 01:07 ./usr/share/doc/git/contrib/stats/packinfo.pl
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/subtree/
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/subtree/COPYING -> ../../../../common-licenses/GPL-2
-rw-r--r-- root/root       566 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/INSTALL
-rw-r--r-- root/root      2533 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/Makefile
-rw-r--r-- root/root       211 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/README
-rw-r--r-- root/root     25019 2022-12-12 20:53 ./usr/share/doc/git/contrib/subtree/git-subtree
-rw-r--r-- root/root     25019 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/git-subtree.sh
-rw-r--r-- root/root     13687 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/git-subtree.txt
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/subtree/t/
-rw-r--r-- root/root      2332 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/t/Makefile
-rw-r--r-- root/root     54030 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/t/t7900-subtree.sh
-rw-r--r-- root/root      1683 2022-12-12 01:07 ./usr/share/doc/git/contrib/subtree/todo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/thunderbird-patch-inline/
-rw-r--r-- root/root       725 2022-12-12 01:07 ./usr/share/doc/git/contrib/thunderbird-patch-inline/README
-rw-r--r-- root/root      1410 2022-12-12 01:07 ./usr/share/doc/git/contrib/thunderbird-patch-inline/appp.sh
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/update-unicode/
-rw-r--r-- root/root       861 2022-12-12 01:07 ./usr/share/doc/git/contrib/update-unicode/README
-rw-r--r-- root/root       971 2022-12-12 01:07 ./usr/share/doc/git/contrib/update-unicode/update_unicode.sh
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/vscode/
-rw-r--r-- root/root       995 2022-12-12 01:07 ./usr/share/doc/git/contrib/vscode/README.md
-rw-r--r-- root/root      8776 2022-12-12 01:07 ./usr/share/doc/git/contrib/vscode/init.sh
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/doc/git/contrib/workdir/
-rw-r--r-- root/root      2402 2022-12-12 01:07 ./usr/share/doc/git/contrib/workdir/git-new-workdir
-rw-r--r-- root/root     19290 2022-12-12 20:51 ./usr/share/doc/git/copyright
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/contrib/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/contrib/hooks/
-rwxr-xr-x root/root     22069 2022-12-12 01:07 ./usr/share/git-core/contrib/hooks/post-receive-email
-rwxr-xr-x root/root      1265 2022-12-12 01:07 ./usr/share/git-core/contrib/hooks/pre-auto-gc-battery
-rwxr-xr-x root/root      6920 2022-12-12 01:07 ./usr/share/git-core/contrib/hooks/setgitperms.perl
-rwxr-xr-x root/root     11648 2022-12-12 01:07 ./usr/share/git-core/contrib/hooks/update-paranoid
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/templates/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/templates/branches/
-rw-r--r-- root/root        73 2022-12-12 20:53 ./usr/share/git-core/templates/description
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/
-rwxr-xr-x root/root       478 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/applypatch-msg.sample
-rwxr-xr-x root/root       896 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/commit-msg.sample
-rwxr-xr-x root/root      4726 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/fsmonitor-watchman.sample
-rwxr-xr-x root/root       189 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/post-update.sample
-rwxr-xr-x root/root       424 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-applypatch.sample
-rwxr-xr-x root/root      1643 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-commit.sample
-rwxr-xr-x root/root       416 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-merge-commit.sample
-rwxr-xr-x root/root      1374 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-push.sample
-rwxr-xr-x root/root      4898 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-rebase.sample
-rwxr-xr-x root/root       544 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/pre-receive.sample
-rwxr-xr-x root/root      1492 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/prepare-commit-msg.sample
-rwxr-xr-x root/root      2783 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/push-to-checkout.sample
-rwxr-xr-x root/root      3650 2022-12-12 20:53 ./usr/share/git-core/templates/hooks/update.sample
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/git-core/templates/info/
-rw-r--r-- root/root       240 2022-12-12 20:53 ./usr/share/git-core/templates/info/exclude
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/gitweb/
-rwxr-xr-x root/root    253860 2022-12-12 20:53 ./usr/share/gitweb/gitweb.cgi
lrwxrwxrwx root/root         0 2022-12-12 20:53 ./usr/share/gitweb/index.cgi -> gitweb.cgi
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/gitweb/static/
-rw-r--r-- root/root       115 2022-12-12 20:53 ./usr/share/gitweb/static/git-favicon.png
-rw-r--r-- root/root       207 2022-12-12 20:53 ./usr/share/gitweb/static/git-logo.png
-rw-r--r-- root/root     10637 2022-12-12 20:53 ./usr/share/gitweb/static/gitweb.css
-rw-r--r-- root/root     48816 2022-12-12 20:53 ./usr/share/gitweb/static/gitweb.js
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/lintian/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/lintian/overrides/
-rw-r--r-- root/root       604 2022-12-06 01:26 ./usr/share/lintian/overrides/git
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/bg/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/bg/LC_MESSAGES/
-rw-r--r-- root/root    899873 2022-12-12 20:53 ./usr/share/locale/bg/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ca/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ca/LC_MESSAGES/
-rw-r--r-- root/root    664868 2022-12-12 20:53 ./usr/share/locale/ca/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/de/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/de/LC_MESSAGES/
-rw-r--r-- root/root    670156 2022-12-12 20:53 ./usr/share/locale/de/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/el/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/el/LC_MESSAGES/
-rw-r--r-- root/root    179872 2022-12-12 20:53 ./usr/share/locale/el/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/es/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/es/LC_MESSAGES/
-rw-r--r-- root/root    640766 2022-12-12 20:53 ./usr/share/locale/es/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/fr/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/fr/LC_MESSAGES/
-rw-r--r-- root/root    669831 2022-12-12 20:53 ./usr/share/locale/fr/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/id/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/id/LC_MESSAGES/
-rw-r--r-- root/root    626235 2022-12-12 20:53 ./usr/share/locale/id/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/is/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/is/LC_MESSAGES/
-rw-r--r-- root/root      1899 2022-12-12 20:53 ./usr/share/locale/is/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/it/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/it/LC_MESSAGES/
-rw-r--r-- root/root    602752 2022-12-12 20:53 ./usr/share/locale/it/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ko/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ko/LC_MESSAGES/
-rw-r--r-- root/root    450662 2022-12-12 20:53 ./usr/share/locale/ko/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/pl/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/pl/LC_MESSAGES/
-rw-r--r-- root/root    613499 2022-12-12 20:53 ./usr/share/locale/pl/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/pt_PT/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/pt_PT/LC_MESSAGES/
-rw-r--r-- root/root    487475 2022-12-12 20:53 ./usr/share/locale/pt_PT/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ru/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/ru/LC_MESSAGES/
-rw-r--r-- root/root    485365 2022-12-12 20:53 ./usr/share/locale/ru/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/sv/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/sv/LC_MESSAGES/
-rw-r--r-- root/root    632752 2022-12-12 20:53 ./usr/share/locale/sv/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/tr/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/tr/LC_MESSAGES/
-rw-r--r-- root/root    652069 2022-12-12 20:53 ./usr/share/locale/tr/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/vi/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/vi/LC_MESSAGES/
-rw-r--r-- root/root    699692 2022-12-12 20:53 ./usr/share/locale/vi/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/zh_CN/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/zh_CN/LC_MESSAGES/
-rw-r--r-- root/root    599929 2022-12-12 20:53 ./usr/share/locale/zh_CN/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/zh_TW/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/locale/zh_TW/LC_MESSAGES/
-rw-r--r-- root/root    602212 2022-12-12 20:53 ./usr/share/locale/zh_TW/LC_MESSAGES/git.mo
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/perl5/
-rw-r--r-- root/root     48084 2022-12-12 20:53 ./usr/share/perl5/Git.pm
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/perl5/Git/
-rw-r--r-- root/root      2814 2022-12-12 20:53 ./usr/share/perl5/Git/I18N.pm
-rw-r--r-- root/root       848 2022-12-12 20:53 ./usr/share/perl5/Git/IndexInfo.pm
-rw-r--r-- root/root      3435 2022-12-12 20:53 ./usr/share/perl5/Git/LoadCPAN.pm
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/perl5/Git/LoadCPAN/
-rw-r--r-- root/root       179 2022-12-12 20:53 ./usr/share/perl5/Git/LoadCPAN/Error.pm
drwxr-xr-x root/root         0 2022-12-12 20:53 ./usr/share/perl5/Git/LoadCPAN/Mail/
-rw-r--r-- root/root       195 2022-12-12 20:53 ./usr/share/perl5/Git/LoadCPAN/Mail/Address.pm
-rw-r--r-- root/root      4180 2022-12-12 20:53 ./usr/share/perl5/Git/Packet.pm
drwxr-xr-x root/root         0 2022-12-12 20:53 ./var/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./var/lib/
drwxr-xr-x root/root         0 2022-12-12 20:53 ./var/lib/git/


+------------------------------------------------------------------------------+
| Post Build                                                                   |
+------------------------------------------------------------------------------+


+------------------------------------------------------------------------------+
| Cleanup                                                                      |
+------------------------------------------------------------------------------+

Purging /<<BUILDDIR>>
Not cleaning session: cloned chroot in use

+------------------------------------------------------------------------------+
| Summary                                                                      |
+------------------------------------------------------------------------------+

Build Architecture: armhf
Build-Space: 378344
Build-Time: 4633
Distribution: bookworm-staging
Host Architecture: armhf
Install-Time: 803
Job: git_1:2.39.0-1
Machine Architecture: armhf
Package: git
Package-Time: 5502
Source-Version: 1:2.39.0-1
Space: 378344
Status: successful
Version: 1:2.39.0-1
--------------------------------------------------------------------------------
Finished at 2022-12-28T08:35:11Z
Build needed 01:31:42, 378344k disc space